From 4dd96e0b964bc239837d759f80595c604cd4de1e Mon Sep 17 00:00:00 2001 From: mbaxter Date: Fri, 7 Jun 2024 11:18:29 -0400 Subject: [PATCH 001/141] cannon: Extract MIPS execute, signExtend logic from mips.{go,sol} (#10759) * cannon: Extract MIPS execute logic from mips.{go,sol} * cannon: Add compiler version and license to MIPSInstruction.sol * cannnon: Remove visibility modifier from library function * cannon: Extract mips sign extend functions * cannon: Move MIPS.sol comment to avoid line break, clarify comment * cannon: Run `pnpm lint:fix` * cannon: Run `pnpm semver-lock` * cannon: Run `pnpm snapshots` * cannon: Use namespace import for MIPSInstructions --- cannon/mipsevm/mips.go | 183 +----------- cannon/mipsevm/mips_instructions.go | 176 +++++++++++ packages/contracts-bedrock/semver-lock.json | 4 +- .../contracts-bedrock/src/cannon/MIPS.sol | 275 +----------------- .../src/cannon/libraries/MIPSInstructions.sol | 265 +++++++++++++++++ .../utils/DeploymentSummaryFaultProofs.sol | 2 +- .../DeploymentSummaryFaultProofsCode.sol | 6 +- 7 files changed, 458 insertions(+), 453 deletions(-) create mode 100644 cannon/mipsevm/mips_instructions.go create mode 100644 packages/contracts-bedrock/src/cannon/libraries/MIPSInstructions.sol diff --git a/cannon/mipsevm/mips.go b/cannon/mipsevm/mips.go index d43881369001..9758c1fd75e5 100644 --- a/cannon/mipsevm/mips.go +++ b/cannon/mipsevm/mips.go @@ -249,7 +249,7 @@ func (m *InstrumentedState) handleBranch(opcode uint32, insn uint32, rtReg uint3 prevPC := m.state.PC m.state.PC = m.state.NextPC // execute the delay slot first if shouldBranch { - m.state.NextPC = prevPC + 4 + (SE(insn&0xFFFF, 16) << 2) // then continue with the instruction the branch jumps to. + m.state.NextPC = prevPC + 4 + (signExtend(insn&0xFFFF, 16) << 2) // then continue with the instruction the branch jumps to. } else { m.state.NextPC = m.state.NextPC + 4 // branch not taken } @@ -358,7 +358,7 @@ func (m *InstrumentedState) mipsStep() error { rt = insn & 0xFFFF } else { // SignExtImm - rt = SE(insn&0xFFFF, 16) + rt = signExtend(insn&0xFFFF, 16) } } else if opcode >= 0x28 || opcode == 0x22 || opcode == 0x26 { // store rt value with store @@ -378,7 +378,7 @@ func (m *InstrumentedState) mipsStep() error { mem := uint32(0) if opcode >= 0x20 { // M[R[rs]+SignExtImm] - rs += SE(insn&0xFFFF, 16) + rs += signExtend(insn&0xFFFF, 16) addr := rs & 0xFFFFFFFC m.trackMemAccess(addr) mem = m.state.Memory.GetMemory(addr) @@ -391,7 +391,7 @@ func (m *InstrumentedState) mipsStep() error { } // ALU - val := execute(insn, rs, rt, mem) + val := executeMipsInstruction(insn, rs, rt, mem) fun := insn & 0x3f // 6-bits if opcode == 0 && fun >= 8 && fun < 0x1c { @@ -437,178 +437,3 @@ func (m *InstrumentedState) mipsStep() error { // write back the value to destination register return m.handleRd(rdReg, val, true) } - -func execute(insn uint32, rs uint32, rt uint32, mem uint32) uint32 { - opcode := insn >> 26 // 6-bits - - if opcode == 0 || (opcode >= 8 && opcode < 0xF) { - fun := insn & 0x3f // 6-bits - // transform ArithLogI to SPECIAL - switch opcode { - case 8: - fun = 0x20 // addi - case 9: - fun = 0x21 // addiu - case 0xA: - fun = 0x2A // slti - case 0xB: - fun = 0x2B // sltiu - case 0xC: - fun = 0x24 // andi - case 0xD: - fun = 0x25 // ori - case 0xE: - fun = 0x26 // xori - } - - switch fun { - case 0x00: // sll - return rt << ((insn >> 6) & 0x1F) - case 0x02: // srl - return rt >> ((insn >> 6) & 0x1F) - case 0x03: // sra - shamt := (insn >> 6) & 0x1F - return SE(rt>>shamt, 32-shamt) - case 0x04: // sllv - return rt << (rs & 0x1F) - case 0x06: // srlv - return rt >> (rs & 0x1F) - case 0x07: // srav - return SE(rt>>rs, 32-rs) - // functs in range [0x8, 0x1b] are handled specially by other functions - case 0x08: // jr - return rs - case 0x09: // jalr - return rs - case 0x0a: // movz - return rs - case 0x0b: // movn - return rs - case 0x0c: // syscall - return rs - // 0x0d - break not supported - case 0x0f: // sync - return rs - case 0x10: // mfhi - return rs - case 0x11: // mthi - return rs - case 0x12: // mflo - return rs - case 0x13: // mtlo - return rs - case 0x18: // mult - return rs - case 0x19: // multu - return rs - case 0x1a: // div - return rs - case 0x1b: // divu - return rs - // The rest includes transformed R-type arith imm instructions - case 0x20: // add - return rs + rt - case 0x21: // addu - return rs + rt - case 0x22: // sub - return rs - rt - case 0x23: // subu - return rs - rt - case 0x24: // and - return rs & rt - case 0x25: // or - return rs | rt - case 0x26: // xor - return rs ^ rt - case 0x27: // nor - return ^(rs | rt) - case 0x2a: // slti - if int32(rs) < int32(rt) { - return 1 - } - return 0 - case 0x2b: // sltiu - if rs < rt { - return 1 - } - return 0 - default: - panic("invalid instruction") - } - } else { - switch opcode { - // SPECIAL2 - case 0x1C: - fun := insn & 0x3f // 6-bits - switch fun { - case 0x2: // mul - return uint32(int32(rs) * int32(rt)) - case 0x20, 0x21: // clz, clo - if fun == 0x20 { - rs = ^rs - } - i := uint32(0) - for ; rs&0x80000000 != 0; i++ { - rs <<= 1 - } - return i - } - case 0x0F: // lui - return rt << 16 - case 0x20: // lb - return SE((mem>>(24-(rs&3)*8))&0xFF, 8) - case 0x21: // lh - return SE((mem>>(16-(rs&2)*8))&0xFFFF, 16) - case 0x22: // lwl - val := mem << ((rs & 3) * 8) - mask := uint32(0xFFFFFFFF) << ((rs & 3) * 8) - return (rt & ^mask) | val - case 0x23: // lw - return mem - case 0x24: // lbu - return (mem >> (24 - (rs&3)*8)) & 0xFF - case 0x25: // lhu - return (mem >> (16 - (rs&2)*8)) & 0xFFFF - case 0x26: // lwr - val := mem >> (24 - (rs&3)*8) - mask := uint32(0xFFFFFFFF) >> (24 - (rs&3)*8) - return (rt & ^mask) | val - case 0x28: // sb - val := (rt & 0xFF) << (24 - (rs&3)*8) - mask := 0xFFFFFFFF ^ uint32(0xFF<<(24-(rs&3)*8)) - return (mem & mask) | val - case 0x29: // sh - val := (rt & 0xFFFF) << (16 - (rs&2)*8) - mask := 0xFFFFFFFF ^ uint32(0xFFFF<<(16-(rs&2)*8)) - return (mem & mask) | val - case 0x2a: // swl - val := rt >> ((rs & 3) * 8) - mask := uint32(0xFFFFFFFF) >> ((rs & 3) * 8) - return (mem & ^mask) | val - case 0x2b: // sw - return rt - case 0x2e: // swr - val := rt << (24 - (rs&3)*8) - mask := uint32(0xFFFFFFFF) << (24 - (rs&3)*8) - return (mem & ^mask) | val - case 0x30: // ll - return mem - case 0x38: // sc - return rt - default: - panic("invalid instruction") - } - } - panic("invalid instruction") -} - -func SE(dat uint32, idx uint32) uint32 { - isSigned := (dat >> (idx - 1)) != 0 - signed := ((uint32(1) << (32 - idx)) - 1) << idx - mask := (uint32(1) << idx) - 1 - if isSigned { - return dat&mask | signed - } else { - return dat & mask - } -} diff --git a/cannon/mipsevm/mips_instructions.go b/cannon/mipsevm/mips_instructions.go new file mode 100644 index 000000000000..cd3920d10eb5 --- /dev/null +++ b/cannon/mipsevm/mips_instructions.go @@ -0,0 +1,176 @@ +package mipsevm + +func executeMipsInstruction(insn uint32, rs uint32, rt uint32, mem uint32) uint32 { + opcode := insn >> 26 // 6-bits + + if opcode == 0 || (opcode >= 8 && opcode < 0xF) { + fun := insn & 0x3f // 6-bits + // transform ArithLogI to SPECIAL + switch opcode { + case 8: + fun = 0x20 // addi + case 9: + fun = 0x21 // addiu + case 0xA: + fun = 0x2A // slti + case 0xB: + fun = 0x2B // sltiu + case 0xC: + fun = 0x24 // andi + case 0xD: + fun = 0x25 // ori + case 0xE: + fun = 0x26 // xori + } + + switch fun { + case 0x00: // sll + return rt << ((insn >> 6) & 0x1F) + case 0x02: // srl + return rt >> ((insn >> 6) & 0x1F) + case 0x03: // sra + shamt := (insn >> 6) & 0x1F + return signExtend(rt>>shamt, 32-shamt) + case 0x04: // sllv + return rt << (rs & 0x1F) + case 0x06: // srlv + return rt >> (rs & 0x1F) + case 0x07: // srav + return signExtend(rt>>rs, 32-rs) + // functs in range [0x8, 0x1b] are handled specially by other functions + case 0x08: // jr + return rs + case 0x09: // jalr + return rs + case 0x0a: // movz + return rs + case 0x0b: // movn + return rs + case 0x0c: // syscall + return rs + // 0x0d - break not supported + case 0x0f: // sync + return rs + case 0x10: // mfhi + return rs + case 0x11: // mthi + return rs + case 0x12: // mflo + return rs + case 0x13: // mtlo + return rs + case 0x18: // mult + return rs + case 0x19: // multu + return rs + case 0x1a: // div + return rs + case 0x1b: // divu + return rs + // The rest includes transformed R-type arith imm instructions + case 0x20: // add + return rs + rt + case 0x21: // addu + return rs + rt + case 0x22: // sub + return rs - rt + case 0x23: // subu + return rs - rt + case 0x24: // and + return rs & rt + case 0x25: // or + return rs | rt + case 0x26: // xor + return rs ^ rt + case 0x27: // nor + return ^(rs | rt) + case 0x2a: // slti + if int32(rs) < int32(rt) { + return 1 + } + return 0 + case 0x2b: // sltiu + if rs < rt { + return 1 + } + return 0 + default: + panic("invalid instruction") + } + } else { + switch opcode { + // SPECIAL2 + case 0x1C: + fun := insn & 0x3f // 6-bits + switch fun { + case 0x2: // mul + return uint32(int32(rs) * int32(rt)) + case 0x20, 0x21: // clz, clo + if fun == 0x20 { + rs = ^rs + } + i := uint32(0) + for ; rs&0x80000000 != 0; i++ { + rs <<= 1 + } + return i + } + case 0x0F: // lui + return rt << 16 + case 0x20: // lb + return signExtend((mem>>(24-(rs&3)*8))&0xFF, 8) + case 0x21: // lh + return signExtend((mem>>(16-(rs&2)*8))&0xFFFF, 16) + case 0x22: // lwl + val := mem << ((rs & 3) * 8) + mask := uint32(0xFFFFFFFF) << ((rs & 3) * 8) + return (rt & ^mask) | val + case 0x23: // lw + return mem + case 0x24: // lbu + return (mem >> (24 - (rs&3)*8)) & 0xFF + case 0x25: // lhu + return (mem >> (16 - (rs&2)*8)) & 0xFFFF + case 0x26: // lwr + val := mem >> (24 - (rs&3)*8) + mask := uint32(0xFFFFFFFF) >> (24 - (rs&3)*8) + return (rt & ^mask) | val + case 0x28: // sb + val := (rt & 0xFF) << (24 - (rs&3)*8) + mask := 0xFFFFFFFF ^ uint32(0xFF<<(24-(rs&3)*8)) + return (mem & mask) | val + case 0x29: // sh + val := (rt & 0xFFFF) << (16 - (rs&2)*8) + mask := 0xFFFFFFFF ^ uint32(0xFFFF<<(16-(rs&2)*8)) + return (mem & mask) | val + case 0x2a: // swl + val := rt >> ((rs & 3) * 8) + mask := uint32(0xFFFFFFFF) >> ((rs & 3) * 8) + return (mem & ^mask) | val + case 0x2b: // sw + return rt + case 0x2e: // swr + val := rt << (24 - (rs&3)*8) + mask := uint32(0xFFFFFFFF) << (24 - (rs&3)*8) + return (mem & ^mask) | val + case 0x30: // ll + return mem + case 0x38: // sc + return rt + default: + panic("invalid instruction") + } + } + panic("invalid instruction") +} + +func signExtend(dat uint32, idx uint32) uint32 { + isSigned := (dat >> (idx - 1)) != 0 + signed := ((uint32(1) << (32 - idx)) - 1) << idx + mask := (uint32(1) << idx) - 1 + if isSigned { + return dat&mask | signed + } else { + return dat & mask + } +} diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index 3af0be3f8faa..594077df3fbb 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -124,8 +124,8 @@ "sourceCodeHash": "0x3ff4a3f21202478935412d47fd5ef7f94a170402ddc50e5c062013ce5544c83f" }, "src/cannon/MIPS.sol": { - "initCodeHash": "0xa5d36fc67170ad87322f358f612695f642757bbf5280800d5d878da21402579a", - "sourceCodeHash": "0x75701f3efb7a9c16079ba0a4ed2867999aab7d95bfa0fe5ebb131cfc278593aa" + "initCodeHash": "0x1c5dbe83af31e70feb906e2bda2bb1d78d3d15012ec6b11ba5643785657af2a6", + "sourceCodeHash": "0x9bdc97ff4e51fdec7c3e2113d5b60cd64eeb121a51122bea972789d4a5ac3dfa" }, "src/cannon/PreimageOracle.sol": { "initCodeHash": "0xe5db668fe41436f53995e910488c7c140766ba8745e19743773ebab508efd090", diff --git a/packages/contracts-bedrock/src/cannon/MIPS.sol b/packages/contracts-bedrock/src/cannon/MIPS.sol index b47fb9313f7e..78064149bfaf 100644 --- a/packages/contracts-bedrock/src/cannon/MIPS.sol +++ b/packages/contracts-bedrock/src/cannon/MIPS.sol @@ -4,6 +4,7 @@ pragma solidity 0.8.15; import { ISemver } from "src/universal/ISemver.sol"; import { IPreimageOracle } from "./interfaces/IPreimageOracle.sol"; import { PreimageKeyLib } from "./PreimageKeyLib.sol"; +import "src/cannon/libraries/MIPSInstructions.sol" as ins; /// @title MIPS /// @notice The MIPS contract emulates a single MIPS instruction. @@ -44,7 +45,7 @@ contract MIPS is ISemver { /// @notice The semantic version of the MIPS contract. /// @custom:semver 1.0.1 - string public constant version = "1.0.1"; + string public constant version = "1.1.0-beta.1"; uint32 internal constant FD_STDIN = 0; uint32 internal constant FD_STDOUT = 1; @@ -71,16 +72,6 @@ contract MIPS is ISemver { oracle_ = ORACLE; } - /// @notice Extends the value leftwards with its most significant bit (sign extension). - function SE(uint32 _dat, uint32 _idx) internal pure returns (uint32 out_) { - unchecked { - bool isSigned = (_dat >> (_idx - 1)) != 0; - uint256 signed = ((1 << (32 - _idx)) - 1) << _idx; - uint256 mask = (1 << _idx) - 1; - return uint32(_dat & mask | (isSigned ? signed : 0)); - } - } - /// @notice Computes the hash of the MIPS state. /// @return out_ The hashed MIPS state. function outputState() internal returns (bytes32 out_) { @@ -364,7 +355,7 @@ contract MIPS is ISemver { // If we should branch, update the PC to the branch target // Otherwise, proceed to the next instruction if (shouldBranch) { - state.nextPC = prevPC + 4 + (SE(_insn & 0xFFFF, 16) << 2); + state.nextPC = prevPC + 4 + (ins.signExtend(_insn & 0xFFFF, 16) << 2); } else { state.nextPC = state.nextPC + 4; } @@ -728,7 +719,7 @@ contract MIPS is ISemver { rt = insn & 0xFFFF; } else { // SignExtImm - rt = SE(insn & 0xFFFF, 16); + rt = ins.signExtend(insn & 0xFFFF, 16); } } else if (opcode >= 0x28 || opcode == 0x22 || opcode == 0x26) { // store rt value with store @@ -748,7 +739,7 @@ contract MIPS is ISemver { uint32 mem; if (opcode >= 0x20) { // M[R[rs]+SignExtImm] - rs += SE(insn & 0xFFFF, 16); + rs += ins.signExtend(insn & 0xFFFF, 16); uint32 addr = rs & 0xFFFFFFFC; mem = readMem(addr, 1); if (opcode >= 0x28 && opcode != 0x30) { @@ -760,7 +751,8 @@ contract MIPS is ISemver { } // ALU - uint32 val = execute(insn, rs, rt, mem) & 0xffFFffFF; // swr outputs more than 4 bytes without the mask + // Note: swr outputs more than 4 bytes without the mask 0xffFFffFF + uint32 val = ins.executeMipsInstruction(insn, rs, rt, mem) & 0xffFFffFF; uint32 func = insn & 0x3f; // 6-bits if (opcode == 0 && func >= 8 && func < 0x1c) { @@ -804,257 +796,4 @@ contract MIPS is ISemver { return handleRd(rdReg, val, true); } } - - /// @notice Execute an instruction. - function execute(uint32 insn, uint32 rs, uint32 rt, uint32 mem) internal pure returns (uint32 out) { - unchecked { - uint32 opcode = insn >> 26; // 6-bits - - if (opcode == 0 || (opcode >= 8 && opcode < 0xF)) { - uint32 func = insn & 0x3f; // 6-bits - assembly { - // transform ArithLogI to SPECIAL - switch opcode - // addi - case 0x8 { func := 0x20 } - // addiu - case 0x9 { func := 0x21 } - // stli - case 0xA { func := 0x2A } - // sltiu - case 0xB { func := 0x2B } - // andi - case 0xC { func := 0x24 } - // ori - case 0xD { func := 0x25 } - // xori - case 0xE { func := 0x26 } - } - - // sll - if (func == 0x00) { - return rt << ((insn >> 6) & 0x1F); - } - // srl - else if (func == 0x02) { - return rt >> ((insn >> 6) & 0x1F); - } - // sra - else if (func == 0x03) { - uint32 shamt = (insn >> 6) & 0x1F; - return SE(rt >> shamt, 32 - shamt); - } - // sllv - else if (func == 0x04) { - return rt << (rs & 0x1F); - } - // srlv - else if (func == 0x6) { - return rt >> (rs & 0x1F); - } - // srav - else if (func == 0x07) { - return SE(rt >> rs, 32 - rs); - } - // functs in range [0x8, 0x1b] are handled specially by other functions - // Explicitly enumerate each funct in range to reduce code diff against Go Vm - // jr - else if (func == 0x08) { - return rs; - } - // jalr - else if (func == 0x09) { - return rs; - } - // movz - else if (func == 0x0a) { - return rs; - } - // movn - else if (func == 0x0b) { - return rs; - } - // syscall - else if (func == 0x0c) { - return rs; - } - // 0x0d - break not supported - // sync - else if (func == 0x0f) { - return rs; - } - // mfhi - else if (func == 0x10) { - return rs; - } - // mthi - else if (func == 0x11) { - return rs; - } - // mflo - else if (func == 0x12) { - return rs; - } - // mtlo - else if (func == 0x13) { - return rs; - } - // mult - else if (func == 0x18) { - return rs; - } - // multu - else if (func == 0x19) { - return rs; - } - // div - else if (func == 0x1a) { - return rs; - } - // divu - else if (func == 0x1b) { - return rs; - } - // The rest includes transformed R-type arith imm instructions - // add - else if (func == 0x20) { - return (rs + rt); - } - // addu - else if (func == 0x21) { - return (rs + rt); - } - // sub - else if (func == 0x22) { - return (rs - rt); - } - // subu - else if (func == 0x23) { - return (rs - rt); - } - // and - else if (func == 0x24) { - return (rs & rt); - } - // or - else if (func == 0x25) { - return (rs | rt); - } - // xor - else if (func == 0x26) { - return (rs ^ rt); - } - // nor - else if (func == 0x27) { - return ~(rs | rt); - } - // slti - else if (func == 0x2a) { - return int32(rs) < int32(rt) ? 1 : 0; - } - // sltiu - else if (func == 0x2b) { - return rs < rt ? 1 : 0; - } else { - revert("invalid instruction"); - } - } else { - // SPECIAL2 - if (opcode == 0x1C) { - uint32 func = insn & 0x3f; // 6-bits - // mul - if (func == 0x2) { - return uint32(int32(rs) * int32(rt)); - } - // clz, clo - else if (func == 0x20 || func == 0x21) { - if (func == 0x20) { - rs = ~rs; - } - uint32 i = 0; - while (rs & 0x80000000 != 0) { - i++; - rs <<= 1; - } - return i; - } - } - // lui - else if (opcode == 0x0F) { - return rt << 16; - } - // lb - else if (opcode == 0x20) { - return SE((mem >> (24 - (rs & 3) * 8)) & 0xFF, 8); - } - // lh - else if (opcode == 0x21) { - return SE((mem >> (16 - (rs & 2) * 8)) & 0xFFFF, 16); - } - // lwl - else if (opcode == 0x22) { - uint32 val = mem << ((rs & 3) * 8); - uint32 mask = uint32(0xFFFFFFFF) << ((rs & 3) * 8); - return (rt & ~mask) | val; - } - // lw - else if (opcode == 0x23) { - return mem; - } - // lbu - else if (opcode == 0x24) { - return (mem >> (24 - (rs & 3) * 8)) & 0xFF; - } - // lhu - else if (opcode == 0x25) { - return (mem >> (16 - (rs & 2) * 8)) & 0xFFFF; - } - // lwr - else if (opcode == 0x26) { - uint32 val = mem >> (24 - (rs & 3) * 8); - uint32 mask = uint32(0xFFFFFFFF) >> (24 - (rs & 3) * 8); - return (rt & ~mask) | val; - } - // sb - else if (opcode == 0x28) { - uint32 val = (rt & 0xFF) << (24 - (rs & 3) * 8); - uint32 mask = 0xFFFFFFFF ^ uint32(0xFF << (24 - (rs & 3) * 8)); - return (mem & mask) | val; - } - // sh - else if (opcode == 0x29) { - uint32 val = (rt & 0xFFFF) << (16 - (rs & 2) * 8); - uint32 mask = 0xFFFFFFFF ^ uint32(0xFFFF << (16 - (rs & 2) * 8)); - return (mem & mask) | val; - } - // swl - else if (opcode == 0x2a) { - uint32 val = rt >> ((rs & 3) * 8); - uint32 mask = uint32(0xFFFFFFFF) >> ((rs & 3) * 8); - return (mem & ~mask) | val; - } - // sw - else if (opcode == 0x2b) { - return rt; - } - // swr - else if (opcode == 0x2e) { - uint32 val = rt << (24 - (rs & 3) * 8); - uint32 mask = uint32(0xFFFFFFFF) << (24 - (rs & 3) * 8); - return (mem & ~mask) | val; - } - // ll - else if (opcode == 0x30) { - return mem; - } - // sc - else if (opcode == 0x38) { - return rt; - } else { - revert("invalid instruction"); - } - } - revert("invalid instruction"); - } - } } diff --git a/packages/contracts-bedrock/src/cannon/libraries/MIPSInstructions.sol b/packages/contracts-bedrock/src/cannon/libraries/MIPSInstructions.sol new file mode 100644 index 000000000000..bf2f5bcd165a --- /dev/null +++ b/packages/contracts-bedrock/src/cannon/libraries/MIPSInstructions.sol @@ -0,0 +1,265 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +/// @notice Execute an instruction. +function executeMipsInstruction(uint32 insn, uint32 rs, uint32 rt, uint32 mem) pure returns (uint32 out) { + unchecked { + uint32 opcode = insn >> 26; // 6-bits + + if (opcode == 0 || (opcode >= 8 && opcode < 0xF)) { + uint32 func = insn & 0x3f; // 6-bits + assembly { + // transform ArithLogI to SPECIAL + switch opcode + // addi + case 0x8 { func := 0x20 } + // addiu + case 0x9 { func := 0x21 } + // stli + case 0xA { func := 0x2A } + // sltiu + case 0xB { func := 0x2B } + // andi + case 0xC { func := 0x24 } + // ori + case 0xD { func := 0x25 } + // xori + case 0xE { func := 0x26 } + } + + // sll + if (func == 0x00) { + return rt << ((insn >> 6) & 0x1F); + } + // srl + else if (func == 0x02) { + return rt >> ((insn >> 6) & 0x1F); + } + // sra + else if (func == 0x03) { + uint32 shamt = (insn >> 6) & 0x1F; + return signExtend(rt >> shamt, 32 - shamt); + } + // sllv + else if (func == 0x04) { + return rt << (rs & 0x1F); + } + // srlv + else if (func == 0x6) { + return rt >> (rs & 0x1F); + } + // srav + else if (func == 0x07) { + return signExtend(rt >> rs, 32 - rs); + } + // functs in range [0x8, 0x1b] are handled specially by other functions + // Explicitly enumerate each funct in range to reduce code diff against Go Vm + // jr + else if (func == 0x08) { + return rs; + } + // jalr + else if (func == 0x09) { + return rs; + } + // movz + else if (func == 0x0a) { + return rs; + } + // movn + else if (func == 0x0b) { + return rs; + } + // syscall + else if (func == 0x0c) { + return rs; + } + // 0x0d - break not supported + // sync + else if (func == 0x0f) { + return rs; + } + // mfhi + else if (func == 0x10) { + return rs; + } + // mthi + else if (func == 0x11) { + return rs; + } + // mflo + else if (func == 0x12) { + return rs; + } + // mtlo + else if (func == 0x13) { + return rs; + } + // mult + else if (func == 0x18) { + return rs; + } + // multu + else if (func == 0x19) { + return rs; + } + // div + else if (func == 0x1a) { + return rs; + } + // divu + else if (func == 0x1b) { + return rs; + } + // The rest includes transformed R-type arith imm instructions + // add + else if (func == 0x20) { + return (rs + rt); + } + // addu + else if (func == 0x21) { + return (rs + rt); + } + // sub + else if (func == 0x22) { + return (rs - rt); + } + // subu + else if (func == 0x23) { + return (rs - rt); + } + // and + else if (func == 0x24) { + return (rs & rt); + } + // or + else if (func == 0x25) { + return (rs | rt); + } + // xor + else if (func == 0x26) { + return (rs ^ rt); + } + // nor + else if (func == 0x27) { + return ~(rs | rt); + } + // slti + else if (func == 0x2a) { + return int32(rs) < int32(rt) ? 1 : 0; + } + // sltiu + else if (func == 0x2b) { + return rs < rt ? 1 : 0; + } else { + revert("invalid instruction"); + } + } else { + // SPECIAL2 + if (opcode == 0x1C) { + uint32 func = insn & 0x3f; // 6-bits + // mul + if (func == 0x2) { + return uint32(int32(rs) * int32(rt)); + } + // clz, clo + else if (func == 0x20 || func == 0x21) { + if (func == 0x20) { + rs = ~rs; + } + uint32 i = 0; + while (rs & 0x80000000 != 0) { + i++; + rs <<= 1; + } + return i; + } + } + // lui + else if (opcode == 0x0F) { + return rt << 16; + } + // lb + else if (opcode == 0x20) { + return signExtend((mem >> (24 - (rs & 3) * 8)) & 0xFF, 8); + } + // lh + else if (opcode == 0x21) { + return signExtend((mem >> (16 - (rs & 2) * 8)) & 0xFFFF, 16); + } + // lwl + else if (opcode == 0x22) { + uint32 val = mem << ((rs & 3) * 8); + uint32 mask = uint32(0xFFFFFFFF) << ((rs & 3) * 8); + return (rt & ~mask) | val; + } + // lw + else if (opcode == 0x23) { + return mem; + } + // lbu + else if (opcode == 0x24) { + return (mem >> (24 - (rs & 3) * 8)) & 0xFF; + } + // lhu + else if (opcode == 0x25) { + return (mem >> (16 - (rs & 2) * 8)) & 0xFFFF; + } + // lwr + else if (opcode == 0x26) { + uint32 val = mem >> (24 - (rs & 3) * 8); + uint32 mask = uint32(0xFFFFFFFF) >> (24 - (rs & 3) * 8); + return (rt & ~mask) | val; + } + // sb + else if (opcode == 0x28) { + uint32 val = (rt & 0xFF) << (24 - (rs & 3) * 8); + uint32 mask = 0xFFFFFFFF ^ uint32(0xFF << (24 - (rs & 3) * 8)); + return (mem & mask) | val; + } + // sh + else if (opcode == 0x29) { + uint32 val = (rt & 0xFFFF) << (16 - (rs & 2) * 8); + uint32 mask = 0xFFFFFFFF ^ uint32(0xFFFF << (16 - (rs & 2) * 8)); + return (mem & mask) | val; + } + // swl + else if (opcode == 0x2a) { + uint32 val = rt >> ((rs & 3) * 8); + uint32 mask = uint32(0xFFFFFFFF) >> ((rs & 3) * 8); + return (mem & ~mask) | val; + } + // sw + else if (opcode == 0x2b) { + return rt; + } + // swr + else if (opcode == 0x2e) { + uint32 val = rt << (24 - (rs & 3) * 8); + uint32 mask = uint32(0xFFFFFFFF) << (24 - (rs & 3) * 8); + return (mem & ~mask) | val; + } + // ll + else if (opcode == 0x30) { + return mem; + } + // sc + else if (opcode == 0x38) { + return rt; + } else { + revert("invalid instruction"); + } + } + revert("invalid instruction"); + } +} + +/// @notice Extends the value leftwards with its most significant bit (sign extension). +function signExtend(uint32 _dat, uint32 _idx) pure returns (uint32 out_) { + unchecked { + bool isSigned = (_dat >> (_idx - 1)) != 0; + uint256 signed = ((1 << (32 - _idx)) - 1) << _idx; + uint256 mask = (1 << _idx) - 1; + return uint32(_dat & mask | (isSigned ? signed : 0)); + } +} diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol index fc44bd171e14..753dc3976604 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol @@ -25,7 +25,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { address internal constant l1ERC721BridgeProxyAddress = 0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865; address internal constant l1StandardBridgeAddress = 0xb7900B27Be8f0E0fF65d1C3A4671e1220437dd2b; address internal constant l1StandardBridgeProxyAddress = 0xDeF3bca8c80064589E6787477FFa7Dd616B5574F; - address internal constant mipsAddress = 0xF698388BFCDbd3f9f2F13ebC3E01471B3cc7cE83; + address internal constant mipsAddress = 0x1C0e3B8e58dd91536Caf37a6009536255A7816a6; address internal constant optimismPortal2Address = 0xfcbb237388CaF5b08175C9927a37aB6450acd535; address internal constant optimismPortalProxyAddress = 0x978e3286EB805934215a88694d80b09aDed68D90; address internal constant preimageOracleAddress = 0x3bd7E801E51d48c5d94Ea68e8B801DFFC275De75; diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol index ea8f5c621429..e72675bc8a63 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol @@ -55,11 +55,11 @@ contract DeploymentSummaryFaultProofsCode { bytes internal constant preimageOracleCode = hex"6080604052600436106101cd5760003560e01c80638dc4be11116100f7578063dd24f9bf11610095578063ec5efcbc11610064578063ec5efcbc1461065f578063f3f480d91461067f578063faf37bc7146106b2578063fef2b4ed146106c557600080fd5b8063dd24f9bf1461059f578063ddcd58de146105d2578063e03110e11461060a578063e15926111461063f57600080fd5b8063b2e67ba8116100d1578063b2e67ba814610512578063b4801e611461054a578063d18534b51461056a578063da35c6641461058a57600080fd5b80638dc4be11146104835780639d53a648146104a35780639d7e8769146104f257600080fd5b806354fd4d501161016f5780637917de1d1161013e5780637917de1d146103bf5780637ac54767146103df5780638542cf50146103ff578063882856ef1461044a57600080fd5b806354fd4d50146102dd57806361238bde146103335780636551927b1461036b5780637051472e146103a357600080fd5b80632055b36b116101ab5780632055b36b146102735780633909af5c146102885780634d52b4c9146102a857806352f0f3ad146102bd57600080fd5b8063013cf08b146101d25780630359a5631461022357806304697c7814610251575b600080fd5b3480156101de57600080fd5b506101f26101ed366004612d2f565b6106f2565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b34801561022f57600080fd5b5061024361023e366004612d71565b610737565b60405190815260200161021a565b34801561025d57600080fd5b5061027161026c366004612de4565b61086f565b005b34801561027f57600080fd5b50610243601081565b34801561029457600080fd5b506102716102a3366004613008565b6109a5565b3480156102b457600080fd5b50610243610bfc565b3480156102c957600080fd5b506102436102d83660046130f4565b610c17565b3480156102e957600080fd5b506103266040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161021a919061315b565b34801561033f57600080fd5b5061024361034e3660046131ac565b600160209081526000928352604080842090915290825290205481565b34801561037757600080fd5b50610243610386366004612d71565b601560209081526000928352604080842090915290825290205481565b3480156103af57600080fd5b506102436703782dace9d9000081565b3480156103cb57600080fd5b506102716103da3660046131ce565b610cec565b3480156103eb57600080fd5b506102436103fa366004612d2f565b6111ef565b34801561040b57600080fd5b5061043a61041a3660046131ac565b600260209081526000928352604080842090915290825290205460ff1681565b604051901515815260200161021a565b34801561045657600080fd5b5061046a61046536600461326a565b611206565b60405167ffffffffffffffff909116815260200161021a565b34801561048f57600080fd5b5061027161049e36600461329d565b611260565b3480156104af57600080fd5b506102436104be366004612d71565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601860209081526040808320938352929052205490565b3480156104fe57600080fd5b5061027161050d3660046132e9565b61135b565b34801561051e57600080fd5b5061024361052d366004612d71565b601760209081526000928352604080842090915290825290205481565b34801561055657600080fd5b5061024361056536600461326a565b611512565b34801561057657600080fd5b50610271610585366004613008565b611544565b34801561059657600080fd5b50601354610243565b3480156105ab57600080fd5b507f0000000000000000000000000000000000000000000000000000000000002710610243565b3480156105de57600080fd5b506102436105ed366004612d71565b601660209081526000928352604080842090915290825290205481565b34801561061657600080fd5b5061062a6106253660046131ac565b611906565b6040805192835260208301919091520161021a565b34801561064b57600080fd5b5061027161065a36600461329d565b6119f7565b34801561066b57600080fd5b5061027161067a366004613375565b611aff565b34801561068b57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000078610243565b6102716106c036600461340e565b611c85565b3480156106d157600080fd5b506102436106e0366004612d2f565b60006020819052908152604090205481565b6013818154811061070257600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601560209081526040808320848452909152812054819061077a9060601c63ffffffff1690565b63ffffffff16905060005b6010811015610867578160011660010361080d5773ffffffffffffffffffffffffffffffffffffffff85166000908152601460209081526040808320878452909152902081601081106107da576107da61344a565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925061084e565b82600382601081106108215761082161344a565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c908061085f816134a8565b915050610785565b505092915050565b600080600080608060146030823785878260140137601480870182207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06000000000000000000000000000000000000000000000000000000000000001794506000908190889084018b5afa94503d60010191506008820189106108fc5763fe2549876000526004601cfd5b60c082901b81526008018481533d6000600183013e88017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8015160008481526002602090815260408083208c8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915587845282528083209b83529a81528a82209290925593845283905296909120959095555050505050565b60006109b18a8a610737565b90506109d486868360208b01356109cf6109ca8d6134e0565b611ef0565b611f30565b80156109f257506109f283838360208801356109cf6109ca8a6134e0565b610a28576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866040013588604051602001610a3e91906135af565b6040516020818303038152906040528051906020012014610a8b576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836020013587602001356001610aa191906135ed565b14610ad8576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b2088610ae68680613605565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f9192505050565b610b29886120ec565b836040013588604051602001610b3f91906135af565b6040516020818303038152906040528051906020012003610b8c576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526015602090815260408083208c8452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055610bf08a8a33612894565b50505050505050505050565b6001610c0a6010600261378c565b610c149190613798565b81565b6000610c23868661294d565b9050610c308360086135ed565b821180610c3d5750602083115b15610c74576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b60608115610d0557610cfe86866129fa565b9050610d3f565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b815481526020019060010190808311610d6c57505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610ded8260601c63ffffffff1690565b63ffffffff169050333214610e2e576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e3e8260801c63ffffffff1690565b63ffffffff16600003610e7d576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e878260c01c90565b67ffffffffffffffff1615610ec8576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610f01576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f0e89898d8886612a73565b83516020850160888204881415608883061715610f33576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610fe3578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610fd8576001821615610fb85782818b0152610fd8565b8981015160009081526020938452604090209260019290921c9101610f9b565b505050608801610f40565b50505050600160106002610ff7919061378c565b6110019190613798565b81111561103a576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110af61104d8360401c63ffffffff1690565b61105d9063ffffffff168a6135ed565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b9150841561113c5777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b1791506110e98260801c63ffffffff1690565b63ffffffff166110ff8360401c63ffffffff1690565b63ffffffff161461113c576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083208e8452909152902061116290846010612ca5565b503360008181526018602090815260408083208f8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055838352601582528083208f8452909152812084905560609190911b81523690601437366014016000a05050505050505050505050565b600381601081106111ff57600080fd5b0154905081565b6018602052826000526040600020602052816000526040600020818154811061122e57600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b60443560008060088301861061127e5763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa9050806112ab57600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b600080603087600037602060006030600060025afa806113835763f91129696000526004601cfd5b6000517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017608081815260a08c905260c08b905260308a60e037603088609083013760008060c083600a5afa925082611405576309bde3396000526004601cfd5b6028861061141b5763fe2549876000526004601cfd5b6000602882015278200000000000000000000000000000000000000000000000008152600881018b905285810151935060308a8237603081019b909b52505060509098207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0500000000000000000000000000000000000000000000000000000000000000176000818152600260209081526040808320868452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209583529481528482209a909a559081528089529190912096909655505050505050565b6014602052826000526040600020602052816000526040600020816010811061153a57600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff8116156115b7576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000786115e28260c01c90565b6115f69067ffffffffffffffff1642613798565b1161162d576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116398b8b610737565b905061165287878360208c01356109cf6109ca8e6134e0565b8015611670575061167084848360208901356109cf6109ca8b6134e0565b6116a6576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016116bc91906135af565b6040516020818303038152906040528051906020012014611709576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84602001358860200135600161171f91906135ed565b141580611751575060016117398360601c63ffffffff1690565b61174391906137af565b63ffffffff16856020013514155b15611788576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61179689610ae68780613605565b61179f896120ec565b60006117aa8a612bc6565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f020000000000000000000000000000000000000000000000000000000000000017905060006118018460a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601760008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d815260200190815260200160002054600160008481526020019081526020016000206000838152602001908152602001600020819055506118d38460801c63ffffffff1690565b600083815260208190526040902063ffffffff9190911690556118f78d8d81612894565b50505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff1661198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546119ab8160086135ed565b6119b68560206135ed565b106119d457836119c78260086135ed565b6119d19190613798565b91505b506000938452600160209081526040808620948652939052919092205492909150565b604435600080600883018610611a155763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b6000611b0b8686610737565b9050611b2483838360208801356109cf6109ca8a6134e0565b611b5a576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084013515611b96576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b9e612ce3565b611bac81610ae68780613605565b611bb5816120ec565b846040013581604051602001611bcb91906135af565b6040516020818303038152906040528051906020012003611c18576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166000908152601560209081526040808320898452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055611c7c878733612894565b50505050505050565b6703782dace9d90000341015611cc7576040517fe92c469f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333214611d00576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d0b8160086137d4565b63ffffffff168263ffffffff1610611d4f576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000027108163ffffffff161015611daf576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b949094179094558251808401845282815280850186815260138054600181018255908452915160029092027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9094167fffffffffffffffffffffffff000000000000000000000000000000000000000090941693909317909255517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0919091015590815260168352818120938152929091529020349055565b6000816000015182602001518360400151604051602001611f13939291906137fc565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611f84578060051b880135600186831c1660018114611f695760008481526020839052604090209350611f7a565b600082815260208590526040902093505b5050600101611f36565b5090931495945050505050565b6088815114611f9f57600080fd5b6020810160208301612020565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b171717905061201a81612005868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b61202c60008383611fac565b61203860018383611fac565b61204460028383611fac565b61205060038383611fac565b61205c60048383611fac565b61206860058383611fac565b61207460068383611fac565b61208060078383611fac565b61208c60088383611fac565b61209860098383611fac565b6120a4600a8383611fac565b6120b0600b8383611fac565b6120bc600c8383611fac565b6120c8600d8383611fac565b6120d4600e8383611fac565b6120e0600f8383611fac565b61201a60108383611fac565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e00160405160208183030381529060405290506020820160208201612774565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c61229f8660011b67ffffffffffffffff1690565b18188584603f1c6122ba8660011b67ffffffffffffffff1690565b18188584603f1c6122d58660011b67ffffffffffffffff1690565b181895508483603f1c6122f28560011b67ffffffffffffffff1690565b181894508387603f1c61230f8960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525b5050505050565b600582811b8201805160018501831b8401805160028701851b8601805160038901871b8801805160048b0190981b8901805167ffffffffffffffff861985168918811690995283198a16861889169096528819861683188816909352841986168818871690528419831684189095169052919391929190611c7c565b61270e600082612687565b612719600582612687565b612724600a82612687565b61272f600f82612687565b61273a601482612687565b50565b612746816121e2565b61274f81612703565b600383901b820151815160c09190911c9061201a90821867ffffffffffffffff168352565b6127806000828461273d565b61278c6001828461273d565b6127986002828461273d565b6127a46003828461273d565b6127b06004828461273d565b6127bc6005828461273d565b6127c86006828461273d565b6127d46007828461273d565b6127e06008828461273d565b6127ec6009828461273d565b6127f8600a828461273d565b612804600b828461273d565b612810600c828461273d565b61281c600d828461273d565b612828600e828461273d565b612834600f828461273d565b6128406010828461273d565b61284c6011828461273d565b6128586012828461273d565b6128646013828461273d565b6128706014828461273d565b61287c6015828461273d565b6128886016828461273d565b61201a6017828461273d565b73ffffffffffffffffffffffffffffffffffffffff83811660009081526016602090815260408083208684529091528082208054908390559051909284169083908381818185875af1925050503d806000811461290d576040519150601f19603f3d011682016040523d82523d6000602084013e612912565b606091505b5050905080612680576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316176129f3818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b6060604051905081602082018181018286833760888306808015612a435760888290038501848101848103803687375060806001820353506001845160001a1784538652612a5a565b608836843760018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b6000612a858260a01c63ffffffff1690565b67ffffffffffffffff1690506000612aa38360801c63ffffffff1690565b63ffffffff1690506000612abd8460401c63ffffffff1690565b63ffffffff169050600883108015612ad3575080155b15612b075760c082901b6000908152883560085283513382526017602090815260408084208a855290915290912055612bbc565b60088310158015612b25575080612b1f600885613798565b93508310155b8015612b395750612b3687826135ed565b83105b15612bbc576000612b4a8285613798565b905087612b588260206135ed565b10158015612b64575085155b15612b9b576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526017602090815260408083208a845290915290209089013590555b5050505050505050565b6000612c49565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff00612bf78360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff0000612c248360101b67ffffffffffffffff1690565b1617905060008160201c612c428360201b67ffffffffffffffff1690565b1792915050565b60808201516020830190612c6190612bcd565b612bcd565b6040820151612c6f90612bcd565b60401b17612c87612c5c60018460059190911b015190565b825160809190911b90612c9990612bcd565b60c01b17179392505050565b8260108101928215612cd3579160200282015b82811115612cd3578251825591602001919060010190612cb8565b50612cdf929150612cfb565b5090565b6040518060200160405280612cf6612d10565b905290565b5b80821115612cdf5760008155600101612cfc565b6040518061032001604052806019906020820280368337509192915050565b600060208284031215612d4157600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612d6c57600080fd5b919050565b60008060408385031215612d8457600080fd5b612d8d83612d48565b946020939093013593505050565b60008083601f840112612dad57600080fd5b50813567ffffffffffffffff811115612dc557600080fd5b602083019150836020828501011115612ddd57600080fd5b9250929050565b60008060008060608587031215612dfa57600080fd5b84359350612e0a60208601612d48565b9250604085013567ffffffffffffffff811115612e2657600080fd5b612e3287828801612d9b565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff81118282101715612e9157612e91612e3e565b60405290565b6040516060810167ffffffffffffffff81118282101715612e9157612e91612e3e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612f0157612f01612e3e565b604052919050565b6000610320808385031215612f1d57600080fd5b604051602080820167ffffffffffffffff8382108183111715612f4257612f42612e3e565b8160405283955087601f880112612f5857600080fd5b612f60612e6d565b9487019491508188861115612f7457600080fd5b875b86811015612f9c5780358381168114612f8f5760008081fd5b8452928401928401612f76565b50909352509295945050505050565b600060608284031215612fbd57600080fd5b50919050565b60008083601f840112612fd557600080fd5b50813567ffffffffffffffff811115612fed57600080fd5b6020830191508360208260051b8501011115612ddd57600080fd5b60008060008060008060008060006103e08a8c03121561302757600080fd5b6130308a612d48565b985060208a013597506130468b60408c01612f09565b96506103608a013567ffffffffffffffff8082111561306457600080fd5b6130708d838e01612fab565b97506103808c013591508082111561308757600080fd5b6130938d838e01612fc3565b90975095506103a08c01359150808211156130ad57600080fd5b6130b98d838e01612fab565b94506103c08c01359150808211156130d057600080fd5b506130dd8c828d01612fc3565b915080935050809150509295985092959850929598565b600080600080600060a0868803121561310c57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60005b8381101561314a578181015183820152602001613132565b8381111561201a5750506000910152565b602081526000825180602084015261317a81604085016020870161312f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080604083850312156131bf57600080fd5b50508035926020909101359150565b600080600080600080600060a0888a0312156131e957600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561320f57600080fd5b61321b8b838c01612d9b565b909750955060608a013591508082111561323457600080fd5b506132418a828b01612fc3565b9094509250506080880135801515811461325a57600080fd5b8091505092959891949750929550565b60008060006060848603121561327f57600080fd5b61328884612d48565b95602085013595506040909401359392505050565b6000806000604084860312156132b257600080fd5b83359250602084013567ffffffffffffffff8111156132d057600080fd5b6132dc86828701612d9b565b9497909650939450505050565b600080600080600080600060a0888a03121561330457600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561332a57600080fd5b6133368b838c01612d9b565b909750955060608a013591508082111561334f57600080fd5b5061335c8a828b01612d9b565b989b979a50959894979596608090950135949350505050565b60008060008060006080868803121561338d57600080fd5b61339686612d48565b945060208601359350604086013567ffffffffffffffff808211156133ba57600080fd5b6133c689838a01612fab565b945060608801359150808211156133dc57600080fd5b506133e988828901612fc3565b969995985093965092949392505050565b803563ffffffff81168114612d6c57600080fd5b60008060006060848603121561342357600080fd5b83359250613433602085016133fa565b9150613441604085016133fa565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036134d9576134d9613479565b5060010190565b6000606082360312156134f257600080fd5b6134fa612e97565b823567ffffffffffffffff8082111561351257600080fd5b9084019036601f83011261352557600080fd5b813560208282111561353957613539612e3e565b613569817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612eba565b9250818352368183860101111561357f57600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b60198110156135e457825167ffffffffffffffff168252602092830192909101906001016135bb565b50505092915050565b6000821982111561360057613600613479565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261363a57600080fd5b83018035915067ffffffffffffffff82111561365557600080fd5b602001915036819003821315612ddd57600080fd5b600181815b808511156136c357817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156136a9576136a9613479565b808516156136b657918102915b93841c939080029061366f565b509250929050565b6000826136da57506001613786565b816136e757506000613786565b81600181146136fd576002811461370757613723565b6001915050613786565b60ff84111561371857613718613479565b50506001821b613786565b5060208310610133831016604e8410600b8410161715613746575081810a613786565b613750838361366a565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561378257613782613479565b0290505b92915050565b60006129f383836136cb565b6000828210156137aa576137aa613479565b500390565b600063ffffffff838116908316818110156137cc576137cc613479565b039392505050565b600063ffffffff8083168185168083038211156137f3576137f3613479565b01949350505050565b6000845161380e81846020890161312f565b9190910192835250602082015260400191905056fea164736f6c634300080f000a"; bytes internal constant mipsCode = - hex"608060405234801561001057600080fd5b506004361061004c5760003560e01c8063155633fe1461005157806354fd4d50146100765780637dc0d1d0146100bf578063e14ced3214610103575b600080fd5b61005c634000000081565b60405163ffffffff90911681526020015b60405180910390f35b6100b26040518060400160405280600581526020017f312e302e3100000000000000000000000000000000000000000000000000000081525081565b60405161006d9190611e16565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de7516815260200161006d565b610116610111366004611ed2565b610124565b60405190815260200161006d565b600061012e611d8c565b6080811461013b57600080fd5b6040516106001461014b57600080fd5b6084871461015857600080fd5b6101a4851461016657600080fd5b8635608052602087013560a052604087013560e090811c60c09081526044890135821c82526048890135821c61010052604c890135821c610120526050890135821c61014052605489013590911c61016052605888013560f890811c610180526059890135901c6101a052605a880135901c6101c0526102006101e0819052606288019060005b602081101561021157823560e01c82526004909201916020909101906001016101ed565b5050508061012001511561022f5761022761066f565b915050610666565b6101408101805160010167ffffffffffffffff1690526060810151600090610257908261078b565b9050603f601a82901c16600281148061027657508063ffffffff166003145b156102cb5760006002836303ffffff1663ffffffff16901b846080015163f0000000161790506102c08263ffffffff166002146102b457601f6102b7565b60005b60ff1682610847565b945050505050610666565b6101608301516000908190601f601086901c81169190601587901c16602081106102f7576102f7611f46565b602002015192508063ffffffff8516158061031857508463ffffffff16601c145b1561034f578661016001518263ffffffff166020811061033a5761033a611f46565b6020020151925050601f600b86901c1661040b565b60208563ffffffff1610156103b1578463ffffffff16600c148061037957508463ffffffff16600d145b8061038a57508463ffffffff16600e145b1561039b578561ffff16925061040b565b6103aa8661ffff166010610938565b925061040b565b60288563ffffffff161015806103cd57508463ffffffff166022145b806103de57508463ffffffff166026145b1561040b578661016001518263ffffffff166020811061040057610400611f46565b602002015192508190505b60048563ffffffff1610158015610428575060088563ffffffff16105b8061043957508463ffffffff166001145b156104585761044a858784876109ab565b975050505050505050610666565b63ffffffff60006020878316106104bd576104788861ffff166010610938565b9095019463fffffffc861661048e81600161078b565b915060288863ffffffff16101580156104ae57508763ffffffff16603014155b156104bb57809250600093505b505b60006104cb89888885610bbb565b63ffffffff9081169150603f8a169089161580156104f0575060088163ffffffff1610155b80156105025750601c8163ffffffff16105b156105df578063ffffffff166008148061052257508063ffffffff166009145b15610559576105478163ffffffff1660081461053e5785610541565b60005b89610847565b9b505050505050505050505050610666565b8063ffffffff16600a0361057957610547858963ffffffff8a161561134b565b8063ffffffff16600b0361059a57610547858963ffffffff8a16151561134b565b8063ffffffff16600c036105b1576105478d611431565b60108163ffffffff16101580156105ce5750601c8163ffffffff16105b156105df5761054781898988611968565b8863ffffffff1660381480156105fa575063ffffffff861615155b1561062f5760018b61016001518763ffffffff166020811061061e5761061e611f46565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff1461064c5761064c84600184611c3f565b6106588583600161134b565b9b5050505050505050505050505b95945050505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019190855b602081101561070e57601c86015184526020909501946004909301926001016106ea565b506000835283830384a060009450806001811461072e5760039550610756565b828015610746576001811461074f5760029650610754565b60009650610754565b600196505b505b50505081900390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89190911b17919050565b60008061079783611ce3565b905060038416156107a757600080fd5b6020810190358460051c8160005b601b81101561080d5760208501943583821c60011680156107dd57600181146107f257610803565b60008481526020839052604090209350610803565b600082815260208590526040902093505b50506001016107b5565b50608051915081811461082857630badf00d60005260206000fd5b5050601f94909416601c0360031b9390931c63ffffffff169392505050565b6000610851611d8c565b60809050806060015160040163ffffffff16816080015163ffffffff16146108da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b60608101805160808301805163ffffffff90811690935285831690529085161561093057806008018261016001518663ffffffff166020811061091f5761091f611f46565b63ffffffff90921660209290920201525b61066661066f565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b0182610995576000610997565b815b90861663ffffffff16179250505092915050565b60006109b5611d8c565b608090506000816060015160040163ffffffff16826080015163ffffffff1614610a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f7400000000000000000000000060448201526064016108d1565b8663ffffffff1660041480610a5657508663ffffffff166005145b15610ad25760008261016001518663ffffffff1660208110610a7a57610a7a611f46565b602002015190508063ffffffff168563ffffffff16148015610aa257508763ffffffff166004145b80610aca57508063ffffffff168563ffffffff1614158015610aca57508763ffffffff166005145b915050610b4f565b8663ffffffff16600603610aef5760008460030b13159050610b4f565b8663ffffffff16600703610b0b5760008460030b139050610b4f565b8663ffffffff16600103610b4f57601f601087901c166000819003610b345760008560030b1291505b8063ffffffff16600103610b4d5760008560030b121591505b505b606082018051608084015163ffffffff169091528115610b95576002610b7a8861ffff166010610938565b63ffffffff90811690911b8201600401166080840152610ba7565b60808301805160040163ffffffff1690525b610baf61066f565b98975050505050505050565b6000603f601a86901c16801580610bea575060088163ffffffff1610158015610bea5750600f8163ffffffff16105b1561104057603f86168160088114610c315760098114610c3a57600a8114610c4357600b8114610c4c57600c8114610c5557600d8114610c5e57600e8114610c6757610c6c565b60209150610c6c565b60219150610c6c565b602a9150610c6c565b602b9150610c6c565b60249150610c6c565b60259150610c6c565b602691505b508063ffffffff16600003610c935750505063ffffffff8216601f600686901c161b611343565b8063ffffffff16600203610cb95750505063ffffffff8216601f600686901c161c611343565b8063ffffffff16600303610cef57601f600688901c16610ce563ffffffff8716821c6020839003610938565b9350505050611343565b8063ffffffff16600403610d115750505063ffffffff8216601f84161b611343565b8063ffffffff16600603610d335750505063ffffffff8216601f84161c611343565b8063ffffffff16600703610d6657610d5d8663ffffffff168663ffffffff16901c87602003610938565b92505050611343565b8063ffffffff16600803610d7e578592505050611343565b8063ffffffff16600903610d96578592505050611343565b8063ffffffff16600a03610dae578592505050611343565b8063ffffffff16600b03610dc6578592505050611343565b8063ffffffff16600c03610dde578592505050611343565b8063ffffffff16600f03610df6578592505050611343565b8063ffffffff16601003610e0e578592505050611343565b8063ffffffff16601103610e26578592505050611343565b8063ffffffff16601203610e3e578592505050611343565b8063ffffffff16601303610e56578592505050611343565b8063ffffffff16601803610e6e578592505050611343565b8063ffffffff16601903610e86578592505050611343565b8063ffffffff16601a03610e9e578592505050611343565b8063ffffffff16601b03610eb6578592505050611343565b8063ffffffff16602003610ecf57505050828201611343565b8063ffffffff16602103610ee857505050828201611343565b8063ffffffff16602203610f0157505050818303611343565b8063ffffffff16602303610f1a57505050818303611343565b8063ffffffff16602403610f3357505050828216611343565b8063ffffffff16602503610f4c57505050828217611343565b8063ffffffff16602603610f6557505050828218611343565b8063ffffffff16602703610f7f5750505082821719611343565b8063ffffffff16602a03610fb0578460030b8660030b12610fa1576000610fa4565b60015b60ff1692505050611343565b8063ffffffff16602b03610fd8578463ffffffff168663ffffffff1610610fa1576000610fa4565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e0000000000000000000000000060448201526064016108d1565b50610fd8565b8063ffffffff16601c036110c457603f8616600281900361106657505050828202611343565b8063ffffffff166020148061108157508063ffffffff166021145b1561103a578063ffffffff16602003611098579419945b60005b63800000008716156110ba576401fffffffe600197881b16960161109b565b9250611343915050565b8063ffffffff16600f036110e657505065ffffffff0000601083901b16611343565b8063ffffffff166020036111225761111a8560031660080260180363ffffffff168463ffffffff16901c60ff166008610938565b915050611343565b8063ffffffff166021036111575761111a8560021660080260100363ffffffff168463ffffffff16901c61ffff166010610938565b8063ffffffff1660220361118657505063ffffffff60086003851602811681811b198416918316901b17611343565b8063ffffffff1660230361119d5782915050611343565b8063ffffffff166024036111cf578460031660080260180363ffffffff168363ffffffff16901c60ff16915050611343565b8063ffffffff16602503611202578460021660080260100363ffffffff168363ffffffff16901c61ffff16915050611343565b8063ffffffff1660260361123457505063ffffffff60086003851602601803811681811c198416918316901c17611343565b8063ffffffff1660280361126a57505060ff63ffffffff60086003861602601803811682811b9091188316918416901b17611343565b8063ffffffff166029036112a157505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17611343565b8063ffffffff16602a036112d057505063ffffffff60086003851602811681811c198316918416901c17611343565b8063ffffffff16602b036112e75783915050611343565b8063ffffffff16602e0361131957505063ffffffff60086003851602601803811681811b198316918416901b17611343565b8063ffffffff166030036113305782915050611343565b8063ffffffff16603803610fd857839150505b949350505050565b6000611355611d8c565b506080602063ffffffff8616106113c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c696420726567697374657200000000000000000000000000000000000060448201526064016108d1565b63ffffffff8516158015906113da5750825b1561140e57838161016001518663ffffffff16602081106113fd576113fd611f46565b63ffffffff90921660209290920201525b60808101805163ffffffff8082166060850152600490910116905261066661066f565b600061143b611d8c565b506101e051604081015160808083015160a084015160c09094015191936000928392919063ffffffff8616610ffa036114b55781610fff81161561148457610fff811661100003015b8363ffffffff166000036114ab5760e08801805163ffffffff8382011690915295506114af565b8395505b50611927565b8563ffffffff16610fcd036114d05763400000009450611927565b8563ffffffff16611018036114e85760019450611927565b8563ffffffff166110960361151e57600161012088015260ff831661010088015261151161066f565b9998505050505050505050565b8563ffffffff16610fa30361178a5763ffffffff831615611927577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8416016117445760006115798363fffffffc16600161078b565b60208901519091508060001a6001036115e857604080516000838152336020528d83526060902091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790505b6040808a015190517fe03110e10000000000000000000000000000000000000000000000000000000081526004810183905263ffffffff9091166024820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de75169063e03110e1906044016040805180830381865afa158015611689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ad9190611f75565b915091506003861680600403828110156116c5578092505b50818610156116d2578591505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b039150811981169050838119871617955050506117298663fffffffc16600186611c3f565b60408b018051820163ffffffff169052975061178592505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff84160161177957809450611927565b63ffffffff9450600993505b611927565b8563ffffffff16610fa40361187b5763ffffffff8316600114806117b4575063ffffffff83166002145b806117c5575063ffffffff83166004145b156117d257809450611927565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff8416016117795760006118128363fffffffc16600161078b565b6020890151909150600384166004038381101561182d578093505b83900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193850293841b0116911b17602088015260006040880152935083611927565b8563ffffffff16610fd703611927578163ffffffff1660030361191b5763ffffffff831615806118b1575063ffffffff83166005145b806118c2575063ffffffff83166003145b156118d05760009450611927565b63ffffffff8316600114806118eb575063ffffffff83166002145b806118fc575063ffffffff83166006145b8061190d575063ffffffff83166004145b156117795760019450611927565b63ffffffff9450601693505b6101608701805163ffffffff808816604090920191909152905185821660e09091015260808801805180831660608b0152600401909116905261151161066f565b6000611972611d8c565b506080600063ffffffff8716601003611990575060c0810151611bd6565b8663ffffffff166011036119af5763ffffffff861660c0830152611bd6565b8663ffffffff166012036119c8575060a0810151611bd6565b8663ffffffff166013036119e75763ffffffff861660a0830152611bd6565b8663ffffffff16601803611a1b5763ffffffff600387810b9087900b02602081901c821660c08501521660a0830152611bd6565b8663ffffffff16601903611a4c5763ffffffff86811681871602602081901c821660c08501521660a0830152611bd6565b8663ffffffff16601a03611b0f578460030b600003611ac7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f0000000000000000000060448201526064016108d1565b8460030b8660030b81611adc57611adc611f99565b0763ffffffff1660c0830152600385810b9087900b81611afe57611afe611f99565b0563ffffffff1660a0830152611bd6565b8663ffffffff16601b03611bd6578463ffffffff16600003611b8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f0000000000000000000060448201526064016108d1565b8463ffffffff168663ffffffff1681611ba857611ba8611f99565b0663ffffffff90811660c084015285811690871681611bc957611bc9611f99565b0463ffffffff1660a08301525b63ffffffff841615611c1157808261016001518563ffffffff1660208110611c0057611c00611f46565b63ffffffff90921660209290920201525b60808201805163ffffffff80821660608601526004909101169052611c3461066f565b979650505050505050565b6000611c4a83611ce3565b90506003841615611c5a57600080fd5b6020810190601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611cd85760208401933582821c6001168015611ca85760018114611cbd57611cce565b60008581526020839052604090209450611cce565b600082815260208690526040902094505b5050600101611c80565b505060805250505050565b60ff8116610380026101a4810190369061052401811015611d86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f617461000000000000000000000000000000000000000000000000000000000060648201526084016108d1565b50919050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101611df2611df7565b905290565b6040518061040001604052806020906020820280368337509192915050565b600060208083528351808285015260005b81811015611e4357858101830151858201604001528201611e27565b81811115611e55576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008083601f840112611e9b57600080fd5b50813567ffffffffffffffff811115611eb357600080fd5b602083019150836020828501011115611ecb57600080fd5b9250929050565b600080600080600060608688031215611eea57600080fd5b853567ffffffffffffffff80821115611f0257600080fd5b611f0e89838a01611e89565b90975095506020880135915080821115611f2757600080fd5b50611f3488828901611e89565b96999598509660400135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008060408385031215611f8857600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a"; + hex"608060405234801561001057600080fd5b506004361061004c5760003560e01c8063155633fe1461005157806354fd4d50146100765780637dc0d1d0146100bf578063e14ced3214610103575b600080fd5b61005c634000000081565b60405163ffffffff90911681526020015b60405180910390f35b6100b26040518060400160405280600c81526020017f312e312e302d626574612e31000000000000000000000000000000000000000081525081565b60405161006d9190611e16565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de7516815260200161006d565b610116610111366004611ed2565b610124565b60405190815260200161006d565b600061012e611d8c565b6080811461013b57600080fd5b6040516106001461014b57600080fd5b6084871461015857600080fd5b6101a4851461016657600080fd5b8635608052602087013560a052604087013560e090811c60c09081526044890135821c82526048890135821c61010052604c890135821c610120526050890135821c61014052605489013590911c61016052605888013560f890811c610180526059890135901c6101a052605a880135901c6101c0526102006101e0819052606288019060005b602081101561021157823560e01c82526004909201916020909101906001016101ed565b5050508061012001511561022f5761022761066f565b915050610666565b6101408101805160010167ffffffffffffffff1690526060810151600090610257908261078b565b9050603f601a82901c16600281148061027657508063ffffffff166003145b156102cb5760006002836303ffffff1663ffffffff16901b846080015163f0000000161790506102c08263ffffffff166002146102b457601f6102b7565b60005b60ff1682610847565b945050505050610666565b6101608301516000908190601f601086901c81169190601587901c16602081106102f7576102f7611f46565b602002015192508063ffffffff8516158061031857508463ffffffff16601c145b1561034f578661016001518263ffffffff166020811061033a5761033a611f46565b6020020151925050601f600b86901c1661040b565b60208563ffffffff1610156103b1578463ffffffff16600c148061037957508463ffffffff16600d145b8061038a57508463ffffffff16600e145b1561039b578561ffff16925061040b565b6103aa8661ffff166010610938565b925061040b565b60288563ffffffff161015806103cd57508463ffffffff166022145b806103de57508463ffffffff166026145b1561040b578661016001518263ffffffff166020811061040057610400611f46565b602002015192508190505b60048563ffffffff1610158015610428575060088563ffffffff16105b8061043957508463ffffffff166001145b156104585761044a858784876109ab565b975050505050505050610666565b63ffffffff60006020878316106104bd576104788861ffff166010610938565b9095019463fffffffc861661048e81600161078b565b915060288863ffffffff16101580156104ae57508763ffffffff16603014155b156104bb57809250600093505b505b60006104cb89888885610bbb565b63ffffffff9081169150603f8a169089161580156104f0575060088163ffffffff1610155b80156105025750601c8163ffffffff16105b156105df578063ffffffff166008148061052257508063ffffffff166009145b15610559576105478163ffffffff1660081461053e5785610541565b60005b89610847565b9b505050505050505050505050610666565b8063ffffffff16600a0361057957610547858963ffffffff8a161561134b565b8063ffffffff16600b0361059a57610547858963ffffffff8a16151561134b565b8063ffffffff16600c036105b1576105478d611431565b60108163ffffffff16101580156105ce5750601c8163ffffffff16105b156105df5761054781898988611968565b8863ffffffff1660381480156105fa575063ffffffff861615155b1561062f5760018b61016001518763ffffffff166020811061061e5761061e611f46565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff1461064c5761064c84600184611c3f565b6106588583600161134b565b9b5050505050505050505050505b95945050505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019190855b602081101561070e57601c86015184526020909501946004909301926001016106ea565b506000835283830384a060009450806001811461072e5760039550610756565b828015610746576001811461074f5760029650610754565b60009650610754565b600196505b505b50505081900390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89190911b17919050565b60008061079783611ce3565b905060038416156107a757600080fd5b6020810190358460051c8160005b601b81101561080d5760208501943583821c60011680156107dd57600181146107f257610803565b60008481526020839052604090209350610803565b600082815260208590526040902093505b50506001016107b5565b50608051915081811461082857630badf00d60005260206000fd5b5050601f94909416601c0360031b9390931c63ffffffff169392505050565b6000610851611d8c565b60809050806060015160040163ffffffff16816080015163ffffffff16146108da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b60608101805160808301805163ffffffff90811690935285831690529085161561093057806008018261016001518663ffffffff166020811061091f5761091f611f46565b63ffffffff90921660209290920201525b61066661066f565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b0182610995576000610997565b815b90861663ffffffff16179250505092915050565b60006109b5611d8c565b608090506000816060015160040163ffffffff16826080015163ffffffff1614610a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f7400000000000000000000000060448201526064016108d1565b8663ffffffff1660041480610a5657508663ffffffff166005145b15610ad25760008261016001518663ffffffff1660208110610a7a57610a7a611f46565b602002015190508063ffffffff168563ffffffff16148015610aa257508763ffffffff166004145b80610aca57508063ffffffff168563ffffffff1614158015610aca57508763ffffffff166005145b915050610b4f565b8663ffffffff16600603610aef5760008460030b13159050610b4f565b8663ffffffff16600703610b0b5760008460030b139050610b4f565b8663ffffffff16600103610b4f57601f601087901c166000819003610b345760008560030b1291505b8063ffffffff16600103610b4d5760008560030b121591505b505b606082018051608084015163ffffffff169091528115610b95576002610b7a8861ffff166010610938565b63ffffffff90811690911b8201600401166080840152610ba7565b60808301805160040163ffffffff1690525b610baf61066f565b98975050505050505050565b6000603f601a86901c16801580610bea575060088163ffffffff1610158015610bea5750600f8163ffffffff16105b1561104057603f86168160088114610c315760098114610c3a57600a8114610c4357600b8114610c4c57600c8114610c5557600d8114610c5e57600e8114610c6757610c6c565b60209150610c6c565b60219150610c6c565b602a9150610c6c565b602b9150610c6c565b60249150610c6c565b60259150610c6c565b602691505b508063ffffffff16600003610c935750505063ffffffff8216601f600686901c161b611343565b8063ffffffff16600203610cb95750505063ffffffff8216601f600686901c161c611343565b8063ffffffff16600303610cef57601f600688901c16610ce563ffffffff8716821c6020839003610938565b9350505050611343565b8063ffffffff16600403610d115750505063ffffffff8216601f84161b611343565b8063ffffffff16600603610d335750505063ffffffff8216601f84161c611343565b8063ffffffff16600703610d6657610d5d8663ffffffff168663ffffffff16901c87602003610938565b92505050611343565b8063ffffffff16600803610d7e578592505050611343565b8063ffffffff16600903610d96578592505050611343565b8063ffffffff16600a03610dae578592505050611343565b8063ffffffff16600b03610dc6578592505050611343565b8063ffffffff16600c03610dde578592505050611343565b8063ffffffff16600f03610df6578592505050611343565b8063ffffffff16601003610e0e578592505050611343565b8063ffffffff16601103610e26578592505050611343565b8063ffffffff16601203610e3e578592505050611343565b8063ffffffff16601303610e56578592505050611343565b8063ffffffff16601803610e6e578592505050611343565b8063ffffffff16601903610e86578592505050611343565b8063ffffffff16601a03610e9e578592505050611343565b8063ffffffff16601b03610eb6578592505050611343565b8063ffffffff16602003610ecf57505050828201611343565b8063ffffffff16602103610ee857505050828201611343565b8063ffffffff16602203610f0157505050818303611343565b8063ffffffff16602303610f1a57505050818303611343565b8063ffffffff16602403610f3357505050828216611343565b8063ffffffff16602503610f4c57505050828217611343565b8063ffffffff16602603610f6557505050828218611343565b8063ffffffff16602703610f7f5750505082821719611343565b8063ffffffff16602a03610fb0578460030b8660030b12610fa1576000610fa4565b60015b60ff1692505050611343565b8063ffffffff16602b03610fd8578463ffffffff168663ffffffff1610610fa1576000610fa4565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e0000000000000000000000000060448201526064016108d1565b50610fd8565b8063ffffffff16601c036110c457603f8616600281900361106657505050828202611343565b8063ffffffff166020148061108157508063ffffffff166021145b1561103a578063ffffffff16602003611098579419945b60005b63800000008716156110ba576401fffffffe600197881b16960161109b565b9250611343915050565b8063ffffffff16600f036110e657505065ffffffff0000601083901b16611343565b8063ffffffff166020036111225761111a8560031660080260180363ffffffff168463ffffffff16901c60ff166008610938565b915050611343565b8063ffffffff166021036111575761111a8560021660080260100363ffffffff168463ffffffff16901c61ffff166010610938565b8063ffffffff1660220361118657505063ffffffff60086003851602811681811b198416918316901b17611343565b8063ffffffff1660230361119d5782915050611343565b8063ffffffff166024036111cf578460031660080260180363ffffffff168363ffffffff16901c60ff16915050611343565b8063ffffffff16602503611202578460021660080260100363ffffffff168363ffffffff16901c61ffff16915050611343565b8063ffffffff1660260361123457505063ffffffff60086003851602601803811681811c198416918316901c17611343565b8063ffffffff1660280361126a57505060ff63ffffffff60086003861602601803811682811b9091188316918416901b17611343565b8063ffffffff166029036112a157505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17611343565b8063ffffffff16602a036112d057505063ffffffff60086003851602811681811c198316918416901c17611343565b8063ffffffff16602b036112e75783915050611343565b8063ffffffff16602e0361131957505063ffffffff60086003851602601803811681811b198316918416901b17611343565b8063ffffffff166030036113305782915050611343565b8063ffffffff16603803610fd857839150505b949350505050565b6000611355611d8c565b506080602063ffffffff8616106113c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c696420726567697374657200000000000000000000000000000000000060448201526064016108d1565b63ffffffff8516158015906113da5750825b1561140e57838161016001518663ffffffff16602081106113fd576113fd611f46565b63ffffffff90921660209290920201525b60808101805163ffffffff8082166060850152600490910116905261066661066f565b600061143b611d8c565b506101e051604081015160808083015160a084015160c09094015191936000928392919063ffffffff8616610ffa036114b55781610fff81161561148457610fff811661100003015b8363ffffffff166000036114ab5760e08801805163ffffffff8382011690915295506114af565b8395505b50611927565b8563ffffffff16610fcd036114d05763400000009450611927565b8563ffffffff16611018036114e85760019450611927565b8563ffffffff166110960361151e57600161012088015260ff831661010088015261151161066f565b9998505050505050505050565b8563ffffffff16610fa30361178a5763ffffffff831615611927577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8416016117445760006115798363fffffffc16600161078b565b60208901519091508060001a6001036115e857604080516000838152336020528d83526060902091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790505b6040808a015190517fe03110e10000000000000000000000000000000000000000000000000000000081526004810183905263ffffffff9091166024820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de75169063e03110e1906044016040805180830381865afa158015611689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ad9190611f75565b915091506003861680600403828110156116c5578092505b50818610156116d2578591505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b039150811981169050838119871617955050506117298663fffffffc16600186611c3f565b60408b018051820163ffffffff169052975061178592505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff84160161177957809450611927565b63ffffffff9450600993505b611927565b8563ffffffff16610fa40361187b5763ffffffff8316600114806117b4575063ffffffff83166002145b806117c5575063ffffffff83166004145b156117d257809450611927565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff8416016117795760006118128363fffffffc16600161078b565b6020890151909150600384166004038381101561182d578093505b83900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193850293841b0116911b17602088015260006040880152935083611927565b8563ffffffff16610fd703611927578163ffffffff1660030361191b5763ffffffff831615806118b1575063ffffffff83166005145b806118c2575063ffffffff83166003145b156118d05760009450611927565b63ffffffff8316600114806118eb575063ffffffff83166002145b806118fc575063ffffffff83166006145b8061190d575063ffffffff83166004145b156117795760019450611927565b63ffffffff9450601693505b6101608701805163ffffffff808816604090920191909152905185821660e09091015260808801805180831660608b0152600401909116905261151161066f565b6000611972611d8c565b506080600063ffffffff8716601003611990575060c0810151611bd6565b8663ffffffff166011036119af5763ffffffff861660c0830152611bd6565b8663ffffffff166012036119c8575060a0810151611bd6565b8663ffffffff166013036119e75763ffffffff861660a0830152611bd6565b8663ffffffff16601803611a1b5763ffffffff600387810b9087900b02602081901c821660c08501521660a0830152611bd6565b8663ffffffff16601903611a4c5763ffffffff86811681871602602081901c821660c08501521660a0830152611bd6565b8663ffffffff16601a03611b0f578460030b600003611ac7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f0000000000000000000060448201526064016108d1565b8460030b8660030b81611adc57611adc611f99565b0763ffffffff1660c0830152600385810b9087900b81611afe57611afe611f99565b0563ffffffff1660a0830152611bd6565b8663ffffffff16601b03611bd6578463ffffffff16600003611b8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f0000000000000000000060448201526064016108d1565b8463ffffffff168663ffffffff1681611ba857611ba8611f99565b0663ffffffff90811660c084015285811690871681611bc957611bc9611f99565b0463ffffffff1660a08301525b63ffffffff841615611c1157808261016001518563ffffffff1660208110611c0057611c00611f46565b63ffffffff90921660209290920201525b60808201805163ffffffff80821660608601526004909101169052611c3461066f565b979650505050505050565b6000611c4a83611ce3565b90506003841615611c5a57600080fd5b6020810190601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611cd85760208401933582821c6001168015611ca85760018114611cbd57611cce565b60008581526020839052604090209450611cce565b600082815260208690526040902094505b5050600101611c80565b505060805250505050565b60ff8116610380026101a4810190369061052401811015611d86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f617461000000000000000000000000000000000000000000000000000000000060648201526084016108d1565b50919050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101611df2611df7565b905290565b6040518061040001604052806020906020820280368337509192915050565b600060208083528351808285015260005b81811015611e4357858101830151858201604001528201611e27565b81811115611e55576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008083601f840112611e9b57600080fd5b50813567ffffffffffffffff811115611eb357600080fd5b602083019150836020828501011115611ecb57600080fd5b9250929050565b600080600080600060608688031215611eea57600080fd5b853567ffffffffffffffff80821115611f0257600080fd5b611f0e89838a01611e89565b90975095506020880135915080821115611f2757600080fd5b50611f3488828901611e89565b96999598509660400135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008060408385031215611f8857600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a"; bytes internal constant anchorStateRegistryCode = hex"608060405234801561001057600080fd5b50600436106100675760003560e01c8063838c2d1e11610050578063838c2d1e146100fa578063c303f0df14610104578063f2b4e6171461011757600080fd5b806354fd4d501461006c5780637258a807146100be575b600080fd5b6100a86040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b5919061085c565b60405180910390f35b6100e56100cc36600461088b565b6001602081905260009182526040909120805491015482565b604080519283526020830191909152016100b5565b61010261015b565b005b61010261011236600461094f565b6105d4565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb1681526020016100b5565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526101f69190810190610a68565b92509250925060007f0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb73ffffffffffffffffffffffffffffffffffffffff16635f0150cb8585856040518463ffffffff1660e01b815260040161025b93929190610b39565b6040805180830381865afa158015610277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029b9190610b67565b5090508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f416e63686f72537461746552656769737472793a206661756c7420646973707560448201527f74652067616d65206e6f7420726567697374657265642077697468206661637460648201527f6f72790000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b600160008563ffffffff1663ffffffff168152602001908152602001600020600101548573ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610bc7565b11610422575050505050565b60028573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104939190610c0f565b60028111156104a4576104a4610be0565b146104b0575050505050565b60405180604001604052806105308773ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052d9190610bc7565b90565b81526020018673ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190610bc7565b905263ffffffff909416600090815260016020818152604090922086518155959091015194019390935550505050565b600054610100900460ff16158080156105f45750600054600160ff909116105b8061060e5750303b15801561060e575060005460ff166001145b61069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161037b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156106f857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60005b825181101561075e57600083828151811061071857610718610c30565b60209081029190910181015180820151905163ffffffff16600090815260018084526040909120825181559190920151910155508061075681610c5f565b9150506106fb565b5080156107c257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60005b838110156107fd5781810151838201526020016107e5565b8381111561080c576000848401525b50505050565b6000815180845261082a8160208601602086016107e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061086f6020830184610812565b9392505050565b63ffffffff8116811461088857600080fd5b50565b60006020828403121561089d57600080fd5b813561086f81610876565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156108fa576108fa6108a8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610947576109476108a8565b604052919050565b6000602080838503121561096257600080fd5b823567ffffffffffffffff8082111561097a57600080fd5b818501915085601f83011261098e57600080fd5b8135818111156109a0576109a06108a8565b6109ae848260051b01610900565b818152848101925060609182028401850191888311156109cd57600080fd5b938501935b82851015610a5c57848903818112156109eb5760008081fd5b6109f36108d7565b86356109fe81610876565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301811315610a325760008081fd5b610a3a6108d7565b888a0135815290880135898201528189015285525093840193928501926109d2565b50979650505050505050565b600080600060608486031215610a7d57600080fd5b8351610a8881610876565b60208501516040860151919450925067ffffffffffffffff80821115610aad57600080fd5b818601915086601f830112610ac157600080fd5b815181811115610ad357610ad36108a8565b610b0460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610900565b9150808252876020828501011115610b1b57600080fd5b610b2c8160208401602086016107e2565b5080925050509250925092565b63ffffffff84168152826020820152606060408201526000610b5e6060830184610812565b95945050505050565b60008060408385031215610b7a57600080fd5b825173ffffffffffffffffffffffffffffffffffffffff81168114610b9e57600080fd5b602084015190925067ffffffffffffffff81168114610bbc57600080fd5b809150509250929050565b600060208284031215610bd957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610c2157600080fd5b81516003811061086f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610cb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c634300080f000a"; bytes internal constant acc27Code = - hex"6080604052600436106102f25760003560e01c806370872aa51161018f578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b18578063fa315aa914610b3c578063fe2bbeb214610b6f57600080fd5b8063ec5e630814610a95578063eff0f59214610ac8578063f8f43ff614610af857600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a0f578063d8cc1a3c14610a42578063dabd396d14610a6257600080fd5b8063c6f0308c14610937578063cf09e0d0146109c1578063d5d44d80146109e257600080fd5b80638d450a9511610143578063bcef3b551161011d578063bcef3b55146108b7578063bd8da956146108f7578063c395e1ca1461091757600080fd5b80638d450a9514610777578063a445ece6146107aa578063bbdc02db1461087657600080fd5b80638129fc1c116101745780638129fc1c1461071a5780638980e0cc146107225780638b85902b1461073757600080fd5b806370872aa5146106f25780637b0f0adc1461070757600080fd5b80633fc8cef3116102485780635c0cba33116101fc5780636361506d116101d65780636361506d1461066c5780636b6716c0146106ac5780636f034409146106df57600080fd5b80635c0cba3314610604578063609d33341461063757806360e274641461064c57600080fd5b806354fd4d501161022d57806354fd4d501461055e57806357da950e146105b45780635a5fa2d9146105e457600080fd5b80633fc8cef314610518578063472777c61461054b57600080fd5b80632810e1d6116102aa57806337b1b2291161028457806337b1b229146104655780633a768463146104a55780633e3ac912146104d857600080fd5b80632810e1d6146103de5780632ad69aeb146103f357806330dbe5701461041357600080fd5b806319effeb4116102db57806319effeb414610339578063200d2ed21461038457806325fc2ace146103bf57600080fd5b806301935130146102f757806303c2924d14610319575b600080fd5b34801561030357600080fd5b5061031761031236600461532d565b610b9f565b005b34801561032557600080fd5b50610317610334366004615388565b610ec0565b34801561034557600080fd5b506000546103669068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561039057600080fd5b506000546103b290700100000000000000000000000000000000900460ff1681565b60405161037b91906153d9565b3480156103cb57600080fd5b506008545b60405190815260200161037b565b3480156103ea57600080fd5b506103b2611566565b3480156103ff57600080fd5b506103d061040e366004615388565b61180b565b34801561041f57600080fd5b506001546104409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161037b565b34801561047157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610440565b3480156104b157600080fd5b507f000000000000000000000000f698388bfcdbd3f9f2f13ebc3e01471b3cc7ce83610440565b3480156104e457600080fd5b50600054610508907201000000000000000000000000000000000000900460ff1681565b604051901515815260200161037b565b34801561052457600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610440565b61031761055936600461541a565b611841565b34801561056a57600080fd5b506105a76040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161037b91906154b1565b3480156105c057600080fd5b506008546009546105cf919082565b6040805192835260208301919091520161037b565b3480156105f057600080fd5b506103d06105ff3660046154c4565b611853565b34801561061057600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610440565b34801561064357600080fd5b506105a761188d565b34801561065857600080fd5b50610317610667366004615502565b61189b565b34801561067857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103d0565b3480156106b857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b6103176106ed366004615534565b611a42565b3480156106fe57600080fd5b506009546103d0565b61031761071536600461541a565b6123e3565b6103176123f0565b34801561072e57600080fd5b506002546103d0565b34801561074357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103d0565b34801561078357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b3480156107b657600080fd5b506108226107c53660046154c4565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff16606082015260800161037b565b34801561088257600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161037b565b3480156108c357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103d0565b34801561090357600080fd5b506103666109123660046154c4565b612949565b34801561092357600080fd5b506103d0610932366004615573565b612b28565b34801561094357600080fd5b506109576109523660046154c4565b612d0b565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161037b565b3480156109cd57600080fd5b506000546103669067ffffffffffffffff1681565b3480156109ee57600080fd5b506103d06109fd366004615502565b60036020526000908152604090205481565b348015610a1b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103d0565b348015610a4e57600080fd5b50610317610a5d3660046155a5565b612da2565b348015610a6e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b0610366565b348015610aa157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103d0565b348015610ad457600080fd5b50610508610ae33660046154c4565b60046020526000908152604090205460ff1681565b348015610b0457600080fd5b50610317610b1336600461541a565b6133d1565b348015610b2457600080fd5b50610b2d613823565b60405161037b9392919061562f565b348015610b4857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103d0565b348015610b7b57600080fd5b50610508610b8a3660046154c4565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610bcb57610bcb6153aa565b14610c02576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c55576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610ca3610c9e36869003860186615683565b613883565b14610cda576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cef929190615710565b604051809103902014610d2e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d77610d7284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138df92505050565b61394c565b90506000610d9e82600881518110610d9157610d91615720565b6020026020010151613b02565b9050602081511115610ddc576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610e51576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610eec57610eec6153aa565b14610f23576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610f3857610f38615720565b906000526020600020906005020190506000610f5384612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015610fbc576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611005576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561102257508515155b156110bd578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110555781611071565b600186015473ffffffffffffffffffffffffffffffffffffffff165b905061107d8187613bb6565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152611160576fffffffffffffffffffffffffffffffff6040820152600181526000869003611160578195505b600086826020015163ffffffff16611178919061577e565b90506000838211611189578161118b565b835b602084015190915063ffffffff165b818110156112d75760008682815481106111b6576111b6615720565b6000918252602080832090910154808352600690915260409091205490915060ff1661120e576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061122357611223615720565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112805750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b156112c257600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b505080806112cf90615796565b91505061119a565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915584900361155b57606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561145757506000547201000000000000000000000000000000000000900460ff165b156114cc5760015473ffffffffffffffffffffffffffffffffffffffff1661147f818a613bb6565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909116178855611559565b61151373ffffffffffffffffffffffffffffffffffffffff8216156114f1578161150d565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89613bb6565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611594576115946153aa565b146115cb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661162f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008154811061165b5761165b615720565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611696576001611699565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561174a5761174a6153aa565b02179055600281111561175f5761175f6153aa565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117f057600080fd5b505af1158015611804573d6000803e3d6000fd5b5050505090565b6005602052816000526040600020818154811061182757600080fd5b90600052602060002001600091509150505481565b905090565b61184e8383836001611a42565b505050565b6000818152600760209081526040808320600590925282208054825461188490610100900463ffffffff16826157ce565b95945050505050565b606061183c60546020613cb7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812080549082905590819003611900576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a02576040519150601f19603f3d011682016040523d82523d6000602084013e611a07565b606091505b505090508061184e576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054700100000000000000000000000000000000900460ff166002811115611a6e57611a6e6153aa565b14611aa5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110611aba57611aba615720565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514611ba1576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000611c61826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611c9c5750611c997f0000000000000000000000000000000000000000000000000000000000000004600261577e565b81145b8015611ca6575084155b15611cdd576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611d03575086155b15611d3a576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115611d94576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dbf7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b8103611dd157611dd186888588613d09565b34611ddb83612b28565b14611e12576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e1d88612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603611e85576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016611ee591906157e5565b67ffffffffffffffff16611f008267ffffffffffffffff1690565b67ffffffffffffffff161115611fe2576000611f3d60017f00000000000000000000000000000000000000000000000000000000000000046157ce565b8314611f735767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611fa8565b611fa87f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261580e565b9050611fde817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff166157e5565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615612060576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b815260200190815260200160002060016002805490506122f691906157ce565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b15801561238e57600080fd5b505af11580156123a2573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b61184e8383836000611a42565b60005471010000000000000000000000000000000000900460ff1615612442576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa1580156124f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251a919061583e565b909250905081612556576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461258957639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511612623576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b1580156128f857600080fd5b505af115801561290c573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff166002811115612977576129776153aa565b146129ae576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600283815481106129c3576129c3615720565b600091825260208220600590910201805490925063ffffffff90811614612a3257815460028054909163ffffffff16908110612a0157612a01615720565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090612a6a90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b612a7e9067ffffffffffffffff16426157ce565b612a9d612a5d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16612ab1919061577e565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611612afe5780611884565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080612bc7836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115612c26576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000612c418383615891565b9050670de0b6b3a76400006000612c78827f00000000000000000000000000000000000000000000000000000000000000086158a5565b90506000612c96612c91670de0b6b3a7640000866158a5565b613eba565b90506000612ca48484614115565b90506000612cb28383614164565b90506000612cbf82614192565b90506000612cde82612cd9670de0b6b3a76400008f6158a5565b61437a565b90506000612cec8b83614164565b9050612cf8818d6158a5565b9f9e505050505050505050505050505050565b60028181548110612d1b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115612dce57612dce6153aa565b14612e05576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110612e1a57612e1a615720565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050612e797f0000000000000000000000000000000000000000000000000000000000000008600161577e565b612f15826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614612f4f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561304657612fa27f00000000000000000000000000000000000000000000000000000000000000047f00000000000000000000000000000000000000000000000000000000000000086157ce565b6001901b612fc1846fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff16612fdd91906158e2565b1561301a5761301161300260016fffffffffffffffffffffffffffffffff87166158f6565b865463ffffffff166000614453565b6003015461303c565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050613070565b6003850154915061306d6130026fffffffffffffffffffffffffffffffff8616600161591f565b90505b600882901b60088a8a604051613087929190615710565b6040518091039020901b146130c8576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006130d38c614537565b905060006130e2836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000f698388bfcdbd3f9f2f13ebc3e01471b3cc7ce8373ffffffffffffffffffffffffffffffffffffffff169063e14ced329061315c908f908f908f908f908a9060040161599c565b6020604051808303816000875af115801561317b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319f91906159d6565b60048501549114915060009060029061324a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132e6896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132f091906159ef565b6132fa9190615a12565b60ff16159050811515810361333b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156133fd576133fd6153aa565b14613434576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061344386614566565b935093509350935060006134598585858561496f565b905060007f000000000000000000000000f698388bfcdbd3f9f2f13ebc3e01471b3cc7ce8373ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ec9190615a34565b9050600189036135e45773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84613548367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de91906159d6565b5061155b565b600289036136105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489613548565b6003890361363c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487613548565b600489036137585760006136826fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614a29565b60095461368f919061577e565b61369a90600161577e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561372d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375191906159d6565b505061155b565b600589036137f1576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161359b565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061387c61188d565b9050909192565b600081600001518260200151836040015184606001516040516020016138c2949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152815160000361392e576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061395c85614ad7565b919450925090506001816001811115613977576139776153aa565b146139ae576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516139ba838561577e565b146139f1576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613a085790505093506000835b8651811015613af657600080613a7b6040518060400160405280858c60000151613a5f91906157ce565b8152602001858c60200151613a74919061577e565b9052614ad7565b509150915060405180604001604052808383613a97919061577e565b8152602001848b60200151613aac919061577e565b815250888581518110613ac157613ac1615720565b6020908102919091010152613ad760018561577e565b9350613ae3818361577e565b613aed908461577e565b92505050613a35565b50845250919392505050565b60606000806000613b1285614ad7565b919450925090506000816001811115613b2d57613b2d6153aa565b14613b64576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b6e828461577e565b855114613ba7576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188485602001518484614f75565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff90931692839290613c0590849061577e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b158015613c9a57600080fd5b505af1158015613cae573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b6000613d286fffffffffffffffffffffffffffffffff8416600161591f565b90506000613d3882866001614453565b9050600086901a8380613e245750613d7160027f00000000000000000000000000000000000000000000000000000000000000046158e2565b6004830154600290613e15906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613e1f9190615a12565b60ff16145b15613e7c5760ff811660011480613e3e575060ff81166002145b613e77576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b613cae565b60ff811615613cae576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613f1957631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261415257637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156141825763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d782136141c057919050565b680755bf798b4a1bf1e582126141de5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006143ab670de0b6b3a76400008361439286613eba565b61439c9190615a51565b6143a69190615b0d565b614192565b90505b92915050565b600080614441837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b6000808261449c576144976fffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000461500a565b6144b7565b6144b7856fffffffffffffffffffffffffffffffff16615196565b9050600284815481106144cc576144cc615720565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461452f57815460028054909163ffffffff1690811061451a5761451a615720565b906000526020600020906005020191506144dd565b509392505050565b600080600080600061454886614566565b935093509350935061455c8484848461496f565b9695505050505050565b600080600080600085905060006002828154811061458657614586615720565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000049061465d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614697576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f00000000000000000000000000000000000000000000000000000000000000049061475e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156147d357825463ffffffff1661479d7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b83036147a7578391505b600281815481106147ba576147ba615720565b906000526020600020906005020193508094505061469b565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661483c614827856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561490b576000614874836fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff1611156148df5760006148b66148ae60016fffffffffffffffffffffffffffffffff86166158f6565b896001614453565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506148e59050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614961565b600061492d6148ae6fffffffffffffffffffffffffffffffff8516600161591f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156149dc5760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611884565b8282604051602001614a0a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614ab6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614b1a576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614b3f576000600160009450945094505050614f6e565b60b78111614c55576000614b546080836157ce565b905080876000015111614b93576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614c0b57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614c42576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614f6e915050565b60bf8111614db3576000614c6a60b7836157ce565b905080876000015111614ca9576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614d0b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614d53576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d5d818461577e565b895111614d96576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614da183600161577e565b9750955060009450614f6e9350505050565b60f78111614e18576000614dc860c0836157ce565b905080876000015111614e07576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614f6e915050565b6000614e2560f7836157ce565b905080876000015111614e64576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614ec6576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614f0e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f18818461577e565b895111614f51576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f5c83600161577e565b9750955060019450614f6e9350505050565b9193909250565b60608167ffffffffffffffff811115614f9057614f90615654565b6040519080825280601f01601f191660200182016040528015614fba576020820181803683370190505b5090508115615003576000614fcf848661577e565b90506020820160005b84811015614ff0578281015182820152602001614fd8565b84811115614fff576000858301525b5050505b9392505050565b6000816150a9846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150bf5763b34b5c226000526004601cfd5b6150c883615196565b905081615167826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116143ae576143ab61517d83600161577e565b6fffffffffffffffffffffffffffffffff83169061523b565b6000811960018301168161522a827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806152c8847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126152f657600080fd5b50813567ffffffffffffffff81111561530e57600080fd5b60208301915083602082850101111561532657600080fd5b9250929050565b600080600083850360a081121561534357600080fd5b608081121561535157600080fd5b50839250608084013567ffffffffffffffff81111561536f57600080fd5b61537b868287016152e4565b9497909650939450505050565b6000806040838503121561539b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310615414577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561542f57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561546c57602081850181015186830182015201615450565b8181111561547e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006143ab6020830184615446565b6000602082840312156154d657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146154ff57600080fd5b50565b60006020828403121561551457600080fd5b8135615003816154dd565b8035801515811461552f57600080fd5b919050565b6000806000806080858703121561554a57600080fd5b8435935060208501359250604085013591506155686060860161551f565b905092959194509250565b60006020828403121561558557600080fd5b81356fffffffffffffffffffffffffffffffff8116811461500357600080fd5b600080600080600080608087890312156155be57600080fd5b863595506155ce6020880161551f565b9450604087013567ffffffffffffffff808211156155eb57600080fd5b6155f78a838b016152e4565b9096509450606089013591508082111561561057600080fd5b5061561d89828a016152e4565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006118846060830184615446565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561569557600080fd5b6040516080810181811067ffffffffffffffff821117156156df577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157915761579161574f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157c7576157c761574f565b5060010190565b6000828210156157e0576157e061574f565b500390565b600067ffffffffffffffff838116908316818110156158065761580661574f565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156158355761583561574f565b02949350505050565b6000806040838503121561585157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158a0576158a0615862565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158dd576158dd61574f565b500290565b6000826158f1576158f1615862565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156158065761580661574f565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561594a5761594a61574f565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006159b0606083018789615953565b82810360208401526159c3818688615953565b9150508260408301529695505050505050565b6000602082840312156159e857600080fd5b5051919050565b600060ff821660ff841680821015615a0957615a0961574f565b90039392505050565b600060ff831680615a2557615a25615862565b8060ff84160691505092915050565b600060208284031215615a4657600080fd5b8151615003816154dd565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a9257615a9261574f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615acd57615acd61574f565b60008712925087820587128484161615615ae957615ae961574f565b87850587128184161615615aff57615aff61574f565b505050929093029392505050565b600082615b1c57615b1c615862565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b7057615b7061574f565b50059056fea164736f6c634300080f000a"; + hex"6080604052600436106102f25760003560e01c806370872aa51161018f578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b18578063fa315aa914610b3c578063fe2bbeb214610b6f57600080fd5b8063ec5e630814610a95578063eff0f59214610ac8578063f8f43ff614610af857600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a0f578063d8cc1a3c14610a42578063dabd396d14610a6257600080fd5b8063c6f0308c14610937578063cf09e0d0146109c1578063d5d44d80146109e257600080fd5b80638d450a9511610143578063bcef3b551161011d578063bcef3b55146108b7578063bd8da956146108f7578063c395e1ca1461091757600080fd5b80638d450a9514610777578063a445ece6146107aa578063bbdc02db1461087657600080fd5b80638129fc1c116101745780638129fc1c1461071a5780638980e0cc146107225780638b85902b1461073757600080fd5b806370872aa5146106f25780637b0f0adc1461070757600080fd5b80633fc8cef3116102485780635c0cba33116101fc5780636361506d116101d65780636361506d1461066c5780636b6716c0146106ac5780636f034409146106df57600080fd5b80635c0cba3314610604578063609d33341461063757806360e274641461064c57600080fd5b806354fd4d501161022d57806354fd4d501461055e57806357da950e146105b45780635a5fa2d9146105e457600080fd5b80633fc8cef314610518578063472777c61461054b57600080fd5b80632810e1d6116102aa57806337b1b2291161028457806337b1b229146104655780633a768463146104a55780633e3ac912146104d857600080fd5b80632810e1d6146103de5780632ad69aeb146103f357806330dbe5701461041357600080fd5b806319effeb4116102db57806319effeb414610339578063200d2ed21461038457806325fc2ace146103bf57600080fd5b806301935130146102f757806303c2924d14610319575b600080fd5b34801561030357600080fd5b5061031761031236600461532d565b610b9f565b005b34801561032557600080fd5b50610317610334366004615388565b610ec0565b34801561034557600080fd5b506000546103669068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561039057600080fd5b506000546103b290700100000000000000000000000000000000900460ff1681565b60405161037b91906153d9565b3480156103cb57600080fd5b506008545b60405190815260200161037b565b3480156103ea57600080fd5b506103b2611566565b3480156103ff57600080fd5b506103d061040e366004615388565b61180b565b34801561041f57600080fd5b506001546104409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161037b565b34801561047157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610440565b3480156104b157600080fd5b507f0000000000000000000000001c0e3b8e58dd91536caf37a6009536255a7816a6610440565b3480156104e457600080fd5b50600054610508907201000000000000000000000000000000000000900460ff1681565b604051901515815260200161037b565b34801561052457600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610440565b61031761055936600461541a565b611841565b34801561056a57600080fd5b506105a76040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161037b91906154b1565b3480156105c057600080fd5b506008546009546105cf919082565b6040805192835260208301919091520161037b565b3480156105f057600080fd5b506103d06105ff3660046154c4565b611853565b34801561061057600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610440565b34801561064357600080fd5b506105a761188d565b34801561065857600080fd5b50610317610667366004615502565b61189b565b34801561067857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103d0565b3480156106b857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b6103176106ed366004615534565b611a42565b3480156106fe57600080fd5b506009546103d0565b61031761071536600461541a565b6123e3565b6103176123f0565b34801561072e57600080fd5b506002546103d0565b34801561074357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103d0565b34801561078357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b3480156107b657600080fd5b506108226107c53660046154c4565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff16606082015260800161037b565b34801561088257600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161037b565b3480156108c357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103d0565b34801561090357600080fd5b506103666109123660046154c4565b612949565b34801561092357600080fd5b506103d0610932366004615573565b612b28565b34801561094357600080fd5b506109576109523660046154c4565b612d0b565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161037b565b3480156109cd57600080fd5b506000546103669067ffffffffffffffff1681565b3480156109ee57600080fd5b506103d06109fd366004615502565b60036020526000908152604090205481565b348015610a1b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103d0565b348015610a4e57600080fd5b50610317610a5d3660046155a5565b612da2565b348015610a6e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b0610366565b348015610aa157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103d0565b348015610ad457600080fd5b50610508610ae33660046154c4565b60046020526000908152604090205460ff1681565b348015610b0457600080fd5b50610317610b1336600461541a565b6133d1565b348015610b2457600080fd5b50610b2d613823565b60405161037b9392919061562f565b348015610b4857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103d0565b348015610b7b57600080fd5b50610508610b8a3660046154c4565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610bcb57610bcb6153aa565b14610c02576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c55576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610ca3610c9e36869003860186615683565b613883565b14610cda576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cef929190615710565b604051809103902014610d2e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d77610d7284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138df92505050565b61394c565b90506000610d9e82600881518110610d9157610d91615720565b6020026020010151613b02565b9050602081511115610ddc576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610e51576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610eec57610eec6153aa565b14610f23576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610f3857610f38615720565b906000526020600020906005020190506000610f5384612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015610fbc576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611005576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561102257508515155b156110bd578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110555781611071565b600186015473ffffffffffffffffffffffffffffffffffffffff165b905061107d8187613bb6565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152611160576fffffffffffffffffffffffffffffffff6040820152600181526000869003611160578195505b600086826020015163ffffffff16611178919061577e565b90506000838211611189578161118b565b835b602084015190915063ffffffff165b818110156112d75760008682815481106111b6576111b6615720565b6000918252602080832090910154808352600690915260409091205490915060ff1661120e576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061122357611223615720565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112805750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b156112c257600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b505080806112cf90615796565b91505061119a565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915584900361155b57606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561145757506000547201000000000000000000000000000000000000900460ff165b156114cc5760015473ffffffffffffffffffffffffffffffffffffffff1661147f818a613bb6565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909116178855611559565b61151373ffffffffffffffffffffffffffffffffffffffff8216156114f1578161150d565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89613bb6565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611594576115946153aa565b146115cb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661162f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008154811061165b5761165b615720565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611696576001611699565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561174a5761174a6153aa565b02179055600281111561175f5761175f6153aa565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117f057600080fd5b505af1158015611804573d6000803e3d6000fd5b5050505090565b6005602052816000526040600020818154811061182757600080fd5b90600052602060002001600091509150505481565b905090565b61184e8383836001611a42565b505050565b6000818152600760209081526040808320600590925282208054825461188490610100900463ffffffff16826157ce565b95945050505050565b606061183c60546020613cb7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812080549082905590819003611900576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a02576040519150601f19603f3d011682016040523d82523d6000602084013e611a07565b606091505b505090508061184e576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054700100000000000000000000000000000000900460ff166002811115611a6e57611a6e6153aa565b14611aa5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110611aba57611aba615720565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514611ba1576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000611c61826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611c9c5750611c997f0000000000000000000000000000000000000000000000000000000000000004600261577e565b81145b8015611ca6575084155b15611cdd576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611d03575086155b15611d3a576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115611d94576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dbf7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b8103611dd157611dd186888588613d09565b34611ddb83612b28565b14611e12576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e1d88612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603611e85576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016611ee591906157e5565b67ffffffffffffffff16611f008267ffffffffffffffff1690565b67ffffffffffffffff161115611fe2576000611f3d60017f00000000000000000000000000000000000000000000000000000000000000046157ce565b8314611f735767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611fa8565b611fa87f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261580e565b9050611fde817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff166157e5565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615612060576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b815260200190815260200160002060016002805490506122f691906157ce565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b15801561238e57600080fd5b505af11580156123a2573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b61184e8383836000611a42565b60005471010000000000000000000000000000000000900460ff1615612442576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa1580156124f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251a919061583e565b909250905081612556576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461258957639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511612623576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b1580156128f857600080fd5b505af115801561290c573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff166002811115612977576129776153aa565b146129ae576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600283815481106129c3576129c3615720565b600091825260208220600590910201805490925063ffffffff90811614612a3257815460028054909163ffffffff16908110612a0157612a01615720565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090612a6a90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b612a7e9067ffffffffffffffff16426157ce565b612a9d612a5d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16612ab1919061577e565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611612afe5780611884565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080612bc7836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115612c26576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000612c418383615891565b9050670de0b6b3a76400006000612c78827f00000000000000000000000000000000000000000000000000000000000000086158a5565b90506000612c96612c91670de0b6b3a7640000866158a5565b613eba565b90506000612ca48484614115565b90506000612cb28383614164565b90506000612cbf82614192565b90506000612cde82612cd9670de0b6b3a76400008f6158a5565b61437a565b90506000612cec8b83614164565b9050612cf8818d6158a5565b9f9e505050505050505050505050505050565b60028181548110612d1b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115612dce57612dce6153aa565b14612e05576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110612e1a57612e1a615720565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050612e797f0000000000000000000000000000000000000000000000000000000000000008600161577e565b612f15826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614612f4f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561304657612fa27f00000000000000000000000000000000000000000000000000000000000000047f00000000000000000000000000000000000000000000000000000000000000086157ce565b6001901b612fc1846fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff16612fdd91906158e2565b1561301a5761301161300260016fffffffffffffffffffffffffffffffff87166158f6565b865463ffffffff166000614453565b6003015461303c565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050613070565b6003850154915061306d6130026fffffffffffffffffffffffffffffffff8616600161591f565b90505b600882901b60088a8a604051613087929190615710565b6040518091039020901b146130c8576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006130d38c614537565b905060006130e2836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f0000000000000000000000001c0e3b8e58dd91536caf37a6009536255a7816a673ffffffffffffffffffffffffffffffffffffffff169063e14ced329061315c908f908f908f908f908a9060040161599c565b6020604051808303816000875af115801561317b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319f91906159d6565b60048501549114915060009060029061324a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132e6896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132f091906159ef565b6132fa9190615a12565b60ff16159050811515810361333b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156133fd576133fd6153aa565b14613434576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061344386614566565b935093509350935060006134598585858561496f565b905060007f0000000000000000000000001c0e3b8e58dd91536caf37a6009536255a7816a673ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ec9190615a34565b9050600189036135e45773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84613548367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de91906159d6565b5061155b565b600289036136105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489613548565b6003890361363c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487613548565b600489036137585760006136826fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614a29565b60095461368f919061577e565b61369a90600161577e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561372d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375191906159d6565b505061155b565b600589036137f1576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161359b565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061387c61188d565b9050909192565b600081600001518260200151836040015184606001516040516020016138c2949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152815160000361392e576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061395c85614ad7565b919450925090506001816001811115613977576139776153aa565b146139ae576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516139ba838561577e565b146139f1576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613a085790505093506000835b8651811015613af657600080613a7b6040518060400160405280858c60000151613a5f91906157ce565b8152602001858c60200151613a74919061577e565b9052614ad7565b509150915060405180604001604052808383613a97919061577e565b8152602001848b60200151613aac919061577e565b815250888581518110613ac157613ac1615720565b6020908102919091010152613ad760018561577e565b9350613ae3818361577e565b613aed908461577e565b92505050613a35565b50845250919392505050565b60606000806000613b1285614ad7565b919450925090506000816001811115613b2d57613b2d6153aa565b14613b64576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b6e828461577e565b855114613ba7576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188485602001518484614f75565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff90931692839290613c0590849061577e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b158015613c9a57600080fd5b505af1158015613cae573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b6000613d286fffffffffffffffffffffffffffffffff8416600161591f565b90506000613d3882866001614453565b9050600086901a8380613e245750613d7160027f00000000000000000000000000000000000000000000000000000000000000046158e2565b6004830154600290613e15906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613e1f9190615a12565b60ff16145b15613e7c5760ff811660011480613e3e575060ff81166002145b613e77576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b613cae565b60ff811615613cae576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613f1957631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261415257637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156141825763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d782136141c057919050565b680755bf798b4a1bf1e582126141de5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006143ab670de0b6b3a76400008361439286613eba565b61439c9190615a51565b6143a69190615b0d565b614192565b90505b92915050565b600080614441837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b6000808261449c576144976fffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000461500a565b6144b7565b6144b7856fffffffffffffffffffffffffffffffff16615196565b9050600284815481106144cc576144cc615720565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461452f57815460028054909163ffffffff1690811061451a5761451a615720565b906000526020600020906005020191506144dd565b509392505050565b600080600080600061454886614566565b935093509350935061455c8484848461496f565b9695505050505050565b600080600080600085905060006002828154811061458657614586615720565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000049061465d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614697576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f00000000000000000000000000000000000000000000000000000000000000049061475e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156147d357825463ffffffff1661479d7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b83036147a7578391505b600281815481106147ba576147ba615720565b906000526020600020906005020193508094505061469b565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661483c614827856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561490b576000614874836fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff1611156148df5760006148b66148ae60016fffffffffffffffffffffffffffffffff86166158f6565b896001614453565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506148e59050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614961565b600061492d6148ae6fffffffffffffffffffffffffffffffff8516600161591f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156149dc5760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611884565b8282604051602001614a0a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614ab6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614b1a576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614b3f576000600160009450945094505050614f6e565b60b78111614c55576000614b546080836157ce565b905080876000015111614b93576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614c0b57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614c42576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614f6e915050565b60bf8111614db3576000614c6a60b7836157ce565b905080876000015111614ca9576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614d0b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614d53576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d5d818461577e565b895111614d96576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614da183600161577e565b9750955060009450614f6e9350505050565b60f78111614e18576000614dc860c0836157ce565b905080876000015111614e07576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614f6e915050565b6000614e2560f7836157ce565b905080876000015111614e64576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614ec6576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614f0e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f18818461577e565b895111614f51576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f5c83600161577e565b9750955060019450614f6e9350505050565b9193909250565b60608167ffffffffffffffff811115614f9057614f90615654565b6040519080825280601f01601f191660200182016040528015614fba576020820181803683370190505b5090508115615003576000614fcf848661577e565b90506020820160005b84811015614ff0578281015182820152602001614fd8565b84811115614fff576000858301525b5050505b9392505050565b6000816150a9846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150bf5763b34b5c226000526004601cfd5b6150c883615196565b905081615167826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116143ae576143ab61517d83600161577e565b6fffffffffffffffffffffffffffffffff83169061523b565b6000811960018301168161522a827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806152c8847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126152f657600080fd5b50813567ffffffffffffffff81111561530e57600080fd5b60208301915083602082850101111561532657600080fd5b9250929050565b600080600083850360a081121561534357600080fd5b608081121561535157600080fd5b50839250608084013567ffffffffffffffff81111561536f57600080fd5b61537b868287016152e4565b9497909650939450505050565b6000806040838503121561539b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310615414577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561542f57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561546c57602081850181015186830182015201615450565b8181111561547e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006143ab6020830184615446565b6000602082840312156154d657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146154ff57600080fd5b50565b60006020828403121561551457600080fd5b8135615003816154dd565b8035801515811461552f57600080fd5b919050565b6000806000806080858703121561554a57600080fd5b8435935060208501359250604085013591506155686060860161551f565b905092959194509250565b60006020828403121561558557600080fd5b81356fffffffffffffffffffffffffffffffff8116811461500357600080fd5b600080600080600080608087890312156155be57600080fd5b863595506155ce6020880161551f565b9450604087013567ffffffffffffffff808211156155eb57600080fd5b6155f78a838b016152e4565b9096509450606089013591508082111561561057600080fd5b5061561d89828a016152e4565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006118846060830184615446565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561569557600080fd5b6040516080810181811067ffffffffffffffff821117156156df577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157915761579161574f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157c7576157c761574f565b5060010190565b6000828210156157e0576157e061574f565b500390565b600067ffffffffffffffff838116908316818110156158065761580661574f565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156158355761583561574f565b02949350505050565b6000806040838503121561585157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158a0576158a0615862565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158dd576158dd61574f565b500290565b6000826158f1576158f1615862565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156158065761580661574f565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561594a5761594a61574f565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006159b0606083018789615953565b82810360208401526159c3818688615953565b9150508260408301529695505050505050565b6000602082840312156159e857600080fd5b5051919050565b600060ff821660ff841680821015615a0957615a0961574f565b90039392505050565b600060ff831680615a2557615a25615862565b8060ff84160691505092915050565b600060208284031215615a4657600080fd5b8151615003816154dd565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a9257615a9261574f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615acd57615acd61574f565b60008712925087820587128484161615615ae957615ae961574f565b87850587128184161615615aff57615aff61574f565b505050929093029392505050565b600082615b1c57615b1c615862565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b7057615b7061574f565b50059056fea164736f6c634300080f000a"; bytes internal constant acc28Code = - hex"6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b94578063fa315aa914610bb8578063fe2bbeb214610beb57600080fd5b8063ec5e630814610b11578063eff0f59214610b44578063f8f43ff614610b7457600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a8b578063d8cc1a3c14610abe578063dabd396d14610ade57600080fd5b8063c6f0308c146109b3578063cf09e0d014610a3d578063d5d44d8014610a5e57600080fd5b8063a445ece611610143578063bcef3b551161011d578063bcef3b5514610933578063bd8da95614610973578063c395e1ca1461099357600080fd5b8063a445ece6146107f3578063a8e4fb90146108bf578063bbdc02db146108f257600080fd5b80638980e0cc116101745780638980e0cc1461076b5780638b85902b146107805780638d450a95146107c057600080fd5b806370872aa51461073b5780637b0f0adc146107505780638129fc1c1461076357600080fd5b80633fc8cef31161025e5780635c0cba33116102075780636361506d116101e15780636361506d146106b55780636b6716c0146106f55780636f0344091461072857600080fd5b80635c0cba331461064d578063609d33341461068057806360e274641461069557600080fd5b806354fd4d501161023857806354fd4d50146105a757806357da950e146105fd5780635a5fa2d91461062d57600080fd5b80633fc8cef31461052e578063472777c614610561578063534db0e21461057457600080fd5b80632810e1d6116102c057806337b1b2291161029a57806337b1b2291461047b5780633a768463146104bb5780633e3ac912146104ee57600080fd5b80632810e1d6146103f45780632ad69aeb1461040957806330dbe5701461042957600080fd5b806319effeb4116102f157806319effeb41461034f578063200d2ed21461039a57806325fc2ace146103d557600080fd5b8063019351301461030d57806303c2924d1461032f575b600080fd5b34801561031957600080fd5b5061032d6103283660046155a8565b610c1b565b005b34801561033b57600080fd5b5061032d61034a366004615603565b610f3c565b34801561035b57600080fd5b5060005461037c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103a657600080fd5b506000546103c890700100000000000000000000000000000000900460ff1681565b6040516103919190615654565b3480156103e157600080fd5b506008545b604051908152602001610391565b34801561040057600080fd5b506103c86115e2565b34801561041557600080fd5b506103e6610424366004615603565b611887565b34801561043557600080fd5b506001546104569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610391565b34801561048757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610456565b3480156104c757600080fd5b507f000000000000000000000000f698388bfcdbd3f9f2f13ebc3e01471b3cc7ce83610456565b3480156104fa57600080fd5b5060005461051e907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610391565b34801561053a57600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610456565b61032d61056f366004615695565b6118bd565b34801561058057600080fd5b507f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63610456565b3480156105b357600080fd5b506105f06040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b604051610391919061572c565b34801561060957600080fd5b50600854600954610618919082565b60408051928352602083019190915201610391565b34801561063957600080fd5b506103e661064836600461573f565b6118cf565b34801561065957600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610456565b34801561068c57600080fd5b506105f0611909565b3480156106a157600080fd5b5061032d6106b036600461577d565b611917565b3480156106c157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103e6565b34801561070157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b61032d6107363660046157af565b611abe565b34801561074757600080fd5b506009546103e6565b61032d61075e366004615695565b611b7f565b61032d611b8c565b34801561077757600080fd5b506002546103e6565b34801561078c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103e6565b3480156107cc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b3480156107ff57600080fd5b5061086b61080e36600461573f565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff166060820152608001610391565b3480156108cb57600080fd5b507f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8610456565b3480156108fe57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000001168152602001610391565b34801561093f57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103e6565b34801561097f57600080fd5b5061037c61098e36600461573f565b611c05565b34801561099f57600080fd5b506103e66109ae3660046157ee565b611de4565b3480156109bf57600080fd5b506109d36109ce36600461573f565b611fc7565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610391565b348015610a4957600080fd5b5060005461037c9067ffffffffffffffff1681565b348015610a6a57600080fd5b506103e6610a7936600461577d565b60036020526000908152604090205481565b348015610a9757600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103e6565b348015610aca57600080fd5b5061032d610ad9366004615820565b61205e565b348015610aea57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b061037c565b348015610b1d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103e6565b348015610b5057600080fd5b5061051e610b5f36600461573f565b60046020526000908152604090205460ff1681565b348015610b8057600080fd5b5061032d610b8f366004615695565b612123565b348015610ba057600080fd5b50610ba9612575565b604051610391939291906158aa565b348015610bc457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103e6565b348015610bf757600080fd5b5061051e610c0636600461573f565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610c4757610c47615625565b14610c7e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610cd1576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d08367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610d1f610d1a368690038601866158fe565b6125d5565b14610d56576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610d6b92919061598b565b604051809103902014610daa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610df3610dee84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263192505050565b61269e565b90506000610e1a82600881518110610e0d57610e0d61599b565b6020026020010151612854565b9050602081511115610e58576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610ecd576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610f6857610f68615625565b14610f9f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610fb457610fb461599b565b906000526020600020906005020190506000610fcf84611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015611038576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611081576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561109e57508515155b15611139578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110d157816110ed565b600186015473ffffffffffffffffffffffffffffffffffffffff165b90506110f98187612908565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff1660608301526111dc576fffffffffffffffffffffffffffffffff60408201526001815260008690036111dc578195505b600086826020015163ffffffff166111f491906159f9565b905060008382116112055781611207565b835b602084015190915063ffffffff165b818110156113535760008682815481106112325761123261599b565b6000918252602080832090910154808352600690915260409091205490915060ff1661128a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061129f5761129f61599b565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112fc5750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b1561133e57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b5050808061134b90615a11565b915050611216565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092179091558490036115d757606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055891580156114d357506000547201000000000000000000000000000000000000900460ff165b156115485760015473ffffffffffffffffffffffffffffffffffffffff166114fb818a612908565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556115d5565b61158f73ffffffffffffffffffffffffffffffffffffffff82161561156d5781611589565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89612908565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561161057611610615625565b14611647576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166116ab576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106116d7576116d761599b565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611712576001611715565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156117c6576117c6615625565b0217905560028111156117db576117db615625565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505090565b600560205281600052604060002081815481106118a357600080fd5b90600052602060002001600091509150505481565b905090565b6118ca8383836001611abe565b505050565b6000818152600760209081526040808320600590925282208054825461190090610100900463ffffffff1682615a49565b95945050505050565b60606118b860546020612a09565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054908290559081900361197c576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a7e576040519150601f19603f3d011682016040523d82523d6000602084013e611a83565b606091505b50509050806118ca576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8161480611b3757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b611b6d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7984848484612a5b565b50505050565b6118ca8383836000611abe565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614611bfb576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c036133fc565b565b600080600054700100000000000000000000000000000000900460ff166002811115611c3357611c33615625565b14611c6a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110611c7f57611c7f61599b565b600091825260208220600590910201805490925063ffffffff90811614611cee57815460028054909163ffffffff16908110611cbd57611cbd61599b565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611d2690700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611d3a9067ffffffffffffffff1642615a49565b611d59611d19846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611d6d91906159f9565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611611dba5780611900565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080611e83836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115611ee2576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000611efd8383615a8f565b9050670de0b6b3a76400006000611f34827f0000000000000000000000000000000000000000000000000000000000000008615aa3565b90506000611f52611f4d670de0b6b3a764000086615aa3565b613955565b90506000611f608484613bb0565b90506000611f6e8383613bff565b90506000611f7b82613c2d565b90506000611f9a82611f95670de0b6b3a76400008f615aa3565b613e15565b90506000611fa88b83613bff565b9050611fb4818d615aa3565b9f9e505050505050505050505050505050565b60028181548110611fd757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614806120d757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b61210d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211b868686868686613e4f565b505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214f5761214f615625565b14612186576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806121958661447e565b935093509350935060006121ab85858585614887565b905060007f000000000000000000000000f698388bfcdbd3f9f2f13ebc3e01471b3cc7ce8373ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190615ae0565b9050600189036123365773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8461229a367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615afd565b506115d7565b600289036123625773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848961229a565b6003890361238e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848761229a565b600489036124aa5760006123d46fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614941565b6009546123e191906159f9565b6123ec9060016159f9565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561247f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a39190615afd565b50506115d7565b60058903612543576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122ed565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606125ce611909565b9050909192565b60008160000151826020015183604001518460600151604051602001612614949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612680576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006126ae856149ef565b9194509250905060018160018111156126c9576126c9615625565b14612700576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845161270c83856159f9565b14612743576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161275a5790505093506000835b8651811015612848576000806127cd6040518060400160405280858c600001516127b19190615a49565b8152602001858c602001516127c691906159f9565b90526149ef565b5091509150604051806040016040528083836127e991906159f9565b8152602001848b602001516127fe91906159f9565b8152508885815181106128135761281361599b565b60209081029190910101526128296001856159f9565b935061283581836159f9565b61283f90846159f9565b92505050612787565b50845250919392505050565b60606000806000612864856149ef565b91945092509050600081600181111561287f5761287f615625565b146128b6576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082846159f9565b8551146128f9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190085602001518484614e8d565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff909316928392906129579084906159f9565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b1580156129ec57600080fd5b505af1158015612a00573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054700100000000000000000000000000000000900460ff166002811115612a8757612a87615625565b14612abe576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110612ad357612ad361599b565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514612bba576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000612c7a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612cb55750612cb27f000000000000000000000000000000000000000000000000000000000000000460026159f9565b81145b8015612cbf575084155b15612cf6576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d1c575086155b15612d53576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115612dad576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd87f000000000000000000000000000000000000000000000000000000000000000460016159f9565b8103612dea57612dea86888588614f22565b34612df483611de4565b14612e2b576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e3688611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603612e9e576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016612efe9190615b16565b67ffffffffffffffff16612f198267ffffffffffffffff1690565b67ffffffffffffffff161115612ffb576000612f5660017f0000000000000000000000000000000000000000000000000000000000000004615a49565b8314612f8c5767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612fc1565b612fc17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615b3f565b9050612ff7817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff16615b16565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615613079576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b8152602001908152602001600020600160028054905061330f9190615a49565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b1580156133a757600080fd5b505af11580156133bb573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b60005471010000000000000000000000000000000000900460ff161561344e576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000001166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa158015613502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135269190615b6f565b909250905081613562576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461359557639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401351161362f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b15801561390457600080fd5b505af1158015613918573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136139b457631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613bed57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613c1d5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613c5b57919050565b680755bf798b4a1bf1e58212613c795763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613e46670de0b6b3a764000083613e2d86613955565b613e379190615b93565b613e419190615c4f565b613c2d565b90505b92915050565b60008054700100000000000000000000000000000000900460ff166002811115613e7b57613e7b615625565b14613eb2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110613ec757613ec761599b565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050613f267f000000000000000000000000000000000000000000000000000000000000000860016159f9565b613fc2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614613ffc576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156140f35761404f7f00000000000000000000000000000000000000000000000000000000000000047f0000000000000000000000000000000000000000000000000000000000000008615a49565b6001901b61406e846fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1661408a9190615cb7565b156140c7576140be6140af60016fffffffffffffffffffffffffffffffff8716615ccb565b865463ffffffff166000615172565b600301546140e9565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061411d565b6003850154915061411a6140af6fffffffffffffffffffffffffffffffff86166001615cf4565b90505b600882901b60088a8a60405161413492919061598b565b6040518091039020901b14614175576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141808c615256565b9050600061418f836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000f698388bfcdbd3f9f2f13ebc3e01471b3cc7ce8373ffffffffffffffffffffffffffffffffffffffff169063e14ced3290614209908f908f908f908f908a90600401615d71565b6020604051808303816000875af1158015614228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424c9190615afd565b6004850154911491506000906002906142f7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614393896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61439d9190615dab565b6143a79190615dce565b60ff1615905081151581036143e8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff161561443f576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061449e5761449e61599b565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000490614575906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145af576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000490614676906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146eb57825463ffffffff166146b57f000000000000000000000000000000000000000000000000000000000000000460016159f9565b83036146bf578391505b600281815481106146d2576146d261599b565b90600052602060002090600502019350809450506145b3565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661475461473f856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561482357600061478c836fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1611156147f75760006147ce6147c660016fffffffffffffffffffffffffffffffff8616615ccb565b896001615172565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506147fd9050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614879565b60006148456147c66fffffffffffffffffffffffffffffffff85166001615cf4565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156148f45760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611900565b82826040516020016149229291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b6000806149ce847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614a32576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614a57576000600160009450945094505050614e86565b60b78111614b6d576000614a6c608083615a49565b905080876000015111614aab576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614b2357507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614b5a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614e86915050565b60bf8111614ccb576000614b8260b783615a49565b905080876000015111614bc1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614c23576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614c6b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614c7581846159f9565b895111614cae576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614cb98360016159f9565b9750955060009450614e869350505050565b60f78111614d30576000614ce060c083615a49565b905080876000015111614d1f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614e86915050565b6000614d3d60f783615a49565b905080876000015111614d7c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614dde576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614e26576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e3081846159f9565b895111614e69576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e748360016159f9565b9750955060019450614e869350505050565b9193909250565b60608167ffffffffffffffff811115614ea857614ea86158cf565b6040519080825280601f01601f191660200182016040528015614ed2576020820181803683370190505b5090508115614f1b576000614ee784866159f9565b90506020820160005b84811015614f08578281015182820152602001614ef0565b84811115614f17576000858301525b5050505b9392505050565b6000614f416fffffffffffffffffffffffffffffffff84166001615cf4565b90506000614f5182866001615172565b9050600086901a838061503d5750614f8a60027f0000000000000000000000000000000000000000000000000000000000000004615cb7565b600483015460029061502e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6150389190615dce565b60ff16145b156150955760ff811660011480615057575060ff81166002145b615090576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b612a00565b60ff811615612a00576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b600080615160837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826151bb576151b66fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000004615285565b6151d6565b6151d6856fffffffffffffffffffffffffffffffff16615411565b9050600284815481106151eb576151eb61599b565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461524e57815460028054909163ffffffff169081106152395761523961599b565b906000526020600020906005020191506151fc565b509392505050565b60008060008060006152678661447e565b935093509350935061527b84848484614887565b9695505050505050565b600081615324846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161533a5763b34b5c226000526004601cfd5b61534383615411565b9050816153e2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613e4957613e466153f88360016159f9565b6fffffffffffffffffffffffffffffffff8316906154b6565b600081196001830116816154a5827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615543847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261557157600080fd5b50813567ffffffffffffffff81111561558957600080fd5b6020830191508360208285010111156155a157600080fd5b9250929050565b600080600083850360a08112156155be57600080fd5b60808112156155cc57600080fd5b50839250608084013567ffffffffffffffff8111156155ea57600080fd5b6155f68682870161555f565b9497909650939450505050565b6000806040838503121561561657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061568f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806000606084860312156156aa57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b818110156156e7576020818501810151868301820152016156cb565b818111156156f9576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613e4660208301846156c1565b60006020828403121561575157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461577a57600080fd5b50565b60006020828403121561578f57600080fd5b8135614f1b81615758565b803580151581146157aa57600080fd5b919050565b600080600080608085870312156157c557600080fd5b8435935060208501359250604085013591506157e36060860161579a565b905092959194509250565b60006020828403121561580057600080fd5b81356fffffffffffffffffffffffffffffffff81168114614f1b57600080fd5b6000806000806000806080878903121561583957600080fd5b863595506158496020880161579a565b9450604087013567ffffffffffffffff8082111561586657600080fd5b6158728a838b0161555f565b9096509450606089013591508082111561588b57600080fd5b5061589889828a0161555f565b979a9699509497509295939492505050565b63ffffffff8416815282602082015260606040820152600061190060608301846156c1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561591057600080fd5b6040516080810181811067ffffffffffffffff8211171561595a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615a0c57615a0c6159ca565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a4257615a426159ca565b5060010190565b600082821015615a5b57615a5b6159ca565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a9e57615a9e615a60565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615adb57615adb6159ca565b500290565b600060208284031215615af257600080fd5b8151614f1b81615758565b600060208284031215615b0f57600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015615b3757615b376159ca565b039392505050565b600067ffffffffffffffff80831681851681830481118215151615615b6657615b666159ca565b02949350505050565b60008060408385031215615b8257600080fd5b505080516020909101519092909150565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd457615bd46159ca565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0f57615c0f6159ca565b60008712925087820587128484161615615c2b57615c2b6159ca565b87850587128184161615615c4157615c416159ca565b505050929093029392505050565b600082615c5e57615c5e615a60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615cb257615cb26159ca565b500590565b600082615cc657615cc6615a60565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015615b3757615b376159ca565b60006fffffffffffffffffffffffffffffffff808316818516808303821115615d1f57615d1f6159ca565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615d85606083018789615d28565b8281036020840152615d98818688615d28565b9150508260408301529695505050505050565b600060ff821660ff841680821015615dc557615dc56159ca565b90039392505050565b600060ff831680615de157615de1615a60565b8060ff8416069150509291505056fea164736f6c634300080f000a"; + hex"6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b94578063fa315aa914610bb8578063fe2bbeb214610beb57600080fd5b8063ec5e630814610b11578063eff0f59214610b44578063f8f43ff614610b7457600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a8b578063d8cc1a3c14610abe578063dabd396d14610ade57600080fd5b8063c6f0308c146109b3578063cf09e0d014610a3d578063d5d44d8014610a5e57600080fd5b8063a445ece611610143578063bcef3b551161011d578063bcef3b5514610933578063bd8da95614610973578063c395e1ca1461099357600080fd5b8063a445ece6146107f3578063a8e4fb90146108bf578063bbdc02db146108f257600080fd5b80638980e0cc116101745780638980e0cc1461076b5780638b85902b146107805780638d450a95146107c057600080fd5b806370872aa51461073b5780637b0f0adc146107505780638129fc1c1461076357600080fd5b80633fc8cef31161025e5780635c0cba33116102075780636361506d116101e15780636361506d146106b55780636b6716c0146106f55780636f0344091461072857600080fd5b80635c0cba331461064d578063609d33341461068057806360e274641461069557600080fd5b806354fd4d501161023857806354fd4d50146105a757806357da950e146105fd5780635a5fa2d91461062d57600080fd5b80633fc8cef31461052e578063472777c614610561578063534db0e21461057457600080fd5b80632810e1d6116102c057806337b1b2291161029a57806337b1b2291461047b5780633a768463146104bb5780633e3ac912146104ee57600080fd5b80632810e1d6146103f45780632ad69aeb1461040957806330dbe5701461042957600080fd5b806319effeb4116102f157806319effeb41461034f578063200d2ed21461039a57806325fc2ace146103d557600080fd5b8063019351301461030d57806303c2924d1461032f575b600080fd5b34801561031957600080fd5b5061032d6103283660046155a8565b610c1b565b005b34801561033b57600080fd5b5061032d61034a366004615603565b610f3c565b34801561035b57600080fd5b5060005461037c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103a657600080fd5b506000546103c890700100000000000000000000000000000000900460ff1681565b6040516103919190615654565b3480156103e157600080fd5b506008545b604051908152602001610391565b34801561040057600080fd5b506103c86115e2565b34801561041557600080fd5b506103e6610424366004615603565b611887565b34801561043557600080fd5b506001546104569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610391565b34801561048757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610456565b3480156104c757600080fd5b507f0000000000000000000000001c0e3b8e58dd91536caf37a6009536255a7816a6610456565b3480156104fa57600080fd5b5060005461051e907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610391565b34801561053a57600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610456565b61032d61056f366004615695565b6118bd565b34801561058057600080fd5b507f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63610456565b3480156105b357600080fd5b506105f06040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b604051610391919061572c565b34801561060957600080fd5b50600854600954610618919082565b60408051928352602083019190915201610391565b34801561063957600080fd5b506103e661064836600461573f565b6118cf565b34801561065957600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610456565b34801561068c57600080fd5b506105f0611909565b3480156106a157600080fd5b5061032d6106b036600461577d565b611917565b3480156106c157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103e6565b34801561070157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b61032d6107363660046157af565b611abe565b34801561074757600080fd5b506009546103e6565b61032d61075e366004615695565b611b7f565b61032d611b8c565b34801561077757600080fd5b506002546103e6565b34801561078c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103e6565b3480156107cc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b3480156107ff57600080fd5b5061086b61080e36600461573f565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff166060820152608001610391565b3480156108cb57600080fd5b507f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8610456565b3480156108fe57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000001168152602001610391565b34801561093f57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103e6565b34801561097f57600080fd5b5061037c61098e36600461573f565b611c05565b34801561099f57600080fd5b506103e66109ae3660046157ee565b611de4565b3480156109bf57600080fd5b506109d36109ce36600461573f565b611fc7565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610391565b348015610a4957600080fd5b5060005461037c9067ffffffffffffffff1681565b348015610a6a57600080fd5b506103e6610a7936600461577d565b60036020526000908152604090205481565b348015610a9757600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103e6565b348015610aca57600080fd5b5061032d610ad9366004615820565b61205e565b348015610aea57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b061037c565b348015610b1d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103e6565b348015610b5057600080fd5b5061051e610b5f36600461573f565b60046020526000908152604090205460ff1681565b348015610b8057600080fd5b5061032d610b8f366004615695565b612123565b348015610ba057600080fd5b50610ba9612575565b604051610391939291906158aa565b348015610bc457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103e6565b348015610bf757600080fd5b5061051e610c0636600461573f565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610c4757610c47615625565b14610c7e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610cd1576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d08367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610d1f610d1a368690038601866158fe565b6125d5565b14610d56576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610d6b92919061598b565b604051809103902014610daa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610df3610dee84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263192505050565b61269e565b90506000610e1a82600881518110610e0d57610e0d61599b565b6020026020010151612854565b9050602081511115610e58576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610ecd576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610f6857610f68615625565b14610f9f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610fb457610fb461599b565b906000526020600020906005020190506000610fcf84611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015611038576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611081576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561109e57508515155b15611139578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110d157816110ed565b600186015473ffffffffffffffffffffffffffffffffffffffff165b90506110f98187612908565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff1660608301526111dc576fffffffffffffffffffffffffffffffff60408201526001815260008690036111dc578195505b600086826020015163ffffffff166111f491906159f9565b905060008382116112055781611207565b835b602084015190915063ffffffff165b818110156113535760008682815481106112325761123261599b565b6000918252602080832090910154808352600690915260409091205490915060ff1661128a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061129f5761129f61599b565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112fc5750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b1561133e57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b5050808061134b90615a11565b915050611216565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092179091558490036115d757606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055891580156114d357506000547201000000000000000000000000000000000000900460ff165b156115485760015473ffffffffffffffffffffffffffffffffffffffff166114fb818a612908565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556115d5565b61158f73ffffffffffffffffffffffffffffffffffffffff82161561156d5781611589565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89612908565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561161057611610615625565b14611647576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166116ab576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106116d7576116d761599b565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611712576001611715565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156117c6576117c6615625565b0217905560028111156117db576117db615625565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505090565b600560205281600052604060002081815481106118a357600080fd5b90600052602060002001600091509150505481565b905090565b6118ca8383836001611abe565b505050565b6000818152600760209081526040808320600590925282208054825461190090610100900463ffffffff1682615a49565b95945050505050565b60606118b860546020612a09565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054908290559081900361197c576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a7e576040519150601f19603f3d011682016040523d82523d6000602084013e611a83565b606091505b50509050806118ca576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8161480611b3757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b611b6d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7984848484612a5b565b50505050565b6118ca8383836000611abe565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614611bfb576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c036133fc565b565b600080600054700100000000000000000000000000000000900460ff166002811115611c3357611c33615625565b14611c6a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110611c7f57611c7f61599b565b600091825260208220600590910201805490925063ffffffff90811614611cee57815460028054909163ffffffff16908110611cbd57611cbd61599b565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611d2690700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611d3a9067ffffffffffffffff1642615a49565b611d59611d19846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611d6d91906159f9565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611611dba5780611900565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080611e83836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115611ee2576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000611efd8383615a8f565b9050670de0b6b3a76400006000611f34827f0000000000000000000000000000000000000000000000000000000000000008615aa3565b90506000611f52611f4d670de0b6b3a764000086615aa3565b613955565b90506000611f608484613bb0565b90506000611f6e8383613bff565b90506000611f7b82613c2d565b90506000611f9a82611f95670de0b6b3a76400008f615aa3565b613e15565b90506000611fa88b83613bff565b9050611fb4818d615aa3565b9f9e505050505050505050505050505050565b60028181548110611fd757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614806120d757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b61210d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211b868686868686613e4f565b505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214f5761214f615625565b14612186576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806121958661447e565b935093509350935060006121ab85858585614887565b905060007f0000000000000000000000001c0e3b8e58dd91536caf37a6009536255a7816a673ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190615ae0565b9050600189036123365773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8461229a367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615afd565b506115d7565b600289036123625773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848961229a565b6003890361238e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848761229a565b600489036124aa5760006123d46fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614941565b6009546123e191906159f9565b6123ec9060016159f9565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561247f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a39190615afd565b50506115d7565b60058903612543576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122ed565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606125ce611909565b9050909192565b60008160000151826020015183604001518460600151604051602001612614949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612680576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006126ae856149ef565b9194509250905060018160018111156126c9576126c9615625565b14612700576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845161270c83856159f9565b14612743576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161275a5790505093506000835b8651811015612848576000806127cd6040518060400160405280858c600001516127b19190615a49565b8152602001858c602001516127c691906159f9565b90526149ef565b5091509150604051806040016040528083836127e991906159f9565b8152602001848b602001516127fe91906159f9565b8152508885815181106128135761281361599b565b60209081029190910101526128296001856159f9565b935061283581836159f9565b61283f90846159f9565b92505050612787565b50845250919392505050565b60606000806000612864856149ef565b91945092509050600081600181111561287f5761287f615625565b146128b6576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082846159f9565b8551146128f9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190085602001518484614e8d565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff909316928392906129579084906159f9565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b1580156129ec57600080fd5b505af1158015612a00573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054700100000000000000000000000000000000900460ff166002811115612a8757612a87615625565b14612abe576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110612ad357612ad361599b565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514612bba576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000612c7a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612cb55750612cb27f000000000000000000000000000000000000000000000000000000000000000460026159f9565b81145b8015612cbf575084155b15612cf6576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d1c575086155b15612d53576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115612dad576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd87f000000000000000000000000000000000000000000000000000000000000000460016159f9565b8103612dea57612dea86888588614f22565b34612df483611de4565b14612e2b576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e3688611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603612e9e576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016612efe9190615b16565b67ffffffffffffffff16612f198267ffffffffffffffff1690565b67ffffffffffffffff161115612ffb576000612f5660017f0000000000000000000000000000000000000000000000000000000000000004615a49565b8314612f8c5767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612fc1565b612fc17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615b3f565b9050612ff7817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff16615b16565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615613079576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b8152602001908152602001600020600160028054905061330f9190615a49565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b1580156133a757600080fd5b505af11580156133bb573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b60005471010000000000000000000000000000000000900460ff161561344e576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000001166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa158015613502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135269190615b6f565b909250905081613562576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461359557639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401351161362f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b15801561390457600080fd5b505af1158015613918573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136139b457631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613bed57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613c1d5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613c5b57919050565b680755bf798b4a1bf1e58212613c795763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613e46670de0b6b3a764000083613e2d86613955565b613e379190615b93565b613e419190615c4f565b613c2d565b90505b92915050565b60008054700100000000000000000000000000000000900460ff166002811115613e7b57613e7b615625565b14613eb2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110613ec757613ec761599b565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050613f267f000000000000000000000000000000000000000000000000000000000000000860016159f9565b613fc2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614613ffc576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156140f35761404f7f00000000000000000000000000000000000000000000000000000000000000047f0000000000000000000000000000000000000000000000000000000000000008615a49565b6001901b61406e846fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1661408a9190615cb7565b156140c7576140be6140af60016fffffffffffffffffffffffffffffffff8716615ccb565b865463ffffffff166000615172565b600301546140e9565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061411d565b6003850154915061411a6140af6fffffffffffffffffffffffffffffffff86166001615cf4565b90505b600882901b60088a8a60405161413492919061598b565b6040518091039020901b14614175576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141808c615256565b9050600061418f836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f0000000000000000000000001c0e3b8e58dd91536caf37a6009536255a7816a673ffffffffffffffffffffffffffffffffffffffff169063e14ced3290614209908f908f908f908f908a90600401615d71565b6020604051808303816000875af1158015614228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424c9190615afd565b6004850154911491506000906002906142f7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614393896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61439d9190615dab565b6143a79190615dce565b60ff1615905081151581036143e8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff161561443f576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061449e5761449e61599b565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000490614575906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145af576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000490614676906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146eb57825463ffffffff166146b57f000000000000000000000000000000000000000000000000000000000000000460016159f9565b83036146bf578391505b600281815481106146d2576146d261599b565b90600052602060002090600502019350809450506145b3565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661475461473f856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561482357600061478c836fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1611156147f75760006147ce6147c660016fffffffffffffffffffffffffffffffff8616615ccb565b896001615172565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506147fd9050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614879565b60006148456147c66fffffffffffffffffffffffffffffffff85166001615cf4565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156148f45760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611900565b82826040516020016149229291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b6000806149ce847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614a32576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614a57576000600160009450945094505050614e86565b60b78111614b6d576000614a6c608083615a49565b905080876000015111614aab576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614b2357507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614b5a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614e86915050565b60bf8111614ccb576000614b8260b783615a49565b905080876000015111614bc1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614c23576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614c6b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614c7581846159f9565b895111614cae576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614cb98360016159f9565b9750955060009450614e869350505050565b60f78111614d30576000614ce060c083615a49565b905080876000015111614d1f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614e86915050565b6000614d3d60f783615a49565b905080876000015111614d7c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614dde576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614e26576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e3081846159f9565b895111614e69576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e748360016159f9565b9750955060019450614e869350505050565b9193909250565b60608167ffffffffffffffff811115614ea857614ea86158cf565b6040519080825280601f01601f191660200182016040528015614ed2576020820181803683370190505b5090508115614f1b576000614ee784866159f9565b90506020820160005b84811015614f08578281015182820152602001614ef0565b84811115614f17576000858301525b5050505b9392505050565b6000614f416fffffffffffffffffffffffffffffffff84166001615cf4565b90506000614f5182866001615172565b9050600086901a838061503d5750614f8a60027f0000000000000000000000000000000000000000000000000000000000000004615cb7565b600483015460029061502e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6150389190615dce565b60ff16145b156150955760ff811660011480615057575060ff81166002145b615090576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b612a00565b60ff811615612a00576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b600080615160837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826151bb576151b66fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000004615285565b6151d6565b6151d6856fffffffffffffffffffffffffffffffff16615411565b9050600284815481106151eb576151eb61599b565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461524e57815460028054909163ffffffff169081106152395761523961599b565b906000526020600020906005020191506151fc565b509392505050565b60008060008060006152678661447e565b935093509350935061527b84848484614887565b9695505050505050565b600081615324846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161533a5763b34b5c226000526004601cfd5b61534383615411565b9050816153e2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613e4957613e466153f88360016159f9565b6fffffffffffffffffffffffffffffffff8316906154b6565b600081196001830116816154a5827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615543847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261557157600080fd5b50813567ffffffffffffffff81111561558957600080fd5b6020830191508360208285010111156155a157600080fd5b9250929050565b600080600083850360a08112156155be57600080fd5b60808112156155cc57600080fd5b50839250608084013567ffffffffffffffff8111156155ea57600080fd5b6155f68682870161555f565b9497909650939450505050565b6000806040838503121561561657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061568f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806000606084860312156156aa57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b818110156156e7576020818501810151868301820152016156cb565b818111156156f9576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613e4660208301846156c1565b60006020828403121561575157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461577a57600080fd5b50565b60006020828403121561578f57600080fd5b8135614f1b81615758565b803580151581146157aa57600080fd5b919050565b600080600080608085870312156157c557600080fd5b8435935060208501359250604085013591506157e36060860161579a565b905092959194509250565b60006020828403121561580057600080fd5b81356fffffffffffffffffffffffffffffffff81168114614f1b57600080fd5b6000806000806000806080878903121561583957600080fd5b863595506158496020880161579a565b9450604087013567ffffffffffffffff8082111561586657600080fd5b6158728a838b0161555f565b9096509450606089013591508082111561588b57600080fd5b5061589889828a0161555f565b979a9699509497509295939492505050565b63ffffffff8416815282602082015260606040820152600061190060608301846156c1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561591057600080fd5b6040516080810181811067ffffffffffffffff8211171561595a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615a0c57615a0c6159ca565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a4257615a426159ca565b5060010190565b600082821015615a5b57615a5b6159ca565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a9e57615a9e615a60565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615adb57615adb6159ca565b500290565b600060208284031215615af257600080fd5b8151614f1b81615758565b600060208284031215615b0f57600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015615b3757615b376159ca565b039392505050565b600067ffffffffffffffff80831681851681830481118215151615615b6657615b666159ca565b02949350505050565b60008060408385031215615b8257600080fd5b505080516020909101519092909150565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd457615bd46159ca565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0f57615c0f6159ca565b60008712925087820587128484161615615c2b57615c2b6159ca565b87850587128184161615615c4157615c416159ca565b505050929093029392505050565b600082615c5e57615c5e615a60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615cb257615cb26159ca565b500590565b600082615cc657615cc6615a60565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015615b3757615b376159ca565b60006fffffffffffffffffffffffffffffffff808316818516808303821115615d1f57615d1f6159ca565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615d85606083018789615d28565b8281036020840152615d98818688615d28565b9150508260408301529695505050505050565b600060ff821660ff841680821015615dc557615dc56159ca565b90039392505050565b600060ff831680615de157615de1615a60565b8060ff8416069150509291505056fea164736f6c634300080f000a"; } From deaa6fa4591277d318ae371d6a87cbadab9422c7 Mon Sep 17 00:00:00 2001 From: Maurelian Date: Fri, 7 Jun 2024 15:00:43 -0400 Subject: [PATCH 002/141] Replace SafeLivenessExtensions draft with final report (#10770) --- ...2024_05_SafeLivenessExtensions-Cantina.pdf | Bin 773476 -> 535630 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/security-reviews/2024_05_SafeLivenessExtensions-Cantina.pdf b/docs/security-reviews/2024_05_SafeLivenessExtensions-Cantina.pdf index 13637137a5074a73fd77eb5b6984890261a8cf3b..c1135ee4d8916dcf37466a5bc645c1ef013c4b74 100644 GIT binary patch delta 89134 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

51jPt+v2}=X$R+m@Y6hi)= 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%0A^mep=w) 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

+gmptO`18*d=l&ER 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�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⁣6Qb?GGpdQgf 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 XKlonlCX$enmJk&u;^I;>P$&8?P*#mf literal 0 HcmV?d00001 From 798b8fbab024df5625123ca7df070ca5dd3e07a4 Mon Sep 17 00:00:00 2001 From: Theburaka Date: Fri, 21 Jun 2024 22:07:20 +0200 Subject: [PATCH 087/141] fix bad spell in op-service (#10974) --- op-chain-ops/foundry/artifact.go | 2 +- op-service/eth/blobs_api_test.go | 6 +++--- op-service/metrics/balance.go | 4 ++-- op-service/txmgr/send_state.go | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/op-chain-ops/foundry/artifact.go b/op-chain-ops/foundry/artifact.go index cd1b5c9e73d9..72e1f963d722 100644 --- a/op-chain-ops/foundry/artifact.go +++ b/op-chain-ops/foundry/artifact.go @@ -49,7 +49,7 @@ func (a Artifact) MarshalJSON() ([]byte, error) { return json.Marshal(artifact) } -// artifactMarshaling is a helper struct for marshaling and unmarshaling +// artifactMarshaling is a helper struct for marshaling and unmarshalling // foundry artifacts. type artifactMarshaling struct { ABI json.RawMessage `json:"abi"` diff --git a/op-service/eth/blobs_api_test.go b/op-service/eth/blobs_api_test.go index f7439ff75a9c..7c585cb7ac99 100644 --- a/op-service/eth/blobs_api_test.go +++ b/op-service/eth/blobs_api_test.go @@ -16,7 +16,7 @@ type dataJson struct { Data map[string]any `json:"data"` } -// TestAPIGenesisResponse tests that json unmarshaling a json response from a +// TestAPIGenesisResponse tests that json unmarshalling a json response from a // eth/v1/beacon/genesis beacon node call into a APIGenesisResponse object // fills all existing fields with the expected values, thereby confirming that // APIGenesisResponse is compatible with the current beacon node API. @@ -41,7 +41,7 @@ func TestAPIGenesisResponse(t *testing.T) { require.Equal(jsonMap.Data["genesis_time"].(string), string(genesisTime)) } -// TestAPIConfigResponse tests that json unmarshaling a json response from a +// TestAPIConfigResponse tests that json unmarshalling a json response from a // eth/v1/config/spec beacon node call into a APIConfigResponse object // fills all existing fields with the expected values, thereby confirming that // APIGenesisResponse is compatible with the current beacon node API. @@ -66,7 +66,7 @@ func TestAPIConfigResponse(t *testing.T) { require.Equal(jsonMap.Data["SECONDS_PER_SLOT"].(string), string(secPerSlot)) } -// TestAPIGetBlobSidecarsResponse tests that json unmarshaling a json response from a +// TestAPIGetBlobSidecarsResponse tests that json unmarshalling a json response from a // eth/v1/beacon/blob_sidecars/ beacon node call into a APIGetBlobSidecarsResponse object // fills all existing fields with the expected values, thereby confirming that // APIGenesisResponse is compatible with the current beacon node API. diff --git a/op-service/metrics/balance.go b/op-service/metrics/balance.go index 27131fa5eef0..4c11ef998967 100644 --- a/op-service/metrics/balance.go +++ b/op-service/metrics/balance.go @@ -19,7 +19,7 @@ import ( // to the "balance" metric of the namespace. The balance of the account is recorded in Ether (not Wei). // Cancel the supplied context to shut down the go routine func LaunchBalanceMetrics(log log.Logger, r *prometheus.Registry, ns string, client *ethclient.Client, account common.Address) *clock.LoopFn { - balanceGuage := promauto.With(r).NewGauge(prometheus.GaugeOpts{ + balanceGauge := promauto.With(r).NewGauge(prometheus.GaugeOpts{ Namespace: ns, Name: "balance", Help: "balance (in ether) of account " + account.String(), @@ -33,7 +33,7 @@ func LaunchBalanceMetrics(log log.Logger, r *prometheus.Registry, ns string, cli return } bal := eth.WeiToEther(bigBal) - balanceGuage.Set(bal) + balanceGauge.Set(bal) }, func() error { log.Info("balance metrics shutting down") return nil diff --git a/op-service/txmgr/send_state.go b/op-service/txmgr/send_state.go index 4066a0caa149..6053d3f3c5e3 100644 --- a/op-service/txmgr/send_state.go +++ b/op-service/txmgr/send_state.go @@ -16,7 +16,7 @@ var ( ErrAlreadyReserved = errors.New("address already reserved") // Returned by CriticalError when the system is unable to get the tx into the mempool in the - // alloted time + // allotted time ErrMempoolDeadlineExpired = errors.New("failed to get tx into the mempool") ) @@ -125,7 +125,7 @@ func (s *SendState) CriticalError() error { // we have exceeded the nonce too low count return core.ErrNonceTooLow case s.successFullPublishCount == 0 && s.now().After(s.txInMempoolDeadline): - // unable to get the tx into the mempool in the alloted time + // unable to get the tx into the mempool in the allotted time return ErrMempoolDeadlineExpired case s.alreadyReserved: // incompatible tx type in mempool From db31f84ced606e89ee67cdafd8c548ea92bd87df Mon Sep 17 00:00:00 2001 From: protolambda Date: Fri, 21 Jun 2024 17:29:52 -0600 Subject: [PATCH 088/141] op-program: refactor driver to use events derivers (#10971) * op-program: refactor to use events derivers * op-node: differentiate between invalid payload and invalid payload attributes --- op-node/rollup/engine/engine_controller.go | 3 - op-node/rollup/engine/events.go | 133 +++++++++++++++ op-program/client/driver/driver.go | 179 ++++++--------------- op-program/client/driver/driver_test.go | 159 +++++++++--------- op-program/client/driver/program.go | 81 ++++++++++ op-program/client/driver/program_test.go | 152 +++++++++++++++++ op-program/client/program.go | 9 +- 7 files changed, 506 insertions(+), 210 deletions(-) create mode 100644 op-program/client/driver/program.go create mode 100644 op-program/client/driver/program_test.go diff --git a/op-node/rollup/engine/engine_controller.go b/op-node/rollup/engine/engine_controller.go index 34f166640f76..8121dc3800aa 100644 --- a/op-node/rollup/engine/engine_controller.go +++ b/op-node/rollup/engine/engine_controller.go @@ -266,9 +266,6 @@ func (e *EngineController) ConfirmPayload(ctx context.Context, agossip async.Asy updateSafe := e.buildingSafe && e.safeAttrs != nil && e.safeAttrs.IsLastInSpan envelope, errTyp, err := confirmPayload(ctx, e.log, e.engine, fc, e.buildingInfo, updateSafe, agossip, sequencerConductor) if err != nil { - if !errors.Is(err, derive.ErrTemporary) { - e.emitter.Emit(InvalidPayloadEvent{}) - } return nil, errTyp, fmt.Errorf("failed to complete building on top of L2 chain %s, id: %s, error (%d): %w", e.buildingOnto, e.buildingInfo.ID, errTyp, err) } ref, err := derive.PayloadToBlockRef(e.rollupCfg, envelope.ExecutionPayload) diff --git a/op-node/rollup/engine/events.go b/op-node/rollup/engine/events.go index 9b0195819577..10cd8369fe35 100644 --- a/op-node/rollup/engine/events.go +++ b/op-node/rollup/engine/events.go @@ -4,10 +4,14 @@ import ( "context" "errors" "fmt" + "time" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum-optimism/optimism/op-node/rollup/async" + "github.com/ethereum-optimism/optimism/op-node/rollup/conductor" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-service/eth" ) @@ -20,6 +24,14 @@ func (ev InvalidPayloadEvent) String() string { return "invalid-payload" } +type InvalidPayloadAttributesEvent struct { + Attributes *derive.AttributesWithParent +} + +func (ev InvalidPayloadAttributesEvent) String() string { + return "invalid-payload-attributes" +} + // ForkchoiceRequestEvent signals to the engine that it should emit an artificial // forkchoice-update event, to signal the latest forkchoice to other derivers. // This helps decouple derivers from the actual engine state, @@ -39,6 +51,40 @@ func (ev ForkchoiceUpdateEvent) String() string { return "forkchoice-update" } +type PendingSafeUpdateEvent struct { + PendingSafe eth.L2BlockRef + Unsafe eth.L2BlockRef // tip, added to the signal, to determine if there are existing blocks to consolidate +} + +func (ev PendingSafeUpdateEvent) String() string { + return "pending-safe-update" +} + +// PromotePendingSafeEvent signals that a block can be marked as pending-safe, and/or safe. +type PromotePendingSafeEvent struct { + Ref eth.L2BlockRef + Safe bool +} + +func (ev PromotePendingSafeEvent) String() string { + return "promote-pending-safe" +} + +type ProcessAttributesEvent struct { + Attributes *derive.AttributesWithParent +} + +func (ev ProcessAttributesEvent) String() string { + return "process-attributes" +} + +type PendingSafeRequestEvent struct { +} + +func (ev PendingSafeRequestEvent) String() string { + return "pending-safe-request" +} + type ProcessUnsafePayloadEvent struct { Envelope *eth.ExecutionPayloadEnvelope } @@ -172,7 +218,94 @@ func (d *EngDeriver) OnEvent(ev rollup.Event) { "safeHead", x.Safe, "unsafe", x.Unsafe, "safe_timestamp", x.Safe.Time, "unsafe_timestamp", x.Unsafe.Time) d.emitter.Emit(EngineResetConfirmedEvent{}) + case ProcessAttributesEvent: + d.onForceNextSafeAttributes(x.Attributes) + case PendingSafeRequestEvent: + d.emitter.Emit(PendingSafeUpdateEvent{ + PendingSafe: d.ec.PendingSafeL2Head(), + Unsafe: d.ec.UnsafeL2Head(), + }) + case PromotePendingSafeEvent: + // Only promote if not already stale. + // Resets/overwrites happen through engine-resets, not through promotion. + if x.Ref.Number > d.ec.PendingSafeL2Head().Number { + d.ec.SetPendingSafeL2Head(x.Ref) + } + if x.Safe && x.Ref.Number > d.ec.SafeL2Head().Number { + d.ec.SetSafeHead(x.Ref) + } + } +} + +// onForceNextSafeAttributes inserts the provided attributes, reorging away any conflicting unsafe chain. +func (eq *EngDeriver) onForceNextSafeAttributes(attributes *derive.AttributesWithParent) { + ctx, cancel := context.WithTimeout(eq.ctx, time.Second*10) + defer cancel() + + attrs := attributes.Attributes + errType, err := eq.ec.StartPayload(ctx, eq.ec.PendingSafeL2Head(), attributes, true) + var envelope *eth.ExecutionPayloadEnvelope + if err == nil { + envelope, errType, err = eq.ec.ConfirmPayload(ctx, async.NoOpGossiper{}, &conductor.NoOpConductor{}) + } + if err != nil { + switch errType { + case BlockInsertTemporaryErr: + // RPC errors are recoverable, we can retry the buffered payload attributes later. + eq.emitter.Emit(rollup.EngineTemporaryErrorEvent{Err: fmt.Errorf("temporarily cannot insert new safe block: %w", err)}) + return + case BlockInsertPrestateErr: + _ = eq.ec.CancelPayload(ctx, true) + eq.emitter.Emit(rollup.ResetEvent{Err: fmt.Errorf("need reset to resolve pre-state problem: %w", err)}) + return + case BlockInsertPayloadErr: + if !errors.Is(err, derive.ErrTemporary) { + eq.emitter.Emit(InvalidPayloadAttributesEvent{Attributes: attributes}) + } + _ = eq.ec.CancelPayload(ctx, true) + eq.log.Warn("could not process payload derived from L1 data, dropping attributes", "err", err) + // Count the number of deposits to see if the tx list is deposit only. + depositCount := 0 + for _, tx := range attrs.Transactions { + if len(tx) > 0 && tx[0] == types.DepositTxType { + depositCount += 1 + } + } + // Deposit transaction execution errors are suppressed in the execution engine, but if the + // block is somehow invalid, there is nothing we can do to recover & we should exit. + if len(attrs.Transactions) == depositCount { + eq.log.Error("deposit only block was invalid", "parent", attributes.Parent, "err", err) + eq.emitter.Emit(rollup.CriticalErrorEvent{Err: fmt.Errorf("failed to process block with only deposit transactions: %w", err)}) + return + } + // Revert the pending safe head to the safe head. + eq.ec.SetPendingSafeL2Head(eq.ec.SafeL2Head()) + // suppress the error b/c we want to retry with the next batch from the batch queue + // If there is no valid batch the node will eventually force a deposit only block. If + // the deposit only block fails, this will return the critical error above. + + // Try to restore to previous known unsafe chain. + eq.ec.SetBackupUnsafeL2Head(eq.ec.BackupUnsafeL2Head(), true) + + // drop the payload without inserting it into the engine + return + default: + eq.emitter.Emit(rollup.CriticalErrorEvent{Err: fmt.Errorf("unknown InsertHeadBlock error type %d: %w", errType, err)}) + } + } + ref, err := derive.PayloadToBlockRef(eq.cfg, envelope.ExecutionPayload) + if err != nil { + eq.emitter.Emit(rollup.ResetEvent{Err: fmt.Errorf("failed to decode L2 block ref from payload: %w", err)}) + return + } + eq.ec.SetPendingSafeL2Head(ref) + if attributes.IsLastInSpan { + eq.ec.SetSafeHead(ref) } + eq.emitter.Emit(PendingSafeUpdateEvent{ + PendingSafe: eq.ec.PendingSafeL2Head(), + Unsafe: eq.ec.UnsafeL2Head(), + }) } type ResetEngineControl interface { diff --git a/op-program/client/driver/driver.go b/op-program/client/driver/driver.go index a5849bdb7842..7bcd8268476c 100644 --- a/op-program/client/driver/driver.go +++ b/op-program/client/driver/driver.go @@ -3,161 +3,88 @@ package driver import ( "context" "errors" - "fmt" - "io" "github.com/ethereum/go-ethereum/log" "github.com/ethereum-optimism/optimism/op-node/metrics" "github.com/ethereum-optimism/optimism/op-node/rollup" - "github.com/ethereum-optimism/optimism/op-node/rollup/attributes" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" - "github.com/ethereum-optimism/optimism/op-node/rollup/driver" "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" plasma "github.com/ethereum-optimism/optimism/op-plasma" - "github.com/ethereum-optimism/optimism/op-service/eth" ) -type Derivation interface { - Step(ctx context.Context) error +type EndCondition interface { + Closing() bool + Result() error } -type Pipeline interface { - Step(ctx context.Context, pendingSafeHead eth.L2BlockRef) (outAttrib *derive.AttributesWithParent, outErr error) - ConfirmEngineReset() -} +type Driver struct { + logger log.Logger -type Engine interface { - SafeL2Head() eth.L2BlockRef - PendingSafeL2Head() eth.L2BlockRef - TryUpdateEngine(ctx context.Context) error - engine.ResetEngineControl -} + events []rollup.Event -type L2Source interface { - engine.Engine - L2OutputRoot(uint64) (eth.Bytes32, error) + end EndCondition + deriver rollup.Deriver } -type Deriver interface { - SafeL2Head() eth.L2BlockRef - SyncStep(ctx context.Context) error -} +func NewDriver(logger log.Logger, cfg *rollup.Config, l1Source derive.L1Fetcher, + l1BlobsSource derive.L1BlobsFetcher, l2Source engine.Engine, targetBlockNum uint64) *Driver { -type MinimalSyncDeriver struct { - logger log.Logger - pipeline Pipeline - attributesHandler driver.AttributesHandler - l1Source derive.L1Fetcher - l2Source L2Source - engine Engine - syncCfg *sync.Config - initialResetDone bool - cfg *rollup.Config -} + d := &Driver{ + logger: logger, + } -func (d *MinimalSyncDeriver) SafeL2Head() eth.L2BlockRef { - return d.engine.SafeL2Head() -} + pipeline := derive.NewDerivationPipeline(logger, cfg, l1Source, l1BlobsSource, plasma.Disabled, l2Source, metrics.NoopMetrics) + pipelineDeriver := derive.NewPipelineDeriver(context.Background(), pipeline, d) -func (d *MinimalSyncDeriver) SyncStep(ctx context.Context) error { - if !d.initialResetDone { - if err := d.engine.TryUpdateEngine(ctx); !errors.Is(err, engine.ErrNoFCUNeeded) { - return err - } - // The below two calls emulate ResetEngine, without event-processing. - // This will be omitted after op-program adopts events, and the deriver code is used instead. - result, err := sync.FindL2Heads(ctx, d.cfg, d.l1Source, d.l2Source, d.logger, d.syncCfg) - if err != nil { - // not really a temporary error in this context, but preserves old ResetEngine behavior. - return derive.NewTemporaryError(fmt.Errorf("failed to determine starting point: %w", err)) - } - engine.ForceEngineReset(d.engine, engine.ForceEngineResetEvent{ - Unsafe: result.Unsafe, - Safe: result.Safe, - Finalized: result.Finalized, - }) - d.pipeline.ConfirmEngineReset() - d.initialResetDone = true - } + ec := engine.NewEngineController(l2Source, logger, metrics.NoopMetrics, cfg, sync.CLSync, d) + engineDeriv := engine.NewEngDeriver(logger, context.Background(), cfg, ec, d) + syncCfg := &sync.Config{SyncMode: sync.CLSync} + engResetDeriv := engine.NewEngineResetDeriver(context.Background(), logger, cfg, l1Source, l2Source, syncCfg, d) - if err := d.engine.TryUpdateEngine(ctx); !errors.Is(err, engine.ErrNoFCUNeeded) { - return err - } - if err := d.attributesHandler.Proceed(ctx); err != io.EOF { - // EOF error means we can't process the next attributes. Then we should derive the next attributes. - return err + prog := &ProgramDeriver{ + logger: logger, + Emitter: d, + closing: false, + result: nil, + targetBlockNum: targetBlockNum, } - attrib, err := d.pipeline.Step(ctx, d.engine.PendingSafeL2Head()) - if err != nil { - return err + d.deriver = &rollup.SynchronousDerivers{ + prog, + engineDeriv, + pipelineDeriver, + engResetDeriv, } - d.attributesHandler.SetAttributes(attrib) - return nil -} - -type Driver struct { - logger log.Logger + d.end = prog - deriver Deriver - - l2OutputRoot func(uint64) (eth.Bytes32, error) - targetBlockNum uint64 + return d } -func NewDriver(logger log.Logger, cfg *rollup.Config, l1Source derive.L1Fetcher, l1BlobsSource derive.L1BlobsFetcher, l2Source L2Source, targetBlockNum uint64) *Driver { - engine := engine.NewEngineController(l2Source, logger, metrics.NoopMetrics, cfg, sync.CLSync, rollup.NoopEmitter{}) - attributesHandler := attributes.NewAttributesHandler(logger, cfg, engine, l2Source) - syncCfg := &sync.Config{SyncMode: sync.CLSync} - pipeline := derive.NewDerivationPipeline(logger, cfg, l1Source, l1BlobsSource, plasma.Disabled, l2Source, metrics.NoopMetrics) - return &Driver{ - logger: logger, - deriver: &MinimalSyncDeriver{ - logger: logger, - pipeline: pipeline, - attributesHandler: attributesHandler, - l1Source: l1Source, - l2Source: l2Source, - engine: engine, - syncCfg: syncCfg, - cfg: cfg, - }, - l2OutputRoot: l2Source.L2OutputRoot, - targetBlockNum: targetBlockNum, +func (d *Driver) Emit(ev rollup.Event) { + if d.end.Closing() { + return } + d.events = append(d.events, ev) } -// Step runs the next step of the derivation pipeline. -// Returns nil if there are further steps to be performed -// Returns io.EOF if the derivation completed successfully -// Returns a non-EOF error if the derivation failed -func (d *Driver) Step(ctx context.Context) error { - if err := d.deriver.SyncStep(ctx); errors.Is(err, io.EOF) { - d.logger.Info("Derivation complete: reached L1 head", "head", d.deriver.SafeL2Head()) - return io.EOF - } else if errors.Is(err, derive.NotEnoughData) { - // NotEnoughData is not handled differently than a nil error. - // This used to be returned by the EngineQueue when a block was derived, but also other stages. - // Instead, every driver-loop iteration we check if the target block number has been reached. - d.logger.Debug("Data is lacking") - } else if errors.Is(err, derive.ErrTemporary) { - // While most temporary errors are due to requests for external data failing which can't happen, - // they may also be returned due to other events like channels timing out so need to be handled - d.logger.Warn("Temporary error in derivation", "err", err) - return nil - } else if err != nil { - return fmt.Errorf("pipeline err: %w", err) - } - head := d.deriver.SafeL2Head() - if head.Number >= d.targetBlockNum { - d.logger.Info("Derivation complete: reached L2 block", "head", head) - return io.EOF - } - return nil -} +var ExhaustErr = errors.New("exhausted events before completing program") -func (d *Driver) SafeHead() eth.L2BlockRef { - return d.deriver.SafeL2Head() +func (d *Driver) RunComplete() error { + // Initial reset + d.Emit(engine.ResetEngineRequestEvent{}) + + for !d.end.Closing() { + if len(d.events) == 0 { + return ExhaustErr + } + if len(d.events) > 10000 { // sanity check, in case of bugs. Better than going OOM. + return errors.New("way too many events queued up, something is wrong") + } + ev := d.events[0] + d.events = d.events[1:] + d.deriver.OnEvent(ev) + } + return d.end.Result() } diff --git a/op-program/client/driver/driver_test.go b/op-program/client/driver/driver_test.go index 23516696bc8d..9ad06e7233fa 100644 --- a/op-program/client/driver/driver_test.go +++ b/op-program/client/driver/driver_test.go @@ -1,99 +1,110 @@ package driver import ( - "context" "errors" - "fmt" - "io" "testing" - "github.com/ethereum-optimism/optimism/op-node/rollup/derive" - "github.com/ethereum-optimism/optimism/op-service/eth" - "github.com/ethereum-optimism/optimism/op-service/testlog" - "github.com/ethereum/go-ethereum/log" "github.com/stretchr/testify/require" + + "github.com/ethereum/go-ethereum/log" + + "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum-optimism/optimism/op-service/testlog" ) -func TestDerivationComplete(t *testing.T) { - driver := createDriver(t, fmt.Errorf("derivation complete: %w", io.EOF)) - err := driver.Step(context.Background()) - require.ErrorIs(t, err, io.EOF) +type fakeEnd struct { + closing bool + result error } -func TestTemporaryError(t *testing.T) { - driver := createDriver(t, fmt.Errorf("whoopsie: %w", derive.ErrTemporary)) - err := driver.Step(context.Background()) - require.NoError(t, err, "should allow derivation to continue after temporary error") +func (d *fakeEnd) Closing() bool { + return d.closing } -func TestNotEnoughDataError(t *testing.T) { - driver := createDriver(t, fmt.Errorf("idk: %w", derive.NotEnoughData)) - err := driver.Step(context.Background()) - require.NoError(t, err) +func (d *fakeEnd) Result() error { + return d.result } -func TestGenericError(t *testing.T) { - expected := errors.New("boom") - driver := createDriver(t, expected) - err := driver.Step(context.Background()) - require.ErrorIs(t, err, expected) -} +func TestDriver(t *testing.T) { + newTestDriver := func(t *testing.T, onEvent func(d *Driver, end *fakeEnd, ev rollup.Event)) *Driver { + logger := testlog.Logger(t, log.LevelInfo) + end := &fakeEnd{} + d := &Driver{ + logger: logger, + end: end, + } + d.deriver = rollup.DeriverFunc(func(ev rollup.Event) { + onEvent(d, end, ev) + }) + return d + } -func TestTargetBlock(t *testing.T) { - t.Run("Reached", func(t *testing.T) { - driver := createDriverWithNextBlock(t, derive.NotEnoughData, 1000) - driver.targetBlockNum = 1000 - err := driver.Step(context.Background()) - require.ErrorIs(t, err, io.EOF) + t.Run("insta complete", func(t *testing.T) { + d := newTestDriver(t, func(d *Driver, end *fakeEnd, ev rollup.Event) { + end.closing = true + }) + require.NoError(t, d.RunComplete()) }) - t.Run("Exceeded", func(t *testing.T) { - driver := createDriverWithNextBlock(t, derive.NotEnoughData, 1000) - driver.targetBlockNum = 500 - err := driver.Step(context.Background()) - require.ErrorIs(t, err, io.EOF) + t.Run("insta error", func(t *testing.T) { + mockErr := errors.New("mock error") + d := newTestDriver(t, func(d *Driver, end *fakeEnd, ev rollup.Event) { + end.closing = true + end.result = mockErr + }) + require.ErrorIs(t, mockErr, d.RunComplete()) }) - t.Run("NotYetReached", func(t *testing.T) { - driver := createDriverWithNextBlock(t, derive.NotEnoughData, 1000) - driver.targetBlockNum = 1001 - err := driver.Step(context.Background()) - // No error to indicate derivation should continue - require.NoError(t, err) + t.Run("success after a few events", func(t *testing.T) { + count := 0 + d := newTestDriver(t, func(d *Driver, end *fakeEnd, ev rollup.Event) { + if count > 3 { + end.closing = true + return + } + count += 1 + d.Emit(TestEvent{}) + }) + require.NoError(t, d.RunComplete()) }) -} - -func TestNoError(t *testing.T) { - driver := createDriver(t, nil) - err := driver.Step(context.Background()) - require.NoError(t, err) -} -func createDriver(t *testing.T, derivationResult error) *Driver { - return createDriverWithNextBlock(t, derivationResult, 0) -} - -func createDriverWithNextBlock(t *testing.T, derivationResult error, nextBlockNum uint64) *Driver { - derivation := &stubDeriver{nextErr: derivationResult, nextBlockNum: nextBlockNum} - return &Driver{ - logger: testlog.Logger(t, log.LevelDebug), - deriver: derivation, - l2OutputRoot: nil, - targetBlockNum: 1_000_000, - } -} - -type stubDeriver struct { - nextErr error - nextBlockNum uint64 -} + t.Run("error after a few events", func(t *testing.T) { + count := 0 + mockErr := errors.New("mock error") + d := newTestDriver(t, func(d *Driver, end *fakeEnd, ev rollup.Event) { + if count > 3 { + end.closing = true + end.result = mockErr + return + } + count += 1 + d.Emit(TestEvent{}) + }) + require.ErrorIs(t, mockErr, d.RunComplete()) + }) -func (s *stubDeriver) SyncStep(ctx context.Context) error { - return s.nextErr -} + t.Run("exhaust events", func(t *testing.T) { + count := 0 + d := newTestDriver(t, func(d *Driver, end *fakeEnd, ev rollup.Event) { + if count < 3 { // stop generating events after a while, without changing end condition + d.Emit(TestEvent{}) + } + count += 1 + }) + require.ErrorIs(t, ExhaustErr, d.RunComplete()) + }) -func (s *stubDeriver) SafeL2Head() eth.L2BlockRef { - return eth.L2BlockRef{ - Number: s.nextBlockNum, - } + t.Run("queued events", func(t *testing.T) { + count := 0 + d := newTestDriver(t, func(d *Driver, end *fakeEnd, ev rollup.Event) { + if count < 3 { + d.Emit(TestEvent{}) + d.Emit(TestEvent{}) + } + count += 1 + }) + require.ErrorIs(t, ExhaustErr, d.RunComplete()) + // add 1 for initial event that RunComplete fires + require.Equal(t, 1+3*2, count, "must have queued up 2 events 3 times") + }) } diff --git a/op-program/client/driver/program.go b/op-program/client/driver/program.go new file mode 100644 index 000000000000..4973c379383e --- /dev/null +++ b/op-program/client/driver/program.go @@ -0,0 +1,81 @@ +package driver + +import ( + "errors" + "fmt" + + "github.com/ethereum/go-ethereum/log" + + "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-node/rollup/engine" +) + +// ProgramDeriver expresses how engine and derivation events are +// translated and monitored to execute the pure L1 to L2 state transition. +// +// The ProgramDeriver stops at the target block number or with an error result. +type ProgramDeriver struct { + logger log.Logger + + Emitter rollup.EventEmitter + + closing bool + result error + targetBlockNum uint64 +} + +func (d *ProgramDeriver) Closing() bool { + return d.closing +} + +func (d *ProgramDeriver) Result() error { + return d.result +} + +func (d *ProgramDeriver) OnEvent(ev rollup.Event) { + switch x := ev.(type) { + case engine.EngineResetConfirmedEvent: + d.Emitter.Emit(derive.ConfirmPipelineResetEvent{}) + // After initial reset we can request the pending-safe block, + // where attributes will be generated on top of. + d.Emitter.Emit(engine.PendingSafeRequestEvent{}) + case engine.PendingSafeUpdateEvent: + d.Emitter.Emit(derive.PipelineStepEvent{PendingSafe: x.PendingSafe}) + case derive.DeriverMoreEvent: + d.Emitter.Emit(engine.PendingSafeRequestEvent{}) + case derive.DerivedAttributesEvent: + // No need to queue the attributes, since there is no unsafe chain to consolidate against, + // and no temporary-error retry to perform on block processing. + d.Emitter.Emit(engine.ProcessAttributesEvent{Attributes: x.Attributes}) + case engine.InvalidPayloadAttributesEvent: + // If a set of attributes was invalid, then we drop the attributes, + // and continue with the next. + d.Emitter.Emit(engine.PendingSafeRequestEvent{}) + case engine.ForkchoiceUpdateEvent: + if x.SafeL2Head.Number >= d.targetBlockNum { + d.logger.Info("Derivation complete: reached L2 block", "head", x.UnsafeL2Head) + d.closing = true + } + case derive.DeriverIdleEvent: + // Not enough data to reach target + d.closing = true + d.result = errors.New("not enough data to reach target") + case rollup.ResetEvent: + d.closing = true + d.result = fmt.Errorf("unexpected reset error: %w", x.Err) + case rollup.EngineTemporaryErrorEvent: + // (Legacy case): While most temporary errors are due to requests for external data failing which can't happen, + // they may also be returned due to other events like channels timing out so need to be handled + d.logger.Warn("Temporary error in derivation", "err", x.Err) + d.Emitter.Emit(engine.PendingSafeRequestEvent{}) + case rollup.CriticalErrorEvent: + d.closing = true + d.result = x.Err + default: + // Other events can be ignored safely. + // They are broadcast, but only consumed by the other derivers, + // or do not affect the state-transition. + return + } +} diff --git a/op-program/client/driver/program_test.go b/op-program/client/driver/program_test.go new file mode 100644 index 000000000000..1da60d30bca9 --- /dev/null +++ b/op-program/client/driver/program_test.go @@ -0,0 +1,152 @@ +package driver + +import ( + "errors" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/ethereum/go-ethereum/log" + + "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-node/rollup/engine" + "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/ethereum-optimism/optimism/op-service/testlog" + "github.com/ethereum-optimism/optimism/op-service/testutils" +) + +func TestProgramDeriver(t *testing.T) { + newProgram := func(t *testing.T, target uint64) (*ProgramDeriver, *testutils.MockEmitter) { + m := &testutils.MockEmitter{} + logger := testlog.Logger(t, log.LevelInfo) + prog := &ProgramDeriver{ + logger: logger, + Emitter: m, + targetBlockNum: target, + } + return prog, m + } + // step 0 assumption: engine performs reset upon ResetEngineRequestEvent. + // step 1: engine completes reset + t.Run("engine reset confirmed", func(t *testing.T) { + p, m := newProgram(t, 1000) + m.ExpectOnce(derive.ConfirmPipelineResetEvent{}) + m.ExpectOnce(engine.PendingSafeRequestEvent{}) + p.OnEvent(engine.EngineResetConfirmedEvent{}) + m.AssertExpectations(t) + require.False(t, p.closing) + require.NoError(t, p.result) + require.False(t, p.closing) + require.NoError(t, p.result) + }) + // step 2: more derivation work, triggered when pending safe data is published + t.Run("pending safe update", func(t *testing.T) { + p, m := newProgram(t, 1000) + ref := eth.L2BlockRef{Number: 123} + m.ExpectOnce(derive.PipelineStepEvent{PendingSafe: ref}) + p.OnEvent(engine.PendingSafeUpdateEvent{PendingSafe: ref}) + m.AssertExpectations(t) + require.False(t, p.closing) + require.NoError(t, p.result) + }) + // step 3: if no attributes are generated, loop back to derive more. + t.Run("deriver more", func(t *testing.T) { + p, m := newProgram(t, 1000) + m.ExpectOnce(engine.PendingSafeRequestEvent{}) + p.OnEvent(derive.DeriverMoreEvent{}) + m.AssertExpectations(t) + require.False(t, p.closing) + require.NoError(t, p.result) + }) + // step 4: if attributes are derived, pass them to the engine. + t.Run("derived attributes", func(t *testing.T) { + p, m := newProgram(t, 1000) + attrib := &derive.AttributesWithParent{Parent: eth.L2BlockRef{Number: 123}} + m.ExpectOnce(engine.ProcessAttributesEvent{Attributes: attrib}) + p.OnEvent(derive.DerivedAttributesEvent{Attributes: attrib}) + m.AssertExpectations(t) + require.False(t, p.closing) + require.NoError(t, p.result) + }) + // step 5: if attributes were invalid, continue with derivation for new attributes. + t.Run("invalid payload", func(t *testing.T) { + p, m := newProgram(t, 1000) + m.ExpectOnce(engine.PendingSafeRequestEvent{}) + p.OnEvent(engine.InvalidPayloadAttributesEvent{Attributes: &derive.AttributesWithParent{}}) + m.AssertExpectations(t) + require.False(t, p.closing) + require.NoError(t, p.result) + }) + // step 6: if attributes were valid, we may have reached the target. + // Or back to step 2 (PendingSafeUpdateEvent) + t.Run("forkchoice update", func(t *testing.T) { + t.Run("surpassed", func(t *testing.T) { + p, m := newProgram(t, 42) + p.OnEvent(engine.ForkchoiceUpdateEvent{SafeL2Head: eth.L2BlockRef{Number: 42 + 1}}) + m.AssertExpectations(t) + require.True(t, p.closing) + require.NoError(t, p.result) + }) + t.Run("completed", func(t *testing.T) { + p, m := newProgram(t, 42) + p.OnEvent(engine.ForkchoiceUpdateEvent{SafeL2Head: eth.L2BlockRef{Number: 42}}) + m.AssertExpectations(t) + require.True(t, p.closing) + require.NoError(t, p.result) + }) + t.Run("incomplete", func(t *testing.T) { + p, m := newProgram(t, 42) + p.OnEvent(engine.ForkchoiceUpdateEvent{SafeL2Head: eth.L2BlockRef{Number: 42 - 1}}) + m.AssertExpectations(t) + require.False(t, p.closing) + require.NoError(t, p.result) + }) + }) + // on exhaustion of input data: stop with error + t.Run("deriver idle", func(t *testing.T) { + p, m := newProgram(t, 1000) + p.OnEvent(derive.DeriverIdleEvent{}) + m.AssertExpectations(t) + require.True(t, p.closing) + require.NotNil(t, p.result) + }) + // on inconsistent chain data: stop with error + t.Run("reset event", func(t *testing.T) { + p, m := newProgram(t, 1000) + p.OnEvent(rollup.ResetEvent{Err: errors.New("reset test err")}) + m.AssertExpectations(t) + require.True(t, p.closing) + require.NotNil(t, p.result) + }) + // on temporary error: continue derivation. + t.Run("temp error event", func(t *testing.T) { + p, m := newProgram(t, 1000) + m.ExpectOnce(engine.PendingSafeRequestEvent{}) + p.OnEvent(rollup.EngineTemporaryErrorEvent{Err: errors.New("temp test err")}) + m.AssertExpectations(t) + require.False(t, p.closing) + require.NoError(t, p.result) + }) + // on critical error: stop + t.Run("critical error event", func(t *testing.T) { + p, m := newProgram(t, 1000) + p.OnEvent(rollup.ResetEvent{Err: errors.New("crit test err")}) + m.AssertExpectations(t) + require.True(t, p.closing) + require.NotNil(t, p.result) + }) + t.Run("unknown event", func(t *testing.T) { + p, m := newProgram(t, 1000) + p.OnEvent(TestEvent{}) + m.AssertExpectations(t) + require.False(t, p.closing) + require.NoError(t, p.result) + }) +} + +type TestEvent struct{} + +func (ev TestEvent) String() string { + return "test-event" +} diff --git a/op-program/client/program.go b/op-program/client/program.go index d9c3531c4652..bee3892fca16 100644 --- a/op-program/client/program.go +++ b/op-program/client/program.go @@ -1,7 +1,6 @@ package client import ( - "context" "errors" "fmt" "io" @@ -73,12 +72,8 @@ func runDerivation(logger log.Logger, cfg *rollup.Config, l2Cfg *params.ChainCon logger.Info("Starting derivation") d := cldr.NewDriver(logger, cfg, l1Source, l1BlobsSource, l2Source, l2ClaimBlockNum) - for { - if err = d.Step(context.Background()); errors.Is(err, io.EOF) { - break - } else if err != nil { - return err - } + if err := d.RunComplete(); err != nil { + return fmt.Errorf("failed to run program to completion: %w", err) } return claim.ValidateClaim(logger, l2ClaimBlockNum, eth.Bytes32(l2Claim), l2Source) } From ec9f39bf5eed1c600b4c6f5fd1cd40c9ffc9c32b Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Sat, 22 Jun 2024 14:21:28 +1000 Subject: [PATCH 089/141] op-supervisor: Treat reaching the safe head as a success not a failure. (#10982) Current fault dispute rules are that the safe head is extended to the end of the trace. --- op-program/client/driver/program.go | 5 ++--- op-program/client/driver/program_test.go | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/op-program/client/driver/program.go b/op-program/client/driver/program.go index 4973c379383e..dccb4c0a3753 100644 --- a/op-program/client/driver/program.go +++ b/op-program/client/driver/program.go @@ -1,7 +1,6 @@ package driver import ( - "errors" "fmt" "github.com/ethereum/go-ethereum/log" @@ -54,13 +53,13 @@ func (d *ProgramDeriver) OnEvent(ev rollup.Event) { d.Emitter.Emit(engine.PendingSafeRequestEvent{}) case engine.ForkchoiceUpdateEvent: if x.SafeL2Head.Number >= d.targetBlockNum { - d.logger.Info("Derivation complete: reached L2 block", "head", x.UnsafeL2Head) + d.logger.Info("Derivation complete: reached L2 block", "head", x.SafeL2Head) d.closing = true } case derive.DeriverIdleEvent: // Not enough data to reach target d.closing = true - d.result = errors.New("not enough data to reach target") + d.logger.Info("Derivation complete: no further data to process") case rollup.ResetEvent: d.closing = true d.result = fmt.Errorf("unexpected reset error: %w", x.Err) diff --git a/op-program/client/driver/program_test.go b/op-program/client/driver/program_test.go index 1da60d30bca9..d231193d386d 100644 --- a/op-program/client/driver/program_test.go +++ b/op-program/client/driver/program_test.go @@ -103,13 +103,13 @@ func TestProgramDeriver(t *testing.T) { require.NoError(t, p.result) }) }) - // on exhaustion of input data: stop with error + // on exhaustion of input data: stop without error t.Run("deriver idle", func(t *testing.T) { p, m := newProgram(t, 1000) p.OnEvent(derive.DeriverIdleEvent{}) m.AssertExpectations(t) require.True(t, p.closing) - require.NotNil(t, p.result) + require.Nil(t, p.result) }) // on inconsistent chain data: stop with error t.Run("reset event", func(t *testing.T) { From e449dd2849ba44be73050f5c132ac7a2185fd050 Mon Sep 17 00:00:00 2001 From: protolambda Date: Sun, 23 Jun 2024 16:24:52 -0600 Subject: [PATCH 090/141] op-node: attributes-handler with events (#10947) * op-node: event handling on block attributes todo * op-node: update plasma step to no longer hardcode pipeline stepping --- op-e2e/actions/l2_verifier.go | 74 ++-- op-e2e/actions/plasma_test.go | 23 +- op-e2e/actions/sync_test.go | 83 +++-- op-node/rollup/attributes/attributes.go | 222 +++++------ op-node/rollup/attributes/attributes_test.go | 364 +++++++++---------- op-node/rollup/derive/deriver.go | 18 + op-node/rollup/derive/plasma_data_source.go | 4 +- op-node/rollup/driver/driver.go | 30 +- op-node/rollup/driver/state.go | 22 +- op-node/rollup/synchronous.go | 27 ++ op-program/client/driver/program.go | 5 + op-program/client/driver/program_test.go | 1 + op-service/testutils/mock_emitter.go | 4 + 13 files changed, 451 insertions(+), 426 deletions(-) diff --git a/op-e2e/actions/l2_verifier.go b/op-e2e/actions/l2_verifier.go index 682a89db68e5..e1363394b878 100644 --- a/op-e2e/actions/l2_verifier.go +++ b/op-e2e/actions/l2_verifier.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "io" "github.com/stretchr/testify/require" @@ -38,6 +39,8 @@ type L2Verifier struct { L2BlockRefByNumber(ctx context.Context, num uint64) (eth.L2BlockRef, error) } + synchronousEvents *rollup.SynchronousEvents + syncDeriver *driver.SyncDeriver // L2 rollup @@ -45,10 +48,9 @@ type L2Verifier struct { derivation *derive.DerivationPipeline clSync *clsync.CLSync - attributesHandler driver.AttributesHandler - safeHeadListener rollup.SafeHeadListener - finalizer driver.Finalizer - syncCfg *sync.Config + safeHeadListener rollup.SafeHeadListener + finalizer driver.Finalizer + syncCfg *sync.Config l1 derive.L1Fetcher l1State *driver.L1State @@ -101,26 +103,25 @@ func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc deri finalizer = finality.NewFinalizer(log, cfg, l1, ec) } - attributesHandler := attributes.NewAttributesHandler(log, cfg, ec, eng) + attributesHandler := attributes.NewAttributesHandler(log, cfg, ctx, eng, synchronousEvents) pipeline := derive.NewDerivationPipeline(log, cfg, l1, blobsSrc, plasmaSrc, eng, metrics) pipelineDeriver := derive.NewPipelineDeriver(ctx, pipeline, synchronousEvents) syncDeriver := &driver.SyncDeriver{ - Derivation: pipeline, - Finalizer: finalizer, - AttributesHandler: attributesHandler, - SafeHeadNotifs: safeHeadListener, - CLSync: clSync, - Engine: ec, - SyncCfg: syncCfg, - Config: cfg, - L1: l1, - L2: eng, - Emitter: synchronousEvents, - Log: log, - Ctx: ctx, - Drain: synchronousEvents.Drain, + Derivation: pipeline, + Finalizer: finalizer, + SafeHeadNotifs: safeHeadListener, + CLSync: clSync, + Engine: ec, + SyncCfg: syncCfg, + Config: cfg, + L1: l1, + L2: eng, + Emitter: synchronousEvents, + Log: log, + Ctx: ctx, + Drain: synchronousEvents.Drain, } engDeriv := engine.NewEngDeriver(log, ctx, cfg, ec, synchronousEvents) @@ -132,7 +133,6 @@ func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc deri clSync: clSync, derivation: pipeline, finalizer: finalizer, - attributesHandler: attributesHandler, safeHeadListener: safeHeadListener, syncCfg: syncCfg, syncDeriver: syncDeriver, @@ -142,6 +142,7 @@ func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc deri l2Building: false, rollupCfg: cfg, rpc: rpc.NewServer(), + synchronousEvents: synchronousEvents, } *rootDeriver = rollup.SynchronousDerivers{ @@ -151,6 +152,7 @@ func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc deri rollupNode, clSync, pipelineDeriver, + attributesHandler, } t.Cleanup(rollupNode.rpc.Stop) @@ -305,14 +307,29 @@ func (s *L2Verifier) OnEvent(ev rollup.Event) { } } -// ActL2PipelineStep runs one iteration of the L2 derivation pipeline -func (s *L2Verifier) ActL2PipelineStep(t Testing) { +func (s *L2Verifier) ActL2EventsUntilPending(t Testing, num uint64) { + s.ActL2EventsUntil(t, func(ev rollup.Event) bool { + x, ok := ev.(engine.PendingSafeUpdateEvent) + return ok && x.PendingSafe.Number == num + }, 1000, false) +} + +func (s *L2Verifier) ActL2EventsUntil(t Testing, fn func(ev rollup.Event) bool, max int, excl bool) { + t.Helper() if s.l2Building { t.InvalidAction("cannot derive new data while building L2 block") return } - s.syncDeriver.Emitter.Emit(driver.StepEvent{}) - require.NoError(t, s.syncDeriver.Drain(), "complete all event processing triggered by deriver step") + for i := 0; i < max; i++ { + err := s.synchronousEvents.DrainUntil(fn, excl) + if err == nil { + return + } + if err == io.EOF { + s.synchronousEvents.Emit(driver.StepEvent{}) + } + } + t.Fatalf("event condition did not hit, ran maximum number of steps: %d", max) } func (s *L2Verifier) ActL2PipelineFull(t Testing) { @@ -326,14 +343,19 @@ func (s *L2Verifier) ActL2PipelineFull(t Testing) { if i > 10_000 { t.Fatalf("ActL2PipelineFull running for too long. Is a deriver looping?") } - s.ActL2PipelineStep(t) + if s.l2Building { + t.InvalidAction("cannot derive new data while building L2 block") + return + } + s.syncDeriver.Emitter.Emit(driver.StepEvent{}) + require.NoError(t, s.syncDeriver.Drain(), "complete all event processing triggered by deriver step") } } // ActL2UnsafeGossipReceive creates an action that can receive an unsafe execution payload, like gossipsub func (s *L2Verifier) ActL2UnsafeGossipReceive(payload *eth.ExecutionPayloadEnvelope) Action { return func(t Testing) { - s.syncDeriver.Emitter.Emit(clsync.ReceivedUnsafePayloadEvent{Envelope: payload}) + s.synchronousEvents.Emit(clsync.ReceivedUnsafePayloadEvent{Envelope: payload}) } } diff --git a/op-e2e/actions/plasma_test.go b/op-e2e/actions/plasma_test.go index bd574f00053d..bc67ba4ac4f7 100644 --- a/op-e2e/actions/plasma_test.go +++ b/op-e2e/actions/plasma_test.go @@ -5,18 +5,21 @@ import ( "math/rand" "testing" + "github.com/stretchr/testify/require" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" "github.com/ethereum-optimism/optimism/op-node/node/safedb" + "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" plasma "github.com/ethereum-optimism/optimism/op-plasma" "github.com/ethereum-optimism/optimism/op-plasma/bindings" "github.com/ethereum-optimism/optimism/op-service/sources" "github.com/ethereum-optimism/optimism/op-service/testlog" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/log" - "github.com/stretchr/testify/require" ) // Devnet allocs should have alt-da mode enabled for these tests to pass @@ -497,9 +500,13 @@ func TestPlasma_SequencerStalledMultiChallenges(gt *testing.T) { // advance the pipeline until it errors out as it is still stuck // on deriving the first commitment - for i := 0; i < 3; i++ { - a.sequencer.ActL2PipelineStep(t) - } + a.sequencer.ActL2EventsUntil(t, func(ev rollup.Event) bool { + x, ok := ev.(rollup.EngineTemporaryErrorEvent) + if ok { + require.ErrorContains(t, x.Err, "failed to fetch input data") + } + return ok + }, 100, false) // keep track of the second commitment comm2 := a.lastComm diff --git a/op-e2e/actions/sync_test.go b/op-e2e/actions/sync_test.go index e7521bdd8c94..c094351553e8 100644 --- a/op-e2e/actions/sync_test.go +++ b/op-e2e/actions/sync_test.go @@ -7,13 +7,7 @@ import ( "testing" "time" - "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" - "github.com/ethereum-optimism/optimism/op-node/rollup/derive" - "github.com/ethereum-optimism/optimism/op-node/rollup/sync" - "github.com/ethereum-optimism/optimism/op-service/eth" - "github.com/ethereum-optimism/optimism/op-service/sources" - "github.com/ethereum-optimism/optimism/op-service/testlog" - "github.com/ethereum-optimism/optimism/op-service/testutils" + "github.com/stretchr/testify/require" "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/beacon/engine" @@ -22,7 +16,16 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" - "github.com/stretchr/testify/require" + + "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" + "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + engine2 "github.com/ethereum-optimism/optimism/op-node/rollup/engine" + "github.com/ethereum-optimism/optimism/op-node/rollup/sync" + "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/ethereum-optimism/optimism/op-service/sources" + "github.com/ethereum-optimism/optimism/op-service/testlog" + "github.com/ethereum-optimism/optimism/op-service/testutils" ) func newSpanChannelOut(t StatefulTesting, e e2eutils.SetupData) derive.ChannelOut { @@ -262,10 +265,8 @@ func TestBackupUnsafe(gt *testing.T) { require.Equal(t, eth.L2BlockRef{}, sequencer.L2BackupUnsafe()) // pendingSafe must not be advanced as well require.Equal(t, sequencer.L2PendingSafe().Number, uint64(0)) - // Preheat engine queue and consume A1 from batch - for i := 0; i < 4; i++ { - sequencer.ActL2PipelineStep(t) - } + // Run until we consume A1 from batch + sequencer.ActL2EventsUntilPending(t, 1) // A1 is valid original block so pendingSafe is advanced require.Equal(t, sequencer.L2PendingSafe().Number, uint64(1)) require.Equal(t, sequencer.L2Unsafe().Number, uint64(5)) @@ -273,8 +274,8 @@ func TestBackupUnsafe(gt *testing.T) { require.Equal(t, eth.L2BlockRef{}, sequencer.L2BackupUnsafe()) // Process B2 - sequencer.ActL2PipelineStep(t) - sequencer.ActL2PipelineStep(t) + // Run until we consume B2 from batch + sequencer.ActL2EventsUntilPending(t, 2) // B2 is valid different block, triggering unsafe chain reorg require.Equal(t, sequencer.L2Unsafe().Number, uint64(2)) // B2 is valid different block, triggering unsafe block backup @@ -425,10 +426,8 @@ func TestBackupUnsafeReorgForkChoiceInputError(gt *testing.T) { require.Equal(t, eth.L2BlockRef{}, sequencer.L2BackupUnsafe()) // pendingSafe must not be advanced as well require.Equal(t, sequencer.L2PendingSafe().Number, uint64(0)) - // Preheat engine queue and consume A1 from batch - for i := 0; i < 4; i++ { - sequencer.ActL2PipelineStep(t) - } + // Run till we consumed A1 from batch + sequencer.ActL2EventsUntilPending(t, 1) // A1 is valid original block so pendingSafe is advanced require.Equal(t, sequencer.L2PendingSafe().Number, uint64(1)) require.Equal(t, sequencer.L2Unsafe().Number, uint64(5)) @@ -436,8 +435,7 @@ func TestBackupUnsafeReorgForkChoiceInputError(gt *testing.T) { require.Equal(t, eth.L2BlockRef{}, sequencer.L2BackupUnsafe()) // Process B2 - sequencer.ActL2PipelineStep(t) - sequencer.ActL2PipelineStep(t) + sequencer.ActL2EventsUntilPending(t, 2) // B2 is valid different block, triggering unsafe chain reorg require.Equal(t, sequencer.L2Unsafe().Number, uint64(2)) // B2 is valid different block, triggering unsafe block backup @@ -447,14 +445,14 @@ func TestBackupUnsafeReorgForkChoiceInputError(gt *testing.T) { // B3 is invalid block // NextAttributes is called - sequencer.ActL2PipelineStep(t) - // forceNextSafeAttributes is called - sequencer.ActL2PipelineStep(t) + sequencer.ActL2EventsUntil(t, func(ev rollup.Event) bool { + _, ok := ev.(engine2.ProcessAttributesEvent) + return ok + }, 100, true) // mock forkChoiceUpdate error while restoring previous unsafe chain using backupUnsafe. seqEng.ActL2RPCFail(t, eth.InputError{Inner: errors.New("mock L2 RPC error"), Code: eth.InvalidForkchoiceState}) - // TryBackupUnsafeReorg is called - sequencer.ActL2PipelineStep(t) + // The backup-unsafe rewind is applied // try to process invalid leftovers: B4, B5 sequencer.ActL2PipelineFull(t) @@ -565,9 +563,7 @@ func TestBackupUnsafeReorgForkChoiceNotInputError(gt *testing.T) { // pendingSafe must not be advanced as well require.Equal(t, sequencer.L2PendingSafe().Number, uint64(0)) // Preheat engine queue and consume A1 from batch - for i := 0; i < 4; i++ { - sequencer.ActL2PipelineStep(t) - } + sequencer.ActL2EventsUntilPending(t, 1) // A1 is valid original block so pendingSafe is advanced require.Equal(t, sequencer.L2PendingSafe().Number, uint64(1)) require.Equal(t, sequencer.L2Unsafe().Number, uint64(5)) @@ -575,8 +571,7 @@ func TestBackupUnsafeReorgForkChoiceNotInputError(gt *testing.T) { require.Equal(t, eth.L2BlockRef{}, sequencer.L2BackupUnsafe()) // Process B2 - sequencer.ActL2PipelineStep(t) - sequencer.ActL2PipelineStep(t) + sequencer.ActL2EventsUntilPending(t, 2) // B2 is valid different block, triggering unsafe chain reorg require.Equal(t, sequencer.L2Unsafe().Number, uint64(2)) // B2 is valid different block, triggering unsafe block backup @@ -585,17 +580,21 @@ func TestBackupUnsafeReorgForkChoiceNotInputError(gt *testing.T) { require.Equal(t, sequencer.L2PendingSafe().Number, uint64(2)) // B3 is invalid block - // NextAttributes is called - sequencer.ActL2PipelineStep(t) - // forceNextSafeAttributes is called - sequencer.ActL2PipelineStep(t) + // wait till attributes processing (excl.) before mocking errors + sequencer.ActL2EventsUntil(t, func(ev rollup.Event) bool { + _, ok := ev.(engine2.ProcessAttributesEvent) + return ok + }, 100, true) serverErrCnt := 2 for i := 0; i < serverErrCnt; i++ { // mock forkChoiceUpdate failure while restoring previous unsafe chain using backupUnsafe. seqEng.ActL2RPCFail(t, engine.GenericServerError) // TryBackupUnsafeReorg is called - forkChoiceUpdate returns GenericServerError so retry - sequencer.ActL2PipelineStep(t) + sequencer.ActL2EventsUntil(t, func(ev rollup.Event) bool { + _, ok := ev.(rollup.EngineTemporaryErrorEvent) + return ok + }, 100, false) // backupUnsafeHead not emptied yet require.Equal(t, targetUnsafeHeadHash, sequencer.L2BackupUnsafe().Hash) } @@ -980,7 +979,12 @@ func TestSpanBatchAtomicity_Consolidation(gt *testing.T) { verifier.ActL1HeadSignal(t) verifier.l2PipelineIdle = false for !verifier.l2PipelineIdle { - verifier.ActL2PipelineStep(t) + // wait for next pending block + verifier.ActL2EventsUntil(t, func(ev rollup.Event) bool { + _, pending := ev.(engine2.PendingSafeUpdateEvent) + _, idle := ev.(derive.DeriverIdleEvent) + return pending || idle + }, 1000, false) if verifier.L2PendingSafe().Number < targetHeadNumber { // If the span batch is not fully processed, the safe head must not advance. require.Equal(t, verifier.L2Safe().Number, uint64(0)) @@ -1027,7 +1031,12 @@ func TestSpanBatchAtomicity_ForceAdvance(gt *testing.T) { verifier.ActL1HeadSignal(t) verifier.l2PipelineIdle = false for !verifier.l2PipelineIdle { - verifier.ActL2PipelineStep(t) + // wait for next pending block + verifier.ActL2EventsUntil(t, func(ev rollup.Event) bool { + _, pending := ev.(engine2.PendingSafeUpdateEvent) + _, idle := ev.(derive.DeriverIdleEvent) + return pending || idle + }, 1000, false) if verifier.L2PendingSafe().Number < targetHeadNumber { // If the span batch is not fully processed, the safe head must not advance. require.Equal(t, verifier.L2Safe().Number, uint64(0)) diff --git a/op-node/rollup/attributes/attributes.go b/op-node/rollup/attributes/attributes.go index 517c91f70863..43d6000c1225 100644 --- a/op-node/rollup/attributes/attributes.go +++ b/op-node/rollup/attributes/attributes.go @@ -4,33 +4,18 @@ import ( "context" "errors" "fmt" - "io" + "sync" "time" "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" "github.com/ethereum-optimism/optimism/op-node/rollup" - "github.com/ethereum-optimism/optimism/op-node/rollup/async" - "github.com/ethereum-optimism/optimism/op-node/rollup/conductor" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-service/eth" ) -type Engine interface { - engine.EngineControl - - SetUnsafeHead(eth.L2BlockRef) - SetSafeHead(eth.L2BlockRef) - SetBackupUnsafeL2Head(block eth.L2BlockRef, triggerReorg bool) - SetPendingSafeL2Head(eth.L2BlockRef) - - PendingSafeL2Head() eth.L2BlockRef - BackupUnsafeL2Head() eth.L2BlockRef -} - type L2 interface { PayloadByNumber(context.Context, uint64) (*eth.ExecutionPayloadEnvelope, error) } @@ -39,150 +24,133 @@ type AttributesHandler struct { log log.Logger cfg *rollup.Config - ec Engine + // when the rollup node shuts down, stop any in-flight sub-processes of the attributes-handler + ctx context.Context + l2 L2 + mu sync.Mutex + + emitter rollup.EventEmitter + attributes *derive.AttributesWithParent } -func NewAttributesHandler(log log.Logger, cfg *rollup.Config, ec Engine, l2 L2) *AttributesHandler { +func NewAttributesHandler(log log.Logger, cfg *rollup.Config, ctx context.Context, l2 L2, emitter rollup.EventEmitter) *AttributesHandler { return &AttributesHandler{ log: log, cfg: cfg, - ec: ec, + ctx: ctx, l2: l2, + emitter: emitter, attributes: nil, } } -func (eq *AttributesHandler) HasAttributes() bool { - return eq.attributes != nil +func (eq *AttributesHandler) OnEvent(ev rollup.Event) { + // Events may be concurrent in the future. Prevent unsafe concurrent modifications to the attributes. + eq.mu.Lock() + defer eq.mu.Unlock() + + switch x := ev.(type) { + case engine.PendingSafeUpdateEvent: + eq.onPendingSafeUpdate(x) + case derive.DerivedAttributesEvent: + eq.attributes = x.Attributes + eq.emitter.Emit(derive.ConfirmReceivedAttributesEvent{}) + // to make sure we have a pre-state signal to process the attributes from + eq.emitter.Emit(engine.PendingSafeRequestEvent{}) + case engine.InvalidPayloadAttributesEvent: + // If the engine signals that attributes are invalid, + // that should match our last applied attributes, which we should thus drop. + eq.attributes = nil + // Time to re-evaluate without attributes. + // (the pending-safe state will then be forwarded to our source of attributes). + eq.emitter.Emit(engine.PendingSafeRequestEvent{}) + } } -func (eq *AttributesHandler) SetAttributes(attributes *derive.AttributesWithParent) { - eq.attributes = attributes -} +// onPendingSafeUpdate applies the queued-up block attributes, if any, on top of the signaled pending state. +// The event is also used to clear the queued-up attributes, when successfully processed. +// On processing failure this may emit a temporary, reset, or critical error like other derivers. +func (eq *AttributesHandler) onPendingSafeUpdate(x engine.PendingSafeUpdateEvent) { + if x.Unsafe.Number < x.PendingSafe.Number { + // invalid chain state, reset to try and fix it + eq.emitter.Emit(rollup.ResetEvent{Err: fmt.Errorf("pending-safe label (%d) may not be ahead of unsafe head label (%d)", x.PendingSafe.Number, x.Unsafe.Number)}) + return + } -// Proceed processes block attributes, if any. -// Proceed returns io.EOF if there are no attributes to process. -// Proceed returns a temporary, reset, or critical error like other derivers. -// Proceed returns no error if the safe-head may have changed. -func (eq *AttributesHandler) Proceed(ctx context.Context) error { if eq.attributes == nil { - return io.EOF - } - // validate the safe attributes before processing them. The engine may have completed processing them through other means. - if eq.ec.PendingSafeL2Head() != eq.attributes.Parent { - // Previously the attribute's parent was the pending safe head. If the pending safe head advances so pending safe head's parent is the same as the - // attribute's parent then we need to cancel the attributes. - if eq.ec.PendingSafeL2Head().ParentHash == eq.attributes.Parent.Hash { - eq.log.Warn("queued safe attributes are stale, safehead progressed", - "pending_safe_head", eq.ec.PendingSafeL2Head(), "pending_safe_head_parent", eq.ec.PendingSafeL2Head().ParentID(), - "attributes_parent", eq.attributes.Parent) - eq.attributes = nil - return nil - } - // If something other than a simple advance occurred, perform a full reset - return derive.NewResetError(fmt.Errorf("pending safe head changed to %s with parent %s, conflicting with queued safe attributes on top of %s", - eq.ec.PendingSafeL2Head(), eq.ec.PendingSafeL2Head().ParentID(), eq.attributes.Parent)) + // Request new attributes to be generated, only if we don't currently have attributes that have yet to be processed. + // It is safe to request the pipeline, the attributes-handler is the only user of it, + // and the pipeline will not generate another set of attributes until the last set is recognized. + eq.emitter.Emit(derive.PipelineStepEvent{PendingSafe: x.PendingSafe}) + return } - if eq.ec.PendingSafeL2Head().Number < eq.ec.UnsafeL2Head().Number { - if err := eq.consolidateNextSafeAttributes(ctx, eq.attributes); err != nil { - return err - } - eq.attributes = nil - return nil - } else if eq.ec.PendingSafeL2Head().Number == eq.ec.UnsafeL2Head().Number { - if err := eq.forceNextSafeAttributes(ctx, eq.attributes); err != nil { - return err - } + + // Drop attributes if they don't apply on top of the pending safe head + if eq.attributes.Parent.Number != x.PendingSafe.Number { + eq.log.Warn("dropping stale attributes", + "pending", x.PendingSafe, "attributes_parent", eq.attributes.Parent) eq.attributes = nil - return nil + return + } + + if eq.attributes.Parent != x.PendingSafe { + // If the attributes are supposed to follow the pending safe head, but don't build on the exact block, + // then there's some reorg inconsistency. Either bad attributes, or bad pending safe head. + // Trigger a reset, and the system can derive attributes on top of the pending safe head. + // Until the reset is complete we don't clear the attributes state, + // so we can re-emit the ResetEvent until the reset actually happens. + + eq.emitter.Emit(rollup.ResetEvent{Err: fmt.Errorf("pending safe head changed to %s with parent %s, conflicting with queued safe attributes on top of %s", + x.PendingSafe, x.PendingSafe.ParentID(), eq.attributes.Parent)}) } else { - // For some reason the unsafe head is behind the pending safe head. Log it, and correct it. - eq.log.Error("invalid sync state, unsafe head is behind pending safe head", "unsafe", eq.ec.UnsafeL2Head(), "pending_safe", eq.ec.PendingSafeL2Head()) - eq.ec.SetUnsafeHead(eq.ec.PendingSafeL2Head()) - return nil + // if there already exists a block we can just consolidate it + if x.PendingSafe.Number < x.Unsafe.Number { + eq.consolidateNextSafeAttributes(eq.attributes, x.PendingSafe) + } else { + // append to tip otherwise + eq.emitter.Emit(engine.ProcessAttributesEvent{Attributes: eq.attributes}) + } } } // consolidateNextSafeAttributes tries to match the next safe attributes against the existing unsafe chain, // to avoid extra processing or unnecessary unwinding of the chain. -// However, if the attributes do not match, they will be forced with forceNextSafeAttributes. -func (eq *AttributesHandler) consolidateNextSafeAttributes(ctx context.Context, attributes *derive.AttributesWithParent) error { - ctx, cancel := context.WithTimeout(ctx, time.Second*10) +// However, if the attributes do not match, they will be forced to process the attributes. +func (eq *AttributesHandler) consolidateNextSafeAttributes(attributes *derive.AttributesWithParent, onto eth.L2BlockRef) { + ctx, cancel := context.WithTimeout(eq.ctx, time.Second*10) defer cancel() - envelope, err := eq.l2.PayloadByNumber(ctx, eq.ec.PendingSafeL2Head().Number+1) + envelope, err := eq.l2.PayloadByNumber(ctx, attributes.Parent.Number+1) if err != nil { if errors.Is(err, ethereum.NotFound) { // engine may have restarted, or inconsistent safe head. We need to reset - return derive.NewResetError(fmt.Errorf("expected engine was synced and had unsafe block to reconcile, but cannot find the block: %w", err)) + eq.emitter.Emit(rollup.ResetEvent{Err: fmt.Errorf("expected engine was synced and had unsafe block to reconcile, but cannot find the block: %w", err)}) + return } - return derive.NewTemporaryError(fmt.Errorf("failed to get existing unsafe payload to compare against derived attributes from L1: %w", err)) - } - if err := AttributesMatchBlock(eq.cfg, attributes.Attributes, eq.ec.PendingSafeL2Head().Hash, envelope, eq.log); err != nil { - eq.log.Warn("L2 reorg: existing unsafe block does not match derived attributes from L1", "err", err, "unsafe", eq.ec.UnsafeL2Head(), "pending_safe", eq.ec.PendingSafeL2Head(), "safe", eq.ec.SafeL2Head()) - // geth cannot wind back a chain without reorging to a new, previously non-canonical, block - return eq.forceNextSafeAttributes(ctx, attributes) - } - ref, err := derive.PayloadToBlockRef(eq.cfg, envelope.ExecutionPayload) - if err != nil { - return derive.NewResetError(fmt.Errorf("failed to decode L2 block ref from payload: %w", err)) - } - eq.ec.SetPendingSafeL2Head(ref) - if attributes.IsLastInSpan { - eq.ec.SetSafeHead(ref) + eq.emitter.Emit(rollup.EngineTemporaryErrorEvent{Err: fmt.Errorf("failed to get existing unsafe payload to compare against derived attributes from L1: %w", err)}) + return } - // unsafe head stays the same, we did not reorg the chain. - return nil -} + if err := AttributesMatchBlock(eq.cfg, attributes.Attributes, onto.Hash, envelope, eq.log); err != nil { + eq.log.Warn("L2 reorg: existing unsafe block does not match derived attributes from L1", + "err", err, "unsafe", envelope.ExecutionPayload.ID(), "pending_safe", onto) -// forceNextSafeAttributes inserts the provided attributes, reorging away any conflicting unsafe chain. -func (eq *AttributesHandler) forceNextSafeAttributes(ctx context.Context, attributes *derive.AttributesWithParent) error { - attrs := attributes.Attributes - errType, err := eq.ec.StartPayload(ctx, eq.ec.PendingSafeL2Head(), attributes, true) - if err == nil { - _, errType, err = eq.ec.ConfirmPayload(ctx, async.NoOpGossiper{}, &conductor.NoOpConductor{}) - } - if err != nil { - switch errType { - case engine.BlockInsertTemporaryErr: - // RPC errors are recoverable, we can retry the buffered payload attributes later. - return derive.NewTemporaryError(fmt.Errorf("temporarily cannot insert new safe block: %w", err)) - case engine.BlockInsertPrestateErr: - _ = eq.ec.CancelPayload(ctx, true) - return derive.NewResetError(fmt.Errorf("need reset to resolve pre-state problem: %w", err)) - case engine.BlockInsertPayloadErr: - _ = eq.ec.CancelPayload(ctx, true) - eq.log.Warn("could not process payload derived from L1 data, dropping batch", "err", err) - // Count the number of deposits to see if the tx list is deposit only. - depositCount := 0 - for _, tx := range attrs.Transactions { - if len(tx) > 0 && tx[0] == types.DepositTxType { - depositCount += 1 - } - } - // Deposit transaction execution errors are suppressed in the execution engine, but if the - // block is somehow invalid, there is nothing we can do to recover & we should exit. - if len(attrs.Transactions) == depositCount { - eq.log.Error("deposit only block was invalid", "parent", attributes.Parent, "err", err) - return derive.NewCriticalError(fmt.Errorf("failed to process block with only deposit transactions: %w", err)) - } - // Revert the pending safe head to the safe head. - eq.ec.SetPendingSafeL2Head(eq.ec.SafeL2Head()) - // suppress the error b/c we want to retry with the next batch from the batch queue - // If there is no valid batch the node will eventually force a deposit only block. If - // the deposit only block fails, this will return the critical error above. - - // Try to restore to previous known unsafe chain. - eq.ec.SetBackupUnsafeL2Head(eq.ec.BackupUnsafeL2Head(), true) - - // drop the payload (by returning no error) without inserting it into the engine - return nil - default: - return derive.NewCriticalError(fmt.Errorf("unknown InsertHeadBlock error type %d: %w", errType, err)) + // geth cannot wind back a chain without reorging to a new, previously non-canonical, block + eq.emitter.Emit(engine.ProcessAttributesEvent{Attributes: attributes}) + return + } else { + ref, err := derive.PayloadToBlockRef(eq.cfg, envelope.ExecutionPayload) + if err != nil { + eq.log.Error("Failed to compute block-ref from execution payload") + return } + eq.emitter.Emit(engine.PromotePendingSafeEvent{ + Ref: ref, + Safe: attributes.IsLastInSpan, + }) } - return nil + + // unsafe head stays the same, we did not reorg the chain. } diff --git a/op-node/rollup/attributes/attributes_test.go b/op-node/rollup/attributes/attributes_test.go index 49e6247e1417..5a9359c1fcfd 100644 --- a/op-node/rollup/attributes/attributes_test.go +++ b/op-node/rollup/attributes/attributes_test.go @@ -2,7 +2,6 @@ package attributes import ( "context" - "io" "math/big" "math/rand" // nosemgrep "testing" @@ -14,11 +13,9 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" - "github.com/ethereum-optimism/optimism/op-node/metrics" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/engine" - "github.com/ethereum-optimism/optimism/op-node/rollup/sync" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/testlog" "github.com/ethereum-optimism/optimism/op-service/testutils" @@ -153,161 +150,147 @@ func TestAttributesHandler(t *testing.T) { refA1Alt, err := derive.PayloadToBlockRef(cfg, payloadA1Alt.ExecutionPayload) require.NoError(t, err) - refA2 := eth.L2BlockRef{ - Hash: testutils.RandomHash(rng), - Number: refA1.Number + 1, - ParentHash: refA1.Hash, - Time: refA1.Time + cfg.BlockTime, - L1Origin: refA.ID(), - SequenceNumber: 1, - } - - a2L1Info, err := derive.L1InfoDepositBytes(cfg, cfg.Genesis.SystemConfig, refA2.SequenceNumber, aL1Info, refA2.Time) - require.NoError(t, err) - attrA2 := &derive.AttributesWithParent{ - Attributes: ð.PayloadAttributes{ - Timestamp: eth.Uint64Quantity(refA2.Time), - PrevRandao: eth.Bytes32{}, - SuggestedFeeRecipient: common.Address{}, - Withdrawals: nil, - ParentBeaconBlockRoot: &common.Hash{}, - Transactions: []eth.Data{a2L1Info}, - NoTxPool: false, - GasLimit: &gasLimit, - }, - Parent: refA1, - IsLastInSpan: true, - } + t.Run("drop invalid attributes", func(t *testing.T) { + logger := testlog.Logger(t, log.LevelInfo) + l2 := &testutils.MockL2Client{} + emitter := &testutils.MockEmitter{} + ah := NewAttributesHandler(logger, cfg, context.Background(), l2, emitter) + + emitter.ExpectOnce(derive.ConfirmReceivedAttributesEvent{}) + emitter.ExpectOnce(engine.PendingSafeRequestEvent{}) + ah.OnEvent(derive.DerivedAttributesEvent{ + Attributes: attrA1, + }) + emitter.AssertExpectations(t) + require.NotNil(t, ah.attributes, "queue the invalid attributes") + emitter.ExpectOnce(engine.PendingSafeRequestEvent{}) + ah.OnEvent(engine.InvalidPayloadAttributesEvent{ + Attributes: attrA1, + }) + emitter.AssertExpectations(t) + require.Nil(t, ah.attributes, "drop the invalid attributes") + }) t.Run("drop stale attributes", func(t *testing.T) { logger := testlog.Logger(t, log.LevelInfo) - eng := &testutils.MockEngine{} - ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync, rollup.NoopEmitter{}) - ah := NewAttributesHandler(logger, cfg, ec, eng) - defer eng.AssertExpectations(t) - - ec.SetPendingSafeL2Head(refA1Alt) - ah.SetAttributes(attrA1) - require.True(t, ah.HasAttributes()) - require.NoError(t, ah.Proceed(context.Background()), "drop stale attributes") - require.False(t, ah.HasAttributes()) + l2 := &testutils.MockL2Client{} + emitter := &testutils.MockEmitter{} + ah := NewAttributesHandler(logger, cfg, context.Background(), l2, emitter) + + emitter.ExpectOnce(derive.ConfirmReceivedAttributesEvent{}) + emitter.ExpectOnce(engine.PendingSafeRequestEvent{}) + ah.OnEvent(derive.DerivedAttributesEvent{ + Attributes: attrA1, + }) + emitter.AssertExpectations(t) + require.NotNil(t, ah.attributes) + ah.OnEvent(engine.PendingSafeUpdateEvent{ + PendingSafe: refA1Alt, + Unsafe: refA1Alt, + }) + l2.AssertExpectations(t) + emitter.AssertExpectations(t) + require.Nil(t, ah.attributes, "drop stale attributes") }) t.Run("pending gets reorged", func(t *testing.T) { logger := testlog.Logger(t, log.LevelInfo) - eng := &testutils.MockEngine{} - ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync, rollup.NoopEmitter{}) - ah := NewAttributesHandler(logger, cfg, ec, eng) - defer eng.AssertExpectations(t) - - ec.SetPendingSafeL2Head(refA0Alt) - ah.SetAttributes(attrA1) - require.True(t, ah.HasAttributes()) - require.ErrorIs(t, ah.Proceed(context.Background()), derive.ErrReset, "A1 does not fit on A0Alt") - require.True(t, ah.HasAttributes(), "detected reorg does not clear state, reset is required") + l2 := &testutils.MockL2Client{} + emitter := &testutils.MockEmitter{} + ah := NewAttributesHandler(logger, cfg, context.Background(), l2, emitter) + + emitter.ExpectOnce(derive.ConfirmReceivedAttributesEvent{}) + emitter.ExpectOnce(engine.PendingSafeRequestEvent{}) + ah.OnEvent(derive.DerivedAttributesEvent{ + Attributes: attrA1, + }) + emitter.AssertExpectations(t) + require.NotNil(t, ah.attributes) + + emitter.ExpectOnceType("ResetEvent") + ah.OnEvent(engine.PendingSafeUpdateEvent{ + PendingSafe: refA0Alt, + Unsafe: refA0Alt, + }) + l2.AssertExpectations(t) + emitter.AssertExpectations(t) + require.NotNil(t, ah.attributes, "detected reorg does not clear state, reset is required") }) t.Run("pending older than unsafe", func(t *testing.T) { t.Run("consolidation fails", func(t *testing.T) { logger := testlog.Logger(t, log.LevelInfo) - eng := &testutils.MockEngine{} - ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync, rollup.NoopEmitter{}) - ah := NewAttributesHandler(logger, cfg, ec, eng) - - ec.SetUnsafeHead(refA1) - ec.SetSafeHead(refA0) - ec.SetFinalizedHead(refA0) - ec.SetPendingSafeL2Head(refA0) + l2 := &testutils.MockL2Client{} + emitter := &testutils.MockEmitter{} + ah := NewAttributesHandler(logger, cfg, context.Background(), l2, emitter) - defer eng.AssertExpectations(t) + // attrA1Alt does not match block A1, so will cause force-reorg. + emitter.ExpectOnce(derive.ConfirmReceivedAttributesEvent{}) + emitter.ExpectOnce(engine.PendingSafeRequestEvent{}) + ah.OnEvent(derive.DerivedAttributesEvent{Attributes: attrA1Alt}) + emitter.AssertExpectations(t) + require.NotNil(t, ah.attributes, "queued up derived attributes") // Call during consolidation. // The payloadA1 is going to get reorged out in favor of attrA1Alt (turns into payloadA1Alt) - eng.ExpectPayloadByNumber(refA1.Number, payloadA1, nil) - - // attrA1Alt does not match block A1, so will cause force-reorg. - { - eng.ExpectForkchoiceUpdate(ð.ForkchoiceState{ - HeadBlockHash: payloadA1Alt.ExecutionPayload.ParentHash, // reorg - SafeBlockHash: refA0.Hash, - FinalizedBlockHash: refA0.Hash, - }, attrA1Alt.Attributes, ð.ForkchoiceUpdatedResult{ - PayloadStatus: eth.PayloadStatusV1{Status: eth.ExecutionValid}, - PayloadID: ð.PayloadID{1, 2, 3}, - }, nil) // to build the block - eng.ExpectGetPayload(eth.PayloadID{1, 2, 3}, payloadA1Alt, nil) - eng.ExpectNewPayload(payloadA1Alt.ExecutionPayload, payloadA1Alt.ParentBeaconBlockRoot, - ð.PayloadStatusV1{Status: eth.ExecutionValid}, nil) // to persist the block - eng.ExpectForkchoiceUpdate(ð.ForkchoiceState{ - HeadBlockHash: payloadA1Alt.ExecutionPayload.BlockHash, - SafeBlockHash: payloadA1Alt.ExecutionPayload.BlockHash, - FinalizedBlockHash: refA0.Hash, - }, nil, ð.ForkchoiceUpdatedResult{ - PayloadStatus: eth.PayloadStatusV1{Status: eth.ExecutionValid}, - PayloadID: nil, - }, nil) // to make it canonical - } - - ah.SetAttributes(attrA1Alt) - - require.True(t, ah.HasAttributes()) - require.NoError(t, ah.Proceed(context.Background()), "fail consolidation, perform force reorg") - require.False(t, ah.HasAttributes()) - - require.Equal(t, refA1Alt.Hash, payloadA1Alt.ExecutionPayload.BlockHash, "hash") - t.Log("ref A1: ", refA1.Hash) - t.Log("ref A0: ", refA0.Hash) - t.Log("ref alt: ", refA1Alt.Hash) - require.Equal(t, refA1Alt, ec.UnsafeL2Head(), "unsafe head reorg complete") - require.Equal(t, refA1Alt, ec.SafeL2Head(), "safe head reorg complete and updated") + l2.ExpectPayloadByNumber(refA1.Number, payloadA1, nil) + // fail consolidation, perform force reorg + emitter.ExpectOnce(engine.ProcessAttributesEvent{Attributes: attrA1Alt}) + ah.OnEvent(engine.PendingSafeUpdateEvent{ + PendingSafe: refA0, + Unsafe: refA1, + }) + l2.AssertExpectations(t) + emitter.AssertExpectations(t) + require.NotNil(t, ah.attributes, "still have attributes, processing still unconfirmed") + + // recognize reorg as complete + ah.OnEvent(engine.PendingSafeUpdateEvent{ + PendingSafe: refA1Alt, + Unsafe: refA1Alt, + }) + emitter.AssertExpectations(t) + require.Nil(t, ah.attributes, "drop when attributes are successful") }) t.Run("consolidation passes", func(t *testing.T) { fn := func(t *testing.T, lastInSpan bool) { logger := testlog.Logger(t, log.LevelInfo) - eng := &testutils.MockEngine{} - ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync, rollup.NoopEmitter{}) - ah := NewAttributesHandler(logger, cfg, ec, eng) - - ec.SetUnsafeHead(refA1) - ec.SetSafeHead(refA0) - ec.SetFinalizedHead(refA0) - ec.SetPendingSafeL2Head(refA0) - - defer eng.AssertExpectations(t) - - // Call during consolidation. - eng.ExpectPayloadByNumber(refA1.Number, payloadA1, nil) - - expectedSafeHash := refA0.Hash - if lastInSpan { // if last in span, then it becomes safe - expectedSafeHash = refA1.Hash - } - eng.ExpectForkchoiceUpdate(ð.ForkchoiceState{ - HeadBlockHash: refA1.Hash, - SafeBlockHash: expectedSafeHash, - FinalizedBlockHash: refA0.Hash, - }, nil, ð.ForkchoiceUpdatedResult{ - PayloadStatus: eth.PayloadStatusV1{Status: eth.ExecutionValid}, - PayloadID: nil, - }, nil) + l2 := &testutils.MockL2Client{} + emitter := &testutils.MockEmitter{} + ah := NewAttributesHandler(logger, cfg, context.Background(), l2, emitter) attr := &derive.AttributesWithParent{ Attributes: attrA1.Attributes, // attributes will match, passing consolidation Parent: attrA1.Parent, IsLastInSpan: lastInSpan, } - ah.SetAttributes(attr) - - require.True(t, ah.HasAttributes()) - require.NoError(t, ah.Proceed(context.Background()), "consolidate") - require.False(t, ah.HasAttributes()) - require.NoError(t, ec.TryUpdateEngine(context.Background()), "update to handle safe bump (lastinspan case)") - if lastInSpan { - require.Equal(t, refA1, ec.SafeL2Head(), "last in span becomes safe instantaneously") - } else { - require.Equal(t, refA1, ec.PendingSafeL2Head(), "pending as safe") - require.Equal(t, refA0, ec.SafeL2Head(), "A1 not yet safe") - } + emitter.ExpectOnce(derive.ConfirmReceivedAttributesEvent{}) + emitter.ExpectOnce(engine.PendingSafeRequestEvent{}) + ah.OnEvent(derive.DerivedAttributesEvent{Attributes: attr}) + emitter.AssertExpectations(t) + require.NotNil(t, ah.attributes, "queued up derived attributes") + + // Call during consolidation. + l2.ExpectPayloadByNumber(refA1.Number, payloadA1, nil) + + emitter.ExpectOnce(engine.PromotePendingSafeEvent{ + Ref: refA1, + Safe: lastInSpan, // last in span becomes safe instantaneously + }) + ah.OnEvent(engine.PendingSafeUpdateEvent{ + PendingSafe: refA0, + Unsafe: refA1, + }) + l2.AssertExpectations(t) + emitter.AssertExpectations(t) + require.NotNil(t, ah.attributes, "still have attributes, processing still unconfirmed") + + ah.OnEvent(engine.PendingSafeUpdateEvent{ + PendingSafe: refA1, + Unsafe: refA1, + }) + emitter.AssertExpectations(t) + require.Nil(t, ah.attributes, "drop when attributes are successful") } t.Run("is last span", func(t *testing.T) { fn(t, true) @@ -321,89 +304,70 @@ func TestAttributesHandler(t *testing.T) { t.Run("pending equals unsafe", func(t *testing.T) { // no consolidation to do, just force next attributes on tip of chain - logger := testlog.Logger(t, log.LevelInfo) - eng := &testutils.MockEngine{} - ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync, rollup.NoopEmitter{}) - ah := NewAttributesHandler(logger, cfg, ec, eng) + l2 := &testutils.MockL2Client{} + emitter := &testutils.MockEmitter{} + ah := NewAttributesHandler(logger, cfg, context.Background(), l2, emitter) - ec.SetUnsafeHead(refA0) - ec.SetSafeHead(refA0) - ec.SetFinalizedHead(refA0) - ec.SetPendingSafeL2Head(refA0) - - defer eng.AssertExpectations(t) + emitter.ExpectOnce(derive.ConfirmReceivedAttributesEvent{}) + emitter.ExpectOnce(engine.PendingSafeRequestEvent{}) + ah.OnEvent(derive.DerivedAttributesEvent{Attributes: attrA1Alt}) + emitter.AssertExpectations(t) + require.NotNil(t, ah.attributes, "queued up derived attributes") // sanity check test setup require.True(t, attrA1Alt.IsLastInSpan, "must be last in span for attributes to become safe") - // process attrA1Alt on top - { - eng.ExpectForkchoiceUpdate(ð.ForkchoiceState{ - HeadBlockHash: payloadA1Alt.ExecutionPayload.ParentHash, // reorg - SafeBlockHash: refA0.Hash, - FinalizedBlockHash: refA0.Hash, - }, attrA1Alt.Attributes, ð.ForkchoiceUpdatedResult{ - PayloadStatus: eth.PayloadStatusV1{Status: eth.ExecutionValid}, - PayloadID: ð.PayloadID{1, 2, 3}, - }, nil) // to build the block - eng.ExpectGetPayload(eth.PayloadID{1, 2, 3}, payloadA1Alt, nil) - eng.ExpectNewPayload(payloadA1Alt.ExecutionPayload, payloadA1Alt.ParentBeaconBlockRoot, - ð.PayloadStatusV1{Status: eth.ExecutionValid}, nil) // to persist the block - eng.ExpectForkchoiceUpdate(ð.ForkchoiceState{ - HeadBlockHash: payloadA1Alt.ExecutionPayload.BlockHash, - SafeBlockHash: payloadA1Alt.ExecutionPayload.BlockHash, // it becomes safe - FinalizedBlockHash: refA0.Hash, - }, nil, ð.ForkchoiceUpdatedResult{ - PayloadStatus: eth.PayloadStatusV1{Status: eth.ExecutionValid}, - PayloadID: nil, - }, nil) // to make it canonical - } - - ah.SetAttributes(attrA1Alt) - - require.True(t, ah.HasAttributes()) - require.NoError(t, ah.Proceed(context.Background()), "insert new block") - require.False(t, ah.HasAttributes()) - - require.Equal(t, refA1Alt, ec.SafeL2Head(), "processing complete") + // attrA1Alt will fit right on top of A0 + emitter.ExpectOnce(engine.ProcessAttributesEvent{Attributes: attrA1Alt}) + ah.OnEvent(engine.PendingSafeUpdateEvent{ + PendingSafe: refA0, + Unsafe: refA0, + }) + l2.AssertExpectations(t) + emitter.AssertExpectations(t) + require.NotNil(t, ah.attributes) + + ah.OnEvent(engine.PendingSafeUpdateEvent{ + PendingSafe: refA1Alt, + Unsafe: refA1Alt, + }) + emitter.AssertExpectations(t) + require.Nil(t, ah.attributes, "clear attributes after successful processing") }) t.Run("pending ahead of unsafe", func(t *testing.T) { // Legacy test case: if attributes fit on top of the pending safe block as expected, - // but if the unsafe block is older, then we can recover by updating the unsafe head. - + // but if the unsafe block is older, then we can recover by resetting. logger := testlog.Logger(t, log.LevelInfo) - eng := &testutils.MockEngine{} - ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync, rollup.NoopEmitter{}) - ah := NewAttributesHandler(logger, cfg, ec, eng) - - ec.SetUnsafeHead(refA0) - ec.SetSafeHead(refA0) - ec.SetFinalizedHead(refA0) - ec.SetPendingSafeL2Head(refA1) - - defer eng.AssertExpectations(t) - - ah.SetAttributes(attrA2) - - require.True(t, ah.HasAttributes()) - require.NoError(t, ah.Proceed(context.Background()), "detect unsafe - pending safe inconsistency") - require.True(t, ah.HasAttributes(), "still need the attributes, after unsafe head is corrected") - - require.Equal(t, refA0, ec.SafeL2Head(), "still same safe head") - require.Equal(t, refA1, ec.PendingSafeL2Head(), "still same pending safe head") - require.Equal(t, refA1, ec.UnsafeL2Head(), "updated unsafe head") + l2 := &testutils.MockL2Client{} + emitter := &testutils.MockEmitter{} + ah := NewAttributesHandler(logger, cfg, context.Background(), l2, emitter) + + emitter.ExpectOnceType("ResetEvent") + ah.OnEvent(engine.PendingSafeUpdateEvent{ + PendingSafe: refA1, + Unsafe: refA0, + }) + emitter.AssertExpectations(t) + l2.AssertExpectations(t) }) t.Run("no attributes", func(t *testing.T) { logger := testlog.Logger(t, log.LevelInfo) - eng := &testutils.MockEngine{} - ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync, rollup.NoopEmitter{}) - ah := NewAttributesHandler(logger, cfg, ec, eng) - defer eng.AssertExpectations(t) - - require.Equal(t, ah.Proceed(context.Background()), io.EOF, "no attributes to process") + l2 := &testutils.MockL2Client{} + emitter := &testutils.MockEmitter{} + ah := NewAttributesHandler(logger, cfg, context.Background(), l2, emitter) + + // If there are no attributes, we expect the pipeline to be requested to generate attributes. + emitter.ExpectOnce(derive.PipelineStepEvent{PendingSafe: refA1}) + ah.OnEvent(engine.PendingSafeUpdateEvent{ + PendingSafe: refA1, + Unsafe: refA1, + }) + // no calls to L2 or emitter when there is nothing to process + l2.AssertExpectations(t) + emitter.AssertExpectations(t) }) } diff --git a/op-node/rollup/derive/deriver.go b/op-node/rollup/derive/deriver.go index 9d65599a5382..69ef4023fbf2 100644 --- a/op-node/rollup/derive/deriver.go +++ b/op-node/rollup/derive/deriver.go @@ -21,6 +21,14 @@ func (d DeriverMoreEvent) String() string { return "deriver-more" } +// ConfirmReceivedAttributesEvent signals that the derivation pipeline may generate new attributes. +// After emitting DerivedAttributesEvent, no new attributes will be generated until a confirmation of reception. +type ConfirmReceivedAttributesEvent struct{} + +func (d ConfirmReceivedAttributesEvent) String() string { + return "confirm-received-attributes" +} + type ConfirmPipelineResetEvent struct{} func (d ConfirmPipelineResetEvent) String() string { @@ -50,6 +58,8 @@ type PipelineDeriver struct { ctx context.Context emitter rollup.EventEmitter + + needAttributesConfirmation bool } func NewPipelineDeriver(ctx context.Context, pipeline *DerivationPipeline, emitter rollup.EventEmitter) *PipelineDeriver { @@ -65,6 +75,11 @@ func (d *PipelineDeriver) OnEvent(ev rollup.Event) { case rollup.ResetEvent: d.pipeline.Reset() case PipelineStepEvent: + // Don't generate attributes if there are already attributes in-flight + if d.needAttributesConfirmation { + d.pipeline.log.Debug("Previously sent attributes are unconfirmed to be received") + return + } d.pipeline.log.Trace("Derivation pipeline step", "onto_origin", d.pipeline.Origin()) attrib, err := d.pipeline.Step(d.ctx, x.PendingSafe) if err == io.EOF { @@ -87,6 +102,7 @@ func (d *PipelineDeriver) OnEvent(ev rollup.Event) { d.emitter.Emit(rollup.EngineTemporaryErrorEvent{Err: err}) } else { if attrib != nil { + d.needAttributesConfirmation = true d.emitter.Emit(DerivedAttributesEvent{Attributes: attrib}) } else { d.emitter.Emit(DeriverMoreEvent{}) // continue with the next step if we can @@ -94,5 +110,7 @@ func (d *PipelineDeriver) OnEvent(ev rollup.Event) { } case ConfirmPipelineResetEvent: d.pipeline.ConfirmEngineReset() + case ConfirmReceivedAttributesEvent: + d.needAttributesConfirmation = false } } diff --git a/op-node/rollup/derive/plasma_data_source.go b/op-node/rollup/derive/plasma_data_source.go index e0b94d412b29..19beb145999b 100644 --- a/op-node/rollup/derive/plasma_data_source.go +++ b/op-node/rollup/derive/plasma_data_source.go @@ -83,13 +83,13 @@ func (s *PlasmaDataSource) Next(ctx context.Context) (eth.Data, error) { // skip the input return s.Next(ctx) } else if errors.Is(err, plasma.ErrMissingPastWindow) { - return nil, NewCriticalError(fmt.Errorf("data for comm %x not available: %w", s.comm, err)) + return nil, NewCriticalError(fmt.Errorf("data for comm %s not available: %w", s.comm, err)) } else if errors.Is(err, plasma.ErrPendingChallenge) { // continue stepping without slowing down. return nil, NotEnoughData } else if err != nil { // return temporary error so we can keep retrying. - return nil, NewTemporaryError(fmt.Errorf("failed to fetch input data with comm %x from da service: %w", s.comm, err)) + return nil, NewTemporaryError(fmt.Errorf("failed to fetch input data with comm %s from da service: %w", s.comm, err)) } // inputs are limited to a max size to ensure they can be challenged in the DA contract. if s.comm.CommitmentType() == plasma.Keccak256CommitmentType && len(data) > plasma.MaxInputSize { diff --git a/op-node/rollup/driver/driver.go b/op-node/rollup/driver/driver.go index d7d0fbc7a53d..936ce0ca5833 100644 --- a/op-node/rollup/driver/driver.go +++ b/op-node/rollup/driver/driver.go @@ -191,7 +191,7 @@ func NewDriver( finalizer = finality.NewFinalizer(log, cfg, l1, ec) } - attributesHandler := attributes.NewAttributesHandler(log, cfg, ec, l2) + attributesHandler := attributes.NewAttributesHandler(log, cfg, driverCtx, l2, synchronousEvents) derivationPipeline := derive.NewDerivationPipeline(log, cfg, verifConfDepth, l1Blobs, plasma, l2, metrics) pipelineDeriver := derive.NewPipelineDeriver(driverCtx, derivationPipeline, synchronousEvents) attrBuilder := derive.NewFetchingAttributesBuilder(cfg, l1, l2) @@ -200,20 +200,19 @@ func NewDriver( asyncGossiper := async.NewAsyncGossiper(driverCtx, network, log, metrics) syncDeriver := &SyncDeriver{ - Derivation: derivationPipeline, - Finalizer: finalizer, - AttributesHandler: attributesHandler, - SafeHeadNotifs: safeHeadListener, - CLSync: clSync, - Engine: ec, - SyncCfg: syncCfg, - Config: cfg, - L1: l1, - L2: l2, - Emitter: synchronousEvents, - Log: log, - Ctx: driverCtx, - Drain: synchronousEvents.Drain, + Derivation: derivationPipeline, + Finalizer: finalizer, + SafeHeadNotifs: safeHeadListener, + CLSync: clSync, + Engine: ec, + SyncCfg: syncCfg, + Config: cfg, + L1: l1, + L2: l2, + Emitter: synchronousEvents, + Log: log, + Ctx: driverCtx, + Drain: synchronousEvents.Drain, } engDeriv := engine.NewEngDeriver(log, driverCtx, cfg, ec, synchronousEvents) schedDeriv := NewStepSchedulingDeriver(log, synchronousEvents) @@ -254,6 +253,7 @@ func NewDriver( driver, clSync, pipelineDeriver, + attributesHandler, } return driver diff --git a/op-node/rollup/driver/state.go b/op-node/rollup/driver/state.go index 0195c46d5c61..2d85708b23ff 100644 --- a/op-node/rollup/driver/state.go +++ b/op-node/rollup/driver/state.go @@ -6,7 +6,6 @@ import ( "encoding/json" "errors" "fmt" - "io" gosync "sync" "time" @@ -397,8 +396,6 @@ type SyncDeriver struct { Finalizer Finalizer - AttributesHandler AttributesHandler - SafeHeadNotifs rollup.SafeHeadListener // notified when safe head is updated lastNotifiedSafeHead eth.L2BlockRef @@ -433,6 +430,10 @@ func (s *SyncDeriver) OnEvent(ev rollup.Event) { s.onResetEvent(x) case rollup.EngineTemporaryErrorEvent: s.Log.Warn("Derivation process temporary error", "err", x.Err) + + // Make sure that for any temporarily failed attributes we retry processing. + s.Emitter.Emit(engine.PendingSafeRequestEvent{}) + s.Emitter.Emit(StepReqEvent{}) case engine.EngineResetConfirmedEvent: s.onEngineConfirmedReset(x) @@ -444,8 +445,6 @@ func (s *SyncDeriver) OnEvent(ev rollup.Event) { // If there is more data to process, // continue derivation quickly s.Emitter.Emit(StepReqEvent{ResetBackoff: true}) - case derive.DerivedAttributesEvent: - s.AttributesHandler.SetAttributes(x.Attributes) } } @@ -534,11 +533,6 @@ func (s *SyncDeriver) SyncStep(ctx context.Context) error { // Any now processed forkchoice updates will trigger CL-sync payload processing, if any payload is queued up. - // Try safe attributes now. - if err := s.AttributesHandler.Proceed(ctx); err != io.EOF { - // EOF error means we can't process the next attributes. Then we should derive the next attributes. - return err - } derivationOrigin := s.Derivation.Origin() if s.SafeHeadNotifs != nil && s.SafeHeadNotifs.Enabled() && s.Derivation.DerivationReady() && s.lastNotifiedSafeHead != s.Engine.SafeL2Head() { @@ -558,7 +552,13 @@ func (s *SyncDeriver) SyncStep(ctx context.Context) error { return fmt.Errorf("finalizer OnDerivationL1End error: %w", err) } - s.Emitter.Emit(derive.PipelineStepEvent{PendingSafe: s.Engine.PendingSafeL2Head()}) + // Since we don't force attributes to be processed at this point, + // we cannot safely directly trigger the derivation, as that may generate new attributes that + // conflict with what attributes have not been applied yet. + // Instead, we request the engine to repeat where its pending-safe head is at. + // Upon the pending-safe signal the attributes deriver can then ask the pipeline + // to generate new attributes, if no attributes are known already. + s.Emitter.Emit(engine.PendingSafeRequestEvent{}) return nil } diff --git a/op-node/rollup/synchronous.go b/op-node/rollup/synchronous.go index 2fd85a417863..68943381e24e 100644 --- a/op-node/rollup/synchronous.go +++ b/op-node/rollup/synchronous.go @@ -2,6 +2,7 @@ package rollup import ( "context" + "io" "sync" "github.com/ethereum/go-ethereum/log" @@ -73,4 +74,30 @@ func (s *SynchronousEvents) Drain() error { } } +func (s *SynchronousEvents) DrainUntil(fn func(ev Event) bool, excl bool) error { + for { + if s.ctx.Err() != nil { + return s.ctx.Err() + } + if len(s.events) == 0 { + return io.EOF + } + + s.evLock.Lock() + first := s.events[0] + stop := fn(first) + if excl && stop { + s.evLock.Unlock() + return nil + } + s.events = s.events[1:] + s.evLock.Unlock() + + s.root.OnEvent(first) + if stop { + return nil + } + } +} + var _ EventEmitter = (*SynchronousEvents)(nil) diff --git a/op-program/client/driver/program.go b/op-program/client/driver/program.go index dccb4c0a3753..84d44298608d 100644 --- a/op-program/client/driver/program.go +++ b/op-program/client/driver/program.go @@ -44,6 +44,11 @@ func (d *ProgramDeriver) OnEvent(ev rollup.Event) { case derive.DeriverMoreEvent: d.Emitter.Emit(engine.PendingSafeRequestEvent{}) case derive.DerivedAttributesEvent: + // Allow new attributes to be generated. + // We will process the current attributes synchronously, + // triggering a single PendingSafeUpdateEvent or InvalidPayloadAttributesEvent, + // to continue derivation from. + d.Emitter.Emit(derive.ConfirmReceivedAttributesEvent{}) // No need to queue the attributes, since there is no unsafe chain to consolidate against, // and no temporary-error retry to perform on block processing. d.Emitter.Emit(engine.ProcessAttributesEvent{Attributes: x.Attributes}) diff --git a/op-program/client/driver/program_test.go b/op-program/client/driver/program_test.go index d231193d386d..186832286f62 100644 --- a/op-program/client/driver/program_test.go +++ b/op-program/client/driver/program_test.go @@ -63,6 +63,7 @@ func TestProgramDeriver(t *testing.T) { t.Run("derived attributes", func(t *testing.T) { p, m := newProgram(t, 1000) attrib := &derive.AttributesWithParent{Parent: eth.L2BlockRef{Number: 123}} + m.ExpectOnce(derive.ConfirmReceivedAttributesEvent{}) m.ExpectOnce(engine.ProcessAttributesEvent{Attributes: attrib}) p.OnEvent(derive.DerivedAttributesEvent{Attributes: attrib}) m.AssertExpectations(t) diff --git a/op-service/testutils/mock_emitter.go b/op-service/testutils/mock_emitter.go index e808c651053e..ae329d2064e1 100644 --- a/op-service/testutils/mock_emitter.go +++ b/op-service/testutils/mock_emitter.go @@ -18,6 +18,10 @@ func (m *MockEmitter) ExpectOnce(expected rollup.Event) { m.Mock.On("Emit", expected).Once() } +func (m *MockEmitter) ExpectOnceType(typ string) { + m.Mock.On("Emit", mock.AnythingOfType(typ)).Once() +} + func (m *MockEmitter) AssertExpectations(t mock.TestingT) { m.Mock.AssertExpectations(t) } From 31653e5e51c22a239dad1a682b931e696e1539c9 Mon Sep 17 00:00:00 2001 From: protolambda Date: Sun, 23 Jun 2024 17:15:27 -0600 Subject: [PATCH 091/141] op-node: change finalizer to use events (#10972) --- op-e2e/actions/l2_batcher_test.go | 3 +- op-e2e/actions/l2_proposer_test.go | 1 + op-e2e/actions/l2_verifier.go | 11 +- op-node/rollup/attributes/attributes.go | 5 +- op-node/rollup/attributes/attributes_test.go | 13 +- op-node/rollup/derive/deriver.go | 8 +- op-node/rollup/driver/driver.go | 8 +- op-node/rollup/driver/state.go | 52 ++-- op-node/rollup/engine/events.go | 38 ++- op-node/rollup/events.go | 15 + op-node/rollup/finality/finalizer.go | 106 +++++-- op-node/rollup/finality/finalizer_test.go | 284 ++++++++++++------- op-node/rollup/finality/plasma.go | 17 +- op-node/rollup/finality/plasma_test.go | 75 +++-- op-program/client/driver/program.go | 3 + op-program/client/driver/program_test.go | 12 +- op-service/testutils/mock_emitter.go | 12 + 17 files changed, 449 insertions(+), 214 deletions(-) diff --git a/op-e2e/actions/l2_batcher_test.go b/op-e2e/actions/l2_batcher_test.go index 3a137ce992af..2c285c1e28a2 100644 --- a/op-e2e/actions/l2_batcher_test.go +++ b/op-e2e/actions/l2_batcher_test.go @@ -17,6 +17,7 @@ import ( batcherFlags "github.com/ethereum-optimism/optimism/op-batcher/flags" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-node/rollup/finality" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/testlog" @@ -246,7 +247,7 @@ func L2Finalization(gt *testing.T, deltaTimeOffset *hexutil.Uint64) { // If we get this false signal, we shouldn't finalize the L2 chain. altBlock4 := sequencer.SyncStatus().SafeL1 altBlock4.Hash = common.HexToHash("0xdead") - sequencer.finalizer.Finalize(t.Ctx(), altBlock4) + sequencer.synchronousEvents.Emit(finality.FinalizeL1Event{FinalizedL1: altBlock4}) sequencer.ActL2PipelineFull(t) require.Equal(t, uint64(3), sequencer.SyncStatus().FinalizedL1.Number) require.Equal(t, heightToSubmit, sequencer.SyncStatus().FinalizedL2.Number, "unknown/bad finalized L1 blocks are ignored") diff --git a/op-e2e/actions/l2_proposer_test.go b/op-e2e/actions/l2_proposer_test.go index 3de913f8e50a..ba1f1d3640c0 100644 --- a/op-e2e/actions/l2_proposer_test.go +++ b/op-e2e/actions/l2_proposer_test.go @@ -96,6 +96,7 @@ func RunProposerTest(gt *testing.T, deltaTimeOffset *hexutil.Uint64) { sequencer.ActL2PipelineFull(t) sequencer.ActL1SafeSignal(t) sequencer.ActL1FinalizedSignal(t) + sequencer.ActL2PipelineFull(t) require.Equal(t, sequencer.SyncStatus().UnsafeL2, sequencer.SyncStatus().FinalizedL2) require.True(t, proposer.CanPropose(t)) diff --git a/op-e2e/actions/l2_verifier.go b/op-e2e/actions/l2_verifier.go index e1363394b878..f8e54bf29e76 100644 --- a/op-e2e/actions/l2_verifier.go +++ b/op-e2e/actions/l2_verifier.go @@ -98,9 +98,9 @@ func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc deri var finalizer driver.Finalizer if cfg.PlasmaEnabled() { - finalizer = finality.NewPlasmaFinalizer(log, cfg, l1, ec, plasmaSrc) + finalizer = finality.NewPlasmaFinalizer(ctx, log, cfg, l1, synchronousEvents, plasmaSrc) } else { - finalizer = finality.NewFinalizer(log, cfg, l1, ec) + finalizer = finality.NewFinalizer(ctx, log, cfg, l1, synchronousEvents) } attributesHandler := attributes.NewAttributesHandler(log, cfg, ctx, eng, synchronousEvents) @@ -153,6 +153,7 @@ func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc deri clSync, pipelineDeriver, attributesHandler, + finalizer, } t.Cleanup(rollupNode.rpc.Stop) @@ -288,13 +289,15 @@ func (s *L2Verifier) ActL1FinalizedSignal(t Testing) { finalized, err := s.l1.L1BlockRefByLabel(t.Ctx(), eth.Finalized) require.NoError(t, err) s.l1State.HandleNewL1FinalizedBlock(finalized) - s.finalizer.Finalize(t.Ctx(), finalized) + s.synchronousEvents.Emit(finality.FinalizeL1Event{FinalizedL1: finalized}) } func (s *L2Verifier) OnEvent(ev rollup.Event) { switch x := ev.(type) { + case rollup.L1TemporaryErrorEvent: + s.log.Warn("L1 temporary error", "err", x.Err) case rollup.EngineTemporaryErrorEvent: - s.log.Warn("Derivation process temporary error", "err", x.Err) + s.log.Warn("Engine temporary error", "err", x.Err) if errors.Is(x.Err, sync.WrongChainErr) { // action-tests don't back off on temporary errors. Avoid a bad genesis setup from looping. panic(fmt.Errorf("genesis setup issue: %w", x.Err)) } diff --git a/op-node/rollup/attributes/attributes.go b/op-node/rollup/attributes/attributes.go index 43d6000c1225..99bd123598ac 100644 --- a/op-node/rollup/attributes/attributes.go +++ b/op-node/rollup/attributes/attributes.go @@ -147,8 +147,9 @@ func (eq *AttributesHandler) consolidateNextSafeAttributes(attributes *derive.At return } eq.emitter.Emit(engine.PromotePendingSafeEvent{ - Ref: ref, - Safe: attributes.IsLastInSpan, + Ref: ref, + Safe: attributes.IsLastInSpan, + DerivedFrom: attributes.DerivedFrom, }) } diff --git a/op-node/rollup/attributes/attributes_test.go b/op-node/rollup/attributes/attributes_test.go index 5a9359c1fcfd..1833604ff317 100644 --- a/op-node/rollup/attributes/attributes_test.go +++ b/op-node/rollup/attributes/attributes_test.go @@ -25,6 +25,13 @@ func TestAttributesHandler(t *testing.T) { rng := rand.New(rand.NewSource(1234)) refA := testutils.RandomBlockRef(rng) + refB := eth.L1BlockRef{ + Hash: testutils.RandomHash(rng), + Number: refA.Number + 1, + ParentHash: refA.Hash, + Time: refA.Time + 12, + } + aL1Info := &testutils.MockBlockInfo{ InfoParentHash: refA.ParentHash, InfoNum: refA.Number, @@ -263,6 +270,7 @@ func TestAttributesHandler(t *testing.T) { Attributes: attrA1.Attributes, // attributes will match, passing consolidation Parent: attrA1.Parent, IsLastInSpan: lastInSpan, + DerivedFrom: refB, } emitter.ExpectOnce(derive.ConfirmReceivedAttributesEvent{}) emitter.ExpectOnce(engine.PendingSafeRequestEvent{}) @@ -274,8 +282,9 @@ func TestAttributesHandler(t *testing.T) { l2.ExpectPayloadByNumber(refA1.Number, payloadA1, nil) emitter.ExpectOnce(engine.PromotePendingSafeEvent{ - Ref: refA1, - Safe: lastInSpan, // last in span becomes safe instantaneously + Ref: refA1, + Safe: lastInSpan, // last in span becomes safe instantaneously + DerivedFrom: refB, }) ah.OnEvent(engine.PendingSafeUpdateEvent{ PendingSafe: refA0, diff --git a/op-node/rollup/derive/deriver.go b/op-node/rollup/derive/deriver.go index 69ef4023fbf2..da3a71577725 100644 --- a/op-node/rollup/derive/deriver.go +++ b/op-node/rollup/derive/deriver.go @@ -9,7 +9,9 @@ import ( "github.com/ethereum-optimism/optimism/op-service/eth" ) -type DeriverIdleEvent struct{} +type DeriverIdleEvent struct { + Origin eth.L1BlockRef +} func (d DeriverIdleEvent) String() string { return "derivation-idle" @@ -84,10 +86,10 @@ func (d *PipelineDeriver) OnEvent(ev rollup.Event) { attrib, err := d.pipeline.Step(d.ctx, x.PendingSafe) if err == io.EOF { d.pipeline.log.Debug("Derivation process went idle", "progress", d.pipeline.Origin(), "err", err) - d.emitter.Emit(DeriverIdleEvent{}) + d.emitter.Emit(DeriverIdleEvent{Origin: d.pipeline.Origin()}) } else if err != nil && errors.Is(err, EngineELSyncing) { d.pipeline.log.Debug("Derivation process went idle because the engine is syncing", "progress", d.pipeline.Origin(), "err", err) - d.emitter.Emit(DeriverIdleEvent{}) + d.emitter.Emit(DeriverIdleEvent{Origin: d.pipeline.Origin()}) } else if err != nil && errors.Is(err, ErrReset) { d.emitter.Emit(rollup.ResetEvent{Err: err}) } else if err != nil && errors.Is(err, ErrTemporary) { diff --git a/op-node/rollup/driver/driver.go b/op-node/rollup/driver/driver.go index 936ce0ca5833..d65f996c4e5b 100644 --- a/op-node/rollup/driver/driver.go +++ b/op-node/rollup/driver/driver.go @@ -91,9 +91,8 @@ type AttributesHandler interface { } type Finalizer interface { - Finalize(ctx context.Context, ref eth.L1BlockRef) FinalizedL1() eth.L1BlockRef - engine.FinalizerHooks + rollup.Deriver } type PlasmaIface interface { @@ -186,9 +185,9 @@ func NewDriver( var finalizer Finalizer if cfg.PlasmaEnabled() { - finalizer = finality.NewPlasmaFinalizer(log, cfg, l1, ec, plasma) + finalizer = finality.NewPlasmaFinalizer(driverCtx, log, cfg, l1, synchronousEvents, plasma) } else { - finalizer = finality.NewFinalizer(log, cfg, l1, ec) + finalizer = finality.NewFinalizer(driverCtx, log, cfg, l1, synchronousEvents) } attributesHandler := attributes.NewAttributesHandler(log, cfg, driverCtx, l2, synchronousEvents) @@ -254,6 +253,7 @@ func NewDriver( clSync, pipelineDeriver, attributesHandler, + finalizer, } return driver diff --git a/op-node/rollup/driver/state.go b/op-node/rollup/driver/state.go index 2d85708b23ff..3ac7375f803f 100644 --- a/op-node/rollup/driver/state.go +++ b/op-node/rollup/driver/state.go @@ -18,6 +18,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup/conductor" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/engine" + "github.com/ethereum-optimism/optimism/op-node/rollup/finality" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" "github.com/ethereum-optimism/optimism/op-service/eth" ) @@ -312,9 +313,7 @@ func (s *Driver) eventLoop() { // no step, justified L1 information does not do anything for L2 derivation or status case newL1Finalized := <-s.l1FinalizedSig: s.l1State.HandleNewL1FinalizedBlock(newL1Finalized) - ctx, cancel := context.WithTimeout(s.driverCtx, time.Second*5) - s.Finalizer.Finalize(ctx, newL1Finalized) - cancel() + s.Emit(finality.FinalizeL1Event{FinalizedL1: newL1Finalized}) reqStep() // we may be able to mark more L2 data as finalized now case <-s.sched.NextDelayedStep(): s.Emit(StepAttemptEvent{}) @@ -396,8 +395,7 @@ type SyncDeriver struct { Finalizer Finalizer - SafeHeadNotifs rollup.SafeHeadListener // notified when safe head is updated - lastNotifiedSafeHead eth.L2BlockRef + SafeHeadNotifs rollup.SafeHeadListener // notified when safe head is updated CLSync CLSync @@ -428,8 +426,11 @@ func (s *SyncDeriver) OnEvent(ev rollup.Event) { s.onStepEvent() case rollup.ResetEvent: s.onResetEvent(x) + case rollup.L1TemporaryErrorEvent: + s.Log.Warn("L1 temporary error", "err", x.Err) + s.Emitter.Emit(StepReqEvent{}) case rollup.EngineTemporaryErrorEvent: - s.Log.Warn("Derivation process temporary error", "err", x.Err) + s.Log.Warn("Engine temporary error", "err", x.Err) // Make sure that for any temporarily failed attributes we retry processing. s.Emitter.Emit(engine.PendingSafeRequestEvent{}) @@ -445,6 +446,19 @@ func (s *SyncDeriver) OnEvent(ev rollup.Event) { // If there is more data to process, // continue derivation quickly s.Emitter.Emit(StepReqEvent{ResetBackoff: true}) + case engine.SafeDerivedEvent: + s.onSafeDerivedBlock(x) + } +} + +func (s *SyncDeriver) onSafeDerivedBlock(x engine.SafeDerivedEvent) { + if s.SafeHeadNotifs != nil && s.SafeHeadNotifs.Enabled() { + if err := s.SafeHeadNotifs.SafeHeadUpdated(x.Safe, x.DerivedFrom.ID()); err != nil { + // At this point our state is in a potentially inconsistent state as we've updated the safe head + // in the execution client but failed to post process it. Reset the pipeline so the safe head rolls back + // a little (it always rolls back at least 1 block) and then it will retry storing the entry + s.Emitter.Emit(rollup.ResetEvent{Err: fmt.Errorf("safe head notifications failed: %w", err)}) + } } } @@ -457,7 +471,7 @@ func (s *SyncDeriver) onEngineConfirmedReset(x engine.EngineResetConfirmedEvent) s.Log.Error("Failed to warn safe-head notifier of safe-head reset", "safe", x.Safe) return } - if s.SafeHeadNotifs.Enabled() && x.Safe.Number == s.Config.Genesis.L2.Number && x.Safe.Hash == s.Config.Genesis.L2.Hash { + if s.SafeHeadNotifs.Enabled() && x.Safe.ID() == s.Config.Genesis.L2 { // The rollup genesis block is always safe by definition. So if the pipeline resets this far back we know // we will process all safe head updates and can record genesis as always safe from L1 genesis. // Note that it is not safe to use cfg.Genesis.L1 here as it is the block immediately before the L2 genesis @@ -483,7 +497,7 @@ func (s *SyncDeriver) onStepEvent() { // where some things are triggered through events, and some through this synchronous step function. // We just translate the results into their equivalent events, // to merge the error-handling with that of the new event-based system. - err := s.SyncStep(s.Ctx) + err := s.SyncStep() if err != nil && errors.Is(err, derive.EngineELSyncing) { s.Log.Debug("Derivation process went idle because the engine is syncing", "unsafe_head", s.Engine.UnsafeL2Head(), "err", err) s.Emitter.Emit(ResetStepBackoffEvent{}) @@ -504,14 +518,13 @@ func (s *SyncDeriver) onStepEvent() { func (s *SyncDeriver) onResetEvent(x rollup.ResetEvent) { // If the system corrupts, e.g. due to a reorg, simply reset it s.Log.Warn("Deriver system is resetting", "err", x.Err) - s.Finalizer.Reset() s.Emitter.Emit(StepReqEvent{}) s.Emitter.Emit(engine.ResetEngineRequestEvent{}) } // SyncStep performs the sequence of encapsulated syncing steps. // Warning: this sequence will be broken apart as outlined in op-node derivers design doc. -func (s *SyncDeriver) SyncStep(ctx context.Context) error { +func (s *SyncDeriver) SyncStep() error { if err := s.Drain(); err != nil { return err } @@ -533,25 +546,6 @@ func (s *SyncDeriver) SyncStep(ctx context.Context) error { // Any now processed forkchoice updates will trigger CL-sync payload processing, if any payload is queued up. - derivationOrigin := s.Derivation.Origin() - if s.SafeHeadNotifs != nil && s.SafeHeadNotifs.Enabled() && s.Derivation.DerivationReady() && - s.lastNotifiedSafeHead != s.Engine.SafeL2Head() { - s.lastNotifiedSafeHead = s.Engine.SafeL2Head() - // make sure we track the last L2 safe head for every new L1 block - if err := s.SafeHeadNotifs.SafeHeadUpdated(s.lastNotifiedSafeHead, derivationOrigin.ID()); err != nil { - // At this point our state is in a potentially inconsistent state as we've updated the safe head - // in the execution client but failed to post process it. Reset the pipeline so the safe head rolls back - // a little (it always rolls back at least 1 block) and then it will retry storing the entry - return derive.NewResetError(fmt.Errorf("safe head notifications failed: %w", err)) - } - } - s.Finalizer.PostProcessSafeL2(s.Engine.SafeL2Head(), derivationOrigin) - - // try to finalize the L2 blocks we have synced so far (no-op if L1 finality is behind) - if err := s.Finalizer.OnDerivationL1End(ctx, derivationOrigin); err != nil { - return fmt.Errorf("finalizer OnDerivationL1End error: %w", err) - } - // Since we don't force attributes to be processed at this point, // we cannot safely directly trigger the derivation, as that may generate new attributes that // conflict with what attributes have not been applied yet. diff --git a/op-node/rollup/engine/events.go b/op-node/rollup/engine/events.go index 10cd8369fe35..4c2320310a86 100644 --- a/op-node/rollup/engine/events.go +++ b/op-node/rollup/engine/events.go @@ -62,14 +62,25 @@ func (ev PendingSafeUpdateEvent) String() string { // PromotePendingSafeEvent signals that a block can be marked as pending-safe, and/or safe. type PromotePendingSafeEvent struct { - Ref eth.L2BlockRef - Safe bool + Ref eth.L2BlockRef + Safe bool + DerivedFrom eth.L1BlockRef } func (ev PromotePendingSafeEvent) String() string { return "promote-pending-safe" } +// SafeDerivedEvent signals that a block was determined to be safe, and derived from the given L1 block +type SafeDerivedEvent struct { + Safe eth.L2BlockRef + DerivedFrom eth.L1BlockRef +} + +func (ev SafeDerivedEvent) String() string { + return "safe-derived" +} + type ProcessAttributesEvent struct { Attributes *derive.AttributesWithParent } @@ -123,6 +134,15 @@ func (ev EngineResetConfirmedEvent) String() string { return "engine-reset-confirmed" } +// PromoteFinalizedEvent signals that a block can be marked as finalized. +type PromoteFinalizedEvent struct { + Ref eth.L2BlockRef +} + +func (ev PromoteFinalizedEvent) String() string { + return "promote-finalized" +} + type EngDeriver struct { log log.Logger cfg *rollup.Config @@ -217,7 +237,7 @@ func (d *EngDeriver) OnEvent(ev rollup.Event) { log.Debug("Reset of Engine is completed", "safeHead", x.Safe, "unsafe", x.Unsafe, "safe_timestamp", x.Safe.Time, "unsafe_timestamp", x.Unsafe.Time) - d.emitter.Emit(EngineResetConfirmedEvent{}) + d.emitter.Emit(EngineResetConfirmedEvent(x)) case ProcessAttributesEvent: d.onForceNextSafeAttributes(x.Attributes) case PendingSafeRequestEvent: @@ -233,7 +253,18 @@ func (d *EngDeriver) OnEvent(ev rollup.Event) { } if x.Safe && x.Ref.Number > d.ec.SafeL2Head().Number { d.ec.SetSafeHead(x.Ref) + d.emitter.Emit(SafeDerivedEvent{Safe: x.Ref, DerivedFrom: x.DerivedFrom}) + } + case PromoteFinalizedEvent: + if x.Ref.Number < d.ec.Finalized().Number { + d.log.Error("Cannot rewind finality,", "ref", x.Ref, "finalized", d.ec.Finalized()) + return + } + if x.Ref.Number > d.ec.SafeL2Head().Number { + d.log.Error("Block must be safe before it can be finalized", "ref", x.Ref, "safe", d.ec.SafeL2Head()) + return } + d.ec.SetFinalizedHead(x.Ref) } } @@ -301,6 +332,7 @@ func (eq *EngDeriver) onForceNextSafeAttributes(attributes *derive.AttributesWit eq.ec.SetPendingSafeL2Head(ref) if attributes.IsLastInSpan { eq.ec.SetSafeHead(ref) + eq.emitter.Emit(SafeDerivedEvent{Safe: ref, DerivedFrom: attributes.DerivedFrom}) } eq.emitter.Emit(PendingSafeUpdateEvent{ PendingSafe: eq.ec.PendingSafeL2Head(), diff --git a/op-node/rollup/events.go b/op-node/rollup/events.go index 037c68dbacc8..29a6acdd1417 100644 --- a/op-node/rollup/events.go +++ b/op-node/rollup/events.go @@ -20,6 +20,21 @@ func (fn EmitterFunc) Emit(ev Event) { fn(ev) } +// L1TemporaryErrorEvent identifies a temporary issue with the L1 data. +type L1TemporaryErrorEvent struct { + Err error +} + +var _ Event = L1TemporaryErrorEvent{} + +func (ev L1TemporaryErrorEvent) String() string { + return "l1-temporary-error" +} + +// EngineTemporaryErrorEvent identifies a temporary processing issue. +// It applies to both L1 and L2 data, often inter-related. +// This scope will be reduced over time, to only capture L2-engine specific temporary errors. +// See L1TemporaryErrorEvent for L1 related temporary errors. type EngineTemporaryErrorEvent struct { Err error } diff --git a/op-node/rollup/finality/finalizer.go b/op-node/rollup/finality/finalizer.go index 78c91fd17b18..483110083d46 100644 --- a/op-node/rollup/finality/finalizer.go +++ b/op-node/rollup/finality/finalizer.go @@ -4,11 +4,13 @@ import ( "context" "fmt" "sync" + "time" "github.com/ethereum/go-ethereum/log" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-service/eth" ) @@ -68,10 +70,17 @@ type Finalizer struct { log log.Logger + ctx context.Context + + emitter rollup.EventEmitter + // finalizedL1 is the currently perceived finalized L1 block. // This may be ahead of the current traversed origin when syncing. finalizedL1 eth.L1BlockRef + // lastFinalizedL2 maintains how far we finalized, so we don't have to emit re-attempts. + lastFinalizedL2 eth.L2BlockRef + // triedFinalizeAt tracks at which L1 block number we last tried to finalize during sync. triedFinalizeAt uint64 @@ -82,20 +91,19 @@ type Finalizer struct { finalityLookback uint64 l1Fetcher FinalizerL1Interface - - ec FinalizerEngine } -func NewFinalizer(log log.Logger, cfg *rollup.Config, l1Fetcher FinalizerL1Interface, ec FinalizerEngine) *Finalizer { +func NewFinalizer(ctx context.Context, log log.Logger, cfg *rollup.Config, l1Fetcher FinalizerL1Interface, emitter rollup.EventEmitter) *Finalizer { lookback := calcFinalityLookback(cfg) return &Finalizer{ + ctx: ctx, log: log, finalizedL1: eth.L1BlockRef{}, triedFinalizeAt: 0, finalityData: make([]FinalityData, 0, lookback), finalityLookback: lookback, l1Fetcher: l1Fetcher, - ec: ec, + emitter: emitter, } } @@ -108,8 +116,39 @@ func (fi *Finalizer) FinalizedL1() (out eth.L1BlockRef) { return } -// Finalize applies a L1 finality signal, without any fork-choice or L2 state changes. -func (fi *Finalizer) Finalize(ctx context.Context, l1Origin eth.L1BlockRef) { +type FinalizeL1Event struct { + FinalizedL1 eth.L1BlockRef +} + +func (ev FinalizeL1Event) String() string { + return "finalized-l1" +} + +type TryFinalizeEvent struct{} + +func (ev TryFinalizeEvent) String() string { + return "try-finalize" +} + +func (fi *Finalizer) OnEvent(ev rollup.Event) { + switch x := ev.(type) { + case FinalizeL1Event: + fi.onL1Finalized(x.FinalizedL1) + case engine.SafeDerivedEvent: + fi.onDerivedSafeBlock(x.Safe, x.DerivedFrom) + case derive.DeriverIdleEvent: + fi.onDerivationIdle(x.Origin) + case rollup.ResetEvent: + fi.onReset() + case TryFinalizeEvent: + fi.tryFinalize() + case engine.ForkchoiceUpdateEvent: + fi.lastFinalizedL2 = x.FinalizedL2Head + } +} + +// onL1Finalized applies a L1 finality signal +func (fi *Finalizer) onL1Finalized(l1Origin eth.L1BlockRef) { fi.mu.Lock() defer fi.mu.Unlock() prevFinalizedL1 := fi.finalizedL1 @@ -127,13 +166,11 @@ func (fi *Finalizer) Finalize(ctx context.Context, l1Origin eth.L1BlockRef) { fi.finalizedL1 = l1Origin } - // remnant of finality in EngineQueue: the finalization work does not inherit a context from the caller. - if err := fi.tryFinalize(ctx); err != nil { - fi.log.Warn("received L1 finalization signal, but was unable to determine and apply L2 finality", "err", err) - } + // when the L1 change we can suggest to try to finalize, as the pre-condition for L2 finality has now changed + fi.emitter.Emit(TryFinalizeEvent{}) } -// OnDerivationL1End is called when a L1 block has been fully exhausted (i.e. no more L2 blocks to derive from). +// onDerivationIdle is called when the pipeline is exhausted of new data (i.e. no more L2 blocks to derive from). // // Since finality applies to all L2 blocks fully derived from the same block, // it optimal to only check after the derivation from the L1 block has been exhausted. @@ -141,24 +178,27 @@ func (fi *Finalizer) Finalize(ctx context.Context, l1Origin eth.L1BlockRef) { // This will look at what has been buffered so far, // sanity-check we are on the finalizing L1 chain, // and finalize any L2 blocks that were fully derived from known finalized L1 blocks. -func (fi *Finalizer) OnDerivationL1End(ctx context.Context, derivedFrom eth.L1BlockRef) error { +func (fi *Finalizer) onDerivationIdle(derivedFrom eth.L1BlockRef) { fi.mu.Lock() defer fi.mu.Unlock() if fi.finalizedL1 == (eth.L1BlockRef{}) { - return nil // if no L1 information is finalized yet, then skip this + return // if no L1 information is finalized yet, then skip this } // If we recently tried finalizing, then don't try again just yet, but traverse more of L1 first. if fi.triedFinalizeAt != 0 && derivedFrom.Number <= fi.triedFinalizeAt+finalityDelay { - return nil + return } - fi.log.Info("processing L1 finality information", "l1_finalized", fi.finalizedL1, "derived_from", derivedFrom, "previous", fi.triedFinalizeAt) + fi.log.Debug("processing L1 finality information", "l1_finalized", fi.finalizedL1, "derived_from", derivedFrom, "previous", fi.triedFinalizeAt) fi.triedFinalizeAt = derivedFrom.Number - return fi.tryFinalize(ctx) + fi.emitter.Emit(TryFinalizeEvent{}) } -func (fi *Finalizer) tryFinalize(ctx context.Context) error { - // default to keep the same finalized block - finalizedL2 := fi.ec.Finalized() +func (fi *Finalizer) tryFinalize() { + fi.mu.Lock() + defer fi.mu.Unlock() + + // overwritten if we finalize + finalizedL2 := fi.lastFinalizedL2 // may be zeroed if nothing was finalized since startup. var finalizedDerivedFrom eth.BlockID // go through the latest inclusion data, and find the last L2 block that was derived from a finalized L1 block for _, fd := range fi.finalityData { @@ -169,37 +209,41 @@ func (fi *Finalizer) tryFinalize(ctx context.Context) error { } } if finalizedDerivedFrom != (eth.BlockID{}) { + ctx, cancel := context.WithTimeout(fi.ctx, time.Second*10) + defer cancel() // Sanity check the finality signal of L1. // Even though the signal is trusted and we do the below check also, // the signal itself has to be canonical to proceed. // TODO(#10724): This check could be removed if the finality signal is fully trusted, and if tests were more flexible for this case. signalRef, err := fi.l1Fetcher.L1BlockRefByNumber(ctx, fi.finalizedL1.Number) if err != nil { - return derive.NewTemporaryError(fmt.Errorf("failed to check if on finalizing L1 chain, could not fetch block %d: %w", fi.finalizedL1.Number, err)) + fi.emitter.Emit(rollup.L1TemporaryErrorEvent{Err: fmt.Errorf("failed to check if on finalizing L1 chain, could not fetch block %d: %w", fi.finalizedL1.Number, err)}) + return } if signalRef.Hash != fi.finalizedL1.Hash { - return derive.NewResetError(fmt.Errorf("need to reset, we assumed %s is finalized, but canonical chain is %s", fi.finalizedL1, signalRef)) + fi.emitter.Emit(rollup.ResetEvent{Err: fmt.Errorf("need to reset, we assumed %s is finalized, but canonical chain is %s", fi.finalizedL1, signalRef)}) + return } // Sanity check we are indeed on the finalizing chain, and not stuck on something else. // We assume that the block-by-number query is consistent with the previously received finalized chain signal derivedRef, err := fi.l1Fetcher.L1BlockRefByNumber(ctx, finalizedDerivedFrom.Number) if err != nil { - return derive.NewTemporaryError(fmt.Errorf("failed to check if on finalizing L1 chain, could not fetch block %d: %w", finalizedDerivedFrom.Number, err)) + fi.emitter.Emit(rollup.L1TemporaryErrorEvent{Err: fmt.Errorf("failed to check if on finalizing L1 chain, could not fetch block %d: %w", finalizedDerivedFrom.Number, err)}) + return } if derivedRef.Hash != finalizedDerivedFrom.Hash { - return derive.NewResetError(fmt.Errorf("need to reset, we are on %s, not on the finalizing L1 chain %s (towards %s)", - finalizedDerivedFrom, derivedRef, fi.finalizedL1)) + fi.emitter.Emit(rollup.ResetEvent{Err: fmt.Errorf("need to reset, we are on %s, not on the finalizing L1 chain %s (towards %s)", + finalizedDerivedFrom, derivedRef, fi.finalizedL1)}) + return } - - fi.ec.SetFinalizedHead(finalizedL2) + fi.emitter.Emit(engine.PromoteFinalizedEvent{Ref: finalizedL2}) } - return nil } -// PostProcessSafeL2 buffers the L1 block the safe head was fully derived from, +// onDerivedSafeBlock buffers the L1 block the safe head was fully derived from, // to finalize it once the derived-from L1 block, or a later L1 block, finalizes. -func (fi *Finalizer) PostProcessSafeL2(l2Safe eth.L2BlockRef, derivedFrom eth.L1BlockRef) { +func (fi *Finalizer) onDerivedSafeBlock(l2Safe eth.L2BlockRef, derivedFrom eth.L1BlockRef) { fi.mu.Lock() defer fi.mu.Unlock() // remember the last L2 block that we fully derived from the given finality data @@ -225,9 +269,9 @@ func (fi *Finalizer) PostProcessSafeL2(l2Safe eth.L2BlockRef, derivedFrom eth.L1 } } -// Reset clears the recent history of safe-L2 blocks used for finalization, +// onReset clears the recent history of safe-L2 blocks used for finalization, // to avoid finalizing any reorged-out L2 blocks. -func (fi *Finalizer) Reset() { +func (fi *Finalizer) onReset() { fi.mu.Lock() defer fi.mu.Unlock() fi.finalityData = fi.finalityData[:0] diff --git a/op-node/rollup/finality/finalizer_test.go b/op-node/rollup/finality/finalizer_test.go index e577efe1952a..d4dc76fb4ca5 100644 --- a/op-node/rollup/finality/finalizer_test.go +++ b/op-node/rollup/finality/finalizer_test.go @@ -13,25 +13,12 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/testlog" "github.com/ethereum-optimism/optimism/op-service/testutils" ) -type fakeEngine struct { - finalized eth.L2BlockRef -} - -func (f *fakeEngine) Finalized() eth.L2BlockRef { - return f.finalized -} - -func (f *fakeEngine) SetFinalizedHead(ref eth.L2BlockRef) { - f.finalized = ref -} - -var _ FinalizerEngine = (*fakeEngine)(nil) - func TestEngineQueue_Finalize(t *testing.T) { rng := rand.New(rand.NewSource(1234)) @@ -80,12 +67,12 @@ func TestEngineQueue_Finalize(t *testing.T) { ParentHash: refG.Hash, Time: refG.Time + l1Time, } - refI := eth.L1BlockRef{ - Hash: testutils.RandomHash(rng), - Number: refH.Number + 1, - ParentHash: refH.Hash, - Time: refH.Time + l1Time, - } + //refI := eth.L1BlockRef{ + // Hash: testutils.RandomHash(rng), + // Number: refH.Number + 1, + // ParentHash: refH.Hash, + // Time: refH.Time + l1Time, + //} refA0 := eth.L2BlockRef{ Hash: testutils.RandomHash(rng), @@ -203,22 +190,29 @@ func TestEngineQueue_Finalize(t *testing.T) { l1F.ExpectL1BlockRefByNumber(refD.Number, refD, nil) l1F.ExpectL1BlockRefByNumber(refD.Number, refD, nil) - ec := &fakeEngine{} - ec.SetFinalizedHead(refA1) - - fi := NewFinalizer(logger, &rollup.Config{}, l1F, ec) + emitter := &testutils.MockEmitter{} + fi := NewFinalizer(context.Background(), logger, &rollup.Config{}, l1F, emitter) // now say C1 was included in D and became the new safe head - fi.PostProcessSafeL2(refC1, refD) - require.NoError(t, fi.OnDerivationL1End(context.Background(), refD)) + fi.OnEvent(engine.SafeDerivedEvent{Safe: refC1, DerivedFrom: refD}) + fi.OnEvent(derive.DeriverIdleEvent{Origin: refD}) + emitter.AssertExpectations(t) // now say D0 was included in E and became the new safe head - fi.PostProcessSafeL2(refD0, refE) - require.NoError(t, fi.OnDerivationL1End(context.Background(), refE)) - - // let's finalize D from which we fully derived C1, but not D0 - fi.Finalize(context.Background(), refD) - require.Equal(t, refC1, ec.Finalized(), "C1 was included in finalized D, and should now be finalized, as finality signal is instantly picked up") + fi.OnEvent(engine.SafeDerivedEvent{Safe: refD0, DerivedFrom: refE}) + fi.OnEvent(derive.DeriverIdleEvent{Origin: refE}) + emitter.AssertExpectations(t) + + // Let's finalize D from which we fully derived C1, but not D0 + // This will trigger an attempt of L2 finalization. + emitter.ExpectOnce(TryFinalizeEvent{}) + fi.OnEvent(FinalizeL1Event{FinalizedL1: refD}) + emitter.AssertExpectations(t) + + // C1 was included in finalized D, and should now be finalized + emitter.ExpectOnce(engine.PromoteFinalizedEvent{Ref: refC1}) + fi.OnEvent(TryFinalizeEvent{}) + emitter.AssertExpectations(t) }) // Finality signal is received, but couldn't immediately be checked @@ -230,25 +224,37 @@ func TestEngineQueue_Finalize(t *testing.T) { l1F.ExpectL1BlockRefByNumber(refD.Number, refD, nil) // to check finality signal l1F.ExpectL1BlockRefByNumber(refD.Number, refD, nil) // to check what was derived from (same in this case) - ec := &fakeEngine{} - ec.SetFinalizedHead(refA1) - - fi := NewFinalizer(logger, &rollup.Config{}, l1F, ec) + emitter := &testutils.MockEmitter{} + fi := NewFinalizer(context.Background(), logger, &rollup.Config{}, l1F, emitter) // now say C1 was included in D and became the new safe head - fi.PostProcessSafeL2(refC1, refD) - require.NoError(t, fi.OnDerivationL1End(context.Background(), refD)) + fi.OnEvent(engine.SafeDerivedEvent{Safe: refC1, DerivedFrom: refD}) + fi.OnEvent(derive.DeriverIdleEvent{Origin: refD}) + emitter.AssertExpectations(t) // now say D0 was included in E and became the new safe head - fi.PostProcessSafeL2(refD0, refE) - require.NoError(t, fi.OnDerivationL1End(context.Background(), refE)) + fi.OnEvent(engine.SafeDerivedEvent{Safe: refD0, DerivedFrom: refE}) + fi.OnEvent(derive.DeriverIdleEvent{Origin: refE}) + emitter.AssertExpectations(t) // let's finalize D from which we fully derived C1, but not D0 - fi.Finalize(context.Background(), refD) - require.Equal(t, refA1, ec.Finalized(), "C1 was included in finalized D, but finality could not be verified yet, due to temporary test error") - - require.NoError(t, fi.OnDerivationL1End(context.Background(), refF)) - require.Equal(t, refC1, ec.Finalized(), "C1 was included in finalized D, and should now be finalized, as check can succeed when revisited") + emitter.ExpectOnce(TryFinalizeEvent{}) + fi.OnEvent(FinalizeL1Event{FinalizedL1: refD}) + emitter.AssertExpectations(t) + // C1 was included in finalized D, but finality could not be verified yet, due to temporary test error + emitter.ExpectOnceType("L1TemporaryErrorEvent") + fi.OnEvent(TryFinalizeEvent{}) + emitter.AssertExpectations(t) + + // upon the next signal we should schedule a finalization re-attempt + emitter.ExpectOnce(TryFinalizeEvent{}) + fi.OnEvent(derive.DeriverIdleEvent{Origin: refF}) + emitter.AssertExpectations(t) + + // C1 was included in finalized D, and should now be finalized, as check can succeed when revisited + emitter.ExpectOnce(engine.PromoteFinalizedEvent{Ref: refC1}) + fi.OnEvent(TryFinalizeEvent{}) + emitter.AssertExpectations(t) }) // Test that finality progression can repeat a few times. @@ -257,43 +263,80 @@ func TestEngineQueue_Finalize(t *testing.T) { l1F := &testutils.MockL1Source{} defer l1F.AssertExpectations(t) - l1F.ExpectL1BlockRefByNumber(refD.Number, refD, nil) - l1F.ExpectL1BlockRefByNumber(refD.Number, refD, nil) - l1F.ExpectL1BlockRefByNumber(refE.Number, refE, nil) - l1F.ExpectL1BlockRefByNumber(refE.Number, refE, nil) - l1F.ExpectL1BlockRefByNumber(refH.Number, refH, nil) - l1F.ExpectL1BlockRefByNumber(refH.Number, refH, nil) - - ec := &fakeEngine{} - ec.SetFinalizedHead(refA1) + emitter := &testutils.MockEmitter{} + fi := NewFinalizer(context.Background(), logger, &rollup.Config{}, l1F, emitter) - fi := NewFinalizer(logger, &rollup.Config{}, l1F, ec) + fi.OnEvent(engine.SafeDerivedEvent{Safe: refC1, DerivedFrom: refD}) + fi.OnEvent(derive.DeriverIdleEvent{Origin: refD}) + emitter.AssertExpectations(t) - fi.PostProcessSafeL2(refC1, refD) - require.NoError(t, fi.OnDerivationL1End(context.Background(), refD)) + fi.OnEvent(engine.SafeDerivedEvent{Safe: refD0, DerivedFrom: refE}) + fi.OnEvent(derive.DeriverIdleEvent{Origin: refE}) + emitter.AssertExpectations(t) - fi.PostProcessSafeL2(refD0, refE) - require.NoError(t, fi.OnDerivationL1End(context.Background(), refE)) + // L1 finality signal will trigger L2 finality attempt + emitter.ExpectOnce(TryFinalizeEvent{}) + fi.OnEvent(FinalizeL1Event{FinalizedL1: refD}) + emitter.AssertExpectations(t) - fi.Finalize(context.Background(), refD) - require.NoError(t, fi.OnDerivationL1End(context.Background(), refF)) - require.Equal(t, refC1, ec.Finalized(), "C1 was included in D, and should be finalized now") - - fi.Finalize(context.Background(), refE) - require.NoError(t, fi.OnDerivationL1End(context.Background(), refG)) - require.Equal(t, refD0, ec.Finalized(), "D0 was included in E, and should be finalized now") + // C1 was included in D, and should be finalized now + emitter.ExpectOnce(engine.PromoteFinalizedEvent{Ref: refC1}) + l1F.ExpectL1BlockRefByNumber(refD.Number, refD, nil) + l1F.ExpectL1BlockRefByNumber(refD.Number, refD, nil) + fi.OnEvent(TryFinalizeEvent{}) + emitter.AssertExpectations(t) + l1F.AssertExpectations(t) - fi.PostProcessSafeL2(refD1, refH) - fi.PostProcessSafeL2(refE0, refH) - fi.PostProcessSafeL2(refE1, refH) - fi.PostProcessSafeL2(refF0, refH) - fi.PostProcessSafeL2(refF1, refH) - require.NoError(t, fi.OnDerivationL1End(context.Background(), refH)) - require.Equal(t, refD0, ec.Finalized(), "D1-F1 were included in L1 blocks that have not been finalized yet") + // Another L1 finality event, trigger L2 finality attempt again + emitter.ExpectOnce(TryFinalizeEvent{}) + fi.OnEvent(FinalizeL1Event{FinalizedL1: refE}) + emitter.AssertExpectations(t) - fi.Finalize(context.Background(), refH) - require.NoError(t, fi.OnDerivationL1End(context.Background(), refI)) - require.Equal(t, refF1, ec.Finalized(), "F1 should be finalized now") + // D0 was included in E, and should be finalized now + emitter.ExpectOnce(engine.PromoteFinalizedEvent{Ref: refD0}) + l1F.ExpectL1BlockRefByNumber(refE.Number, refE, nil) + l1F.ExpectL1BlockRefByNumber(refE.Number, refE, nil) + fi.OnEvent(TryFinalizeEvent{}) + emitter.AssertExpectations(t) + l1F.AssertExpectations(t) + + // D0 is still there in the buffer, and may be finalized again, if it were not for the latest forkchoice update. + fi.OnEvent(engine.ForkchoiceUpdateEvent{FinalizedL2Head: refD0}) + emitter.AssertExpectations(t) // should trigger no events + + // we expect a finality attempt, since we have not idled on something yet + emitter.ExpectOnce(TryFinalizeEvent{}) + fi.OnEvent(derive.DeriverIdleEvent{Origin: refG}) + emitter.AssertExpectations(t) + + fi.OnEvent(engine.SafeDerivedEvent{Safe: refD1, DerivedFrom: refH}) + fi.OnEvent(engine.SafeDerivedEvent{Safe: refE0, DerivedFrom: refH}) + fi.OnEvent(engine.SafeDerivedEvent{Safe: refE1, DerivedFrom: refH}) + fi.OnEvent(engine.SafeDerivedEvent{Safe: refF0, DerivedFrom: refH}) + fi.OnEvent(engine.SafeDerivedEvent{Safe: refF1, DerivedFrom: refH}) + emitter.AssertExpectations(t) // above updates add data, but no attempt is made until idle or L1 signal + + // We recently finalized already, and there is no new L1 finality data + fi.OnEvent(derive.DeriverIdleEvent{Origin: refH}) + emitter.AssertExpectations(t) + + // D1-F1 were included in L1 blocks that have not been finalized yet. + // D0 is known to be finalized already. + fi.OnEvent(TryFinalizeEvent{}) + emitter.AssertExpectations(t) + + // Now L1 block H is actually finalized, and we can proceed with another attempt + emitter.ExpectOnce(TryFinalizeEvent{}) + fi.OnEvent(FinalizeL1Event{FinalizedL1: refH}) + emitter.AssertExpectations(t) + + // F1 should be finalized now, since it was included in H + emitter.ExpectOnce(engine.PromoteFinalizedEvent{Ref: refF1}) + l1F.ExpectL1BlockRefByNumber(refH.Number, refH, nil) + l1F.ExpectL1BlockRefByNumber(refH.Number, refH, nil) + fi.OnEvent(TryFinalizeEvent{}) + emitter.AssertExpectations(t) + l1F.AssertExpectations(t) }) // In this test the finality signal is for a block more than @@ -305,22 +348,28 @@ func TestEngineQueue_Finalize(t *testing.T) { l1F.ExpectL1BlockRefByNumber(refD.Number, refD, nil) // check the signal l1F.ExpectL1BlockRefByNumber(refC.Number, refC, nil) // check what we derived the L2 block from - ec := &fakeEngine{} - ec.SetFinalizedHead(refA1) - - fi := NewFinalizer(logger, &rollup.Config{}, l1F, ec) + emitter := &testutils.MockEmitter{} + fi := NewFinalizer(context.Background(), logger, &rollup.Config{}, l1F, emitter) // now say B1 was included in C and became the new safe head - fi.PostProcessSafeL2(refB1, refC) - require.NoError(t, fi.OnDerivationL1End(context.Background(), refC)) + fi.OnEvent(engine.SafeDerivedEvent{Safe: refB1, DerivedFrom: refC}) + fi.OnEvent(derive.DeriverIdleEvent{Origin: refC}) + emitter.AssertExpectations(t) // now say C0 was included in E and became the new safe head - fi.PostProcessSafeL2(refC0, refE) - require.NoError(t, fi.OnDerivationL1End(context.Background(), refE)) + fi.OnEvent(engine.SafeDerivedEvent{Safe: refC0, DerivedFrom: refE}) + fi.OnEvent(derive.DeriverIdleEvent{Origin: refE}) + emitter.AssertExpectations(t) // let's finalize D, from which we fully derived B1, but not C0 (referenced L1 origin in L2 block != inclusion of L2 block in L1 chain) - fi.Finalize(context.Background(), refD) - require.Equal(t, refB1, ec.Finalized(), "B1 was included in finalized D, and should now be finalized") + emitter.ExpectOnce(TryFinalizeEvent{}) + fi.OnEvent(FinalizeL1Event{FinalizedL1: refD}) + emitter.AssertExpectations(t) + + // B1 was included in finalized D, and should now be finalized + emitter.ExpectOnce(engine.PromoteFinalizedEvent{Ref: refB1}) + fi.OnEvent(TryFinalizeEvent{}) + emitter.AssertExpectations(t) }) // Test that reorg race condition is handled. @@ -335,14 +384,13 @@ func TestEngineQueue_Finalize(t *testing.T) { l1F.ExpectL1BlockRefByNumber(refF.Number, refF, nil) // check signal l1F.ExpectL1BlockRefByNumber(refE.Number, refE, nil) // post-reorg - ec := &fakeEngine{} - ec.SetFinalizedHead(refA1) - - fi := NewFinalizer(logger, &rollup.Config{}, l1F, ec) + emitter := &testutils.MockEmitter{} + fi := NewFinalizer(context.Background(), logger, &rollup.Config{}, l1F, emitter) // now say B1 was included in C and became the new safe head - fi.PostProcessSafeL2(refB1, refC) - require.NoError(t, fi.OnDerivationL1End(context.Background(), refC)) + fi.OnEvent(engine.SafeDerivedEvent{Safe: refB1, DerivedFrom: refC}) + fi.OnEvent(derive.DeriverIdleEvent{Origin: refC}) + emitter.AssertExpectations(t) // temporary fork of the L1, and derived safe L2 blocks from. refC0Alt := eth.L2BlockRef{ @@ -367,34 +415,56 @@ func TestEngineQueue_Finalize(t *testing.T) { ParentHash: refC.Hash, Time: refC.Time + l1Time, } - fi.PostProcessSafeL2(refC0Alt, refDAlt) - fi.PostProcessSafeL2(refC1Alt, refDAlt) + fi.OnEvent(engine.SafeDerivedEvent{Safe: refC0Alt, DerivedFrom: refDAlt}) + fi.OnEvent(engine.SafeDerivedEvent{Safe: refC1Alt, DerivedFrom: refDAlt}) // We get an early finality signal for F, of the chain that did not include refC0Alt and refC1Alt, // as L1 block F does not build on DAlt. // The finality signal was for a new chain, while derivation is on an old stale chain. // It should be detected that C0Alt and C1Alt cannot actually be finalized, // even though they are older than the latest finality signal. - fi.Finalize(context.Background(), refF) - require.Equal(t, refA1, ec.Finalized(), "cannot verify refC0Alt and refC1Alt, and refB1 is older and not checked") + emitter.ExpectOnce(TryFinalizeEvent{}) + fi.OnEvent(FinalizeL1Event{FinalizedL1: refF}) + emitter.AssertExpectations(t) + // cannot verify refC0Alt and refC1Alt, and refB1 is older and not checked + emitter.ExpectOnceType("ResetEvent") + fi.OnEvent(TryFinalizeEvent{}) + emitter.AssertExpectations(t) // no change in finality + // And process DAlt, still stuck on old chain. - require.ErrorIs(t, derive.ErrReset, fi.OnDerivationL1End(context.Background(), refDAlt)) - require.Equal(t, refA1, ec.Finalized(), "no new finalized L2 blocks after early finality signal with stale chain") - require.Equal(t, refF, fi.FinalizedL1(), "remember the new finality signal for later however") + + emitter.ExpectOnce(TryFinalizeEvent{}) + fi.OnEvent(derive.DeriverIdleEvent{Origin: refDAlt}) + emitter.AssertExpectations(t) + // no new finalized L2 blocks after early finality signal with stale chain + emitter.ExpectOnceType("ResetEvent") + fi.OnEvent(TryFinalizeEvent{}) + emitter.AssertExpectations(t) // Now reset, because of the reset error - fi.Reset() + fi.OnEvent(rollup.ResetEvent{}) + require.Equal(t, refF, fi.FinalizedL1(), "remember the new finality signal for later however") // And process the canonical chain, with empty block D (no post-processing of canonical C0 blocks yet) - require.NoError(t, fi.OnDerivationL1End(context.Background(), refD)) + emitter.ExpectOnce(TryFinalizeEvent{}) + fi.OnEvent(derive.DeriverIdleEvent{Origin: refD}) + emitter.AssertExpectations(t) + fi.OnEvent(TryFinalizeEvent{}) + emitter.AssertExpectations(t) // no new finality // Include C0 in E - fi.PostProcessSafeL2(refC0, refE) - require.NoError(t, fi.OnDerivationL1End(context.Background(), refE)) - // Due to the "finalityDelay" we don't repeat finality checks shortly after one another. - require.Equal(t, refA1, ec.Finalized()) + fi.OnEvent(engine.SafeDerivedEvent{Safe: refC0, DerivedFrom: refE}) + fi.OnEvent(derive.DeriverIdleEvent{Origin: refE}) + // Due to the "finalityDelay" we don't repeat finality checks shortly after one another, + // and don't expect a finality attempt. + emitter.AssertExpectations(t) + // if we reset the attempt, then we can finalize however. fi.triedFinalizeAt = 0 - require.NoError(t, fi.OnDerivationL1End(context.Background(), refE)) - require.Equal(t, refC0, ec.Finalized()) + emitter.ExpectOnce(TryFinalizeEvent{}) + fi.OnEvent(derive.DeriverIdleEvent{Origin: refE}) + emitter.AssertExpectations(t) + emitter.ExpectOnce(engine.PromoteFinalizedEvent{Ref: refC0}) + fi.OnEvent(TryFinalizeEvent{}) + emitter.AssertExpectations(t) }) } diff --git a/op-node/rollup/finality/plasma.go b/op-node/rollup/finality/plasma.go index 6077de90295b..e62c96169c5a 100644 --- a/op-node/rollup/finality/plasma.go +++ b/op-node/rollup/finality/plasma.go @@ -26,17 +26,17 @@ type PlasmaFinalizer struct { backend PlasmaBackend } -func NewPlasmaFinalizer(log log.Logger, cfg *rollup.Config, - l1Fetcher FinalizerL1Interface, ec FinalizerEngine, +func NewPlasmaFinalizer(ctx context.Context, log log.Logger, cfg *rollup.Config, + l1Fetcher FinalizerL1Interface, emitter rollup.EventEmitter, backend PlasmaBackend) *PlasmaFinalizer { - inner := NewFinalizer(log, cfg, l1Fetcher, ec) + inner := NewFinalizer(ctx, log, cfg, l1Fetcher, emitter) // In alt-da mode, the finalization signal is proxied through the plasma manager. // Finality signal will come from the DA contract or L1 finality whichever is last. // The plasma module will then call the inner.Finalize function when applicable. backend.OnFinalizedHeadSignal(func(ref eth.L1BlockRef) { - inner.Finalize(context.Background(), ref) // plasma backend context passing can be improved + inner.OnEvent(FinalizeL1Event{FinalizedL1: ref}) }) return &PlasmaFinalizer{ @@ -45,6 +45,11 @@ func NewPlasmaFinalizer(log log.Logger, cfg *rollup.Config, } } -func (fi *PlasmaFinalizer) Finalize(ctx context.Context, l1Origin eth.L1BlockRef) { - fi.backend.Finalize(l1Origin) +func (fi *PlasmaFinalizer) OnEvent(ev rollup.Event) { + switch x := ev.(type) { + case FinalizeL1Event: + fi.backend.Finalize(x.FinalizedL1) + default: + fi.Finalizer.OnEvent(ev) + } } diff --git a/op-node/rollup/finality/plasma_test.go b/op-node/rollup/finality/plasma_test.go index 4c1ecc00accc..291fa026dcb4 100644 --- a/op-node/rollup/finality/plasma_test.go +++ b/op-node/rollup/finality/plasma_test.go @@ -11,6 +11,8 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-node/rollup/engine" plasma "github.com/ethereum-optimism/optimism/op-plasma" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/testlog" @@ -83,9 +85,6 @@ func TestPlasmaFinalityData(t *testing.T) { SequenceNumber: 1, } - ec := &fakeEngine{} - ec.SetFinalizedHead(refA1) - // Simulate plasma finality by waiting for the finalized-inclusion // of a commitment to turn into undisputed finalized data. commitmentInclusionFinalized := eth.L1BlockRef{} @@ -95,7 +94,9 @@ func TestPlasmaFinalityData(t *testing.T) { }, forwardTo: nil, } - fi := NewPlasmaFinalizer(logger, cfg, l1F, ec, plasmaBackend) + + emitter := &testutils.MockEmitter{} + fi := NewPlasmaFinalizer(context.Background(), logger, cfg, l1F, emitter, plasmaBackend) require.NotNil(t, plasmaBackend.forwardTo, "plasma backend must have access to underlying standard finalizer") require.Equal(t, expFinalityLookback, cap(fi.finalityData)) @@ -107,7 +108,9 @@ func TestPlasmaFinalityData(t *testing.T) { // and post processing. for i := uint64(0); i < 200; i++ { if i == 10 { // finalize a L1 commitment - fi.Finalize(context.Background(), l1parent) + fi.OnEvent(FinalizeL1Event{FinalizedL1: l1parent}) + emitter.AssertExpectations(t) // no events emitted upon L1 finality + require.Equal(t, l1parent, commitmentInclusionFinalized, "plasma backend received L1 signal") } previous := l1parent @@ -127,24 +130,56 @@ func TestPlasmaFinalityData(t *testing.T) { L1Origin: previous.ID(), // reference previous origin, not the block the batch was included in SequenceNumber: j, } - fi.PostProcessSafeL2(l2parent, l1parent) + fi.OnEvent(engine.SafeDerivedEvent{Safe: l2parent, DerivedFrom: l1parent}) + emitter.AssertExpectations(t) } - require.NoError(t, fi.OnDerivationL1End(context.Background(), l1parent)) + // might trigger finalization attempt, if expired finality delay + emitter.ExpectMaybeRun(func(ev rollup.Event) { + require.IsType(t, TryFinalizeEvent{}, ev) + }) + fi.OnEvent(derive.DeriverIdleEvent{}) + emitter.AssertExpectations(t) + // clear expectations + emitter.Mock.ExpectedCalls = nil + + // no L2 finalize event, as no L1 finality signal has been forwarded by plasma backend yet + fi.OnEvent(TryFinalizeEvent{}) + emitter.AssertExpectations(t) + + // Pretend to be the plasma backend, + // send the original finalization signal to the underlying finalizer, + // now that we are sure the commitment itself is not just finalized, + // but the referenced data cannot be disputed anymore. plasmaFinalization := commitmentInclusionFinalized.Number + cfg.PlasmaConfig.DAChallengeWindow - if i == plasmaFinalization { - // Pretend to be the plasma backend, - // send the original finalization signal to the underlying finalizer, - // now that we are sure the commitment itself is not just finalized, - // but the referenced data cannot be disputed anymore. + if commitmentInclusionFinalized != (eth.L1BlockRef{}) && l1parent.Number == plasmaFinalization { + // When the signal is forwarded, a finalization attempt will be scheduled + emitter.ExpectOnce(TryFinalizeEvent{}) plasmaBackend.forwardTo(commitmentInclusionFinalized) - } - // The next time OnDerivationL1End is called, after the finality signal was triggered by plasma backend, - // we should have a finalized L2 block. - // The L1 origin of the simulated L2 blocks lags 1 behind the block the L2 block is included in on L1. - // So to check the L2 finality progress, we check if the next L1 block after the L1 origin - // of the safe block matches that of the finalized L1 block. - if i == plasmaFinalization+1 { - require.Equal(t, plasmaFinalization, ec.Finalized().L1Origin.Number+1) + emitter.AssertExpectations(t) + require.Equal(t, commitmentInclusionFinalized, fi.finalizedL1, "finality signal now made its way in regular finalizer") + + // As soon as a finalization attempt is made, after the finality signal was triggered by plasma backend, + // we should get an attempt to get a finalized L2 block. + // In this test the L1 origin of the simulated L2 blocks lags 1 behind the block the L2 block is included in on L1. + // So to check the L2 finality progress, we check if the next L1 block after the L1 origin + // of the safe block matches that of the finalized L1 block. + l1F.ExpectL1BlockRefByNumber(commitmentInclusionFinalized.Number, commitmentInclusionFinalized, nil) + l1F.ExpectL1BlockRefByNumber(commitmentInclusionFinalized.Number, commitmentInclusionFinalized, nil) + var finalizedL2 eth.L2BlockRef + emitter.ExpectOnceRun(func(ev rollup.Event) { + if x, ok := ev.(engine.PromoteFinalizedEvent); ok { + finalizedL2 = x.Ref + } else { + t.Fatalf("expected L2 finalization, but got: %s", ev) + } + }) + fi.OnEvent(TryFinalizeEvent{}) + l1F.AssertExpectations(t) + emitter.AssertExpectations(t) + require.Equal(t, commitmentInclusionFinalized.Number, finalizedL2.L1Origin.Number+1) + // Confirm finalization, so there will be no repeats of the PromoteFinalizedEvent + fi.OnEvent(engine.ForkchoiceUpdateEvent{FinalizedL2Head: finalizedL2}) + emitter.AssertExpectations(t) } } diff --git a/op-program/client/driver/program.go b/op-program/client/driver/program.go index 84d44298608d..9ed08e531d91 100644 --- a/op-program/client/driver/program.go +++ b/op-program/client/driver/program.go @@ -68,6 +68,9 @@ func (d *ProgramDeriver) OnEvent(ev rollup.Event) { case rollup.ResetEvent: d.closing = true d.result = fmt.Errorf("unexpected reset error: %w", x.Err) + case rollup.L1TemporaryErrorEvent: + d.closing = true + d.result = fmt.Errorf("unexpected L1 error: %w", x.Err) case rollup.EngineTemporaryErrorEvent: // (Legacy case): While most temporary errors are due to requests for external data failing which can't happen, // they may also be returned due to other events like channels timing out so need to be handled diff --git a/op-program/client/driver/program_test.go b/op-program/client/driver/program_test.go index 186832286f62..bca2ecaf0b72 100644 --- a/op-program/client/driver/program_test.go +++ b/op-program/client/driver/program_test.go @@ -120,8 +120,16 @@ func TestProgramDeriver(t *testing.T) { require.True(t, p.closing) require.NotNil(t, p.result) }) - // on temporary error: continue derivation. - t.Run("temp error event", func(t *testing.T) { + // on L1 temporary error: stop with error + t.Run("L1 temporary error event", func(t *testing.T) { + p, m := newProgram(t, 1000) + p.OnEvent(rollup.L1TemporaryErrorEvent{Err: errors.New("temp test err")}) + m.AssertExpectations(t) + require.True(t, p.closing) + require.NotNil(t, p.result) + }) + // on engine temporary error: continue derivation (because legacy, not all connection related) + t.Run("engine temp error event", func(t *testing.T) { p, m := newProgram(t, 1000) m.ExpectOnce(engine.PendingSafeRequestEvent{}) p.OnEvent(rollup.EngineTemporaryErrorEvent{Err: errors.New("temp test err")}) diff --git a/op-service/testutils/mock_emitter.go b/op-service/testutils/mock_emitter.go index ae329d2064e1..e9b502dfee38 100644 --- a/op-service/testutils/mock_emitter.go +++ b/op-service/testutils/mock_emitter.go @@ -18,10 +18,22 @@ func (m *MockEmitter) ExpectOnce(expected rollup.Event) { m.Mock.On("Emit", expected).Once() } +func (m *MockEmitter) ExpectMaybeRun(fn func(ev rollup.Event)) { + m.Mock.On("Emit", mock.Anything).Maybe().Run(func(args mock.Arguments) { + fn(args.Get(0).(rollup.Event)) + }) +} + func (m *MockEmitter) ExpectOnceType(typ string) { m.Mock.On("Emit", mock.AnythingOfType(typ)).Once() } +func (m *MockEmitter) ExpectOnceRun(fn func(ev rollup.Event)) { + m.Mock.On("Emit", mock.Anything).Once().Run(func(args mock.Arguments) { + fn(args.Get(0).(rollup.Event)) + }) +} + func (m *MockEmitter) AssertExpectations(t mock.TestingT) { m.Mock.AssertExpectations(t) } From f9d49101fbed9c60086efc64de84f98fcf47ee3a Mon Sep 17 00:00:00 2001 From: protolambda Date: Mon, 24 Jun 2024 13:22:41 -0600 Subject: [PATCH 092/141] op-e2e: fix broken plasma finalization test (#10984) --- op-e2e/actions/plasma_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/op-e2e/actions/plasma_test.go b/op-e2e/actions/plasma_test.go index bc67ba4ac4f7..d1a5606d24fb 100644 --- a/op-e2e/actions/plasma_test.go +++ b/op-e2e/actions/plasma_test.go @@ -625,6 +625,7 @@ func TestPlasma_Finalization(gt *testing.T) { // advance derivation and finalize plasma via the L1 signal a.sequencer.ActL2PipelineFull(t) a.ActL1Finalized(t) + a.sequencer.ActL2PipelineFull(t) // finality event needs to be processed // given 12s l1 time and 1s l2 time, l2 should be 12 * 3 = 36 blocks finalized require.Equal(t, uint64(36), a.sequencer.SyncStatus().FinalizedL2.Number) From ccd2b3d44a6dd86b9bd922608b429e402f9a2ccf Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Mon, 24 Jun 2024 23:28:02 +0300 Subject: [PATCH 093/141] monorepo: remove dead indexer reference (#10796) The `pnpm-workspace.yaml` file should no longer include a reference to the ts package that was removed along with the `indexer`. --- pnpm-workspace.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index a3cef3117ea0..18ec407efca7 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,2 @@ packages: - 'packages/*' - - 'indexer/api-ts' From d74848c2f6b7a146b9a972005d4e373b98eea2be Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Mon, 24 Jun 2024 23:35:51 +0300 Subject: [PATCH 094/141] monorepo: enshrine ts config (#10797) Move the ts config out of the root of the repo to the packages themselves. This is because no new typescript development is planned for the monorepo itself, new typescript lives in the ecosystem monorepo, see https://github.com/ethereum-optimism/ecosystem. It may also live in the monitoring monorepo, see https://github.com/ethereum-optimism/monitorism. This will make porting the individual ts packages out of the monorepo more simple and also cleans up the root of the monorepo, reducing the overhead for contributors. --- packages/chain-mon/tsconfig.json | 22 ++++++++++++++++-- .../contracts-bedrock/tsconfig.build.json | 8 ------- packages/contracts-bedrock/tsconfig.json | 23 +++++++++++++++++-- packages/devnet-tasks/tsconfig.json | 23 +++++++++++++++++-- tsconfig.json | 23 ------------------- 5 files changed, 62 insertions(+), 37 deletions(-) delete mode 100644 packages/contracts-bedrock/tsconfig.build.json delete mode 100644 tsconfig.json diff --git a/packages/chain-mon/tsconfig.json b/packages/chain-mon/tsconfig.json index f9bea541e657..46e4d8fe12ca 100644 --- a/packages/chain-mon/tsconfig.json +++ b/packages/chain-mon/tsconfig.json @@ -1,9 +1,27 @@ { - "extends": "../../tsconfig.json", "compilerOptions": { "outDir": "./dist", - "skipLibCheck": true + "skipLibCheck": true, + "module": "commonjs", + "target": "es2017", + "sourceMap": true, + "esModuleInterop": true, + "composite": true, + "resolveJsonModule": true, + "declaration": true, + "noImplicitAny": false, + "removeComments": true, + "noLib": false, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "typeRoots": [ + "node_modules/@types" + ] }, + "exclude": [ + "node_modules", + "dist" + ], "include": [ "package.json", "src/abi/IGnosisSafe.0.8.19.json", diff --git a/packages/contracts-bedrock/tsconfig.build.json b/packages/contracts-bedrock/tsconfig.build.json deleted file mode 100644 index e5df8a66de31..000000000000 --- a/packages/contracts-bedrock/tsconfig.build.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "rootDir": "./src", - "outDir": "./dist" - }, - "include": ["src/**/*"] -} diff --git a/packages/contracts-bedrock/tsconfig.json b/packages/contracts-bedrock/tsconfig.json index 5091614ef561..7c7a62708773 100644 --- a/packages/contracts-bedrock/tsconfig.json +++ b/packages/contracts-bedrock/tsconfig.json @@ -1,8 +1,27 @@ { - "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist" + "outDir": "./dist", + "skipLibCheck": true, + "module": "commonjs", + "target": "es2017", + "sourceMap": true, + "esModuleInterop": true, + "composite": true, + "resolveJsonModule": true, + "declaration": true, + "noImplicitAny": false, + "removeComments": true, + "noLib": false, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "typeRoots": [ + "node_modules/@types" + ] }, + "exclude": [ + "node_modules", + "dist" + ], "include": [ "deploy-config/**/*", "deploy-config/**/*.json", diff --git a/packages/devnet-tasks/tsconfig.json b/packages/devnet-tasks/tsconfig.json index c59f2e54c42b..35378d125935 100644 --- a/packages/devnet-tasks/tsconfig.json +++ b/packages/devnet-tasks/tsconfig.json @@ -1,10 +1,29 @@ { - "extends": "../../tsconfig.json", "compilerOptions": { "lib": ["ES2021"], "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist", + "skipLibCheck": true, + "module": "commonjs", + "target": "es2017", + "sourceMap": true, + "esModuleInterop": true, + "composite": true, + "resolveJsonModule": true, + "declaration": true, + "noImplicitAny": false, + "removeComments": true, + "noLib": false, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "typeRoots": [ + "node_modules/@types" + ] }, + "exclude": [ + "node_modules", + "dist" + ], "include": [ "src/**/*", "src/forge-artifacts/*.json" diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index f389a4990f71..000000000000 --- a/tsconfig.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "target": "es2017", - "sourceMap": true, - "esModuleInterop": true, - "composite": true, - "resolveJsonModule": true, - "declaration": true, - "noImplicitAny": false, - "removeComments": true, - "noLib": false, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "typeRoots": [ - "node_modules/@types" - ] - }, - "exclude": [ - "node_modules", - "dist" - ] -} From c54b656b743124f4360c2a978b2a8c523f4c2a58 Mon Sep 17 00:00:00 2001 From: Francis Li Date: Mon, 24 Jun 2024 13:42:20 -0700 Subject: [PATCH 095/141] op-conductor: add override to disable HA mode in disaster recovery scenarios (#10976) * op-conductor: add override to disable HA mode in disaster recovery scenarios * op-conductor: add leader override in conductor API * Change leaderOverride to atomic.Bool --- op-conductor/rpc/api.go | 4 +++ op-conductor/rpc/backend.go | 23 ++++++++++++--- op-conductor/rpc/client.go | 5 ++++ op-e2e/actions/l2_verifier.go | 7 +++-- op-e2e/sequencer_failover_test.go | 42 +++++++++++++++++++++++++++ op-node/node/api.go | 11 +++++-- op-node/node/conductor.go | 32 +++++++++++++++++--- op-node/node/server_test.go | 4 +++ op-node/rollup/conductor/conductor.go | 12 ++++++++ op-node/rollup/driver/state.go | 4 +++ op-service/sources/rollupclient.go | 7 +++-- 11 files changed, 137 insertions(+), 14 deletions(-) diff --git a/op-conductor/rpc/api.go b/op-conductor/rpc/api.go index 536cbfd21802..2ed373b1bcad 100644 --- a/op-conductor/rpc/api.go +++ b/op-conductor/rpc/api.go @@ -15,6 +15,10 @@ var ErrNotLeader = errors.New("refusing to proxy request to non-leader sequencer // API defines the interface for the op-conductor API. type API interface { + // OverrideLeader is used to override the leader status, this is only used to return true for Leader() & LeaderWithID() calls. + // It does not impact the actual raft consensus leadership status. It is supposed to be used when the cluster is unhealthy + // and the node is the only one up, to allow batcher to be able to connect to the node, so that it could download blocks from the manually started sequencer. + OverrideLeader(ctx context.Context) error // Pause pauses op-conductor. Pause(ctx context.Context) error // Resume resumes op-conductor. diff --git a/op-conductor/rpc/backend.go b/op-conductor/rpc/backend.go index fe909b3332c2..f42f09e5e9e1 100644 --- a/op-conductor/rpc/backend.go +++ b/op-conductor/rpc/backend.go @@ -2,6 +2,7 @@ package rpc import ( "context" + "sync/atomic" "github.com/ethereum/go-ethereum/log" @@ -29,10 +30,10 @@ type conductor interface { // APIBackend is the backend implementation of the API. // TODO: (https://github.com/ethereum-optimism/protocol-quest/issues/45) Add metrics tracer here. -// TODO: (https://github.com/ethereum-optimism/protocol-quest/issues/44) add tests after e2e setup. type APIBackend struct { - log log.Logger - con conductor + log log.Logger + con conductor + leaderOverride atomic.Bool } // NewAPIBackend creates a new APIBackend instance. @@ -45,6 +46,12 @@ func NewAPIBackend(log log.Logger, con conductor) *APIBackend { var _ API = (*APIBackend)(nil) +// OverrideLeader implements API. +func (api *APIBackend) OverrideLeader(ctx context.Context) error { + api.leaderOverride.Store(true) + return nil +} + // Paused implements API. func (api *APIBackend) Paused(ctx context.Context) (bool, error) { return api.con.Paused(), nil @@ -82,11 +89,19 @@ func (api *APIBackend) CommitUnsafePayload(ctx context.Context, payload *eth.Exe // Leader implements API, returns true if current conductor is leader of the cluster. func (api *APIBackend) Leader(ctx context.Context) (bool, error) { - return api.con.Leader(ctx), nil + return api.leaderOverride.Load() || api.con.Leader(ctx), nil } // LeaderWithID implements API, returns the leader's server ID and address (not necessarily the current conductor). func (api *APIBackend) LeaderWithID(ctx context.Context) (*consensus.ServerInfo, error) { + if api.leaderOverride.Load() { + return &consensus.ServerInfo{ + ID: "N/A (Leader overridden)", + Addr: "N/A", + Suffrage: 0, + }, nil + } + return api.con.LeaderWithID(ctx), nil } diff --git a/op-conductor/rpc/client.go b/op-conductor/rpc/client.go index 28ce1dcff245..a625837e5e5f 100644 --- a/op-conductor/rpc/client.go +++ b/op-conductor/rpc/client.go @@ -27,6 +27,11 @@ func prefixRPC(method string) string { return RPCNamespace + "_" + method } +// OverrideLeader implements API. +func (c *APIClient) OverrideLeader(ctx context.Context) error { + return c.c.CallContext(ctx, nil, prefixRPC("overrideLeader")) +} + // Paused implements API. func (c *APIClient) Paused(ctx context.Context) (bool, error) { var paused bool diff --git a/op-e2e/actions/l2_verifier.go b/op-e2e/actions/l2_verifier.go index f8e54bf29e76..95fd95eaf0c0 100644 --- a/op-e2e/actions/l2_verifier.go +++ b/op-e2e/actions/l2_verifier.go @@ -6,12 +6,11 @@ import ( "fmt" "io" - "github.com/stretchr/testify/require" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" gnode "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/rpc" + "github.com/stretchr/testify/require" "github.com/ethereum-optimism/optimism/op-node/node" "github.com/ethereum-optimism/optimism/op-node/rollup" @@ -210,6 +209,10 @@ func (s *l2VerifierBackend) SequencerActive(ctx context.Context) (bool, error) { return false, nil } +func (s *l2VerifierBackend) OverrideLeader(ctx context.Context) error { + return nil +} + func (s *l2VerifierBackend) OnUnsafeL2Payload(ctx context.Context, envelope *eth.ExecutionPayloadEnvelope) error { return nil } diff --git a/op-e2e/sequencer_failover_test.go b/op-e2e/sequencer_failover_test.go index 09144479cb2f..0fa38f54ba3c 100644 --- a/op-e2e/sequencer_failover_test.go +++ b/op-e2e/sequencer_failover_test.go @@ -5,6 +5,7 @@ import ( "sort" "testing" + "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/require" "github.com/ethereum-optimism/optimism/op-conductor/consensus" @@ -189,3 +190,44 @@ func TestSequencerFailover_ActiveSequencerDown(t *testing.T) { require.NoError(t, err) require.True(t, active, "Expected new leader to be sequencing") } + +// [Category: Disaster Recovery] +// Test that sequencer can successfully be started with the overrideLeader flag set to true. +func TestSequencerFailover_DisasterRecovery_OverrideLeader(t *testing.T) { + sys, conductors, cleanup := setupSequencerFailoverTest(t) + defer cleanup() + + // randomly stop 2 nodes in the cluster to simulate a disaster. + ctx := context.Background() + err := conductors[Sequencer1Name].service.Stop(ctx) + require.NoError(t, err) + err = conductors[Sequencer2Name].service.Stop(ctx) + require.NoError(t, err) + + require.False(t, conductors[Sequencer3Name].service.Leader(ctx), "Expected sequencer to not be the leader") + active, err := sys.RollupClient(Sequencer3Name).SequencerActive(ctx) + require.NoError(t, err) + require.False(t, active, "Expected sequencer to be inactive") + + // Start sequencer without the overrideLeader flag set to true, should fail + err = sys.RollupClient(Sequencer3Name).StartSequencer(ctx, common.Hash{1, 2, 3}) + require.ErrorContains(t, err, "sequencer is not the leader, aborting.", "Expected sequencer to fail to start") + + // Start sequencer with the overrideLeader flag set to true, should succeed + err = sys.RollupClient(Sequencer3Name).OverrideLeader(ctx) + require.NoError(t, err) + blk, err := sys.NodeClient(Sequencer3Name).BlockByNumber(ctx, nil) + require.NoError(t, err) + err = sys.RollupClient(Sequencer3Name).StartSequencer(ctx, blk.Hash()) + require.NoError(t, err) + + active, err = sys.RollupClient(Sequencer3Name).SequencerActive(ctx) + require.NoError(t, err) + require.True(t, active, "Expected sequencer to be active") + + err = conductors[Sequencer3Name].client.OverrideLeader(ctx) + require.NoError(t, err) + leader, err := conductors[Sequencer3Name].client.Leader(ctx) + require.NoError(t, err) + require.True(t, leader, "Expected conductor to return leader true after override") +} diff --git a/op-node/node/api.go b/op-node/node/api.go index cb60d22d911b..a94e2477fe16 100644 --- a/op-node/node/api.go +++ b/op-node/node/api.go @@ -5,11 +5,11 @@ import ( "errors" "fmt" - "github.com/ethereum-optimism/optimism/op-node/node/safedb" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum-optimism/optimism/op-node/node/safedb" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/version" "github.com/ethereum-optimism/optimism/op-service/eth" @@ -33,6 +33,7 @@ type driverClient interface { StopSequencer(context.Context) (common.Hash, error) SequencerActive(context.Context) (bool, error) OnUnsafeL2Payload(ctx context.Context, payload *eth.ExecutionPayloadEnvelope) error + OverrideLeader(ctx context.Context) error } type SafeDBReader interface { @@ -77,7 +78,6 @@ func (n *adminAPI) SequencerActive(ctx context.Context) (bool, error) { // PostUnsafePayload is a special API that allows posting an unsafe payload to the L2 derivation pipeline. // It should only be used by op-conductor for sequencer failover scenarios. -// TODO(ethereum-optimism/optimism#9064): op-conductor Dencun changes. func (n *adminAPI) PostUnsafePayload(ctx context.Context, envelope *eth.ExecutionPayloadEnvelope) error { recordDur := n.M.RecordRPCServerRequest("admin_postUnsafePayload") defer recordDur() @@ -91,6 +91,13 @@ func (n *adminAPI) PostUnsafePayload(ctx context.Context, envelope *eth.Executio return n.dr.OnUnsafeL2Payload(ctx, envelope) } +// OverrideLeader disables sequencer conductor interactions and allow sequencer to run in non-HA mode during disaster recovery scenarios. +func (n *adminAPI) OverrideLeader(ctx context.Context) error { + recordDur := n.M.RecordRPCServerRequest("admin_overrideLeader") + defer recordDur() + return n.dr.OverrideLeader(ctx) +} + type nodeAPI struct { config *rollup.Config client l2EthClient diff --git a/op-node/node/conductor.go b/op-node/node/conductor.go index 938b9f28c5b1..20e0638dc686 100644 --- a/op-node/node/conductor.go +++ b/op-node/node/conductor.go @@ -3,16 +3,17 @@ package node import ( "context" "fmt" + "sync/atomic" "time" + "github.com/ethereum/go-ethereum/log" + + conductorRpc "github.com/ethereum-optimism/optimism/op-conductor/rpc" "github.com/ethereum-optimism/optimism/op-node/metrics" "github.com/ethereum-optimism/optimism/op-node/rollup/conductor" "github.com/ethereum-optimism/optimism/op-service/dial" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/retry" - "github.com/ethereum/go-ethereum/log" - - conductorRpc "github.com/ethereum-optimism/optimism/op-conductor/rpc" ) // ConductorClient is a client for the op-conductor RPC service. @@ -21,13 +22,22 @@ type ConductorClient struct { metrics *metrics.Metrics log log.Logger apiClient *conductorRpc.APIClient + + // overrideLeader is used to override the leader check for disaster recovery purposes. + // During disaster situations where the cluster is unhealthy (no leader, only 1 or less nodes up), + // set this to true to allow the node to assume sequencing responsibilities without being the leader. + overrideLeader atomic.Bool } var _ conductor.SequencerConductor = &ConductorClient{} // NewConductorClient returns a new conductor client for the op-conductor RPC service. func NewConductorClient(cfg *Config, log log.Logger, metrics *metrics.Metrics) *ConductorClient { - return &ConductorClient{cfg: cfg, metrics: metrics, log: log} + return &ConductorClient{ + cfg: cfg, + metrics: metrics, + log: log, + } } // Initialize initializes the conductor client. @@ -45,6 +55,10 @@ func (c *ConductorClient) initialize() error { // Leader returns true if this node is the leader sequencer. func (c *ConductorClient) Leader(ctx context.Context) (bool, error) { + if c.overrideLeader.Load() { + return true, nil + } + if err := c.initialize(); err != nil { return false, err } @@ -62,6 +76,10 @@ func (c *ConductorClient) Leader(ctx context.Context) (bool, error) { // CommitUnsafePayload commits an unsafe payload to the conductor log. func (c *ConductorClient) CommitUnsafePayload(ctx context.Context, payload *eth.ExecutionPayloadEnvelope) error { + if c.overrideLeader.Load() { + return nil + } + if err := c.initialize(); err != nil { return err } @@ -78,6 +96,12 @@ func (c *ConductorClient) CommitUnsafePayload(ctx context.Context, payload *eth. return err } +// OverrideLeader implements conductor.SequencerConductor. +func (c *ConductorClient) OverrideLeader(ctx context.Context) error { + c.overrideLeader.Store(true) + return nil +} + func (c *ConductorClient) Close() { if c.apiClient == nil { return diff --git a/op-node/node/server_test.go b/op-node/node/server_test.go index 587befd6de80..7063b3ed2807 100644 --- a/op-node/node/server_test.go +++ b/op-node/node/server_test.go @@ -283,6 +283,10 @@ func (c *mockDriverClient) OnUnsafeL2Payload(ctx context.Context, payload *eth.E return c.Mock.MethodCalled("OnUnsafeL2Payload").Get(0).(error) } +func (c *mockDriverClient) OverrideLeader(ctx context.Context) error { + return c.Mock.MethodCalled("OverrideLeader").Get(0).(error) +} + type mockSafeDBReader struct { mock.Mock } diff --git a/op-node/rollup/conductor/conductor.go b/op-node/rollup/conductor/conductor.go index 912b08cf071e..927d88035ccb 100644 --- a/op-node/rollup/conductor/conductor.go +++ b/op-node/rollup/conductor/conductor.go @@ -9,14 +9,21 @@ import ( // SequencerConductor is an interface for the driver to communicate with the sequencer conductor. // It is used to determine if the current node is the active sequencer, and to commit unsafe payloads to the conductor log. type SequencerConductor interface { + // Leader returns true if this node is the leader sequencer. Leader(ctx context.Context) (bool, error) + // CommitUnsafePayload commits an unsafe payload to the conductor FSM. CommitUnsafePayload(ctx context.Context, payload *eth.ExecutionPayloadEnvelope) error + // OverrideLeader forces current node to be considered leader and be able to start sequencing during disaster situations in HA mode. + OverrideLeader(ctx context.Context) error + // Close closes the conductor client. Close() } // NoOpConductor is a no-op conductor that assumes this node is the leader sequencer. type NoOpConductor struct{} +var _ SequencerConductor = &NoOpConductor{} + // Leader returns true if this node is the leader sequencer. NoOpConductor always returns true. func (c *NoOpConductor) Leader(ctx context.Context) (bool, error) { return true, nil @@ -27,5 +34,10 @@ func (c *NoOpConductor) CommitUnsafePayload(ctx context.Context, payload *eth.Ex return nil } +// OverrideLeader implements SequencerConductor. +func (c *NoOpConductor) OverrideLeader(ctx context.Context) error { + return nil +} + // Close closes the conductor client. func (c *NoOpConductor) Close() {} diff --git a/op-node/rollup/driver/state.go b/op-node/rollup/driver/state.go index 3ac7375f803f..73ab3a0923bd 100644 --- a/op-node/rollup/driver/state.go +++ b/op-node/rollup/driver/state.go @@ -636,6 +636,10 @@ func (s *Driver) SequencerActive(ctx context.Context) (bool, error) { } } +func (s *Driver) OverrideLeader(ctx context.Context) error { + return s.sequencerConductor.OverrideLeader(ctx) +} + // syncStatus returns the current sync status, and should only be called synchronously with // the driver event loop to avoid retrieval of an inconsistent status. func (s *Driver) syncStatus() *eth.SyncStatus { diff --git a/op-service/sources/rollupclient.go b/op-service/sources/rollupclient.go index 96cd166732a9..14c38d35b4e8 100644 --- a/op-service/sources/rollupclient.go +++ b/op-service/sources/rollupclient.go @@ -3,10 +3,9 @@ package sources import ( "context" - "golang.org/x/exp/slog" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + "golang.org/x/exp/slog" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-service/client" @@ -71,6 +70,10 @@ func (r *RollupClient) PostUnsafePayload(ctx context.Context, payload *eth.Execu return r.rpc.CallContext(ctx, nil, "admin_postUnsafePayload", payload) } +func (r *RollupClient) OverrideLeader(ctx context.Context) error { + return r.rpc.CallContext(ctx, nil, "admin_overrideLeader") +} + func (r *RollupClient) SetLogLevel(ctx context.Context, lvl slog.Level) error { return r.rpc.CallContext(ctx, nil, "admin_setLogLevel", lvl.String()) } From 1cf5239c66ccbb17afa05299c28703a506309130 Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Tue, 25 Jun 2024 06:51:18 +1000 Subject: [PATCH 096/141] op-supervisor: Add log db (#10902) * op-supervisor: Introduce thread-unsafe log database * op-supervisor: Add simple r/w locking * op-supervisor: Add comment * op-supervisor: Start switching to multi-entry database format * op-supervisor: Improve test to cover the case where a new block starts at a search checkpoint boundary (other than at the start of the file) * op-supervisor: Use a flag to indicate when log index should increment rather than a 1 byte increment amount. * op-supervisor: Comment out unused stuff to make lint happy. * op-supervisor: Load correct block number and log idx on init * op-supervisor: Refactor state to only hold context that can always be kept up to date. * op-supervisor: Support rewinding * op-supervisor: Remove TODO that probably won't be done there * op-supervisor: Require first log in block to have logIdx 0 * op-supervisor: Remove completed TODO. * op-supervisor: Improve testing for logs not existing * op-supervisor: Fix typo * op-supervisor: Tidy up TODOs and pending tests. * op-supervisor: Add invariant assertions for db data * op-supervisor: Lock db in ClosestBlockInfo * op-supervisor: Label alerts * op-supervisor: Use a TruncatedHash for logs everywhere and make it a fixed size array. * op-supervisor: Separate serialization of initating events * op-supervisor: Separate serialization of other event types and enforce type code. * op-supervisor: Introduce entry type * op-supervisor: Split out an entry database * op-supervisor: Introduce structs for entry types * op-supervisor: Use a struct for CanonicalHash too --- op-supervisor/supervisor/backend/db/db.go | 404 ++++++++++++ .../backend/db/db_invariants_test.go | 148 +++++ .../supervisor/backend/db/db_test.go | 621 ++++++++++++++++++ .../supervisor/backend/db/entries.go | 141 ++++ .../supervisor/backend/db/entrydb/entry_db.go | 84 +++ .../backend/db/entrydb/entry_db_test.go | 84 +++ .../supervisor/backend/db/iterator.go | 60 ++ 7 files changed, 1542 insertions(+) create mode 100644 op-supervisor/supervisor/backend/db/db.go create mode 100644 op-supervisor/supervisor/backend/db/db_invariants_test.go create mode 100644 op-supervisor/supervisor/backend/db/db_test.go create mode 100644 op-supervisor/supervisor/backend/db/entries.go create mode 100644 op-supervisor/supervisor/backend/db/entrydb/entry_db.go create mode 100644 op-supervisor/supervisor/backend/db/entrydb/entry_db_test.go create mode 100644 op-supervisor/supervisor/backend/db/iterator.go diff --git a/op-supervisor/supervisor/backend/db/db.go b/op-supervisor/supervisor/backend/db/db.go new file mode 100644 index 000000000000..67620afdea5c --- /dev/null +++ b/op-supervisor/supervisor/backend/db/db.go @@ -0,0 +1,404 @@ +package db + +import ( + "errors" + "fmt" + "io" + "math" + "sync" + + "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/db/entrydb" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" +) + +const ( + searchCheckpointFrequency = 256 + + eventFlagIncrementLogIdx = byte(1) + //eventFlagHasExecutingMessage = byte(1) << 1 +) + +const ( + typeSearchCheckpoint byte = iota + typeCanonicalHash + typeInitiatingEvent + typeExecutingLink + typeExecutingCheck +) + +var ( + ErrLogOutOfOrder = errors.New("log out of order") + ErrDataCorruption = errors.New("data corruption") +) + +type TruncatedHash [20]byte + +type Metrics interface { + RecordEntryCount(count int64) + RecordSearchEntriesRead(count int64) +} + +type logContext struct { + blockNum uint64 + logIdx uint32 +} + +type entryStore interface { + Size() int64 + Read(idx int64) (entrydb.Entry, error) + Append(entries ...entrydb.Entry) error + Truncate(idx int64) error + Close() error +} + +// DB implements an append only database for log data and cross-chain dependencies. +// +// To keep the append-only format, reduce data size, and support reorg detection and registering of executing-messages: +// +// Use a fixed 24 bytes per entry. +// +// Data is an append-only log, that can be binary searched for any necessary event data. +// +// Rules: +// if entry_index % 256 == 0: must be type 0. For easy binary search. +// type 1 always adjacent to type 0 +// type 2 "diff" values are offsets from type 0 values (always within 256 entries range) +// type 3 always after type 2 +// type 4 always after type 3 +// +// Types ( = 1 byte): +// type 0: "search checkpoint" = 20 bytes +// type 1: "canonical hash" = 21 bytes +// type 2: "initiating event" = 23 bytes +// type 3: "executing link" = 24 bytes +// type 4: "executing check" = 21 bytes +// other types: future compat. E.g. for linking to L1, registering block-headers as a kind of initiating-event, tracking safe-head progression, etc. +// +// Right-pad each entry that is not 24 bytes. +// +// event-flags: each bit represents a boolean value, currently only two are defined +// * event-flags & 0x01 - true if the log index should increment. Should only be false when the event is immediately after a search checkpoint and canonical hash +// * event-flags & 0x02 - true if the initiating event has an executing link that should follow. Allows detecting when the executing link failed to write. +// event-hash: H(origin, timestamp, payloadhash); enough to check identifier matches & payload matches. +type DB struct { + log log.Logger + m Metrics + store entryStore + rwLock sync.RWMutex + + lastEntryContext logContext +} + +func NewFromFile(logger log.Logger, m Metrics, path string) (*DB, error) { + store, err := entrydb.NewEntryDB(path) + if err != nil { + return nil, fmt.Errorf("failed to open DB: %w", err) + } + db := &DB{ + log: logger, + m: m, + store: store, + } + if err := db.init(); err != nil { + return nil, fmt.Errorf("failed to init database: %w", err) + } + return db, nil +} + +func (db *DB) lastEntryIdx() int64 { + return db.store.Size() - 1 +} + +func (db *DB) init() error { + db.updateEntryCountMetric() + if db.lastEntryIdx() < 0 { + // Database is empty so no context to load + return nil + } + lastCheckpoint := (db.lastEntryIdx() / searchCheckpointFrequency) * searchCheckpointFrequency + i, err := db.newIterator(lastCheckpoint) + if err != nil { + return fmt.Errorf("failed to create iterator at last search checkpoint: %w", err) + } + // Read all entries until the end of the file + for { + _, _, _, err := i.NextLog() + if errors.Is(err, io.EOF) { + break + } else if err != nil { + return fmt.Errorf("failed to init from existing entries: %w", err) + } + } + db.lastEntryContext = i.current + return nil +} + +func (db *DB) updateEntryCountMetric() { + db.m.RecordEntryCount(db.lastEntryIdx() + 1) +} + +// ClosestBlockInfo returns the block number and hash of the highest recorded block at or before blockNum. +// Since block data is only recorded in search checkpoints, this may return an earlier block even if log data is +// recorded for the requested block. +func (db *DB) ClosestBlockInfo(blockNum uint64) (uint64, TruncatedHash, error) { + db.rwLock.RLock() + defer db.rwLock.RUnlock() + checkpointIdx, err := db.searchCheckpoint(blockNum, math.MaxUint32) + if err != nil { + return 0, TruncatedHash{}, fmt.Errorf("no checkpoint at or before block %v found: %w", blockNum, err) + } + checkpoint, err := db.readSearchCheckpoint(checkpointIdx) + if err != nil { + return 0, TruncatedHash{}, fmt.Errorf("failed to reach checkpoint: %w", err) + } + entry, err := db.readCanonicalHash(checkpointIdx + 1) + if err != nil { + return 0, TruncatedHash{}, fmt.Errorf("failed to read canonical hash: %w", err) + } + return checkpoint.blockNum, entry.hash, nil +} + +// Contains return true iff the specified logHash is recorded in the specified blockNum and logIdx. +// logIdx is the index of the log in the array of all logs the block. +func (db *DB) Contains(blockNum uint64, logIdx uint32, logHash TruncatedHash) (bool, error) { + db.rwLock.RLock() + defer db.rwLock.RUnlock() + db.log.Trace("Checking for log", "blockNum", blockNum, "logIdx", logIdx, "hash", logHash) + entryIdx, err := db.searchCheckpoint(blockNum, logIdx) + if errors.Is(err, io.EOF) { + // Did not find a checkpoint to start reading from so the log cannot be present. + return false, nil + } else if err != nil { + return false, err + } + + i, err := db.newIterator(entryIdx) + if err != nil { + return false, fmt.Errorf("failed to create iterator: %w", err) + } + db.log.Trace("Starting search", "entry", entryIdx, "blockNum", i.current.blockNum, "logIdx", i.current.logIdx) + defer func() { + db.m.RecordSearchEntriesRead(i.entriesRead) + }() + for { + evtBlockNum, evtLogIdx, evtHash, err := i.NextLog() + if errors.Is(err, io.EOF) { + // Reached end of log without finding the event + return false, nil + } else if err != nil { + return false, fmt.Errorf("failed to read next log: %w", err) + } + if evtBlockNum == blockNum && evtLogIdx == logIdx { + db.log.Trace("Found initiatingEvent", "blockNum", evtBlockNum, "logIdx", evtLogIdx, "hash", evtHash) + // Found the requested block and log index, check if the hash matches + return evtHash == logHash, nil + } + if evtBlockNum > blockNum || (evtBlockNum == blockNum && evtLogIdx > logIdx) { + // Progressed past the requested log without finding it. + return false, nil + } + } +} + +func (db *DB) newIterator(startCheckpointEntry int64) (*iterator, error) { + // TODO(optimism#10857): Handle starting from a checkpoint after initiating-event but before its executing-link + // Will need to read the entry prior to the checkpoint to get the initiating event info + current, err := db.readSearchCheckpoint(startCheckpointEntry) + if err != nil { + return nil, fmt.Errorf("failed to read search checkpoint entry %v: %w", startCheckpointEntry, err) + } + i := &iterator{ + db: db, + // +2 to skip the initial search checkpoint and the canonical hash event after it + nextEntryIdx: startCheckpointEntry + 2, + current: logContext{ + blockNum: current.blockNum, + logIdx: current.logIdx, + }, + } + return i, nil +} + +// searchCheckpoint performs a binary search of the searchCheckpoint entries to find the closest one at or before +// the requested log. +// Returns the index of the searchCheckpoint to begin reading from or an error +func (db *DB) searchCheckpoint(blockNum uint64, logIdx uint32) (int64, error) { + n := (db.lastEntryIdx() / searchCheckpointFrequency) + 1 + // Define x[-1] < target and x[n] >= target. + // Invariant: x[i-1] < target, x[j] >= target. + i, j := int64(0), n + for i < j { + h := int64(uint64(i+j) >> 1) // avoid overflow when computing h + checkpoint, err := db.readSearchCheckpoint(h * searchCheckpointFrequency) + if err != nil { + return 0, fmt.Errorf("failed to read entry %v: %w", h, err) + } + // i ≤ h < j + if checkpoint.blockNum < blockNum || (checkpoint.blockNum == blockNum && checkpoint.logIdx < logIdx) { + i = h + 1 // preserves x[i-1] < target + } else { + j = h // preserves x[j] >= target + } + } + if i < n { + checkpoint, err := db.readSearchCheckpoint(i * searchCheckpointFrequency) + if err != nil { + return 0, fmt.Errorf("failed to read entry %v: %w", i, err) + } + if checkpoint.blockNum == blockNum && checkpoint.logIdx == logIdx { + // Found entry at requested block number and log index + return i * searchCheckpointFrequency, nil + } + } + if i == 0 { + // There are no checkpoints before the requested blocks + return 0, io.EOF + } + // Not found, need to start reading from the entry prior + return (i - 1) * searchCheckpointFrequency, nil +} + +func (db *DB) AddLog(logHash TruncatedHash, block eth.BlockID, timestamp uint64, logIdx uint32) error { + db.rwLock.Lock() + defer db.rwLock.Unlock() + postState := logContext{ + blockNum: block.Number, + logIdx: logIdx, + } + if block.Number == 0 { + return fmt.Errorf("%w: should not have logs in block 0", ErrLogOutOfOrder) + } + if db.lastEntryContext.blockNum > block.Number { + return fmt.Errorf("%w: adding block %v, head block: %v", ErrLogOutOfOrder, block.Number, db.lastEntryContext.blockNum) + } + if db.lastEntryContext.blockNum == block.Number && db.lastEntryContext.logIdx+1 != logIdx { + return fmt.Errorf("%w: adding log %v in block %v, but currently at log %v", ErrLogOutOfOrder, logIdx, block.Number, db.lastEntryContext.logIdx) + } + if db.lastEntryContext.blockNum < block.Number && logIdx != 0 { + return fmt.Errorf("%w: adding log %v as first log in block %v", ErrLogOutOfOrder, logIdx, block.Number) + } + if (db.lastEntryIdx()+1)%searchCheckpointFrequency == 0 { + if err := db.writeSearchCheckpoint(block.Number, logIdx, timestamp, block.Hash); err != nil { + return fmt.Errorf("failed to write search checkpoint: %w", err) + } + db.lastEntryContext = postState + } + + if err := db.writeInitiatingEvent(postState, logHash); err != nil { + return err + } + db.lastEntryContext = postState + db.updateEntryCountMetric() + return nil +} + +// Rewind the database to remove any blocks after headBlockNum +// The block at headBlockNum itself is not removed. +func (db *DB) Rewind(headBlockNum uint64) error { + db.rwLock.Lock() + defer db.rwLock.Unlock() + if headBlockNum >= db.lastEntryContext.blockNum { + // Nothing to do + return nil + } + // Find the last checkpoint before the block to remove + idx, err := db.searchCheckpoint(headBlockNum+1, 0) + if errors.Is(err, io.EOF) { + // Requested a block prior to the first checkpoint + // Delete everything without scanning forward + idx = -1 + } else if err != nil { + return fmt.Errorf("failed to find checkpoint prior to block %v: %w", headBlockNum, err) + } else { + // Scan forward from the checkpoint to find the first entry about a block after headBlockNum + i, err := db.newIterator(idx) + if err != nil { + return fmt.Errorf("failed to create iterator when searching for rewind point: %w", err) + } + // If we don't find any useful logs after the checkpoint, we should delete the checkpoint itself + // So move our delete marker back to include it as a starting point + idx-- + for { + blockNum, _, _, err := i.NextLog() + if errors.Is(err, io.EOF) { + // Reached end of file, we need to keep everything + return nil + } else if err != nil { + return fmt.Errorf("failed to find rewind point: %w", err) + } + if blockNum > headBlockNum { + // Found the first entry we don't need, so stop searching and delete everything after idx + break + } + // Otherwise we need all of the entries the iterator just read + idx = i.nextEntryIdx - 1 + } + } + // Truncate to contain idx+1 entries, since indices are 0 based, this deletes everything after idx + if err := db.store.Truncate(idx); err != nil { + return fmt.Errorf("failed to truncate to block %v: %w", headBlockNum, err) + } + // Use db.init() to find the log context for the new latest log entry + if err := db.init(); err != nil { + return fmt.Errorf("failed to find new last entry context: %w", err) + } + return nil +} + +// writeSearchCheckpoint appends search checkpoint and canonical hash entry to the log +// type 0: "search checkpoint" = 20 bytes +// type 1: "canonical hash" = 21 bytes +func (db *DB) writeSearchCheckpoint(blockNum uint64, logIdx uint32, timestamp uint64, blockHash common.Hash) error { + entry := newSearchCheckpoint(blockNum, logIdx, timestamp).encode() + if err := db.store.Append(entry); err != nil { + return err + } + return db.writeCanonicalHash(blockHash) +} + +func (db *DB) readSearchCheckpoint(entryIdx int64) (searchCheckpoint, error) { + data, err := db.store.Read(entryIdx) + if err != nil { + return searchCheckpoint{}, fmt.Errorf("failed to read entry %v: %w", entryIdx, err) + } + return newSearchCheckpointFromEntry(data) +} + +// writeCanonicalHash appends a canonical hash entry to the log +// type 1: "canonical hash" = 21 bytes +func (db *DB) writeCanonicalHash(blockHash common.Hash) error { + return db.store.Append(newCanonicalHash(TruncateHash(blockHash)).encode()) +} + +func (db *DB) readCanonicalHash(entryIdx int64) (canonicalHash, error) { + data, err := db.store.Read(entryIdx) + if err != nil { + return canonicalHash{}, fmt.Errorf("failed to read entry %v: %w", entryIdx, err) + } + if data[0] != typeCanonicalHash { + return canonicalHash{}, fmt.Errorf("%w: expected canonical hash at entry %v but was type %v", ErrDataCorruption, entryIdx, data[0]) + } + return newCanonicalHashFromEntry(data) +} + +// writeInitiatingEvent appends an initiating event to the log +// type 2: "initiating event" = 23 bytes +func (db *DB) writeInitiatingEvent(postState logContext, logHash TruncatedHash) error { + evt, err := newInitiatingEvent(db.lastEntryContext, postState.blockNum, postState.logIdx, logHash) + if err != nil { + return err + } + return db.store.Append(evt.encode()) +} + +func TruncateHash(hash common.Hash) TruncatedHash { + var truncated TruncatedHash + copy(truncated[:], hash[0:20]) + return truncated +} + +func (db *DB) Close() error { + return db.store.Close() +} diff --git a/op-supervisor/supervisor/backend/db/db_invariants_test.go b/op-supervisor/supervisor/backend/db/db_invariants_test.go new file mode 100644 index 000000000000..7544acd75ce0 --- /dev/null +++ b/op-supervisor/supervisor/backend/db/db_invariants_test.go @@ -0,0 +1,148 @@ +package db + +import ( + "fmt" + "io" + "os" + "testing" + + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/db/entrydb" + "github.com/stretchr/testify/require" +) + +type statInvariant func(stat os.FileInfo, m *stubMetrics) error +type entryInvariant func(entryIdx int, entry entrydb.Entry, entries []entrydb.Entry, m *stubMetrics) error + +// checkDBInvariants reads the database log directly and asserts a set of invariants on the data. +func checkDBInvariants(t *testing.T, dbPath string, m *stubMetrics) { + stat, err := os.Stat(dbPath) + require.NoError(t, err) + + statInvariants := []statInvariant{ + invariantFileSizeMultipleOfEntrySize, + invariantFileSizeMatchesEntryCountMetric, + } + for _, invariant := range statInvariants { + require.NoError(t, invariant(stat, m)) + } + + // Read all entries as binary blobs + file, err := os.OpenFile(dbPath, os.O_RDONLY, 0o644) + require.NoError(t, err) + entries := make([]entrydb.Entry, stat.Size()/entrydb.EntrySize) + for i := range entries { + n, err := io.ReadFull(file, entries[i][:]) + require.NoErrorf(t, err, "failed to read entry %v", i) + require.EqualValuesf(t, entrydb.EntrySize, n, "read wrong length for entry %v", i) + } + + entryInvariants := []entryInvariant{ + invariantSearchCheckpointOnlyAtFrequency, + invariantSearchCheckpointAtEverySearchCheckpointFrequency, + invariantCanonicalHashAfterEverySearchCheckpoint, + invariantSearchCheckpointBeforeEveryCanonicalHash, + invariantIncrementLogIdxIfNotImmediatelyAfterCanonicalHash, + } + for i, entry := range entries { + for _, invariant := range entryInvariants { + err := invariant(i, entry, entries, m) + if err != nil { + require.NoErrorf(t, err, "Invariant breached: \n%v", fmtEntries(entries)) + } + } + } +} + +func fmtEntries(entries []entrydb.Entry) string { + out := "" + for i, entry := range entries { + out += fmt.Sprintf("%v: %x\n", i, entry) + } + return out +} + +func invariantFileSizeMultipleOfEntrySize(stat os.FileInfo, _ *stubMetrics) error { + size := stat.Size() + if size%entrydb.EntrySize != 0 { + return fmt.Errorf("expected file size to be a multiple of entry size (%v) but was %v", entrydb.EntrySize, size) + } + return nil +} + +func invariantFileSizeMatchesEntryCountMetric(stat os.FileInfo, m *stubMetrics) error { + size := stat.Size() + if m.entryCount*entrydb.EntrySize != size { + return fmt.Errorf("expected file size to be entryCount (%v) * entrySize (%v) = %v but was %v", m.entryCount, entrydb.EntrySize, m.entryCount*entrydb.EntrySize, size) + } + return nil +} + +func invariantSearchCheckpointOnlyAtFrequency(entryIdx int, entry entrydb.Entry, entries []entrydb.Entry, m *stubMetrics) error { + if entry[0] != typeSearchCheckpoint { + return nil + } + if entryIdx%searchCheckpointFrequency != 0 { + return fmt.Errorf("should only have search checkpoints every %v entries but found at entry %v", searchCheckpointFrequency, entryIdx) + } + return nil +} + +func invariantSearchCheckpointAtEverySearchCheckpointFrequency(entryIdx int, entry entrydb.Entry, entries []entrydb.Entry, m *stubMetrics) error { + if entryIdx%searchCheckpointFrequency == 0 && entry[0] != typeSearchCheckpoint { + return fmt.Errorf("should have search checkpoints every %v entries but entry %v was %x", searchCheckpointFrequency, entryIdx, entry) + } + return nil +} + +func invariantCanonicalHashAfterEverySearchCheckpoint(entryIdx int, entry entrydb.Entry, entries []entrydb.Entry, m *stubMetrics) error { + if entry[0] != typeSearchCheckpoint { + return nil + } + if entryIdx+1 >= len(entries) { + return fmt.Errorf("expected canonical hash after search checkpoint at entry %v but no further entries found", entryIdx) + } + nextEntry := entries[entryIdx+1] + if nextEntry[0] != typeCanonicalHash { + return fmt.Errorf("expected canonical hash after search checkpoint at entry %v but got %x", entryIdx, nextEntry) + } + return nil +} + +// invariantSearchCheckpointBeforeEveryCanonicalHash ensures we don't have extra canonical-hash entries +func invariantSearchCheckpointBeforeEveryCanonicalHash(entryIdx int, entry entrydb.Entry, entries []entrydb.Entry, m *stubMetrics) error { + if entry[0] != typeCanonicalHash { + return nil + } + if entryIdx == 0 { + return fmt.Errorf("expected search checkpoint before canonical hash at entry %v but no previous entries present", entryIdx) + } + prevEntry := entries[entryIdx-1] + if prevEntry[0] != typeSearchCheckpoint { + return fmt.Errorf("expected search checkpoint before canonical hash at entry %v but got %x", entryIdx, prevEntry) + } + return nil +} + +func invariantIncrementLogIdxIfNotImmediatelyAfterCanonicalHash(entryIdx int, entry entrydb.Entry, entries []entrydb.Entry, m *stubMetrics) error { + if entry[0] != typeInitiatingEvent { + return nil + } + if entryIdx == 0 { + return fmt.Errorf("found initiating event at index %v before any search checkpoint", entryIdx) + } + blockDiff := entry[1] + flags := entry[2] + incrementsLogIdx := flags&eventFlagIncrementLogIdx != 0 + prevEntry := entries[entryIdx-1] + prevEntryIsCanonicalHash := prevEntry[0] == typeCanonicalHash + if incrementsLogIdx && prevEntryIsCanonicalHash { + return fmt.Errorf("initiating event at index %v increments logIdx despite being immediately after canonical hash (prev entry %x)", entryIdx, prevEntry) + } + if incrementsLogIdx && blockDiff > 0 { + return fmt.Errorf("initiating event at index %v increments logIdx despite starting a new block", entryIdx) + } + if !incrementsLogIdx && !prevEntryIsCanonicalHash && blockDiff == 0 { + return fmt.Errorf("initiating event at index %v does not increment logIdx when block unchanged and not after canonical hash (prev entry %x)", entryIdx, prevEntry) + } + return nil +} diff --git a/op-supervisor/supervisor/backend/db/db_test.go b/op-supervisor/supervisor/backend/db/db_test.go new file mode 100644 index 000000000000..bb1c175e9b3a --- /dev/null +++ b/op-supervisor/supervisor/backend/db/db_test.go @@ -0,0 +1,621 @@ +package db + +import ( + "bytes" + "io" + "io/fs" + "os" + "path/filepath" + "testing" + + "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/ethereum-optimism/optimism/op-service/testlog" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" + "github.com/stretchr/testify/require" +) + +func createTruncatedHash(i int) TruncatedHash { + return TruncateHash(createHash(i)) +} + +func createHash(i int) common.Hash { + data := bytes.Repeat([]byte{byte(i)}, common.HashLength) + return common.BytesToHash(data) +} + +func TestErrorOpeningDatabase(t *testing.T) { + dir := t.TempDir() + _, err := NewFromFile(testlog.Logger(t, log.LvlInfo), &stubMetrics{}, filepath.Join(dir, "missing-dir", "file.db")) + require.ErrorIs(t, err, os.ErrNotExist) +} + +func runDBTest(t *testing.T, setup func(t *testing.T, db *DB, m *stubMetrics), assert func(t *testing.T, db *DB, m *stubMetrics)) { + createDb := func(t *testing.T, dir string) (*DB, *stubMetrics, string) { + logger := testlog.Logger(t, log.LvlTrace) + path := filepath.Join(dir, "test.db") + m := &stubMetrics{} + db, err := NewFromFile(logger, m, path) + require.NoError(t, err, "Failed to create database") + t.Cleanup(func() { + err := db.Close() + if err != nil { + require.ErrorIs(t, err, fs.ErrClosed) + } + }) + return db, m, path + } + + t.Run("New", func(t *testing.T) { + db, m, _ := createDb(t, t.TempDir()) + setup(t, db, m) + assert(t, db, m) + }) + + t.Run("Existing", func(t *testing.T) { + dir := t.TempDir() + db, m, path := createDb(t, dir) + setup(t, db, m) + // Close and recreate the database + require.NoError(t, db.Close()) + checkDBInvariants(t, path, m) + + db2, m, path := createDb(t, dir) + assert(t, db2, m) + checkDBInvariants(t, path, m) + }) +} + +func TestEmptyDbDoesNotFindEntry(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) {}, + func(t *testing.T, db *DB, m *stubMetrics) { + requireNotContains(t, db, 0, 0, createHash(1)) + requireNotContains(t, db, 0, 0, common.Hash{}) + }) +} + +func TestAddLog(t *testing.T) { + t.Run("BlockZero", func(t *testing.T) { + // There are no logs in the genesis block so recording an entry for block 0 should be rejected. + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) {}, + func(t *testing.T, db *DB, m *stubMetrics) { + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 0}, 5000, 0) + require.ErrorIs(t, err, ErrLogOutOfOrder) + }) + }) + + t.Run("FirstEntry", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0) + require.NoError(t, err) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + requireContains(t, db, 15, 0, createHash(1)) + }) + }) + + t.Run("MultipleEntriesFromSameBlock", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0) + require.NoError(t, err) + err = db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 1) + require.NoError(t, err) + err = db.AddLog(createTruncatedHash(3), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 2) + require.NoError(t, err) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + require.EqualValues(t, 5, m.entryCount, "should not output new searchCheckpoint for every log") + requireContains(t, db, 15, 0, createHash(1)) + requireContains(t, db, 15, 1, createHash(2)) + requireContains(t, db, 15, 2, createHash(3)) + }) + }) + + t.Run("MultipleEntriesFromMultipleBlocks", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0) + require.NoError(t, err) + err = db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 1) + require.NoError(t, err) + err = db.AddLog(createTruncatedHash(3), eth.BlockID{Hash: createHash(16), Number: 16}, 5002, 0) + require.NoError(t, err) + err = db.AddLog(createTruncatedHash(4), eth.BlockID{Hash: createHash(16), Number: 16}, 5002, 1) + require.NoError(t, err) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + require.EqualValues(t, 6, m.entryCount, "should not output new searchCheckpoint for every block") + requireContains(t, db, 15, 0, createHash(1)) + requireContains(t, db, 15, 1, createHash(2)) + requireContains(t, db, 16, 0, createHash(3)) + requireContains(t, db, 16, 1, createHash(4)) + }) + }) + + t.Run("ErrorWhenBeforeCurrentBlock", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0) + require.NoError(t, err) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(14), Number: 14}, 4998, 0) + require.ErrorIs(t, err, ErrLogOutOfOrder) + }) + }) + + t.Run("ErrorWhenBeforeCurrentBlockButAfterLastCheckpoint", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(13), Number: 13}, 5000, 0) + require.NoError(t, err) + err = db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0) + require.NoError(t, err) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(14), Number: 14}, 4998, 0) + require.ErrorIs(t, err, ErrLogOutOfOrder) + }) + }) + + t.Run("ErrorWhenBeforeCurrentLogEvent", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 1)) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(14), Number: 15}, 4998, 0) + require.ErrorIs(t, err, ErrLogOutOfOrder) + }) + }) + + t.Run("ErrorWhenBeforeCurrentLogEventButAfterLastCheckpoint", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0) + require.NoError(t, err) + err = db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 1) + require.NoError(t, err) + err = db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 2) + require.NoError(t, err) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(14), Number: 15}, 4998, 1) + require.ErrorIs(t, err, ErrLogOutOfOrder) + }) + }) + + t.Run("ErrorWhenAtCurrentLogEvent", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 1)) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 4998, 1) + require.ErrorIs(t, err, ErrLogOutOfOrder) + }) + }) + + t.Run("ErrorWhenAtCurrentLogEventButAfterLastCheckpoint", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 1)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 2)) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(14), Number: 15}, 4998, 2) + require.ErrorIs(t, err, ErrLogOutOfOrder) + }) + }) + + t.Run("ErrorWhenSkippingLogEvent", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0) + require.NoError(t, err) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 4998, 2) + require.ErrorIs(t, err, ErrLogOutOfOrder) + }) + }) + + t.Run("ErrorWhenFirstLogIsNotLogIdxZero", func(t *testing.T) { + runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) {}, + func(t *testing.T, db *DB, m *stubMetrics) { + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 4998, 5) + require.ErrorIs(t, err, ErrLogOutOfOrder) + }) + }) + + t.Run("ErrorWhenFirstLogOfNewBlockIsNotLogIdxZero", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(14), Number: 14}, 4996, 0)) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 4998, 1) + require.ErrorIs(t, err, ErrLogOutOfOrder) + }) + }) + + t.Run("MultipleSearchCheckpoints", func(t *testing.T) { + block1 := eth.BlockID{Hash: createHash(11), Number: 11} + block2 := eth.BlockID{Hash: createHash(12), Number: 12} + block3 := eth.BlockID{Hash: createHash(15), Number: 15} + block4 := eth.BlockID{Hash: createHash(16), Number: 16} + // First checkpoint is at entry idx 0 + // Block 1 logs don't reach the second checkpoint + block1LogCount := searchCheckpointFrequency - 10 + // Block 2 logs extend to just after the third checkpoint + block2LogCount := searchCheckpointFrequency + 20 + // Block 3 logs extend to immediately before the fourth checkpoint + block3LogCount := searchCheckpointFrequency - 16 + block4LogCount := 2 + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + for i := 0; i < block1LogCount; i++ { + err := db.AddLog(createTruncatedHash(i), block1, 3000, uint32(i)) + require.NoErrorf(t, err, "failed to add log %v of block 1", i) + } + for i := 0; i < block2LogCount; i++ { + err := db.AddLog(createTruncatedHash(i), block2, 3002, uint32(i)) + require.NoErrorf(t, err, "failed to add log %v of block 2", i) + } + for i := 0; i < block3LogCount; i++ { + err := db.AddLog(createTruncatedHash(i), block3, 3004, uint32(i)) + require.NoErrorf(t, err, "failed to add log %v of block 3", i) + } + // Verify that we're right before the fourth checkpoint will be written. + // entryCount is the number of entries, so given 0 based indexing is the index of the next entry + // the first checkpoint is at entry 0, the second at entry searchCheckpointFrequency etc + // so the fourth is at entry 3*searchCheckpointFrequency + require.EqualValues(t, 3*searchCheckpointFrequency, m.entryCount) + for i := 0; i < block4LogCount; i++ { + err := db.AddLog(createTruncatedHash(i), block4, 3006, uint32(i)) + require.NoErrorf(t, err, "failed to add log %v of block 4", i) + } + }, + func(t *testing.T, db *DB, m *stubMetrics) { + // Check that we wrote additional search checkpoints + expectedCheckpointCount := 4 + expectedEntryCount := block1LogCount + block2LogCount + block3LogCount + block4LogCount + (2 * expectedCheckpointCount) + require.EqualValues(t, expectedEntryCount, m.entryCount) + // Check we can find all the logs. + for i := 0; i < block1LogCount; i++ { + requireContains(t, db, block1.Number, uint32(i), createHash(i)) + } + // Block 2 logs extend to just after the third checkpoint + for i := 0; i < block2LogCount; i++ { + requireContains(t, db, block2.Number, uint32(i), createHash(i)) + } + // Block 3 logs extend to immediately before the fourth checkpoint + for i := 0; i < block3LogCount; i++ { + requireContains(t, db, block3.Number, uint32(i), createHash(i)) + } + // Block 4 logs start immediately after the fourth checkpoint + for i := 0; i < block4LogCount; i++ { + requireContains(t, db, block4.Number, uint32(i), createHash(i)) + } + }) + }) +} + +func TestContains(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(3), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 1)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 2)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(52), Number: 52}, 500, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(3), eth.BlockID{Hash: createHash(52), Number: 52}, 500, 1)) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + // Should find added logs + requireContains(t, db, 50, 0, createHash(1)) + requireContains(t, db, 50, 1, createHash(3)) + requireContains(t, db, 50, 2, createHash(2)) + requireContains(t, db, 52, 0, createHash(1)) + requireContains(t, db, 52, 1, createHash(3)) + + // Should not find log when block number too low + requireNotContains(t, db, 49, 0, createHash(1)) + + // Should not find log when block number too high + requireNotContains(t, db, 51, 0, createHash(1)) + + // Should not find log when requested log after end of database + requireNotContains(t, db, 52, 2, createHash(3)) + requireNotContains(t, db, 53, 0, createHash(3)) + + // Should not find log when log index too high + requireNotContains(t, db, 50, 3, createHash(2)) + + // Should not find log when hash doesn't match log at block number and index + requireNotContains(t, db, 50, 0, createHash(5)) + }) +} + +func TestGetBlockInfo(t *testing.T) { + t.Run("ReturnsEOFWhenEmpty", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) {}, + func(t *testing.T, db *DB, m *stubMetrics) { + _, _, err := db.ClosestBlockInfo(10) + require.ErrorIs(t, err, io.EOF) + }) + }) + + t.Run("ReturnsEOFWhenRequestedBlockBeforeFirstSearchCheckpoint", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(11), Number: 11}, 500, 0) + require.NoError(t, err) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + _, _, err := db.ClosestBlockInfo(10) + require.ErrorIs(t, err, io.EOF) + }) + }) + + t.Run("ReturnFirstBlockInfo", func(t *testing.T) { + block := eth.BlockID{Hash: createHash(11), Number: 11} + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + err := db.AddLog(createTruncatedHash(1), block, 500, 0) + require.NoError(t, err) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + requireClosestBlockInfo(t, db, 11, block.Number, block.Hash) + requireClosestBlockInfo(t, db, 12, block.Number, block.Hash) + requireClosestBlockInfo(t, db, 200, block.Number, block.Hash) + }) + }) + + t.Run("ReturnClosestCheckpointBlockInfo", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + for i := 1; i < searchCheckpointFrequency+3; i++ { + block := eth.BlockID{Hash: createHash(i), Number: uint64(i)} + err := db.AddLog(createTruncatedHash(i), block, uint64(i)*2, 0) + require.NoError(t, err) + } + }, + func(t *testing.T, db *DB, m *stubMetrics) { + // Expect block from the first checkpoint + requireClosestBlockInfo(t, db, 1, 1, createHash(1)) + requireClosestBlockInfo(t, db, 10, 1, createHash(1)) + requireClosestBlockInfo(t, db, searchCheckpointFrequency-3, 1, createHash(1)) + + // Expect block from the second checkpoint + // 2 entries used for initial checkpoint but we start at block 1 + secondCheckpointBlockNum := searchCheckpointFrequency - 1 + requireClosestBlockInfo(t, db, uint64(secondCheckpointBlockNum), uint64(secondCheckpointBlockNum), createHash(secondCheckpointBlockNum)) + requireClosestBlockInfo(t, db, uint64(secondCheckpointBlockNum)+1, uint64(secondCheckpointBlockNum), createHash(secondCheckpointBlockNum)) + requireClosestBlockInfo(t, db, uint64(secondCheckpointBlockNum)+2, uint64(secondCheckpointBlockNum), createHash(secondCheckpointBlockNum)) + }) + }) +} + +func requireClosestBlockInfo(t *testing.T, db *DB, searchFor uint64, expectedBlockNum uint64, expectedHash common.Hash) { + blockNum, hash, err := db.ClosestBlockInfo(searchFor) + require.NoError(t, err) + require.Equal(t, expectedBlockNum, blockNum) + require.Equal(t, TruncateHash(expectedHash), hash) +} + +func requireContains(t *testing.T, db *DB, blockNum uint64, logIdx uint32, logHash common.Hash) { + m, ok := db.m.(*stubMetrics) + require.True(t, ok, "Did not get the expected metrics type") + result, err := db.Contains(blockNum, logIdx, TruncateHash(logHash)) + require.NoErrorf(t, err, "Error searching for log %v in block %v", logIdx, blockNum) + require.Truef(t, result, "Did not find log %v in block %v with hash %v", logIdx, blockNum, logHash) + require.LessOrEqual(t, m.entriesReadForSearch, int64(searchCheckpointFrequency), "Should not need to read more than between two checkpoints") + require.NotZero(t, m.entriesReadForSearch, "Must read at least some entries to find the log") +} + +func requireNotContains(t *testing.T, db *DB, blockNum uint64, logIdx uint32, logHash common.Hash) { + m, ok := db.m.(*stubMetrics) + require.True(t, ok, "Did not get the expected metrics type") + result, err := db.Contains(blockNum, logIdx, TruncateHash(logHash)) + require.NoErrorf(t, err, "Error searching for log %v in block %v", logIdx, blockNum) + require.Falsef(t, result, "Found unexpected log %v in block %v with hash %v", logIdx, blockNum, logHash) + require.LessOrEqual(t, m.entriesReadForSearch, int64(searchCheckpointFrequency), "Should not need to read more than between two checkpoints") +} + +func TestShouldRollBackInMemoryChangesOnWriteFailure(t *testing.T) { + t.Skip("TODO(optimism#10857)") +} + +func TestShouldRecoverWhenSearchCheckpointWrittenButNotCanonicalHash(t *testing.T) { + t.Skip("TODO(optimism#10857)") +} + +func TestShouldRecoverWhenPartialEntryWritten(t *testing.T) { + t.Skip("TODO(optimism#10857)") +} + +func TestShouldRecoverWhenInitiatingEventWrittenButNotExecutingLink(t *testing.T) { + t.Skip("TODO(optimism#10857)") +} + +func TestRewind(t *testing.T) { + t.Run("WhenEmpty", func(t *testing.T) { + runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) {}, + func(t *testing.T, db *DB, m *stubMetrics) { + require.NoError(t, db.Rewind(100)) + require.NoError(t, db.Rewind(0)) + }) + }) + + t.Run("AfterLastBlock", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 1)) + require.NoError(t, db.AddLog(createTruncatedHash(3), eth.BlockID{Hash: createHash(51), Number: 51}, 502, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(4), eth.BlockID{Hash: createHash(74), Number: 74}, 700, 0)) + require.NoError(t, db.Rewind(75)) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + requireContains(t, db, 50, 0, createHash(1)) + requireContains(t, db, 50, 1, createHash(2)) + requireContains(t, db, 51, 0, createHash(3)) + requireContains(t, db, 74, 0, createHash(4)) + }) + }) + + t.Run("BeforeFirstBlock", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 1)) + require.NoError(t, db.Rewind(25)) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + requireNotContains(t, db, 50, 0, createHash(1)) + requireNotContains(t, db, 50, 0, createHash(1)) + require.Zero(t, m.entryCount) + }) + }) + + t.Run("AtFirstBlock", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 1)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(51), Number: 51}, 502, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(51), Number: 51}, 502, 1)) + require.NoError(t, db.Rewind(50)) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + requireContains(t, db, 50, 0, createHash(1)) + requireContains(t, db, 50, 1, createHash(2)) + requireNotContains(t, db, 51, 0, createHash(1)) + requireNotContains(t, db, 51, 1, createHash(2)) + }) + }) + + t.Run("AtSecondCheckpoint", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + for i := uint32(0); m.entryCount < searchCheckpointFrequency; i++ { + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(50), Number: 50}, 500, i)) + } + require.EqualValues(t, searchCheckpointFrequency, m.entryCount) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(51), Number: 51}, 502, 0)) + require.EqualValues(t, searchCheckpointFrequency+3, m.entryCount, "Should have inserted new checkpoint and extra log") + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(51), Number: 51}, 502, 1)) + require.NoError(t, db.Rewind(50)) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + require.EqualValues(t, searchCheckpointFrequency, m.entryCount, "Should have deleted second checkpoint") + requireContains(t, db, 50, 0, createHash(1)) + requireContains(t, db, 50, 1, createHash(1)) + requireNotContains(t, db, 51, 0, createHash(1)) + requireNotContains(t, db, 51, 1, createHash(2)) + }) + }) + + t.Run("BetweenLogEntries", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 1)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 1)) + require.NoError(t, db.Rewind(55)) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + requireContains(t, db, 50, 0, createHash(1)) + requireContains(t, db, 50, 1, createHash(2)) + requireNotContains(t, db, 60, 0, createHash(1)) + requireNotContains(t, db, 60, 1, createHash(2)) + }) + }) + + t.Run("AtExistingLogEntry", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(59), Number: 59}, 500, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(59), Number: 59}, 500, 1)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 1)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(61), Number: 61}, 502, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(61), Number: 61}, 502, 1)) + require.NoError(t, db.Rewind(60)) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + requireContains(t, db, 59, 0, createHash(1)) + requireContains(t, db, 59, 1, createHash(2)) + requireContains(t, db, 60, 0, createHash(1)) + requireContains(t, db, 60, 1, createHash(2)) + requireNotContains(t, db, 61, 0, createHash(1)) + requireNotContains(t, db, 61, 1, createHash(2)) + }) + }) + + t.Run("AtLastEntry", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 1)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 1)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(70), Number: 70}, 502, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(70), Number: 70}, 502, 1)) + require.NoError(t, db.Rewind(70)) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + requireContains(t, db, 50, 0, createHash(1)) + requireContains(t, db, 50, 1, createHash(2)) + requireContains(t, db, 60, 0, createHash(1)) + requireContains(t, db, 60, 1, createHash(2)) + requireContains(t, db, 70, 0, createHash(1)) + requireContains(t, db, 70, 1, createHash(2)) + }) + }) + + t.Run("ReaddDeletedBlocks", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(59), Number: 59}, 500, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(59), Number: 59}, 500, 1)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 1)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(61), Number: 61}, 502, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(61), Number: 61}, 502, 1)) + require.NoError(t, db.Rewind(60)) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + err := db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(59), Number: 59}, 500, 1) + require.ErrorIs(t, err, ErrLogOutOfOrder, "Cannot add block before rewound head") + err = db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 1) + require.ErrorIs(t, err, ErrLogOutOfOrder, "Cannot add block that was rewound to") + err = db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(60), Number: 61}, 502, 0) + require.NoError(t, err, "Can re-add deleted block") + }) + }) +} + +type stubMetrics struct { + entryCount int64 + entriesReadForSearch int64 +} + +func (s *stubMetrics) RecordEntryCount(count int64) { + s.entryCount = count +} + +func (s *stubMetrics) RecordSearchEntriesRead(count int64) { + s.entriesReadForSearch = count +} + +var _ Metrics = (*stubMetrics)(nil) diff --git a/op-supervisor/supervisor/backend/db/entries.go b/op-supervisor/supervisor/backend/db/entries.go new file mode 100644 index 000000000000..dfab804aaf0b --- /dev/null +++ b/op-supervisor/supervisor/backend/db/entries.go @@ -0,0 +1,141 @@ +package db + +import ( + "encoding/binary" + "fmt" + "math" + + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/db/entrydb" +) + +type searchCheckpoint struct { + blockNum uint64 + logIdx uint32 + timestamp uint64 +} + +func newSearchCheckpoint(blockNum uint64, logIdx uint32, timestamp uint64) searchCheckpoint { + return searchCheckpoint{ + blockNum: blockNum, + logIdx: logIdx, + timestamp: timestamp, + } +} + +func newSearchCheckpointFromEntry(data entrydb.Entry) (searchCheckpoint, error) { + if data[0] != typeSearchCheckpoint { + return searchCheckpoint{}, fmt.Errorf("%w: attempting to decode search checkpoint but was type %v", ErrDataCorruption, data[0]) + } + return searchCheckpoint{ + blockNum: binary.LittleEndian.Uint64(data[1:9]), + logIdx: binary.LittleEndian.Uint32(data[9:13]), + timestamp: binary.LittleEndian.Uint64(data[13:21]), + }, nil +} + +// encode creates a search checkpoint entry +// type 0: "search checkpoint" = 20 bytes +func (s searchCheckpoint) encode() entrydb.Entry { + var data entrydb.Entry + data[0] = typeSearchCheckpoint + binary.LittleEndian.PutUint64(data[1:9], s.blockNum) + binary.LittleEndian.PutUint32(data[9:13], s.logIdx) + binary.LittleEndian.PutUint64(data[13:21], s.timestamp) + return data +} + +type canonicalHash struct { + hash TruncatedHash +} + +func newCanonicalHash(hash TruncatedHash) canonicalHash { + return canonicalHash{hash: hash} +} + +func newCanonicalHashFromEntry(data entrydb.Entry) (canonicalHash, error) { + if data[0] != typeCanonicalHash { + return canonicalHash{}, fmt.Errorf("%w: attempting to decode canonical hash but was type %v", ErrDataCorruption, data[0]) + } + var truncated TruncatedHash + copy(truncated[:], data[1:21]) + return newCanonicalHash(truncated), nil +} + +func (c canonicalHash) encode() entrydb.Entry { + var entry entrydb.Entry + entry[0] = typeCanonicalHash + copy(entry[1:21], c.hash[:]) + return entry +} + +type initiatingEvent struct { + blockDiff uint8 + incrementLogIdx bool + logHash TruncatedHash +} + +func newInitiatingEventFromEntry(data entrydb.Entry) (initiatingEvent, error) { + if data[0] != typeInitiatingEvent { + return initiatingEvent{}, fmt.Errorf("%w: attempting to decode initiating event but was type %v", ErrDataCorruption, data[0]) + } + blockNumDiff := data[1] + flags := data[2] + return initiatingEvent{ + blockDiff: blockNumDiff, + incrementLogIdx: flags&eventFlagIncrementLogIdx != 0, + logHash: TruncatedHash(data[3:23]), + }, nil +} + +func newInitiatingEvent(pre logContext, blockNum uint64, logIdx uint32, logHash TruncatedHash) (initiatingEvent, error) { + blockDiff := blockNum - pre.blockNum + if blockDiff > math.MaxUint8 { + // TODO(optimism#10857): Need to find a way to support this. + return initiatingEvent{}, fmt.Errorf("too many block skipped between %v and %v", pre.blockNum, blockNum) + } + + currLogIdx := pre.logIdx + if blockDiff > 0 { + currLogIdx = 0 + } + logDiff := logIdx - currLogIdx + if logDiff > 1 { + return initiatingEvent{}, fmt.Errorf("skipped logs between %v and %v", currLogIdx, logIdx) + } + + return initiatingEvent{ + blockDiff: uint8(blockDiff), + incrementLogIdx: logDiff > 0, + logHash: logHash, + }, nil +} + +// encode creates an initiating event entry +// type 2: "initiating event" = 23 bytes +func (i initiatingEvent) encode() entrydb.Entry { + var data entrydb.Entry + data[0] = typeInitiatingEvent + data[1] = i.blockDiff + flags := byte(0) + if i.incrementLogIdx { + // Set flag to indicate log idx needs to be incremented (ie we're not directly after a checkpoint) + flags = flags | eventFlagIncrementLogIdx + } + data[2] = flags + copy(data[3:23], i.logHash[:]) + return data +} + +func (i initiatingEvent) postContext(pre logContext) logContext { + post := logContext{ + blockNum: pre.blockNum + uint64(i.blockDiff), + logIdx: pre.logIdx, + } + if i.blockDiff > 0 { + post.logIdx = 0 + } + if i.incrementLogIdx { + post.logIdx++ + } + return post +} diff --git a/op-supervisor/supervisor/backend/db/entrydb/entry_db.go b/op-supervisor/supervisor/backend/db/entrydb/entry_db.go new file mode 100644 index 000000000000..29e135034a39 --- /dev/null +++ b/op-supervisor/supervisor/backend/db/entrydb/entry_db.go @@ -0,0 +1,84 @@ +package entrydb + +import ( + "errors" + "fmt" + "io" + "os" +) + +const ( + EntrySize = 24 +) + +type Entry [EntrySize]byte + +// dataAccess defines a minimal API required to manipulate the actual stored data. +// It is a subset of the os.File API but could (theoretically) be satisfied by an in-memory implementation for testing. +type dataAccess interface { + io.ReaderAt + io.Writer + io.Closer + Truncate(size int64) error +} + +type EntryDB struct { + data dataAccess + lastEntryIdx int64 +} + +func NewEntryDB(path string) (*EntryDB, error) { + file, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0o666) + if err != nil { + return nil, fmt.Errorf("failed to open database at %v: %w", path, err) + } + info, err := file.Stat() + if err != nil { + return nil, fmt.Errorf("failed to stat database at %v: %w", path, err) + } + lastEntryIdx := info.Size()/EntrySize - 1 + return &EntryDB{ + data: file, + lastEntryIdx: lastEntryIdx, + }, nil +} + +func (e *EntryDB) Size() int64 { + return e.lastEntryIdx + 1 +} + +func (e *EntryDB) Read(idx int64) (Entry, error) { + var out Entry + read, err := e.data.ReadAt(out[:], idx*EntrySize) + // Ignore io.EOF if we read the entire last entry as ReadAt may return io.EOF or nil when it reads the last byte + if err != nil && !(errors.Is(err, io.EOF) && read == EntrySize) { + return Entry{}, fmt.Errorf("failed to read entry %v: %w", idx, err) + } + return out, nil +} + +func (e *EntryDB) Append(entries ...Entry) error { + for _, entry := range entries { + if _, err := e.data.Write(entry[:]); err != nil { + // TODO(optimism#10857): When a write fails, need to revert any in memory changes and truncate back to the + // pre-write state. Likely need to batch writes for multiple entries into a single write akin to transactions + // to avoid leaving hanging entries without the entry that should follow them. + return err + } + e.lastEntryIdx++ + } + return nil +} + +func (e *EntryDB) Truncate(idx int64) error { + if err := e.data.Truncate((idx + 1) * EntrySize); err != nil { + return fmt.Errorf("failed to truncate to entry %v: %w", idx, err) + } + // Update the lastEntryIdx cache and then use db.init() to find the log context for the new latest log entry + e.lastEntryIdx = idx + return nil +} + +func (e *EntryDB) Close() error { + return e.data.Close() +} diff --git a/op-supervisor/supervisor/backend/db/entrydb/entry_db_test.go b/op-supervisor/supervisor/backend/db/entrydb/entry_db_test.go new file mode 100644 index 000000000000..0466884c1a87 --- /dev/null +++ b/op-supervisor/supervisor/backend/db/entrydb/entry_db_test.go @@ -0,0 +1,84 @@ +package entrydb + +import ( + "bytes" + "io" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestReadWrite(t *testing.T) { + t.Run("BasicReadWrite", func(t *testing.T) { + db := createEntryDB(t) + require.NoError(t, db.Append(createEntry(1))) + require.NoError(t, db.Append(createEntry(2))) + require.NoError(t, db.Append(createEntry(3))) + require.NoError(t, db.Append(createEntry(4))) + requireRead(t, db, 0, createEntry(1)) + requireRead(t, db, 1, createEntry(2)) + requireRead(t, db, 2, createEntry(3)) + requireRead(t, db, 3, createEntry(4)) + + // Check we can read out of order + requireRead(t, db, 1, createEntry(2)) + }) + + t.Run("ReadPastEndOfFileReturnsEOF", func(t *testing.T) { + db := createEntryDB(t) + _, err := db.Read(0) + require.ErrorIs(t, err, io.EOF) + }) + + t.Run("WriteMultiple", func(t *testing.T) { + db := createEntryDB(t) + require.NoError(t, db.Append( + createEntry(1), + createEntry(2), + createEntry(3), + )) + requireRead(t, db, 0, createEntry(1)) + requireRead(t, db, 1, createEntry(2)) + requireRead(t, db, 2, createEntry(3)) + }) +} + +func TestTruncate(t *testing.T) { + db := createEntryDB(t) + require.NoError(t, db.Append(createEntry(1))) + require.NoError(t, db.Append(createEntry(2))) + require.NoError(t, db.Append(createEntry(3))) + require.NoError(t, db.Append(createEntry(4))) + require.NoError(t, db.Append(createEntry(5))) + + require.NoError(t, db.Truncate(3)) + requireRead(t, db, 0, createEntry(1)) + requireRead(t, db, 1, createEntry(2)) + requireRead(t, db, 2, createEntry(3)) + + // 4 and 5 have been removed + _, err := db.Read(4) + require.ErrorIs(t, err, io.EOF) + _, err = db.Read(5) + require.ErrorIs(t, err, io.EOF) +} + +func requireRead(t *testing.T, db *EntryDB, idx int64, expected Entry) { + actual, err := db.Read(idx) + require.NoError(t, err) + require.Equal(t, expected, actual) +} + +func createEntry(i byte) Entry { + return Entry(bytes.Repeat([]byte{i}, EntrySize)) +} + +func createEntryDB(t *testing.T) *EntryDB { + db, err := NewEntryDB(filepath.Join(t.TempDir(), "entries.db")) + require.NoError(t, err) + t.Cleanup(func() { + require.NoError(t, db.Close()) + }) + return db +} diff --git a/op-supervisor/supervisor/backend/db/iterator.go b/op-supervisor/supervisor/backend/db/iterator.go new file mode 100644 index 000000000000..88c92623db7a --- /dev/null +++ b/op-supervisor/supervisor/backend/db/iterator.go @@ -0,0 +1,60 @@ +package db + +import ( + "fmt" + "io" +) + +type iterator struct { + db *DB + nextEntryIdx int64 + + current logContext + + entriesRead int64 +} + +func (i *iterator) NextLog() (blockNum uint64, logIdx uint32, evtHash TruncatedHash, outErr error) { + for i.nextEntryIdx <= i.db.lastEntryIdx() { + entryIdx := i.nextEntryIdx + entry, err := i.db.store.Read(entryIdx) + if err != nil { + outErr = fmt.Errorf("failed to read entry %v: %w", i, err) + return + } + i.nextEntryIdx++ + i.entriesRead++ + switch entry[0] { + case typeSearchCheckpoint: + current, err := newSearchCheckpointFromEntry(entry) + if err != nil { + outErr = fmt.Errorf("failed to parse search checkpoint at idx %v: %w", entryIdx, err) + return + } + i.current.blockNum = current.blockNum + i.current.logIdx = current.logIdx + case typeCanonicalHash: + // Skip + case typeInitiatingEvent: + evt, err := newInitiatingEventFromEntry(entry) + if err != nil { + outErr = fmt.Errorf("failed to parse initiating event at idx %v: %w", entryIdx, err) + return + } + i.current = evt.postContext(i.current) + blockNum = i.current.blockNum + logIdx = i.current.logIdx + evtHash = evt.logHash + return + case typeExecutingCheck: + // TODO(optimism#10857): Handle this properly + case typeExecutingLink: + // TODO(optimism#10857): Handle this properly + default: + outErr = fmt.Errorf("unknown entry type at idx %v %v", entryIdx, entry[0]) + return + } + } + outErr = io.EOF + return +} From 8894075c6af8acf1e0fa2a9e1238d3d14b50847b Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Tue, 25 Jun 2024 07:17:50 +1000 Subject: [PATCH 097/141] op-supervisor: Add op-supervisor build to CI (#10985) --- .circleci/config.yml | 39 +++++++++++++++++++ Makefile | 2 +- docker-bake.hcl | 17 ++++++++ op-supervisor/.gitignore | 1 + op-supervisor/Makefile | 24 ++++++++++++ ops/docker/op-stack-go/Dockerfile | 9 +++++ .../op-stack-go/Dockerfile.dockerignore | 1 + 7 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 op-supervisor/.gitignore create mode 100644 op-supervisor/Makefile diff --git a/.circleci/config.yml b/.circleci/config.yml index dea57afdaa6c..c5f83d410bcb 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1631,6 +1631,10 @@ workflows: name: op-service-tests module: op-service requires: ["go-mod-download"] + - go-test: + name: op-supervisor-tests + module: op-supervisor + requires: ["go-mod-download"] - go-e2e-test: name: op-e2e-HTTP-tests<< matrix.variant >> matrix: @@ -1686,6 +1690,7 @@ workflows: - op-program-tests - op-program-compat - op-service-tests + - op-supervisor-tests - op-service-rethdb-tests - op-e2e-HTTP-tests - op-e2e-fault-proof-tests @@ -1735,6 +1740,11 @@ workflows: docker_name: da-server docker_tags: <>,<> save_image_tag: <> # for devnet later + - docker-build: + name: op-supervisor-docker-build + docker_name: op-supervisor + docker_tags: <>,<> + # op-supervisor is not (yet) part of the devnet, we don't save it - cannon-prestate: requires: - go-mod-download @@ -1950,6 +1960,26 @@ workflows: - oplabs-gcr-release requires: - hold + - docker-build: + name: op-supervisor-docker-release + filters: + tags: + only: /^op-supervisor\/v.*/ + branches: + ignore: /.*/ + docker_name: op-supervisor + docker_tags: <> + requires: ['hold'] + platforms: "linux/amd64,linux/arm64" + publish: true + release: true + context: + - oplabs-gcr-release + - check-cross-platform: + name: op-supervisor-cross-platform + op_component: op-supervisor + requires: + - op-supervisor-docker-release - docker-build: name: chain-mon-docker-release filters: @@ -2136,6 +2166,15 @@ workflows: context: - oplabs-gcr - slack + - docker-build: + name: op-supervisor-docker-publish + docker_name: op-supervisor + docker_tags: <>,<> + platforms: "linux/amd64,linux/arm64" + publish: true + context: + - oplabs-gcr + - slack - docker-build: name: chain-mon-docker-publish docker_name: chain-mon diff --git a/Makefile b/Makefile index 174909d18faf..673066822abc 100644 --- a/Makefile +++ b/Makefile @@ -37,7 +37,7 @@ golang-docker: --progress plain \ --load \ -f docker-bake.hcl \ - op-node op-batcher op-proposer op-challenger op-dispute-mon + op-node op-batcher op-proposer op-challenger op-dispute-mon op-supervisor .PHONY: golang-docker docker-builder-clean: diff --git a/docker-bake.hcl b/docker-bake.hcl index 846e855e3776..3fe9fabaf172 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -61,6 +61,10 @@ variable "OP_PROGRAM_VERSION" { default = "${GIT_VERSION}" } +variable "OP_SUPERVISOR_VERSION" { + default = "${GIT_VERSION}" +} + variable "CANNON_VERSION" { default = "${GIT_VERSION}" } @@ -186,6 +190,19 @@ target "op-program" { tags = [for tag in split(",", IMAGE_TAGS) : "${REGISTRY}/${REPOSITORY}/op-program:${tag}"] } +target "op-supervisor" { + dockerfile = "ops/docker/op-stack-go/Dockerfile" + context = "." + args = { + GIT_COMMIT = "${GIT_COMMIT}" + GIT_DATE = "${GIT_DATE}" + OP_SUPERVISOR_VERSION = "${OP_SUPERVISOR_VERSION}" + } + target = "op-supervisor-target" + platforms = split(",", PLATFORMS) + tags = [for tag in split(",", IMAGE_TAGS) : "${REGISTRY}/${REPOSITORY}/op-supervisor:${tag}"] +} + target "cannon" { dockerfile = "ops/docker/op-stack-go/Dockerfile" context = "." diff --git a/op-supervisor/.gitignore b/op-supervisor/.gitignore new file mode 100644 index 000000000000..ba077a4031ad --- /dev/null +++ b/op-supervisor/.gitignore @@ -0,0 +1 @@ +bin diff --git a/op-supervisor/Makefile b/op-supervisor/Makefile new file mode 100644 index 000000000000..1f58b6f02384 --- /dev/null +++ b/op-supervisor/Makefile @@ -0,0 +1,24 @@ +GITCOMMIT ?= $(shell git rev-parse HEAD) +GITDATE ?= $(shell git show -s --format='%ct') +VERSION ?= v0.0.0 + +LDFLAGSSTRING +=-X main.GitCommit=$(GITCOMMIT) +LDFLAGSSTRING +=-X main.GitDate=$(GITDATE) +LDFLAGSSTRING +=-X main.Version=$(VERSION) +LDFLAGSSTRING +=-X main.Meta=$(VERSION_META) +LDFLAGS := -ldflags "$(LDFLAGSSTRING)" + + +op-supervisor: + env GO111MODULE=on GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) go build -v $(LDFLAGS) -o ./bin/op-supervisor ./cmd + +clean: + rm bin/op-supervisor + +test: + go test -v ./... + +.PHONY: \ + op-supervisor \ + clean \ + test diff --git a/ops/docker/op-stack-go/Dockerfile b/ops/docker/op-stack-go/Dockerfile index e026f3c663f1..848d5ecc720c 100644 --- a/ops/docker/op-stack-go/Dockerfile +++ b/ops/docker/op-stack-go/Dockerfile @@ -108,6 +108,11 @@ FROM --platform=$BUILDPLATFORM builder as da-server-builder RUN --mount=type=cache,target=/root/.cache/go-build cd op-plasma && make da-server \ GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE +FROM --platform=$BUILDPLATFORM builder as op-supervisor-builder +ARG OP_SUPERVISOR_VERSION=v0.0.0 +RUN --mount=type=cache,target=/root/.cache/go-build cd op-supervisor && make op-supervisor \ + GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_SUPERVISOR_VERSION" + FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE as cannon-target COPY --from=cannon-builder /app/cannon/bin/cannon /usr/local/bin/ CMD ["cannon"] @@ -157,3 +162,7 @@ CMD ["op-conductor"] FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE as da-server-target COPY --from=da-server-builder /app/op-plasma/bin/da-server /usr/local/bin/ CMD ["da-server"] + +FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE as op-supervisor-target +COPY --from=op-supervisor-builder /app/op-supervisor/bin/op-supervisor /usr/local/bin/ +ENTRYPOINT ["op-supervisor"] diff --git a/ops/docker/op-stack-go/Dockerfile.dockerignore b/ops/docker/op-stack-go/Dockerfile.dockerignore index 9512fe9fbc7c..e012262ad78a 100644 --- a/ops/docker/op-stack-go/Dockerfile.dockerignore +++ b/ops/docker/op-stack-go/Dockerfile.dockerignore @@ -17,6 +17,7 @@ !/op-program !/op-proposer !/op-service +!/op-supervisor !/op-wheel !/op-plasma !/go.mod From d5f9504e02c2975e9c9fb7b458ae5bd5d4884610 Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Tue, 25 Jun 2024 11:45:40 +1000 Subject: [PATCH 098/141] op-challenger: Fix vm execution time metric name (#10996) --- op-challenger/metrics/metrics.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/op-challenger/metrics/metrics.go b/op-challenger/metrics/metrics.go index 4f186f4c01e9..c46edcd67fcc 100644 --- a/op-challenger/metrics/metrics.go +++ b/op-challenger/metrics/metrics.go @@ -167,8 +167,8 @@ func NewMetrics() *Metrics { }), vmExecutionTime: factory.NewHistogramVec(prometheus.HistogramOpts{ Namespace: Namespace, - Name: "asterisc_execution_time", - Help: "Time (in seconds) to execute asterisc", + Name: "vm_execution_time", + Help: "Time (in seconds) to execute the fault proof VM", Buckets: append( []float64{1.0, 10.0}, prometheus.ExponentialBuckets(30.0, 2.0, 14)...), From 630cf349f253aaaf978db64e95c7ccc8e89059f8 Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Tue, 25 Jun 2024 16:59:30 +1000 Subject: [PATCH 099/141] op-supervisor: Add datadir option (#11000) Implement checks for required fields in config and add tests for them. --- op-service/metrics/cli.go | 4 +- op-service/oppprof/cli.go | 3 +- op-service/rpc/cli.go | 4 +- op-supervisor/cmd/main.go | 7 +-- op-supervisor/cmd/main_test.go | 32 +++++++++--- .../cli_config.go => config/config.go} | 45 ++++++++-------- op-supervisor/config/config_test.go | 52 +++++++++++++++++++ op-supervisor/flags/flags.go | 21 +++++++- op-supervisor/supervisor/cli_config_test.go | 12 ----- op-supervisor/supervisor/entrypoint.go | 5 +- op-supervisor/supervisor/service.go | 15 +++--- op-supervisor/supervisor/service_test.go | 5 +- 12 files changed, 145 insertions(+), 60 deletions(-) rename op-supervisor/{supervisor/cli_config.go => config/config.go} (55%) create mode 100644 op-supervisor/config/config_test.go delete mode 100644 op-supervisor/supervisor/cli_config_test.go diff --git a/op-service/metrics/cli.go b/op-service/metrics/cli.go index ac02e33bf0c6..dcbe3d0af2ed 100644 --- a/op-service/metrics/cli.go +++ b/op-service/metrics/cli.go @@ -17,6 +17,8 @@ const ( defaultListenPort = 7300 ) +var ErrInvalidPort = errors.New("invalid metrics port") + func DefaultCLIConfig() CLIConfig { return CLIConfig{ Enabled: false, @@ -59,7 +61,7 @@ func (m CLIConfig) Check() error { } if m.ListenPort < 0 || m.ListenPort > math.MaxUint16 { - return errors.New("invalid metrics port") + return ErrInvalidPort } return nil diff --git a/op-service/oppprof/cli.go b/op-service/oppprof/cli.go index 710cbeaaf764..d6ccb8566960 100644 --- a/op-service/oppprof/cli.go +++ b/op-service/oppprof/cli.go @@ -22,6 +22,7 @@ const ( defaultListenPort = 6060 ) +var ErrInvalidPort = errors.New("invalid pprof port") var allowedProfileTypes = []profileType{"cpu", "heap", "goroutine", "threadcreate", "block", "mutex", "allocs"} type profileType string @@ -122,7 +123,7 @@ func (m CLIConfig) Check() error { } if m.ListenPort < 0 || m.ListenPort > math.MaxUint16 { - return errors.New("invalid pprof port") + return ErrInvalidPort } return nil diff --git a/op-service/rpc/cli.go b/op-service/rpc/cli.go index 866dfd0336d7..99cb2dd6c9b2 100644 --- a/op-service/rpc/cli.go +++ b/op-service/rpc/cli.go @@ -14,6 +14,8 @@ const ( EnableAdminFlagName = "rpc.enable-admin" ) +var ErrInvalidPort = errors.New("invalid RPC port") + func CLIFlags(envPrefix string) []cli.Flag { return []cli.Flag{ &cli.StringFlag{ @@ -52,7 +54,7 @@ func DefaultCLIConfig() CLIConfig { func (c CLIConfig) Check() error { if c.ListenPort < 0 || c.ListenPort > math.MaxUint16 { - return errors.New("invalid RPC port") + return ErrInvalidPort } return nil diff --git a/op-supervisor/cmd/main.go b/op-supervisor/cmd/main.go index 9ad91994ad2d..01444e01b925 100644 --- a/op-supervisor/cmd/main.go +++ b/op-supervisor/cmd/main.go @@ -4,6 +4,7 @@ import ( "context" "os" + "github.com/ethereum-optimism/optimism/op-supervisor/config" "github.com/urfave/cli/v2" "github.com/ethereum/go-ethereum/log" @@ -41,7 +42,7 @@ func run(ctx context.Context, args []string, fn supervisor.MainFn) error { app.Name = "op-supervisor" app.Usage = "op-supervisor monitors cross-L2 interop messaging" app.Description = "The op-supervisor monitors cross-L2 interop messaging by pre-fetching events and then resolving the cross-L2 dependencies to answer safety queries." - app.Action = cliapp.LifecycleCmd(supervisor.Main(Version, fn)) + app.Action = cliapp.LifecycleCmd(supervisor.Main(app.Version, fn)) app.Commands = []*cli.Command{ { Name: "doc", @@ -51,6 +52,6 @@ func run(ctx context.Context, args []string, fn supervisor.MainFn) error { return app.RunContext(ctx, args) } -func fromConfig(ctx context.Context, cfg *supervisor.CLIConfig, logger log.Logger) (cliapp.Lifecycle, error) { - return supervisor.SupervisorFromCLIConfig(ctx, cfg, logger) +func fromConfig(ctx context.Context, cfg *config.Config, logger log.Logger) (cliapp.Lifecycle, error) { + return supervisor.SupervisorFromConfig(ctx, cfg, logger) } diff --git a/op-supervisor/cmd/main_test.go b/op-supervisor/cmd/main_test.go index 4ab3aa2fdc61..6a463a81275a 100644 --- a/op-supervisor/cmd/main_test.go +++ b/op-supervisor/cmd/main_test.go @@ -6,12 +6,17 @@ import ( "fmt" "testing" + "github.com/ethereum-optimism/optimism/op-supervisor/config" "github.com/stretchr/testify/require" "github.com/ethereum/go-ethereum/log" "github.com/ethereum-optimism/optimism/op-service/cliapp" - "github.com/ethereum-optimism/optimism/op-supervisor/supervisor" +) + +var ( + ValidL2RPCs = []string{"http;//localhost:8545"} + ValidDatadir = "./supervisor_test_datadir" ) func TestLogLevel(t *testing.T) { @@ -31,7 +36,7 @@ func TestLogLevel(t *testing.T) { func TestDefaultCLIOptionsMatchDefaultConfig(t *testing.T) { cfg := configForArgs(t, addRequiredArgs()) - defaultCfgTempl := supervisor.DefaultCLIConfig() + defaultCfgTempl := config.NewConfig(ValidL2RPCs, ValidDatadir) defaultCfg := *defaultCfgTempl defaultCfg.Version = Version require.Equal(t, defaultCfg, *cfg) @@ -50,6 +55,18 @@ func TestL2RPCs(t *testing.T) { }) } +func TestDatadir(t *testing.T) { + t.Run("Required", func(t *testing.T) { + verifyArgsInvalid(t, "flag datadir is required", addRequiredArgsExcept("--datadir")) + }) + + t.Run("Valid", func(t *testing.T) { + dir := "foo" + cfg := configForArgs(t, addRequiredArgsExcept("--datadir", "--datadir", dir)) + require.Equal(t, dir, cfg.Datadir) + }) +} + func TestMockRun(t *testing.T) { t.Run("Valid", func(t *testing.T) { cfg := configForArgs(t, addRequiredArgs("--mock-run")) @@ -62,18 +79,18 @@ func verifyArgsInvalid(t *testing.T, messageContains string, cliArgs []string) { require.ErrorContains(t, err, messageContains) } -func configForArgs(t *testing.T, cliArgs []string) *supervisor.CLIConfig { +func configForArgs(t *testing.T, cliArgs []string) *config.Config { _, cfg, err := dryRunWithArgs(cliArgs) require.NoError(t, err) return cfg } -func dryRunWithArgs(cliArgs []string) (log.Logger, *supervisor.CLIConfig, error) { - cfg := new(supervisor.CLIConfig) +func dryRunWithArgs(cliArgs []string) (log.Logger, *config.Config, error) { + cfg := new(config.Config) var logger log.Logger fullArgs := append([]string{"op-supervisor"}, cliArgs...) testErr := errors.New("dry-run") - err := run(context.Background(), fullArgs, func(ctx context.Context, config *supervisor.CLIConfig, log log.Logger) (cliapp.Lifecycle, error) { + err := run(context.Background(), fullArgs, func(ctx context.Context, config *config.Config, log log.Logger) (cliapp.Lifecycle, error) { logger = log cfg = config return nil, testErr @@ -106,7 +123,8 @@ func toArgList(req map[string]string) []string { func requiredArgs() map[string]string { args := map[string]string{ - "--l2-rpcs": "http://localhost:8545", + "--l2-rpcs": ValidL2RPCs[0], + "--datadir": ValidDatadir, } return args } diff --git a/op-supervisor/supervisor/cli_config.go b/op-supervisor/config/config.go similarity index 55% rename from op-supervisor/supervisor/cli_config.go rename to op-supervisor/config/config.go index 057ea00bf1c7..dbf723d55d3b 100644 --- a/op-supervisor/supervisor/cli_config.go +++ b/op-supervisor/config/config.go @@ -1,18 +1,20 @@ -package supervisor +package config import ( "errors" - "github.com/urfave/cli/v2" - oplog "github.com/ethereum-optimism/optimism/op-service/log" opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics" "github.com/ethereum-optimism/optimism/op-service/oppprof" oprpc "github.com/ethereum-optimism/optimism/op-service/rpc" - "github.com/ethereum-optimism/optimism/op-supervisor/flags" ) -type CLIConfig struct { +var ( + ErrMissingL2RPC = errors.New("must specify at least one L2 RPC") + ErrMissingDatadir = errors.New("must specify datadir") +) + +type Config struct { Version string LogConfig oplog.CLIConfig @@ -23,37 +25,34 @@ type CLIConfig struct { // MockRun runs the service with a mock backend MockRun bool - L2RPCs []string -} - -func CLIConfigFromCLI(ctx *cli.Context, version string) *CLIConfig { - return &CLIConfig{ - Version: version, - LogConfig: oplog.ReadCLIConfig(ctx), - MetricsConfig: opmetrics.ReadCLIConfig(ctx), - PprofConfig: oppprof.ReadCLIConfig(ctx), - RPC: oprpc.ReadCLIConfig(ctx), - MockRun: ctx.Bool(flags.MockRunFlag.Name), - L2RPCs: ctx.StringSlice(flags.L2RPCsFlag.Name), - } + L2RPCs []string + Datadir string } -func (c *CLIConfig) Check() error { +func (c *Config) Check() error { var result error result = errors.Join(result, c.MetricsConfig.Check()) result = errors.Join(result, c.PprofConfig.Check()) result = errors.Join(result, c.RPC.Check()) + if len(c.L2RPCs) == 0 { + result = errors.Join(result, ErrMissingL2RPC) + } + if c.Datadir == "" { + result = errors.Join(result, ErrMissingDatadir) + } return result } -func DefaultCLIConfig() *CLIConfig { - return &CLIConfig{ - Version: "", +// NewConfig creates a new config using default values whenever possible. +// Required options with no suitable default are passed as parameters. +func NewConfig(l2RPCs []string, datadir string) *Config { + return &Config{ LogConfig: oplog.DefaultCLIConfig(), MetricsConfig: opmetrics.DefaultCLIConfig(), PprofConfig: oppprof.DefaultCLIConfig(), RPC: oprpc.DefaultCLIConfig(), MockRun: false, - L2RPCs: flags.L2RPCsFlag.Value.Value(), + L2RPCs: l2RPCs, + Datadir: datadir, } } diff --git a/op-supervisor/config/config_test.go b/op-supervisor/config/config_test.go new file mode 100644 index 000000000000..ef84e4be81bd --- /dev/null +++ b/op-supervisor/config/config_test.go @@ -0,0 +1,52 @@ +package config + +import ( + "testing" + + "github.com/ethereum-optimism/optimism/op-service/metrics" + "github.com/ethereum-optimism/optimism/op-service/oppprof" + "github.com/ethereum-optimism/optimism/op-service/rpc" + "github.com/stretchr/testify/require" +) + +func TestDefaultConfigIsValid(t *testing.T) { + cfg := validConfig() + require.NoError(t, cfg.Check()) +} + +func TestRequireL2RPC(t *testing.T) { + cfg := validConfig() + cfg.L2RPCs = []string{} + require.ErrorIs(t, cfg.Check(), ErrMissingL2RPC) +} + +func TestRequireDatadir(t *testing.T) { + cfg := validConfig() + cfg.Datadir = "" + require.ErrorIs(t, cfg.Check(), ErrMissingDatadir) +} + +func TestValidateMetricsConfig(t *testing.T) { + cfg := validConfig() + cfg.MetricsConfig.Enabled = true + cfg.MetricsConfig.ListenPort = -1 + require.ErrorIs(t, cfg.Check(), metrics.ErrInvalidPort) +} + +func TestValidatePprofConfig(t *testing.T) { + cfg := validConfig() + cfg.PprofConfig.ListenEnabled = true + cfg.PprofConfig.ListenPort = -1 + require.ErrorIs(t, cfg.Check(), oppprof.ErrInvalidPort) +} + +func TestValidateRPCConfig(t *testing.T) { + cfg := validConfig() + cfg.RPC.ListenPort = -1 + require.ErrorIs(t, cfg.Check(), rpc.ErrInvalidPort) +} + +func validConfig() *Config { + // Should be valid using only the required arguments passed in via the constructor. + return NewConfig([]string{"http://localhost:8545"}, "./supervisor_config_testdir") +} diff --git a/op-supervisor/flags/flags.go b/op-supervisor/flags/flags.go index 774a54f6a7bf..1759381694ac 100644 --- a/op-supervisor/flags/flags.go +++ b/op-supervisor/flags/flags.go @@ -3,6 +3,7 @@ package flags import ( "fmt" + "github.com/ethereum-optimism/optimism/op-supervisor/config" "github.com/urfave/cli/v2" opservice "github.com/ethereum-optimism/optimism/op-service" @@ -23,7 +24,11 @@ var ( Name: "l2-rpcs", Usage: "L2 RPC sources.", EnvVars: prefixEnvVars("L2_RPCS"), - Value: cli.NewStringSlice("http://localhost:8545"), + } + DataDirFlag = &cli.PathFlag{ + Name: "datadir", + Usage: "Directory to store data generated as part of responding to games", + EnvVars: prefixEnvVars("DATADIR"), } MockRunFlag = &cli.BoolFlag{ Name: "mock-run", @@ -35,6 +40,7 @@ var ( var requiredFlags = []cli.Flag{ L2RPCsFlag, + DataDirFlag, } var optionalFlags = []cli.Flag{ @@ -62,3 +68,16 @@ func CheckRequired(ctx *cli.Context) error { } return nil } + +func ConfigFromCLI(ctx *cli.Context, version string) *config.Config { + return &config.Config{ + Version: version, + LogConfig: oplog.ReadCLIConfig(ctx), + MetricsConfig: opmetrics.ReadCLIConfig(ctx), + PprofConfig: oppprof.ReadCLIConfig(ctx), + RPC: oprpc.ReadCLIConfig(ctx), + MockRun: ctx.Bool(MockRunFlag.Name), + L2RPCs: ctx.StringSlice(L2RPCsFlag.Name), + Datadir: ctx.Path(DataDirFlag.Name), + } +} diff --git a/op-supervisor/supervisor/cli_config_test.go b/op-supervisor/supervisor/cli_config_test.go deleted file mode 100644 index 09007ead0b98..000000000000 --- a/op-supervisor/supervisor/cli_config_test.go +++ /dev/null @@ -1,12 +0,0 @@ -package supervisor - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -func TestDefaultConfigIsValid(t *testing.T) { - cfg := DefaultCLIConfig() - require.NoError(t, cfg.Check()) -} diff --git a/op-supervisor/supervisor/entrypoint.go b/op-supervisor/supervisor/entrypoint.go index 08b72e3744e2..86befabb5da9 100644 --- a/op-supervisor/supervisor/entrypoint.go +++ b/op-supervisor/supervisor/entrypoint.go @@ -4,6 +4,7 @@ import ( "context" "fmt" + "github.com/ethereum-optimism/optimism/op-supervisor/config" "github.com/urfave/cli/v2" "github.com/ethereum/go-ethereum/log" @@ -14,7 +15,7 @@ import ( "github.com/ethereum-optimism/optimism/op-supervisor/flags" ) -type MainFn func(ctx context.Context, cfg *CLIConfig, logger log.Logger) (cliapp.Lifecycle, error) +type MainFn func(ctx context.Context, cfg *config.Config, logger log.Logger) (cliapp.Lifecycle, error) // Main is the entrypoint into the Supervisor. // This method returns a cliapp.LifecycleAction, to create an op-service CLI-lifecycle-managed supervisor with. @@ -23,7 +24,7 @@ func Main(version string, fn MainFn) cliapp.LifecycleAction { if err := flags.CheckRequired(cliCtx); err != nil { return nil, err } - cfg := CLIConfigFromCLI(cliCtx, version) + cfg := flags.ConfigFromCLI(cliCtx, version) if err := cfg.Check(); err != nil { return nil, fmt.Errorf("invalid CLI flags: %w", err) } diff --git a/op-supervisor/supervisor/service.go b/op-supervisor/supervisor/service.go index f0792aabdd59..5b8b0fa14c1b 100644 --- a/op-supervisor/supervisor/service.go +++ b/op-supervisor/supervisor/service.go @@ -7,6 +7,7 @@ import ( "io" "sync/atomic" + "github.com/ethereum-optimism/optimism/op-supervisor/config" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rpc" @@ -43,7 +44,7 @@ type SupervisorService struct { var _ cliapp.Lifecycle = (*SupervisorService)(nil) -func SupervisorFromCLIConfig(ctx context.Context, cfg *CLIConfig, logger log.Logger) (*SupervisorService, error) { +func SupervisorFromConfig(ctx context.Context, cfg *config.Config, logger log.Logger) (*SupervisorService, error) { su := &SupervisorService{log: logger} if err := su.initFromCLIConfig(ctx, cfg); err != nil { return nil, errors.Join(err, su.Stop(ctx)) // try to clean up our failed initialization attempt @@ -51,7 +52,7 @@ func SupervisorFromCLIConfig(ctx context.Context, cfg *CLIConfig, logger log.Log return su, nil } -func (su *SupervisorService) initFromCLIConfig(ctx context.Context, cfg *CLIConfig) error { +func (su *SupervisorService) initFromCLIConfig(ctx context.Context, cfg *config.Config) error { su.initMetrics(cfg) if err := su.initPProf(cfg); err != nil { return fmt.Errorf("failed to start PProf server: %w", err) @@ -66,7 +67,7 @@ func (su *SupervisorService) initFromCLIConfig(ctx context.Context, cfg *CLIConf return nil } -func (su *SupervisorService) initBackend(cfg *CLIConfig) { +func (su *SupervisorService) initBackend(cfg *config.Config) { if cfg.MockRun { su.backend = backend.NewMockBackend() } else { @@ -74,7 +75,7 @@ func (su *SupervisorService) initBackend(cfg *CLIConfig) { } } -func (su *SupervisorService) initMetrics(cfg *CLIConfig) { +func (su *SupervisorService) initMetrics(cfg *config.Config) { if cfg.MetricsConfig.Enabled { procName := "default" su.metrics = metrics.NewMetrics(procName) @@ -84,7 +85,7 @@ func (su *SupervisorService) initMetrics(cfg *CLIConfig) { } } -func (su *SupervisorService) initPProf(cfg *CLIConfig) error { +func (su *SupervisorService) initPProf(cfg *config.Config) error { su.pprofService = oppprof.New( cfg.PprofConfig.ListenEnabled, cfg.PprofConfig.ListenAddr, @@ -101,7 +102,7 @@ func (su *SupervisorService) initPProf(cfg *CLIConfig) error { return nil } -func (su *SupervisorService) initMetricsServer(cfg *CLIConfig) error { +func (su *SupervisorService) initMetricsServer(cfg *config.Config) error { if !cfg.MetricsConfig.Enabled { su.log.Info("Metrics disabled") return nil @@ -120,7 +121,7 @@ func (su *SupervisorService) initMetricsServer(cfg *CLIConfig) error { return nil } -func (su *SupervisorService) initRPCServer(cfg *CLIConfig) error { +func (su *SupervisorService) initRPCServer(cfg *config.Config) error { server := oprpc.NewServer( cfg.RPC.ListenAddr, cfg.RPC.ListenPort, diff --git a/op-supervisor/supervisor/service_test.go b/op-supervisor/supervisor/service_test.go index 72b7725adf3d..8cc4dcfa6678 100644 --- a/op-supervisor/supervisor/service_test.go +++ b/op-supervisor/supervisor/service_test.go @@ -5,6 +5,7 @@ import ( "testing" "time" + "github.com/ethereum-optimism/optimism/op-supervisor/config" "github.com/holiman/uint256" "github.com/stretchr/testify/require" @@ -22,7 +23,7 @@ import ( ) func TestSupervisorService(t *testing.T) { - cfg := &CLIConfig{ + cfg := &config.Config{ Version: "", LogConfig: oplog.CLIConfig{ Level: log.LevelError, @@ -50,7 +51,7 @@ func TestSupervisorService(t *testing.T) { MockRun: true, } logger := testlog.Logger(t, log.LevelError) - supervisor, err := SupervisorFromCLIConfig(context.Background(), cfg, logger) + supervisor, err := SupervisorFromConfig(context.Background(), cfg, logger) require.NoError(t, err) require.NoError(t, supervisor.Start(context.Background()), "start service") // run some RPC tests against the service with the mock backend From 61e3af9b1d019016b511e5c036a5685c29dc4289 Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Wed, 26 Jun 2024 02:22:38 +1000 Subject: [PATCH 100/141] ci: Require op-e2e-action-tests-plasma to pass before merging (#10998) --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index c5f83d410bcb..4849a600a2ff 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1695,6 +1695,7 @@ workflows: - op-e2e-HTTP-tests - op-e2e-fault-proof-tests - op-e2e-action-tests + - op-e2e-action-tests-plasma - docker-build: name: op-node-docker-build docker_name: op-node From 81b430bce7982131befc6e334fafec5457ca2744 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Jun 2024 16:41:51 +0000 Subject: [PATCH 101/141] dependabot(gomod): bump github.com/minio/minio-go/v7 (#10980) Bumps [github.com/minio/minio-go/v7](https://github.com/minio/minio-go) from 7.0.71 to 7.0.72. - [Release notes](https://github.com/minio/minio-go/releases) - [Commits](https://github.com/minio/minio-go/compare/v7.0.71...v7.0.72) --- updated-dependencies: - dependency-name: github.com/minio/minio-go/v7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index e78b29fef46e..7a68121f3a0b 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,7 @@ require ( github.com/libp2p/go-libp2p-pubsub v0.11.0 github.com/libp2p/go-libp2p-testing v0.12.0 github.com/mattn/go-isatty v0.0.20 - github.com/minio/minio-go/v7 v7.0.71 + github.com/minio/minio-go/v7 v7.0.72 github.com/multiformats/go-base32 v0.1.0 github.com/multiformats/go-multiaddr v0.12.4 github.com/multiformats/go-multiaddr-dns v0.3.1 diff --git a/go.sum b/go.sum index 5bc10f2835c6..97e144994bfa 100644 --- a/go.sum +++ b/go.sum @@ -480,8 +480,8 @@ github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4S github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= -github.com/minio/minio-go/v7 v7.0.71 h1:No9XfOKTYi6i0GnBj+WZwD8WP5GZfL7n7GOjRqCdAjA= -github.com/minio/minio-go/v7 v7.0.71/go.mod h1:4yBA8v80xGA30cfM3fz0DKYMXunWl/AV/6tWEs9ryzo= +github.com/minio/minio-go/v7 v7.0.72 h1:ZSbxs2BfJensLyHdVOgHv+pfmvxYraaUy07ER04dWnA= +github.com/minio/minio-go/v7 v7.0.72/go.mod h1:4yBA8v80xGA30cfM3fz0DKYMXunWl/AV/6tWEs9ryzo= github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= From 1e0ea43e43dc19921406740555604d5eda398f30 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Tue, 25 Jun 2024 19:45:13 +0300 Subject: [PATCH 102/141] op-chain-ops: cleanup foundry package (#10801) * op-chain-ops: cleanup foundry package Moves the foundry related code into the foundry package. We have some code for reading the allocs that foundry writes to disk with `vm.dumpState(string)`. It makes more sense to have these functions and types in the `foundry` package rather than the `genesis` package. * op-chain-ops: fix compile issue * op-node: port package usage --- op-chain-ops/foundry/artifact.go | 56 +++++++++++++++++++++++++++++++ op-chain-ops/genesis/config.go | 39 --------------------- op-chain-ops/genesis/layer_one.go | 4 ++- op-chain-ops/genesis/layer_two.go | 22 ++---------- op-e2e/config/init.go | 13 +++---- op-node/cmd/genesis/cmd.go | 9 ++--- 6 files changed, 74 insertions(+), 69 deletions(-) diff --git a/op-chain-ops/foundry/artifact.go b/op-chain-ops/foundry/artifact.go index 72e1f963d722..0e0dfcb463f9 100644 --- a/op-chain-ops/foundry/artifact.go +++ b/op-chain-ops/foundry/artifact.go @@ -4,11 +4,17 @@ import ( "encoding/json" "fmt" "os" + "path/filepath" "strings" + "github.com/holiman/uint256" + "golang.org/x/exp/maps" + "github.com/ethereum-optimism/optimism/op-chain-ops/solc" "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/types" ) // Artifact represents a foundry compilation artifact. @@ -86,3 +92,53 @@ func ReadArtifact(path string) (*Artifact, error) { } return &artifact, nil } + +type ForgeAllocs struct { + Accounts types.GenesisAlloc +} + +func (d *ForgeAllocs) Copy() *ForgeAllocs { + out := make(types.GenesisAlloc, len(d.Accounts)) + maps.Copy(out, d.Accounts) + return &ForgeAllocs{Accounts: out} +} + +func (d *ForgeAllocs) UnmarshalJSON(b []byte) error { + // forge, since integrating Alloy, likes to hex-encode everything. + type forgeAllocAccount struct { + Balance hexutil.U256 `json:"balance"` + Nonce hexutil.Uint64 `json:"nonce"` + Code hexutil.Bytes `json:"code,omitempty"` + Storage map[common.Hash]common.Hash `json:"storage,omitempty"` + } + var allocs map[common.Address]forgeAllocAccount + if err := json.Unmarshal(b, &allocs); err != nil { + return err + } + d.Accounts = make(types.GenesisAlloc, len(allocs)) + for addr, acc := range allocs { + acc := acc + d.Accounts[addr] = types.Account{ + Code: acc.Code, + Storage: acc.Storage, + Balance: (*uint256.Int)(&acc.Balance).ToBig(), + Nonce: (uint64)(acc.Nonce), + PrivateKey: nil, + } + } + return nil +} + +func LoadForgeAllocs(allocsPath string) (*ForgeAllocs, error) { + path := filepath.Join(allocsPath) + f, err := os.OpenFile(path, os.O_RDONLY, 0644) + if err != nil { + return nil, fmt.Errorf("failed to open forge allocs %q: %w", path, err) + } + defer f.Close() + var out ForgeAllocs + if err := json.NewDecoder(f).Decode(&out); err != nil { + return nil, fmt.Errorf("failed to json-decode forge allocs %q: %w", path, err) + } + return &out, nil +} diff --git a/op-chain-ops/genesis/config.go b/op-chain-ops/genesis/config.go index 6f988fff7ed8..6568b4eb8eba 100644 --- a/op-chain-ops/genesis/config.go +++ b/op-chain-ops/genesis/config.go @@ -10,9 +10,6 @@ import ( "path/filepath" "reflect" - "github.com/holiman/uint256" - "golang.org/x/exp/maps" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core/types" @@ -796,42 +793,6 @@ func NewL1Deployments(path string) (*L1Deployments, error) { return &deployments, nil } -type ForgeAllocs struct { - Accounts types.GenesisAlloc -} - -func (d *ForgeAllocs) Copy() *ForgeAllocs { - out := make(types.GenesisAlloc, len(d.Accounts)) - maps.Copy(out, d.Accounts) - return &ForgeAllocs{Accounts: out} -} - -func (d *ForgeAllocs) UnmarshalJSON(b []byte) error { - // forge, since integrating Alloy, likes to hex-encode everything. - type forgeAllocAccount struct { - Balance hexutil.U256 `json:"balance"` - Nonce hexutil.Uint64 `json:"nonce"` - Code hexutil.Bytes `json:"code,omitempty"` - Storage map[common.Hash]common.Hash `json:"storage,omitempty"` - } - var allocs map[common.Address]forgeAllocAccount - if err := json.Unmarshal(b, &allocs); err != nil { - return err - } - d.Accounts = make(types.GenesisAlloc, len(allocs)) - for addr, acc := range allocs { - acc := acc - d.Accounts[addr] = types.Account{ - Code: acc.Code, - Storage: acc.Storage, - Balance: (*uint256.Int)(&acc.Balance).ToBig(), - Nonce: (uint64)(acc.Nonce), - PrivateKey: nil, - } - } - return nil -} - type MarshalableRPCBlockNumberOrHash rpc.BlockNumberOrHash func (m *MarshalableRPCBlockNumberOrHash) MarshalJSON() ([]byte, error) { diff --git a/op-chain-ops/genesis/layer_one.go b/op-chain-ops/genesis/layer_one.go index ee9d408212a9..16f1a3c48c2d 100644 --- a/op-chain-ops/genesis/layer_one.go +++ b/op-chain-ops/genesis/layer_one.go @@ -4,6 +4,8 @@ import ( "fmt" "math/big" + "github.com/ethereum-optimism/optimism/op-chain-ops/foundry" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/log" @@ -18,7 +20,7 @@ const PrecompileCount = 256 // all of the state required for an Optimism network to function. // It is expected that the dump contains all of the required state to bootstrap // the L1 chain. -func BuildL1DeveloperGenesis(config *DeployConfig, dump *ForgeAllocs, l1Deployments *L1Deployments) (*core.Genesis, error) { +func BuildL1DeveloperGenesis(config *DeployConfig, dump *foundry.ForgeAllocs, l1Deployments *L1Deployments) (*core.Genesis, error) { log.Info("Building developer L1 genesis block") genesis, err := NewL1Genesis(config) if err != nil { diff --git a/op-chain-ops/genesis/layer_two.go b/op-chain-ops/genesis/layer_two.go index 6cd0bbe7d27f..a898afc70aaa 100644 --- a/op-chain-ops/genesis/layer_two.go +++ b/op-chain-ops/genesis/layer_two.go @@ -1,11 +1,8 @@ package genesis import ( - "encoding/json" "fmt" "math/big" - "os" - "path/filepath" hdwallet "github.com/ethereum-optimism/go-ethereum-hdwallet" "github.com/holiman/uint256" @@ -16,6 +13,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum-optimism/optimism/op-chain-ops/foundry" "github.com/ethereum-optimism/optimism/op-service/predeploys" ) @@ -34,10 +32,10 @@ var ( testMnemonic = "test test test test test test test test test test test junk" ) -type AllocsLoader func(mode L2AllocsMode) *ForgeAllocs +type AllocsLoader func(mode L2AllocsMode) *foundry.ForgeAllocs // BuildL2Genesis will build the L2 genesis block. -func BuildL2Genesis(config *DeployConfig, dump *ForgeAllocs, l1StartBlock *types.Block) (*core.Genesis, error) { +func BuildL2Genesis(config *DeployConfig, dump *foundry.ForgeAllocs, l1StartBlock *types.Block) (*core.Genesis, error) { genspec, err := NewL2Genesis(config, l1StartBlock) if err != nil { return nil, err @@ -94,17 +92,3 @@ func HasAnyDevAccounts(allocs types.GenesisAlloc) (bool, error) { } return false, nil } - -func LoadForgeAllocs(allocsPath string) (*ForgeAllocs, error) { - path := filepath.Join(allocsPath) - f, err := os.OpenFile(path, os.O_RDONLY, 0644) - if err != nil { - return nil, fmt.Errorf("failed to open forge allocs %q: %w", path, err) - } - defer f.Close() - var out ForgeAllocs - if err := json.NewDecoder(f).Decode(&out); err != nil { - return nil, fmt.Errorf("failed to json-decode forge allocs %q: %w", path, err) - } - return &out, nil -} diff --git a/op-e2e/config/init.go b/op-e2e/config/init.go index d53fd0697124..c5a38ad5a6af 100644 --- a/op-e2e/config/init.go +++ b/op-e2e/config/init.go @@ -15,6 +15,7 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum-optimism/optimism/op-chain-ops/foundry" "github.com/ethereum-optimism/optimism/op-chain-ops/genesis" "github.com/ethereum-optimism/optimism/op-e2e/external" op_service "github.com/ethereum-optimism/optimism/op-service" @@ -39,12 +40,12 @@ var ( // in end to end tests. // L1Allocs represents the L1 genesis block state. - L1Allocs *genesis.ForgeAllocs + L1Allocs *foundry.ForgeAllocs // L1Deployments maps contract names to accounts in the L1 // genesis block state. L1Deployments *genesis.L1Deployments // l2Allocs represents the L2 allocs, by hardfork/mode (e.g. delta, ecotone, interop, other) - l2Allocs map[genesis.L2AllocsMode]*genesis.ForgeAllocs + l2Allocs map[genesis.L2AllocsMode]*foundry.ForgeAllocs // DeployConfig represents the deploy config used by the system. DeployConfig *genesis.DeployConfig // ExternalL2Shim is the shim to use if external ethereum client testing is @@ -107,14 +108,14 @@ func init() { return } - L1Allocs, err = genesis.LoadForgeAllocs(l1AllocsPath) + L1Allocs, err = foundry.LoadForgeAllocs(l1AllocsPath) if err != nil { panic(err) } - l2Allocs = make(map[genesis.L2AllocsMode]*genesis.ForgeAllocs) + l2Allocs = make(map[genesis.L2AllocsMode]*foundry.ForgeAllocs) mustL2Allocs := func(mode genesis.L2AllocsMode) { name := "allocs-l2-" + string(mode) - allocs, err := genesis.LoadForgeAllocs(filepath.Join(l2AllocsDir, name+".json")) + allocs, err := foundry.LoadForgeAllocs(filepath.Join(l2AllocsDir, name+".json")) if err != nil { panic(err) } @@ -153,7 +154,7 @@ func init() { } } -func L2Allocs(mode genesis.L2AllocsMode) *genesis.ForgeAllocs { +func L2Allocs(mode genesis.L2AllocsMode) *foundry.ForgeAllocs { allocs, ok := l2Allocs[mode] if !ok { panic(fmt.Errorf("unknown L2 allocs mode: %q", mode)) diff --git a/op-node/cmd/genesis/cmd.go b/op-node/cmd/genesis/cmd.go index 6d3d687444a2..01c93b42164e 100644 --- a/op-node/cmd/genesis/cmd.go +++ b/op-node/cmd/genesis/cmd.go @@ -16,6 +16,7 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rpc" + "github.com/ethereum-optimism/optimism/op-chain-ops/foundry" "github.com/ethereum-optimism/optimism/op-chain-ops/genesis" "github.com/ethereum-optimism/optimism/op-service/jsonutil" ) @@ -112,9 +113,9 @@ var Subcommands = cli.Commands{ return fmt.Errorf("deploy config at %s invalid: %w", deployConfig, err) } - var dump *genesis.ForgeAllocs + var dump *foundry.ForgeAllocs if l1Allocs := ctx.String("l1-allocs"); l1Allocs != "" { - dump, err = genesis.LoadForgeAllocs(l1Allocs) + dump, err = foundry.LoadForgeAllocs(l1Allocs) if err != nil { return err } @@ -169,9 +170,9 @@ var Subcommands = cli.Commands{ } } - var l2Allocs *genesis.ForgeAllocs + var l2Allocs *foundry.ForgeAllocs if l2AllocsPath := ctx.String("l2-allocs"); l2AllocsPath != "" { - l2Allocs, err = genesis.LoadForgeAllocs(l2AllocsPath) + l2Allocs, err = foundry.LoadForgeAllocs(l2AllocsPath) if err != nil { return err } From f3da9a539a0789dd7f7e014cb3b1ae298c5f0cb8 Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Wed, 26 Jun 2024 02:45:37 +1000 Subject: [PATCH 103/141] Record executing messages in log db and handle write failures (#10973) * op-supervisor: Support recording executing message info * op-supervisor: Reduce permissions * op-supervisor: Implement recovery for entry db * op-supervisor: Track size in entrydb instead of last entry idx * op-supervisor: Trim log entries back to the last valid ending point * op-supervisor: Remove the manual recover operations since recovery at startup is automatic * op-supervisor: Add support for writing multiple entries in a single write * op-supervisor: Write all entries for a log in one append call. Only update in-memory state after the write succeeds. * op-supervisor: Handle partial writes * op-supervisor: Extract logic to reverse an init event * op-supervisor: Use errors.New * op-supervisor: Combine the two AddLog variants. * op-supervisor: Remove place holder tests. * op-supervisor: Separate Executes and Contains queries * op-supervisor: Only read executing message when it is actually used. --- op-supervisor/supervisor/backend/db/db.go | 228 +++++--- .../backend/db/db_invariants_test.go | 112 ++++ .../supervisor/backend/db/db_test.go | 492 ++++++++++++++---- .../supervisor/backend/db/entries.go | 111 +++- .../supervisor/backend/db/entrydb/entry_db.go | 85 ++- .../backend/db/entrydb/entry_db_test.go | 200 ++++++- .../supervisor/backend/db/iterator.go | 53 +- op-supervisor/supervisor/backend/db/types.go | 29 ++ 8 files changed, 1094 insertions(+), 216 deletions(-) create mode 100644 op-supervisor/supervisor/backend/db/types.go diff --git a/op-supervisor/supervisor/backend/db/db.go b/op-supervisor/supervisor/backend/db/db.go index 67620afdea5c..7d83ef4750c8 100644 --- a/op-supervisor/supervisor/backend/db/db.go +++ b/op-supervisor/supervisor/backend/db/db.go @@ -9,15 +9,14 @@ import ( "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/db/entrydb" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" ) const ( searchCheckpointFrequency = 256 - eventFlagIncrementLogIdx = byte(1) - //eventFlagHasExecutingMessage = byte(1) << 1 + eventFlagIncrementLogIdx = byte(1) + eventFlagHasExecutingMessage = byte(1) << 1 ) const ( @@ -28,13 +27,6 @@ const ( typeExecutingCheck ) -var ( - ErrLogOutOfOrder = errors.New("log out of order") - ErrDataCorruption = errors.New("data corruption") -) - -type TruncatedHash [20]byte - type Metrics interface { RecordEntryCount(count int64) RecordSearchEntriesRead(count int64) @@ -45,7 +37,7 @@ type logContext struct { logIdx uint32 } -type entryStore interface { +type EntryStore interface { Size() int64 Read(idx int64) (entrydb.Entry, error) Append(entries ...entrydb.Entry) error @@ -85,17 +77,21 @@ type entryStore interface { type DB struct { log log.Logger m Metrics - store entryStore + store EntryStore rwLock sync.RWMutex lastEntryContext logContext } func NewFromFile(logger log.Logger, m Metrics, path string) (*DB, error) { - store, err := entrydb.NewEntryDB(path) + store, err := entrydb.NewEntryDB(logger, path) if err != nil { return nil, fmt.Errorf("failed to open DB: %w", err) } + return NewFromEntryStore(logger, m, store) +} + +func NewFromEntryStore(logger log.Logger, m Metrics, store EntryStore) (*DB, error) { db := &DB{ log: logger, m: m, @@ -112,11 +108,15 @@ func (db *DB) lastEntryIdx() int64 { } func (db *DB) init() error { - db.updateEntryCountMetric() + defer db.updateEntryCountMetric() // Always update the entry count metric after init completes + if err := db.trimInvalidTrailingEntries(); err != nil { + return fmt.Errorf("failed to trim invalid trailing entries: %w", err) + } if db.lastEntryIdx() < 0 { // Database is empty so no context to load return nil } + lastCheckpoint := (db.lastEntryIdx() / searchCheckpointFrequency) * searchCheckpointFrequency i, err := db.newIterator(lastCheckpoint) if err != nil { @@ -135,6 +135,36 @@ func (db *DB) init() error { return nil } +func (db *DB) trimInvalidTrailingEntries() error { + i := db.lastEntryIdx() + for ; i >= 0; i-- { + entry, err := db.store.Read(i) + if err != nil { + return fmt.Errorf("failed to read %v to check for trailing entries: %w", i, err) + } + if entry[0] == typeExecutingCheck { + // executing check is a valid final entry + break + } + if entry[0] == typeInitiatingEvent { + evt, err := newInitiatingEventFromEntry(entry) + if err != nil { + // Entry is invalid, keep walking backwards + continue + } + if !evt.hasExecMsg { + // init event with no exec msg is a valid final entry + break + } + } + } + if i < db.lastEntryIdx() { + db.log.Warn("Truncating unexpected trailing entries", "prev", db.lastEntryIdx(), "new", i) + return db.store.Truncate(i) + } + return nil +} + func (db *DB) updateEntryCountMetric() { db.m.RecordEntryCount(db.lastEntryIdx() + 1) } @@ -162,21 +192,55 @@ func (db *DB) ClosestBlockInfo(blockNum uint64) (uint64, TruncatedHash, error) { // Contains return true iff the specified logHash is recorded in the specified blockNum and logIdx. // logIdx is the index of the log in the array of all logs the block. +// This can be used to check the validity of cross-chain interop events. func (db *DB) Contains(blockNum uint64, logIdx uint32, logHash TruncatedHash) (bool, error) { db.rwLock.RLock() defer db.rwLock.RUnlock() db.log.Trace("Checking for log", "blockNum", blockNum, "logIdx", logIdx, "hash", logHash) + + evtHash, _, err := db.findLogInfo(blockNum, logIdx) + if errors.Is(err, ErrNotFound) { + // Did not find a log at blockNum and logIdx + return false, nil + } else if err != nil { + return false, err + } + db.log.Trace("Found initiatingEvent", "blockNum", blockNum, "logIdx", logIdx, "hash", evtHash) + // Found the requested block and log index, check if the hash matches + return evtHash == logHash, nil +} + +// Executes checks if the log identified by the specific block number and log index, has an ExecutingMessage associated +// with it that needs to be checked as part of interop validation. +// logIdx is the index of the log in the array of all logs the block. +// Returns the ExecutingMessage if it exists, or ExecutingMessage{} if the log is found but has no ExecutingMessage. +// Returns ErrNotFound if the specified log does not exist in the database. +func (db *DB) Executes(blockNum uint64, logIdx uint32) (ExecutingMessage, error) { + db.rwLock.RLock() + defer db.rwLock.RUnlock() + _, iter, err := db.findLogInfo(blockNum, logIdx) + if err != nil { + return ExecutingMessage{}, err + } + execMsg, err := iter.ExecMessage() + if err != nil { + return ExecutingMessage{}, fmt.Errorf("failed to read executing message: %w", err) + } + return execMsg, nil +} + +func (db *DB) findLogInfo(blockNum uint64, logIdx uint32) (TruncatedHash, *iterator, error) { entryIdx, err := db.searchCheckpoint(blockNum, logIdx) if errors.Is(err, io.EOF) { // Did not find a checkpoint to start reading from so the log cannot be present. - return false, nil + return TruncatedHash{}, nil, ErrNotFound } else if err != nil { - return false, err + return TruncatedHash{}, nil, err } i, err := db.newIterator(entryIdx) if err != nil { - return false, fmt.Errorf("failed to create iterator: %w", err) + return TruncatedHash{}, nil, fmt.Errorf("failed to create iterator: %w", err) } db.log.Trace("Starting search", "entry", entryIdx, "blockNum", i.current.blockNum, "logIdx", i.current.logIdx) defer func() { @@ -186,37 +250,64 @@ func (db *DB) Contains(blockNum uint64, logIdx uint32, logHash TruncatedHash) (b evtBlockNum, evtLogIdx, evtHash, err := i.NextLog() if errors.Is(err, io.EOF) { // Reached end of log without finding the event - return false, nil + return TruncatedHash{}, nil, ErrNotFound } else if err != nil { - return false, fmt.Errorf("failed to read next log: %w", err) + return TruncatedHash{}, nil, fmt.Errorf("failed to read next log: %w", err) } if evtBlockNum == blockNum && evtLogIdx == logIdx { db.log.Trace("Found initiatingEvent", "blockNum", evtBlockNum, "logIdx", evtLogIdx, "hash", evtHash) - // Found the requested block and log index, check if the hash matches - return evtHash == logHash, nil + return evtHash, i, nil } if evtBlockNum > blockNum || (evtBlockNum == blockNum && evtLogIdx > logIdx) { // Progressed past the requested log without finding it. - return false, nil + return TruncatedHash{}, nil, ErrNotFound } } } func (db *DB) newIterator(startCheckpointEntry int64) (*iterator, error) { - // TODO(optimism#10857): Handle starting from a checkpoint after initiating-event but before its executing-link - // Will need to read the entry prior to the checkpoint to get the initiating event info - current, err := db.readSearchCheckpoint(startCheckpointEntry) + checkpoint, err := db.readSearchCheckpoint(startCheckpointEntry) if err != nil { return nil, fmt.Errorf("failed to read search checkpoint entry %v: %w", startCheckpointEntry, err) } + startIdx := startCheckpointEntry + 2 + firstEntry, err := db.store.Read(startIdx) + if errors.Is(err, io.EOF) { + // There should always be an entry after a checkpoint and canonical hash so an EOF here is data corruption + return nil, fmt.Errorf("%w: no entry after checkpoint and canonical hash at %v", ErrDataCorruption, startCheckpointEntry) + } else if err != nil { + return nil, fmt.Errorf("failed to read first entry to iterate %v: %w", startCheckpointEntry+2, err) + } + startLogCtx := logContext{ + blockNum: checkpoint.blockNum, + logIdx: checkpoint.logIdx, + } + // Handle starting from a checkpoint after initiating-event but before its executing-link or executing-check + if firstEntry[0] == typeExecutingLink || firstEntry[0] == typeExecutingCheck { + if firstEntry[0] == typeExecutingLink { + // The start checkpoint was between the initiating event and the executing link + // Step back to read the initiating event. The checkpoint block data will be for the initiating event + startIdx = startCheckpointEntry - 1 + } else { + // The start checkpoint was between the executing link and the executing check + // Step back to read the initiating event. The checkpoint block data will be for the initiating event + startIdx = startCheckpointEntry - 2 + } + initEntry, err := db.store.Read(startIdx) + if err != nil { + return nil, fmt.Errorf("failed to read prior initiating event: %w", err) + } + initEvt, err := newInitiatingEventFromEntry(initEntry) + if err != nil { + return nil, fmt.Errorf("invalid initiating event at idx %v: %w", startIdx, err) + } + startLogCtx = initEvt.preContext(startLogCtx) + } i := &iterator{ db: db, // +2 to skip the initial search checkpoint and the canonical hash event after it - nextEntryIdx: startCheckpointEntry + 2, - current: logContext{ - blockNum: current.blockNum, - logIdx: current.logIdx, - }, + nextEntryIdx: startIdx, + current: startLogCtx, } return i, nil } @@ -260,7 +351,7 @@ func (db *DB) searchCheckpoint(blockNum uint64, logIdx uint32) (int64, error) { return (i - 1) * searchCheckpointFrequency, nil } -func (db *DB) AddLog(logHash TruncatedHash, block eth.BlockID, timestamp uint64, logIdx uint32) error { +func (db *DB) AddLog(logHash TruncatedHash, block eth.BlockID, timestamp uint64, logIdx uint32, execMsg *ExecutingMessage) error { db.rwLock.Lock() defer db.rwLock.Unlock() postState := logContext{ @@ -279,15 +370,42 @@ func (db *DB) AddLog(logHash TruncatedHash, block eth.BlockID, timestamp uint64, if db.lastEntryContext.blockNum < block.Number && logIdx != 0 { return fmt.Errorf("%w: adding log %v as first log in block %v", ErrLogOutOfOrder, logIdx, block.Number) } - if (db.lastEntryIdx()+1)%searchCheckpointFrequency == 0 { - if err := db.writeSearchCheckpoint(block.Number, logIdx, timestamp, block.Hash); err != nil { - return fmt.Errorf("failed to write search checkpoint: %w", err) + var entriesToAdd []entrydb.Entry + newContext := db.lastEntryContext + lastEntryIdx := db.lastEntryIdx() + + addEntry := func(entry entrydb.Entry) { + entriesToAdd = append(entriesToAdd, entry) + lastEntryIdx++ + } + maybeAddCheckpoint := func() { + if (lastEntryIdx+1)%searchCheckpointFrequency == 0 { + addEntry(newSearchCheckpoint(block.Number, logIdx, timestamp).encode()) + addEntry(newCanonicalHash(TruncateHash(block.Hash)).encode()) + newContext = postState } - db.lastEntryContext = postState } + maybeAddCheckpoint() + + evt, err := newInitiatingEvent(newContext, postState.blockNum, postState.logIdx, logHash, execMsg != nil) + if err != nil { + return fmt.Errorf("failed to create initiating event: %w", err) + } + addEntry(evt.encode()) + + if execMsg != nil { + maybeAddCheckpoint() + link, err := newExecutingLink(*execMsg) + if err != nil { + return fmt.Errorf("failed to create executing link: %w", err) + } + addEntry(link.encode()) - if err := db.writeInitiatingEvent(postState, logHash); err != nil { - return err + maybeAddCheckpoint() + addEntry(newExecutingCheck(execMsg.Hash).encode()) + } + if err := db.store.Append(entriesToAdd...); err != nil { + return fmt.Errorf("failed to append entries: %w", err) } db.lastEntryContext = postState db.updateEntryCountMetric() @@ -347,17 +465,6 @@ func (db *DB) Rewind(headBlockNum uint64) error { return nil } -// writeSearchCheckpoint appends search checkpoint and canonical hash entry to the log -// type 0: "search checkpoint" = 20 bytes -// type 1: "canonical hash" = 21 bytes -func (db *DB) writeSearchCheckpoint(blockNum uint64, logIdx uint32, timestamp uint64, blockHash common.Hash) error { - entry := newSearchCheckpoint(blockNum, logIdx, timestamp).encode() - if err := db.store.Append(entry); err != nil { - return err - } - return db.writeCanonicalHash(blockHash) -} - func (db *DB) readSearchCheckpoint(entryIdx int64) (searchCheckpoint, error) { data, err := db.store.Read(entryIdx) if err != nil { @@ -366,39 +473,14 @@ func (db *DB) readSearchCheckpoint(entryIdx int64) (searchCheckpoint, error) { return newSearchCheckpointFromEntry(data) } -// writeCanonicalHash appends a canonical hash entry to the log -// type 1: "canonical hash" = 21 bytes -func (db *DB) writeCanonicalHash(blockHash common.Hash) error { - return db.store.Append(newCanonicalHash(TruncateHash(blockHash)).encode()) -} - func (db *DB) readCanonicalHash(entryIdx int64) (canonicalHash, error) { data, err := db.store.Read(entryIdx) if err != nil { return canonicalHash{}, fmt.Errorf("failed to read entry %v: %w", entryIdx, err) } - if data[0] != typeCanonicalHash { - return canonicalHash{}, fmt.Errorf("%w: expected canonical hash at entry %v but was type %v", ErrDataCorruption, entryIdx, data[0]) - } return newCanonicalHashFromEntry(data) } -// writeInitiatingEvent appends an initiating event to the log -// type 2: "initiating event" = 23 bytes -func (db *DB) writeInitiatingEvent(postState logContext, logHash TruncatedHash) error { - evt, err := newInitiatingEvent(db.lastEntryContext, postState.blockNum, postState.logIdx, logHash) - if err != nil { - return err - } - return db.store.Append(evt.encode()) -} - -func TruncateHash(hash common.Hash) TruncatedHash { - var truncated TruncatedHash - copy(truncated[:], hash[0:20]) - return truncated -} - func (db *DB) Close() error { return db.store.Close() } diff --git a/op-supervisor/supervisor/backend/db/db_invariants_test.go b/op-supervisor/supervisor/backend/db/db_invariants_test.go index 7544acd75ce0..8570c530279d 100644 --- a/op-supervisor/supervisor/backend/db/db_invariants_test.go +++ b/op-supervisor/supervisor/backend/db/db_invariants_test.go @@ -1,6 +1,7 @@ package db import ( + "errors" "fmt" "io" "os" @@ -42,6 +43,11 @@ func checkDBInvariants(t *testing.T, dbPath string, m *stubMetrics) { invariantCanonicalHashAfterEverySearchCheckpoint, invariantSearchCheckpointBeforeEveryCanonicalHash, invariantIncrementLogIdxIfNotImmediatelyAfterCanonicalHash, + invariantExecLinkAfterInitEventWithFlagSet, + invariantExecLinkOnlyAfterInitiatingEventWithFlagSet, + invariantExecCheckAfterExecLink, + invariantExecCheckOnlyAfterExecLink, + invariantValidLastEntry, } for i, entry := range entries { for _, invariant := range entryInvariants { @@ -146,3 +152,109 @@ func invariantIncrementLogIdxIfNotImmediatelyAfterCanonicalHash(entryIdx int, en } return nil } + +func invariantExecLinkAfterInitEventWithFlagSet(entryIdx int, entry entrydb.Entry, entries []entrydb.Entry, m *stubMetrics) error { + if entry[0] != typeInitiatingEvent { + return nil + } + hasExecMessage := entry[2]&eventFlagHasExecutingMessage != 0 + if !hasExecMessage { + return nil + } + linkIdx := entryIdx + 1 + if linkIdx%searchCheckpointFrequency == 0 { + linkIdx += 2 // Skip over the search checkpoint and canonical hash events + } + if len(entries) <= linkIdx { + return fmt.Errorf("expected executing link after initiating event with exec msg flag set at entry %v but there were no more events", entryIdx) + } + if entries[linkIdx][0] != typeExecutingLink { + return fmt.Errorf("expected executing link at idx %v after initiating event with exec msg flag set at entry %v but got type %v", linkIdx, entryIdx, entries[linkIdx][0]) + } + return nil +} + +func invariantExecLinkOnlyAfterInitiatingEventWithFlagSet(entryIdx int, entry entrydb.Entry, entries []entrydb.Entry, m *stubMetrics) error { + if entry[0] != typeExecutingLink { + return nil + } + if entryIdx == 0 { + return errors.New("found executing link as first entry") + } + initIdx := entryIdx - 1 + if initIdx%searchCheckpointFrequency == 1 { + initIdx -= 2 // Skip the canonical hash and search checkpoint entries + } + if initIdx < 0 { + return fmt.Errorf("found executing link without a preceding initiating event at entry %v", entryIdx) + } + initEntry := entries[initIdx] + if initEntry[0] != typeInitiatingEvent { + return fmt.Errorf("expected initiating event at entry %v prior to executing link at %v but got %x", initIdx, entryIdx, initEntry[0]) + } + flags := initEntry[2] + if flags&eventFlagHasExecutingMessage == 0 { + return fmt.Errorf("initiating event at %v prior to executing link at %v does not have flag set to indicate needing a executing event: %x", initIdx, entryIdx, initEntry) + } + return nil +} + +func invariantExecCheckAfterExecLink(entryIdx int, entry entrydb.Entry, entries []entrydb.Entry, m *stubMetrics) error { + if entry[0] != typeExecutingLink { + return nil + } + checkIdx := entryIdx + 1 + if checkIdx%searchCheckpointFrequency == 0 { + checkIdx += 2 // Skip the search checkpoint and canonical hash entries + } + if checkIdx >= len(entries) { + return fmt.Errorf("expected executing link at %v to be followed by executing check at %v but ran out of entries", entryIdx, checkIdx) + } + checkEntry := entries[checkIdx] + if checkEntry[0] != typeExecutingCheck { + return fmt.Errorf("expected executing link at %v to be followed by executing check at %v but got type %v", entryIdx, checkIdx, checkEntry[0]) + } + return nil +} + +func invariantExecCheckOnlyAfterExecLink(entryIdx int, entry entrydb.Entry, entries []entrydb.Entry, m *stubMetrics) error { + if entry[0] != typeExecutingCheck { + return nil + } + if entryIdx == 0 { + return errors.New("found executing check as first entry") + } + linkIdx := entryIdx - 1 + if linkIdx%searchCheckpointFrequency == 1 { + linkIdx -= 2 // Skip the canonical hash and search checkpoint entries + } + if linkIdx < 0 { + return fmt.Errorf("found executing link without a preceding initiating event at entry %v", entryIdx) + } + linkEntry := entries[linkIdx] + if linkEntry[0] != typeExecutingLink { + return fmt.Errorf("expected executing link at entry %v prior to executing check at %v but got %x", linkIdx, entryIdx, linkEntry[0]) + } + return nil +} + +// invariantValidLastEntry checks that the last entry is either a executing check or initiating event with no exec message +func invariantValidLastEntry(entryIdx int, entry entrydb.Entry, entries []entrydb.Entry, m *stubMetrics) error { + if entryIdx+1 < len(entries) { + return nil + } + if entry[0] == typeExecutingCheck { + return nil + } + if entry[0] != typeInitiatingEvent { + return fmt.Errorf("invalid final event type: %v", entry[0]) + } + evt, err := newInitiatingEventFromEntry(entry) + if err != nil { + return fmt.Errorf("final event was invalid: %w", err) + } + if evt.hasExecMsg { + return errors.New("ends with init event that should have exec msg but no exec msg follows") + } + return nil +} diff --git a/op-supervisor/supervisor/backend/db/db_test.go b/op-supervisor/supervisor/backend/db/db_test.go index bb1c175e9b3a..f07a5f4b9c8b 100644 --- a/op-supervisor/supervisor/backend/db/db_test.go +++ b/op-supervisor/supervisor/backend/db/db_test.go @@ -2,6 +2,7 @@ package db import ( "bytes" + "fmt" "io" "io/fs" "os" @@ -10,6 +11,7 @@ import ( "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/testlog" + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/db/entrydb" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" "github.com/stretchr/testify/require" @@ -32,7 +34,7 @@ func TestErrorOpeningDatabase(t *testing.T) { func runDBTest(t *testing.T, setup func(t *testing.T, db *DB, m *stubMetrics), assert func(t *testing.T, db *DB, m *stubMetrics)) { createDb := func(t *testing.T, dir string) (*DB, *stubMetrics, string) { - logger := testlog.Logger(t, log.LvlTrace) + logger := testlog.Logger(t, log.LvlInfo) path := filepath.Join(dir, "test.db") m := &stubMetrics{} db, err := NewFromFile(logger, m, path) @@ -81,7 +83,7 @@ func TestAddLog(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) {}, func(t *testing.T, db *DB, m *stubMetrics) { - err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 0}, 5000, 0) + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 0}, 5000, 0, nil) require.ErrorIs(t, err, ErrLogOutOfOrder) }) }) @@ -89,7 +91,7 @@ func TestAddLog(t *testing.T) { t.Run("FirstEntry", func(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { - err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0) + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0, nil) require.NoError(t, err) }, func(t *testing.T, db *DB, m *stubMetrics) { @@ -100,11 +102,11 @@ func TestAddLog(t *testing.T) { t.Run("MultipleEntriesFromSameBlock", func(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { - err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0) + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0, nil) require.NoError(t, err) - err = db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 1) + err = db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 1, nil) require.NoError(t, err) - err = db.AddLog(createTruncatedHash(3), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 2) + err = db.AddLog(createTruncatedHash(3), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 2, nil) require.NoError(t, err) }, func(t *testing.T, db *DB, m *stubMetrics) { @@ -118,13 +120,13 @@ func TestAddLog(t *testing.T) { t.Run("MultipleEntriesFromMultipleBlocks", func(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { - err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0) + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0, nil) require.NoError(t, err) - err = db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 1) + err = db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 1, nil) require.NoError(t, err) - err = db.AddLog(createTruncatedHash(3), eth.BlockID{Hash: createHash(16), Number: 16}, 5002, 0) + err = db.AddLog(createTruncatedHash(3), eth.BlockID{Hash: createHash(16), Number: 16}, 5002, 0, nil) require.NoError(t, err) - err = db.AddLog(createTruncatedHash(4), eth.BlockID{Hash: createHash(16), Number: 16}, 5002, 1) + err = db.AddLog(createTruncatedHash(4), eth.BlockID{Hash: createHash(16), Number: 16}, 5002, 1, nil) require.NoError(t, err) }, func(t *testing.T, db *DB, m *stubMetrics) { @@ -139,11 +141,11 @@ func TestAddLog(t *testing.T) { t.Run("ErrorWhenBeforeCurrentBlock", func(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { - err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0) + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0, nil) require.NoError(t, err) }, func(t *testing.T, db *DB, m *stubMetrics) { - err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(14), Number: 14}, 4998, 0) + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(14), Number: 14}, 4998, 0, nil) require.ErrorIs(t, err, ErrLogOutOfOrder) }) }) @@ -151,13 +153,13 @@ func TestAddLog(t *testing.T) { t.Run("ErrorWhenBeforeCurrentBlockButAfterLastCheckpoint", func(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { - err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(13), Number: 13}, 5000, 0) + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(13), Number: 13}, 5000, 0, nil) require.NoError(t, err) - err = db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0) + err = db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0, nil) require.NoError(t, err) }, func(t *testing.T, db *DB, m *stubMetrics) { - err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(14), Number: 14}, 4998, 0) + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(14), Number: 14}, 4998, 0, nil) require.ErrorIs(t, err, ErrLogOutOfOrder) }) }) @@ -165,11 +167,11 @@ func TestAddLog(t *testing.T) { t.Run("ErrorWhenBeforeCurrentLogEvent", func(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0)) - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 1)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 1, nil)) }, func(t *testing.T, db *DB, m *stubMetrics) { - err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(14), Number: 15}, 4998, 0) + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(14), Number: 15}, 4998, 0, nil) require.ErrorIs(t, err, ErrLogOutOfOrder) }) }) @@ -177,15 +179,15 @@ func TestAddLog(t *testing.T) { t.Run("ErrorWhenBeforeCurrentLogEventButAfterLastCheckpoint", func(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { - err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0) + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0, nil) require.NoError(t, err) - err = db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 1) + err = db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 1, nil) require.NoError(t, err) - err = db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 2) + err = db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 2, nil) require.NoError(t, err) }, func(t *testing.T, db *DB, m *stubMetrics) { - err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(14), Number: 15}, 4998, 1) + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(14), Number: 15}, 4998, 1, nil) require.ErrorIs(t, err, ErrLogOutOfOrder) }) }) @@ -193,11 +195,11 @@ func TestAddLog(t *testing.T) { t.Run("ErrorWhenAtCurrentLogEvent", func(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0)) - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 1)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 1, nil)) }, func(t *testing.T, db *DB, m *stubMetrics) { - err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 4998, 1) + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 4998, 1, nil) require.ErrorIs(t, err, ErrLogOutOfOrder) }) }) @@ -205,12 +207,12 @@ func TestAddLog(t *testing.T) { t.Run("ErrorWhenAtCurrentLogEventButAfterLastCheckpoint", func(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0)) - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 1)) - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 2)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 1, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 2, nil)) }, func(t *testing.T, db *DB, m *stubMetrics) { - err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(14), Number: 15}, 4998, 2) + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(14), Number: 15}, 4998, 2, nil) require.ErrorIs(t, err, ErrLogOutOfOrder) }) }) @@ -218,11 +220,11 @@ func TestAddLog(t *testing.T) { t.Run("ErrorWhenSkippingLogEvent", func(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { - err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0) + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0, nil) require.NoError(t, err) }, func(t *testing.T, db *DB, m *stubMetrics) { - err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 4998, 2) + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 4998, 2, nil) require.ErrorIs(t, err, ErrLogOutOfOrder) }) }) @@ -230,7 +232,7 @@ func TestAddLog(t *testing.T) { t.Run("ErrorWhenFirstLogIsNotLogIdxZero", func(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) {}, func(t *testing.T, db *DB, m *stubMetrics) { - err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 4998, 5) + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 4998, 5, nil) require.ErrorIs(t, err, ErrLogOutOfOrder) }) }) @@ -238,10 +240,10 @@ func TestAddLog(t *testing.T) { t.Run("ErrorWhenFirstLogOfNewBlockIsNotLogIdxZero", func(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(14), Number: 14}, 4996, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(14), Number: 14}, 4996, 0, nil)) }, func(t *testing.T, db *DB, m *stubMetrics) { - err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 4998, 1) + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 4998, 1, nil) require.ErrorIs(t, err, ErrLogOutOfOrder) }) }) @@ -262,15 +264,15 @@ func TestAddLog(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { for i := 0; i < block1LogCount; i++ { - err := db.AddLog(createTruncatedHash(i), block1, 3000, uint32(i)) + err := db.AddLog(createTruncatedHash(i), block1, 3000, uint32(i), nil) require.NoErrorf(t, err, "failed to add log %v of block 1", i) } for i := 0; i < block2LogCount; i++ { - err := db.AddLog(createTruncatedHash(i), block2, 3002, uint32(i)) + err := db.AddLog(createTruncatedHash(i), block2, 3002, uint32(i), nil) require.NoErrorf(t, err, "failed to add log %v of block 2", i) } for i := 0; i < block3LogCount; i++ { - err := db.AddLog(createTruncatedHash(i), block3, 3004, uint32(i)) + err := db.AddLog(createTruncatedHash(i), block3, 3004, uint32(i), nil) require.NoErrorf(t, err, "failed to add log %v of block 3", i) } // Verify that we're right before the fourth checkpoint will be written. @@ -279,7 +281,7 @@ func TestAddLog(t *testing.T) { // so the fourth is at entry 3*searchCheckpointFrequency require.EqualValues(t, 3*searchCheckpointFrequency, m.entryCount) for i := 0; i < block4LogCount; i++ { - err := db.AddLog(createTruncatedHash(i), block4, 3006, uint32(i)) + err := db.AddLog(createTruncatedHash(i), block4, 3006, uint32(i), nil) require.NoErrorf(t, err, "failed to add log %v of block 4", i) } }, @@ -308,14 +310,91 @@ func TestAddLog(t *testing.T) { }) } +func TestAddDependentLog(t *testing.T) { + execMsg := ExecutingMessage{ + Chain: 3, + BlockNum: 42894, + LogIdx: 42, + Timestamp: 8742482, + Hash: TruncateHash(createHash(8844)), + } + t.Run("FirstEntry", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0, &execMsg) + require.NoError(t, err) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + requireContains(t, db, 15, 0, createHash(1), execMsg) + }) + }) + + t.Run("CheckpointBetweenInitEventAndExecLink", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + for i := uint32(0); m.entryCount < searchCheckpointFrequency-1; i++ { + require.NoError(t, db.AddLog(createTruncatedHash(9), eth.BlockID{Hash: createHash(9), Number: 1}, 500, i, nil)) + } + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0, &execMsg) + require.NoError(t, err) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + requireContains(t, db, 15, 0, createHash(1), execMsg) + }) + }) + + t.Run("CheckpointBetweenInitEventAndExecLinkNotIncrementingBlock", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + + for i := uint32(0); m.entryCount < searchCheckpointFrequency-1; i++ { + require.NoError(t, db.AddLog(createTruncatedHash(9), eth.BlockID{Hash: createHash(9), Number: 1}, 500, i, nil)) + } + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 1}, 5000, 253, &execMsg) + require.NoError(t, err) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + requireContains(t, db, 1, 253, createHash(1), execMsg) + }) + }) + + t.Run("CheckpointBetweenExecLinkAndExecCheck", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + for i := uint32(0); m.entryCount < searchCheckpointFrequency-2; i++ { + require.NoError(t, db.AddLog(createTruncatedHash(9), eth.BlockID{Hash: createHash(9), Number: 1}, 500, i, nil)) + } + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 15}, 5000, 0, &execMsg) + require.NoError(t, err) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + requireContains(t, db, 15, 0, createHash(1), execMsg) + }) + }) + + t.Run("CheckpointBetweenExecLinkAndExecCheckNotIncrementingBlock", func(t *testing.T) { + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + for i := uint32(0); m.entryCount < searchCheckpointFrequency-2; i++ { + require.NoError(t, db.AddLog(createTruncatedHash(9), eth.BlockID{Hash: createHash(9), Number: 1}, 500, i, nil)) + } + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(15), Number: 1}, 5000, 252, &execMsg) + require.NoError(t, err) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + requireContains(t, db, 1, 252, createHash(1), execMsg) + }) + }) +} + func TestContains(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 0)) - require.NoError(t, db.AddLog(createTruncatedHash(3), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 1)) - require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 2)) - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(52), Number: 52}, 500, 0)) - require.NoError(t, db.AddLog(createTruncatedHash(3), eth.BlockID{Hash: createHash(52), Number: 52}, 500, 1)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 0, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(3), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 1, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 2, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(52), Number: 52}, 500, 0, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(3), eth.BlockID{Hash: createHash(52), Number: 52}, 500, 1, nil)) }, func(t *testing.T, db *DB, m *stubMetrics) { // Should find added logs @@ -339,7 +418,60 @@ func TestContains(t *testing.T) { requireNotContains(t, db, 50, 3, createHash(2)) // Should not find log when hash doesn't match log at block number and index - requireNotContains(t, db, 50, 0, createHash(5)) + requireWrongHash(t, db, 50, 0, createHash(5), ExecutingMessage{}) + }) +} + +func TestExecutes(t *testing.T) { + execMsg1 := ExecutingMessage{ + Chain: 33, + BlockNum: 22, + LogIdx: 99, + Timestamp: 948294, + Hash: createTruncatedHash(332299), + } + execMsg2 := ExecutingMessage{ + Chain: 44, + BlockNum: 55, + LogIdx: 66, + Timestamp: 77777, + Hash: createTruncatedHash(445566), + } + execMsg3 := ExecutingMessage{ + Chain: 77, + BlockNum: 88, + LogIdx: 89, + Timestamp: 6578567, + Hash: createTruncatedHash(778889), + } + runDBTest(t, + func(t *testing.T, db *DB, m *stubMetrics) { + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 0, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(3), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 1, &execMsg1)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 2, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(52), Number: 52}, 500, 0, &execMsg2)) + require.NoError(t, db.AddLog(createTruncatedHash(3), eth.BlockID{Hash: createHash(52), Number: 52}, 500, 1, &execMsg3)) + }, + func(t *testing.T, db *DB, m *stubMetrics) { + // Should find added logs + requireExecutingMessage(t, db, 50, 0, ExecutingMessage{}) + requireExecutingMessage(t, db, 50, 1, execMsg1) + requireExecutingMessage(t, db, 50, 2, ExecutingMessage{}) + requireExecutingMessage(t, db, 52, 0, execMsg2) + requireExecutingMessage(t, db, 52, 1, execMsg3) + + // Should not find log when block number too low + requireNotContains(t, db, 49, 0, createHash(1)) + + // Should not find log when block number too high + requireNotContains(t, db, 51, 0, createHash(1)) + + // Should not find log when requested log after end of database + requireNotContains(t, db, 52, 2, createHash(3)) + requireNotContains(t, db, 53, 0, createHash(3)) + + // Should not find log when log index too high + requireNotContains(t, db, 50, 3, createHash(2)) }) } @@ -356,7 +488,7 @@ func TestGetBlockInfo(t *testing.T) { t.Run("ReturnsEOFWhenRequestedBlockBeforeFirstSearchCheckpoint", func(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { - err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(11), Number: 11}, 500, 0) + err := db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(11), Number: 11}, 500, 0, nil) require.NoError(t, err) }, func(t *testing.T, db *DB, m *stubMetrics) { @@ -369,7 +501,7 @@ func TestGetBlockInfo(t *testing.T) { block := eth.BlockID{Hash: createHash(11), Number: 11} runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { - err := db.AddLog(createTruncatedHash(1), block, 500, 0) + err := db.AddLog(createTruncatedHash(1), block, 500, 0, nil) require.NoError(t, err) }, func(t *testing.T, db *DB, m *stubMetrics) { @@ -384,7 +516,7 @@ func TestGetBlockInfo(t *testing.T) { func(t *testing.T, db *DB, m *stubMetrics) { for i := 1; i < searchCheckpointFrequency+3; i++ { block := eth.BlockID{Hash: createHash(i), Number: uint64(i)} - err := db.AddLog(createTruncatedHash(i), block, uint64(i)*2, 0) + err := db.AddLog(createTruncatedHash(i), block, uint64(i)*2, 0, nil) require.NoError(t, err) } }, @@ -411,7 +543,8 @@ func requireClosestBlockInfo(t *testing.T, db *DB, searchFor uint64, expectedBlo require.Equal(t, TruncateHash(expectedHash), hash) } -func requireContains(t *testing.T, db *DB, blockNum uint64, logIdx uint32, logHash common.Hash) { +func requireContains(t *testing.T, db *DB, blockNum uint64, logIdx uint32, logHash common.Hash, execMsg ...ExecutingMessage) { + require.LessOrEqual(t, len(execMsg), 1, "cannot have multiple executing messages for a single log") m, ok := db.m.(*stubMetrics) require.True(t, ok, "Did not get the expected metrics type") result, err := db.Contains(blockNum, logIdx, TruncateHash(logHash)) @@ -419,6 +552,12 @@ func requireContains(t *testing.T, db *DB, blockNum uint64, logIdx uint32, logHa require.Truef(t, result, "Did not find log %v in block %v with hash %v", logIdx, blockNum, logHash) require.LessOrEqual(t, m.entriesReadForSearch, int64(searchCheckpointFrequency), "Should not need to read more than between two checkpoints") require.NotZero(t, m.entriesReadForSearch, "Must read at least some entries to find the log") + + var expectedExecMsg ExecutingMessage + if len(execMsg) == 1 { + expectedExecMsg = execMsg[0] + } + requireExecutingMessage(t, db, blockNum, logIdx, expectedExecMsg) } func requireNotContains(t *testing.T, db *DB, blockNum uint64, logIdx uint32, logHash common.Hash) { @@ -428,22 +567,154 @@ func requireNotContains(t *testing.T, db *DB, blockNum uint64, logIdx uint32, lo require.NoErrorf(t, err, "Error searching for log %v in block %v", logIdx, blockNum) require.Falsef(t, result, "Found unexpected log %v in block %v with hash %v", logIdx, blockNum, logHash) require.LessOrEqual(t, m.entriesReadForSearch, int64(searchCheckpointFrequency), "Should not need to read more than between two checkpoints") -} -func TestShouldRollBackInMemoryChangesOnWriteFailure(t *testing.T) { - t.Skip("TODO(optimism#10857)") + _, err = db.Executes(blockNum, logIdx) + require.ErrorIs(t, err, ErrNotFound, "Found unexpected log when getting executing message") + require.LessOrEqual(t, m.entriesReadForSearch, int64(searchCheckpointFrequency), "Should not need to read more than between two checkpoints") } -func TestShouldRecoverWhenSearchCheckpointWrittenButNotCanonicalHash(t *testing.T) { - t.Skip("TODO(optimism#10857)") +func requireExecutingMessage(t *testing.T, db *DB, blockNum uint64, logIdx uint32, execMsg ExecutingMessage) { + m, ok := db.m.(*stubMetrics) + require.True(t, ok, "Did not get the expected metrics type") + actualExecMsg, err := db.Executes(blockNum, logIdx) + require.NoError(t, err, "Error when searching for executing message") + require.Equal(t, execMsg, actualExecMsg, "Should return matching executing message") + require.LessOrEqual(t, m.entriesReadForSearch, int64(searchCheckpointFrequency), "Should not need to read more than between two checkpoints") + require.NotZero(t, m.entriesReadForSearch, "Must read at least some entries to find the log") } -func TestShouldRecoverWhenPartialEntryWritten(t *testing.T) { - t.Skip("TODO(optimism#10857)") +func requireWrongHash(t *testing.T, db *DB, blockNum uint64, logIdx uint32, logHash common.Hash, execMsg ExecutingMessage) { + m, ok := db.m.(*stubMetrics) + require.True(t, ok, "Did not get the expected metrics type") + result, err := db.Contains(blockNum, logIdx, TruncateHash(logHash)) + require.NoErrorf(t, err, "Error searching for log %v in block %v", logIdx, blockNum) + require.Falsef(t, result, "Found unexpected log %v in block %v with hash %v", logIdx, blockNum, logHash) + + _, err = db.Executes(blockNum, logIdx) + require.NoError(t, err, "Error when searching for executing message") + require.LessOrEqual(t, m.entriesReadForSearch, int64(searchCheckpointFrequency), "Should not need to read more than between two checkpoints") } -func TestShouldRecoverWhenInitiatingEventWrittenButNotExecutingLink(t *testing.T) { - t.Skip("TODO(optimism#10857)") +func TestRecoverOnCreate(t *testing.T) { + createDb := func(t *testing.T, store *stubEntryStore) (*DB, *stubMetrics, error) { + logger := testlog.Logger(t, log.LvlInfo) + m := &stubMetrics{} + db, err := NewFromEntryStore(logger, m, store) + return db, m, err + } + + validInitEvent, err := newInitiatingEvent(logContext{blockNum: 1, logIdx: 0}, 1, 0, createTruncatedHash(1), false) + require.NoError(t, err) + validEventSequence := []entrydb.Entry{ + newSearchCheckpoint(1, 0, 100).encode(), + newCanonicalHash(createTruncatedHash(344)).encode(), + validInitEvent.encode(), + } + var emptyEventSequence []entrydb.Entry + + for _, prefixEvents := range [][]entrydb.Entry{emptyEventSequence, validEventSequence} { + prefixEvents := prefixEvents + storeWithEvents := func(evts ...entrydb.Entry) *stubEntryStore { + store := &stubEntryStore{} + store.entries = append(store.entries, prefixEvents...) + store.entries = append(store.entries, evts...) + return store + } + t.Run(fmt.Sprintf("PrefixEvents-%v", len(prefixEvents)), func(t *testing.T) { + t.Run("NoTruncateWhenLastEntryIsLogWithNoExecMessage", func(t *testing.T) { + initEvent, err := newInitiatingEvent(logContext{blockNum: 3, logIdx: 0}, 3, 0, createTruncatedHash(1), false) + require.NoError(t, err) + store := storeWithEvents( + newSearchCheckpoint(3, 0, 100).encode(), + newCanonicalHash(createTruncatedHash(344)).encode(), + initEvent.encode(), + ) + db, m, err := createDb(t, store) + require.NoError(t, err) + require.EqualValues(t, len(prefixEvents)+3, m.entryCount) + requireContains(t, db, 3, 0, createHash(1)) + }) + + t.Run("NoTruncateWhenLastEntryIsExecutingCheck", func(t *testing.T) { + initEvent, err := newInitiatingEvent(logContext{blockNum: 3, logIdx: 0}, 3, 0, createTruncatedHash(1), true) + execMsg := ExecutingMessage{ + Chain: 4, + BlockNum: 10, + LogIdx: 4, + Timestamp: 1288, + Hash: createTruncatedHash(4), + } + require.NoError(t, err) + linkEvt, err := newExecutingLink(execMsg) + require.NoError(t, err) + store := storeWithEvents( + newSearchCheckpoint(3, 0, 100).encode(), + newCanonicalHash(createTruncatedHash(344)).encode(), + initEvent.encode(), + linkEvt.encode(), + newExecutingCheck(execMsg.Hash).encode(), + ) + db, m, err := createDb(t, store) + require.NoError(t, err) + require.EqualValues(t, len(prefixEvents)+5, m.entryCount) + requireContains(t, db, 3, 0, createHash(1), execMsg) + }) + + t.Run("TruncateWhenLastEntrySearchCheckpoint", func(t *testing.T) { + store := storeWithEvents(newSearchCheckpoint(3, 0, 100).encode()) + _, m, err := createDb(t, store) + require.NoError(t, err) + require.EqualValues(t, len(prefixEvents), m.entryCount) + }) + + t.Run("TruncateWhenLastEntryCanonicalHash", func(t *testing.T) { + store := storeWithEvents( + newSearchCheckpoint(3, 0, 100).encode(), + newCanonicalHash(createTruncatedHash(344)).encode(), + ) + _, m, err := createDb(t, store) + require.NoError(t, err) + require.EqualValues(t, len(prefixEvents), m.entryCount) + }) + + t.Run("TruncateWhenLastEntryInitEventWithExecMsg", func(t *testing.T) { + initEvent, err := newInitiatingEvent(logContext{blockNum: 3, logIdx: 0}, 3, 0, createTruncatedHash(1), true) + require.NoError(t, err) + store := storeWithEvents( + newSearchCheckpoint(3, 0, 100).encode(), + newCanonicalHash(createTruncatedHash(344)).encode(), + initEvent.encode(), + ) + _, m, err := createDb(t, store) + require.NoError(t, err) + require.EqualValues(t, len(prefixEvents), m.entryCount) + }) + + t.Run("TruncateWhenLastEntryInitEventWithExecLink", func(t *testing.T) { + initEvent, err := newInitiatingEvent(logContext{blockNum: 3, logIdx: 0}, 3, 0, createTruncatedHash(1), true) + require.NoError(t, err) + execMsg := ExecutingMessage{ + Chain: 4, + BlockNum: 10, + LogIdx: 4, + Timestamp: 1288, + Hash: createTruncatedHash(4), + } + require.NoError(t, err) + linkEvt, err := newExecutingLink(execMsg) + require.NoError(t, err) + store := storeWithEvents( + newSearchCheckpoint(3, 0, 100).encode(), + newCanonicalHash(createTruncatedHash(344)).encode(), + initEvent.encode(), + linkEvt.encode(), + ) + _, m, err := createDb(t, store) + require.NoError(t, err) + require.EqualValues(t, len(prefixEvents), m.entryCount) + }) + }) + } } func TestRewind(t *testing.T) { @@ -458,10 +729,10 @@ func TestRewind(t *testing.T) { t.Run("AfterLastBlock", func(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 0)) - require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 1)) - require.NoError(t, db.AddLog(createTruncatedHash(3), eth.BlockID{Hash: createHash(51), Number: 51}, 502, 0)) - require.NoError(t, db.AddLog(createTruncatedHash(4), eth.BlockID{Hash: createHash(74), Number: 74}, 700, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 0, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 1, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(3), eth.BlockID{Hash: createHash(51), Number: 51}, 502, 0, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(4), eth.BlockID{Hash: createHash(74), Number: 74}, 700, 0, nil)) require.NoError(t, db.Rewind(75)) }, func(t *testing.T, db *DB, m *stubMetrics) { @@ -475,8 +746,8 @@ func TestRewind(t *testing.T) { t.Run("BeforeFirstBlock", func(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 0)) - require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 1)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 0, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 1, nil)) require.NoError(t, db.Rewind(25)) }, func(t *testing.T, db *DB, m *stubMetrics) { @@ -489,10 +760,10 @@ func TestRewind(t *testing.T) { t.Run("AtFirstBlock", func(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 0)) - require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 1)) - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(51), Number: 51}, 502, 0)) - require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(51), Number: 51}, 502, 1)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 0, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 1, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(51), Number: 51}, 502, 0, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(51), Number: 51}, 502, 1, nil)) require.NoError(t, db.Rewind(50)) }, func(t *testing.T, db *DB, m *stubMetrics) { @@ -507,12 +778,12 @@ func TestRewind(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { for i := uint32(0); m.entryCount < searchCheckpointFrequency; i++ { - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(50), Number: 50}, 500, i)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(50), Number: 50}, 500, i, nil)) } require.EqualValues(t, searchCheckpointFrequency, m.entryCount) - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(51), Number: 51}, 502, 0)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(51), Number: 51}, 502, 0, nil)) require.EqualValues(t, searchCheckpointFrequency+3, m.entryCount, "Should have inserted new checkpoint and extra log") - require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(51), Number: 51}, 502, 1)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(51), Number: 51}, 502, 1, nil)) require.NoError(t, db.Rewind(50)) }, func(t *testing.T, db *DB, m *stubMetrics) { @@ -527,10 +798,10 @@ func TestRewind(t *testing.T) { t.Run("BetweenLogEntries", func(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 0)) - require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 1)) - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 0)) - require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 1)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 0, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 1, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 0, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 1, nil)) require.NoError(t, db.Rewind(55)) }, func(t *testing.T, db *DB, m *stubMetrics) { @@ -544,12 +815,12 @@ func TestRewind(t *testing.T) { t.Run("AtExistingLogEntry", func(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(59), Number: 59}, 500, 0)) - require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(59), Number: 59}, 500, 1)) - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 0)) - require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 1)) - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(61), Number: 61}, 502, 0)) - require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(61), Number: 61}, 502, 1)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(59), Number: 59}, 500, 0, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(59), Number: 59}, 500, 1, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 0, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 1, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(61), Number: 61}, 502, 0, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(61), Number: 61}, 502, 1, nil)) require.NoError(t, db.Rewind(60)) }, func(t *testing.T, db *DB, m *stubMetrics) { @@ -565,12 +836,12 @@ func TestRewind(t *testing.T) { t.Run("AtLastEntry", func(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 0)) - require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 1)) - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 0)) - require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 1)) - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(70), Number: 70}, 502, 0)) - require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(70), Number: 70}, 502, 1)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 0, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(50), Number: 50}, 500, 1, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 0, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 1, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(70), Number: 70}, 502, 0, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(70), Number: 70}, 502, 1, nil)) require.NoError(t, db.Rewind(70)) }, func(t *testing.T, db *DB, m *stubMetrics) { @@ -586,20 +857,20 @@ func TestRewind(t *testing.T) { t.Run("ReaddDeletedBlocks", func(t *testing.T) { runDBTest(t, func(t *testing.T, db *DB, m *stubMetrics) { - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(59), Number: 59}, 500, 0)) - require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(59), Number: 59}, 500, 1)) - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 0)) - require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 1)) - require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(61), Number: 61}, 502, 0)) - require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(61), Number: 61}, 502, 1)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(59), Number: 59}, 500, 0, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(59), Number: 59}, 500, 1, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 0, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 1, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(61), Number: 61}, 502, 0, nil)) + require.NoError(t, db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(61), Number: 61}, 502, 1, nil)) require.NoError(t, db.Rewind(60)) }, func(t *testing.T, db *DB, m *stubMetrics) { - err := db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(59), Number: 59}, 500, 1) + err := db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(59), Number: 59}, 500, 1, nil) require.ErrorIs(t, err, ErrLogOutOfOrder, "Cannot add block before rewound head") - err = db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 1) + err = db.AddLog(createTruncatedHash(2), eth.BlockID{Hash: createHash(60), Number: 60}, 502, 1, nil) require.ErrorIs(t, err, ErrLogOutOfOrder, "Cannot add block that was rewound to") - err = db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(60), Number: 61}, 502, 0) + err = db.AddLog(createTruncatedHash(1), eth.BlockID{Hash: createHash(60), Number: 61}, 502, 0, nil) require.NoError(t, err, "Can re-add deleted block") }) }) @@ -619,3 +890,34 @@ func (s *stubMetrics) RecordSearchEntriesRead(count int64) { } var _ Metrics = (*stubMetrics)(nil) + +type stubEntryStore struct { + entries []entrydb.Entry +} + +func (s *stubEntryStore) Size() int64 { + return int64(len(s.entries)) +} + +func (s *stubEntryStore) Read(idx int64) (entrydb.Entry, error) { + if idx < int64(len(s.entries)) { + return s.entries[idx], nil + } + return entrydb.Entry{}, io.EOF +} + +func (s *stubEntryStore) Append(entries ...entrydb.Entry) error { + s.entries = append(s.entries, entries...) + return nil +} + +func (s *stubEntryStore) Truncate(idx int64) error { + s.entries = s.entries[:min(s.Size()-1, idx+1)] + return nil +} + +func (s *stubEntryStore) Close() error { + return nil +} + +var _ EntryStore = (*stubEntryStore)(nil) diff --git a/op-supervisor/supervisor/backend/db/entries.go b/op-supervisor/supervisor/backend/db/entries.go index dfab804aaf0b..2bb3d3a1e843 100644 --- a/op-supervisor/supervisor/backend/db/entries.go +++ b/op-supervisor/supervisor/backend/db/entries.go @@ -71,6 +71,7 @@ func (c canonicalHash) encode() entrydb.Entry { type initiatingEvent struct { blockDiff uint8 incrementLogIdx bool + hasExecMsg bool logHash TruncatedHash } @@ -83,11 +84,12 @@ func newInitiatingEventFromEntry(data entrydb.Entry) (initiatingEvent, error) { return initiatingEvent{ blockDiff: blockNumDiff, incrementLogIdx: flags&eventFlagIncrementLogIdx != 0, + hasExecMsg: flags&eventFlagHasExecutingMessage != 0, logHash: TruncatedHash(data[3:23]), }, nil } -func newInitiatingEvent(pre logContext, blockNum uint64, logIdx uint32, logHash TruncatedHash) (initiatingEvent, error) { +func newInitiatingEvent(pre logContext, blockNum uint64, logIdx uint32, logHash TruncatedHash, hasExecMsg bool) (initiatingEvent, error) { blockDiff := blockNum - pre.blockNum if blockDiff > math.MaxUint8 { // TODO(optimism#10857): Need to find a way to support this. @@ -106,6 +108,7 @@ func newInitiatingEvent(pre logContext, blockNum uint64, logIdx uint32, logHash return initiatingEvent{ blockDiff: uint8(blockDiff), incrementLogIdx: logDiff > 0, + hasExecMsg: hasExecMsg, logHash: logHash, }, nil } @@ -121,6 +124,9 @@ func (i initiatingEvent) encode() entrydb.Entry { // Set flag to indicate log idx needs to be incremented (ie we're not directly after a checkpoint) flags = flags | eventFlagIncrementLogIdx } + if i.hasExecMsg { + flags = flags | eventFlagHasExecutingMessage + } data[2] = flags copy(data[3:23], i.logHash[:]) return data @@ -139,3 +145,106 @@ func (i initiatingEvent) postContext(pre logContext) logContext { } return post } + +// preContext is the reverse of postContext and calculates the logContext required as input to get the specified post +// context after applying this init event. +func (i initiatingEvent) preContext(post logContext) logContext { + pre := post + pre.blockNum = post.blockNum - uint64(i.blockDiff) + if i.incrementLogIdx { + pre.logIdx-- + } + return pre +} + +type executingLink struct { + chain uint32 + blockNum uint64 + logIdx uint32 + timestamp uint64 +} + +func newExecutingLink(msg ExecutingMessage) (executingLink, error) { + if msg.LogIdx > 1<<24 { + return executingLink{}, fmt.Errorf("log idx is too large (%v)", msg.LogIdx) + } + return executingLink{ + chain: msg.Chain, + blockNum: msg.BlockNum, + logIdx: msg.LogIdx, + timestamp: msg.Timestamp, + }, nil +} + +func newExecutingLinkFromEntry(data entrydb.Entry) (executingLink, error) { + if data[0] != typeExecutingLink { + return executingLink{}, fmt.Errorf("%w: attempting to decode executing link but was type %v", ErrDataCorruption, data[0]) + } + timestamp := binary.LittleEndian.Uint64(data[16:24]) + return executingLink{ + chain: binary.LittleEndian.Uint32(data[1:5]), + blockNum: binary.LittleEndian.Uint64(data[5:13]), + logIdx: uint32(data[13]) | uint32(data[14])<<8 | uint32(data[15])<<16, + timestamp: timestamp, + }, nil +} + +// encode creates an executing link entry +// type 3: "executing link" = 24 bytes +func (e executingLink) encode() entrydb.Entry { + var entry entrydb.Entry + entry[0] = typeExecutingLink + binary.LittleEndian.PutUint32(entry[1:5], e.chain) + binary.LittleEndian.PutUint64(entry[5:13], e.blockNum) + + entry[13] = byte(e.logIdx) + entry[14] = byte(e.logIdx >> 8) + entry[15] = byte(e.logIdx >> 16) + + binary.LittleEndian.PutUint64(entry[16:24], e.timestamp) + return entry +} + +type executingCheck struct { + hash TruncatedHash +} + +func newExecutingCheck(hash TruncatedHash) executingCheck { + return executingCheck{hash: hash} +} + +func newExecutingCheckFromEntry(entry entrydb.Entry) (executingCheck, error) { + if entry[0] != typeExecutingCheck { + return executingCheck{}, fmt.Errorf("%w: attempting to decode executing check but was type %v", ErrDataCorruption, entry[0]) + } + var hash TruncatedHash + copy(hash[:], entry[1:21]) + return newExecutingCheck(hash), nil +} + +// encode creates an executing check entry +// type 4: "executing check" = 21 bytes +func (e executingCheck) encode() entrydb.Entry { + var entry entrydb.Entry + entry[0] = typeExecutingCheck + copy(entry[1:21], e.hash[:]) + return entry +} + +func newExecutingMessageFromEntries(linkEntry entrydb.Entry, checkEntry entrydb.Entry) (ExecutingMessage, error) { + link, err := newExecutingLinkFromEntry(linkEntry) + if err != nil { + return ExecutingMessage{}, fmt.Errorf("invalid executing link: %w", err) + } + check, err := newExecutingCheckFromEntry(checkEntry) + if err != nil { + return ExecutingMessage{}, fmt.Errorf("invalid executing check: %w", err) + } + return ExecutingMessage{ + Chain: link.chain, + BlockNum: link.blockNum, + LogIdx: link.logIdx, + Timestamp: link.timestamp, + Hash: check.hash, + }, nil +} diff --git a/op-supervisor/supervisor/backend/db/entrydb/entry_db.go b/op-supervisor/supervisor/backend/db/entrydb/entry_db.go index 29e135034a39..43d22e457e65 100644 --- a/op-supervisor/supervisor/backend/db/entrydb/entry_db.go +++ b/op-supervisor/supervisor/backend/db/entrydb/entry_db.go @@ -5,6 +5,8 @@ import ( "fmt" "io" "os" + + "github.com/ethereum/go-ethereum/log" ) const ( @@ -23,12 +25,20 @@ type dataAccess interface { } type EntryDB struct { - data dataAccess - lastEntryIdx int64 + data dataAccess + size int64 + + cleanupFailedWrite bool } -func NewEntryDB(path string) (*EntryDB, error) { - file, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0o666) +// NewEntryDB creates an EntryDB. A new file will be created if the specified path does not exist, +// but parent directories will not be created. +// If the file exists it will be used as the existing data. +// Returns ErrRecoveryRequired if the existing file is not a valid entry db. A EntryDB is still returned but all +// operations will return ErrRecoveryRequired until the Recover method is called. +func NewEntryDB(logger log.Logger, path string) (*EntryDB, error) { + logger.Info("Opening entry database", "path", path) + file, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0o644) if err != nil { return nil, fmt.Errorf("failed to open database at %v: %w", path, err) } @@ -36,18 +46,29 @@ func NewEntryDB(path string) (*EntryDB, error) { if err != nil { return nil, fmt.Errorf("failed to stat database at %v: %w", path, err) } - lastEntryIdx := info.Size()/EntrySize - 1 - return &EntryDB{ - data: file, - lastEntryIdx: lastEntryIdx, - }, nil + size := info.Size() / EntrySize + db := &EntryDB{ + data: file, + size: size, + } + if size*EntrySize != info.Size() { + logger.Warn("File size (%v) is nut a multiple of entry size %v. Truncating to last complete entry", size, EntrySize) + if err := db.recover(); err != nil { + return nil, fmt.Errorf("failed to recover database at %v: %w", path, err) + } + } + return db, nil } func (e *EntryDB) Size() int64 { - return e.lastEntryIdx + 1 + return e.size } +// Read an entry from the database by index. Returns io.EOF iff idx is after the last entry. func (e *EntryDB) Read(idx int64) (Entry, error) { + if idx >= e.size { + return Entry{}, io.EOF + } var out Entry read, err := e.data.ReadAt(out[:], idx*EntrySize) // Ignore io.EOF if we read the entire last entry as ReadAt may return io.EOF or nil when it reads the last byte @@ -57,25 +78,55 @@ func (e *EntryDB) Read(idx int64) (Entry, error) { return out, nil } +// Append entries to the database. +// The entries are combined in memory and passed to a single Write invocation. +// If the write fails, it will attempt to truncate any partially written data. +// Subsequent writes to this instance will fail until partially written data is truncated. func (e *EntryDB) Append(entries ...Entry) error { + if e.cleanupFailedWrite { + // Try to rollback partially written data from a previous Append + if truncateErr := e.Truncate(e.size - 1); truncateErr != nil { + return fmt.Errorf("failed to recover from previous write error: %w", truncateErr) + } + } + data := make([]byte, 0, len(entries)*EntrySize) for _, entry := range entries { - if _, err := e.data.Write(entry[:]); err != nil { - // TODO(optimism#10857): When a write fails, need to revert any in memory changes and truncate back to the - // pre-write state. Likely need to batch writes for multiple entries into a single write akin to transactions - // to avoid leaving hanging entries without the entry that should follow them. + data = append(data, entry[:]...) + } + if n, err := e.data.Write(data); err != nil { + if n == 0 { + // Didn't write any data, so no recovery required return err } - e.lastEntryIdx++ + // Try to rollback the partially written data + if truncateErr := e.Truncate(e.size - 1); truncateErr != nil { + // Failed to rollback, set a flag to attempt the clean up on the next write + e.cleanupFailedWrite = true + return errors.Join(err, fmt.Errorf("failed to remove partially written data: %w", truncateErr)) + } + // Successfully rolled back the changes, still report the failed write + return err } + e.size += int64(len(entries)) return nil } +// Truncate the database so that the last retained entry is idx. Any entries after idx are deleted. func (e *EntryDB) Truncate(idx int64) error { if err := e.data.Truncate((idx + 1) * EntrySize); err != nil { return fmt.Errorf("failed to truncate to entry %v: %w", idx, err) } - // Update the lastEntryIdx cache and then use db.init() to find the log context for the new latest log entry - e.lastEntryIdx = idx + // Update the lastEntryIdx cache + e.size = idx + 1 + e.cleanupFailedWrite = false + return nil +} + +// recover an invalid database by truncating back to the last complete event. +func (e *EntryDB) recover() error { + if err := e.data.Truncate((e.size) * EntrySize); err != nil { + return fmt.Errorf("failed to truncate trailing partial entries: %w", err) + } return nil } diff --git a/op-supervisor/supervisor/backend/db/entrydb/entry_db_test.go b/op-supervisor/supervisor/backend/db/entrydb/entry_db_test.go index 0466884c1a87..9f7dddccbb43 100644 --- a/op-supervisor/supervisor/backend/db/entrydb/entry_db_test.go +++ b/op-supervisor/supervisor/backend/db/entrydb/entry_db_test.go @@ -2,20 +2,30 @@ package entrydb import ( "bytes" + "errors" "io" + "os" "path/filepath" "testing" + "github.com/ethereum-optimism/optimism/op-service/testlog" + "github.com/ethereum/go-ethereum/log" "github.com/stretchr/testify/require" ) func TestReadWrite(t *testing.T) { t.Run("BasicReadWrite", func(t *testing.T) { db := createEntryDB(t) + require.EqualValues(t, 0, db.Size()) require.NoError(t, db.Append(createEntry(1))) + require.EqualValues(t, 1, db.Size()) require.NoError(t, db.Append(createEntry(2))) + require.EqualValues(t, 2, db.Size()) require.NoError(t, db.Append(createEntry(3))) + require.EqualValues(t, 3, db.Size()) require.NoError(t, db.Append(createEntry(4))) + require.EqualValues(t, 4, db.Size()) + requireRead(t, db, 0, createEntry(1)) requireRead(t, db, 1, createEntry(2)) requireRead(t, db, 2, createEntry(3)) @@ -33,11 +43,8 @@ func TestReadWrite(t *testing.T) { t.Run("WriteMultiple", func(t *testing.T) { db := createEntryDB(t) - require.NoError(t, db.Append( - createEntry(1), - createEntry(2), - createEntry(3), - )) + require.NoError(t, db.Append(createEntry(1), createEntry(2), createEntry(3))) + require.EqualValues(t, 3, db.Size()) requireRead(t, db, 0, createEntry(1)) requireRead(t, db, 1, createEntry(2)) requireRead(t, db, 2, createEntry(3)) @@ -45,23 +52,129 @@ func TestReadWrite(t *testing.T) { } func TestTruncate(t *testing.T) { - db := createEntryDB(t) - require.NoError(t, db.Append(createEntry(1))) - require.NoError(t, db.Append(createEntry(2))) - require.NoError(t, db.Append(createEntry(3))) - require.NoError(t, db.Append(createEntry(4))) - require.NoError(t, db.Append(createEntry(5))) - - require.NoError(t, db.Truncate(3)) - requireRead(t, db, 0, createEntry(1)) - requireRead(t, db, 1, createEntry(2)) - requireRead(t, db, 2, createEntry(3)) - - // 4 and 5 have been removed - _, err := db.Read(4) - require.ErrorIs(t, err, io.EOF) - _, err = db.Read(5) - require.ErrorIs(t, err, io.EOF) + t.Run("Partial", func(t *testing.T) { + db := createEntryDB(t) + require.NoError(t, db.Append(createEntry(1))) + require.NoError(t, db.Append(createEntry(2))) + require.NoError(t, db.Append(createEntry(3))) + require.NoError(t, db.Append(createEntry(4))) + require.NoError(t, db.Append(createEntry(5))) + require.EqualValues(t, 5, db.Size()) + + require.NoError(t, db.Truncate(3)) + require.EqualValues(t, 4, db.Size()) // 0, 1, 2 and 3 are preserved + requireRead(t, db, 0, createEntry(1)) + requireRead(t, db, 1, createEntry(2)) + requireRead(t, db, 2, createEntry(3)) + + // 4 and 5 have been removed + _, err := db.Read(4) + require.ErrorIs(t, err, io.EOF) + _, err = db.Read(5) + require.ErrorIs(t, err, io.EOF) + }) + + t.Run("Complete", func(t *testing.T) { + db := createEntryDB(t) + require.NoError(t, db.Append(createEntry(1))) + require.NoError(t, db.Append(createEntry(2))) + require.NoError(t, db.Append(createEntry(3))) + require.EqualValues(t, 3, db.Size()) + + require.NoError(t, db.Truncate(-1)) + require.EqualValues(t, 0, db.Size()) // All items are removed + _, err := db.Read(0) + require.ErrorIs(t, err, io.EOF) + }) + + t.Run("AppendAfterTruncate", func(t *testing.T) { + db := createEntryDB(t) + require.NoError(t, db.Append(createEntry(1))) + require.NoError(t, db.Append(createEntry(2))) + require.NoError(t, db.Append(createEntry(3))) + require.EqualValues(t, 3, db.Size()) + + require.NoError(t, db.Truncate(1)) + require.EqualValues(t, 2, db.Size()) + newEntry := createEntry(4) + require.NoError(t, db.Append(newEntry)) + entry, err := db.Read(2) + require.NoError(t, err) + require.Equal(t, newEntry, entry) + }) +} + +func TestTruncateTrailingPartialEntries(t *testing.T) { + logger := testlog.Logger(t, log.LvlInfo) + file := filepath.Join(t.TempDir(), "entries.db") + entry1 := createEntry(1) + entry2 := createEntry(2) + invalidData := make([]byte, len(entry1)+len(entry2)+4) + copy(invalidData, entry1[:]) + copy(invalidData[EntrySize:], entry2[:]) + invalidData[len(invalidData)-1] = 3 // Some invalid trailing data + require.NoError(t, os.WriteFile(file, invalidData, 0o644)) + db, err := NewEntryDB(logger, file) + require.NoError(t, err) + defer db.Close() + + // Should automatically truncate the file to remove trailing partial entries + require.EqualValues(t, 2, db.Size()) + stat, err := os.Stat(file) + require.NoError(t, err) + require.EqualValues(t, 2*EntrySize, stat.Size()) +} + +func TestWriteErrors(t *testing.T) { + expectedErr := errors.New("some error") + + t.Run("TruncatePartiallyWrittenData", func(t *testing.T) { + db, stubData := createEntryDBWithStubData() + stubData.writeErr = expectedErr + stubData.writeErrAfterBytes = 3 + err := db.Append(createEntry(1), createEntry(2)) + require.ErrorIs(t, err, expectedErr) + + require.EqualValues(t, 0, db.Size(), "should not consider entries written") + require.Len(t, stubData.data, 0, "should truncate written bytes") + }) + + t.Run("FailBeforeDataWritten", func(t *testing.T) { + db, stubData := createEntryDBWithStubData() + stubData.writeErr = expectedErr + stubData.writeErrAfterBytes = 0 + err := db.Append(createEntry(1), createEntry(2)) + require.ErrorIs(t, err, expectedErr) + + require.EqualValues(t, 0, db.Size(), "should not consider entries written") + require.Len(t, stubData.data, 0, "no data written") + }) + + t.Run("PartialWriteAndTruncateFails", func(t *testing.T) { + db, stubData := createEntryDBWithStubData() + stubData.writeErr = expectedErr + stubData.writeErrAfterBytes = EntrySize + 2 + stubData.truncateErr = errors.New("boom") + err := db.Append(createEntry(1), createEntry(2)) + require.ErrorIs(t, err, expectedErr) + + require.EqualValues(t, 0, db.Size(), "should not consider entries written") + require.Len(t, stubData.data, stubData.writeErrAfterBytes, "rollback failed") + + _, err = db.Read(0) + require.ErrorIs(t, err, io.EOF, "should not have first entry") + _, err = db.Read(1) + require.ErrorIs(t, err, io.EOF, "should not have second entry") + + // Should retry truncate on next write + stubData.writeErr = nil + stubData.truncateErr = nil + err = db.Append(createEntry(3)) + require.NoError(t, err) + actual, err := db.Read(0) + require.NoError(t, err) + require.Equal(t, createEntry(3), actual) + }) } func requireRead(t *testing.T, db *EntryDB, idx int64, expected Entry) { @@ -75,10 +188,51 @@ func createEntry(i byte) Entry { } func createEntryDB(t *testing.T) *EntryDB { - db, err := NewEntryDB(filepath.Join(t.TempDir(), "entries.db")) + logger := testlog.Logger(t, log.LvlInfo) + db, err := NewEntryDB(logger, filepath.Join(t.TempDir(), "entries.db")) require.NoError(t, err) t.Cleanup(func() { require.NoError(t, db.Close()) }) return db } + +func createEntryDBWithStubData() (*EntryDB, *stubDataAccess) { + stubData := &stubDataAccess{} + db := &EntryDB{data: stubData, size: 0} + return db, stubData +} + +type stubDataAccess struct { + data []byte + writeErr error + writeErrAfterBytes int + truncateErr error +} + +func (s *stubDataAccess) ReadAt(p []byte, off int64) (n int, err error) { + return bytes.NewReader(s.data).ReadAt(p, off) +} + +func (s *stubDataAccess) Write(p []byte) (n int, err error) { + if s.writeErr != nil { + s.data = append(s.data, p[:s.writeErrAfterBytes]...) + return s.writeErrAfterBytes, s.writeErr + } + s.data = append(s.data, p...) + return len(p), nil +} + +func (s *stubDataAccess) Close() error { + return nil +} + +func (s *stubDataAccess) Truncate(size int64) error { + if s.truncateErr != nil { + return s.truncateErr + } + s.data = s.data[:size] + return nil +} + +var _ dataAccess = (*stubDataAccess)(nil) diff --git a/op-supervisor/supervisor/backend/db/iterator.go b/op-supervisor/supervisor/backend/db/iterator.go index 88c92623db7a..da3047ee601a 100644 --- a/op-supervisor/supervisor/backend/db/iterator.go +++ b/op-supervisor/supervisor/backend/db/iterator.go @@ -1,6 +1,7 @@ package db import ( + "errors" "fmt" "io" ) @@ -9,7 +10,8 @@ type iterator struct { db *DB nextEntryIdx int64 - current logContext + current logContext + hasExecMsg bool entriesRead int64 } @@ -24,6 +26,7 @@ func (i *iterator) NextLog() (blockNum uint64, logIdx uint32, evtHash TruncatedH } i.nextEntryIdx++ i.entriesRead++ + i.hasExecMsg = false switch entry[0] { case typeSearchCheckpoint: current, err := newSearchCheckpointFromEntry(entry) @@ -33,8 +36,6 @@ func (i *iterator) NextLog() (blockNum uint64, logIdx uint32, evtHash TruncatedH } i.current.blockNum = current.blockNum i.current.logIdx = current.logIdx - case typeCanonicalHash: - // Skip case typeInitiatingEvent: evt, err := newInitiatingEventFromEntry(entry) if err != nil { @@ -45,11 +46,11 @@ func (i *iterator) NextLog() (blockNum uint64, logIdx uint32, evtHash TruncatedH blockNum = i.current.blockNum logIdx = i.current.logIdx evtHash = evt.logHash + i.hasExecMsg = evt.hasExecMsg return - case typeExecutingCheck: - // TODO(optimism#10857): Handle this properly - case typeExecutingLink: - // TODO(optimism#10857): Handle this properly + case typeCanonicalHash: // Skip + case typeExecutingCheck: // Skip + case typeExecutingLink: // Skip default: outErr = fmt.Errorf("unknown entry type at idx %v %v", entryIdx, entry[0]) return @@ -58,3 +59,41 @@ func (i *iterator) NextLog() (blockNum uint64, logIdx uint32, evtHash TruncatedH outErr = io.EOF return } + +func (i *iterator) ExecMessage() (ExecutingMessage, error) { + if !i.hasExecMsg { + return ExecutingMessage{}, nil + } + // Look ahead to find the exec message info + logEntryIdx := i.nextEntryIdx - 1 + execMsg, err := i.readExecMessage(logEntryIdx) + if err != nil { + return ExecutingMessage{}, fmt.Errorf("failed to read exec message for initiating event at %v: %w", logEntryIdx, err) + } + return execMsg, nil +} + +func (i *iterator) readExecMessage(initEntryIdx int64) (ExecutingMessage, error) { + linkIdx := initEntryIdx + 1 + if linkIdx%searchCheckpointFrequency == 0 { + linkIdx += 2 // skip the search checkpoint and canonical hash entries + } + linkEntry, err := i.db.store.Read(linkIdx) + if errors.Is(err, io.EOF) { + return ExecutingMessage{}, fmt.Errorf("%w: missing expected executing link event at idx %v", ErrDataCorruption, linkIdx) + } else if err != nil { + return ExecutingMessage{}, fmt.Errorf("failed to read executing link event at idx %v: %w", linkIdx, err) + } + + checkIdx := linkIdx + 1 + if checkIdx%searchCheckpointFrequency == 0 { + checkIdx += 2 // skip the search checkpoint and canonical hash entries + } + checkEntry, err := i.db.store.Read(checkIdx) + if errors.Is(err, io.EOF) { + return ExecutingMessage{}, fmt.Errorf("%w: missing expected executing check event at idx %v", ErrDataCorruption, checkIdx) + } else if err != nil { + return ExecutingMessage{}, fmt.Errorf("failed to read executing check event at idx %v: %w", checkIdx, err) + } + return newExecutingMessageFromEntries(linkEntry, checkEntry) +} diff --git a/op-supervisor/supervisor/backend/db/types.go b/op-supervisor/supervisor/backend/db/types.go new file mode 100644 index 000000000000..a9f9e50f6c07 --- /dev/null +++ b/op-supervisor/supervisor/backend/db/types.go @@ -0,0 +1,29 @@ +package db + +import ( + "errors" + + "github.com/ethereum/go-ethereum/common" +) + +var ( + ErrLogOutOfOrder = errors.New("log out of order") + ErrDataCorruption = errors.New("data corruption") + ErrNotFound = errors.New("not found") +) + +type TruncatedHash [20]byte + +func TruncateHash(hash common.Hash) TruncatedHash { + var truncated TruncatedHash + copy(truncated[:], hash[0:20]) + return truncated +} + +type ExecutingMessage struct { + Chain uint32 + BlockNum uint64 + LogIdx uint32 + Timestamp uint64 + Hash TruncatedHash +} From d8bde214deeb50578dfd0c24900b94fc27055d5d Mon Sep 17 00:00:00 2001 From: amber guru Date: Wed, 26 Jun 2024 01:57:49 +0800 Subject: [PATCH 104/141] op-e2e: Replace errors import with errutil in correct case (#10844) * Replace errors import with errutil in correct case * fix after goimports -w . --- cannon/example/claim/main.go | 2 +- op-e2e/e2eutils/disputegame/output_game_helper.go | 13 ++++--------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/cannon/example/claim/main.go b/cannon/example/claim/main.go index ac22fa909040..72b2064dec98 100644 --- a/cannon/example/claim/main.go +++ b/cannon/example/claim/main.go @@ -5,7 +5,7 @@ import ( "fmt" "os" - "github.com/ethereum-optimism/optimism/op-preimage" + preimage "github.com/ethereum-optimism/optimism/op-preimage" ) type rawHint string diff --git a/op-e2e/e2eutils/disputegame/output_game_helper.go b/op-e2e/e2eutils/disputegame/output_game_helper.go index f57b92a4508a..e7b9a35d10b5 100644 --- a/op-e2e/e2eutils/disputegame/output_game_helper.go +++ b/op-e2e/e2eutils/disputegame/output_game_helper.go @@ -3,7 +3,6 @@ package disputegame import ( "context" "crypto/ecdsa" - "errors" "fmt" "math/big" "testing" @@ -19,6 +18,7 @@ import ( "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/transactions" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait" preimage "github.com/ethereum-optimism/optimism/op-preimage" + "github.com/ethereum-optimism/optimism/op-service/errutil" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/sources/batching/rpcblock" "github.com/ethereum/go-ethereum/accounts/abi/bind" @@ -578,20 +578,15 @@ func (g *OutputGameHelper) hasClaim(ctx context.Context, parentIdx int64, pos ty return false } -type ErrWithData interface { - ErrorData() interface{} -} - // StepFails attempts to call step and verifies that it fails with ValidStep() func (g *OutputGameHelper) StepFails(ctx context.Context, claimIdx int64, isAttack bool, stateData []byte, proof []byte) { g.T.Logf("Attempting step against claim %v isAttack: %v", claimIdx, isAttack) candidate, err := g.Game.StepTx(uint64(claimIdx), isAttack, stateData, proof) g.Require.NoError(err, "Failed to create tx candidate") _, _, err = transactions.SendTx(ctx, g.Client, candidate, g.PrivKey, transactions.WithReceiptFail()) - var errData ErrWithData - ok := errors.As(err, &errData) - g.Require.Truef(ok, "Error should provide ErrorData method: %v", err) - g.Require.Equal("0xfb4e40dd", errData.ErrorData(), "Revert reason should be abi encoded ValidStep()") + err = errutil.TryAddRevertReason(err) + g.Require.Error(err, "Transaction should fail") + g.Require.Contains(err.Error(), "0xfb4e40dd", "Revert reason should be abi encoded ValidStep()") } // ResolveClaim resolves a single subgame From 73d56a9d5db3c621d700864ac4fd50bd9292b345 Mon Sep 17 00:00:00 2001 From: mbaxter Date: Tue, 25 Jun 2024 14:23:07 -0400 Subject: [PATCH 105/141] cannon: Encapsulate syscall helpers (#10978) * cannon: Increment MIPS.sol version * cannon: Add syscall args helper * cannon: Extract mmap helper * cannon: Extract sysRead helper Also: - Extract solidity memory helpers into new lib. - Reorganize syscall constants. * cannon: Add NatSpec documentation to solidity syscall helpers * cannon: Extract sysWrite helper * cannon: Use consistent naming convention * cannon: Extract sysFcntl helper, fix typos * cannon: Consolidate comments, fix formatting * cannon: Add helper for setting registers, pc fields * cannon: Reorganize syscall constants * cannon: Fix MIPSMemory import * cannon: Run semver-lock and snapshots * cannon: Explicitly inject proof offsets into helper fns Proofs offsets may differ between implementations, so these values must be passed into helper functions rather than calculated internally. * cannon: Remove hard-coded state.memRoot references from MIPSMemory.sol * cannon: Work around stack too deep error * cannon: Rework stack-too-deep fix * cannon: Run semver-lock and snapshots * cannon: Validate calldata size directly in readMem, writeMem * cannon: Run semver-lock and snapshots --- cannon/Makefile | 2 +- cannon/mipsevm/fuzz_evm_test.go | 2 +- cannon/mipsevm/instrumented.go | 15 - cannon/mipsevm/mips.go | 143 ++------ cannon/mipsevm/mips_syscalls.go | 195 +++++++++++ cannon/mipsevm/open_mips_tests/test/fcntl.asm | 2 +- packages/contracts-bedrock/semver-lock.json | 4 +- .../contracts-bedrock/src/cannon/MIPS.sol | 323 +++--------------- .../src/cannon/libraries/MIPSMemory.sol | 124 +++++++ .../src/cannon/libraries/MIPSSyscalls.sol | 279 +++++++++++++++ .../contracts-bedrock/test/cannon/MIPS.t.sol | 2 +- .../utils/DeploymentSummaryFaultProofs.sol | 2 +- .../DeploymentSummaryFaultProofsCode.sol | 6 +- 13 files changed, 678 insertions(+), 421 deletions(-) create mode 100644 cannon/mipsevm/mips_syscalls.go create mode 100644 packages/contracts-bedrock/src/cannon/libraries/MIPSMemory.sol create mode 100644 packages/contracts-bedrock/src/cannon/libraries/MIPSSyscalls.sol diff --git a/cannon/Makefile b/cannon/Makefile index 3accd2e11bc3..3be2e1b304e0 100644 --- a/cannon/Makefile +++ b/cannon/Makefile @@ -30,7 +30,7 @@ fuzz: go test $(FUZZLDFLAGS) -run NOTAREALTEST -v -fuzztime 10s -fuzz=FuzzStateSyscallClone ./mipsevm go test $(FUZZLDFLAGS) -run NOTAREALTEST -v -fuzztime 10s -fuzz=FuzzStateSyscallMmap ./mipsevm go test $(FUZZLDFLAGS) -run NOTAREALTEST -v -fuzztime 10s -fuzz=FuzzStateSyscallExitGroup ./mipsevm - go test $(FUZZLDFLAGS) -run NOTAREALTEST -v -fuzztime 10s -fuzz=FuzzStateSyscallFnctl ./mipsevm + go test $(FUZZLDFLAGS) -run NOTAREALTEST -v -fuzztime 10s -fuzz=FuzzStateSyscallFcntl ./mipsevm go test $(FUZZLDFLAGS) -run NOTAREALTEST -v -fuzztime 10s -fuzz=FuzzStateHintRead ./mipsevm go test $(FUZZLDFLAGS) -run NOTAREALTEST -v -fuzztime 20s -fuzz=FuzzStatePreimageRead ./mipsevm go test $(FUZZLDFLAGS) -run NOTAREALTEST -v -fuzztime 10s -fuzz=FuzzStateHintWrite ./mipsevm diff --git a/cannon/mipsevm/fuzz_evm_test.go b/cannon/mipsevm/fuzz_evm_test.go index c85bfb530d57..9b11f9363c93 100644 --- a/cannon/mipsevm/fuzz_evm_test.go +++ b/cannon/mipsevm/fuzz_evm_test.go @@ -229,7 +229,7 @@ func FuzzStateSyscallExitGroup(f *testing.F) { }) } -func FuzzStateSyscallFnctl(f *testing.F) { +func FuzzStateSyscallFcntl(f *testing.F) { contracts, addrs := testContractsSetup(f) f.Fuzz(func(t *testing.T, fd uint32, cmd uint32) { state := &State{ diff --git a/cannon/mipsevm/instrumented.go b/cannon/mipsevm/instrumented.go index 7d929b6bbf7b..011c7c4d0630 100644 --- a/cannon/mipsevm/instrumented.go +++ b/cannon/mipsevm/instrumented.go @@ -39,21 +39,6 @@ type InstrumentedState struct { debugEnabled bool } -const ( - fdStdin = 0 - fdStdout = 1 - fdStderr = 2 - fdHintRead = 3 - fdHintWrite = 4 - fdPreimageRead = 5 - fdPreimageWrite = 6 -) - -const ( - MipsEBADF = 0x9 - MipsEINVAL = 0x16 -) - func NewInstrumentedState(state *State, po PreimageOracle, stdOut, stdErr io.Writer) *InstrumentedState { return &InstrumentedState{ state: state, diff --git a/cannon/mipsevm/mips.go b/cannon/mipsevm/mips.go index d2da1fdeae6b..e25bee13a275 100644 --- a/cannon/mipsevm/mips.go +++ b/cannon/mipsevm/mips.go @@ -3,17 +3,9 @@ package mipsevm import ( "encoding/binary" "fmt" - "io" -) -const ( - sysMmap = 4090 - sysBrk = 4045 - sysClone = 4120 - sysExitGroup = 4246 - sysRead = 4003 - sysWrite = 4004 - sysFcntl = 4055 + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" ) func (m *InstrumentedState) readPreimage(key [32]byte, offset uint32) (dat [32]byte, datLen uint32) { @@ -43,29 +35,17 @@ func (m *InstrumentedState) trackMemAccess(effAddr uint32) { } func (m *InstrumentedState) handleSyscall() error { - syscallNum := m.state.Registers[2] // v0 + syscallNum, a0, a1, a2 := getSyscallArgs(&m.state.Registers) + v0 := uint32(0) v1 := uint32(0) - a0 := m.state.Registers[4] - a1 := m.state.Registers[5] - a2 := m.state.Registers[6] - //fmt.Printf("syscall: %d\n", syscallNum) switch syscallNum { case sysMmap: - sz := a1 - if sz&PageAddrMask != 0 { // adjust size to align with page size - sz += PageSize - (sz & PageAddrMask) - } - if a0 == 0 { - v0 = m.state.Heap - //fmt.Printf("mmap heap 0x%x size 0x%x\n", v0, sz) - m.state.Heap += sz - } else { - v0 = a0 - //fmt.Printf("mmap hint 0x%x size 0x%x\n", v0, sz) - } + var newHeap uint32 + v0, v1, newHeap = handleSysMmap(a0, a1, m.state.Heap) + m.state.Heap = newHeap case sysBrk: v0 = 0x40000000 case sysClone: // clone (not supported) @@ -75,107 +55,22 @@ func (m *InstrumentedState) handleSyscall() error { m.state.ExitCode = uint8(a0) return nil case sysRead: - // args: a0 = fd, a1 = addr, a2 = count - // returns: v0 = read, v1 = err code - switch a0 { - case fdStdin: - // leave v0 and v1 zero: read nothing, no error - case fdPreimageRead: // pre-image oracle - effAddr := a1 & 0xFFffFFfc - m.trackMemAccess(effAddr) - mem := m.state.Memory.GetMemory(effAddr) - dat, datLen := m.readPreimage(m.state.PreimageKey, m.state.PreimageOffset) - //fmt.Printf("reading pre-image data: addr: %08x, offset: %d, datLen: %d, data: %x, key: %s count: %d\n", a1, m.state.PreimageOffset, datLen, dat[:datLen], m.state.PreimageKey, a2) - alignment := a1 & 3 - space := 4 - alignment - if space < datLen { - datLen = space - } - if a2 < datLen { - datLen = a2 - } - var outMem [4]byte - binary.BigEndian.PutUint32(outMem[:], mem) - copy(outMem[alignment:], dat[:datLen]) - m.state.Memory.SetMemory(effAddr, binary.BigEndian.Uint32(outMem[:])) - m.state.PreimageOffset += datLen - v0 = datLen - //fmt.Printf("read %d pre-image bytes, new offset: %d, eff addr: %08x mem: %08x\n", datLen, m.state.PreimageOffset, effAddr, outMem) - case fdHintRead: // hint response - // don't actually read into memory, just say we read it all, we ignore the result anyway - v0 = a2 - default: - v0 = 0xFFffFFff - v1 = MipsEBADF - } + var newPreimageOffset uint32 + v0, v1, newPreimageOffset = handleSysRead(a0, a1, a2, m.state.PreimageKey, m.state.PreimageOffset, m.readPreimage, m.state.Memory, m.trackMemAccess) + m.state.PreimageOffset = newPreimageOffset case sysWrite: - // args: a0 = fd, a1 = addr, a2 = count - // returns: v0 = written, v1 = err code - switch a0 { - case fdStdout: - _, _ = io.Copy(m.stdOut, m.state.Memory.ReadMemoryRange(a1, a2)) - v0 = a2 - case fdStderr: - _, _ = io.Copy(m.stdErr, m.state.Memory.ReadMemoryRange(a1, a2)) - v0 = a2 - case fdHintWrite: - hintData, _ := io.ReadAll(m.state.Memory.ReadMemoryRange(a1, a2)) - m.state.LastHint = append(m.state.LastHint, hintData...) - for len(m.state.LastHint) >= 4 { // process while there is enough data to check if there are any hints - hintLen := binary.BigEndian.Uint32(m.state.LastHint[:4]) - if hintLen <= uint32(len(m.state.LastHint[4:])) { - hint := m.state.LastHint[4 : 4+hintLen] // without the length prefix - m.state.LastHint = m.state.LastHint[4+hintLen:] - m.preimageOracle.Hint(hint) - } else { - break // stop processing hints if there is incomplete data buffered - } - } - v0 = a2 - case fdPreimageWrite: - effAddr := a1 & 0xFFffFFfc - m.trackMemAccess(effAddr) - mem := m.state.Memory.GetMemory(effAddr) - key := m.state.PreimageKey - alignment := a1 & 3 - space := 4 - alignment - if space < a2 { - a2 = space - } - copy(key[:], key[a2:]) - var tmp [4]byte - binary.BigEndian.PutUint32(tmp[:], mem) - copy(key[32-a2:], tmp[alignment:]) - m.state.PreimageKey = key - m.state.PreimageOffset = 0 - //fmt.Printf("updating pre-image key: %s\n", m.state.PreimageKey) - v0 = a2 - default: - v0 = 0xFFffFFff - v1 = MipsEBADF - } + var newLastHint hexutil.Bytes + var newPreimageKey common.Hash + var newPreimageOffset uint32 + v0, v1, newLastHint, newPreimageKey, newPreimageOffset = handleSysWrite(a0, a1, a2, m.state.LastHint, m.state.PreimageKey, m.state.PreimageOffset, m.preimageOracle, m.state.Memory, m.trackMemAccess, m.stdOut, m.stdErr) + m.state.LastHint = newLastHint + m.state.PreimageKey = newPreimageKey + m.state.PreimageOffset = newPreimageOffset case sysFcntl: - // args: a0 = fd, a1 = cmd - if a1 == 3 { // F_GETFL: get file descriptor flags - switch a0 { - case fdStdin, fdPreimageRead, fdHintRead: - v0 = 0 // O_RDONLY - case fdStdout, fdStderr, fdPreimageWrite, fdHintWrite: - v0 = 1 // O_WRONLY - default: - v0 = 0xFFffFFff - v1 = MipsEBADF - } - } else { - v0 = 0xFFffFFff - v1 = MipsEINVAL // cmd not recognized by this kernel - } + v0, v1 = handleSysFcntl(a0, a1) } - m.state.Registers[2] = v0 - m.state.Registers[7] = v1 - m.state.Cpu.PC = m.state.Cpu.NextPC - m.state.Cpu.NextPC = m.state.Cpu.NextPC + 4 + handleSyscallUpdates(&m.state.Cpu, &m.state.Registers, v0, v1) return nil } diff --git a/cannon/mipsevm/mips_syscalls.go b/cannon/mipsevm/mips_syscalls.go new file mode 100644 index 000000000000..098cf0cd7cfa --- /dev/null +++ b/cannon/mipsevm/mips_syscalls.go @@ -0,0 +1,195 @@ +package mipsevm + +import ( + "encoding/binary" + "io" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" +) + +const ( + sysMmap = 4090 + sysBrk = 4045 + sysClone = 4120 + sysExitGroup = 4246 + sysRead = 4003 + sysWrite = 4004 + sysFcntl = 4055 +) + +const ( + fdStdin = 0 + fdStdout = 1 + fdStderr = 2 + fdHintRead = 3 + fdHintWrite = 4 + fdPreimageRead = 5 + fdPreimageWrite = 6 +) + +const ( + MipsEBADF = 0x9 + MipsEINVAL = 0x16 +) + +type PreimageReader func(key [32]byte, offset uint32) (dat [32]byte, datLen uint32) +type MemTracker func(addr uint32) + +func getSyscallArgs(registers *[32]uint32) (syscallNum, a0, a1, a2 uint32) { + syscallNum = registers[2] // v0 + + a0 = registers[4] + a1 = registers[5] + a2 = registers[6] + + return syscallNum, a0, a1, a2 +} + +func handleSysMmap(a0, a1, heap uint32) (v0, v1, newHeap uint32) { + v1 = uint32(0) + newHeap = heap + + sz := a1 + if sz&PageAddrMask != 0 { // adjust size to align with page size + sz += PageSize - (sz & PageAddrMask) + } + if a0 == 0 { + v0 = heap + //fmt.Printf("mmap heap 0x%x size 0x%x\n", v0, sz) + newHeap += sz + } else { + v0 = a0 + //fmt.Printf("mmap hint 0x%x size 0x%x\n", v0, sz) + } + + return v0, v1, newHeap +} + +func handleSysRead(a0, a1, a2 uint32, preimageKey [32]byte, preimageOffset uint32, preimageReader PreimageReader, memory *Memory, memTracker MemTracker) (v0, v1, newPreimageOffset uint32) { + // args: a0 = fd, a1 = addr, a2 = count + // returns: v0 = read, v1 = err code + v0 = uint32(0) + v1 = uint32(0) + newPreimageOffset = preimageOffset + + switch a0 { + case fdStdin: + // leave v0 and v1 zero: read nothing, no error + case fdPreimageRead: // pre-image oracle + effAddr := a1 & 0xFFffFFfc + memTracker(effAddr) + mem := memory.GetMemory(effAddr) + dat, datLen := preimageReader(preimageKey, preimageOffset) + //fmt.Printf("reading pre-image data: addr: %08x, offset: %d, datLen: %d, data: %x, key: %s count: %d\n", a1, m.state.PreimageOffset, datLen, dat[:datLen], m.state.PreimageKey, a2) + alignment := a1 & 3 + space := 4 - alignment + if space < datLen { + datLen = space + } + if a2 < datLen { + datLen = a2 + } + var outMem [4]byte + binary.BigEndian.PutUint32(outMem[:], mem) + copy(outMem[alignment:], dat[:datLen]) + memory.SetMemory(effAddr, binary.BigEndian.Uint32(outMem[:])) + newPreimageOffset += datLen + v0 = datLen + //fmt.Printf("read %d pre-image bytes, new offset: %d, eff addr: %08x mem: %08x\n", datLen, m.state.PreimageOffset, effAddr, outMem) + case fdHintRead: // hint response + // don't actually read into memory, just say we read it all, we ignore the result anyway + v0 = a2 + default: + v0 = 0xFFffFFff + v1 = MipsEBADF + } + + return v0, v1, newPreimageOffset +} + +func handleSysWrite(a0, a1, a2 uint32, lastHint hexutil.Bytes, preimageKey [32]byte, preimageOffset uint32, oracle PreimageOracle, memory *Memory, memTracker MemTracker, stdOut, stdErr io.Writer) (v0, v1 uint32, newLastHint hexutil.Bytes, newPreimageKey common.Hash, newPreimageOffset uint32) { + // args: a0 = fd, a1 = addr, a2 = count + // returns: v0 = written, v1 = err code + v1 = uint32(0) + newLastHint = lastHint + newPreimageKey = preimageKey + newPreimageOffset = preimageOffset + + switch a0 { + case fdStdout: + _, _ = io.Copy(stdOut, memory.ReadMemoryRange(a1, a2)) + v0 = a2 + case fdStderr: + _, _ = io.Copy(stdErr, memory.ReadMemoryRange(a1, a2)) + v0 = a2 + case fdHintWrite: + hintData, _ := io.ReadAll(memory.ReadMemoryRange(a1, a2)) + lastHint = append(lastHint, hintData...) + for len(lastHint) >= 4 { // process while there is enough data to check if there are any hints + hintLen := binary.BigEndian.Uint32(lastHint[:4]) + if hintLen <= uint32(len(lastHint[4:])) { + hint := lastHint[4 : 4+hintLen] // without the length prefix + lastHint = lastHint[4+hintLen:] + oracle.Hint(hint) + } else { + break // stop processing hints if there is incomplete data buffered + } + } + newLastHint = lastHint + v0 = a2 + case fdPreimageWrite: + effAddr := a1 & 0xFFffFFfc + memTracker(effAddr) + mem := memory.GetMemory(effAddr) + key := preimageKey + alignment := a1 & 3 + space := 4 - alignment + if space < a2 { + a2 = space + } + copy(key[:], key[a2:]) + var tmp [4]byte + binary.BigEndian.PutUint32(tmp[:], mem) + copy(key[32-a2:], tmp[alignment:]) + newPreimageKey = key + newPreimageOffset = 0 + //fmt.Printf("updating pre-image key: %s\n", m.state.PreimageKey) + v0 = a2 + default: + v0 = 0xFFffFFff + v1 = MipsEBADF + } + + return v0, v1, newLastHint, newPreimageKey, newPreimageOffset +} + +func handleSysFcntl(a0, a1 uint32) (v0, v1 uint32) { + // args: a0 = fd, a1 = cmd + v1 = uint32(0) + + if a1 == 3 { // F_GETFL: get file descriptor flags + switch a0 { + case fdStdin, fdPreimageRead, fdHintRead: + v0 = 0 // O_RDONLY + case fdStdout, fdStderr, fdPreimageWrite, fdHintWrite: + v0 = 1 // O_WRONLY + default: + v0 = 0xFFffFFff + v1 = MipsEBADF + } + } else { + v0 = 0xFFffFFff + v1 = MipsEINVAL // cmd not recognized by this kernel + } + + return v0, v1 +} + +func handleSyscallUpdates(cpu *CpuScalars, registers *[32]uint32, v0, v1 uint32) { + registers[2] = v0 + registers[7] = v1 + + cpu.PC = cpu.NextPC + cpu.NextPC = cpu.NextPC + 4 +} diff --git a/cannon/mipsevm/open_mips_tests/test/fcntl.asm b/cannon/mipsevm/open_mips_tests/test/fcntl.asm index 451e90a11788..5f597bbe0c43 100644 --- a/cannon/mipsevm/open_mips_tests/test/fcntl.asm +++ b/cannon/mipsevm/open_mips_tests/test/fcntl.asm @@ -5,7 +5,7 @@ .ent test test: - # fnctl(0, 3) + # fcntl(0, 3) li $v0, 4055 li $a0, 0x0 li $a1, 0x3 diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index 4fd8642287af..4c0f50858687 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -124,8 +124,8 @@ "sourceCodeHash": "0x3ff4a3f21202478935412d47fd5ef7f94a170402ddc50e5c062013ce5544c83f" }, "src/cannon/MIPS.sol": { - "initCodeHash": "0x1742f31c43d067f94e669e50e632875ba2a2795127ea5bf429acf7ed39ddbc48", - "sourceCodeHash": "0xa50b47ddaee92c52c5f7cfb4b526f9d734c2eec524e7bb609b991d608f124c02" + "initCodeHash": "0xe9183ee3b69d9ec9594d6b3923d78c86c996cd738ccbc09675bb281284c060af", + "sourceCodeHash": "0x7c2eab73da8b2eeadba30eadb39f20e91307bc29218938fadfc5f73fadcf13bc" }, "src/cannon/PreimageOracle.sol": { "initCodeHash": "0xe5db668fe41436f53995e910488c7c140766ba8745e19743773ebab508efd090", diff --git a/packages/contracts-bedrock/src/cannon/MIPS.sol b/packages/contracts-bedrock/src/cannon/MIPS.sol index b3b9cf2facf9..f53dede0286f 100644 --- a/packages/contracts-bedrock/src/cannon/MIPS.sol +++ b/packages/contracts-bedrock/src/cannon/MIPS.sol @@ -5,7 +5,9 @@ import { ISemver } from "src/universal/ISemver.sol"; import { IPreimageOracle } from "./interfaces/IPreimageOracle.sol"; import { PreimageKeyLib } from "./PreimageKeyLib.sol"; import { MIPSInstructions as ins } from "src/cannon/libraries/MIPSInstructions.sol"; +import { MIPSSyscalls as sys } from "src/cannon/libraries/MIPSSyscalls.sol"; import { MIPSState as st } from "src/cannon/libraries/MIPSState.sol"; +import { MIPSMemory } from "src/cannon/libraries/MIPSMemory.sol"; /// @title MIPS /// @notice The MIPS contract emulates a single MIPS instruction. @@ -46,22 +48,14 @@ contract MIPS is ISemver { /// @notice The semantic version of the MIPS contract. /// @custom:semver 1.0.1 - string public constant version = "1.1.0-beta.3"; - - uint32 internal constant FD_STDIN = 0; - uint32 internal constant FD_STDOUT = 1; - uint32 internal constant FD_STDERR = 2; - uint32 internal constant FD_HINT_READ = 3; - uint32 internal constant FD_HINT_WRITE = 4; - uint32 internal constant FD_PREIMAGE_READ = 5; - uint32 internal constant FD_PREIMAGE_WRITE = 6; - - uint32 internal constant EBADF = 0x9; - uint32 internal constant EINVAL = 0x16; + string public constant version = "1.1.0-beta.4"; /// @notice The preimage oracle contract. IPreimageOracle internal immutable ORACLE; + // The offset of the start of proof calldata (_proof.offset) in the step() function + uint256 internal constant STEP_PROOF_OFFSET = 420; + /// @param _oracle The address of the preimage oracle contract. constructor(IPreimageOracle _oracle) { ORACLE = _oracle; @@ -148,277 +142,59 @@ contract MIPS is ISemver { state := 0x80 } - // Load the syscall number from the registers - uint32 syscall_no = state.registers[2]; + // Load the syscall numbers and args from the registers + (uint32 syscall_no, uint32 a0, uint32 a1, uint32 a2) = sys.getSyscallArgs(state.registers); + uint32 v0 = 0; uint32 v1 = 0; - // Load the syscall arguments from the registers - uint32 a0 = state.registers[4]; - uint32 a1 = state.registers[5]; - uint32 a2 = state.registers[6]; - - // mmap: Allocates a page from the heap. - if (syscall_no == 4090) { - uint32 sz = a1; - if (sz & 4095 != 0) { - // adjust size to align with page size - sz += 4096 - (sz & 4095); - } - if (a0 == 0) { - v0 = state.heap; - state.heap += sz; - } else { - v0 = a0; - } - } - // brk: Returns a fixed address for the program break at 0x40000000 - else if (syscall_no == 4045) { + if (syscall_no == sys.SYS_MMAP) { + (v0, v1, state.heap) = sys.handleSysMmap(a0, a1, state.heap); + } else if (syscall_no == sys.SYS_BRK) { + // brk: Returns a fixed address for the program break at 0x40000000 v0 = BRK_START; - } - // clone (not supported) returns 1 - else if (syscall_no == 4120) { + } else if (syscall_no == sys.SYS_CLONE) { + // clone (not supported) returns 1 v0 = 1; - } - // exit group: Sets the Exited and ExitCode states to true and argument 0. - else if (syscall_no == 4246) { + } else if (syscall_no == sys.SYS_EXIT_GROUP) { + // exit group: Sets the Exited and ExitCode states to true and argument 0. state.exited = true; state.exitCode = uint8(a0); return outputState(); - } - // read: Like Linux read syscall. Splits unaligned reads into aligned reads. - else if (syscall_no == 4003) { - // args: a0 = fd, a1 = addr, a2 = count - // returns: v0 = read, v1 = err code - if (a0 == FD_STDIN) { - // Leave v0 and v1 zero: read nothing, no error - } - // pre-image oracle read - else if (a0 == FD_PREIMAGE_READ) { - // verify proof 1 is correct, and get the existing memory. - uint32 mem = readMem(a1 & 0xFFffFFfc, 1); // mask the addr to align it to 4 bytes - bytes32 preimageKey = state.preimageKey; - // If the preimage key is a local key, localize it in the context of the caller. - if (uint8(preimageKey[0]) == 1) { - preimageKey = PreimageKeyLib.localize(preimageKey, _localContext); - } - (bytes32 dat, uint256 datLen) = ORACLE.readPreimage(preimageKey, state.preimageOffset); - - // Transform data for writing to memory - // We use assembly for more precise ops, and no var count limit - assembly { - let alignment := and(a1, 3) // the read might not start at an aligned address - let space := sub(4, alignment) // remaining space in memory word - if lt(space, datLen) { datLen := space } // if less space than data, shorten data - if lt(a2, datLen) { datLen := a2 } // if requested to read less, read less - dat := shr(sub(256, mul(datLen, 8)), dat) // right-align data - dat := shl(mul(sub(sub(4, datLen), alignment), 8), dat) // position data to insert into memory - // word - let mask := sub(shl(mul(sub(4, alignment), 8), 1), 1) // mask all bytes after start - let suffixMask := sub(shl(mul(sub(sub(4, alignment), datLen), 8), 1), 1) // mask of all bytes - // starting from end, maybe none - mask := and(mask, not(suffixMask)) // reduce mask to just cover the data we insert - mem := or(and(mem, not(mask)), dat) // clear masked part of original memory, and insert data - } - - // Write memory back - writeMem(a1 & 0xFFffFFfc, 1, mem); - state.preimageOffset += uint32(datLen); - v0 = uint32(datLen); - } - // hint response - else if (a0 == FD_HINT_READ) { - // Don't read into memory, just say we read it all - // The result is ignored anyway - v0 = a2; - } else { - v0 = 0xFFffFFff; - v1 = EBADF; - } - } - // write: like Linux write syscall. Splits unaligned writes into aligned writes. - else if (syscall_no == 4004) { - // args: a0 = fd, a1 = addr, a2 = count - // returns: v0 = written, v1 = err code - if (a0 == FD_STDOUT || a0 == FD_STDERR || a0 == FD_HINT_WRITE) { - v0 = a2; // tell program we have written everything - } - // pre-image oracle - else if (a0 == FD_PREIMAGE_WRITE) { - uint32 mem = readMem(a1 & 0xFFffFFfc, 1); // mask the addr to align it to 4 bytes - bytes32 key = state.preimageKey; - - // Construct pre-image key from memory - // We use assembly for more precise ops, and no var count limit - assembly { - let alignment := and(a1, 3) // the read might not start at an aligned address - let space := sub(4, alignment) // remaining space in memory word - if lt(space, a2) { a2 := space } // if less space than data, shorten data - key := shl(mul(a2, 8), key) // shift key, make space for new info - let mask := sub(shl(mul(a2, 8), 1), 1) // mask for extracting value from memory - mem := and(shr(mul(sub(space, a2), 8), mem), mask) // align value to right, mask it - key := or(key, mem) // insert into key - } - - // Write pre-image key to oracle - state.preimageKey = key; - state.preimageOffset = 0; // reset offset, to read new pre-image data from the start - v0 = a2; - } else { - v0 = 0xFFffFFff; - v1 = EBADF; - } - } - // fcntl: Like linux fcntl syscall, but only supports minimal file-descriptor control commands, - // to retrieve the file-descriptor R/W flags. - else if (syscall_no == 4055) { - // fcntl - // args: a0 = fd, a1 = cmd - if (a1 == 3) { - // F_GETFL: get file descriptor flags - if (a0 == FD_STDIN || a0 == FD_PREIMAGE_READ || a0 == FD_HINT_READ) { - v0 = 0; // O_RDONLY - } else if (a0 == FD_STDOUT || a0 == FD_STDERR || a0 == FD_PREIMAGE_WRITE || a0 == FD_HINT_WRITE) { - v0 = 1; // O_WRONLY - } else { - v0 = 0xFFffFFff; - v1 = EBADF; - } - } else { - v0 = 0xFFffFFff; - v1 = EINVAL; // cmd not recognized by this kernel - } + } else if (syscall_no == sys.SYS_READ) { + (v0, v1, state.preimageOffset, state.memRoot) = sys.handleSysRead({ + _a0: a0, + _a1: a1, + _a2: a2, + _preimageKey: state.preimageKey, + _preimageOffset: state.preimageOffset, + _localContext: _localContext, + _oracle: ORACLE, + _proofOffset: MIPSMemory.memoryProofOffset(STEP_PROOF_OFFSET, 1), + _memRoot: state.memRoot + }); + } else if (syscall_no == sys.SYS_WRITE) { + (v0, v1, state.preimageKey, state.preimageOffset) = sys.handleSysWrite({ + _a0: a0, + _a1: a1, + _a2: a2, + _preimageKey: state.preimageKey, + _preimageOffset: state.preimageOffset, + _proofOffset: MIPSMemory.memoryProofOffset(STEP_PROOF_OFFSET, 1), + _memRoot: state.memRoot + }); + } else if (syscall_no == sys.SYS_FCNTL) { + (v0, v1) = sys.handleSysFcntl(a0, a1); } - // Write the results back to the state registers - state.registers[2] = v0; - state.registers[7] = v1; - - // Update the PC and nextPC - state.pc = state.nextPC; - state.nextPC = state.nextPC + 4; + st.CpuScalars memory cpu = getCpuScalars(state); + sys.handleSyscallUpdates(cpu, state.registers, v0, v1); + setStateCpuScalars(state, cpu); out_ = outputState(); } } - /// @notice Computes the offset of the proof in the calldata. - /// @param _proofIndex The index of the proof in the calldata. - /// @return offset_ The offset of the proof in the calldata. - function proofOffset(uint8 _proofIndex) internal pure returns (uint256 offset_) { - unchecked { - // A proof of 32 bit memory, with 32-byte leaf values, is (32-5)=27 bytes32 entries. - // And the leaf value itself needs to be encoded as well. And proof.offset == 420 - offset_ = 420 + (uint256(_proofIndex) * (28 * 32)); - uint256 s = 0; - assembly { - s := calldatasize() - } - require(s >= (offset_ + 28 * 32), "check that there is enough calldata"); - return offset_; - } - } - - /// @notice Reads a 32-bit value from memory. - /// @param _addr The address to read from. - /// @param _proofIndex The index of the proof in the calldata. - /// @return out_ The hashed MIPS state. - function readMem(uint32 _addr, uint8 _proofIndex) internal pure returns (uint32 out_) { - unchecked { - // Compute the offset of the proof in the calldata. - uint256 offset = proofOffset(_proofIndex); - - assembly { - // Validate the address alignement. - if and(_addr, 3) { revert(0, 0) } - - // Load the leaf value. - let leaf := calldataload(offset) - offset := add(offset, 32) - - // Convenience function to hash two nodes together in scratch space. - function hashPair(a, b) -> h { - mstore(0, a) - mstore(32, b) - h := keccak256(0, 64) - } - - // Start with the leaf node. - // Work back up by combining with siblings, to reconstruct the root. - let path := shr(5, _addr) - let node := leaf - for { let i := 0 } lt(i, 27) { i := add(i, 1) } { - let sibling := calldataload(offset) - offset := add(offset, 32) - switch and(shr(i, path), 1) - case 0 { node := hashPair(node, sibling) } - case 1 { node := hashPair(sibling, node) } - } - - // Load the memory root from the first field of state. - let memRoot := mload(0x80) - - // Verify the root matches. - if iszero(eq(node, memRoot)) { - mstore(0, 0x0badf00d) - revert(0, 32) - } - - // Bits to shift = (32 - 4 - (addr % 32)) * 8 - let shamt := shl(3, sub(sub(32, 4), and(_addr, 31))) - out_ := and(shr(shamt, leaf), 0xFFffFFff) - } - } - } - - /// @notice Writes a 32-bit value to memory. - /// This function first overwrites the part of the leaf. - /// Then it recomputes the memory merkle root. - /// @param _addr The address to write to. - /// @param _proofIndex The index of the proof in the calldata. - /// @param _val The value to write. - function writeMem(uint32 _addr, uint8 _proofIndex, uint32 _val) internal pure { - unchecked { - // Compute the offset of the proof in the calldata. - uint256 offset = proofOffset(_proofIndex); - - assembly { - // Validate the address alignement. - if and(_addr, 3) { revert(0, 0) } - - // Load the leaf value. - let leaf := calldataload(offset) - let shamt := shl(3, sub(sub(32, 4), and(_addr, 31))) - - // Mask out 4 bytes, and OR in the value - leaf := or(and(leaf, not(shl(shamt, 0xFFffFFff))), shl(shamt, _val)) - offset := add(offset, 32) - - // Convenience function to hash two nodes together in scratch space. - function hashPair(a, b) -> h { - mstore(0, a) - mstore(32, b) - h := keccak256(0, 64) - } - - // Start with the leaf node. - // Work back up by combining with siblings, to reconstruct the root. - let path := shr(5, _addr) - let node := leaf - for { let i := 0 } lt(i, 27) { i := add(i, 1) } { - let sibling := calldataload(offset) - offset := add(offset, 32) - switch and(shr(i, path), 1) - case 0 { node := hashPair(node, sibling) } - case 1 { node := hashPair(sibling, node) } - } - - // Store the new memory root in the first field of state. - mstore(0x80, node) - } - } - } - /// @notice Executes a single step of the vm. /// Will revert if any required input state is missing. /// @param _stateData The encoded state witness data. @@ -443,7 +219,7 @@ contract MIPS is ISemver { // 32*4+4=132 expected state data offset revert(0, 0) } - if iszero(eq(_proof.offset, 420)) { + if iszero(eq(_proof.offset, STEP_PROOF_OFFSET)) { // 132+32+256=420 expected proof offset revert(0, 0) } @@ -485,7 +261,8 @@ contract MIPS is ISemver { state.step += 1; // instruction fetch - uint32 insn = readMem(state.pc, 0); + uint256 insnProofOffset = MIPSMemory.memoryProofOffset(STEP_PROOF_OFFSET, 0); + uint32 insn = MIPSMemory.readMem(state.memRoot, state.pc, insnProofOffset); uint32 opcode = insn >> 26; // 6-bits // j-type j/jal @@ -550,7 +327,8 @@ contract MIPS is ISemver { // M[R[rs]+SignExtImm] rs += ins.signExtend(insn & 0xFFFF, 16); uint32 addr = rs & 0xFFFFFFFC; - mem = readMem(addr, 1); + uint256 memProofOffset = MIPSMemory.memoryProofOffset(STEP_PROOF_OFFSET, 1); + mem = MIPSMemory.readMem(state.memRoot, addr, memProofOffset); if (opcode >= 0x28 && opcode != 0x30) { // store storeAddr = addr; @@ -610,7 +388,8 @@ contract MIPS is ISemver { // write memory if (storeAddr != 0xFF_FF_FF_FF) { - writeMem(storeAddr, 1, val); + uint256 memProofOffset = MIPSMemory.memoryProofOffset(STEP_PROOF_OFFSET, 1); + state.memRoot = MIPSMemory.writeMem(storeAddr, memProofOffset, val); } // write back the value to destination register diff --git a/packages/contracts-bedrock/src/cannon/libraries/MIPSMemory.sol b/packages/contracts-bedrock/src/cannon/libraries/MIPSMemory.sol new file mode 100644 index 000000000000..a8d1b87dcbe0 --- /dev/null +++ b/packages/contracts-bedrock/src/cannon/libraries/MIPSMemory.sol @@ -0,0 +1,124 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +library MIPSMemory { + /// @notice Reads a 32-bit value from memory. + /// @param _memRoot The current memory root + /// @param _addr The address to read from. + /// @param _proofOffset The offset of the memory proof in calldata. + /// @return out_ The hashed MIPS state. + function readMem(bytes32 _memRoot, uint32 _addr, uint256 _proofOffset) internal pure returns (uint32 out_) { + unchecked { + validateMemoryProofAvailability(_proofOffset); + assembly { + // Validate the address alignement. + if and(_addr, 3) { revert(0, 0) } + + // Load the leaf value. + let leaf := calldataload(_proofOffset) + _proofOffset := add(_proofOffset, 32) + + // Convenience function to hash two nodes together in scratch space. + function hashPair(a, b) -> h { + mstore(0, a) + mstore(32, b) + h := keccak256(0, 64) + } + + // Start with the leaf node. + // Work back up by combining with siblings, to reconstruct the root. + let path := shr(5, _addr) + let node := leaf + for { let i := 0 } lt(i, 27) { i := add(i, 1) } { + let sibling := calldataload(_proofOffset) + _proofOffset := add(_proofOffset, 32) + switch and(shr(i, path), 1) + case 0 { node := hashPair(node, sibling) } + case 1 { node := hashPair(sibling, node) } + } + + // Verify the root matches. + if iszero(eq(node, _memRoot)) { + mstore(0, 0x0badf00d) + revert(0, 32) + } + + // Bits to shift = (32 - 4 - (addr % 32)) * 8 + let shamt := shl(3, sub(sub(32, 4), and(_addr, 31))) + out_ := and(shr(shamt, leaf), 0xFFffFFff) + } + } + } + + /// @notice Writes a 32-bit value to memory. + /// This function first overwrites the part of the leaf. + /// Then it recomputes the memory merkle root. + /// @param _addr The address to write to. + /// @param _proofOffset The offset of the memory proof in calldata. + /// @param _val The value to write. + /// @return newMemRoot_ The new memory root after modification + function writeMem(uint32 _addr, uint256 _proofOffset, uint32 _val) internal pure returns (bytes32 newMemRoot_) { + unchecked { + validateMemoryProofAvailability(_proofOffset); + assembly { + // Validate the address alignement. + if and(_addr, 3) { revert(0, 0) } + + // Load the leaf value. + let leaf := calldataload(_proofOffset) + let shamt := shl(3, sub(sub(32, 4), and(_addr, 31))) + + // Mask out 4 bytes, and OR in the value + leaf := or(and(leaf, not(shl(shamt, 0xFFffFFff))), shl(shamt, _val)) + _proofOffset := add(_proofOffset, 32) + + // Convenience function to hash two nodes together in scratch space. + function hashPair(a, b) -> h { + mstore(0, a) + mstore(32, b) + h := keccak256(0, 64) + } + + // Start with the leaf node. + // Work back up by combining with siblings, to reconstruct the root. + let path := shr(5, _addr) + let node := leaf + for { let i := 0 } lt(i, 27) { i := add(i, 1) } { + let sibling := calldataload(_proofOffset) + _proofOffset := add(_proofOffset, 32) + switch and(shr(i, path), 1) + case 0 { node := hashPair(node, sibling) } + case 1 { node := hashPair(sibling, node) } + } + + newMemRoot_ := node + } + } + return newMemRoot_; + } + + /// @notice Computes the offset of a memory proof in the calldata. + /// @param _proofDataOffset The offset of the set of all memory proof data within calldata (proof.offset) + /// Equal to the offset of the first memory proof (at _proofIndex 0). + /// @param _proofIndex The index of the proof in the calldata. + /// @return offset_ The offset of the memory proof at the given _proofIndex in the calldata. + function memoryProofOffset(uint256 _proofDataOffset, uint8 _proofIndex) internal pure returns (uint256 offset_) { + unchecked { + // A proof of 32 bit memory, with 32-byte leaf values, is (32-5)=27 bytes32 entries. + // And the leaf value itself needs to be encoded as well: (27 + 1) = 28 bytes32 entries. + offset_ = _proofDataOffset + (uint256(_proofIndex) * (28 * 32)); + return offset_; + } + } + + /// @notice Validates that enough calldata is available to hold a full memory proof at the given offset + /// @param _proofStartOffset The index of the first byte of the target memory proof in calldata + function validateMemoryProofAvailability(uint256 _proofStartOffset) internal pure { + uint256 s = 0; + assembly { + s := calldatasize() + } + // A memory proof consists of 28 bytes32 values - verify we have enough calldata + require(s >= (_proofStartOffset + 28 * 32), "check that there is enough calldata"); + } +} diff --git a/packages/contracts-bedrock/src/cannon/libraries/MIPSSyscalls.sol b/packages/contracts-bedrock/src/cannon/libraries/MIPSSyscalls.sol new file mode 100644 index 000000000000..bc629a24623e --- /dev/null +++ b/packages/contracts-bedrock/src/cannon/libraries/MIPSSyscalls.sol @@ -0,0 +1,279 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import { MIPSMemory } from "src/cannon/libraries/MIPSMemory.sol"; +import { MIPSState as st } from "src/cannon/libraries/MIPSState.sol"; +import { IPreimageOracle } from "src/cannon/interfaces/IPreimageOracle.sol"; +import { PreimageKeyLib } from "src/cannon/PreimageKeyLib.sol"; + +library MIPSSyscalls { + uint32 internal constant SYS_MMAP = 4090; + uint32 internal constant SYS_BRK = 4045; + uint32 internal constant SYS_CLONE = 4120; + uint32 internal constant SYS_EXIT_GROUP = 4246; + uint32 internal constant SYS_READ = 4003; + uint32 internal constant SYS_WRITE = 4004; + uint32 internal constant SYS_FCNTL = 4055; + + uint32 internal constant FD_STDIN = 0; + uint32 internal constant FD_STDOUT = 1; + uint32 internal constant FD_STDERR = 2; + uint32 internal constant FD_HINT_READ = 3; + uint32 internal constant FD_HINT_WRITE = 4; + uint32 internal constant FD_PREIMAGE_READ = 5; + uint32 internal constant FD_PREIMAGE_WRITE = 6; + + uint32 internal constant EBADF = 0x9; + uint32 internal constant EINVAL = 0x16; + + /// @notice Extract syscall num and arguments from registers. + /// @param _registers The cpu registers. + /// @return sysCallNum_ The syscall number. + /// @return a0_ The first argument available to the syscall operation. + /// @return a1_ The second argument available to the syscall operation. + /// @return a2_ The third argument available to the syscall operation. + function getSyscallArgs(uint32[32] memory _registers) + internal + pure + returns (uint32 sysCallNum_, uint32 a0_, uint32 a1_, uint32 a2_) + { + sysCallNum_ = _registers[2]; + + a0_ = _registers[4]; + a1_ = _registers[5]; + a2_ = _registers[6]; + + return (sysCallNum_, a0_, a1_, a2_); + } + + /// @notice Like a Linux mmap syscall. Allocates a page from the heap. + /// @param _a0 The address for the new mapping + /// @param _a1 The size of the new mapping + /// @param _heap The current value of the heap pointer + /// @return v0_ The address of the new mapping + /// @return v1_ Unused error code (0) + /// @return newHeap_ The new value for the heap, may be unchanged + function handleSysMmap( + uint32 _a0, + uint32 _a1, + uint32 _heap + ) + internal + pure + returns (uint32 v0_, uint32 v1_, uint32 newHeap_) + { + v1_ = uint32(0); + newHeap_ = _heap; + + uint32 sz = _a1; + if (sz & 4095 != 0) { + // adjust size to align with page size + sz += 4096 - (sz & 4095); + } + if (_a0 == 0) { + v0_ = _heap; + newHeap_ += sz; + } else { + v0_ = _a0; + } + + return (v0_, v1_, newHeap_); + } + + /// @notice Like a Linux read syscall. Splits unaligned reads into aligned reads. + /// @param _a0 The file descriptor. + /// @param _a1 The memory location where data should be read to. + /// @param _a2 The number of bytes to read from the file + /// @param _preimageKey The key of the preimage to read. + /// @param _preimageOffset The offset of the preimage to read. + /// @param _localContext The local context for the preimage key. + /// @param _oracle The address of the preimage oracle. + /// @param _proofOffset The offset of the memory proof in calldata. + /// @param _memRoot The current memory root. + /// @return v0_ The number of bytes read, -1 on error. + /// @return v1_ The error code, 0 if there is no error. + /// @return newPreimageOffset_ The new value for the preimage offset. + /// @return newMemRoot_ The new memory root. + function handleSysRead( + uint32 _a0, + uint32 _a1, + uint32 _a2, + bytes32 _preimageKey, + uint32 _preimageOffset, + bytes32 _localContext, + IPreimageOracle _oracle, + uint256 _proofOffset, + bytes32 _memRoot + ) + internal + view + returns (uint32 v0_, uint32 v1_, uint32 newPreimageOffset_, bytes32 newMemRoot_) + { + v0_ = uint32(0); + v1_ = uint32(0); + newMemRoot_ = _memRoot; + newPreimageOffset_ = _preimageOffset; + + // args: _a0 = fd, _a1 = addr, _a2 = count + // returns: v0_ = read, v1_ = err code + if (_a0 == FD_STDIN) { + // Leave v0_ and v1_ zero: read nothing, no error + } + // pre-image oracle read + else if (_a0 == FD_PREIMAGE_READ) { + // verify proof is correct, and get the existing memory. + // mask the addr to align it to 4 bytes + uint32 mem = MIPSMemory.readMem(_memRoot, _a1 & 0xFFffFFfc, _proofOffset); + // If the preimage key is a local key, localize it in the context of the caller. + if (uint8(_preimageKey[0]) == 1) { + _preimageKey = PreimageKeyLib.localize(_preimageKey, _localContext); + } + (bytes32 dat, uint256 datLen) = _oracle.readPreimage(_preimageKey, _preimageOffset); + + // Transform data for writing to memory + // We use assembly for more precise ops, and no var count limit + assembly { + let alignment := and(_a1, 3) // the read might not start at an aligned address + let space := sub(4, alignment) // remaining space in memory word + if lt(space, datLen) { datLen := space } // if less space than data, shorten data + if lt(_a2, datLen) { datLen := _a2 } // if requested to read less, read less + dat := shr(sub(256, mul(datLen, 8)), dat) // right-align data + dat := shl(mul(sub(sub(4, datLen), alignment), 8), dat) // position data to insert into memory + // word + let mask := sub(shl(mul(sub(4, alignment), 8), 1), 1) // mask all bytes after start + let suffixMask := sub(shl(mul(sub(sub(4, alignment), datLen), 8), 1), 1) // mask of all bytes + // starting from end, maybe none + mask := and(mask, not(suffixMask)) // reduce mask to just cover the data we insert + mem := or(and(mem, not(mask)), dat) // clear masked part of original memory, and insert data + } + + // Write memory back + newMemRoot_ = MIPSMemory.writeMem(_a1 & 0xFFffFFfc, _proofOffset, mem); + newPreimageOffset_ += uint32(datLen); + v0_ = uint32(datLen); + } + // hint response + else if (_a0 == FD_HINT_READ) { + // Don't read into memory, just say we read it all + // The result is ignored anyway + v0_ = _a2; + } else { + v0_ = 0xFFffFFff; + v1_ = EBADF; + } + + return (v0_, v1_, newPreimageOffset_, newMemRoot_); + } + + /// @notice Like a Linux write syscall. Splits unaligned writes into aligned writes. + /// @param _a0 The file descriptor. + /// @param _a1 The memory address to read from. + /// @param _a2 The number of bytes to read. + /// @param _preimageKey The current preimaageKey. + /// @param _preimageOffset The current preimageOffset. + /// @param _proofOffset The offset of the memory proof in calldata. + /// @param _memRoot The current memory root. + /// @return v0_ The number of bytes written, or -1 on error. + /// @return v1_ The error code, or 0 if empty. + /// @return newPreimageKey_ The new preimageKey. + /// @return newPreimageOffset_ The new preimageOffset. + function handleSysWrite( + uint32 _a0, + uint32 _a1, + uint32 _a2, + bytes32 _preimageKey, + uint32 _preimageOffset, + uint256 _proofOffset, + bytes32 _memRoot + ) + internal + pure + returns (uint32 v0_, uint32 v1_, bytes32 newPreimageKey_, uint32 newPreimageOffset_) + { + // args: _a0 = fd, _a1 = addr, _a2 = count + // returns: v0_ = written, v1_ = err code + v0_ = uint32(0); + v1_ = uint32(0); + newPreimageKey_ = _preimageKey; + newPreimageOffset_ = _preimageOffset; + + if (_a0 == FD_STDOUT || _a0 == FD_STDERR || _a0 == FD_HINT_WRITE) { + v0_ = _a2; // tell program we have written everything + } + // pre-image oracle + else if (_a0 == FD_PREIMAGE_WRITE) { + // mask the addr to align it to 4 bytes + uint32 mem = MIPSMemory.readMem(_memRoot, _a1 & 0xFFffFFfc, _proofOffset); + bytes32 key = _preimageKey; + + // Construct pre-image key from memory + // We use assembly for more precise ops, and no var count limit + assembly { + let alignment := and(_a1, 3) // the read might not start at an aligned address + let space := sub(4, alignment) // remaining space in memory word + if lt(space, _a2) { _a2 := space } // if less space than data, shorten data + key := shl(mul(_a2, 8), key) // shift key, make space for new info + let mask := sub(shl(mul(_a2, 8), 1), 1) // mask for extracting value from memory + mem := and(shr(mul(sub(space, _a2), 8), mem), mask) // align value to right, mask it + key := or(key, mem) // insert into key + } + + // Write pre-image key to oracle + newPreimageKey_ = key; + newPreimageOffset_ = 0; // reset offset, to read new pre-image data from the start + v0_ = _a2; + } else { + v0_ = 0xFFffFFff; + v1_ = EBADF; + } + + return (v0_, v1_, newPreimageKey_, newPreimageOffset_); + } + + /// @notice Like Linux fcntl (file control) syscall, but only supports minimal file-descriptor control commands, to + /// retrieve the file-descriptor R/W flags. + /// @param _a0 The file descriptor. + /// @param _a1 The control command. + /// @param v0_ The file status flag (only supported command is F_GETFL), or -1 on error. + /// @param v1_ An error number, or 0 if there is no error. + function handleSysFcntl(uint32 _a0, uint32 _a1) internal pure returns (uint32 v0_, uint32 v1_) { + v0_ = uint32(0); + v1_ = uint32(0); + + // args: _a0 = fd, _a1 = cmd + if (_a1 == 3) { + // F_GETFL: get file descriptor flags + if (_a0 == FD_STDIN || _a0 == FD_PREIMAGE_READ || _a0 == FD_HINT_READ) { + v0_ = 0; // O_RDONLY + } else if (_a0 == FD_STDOUT || _a0 == FD_STDERR || _a0 == FD_PREIMAGE_WRITE || _a0 == FD_HINT_WRITE) { + v0_ = 1; // O_WRONLY + } else { + v0_ = 0xFFffFFff; + v1_ = EBADF; + } + } else { + v0_ = 0xFFffFFff; + v1_ = EINVAL; // cmd not recognized by this kernel + } + + return (v0_, v1_); + } + + function handleSyscallUpdates( + st.CpuScalars memory _cpu, + uint32[32] memory _registers, + uint32 _v0, + uint32 _v1 + ) + internal + pure + { + // Write the results back to the state registers + _registers[2] = _v0; + _registers[7] = _v1; + + // Update the PC and nextPC + _cpu.pc = _cpu.nextPC; + _cpu.nextPC = _cpu.nextPC + 4; + } +} diff --git a/packages/contracts-bedrock/test/cannon/MIPS.t.sol b/packages/contracts-bedrock/test/cannon/MIPS.t.sol index f5c9c3066c7b..3f843f3e0d02 100644 --- a/packages/contracts-bedrock/test/cannon/MIPS.t.sol +++ b/packages/contracts-bedrock/test/cannon/MIPS.t.sol @@ -1470,7 +1470,7 @@ contract MIPS_Test is CommonTest { function test_fcntl_succeeds() external { uint32 insn = 0x0000000c; // syscall (MIPS.State memory state, bytes memory proof) = constructMIPSState(0, insn, 0x4, 0); - state.registers[2] = 4055; // fnctl syscall + state.registers[2] = 4055; // fcntl syscall state.registers[4] = 0x0; // a0 state.registers[5] = 0x3; // a1 diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol index 39159fd6e89f..244570d908af 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol @@ -25,7 +25,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { address internal constant l1ERC721BridgeProxyAddress = 0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865; address internal constant l1StandardBridgeAddress = 0xb7900B27Be8f0E0fF65d1C3A4671e1220437dd2b; address internal constant l1StandardBridgeProxyAddress = 0xDeF3bca8c80064589E6787477FFa7Dd616B5574F; - address internal constant mipsAddress = 0x49E77cdE01fFBAB1266813b9a2FaADc1B757F435; + address internal constant mipsAddress = 0x28bF1582225713139c0E898326Db808B6484cFd4; address internal constant optimismPortal2Address = 0xfcbb237388CaF5b08175C9927a37aB6450acd535; address internal constant optimismPortalProxyAddress = 0x978e3286EB805934215a88694d80b09aDed68D90; address internal constant preimageOracleAddress = 0x3bd7E801E51d48c5d94Ea68e8B801DFFC275De75; diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol index 3865be0f0f04..9b7795c24193 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol @@ -55,11 +55,11 @@ contract DeploymentSummaryFaultProofsCode { bytes internal constant preimageOracleCode = hex"6080604052600436106101cd5760003560e01c80638dc4be11116100f7578063dd24f9bf11610095578063ec5efcbc11610064578063ec5efcbc1461065f578063f3f480d91461067f578063faf37bc7146106b2578063fef2b4ed146106c557600080fd5b8063dd24f9bf1461059f578063ddcd58de146105d2578063e03110e11461060a578063e15926111461063f57600080fd5b8063b2e67ba8116100d1578063b2e67ba814610512578063b4801e611461054a578063d18534b51461056a578063da35c6641461058a57600080fd5b80638dc4be11146104835780639d53a648146104a35780639d7e8769146104f257600080fd5b806354fd4d501161016f5780637917de1d1161013e5780637917de1d146103bf5780637ac54767146103df5780638542cf50146103ff578063882856ef1461044a57600080fd5b806354fd4d50146102dd57806361238bde146103335780636551927b1461036b5780637051472e146103a357600080fd5b80632055b36b116101ab5780632055b36b146102735780633909af5c146102885780634d52b4c9146102a857806352f0f3ad146102bd57600080fd5b8063013cf08b146101d25780630359a5631461022357806304697c7814610251575b600080fd5b3480156101de57600080fd5b506101f26101ed366004612d2f565b6106f2565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b34801561022f57600080fd5b5061024361023e366004612d71565b610737565b60405190815260200161021a565b34801561025d57600080fd5b5061027161026c366004612de4565b61086f565b005b34801561027f57600080fd5b50610243601081565b34801561029457600080fd5b506102716102a3366004613008565b6109a5565b3480156102b457600080fd5b50610243610bfc565b3480156102c957600080fd5b506102436102d83660046130f4565b610c17565b3480156102e957600080fd5b506103266040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161021a919061315b565b34801561033f57600080fd5b5061024361034e3660046131ac565b600160209081526000928352604080842090915290825290205481565b34801561037757600080fd5b50610243610386366004612d71565b601560209081526000928352604080842090915290825290205481565b3480156103af57600080fd5b506102436703782dace9d9000081565b3480156103cb57600080fd5b506102716103da3660046131ce565b610cec565b3480156103eb57600080fd5b506102436103fa366004612d2f565b6111ef565b34801561040b57600080fd5b5061043a61041a3660046131ac565b600260209081526000928352604080842090915290825290205460ff1681565b604051901515815260200161021a565b34801561045657600080fd5b5061046a61046536600461326a565b611206565b60405167ffffffffffffffff909116815260200161021a565b34801561048f57600080fd5b5061027161049e36600461329d565b611260565b3480156104af57600080fd5b506102436104be366004612d71565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601860209081526040808320938352929052205490565b3480156104fe57600080fd5b5061027161050d3660046132e9565b61135b565b34801561051e57600080fd5b5061024361052d366004612d71565b601760209081526000928352604080842090915290825290205481565b34801561055657600080fd5b5061024361056536600461326a565b611512565b34801561057657600080fd5b50610271610585366004613008565b611544565b34801561059657600080fd5b50601354610243565b3480156105ab57600080fd5b507f0000000000000000000000000000000000000000000000000000000000002710610243565b3480156105de57600080fd5b506102436105ed366004612d71565b601660209081526000928352604080842090915290825290205481565b34801561061657600080fd5b5061062a6106253660046131ac565b611906565b6040805192835260208301919091520161021a565b34801561064b57600080fd5b5061027161065a36600461329d565b6119f7565b34801561066b57600080fd5b5061027161067a366004613375565b611aff565b34801561068b57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000078610243565b6102716106c036600461340e565b611c85565b3480156106d157600080fd5b506102436106e0366004612d2f565b60006020819052908152604090205481565b6013818154811061070257600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601560209081526040808320848452909152812054819061077a9060601c63ffffffff1690565b63ffffffff16905060005b6010811015610867578160011660010361080d5773ffffffffffffffffffffffffffffffffffffffff85166000908152601460209081526040808320878452909152902081601081106107da576107da61344a565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925061084e565b82600382601081106108215761082161344a565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c908061085f816134a8565b915050610785565b505092915050565b600080600080608060146030823785878260140137601480870182207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06000000000000000000000000000000000000000000000000000000000000001794506000908190889084018b5afa94503d60010191506008820189106108fc5763fe2549876000526004601cfd5b60c082901b81526008018481533d6000600183013e88017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8015160008481526002602090815260408083208c8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915587845282528083209b83529a81528a82209290925593845283905296909120959095555050505050565b60006109b18a8a610737565b90506109d486868360208b01356109cf6109ca8d6134e0565b611ef0565b611f30565b80156109f257506109f283838360208801356109cf6109ca8a6134e0565b610a28576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866040013588604051602001610a3e91906135af565b6040516020818303038152906040528051906020012014610a8b576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836020013587602001356001610aa191906135ed565b14610ad8576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b2088610ae68680613605565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f9192505050565b610b29886120ec565b836040013588604051602001610b3f91906135af565b6040516020818303038152906040528051906020012003610b8c576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526015602090815260408083208c8452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055610bf08a8a33612894565b50505050505050505050565b6001610c0a6010600261378c565b610c149190613798565b81565b6000610c23868661294d565b9050610c308360086135ed565b821180610c3d5750602083115b15610c74576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b60608115610d0557610cfe86866129fa565b9050610d3f565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b815481526020019060010190808311610d6c57505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610ded8260601c63ffffffff1690565b63ffffffff169050333214610e2e576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e3e8260801c63ffffffff1690565b63ffffffff16600003610e7d576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e878260c01c90565b67ffffffffffffffff1615610ec8576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610f01576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f0e89898d8886612a73565b83516020850160888204881415608883061715610f33576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610fe3578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610fd8576001821615610fb85782818b0152610fd8565b8981015160009081526020938452604090209260019290921c9101610f9b565b505050608801610f40565b50505050600160106002610ff7919061378c565b6110019190613798565b81111561103a576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110af61104d8360401c63ffffffff1690565b61105d9063ffffffff168a6135ed565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b9150841561113c5777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b1791506110e98260801c63ffffffff1690565b63ffffffff166110ff8360401c63ffffffff1690565b63ffffffff161461113c576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083208e8452909152902061116290846010612ca5565b503360008181526018602090815260408083208f8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055838352601582528083208f8452909152812084905560609190911b81523690601437366014016000a05050505050505050505050565b600381601081106111ff57600080fd5b0154905081565b6018602052826000526040600020602052816000526040600020818154811061122e57600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b60443560008060088301861061127e5763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa9050806112ab57600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b600080603087600037602060006030600060025afa806113835763f91129696000526004601cfd5b6000517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017608081815260a08c905260c08b905260308a60e037603088609083013760008060c083600a5afa925082611405576309bde3396000526004601cfd5b6028861061141b5763fe2549876000526004601cfd5b6000602882015278200000000000000000000000000000000000000000000000008152600881018b905285810151935060308a8237603081019b909b52505060509098207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0500000000000000000000000000000000000000000000000000000000000000176000818152600260209081526040808320868452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209583529481528482209a909a559081528089529190912096909655505050505050565b6014602052826000526040600020602052816000526040600020816010811061153a57600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff8116156115b7576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000786115e28260c01c90565b6115f69067ffffffffffffffff1642613798565b1161162d576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116398b8b610737565b905061165287878360208c01356109cf6109ca8e6134e0565b8015611670575061167084848360208901356109cf6109ca8b6134e0565b6116a6576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016116bc91906135af565b6040516020818303038152906040528051906020012014611709576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84602001358860200135600161171f91906135ed565b141580611751575060016117398360601c63ffffffff1690565b61174391906137af565b63ffffffff16856020013514155b15611788576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61179689610ae68780613605565b61179f896120ec565b60006117aa8a612bc6565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f020000000000000000000000000000000000000000000000000000000000000017905060006118018460a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601760008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d815260200190815260200160002054600160008481526020019081526020016000206000838152602001908152602001600020819055506118d38460801c63ffffffff1690565b600083815260208190526040902063ffffffff9190911690556118f78d8d81612894565b50505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff1661198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546119ab8160086135ed565b6119b68560206135ed565b106119d457836119c78260086135ed565b6119d19190613798565b91505b506000938452600160209081526040808620948652939052919092205492909150565b604435600080600883018610611a155763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b6000611b0b8686610737565b9050611b2483838360208801356109cf6109ca8a6134e0565b611b5a576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084013515611b96576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b9e612ce3565b611bac81610ae68780613605565b611bb5816120ec565b846040013581604051602001611bcb91906135af565b6040516020818303038152906040528051906020012003611c18576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166000908152601560209081526040808320898452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055611c7c878733612894565b50505050505050565b6703782dace9d90000341015611cc7576040517fe92c469f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333214611d00576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d0b8160086137d4565b63ffffffff168263ffffffff1610611d4f576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000027108163ffffffff161015611daf576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b949094179094558251808401845282815280850186815260138054600181018255908452915160029092027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9094167fffffffffffffffffffffffff000000000000000000000000000000000000000090941693909317909255517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0919091015590815260168352818120938152929091529020349055565b6000816000015182602001518360400151604051602001611f13939291906137fc565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611f84578060051b880135600186831c1660018114611f695760008481526020839052604090209350611f7a565b600082815260208590526040902093505b5050600101611f36565b5090931495945050505050565b6088815114611f9f57600080fd5b6020810160208301612020565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b171717905061201a81612005868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b61202c60008383611fac565b61203860018383611fac565b61204460028383611fac565b61205060038383611fac565b61205c60048383611fac565b61206860058383611fac565b61207460068383611fac565b61208060078383611fac565b61208c60088383611fac565b61209860098383611fac565b6120a4600a8383611fac565b6120b0600b8383611fac565b6120bc600c8383611fac565b6120c8600d8383611fac565b6120d4600e8383611fac565b6120e0600f8383611fac565b61201a60108383611fac565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e00160405160208183030381529060405290506020820160208201612774565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c61229f8660011b67ffffffffffffffff1690565b18188584603f1c6122ba8660011b67ffffffffffffffff1690565b18188584603f1c6122d58660011b67ffffffffffffffff1690565b181895508483603f1c6122f28560011b67ffffffffffffffff1690565b181894508387603f1c61230f8960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525b5050505050565b600582811b8201805160018501831b8401805160028701851b8601805160038901871b8801805160048b0190981b8901805167ffffffffffffffff861985168918811690995283198a16861889169096528819861683188816909352841986168818871690528419831684189095169052919391929190611c7c565b61270e600082612687565b612719600582612687565b612724600a82612687565b61272f600f82612687565b61273a601482612687565b50565b612746816121e2565b61274f81612703565b600383901b820151815160c09190911c9061201a90821867ffffffffffffffff168352565b6127806000828461273d565b61278c6001828461273d565b6127986002828461273d565b6127a46003828461273d565b6127b06004828461273d565b6127bc6005828461273d565b6127c86006828461273d565b6127d46007828461273d565b6127e06008828461273d565b6127ec6009828461273d565b6127f8600a828461273d565b612804600b828461273d565b612810600c828461273d565b61281c600d828461273d565b612828600e828461273d565b612834600f828461273d565b6128406010828461273d565b61284c6011828461273d565b6128586012828461273d565b6128646013828461273d565b6128706014828461273d565b61287c6015828461273d565b6128886016828461273d565b61201a6017828461273d565b73ffffffffffffffffffffffffffffffffffffffff83811660009081526016602090815260408083208684529091528082208054908390559051909284169083908381818185875af1925050503d806000811461290d576040519150601f19603f3d011682016040523d82523d6000602084013e612912565b606091505b5050905080612680576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316176129f3818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b6060604051905081602082018181018286833760888306808015612a435760888290038501848101848103803687375060806001820353506001845160001a1784538652612a5a565b608836843760018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b6000612a858260a01c63ffffffff1690565b67ffffffffffffffff1690506000612aa38360801c63ffffffff1690565b63ffffffff1690506000612abd8460401c63ffffffff1690565b63ffffffff169050600883108015612ad3575080155b15612b075760c082901b6000908152883560085283513382526017602090815260408084208a855290915290912055612bbc565b60088310158015612b25575080612b1f600885613798565b93508310155b8015612b395750612b3687826135ed565b83105b15612bbc576000612b4a8285613798565b905087612b588260206135ed565b10158015612b64575085155b15612b9b576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526017602090815260408083208a845290915290209089013590555b5050505050505050565b6000612c49565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff00612bf78360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff0000612c248360101b67ffffffffffffffff1690565b1617905060008160201c612c428360201b67ffffffffffffffff1690565b1792915050565b60808201516020830190612c6190612bcd565b612bcd565b6040820151612c6f90612bcd565b60401b17612c87612c5c60018460059190911b015190565b825160809190911b90612c9990612bcd565b60c01b17179392505050565b8260108101928215612cd3579160200282015b82811115612cd3578251825591602001919060010190612cb8565b50612cdf929150612cfb565b5090565b6040518060200160405280612cf6612d10565b905290565b5b80821115612cdf5760008155600101612cfc565b6040518061032001604052806019906020820280368337509192915050565b600060208284031215612d4157600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612d6c57600080fd5b919050565b60008060408385031215612d8457600080fd5b612d8d83612d48565b946020939093013593505050565b60008083601f840112612dad57600080fd5b50813567ffffffffffffffff811115612dc557600080fd5b602083019150836020828501011115612ddd57600080fd5b9250929050565b60008060008060608587031215612dfa57600080fd5b84359350612e0a60208601612d48565b9250604085013567ffffffffffffffff811115612e2657600080fd5b612e3287828801612d9b565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff81118282101715612e9157612e91612e3e565b60405290565b6040516060810167ffffffffffffffff81118282101715612e9157612e91612e3e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612f0157612f01612e3e565b604052919050565b6000610320808385031215612f1d57600080fd5b604051602080820167ffffffffffffffff8382108183111715612f4257612f42612e3e565b8160405283955087601f880112612f5857600080fd5b612f60612e6d565b9487019491508188861115612f7457600080fd5b875b86811015612f9c5780358381168114612f8f5760008081fd5b8452928401928401612f76565b50909352509295945050505050565b600060608284031215612fbd57600080fd5b50919050565b60008083601f840112612fd557600080fd5b50813567ffffffffffffffff811115612fed57600080fd5b6020830191508360208260051b8501011115612ddd57600080fd5b60008060008060008060008060006103e08a8c03121561302757600080fd5b6130308a612d48565b985060208a013597506130468b60408c01612f09565b96506103608a013567ffffffffffffffff8082111561306457600080fd5b6130708d838e01612fab565b97506103808c013591508082111561308757600080fd5b6130938d838e01612fc3565b90975095506103a08c01359150808211156130ad57600080fd5b6130b98d838e01612fab565b94506103c08c01359150808211156130d057600080fd5b506130dd8c828d01612fc3565b915080935050809150509295985092959850929598565b600080600080600060a0868803121561310c57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60005b8381101561314a578181015183820152602001613132565b8381111561201a5750506000910152565b602081526000825180602084015261317a81604085016020870161312f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080604083850312156131bf57600080fd5b50508035926020909101359150565b600080600080600080600060a0888a0312156131e957600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561320f57600080fd5b61321b8b838c01612d9b565b909750955060608a013591508082111561323457600080fd5b506132418a828b01612fc3565b9094509250506080880135801515811461325a57600080fd5b8091505092959891949750929550565b60008060006060848603121561327f57600080fd5b61328884612d48565b95602085013595506040909401359392505050565b6000806000604084860312156132b257600080fd5b83359250602084013567ffffffffffffffff8111156132d057600080fd5b6132dc86828701612d9b565b9497909650939450505050565b600080600080600080600060a0888a03121561330457600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561332a57600080fd5b6133368b838c01612d9b565b909750955060608a013591508082111561334f57600080fd5b5061335c8a828b01612d9b565b989b979a50959894979596608090950135949350505050565b60008060008060006080868803121561338d57600080fd5b61339686612d48565b945060208601359350604086013567ffffffffffffffff808211156133ba57600080fd5b6133c689838a01612fab565b945060608801359150808211156133dc57600080fd5b506133e988828901612fc3565b969995985093965092949392505050565b803563ffffffff81168114612d6c57600080fd5b60008060006060848603121561342357600080fd5b83359250613433602085016133fa565b9150613441604085016133fa565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036134d9576134d9613479565b5060010190565b6000606082360312156134f257600080fd5b6134fa612e97565b823567ffffffffffffffff8082111561351257600080fd5b9084019036601f83011261352557600080fd5b813560208282111561353957613539612e3e565b613569817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612eba565b9250818352368183860101111561357f57600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b60198110156135e457825167ffffffffffffffff168252602092830192909101906001016135bb565b50505092915050565b6000821982111561360057613600613479565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261363a57600080fd5b83018035915067ffffffffffffffff82111561365557600080fd5b602001915036819003821315612ddd57600080fd5b600181815b808511156136c357817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156136a9576136a9613479565b808516156136b657918102915b93841c939080029061366f565b509250929050565b6000826136da57506001613786565b816136e757506000613786565b81600181146136fd576002811461370757613723565b6001915050613786565b60ff84111561371857613718613479565b50506001821b613786565b5060208310610133831016604e8410600b8410161715613746575081810a613786565b613750838361366a565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561378257613782613479565b0290505b92915050565b60006129f383836136cb565b6000828210156137aa576137aa613479565b500390565b600063ffffffff838116908316818110156137cc576137cc613479565b039392505050565b600063ffffffff8083168185168083038211156137f3576137f3613479565b01949350505050565b6000845161380e81846020890161312f565b9190910192835250602082015260400191905056fea164736f6c634300080f000a"; bytes internal constant mipsCode = - hex"608060405234801561001057600080fd5b506004361061004c5760003560e01c8063155633fe1461005157806354fd4d50146100765780637dc0d1d0146100bf578063e14ced3214610103575b600080fd5b61005c634000000081565b60405163ffffffff90911681526020015b60405180910390f35b6100b26040518060400160405280600c81526020017f312e312e302d626574612e33000000000000000000000000000000000000000081525081565b60405161006d91906120dd565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de7516815260200161006d565b610116610111366004612199565b610124565b60405190815260200161006d565b600061012e612053565b6080811461013b57600080fd5b6040516106001461014b57600080fd5b6084871461015857600080fd5b6101a4851461016657600080fd5b8635608052602087013560a052604087013560e090811c60c09081526044890135821c82526048890135821c61010052604c890135821c610120526050890135821c61014052605489013590911c61016052605888013560f890811c610180526059890135901c6101a052605a880135901c6101c0526102006101e0819052606288019060005b602081101561021157823560e01c82526004909201916020909101906001016101ed565b5050508061012001511561022f57610227610806565b9150506107fd565b6101408101805160010167ffffffffffffffff16905260608101516000906102579082610922565b9050603f601a82901c16600281148061027657508063ffffffff166003145b156102cc5760006002836303ffffff1663ffffffff16901b846080015163f0000000161790506102c1848363ffffffff166002146102b557601f6102b8565b60005b60ff16836109de565b9450505050506107fd565b6101608301516000908190601f601086901c81169190601587901c16602081106102f8576102f861220d565b602002015192508063ffffffff8516158061031957508463ffffffff16601c145b15610350578661016001518263ffffffff166020811061033b5761033b61220d565b6020020151925050601f600b86901c1661040c565b60208563ffffffff1610156103b2578463ffffffff16600c148061037a57508463ffffffff16600d145b8061038b57508463ffffffff16600e145b1561039c578561ffff16925061040c565b6103ab8661ffff166010610aa8565b925061040c565b60288563ffffffff161015806103ce57508463ffffffff166022145b806103df57508463ffffffff166026145b1561040c578661016001518263ffffffff16602081106104015761040161220d565b602002015192508190505b60048563ffffffff1610158015610429575060088563ffffffff16105b8061043a57508463ffffffff166001145b156105195760006104b9886040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b90506104ce81896101600151888a878a610b1b565b805163ffffffff9081166060808b01919091526020830151821660808b01526040830151821660a08b01528201511660c089015261050a610806565b985050505050505050506107fd565b63ffffffff600060208783161061057e576105398861ffff166010610aa8565b9095019463fffffffc861661054f816001610922565b915060288863ffffffff161015801561056f57508763ffffffff16603014155b1561057c57809250600093505b505b600061058c89888885610d0e565b63ffffffff9081169150603f8a169089161580156105b1575060088163ffffffff1610155b80156105c35750601c8163ffffffff16105b15610775578063ffffffff16600814806105e357508063ffffffff166009145b1561061b576106098b8263ffffffff166008146106005786610603565b60005b8a6109de565b9b5050505050505050505050506107fd565b8063ffffffff16600a0361063c576106098b868a63ffffffff8b161561149e565b8063ffffffff16600b0361065e576106098b868a63ffffffff8b16151561149e565b8063ffffffff16600c03610675576106098d611573565b60108163ffffffff16101580156106925750601c8163ffffffff16105b156107755760006107118c6040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b9050610726818d6101600151848c8c8b611aaa565b805163ffffffff9081166060808f01919091526020830151821660808f01526040830151821660a08f01528201511660c08d0152610762610806565b9c505050505050505050505050506107fd565b8863ffffffff166038148015610790575063ffffffff861615155b156107c55760018b61016001518763ffffffff16602081106107b4576107b461220d565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff146107e2576107e284600184611d63565b6107ef8b8684600161149e565b9b5050505050505050505050505b95945050505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019190855b60208110156108a557601c8601518452602090950194600490930192600101610881565b506000835283830384a06000945080600181146108c557600395506108ed565b8280156108dd57600181146108e657600296506108eb565b600096506108eb565b600196505b505b50505081900390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89190911b17919050565b60008061092e83611e07565b9050600384161561093e57600080fd5b6020810190358460051c8160005b601b8110156109a45760208501943583821c600116801561097457600181146109895761099a565b6000848152602083905260409020935061099a565b600082815260208590526040902093505b505060010161094c565b5060805191508181146109bf57630badf00d60005260206000fd5b5050601f94909416601c0360031b9390931c63ffffffff169392505050565b600080610a59856040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b9050610a6c818661016001518686611eb0565b805163ffffffff9081166060808801919091526020830151821660808801526040830151821660a08801528201511660c08601526107fd610806565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b0182610b05576000610b07565b815b90861663ffffffff16179250505092915050565b6000866000015160040163ffffffff16876020015163ffffffff1614610ba2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f7400000000000000000000000060448201526064015b60405180910390fd5b8463ffffffff1660041480610bbd57508463ffffffff166005145b15610c34576000868463ffffffff1660208110610bdc57610bdc61220d565b602002015190508063ffffffff168363ffffffff16148015610c0457508563ffffffff166004145b80610c2c57508063ffffffff168363ffffffff1614158015610c2c57508563ffffffff166005145b915050610cb1565b8463ffffffff16600603610c515760008260030b13159050610cb1565b8463ffffffff16600703610c6d5760008260030b139050610cb1565b8463ffffffff16600103610cb157601f601085901c166000819003610c965760008360030b1291505b8063ffffffff16600103610caf5760008360030b121591505b505b8651602088015163ffffffff1688528115610cf2576002610cd78661ffff166010610aa8565b63ffffffff90811690911b8201600401166020890152610d04565b60208801805160040163ffffffff1690525b5050505050505050565b6000603f601a86901c16801580610d3d575060088163ffffffff1610158015610d3d5750600f8163ffffffff16105b1561119357603f86168160088114610d845760098114610d8d57600a8114610d9657600b8114610d9f57600c8114610da857600d8114610db157600e8114610dba57610dbf565b60209150610dbf565b60219150610dbf565b602a9150610dbf565b602b9150610dbf565b60249150610dbf565b60259150610dbf565b602691505b508063ffffffff16600003610de65750505063ffffffff8216601f600686901c161b611496565b8063ffffffff16600203610e0c5750505063ffffffff8216601f600686901c161c611496565b8063ffffffff16600303610e4257601f600688901c16610e3863ffffffff8716821c6020839003610aa8565b9350505050611496565b8063ffffffff16600403610e645750505063ffffffff8216601f84161b611496565b8063ffffffff16600603610e865750505063ffffffff8216601f84161c611496565b8063ffffffff16600703610eb957610eb08663ffffffff168663ffffffff16901c87602003610aa8565b92505050611496565b8063ffffffff16600803610ed1578592505050611496565b8063ffffffff16600903610ee9578592505050611496565b8063ffffffff16600a03610f01578592505050611496565b8063ffffffff16600b03610f19578592505050611496565b8063ffffffff16600c03610f31578592505050611496565b8063ffffffff16600f03610f49578592505050611496565b8063ffffffff16601003610f61578592505050611496565b8063ffffffff16601103610f79578592505050611496565b8063ffffffff16601203610f91578592505050611496565b8063ffffffff16601303610fa9578592505050611496565b8063ffffffff16601803610fc1578592505050611496565b8063ffffffff16601903610fd9578592505050611496565b8063ffffffff16601a03610ff1578592505050611496565b8063ffffffff16601b03611009578592505050611496565b8063ffffffff1660200361102257505050828201611496565b8063ffffffff1660210361103b57505050828201611496565b8063ffffffff1660220361105457505050818303611496565b8063ffffffff1660230361106d57505050818303611496565b8063ffffffff1660240361108657505050828216611496565b8063ffffffff1660250361109f57505050828217611496565b8063ffffffff166026036110b857505050828218611496565b8063ffffffff166027036110d25750505082821719611496565b8063ffffffff16602a03611103578460030b8660030b126110f45760006110f7565b60015b60ff1692505050611496565b8063ffffffff16602b0361112b578463ffffffff168663ffffffff16106110f45760006110f7565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e000000000000000000000000006044820152606401610b99565b5061112b565b8063ffffffff16601c0361121757603f861660028190036111b957505050828202611496565b8063ffffffff16602014806111d457508063ffffffff166021145b1561118d578063ffffffff166020036111eb579419945b60005b638000000087161561120d576401fffffffe600197881b1696016111ee565b9250611496915050565b8063ffffffff16600f0361123957505065ffffffff0000601083901b16611496565b8063ffffffff166020036112755761126d8560031660080260180363ffffffff168463ffffffff16901c60ff166008610aa8565b915050611496565b8063ffffffff166021036112aa5761126d8560021660080260100363ffffffff168463ffffffff16901c61ffff166010610aa8565b8063ffffffff166022036112d957505063ffffffff60086003851602811681811b198416918316901b17611496565b8063ffffffff166023036112f05782915050611496565b8063ffffffff16602403611322578460031660080260180363ffffffff168363ffffffff16901c60ff16915050611496565b8063ffffffff16602503611355578460021660080260100363ffffffff168363ffffffff16901c61ffff16915050611496565b8063ffffffff1660260361138757505063ffffffff60086003851602601803811681811c198416918316901c17611496565b8063ffffffff166028036113bd57505060ff63ffffffff60086003861602601803811682811b9091188316918416901b17611496565b8063ffffffff166029036113f457505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17611496565b8063ffffffff16602a0361142357505063ffffffff60086003851602811681811c198316918416901c17611496565b8063ffffffff16602b0361143a5783915050611496565b8063ffffffff16602e0361146c57505063ffffffff60086003851602601803811681811b198316918416901b17611496565b8063ffffffff166030036114835782915050611496565b8063ffffffff1660380361112b57839150505b949350505050565b600080611519866040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b905061152d81876101600151878787611f83565b805163ffffffff9081166060808901919091526020830151821660808901526040830151821660a08901528201511660c0870152611569610806565b9695505050505050565b600061157d612053565b506101e051604081015160808083015160a084015160c09094015191936000928392919063ffffffff8616610ffa036115f75781610fff8116156115c657610fff811661100003015b8363ffffffff166000036115ed5760e08801805163ffffffff8382011690915295506115f1565b8395505b50611a69565b8563ffffffff16610fcd036116125763400000009450611a69565b8563ffffffff166110180361162a5760019450611a69565b8563ffffffff166110960361166057600161012088015260ff8316610100880152611653610806565b9998505050505050505050565b8563ffffffff16610fa3036118cc5763ffffffff831615611a69577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8416016118865760006116bb8363fffffffc166001610922565b60208901519091508060001a60010361172a57604080516000838152336020528d83526060902091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790505b6040808a015190517fe03110e10000000000000000000000000000000000000000000000000000000081526004810183905263ffffffff9091166024820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de75169063e03110e1906044016040805180830381865afa1580156117cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ef919061223c565b91509150600386168060040382811015611807578092505b5081861015611814578591505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b0391508119811690508381198716179550505061186b8663fffffffc16600186611d63565b60408b018051820163ffffffff16905297506118c792505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff8416016118bb57809450611a69565b63ffffffff9450600993505b611a69565b8563ffffffff16610fa4036119bd5763ffffffff8316600114806118f6575063ffffffff83166002145b80611907575063ffffffff83166004145b1561191457809450611a69565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff8416016118bb5760006119548363fffffffc166001610922565b6020890151909150600384166004038381101561196f578093505b83900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193850293841b0116911b17602088015260006040880152935083611a69565b8563ffffffff16610fd703611a69578163ffffffff16600303611a5d5763ffffffff831615806119f3575063ffffffff83166005145b80611a04575063ffffffff83166003145b15611a125760009450611a69565b63ffffffff831660011480611a2d575063ffffffff83166002145b80611a3e575063ffffffff83166006145b80611a4f575063ffffffff83166004145b156118bb5760019450611a69565b63ffffffff9450601693505b6101608701805163ffffffff808816604090920191909152905185821660e09091015260808801805180831660608b01526004019091169052611653610806565b60008463ffffffff16601003611ac557506060860151611d0b565b8463ffffffff16601103611ae45763ffffffff84166060880152611d0b565b8463ffffffff16601203611afd57506040860151611d0b565b8463ffffffff16601303611b1c5763ffffffff84166040880152611d0b565b8463ffffffff16601803611b505763ffffffff600385810b9085900b02602081901c821660608a0152166040880152611d0b565b8463ffffffff16601903611b815763ffffffff84811681851602602081901c821660608a0152166040880152611d0b565b8463ffffffff16601a03611c44578260030b600003611bfc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f000000000000000000006044820152606401610b99565b8260030b8460030b81611c1157611c11612260565b0763ffffffff166060880152600383810b9085900b81611c3357611c33612260565b0563ffffffff166040880152611d0b565b8463ffffffff16601b03611d0b578263ffffffff16600003611cc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f000000000000000000006044820152606401610b99565b8263ffffffff168463ffffffff1681611cdd57611cdd612260565b0663ffffffff908116606089015283811690851681611cfe57611cfe612260565b0463ffffffff1660408801525b63ffffffff821615611d415780868363ffffffff1660208110611d3057611d3061220d565b63ffffffff90921660209290920201525b50505060208401805163ffffffff808216909652600401909416909352505050565b6000611d6e83611e07565b90506003841615611d7e57600080fd5b6020810190601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611dfc5760208401933582821c6001168015611dcc5760018114611de157611df2565b60008581526020839052604090209450611df2565b600082815260208690526040902094505b5050600101611da4565b505060805250505050565b60ff8116610380026101a4810190369061052401811015611eaa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f61746100000000000000000000000000000000000000000000000000000000006064820152608401610b99565b50919050565b836000015160040163ffffffff16846020015163ffffffff1614611f30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f7400000000000000000000000000006044820152606401610b99565b835160208501805163ffffffff9081168752838116909152831615611f7c5780600801848463ffffffff1660208110611f6b57611f6b61220d565b63ffffffff90921660209290920201525b5050505050565b60208363ffffffff1610611ff3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c69642072656769737465720000000000000000000000000000000000006044820152606401610b99565b63ffffffff8316158015906120055750805b156120345781848463ffffffff16602081106120235761202361220d565b63ffffffff90921660209290920201525b5050505060208101805163ffffffff8082169093526004019091169052565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081019190915261016081016120b96120be565b905290565b6040518061040001604052806020906020820280368337509192915050565b600060208083528351808285015260005b8181101561210a578581018301518582016040015282016120ee565b8181111561211c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008083601f84011261216257600080fd5b50813567ffffffffffffffff81111561217a57600080fd5b60208301915083602082850101111561219257600080fd5b9250929050565b6000806000806000606086880312156121b157600080fd5b853567ffffffffffffffff808211156121c957600080fd5b6121d589838a01612150565b909750955060208801359150808211156121ee57600080fd5b506121fb88828901612150565b96999598509660400135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000806040838503121561224f57600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a"; + hex"608060405234801561001057600080fd5b506004361061004c5760003560e01c8063155633fe1461005157806354fd4d50146100765780637dc0d1d0146100bf578063e14ced3214610103575b600080fd5b61005c634000000081565b60405163ffffffff90911681526020015b60405180910390f35b6100b26040518060400160405280600c81526020017f312e312e302d626574612e34000000000000000000000000000000000000000081525081565b60405161006d9190612378565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de7516815260200161006d565b61011661011136600461242d565b610124565b60405190815260200161006d565b600061012e6122ee565b6080811461013b57600080fd5b6040516106001461014b57600080fd5b6084871461015857600080fd5b6101a4851461016657600080fd5b8635608052602087013560a052604087013560e090811c60c09081526044890135821c82526048890135821c61010052604c890135821c610120526050890135821c61014052605489013590911c61016052605888013560f890811c610180526059890135901c6101a052605a880135901c6101c0526102006101e0819052606288019060005b602081101561021157823560e01c82526004909201916020909101906001016101ed565b5050508061012001511561022f5761022761082b565b915050610822565b6101408101805160010167ffffffffffffffff16905260006101a4905060006102618360000151846060015184610947565b9050603f601a82901c16600281148061028057508063ffffffff166003145b156102d75760006002836303ffffff1663ffffffff16901b856080015163f0000000161790506102cb858363ffffffff166002146102bf57601f6102c2565b60005b60ff16836109fb565b95505050505050610822565b6101608401516000908190601f601086901c81169190601587901c1660208110610303576103036124a1565b602002015192508063ffffffff8516158061032457508463ffffffff16601c145b1561035b578761016001518263ffffffff1660208110610346576103466124a1565b6020020151925050601f600b86901c16610417565b60208563ffffffff1610156103bd578463ffffffff16600c148061038557508463ffffffff16600d145b8061039657508463ffffffff16600e145b156103a7578561ffff169250610417565b6103b68661ffff166010610ac5565b9250610417565b60288563ffffffff161015806103d957508463ffffffff166022145b806103ea57508463ffffffff166026145b15610417578761016001518263ffffffff166020811061040c5761040c6124a1565b602002015192508190505b60048563ffffffff1610158015610434575060088563ffffffff16105b8061044557508463ffffffff166001145b156105255760006104c4896040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b90506104d9818a6101600151888a878a610b38565b805163ffffffff9081166060808c01919091526020830151821660808c01526040830151821660a08c01528201511660c08a015261051561082b565b9950505050505050505050610822565b63ffffffff6000602087831610610591576105458861ffff166010610ac5565b8a5196019563fffffffc87169061052490610561908383610947565b925060288963ffffffff161015801561058157508863ffffffff16603014155b1561058e57819350600094505b50505b600061059f89888885610d2b565b63ffffffff9081169150603f8a169089161580156105c4575060088163ffffffff1610155b80156105d65750601c8163ffffffff16105b15610793578063ffffffff16600814806105f657508063ffffffff166009145b1561062f5761061c8c8263ffffffff166008146106135786610616565b60005b8a6109fb565b9c50505050505050505050505050610822565b8063ffffffff16600a036106505761061c8c868a63ffffffff8b16156114bb565b8063ffffffff16600b036106725761061c8c868a63ffffffff8b1615156114bb565b8063ffffffff16600c036106895761061c8e611590565b60108163ffffffff16101580156106a65750601c8163ffffffff16105b156107935760006107258d6040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b905061073a818e6101600151848c8c8b6118cd565b6107778d82805163ffffffff9081166060808501919091526020830151821660808501526040830151821660a0850152909101511660c090910152565b61077f61082b565b9d5050505050505050505050505050610822565b8863ffffffff1660381480156107ae575063ffffffff861615155b156107e35760018c61016001518763ffffffff16602081106107d2576107d26124a1565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff1461080657610524610802858285611b86565b8d52505b6108138c868460016114bb565b9c505050505050505050505050505b95945050505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019190855b60208110156108ca57601c86015184526020909501946004909301926001016108a6565b506000835283830384a06000945080600181146108ea5760039550610912565b828015610902576001811461090b5760029650610910565b60009650610910565b600196505b505b50505081900390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89190911b17919050565b600061095282611c28565b600383161561096057600080fd5b6020820191358360051c8160005b601b8110156109c65760208601953583821c600116801561099657600181146109ab576109bc565b600084815260208390526040902093506109bc565b600082815260208590526040902093505b505060010161096e565b508681146109dc57630badf00d60005260206000fd5b5050601f93909316601c0360031b9290921c63ffffffff169392505050565b600080610a76856040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b9050610a89818661016001518686611cc8565b805163ffffffff9081166060808801919091526020830151821660808801526040830151821660a08801528201511660c086015261082261082b565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b0182610b22576000610b24565b815b90861663ffffffff16179250505092915050565b6000866000015160040163ffffffff16876020015163ffffffff1614610bbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f7400000000000000000000000060448201526064015b60405180910390fd5b8463ffffffff1660041480610bda57508463ffffffff166005145b15610c51576000868463ffffffff1660208110610bf957610bf96124a1565b602002015190508063ffffffff168363ffffffff16148015610c2157508563ffffffff166004145b80610c4957508063ffffffff168363ffffffff1614158015610c4957508563ffffffff166005145b915050610cce565b8463ffffffff16600603610c6e5760008260030b13159050610cce565b8463ffffffff16600703610c8a5760008260030b139050610cce565b8463ffffffff16600103610cce57601f601085901c166000819003610cb35760008360030b1291505b8063ffffffff16600103610ccc5760008360030b121591505b505b8651602088015163ffffffff1688528115610d0f576002610cf48661ffff166010610ac5565b63ffffffff90811690911b8201600401166020890152610d21565b60208801805160040163ffffffff1690525b5050505050505050565b6000603f601a86901c16801580610d5a575060088163ffffffff1610158015610d5a5750600f8163ffffffff16105b156111b057603f86168160088114610da15760098114610daa57600a8114610db357600b8114610dbc57600c8114610dc557600d8114610dce57600e8114610dd757610ddc565b60209150610ddc565b60219150610ddc565b602a9150610ddc565b602b9150610ddc565b60249150610ddc565b60259150610ddc565b602691505b508063ffffffff16600003610e035750505063ffffffff8216601f600686901c161b6114b3565b8063ffffffff16600203610e295750505063ffffffff8216601f600686901c161c6114b3565b8063ffffffff16600303610e5f57601f600688901c16610e5563ffffffff8716821c6020839003610ac5565b93505050506114b3565b8063ffffffff16600403610e815750505063ffffffff8216601f84161b6114b3565b8063ffffffff16600603610ea35750505063ffffffff8216601f84161c6114b3565b8063ffffffff16600703610ed657610ecd8663ffffffff168663ffffffff16901c87602003610ac5565b925050506114b3565b8063ffffffff16600803610eee5785925050506114b3565b8063ffffffff16600903610f065785925050506114b3565b8063ffffffff16600a03610f1e5785925050506114b3565b8063ffffffff16600b03610f365785925050506114b3565b8063ffffffff16600c03610f4e5785925050506114b3565b8063ffffffff16600f03610f665785925050506114b3565b8063ffffffff16601003610f7e5785925050506114b3565b8063ffffffff16601103610f965785925050506114b3565b8063ffffffff16601203610fae5785925050506114b3565b8063ffffffff16601303610fc65785925050506114b3565b8063ffffffff16601803610fde5785925050506114b3565b8063ffffffff16601903610ff65785925050506114b3565b8063ffffffff16601a0361100e5785925050506114b3565b8063ffffffff16601b036110265785925050506114b3565b8063ffffffff1660200361103f575050508282016114b3565b8063ffffffff16602103611058575050508282016114b3565b8063ffffffff16602203611071575050508183036114b3565b8063ffffffff1660230361108a575050508183036114b3565b8063ffffffff166024036110a3575050508282166114b3565b8063ffffffff166025036110bc575050508282176114b3565b8063ffffffff166026036110d5575050508282186114b3565b8063ffffffff166027036110ef57505050828217196114b3565b8063ffffffff16602a03611120578460030b8660030b12611111576000611114565b60015b60ff16925050506114b3565b8063ffffffff16602b03611148578463ffffffff168663ffffffff1610611111576000611114565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e000000000000000000000000006044820152606401610bb6565b50611148565b8063ffffffff16601c0361123457603f861660028190036111d6575050508282026114b3565b8063ffffffff16602014806111f157508063ffffffff166021145b156111aa578063ffffffff16602003611208579419945b60005b638000000087161561122a576401fffffffe600197881b16960161120b565b92506114b3915050565b8063ffffffff16600f0361125657505065ffffffff0000601083901b166114b3565b8063ffffffff166020036112925761128a8560031660080260180363ffffffff168463ffffffff16901c60ff166008610ac5565b9150506114b3565b8063ffffffff166021036112c75761128a8560021660080260100363ffffffff168463ffffffff16901c61ffff166010610ac5565b8063ffffffff166022036112f657505063ffffffff60086003851602811681811b198416918316901b176114b3565b8063ffffffff1660230361130d57829150506114b3565b8063ffffffff1660240361133f578460031660080260180363ffffffff168363ffffffff16901c60ff169150506114b3565b8063ffffffff16602503611372578460021660080260100363ffffffff168363ffffffff16901c61ffff169150506114b3565b8063ffffffff166026036113a457505063ffffffff60086003851602601803811681811c198416918316901c176114b3565b8063ffffffff166028036113da57505060ff63ffffffff60086003861602601803811682811b9091188316918416901b176114b3565b8063ffffffff1660290361141157505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b176114b3565b8063ffffffff16602a0361144057505063ffffffff60086003851602811681811c198316918416901c176114b3565b8063ffffffff16602b0361145757839150506114b3565b8063ffffffff16602e0361148957505063ffffffff60086003851602601803811681811b198316918416901b176114b3565b8063ffffffff166030036114a057829150506114b3565b8063ffffffff1660380361114857839150505b949350505050565b600080611536866040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b905061154a81876101600151878787611d9b565b805163ffffffff9081166060808901919091526020830151821660808901526040830151821660a08901528201511660c087015261158661082b565b9695505050505050565b600061159a6122ee565b506101e051604081015160808083015160a084015160c090940151919390916000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00663ffffffff87160161160d576115f885858960e00151611e6b565b63ffffffff1660e08a015290925090506117f6565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03363ffffffff87160161164657634000000091506117f6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefe863ffffffff87160161167c57600191506117f6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef6a63ffffffff8716016116d057600161012088015260ff85166101008801526116c361082b565b9998505050505050505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05d63ffffffff871601611754576020870151604088015161173d918791879187918e7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de756105248f51611ec7565b8a5263ffffffff1660408a015290925090506117f6565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05c63ffffffff8716016117b9576020870151604088015161179f918791879187916105248d51612105565b63ffffffff1660408b015260208a015290925090506117f6565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02963ffffffff8716016117f6576117f085856121fb565b90925090505b6000611870886040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b90506118838189610160015185856122b0565b805163ffffffff9081166060808b01919091526020830151821660808b01526040830151821660a08b01528201511660c08901526118bf61082b565b9a9950505050505050505050565b60008463ffffffff166010036118e857506060860151611b2e565b8463ffffffff166011036119075763ffffffff84166060880152611b2e565b8463ffffffff1660120361192057506040860151611b2e565b8463ffffffff1660130361193f5763ffffffff84166040880152611b2e565b8463ffffffff166018036119735763ffffffff600385810b9085900b02602081901c821660608a0152166040880152611b2e565b8463ffffffff166019036119a45763ffffffff84811681851602602081901c821660608a0152166040880152611b2e565b8463ffffffff16601a03611a67578260030b600003611a1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f000000000000000000006044820152606401610bb6565b8260030b8460030b81611a3457611a346124d0565b0763ffffffff166060880152600383810b9085900b81611a5657611a566124d0565b0563ffffffff166040880152611b2e565b8463ffffffff16601b03611b2e578263ffffffff16600003611ae5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f000000000000000000006044820152606401610bb6565b8263ffffffff168463ffffffff1681611b0057611b006124d0565b0663ffffffff908116606089015283811690851681611b2157611b216124d0565b0463ffffffff1660408801525b63ffffffff821615611b645780868363ffffffff1660208110611b5357611b536124a1565b63ffffffff90921660209290920201525b50505060208401805163ffffffff808216909652600401909416909352505050565b6000611b9183611c28565b6003841615611b9f57600080fd5b6020830192601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611c1d5760208601953582821c6001168015611bed5760018114611c0257611c13565b60008581526020839052604090209450611c13565b600082815260208690526040902094505b5050600101611bc5565b509095945050505050565b36611c358261038061252e565b811015611cc4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f61746100000000000000000000000000000000000000000000000000000000006064820152608401610bb6565b5050565b836000015160040163ffffffff16846020015163ffffffff1614611d48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f7400000000000000000000000000006044820152606401610bb6565b835160208501805163ffffffff9081168752838116909152831615611d945780600801848463ffffffff1660208110611d8357611d836124a1565b63ffffffff90921660209290920201525b5050505050565b60208363ffffffff1610611e0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c69642072656769737465720000000000000000000000000000000000006044820152606401610bb6565b63ffffffff831615801590611e1d5750805b15611e4c5781848463ffffffff1660208110611e3b57611e3b6124a1565b63ffffffff90921660209290920201525b5050505060208101805163ffffffff8082169093526004019091169052565b6000808284610fff811615611e9757611e8a610fff8216611000612546565b611e94908261256b565b90505b8663ffffffff16600003611eb957849350611eb2818361256b565b9150611ebd565b8693505b5093509350939050565b600080868363ffffffff8d16156120f5577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8e16016120b4576000611f18868e63fffffffc1689610947565b90508a60001a600103611f81576040805160008d8152336020528b83526060902091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0100000000000000000000000000000000000000000000000000000000000000179a505b6040517fe03110e1000000000000000000000000000000000000000000000000000000008152600481018c905263ffffffff8b166024820152600090819073ffffffffffffffffffffffffffffffffffffffff8b169063e03110e1906044016040805180830381865afa158015611ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120209190612593565b9150915060038f168060040382811015612038578092505b50818f1015612045578e91505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b0391508119811690508381198616179450505061209b8f63fffffffc168a85611b86565b93506120a7818661256b565b94508096505050506120f5565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff8e16016120e9578a93506120f5565b63ffffffff9350600992505b9950995099509995505050505050565b600080858563ffffffff8b1660011480612125575063ffffffff8b166002145b80612136575063ffffffff8b166004145b15612143578893506121ed565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff8c16016121e1576000612183868c63fffffffc1689610947565b90508860038c166004038b81101561219957809b505b8b965086900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193880293841b0116911b179150600090506121ed565b63ffffffff9350600992505b975097509750979350505050565b60008063ffffffff831660030361229e5763ffffffff84161580612225575063ffffffff84166005145b80612236575063ffffffff84166003145b1561224457600091506122a9565b63ffffffff84166001148061225f575063ffffffff84166002145b80612270575063ffffffff84166006145b80612281575063ffffffff84166004145b1561228f57600191506122a9565b5063ffffffff905060096122a9565b5063ffffffff905060165b9250929050565b63ffffffff808316604085015281811660e0850152602085015190811685526122da90600461256b565b63ffffffff16602090940193909352505050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101612354612359565b905290565b6040518061040001604052806020906020820280368337509192915050565b600060208083528351808285015260005b818110156123a557858101830151858201604001528201612389565b818111156123b7576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008083601f8401126123fd57600080fd5b50813567ffffffffffffffff81111561241557600080fd5b6020830191508360208285010111156122a957600080fd5b60008060008060006060868803121561244557600080fd5b853567ffffffffffffffff8082111561245d57600080fd5b61246989838a016123eb565b9097509550602088013591508082111561248257600080fd5b5061248f888289016123eb565b96999598509660400135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612541576125416124ff565b500190565b600063ffffffff83811690831681811015612563576125636124ff565b039392505050565b600063ffffffff80831681851680830382111561258a5761258a6124ff565b01949350505050565b600080604083850312156125a657600080fd5b50508051602090910151909290915056fea164736f6c634300080f000a"; bytes internal constant anchorStateRegistryCode = hex"608060405234801561001057600080fd5b50600436106100675760003560e01c8063838c2d1e11610050578063838c2d1e146100fa578063c303f0df14610104578063f2b4e6171461011757600080fd5b806354fd4d501461006c5780637258a807146100be575b600080fd5b6100a86040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b5919061085c565b60405180910390f35b6100e56100cc36600461088b565b6001602081905260009182526040909120805491015482565b604080519283526020830191909152016100b5565b61010261015b565b005b61010261011236600461094f565b6105d4565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb1681526020016100b5565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526101f69190810190610a68565b92509250925060007f0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb73ffffffffffffffffffffffffffffffffffffffff16635f0150cb8585856040518463ffffffff1660e01b815260040161025b93929190610b39565b6040805180830381865afa158015610277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029b9190610b67565b5090508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f416e63686f72537461746552656769737472793a206661756c7420646973707560448201527f74652067616d65206e6f7420726567697374657265642077697468206661637460648201527f6f72790000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b600160008563ffffffff1663ffffffff168152602001908152602001600020600101548573ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610bc7565b11610422575050505050565b60028573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104939190610c0f565b60028111156104a4576104a4610be0565b146104b0575050505050565b60405180604001604052806105308773ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052d9190610bc7565b90565b81526020018673ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190610bc7565b905263ffffffff909416600090815260016020818152604090922086518155959091015194019390935550505050565b600054610100900460ff16158080156105f45750600054600160ff909116105b8061060e5750303b15801561060e575060005460ff166001145b61069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161037b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156106f857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60005b825181101561075e57600083828151811061071857610718610c30565b60209081029190910181015180820151905163ffffffff16600090815260018084526040909120825181559190920151910155508061075681610c5f565b9150506106fb565b5080156107c257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60005b838110156107fd5781810151838201526020016107e5565b8381111561080c576000848401525b50505050565b6000815180845261082a8160208601602086016107e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061086f6020830184610812565b9392505050565b63ffffffff8116811461088857600080fd5b50565b60006020828403121561089d57600080fd5b813561086f81610876565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156108fa576108fa6108a8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610947576109476108a8565b604052919050565b6000602080838503121561096257600080fd5b823567ffffffffffffffff8082111561097a57600080fd5b818501915085601f83011261098e57600080fd5b8135818111156109a0576109a06108a8565b6109ae848260051b01610900565b818152848101925060609182028401850191888311156109cd57600080fd5b938501935b82851015610a5c57848903818112156109eb5760008081fd5b6109f36108d7565b86356109fe81610876565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301811315610a325760008081fd5b610a3a6108d7565b888a0135815290880135898201528189015285525093840193928501926109d2565b50979650505050505050565b600080600060608486031215610a7d57600080fd5b8351610a8881610876565b60208501516040860151919450925067ffffffffffffffff80821115610aad57600080fd5b818601915086601f830112610ac157600080fd5b815181811115610ad357610ad36108a8565b610b0460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610900565b9150808252876020828501011115610b1b57600080fd5b610b2c8160208401602086016107e2565b5080925050509250925092565b63ffffffff84168152826020820152606060408201526000610b5e6060830184610812565b95945050505050565b60008060408385031215610b7a57600080fd5b825173ffffffffffffffffffffffffffffffffffffffff81168114610b9e57600080fd5b602084015190925067ffffffffffffffff81168114610bbc57600080fd5b809150509250929050565b600060208284031215610bd957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610c2157600080fd5b81516003811061086f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610cb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c634300080f000a"; bytes internal constant acc27Code = - hex"6080604052600436106102f25760003560e01c806370872aa51161018f578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b18578063fa315aa914610b3c578063fe2bbeb214610b6f57600080fd5b8063ec5e630814610a95578063eff0f59214610ac8578063f8f43ff614610af857600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a0f578063d8cc1a3c14610a42578063dabd396d14610a6257600080fd5b8063c6f0308c14610937578063cf09e0d0146109c1578063d5d44d80146109e257600080fd5b80638d450a9511610143578063bcef3b551161011d578063bcef3b55146108b7578063bd8da956146108f7578063c395e1ca1461091757600080fd5b80638d450a9514610777578063a445ece6146107aa578063bbdc02db1461087657600080fd5b80638129fc1c116101745780638129fc1c1461071a5780638980e0cc146107225780638b85902b1461073757600080fd5b806370872aa5146106f25780637b0f0adc1461070757600080fd5b80633fc8cef3116102485780635c0cba33116101fc5780636361506d116101d65780636361506d1461066c5780636b6716c0146106ac5780636f034409146106df57600080fd5b80635c0cba3314610604578063609d33341461063757806360e274641461064c57600080fd5b806354fd4d501161022d57806354fd4d501461055e57806357da950e146105b45780635a5fa2d9146105e457600080fd5b80633fc8cef314610518578063472777c61461054b57600080fd5b80632810e1d6116102aa57806337b1b2291161028457806337b1b229146104655780633a768463146104a55780633e3ac912146104d857600080fd5b80632810e1d6146103de5780632ad69aeb146103f357806330dbe5701461041357600080fd5b806319effeb4116102db57806319effeb414610339578063200d2ed21461038457806325fc2ace146103bf57600080fd5b806301935130146102f757806303c2924d14610319575b600080fd5b34801561030357600080fd5b5061031761031236600461532d565b610b9f565b005b34801561032557600080fd5b50610317610334366004615388565b610ec0565b34801561034557600080fd5b506000546103669068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561039057600080fd5b506000546103b290700100000000000000000000000000000000900460ff1681565b60405161037b91906153d9565b3480156103cb57600080fd5b506008545b60405190815260200161037b565b3480156103ea57600080fd5b506103b2611566565b3480156103ff57600080fd5b506103d061040e366004615388565b61180b565b34801561041f57600080fd5b506001546104409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161037b565b34801561047157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610440565b3480156104b157600080fd5b507f00000000000000000000000049e77cde01ffbab1266813b9a2faadc1b757f435610440565b3480156104e457600080fd5b50600054610508907201000000000000000000000000000000000000900460ff1681565b604051901515815260200161037b565b34801561052457600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610440565b61031761055936600461541a565b611841565b34801561056a57600080fd5b506105a76040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161037b91906154b1565b3480156105c057600080fd5b506008546009546105cf919082565b6040805192835260208301919091520161037b565b3480156105f057600080fd5b506103d06105ff3660046154c4565b611853565b34801561061057600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610440565b34801561064357600080fd5b506105a761188d565b34801561065857600080fd5b50610317610667366004615502565b61189b565b34801561067857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103d0565b3480156106b857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b6103176106ed366004615534565b611a42565b3480156106fe57600080fd5b506009546103d0565b61031761071536600461541a565b6123e3565b6103176123f0565b34801561072e57600080fd5b506002546103d0565b34801561074357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103d0565b34801561078357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b3480156107b657600080fd5b506108226107c53660046154c4565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff16606082015260800161037b565b34801561088257600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161037b565b3480156108c357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103d0565b34801561090357600080fd5b506103666109123660046154c4565b612949565b34801561092357600080fd5b506103d0610932366004615573565b612b28565b34801561094357600080fd5b506109576109523660046154c4565b612d0b565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161037b565b3480156109cd57600080fd5b506000546103669067ffffffffffffffff1681565b3480156109ee57600080fd5b506103d06109fd366004615502565b60036020526000908152604090205481565b348015610a1b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103d0565b348015610a4e57600080fd5b50610317610a5d3660046155a5565b612da2565b348015610a6e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b0610366565b348015610aa157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103d0565b348015610ad457600080fd5b50610508610ae33660046154c4565b60046020526000908152604090205460ff1681565b348015610b0457600080fd5b50610317610b1336600461541a565b6133d1565b348015610b2457600080fd5b50610b2d613823565b60405161037b9392919061562f565b348015610b4857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103d0565b348015610b7b57600080fd5b50610508610b8a3660046154c4565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610bcb57610bcb6153aa565b14610c02576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c55576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610ca3610c9e36869003860186615683565b613883565b14610cda576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cef929190615710565b604051809103902014610d2e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d77610d7284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138df92505050565b61394c565b90506000610d9e82600881518110610d9157610d91615720565b6020026020010151613b02565b9050602081511115610ddc576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610e51576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610eec57610eec6153aa565b14610f23576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610f3857610f38615720565b906000526020600020906005020190506000610f5384612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015610fbc576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611005576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561102257508515155b156110bd578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110555781611071565b600186015473ffffffffffffffffffffffffffffffffffffffff165b905061107d8187613bb6565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152611160576fffffffffffffffffffffffffffffffff6040820152600181526000869003611160578195505b600086826020015163ffffffff16611178919061577e565b90506000838211611189578161118b565b835b602084015190915063ffffffff165b818110156112d75760008682815481106111b6576111b6615720565b6000918252602080832090910154808352600690915260409091205490915060ff1661120e576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061122357611223615720565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112805750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b156112c257600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b505080806112cf90615796565b91505061119a565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915584900361155b57606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561145757506000547201000000000000000000000000000000000000900460ff165b156114cc5760015473ffffffffffffffffffffffffffffffffffffffff1661147f818a613bb6565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909116178855611559565b61151373ffffffffffffffffffffffffffffffffffffffff8216156114f1578161150d565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89613bb6565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611594576115946153aa565b146115cb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661162f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008154811061165b5761165b615720565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611696576001611699565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561174a5761174a6153aa565b02179055600281111561175f5761175f6153aa565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117f057600080fd5b505af1158015611804573d6000803e3d6000fd5b5050505090565b6005602052816000526040600020818154811061182757600080fd5b90600052602060002001600091509150505481565b905090565b61184e8383836001611a42565b505050565b6000818152600760209081526040808320600590925282208054825461188490610100900463ffffffff16826157ce565b95945050505050565b606061183c60546020613cb7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812080549082905590819003611900576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a02576040519150601f19603f3d011682016040523d82523d6000602084013e611a07565b606091505b505090508061184e576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054700100000000000000000000000000000000900460ff166002811115611a6e57611a6e6153aa565b14611aa5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110611aba57611aba615720565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514611ba1576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000611c61826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611c9c5750611c997f0000000000000000000000000000000000000000000000000000000000000004600261577e565b81145b8015611ca6575084155b15611cdd576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611d03575086155b15611d3a576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115611d94576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dbf7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b8103611dd157611dd186888588613d09565b34611ddb83612b28565b14611e12576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e1d88612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603611e85576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016611ee591906157e5565b67ffffffffffffffff16611f008267ffffffffffffffff1690565b67ffffffffffffffff161115611fe2576000611f3d60017f00000000000000000000000000000000000000000000000000000000000000046157ce565b8314611f735767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611fa8565b611fa87f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261580e565b9050611fde817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff166157e5565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615612060576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b815260200190815260200160002060016002805490506122f691906157ce565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b15801561238e57600080fd5b505af11580156123a2573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b61184e8383836000611a42565b60005471010000000000000000000000000000000000900460ff1615612442576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa1580156124f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251a919061583e565b909250905081612556576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461258957639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511612623576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b1580156128f857600080fd5b505af115801561290c573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff166002811115612977576129776153aa565b146129ae576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600283815481106129c3576129c3615720565b600091825260208220600590910201805490925063ffffffff90811614612a3257815460028054909163ffffffff16908110612a0157612a01615720565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090612a6a90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b612a7e9067ffffffffffffffff16426157ce565b612a9d612a5d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16612ab1919061577e565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611612afe5780611884565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080612bc7836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115612c26576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000612c418383615891565b9050670de0b6b3a76400006000612c78827f00000000000000000000000000000000000000000000000000000000000000086158a5565b90506000612c96612c91670de0b6b3a7640000866158a5565b613eba565b90506000612ca48484614115565b90506000612cb28383614164565b90506000612cbf82614192565b90506000612cde82612cd9670de0b6b3a76400008f6158a5565b61437a565b90506000612cec8b83614164565b9050612cf8818d6158a5565b9f9e505050505050505050505050505050565b60028181548110612d1b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115612dce57612dce6153aa565b14612e05576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110612e1a57612e1a615720565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050612e797f0000000000000000000000000000000000000000000000000000000000000008600161577e565b612f15826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614612f4f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561304657612fa27f00000000000000000000000000000000000000000000000000000000000000047f00000000000000000000000000000000000000000000000000000000000000086157ce565b6001901b612fc1846fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff16612fdd91906158e2565b1561301a5761301161300260016fffffffffffffffffffffffffffffffff87166158f6565b865463ffffffff166000614453565b6003015461303c565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050613070565b6003850154915061306d6130026fffffffffffffffffffffffffffffffff8616600161591f565b90505b600882901b60088a8a604051613087929190615710565b6040518091039020901b146130c8576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006130d38c614537565b905060006130e2836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f00000000000000000000000049e77cde01ffbab1266813b9a2faadc1b757f43573ffffffffffffffffffffffffffffffffffffffff169063e14ced329061315c908f908f908f908f908a9060040161599c565b6020604051808303816000875af115801561317b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319f91906159d6565b60048501549114915060009060029061324a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132e6896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132f091906159ef565b6132fa9190615a12565b60ff16159050811515810361333b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156133fd576133fd6153aa565b14613434576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061344386614566565b935093509350935060006134598585858561496f565b905060007f00000000000000000000000049e77cde01ffbab1266813b9a2faadc1b757f43573ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ec9190615a34565b9050600189036135e45773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84613548367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de91906159d6565b5061155b565b600289036136105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489613548565b6003890361363c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487613548565b600489036137585760006136826fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614a29565b60095461368f919061577e565b61369a90600161577e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561372d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375191906159d6565b505061155b565b600589036137f1576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161359b565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061387c61188d565b9050909192565b600081600001518260200151836040015184606001516040516020016138c2949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152815160000361392e576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061395c85614ad7565b919450925090506001816001811115613977576139776153aa565b146139ae576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516139ba838561577e565b146139f1576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613a085790505093506000835b8651811015613af657600080613a7b6040518060400160405280858c60000151613a5f91906157ce565b8152602001858c60200151613a74919061577e565b9052614ad7565b509150915060405180604001604052808383613a97919061577e565b8152602001848b60200151613aac919061577e565b815250888581518110613ac157613ac1615720565b6020908102919091010152613ad760018561577e565b9350613ae3818361577e565b613aed908461577e565b92505050613a35565b50845250919392505050565b60606000806000613b1285614ad7565b919450925090506000816001811115613b2d57613b2d6153aa565b14613b64576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b6e828461577e565b855114613ba7576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188485602001518484614f75565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff90931692839290613c0590849061577e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b158015613c9a57600080fd5b505af1158015613cae573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b6000613d286fffffffffffffffffffffffffffffffff8416600161591f565b90506000613d3882866001614453565b9050600086901a8380613e245750613d7160027f00000000000000000000000000000000000000000000000000000000000000046158e2565b6004830154600290613e15906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613e1f9190615a12565b60ff16145b15613e7c5760ff811660011480613e3e575060ff81166002145b613e77576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b613cae565b60ff811615613cae576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613f1957631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261415257637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156141825763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d782136141c057919050565b680755bf798b4a1bf1e582126141de5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006143ab670de0b6b3a76400008361439286613eba565b61439c9190615a51565b6143a69190615b0d565b614192565b90505b92915050565b600080614441837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b6000808261449c576144976fffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000461500a565b6144b7565b6144b7856fffffffffffffffffffffffffffffffff16615196565b9050600284815481106144cc576144cc615720565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461452f57815460028054909163ffffffff1690811061451a5761451a615720565b906000526020600020906005020191506144dd565b509392505050565b600080600080600061454886614566565b935093509350935061455c8484848461496f565b9695505050505050565b600080600080600085905060006002828154811061458657614586615720565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000049061465d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614697576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f00000000000000000000000000000000000000000000000000000000000000049061475e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156147d357825463ffffffff1661479d7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b83036147a7578391505b600281815481106147ba576147ba615720565b906000526020600020906005020193508094505061469b565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661483c614827856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561490b576000614874836fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff1611156148df5760006148b66148ae60016fffffffffffffffffffffffffffffffff86166158f6565b896001614453565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506148e59050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614961565b600061492d6148ae6fffffffffffffffffffffffffffffffff8516600161591f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156149dc5760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611884565b8282604051602001614a0a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614ab6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614b1a576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614b3f576000600160009450945094505050614f6e565b60b78111614c55576000614b546080836157ce565b905080876000015111614b93576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614c0b57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614c42576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614f6e915050565b60bf8111614db3576000614c6a60b7836157ce565b905080876000015111614ca9576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614d0b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614d53576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d5d818461577e565b895111614d96576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614da183600161577e565b9750955060009450614f6e9350505050565b60f78111614e18576000614dc860c0836157ce565b905080876000015111614e07576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614f6e915050565b6000614e2560f7836157ce565b905080876000015111614e64576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614ec6576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614f0e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f18818461577e565b895111614f51576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f5c83600161577e565b9750955060019450614f6e9350505050565b9193909250565b60608167ffffffffffffffff811115614f9057614f90615654565b6040519080825280601f01601f191660200182016040528015614fba576020820181803683370190505b5090508115615003576000614fcf848661577e565b90506020820160005b84811015614ff0578281015182820152602001614fd8565b84811115614fff576000858301525b5050505b9392505050565b6000816150a9846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150bf5763b34b5c226000526004601cfd5b6150c883615196565b905081615167826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116143ae576143ab61517d83600161577e565b6fffffffffffffffffffffffffffffffff83169061523b565b6000811960018301168161522a827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806152c8847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126152f657600080fd5b50813567ffffffffffffffff81111561530e57600080fd5b60208301915083602082850101111561532657600080fd5b9250929050565b600080600083850360a081121561534357600080fd5b608081121561535157600080fd5b50839250608084013567ffffffffffffffff81111561536f57600080fd5b61537b868287016152e4565b9497909650939450505050565b6000806040838503121561539b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310615414577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561542f57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561546c57602081850181015186830182015201615450565b8181111561547e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006143ab6020830184615446565b6000602082840312156154d657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146154ff57600080fd5b50565b60006020828403121561551457600080fd5b8135615003816154dd565b8035801515811461552f57600080fd5b919050565b6000806000806080858703121561554a57600080fd5b8435935060208501359250604085013591506155686060860161551f565b905092959194509250565b60006020828403121561558557600080fd5b81356fffffffffffffffffffffffffffffffff8116811461500357600080fd5b600080600080600080608087890312156155be57600080fd5b863595506155ce6020880161551f565b9450604087013567ffffffffffffffff808211156155eb57600080fd5b6155f78a838b016152e4565b9096509450606089013591508082111561561057600080fd5b5061561d89828a016152e4565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006118846060830184615446565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561569557600080fd5b6040516080810181811067ffffffffffffffff821117156156df577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157915761579161574f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157c7576157c761574f565b5060010190565b6000828210156157e0576157e061574f565b500390565b600067ffffffffffffffff838116908316818110156158065761580661574f565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156158355761583561574f565b02949350505050565b6000806040838503121561585157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158a0576158a0615862565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158dd576158dd61574f565b500290565b6000826158f1576158f1615862565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156158065761580661574f565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561594a5761594a61574f565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006159b0606083018789615953565b82810360208401526159c3818688615953565b9150508260408301529695505050505050565b6000602082840312156159e857600080fd5b5051919050565b600060ff821660ff841680821015615a0957615a0961574f565b90039392505050565b600060ff831680615a2557615a25615862565b8060ff84160691505092915050565b600060208284031215615a4657600080fd5b8151615003816154dd565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a9257615a9261574f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615acd57615acd61574f565b60008712925087820587128484161615615ae957615ae961574f565b87850587128184161615615aff57615aff61574f565b505050929093029392505050565b600082615b1c57615b1c615862565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b7057615b7061574f565b50059056fea164736f6c634300080f000a"; + hex"6080604052600436106102f25760003560e01c806370872aa51161018f578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b18578063fa315aa914610b3c578063fe2bbeb214610b6f57600080fd5b8063ec5e630814610a95578063eff0f59214610ac8578063f8f43ff614610af857600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a0f578063d8cc1a3c14610a42578063dabd396d14610a6257600080fd5b8063c6f0308c14610937578063cf09e0d0146109c1578063d5d44d80146109e257600080fd5b80638d450a9511610143578063bcef3b551161011d578063bcef3b55146108b7578063bd8da956146108f7578063c395e1ca1461091757600080fd5b80638d450a9514610777578063a445ece6146107aa578063bbdc02db1461087657600080fd5b80638129fc1c116101745780638129fc1c1461071a5780638980e0cc146107225780638b85902b1461073757600080fd5b806370872aa5146106f25780637b0f0adc1461070757600080fd5b80633fc8cef3116102485780635c0cba33116101fc5780636361506d116101d65780636361506d1461066c5780636b6716c0146106ac5780636f034409146106df57600080fd5b80635c0cba3314610604578063609d33341461063757806360e274641461064c57600080fd5b806354fd4d501161022d57806354fd4d501461055e57806357da950e146105b45780635a5fa2d9146105e457600080fd5b80633fc8cef314610518578063472777c61461054b57600080fd5b80632810e1d6116102aa57806337b1b2291161028457806337b1b229146104655780633a768463146104a55780633e3ac912146104d857600080fd5b80632810e1d6146103de5780632ad69aeb146103f357806330dbe5701461041357600080fd5b806319effeb4116102db57806319effeb414610339578063200d2ed21461038457806325fc2ace146103bf57600080fd5b806301935130146102f757806303c2924d14610319575b600080fd5b34801561030357600080fd5b5061031761031236600461532d565b610b9f565b005b34801561032557600080fd5b50610317610334366004615388565b610ec0565b34801561034557600080fd5b506000546103669068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561039057600080fd5b506000546103b290700100000000000000000000000000000000900460ff1681565b60405161037b91906153d9565b3480156103cb57600080fd5b506008545b60405190815260200161037b565b3480156103ea57600080fd5b506103b2611566565b3480156103ff57600080fd5b506103d061040e366004615388565b61180b565b34801561041f57600080fd5b506001546104409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161037b565b34801561047157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610440565b3480156104b157600080fd5b507f00000000000000000000000028bf1582225713139c0e898326db808b6484cfd4610440565b3480156104e457600080fd5b50600054610508907201000000000000000000000000000000000000900460ff1681565b604051901515815260200161037b565b34801561052457600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610440565b61031761055936600461541a565b611841565b34801561056a57600080fd5b506105a76040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161037b91906154b1565b3480156105c057600080fd5b506008546009546105cf919082565b6040805192835260208301919091520161037b565b3480156105f057600080fd5b506103d06105ff3660046154c4565b611853565b34801561061057600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610440565b34801561064357600080fd5b506105a761188d565b34801561065857600080fd5b50610317610667366004615502565b61189b565b34801561067857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103d0565b3480156106b857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b6103176106ed366004615534565b611a42565b3480156106fe57600080fd5b506009546103d0565b61031761071536600461541a565b6123e3565b6103176123f0565b34801561072e57600080fd5b506002546103d0565b34801561074357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103d0565b34801561078357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b3480156107b657600080fd5b506108226107c53660046154c4565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff16606082015260800161037b565b34801561088257600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161037b565b3480156108c357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103d0565b34801561090357600080fd5b506103666109123660046154c4565b612949565b34801561092357600080fd5b506103d0610932366004615573565b612b28565b34801561094357600080fd5b506109576109523660046154c4565b612d0b565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161037b565b3480156109cd57600080fd5b506000546103669067ffffffffffffffff1681565b3480156109ee57600080fd5b506103d06109fd366004615502565b60036020526000908152604090205481565b348015610a1b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103d0565b348015610a4e57600080fd5b50610317610a5d3660046155a5565b612da2565b348015610a6e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b0610366565b348015610aa157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103d0565b348015610ad457600080fd5b50610508610ae33660046154c4565b60046020526000908152604090205460ff1681565b348015610b0457600080fd5b50610317610b1336600461541a565b6133d1565b348015610b2457600080fd5b50610b2d613823565b60405161037b9392919061562f565b348015610b4857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103d0565b348015610b7b57600080fd5b50610508610b8a3660046154c4565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610bcb57610bcb6153aa565b14610c02576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c55576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610ca3610c9e36869003860186615683565b613883565b14610cda576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cef929190615710565b604051809103902014610d2e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d77610d7284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138df92505050565b61394c565b90506000610d9e82600881518110610d9157610d91615720565b6020026020010151613b02565b9050602081511115610ddc576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610e51576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610eec57610eec6153aa565b14610f23576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610f3857610f38615720565b906000526020600020906005020190506000610f5384612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015610fbc576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611005576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561102257508515155b156110bd578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110555781611071565b600186015473ffffffffffffffffffffffffffffffffffffffff165b905061107d8187613bb6565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152611160576fffffffffffffffffffffffffffffffff6040820152600181526000869003611160578195505b600086826020015163ffffffff16611178919061577e565b90506000838211611189578161118b565b835b602084015190915063ffffffff165b818110156112d75760008682815481106111b6576111b6615720565b6000918252602080832090910154808352600690915260409091205490915060ff1661120e576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061122357611223615720565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112805750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b156112c257600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b505080806112cf90615796565b91505061119a565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915584900361155b57606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561145757506000547201000000000000000000000000000000000000900460ff165b156114cc5760015473ffffffffffffffffffffffffffffffffffffffff1661147f818a613bb6565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909116178855611559565b61151373ffffffffffffffffffffffffffffffffffffffff8216156114f1578161150d565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89613bb6565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611594576115946153aa565b146115cb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661162f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008154811061165b5761165b615720565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611696576001611699565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561174a5761174a6153aa565b02179055600281111561175f5761175f6153aa565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117f057600080fd5b505af1158015611804573d6000803e3d6000fd5b5050505090565b6005602052816000526040600020818154811061182757600080fd5b90600052602060002001600091509150505481565b905090565b61184e8383836001611a42565b505050565b6000818152600760209081526040808320600590925282208054825461188490610100900463ffffffff16826157ce565b95945050505050565b606061183c60546020613cb7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812080549082905590819003611900576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a02576040519150601f19603f3d011682016040523d82523d6000602084013e611a07565b606091505b505090508061184e576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054700100000000000000000000000000000000900460ff166002811115611a6e57611a6e6153aa565b14611aa5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110611aba57611aba615720565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514611ba1576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000611c61826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611c9c5750611c997f0000000000000000000000000000000000000000000000000000000000000004600261577e565b81145b8015611ca6575084155b15611cdd576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611d03575086155b15611d3a576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115611d94576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dbf7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b8103611dd157611dd186888588613d09565b34611ddb83612b28565b14611e12576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e1d88612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603611e85576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016611ee591906157e5565b67ffffffffffffffff16611f008267ffffffffffffffff1690565b67ffffffffffffffff161115611fe2576000611f3d60017f00000000000000000000000000000000000000000000000000000000000000046157ce565b8314611f735767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611fa8565b611fa87f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261580e565b9050611fde817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff166157e5565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615612060576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b815260200190815260200160002060016002805490506122f691906157ce565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b15801561238e57600080fd5b505af11580156123a2573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b61184e8383836000611a42565b60005471010000000000000000000000000000000000900460ff1615612442576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa1580156124f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251a919061583e565b909250905081612556576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461258957639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511612623576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b1580156128f857600080fd5b505af115801561290c573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff166002811115612977576129776153aa565b146129ae576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600283815481106129c3576129c3615720565b600091825260208220600590910201805490925063ffffffff90811614612a3257815460028054909163ffffffff16908110612a0157612a01615720565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090612a6a90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b612a7e9067ffffffffffffffff16426157ce565b612a9d612a5d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16612ab1919061577e565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611612afe5780611884565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080612bc7836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115612c26576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000612c418383615891565b9050670de0b6b3a76400006000612c78827f00000000000000000000000000000000000000000000000000000000000000086158a5565b90506000612c96612c91670de0b6b3a7640000866158a5565b613eba565b90506000612ca48484614115565b90506000612cb28383614164565b90506000612cbf82614192565b90506000612cde82612cd9670de0b6b3a76400008f6158a5565b61437a565b90506000612cec8b83614164565b9050612cf8818d6158a5565b9f9e505050505050505050505050505050565b60028181548110612d1b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115612dce57612dce6153aa565b14612e05576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110612e1a57612e1a615720565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050612e797f0000000000000000000000000000000000000000000000000000000000000008600161577e565b612f15826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614612f4f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561304657612fa27f00000000000000000000000000000000000000000000000000000000000000047f00000000000000000000000000000000000000000000000000000000000000086157ce565b6001901b612fc1846fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff16612fdd91906158e2565b1561301a5761301161300260016fffffffffffffffffffffffffffffffff87166158f6565b865463ffffffff166000614453565b6003015461303c565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050613070565b6003850154915061306d6130026fffffffffffffffffffffffffffffffff8616600161591f565b90505b600882901b60088a8a604051613087929190615710565b6040518091039020901b146130c8576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006130d38c614537565b905060006130e2836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f00000000000000000000000028bf1582225713139c0e898326db808b6484cfd473ffffffffffffffffffffffffffffffffffffffff169063e14ced329061315c908f908f908f908f908a9060040161599c565b6020604051808303816000875af115801561317b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319f91906159d6565b60048501549114915060009060029061324a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132e6896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132f091906159ef565b6132fa9190615a12565b60ff16159050811515810361333b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156133fd576133fd6153aa565b14613434576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061344386614566565b935093509350935060006134598585858561496f565b905060007f00000000000000000000000028bf1582225713139c0e898326db808b6484cfd473ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ec9190615a34565b9050600189036135e45773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84613548367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de91906159d6565b5061155b565b600289036136105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489613548565b6003890361363c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487613548565b600489036137585760006136826fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614a29565b60095461368f919061577e565b61369a90600161577e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561372d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375191906159d6565b505061155b565b600589036137f1576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161359b565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061387c61188d565b9050909192565b600081600001518260200151836040015184606001516040516020016138c2949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152815160000361392e576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061395c85614ad7565b919450925090506001816001811115613977576139776153aa565b146139ae576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516139ba838561577e565b146139f1576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613a085790505093506000835b8651811015613af657600080613a7b6040518060400160405280858c60000151613a5f91906157ce565b8152602001858c60200151613a74919061577e565b9052614ad7565b509150915060405180604001604052808383613a97919061577e565b8152602001848b60200151613aac919061577e565b815250888581518110613ac157613ac1615720565b6020908102919091010152613ad760018561577e565b9350613ae3818361577e565b613aed908461577e565b92505050613a35565b50845250919392505050565b60606000806000613b1285614ad7565b919450925090506000816001811115613b2d57613b2d6153aa565b14613b64576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b6e828461577e565b855114613ba7576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188485602001518484614f75565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff90931692839290613c0590849061577e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b158015613c9a57600080fd5b505af1158015613cae573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b6000613d286fffffffffffffffffffffffffffffffff8416600161591f565b90506000613d3882866001614453565b9050600086901a8380613e245750613d7160027f00000000000000000000000000000000000000000000000000000000000000046158e2565b6004830154600290613e15906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613e1f9190615a12565b60ff16145b15613e7c5760ff811660011480613e3e575060ff81166002145b613e77576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b613cae565b60ff811615613cae576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613f1957631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261415257637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156141825763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d782136141c057919050565b680755bf798b4a1bf1e582126141de5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006143ab670de0b6b3a76400008361439286613eba565b61439c9190615a51565b6143a69190615b0d565b614192565b90505b92915050565b600080614441837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b6000808261449c576144976fffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000461500a565b6144b7565b6144b7856fffffffffffffffffffffffffffffffff16615196565b9050600284815481106144cc576144cc615720565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461452f57815460028054909163ffffffff1690811061451a5761451a615720565b906000526020600020906005020191506144dd565b509392505050565b600080600080600061454886614566565b935093509350935061455c8484848461496f565b9695505050505050565b600080600080600085905060006002828154811061458657614586615720565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000049061465d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614697576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f00000000000000000000000000000000000000000000000000000000000000049061475e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156147d357825463ffffffff1661479d7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b83036147a7578391505b600281815481106147ba576147ba615720565b906000526020600020906005020193508094505061469b565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661483c614827856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561490b576000614874836fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff1611156148df5760006148b66148ae60016fffffffffffffffffffffffffffffffff86166158f6565b896001614453565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506148e59050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614961565b600061492d6148ae6fffffffffffffffffffffffffffffffff8516600161591f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156149dc5760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611884565b8282604051602001614a0a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614ab6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614b1a576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614b3f576000600160009450945094505050614f6e565b60b78111614c55576000614b546080836157ce565b905080876000015111614b93576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614c0b57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614c42576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614f6e915050565b60bf8111614db3576000614c6a60b7836157ce565b905080876000015111614ca9576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614d0b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614d53576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d5d818461577e565b895111614d96576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614da183600161577e565b9750955060009450614f6e9350505050565b60f78111614e18576000614dc860c0836157ce565b905080876000015111614e07576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614f6e915050565b6000614e2560f7836157ce565b905080876000015111614e64576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614ec6576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614f0e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f18818461577e565b895111614f51576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f5c83600161577e565b9750955060019450614f6e9350505050565b9193909250565b60608167ffffffffffffffff811115614f9057614f90615654565b6040519080825280601f01601f191660200182016040528015614fba576020820181803683370190505b5090508115615003576000614fcf848661577e565b90506020820160005b84811015614ff0578281015182820152602001614fd8565b84811115614fff576000858301525b5050505b9392505050565b6000816150a9846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150bf5763b34b5c226000526004601cfd5b6150c883615196565b905081615167826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116143ae576143ab61517d83600161577e565b6fffffffffffffffffffffffffffffffff83169061523b565b6000811960018301168161522a827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806152c8847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126152f657600080fd5b50813567ffffffffffffffff81111561530e57600080fd5b60208301915083602082850101111561532657600080fd5b9250929050565b600080600083850360a081121561534357600080fd5b608081121561535157600080fd5b50839250608084013567ffffffffffffffff81111561536f57600080fd5b61537b868287016152e4565b9497909650939450505050565b6000806040838503121561539b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310615414577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561542f57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561546c57602081850181015186830182015201615450565b8181111561547e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006143ab6020830184615446565b6000602082840312156154d657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146154ff57600080fd5b50565b60006020828403121561551457600080fd5b8135615003816154dd565b8035801515811461552f57600080fd5b919050565b6000806000806080858703121561554a57600080fd5b8435935060208501359250604085013591506155686060860161551f565b905092959194509250565b60006020828403121561558557600080fd5b81356fffffffffffffffffffffffffffffffff8116811461500357600080fd5b600080600080600080608087890312156155be57600080fd5b863595506155ce6020880161551f565b9450604087013567ffffffffffffffff808211156155eb57600080fd5b6155f78a838b016152e4565b9096509450606089013591508082111561561057600080fd5b5061561d89828a016152e4565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006118846060830184615446565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561569557600080fd5b6040516080810181811067ffffffffffffffff821117156156df577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157915761579161574f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157c7576157c761574f565b5060010190565b6000828210156157e0576157e061574f565b500390565b600067ffffffffffffffff838116908316818110156158065761580661574f565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156158355761583561574f565b02949350505050565b6000806040838503121561585157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158a0576158a0615862565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158dd576158dd61574f565b500290565b6000826158f1576158f1615862565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156158065761580661574f565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561594a5761594a61574f565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006159b0606083018789615953565b82810360208401526159c3818688615953565b9150508260408301529695505050505050565b6000602082840312156159e857600080fd5b5051919050565b600060ff821660ff841680821015615a0957615a0961574f565b90039392505050565b600060ff831680615a2557615a25615862565b8060ff84160691505092915050565b600060208284031215615a4657600080fd5b8151615003816154dd565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a9257615a9261574f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615acd57615acd61574f565b60008712925087820587128484161615615ae957615ae961574f565b87850587128184161615615aff57615aff61574f565b505050929093029392505050565b600082615b1c57615b1c615862565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b7057615b7061574f565b50059056fea164736f6c634300080f000a"; bytes internal constant acc28Code = - hex"6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b94578063fa315aa914610bb8578063fe2bbeb214610beb57600080fd5b8063ec5e630814610b11578063eff0f59214610b44578063f8f43ff614610b7457600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a8b578063d8cc1a3c14610abe578063dabd396d14610ade57600080fd5b8063c6f0308c146109b3578063cf09e0d014610a3d578063d5d44d8014610a5e57600080fd5b8063a445ece611610143578063bcef3b551161011d578063bcef3b5514610933578063bd8da95614610973578063c395e1ca1461099357600080fd5b8063a445ece6146107f3578063a8e4fb90146108bf578063bbdc02db146108f257600080fd5b80638980e0cc116101745780638980e0cc1461076b5780638b85902b146107805780638d450a95146107c057600080fd5b806370872aa51461073b5780637b0f0adc146107505780638129fc1c1461076357600080fd5b80633fc8cef31161025e5780635c0cba33116102075780636361506d116101e15780636361506d146106b55780636b6716c0146106f55780636f0344091461072857600080fd5b80635c0cba331461064d578063609d33341461068057806360e274641461069557600080fd5b806354fd4d501161023857806354fd4d50146105a757806357da950e146105fd5780635a5fa2d91461062d57600080fd5b80633fc8cef31461052e578063472777c614610561578063534db0e21461057457600080fd5b80632810e1d6116102c057806337b1b2291161029a57806337b1b2291461047b5780633a768463146104bb5780633e3ac912146104ee57600080fd5b80632810e1d6146103f45780632ad69aeb1461040957806330dbe5701461042957600080fd5b806319effeb4116102f157806319effeb41461034f578063200d2ed21461039a57806325fc2ace146103d557600080fd5b8063019351301461030d57806303c2924d1461032f575b600080fd5b34801561031957600080fd5b5061032d6103283660046155a8565b610c1b565b005b34801561033b57600080fd5b5061032d61034a366004615603565b610f3c565b34801561035b57600080fd5b5060005461037c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103a657600080fd5b506000546103c890700100000000000000000000000000000000900460ff1681565b6040516103919190615654565b3480156103e157600080fd5b506008545b604051908152602001610391565b34801561040057600080fd5b506103c86115e2565b34801561041557600080fd5b506103e6610424366004615603565b611887565b34801561043557600080fd5b506001546104569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610391565b34801561048757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610456565b3480156104c757600080fd5b507f00000000000000000000000049e77cde01ffbab1266813b9a2faadc1b757f435610456565b3480156104fa57600080fd5b5060005461051e907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610391565b34801561053a57600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610456565b61032d61056f366004615695565b6118bd565b34801561058057600080fd5b507f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63610456565b3480156105b357600080fd5b506105f06040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b604051610391919061572c565b34801561060957600080fd5b50600854600954610618919082565b60408051928352602083019190915201610391565b34801561063957600080fd5b506103e661064836600461573f565b6118cf565b34801561065957600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610456565b34801561068c57600080fd5b506105f0611909565b3480156106a157600080fd5b5061032d6106b036600461577d565b611917565b3480156106c157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103e6565b34801561070157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b61032d6107363660046157af565b611abe565b34801561074757600080fd5b506009546103e6565b61032d61075e366004615695565b611b7f565b61032d611b8c565b34801561077757600080fd5b506002546103e6565b34801561078c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103e6565b3480156107cc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b3480156107ff57600080fd5b5061086b61080e36600461573f565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff166060820152608001610391565b3480156108cb57600080fd5b507f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8610456565b3480156108fe57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000001168152602001610391565b34801561093f57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103e6565b34801561097f57600080fd5b5061037c61098e36600461573f565b611c05565b34801561099f57600080fd5b506103e66109ae3660046157ee565b611de4565b3480156109bf57600080fd5b506109d36109ce36600461573f565b611fc7565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610391565b348015610a4957600080fd5b5060005461037c9067ffffffffffffffff1681565b348015610a6a57600080fd5b506103e6610a7936600461577d565b60036020526000908152604090205481565b348015610a9757600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103e6565b348015610aca57600080fd5b5061032d610ad9366004615820565b61205e565b348015610aea57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b061037c565b348015610b1d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103e6565b348015610b5057600080fd5b5061051e610b5f36600461573f565b60046020526000908152604090205460ff1681565b348015610b8057600080fd5b5061032d610b8f366004615695565b612123565b348015610ba057600080fd5b50610ba9612575565b604051610391939291906158aa565b348015610bc457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103e6565b348015610bf757600080fd5b5061051e610c0636600461573f565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610c4757610c47615625565b14610c7e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610cd1576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d08367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610d1f610d1a368690038601866158fe565b6125d5565b14610d56576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610d6b92919061598b565b604051809103902014610daa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610df3610dee84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263192505050565b61269e565b90506000610e1a82600881518110610e0d57610e0d61599b565b6020026020010151612854565b9050602081511115610e58576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610ecd576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610f6857610f68615625565b14610f9f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610fb457610fb461599b565b906000526020600020906005020190506000610fcf84611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015611038576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611081576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561109e57508515155b15611139578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110d157816110ed565b600186015473ffffffffffffffffffffffffffffffffffffffff165b90506110f98187612908565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff1660608301526111dc576fffffffffffffffffffffffffffffffff60408201526001815260008690036111dc578195505b600086826020015163ffffffff166111f491906159f9565b905060008382116112055781611207565b835b602084015190915063ffffffff165b818110156113535760008682815481106112325761123261599b565b6000918252602080832090910154808352600690915260409091205490915060ff1661128a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061129f5761129f61599b565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112fc5750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b1561133e57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b5050808061134b90615a11565b915050611216565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092179091558490036115d757606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055891580156114d357506000547201000000000000000000000000000000000000900460ff165b156115485760015473ffffffffffffffffffffffffffffffffffffffff166114fb818a612908565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556115d5565b61158f73ffffffffffffffffffffffffffffffffffffffff82161561156d5781611589565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89612908565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561161057611610615625565b14611647576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166116ab576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106116d7576116d761599b565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611712576001611715565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156117c6576117c6615625565b0217905560028111156117db576117db615625565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505090565b600560205281600052604060002081815481106118a357600080fd5b90600052602060002001600091509150505481565b905090565b6118ca8383836001611abe565b505050565b6000818152600760209081526040808320600590925282208054825461190090610100900463ffffffff1682615a49565b95945050505050565b60606118b860546020612a09565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054908290559081900361197c576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a7e576040519150601f19603f3d011682016040523d82523d6000602084013e611a83565b606091505b50509050806118ca576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8161480611b3757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b611b6d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7984848484612a5b565b50505050565b6118ca8383836000611abe565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614611bfb576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c036133fc565b565b600080600054700100000000000000000000000000000000900460ff166002811115611c3357611c33615625565b14611c6a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110611c7f57611c7f61599b565b600091825260208220600590910201805490925063ffffffff90811614611cee57815460028054909163ffffffff16908110611cbd57611cbd61599b565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611d2690700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611d3a9067ffffffffffffffff1642615a49565b611d59611d19846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611d6d91906159f9565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611611dba5780611900565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080611e83836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115611ee2576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000611efd8383615a8f565b9050670de0b6b3a76400006000611f34827f0000000000000000000000000000000000000000000000000000000000000008615aa3565b90506000611f52611f4d670de0b6b3a764000086615aa3565b613955565b90506000611f608484613bb0565b90506000611f6e8383613bff565b90506000611f7b82613c2d565b90506000611f9a82611f95670de0b6b3a76400008f615aa3565b613e15565b90506000611fa88b83613bff565b9050611fb4818d615aa3565b9f9e505050505050505050505050505050565b60028181548110611fd757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614806120d757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b61210d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211b868686868686613e4f565b505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214f5761214f615625565b14612186576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806121958661447e565b935093509350935060006121ab85858585614887565b905060007f00000000000000000000000049e77cde01ffbab1266813b9a2faadc1b757f43573ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190615ae0565b9050600189036123365773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8461229a367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615afd565b506115d7565b600289036123625773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848961229a565b6003890361238e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848761229a565b600489036124aa5760006123d46fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614941565b6009546123e191906159f9565b6123ec9060016159f9565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561247f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a39190615afd565b50506115d7565b60058903612543576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122ed565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606125ce611909565b9050909192565b60008160000151826020015183604001518460600151604051602001612614949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612680576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006126ae856149ef565b9194509250905060018160018111156126c9576126c9615625565b14612700576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845161270c83856159f9565b14612743576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161275a5790505093506000835b8651811015612848576000806127cd6040518060400160405280858c600001516127b19190615a49565b8152602001858c602001516127c691906159f9565b90526149ef565b5091509150604051806040016040528083836127e991906159f9565b8152602001848b602001516127fe91906159f9565b8152508885815181106128135761281361599b565b60209081029190910101526128296001856159f9565b935061283581836159f9565b61283f90846159f9565b92505050612787565b50845250919392505050565b60606000806000612864856149ef565b91945092509050600081600181111561287f5761287f615625565b146128b6576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082846159f9565b8551146128f9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190085602001518484614e8d565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff909316928392906129579084906159f9565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b1580156129ec57600080fd5b505af1158015612a00573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054700100000000000000000000000000000000900460ff166002811115612a8757612a87615625565b14612abe576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110612ad357612ad361599b565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514612bba576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000612c7a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612cb55750612cb27f000000000000000000000000000000000000000000000000000000000000000460026159f9565b81145b8015612cbf575084155b15612cf6576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d1c575086155b15612d53576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115612dad576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd87f000000000000000000000000000000000000000000000000000000000000000460016159f9565b8103612dea57612dea86888588614f22565b34612df483611de4565b14612e2b576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e3688611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603612e9e576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016612efe9190615b16565b67ffffffffffffffff16612f198267ffffffffffffffff1690565b67ffffffffffffffff161115612ffb576000612f5660017f0000000000000000000000000000000000000000000000000000000000000004615a49565b8314612f8c5767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612fc1565b612fc17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615b3f565b9050612ff7817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff16615b16565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615613079576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b8152602001908152602001600020600160028054905061330f9190615a49565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b1580156133a757600080fd5b505af11580156133bb573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b60005471010000000000000000000000000000000000900460ff161561344e576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000001166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa158015613502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135269190615b6f565b909250905081613562576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461359557639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401351161362f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b15801561390457600080fd5b505af1158015613918573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136139b457631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613bed57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613c1d5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613c5b57919050565b680755bf798b4a1bf1e58212613c795763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613e46670de0b6b3a764000083613e2d86613955565b613e379190615b93565b613e419190615c4f565b613c2d565b90505b92915050565b60008054700100000000000000000000000000000000900460ff166002811115613e7b57613e7b615625565b14613eb2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110613ec757613ec761599b565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050613f267f000000000000000000000000000000000000000000000000000000000000000860016159f9565b613fc2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614613ffc576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156140f35761404f7f00000000000000000000000000000000000000000000000000000000000000047f0000000000000000000000000000000000000000000000000000000000000008615a49565b6001901b61406e846fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1661408a9190615cb7565b156140c7576140be6140af60016fffffffffffffffffffffffffffffffff8716615ccb565b865463ffffffff166000615172565b600301546140e9565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061411d565b6003850154915061411a6140af6fffffffffffffffffffffffffffffffff86166001615cf4565b90505b600882901b60088a8a60405161413492919061598b565b6040518091039020901b14614175576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141808c615256565b9050600061418f836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f00000000000000000000000049e77cde01ffbab1266813b9a2faadc1b757f43573ffffffffffffffffffffffffffffffffffffffff169063e14ced3290614209908f908f908f908f908a90600401615d71565b6020604051808303816000875af1158015614228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424c9190615afd565b6004850154911491506000906002906142f7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614393896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61439d9190615dab565b6143a79190615dce565b60ff1615905081151581036143e8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff161561443f576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061449e5761449e61599b565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000490614575906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145af576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000490614676906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146eb57825463ffffffff166146b57f000000000000000000000000000000000000000000000000000000000000000460016159f9565b83036146bf578391505b600281815481106146d2576146d261599b565b90600052602060002090600502019350809450506145b3565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661475461473f856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561482357600061478c836fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1611156147f75760006147ce6147c660016fffffffffffffffffffffffffffffffff8616615ccb565b896001615172565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506147fd9050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614879565b60006148456147c66fffffffffffffffffffffffffffffffff85166001615cf4565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156148f45760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611900565b82826040516020016149229291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b6000806149ce847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614a32576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614a57576000600160009450945094505050614e86565b60b78111614b6d576000614a6c608083615a49565b905080876000015111614aab576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614b2357507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614b5a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614e86915050565b60bf8111614ccb576000614b8260b783615a49565b905080876000015111614bc1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614c23576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614c6b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614c7581846159f9565b895111614cae576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614cb98360016159f9565b9750955060009450614e869350505050565b60f78111614d30576000614ce060c083615a49565b905080876000015111614d1f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614e86915050565b6000614d3d60f783615a49565b905080876000015111614d7c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614dde576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614e26576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e3081846159f9565b895111614e69576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e748360016159f9565b9750955060019450614e869350505050565b9193909250565b60608167ffffffffffffffff811115614ea857614ea86158cf565b6040519080825280601f01601f191660200182016040528015614ed2576020820181803683370190505b5090508115614f1b576000614ee784866159f9565b90506020820160005b84811015614f08578281015182820152602001614ef0565b84811115614f17576000858301525b5050505b9392505050565b6000614f416fffffffffffffffffffffffffffffffff84166001615cf4565b90506000614f5182866001615172565b9050600086901a838061503d5750614f8a60027f0000000000000000000000000000000000000000000000000000000000000004615cb7565b600483015460029061502e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6150389190615dce565b60ff16145b156150955760ff811660011480615057575060ff81166002145b615090576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b612a00565b60ff811615612a00576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b600080615160837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826151bb576151b66fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000004615285565b6151d6565b6151d6856fffffffffffffffffffffffffffffffff16615411565b9050600284815481106151eb576151eb61599b565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461524e57815460028054909163ffffffff169081106152395761523961599b565b906000526020600020906005020191506151fc565b509392505050565b60008060008060006152678661447e565b935093509350935061527b84848484614887565b9695505050505050565b600081615324846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161533a5763b34b5c226000526004601cfd5b61534383615411565b9050816153e2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613e4957613e466153f88360016159f9565b6fffffffffffffffffffffffffffffffff8316906154b6565b600081196001830116816154a5827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615543847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261557157600080fd5b50813567ffffffffffffffff81111561558957600080fd5b6020830191508360208285010111156155a157600080fd5b9250929050565b600080600083850360a08112156155be57600080fd5b60808112156155cc57600080fd5b50839250608084013567ffffffffffffffff8111156155ea57600080fd5b6155f68682870161555f565b9497909650939450505050565b6000806040838503121561561657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061568f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806000606084860312156156aa57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b818110156156e7576020818501810151868301820152016156cb565b818111156156f9576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613e4660208301846156c1565b60006020828403121561575157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461577a57600080fd5b50565b60006020828403121561578f57600080fd5b8135614f1b81615758565b803580151581146157aa57600080fd5b919050565b600080600080608085870312156157c557600080fd5b8435935060208501359250604085013591506157e36060860161579a565b905092959194509250565b60006020828403121561580057600080fd5b81356fffffffffffffffffffffffffffffffff81168114614f1b57600080fd5b6000806000806000806080878903121561583957600080fd5b863595506158496020880161579a565b9450604087013567ffffffffffffffff8082111561586657600080fd5b6158728a838b0161555f565b9096509450606089013591508082111561588b57600080fd5b5061589889828a0161555f565b979a9699509497509295939492505050565b63ffffffff8416815282602082015260606040820152600061190060608301846156c1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561591057600080fd5b6040516080810181811067ffffffffffffffff8211171561595a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615a0c57615a0c6159ca565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a4257615a426159ca565b5060010190565b600082821015615a5b57615a5b6159ca565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a9e57615a9e615a60565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615adb57615adb6159ca565b500290565b600060208284031215615af257600080fd5b8151614f1b81615758565b600060208284031215615b0f57600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015615b3757615b376159ca565b039392505050565b600067ffffffffffffffff80831681851681830481118215151615615b6657615b666159ca565b02949350505050565b60008060408385031215615b8257600080fd5b505080516020909101519092909150565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd457615bd46159ca565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0f57615c0f6159ca565b60008712925087820587128484161615615c2b57615c2b6159ca565b87850587128184161615615c4157615c416159ca565b505050929093029392505050565b600082615c5e57615c5e615a60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615cb257615cb26159ca565b500590565b600082615cc657615cc6615a60565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015615b3757615b376159ca565b60006fffffffffffffffffffffffffffffffff808316818516808303821115615d1f57615d1f6159ca565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615d85606083018789615d28565b8281036020840152615d98818688615d28565b9150508260408301529695505050505050565b600060ff821660ff841680821015615dc557615dc56159ca565b90039392505050565b600060ff831680615de157615de1615a60565b8060ff8416069150509291505056fea164736f6c634300080f000a"; + hex"6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b94578063fa315aa914610bb8578063fe2bbeb214610beb57600080fd5b8063ec5e630814610b11578063eff0f59214610b44578063f8f43ff614610b7457600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a8b578063d8cc1a3c14610abe578063dabd396d14610ade57600080fd5b8063c6f0308c146109b3578063cf09e0d014610a3d578063d5d44d8014610a5e57600080fd5b8063a445ece611610143578063bcef3b551161011d578063bcef3b5514610933578063bd8da95614610973578063c395e1ca1461099357600080fd5b8063a445ece6146107f3578063a8e4fb90146108bf578063bbdc02db146108f257600080fd5b80638980e0cc116101745780638980e0cc1461076b5780638b85902b146107805780638d450a95146107c057600080fd5b806370872aa51461073b5780637b0f0adc146107505780638129fc1c1461076357600080fd5b80633fc8cef31161025e5780635c0cba33116102075780636361506d116101e15780636361506d146106b55780636b6716c0146106f55780636f0344091461072857600080fd5b80635c0cba331461064d578063609d33341461068057806360e274641461069557600080fd5b806354fd4d501161023857806354fd4d50146105a757806357da950e146105fd5780635a5fa2d91461062d57600080fd5b80633fc8cef31461052e578063472777c614610561578063534db0e21461057457600080fd5b80632810e1d6116102c057806337b1b2291161029a57806337b1b2291461047b5780633a768463146104bb5780633e3ac912146104ee57600080fd5b80632810e1d6146103f45780632ad69aeb1461040957806330dbe5701461042957600080fd5b806319effeb4116102f157806319effeb41461034f578063200d2ed21461039a57806325fc2ace146103d557600080fd5b8063019351301461030d57806303c2924d1461032f575b600080fd5b34801561031957600080fd5b5061032d6103283660046155a8565b610c1b565b005b34801561033b57600080fd5b5061032d61034a366004615603565b610f3c565b34801561035b57600080fd5b5060005461037c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103a657600080fd5b506000546103c890700100000000000000000000000000000000900460ff1681565b6040516103919190615654565b3480156103e157600080fd5b506008545b604051908152602001610391565b34801561040057600080fd5b506103c86115e2565b34801561041557600080fd5b506103e6610424366004615603565b611887565b34801561043557600080fd5b506001546104569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610391565b34801561048757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610456565b3480156104c757600080fd5b507f00000000000000000000000028bf1582225713139c0e898326db808b6484cfd4610456565b3480156104fa57600080fd5b5060005461051e907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610391565b34801561053a57600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610456565b61032d61056f366004615695565b6118bd565b34801561058057600080fd5b507f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63610456565b3480156105b357600080fd5b506105f06040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b604051610391919061572c565b34801561060957600080fd5b50600854600954610618919082565b60408051928352602083019190915201610391565b34801561063957600080fd5b506103e661064836600461573f565b6118cf565b34801561065957600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610456565b34801561068c57600080fd5b506105f0611909565b3480156106a157600080fd5b5061032d6106b036600461577d565b611917565b3480156106c157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103e6565b34801561070157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b61032d6107363660046157af565b611abe565b34801561074757600080fd5b506009546103e6565b61032d61075e366004615695565b611b7f565b61032d611b8c565b34801561077757600080fd5b506002546103e6565b34801561078c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103e6565b3480156107cc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b3480156107ff57600080fd5b5061086b61080e36600461573f565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff166060820152608001610391565b3480156108cb57600080fd5b507f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8610456565b3480156108fe57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000001168152602001610391565b34801561093f57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103e6565b34801561097f57600080fd5b5061037c61098e36600461573f565b611c05565b34801561099f57600080fd5b506103e66109ae3660046157ee565b611de4565b3480156109bf57600080fd5b506109d36109ce36600461573f565b611fc7565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610391565b348015610a4957600080fd5b5060005461037c9067ffffffffffffffff1681565b348015610a6a57600080fd5b506103e6610a7936600461577d565b60036020526000908152604090205481565b348015610a9757600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103e6565b348015610aca57600080fd5b5061032d610ad9366004615820565b61205e565b348015610aea57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b061037c565b348015610b1d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103e6565b348015610b5057600080fd5b5061051e610b5f36600461573f565b60046020526000908152604090205460ff1681565b348015610b8057600080fd5b5061032d610b8f366004615695565b612123565b348015610ba057600080fd5b50610ba9612575565b604051610391939291906158aa565b348015610bc457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103e6565b348015610bf757600080fd5b5061051e610c0636600461573f565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610c4757610c47615625565b14610c7e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610cd1576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d08367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610d1f610d1a368690038601866158fe565b6125d5565b14610d56576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610d6b92919061598b565b604051809103902014610daa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610df3610dee84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263192505050565b61269e565b90506000610e1a82600881518110610e0d57610e0d61599b565b6020026020010151612854565b9050602081511115610e58576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610ecd576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610f6857610f68615625565b14610f9f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610fb457610fb461599b565b906000526020600020906005020190506000610fcf84611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015611038576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611081576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561109e57508515155b15611139578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110d157816110ed565b600186015473ffffffffffffffffffffffffffffffffffffffff165b90506110f98187612908565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff1660608301526111dc576fffffffffffffffffffffffffffffffff60408201526001815260008690036111dc578195505b600086826020015163ffffffff166111f491906159f9565b905060008382116112055781611207565b835b602084015190915063ffffffff165b818110156113535760008682815481106112325761123261599b565b6000918252602080832090910154808352600690915260409091205490915060ff1661128a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061129f5761129f61599b565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112fc5750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b1561133e57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b5050808061134b90615a11565b915050611216565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092179091558490036115d757606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055891580156114d357506000547201000000000000000000000000000000000000900460ff165b156115485760015473ffffffffffffffffffffffffffffffffffffffff166114fb818a612908565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556115d5565b61158f73ffffffffffffffffffffffffffffffffffffffff82161561156d5781611589565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89612908565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561161057611610615625565b14611647576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166116ab576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106116d7576116d761599b565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611712576001611715565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156117c6576117c6615625565b0217905560028111156117db576117db615625565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505090565b600560205281600052604060002081815481106118a357600080fd5b90600052602060002001600091509150505481565b905090565b6118ca8383836001611abe565b505050565b6000818152600760209081526040808320600590925282208054825461190090610100900463ffffffff1682615a49565b95945050505050565b60606118b860546020612a09565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054908290559081900361197c576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a7e576040519150601f19603f3d011682016040523d82523d6000602084013e611a83565b606091505b50509050806118ca576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8161480611b3757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b611b6d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7984848484612a5b565b50505050565b6118ca8383836000611abe565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614611bfb576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c036133fc565b565b600080600054700100000000000000000000000000000000900460ff166002811115611c3357611c33615625565b14611c6a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110611c7f57611c7f61599b565b600091825260208220600590910201805490925063ffffffff90811614611cee57815460028054909163ffffffff16908110611cbd57611cbd61599b565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611d2690700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611d3a9067ffffffffffffffff1642615a49565b611d59611d19846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611d6d91906159f9565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611611dba5780611900565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080611e83836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115611ee2576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000611efd8383615a8f565b9050670de0b6b3a76400006000611f34827f0000000000000000000000000000000000000000000000000000000000000008615aa3565b90506000611f52611f4d670de0b6b3a764000086615aa3565b613955565b90506000611f608484613bb0565b90506000611f6e8383613bff565b90506000611f7b82613c2d565b90506000611f9a82611f95670de0b6b3a76400008f615aa3565b613e15565b90506000611fa88b83613bff565b9050611fb4818d615aa3565b9f9e505050505050505050505050505050565b60028181548110611fd757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614806120d757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b61210d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211b868686868686613e4f565b505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214f5761214f615625565b14612186576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806121958661447e565b935093509350935060006121ab85858585614887565b905060007f00000000000000000000000028bf1582225713139c0e898326db808b6484cfd473ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190615ae0565b9050600189036123365773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8461229a367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615afd565b506115d7565b600289036123625773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848961229a565b6003890361238e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848761229a565b600489036124aa5760006123d46fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614941565b6009546123e191906159f9565b6123ec9060016159f9565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561247f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a39190615afd565b50506115d7565b60058903612543576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122ed565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606125ce611909565b9050909192565b60008160000151826020015183604001518460600151604051602001612614949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612680576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006126ae856149ef565b9194509250905060018160018111156126c9576126c9615625565b14612700576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845161270c83856159f9565b14612743576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161275a5790505093506000835b8651811015612848576000806127cd6040518060400160405280858c600001516127b19190615a49565b8152602001858c602001516127c691906159f9565b90526149ef565b5091509150604051806040016040528083836127e991906159f9565b8152602001848b602001516127fe91906159f9565b8152508885815181106128135761281361599b565b60209081029190910101526128296001856159f9565b935061283581836159f9565b61283f90846159f9565b92505050612787565b50845250919392505050565b60606000806000612864856149ef565b91945092509050600081600181111561287f5761287f615625565b146128b6576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082846159f9565b8551146128f9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190085602001518484614e8d565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff909316928392906129579084906159f9565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b1580156129ec57600080fd5b505af1158015612a00573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054700100000000000000000000000000000000900460ff166002811115612a8757612a87615625565b14612abe576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110612ad357612ad361599b565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514612bba576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000612c7a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612cb55750612cb27f000000000000000000000000000000000000000000000000000000000000000460026159f9565b81145b8015612cbf575084155b15612cf6576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d1c575086155b15612d53576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115612dad576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd87f000000000000000000000000000000000000000000000000000000000000000460016159f9565b8103612dea57612dea86888588614f22565b34612df483611de4565b14612e2b576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e3688611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603612e9e576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016612efe9190615b16565b67ffffffffffffffff16612f198267ffffffffffffffff1690565b67ffffffffffffffff161115612ffb576000612f5660017f0000000000000000000000000000000000000000000000000000000000000004615a49565b8314612f8c5767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612fc1565b612fc17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615b3f565b9050612ff7817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff16615b16565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615613079576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b8152602001908152602001600020600160028054905061330f9190615a49565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b1580156133a757600080fd5b505af11580156133bb573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b60005471010000000000000000000000000000000000900460ff161561344e576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000001166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa158015613502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135269190615b6f565b909250905081613562576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461359557639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401351161362f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b15801561390457600080fd5b505af1158015613918573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136139b457631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613bed57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613c1d5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613c5b57919050565b680755bf798b4a1bf1e58212613c795763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613e46670de0b6b3a764000083613e2d86613955565b613e379190615b93565b613e419190615c4f565b613c2d565b90505b92915050565b60008054700100000000000000000000000000000000900460ff166002811115613e7b57613e7b615625565b14613eb2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110613ec757613ec761599b565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050613f267f000000000000000000000000000000000000000000000000000000000000000860016159f9565b613fc2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614613ffc576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156140f35761404f7f00000000000000000000000000000000000000000000000000000000000000047f0000000000000000000000000000000000000000000000000000000000000008615a49565b6001901b61406e846fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1661408a9190615cb7565b156140c7576140be6140af60016fffffffffffffffffffffffffffffffff8716615ccb565b865463ffffffff166000615172565b600301546140e9565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061411d565b6003850154915061411a6140af6fffffffffffffffffffffffffffffffff86166001615cf4565b90505b600882901b60088a8a60405161413492919061598b565b6040518091039020901b14614175576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141808c615256565b9050600061418f836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f00000000000000000000000028bf1582225713139c0e898326db808b6484cfd473ffffffffffffffffffffffffffffffffffffffff169063e14ced3290614209908f908f908f908f908a90600401615d71565b6020604051808303816000875af1158015614228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424c9190615afd565b6004850154911491506000906002906142f7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614393896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61439d9190615dab565b6143a79190615dce565b60ff1615905081151581036143e8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff161561443f576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061449e5761449e61599b565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000490614575906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145af576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000490614676906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146eb57825463ffffffff166146b57f000000000000000000000000000000000000000000000000000000000000000460016159f9565b83036146bf578391505b600281815481106146d2576146d261599b565b90600052602060002090600502019350809450506145b3565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661475461473f856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561482357600061478c836fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1611156147f75760006147ce6147c660016fffffffffffffffffffffffffffffffff8616615ccb565b896001615172565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506147fd9050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614879565b60006148456147c66fffffffffffffffffffffffffffffffff85166001615cf4565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156148f45760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611900565b82826040516020016149229291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b6000806149ce847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614a32576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614a57576000600160009450945094505050614e86565b60b78111614b6d576000614a6c608083615a49565b905080876000015111614aab576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614b2357507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614b5a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614e86915050565b60bf8111614ccb576000614b8260b783615a49565b905080876000015111614bc1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614c23576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614c6b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614c7581846159f9565b895111614cae576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614cb98360016159f9565b9750955060009450614e869350505050565b60f78111614d30576000614ce060c083615a49565b905080876000015111614d1f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614e86915050565b6000614d3d60f783615a49565b905080876000015111614d7c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614dde576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614e26576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e3081846159f9565b895111614e69576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e748360016159f9565b9750955060019450614e869350505050565b9193909250565b60608167ffffffffffffffff811115614ea857614ea86158cf565b6040519080825280601f01601f191660200182016040528015614ed2576020820181803683370190505b5090508115614f1b576000614ee784866159f9565b90506020820160005b84811015614f08578281015182820152602001614ef0565b84811115614f17576000858301525b5050505b9392505050565b6000614f416fffffffffffffffffffffffffffffffff84166001615cf4565b90506000614f5182866001615172565b9050600086901a838061503d5750614f8a60027f0000000000000000000000000000000000000000000000000000000000000004615cb7565b600483015460029061502e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6150389190615dce565b60ff16145b156150955760ff811660011480615057575060ff81166002145b615090576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b612a00565b60ff811615612a00576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b600080615160837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826151bb576151b66fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000004615285565b6151d6565b6151d6856fffffffffffffffffffffffffffffffff16615411565b9050600284815481106151eb576151eb61599b565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461524e57815460028054909163ffffffff169081106152395761523961599b565b906000526020600020906005020191506151fc565b509392505050565b60008060008060006152678661447e565b935093509350935061527b84848484614887565b9695505050505050565b600081615324846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161533a5763b34b5c226000526004601cfd5b61534383615411565b9050816153e2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613e4957613e466153f88360016159f9565b6fffffffffffffffffffffffffffffffff8316906154b6565b600081196001830116816154a5827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615543847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261557157600080fd5b50813567ffffffffffffffff81111561558957600080fd5b6020830191508360208285010111156155a157600080fd5b9250929050565b600080600083850360a08112156155be57600080fd5b60808112156155cc57600080fd5b50839250608084013567ffffffffffffffff8111156155ea57600080fd5b6155f68682870161555f565b9497909650939450505050565b6000806040838503121561561657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061568f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806000606084860312156156aa57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b818110156156e7576020818501810151868301820152016156cb565b818111156156f9576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613e4660208301846156c1565b60006020828403121561575157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461577a57600080fd5b50565b60006020828403121561578f57600080fd5b8135614f1b81615758565b803580151581146157aa57600080fd5b919050565b600080600080608085870312156157c557600080fd5b8435935060208501359250604085013591506157e36060860161579a565b905092959194509250565b60006020828403121561580057600080fd5b81356fffffffffffffffffffffffffffffffff81168114614f1b57600080fd5b6000806000806000806080878903121561583957600080fd5b863595506158496020880161579a565b9450604087013567ffffffffffffffff8082111561586657600080fd5b6158728a838b0161555f565b9096509450606089013591508082111561588b57600080fd5b5061589889828a0161555f565b979a9699509497509295939492505050565b63ffffffff8416815282602082015260606040820152600061190060608301846156c1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561591057600080fd5b6040516080810181811067ffffffffffffffff8211171561595a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615a0c57615a0c6159ca565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a4257615a426159ca565b5060010190565b600082821015615a5b57615a5b6159ca565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a9e57615a9e615a60565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615adb57615adb6159ca565b500290565b600060208284031215615af257600080fd5b8151614f1b81615758565b600060208284031215615b0f57600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015615b3757615b376159ca565b039392505050565b600067ffffffffffffffff80831681851681830481118215151615615b6657615b666159ca565b02949350505050565b60008060408385031215615b8257600080fd5b505080516020909101519092909150565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd457615bd46159ca565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0f57615c0f6159ca565b60008712925087820587128484161615615c2b57615c2b6159ca565b87850587128184161615615c4157615c416159ca565b505050929093029392505050565b600082615c5e57615c5e615a60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615cb257615cb26159ca565b500590565b600082615cc657615cc6615a60565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015615b3757615b376159ca565b60006fffffffffffffffffffffffffffffffff808316818516808303821115615d1f57615d1f6159ca565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615d85606083018789615d28565b8281036020840152615d98818688615d28565b9150508260408301529695505050505050565b600060ff821660ff841680821015615dc557615dc56159ca565b90039392505050565b600060ff831680615de157615de1615a60565b8060ff8416069150509291505056fea164736f6c634300080f000a"; } From bdce0bfac62e2626503fe802380a9f5b3a193330 Mon Sep 17 00:00:00 2001 From: Inphi Date: Tue, 25 Jun 2024 11:46:00 -0700 Subject: [PATCH 106/141] cannon: Generic FPVM interface (#10993) --- cannon/cmd/run.go | 93 +++++++++++-------- cannon/cmd/witness.go | 6 +- cannon/mipsevm/evm_test.go | 13 +-- cannon/mipsevm/fuzz_evm_test.go | 18 ++-- cannon/mipsevm/iface.go | 39 ++++++++ cannon/mipsevm/instrumented.go | 33 +++++-- cannon/mipsevm/state.go | 22 ++++- cannon/mipsevm/state_test.go | 6 +- cannon/mipsevm/witness.go | 3 +- .../game/fault/trace/cannon/prestate.go | 14 +-- .../game/fault/trace/cannon/prestate_test.go | 3 +- .../game/fault/trace/cannon/provider.go | 6 +- .../game/fault/trace/cannon/provider_test.go | 8 +- 13 files changed, 173 insertions(+), 91 deletions(-) create mode 100644 cannon/mipsevm/iface.go diff --git a/cannon/cmd/run.go b/cannon/cmd/run.go index f4d57a114d5a..4c9e61150d70 100644 --- a/cannon/cmd/run.go +++ b/cannon/cmd/run.go @@ -23,6 +23,13 @@ import ( ) var ( + RunType = &cli.StringFlag{ + Name: "type", + Usage: "VM type to run. Options are 'cannon' (default)", + Value: "cannon", + // TODO(client-pod#903): This should be required once we have additional vm types + Required: false, + } RunInputFlag = &cli.PathFlag{ Name: "input", Usage: "path of input JSON state. Stdin if left empty.", @@ -250,14 +257,20 @@ func Guard(proc *os.ProcessState, fn StepFn) StepFn { var _ mipsevm.PreimageOracle = (*ProcessPreimageOracle)(nil) +type VMType string + +var cannonVMType VMType = "cannon" + func Run(ctx *cli.Context) error { if ctx.Bool(RunPProfCPU.Name) { defer profile.Start(profile.NoShutdownHook, profile.ProfilePath("."), profile.CPUProfile).Stop() } - state, err := jsonutil.LoadJSON[mipsevm.State](ctx.Path(RunInputFlag.Name)) - if err != nil { - return err + var vmType VMType + if vmTypeStr := ctx.String(RunType.Name); vmTypeStr == string(cannonVMType) { + vmType = cannonVMType + } else { + return fmt.Errorf("unknown VM type %q", vmType) } guestLogger := Logger(os.Stderr, log.LevelInfo) @@ -349,53 +362,65 @@ func Run(ctx *cli.Context) error { } } - us := mipsevm.NewInstrumentedState(state, po, outLog, errLog) - debugProgram := ctx.Bool(RunDebugFlag.Name) - if debugProgram { - if metaPath := ctx.Path(RunMetaFlag.Name); metaPath == "" { - return fmt.Errorf("cannot enable debug mode without a metadata file") + var vm mipsevm.FPVM + var debugProgram bool + if vmType == cannonVMType { + cannon, err := mipsevm.NewInstrumentedStateFromFile(ctx.Path(RunInputFlag.Name), po, outLog, errLog) + if err != nil { + return err } - if err := us.InitDebug(meta); err != nil { - return fmt.Errorf("failed to initialize debug mode: %w", err) + debugProgram = ctx.Bool(RunDebugFlag.Name) + if debugProgram { + if metaPath := ctx.Path(RunMetaFlag.Name); metaPath == "" { + return fmt.Errorf("cannot enable debug mode without a metadata file") + } + if err := cannon.InitDebug(meta); err != nil { + return fmt.Errorf("failed to initialize debug mode: %w", err) + } } + vm = cannon + } else { + return fmt.Errorf("unknown VM type %q", vmType) } + proofFmt := ctx.String(RunProofFmtFlag.Name) snapshotFmt := ctx.String(RunSnapshotFmtFlag.Name) - stepFn := us.Step + stepFn := vm.Step if po.cmd != nil { stepFn = Guard(po.cmd.ProcessState, stepFn) } start := time.Now() - startStep := state.Step + + state := vm.GetState() + startStep := state.GetStep() // avoid symbol lookups every instruction by preparing a matcher func sleepCheck := meta.SymbolMatcher("runtime.notesleep") - for !state.Exited { - if state.Step%100 == 0 { // don't do the ctx err check (includes lock) too often + for !state.GetExited() { + step := state.GetStep() + if step%100 == 0 { // don't do the ctx err check (includes lock) too often if err := ctx.Context.Err(); err != nil { return err } } - step := state.Step - if infoAt(state) { delta := time.Since(start) l.Info("processing", "step", step, - "pc", mipsevm.HexU32(state.Cpu.PC), - "insn", mipsevm.HexU32(state.Memory.GetMemory(state.Cpu.PC)), + "pc", mipsevm.HexU32(state.GetPC()), + "insn", mipsevm.HexU32(state.GetMemory().GetMemory(state.GetPC())), "ips", float64(step-startStep)/(float64(delta)/float64(time.Second)), - "pages", state.Memory.PageCount(), - "mem", state.Memory.Usage(), - "name", meta.LookupSymbol(state.Cpu.PC), + "pages", state.GetMemory().PageCount(), + "mem", state.GetMemory().Usage(), + "name", meta.LookupSymbol(state.GetPC()), ) } - if sleepCheck(state.Cpu.PC) { // don't loop forever when we get stuck because of an unexpected bad program + if sleepCheck(state.GetPC()) { // don't loop forever when we get stuck because of an unexpected bad program return fmt.Errorf("got stuck in Go sleep at step %d", step) } @@ -411,22 +436,15 @@ func Run(ctx *cli.Context) error { } if proofAt(state) { - preStateHash, err := state.EncodeWitness().StateHash() - if err != nil { - return fmt.Errorf("failed to hash prestate witness: %w", err) - } + _, preStateHash := state.EncodeWitness() witness, err := stepFn(true) if err != nil { - return fmt.Errorf("failed at proof-gen step %d (PC: %08x): %w", step, state.Cpu.PC, err) - } - postStateHash, err := state.EncodeWitness().StateHash() - if err != nil { - return fmt.Errorf("failed to hash poststate witness: %w", err) + return fmt.Errorf("failed at proof-gen step %d (PC: %08x): %w", step, state.GetPC(), err) } proof := &Proof{ Step: step, Pre: preStateHash, - Post: postStateHash, + Post: witness.StateHash, StateData: witness.State, ProofData: witness.MemProof, } @@ -441,11 +459,11 @@ func Run(ctx *cli.Context) error { } else { _, err = stepFn(false) if err != nil { - return fmt.Errorf("failed at step %d (PC: %08x): %w", step, state.Cpu.PC, err) + return fmt.Errorf("failed at step %d (PC: %08x): %w", step, state.GetPC(), err) } } - lastPreimageKey, lastPreimageValue, lastPreimageOffset := us.LastPreimage() + lastPreimageKey, lastPreimageValue, lastPreimageOffset := vm.LastPreimage() if lastPreimageOffset != ^uint32(0) { if stopAtAnyPreimage { l.Info("Stopping at preimage read") @@ -464,16 +482,16 @@ func Run(ctx *cli.Context) error { } } } - l.Info("Execution stopped", "exited", state.Exited, "code", state.ExitCode) + l.Info("Execution stopped", "exited", state.GetExited(), "code", state.GetExitCode()) if debugProgram { - us.Traceback() + vm.Traceback() } if err := jsonutil.WriteJSON(ctx.Path(RunOutputFlag.Name), state, OutFilePerm); err != nil { return fmt.Errorf("failed to write state output: %w", err) } if debugInfoFile := ctx.Path(RunDebugInfoFlag.Name); debugInfoFile != "" { - if err := jsonutil.WriteJSON(debugInfoFile, us.GetDebugInfo(), OutFilePerm); err != nil { + if err := jsonutil.WriteJSON(debugInfoFile, vm.GetDebugInfo(), OutFilePerm); err != nil { return fmt.Errorf("failed to write benchmark data: %w", err) } } @@ -486,6 +504,7 @@ var RunCommand = &cli.Command{ Description: "Run VM step(s) and generate proof data to replicate onchain. See flags to match when to output a proof, a snapshot, or to stop early.", Action: Run, Flags: []cli.Flag{ + RunType, RunInputFlag, RunOutputFlag, RunProofAtFlag, diff --git a/cannon/cmd/witness.go b/cannon/cmd/witness.go index c2f38daa3621..c869f2b4cf86 100644 --- a/cannon/cmd/witness.go +++ b/cannon/cmd/witness.go @@ -30,11 +30,7 @@ func Witness(ctx *cli.Context) error { if err != nil { return fmt.Errorf("invalid input state (%v): %w", input, err) } - witness := state.EncodeWitness() - h, err := witness.StateHash() - if err != nil { - return fmt.Errorf("failed to compute witness hash: %w", err) - } + witness, h := state.EncodeWitness() if output != "" { if err := os.WriteFile(output, witness, 0755); err != nil { return fmt.Errorf("writing output to %v: %w", output, err) diff --git a/cannon/mipsevm/evm_test.go b/cannon/mipsevm/evm_test.go index 14c53220c432..edc6675f5581 100644 --- a/cannon/mipsevm/evm_test.go +++ b/cannon/mipsevm/evm_test.go @@ -196,7 +196,7 @@ func TestEVM(t *testing.T) { evmPost := evm.Step(t, stepWitness) // verify the post-state matches. // TODO: maybe more readable to decode the evmPost state, and do attribute-wise comparison. - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equalf(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM at step %d", state.Step) } @@ -243,7 +243,7 @@ func TestEVMSingleStep(t *testing.T) { evm := NewMIPSEVM(contracts, addrs) evm.SetTracer(tracer) evmPost := evm.Step(t, stepWitness) - goPost := us.state.EncodeWitness() + goPost, _ := us.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -421,7 +421,7 @@ func TestEVMSysWriteHint(t *testing.T) { evm := NewMIPSEVM(contracts, addrs) evm.SetTracer(tracer) evmPost := evm.Step(t, stepWitness) - goPost := us.state.EncodeWitness() + goPost, _ := us.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -459,8 +459,9 @@ func TestEVMFault(t *testing.T) { require.Panics(t, func() { _, _ = us.Step(true) }) insnProof := initialState.Memory.MerkleProof(0) + encodedWitness, _ := initialState.EncodeWitness() stepWitness := &StepWitness{ - State: initialState.EncodeWitness(), + State: encodedWitness, MemProof: insnProof[:], } input := encodeStepInput(t, stepWitness, LocalContext{}, contracts.MIPS) @@ -509,7 +510,7 @@ func TestHelloEVM(t *testing.T) { evmPost := evm.Step(t, stepWitness) // verify the post-state matches. // TODO: maybe more readable to decode the evmPost state, and do attribute-wise comparison. - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") } @@ -560,7 +561,7 @@ func TestClaimEVM(t *testing.T) { evm.SetTracer(tracer) evmPost := evm.Step(t, stepWitness) - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") } diff --git a/cannon/mipsevm/fuzz_evm_test.go b/cannon/mipsevm/fuzz_evm_test.go index 9b11f9363c93..06b77a10247f 100644 --- a/cannon/mipsevm/fuzz_evm_test.go +++ b/cannon/mipsevm/fuzz_evm_test.go @@ -61,7 +61,7 @@ func FuzzStateSyscallBrk(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -112,7 +112,7 @@ func FuzzStateSyscallClone(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -173,7 +173,7 @@ func FuzzStateSyscallMmap(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -223,7 +223,7 @@ func FuzzStateSyscallExitGroup(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -288,7 +288,7 @@ func FuzzStateSyscallFcntl(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -340,7 +340,7 @@ func FuzzStateHintRead(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -406,7 +406,7 @@ func FuzzStatePreimageRead(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -466,7 +466,7 @@ func FuzzStateHintWrite(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -521,7 +521,7 @@ func FuzzStatePreimageWrite(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) diff --git a/cannon/mipsevm/iface.go b/cannon/mipsevm/iface.go new file mode 100644 index 000000000000..2cc8f939fceb --- /dev/null +++ b/cannon/mipsevm/iface.go @@ -0,0 +1,39 @@ +package mipsevm + +import "github.com/ethereum/go-ethereum/common" + +type FPVMState interface { + GetMemory() *Memory + + // GetPC returns the currently executing program counter + GetPC() uint32 + + // GetStep returns the current VM step + GetStep() uint64 + + // GetExited returns whether the state exited bit is set + GetExited() bool + + // GetExitCode returns the exit code + GetExitCode() uint8 + + // EncodeWitness returns the witness for the current state and the state hash + EncodeWitness() (witness []byte, hash common.Hash) +} + +type FPVM interface { + // GetState returns the current state of the VM. The FPVMState is updated by successive calls to Step + GetState() FPVMState + + // Step executes a single instruction and returns the witness for the step + Step(includeProof bool) (*StepWitness, error) + + // LastPreimage returns the last preimage accessed by the VM + LastPreimage() (preimageKey [32]byte, preimage []byte, preimageOffset uint32) + + // Traceback prints a traceback of the program to the console + Traceback() + + // GetDebugInfo returns debug information about the VM + GetDebugInfo() *DebugInfo +} diff --git a/cannon/mipsevm/instrumented.go b/cannon/mipsevm/instrumented.go index 011c7c4d0630..fad3e541c1a1 100644 --- a/cannon/mipsevm/instrumented.go +++ b/cannon/mipsevm/instrumented.go @@ -3,6 +3,8 @@ package mipsevm import ( "errors" "io" + + "github.com/ethereum-optimism/optimism/op-service/jsonutil" ) type PreimageOracle interface { @@ -48,6 +50,19 @@ func NewInstrumentedState(state *State, po PreimageOracle, stdOut, stdErr io.Wri } } +func NewInstrumentedStateFromFile(stateFile string, po PreimageOracle, stdOut, stdErr io.Writer) (*InstrumentedState, error) { + state, err := jsonutil.LoadJSON[State](stateFile) + if err != nil { + return nil, err + } + return &InstrumentedState{ + state: state, + stdOut: stdOut, + stdErr: stdErr, + preimageOracle: &trackingOracle{po: po}, + }, nil +} + func (m *InstrumentedState) InitDebug(meta *Metadata) error { if meta == nil { return errors.New("metadata is nil") @@ -64,9 +79,11 @@ func (m *InstrumentedState) Step(proof bool) (wit *StepWitness, err error) { if proof { insnProof := m.state.Memory.MerkleProof(m.state.Cpu.PC) + encodedWitness, stateHash := m.state.EncodeWitness() wit = &StepWitness{ - State: m.state.EncodeWitness(), - MemProof: insnProof[:], + State: encodedWitness, + StateHash: stateHash, + MemProof: insnProof[:], } } err = m.mipsStep() @@ -89,11 +106,15 @@ func (m *InstrumentedState) LastPreimage() ([32]byte, []byte, uint32) { return m.lastPreimageKey, m.lastPreimage, m.lastPreimageOffset } -func (d *InstrumentedState) GetDebugInfo() *DebugInfo { +func (m *InstrumentedState) GetState() FPVMState { + return m.state +} + +func (m *InstrumentedState) GetDebugInfo() *DebugInfo { return &DebugInfo{ - Pages: d.state.Memory.PageCount(), - NumPreimageRequests: d.preimageOracle.numPreimageRequests, - TotalPreimageSize: d.preimageOracle.totalPreimageSize, + Pages: m.state.Memory.PageCount(), + NumPreimageRequests: m.preimageOracle.numPreimageRequests, + TotalPreimageSize: m.preimageOracle.totalPreimageSize, } } diff --git a/cannon/mipsevm/state.go b/cannon/mipsevm/state.go index c8a681f23e37..474f80021969 100644 --- a/cannon/mipsevm/state.go +++ b/cannon/mipsevm/state.go @@ -104,13 +104,23 @@ func (s *State) UnmarshalJSON(data []byte) error { return nil } +func (s *State) GetPC() uint32 { return s.Cpu.PC } + +func (s *State) GetExitCode() uint8 { return s.ExitCode } + +func (s *State) GetExited() bool { return s.Exited } + func (s *State) GetStep() uint64 { return s.Step } func (s *State) VMStatus() uint8 { return vmStatus(s.Exited, s.ExitCode) } -func (s *State) EncodeWitness() StateWitness { +func (s *State) GetMemory() *Memory { + return s.Memory +} + +func (s *State) EncodeWitness() ([]byte, common.Hash) { out := make([]byte, 0) memRoot := s.Memory.MerkleRoot() out = append(out, memRoot[:]...) @@ -131,7 +141,7 @@ func (s *State) EncodeWitness() StateWitness { for _, r := range s.Registers { out = binary.BigEndian.AppendUint32(out, r) } - return out + return out, stateHashFromWitness(out) } type StateWitness []byte @@ -147,14 +157,20 @@ func (sw StateWitness) StateHash() (common.Hash, error) { if len(sw) != 226 { return common.Hash{}, fmt.Errorf("Invalid witness length. Got %d, expected 226", len(sw)) } + return stateHashFromWitness(sw), nil +} +func stateHashFromWitness(sw []byte) common.Hash { + if len(sw) != 226 { + panic("Invalid witness length") + } hash := crypto.Keccak256Hash(sw) offset := 32*2 + 4*6 exitCode := sw[offset] exited := sw[offset+1] status := vmStatus(exited == 1, exitCode) hash[0] = status - return hash, nil + return hash } func vmStatus(exited bool, exitCode uint8) uint8 { diff --git a/cannon/mipsevm/state_test.go b/cannon/mipsevm/state_test.go index dfb90674ec78..fe36267926ca 100644 --- a/cannon/mipsevm/state_test.go +++ b/cannon/mipsevm/state_test.go @@ -104,9 +104,7 @@ func TestStateHash(t *testing.T) { ExitCode: c.exitCode, } - actualWitness := state.EncodeWitness() - actualStateHash, err := StateWitness(actualWitness).StateHash() - require.NoError(t, err, "Error hashing witness") + actualWitness, actualStateHash := state.EncodeWitness() require.Equal(t, len(actualWitness), StateWitnessSize, "Incorrect witness size") expectedWitness := make(StateWitness, 226) @@ -118,7 +116,7 @@ func TestStateHash(t *testing.T) { exited = 1 } expectedWitness[exitedOffset+1] = uint8(exited) - require.Equal(t, expectedWitness[:], actualWitness[:], "Incorrect witness") + require.EqualValues(t, expectedWitness[:], actualWitness[:], "Incorrect witness") expectedStateHash := crypto.Keccak256Hash(actualWitness) expectedStateHash[0] = vmStatus(c.exited, c.exitCode) diff --git a/cannon/mipsevm/witness.go b/cannon/mipsevm/witness.go index 58039a86ea32..ef75db69c65c 100644 --- a/cannon/mipsevm/witness.go +++ b/cannon/mipsevm/witness.go @@ -6,7 +6,8 @@ type LocalContext common.Hash type StepWitness struct { // encoded state witness - State []byte + State []byte + StateHash common.Hash MemProof []byte diff --git a/op-challenger/game/fault/trace/cannon/prestate.go b/op-challenger/game/fault/trace/cannon/prestate.go index 67d7c55389c2..3853e619567b 100644 --- a/op-challenger/game/fault/trace/cannon/prestate.go +++ b/op-challenger/game/fault/trace/cannon/prestate.go @@ -6,7 +6,6 @@ import ( "github.com/ethereum/go-ethereum/common" - "github.com/ethereum-optimism/optimism/cannon/mipsevm" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" ) @@ -22,26 +21,23 @@ func NewPrestateProvider(prestate string) *CannonPrestateProvider { return &CannonPrestateProvider{prestate: prestate} } -func (p *CannonPrestateProvider) absolutePreState() ([]byte, error) { +func (p *CannonPrestateProvider) absolutePreState() ([]byte, common.Hash, error) { state, err := parseState(p.prestate) if err != nil { - return nil, fmt.Errorf("cannot load absolute pre-state: %w", err) + return nil, common.Hash{}, fmt.Errorf("cannot load absolute pre-state: %w", err) } - return state.EncodeWitness(), nil + witness, hash := state.EncodeWitness() + return witness, hash, nil } func (p *CannonPrestateProvider) AbsolutePreStateCommitment(_ context.Context) (common.Hash, error) { if p.prestateCommitment != (common.Hash{}) { return p.prestateCommitment, nil } - state, err := p.absolutePreState() + _, hash, err := p.absolutePreState() if err != nil { return common.Hash{}, fmt.Errorf("cannot load absolute pre-state: %w", err) } - hash, err := mipsevm.StateWitness(state).StateHash() - if err != nil { - return common.Hash{}, fmt.Errorf("cannot hash absolute pre-state: %w", err) - } p.prestateCommitment = hash return hash, nil } diff --git a/op-challenger/game/fault/trace/cannon/prestate_test.go b/op-challenger/game/fault/trace/cannon/prestate_test.go index a8616f171180..9dadbbc94ff8 100644 --- a/op-challenger/game/fault/trace/cannon/prestate_test.go +++ b/op-challenger/game/fault/trace/cannon/prestate_test.go @@ -56,8 +56,7 @@ func TestAbsolutePreStateCommitment(t *testing.T) { Step: 0, Registers: [32]uint32{}, } - expected, err := state.EncodeWitness().StateHash() - require.NoError(t, err) + _, expected := state.EncodeWitness() require.Equal(t, expected, actual) }) diff --git a/op-challenger/game/fault/trace/cannon/provider.go b/op-challenger/game/fault/trace/cannon/provider.go index c565b9b39b75..7b55035aa190 100644 --- a/op-challenger/game/fault/trace/cannon/provider.go +++ b/op-challenger/game/fault/trace/cannon/provider.go @@ -132,11 +132,7 @@ func (p *CannonTraceProvider) loadProof(ctx context.Context, i uint64) (*utils.P p.lastStep = state.Step - 1 // Extend the trace out to the full length using a no-op instruction that doesn't change any state // No execution is done, so no proof-data or oracle values are required. - witness := state.EncodeWitness() - witnessHash, err := mipsevm.StateWitness(witness).StateHash() - if err != nil { - return nil, fmt.Errorf("cannot hash witness: %w", err) - } + witness, witnessHash := state.EncodeWitness() proof := &utils.ProofData{ ClaimValue: witnessHash, StateData: hexutil.Bytes(witness), diff --git a/op-challenger/game/fault/trace/cannon/provider_test.go b/op-challenger/game/fault/trace/cannon/provider_test.go index 94277ed88399..87f6105c4279 100644 --- a/op-challenger/game/fault/trace/cannon/provider_test.go +++ b/op-challenger/game/fault/trace/cannon/provider_test.go @@ -57,8 +57,7 @@ func TestGet(t *testing.T) { value, err := provider.Get(context.Background(), PositionFromTraceIndex(provider, big.NewInt(7000))) require.NoError(t, err) require.Contains(t, generator.generated, 7000, "should have tried to generate the proof") - stateHash, err := generator.finalState.EncodeWitness().StateHash() - require.NoError(t, err) + _, stateHash := generator.finalState.EncodeWitness() require.Equal(t, stateHash, value) }) @@ -149,7 +148,7 @@ func TestGetStepData(t *testing.T) { require.NoError(t, err) require.Contains(t, generator.generated, 7000, "should have tried to generate the proof") - witness := generator.finalState.EncodeWitness() + witness, _ := generator.finalState.EncodeWitness() require.EqualValues(t, witness, preimage) require.Equal(t, []byte{}, proof) require.Nil(t, data) @@ -190,7 +189,8 @@ func TestGetStepData(t *testing.T) { require.NoError(t, err) require.Empty(t, generator.generated, "should not have to generate the proof again") - require.EqualValues(t, initGenerator.finalState.EncodeWitness(), preimage) + encodedWitness, _ := initGenerator.finalState.EncodeWitness() + require.EqualValues(t, encodedWitness, preimage) require.Empty(t, proof) require.Nil(t, data) }) From 66e9064fb70f4e66684fbf170cf6bc82ded56d72 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Jun 2024 13:31:57 -0600 Subject: [PATCH 107/141] dependabot(gomod): bump github.com/multiformats/go-multiaddr (#11003) Bumps [github.com/multiformats/go-multiaddr](https://github.com/multiformats/go-multiaddr) from 0.12.4 to 0.13.0. - [Release notes](https://github.com/multiformats/go-multiaddr/releases) - [Commits](https://github.com/multiformats/go-multiaddr/compare/v0.12.4...v0.13.0) --- updated-dependencies: - dependency-name: github.com/multiformats/go-multiaddr dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 7a68121f3a0b..1fc3c9053d41 100644 --- a/go.mod +++ b/go.mod @@ -32,7 +32,7 @@ require ( github.com/mattn/go-isatty v0.0.20 github.com/minio/minio-go/v7 v7.0.72 github.com/multiformats/go-base32 v0.1.0 - github.com/multiformats/go-multiaddr v0.12.4 + github.com/multiformats/go-multiaddr v0.13.0 github.com/multiformats/go-multiaddr-dns v0.3.1 github.com/olekukonko/tablewriter v0.0.5 github.com/onsi/gomega v1.31.1 diff --git a/go.sum b/go.sum index 97e144994bfa..921a29881589 100644 --- a/go.sum +++ b/go.sum @@ -506,8 +506,8 @@ github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9 github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multiaddr v0.12.4 h1:rrKqpY9h+n80EwhhC/kkcunCZZ7URIF8yN1WEUt2Hvc= -github.com/multiformats/go-multiaddr v0.12.4/go.mod h1:sBXrNzucqkFJhvKOiwwLyqamGa/P5EIXNPLovyhQCII= +github.com/multiformats/go-multiaddr v0.13.0 h1:BCBzs61E3AGHcYYTv8dqRH43ZfyrqM8RXVPT8t13tLQ= +github.com/multiformats/go-multiaddr v0.13.0/go.mod h1:sBXrNzucqkFJhvKOiwwLyqamGa/P5EIXNPLovyhQCII= github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= github.com/multiformats/go-multiaddr-dns v0.3.1/go.mod h1:G/245BRQ6FJGmryJCrOuTdB37AMA5AMOVuO6NY3JwTk= github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= From 124b1a9ef48f856237879af8d2bec84435be3a5c Mon Sep 17 00:00:00 2001 From: mbaxter Date: Tue, 25 Jun 2024 16:24:57 -0400 Subject: [PATCH 108/141] Revert "cannon: Generic FPVM interface (#10993)" (#11004) This reverts commit bdce0bfac62e2626503fe802380a9f5b3a193330. --- cannon/cmd/run.go | 93 ++++++++----------- cannon/cmd/witness.go | 6 +- cannon/mipsevm/evm_test.go | 13 ++- cannon/mipsevm/fuzz_evm_test.go | 18 ++-- cannon/mipsevm/iface.go | 39 -------- cannon/mipsevm/instrumented.go | 33 ++----- cannon/mipsevm/state.go | 22 +---- cannon/mipsevm/state_test.go | 6 +- cannon/mipsevm/witness.go | 3 +- .../game/fault/trace/cannon/prestate.go | 14 ++- .../game/fault/trace/cannon/prestate_test.go | 3 +- .../game/fault/trace/cannon/provider.go | 6 +- .../game/fault/trace/cannon/provider_test.go | 8 +- 13 files changed, 91 insertions(+), 173 deletions(-) delete mode 100644 cannon/mipsevm/iface.go diff --git a/cannon/cmd/run.go b/cannon/cmd/run.go index 4c9e61150d70..f4d57a114d5a 100644 --- a/cannon/cmd/run.go +++ b/cannon/cmd/run.go @@ -23,13 +23,6 @@ import ( ) var ( - RunType = &cli.StringFlag{ - Name: "type", - Usage: "VM type to run. Options are 'cannon' (default)", - Value: "cannon", - // TODO(client-pod#903): This should be required once we have additional vm types - Required: false, - } RunInputFlag = &cli.PathFlag{ Name: "input", Usage: "path of input JSON state. Stdin if left empty.", @@ -257,20 +250,14 @@ func Guard(proc *os.ProcessState, fn StepFn) StepFn { var _ mipsevm.PreimageOracle = (*ProcessPreimageOracle)(nil) -type VMType string - -var cannonVMType VMType = "cannon" - func Run(ctx *cli.Context) error { if ctx.Bool(RunPProfCPU.Name) { defer profile.Start(profile.NoShutdownHook, profile.ProfilePath("."), profile.CPUProfile).Stop() } - var vmType VMType - if vmTypeStr := ctx.String(RunType.Name); vmTypeStr == string(cannonVMType) { - vmType = cannonVMType - } else { - return fmt.Errorf("unknown VM type %q", vmType) + state, err := jsonutil.LoadJSON[mipsevm.State](ctx.Path(RunInputFlag.Name)) + if err != nil { + return err } guestLogger := Logger(os.Stderr, log.LevelInfo) @@ -362,65 +349,53 @@ func Run(ctx *cli.Context) error { } } - var vm mipsevm.FPVM - var debugProgram bool - if vmType == cannonVMType { - cannon, err := mipsevm.NewInstrumentedStateFromFile(ctx.Path(RunInputFlag.Name), po, outLog, errLog) - if err != nil { - return err + us := mipsevm.NewInstrumentedState(state, po, outLog, errLog) + debugProgram := ctx.Bool(RunDebugFlag.Name) + if debugProgram { + if metaPath := ctx.Path(RunMetaFlag.Name); metaPath == "" { + return fmt.Errorf("cannot enable debug mode without a metadata file") } - debugProgram = ctx.Bool(RunDebugFlag.Name) - if debugProgram { - if metaPath := ctx.Path(RunMetaFlag.Name); metaPath == "" { - return fmt.Errorf("cannot enable debug mode without a metadata file") - } - if err := cannon.InitDebug(meta); err != nil { - return fmt.Errorf("failed to initialize debug mode: %w", err) - } + if err := us.InitDebug(meta); err != nil { + return fmt.Errorf("failed to initialize debug mode: %w", err) } - vm = cannon - } else { - return fmt.Errorf("unknown VM type %q", vmType) } - proofFmt := ctx.String(RunProofFmtFlag.Name) snapshotFmt := ctx.String(RunSnapshotFmtFlag.Name) - stepFn := vm.Step + stepFn := us.Step if po.cmd != nil { stepFn = Guard(po.cmd.ProcessState, stepFn) } start := time.Now() - - state := vm.GetState() - startStep := state.GetStep() + startStep := state.Step // avoid symbol lookups every instruction by preparing a matcher func sleepCheck := meta.SymbolMatcher("runtime.notesleep") - for !state.GetExited() { - step := state.GetStep() - if step%100 == 0 { // don't do the ctx err check (includes lock) too often + for !state.Exited { + if state.Step%100 == 0 { // don't do the ctx err check (includes lock) too often if err := ctx.Context.Err(); err != nil { return err } } + step := state.Step + if infoAt(state) { delta := time.Since(start) l.Info("processing", "step", step, - "pc", mipsevm.HexU32(state.GetPC()), - "insn", mipsevm.HexU32(state.GetMemory().GetMemory(state.GetPC())), + "pc", mipsevm.HexU32(state.Cpu.PC), + "insn", mipsevm.HexU32(state.Memory.GetMemory(state.Cpu.PC)), "ips", float64(step-startStep)/(float64(delta)/float64(time.Second)), - "pages", state.GetMemory().PageCount(), - "mem", state.GetMemory().Usage(), - "name", meta.LookupSymbol(state.GetPC()), + "pages", state.Memory.PageCount(), + "mem", state.Memory.Usage(), + "name", meta.LookupSymbol(state.Cpu.PC), ) } - if sleepCheck(state.GetPC()) { // don't loop forever when we get stuck because of an unexpected bad program + if sleepCheck(state.Cpu.PC) { // don't loop forever when we get stuck because of an unexpected bad program return fmt.Errorf("got stuck in Go sleep at step %d", step) } @@ -436,15 +411,22 @@ func Run(ctx *cli.Context) error { } if proofAt(state) { - _, preStateHash := state.EncodeWitness() + preStateHash, err := state.EncodeWitness().StateHash() + if err != nil { + return fmt.Errorf("failed to hash prestate witness: %w", err) + } witness, err := stepFn(true) if err != nil { - return fmt.Errorf("failed at proof-gen step %d (PC: %08x): %w", step, state.GetPC(), err) + return fmt.Errorf("failed at proof-gen step %d (PC: %08x): %w", step, state.Cpu.PC, err) + } + postStateHash, err := state.EncodeWitness().StateHash() + if err != nil { + return fmt.Errorf("failed to hash poststate witness: %w", err) } proof := &Proof{ Step: step, Pre: preStateHash, - Post: witness.StateHash, + Post: postStateHash, StateData: witness.State, ProofData: witness.MemProof, } @@ -459,11 +441,11 @@ func Run(ctx *cli.Context) error { } else { _, err = stepFn(false) if err != nil { - return fmt.Errorf("failed at step %d (PC: %08x): %w", step, state.GetPC(), err) + return fmt.Errorf("failed at step %d (PC: %08x): %w", step, state.Cpu.PC, err) } } - lastPreimageKey, lastPreimageValue, lastPreimageOffset := vm.LastPreimage() + lastPreimageKey, lastPreimageValue, lastPreimageOffset := us.LastPreimage() if lastPreimageOffset != ^uint32(0) { if stopAtAnyPreimage { l.Info("Stopping at preimage read") @@ -482,16 +464,16 @@ func Run(ctx *cli.Context) error { } } } - l.Info("Execution stopped", "exited", state.GetExited(), "code", state.GetExitCode()) + l.Info("Execution stopped", "exited", state.Exited, "code", state.ExitCode) if debugProgram { - vm.Traceback() + us.Traceback() } if err := jsonutil.WriteJSON(ctx.Path(RunOutputFlag.Name), state, OutFilePerm); err != nil { return fmt.Errorf("failed to write state output: %w", err) } if debugInfoFile := ctx.Path(RunDebugInfoFlag.Name); debugInfoFile != "" { - if err := jsonutil.WriteJSON(debugInfoFile, vm.GetDebugInfo(), OutFilePerm); err != nil { + if err := jsonutil.WriteJSON(debugInfoFile, us.GetDebugInfo(), OutFilePerm); err != nil { return fmt.Errorf("failed to write benchmark data: %w", err) } } @@ -504,7 +486,6 @@ var RunCommand = &cli.Command{ Description: "Run VM step(s) and generate proof data to replicate onchain. See flags to match when to output a proof, a snapshot, or to stop early.", Action: Run, Flags: []cli.Flag{ - RunType, RunInputFlag, RunOutputFlag, RunProofAtFlag, diff --git a/cannon/cmd/witness.go b/cannon/cmd/witness.go index c869f2b4cf86..c2f38daa3621 100644 --- a/cannon/cmd/witness.go +++ b/cannon/cmd/witness.go @@ -30,7 +30,11 @@ func Witness(ctx *cli.Context) error { if err != nil { return fmt.Errorf("invalid input state (%v): %w", input, err) } - witness, h := state.EncodeWitness() + witness := state.EncodeWitness() + h, err := witness.StateHash() + if err != nil { + return fmt.Errorf("failed to compute witness hash: %w", err) + } if output != "" { if err := os.WriteFile(output, witness, 0755); err != nil { return fmt.Errorf("writing output to %v: %w", output, err) diff --git a/cannon/mipsevm/evm_test.go b/cannon/mipsevm/evm_test.go index edc6675f5581..14c53220c432 100644 --- a/cannon/mipsevm/evm_test.go +++ b/cannon/mipsevm/evm_test.go @@ -196,7 +196,7 @@ func TestEVM(t *testing.T) { evmPost := evm.Step(t, stepWitness) // verify the post-state matches. // TODO: maybe more readable to decode the evmPost state, and do attribute-wise comparison. - goPost, _ := goState.state.EncodeWitness() + goPost := goState.state.EncodeWitness() require.Equalf(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM at step %d", state.Step) } @@ -243,7 +243,7 @@ func TestEVMSingleStep(t *testing.T) { evm := NewMIPSEVM(contracts, addrs) evm.SetTracer(tracer) evmPost := evm.Step(t, stepWitness) - goPost, _ := us.state.EncodeWitness() + goPost := us.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -421,7 +421,7 @@ func TestEVMSysWriteHint(t *testing.T) { evm := NewMIPSEVM(contracts, addrs) evm.SetTracer(tracer) evmPost := evm.Step(t, stepWitness) - goPost, _ := us.state.EncodeWitness() + goPost := us.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -459,9 +459,8 @@ func TestEVMFault(t *testing.T) { require.Panics(t, func() { _, _ = us.Step(true) }) insnProof := initialState.Memory.MerkleProof(0) - encodedWitness, _ := initialState.EncodeWitness() stepWitness := &StepWitness{ - State: encodedWitness, + State: initialState.EncodeWitness(), MemProof: insnProof[:], } input := encodeStepInput(t, stepWitness, LocalContext{}, contracts.MIPS) @@ -510,7 +509,7 @@ func TestHelloEVM(t *testing.T) { evmPost := evm.Step(t, stepWitness) // verify the post-state matches. // TODO: maybe more readable to decode the evmPost state, and do attribute-wise comparison. - goPost, _ := goState.state.EncodeWitness() + goPost := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") } @@ -561,7 +560,7 @@ func TestClaimEVM(t *testing.T) { evm.SetTracer(tracer) evmPost := evm.Step(t, stepWitness) - goPost, _ := goState.state.EncodeWitness() + goPost := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") } diff --git a/cannon/mipsevm/fuzz_evm_test.go b/cannon/mipsevm/fuzz_evm_test.go index 06b77a10247f..9b11f9363c93 100644 --- a/cannon/mipsevm/fuzz_evm_test.go +++ b/cannon/mipsevm/fuzz_evm_test.go @@ -61,7 +61,7 @@ func FuzzStateSyscallBrk(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost, _ := goState.state.EncodeWitness() + goPost := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -112,7 +112,7 @@ func FuzzStateSyscallClone(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost, _ := goState.state.EncodeWitness() + goPost := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -173,7 +173,7 @@ func FuzzStateSyscallMmap(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost, _ := goState.state.EncodeWitness() + goPost := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -223,7 +223,7 @@ func FuzzStateSyscallExitGroup(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost, _ := goState.state.EncodeWitness() + goPost := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -288,7 +288,7 @@ func FuzzStateSyscallFcntl(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost, _ := goState.state.EncodeWitness() + goPost := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -340,7 +340,7 @@ func FuzzStateHintRead(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost, _ := goState.state.EncodeWitness() + goPost := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -406,7 +406,7 @@ func FuzzStatePreimageRead(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost, _ := goState.state.EncodeWitness() + goPost := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -466,7 +466,7 @@ func FuzzStateHintWrite(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost, _ := goState.state.EncodeWitness() + goPost := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -521,7 +521,7 @@ func FuzzStatePreimageWrite(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost, _ := goState.state.EncodeWitness() + goPost := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) diff --git a/cannon/mipsevm/iface.go b/cannon/mipsevm/iface.go deleted file mode 100644 index 2cc8f939fceb..000000000000 --- a/cannon/mipsevm/iface.go +++ /dev/null @@ -1,39 +0,0 @@ -package mipsevm - -import "github.com/ethereum/go-ethereum/common" - -type FPVMState interface { - GetMemory() *Memory - - // GetPC returns the currently executing program counter - GetPC() uint32 - - // GetStep returns the current VM step - GetStep() uint64 - - // GetExited returns whether the state exited bit is set - GetExited() bool - - // GetExitCode returns the exit code - GetExitCode() uint8 - - // EncodeWitness returns the witness for the current state and the state hash - EncodeWitness() (witness []byte, hash common.Hash) -} - -type FPVM interface { - // GetState returns the current state of the VM. The FPVMState is updated by successive calls to Step - GetState() FPVMState - - // Step executes a single instruction and returns the witness for the step - Step(includeProof bool) (*StepWitness, error) - - // LastPreimage returns the last preimage accessed by the VM - LastPreimage() (preimageKey [32]byte, preimage []byte, preimageOffset uint32) - - // Traceback prints a traceback of the program to the console - Traceback() - - // GetDebugInfo returns debug information about the VM - GetDebugInfo() *DebugInfo -} diff --git a/cannon/mipsevm/instrumented.go b/cannon/mipsevm/instrumented.go index fad3e541c1a1..011c7c4d0630 100644 --- a/cannon/mipsevm/instrumented.go +++ b/cannon/mipsevm/instrumented.go @@ -3,8 +3,6 @@ package mipsevm import ( "errors" "io" - - "github.com/ethereum-optimism/optimism/op-service/jsonutil" ) type PreimageOracle interface { @@ -50,19 +48,6 @@ func NewInstrumentedState(state *State, po PreimageOracle, stdOut, stdErr io.Wri } } -func NewInstrumentedStateFromFile(stateFile string, po PreimageOracle, stdOut, stdErr io.Writer) (*InstrumentedState, error) { - state, err := jsonutil.LoadJSON[State](stateFile) - if err != nil { - return nil, err - } - return &InstrumentedState{ - state: state, - stdOut: stdOut, - stdErr: stdErr, - preimageOracle: &trackingOracle{po: po}, - }, nil -} - func (m *InstrumentedState) InitDebug(meta *Metadata) error { if meta == nil { return errors.New("metadata is nil") @@ -79,11 +64,9 @@ func (m *InstrumentedState) Step(proof bool) (wit *StepWitness, err error) { if proof { insnProof := m.state.Memory.MerkleProof(m.state.Cpu.PC) - encodedWitness, stateHash := m.state.EncodeWitness() wit = &StepWitness{ - State: encodedWitness, - StateHash: stateHash, - MemProof: insnProof[:], + State: m.state.EncodeWitness(), + MemProof: insnProof[:], } } err = m.mipsStep() @@ -106,15 +89,11 @@ func (m *InstrumentedState) LastPreimage() ([32]byte, []byte, uint32) { return m.lastPreimageKey, m.lastPreimage, m.lastPreimageOffset } -func (m *InstrumentedState) GetState() FPVMState { - return m.state -} - -func (m *InstrumentedState) GetDebugInfo() *DebugInfo { +func (d *InstrumentedState) GetDebugInfo() *DebugInfo { return &DebugInfo{ - Pages: m.state.Memory.PageCount(), - NumPreimageRequests: m.preimageOracle.numPreimageRequests, - TotalPreimageSize: m.preimageOracle.totalPreimageSize, + Pages: d.state.Memory.PageCount(), + NumPreimageRequests: d.preimageOracle.numPreimageRequests, + TotalPreimageSize: d.preimageOracle.totalPreimageSize, } } diff --git a/cannon/mipsevm/state.go b/cannon/mipsevm/state.go index 474f80021969..c8a681f23e37 100644 --- a/cannon/mipsevm/state.go +++ b/cannon/mipsevm/state.go @@ -104,23 +104,13 @@ func (s *State) UnmarshalJSON(data []byte) error { return nil } -func (s *State) GetPC() uint32 { return s.Cpu.PC } - -func (s *State) GetExitCode() uint8 { return s.ExitCode } - -func (s *State) GetExited() bool { return s.Exited } - func (s *State) GetStep() uint64 { return s.Step } func (s *State) VMStatus() uint8 { return vmStatus(s.Exited, s.ExitCode) } -func (s *State) GetMemory() *Memory { - return s.Memory -} - -func (s *State) EncodeWitness() ([]byte, common.Hash) { +func (s *State) EncodeWitness() StateWitness { out := make([]byte, 0) memRoot := s.Memory.MerkleRoot() out = append(out, memRoot[:]...) @@ -141,7 +131,7 @@ func (s *State) EncodeWitness() ([]byte, common.Hash) { for _, r := range s.Registers { out = binary.BigEndian.AppendUint32(out, r) } - return out, stateHashFromWitness(out) + return out } type StateWitness []byte @@ -157,20 +147,14 @@ func (sw StateWitness) StateHash() (common.Hash, error) { if len(sw) != 226 { return common.Hash{}, fmt.Errorf("Invalid witness length. Got %d, expected 226", len(sw)) } - return stateHashFromWitness(sw), nil -} -func stateHashFromWitness(sw []byte) common.Hash { - if len(sw) != 226 { - panic("Invalid witness length") - } hash := crypto.Keccak256Hash(sw) offset := 32*2 + 4*6 exitCode := sw[offset] exited := sw[offset+1] status := vmStatus(exited == 1, exitCode) hash[0] = status - return hash + return hash, nil } func vmStatus(exited bool, exitCode uint8) uint8 { diff --git a/cannon/mipsevm/state_test.go b/cannon/mipsevm/state_test.go index fe36267926ca..dfb90674ec78 100644 --- a/cannon/mipsevm/state_test.go +++ b/cannon/mipsevm/state_test.go @@ -104,7 +104,9 @@ func TestStateHash(t *testing.T) { ExitCode: c.exitCode, } - actualWitness, actualStateHash := state.EncodeWitness() + actualWitness := state.EncodeWitness() + actualStateHash, err := StateWitness(actualWitness).StateHash() + require.NoError(t, err, "Error hashing witness") require.Equal(t, len(actualWitness), StateWitnessSize, "Incorrect witness size") expectedWitness := make(StateWitness, 226) @@ -116,7 +118,7 @@ func TestStateHash(t *testing.T) { exited = 1 } expectedWitness[exitedOffset+1] = uint8(exited) - require.EqualValues(t, expectedWitness[:], actualWitness[:], "Incorrect witness") + require.Equal(t, expectedWitness[:], actualWitness[:], "Incorrect witness") expectedStateHash := crypto.Keccak256Hash(actualWitness) expectedStateHash[0] = vmStatus(c.exited, c.exitCode) diff --git a/cannon/mipsevm/witness.go b/cannon/mipsevm/witness.go index ef75db69c65c..58039a86ea32 100644 --- a/cannon/mipsevm/witness.go +++ b/cannon/mipsevm/witness.go @@ -6,8 +6,7 @@ type LocalContext common.Hash type StepWitness struct { // encoded state witness - State []byte - StateHash common.Hash + State []byte MemProof []byte diff --git a/op-challenger/game/fault/trace/cannon/prestate.go b/op-challenger/game/fault/trace/cannon/prestate.go index 3853e619567b..67d7c55389c2 100644 --- a/op-challenger/game/fault/trace/cannon/prestate.go +++ b/op-challenger/game/fault/trace/cannon/prestate.go @@ -6,6 +6,7 @@ import ( "github.com/ethereum/go-ethereum/common" + "github.com/ethereum-optimism/optimism/cannon/mipsevm" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" ) @@ -21,23 +22,26 @@ func NewPrestateProvider(prestate string) *CannonPrestateProvider { return &CannonPrestateProvider{prestate: prestate} } -func (p *CannonPrestateProvider) absolutePreState() ([]byte, common.Hash, error) { +func (p *CannonPrestateProvider) absolutePreState() ([]byte, error) { state, err := parseState(p.prestate) if err != nil { - return nil, common.Hash{}, fmt.Errorf("cannot load absolute pre-state: %w", err) + return nil, fmt.Errorf("cannot load absolute pre-state: %w", err) } - witness, hash := state.EncodeWitness() - return witness, hash, nil + return state.EncodeWitness(), nil } func (p *CannonPrestateProvider) AbsolutePreStateCommitment(_ context.Context) (common.Hash, error) { if p.prestateCommitment != (common.Hash{}) { return p.prestateCommitment, nil } - _, hash, err := p.absolutePreState() + state, err := p.absolutePreState() if err != nil { return common.Hash{}, fmt.Errorf("cannot load absolute pre-state: %w", err) } + hash, err := mipsevm.StateWitness(state).StateHash() + if err != nil { + return common.Hash{}, fmt.Errorf("cannot hash absolute pre-state: %w", err) + } p.prestateCommitment = hash return hash, nil } diff --git a/op-challenger/game/fault/trace/cannon/prestate_test.go b/op-challenger/game/fault/trace/cannon/prestate_test.go index 9dadbbc94ff8..a8616f171180 100644 --- a/op-challenger/game/fault/trace/cannon/prestate_test.go +++ b/op-challenger/game/fault/trace/cannon/prestate_test.go @@ -56,7 +56,8 @@ func TestAbsolutePreStateCommitment(t *testing.T) { Step: 0, Registers: [32]uint32{}, } - _, expected := state.EncodeWitness() + expected, err := state.EncodeWitness().StateHash() + require.NoError(t, err) require.Equal(t, expected, actual) }) diff --git a/op-challenger/game/fault/trace/cannon/provider.go b/op-challenger/game/fault/trace/cannon/provider.go index 7b55035aa190..c565b9b39b75 100644 --- a/op-challenger/game/fault/trace/cannon/provider.go +++ b/op-challenger/game/fault/trace/cannon/provider.go @@ -132,7 +132,11 @@ func (p *CannonTraceProvider) loadProof(ctx context.Context, i uint64) (*utils.P p.lastStep = state.Step - 1 // Extend the trace out to the full length using a no-op instruction that doesn't change any state // No execution is done, so no proof-data or oracle values are required. - witness, witnessHash := state.EncodeWitness() + witness := state.EncodeWitness() + witnessHash, err := mipsevm.StateWitness(witness).StateHash() + if err != nil { + return nil, fmt.Errorf("cannot hash witness: %w", err) + } proof := &utils.ProofData{ ClaimValue: witnessHash, StateData: hexutil.Bytes(witness), diff --git a/op-challenger/game/fault/trace/cannon/provider_test.go b/op-challenger/game/fault/trace/cannon/provider_test.go index 87f6105c4279..94277ed88399 100644 --- a/op-challenger/game/fault/trace/cannon/provider_test.go +++ b/op-challenger/game/fault/trace/cannon/provider_test.go @@ -57,7 +57,8 @@ func TestGet(t *testing.T) { value, err := provider.Get(context.Background(), PositionFromTraceIndex(provider, big.NewInt(7000))) require.NoError(t, err) require.Contains(t, generator.generated, 7000, "should have tried to generate the proof") - _, stateHash := generator.finalState.EncodeWitness() + stateHash, err := generator.finalState.EncodeWitness().StateHash() + require.NoError(t, err) require.Equal(t, stateHash, value) }) @@ -148,7 +149,7 @@ func TestGetStepData(t *testing.T) { require.NoError(t, err) require.Contains(t, generator.generated, 7000, "should have tried to generate the proof") - witness, _ := generator.finalState.EncodeWitness() + witness := generator.finalState.EncodeWitness() require.EqualValues(t, witness, preimage) require.Equal(t, []byte{}, proof) require.Nil(t, data) @@ -189,8 +190,7 @@ func TestGetStepData(t *testing.T) { require.NoError(t, err) require.Empty(t, generator.generated, "should not have to generate the proof again") - encodedWitness, _ := initGenerator.finalState.EncodeWitness() - require.EqualValues(t, encodedWitness, preimage) + require.EqualValues(t, initGenerator.finalState.EncodeWitness(), preimage) require.Empty(t, proof) require.Nil(t, data) }) From 1bfd7e9bedcd73d751d18e0db1529703a1deb58d Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Wed, 26 Jun 2024 01:50:46 +0300 Subject: [PATCH 109/141] contracts-bedrock: cleanup interop predeploys (#10995) * contracts-bedrock: cleanup interop predeploys Small refactor to the interop predeploys to reuse existing code. It was determined safe to use the `SafeCall` library, so we opt to use that instead of duplicating code. No tests are added since existing test coverage ensures that these calls happen as expected. A manual mutation test where the value was not passed through was performed and failing tests were observed. The `SafeCall` library was previously pinned to `0.8.15` due to the "call with min gas" semantics, it may be possible that a new compiler version could emit code that doesn't act how `0.8.15` acts, but the whole gas introspection thing is an anti pattern and we have invariant tests that would catch this if we modified the solc version used by `OptimismPortal`. We know to never follow this pattern again, ie `hasMinGas` or `callWithMinGas` should never be used again in the codebase and should be deleted at some point once we get rid of the whole min gas limit semantics. * lint: fix * semver-lock: update --- packages/contracts-bedrock/semver-lock.json | 8 +++--- .../contracts-bedrock/src/L2/CrossL2Inbox.sol | 26 +++---------------- .../src/L2/L2ToL2CrossDomainMessenger.sol | 26 +++---------------- .../src/libraries/SafeCall.sol | 10 ++++++- 4 files changed, 21 insertions(+), 49 deletions(-) diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index 4c0f50858687..c3919e9051d1 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -64,8 +64,8 @@ "sourceCodeHash": "0x3a725791a0f5ed84dc46dcdae26f6170a759b2fe3dc360d704356d088b76cfd6" }, "src/L2/CrossL2Inbox.sol": { - "initCodeHash": "0x46e15ac5de81ea415061d049730da25acf31040d6d5d70fe3a9bf4cac100c282", - "sourceCodeHash": "0xc3d38bfa73fc33369891a2e8c987baf64b1e94c53d6104676fd4c93e1f5c8011" + "initCodeHash": "0x074af4b17cfdd1d1dafaaccb79d68ab4ceef50d35dc205aeeedc265e11ae2a92", + "sourceCodeHash": "0x5b4355b060e8e5ab81047e5f3d093869c2be7bae14a48a0e5ddf6872a219faf2" }, "src/L2/GasPriceOracle.sol": { "initCodeHash": "0xb16f1e370e58c7693fd113a21a1b1e7ccebc03d4f1e5a76786fc27847ef51ead", @@ -100,8 +100,8 @@ "sourceCodeHash": "0x8388b9b8075f31d580fed815b66b45394e40fb1a63cd8cda2272d2c390fc908c" }, "src/L2/L2ToL2CrossDomainMessenger.sol": { - "initCodeHash": "0x975a4b620e71a1cacd5078972c5e042d010b01e52d0ccd17934cbc7c9890f23b", - "sourceCodeHash": "0x249218d69909750f5245a42d247a789f1837c24863bded94dc577fcbec914175" + "initCodeHash": "0x15fbb6175eb98a7d7c6b99862de49e8c3f8ac768c656e82ad7c41c0d1739bd66", + "sourceCodeHash": "0x1f14aafab2cb15970cccedb461b72218fca8afa6ffd0ac696a9e28ff1415a068" }, "src/L2/SequencerFeeVault.sol": { "initCodeHash": "0xb94145f571e92ee615c6fe903b6568e8aac5fe760b6b65148ffc45d2fb0f5433", diff --git a/packages/contracts-bedrock/src/L2/CrossL2Inbox.sol b/packages/contracts-bedrock/src/L2/CrossL2Inbox.sol index 211fe76729c4..476c3e12e4b3 100644 --- a/packages/contracts-bedrock/src/L2/CrossL2Inbox.sol +++ b/packages/contracts-bedrock/src/L2/CrossL2Inbox.sol @@ -5,6 +5,7 @@ import { Predeploys } from "src/libraries/Predeploys.sol"; import { TransientContext, TransientReentrancyAware } from "src/libraries/TransientContext.sol"; import { ISemver } from "src/universal/ISemver.sol"; import { ICrossL2Inbox } from "src/L2/ICrossL2Inbox.sol"; +import { SafeCall } from "src/libraries/SafeCall.sol"; /// @title IDependencySet /// @notice Interface for L1Block with only `isInDependencySet(uint256)` method. @@ -55,8 +56,8 @@ contract CrossL2Inbox is ICrossL2Inbox, ISemver, TransientReentrancyAware { bytes32 internal constant CHAINID_SLOT = 0x6e0446e8b5098b8c8193f964f1b567ec3a2bdaeba33d36acb85c1f1d3f92d313; /// @notice Semantic version. - /// @custom:semver 0.1.0 - string public constant version = "0.1.0"; + /// @custom:semver 1.0.0-beta.1 + string public constant version = "1.0.0-beta.1"; /// @notice Emitted when a cross chain message is being executed. /// @param encodedId Encoded Identifier of the message. @@ -122,7 +123,7 @@ contract CrossL2Inbox is ICrossL2Inbox, ISemver, TransientReentrancyAware { _storeIdentifier(_id); // Call the target account with the message payload. - bool success = _callWithAllGas(_target, _message); + bool success = SafeCall.call(_target, msg.value, _message); // Revert if the target call failed. if (!success) revert TargetCallFailed(); @@ -139,23 +140,4 @@ contract CrossL2Inbox is ICrossL2Inbox, ISemver, TransientReentrancyAware { TransientContext.set(TIMESTAMP_SLOT, _id.timestamp); TransientContext.set(CHAINID_SLOT, _id.chainId); } - - /// @notice Calls the target address with the message payload and all available gas. - /// @param _target Target address to call. - /// @param _message Message payload to call target with. - /// @return _success True if the call was successful, and false otherwise. - function _callWithAllGas(address _target, bytes memory _message) internal returns (bool _success) { - assembly { - _success := - call( - gas(), // gas - _target, // recipient - callvalue(), // ether value - add(_message, 32), // inloc - mload(_message), // inlen - 0, // outloc - 0 // outlen - ) - } - } } diff --git a/packages/contracts-bedrock/src/L2/L2ToL2CrossDomainMessenger.sol b/packages/contracts-bedrock/src/L2/L2ToL2CrossDomainMessenger.sol index fe851c5523c8..35ccf60ac6d3 100644 --- a/packages/contracts-bedrock/src/L2/L2ToL2CrossDomainMessenger.sol +++ b/packages/contracts-bedrock/src/L2/L2ToL2CrossDomainMessenger.sol @@ -6,6 +6,7 @@ import { Predeploys } from "src/libraries/Predeploys.sol"; import { CrossL2Inbox } from "src/L2/CrossL2Inbox.sol"; import { IL2ToL2CrossDomainMessenger } from "src/L2/IL2ToL2CrossDomainMessenger.sol"; import { ISemver } from "src/universal/ISemver.sol"; +import { SafeCall } from "src/libraries/SafeCall.sol"; /// @notice Thrown when a non-written slot in transient storage is attempted to be read from. error NotEntered(); @@ -59,8 +60,8 @@ contract L2ToL2CrossDomainMessenger is IL2ToL2CrossDomainMessenger, ISemver { uint16 public constant messageVersion = uint16(0); /// @notice Semantic version. - /// @custom:semver 0.1.0 - string public constant version = "0.1.0"; + /// @custom:semver 1.0.0-beta.1 + string public constant version = "1.0.0-beta.1"; /// @notice Mapping of message hashes to boolean receipt values. Note that a message will only be present in this /// mapping if it has successfully been relayed on this chain, and can therefore not be relayed again. @@ -175,7 +176,7 @@ contract L2ToL2CrossDomainMessenger is IL2ToL2CrossDomainMessenger, ISemver { _storeMessageMetadata(_source, _sender); - bool success = _callWithAllGas(_target, _message); + bool success = SafeCall.call(_target, msg.value, _message); if (success) { successfulMessages[messageHash] = true; @@ -213,23 +214,4 @@ contract L2ToL2CrossDomainMessenger is IL2ToL2CrossDomainMessenger, ISemver { tstore(CROSS_DOMAIN_MESSAGE_SOURCE_SLOT, _source) } } - - /// @notice Calls the target address with the message payload and all available gas. - /// @param _target Target address to call. - /// @param _message Message payload to call target with. - /// @return _success True if the call was successful, and false otherwise. - function _callWithAllGas(address _target, bytes memory _message) internal returns (bool _success) { - assembly { - _success := - call( - gas(), // gas - _target, // recipient - callvalue(), // ether value - add(_message, 32), // inloc - mload(_message), // inlen - 0, // outloc - 0 // outlen - ) - } - } } diff --git a/packages/contracts-bedrock/src/libraries/SafeCall.sol b/packages/contracts-bedrock/src/libraries/SafeCall.sol index 78603993b8ad..c2c4e635f0fb 100644 --- a/packages/contracts-bedrock/src/libraries/SafeCall.sol +++ b/packages/contracts-bedrock/src/libraries/SafeCall.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.15; +pragma solidity ^0.8.0; /// @title SafeCall /// @notice Perform low level safe calls @@ -59,6 +59,14 @@ library SafeCall { } } + /// @notice Perform a low level call without copying any returndata + /// @param _target Address to call + /// @param _value Amount of value to pass to the call + /// @param _calldata Calldata to pass to the call + function call(address _target, uint256 _value, bytes memory _calldata) internal returns (bool success_) { + success_ = call({ _target: _target, _gas: gasleft(), _value: _value, _calldata: _calldata }); + } + /// @notice Helper function to determine if there is sufficient gas remaining within the context /// to guarantee that the minimum gas requirement for a call will be met as well as /// optionally reserving a specified amount of gas for after the call has concluded. From 036a14a0e8b529211051a46e5ae70261dd238bbe Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Wed, 26 Jun 2024 10:17:16 +1000 Subject: [PATCH 110/141] op-challenger: Remove unused blockNumberFetcher (#11006) --- op-challenger/game/monitor.go | 45 +++++++++++++----------------- op-challenger/game/monitor_test.go | 6 ---- op-challenger/game/service.go | 2 +- 3 files changed, 21 insertions(+), 32 deletions(-) diff --git a/op-challenger/game/monitor.go b/op-challenger/game/monitor.go index fe263a661692..dbdcc26ab81c 100644 --- a/op-challenger/game/monitor.go +++ b/op-challenger/game/monitor.go @@ -19,8 +19,6 @@ import ( "github.com/ethereum/go-ethereum/log" ) -type blockNumberFetcher func(ctx context.Context) (uint64, error) - // gameSource loads information about the games available to play type gameSource interface { GetGamesAtOrAfter(ctx context.Context, blockHash common.Hash, earliestTimestamp uint64) ([]types.GameMetadata, error) @@ -44,18 +42,17 @@ type claimer interface { } type gameMonitor struct { - logger log.Logger - clock RWClock - source gameSource - scheduler gameScheduler - preimages preimageScheduler - gameWindow time.Duration - claimer claimer - fetchBlockNumber blockNumberFetcher - allowedGames []common.Address - l1HeadsSub ethereum.Subscription - l1Source *headSource - runState sync.Mutex + logger log.Logger + clock RWClock + source gameSource + scheduler gameScheduler + preimages preimageScheduler + gameWindow time.Duration + claimer claimer + allowedGames []common.Address + l1HeadsSub ethereum.Subscription + l1Source *headSource + runState sync.Mutex } type MinimalSubscriber interface { @@ -78,21 +75,19 @@ func newGameMonitor( preimages preimageScheduler, gameWindow time.Duration, claimer claimer, - fetchBlockNumber blockNumberFetcher, allowedGames []common.Address, l1Source MinimalSubscriber, ) *gameMonitor { return &gameMonitor{ - logger: logger, - clock: cl, - scheduler: scheduler, - preimages: preimages, - source: source, - gameWindow: gameWindow, - claimer: claimer, - fetchBlockNumber: fetchBlockNumber, - allowedGames: allowedGames, - l1Source: &headSource{inner: l1Source}, + logger: logger, + clock: cl, + scheduler: scheduler, + preimages: preimages, + source: source, + gameWindow: gameWindow, + claimer: claimer, + allowedGames: allowedGames, + l1Source: &headSource{inner: l1Source}, } } diff --git a/op-challenger/game/monitor_test.go b/op-challenger/game/monitor_test.go index 7a3da241aa24..ff2871ed4efb 100644 --- a/op-challenger/game/monitor_test.go +++ b/op-challenger/game/monitor_test.go @@ -155,11 +155,6 @@ func setupMonitorTest( ) (*gameMonitor, *stubGameSource, *stubScheduler, *mockNewHeadSource, *stubPreimageScheduler, *mockScheduler) { logger := testlog.Logger(t, log.LevelDebug) source := &stubGameSource{} - i := uint64(1) - fetchBlockNum := func(ctx context.Context) (uint64, error) { - i++ - return i, nil - } sched := &stubScheduler{} preimages := &stubPreimageScheduler{} mockHeadSource := &mockNewHeadSource{} @@ -172,7 +167,6 @@ func setupMonitorTest( preimages, time.Duration(0), stubClaimer, - fetchBlockNum, allowedGames, mockHeadSource, ) diff --git a/op-challenger/game/service.go b/op-challenger/game/service.go index 65038ec549a2..fea6bc2aaf63 100644 --- a/op-challenger/game/service.go +++ b/op-challenger/game/service.go @@ -251,7 +251,7 @@ func (s *Service) initLargePreimages() error { } func (s *Service) initMonitor(cfg *config.Config) { - s.monitor = newGameMonitor(s.logger, s.l1Clock, s.factoryContract, s.sched, s.preimages, cfg.GameWindow, s.claimer, s.l1Client.BlockNumber, cfg.GameAllowlist, s.pollClient) + s.monitor = newGameMonitor(s.logger, s.l1Clock, s.factoryContract, s.sched, s.preimages, cfg.GameWindow, s.claimer, cfg.GameAllowlist, s.pollClient) } func (s *Service) Start(ctx context.Context) error { From 7f403ea5f316a9085061bc63b6618afcdbca1278 Mon Sep 17 00:00:00 2001 From: protolambda Date: Wed, 26 Jun 2024 13:12:56 -0600 Subject: [PATCH 111/141] op-node: maintain sync-status through events, remove legacy snapshot-log (#11008) * op-node: maintain sync-status through events, remove legacy snapshot-log * op-service: fix typo Co-authored-by: Adrian Sutton * op-node: clarify hidden snapshot log flag * op-node: make CurrentL1 SyncStatus update more frequently --------- Co-authored-by: Adrian Sutton --- op-e2e/actions/l2_batcher_test.go | 11 --- op-e2e/actions/l2_sequencer.go | 27 ++++-- op-e2e/actions/l2_verifier.go | 43 ++++++---- op-e2e/actions/reorg_test.go | 2 +- op-e2e/actions/span_batch_test.go | 4 +- op-e2e/actions/sync_test.go | 3 +- op-e2e/setup.go | 5 +- op-e2e/system_test.go | 3 +- op-node/cmd/main.go | 7 +- op-node/flags/flags.go | 3 +- op-node/node/node.go | 12 +-- op-node/rollup/derive/deriver.go | 13 +++ op-node/rollup/driver/driver.go | 23 +++--- op-node/rollup/driver/l1_state.go | 82 ------------------ op-node/rollup/driver/state.go | 65 ++------------- op-node/rollup/engine/events.go | 2 + op-node/rollup/status/status.go | 133 ++++++++++++++++++++++++++++++ op-node/service.go | 14 ---- op-service/eth/sync_status.go | 11 +-- 19 files changed, 232 insertions(+), 231 deletions(-) delete mode 100644 op-node/rollup/driver/l1_state.go create mode 100644 op-node/rollup/status/status.go diff --git a/op-e2e/actions/l2_batcher_test.go b/op-e2e/actions/l2_batcher_test.go index 2c285c1e28a2..6235c7482326 100644 --- a/op-e2e/actions/l2_batcher_test.go +++ b/op-e2e/actions/l2_batcher_test.go @@ -6,7 +6,6 @@ import ( "math/rand" "testing" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" @@ -17,7 +16,6 @@ import ( batcherFlags "github.com/ethereum-optimism/optimism/op-batcher/flags" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" - "github.com/ethereum-optimism/optimism/op-node/rollup/finality" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/testlog" @@ -242,15 +240,6 @@ func L2Finalization(gt *testing.T, deltaTimeOffset *hexutil.Uint64) { engBlock, err := engCl.L2BlockRefByLabel(t.Ctx(), eth.Finalized) require.NoError(t, err) require.Equal(t, heightToSubmit, engBlock.Number, "engine finalizes what rollup node finalizes") - - // Now try to finalize block 4, but with a bad/malicious alternative hash. - // If we get this false signal, we shouldn't finalize the L2 chain. - altBlock4 := sequencer.SyncStatus().SafeL1 - altBlock4.Hash = common.HexToHash("0xdead") - sequencer.synchronousEvents.Emit(finality.FinalizeL1Event{FinalizedL1: altBlock4}) - sequencer.ActL2PipelineFull(t) - require.Equal(t, uint64(3), sequencer.SyncStatus().FinalizedL1.Number) - require.Equal(t, heightToSubmit, sequencer.SyncStatus().FinalizedL2.Number, "unknown/bad finalized L1 blocks are ignored") } // L2FinalizationWithSparseL1 tests that safe L2 blocks can be finalized even if we do not regularly get a L1 finalization signal diff --git a/op-e2e/actions/l2_sequencer.go b/op-e2e/actions/l2_sequencer.go index dd3a795e96ca..da4749f9d430 100644 --- a/op-e2e/actions/l2_sequencer.go +++ b/op-e2e/actions/l2_sequencer.go @@ -4,16 +4,18 @@ import ( "context" "errors" - "github.com/ethereum-optimism/optimism/op-node/node/safedb" - "github.com/ethereum/go-ethereum/log" "github.com/stretchr/testify/require" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum-optimism/optimism/op-node/metrics" + "github.com/ethereum-optimism/optimism/op-node/node/safedb" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/async" "github.com/ethereum-optimism/optimism/op-node/rollup/conductor" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/driver" + "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" "github.com/ethereum-optimism/optimism/op-service/eth" ) @@ -47,7 +49,7 @@ func NewL2Sequencer(t Testing, log log.Logger, l1 derive.L1Fetcher, blobSrc deri plasmaSrc driver.PlasmaIface, eng L2API, cfg *rollup.Config, seqConfDepth uint64) *L2Sequencer { ver := NewL2Verifier(t, log, l1, blobSrc, plasmaSrc, eng, cfg, &sync.Config{}, safedb.Disabled) attrBuilder := derive.NewFetchingAttributesBuilder(cfg, l1, eng) - seqConfDepthL1 := driver.NewConfDepth(seqConfDepth, ver.l1State.L1Head, l1) + seqConfDepthL1 := driver.NewConfDepth(seqConfDepth, ver.syncStatus.L1Head, l1) l1OriginSelector := &MockL1OriginSelector{ actual: driver.NewL1OriginSelector(log, cfg, seqConfDepthL1), } @@ -103,7 +105,16 @@ func (s *L2Sequencer) ActL2EndBlock(t Testing) { // For advanced tests we can catch those and print a warning instead. require.NoError(t, err) - // TODO: action-test publishing of payload on p2p + // After having built a L2 block, make sure to get an engine update processed. + // This will ensure the sync-status and such reflect the latest changes. + s.synchronousEvents.Emit(engine.TryUpdateEngineEvent{}) + s.synchronousEvents.Emit(engine.ForkchoiceRequestEvent{}) + require.NoError(t, s.synchronousEvents.DrainUntil(func(ev rollup.Event) bool { + x, ok := ev.(engine.ForkchoiceUpdateEvent) + return ok && x.UnsafeL2Head == s.engine.UnsafeL2Head() + }, false)) + require.Equal(t, s.engine.UnsafeL2Head(), s.syncStatus.SyncStatus().UnsafeL2, + "sync status must be accurate after block building") } // ActL2KeepL1Origin makes the sequencer use the current L1 origin, even if the next origin is available. @@ -117,7 +128,7 @@ func (s *L2Sequencer) ActL2KeepL1Origin(t Testing) { // ActBuildToL1Head builds empty blocks until (incl.) the L1 head becomes the L2 origin func (s *L2Sequencer) ActBuildToL1Head(t Testing) { - for s.engine.UnsafeL2Head().L1Origin.Number < s.l1State.L1Head().Number { + for s.engine.UnsafeL2Head().L1Origin.Number < s.syncStatus.L1Head().Number { s.ActL2PipelineFull(t) s.ActL2StartBlock(t) s.ActL2EndBlock(t) @@ -126,7 +137,7 @@ func (s *L2Sequencer) ActBuildToL1Head(t Testing) { // ActBuildToL1HeadUnsafe builds empty blocks until (incl.) the L1 head becomes the L1 origin of the L2 head func (s *L2Sequencer) ActBuildToL1HeadUnsafe(t Testing) { - for s.engine.UnsafeL2Head().L1Origin.Number < s.l1State.L1Head().Number { + for s.engine.UnsafeL2Head().L1Origin.Number < s.syncStatus.L1Head().Number { // Note: the derivation pipeline does not run, we are just sequencing a block on top of the existing L2 chain. s.ActL2StartBlock(t) s.ActL2EndBlock(t) @@ -139,7 +150,7 @@ func (s *L2Sequencer) ActBuildToL1HeadExcl(t Testing) { s.ActL2PipelineFull(t) nextOrigin, err := s.mockL1OriginSelector.FindL1Origin(t.Ctx(), s.engine.UnsafeL2Head()) require.NoError(t, err) - if nextOrigin.Number >= s.l1State.L1Head().Number { + if nextOrigin.Number >= s.syncStatus.L1Head().Number { break } s.ActL2StartBlock(t) @@ -153,7 +164,7 @@ func (s *L2Sequencer) ActBuildToL1HeadExclUnsafe(t Testing) { // Note: the derivation pipeline does not run, we are just sequencing a block on top of the existing L2 chain. nextOrigin, err := s.mockL1OriginSelector.FindL1Origin(t.Ctx(), s.engine.UnsafeL2Head()) require.NoError(t, err) - if nextOrigin.Number >= s.l1State.L1Head().Number { + if nextOrigin.Number >= s.syncStatus.L1Head().Number { break } s.ActL2StartBlock(t) diff --git a/op-e2e/actions/l2_verifier.go b/op-e2e/actions/l2_verifier.go index 95fd95eaf0c0..305c5e84b44a 100644 --- a/op-e2e/actions/l2_verifier.go +++ b/op-e2e/actions/l2_verifier.go @@ -20,6 +20,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup/driver" "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-node/rollup/finality" + "github.com/ethereum-optimism/optimism/op-node/rollup/status" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" "github.com/ethereum-optimism/optimism/op-service/client" "github.com/ethereum-optimism/optimism/op-service/eth" @@ -38,6 +39,8 @@ type L2Verifier struct { L2BlockRefByNumber(ctx context.Context, num uint64) (eth.L2BlockRef, error) } + syncStatus driver.SyncStatusTracker + synchronousEvents *rollup.SynchronousEvents syncDeriver *driver.SyncDeriver @@ -51,8 +54,7 @@ type L2Verifier struct { finalizer driver.Finalizer syncCfg *sync.Config - l1 derive.L1Fetcher - l1State *driver.L1State + l1 derive.L1Fetcher l2PipelineIdle bool l2Building bool @@ -107,6 +109,8 @@ func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc deri pipeline := derive.NewDerivationPipeline(log, cfg, l1, blobsSrc, plasmaSrc, eng, metrics) pipelineDeriver := derive.NewPipelineDeriver(ctx, pipeline, synchronousEvents) + syncStatusTracker := status.NewStatusTracker(log, metrics) + syncDeriver := &driver.SyncDeriver{ Derivation: pipeline, Finalizer: finalizer, @@ -136,7 +140,7 @@ func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc deri syncCfg: syncCfg, syncDeriver: syncDeriver, l1: l1, - l1State: driver.NewL1State(log, metrics), + syncStatus: syncStatusTracker, l2PipelineIdle: true, l2Building: false, rollupCfg: cfg, @@ -145,6 +149,7 @@ func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc deri } *rootDeriver = rollup.SynchronousDerivers{ + syncStatusTracker, syncDeriver, engineResetDeriver, engDeriv, @@ -238,17 +243,7 @@ func (s *L2Verifier) L2BackupUnsafe() eth.L2BlockRef { } func (s *L2Verifier) SyncStatus() *eth.SyncStatus { - return ð.SyncStatus{ - CurrentL1: s.derivation.Origin(), - CurrentL1Finalized: s.finalizer.FinalizedL1(), - HeadL1: s.l1State.L1Head(), - SafeL1: s.l1State.L1Safe(), - FinalizedL1: s.l1State.L1Finalized(), - UnsafeL2: s.L2Unsafe(), - SafeL2: s.L2Safe(), - FinalizedL2: s.L2Finalized(), - PendingSafeL2: s.L2PendingSafe(), - } + return s.syncStatus.SyncStatus() } func (s *L2Verifier) RollupClient() *sources.RollupClient { @@ -279,20 +274,34 @@ func (s *L2Verifier) ActRPCFail(t Testing) { func (s *L2Verifier) ActL1HeadSignal(t Testing) { head, err := s.l1.L1BlockRefByLabel(t.Ctx(), eth.Unsafe) require.NoError(t, err) - s.l1State.HandleNewL1HeadBlock(head) + s.synchronousEvents.Emit(status.L1UnsafeEvent{L1Unsafe: head}) + require.NoError(t, s.synchronousEvents.DrainUntil(func(ev rollup.Event) bool { + x, ok := ev.(status.L1UnsafeEvent) + return ok && x.L1Unsafe == head + }, false)) + require.Equal(t, head, s.syncStatus.SyncStatus().HeadL1) } func (s *L2Verifier) ActL1SafeSignal(t Testing) { safe, err := s.l1.L1BlockRefByLabel(t.Ctx(), eth.Safe) require.NoError(t, err) - s.l1State.HandleNewL1SafeBlock(safe) + s.synchronousEvents.Emit(status.L1SafeEvent{L1Safe: safe}) + require.NoError(t, s.synchronousEvents.DrainUntil(func(ev rollup.Event) bool { + x, ok := ev.(status.L1SafeEvent) + return ok && x.L1Safe == safe + }, false)) + require.Equal(t, safe, s.syncStatus.SyncStatus().SafeL1) } func (s *L2Verifier) ActL1FinalizedSignal(t Testing) { finalized, err := s.l1.L1BlockRefByLabel(t.Ctx(), eth.Finalized) require.NoError(t, err) - s.l1State.HandleNewL1FinalizedBlock(finalized) s.synchronousEvents.Emit(finality.FinalizeL1Event{FinalizedL1: finalized}) + require.NoError(t, s.synchronousEvents.DrainUntil(func(ev rollup.Event) bool { + x, ok := ev.(finality.FinalizeL1Event) + return ok && x.FinalizedL1 == finalized + }, false)) + require.Equal(t, finalized, s.syncStatus.SyncStatus().FinalizedL1) } func (s *L2Verifier) OnEvent(ev rollup.Event) { diff --git a/op-e2e/actions/reorg_test.go b/op-e2e/actions/reorg_test.go index 27cce2aa1086..6f8cef6baa80 100644 --- a/op-e2e/actions/reorg_test.go +++ b/op-e2e/actions/reorg_test.go @@ -825,7 +825,7 @@ func SyncAfterReorg(gt *testing.T, deltaTimeOffset *hexutil.Uint64) { miner.ActL1SetFeeRecipient(common.Address{'A', 0}) miner.ActEmptyBlock(t) sequencer.ActL1HeadSignal(t) - for sequencer.engine.UnsafeL2Head().L1Origin.Number < sequencer.l1State.L1Head().Number { + for sequencer.engine.UnsafeL2Head().L1Origin.Number < sequencer.syncStatus.L1Head().Number { // build L2 blocks until the L1 origin is the current L1 head(A0) sequencer.ActL2PipelineFull(t) sequencer.ActL2StartBlock(t) diff --git a/op-e2e/actions/span_batch_test.go b/op-e2e/actions/span_batch_test.go index 6ccb76a461bd..180c2c1334bf 100644 --- a/op-e2e/actions/span_batch_test.go +++ b/op-e2e/actions/span_batch_test.go @@ -515,7 +515,7 @@ func TestSpanBatchLowThroughputChain(gt *testing.T) { totalTxCount := 0 // Make 600 L2 blocks (L1BlockTime / L2BlockTime * 50) including 1~3 txs for i := 0; i < 50; i++ { - for sequencer.engine.UnsafeL2Head().L1Origin.Number < sequencer.l1State.L1Head().Number { + for sequencer.engine.UnsafeL2Head().L1Origin.Number < sequencer.syncStatus.L1Head().Number { sequencer.ActL2StartBlock(t) // fill the block with random number of L2 txs for j := 0; j < rand.Intn(3); j++ { @@ -654,7 +654,7 @@ func TestBatchEquivalence(gt *testing.T) { sequencer.ActL2PipelineFull(t) totalTxCount := 0 // Build random blocks - for sequencer.engine.UnsafeL2Head().L1Origin.Number < sequencer.l1State.L1Head().Number { + for sequencer.engine.UnsafeL2Head().L1Origin.Number < sequencer.syncStatus.L1Head().Number { sequencer.ActL2StartBlock(t) // fill the block with random number of L2 txs for j := 0; j < rand.Intn(3); j++ { diff --git a/op-e2e/actions/sync_test.go b/op-e2e/actions/sync_test.go index c094351553e8..51038b5f08c9 100644 --- a/op-e2e/actions/sync_test.go +++ b/op-e2e/actions/sync_test.go @@ -140,7 +140,8 @@ func FinalizeWhileSyncing(gt *testing.T, deltaTimeOffset *hexutil.Uint64) { verifier.ActL2PipelineFull(t) // Verify the verifier finalized something new - require.Less(t, verifierStartStatus.FinalizedL2.Number, verifier.SyncStatus().FinalizedL2.Number, "verifier finalized L2 blocks during sync") + result := verifier.SyncStatus() + require.Less(t, verifierStartStatus.FinalizedL2.Number, result.FinalizedL2.Number, "verifier finalized L2 blocks during sync") } // TestUnsafeSync tests that a verifier properly imports unsafe blocks via gossip. diff --git a/op-e2e/setup.go b/op-e2e/setup.go index 2b255879180c..8f3f6fccc759 100644 --- a/op-e2e/setup.go +++ b/op-e2e/setup.go @@ -689,9 +689,6 @@ func (cfg SystemConfig) Start(t *testing.T, _opts ...SystemConfigOption) (*Syste } } - // Don't log state snapshots in test output - snapLog := log.NewLogger(log.DiscardHandler()) - // Rollup nodes // Ensure we are looping through the nodes in alphabetical order @@ -732,7 +729,7 @@ func (cfg SystemConfig) Start(t *testing.T, _opts ...SystemConfigOption) (*Syste l.Warn("closed op-node!") }() } - node, err := rollupNode.New(context.Background(), &c, l, snapLog, "", metrics.NewMetrics("")) + node, err := rollupNode.New(context.Background(), &c, l, "", metrics.NewMetrics("")) if err != nil { return nil, err } diff --git a/op-e2e/system_test.go b/op-e2e/system_test.go index d5775ff50aa2..d4e147c529de 100644 --- a/op-e2e/system_test.go +++ b/op-e2e/system_test.go @@ -765,7 +765,6 @@ func TestSystemP2PAltSync(t *testing.T) { // set up our syncer node, connect it to alice/bob cfg.Loggers["syncer"] = testlog.Logger(t, log.LevelInfo).New("role", "syncer") - snapLog := log.NewLogger(log.DiscardHandler()) // Create a peer, and hook up alice and bob h, err := sys.newMockNetPeer() @@ -803,7 +802,7 @@ func TestSystemP2PAltSync(t *testing.T) { configureL2(syncNodeCfg, syncerL2Engine, cfg.JWTSecret) - syncerNode, err := rollupNode.New(ctx, syncNodeCfg, cfg.Loggers["syncer"], snapLog, "", metrics.NewMetrics("")) + syncerNode, err := rollupNode.New(ctx, syncNodeCfg, cfg.Loggers["syncer"], "", metrics.NewMetrics("")) require.NoError(t, err) err = syncerNode.Start(ctx) require.NoError(t, err) diff --git a/op-node/cmd/main.go b/op-node/cmd/main.go index f0e0122ac95f..adb3d3aeb636 100644 --- a/op-node/cmd/main.go +++ b/op-node/cmd/main.go @@ -85,11 +85,6 @@ func RollupNodeMain(ctx *cli.Context, closeApp context.CancelCauseFunc) (cliapp. } cfg.Cancel = closeApp - snapshotLog, err := opnode.NewSnapshotLogger(ctx) - if err != nil { - return nil, fmt.Errorf("unable to create snapshot root logger: %w", err) - } - // Only pretty-print the banner if it is a terminal log. Other log it as key-value pairs. if logCfg.Format == "terminal" { log.Info("rollup config:\n" + cfg.Rollup.Description(chaincfg.L2ChainIDToNetworkDisplayName)) @@ -97,7 +92,7 @@ func RollupNodeMain(ctx *cli.Context, closeApp context.CancelCauseFunc) (cliapp. cfg.Rollup.LogDescription(log, chaincfg.L2ChainIDToNetworkDisplayName) } - n, err := node.New(ctx.Context, cfg, log, snapshotLog, VersionWithMeta, m) + n, err := node.New(ctx.Context, cfg, log, VersionWithMeta, m) if err != nil { return nil, fmt.Errorf("unable to create the rollup node: %w", err) } diff --git a/op-node/flags/flags.go b/op-node/flags/flags.go index 59a7b0ef2de8..3af45e3ac12c 100644 --- a/op-node/flags/flags.go +++ b/op-node/flags/flags.go @@ -260,9 +260,10 @@ var ( } SnapshotLog = &cli.StringFlag{ Name: "snapshotlog.file", - Usage: "Path to the snapshot log file", + Usage: "Deprecated. This flag is ignored, but here for compatibility.", EnvVars: prefixEnvVars("SNAPSHOT_LOG"), Category: OperationsCategory, + Hidden: true, // non-critical function, removed, flag is no-op to avoid breaking setups. } HeartbeatEnabledFlag = &cli.BoolFlag{ Name: "heartbeat.enabled", diff --git a/op-node/node/node.go b/op-node/node/node.go index fb5f981d8f14..f074e6ef8d39 100644 --- a/op-node/node/node.go +++ b/op-node/node/node.go @@ -89,7 +89,7 @@ var _ p2p.GossipIn = (*OpNode)(nil) // New creates a new OpNode instance. // The provided ctx argument is for the span of initialization only; // the node will immediately Stop(ctx) before finishing initialization if the context is canceled during initialization. -func New(ctx context.Context, cfg *Config, log log.Logger, snapshotLog log.Logger, appVersion string, m *metrics.Metrics) (*OpNode, error) { +func New(ctx context.Context, cfg *Config, log log.Logger, appVersion string, m *metrics.Metrics) (*OpNode, error) { if err := cfg.Check(); err != nil { return nil, err } @@ -104,7 +104,7 @@ func New(ctx context.Context, cfg *Config, log log.Logger, snapshotLog log.Logge // not a context leak, gossipsub is closed with a context. n.resourcesCtx, n.resourcesClose = context.WithCancel(context.Background()) - err := n.init(ctx, cfg, snapshotLog) + err := n.init(ctx, cfg) if err != nil { log.Error("Error initializing the rollup node", "err", err) // ensure we always close the node resources if we fail to initialize the node. @@ -116,7 +116,7 @@ func New(ctx context.Context, cfg *Config, log log.Logger, snapshotLog log.Logge return n, nil } -func (n *OpNode) init(ctx context.Context, cfg *Config, snapshotLog log.Logger) error { +func (n *OpNode) init(ctx context.Context, cfg *Config) error { n.log.Info("Initializing rollup node", "version", n.appVersion) if err := n.initTracer(ctx, cfg); err != nil { return fmt.Errorf("failed to init the trace: %w", err) @@ -127,7 +127,7 @@ func (n *OpNode) init(ctx context.Context, cfg *Config, snapshotLog log.Logger) if err := n.initL1BeaconAPI(ctx, cfg); err != nil { return err } - if err := n.initL2(ctx, cfg, snapshotLog); err != nil { + if err := n.initL2(ctx, cfg); err != nil { return fmt.Errorf("failed to init L2: %w", err) } if err := n.initRuntimeConfig(ctx, cfg); err != nil { // depends on L2, to signal initial runtime values to @@ -363,7 +363,7 @@ func (n *OpNode) initL1BeaconAPI(ctx context.Context, cfg *Config) error { } } -func (n *OpNode) initL2(ctx context.Context, cfg *Config, snapshotLog log.Logger) error { +func (n *OpNode) initL2(ctx context.Context, cfg *Config) error { rpcClient, rpcCfg, err := cfg.L2.Setup(ctx, n.log, &cfg.Rollup) if err != nil { return fmt.Errorf("failed to setup L2 execution-engine RPC client: %w", err) @@ -401,7 +401,7 @@ func (n *OpNode) initL2(ctx context.Context, cfg *Config, snapshotLog log.Logger } else { n.safeDB = safedb.Disabled } - n.l2Driver = driver.NewDriver(&cfg.Driver, &cfg.Rollup, n.l2Source, n.l1Source, n.beacon, n, n, n.log, snapshotLog, n.metrics, cfg.ConfigPersistence, n.safeDB, &cfg.Sync, sequencerConductor, plasmaDA) + n.l2Driver = driver.NewDriver(&cfg.Driver, &cfg.Rollup, n.l2Source, n.l1Source, n.beacon, n, n, n.log, n.metrics, cfg.ConfigPersistence, n.safeDB, &cfg.Sync, sequencerConductor, plasmaDA) return nil } diff --git a/op-node/rollup/derive/deriver.go b/op-node/rollup/derive/deriver.go index da3a71577725..e73023169802 100644 --- a/op-node/rollup/derive/deriver.go +++ b/op-node/rollup/derive/deriver.go @@ -17,6 +17,14 @@ func (d DeriverIdleEvent) String() string { return "derivation-idle" } +type DeriverL1StatusEvent struct { + Origin eth.L1BlockRef +} + +func (d DeriverL1StatusEvent) String() string { + return "deriver-l1-status" +} + type DeriverMoreEvent struct{} func (d DeriverMoreEvent) String() string { @@ -83,7 +91,12 @@ func (d *PipelineDeriver) OnEvent(ev rollup.Event) { return } d.pipeline.log.Trace("Derivation pipeline step", "onto_origin", d.pipeline.Origin()) + preOrigin := d.pipeline.Origin() attrib, err := d.pipeline.Step(d.ctx, x.PendingSafe) + postOrigin := d.pipeline.Origin() + if preOrigin != postOrigin { + d.emitter.Emit(DeriverL1StatusEvent{Origin: postOrigin}) + } if err == io.EOF { d.pipeline.log.Debug("Derivation process went idle", "progress", d.pipeline.Origin(), "err", err) d.emitter.Emit(DeriverIdleEvent{Origin: d.pipeline.Origin()}) diff --git a/op-node/rollup/driver/driver.go b/op-node/rollup/driver/driver.go index d65f996c4e5b..4d0b47c0e78c 100644 --- a/op-node/rollup/driver/driver.go +++ b/op-node/rollup/driver/driver.go @@ -15,6 +15,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-node/rollup/finality" + "github.com/ethereum-optimism/optimism/op-node/rollup/status" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" plasma "github.com/ethereum-optimism/optimism/op-plasma" "github.com/ethereum-optimism/optimism/op-service/eth" @@ -104,14 +105,10 @@ type PlasmaIface interface { derive.PlasmaInputFetcher } -type L1StateIface interface { - HandleNewL1HeadBlock(head eth.L1BlockRef) - HandleNewL1SafeBlock(safe eth.L1BlockRef) - HandleNewL1FinalizedBlock(finalized eth.L1BlockRef) - +type SyncStatusTracker interface { + rollup.Deriver + SyncStatus() *eth.SyncStatus L1Head() eth.L1BlockRef - L1Safe() eth.L1BlockRef - L1Finalized() eth.L1BlockRef } type SequencerIface interface { @@ -162,7 +159,6 @@ func NewDriver( altSync AltSync, network Network, log log.Logger, - snapshotLog log.Logger, metrics Metrics, sequencerStateListener SequencerStateListener, safeHeadListener rollup.SafeHeadListener, @@ -174,11 +170,12 @@ func NewDriver( rootDeriver := &rollup.SynchronousDerivers{} synchronousEvents := rollup.NewSynchronousEvents(log, driverCtx, rootDeriver) + statusTracker := status.NewStatusTracker(log, metrics) + l1 = NewMeteredL1Fetcher(l1, metrics) - l1State := NewL1State(log, metrics) - sequencerConfDepth := NewConfDepth(driverCfg.SequencerConfDepth, l1State.L1Head, l1) + sequencerConfDepth := NewConfDepth(driverCfg.SequencerConfDepth, statusTracker.L1Head, l1) findL1Origin := NewL1OriginSelector(log, cfg, sequencerConfDepth) - verifConfDepth := NewConfDepth(driverCfg.VerifierConfDepth, l1State.L1Head, l1) + verifConfDepth := NewConfDepth(driverCfg.VerifierConfDepth, statusTracker.L1Head, l1) ec := engine.NewEngineController(l2, log, metrics, cfg, syncCfg.SyncMode, synchronousEvents) engineResetDeriver := engine.NewEngineResetDeriver(driverCtx, log, cfg, l1, l2, syncCfg, synchronousEvents) clSync := clsync.NewCLSync(log, cfg, metrics, synchronousEvents) @@ -217,7 +214,7 @@ func NewDriver( schedDeriv := NewStepSchedulingDeriver(log, synchronousEvents) driver := &Driver{ - l1State: l1State, + statusTracker: statusTracker, SyncDeriver: syncDeriver, sched: schedDeriv, synchronousEvents: synchronousEvents, @@ -231,7 +228,6 @@ func NewDriver( driverCtx: driverCtx, driverCancel: driverCancel, log: log, - snapshotLog: snapshotLog, sequencer: sequencer, network: network, metrics: metrics, @@ -254,6 +250,7 @@ func NewDriver( pipelineDeriver, attributesHandler, finalizer, + statusTracker, } return driver diff --git a/op-node/rollup/driver/l1_state.go b/op-node/rollup/driver/l1_state.go deleted file mode 100644 index aa8a85abd143..000000000000 --- a/op-node/rollup/driver/l1_state.go +++ /dev/null @@ -1,82 +0,0 @@ -package driver - -import ( - "github.com/ethereum/go-ethereum/log" - - "github.com/ethereum-optimism/optimism/op-service/eth" -) - -type L1Metrics interface { - RecordL1ReorgDepth(d uint64) - RecordL1Ref(name string, ref eth.L1BlockRef) -} - -// L1State tracks L1 head, safe and finalized blocks. It is not safe to write and read concurrently. -type L1State struct { - log log.Logger - metrics L1Metrics - - // Latest recorded head, safe block and finalized block of the L1 Chain, independent of derivation work - l1Head eth.L1BlockRef - l1Safe eth.L1BlockRef - l1Finalized eth.L1BlockRef -} - -func NewL1State(log log.Logger, metrics L1Metrics) *L1State { - return &L1State{ - log: log, - metrics: metrics, - } -} - -func (s *L1State) HandleNewL1HeadBlock(head eth.L1BlockRef) { - // We don't need to do anything if the head hasn't changed. - if s.l1Head == (eth.L1BlockRef{}) { - s.log.Info("Received first L1 head signal", "l1_head", head) - } else if s.l1Head.Hash == head.Hash { - s.log.Trace("Received L1 head signal that is the same as the current head", "l1_head", head) - } else if s.l1Head.Hash == head.ParentHash { - // We got a new L1 block whose parent hash is the same as the current L1 head. Means we're - // dealing with a linear extension (new block is the immediate child of the old one). - s.log.Debug("L1 head moved forward", "l1_head", head) - } else { - if s.l1Head.Number >= head.Number { - s.metrics.RecordL1ReorgDepth(s.l1Head.Number - head.Number) - } - // New L1 block is not the same as the current head or a single step linear extension. - // This could either be a long L1 extension, or a reorg, or we simply missed a head update. - s.log.Warn("L1 head signal indicates a possible L1 re-org", "old_l1_head", s.l1Head, "new_l1_head_parent", head.ParentHash, "new_l1_head", head) - } - s.metrics.RecordL1Ref("l1_head", head) - s.l1Head = head -} - -func (s *L1State) HandleNewL1SafeBlock(safe eth.L1BlockRef) { - s.log.Info("New L1 safe block", "l1_safe", safe) - s.metrics.RecordL1Ref("l1_safe", safe) - s.l1Safe = safe -} - -func (s *L1State) HandleNewL1FinalizedBlock(finalized eth.L1BlockRef) { - s.log.Info("New L1 finalized block", "l1_finalized", finalized) - s.metrics.RecordL1Ref("l1_finalized", finalized) - s.l1Finalized = finalized -} - -// L1Head returns either the stored L1 head or an empty block reference -// if the L1 Head has not been initialized yet. -func (s *L1State) L1Head() eth.L1BlockRef { - return s.l1Head -} - -// L1Safe returns either the stored L1 safe block or an empty block reference -// if the L1 safe block has not been initialized yet. -func (s *L1State) L1Safe() eth.L1BlockRef { - return s.l1Safe -} - -// L1Finalized returns either the stored L1 finalized block or an empty block reference -// if the L1 finalized block has not been initialized yet. -func (s *L1State) L1Finalized() eth.L1BlockRef { - return s.l1Finalized -} diff --git a/op-node/rollup/driver/state.go b/op-node/rollup/driver/state.go index 73ab3a0923bd..41ab9f9d828e 100644 --- a/op-node/rollup/driver/state.go +++ b/op-node/rollup/driver/state.go @@ -3,7 +3,6 @@ package driver import ( "bytes" "context" - "encoding/json" "errors" "fmt" gosync "sync" @@ -19,6 +18,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-node/rollup/finality" + "github.com/ethereum-optimism/optimism/op-node/rollup/status" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" "github.com/ethereum-optimism/optimism/op-service/eth" ) @@ -35,7 +35,7 @@ type SyncStatus = eth.SyncStatus const sealingDuration = time.Millisecond * 50 type Driver struct { - l1State L1StateIface + statusTracker SyncStatusTracker *SyncDeriver @@ -95,9 +95,8 @@ type Driver struct { sequencer SequencerIface network Network // may be nil, network for is optional - metrics Metrics - log log.Logger - snapshotLog log.Logger + metrics Metrics + log log.Logger wg gosync.WaitGroup @@ -233,7 +232,7 @@ func (s *Driver) eventLoop() { // This may adjust at any time based on fork-choice changes or previous errors. // And avoid sequencing if the derivation pipeline indicates the engine is not ready. if s.driverConfig.SequencerEnabled && !s.driverConfig.SequencerStopped && - s.l1State.L1Head() != (eth.L1BlockRef{}) && s.Derivation.DerivationReady() { + s.statusTracker.L1Head() != (eth.L1BlockRef{}) && s.Derivation.DerivationReady() { if s.driverConfig.SequencerMaxSafeLag > 0 && s.Engine.SafeL2Head().Number+s.driverConfig.SequencerMaxSafeLag <= s.Engine.UnsafeL2Head().Number { // If the safe head has fallen behind by a significant number of blocks, delay creating new blocks // until the safe lag is below SequencerMaxSafeLag. @@ -284,7 +283,6 @@ func (s *Driver) eventLoop() { s.log.Warn("failed to check for unsafe L2 blocks to sync", "err", err) } case envelope := <-s.unsafeL2Payloads: - s.snapshot("New unsafe payload") // If we are doing CL sync or done with engine syncing, fallback to the unsafe payload queue & CL P2P sync. if s.SyncCfg.SyncMode == sync.CLSync || !s.Engine.IsEngineSyncing() { s.log.Info("Optimistically queueing unsafe L2 execution payload", "id", envelope.ExecutionPayload.ID()) @@ -306,13 +304,12 @@ func (s *Driver) eventLoop() { } } case newL1Head := <-s.l1HeadSig: - s.l1State.HandleNewL1HeadBlock(newL1Head) + s.Emitter.Emit(status.L1UnsafeEvent{L1Unsafe: newL1Head}) reqStep() // a new L1 head may mean we have the data to not get an EOF again. case newL1Safe := <-s.l1SafeSig: - s.l1State.HandleNewL1SafeBlock(newL1Safe) + s.Emitter.Emit(status.L1SafeEvent{L1Safe: newL1Safe}) // no step, justified L1 information does not do anything for L2 derivation or status case newL1Finalized := <-s.l1FinalizedSig: - s.l1State.HandleNewL1FinalizedBlock(newL1Finalized) s.Emit(finality.FinalizeL1Event{FinalizedL1: newL1Finalized}) reqStep() // we may be able to mark more L2 data as finalized now case <-s.sched.NextDelayedStep(): @@ -640,34 +637,9 @@ func (s *Driver) OverrideLeader(ctx context.Context) error { return s.sequencerConductor.OverrideLeader(ctx) } -// syncStatus returns the current sync status, and should only be called synchronously with -// the driver event loop to avoid retrieval of an inconsistent status. -func (s *Driver) syncStatus() *eth.SyncStatus { - return ð.SyncStatus{ - CurrentL1: s.Derivation.Origin(), - CurrentL1Finalized: s.Finalizer.FinalizedL1(), - HeadL1: s.l1State.L1Head(), - SafeL1: s.l1State.L1Safe(), - FinalizedL1: s.l1State.L1Finalized(), - UnsafeL2: s.Engine.UnsafeL2Head(), - SafeL2: s.Engine.SafeL2Head(), - FinalizedL2: s.Engine.Finalized(), - PendingSafeL2: s.Engine.PendingSafeL2Head(), - } -} - // SyncStatus blocks the driver event loop and captures the syncing status. -// If the event loop is too busy and the context expires, a context error is returned. func (s *Driver) SyncStatus(ctx context.Context) (*eth.SyncStatus, error) { - wait := make(chan struct{}) - select { - case s.stateReq <- wait: - resp := s.syncStatus() - <-wait - return resp, nil - case <-ctx.Done(): - return nil, ctx.Err() - } + return s.statusTracker.SyncStatus(), nil } // BlockRefWithStatus blocks the driver event loop and captures the syncing status, @@ -677,7 +649,7 @@ func (s *Driver) BlockRefWithStatus(ctx context.Context, num uint64) (eth.L2Bloc wait := make(chan struct{}) select { case s.stateReq <- wait: - resp := s.syncStatus() + resp := s.statusTracker.SyncStatus() ref, err := s.L2.L2BlockRefByNumber(ctx, num) <-wait return ref, resp, err @@ -686,25 +658,6 @@ func (s *Driver) BlockRefWithStatus(ctx context.Context, num uint64) (eth.L2Bloc } } -// deferJSONString helps avoid a JSON-encoding performance hit if the snapshot logger does not run -type deferJSONString struct { - x any -} - -func (v deferJSONString) String() string { - out, _ := json.Marshal(v.x) - return string(out) -} - -func (s *Driver) snapshot(event string) { - s.snapshotLog.Info("Rollup State Snapshot", - "event", event, - "l1Head", deferJSONString{s.l1State.L1Head()}, - "l2Head", deferJSONString{s.Engine.UnsafeL2Head()}, - "l2Safe", deferJSONString{s.Engine.SafeL2Head()}, - "l2FinalizedHead", deferJSONString{s.Engine.Finalized()}) -} - type hashAndError struct { hash common.Hash err error diff --git a/op-node/rollup/engine/events.go b/op-node/rollup/engine/events.go index 4c2320310a86..abbe06402d84 100644 --- a/op-node/rollup/engine/events.go +++ b/op-node/rollup/engine/events.go @@ -265,6 +265,8 @@ func (d *EngDeriver) OnEvent(ev rollup.Event) { return } d.ec.SetFinalizedHead(x.Ref) + // Try to apply the forkchoice changes + d.emitter.Emit(TryUpdateEngineEvent{}) } } diff --git a/op-node/rollup/status/status.go b/op-node/rollup/status/status.go new file mode 100644 index 000000000000..7a747463a8d1 --- /dev/null +++ b/op-node/rollup/status/status.go @@ -0,0 +1,133 @@ +package status + +import ( + "sync" + "sync/atomic" + + "github.com/ethereum/go-ethereum/log" + + "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-node/rollup/engine" + "github.com/ethereum-optimism/optimism/op-node/rollup/finality" + "github.com/ethereum-optimism/optimism/op-service/eth" +) + +type L1UnsafeEvent struct { + L1Unsafe eth.L1BlockRef +} + +func (ev L1UnsafeEvent) String() string { + return "l1-unsafe" +} + +type L1SafeEvent struct { + L1Safe eth.L1BlockRef +} + +func (ev L1SafeEvent) String() string { + return "l1-safe" +} + +type Metrics interface { + RecordL1ReorgDepth(d uint64) + RecordL1Ref(name string, ref eth.L1BlockRef) +} + +type StatusTracker struct { + data eth.SyncStatus + + published atomic.Pointer[eth.SyncStatus] + + log log.Logger + + metrics Metrics + + mu sync.RWMutex +} + +func NewStatusTracker(log log.Logger, metrics Metrics) *StatusTracker { + st := &StatusTracker{ + log: log, + metrics: metrics, + } + st.data = eth.SyncStatus{} + st.published.Store(ð.SyncStatus{}) + return st +} + +func (st *StatusTracker) OnEvent(ev rollup.Event) { + st.mu.Lock() + defer st.mu.Unlock() + + switch x := ev.(type) { + case engine.ForkchoiceUpdateEvent: + st.data.UnsafeL2 = x.UnsafeL2Head + st.data.SafeL2 = x.SafeL2Head + st.data.FinalizedL2 = x.FinalizedL2Head + case engine.PendingSafeUpdateEvent: + st.data.UnsafeL2 = x.Unsafe + st.data.PendingSafeL2 = x.PendingSafe + case derive.DeriverL1StatusEvent: + st.data.CurrentL1 = x.Origin + case L1UnsafeEvent: + st.metrics.RecordL1Ref("l1_head", x.L1Unsafe) + // We don't need to do anything if the head hasn't changed. + if st.data.HeadL1 == (eth.L1BlockRef{}) { + st.log.Info("Received first L1 head signal", "l1_head", x.L1Unsafe) + } else if st.data.HeadL1.Hash == x.L1Unsafe.Hash { + st.log.Trace("Received L1 head signal that is the same as the current head", "l1_head", x.L1Unsafe) + } else if st.data.HeadL1.Hash == x.L1Unsafe.ParentHash { + // We got a new L1 block whose parent hash is the same as the current L1 head. Means we're + // dealing with a linear extension (new block is the immediate child of the old one). + st.log.Debug("L1 head moved forward", "l1_head", x.L1Unsafe) + } else { + if st.data.HeadL1.Number >= x.L1Unsafe.Number { + st.metrics.RecordL1ReorgDepth(st.data.HeadL1.Number - x.L1Unsafe.Number) + } + // New L1 block is not the same as the current head or a single step linear extension. + // This could either be a long L1 extension, or a reorg, or we simply missed a head update. + st.log.Warn("L1 head signal indicates a possible L1 re-org", + "old_l1_head", st.data.HeadL1, "new_l1_head_parent", x.L1Unsafe.ParentHash, "new_l1_head", x.L1Unsafe) + } + st.data.HeadL1 = x.L1Unsafe + case L1SafeEvent: + st.log.Info("New L1 safe block", "l1_safe", x.L1Safe) + st.metrics.RecordL1Ref("l1_safe", x.L1Safe) + st.data.SafeL1 = x.L1Safe + case finality.FinalizeL1Event: + st.log.Info("New L1 finalized block", "l1_finalized", x.FinalizedL1) + st.metrics.RecordL1Ref("l1_finalized", x.FinalizedL1) + st.data.FinalizedL1 = x.FinalizedL1 + st.data.CurrentL1Finalized = x.FinalizedL1 + case rollup.ResetEvent: + st.data.UnsafeL2 = eth.L2BlockRef{} + st.data.SafeL2 = eth.L2BlockRef{} + st.data.CurrentL1 = eth.L1BlockRef{} + case engine.EngineResetConfirmedEvent: + st.data.UnsafeL2 = x.Unsafe + st.data.SafeL2 = x.Safe + st.data.FinalizedL2 = x.Finalized + default: // other events do not affect the sync status + return + } + + // If anything changes, then copy the state to the published SyncStatus + // @dev: If this becomes a performance bottleneck during sync (because mem copies onto heap, and 1KB comparisons), + // we can rate-limit updates of the published data. + published := *st.published.Load() + if st.data != published { + published = st.data + st.published.Store(&published) + } +} + +// SyncStatus is thread safe, and reads the latest view of L1 and L2 block labels +func (st *StatusTracker) SyncStatus() *eth.SyncStatus { + return st.published.Load() +} + +// L1Head is a helper function; the L1 head is closely monitored for confirmation-distance logic. +func (st *StatusTracker) L1Head() eth.L1BlockRef { + return st.SyncStatus().HeadL1 +} diff --git a/op-node/service.go b/op-node/service.go index 2f0d8d04780e..3d68c85bd235 100644 --- a/op-node/service.go +++ b/op-node/service.go @@ -259,20 +259,6 @@ func applyOverrides(ctx *cli.Context, rollupConfig *rollup.Config) { } } -func NewSnapshotLogger(ctx *cli.Context) (log.Logger, error) { - snapshotFile := ctx.String(flags.SnapshotLog.Name) - if snapshotFile == "" { - return log.NewLogger(log.DiscardHandler()), nil - } - - sf, err := os.OpenFile(snapshotFile, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644) - if err != nil { - return nil, err - } - handler := log.JSONHandler(sf) - return log.NewLogger(handler), nil -} - func NewSyncConfig(ctx *cli.Context, log log.Logger) (*sync.Config, error) { if ctx.IsSet(flags.L2EngineSyncEnabled.Name) && ctx.IsSet(flags.SyncModeFlag.Name) { return nil, errors.New("cannot set both --l2.engine-sync and --syncmode at the same time") diff --git a/op-service/eth/sync_status.go b/op-service/eth/sync_status.go index d6ff393a61d7..e6dae130de7f 100644 --- a/op-service/eth/sync_status.go +++ b/op-service/eth/sync_status.go @@ -3,17 +3,14 @@ package eth // SyncStatus is a snapshot of the driver. // Values may be zeroed if not yet initialized. type SyncStatus struct { - // CurrentL1 is the L1 block that the derivation process is currently at in the inner-most stage. + // CurrentL1 is the L1 block that the derivation process is last idled at. // This may not be fully derived into L2 data yet. // The safe L2 blocks were produced/included fully from the L1 chain up to and including this L1 block. // If the node is synced, this matches the HeadL1, minus the verifier confirmation distance. CurrentL1 L1BlockRef `json:"current_l1"` - // CurrentL1Finalized is the L1 block that the derivation process is currently accepting as finalized - // in the inner-most stage, - // This may not be fully derived into L2 data yet. - // The finalized L2 blocks were produced/included fully from the L1 chain up to and including this L1 block. - // This may lag behind the FinalizedL1 when the FinalizedL1 could not yet be verified - // to be canonical w.r.t. the currently derived L2 chain. It may be zeroed if no block could be verified yet. + // CurrentL1Finalized is a legacy sync-status attribute. This is deprecated. + // A previous version of the L1 finalization-signal was updated only after the block was retrieved by number. + // This attribute just matches FinalizedL1 now. CurrentL1Finalized L1BlockRef `json:"current_l1_finalized"` // HeadL1 is the perceived head of the L1 chain, no confirmation distance. // The head is not guaranteed to build on the other L1 sync status fields, From 3d745c58146b7528dbeaa1561b2935a8b0eefc2c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Jun 2024 15:42:03 -0600 Subject: [PATCH 112/141] dependabot(gomod): bump github.com/btcsuite/btcd from 0.24.0 to 0.24.2 (#11013) Bumps [github.com/btcsuite/btcd](https://github.com/btcsuite/btcd) from 0.24.0 to 0.24.2. - [Release notes](https://github.com/btcsuite/btcd/releases) - [Changelog](https://github.com/btcsuite/btcd/blob/master/CHANGES) - [Commits](https://github.com/btcsuite/btcd/compare/v0.24.0...v0.24.2) --- updated-dependencies: - dependency-name: github.com/btcsuite/btcd dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 1fc3c9053d41..b7267897ffb2 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.21 require ( github.com/andybalholm/brotli v1.1.0 - github.com/btcsuite/btcd v0.24.0 + github.com/btcsuite/btcd v0.24.2 github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 github.com/cockroachdb/pebble v0.0.0-20231018212520-f6cde3fc2fa4 github.com/consensys/gnark-crypto v0.12.1 diff --git a/go.sum b/go.sum index 921a29881589..1c9f51514a12 100644 --- a/go.sum +++ b/go.sum @@ -52,8 +52,8 @@ github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBT github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd/go.mod h1:nm3Bko6zh6bWP60UxwoT5LzdGJsQJaPo6HjduXq9p6A= -github.com/btcsuite/btcd v0.24.0 h1:gL3uHE/IaFj6fcZSu03SvqPMSx7s/dPzfpG/atRwWdo= -github.com/btcsuite/btcd v0.24.0/go.mod h1:K4IDc1593s8jKXIF7yS7yCTSxrknB9z0STzc2j6XgE4= +github.com/btcsuite/btcd v0.24.2 h1:aLmxPguqxza+4ag8R1I2nnJjSu2iFn/kqtHTIImswcY= +github.com/btcsuite/btcd v0.24.2/go.mod h1:5C8ChTkl5ejr3WHj8tkQSCmydiMEPB0ZhQhehpq7Dgg= github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA= github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k= From 1440a519fb1cb7fa855dffb9c67546576ac5a734 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 27 Jun 2024 03:45:28 +0300 Subject: [PATCH 113/141] op-upgrade: deprecate (#11021) * op-upgrade: deprecate Delete `op-upgrade` and its related packages. These are no longer used in favor of the `superchain-ops` repo. No need to keep around dead code. The `safe` and `upgrades` packages are deleted. * justfile: delete --- op-chain-ops/cmd/op-upgrade/README.md | 60 - op-chain-ops/cmd/op-upgrade/main.go | 299 --- op-chain-ops/justfile | 25 - op-chain-ops/safe/batch.go | 310 --- op-chain-ops/safe/batch_helpers.go | 208 -- op-chain-ops/safe/batch_test.go | 156 -- .../safe/testdata/batch-prepare-bedrock.json | 1 - op-chain-ops/safe/testdata/deposit-tx.json | 56 - .../safe/testdata/finalize-withdrawal-tx.json | 64 - .../safe/testdata/l2-output-oracle.json | 1 - op-chain-ops/safe/testdata/portal-abi.json | 560 ----- op-chain-ops/upgrades/bindings/isemver.go | 211 -- .../bindings/l1crossdomainmessenger.go | 1609 ------------ .../upgrades/bindings/l1erc721bridge.go | 976 -------- .../upgrades/bindings/l1standardbridge.go | 2198 ----------------- .../upgrades/bindings/l2outputoracle.go | 1351 ---------- .../bindings/optimismmintableerc20factory.go | 798 ------ .../upgrades/bindings/optimismportal.go | 1411 ----------- op-chain-ops/upgrades/bindings/proxyadmin.go | 760 ------ .../upgrades/bindings/storagesetter.go | 446 ---- .../upgrades/bindings/systemconfig.go | 1785 ------------- op-chain-ops/upgrades/check.go | 138 -- op-chain-ops/upgrades/doc.go | 7 - op-chain-ops/upgrades/l1.go | 781 ------ 24 files changed, 14211 deletions(-) delete mode 100644 op-chain-ops/cmd/op-upgrade/README.md delete mode 100644 op-chain-ops/cmd/op-upgrade/main.go delete mode 100644 op-chain-ops/justfile delete mode 100644 op-chain-ops/safe/batch.go delete mode 100644 op-chain-ops/safe/batch_helpers.go delete mode 100644 op-chain-ops/safe/batch_test.go delete mode 100644 op-chain-ops/safe/testdata/batch-prepare-bedrock.json delete mode 100644 op-chain-ops/safe/testdata/deposit-tx.json delete mode 100644 op-chain-ops/safe/testdata/finalize-withdrawal-tx.json delete mode 100644 op-chain-ops/safe/testdata/l2-output-oracle.json delete mode 100644 op-chain-ops/safe/testdata/portal-abi.json delete mode 100644 op-chain-ops/upgrades/bindings/isemver.go delete mode 100644 op-chain-ops/upgrades/bindings/l1crossdomainmessenger.go delete mode 100644 op-chain-ops/upgrades/bindings/l1erc721bridge.go delete mode 100644 op-chain-ops/upgrades/bindings/l1standardbridge.go delete mode 100644 op-chain-ops/upgrades/bindings/l2outputoracle.go delete mode 100644 op-chain-ops/upgrades/bindings/optimismmintableerc20factory.go delete mode 100644 op-chain-ops/upgrades/bindings/optimismportal.go delete mode 100644 op-chain-ops/upgrades/bindings/proxyadmin.go delete mode 100644 op-chain-ops/upgrades/bindings/storagesetter.go delete mode 100644 op-chain-ops/upgrades/bindings/systemconfig.go delete mode 100644 op-chain-ops/upgrades/check.go delete mode 100644 op-chain-ops/upgrades/doc.go delete mode 100644 op-chain-ops/upgrades/l1.go diff --git a/op-chain-ops/cmd/op-upgrade/README.md b/op-chain-ops/cmd/op-upgrade/README.md deleted file mode 100644 index 8494c83ebce2..000000000000 --- a/op-chain-ops/cmd/op-upgrade/README.md +++ /dev/null @@ -1,60 +0,0 @@ -# op-upgrade - -A CLI tool for building Safe bundles that can upgrade many chains -at the same time. It will output a JSON file that is compatible with -the Safe UI. It is assumed that the implementations that are being -upgraded to have already been deployed and their contract addresses -exist inside of the `superchain-registry` repository. It is also -assumed that the semantic version file in the `superchain-registry` -has been updated. The tool will use semantic versioning to determine -which contract versions should be upgraded to and then build all of -the calldata. - -### Configuration - -#### L1 RPC URL - -The L1 RPC URL is used to determine which superchain to target. All -L2s that are not based on top of the L1 chain that corresponds to the -L1 RPC URL are filtered out from being included. It also is used to -double check that the data in the `superchain-registry` is correct. - -#### Chain IDs - -A list of L2 chain IDs can be passed that will be used to filter which -L2 chains will have upgrades included in the bundle transaction. Omitting -this argument will result in all chains in the superchain being considered. - -#### Deploy Config - -The path to the `deploy-config` directory in the contracts package. -Since multiple L2 networks may be included in the bundle, the `deploy-config` -directory must be passed and then the particular deploy config files will -be read out of the directory as needed. - -#### Outfile - -The file that the bundle should be written to. If omitted, the file -will be written to stdout. - -#### Usage - -Build and run using the [Makefile](../../Makefile) `op-upgrade` target. -Inside `/op-chain-ops`, run: - -```sh -make op-upgrade -``` - -to create a binary in [../../bin/op-upgrade](../../bin/op-upgrade) that can -be executed. Execute the following command inside `/op-chain-ops` to -create the Safe transaction bundle in an output file called `input.json`. - -```sh -./bin/op-upgrade \ - --l1-rpc-url https://ethereum-rpc.publicnode.com \ - --chain-ids 10 \ - --superchain-target mainnet \ - --outfile input.json \ - --deploy-config ../packages/contracts-bedrock/deploy-config -``` diff --git a/op-chain-ops/cmd/op-upgrade/main.go b/op-chain-ops/cmd/op-upgrade/main.go deleted file mode 100644 index 736cd67b833b..000000000000 --- a/op-chain-ops/cmd/op-upgrade/main.go +++ /dev/null @@ -1,299 +0,0 @@ -package main - -import ( - "encoding/json" - "errors" - "fmt" - "os" - "slices" - - "golang.org/x/exp/maps" - - "github.com/ethereum/go-ethereum/ethclient" - "github.com/ethereum/go-ethereum/log" - "github.com/mattn/go-isatty" - "github.com/urfave/cli/v2" - - "github.com/ethereum-optimism/optimism/op-chain-ops/clients" - "github.com/ethereum-optimism/optimism/op-chain-ops/genesis" - "github.com/ethereum-optimism/optimism/op-chain-ops/safe" - "github.com/ethereum-optimism/optimism/op-chain-ops/upgrades" - "github.com/ethereum-optimism/optimism/op-service/jsonutil" - oplog "github.com/ethereum-optimism/optimism/op-service/log" - - "github.com/ethereum-optimism/superchain-registry/superchain" -) - -func isAllowedChainID(chainId uint64) { - // TODO We panic if the chain ID does not correspond to the mainnet or sepolia versions - // of Metal, Mode, or Zora. This is because OP Sepolia is currently on FPAC, which corresponds - // to OptimismPortal v3.3.0. However, we do not want to upgrade other chains to that yet. A - // proper fix to op-upgrade to allow specifying the targets versions of contracts is a large - // change, and we might end up deprecating op-upgrade anyway. Therefore, we instead hardcode - // the chain IDs this script can be used for and panic if the chain ID is not one of them. This - // way it's not possible to erroneously upgrade a chain to an unexpected version. - // - // mainnet/metal: 1750 - // mainnet/mode: 34443 - // mainnet/zora: 7777777 - // mainnet/base: 8453 - // sepolia/metal: 1740 - // sepolia/mode: 919 - // sepolia/zora: 999999999 - // sepolia/base: 84532 - allowed := chainId == 1750 || - chainId == 34443 || - chainId == 7777777 || - chainId == 1740 || - chainId == 919 || - chainId == 999999999 || - chainId == 8453 || - chainId == 84532 - if !allowed { - panic(fmt.Sprintf("Chain ID %d is not allowed. We panic if the chain ID does not correspond to the mainnet or sepolia versions of Metal, Mode, or Zora. This is because OP Sepolia is currently on FPAC, which corresponds to OptimismPortal v3.3.0. However, we do not want to upgrade other chains to that yet. A proper fix to op-upgrade to allow specifying the targets versions of contracts is a large change, and we might end up deprecating op-upgrade anyway. Therefore, we instead hardcode the chain IDs this script can be used for and panic if the chain ID is not one of them. This way it's not possible to erroneously upgrade a chain to an unexpected version.", chainId)) - } -} - -func main() { - color := isatty.IsTerminal(os.Stderr.Fd()) - oplog.SetGlobalLogHandler(log.NewTerminalHandler(os.Stderr, color)) - - app := &cli.App{ - Name: "op-upgrade", - Usage: "Build transactions useful for upgrading the Superchain", - Flags: []cli.Flag{ - &cli.StringFlag{ - Name: "l1-rpc-url", - Value: "http://127.0.0.1:8545", - Usage: "L1 RPC URL, the chain ID will be used to determine the superchain", - EnvVars: []string{"L1_RPC_URL"}, - }, - &cli.Uint64SliceFlag{ - Name: "chain-ids", - Usage: "L2 Chain IDs corresponding to chains to upgrade. Corresponds to all chains if empty", - }, - &cli.StringFlag{ - Name: "superchain-target", - Usage: "The name of the superchain target to upgrade. For example: mainnet or sepolia.", - EnvVars: []string{"SUPERCHAIN_TARGET"}, - }, - &cli.PathFlag{ - Name: "deploy-config", - Usage: "The path to the deploy config file", - EnvVars: []string{"DEPLOY_CONFIG"}, - }, - &cli.PathFlag{ - Name: "outfile", - Usage: "The file to write the output to. If not specified, output is written to stdout", - EnvVars: []string{"OUTFILE"}, - }, - }, - Action: entrypoint, - } - - if err := app.Run(os.Args); err != nil { - log.Crit("error op-upgrade", "err", err) - } -} - -// entrypoint contains the main logic of the script -func entrypoint(ctx *cli.Context) error { - client, err := ethclient.Dial(ctx.String("l1-rpc-url")) - if err != nil { - return err - } - - // Fetch the L1 chain ID to determine the superchain name - l1ChainID, err := client.ChainID(ctx.Context) - if err != nil { - return err - } - - superchainName := ctx.String("superchain-target") - sc, ok := superchain.Superchains[superchainName] - if !ok { - return fmt.Errorf("superchain name %s not registered", superchainName) - } - - declaredChainID := sc.Config.L1.ChainID - - if declaredChainID != l1ChainID.Uint64() { - return fmt.Errorf("superchain %s has chainID %d, but the l1-rpc-url returned a chainId of %d", - superchainName, declaredChainID, l1ChainID.Uint64()) - } - - chainIDs := ctx.Uint64Slice("chain-ids") - if len(chainIDs) != 1 { - // This requirement is due to the `SYSTEM_CONFIG_START_BLOCK` environment variable - // that we read from in `op-chain-ops/upgrades/l1.go` - panic("op-upgrade currently only supports upgrading a single chain at a time") - } - deployConfig := ctx.Path("deploy-config") - - // If no chain IDs are specified, upgrade all chains - if len(chainIDs) == 0 { - chainIDs = maps.Keys(superchain.OPChains) - } - slices.Sort(chainIDs) - - targets := make([]*superchain.ChainConfig, 0) - for _, chainConfig := range superchain.OPChains { - if chainConfig.Superchain == superchainName && slices.Contains(chainIDs, chainConfig.ChainID) { - targets = append(targets, chainConfig) - } - } - - if len(targets) == 0 { - return fmt.Errorf("no chains found for superchain target %s with chain IDs %v, are you sure this chain is in the superchain registry?", superchainName, chainIDs) - } - - slices.SortFunc(targets, func(i, j *superchain.ChainConfig) int { - return int(i.ChainID) - int(j.ChainID) - }) - - // Create a batch of transactions - batch := safe.Batch{} - - for _, chainConfig := range targets { - // Panic if this chain ID is not allowed. See comments in isAllowedChainID to learn more. - isAllowedChainID(chainConfig.ChainID) - - name, _ := toDeployConfigName(chainConfig) - config, err := genesis.NewDeployConfigWithNetwork(name, deployConfig) - if err != nil { - log.Warn("Cannot find deploy config for network, so validity checks will be skipped", "name", chainConfig.Name, "deploy-config-name", name, "path", deployConfig, "err", err) - } - - if config != nil { - log.Info("Checking deploy config validity", "name", chainConfig.Name) - if err := config.Check(); err != nil { - return fmt.Errorf("error checking deploy config: %w", err) - } - } - - clients, err := clients.NewClients(ctx.String("l1-rpc-url"), chainConfig.PublicRPC) - if err != nil { - return fmt.Errorf("cannot create RPC clients: %w", err) - } - // The L1Client is required - if clients.L1Client == nil { - return errors.New("Cannot create L1 client") - } - - l1ChainID, err := clients.L1Client.ChainID(ctx.Context) - if err != nil { - return fmt.Errorf("cannot fetch L1 chain ID: %w", err) - } - - // The L2Client is not required, but double check the chain id matches if possible - if clients.L2Client != nil { - l2ChainID, err := clients.L2Client.ChainID(ctx.Context) - if err != nil { - return fmt.Errorf("cannot fetch L2 chain ID: %w", err) - } - if chainConfig.ChainID != l2ChainID.Uint64() { - return fmt.Errorf("Mismatched chain IDs: %d != %d", chainConfig.ChainID, l2ChainID) - } - } - - log.Info(chainConfig.Name, "l1-chain-id", l1ChainID, "l2-chain-id", chainConfig.ChainID) - - log.Info("Detecting on chain contracts") - // Tracking the individual addresses can be deprecated once the system is upgraded - // to the new contracts where the system config has a reference to each address. - addresses, ok := superchain.Addresses[chainConfig.ChainID] - if !ok { - return fmt.Errorf("no addresses for chain ID %d", chainConfig.ChainID) - } - versions, err := upgrades.GetContractVersions(ctx.Context, addresses, chainConfig, clients.L1Client) - if err != nil { - return fmt.Errorf("error getting contract versions: %w", err) - } - - log.Info("L1CrossDomainMessenger", "version", versions.L1CrossDomainMessenger, "address", addresses.L1CrossDomainMessengerProxy) - log.Info("L1ERC721Bridge", "version", versions.L1ERC721Bridge, "address", addresses.L1ERC721BridgeProxy) - log.Info("L1StandardBridge", "version", versions.L1StandardBridge, "address", addresses.L1StandardBridgeProxy) - log.Info("L2OutputOracle", "version", versions.L2OutputOracle, "address", addresses.L2OutputOracleProxy) - log.Info("OptimismMintableERC20Factory", "version", versions.OptimismMintableERC20Factory, "address", addresses.OptimismMintableERC20FactoryProxy) - log.Info("OptimismPortal", "version", versions.OptimismPortal, "address", addresses.OptimismPortalProxy) - log.Info("SystemConfig", "version", versions.SystemConfig, "address", addresses.SystemConfigProxy) - - implementations, ok := superchain.Implementations[chainConfig.Superchain] - if !ok { - return fmt.Errorf("no implementations for chain ID %d", l1ChainID.Uint64()) - } - - // TODO This looks for the latest implementations defined for each contract, and for - // OptimismPortal that's the FPAC v3.3.0. However we do not want to upgrade other chains to - // that yet so we hardcode v2.5.0 which corresponds to the pre-FPAC op-contracts/v1.3.0 tag. - // See comments in isAllowedChainID to learn more. - targetUpgrade := superchain.SuperchainSemver[superchainName] - targetUpgrade.OptimismPortal = "2.5.0" - - list, err := implementations.Resolve(targetUpgrade) - if err != nil { - return err - } - - log.Info("Upgrading to the following versions") - log.Info("L1CrossDomainMessenger", "version", list.L1CrossDomainMessenger.Version, "address", list.L1CrossDomainMessenger.Address) - log.Info("L1ERC721Bridge", "version", list.L1ERC721Bridge.Version, "address", list.L1ERC721Bridge.Address) - log.Info("L1StandardBridge", "version", list.L1StandardBridge.Version, "address", list.L1StandardBridge.Address) - log.Info("L2OutputOracle", "version", list.L2OutputOracle.Version, "address", list.L2OutputOracle.Address) - log.Info("OptimismMintableERC20Factory", "version", list.OptimismMintableERC20Factory.Version, "address", list.OptimismMintableERC20Factory.Address) - log.Info("OptimismPortal", "version", list.OptimismPortal.Version, "address", list.OptimismPortal.Address) - log.Info("SystemConfig", "version", list.SystemConfig.Version, "address", list.SystemConfig.Address) - - // Ensure that the superchain registry information is correct by checking the - // actual versions based on what the registry says is true. - if err := upgrades.CheckL1(ctx.Context, &list, clients.L1Client); err != nil { - return fmt.Errorf("error checking L1: %w", err) - } - - // Build the batch - // op-upgrade assumes a superchain config for L1 contract-implementations set. - if err := upgrades.L1(&batch, list, *addresses, config, chainConfig, sc, clients.L1Client); err != nil { - return err - } - } - - // Write the batch to disk or stdout - if outfile := ctx.Path("outfile"); outfile != "" { - if err := jsonutil.WriteJSON(outfile, batch, 0o666); err != nil { - return err - } - } else { - data, err := json.MarshalIndent(batch, "", " ") - if err != nil { - return err - } - fmt.Println(string(data)) - } - return nil -} - -// toDeployConfigName is a temporary function that maps the chain config names -// to deploy config names. This should be able to be removed in the future -// with a canonical naming scheme. If an empty string is returned, then -// it means that the chain is not supported yet. -func toDeployConfigName(cfg *superchain.ChainConfig) (string, error) { - if cfg.Name == "OP-Sepolia" { - return "sepolia", nil - } - if cfg.Name == "OP-Goerli" { - return "goerli", nil - } - if cfg.Name == "PGN" { - return "pgn", nil - } - if cfg.Name == "Zora" { - return "zora", nil - } - if cfg.Name == "OP-Mainnet" { - return "mainnet", nil - } - if cfg.Name == "Zora Goerli" { - return "zora-goerli", nil - } - return "", fmt.Errorf("unsupported chain name %s", cfg.Name) -} diff --git a/op-chain-ops/justfile b/op-chain-ops/justfile deleted file mode 100644 index 9775f535d227..000000000000 --- a/op-chain-ops/justfile +++ /dev/null @@ -1,25 +0,0 @@ -abis := '../packages/contracts-bedrock/snapshots/abi' - -bindings-upgrades: - #!/usr/bin/env bash - set -euxo pipefail - - build_abi() { - local lowercase=$(echo "$1" | awk '{print tolower($0)}') - abigen \ - --abi "{{abis}}/$1.json" \ - --pkg bindings \ - --out "upgrades/bindings/$lowercase.go" \ - --type $1 - } - - build_abi L1CrossDomainMessenger - build_abi L1ERC721Bridge - build_abi L1StandardBridge - build_abi L2OutputOracle - build_abi OptimismMintableERC20Factory - build_abi OptimismPortal - build_abi SystemConfig - #build_abi ISemver - build_abi ProxyAdmin - build_abi StorageSetter diff --git a/op-chain-ops/safe/batch.go b/op-chain-ops/safe/batch.go deleted file mode 100644 index be04eb17a17c..000000000000 --- a/op-chain-ops/safe/batch.go +++ /dev/null @@ -1,310 +0,0 @@ -// Package safe contains types for working with Safe smart contract wallets. These are used to -// build batch transactions for the tx-builder app. The types are based on -// https://github.com/safe-global/safe-react-apps/blob/development/apps/tx-builder/src/typings/models.ts. -package safe - -import ( - "bytes" - "encoding/json" - "errors" - "fmt" - "math/big" - "strings" - - "golang.org/x/exp/maps" - - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/crypto" -) - -// Batch represents a Safe tx-builder transaction. -// SkipCalldata will skip adding the calldata to the BatchTransaction. -// This is useful for when using the Safe UI because it prefers using -// the raw calldata when both the calldata and ABIs with arguments are -// present. -type Batch struct { - SkipCalldata bool `json:"-"` - Version string `json:"version"` - ChainID *big.Int `json:"chainId"` - CreatedAt uint64 `json:"createdAt"` - Meta BatchMeta `json:"meta"` - Transactions []BatchTransaction `json:"transactions"` -} - -// AddCall will add a call to the batch. After a series of calls are -// added to the batch, it can be serialized to JSON. -func (b *Batch) AddCall(to common.Address, value *big.Int, sig string, args []any, iface *abi.ABI) error { - if iface == nil { - return errors.New("abi cannot be nil") - } - // Attempt to pull out the signature from the top level methods. - // The abi package uses normalization that we do not want to be - // coupled to, so attempt to search for the raw name if the top - // level name is not found to handle overloading more gracefully. - method, ok := iface.Methods[sig] - if !ok { - for _, m := range iface.Methods { - if m.RawName == sig || m.Sig == sig { - method = m - ok = true - } - } - } - if !ok { - keys := maps.Keys(iface.Methods) - methods := strings.Join(keys, ",") - return fmt.Errorf("%s not found in abi, options are %s", sig, methods) - } - - if len(args) != len(method.Inputs) { - return fmt.Errorf("requires %d inputs but got %d for %s", len(method.Inputs), len(args), method.RawName) - } - - contractMethod := ContractMethod{ - Name: method.RawName, - Payable: method.Payable, - } - - inputValues := make(map[string]string) - contractInputs := make([]ContractInput, 0) - - for i, input := range method.Inputs { - contractInput, err := createContractInput(input, contractInputs) - if err != nil { - return err - } - contractMethod.Inputs = append(contractMethod.Inputs, contractInput...) - - str, err := stringifyArg(args[i]) - if err != nil { - return err - } - inputValues[input.Name] = str - } - - encoded, err := method.Inputs.PackValues(args) - if err != nil { - return err - } - data := make([]byte, len(method.ID)+len(encoded)) - copy(data, method.ID) - copy(data[len(method.ID):], encoded) - - batchTransaction := BatchTransaction{ - To: to, - Value: value, - Method: contractMethod, - InputValues: inputValues, - } - - if !b.SkipCalldata { - batchTransaction.Data = data - } - - b.Transactions = append(b.Transactions, batchTransaction) - - return nil -} - -// Check will check the batch for errors -func (b *Batch) Check() error { - for _, tx := range b.Transactions { - if err := tx.Check(); err != nil { - return err - } - } - return nil -} - -// batchMarshaling is a helper type used for JSON marshaling. -type batchMarshaling struct { - Version string `json:"version"` - ChainID string `json:"chainId"` - CreatedAt uint64 `json:"createdAt"` - Meta BatchMeta `json:"meta"` - Transactions []BatchTransaction `json:"transactions"` -} - -// MarshalJSON will marshal a Batch to JSON. -func (b *Batch) MarshalJSON() ([]byte, error) { - batch := batchMarshaling{ - Version: b.Version, - CreatedAt: b.CreatedAt, - Meta: b.Meta, - Transactions: b.Transactions, - } - if b.ChainID != nil { - batch.ChainID = b.ChainID.String() - } - return json.Marshal(batch) -} - -// UnmarshalJSON will unmarshal a Batch from JSON. -func (b *Batch) UnmarshalJSON(data []byte) error { - var bf batchMarshaling - if err := json.Unmarshal(data, &bf); err != nil { - return err - } - b.Version = bf.Version - chainId, ok := new(big.Int).SetString(bf.ChainID, 10) - if !ok { - return fmt.Errorf("cannot set chainId to %s", bf.ChainID) - } - b.ChainID = chainId - b.CreatedAt = bf.CreatedAt - b.Meta = bf.Meta - b.Transactions = bf.Transactions - return nil -} - -// BatchMeta contains metadata about a Batch. Not all -// of the fields are required. -type BatchMeta struct { - TxBuilderVersion string `json:"txBuilderVersion,omitempty"` - Checksum string `json:"checksum,omitempty"` - CreatedFromSafeAddress string `json:"createdFromSafeAddress"` - CreatedFromOwnerAddress string `json:"createdFromOwnerAddress"` - Name string `json:"name"` - Description string `json:"description"` -} - -// BatchTransaction represents a single call in a tx-builder transaction. -type BatchTransaction struct { - To common.Address `json:"to"` - Value *big.Int `json:"value"` - Data []byte `json:"data"` - Method ContractMethod `json:"contractMethod"` - InputValues map[string]string `json:"contractInputsValues"` -} - -// Check will check the batch transaction for errors. -// An error is defined by: -// - incorrectly encoded calldata -// - mismatch in number of arguments -// It does not currently work on structs, will return no error if a "tuple" -// is used as an argument. Need to find a generic way to work with structs. -func (bt *BatchTransaction) Check() error { - if len(bt.Method.Inputs) != len(bt.InputValues) { - return fmt.Errorf("expected %d inputs but got %d", len(bt.Method.Inputs), len(bt.InputValues)) - } - - if len(bt.Data) > 0 && bt.Method.Name != "fallback" { - if len(bt.Data) < 4 { - return fmt.Errorf("must have at least 4 bytes of calldata, got %d", len(bt.Data)) - } - sig := bt.Signature() - selector := crypto.Keccak256([]byte(sig))[0:4] - if !bytes.Equal(bt.Data[0:4], selector) { - return fmt.Errorf("data does not match signature") - } - - // Check the calldata - values := make([]any, len(bt.Method.Inputs)) - for i, input := range bt.Method.Inputs { - value, ok := bt.InputValues[input.Name] - if !ok { - return fmt.Errorf("missing input %s", input.Name) - } - // Need to figure out better way to handle tuples in a generic way - if input.Type == "tuple" { - return nil - } - arg, err := unstringifyArg(value, input.Type) - if err != nil { - return err - } - values[i] = arg - } - - calldata, err := bt.Arguments().PackValues(values) - if err != nil { - return err - } - if !bytes.Equal(bt.Data[4:], calldata) { - return fmt.Errorf("calldata does not match inputs, expected %s, got %s", hexutil.Encode(bt.Data[4:]), hexutil.Encode(calldata)) - } - } - return nil -} - -// Signature returns the function signature of the batch transaction. -func (bt *BatchTransaction) Signature() string { - types := make([]string, len(bt.Method.Inputs)) - for i, input := range bt.Method.Inputs { - types[i] = buildFunctionSignature(input) - } - return fmt.Sprintf("%s(%s)", bt.Method.Name, strings.Join(types, ",")) -} - -func (bt *BatchTransaction) Arguments() abi.Arguments { - arguments := make(abi.Arguments, len(bt.Method.Inputs)) - for i, input := range bt.Method.Inputs { - serialized, err := json.Marshal(input) - if err != nil { - panic(err) - } - var arg abi.Argument - if err := json.Unmarshal(serialized, &arg); err != nil { - panic(err) - } - arguments[i] = arg - } - return arguments -} - -// UnmarshalJSON will unmarshal a BatchTransaction from JSON. -func (b *BatchTransaction) UnmarshalJSON(data []byte) error { - var bt batchTransactionMarshaling - if err := json.Unmarshal(data, &bt); err != nil { - return err - } - b.To = common.HexToAddress(bt.To) - b.Value = new(big.Int).SetUint64(bt.Value) - if bt.Data != nil { - b.Data = common.CopyBytes(*bt.Data) - } - b.Method = bt.Method - b.InputValues = bt.InputValues - return nil -} - -// MarshalJSON will marshal a BatchTransaction to JSON. -func (b *BatchTransaction) MarshalJSON() ([]byte, error) { - batch := batchTransactionMarshaling{ - To: b.To.Hex(), - Value: b.Value.Uint64(), - Method: b.Method, - InputValues: b.InputValues, - } - if len(b.Data) != 0 { - data := hexutil.Bytes(b.Data) - batch.Data = &data - } - return json.Marshal(batch) -} - -// batchTransactionMarshaling is a helper type used for JSON marshaling. -type batchTransactionMarshaling struct { - To string `json:"to"` - Value uint64 `json:"value,string"` - Data *hexutil.Bytes `json:"data"` - Method ContractMethod `json:"contractMethod"` - InputValues map[string]string `json:"contractInputsValues"` -} - -// ContractMethod represents a method call in a tx-builder transaction. -type ContractMethod struct { - Inputs []ContractInput `json:"inputs"` - Name string `json:"name"` - Payable bool `json:"payable"` -} - -// ContractInput represents an input to a contract method. -type ContractInput struct { - InternalType string `json:"internalType"` - Name string `json:"name"` - Type string `json:"type"` - Components []ContractInput `json:"components,omitempty"` -} diff --git a/op-chain-ops/safe/batch_helpers.go b/op-chain-ops/safe/batch_helpers.go deleted file mode 100644 index 171de2b0eeff..000000000000 --- a/op-chain-ops/safe/batch_helpers.go +++ /dev/null @@ -1,208 +0,0 @@ -package safe - -import ( - "fmt" - "math/big" - "reflect" - "strconv" - "strings" - - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" -) - -// stringifyArg converts a Go type to a string that is representable by ABI. -// To do so, this function must be recursive to handle nested tuples. -func stringifyArg(argument any) (string, error) { - switch arg := argument.(type) { - case common.Address: - return arg.String(), nil - case *common.Address: - return arg.String(), nil - case *big.Int: - return arg.String(), nil - case big.Int: - return arg.String(), nil - case bool: - if arg { - return "true", nil - } - return "false", nil - case int64: - return strconv.FormatInt(arg, 10), nil - case int32: - return strconv.FormatInt(int64(arg), 10), nil - case int16: - return strconv.FormatInt(int64(arg), 10), nil - case int8: - return strconv.FormatInt(int64(arg), 10), nil - case int: - return strconv.FormatInt(int64(arg), 10), nil - case uint64: - return strconv.FormatUint(uint64(arg), 10), nil - case uint32: - return strconv.FormatUint(uint64(arg), 10), nil - case uint16: - return strconv.FormatUint(uint64(arg), 10), nil - case uint8: - return strconv.FormatUint(uint64(arg), 10), nil - case uint: - return strconv.FormatUint(uint64(arg), 10), nil - case []byte: - return hexutil.Encode(arg), nil - case []any: - ret := make([]string, len(arg)) - for i, v := range arg { - str, err := stringifyArg(v) - if err != nil { - return "", err - } - ret[i] = str - } - return "[" + strings.Join(ret, ",") + "]", nil - default: - typ := reflect.TypeOf(argument) - if typ.Kind() == reflect.Ptr { - typ = typ.Elem() - } - - if typ.Kind() == reflect.Struct { - v := reflect.ValueOf(argument) - numField := v.NumField() - ret := make([]string, numField) - - for i := 0; i < numField; i++ { - val := v.Field(i).Interface() - str, err := stringifyArg(val) - if err != nil { - return "", err - } - ret[i] = str - } - - return "[" + strings.Join(ret, ",") + "]", nil - } - - return "", fmt.Errorf("unknown type as argument: %T", arg) - } -} - -// unstringifyArg converts a string to a Go type. -func unstringifyArg(arg string, typ string) (any, error) { - switch typ { - case "address": - return common.HexToAddress(arg), nil - case "bool": - return strconv.ParseBool(arg) - case "uint8": - val, err := strconv.ParseUint(arg, 10, 8) - return uint8(val), err - case "uint16": - val, err := strconv.ParseUint(arg, 10, 16) - return uint16(val), err - case "uint32": - val, err := strconv.ParseUint(arg, 10, 32) - return uint32(val), err - case "uint64": - val, err := strconv.ParseUint(arg, 10, 64) - return val, err - case "int8": - val, err := strconv.ParseInt(arg, 10, 8) - return val, err - case "int16": - val, err := strconv.ParseInt(arg, 10, 16) - return val, err - case "int32": - val, err := strconv.ParseInt(arg, 10, 32) - return val, err - case "int64": - val, err := strconv.ParseInt(arg, 10, 64) - return val, err - case "uint256", "int256": - val, ok := new(big.Int).SetString(arg, 10) - if !ok { - return nil, fmt.Errorf("failed to parse %s as big.Int", arg) - } - return val, nil - case "string": - return arg, nil - case "bytes": - return hexutil.Decode(arg) - default: - return nil, fmt.Errorf("unknown type: %s", typ) - } -} - -// createContractInput converts an abi.Argument to one or more ContractInputs. -func createContractInput(input abi.Argument, inputs []ContractInput) ([]ContractInput, error) { - inputType, err := stringifyType(input.Type) - if err != nil { - return nil, err - } - - internalType := input.Type.String() - if input.Type.T == abi.TupleTy { - internalType = input.Type.TupleRawName - } - - components := make([]ContractInput, 0) - for i, elem := range input.Type.TupleElems { - e := *elem - arg := abi.Argument{ - Name: input.Type.TupleRawNames[i], - Type: e, - } - component, err := createContractInput(arg, inputs) - if err != nil { - return nil, err - } - components = append(components, component...) - } - - contractInput := ContractInput{ - InternalType: internalType, - Name: input.Name, - Type: inputType, - Components: components, - } - - inputs = append(inputs, contractInput) - - return inputs, nil -} - -// stringifyType turns an abi.Type into a string -func stringifyType(t abi.Type) (string, error) { - switch t.T { - case abi.TupleTy: - return "tuple", nil - case abi.BoolTy: - return t.String(), nil - case abi.AddressTy: - return t.String(), nil - case abi.UintTy: - return t.String(), nil - case abi.IntTy: - return t.String(), nil - case abi.StringTy: - return t.String(), nil - case abi.BytesTy: - return t.String(), nil - default: - return "", fmt.Errorf("unknown type: %d", t.T) - } -} - -// buildFunctionSignature builds a function signature from a ContractInput. -// It is recursive to handle tuples. -func buildFunctionSignature(input ContractInput) string { - if input.Type == "tuple" { - types := make([]string, len(input.Components)) - for i, component := range input.Components { - types[i] = buildFunctionSignature(component) - } - return fmt.Sprintf("(%s)", strings.Join(types, ",")) - } - return input.InternalType -} diff --git a/op-chain-ops/safe/batch_test.go b/op-chain-ops/safe/batch_test.go deleted file mode 100644 index e92019b1ed2b..000000000000 --- a/op-chain-ops/safe/batch_test.go +++ /dev/null @@ -1,156 +0,0 @@ -package safe - -import ( - "bytes" - "encoding/json" - "errors" - "math/big" - "os" - "testing" - - "github.com/ethereum-optimism/optimism/op-chain-ops/upgrades/bindings" - - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/common" - - "github.com/stretchr/testify/require" -) - -func TestBatchJSONPrepareBedrock(t *testing.T) { - testBatchJSON(t, "testdata/batch-prepare-bedrock.json") -} - -func TestBatchJSONL2OO(t *testing.T) { - testBatchJSON(t, "testdata/l2-output-oracle.json") -} - -func testBatchJSON(t *testing.T, path string) { - b, err := os.ReadFile(path) - require.NoError(t, err) - dec := json.NewDecoder(bytes.NewReader(b)) - decoded := new(Batch) - require.NoError(t, dec.Decode(decoded)) - data, err := json.Marshal(decoded) - require.NoError(t, err) - require.JSONEq(t, string(b), string(data)) -} - -// TestBatchAddCallFinalizeWithdrawalTransaction ensures that structs can be serialized correctly. -func TestBatchAddCallFinalizeWithdrawalTransaction(t *testing.T) { - file, err := os.ReadFile("testdata/portal-abi.json") - require.NoError(t, err) - portalABI, err := abi.JSON(bytes.NewReader(file)) - require.NoError(t, err) - - sig := "finalizeWithdrawalTransaction" - argument := []any{ - bindings.TypesWithdrawalTransaction{ - Nonce: big.NewInt(0), - Sender: common.Address{19: 0x01}, - Target: common.Address{19: 0x02}, - Value: big.NewInt(1), - GasLimit: big.NewInt(2), - Data: []byte{}, - }, - } - - batch := new(Batch) - to := common.Address{19: 0x01} - value := big.NewInt(222) - - require.NoError(t, batch.AddCall(to, value, sig, argument, &portalABI)) - require.NoError(t, batch.Check()) - require.Equal(t, batch.Transactions[0].Signature(), "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))") - - expected, err := os.ReadFile("testdata/finalize-withdrawal-tx.json") - require.NoError(t, err) - - serialized, err := json.Marshal(batch) - require.NoError(t, err) - require.JSONEq(t, string(expected), string(serialized)) -} - -// TestBatchAddCallDepositTransaction ensures that simple calls can be serialized correctly. -func TestBatchAddCallDepositTransaction(t *testing.T) { - file, err := os.ReadFile("testdata/portal-abi.json") - require.NoError(t, err) - portalABI, err := abi.JSON(bytes.NewReader(file)) - require.NoError(t, err) - - batch := new(Batch) - to := common.Address{19: 0x01} - value := big.NewInt(222) - sig := "depositTransaction" - argument := []any{ - common.Address{01}, - big.NewInt(2), - uint64(100), - false, - []byte{}, - } - - require.NoError(t, batch.AddCall(to, value, sig, argument, &portalABI)) - require.NoError(t, batch.Check()) - require.Equal(t, batch.Transactions[0].Signature(), "depositTransaction(address,uint256,uint64,bool,bytes)") - - expected, err := os.ReadFile("testdata/deposit-tx.json") - require.NoError(t, err) - - serialized, err := json.Marshal(batch) - require.NoError(t, err) - require.JSONEq(t, string(expected), string(serialized)) -} - -// TestBatchCheck checks for the various failure cases of Batch.Check -// as well as a simple check for a valid batch. -func TestBatchCheck(t *testing.T) { - cases := []struct { - name string - bt BatchTransaction - err error - }{ - { - name: "bad-input-count", - bt: BatchTransaction{ - Method: ContractMethod{}, - InputValues: map[string]string{ - "foo": "bar", - }, - }, - err: errors.New("expected 0 inputs but got 1"), - }, - { - name: "bad-calldata-too-small", - bt: BatchTransaction{ - Data: []byte{0x01}, - }, - err: errors.New("must have at least 4 bytes of calldata, got 1"), - }, - { - name: "bad-calldata-mismatch", - bt: BatchTransaction{ - Data: []byte{0x01, 0x02, 0x03, 0x04}, - Method: ContractMethod{ - Name: "foo", - }, - }, - err: errors.New("data does not match signature"), - }, - { - name: "good-calldata", - bt: BatchTransaction{ - Data: []byte{0xc2, 0x98, 0x55, 0x78}, - Method: ContractMethod{ - Name: "foo", - }, - }, - err: nil, - }, - } - - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - require.Equal(t, tc.err, tc.bt.Check()) - }) - } -} diff --git a/op-chain-ops/safe/testdata/batch-prepare-bedrock.json b/op-chain-ops/safe/testdata/batch-prepare-bedrock.json deleted file mode 100644 index 978a0f160584..000000000000 --- a/op-chain-ops/safe/testdata/batch-prepare-bedrock.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","chainId":"1","createdAt":1683299982633,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.13.3","createdFromSafeAddress":"0xAB23dE0DbE0aedF356af3F815c8B47D88575D82d","createdFromOwnerAddress":"","checksum":"0x3be12fb2a12e07f516c3895194f8418c6640f27fb3324e4dc06dce337b7ae7c3"},"transactions":[{"to":"0x09AA72510eE2e1c705Dc4e2114b025a12E116bb8","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","payable":false},"contractInputsValues":{"newOwner":"0x3C0dD22068a69433938097ad335Cb44a9DBf5c1A"}},{"to":"0x20835fbB5Dcb9B9c3074C0780bB07790a7525f41","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","payable":false},"contractInputsValues":{"newOwner":"0x3C0dD22068a69433938097ad335Cb44a9DBf5c1A"}},{"to":"0xcAC4CDD0C2D87e65710C87dE3955974d6a0b6940","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","payable":false},"contractInputsValues":{"_owner":"0x3C0dD22068a69433938097ad335Cb44a9DBf5c1A"}},{"to":"0xE1229AbA7DC7e74C9995254bbaa40bedDB0B8B4d","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"changeAdmin","payable":false},"contractInputsValues":{"_admin":"0x3C0dD22068a69433938097ad335Cb44a9DBf5c1A"}}]} \ No newline at end of file diff --git a/op-chain-ops/safe/testdata/deposit-tx.json b/op-chain-ops/safe/testdata/deposit-tx.json deleted file mode 100644 index 3847cd2b16a6..000000000000 --- a/op-chain-ops/safe/testdata/deposit-tx.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "version": "", - "chainId": "", - "createdAt": 0, - "meta": { - "createdFromSafeAddress": "", - "createdFromOwnerAddress": "", - "name": "", - "description": "" - }, - "transactions": [ - { - "to": "0x0000000000000000000000000000000000000001", - "value": "222", - "data": "0xe9e05c42000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000", - "contractMethod": { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint64", - "name": "_gasLimit", - "type": "uint64" - }, - { - "internalType": "bool", - "name": "_isCreation", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "depositTransaction", - "payable": false - }, - "contractInputsValues": { - "_data": "0x", - "_gasLimit": "100", - "_isCreation": "false", - "_to": "0x0100000000000000000000000000000000000000", - "_value": "2" - } - } - ] - } diff --git a/op-chain-ops/safe/testdata/finalize-withdrawal-tx.json b/op-chain-ops/safe/testdata/finalize-withdrawal-tx.json deleted file mode 100644 index 0d4da7846cb5..000000000000 --- a/op-chain-ops/safe/testdata/finalize-withdrawal-tx.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "version": "", - "chainId": "", - "createdAt": 0, - "meta": { - "createdFromSafeAddress": "", - "createdFromOwnerAddress": "", - "name": "", - "description": "" - }, - "transactions": [ - { - "to": "0x0000000000000000000000000000000000000001", - "value": "222", - "data": "0x8c3152e900000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000", - "contractMethod": { - "inputs": [ - { - "internalType": "TypesWithdrawalTransaction", - "name": "_tx", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ] - } - ], - "name": "finalizeWithdrawalTransaction", - "payable": false - }, - "contractInputsValues": { - "_tx": "[0,0x0000000000000000000000000000000000000001,0x0000000000000000000000000000000000000002,1,2,0x]" - } - } - ] -} diff --git a/op-chain-ops/safe/testdata/l2-output-oracle.json b/op-chain-ops/safe/testdata/l2-output-oracle.json deleted file mode 100644 index f0eee342a26f..000000000000 --- a/op-chain-ops/safe/testdata/l2-output-oracle.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","chainId":"1","createdAt":1691808995527,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.16.1","createdFromSafeAddress":"0xc9D26D376dD75573E0C3247C141881F053d27Ae8","createdFromOwnerAddress":"","checksum":"0x2a88db9ce20d2eb5a80910842e9e94d5870497af45986a6c1c7e2c91d15e34f0"},"transactions":[{"to":"0xE5FF3b57695079f808a24256734483CD3889fA9E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"bytes32","name":"_outputRoot","type":"bytes32"},{"internalType":"uint256","name":"_l2BlockNumber","type":"uint256"},{"internalType":"bytes32","name":"_l1BlockHash","type":"bytes32"},{"internalType":"uint256","name":"_l1BlockNumber","type":"uint256"}],"name":"proposeL2Output","payable":true},"contractInputsValues":{"_outputRoot":"0x5398552529cbd710f485e297bcf15233b8475bdad43280c99334f65a1d4278ff","_l2BlockNumber":"0","_l1BlockHash":"0x01f814a4547c01c18c0eb8b96cff19bc5dc83b1d2d8a8bbb03206587f594c80a","_l1BlockNumber":"1"}},{"to":"0xE5FF3b57695079f808a24256734483CD3889fA9E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"_l2OutputIndex","type":"uint256"}],"name":"deleteL2Outputs","payable":false},"contractInputsValues":{"_l2OutputIndex":"2"}}]} \ No newline at end of file diff --git a/op-chain-ops/safe/testdata/portal-abi.json b/op-chain-ops/safe/testdata/portal-abi.json deleted file mode 100644 index 4ee86e3be7ce..000000000000 --- a/op-chain-ops/safe/testdata/portal-abi.json +++ /dev/null @@ -1,560 +0,0 @@ -[ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "version", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "opaqueData", - "type": "bytes" - } - ], - "name": "TransactionDeposited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "withdrawalHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "name": "WithdrawalFinalized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "withdrawalHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "WithdrawalProven", - "type": "event" - }, - { - "inputs": [], - "name": "GUARDIAN", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "L2_ORACLE", - "outputs": [ - { - "internalType": "contract L2OutputOracle", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SYSTEM_CONFIG", - "outputs": [ - { - "internalType": "contract SystemConfig", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint64", - "name": "_gasLimit", - "type": "uint64" - }, - { - "internalType": "bool", - "name": "_isCreation", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "depositTransaction", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "donateETH", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct Types.WithdrawalTransaction", - "name": "_tx", - "type": "tuple" - } - ], - "name": "finalizeWithdrawalTransaction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "finalizedWithdrawals", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "guardian", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract L2OutputOracle", - "name": "_l2Oracle", - "type": "address" - }, - { - "internalType": "address", - "name": "_guardian", - "type": "address" - }, - { - "internalType": "contract SystemConfig", - "name": "_systemConfig", - "type": "address" - }, - { - "internalType": "bool", - "name": "_paused", - "type": "bool" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_l2OutputIndex", - "type": "uint256" - } - ], - "name": "isOutputFinalized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2Oracle", - "outputs": [ - { - "internalType": "contract L2OutputOracle", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2Sender", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "_byteCount", - "type": "uint64" - } - ], - "name": "minimumGasLimit", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "params", - "outputs": [ - { - "internalType": "uint128", - "name": "prevBaseFee", - "type": "uint128" - }, - { - "internalType": "uint64", - "name": "prevBoughtGas", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "prevBlockNum", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct Types.WithdrawalTransaction", - "name": "_tx", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_l2OutputIndex", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "version", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "messagePasserStorageRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "latestBlockhash", - "type": "bytes32" - } - ], - "internalType": "struct Types.OutputRootProof", - "name": "_outputRootProof", - "type": "tuple" - }, - { - "internalType": "bytes[]", - "name": "_withdrawalProof", - "type": "bytes[]" - } - ], - "name": "proveWithdrawalTransaction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenWithdrawals", - "outputs": [ - { - "internalType": "bytes32", - "name": "outputRoot", - "type": "bytes32" - }, - { - "internalType": "uint128", - "name": "timestamp", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "l2OutputIndex", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "systemConfig", - "outputs": [ - { - "internalType": "contract SystemConfig", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } -] diff --git a/op-chain-ops/upgrades/bindings/isemver.go b/op-chain-ops/upgrades/bindings/isemver.go deleted file mode 100644 index 66a940654d05..000000000000 --- a/op-chain-ops/upgrades/bindings/isemver.go +++ /dev/null @@ -1,211 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindings - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// ISemverMetaData contains all meta data concerning the ISemver contract. -var ISemverMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"}]", -} - -// ISemverABI is the input ABI used to generate the binding from. -// Deprecated: Use ISemverMetaData.ABI instead. -var ISemverABI = ISemverMetaData.ABI - -// ISemver is an auto generated Go binding around an Ethereum contract. -type ISemver struct { - ISemverCaller // Read-only binding to the contract - ISemverTransactor // Write-only binding to the contract - ISemverFilterer // Log filterer for contract events -} - -// ISemverCaller is an auto generated read-only Go binding around an Ethereum contract. -type ISemverCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ISemverTransactor is an auto generated write-only Go binding around an Ethereum contract. -type ISemverTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ISemverFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ISemverFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ISemverSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type ISemverSession struct { - Contract *ISemver // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ISemverCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type ISemverCallerSession struct { - Contract *ISemverCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// ISemverTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type ISemverTransactorSession struct { - Contract *ISemverTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ISemverRaw is an auto generated low-level Go binding around an Ethereum contract. -type ISemverRaw struct { - Contract *ISemver // Generic contract binding to access the raw methods on -} - -// ISemverCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ISemverCallerRaw struct { - Contract *ISemverCaller // Generic read-only contract binding to access the raw methods on -} - -// ISemverTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ISemverTransactorRaw struct { - Contract *ISemverTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewISemver creates a new instance of ISemver, bound to a specific deployed contract. -func NewISemver(address common.Address, backend bind.ContractBackend) (*ISemver, error) { - contract, err := bindISemver(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &ISemver{ISemverCaller: ISemverCaller{contract: contract}, ISemverTransactor: ISemverTransactor{contract: contract}, ISemverFilterer: ISemverFilterer{contract: contract}}, nil -} - -// NewISemverCaller creates a new read-only instance of ISemver, bound to a specific deployed contract. -func NewISemverCaller(address common.Address, caller bind.ContractCaller) (*ISemverCaller, error) { - contract, err := bindISemver(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &ISemverCaller{contract: contract}, nil -} - -// NewISemverTransactor creates a new write-only instance of ISemver, bound to a specific deployed contract. -func NewISemverTransactor(address common.Address, transactor bind.ContractTransactor) (*ISemverTransactor, error) { - contract, err := bindISemver(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &ISemverTransactor{contract: contract}, nil -} - -// NewISemverFilterer creates a new log filterer instance of ISemver, bound to a specific deployed contract. -func NewISemverFilterer(address common.Address, filterer bind.ContractFilterer) (*ISemverFilterer, error) { - contract, err := bindISemver(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &ISemverFilterer{contract: contract}, nil -} - -// bindISemver binds a generic wrapper to an already deployed contract. -func bindISemver(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(ISemverABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_ISemver *ISemverRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ISemver.Contract.ISemverCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_ISemver *ISemverRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ISemver.Contract.ISemverTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ISemver *ISemverRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ISemver.Contract.ISemverTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_ISemver *ISemverCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ISemver.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_ISemver *ISemverTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ISemver.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ISemver *ISemverTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ISemver.Contract.contract.Transact(opts, method, params...) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_ISemver *ISemverCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _ISemver.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_ISemver *ISemverSession) Version() (string, error) { - return _ISemver.Contract.Version(&_ISemver.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_ISemver *ISemverCallerSession) Version() (string, error) { - return _ISemver.Contract.Version(&_ISemver.CallOpts) -} diff --git a/op-chain-ops/upgrades/bindings/l1crossdomainmessenger.go b/op-chain-ops/upgrades/bindings/l1crossdomainmessenger.go deleted file mode 100644 index 7f0d35fc5ce5..000000000000 --- a/op-chain-ops/upgrades/bindings/l1crossdomainmessenger.go +++ /dev/null @@ -1,1609 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindings - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// L1CrossDomainMessengerMetaData contains all meta data concerning the L1CrossDomainMessenger contract. -var L1CrossDomainMessengerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"MESSAGE_VERSION\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_MESSENGER\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PORTAL\",\"outputs\":[{\"internalType\":\"contractOptimismPortal\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_CALL_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_RESERVED_GAS\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"}],\"name\":\"baseGas\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"failedMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractSuperchainConfig\",\"name\":\"_superchainConfig\",\"type\":\"address\"},{\"internalType\":\"contractOptimismPortal\",\"name\":\"_portal\",\"type\":\"address\"},{\"internalType\":\"contractSystemConfig\",\"name\":\"_systemConfig\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"otherMessenger\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"portal\",\"outputs\":[{\"internalType\":\"contractOptimismPortal\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"relayMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"successfulMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"superchainConfig\",\"outputs\":[{\"internalType\":\"contractSuperchainConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"systemConfig\",\"outputs\":[{\"internalType\":\"contractSystemConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xDomainMessageSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"FailedRelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"RelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"name\":\"SentMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SentMessageExtension1\",\"type\":\"event\"}]", -} - -// L1CrossDomainMessengerABI is the input ABI used to generate the binding from. -// Deprecated: Use L1CrossDomainMessengerMetaData.ABI instead. -var L1CrossDomainMessengerABI = L1CrossDomainMessengerMetaData.ABI - -// L1CrossDomainMessenger is an auto generated Go binding around an Ethereum contract. -type L1CrossDomainMessenger struct { - L1CrossDomainMessengerCaller // Read-only binding to the contract - L1CrossDomainMessengerTransactor // Write-only binding to the contract - L1CrossDomainMessengerFilterer // Log filterer for contract events -} - -// L1CrossDomainMessengerCaller is an auto generated read-only Go binding around an Ethereum contract. -type L1CrossDomainMessengerCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L1CrossDomainMessengerTransactor is an auto generated write-only Go binding around an Ethereum contract. -type L1CrossDomainMessengerTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L1CrossDomainMessengerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type L1CrossDomainMessengerFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L1CrossDomainMessengerSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type L1CrossDomainMessengerSession struct { - Contract *L1CrossDomainMessenger // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// L1CrossDomainMessengerCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type L1CrossDomainMessengerCallerSession struct { - Contract *L1CrossDomainMessengerCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// L1CrossDomainMessengerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type L1CrossDomainMessengerTransactorSession struct { - Contract *L1CrossDomainMessengerTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// L1CrossDomainMessengerRaw is an auto generated low-level Go binding around an Ethereum contract. -type L1CrossDomainMessengerRaw struct { - Contract *L1CrossDomainMessenger // Generic contract binding to access the raw methods on -} - -// L1CrossDomainMessengerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type L1CrossDomainMessengerCallerRaw struct { - Contract *L1CrossDomainMessengerCaller // Generic read-only contract binding to access the raw methods on -} - -// L1CrossDomainMessengerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type L1CrossDomainMessengerTransactorRaw struct { - Contract *L1CrossDomainMessengerTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewL1CrossDomainMessenger creates a new instance of L1CrossDomainMessenger, bound to a specific deployed contract. -func NewL1CrossDomainMessenger(address common.Address, backend bind.ContractBackend) (*L1CrossDomainMessenger, error) { - contract, err := bindL1CrossDomainMessenger(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &L1CrossDomainMessenger{L1CrossDomainMessengerCaller: L1CrossDomainMessengerCaller{contract: contract}, L1CrossDomainMessengerTransactor: L1CrossDomainMessengerTransactor{contract: contract}, L1CrossDomainMessengerFilterer: L1CrossDomainMessengerFilterer{contract: contract}}, nil -} - -// NewL1CrossDomainMessengerCaller creates a new read-only instance of L1CrossDomainMessenger, bound to a specific deployed contract. -func NewL1CrossDomainMessengerCaller(address common.Address, caller bind.ContractCaller) (*L1CrossDomainMessengerCaller, error) { - contract, err := bindL1CrossDomainMessenger(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &L1CrossDomainMessengerCaller{contract: contract}, nil -} - -// NewL1CrossDomainMessengerTransactor creates a new write-only instance of L1CrossDomainMessenger, bound to a specific deployed contract. -func NewL1CrossDomainMessengerTransactor(address common.Address, transactor bind.ContractTransactor) (*L1CrossDomainMessengerTransactor, error) { - contract, err := bindL1CrossDomainMessenger(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &L1CrossDomainMessengerTransactor{contract: contract}, nil -} - -// NewL1CrossDomainMessengerFilterer creates a new log filterer instance of L1CrossDomainMessenger, bound to a specific deployed contract. -func NewL1CrossDomainMessengerFilterer(address common.Address, filterer bind.ContractFilterer) (*L1CrossDomainMessengerFilterer, error) { - contract, err := bindL1CrossDomainMessenger(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &L1CrossDomainMessengerFilterer{contract: contract}, nil -} - -// bindL1CrossDomainMessenger binds a generic wrapper to an already deployed contract. -func bindL1CrossDomainMessenger(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(L1CrossDomainMessengerABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_L1CrossDomainMessenger *L1CrossDomainMessengerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _L1CrossDomainMessenger.Contract.L1CrossDomainMessengerCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_L1CrossDomainMessenger *L1CrossDomainMessengerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.L1CrossDomainMessengerTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_L1CrossDomainMessenger *L1CrossDomainMessengerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.L1CrossDomainMessengerTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _L1CrossDomainMessenger.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.contract.Transact(opts, method, params...) -} - -// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. -// -// Solidity: function MESSAGE_VERSION() view returns(uint16) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) MESSAGEVERSION(opts *bind.CallOpts) (uint16, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "MESSAGE_VERSION") - - if err != nil { - return *new(uint16), err - } - - out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) - - return out0, err - -} - -// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. -// -// Solidity: function MESSAGE_VERSION() view returns(uint16) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) MESSAGEVERSION() (uint16, error) { - return _L1CrossDomainMessenger.Contract.MESSAGEVERSION(&_L1CrossDomainMessenger.CallOpts) -} - -// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. -// -// Solidity: function MESSAGE_VERSION() view returns(uint16) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) MESSAGEVERSION() (uint16, error) { - return _L1CrossDomainMessenger.Contract.MESSAGEVERSION(&_L1CrossDomainMessenger.CallOpts) -} - -// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. -// -// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) MINGASCALLDATAOVERHEAD(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_CALLDATA_OVERHEAD") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. -// -// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) MINGASCALLDATAOVERHEAD() (uint64, error) { - return _L1CrossDomainMessenger.Contract.MINGASCALLDATAOVERHEAD(&_L1CrossDomainMessenger.CallOpts) -} - -// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. -// -// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) MINGASCALLDATAOVERHEAD() (uint64, error) { - return _L1CrossDomainMessenger.Contract.MINGASCALLDATAOVERHEAD(&_L1CrossDomainMessenger.CallOpts) -} - -// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) MINGASDYNAMICOVERHEADDENOMINATOR(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) MINGASDYNAMICOVERHEADDENOMINATOR() (uint64, error) { - return _L1CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADDENOMINATOR(&_L1CrossDomainMessenger.CallOpts) -} - -// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) MINGASDYNAMICOVERHEADDENOMINATOR() (uint64, error) { - return _L1CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADDENOMINATOR(&_L1CrossDomainMessenger.CallOpts) -} - -// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) MINGASDYNAMICOVERHEADNUMERATOR(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) MINGASDYNAMICOVERHEADNUMERATOR() (uint64, error) { - return _L1CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADNUMERATOR(&_L1CrossDomainMessenger.CallOpts) -} - -// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) MINGASDYNAMICOVERHEADNUMERATOR() (uint64, error) { - return _L1CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADNUMERATOR(&_L1CrossDomainMessenger.CallOpts) -} - -// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. -// -// Solidity: function OTHER_MESSENGER() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) OTHERMESSENGER(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "OTHER_MESSENGER") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. -// -// Solidity: function OTHER_MESSENGER() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) OTHERMESSENGER() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.OTHERMESSENGER(&_L1CrossDomainMessenger.CallOpts) -} - -// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. -// -// Solidity: function OTHER_MESSENGER() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) OTHERMESSENGER() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.OTHERMESSENGER(&_L1CrossDomainMessenger.CallOpts) -} - -// PORTAL is a free data retrieval call binding the contract method 0x0ff754ea. -// -// Solidity: function PORTAL() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) PORTAL(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "PORTAL") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// PORTAL is a free data retrieval call binding the contract method 0x0ff754ea. -// -// Solidity: function PORTAL() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) PORTAL() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.PORTAL(&_L1CrossDomainMessenger.CallOpts) -} - -// PORTAL is a free data retrieval call binding the contract method 0x0ff754ea. -// -// Solidity: function PORTAL() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) PORTAL() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.PORTAL(&_L1CrossDomainMessenger.CallOpts) -} - -// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. -// -// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) RELAYCALLOVERHEAD(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "RELAY_CALL_OVERHEAD") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. -// -// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) RELAYCALLOVERHEAD() (uint64, error) { - return _L1CrossDomainMessenger.Contract.RELAYCALLOVERHEAD(&_L1CrossDomainMessenger.CallOpts) -} - -// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. -// -// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) RELAYCALLOVERHEAD() (uint64, error) { - return _L1CrossDomainMessenger.Contract.RELAYCALLOVERHEAD(&_L1CrossDomainMessenger.CallOpts) -} - -// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. -// -// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) RELAYCONSTANTOVERHEAD(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "RELAY_CONSTANT_OVERHEAD") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. -// -// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) RELAYCONSTANTOVERHEAD() (uint64, error) { - return _L1CrossDomainMessenger.Contract.RELAYCONSTANTOVERHEAD(&_L1CrossDomainMessenger.CallOpts) -} - -// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. -// -// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) RELAYCONSTANTOVERHEAD() (uint64, error) { - return _L1CrossDomainMessenger.Contract.RELAYCONSTANTOVERHEAD(&_L1CrossDomainMessenger.CallOpts) -} - -// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. -// -// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) RELAYGASCHECKBUFFER(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "RELAY_GAS_CHECK_BUFFER") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. -// -// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) RELAYGASCHECKBUFFER() (uint64, error) { - return _L1CrossDomainMessenger.Contract.RELAYGASCHECKBUFFER(&_L1CrossDomainMessenger.CallOpts) -} - -// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. -// -// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) RELAYGASCHECKBUFFER() (uint64, error) { - return _L1CrossDomainMessenger.Contract.RELAYGASCHECKBUFFER(&_L1CrossDomainMessenger.CallOpts) -} - -// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. -// -// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) RELAYRESERVEDGAS(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "RELAY_RESERVED_GAS") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. -// -// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) RELAYRESERVEDGAS() (uint64, error) { - return _L1CrossDomainMessenger.Contract.RELAYRESERVEDGAS(&_L1CrossDomainMessenger.CallOpts) -} - -// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. -// -// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) RELAYRESERVEDGAS() (uint64, error) { - return _L1CrossDomainMessenger.Contract.RELAYRESERVEDGAS(&_L1CrossDomainMessenger.CallOpts) -} - -// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. -// -// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) BaseGas(opts *bind.CallOpts, _message []byte, _minGasLimit uint32) (uint64, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "baseGas", _message, _minGasLimit) - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. -// -// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) BaseGas(_message []byte, _minGasLimit uint32) (uint64, error) { - return _L1CrossDomainMessenger.Contract.BaseGas(&_L1CrossDomainMessenger.CallOpts, _message, _minGasLimit) -} - -// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. -// -// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) BaseGas(_message []byte, _minGasLimit uint32) (uint64, error) { - return _L1CrossDomainMessenger.Contract.BaseGas(&_L1CrossDomainMessenger.CallOpts, _message, _minGasLimit) -} - -// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. -// -// Solidity: function failedMessages(bytes32 ) view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) FailedMessages(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "failedMessages", arg0) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. -// -// Solidity: function failedMessages(bytes32 ) view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) FailedMessages(arg0 [32]byte) (bool, error) { - return _L1CrossDomainMessenger.Contract.FailedMessages(&_L1CrossDomainMessenger.CallOpts, arg0) -} - -// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. -// -// Solidity: function failedMessages(bytes32 ) view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) FailedMessages(arg0 [32]byte) (bool, error) { - return _L1CrossDomainMessenger.Contract.FailedMessages(&_L1CrossDomainMessenger.CallOpts, arg0) -} - -// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. -// -// Solidity: function messageNonce() view returns(uint256) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) MessageNonce(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "messageNonce") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. -// -// Solidity: function messageNonce() view returns(uint256) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) MessageNonce() (*big.Int, error) { - return _L1CrossDomainMessenger.Contract.MessageNonce(&_L1CrossDomainMessenger.CallOpts) -} - -// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. -// -// Solidity: function messageNonce() view returns(uint256) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) MessageNonce() (*big.Int, error) { - return _L1CrossDomainMessenger.Contract.MessageNonce(&_L1CrossDomainMessenger.CallOpts) -} - -// OtherMessenger is a free data retrieval call binding the contract method 0xdb505d80. -// -// Solidity: function otherMessenger() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) OtherMessenger(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "otherMessenger") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OtherMessenger is a free data retrieval call binding the contract method 0xdb505d80. -// -// Solidity: function otherMessenger() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) OtherMessenger() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.OtherMessenger(&_L1CrossDomainMessenger.CallOpts) -} - -// OtherMessenger is a free data retrieval call binding the contract method 0xdb505d80. -// -// Solidity: function otherMessenger() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) OtherMessenger() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.OtherMessenger(&_L1CrossDomainMessenger.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) Paused(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "paused") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) Paused() (bool, error) { - return _L1CrossDomainMessenger.Contract.Paused(&_L1CrossDomainMessenger.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) Paused() (bool, error) { - return _L1CrossDomainMessenger.Contract.Paused(&_L1CrossDomainMessenger.CallOpts) -} - -// Portal is a free data retrieval call binding the contract method 0x6425666b. -// -// Solidity: function portal() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) Portal(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "portal") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Portal is a free data retrieval call binding the contract method 0x6425666b. -// -// Solidity: function portal() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) Portal() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.Portal(&_L1CrossDomainMessenger.CallOpts) -} - -// Portal is a free data retrieval call binding the contract method 0x6425666b. -// -// Solidity: function portal() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) Portal() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.Portal(&_L1CrossDomainMessenger.CallOpts) -} - -// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. -// -// Solidity: function successfulMessages(bytes32 ) view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) SuccessfulMessages(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "successfulMessages", arg0) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. -// -// Solidity: function successfulMessages(bytes32 ) view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) SuccessfulMessages(arg0 [32]byte) (bool, error) { - return _L1CrossDomainMessenger.Contract.SuccessfulMessages(&_L1CrossDomainMessenger.CallOpts, arg0) -} - -// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. -// -// Solidity: function successfulMessages(bytes32 ) view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) SuccessfulMessages(arg0 [32]byte) (bool, error) { - return _L1CrossDomainMessenger.Contract.SuccessfulMessages(&_L1CrossDomainMessenger.CallOpts, arg0) -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) SuperchainConfig(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "superchainConfig") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) SuperchainConfig() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.SuperchainConfig(&_L1CrossDomainMessenger.CallOpts) -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) SuperchainConfig() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.SuperchainConfig(&_L1CrossDomainMessenger.CallOpts) -} - -// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. -// -// Solidity: function systemConfig() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) SystemConfig(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "systemConfig") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. -// -// Solidity: function systemConfig() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) SystemConfig() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.SystemConfig(&_L1CrossDomainMessenger.CallOpts) -} - -// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. -// -// Solidity: function systemConfig() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) SystemConfig() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.SystemConfig(&_L1CrossDomainMessenger.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) Version() (string, error) { - return _L1CrossDomainMessenger.Contract.Version(&_L1CrossDomainMessenger.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) Version() (string, error) { - return _L1CrossDomainMessenger.Contract.Version(&_L1CrossDomainMessenger.CallOpts) -} - -// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. -// -// Solidity: function xDomainMessageSender() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) XDomainMessageSender(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "xDomainMessageSender") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. -// -// Solidity: function xDomainMessageSender() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) XDomainMessageSender() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.XDomainMessageSender(&_L1CrossDomainMessenger.CallOpts) -} - -// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. -// -// Solidity: function xDomainMessageSender() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) XDomainMessageSender() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.XDomainMessageSender(&_L1CrossDomainMessenger.CallOpts) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. -// -// Solidity: function initialize(address _superchainConfig, address _portal, address _systemConfig) returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactor) Initialize(opts *bind.TransactOpts, _superchainConfig common.Address, _portal common.Address, _systemConfig common.Address) (*types.Transaction, error) { - return _L1CrossDomainMessenger.contract.Transact(opts, "initialize", _superchainConfig, _portal, _systemConfig) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. -// -// Solidity: function initialize(address _superchainConfig, address _portal, address _systemConfig) returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) Initialize(_superchainConfig common.Address, _portal common.Address, _systemConfig common.Address) (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.Initialize(&_L1CrossDomainMessenger.TransactOpts, _superchainConfig, _portal, _systemConfig) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. -// -// Solidity: function initialize(address _superchainConfig, address _portal, address _systemConfig) returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactorSession) Initialize(_superchainConfig common.Address, _portal common.Address, _systemConfig common.Address) (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.Initialize(&_L1CrossDomainMessenger.TransactOpts, _superchainConfig, _portal, _systemConfig) -} - -// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. -// -// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactor) RelayMessage(opts *bind.TransactOpts, _nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { - return _L1CrossDomainMessenger.contract.Transact(opts, "relayMessage", _nonce, _sender, _target, _value, _minGasLimit, _message) -} - -// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. -// -// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) RelayMessage(_nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.RelayMessage(&_L1CrossDomainMessenger.TransactOpts, _nonce, _sender, _target, _value, _minGasLimit, _message) -} - -// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. -// -// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactorSession) RelayMessage(_nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.RelayMessage(&_L1CrossDomainMessenger.TransactOpts, _nonce, _sender, _target, _value, _minGasLimit, _message) -} - -// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. -// -// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactor) SendMessage(opts *bind.TransactOpts, _target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { - return _L1CrossDomainMessenger.contract.Transact(opts, "sendMessage", _target, _message, _minGasLimit) -} - -// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. -// -// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) SendMessage(_target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.SendMessage(&_L1CrossDomainMessenger.TransactOpts, _target, _message, _minGasLimit) -} - -// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. -// -// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactorSession) SendMessage(_target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.SendMessage(&_L1CrossDomainMessenger.TransactOpts, _target, _message, _minGasLimit) -} - -// L1CrossDomainMessengerFailedRelayedMessageIterator is returned from FilterFailedRelayedMessage and is used to iterate over the raw logs and unpacked data for FailedRelayedMessage events raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerFailedRelayedMessageIterator struct { - Event *L1CrossDomainMessengerFailedRelayedMessage // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1CrossDomainMessengerFailedRelayedMessageIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerFailedRelayedMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerFailedRelayedMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1CrossDomainMessengerFailedRelayedMessageIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1CrossDomainMessengerFailedRelayedMessageIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1CrossDomainMessengerFailedRelayedMessage represents a FailedRelayedMessage event raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerFailedRelayedMessage struct { - MsgHash [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterFailedRelayedMessage is a free log retrieval operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. -// -// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) FilterFailedRelayedMessage(opts *bind.FilterOpts, msgHash [][32]byte) (*L1CrossDomainMessengerFailedRelayedMessageIterator, error) { - - var msgHashRule []interface{} - for _, msgHashItem := range msgHash { - msgHashRule = append(msgHashRule, msgHashItem) - } - - logs, sub, err := _L1CrossDomainMessenger.contract.FilterLogs(opts, "FailedRelayedMessage", msgHashRule) - if err != nil { - return nil, err - } - return &L1CrossDomainMessengerFailedRelayedMessageIterator{contract: _L1CrossDomainMessenger.contract, event: "FailedRelayedMessage", logs: logs, sub: sub}, nil -} - -// WatchFailedRelayedMessage is a free log subscription operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. -// -// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchFailedRelayedMessage(opts *bind.WatchOpts, sink chan<- *L1CrossDomainMessengerFailedRelayedMessage, msgHash [][32]byte) (event.Subscription, error) { - - var msgHashRule []interface{} - for _, msgHashItem := range msgHash { - msgHashRule = append(msgHashRule, msgHashItem) - } - - logs, sub, err := _L1CrossDomainMessenger.contract.WatchLogs(opts, "FailedRelayedMessage", msgHashRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1CrossDomainMessengerFailedRelayedMessage) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "FailedRelayedMessage", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseFailedRelayedMessage is a log parse operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. -// -// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) ParseFailedRelayedMessage(log types.Log) (*L1CrossDomainMessengerFailedRelayedMessage, error) { - event := new(L1CrossDomainMessengerFailedRelayedMessage) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "FailedRelayedMessage", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1CrossDomainMessengerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerInitializedIterator struct { - Event *L1CrossDomainMessengerInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1CrossDomainMessengerInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1CrossDomainMessengerInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1CrossDomainMessengerInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1CrossDomainMessengerInitialized represents a Initialized event raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) FilterInitialized(opts *bind.FilterOpts) (*L1CrossDomainMessengerInitializedIterator, error) { - - logs, sub, err := _L1CrossDomainMessenger.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &L1CrossDomainMessengerInitializedIterator{contract: _L1CrossDomainMessenger.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *L1CrossDomainMessengerInitialized) (event.Subscription, error) { - - logs, sub, err := _L1CrossDomainMessenger.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1CrossDomainMessengerInitialized) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) ParseInitialized(log types.Log) (*L1CrossDomainMessengerInitialized, error) { - event := new(L1CrossDomainMessengerInitialized) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1CrossDomainMessengerRelayedMessageIterator is returned from FilterRelayedMessage and is used to iterate over the raw logs and unpacked data for RelayedMessage events raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerRelayedMessageIterator struct { - Event *L1CrossDomainMessengerRelayedMessage // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1CrossDomainMessengerRelayedMessageIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerRelayedMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerRelayedMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1CrossDomainMessengerRelayedMessageIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1CrossDomainMessengerRelayedMessageIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1CrossDomainMessengerRelayedMessage represents a RelayedMessage event raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerRelayedMessage struct { - MsgHash [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRelayedMessage is a free log retrieval operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. -// -// Solidity: event RelayedMessage(bytes32 indexed msgHash) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) FilterRelayedMessage(opts *bind.FilterOpts, msgHash [][32]byte) (*L1CrossDomainMessengerRelayedMessageIterator, error) { - - var msgHashRule []interface{} - for _, msgHashItem := range msgHash { - msgHashRule = append(msgHashRule, msgHashItem) - } - - logs, sub, err := _L1CrossDomainMessenger.contract.FilterLogs(opts, "RelayedMessage", msgHashRule) - if err != nil { - return nil, err - } - return &L1CrossDomainMessengerRelayedMessageIterator{contract: _L1CrossDomainMessenger.contract, event: "RelayedMessage", logs: logs, sub: sub}, nil -} - -// WatchRelayedMessage is a free log subscription operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. -// -// Solidity: event RelayedMessage(bytes32 indexed msgHash) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchRelayedMessage(opts *bind.WatchOpts, sink chan<- *L1CrossDomainMessengerRelayedMessage, msgHash [][32]byte) (event.Subscription, error) { - - var msgHashRule []interface{} - for _, msgHashItem := range msgHash { - msgHashRule = append(msgHashRule, msgHashItem) - } - - logs, sub, err := _L1CrossDomainMessenger.contract.WatchLogs(opts, "RelayedMessage", msgHashRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1CrossDomainMessengerRelayedMessage) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "RelayedMessage", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseRelayedMessage is a log parse operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. -// -// Solidity: event RelayedMessage(bytes32 indexed msgHash) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) ParseRelayedMessage(log types.Log) (*L1CrossDomainMessengerRelayedMessage, error) { - event := new(L1CrossDomainMessengerRelayedMessage) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "RelayedMessage", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1CrossDomainMessengerSentMessageIterator is returned from FilterSentMessage and is used to iterate over the raw logs and unpacked data for SentMessage events raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerSentMessageIterator struct { - Event *L1CrossDomainMessengerSentMessage // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1CrossDomainMessengerSentMessageIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerSentMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerSentMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1CrossDomainMessengerSentMessageIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1CrossDomainMessengerSentMessageIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1CrossDomainMessengerSentMessage represents a SentMessage event raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerSentMessage struct { - Target common.Address - Sender common.Address - Message []byte - MessageNonce *big.Int - GasLimit *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSentMessage is a free log retrieval operation binding the contract event 0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a. -// -// Solidity: event SentMessage(address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) FilterSentMessage(opts *bind.FilterOpts, target []common.Address) (*L1CrossDomainMessengerSentMessageIterator, error) { - - var targetRule []interface{} - for _, targetItem := range target { - targetRule = append(targetRule, targetItem) - } - - logs, sub, err := _L1CrossDomainMessenger.contract.FilterLogs(opts, "SentMessage", targetRule) - if err != nil { - return nil, err - } - return &L1CrossDomainMessengerSentMessageIterator{contract: _L1CrossDomainMessenger.contract, event: "SentMessage", logs: logs, sub: sub}, nil -} - -// WatchSentMessage is a free log subscription operation binding the contract event 0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a. -// -// Solidity: event SentMessage(address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchSentMessage(opts *bind.WatchOpts, sink chan<- *L1CrossDomainMessengerSentMessage, target []common.Address) (event.Subscription, error) { - - var targetRule []interface{} - for _, targetItem := range target { - targetRule = append(targetRule, targetItem) - } - - logs, sub, err := _L1CrossDomainMessenger.contract.WatchLogs(opts, "SentMessage", targetRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1CrossDomainMessengerSentMessage) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "SentMessage", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSentMessage is a log parse operation binding the contract event 0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a. -// -// Solidity: event SentMessage(address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) ParseSentMessage(log types.Log) (*L1CrossDomainMessengerSentMessage, error) { - event := new(L1CrossDomainMessengerSentMessage) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "SentMessage", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1CrossDomainMessengerSentMessageExtension1Iterator is returned from FilterSentMessageExtension1 and is used to iterate over the raw logs and unpacked data for SentMessageExtension1 events raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerSentMessageExtension1Iterator struct { - Event *L1CrossDomainMessengerSentMessageExtension1 // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1CrossDomainMessengerSentMessageExtension1Iterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerSentMessageExtension1) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerSentMessageExtension1) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1CrossDomainMessengerSentMessageExtension1Iterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1CrossDomainMessengerSentMessageExtension1Iterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1CrossDomainMessengerSentMessageExtension1 represents a SentMessageExtension1 event raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerSentMessageExtension1 struct { - Sender common.Address - Value *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSentMessageExtension1 is a free log retrieval operation binding the contract event 0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546. -// -// Solidity: event SentMessageExtension1(address indexed sender, uint256 value) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) FilterSentMessageExtension1(opts *bind.FilterOpts, sender []common.Address) (*L1CrossDomainMessengerSentMessageExtension1Iterator, error) { - - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _L1CrossDomainMessenger.contract.FilterLogs(opts, "SentMessageExtension1", senderRule) - if err != nil { - return nil, err - } - return &L1CrossDomainMessengerSentMessageExtension1Iterator{contract: _L1CrossDomainMessenger.contract, event: "SentMessageExtension1", logs: logs, sub: sub}, nil -} - -// WatchSentMessageExtension1 is a free log subscription operation binding the contract event 0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546. -// -// Solidity: event SentMessageExtension1(address indexed sender, uint256 value) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchSentMessageExtension1(opts *bind.WatchOpts, sink chan<- *L1CrossDomainMessengerSentMessageExtension1, sender []common.Address) (event.Subscription, error) { - - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _L1CrossDomainMessenger.contract.WatchLogs(opts, "SentMessageExtension1", senderRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1CrossDomainMessengerSentMessageExtension1) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "SentMessageExtension1", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSentMessageExtension1 is a log parse operation binding the contract event 0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546. -// -// Solidity: event SentMessageExtension1(address indexed sender, uint256 value) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) ParseSentMessageExtension1(log types.Log) (*L1CrossDomainMessengerSentMessageExtension1, error) { - event := new(L1CrossDomainMessengerSentMessageExtension1) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "SentMessageExtension1", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/op-chain-ops/upgrades/bindings/l1erc721bridge.go b/op-chain-ops/upgrades/bindings/l1erc721bridge.go deleted file mode 100644 index 4e847b8de95d..000000000000 --- a/op-chain-ops/upgrades/bindings/l1erc721bridge.go +++ /dev/null @@ -1,976 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindings - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// L1ERC721BridgeMetaData contains all meta data concerning the L1ERC721Bridge contract. -var L1ERC721BridgeMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_BRIDGE\",\"outputs\":[{\"internalType\":\"contractStandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC721\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC721To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"deposits\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeERC721\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"_messenger\",\"type\":\"address\"},{\"internalType\":\"contractSuperchainConfig\",\"name\":\"_superchainConfig\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messenger\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"otherBridge\",\"outputs\":[{\"internalType\":\"contractStandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"superchainConfig\",\"outputs\":[{\"internalType\":\"contractSuperchainConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC721BridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC721BridgeInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"}]", -} - -// L1ERC721BridgeABI is the input ABI used to generate the binding from. -// Deprecated: Use L1ERC721BridgeMetaData.ABI instead. -var L1ERC721BridgeABI = L1ERC721BridgeMetaData.ABI - -// L1ERC721Bridge is an auto generated Go binding around an Ethereum contract. -type L1ERC721Bridge struct { - L1ERC721BridgeCaller // Read-only binding to the contract - L1ERC721BridgeTransactor // Write-only binding to the contract - L1ERC721BridgeFilterer // Log filterer for contract events -} - -// L1ERC721BridgeCaller is an auto generated read-only Go binding around an Ethereum contract. -type L1ERC721BridgeCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L1ERC721BridgeTransactor is an auto generated write-only Go binding around an Ethereum contract. -type L1ERC721BridgeTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L1ERC721BridgeFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type L1ERC721BridgeFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L1ERC721BridgeSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type L1ERC721BridgeSession struct { - Contract *L1ERC721Bridge // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// L1ERC721BridgeCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type L1ERC721BridgeCallerSession struct { - Contract *L1ERC721BridgeCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// L1ERC721BridgeTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type L1ERC721BridgeTransactorSession struct { - Contract *L1ERC721BridgeTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// L1ERC721BridgeRaw is an auto generated low-level Go binding around an Ethereum contract. -type L1ERC721BridgeRaw struct { - Contract *L1ERC721Bridge // Generic contract binding to access the raw methods on -} - -// L1ERC721BridgeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type L1ERC721BridgeCallerRaw struct { - Contract *L1ERC721BridgeCaller // Generic read-only contract binding to access the raw methods on -} - -// L1ERC721BridgeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type L1ERC721BridgeTransactorRaw struct { - Contract *L1ERC721BridgeTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewL1ERC721Bridge creates a new instance of L1ERC721Bridge, bound to a specific deployed contract. -func NewL1ERC721Bridge(address common.Address, backend bind.ContractBackend) (*L1ERC721Bridge, error) { - contract, err := bindL1ERC721Bridge(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &L1ERC721Bridge{L1ERC721BridgeCaller: L1ERC721BridgeCaller{contract: contract}, L1ERC721BridgeTransactor: L1ERC721BridgeTransactor{contract: contract}, L1ERC721BridgeFilterer: L1ERC721BridgeFilterer{contract: contract}}, nil -} - -// NewL1ERC721BridgeCaller creates a new read-only instance of L1ERC721Bridge, bound to a specific deployed contract. -func NewL1ERC721BridgeCaller(address common.Address, caller bind.ContractCaller) (*L1ERC721BridgeCaller, error) { - contract, err := bindL1ERC721Bridge(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &L1ERC721BridgeCaller{contract: contract}, nil -} - -// NewL1ERC721BridgeTransactor creates a new write-only instance of L1ERC721Bridge, bound to a specific deployed contract. -func NewL1ERC721BridgeTransactor(address common.Address, transactor bind.ContractTransactor) (*L1ERC721BridgeTransactor, error) { - contract, err := bindL1ERC721Bridge(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &L1ERC721BridgeTransactor{contract: contract}, nil -} - -// NewL1ERC721BridgeFilterer creates a new log filterer instance of L1ERC721Bridge, bound to a specific deployed contract. -func NewL1ERC721BridgeFilterer(address common.Address, filterer bind.ContractFilterer) (*L1ERC721BridgeFilterer, error) { - contract, err := bindL1ERC721Bridge(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &L1ERC721BridgeFilterer{contract: contract}, nil -} - -// bindL1ERC721Bridge binds a generic wrapper to an already deployed contract. -func bindL1ERC721Bridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(L1ERC721BridgeABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_L1ERC721Bridge *L1ERC721BridgeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _L1ERC721Bridge.Contract.L1ERC721BridgeCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_L1ERC721Bridge *L1ERC721BridgeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L1ERC721Bridge.Contract.L1ERC721BridgeTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_L1ERC721Bridge *L1ERC721BridgeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _L1ERC721Bridge.Contract.L1ERC721BridgeTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_L1ERC721Bridge *L1ERC721BridgeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _L1ERC721Bridge.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_L1ERC721Bridge *L1ERC721BridgeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L1ERC721Bridge.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_L1ERC721Bridge *L1ERC721BridgeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _L1ERC721Bridge.Contract.contract.Transact(opts, method, params...) -} - -// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. -// -// Solidity: function MESSENGER() view returns(address) -func (_L1ERC721Bridge *L1ERC721BridgeCaller) MESSENGER(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1ERC721Bridge.contract.Call(opts, &out, "MESSENGER") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. -// -// Solidity: function MESSENGER() view returns(address) -func (_L1ERC721Bridge *L1ERC721BridgeSession) MESSENGER() (common.Address, error) { - return _L1ERC721Bridge.Contract.MESSENGER(&_L1ERC721Bridge.CallOpts) -} - -// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. -// -// Solidity: function MESSENGER() view returns(address) -func (_L1ERC721Bridge *L1ERC721BridgeCallerSession) MESSENGER() (common.Address, error) { - return _L1ERC721Bridge.Contract.MESSENGER(&_L1ERC721Bridge.CallOpts) -} - -// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. -// -// Solidity: function OTHER_BRIDGE() view returns(address) -func (_L1ERC721Bridge *L1ERC721BridgeCaller) OTHERBRIDGE(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1ERC721Bridge.contract.Call(opts, &out, "OTHER_BRIDGE") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. -// -// Solidity: function OTHER_BRIDGE() view returns(address) -func (_L1ERC721Bridge *L1ERC721BridgeSession) OTHERBRIDGE() (common.Address, error) { - return _L1ERC721Bridge.Contract.OTHERBRIDGE(&_L1ERC721Bridge.CallOpts) -} - -// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. -// -// Solidity: function OTHER_BRIDGE() view returns(address) -func (_L1ERC721Bridge *L1ERC721BridgeCallerSession) OTHERBRIDGE() (common.Address, error) { - return _L1ERC721Bridge.Contract.OTHERBRIDGE(&_L1ERC721Bridge.CallOpts) -} - -// Deposits is a free data retrieval call binding the contract method 0x5d93a3fc. -// -// Solidity: function deposits(address , address , uint256 ) view returns(bool) -func (_L1ERC721Bridge *L1ERC721BridgeCaller) Deposits(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 *big.Int) (bool, error) { - var out []interface{} - err := _L1ERC721Bridge.contract.Call(opts, &out, "deposits", arg0, arg1, arg2) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Deposits is a free data retrieval call binding the contract method 0x5d93a3fc. -// -// Solidity: function deposits(address , address , uint256 ) view returns(bool) -func (_L1ERC721Bridge *L1ERC721BridgeSession) Deposits(arg0 common.Address, arg1 common.Address, arg2 *big.Int) (bool, error) { - return _L1ERC721Bridge.Contract.Deposits(&_L1ERC721Bridge.CallOpts, arg0, arg1, arg2) -} - -// Deposits is a free data retrieval call binding the contract method 0x5d93a3fc. -// -// Solidity: function deposits(address , address , uint256 ) view returns(bool) -func (_L1ERC721Bridge *L1ERC721BridgeCallerSession) Deposits(arg0 common.Address, arg1 common.Address, arg2 *big.Int) (bool, error) { - return _L1ERC721Bridge.Contract.Deposits(&_L1ERC721Bridge.CallOpts, arg0, arg1, arg2) -} - -// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. -// -// Solidity: function messenger() view returns(address) -func (_L1ERC721Bridge *L1ERC721BridgeCaller) Messenger(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1ERC721Bridge.contract.Call(opts, &out, "messenger") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. -// -// Solidity: function messenger() view returns(address) -func (_L1ERC721Bridge *L1ERC721BridgeSession) Messenger() (common.Address, error) { - return _L1ERC721Bridge.Contract.Messenger(&_L1ERC721Bridge.CallOpts) -} - -// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. -// -// Solidity: function messenger() view returns(address) -func (_L1ERC721Bridge *L1ERC721BridgeCallerSession) Messenger() (common.Address, error) { - return _L1ERC721Bridge.Contract.Messenger(&_L1ERC721Bridge.CallOpts) -} - -// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. -// -// Solidity: function otherBridge() view returns(address) -func (_L1ERC721Bridge *L1ERC721BridgeCaller) OtherBridge(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1ERC721Bridge.contract.Call(opts, &out, "otherBridge") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. -// -// Solidity: function otherBridge() view returns(address) -func (_L1ERC721Bridge *L1ERC721BridgeSession) OtherBridge() (common.Address, error) { - return _L1ERC721Bridge.Contract.OtherBridge(&_L1ERC721Bridge.CallOpts) -} - -// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. -// -// Solidity: function otherBridge() view returns(address) -func (_L1ERC721Bridge *L1ERC721BridgeCallerSession) OtherBridge() (common.Address, error) { - return _L1ERC721Bridge.Contract.OtherBridge(&_L1ERC721Bridge.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_L1ERC721Bridge *L1ERC721BridgeCaller) Paused(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _L1ERC721Bridge.contract.Call(opts, &out, "paused") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_L1ERC721Bridge *L1ERC721BridgeSession) Paused() (bool, error) { - return _L1ERC721Bridge.Contract.Paused(&_L1ERC721Bridge.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_L1ERC721Bridge *L1ERC721BridgeCallerSession) Paused() (bool, error) { - return _L1ERC721Bridge.Contract.Paused(&_L1ERC721Bridge.CallOpts) -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_L1ERC721Bridge *L1ERC721BridgeCaller) SuperchainConfig(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1ERC721Bridge.contract.Call(opts, &out, "superchainConfig") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_L1ERC721Bridge *L1ERC721BridgeSession) SuperchainConfig() (common.Address, error) { - return _L1ERC721Bridge.Contract.SuperchainConfig(&_L1ERC721Bridge.CallOpts) -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_L1ERC721Bridge *L1ERC721BridgeCallerSession) SuperchainConfig() (common.Address, error) { - return _L1ERC721Bridge.Contract.SuperchainConfig(&_L1ERC721Bridge.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L1ERC721Bridge *L1ERC721BridgeCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _L1ERC721Bridge.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L1ERC721Bridge *L1ERC721BridgeSession) Version() (string, error) { - return _L1ERC721Bridge.Contract.Version(&_L1ERC721Bridge.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L1ERC721Bridge *L1ERC721BridgeCallerSession) Version() (string, error) { - return _L1ERC721Bridge.Contract.Version(&_L1ERC721Bridge.CallOpts) -} - -// BridgeERC721 is a paid mutator transaction binding the contract method 0x3687011a. -// -// Solidity: function bridgeERC721(address _localToken, address _remoteToken, uint256 _tokenId, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1ERC721Bridge *L1ERC721BridgeTransactor) BridgeERC721(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _tokenId *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1ERC721Bridge.contract.Transact(opts, "bridgeERC721", _localToken, _remoteToken, _tokenId, _minGasLimit, _extraData) -} - -// BridgeERC721 is a paid mutator transaction binding the contract method 0x3687011a. -// -// Solidity: function bridgeERC721(address _localToken, address _remoteToken, uint256 _tokenId, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1ERC721Bridge *L1ERC721BridgeSession) BridgeERC721(_localToken common.Address, _remoteToken common.Address, _tokenId *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1ERC721Bridge.Contract.BridgeERC721(&_L1ERC721Bridge.TransactOpts, _localToken, _remoteToken, _tokenId, _minGasLimit, _extraData) -} - -// BridgeERC721 is a paid mutator transaction binding the contract method 0x3687011a. -// -// Solidity: function bridgeERC721(address _localToken, address _remoteToken, uint256 _tokenId, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1ERC721Bridge *L1ERC721BridgeTransactorSession) BridgeERC721(_localToken common.Address, _remoteToken common.Address, _tokenId *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1ERC721Bridge.Contract.BridgeERC721(&_L1ERC721Bridge.TransactOpts, _localToken, _remoteToken, _tokenId, _minGasLimit, _extraData) -} - -// BridgeERC721To is a paid mutator transaction binding the contract method 0xaa557452. -// -// Solidity: function bridgeERC721To(address _localToken, address _remoteToken, address _to, uint256 _tokenId, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1ERC721Bridge *L1ERC721BridgeTransactor) BridgeERC721To(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _to common.Address, _tokenId *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1ERC721Bridge.contract.Transact(opts, "bridgeERC721To", _localToken, _remoteToken, _to, _tokenId, _minGasLimit, _extraData) -} - -// BridgeERC721To is a paid mutator transaction binding the contract method 0xaa557452. -// -// Solidity: function bridgeERC721To(address _localToken, address _remoteToken, address _to, uint256 _tokenId, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1ERC721Bridge *L1ERC721BridgeSession) BridgeERC721To(_localToken common.Address, _remoteToken common.Address, _to common.Address, _tokenId *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1ERC721Bridge.Contract.BridgeERC721To(&_L1ERC721Bridge.TransactOpts, _localToken, _remoteToken, _to, _tokenId, _minGasLimit, _extraData) -} - -// BridgeERC721To is a paid mutator transaction binding the contract method 0xaa557452. -// -// Solidity: function bridgeERC721To(address _localToken, address _remoteToken, address _to, uint256 _tokenId, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1ERC721Bridge *L1ERC721BridgeTransactorSession) BridgeERC721To(_localToken common.Address, _remoteToken common.Address, _to common.Address, _tokenId *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1ERC721Bridge.Contract.BridgeERC721To(&_L1ERC721Bridge.TransactOpts, _localToken, _remoteToken, _to, _tokenId, _minGasLimit, _extraData) -} - -// FinalizeBridgeERC721 is a paid mutator transaction binding the contract method 0x761f4493. -// -// Solidity: function finalizeBridgeERC721(address _localToken, address _remoteToken, address _from, address _to, uint256 _tokenId, bytes _extraData) returns() -func (_L1ERC721Bridge *L1ERC721BridgeTransactor) FinalizeBridgeERC721(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _tokenId *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1ERC721Bridge.contract.Transact(opts, "finalizeBridgeERC721", _localToken, _remoteToken, _from, _to, _tokenId, _extraData) -} - -// FinalizeBridgeERC721 is a paid mutator transaction binding the contract method 0x761f4493. -// -// Solidity: function finalizeBridgeERC721(address _localToken, address _remoteToken, address _from, address _to, uint256 _tokenId, bytes _extraData) returns() -func (_L1ERC721Bridge *L1ERC721BridgeSession) FinalizeBridgeERC721(_localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _tokenId *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1ERC721Bridge.Contract.FinalizeBridgeERC721(&_L1ERC721Bridge.TransactOpts, _localToken, _remoteToken, _from, _to, _tokenId, _extraData) -} - -// FinalizeBridgeERC721 is a paid mutator transaction binding the contract method 0x761f4493. -// -// Solidity: function finalizeBridgeERC721(address _localToken, address _remoteToken, address _from, address _to, uint256 _tokenId, bytes _extraData) returns() -func (_L1ERC721Bridge *L1ERC721BridgeTransactorSession) FinalizeBridgeERC721(_localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _tokenId *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1ERC721Bridge.Contract.FinalizeBridgeERC721(&_L1ERC721Bridge.TransactOpts, _localToken, _remoteToken, _from, _to, _tokenId, _extraData) -} - -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _messenger, address _superchainConfig) returns() -func (_L1ERC721Bridge *L1ERC721BridgeTransactor) Initialize(opts *bind.TransactOpts, _messenger common.Address, _superchainConfig common.Address) (*types.Transaction, error) { - return _L1ERC721Bridge.contract.Transact(opts, "initialize", _messenger, _superchainConfig) -} - -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _messenger, address _superchainConfig) returns() -func (_L1ERC721Bridge *L1ERC721BridgeSession) Initialize(_messenger common.Address, _superchainConfig common.Address) (*types.Transaction, error) { - return _L1ERC721Bridge.Contract.Initialize(&_L1ERC721Bridge.TransactOpts, _messenger, _superchainConfig) -} - -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _messenger, address _superchainConfig) returns() -func (_L1ERC721Bridge *L1ERC721BridgeTransactorSession) Initialize(_messenger common.Address, _superchainConfig common.Address) (*types.Transaction, error) { - return _L1ERC721Bridge.Contract.Initialize(&_L1ERC721Bridge.TransactOpts, _messenger, _superchainConfig) -} - -// L1ERC721BridgeERC721BridgeFinalizedIterator is returned from FilterERC721BridgeFinalized and is used to iterate over the raw logs and unpacked data for ERC721BridgeFinalized events raised by the L1ERC721Bridge contract. -type L1ERC721BridgeERC721BridgeFinalizedIterator struct { - Event *L1ERC721BridgeERC721BridgeFinalized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1ERC721BridgeERC721BridgeFinalizedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1ERC721BridgeERC721BridgeFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1ERC721BridgeERC721BridgeFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1ERC721BridgeERC721BridgeFinalizedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1ERC721BridgeERC721BridgeFinalizedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1ERC721BridgeERC721BridgeFinalized represents a ERC721BridgeFinalized event raised by the L1ERC721Bridge contract. -type L1ERC721BridgeERC721BridgeFinalized struct { - LocalToken common.Address - RemoteToken common.Address - From common.Address - To common.Address - TokenId *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterERC721BridgeFinalized is a free log retrieval operation binding the contract event 0x1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac. -// -// Solidity: event ERC721BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 tokenId, bytes extraData) -func (_L1ERC721Bridge *L1ERC721BridgeFilterer) FilterERC721BridgeFinalized(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address, from []common.Address) (*L1ERC721BridgeERC721BridgeFinalizedIterator, error) { - - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L1ERC721Bridge.contract.FilterLogs(opts, "ERC721BridgeFinalized", localTokenRule, remoteTokenRule, fromRule) - if err != nil { - return nil, err - } - return &L1ERC721BridgeERC721BridgeFinalizedIterator{contract: _L1ERC721Bridge.contract, event: "ERC721BridgeFinalized", logs: logs, sub: sub}, nil -} - -// WatchERC721BridgeFinalized is a free log subscription operation binding the contract event 0x1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac. -// -// Solidity: event ERC721BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 tokenId, bytes extraData) -func (_L1ERC721Bridge *L1ERC721BridgeFilterer) WatchERC721BridgeFinalized(opts *bind.WatchOpts, sink chan<- *L1ERC721BridgeERC721BridgeFinalized, localToken []common.Address, remoteToken []common.Address, from []common.Address) (event.Subscription, error) { - - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L1ERC721Bridge.contract.WatchLogs(opts, "ERC721BridgeFinalized", localTokenRule, remoteTokenRule, fromRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1ERC721BridgeERC721BridgeFinalized) - if err := _L1ERC721Bridge.contract.UnpackLog(event, "ERC721BridgeFinalized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseERC721BridgeFinalized is a log parse operation binding the contract event 0x1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac. -// -// Solidity: event ERC721BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 tokenId, bytes extraData) -func (_L1ERC721Bridge *L1ERC721BridgeFilterer) ParseERC721BridgeFinalized(log types.Log) (*L1ERC721BridgeERC721BridgeFinalized, error) { - event := new(L1ERC721BridgeERC721BridgeFinalized) - if err := _L1ERC721Bridge.contract.UnpackLog(event, "ERC721BridgeFinalized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1ERC721BridgeERC721BridgeInitiatedIterator is returned from FilterERC721BridgeInitiated and is used to iterate over the raw logs and unpacked data for ERC721BridgeInitiated events raised by the L1ERC721Bridge contract. -type L1ERC721BridgeERC721BridgeInitiatedIterator struct { - Event *L1ERC721BridgeERC721BridgeInitiated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1ERC721BridgeERC721BridgeInitiatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1ERC721BridgeERC721BridgeInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1ERC721BridgeERC721BridgeInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1ERC721BridgeERC721BridgeInitiatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1ERC721BridgeERC721BridgeInitiatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1ERC721BridgeERC721BridgeInitiated represents a ERC721BridgeInitiated event raised by the L1ERC721Bridge contract. -type L1ERC721BridgeERC721BridgeInitiated struct { - LocalToken common.Address - RemoteToken common.Address - From common.Address - To common.Address - TokenId *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterERC721BridgeInitiated is a free log retrieval operation binding the contract event 0xb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a5. -// -// Solidity: event ERC721BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 tokenId, bytes extraData) -func (_L1ERC721Bridge *L1ERC721BridgeFilterer) FilterERC721BridgeInitiated(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address, from []common.Address) (*L1ERC721BridgeERC721BridgeInitiatedIterator, error) { - - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L1ERC721Bridge.contract.FilterLogs(opts, "ERC721BridgeInitiated", localTokenRule, remoteTokenRule, fromRule) - if err != nil { - return nil, err - } - return &L1ERC721BridgeERC721BridgeInitiatedIterator{contract: _L1ERC721Bridge.contract, event: "ERC721BridgeInitiated", logs: logs, sub: sub}, nil -} - -// WatchERC721BridgeInitiated is a free log subscription operation binding the contract event 0xb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a5. -// -// Solidity: event ERC721BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 tokenId, bytes extraData) -func (_L1ERC721Bridge *L1ERC721BridgeFilterer) WatchERC721BridgeInitiated(opts *bind.WatchOpts, sink chan<- *L1ERC721BridgeERC721BridgeInitiated, localToken []common.Address, remoteToken []common.Address, from []common.Address) (event.Subscription, error) { - - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L1ERC721Bridge.contract.WatchLogs(opts, "ERC721BridgeInitiated", localTokenRule, remoteTokenRule, fromRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1ERC721BridgeERC721BridgeInitiated) - if err := _L1ERC721Bridge.contract.UnpackLog(event, "ERC721BridgeInitiated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseERC721BridgeInitiated is a log parse operation binding the contract event 0xb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a5. -// -// Solidity: event ERC721BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 tokenId, bytes extraData) -func (_L1ERC721Bridge *L1ERC721BridgeFilterer) ParseERC721BridgeInitiated(log types.Log) (*L1ERC721BridgeERC721BridgeInitiated, error) { - event := new(L1ERC721BridgeERC721BridgeInitiated) - if err := _L1ERC721Bridge.contract.UnpackLog(event, "ERC721BridgeInitiated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1ERC721BridgeInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the L1ERC721Bridge contract. -type L1ERC721BridgeInitializedIterator struct { - Event *L1ERC721BridgeInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1ERC721BridgeInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1ERC721BridgeInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1ERC721BridgeInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1ERC721BridgeInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1ERC721BridgeInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1ERC721BridgeInitialized represents a Initialized event raised by the L1ERC721Bridge contract. -type L1ERC721BridgeInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L1ERC721Bridge *L1ERC721BridgeFilterer) FilterInitialized(opts *bind.FilterOpts) (*L1ERC721BridgeInitializedIterator, error) { - - logs, sub, err := _L1ERC721Bridge.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &L1ERC721BridgeInitializedIterator{contract: _L1ERC721Bridge.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L1ERC721Bridge *L1ERC721BridgeFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *L1ERC721BridgeInitialized) (event.Subscription, error) { - - logs, sub, err := _L1ERC721Bridge.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1ERC721BridgeInitialized) - if err := _L1ERC721Bridge.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L1ERC721Bridge *L1ERC721BridgeFilterer) ParseInitialized(log types.Log) (*L1ERC721BridgeInitialized, error) { - event := new(L1ERC721BridgeInitialized) - if err := _L1ERC721Bridge.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/op-chain-ops/upgrades/bindings/l1standardbridge.go b/op-chain-ops/upgrades/bindings/l1standardbridge.go deleted file mode 100644 index bbdbcd0bb9c5..000000000000 --- a/op-chain-ops/upgrades/bindings/l1standardbridge.go +++ /dev/null @@ -1,2198 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindings - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// L1StandardBridgeMetaData contains all meta data concerning the L1StandardBridge contract. -var L1StandardBridgeMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_BRIDGE\",\"outputs\":[{\"internalType\":\"contractStandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC20To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeETHTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_l2Token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"depositERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"depositERC20To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"depositETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"depositETHTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"deposits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeERC20Withdrawal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeETHWithdrawal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"_messenger\",\"type\":\"address\"},{\"internalType\":\"contractSuperchainConfig\",\"name\":\"_superchainConfig\",\"type\":\"address\"},{\"internalType\":\"contractSystemConfig\",\"name\":\"_systemConfig\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2TokenBridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messenger\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"otherBridge\",\"outputs\":[{\"internalType\":\"contractStandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"superchainConfig\",\"outputs\":[{\"internalType\":\"contractSuperchainConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"systemConfig\",\"outputs\":[{\"internalType\":\"contractSystemConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20BridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20BridgeInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20DepositInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20WithdrawalFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHBridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHBridgeInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHDepositInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHWithdrawalFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"}]", -} - -// L1StandardBridgeABI is the input ABI used to generate the binding from. -// Deprecated: Use L1StandardBridgeMetaData.ABI instead. -var L1StandardBridgeABI = L1StandardBridgeMetaData.ABI - -// L1StandardBridge is an auto generated Go binding around an Ethereum contract. -type L1StandardBridge struct { - L1StandardBridgeCaller // Read-only binding to the contract - L1StandardBridgeTransactor // Write-only binding to the contract - L1StandardBridgeFilterer // Log filterer for contract events -} - -// L1StandardBridgeCaller is an auto generated read-only Go binding around an Ethereum contract. -type L1StandardBridgeCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L1StandardBridgeTransactor is an auto generated write-only Go binding around an Ethereum contract. -type L1StandardBridgeTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L1StandardBridgeFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type L1StandardBridgeFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L1StandardBridgeSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type L1StandardBridgeSession struct { - Contract *L1StandardBridge // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// L1StandardBridgeCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type L1StandardBridgeCallerSession struct { - Contract *L1StandardBridgeCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// L1StandardBridgeTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type L1StandardBridgeTransactorSession struct { - Contract *L1StandardBridgeTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// L1StandardBridgeRaw is an auto generated low-level Go binding around an Ethereum contract. -type L1StandardBridgeRaw struct { - Contract *L1StandardBridge // Generic contract binding to access the raw methods on -} - -// L1StandardBridgeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type L1StandardBridgeCallerRaw struct { - Contract *L1StandardBridgeCaller // Generic read-only contract binding to access the raw methods on -} - -// L1StandardBridgeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type L1StandardBridgeTransactorRaw struct { - Contract *L1StandardBridgeTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewL1StandardBridge creates a new instance of L1StandardBridge, bound to a specific deployed contract. -func NewL1StandardBridge(address common.Address, backend bind.ContractBackend) (*L1StandardBridge, error) { - contract, err := bindL1StandardBridge(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &L1StandardBridge{L1StandardBridgeCaller: L1StandardBridgeCaller{contract: contract}, L1StandardBridgeTransactor: L1StandardBridgeTransactor{contract: contract}, L1StandardBridgeFilterer: L1StandardBridgeFilterer{contract: contract}}, nil -} - -// NewL1StandardBridgeCaller creates a new read-only instance of L1StandardBridge, bound to a specific deployed contract. -func NewL1StandardBridgeCaller(address common.Address, caller bind.ContractCaller) (*L1StandardBridgeCaller, error) { - contract, err := bindL1StandardBridge(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &L1StandardBridgeCaller{contract: contract}, nil -} - -// NewL1StandardBridgeTransactor creates a new write-only instance of L1StandardBridge, bound to a specific deployed contract. -func NewL1StandardBridgeTransactor(address common.Address, transactor bind.ContractTransactor) (*L1StandardBridgeTransactor, error) { - contract, err := bindL1StandardBridge(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &L1StandardBridgeTransactor{contract: contract}, nil -} - -// NewL1StandardBridgeFilterer creates a new log filterer instance of L1StandardBridge, bound to a specific deployed contract. -func NewL1StandardBridgeFilterer(address common.Address, filterer bind.ContractFilterer) (*L1StandardBridgeFilterer, error) { - contract, err := bindL1StandardBridge(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &L1StandardBridgeFilterer{contract: contract}, nil -} - -// bindL1StandardBridge binds a generic wrapper to an already deployed contract. -func bindL1StandardBridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(L1StandardBridgeABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_L1StandardBridge *L1StandardBridgeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _L1StandardBridge.Contract.L1StandardBridgeCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_L1StandardBridge *L1StandardBridgeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L1StandardBridge.Contract.L1StandardBridgeTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_L1StandardBridge *L1StandardBridgeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _L1StandardBridge.Contract.L1StandardBridgeTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_L1StandardBridge *L1StandardBridgeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _L1StandardBridge.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_L1StandardBridge *L1StandardBridgeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L1StandardBridge.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_L1StandardBridge *L1StandardBridgeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _L1StandardBridge.Contract.contract.Transact(opts, method, params...) -} - -// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. -// -// Solidity: function MESSENGER() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCaller) MESSENGER(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "MESSENGER") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. -// -// Solidity: function MESSENGER() view returns(address) -func (_L1StandardBridge *L1StandardBridgeSession) MESSENGER() (common.Address, error) { - return _L1StandardBridge.Contract.MESSENGER(&_L1StandardBridge.CallOpts) -} - -// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. -// -// Solidity: function MESSENGER() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCallerSession) MESSENGER() (common.Address, error) { - return _L1StandardBridge.Contract.MESSENGER(&_L1StandardBridge.CallOpts) -} - -// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. -// -// Solidity: function OTHER_BRIDGE() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCaller) OTHERBRIDGE(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "OTHER_BRIDGE") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. -// -// Solidity: function OTHER_BRIDGE() view returns(address) -func (_L1StandardBridge *L1StandardBridgeSession) OTHERBRIDGE() (common.Address, error) { - return _L1StandardBridge.Contract.OTHERBRIDGE(&_L1StandardBridge.CallOpts) -} - -// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. -// -// Solidity: function OTHER_BRIDGE() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCallerSession) OTHERBRIDGE() (common.Address, error) { - return _L1StandardBridge.Contract.OTHERBRIDGE(&_L1StandardBridge.CallOpts) -} - -// Deposits is a free data retrieval call binding the contract method 0x8f601f66. -// -// Solidity: function deposits(address , address ) view returns(uint256) -func (_L1StandardBridge *L1StandardBridgeCaller) Deposits(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "deposits", arg0, arg1) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// Deposits is a free data retrieval call binding the contract method 0x8f601f66. -// -// Solidity: function deposits(address , address ) view returns(uint256) -func (_L1StandardBridge *L1StandardBridgeSession) Deposits(arg0 common.Address, arg1 common.Address) (*big.Int, error) { - return _L1StandardBridge.Contract.Deposits(&_L1StandardBridge.CallOpts, arg0, arg1) -} - -// Deposits is a free data retrieval call binding the contract method 0x8f601f66. -// -// Solidity: function deposits(address , address ) view returns(uint256) -func (_L1StandardBridge *L1StandardBridgeCallerSession) Deposits(arg0 common.Address, arg1 common.Address) (*big.Int, error) { - return _L1StandardBridge.Contract.Deposits(&_L1StandardBridge.CallOpts, arg0, arg1) -} - -// L2TokenBridge is a free data retrieval call binding the contract method 0x91c49bf8. -// -// Solidity: function l2TokenBridge() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCaller) L2TokenBridge(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "l2TokenBridge") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// L2TokenBridge is a free data retrieval call binding the contract method 0x91c49bf8. -// -// Solidity: function l2TokenBridge() view returns(address) -func (_L1StandardBridge *L1StandardBridgeSession) L2TokenBridge() (common.Address, error) { - return _L1StandardBridge.Contract.L2TokenBridge(&_L1StandardBridge.CallOpts) -} - -// L2TokenBridge is a free data retrieval call binding the contract method 0x91c49bf8. -// -// Solidity: function l2TokenBridge() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCallerSession) L2TokenBridge() (common.Address, error) { - return _L1StandardBridge.Contract.L2TokenBridge(&_L1StandardBridge.CallOpts) -} - -// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. -// -// Solidity: function messenger() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCaller) Messenger(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "messenger") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. -// -// Solidity: function messenger() view returns(address) -func (_L1StandardBridge *L1StandardBridgeSession) Messenger() (common.Address, error) { - return _L1StandardBridge.Contract.Messenger(&_L1StandardBridge.CallOpts) -} - -// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. -// -// Solidity: function messenger() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCallerSession) Messenger() (common.Address, error) { - return _L1StandardBridge.Contract.Messenger(&_L1StandardBridge.CallOpts) -} - -// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. -// -// Solidity: function otherBridge() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCaller) OtherBridge(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "otherBridge") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. -// -// Solidity: function otherBridge() view returns(address) -func (_L1StandardBridge *L1StandardBridgeSession) OtherBridge() (common.Address, error) { - return _L1StandardBridge.Contract.OtherBridge(&_L1StandardBridge.CallOpts) -} - -// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. -// -// Solidity: function otherBridge() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCallerSession) OtherBridge() (common.Address, error) { - return _L1StandardBridge.Contract.OtherBridge(&_L1StandardBridge.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_L1StandardBridge *L1StandardBridgeCaller) Paused(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "paused") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_L1StandardBridge *L1StandardBridgeSession) Paused() (bool, error) { - return _L1StandardBridge.Contract.Paused(&_L1StandardBridge.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_L1StandardBridge *L1StandardBridgeCallerSession) Paused() (bool, error) { - return _L1StandardBridge.Contract.Paused(&_L1StandardBridge.CallOpts) -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCaller) SuperchainConfig(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "superchainConfig") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_L1StandardBridge *L1StandardBridgeSession) SuperchainConfig() (common.Address, error) { - return _L1StandardBridge.Contract.SuperchainConfig(&_L1StandardBridge.CallOpts) -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCallerSession) SuperchainConfig() (common.Address, error) { - return _L1StandardBridge.Contract.SuperchainConfig(&_L1StandardBridge.CallOpts) -} - -// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. -// -// Solidity: function systemConfig() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCaller) SystemConfig(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "systemConfig") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. -// -// Solidity: function systemConfig() view returns(address) -func (_L1StandardBridge *L1StandardBridgeSession) SystemConfig() (common.Address, error) { - return _L1StandardBridge.Contract.SystemConfig(&_L1StandardBridge.CallOpts) -} - -// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. -// -// Solidity: function systemConfig() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCallerSession) SystemConfig() (common.Address, error) { - return _L1StandardBridge.Contract.SystemConfig(&_L1StandardBridge.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L1StandardBridge *L1StandardBridgeCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L1StandardBridge *L1StandardBridgeSession) Version() (string, error) { - return _L1StandardBridge.Contract.Version(&_L1StandardBridge.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L1StandardBridge *L1StandardBridgeCallerSession) Version() (string, error) { - return _L1StandardBridge.Contract.Version(&_L1StandardBridge.CallOpts) -} - -// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. -// -// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) BridgeERC20(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "bridgeERC20", _localToken, _remoteToken, _amount, _minGasLimit, _extraData) -} - -// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. -// -// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeSession) BridgeERC20(_localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.BridgeERC20(&_L1StandardBridge.TransactOpts, _localToken, _remoteToken, _amount, _minGasLimit, _extraData) -} - -// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. -// -// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) BridgeERC20(_localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.BridgeERC20(&_L1StandardBridge.TransactOpts, _localToken, _remoteToken, _amount, _minGasLimit, _extraData) -} - -// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. -// -// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) BridgeERC20To(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "bridgeERC20To", _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) -} - -// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. -// -// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeSession) BridgeERC20To(_localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.BridgeERC20To(&_L1StandardBridge.TransactOpts, _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) -} - -// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. -// -// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) BridgeERC20To(_localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.BridgeERC20To(&_L1StandardBridge.TransactOpts, _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) -} - -// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. -// -// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) BridgeETH(opts *bind.TransactOpts, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "bridgeETH", _minGasLimit, _extraData) -} - -// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. -// -// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeSession) BridgeETH(_minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.BridgeETH(&_L1StandardBridge.TransactOpts, _minGasLimit, _extraData) -} - -// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. -// -// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) BridgeETH(_minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.BridgeETH(&_L1StandardBridge.TransactOpts, _minGasLimit, _extraData) -} - -// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. -// -// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) BridgeETHTo(opts *bind.TransactOpts, _to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "bridgeETHTo", _to, _minGasLimit, _extraData) -} - -// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. -// -// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeSession) BridgeETHTo(_to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.BridgeETHTo(&_L1StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) -} - -// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. -// -// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) BridgeETHTo(_to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.BridgeETHTo(&_L1StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) -} - -// DepositERC20 is a paid mutator transaction binding the contract method 0x58a997f6. -// -// Solidity: function depositERC20(address _l1Token, address _l2Token, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) DepositERC20(opts *bind.TransactOpts, _l1Token common.Address, _l2Token common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "depositERC20", _l1Token, _l2Token, _amount, _minGasLimit, _extraData) -} - -// DepositERC20 is a paid mutator transaction binding the contract method 0x58a997f6. -// -// Solidity: function depositERC20(address _l1Token, address _l2Token, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeSession) DepositERC20(_l1Token common.Address, _l2Token common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.DepositERC20(&_L1StandardBridge.TransactOpts, _l1Token, _l2Token, _amount, _minGasLimit, _extraData) -} - -// DepositERC20 is a paid mutator transaction binding the contract method 0x58a997f6. -// -// Solidity: function depositERC20(address _l1Token, address _l2Token, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) DepositERC20(_l1Token common.Address, _l2Token common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.DepositERC20(&_L1StandardBridge.TransactOpts, _l1Token, _l2Token, _amount, _minGasLimit, _extraData) -} - -// DepositERC20To is a paid mutator transaction binding the contract method 0x838b2520. -// -// Solidity: function depositERC20To(address _l1Token, address _l2Token, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) DepositERC20To(opts *bind.TransactOpts, _l1Token common.Address, _l2Token common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "depositERC20To", _l1Token, _l2Token, _to, _amount, _minGasLimit, _extraData) -} - -// DepositERC20To is a paid mutator transaction binding the contract method 0x838b2520. -// -// Solidity: function depositERC20To(address _l1Token, address _l2Token, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeSession) DepositERC20To(_l1Token common.Address, _l2Token common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.DepositERC20To(&_L1StandardBridge.TransactOpts, _l1Token, _l2Token, _to, _amount, _minGasLimit, _extraData) -} - -// DepositERC20To is a paid mutator transaction binding the contract method 0x838b2520. -// -// Solidity: function depositERC20To(address _l1Token, address _l2Token, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) DepositERC20To(_l1Token common.Address, _l2Token common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.DepositERC20To(&_L1StandardBridge.TransactOpts, _l1Token, _l2Token, _to, _amount, _minGasLimit, _extraData) -} - -// DepositETH is a paid mutator transaction binding the contract method 0xb1a1a882. -// -// Solidity: function depositETH(uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) DepositETH(opts *bind.TransactOpts, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "depositETH", _minGasLimit, _extraData) -} - -// DepositETH is a paid mutator transaction binding the contract method 0xb1a1a882. -// -// Solidity: function depositETH(uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeSession) DepositETH(_minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.DepositETH(&_L1StandardBridge.TransactOpts, _minGasLimit, _extraData) -} - -// DepositETH is a paid mutator transaction binding the contract method 0xb1a1a882. -// -// Solidity: function depositETH(uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) DepositETH(_minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.DepositETH(&_L1StandardBridge.TransactOpts, _minGasLimit, _extraData) -} - -// DepositETHTo is a paid mutator transaction binding the contract method 0x9a2ac6d5. -// -// Solidity: function depositETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) DepositETHTo(opts *bind.TransactOpts, _to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "depositETHTo", _to, _minGasLimit, _extraData) -} - -// DepositETHTo is a paid mutator transaction binding the contract method 0x9a2ac6d5. -// -// Solidity: function depositETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeSession) DepositETHTo(_to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.DepositETHTo(&_L1StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) -} - -// DepositETHTo is a paid mutator transaction binding the contract method 0x9a2ac6d5. -// -// Solidity: function depositETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) DepositETHTo(_to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.DepositETHTo(&_L1StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) -} - -// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. -// -// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) FinalizeBridgeERC20(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "finalizeBridgeERC20", _localToken, _remoteToken, _from, _to, _amount, _extraData) -} - -// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. -// -// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeSession) FinalizeBridgeERC20(_localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.FinalizeBridgeERC20(&_L1StandardBridge.TransactOpts, _localToken, _remoteToken, _from, _to, _amount, _extraData) -} - -// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. -// -// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) FinalizeBridgeERC20(_localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.FinalizeBridgeERC20(&_L1StandardBridge.TransactOpts, _localToken, _remoteToken, _from, _to, _amount, _extraData) -} - -// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. -// -// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) FinalizeBridgeETH(opts *bind.TransactOpts, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "finalizeBridgeETH", _from, _to, _amount, _extraData) -} - -// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. -// -// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeSession) FinalizeBridgeETH(_from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.FinalizeBridgeETH(&_L1StandardBridge.TransactOpts, _from, _to, _amount, _extraData) -} - -// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. -// -// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) FinalizeBridgeETH(_from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.FinalizeBridgeETH(&_L1StandardBridge.TransactOpts, _from, _to, _amount, _extraData) -} - -// FinalizeERC20Withdrawal is a paid mutator transaction binding the contract method 0xa9f9e675. -// -// Solidity: function finalizeERC20Withdrawal(address _l1Token, address _l2Token, address _from, address _to, uint256 _amount, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) FinalizeERC20Withdrawal(opts *bind.TransactOpts, _l1Token common.Address, _l2Token common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "finalizeERC20Withdrawal", _l1Token, _l2Token, _from, _to, _amount, _extraData) -} - -// FinalizeERC20Withdrawal is a paid mutator transaction binding the contract method 0xa9f9e675. -// -// Solidity: function finalizeERC20Withdrawal(address _l1Token, address _l2Token, address _from, address _to, uint256 _amount, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeSession) FinalizeERC20Withdrawal(_l1Token common.Address, _l2Token common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.FinalizeERC20Withdrawal(&_L1StandardBridge.TransactOpts, _l1Token, _l2Token, _from, _to, _amount, _extraData) -} - -// FinalizeERC20Withdrawal is a paid mutator transaction binding the contract method 0xa9f9e675. -// -// Solidity: function finalizeERC20Withdrawal(address _l1Token, address _l2Token, address _from, address _to, uint256 _amount, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) FinalizeERC20Withdrawal(_l1Token common.Address, _l2Token common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.FinalizeERC20Withdrawal(&_L1StandardBridge.TransactOpts, _l1Token, _l2Token, _from, _to, _amount, _extraData) -} - -// FinalizeETHWithdrawal is a paid mutator transaction binding the contract method 0x1532ec34. -// -// Solidity: function finalizeETHWithdrawal(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) FinalizeETHWithdrawal(opts *bind.TransactOpts, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "finalizeETHWithdrawal", _from, _to, _amount, _extraData) -} - -// FinalizeETHWithdrawal is a paid mutator transaction binding the contract method 0x1532ec34. -// -// Solidity: function finalizeETHWithdrawal(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeSession) FinalizeETHWithdrawal(_from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.FinalizeETHWithdrawal(&_L1StandardBridge.TransactOpts, _from, _to, _amount, _extraData) -} - -// FinalizeETHWithdrawal is a paid mutator transaction binding the contract method 0x1532ec34. -// -// Solidity: function finalizeETHWithdrawal(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) FinalizeETHWithdrawal(_from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.FinalizeETHWithdrawal(&_L1StandardBridge.TransactOpts, _from, _to, _amount, _extraData) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. -// -// Solidity: function initialize(address _messenger, address _superchainConfig, address _systemConfig) returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) Initialize(opts *bind.TransactOpts, _messenger common.Address, _superchainConfig common.Address, _systemConfig common.Address) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "initialize", _messenger, _superchainConfig, _systemConfig) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. -// -// Solidity: function initialize(address _messenger, address _superchainConfig, address _systemConfig) returns() -func (_L1StandardBridge *L1StandardBridgeSession) Initialize(_messenger common.Address, _superchainConfig common.Address, _systemConfig common.Address) (*types.Transaction, error) { - return _L1StandardBridge.Contract.Initialize(&_L1StandardBridge.TransactOpts, _messenger, _superchainConfig, _systemConfig) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. -// -// Solidity: function initialize(address _messenger, address _superchainConfig, address _systemConfig) returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) Initialize(_messenger common.Address, _superchainConfig common.Address, _systemConfig common.Address) (*types.Transaction, error) { - return _L1StandardBridge.Contract.Initialize(&_L1StandardBridge.TransactOpts, _messenger, _superchainConfig, _systemConfig) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L1StandardBridge.contract.RawTransact(opts, nil) // calldata is disallowed for receive function -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_L1StandardBridge *L1StandardBridgeSession) Receive() (*types.Transaction, error) { - return _L1StandardBridge.Contract.Receive(&_L1StandardBridge.TransactOpts) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) Receive() (*types.Transaction, error) { - return _L1StandardBridge.Contract.Receive(&_L1StandardBridge.TransactOpts) -} - -// L1StandardBridgeERC20BridgeFinalizedIterator is returned from FilterERC20BridgeFinalized and is used to iterate over the raw logs and unpacked data for ERC20BridgeFinalized events raised by the L1StandardBridge contract. -type L1StandardBridgeERC20BridgeFinalizedIterator struct { - Event *L1StandardBridgeERC20BridgeFinalized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1StandardBridgeERC20BridgeFinalizedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeERC20BridgeFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeERC20BridgeFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1StandardBridgeERC20BridgeFinalizedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1StandardBridgeERC20BridgeFinalizedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1StandardBridgeERC20BridgeFinalized represents a ERC20BridgeFinalized event raised by the L1StandardBridge contract. -type L1StandardBridgeERC20BridgeFinalized struct { - LocalToken common.Address - RemoteToken common.Address - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterERC20BridgeFinalized is a free log retrieval operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. -// -// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) FilterERC20BridgeFinalized(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address, from []common.Address) (*L1StandardBridgeERC20BridgeFinalizedIterator, error) { - - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "ERC20BridgeFinalized", localTokenRule, remoteTokenRule, fromRule) - if err != nil { - return nil, err - } - return &L1StandardBridgeERC20BridgeFinalizedIterator{contract: _L1StandardBridge.contract, event: "ERC20BridgeFinalized", logs: logs, sub: sub}, nil -} - -// WatchERC20BridgeFinalized is a free log subscription operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. -// -// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) WatchERC20BridgeFinalized(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeERC20BridgeFinalized, localToken []common.Address, remoteToken []common.Address, from []common.Address) (event.Subscription, error) { - - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L1StandardBridge.contract.WatchLogs(opts, "ERC20BridgeFinalized", localTokenRule, remoteTokenRule, fromRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1StandardBridgeERC20BridgeFinalized) - if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20BridgeFinalized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseERC20BridgeFinalized is a log parse operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. -// -// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) ParseERC20BridgeFinalized(log types.Log) (*L1StandardBridgeERC20BridgeFinalized, error) { - event := new(L1StandardBridgeERC20BridgeFinalized) - if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20BridgeFinalized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1StandardBridgeERC20BridgeInitiatedIterator is returned from FilterERC20BridgeInitiated and is used to iterate over the raw logs and unpacked data for ERC20BridgeInitiated events raised by the L1StandardBridge contract. -type L1StandardBridgeERC20BridgeInitiatedIterator struct { - Event *L1StandardBridgeERC20BridgeInitiated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1StandardBridgeERC20BridgeInitiatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeERC20BridgeInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeERC20BridgeInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1StandardBridgeERC20BridgeInitiatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1StandardBridgeERC20BridgeInitiatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1StandardBridgeERC20BridgeInitiated represents a ERC20BridgeInitiated event raised by the L1StandardBridge contract. -type L1StandardBridgeERC20BridgeInitiated struct { - LocalToken common.Address - RemoteToken common.Address - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterERC20BridgeInitiated is a free log retrieval operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. -// -// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) FilterERC20BridgeInitiated(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address, from []common.Address) (*L1StandardBridgeERC20BridgeInitiatedIterator, error) { - - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "ERC20BridgeInitiated", localTokenRule, remoteTokenRule, fromRule) - if err != nil { - return nil, err - } - return &L1StandardBridgeERC20BridgeInitiatedIterator{contract: _L1StandardBridge.contract, event: "ERC20BridgeInitiated", logs: logs, sub: sub}, nil -} - -// WatchERC20BridgeInitiated is a free log subscription operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. -// -// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) WatchERC20BridgeInitiated(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeERC20BridgeInitiated, localToken []common.Address, remoteToken []common.Address, from []common.Address) (event.Subscription, error) { - - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L1StandardBridge.contract.WatchLogs(opts, "ERC20BridgeInitiated", localTokenRule, remoteTokenRule, fromRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1StandardBridgeERC20BridgeInitiated) - if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20BridgeInitiated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseERC20BridgeInitiated is a log parse operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. -// -// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) ParseERC20BridgeInitiated(log types.Log) (*L1StandardBridgeERC20BridgeInitiated, error) { - event := new(L1StandardBridgeERC20BridgeInitiated) - if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20BridgeInitiated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1StandardBridgeERC20DepositInitiatedIterator is returned from FilterERC20DepositInitiated and is used to iterate over the raw logs and unpacked data for ERC20DepositInitiated events raised by the L1StandardBridge contract. -type L1StandardBridgeERC20DepositInitiatedIterator struct { - Event *L1StandardBridgeERC20DepositInitiated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1StandardBridgeERC20DepositInitiatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeERC20DepositInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeERC20DepositInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1StandardBridgeERC20DepositInitiatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1StandardBridgeERC20DepositInitiatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1StandardBridgeERC20DepositInitiated represents a ERC20DepositInitiated event raised by the L1StandardBridge contract. -type L1StandardBridgeERC20DepositInitiated struct { - L1Token common.Address - L2Token common.Address - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterERC20DepositInitiated is a free log retrieval operation binding the contract event 0x718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d0396. -// -// Solidity: event ERC20DepositInitiated(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) FilterERC20DepositInitiated(opts *bind.FilterOpts, l1Token []common.Address, l2Token []common.Address, from []common.Address) (*L1StandardBridgeERC20DepositInitiatedIterator, error) { - - var l1TokenRule []interface{} - for _, l1TokenItem := range l1Token { - l1TokenRule = append(l1TokenRule, l1TokenItem) - } - var l2TokenRule []interface{} - for _, l2TokenItem := range l2Token { - l2TokenRule = append(l2TokenRule, l2TokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "ERC20DepositInitiated", l1TokenRule, l2TokenRule, fromRule) - if err != nil { - return nil, err - } - return &L1StandardBridgeERC20DepositInitiatedIterator{contract: _L1StandardBridge.contract, event: "ERC20DepositInitiated", logs: logs, sub: sub}, nil -} - -// WatchERC20DepositInitiated is a free log subscription operation binding the contract event 0x718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d0396. -// -// Solidity: event ERC20DepositInitiated(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) WatchERC20DepositInitiated(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeERC20DepositInitiated, l1Token []common.Address, l2Token []common.Address, from []common.Address) (event.Subscription, error) { - - var l1TokenRule []interface{} - for _, l1TokenItem := range l1Token { - l1TokenRule = append(l1TokenRule, l1TokenItem) - } - var l2TokenRule []interface{} - for _, l2TokenItem := range l2Token { - l2TokenRule = append(l2TokenRule, l2TokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L1StandardBridge.contract.WatchLogs(opts, "ERC20DepositInitiated", l1TokenRule, l2TokenRule, fromRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1StandardBridgeERC20DepositInitiated) - if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20DepositInitiated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseERC20DepositInitiated is a log parse operation binding the contract event 0x718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d0396. -// -// Solidity: event ERC20DepositInitiated(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) ParseERC20DepositInitiated(log types.Log) (*L1StandardBridgeERC20DepositInitiated, error) { - event := new(L1StandardBridgeERC20DepositInitiated) - if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20DepositInitiated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1StandardBridgeERC20WithdrawalFinalizedIterator is returned from FilterERC20WithdrawalFinalized and is used to iterate over the raw logs and unpacked data for ERC20WithdrawalFinalized events raised by the L1StandardBridge contract. -type L1StandardBridgeERC20WithdrawalFinalizedIterator struct { - Event *L1StandardBridgeERC20WithdrawalFinalized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1StandardBridgeERC20WithdrawalFinalizedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeERC20WithdrawalFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeERC20WithdrawalFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1StandardBridgeERC20WithdrawalFinalizedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1StandardBridgeERC20WithdrawalFinalizedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1StandardBridgeERC20WithdrawalFinalized represents a ERC20WithdrawalFinalized event raised by the L1StandardBridge contract. -type L1StandardBridgeERC20WithdrawalFinalized struct { - L1Token common.Address - L2Token common.Address - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterERC20WithdrawalFinalized is a free log retrieval operation binding the contract event 0x3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3. -// -// Solidity: event ERC20WithdrawalFinalized(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) FilterERC20WithdrawalFinalized(opts *bind.FilterOpts, l1Token []common.Address, l2Token []common.Address, from []common.Address) (*L1StandardBridgeERC20WithdrawalFinalizedIterator, error) { - - var l1TokenRule []interface{} - for _, l1TokenItem := range l1Token { - l1TokenRule = append(l1TokenRule, l1TokenItem) - } - var l2TokenRule []interface{} - for _, l2TokenItem := range l2Token { - l2TokenRule = append(l2TokenRule, l2TokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "ERC20WithdrawalFinalized", l1TokenRule, l2TokenRule, fromRule) - if err != nil { - return nil, err - } - return &L1StandardBridgeERC20WithdrawalFinalizedIterator{contract: _L1StandardBridge.contract, event: "ERC20WithdrawalFinalized", logs: logs, sub: sub}, nil -} - -// WatchERC20WithdrawalFinalized is a free log subscription operation binding the contract event 0x3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3. -// -// Solidity: event ERC20WithdrawalFinalized(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) WatchERC20WithdrawalFinalized(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeERC20WithdrawalFinalized, l1Token []common.Address, l2Token []common.Address, from []common.Address) (event.Subscription, error) { - - var l1TokenRule []interface{} - for _, l1TokenItem := range l1Token { - l1TokenRule = append(l1TokenRule, l1TokenItem) - } - var l2TokenRule []interface{} - for _, l2TokenItem := range l2Token { - l2TokenRule = append(l2TokenRule, l2TokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L1StandardBridge.contract.WatchLogs(opts, "ERC20WithdrawalFinalized", l1TokenRule, l2TokenRule, fromRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1StandardBridgeERC20WithdrawalFinalized) - if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20WithdrawalFinalized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseERC20WithdrawalFinalized is a log parse operation binding the contract event 0x3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3. -// -// Solidity: event ERC20WithdrawalFinalized(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) ParseERC20WithdrawalFinalized(log types.Log) (*L1StandardBridgeERC20WithdrawalFinalized, error) { - event := new(L1StandardBridgeERC20WithdrawalFinalized) - if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20WithdrawalFinalized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1StandardBridgeETHBridgeFinalizedIterator is returned from FilterETHBridgeFinalized and is used to iterate over the raw logs and unpacked data for ETHBridgeFinalized events raised by the L1StandardBridge contract. -type L1StandardBridgeETHBridgeFinalizedIterator struct { - Event *L1StandardBridgeETHBridgeFinalized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1StandardBridgeETHBridgeFinalizedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeETHBridgeFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeETHBridgeFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1StandardBridgeETHBridgeFinalizedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1StandardBridgeETHBridgeFinalizedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1StandardBridgeETHBridgeFinalized represents a ETHBridgeFinalized event raised by the L1StandardBridge contract. -type L1StandardBridgeETHBridgeFinalized struct { - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterETHBridgeFinalized is a free log retrieval operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. -// -// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) FilterETHBridgeFinalized(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*L1StandardBridgeETHBridgeFinalizedIterator, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "ETHBridgeFinalized", fromRule, toRule) - if err != nil { - return nil, err - } - return &L1StandardBridgeETHBridgeFinalizedIterator{contract: _L1StandardBridge.contract, event: "ETHBridgeFinalized", logs: logs, sub: sub}, nil -} - -// WatchETHBridgeFinalized is a free log subscription operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. -// -// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) WatchETHBridgeFinalized(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeETHBridgeFinalized, from []common.Address, to []common.Address) (event.Subscription, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _L1StandardBridge.contract.WatchLogs(opts, "ETHBridgeFinalized", fromRule, toRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1StandardBridgeETHBridgeFinalized) - if err := _L1StandardBridge.contract.UnpackLog(event, "ETHBridgeFinalized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseETHBridgeFinalized is a log parse operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. -// -// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) ParseETHBridgeFinalized(log types.Log) (*L1StandardBridgeETHBridgeFinalized, error) { - event := new(L1StandardBridgeETHBridgeFinalized) - if err := _L1StandardBridge.contract.UnpackLog(event, "ETHBridgeFinalized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1StandardBridgeETHBridgeInitiatedIterator is returned from FilterETHBridgeInitiated and is used to iterate over the raw logs and unpacked data for ETHBridgeInitiated events raised by the L1StandardBridge contract. -type L1StandardBridgeETHBridgeInitiatedIterator struct { - Event *L1StandardBridgeETHBridgeInitiated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1StandardBridgeETHBridgeInitiatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeETHBridgeInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeETHBridgeInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1StandardBridgeETHBridgeInitiatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1StandardBridgeETHBridgeInitiatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1StandardBridgeETHBridgeInitiated represents a ETHBridgeInitiated event raised by the L1StandardBridge contract. -type L1StandardBridgeETHBridgeInitiated struct { - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterETHBridgeInitiated is a free log retrieval operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. -// -// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) FilterETHBridgeInitiated(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*L1StandardBridgeETHBridgeInitiatedIterator, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "ETHBridgeInitiated", fromRule, toRule) - if err != nil { - return nil, err - } - return &L1StandardBridgeETHBridgeInitiatedIterator{contract: _L1StandardBridge.contract, event: "ETHBridgeInitiated", logs: logs, sub: sub}, nil -} - -// WatchETHBridgeInitiated is a free log subscription operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. -// -// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) WatchETHBridgeInitiated(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeETHBridgeInitiated, from []common.Address, to []common.Address) (event.Subscription, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _L1StandardBridge.contract.WatchLogs(opts, "ETHBridgeInitiated", fromRule, toRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1StandardBridgeETHBridgeInitiated) - if err := _L1StandardBridge.contract.UnpackLog(event, "ETHBridgeInitiated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseETHBridgeInitiated is a log parse operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. -// -// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) ParseETHBridgeInitiated(log types.Log) (*L1StandardBridgeETHBridgeInitiated, error) { - event := new(L1StandardBridgeETHBridgeInitiated) - if err := _L1StandardBridge.contract.UnpackLog(event, "ETHBridgeInitiated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1StandardBridgeETHDepositInitiatedIterator is returned from FilterETHDepositInitiated and is used to iterate over the raw logs and unpacked data for ETHDepositInitiated events raised by the L1StandardBridge contract. -type L1StandardBridgeETHDepositInitiatedIterator struct { - Event *L1StandardBridgeETHDepositInitiated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1StandardBridgeETHDepositInitiatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeETHDepositInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeETHDepositInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1StandardBridgeETHDepositInitiatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1StandardBridgeETHDepositInitiatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1StandardBridgeETHDepositInitiated represents a ETHDepositInitiated event raised by the L1StandardBridge contract. -type L1StandardBridgeETHDepositInitiated struct { - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterETHDepositInitiated is a free log retrieval operation binding the contract event 0x35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23. -// -// Solidity: event ETHDepositInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) FilterETHDepositInitiated(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*L1StandardBridgeETHDepositInitiatedIterator, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "ETHDepositInitiated", fromRule, toRule) - if err != nil { - return nil, err - } - return &L1StandardBridgeETHDepositInitiatedIterator{contract: _L1StandardBridge.contract, event: "ETHDepositInitiated", logs: logs, sub: sub}, nil -} - -// WatchETHDepositInitiated is a free log subscription operation binding the contract event 0x35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23. -// -// Solidity: event ETHDepositInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) WatchETHDepositInitiated(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeETHDepositInitiated, from []common.Address, to []common.Address) (event.Subscription, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _L1StandardBridge.contract.WatchLogs(opts, "ETHDepositInitiated", fromRule, toRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1StandardBridgeETHDepositInitiated) - if err := _L1StandardBridge.contract.UnpackLog(event, "ETHDepositInitiated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseETHDepositInitiated is a log parse operation binding the contract event 0x35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23. -// -// Solidity: event ETHDepositInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) ParseETHDepositInitiated(log types.Log) (*L1StandardBridgeETHDepositInitiated, error) { - event := new(L1StandardBridgeETHDepositInitiated) - if err := _L1StandardBridge.contract.UnpackLog(event, "ETHDepositInitiated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1StandardBridgeETHWithdrawalFinalizedIterator is returned from FilterETHWithdrawalFinalized and is used to iterate over the raw logs and unpacked data for ETHWithdrawalFinalized events raised by the L1StandardBridge contract. -type L1StandardBridgeETHWithdrawalFinalizedIterator struct { - Event *L1StandardBridgeETHWithdrawalFinalized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1StandardBridgeETHWithdrawalFinalizedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeETHWithdrawalFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeETHWithdrawalFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1StandardBridgeETHWithdrawalFinalizedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1StandardBridgeETHWithdrawalFinalizedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1StandardBridgeETHWithdrawalFinalized represents a ETHWithdrawalFinalized event raised by the L1StandardBridge contract. -type L1StandardBridgeETHWithdrawalFinalized struct { - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterETHWithdrawalFinalized is a free log retrieval operation binding the contract event 0x2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e631. -// -// Solidity: event ETHWithdrawalFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) FilterETHWithdrawalFinalized(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*L1StandardBridgeETHWithdrawalFinalizedIterator, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "ETHWithdrawalFinalized", fromRule, toRule) - if err != nil { - return nil, err - } - return &L1StandardBridgeETHWithdrawalFinalizedIterator{contract: _L1StandardBridge.contract, event: "ETHWithdrawalFinalized", logs: logs, sub: sub}, nil -} - -// WatchETHWithdrawalFinalized is a free log subscription operation binding the contract event 0x2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e631. -// -// Solidity: event ETHWithdrawalFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) WatchETHWithdrawalFinalized(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeETHWithdrawalFinalized, from []common.Address, to []common.Address) (event.Subscription, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _L1StandardBridge.contract.WatchLogs(opts, "ETHWithdrawalFinalized", fromRule, toRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1StandardBridgeETHWithdrawalFinalized) - if err := _L1StandardBridge.contract.UnpackLog(event, "ETHWithdrawalFinalized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseETHWithdrawalFinalized is a log parse operation binding the contract event 0x2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e631. -// -// Solidity: event ETHWithdrawalFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) ParseETHWithdrawalFinalized(log types.Log) (*L1StandardBridgeETHWithdrawalFinalized, error) { - event := new(L1StandardBridgeETHWithdrawalFinalized) - if err := _L1StandardBridge.contract.UnpackLog(event, "ETHWithdrawalFinalized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1StandardBridgeInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the L1StandardBridge contract. -type L1StandardBridgeInitializedIterator struct { - Event *L1StandardBridgeInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1StandardBridgeInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1StandardBridgeInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1StandardBridgeInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1StandardBridgeInitialized represents a Initialized event raised by the L1StandardBridge contract. -type L1StandardBridgeInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L1StandardBridge *L1StandardBridgeFilterer) FilterInitialized(opts *bind.FilterOpts) (*L1StandardBridgeInitializedIterator, error) { - - logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &L1StandardBridgeInitializedIterator{contract: _L1StandardBridge.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L1StandardBridge *L1StandardBridgeFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeInitialized) (event.Subscription, error) { - - logs, sub, err := _L1StandardBridge.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1StandardBridgeInitialized) - if err := _L1StandardBridge.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L1StandardBridge *L1StandardBridgeFilterer) ParseInitialized(log types.Log) (*L1StandardBridgeInitialized, error) { - event := new(L1StandardBridgeInitialized) - if err := _L1StandardBridge.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/op-chain-ops/upgrades/bindings/l2outputoracle.go b/op-chain-ops/upgrades/bindings/l2outputoracle.go deleted file mode 100644 index b6a5b649b4d9..000000000000 --- a/op-chain-ops/upgrades/bindings/l2outputoracle.go +++ /dev/null @@ -1,1351 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindings - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// TypesOutputProposal is an auto generated low-level Go binding around an user-defined struct. -type TypesOutputProposal struct { - OutputRoot [32]byte - Timestamp *big.Int - L2BlockNumber *big.Int -} - -// L2OutputOracleMetaData contains all meta data concerning the L2OutputOracle contract. -var L2OutputOracleMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CHALLENGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FINALIZATION_PERIOD_SECONDS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_BLOCK_TIME\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROPOSER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUBMISSION_INTERVAL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challenger\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"computeL2Timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"}],\"name\":\"deleteL2Outputs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"}],\"name\":\"getL2Output\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"timestamp\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"}],\"internalType\":\"structTypes.OutputProposal\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"getL2OutputAfter\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"timestamp\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"}],\"internalType\":\"structTypes.OutputProposal\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"getL2OutputIndexAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_submissionInterval\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_proposer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2BlockTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestOutputIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextOutputIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_l1BlockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l1BlockNumber\",\"type\":\"uint256\"}],\"name\":\"proposeL2Output\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startingBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startingTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"submissionInterval\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2OutputIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2BlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"l1Timestamp\",\"type\":\"uint256\"}],\"name\":\"OutputProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"prevNextOutputIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newNextOutputIndex\",\"type\":\"uint256\"}],\"name\":\"OutputsDeleted\",\"type\":\"event\"}]", -} - -// L2OutputOracleABI is the input ABI used to generate the binding from. -// Deprecated: Use L2OutputOracleMetaData.ABI instead. -var L2OutputOracleABI = L2OutputOracleMetaData.ABI - -// L2OutputOracle is an auto generated Go binding around an Ethereum contract. -type L2OutputOracle struct { - L2OutputOracleCaller // Read-only binding to the contract - L2OutputOracleTransactor // Write-only binding to the contract - L2OutputOracleFilterer // Log filterer for contract events -} - -// L2OutputOracleCaller is an auto generated read-only Go binding around an Ethereum contract. -type L2OutputOracleCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L2OutputOracleTransactor is an auto generated write-only Go binding around an Ethereum contract. -type L2OutputOracleTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L2OutputOracleFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type L2OutputOracleFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L2OutputOracleSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type L2OutputOracleSession struct { - Contract *L2OutputOracle // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// L2OutputOracleCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type L2OutputOracleCallerSession struct { - Contract *L2OutputOracleCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// L2OutputOracleTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type L2OutputOracleTransactorSession struct { - Contract *L2OutputOracleTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// L2OutputOracleRaw is an auto generated low-level Go binding around an Ethereum contract. -type L2OutputOracleRaw struct { - Contract *L2OutputOracle // Generic contract binding to access the raw methods on -} - -// L2OutputOracleCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type L2OutputOracleCallerRaw struct { - Contract *L2OutputOracleCaller // Generic read-only contract binding to access the raw methods on -} - -// L2OutputOracleTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type L2OutputOracleTransactorRaw struct { - Contract *L2OutputOracleTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewL2OutputOracle creates a new instance of L2OutputOracle, bound to a specific deployed contract. -func NewL2OutputOracle(address common.Address, backend bind.ContractBackend) (*L2OutputOracle, error) { - contract, err := bindL2OutputOracle(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &L2OutputOracle{L2OutputOracleCaller: L2OutputOracleCaller{contract: contract}, L2OutputOracleTransactor: L2OutputOracleTransactor{contract: contract}, L2OutputOracleFilterer: L2OutputOracleFilterer{contract: contract}}, nil -} - -// NewL2OutputOracleCaller creates a new read-only instance of L2OutputOracle, bound to a specific deployed contract. -func NewL2OutputOracleCaller(address common.Address, caller bind.ContractCaller) (*L2OutputOracleCaller, error) { - contract, err := bindL2OutputOracle(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &L2OutputOracleCaller{contract: contract}, nil -} - -// NewL2OutputOracleTransactor creates a new write-only instance of L2OutputOracle, bound to a specific deployed contract. -func NewL2OutputOracleTransactor(address common.Address, transactor bind.ContractTransactor) (*L2OutputOracleTransactor, error) { - contract, err := bindL2OutputOracle(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &L2OutputOracleTransactor{contract: contract}, nil -} - -// NewL2OutputOracleFilterer creates a new log filterer instance of L2OutputOracle, bound to a specific deployed contract. -func NewL2OutputOracleFilterer(address common.Address, filterer bind.ContractFilterer) (*L2OutputOracleFilterer, error) { - contract, err := bindL2OutputOracle(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &L2OutputOracleFilterer{contract: contract}, nil -} - -// bindL2OutputOracle binds a generic wrapper to an already deployed contract. -func bindL2OutputOracle(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(L2OutputOracleABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_L2OutputOracle *L2OutputOracleRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _L2OutputOracle.Contract.L2OutputOracleCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_L2OutputOracle *L2OutputOracleRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L2OutputOracle.Contract.L2OutputOracleTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_L2OutputOracle *L2OutputOracleRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _L2OutputOracle.Contract.L2OutputOracleTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_L2OutputOracle *L2OutputOracleCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _L2OutputOracle.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_L2OutputOracle *L2OutputOracleTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L2OutputOracle.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_L2OutputOracle *L2OutputOracleTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _L2OutputOracle.Contract.contract.Transact(opts, method, params...) -} - -// CHALLENGER is a free data retrieval call binding the contract method 0x6b4d98dd. -// -// Solidity: function CHALLENGER() view returns(address) -func (_L2OutputOracle *L2OutputOracleCaller) CHALLENGER(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "CHALLENGER") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// CHALLENGER is a free data retrieval call binding the contract method 0x6b4d98dd. -// -// Solidity: function CHALLENGER() view returns(address) -func (_L2OutputOracle *L2OutputOracleSession) CHALLENGER() (common.Address, error) { - return _L2OutputOracle.Contract.CHALLENGER(&_L2OutputOracle.CallOpts) -} - -// CHALLENGER is a free data retrieval call binding the contract method 0x6b4d98dd. -// -// Solidity: function CHALLENGER() view returns(address) -func (_L2OutputOracle *L2OutputOracleCallerSession) CHALLENGER() (common.Address, error) { - return _L2OutputOracle.Contract.CHALLENGER(&_L2OutputOracle.CallOpts) -} - -// FINALIZATIONPERIODSECONDS is a free data retrieval call binding the contract method 0xf4daa291. -// -// Solidity: function FINALIZATION_PERIOD_SECONDS() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) FINALIZATIONPERIODSECONDS(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "FINALIZATION_PERIOD_SECONDS") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// FINALIZATIONPERIODSECONDS is a free data retrieval call binding the contract method 0xf4daa291. -// -// Solidity: function FINALIZATION_PERIOD_SECONDS() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) FINALIZATIONPERIODSECONDS() (*big.Int, error) { - return _L2OutputOracle.Contract.FINALIZATIONPERIODSECONDS(&_L2OutputOracle.CallOpts) -} - -// FINALIZATIONPERIODSECONDS is a free data retrieval call binding the contract method 0xf4daa291. -// -// Solidity: function FINALIZATION_PERIOD_SECONDS() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) FINALIZATIONPERIODSECONDS() (*big.Int, error) { - return _L2OutputOracle.Contract.FINALIZATIONPERIODSECONDS(&_L2OutputOracle.CallOpts) -} - -// L2BLOCKTIME is a free data retrieval call binding the contract method 0x002134cc. -// -// Solidity: function L2_BLOCK_TIME() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) L2BLOCKTIME(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "L2_BLOCK_TIME") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// L2BLOCKTIME is a free data retrieval call binding the contract method 0x002134cc. -// -// Solidity: function L2_BLOCK_TIME() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) L2BLOCKTIME() (*big.Int, error) { - return _L2OutputOracle.Contract.L2BLOCKTIME(&_L2OutputOracle.CallOpts) -} - -// L2BLOCKTIME is a free data retrieval call binding the contract method 0x002134cc. -// -// Solidity: function L2_BLOCK_TIME() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) L2BLOCKTIME() (*big.Int, error) { - return _L2OutputOracle.Contract.L2BLOCKTIME(&_L2OutputOracle.CallOpts) -} - -// PROPOSER is a free data retrieval call binding the contract method 0xbffa7f0f. -// -// Solidity: function PROPOSER() view returns(address) -func (_L2OutputOracle *L2OutputOracleCaller) PROPOSER(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "PROPOSER") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// PROPOSER is a free data retrieval call binding the contract method 0xbffa7f0f. -// -// Solidity: function PROPOSER() view returns(address) -func (_L2OutputOracle *L2OutputOracleSession) PROPOSER() (common.Address, error) { - return _L2OutputOracle.Contract.PROPOSER(&_L2OutputOracle.CallOpts) -} - -// PROPOSER is a free data retrieval call binding the contract method 0xbffa7f0f. -// -// Solidity: function PROPOSER() view returns(address) -func (_L2OutputOracle *L2OutputOracleCallerSession) PROPOSER() (common.Address, error) { - return _L2OutputOracle.Contract.PROPOSER(&_L2OutputOracle.CallOpts) -} - -// SUBMISSIONINTERVAL is a free data retrieval call binding the contract method 0x529933df. -// -// Solidity: function SUBMISSION_INTERVAL() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) SUBMISSIONINTERVAL(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "SUBMISSION_INTERVAL") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// SUBMISSIONINTERVAL is a free data retrieval call binding the contract method 0x529933df. -// -// Solidity: function SUBMISSION_INTERVAL() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) SUBMISSIONINTERVAL() (*big.Int, error) { - return _L2OutputOracle.Contract.SUBMISSIONINTERVAL(&_L2OutputOracle.CallOpts) -} - -// SUBMISSIONINTERVAL is a free data retrieval call binding the contract method 0x529933df. -// -// Solidity: function SUBMISSION_INTERVAL() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) SUBMISSIONINTERVAL() (*big.Int, error) { - return _L2OutputOracle.Contract.SUBMISSIONINTERVAL(&_L2OutputOracle.CallOpts) -} - -// Challenger is a free data retrieval call binding the contract method 0x534db0e2. -// -// Solidity: function challenger() view returns(address) -func (_L2OutputOracle *L2OutputOracleCaller) Challenger(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "challenger") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Challenger is a free data retrieval call binding the contract method 0x534db0e2. -// -// Solidity: function challenger() view returns(address) -func (_L2OutputOracle *L2OutputOracleSession) Challenger() (common.Address, error) { - return _L2OutputOracle.Contract.Challenger(&_L2OutputOracle.CallOpts) -} - -// Challenger is a free data retrieval call binding the contract method 0x534db0e2. -// -// Solidity: function challenger() view returns(address) -func (_L2OutputOracle *L2OutputOracleCallerSession) Challenger() (common.Address, error) { - return _L2OutputOracle.Contract.Challenger(&_L2OutputOracle.CallOpts) -} - -// ComputeL2Timestamp is a free data retrieval call binding the contract method 0xd1de856c. -// -// Solidity: function computeL2Timestamp(uint256 _l2BlockNumber) view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) ComputeL2Timestamp(opts *bind.CallOpts, _l2BlockNumber *big.Int) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "computeL2Timestamp", _l2BlockNumber) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// ComputeL2Timestamp is a free data retrieval call binding the contract method 0xd1de856c. -// -// Solidity: function computeL2Timestamp(uint256 _l2BlockNumber) view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) ComputeL2Timestamp(_l2BlockNumber *big.Int) (*big.Int, error) { - return _L2OutputOracle.Contract.ComputeL2Timestamp(&_L2OutputOracle.CallOpts, _l2BlockNumber) -} - -// ComputeL2Timestamp is a free data retrieval call binding the contract method 0xd1de856c. -// -// Solidity: function computeL2Timestamp(uint256 _l2BlockNumber) view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) ComputeL2Timestamp(_l2BlockNumber *big.Int) (*big.Int, error) { - return _L2OutputOracle.Contract.ComputeL2Timestamp(&_L2OutputOracle.CallOpts, _l2BlockNumber) -} - -// FinalizationPeriodSeconds is a free data retrieval call binding the contract method 0xce5db8d6. -// -// Solidity: function finalizationPeriodSeconds() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) FinalizationPeriodSeconds(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "finalizationPeriodSeconds") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// FinalizationPeriodSeconds is a free data retrieval call binding the contract method 0xce5db8d6. -// -// Solidity: function finalizationPeriodSeconds() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) FinalizationPeriodSeconds() (*big.Int, error) { - return _L2OutputOracle.Contract.FinalizationPeriodSeconds(&_L2OutputOracle.CallOpts) -} - -// FinalizationPeriodSeconds is a free data retrieval call binding the contract method 0xce5db8d6. -// -// Solidity: function finalizationPeriodSeconds() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) FinalizationPeriodSeconds() (*big.Int, error) { - return _L2OutputOracle.Contract.FinalizationPeriodSeconds(&_L2OutputOracle.CallOpts) -} - -// GetL2Output is a free data retrieval call binding the contract method 0xa25ae557. -// -// Solidity: function getL2Output(uint256 _l2OutputIndex) view returns((bytes32,uint128,uint128)) -func (_L2OutputOracle *L2OutputOracleCaller) GetL2Output(opts *bind.CallOpts, _l2OutputIndex *big.Int) (TypesOutputProposal, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "getL2Output", _l2OutputIndex) - - if err != nil { - return *new(TypesOutputProposal), err - } - - out0 := *abi.ConvertType(out[0], new(TypesOutputProposal)).(*TypesOutputProposal) - - return out0, err - -} - -// GetL2Output is a free data retrieval call binding the contract method 0xa25ae557. -// -// Solidity: function getL2Output(uint256 _l2OutputIndex) view returns((bytes32,uint128,uint128)) -func (_L2OutputOracle *L2OutputOracleSession) GetL2Output(_l2OutputIndex *big.Int) (TypesOutputProposal, error) { - return _L2OutputOracle.Contract.GetL2Output(&_L2OutputOracle.CallOpts, _l2OutputIndex) -} - -// GetL2Output is a free data retrieval call binding the contract method 0xa25ae557. -// -// Solidity: function getL2Output(uint256 _l2OutputIndex) view returns((bytes32,uint128,uint128)) -func (_L2OutputOracle *L2OutputOracleCallerSession) GetL2Output(_l2OutputIndex *big.Int) (TypesOutputProposal, error) { - return _L2OutputOracle.Contract.GetL2Output(&_L2OutputOracle.CallOpts, _l2OutputIndex) -} - -// GetL2OutputAfter is a free data retrieval call binding the contract method 0xcf8e5cf0. -// -// Solidity: function getL2OutputAfter(uint256 _l2BlockNumber) view returns((bytes32,uint128,uint128)) -func (_L2OutputOracle *L2OutputOracleCaller) GetL2OutputAfter(opts *bind.CallOpts, _l2BlockNumber *big.Int) (TypesOutputProposal, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "getL2OutputAfter", _l2BlockNumber) - - if err != nil { - return *new(TypesOutputProposal), err - } - - out0 := *abi.ConvertType(out[0], new(TypesOutputProposal)).(*TypesOutputProposal) - - return out0, err - -} - -// GetL2OutputAfter is a free data retrieval call binding the contract method 0xcf8e5cf0. -// -// Solidity: function getL2OutputAfter(uint256 _l2BlockNumber) view returns((bytes32,uint128,uint128)) -func (_L2OutputOracle *L2OutputOracleSession) GetL2OutputAfter(_l2BlockNumber *big.Int) (TypesOutputProposal, error) { - return _L2OutputOracle.Contract.GetL2OutputAfter(&_L2OutputOracle.CallOpts, _l2BlockNumber) -} - -// GetL2OutputAfter is a free data retrieval call binding the contract method 0xcf8e5cf0. -// -// Solidity: function getL2OutputAfter(uint256 _l2BlockNumber) view returns((bytes32,uint128,uint128)) -func (_L2OutputOracle *L2OutputOracleCallerSession) GetL2OutputAfter(_l2BlockNumber *big.Int) (TypesOutputProposal, error) { - return _L2OutputOracle.Contract.GetL2OutputAfter(&_L2OutputOracle.CallOpts, _l2BlockNumber) -} - -// GetL2OutputIndexAfter is a free data retrieval call binding the contract method 0x7f006420. -// -// Solidity: function getL2OutputIndexAfter(uint256 _l2BlockNumber) view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) GetL2OutputIndexAfter(opts *bind.CallOpts, _l2BlockNumber *big.Int) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "getL2OutputIndexAfter", _l2BlockNumber) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetL2OutputIndexAfter is a free data retrieval call binding the contract method 0x7f006420. -// -// Solidity: function getL2OutputIndexAfter(uint256 _l2BlockNumber) view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) GetL2OutputIndexAfter(_l2BlockNumber *big.Int) (*big.Int, error) { - return _L2OutputOracle.Contract.GetL2OutputIndexAfter(&_L2OutputOracle.CallOpts, _l2BlockNumber) -} - -// GetL2OutputIndexAfter is a free data retrieval call binding the contract method 0x7f006420. -// -// Solidity: function getL2OutputIndexAfter(uint256 _l2BlockNumber) view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) GetL2OutputIndexAfter(_l2BlockNumber *big.Int) (*big.Int, error) { - return _L2OutputOracle.Contract.GetL2OutputIndexAfter(&_L2OutputOracle.CallOpts, _l2BlockNumber) -} - -// L2BlockTime is a free data retrieval call binding the contract method 0x93991af3. -// -// Solidity: function l2BlockTime() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) L2BlockTime(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "l2BlockTime") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// L2BlockTime is a free data retrieval call binding the contract method 0x93991af3. -// -// Solidity: function l2BlockTime() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) L2BlockTime() (*big.Int, error) { - return _L2OutputOracle.Contract.L2BlockTime(&_L2OutputOracle.CallOpts) -} - -// L2BlockTime is a free data retrieval call binding the contract method 0x93991af3. -// -// Solidity: function l2BlockTime() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) L2BlockTime() (*big.Int, error) { - return _L2OutputOracle.Contract.L2BlockTime(&_L2OutputOracle.CallOpts) -} - -// LatestBlockNumber is a free data retrieval call binding the contract method 0x4599c788. -// -// Solidity: function latestBlockNumber() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) LatestBlockNumber(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "latestBlockNumber") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// LatestBlockNumber is a free data retrieval call binding the contract method 0x4599c788. -// -// Solidity: function latestBlockNumber() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) LatestBlockNumber() (*big.Int, error) { - return _L2OutputOracle.Contract.LatestBlockNumber(&_L2OutputOracle.CallOpts) -} - -// LatestBlockNumber is a free data retrieval call binding the contract method 0x4599c788. -// -// Solidity: function latestBlockNumber() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) LatestBlockNumber() (*big.Int, error) { - return _L2OutputOracle.Contract.LatestBlockNumber(&_L2OutputOracle.CallOpts) -} - -// LatestOutputIndex is a free data retrieval call binding the contract method 0x69f16eec. -// -// Solidity: function latestOutputIndex() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) LatestOutputIndex(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "latestOutputIndex") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// LatestOutputIndex is a free data retrieval call binding the contract method 0x69f16eec. -// -// Solidity: function latestOutputIndex() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) LatestOutputIndex() (*big.Int, error) { - return _L2OutputOracle.Contract.LatestOutputIndex(&_L2OutputOracle.CallOpts) -} - -// LatestOutputIndex is a free data retrieval call binding the contract method 0x69f16eec. -// -// Solidity: function latestOutputIndex() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) LatestOutputIndex() (*big.Int, error) { - return _L2OutputOracle.Contract.LatestOutputIndex(&_L2OutputOracle.CallOpts) -} - -// NextBlockNumber is a free data retrieval call binding the contract method 0xdcec3348. -// -// Solidity: function nextBlockNumber() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) NextBlockNumber(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "nextBlockNumber") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// NextBlockNumber is a free data retrieval call binding the contract method 0xdcec3348. -// -// Solidity: function nextBlockNumber() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) NextBlockNumber() (*big.Int, error) { - return _L2OutputOracle.Contract.NextBlockNumber(&_L2OutputOracle.CallOpts) -} - -// NextBlockNumber is a free data retrieval call binding the contract method 0xdcec3348. -// -// Solidity: function nextBlockNumber() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) NextBlockNumber() (*big.Int, error) { - return _L2OutputOracle.Contract.NextBlockNumber(&_L2OutputOracle.CallOpts) -} - -// NextOutputIndex is a free data retrieval call binding the contract method 0x6abcf563. -// -// Solidity: function nextOutputIndex() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) NextOutputIndex(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "nextOutputIndex") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// NextOutputIndex is a free data retrieval call binding the contract method 0x6abcf563. -// -// Solidity: function nextOutputIndex() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) NextOutputIndex() (*big.Int, error) { - return _L2OutputOracle.Contract.NextOutputIndex(&_L2OutputOracle.CallOpts) -} - -// NextOutputIndex is a free data retrieval call binding the contract method 0x6abcf563. -// -// Solidity: function nextOutputIndex() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) NextOutputIndex() (*big.Int, error) { - return _L2OutputOracle.Contract.NextOutputIndex(&_L2OutputOracle.CallOpts) -} - -// Proposer is a free data retrieval call binding the contract method 0xa8e4fb90. -// -// Solidity: function proposer() view returns(address) -func (_L2OutputOracle *L2OutputOracleCaller) Proposer(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "proposer") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Proposer is a free data retrieval call binding the contract method 0xa8e4fb90. -// -// Solidity: function proposer() view returns(address) -func (_L2OutputOracle *L2OutputOracleSession) Proposer() (common.Address, error) { - return _L2OutputOracle.Contract.Proposer(&_L2OutputOracle.CallOpts) -} - -// Proposer is a free data retrieval call binding the contract method 0xa8e4fb90. -// -// Solidity: function proposer() view returns(address) -func (_L2OutputOracle *L2OutputOracleCallerSession) Proposer() (common.Address, error) { - return _L2OutputOracle.Contract.Proposer(&_L2OutputOracle.CallOpts) -} - -// StartingBlockNumber is a free data retrieval call binding the contract method 0x70872aa5. -// -// Solidity: function startingBlockNumber() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) StartingBlockNumber(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "startingBlockNumber") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// StartingBlockNumber is a free data retrieval call binding the contract method 0x70872aa5. -// -// Solidity: function startingBlockNumber() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) StartingBlockNumber() (*big.Int, error) { - return _L2OutputOracle.Contract.StartingBlockNumber(&_L2OutputOracle.CallOpts) -} - -// StartingBlockNumber is a free data retrieval call binding the contract method 0x70872aa5. -// -// Solidity: function startingBlockNumber() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) StartingBlockNumber() (*big.Int, error) { - return _L2OutputOracle.Contract.StartingBlockNumber(&_L2OutputOracle.CallOpts) -} - -// StartingTimestamp is a free data retrieval call binding the contract method 0x88786272. -// -// Solidity: function startingTimestamp() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) StartingTimestamp(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "startingTimestamp") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// StartingTimestamp is a free data retrieval call binding the contract method 0x88786272. -// -// Solidity: function startingTimestamp() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) StartingTimestamp() (*big.Int, error) { - return _L2OutputOracle.Contract.StartingTimestamp(&_L2OutputOracle.CallOpts) -} - -// StartingTimestamp is a free data retrieval call binding the contract method 0x88786272. -// -// Solidity: function startingTimestamp() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) StartingTimestamp() (*big.Int, error) { - return _L2OutputOracle.Contract.StartingTimestamp(&_L2OutputOracle.CallOpts) -} - -// SubmissionInterval is a free data retrieval call binding the contract method 0xe1a41bcf. -// -// Solidity: function submissionInterval() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) SubmissionInterval(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "submissionInterval") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// SubmissionInterval is a free data retrieval call binding the contract method 0xe1a41bcf. -// -// Solidity: function submissionInterval() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) SubmissionInterval() (*big.Int, error) { - return _L2OutputOracle.Contract.SubmissionInterval(&_L2OutputOracle.CallOpts) -} - -// SubmissionInterval is a free data retrieval call binding the contract method 0xe1a41bcf. -// -// Solidity: function submissionInterval() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) SubmissionInterval() (*big.Int, error) { - return _L2OutputOracle.Contract.SubmissionInterval(&_L2OutputOracle.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L2OutputOracle *L2OutputOracleCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L2OutputOracle *L2OutputOracleSession) Version() (string, error) { - return _L2OutputOracle.Contract.Version(&_L2OutputOracle.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L2OutputOracle *L2OutputOracleCallerSession) Version() (string, error) { - return _L2OutputOracle.Contract.Version(&_L2OutputOracle.CallOpts) -} - -// DeleteL2Outputs is a paid mutator transaction binding the contract method 0x89c44cbb. -// -// Solidity: function deleteL2Outputs(uint256 _l2OutputIndex) returns() -func (_L2OutputOracle *L2OutputOracleTransactor) DeleteL2Outputs(opts *bind.TransactOpts, _l2OutputIndex *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.contract.Transact(opts, "deleteL2Outputs", _l2OutputIndex) -} - -// DeleteL2Outputs is a paid mutator transaction binding the contract method 0x89c44cbb. -// -// Solidity: function deleteL2Outputs(uint256 _l2OutputIndex) returns() -func (_L2OutputOracle *L2OutputOracleSession) DeleteL2Outputs(_l2OutputIndex *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.Contract.DeleteL2Outputs(&_L2OutputOracle.TransactOpts, _l2OutputIndex) -} - -// DeleteL2Outputs is a paid mutator transaction binding the contract method 0x89c44cbb. -// -// Solidity: function deleteL2Outputs(uint256 _l2OutputIndex) returns() -func (_L2OutputOracle *L2OutputOracleTransactorSession) DeleteL2Outputs(_l2OutputIndex *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.Contract.DeleteL2Outputs(&_L2OutputOracle.TransactOpts, _l2OutputIndex) -} - -// Initialize is a paid mutator transaction binding the contract method 0x1c89c97d. -// -// Solidity: function initialize(uint256 _submissionInterval, uint256 _l2BlockTime, uint256 _startingBlockNumber, uint256 _startingTimestamp, address _proposer, address _challenger, uint256 _finalizationPeriodSeconds) returns() -func (_L2OutputOracle *L2OutputOracleTransactor) Initialize(opts *bind.TransactOpts, _submissionInterval *big.Int, _l2BlockTime *big.Int, _startingBlockNumber *big.Int, _startingTimestamp *big.Int, _proposer common.Address, _challenger common.Address, _finalizationPeriodSeconds *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.contract.Transact(opts, "initialize", _submissionInterval, _l2BlockTime, _startingBlockNumber, _startingTimestamp, _proposer, _challenger, _finalizationPeriodSeconds) -} - -// Initialize is a paid mutator transaction binding the contract method 0x1c89c97d. -// -// Solidity: function initialize(uint256 _submissionInterval, uint256 _l2BlockTime, uint256 _startingBlockNumber, uint256 _startingTimestamp, address _proposer, address _challenger, uint256 _finalizationPeriodSeconds) returns() -func (_L2OutputOracle *L2OutputOracleSession) Initialize(_submissionInterval *big.Int, _l2BlockTime *big.Int, _startingBlockNumber *big.Int, _startingTimestamp *big.Int, _proposer common.Address, _challenger common.Address, _finalizationPeriodSeconds *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.Contract.Initialize(&_L2OutputOracle.TransactOpts, _submissionInterval, _l2BlockTime, _startingBlockNumber, _startingTimestamp, _proposer, _challenger, _finalizationPeriodSeconds) -} - -// Initialize is a paid mutator transaction binding the contract method 0x1c89c97d. -// -// Solidity: function initialize(uint256 _submissionInterval, uint256 _l2BlockTime, uint256 _startingBlockNumber, uint256 _startingTimestamp, address _proposer, address _challenger, uint256 _finalizationPeriodSeconds) returns() -func (_L2OutputOracle *L2OutputOracleTransactorSession) Initialize(_submissionInterval *big.Int, _l2BlockTime *big.Int, _startingBlockNumber *big.Int, _startingTimestamp *big.Int, _proposer common.Address, _challenger common.Address, _finalizationPeriodSeconds *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.Contract.Initialize(&_L2OutputOracle.TransactOpts, _submissionInterval, _l2BlockTime, _startingBlockNumber, _startingTimestamp, _proposer, _challenger, _finalizationPeriodSeconds) -} - -// ProposeL2Output is a paid mutator transaction binding the contract method 0x9aaab648. -// -// Solidity: function proposeL2Output(bytes32 _outputRoot, uint256 _l2BlockNumber, bytes32 _l1BlockHash, uint256 _l1BlockNumber) payable returns() -func (_L2OutputOracle *L2OutputOracleTransactor) ProposeL2Output(opts *bind.TransactOpts, _outputRoot [32]byte, _l2BlockNumber *big.Int, _l1BlockHash [32]byte, _l1BlockNumber *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.contract.Transact(opts, "proposeL2Output", _outputRoot, _l2BlockNumber, _l1BlockHash, _l1BlockNumber) -} - -// ProposeL2Output is a paid mutator transaction binding the contract method 0x9aaab648. -// -// Solidity: function proposeL2Output(bytes32 _outputRoot, uint256 _l2BlockNumber, bytes32 _l1BlockHash, uint256 _l1BlockNumber) payable returns() -func (_L2OutputOracle *L2OutputOracleSession) ProposeL2Output(_outputRoot [32]byte, _l2BlockNumber *big.Int, _l1BlockHash [32]byte, _l1BlockNumber *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.Contract.ProposeL2Output(&_L2OutputOracle.TransactOpts, _outputRoot, _l2BlockNumber, _l1BlockHash, _l1BlockNumber) -} - -// ProposeL2Output is a paid mutator transaction binding the contract method 0x9aaab648. -// -// Solidity: function proposeL2Output(bytes32 _outputRoot, uint256 _l2BlockNumber, bytes32 _l1BlockHash, uint256 _l1BlockNumber) payable returns() -func (_L2OutputOracle *L2OutputOracleTransactorSession) ProposeL2Output(_outputRoot [32]byte, _l2BlockNumber *big.Int, _l1BlockHash [32]byte, _l1BlockNumber *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.Contract.ProposeL2Output(&_L2OutputOracle.TransactOpts, _outputRoot, _l2BlockNumber, _l1BlockHash, _l1BlockNumber) -} - -// L2OutputOracleInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the L2OutputOracle contract. -type L2OutputOracleInitializedIterator struct { - Event *L2OutputOracleInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L2OutputOracleInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2OutputOracleInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2OutputOracleInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2OutputOracleInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2OutputOracleInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2OutputOracleInitialized represents a Initialized event raised by the L2OutputOracle contract. -type L2OutputOracleInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L2OutputOracle *L2OutputOracleFilterer) FilterInitialized(opts *bind.FilterOpts) (*L2OutputOracleInitializedIterator, error) { - - logs, sub, err := _L2OutputOracle.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &L2OutputOracleInitializedIterator{contract: _L2OutputOracle.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L2OutputOracle *L2OutputOracleFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *L2OutputOracleInitialized) (event.Subscription, error) { - - logs, sub, err := _L2OutputOracle.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2OutputOracleInitialized) - if err := _L2OutputOracle.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L2OutputOracle *L2OutputOracleFilterer) ParseInitialized(log types.Log) (*L2OutputOracleInitialized, error) { - event := new(L2OutputOracleInitialized) - if err := _L2OutputOracle.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L2OutputOracleOutputProposedIterator is returned from FilterOutputProposed and is used to iterate over the raw logs and unpacked data for OutputProposed events raised by the L2OutputOracle contract. -type L2OutputOracleOutputProposedIterator struct { - Event *L2OutputOracleOutputProposed // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L2OutputOracleOutputProposedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2OutputOracleOutputProposed) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2OutputOracleOutputProposed) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2OutputOracleOutputProposedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2OutputOracleOutputProposedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2OutputOracleOutputProposed represents a OutputProposed event raised by the L2OutputOracle contract. -type L2OutputOracleOutputProposed struct { - OutputRoot [32]byte - L2OutputIndex *big.Int - L2BlockNumber *big.Int - L1Timestamp *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOutputProposed is a free log retrieval operation binding the contract event 0xa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e2. -// -// Solidity: event OutputProposed(bytes32 indexed outputRoot, uint256 indexed l2OutputIndex, uint256 indexed l2BlockNumber, uint256 l1Timestamp) -func (_L2OutputOracle *L2OutputOracleFilterer) FilterOutputProposed(opts *bind.FilterOpts, outputRoot [][32]byte, l2OutputIndex []*big.Int, l2BlockNumber []*big.Int) (*L2OutputOracleOutputProposedIterator, error) { - - var outputRootRule []interface{} - for _, outputRootItem := range outputRoot { - outputRootRule = append(outputRootRule, outputRootItem) - } - var l2OutputIndexRule []interface{} - for _, l2OutputIndexItem := range l2OutputIndex { - l2OutputIndexRule = append(l2OutputIndexRule, l2OutputIndexItem) - } - var l2BlockNumberRule []interface{} - for _, l2BlockNumberItem := range l2BlockNumber { - l2BlockNumberRule = append(l2BlockNumberRule, l2BlockNumberItem) - } - - logs, sub, err := _L2OutputOracle.contract.FilterLogs(opts, "OutputProposed", outputRootRule, l2OutputIndexRule, l2BlockNumberRule) - if err != nil { - return nil, err - } - return &L2OutputOracleOutputProposedIterator{contract: _L2OutputOracle.contract, event: "OutputProposed", logs: logs, sub: sub}, nil -} - -// WatchOutputProposed is a free log subscription operation binding the contract event 0xa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e2. -// -// Solidity: event OutputProposed(bytes32 indexed outputRoot, uint256 indexed l2OutputIndex, uint256 indexed l2BlockNumber, uint256 l1Timestamp) -func (_L2OutputOracle *L2OutputOracleFilterer) WatchOutputProposed(opts *bind.WatchOpts, sink chan<- *L2OutputOracleOutputProposed, outputRoot [][32]byte, l2OutputIndex []*big.Int, l2BlockNumber []*big.Int) (event.Subscription, error) { - - var outputRootRule []interface{} - for _, outputRootItem := range outputRoot { - outputRootRule = append(outputRootRule, outputRootItem) - } - var l2OutputIndexRule []interface{} - for _, l2OutputIndexItem := range l2OutputIndex { - l2OutputIndexRule = append(l2OutputIndexRule, l2OutputIndexItem) - } - var l2BlockNumberRule []interface{} - for _, l2BlockNumberItem := range l2BlockNumber { - l2BlockNumberRule = append(l2BlockNumberRule, l2BlockNumberItem) - } - - logs, sub, err := _L2OutputOracle.contract.WatchLogs(opts, "OutputProposed", outputRootRule, l2OutputIndexRule, l2BlockNumberRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2OutputOracleOutputProposed) - if err := _L2OutputOracle.contract.UnpackLog(event, "OutputProposed", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOutputProposed is a log parse operation binding the contract event 0xa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e2. -// -// Solidity: event OutputProposed(bytes32 indexed outputRoot, uint256 indexed l2OutputIndex, uint256 indexed l2BlockNumber, uint256 l1Timestamp) -func (_L2OutputOracle *L2OutputOracleFilterer) ParseOutputProposed(log types.Log) (*L2OutputOracleOutputProposed, error) { - event := new(L2OutputOracleOutputProposed) - if err := _L2OutputOracle.contract.UnpackLog(event, "OutputProposed", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L2OutputOracleOutputsDeletedIterator is returned from FilterOutputsDeleted and is used to iterate over the raw logs and unpacked data for OutputsDeleted events raised by the L2OutputOracle contract. -type L2OutputOracleOutputsDeletedIterator struct { - Event *L2OutputOracleOutputsDeleted // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L2OutputOracleOutputsDeletedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2OutputOracleOutputsDeleted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2OutputOracleOutputsDeleted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2OutputOracleOutputsDeletedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2OutputOracleOutputsDeletedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2OutputOracleOutputsDeleted represents a OutputsDeleted event raised by the L2OutputOracle contract. -type L2OutputOracleOutputsDeleted struct { - PrevNextOutputIndex *big.Int - NewNextOutputIndex *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOutputsDeleted is a free log retrieval operation binding the contract event 0x4ee37ac2c786ec85e87592d3c5c8a1dd66f8496dda3f125d9ea8ca5f657629b6. -// -// Solidity: event OutputsDeleted(uint256 indexed prevNextOutputIndex, uint256 indexed newNextOutputIndex) -func (_L2OutputOracle *L2OutputOracleFilterer) FilterOutputsDeleted(opts *bind.FilterOpts, prevNextOutputIndex []*big.Int, newNextOutputIndex []*big.Int) (*L2OutputOracleOutputsDeletedIterator, error) { - - var prevNextOutputIndexRule []interface{} - for _, prevNextOutputIndexItem := range prevNextOutputIndex { - prevNextOutputIndexRule = append(prevNextOutputIndexRule, prevNextOutputIndexItem) - } - var newNextOutputIndexRule []interface{} - for _, newNextOutputIndexItem := range newNextOutputIndex { - newNextOutputIndexRule = append(newNextOutputIndexRule, newNextOutputIndexItem) - } - - logs, sub, err := _L2OutputOracle.contract.FilterLogs(opts, "OutputsDeleted", prevNextOutputIndexRule, newNextOutputIndexRule) - if err != nil { - return nil, err - } - return &L2OutputOracleOutputsDeletedIterator{contract: _L2OutputOracle.contract, event: "OutputsDeleted", logs: logs, sub: sub}, nil -} - -// WatchOutputsDeleted is a free log subscription operation binding the contract event 0x4ee37ac2c786ec85e87592d3c5c8a1dd66f8496dda3f125d9ea8ca5f657629b6. -// -// Solidity: event OutputsDeleted(uint256 indexed prevNextOutputIndex, uint256 indexed newNextOutputIndex) -func (_L2OutputOracle *L2OutputOracleFilterer) WatchOutputsDeleted(opts *bind.WatchOpts, sink chan<- *L2OutputOracleOutputsDeleted, prevNextOutputIndex []*big.Int, newNextOutputIndex []*big.Int) (event.Subscription, error) { - - var prevNextOutputIndexRule []interface{} - for _, prevNextOutputIndexItem := range prevNextOutputIndex { - prevNextOutputIndexRule = append(prevNextOutputIndexRule, prevNextOutputIndexItem) - } - var newNextOutputIndexRule []interface{} - for _, newNextOutputIndexItem := range newNextOutputIndex { - newNextOutputIndexRule = append(newNextOutputIndexRule, newNextOutputIndexItem) - } - - logs, sub, err := _L2OutputOracle.contract.WatchLogs(opts, "OutputsDeleted", prevNextOutputIndexRule, newNextOutputIndexRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2OutputOracleOutputsDeleted) - if err := _L2OutputOracle.contract.UnpackLog(event, "OutputsDeleted", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOutputsDeleted is a log parse operation binding the contract event 0x4ee37ac2c786ec85e87592d3c5c8a1dd66f8496dda3f125d9ea8ca5f657629b6. -// -// Solidity: event OutputsDeleted(uint256 indexed prevNextOutputIndex, uint256 indexed newNextOutputIndex) -func (_L2OutputOracle *L2OutputOracleFilterer) ParseOutputsDeleted(log types.Log) (*L2OutputOracleOutputsDeleted, error) { - event := new(L2OutputOracleOutputsDeleted) - if err := _L2OutputOracle.contract.UnpackLog(event, "OutputsDeleted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/op-chain-ops/upgrades/bindings/optimismmintableerc20factory.go b/op-chain-ops/upgrades/bindings/optimismmintableerc20factory.go deleted file mode 100644 index 35db648e678e..000000000000 --- a/op-chain-ops/upgrades/bindings/optimismmintableerc20factory.go +++ /dev/null @@ -1,798 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindings - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// OptimismMintableERC20FactoryMetaData contains all meta data concerning the OptimismMintableERC20Factory contract. -var OptimismMintableERC20FactoryMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BRIDGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"createOptimismMintableERC20\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"_decimals\",\"type\":\"uint8\"}],\"name\":\"createOptimismMintableERC20WithDecimals\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"createStandardL2Token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bridge\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"deployer\",\"type\":\"address\"}],\"name\":\"OptimismMintableERC20Created\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"name\":\"StandardL2TokenCreated\",\"type\":\"event\"}]", -} - -// OptimismMintableERC20FactoryABI is the input ABI used to generate the binding from. -// Deprecated: Use OptimismMintableERC20FactoryMetaData.ABI instead. -var OptimismMintableERC20FactoryABI = OptimismMintableERC20FactoryMetaData.ABI - -// OptimismMintableERC20Factory is an auto generated Go binding around an Ethereum contract. -type OptimismMintableERC20Factory struct { - OptimismMintableERC20FactoryCaller // Read-only binding to the contract - OptimismMintableERC20FactoryTransactor // Write-only binding to the contract - OptimismMintableERC20FactoryFilterer // Log filterer for contract events -} - -// OptimismMintableERC20FactoryCaller is an auto generated read-only Go binding around an Ethereum contract. -type OptimismMintableERC20FactoryCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// OptimismMintableERC20FactoryTransactor is an auto generated write-only Go binding around an Ethereum contract. -type OptimismMintableERC20FactoryTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// OptimismMintableERC20FactoryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type OptimismMintableERC20FactoryFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// OptimismMintableERC20FactorySession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type OptimismMintableERC20FactorySession struct { - Contract *OptimismMintableERC20Factory // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// OptimismMintableERC20FactoryCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type OptimismMintableERC20FactoryCallerSession struct { - Contract *OptimismMintableERC20FactoryCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// OptimismMintableERC20FactoryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type OptimismMintableERC20FactoryTransactorSession struct { - Contract *OptimismMintableERC20FactoryTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// OptimismMintableERC20FactoryRaw is an auto generated low-level Go binding around an Ethereum contract. -type OptimismMintableERC20FactoryRaw struct { - Contract *OptimismMintableERC20Factory // Generic contract binding to access the raw methods on -} - -// OptimismMintableERC20FactoryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type OptimismMintableERC20FactoryCallerRaw struct { - Contract *OptimismMintableERC20FactoryCaller // Generic read-only contract binding to access the raw methods on -} - -// OptimismMintableERC20FactoryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type OptimismMintableERC20FactoryTransactorRaw struct { - Contract *OptimismMintableERC20FactoryTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewOptimismMintableERC20Factory creates a new instance of OptimismMintableERC20Factory, bound to a specific deployed contract. -func NewOptimismMintableERC20Factory(address common.Address, backend bind.ContractBackend) (*OptimismMintableERC20Factory, error) { - contract, err := bindOptimismMintableERC20Factory(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &OptimismMintableERC20Factory{OptimismMintableERC20FactoryCaller: OptimismMintableERC20FactoryCaller{contract: contract}, OptimismMintableERC20FactoryTransactor: OptimismMintableERC20FactoryTransactor{contract: contract}, OptimismMintableERC20FactoryFilterer: OptimismMintableERC20FactoryFilterer{contract: contract}}, nil -} - -// NewOptimismMintableERC20FactoryCaller creates a new read-only instance of OptimismMintableERC20Factory, bound to a specific deployed contract. -func NewOptimismMintableERC20FactoryCaller(address common.Address, caller bind.ContractCaller) (*OptimismMintableERC20FactoryCaller, error) { - contract, err := bindOptimismMintableERC20Factory(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &OptimismMintableERC20FactoryCaller{contract: contract}, nil -} - -// NewOptimismMintableERC20FactoryTransactor creates a new write-only instance of OptimismMintableERC20Factory, bound to a specific deployed contract. -func NewOptimismMintableERC20FactoryTransactor(address common.Address, transactor bind.ContractTransactor) (*OptimismMintableERC20FactoryTransactor, error) { - contract, err := bindOptimismMintableERC20Factory(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &OptimismMintableERC20FactoryTransactor{contract: contract}, nil -} - -// NewOptimismMintableERC20FactoryFilterer creates a new log filterer instance of OptimismMintableERC20Factory, bound to a specific deployed contract. -func NewOptimismMintableERC20FactoryFilterer(address common.Address, filterer bind.ContractFilterer) (*OptimismMintableERC20FactoryFilterer, error) { - contract, err := bindOptimismMintableERC20Factory(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &OptimismMintableERC20FactoryFilterer{contract: contract}, nil -} - -// bindOptimismMintableERC20Factory binds a generic wrapper to an already deployed contract. -func bindOptimismMintableERC20Factory(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(OptimismMintableERC20FactoryABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _OptimismMintableERC20Factory.Contract.OptimismMintableERC20FactoryCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _OptimismMintableERC20Factory.Contract.OptimismMintableERC20FactoryTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _OptimismMintableERC20Factory.Contract.OptimismMintableERC20FactoryTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _OptimismMintableERC20Factory.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _OptimismMintableERC20Factory.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _OptimismMintableERC20Factory.Contract.contract.Transact(opts, method, params...) -} - -// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. -// -// Solidity: function BRIDGE() view returns(address) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryCaller) BRIDGE(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _OptimismMintableERC20Factory.contract.Call(opts, &out, "BRIDGE") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. -// -// Solidity: function BRIDGE() view returns(address) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactorySession) BRIDGE() (common.Address, error) { - return _OptimismMintableERC20Factory.Contract.BRIDGE(&_OptimismMintableERC20Factory.CallOpts) -} - -// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. -// -// Solidity: function BRIDGE() view returns(address) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryCallerSession) BRIDGE() (common.Address, error) { - return _OptimismMintableERC20Factory.Contract.BRIDGE(&_OptimismMintableERC20Factory.CallOpts) -} - -// Bridge is a free data retrieval call binding the contract method 0xe78cea92. -// -// Solidity: function bridge() view returns(address) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryCaller) Bridge(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _OptimismMintableERC20Factory.contract.Call(opts, &out, "bridge") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Bridge is a free data retrieval call binding the contract method 0xe78cea92. -// -// Solidity: function bridge() view returns(address) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactorySession) Bridge() (common.Address, error) { - return _OptimismMintableERC20Factory.Contract.Bridge(&_OptimismMintableERC20Factory.CallOpts) -} - -// Bridge is a free data retrieval call binding the contract method 0xe78cea92. -// -// Solidity: function bridge() view returns(address) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryCallerSession) Bridge() (common.Address, error) { - return _OptimismMintableERC20Factory.Contract.Bridge(&_OptimismMintableERC20Factory.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _OptimismMintableERC20Factory.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactorySession) Version() (string, error) { - return _OptimismMintableERC20Factory.Contract.Version(&_OptimismMintableERC20Factory.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryCallerSession) Version() (string, error) { - return _OptimismMintableERC20Factory.Contract.Version(&_OptimismMintableERC20Factory.CallOpts) -} - -// CreateOptimismMintableERC20 is a paid mutator transaction binding the contract method 0xce5ac90f. -// -// Solidity: function createOptimismMintableERC20(address _remoteToken, string _name, string _symbol) returns(address) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryTransactor) CreateOptimismMintableERC20(opts *bind.TransactOpts, _remoteToken common.Address, _name string, _symbol string) (*types.Transaction, error) { - return _OptimismMintableERC20Factory.contract.Transact(opts, "createOptimismMintableERC20", _remoteToken, _name, _symbol) -} - -// CreateOptimismMintableERC20 is a paid mutator transaction binding the contract method 0xce5ac90f. -// -// Solidity: function createOptimismMintableERC20(address _remoteToken, string _name, string _symbol) returns(address) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactorySession) CreateOptimismMintableERC20(_remoteToken common.Address, _name string, _symbol string) (*types.Transaction, error) { - return _OptimismMintableERC20Factory.Contract.CreateOptimismMintableERC20(&_OptimismMintableERC20Factory.TransactOpts, _remoteToken, _name, _symbol) -} - -// CreateOptimismMintableERC20 is a paid mutator transaction binding the contract method 0xce5ac90f. -// -// Solidity: function createOptimismMintableERC20(address _remoteToken, string _name, string _symbol) returns(address) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryTransactorSession) CreateOptimismMintableERC20(_remoteToken common.Address, _name string, _symbol string) (*types.Transaction, error) { - return _OptimismMintableERC20Factory.Contract.CreateOptimismMintableERC20(&_OptimismMintableERC20Factory.TransactOpts, _remoteToken, _name, _symbol) -} - -// CreateOptimismMintableERC20WithDecimals is a paid mutator transaction binding the contract method 0x8cf0629c. -// -// Solidity: function createOptimismMintableERC20WithDecimals(address _remoteToken, string _name, string _symbol, uint8 _decimals) returns(address) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryTransactor) CreateOptimismMintableERC20WithDecimals(opts *bind.TransactOpts, _remoteToken common.Address, _name string, _symbol string, _decimals uint8) (*types.Transaction, error) { - return _OptimismMintableERC20Factory.contract.Transact(opts, "createOptimismMintableERC20WithDecimals", _remoteToken, _name, _symbol, _decimals) -} - -// CreateOptimismMintableERC20WithDecimals is a paid mutator transaction binding the contract method 0x8cf0629c. -// -// Solidity: function createOptimismMintableERC20WithDecimals(address _remoteToken, string _name, string _symbol, uint8 _decimals) returns(address) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactorySession) CreateOptimismMintableERC20WithDecimals(_remoteToken common.Address, _name string, _symbol string, _decimals uint8) (*types.Transaction, error) { - return _OptimismMintableERC20Factory.Contract.CreateOptimismMintableERC20WithDecimals(&_OptimismMintableERC20Factory.TransactOpts, _remoteToken, _name, _symbol, _decimals) -} - -// CreateOptimismMintableERC20WithDecimals is a paid mutator transaction binding the contract method 0x8cf0629c. -// -// Solidity: function createOptimismMintableERC20WithDecimals(address _remoteToken, string _name, string _symbol, uint8 _decimals) returns(address) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryTransactorSession) CreateOptimismMintableERC20WithDecimals(_remoteToken common.Address, _name string, _symbol string, _decimals uint8) (*types.Transaction, error) { - return _OptimismMintableERC20Factory.Contract.CreateOptimismMintableERC20WithDecimals(&_OptimismMintableERC20Factory.TransactOpts, _remoteToken, _name, _symbol, _decimals) -} - -// CreateStandardL2Token is a paid mutator transaction binding the contract method 0x896f93d1. -// -// Solidity: function createStandardL2Token(address _remoteToken, string _name, string _symbol) returns(address) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryTransactor) CreateStandardL2Token(opts *bind.TransactOpts, _remoteToken common.Address, _name string, _symbol string) (*types.Transaction, error) { - return _OptimismMintableERC20Factory.contract.Transact(opts, "createStandardL2Token", _remoteToken, _name, _symbol) -} - -// CreateStandardL2Token is a paid mutator transaction binding the contract method 0x896f93d1. -// -// Solidity: function createStandardL2Token(address _remoteToken, string _name, string _symbol) returns(address) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactorySession) CreateStandardL2Token(_remoteToken common.Address, _name string, _symbol string) (*types.Transaction, error) { - return _OptimismMintableERC20Factory.Contract.CreateStandardL2Token(&_OptimismMintableERC20Factory.TransactOpts, _remoteToken, _name, _symbol) -} - -// CreateStandardL2Token is a paid mutator transaction binding the contract method 0x896f93d1. -// -// Solidity: function createStandardL2Token(address _remoteToken, string _name, string _symbol) returns(address) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryTransactorSession) CreateStandardL2Token(_remoteToken common.Address, _name string, _symbol string) (*types.Transaction, error) { - return _OptimismMintableERC20Factory.Contract.CreateStandardL2Token(&_OptimismMintableERC20Factory.TransactOpts, _remoteToken, _name, _symbol) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. -// -// Solidity: function initialize(address _bridge) returns() -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryTransactor) Initialize(opts *bind.TransactOpts, _bridge common.Address) (*types.Transaction, error) { - return _OptimismMintableERC20Factory.contract.Transact(opts, "initialize", _bridge) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. -// -// Solidity: function initialize(address _bridge) returns() -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactorySession) Initialize(_bridge common.Address) (*types.Transaction, error) { - return _OptimismMintableERC20Factory.Contract.Initialize(&_OptimismMintableERC20Factory.TransactOpts, _bridge) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. -// -// Solidity: function initialize(address _bridge) returns() -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryTransactorSession) Initialize(_bridge common.Address) (*types.Transaction, error) { - return _OptimismMintableERC20Factory.Contract.Initialize(&_OptimismMintableERC20Factory.TransactOpts, _bridge) -} - -// OptimismMintableERC20FactoryInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the OptimismMintableERC20Factory contract. -type OptimismMintableERC20FactoryInitializedIterator struct { - Event *OptimismMintableERC20FactoryInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *OptimismMintableERC20FactoryInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(OptimismMintableERC20FactoryInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(OptimismMintableERC20FactoryInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *OptimismMintableERC20FactoryInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *OptimismMintableERC20FactoryInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// OptimismMintableERC20FactoryInitialized represents a Initialized event raised by the OptimismMintableERC20Factory contract. -type OptimismMintableERC20FactoryInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryFilterer) FilterInitialized(opts *bind.FilterOpts) (*OptimismMintableERC20FactoryInitializedIterator, error) { - - logs, sub, err := _OptimismMintableERC20Factory.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &OptimismMintableERC20FactoryInitializedIterator{contract: _OptimismMintableERC20Factory.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *OptimismMintableERC20FactoryInitialized) (event.Subscription, error) { - - logs, sub, err := _OptimismMintableERC20Factory.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(OptimismMintableERC20FactoryInitialized) - if err := _OptimismMintableERC20Factory.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryFilterer) ParseInitialized(log types.Log) (*OptimismMintableERC20FactoryInitialized, error) { - event := new(OptimismMintableERC20FactoryInitialized) - if err := _OptimismMintableERC20Factory.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// OptimismMintableERC20FactoryOptimismMintableERC20CreatedIterator is returned from FilterOptimismMintableERC20Created and is used to iterate over the raw logs and unpacked data for OptimismMintableERC20Created events raised by the OptimismMintableERC20Factory contract. -type OptimismMintableERC20FactoryOptimismMintableERC20CreatedIterator struct { - Event *OptimismMintableERC20FactoryOptimismMintableERC20Created // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *OptimismMintableERC20FactoryOptimismMintableERC20CreatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(OptimismMintableERC20FactoryOptimismMintableERC20Created) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(OptimismMintableERC20FactoryOptimismMintableERC20Created) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *OptimismMintableERC20FactoryOptimismMintableERC20CreatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *OptimismMintableERC20FactoryOptimismMintableERC20CreatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// OptimismMintableERC20FactoryOptimismMintableERC20Created represents a OptimismMintableERC20Created event raised by the OptimismMintableERC20Factory contract. -type OptimismMintableERC20FactoryOptimismMintableERC20Created struct { - LocalToken common.Address - RemoteToken common.Address - Deployer common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOptimismMintableERC20Created is a free log retrieval operation binding the contract event 0x52fe89dd5930f343d25650b62fd367bae47088bcddffd2a88350a6ecdd620cdb. -// -// Solidity: event OptimismMintableERC20Created(address indexed localToken, address indexed remoteToken, address deployer) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryFilterer) FilterOptimismMintableERC20Created(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address) (*OptimismMintableERC20FactoryOptimismMintableERC20CreatedIterator, error) { - - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - - logs, sub, err := _OptimismMintableERC20Factory.contract.FilterLogs(opts, "OptimismMintableERC20Created", localTokenRule, remoteTokenRule) - if err != nil { - return nil, err - } - return &OptimismMintableERC20FactoryOptimismMintableERC20CreatedIterator{contract: _OptimismMintableERC20Factory.contract, event: "OptimismMintableERC20Created", logs: logs, sub: sub}, nil -} - -// WatchOptimismMintableERC20Created is a free log subscription operation binding the contract event 0x52fe89dd5930f343d25650b62fd367bae47088bcddffd2a88350a6ecdd620cdb. -// -// Solidity: event OptimismMintableERC20Created(address indexed localToken, address indexed remoteToken, address deployer) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryFilterer) WatchOptimismMintableERC20Created(opts *bind.WatchOpts, sink chan<- *OptimismMintableERC20FactoryOptimismMintableERC20Created, localToken []common.Address, remoteToken []common.Address) (event.Subscription, error) { - - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - - logs, sub, err := _OptimismMintableERC20Factory.contract.WatchLogs(opts, "OptimismMintableERC20Created", localTokenRule, remoteTokenRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(OptimismMintableERC20FactoryOptimismMintableERC20Created) - if err := _OptimismMintableERC20Factory.contract.UnpackLog(event, "OptimismMintableERC20Created", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOptimismMintableERC20Created is a log parse operation binding the contract event 0x52fe89dd5930f343d25650b62fd367bae47088bcddffd2a88350a6ecdd620cdb. -// -// Solidity: event OptimismMintableERC20Created(address indexed localToken, address indexed remoteToken, address deployer) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryFilterer) ParseOptimismMintableERC20Created(log types.Log) (*OptimismMintableERC20FactoryOptimismMintableERC20Created, error) { - event := new(OptimismMintableERC20FactoryOptimismMintableERC20Created) - if err := _OptimismMintableERC20Factory.contract.UnpackLog(event, "OptimismMintableERC20Created", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// OptimismMintableERC20FactoryStandardL2TokenCreatedIterator is returned from FilterStandardL2TokenCreated and is used to iterate over the raw logs and unpacked data for StandardL2TokenCreated events raised by the OptimismMintableERC20Factory contract. -type OptimismMintableERC20FactoryStandardL2TokenCreatedIterator struct { - Event *OptimismMintableERC20FactoryStandardL2TokenCreated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *OptimismMintableERC20FactoryStandardL2TokenCreatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(OptimismMintableERC20FactoryStandardL2TokenCreated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(OptimismMintableERC20FactoryStandardL2TokenCreated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *OptimismMintableERC20FactoryStandardL2TokenCreatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *OptimismMintableERC20FactoryStandardL2TokenCreatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// OptimismMintableERC20FactoryStandardL2TokenCreated represents a StandardL2TokenCreated event raised by the OptimismMintableERC20Factory contract. -type OptimismMintableERC20FactoryStandardL2TokenCreated struct { - RemoteToken common.Address - LocalToken common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterStandardL2TokenCreated is a free log retrieval operation binding the contract event 0xceeb8e7d520d7f3b65fc11a262b91066940193b05d4f93df07cfdced0eb551cf. -// -// Solidity: event StandardL2TokenCreated(address indexed remoteToken, address indexed localToken) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryFilterer) FilterStandardL2TokenCreated(opts *bind.FilterOpts, remoteToken []common.Address, localToken []common.Address) (*OptimismMintableERC20FactoryStandardL2TokenCreatedIterator, error) { - - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - - logs, sub, err := _OptimismMintableERC20Factory.contract.FilterLogs(opts, "StandardL2TokenCreated", remoteTokenRule, localTokenRule) - if err != nil { - return nil, err - } - return &OptimismMintableERC20FactoryStandardL2TokenCreatedIterator{contract: _OptimismMintableERC20Factory.contract, event: "StandardL2TokenCreated", logs: logs, sub: sub}, nil -} - -// WatchStandardL2TokenCreated is a free log subscription operation binding the contract event 0xceeb8e7d520d7f3b65fc11a262b91066940193b05d4f93df07cfdced0eb551cf. -// -// Solidity: event StandardL2TokenCreated(address indexed remoteToken, address indexed localToken) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryFilterer) WatchStandardL2TokenCreated(opts *bind.WatchOpts, sink chan<- *OptimismMintableERC20FactoryStandardL2TokenCreated, remoteToken []common.Address, localToken []common.Address) (event.Subscription, error) { - - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - - logs, sub, err := _OptimismMintableERC20Factory.contract.WatchLogs(opts, "StandardL2TokenCreated", remoteTokenRule, localTokenRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(OptimismMintableERC20FactoryStandardL2TokenCreated) - if err := _OptimismMintableERC20Factory.contract.UnpackLog(event, "StandardL2TokenCreated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseStandardL2TokenCreated is a log parse operation binding the contract event 0xceeb8e7d520d7f3b65fc11a262b91066940193b05d4f93df07cfdced0eb551cf. -// -// Solidity: event StandardL2TokenCreated(address indexed remoteToken, address indexed localToken) -func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryFilterer) ParseStandardL2TokenCreated(log types.Log) (*OptimismMintableERC20FactoryStandardL2TokenCreated, error) { - event := new(OptimismMintableERC20FactoryStandardL2TokenCreated) - if err := _OptimismMintableERC20Factory.contract.UnpackLog(event, "StandardL2TokenCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/op-chain-ops/upgrades/bindings/optimismportal.go b/op-chain-ops/upgrades/bindings/optimismportal.go deleted file mode 100644 index 55907ecff109..000000000000 --- a/op-chain-ops/upgrades/bindings/optimismportal.go +++ /dev/null @@ -1,1411 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindings - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// TypesOutputRootProof is an auto generated low-level Go binding around an user-defined struct. -type TypesOutputRootProof struct { - Version [32]byte - StateRoot [32]byte - MessagePasserStorageRoot [32]byte - LatestBlockhash [32]byte -} - -// TypesWithdrawalTransaction is an auto generated low-level Go binding around an user-defined struct. -type TypesWithdrawalTransaction struct { - Nonce *big.Int - Sender common.Address - Target common.Address - Value *big.Int - GasLimit *big.Int - Data []byte -} - -// OptimismPortalMetaData contains all meta data concerning the OptimismPortal contract. -var OptimismPortalMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"},{\"inputs\":[],\"name\":\"balance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_mint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"_isCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"depositERC20Transaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"_isCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"depositTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"donateETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"structTypes.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"}],\"name\":\"finalizeWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"finalizedWithdrawals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guardian\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"_l2Oracle\",\"type\":\"address\"},{\"internalType\":\"contractSystemConfig\",\"name\":\"_systemConfig\",\"type\":\"address\"},{\"internalType\":\"contractSuperchainConfig\",\"name\":\"_superchainConfig\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"}],\"name\":\"isOutputFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Oracle\",\"outputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_byteCount\",\"type\":\"uint64\"}],\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"prevBaseFee\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"prevBoughtGas\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"prevBlockNum\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paused_\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"structTypes.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"latestBlockhash\",\"type\":\"bytes32\"}],\"internalType\":\"structTypes.OutputRootProof\",\"name\":\"_outputRootProof\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\"}],\"name\":\"proveWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenWithdrawals\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"timestamp\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2OutputIndex\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"_decimals\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"_name\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_symbol\",\"type\":\"bytes32\"}],\"name\":\"setGasPayingToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"superchainConfig\",\"outputs\":[{\"internalType\":\"contractSuperchainConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"systemConfig\",\"outputs\":[{\"internalType\":\"contractSystemConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"opaqueData\",\"type\":\"bytes\"}],\"name\":\"TransactionDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"WithdrawalFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"WithdrawalProven\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BadTarget\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasEstimation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LargeCalldata\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonReentrant\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCustomGasToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfGas\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SmallGasLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"}]", -} - -// OptimismPortalABI is the input ABI used to generate the binding from. -// Deprecated: Use OptimismPortalMetaData.ABI instead. -var OptimismPortalABI = OptimismPortalMetaData.ABI - -// OptimismPortal is an auto generated Go binding around an Ethereum contract. -type OptimismPortal struct { - OptimismPortalCaller // Read-only binding to the contract - OptimismPortalTransactor // Write-only binding to the contract - OptimismPortalFilterer // Log filterer for contract events -} - -// OptimismPortalCaller is an auto generated read-only Go binding around an Ethereum contract. -type OptimismPortalCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// OptimismPortalTransactor is an auto generated write-only Go binding around an Ethereum contract. -type OptimismPortalTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// OptimismPortalFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type OptimismPortalFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// OptimismPortalSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type OptimismPortalSession struct { - Contract *OptimismPortal // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// OptimismPortalCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type OptimismPortalCallerSession struct { - Contract *OptimismPortalCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// OptimismPortalTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type OptimismPortalTransactorSession struct { - Contract *OptimismPortalTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// OptimismPortalRaw is an auto generated low-level Go binding around an Ethereum contract. -type OptimismPortalRaw struct { - Contract *OptimismPortal // Generic contract binding to access the raw methods on -} - -// OptimismPortalCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type OptimismPortalCallerRaw struct { - Contract *OptimismPortalCaller // Generic read-only contract binding to access the raw methods on -} - -// OptimismPortalTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type OptimismPortalTransactorRaw struct { - Contract *OptimismPortalTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewOptimismPortal creates a new instance of OptimismPortal, bound to a specific deployed contract. -func NewOptimismPortal(address common.Address, backend bind.ContractBackend) (*OptimismPortal, error) { - contract, err := bindOptimismPortal(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &OptimismPortal{OptimismPortalCaller: OptimismPortalCaller{contract: contract}, OptimismPortalTransactor: OptimismPortalTransactor{contract: contract}, OptimismPortalFilterer: OptimismPortalFilterer{contract: contract}}, nil -} - -// NewOptimismPortalCaller creates a new read-only instance of OptimismPortal, bound to a specific deployed contract. -func NewOptimismPortalCaller(address common.Address, caller bind.ContractCaller) (*OptimismPortalCaller, error) { - contract, err := bindOptimismPortal(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &OptimismPortalCaller{contract: contract}, nil -} - -// NewOptimismPortalTransactor creates a new write-only instance of OptimismPortal, bound to a specific deployed contract. -func NewOptimismPortalTransactor(address common.Address, transactor bind.ContractTransactor) (*OptimismPortalTransactor, error) { - contract, err := bindOptimismPortal(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &OptimismPortalTransactor{contract: contract}, nil -} - -// NewOptimismPortalFilterer creates a new log filterer instance of OptimismPortal, bound to a specific deployed contract. -func NewOptimismPortalFilterer(address common.Address, filterer bind.ContractFilterer) (*OptimismPortalFilterer, error) { - contract, err := bindOptimismPortal(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &OptimismPortalFilterer{contract: contract}, nil -} - -// bindOptimismPortal binds a generic wrapper to an already deployed contract. -func bindOptimismPortal(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(OptimismPortalABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_OptimismPortal *OptimismPortalRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _OptimismPortal.Contract.OptimismPortalCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_OptimismPortal *OptimismPortalRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _OptimismPortal.Contract.OptimismPortalTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_OptimismPortal *OptimismPortalRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _OptimismPortal.Contract.OptimismPortalTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_OptimismPortal *OptimismPortalCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _OptimismPortal.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_OptimismPortal *OptimismPortalTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _OptimismPortal.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_OptimismPortal *OptimismPortalTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _OptimismPortal.Contract.contract.Transact(opts, method, params...) -} - -// Balance is a free data retrieval call binding the contract method 0xb69ef8a8. -// -// Solidity: function balance() view returns(uint256) -func (_OptimismPortal *OptimismPortalCaller) Balance(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "balance") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// Balance is a free data retrieval call binding the contract method 0xb69ef8a8. -// -// Solidity: function balance() view returns(uint256) -func (_OptimismPortal *OptimismPortalSession) Balance() (*big.Int, error) { - return _OptimismPortal.Contract.Balance(&_OptimismPortal.CallOpts) -} - -// Balance is a free data retrieval call binding the contract method 0xb69ef8a8. -// -// Solidity: function balance() view returns(uint256) -func (_OptimismPortal *OptimismPortalCallerSession) Balance() (*big.Int, error) { - return _OptimismPortal.Contract.Balance(&_OptimismPortal.CallOpts) -} - -// FinalizedWithdrawals is a free data retrieval call binding the contract method 0xa14238e7. -// -// Solidity: function finalizedWithdrawals(bytes32 ) view returns(bool) -func (_OptimismPortal *OptimismPortalCaller) FinalizedWithdrawals(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "finalizedWithdrawals", arg0) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// FinalizedWithdrawals is a free data retrieval call binding the contract method 0xa14238e7. -// -// Solidity: function finalizedWithdrawals(bytes32 ) view returns(bool) -func (_OptimismPortal *OptimismPortalSession) FinalizedWithdrawals(arg0 [32]byte) (bool, error) { - return _OptimismPortal.Contract.FinalizedWithdrawals(&_OptimismPortal.CallOpts, arg0) -} - -// FinalizedWithdrawals is a free data retrieval call binding the contract method 0xa14238e7. -// -// Solidity: function finalizedWithdrawals(bytes32 ) view returns(bool) -func (_OptimismPortal *OptimismPortalCallerSession) FinalizedWithdrawals(arg0 [32]byte) (bool, error) { - return _OptimismPortal.Contract.FinalizedWithdrawals(&_OptimismPortal.CallOpts, arg0) -} - -// Guardian is a free data retrieval call binding the contract method 0x452a9320. -// -// Solidity: function guardian() view returns(address) -func (_OptimismPortal *OptimismPortalCaller) Guardian(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "guardian") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Guardian is a free data retrieval call binding the contract method 0x452a9320. -// -// Solidity: function guardian() view returns(address) -func (_OptimismPortal *OptimismPortalSession) Guardian() (common.Address, error) { - return _OptimismPortal.Contract.Guardian(&_OptimismPortal.CallOpts) -} - -// Guardian is a free data retrieval call binding the contract method 0x452a9320. -// -// Solidity: function guardian() view returns(address) -func (_OptimismPortal *OptimismPortalCallerSession) Guardian() (common.Address, error) { - return _OptimismPortal.Contract.Guardian(&_OptimismPortal.CallOpts) -} - -// IsOutputFinalized is a free data retrieval call binding the contract method 0x6dbffb78. -// -// Solidity: function isOutputFinalized(uint256 _l2OutputIndex) view returns(bool) -func (_OptimismPortal *OptimismPortalCaller) IsOutputFinalized(opts *bind.CallOpts, _l2OutputIndex *big.Int) (bool, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "isOutputFinalized", _l2OutputIndex) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsOutputFinalized is a free data retrieval call binding the contract method 0x6dbffb78. -// -// Solidity: function isOutputFinalized(uint256 _l2OutputIndex) view returns(bool) -func (_OptimismPortal *OptimismPortalSession) IsOutputFinalized(_l2OutputIndex *big.Int) (bool, error) { - return _OptimismPortal.Contract.IsOutputFinalized(&_OptimismPortal.CallOpts, _l2OutputIndex) -} - -// IsOutputFinalized is a free data retrieval call binding the contract method 0x6dbffb78. -// -// Solidity: function isOutputFinalized(uint256 _l2OutputIndex) view returns(bool) -func (_OptimismPortal *OptimismPortalCallerSession) IsOutputFinalized(_l2OutputIndex *big.Int) (bool, error) { - return _OptimismPortal.Contract.IsOutputFinalized(&_OptimismPortal.CallOpts, _l2OutputIndex) -} - -// L2Oracle is a free data retrieval call binding the contract method 0x9b5f694a. -// -// Solidity: function l2Oracle() view returns(address) -func (_OptimismPortal *OptimismPortalCaller) L2Oracle(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "l2Oracle") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// L2Oracle is a free data retrieval call binding the contract method 0x9b5f694a. -// -// Solidity: function l2Oracle() view returns(address) -func (_OptimismPortal *OptimismPortalSession) L2Oracle() (common.Address, error) { - return _OptimismPortal.Contract.L2Oracle(&_OptimismPortal.CallOpts) -} - -// L2Oracle is a free data retrieval call binding the contract method 0x9b5f694a. -// -// Solidity: function l2Oracle() view returns(address) -func (_OptimismPortal *OptimismPortalCallerSession) L2Oracle() (common.Address, error) { - return _OptimismPortal.Contract.L2Oracle(&_OptimismPortal.CallOpts) -} - -// L2Sender is a free data retrieval call binding the contract method 0x9bf62d82. -// -// Solidity: function l2Sender() view returns(address) -func (_OptimismPortal *OptimismPortalCaller) L2Sender(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "l2Sender") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// L2Sender is a free data retrieval call binding the contract method 0x9bf62d82. -// -// Solidity: function l2Sender() view returns(address) -func (_OptimismPortal *OptimismPortalSession) L2Sender() (common.Address, error) { - return _OptimismPortal.Contract.L2Sender(&_OptimismPortal.CallOpts) -} - -// L2Sender is a free data retrieval call binding the contract method 0x9bf62d82. -// -// Solidity: function l2Sender() view returns(address) -func (_OptimismPortal *OptimismPortalCallerSession) L2Sender() (common.Address, error) { - return _OptimismPortal.Contract.L2Sender(&_OptimismPortal.CallOpts) -} - -// MinimumGasLimit is a free data retrieval call binding the contract method 0xa35d99df. -// -// Solidity: function minimumGasLimit(uint64 _byteCount) pure returns(uint64) -func (_OptimismPortal *OptimismPortalCaller) MinimumGasLimit(opts *bind.CallOpts, _byteCount uint64) (uint64, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "minimumGasLimit", _byteCount) - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// MinimumGasLimit is a free data retrieval call binding the contract method 0xa35d99df. -// -// Solidity: function minimumGasLimit(uint64 _byteCount) pure returns(uint64) -func (_OptimismPortal *OptimismPortalSession) MinimumGasLimit(_byteCount uint64) (uint64, error) { - return _OptimismPortal.Contract.MinimumGasLimit(&_OptimismPortal.CallOpts, _byteCount) -} - -// MinimumGasLimit is a free data retrieval call binding the contract method 0xa35d99df. -// -// Solidity: function minimumGasLimit(uint64 _byteCount) pure returns(uint64) -func (_OptimismPortal *OptimismPortalCallerSession) MinimumGasLimit(_byteCount uint64) (uint64, error) { - return _OptimismPortal.Contract.MinimumGasLimit(&_OptimismPortal.CallOpts, _byteCount) -} - -// Params is a free data retrieval call binding the contract method 0xcff0ab96. -// -// Solidity: function params() view returns(uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) -func (_OptimismPortal *OptimismPortalCaller) Params(opts *bind.CallOpts) (struct { - PrevBaseFee *big.Int - PrevBoughtGas uint64 - PrevBlockNum uint64 -}, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "params") - - outstruct := new(struct { - PrevBaseFee *big.Int - PrevBoughtGas uint64 - PrevBlockNum uint64 - }) - if err != nil { - return *outstruct, err - } - - outstruct.PrevBaseFee = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - outstruct.PrevBoughtGas = *abi.ConvertType(out[1], new(uint64)).(*uint64) - outstruct.PrevBlockNum = *abi.ConvertType(out[2], new(uint64)).(*uint64) - - return *outstruct, err - -} - -// Params is a free data retrieval call binding the contract method 0xcff0ab96. -// -// Solidity: function params() view returns(uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) -func (_OptimismPortal *OptimismPortalSession) Params() (struct { - PrevBaseFee *big.Int - PrevBoughtGas uint64 - PrevBlockNum uint64 -}, error) { - return _OptimismPortal.Contract.Params(&_OptimismPortal.CallOpts) -} - -// Params is a free data retrieval call binding the contract method 0xcff0ab96. -// -// Solidity: function params() view returns(uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) -func (_OptimismPortal *OptimismPortalCallerSession) Params() (struct { - PrevBaseFee *big.Int - PrevBoughtGas uint64 - PrevBlockNum uint64 -}, error) { - return _OptimismPortal.Contract.Params(&_OptimismPortal.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool paused_) -func (_OptimismPortal *OptimismPortalCaller) Paused(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "paused") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool paused_) -func (_OptimismPortal *OptimismPortalSession) Paused() (bool, error) { - return _OptimismPortal.Contract.Paused(&_OptimismPortal.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool paused_) -func (_OptimismPortal *OptimismPortalCallerSession) Paused() (bool, error) { - return _OptimismPortal.Contract.Paused(&_OptimismPortal.CallOpts) -} - -// ProvenWithdrawals is a free data retrieval call binding the contract method 0xe965084c. -// -// Solidity: function provenWithdrawals(bytes32 ) view returns(bytes32 outputRoot, uint128 timestamp, uint128 l2OutputIndex) -func (_OptimismPortal *OptimismPortalCaller) ProvenWithdrawals(opts *bind.CallOpts, arg0 [32]byte) (struct { - OutputRoot [32]byte - Timestamp *big.Int - L2OutputIndex *big.Int -}, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "provenWithdrawals", arg0) - - outstruct := new(struct { - OutputRoot [32]byte - Timestamp *big.Int - L2OutputIndex *big.Int - }) - if err != nil { - return *outstruct, err - } - - outstruct.OutputRoot = *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - outstruct.Timestamp = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) - outstruct.L2OutputIndex = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) - - return *outstruct, err - -} - -// ProvenWithdrawals is a free data retrieval call binding the contract method 0xe965084c. -// -// Solidity: function provenWithdrawals(bytes32 ) view returns(bytes32 outputRoot, uint128 timestamp, uint128 l2OutputIndex) -func (_OptimismPortal *OptimismPortalSession) ProvenWithdrawals(arg0 [32]byte) (struct { - OutputRoot [32]byte - Timestamp *big.Int - L2OutputIndex *big.Int -}, error) { - return _OptimismPortal.Contract.ProvenWithdrawals(&_OptimismPortal.CallOpts, arg0) -} - -// ProvenWithdrawals is a free data retrieval call binding the contract method 0xe965084c. -// -// Solidity: function provenWithdrawals(bytes32 ) view returns(bytes32 outputRoot, uint128 timestamp, uint128 l2OutputIndex) -func (_OptimismPortal *OptimismPortalCallerSession) ProvenWithdrawals(arg0 [32]byte) (struct { - OutputRoot [32]byte - Timestamp *big.Int - L2OutputIndex *big.Int -}, error) { - return _OptimismPortal.Contract.ProvenWithdrawals(&_OptimismPortal.CallOpts, arg0) -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_OptimismPortal *OptimismPortalCaller) SuperchainConfig(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "superchainConfig") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_OptimismPortal *OptimismPortalSession) SuperchainConfig() (common.Address, error) { - return _OptimismPortal.Contract.SuperchainConfig(&_OptimismPortal.CallOpts) -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_OptimismPortal *OptimismPortalCallerSession) SuperchainConfig() (common.Address, error) { - return _OptimismPortal.Contract.SuperchainConfig(&_OptimismPortal.CallOpts) -} - -// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. -// -// Solidity: function systemConfig() view returns(address) -func (_OptimismPortal *OptimismPortalCaller) SystemConfig(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "systemConfig") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. -// -// Solidity: function systemConfig() view returns(address) -func (_OptimismPortal *OptimismPortalSession) SystemConfig() (common.Address, error) { - return _OptimismPortal.Contract.SystemConfig(&_OptimismPortal.CallOpts) -} - -// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. -// -// Solidity: function systemConfig() view returns(address) -func (_OptimismPortal *OptimismPortalCallerSession) SystemConfig() (common.Address, error) { - return _OptimismPortal.Contract.SystemConfig(&_OptimismPortal.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_OptimismPortal *OptimismPortalCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_OptimismPortal *OptimismPortalSession) Version() (string, error) { - return _OptimismPortal.Contract.Version(&_OptimismPortal.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_OptimismPortal *OptimismPortalCallerSession) Version() (string, error) { - return _OptimismPortal.Contract.Version(&_OptimismPortal.CallOpts) -} - -// DepositERC20Transaction is a paid mutator transaction binding the contract method 0x149f2f22. -// -// Solidity: function depositERC20Transaction(address _to, uint256 _mint, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes _data) returns() -func (_OptimismPortal *OptimismPortalTransactor) DepositERC20Transaction(opts *bind.TransactOpts, _to common.Address, _mint *big.Int, _value *big.Int, _gasLimit uint64, _isCreation bool, _data []byte) (*types.Transaction, error) { - return _OptimismPortal.contract.Transact(opts, "depositERC20Transaction", _to, _mint, _value, _gasLimit, _isCreation, _data) -} - -// DepositERC20Transaction is a paid mutator transaction binding the contract method 0x149f2f22. -// -// Solidity: function depositERC20Transaction(address _to, uint256 _mint, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes _data) returns() -func (_OptimismPortal *OptimismPortalSession) DepositERC20Transaction(_to common.Address, _mint *big.Int, _value *big.Int, _gasLimit uint64, _isCreation bool, _data []byte) (*types.Transaction, error) { - return _OptimismPortal.Contract.DepositERC20Transaction(&_OptimismPortal.TransactOpts, _to, _mint, _value, _gasLimit, _isCreation, _data) -} - -// DepositERC20Transaction is a paid mutator transaction binding the contract method 0x149f2f22. -// -// Solidity: function depositERC20Transaction(address _to, uint256 _mint, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes _data) returns() -func (_OptimismPortal *OptimismPortalTransactorSession) DepositERC20Transaction(_to common.Address, _mint *big.Int, _value *big.Int, _gasLimit uint64, _isCreation bool, _data []byte) (*types.Transaction, error) { - return _OptimismPortal.Contract.DepositERC20Transaction(&_OptimismPortal.TransactOpts, _to, _mint, _value, _gasLimit, _isCreation, _data) -} - -// DepositTransaction is a paid mutator transaction binding the contract method 0xe9e05c42. -// -// Solidity: function depositTransaction(address _to, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes _data) payable returns() -func (_OptimismPortal *OptimismPortalTransactor) DepositTransaction(opts *bind.TransactOpts, _to common.Address, _value *big.Int, _gasLimit uint64, _isCreation bool, _data []byte) (*types.Transaction, error) { - return _OptimismPortal.contract.Transact(opts, "depositTransaction", _to, _value, _gasLimit, _isCreation, _data) -} - -// DepositTransaction is a paid mutator transaction binding the contract method 0xe9e05c42. -// -// Solidity: function depositTransaction(address _to, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes _data) payable returns() -func (_OptimismPortal *OptimismPortalSession) DepositTransaction(_to common.Address, _value *big.Int, _gasLimit uint64, _isCreation bool, _data []byte) (*types.Transaction, error) { - return _OptimismPortal.Contract.DepositTransaction(&_OptimismPortal.TransactOpts, _to, _value, _gasLimit, _isCreation, _data) -} - -// DepositTransaction is a paid mutator transaction binding the contract method 0xe9e05c42. -// -// Solidity: function depositTransaction(address _to, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes _data) payable returns() -func (_OptimismPortal *OptimismPortalTransactorSession) DepositTransaction(_to common.Address, _value *big.Int, _gasLimit uint64, _isCreation bool, _data []byte) (*types.Transaction, error) { - return _OptimismPortal.Contract.DepositTransaction(&_OptimismPortal.TransactOpts, _to, _value, _gasLimit, _isCreation, _data) -} - -// DonateETH is a paid mutator transaction binding the contract method 0x8b4c40b0. -// -// Solidity: function donateETH() payable returns() -func (_OptimismPortal *OptimismPortalTransactor) DonateETH(opts *bind.TransactOpts) (*types.Transaction, error) { - return _OptimismPortal.contract.Transact(opts, "donateETH") -} - -// DonateETH is a paid mutator transaction binding the contract method 0x8b4c40b0. -// -// Solidity: function donateETH() payable returns() -func (_OptimismPortal *OptimismPortalSession) DonateETH() (*types.Transaction, error) { - return _OptimismPortal.Contract.DonateETH(&_OptimismPortal.TransactOpts) -} - -// DonateETH is a paid mutator transaction binding the contract method 0x8b4c40b0. -// -// Solidity: function donateETH() payable returns() -func (_OptimismPortal *OptimismPortalTransactorSession) DonateETH() (*types.Transaction, error) { - return _OptimismPortal.Contract.DonateETH(&_OptimismPortal.TransactOpts) -} - -// FinalizeWithdrawalTransaction is a paid mutator transaction binding the contract method 0x8c3152e9. -// -// Solidity: function finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx) returns() -func (_OptimismPortal *OptimismPortalTransactor) FinalizeWithdrawalTransaction(opts *bind.TransactOpts, _tx TypesWithdrawalTransaction) (*types.Transaction, error) { - return _OptimismPortal.contract.Transact(opts, "finalizeWithdrawalTransaction", _tx) -} - -// FinalizeWithdrawalTransaction is a paid mutator transaction binding the contract method 0x8c3152e9. -// -// Solidity: function finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx) returns() -func (_OptimismPortal *OptimismPortalSession) FinalizeWithdrawalTransaction(_tx TypesWithdrawalTransaction) (*types.Transaction, error) { - return _OptimismPortal.Contract.FinalizeWithdrawalTransaction(&_OptimismPortal.TransactOpts, _tx) -} - -// FinalizeWithdrawalTransaction is a paid mutator transaction binding the contract method 0x8c3152e9. -// -// Solidity: function finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx) returns() -func (_OptimismPortal *OptimismPortalTransactorSession) FinalizeWithdrawalTransaction(_tx TypesWithdrawalTransaction) (*types.Transaction, error) { - return _OptimismPortal.Contract.FinalizeWithdrawalTransaction(&_OptimismPortal.TransactOpts, _tx) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. -// -// Solidity: function initialize(address _l2Oracle, address _systemConfig, address _superchainConfig) returns() -func (_OptimismPortal *OptimismPortalTransactor) Initialize(opts *bind.TransactOpts, _l2Oracle common.Address, _systemConfig common.Address, _superchainConfig common.Address) (*types.Transaction, error) { - return _OptimismPortal.contract.Transact(opts, "initialize", _l2Oracle, _systemConfig, _superchainConfig) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. -// -// Solidity: function initialize(address _l2Oracle, address _systemConfig, address _superchainConfig) returns() -func (_OptimismPortal *OptimismPortalSession) Initialize(_l2Oracle common.Address, _systemConfig common.Address, _superchainConfig common.Address) (*types.Transaction, error) { - return _OptimismPortal.Contract.Initialize(&_OptimismPortal.TransactOpts, _l2Oracle, _systemConfig, _superchainConfig) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. -// -// Solidity: function initialize(address _l2Oracle, address _systemConfig, address _superchainConfig) returns() -func (_OptimismPortal *OptimismPortalTransactorSession) Initialize(_l2Oracle common.Address, _systemConfig common.Address, _superchainConfig common.Address) (*types.Transaction, error) { - return _OptimismPortal.Contract.Initialize(&_OptimismPortal.TransactOpts, _l2Oracle, _systemConfig, _superchainConfig) -} - -// ProveWithdrawalTransaction is a paid mutator transaction binding the contract method 0x4870496f. -// -// Solidity: function proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx, uint256 _l2OutputIndex, (bytes32,bytes32,bytes32,bytes32) _outputRootProof, bytes[] _withdrawalProof) returns() -func (_OptimismPortal *OptimismPortalTransactor) ProveWithdrawalTransaction(opts *bind.TransactOpts, _tx TypesWithdrawalTransaction, _l2OutputIndex *big.Int, _outputRootProof TypesOutputRootProof, _withdrawalProof [][]byte) (*types.Transaction, error) { - return _OptimismPortal.contract.Transact(opts, "proveWithdrawalTransaction", _tx, _l2OutputIndex, _outputRootProof, _withdrawalProof) -} - -// ProveWithdrawalTransaction is a paid mutator transaction binding the contract method 0x4870496f. -// -// Solidity: function proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx, uint256 _l2OutputIndex, (bytes32,bytes32,bytes32,bytes32) _outputRootProof, bytes[] _withdrawalProof) returns() -func (_OptimismPortal *OptimismPortalSession) ProveWithdrawalTransaction(_tx TypesWithdrawalTransaction, _l2OutputIndex *big.Int, _outputRootProof TypesOutputRootProof, _withdrawalProof [][]byte) (*types.Transaction, error) { - return _OptimismPortal.Contract.ProveWithdrawalTransaction(&_OptimismPortal.TransactOpts, _tx, _l2OutputIndex, _outputRootProof, _withdrawalProof) -} - -// ProveWithdrawalTransaction is a paid mutator transaction binding the contract method 0x4870496f. -// -// Solidity: function proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx, uint256 _l2OutputIndex, (bytes32,bytes32,bytes32,bytes32) _outputRootProof, bytes[] _withdrawalProof) returns() -func (_OptimismPortal *OptimismPortalTransactorSession) ProveWithdrawalTransaction(_tx TypesWithdrawalTransaction, _l2OutputIndex *big.Int, _outputRootProof TypesOutputRootProof, _withdrawalProof [][]byte) (*types.Transaction, error) { - return _OptimismPortal.Contract.ProveWithdrawalTransaction(&_OptimismPortal.TransactOpts, _tx, _l2OutputIndex, _outputRootProof, _withdrawalProof) -} - -// SetGasPayingToken is a paid mutator transaction binding the contract method 0x71cfaa3f. -// -// Solidity: function setGasPayingToken(address _token, uint8 _decimals, bytes32 _name, bytes32 _symbol) returns() -func (_OptimismPortal *OptimismPortalTransactor) SetGasPayingToken(opts *bind.TransactOpts, _token common.Address, _decimals uint8, _name [32]byte, _symbol [32]byte) (*types.Transaction, error) { - return _OptimismPortal.contract.Transact(opts, "setGasPayingToken", _token, _decimals, _name, _symbol) -} - -// SetGasPayingToken is a paid mutator transaction binding the contract method 0x71cfaa3f. -// -// Solidity: function setGasPayingToken(address _token, uint8 _decimals, bytes32 _name, bytes32 _symbol) returns() -func (_OptimismPortal *OptimismPortalSession) SetGasPayingToken(_token common.Address, _decimals uint8, _name [32]byte, _symbol [32]byte) (*types.Transaction, error) { - return _OptimismPortal.Contract.SetGasPayingToken(&_OptimismPortal.TransactOpts, _token, _decimals, _name, _symbol) -} - -// SetGasPayingToken is a paid mutator transaction binding the contract method 0x71cfaa3f. -// -// Solidity: function setGasPayingToken(address _token, uint8 _decimals, bytes32 _name, bytes32 _symbol) returns() -func (_OptimismPortal *OptimismPortalTransactorSession) SetGasPayingToken(_token common.Address, _decimals uint8, _name [32]byte, _symbol [32]byte) (*types.Transaction, error) { - return _OptimismPortal.Contract.SetGasPayingToken(&_OptimismPortal.TransactOpts, _token, _decimals, _name, _symbol) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_OptimismPortal *OptimismPortalTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { - return _OptimismPortal.contract.RawTransact(opts, nil) // calldata is disallowed for receive function -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_OptimismPortal *OptimismPortalSession) Receive() (*types.Transaction, error) { - return _OptimismPortal.Contract.Receive(&_OptimismPortal.TransactOpts) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_OptimismPortal *OptimismPortalTransactorSession) Receive() (*types.Transaction, error) { - return _OptimismPortal.Contract.Receive(&_OptimismPortal.TransactOpts) -} - -// OptimismPortalInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the OptimismPortal contract. -type OptimismPortalInitializedIterator struct { - Event *OptimismPortalInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *OptimismPortalInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(OptimismPortalInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(OptimismPortalInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *OptimismPortalInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *OptimismPortalInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// OptimismPortalInitialized represents a Initialized event raised by the OptimismPortal contract. -type OptimismPortalInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_OptimismPortal *OptimismPortalFilterer) FilterInitialized(opts *bind.FilterOpts) (*OptimismPortalInitializedIterator, error) { - - logs, sub, err := _OptimismPortal.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &OptimismPortalInitializedIterator{contract: _OptimismPortal.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_OptimismPortal *OptimismPortalFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *OptimismPortalInitialized) (event.Subscription, error) { - - logs, sub, err := _OptimismPortal.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(OptimismPortalInitialized) - if err := _OptimismPortal.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_OptimismPortal *OptimismPortalFilterer) ParseInitialized(log types.Log) (*OptimismPortalInitialized, error) { - event := new(OptimismPortalInitialized) - if err := _OptimismPortal.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// OptimismPortalTransactionDepositedIterator is returned from FilterTransactionDeposited and is used to iterate over the raw logs and unpacked data for TransactionDeposited events raised by the OptimismPortal contract. -type OptimismPortalTransactionDepositedIterator struct { - Event *OptimismPortalTransactionDeposited // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *OptimismPortalTransactionDepositedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(OptimismPortalTransactionDeposited) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(OptimismPortalTransactionDeposited) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *OptimismPortalTransactionDepositedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *OptimismPortalTransactionDepositedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// OptimismPortalTransactionDeposited represents a TransactionDeposited event raised by the OptimismPortal contract. -type OptimismPortalTransactionDeposited struct { - From common.Address - To common.Address - Version *big.Int - OpaqueData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterTransactionDeposited is a free log retrieval operation binding the contract event 0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32. -// -// Solidity: event TransactionDeposited(address indexed from, address indexed to, uint256 indexed version, bytes opaqueData) -func (_OptimismPortal *OptimismPortalFilterer) FilterTransactionDeposited(opts *bind.FilterOpts, from []common.Address, to []common.Address, version []*big.Int) (*OptimismPortalTransactionDepositedIterator, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - var versionRule []interface{} - for _, versionItem := range version { - versionRule = append(versionRule, versionItem) - } - - logs, sub, err := _OptimismPortal.contract.FilterLogs(opts, "TransactionDeposited", fromRule, toRule, versionRule) - if err != nil { - return nil, err - } - return &OptimismPortalTransactionDepositedIterator{contract: _OptimismPortal.contract, event: "TransactionDeposited", logs: logs, sub: sub}, nil -} - -// WatchTransactionDeposited is a free log subscription operation binding the contract event 0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32. -// -// Solidity: event TransactionDeposited(address indexed from, address indexed to, uint256 indexed version, bytes opaqueData) -func (_OptimismPortal *OptimismPortalFilterer) WatchTransactionDeposited(opts *bind.WatchOpts, sink chan<- *OptimismPortalTransactionDeposited, from []common.Address, to []common.Address, version []*big.Int) (event.Subscription, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - var versionRule []interface{} - for _, versionItem := range version { - versionRule = append(versionRule, versionItem) - } - - logs, sub, err := _OptimismPortal.contract.WatchLogs(opts, "TransactionDeposited", fromRule, toRule, versionRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(OptimismPortalTransactionDeposited) - if err := _OptimismPortal.contract.UnpackLog(event, "TransactionDeposited", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseTransactionDeposited is a log parse operation binding the contract event 0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32. -// -// Solidity: event TransactionDeposited(address indexed from, address indexed to, uint256 indexed version, bytes opaqueData) -func (_OptimismPortal *OptimismPortalFilterer) ParseTransactionDeposited(log types.Log) (*OptimismPortalTransactionDeposited, error) { - event := new(OptimismPortalTransactionDeposited) - if err := _OptimismPortal.contract.UnpackLog(event, "TransactionDeposited", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// OptimismPortalWithdrawalFinalizedIterator is returned from FilterWithdrawalFinalized and is used to iterate over the raw logs and unpacked data for WithdrawalFinalized events raised by the OptimismPortal contract. -type OptimismPortalWithdrawalFinalizedIterator struct { - Event *OptimismPortalWithdrawalFinalized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *OptimismPortalWithdrawalFinalizedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(OptimismPortalWithdrawalFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(OptimismPortalWithdrawalFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *OptimismPortalWithdrawalFinalizedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *OptimismPortalWithdrawalFinalizedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// OptimismPortalWithdrawalFinalized represents a WithdrawalFinalized event raised by the OptimismPortal contract. -type OptimismPortalWithdrawalFinalized struct { - WithdrawalHash [32]byte - Success bool - Raw types.Log // Blockchain specific contextual infos -} - -// FilterWithdrawalFinalized is a free log retrieval operation binding the contract event 0xdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b. -// -// Solidity: event WithdrawalFinalized(bytes32 indexed withdrawalHash, bool success) -func (_OptimismPortal *OptimismPortalFilterer) FilterWithdrawalFinalized(opts *bind.FilterOpts, withdrawalHash [][32]byte) (*OptimismPortalWithdrawalFinalizedIterator, error) { - - var withdrawalHashRule []interface{} - for _, withdrawalHashItem := range withdrawalHash { - withdrawalHashRule = append(withdrawalHashRule, withdrawalHashItem) - } - - logs, sub, err := _OptimismPortal.contract.FilterLogs(opts, "WithdrawalFinalized", withdrawalHashRule) - if err != nil { - return nil, err - } - return &OptimismPortalWithdrawalFinalizedIterator{contract: _OptimismPortal.contract, event: "WithdrawalFinalized", logs: logs, sub: sub}, nil -} - -// WatchWithdrawalFinalized is a free log subscription operation binding the contract event 0xdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b. -// -// Solidity: event WithdrawalFinalized(bytes32 indexed withdrawalHash, bool success) -func (_OptimismPortal *OptimismPortalFilterer) WatchWithdrawalFinalized(opts *bind.WatchOpts, sink chan<- *OptimismPortalWithdrawalFinalized, withdrawalHash [][32]byte) (event.Subscription, error) { - - var withdrawalHashRule []interface{} - for _, withdrawalHashItem := range withdrawalHash { - withdrawalHashRule = append(withdrawalHashRule, withdrawalHashItem) - } - - logs, sub, err := _OptimismPortal.contract.WatchLogs(opts, "WithdrawalFinalized", withdrawalHashRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(OptimismPortalWithdrawalFinalized) - if err := _OptimismPortal.contract.UnpackLog(event, "WithdrawalFinalized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseWithdrawalFinalized is a log parse operation binding the contract event 0xdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b. -// -// Solidity: event WithdrawalFinalized(bytes32 indexed withdrawalHash, bool success) -func (_OptimismPortal *OptimismPortalFilterer) ParseWithdrawalFinalized(log types.Log) (*OptimismPortalWithdrawalFinalized, error) { - event := new(OptimismPortalWithdrawalFinalized) - if err := _OptimismPortal.contract.UnpackLog(event, "WithdrawalFinalized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// OptimismPortalWithdrawalProvenIterator is returned from FilterWithdrawalProven and is used to iterate over the raw logs and unpacked data for WithdrawalProven events raised by the OptimismPortal contract. -type OptimismPortalWithdrawalProvenIterator struct { - Event *OptimismPortalWithdrawalProven // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *OptimismPortalWithdrawalProvenIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(OptimismPortalWithdrawalProven) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(OptimismPortalWithdrawalProven) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *OptimismPortalWithdrawalProvenIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *OptimismPortalWithdrawalProvenIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// OptimismPortalWithdrawalProven represents a WithdrawalProven event raised by the OptimismPortal contract. -type OptimismPortalWithdrawalProven struct { - WithdrawalHash [32]byte - From common.Address - To common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterWithdrawalProven is a free log retrieval operation binding the contract event 0x67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f62. -// -// Solidity: event WithdrawalProven(bytes32 indexed withdrawalHash, address indexed from, address indexed to) -func (_OptimismPortal *OptimismPortalFilterer) FilterWithdrawalProven(opts *bind.FilterOpts, withdrawalHash [][32]byte, from []common.Address, to []common.Address) (*OptimismPortalWithdrawalProvenIterator, error) { - - var withdrawalHashRule []interface{} - for _, withdrawalHashItem := range withdrawalHash { - withdrawalHashRule = append(withdrawalHashRule, withdrawalHashItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _OptimismPortal.contract.FilterLogs(opts, "WithdrawalProven", withdrawalHashRule, fromRule, toRule) - if err != nil { - return nil, err - } - return &OptimismPortalWithdrawalProvenIterator{contract: _OptimismPortal.contract, event: "WithdrawalProven", logs: logs, sub: sub}, nil -} - -// WatchWithdrawalProven is a free log subscription operation binding the contract event 0x67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f62. -// -// Solidity: event WithdrawalProven(bytes32 indexed withdrawalHash, address indexed from, address indexed to) -func (_OptimismPortal *OptimismPortalFilterer) WatchWithdrawalProven(opts *bind.WatchOpts, sink chan<- *OptimismPortalWithdrawalProven, withdrawalHash [][32]byte, from []common.Address, to []common.Address) (event.Subscription, error) { - - var withdrawalHashRule []interface{} - for _, withdrawalHashItem := range withdrawalHash { - withdrawalHashRule = append(withdrawalHashRule, withdrawalHashItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _OptimismPortal.contract.WatchLogs(opts, "WithdrawalProven", withdrawalHashRule, fromRule, toRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(OptimismPortalWithdrawalProven) - if err := _OptimismPortal.contract.UnpackLog(event, "WithdrawalProven", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseWithdrawalProven is a log parse operation binding the contract event 0x67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f62. -// -// Solidity: event WithdrawalProven(bytes32 indexed withdrawalHash, address indexed from, address indexed to) -func (_OptimismPortal *OptimismPortalFilterer) ParseWithdrawalProven(log types.Log) (*OptimismPortalWithdrawalProven, error) { - event := new(OptimismPortalWithdrawalProven) - if err := _OptimismPortal.contract.UnpackLog(event, "WithdrawalProven", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/op-chain-ops/upgrades/bindings/proxyadmin.go b/op-chain-ops/upgrades/bindings/proxyadmin.go deleted file mode 100644 index 942c71c3000c..000000000000 --- a/op-chain-ops/upgrades/bindings/proxyadmin.go +++ /dev/null @@ -1,760 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindings - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// ProxyAdminMetaData contains all meta data concerning the ProxyAdmin contract. -var ProxyAdminMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"contractAddressManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"implementationName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUpgrading\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"proxyType\",\"outputs\":[{\"internalType\":\"enumProxyAdmin.ProxyType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractAddressManager\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAddressManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"setImplementationName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"internalType\":\"enumProxyAdmin.ProxyType\",\"name\":\"_type\",\"type\":\"uint8\"}],\"name\":\"setProxyType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_upgrading\",\"type\":\"bool\"}],\"name\":\"setUpgrading\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"}]", -} - -// ProxyAdminABI is the input ABI used to generate the binding from. -// Deprecated: Use ProxyAdminMetaData.ABI instead. -var ProxyAdminABI = ProxyAdminMetaData.ABI - -// ProxyAdmin is an auto generated Go binding around an Ethereum contract. -type ProxyAdmin struct { - ProxyAdminCaller // Read-only binding to the contract - ProxyAdminTransactor // Write-only binding to the contract - ProxyAdminFilterer // Log filterer for contract events -} - -// ProxyAdminCaller is an auto generated read-only Go binding around an Ethereum contract. -type ProxyAdminCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ProxyAdminTransactor is an auto generated write-only Go binding around an Ethereum contract. -type ProxyAdminTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ProxyAdminFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ProxyAdminFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ProxyAdminSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type ProxyAdminSession struct { - Contract *ProxyAdmin // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ProxyAdminCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type ProxyAdminCallerSession struct { - Contract *ProxyAdminCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// ProxyAdminTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type ProxyAdminTransactorSession struct { - Contract *ProxyAdminTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ProxyAdminRaw is an auto generated low-level Go binding around an Ethereum contract. -type ProxyAdminRaw struct { - Contract *ProxyAdmin // Generic contract binding to access the raw methods on -} - -// ProxyAdminCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ProxyAdminCallerRaw struct { - Contract *ProxyAdminCaller // Generic read-only contract binding to access the raw methods on -} - -// ProxyAdminTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ProxyAdminTransactorRaw struct { - Contract *ProxyAdminTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewProxyAdmin creates a new instance of ProxyAdmin, bound to a specific deployed contract. -func NewProxyAdmin(address common.Address, backend bind.ContractBackend) (*ProxyAdmin, error) { - contract, err := bindProxyAdmin(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &ProxyAdmin{ProxyAdminCaller: ProxyAdminCaller{contract: contract}, ProxyAdminTransactor: ProxyAdminTransactor{contract: contract}, ProxyAdminFilterer: ProxyAdminFilterer{contract: contract}}, nil -} - -// NewProxyAdminCaller creates a new read-only instance of ProxyAdmin, bound to a specific deployed contract. -func NewProxyAdminCaller(address common.Address, caller bind.ContractCaller) (*ProxyAdminCaller, error) { - contract, err := bindProxyAdmin(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &ProxyAdminCaller{contract: contract}, nil -} - -// NewProxyAdminTransactor creates a new write-only instance of ProxyAdmin, bound to a specific deployed contract. -func NewProxyAdminTransactor(address common.Address, transactor bind.ContractTransactor) (*ProxyAdminTransactor, error) { - contract, err := bindProxyAdmin(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &ProxyAdminTransactor{contract: contract}, nil -} - -// NewProxyAdminFilterer creates a new log filterer instance of ProxyAdmin, bound to a specific deployed contract. -func NewProxyAdminFilterer(address common.Address, filterer bind.ContractFilterer) (*ProxyAdminFilterer, error) { - contract, err := bindProxyAdmin(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &ProxyAdminFilterer{contract: contract}, nil -} - -// bindProxyAdmin binds a generic wrapper to an already deployed contract. -func bindProxyAdmin(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(ProxyAdminABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_ProxyAdmin *ProxyAdminRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ProxyAdmin.Contract.ProxyAdminCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_ProxyAdmin *ProxyAdminRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ProxyAdmin.Contract.ProxyAdminTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ProxyAdmin *ProxyAdminRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ProxyAdmin.Contract.ProxyAdminTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_ProxyAdmin *ProxyAdminCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ProxyAdmin.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_ProxyAdmin *ProxyAdminTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ProxyAdmin.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ProxyAdmin *ProxyAdminTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ProxyAdmin.Contract.contract.Transact(opts, method, params...) -} - -// AddressManager is a free data retrieval call binding the contract method 0x3ab76e9f. -// -// Solidity: function addressManager() view returns(address) -func (_ProxyAdmin *ProxyAdminCaller) AddressManager(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ProxyAdmin.contract.Call(opts, &out, "addressManager") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// AddressManager is a free data retrieval call binding the contract method 0x3ab76e9f. -// -// Solidity: function addressManager() view returns(address) -func (_ProxyAdmin *ProxyAdminSession) AddressManager() (common.Address, error) { - return _ProxyAdmin.Contract.AddressManager(&_ProxyAdmin.CallOpts) -} - -// AddressManager is a free data retrieval call binding the contract method 0x3ab76e9f. -// -// Solidity: function addressManager() view returns(address) -func (_ProxyAdmin *ProxyAdminCallerSession) AddressManager() (common.Address, error) { - return _ProxyAdmin.Contract.AddressManager(&_ProxyAdmin.CallOpts) -} - -// GetProxyAdmin is a free data retrieval call binding the contract method 0xf3b7dead. -// -// Solidity: function getProxyAdmin(address _proxy) view returns(address) -func (_ProxyAdmin *ProxyAdminCaller) GetProxyAdmin(opts *bind.CallOpts, _proxy common.Address) (common.Address, error) { - var out []interface{} - err := _ProxyAdmin.contract.Call(opts, &out, "getProxyAdmin", _proxy) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetProxyAdmin is a free data retrieval call binding the contract method 0xf3b7dead. -// -// Solidity: function getProxyAdmin(address _proxy) view returns(address) -func (_ProxyAdmin *ProxyAdminSession) GetProxyAdmin(_proxy common.Address) (common.Address, error) { - return _ProxyAdmin.Contract.GetProxyAdmin(&_ProxyAdmin.CallOpts, _proxy) -} - -// GetProxyAdmin is a free data retrieval call binding the contract method 0xf3b7dead. -// -// Solidity: function getProxyAdmin(address _proxy) view returns(address) -func (_ProxyAdmin *ProxyAdminCallerSession) GetProxyAdmin(_proxy common.Address) (common.Address, error) { - return _ProxyAdmin.Contract.GetProxyAdmin(&_ProxyAdmin.CallOpts, _proxy) -} - -// GetProxyImplementation is a free data retrieval call binding the contract method 0x204e1c7a. -// -// Solidity: function getProxyImplementation(address _proxy) view returns(address) -func (_ProxyAdmin *ProxyAdminCaller) GetProxyImplementation(opts *bind.CallOpts, _proxy common.Address) (common.Address, error) { - var out []interface{} - err := _ProxyAdmin.contract.Call(opts, &out, "getProxyImplementation", _proxy) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetProxyImplementation is a free data retrieval call binding the contract method 0x204e1c7a. -// -// Solidity: function getProxyImplementation(address _proxy) view returns(address) -func (_ProxyAdmin *ProxyAdminSession) GetProxyImplementation(_proxy common.Address) (common.Address, error) { - return _ProxyAdmin.Contract.GetProxyImplementation(&_ProxyAdmin.CallOpts, _proxy) -} - -// GetProxyImplementation is a free data retrieval call binding the contract method 0x204e1c7a. -// -// Solidity: function getProxyImplementation(address _proxy) view returns(address) -func (_ProxyAdmin *ProxyAdminCallerSession) GetProxyImplementation(_proxy common.Address) (common.Address, error) { - return _ProxyAdmin.Contract.GetProxyImplementation(&_ProxyAdmin.CallOpts, _proxy) -} - -// ImplementationName is a free data retrieval call binding the contract method 0x238181ae. -// -// Solidity: function implementationName(address ) view returns(string) -func (_ProxyAdmin *ProxyAdminCaller) ImplementationName(opts *bind.CallOpts, arg0 common.Address) (string, error) { - var out []interface{} - err := _ProxyAdmin.contract.Call(opts, &out, "implementationName", arg0) - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// ImplementationName is a free data retrieval call binding the contract method 0x238181ae. -// -// Solidity: function implementationName(address ) view returns(string) -func (_ProxyAdmin *ProxyAdminSession) ImplementationName(arg0 common.Address) (string, error) { - return _ProxyAdmin.Contract.ImplementationName(&_ProxyAdmin.CallOpts, arg0) -} - -// ImplementationName is a free data retrieval call binding the contract method 0x238181ae. -// -// Solidity: function implementationName(address ) view returns(string) -func (_ProxyAdmin *ProxyAdminCallerSession) ImplementationName(arg0 common.Address) (string, error) { - return _ProxyAdmin.Contract.ImplementationName(&_ProxyAdmin.CallOpts, arg0) -} - -// IsUpgrading is a free data retrieval call binding the contract method 0xb7947262. -// -// Solidity: function isUpgrading() view returns(bool) -func (_ProxyAdmin *ProxyAdminCaller) IsUpgrading(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _ProxyAdmin.contract.Call(opts, &out, "isUpgrading") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsUpgrading is a free data retrieval call binding the contract method 0xb7947262. -// -// Solidity: function isUpgrading() view returns(bool) -func (_ProxyAdmin *ProxyAdminSession) IsUpgrading() (bool, error) { - return _ProxyAdmin.Contract.IsUpgrading(&_ProxyAdmin.CallOpts) -} - -// IsUpgrading is a free data retrieval call binding the contract method 0xb7947262. -// -// Solidity: function isUpgrading() view returns(bool) -func (_ProxyAdmin *ProxyAdminCallerSession) IsUpgrading() (bool, error) { - return _ProxyAdmin.Contract.IsUpgrading(&_ProxyAdmin.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_ProxyAdmin *ProxyAdminCaller) Owner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ProxyAdmin.contract.Call(opts, &out, "owner") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_ProxyAdmin *ProxyAdminSession) Owner() (common.Address, error) { - return _ProxyAdmin.Contract.Owner(&_ProxyAdmin.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_ProxyAdmin *ProxyAdminCallerSession) Owner() (common.Address, error) { - return _ProxyAdmin.Contract.Owner(&_ProxyAdmin.CallOpts) -} - -// ProxyType is a free data retrieval call binding the contract method 0x6bd9f516. -// -// Solidity: function proxyType(address ) view returns(uint8) -func (_ProxyAdmin *ProxyAdminCaller) ProxyType(opts *bind.CallOpts, arg0 common.Address) (uint8, error) { - var out []interface{} - err := _ProxyAdmin.contract.Call(opts, &out, "proxyType", arg0) - - if err != nil { - return *new(uint8), err - } - - out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) - - return out0, err - -} - -// ProxyType is a free data retrieval call binding the contract method 0x6bd9f516. -// -// Solidity: function proxyType(address ) view returns(uint8) -func (_ProxyAdmin *ProxyAdminSession) ProxyType(arg0 common.Address) (uint8, error) { - return _ProxyAdmin.Contract.ProxyType(&_ProxyAdmin.CallOpts, arg0) -} - -// ProxyType is a free data retrieval call binding the contract method 0x6bd9f516. -// -// Solidity: function proxyType(address ) view returns(uint8) -func (_ProxyAdmin *ProxyAdminCallerSession) ProxyType(arg0 common.Address) (uint8, error) { - return _ProxyAdmin.Contract.ProxyType(&_ProxyAdmin.CallOpts, arg0) -} - -// ChangeProxyAdmin is a paid mutator transaction binding the contract method 0x7eff275e. -// -// Solidity: function changeProxyAdmin(address _proxy, address _newAdmin) returns() -func (_ProxyAdmin *ProxyAdminTransactor) ChangeProxyAdmin(opts *bind.TransactOpts, _proxy common.Address, _newAdmin common.Address) (*types.Transaction, error) { - return _ProxyAdmin.contract.Transact(opts, "changeProxyAdmin", _proxy, _newAdmin) -} - -// ChangeProxyAdmin is a paid mutator transaction binding the contract method 0x7eff275e. -// -// Solidity: function changeProxyAdmin(address _proxy, address _newAdmin) returns() -func (_ProxyAdmin *ProxyAdminSession) ChangeProxyAdmin(_proxy common.Address, _newAdmin common.Address) (*types.Transaction, error) { - return _ProxyAdmin.Contract.ChangeProxyAdmin(&_ProxyAdmin.TransactOpts, _proxy, _newAdmin) -} - -// ChangeProxyAdmin is a paid mutator transaction binding the contract method 0x7eff275e. -// -// Solidity: function changeProxyAdmin(address _proxy, address _newAdmin) returns() -func (_ProxyAdmin *ProxyAdminTransactorSession) ChangeProxyAdmin(_proxy common.Address, _newAdmin common.Address) (*types.Transaction, error) { - return _ProxyAdmin.Contract.ChangeProxyAdmin(&_ProxyAdmin.TransactOpts, _proxy, _newAdmin) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_ProxyAdmin *ProxyAdminTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ProxyAdmin.contract.Transact(opts, "renounceOwnership") -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_ProxyAdmin *ProxyAdminSession) RenounceOwnership() (*types.Transaction, error) { - return _ProxyAdmin.Contract.RenounceOwnership(&_ProxyAdmin.TransactOpts) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_ProxyAdmin *ProxyAdminTransactorSession) RenounceOwnership() (*types.Transaction, error) { - return _ProxyAdmin.Contract.RenounceOwnership(&_ProxyAdmin.TransactOpts) -} - -// SetAddress is a paid mutator transaction binding the contract method 0x9b2ea4bd. -// -// Solidity: function setAddress(string _name, address _address) returns() -func (_ProxyAdmin *ProxyAdminTransactor) SetAddress(opts *bind.TransactOpts, _name string, _address common.Address) (*types.Transaction, error) { - return _ProxyAdmin.contract.Transact(opts, "setAddress", _name, _address) -} - -// SetAddress is a paid mutator transaction binding the contract method 0x9b2ea4bd. -// -// Solidity: function setAddress(string _name, address _address) returns() -func (_ProxyAdmin *ProxyAdminSession) SetAddress(_name string, _address common.Address) (*types.Transaction, error) { - return _ProxyAdmin.Contract.SetAddress(&_ProxyAdmin.TransactOpts, _name, _address) -} - -// SetAddress is a paid mutator transaction binding the contract method 0x9b2ea4bd. -// -// Solidity: function setAddress(string _name, address _address) returns() -func (_ProxyAdmin *ProxyAdminTransactorSession) SetAddress(_name string, _address common.Address) (*types.Transaction, error) { - return _ProxyAdmin.Contract.SetAddress(&_ProxyAdmin.TransactOpts, _name, _address) -} - -// SetAddressManager is a paid mutator transaction binding the contract method 0x0652b57a. -// -// Solidity: function setAddressManager(address _address) returns() -func (_ProxyAdmin *ProxyAdminTransactor) SetAddressManager(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) { - return _ProxyAdmin.contract.Transact(opts, "setAddressManager", _address) -} - -// SetAddressManager is a paid mutator transaction binding the contract method 0x0652b57a. -// -// Solidity: function setAddressManager(address _address) returns() -func (_ProxyAdmin *ProxyAdminSession) SetAddressManager(_address common.Address) (*types.Transaction, error) { - return _ProxyAdmin.Contract.SetAddressManager(&_ProxyAdmin.TransactOpts, _address) -} - -// SetAddressManager is a paid mutator transaction binding the contract method 0x0652b57a. -// -// Solidity: function setAddressManager(address _address) returns() -func (_ProxyAdmin *ProxyAdminTransactorSession) SetAddressManager(_address common.Address) (*types.Transaction, error) { - return _ProxyAdmin.Contract.SetAddressManager(&_ProxyAdmin.TransactOpts, _address) -} - -// SetImplementationName is a paid mutator transaction binding the contract method 0x860f7cda. -// -// Solidity: function setImplementationName(address _address, string _name) returns() -func (_ProxyAdmin *ProxyAdminTransactor) SetImplementationName(opts *bind.TransactOpts, _address common.Address, _name string) (*types.Transaction, error) { - return _ProxyAdmin.contract.Transact(opts, "setImplementationName", _address, _name) -} - -// SetImplementationName is a paid mutator transaction binding the contract method 0x860f7cda. -// -// Solidity: function setImplementationName(address _address, string _name) returns() -func (_ProxyAdmin *ProxyAdminSession) SetImplementationName(_address common.Address, _name string) (*types.Transaction, error) { - return _ProxyAdmin.Contract.SetImplementationName(&_ProxyAdmin.TransactOpts, _address, _name) -} - -// SetImplementationName is a paid mutator transaction binding the contract method 0x860f7cda. -// -// Solidity: function setImplementationName(address _address, string _name) returns() -func (_ProxyAdmin *ProxyAdminTransactorSession) SetImplementationName(_address common.Address, _name string) (*types.Transaction, error) { - return _ProxyAdmin.Contract.SetImplementationName(&_ProxyAdmin.TransactOpts, _address, _name) -} - -// SetProxyType is a paid mutator transaction binding the contract method 0x8d52d4a0. -// -// Solidity: function setProxyType(address _address, uint8 _type) returns() -func (_ProxyAdmin *ProxyAdminTransactor) SetProxyType(opts *bind.TransactOpts, _address common.Address, _type uint8) (*types.Transaction, error) { - return _ProxyAdmin.contract.Transact(opts, "setProxyType", _address, _type) -} - -// SetProxyType is a paid mutator transaction binding the contract method 0x8d52d4a0. -// -// Solidity: function setProxyType(address _address, uint8 _type) returns() -func (_ProxyAdmin *ProxyAdminSession) SetProxyType(_address common.Address, _type uint8) (*types.Transaction, error) { - return _ProxyAdmin.Contract.SetProxyType(&_ProxyAdmin.TransactOpts, _address, _type) -} - -// SetProxyType is a paid mutator transaction binding the contract method 0x8d52d4a0. -// -// Solidity: function setProxyType(address _address, uint8 _type) returns() -func (_ProxyAdmin *ProxyAdminTransactorSession) SetProxyType(_address common.Address, _type uint8) (*types.Transaction, error) { - return _ProxyAdmin.Contract.SetProxyType(&_ProxyAdmin.TransactOpts, _address, _type) -} - -// SetUpgrading is a paid mutator transaction binding the contract method 0x07c8f7b0. -// -// Solidity: function setUpgrading(bool _upgrading) returns() -func (_ProxyAdmin *ProxyAdminTransactor) SetUpgrading(opts *bind.TransactOpts, _upgrading bool) (*types.Transaction, error) { - return _ProxyAdmin.contract.Transact(opts, "setUpgrading", _upgrading) -} - -// SetUpgrading is a paid mutator transaction binding the contract method 0x07c8f7b0. -// -// Solidity: function setUpgrading(bool _upgrading) returns() -func (_ProxyAdmin *ProxyAdminSession) SetUpgrading(_upgrading bool) (*types.Transaction, error) { - return _ProxyAdmin.Contract.SetUpgrading(&_ProxyAdmin.TransactOpts, _upgrading) -} - -// SetUpgrading is a paid mutator transaction binding the contract method 0x07c8f7b0. -// -// Solidity: function setUpgrading(bool _upgrading) returns() -func (_ProxyAdmin *ProxyAdminTransactorSession) SetUpgrading(_upgrading bool) (*types.Transaction, error) { - return _ProxyAdmin.Contract.SetUpgrading(&_ProxyAdmin.TransactOpts, _upgrading) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_ProxyAdmin *ProxyAdminTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { - return _ProxyAdmin.contract.Transact(opts, "transferOwnership", newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_ProxyAdmin *ProxyAdminSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _ProxyAdmin.Contract.TransferOwnership(&_ProxyAdmin.TransactOpts, newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_ProxyAdmin *ProxyAdminTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _ProxyAdmin.Contract.TransferOwnership(&_ProxyAdmin.TransactOpts, newOwner) -} - -// Upgrade is a paid mutator transaction binding the contract method 0x99a88ec4. -// -// Solidity: function upgrade(address _proxy, address _implementation) returns() -func (_ProxyAdmin *ProxyAdminTransactor) Upgrade(opts *bind.TransactOpts, _proxy common.Address, _implementation common.Address) (*types.Transaction, error) { - return _ProxyAdmin.contract.Transact(opts, "upgrade", _proxy, _implementation) -} - -// Upgrade is a paid mutator transaction binding the contract method 0x99a88ec4. -// -// Solidity: function upgrade(address _proxy, address _implementation) returns() -func (_ProxyAdmin *ProxyAdminSession) Upgrade(_proxy common.Address, _implementation common.Address) (*types.Transaction, error) { - return _ProxyAdmin.Contract.Upgrade(&_ProxyAdmin.TransactOpts, _proxy, _implementation) -} - -// Upgrade is a paid mutator transaction binding the contract method 0x99a88ec4. -// -// Solidity: function upgrade(address _proxy, address _implementation) returns() -func (_ProxyAdmin *ProxyAdminTransactorSession) Upgrade(_proxy common.Address, _implementation common.Address) (*types.Transaction, error) { - return _ProxyAdmin.Contract.Upgrade(&_ProxyAdmin.TransactOpts, _proxy, _implementation) -} - -// UpgradeAndCall is a paid mutator transaction binding the contract method 0x9623609d. -// -// Solidity: function upgradeAndCall(address _proxy, address _implementation, bytes _data) payable returns() -func (_ProxyAdmin *ProxyAdminTransactor) UpgradeAndCall(opts *bind.TransactOpts, _proxy common.Address, _implementation common.Address, _data []byte) (*types.Transaction, error) { - return _ProxyAdmin.contract.Transact(opts, "upgradeAndCall", _proxy, _implementation, _data) -} - -// UpgradeAndCall is a paid mutator transaction binding the contract method 0x9623609d. -// -// Solidity: function upgradeAndCall(address _proxy, address _implementation, bytes _data) payable returns() -func (_ProxyAdmin *ProxyAdminSession) UpgradeAndCall(_proxy common.Address, _implementation common.Address, _data []byte) (*types.Transaction, error) { - return _ProxyAdmin.Contract.UpgradeAndCall(&_ProxyAdmin.TransactOpts, _proxy, _implementation, _data) -} - -// UpgradeAndCall is a paid mutator transaction binding the contract method 0x9623609d. -// -// Solidity: function upgradeAndCall(address _proxy, address _implementation, bytes _data) payable returns() -func (_ProxyAdmin *ProxyAdminTransactorSession) UpgradeAndCall(_proxy common.Address, _implementation common.Address, _data []byte) (*types.Transaction, error) { - return _ProxyAdmin.Contract.UpgradeAndCall(&_ProxyAdmin.TransactOpts, _proxy, _implementation, _data) -} - -// ProxyAdminOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the ProxyAdmin contract. -type ProxyAdminOwnershipTransferredIterator struct { - Event *ProxyAdminOwnershipTransferred // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ProxyAdminOwnershipTransferredIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ProxyAdminOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ProxyAdminOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ProxyAdminOwnershipTransferredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ProxyAdminOwnershipTransferredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ProxyAdminOwnershipTransferred represents a OwnershipTransferred event raised by the ProxyAdmin contract. -type ProxyAdminOwnershipTransferred struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_ProxyAdmin *ProxyAdminFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ProxyAdminOwnershipTransferredIterator, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _ProxyAdmin.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return &ProxyAdminOwnershipTransferredIterator{contract: _ProxyAdmin.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil -} - -// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_ProxyAdmin *ProxyAdminFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ProxyAdminOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _ProxyAdmin.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ProxyAdminOwnershipTransferred) - if err := _ProxyAdmin.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_ProxyAdmin *ProxyAdminFilterer) ParseOwnershipTransferred(log types.Log) (*ProxyAdminOwnershipTransferred, error) { - event := new(ProxyAdminOwnershipTransferred) - if err := _ProxyAdmin.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/op-chain-ops/upgrades/bindings/storagesetter.go b/op-chain-ops/upgrades/bindings/storagesetter.go deleted file mode 100644 index c1d45928b476..000000000000 --- a/op-chain-ops/upgrades/bindings/storagesetter.go +++ /dev/null @@ -1,446 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindings - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// StorageSetterSlot is an auto generated low-level Go binding around an user-defined struct. -type StorageSetterSlot struct { - Key [32]byte - Value [32]byte -} - -// StorageSetterMetaData contains all meta data concerning the StorageSetter contract. -var StorageSetterMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_slot\",\"type\":\"bytes32\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_slot\",\"type\":\"bytes32\"}],\"name\":\"getBool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"value_\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_slot\",\"type\":\"bytes32\"}],\"name\":\"getBytes32\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"value_\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_slot\",\"type\":\"bytes32\"}],\"name\":\"getUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"value_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_slot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_slot\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"_value\",\"type\":\"bool\"}],\"name\":\"setBool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"internalType\":\"structStorageSetter.Slot[]\",\"name\":\"slots\",\"type\":\"tuple[]\"}],\"name\":\"setBytes32\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_slot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_value\",\"type\":\"bytes32\"}],\"name\":\"setBytes32\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_slot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"setUint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", -} - -// StorageSetterABI is the input ABI used to generate the binding from. -// Deprecated: Use StorageSetterMetaData.ABI instead. -var StorageSetterABI = StorageSetterMetaData.ABI - -// StorageSetter is an auto generated Go binding around an Ethereum contract. -type StorageSetter struct { - StorageSetterCaller // Read-only binding to the contract - StorageSetterTransactor // Write-only binding to the contract - StorageSetterFilterer // Log filterer for contract events -} - -// StorageSetterCaller is an auto generated read-only Go binding around an Ethereum contract. -type StorageSetterCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// StorageSetterTransactor is an auto generated write-only Go binding around an Ethereum contract. -type StorageSetterTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// StorageSetterFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type StorageSetterFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// StorageSetterSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type StorageSetterSession struct { - Contract *StorageSetter // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// StorageSetterCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type StorageSetterCallerSession struct { - Contract *StorageSetterCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// StorageSetterTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type StorageSetterTransactorSession struct { - Contract *StorageSetterTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// StorageSetterRaw is an auto generated low-level Go binding around an Ethereum contract. -type StorageSetterRaw struct { - Contract *StorageSetter // Generic contract binding to access the raw methods on -} - -// StorageSetterCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type StorageSetterCallerRaw struct { - Contract *StorageSetterCaller // Generic read-only contract binding to access the raw methods on -} - -// StorageSetterTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type StorageSetterTransactorRaw struct { - Contract *StorageSetterTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewStorageSetter creates a new instance of StorageSetter, bound to a specific deployed contract. -func NewStorageSetter(address common.Address, backend bind.ContractBackend) (*StorageSetter, error) { - contract, err := bindStorageSetter(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &StorageSetter{StorageSetterCaller: StorageSetterCaller{contract: contract}, StorageSetterTransactor: StorageSetterTransactor{contract: contract}, StorageSetterFilterer: StorageSetterFilterer{contract: contract}}, nil -} - -// NewStorageSetterCaller creates a new read-only instance of StorageSetter, bound to a specific deployed contract. -func NewStorageSetterCaller(address common.Address, caller bind.ContractCaller) (*StorageSetterCaller, error) { - contract, err := bindStorageSetter(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &StorageSetterCaller{contract: contract}, nil -} - -// NewStorageSetterTransactor creates a new write-only instance of StorageSetter, bound to a specific deployed contract. -func NewStorageSetterTransactor(address common.Address, transactor bind.ContractTransactor) (*StorageSetterTransactor, error) { - contract, err := bindStorageSetter(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &StorageSetterTransactor{contract: contract}, nil -} - -// NewStorageSetterFilterer creates a new log filterer instance of StorageSetter, bound to a specific deployed contract. -func NewStorageSetterFilterer(address common.Address, filterer bind.ContractFilterer) (*StorageSetterFilterer, error) { - contract, err := bindStorageSetter(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &StorageSetterFilterer{contract: contract}, nil -} - -// bindStorageSetter binds a generic wrapper to an already deployed contract. -func bindStorageSetter(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(StorageSetterABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_StorageSetter *StorageSetterRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _StorageSetter.Contract.StorageSetterCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_StorageSetter *StorageSetterRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _StorageSetter.Contract.StorageSetterTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_StorageSetter *StorageSetterRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _StorageSetter.Contract.StorageSetterTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_StorageSetter *StorageSetterCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _StorageSetter.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_StorageSetter *StorageSetterTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _StorageSetter.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_StorageSetter *StorageSetterTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _StorageSetter.Contract.contract.Transact(opts, method, params...) -} - -// GetAddress is a free data retrieval call binding the contract method 0x21f8a721. -// -// Solidity: function getAddress(bytes32 _slot) view returns(address addr_) -func (_StorageSetter *StorageSetterCaller) GetAddress(opts *bind.CallOpts, _slot [32]byte) (common.Address, error) { - var out []interface{} - err := _StorageSetter.contract.Call(opts, &out, "getAddress", _slot) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetAddress is a free data retrieval call binding the contract method 0x21f8a721. -// -// Solidity: function getAddress(bytes32 _slot) view returns(address addr_) -func (_StorageSetter *StorageSetterSession) GetAddress(_slot [32]byte) (common.Address, error) { - return _StorageSetter.Contract.GetAddress(&_StorageSetter.CallOpts, _slot) -} - -// GetAddress is a free data retrieval call binding the contract method 0x21f8a721. -// -// Solidity: function getAddress(bytes32 _slot) view returns(address addr_) -func (_StorageSetter *StorageSetterCallerSession) GetAddress(_slot [32]byte) (common.Address, error) { - return _StorageSetter.Contract.GetAddress(&_StorageSetter.CallOpts, _slot) -} - -// GetBool is a free data retrieval call binding the contract method 0x7ae1cfca. -// -// Solidity: function getBool(bytes32 _slot) view returns(bool value_) -func (_StorageSetter *StorageSetterCaller) GetBool(opts *bind.CallOpts, _slot [32]byte) (bool, error) { - var out []interface{} - err := _StorageSetter.contract.Call(opts, &out, "getBool", _slot) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// GetBool is a free data retrieval call binding the contract method 0x7ae1cfca. -// -// Solidity: function getBool(bytes32 _slot) view returns(bool value_) -func (_StorageSetter *StorageSetterSession) GetBool(_slot [32]byte) (bool, error) { - return _StorageSetter.Contract.GetBool(&_StorageSetter.CallOpts, _slot) -} - -// GetBool is a free data retrieval call binding the contract method 0x7ae1cfca. -// -// Solidity: function getBool(bytes32 _slot) view returns(bool value_) -func (_StorageSetter *StorageSetterCallerSession) GetBool(_slot [32]byte) (bool, error) { - return _StorageSetter.Contract.GetBool(&_StorageSetter.CallOpts, _slot) -} - -// GetBytes32 is a free data retrieval call binding the contract method 0xa6ed563e. -// -// Solidity: function getBytes32(bytes32 _slot) view returns(bytes32 value_) -func (_StorageSetter *StorageSetterCaller) GetBytes32(opts *bind.CallOpts, _slot [32]byte) ([32]byte, error) { - var out []interface{} - err := _StorageSetter.contract.Call(opts, &out, "getBytes32", _slot) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// GetBytes32 is a free data retrieval call binding the contract method 0xa6ed563e. -// -// Solidity: function getBytes32(bytes32 _slot) view returns(bytes32 value_) -func (_StorageSetter *StorageSetterSession) GetBytes32(_slot [32]byte) ([32]byte, error) { - return _StorageSetter.Contract.GetBytes32(&_StorageSetter.CallOpts, _slot) -} - -// GetBytes32 is a free data retrieval call binding the contract method 0xa6ed563e. -// -// Solidity: function getBytes32(bytes32 _slot) view returns(bytes32 value_) -func (_StorageSetter *StorageSetterCallerSession) GetBytes32(_slot [32]byte) ([32]byte, error) { - return _StorageSetter.Contract.GetBytes32(&_StorageSetter.CallOpts, _slot) -} - -// GetUint is a free data retrieval call binding the contract method 0xbd02d0f5. -// -// Solidity: function getUint(bytes32 _slot) view returns(uint256 value_) -func (_StorageSetter *StorageSetterCaller) GetUint(opts *bind.CallOpts, _slot [32]byte) (*big.Int, error) { - var out []interface{} - err := _StorageSetter.contract.Call(opts, &out, "getUint", _slot) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetUint is a free data retrieval call binding the contract method 0xbd02d0f5. -// -// Solidity: function getUint(bytes32 _slot) view returns(uint256 value_) -func (_StorageSetter *StorageSetterSession) GetUint(_slot [32]byte) (*big.Int, error) { - return _StorageSetter.Contract.GetUint(&_StorageSetter.CallOpts, _slot) -} - -// GetUint is a free data retrieval call binding the contract method 0xbd02d0f5. -// -// Solidity: function getUint(bytes32 _slot) view returns(uint256 value_) -func (_StorageSetter *StorageSetterCallerSession) GetUint(_slot [32]byte) (*big.Int, error) { - return _StorageSetter.Contract.GetUint(&_StorageSetter.CallOpts, _slot) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_StorageSetter *StorageSetterCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _StorageSetter.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_StorageSetter *StorageSetterSession) Version() (string, error) { - return _StorageSetter.Contract.Version(&_StorageSetter.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_StorageSetter *StorageSetterCallerSession) Version() (string, error) { - return _StorageSetter.Contract.Version(&_StorageSetter.CallOpts) -} - -// SetAddress is a paid mutator transaction binding the contract method 0xca446dd9. -// -// Solidity: function setAddress(bytes32 _slot, address _address) returns() -func (_StorageSetter *StorageSetterTransactor) SetAddress(opts *bind.TransactOpts, _slot [32]byte, _address common.Address) (*types.Transaction, error) { - return _StorageSetter.contract.Transact(opts, "setAddress", _slot, _address) -} - -// SetAddress is a paid mutator transaction binding the contract method 0xca446dd9. -// -// Solidity: function setAddress(bytes32 _slot, address _address) returns() -func (_StorageSetter *StorageSetterSession) SetAddress(_slot [32]byte, _address common.Address) (*types.Transaction, error) { - return _StorageSetter.Contract.SetAddress(&_StorageSetter.TransactOpts, _slot, _address) -} - -// SetAddress is a paid mutator transaction binding the contract method 0xca446dd9. -// -// Solidity: function setAddress(bytes32 _slot, address _address) returns() -func (_StorageSetter *StorageSetterTransactorSession) SetAddress(_slot [32]byte, _address common.Address) (*types.Transaction, error) { - return _StorageSetter.Contract.SetAddress(&_StorageSetter.TransactOpts, _slot, _address) -} - -// SetBool is a paid mutator transaction binding the contract method 0xabfdcced. -// -// Solidity: function setBool(bytes32 _slot, bool _value) returns() -func (_StorageSetter *StorageSetterTransactor) SetBool(opts *bind.TransactOpts, _slot [32]byte, _value bool) (*types.Transaction, error) { - return _StorageSetter.contract.Transact(opts, "setBool", _slot, _value) -} - -// SetBool is a paid mutator transaction binding the contract method 0xabfdcced. -// -// Solidity: function setBool(bytes32 _slot, bool _value) returns() -func (_StorageSetter *StorageSetterSession) SetBool(_slot [32]byte, _value bool) (*types.Transaction, error) { - return _StorageSetter.Contract.SetBool(&_StorageSetter.TransactOpts, _slot, _value) -} - -// SetBool is a paid mutator transaction binding the contract method 0xabfdcced. -// -// Solidity: function setBool(bytes32 _slot, bool _value) returns() -func (_StorageSetter *StorageSetterTransactorSession) SetBool(_slot [32]byte, _value bool) (*types.Transaction, error) { - return _StorageSetter.Contract.SetBool(&_StorageSetter.TransactOpts, _slot, _value) -} - -// SetBytes32 is a paid mutator transaction binding the contract method 0x0528afe2. -// -// Solidity: function setBytes32((bytes32,bytes32)[] slots) returns() -func (_StorageSetter *StorageSetterTransactor) SetBytes32(opts *bind.TransactOpts, slots []StorageSetterSlot) (*types.Transaction, error) { - return _StorageSetter.contract.Transact(opts, "setBytes32", slots) -} - -// SetBytes32 is a paid mutator transaction binding the contract method 0x0528afe2. -// -// Solidity: function setBytes32((bytes32,bytes32)[] slots) returns() -func (_StorageSetter *StorageSetterSession) SetBytes32(slots []StorageSetterSlot) (*types.Transaction, error) { - return _StorageSetter.Contract.SetBytes32(&_StorageSetter.TransactOpts, slots) -} - -// SetBytes32 is a paid mutator transaction binding the contract method 0x0528afe2. -// -// Solidity: function setBytes32((bytes32,bytes32)[] slots) returns() -func (_StorageSetter *StorageSetterTransactorSession) SetBytes32(slots []StorageSetterSlot) (*types.Transaction, error) { - return _StorageSetter.Contract.SetBytes32(&_StorageSetter.TransactOpts, slots) -} - -// SetBytes320 is a paid mutator transaction binding the contract method 0x4e91db08. -// -// Solidity: function setBytes32(bytes32 _slot, bytes32 _value) returns() -func (_StorageSetter *StorageSetterTransactor) SetBytes320(opts *bind.TransactOpts, _slot [32]byte, _value [32]byte) (*types.Transaction, error) { - return _StorageSetter.contract.Transact(opts, "setBytes320", _slot, _value) -} - -// SetBytes320 is a paid mutator transaction binding the contract method 0x4e91db08. -// -// Solidity: function setBytes32(bytes32 _slot, bytes32 _value) returns() -func (_StorageSetter *StorageSetterSession) SetBytes320(_slot [32]byte, _value [32]byte) (*types.Transaction, error) { - return _StorageSetter.Contract.SetBytes320(&_StorageSetter.TransactOpts, _slot, _value) -} - -// SetBytes320 is a paid mutator transaction binding the contract method 0x4e91db08. -// -// Solidity: function setBytes32(bytes32 _slot, bytes32 _value) returns() -func (_StorageSetter *StorageSetterTransactorSession) SetBytes320(_slot [32]byte, _value [32]byte) (*types.Transaction, error) { - return _StorageSetter.Contract.SetBytes320(&_StorageSetter.TransactOpts, _slot, _value) -} - -// SetUint is a paid mutator transaction binding the contract method 0xe2a4853a. -// -// Solidity: function setUint(bytes32 _slot, uint256 _value) returns() -func (_StorageSetter *StorageSetterTransactor) SetUint(opts *bind.TransactOpts, _slot [32]byte, _value *big.Int) (*types.Transaction, error) { - return _StorageSetter.contract.Transact(opts, "setUint", _slot, _value) -} - -// SetUint is a paid mutator transaction binding the contract method 0xe2a4853a. -// -// Solidity: function setUint(bytes32 _slot, uint256 _value) returns() -func (_StorageSetter *StorageSetterSession) SetUint(_slot [32]byte, _value *big.Int) (*types.Transaction, error) { - return _StorageSetter.Contract.SetUint(&_StorageSetter.TransactOpts, _slot, _value) -} - -// SetUint is a paid mutator transaction binding the contract method 0xe2a4853a. -// -// Solidity: function setUint(bytes32 _slot, uint256 _value) returns() -func (_StorageSetter *StorageSetterTransactorSession) SetUint(_slot [32]byte, _value *big.Int) (*types.Transaction, error) { - return _StorageSetter.Contract.SetUint(&_StorageSetter.TransactOpts, _slot, _value) -} diff --git a/op-chain-ops/upgrades/bindings/systemconfig.go b/op-chain-ops/upgrades/bindings/systemconfig.go deleted file mode 100644 index c8de0bad583e..000000000000 --- a/op-chain-ops/upgrades/bindings/systemconfig.go +++ /dev/null @@ -1,1785 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindings - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// ResourceMeteringResourceConfig is an auto generated low-level Go binding around an user-defined struct. -type ResourceMeteringResourceConfig struct { - MaxResourceLimit uint32 - ElasticityMultiplier uint8 - BaseFeeMaxChangeDenominator uint8 - MinimumBaseFee uint32 - SystemTxMaxGas uint32 - MaximumBaseFee *big.Int -} - -// SystemConfigAddresses is an auto generated low-level Go binding around an user-defined struct. -type SystemConfigAddresses struct { - L1CrossDomainMessenger common.Address - L1ERC721Bridge common.Address - L1StandardBridge common.Address - DisputeGameFactory common.Address - OptimismPortal common.Address - OptimismMintableERC20Factory common.Address - GasPayingToken common.Address -} - -// SystemConfigMetaData contains all meta data concerning the SystemConfig contract. -var SystemConfigMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BATCH_INBOX_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DISPUTE_GAME_FACTORY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMISM_PORTAL_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"START_BLOCK_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disputeGameFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasPayingToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals_\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasPayingTokenName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasPayingTokenSymbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structResourceMetering.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_batchInbox\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1ERC721Bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1StandardBridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"disputeGameFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismPortal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"gasPayingToken\",\"type\":\"address\"}],\"internalType\":\"structSystemConfig.Addresses\",\"name\":\"_addresses\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCustomGasToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1CrossDomainMessenger\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1ERC721Bridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StandardBridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"optimismMintableERC20Factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"optimismPortal\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"overhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resourceConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structResourceMetering.ResourceConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"}],\"name\":\"setBatcherHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"}],\"name\":\"setGasConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"}],\"name\":\"setGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structResourceMetering.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"name\":\"setResourceConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"}],\"name\":\"setUnsafeBlockSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"startBlock_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unsafeBlockSigner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\",\"name\":\"updateType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ConfigUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"}]", -} - -// SystemConfigABI is the input ABI used to generate the binding from. -// Deprecated: Use SystemConfigMetaData.ABI instead. -var SystemConfigABI = SystemConfigMetaData.ABI - -// SystemConfig is an auto generated Go binding around an Ethereum contract. -type SystemConfig struct { - SystemConfigCaller // Read-only binding to the contract - SystemConfigTransactor // Write-only binding to the contract - SystemConfigFilterer // Log filterer for contract events -} - -// SystemConfigCaller is an auto generated read-only Go binding around an Ethereum contract. -type SystemConfigCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// SystemConfigTransactor is an auto generated write-only Go binding around an Ethereum contract. -type SystemConfigTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// SystemConfigFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type SystemConfigFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// SystemConfigSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type SystemConfigSession struct { - Contract *SystemConfig // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// SystemConfigCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type SystemConfigCallerSession struct { - Contract *SystemConfigCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// SystemConfigTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type SystemConfigTransactorSession struct { - Contract *SystemConfigTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// SystemConfigRaw is an auto generated low-level Go binding around an Ethereum contract. -type SystemConfigRaw struct { - Contract *SystemConfig // Generic contract binding to access the raw methods on -} - -// SystemConfigCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type SystemConfigCallerRaw struct { - Contract *SystemConfigCaller // Generic read-only contract binding to access the raw methods on -} - -// SystemConfigTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type SystemConfigTransactorRaw struct { - Contract *SystemConfigTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewSystemConfig creates a new instance of SystemConfig, bound to a specific deployed contract. -func NewSystemConfig(address common.Address, backend bind.ContractBackend) (*SystemConfig, error) { - contract, err := bindSystemConfig(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &SystemConfig{SystemConfigCaller: SystemConfigCaller{contract: contract}, SystemConfigTransactor: SystemConfigTransactor{contract: contract}, SystemConfigFilterer: SystemConfigFilterer{contract: contract}}, nil -} - -// NewSystemConfigCaller creates a new read-only instance of SystemConfig, bound to a specific deployed contract. -func NewSystemConfigCaller(address common.Address, caller bind.ContractCaller) (*SystemConfigCaller, error) { - contract, err := bindSystemConfig(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &SystemConfigCaller{contract: contract}, nil -} - -// NewSystemConfigTransactor creates a new write-only instance of SystemConfig, bound to a specific deployed contract. -func NewSystemConfigTransactor(address common.Address, transactor bind.ContractTransactor) (*SystemConfigTransactor, error) { - contract, err := bindSystemConfig(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &SystemConfigTransactor{contract: contract}, nil -} - -// NewSystemConfigFilterer creates a new log filterer instance of SystemConfig, bound to a specific deployed contract. -func NewSystemConfigFilterer(address common.Address, filterer bind.ContractFilterer) (*SystemConfigFilterer, error) { - contract, err := bindSystemConfig(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &SystemConfigFilterer{contract: contract}, nil -} - -// bindSystemConfig binds a generic wrapper to an already deployed contract. -func bindSystemConfig(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(SystemConfigABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_SystemConfig *SystemConfigRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _SystemConfig.Contract.SystemConfigCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_SystemConfig *SystemConfigRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _SystemConfig.Contract.SystemConfigTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_SystemConfig *SystemConfigRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _SystemConfig.Contract.SystemConfigTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_SystemConfig *SystemConfigCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _SystemConfig.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_SystemConfig *SystemConfigTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _SystemConfig.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_SystemConfig *SystemConfigTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _SystemConfig.Contract.contract.Transact(opts, method, params...) -} - -// BATCHINBOXSLOT is a free data retrieval call binding the contract method 0xbc49ce5f. -// -// Solidity: function BATCH_INBOX_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCaller) BATCHINBOXSLOT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "BATCH_INBOX_SLOT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BATCHINBOXSLOT is a free data retrieval call binding the contract method 0xbc49ce5f. -// -// Solidity: function BATCH_INBOX_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigSession) BATCHINBOXSLOT() ([32]byte, error) { - return _SystemConfig.Contract.BATCHINBOXSLOT(&_SystemConfig.CallOpts) -} - -// BATCHINBOXSLOT is a free data retrieval call binding the contract method 0xbc49ce5f. -// -// Solidity: function BATCH_INBOX_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCallerSession) BATCHINBOXSLOT() ([32]byte, error) { - return _SystemConfig.Contract.BATCHINBOXSLOT(&_SystemConfig.CallOpts) -} - -// DISPUTEGAMEFACTORYSLOT is a free data retrieval call binding the contract method 0xe2a3285c. -// -// Solidity: function DISPUTE_GAME_FACTORY_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCaller) DISPUTEGAMEFACTORYSLOT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "DISPUTE_GAME_FACTORY_SLOT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// DISPUTEGAMEFACTORYSLOT is a free data retrieval call binding the contract method 0xe2a3285c. -// -// Solidity: function DISPUTE_GAME_FACTORY_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigSession) DISPUTEGAMEFACTORYSLOT() ([32]byte, error) { - return _SystemConfig.Contract.DISPUTEGAMEFACTORYSLOT(&_SystemConfig.CallOpts) -} - -// DISPUTEGAMEFACTORYSLOT is a free data retrieval call binding the contract method 0xe2a3285c. -// -// Solidity: function DISPUTE_GAME_FACTORY_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCallerSession) DISPUTEGAMEFACTORYSLOT() ([32]byte, error) { - return _SystemConfig.Contract.DISPUTEGAMEFACTORYSLOT(&_SystemConfig.CallOpts) -} - -// L1CROSSDOMAINMESSENGERSLOT is a free data retrieval call binding the contract method 0x5d73369c. -// -// Solidity: function L1_CROSS_DOMAIN_MESSENGER_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCaller) L1CROSSDOMAINMESSENGERSLOT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "L1_CROSS_DOMAIN_MESSENGER_SLOT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// L1CROSSDOMAINMESSENGERSLOT is a free data retrieval call binding the contract method 0x5d73369c. -// -// Solidity: function L1_CROSS_DOMAIN_MESSENGER_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigSession) L1CROSSDOMAINMESSENGERSLOT() ([32]byte, error) { - return _SystemConfig.Contract.L1CROSSDOMAINMESSENGERSLOT(&_SystemConfig.CallOpts) -} - -// L1CROSSDOMAINMESSENGERSLOT is a free data retrieval call binding the contract method 0x5d73369c. -// -// Solidity: function L1_CROSS_DOMAIN_MESSENGER_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCallerSession) L1CROSSDOMAINMESSENGERSLOT() ([32]byte, error) { - return _SystemConfig.Contract.L1CROSSDOMAINMESSENGERSLOT(&_SystemConfig.CallOpts) -} - -// L1ERC721BRIDGESLOT is a free data retrieval call binding the contract method 0x19f5cea8. -// -// Solidity: function L1_ERC_721_BRIDGE_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCaller) L1ERC721BRIDGESLOT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "L1_ERC_721_BRIDGE_SLOT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// L1ERC721BRIDGESLOT is a free data retrieval call binding the contract method 0x19f5cea8. -// -// Solidity: function L1_ERC_721_BRIDGE_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigSession) L1ERC721BRIDGESLOT() ([32]byte, error) { - return _SystemConfig.Contract.L1ERC721BRIDGESLOT(&_SystemConfig.CallOpts) -} - -// L1ERC721BRIDGESLOT is a free data retrieval call binding the contract method 0x19f5cea8. -// -// Solidity: function L1_ERC_721_BRIDGE_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCallerSession) L1ERC721BRIDGESLOT() ([32]byte, error) { - return _SystemConfig.Contract.L1ERC721BRIDGESLOT(&_SystemConfig.CallOpts) -} - -// L1STANDARDBRIDGESLOT is a free data retrieval call binding the contract method 0xf8c68de0. -// -// Solidity: function L1_STANDARD_BRIDGE_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCaller) L1STANDARDBRIDGESLOT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "L1_STANDARD_BRIDGE_SLOT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// L1STANDARDBRIDGESLOT is a free data retrieval call binding the contract method 0xf8c68de0. -// -// Solidity: function L1_STANDARD_BRIDGE_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigSession) L1STANDARDBRIDGESLOT() ([32]byte, error) { - return _SystemConfig.Contract.L1STANDARDBRIDGESLOT(&_SystemConfig.CallOpts) -} - -// L1STANDARDBRIDGESLOT is a free data retrieval call binding the contract method 0xf8c68de0. -// -// Solidity: function L1_STANDARD_BRIDGE_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCallerSession) L1STANDARDBRIDGESLOT() ([32]byte, error) { - return _SystemConfig.Contract.L1STANDARDBRIDGESLOT(&_SystemConfig.CallOpts) -} - -// OPTIMISMMINTABLEERC20FACTORYSLOT is a free data retrieval call binding the contract method 0x06c92657. -// -// Solidity: function OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCaller) OPTIMISMMINTABLEERC20FACTORYSLOT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// OPTIMISMMINTABLEERC20FACTORYSLOT is a free data retrieval call binding the contract method 0x06c92657. -// -// Solidity: function OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigSession) OPTIMISMMINTABLEERC20FACTORYSLOT() ([32]byte, error) { - return _SystemConfig.Contract.OPTIMISMMINTABLEERC20FACTORYSLOT(&_SystemConfig.CallOpts) -} - -// OPTIMISMMINTABLEERC20FACTORYSLOT is a free data retrieval call binding the contract method 0x06c92657. -// -// Solidity: function OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCallerSession) OPTIMISMMINTABLEERC20FACTORYSLOT() ([32]byte, error) { - return _SystemConfig.Contract.OPTIMISMMINTABLEERC20FACTORYSLOT(&_SystemConfig.CallOpts) -} - -// OPTIMISMPORTALSLOT is a free data retrieval call binding the contract method 0xfd32aa0f. -// -// Solidity: function OPTIMISM_PORTAL_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCaller) OPTIMISMPORTALSLOT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "OPTIMISM_PORTAL_SLOT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// OPTIMISMPORTALSLOT is a free data retrieval call binding the contract method 0xfd32aa0f. -// -// Solidity: function OPTIMISM_PORTAL_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigSession) OPTIMISMPORTALSLOT() ([32]byte, error) { - return _SystemConfig.Contract.OPTIMISMPORTALSLOT(&_SystemConfig.CallOpts) -} - -// OPTIMISMPORTALSLOT is a free data retrieval call binding the contract method 0xfd32aa0f. -// -// Solidity: function OPTIMISM_PORTAL_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCallerSession) OPTIMISMPORTALSLOT() ([32]byte, error) { - return _SystemConfig.Contract.OPTIMISMPORTALSLOT(&_SystemConfig.CallOpts) -} - -// STARTBLOCKSLOT is a free data retrieval call binding the contract method 0xe0e2016d. -// -// Solidity: function START_BLOCK_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCaller) STARTBLOCKSLOT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "START_BLOCK_SLOT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STARTBLOCKSLOT is a free data retrieval call binding the contract method 0xe0e2016d. -// -// Solidity: function START_BLOCK_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigSession) STARTBLOCKSLOT() ([32]byte, error) { - return _SystemConfig.Contract.STARTBLOCKSLOT(&_SystemConfig.CallOpts) -} - -// STARTBLOCKSLOT is a free data retrieval call binding the contract method 0xe0e2016d. -// -// Solidity: function START_BLOCK_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCallerSession) STARTBLOCKSLOT() ([32]byte, error) { - return _SystemConfig.Contract.STARTBLOCKSLOT(&_SystemConfig.CallOpts) -} - -// UNSAFEBLOCKSIGNERSLOT is a free data retrieval call binding the contract method 0x4f16540b. -// -// Solidity: function UNSAFE_BLOCK_SIGNER_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCaller) UNSAFEBLOCKSIGNERSLOT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "UNSAFE_BLOCK_SIGNER_SLOT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// UNSAFEBLOCKSIGNERSLOT is a free data retrieval call binding the contract method 0x4f16540b. -// -// Solidity: function UNSAFE_BLOCK_SIGNER_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigSession) UNSAFEBLOCKSIGNERSLOT() ([32]byte, error) { - return _SystemConfig.Contract.UNSAFEBLOCKSIGNERSLOT(&_SystemConfig.CallOpts) -} - -// UNSAFEBLOCKSIGNERSLOT is a free data retrieval call binding the contract method 0x4f16540b. -// -// Solidity: function UNSAFE_BLOCK_SIGNER_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCallerSession) UNSAFEBLOCKSIGNERSLOT() ([32]byte, error) { - return _SystemConfig.Contract.UNSAFEBLOCKSIGNERSLOT(&_SystemConfig.CallOpts) -} - -// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. -// -// Solidity: function VERSION() view returns(uint256) -func (_SystemConfig *SystemConfigCaller) VERSION(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "VERSION") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. -// -// Solidity: function VERSION() view returns(uint256) -func (_SystemConfig *SystemConfigSession) VERSION() (*big.Int, error) { - return _SystemConfig.Contract.VERSION(&_SystemConfig.CallOpts) -} - -// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. -// -// Solidity: function VERSION() view returns(uint256) -func (_SystemConfig *SystemConfigCallerSession) VERSION() (*big.Int, error) { - return _SystemConfig.Contract.VERSION(&_SystemConfig.CallOpts) -} - -// BatchInbox is a free data retrieval call binding the contract method 0xdac6e63a. -// -// Solidity: function batchInbox() view returns(address addr_) -func (_SystemConfig *SystemConfigCaller) BatchInbox(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "batchInbox") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// BatchInbox is a free data retrieval call binding the contract method 0xdac6e63a. -// -// Solidity: function batchInbox() view returns(address addr_) -func (_SystemConfig *SystemConfigSession) BatchInbox() (common.Address, error) { - return _SystemConfig.Contract.BatchInbox(&_SystemConfig.CallOpts) -} - -// BatchInbox is a free data retrieval call binding the contract method 0xdac6e63a. -// -// Solidity: function batchInbox() view returns(address addr_) -func (_SystemConfig *SystemConfigCallerSession) BatchInbox() (common.Address, error) { - return _SystemConfig.Contract.BatchInbox(&_SystemConfig.CallOpts) -} - -// BatcherHash is a free data retrieval call binding the contract method 0xe81b2c6d. -// -// Solidity: function batcherHash() view returns(bytes32) -func (_SystemConfig *SystemConfigCaller) BatcherHash(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "batcherHash") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BatcherHash is a free data retrieval call binding the contract method 0xe81b2c6d. -// -// Solidity: function batcherHash() view returns(bytes32) -func (_SystemConfig *SystemConfigSession) BatcherHash() ([32]byte, error) { - return _SystemConfig.Contract.BatcherHash(&_SystemConfig.CallOpts) -} - -// BatcherHash is a free data retrieval call binding the contract method 0xe81b2c6d. -// -// Solidity: function batcherHash() view returns(bytes32) -func (_SystemConfig *SystemConfigCallerSession) BatcherHash() ([32]byte, error) { - return _SystemConfig.Contract.BatcherHash(&_SystemConfig.CallOpts) -} - -// DisputeGameFactory is a free data retrieval call binding the contract method 0xf2b4e617. -// -// Solidity: function disputeGameFactory() view returns(address addr_) -func (_SystemConfig *SystemConfigCaller) DisputeGameFactory(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "disputeGameFactory") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// DisputeGameFactory is a free data retrieval call binding the contract method 0xf2b4e617. -// -// Solidity: function disputeGameFactory() view returns(address addr_) -func (_SystemConfig *SystemConfigSession) DisputeGameFactory() (common.Address, error) { - return _SystemConfig.Contract.DisputeGameFactory(&_SystemConfig.CallOpts) -} - -// DisputeGameFactory is a free data retrieval call binding the contract method 0xf2b4e617. -// -// Solidity: function disputeGameFactory() view returns(address addr_) -func (_SystemConfig *SystemConfigCallerSession) DisputeGameFactory() (common.Address, error) { - return _SystemConfig.Contract.DisputeGameFactory(&_SystemConfig.CallOpts) -} - -// GasLimit is a free data retrieval call binding the contract method 0xf68016b7. -// -// Solidity: function gasLimit() view returns(uint64) -func (_SystemConfig *SystemConfigCaller) GasLimit(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "gasLimit") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// GasLimit is a free data retrieval call binding the contract method 0xf68016b7. -// -// Solidity: function gasLimit() view returns(uint64) -func (_SystemConfig *SystemConfigSession) GasLimit() (uint64, error) { - return _SystemConfig.Contract.GasLimit(&_SystemConfig.CallOpts) -} - -// GasLimit is a free data retrieval call binding the contract method 0xf68016b7. -// -// Solidity: function gasLimit() view returns(uint64) -func (_SystemConfig *SystemConfigCallerSession) GasLimit() (uint64, error) { - return _SystemConfig.Contract.GasLimit(&_SystemConfig.CallOpts) -} - -// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) -func (_SystemConfig *SystemConfigCaller) GasPayingToken(opts *bind.CallOpts) (struct { - Addr common.Address - Decimals uint8 -}, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "gasPayingToken") - - outstruct := new(struct { - Addr common.Address - Decimals uint8 - }) - if err != nil { - return *outstruct, err - } - - outstruct.Addr = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - outstruct.Decimals = *abi.ConvertType(out[1], new(uint8)).(*uint8) - - return *outstruct, err - -} - -// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) -func (_SystemConfig *SystemConfigSession) GasPayingToken() (struct { - Addr common.Address - Decimals uint8 -}, error) { - return _SystemConfig.Contract.GasPayingToken(&_SystemConfig.CallOpts) -} - -// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) -func (_SystemConfig *SystemConfigCallerSession) GasPayingToken() (struct { - Addr common.Address - Decimals uint8 -}, error) { - return _SystemConfig.Contract.GasPayingToken(&_SystemConfig.CallOpts) -} - -// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. -// -// Solidity: function gasPayingTokenName() view returns(string name_) -func (_SystemConfig *SystemConfigCaller) GasPayingTokenName(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "gasPayingTokenName") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. -// -// Solidity: function gasPayingTokenName() view returns(string name_) -func (_SystemConfig *SystemConfigSession) GasPayingTokenName() (string, error) { - return _SystemConfig.Contract.GasPayingTokenName(&_SystemConfig.CallOpts) -} - -// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. -// -// Solidity: function gasPayingTokenName() view returns(string name_) -func (_SystemConfig *SystemConfigCallerSession) GasPayingTokenName() (string, error) { - return _SystemConfig.Contract.GasPayingTokenName(&_SystemConfig.CallOpts) -} - -// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. -// -// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) -func (_SystemConfig *SystemConfigCaller) GasPayingTokenSymbol(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "gasPayingTokenSymbol") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. -// -// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) -func (_SystemConfig *SystemConfigSession) GasPayingTokenSymbol() (string, error) { - return _SystemConfig.Contract.GasPayingTokenSymbol(&_SystemConfig.CallOpts) -} - -// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. -// -// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) -func (_SystemConfig *SystemConfigCallerSession) GasPayingTokenSymbol() (string, error) { - return _SystemConfig.Contract.GasPayingTokenSymbol(&_SystemConfig.CallOpts) -} - -// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() view returns(bool) -func (_SystemConfig *SystemConfigCaller) IsCustomGasToken(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "isCustomGasToken") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() view returns(bool) -func (_SystemConfig *SystemConfigSession) IsCustomGasToken() (bool, error) { - return _SystemConfig.Contract.IsCustomGasToken(&_SystemConfig.CallOpts) -} - -// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() view returns(bool) -func (_SystemConfig *SystemConfigCallerSession) IsCustomGasToken() (bool, error) { - return _SystemConfig.Contract.IsCustomGasToken(&_SystemConfig.CallOpts) -} - -// L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. -// -// Solidity: function l1CrossDomainMessenger() view returns(address addr_) -func (_SystemConfig *SystemConfigCaller) L1CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "l1CrossDomainMessenger") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. -// -// Solidity: function l1CrossDomainMessenger() view returns(address addr_) -func (_SystemConfig *SystemConfigSession) L1CrossDomainMessenger() (common.Address, error) { - return _SystemConfig.Contract.L1CrossDomainMessenger(&_SystemConfig.CallOpts) -} - -// L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. -// -// Solidity: function l1CrossDomainMessenger() view returns(address addr_) -func (_SystemConfig *SystemConfigCallerSession) L1CrossDomainMessenger() (common.Address, error) { - return _SystemConfig.Contract.L1CrossDomainMessenger(&_SystemConfig.CallOpts) -} - -// L1ERC721Bridge is a free data retrieval call binding the contract method 0xc4e8ddfa. -// -// Solidity: function l1ERC721Bridge() view returns(address addr_) -func (_SystemConfig *SystemConfigCaller) L1ERC721Bridge(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "l1ERC721Bridge") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// L1ERC721Bridge is a free data retrieval call binding the contract method 0xc4e8ddfa. -// -// Solidity: function l1ERC721Bridge() view returns(address addr_) -func (_SystemConfig *SystemConfigSession) L1ERC721Bridge() (common.Address, error) { - return _SystemConfig.Contract.L1ERC721Bridge(&_SystemConfig.CallOpts) -} - -// L1ERC721Bridge is a free data retrieval call binding the contract method 0xc4e8ddfa. -// -// Solidity: function l1ERC721Bridge() view returns(address addr_) -func (_SystemConfig *SystemConfigCallerSession) L1ERC721Bridge() (common.Address, error) { - return _SystemConfig.Contract.L1ERC721Bridge(&_SystemConfig.CallOpts) -} - -// L1StandardBridge is a free data retrieval call binding the contract method 0x078f29cf. -// -// Solidity: function l1StandardBridge() view returns(address addr_) -func (_SystemConfig *SystemConfigCaller) L1StandardBridge(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "l1StandardBridge") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// L1StandardBridge is a free data retrieval call binding the contract method 0x078f29cf. -// -// Solidity: function l1StandardBridge() view returns(address addr_) -func (_SystemConfig *SystemConfigSession) L1StandardBridge() (common.Address, error) { - return _SystemConfig.Contract.L1StandardBridge(&_SystemConfig.CallOpts) -} - -// L1StandardBridge is a free data retrieval call binding the contract method 0x078f29cf. -// -// Solidity: function l1StandardBridge() view returns(address addr_) -func (_SystemConfig *SystemConfigCallerSession) L1StandardBridge() (common.Address, error) { - return _SystemConfig.Contract.L1StandardBridge(&_SystemConfig.CallOpts) -} - -// MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. -// -// Solidity: function minimumGasLimit() view returns(uint64) -func (_SystemConfig *SystemConfigCaller) MinimumGasLimit(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "minimumGasLimit") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. -// -// Solidity: function minimumGasLimit() view returns(uint64) -func (_SystemConfig *SystemConfigSession) MinimumGasLimit() (uint64, error) { - return _SystemConfig.Contract.MinimumGasLimit(&_SystemConfig.CallOpts) -} - -// MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. -// -// Solidity: function minimumGasLimit() view returns(uint64) -func (_SystemConfig *SystemConfigCallerSession) MinimumGasLimit() (uint64, error) { - return _SystemConfig.Contract.MinimumGasLimit(&_SystemConfig.CallOpts) -} - -// OptimismMintableERC20Factory is a free data retrieval call binding the contract method 0x9b7d7f0a. -// -// Solidity: function optimismMintableERC20Factory() view returns(address addr_) -func (_SystemConfig *SystemConfigCaller) OptimismMintableERC20Factory(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "optimismMintableERC20Factory") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OptimismMintableERC20Factory is a free data retrieval call binding the contract method 0x9b7d7f0a. -// -// Solidity: function optimismMintableERC20Factory() view returns(address addr_) -func (_SystemConfig *SystemConfigSession) OptimismMintableERC20Factory() (common.Address, error) { - return _SystemConfig.Contract.OptimismMintableERC20Factory(&_SystemConfig.CallOpts) -} - -// OptimismMintableERC20Factory is a free data retrieval call binding the contract method 0x9b7d7f0a. -// -// Solidity: function optimismMintableERC20Factory() view returns(address addr_) -func (_SystemConfig *SystemConfigCallerSession) OptimismMintableERC20Factory() (common.Address, error) { - return _SystemConfig.Contract.OptimismMintableERC20Factory(&_SystemConfig.CallOpts) -} - -// OptimismPortal is a free data retrieval call binding the contract method 0x0a49cb03. -// -// Solidity: function optimismPortal() view returns(address addr_) -func (_SystemConfig *SystemConfigCaller) OptimismPortal(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "optimismPortal") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OptimismPortal is a free data retrieval call binding the contract method 0x0a49cb03. -// -// Solidity: function optimismPortal() view returns(address addr_) -func (_SystemConfig *SystemConfigSession) OptimismPortal() (common.Address, error) { - return _SystemConfig.Contract.OptimismPortal(&_SystemConfig.CallOpts) -} - -// OptimismPortal is a free data retrieval call binding the contract method 0x0a49cb03. -// -// Solidity: function optimismPortal() view returns(address addr_) -func (_SystemConfig *SystemConfigCallerSession) OptimismPortal() (common.Address, error) { - return _SystemConfig.Contract.OptimismPortal(&_SystemConfig.CallOpts) -} - -// Overhead is a free data retrieval call binding the contract method 0x0c18c162. -// -// Solidity: function overhead() view returns(uint256) -func (_SystemConfig *SystemConfigCaller) Overhead(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "overhead") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// Overhead is a free data retrieval call binding the contract method 0x0c18c162. -// -// Solidity: function overhead() view returns(uint256) -func (_SystemConfig *SystemConfigSession) Overhead() (*big.Int, error) { - return _SystemConfig.Contract.Overhead(&_SystemConfig.CallOpts) -} - -// Overhead is a free data retrieval call binding the contract method 0x0c18c162. -// -// Solidity: function overhead() view returns(uint256) -func (_SystemConfig *SystemConfigCallerSession) Overhead() (*big.Int, error) { - return _SystemConfig.Contract.Overhead(&_SystemConfig.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_SystemConfig *SystemConfigCaller) Owner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "owner") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_SystemConfig *SystemConfigSession) Owner() (common.Address, error) { - return _SystemConfig.Contract.Owner(&_SystemConfig.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_SystemConfig *SystemConfigCallerSession) Owner() (common.Address, error) { - return _SystemConfig.Contract.Owner(&_SystemConfig.CallOpts) -} - -// ResourceConfig is a free data retrieval call binding the contract method 0xcc731b02. -// -// Solidity: function resourceConfig() view returns((uint32,uint8,uint8,uint32,uint32,uint128)) -func (_SystemConfig *SystemConfigCaller) ResourceConfig(opts *bind.CallOpts) (ResourceMeteringResourceConfig, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "resourceConfig") - - if err != nil { - return *new(ResourceMeteringResourceConfig), err - } - - out0 := *abi.ConvertType(out[0], new(ResourceMeteringResourceConfig)).(*ResourceMeteringResourceConfig) - - return out0, err - -} - -// ResourceConfig is a free data retrieval call binding the contract method 0xcc731b02. -// -// Solidity: function resourceConfig() view returns((uint32,uint8,uint8,uint32,uint32,uint128)) -func (_SystemConfig *SystemConfigSession) ResourceConfig() (ResourceMeteringResourceConfig, error) { - return _SystemConfig.Contract.ResourceConfig(&_SystemConfig.CallOpts) -} - -// ResourceConfig is a free data retrieval call binding the contract method 0xcc731b02. -// -// Solidity: function resourceConfig() view returns((uint32,uint8,uint8,uint32,uint32,uint128)) -func (_SystemConfig *SystemConfigCallerSession) ResourceConfig() (ResourceMeteringResourceConfig, error) { - return _SystemConfig.Contract.ResourceConfig(&_SystemConfig.CallOpts) -} - -// Scalar is a free data retrieval call binding the contract method 0xf45e65d8. -// -// Solidity: function scalar() view returns(uint256) -func (_SystemConfig *SystemConfigCaller) Scalar(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "scalar") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// Scalar is a free data retrieval call binding the contract method 0xf45e65d8. -// -// Solidity: function scalar() view returns(uint256) -func (_SystemConfig *SystemConfigSession) Scalar() (*big.Int, error) { - return _SystemConfig.Contract.Scalar(&_SystemConfig.CallOpts) -} - -// Scalar is a free data retrieval call binding the contract method 0xf45e65d8. -// -// Solidity: function scalar() view returns(uint256) -func (_SystemConfig *SystemConfigCallerSession) Scalar() (*big.Int, error) { - return _SystemConfig.Contract.Scalar(&_SystemConfig.CallOpts) -} - -// StartBlock is a free data retrieval call binding the contract method 0x48cd4cb1. -// -// Solidity: function startBlock() view returns(uint256 startBlock_) -func (_SystemConfig *SystemConfigCaller) StartBlock(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "startBlock") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// StartBlock is a free data retrieval call binding the contract method 0x48cd4cb1. -// -// Solidity: function startBlock() view returns(uint256 startBlock_) -func (_SystemConfig *SystemConfigSession) StartBlock() (*big.Int, error) { - return _SystemConfig.Contract.StartBlock(&_SystemConfig.CallOpts) -} - -// StartBlock is a free data retrieval call binding the contract method 0x48cd4cb1. -// -// Solidity: function startBlock() view returns(uint256 startBlock_) -func (_SystemConfig *SystemConfigCallerSession) StartBlock() (*big.Int, error) { - return _SystemConfig.Contract.StartBlock(&_SystemConfig.CallOpts) -} - -// UnsafeBlockSigner is a free data retrieval call binding the contract method 0x1fd19ee1. -// -// Solidity: function unsafeBlockSigner() view returns(address addr_) -func (_SystemConfig *SystemConfigCaller) UnsafeBlockSigner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "unsafeBlockSigner") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// UnsafeBlockSigner is a free data retrieval call binding the contract method 0x1fd19ee1. -// -// Solidity: function unsafeBlockSigner() view returns(address addr_) -func (_SystemConfig *SystemConfigSession) UnsafeBlockSigner() (common.Address, error) { - return _SystemConfig.Contract.UnsafeBlockSigner(&_SystemConfig.CallOpts) -} - -// UnsafeBlockSigner is a free data retrieval call binding the contract method 0x1fd19ee1. -// -// Solidity: function unsafeBlockSigner() view returns(address addr_) -func (_SystemConfig *SystemConfigCallerSession) UnsafeBlockSigner() (common.Address, error) { - return _SystemConfig.Contract.UnsafeBlockSigner(&_SystemConfig.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_SystemConfig *SystemConfigCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_SystemConfig *SystemConfigSession) Version() (string, error) { - return _SystemConfig.Contract.Version(&_SystemConfig.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_SystemConfig *SystemConfigCallerSession) Version() (string, error) { - return _SystemConfig.Contract.Version(&_SystemConfig.CallOpts) -} - -// Initialize is a paid mutator transaction binding the contract method 0x4c1e843d. -// -// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address,address) _addresses) returns() -func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config ResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "initialize", _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses) -} - -// Initialize is a paid mutator transaction binding the contract method 0x4c1e843d. -// -// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address,address) _addresses) returns() -func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config ResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { - return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses) -} - -// Initialize is a paid mutator transaction binding the contract method 0x4c1e843d. -// -// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address,address) _addresses) returns() -func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config ResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { - return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_SystemConfig *SystemConfigTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "renounceOwnership") -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_SystemConfig *SystemConfigSession) RenounceOwnership() (*types.Transaction, error) { - return _SystemConfig.Contract.RenounceOwnership(&_SystemConfig.TransactOpts) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_SystemConfig *SystemConfigTransactorSession) RenounceOwnership() (*types.Transaction, error) { - return _SystemConfig.Contract.RenounceOwnership(&_SystemConfig.TransactOpts) -} - -// SetBatcherHash is a paid mutator transaction binding the contract method 0xc9b26f61. -// -// Solidity: function setBatcherHash(bytes32 _batcherHash) returns() -func (_SystemConfig *SystemConfigTransactor) SetBatcherHash(opts *bind.TransactOpts, _batcherHash [32]byte) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "setBatcherHash", _batcherHash) -} - -// SetBatcherHash is a paid mutator transaction binding the contract method 0xc9b26f61. -// -// Solidity: function setBatcherHash(bytes32 _batcherHash) returns() -func (_SystemConfig *SystemConfigSession) SetBatcherHash(_batcherHash [32]byte) (*types.Transaction, error) { - return _SystemConfig.Contract.SetBatcherHash(&_SystemConfig.TransactOpts, _batcherHash) -} - -// SetBatcherHash is a paid mutator transaction binding the contract method 0xc9b26f61. -// -// Solidity: function setBatcherHash(bytes32 _batcherHash) returns() -func (_SystemConfig *SystemConfigTransactorSession) SetBatcherHash(_batcherHash [32]byte) (*types.Transaction, error) { - return _SystemConfig.Contract.SetBatcherHash(&_SystemConfig.TransactOpts, _batcherHash) -} - -// SetGasConfig is a paid mutator transaction binding the contract method 0x935f029e. -// -// Solidity: function setGasConfig(uint256 _overhead, uint256 _scalar) returns() -func (_SystemConfig *SystemConfigTransactor) SetGasConfig(opts *bind.TransactOpts, _overhead *big.Int, _scalar *big.Int) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "setGasConfig", _overhead, _scalar) -} - -// SetGasConfig is a paid mutator transaction binding the contract method 0x935f029e. -// -// Solidity: function setGasConfig(uint256 _overhead, uint256 _scalar) returns() -func (_SystemConfig *SystemConfigSession) SetGasConfig(_overhead *big.Int, _scalar *big.Int) (*types.Transaction, error) { - return _SystemConfig.Contract.SetGasConfig(&_SystemConfig.TransactOpts, _overhead, _scalar) -} - -// SetGasConfig is a paid mutator transaction binding the contract method 0x935f029e. -// -// Solidity: function setGasConfig(uint256 _overhead, uint256 _scalar) returns() -func (_SystemConfig *SystemConfigTransactorSession) SetGasConfig(_overhead *big.Int, _scalar *big.Int) (*types.Transaction, error) { - return _SystemConfig.Contract.SetGasConfig(&_SystemConfig.TransactOpts, _overhead, _scalar) -} - -// SetGasLimit is a paid mutator transaction binding the contract method 0xb40a817c. -// -// Solidity: function setGasLimit(uint64 _gasLimit) returns() -func (_SystemConfig *SystemConfigTransactor) SetGasLimit(opts *bind.TransactOpts, _gasLimit uint64) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "setGasLimit", _gasLimit) -} - -// SetGasLimit is a paid mutator transaction binding the contract method 0xb40a817c. -// -// Solidity: function setGasLimit(uint64 _gasLimit) returns() -func (_SystemConfig *SystemConfigSession) SetGasLimit(_gasLimit uint64) (*types.Transaction, error) { - return _SystemConfig.Contract.SetGasLimit(&_SystemConfig.TransactOpts, _gasLimit) -} - -// SetGasLimit is a paid mutator transaction binding the contract method 0xb40a817c. -// -// Solidity: function setGasLimit(uint64 _gasLimit) returns() -func (_SystemConfig *SystemConfigTransactorSession) SetGasLimit(_gasLimit uint64) (*types.Transaction, error) { - return _SystemConfig.Contract.SetGasLimit(&_SystemConfig.TransactOpts, _gasLimit) -} - -// SetResourceConfig is a paid mutator transaction binding the contract method 0xc71973f6. -// -// Solidity: function setResourceConfig((uint32,uint8,uint8,uint32,uint32,uint128) _config) returns() -func (_SystemConfig *SystemConfigTransactor) SetResourceConfig(opts *bind.TransactOpts, _config ResourceMeteringResourceConfig) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "setResourceConfig", _config) -} - -// SetResourceConfig is a paid mutator transaction binding the contract method 0xc71973f6. -// -// Solidity: function setResourceConfig((uint32,uint8,uint8,uint32,uint32,uint128) _config) returns() -func (_SystemConfig *SystemConfigSession) SetResourceConfig(_config ResourceMeteringResourceConfig) (*types.Transaction, error) { - return _SystemConfig.Contract.SetResourceConfig(&_SystemConfig.TransactOpts, _config) -} - -// SetResourceConfig is a paid mutator transaction binding the contract method 0xc71973f6. -// -// Solidity: function setResourceConfig((uint32,uint8,uint8,uint32,uint32,uint128) _config) returns() -func (_SystemConfig *SystemConfigTransactorSession) SetResourceConfig(_config ResourceMeteringResourceConfig) (*types.Transaction, error) { - return _SystemConfig.Contract.SetResourceConfig(&_SystemConfig.TransactOpts, _config) -} - -// SetUnsafeBlockSigner is a paid mutator transaction binding the contract method 0x18d13918. -// -// Solidity: function setUnsafeBlockSigner(address _unsafeBlockSigner) returns() -func (_SystemConfig *SystemConfigTransactor) SetUnsafeBlockSigner(opts *bind.TransactOpts, _unsafeBlockSigner common.Address) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "setUnsafeBlockSigner", _unsafeBlockSigner) -} - -// SetUnsafeBlockSigner is a paid mutator transaction binding the contract method 0x18d13918. -// -// Solidity: function setUnsafeBlockSigner(address _unsafeBlockSigner) returns() -func (_SystemConfig *SystemConfigSession) SetUnsafeBlockSigner(_unsafeBlockSigner common.Address) (*types.Transaction, error) { - return _SystemConfig.Contract.SetUnsafeBlockSigner(&_SystemConfig.TransactOpts, _unsafeBlockSigner) -} - -// SetUnsafeBlockSigner is a paid mutator transaction binding the contract method 0x18d13918. -// -// Solidity: function setUnsafeBlockSigner(address _unsafeBlockSigner) returns() -func (_SystemConfig *SystemConfigTransactorSession) SetUnsafeBlockSigner(_unsafeBlockSigner common.Address) (*types.Transaction, error) { - return _SystemConfig.Contract.SetUnsafeBlockSigner(&_SystemConfig.TransactOpts, _unsafeBlockSigner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_SystemConfig *SystemConfigTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "transferOwnership", newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_SystemConfig *SystemConfigSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _SystemConfig.Contract.TransferOwnership(&_SystemConfig.TransactOpts, newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_SystemConfig *SystemConfigTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _SystemConfig.Contract.TransferOwnership(&_SystemConfig.TransactOpts, newOwner) -} - -// SystemConfigConfigUpdateIterator is returned from FilterConfigUpdate and is used to iterate over the raw logs and unpacked data for ConfigUpdate events raised by the SystemConfig contract. -type SystemConfigConfigUpdateIterator struct { - Event *SystemConfigConfigUpdate // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *SystemConfigConfigUpdateIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(SystemConfigConfigUpdate) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(SystemConfigConfigUpdate) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *SystemConfigConfigUpdateIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *SystemConfigConfigUpdateIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// SystemConfigConfigUpdate represents a ConfigUpdate event raised by the SystemConfig contract. -type SystemConfigConfigUpdate struct { - Version *big.Int - UpdateType uint8 - Data []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterConfigUpdate is a free log retrieval operation binding the contract event 0x1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be. -// -// Solidity: event ConfigUpdate(uint256 indexed version, uint8 indexed updateType, bytes data) -func (_SystemConfig *SystemConfigFilterer) FilterConfigUpdate(opts *bind.FilterOpts, version []*big.Int, updateType []uint8) (*SystemConfigConfigUpdateIterator, error) { - - var versionRule []interface{} - for _, versionItem := range version { - versionRule = append(versionRule, versionItem) - } - var updateTypeRule []interface{} - for _, updateTypeItem := range updateType { - updateTypeRule = append(updateTypeRule, updateTypeItem) - } - - logs, sub, err := _SystemConfig.contract.FilterLogs(opts, "ConfigUpdate", versionRule, updateTypeRule) - if err != nil { - return nil, err - } - return &SystemConfigConfigUpdateIterator{contract: _SystemConfig.contract, event: "ConfigUpdate", logs: logs, sub: sub}, nil -} - -// WatchConfigUpdate is a free log subscription operation binding the contract event 0x1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be. -// -// Solidity: event ConfigUpdate(uint256 indexed version, uint8 indexed updateType, bytes data) -func (_SystemConfig *SystemConfigFilterer) WatchConfigUpdate(opts *bind.WatchOpts, sink chan<- *SystemConfigConfigUpdate, version []*big.Int, updateType []uint8) (event.Subscription, error) { - - var versionRule []interface{} - for _, versionItem := range version { - versionRule = append(versionRule, versionItem) - } - var updateTypeRule []interface{} - for _, updateTypeItem := range updateType { - updateTypeRule = append(updateTypeRule, updateTypeItem) - } - - logs, sub, err := _SystemConfig.contract.WatchLogs(opts, "ConfigUpdate", versionRule, updateTypeRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(SystemConfigConfigUpdate) - if err := _SystemConfig.contract.UnpackLog(event, "ConfigUpdate", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseConfigUpdate is a log parse operation binding the contract event 0x1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be. -// -// Solidity: event ConfigUpdate(uint256 indexed version, uint8 indexed updateType, bytes data) -func (_SystemConfig *SystemConfigFilterer) ParseConfigUpdate(log types.Log) (*SystemConfigConfigUpdate, error) { - event := new(SystemConfigConfigUpdate) - if err := _SystemConfig.contract.UnpackLog(event, "ConfigUpdate", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// SystemConfigInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the SystemConfig contract. -type SystemConfigInitializedIterator struct { - Event *SystemConfigInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *SystemConfigInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(SystemConfigInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(SystemConfigInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *SystemConfigInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *SystemConfigInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// SystemConfigInitialized represents a Initialized event raised by the SystemConfig contract. -type SystemConfigInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_SystemConfig *SystemConfigFilterer) FilterInitialized(opts *bind.FilterOpts) (*SystemConfigInitializedIterator, error) { - - logs, sub, err := _SystemConfig.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &SystemConfigInitializedIterator{contract: _SystemConfig.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_SystemConfig *SystemConfigFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *SystemConfigInitialized) (event.Subscription, error) { - - logs, sub, err := _SystemConfig.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(SystemConfigInitialized) - if err := _SystemConfig.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_SystemConfig *SystemConfigFilterer) ParseInitialized(log types.Log) (*SystemConfigInitialized, error) { - event := new(SystemConfigInitialized) - if err := _SystemConfig.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// SystemConfigOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the SystemConfig contract. -type SystemConfigOwnershipTransferredIterator struct { - Event *SystemConfigOwnershipTransferred // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *SystemConfigOwnershipTransferredIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(SystemConfigOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(SystemConfigOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *SystemConfigOwnershipTransferredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *SystemConfigOwnershipTransferredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// SystemConfigOwnershipTransferred represents a OwnershipTransferred event raised by the SystemConfig contract. -type SystemConfigOwnershipTransferred struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_SystemConfig *SystemConfigFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*SystemConfigOwnershipTransferredIterator, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _SystemConfig.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return &SystemConfigOwnershipTransferredIterator{contract: _SystemConfig.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil -} - -// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_SystemConfig *SystemConfigFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *SystemConfigOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _SystemConfig.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(SystemConfigOwnershipTransferred) - if err := _SystemConfig.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_SystemConfig *SystemConfigFilterer) ParseOwnershipTransferred(log types.Log) (*SystemConfigOwnershipTransferred, error) { - event := new(SystemConfigOwnershipTransferred) - if err := _SystemConfig.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/op-chain-ops/upgrades/check.go b/op-chain-ops/upgrades/check.go deleted file mode 100644 index c773df18d5d6..000000000000 --- a/op-chain-ops/upgrades/check.go +++ /dev/null @@ -1,138 +0,0 @@ -package upgrades - -import ( - "context" - "fmt" - "strings" - - "github.com/ethereum-optimism/optimism/op-chain-ops/genesis" - "github.com/ethereum-optimism/optimism/op-chain-ops/upgrades/bindings" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - - "github.com/ethereum-optimism/superchain-registry/superchain" -) - -var ( - // The default values for the ResourceConfig, used as part of - // an EIP-1559 curve for deposit gas. - DefaultResourceConfig = bindings.ResourceMeteringResourceConfig{ - MaxResourceLimit: genesis.MaxResourceLimit, - ElasticityMultiplier: genesis.ElasticityMultiplier, - BaseFeeMaxChangeDenominator: genesis.BaseFeeMaxChangeDenominator, - MinimumBaseFee: genesis.MinimumBaseFee, - SystemTxMaxGas: genesis.SystemTxMaxGas, - MaximumBaseFee: genesis.MaximumBaseFee, - } -) - -// CheckL1 will check that the versions of the contracts on L1 match the versions -// in the superchain registry. -func CheckL1(ctx context.Context, list *superchain.ImplementationList, backend bind.ContractBackend) error { - if err := CheckVersionedContract(ctx, list.L1CrossDomainMessenger, backend); err != nil { - return fmt.Errorf("L1CrossDomainMessenger: %w", err) - } - if err := CheckVersionedContract(ctx, list.L1ERC721Bridge, backend); err != nil { - return fmt.Errorf("L1ERC721Bridge: %w", err) - } - if err := CheckVersionedContract(ctx, list.L1StandardBridge, backend); err != nil { - return fmt.Errorf("L1StandardBridge: %w", err) - } - if err := CheckVersionedContract(ctx, list.L2OutputOracle, backend); err != nil { - return fmt.Errorf("L2OutputOracle: %w", err) - } - if err := CheckVersionedContract(ctx, list.OptimismMintableERC20Factory, backend); err != nil { - return fmt.Errorf("OptimismMintableERC20Factory: %w", err) - } - if err := CheckVersionedContract(ctx, list.OptimismPortal, backend); err != nil { - return fmt.Errorf("OptimismPortal: %w", err) - } - if err := CheckVersionedContract(ctx, list.SystemConfig, backend); err != nil { - return fmt.Errorf("SystemConfig: %w", err) - } - return nil -} - -// CheckVersionedContract will check that the version of the deployed contract matches -// the artifact in the superchain registry. -func CheckVersionedContract(ctx context.Context, contract superchain.VersionedContract, backend bind.ContractBackend) error { - addr := common.Address(contract.Address) - code, err := backend.CodeAt(ctx, addr, nil) - if err != nil { - return err - } - if len(code) == 0 { - return fmt.Errorf("no code at %s", addr) - } - version, err := getVersion(ctx, addr, backend) - if err != nil { - return err - } - if !cmpVersion(version, contract.Version) { - return fmt.Errorf("version mismatch: expected %s, got %s", contract.Version, version) - } - return nil -} - -// getContractVersions will fetch the versions of all of the contracts. -func GetContractVersions(ctx context.Context, addresses *superchain.AddressList, chainConfig *superchain.ChainConfig, backend bind.ContractBackend) (superchain.ContractVersions, error) { - var versions superchain.ContractVersions - var err error - - versions.L1CrossDomainMessenger, err = getVersion(ctx, common.Address(addresses.L1CrossDomainMessengerProxy), backend) - if err != nil { - return versions, fmt.Errorf("L1CrossDomainMessenger: %w", err) - } - versions.L1ERC721Bridge, err = getVersion(ctx, common.Address(addresses.L1ERC721BridgeProxy), backend) - if err != nil { - return versions, fmt.Errorf("L1ERC721Bridge: %w", err) - } - versions.L1StandardBridge, err = getVersion(ctx, common.Address(addresses.L1StandardBridgeProxy), backend) - if err != nil { - return versions, fmt.Errorf("L1StandardBridge: %w", err) - } - versions.L2OutputOracle, err = getVersion(ctx, common.Address(addresses.L2OutputOracleProxy), backend) - if err != nil { - return versions, fmt.Errorf("L2OutputOracle: %w", err) - } - versions.OptimismMintableERC20Factory, err = getVersion(ctx, common.Address(addresses.OptimismMintableERC20FactoryProxy), backend) - if err != nil { - return versions, fmt.Errorf("OptimismMintableERC20Factory: %w", err) - } - versions.OptimismPortal, err = getVersion(ctx, common.Address(addresses.OptimismPortalProxy), backend) - if err != nil { - return versions, fmt.Errorf("OptimismPortal: %w", err) - } - versions.SystemConfig, err = getVersion(ctx, common.Address(addresses.SystemConfigProxy), backend) - if err != nil { - return versions, fmt.Errorf("SystemConfig: %w", err) - } - return versions, err -} - -// getVersion will get the version of a contract at a given address. -func getVersion(ctx context.Context, addr common.Address, backend bind.ContractBackend) (string, error) { - isemver, err := bindings.NewISemver(addr, backend) - if err != nil { - return "", fmt.Errorf("%s: %w", addr, err) - } - version, err := isemver.Version(&bind.CallOpts{ - Context: ctx, - }) - if err != nil { - return "", fmt.Errorf("%s: %w", addr, err) - } - return version, nil -} - -// cmpVersion will compare 2 semver strings, accounting for -// lack of "v" prefix. -func cmpVersion(v1, v2 string) bool { - if !strings.HasPrefix(v1, "v") { - v1 = "v" + v1 - } - if !strings.HasPrefix(v2, "v") { - v2 = "v" + v2 - } - return v1 == v2 -} diff --git a/op-chain-ops/upgrades/doc.go b/op-chain-ops/upgrades/doc.go deleted file mode 100644 index 571c450e2e10..000000000000 --- a/op-chain-ops/upgrades/doc.go +++ /dev/null @@ -1,7 +0,0 @@ -// Package upgrades contains upgrade related tooling. -// -// JSON files that follow the Safe UI batch call format -// can be generated using this package. A bindings subpackage -// exists to decouple versioning of bindings with other packages. -// A just recipe exists to easily regenerate the bindings. -package upgrades diff --git a/op-chain-ops/upgrades/l1.go b/op-chain-ops/upgrades/l1.go deleted file mode 100644 index 2f5e638113be..000000000000 --- a/op-chain-ops/upgrades/l1.go +++ /dev/null @@ -1,781 +0,0 @@ -package upgrades - -import ( - "errors" - "fmt" - "math/big" - "os" - "strconv" - - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - - "github.com/ethereum-optimism/optimism/op-chain-ops/genesis" - "github.com/ethereum-optimism/optimism/op-chain-ops/safe" - "github.com/ethereum-optimism/optimism/op-chain-ops/upgrades/bindings" - "github.com/ethereum-optimism/optimism/op-service/predeploys" - - "github.com/ethereum-optimism/superchain-registry/superchain" -) - -const ( - // upgradeAndCall represents the signature of the upgradeAndCall function - // on the ProxyAdmin contract. - upgradeAndCall = "upgradeAndCall(address,address,bytes)" - - method = "setBytes32" -) - -var ( - // storageSetterAddr represents the address of the StorageSetter contract. - storageSetterAddr = common.HexToAddress("0xd81f43eDBCAcb4c29a9bA38a13Ee5d79278270cC") -) - -// L1 will add calls for upgrading each of the L1 contracts. -func L1(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig, superchainConfig *superchain.Superchain, backend bind.ContractBackend) error { - if err := L1CrossDomainMessenger(batch, implementations, list, config, chainConfig, superchainConfig, backend); err != nil { - return fmt.Errorf("upgrading L1CrossDomainMessenger: %w", err) - } - if err := L1ERC721Bridge(batch, implementations, list, config, chainConfig, superchainConfig, backend); err != nil { - return fmt.Errorf("upgrading L1ERC721Bridge: %w", err) - } - if err := L1StandardBridge(batch, implementations, list, config, chainConfig, superchainConfig, backend); err != nil { - return fmt.Errorf("upgrading L1StandardBridge: %w", err) - } - if err := L2OutputOracle(batch, implementations, list, config, chainConfig, superchainConfig, backend); err != nil { - return fmt.Errorf("upgrading L2OutputOracle: %w", err) - } - if err := OptimismMintableERC20Factory(batch, implementations, list, config, chainConfig, superchainConfig, backend); err != nil { - return fmt.Errorf("upgrading OptimismMintableERC20Factory: %w", err) - } - if err := OptimismPortal(batch, implementations, list, config, chainConfig, superchainConfig, backend); err != nil { - return fmt.Errorf("upgrading OptimismPortal: %w", err) - } - if err := SystemConfig(batch, implementations, list, config, chainConfig, superchainConfig, backend); err != nil { - return fmt.Errorf("upgrading SystemConfig: %w", err) - } - return nil -} - -// L1CrossDomainMessenger will add a call to the batch that upgrades the L1CrossDomainMessenger. -func L1CrossDomainMessenger(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig, superchainConfig *superchain.Superchain, backend bind.ContractBackend) error { - proxyAdminABI, err := bindings.ProxyAdminMetaData.GetAbi() - if err != nil { - return err - } - - // 2 Step Upgrade - { - storageSetterABI, err := bindings.StorageSetterMetaData.GetAbi() - if err != nil { - return err - } - - input := []bindings.StorageSetterSlot{ - // https://github.com/ethereum-optimism/optimism/blob/86a96023ffd04d119296dff095d02fff79fa15de/packages/contracts-bedrock/.storage-layout#L11-L13 - { - Key: common.Hash{}, - Value: common.Hash{}, - }, - } - - calldata, err := storageSetterABI.Pack(method, input) - if err != nil { - return err - } - args := []any{ - common.Address(list.L1CrossDomainMessengerProxy), - storageSetterAddr, - calldata, - } - proxyAdmin := common.Address(list.ProxyAdmin) - if err := batch.AddCall(proxyAdmin, common.Big0, upgradeAndCall, args, proxyAdminABI); err != nil { - return err - } - } - - l1CrossDomainMessengerABI, err := bindings.L1CrossDomainMessengerMetaData.GetAbi() - if err != nil { - return err - } - - l1CrossDomainMessenger, err := bindings.NewL1CrossDomainMessengerCaller(common.Address(list.L1CrossDomainMessengerProxy), backend) - if err != nil { - return err - } - optimismPortal, err := l1CrossDomainMessenger.PORTAL(&bind.CallOpts{}) - if err != nil { - return err - } - otherMessenger, err := l1CrossDomainMessenger.OTHERMESSENGER(&bind.CallOpts{}) - if err != nil { - return err - } - - if optimismPortal != common.Address(list.OptimismPortalProxy) { - return fmt.Errorf("Portal address doesn't match config") - } - - if otherMessenger != predeploys.L2CrossDomainMessengerAddr { - return fmt.Errorf("OtherMessenger address doesn't match config") - } - - calldata, err := l1CrossDomainMessengerABI.Pack("initialize", common.Address(*superchainConfig.Config.SuperchainConfigAddr), optimismPortal) - if err != nil { - return err - } - - args := []any{ - common.Address(list.L1CrossDomainMessengerProxy), - common.Address(implementations.L1CrossDomainMessenger.Address), - calldata, - } - - proxyAdmin := common.Address(list.ProxyAdmin) - if err := batch.AddCall(proxyAdmin, common.Big0, upgradeAndCall, args, proxyAdminABI); err != nil { - return err - } - - return nil -} - -// L1ERC721Bridge will add a call to the batch that upgrades the L1ERC721Bridge. -func L1ERC721Bridge(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig, superchainConfig *superchain.Superchain, backend bind.ContractBackend) error { - proxyAdminABI, err := bindings.ProxyAdminMetaData.GetAbi() - if err != nil { - return err - } - - // 2 Step Upgrade - { - storageSetterABI, err := bindings.StorageSetterMetaData.GetAbi() - if err != nil { - return err - } - - input := []bindings.StorageSetterSlot{ - // https://github.com/ethereum-optimism/optimism/blob/86a96023ffd04d119296dff095d02fff79fa15de/packages/contracts-bedrock/.storage-layout#L100-L102 - { - Key: common.Hash{}, - Value: common.Hash{}, - }, - } - - calldata, err := storageSetterABI.Pack(method, input) - if err != nil { - return fmt.Errorf("setBytes32: %w", err) - } - args := []any{ - common.Address(list.L1ERC721BridgeProxy), - storageSetterAddr, - calldata, - } - proxyAdmin := common.Address(list.ProxyAdmin) - if err := batch.AddCall(proxyAdmin, common.Big0, upgradeAndCall, args, proxyAdminABI); err != nil { - return err - } - } - - l1ERC721BridgeABI, err := bindings.L1ERC721BridgeMetaData.GetAbi() - if err != nil { - return err - } - - l1ERC721Bridge, err := bindings.NewL1ERC721BridgeCaller(common.Address(list.L1ERC721BridgeProxy), backend) - if err != nil { - return err - } - messenger, err := l1ERC721Bridge.Messenger(&bind.CallOpts{}) - if err != nil { - return err - } - otherBridge, err := l1ERC721Bridge.OtherBridge(&bind.CallOpts{}) - if err != nil { - return err - } - - if messenger != common.Address(list.L1CrossDomainMessengerProxy) { - return fmt.Errorf("Messenger address doesn't match config") - } - - if otherBridge != predeploys.L2ERC721BridgeAddr { - return fmt.Errorf("OtherBridge address doesn't match config") - } - - calldata, err := l1ERC721BridgeABI.Pack("initialize", messenger, common.Address(*(superchainConfig.Config.SuperchainConfigAddr))) - if err != nil { - return err - } - - args := []any{ - common.Address(list.L1ERC721BridgeProxy), - common.Address(implementations.L1ERC721Bridge.Address), - calldata, - } - - proxyAdmin := common.Address(list.ProxyAdmin) - if err := batch.AddCall(proxyAdmin, common.Big0, upgradeAndCall, args, proxyAdminABI); err != nil { - return err - } - - return nil -} - -// L1StandardBridge will add a call to the batch that upgrades the L1StandardBridge. -func L1StandardBridge(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig, superchainConfig *superchain.Superchain, backend bind.ContractBackend) error { - proxyAdminABI, err := bindings.ProxyAdminMetaData.GetAbi() - if err != nil { - return err - } - - // 2 Step Upgrade - { - storageSetterABI, err := bindings.StorageSetterMetaData.GetAbi() - if err != nil { - return err - } - - input := []bindings.StorageSetterSlot{ - // https://github.com/ethereum-optimism/optimism/blob/86a96023ffd04d119296dff095d02fff79fa15de/packages/contracts-bedrock/.storage-layout#L36-L37 - { - Key: common.Hash{}, - Value: common.Hash{}, - }, - } - - calldata, err := storageSetterABI.Pack(method, input) - if err != nil { - return err - } - args := []any{ - common.Address(list.L1StandardBridgeProxy), - storageSetterAddr, - calldata, - } - proxyAdmin := common.Address(list.ProxyAdmin) - if err := batch.AddCall(proxyAdmin, common.Big0, upgradeAndCall, args, proxyAdminABI); err != nil { - return err - } - } - - l1StandardBridgeABI, err := bindings.L1StandardBridgeMetaData.GetAbi() - if err != nil { - return err - } - - l1StandardBridge, err := bindings.NewL1StandardBridgeCaller(common.Address(list.L1StandardBridgeProxy), backend) - if err != nil { - return err - } - - messenger, err := l1StandardBridge.MESSENGER(&bind.CallOpts{}) - if err != nil { - return err - } - - otherBridge, err := l1StandardBridge.OTHERBRIDGE(&bind.CallOpts{}) - if err != nil { - return err - } - - if messenger != common.Address(list.L1CrossDomainMessengerProxy) { - return fmt.Errorf("Messenger address doesn't match config") - } - - if otherBridge != predeploys.L2StandardBridgeAddr { - return fmt.Errorf("OtherBridge address doesn't match config") - } - - calldata, err := l1StandardBridgeABI.Pack("initialize", messenger, common.Address(*(superchainConfig.Config.SuperchainConfigAddr))) - if err != nil { - return err - } - - args := []any{ - common.Address(list.L1StandardBridgeProxy), - common.Address(implementations.L1StandardBridge.Address), - calldata, - } - - proxyAdmin := common.Address(list.ProxyAdmin) - if err := batch.AddCall(proxyAdmin, common.Big0, upgradeAndCall, args, proxyAdminABI); err != nil { - return err - } - - return nil -} - -// L2OutputOracle will add a call to the batch that upgrades the L2OutputOracle. -func L2OutputOracle(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig, superchainConfig *superchain.Superchain, backend bind.ContractBackend) error { - proxyAdminABI, err := bindings.ProxyAdminMetaData.GetAbi() - if err != nil { - return err - } - - // 2 Step Upgrade - { - storageSetterABI, err := bindings.StorageSetterMetaData.GetAbi() - if err != nil { - return err - } - - input := []bindings.StorageSetterSlot{ - // https://github.com/ethereum-optimism/optimism/blob/86a96023ffd04d119296dff095d02fff79fa15de/packages/contracts-bedrock/.storage-layout#L50-L51 - { - Key: common.Hash{}, - Value: common.Hash{}, - }, - } - - calldata, err := storageSetterABI.Pack(method, input) - if err != nil { - return err - } - args := []any{ - common.Address(list.L2OutputOracleProxy), - storageSetterAddr, - calldata, - } - proxyAdmin := common.Address(list.ProxyAdmin) - if err := batch.AddCall(proxyAdmin, common.Big0, upgradeAndCall, args, proxyAdminABI); err != nil { - return err - } - } - - l2OutputOracleABI, err := bindings.L2OutputOracleMetaData.GetAbi() - if err != nil { - return err - } - - l2OutputOracle, err := bindings.NewL2OutputOracleCaller(common.Address(list.L2OutputOracleProxy), backend) - if err != nil { - return err - } - - l2OutputOracleSubmissionInterval, err := l2OutputOracle.SUBMISSIONINTERVAL(&bind.CallOpts{}) - if err != nil { - return err - } - - l2BlockTime, err := l2OutputOracle.L2BLOCKTIME(&bind.CallOpts{}) - if err != nil { - return err - } - - l2OutputOracleStartingBlockNumber, err := l2OutputOracle.StartingBlockNumber(&bind.CallOpts{}) - if err != nil { - return err - } - - l2OutputOracleStartingTimestamp, err := l2OutputOracle.StartingTimestamp(&bind.CallOpts{}) - if err != nil { - return err - } - - l2OutputOracleProposer, err := l2OutputOracle.PROPOSER(&bind.CallOpts{}) - if err != nil { - return err - } - - l2OutputOracleChallenger, err := l2OutputOracle.CHALLENGER(&bind.CallOpts{}) - if err != nil { - return err - } - - finalizationPeriodSeconds, err := l2OutputOracle.FINALIZATIONPERIODSECONDS(&bind.CallOpts{}) - if err != nil { - return err - } - - if config != nil { - if l2OutputOracleSubmissionInterval.Uint64() != config.L2OutputOracleSubmissionInterval { - return fmt.Errorf("L2OutputOracleSubmissionInterval address doesn't match config") - } - - if l2BlockTime.Uint64() != config.L2BlockTime { - return fmt.Errorf("L2BlockTime address doesn't match config") - } - - if l2OutputOracleStartingBlockNumber.Uint64() != config.L2OutputOracleStartingBlockNumber { - return fmt.Errorf("L2OutputOracleStartingBlockNumber address doesn't match config") - } - - if config.L2OutputOracleStartingTimestamp < 0 { - return fmt.Errorf("L2OutputOracleStartingTimestamp must be concrete") - } - - if int(l2OutputOracleStartingTimestamp.Int64()) != config.L2OutputOracleStartingTimestamp { - return fmt.Errorf("L2OutputOracleStartingTimestamp address doesn't match config") - } - - if l2OutputOracleProposer != config.L2OutputOracleProposer { - return fmt.Errorf("L2OutputOracleProposer address doesn't match config") - } - - if l2OutputOracleChallenger != config.L2OutputOracleChallenger { - return fmt.Errorf("L2OutputOracleChallenger address doesn't match config") - } - - if finalizationPeriodSeconds.Uint64() != config.FinalizationPeriodSeconds { - return fmt.Errorf("FinalizationPeriodSeconds address doesn't match config") - } - } - - calldata, err := l2OutputOracleABI.Pack( - "initialize", - l2OutputOracleSubmissionInterval, - l2BlockTime, - l2OutputOracleStartingBlockNumber, - l2OutputOracleStartingTimestamp, - l2OutputOracleProposer, - l2OutputOracleChallenger, - finalizationPeriodSeconds, - ) - if err != nil { - return err - } - - args := []any{ - common.Address(list.L2OutputOracleProxy), - common.Address(implementations.L2OutputOracle.Address), - calldata, - } - - proxyAdmin := common.Address(list.ProxyAdmin) - if err := batch.AddCall(proxyAdmin, common.Big0, upgradeAndCall, args, proxyAdminABI); err != nil { - return err - } - - return nil -} - -// OptimismMintableERC20Factory will add a call to the batch that upgrades the OptimismMintableERC20Factory. -func OptimismMintableERC20Factory(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig, superchainConfig *superchain.Superchain, backend bind.ContractBackend) error { - proxyAdminABI, err := bindings.ProxyAdminMetaData.GetAbi() - if err != nil { - return err - } - - // 2 Step Upgrade - { - storageSetterABI, err := bindings.StorageSetterMetaData.GetAbi() - if err != nil { - return err - } - - input := []bindings.StorageSetterSlot{ - // https://github.com/ethereum-optimism/optimism/blob/86a96023ffd04d119296dff095d02fff79fa15de/packages/contracts-bedrock/.storage-layout#L287-L289 - { - Key: common.Hash{}, - Value: common.Hash{}, - }, - } - - calldata, err := storageSetterABI.Pack(method, input) - if err != nil { - return err - } - args := []any{ - common.Address(list.OptimismMintableERC20FactoryProxy), - storageSetterAddr, - calldata, - } - proxyAdmin := common.Address(list.ProxyAdmin) - if err := batch.AddCall(proxyAdmin, common.Big0, upgradeAndCall, args, proxyAdminABI); err != nil { - return err - } - } - - optimismMintableERC20FactoryABI, err := bindings.OptimismMintableERC20FactoryMetaData.GetAbi() - if err != nil { - return err - } - - optimismMintableERC20Factory, err := bindings.NewOptimismMintableERC20FactoryCaller(common.Address(list.OptimismMintableERC20FactoryProxy), backend) - if err != nil { - return err - } - - bridge, err := optimismMintableERC20Factory.BRIDGE(&bind.CallOpts{}) - if err != nil { - return err - } - - if bridge != common.Address(list.L1StandardBridgeProxy) { - return fmt.Errorf("Bridge address doesn't match config") - } - - calldata, err := optimismMintableERC20FactoryABI.Pack("initialize", bridge) - if err != nil { - return err - } - - args := []any{ - common.Address(list.OptimismMintableERC20FactoryProxy), - common.Address(implementations.OptimismMintableERC20Factory.Address), - calldata, - } - - proxyAdmin := common.Address(list.ProxyAdmin) - if err := batch.AddCall(proxyAdmin, common.Big0, upgradeAndCall, args, proxyAdminABI); err != nil { - return err - } - - return nil -} - -// OptimismPortal will add a call to the batch that upgrades the OptimismPortal. -func OptimismPortal(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig, superchainConfig *superchain.Superchain, backend bind.ContractBackend) error { - proxyAdminABI, err := bindings.ProxyAdminMetaData.GetAbi() - if err != nil { - return err - } - - // 2 Step Upgrade - { - storageSetterABI, err := bindings.StorageSetterMetaData.GetAbi() - if err != nil { - return err - } - - input := []bindings.StorageSetterSlot{ - // https://github.com/ethereum-optimism/optimism/blob/86a96023ffd04d119296dff095d02fff79fa15de/packages/contracts-bedrock/.storage-layout#L64-L65 - { - Key: common.Hash{}, - Value: common.Hash{}, - }, - } - - calldata, err := storageSetterABI.Pack(method, input) - if err != nil { - return err - } - args := []any{ - common.Address(list.OptimismPortalProxy), - storageSetterAddr, - calldata, - } - proxyAdmin := common.Address(list.ProxyAdmin) - if err := batch.AddCall(proxyAdmin, common.Big0, upgradeAndCall, args, proxyAdminABI); err != nil { - return err - } - } - - optimismPortalABI, err := bindings.OptimismPortalMetaData.GetAbi() - if err != nil { - return err - } - - optimismPortal, err := bindings.NewOptimismPortalCaller(common.Address(list.OptimismPortalProxy), backend) - if err != nil { - return err - } - l2OutputOracle, err := optimismPortal.L2Oracle(&bind.CallOpts{}) - if err != nil { - return err - } - systemConfig, err := optimismPortal.SystemConfig(&bind.CallOpts{}) - if err != nil { - return err - } - - if l2OutputOracle != common.Address(list.L2OutputOracleProxy) { - return fmt.Errorf("L2OutputOracle address doesn't match config") - } - - if systemConfig != common.Address(list.SystemConfigProxy) { - return fmt.Errorf("SystemConfig address doesn't match config") - } - - calldata, err := optimismPortalABI.Pack("initialize", l2OutputOracle, systemConfig, common.Address(*superchainConfig.Config.SuperchainConfigAddr)) - if err != nil { - return err - } - - args := []any{ - common.Address(list.OptimismPortalProxy), - common.Address(implementations.OptimismPortal.Address), - calldata, - } - - proxyAdmin := common.Address(list.ProxyAdmin) - if err := batch.AddCall(proxyAdmin, common.Big0, upgradeAndCall, args, proxyAdminABI); err != nil { - return err - } - - return nil -} - -// SystemConfig will add a call to the batch that upgrades the SystemConfig. -func SystemConfig(batch *safe.Batch, implementations superchain.ImplementationList, list superchain.AddressList, config *genesis.DeployConfig, chainConfig *superchain.ChainConfig, superchainConfig *superchain.Superchain, backend bind.ContractBackend) error { - proxyAdminABI, err := bindings.ProxyAdminMetaData.GetAbi() - if err != nil { - return err - } - - // 2 Step Upgrade - { - storageSetterABI, err := bindings.StorageSetterMetaData.GetAbi() - if err != nil { - return err - } - - var startBlock common.Hash - if config != nil { - startBlock = common.BigToHash(new(big.Int).SetUint64(config.SystemConfigStartBlock)) - } else { - val, err := strconv.ParseUint(os.Getenv("SYSTEM_CONFIG_START_BLOCK"), 10, 64) - if err != nil { - return err - } - startBlock = common.BigToHash(new(big.Int).SetUint64(val)) - } - - input := []bindings.StorageSetterSlot{ - // https://github.com/ethereum-optimism/optimism/blob/86a96023ffd04d119296dff095d02fff79fa15de/packages/contracts-bedrock/.storage-layout#L82-L83 - { - Key: common.Hash{}, - Value: common.Hash{}, - }, - // bytes32 public constant START_BLOCK_SLOT = bytes32(uint256(keccak256("systemconfig.startBlock")) - 1); - { - Key: common.HexToHash("0xa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb19f"), - Value: startBlock, - }, - } - - calldata, err := storageSetterABI.Pack(method, input) - if err != nil { - return err - } - args := []any{ - common.Address(list.SystemConfigProxy), - storageSetterAddr, - calldata, - } - proxyAdmin := common.Address(list.ProxyAdmin) - if err := batch.AddCall(proxyAdmin, common.Big0, upgradeAndCall, args, proxyAdminABI); err != nil { - return err - } - } - - systemConfigABI, err := bindings.SystemConfigMetaData.GetAbi() - if err != nil { - return err - } - - systemConfig, err := bindings.NewSystemConfigCaller(common.Address(list.SystemConfigProxy), backend) - if err != nil { - return err - } - - gasPriceOracleOverhead, err := systemConfig.Overhead(&bind.CallOpts{}) - if err != nil { - return err - } - - gasPriceOracleScalar, err := systemConfig.Scalar(&bind.CallOpts{}) - if err != nil { - return err - } - - batcherHash, err := systemConfig.BatcherHash(&bind.CallOpts{}) - if err != nil { - return err - } - - l2GenesisBlockGasLimit, err := systemConfig.GasLimit(&bind.CallOpts{}) - if err != nil { - return err - } - - p2pSequencerAddress, err := systemConfig.UnsafeBlockSigner(&bind.CallOpts{}) - if err != nil { - return err - } - - finalSystemOwner, err := systemConfig.Owner(&bind.CallOpts{}) - if err != nil { - return err - } - - if config != nil { - if batcherHash != common.BytesToHash(config.BatchSenderAddress.Bytes()) { - return fmt.Errorf("BatchSenderAddress address doesn't match config") - } - if l2GenesisBlockGasLimit != uint64(config.L2GenesisBlockGasLimit) { - return fmt.Errorf("L2GenesisBlockGasLimit address doesn't match config") - } - if p2pSequencerAddress != config.P2PSequencerAddress { - return fmt.Errorf("P2PSequencerAddress address doesn't match config") - } - if finalSystemOwner != config.FinalSystemOwner { - return fmt.Errorf("FinalSystemOwner address doesn't match config") - } - } - - resourceConfig, err := systemConfig.ResourceConfig(&bind.CallOpts{}) - if err != nil { - return err - } - - if resourceConfig.MaxResourceLimit != DefaultResourceConfig.MaxResourceLimit { - return fmt.Errorf("DefaultResourceConfig MaxResourceLimit doesn't match contract MaxResourceLimit") - } - if resourceConfig.ElasticityMultiplier != DefaultResourceConfig.ElasticityMultiplier { - return fmt.Errorf("DefaultResourceConfig ElasticityMultiplier doesn't match contract ElasticityMultiplier") - } - if resourceConfig.BaseFeeMaxChangeDenominator != DefaultResourceConfig.BaseFeeMaxChangeDenominator { - return fmt.Errorf("DefaultResourceConfig BaseFeeMaxChangeDenominator doesn't match contract BaseFeeMaxChangeDenominator") - } - if resourceConfig.MinimumBaseFee != DefaultResourceConfig.MinimumBaseFee { - return fmt.Errorf("DefaultResourceConfig MinimumBaseFee doesn't match contract MinimumBaseFee") - } - if resourceConfig.SystemTxMaxGas != DefaultResourceConfig.SystemTxMaxGas { - return fmt.Errorf("DefaultResourceConfig SystemTxMaxGas doesn't match contract SystemTxMaxGas") - } - if resourceConfig.MaximumBaseFee.Cmp(DefaultResourceConfig.MaximumBaseFee) != 0 { - return fmt.Errorf("DefaultResourceConfig MaximumBaseFee doesn't match contract MaximumBaseFee") - } - - if true { - return errors.New("Update superchain-registry dependency to include DisputeGameFactory and GasPayingToken addresses") - } - - calldata, err := systemConfigABI.Pack( - "initialize", - finalSystemOwner, - gasPriceOracleOverhead, - gasPriceOracleScalar, - batcherHash, - l2GenesisBlockGasLimit, - p2pSequencerAddress, - DefaultResourceConfig, - chainConfig.BatchInboxAddr, - bindings.SystemConfigAddresses{ - L1CrossDomainMessenger: common.Address(list.L1CrossDomainMessengerProxy), - L1ERC721Bridge: common.Address(list.L1ERC721BridgeProxy), - L1StandardBridge: common.Address(list.L1StandardBridgeProxy), - DisputeGameFactory: common.Address{}, - OptimismPortal: common.Address(list.OptimismPortalProxy), - OptimismMintableERC20Factory: common.Address(list.OptimismMintableERC20FactoryProxy), - GasPayingToken: common.Address{}, - }, - ) - if err != nil { - return err - } - - args := []any{ - common.Address(list.SystemConfigProxy), - common.Address(implementations.SystemConfig.Address), - calldata, - } - - proxyAdmin := common.Address(list.ProxyAdmin) - if err := batch.AddCall(proxyAdmin, common.Big0, upgradeAndCall, args, proxyAdminABI); err != nil { - return err - } - - return nil -} From 9803860806705e559fc7cac9e403f25ac5b57241 Mon Sep 17 00:00:00 2001 From: Inphi Date: Wed, 26 Jun 2024 20:48:58 -0700 Subject: [PATCH 114/141] op-challenger: Improve GameType typing (#11012) --- op-challenger/cmd/create_game.go | 4 +- op-challenger/cmd/main_test.go | 171 +++++++++--------- op-challenger/config/config.go | 54 +----- op-challenger/config/config_test.go | 47 ++--- op-challenger/flags/flags.go | 25 +-- .../game/fault/contracts/gamefactory.go | 3 +- .../game/fault/contracts/gamefactory_test.go | 5 +- op-challenger/game/fault/register.go | 22 +-- op-challenger/game/fault/trace/vm/executor.go | 5 +- op-challenger/game/fault/types/types.go | 92 +++++++++- op-challenger/game/registry/registry.go | 17 +- op-dispute-mon/mon/extract/caller.go | 2 +- op-dispute-mon/mon/extract/caller_test.go | 6 +- op-e2e/e2eutils/challenger/helper.go | 7 +- 14 files changed, 256 insertions(+), 204 deletions(-) diff --git a/op-challenger/cmd/create_game.go b/op-challenger/cmd/create_game.go index a41e78e5bb22..fdf3e9a4176e 100644 --- a/op-challenger/cmd/create_game.go +++ b/op-challenger/cmd/create_game.go @@ -4,10 +4,10 @@ import ( "context" "fmt" - "github.com/ethereum-optimism/optimism/op-challenger/config" "github.com/ethereum-optimism/optimism/op-challenger/flags" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/contracts" contractMetrics "github.com/ethereum-optimism/optimism/op-challenger/game/fault/contracts/metrics" + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum-optimism/optimism/op-challenger/tools" opservice "github.com/ethereum-optimism/optimism/op-service" oplog "github.com/ethereum-optimism/optimism/op-service/log" @@ -22,7 +22,7 @@ var ( Name: "trace-type", Usage: "Trace types to support.", EnvVars: opservice.PrefixEnvVar(flags.EnvVarPrefix, "TRACE_TYPE"), - Value: config.TraceTypeCannon.String(), + Value: types.TraceTypeCannon.String(), } OutputRootFlag = &cli.StringFlag{ Name: "output-root", diff --git a/op-challenger/cmd/main_test.go b/op-challenger/cmd/main_test.go index e6234b063b34..926f38eced51 100644 --- a/op-challenger/cmd/main_test.go +++ b/op-challenger/cmd/main_test.go @@ -14,6 +14,7 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum-optimism/optimism/op-challenger/config" + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum-optimism/optimism/op-service/cliapp" "github.com/ethereum-optimism/optimism/op-service/txmgr" ) @@ -38,13 +39,13 @@ var ( func TestLogLevel(t *testing.T) { t.Run("RejectInvalid", func(t *testing.T) { - verifyArgsInvalid(t, "unknown level: foo", addRequiredArgs(config.TraceTypeAlphabet, "--log.level=foo")) + verifyArgsInvalid(t, "unknown level: foo", addRequiredArgs(types.TraceTypeAlphabet, "--log.level=foo")) }) for _, lvl := range []string{"trace", "debug", "info", "error", "crit"} { lvl := lvl t.Run("AcceptValid_"+lvl, func(t *testing.T) { - logger, _, err := dryRunWithArgs(addRequiredArgs(config.TraceTypeAlphabet, "--log.level", lvl)) + logger, _, err := dryRunWithArgs(addRequiredArgs(types.TraceTypeAlphabet, "--log.level", lvl)) require.NoError(t, err) require.NotNil(t, logger) }) @@ -52,24 +53,24 @@ func TestLogLevel(t *testing.T) { } func TestDefaultCLIOptionsMatchDefaultConfig(t *testing.T) { - cfg := configForArgs(t, addRequiredArgs(config.TraceTypeAlphabet)) - defaultCfg := config.NewConfig(common.HexToAddress(gameFactoryAddressValue), l1EthRpc, l1Beacon, rollupRpc, l2EthRpc, datadir, config.TraceTypeAlphabet) + cfg := configForArgs(t, addRequiredArgs(types.TraceTypeAlphabet)) + defaultCfg := config.NewConfig(common.HexToAddress(gameFactoryAddressValue), l1EthRpc, l1Beacon, rollupRpc, l2EthRpc, datadir, types.TraceTypeAlphabet) require.Equal(t, defaultCfg, cfg) } func TestDefaultConfigIsValid(t *testing.T) { - cfg := config.NewConfig(common.HexToAddress(gameFactoryAddressValue), l1EthRpc, l1Beacon, rollupRpc, l2EthRpc, datadir, config.TraceTypeAlphabet) + cfg := config.NewConfig(common.HexToAddress(gameFactoryAddressValue), l1EthRpc, l1Beacon, rollupRpc, l2EthRpc, datadir, types.TraceTypeAlphabet) require.NoError(t, cfg.Check()) } func TestL1ETHRPCAddress(t *testing.T) { t.Run("Required", func(t *testing.T) { - verifyArgsInvalid(t, "flag l1-eth-rpc is required", addRequiredArgsExcept(config.TraceTypeAlphabet, "--l1-eth-rpc")) + verifyArgsInvalid(t, "flag l1-eth-rpc is required", addRequiredArgsExcept(types.TraceTypeAlphabet, "--l1-eth-rpc")) }) t.Run("Valid", func(t *testing.T) { url := "http://example.com:8888" - cfg := configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--l1-eth-rpc", "--l1-eth-rpc="+url)) + cfg := configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--l1-eth-rpc", "--l1-eth-rpc="+url)) require.Equal(t, url, cfg.L1EthRpc) require.Equal(t, url, cfg.TxMgrConfig.L1RPCURL) }) @@ -77,91 +78,91 @@ func TestL1ETHRPCAddress(t *testing.T) { func TestL1Beacon(t *testing.T) { t.Run("Required", func(t *testing.T) { - verifyArgsInvalid(t, "flag l1-beacon is required", addRequiredArgsExcept(config.TraceTypeAlphabet, "--l1-beacon")) + verifyArgsInvalid(t, "flag l1-beacon is required", addRequiredArgsExcept(types.TraceTypeAlphabet, "--l1-beacon")) }) t.Run("Valid", func(t *testing.T) { url := "http://example.com:8888" - cfg := configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--l1-beacon", "--l1-beacon="+url)) + cfg := configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--l1-beacon", "--l1-beacon="+url)) require.Equal(t, url, cfg.L1Beacon) }) } func TestTraceType(t *testing.T) { t.Run("Default", func(t *testing.T) { - expectedDefault := config.TraceTypeCannon + expectedDefault := types.TraceTypeCannon cfg := configForArgs(t, addRequiredArgsExcept(expectedDefault, "--trace-type")) - require.Equal(t, []config.TraceType{expectedDefault}, cfg.TraceTypes) + require.Equal(t, []types.TraceType{expectedDefault}, cfg.TraceTypes) }) - for _, traceType := range config.TraceTypes { + for _, traceType := range types.TraceTypes { traceType := traceType t.Run("Valid_"+traceType.String(), func(t *testing.T) { cfg := configForArgs(t, addRequiredArgs(traceType)) - require.Equal(t, []config.TraceType{traceType}, cfg.TraceTypes) + require.Equal(t, []types.TraceType{traceType}, cfg.TraceTypes) }) } t.Run("Invalid", func(t *testing.T) { - verifyArgsInvalid(t, "unknown trace type: \"foo\"", addRequiredArgsExcept(config.TraceTypeAlphabet, "--trace-type", "--trace-type=foo")) + verifyArgsInvalid(t, "unknown trace type: \"foo\"", addRequiredArgsExcept(types.TraceTypeAlphabet, "--trace-type", "--trace-type=foo")) }) } func TestMultipleTraceTypes(t *testing.T) { t.Run("WithAllOptions", func(t *testing.T) { - argsMap := requiredArgs(config.TraceTypeCannon) + argsMap := requiredArgs(types.TraceTypeCannon) // Add Asterisc required flags addRequiredAsteriscArgs(argsMap) args := toArgList(argsMap) // Add extra trace types (cannon is already specified) args = append(args, - "--trace-type", config.TraceTypeAlphabet.String()) + "--trace-type", types.TraceTypeAlphabet.String()) args = append(args, - "--trace-type", config.TraceTypePermissioned.String()) + "--trace-type", types.TraceTypePermissioned.String()) args = append(args, - "--trace-type", config.TraceTypeAsterisc.String()) + "--trace-type", types.TraceTypeAsterisc.String()) cfg := configForArgs(t, args) - require.Equal(t, []config.TraceType{config.TraceTypeCannon, config.TraceTypeAlphabet, config.TraceTypePermissioned, config.TraceTypeAsterisc}, cfg.TraceTypes) + require.Equal(t, []types.TraceType{types.TraceTypeCannon, types.TraceTypeAlphabet, types.TraceTypePermissioned, types.TraceTypeAsterisc}, cfg.TraceTypes) }) t.Run("WithSomeOptions", func(t *testing.T) { - argsMap := requiredArgs(config.TraceTypeCannon) + argsMap := requiredArgs(types.TraceTypeCannon) args := toArgList(argsMap) // Add extra trace types (cannon is already specified) args = append(args, - "--trace-type", config.TraceTypeAlphabet.String()) + "--trace-type", types.TraceTypeAlphabet.String()) cfg := configForArgs(t, args) - require.Equal(t, []config.TraceType{config.TraceTypeCannon, config.TraceTypeAlphabet}, cfg.TraceTypes) + require.Equal(t, []types.TraceType{types.TraceTypeCannon, types.TraceTypeAlphabet}, cfg.TraceTypes) }) t.Run("SpecifySameOptionMultipleTimes", func(t *testing.T) { - argsMap := requiredArgs(config.TraceTypeCannon) + argsMap := requiredArgs(types.TraceTypeCannon) args := toArgList(argsMap) // Add cannon trace type again - args = append(args, "--trace-type", config.TraceTypeCannon.String()) + args = append(args, "--trace-type", types.TraceTypeCannon.String()) // We're fine with the same option being listed multiple times, just deduplicate them. cfg := configForArgs(t, args) - require.Equal(t, []config.TraceType{config.TraceTypeCannon}, cfg.TraceTypes) + require.Equal(t, []types.TraceType{types.TraceTypeCannon}, cfg.TraceTypes) }) } func TestGameFactoryAddress(t *testing.T) { t.Run("RequiredWhenNetworkNotSupplied", func(t *testing.T) { - verifyArgsInvalid(t, "flag game-factory-address or network is required", addRequiredArgsExcept(config.TraceTypeAlphabet, "--game-factory-address")) + verifyArgsInvalid(t, "flag game-factory-address or network is required", addRequiredArgsExcept(types.TraceTypeAlphabet, "--game-factory-address")) }) t.Run("Valid", func(t *testing.T) { addr := common.Address{0xbb, 0xcc, 0xdd} - cfg := configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--game-factory-address", "--game-factory-address="+addr.Hex())) + cfg := configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--game-factory-address", "--game-factory-address="+addr.Hex())) require.Equal(t, addr, cfg.GameFactoryAddress) }) t.Run("Invalid", func(t *testing.T) { - verifyArgsInvalid(t, "invalid address: foo", addRequiredArgsExcept(config.TraceTypeAlphabet, "--game-factory-address", "--game-factory-address=foo")) + verifyArgsInvalid(t, "invalid address: foo", addRequiredArgsExcept(types.TraceTypeAlphabet, "--game-factory-address", "--game-factory-address=foo")) }) t.Run("OverridesNetwork", func(t *testing.T) { addr := common.Address{0xbb, 0xcc, 0xdd} - cfg := configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--game-factory-address", "--game-factory-address", addr.Hex(), "--network", "op-sepolia")) + cfg := configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--game-factory-address", "--game-factory-address", addr.Hex(), "--network", "op-sepolia")) require.Equal(t, addr, cfg.GameFactoryAddress) }) } @@ -169,42 +170,42 @@ func TestGameFactoryAddress(t *testing.T) { func TestNetwork(t *testing.T) { t.Run("Valid", func(t *testing.T) { opSepoliaChainId := uint64(11155420) - cfg := configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--game-factory-address", "--network=op-sepolia")) + cfg := configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--game-factory-address", "--network=op-sepolia")) require.EqualValues(t, superchain.Addresses[opSepoliaChainId].DisputeGameFactoryProxy, cfg.GameFactoryAddress) }) t.Run("UnknownNetwork", func(t *testing.T) { - verifyArgsInvalid(t, "unknown chain: not-a-network", addRequiredArgsExcept(config.TraceTypeAlphabet, "--game-factory-address", "--network=not-a-network")) + verifyArgsInvalid(t, "unknown chain: not-a-network", addRequiredArgsExcept(types.TraceTypeAlphabet, "--game-factory-address", "--network=not-a-network")) }) } func TestGameAllowlist(t *testing.T) { t.Run("Optional", func(t *testing.T) { - cfg := configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--game-allowlist")) + cfg := configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--game-allowlist")) require.NoError(t, cfg.Check()) }) t.Run("Valid", func(t *testing.T) { addr := common.Address{0xbb, 0xcc, 0xdd} - cfg := configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--game-allowlist", "--game-allowlist="+addr.Hex())) + cfg := configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--game-allowlist", "--game-allowlist="+addr.Hex())) require.Contains(t, cfg.GameAllowlist, addr) }) t.Run("Invalid", func(t *testing.T) { - verifyArgsInvalid(t, "invalid address: foo", addRequiredArgsExcept(config.TraceTypeAlphabet, "--game-allowlist", "--game-allowlist=foo")) + verifyArgsInvalid(t, "invalid address: foo", addRequiredArgsExcept(types.TraceTypeAlphabet, "--game-allowlist", "--game-allowlist=foo")) }) } func TestTxManagerFlagsSupported(t *testing.T) { // Not a comprehensive list of flags, just enough to sanity check the txmgr.CLIFlags were defined - cfg := configForArgs(t, addRequiredArgs(config.TraceTypeAlphabet, "--"+txmgr.NumConfirmationsFlagName, "7")) + cfg := configForArgs(t, addRequiredArgs(types.TraceTypeAlphabet, "--"+txmgr.NumConfirmationsFlagName, "7")) require.Equal(t, uint64(7), cfg.TxMgrConfig.NumConfirmations) } func TestMaxConcurrency(t *testing.T) { t.Run("Valid", func(t *testing.T) { expected := uint(345) - cfg := configForArgs(t, addRequiredArgs(config.TraceTypeAlphabet, "--max-concurrency", "345")) + cfg := configForArgs(t, addRequiredArgs(types.TraceTypeAlphabet, "--max-concurrency", "345")) require.Equal(t, expected, cfg.MaxConcurrency) }) @@ -212,26 +213,26 @@ func TestMaxConcurrency(t *testing.T) { verifyArgsInvalid( t, "invalid value \"abc\" for flag -max-concurrency", - addRequiredArgs(config.TraceTypeAlphabet, "--max-concurrency", "abc")) + addRequiredArgs(types.TraceTypeAlphabet, "--max-concurrency", "abc")) }) t.Run("Zero", func(t *testing.T) { verifyArgsInvalid( t, "max-concurrency must not be 0", - addRequiredArgs(config.TraceTypeAlphabet, "--max-concurrency", "0")) + addRequiredArgs(types.TraceTypeAlphabet, "--max-concurrency", "0")) }) } func TestMaxPendingTx(t *testing.T) { t.Run("Valid", func(t *testing.T) { expected := uint64(345) - cfg := configForArgs(t, addRequiredArgs(config.TraceTypeAlphabet, "--max-pending-tx", "345")) + cfg := configForArgs(t, addRequiredArgs(types.TraceTypeAlphabet, "--max-pending-tx", "345")) require.Equal(t, expected, cfg.MaxPendingTx) }) t.Run("Zero", func(t *testing.T) { - cfg := configForArgs(t, addRequiredArgs(config.TraceTypeAlphabet, "--max-pending-tx", "0")) + cfg := configForArgs(t, addRequiredArgs(types.TraceTypeAlphabet, "--max-pending-tx", "0")) require.Equal(t, uint64(0), cfg.MaxPendingTx) }) @@ -239,19 +240,19 @@ func TestMaxPendingTx(t *testing.T) { verifyArgsInvalid( t, "invalid value \"abc\" for flag -max-pending-tx", - addRequiredArgs(config.TraceTypeAlphabet, "--max-pending-tx", "abc")) + addRequiredArgs(types.TraceTypeAlphabet, "--max-pending-tx", "abc")) }) } func TestPollInterval(t *testing.T) { t.Run("UsesDefault", func(t *testing.T) { - cfg := configForArgs(t, addRequiredArgs(config.TraceTypeCannon)) + cfg := configForArgs(t, addRequiredArgs(types.TraceTypeCannon)) require.Equal(t, config.DefaultPollInterval, cfg.PollInterval) }) t.Run("Valid", func(t *testing.T) { expected := 100 * time.Second - cfg := configForArgs(t, addRequiredArgs(config.TraceTypeAlphabet, "--http-poll-interval", "100s")) + cfg := configForArgs(t, addRequiredArgs(types.TraceTypeAlphabet, "--http-poll-interval", "100s")) require.Equal(t, expected, cfg.PollInterval) }) @@ -259,16 +260,16 @@ func TestPollInterval(t *testing.T) { verifyArgsInvalid( t, "invalid value \"abc\" for flag -http-poll-interval", - addRequiredArgs(config.TraceTypeAlphabet, "--http-poll-interval", "abc")) + addRequiredArgs(types.TraceTypeAlphabet, "--http-poll-interval", "abc")) }) } func TestAsteriscRequiredArgs(t *testing.T) { - for _, traceType := range []config.TraceType{config.TraceTypeAsterisc} { + for _, traceType := range []types.TraceType{types.TraceTypeAsterisc} { traceType := traceType t.Run(fmt.Sprintf("TestAsteriscBin-%v", traceType), func(t *testing.T) { t.Run("NotRequiredForAlphabetTrace", func(t *testing.T) { - configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--asterisc-bin")) + configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--asterisc-bin")) }) t.Run("Required", func(t *testing.T) { @@ -283,7 +284,7 @@ func TestAsteriscRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscServer-%v", traceType), func(t *testing.T) { t.Run("NotRequiredForAlphabetTrace", func(t *testing.T) { - configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--asterisc-server")) + configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--asterisc-server")) }) t.Run("Required", func(t *testing.T) { @@ -298,7 +299,7 @@ func TestAsteriscRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscAbsolutePrestate-%v", traceType), func(t *testing.T) { t.Run("NotRequiredForAlphabetTrace", func(t *testing.T) { - configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--asterisc-prestate")) + configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--asterisc-prestate")) }) t.Run("Required", func(t *testing.T) { @@ -313,7 +314,7 @@ func TestAsteriscRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscAbsolutePrestateBaseURL-%v", traceType), func(t *testing.T) { t.Run("NotRequiredForAlphabetTrace", func(t *testing.T) { - configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--asterisc-prestates-url")) + configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--asterisc-prestates-url")) }) t.Run("Required", func(t *testing.T) { @@ -418,7 +419,7 @@ func TestAsteriscRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscNetwork-%v", traceType), func(t *testing.T) { t.Run("NotRequiredForAlphabetTrace", func(t *testing.T) { - configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--asterisc-network")) + configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--asterisc-network")) }) t.Run("NotRequiredWhenRollupAndGenesIsSpecified", func(t *testing.T) { @@ -448,7 +449,7 @@ func TestAsteriscRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscRollupConfig-%v", traceType), func(t *testing.T) { t.Run("NotRequiredForAlphabetTrace", func(t *testing.T) { - configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--asterisc-rollup-config")) + configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--asterisc-rollup-config")) }) t.Run("Valid", func(t *testing.T) { @@ -459,7 +460,7 @@ func TestAsteriscRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscL2Genesis-%v", traceType), func(t *testing.T) { t.Run("NotRequiredForAlphabetTrace", func(t *testing.T) { - configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--asterisc-l2-genesis")) + configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--asterisc-l2-genesis")) }) t.Run("Valid", func(t *testing.T) { @@ -471,29 +472,29 @@ func TestAsteriscRequiredArgs(t *testing.T) { } func TestAlphabetRequiredArgs(t *testing.T) { - t.Run(fmt.Sprintf("TestL2Rpc-%v", config.TraceTypeAlphabet), func(t *testing.T) { + t.Run(fmt.Sprintf("TestL2Rpc-%v", types.TraceTypeAlphabet), func(t *testing.T) { t.Run("RequiredForAlphabetTrace", func(t *testing.T) { - verifyArgsInvalid(t, "flag l2-eth-rpc is required", addRequiredArgsExcept(config.TraceTypeAlphabet, "--l2-eth-rpc")) + verifyArgsInvalid(t, "flag l2-eth-rpc is required", addRequiredArgsExcept(types.TraceTypeAlphabet, "--l2-eth-rpc")) }) t.Run("ValidLegacy", func(t *testing.T) { - cfg := configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--l2-eth-rpc", fmt.Sprintf("--cannon-l2=%s", l2EthRpc))) + cfg := configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--l2-eth-rpc", fmt.Sprintf("--cannon-l2=%s", l2EthRpc))) require.Equal(t, l2EthRpc, cfg.L2Rpc) }) t.Run("Valid", func(t *testing.T) { - cfg := configForArgs(t, addRequiredArgs(config.TraceTypeAlphabet)) + cfg := configForArgs(t, addRequiredArgs(types.TraceTypeAlphabet)) require.Equal(t, l2EthRpc, cfg.L2Rpc) }) }) } func TestCannonRequiredArgs(t *testing.T) { - for _, traceType := range []config.TraceType{config.TraceTypeCannon, config.TraceTypePermissioned} { + for _, traceType := range []types.TraceType{types.TraceTypeCannon, types.TraceTypePermissioned} { traceType := traceType t.Run(fmt.Sprintf("TestCannonBin-%v", traceType), func(t *testing.T) { t.Run("NotRequiredForAlphabetTrace", func(t *testing.T) { - configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--cannon-bin")) + configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--cannon-bin")) }) t.Run("Required", func(t *testing.T) { @@ -508,7 +509,7 @@ func TestCannonRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestCannonServer-%v", traceType), func(t *testing.T) { t.Run("NotRequiredForAlphabetTrace", func(t *testing.T) { - configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--cannon-server")) + configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--cannon-server")) }) t.Run("Required", func(t *testing.T) { @@ -523,7 +524,7 @@ func TestCannonRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestCannonAbsolutePrestate-%v", traceType), func(t *testing.T) { t.Run("NotRequiredForAlphabetTrace", func(t *testing.T) { - configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--cannon-prestate")) + configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--cannon-prestate")) }) t.Run("Required", func(t *testing.T) { @@ -538,7 +539,7 @@ func TestCannonRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestCannonAbsolutePrestateBaseURL-%v", traceType), func(t *testing.T) { t.Run("NotRequiredForAlphabetTrace", func(t *testing.T) { - configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--cannon-prestates-url")) + configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--cannon-prestates-url")) }) t.Run("Required", func(t *testing.T) { @@ -639,7 +640,7 @@ func TestCannonRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestCannonNetwork-%v", traceType), func(t *testing.T) { t.Run("NotRequiredForAlphabetTrace", func(t *testing.T) { - configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--cannon-network")) + configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--cannon-network")) }) t.Run("NotRequiredWhenRollupAndGenesIsSpecified", func(t *testing.T) { @@ -669,7 +670,7 @@ func TestCannonRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestCannonRollupConfig-%v", traceType), func(t *testing.T) { t.Run("NotRequiredForAlphabetTrace", func(t *testing.T) { - configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--cannon-rollup-config")) + configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--cannon-rollup-config")) }) t.Run("Valid", func(t *testing.T) { @@ -680,7 +681,7 @@ func TestCannonRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestCannonL2Genesis-%v", traceType), func(t *testing.T) { t.Run("NotRequiredForAlphabetTrace", func(t *testing.T) { - configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--cannon-l2-genesis")) + configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--cannon-l2-genesis")) }) t.Run("Valid", func(t *testing.T) { @@ -692,7 +693,7 @@ func TestCannonRequiredArgs(t *testing.T) { } func TestDataDir(t *testing.T) { - for _, traceType := range config.TraceTypes { + for _, traceType := range types.TraceTypes { traceType := traceType t.Run(fmt.Sprintf("RequiredFor-%v", traceType), func(t *testing.T) { @@ -701,13 +702,13 @@ func TestDataDir(t *testing.T) { } t.Run("Valid", func(t *testing.T) { - cfg := configForArgs(t, addRequiredArgsExcept(config.TraceTypeCannon, "--datadir", "--datadir=/foo/bar/cannon")) + cfg := configForArgs(t, addRequiredArgsExcept(types.TraceTypeCannon, "--datadir", "--datadir=/foo/bar/cannon")) require.Equal(t, "/foo/bar/cannon", cfg.Datadir) }) } func TestRollupRpc(t *testing.T) { - for _, traceType := range config.TraceTypes { + for _, traceType := range types.TraceTypes { traceType := traceType t.Run(fmt.Sprintf("RequiredFor-%v", traceType), func(t *testing.T) { @@ -716,59 +717,59 @@ func TestRollupRpc(t *testing.T) { } t.Run("Valid", func(t *testing.T) { - cfg := configForArgs(t, addRequiredArgs(config.TraceTypeCannon)) + cfg := configForArgs(t, addRequiredArgs(types.TraceTypeCannon)) require.Equal(t, rollupRpc, cfg.RollupRpc) }) } func TestGameWindow(t *testing.T) { t.Run("UsesDefault", func(t *testing.T) { - cfg := configForArgs(t, addRequiredArgs(config.TraceTypeAlphabet)) + cfg := configForArgs(t, addRequiredArgs(types.TraceTypeAlphabet)) require.Equal(t, config.DefaultGameWindow, cfg.GameWindow) }) t.Run("Valid", func(t *testing.T) { - cfg := configForArgs(t, addRequiredArgs(config.TraceTypeAlphabet, "--game-window=1m")) + cfg := configForArgs(t, addRequiredArgs(types.TraceTypeAlphabet, "--game-window=1m")) require.Equal(t, time.Minute, cfg.GameWindow) }) t.Run("ParsesDefault", func(t *testing.T) { - cfg := configForArgs(t, addRequiredArgs(config.TraceTypeAlphabet, "--game-window=672h")) + cfg := configForArgs(t, addRequiredArgs(types.TraceTypeAlphabet, "--game-window=672h")) require.Equal(t, config.DefaultGameWindow, cfg.GameWindow) }) } func TestUnsafeAllowInvalidPrestate(t *testing.T) { t.Run("DefaultsToFalse", func(t *testing.T) { - cfg := configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--unsafe-allow-invalid-prestate")) + cfg := configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--unsafe-allow-invalid-prestate")) require.False(t, cfg.AllowInvalidPrestate) }) t.Run("EnabledWithNoValue", func(t *testing.T) { - cfg := configForArgs(t, addRequiredArgs(config.TraceTypeCannon, "--unsafe-allow-invalid-prestate")) + cfg := configForArgs(t, addRequiredArgs(types.TraceTypeCannon, "--unsafe-allow-invalid-prestate")) require.True(t, cfg.AllowInvalidPrestate) }) t.Run("EnabledWithTrue", func(t *testing.T) { - cfg := configForArgs(t, addRequiredArgs(config.TraceTypeCannon, "--unsafe-allow-invalid-prestate=true")) + cfg := configForArgs(t, addRequiredArgs(types.TraceTypeCannon, "--unsafe-allow-invalid-prestate=true")) require.True(t, cfg.AllowInvalidPrestate) }) t.Run("DisabledWithFalse", func(t *testing.T) { - cfg := configForArgs(t, addRequiredArgs(config.TraceTypeCannon, "--unsafe-allow-invalid-prestate=false")) + cfg := configForArgs(t, addRequiredArgs(types.TraceTypeCannon, "--unsafe-allow-invalid-prestate=false")) require.False(t, cfg.AllowInvalidPrestate) }) } func TestAdditionalBondClaimants(t *testing.T) { t.Run("DefaultsToEmpty", func(t *testing.T) { - cfg := configForArgs(t, addRequiredArgsExcept(config.TraceTypeAlphabet, "--additional-bond-claimants")) + cfg := configForArgs(t, addRequiredArgsExcept(types.TraceTypeAlphabet, "--additional-bond-claimants")) require.Empty(t, cfg.AdditionalBondClaimants) }) t.Run("Valid-Single", func(t *testing.T) { claimant := common.Address{0xaa} - cfg := configForArgs(t, addRequiredArgs(config.TraceTypeAlphabet, "--additional-bond-claimants", claimant.Hex())) + cfg := configForArgs(t, addRequiredArgs(types.TraceTypeAlphabet, "--additional-bond-claimants", claimant.Hex())) require.Contains(t, cfg.AdditionalBondClaimants, claimant) require.Len(t, cfg.AdditionalBondClaimants, 1) }) @@ -777,7 +778,7 @@ func TestAdditionalBondClaimants(t *testing.T) { claimant1 := common.Address{0xaa} claimant2 := common.Address{0xbb} claimant3 := common.Address{0xcc} - cfg := configForArgs(t, addRequiredArgs(config.TraceTypeAlphabet, + cfg := configForArgs(t, addRequiredArgs(types.TraceTypeAlphabet, "--additional-bond-claimants", fmt.Sprintf("%v,%v,%v", claimant1.Hex(), claimant2.Hex(), claimant3.Hex()))) require.Contains(t, cfg.AdditionalBondClaimants, claimant1) require.Contains(t, cfg.AdditionalBondClaimants, claimant2) @@ -787,14 +788,14 @@ func TestAdditionalBondClaimants(t *testing.T) { t.Run("Invalid-Single", func(t *testing.T) { verifyArgsInvalid(t, "invalid additional claimant", - addRequiredArgs(config.TraceTypeAlphabet, "--additional-bond-claimants", "nope")) + addRequiredArgs(types.TraceTypeAlphabet, "--additional-bond-claimants", "nope")) }) t.Run("Invalid-Multiple", func(t *testing.T) { claimant1 := common.Address{0xaa} claimant2 := common.Address{0xbb} verifyArgsInvalid(t, "invalid additional claimant", - addRequiredArgs(config.TraceTypeAlphabet, "--additional-bond-claimants", fmt.Sprintf("%v,nope,%v", claimant1.Hex(), claimant2.Hex()))) + addRequiredArgs(types.TraceTypeAlphabet, "--additional-bond-claimants", fmt.Sprintf("%v,nope,%v", claimant1.Hex(), claimant2.Hex()))) }) } @@ -825,19 +826,19 @@ func dryRunWithArgs(cliArgs []string) (log.Logger, config.Config, error) { return logger, *cfg, err } -func addRequiredArgs(traceType config.TraceType, args ...string) []string { +func addRequiredArgs(traceType types.TraceType, args ...string) []string { req := requiredArgs(traceType) combined := toArgList(req) return append(combined, args...) } -func addRequiredArgsExcept(traceType config.TraceType, name string, optionalArgs ...string) []string { +func addRequiredArgsExcept(traceType types.TraceType, name string, optionalArgs ...string) []string { req := requiredArgs(traceType) delete(req, name) return append(toArgList(req), optionalArgs...) } -func requiredArgs(traceType config.TraceType) map[string]string { +func requiredArgs(traceType types.TraceType) map[string]string { args := map[string]string{ "--l1-eth-rpc": l1EthRpc, "--l1-beacon": l1Beacon, @@ -848,9 +849,9 @@ func requiredArgs(traceType config.TraceType) map[string]string { "--datadir": datadir, } switch traceType { - case config.TraceTypeCannon, config.TraceTypePermissioned: + case types.TraceTypeCannon, types.TraceTypePermissioned: addRequiredCannonArgs(args) - case config.TraceTypeAsterisc: + case types.TraceTypeAsterisc: addRequiredAsteriscArgs(args) } return args diff --git a/op-challenger/config/config.go b/op-challenger/config/config.go index 3c6f8c846aff..f2725663cd30 100644 --- a/op-challenger/config/config.go +++ b/op-challenger/config/config.go @@ -9,6 +9,7 @@ import ( "time" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/vm" + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum-optimism/optimism/op-node/chaincfg" opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics" "github.com/ethereum-optimism/optimism/op-service/oppprof" @@ -50,45 +51,6 @@ var ( ErrAsteriscNetworkUnknown = errors.New("unknown asterisc network") ) -type TraceType string - -const ( - TraceTypeAlphabet TraceType = "alphabet" - TraceTypeFast TraceType = "fast" - TraceTypeCannon TraceType = "cannon" - TraceTypeAsterisc TraceType = "asterisc" - TraceTypePermissioned TraceType = "permissioned" -) - -var TraceTypes = []TraceType{TraceTypeAlphabet, TraceTypeCannon, TraceTypePermissioned, TraceTypeAsterisc, TraceTypeFast} - -func (t TraceType) String() string { - return string(t) -} - -// Set implements the Set method required by the [cli.Generic] interface. -func (t *TraceType) Set(value string) error { - if !ValidTraceType(TraceType(value)) { - return fmt.Errorf("unknown trace type: %q", value) - } - *t = TraceType(value) - return nil -} - -func (t *TraceType) Clone() any { - cpy := *t - return &cpy -} - -func ValidTraceType(value TraceType) bool { - for _, t := range TraceTypes { - if t == value { - return true - } - } - return false -} - const ( DefaultPollInterval = time.Second * 12 DefaultCannonSnapshotFreq = uint(1_000_000_000) @@ -122,7 +84,7 @@ type Config struct { SelectiveClaimResolution bool // Whether to only resolve claims for the claimants in AdditionalBondClaimants union [TxSender.From()] - TraceTypes []TraceType // Type of traces supported + TraceTypes []types.TraceType // Type of traces supported RollupRpc string // L2 Rollup RPC Url @@ -152,7 +114,7 @@ func NewConfig( l2RollupRpc string, l2EthRpc string, datadir string, - supportedTraceTypes ...TraceType, + supportedTraceTypes ...types.TraceType, ) Config { return Config{ L1EthRpc: l1EthRpc, @@ -174,7 +136,7 @@ func NewConfig( Datadir: datadir, Cannon: vm.Config{ - VmType: TraceTypeCannon.String(), + VmType: types.TraceTypeCannon, L1: l1EthRpc, L1Beacon: l1BeaconApi, L2: l2EthRpc, @@ -182,7 +144,7 @@ func NewConfig( InfoFreq: DefaultCannonInfoFreq, }, Asterisc: vm.Config{ - VmType: TraceTypeAsterisc.String(), + VmType: types.TraceTypeAsterisc, L1: l1EthRpc, L1Beacon: l1BeaconApi, L2: l2EthRpc, @@ -193,7 +155,7 @@ func NewConfig( } } -func (c Config) TraceTypeEnabled(t TraceType) bool { +func (c Config) TraceTypeEnabled(t types.TraceType) bool { return slices.Contains(c.TraceTypes, t) } @@ -222,7 +184,7 @@ func (c Config) Check() error { if c.MaxConcurrency == 0 { return ErrMaxConcurrencyZero } - if c.TraceTypeEnabled(TraceTypeCannon) || c.TraceTypeEnabled(TraceTypePermissioned) { + if c.TraceTypeEnabled(types.TraceTypeCannon) || c.TraceTypeEnabled(types.TraceTypePermissioned) { if c.Cannon.VmBin == "" { return ErrMissingCannonBin } @@ -260,7 +222,7 @@ func (c Config) Check() error { return ErrMissingCannonInfoFreq } } - if c.TraceTypeEnabled(TraceTypeAsterisc) { + if c.TraceTypeEnabled(types.TraceTypeAsterisc) { if c.Asterisc.VmBin == "" { return ErrMissingAsteriscBin } diff --git a/op-challenger/config/config_test.go b/op-challenger/config/config_test.go index 6cfae373277c..56b99378187b 100644 --- a/op-challenger/config/config_test.go +++ b/op-challenger/config/config_test.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/require" + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum-optimism/optimism/op-service/txmgr" ) @@ -32,8 +33,8 @@ var ( validAsteriscAbsolutPreStateBaseURL, _ = url.Parse("http://localhost/bar/") ) -var cannonTraceTypes = []TraceType{TraceTypeCannon, TraceTypePermissioned} -var asteriscTraceTypes = []TraceType{TraceTypeAsterisc} +var cannonTraceTypes = []types.TraceType{types.TraceTypeCannon, types.TraceTypePermissioned} +var asteriscTraceTypes = []types.TraceType{types.TraceTypeAsterisc} func applyValidConfigForCannon(cfg *Config) { cfg.Cannon.VmBin = validCannonBin @@ -49,12 +50,12 @@ func applyValidConfigForAsterisc(cfg *Config) { cfg.Asterisc.Network = validAsteriscNetwork } -func validConfig(traceType TraceType) Config { +func validConfig(traceType types.TraceType) Config { cfg := NewConfig(validGameFactoryAddress, validL1EthRpc, validL1BeaconUrl, validRollupRpc, validL2Rpc, validDatadir, traceType) - if traceType == TraceTypeCannon || traceType == TraceTypePermissioned { + if traceType == types.TraceTypeCannon || traceType == types.TraceTypePermissioned { applyValidConfigForCannon(&cfg) } - if traceType == TraceTypeAsterisc { + if traceType == types.TraceTypeAsterisc { applyValidConfigForAsterisc(&cfg) } return cfg @@ -62,7 +63,7 @@ func validConfig(traceType TraceType) Config { // TestValidConfigIsValid checks that the config provided by validConfig is actually valid func TestValidConfigIsValid(t *testing.T) { - for _, traceType := range TraceTypes { + for _, traceType := range types.TraceTypes { traceType := traceType t.Run(traceType.String(), func(t *testing.T) { err := validConfig(traceType).Check() @@ -73,38 +74,38 @@ func TestValidConfigIsValid(t *testing.T) { func TestTxMgrConfig(t *testing.T) { t.Run("Invalid", func(t *testing.T) { - config := validConfig(TraceTypeCannon) + config := validConfig(types.TraceTypeCannon) config.TxMgrConfig = txmgr.CLIConfig{} require.Equal(t, config.Check().Error(), "must provide a L1 RPC url") }) } func TestL1EthRpcRequired(t *testing.T) { - config := validConfig(TraceTypeCannon) + config := validConfig(types.TraceTypeCannon) config.L1EthRpc = "" require.ErrorIs(t, config.Check(), ErrMissingL1EthRPC) } func TestL1BeaconRequired(t *testing.T) { - config := validConfig(TraceTypeCannon) + config := validConfig(types.TraceTypeCannon) config.L1Beacon = "" require.ErrorIs(t, config.Check(), ErrMissingL1Beacon) } func TestGameFactoryAddressRequired(t *testing.T) { - config := validConfig(TraceTypeCannon) + config := validConfig(types.TraceTypeCannon) config.GameFactoryAddress = common.Address{} require.ErrorIs(t, config.Check(), ErrMissingGameFactoryAddress) } func TestSelectiveClaimResolutionNotRequired(t *testing.T) { - config := validConfig(TraceTypeCannon) + config := validConfig(types.TraceTypeCannon) require.Equal(t, false, config.SelectiveClaimResolution) require.NoError(t, config.Check()) } func TestGameAllowlistNotRequired(t *testing.T) { - config := validConfig(TraceTypeCannon) + config := validConfig(types.TraceTypeCannon) config.GameAllowlist = []common.Address{} require.NoError(t, config.Check()) } @@ -322,33 +323,33 @@ func TestAsteriscRequiredArgs(t *testing.T) { } func TestDatadirRequired(t *testing.T) { - config := validConfig(TraceTypeAlphabet) + config := validConfig(types.TraceTypeAlphabet) config.Datadir = "" require.ErrorIs(t, config.Check(), ErrMissingDatadir) } func TestMaxConcurrency(t *testing.T) { t.Run("Required", func(t *testing.T) { - config := validConfig(TraceTypeAlphabet) + config := validConfig(types.TraceTypeAlphabet) config.MaxConcurrency = 0 require.ErrorIs(t, config.Check(), ErrMaxConcurrencyZero) }) t.Run("DefaultToNumberOfCPUs", func(t *testing.T) { - config := validConfig(TraceTypeAlphabet) + config := validConfig(types.TraceTypeAlphabet) require.EqualValues(t, runtime.NumCPU(), config.MaxConcurrency) }) } func TestHttpPollInterval(t *testing.T) { t.Run("Default", func(t *testing.T) { - config := validConfig(TraceTypeAlphabet) + config := validConfig(types.TraceTypeAlphabet) require.EqualValues(t, DefaultPollInterval, config.PollInterval) }) } func TestRollupRpcRequired(t *testing.T) { - for _, traceType := range TraceTypes { + for _, traceType := range types.TraceTypes { traceType := traceType t.Run(traceType.String(), func(t *testing.T) { config := validConfig(traceType) @@ -359,8 +360,8 @@ func TestRollupRpcRequired(t *testing.T) { } func TestRequireConfigForMultipleTraceTypesForCannon(t *testing.T) { - cfg := validConfig(TraceTypeCannon) - cfg.TraceTypes = []TraceType{TraceTypeCannon, TraceTypeAlphabet} + cfg := validConfig(types.TraceTypeCannon) + cfg.TraceTypes = []types.TraceType{types.TraceTypeCannon, types.TraceTypeAlphabet} // Set all required options and check its valid cfg.RollupRpc = validRollupRpc require.NoError(t, cfg.Check()) @@ -377,8 +378,8 @@ func TestRequireConfigForMultipleTraceTypesForCannon(t *testing.T) { } func TestRequireConfigForMultipleTraceTypesForAsterisc(t *testing.T) { - cfg := validConfig(TraceTypeAsterisc) - cfg.TraceTypes = []TraceType{TraceTypeAsterisc, TraceTypeAlphabet} + cfg := validConfig(types.TraceTypeAsterisc) + cfg.TraceTypes = []types.TraceType{types.TraceTypeAsterisc, types.TraceTypeAlphabet} // Set all required options and check its valid cfg.RollupRpc = validRollupRpc require.NoError(t, cfg.Check()) @@ -395,10 +396,10 @@ func TestRequireConfigForMultipleTraceTypesForAsterisc(t *testing.T) { } func TestRequireConfigForMultipleTraceTypesForCannonAndAsterisc(t *testing.T) { - cfg := validConfig(TraceTypeCannon) + cfg := validConfig(types.TraceTypeCannon) applyValidConfigForAsterisc(&cfg) - cfg.TraceTypes = []TraceType{TraceTypeCannon, TraceTypeAsterisc, TraceTypeAlphabet, TraceTypeFast} + cfg.TraceTypes = []types.TraceType{types.TraceTypeCannon, types.TraceTypeAsterisc, types.TraceTypeAlphabet, types.TraceTypeFast} // Set all required options and check its valid cfg.RollupRpc = validRollupRpc require.NoError(t, cfg.Check()) diff --git a/op-challenger/flags/flags.go b/op-challenger/flags/flags.go index 726501ec65ec..c128e0fa759d 100644 --- a/op-challenger/flags/flags.go +++ b/op-challenger/flags/flags.go @@ -8,6 +8,7 @@ import ( "strings" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/vm" + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum-optimism/optimism/op-service/flags" "github.com/ethereum-optimism/superchain-registry/superchain" "github.com/ethereum/go-ethereum/common" @@ -61,9 +62,9 @@ var ( } TraceTypeFlag = &cli.StringSliceFlag{ Name: "trace-type", - Usage: "The trace types to support. Valid options: " + openum.EnumString(config.TraceTypes), + Usage: "The trace types to support. Valid options: " + openum.EnumString(types.TraceTypes), EnvVars: prefixEnvVars("TRACE_TYPE"), - Value: cli.NewStringSlice(config.TraceTypeCannon.String()), + Value: cli.NewStringSlice(types.TraceTypeCannon.String()), } DatadirFlag = &cli.StringFlag{ Name: "datadir", @@ -339,7 +340,7 @@ func CheckAsteriscFlags(ctx *cli.Context) error { return nil } -func CheckRequired(ctx *cli.Context, traceTypes []config.TraceType) error { +func CheckRequired(ctx *cli.Context, traceTypes []types.TraceType) error { for _, f := range requiredFlags { if !ctx.IsSet(f.Names()[0]) { return fmt.Errorf("flag %s is required", f.Names()[0]) @@ -351,26 +352,26 @@ func CheckRequired(ctx *cli.Context, traceTypes []config.TraceType) error { } for _, traceType := range traceTypes { switch traceType { - case config.TraceTypeCannon, config.TraceTypePermissioned: + case types.TraceTypeCannon, types.TraceTypePermissioned: if err := CheckCannonFlags(ctx); err != nil { return err } - case config.TraceTypeAsterisc: + case types.TraceTypeAsterisc: if err := CheckAsteriscFlags(ctx); err != nil { return err } - case config.TraceTypeAlphabet, config.TraceTypeFast: + case types.TraceTypeAlphabet, types.TraceTypeFast: default: - return fmt.Errorf("invalid trace type. must be one of %v", config.TraceTypes) + return fmt.Errorf("invalid trace type. must be one of %v", types.TraceTypes) } } return nil } -func parseTraceTypes(ctx *cli.Context) ([]config.TraceType, error) { - var traceTypes []config.TraceType +func parseTraceTypes(ctx *cli.Context) ([]types.TraceType, error) { + var traceTypes []types.TraceType for _, typeName := range ctx.StringSlice(TraceTypeFlag.Name) { - traceType := new(config.TraceType) + traceType := new(types.TraceType) if err := traceType.Set(typeName); err != nil { return nil, err } @@ -514,7 +515,7 @@ func NewConfigFromCLI(ctx *cli.Context, logger log.Logger) (*config.Config, erro AdditionalBondClaimants: claimants, RollupRpc: ctx.String(RollupRpcFlag.Name), Cannon: vm.Config{ - VmType: config.TraceTypeCannon.String(), + VmType: types.TraceTypeCannon, L1: l1EthRpc, L1Beacon: l1Beacon, L2: l2Rpc, @@ -530,7 +531,7 @@ func NewConfigFromCLI(ctx *cli.Context, logger log.Logger) (*config.Config, erro CannonAbsolutePreStateBaseURL: cannonPrestatesURL, Datadir: ctx.String(DatadirFlag.Name), Asterisc: vm.Config{ - VmType: config.TraceTypeAsterisc.String(), + VmType: types.TraceTypeAsterisc, L1: l1EthRpc, L1Beacon: l1Beacon, L2: l2Rpc, diff --git a/op-challenger/game/fault/contracts/gamefactory.go b/op-challenger/game/fault/contracts/gamefactory.go index d67a4688c422..cad967d9ec77 100644 --- a/op-challenger/game/fault/contracts/gamefactory.go +++ b/op-challenger/game/fault/contracts/gamefactory.go @@ -7,6 +7,7 @@ import ( "math/big" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/contracts/metrics" + faultTypes "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum-optimism/optimism/op-challenger/game/types" "github.com/ethereum-optimism/optimism/op-service/sources/batching" "github.com/ethereum-optimism/optimism/op-service/sources/batching/rpcblock" @@ -76,7 +77,7 @@ func (f *DisputeGameFactoryContract) GetGame(ctx context.Context, idx uint64, bl return f.decodeGame(idx, result), nil } -func (f *DisputeGameFactoryContract) GetGameImpl(ctx context.Context, gameType uint32) (common.Address, error) { +func (f *DisputeGameFactoryContract) GetGameImpl(ctx context.Context, gameType faultTypes.GameType) (common.Address, error) { defer f.metrics.StartContractRequest("GetGameImpl")() result, err := f.multiCaller.SingleCall(ctx, rpcblock.Latest, f.contract.Call(methodGameImpls, gameType)) if err != nil { diff --git a/op-challenger/game/fault/contracts/gamefactory_test.go b/op-challenger/game/fault/contracts/gamefactory_test.go index aa5af39b4fe4..e2e91e54c0c6 100644 --- a/op-challenger/game/fault/contracts/gamefactory_test.go +++ b/op-challenger/game/fault/contracts/gamefactory_test.go @@ -8,6 +8,7 @@ import ( "testing" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/contracts/metrics" + faultTypes "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum-optimism/optimism/op-challenger/game/types" "github.com/ethereum-optimism/optimism/op-service/sources/batching" "github.com/ethereum-optimism/optimism/op-service/sources/batching/rpcblock" @@ -190,7 +191,7 @@ func TestGetGameFromParameters(t *testing.T) { func TestGetGameImpl(t *testing.T) { stubRpc, factory := setupDisputeGameFactoryTest(t) - gameType := uint32(3) + gameType := faultTypes.CannonGameType gameImplAddr := common.Address{0xaa} stubRpc.SetResponse( factoryAddr, @@ -198,7 +199,7 @@ func TestGetGameImpl(t *testing.T) { rpcblock.Latest, []interface{}{gameType}, []interface{}{gameImplAddr}) - actual, err := factory.GetGameImpl(context.Background(), gameType) + actual, err := factory.GetGameImpl(context.Background(), faultTypes.CannonGameType) require.NoError(t, err) require.Equal(t, gameImplAddr, actual) } diff --git a/op-challenger/game/fault/register.go b/op-challenger/game/fault/register.go index 7478dd4b23fe..9637b16addec 100644 --- a/op-challenger/game/fault/register.go +++ b/op-challenger/game/fault/register.go @@ -30,8 +30,8 @@ import ( type CloseFunc func() type Registry interface { - RegisterGameType(gameType uint32, creator scheduler.PlayerCreator) - RegisterBondContract(gameType uint32, creator claims.BondContractCreator) + RegisterGameType(gameType faultTypes.GameType, creator scheduler.PlayerCreator) + RegisterBondContract(gameType faultTypes.GameType, creator claims.BondContractCreator) } type OracleRegistry interface { @@ -73,27 +73,27 @@ func RegisterGameTypes( } syncValidator := newSyncStatusValidator(rollupClient) - if cfg.TraceTypeEnabled(config.TraceTypeCannon) { + if cfg.TraceTypeEnabled(faultTypes.TraceTypeCannon) { if err := registerCannon(faultTypes.CannonGameType, registry, oracles, ctx, systemClock, l1Clock, logger, m, cfg, syncValidator, rollupClient, txSender, gameFactory, caller, l2Client, l1HeaderSource, selective, claimants); err != nil { return nil, fmt.Errorf("failed to register cannon game type: %w", err) } } - if cfg.TraceTypeEnabled(config.TraceTypePermissioned) { + if cfg.TraceTypeEnabled(faultTypes.TraceTypePermissioned) { if err := registerCannon(faultTypes.PermissionedGameType, registry, oracles, ctx, systemClock, l1Clock, logger, m, cfg, syncValidator, rollupClient, txSender, gameFactory, caller, l2Client, l1HeaderSource, selective, claimants); err != nil { return nil, fmt.Errorf("failed to register permissioned cannon game type: %w", err) } } - if cfg.TraceTypeEnabled(config.TraceTypeAsterisc) { + if cfg.TraceTypeEnabled(faultTypes.TraceTypeAsterisc) { if err := registerAsterisc(faultTypes.AsteriscGameType, registry, oracles, ctx, systemClock, l1Clock, logger, m, cfg, syncValidator, rollupClient, txSender, gameFactory, caller, l2Client, l1HeaderSource, selective, claimants); err != nil { return nil, fmt.Errorf("failed to register asterisc game type: %w", err) } } - if cfg.TraceTypeEnabled(config.TraceTypeFast) { + if cfg.TraceTypeEnabled(faultTypes.TraceTypeFast) { if err := registerAlphabet(faultTypes.FastGameType, registry, oracles, ctx, systemClock, l1Clock, logger, m, syncValidator, rollupClient, l2Client, txSender, gameFactory, caller, l1HeaderSource, selective, claimants); err != nil { return nil, fmt.Errorf("failed to register fast game type: %w", err) } } - if cfg.TraceTypeEnabled(config.TraceTypeAlphabet) { + if cfg.TraceTypeEnabled(faultTypes.TraceTypeAlphabet) { if err := registerAlphabet(faultTypes.AlphabetGameType, registry, oracles, ctx, systemClock, l1Clock, logger, m, syncValidator, rollupClient, l2Client, txSender, gameFactory, caller, l1HeaderSource, selective, claimants); err != nil { return nil, fmt.Errorf("failed to register alphabet game type: %w", err) } @@ -102,7 +102,7 @@ func RegisterGameTypes( } func registerAlphabet( - gameType uint32, + gameType faultTypes.GameType, registry Registry, oracles OracleRegistry, ctx context.Context, @@ -167,7 +167,7 @@ func registerAlphabet( return nil } -func registerOracle(ctx context.Context, m metrics.Metricer, oracles OracleRegistry, gameFactory *contracts.DisputeGameFactoryContract, caller *batching.MultiCaller, gameType uint32) error { +func registerOracle(ctx context.Context, m metrics.Metricer, oracles OracleRegistry, gameFactory *contracts.DisputeGameFactoryContract, caller *batching.MultiCaller, gameType faultTypes.GameType) error { implAddr, err := gameFactory.GetGameImpl(ctx, gameType) if err != nil { return fmt.Errorf("failed to load implementation for game type %v: %w", gameType, err) @@ -185,7 +185,7 @@ func registerOracle(ctx context.Context, m metrics.Metricer, oracles OracleRegis } func registerAsterisc( - gameType uint32, + gameType faultTypes.GameType, registry Registry, oracles OracleRegistry, ctx context.Context, @@ -278,7 +278,7 @@ func registerAsterisc( } func registerCannon( - gameType uint32, + gameType faultTypes.GameType, registry Registry, oracles OracleRegistry, ctx context.Context, diff --git a/op-challenger/game/fault/trace/vm/executor.go b/op-challenger/game/fault/trace/vm/executor.go index 564ef6ac8d20..a26133e083b3 100644 --- a/op-challenger/game/fault/trace/vm/executor.go +++ b/op-challenger/game/fault/trace/vm/executor.go @@ -11,6 +11,7 @@ import ( "time" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils" + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum/go-ethereum/log" ) @@ -19,7 +20,7 @@ type Metricer interface { } type Config struct { - VmType string + VmType types.TraceType L1 string L1Beacon string L2 string @@ -121,6 +122,6 @@ func (e *Executor) DoGenerateProof(ctx context.Context, dir string, begin uint64 e.logger.Info("Generating trace", "proof", end, "cmd", e.cfg.VmBin, "args", strings.Join(args, ", ")) execStart := time.Now() err = e.cmdExecutor(ctx, e.logger.New("proof", end), e.cfg.VmBin, args...) - e.metrics.RecordVmExecutionTime(e.cfg.VmType, time.Since(execStart)) + e.metrics.RecordVmExecutionTime(e.cfg.VmType.String(), time.Since(execStart)) return err } diff --git a/op-challenger/game/fault/types/types.go b/op-challenger/game/fault/types/types.go index da63cfd2f760..aca80577b36a 100644 --- a/op-challenger/game/fault/types/types.go +++ b/op-challenger/game/fault/types/types.go @@ -3,6 +3,8 @@ package types import ( "context" "errors" + "fmt" + "math" "math/big" "time" @@ -18,14 +20,94 @@ var ( ErrL2BlockNumberValid = errors.New("l2 block number is valid") ) +type GameType uint32 + +const ( + CannonGameType GameType = 0 + PermissionedGameType GameType = 1 + AsteriscGameType GameType = 2 + FastGameType GameType = 254 + AlphabetGameType GameType = 255 + UnknownGameType GameType = math.MaxUint32 +) + +func (t GameType) MarshalText() ([]byte, error) { + return []byte(t.String()), nil +} + +func (t GameType) String() string { + switch t { + case CannonGameType: + return "cannon" + case PermissionedGameType: + return "permissioned" + case AsteriscGameType: + return "asterisc" + case FastGameType: + return "fast" + case AlphabetGameType: + return "alphabet" + default: + return fmt.Sprintf("", t) + } +} + +type TraceType string + const ( - CannonGameType uint32 = 0 - PermissionedGameType uint32 = 1 - AsteriscGameType uint32 = 2 - FastGameType uint32 = 254 - AlphabetGameType uint32 = 255 + TraceTypeAlphabet TraceType = "alphabet" + TraceTypeFast TraceType = "fast" + TraceTypeCannon TraceType = "cannon" + TraceTypeAsterisc TraceType = "asterisc" + TraceTypePermissioned TraceType = "permissioned" ) +var TraceTypes = []TraceType{TraceTypeAlphabet, TraceTypeCannon, TraceTypePermissioned, TraceTypeAsterisc, TraceTypeFast} + +func (t TraceType) String() string { + return string(t) +} + +// Set implements the Set method required by the [cli.Generic] interface. +func (t *TraceType) Set(value string) error { + if !ValidTraceType(TraceType(value)) { + return fmt.Errorf("unknown trace type: %q", value) + } + *t = TraceType(value) + return nil +} + +func (t *TraceType) Clone() any { + cpy := *t + return &cpy +} + +func ValidTraceType(value TraceType) bool { + for _, t := range TraceTypes { + if t == value { + return true + } + } + return false +} + +func (t TraceType) GameType() GameType { + switch t { + case TraceTypeCannon: + return CannonGameType + case TraceTypePermissioned: + return PermissionedGameType + case TraceTypeAsterisc: + return AsteriscGameType + case TraceTypeFast: + return FastGameType + case TraceTypeAlphabet: + return AlphabetGameType + default: + return UnknownGameType + } +} + type ClockReader interface { Now() time.Time } diff --git a/op-challenger/game/registry/registry.go b/op-challenger/game/registry/registry.go index d6713a918ddc..3e016eb0d837 100644 --- a/op-challenger/game/registry/registry.go +++ b/op-challenger/game/registry/registry.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/claims" + faultTypes "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum-optimism/optimism/op-challenger/game/scheduler" "github.com/ethereum-optimism/optimism/op-challenger/game/types" ) @@ -12,27 +13,27 @@ import ( var ErrUnsupportedGameType = errors.New("unsupported game type") type GameTypeRegistry struct { - types map[uint32]scheduler.PlayerCreator - bondCreators map[uint32]claims.BondContractCreator + types map[faultTypes.GameType]scheduler.PlayerCreator + bondCreators map[faultTypes.GameType]claims.BondContractCreator } func NewGameTypeRegistry() *GameTypeRegistry { return &GameTypeRegistry{ - types: make(map[uint32]scheduler.PlayerCreator), - bondCreators: make(map[uint32]claims.BondContractCreator), + types: make(map[faultTypes.GameType]scheduler.PlayerCreator), + bondCreators: make(map[faultTypes.GameType]claims.BondContractCreator), } } // RegisterGameType registers a scheduler.PlayerCreator to use for a specific game type. // Panics if the same game type is registered multiple times, since this indicates a significant programmer error. -func (r *GameTypeRegistry) RegisterGameType(gameType uint32, creator scheduler.PlayerCreator) { +func (r *GameTypeRegistry) RegisterGameType(gameType faultTypes.GameType, creator scheduler.PlayerCreator) { if _, ok := r.types[gameType]; ok { panic(fmt.Errorf("duplicate creator registered for game type: %v", gameType)) } r.types[gameType] = creator } -func (r *GameTypeRegistry) RegisterBondContract(gameType uint32, creator claims.BondContractCreator) { +func (r *GameTypeRegistry) RegisterBondContract(gameType faultTypes.GameType, creator claims.BondContractCreator) { if _, ok := r.bondCreators[gameType]; ok { panic(fmt.Errorf("duplicate bond contract registered for game type: %v", gameType)) } @@ -41,7 +42,7 @@ func (r *GameTypeRegistry) RegisterBondContract(gameType uint32, creator claims. // CreatePlayer creates a new game player for the given game, using the specified directory for persisting data. func (r *GameTypeRegistry) CreatePlayer(game types.GameMetadata, dir string) (scheduler.GamePlayer, error) { - creator, ok := r.types[game.GameType] + creator, ok := r.types[faultTypes.GameType(game.GameType)] if !ok { return nil, fmt.Errorf("%w: %v", ErrUnsupportedGameType, game.GameType) } @@ -49,7 +50,7 @@ func (r *GameTypeRegistry) CreatePlayer(game types.GameMetadata, dir string) (sc } func (r *GameTypeRegistry) CreateBondContract(game types.GameMetadata) (claims.BondContract, error) { - creator, ok := r.bondCreators[game.GameType] + creator, ok := r.bondCreators[faultTypes.GameType(game.GameType)] if !ok { return nil, fmt.Errorf("%w: %v", ErrUnsupportedGameType, game.GameType) } diff --git a/op-dispute-mon/mon/extract/caller.go b/op-dispute-mon/mon/extract/caller.go index 5a72e0a597b2..7a117e526beb 100644 --- a/op-dispute-mon/mon/extract/caller.go +++ b/op-dispute-mon/mon/extract/caller.go @@ -50,7 +50,7 @@ func (g *GameCallerCreator) CreateContract(ctx context.Context, game gameTypes.G if fdg, ok := g.cache.Get(game.Proxy); ok { return fdg, nil } - switch game.GameType { + switch faultTypes.GameType(game.GameType) { case faultTypes.CannonGameType, faultTypes.PermissionedGameType, faultTypes.AsteriscGameType, faultTypes.AlphabetGameType: fdg, err := contracts.NewFaultDisputeGameContract(ctx, g.m, game.Proxy, g.caller) if err != nil { diff --git a/op-dispute-mon/mon/extract/caller_test.go b/op-dispute-mon/mon/extract/caller_test.go index 9ac263155786..12f8941bcc3f 100644 --- a/op-dispute-mon/mon/extract/caller_test.go +++ b/op-dispute-mon/mon/extract/caller_test.go @@ -29,15 +29,15 @@ func TestMetadataCreator_CreateContract(t *testing.T) { }{ { name: "validCannonGameType", - game: types.GameMetadata{GameType: faultTypes.CannonGameType, Proxy: fdgAddr}, + game: types.GameMetadata{GameType: uint32(faultTypes.CannonGameType), Proxy: fdgAddr}, }, { name: "validAsteriscGameType", - game: types.GameMetadata{GameType: faultTypes.AsteriscGameType, Proxy: fdgAddr}, + game: types.GameMetadata{GameType: uint32(faultTypes.AsteriscGameType), Proxy: fdgAddr}, }, { name: "validAlphabetGameType", - game: types.GameMetadata{GameType: faultTypes.AlphabetGameType, Proxy: fdgAddr}, + game: types.GameMetadata{GameType: uint32(faultTypes.AlphabetGameType), Proxy: fdgAddr}, }, { name: "InvalidGameType", diff --git a/op-e2e/e2eutils/challenger/helper.go b/op-e2e/e2eutils/challenger/helper.go index 5431efbd3992..e276ab511adf 100644 --- a/op-e2e/e2eutils/challenger/helper.go +++ b/op-e2e/e2eutils/challenger/helper.go @@ -21,6 +21,7 @@ import ( challenger "github.com/ethereum-optimism/optimism/op-challenger" "github.com/ethereum-optimism/optimism/op-challenger/config" + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait" "github.com/ethereum-optimism/optimism/op-node/rollup" @@ -122,20 +123,20 @@ func applyCannonConfig(c *config.Config, t *testing.T, rollupCfg *rollup.Config, func WithCannon(t *testing.T, rollupCfg *rollup.Config, l2Genesis *core.Genesis) Option { return func(c *config.Config) { - c.TraceTypes = append(c.TraceTypes, config.TraceTypeCannon) + c.TraceTypes = append(c.TraceTypes, types.TraceTypeCannon) applyCannonConfig(c, t, rollupCfg, l2Genesis) } } func WithAlphabet() Option { return func(c *config.Config) { - c.TraceTypes = append(c.TraceTypes, config.TraceTypeAlphabet) + c.TraceTypes = append(c.TraceTypes, types.TraceTypeAlphabet) } } func WithFastGames() Option { return func(c *config.Config) { - c.TraceTypes = append(c.TraceTypes, config.TraceTypeFast) + c.TraceTypes = append(c.TraceTypes, types.TraceTypeFast) } } From d1ea098c1f99c396de407a7ba69bc79d1bc578fe Mon Sep 17 00:00:00 2001 From: Inphi Date: Wed, 26 Jun 2024 20:49:08 -0700 Subject: [PATCH 115/141] cannon: Fix post-state hash in proof (#11005) * Reapply "cannon: Generic FPVM interface (#10993)" (#11004) This reverts commit 124b1a9ef48f856237879af8d2bec84435be3a5c. * cannon: Fix post-state hash in proof * remove PostStateHash from StepWitness --- cannon/cmd/run.go | 93 +++++++++++-------- cannon/cmd/witness.go | 6 +- cannon/mipsevm/evm_test.go | 13 +-- cannon/mipsevm/fuzz_evm_test.go | 18 ++-- cannon/mipsevm/iface.go | 39 ++++++++ cannon/mipsevm/instrumented.go | 33 +++++-- cannon/mipsevm/state.go | 22 ++++- cannon/mipsevm/state_test.go | 6 +- cannon/mipsevm/witness.go | 3 +- .../game/fault/trace/cannon/prestate.go | 14 +-- .../game/fault/trace/cannon/prestate_test.go | 3 +- .../game/fault/trace/cannon/provider.go | 6 +- .../game/fault/trace/cannon/provider_test.go | 8 +- 13 files changed, 173 insertions(+), 91 deletions(-) create mode 100644 cannon/mipsevm/iface.go diff --git a/cannon/cmd/run.go b/cannon/cmd/run.go index f4d57a114d5a..df1870d73554 100644 --- a/cannon/cmd/run.go +++ b/cannon/cmd/run.go @@ -23,6 +23,13 @@ import ( ) var ( + RunType = &cli.StringFlag{ + Name: "type", + Usage: "VM type to run. Options are 'cannon' (default)", + Value: "cannon", + // TODO(client-pod#903): This should be required once we have additional vm types + Required: false, + } RunInputFlag = &cli.PathFlag{ Name: "input", Usage: "path of input JSON state. Stdin if left empty.", @@ -250,14 +257,20 @@ func Guard(proc *os.ProcessState, fn StepFn) StepFn { var _ mipsevm.PreimageOracle = (*ProcessPreimageOracle)(nil) +type VMType string + +var cannonVMType VMType = "cannon" + func Run(ctx *cli.Context) error { if ctx.Bool(RunPProfCPU.Name) { defer profile.Start(profile.NoShutdownHook, profile.ProfilePath("."), profile.CPUProfile).Stop() } - state, err := jsonutil.LoadJSON[mipsevm.State](ctx.Path(RunInputFlag.Name)) - if err != nil { - return err + var vmType VMType + if vmTypeStr := ctx.String(RunType.Name); vmTypeStr == string(cannonVMType) { + vmType = cannonVMType + } else { + return fmt.Errorf("unknown VM type %q", vmType) } guestLogger := Logger(os.Stderr, log.LevelInfo) @@ -349,53 +362,65 @@ func Run(ctx *cli.Context) error { } } - us := mipsevm.NewInstrumentedState(state, po, outLog, errLog) - debugProgram := ctx.Bool(RunDebugFlag.Name) - if debugProgram { - if metaPath := ctx.Path(RunMetaFlag.Name); metaPath == "" { - return fmt.Errorf("cannot enable debug mode without a metadata file") + var vm mipsevm.FPVM + var debugProgram bool + if vmType == cannonVMType { + cannon, err := mipsevm.NewInstrumentedStateFromFile(ctx.Path(RunInputFlag.Name), po, outLog, errLog) + if err != nil { + return err } - if err := us.InitDebug(meta); err != nil { - return fmt.Errorf("failed to initialize debug mode: %w", err) + debugProgram = ctx.Bool(RunDebugFlag.Name) + if debugProgram { + if metaPath := ctx.Path(RunMetaFlag.Name); metaPath == "" { + return fmt.Errorf("cannot enable debug mode without a metadata file") + } + if err := cannon.InitDebug(meta); err != nil { + return fmt.Errorf("failed to initialize debug mode: %w", err) + } } + vm = cannon + } else { + return fmt.Errorf("unknown VM type %q", vmType) } + proofFmt := ctx.String(RunProofFmtFlag.Name) snapshotFmt := ctx.String(RunSnapshotFmtFlag.Name) - stepFn := us.Step + stepFn := vm.Step if po.cmd != nil { stepFn = Guard(po.cmd.ProcessState, stepFn) } start := time.Now() - startStep := state.Step + + state := vm.GetState() + startStep := state.GetStep() // avoid symbol lookups every instruction by preparing a matcher func sleepCheck := meta.SymbolMatcher("runtime.notesleep") - for !state.Exited { - if state.Step%100 == 0 { // don't do the ctx err check (includes lock) too often + for !state.GetExited() { + step := state.GetStep() + if step%100 == 0 { // don't do the ctx err check (includes lock) too often if err := ctx.Context.Err(); err != nil { return err } } - step := state.Step - if infoAt(state) { delta := time.Since(start) l.Info("processing", "step", step, - "pc", mipsevm.HexU32(state.Cpu.PC), - "insn", mipsevm.HexU32(state.Memory.GetMemory(state.Cpu.PC)), + "pc", mipsevm.HexU32(state.GetPC()), + "insn", mipsevm.HexU32(state.GetMemory().GetMemory(state.GetPC())), "ips", float64(step-startStep)/(float64(delta)/float64(time.Second)), - "pages", state.Memory.PageCount(), - "mem", state.Memory.Usage(), - "name", meta.LookupSymbol(state.Cpu.PC), + "pages", state.GetMemory().PageCount(), + "mem", state.GetMemory().Usage(), + "name", meta.LookupSymbol(state.GetPC()), ) } - if sleepCheck(state.Cpu.PC) { // don't loop forever when we get stuck because of an unexpected bad program + if sleepCheck(state.GetPC()) { // don't loop forever when we get stuck because of an unexpected bad program return fmt.Errorf("got stuck in Go sleep at step %d", step) } @@ -411,21 +436,14 @@ func Run(ctx *cli.Context) error { } if proofAt(state) { - preStateHash, err := state.EncodeWitness().StateHash() - if err != nil { - return fmt.Errorf("failed to hash prestate witness: %w", err) - } witness, err := stepFn(true) if err != nil { - return fmt.Errorf("failed at proof-gen step %d (PC: %08x): %w", step, state.Cpu.PC, err) - } - postStateHash, err := state.EncodeWitness().StateHash() - if err != nil { - return fmt.Errorf("failed to hash poststate witness: %w", err) + return fmt.Errorf("failed at proof-gen step %d (PC: %08x): %w", step, state.GetPC(), err) } + _, postStateHash := state.EncodeWitness() proof := &Proof{ Step: step, - Pre: preStateHash, + Pre: witness.StateHash, Post: postStateHash, StateData: witness.State, ProofData: witness.MemProof, @@ -441,11 +459,11 @@ func Run(ctx *cli.Context) error { } else { _, err = stepFn(false) if err != nil { - return fmt.Errorf("failed at step %d (PC: %08x): %w", step, state.Cpu.PC, err) + return fmt.Errorf("failed at step %d (PC: %08x): %w", step, state.GetPC(), err) } } - lastPreimageKey, lastPreimageValue, lastPreimageOffset := us.LastPreimage() + lastPreimageKey, lastPreimageValue, lastPreimageOffset := vm.LastPreimage() if lastPreimageOffset != ^uint32(0) { if stopAtAnyPreimage { l.Info("Stopping at preimage read") @@ -464,16 +482,16 @@ func Run(ctx *cli.Context) error { } } } - l.Info("Execution stopped", "exited", state.Exited, "code", state.ExitCode) + l.Info("Execution stopped", "exited", state.GetExited(), "code", state.GetExitCode()) if debugProgram { - us.Traceback() + vm.Traceback() } if err := jsonutil.WriteJSON(ctx.Path(RunOutputFlag.Name), state, OutFilePerm); err != nil { return fmt.Errorf("failed to write state output: %w", err) } if debugInfoFile := ctx.Path(RunDebugInfoFlag.Name); debugInfoFile != "" { - if err := jsonutil.WriteJSON(debugInfoFile, us.GetDebugInfo(), OutFilePerm); err != nil { + if err := jsonutil.WriteJSON(debugInfoFile, vm.GetDebugInfo(), OutFilePerm); err != nil { return fmt.Errorf("failed to write benchmark data: %w", err) } } @@ -486,6 +504,7 @@ var RunCommand = &cli.Command{ Description: "Run VM step(s) and generate proof data to replicate onchain. See flags to match when to output a proof, a snapshot, or to stop early.", Action: Run, Flags: []cli.Flag{ + RunType, RunInputFlag, RunOutputFlag, RunProofAtFlag, diff --git a/cannon/cmd/witness.go b/cannon/cmd/witness.go index c2f38daa3621..c869f2b4cf86 100644 --- a/cannon/cmd/witness.go +++ b/cannon/cmd/witness.go @@ -30,11 +30,7 @@ func Witness(ctx *cli.Context) error { if err != nil { return fmt.Errorf("invalid input state (%v): %w", input, err) } - witness := state.EncodeWitness() - h, err := witness.StateHash() - if err != nil { - return fmt.Errorf("failed to compute witness hash: %w", err) - } + witness, h := state.EncodeWitness() if output != "" { if err := os.WriteFile(output, witness, 0755); err != nil { return fmt.Errorf("writing output to %v: %w", output, err) diff --git a/cannon/mipsevm/evm_test.go b/cannon/mipsevm/evm_test.go index 14c53220c432..edc6675f5581 100644 --- a/cannon/mipsevm/evm_test.go +++ b/cannon/mipsevm/evm_test.go @@ -196,7 +196,7 @@ func TestEVM(t *testing.T) { evmPost := evm.Step(t, stepWitness) // verify the post-state matches. // TODO: maybe more readable to decode the evmPost state, and do attribute-wise comparison. - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equalf(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM at step %d", state.Step) } @@ -243,7 +243,7 @@ func TestEVMSingleStep(t *testing.T) { evm := NewMIPSEVM(contracts, addrs) evm.SetTracer(tracer) evmPost := evm.Step(t, stepWitness) - goPost := us.state.EncodeWitness() + goPost, _ := us.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -421,7 +421,7 @@ func TestEVMSysWriteHint(t *testing.T) { evm := NewMIPSEVM(contracts, addrs) evm.SetTracer(tracer) evmPost := evm.Step(t, stepWitness) - goPost := us.state.EncodeWitness() + goPost, _ := us.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -459,8 +459,9 @@ func TestEVMFault(t *testing.T) { require.Panics(t, func() { _, _ = us.Step(true) }) insnProof := initialState.Memory.MerkleProof(0) + encodedWitness, _ := initialState.EncodeWitness() stepWitness := &StepWitness{ - State: initialState.EncodeWitness(), + State: encodedWitness, MemProof: insnProof[:], } input := encodeStepInput(t, stepWitness, LocalContext{}, contracts.MIPS) @@ -509,7 +510,7 @@ func TestHelloEVM(t *testing.T) { evmPost := evm.Step(t, stepWitness) // verify the post-state matches. // TODO: maybe more readable to decode the evmPost state, and do attribute-wise comparison. - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") } @@ -560,7 +561,7 @@ func TestClaimEVM(t *testing.T) { evm.SetTracer(tracer) evmPost := evm.Step(t, stepWitness) - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") } diff --git a/cannon/mipsevm/fuzz_evm_test.go b/cannon/mipsevm/fuzz_evm_test.go index 9b11f9363c93..06b77a10247f 100644 --- a/cannon/mipsevm/fuzz_evm_test.go +++ b/cannon/mipsevm/fuzz_evm_test.go @@ -61,7 +61,7 @@ func FuzzStateSyscallBrk(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -112,7 +112,7 @@ func FuzzStateSyscallClone(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -173,7 +173,7 @@ func FuzzStateSyscallMmap(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -223,7 +223,7 @@ func FuzzStateSyscallExitGroup(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -288,7 +288,7 @@ func FuzzStateSyscallFcntl(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -340,7 +340,7 @@ func FuzzStateHintRead(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -406,7 +406,7 @@ func FuzzStatePreimageRead(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -466,7 +466,7 @@ func FuzzStateHintWrite(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) @@ -521,7 +521,7 @@ func FuzzStatePreimageWrite(f *testing.F) { evm := NewMIPSEVM(contracts, addrs) evmPost := evm.Step(t, stepWitness) - goPost := goState.state.EncodeWitness() + goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") }) diff --git a/cannon/mipsevm/iface.go b/cannon/mipsevm/iface.go new file mode 100644 index 000000000000..2cc8f939fceb --- /dev/null +++ b/cannon/mipsevm/iface.go @@ -0,0 +1,39 @@ +package mipsevm + +import "github.com/ethereum/go-ethereum/common" + +type FPVMState interface { + GetMemory() *Memory + + // GetPC returns the currently executing program counter + GetPC() uint32 + + // GetStep returns the current VM step + GetStep() uint64 + + // GetExited returns whether the state exited bit is set + GetExited() bool + + // GetExitCode returns the exit code + GetExitCode() uint8 + + // EncodeWitness returns the witness for the current state and the state hash + EncodeWitness() (witness []byte, hash common.Hash) +} + +type FPVM interface { + // GetState returns the current state of the VM. The FPVMState is updated by successive calls to Step + GetState() FPVMState + + // Step executes a single instruction and returns the witness for the step + Step(includeProof bool) (*StepWitness, error) + + // LastPreimage returns the last preimage accessed by the VM + LastPreimage() (preimageKey [32]byte, preimage []byte, preimageOffset uint32) + + // Traceback prints a traceback of the program to the console + Traceback() + + // GetDebugInfo returns debug information about the VM + GetDebugInfo() *DebugInfo +} diff --git a/cannon/mipsevm/instrumented.go b/cannon/mipsevm/instrumented.go index 011c7c4d0630..fad3e541c1a1 100644 --- a/cannon/mipsevm/instrumented.go +++ b/cannon/mipsevm/instrumented.go @@ -3,6 +3,8 @@ package mipsevm import ( "errors" "io" + + "github.com/ethereum-optimism/optimism/op-service/jsonutil" ) type PreimageOracle interface { @@ -48,6 +50,19 @@ func NewInstrumentedState(state *State, po PreimageOracle, stdOut, stdErr io.Wri } } +func NewInstrumentedStateFromFile(stateFile string, po PreimageOracle, stdOut, stdErr io.Writer) (*InstrumentedState, error) { + state, err := jsonutil.LoadJSON[State](stateFile) + if err != nil { + return nil, err + } + return &InstrumentedState{ + state: state, + stdOut: stdOut, + stdErr: stdErr, + preimageOracle: &trackingOracle{po: po}, + }, nil +} + func (m *InstrumentedState) InitDebug(meta *Metadata) error { if meta == nil { return errors.New("metadata is nil") @@ -64,9 +79,11 @@ func (m *InstrumentedState) Step(proof bool) (wit *StepWitness, err error) { if proof { insnProof := m.state.Memory.MerkleProof(m.state.Cpu.PC) + encodedWitness, stateHash := m.state.EncodeWitness() wit = &StepWitness{ - State: m.state.EncodeWitness(), - MemProof: insnProof[:], + State: encodedWitness, + StateHash: stateHash, + MemProof: insnProof[:], } } err = m.mipsStep() @@ -89,11 +106,15 @@ func (m *InstrumentedState) LastPreimage() ([32]byte, []byte, uint32) { return m.lastPreimageKey, m.lastPreimage, m.lastPreimageOffset } -func (d *InstrumentedState) GetDebugInfo() *DebugInfo { +func (m *InstrumentedState) GetState() FPVMState { + return m.state +} + +func (m *InstrumentedState) GetDebugInfo() *DebugInfo { return &DebugInfo{ - Pages: d.state.Memory.PageCount(), - NumPreimageRequests: d.preimageOracle.numPreimageRequests, - TotalPreimageSize: d.preimageOracle.totalPreimageSize, + Pages: m.state.Memory.PageCount(), + NumPreimageRequests: m.preimageOracle.numPreimageRequests, + TotalPreimageSize: m.preimageOracle.totalPreimageSize, } } diff --git a/cannon/mipsevm/state.go b/cannon/mipsevm/state.go index c8a681f23e37..474f80021969 100644 --- a/cannon/mipsevm/state.go +++ b/cannon/mipsevm/state.go @@ -104,13 +104,23 @@ func (s *State) UnmarshalJSON(data []byte) error { return nil } +func (s *State) GetPC() uint32 { return s.Cpu.PC } + +func (s *State) GetExitCode() uint8 { return s.ExitCode } + +func (s *State) GetExited() bool { return s.Exited } + func (s *State) GetStep() uint64 { return s.Step } func (s *State) VMStatus() uint8 { return vmStatus(s.Exited, s.ExitCode) } -func (s *State) EncodeWitness() StateWitness { +func (s *State) GetMemory() *Memory { + return s.Memory +} + +func (s *State) EncodeWitness() ([]byte, common.Hash) { out := make([]byte, 0) memRoot := s.Memory.MerkleRoot() out = append(out, memRoot[:]...) @@ -131,7 +141,7 @@ func (s *State) EncodeWitness() StateWitness { for _, r := range s.Registers { out = binary.BigEndian.AppendUint32(out, r) } - return out + return out, stateHashFromWitness(out) } type StateWitness []byte @@ -147,14 +157,20 @@ func (sw StateWitness) StateHash() (common.Hash, error) { if len(sw) != 226 { return common.Hash{}, fmt.Errorf("Invalid witness length. Got %d, expected 226", len(sw)) } + return stateHashFromWitness(sw), nil +} +func stateHashFromWitness(sw []byte) common.Hash { + if len(sw) != 226 { + panic("Invalid witness length") + } hash := crypto.Keccak256Hash(sw) offset := 32*2 + 4*6 exitCode := sw[offset] exited := sw[offset+1] status := vmStatus(exited == 1, exitCode) hash[0] = status - return hash, nil + return hash } func vmStatus(exited bool, exitCode uint8) uint8 { diff --git a/cannon/mipsevm/state_test.go b/cannon/mipsevm/state_test.go index dfb90674ec78..fe36267926ca 100644 --- a/cannon/mipsevm/state_test.go +++ b/cannon/mipsevm/state_test.go @@ -104,9 +104,7 @@ func TestStateHash(t *testing.T) { ExitCode: c.exitCode, } - actualWitness := state.EncodeWitness() - actualStateHash, err := StateWitness(actualWitness).StateHash() - require.NoError(t, err, "Error hashing witness") + actualWitness, actualStateHash := state.EncodeWitness() require.Equal(t, len(actualWitness), StateWitnessSize, "Incorrect witness size") expectedWitness := make(StateWitness, 226) @@ -118,7 +116,7 @@ func TestStateHash(t *testing.T) { exited = 1 } expectedWitness[exitedOffset+1] = uint8(exited) - require.Equal(t, expectedWitness[:], actualWitness[:], "Incorrect witness") + require.EqualValues(t, expectedWitness[:], actualWitness[:], "Incorrect witness") expectedStateHash := crypto.Keccak256Hash(actualWitness) expectedStateHash[0] = vmStatus(c.exited, c.exitCode) diff --git a/cannon/mipsevm/witness.go b/cannon/mipsevm/witness.go index 58039a86ea32..ef75db69c65c 100644 --- a/cannon/mipsevm/witness.go +++ b/cannon/mipsevm/witness.go @@ -6,7 +6,8 @@ type LocalContext common.Hash type StepWitness struct { // encoded state witness - State []byte + State []byte + StateHash common.Hash MemProof []byte diff --git a/op-challenger/game/fault/trace/cannon/prestate.go b/op-challenger/game/fault/trace/cannon/prestate.go index 67d7c55389c2..3853e619567b 100644 --- a/op-challenger/game/fault/trace/cannon/prestate.go +++ b/op-challenger/game/fault/trace/cannon/prestate.go @@ -6,7 +6,6 @@ import ( "github.com/ethereum/go-ethereum/common" - "github.com/ethereum-optimism/optimism/cannon/mipsevm" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" ) @@ -22,26 +21,23 @@ func NewPrestateProvider(prestate string) *CannonPrestateProvider { return &CannonPrestateProvider{prestate: prestate} } -func (p *CannonPrestateProvider) absolutePreState() ([]byte, error) { +func (p *CannonPrestateProvider) absolutePreState() ([]byte, common.Hash, error) { state, err := parseState(p.prestate) if err != nil { - return nil, fmt.Errorf("cannot load absolute pre-state: %w", err) + return nil, common.Hash{}, fmt.Errorf("cannot load absolute pre-state: %w", err) } - return state.EncodeWitness(), nil + witness, hash := state.EncodeWitness() + return witness, hash, nil } func (p *CannonPrestateProvider) AbsolutePreStateCommitment(_ context.Context) (common.Hash, error) { if p.prestateCommitment != (common.Hash{}) { return p.prestateCommitment, nil } - state, err := p.absolutePreState() + _, hash, err := p.absolutePreState() if err != nil { return common.Hash{}, fmt.Errorf("cannot load absolute pre-state: %w", err) } - hash, err := mipsevm.StateWitness(state).StateHash() - if err != nil { - return common.Hash{}, fmt.Errorf("cannot hash absolute pre-state: %w", err) - } p.prestateCommitment = hash return hash, nil } diff --git a/op-challenger/game/fault/trace/cannon/prestate_test.go b/op-challenger/game/fault/trace/cannon/prestate_test.go index a8616f171180..9dadbbc94ff8 100644 --- a/op-challenger/game/fault/trace/cannon/prestate_test.go +++ b/op-challenger/game/fault/trace/cannon/prestate_test.go @@ -56,8 +56,7 @@ func TestAbsolutePreStateCommitment(t *testing.T) { Step: 0, Registers: [32]uint32{}, } - expected, err := state.EncodeWitness().StateHash() - require.NoError(t, err) + _, expected := state.EncodeWitness() require.Equal(t, expected, actual) }) diff --git a/op-challenger/game/fault/trace/cannon/provider.go b/op-challenger/game/fault/trace/cannon/provider.go index c565b9b39b75..7b55035aa190 100644 --- a/op-challenger/game/fault/trace/cannon/provider.go +++ b/op-challenger/game/fault/trace/cannon/provider.go @@ -132,11 +132,7 @@ func (p *CannonTraceProvider) loadProof(ctx context.Context, i uint64) (*utils.P p.lastStep = state.Step - 1 // Extend the trace out to the full length using a no-op instruction that doesn't change any state // No execution is done, so no proof-data or oracle values are required. - witness := state.EncodeWitness() - witnessHash, err := mipsevm.StateWitness(witness).StateHash() - if err != nil { - return nil, fmt.Errorf("cannot hash witness: %w", err) - } + witness, witnessHash := state.EncodeWitness() proof := &utils.ProofData{ ClaimValue: witnessHash, StateData: hexutil.Bytes(witness), diff --git a/op-challenger/game/fault/trace/cannon/provider_test.go b/op-challenger/game/fault/trace/cannon/provider_test.go index 94277ed88399..87f6105c4279 100644 --- a/op-challenger/game/fault/trace/cannon/provider_test.go +++ b/op-challenger/game/fault/trace/cannon/provider_test.go @@ -57,8 +57,7 @@ func TestGet(t *testing.T) { value, err := provider.Get(context.Background(), PositionFromTraceIndex(provider, big.NewInt(7000))) require.NoError(t, err) require.Contains(t, generator.generated, 7000, "should have tried to generate the proof") - stateHash, err := generator.finalState.EncodeWitness().StateHash() - require.NoError(t, err) + _, stateHash := generator.finalState.EncodeWitness() require.Equal(t, stateHash, value) }) @@ -149,7 +148,7 @@ func TestGetStepData(t *testing.T) { require.NoError(t, err) require.Contains(t, generator.generated, 7000, "should have tried to generate the proof") - witness := generator.finalState.EncodeWitness() + witness, _ := generator.finalState.EncodeWitness() require.EqualValues(t, witness, preimage) require.Equal(t, []byte{}, proof) require.Nil(t, data) @@ -190,7 +189,8 @@ func TestGetStepData(t *testing.T) { require.NoError(t, err) require.Empty(t, generator.generated, "should not have to generate the proof again") - require.EqualValues(t, initGenerator.finalState.EncodeWitness(), preimage) + encodedWitness, _ := initGenerator.finalState.EncodeWitness() + require.EqualValues(t, encodedWitness, preimage) require.Empty(t, proof) require.Nil(t, data) }) From 1f64dd6db5561f3bb76ed1d1ffdaff0cde9b7c4b Mon Sep 17 00:00:00 2001 From: Bill Date: Thu, 27 Jun 2024 06:28:22 +0100 Subject: [PATCH 116/141] delete snapshotlog in docker-compose (#11034) --- ops-bedrock/docker-compose.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/ops-bedrock/docker-compose.yml b/ops-bedrock/docker-compose.yml index ad63aab3d2b4..a204aa844690 100644 --- a/ops-bedrock/docker-compose.yml +++ b/ops-bedrock/docker-compose.yml @@ -74,7 +74,6 @@ services: --p2p.listen.udp=9003 --p2p.scoring.peers=light --p2p.ban.peers=true - --snapshotlog.file=/op_log/snapshot.log --p2p.priv.path=/config/p2p-node-key.txt --metrics.enabled --metrics.addr=0.0.0.0 From cce7f9c3011ce03d5b81acb0c6e63f1f898ca5b7 Mon Sep 17 00:00:00 2001 From: mbaxter Date: Thu, 27 Jun 2024 11:08:03 -0400 Subject: [PATCH 117/141] cannon: Extract MIPS step helper functions (#11017) * cannon: Extract step helpers * cannon: Wrap step helper logic in unchecked * cannon: Use consistent var name between solidity and go (fun) * cannon: Dedupe `opcode` and `fun` calculations * cannon: Bump MIPS.sol version * cannon: Run semver-lock, snapshots * cannon: Address slither warnings * cannon: Make sure all lib functions are unchecked --- cannon/mipsevm/mips.go | 119 +------ cannon/mipsevm/mips_instructions.go | 124 ++++++- cannon/mipsevm/mips_syscalls.go | 1 - packages/contracts-bedrock/semver-lock.json | 4 +- .../contracts-bedrock/src/cannon/MIPS.sol | 188 ++--------- .../src/cannon/libraries/MIPSInstructions.sol | 308 ++++++++++++++---- .../src/cannon/libraries/MIPSMemory.sol | 14 +- .../src/cannon/libraries/MIPSSyscalls.sol | 254 ++++++++------- .../utils/DeploymentSummaryFaultProofs.sol | 2 +- .../DeploymentSummaryFaultProofsCode.sol | 6 +- 10 files changed, 532 insertions(+), 488 deletions(-) diff --git a/cannon/mipsevm/mips.go b/cannon/mipsevm/mips.go index e25bee13a275..6e76c0eb62b8 100644 --- a/cannon/mipsevm/mips.go +++ b/cannon/mipsevm/mips.go @@ -8,6 +8,8 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" ) +type MemTracker func(addr uint32) + func (m *InstrumentedState) readPreimage(key [32]byte, offset uint32) (dat [32]byte, datLen uint32) { preimage := m.lastPreimage if key != m.lastPreimageKey { @@ -123,117 +125,14 @@ func (m *InstrumentedState) mipsStep() error { } m.state.Step += 1 // instruction fetch - insn := m.state.Memory.GetMemory(m.state.Cpu.PC) - opcode := insn >> 26 // 6-bits - - // j-type j/jal - if opcode == 2 || opcode == 3 { - linkReg := uint32(0) - if opcode == 3 { - linkReg = 31 - } - // Take top 4 bits of the next PC (its 256 MB region), and concatenate with the 26-bit offset - target := (m.state.Cpu.NextPC & 0xF0000000) | ((insn & 0x03FFFFFF) << 2) - m.pushStack(target) - return handleJump(&m.state.Cpu, &m.state.Registers, linkReg, target) - } - - // register fetch - rs := uint32(0) // source register 1 value - rt := uint32(0) // source register 2 / temp value - rtReg := (insn >> 16) & 0x1F - - // R-type or I-type (stores rt) - rs = m.state.Registers[(insn>>21)&0x1F] - rdReg := rtReg - if opcode == 0 || opcode == 0x1c { - // R-type (stores rd) - rt = m.state.Registers[rtReg] - rdReg = (insn >> 11) & 0x1F - } else if opcode < 0x20 { - // rt is SignExtImm - // don't sign extend for andi, ori, xori - if opcode == 0xC || opcode == 0xD || opcode == 0xe { - // ZeroExtImm - rt = insn & 0xFFFF - } else { - // SignExtImm - rt = signExtend(insn&0xFFFF, 16) - } - } else if opcode >= 0x28 || opcode == 0x22 || opcode == 0x26 { - // store rt value with store - rt = m.state.Registers[rtReg] - - // store actual rt with lwl and lwr - rdReg = rtReg - } - - if (opcode >= 4 && opcode < 8) || opcode == 1 { - return handleBranch(&m.state.Cpu, &m.state.Registers, opcode, insn, rtReg, rs) - } - - storeAddr := uint32(0xFF_FF_FF_FF) - // memory fetch (all I-type) - // we do the load for stores also - mem := uint32(0) - if opcode >= 0x20 { - // M[R[rs]+SignExtImm] - rs += signExtend(insn&0xFFFF, 16) - addr := rs & 0xFFFFFFFC - m.trackMemAccess(addr) - mem = m.state.Memory.GetMemory(addr) - if opcode >= 0x28 && opcode != 0x30 { - // store - storeAddr = addr - // store opcodes don't write back to a register - rdReg = 0 - } - } - - // ALU - val := executeMipsInstruction(insn, rs, rt, mem) - - fun := insn & 0x3f // 6-bits - if opcode == 0 && fun >= 8 && fun < 0x1c { - if fun == 8 || fun == 9 { // jr/jalr - linkReg := uint32(0) - if fun == 9 { - linkReg = rdReg - } - m.popStack() - return handleJump(&m.state.Cpu, &m.state.Registers, linkReg, rs) - } - - if fun == 0xa { // movz - return handleRd(&m.state.Cpu, &m.state.Registers, rdReg, rs, rt == 0) - } - if fun == 0xb { // movn - return handleRd(&m.state.Cpu, &m.state.Registers, rdReg, rs, rt != 0) - } - - // syscall (can read and write) - if fun == 0xC { - return m.handleSyscall() - } - - // lo and hi registers - // can write back - if fun >= 0x10 && fun < 0x1c { - return handleHiLo(&m.state.Cpu, &m.state.Registers, fun, rs, rt, rdReg) - } - } - - // stupid sc, write a 1 to rt - if opcode == 0x38 && rtReg != 0 { - m.state.Registers[rtReg] = 1 - } + insn, opcode, fun := getInstructionDetails(m.state.Cpu.PC, m.state.Memory) - // write memory - if storeAddr != 0xFF_FF_FF_FF { - m.trackMemAccess(storeAddr) - m.state.Memory.SetMemory(storeAddr, val) + // Handle syscall separately + // syscall (can read and write) + if opcode == 0 && fun == 0xC { + return m.handleSyscall() } - // write back the value to destination register - return handleRd(&m.state.Cpu, &m.state.Registers, rdReg, val, true) + // Exec the rest of the step logic + return execMipsCoreStepLogic(&m.state.Cpu, &m.state.Registers, m.state.Memory, insn, opcode, fun, m.trackMemAccess, m) } diff --git a/cannon/mipsevm/mips_instructions.go b/cannon/mipsevm/mips_instructions.go index 285ed26b6e1b..d6bb8bb429bc 100644 --- a/cannon/mipsevm/mips_instructions.go +++ b/cannon/mipsevm/mips_instructions.go @@ -1,10 +1,127 @@ package mipsevm -func executeMipsInstruction(insn uint32, rs uint32, rt uint32, mem uint32) uint32 { - opcode := insn >> 26 // 6-bits +type StackTracker interface { + pushStack(target uint32) + popStack() +} + +func getInstructionDetails(pc uint32, memory *Memory) (insn, opcode, fun uint32) { + insn = memory.GetMemory(pc) + opcode = insn >> 26 // First 6-bits + fun = insn & 0x3f // Last 6-bits + + return insn, opcode, fun +} + +func execMipsCoreStepLogic(cpu *CpuScalars, registers *[32]uint32, memory *Memory, insn, opcode, fun uint32, memTracker MemTracker, stackTracker StackTracker) error { + // j-type j/jal + if opcode == 2 || opcode == 3 { + linkReg := uint32(0) + if opcode == 3 { + linkReg = 31 + } + // Take top 4 bits of the next PC (its 256 MB region), and concatenate with the 26-bit offset + target := (cpu.NextPC & 0xF0000000) | ((insn & 0x03FFFFFF) << 2) + stackTracker.pushStack(target) + return handleJump(cpu, registers, linkReg, target) + } + + // register fetch + rs := uint32(0) // source register 1 value + rt := uint32(0) // source register 2 / temp value + rtReg := (insn >> 16) & 0x1F + + // R-type or I-type (stores rt) + rs = registers[(insn>>21)&0x1F] + rdReg := rtReg + if opcode == 0 || opcode == 0x1c { + // R-type (stores rd) + rt = registers[rtReg] + rdReg = (insn >> 11) & 0x1F + } else if opcode < 0x20 { + // rt is SignExtImm + // don't sign extend for andi, ori, xori + if opcode == 0xC || opcode == 0xD || opcode == 0xe { + // ZeroExtImm + rt = insn & 0xFFFF + } else { + // SignExtImm + rt = signExtend(insn&0xFFFF, 16) + } + } else if opcode >= 0x28 || opcode == 0x22 || opcode == 0x26 { + // store rt value with store + rt = registers[rtReg] + + // store actual rt with lwl and lwr + rdReg = rtReg + } + + if (opcode >= 4 && opcode < 8) || opcode == 1 { + return handleBranch(cpu, registers, opcode, insn, rtReg, rs) + } + + storeAddr := uint32(0xFF_FF_FF_FF) + // memory fetch (all I-type) + // we do the load for stores also + mem := uint32(0) + if opcode >= 0x20 { + // M[R[rs]+SignExtImm] + rs += signExtend(insn&0xFFFF, 16) + addr := rs & 0xFFFFFFFC + memTracker(addr) + mem = memory.GetMemory(addr) + if opcode >= 0x28 && opcode != 0x30 { + // store + storeAddr = addr + // store opcodes don't write back to a register + rdReg = 0 + } + } + + // ALU + val := executeMipsInstruction(insn, opcode, fun, rs, rt, mem) + + if opcode == 0 && fun >= 8 && fun < 0x1c { + if fun == 8 || fun == 9 { // jr/jalr + linkReg := uint32(0) + if fun == 9 { + linkReg = rdReg + } + stackTracker.popStack() + return handleJump(cpu, registers, linkReg, rs) + } + + if fun == 0xa { // movz + return handleRd(cpu, registers, rdReg, rs, rt == 0) + } + if fun == 0xb { // movn + return handleRd(cpu, registers, rdReg, rs, rt != 0) + } + + // lo and hi registers + // can write back + if fun >= 0x10 && fun < 0x1c { + return handleHiLo(cpu, registers, fun, rs, rt, rdReg) + } + } + + // store conditional, write a 1 to rt + if opcode == 0x38 && rtReg != 0 { + registers[rtReg] = 1 + } + + // write memory + if storeAddr != 0xFF_FF_FF_FF { + memTracker(storeAddr) + memory.SetMemory(storeAddr, val) + } + + // write back the value to destination register + return handleRd(cpu, registers, rdReg, val, true) +} +func executeMipsInstruction(insn, opcode, fun, rs, rt, mem uint32) uint32 { if opcode == 0 || (opcode >= 8 && opcode < 0xF) { - fun := insn & 0x3f // 6-bits // transform ArithLogI to SPECIAL switch opcode { case 8: @@ -101,7 +218,6 @@ func executeMipsInstruction(insn uint32, rs uint32, rt uint32, mem uint32) uint3 switch opcode { // SPECIAL2 case 0x1C: - fun := insn & 0x3f // 6-bits switch fun { case 0x2: // mul return uint32(int32(rs) * int32(rt)) diff --git a/cannon/mipsevm/mips_syscalls.go b/cannon/mipsevm/mips_syscalls.go index 098cf0cd7cfa..90e05b0d4a5d 100644 --- a/cannon/mipsevm/mips_syscalls.go +++ b/cannon/mipsevm/mips_syscalls.go @@ -34,7 +34,6 @@ const ( ) type PreimageReader func(key [32]byte, offset uint32) (dat [32]byte, datLen uint32) -type MemTracker func(addr uint32) func getSyscallArgs(registers *[32]uint32) (syscallNum, a0, a1, a2 uint32) { syscallNum = registers[2] // v0 diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index c3919e9051d1..c7cb08ab8b18 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -124,8 +124,8 @@ "sourceCodeHash": "0x3ff4a3f21202478935412d47fd5ef7f94a170402ddc50e5c062013ce5544c83f" }, "src/cannon/MIPS.sol": { - "initCodeHash": "0xe9183ee3b69d9ec9594d6b3923d78c86c996cd738ccbc09675bb281284c060af", - "sourceCodeHash": "0x7c2eab73da8b2eeadba30eadb39f20e91307bc29218938fadfc5f73fadcf13bc" + "initCodeHash": "0xe2cfbfa5d8587a6c3cf52686e29fb0d07e2764af0ef728825529f42ebdeacb5d", + "sourceCodeHash": "0x231f42a05f0c8e5784eb112518afca0bb16a3689f317ce021b8390a0aa70377b" }, "src/cannon/PreimageOracle.sol": { "initCodeHash": "0xe5db668fe41436f53995e910488c7c140766ba8745e19743773ebab508efd090", diff --git a/packages/contracts-bedrock/src/cannon/MIPS.sol b/packages/contracts-bedrock/src/cannon/MIPS.sol index f53dede0286f..2d90870163af 100644 --- a/packages/contracts-bedrock/src/cannon/MIPS.sol +++ b/packages/contracts-bedrock/src/cannon/MIPS.sol @@ -48,7 +48,7 @@ contract MIPS is ISemver { /// @notice The semantic version of the MIPS contract. /// @custom:semver 1.0.1 - string public constant version = "1.1.0-beta.4"; + string public constant version = "1.1.0-beta.5"; /// @notice The preimage oracle contract. IPreimageOracle internal immutable ORACLE; @@ -262,180 +262,32 @@ contract MIPS is ISemver { // instruction fetch uint256 insnProofOffset = MIPSMemory.memoryProofOffset(STEP_PROOF_OFFSET, 0); - uint32 insn = MIPSMemory.readMem(state.memRoot, state.pc, insnProofOffset); - uint32 opcode = insn >> 26; // 6-bits - - // j-type j/jal - if (opcode == 2 || opcode == 3) { - // Take top 4 bits of the next PC (its 256 MB region), and concatenate with the 26-bit offset - uint32 target = (state.nextPC & 0xF0000000) | (insn & 0x03FFFFFF) << 2; - return handleJumpAndReturnOutput(state, opcode == 2 ? 0 : 31, target); - } - - // register fetch - uint32 rs; // source register 1 value - uint32 rt; // source register 2 / temp value - uint32 rtReg = (insn >> 16) & 0x1F; - - // R-type or I-type (stores rt) - rs = state.registers[(insn >> 21) & 0x1F]; - uint32 rdReg = rtReg; - - if (opcode == 0 || opcode == 0x1c) { - // R-type (stores rd) - rt = state.registers[rtReg]; - rdReg = (insn >> 11) & 0x1F; - } else if (opcode < 0x20) { - // rt is SignExtImm - // don't sign extend for andi, ori, xori - if (opcode == 0xC || opcode == 0xD || opcode == 0xe) { - // ZeroExtImm - rt = insn & 0xFFFF; - } else { - // SignExtImm - rt = ins.signExtend(insn & 0xFFFF, 16); - } - } else if (opcode >= 0x28 || opcode == 0x22 || opcode == 0x26) { - // store rt value with store - rt = state.registers[rtReg]; - - // store actual rt with lwl and lwr - rdReg = rtReg; - } - - if ((opcode >= 4 && opcode < 8) || opcode == 1) { - st.CpuScalars memory cpu = getCpuScalars(state); - - ins.handleBranch({ - _cpu: cpu, - _registers: state.registers, - _opcode: opcode, - _insn: insn, - _rtReg: rtReg, - _rs: rs - }); - setStateCpuScalars(state, cpu); - - return outputState(); - } - - uint32 storeAddr = 0xFF_FF_FF_FF; - // memory fetch (all I-type) - // we do the load for stores also - uint32 mem; - if (opcode >= 0x20) { - // M[R[rs]+SignExtImm] - rs += ins.signExtend(insn & 0xFFFF, 16); - uint32 addr = rs & 0xFFFFFFFC; - uint256 memProofOffset = MIPSMemory.memoryProofOffset(STEP_PROOF_OFFSET, 1); - mem = MIPSMemory.readMem(state.memRoot, addr, memProofOffset); - if (opcode >= 0x28 && opcode != 0x30) { - // store - storeAddr = addr; - // store opcodes don't write back to a register - rdReg = 0; - } - } - - // ALU - // Note: swr outputs more than 4 bytes without the mask 0xffFFffFF - uint32 val = ins.executeMipsInstruction(insn, rs, rt, mem) & 0xffFFffFF; - - uint32 func = insn & 0x3f; // 6-bits - if (opcode == 0 && func >= 8 && func < 0x1c) { - if (func == 8 || func == 9) { - // jr/jalr - return handleJumpAndReturnOutput(state, func == 8 ? 0 : rdReg, rs); - } + (uint32 insn, uint32 opcode, uint32 fun) = + ins.getInstructionDetails(state.pc, state.memRoot, insnProofOffset); - if (func == 0xa) { - // movz - return handleRdAndReturnOutput(state, rdReg, rs, rt == 0); - } - if (func == 0xb) { - // movn - return handleRdAndReturnOutput(state, rdReg, rs, rt != 0); - } - - // syscall (can read and write) - if (func == 0xC) { - return handleSyscall(_localContext); - } - - // lo and hi registers - // can write back - if (func >= 0x10 && func < 0x1c) { - st.CpuScalars memory cpu = getCpuScalars(state); - - ins.handleHiLo({ - _cpu: cpu, - _registers: state.registers, - _func: func, - _rs: rs, - _rt: rt, - _storeReg: rdReg - }); - - setStateCpuScalars(state, cpu); - return outputState(); - } - } - - // stupid sc, write a 1 to rt - if (opcode == 0x38 && rtReg != 0) { - state.registers[rtReg] = 1; + // Handle syscall separately + // syscall (can read and write) + if (opcode == 0 && fun == 0xC) { + return handleSyscall(_localContext); } - // write memory - if (storeAddr != 0xFF_FF_FF_FF) { - uint256 memProofOffset = MIPSMemory.memoryProofOffset(STEP_PROOF_OFFSET, 1); - state.memRoot = MIPSMemory.writeMem(storeAddr, memProofOffset, val); - } + // Exec the rest of the step logic + st.CpuScalars memory cpu = getCpuScalars(state); + (state.memRoot) = ins.execMipsCoreStepLogic({ + _cpu: cpu, + _registers: state.registers, + _memRoot: state.memRoot, + _memProofOffset: MIPSMemory.memoryProofOffset(STEP_PROOF_OFFSET, 1), + _insn: insn, + _opcode: opcode, + _fun: fun + }); + setStateCpuScalars(state, cpu); - // write back the value to destination register - return handleRdAndReturnOutput(state, rdReg, val, true); + return outputState(); } } - function handleJumpAndReturnOutput( - State memory _state, - uint32 _linkReg, - uint32 _dest - ) - internal - returns (bytes32 out_) - { - st.CpuScalars memory cpu = getCpuScalars(_state); - - ins.handleJump({ _cpu: cpu, _registers: _state.registers, _linkReg: _linkReg, _dest: _dest }); - - setStateCpuScalars(_state, cpu); - return outputState(); - } - - function handleRdAndReturnOutput( - State memory _state, - uint32 _storeReg, - uint32 _val, - bool _conditional - ) - internal - returns (bytes32 out_) - { - st.CpuScalars memory cpu = getCpuScalars(_state); - - ins.handleRd({ - _cpu: cpu, - _registers: _state.registers, - _storeReg: _storeReg, - _val: _val, - _conditional: _conditional - }); - - setStateCpuScalars(_state, cpu); - return outputState(); - } - function getCpuScalars(State memory _state) internal pure returns (st.CpuScalars memory) { return st.CpuScalars({ pc: _state.pc, nextPC: _state.nextPC, lo: _state.lo, hi: _state.hi }); } diff --git a/packages/contracts-bedrock/src/cannon/libraries/MIPSInstructions.sol b/packages/contracts-bedrock/src/cannon/libraries/MIPSInstructions.sol index b90c5ea7371b..891bd91c4522 100644 --- a/packages/contracts-bedrock/src/cannon/libraries/MIPSInstructions.sol +++ b/packages/contracts-bedrock/src/cannon/libraries/MIPSInstructions.sol @@ -1,12 +1,180 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.15; +import { MIPSMemory } from "src/cannon/libraries/MIPSMemory.sol"; import { MIPSState as st } from "src/cannon/libraries/MIPSState.sol"; library MIPSInstructions { + /// @param _pc The program counter. + /// @param _memRoot The current memory root. + /// @param _insnProofOffset The calldata offset of the memory proof for the current instruction. + /// @return insn_ The current 32-bit instruction at the pc. + /// @return opcode_ The opcode value parsed from insn_. + /// @return fun_ The function value parsed from insn_. + function getInstructionDetails( + uint32 _pc, + bytes32 _memRoot, + uint256 _insnProofOffset + ) + internal + pure + returns (uint32 insn_, uint32 opcode_, uint32 fun_) + { + unchecked { + insn_ = MIPSMemory.readMem(_memRoot, _pc, _insnProofOffset); + opcode_ = insn_ >> 26; // First 6-bits + fun_ = insn_ & 0x3f; // Last 6-bits + + return (insn_, opcode_, fun_); + } + } + + /// @notice Execute core MIPS step logic. + /// @notice _cpu The CPU scalar fields. + /// @notice _registers The CPU registers. + /// @notice _memRoot The current merkle root of the memory. + /// @notice _memProofOffset The offset in calldata specify where the memory merkle proof is located. + /// @param _insn The current 32-bit instruction at the pc. + /// @param _opcode The opcode value parsed from insn_. + /// @param _fun The function value parsed from insn_. + /// @return newMemRoot_ The updated merkle root of memory after any modifications, may be unchanged. + function execMipsCoreStepLogic( + st.CpuScalars memory _cpu, + uint32[32] memory _registers, + bytes32 _memRoot, + uint256 _memProofOffset, + uint32 _insn, + uint32 _opcode, + uint32 _fun + ) + internal + pure + returns (bytes32 newMemRoot_) + { + unchecked { + newMemRoot_ = _memRoot; + + // j-type j/jal + if (_opcode == 2 || _opcode == 3) { + // Take top 4 bits of the next PC (its 256 MB region), and concatenate with the 26-bit offset + uint32 target = (_cpu.nextPC & 0xF0000000) | (_insn & 0x03FFFFFF) << 2; + handleJump(_cpu, _registers, _opcode == 2 ? 0 : 31, target); + return newMemRoot_; + } + + // register fetch + uint32 rs = 0; // source register 1 value + uint32 rt = 0; // source register 2 / temp value + uint32 rtReg = (_insn >> 16) & 0x1F; + + // R-type or I-type (stores rt) + rs = _registers[(_insn >> 21) & 0x1F]; + uint32 rdReg = rtReg; + + if (_opcode == 0 || _opcode == 0x1c) { + // R-type (stores rd) + rt = _registers[rtReg]; + rdReg = (_insn >> 11) & 0x1F; + } else if (_opcode < 0x20) { + // rt is SignExtImm + // don't sign extend for andi, ori, xori + if (_opcode == 0xC || _opcode == 0xD || _opcode == 0xe) { + // ZeroExtImm + rt = _insn & 0xFFFF; + } else { + // SignExtImm + rt = signExtend(_insn & 0xFFFF, 16); + } + } else if (_opcode >= 0x28 || _opcode == 0x22 || _opcode == 0x26) { + // store rt value with store + rt = _registers[rtReg]; + + // store actual rt with lwl and lwr + rdReg = rtReg; + } + + if ((_opcode >= 4 && _opcode < 8) || _opcode == 1) { + handleBranch({ + _cpu: _cpu, + _registers: _registers, + _opcode: _opcode, + _insn: _insn, + _rtReg: rtReg, + _rs: rs + }); + return newMemRoot_; + } + + uint32 storeAddr = 0xFF_FF_FF_FF; + // memory fetch (all I-type) + // we do the load for stores also + uint32 mem = 0; + if (_opcode >= 0x20) { + // M[R[rs]+SignExtImm] + rs += signExtend(_insn & 0xFFFF, 16); + uint32 addr = rs & 0xFFFFFFFC; + mem = MIPSMemory.readMem(_memRoot, addr, _memProofOffset); + if (_opcode >= 0x28 && _opcode != 0x30) { + // store + storeAddr = addr; + // store opcodes don't write back to a register + rdReg = 0; + } + } + + // ALU + // Note: swr outputs more than 4 bytes without the mask 0xffFFffFF + uint32 val = executeMipsInstruction(_insn, _opcode, _fun, rs, rt, mem) & 0xffFFffFF; + + if (_opcode == 0 && _fun >= 8 && _fun < 0x1c) { + if (_fun == 8 || _fun == 9) { + // jr/jalr + handleJump(_cpu, _registers, _fun == 8 ? 0 : rdReg, rs); + return newMemRoot_; + } + + if (_fun == 0xa) { + // movz + handleRd(_cpu, _registers, rdReg, rs, rt == 0); + return newMemRoot_; + } + if (_fun == 0xb) { + // movn + handleRd(_cpu, _registers, rdReg, rs, rt != 0); + return newMemRoot_; + } + + // lo and hi registers + // can write back + if (_fun >= 0x10 && _fun < 0x1c) { + handleHiLo({ _cpu: _cpu, _registers: _registers, _fun: _fun, _rs: rs, _rt: rt, _storeReg: rdReg }); + + return newMemRoot_; + } + } + + // stupid sc, write a 1 to rt + if (_opcode == 0x38 && rtReg != 0) { + _registers[rtReg] = 1; + } + + // write memory + if (storeAddr != 0xFF_FF_FF_FF) { + newMemRoot_ = MIPSMemory.writeMem(storeAddr, _memProofOffset, val); + } + + // write back the value to destination register + handleRd(_cpu, _registers, rdReg, val, true); + + return newMemRoot_; + } + } + /// @notice Execute an instruction. function executeMipsInstruction( uint32 _insn, + uint32 _opcode, + uint32 _fun, uint32 _rs, uint32 _rt, uint32 _mem @@ -16,167 +184,163 @@ library MIPSInstructions { returns (uint32 out_) { unchecked { - uint32 opcode = _insn >> 26; // 6-bits - - if (opcode == 0 || (opcode >= 8 && opcode < 0xF)) { - uint32 func = _insn & 0x3f; // 6-bits + if (_opcode == 0 || (_opcode >= 8 && _opcode < 0xF)) { assembly { // transform ArithLogI to SPECIAL - switch opcode + switch _opcode // addi - case 0x8 { func := 0x20 } + case 0x8 { _fun := 0x20 } // addiu - case 0x9 { func := 0x21 } + case 0x9 { _fun := 0x21 } // stli - case 0xA { func := 0x2A } + case 0xA { _fun := 0x2A } // sltiu - case 0xB { func := 0x2B } + case 0xB { _fun := 0x2B } // andi - case 0xC { func := 0x24 } + case 0xC { _fun := 0x24 } // ori - case 0xD { func := 0x25 } + case 0xD { _fun := 0x25 } // xori - case 0xE { func := 0x26 } + case 0xE { _fun := 0x26 } } // sll - if (func == 0x00) { + if (_fun == 0x00) { return _rt << ((_insn >> 6) & 0x1F); } // srl - else if (func == 0x02) { + else if (_fun == 0x02) { return _rt >> ((_insn >> 6) & 0x1F); } // sra - else if (func == 0x03) { + else if (_fun == 0x03) { uint32 shamt = (_insn >> 6) & 0x1F; return signExtend(_rt >> shamt, 32 - shamt); } // sllv - else if (func == 0x04) { + else if (_fun == 0x04) { return _rt << (_rs & 0x1F); } // srlv - else if (func == 0x6) { + else if (_fun == 0x6) { return _rt >> (_rs & 0x1F); } // srav - else if (func == 0x07) { + else if (_fun == 0x07) { return signExtend(_rt >> _rs, 32 - _rs); } // functs in range [0x8, 0x1b] are handled specially by other functions // Explicitly enumerate each funct in range to reduce code diff against Go Vm // jr - else if (func == 0x08) { + else if (_fun == 0x08) { return _rs; } // jalr - else if (func == 0x09) { + else if (_fun == 0x09) { return _rs; } // movz - else if (func == 0x0a) { + else if (_fun == 0x0a) { return _rs; } // movn - else if (func == 0x0b) { + else if (_fun == 0x0b) { return _rs; } // syscall - else if (func == 0x0c) { + else if (_fun == 0x0c) { return _rs; } // 0x0d - break not supported // sync - else if (func == 0x0f) { + else if (_fun == 0x0f) { return _rs; } // mfhi - else if (func == 0x10) { + else if (_fun == 0x10) { return _rs; } // mthi - else if (func == 0x11) { + else if (_fun == 0x11) { return _rs; } // mflo - else if (func == 0x12) { + else if (_fun == 0x12) { return _rs; } // mtlo - else if (func == 0x13) { + else if (_fun == 0x13) { return _rs; } // mult - else if (func == 0x18) { + else if (_fun == 0x18) { return _rs; } // multu - else if (func == 0x19) { + else if (_fun == 0x19) { return _rs; } // div - else if (func == 0x1a) { + else if (_fun == 0x1a) { return _rs; } // divu - else if (func == 0x1b) { + else if (_fun == 0x1b) { return _rs; } // The rest includes transformed R-type arith imm instructions // add - else if (func == 0x20) { + else if (_fun == 0x20) { return (_rs + _rt); } // addu - else if (func == 0x21) { + else if (_fun == 0x21) { return (_rs + _rt); } // sub - else if (func == 0x22) { + else if (_fun == 0x22) { return (_rs - _rt); } // subu - else if (func == 0x23) { + else if (_fun == 0x23) { return (_rs - _rt); } // and - else if (func == 0x24) { + else if (_fun == 0x24) { return (_rs & _rt); } // or - else if (func == 0x25) { + else if (_fun == 0x25) { return (_rs | _rt); } // xor - else if (func == 0x26) { + else if (_fun == 0x26) { return (_rs ^ _rt); } // nor - else if (func == 0x27) { + else if (_fun == 0x27) { return ~(_rs | _rt); } // slti - else if (func == 0x2a) { + else if (_fun == 0x2a) { return int32(_rs) < int32(_rt) ? 1 : 0; } // sltiu - else if (func == 0x2b) { + else if (_fun == 0x2b) { return _rs < _rt ? 1 : 0; } else { revert("invalid instruction"); } } else { // SPECIAL2 - if (opcode == 0x1C) { - uint32 func = _insn & 0x3f; // 6-bits + if (_opcode == 0x1C) { // mul - if (func == 0x2) { + if (_fun == 0x2) { return uint32(int32(_rs) * int32(_rt)); } // clz, clo - else if (func == 0x20 || func == 0x21) { - if (func == 0x20) { + else if (_fun == 0x20 || _fun == 0x21) { + if (_fun == 0x20) { _rs = ~_rs; } uint32 i = 0; @@ -188,75 +352,75 @@ library MIPSInstructions { } } // lui - else if (opcode == 0x0F) { + else if (_opcode == 0x0F) { return _rt << 16; } // lb - else if (opcode == 0x20) { + else if (_opcode == 0x20) { return signExtend((_mem >> (24 - (_rs & 3) * 8)) & 0xFF, 8); } // lh - else if (opcode == 0x21) { + else if (_opcode == 0x21) { return signExtend((_mem >> (16 - (_rs & 2) * 8)) & 0xFFFF, 16); } // lwl - else if (opcode == 0x22) { + else if (_opcode == 0x22) { uint32 val = _mem << ((_rs & 3) * 8); uint32 mask = uint32(0xFFFFFFFF) << ((_rs & 3) * 8); return (_rt & ~mask) | val; } // lw - else if (opcode == 0x23) { + else if (_opcode == 0x23) { return _mem; } // lbu - else if (opcode == 0x24) { + else if (_opcode == 0x24) { return (_mem >> (24 - (_rs & 3) * 8)) & 0xFF; } // lhu - else if (opcode == 0x25) { + else if (_opcode == 0x25) { return (_mem >> (16 - (_rs & 2) * 8)) & 0xFFFF; } // lwr - else if (opcode == 0x26) { + else if (_opcode == 0x26) { uint32 val = _mem >> (24 - (_rs & 3) * 8); uint32 mask = uint32(0xFFFFFFFF) >> (24 - (_rs & 3) * 8); return (_rt & ~mask) | val; } // sb - else if (opcode == 0x28) { + else if (_opcode == 0x28) { uint32 val = (_rt & 0xFF) << (24 - (_rs & 3) * 8); uint32 mask = 0xFFFFFFFF ^ uint32(0xFF << (24 - (_rs & 3) * 8)); return (_mem & mask) | val; } // sh - else if (opcode == 0x29) { + else if (_opcode == 0x29) { uint32 val = (_rt & 0xFFFF) << (16 - (_rs & 2) * 8); uint32 mask = 0xFFFFFFFF ^ uint32(0xFFFF << (16 - (_rs & 2) * 8)); return (_mem & mask) | val; } // swl - else if (opcode == 0x2a) { + else if (_opcode == 0x2a) { uint32 val = _rt >> ((_rs & 3) * 8); uint32 mask = uint32(0xFFFFFFFF) >> ((_rs & 3) * 8); return (_mem & ~mask) | val; } // sw - else if (opcode == 0x2b) { + else if (_opcode == 0x2b) { return _rt; } // swr - else if (opcode == 0x2e) { + else if (_opcode == 0x2e) { uint32 val = _rt << (24 - (_rs & 3) * 8); uint32 mask = uint32(0xFFFFFFFF) << (24 - (_rs & 3) * 8); return (_mem & ~mask) | val; } // ll - else if (opcode == 0x30) { + else if (_opcode == 0x30) { return _mem; } // sc - else if (opcode == 0x38) { + else if (_opcode == 0x38) { return _rt; } else { revert("invalid instruction"); @@ -345,14 +509,14 @@ library MIPSInstructions { /// @notice Handles HI and LO register instructions. /// @param _cpu Holds the state of cpu scalars pc, nextPC, hi, lo. /// @param _registers Holds the current state of the cpu registers. - /// @param _func The function code of the instruction. + /// @param _fun The function code of the instruction. /// @param _rs The value of the RS register. /// @param _rt The value of the RT register. /// @param _storeReg The register to store the result in. function handleHiLo( st.CpuScalars memory _cpu, uint32[32] memory _registers, - uint32 _func, + uint32 _fun, uint32 _rs, uint32 _rt, uint32 _storeReg @@ -364,29 +528,29 @@ library MIPSInstructions { uint32 val = 0; // mfhi: Move the contents of the HI register into the destination - if (_func == 0x10) { + if (_fun == 0x10) { val = _cpu.hi; } // mthi: Move the contents of the source into the HI register - else if (_func == 0x11) { + else if (_fun == 0x11) { _cpu.hi = _rs; } // mflo: Move the contents of the LO register into the destination - else if (_func == 0x12) { + else if (_fun == 0x12) { val = _cpu.lo; } // mtlo: Move the contents of the source into the LO register - else if (_func == 0x13) { + else if (_fun == 0x13) { _cpu.lo = _rs; } // mult: Multiplies `rs` by `rt` and stores the result in HI and LO registers - else if (_func == 0x18) { + else if (_fun == 0x18) { uint64 acc = uint64(int64(int32(_rs)) * int64(int32(_rt))); _cpu.hi = uint32(acc >> 32); _cpu.lo = uint32(acc); } // multu: Unsigned multiplies `rs` by `rt` and stores the result in HI and LO registers - else if (_func == 0x19) { + else if (_fun == 0x19) { uint64 acc = uint64(uint64(_rs) * uint64(_rt)); _cpu.hi = uint32(acc >> 32); _cpu.lo = uint32(acc); @@ -394,7 +558,7 @@ library MIPSInstructions { // div: Divides `rs` by `rt`. // Stores the quotient in LO // And the remainder in HI - else if (_func == 0x1a) { + else if (_fun == 0x1a) { if (int32(_rt) == 0) { revert("MIPS: division by zero"); } @@ -404,7 +568,7 @@ library MIPSInstructions { // divu: Unsigned divides `rs` by `rt`. // Stores the quotient in LO // And the remainder in HI - else if (_func == 0x1b) { + else if (_fun == 0x1b) { if (_rt == 0) { revert("MIPS: division by zero"); } diff --git a/packages/contracts-bedrock/src/cannon/libraries/MIPSMemory.sol b/packages/contracts-bedrock/src/cannon/libraries/MIPSMemory.sol index a8d1b87dcbe0..12106ed23ecc 100644 --- a/packages/contracts-bedrock/src/cannon/libraries/MIPSMemory.sol +++ b/packages/contracts-bedrock/src/cannon/libraries/MIPSMemory.sol @@ -93,8 +93,8 @@ library MIPSMemory { newMemRoot_ := node } + return newMemRoot_; } - return newMemRoot_; } /// @notice Computes the offset of a memory proof in the calldata. @@ -114,11 +114,13 @@ library MIPSMemory { /// @notice Validates that enough calldata is available to hold a full memory proof at the given offset /// @param _proofStartOffset The index of the first byte of the target memory proof in calldata function validateMemoryProofAvailability(uint256 _proofStartOffset) internal pure { - uint256 s = 0; - assembly { - s := calldatasize() + unchecked { + uint256 s = 0; + assembly { + s := calldatasize() + } + // A memory proof consists of 28 bytes32 values - verify we have enough calldata + require(s >= (_proofStartOffset + 28 * 32), "check that there is enough calldata"); } - // A memory proof consists of 28 bytes32 values - verify we have enough calldata - require(s >= (_proofStartOffset + 28 * 32), "check that there is enough calldata"); } } diff --git a/packages/contracts-bedrock/src/cannon/libraries/MIPSSyscalls.sol b/packages/contracts-bedrock/src/cannon/libraries/MIPSSyscalls.sol index bc629a24623e..aa8e747bff71 100644 --- a/packages/contracts-bedrock/src/cannon/libraries/MIPSSyscalls.sol +++ b/packages/contracts-bedrock/src/cannon/libraries/MIPSSyscalls.sol @@ -37,13 +37,15 @@ library MIPSSyscalls { pure returns (uint32 sysCallNum_, uint32 a0_, uint32 a1_, uint32 a2_) { - sysCallNum_ = _registers[2]; + unchecked { + sysCallNum_ = _registers[2]; - a0_ = _registers[4]; - a1_ = _registers[5]; - a2_ = _registers[6]; + a0_ = _registers[4]; + a1_ = _registers[5]; + a2_ = _registers[6]; - return (sysCallNum_, a0_, a1_, a2_); + return (sysCallNum_, a0_, a1_, a2_); + } } /// @notice Like a Linux mmap syscall. Allocates a page from the heap. @@ -62,22 +64,24 @@ library MIPSSyscalls { pure returns (uint32 v0_, uint32 v1_, uint32 newHeap_) { - v1_ = uint32(0); - newHeap_ = _heap; + unchecked { + v1_ = uint32(0); + newHeap_ = _heap; - uint32 sz = _a1; - if (sz & 4095 != 0) { - // adjust size to align with page size - sz += 4096 - (sz & 4095); - } - if (_a0 == 0) { - v0_ = _heap; - newHeap_ += sz; - } else { - v0_ = _a0; - } + uint32 sz = _a1; + if (sz & 4095 != 0) { + // adjust size to align with page size + sz += 4096 - (sz & 4095); + } + if (_a0 == 0) { + v0_ = _heap; + newHeap_ += sz; + } else { + v0_ = _a0; + } - return (v0_, v1_, newHeap_); + return (v0_, v1_, newHeap_); + } } /// @notice Like a Linux read syscall. Splits unaligned reads into aligned reads. @@ -109,60 +113,62 @@ library MIPSSyscalls { view returns (uint32 v0_, uint32 v1_, uint32 newPreimageOffset_, bytes32 newMemRoot_) { - v0_ = uint32(0); - v1_ = uint32(0); - newMemRoot_ = _memRoot; - newPreimageOffset_ = _preimageOffset; + unchecked { + v0_ = uint32(0); + v1_ = uint32(0); + newMemRoot_ = _memRoot; + newPreimageOffset_ = _preimageOffset; - // args: _a0 = fd, _a1 = addr, _a2 = count - // returns: v0_ = read, v1_ = err code - if (_a0 == FD_STDIN) { - // Leave v0_ and v1_ zero: read nothing, no error - } - // pre-image oracle read - else if (_a0 == FD_PREIMAGE_READ) { - // verify proof is correct, and get the existing memory. - // mask the addr to align it to 4 bytes - uint32 mem = MIPSMemory.readMem(_memRoot, _a1 & 0xFFffFFfc, _proofOffset); - // If the preimage key is a local key, localize it in the context of the caller. - if (uint8(_preimageKey[0]) == 1) { - _preimageKey = PreimageKeyLib.localize(_preimageKey, _localContext); + // args: _a0 = fd, _a1 = addr, _a2 = count + // returns: v0_ = read, v1_ = err code + if (_a0 == FD_STDIN) { + // Leave v0_ and v1_ zero: read nothing, no error } - (bytes32 dat, uint256 datLen) = _oracle.readPreimage(_preimageKey, _preimageOffset); + // pre-image oracle read + else if (_a0 == FD_PREIMAGE_READ) { + // verify proof is correct, and get the existing memory. + // mask the addr to align it to 4 bytes + uint32 mem = MIPSMemory.readMem(_memRoot, _a1 & 0xFFffFFfc, _proofOffset); + // If the preimage key is a local key, localize it in the context of the caller. + if (uint8(_preimageKey[0]) == 1) { + _preimageKey = PreimageKeyLib.localize(_preimageKey, _localContext); + } + (bytes32 dat, uint256 datLen) = _oracle.readPreimage(_preimageKey, _preimageOffset); + + // Transform data for writing to memory + // We use assembly for more precise ops, and no var count limit + assembly { + let alignment := and(_a1, 3) // the read might not start at an aligned address + let space := sub(4, alignment) // remaining space in memory word + if lt(space, datLen) { datLen := space } // if less space than data, shorten data + if lt(_a2, datLen) { datLen := _a2 } // if requested to read less, read less + dat := shr(sub(256, mul(datLen, 8)), dat) // right-align data + dat := shl(mul(sub(sub(4, datLen), alignment), 8), dat) // position data to insert into memory + // word + let mask := sub(shl(mul(sub(4, alignment), 8), 1), 1) // mask all bytes after start + let suffixMask := sub(shl(mul(sub(sub(4, alignment), datLen), 8), 1), 1) // mask of all bytes + // starting from end, maybe none + mask := and(mask, not(suffixMask)) // reduce mask to just cover the data we insert + mem := or(and(mem, not(mask)), dat) // clear masked part of original memory, and insert data + } - // Transform data for writing to memory - // We use assembly for more precise ops, and no var count limit - assembly { - let alignment := and(_a1, 3) // the read might not start at an aligned address - let space := sub(4, alignment) // remaining space in memory word - if lt(space, datLen) { datLen := space } // if less space than data, shorten data - if lt(_a2, datLen) { datLen := _a2 } // if requested to read less, read less - dat := shr(sub(256, mul(datLen, 8)), dat) // right-align data - dat := shl(mul(sub(sub(4, datLen), alignment), 8), dat) // position data to insert into memory - // word - let mask := sub(shl(mul(sub(4, alignment), 8), 1), 1) // mask all bytes after start - let suffixMask := sub(shl(mul(sub(sub(4, alignment), datLen), 8), 1), 1) // mask of all bytes - // starting from end, maybe none - mask := and(mask, not(suffixMask)) // reduce mask to just cover the data we insert - mem := or(and(mem, not(mask)), dat) // clear masked part of original memory, and insert data + // Write memory back + newMemRoot_ = MIPSMemory.writeMem(_a1 & 0xFFffFFfc, _proofOffset, mem); + newPreimageOffset_ += uint32(datLen); + v0_ = uint32(datLen); + } + // hint response + else if (_a0 == FD_HINT_READ) { + // Don't read into memory, just say we read it all + // The result is ignored anyway + v0_ = _a2; + } else { + v0_ = 0xFFffFFff; + v1_ = EBADF; } - // Write memory back - newMemRoot_ = MIPSMemory.writeMem(_a1 & 0xFFffFFfc, _proofOffset, mem); - newPreimageOffset_ += uint32(datLen); - v0_ = uint32(datLen); + return (v0_, v1_, newPreimageOffset_, newMemRoot_); } - // hint response - else if (_a0 == FD_HINT_READ) { - // Don't read into memory, just say we read it all - // The result is ignored anyway - v0_ = _a2; - } else { - v0_ = 0xFFffFFff; - v1_ = EBADF; - } - - return (v0_, v1_, newPreimageOffset_, newMemRoot_); } /// @notice Like a Linux write syscall. Splits unaligned writes into aligned writes. @@ -190,44 +196,46 @@ library MIPSSyscalls { pure returns (uint32 v0_, uint32 v1_, bytes32 newPreimageKey_, uint32 newPreimageOffset_) { - // args: _a0 = fd, _a1 = addr, _a2 = count - // returns: v0_ = written, v1_ = err code - v0_ = uint32(0); - v1_ = uint32(0); - newPreimageKey_ = _preimageKey; - newPreimageOffset_ = _preimageOffset; + unchecked { + // args: _a0 = fd, _a1 = addr, _a2 = count + // returns: v0_ = written, v1_ = err code + v0_ = uint32(0); + v1_ = uint32(0); + newPreimageKey_ = _preimageKey; + newPreimageOffset_ = _preimageOffset; - if (_a0 == FD_STDOUT || _a0 == FD_STDERR || _a0 == FD_HINT_WRITE) { - v0_ = _a2; // tell program we have written everything - } - // pre-image oracle - else if (_a0 == FD_PREIMAGE_WRITE) { - // mask the addr to align it to 4 bytes - uint32 mem = MIPSMemory.readMem(_memRoot, _a1 & 0xFFffFFfc, _proofOffset); - bytes32 key = _preimageKey; + if (_a0 == FD_STDOUT || _a0 == FD_STDERR || _a0 == FD_HINT_WRITE) { + v0_ = _a2; // tell program we have written everything + } + // pre-image oracle + else if (_a0 == FD_PREIMAGE_WRITE) { + // mask the addr to align it to 4 bytes + uint32 mem = MIPSMemory.readMem(_memRoot, _a1 & 0xFFffFFfc, _proofOffset); + bytes32 key = _preimageKey; - // Construct pre-image key from memory - // We use assembly for more precise ops, and no var count limit - assembly { - let alignment := and(_a1, 3) // the read might not start at an aligned address - let space := sub(4, alignment) // remaining space in memory word - if lt(space, _a2) { _a2 := space } // if less space than data, shorten data - key := shl(mul(_a2, 8), key) // shift key, make space for new info - let mask := sub(shl(mul(_a2, 8), 1), 1) // mask for extracting value from memory - mem := and(shr(mul(sub(space, _a2), 8), mem), mask) // align value to right, mask it - key := or(key, mem) // insert into key + // Construct pre-image key from memory + // We use assembly for more precise ops, and no var count limit + assembly { + let alignment := and(_a1, 3) // the read might not start at an aligned address + let space := sub(4, alignment) // remaining space in memory word + if lt(space, _a2) { _a2 := space } // if less space than data, shorten data + key := shl(mul(_a2, 8), key) // shift key, make space for new info + let mask := sub(shl(mul(_a2, 8), 1), 1) // mask for extracting value from memory + mem := and(shr(mul(sub(space, _a2), 8), mem), mask) // align value to right, mask it + key := or(key, mem) // insert into key + } + + // Write pre-image key to oracle + newPreimageKey_ = key; + newPreimageOffset_ = 0; // reset offset, to read new pre-image data from the start + v0_ = _a2; + } else { + v0_ = 0xFFffFFff; + v1_ = EBADF; } - // Write pre-image key to oracle - newPreimageKey_ = key; - newPreimageOffset_ = 0; // reset offset, to read new pre-image data from the start - v0_ = _a2; - } else { - v0_ = 0xFFffFFff; - v1_ = EBADF; + return (v0_, v1_, newPreimageKey_, newPreimageOffset_); } - - return (v0_, v1_, newPreimageKey_, newPreimageOffset_); } /// @notice Like Linux fcntl (file control) syscall, but only supports minimal file-descriptor control commands, to @@ -237,26 +245,28 @@ library MIPSSyscalls { /// @param v0_ The file status flag (only supported command is F_GETFL), or -1 on error. /// @param v1_ An error number, or 0 if there is no error. function handleSysFcntl(uint32 _a0, uint32 _a1) internal pure returns (uint32 v0_, uint32 v1_) { - v0_ = uint32(0); - v1_ = uint32(0); + unchecked { + v0_ = uint32(0); + v1_ = uint32(0); - // args: _a0 = fd, _a1 = cmd - if (_a1 == 3) { - // F_GETFL: get file descriptor flags - if (_a0 == FD_STDIN || _a0 == FD_PREIMAGE_READ || _a0 == FD_HINT_READ) { - v0_ = 0; // O_RDONLY - } else if (_a0 == FD_STDOUT || _a0 == FD_STDERR || _a0 == FD_PREIMAGE_WRITE || _a0 == FD_HINT_WRITE) { - v0_ = 1; // O_WRONLY + // args: _a0 = fd, _a1 = cmd + if (_a1 == 3) { + // F_GETFL: get file descriptor flags + if (_a0 == FD_STDIN || _a0 == FD_PREIMAGE_READ || _a0 == FD_HINT_READ) { + v0_ = 0; // O_RDONLY + } else if (_a0 == FD_STDOUT || _a0 == FD_STDERR || _a0 == FD_PREIMAGE_WRITE || _a0 == FD_HINT_WRITE) { + v0_ = 1; // O_WRONLY + } else { + v0_ = 0xFFffFFff; + v1_ = EBADF; + } } else { v0_ = 0xFFffFFff; - v1_ = EBADF; + v1_ = EINVAL; // cmd not recognized by this kernel } - } else { - v0_ = 0xFFffFFff; - v1_ = EINVAL; // cmd not recognized by this kernel - } - return (v0_, v1_); + return (v0_, v1_); + } } function handleSyscallUpdates( @@ -268,12 +278,14 @@ library MIPSSyscalls { internal pure { - // Write the results back to the state registers - _registers[2] = _v0; - _registers[7] = _v1; + unchecked { + // Write the results back to the state registers + _registers[2] = _v0; + _registers[7] = _v1; - // Update the PC and nextPC - _cpu.pc = _cpu.nextPC; - _cpu.nextPC = _cpu.nextPC + 4; + // Update the PC and nextPC + _cpu.pc = _cpu.nextPC; + _cpu.nextPC = _cpu.nextPC + 4; + } } } diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol index 244570d908af..d0e8be6b2315 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol @@ -25,7 +25,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { address internal constant l1ERC721BridgeProxyAddress = 0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865; address internal constant l1StandardBridgeAddress = 0xb7900B27Be8f0E0fF65d1C3A4671e1220437dd2b; address internal constant l1StandardBridgeProxyAddress = 0xDeF3bca8c80064589E6787477FFa7Dd616B5574F; - address internal constant mipsAddress = 0x28bF1582225713139c0E898326Db808B6484cFd4; + address internal constant mipsAddress = 0xcdAdd729ca2319E8955240bDb61A6A6A956A7664; address internal constant optimismPortal2Address = 0xfcbb237388CaF5b08175C9927a37aB6450acd535; address internal constant optimismPortalProxyAddress = 0x978e3286EB805934215a88694d80b09aDed68D90; address internal constant preimageOracleAddress = 0x3bd7E801E51d48c5d94Ea68e8B801DFFC275De75; diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol index 9b7795c24193..880728ad1d2f 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol @@ -55,11 +55,11 @@ contract DeploymentSummaryFaultProofsCode { bytes internal constant preimageOracleCode = hex"6080604052600436106101cd5760003560e01c80638dc4be11116100f7578063dd24f9bf11610095578063ec5efcbc11610064578063ec5efcbc1461065f578063f3f480d91461067f578063faf37bc7146106b2578063fef2b4ed146106c557600080fd5b8063dd24f9bf1461059f578063ddcd58de146105d2578063e03110e11461060a578063e15926111461063f57600080fd5b8063b2e67ba8116100d1578063b2e67ba814610512578063b4801e611461054a578063d18534b51461056a578063da35c6641461058a57600080fd5b80638dc4be11146104835780639d53a648146104a35780639d7e8769146104f257600080fd5b806354fd4d501161016f5780637917de1d1161013e5780637917de1d146103bf5780637ac54767146103df5780638542cf50146103ff578063882856ef1461044a57600080fd5b806354fd4d50146102dd57806361238bde146103335780636551927b1461036b5780637051472e146103a357600080fd5b80632055b36b116101ab5780632055b36b146102735780633909af5c146102885780634d52b4c9146102a857806352f0f3ad146102bd57600080fd5b8063013cf08b146101d25780630359a5631461022357806304697c7814610251575b600080fd5b3480156101de57600080fd5b506101f26101ed366004612d2f565b6106f2565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b34801561022f57600080fd5b5061024361023e366004612d71565b610737565b60405190815260200161021a565b34801561025d57600080fd5b5061027161026c366004612de4565b61086f565b005b34801561027f57600080fd5b50610243601081565b34801561029457600080fd5b506102716102a3366004613008565b6109a5565b3480156102b457600080fd5b50610243610bfc565b3480156102c957600080fd5b506102436102d83660046130f4565b610c17565b3480156102e957600080fd5b506103266040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161021a919061315b565b34801561033f57600080fd5b5061024361034e3660046131ac565b600160209081526000928352604080842090915290825290205481565b34801561037757600080fd5b50610243610386366004612d71565b601560209081526000928352604080842090915290825290205481565b3480156103af57600080fd5b506102436703782dace9d9000081565b3480156103cb57600080fd5b506102716103da3660046131ce565b610cec565b3480156103eb57600080fd5b506102436103fa366004612d2f565b6111ef565b34801561040b57600080fd5b5061043a61041a3660046131ac565b600260209081526000928352604080842090915290825290205460ff1681565b604051901515815260200161021a565b34801561045657600080fd5b5061046a61046536600461326a565b611206565b60405167ffffffffffffffff909116815260200161021a565b34801561048f57600080fd5b5061027161049e36600461329d565b611260565b3480156104af57600080fd5b506102436104be366004612d71565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601860209081526040808320938352929052205490565b3480156104fe57600080fd5b5061027161050d3660046132e9565b61135b565b34801561051e57600080fd5b5061024361052d366004612d71565b601760209081526000928352604080842090915290825290205481565b34801561055657600080fd5b5061024361056536600461326a565b611512565b34801561057657600080fd5b50610271610585366004613008565b611544565b34801561059657600080fd5b50601354610243565b3480156105ab57600080fd5b507f0000000000000000000000000000000000000000000000000000000000002710610243565b3480156105de57600080fd5b506102436105ed366004612d71565b601660209081526000928352604080842090915290825290205481565b34801561061657600080fd5b5061062a6106253660046131ac565b611906565b6040805192835260208301919091520161021a565b34801561064b57600080fd5b5061027161065a36600461329d565b6119f7565b34801561066b57600080fd5b5061027161067a366004613375565b611aff565b34801561068b57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000078610243565b6102716106c036600461340e565b611c85565b3480156106d157600080fd5b506102436106e0366004612d2f565b60006020819052908152604090205481565b6013818154811061070257600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601560209081526040808320848452909152812054819061077a9060601c63ffffffff1690565b63ffffffff16905060005b6010811015610867578160011660010361080d5773ffffffffffffffffffffffffffffffffffffffff85166000908152601460209081526040808320878452909152902081601081106107da576107da61344a565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925061084e565b82600382601081106108215761082161344a565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c908061085f816134a8565b915050610785565b505092915050565b600080600080608060146030823785878260140137601480870182207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06000000000000000000000000000000000000000000000000000000000000001794506000908190889084018b5afa94503d60010191506008820189106108fc5763fe2549876000526004601cfd5b60c082901b81526008018481533d6000600183013e88017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8015160008481526002602090815260408083208c8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915587845282528083209b83529a81528a82209290925593845283905296909120959095555050505050565b60006109b18a8a610737565b90506109d486868360208b01356109cf6109ca8d6134e0565b611ef0565b611f30565b80156109f257506109f283838360208801356109cf6109ca8a6134e0565b610a28576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866040013588604051602001610a3e91906135af565b6040516020818303038152906040528051906020012014610a8b576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836020013587602001356001610aa191906135ed565b14610ad8576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b2088610ae68680613605565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f9192505050565b610b29886120ec565b836040013588604051602001610b3f91906135af565b6040516020818303038152906040528051906020012003610b8c576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526015602090815260408083208c8452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055610bf08a8a33612894565b50505050505050505050565b6001610c0a6010600261378c565b610c149190613798565b81565b6000610c23868661294d565b9050610c308360086135ed565b821180610c3d5750602083115b15610c74576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b60608115610d0557610cfe86866129fa565b9050610d3f565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b815481526020019060010190808311610d6c57505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610ded8260601c63ffffffff1690565b63ffffffff169050333214610e2e576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e3e8260801c63ffffffff1690565b63ffffffff16600003610e7d576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e878260c01c90565b67ffffffffffffffff1615610ec8576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610f01576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f0e89898d8886612a73565b83516020850160888204881415608883061715610f33576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610fe3578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610fd8576001821615610fb85782818b0152610fd8565b8981015160009081526020938452604090209260019290921c9101610f9b565b505050608801610f40565b50505050600160106002610ff7919061378c565b6110019190613798565b81111561103a576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110af61104d8360401c63ffffffff1690565b61105d9063ffffffff168a6135ed565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b9150841561113c5777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b1791506110e98260801c63ffffffff1690565b63ffffffff166110ff8360401c63ffffffff1690565b63ffffffff161461113c576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083208e8452909152902061116290846010612ca5565b503360008181526018602090815260408083208f8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055838352601582528083208f8452909152812084905560609190911b81523690601437366014016000a05050505050505050505050565b600381601081106111ff57600080fd5b0154905081565b6018602052826000526040600020602052816000526040600020818154811061122e57600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b60443560008060088301861061127e5763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa9050806112ab57600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b600080603087600037602060006030600060025afa806113835763f91129696000526004601cfd5b6000517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017608081815260a08c905260c08b905260308a60e037603088609083013760008060c083600a5afa925082611405576309bde3396000526004601cfd5b6028861061141b5763fe2549876000526004601cfd5b6000602882015278200000000000000000000000000000000000000000000000008152600881018b905285810151935060308a8237603081019b909b52505060509098207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0500000000000000000000000000000000000000000000000000000000000000176000818152600260209081526040808320868452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209583529481528482209a909a559081528089529190912096909655505050505050565b6014602052826000526040600020602052816000526040600020816010811061153a57600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff8116156115b7576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000786115e28260c01c90565b6115f69067ffffffffffffffff1642613798565b1161162d576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116398b8b610737565b905061165287878360208c01356109cf6109ca8e6134e0565b8015611670575061167084848360208901356109cf6109ca8b6134e0565b6116a6576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016116bc91906135af565b6040516020818303038152906040528051906020012014611709576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84602001358860200135600161171f91906135ed565b141580611751575060016117398360601c63ffffffff1690565b61174391906137af565b63ffffffff16856020013514155b15611788576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61179689610ae68780613605565b61179f896120ec565b60006117aa8a612bc6565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f020000000000000000000000000000000000000000000000000000000000000017905060006118018460a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601760008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d815260200190815260200160002054600160008481526020019081526020016000206000838152602001908152602001600020819055506118d38460801c63ffffffff1690565b600083815260208190526040902063ffffffff9190911690556118f78d8d81612894565b50505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff1661198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546119ab8160086135ed565b6119b68560206135ed565b106119d457836119c78260086135ed565b6119d19190613798565b91505b506000938452600160209081526040808620948652939052919092205492909150565b604435600080600883018610611a155763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b6000611b0b8686610737565b9050611b2483838360208801356109cf6109ca8a6134e0565b611b5a576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084013515611b96576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b9e612ce3565b611bac81610ae68780613605565b611bb5816120ec565b846040013581604051602001611bcb91906135af565b6040516020818303038152906040528051906020012003611c18576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166000908152601560209081526040808320898452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055611c7c878733612894565b50505050505050565b6703782dace9d90000341015611cc7576040517fe92c469f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333214611d00576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d0b8160086137d4565b63ffffffff168263ffffffff1610611d4f576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000027108163ffffffff161015611daf576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b949094179094558251808401845282815280850186815260138054600181018255908452915160029092027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9094167fffffffffffffffffffffffff000000000000000000000000000000000000000090941693909317909255517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0919091015590815260168352818120938152929091529020349055565b6000816000015182602001518360400151604051602001611f13939291906137fc565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611f84578060051b880135600186831c1660018114611f695760008481526020839052604090209350611f7a565b600082815260208590526040902093505b5050600101611f36565b5090931495945050505050565b6088815114611f9f57600080fd5b6020810160208301612020565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b171717905061201a81612005868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b61202c60008383611fac565b61203860018383611fac565b61204460028383611fac565b61205060038383611fac565b61205c60048383611fac565b61206860058383611fac565b61207460068383611fac565b61208060078383611fac565b61208c60088383611fac565b61209860098383611fac565b6120a4600a8383611fac565b6120b0600b8383611fac565b6120bc600c8383611fac565b6120c8600d8383611fac565b6120d4600e8383611fac565b6120e0600f8383611fac565b61201a60108383611fac565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e00160405160208183030381529060405290506020820160208201612774565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c61229f8660011b67ffffffffffffffff1690565b18188584603f1c6122ba8660011b67ffffffffffffffff1690565b18188584603f1c6122d58660011b67ffffffffffffffff1690565b181895508483603f1c6122f28560011b67ffffffffffffffff1690565b181894508387603f1c61230f8960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525b5050505050565b600582811b8201805160018501831b8401805160028701851b8601805160038901871b8801805160048b0190981b8901805167ffffffffffffffff861985168918811690995283198a16861889169096528819861683188816909352841986168818871690528419831684189095169052919391929190611c7c565b61270e600082612687565b612719600582612687565b612724600a82612687565b61272f600f82612687565b61273a601482612687565b50565b612746816121e2565b61274f81612703565b600383901b820151815160c09190911c9061201a90821867ffffffffffffffff168352565b6127806000828461273d565b61278c6001828461273d565b6127986002828461273d565b6127a46003828461273d565b6127b06004828461273d565b6127bc6005828461273d565b6127c86006828461273d565b6127d46007828461273d565b6127e06008828461273d565b6127ec6009828461273d565b6127f8600a828461273d565b612804600b828461273d565b612810600c828461273d565b61281c600d828461273d565b612828600e828461273d565b612834600f828461273d565b6128406010828461273d565b61284c6011828461273d565b6128586012828461273d565b6128646013828461273d565b6128706014828461273d565b61287c6015828461273d565b6128886016828461273d565b61201a6017828461273d565b73ffffffffffffffffffffffffffffffffffffffff83811660009081526016602090815260408083208684529091528082208054908390559051909284169083908381818185875af1925050503d806000811461290d576040519150601f19603f3d011682016040523d82523d6000602084013e612912565b606091505b5050905080612680576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316176129f3818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b6060604051905081602082018181018286833760888306808015612a435760888290038501848101848103803687375060806001820353506001845160001a1784538652612a5a565b608836843760018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b6000612a858260a01c63ffffffff1690565b67ffffffffffffffff1690506000612aa38360801c63ffffffff1690565b63ffffffff1690506000612abd8460401c63ffffffff1690565b63ffffffff169050600883108015612ad3575080155b15612b075760c082901b6000908152883560085283513382526017602090815260408084208a855290915290912055612bbc565b60088310158015612b25575080612b1f600885613798565b93508310155b8015612b395750612b3687826135ed565b83105b15612bbc576000612b4a8285613798565b905087612b588260206135ed565b10158015612b64575085155b15612b9b576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526017602090815260408083208a845290915290209089013590555b5050505050505050565b6000612c49565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff00612bf78360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff0000612c248360101b67ffffffffffffffff1690565b1617905060008160201c612c428360201b67ffffffffffffffff1690565b1792915050565b60808201516020830190612c6190612bcd565b612bcd565b6040820151612c6f90612bcd565b60401b17612c87612c5c60018460059190911b015190565b825160809190911b90612c9990612bcd565b60c01b17179392505050565b8260108101928215612cd3579160200282015b82811115612cd3578251825591602001919060010190612cb8565b50612cdf929150612cfb565b5090565b6040518060200160405280612cf6612d10565b905290565b5b80821115612cdf5760008155600101612cfc565b6040518061032001604052806019906020820280368337509192915050565b600060208284031215612d4157600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612d6c57600080fd5b919050565b60008060408385031215612d8457600080fd5b612d8d83612d48565b946020939093013593505050565b60008083601f840112612dad57600080fd5b50813567ffffffffffffffff811115612dc557600080fd5b602083019150836020828501011115612ddd57600080fd5b9250929050565b60008060008060608587031215612dfa57600080fd5b84359350612e0a60208601612d48565b9250604085013567ffffffffffffffff811115612e2657600080fd5b612e3287828801612d9b565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff81118282101715612e9157612e91612e3e565b60405290565b6040516060810167ffffffffffffffff81118282101715612e9157612e91612e3e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612f0157612f01612e3e565b604052919050565b6000610320808385031215612f1d57600080fd5b604051602080820167ffffffffffffffff8382108183111715612f4257612f42612e3e565b8160405283955087601f880112612f5857600080fd5b612f60612e6d565b9487019491508188861115612f7457600080fd5b875b86811015612f9c5780358381168114612f8f5760008081fd5b8452928401928401612f76565b50909352509295945050505050565b600060608284031215612fbd57600080fd5b50919050565b60008083601f840112612fd557600080fd5b50813567ffffffffffffffff811115612fed57600080fd5b6020830191508360208260051b8501011115612ddd57600080fd5b60008060008060008060008060006103e08a8c03121561302757600080fd5b6130308a612d48565b985060208a013597506130468b60408c01612f09565b96506103608a013567ffffffffffffffff8082111561306457600080fd5b6130708d838e01612fab565b97506103808c013591508082111561308757600080fd5b6130938d838e01612fc3565b90975095506103a08c01359150808211156130ad57600080fd5b6130b98d838e01612fab565b94506103c08c01359150808211156130d057600080fd5b506130dd8c828d01612fc3565b915080935050809150509295985092959850929598565b600080600080600060a0868803121561310c57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60005b8381101561314a578181015183820152602001613132565b8381111561201a5750506000910152565b602081526000825180602084015261317a81604085016020870161312f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080604083850312156131bf57600080fd5b50508035926020909101359150565b600080600080600080600060a0888a0312156131e957600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561320f57600080fd5b61321b8b838c01612d9b565b909750955060608a013591508082111561323457600080fd5b506132418a828b01612fc3565b9094509250506080880135801515811461325a57600080fd5b8091505092959891949750929550565b60008060006060848603121561327f57600080fd5b61328884612d48565b95602085013595506040909401359392505050565b6000806000604084860312156132b257600080fd5b83359250602084013567ffffffffffffffff8111156132d057600080fd5b6132dc86828701612d9b565b9497909650939450505050565b600080600080600080600060a0888a03121561330457600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561332a57600080fd5b6133368b838c01612d9b565b909750955060608a013591508082111561334f57600080fd5b5061335c8a828b01612d9b565b989b979a50959894979596608090950135949350505050565b60008060008060006080868803121561338d57600080fd5b61339686612d48565b945060208601359350604086013567ffffffffffffffff808211156133ba57600080fd5b6133c689838a01612fab565b945060608801359150808211156133dc57600080fd5b506133e988828901612fc3565b969995985093965092949392505050565b803563ffffffff81168114612d6c57600080fd5b60008060006060848603121561342357600080fd5b83359250613433602085016133fa565b9150613441604085016133fa565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036134d9576134d9613479565b5060010190565b6000606082360312156134f257600080fd5b6134fa612e97565b823567ffffffffffffffff8082111561351257600080fd5b9084019036601f83011261352557600080fd5b813560208282111561353957613539612e3e565b613569817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612eba565b9250818352368183860101111561357f57600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b60198110156135e457825167ffffffffffffffff168252602092830192909101906001016135bb565b50505092915050565b6000821982111561360057613600613479565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261363a57600080fd5b83018035915067ffffffffffffffff82111561365557600080fd5b602001915036819003821315612ddd57600080fd5b600181815b808511156136c357817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156136a9576136a9613479565b808516156136b657918102915b93841c939080029061366f565b509250929050565b6000826136da57506001613786565b816136e757506000613786565b81600181146136fd576002811461370757613723565b6001915050613786565b60ff84111561371857613718613479565b50506001821b613786565b5060208310610133831016604e8410600b8410161715613746575081810a613786565b613750838361366a565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561378257613782613479565b0290505b92915050565b60006129f383836136cb565b6000828210156137aa576137aa613479565b500390565b600063ffffffff838116908316818110156137cc576137cc613479565b039392505050565b600063ffffffff8083168185168083038211156137f3576137f3613479565b01949350505050565b6000845161380e81846020890161312f565b9190910192835250602082015260400191905056fea164736f6c634300080f000a"; bytes internal constant mipsCode = - hex"608060405234801561001057600080fd5b506004361061004c5760003560e01c8063155633fe1461005157806354fd4d50146100765780637dc0d1d0146100bf578063e14ced3214610103575b600080fd5b61005c634000000081565b60405163ffffffff90911681526020015b60405180910390f35b6100b26040518060400160405280600c81526020017f312e312e302d626574612e34000000000000000000000000000000000000000081525081565b60405161006d9190612378565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de7516815260200161006d565b61011661011136600461242d565b610124565b60405190815260200161006d565b600061012e6122ee565b6080811461013b57600080fd5b6040516106001461014b57600080fd5b6084871461015857600080fd5b6101a4851461016657600080fd5b8635608052602087013560a052604087013560e090811c60c09081526044890135821c82526048890135821c61010052604c890135821c610120526050890135821c61014052605489013590911c61016052605888013560f890811c610180526059890135901c6101a052605a880135901c6101c0526102006101e0819052606288019060005b602081101561021157823560e01c82526004909201916020909101906001016101ed565b5050508061012001511561022f5761022761082b565b915050610822565b6101408101805160010167ffffffffffffffff16905260006101a4905060006102618360000151846060015184610947565b9050603f601a82901c16600281148061028057508063ffffffff166003145b156102d75760006002836303ffffff1663ffffffff16901b856080015163f0000000161790506102cb858363ffffffff166002146102bf57601f6102c2565b60005b60ff16836109fb565b95505050505050610822565b6101608401516000908190601f601086901c81169190601587901c1660208110610303576103036124a1565b602002015192508063ffffffff8516158061032457508463ffffffff16601c145b1561035b578761016001518263ffffffff1660208110610346576103466124a1565b6020020151925050601f600b86901c16610417565b60208563ffffffff1610156103bd578463ffffffff16600c148061038557508463ffffffff16600d145b8061039657508463ffffffff16600e145b156103a7578561ffff169250610417565b6103b68661ffff166010610ac5565b9250610417565b60288563ffffffff161015806103d957508463ffffffff166022145b806103ea57508463ffffffff166026145b15610417578761016001518263ffffffff166020811061040c5761040c6124a1565b602002015192508190505b60048563ffffffff1610158015610434575060088563ffffffff16105b8061044557508463ffffffff166001145b156105255760006104c4896040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b90506104d9818a6101600151888a878a610b38565b805163ffffffff9081166060808c01919091526020830151821660808c01526040830151821660a08c01528201511660c08a015261051561082b565b9950505050505050505050610822565b63ffffffff6000602087831610610591576105458861ffff166010610ac5565b8a5196019563fffffffc87169061052490610561908383610947565b925060288963ffffffff161015801561058157508863ffffffff16603014155b1561058e57819350600094505b50505b600061059f89888885610d2b565b63ffffffff9081169150603f8a169089161580156105c4575060088163ffffffff1610155b80156105d65750601c8163ffffffff16105b15610793578063ffffffff16600814806105f657508063ffffffff166009145b1561062f5761061c8c8263ffffffff166008146106135786610616565b60005b8a6109fb565b9c50505050505050505050505050610822565b8063ffffffff16600a036106505761061c8c868a63ffffffff8b16156114bb565b8063ffffffff16600b036106725761061c8c868a63ffffffff8b1615156114bb565b8063ffffffff16600c036106895761061c8e611590565b60108163ffffffff16101580156106a65750601c8163ffffffff16105b156107935760006107258d6040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b905061073a818e6101600151848c8c8b6118cd565b6107778d82805163ffffffff9081166060808501919091526020830151821660808501526040830151821660a0850152909101511660c090910152565b61077f61082b565b9d5050505050505050505050505050610822565b8863ffffffff1660381480156107ae575063ffffffff861615155b156107e35760018c61016001518763ffffffff16602081106107d2576107d26124a1565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff1461080657610524610802858285611b86565b8d52505b6108138c868460016114bb565b9c505050505050505050505050505b95945050505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019190855b60208110156108ca57601c86015184526020909501946004909301926001016108a6565b506000835283830384a06000945080600181146108ea5760039550610912565b828015610902576001811461090b5760029650610910565b60009650610910565b600196505b505b50505081900390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89190911b17919050565b600061095282611c28565b600383161561096057600080fd5b6020820191358360051c8160005b601b8110156109c65760208601953583821c600116801561099657600181146109ab576109bc565b600084815260208390526040902093506109bc565b600082815260208590526040902093505b505060010161096e565b508681146109dc57630badf00d60005260206000fd5b5050601f93909316601c0360031b9290921c63ffffffff169392505050565b600080610a76856040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b9050610a89818661016001518686611cc8565b805163ffffffff9081166060808801919091526020830151821660808801526040830151821660a08801528201511660c086015261082261082b565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b0182610b22576000610b24565b815b90861663ffffffff16179250505092915050565b6000866000015160040163ffffffff16876020015163ffffffff1614610bbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f7400000000000000000000000060448201526064015b60405180910390fd5b8463ffffffff1660041480610bda57508463ffffffff166005145b15610c51576000868463ffffffff1660208110610bf957610bf96124a1565b602002015190508063ffffffff168363ffffffff16148015610c2157508563ffffffff166004145b80610c4957508063ffffffff168363ffffffff1614158015610c4957508563ffffffff166005145b915050610cce565b8463ffffffff16600603610c6e5760008260030b13159050610cce565b8463ffffffff16600703610c8a5760008260030b139050610cce565b8463ffffffff16600103610cce57601f601085901c166000819003610cb35760008360030b1291505b8063ffffffff16600103610ccc5760008360030b121591505b505b8651602088015163ffffffff1688528115610d0f576002610cf48661ffff166010610ac5565b63ffffffff90811690911b8201600401166020890152610d21565b60208801805160040163ffffffff1690525b5050505050505050565b6000603f601a86901c16801580610d5a575060088163ffffffff1610158015610d5a5750600f8163ffffffff16105b156111b057603f86168160088114610da15760098114610daa57600a8114610db357600b8114610dbc57600c8114610dc557600d8114610dce57600e8114610dd757610ddc565b60209150610ddc565b60219150610ddc565b602a9150610ddc565b602b9150610ddc565b60249150610ddc565b60259150610ddc565b602691505b508063ffffffff16600003610e035750505063ffffffff8216601f600686901c161b6114b3565b8063ffffffff16600203610e295750505063ffffffff8216601f600686901c161c6114b3565b8063ffffffff16600303610e5f57601f600688901c16610e5563ffffffff8716821c6020839003610ac5565b93505050506114b3565b8063ffffffff16600403610e815750505063ffffffff8216601f84161b6114b3565b8063ffffffff16600603610ea35750505063ffffffff8216601f84161c6114b3565b8063ffffffff16600703610ed657610ecd8663ffffffff168663ffffffff16901c87602003610ac5565b925050506114b3565b8063ffffffff16600803610eee5785925050506114b3565b8063ffffffff16600903610f065785925050506114b3565b8063ffffffff16600a03610f1e5785925050506114b3565b8063ffffffff16600b03610f365785925050506114b3565b8063ffffffff16600c03610f4e5785925050506114b3565b8063ffffffff16600f03610f665785925050506114b3565b8063ffffffff16601003610f7e5785925050506114b3565b8063ffffffff16601103610f965785925050506114b3565b8063ffffffff16601203610fae5785925050506114b3565b8063ffffffff16601303610fc65785925050506114b3565b8063ffffffff16601803610fde5785925050506114b3565b8063ffffffff16601903610ff65785925050506114b3565b8063ffffffff16601a0361100e5785925050506114b3565b8063ffffffff16601b036110265785925050506114b3565b8063ffffffff1660200361103f575050508282016114b3565b8063ffffffff16602103611058575050508282016114b3565b8063ffffffff16602203611071575050508183036114b3565b8063ffffffff1660230361108a575050508183036114b3565b8063ffffffff166024036110a3575050508282166114b3565b8063ffffffff166025036110bc575050508282176114b3565b8063ffffffff166026036110d5575050508282186114b3565b8063ffffffff166027036110ef57505050828217196114b3565b8063ffffffff16602a03611120578460030b8660030b12611111576000611114565b60015b60ff16925050506114b3565b8063ffffffff16602b03611148578463ffffffff168663ffffffff1610611111576000611114565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e000000000000000000000000006044820152606401610bb6565b50611148565b8063ffffffff16601c0361123457603f861660028190036111d6575050508282026114b3565b8063ffffffff16602014806111f157508063ffffffff166021145b156111aa578063ffffffff16602003611208579419945b60005b638000000087161561122a576401fffffffe600197881b16960161120b565b92506114b3915050565b8063ffffffff16600f0361125657505065ffffffff0000601083901b166114b3565b8063ffffffff166020036112925761128a8560031660080260180363ffffffff168463ffffffff16901c60ff166008610ac5565b9150506114b3565b8063ffffffff166021036112c75761128a8560021660080260100363ffffffff168463ffffffff16901c61ffff166010610ac5565b8063ffffffff166022036112f657505063ffffffff60086003851602811681811b198416918316901b176114b3565b8063ffffffff1660230361130d57829150506114b3565b8063ffffffff1660240361133f578460031660080260180363ffffffff168363ffffffff16901c60ff169150506114b3565b8063ffffffff16602503611372578460021660080260100363ffffffff168363ffffffff16901c61ffff169150506114b3565b8063ffffffff166026036113a457505063ffffffff60086003851602601803811681811c198416918316901c176114b3565b8063ffffffff166028036113da57505060ff63ffffffff60086003861602601803811682811b9091188316918416901b176114b3565b8063ffffffff1660290361141157505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b176114b3565b8063ffffffff16602a0361144057505063ffffffff60086003851602811681811c198316918416901c176114b3565b8063ffffffff16602b0361145757839150506114b3565b8063ffffffff16602e0361148957505063ffffffff60086003851602601803811681811b198316918416901b176114b3565b8063ffffffff166030036114a057829150506114b3565b8063ffffffff1660380361114857839150505b949350505050565b600080611536866040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b905061154a81876101600151878787611d9b565b805163ffffffff9081166060808901919091526020830151821660808901526040830151821660a08901528201511660c087015261158661082b565b9695505050505050565b600061159a6122ee565b506101e051604081015160808083015160a084015160c090940151919390916000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00663ffffffff87160161160d576115f885858960e00151611e6b565b63ffffffff1660e08a015290925090506117f6565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03363ffffffff87160161164657634000000091506117f6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefe863ffffffff87160161167c57600191506117f6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef6a63ffffffff8716016116d057600161012088015260ff85166101008801526116c361082b565b9998505050505050505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05d63ffffffff871601611754576020870151604088015161173d918791879187918e7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de756105248f51611ec7565b8a5263ffffffff1660408a015290925090506117f6565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05c63ffffffff8716016117b9576020870151604088015161179f918791879187916105248d51612105565b63ffffffff1660408b015260208a015290925090506117f6565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02963ffffffff8716016117f6576117f085856121fb565b90925090505b6000611870886040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b90506118838189610160015185856122b0565b805163ffffffff9081166060808b01919091526020830151821660808b01526040830151821660a08b01528201511660c08901526118bf61082b565b9a9950505050505050505050565b60008463ffffffff166010036118e857506060860151611b2e565b8463ffffffff166011036119075763ffffffff84166060880152611b2e565b8463ffffffff1660120361192057506040860151611b2e565b8463ffffffff1660130361193f5763ffffffff84166040880152611b2e565b8463ffffffff166018036119735763ffffffff600385810b9085900b02602081901c821660608a0152166040880152611b2e565b8463ffffffff166019036119a45763ffffffff84811681851602602081901c821660608a0152166040880152611b2e565b8463ffffffff16601a03611a67578260030b600003611a1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f000000000000000000006044820152606401610bb6565b8260030b8460030b81611a3457611a346124d0565b0763ffffffff166060880152600383810b9085900b81611a5657611a566124d0565b0563ffffffff166040880152611b2e565b8463ffffffff16601b03611b2e578263ffffffff16600003611ae5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f000000000000000000006044820152606401610bb6565b8263ffffffff168463ffffffff1681611b0057611b006124d0565b0663ffffffff908116606089015283811690851681611b2157611b216124d0565b0463ffffffff1660408801525b63ffffffff821615611b645780868363ffffffff1660208110611b5357611b536124a1565b63ffffffff90921660209290920201525b50505060208401805163ffffffff808216909652600401909416909352505050565b6000611b9183611c28565b6003841615611b9f57600080fd5b6020830192601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611c1d5760208601953582821c6001168015611bed5760018114611c0257611c13565b60008581526020839052604090209450611c13565b600082815260208690526040902094505b5050600101611bc5565b509095945050505050565b36611c358261038061252e565b811015611cc4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f61746100000000000000000000000000000000000000000000000000000000006064820152608401610bb6565b5050565b836000015160040163ffffffff16846020015163ffffffff1614611d48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f7400000000000000000000000000006044820152606401610bb6565b835160208501805163ffffffff9081168752838116909152831615611d945780600801848463ffffffff1660208110611d8357611d836124a1565b63ffffffff90921660209290920201525b5050505050565b60208363ffffffff1610611e0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c69642072656769737465720000000000000000000000000000000000006044820152606401610bb6565b63ffffffff831615801590611e1d5750805b15611e4c5781848463ffffffff1660208110611e3b57611e3b6124a1565b63ffffffff90921660209290920201525b5050505060208101805163ffffffff8082169093526004019091169052565b6000808284610fff811615611e9757611e8a610fff8216611000612546565b611e94908261256b565b90505b8663ffffffff16600003611eb957849350611eb2818361256b565b9150611ebd565b8693505b5093509350939050565b600080868363ffffffff8d16156120f5577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8e16016120b4576000611f18868e63fffffffc1689610947565b90508a60001a600103611f81576040805160008d8152336020528b83526060902091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0100000000000000000000000000000000000000000000000000000000000000179a505b6040517fe03110e1000000000000000000000000000000000000000000000000000000008152600481018c905263ffffffff8b166024820152600090819073ffffffffffffffffffffffffffffffffffffffff8b169063e03110e1906044016040805180830381865afa158015611ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120209190612593565b9150915060038f168060040382811015612038578092505b50818f1015612045578e91505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b0391508119811690508381198616179450505061209b8f63fffffffc168a85611b86565b93506120a7818661256b565b94508096505050506120f5565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff8e16016120e9578a93506120f5565b63ffffffff9350600992505b9950995099509995505050505050565b600080858563ffffffff8b1660011480612125575063ffffffff8b166002145b80612136575063ffffffff8b166004145b15612143578893506121ed565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff8c16016121e1576000612183868c63fffffffc1689610947565b90508860038c166004038b81101561219957809b505b8b965086900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193880293841b0116911b179150600090506121ed565b63ffffffff9350600992505b975097509750979350505050565b60008063ffffffff831660030361229e5763ffffffff84161580612225575063ffffffff84166005145b80612236575063ffffffff84166003145b1561224457600091506122a9565b63ffffffff84166001148061225f575063ffffffff84166002145b80612270575063ffffffff84166006145b80612281575063ffffffff84166004145b1561228f57600191506122a9565b5063ffffffff905060096122a9565b5063ffffffff905060165b9250929050565b63ffffffff808316604085015281811660e0850152602085015190811685526122da90600461256b565b63ffffffff16602090940193909352505050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101612354612359565b905290565b6040518061040001604052806020906020820280368337509192915050565b600060208083528351808285015260005b818110156123a557858101830151858201604001528201612389565b818111156123b7576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008083601f8401126123fd57600080fd5b50813567ffffffffffffffff81111561241557600080fd5b6020830191508360208285010111156122a957600080fd5b60008060008060006060868803121561244557600080fd5b853567ffffffffffffffff8082111561245d57600080fd5b61246989838a016123eb565b9097509550602088013591508082111561248257600080fd5b5061248f888289016123eb565b96999598509660400135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612541576125416124ff565b500190565b600063ffffffff83811690831681811015612563576125636124ff565b039392505050565b600063ffffffff80831681851680830382111561258a5761258a6124ff565b01949350505050565b600080604083850312156125a657600080fd5b50508051602090910151909290915056fea164736f6c634300080f000a"; + hex"608060405234801561001057600080fd5b506004361061004c5760003560e01c8063155633fe1461005157806354fd4d50146100765780637dc0d1d0146100bf578063e14ced3214610103575b600080fd5b61005c634000000081565b60405163ffffffff90911681526020015b60405180910390f35b6100b26040518060400160405280600c81526020017f312e312e302d626574612e35000000000000000000000000000000000000000081525081565b60405161006d9190612084565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de7516815260200161006d565b610116610111366004612139565b610124565b60405190815260200161006d565b600061012e611ffa565b6080811461013b57600080fd5b6040516106001461014b57600080fd5b6084871461015857600080fd5b6101a4851461016657600080fd5b8635608052602087013560a052604087013560e090811c60c09081526044890135821c82526048890135821c61010052604c890135821c610120526050890135821c61014052605489013590911c61016052605888013560f890811c610180526059890135901c6101a052605a880135901c6101c0526102006101e0819052606288019060005b602081101561021157823560e01c82526004909201916020909101906001016101ed565b5050508061012001511561022f57610227610387565b91505061037e565b6101408101805160010167ffffffffffffffff16905260006101a49050600080600061026485606001518660000151866104a3565b9250925092508163ffffffff16600014801561028657508063ffffffff16600c145b156102a057610294876104ca565b9550505050505061037e565b600061031a866040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b610160870151875191925061033791839190610524888888610821565b8652805163ffffffff9081166060808901919091526020830151821660808901526040830151821660a08901528201511660c0870152610375610387565b96505050505050505b95945050505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019190855b602081101561042657601c8601518452602090950194600490930192600101610402565b506000835283830384a0600094508060018114610446576003955061046e565b82801561045e5760018114610467576002965061046c565b6000965061046c565b600196505b505b50505081900390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89190911b17919050565b60008060006104b3858786610c07565b96603f601a89901c81169750881695509350505050565b60006104d4611ffa565b506101e051604081015160808083015160a084015160c090940151919390916000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00663ffffffff8716016105475761053285858960e00151610cbb565b63ffffffff1660e08a01529092509050610730565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03363ffffffff8716016105805763400000009150610730565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefe863ffffffff8716016105b65760019150610730565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef6a63ffffffff87160161060a57600161012088015260ff85166101008801526105fd610387565b9998505050505050505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05d63ffffffff87160161068e5760208701516040880151610677918791879187918e7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de756105248f51610cfd565b8a5263ffffffff1660408a01529092509050610730565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05c63ffffffff8716016106f357602087015160408801516106d9918791879187916105248d51610f33565b63ffffffff1660408b015260208a01529092509050610730565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02963ffffffff8716016107305761072a8585611029565b90925090505b60006107aa886040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b61016089015163ffffffff85811660408084019190915285821660e0909301929092526020830180518083168086526004909101831682526060808e01919091529051821660808d015291830151811660a08c0152908201511660c08a01529050610813610387565b9a9950505050505050505050565b84600263ffffffff8416148061083d57508263ffffffff166003145b1561088f5760006002856303ffffff1663ffffffff16901b896020015163f00000001617905061088989898663ffffffff1660021461087d57601f610880565b60005b60ff16846110de565b50610bfc565b600080601f601087901c8116908a90601589901c16602081106108b4576108b46121ad565b602002015192508063ffffffff871615806108d557508663ffffffff16601c145b15610907578a8263ffffffff16602081106108f2576108f26121ad565b6020020151925050601f600b88901c166109be565b60208763ffffffff161015610969578663ffffffff16600c148061093157508663ffffffff16600d145b8061094257508663ffffffff16600e145b15610953578761ffff1692506109be565b6109628861ffff1660106111b6565b92506109be565b60288763ffffffff1610158061098557508663ffffffff166022145b8061099657508663ffffffff166026145b156109be578a8263ffffffff16602081106109b3576109b36121ad565b602002015192508190505b60048763ffffffff16101580156109db575060088763ffffffff16105b806109ec57508663ffffffff166001145b15610a08576109ff8c8c898b8689611229565b50505050610bfc565b63ffffffff6000602089831610610a6d57610a288a61ffff1660106111b6565b9095019463fffffffc8616610a3e8d828e610c07565b915060288a63ffffffff1610158015610a5e57508963ffffffff16603014155b15610a6b57809250600093505b505b6000610a7d8b8b8b8a8a87611417565b63ffffffff1690508963ffffffff166000148015610aa2575060088963ffffffff1610155b8015610ab45750601c8963ffffffff16105b15610b7c578863ffffffff1660081480610ad457508863ffffffff166009145b15610b0757610afb8f8f8b63ffffffff16600814610af25786610af5565b60005b8a6110de565b50505050505050610bfc565b8863ffffffff16600a03610b2957610afb8f8f868a63ffffffff8b1615611b36565b8863ffffffff16600b03610b4c57610afb8f8f868a63ffffffff8b161515611b36565b60108963ffffffff1610158015610b695750601c8963ffffffff16105b15610b7c57610afb8f8f8b8a8a89611c06565b8963ffffffff166038148015610b97575063ffffffff851615155b15610bc75760018e8663ffffffff1660208110610bb657610bb66121ad565b63ffffffff90921660209290920201525b8263ffffffff1663ffffffff14610be657610be3838d83611ebf565b97505b610bf48f8f86846001611b36565b505050505050505b979650505050505050565b6000610c1282611f61565b6003831615610c2057600080fd5b6020820191358360051c8160005b601b811015610c865760208601953583821c6001168015610c565760018114610c6b57610c7c565b60008481526020839052604090209350610c7c565b600082815260208590526040902093505b5050600101610c2e565b50868114610c9c57630badf00d60005260206000fd5b5050601f93909316601c0360031b9290921c63ffffffff169392505050565b6000808284610fff811615610cd557610fff811661100003015b8663ffffffff16600003610cef5784935090810190610cf3565b8693505b5093509350939050565b600080868363ffffffff8d1615610f23577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8e1601610ee2576000610d4e868e63fffffffc1689610c07565b90508a60001a600103610db7576040805160008d8152336020528b83526060902091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0100000000000000000000000000000000000000000000000000000000000000179a505b6040517fe03110e1000000000000000000000000000000000000000000000000000000008152600481018c905263ffffffff8b166024820152600090819073ffffffffffffffffffffffffffffffffffffffff8b169063e03110e1906044016040805180830381865afa158015610e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5691906121dc565b9150915060038f168060040382811015610e6e578092505b50818f1015610e7b578e91505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b03915081198116905083811986161794505050610ed18f63fffffffc168a85611ebf565b909650938601939250610f23915050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff8e1601610f17578a9350610f23565b63ffffffff9350600992505b9950995099509995505050505050565b600080858563ffffffff8b1660011480610f53575063ffffffff8b166002145b80610f64575063ffffffff8b166004145b15610f715788935061101b565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff8c160161100f576000610fb1868c63fffffffc1689610c07565b90508860038c166004038b811015610fc757809b505b8b965086900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193880293841b0116911b1791506000905061101b565b63ffffffff9350600992505b975097509750979350505050565b60008063ffffffff83166003036110cc5763ffffffff84161580611053575063ffffffff84166005145b80611064575063ffffffff84166003145b1561107257600091506110d7565b63ffffffff84166001148061108d575063ffffffff84166002145b8061109e575063ffffffff84166006145b806110af575063ffffffff84166004145b156110bd57600191506110d7565b5063ffffffff905060096110d7565b5063ffffffff905060165b9250929050565b836000015160040163ffffffff16846020015163ffffffff1614611163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b835160208501805163ffffffff90811687528381169091528316156111af5780600801848463ffffffff166020811061119e5761119e6121ad565b63ffffffff90921660209290920201525b5050505050565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b0182611213576000611215565b815b90861663ffffffff16179250505092915050565b6000866000015160040163ffffffff16876020015163ffffffff16146112ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f74000000000000000000000000604482015260640161115a565b8463ffffffff16600414806112c657508463ffffffff166005145b1561133d576000868463ffffffff16602081106112e5576112e56121ad565b602002015190508063ffffffff168363ffffffff1614801561130d57508563ffffffff166004145b8061133557508063ffffffff168363ffffffff161415801561133557508563ffffffff166005145b9150506113ba565b8463ffffffff1660060361135a5760008260030b131590506113ba565b8463ffffffff166007036113765760008260030b1390506113ba565b8463ffffffff166001036113ba57601f601085901c16600081900361139f5760008360030b1291505b8063ffffffff166001036113b85760008360030b121591505b505b8651602088015163ffffffff16885281156113fb5760026113e08661ffff1660106111b6565b63ffffffff90811690911b820160040116602089015261140d565b60208801805160040163ffffffff1690525b5050505050505050565b600063ffffffff86161580611444575060088663ffffffff16101580156114445750600f8663ffffffff16105b1561184d578560088114611487576009811461149057600a811461149957600b81146114a257600c81146114ab57600d81146114b457600e81146114bd576114c2565b602095506114c2565b602195506114c2565b602a95506114c2565b602b95506114c2565b602495506114c2565b602595506114c2565b602695505b508463ffffffff166000036114e7575063ffffffff8216601f600688901c161b611b2c565b8463ffffffff1660020361150b575063ffffffff8216601f600688901c161c611b2c565b8463ffffffff1660030361153f57601f600688901c1661153763ffffffff8516821c60208390036111b6565b915050611b2c565b8463ffffffff1660040361155f575063ffffffff8216601f84161b611b2c565b8463ffffffff1660060361157f575063ffffffff8216601f84161c611b2c565b8463ffffffff166007036115b0576115a98463ffffffff168463ffffffff16901c856020036111b6565b9050611b2c565b8463ffffffff166008036115c5575082611b2c565b8463ffffffff166009036115da575082611b2c565b8463ffffffff16600a036115ef575082611b2c565b8463ffffffff16600b03611604575082611b2c565b8463ffffffff16600c03611619575082611b2c565b8463ffffffff16600f0361162e575082611b2c565b8463ffffffff16601003611643575082611b2c565b8463ffffffff16601103611658575082611b2c565b8463ffffffff1660120361166d575082611b2c565b8463ffffffff16601303611682575082611b2c565b8463ffffffff16601803611697575082611b2c565b8463ffffffff166019036116ac575082611b2c565b8463ffffffff16601a036116c1575082611b2c565b8463ffffffff16601b036116d6575082611b2c565b8463ffffffff166020036116ed5750828201611b2c565b8463ffffffff166021036117045750828201611b2c565b8463ffffffff1660220361171b5750818303611b2c565b8463ffffffff166023036117325750818303611b2c565b8463ffffffff166024036117495750828216611b2c565b8463ffffffff166025036117605750828217611b2c565b8463ffffffff166026036117775750828218611b2c565b8463ffffffff1660270361178f575082821719611b2c565b8463ffffffff16602a036117be578260030b8460030b126117b15760006117b4565b60015b60ff169050611b2c565b8463ffffffff16602b036117e6578263ffffffff168463ffffffff16106117b15760006117b4565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e00000000000000000000000000604482015260640161115a565b6117e6565b8563ffffffff16601c036118c6578463ffffffff166002036118725750828202611b2c565b8463ffffffff166020148061188d57508463ffffffff166021145b15611848578463ffffffff166020036118a4579219925b60005b63800000008516156115a9576401fffffffe600195861b1694016118a7565b8563ffffffff16600f036118e7575065ffffffff0000601083901b16611b2c565b8563ffffffff1660200361191b576115a98460031660080260180363ffffffff168363ffffffff16901c60ff1660086111b6565b8563ffffffff16602103611950576115a98460021660080260100363ffffffff168363ffffffff16901c61ffff1660106111b6565b8563ffffffff1660220361197e575063ffffffff60086003851602811681811b198416918316901b17611b2c565b8563ffffffff16602303611993575080611b2c565b8563ffffffff166024036119c4578360031660080260180363ffffffff168263ffffffff16901c60ff169050611b2c565b8563ffffffff166025036119f6578360021660080260100363ffffffff168263ffffffff16901c61ffff169050611b2c565b8563ffffffff16602603611a27575063ffffffff60086003851602601803811681811c198416918316901c17611b2c565b8563ffffffff16602803611a5c575060ff63ffffffff60086003861602601803811682811b9091188316918416901b17611b2c565b8563ffffffff16602903611a92575061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17611b2c565b8563ffffffff16602a03611ac0575063ffffffff60086003851602811681811c198316918416901c17611b2c565b8563ffffffff16602b03611ad5575081611b2c565b8563ffffffff16602e03611b06575063ffffffff60086003851602601803811681811b198316918416901b17611b2c565b8563ffffffff16603003611b1b575080611b2c565b8563ffffffff166038036117e65750815b9695505050505050565b60208363ffffffff1610611ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c6964207265676973746572000000000000000000000000000000000000604482015260640161115a565b63ffffffff831615801590611bb85750805b15611be75781848463ffffffff1660208110611bd657611bd66121ad565b63ffffffff90921660209290920201525b5050505060208101805163ffffffff8082169093526004019091169052565b60008463ffffffff16601003611c2157506060860151611e67565b8463ffffffff16601103611c405763ffffffff84166060880152611e67565b8463ffffffff16601203611c5957506040860151611e67565b8463ffffffff16601303611c785763ffffffff84166040880152611e67565b8463ffffffff16601803611cac5763ffffffff600385810b9085900b02602081901c821660608a0152166040880152611e67565b8463ffffffff16601903611cdd5763ffffffff84811681851602602081901c821660608a0152166040880152611e67565b8463ffffffff16601a03611da0578260030b600003611d58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f00000000000000000000604482015260640161115a565b8260030b8460030b81611d6d57611d6d612200565b0763ffffffff166060880152600383810b9085900b81611d8f57611d8f612200565b0563ffffffff166040880152611e67565b8463ffffffff16601b03611e67578263ffffffff16600003611e1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f00000000000000000000604482015260640161115a565b8263ffffffff168463ffffffff1681611e3957611e39612200565b0663ffffffff908116606089015283811690851681611e5a57611e5a612200565b0463ffffffff1660408801525b63ffffffff821615611e9d5780868363ffffffff1660208110611e8c57611e8c6121ad565b63ffffffff90921660209290920201525b50505060208401805163ffffffff808216909652600401909416909352505050565b6000611eca83611f61565b6003841615611ed857600080fd5b6020830192601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611f565760208601953582821c6001168015611f265760018114611f3b57611f4c565b60008581526020839052604090209450611f4c565b600082815260208690526040902094505b5050600101611efe565b509095945050505050565b366103808201811015611ff6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f6174610000000000000000000000000000000000000000000000000000000000606482015260840161115a565b5050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101612060612065565b905290565b6040518061040001604052806020906020820280368337509192915050565b600060208083528351808285015260005b818110156120b157858101830151858201604001528201612095565b818111156120c3576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008083601f84011261210957600080fd5b50813567ffffffffffffffff81111561212157600080fd5b6020830191508360208285010111156110d757600080fd5b60008060008060006060868803121561215157600080fd5b853567ffffffffffffffff8082111561216957600080fd5b61217589838a016120f7565b9097509550602088013591508082111561218e57600080fd5b5061219b888289016120f7565b96999598509660400135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080604083850312156121ef57600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a"; bytes internal constant anchorStateRegistryCode = hex"608060405234801561001057600080fd5b50600436106100675760003560e01c8063838c2d1e11610050578063838c2d1e146100fa578063c303f0df14610104578063f2b4e6171461011757600080fd5b806354fd4d501461006c5780637258a807146100be575b600080fd5b6100a86040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b5919061085c565b60405180910390f35b6100e56100cc36600461088b565b6001602081905260009182526040909120805491015482565b604080519283526020830191909152016100b5565b61010261015b565b005b61010261011236600461094f565b6105d4565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb1681526020016100b5565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526101f69190810190610a68565b92509250925060007f0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb73ffffffffffffffffffffffffffffffffffffffff16635f0150cb8585856040518463ffffffff1660e01b815260040161025b93929190610b39565b6040805180830381865afa158015610277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029b9190610b67565b5090508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f416e63686f72537461746552656769737472793a206661756c7420646973707560448201527f74652067616d65206e6f7420726567697374657265642077697468206661637460648201527f6f72790000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b600160008563ffffffff1663ffffffff168152602001908152602001600020600101548573ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610bc7565b11610422575050505050565b60028573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104939190610c0f565b60028111156104a4576104a4610be0565b146104b0575050505050565b60405180604001604052806105308773ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052d9190610bc7565b90565b81526020018673ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190610bc7565b905263ffffffff909416600090815260016020818152604090922086518155959091015194019390935550505050565b600054610100900460ff16158080156105f45750600054600160ff909116105b8061060e5750303b15801561060e575060005460ff166001145b61069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161037b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156106f857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60005b825181101561075e57600083828151811061071857610718610c30565b60209081029190910181015180820151905163ffffffff16600090815260018084526040909120825181559190920151910155508061075681610c5f565b9150506106fb565b5080156107c257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60005b838110156107fd5781810151838201526020016107e5565b8381111561080c576000848401525b50505050565b6000815180845261082a8160208601602086016107e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061086f6020830184610812565b9392505050565b63ffffffff8116811461088857600080fd5b50565b60006020828403121561089d57600080fd5b813561086f81610876565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156108fa576108fa6108a8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610947576109476108a8565b604052919050565b6000602080838503121561096257600080fd5b823567ffffffffffffffff8082111561097a57600080fd5b818501915085601f83011261098e57600080fd5b8135818111156109a0576109a06108a8565b6109ae848260051b01610900565b818152848101925060609182028401850191888311156109cd57600080fd5b938501935b82851015610a5c57848903818112156109eb5760008081fd5b6109f36108d7565b86356109fe81610876565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301811315610a325760008081fd5b610a3a6108d7565b888a0135815290880135898201528189015285525093840193928501926109d2565b50979650505050505050565b600080600060608486031215610a7d57600080fd5b8351610a8881610876565b60208501516040860151919450925067ffffffffffffffff80821115610aad57600080fd5b818601915086601f830112610ac157600080fd5b815181811115610ad357610ad36108a8565b610b0460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610900565b9150808252876020828501011115610b1b57600080fd5b610b2c8160208401602086016107e2565b5080925050509250925092565b63ffffffff84168152826020820152606060408201526000610b5e6060830184610812565b95945050505050565b60008060408385031215610b7a57600080fd5b825173ffffffffffffffffffffffffffffffffffffffff81168114610b9e57600080fd5b602084015190925067ffffffffffffffff81168114610bbc57600080fd5b809150509250929050565b600060208284031215610bd957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610c2157600080fd5b81516003811061086f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610cb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c634300080f000a"; bytes internal constant acc27Code = - hex"6080604052600436106102f25760003560e01c806370872aa51161018f578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b18578063fa315aa914610b3c578063fe2bbeb214610b6f57600080fd5b8063ec5e630814610a95578063eff0f59214610ac8578063f8f43ff614610af857600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a0f578063d8cc1a3c14610a42578063dabd396d14610a6257600080fd5b8063c6f0308c14610937578063cf09e0d0146109c1578063d5d44d80146109e257600080fd5b80638d450a9511610143578063bcef3b551161011d578063bcef3b55146108b7578063bd8da956146108f7578063c395e1ca1461091757600080fd5b80638d450a9514610777578063a445ece6146107aa578063bbdc02db1461087657600080fd5b80638129fc1c116101745780638129fc1c1461071a5780638980e0cc146107225780638b85902b1461073757600080fd5b806370872aa5146106f25780637b0f0adc1461070757600080fd5b80633fc8cef3116102485780635c0cba33116101fc5780636361506d116101d65780636361506d1461066c5780636b6716c0146106ac5780636f034409146106df57600080fd5b80635c0cba3314610604578063609d33341461063757806360e274641461064c57600080fd5b806354fd4d501161022d57806354fd4d501461055e57806357da950e146105b45780635a5fa2d9146105e457600080fd5b80633fc8cef314610518578063472777c61461054b57600080fd5b80632810e1d6116102aa57806337b1b2291161028457806337b1b229146104655780633a768463146104a55780633e3ac912146104d857600080fd5b80632810e1d6146103de5780632ad69aeb146103f357806330dbe5701461041357600080fd5b806319effeb4116102db57806319effeb414610339578063200d2ed21461038457806325fc2ace146103bf57600080fd5b806301935130146102f757806303c2924d14610319575b600080fd5b34801561030357600080fd5b5061031761031236600461532d565b610b9f565b005b34801561032557600080fd5b50610317610334366004615388565b610ec0565b34801561034557600080fd5b506000546103669068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561039057600080fd5b506000546103b290700100000000000000000000000000000000900460ff1681565b60405161037b91906153d9565b3480156103cb57600080fd5b506008545b60405190815260200161037b565b3480156103ea57600080fd5b506103b2611566565b3480156103ff57600080fd5b506103d061040e366004615388565b61180b565b34801561041f57600080fd5b506001546104409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161037b565b34801561047157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610440565b3480156104b157600080fd5b507f00000000000000000000000028bf1582225713139c0e898326db808b6484cfd4610440565b3480156104e457600080fd5b50600054610508907201000000000000000000000000000000000000900460ff1681565b604051901515815260200161037b565b34801561052457600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610440565b61031761055936600461541a565b611841565b34801561056a57600080fd5b506105a76040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161037b91906154b1565b3480156105c057600080fd5b506008546009546105cf919082565b6040805192835260208301919091520161037b565b3480156105f057600080fd5b506103d06105ff3660046154c4565b611853565b34801561061057600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610440565b34801561064357600080fd5b506105a761188d565b34801561065857600080fd5b50610317610667366004615502565b61189b565b34801561067857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103d0565b3480156106b857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b6103176106ed366004615534565b611a42565b3480156106fe57600080fd5b506009546103d0565b61031761071536600461541a565b6123e3565b6103176123f0565b34801561072e57600080fd5b506002546103d0565b34801561074357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103d0565b34801561078357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b3480156107b657600080fd5b506108226107c53660046154c4565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff16606082015260800161037b565b34801561088257600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161037b565b3480156108c357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103d0565b34801561090357600080fd5b506103666109123660046154c4565b612949565b34801561092357600080fd5b506103d0610932366004615573565b612b28565b34801561094357600080fd5b506109576109523660046154c4565b612d0b565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161037b565b3480156109cd57600080fd5b506000546103669067ffffffffffffffff1681565b3480156109ee57600080fd5b506103d06109fd366004615502565b60036020526000908152604090205481565b348015610a1b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103d0565b348015610a4e57600080fd5b50610317610a5d3660046155a5565b612da2565b348015610a6e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b0610366565b348015610aa157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103d0565b348015610ad457600080fd5b50610508610ae33660046154c4565b60046020526000908152604090205460ff1681565b348015610b0457600080fd5b50610317610b1336600461541a565b6133d1565b348015610b2457600080fd5b50610b2d613823565b60405161037b9392919061562f565b348015610b4857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103d0565b348015610b7b57600080fd5b50610508610b8a3660046154c4565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610bcb57610bcb6153aa565b14610c02576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c55576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610ca3610c9e36869003860186615683565b613883565b14610cda576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cef929190615710565b604051809103902014610d2e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d77610d7284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138df92505050565b61394c565b90506000610d9e82600881518110610d9157610d91615720565b6020026020010151613b02565b9050602081511115610ddc576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610e51576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610eec57610eec6153aa565b14610f23576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610f3857610f38615720565b906000526020600020906005020190506000610f5384612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015610fbc576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611005576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561102257508515155b156110bd578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110555781611071565b600186015473ffffffffffffffffffffffffffffffffffffffff165b905061107d8187613bb6565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152611160576fffffffffffffffffffffffffffffffff6040820152600181526000869003611160578195505b600086826020015163ffffffff16611178919061577e565b90506000838211611189578161118b565b835b602084015190915063ffffffff165b818110156112d75760008682815481106111b6576111b6615720565b6000918252602080832090910154808352600690915260409091205490915060ff1661120e576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061122357611223615720565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112805750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b156112c257600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b505080806112cf90615796565b91505061119a565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915584900361155b57606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561145757506000547201000000000000000000000000000000000000900460ff165b156114cc5760015473ffffffffffffffffffffffffffffffffffffffff1661147f818a613bb6565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909116178855611559565b61151373ffffffffffffffffffffffffffffffffffffffff8216156114f1578161150d565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89613bb6565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611594576115946153aa565b146115cb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661162f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008154811061165b5761165b615720565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611696576001611699565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561174a5761174a6153aa565b02179055600281111561175f5761175f6153aa565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117f057600080fd5b505af1158015611804573d6000803e3d6000fd5b5050505090565b6005602052816000526040600020818154811061182757600080fd5b90600052602060002001600091509150505481565b905090565b61184e8383836001611a42565b505050565b6000818152600760209081526040808320600590925282208054825461188490610100900463ffffffff16826157ce565b95945050505050565b606061183c60546020613cb7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812080549082905590819003611900576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a02576040519150601f19603f3d011682016040523d82523d6000602084013e611a07565b606091505b505090508061184e576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054700100000000000000000000000000000000900460ff166002811115611a6e57611a6e6153aa565b14611aa5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110611aba57611aba615720565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514611ba1576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000611c61826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611c9c5750611c997f0000000000000000000000000000000000000000000000000000000000000004600261577e565b81145b8015611ca6575084155b15611cdd576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611d03575086155b15611d3a576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115611d94576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dbf7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b8103611dd157611dd186888588613d09565b34611ddb83612b28565b14611e12576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e1d88612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603611e85576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016611ee591906157e5565b67ffffffffffffffff16611f008267ffffffffffffffff1690565b67ffffffffffffffff161115611fe2576000611f3d60017f00000000000000000000000000000000000000000000000000000000000000046157ce565b8314611f735767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611fa8565b611fa87f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261580e565b9050611fde817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff166157e5565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615612060576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b815260200190815260200160002060016002805490506122f691906157ce565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b15801561238e57600080fd5b505af11580156123a2573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b61184e8383836000611a42565b60005471010000000000000000000000000000000000900460ff1615612442576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa1580156124f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251a919061583e565b909250905081612556576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461258957639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511612623576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b1580156128f857600080fd5b505af115801561290c573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff166002811115612977576129776153aa565b146129ae576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600283815481106129c3576129c3615720565b600091825260208220600590910201805490925063ffffffff90811614612a3257815460028054909163ffffffff16908110612a0157612a01615720565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090612a6a90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b612a7e9067ffffffffffffffff16426157ce565b612a9d612a5d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16612ab1919061577e565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611612afe5780611884565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080612bc7836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115612c26576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000612c418383615891565b9050670de0b6b3a76400006000612c78827f00000000000000000000000000000000000000000000000000000000000000086158a5565b90506000612c96612c91670de0b6b3a7640000866158a5565b613eba565b90506000612ca48484614115565b90506000612cb28383614164565b90506000612cbf82614192565b90506000612cde82612cd9670de0b6b3a76400008f6158a5565b61437a565b90506000612cec8b83614164565b9050612cf8818d6158a5565b9f9e505050505050505050505050505050565b60028181548110612d1b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115612dce57612dce6153aa565b14612e05576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110612e1a57612e1a615720565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050612e797f0000000000000000000000000000000000000000000000000000000000000008600161577e565b612f15826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614612f4f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561304657612fa27f00000000000000000000000000000000000000000000000000000000000000047f00000000000000000000000000000000000000000000000000000000000000086157ce565b6001901b612fc1846fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff16612fdd91906158e2565b1561301a5761301161300260016fffffffffffffffffffffffffffffffff87166158f6565b865463ffffffff166000614453565b6003015461303c565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050613070565b6003850154915061306d6130026fffffffffffffffffffffffffffffffff8616600161591f565b90505b600882901b60088a8a604051613087929190615710565b6040518091039020901b146130c8576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006130d38c614537565b905060006130e2836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f00000000000000000000000028bf1582225713139c0e898326db808b6484cfd473ffffffffffffffffffffffffffffffffffffffff169063e14ced329061315c908f908f908f908f908a9060040161599c565b6020604051808303816000875af115801561317b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319f91906159d6565b60048501549114915060009060029061324a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132e6896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132f091906159ef565b6132fa9190615a12565b60ff16159050811515810361333b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156133fd576133fd6153aa565b14613434576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061344386614566565b935093509350935060006134598585858561496f565b905060007f00000000000000000000000028bf1582225713139c0e898326db808b6484cfd473ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ec9190615a34565b9050600189036135e45773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84613548367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de91906159d6565b5061155b565b600289036136105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489613548565b6003890361363c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487613548565b600489036137585760006136826fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614a29565b60095461368f919061577e565b61369a90600161577e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561372d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375191906159d6565b505061155b565b600589036137f1576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161359b565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061387c61188d565b9050909192565b600081600001518260200151836040015184606001516040516020016138c2949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152815160000361392e576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061395c85614ad7565b919450925090506001816001811115613977576139776153aa565b146139ae576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516139ba838561577e565b146139f1576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613a085790505093506000835b8651811015613af657600080613a7b6040518060400160405280858c60000151613a5f91906157ce565b8152602001858c60200151613a74919061577e565b9052614ad7565b509150915060405180604001604052808383613a97919061577e565b8152602001848b60200151613aac919061577e565b815250888581518110613ac157613ac1615720565b6020908102919091010152613ad760018561577e565b9350613ae3818361577e565b613aed908461577e565b92505050613a35565b50845250919392505050565b60606000806000613b1285614ad7565b919450925090506000816001811115613b2d57613b2d6153aa565b14613b64576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b6e828461577e565b855114613ba7576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188485602001518484614f75565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff90931692839290613c0590849061577e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b158015613c9a57600080fd5b505af1158015613cae573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b6000613d286fffffffffffffffffffffffffffffffff8416600161591f565b90506000613d3882866001614453565b9050600086901a8380613e245750613d7160027f00000000000000000000000000000000000000000000000000000000000000046158e2565b6004830154600290613e15906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613e1f9190615a12565b60ff16145b15613e7c5760ff811660011480613e3e575060ff81166002145b613e77576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b613cae565b60ff811615613cae576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613f1957631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261415257637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156141825763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d782136141c057919050565b680755bf798b4a1bf1e582126141de5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006143ab670de0b6b3a76400008361439286613eba565b61439c9190615a51565b6143a69190615b0d565b614192565b90505b92915050565b600080614441837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b6000808261449c576144976fffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000461500a565b6144b7565b6144b7856fffffffffffffffffffffffffffffffff16615196565b9050600284815481106144cc576144cc615720565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461452f57815460028054909163ffffffff1690811061451a5761451a615720565b906000526020600020906005020191506144dd565b509392505050565b600080600080600061454886614566565b935093509350935061455c8484848461496f565b9695505050505050565b600080600080600085905060006002828154811061458657614586615720565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000049061465d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614697576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f00000000000000000000000000000000000000000000000000000000000000049061475e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156147d357825463ffffffff1661479d7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b83036147a7578391505b600281815481106147ba576147ba615720565b906000526020600020906005020193508094505061469b565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661483c614827856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561490b576000614874836fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff1611156148df5760006148b66148ae60016fffffffffffffffffffffffffffffffff86166158f6565b896001614453565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506148e59050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614961565b600061492d6148ae6fffffffffffffffffffffffffffffffff8516600161591f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156149dc5760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611884565b8282604051602001614a0a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614ab6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614b1a576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614b3f576000600160009450945094505050614f6e565b60b78111614c55576000614b546080836157ce565b905080876000015111614b93576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614c0b57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614c42576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614f6e915050565b60bf8111614db3576000614c6a60b7836157ce565b905080876000015111614ca9576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614d0b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614d53576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d5d818461577e565b895111614d96576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614da183600161577e565b9750955060009450614f6e9350505050565b60f78111614e18576000614dc860c0836157ce565b905080876000015111614e07576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614f6e915050565b6000614e2560f7836157ce565b905080876000015111614e64576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614ec6576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614f0e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f18818461577e565b895111614f51576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f5c83600161577e565b9750955060019450614f6e9350505050565b9193909250565b60608167ffffffffffffffff811115614f9057614f90615654565b6040519080825280601f01601f191660200182016040528015614fba576020820181803683370190505b5090508115615003576000614fcf848661577e565b90506020820160005b84811015614ff0578281015182820152602001614fd8565b84811115614fff576000858301525b5050505b9392505050565b6000816150a9846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150bf5763b34b5c226000526004601cfd5b6150c883615196565b905081615167826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116143ae576143ab61517d83600161577e565b6fffffffffffffffffffffffffffffffff83169061523b565b6000811960018301168161522a827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806152c8847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126152f657600080fd5b50813567ffffffffffffffff81111561530e57600080fd5b60208301915083602082850101111561532657600080fd5b9250929050565b600080600083850360a081121561534357600080fd5b608081121561535157600080fd5b50839250608084013567ffffffffffffffff81111561536f57600080fd5b61537b868287016152e4565b9497909650939450505050565b6000806040838503121561539b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310615414577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561542f57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561546c57602081850181015186830182015201615450565b8181111561547e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006143ab6020830184615446565b6000602082840312156154d657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146154ff57600080fd5b50565b60006020828403121561551457600080fd5b8135615003816154dd565b8035801515811461552f57600080fd5b919050565b6000806000806080858703121561554a57600080fd5b8435935060208501359250604085013591506155686060860161551f565b905092959194509250565b60006020828403121561558557600080fd5b81356fffffffffffffffffffffffffffffffff8116811461500357600080fd5b600080600080600080608087890312156155be57600080fd5b863595506155ce6020880161551f565b9450604087013567ffffffffffffffff808211156155eb57600080fd5b6155f78a838b016152e4565b9096509450606089013591508082111561561057600080fd5b5061561d89828a016152e4565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006118846060830184615446565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561569557600080fd5b6040516080810181811067ffffffffffffffff821117156156df577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157915761579161574f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157c7576157c761574f565b5060010190565b6000828210156157e0576157e061574f565b500390565b600067ffffffffffffffff838116908316818110156158065761580661574f565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156158355761583561574f565b02949350505050565b6000806040838503121561585157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158a0576158a0615862565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158dd576158dd61574f565b500290565b6000826158f1576158f1615862565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156158065761580661574f565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561594a5761594a61574f565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006159b0606083018789615953565b82810360208401526159c3818688615953565b9150508260408301529695505050505050565b6000602082840312156159e857600080fd5b5051919050565b600060ff821660ff841680821015615a0957615a0961574f565b90039392505050565b600060ff831680615a2557615a25615862565b8060ff84160691505092915050565b600060208284031215615a4657600080fd5b8151615003816154dd565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a9257615a9261574f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615acd57615acd61574f565b60008712925087820587128484161615615ae957615ae961574f565b87850587128184161615615aff57615aff61574f565b505050929093029392505050565b600082615b1c57615b1c615862565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b7057615b7061574f565b50059056fea164736f6c634300080f000a"; + hex"6080604052600436106102f25760003560e01c806370872aa51161018f578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b18578063fa315aa914610b3c578063fe2bbeb214610b6f57600080fd5b8063ec5e630814610a95578063eff0f59214610ac8578063f8f43ff614610af857600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a0f578063d8cc1a3c14610a42578063dabd396d14610a6257600080fd5b8063c6f0308c14610937578063cf09e0d0146109c1578063d5d44d80146109e257600080fd5b80638d450a9511610143578063bcef3b551161011d578063bcef3b55146108b7578063bd8da956146108f7578063c395e1ca1461091757600080fd5b80638d450a9514610777578063a445ece6146107aa578063bbdc02db1461087657600080fd5b80638129fc1c116101745780638129fc1c1461071a5780638980e0cc146107225780638b85902b1461073757600080fd5b806370872aa5146106f25780637b0f0adc1461070757600080fd5b80633fc8cef3116102485780635c0cba33116101fc5780636361506d116101d65780636361506d1461066c5780636b6716c0146106ac5780636f034409146106df57600080fd5b80635c0cba3314610604578063609d33341461063757806360e274641461064c57600080fd5b806354fd4d501161022d57806354fd4d501461055e57806357da950e146105b45780635a5fa2d9146105e457600080fd5b80633fc8cef314610518578063472777c61461054b57600080fd5b80632810e1d6116102aa57806337b1b2291161028457806337b1b229146104655780633a768463146104a55780633e3ac912146104d857600080fd5b80632810e1d6146103de5780632ad69aeb146103f357806330dbe5701461041357600080fd5b806319effeb4116102db57806319effeb414610339578063200d2ed21461038457806325fc2ace146103bf57600080fd5b806301935130146102f757806303c2924d14610319575b600080fd5b34801561030357600080fd5b5061031761031236600461532d565b610b9f565b005b34801561032557600080fd5b50610317610334366004615388565b610ec0565b34801561034557600080fd5b506000546103669068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561039057600080fd5b506000546103b290700100000000000000000000000000000000900460ff1681565b60405161037b91906153d9565b3480156103cb57600080fd5b506008545b60405190815260200161037b565b3480156103ea57600080fd5b506103b2611566565b3480156103ff57600080fd5b506103d061040e366004615388565b61180b565b34801561041f57600080fd5b506001546104409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161037b565b34801561047157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610440565b3480156104b157600080fd5b507f000000000000000000000000cdadd729ca2319e8955240bdb61a6a6a956a7664610440565b3480156104e457600080fd5b50600054610508907201000000000000000000000000000000000000900460ff1681565b604051901515815260200161037b565b34801561052457600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610440565b61031761055936600461541a565b611841565b34801561056a57600080fd5b506105a76040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161037b91906154b1565b3480156105c057600080fd5b506008546009546105cf919082565b6040805192835260208301919091520161037b565b3480156105f057600080fd5b506103d06105ff3660046154c4565b611853565b34801561061057600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610440565b34801561064357600080fd5b506105a761188d565b34801561065857600080fd5b50610317610667366004615502565b61189b565b34801561067857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103d0565b3480156106b857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b6103176106ed366004615534565b611a42565b3480156106fe57600080fd5b506009546103d0565b61031761071536600461541a565b6123e3565b6103176123f0565b34801561072e57600080fd5b506002546103d0565b34801561074357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103d0565b34801561078357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b3480156107b657600080fd5b506108226107c53660046154c4565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff16606082015260800161037b565b34801561088257600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161037b565b3480156108c357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103d0565b34801561090357600080fd5b506103666109123660046154c4565b612949565b34801561092357600080fd5b506103d0610932366004615573565b612b28565b34801561094357600080fd5b506109576109523660046154c4565b612d0b565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161037b565b3480156109cd57600080fd5b506000546103669067ffffffffffffffff1681565b3480156109ee57600080fd5b506103d06109fd366004615502565b60036020526000908152604090205481565b348015610a1b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103d0565b348015610a4e57600080fd5b50610317610a5d3660046155a5565b612da2565b348015610a6e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b0610366565b348015610aa157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103d0565b348015610ad457600080fd5b50610508610ae33660046154c4565b60046020526000908152604090205460ff1681565b348015610b0457600080fd5b50610317610b1336600461541a565b6133d1565b348015610b2457600080fd5b50610b2d613823565b60405161037b9392919061562f565b348015610b4857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103d0565b348015610b7b57600080fd5b50610508610b8a3660046154c4565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610bcb57610bcb6153aa565b14610c02576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c55576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610ca3610c9e36869003860186615683565b613883565b14610cda576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cef929190615710565b604051809103902014610d2e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d77610d7284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138df92505050565b61394c565b90506000610d9e82600881518110610d9157610d91615720565b6020026020010151613b02565b9050602081511115610ddc576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610e51576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610eec57610eec6153aa565b14610f23576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610f3857610f38615720565b906000526020600020906005020190506000610f5384612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015610fbc576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611005576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561102257508515155b156110bd578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110555781611071565b600186015473ffffffffffffffffffffffffffffffffffffffff165b905061107d8187613bb6565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152611160576fffffffffffffffffffffffffffffffff6040820152600181526000869003611160578195505b600086826020015163ffffffff16611178919061577e565b90506000838211611189578161118b565b835b602084015190915063ffffffff165b818110156112d75760008682815481106111b6576111b6615720565b6000918252602080832090910154808352600690915260409091205490915060ff1661120e576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061122357611223615720565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112805750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b156112c257600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b505080806112cf90615796565b91505061119a565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915584900361155b57606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561145757506000547201000000000000000000000000000000000000900460ff165b156114cc5760015473ffffffffffffffffffffffffffffffffffffffff1661147f818a613bb6565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909116178855611559565b61151373ffffffffffffffffffffffffffffffffffffffff8216156114f1578161150d565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89613bb6565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611594576115946153aa565b146115cb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661162f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008154811061165b5761165b615720565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611696576001611699565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561174a5761174a6153aa565b02179055600281111561175f5761175f6153aa565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117f057600080fd5b505af1158015611804573d6000803e3d6000fd5b5050505090565b6005602052816000526040600020818154811061182757600080fd5b90600052602060002001600091509150505481565b905090565b61184e8383836001611a42565b505050565b6000818152600760209081526040808320600590925282208054825461188490610100900463ffffffff16826157ce565b95945050505050565b606061183c60546020613cb7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812080549082905590819003611900576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a02576040519150601f19603f3d011682016040523d82523d6000602084013e611a07565b606091505b505090508061184e576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054700100000000000000000000000000000000900460ff166002811115611a6e57611a6e6153aa565b14611aa5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110611aba57611aba615720565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514611ba1576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000611c61826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611c9c5750611c997f0000000000000000000000000000000000000000000000000000000000000004600261577e565b81145b8015611ca6575084155b15611cdd576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611d03575086155b15611d3a576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115611d94576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dbf7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b8103611dd157611dd186888588613d09565b34611ddb83612b28565b14611e12576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e1d88612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603611e85576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016611ee591906157e5565b67ffffffffffffffff16611f008267ffffffffffffffff1690565b67ffffffffffffffff161115611fe2576000611f3d60017f00000000000000000000000000000000000000000000000000000000000000046157ce565b8314611f735767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611fa8565b611fa87f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261580e565b9050611fde817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff166157e5565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615612060576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b815260200190815260200160002060016002805490506122f691906157ce565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b15801561238e57600080fd5b505af11580156123a2573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b61184e8383836000611a42565b60005471010000000000000000000000000000000000900460ff1615612442576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa1580156124f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251a919061583e565b909250905081612556576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461258957639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511612623576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b1580156128f857600080fd5b505af115801561290c573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff166002811115612977576129776153aa565b146129ae576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600283815481106129c3576129c3615720565b600091825260208220600590910201805490925063ffffffff90811614612a3257815460028054909163ffffffff16908110612a0157612a01615720565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090612a6a90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b612a7e9067ffffffffffffffff16426157ce565b612a9d612a5d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16612ab1919061577e565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611612afe5780611884565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080612bc7836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115612c26576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000612c418383615891565b9050670de0b6b3a76400006000612c78827f00000000000000000000000000000000000000000000000000000000000000086158a5565b90506000612c96612c91670de0b6b3a7640000866158a5565b613eba565b90506000612ca48484614115565b90506000612cb28383614164565b90506000612cbf82614192565b90506000612cde82612cd9670de0b6b3a76400008f6158a5565b61437a565b90506000612cec8b83614164565b9050612cf8818d6158a5565b9f9e505050505050505050505050505050565b60028181548110612d1b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115612dce57612dce6153aa565b14612e05576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110612e1a57612e1a615720565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050612e797f0000000000000000000000000000000000000000000000000000000000000008600161577e565b612f15826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614612f4f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561304657612fa27f00000000000000000000000000000000000000000000000000000000000000047f00000000000000000000000000000000000000000000000000000000000000086157ce565b6001901b612fc1846fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff16612fdd91906158e2565b1561301a5761301161300260016fffffffffffffffffffffffffffffffff87166158f6565b865463ffffffff166000614453565b6003015461303c565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050613070565b6003850154915061306d6130026fffffffffffffffffffffffffffffffff8616600161591f565b90505b600882901b60088a8a604051613087929190615710565b6040518091039020901b146130c8576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006130d38c614537565b905060006130e2836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000cdadd729ca2319e8955240bdb61a6a6a956a766473ffffffffffffffffffffffffffffffffffffffff169063e14ced329061315c908f908f908f908f908a9060040161599c565b6020604051808303816000875af115801561317b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319f91906159d6565b60048501549114915060009060029061324a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132e6896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132f091906159ef565b6132fa9190615a12565b60ff16159050811515810361333b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156133fd576133fd6153aa565b14613434576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061344386614566565b935093509350935060006134598585858561496f565b905060007f000000000000000000000000cdadd729ca2319e8955240bdb61a6a6a956a766473ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ec9190615a34565b9050600189036135e45773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84613548367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de91906159d6565b5061155b565b600289036136105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489613548565b6003890361363c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487613548565b600489036137585760006136826fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614a29565b60095461368f919061577e565b61369a90600161577e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561372d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375191906159d6565b505061155b565b600589036137f1576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161359b565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061387c61188d565b9050909192565b600081600001518260200151836040015184606001516040516020016138c2949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152815160000361392e576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061395c85614ad7565b919450925090506001816001811115613977576139776153aa565b146139ae576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516139ba838561577e565b146139f1576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613a085790505093506000835b8651811015613af657600080613a7b6040518060400160405280858c60000151613a5f91906157ce565b8152602001858c60200151613a74919061577e565b9052614ad7565b509150915060405180604001604052808383613a97919061577e565b8152602001848b60200151613aac919061577e565b815250888581518110613ac157613ac1615720565b6020908102919091010152613ad760018561577e565b9350613ae3818361577e565b613aed908461577e565b92505050613a35565b50845250919392505050565b60606000806000613b1285614ad7565b919450925090506000816001811115613b2d57613b2d6153aa565b14613b64576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b6e828461577e565b855114613ba7576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188485602001518484614f75565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff90931692839290613c0590849061577e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b158015613c9a57600080fd5b505af1158015613cae573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b6000613d286fffffffffffffffffffffffffffffffff8416600161591f565b90506000613d3882866001614453565b9050600086901a8380613e245750613d7160027f00000000000000000000000000000000000000000000000000000000000000046158e2565b6004830154600290613e15906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613e1f9190615a12565b60ff16145b15613e7c5760ff811660011480613e3e575060ff81166002145b613e77576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b613cae565b60ff811615613cae576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613f1957631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261415257637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156141825763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d782136141c057919050565b680755bf798b4a1bf1e582126141de5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006143ab670de0b6b3a76400008361439286613eba565b61439c9190615a51565b6143a69190615b0d565b614192565b90505b92915050565b600080614441837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b6000808261449c576144976fffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000461500a565b6144b7565b6144b7856fffffffffffffffffffffffffffffffff16615196565b9050600284815481106144cc576144cc615720565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461452f57815460028054909163ffffffff1690811061451a5761451a615720565b906000526020600020906005020191506144dd565b509392505050565b600080600080600061454886614566565b935093509350935061455c8484848461496f565b9695505050505050565b600080600080600085905060006002828154811061458657614586615720565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000049061465d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614697576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f00000000000000000000000000000000000000000000000000000000000000049061475e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156147d357825463ffffffff1661479d7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b83036147a7578391505b600281815481106147ba576147ba615720565b906000526020600020906005020193508094505061469b565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661483c614827856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561490b576000614874836fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff1611156148df5760006148b66148ae60016fffffffffffffffffffffffffffffffff86166158f6565b896001614453565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506148e59050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614961565b600061492d6148ae6fffffffffffffffffffffffffffffffff8516600161591f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156149dc5760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611884565b8282604051602001614a0a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614ab6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614b1a576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614b3f576000600160009450945094505050614f6e565b60b78111614c55576000614b546080836157ce565b905080876000015111614b93576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614c0b57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614c42576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614f6e915050565b60bf8111614db3576000614c6a60b7836157ce565b905080876000015111614ca9576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614d0b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614d53576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d5d818461577e565b895111614d96576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614da183600161577e565b9750955060009450614f6e9350505050565b60f78111614e18576000614dc860c0836157ce565b905080876000015111614e07576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614f6e915050565b6000614e2560f7836157ce565b905080876000015111614e64576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614ec6576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614f0e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f18818461577e565b895111614f51576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f5c83600161577e565b9750955060019450614f6e9350505050565b9193909250565b60608167ffffffffffffffff811115614f9057614f90615654565b6040519080825280601f01601f191660200182016040528015614fba576020820181803683370190505b5090508115615003576000614fcf848661577e565b90506020820160005b84811015614ff0578281015182820152602001614fd8565b84811115614fff576000858301525b5050505b9392505050565b6000816150a9846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150bf5763b34b5c226000526004601cfd5b6150c883615196565b905081615167826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116143ae576143ab61517d83600161577e565b6fffffffffffffffffffffffffffffffff83169061523b565b6000811960018301168161522a827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806152c8847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126152f657600080fd5b50813567ffffffffffffffff81111561530e57600080fd5b60208301915083602082850101111561532657600080fd5b9250929050565b600080600083850360a081121561534357600080fd5b608081121561535157600080fd5b50839250608084013567ffffffffffffffff81111561536f57600080fd5b61537b868287016152e4565b9497909650939450505050565b6000806040838503121561539b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310615414577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561542f57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561546c57602081850181015186830182015201615450565b8181111561547e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006143ab6020830184615446565b6000602082840312156154d657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146154ff57600080fd5b50565b60006020828403121561551457600080fd5b8135615003816154dd565b8035801515811461552f57600080fd5b919050565b6000806000806080858703121561554a57600080fd5b8435935060208501359250604085013591506155686060860161551f565b905092959194509250565b60006020828403121561558557600080fd5b81356fffffffffffffffffffffffffffffffff8116811461500357600080fd5b600080600080600080608087890312156155be57600080fd5b863595506155ce6020880161551f565b9450604087013567ffffffffffffffff808211156155eb57600080fd5b6155f78a838b016152e4565b9096509450606089013591508082111561561057600080fd5b5061561d89828a016152e4565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006118846060830184615446565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561569557600080fd5b6040516080810181811067ffffffffffffffff821117156156df577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157915761579161574f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157c7576157c761574f565b5060010190565b6000828210156157e0576157e061574f565b500390565b600067ffffffffffffffff838116908316818110156158065761580661574f565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156158355761583561574f565b02949350505050565b6000806040838503121561585157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158a0576158a0615862565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158dd576158dd61574f565b500290565b6000826158f1576158f1615862565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156158065761580661574f565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561594a5761594a61574f565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006159b0606083018789615953565b82810360208401526159c3818688615953565b9150508260408301529695505050505050565b6000602082840312156159e857600080fd5b5051919050565b600060ff821660ff841680821015615a0957615a0961574f565b90039392505050565b600060ff831680615a2557615a25615862565b8060ff84160691505092915050565b600060208284031215615a4657600080fd5b8151615003816154dd565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a9257615a9261574f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615acd57615acd61574f565b60008712925087820587128484161615615ae957615ae961574f565b87850587128184161615615aff57615aff61574f565b505050929093029392505050565b600082615b1c57615b1c615862565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b7057615b7061574f565b50059056fea164736f6c634300080f000a"; bytes internal constant acc28Code = - hex"6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b94578063fa315aa914610bb8578063fe2bbeb214610beb57600080fd5b8063ec5e630814610b11578063eff0f59214610b44578063f8f43ff614610b7457600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a8b578063d8cc1a3c14610abe578063dabd396d14610ade57600080fd5b8063c6f0308c146109b3578063cf09e0d014610a3d578063d5d44d8014610a5e57600080fd5b8063a445ece611610143578063bcef3b551161011d578063bcef3b5514610933578063bd8da95614610973578063c395e1ca1461099357600080fd5b8063a445ece6146107f3578063a8e4fb90146108bf578063bbdc02db146108f257600080fd5b80638980e0cc116101745780638980e0cc1461076b5780638b85902b146107805780638d450a95146107c057600080fd5b806370872aa51461073b5780637b0f0adc146107505780638129fc1c1461076357600080fd5b80633fc8cef31161025e5780635c0cba33116102075780636361506d116101e15780636361506d146106b55780636b6716c0146106f55780636f0344091461072857600080fd5b80635c0cba331461064d578063609d33341461068057806360e274641461069557600080fd5b806354fd4d501161023857806354fd4d50146105a757806357da950e146105fd5780635a5fa2d91461062d57600080fd5b80633fc8cef31461052e578063472777c614610561578063534db0e21461057457600080fd5b80632810e1d6116102c057806337b1b2291161029a57806337b1b2291461047b5780633a768463146104bb5780633e3ac912146104ee57600080fd5b80632810e1d6146103f45780632ad69aeb1461040957806330dbe5701461042957600080fd5b806319effeb4116102f157806319effeb41461034f578063200d2ed21461039a57806325fc2ace146103d557600080fd5b8063019351301461030d57806303c2924d1461032f575b600080fd5b34801561031957600080fd5b5061032d6103283660046155a8565b610c1b565b005b34801561033b57600080fd5b5061032d61034a366004615603565b610f3c565b34801561035b57600080fd5b5060005461037c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103a657600080fd5b506000546103c890700100000000000000000000000000000000900460ff1681565b6040516103919190615654565b3480156103e157600080fd5b506008545b604051908152602001610391565b34801561040057600080fd5b506103c86115e2565b34801561041557600080fd5b506103e6610424366004615603565b611887565b34801561043557600080fd5b506001546104569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610391565b34801561048757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610456565b3480156104c757600080fd5b507f00000000000000000000000028bf1582225713139c0e898326db808b6484cfd4610456565b3480156104fa57600080fd5b5060005461051e907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610391565b34801561053a57600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610456565b61032d61056f366004615695565b6118bd565b34801561058057600080fd5b507f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63610456565b3480156105b357600080fd5b506105f06040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b604051610391919061572c565b34801561060957600080fd5b50600854600954610618919082565b60408051928352602083019190915201610391565b34801561063957600080fd5b506103e661064836600461573f565b6118cf565b34801561065957600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610456565b34801561068c57600080fd5b506105f0611909565b3480156106a157600080fd5b5061032d6106b036600461577d565b611917565b3480156106c157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103e6565b34801561070157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b61032d6107363660046157af565b611abe565b34801561074757600080fd5b506009546103e6565b61032d61075e366004615695565b611b7f565b61032d611b8c565b34801561077757600080fd5b506002546103e6565b34801561078c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103e6565b3480156107cc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b3480156107ff57600080fd5b5061086b61080e36600461573f565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff166060820152608001610391565b3480156108cb57600080fd5b507f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8610456565b3480156108fe57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000001168152602001610391565b34801561093f57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103e6565b34801561097f57600080fd5b5061037c61098e36600461573f565b611c05565b34801561099f57600080fd5b506103e66109ae3660046157ee565b611de4565b3480156109bf57600080fd5b506109d36109ce36600461573f565b611fc7565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610391565b348015610a4957600080fd5b5060005461037c9067ffffffffffffffff1681565b348015610a6a57600080fd5b506103e6610a7936600461577d565b60036020526000908152604090205481565b348015610a9757600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103e6565b348015610aca57600080fd5b5061032d610ad9366004615820565b61205e565b348015610aea57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b061037c565b348015610b1d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103e6565b348015610b5057600080fd5b5061051e610b5f36600461573f565b60046020526000908152604090205460ff1681565b348015610b8057600080fd5b5061032d610b8f366004615695565b612123565b348015610ba057600080fd5b50610ba9612575565b604051610391939291906158aa565b348015610bc457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103e6565b348015610bf757600080fd5b5061051e610c0636600461573f565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610c4757610c47615625565b14610c7e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610cd1576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d08367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610d1f610d1a368690038601866158fe565b6125d5565b14610d56576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610d6b92919061598b565b604051809103902014610daa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610df3610dee84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263192505050565b61269e565b90506000610e1a82600881518110610e0d57610e0d61599b565b6020026020010151612854565b9050602081511115610e58576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610ecd576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610f6857610f68615625565b14610f9f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610fb457610fb461599b565b906000526020600020906005020190506000610fcf84611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015611038576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611081576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561109e57508515155b15611139578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110d157816110ed565b600186015473ffffffffffffffffffffffffffffffffffffffff165b90506110f98187612908565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff1660608301526111dc576fffffffffffffffffffffffffffffffff60408201526001815260008690036111dc578195505b600086826020015163ffffffff166111f491906159f9565b905060008382116112055781611207565b835b602084015190915063ffffffff165b818110156113535760008682815481106112325761123261599b565b6000918252602080832090910154808352600690915260409091205490915060ff1661128a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061129f5761129f61599b565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112fc5750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b1561133e57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b5050808061134b90615a11565b915050611216565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092179091558490036115d757606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055891580156114d357506000547201000000000000000000000000000000000000900460ff165b156115485760015473ffffffffffffffffffffffffffffffffffffffff166114fb818a612908565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556115d5565b61158f73ffffffffffffffffffffffffffffffffffffffff82161561156d5781611589565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89612908565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561161057611610615625565b14611647576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166116ab576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106116d7576116d761599b565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611712576001611715565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156117c6576117c6615625565b0217905560028111156117db576117db615625565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505090565b600560205281600052604060002081815481106118a357600080fd5b90600052602060002001600091509150505481565b905090565b6118ca8383836001611abe565b505050565b6000818152600760209081526040808320600590925282208054825461190090610100900463ffffffff1682615a49565b95945050505050565b60606118b860546020612a09565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054908290559081900361197c576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a7e576040519150601f19603f3d011682016040523d82523d6000602084013e611a83565b606091505b50509050806118ca576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8161480611b3757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b611b6d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7984848484612a5b565b50505050565b6118ca8383836000611abe565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614611bfb576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c036133fc565b565b600080600054700100000000000000000000000000000000900460ff166002811115611c3357611c33615625565b14611c6a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110611c7f57611c7f61599b565b600091825260208220600590910201805490925063ffffffff90811614611cee57815460028054909163ffffffff16908110611cbd57611cbd61599b565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611d2690700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611d3a9067ffffffffffffffff1642615a49565b611d59611d19846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611d6d91906159f9565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611611dba5780611900565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080611e83836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115611ee2576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000611efd8383615a8f565b9050670de0b6b3a76400006000611f34827f0000000000000000000000000000000000000000000000000000000000000008615aa3565b90506000611f52611f4d670de0b6b3a764000086615aa3565b613955565b90506000611f608484613bb0565b90506000611f6e8383613bff565b90506000611f7b82613c2d565b90506000611f9a82611f95670de0b6b3a76400008f615aa3565b613e15565b90506000611fa88b83613bff565b9050611fb4818d615aa3565b9f9e505050505050505050505050505050565b60028181548110611fd757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614806120d757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b61210d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211b868686868686613e4f565b505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214f5761214f615625565b14612186576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806121958661447e565b935093509350935060006121ab85858585614887565b905060007f00000000000000000000000028bf1582225713139c0e898326db808b6484cfd473ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190615ae0565b9050600189036123365773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8461229a367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615afd565b506115d7565b600289036123625773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848961229a565b6003890361238e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848761229a565b600489036124aa5760006123d46fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614941565b6009546123e191906159f9565b6123ec9060016159f9565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561247f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a39190615afd565b50506115d7565b60058903612543576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122ed565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606125ce611909565b9050909192565b60008160000151826020015183604001518460600151604051602001612614949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612680576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006126ae856149ef565b9194509250905060018160018111156126c9576126c9615625565b14612700576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845161270c83856159f9565b14612743576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161275a5790505093506000835b8651811015612848576000806127cd6040518060400160405280858c600001516127b19190615a49565b8152602001858c602001516127c691906159f9565b90526149ef565b5091509150604051806040016040528083836127e991906159f9565b8152602001848b602001516127fe91906159f9565b8152508885815181106128135761281361599b565b60209081029190910101526128296001856159f9565b935061283581836159f9565b61283f90846159f9565b92505050612787565b50845250919392505050565b60606000806000612864856149ef565b91945092509050600081600181111561287f5761287f615625565b146128b6576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082846159f9565b8551146128f9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190085602001518484614e8d565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff909316928392906129579084906159f9565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b1580156129ec57600080fd5b505af1158015612a00573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054700100000000000000000000000000000000900460ff166002811115612a8757612a87615625565b14612abe576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110612ad357612ad361599b565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514612bba576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000612c7a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612cb55750612cb27f000000000000000000000000000000000000000000000000000000000000000460026159f9565b81145b8015612cbf575084155b15612cf6576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d1c575086155b15612d53576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115612dad576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd87f000000000000000000000000000000000000000000000000000000000000000460016159f9565b8103612dea57612dea86888588614f22565b34612df483611de4565b14612e2b576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e3688611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603612e9e576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016612efe9190615b16565b67ffffffffffffffff16612f198267ffffffffffffffff1690565b67ffffffffffffffff161115612ffb576000612f5660017f0000000000000000000000000000000000000000000000000000000000000004615a49565b8314612f8c5767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612fc1565b612fc17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615b3f565b9050612ff7817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff16615b16565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615613079576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b8152602001908152602001600020600160028054905061330f9190615a49565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b1580156133a757600080fd5b505af11580156133bb573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b60005471010000000000000000000000000000000000900460ff161561344e576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000001166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa158015613502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135269190615b6f565b909250905081613562576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461359557639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401351161362f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b15801561390457600080fd5b505af1158015613918573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136139b457631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613bed57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613c1d5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613c5b57919050565b680755bf798b4a1bf1e58212613c795763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613e46670de0b6b3a764000083613e2d86613955565b613e379190615b93565b613e419190615c4f565b613c2d565b90505b92915050565b60008054700100000000000000000000000000000000900460ff166002811115613e7b57613e7b615625565b14613eb2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110613ec757613ec761599b565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050613f267f000000000000000000000000000000000000000000000000000000000000000860016159f9565b613fc2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614613ffc576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156140f35761404f7f00000000000000000000000000000000000000000000000000000000000000047f0000000000000000000000000000000000000000000000000000000000000008615a49565b6001901b61406e846fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1661408a9190615cb7565b156140c7576140be6140af60016fffffffffffffffffffffffffffffffff8716615ccb565b865463ffffffff166000615172565b600301546140e9565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061411d565b6003850154915061411a6140af6fffffffffffffffffffffffffffffffff86166001615cf4565b90505b600882901b60088a8a60405161413492919061598b565b6040518091039020901b14614175576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141808c615256565b9050600061418f836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f00000000000000000000000028bf1582225713139c0e898326db808b6484cfd473ffffffffffffffffffffffffffffffffffffffff169063e14ced3290614209908f908f908f908f908a90600401615d71565b6020604051808303816000875af1158015614228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424c9190615afd565b6004850154911491506000906002906142f7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614393896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61439d9190615dab565b6143a79190615dce565b60ff1615905081151581036143e8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff161561443f576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061449e5761449e61599b565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000490614575906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145af576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000490614676906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146eb57825463ffffffff166146b57f000000000000000000000000000000000000000000000000000000000000000460016159f9565b83036146bf578391505b600281815481106146d2576146d261599b565b90600052602060002090600502019350809450506145b3565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661475461473f856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561482357600061478c836fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1611156147f75760006147ce6147c660016fffffffffffffffffffffffffffffffff8616615ccb565b896001615172565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506147fd9050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614879565b60006148456147c66fffffffffffffffffffffffffffffffff85166001615cf4565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156148f45760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611900565b82826040516020016149229291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b6000806149ce847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614a32576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614a57576000600160009450945094505050614e86565b60b78111614b6d576000614a6c608083615a49565b905080876000015111614aab576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614b2357507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614b5a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614e86915050565b60bf8111614ccb576000614b8260b783615a49565b905080876000015111614bc1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614c23576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614c6b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614c7581846159f9565b895111614cae576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614cb98360016159f9565b9750955060009450614e869350505050565b60f78111614d30576000614ce060c083615a49565b905080876000015111614d1f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614e86915050565b6000614d3d60f783615a49565b905080876000015111614d7c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614dde576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614e26576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e3081846159f9565b895111614e69576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e748360016159f9565b9750955060019450614e869350505050565b9193909250565b60608167ffffffffffffffff811115614ea857614ea86158cf565b6040519080825280601f01601f191660200182016040528015614ed2576020820181803683370190505b5090508115614f1b576000614ee784866159f9565b90506020820160005b84811015614f08578281015182820152602001614ef0565b84811115614f17576000858301525b5050505b9392505050565b6000614f416fffffffffffffffffffffffffffffffff84166001615cf4565b90506000614f5182866001615172565b9050600086901a838061503d5750614f8a60027f0000000000000000000000000000000000000000000000000000000000000004615cb7565b600483015460029061502e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6150389190615dce565b60ff16145b156150955760ff811660011480615057575060ff81166002145b615090576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b612a00565b60ff811615612a00576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b600080615160837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826151bb576151b66fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000004615285565b6151d6565b6151d6856fffffffffffffffffffffffffffffffff16615411565b9050600284815481106151eb576151eb61599b565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461524e57815460028054909163ffffffff169081106152395761523961599b565b906000526020600020906005020191506151fc565b509392505050565b60008060008060006152678661447e565b935093509350935061527b84848484614887565b9695505050505050565b600081615324846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161533a5763b34b5c226000526004601cfd5b61534383615411565b9050816153e2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613e4957613e466153f88360016159f9565b6fffffffffffffffffffffffffffffffff8316906154b6565b600081196001830116816154a5827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615543847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261557157600080fd5b50813567ffffffffffffffff81111561558957600080fd5b6020830191508360208285010111156155a157600080fd5b9250929050565b600080600083850360a08112156155be57600080fd5b60808112156155cc57600080fd5b50839250608084013567ffffffffffffffff8111156155ea57600080fd5b6155f68682870161555f565b9497909650939450505050565b6000806040838503121561561657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061568f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806000606084860312156156aa57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b818110156156e7576020818501810151868301820152016156cb565b818111156156f9576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613e4660208301846156c1565b60006020828403121561575157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461577a57600080fd5b50565b60006020828403121561578f57600080fd5b8135614f1b81615758565b803580151581146157aa57600080fd5b919050565b600080600080608085870312156157c557600080fd5b8435935060208501359250604085013591506157e36060860161579a565b905092959194509250565b60006020828403121561580057600080fd5b81356fffffffffffffffffffffffffffffffff81168114614f1b57600080fd5b6000806000806000806080878903121561583957600080fd5b863595506158496020880161579a565b9450604087013567ffffffffffffffff8082111561586657600080fd5b6158728a838b0161555f565b9096509450606089013591508082111561588b57600080fd5b5061589889828a0161555f565b979a9699509497509295939492505050565b63ffffffff8416815282602082015260606040820152600061190060608301846156c1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561591057600080fd5b6040516080810181811067ffffffffffffffff8211171561595a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615a0c57615a0c6159ca565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a4257615a426159ca565b5060010190565b600082821015615a5b57615a5b6159ca565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a9e57615a9e615a60565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615adb57615adb6159ca565b500290565b600060208284031215615af257600080fd5b8151614f1b81615758565b600060208284031215615b0f57600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015615b3757615b376159ca565b039392505050565b600067ffffffffffffffff80831681851681830481118215151615615b6657615b666159ca565b02949350505050565b60008060408385031215615b8257600080fd5b505080516020909101519092909150565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd457615bd46159ca565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0f57615c0f6159ca565b60008712925087820587128484161615615c2b57615c2b6159ca565b87850587128184161615615c4157615c416159ca565b505050929093029392505050565b600082615c5e57615c5e615a60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615cb257615cb26159ca565b500590565b600082615cc657615cc6615a60565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015615b3757615b376159ca565b60006fffffffffffffffffffffffffffffffff808316818516808303821115615d1f57615d1f6159ca565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615d85606083018789615d28565b8281036020840152615d98818688615d28565b9150508260408301529695505050505050565b600060ff821660ff841680821015615dc557615dc56159ca565b90039392505050565b600060ff831680615de157615de1615a60565b8060ff8416069150509291505056fea164736f6c634300080f000a"; + hex"6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b94578063fa315aa914610bb8578063fe2bbeb214610beb57600080fd5b8063ec5e630814610b11578063eff0f59214610b44578063f8f43ff614610b7457600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a8b578063d8cc1a3c14610abe578063dabd396d14610ade57600080fd5b8063c6f0308c146109b3578063cf09e0d014610a3d578063d5d44d8014610a5e57600080fd5b8063a445ece611610143578063bcef3b551161011d578063bcef3b5514610933578063bd8da95614610973578063c395e1ca1461099357600080fd5b8063a445ece6146107f3578063a8e4fb90146108bf578063bbdc02db146108f257600080fd5b80638980e0cc116101745780638980e0cc1461076b5780638b85902b146107805780638d450a95146107c057600080fd5b806370872aa51461073b5780637b0f0adc146107505780638129fc1c1461076357600080fd5b80633fc8cef31161025e5780635c0cba33116102075780636361506d116101e15780636361506d146106b55780636b6716c0146106f55780636f0344091461072857600080fd5b80635c0cba331461064d578063609d33341461068057806360e274641461069557600080fd5b806354fd4d501161023857806354fd4d50146105a757806357da950e146105fd5780635a5fa2d91461062d57600080fd5b80633fc8cef31461052e578063472777c614610561578063534db0e21461057457600080fd5b80632810e1d6116102c057806337b1b2291161029a57806337b1b2291461047b5780633a768463146104bb5780633e3ac912146104ee57600080fd5b80632810e1d6146103f45780632ad69aeb1461040957806330dbe5701461042957600080fd5b806319effeb4116102f157806319effeb41461034f578063200d2ed21461039a57806325fc2ace146103d557600080fd5b8063019351301461030d57806303c2924d1461032f575b600080fd5b34801561031957600080fd5b5061032d6103283660046155a8565b610c1b565b005b34801561033b57600080fd5b5061032d61034a366004615603565b610f3c565b34801561035b57600080fd5b5060005461037c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103a657600080fd5b506000546103c890700100000000000000000000000000000000900460ff1681565b6040516103919190615654565b3480156103e157600080fd5b506008545b604051908152602001610391565b34801561040057600080fd5b506103c86115e2565b34801561041557600080fd5b506103e6610424366004615603565b611887565b34801561043557600080fd5b506001546104569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610391565b34801561048757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610456565b3480156104c757600080fd5b507f000000000000000000000000cdadd729ca2319e8955240bdb61a6a6a956a7664610456565b3480156104fa57600080fd5b5060005461051e907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610391565b34801561053a57600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610456565b61032d61056f366004615695565b6118bd565b34801561058057600080fd5b507f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63610456565b3480156105b357600080fd5b506105f06040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b604051610391919061572c565b34801561060957600080fd5b50600854600954610618919082565b60408051928352602083019190915201610391565b34801561063957600080fd5b506103e661064836600461573f565b6118cf565b34801561065957600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610456565b34801561068c57600080fd5b506105f0611909565b3480156106a157600080fd5b5061032d6106b036600461577d565b611917565b3480156106c157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103e6565b34801561070157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b61032d6107363660046157af565b611abe565b34801561074757600080fd5b506009546103e6565b61032d61075e366004615695565b611b7f565b61032d611b8c565b34801561077757600080fd5b506002546103e6565b34801561078c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103e6565b3480156107cc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b3480156107ff57600080fd5b5061086b61080e36600461573f565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff166060820152608001610391565b3480156108cb57600080fd5b507f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8610456565b3480156108fe57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000001168152602001610391565b34801561093f57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103e6565b34801561097f57600080fd5b5061037c61098e36600461573f565b611c05565b34801561099f57600080fd5b506103e66109ae3660046157ee565b611de4565b3480156109bf57600080fd5b506109d36109ce36600461573f565b611fc7565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610391565b348015610a4957600080fd5b5060005461037c9067ffffffffffffffff1681565b348015610a6a57600080fd5b506103e6610a7936600461577d565b60036020526000908152604090205481565b348015610a9757600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103e6565b348015610aca57600080fd5b5061032d610ad9366004615820565b61205e565b348015610aea57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b061037c565b348015610b1d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103e6565b348015610b5057600080fd5b5061051e610b5f36600461573f565b60046020526000908152604090205460ff1681565b348015610b8057600080fd5b5061032d610b8f366004615695565b612123565b348015610ba057600080fd5b50610ba9612575565b604051610391939291906158aa565b348015610bc457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103e6565b348015610bf757600080fd5b5061051e610c0636600461573f565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610c4757610c47615625565b14610c7e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610cd1576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d08367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610d1f610d1a368690038601866158fe565b6125d5565b14610d56576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610d6b92919061598b565b604051809103902014610daa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610df3610dee84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263192505050565b61269e565b90506000610e1a82600881518110610e0d57610e0d61599b565b6020026020010151612854565b9050602081511115610e58576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610ecd576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610f6857610f68615625565b14610f9f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610fb457610fb461599b565b906000526020600020906005020190506000610fcf84611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015611038576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611081576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561109e57508515155b15611139578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110d157816110ed565b600186015473ffffffffffffffffffffffffffffffffffffffff165b90506110f98187612908565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff1660608301526111dc576fffffffffffffffffffffffffffffffff60408201526001815260008690036111dc578195505b600086826020015163ffffffff166111f491906159f9565b905060008382116112055781611207565b835b602084015190915063ffffffff165b818110156113535760008682815481106112325761123261599b565b6000918252602080832090910154808352600690915260409091205490915060ff1661128a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061129f5761129f61599b565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112fc5750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b1561133e57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b5050808061134b90615a11565b915050611216565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092179091558490036115d757606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055891580156114d357506000547201000000000000000000000000000000000000900460ff165b156115485760015473ffffffffffffffffffffffffffffffffffffffff166114fb818a612908565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556115d5565b61158f73ffffffffffffffffffffffffffffffffffffffff82161561156d5781611589565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89612908565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561161057611610615625565b14611647576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166116ab576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106116d7576116d761599b565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611712576001611715565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156117c6576117c6615625565b0217905560028111156117db576117db615625565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505090565b600560205281600052604060002081815481106118a357600080fd5b90600052602060002001600091509150505481565b905090565b6118ca8383836001611abe565b505050565b6000818152600760209081526040808320600590925282208054825461190090610100900463ffffffff1682615a49565b95945050505050565b60606118b860546020612a09565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054908290559081900361197c576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a7e576040519150601f19603f3d011682016040523d82523d6000602084013e611a83565b606091505b50509050806118ca576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8161480611b3757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b611b6d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7984848484612a5b565b50505050565b6118ca8383836000611abe565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614611bfb576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c036133fc565b565b600080600054700100000000000000000000000000000000900460ff166002811115611c3357611c33615625565b14611c6a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110611c7f57611c7f61599b565b600091825260208220600590910201805490925063ffffffff90811614611cee57815460028054909163ffffffff16908110611cbd57611cbd61599b565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611d2690700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611d3a9067ffffffffffffffff1642615a49565b611d59611d19846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611d6d91906159f9565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611611dba5780611900565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080611e83836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115611ee2576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000611efd8383615a8f565b9050670de0b6b3a76400006000611f34827f0000000000000000000000000000000000000000000000000000000000000008615aa3565b90506000611f52611f4d670de0b6b3a764000086615aa3565b613955565b90506000611f608484613bb0565b90506000611f6e8383613bff565b90506000611f7b82613c2d565b90506000611f9a82611f95670de0b6b3a76400008f615aa3565b613e15565b90506000611fa88b83613bff565b9050611fb4818d615aa3565b9f9e505050505050505050505050505050565b60028181548110611fd757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614806120d757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b61210d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211b868686868686613e4f565b505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214f5761214f615625565b14612186576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806121958661447e565b935093509350935060006121ab85858585614887565b905060007f000000000000000000000000cdadd729ca2319e8955240bdb61a6a6a956a766473ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190615ae0565b9050600189036123365773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8461229a367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615afd565b506115d7565b600289036123625773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848961229a565b6003890361238e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848761229a565b600489036124aa5760006123d46fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614941565b6009546123e191906159f9565b6123ec9060016159f9565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561247f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a39190615afd565b50506115d7565b60058903612543576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122ed565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606125ce611909565b9050909192565b60008160000151826020015183604001518460600151604051602001612614949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612680576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006126ae856149ef565b9194509250905060018160018111156126c9576126c9615625565b14612700576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845161270c83856159f9565b14612743576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161275a5790505093506000835b8651811015612848576000806127cd6040518060400160405280858c600001516127b19190615a49565b8152602001858c602001516127c691906159f9565b90526149ef565b5091509150604051806040016040528083836127e991906159f9565b8152602001848b602001516127fe91906159f9565b8152508885815181106128135761281361599b565b60209081029190910101526128296001856159f9565b935061283581836159f9565b61283f90846159f9565b92505050612787565b50845250919392505050565b60606000806000612864856149ef565b91945092509050600081600181111561287f5761287f615625565b146128b6576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082846159f9565b8551146128f9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190085602001518484614e8d565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff909316928392906129579084906159f9565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b1580156129ec57600080fd5b505af1158015612a00573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054700100000000000000000000000000000000900460ff166002811115612a8757612a87615625565b14612abe576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110612ad357612ad361599b565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514612bba576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000612c7a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612cb55750612cb27f000000000000000000000000000000000000000000000000000000000000000460026159f9565b81145b8015612cbf575084155b15612cf6576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d1c575086155b15612d53576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115612dad576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd87f000000000000000000000000000000000000000000000000000000000000000460016159f9565b8103612dea57612dea86888588614f22565b34612df483611de4565b14612e2b576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e3688611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603612e9e576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016612efe9190615b16565b67ffffffffffffffff16612f198267ffffffffffffffff1690565b67ffffffffffffffff161115612ffb576000612f5660017f0000000000000000000000000000000000000000000000000000000000000004615a49565b8314612f8c5767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612fc1565b612fc17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615b3f565b9050612ff7817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff16615b16565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615613079576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b8152602001908152602001600020600160028054905061330f9190615a49565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b1580156133a757600080fd5b505af11580156133bb573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b60005471010000000000000000000000000000000000900460ff161561344e576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000001166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa158015613502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135269190615b6f565b909250905081613562576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461359557639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401351161362f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b15801561390457600080fd5b505af1158015613918573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136139b457631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613bed57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613c1d5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613c5b57919050565b680755bf798b4a1bf1e58212613c795763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613e46670de0b6b3a764000083613e2d86613955565b613e379190615b93565b613e419190615c4f565b613c2d565b90505b92915050565b60008054700100000000000000000000000000000000900460ff166002811115613e7b57613e7b615625565b14613eb2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110613ec757613ec761599b565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050613f267f000000000000000000000000000000000000000000000000000000000000000860016159f9565b613fc2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614613ffc576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156140f35761404f7f00000000000000000000000000000000000000000000000000000000000000047f0000000000000000000000000000000000000000000000000000000000000008615a49565b6001901b61406e846fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1661408a9190615cb7565b156140c7576140be6140af60016fffffffffffffffffffffffffffffffff8716615ccb565b865463ffffffff166000615172565b600301546140e9565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061411d565b6003850154915061411a6140af6fffffffffffffffffffffffffffffffff86166001615cf4565b90505b600882901b60088a8a60405161413492919061598b565b6040518091039020901b14614175576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141808c615256565b9050600061418f836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000cdadd729ca2319e8955240bdb61a6a6a956a766473ffffffffffffffffffffffffffffffffffffffff169063e14ced3290614209908f908f908f908f908a90600401615d71565b6020604051808303816000875af1158015614228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424c9190615afd565b6004850154911491506000906002906142f7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614393896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61439d9190615dab565b6143a79190615dce565b60ff1615905081151581036143e8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff161561443f576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061449e5761449e61599b565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000490614575906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145af576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000490614676906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146eb57825463ffffffff166146b57f000000000000000000000000000000000000000000000000000000000000000460016159f9565b83036146bf578391505b600281815481106146d2576146d261599b565b90600052602060002090600502019350809450506145b3565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661475461473f856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561482357600061478c836fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1611156147f75760006147ce6147c660016fffffffffffffffffffffffffffffffff8616615ccb565b896001615172565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506147fd9050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614879565b60006148456147c66fffffffffffffffffffffffffffffffff85166001615cf4565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156148f45760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611900565b82826040516020016149229291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b6000806149ce847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614a32576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614a57576000600160009450945094505050614e86565b60b78111614b6d576000614a6c608083615a49565b905080876000015111614aab576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614b2357507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614b5a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614e86915050565b60bf8111614ccb576000614b8260b783615a49565b905080876000015111614bc1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614c23576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614c6b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614c7581846159f9565b895111614cae576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614cb98360016159f9565b9750955060009450614e869350505050565b60f78111614d30576000614ce060c083615a49565b905080876000015111614d1f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614e86915050565b6000614d3d60f783615a49565b905080876000015111614d7c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614dde576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614e26576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e3081846159f9565b895111614e69576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e748360016159f9565b9750955060019450614e869350505050565b9193909250565b60608167ffffffffffffffff811115614ea857614ea86158cf565b6040519080825280601f01601f191660200182016040528015614ed2576020820181803683370190505b5090508115614f1b576000614ee784866159f9565b90506020820160005b84811015614f08578281015182820152602001614ef0565b84811115614f17576000858301525b5050505b9392505050565b6000614f416fffffffffffffffffffffffffffffffff84166001615cf4565b90506000614f5182866001615172565b9050600086901a838061503d5750614f8a60027f0000000000000000000000000000000000000000000000000000000000000004615cb7565b600483015460029061502e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6150389190615dce565b60ff16145b156150955760ff811660011480615057575060ff81166002145b615090576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b612a00565b60ff811615612a00576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b600080615160837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826151bb576151b66fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000004615285565b6151d6565b6151d6856fffffffffffffffffffffffffffffffff16615411565b9050600284815481106151eb576151eb61599b565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461524e57815460028054909163ffffffff169081106152395761523961599b565b906000526020600020906005020191506151fc565b509392505050565b60008060008060006152678661447e565b935093509350935061527b84848484614887565b9695505050505050565b600081615324846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161533a5763b34b5c226000526004601cfd5b61534383615411565b9050816153e2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613e4957613e466153f88360016159f9565b6fffffffffffffffffffffffffffffffff8316906154b6565b600081196001830116816154a5827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615543847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261557157600080fd5b50813567ffffffffffffffff81111561558957600080fd5b6020830191508360208285010111156155a157600080fd5b9250929050565b600080600083850360a08112156155be57600080fd5b60808112156155cc57600080fd5b50839250608084013567ffffffffffffffff8111156155ea57600080fd5b6155f68682870161555f565b9497909650939450505050565b6000806040838503121561561657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061568f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806000606084860312156156aa57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b818110156156e7576020818501810151868301820152016156cb565b818111156156f9576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613e4660208301846156c1565b60006020828403121561575157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461577a57600080fd5b50565b60006020828403121561578f57600080fd5b8135614f1b81615758565b803580151581146157aa57600080fd5b919050565b600080600080608085870312156157c557600080fd5b8435935060208501359250604085013591506157e36060860161579a565b905092959194509250565b60006020828403121561580057600080fd5b81356fffffffffffffffffffffffffffffffff81168114614f1b57600080fd5b6000806000806000806080878903121561583957600080fd5b863595506158496020880161579a565b9450604087013567ffffffffffffffff8082111561586657600080fd5b6158728a838b0161555f565b9096509450606089013591508082111561588b57600080fd5b5061589889828a0161555f565b979a9699509497509295939492505050565b63ffffffff8416815282602082015260606040820152600061190060608301846156c1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561591057600080fd5b6040516080810181811067ffffffffffffffff8211171561595a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615a0c57615a0c6159ca565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a4257615a426159ca565b5060010190565b600082821015615a5b57615a5b6159ca565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a9e57615a9e615a60565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615adb57615adb6159ca565b500290565b600060208284031215615af257600080fd5b8151614f1b81615758565b600060208284031215615b0f57600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015615b3757615b376159ca565b039392505050565b600067ffffffffffffffff80831681851681830481118215151615615b6657615b666159ca565b02949350505050565b60008060408385031215615b8257600080fd5b505080516020909101519092909150565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd457615bd46159ca565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0f57615c0f6159ca565b60008712925087820587128484161615615c2b57615c2b6159ca565b87850587128184161615615c4157615c416159ca565b505050929093029392505050565b600082615c5e57615c5e615a60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615cb257615cb26159ca565b500590565b600082615cc657615cc6615a60565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015615b3757615b376159ca565b60006fffffffffffffffffffffffffffffffff808316818516808303821115615d1f57615d1f6159ca565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615d85606083018789615d28565b8281036020840152615d98818688615d28565b9150508260408301529695505050505050565b600060ff821660ff841680821015615dc557615dc56159ca565b90039392505050565b600060ff831680615de157615de1615a60565b8060ff8416069150509291505056fea164736f6c634300080f000a"; } From 379973e981c377f061bd4c5b6b9e9e154d78b56b Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Fri, 28 Jun 2024 07:38:09 +1000 Subject: [PATCH 118/141] op-supervisor: Create clients and monitor chain heads for each L2 chain (#11009) * op-supervisor: Create clients and monitor chain heads for each L2 chain * op-supervisor: Remove rpc url from log message * op-supervisor: Update tickets in TODOs --- op-service/sources/l1_client.go | 8 +- op-supervisor/metrics/metrics.go | 55 ++++ op-supervisor/metrics/noop.go | 5 + op-supervisor/supervisor/backend/backend.go | 39 ++- .../supervisor/backend/source/chain.go | 94 +++++++ .../backend/source/chain_metrics.go | 31 +++ .../supervisor/backend/source/heads.go | 97 +++++++ .../supervisor/backend/source/heads_test.go | 243 ++++++++++++++++++ op-supervisor/supervisor/service.go | 19 +- 9 files changed, 582 insertions(+), 9 deletions(-) create mode 100644 op-supervisor/supervisor/backend/source/chain.go create mode 100644 op-supervisor/supervisor/backend/source/chain_metrics.go create mode 100644 op-supervisor/supervisor/backend/source/heads.go create mode 100644 op-supervisor/supervisor/backend/source/heads_test.go diff --git a/op-service/sources/l1_client.go b/op-service/sources/l1_client.go index 3cda3a73304e..d67ce1c87abd 100644 --- a/op-service/sources/l1_client.go +++ b/op-service/sources/l1_client.go @@ -25,7 +25,11 @@ type L1ClientConfig struct { func L1ClientDefaultConfig(config *rollup.Config, trustRPC bool, kind RPCProviderKind) *L1ClientConfig { // Cache 3/2 worth of sequencing window of receipts and txs span := int(config.SeqWindowSize) * 3 / 2 - fullSpan := span + return L1ClientSimpleConfig(trustRPC, kind, span) +} + +func L1ClientSimpleConfig(trustRPC bool, kind RPCProviderKind, cacheSize int) *L1ClientConfig { + span := cacheSize if span > 1000 { // sanity cap. If a large sequencing window is configured, do not make the cache too large span = 1000 } @@ -44,7 +48,7 @@ func L1ClientDefaultConfig(config *rollup.Config, trustRPC bool, kind RPCProvide MethodResetDuration: time.Minute, }, // Not bounded by span, to cover find-sync-start range fully for speedy recovery after errors. - L1BlockRefsCacheSize: fullSpan, + L1BlockRefsCacheSize: cacheSize, } } diff --git a/op-supervisor/metrics/metrics.go b/op-supervisor/metrics/metrics.go index b659e71b95fa..cc7bb5381a32 100644 --- a/op-supervisor/metrics/metrics.go +++ b/op-supervisor/metrics/metrics.go @@ -1,6 +1,8 @@ package metrics import ( + "math/big" + "github.com/prometheus/client_golang/prometheus" opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics" @@ -14,6 +16,9 @@ type Metricer interface { opmetrics.RPCMetricer + CacheAdd(chainID *big.Int, label string, cacheSize int, evicted bool) + CacheGet(chainID *big.Int, label string, hit bool) + Document() []opmetrics.DocumentedMetric } @@ -24,6 +29,10 @@ type Metrics struct { opmetrics.RPCMetrics + SizeVec *prometheus.GaugeVec + GetVec *prometheus.CounterVec + AddVec *prometheus.CounterVec + info prometheus.GaugeVec up prometheus.Gauge } @@ -61,6 +70,33 @@ func NewMetrics(procName string) *Metrics { Name: "up", Help: "1 if the op-supervisor has finished starting up", }), + + SizeVec: factory.NewGaugeVec(prometheus.GaugeOpts{ + Namespace: ns, + Name: "source_rpc_cache_size", + Help: "source rpc cache cache size", + }, []string{ + "chain", + "type", + }), + GetVec: factory.NewCounterVec(prometheus.CounterOpts{ + Namespace: ns, + Name: "source_rpc_cache_get", + Help: "source rpc cache lookups, hitting or not", + }, []string{ + "chain", + "type", + "hit", + }), + AddVec: factory.NewCounterVec(prometheus.CounterOpts{ + Namespace: ns, + Name: "source_rpc_cache_add", + Help: "source rpc cache additions, evicting previous values or not", + }, []string{ + "chain", + "type", + "evicted", + }), } } @@ -82,3 +118,22 @@ func (m *Metrics) RecordUp() { prometheus.MustRegister() m.up.Set(1) } + +func (m *Metrics) CacheAdd(chainID *big.Int, label string, cacheSize int, evicted bool) { + chain := chainID.String() + m.SizeVec.WithLabelValues(chain, label).Set(float64(cacheSize)) + if evicted { + m.AddVec.WithLabelValues(chain, label, "true").Inc() + } else { + m.AddVec.WithLabelValues(chain, label, "false").Inc() + } +} + +func (m *Metrics) CacheGet(chainID *big.Int, label string, hit bool) { + chain := chainID.String() + if hit { + m.GetVec.WithLabelValues(chain, label, "true").Inc() + } else { + m.GetVec.WithLabelValues(chain, label, "false").Inc() + } +} diff --git a/op-supervisor/metrics/noop.go b/op-supervisor/metrics/noop.go index f87e75a1116c..515387e76085 100644 --- a/op-supervisor/metrics/noop.go +++ b/op-supervisor/metrics/noop.go @@ -1,6 +1,8 @@ package metrics import ( + "math/big" + opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics" ) @@ -14,3 +16,6 @@ func (*noopMetrics) Document() []opmetrics.DocumentedMetric { return nil } func (*noopMetrics) RecordInfo(version string) {} func (*noopMetrics) RecordUp() {} + +func (m *noopMetrics) CacheAdd(_ *big.Int, _ string, _ int, _ bool) {} +func (m *noopMetrics) CacheGet(_ *big.Int, _ string, _ bool) {} diff --git a/op-supervisor/supervisor/backend/backend.go b/op-supervisor/supervisor/backend/backend.go index 074d498f4e52..eb6b6e3ab235 100644 --- a/op-supervisor/supervisor/backend/backend.go +++ b/op-supervisor/supervisor/backend/backend.go @@ -3,18 +3,29 @@ package backend import ( "context" "errors" + "fmt" "io" "sync/atomic" + "github.com/ethereum-optimism/optimism/op-supervisor/config" + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/source" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/log" "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/frontend" "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/types" ) +type Metrics interface { + source.Metrics +} + type SupervisorBackend struct { started atomic.Bool + logger log.Logger + + chainMonitors []*source.ChainMonitor // TODO(protocol-quest#287): collection of logdbs per chain // TODO(protocol-quest#288): collection of logdb updating services per chain @@ -24,8 +35,19 @@ var _ frontend.Backend = (*SupervisorBackend)(nil) var _ io.Closer = (*SupervisorBackend)(nil) -func NewSupervisorBackend() *SupervisorBackend { - return &SupervisorBackend{} +func NewSupervisorBackend(ctx context.Context, logger log.Logger, m Metrics, cfg *config.Config) (*SupervisorBackend, error) { + chainMonitors := make([]*source.ChainMonitor, len(cfg.L2RPCs)) + for i, rpc := range cfg.L2RPCs { + monitor, err := source.NewChainMonitor(ctx, logger, m, rpc) + if err != nil { + return nil, fmt.Errorf("failed to create monitor for rpc %v: %w", rpc, err) + } + chainMonitors[i] = monitor + } + return &SupervisorBackend{ + logger: logger, + chainMonitors: chainMonitors, + }, nil } func (su *SupervisorBackend) Start(ctx context.Context) error { @@ -33,6 +55,11 @@ func (su *SupervisorBackend) Start(ctx context.Context) error { return errors.New("already started") } // TODO(protocol-quest#288): start logdb updating services of all chains + for _, monitor := range su.chainMonitors { + if err := monitor.Start(); err != nil { + return fmt.Errorf("failed to start chain monitor: %w", err) + } + } return nil } @@ -41,7 +68,13 @@ func (su *SupervisorBackend) Stop(ctx context.Context) error { return errors.New("already stopped") } // TODO(protocol-quest#288): stop logdb updating services of all chains - return nil + var errs error + for _, monitor := range su.chainMonitors { + if err := monitor.Stop(); err != nil { + errs = errors.Join(errs, fmt.Errorf("failed to stop chain monitor: %w", err)) + } + } + return errs } func (su *SupervisorBackend) Close() error { diff --git a/op-supervisor/supervisor/backend/source/chain.go b/op-supervisor/supervisor/backend/source/chain.go new file mode 100644 index 000000000000..d3f44d63e1f7 --- /dev/null +++ b/op-supervisor/supervisor/backend/source/chain.go @@ -0,0 +1,94 @@ +package source + +import ( + "context" + "fmt" + "math/big" + "time" + + "github.com/ethereum-optimism/optimism/op-service/client" + "github.com/ethereum-optimism/optimism/op-service/dial" + "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/ethereum-optimism/optimism/op-service/sources" + "github.com/ethereum-optimism/optimism/op-service/sources/caching" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rpc" +) + +// TODO(optimism#11032) Make these configurable and a sensible default +const epochPollInterval = 30 * time.Second +const pollInterval = 2 * time.Second +const trustRpc = false +const rpcKind = sources.RPCKindStandard + +type Metrics interface { + CacheAdd(chainID *big.Int, label string, cacheSize int, evicted bool) + CacheGet(chainID *big.Int, label string, hit bool) +} + +// ChainMonitor monitors a source L2 chain, retrieving the data required to populate the database and perform +// interop consolidation. It detects and notifies when reorgs occur. +type ChainMonitor struct { + headMonitor *HeadMonitor +} + +func NewChainMonitor(ctx context.Context, logger log.Logger, genericMetrics Metrics, rpc string) (*ChainMonitor, error) { + // First dial a simple client and get the chain ID so we have a simple identifier for the chain. + ethClient, err := dial.DialEthClientWithTimeout(ctx, 10*time.Second, logger, rpc) + if err != nil { + return nil, fmt.Errorf("failed to connect to rpc %v: %w", rpc, err) + } + chainID, err := ethClient.ChainID(ctx) + if err != nil { + return nil, fmt.Errorf("failed to load chain id for rpc %v: %w", rpc, err) + } + logger = logger.New("chainID", chainID) + m := newChainMetrics(chainID, genericMetrics) + cl, err := newClient(ctx, logger, m, rpc, ethClient.Client(), pollInterval, trustRpc, rpcKind) + if err != nil { + return nil, err + } + logger.Info("Monitoring chain") + headMonitor := NewHeadMonitor(logger, epochPollInterval, cl, &loggingCallback{logger}) + return &ChainMonitor{ + headMonitor: headMonitor, + }, nil +} + +func (c *ChainMonitor) Start() error { + return c.headMonitor.Start() +} + +func (c *ChainMonitor) Stop() error { + return c.headMonitor.Stop() +} + +// loggingCallback is a temporary implementation of the head monitor callback that just logs the events. +type loggingCallback struct { + log log.Logger +} + +func (n *loggingCallback) OnNewUnsafeHead(_ context.Context, block eth.L1BlockRef) { + n.log.Info("New unsafe head", "block", block) +} + +func (n *loggingCallback) OnNewSafeHead(_ context.Context, block eth.L1BlockRef) { + n.log.Info("New safe head", "block", block) +} + +func (n *loggingCallback) OnNewFinalizedHead(_ context.Context, block eth.L1BlockRef) { + n.log.Info("New finalized head", "block", block) +} + +func newClient(ctx context.Context, logger log.Logger, m caching.Metrics, rpc string, rpcClient *rpc.Client, pollRate time.Duration, trustRPC bool, kind sources.RPCProviderKind) (*sources.L1Client, error) { + c, err := client.NewRPCWithClient(ctx, logger, rpc, client.NewBaseRPCClient(rpcClient), pollRate) + if err != nil { + return nil, fmt.Errorf("failed to create new RPC client: %w", err) + } + + l1Client, err := sources.NewL1Client(c, logger, m, sources.L1ClientSimpleConfig(trustRPC, kind, 100)) + if err != nil { + return nil, fmt.Errorf("failed to connect client: %w", err) + } + return l1Client, nil +} diff --git a/op-supervisor/supervisor/backend/source/chain_metrics.go b/op-supervisor/supervisor/backend/source/chain_metrics.go new file mode 100644 index 000000000000..96221d367e8d --- /dev/null +++ b/op-supervisor/supervisor/backend/source/chain_metrics.go @@ -0,0 +1,31 @@ +package source + +import ( + "math/big" + + "github.com/ethereum-optimism/optimism/op-service/sources/caching" +) + +// chainMetrics is an adapter between the metrics API expected by clients that assume there's only a single chain +// and the actual metrics implementation which requires a chain ID to identify the source chain. +type chainMetrics struct { + chainID *big.Int + delegate Metrics +} + +func newChainMetrics(chainID *big.Int, delegate Metrics) *chainMetrics { + return &chainMetrics{ + chainID: chainID, + delegate: delegate, + } +} + +func (c *chainMetrics) CacheAdd(label string, cacheSize int, evicted bool) { + c.delegate.CacheAdd(c.chainID, label, cacheSize, evicted) +} + +func (c *chainMetrics) CacheGet(label string, hit bool) { + c.delegate.CacheGet(c.chainID, label, hit) +} + +var _ caching.Metrics = (*chainMetrics)(nil) diff --git a/op-supervisor/supervisor/backend/source/heads.go b/op-supervisor/supervisor/backend/source/heads.go new file mode 100644 index 000000000000..f5c8896693fd --- /dev/null +++ b/op-supervisor/supervisor/backend/source/heads.go @@ -0,0 +1,97 @@ +package source + +import ( + "context" + "errors" + "sync/atomic" + "time" + + "github.com/ethereum-optimism/optimism/op-service/eth" + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/log" +) + +type HeadMonitorClient interface { + eth.NewHeadSource + eth.L1BlockRefsSource +} + +type HeadChangeCallback interface { + OnNewUnsafeHead(ctx context.Context, block eth.L1BlockRef) + OnNewSafeHead(ctx context.Context, block eth.L1BlockRef) + OnNewFinalizedHead(ctx context.Context, block eth.L1BlockRef) +} + +// HeadMonitor monitors an L2 chain and sends notifications when the unsafe, safe or finalized head changes. +// Head updates may be coalesced, allowing the head block to skip forward multiple blocks. +// Reorgs are not identified. +type HeadMonitor struct { + log log.Logger + epochPollInterval time.Duration + rpc HeadMonitorClient + callback HeadChangeCallback + + started atomic.Bool + headsSub event.Subscription + safeSub ethereum.Subscription + finalizedSub ethereum.Subscription +} + +func NewHeadMonitor(logger log.Logger, epochPollInterval time.Duration, rpc HeadMonitorClient, callback HeadChangeCallback) *HeadMonitor { + return &HeadMonitor{ + log: logger, + epochPollInterval: epochPollInterval, + rpc: rpc, + callback: callback, + } +} + +func (h *HeadMonitor) Start() error { + if !h.started.CompareAndSwap(false, true) { + return errors.New("already started") + } + + // Keep subscribed to the unsafe head, which changes frequently. + h.headsSub = event.ResubscribeErr(time.Second*10, func(ctx context.Context, err error) (event.Subscription, error) { + if err != nil { + h.log.Warn("Resubscribing after failed heads subscription", "err", err) + } + return eth.WatchHeadChanges(ctx, h.rpc, h.callback.OnNewUnsafeHead) + }) + go func() { + err, ok := <-h.headsSub.Err() + if !ok { + return + } + h.log.Error("Heads subscription error", "err", err) + }() + + // Poll for the safe block and finalized block, which only change once per epoch at most and may be delayed. + h.safeSub = eth.PollBlockChanges(h.log, h.rpc, h.callback.OnNewSafeHead, eth.Safe, + h.epochPollInterval, time.Second*10) + h.finalizedSub = eth.PollBlockChanges(h.log, h.rpc, h.callback.OnNewFinalizedHead, eth.Finalized, + h.epochPollInterval, time.Second*10) + h.log.Info("Chain head monitoring started") + return nil +} + +func (h *HeadMonitor) Stop() error { + if !h.started.CompareAndSwap(true, false) { + return errors.New("already stopped") + } + + // stop heads feed + if h.headsSub != nil { + h.headsSub.Unsubscribe() + } + // stop polling for safe-head changes + if h.safeSub != nil { + h.safeSub.Unsubscribe() + } + // stop polling for finalized-head changes + if h.finalizedSub != nil { + h.finalizedSub.Unsubscribe() + } + return nil +} diff --git a/op-supervisor/supervisor/backend/source/heads_test.go b/op-supervisor/supervisor/backend/source/heads_test.go new file mode 100644 index 000000000000..d13dff48d851 --- /dev/null +++ b/op-supervisor/supervisor/backend/source/heads_test.go @@ -0,0 +1,243 @@ +package source + +import ( + "context" + "errors" + "fmt" + "math/rand" + "sync" + "testing" + "time" + + "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/ethereum-optimism/optimism/op-service/testlog" + "github.com/ethereum-optimism/optimism/op-service/testutils" + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" + "github.com/stretchr/testify/require" +) + +const waitDuration = 10 * time.Second +const checkInterval = 10 * time.Millisecond + +func TestUnsafeHeadUpdates(t *testing.T) { + rng := rand.New(rand.NewSource(0x1337)) + header1 := testutils.RandomHeader(rng) + header2 := testutils.RandomHeader(rng) + + t.Run("NotifyOfNewHeads", func(t *testing.T) { + rpc, callback := startHeadMonitor(t) + + rpc.NewUnsafeHead(t, header1) + callback.RequireUnsafeHeaders(t, header1) + + rpc.NewUnsafeHead(t, header2) + callback.RequireUnsafeHeaders(t, header1, header2) + }) + + t.Run("ResubscribeOnError", func(t *testing.T) { + rpc, callback := startHeadMonitor(t) + + rpc.SubscriptionError(t) + + rpc.NewUnsafeHead(t, header1) + callback.RequireUnsafeHeaders(t, header1) + }) +} + +func TestSafeHeadUpdates(t *testing.T) { + rpc, callback := startHeadMonitor(t) + + head1 := eth.L1BlockRef{ + Hash: common.Hash{0xaa}, + Number: 1, + } + head2 := eth.L1BlockRef{ + Hash: common.Hash{0xbb}, + Number: 2, + } + + rpc.SetSafeHead(head1) + callback.RequireSafeHeaders(t, head1) + rpc.SetSafeHead(head2) + callback.RequireSafeHeaders(t, head1, head2) +} + +func TestFinalizedHeadUpdates(t *testing.T) { + rpc, callback := startHeadMonitor(t) + + head1 := eth.L1BlockRef{ + Hash: common.Hash{0xaa}, + Number: 1, + } + head2 := eth.L1BlockRef{ + Hash: common.Hash{0xbb}, + Number: 2, + } + + rpc.SetFinalizedHead(head1) + callback.RequireFinalizedHeaders(t, head1) + rpc.SetFinalizedHead(head2) + callback.RequireFinalizedHeaders(t, head1, head2) +} + +func startHeadMonitor(t *testing.T) (*stubRPC, *stubCallback) { + logger := testlog.Logger(t, log.LvlInfo) + rpc := &stubRPC{} + callback := &stubCallback{} + monitor := NewHeadMonitor(logger, 50*time.Millisecond, rpc, callback) + require.NoError(t, monitor.Start()) + t.Cleanup(func() { + require.NoError(t, monitor.Stop()) + }) + return rpc, callback +} + +type stubCallback struct { + sync.Mutex + unsafe []eth.L1BlockRef + safe []eth.L1BlockRef + finalized []eth.L1BlockRef +} + +func (s *stubCallback) RequireUnsafeHeaders(t *testing.T, heads ...*types.Header) { + expected := make([]eth.L1BlockRef, len(heads)) + for i, head := range heads { + expected[i] = eth.InfoToL1BlockRef(eth.HeaderBlockInfo(head)) + } + s.requireHeaders(t, func(s *stubCallback) []eth.L1BlockRef { return s.unsafe }, expected) +} + +func (s *stubCallback) RequireSafeHeaders(t *testing.T, expected ...eth.L1BlockRef) { + s.requireHeaders(t, func(s *stubCallback) []eth.L1BlockRef { return s.safe }, expected) +} + +func (s *stubCallback) RequireFinalizedHeaders(t *testing.T, expected ...eth.L1BlockRef) { + s.requireHeaders(t, func(s *stubCallback) []eth.L1BlockRef { return s.finalized }, expected) +} + +func (s *stubCallback) requireHeaders(t *testing.T, getter func(*stubCallback) []eth.L1BlockRef, expected []eth.L1BlockRef) { + require.Eventually(t, func() bool { + s.Lock() + defer s.Unlock() + return len(getter(s)) >= len(expected) + }, waitDuration, checkInterval) + s.Lock() + defer s.Unlock() + require.Equal(t, expected, getter(s)) +} + +func (s *stubCallback) OnNewUnsafeHead(ctx context.Context, block eth.L1BlockRef) { + s.Lock() + defer s.Unlock() + s.unsafe = append(s.unsafe, block) +} + +func (s *stubCallback) OnNewSafeHead(ctx context.Context, block eth.L1BlockRef) { + s.Lock() + defer s.Unlock() + s.safe = append(s.safe, block) +} + +func (s *stubCallback) OnNewFinalizedHead(ctx context.Context, block eth.L1BlockRef) { + s.Lock() + defer s.Unlock() + s.finalized = append(s.finalized, block) +} + +var _ HeadChangeCallback = (*stubCallback)(nil) + +type stubRPC struct { + sync.Mutex + sub *mockSubscription + + safeHead eth.L1BlockRef + finalizedHead eth.L1BlockRef +} + +func (s *stubRPC) SubscribeNewHead(_ context.Context, unsafeCh chan<- *types.Header) (ethereum.Subscription, error) { + s.Lock() + defer s.Unlock() + if s.sub != nil { + return nil, errors.New("already subscribed to unsafe heads") + } + errChan := make(chan error) + s.sub = &mockSubscription{errChan, unsafeCh, s} + return s.sub, nil +} + +func (s *stubRPC) SetSafeHead(head eth.L1BlockRef) { + s.Lock() + defer s.Unlock() + s.safeHead = head +} + +func (s *stubRPC) SetFinalizedHead(head eth.L1BlockRef) { + s.Lock() + defer s.Unlock() + s.finalizedHead = head +} + +func (s *stubRPC) L1BlockRefByLabel(ctx context.Context, label eth.BlockLabel) (eth.L1BlockRef, error) { + s.Lock() + defer s.Unlock() + switch label { + case eth.Safe: + if s.safeHead == (eth.L1BlockRef{}) { + return eth.L1BlockRef{}, errors.New("no unsafe head") + } + return s.safeHead, nil + case eth.Finalized: + if s.finalizedHead == (eth.L1BlockRef{}) { + return eth.L1BlockRef{}, errors.New("no finalized head") + } + return s.finalizedHead, nil + default: + return eth.L1BlockRef{}, fmt.Errorf("unknown label: %v", label) + } +} + +func (s *stubRPC) NewUnsafeHead(t *testing.T, header *types.Header) { + s.WaitForSub(t) + s.Lock() + defer s.Unlock() + require.NotNil(t, s.sub, "Attempting to publish a header with no subscription") + s.sub.headers <- header +} + +func (s *stubRPC) SubscriptionError(t *testing.T) { + s.WaitForSub(t) + s.Lock() + defer s.Unlock() + s.sub.errChan <- errors.New("subscription error") + s.sub = nil +} + +func (s *stubRPC) WaitForSub(t *testing.T) { + require.Eventually(t, func() bool { + s.Lock() + defer s.Unlock() + return s.sub != nil + }, waitDuration, checkInterval, "Head monitor did not subscribe to unsafe head") +} + +var _ HeadMonitorClient = (*stubRPC)(nil) + +type mockSubscription struct { + errChan chan error + headers chan<- *types.Header + rpc *stubRPC +} + +func (m *mockSubscription) Unsubscribe() { + fmt.Println("Unsubscribed") + m.rpc.Lock() + defer m.rpc.Unlock() + m.rpc.sub = nil +} + +func (m *mockSubscription) Err() <-chan error { + return m.errChan +} diff --git a/op-supervisor/supervisor/service.go b/op-supervisor/supervisor/service.go index 5b8b0fa14c1b..aecd90ad2fba 100644 --- a/op-supervisor/supervisor/service.go +++ b/op-supervisor/supervisor/service.go @@ -60,19 +60,26 @@ func (su *SupervisorService) initFromCLIConfig(ctx context.Context, cfg *config. if err := su.initMetricsServer(cfg); err != nil { return fmt.Errorf("failed to start Metrics server: %w", err) } - su.initBackend(cfg) + if err := su.initBackend(ctx, cfg); err != nil { + return fmt.Errorf("failed to start backend: %w", err) + } if err := su.initRPCServer(cfg); err != nil { return fmt.Errorf("failed to start RPC server: %w", err) } return nil } -func (su *SupervisorService) initBackend(cfg *config.Config) { +func (su *SupervisorService) initBackend(ctx context.Context, cfg *config.Config) error { if cfg.MockRun { su.backend = backend.NewMockBackend() - } else { - su.backend = backend.NewSupervisorBackend() + return nil + } + be, err := backend.NewSupervisorBackend(ctx, su.log, su.metrics, cfg) + if err != nil { + return fmt.Errorf("failed to create supervisor backend: %w", err) } + su.backend = be + return nil } func (su *SupervisorService) initMetrics(cfg *config.Config) { @@ -152,6 +159,10 @@ func (su *SupervisorService) Start(ctx context.Context) error { return fmt.Errorf("unable to start RPC server: %w", err) } + if err := su.backend.Start(ctx); err != nil { + return fmt.Errorf("unable to start backend: %w", err) + } + su.metrics.RecordUp() return nil } From 42dd604bc15fb9d1941a6db992cc91bf0a74082b Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Fri, 28 Jun 2024 09:22:29 +1000 Subject: [PATCH 119/141] op-supervisor: Fetch receipts for each block as head updates (#11035) * op-supervisor: Introduce pipeline concept and stage to handle all blocks on head update * op-supervisor: Simplify to just call a block processor directly * op-supervisor: Simplify further to remove pipeline entirely and hook up processor * op-supervisor: Separate out and test the head update callback. * op-supervisor: Fetch receipts for each block --- .../supervisor/backend/source/chain.go | 33 ++-- .../backend/source/chain_processor.go | 65 ++++++++ .../backend/source/chain_processor_test.go | 149 ++++++++++++++++++ .../supervisor/backend/source/fetch_logs.go | 46 ++++++ .../backend/source/fetch_logs_test.go | 77 +++++++++ .../source/{heads.go => head_monitor.go} | 0 .../{heads_test.go => head_monitor_test.go} | 0 .../backend/source/head_processor.go | 55 +++++++ .../backend/source/head_processor_test.go | 56 +++++++ 9 files changed, 467 insertions(+), 14 deletions(-) create mode 100644 op-supervisor/supervisor/backend/source/chain_processor.go create mode 100644 op-supervisor/supervisor/backend/source/chain_processor_test.go create mode 100644 op-supervisor/supervisor/backend/source/fetch_logs.go create mode 100644 op-supervisor/supervisor/backend/source/fetch_logs_test.go rename op-supervisor/supervisor/backend/source/{heads.go => head_monitor.go} (100%) rename op-supervisor/supervisor/backend/source/{heads_test.go => head_monitor_test.go} (100%) create mode 100644 op-supervisor/supervisor/backend/source/head_processor.go create mode 100644 op-supervisor/supervisor/backend/source/head_processor_test.go diff --git a/op-supervisor/supervisor/backend/source/chain.go b/op-supervisor/supervisor/backend/source/chain.go index d3f44d63e1f7..4d3d53caafef 100644 --- a/op-supervisor/supervisor/backend/source/chain.go +++ b/op-supervisor/supervisor/backend/source/chain.go @@ -11,6 +11,7 @@ import ( "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/sources" "github.com/ethereum-optimism/optimism/op-service/sources/caching" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rpc" ) @@ -29,6 +30,7 @@ type Metrics interface { // ChainMonitor monitors a source L2 chain, retrieving the data required to populate the database and perform // interop consolidation. It detects and notifies when reorgs occur. type ChainMonitor struct { + log log.Logger headMonitor *HeadMonitor } @@ -48,14 +50,25 @@ func NewChainMonitor(ctx context.Context, logger log.Logger, genericMetrics Metr if err != nil { return nil, err } - logger.Info("Monitoring chain") - headMonitor := NewHeadMonitor(logger, epochPollInterval, cl, &loggingCallback{logger}) + + // TODO(optimism#11023): Load the starting block from log db + startingHead := eth.L1BlockRef{} + + fetchReceipts := newLogFetcher(cl, &loggingReceiptProcessor{logger}) + unsafeBlockProcessor := NewChainProcessor(logger, cl, startingHead, fetchReceipts) + + unsafeProcessors := []HeadProcessor{unsafeBlockProcessor} + callback := newHeadUpdateProcessor(logger, unsafeProcessors, nil, nil) + headMonitor := NewHeadMonitor(logger, epochPollInterval, cl, callback) + return &ChainMonitor{ + log: logger, headMonitor: headMonitor, }, nil } func (c *ChainMonitor) Start() error { + c.log.Info("Started monitoring chain") return c.headMonitor.Start() } @@ -63,21 +76,13 @@ func (c *ChainMonitor) Stop() error { return c.headMonitor.Stop() } -// loggingCallback is a temporary implementation of the head monitor callback that just logs the events. -type loggingCallback struct { +type loggingReceiptProcessor struct { log log.Logger } -func (n *loggingCallback) OnNewUnsafeHead(_ context.Context, block eth.L1BlockRef) { - n.log.Info("New unsafe head", "block", block) -} - -func (n *loggingCallback) OnNewSafeHead(_ context.Context, block eth.L1BlockRef) { - n.log.Info("New safe head", "block", block) -} - -func (n *loggingCallback) OnNewFinalizedHead(_ context.Context, block eth.L1BlockRef) { - n.log.Info("New finalized head", "block", block) +func (n *loggingReceiptProcessor) ProcessLogs(_ context.Context, block eth.L1BlockRef, rcpts types.Receipts) error { + n.log.Info("Process unsafe block", "block", block, "rcpts", len(rcpts)) + return nil } func newClient(ctx context.Context, logger log.Logger, m caching.Metrics, rpc string, rpcClient *rpc.Client, pollRate time.Duration, trustRPC bool, kind sources.RPCProviderKind) (*sources.L1Client, error) { diff --git a/op-supervisor/supervisor/backend/source/chain_processor.go b/op-supervisor/supervisor/backend/source/chain_processor.go new file mode 100644 index 000000000000..656137bc5be9 --- /dev/null +++ b/op-supervisor/supervisor/backend/source/chain_processor.go @@ -0,0 +1,65 @@ +package source + +import ( + "context" + + "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/ethereum/go-ethereum/log" +) + +type BlockByNumberSource interface { + L1BlockRefByNumber(ctx context.Context, number uint64) (eth.L1BlockRef, error) +} + +type BlockProcessor interface { + ProcessBlock(ctx context.Context, block eth.L1BlockRef) error +} + +type BlockProcessorFn func(ctx context.Context, block eth.L1BlockRef) error + +func (fn BlockProcessorFn) ProcessBlock(ctx context.Context, block eth.L1BlockRef) error { + return fn(ctx, block) +} + +// ChainProcessor is a HeadProcessor that fills in any skipped blocks between head update events. +// It ensures that, absent reorgs, every block in the chain is processed even if some head advancements are skipped. +type ChainProcessor struct { + log log.Logger + client BlockByNumberSource + lastBlock eth.L1BlockRef + processor BlockProcessor +} + +func NewChainProcessor(log log.Logger, client BlockByNumberSource, startingHead eth.L1BlockRef, processor BlockProcessor) *ChainProcessor { + return &ChainProcessor{ + log: log, + client: client, + lastBlock: startingHead, + processor: processor, + } +} + +func (s *ChainProcessor) OnNewHead(ctx context.Context, head eth.L1BlockRef) { + if head.Number <= s.lastBlock.Number { + return + } + for s.lastBlock.Number+1 < head.Number { + blockNum := s.lastBlock.Number + 1 + nextBlock, err := s.client.L1BlockRefByNumber(ctx, blockNum) + if err != nil { + s.log.Error("Failed to fetch block info", "number", blockNum, "err", err) + return // Don't update the last processed block so we will retry fetching this block on next head update + } + if err := s.processor.ProcessBlock(ctx, nextBlock); err != nil { + s.log.Error("Failed to process block", "block", nextBlock, "err", err) + return // Don't update the last processed block so we will retry on next update + } + s.lastBlock = nextBlock + } + + if err := s.processor.ProcessBlock(ctx, head); err != nil { + s.log.Error("Failed to process block", "block", head, "err", err) + return // Don't update the last processed block so we will retry on next update + } + s.lastBlock = head +} diff --git a/op-supervisor/supervisor/backend/source/chain_processor_test.go b/op-supervisor/supervisor/backend/source/chain_processor_test.go new file mode 100644 index 000000000000..35c3f510f7ee --- /dev/null +++ b/op-supervisor/supervisor/backend/source/chain_processor_test.go @@ -0,0 +1,149 @@ +package source + +import ( + "context" + "errors" + "testing" + + "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/ethereum-optimism/optimism/op-service/testlog" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" + "github.com/stretchr/testify/require" +) + +func TestUnsafeBlocksStage(t *testing.T) { + t.Run("IgnoreEventsAtOrPriorToStartingHead", func(t *testing.T) { + ctx := context.Background() + logger := testlog.Logger(t, log.LvlInfo) + client := &stubBlockByNumberSource{} + processor := &stubBlockProcessor{} + stage := NewChainProcessor(logger, client, eth.L1BlockRef{Number: 100}, processor) + stage.OnNewHead(ctx, eth.L1BlockRef{Number: 100}) + stage.OnNewHead(ctx, eth.L1BlockRef{Number: 99}) + + require.Empty(t, processor.processed) + require.Zero(t, client.calls) + }) + + t.Run("OutputNewHeadsWithNoMissedBlocks", func(t *testing.T) { + ctx := context.Background() + logger := testlog.Logger(t, log.LvlInfo) + client := &stubBlockByNumberSource{} + block0 := eth.L1BlockRef{Number: 100} + block1 := eth.L1BlockRef{Number: 101} + block2 := eth.L1BlockRef{Number: 102} + block3 := eth.L1BlockRef{Number: 103} + processor := &stubBlockProcessor{} + stage := NewChainProcessor(logger, client, block0, processor) + stage.OnNewHead(ctx, block1) + require.Equal(t, []eth.L1BlockRef{block1}, processor.processed) + stage.OnNewHead(ctx, block2) + require.Equal(t, []eth.L1BlockRef{block1, block2}, processor.processed) + stage.OnNewHead(ctx, block3) + require.Equal(t, []eth.L1BlockRef{block1, block2, block3}, processor.processed) + + require.Zero(t, client.calls, "should not need to request block info") + }) + + t.Run("IgnoreEventsAtOrPriorToPreviousHead", func(t *testing.T) { + ctx := context.Background() + logger := testlog.Logger(t, log.LvlInfo) + client := &stubBlockByNumberSource{} + block0 := eth.L1BlockRef{Number: 100} + block1 := eth.L1BlockRef{Number: 101} + processor := &stubBlockProcessor{} + stage := NewChainProcessor(logger, client, block0, processor) + stage.OnNewHead(ctx, block1) + require.NotEmpty(t, processor.processed) + require.Equal(t, []eth.L1BlockRef{block1}, processor.processed) + + stage.OnNewHead(ctx, block0) + stage.OnNewHead(ctx, block1) + require.Equal(t, []eth.L1BlockRef{block1}, processor.processed) + + require.Zero(t, client.calls, "should not need to request block info") + }) + + t.Run("OutputSkippedBlocks", func(t *testing.T) { + ctx := context.Background() + logger := testlog.Logger(t, log.LvlInfo) + client := &stubBlockByNumberSource{} + block0 := eth.L1BlockRef{Number: 100} + block3 := eth.L1BlockRef{Number: 103} + processor := &stubBlockProcessor{} + stage := NewChainProcessor(logger, client, block0, processor) + + stage.OnNewHead(ctx, block3) + require.Equal(t, []eth.L1BlockRef{makeBlockRef(101), makeBlockRef(102), block3}, processor.processed) + + require.Equal(t, 2, client.calls, "should only request the two missing blocks") + }) + + t.Run("DoNotUpdateLastBlockOnFetchError", func(t *testing.T) { + ctx := context.Background() + logger := testlog.Logger(t, log.LvlInfo) + client := &stubBlockByNumberSource{err: errors.New("boom")} + block0 := eth.L1BlockRef{Number: 100} + block3 := eth.L1BlockRef{Number: 103} + processor := &stubBlockProcessor{} + stage := NewChainProcessor(logger, client, block0, processor) + + stage.OnNewHead(ctx, block3) + require.Empty(t, processor.processed, "should not update any blocks because backfill failed") + + client.err = nil + stage.OnNewHead(ctx, block3) + require.Equal(t, []eth.L1BlockRef{makeBlockRef(101), makeBlockRef(102), block3}, processor.processed) + }) + + t.Run("DoNotUpdateLastBlockOnProcessorError", func(t *testing.T) { + ctx := context.Background() + logger := testlog.Logger(t, log.LvlInfo) + client := &stubBlockByNumberSource{} + block0 := eth.L1BlockRef{Number: 100} + block3 := eth.L1BlockRef{Number: 103} + processor := &stubBlockProcessor{err: errors.New("boom")} + stage := NewChainProcessor(logger, client, block0, processor) + + stage.OnNewHead(ctx, block3) + require.Equal(t, []eth.L1BlockRef{makeBlockRef(101)}, processor.processed, "Attempted to process block 101") + + processor.err = nil + stage.OnNewHead(ctx, block3) + // Attempts to process block 101 again, then carries on + require.Equal(t, []eth.L1BlockRef{makeBlockRef(101), makeBlockRef(101), makeBlockRef(102), block3}, processor.processed) + }) +} + +type stubBlockByNumberSource struct { + calls int + err error +} + +func (s *stubBlockByNumberSource) L1BlockRefByNumber(_ context.Context, number uint64) (eth.L1BlockRef, error) { + s.calls++ + if s.err != nil { + return eth.L1BlockRef{}, s.err + } + return makeBlockRef(number), nil +} + +type stubBlockProcessor struct { + processed []eth.L1BlockRef + err error +} + +func (s *stubBlockProcessor) ProcessBlock(_ context.Context, block eth.L1BlockRef) error { + s.processed = append(s.processed, block) + return s.err +} + +func makeBlockRef(number uint64) eth.L1BlockRef { + return eth.L1BlockRef{ + Number: number, + Hash: common.Hash{byte(number)}, + ParentHash: common.Hash{byte(number - 1)}, + Time: number * 1000, + } +} diff --git a/op-supervisor/supervisor/backend/source/fetch_logs.go b/op-supervisor/supervisor/backend/source/fetch_logs.go new file mode 100644 index 000000000000..880a9ddcda4d --- /dev/null +++ b/op-supervisor/supervisor/backend/source/fetch_logs.go @@ -0,0 +1,46 @@ +package source + +import ( + "context" + "fmt" + + "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" +) + +type LogSource interface { + FetchReceipts(ctx context.Context, blockHash common.Hash) (eth.BlockInfo, types.Receipts, error) +} + +type ReceiptProcessor interface { + ProcessLogs(ctx context.Context, block eth.L1BlockRef, rcpts types.Receipts) error +} + +type ReceiptProcessorFn func(ctx context.Context, block eth.L1BlockRef, rcpts types.Receipts) error + +func (r ReceiptProcessorFn) ProcessLogs(ctx context.Context, block eth.L1BlockRef, rcpts types.Receipts) error { + return r(ctx, block, rcpts) +} + +type logFetcher struct { + client LogSource + processor ReceiptProcessor +} + +func newLogFetcher(client LogSource, processor ReceiptProcessor) *logFetcher { + return &logFetcher{ + client: client, + processor: processor, + } +} + +var _ BlockProcessor = (*logFetcher)(nil) + +func (l *logFetcher) ProcessBlock(ctx context.Context, block eth.L1BlockRef) error { + _, rcpts, err := l.client.FetchReceipts(ctx, block.Hash) + if err != nil { + return fmt.Errorf("failed to fetch receipts for block %v: %w", block, err) + } + return l.processor.ProcessLogs(ctx, block, rcpts) +} diff --git a/op-supervisor/supervisor/backend/source/fetch_logs_test.go b/op-supervisor/supervisor/backend/source/fetch_logs_test.go new file mode 100644 index 000000000000..4e05f5530b72 --- /dev/null +++ b/op-supervisor/supervisor/backend/source/fetch_logs_test.go @@ -0,0 +1,77 @@ +package source + +import ( + "context" + "errors" + "testing" + + "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/stretchr/testify/require" +) + +func TestFetchLogs(t *testing.T) { + ctx := context.Background() + rcpts := types.Receipts{&types.Receipt{Type: 3}, &types.Receipt{Type: 4}} + + t.Run("Success", func(t *testing.T) { + client := &stubLogSource{ + rcpts: rcpts, + } + var processed []types.Receipts + processor := ReceiptProcessorFn(func(ctx context.Context, block eth.L1BlockRef, rcpts types.Receipts) error { + processed = append(processed, rcpts) + return nil + }) + fetcher := newLogFetcher(client, processor) + block := eth.L1BlockRef{Number: 11, Hash: common.Hash{0xaa}} + + err := fetcher.ProcessBlock(ctx, block) + require.NoError(t, err) + + require.Equal(t, []types.Receipts{rcpts}, processed) + }) + + t.Run("ReceiptFetcherError", func(t *testing.T) { + client := &stubLogSource{ + err: errors.New("boom"), + } + processor := ReceiptProcessorFn(func(ctx context.Context, block eth.L1BlockRef, rcpts types.Receipts) error { + t.Fatal("should not be called") + return nil + }) + fetcher := newLogFetcher(client, processor) + block := eth.L1BlockRef{Number: 11, Hash: common.Hash{0xaa}} + + err := fetcher.ProcessBlock(ctx, block) + require.ErrorIs(t, err, client.err) + }) + + t.Run("ProcessorError", func(t *testing.T) { + expectedErr := errors.New("boom") + client := &stubLogSource{ + rcpts: rcpts, + } + processor := ReceiptProcessorFn(func(ctx context.Context, block eth.L1BlockRef, rcpts types.Receipts) error { + return expectedErr + }) + fetcher := newLogFetcher(client, processor) + block := eth.L1BlockRef{Number: 11, Hash: common.Hash{0xaa}} + + err := fetcher.ProcessBlock(ctx, block) + require.ErrorIs(t, err, expectedErr) + }) +} + +type stubLogSource struct { + err error + rcpts types.Receipts +} + +func (s *stubLogSource) FetchReceipts(_ context.Context, _ common.Hash) (eth.BlockInfo, types.Receipts, error) { + if s.err != nil { + return nil, nil, s.err + } + return nil, s.rcpts, nil +} diff --git a/op-supervisor/supervisor/backend/source/heads.go b/op-supervisor/supervisor/backend/source/head_monitor.go similarity index 100% rename from op-supervisor/supervisor/backend/source/heads.go rename to op-supervisor/supervisor/backend/source/head_monitor.go diff --git a/op-supervisor/supervisor/backend/source/heads_test.go b/op-supervisor/supervisor/backend/source/head_monitor_test.go similarity index 100% rename from op-supervisor/supervisor/backend/source/heads_test.go rename to op-supervisor/supervisor/backend/source/head_monitor_test.go diff --git a/op-supervisor/supervisor/backend/source/head_processor.go b/op-supervisor/supervisor/backend/source/head_processor.go new file mode 100644 index 000000000000..ff97deadc543 --- /dev/null +++ b/op-supervisor/supervisor/backend/source/head_processor.go @@ -0,0 +1,55 @@ +package source + +import ( + "context" + + "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/ethereum/go-ethereum/log" +) + +type HeadProcessor interface { + OnNewHead(ctx context.Context, head eth.L1BlockRef) +} + +type HeadProcessorFn func(ctx context.Context, head eth.L1BlockRef) + +func (f HeadProcessorFn) OnNewHead(ctx context.Context, head eth.L1BlockRef) { + f(ctx, head) +} + +// headUpdateProcessor handles head update events and routes them to the appropriate handlers +type headUpdateProcessor struct { + log log.Logger + unsafeProcessors []HeadProcessor + safeProcessors []HeadProcessor + finalizedProcessors []HeadProcessor +} + +func newHeadUpdateProcessor(log log.Logger, unsafeProcessors []HeadProcessor, safeProcessors []HeadProcessor, finalizedProcessors []HeadProcessor) *headUpdateProcessor { + return &headUpdateProcessor{ + log: log, + unsafeProcessors: unsafeProcessors, + safeProcessors: safeProcessors, + finalizedProcessors: finalizedProcessors, + } +} + +func (n *headUpdateProcessor) OnNewUnsafeHead(ctx context.Context, block eth.L1BlockRef) { + n.log.Debug("New unsafe head", "block", block) + for _, processor := range n.unsafeProcessors { + processor.OnNewHead(ctx, block) + } +} + +func (n *headUpdateProcessor) OnNewSafeHead(ctx context.Context, block eth.L1BlockRef) { + n.log.Debug("New safe head", "block", block) + for _, processor := range n.safeProcessors { + processor.OnNewHead(ctx, block) + } +} +func (n *headUpdateProcessor) OnNewFinalizedHead(ctx context.Context, block eth.L1BlockRef) { + n.log.Debug("New finalized head", "block", block) + for _, processor := range n.finalizedProcessors { + processor.OnNewHead(ctx, block) + } +} diff --git a/op-supervisor/supervisor/backend/source/head_processor_test.go b/op-supervisor/supervisor/backend/source/head_processor_test.go new file mode 100644 index 000000000000..0ef375fe4524 --- /dev/null +++ b/op-supervisor/supervisor/backend/source/head_processor_test.go @@ -0,0 +1,56 @@ +package source + +import ( + "context" + "testing" + + "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/ethereum-optimism/optimism/op-service/testlog" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" + "github.com/stretchr/testify/require" +) + +func TestHeadUpdateProcessor(t *testing.T) { + t.Run("NotifyUnsafeHeadProcessors", func(t *testing.T) { + logger := testlog.Logger(t, log.LvlInfo) + processed := make([]eth.L1BlockRef, 3) + makeProcessor := func(idx int) HeadProcessor { + return HeadProcessorFn(func(_ context.Context, head eth.L1BlockRef) { + processed[idx] = head + }) + } + headUpdates := newHeadUpdateProcessor(logger, []HeadProcessor{makeProcessor(0), makeProcessor(1), makeProcessor(2)}, nil, nil) + block := eth.L1BlockRef{Number: 110, Hash: common.Hash{0xaa}} + headUpdates.OnNewUnsafeHead(context.Background(), block) + require.Equal(t, []eth.L1BlockRef{block, block, block}, processed) + }) + + t.Run("NotifySafeHeadProcessors", func(t *testing.T) { + logger := testlog.Logger(t, log.LvlInfo) + processed := make([]eth.L1BlockRef, 3) + makeProcessor := func(idx int) HeadProcessor { + return HeadProcessorFn(func(_ context.Context, head eth.L1BlockRef) { + processed[idx] = head + }) + } + headUpdates := newHeadUpdateProcessor(logger, nil, []HeadProcessor{makeProcessor(0), makeProcessor(1), makeProcessor(2)}, nil) + block := eth.L1BlockRef{Number: 110, Hash: common.Hash{0xaa}} + headUpdates.OnNewSafeHead(context.Background(), block) + require.Equal(t, []eth.L1BlockRef{block, block, block}, processed) + }) + + t.Run("NotifyFinalizedHeadProcessors", func(t *testing.T) { + logger := testlog.Logger(t, log.LvlInfo) + processed := make([]eth.L1BlockRef, 3) + makeProcessor := func(idx int) HeadProcessor { + return HeadProcessorFn(func(_ context.Context, head eth.L1BlockRef) { + processed[idx] = head + }) + } + headUpdates := newHeadUpdateProcessor(logger, nil, nil, []HeadProcessor{makeProcessor(0), makeProcessor(1), makeProcessor(2)}) + block := eth.L1BlockRef{Number: 110, Hash: common.Hash{0xaa}} + headUpdates.OnNewFinalizedHead(context.Background(), block) + require.Equal(t, []eth.L1BlockRef{block, block, block}, processed) + }) +} From fa0df45685d3a4983666cf3b7e73d7e5d12ed1c2 Mon Sep 17 00:00:00 2001 From: mbaxter Date: Fri, 28 Jun 2024 10:45:46 -0400 Subject: [PATCH 120/141] cannon: Add forge debug test (#11037) * cannon: Add forge debug test * cannon: Add assertion on the expected return value * cannon: Add more logging to MIPS tests * cannon: Only log step input on test failure --- cannon/mipsevm/evm_test.go | 53 ++++++++++++++----- cannon/mipsevm/fuzz_evm_test.go | 34 +++++++----- .../contracts-bedrock/test/cannon/MIPS.t.sol | 15 ++++++ 3 files changed, 75 insertions(+), 27 deletions(-) diff --git a/cannon/mipsevm/evm_test.go b/cannon/mipsevm/evm_test.go index edc6675f5581..cb6bfdac39da 100644 --- a/cannon/mipsevm/evm_test.go +++ b/cannon/mipsevm/evm_test.go @@ -6,6 +6,7 @@ import ( "errors" "fmt" "io" + "math" "math/big" "os" "path" @@ -40,17 +41,29 @@ func MarkdownTracer() vm.EVMLogger { return logger.NewMarkdownLogger(&logger.Config{}, os.Stdout) } +func logStepFailureAtCleanup(t *testing.T, mipsEvm *MIPSEVM) { + t.Cleanup(func() { + if t.Failed() { + // Note: For easier debugging of a failing step, see MIPS.t.sol#test_step_debug_succeeds() + t.Logf("Failed while executing step %d with input: %x", mipsEvm.lastStep, mipsEvm.lastStepInput) + } + }) +} + type MIPSEVM struct { env *vm.EVM evmState *state.StateDB addrs *Addresses localOracle PreimageOracle artifacts *Artifacts + // Track step execution for logging purposes + lastStep uint64 + lastStepInput []byte } func NewMIPSEVM(artifacts *Artifacts, addrs *Addresses) *MIPSEVM { env, evmState := NewEVMEnv(artifacts, addrs) - return &MIPSEVM{env, evmState, addrs, nil, artifacts} + return &MIPSEVM{env, evmState, addrs, nil, artifacts, math.MaxUint64, nil} } func (m *MIPSEVM) SetTracer(tracer vm.EVMLogger) { @@ -62,7 +75,9 @@ func (m *MIPSEVM) SetLocalOracle(oracle PreimageOracle) { } // Step is a pure function that computes the poststate from the VM state encoded in the StepWitness. -func (m *MIPSEVM) Step(t *testing.T, stepWitness *StepWitness) []byte { +func (m *MIPSEVM) Step(t *testing.T, stepWitness *StepWitness, step uint64) []byte { + m.lastStep = step + m.lastStepInput = nil sender := common.Address{0x13, 0x37} startingGas := uint64(30_000_000) @@ -78,6 +93,7 @@ func (m *MIPSEVM) Step(t *testing.T, stepWitness *StepWitness) []byte { } input := encodeStepInput(t, stepWitness, LocalContext{}, m.artifacts.MIPS) + m.lastStepInput = input ret, leftOverGas, err := m.env.Call(vm.AccountRef(sender), m.addrs.MIPS, input, startingGas, common.U2560) require.NoError(t, err, "evm should not fail") require.Len(t, ret, 32, "expecting 32-byte state hash") @@ -92,7 +108,7 @@ func (m *MIPSEVM) Step(t *testing.T, stepWitness *StepWitness) []byte { require.Equal(t, stateHash, postHash, "logged state must be accurate") m.env.StateDB.RevertToSnapshot(snap) - t.Logf("EVM step took %d gas, and returned stateHash %s", startingGas-leftOverGas, postHash) + t.Logf("EVM step %d took %d gas, and returned stateHash %s", step, startingGas-leftOverGas, postHash) return evmPost } @@ -168,6 +184,7 @@ func TestEVM(t *testing.T) { evm := NewMIPSEVM(contracts, addrs) evm.SetTracer(tracer) evm.SetLocalOracle(oracle) + logStepFailureAtCleanup(t, evm) fn := path.Join("open_mips_tests/test/bin", f.Name()) programMem, err := os.ReadFile(fn) @@ -182,6 +199,7 @@ func TestEVM(t *testing.T) { goState := NewInstrumentedState(state, oracle, os.Stdout, os.Stderr) for i := 0; i < 1000; i++ { + curStep := goState.state.Step if goState.state.Cpu.PC == endAddr { break } @@ -193,7 +211,7 @@ func TestEVM(t *testing.T) { stepWitness, err := goState.Step(true) require.NoError(t, err) - evmPost := evm.Step(t, stepWitness) + evmPost := evm.Step(t, stepWitness, curStep) // verify the post-state matches. // TODO: maybe more readable to decode the evmPost state, and do attribute-wise comparison. goPost, _ := goState.state.EncodeWitness() @@ -235,6 +253,7 @@ func TestEVMSingleStep(t *testing.T) { t.Run(tt.name, func(t *testing.T) { state := &State{Cpu: CpuScalars{PC: tt.pc, NextPC: tt.nextPC}, Memory: NewMemory()} state.Memory.SetMemory(tt.pc, tt.insn) + curStep := state.Step us := NewInstrumentedState(state, nil, os.Stdout, os.Stderr) stepWitness, err := us.Step(true) @@ -242,7 +261,9 @@ func TestEVMSingleStep(t *testing.T) { evm := NewMIPSEVM(contracts, addrs) evm.SetTracer(tracer) - evmPost := evm.Step(t, stepWitness) + logStepFailureAtCleanup(t, evm) + + evmPost := evm.Step(t, stepWitness, curStep) goPost, _ := us.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") @@ -412,6 +433,7 @@ func TestEVMSysWriteHint(t *testing.T) { err := state.Memory.SetMemoryRange(uint32(tt.memOffset), bytes.NewReader(tt.hintData)) require.NoError(t, err) state.Memory.SetMemory(0, insn) + curStep := state.Step us := NewInstrumentedState(state, &oracle, os.Stdout, os.Stderr) stepWitness, err := us.Step(true) @@ -420,7 +442,9 @@ func TestEVMSysWriteHint(t *testing.T) { evm := NewMIPSEVM(contracts, addrs) evm.SetTracer(tracer) - evmPost := evm.Step(t, stepWitness) + logStepFailureAtCleanup(t, evm) + + evmPost := evm.Step(t, stepWitness, curStep) goPost, _ := us.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") @@ -478,6 +502,9 @@ func TestEVMFault(t *testing.T) { func TestHelloEVM(t *testing.T) { contracts, addrs := testContractsSetup(t) var tracer vm.EVMLogger // no-tracer by default, but see MarkdownTracer + evm := NewMIPSEVM(contracts, addrs) + evm.SetTracer(tracer) + logStepFailureAtCleanup(t, evm) elfProgram, err := elf.Open("../example/bin/hello.elf") require.NoError(t, err, "open ELF file") @@ -494,6 +521,7 @@ func TestHelloEVM(t *testing.T) { start := time.Now() for i := 0; i < 400_000; i++ { + curStep := goState.state.Step if goState.state.Exited { break } @@ -502,12 +530,9 @@ func TestHelloEVM(t *testing.T) { t.Logf("step: %4d pc: 0x%08x insn: 0x%08x", state.Step, state.Cpu.PC, insn) } - evm := NewMIPSEVM(contracts, addrs) - evm.SetTracer(tracer) - stepWitness, err := goState.Step(true) require.NoError(t, err) - evmPost := evm.Step(t, stepWitness) + evmPost := evm.Step(t, stepWitness, curStep) // verify the post-state matches. // TODO: maybe more readable to decode the evmPost state, and do attribute-wise comparison. goPost, _ := goState.state.EncodeWitness() @@ -528,6 +553,9 @@ func TestHelloEVM(t *testing.T) { func TestClaimEVM(t *testing.T) { contracts, addrs := testContractsSetup(t) var tracer vm.EVMLogger // no-tracer by default, but see MarkdownTracer + evm := NewMIPSEVM(contracts, addrs) + evm.SetTracer(tracer) + logStepFailureAtCleanup(t, evm) elfProgram, err := elf.Open("../example/bin/claim.elf") require.NoError(t, err, "open ELF file") @@ -545,6 +573,7 @@ func TestClaimEVM(t *testing.T) { goState := NewInstrumentedState(state, oracle, io.MultiWriter(&stdOutBuf, os.Stdout), io.MultiWriter(&stdErrBuf, os.Stderr)) for i := 0; i < 2000_000; i++ { + curStep := goState.state.Step if goState.state.Exited { break } @@ -557,9 +586,7 @@ func TestClaimEVM(t *testing.T) { stepWitness, err := goState.Step(true) require.NoError(t, err) - evm := NewMIPSEVM(contracts, addrs) - evm.SetTracer(tracer) - evmPost := evm.Step(t, stepWitness) + evmPost := evm.Step(t, stepWitness, curStep) goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), diff --git a/cannon/mipsevm/fuzz_evm_test.go b/cannon/mipsevm/fuzz_evm_test.go index 06b77a10247f..dd87167af76b 100644 --- a/cannon/mipsevm/fuzz_evm_test.go +++ b/cannon/mipsevm/fuzz_evm_test.go @@ -60,7 +60,7 @@ func FuzzStateSyscallBrk(f *testing.F) { require.Equal(t, preimageOffset, state.PreimageOffset) evm := NewMIPSEVM(contracts, addrs) - evmPost := evm.Step(t, stepWitness) + evmPost := evm.Step(t, stepWitness, step) goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") @@ -111,7 +111,7 @@ func FuzzStateSyscallClone(f *testing.F) { require.Equal(t, preimageOffset, state.PreimageOffset) evm := NewMIPSEVM(contracts, addrs) - evmPost := evm.Step(t, stepWitness) + evmPost := evm.Step(t, stepWitness, step) goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") @@ -120,6 +120,7 @@ func FuzzStateSyscallClone(f *testing.F) { func FuzzStateSyscallMmap(f *testing.F) { contracts, addrs := testContractsSetup(f) + step := uint64(0) f.Fuzz(func(t *testing.T, addr uint32, siz uint32, heap uint32) { state := &State{ Cpu: CpuScalars{ @@ -133,7 +134,7 @@ func FuzzStateSyscallMmap(f *testing.F) { Exited: false, Memory: NewMemory(), Registers: [32]uint32{2: sysMmap, 4: addr, 5: siz}, - Step: 0, + Step: step, PreimageOffset: 0, } state.Memory.SetMemory(0, syscallInsn) @@ -172,7 +173,7 @@ func FuzzStateSyscallMmap(f *testing.F) { } evm := NewMIPSEVM(contracts, addrs) - evmPost := evm.Step(t, stepWitness) + evmPost := evm.Step(t, stepWitness, step) goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") @@ -222,7 +223,7 @@ func FuzzStateSyscallExitGroup(f *testing.F) { require.Equal(t, uint32(0), state.PreimageOffset) evm := NewMIPSEVM(contracts, addrs) - evmPost := evm.Step(t, stepWitness) + evmPost := evm.Step(t, stepWitness, step) goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") @@ -231,6 +232,7 @@ func FuzzStateSyscallExitGroup(f *testing.F) { func FuzzStateSyscallFcntl(f *testing.F) { contracts, addrs := testContractsSetup(f) + step := uint64(0) f.Fuzz(func(t *testing.T, fd uint32, cmd uint32) { state := &State{ Cpu: CpuScalars{ @@ -244,7 +246,7 @@ func FuzzStateSyscallFcntl(f *testing.F) { Exited: false, Memory: NewMemory(), Registers: [32]uint32{2: sysFcntl, 4: fd, 5: cmd}, - Step: 0, + Step: step, PreimageOffset: 0, } state.Memory.SetMemory(0, syscallInsn) @@ -287,7 +289,7 @@ func FuzzStateSyscallFcntl(f *testing.F) { } evm := NewMIPSEVM(contracts, addrs) - evmPost := evm.Step(t, stepWitness) + evmPost := evm.Step(t, stepWitness, step) goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") @@ -296,6 +298,7 @@ func FuzzStateSyscallFcntl(f *testing.F) { func FuzzStateHintRead(f *testing.F) { contracts, addrs := testContractsSetup(f) + step := uint64(0) f.Fuzz(func(t *testing.T, addr uint32, count uint32) { preimageData := []byte("hello world") state := &State{ @@ -310,7 +313,7 @@ func FuzzStateHintRead(f *testing.F) { Exited: false, Memory: NewMemory(), Registers: [32]uint32{2: sysRead, 4: fdHintRead, 5: addr, 6: count}, - Step: 0, + Step: step, PreimageKey: preimage.Keccak256Key(crypto.Keccak256Hash(preimageData)).PreimageKey(), PreimageOffset: 0, } @@ -339,7 +342,7 @@ func FuzzStateHintRead(f *testing.F) { require.Equal(t, expectedRegisters, state.Registers) evm := NewMIPSEVM(contracts, addrs) - evmPost := evm.Step(t, stepWitness) + evmPost := evm.Step(t, stepWitness, step) goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") @@ -348,6 +351,7 @@ func FuzzStateHintRead(f *testing.F) { func FuzzStatePreimageRead(f *testing.F) { contracts, addrs := testContractsSetup(f) + step := uint64(0) f.Fuzz(func(t *testing.T, addr uint32, count uint32, preimageOffset uint32) { preimageData := []byte("hello world") if preimageOffset >= uint32(len(preimageData)) { @@ -365,7 +369,7 @@ func FuzzStatePreimageRead(f *testing.F) { Exited: false, Memory: NewMemory(), Registers: [32]uint32{2: sysRead, 4: fdPreimageRead, 5: addr, 6: count}, - Step: 0, + Step: step, PreimageKey: preimage.Keccak256Key(crypto.Keccak256Hash(preimageData)).PreimageKey(), PreimageOffset: preimageOffset, } @@ -405,7 +409,7 @@ func FuzzStatePreimageRead(f *testing.F) { require.Equal(t, preStatePreimageKey, state.PreimageKey) evm := NewMIPSEVM(contracts, addrs) - evmPost := evm.Step(t, stepWitness) + evmPost := evm.Step(t, stepWitness, step) goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") @@ -414,6 +418,7 @@ func FuzzStatePreimageRead(f *testing.F) { func FuzzStateHintWrite(f *testing.F) { contracts, addrs := testContractsSetup(f) + step := uint64(0) f.Fuzz(func(t *testing.T, addr uint32, count uint32, randSeed int64) { preimageData := []byte("hello world") state := &State{ @@ -428,7 +433,7 @@ func FuzzStateHintWrite(f *testing.F) { Exited: false, Memory: NewMemory(), Registers: [32]uint32{2: sysWrite, 4: fdHintWrite, 5: addr, 6: count}, - Step: 0, + Step: step, PreimageKey: preimage.Keccak256Key(crypto.Keccak256Hash(preimageData)).PreimageKey(), PreimageOffset: 0, LastHint: nil, @@ -465,7 +470,7 @@ func FuzzStateHintWrite(f *testing.F) { require.Equal(t, expectedRegisters, state.Registers) evm := NewMIPSEVM(contracts, addrs) - evmPost := evm.Step(t, stepWitness) + evmPost := evm.Step(t, stepWitness, step) goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") @@ -474,6 +479,7 @@ func FuzzStateHintWrite(f *testing.F) { func FuzzStatePreimageWrite(f *testing.F) { contracts, addrs := testContractsSetup(f) + step := uint64(0) f.Fuzz(func(t *testing.T, addr uint32, count uint32) { preimageData := []byte("hello world") state := &State{ @@ -520,7 +526,7 @@ func FuzzStatePreimageWrite(f *testing.F) { require.Equal(t, expectedRegisters, state.Registers) evm := NewMIPSEVM(contracts, addrs) - evmPost := evm.Step(t, stepWitness) + evmPost := evm.Step(t, stepWitness, step) goPost, _ := goState.state.EncodeWitness() require.Equal(t, hexutil.Bytes(goPost).String(), hexutil.Bytes(evmPost).String(), "mipsevm produced different state than EVM") diff --git a/packages/contracts-bedrock/test/cannon/MIPS.t.sol b/packages/contracts-bedrock/test/cannon/MIPS.t.sol index 3f843f3e0d02..38928f9a879a 100644 --- a/packages/contracts-bedrock/test/cannon/MIPS.t.sol +++ b/packages/contracts-bedrock/test/cannon/MIPS.t.sol @@ -19,6 +19,21 @@ contract MIPS_Test is CommonTest { vm.label(address(mips), "MIPS"); } + /// @notice Used to debug step() behavior given a specific input. + /// This is useful to more easily debug non-forge tests. + /// For example, in cannon/mipsevm/evm_test.go step input can be pulled here: + /// https://github.com/ethereum-optimism/optimism/blob/1f64dd6db5561f3bb76ed1d1ffdaff0cde9b7c4b/cannon/mipsevm/evm_test.go#L80-L80 + function test_step_debug_succeeds() external { + bytes memory input = + hex"e14ced3200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e29d9267b33909f55f0cac54cca6427fc17fe0b9efe6c34350ca86605145633fe60000000000000000000000000000000000000000000000000000000000000000000000000008a82c0008a8300000000000000000050000000000000000000000000a000000000008a82c0000000000000000000000007fffd00400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007008fbc00601000ffbd00000000afbffffc27bdfffcafbf000027bdfff4afa400048fb000408fb100448fb200488fb3004c8fb400508fb600548fb800588fb9005caf0ea4ff7928d10f76bc70a73c867e2c9232b35112b060285aedb7b33533e5253d8c8392c902f20c8314d10a807c7bc5de8126736a03c2bdb47667bbfa710375ac2064c969079ba2acbb688f31cd2bdd4cbe18111a8e733c487884d541f1366231e3c23a71546c755f18517db871301ffe7b08676258520720f4cb2fcc23642ddb778fcfd0cfc38a190d5b8bf0bea4e1ce7d2f35d6a068b94cf6d925e0a024d571f505296c77e19f2ea496d88d90cd342189bdedb389ac959bb9b82db9e324d150eb233dbfa0746469950cec5d4f6360fa49f835403946268bf6fa7472bc4a1320e6a7387a6272dcbf4f8280ff680ccedd4b79f02c78eaef3218c1e78f9e266b3b1c7c1c24e7d04470d63c4e1df858f2e7bf9c7cdad07ed51bc383f80a4d3ded70f2c60642ed3c85483b60ea68b5ed606b2f84d90ac876c01c4d01ba58c431390bd20a29a10d408854c7f62a262860ebd3e4af402fa2dcc0662dfa36fd3e85cbab4da3e3d0907392666337a62e5a663c04bc0a3e16d559f825ba2d40a1c81f4d3844b6cfb2e084a80eb9338fad62b25cf83f4738b5c4df1a0ef019e8ebb9d03d8c7e091f91c853d19da08da2245b01b806c73dc0b200672d04e78982eaed71ea20929c6c472715d5c74a31176a5663348a3c02c89ff5edb7cf3041110e8fe44e2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd95a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3774df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef6834d8ef8faaf96b7b45235297538a266eb882b8b5680f621aab3417d43cdc2eb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d3021ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a193440eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968a60155a81a637d8581c4d275380f7dd05bd2dd27ac3fb7ca905e7aec4e0a1cd99867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756afcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf8923490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99cc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8beccda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d22733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd95a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3774df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619eff0eb509051ae684fe17ee4373a3c82e88f970dab89cc0915d21b63cb96415cc2b8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0"; + (bool success, bytes memory retVal) = address(mips).call(input); + bytes memory expectedRetVal = hex"03611b9f88f952fea10b9330e85fbe7b8ddd0d457d3f31e647434a5330789212"; + + assertTrue(success); + assertEq(retVal.length, 32, "Expect a bytes32 hash of the post-state to be returned"); + assertEq(retVal, expectedRetVal); + } + function test_step_abi_succeeds() external { uint32[32] memory registers; registers[16] = 0xbfff0000; From a94e75310c651a810559fbe77220980673349bf3 Mon Sep 17 00:00:00 2001 From: I love OP Date: Fri, 28 Jun 2024 13:18:31 -0300 Subject: [PATCH 121/141] delete dead code makefile (#11050) Co-authored-by: Odysseas --- op-chain-ops/Makefile | 3 --- 1 file changed, 3 deletions(-) diff --git a/op-chain-ops/Makefile b/op-chain-ops/Makefile index 0b9a22b1f987..1f119a95f62d 100644 --- a/op-chain-ops/Makefile +++ b/op-chain-ops/Makefile @@ -9,9 +9,6 @@ ecotone-scalar: receipt-reference-builder: go build -o ./bin/receipt-reference-builder ./cmd/receipt-reference-builder/*.go -op-upgrade: - go build -o ./bin/op-upgrade ./cmd/op-upgrade/main.go - test: go test ./... From d8f85c8b63bf1e0d1fc68d16b5b525b9cd529e4d Mon Sep 17 00:00:00 2001 From: zhiqiangxu <652732310@qq.com> Date: Sat, 29 Jun 2024 00:44:39 +0800 Subject: [PATCH 122/141] disallow specify both --p2p.static and --p2p.disable (#10963) --- op-node/p2p/config.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/op-node/p2p/config.go b/op-node/p2p/config.go index 326f7e66077e..df03fe532e04 100644 --- a/op-node/p2p/config.go +++ b/op-node/p2p/config.go @@ -175,6 +175,9 @@ const maxMeshParam = 1000 func (conf *Config) Check() error { if conf.DisableP2P { + if len(conf.StaticPeers) > 0 { + return errors.New("both --p2p.static and --p2p.disable are specified") + } return nil } if conf.Store == nil { From 6125faed48edc46d6d32ebaae67f2206979f7a5b Mon Sep 17 00:00:00 2001 From: Maurelian Date: Fri, 28 Jun 2024 16:06:36 -0400 Subject: [PATCH 123/141] Add README to Security Reviews dir (#11033) * --wip-- * docs: Add list of security review including sherlock links --- docs/security-reviews/README.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 docs/security-reviews/README.md diff --git a/docs/security-reviews/README.md b/docs/security-reviews/README.md new file mode 100644 index 000000000000..99bde07a77b1 --- /dev/null +++ b/docs/security-reviews/README.md @@ -0,0 +1,25 @@ +# Security Reviews + +The following is a list of past security reviews. + +Each review is focused on a different part of the codebase, and at a different point in time. +Please see the report for the specific details. + +| Date | Reviewer | Focus | Report Link | +| ------- | ------------------- | ------------------------- | ---------------------------------------------------------------------------------------------- | +| 2020-10 | Trail of Bits | Rollup | [2020_10-TrailOfBits.pdf](./2020_10-Rollup-TrailOfBits.pdf) | +| 2020-11 | Dapphub | ECDSA Wallet | [2020_11-Dapphub-ECDSA_Wallet.pdf](./2020_11-Dapphub-ECDSA_Wallet.pdf) | +| 2021-03 | OpenZeppelin | OVM and Rollup | [2021_03-OVM_and_Rollup-OpenZeppelin.pdf](./2021_03-OVM_and_Rollup-OpenZeppelin.pdf) | +| 2021-03 | ConsenSys Diligence | Safety Checker | [2021_03-SafetyChecker-ConsenSysDiligence.pdf](./2021_03-SafetyChecker-ConsenSysDiligence.pdf) | +| 2022-05 | Zeppelin | Bedrock Contracts | [2022_05-Bedrock_Contracts-Zeppelin.pdf](./2022_05-Bedrock_Contracts-Zeppelin.pdf) | +| 2022-05 | Trail of Bits | OpNode | [2022_05-OpNode-TrailOfBits.pdf](./2022_05-OpNode-TrailOfBits.pdf) | +| 2022-08 | Sigma Prime | Bedrock GoLang | [2022_08-Bedrock_GoLang-SigmaPrime.pdf](./2022_08-Bedrock_GoLang-SigmaPrime.pdf) | +| 2022-09 | Zeppelin | Bedrock and Periphery | [2022_09-Bedrock_and_Periphery-Zeppelin.pdf](./2022_09-Bedrock_and_Periphery-Zeppelin.pdf) | +| 2022-10 | Spearbit | Drippie | [2022_10-Drippie-Spearbit.pdf](./2022_10-Drippie-Spearbit.pdf) | +| 2022-11 | Trail of Bits | Invariant Testing | [2022_11-Invariant_Testing-TrailOfBits.pdf](./2022_11-Invariant_Testing-TrailOfBits.pdf) | +| 2023-01 | Trail of Bits | Bedrock Updates | [2023_01-Bedrock_Updates-TrailOfBits.pdf](./2023_01-Bedrock_Updates-TrailOfBits.pdf) | +| 2023-01 | Sherlock | Bedrock | [Sherlock Bedrock Contest](https://audits.sherlock.xyz/contests/38) | +| 2023-03 | Sherlock | Bedrock Fixes | [Sherlock Bedrock Contest - Fix Review](https://audits.sherlock.xyz/contests/63) | +| 2023-12 | Trust | Superchain Config Upgrade | [2023_12_Trust_SuperchainConfigUpgrade.pdf](./2023_12_Trust_SuperchainConfigUpgrade.pdf) | +| 2024-02 | Cantina | MCP L1 | [2024_02-MCP_L1-Cantina.pdf](./2024_02-MCP_L1-Cantina.pdf) | +| 2024-03 | Sherlock | MCP L1 | [Sherlock Optimism Fault Proofs Contest](https://audits.sherlock.xyz/contests/205) | From 21ea079df3753994bb392ee9e3aa56ce5b7bcc45 Mon Sep 17 00:00:00 2001 From: protolambda Date: Fri, 28 Jun 2024 15:06:12 -0600 Subject: [PATCH 124/141] op-node: fix driver step hot loop, improve events and add utils (#11040) * op-node: fix driver step hot loop, improvement events and add utils * op-node: fix verifier event processing liveness * op-node: add events_rate_limited metric * op-node: bump events rate limits --- op-e2e/actions/l2_sequencer.go | 3 +- op-e2e/actions/l2_verifier.go | 30 ++++-- op-e2e/actions/plasma_test.go | 3 +- op-e2e/actions/sync_test.go | 30 ++---- op-node/metrics/metrics.go | 47 ++++++++ op-node/rollup/attributes/attributes.go | 7 +- op-node/rollup/clsync/clsync.go | 7 +- op-node/rollup/derive/deriver.go | 7 +- op-node/rollup/driver/driver.go | 28 ++++- op-node/rollup/driver/state.go | 14 +-- op-node/rollup/driver/steps.go | 20 +++- op-node/rollup/driver/steps_test.go | 8 +- op-node/rollup/engine/engine_controller.go | 5 +- op-node/rollup/engine/engine_reset.go | 7 +- op-node/rollup/engine/events.go | 9 +- op-node/rollup/event.go | 48 +++++++++ op-node/rollup/event/events.go | 75 +++++++++++++ op-node/rollup/{ => event}/events_test.go | 14 +-- op-node/rollup/event/limiter.go | 58 ++++++++++ op-node/rollup/event/limiter_test.go | 28 +++++ op-node/rollup/event/metrics.go | 15 +++ .../rollup/{synchronous.go => event/queue.go} | 36 ++++--- .../queue_test.go} | 16 +-- op-node/rollup/event/util.go | 19 ++++ op-node/rollup/event/util_test.go | 37 +++++++ op-node/rollup/events.go | 101 ------------------ op-node/rollup/finality/finalizer.go | 7 +- op-node/rollup/finality/plasma.go | 5 +- op-node/rollup/finality/plasma_test.go | 5 +- op-node/rollup/status/status.go | 3 +- op-program/client/driver/driver.go | 9 +- op-program/client/driver/driver_test.go | 18 ++-- op-program/client/driver/program.go | 5 +- op-service/testutils/mock_emitter.go | 17 ++- 34 files changed, 509 insertions(+), 232 deletions(-) create mode 100644 op-node/rollup/event.go create mode 100644 op-node/rollup/event/events.go rename op-node/rollup/{ => event}/events_test.go (77%) create mode 100644 op-node/rollup/event/limiter.go create mode 100644 op-node/rollup/event/limiter_test.go create mode 100644 op-node/rollup/event/metrics.go rename op-node/rollup/{synchronous.go => event/queue.go} (68%) rename op-node/rollup/{synchronous_test.go => event/queue_test.go} (83%) create mode 100644 op-node/rollup/event/util.go create mode 100644 op-node/rollup/event/util_test.go delete mode 100644 op-node/rollup/events.go diff --git a/op-e2e/actions/l2_sequencer.go b/op-e2e/actions/l2_sequencer.go index da4749f9d430..23993b557f15 100644 --- a/op-e2e/actions/l2_sequencer.go +++ b/op-e2e/actions/l2_sequencer.go @@ -16,6 +16,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/driver" "github.com/ethereum-optimism/optimism/op-node/rollup/engine" + "github.com/ethereum-optimism/optimism/op-node/rollup/event" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" "github.com/ethereum-optimism/optimism/op-service/eth" ) @@ -109,7 +110,7 @@ func (s *L2Sequencer) ActL2EndBlock(t Testing) { // This will ensure the sync-status and such reflect the latest changes. s.synchronousEvents.Emit(engine.TryUpdateEngineEvent{}) s.synchronousEvents.Emit(engine.ForkchoiceRequestEvent{}) - require.NoError(t, s.synchronousEvents.DrainUntil(func(ev rollup.Event) bool { + require.NoError(t, s.synchronousEvents.DrainUntil(func(ev event.Event) bool { x, ok := ev.(engine.ForkchoiceUpdateEvent) return ok && x.UnsafeL2Head == s.engine.UnsafeL2Head() }, false)) diff --git a/op-e2e/actions/l2_verifier.go b/op-e2e/actions/l2_verifier.go index 305c5e84b44a..cc57f27bda18 100644 --- a/op-e2e/actions/l2_verifier.go +++ b/op-e2e/actions/l2_verifier.go @@ -6,11 +6,13 @@ import ( "fmt" "io" + "github.com/stretchr/testify/require" + "golang.org/x/time/rate" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" gnode "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/rpc" - "github.com/stretchr/testify/require" "github.com/ethereum-optimism/optimism/op-node/node" "github.com/ethereum-optimism/optimism/op-node/rollup" @@ -19,6 +21,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/driver" "github.com/ethereum-optimism/optimism/op-node/rollup/engine" + "github.com/ethereum-optimism/optimism/op-node/rollup/event" "github.com/ethereum-optimism/optimism/op-node/rollup/finality" "github.com/ethereum-optimism/optimism/op-node/rollup/status" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" @@ -41,7 +44,7 @@ type L2Verifier struct { syncStatus driver.SyncStatusTracker - synchronousEvents *rollup.SynchronousEvents + synchronousEvents event.EmitterDrainer syncDeriver *driver.SyncDeriver @@ -88,8 +91,13 @@ func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc deri ctx, cancel := context.WithCancel(context.Background()) t.Cleanup(cancel) - rootDeriver := &rollup.SynchronousDerivers{} - synchronousEvents := rollup.NewSynchronousEvents(log, ctx, rootDeriver) + rootDeriver := &event.DeriverMux{} + var synchronousEvents event.EmitterDrainer + synchronousEvents = event.NewQueue(log, ctx, rootDeriver, event.NoopMetrics{}) + synchronousEvents = event.NewLimiterDrainer(ctx, synchronousEvents, rate.Limit(1000), 20, func() { + log.Warn("Hitting events rate-limit. An events code-path may be hot-looping.") + t.Fatal("Tests must not hot-loop events") + }) metrics := &testutils.TestDerivationMetrics{} ec := engine.NewEngineController(eng, log, metrics, cfg, syncCfg.SyncMode, synchronousEvents) @@ -148,7 +156,7 @@ func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc deri synchronousEvents: synchronousEvents, } - *rootDeriver = rollup.SynchronousDerivers{ + *rootDeriver = event.DeriverMux{ syncStatusTracker, syncDeriver, engineResetDeriver, @@ -275,7 +283,7 @@ func (s *L2Verifier) ActL1HeadSignal(t Testing) { head, err := s.l1.L1BlockRefByLabel(t.Ctx(), eth.Unsafe) require.NoError(t, err) s.synchronousEvents.Emit(status.L1UnsafeEvent{L1Unsafe: head}) - require.NoError(t, s.synchronousEvents.DrainUntil(func(ev rollup.Event) bool { + require.NoError(t, s.synchronousEvents.DrainUntil(func(ev event.Event) bool { x, ok := ev.(status.L1UnsafeEvent) return ok && x.L1Unsafe == head }, false)) @@ -286,7 +294,7 @@ func (s *L2Verifier) ActL1SafeSignal(t Testing) { safe, err := s.l1.L1BlockRefByLabel(t.Ctx(), eth.Safe) require.NoError(t, err) s.synchronousEvents.Emit(status.L1SafeEvent{L1Safe: safe}) - require.NoError(t, s.synchronousEvents.DrainUntil(func(ev rollup.Event) bool { + require.NoError(t, s.synchronousEvents.DrainUntil(func(ev event.Event) bool { x, ok := ev.(status.L1SafeEvent) return ok && x.L1Safe == safe }, false)) @@ -297,14 +305,14 @@ func (s *L2Verifier) ActL1FinalizedSignal(t Testing) { finalized, err := s.l1.L1BlockRefByLabel(t.Ctx(), eth.Finalized) require.NoError(t, err) s.synchronousEvents.Emit(finality.FinalizeL1Event{FinalizedL1: finalized}) - require.NoError(t, s.synchronousEvents.DrainUntil(func(ev rollup.Event) bool { + require.NoError(t, s.synchronousEvents.DrainUntil(func(ev event.Event) bool { x, ok := ev.(finality.FinalizeL1Event) return ok && x.FinalizedL1 == finalized }, false)) require.Equal(t, finalized, s.syncStatus.SyncStatus().FinalizedL1) } -func (s *L2Verifier) OnEvent(ev rollup.Event) { +func (s *L2Verifier) OnEvent(ev event.Event) { switch x := ev.(type) { case rollup.L1TemporaryErrorEvent: s.log.Warn("L1 temporary error", "err", x.Err) @@ -323,13 +331,13 @@ func (s *L2Verifier) OnEvent(ev rollup.Event) { } func (s *L2Verifier) ActL2EventsUntilPending(t Testing, num uint64) { - s.ActL2EventsUntil(t, func(ev rollup.Event) bool { + s.ActL2EventsUntil(t, func(ev event.Event) bool { x, ok := ev.(engine.PendingSafeUpdateEvent) return ok && x.PendingSafe.Number == num }, 1000, false) } -func (s *L2Verifier) ActL2EventsUntil(t Testing, fn func(ev rollup.Event) bool, max int, excl bool) { +func (s *L2Verifier) ActL2EventsUntil(t Testing, fn func(ev event.Event) bool, max int, excl bool) { t.Helper() if s.l2Building { t.InvalidAction("cannot derive new data while building L2 block") diff --git a/op-e2e/actions/plasma_test.go b/op-e2e/actions/plasma_test.go index d1a5606d24fb..928003dd2e6a 100644 --- a/op-e2e/actions/plasma_test.go +++ b/op-e2e/actions/plasma_test.go @@ -15,6 +15,7 @@ import ( "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" "github.com/ethereum-optimism/optimism/op-node/node/safedb" "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum-optimism/optimism/op-node/rollup/event" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" plasma "github.com/ethereum-optimism/optimism/op-plasma" "github.com/ethereum-optimism/optimism/op-plasma/bindings" @@ -500,7 +501,7 @@ func TestPlasma_SequencerStalledMultiChallenges(gt *testing.T) { // advance the pipeline until it errors out as it is still stuck // on deriving the first commitment - a.sequencer.ActL2EventsUntil(t, func(ev rollup.Event) bool { + a.sequencer.ActL2EventsUntil(t, func(ev event.Event) bool { x, ok := ev.(rollup.EngineTemporaryErrorEvent) if ok { require.ErrorContains(t, x.Err, "failed to fetch input data") diff --git a/op-e2e/actions/sync_test.go b/op-e2e/actions/sync_test.go index 51038b5f08c9..a634b9edd5eb 100644 --- a/op-e2e/actions/sync_test.go +++ b/op-e2e/actions/sync_test.go @@ -21,6 +21,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" engine2 "github.com/ethereum-optimism/optimism/op-node/rollup/engine" + "github.com/ethereum-optimism/optimism/op-node/rollup/event" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/sources" @@ -446,10 +447,7 @@ func TestBackupUnsafeReorgForkChoiceInputError(gt *testing.T) { // B3 is invalid block // NextAttributes is called - sequencer.ActL2EventsUntil(t, func(ev rollup.Event) bool { - _, ok := ev.(engine2.ProcessAttributesEvent) - return ok - }, 100, true) + sequencer.ActL2EventsUntil(t, event.Is[engine2.ProcessAttributesEvent], 100, true) // mock forkChoiceUpdate error while restoring previous unsafe chain using backupUnsafe. seqEng.ActL2RPCFail(t, eth.InputError{Inner: errors.New("mock L2 RPC error"), Code: eth.InvalidForkchoiceState}) @@ -582,20 +580,14 @@ func TestBackupUnsafeReorgForkChoiceNotInputError(gt *testing.T) { // B3 is invalid block // wait till attributes processing (excl.) before mocking errors - sequencer.ActL2EventsUntil(t, func(ev rollup.Event) bool { - _, ok := ev.(engine2.ProcessAttributesEvent) - return ok - }, 100, true) + sequencer.ActL2EventsUntil(t, event.Is[engine2.ProcessAttributesEvent], 100, true) serverErrCnt := 2 for i := 0; i < serverErrCnt; i++ { // mock forkChoiceUpdate failure while restoring previous unsafe chain using backupUnsafe. seqEng.ActL2RPCFail(t, engine.GenericServerError) // TryBackupUnsafeReorg is called - forkChoiceUpdate returns GenericServerError so retry - sequencer.ActL2EventsUntil(t, func(ev rollup.Event) bool { - _, ok := ev.(rollup.EngineTemporaryErrorEvent) - return ok - }, 100, false) + sequencer.ActL2EventsUntil(t, event.Is[rollup.EngineTemporaryErrorEvent], 100, false) // backupUnsafeHead not emptied yet require.Equal(t, targetUnsafeHeadHash, sequencer.L2BackupUnsafe().Hash) } @@ -981,11 +973,8 @@ func TestSpanBatchAtomicity_Consolidation(gt *testing.T) { verifier.l2PipelineIdle = false for !verifier.l2PipelineIdle { // wait for next pending block - verifier.ActL2EventsUntil(t, func(ev rollup.Event) bool { - _, pending := ev.(engine2.PendingSafeUpdateEvent) - _, idle := ev.(derive.DeriverIdleEvent) - return pending || idle - }, 1000, false) + verifier.ActL2EventsUntil(t, event.Any( + event.Is[engine2.PendingSafeUpdateEvent], event.Is[derive.DeriverIdleEvent]), 1000, false) if verifier.L2PendingSafe().Number < targetHeadNumber { // If the span batch is not fully processed, the safe head must not advance. require.Equal(t, verifier.L2Safe().Number, uint64(0)) @@ -1033,11 +1022,8 @@ func TestSpanBatchAtomicity_ForceAdvance(gt *testing.T) { verifier.l2PipelineIdle = false for !verifier.l2PipelineIdle { // wait for next pending block - verifier.ActL2EventsUntil(t, func(ev rollup.Event) bool { - _, pending := ev.(engine2.PendingSafeUpdateEvent) - _, idle := ev.(derive.DeriverIdleEvent) - return pending || idle - }, 1000, false) + verifier.ActL2EventsUntil(t, event.Any( + event.Is[engine2.PendingSafeUpdateEvent], event.Is[derive.DeriverIdleEvent]), 1000, false) if verifier.L2PendingSafe().Number < targetHeadNumber { // If the span batch is not fully processed, the safe head must not advance. require.Equal(t, verifier.L2Safe().Number, uint64(0)) diff --git a/op-node/metrics/metrics.go b/op-node/metrics/metrics.go index 321c811dabf8..ce9c06ab1aa5 100644 --- a/op-node/metrics/metrics.go +++ b/op-node/metrics/metrics.go @@ -39,6 +39,9 @@ type Metricer interface { RecordSequencingError() RecordPublishingError() RecordDerivationError() + RecordEmittedEvent(name string) + RecordProcessedEvent(name string) + RecordEventsRateLimited() RecordReceivedUnsafePayload(payload *eth.ExecutionPayloadEnvelope) RecordRef(layer string, name string, num uint64, timestamp uint64, h common.Hash) RecordL1Ref(name string, ref eth.L1BlockRef) @@ -92,6 +95,11 @@ type Metrics struct { SequencingErrors *metrics.Event PublishingErrors *metrics.Event + EmittedEvents *prometheus.CounterVec + ProcessedEvents *prometheus.CounterVec + + EventsRateLimited *metrics.Event + DerivedBatches metrics.EventVec P2PReqDurationSeconds *prometheus.HistogramVec @@ -195,6 +203,24 @@ func NewMetrics(procName string) *Metrics { SequencingErrors: metrics.NewEvent(factory, ns, "", "sequencing_errors", "sequencing errors"), PublishingErrors: metrics.NewEvent(factory, ns, "", "publishing_errors", "p2p publishing errors"), + EmittedEvents: factory.NewCounterVec( + prometheus.CounterOpts{ + Namespace: ns, + Subsystem: "events", + Name: "emitted", + Help: "number of emitted events", + }, []string{"event_type"}), + + ProcessedEvents: factory.NewCounterVec( + prometheus.CounterOpts{ + Namespace: ns, + Subsystem: "events", + Name: "processed", + Help: "number of processed events", + }, []string{"event_type"}), + + EventsRateLimited: metrics.NewEvent(factory, ns, "events", "rate_limited", "events rate limiter hits"), + DerivedBatches: metrics.NewEventVec(factory, ns, "", "derived_batches", "derived batches", []string{"type"}), SequencerInconsistentL1Origin: metrics.NewEvent(factory, ns, "", "sequencer_inconsistent_l1_origin", "events when the sequencer selects an inconsistent L1 origin"), @@ -441,6 +467,18 @@ func (m *Metrics) RecordPublishingError() { m.PublishingErrors.Record() } +func (m *Metrics) RecordEmittedEvent(name string) { + m.EmittedEvents.WithLabelValues(name).Inc() +} + +func (m *Metrics) RecordProcessedEvent(name string) { + m.ProcessedEvents.WithLabelValues(name).Inc() +} + +func (m *Metrics) RecordEventsRateLimited() { + m.EventsRateLimited.Record() +} + func (m *Metrics) RecordDerivationError() { m.DerivationErrors.Record() } @@ -642,6 +680,15 @@ func (n *noopMetricer) RecordPublishingError() { func (n *noopMetricer) RecordDerivationError() { } +func (n *noopMetricer) RecordEmittedEvent(name string) { +} + +func (n *noopMetricer) RecordProcessedEvent(name string) { +} + +func (n *noopMetricer) RecordEventsRateLimited() { +} + func (n *noopMetricer) RecordReceivedUnsafePayload(payload *eth.ExecutionPayloadEnvelope) { } diff --git a/op-node/rollup/attributes/attributes.go b/op-node/rollup/attributes/attributes.go index 99bd123598ac..116e3c4aba0d 100644 --- a/op-node/rollup/attributes/attributes.go +++ b/op-node/rollup/attributes/attributes.go @@ -13,6 +13,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/engine" + "github.com/ethereum-optimism/optimism/op-node/rollup/event" "github.com/ethereum-optimism/optimism/op-service/eth" ) @@ -31,12 +32,12 @@ type AttributesHandler struct { mu sync.Mutex - emitter rollup.EventEmitter + emitter event.Emitter attributes *derive.AttributesWithParent } -func NewAttributesHandler(log log.Logger, cfg *rollup.Config, ctx context.Context, l2 L2, emitter rollup.EventEmitter) *AttributesHandler { +func NewAttributesHandler(log log.Logger, cfg *rollup.Config, ctx context.Context, l2 L2, emitter event.Emitter) *AttributesHandler { return &AttributesHandler{ log: log, cfg: cfg, @@ -47,7 +48,7 @@ func NewAttributesHandler(log log.Logger, cfg *rollup.Config, ctx context.Contex } } -func (eq *AttributesHandler) OnEvent(ev rollup.Event) { +func (eq *AttributesHandler) OnEvent(ev event.Event) { // Events may be concurrent in the future. Prevent unsafe concurrent modifications to the attributes. eq.mu.Lock() defer eq.mu.Unlock() diff --git a/op-node/rollup/clsync/clsync.go b/op-node/rollup/clsync/clsync.go index faa4586105e3..214ab9e9d3c8 100644 --- a/op-node/rollup/clsync/clsync.go +++ b/op-node/rollup/clsync/clsync.go @@ -8,6 +8,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/engine" + "github.com/ethereum-optimism/optimism/op-node/rollup/event" "github.com/ethereum-optimism/optimism/op-service/eth" ) @@ -25,14 +26,14 @@ type CLSync struct { cfg *rollup.Config metrics Metrics - emitter rollup.EventEmitter + emitter event.Emitter mu sync.Mutex unsafePayloads *PayloadsQueue // queue of unsafe payloads, ordered by ascending block number, may have gaps and duplicates } -func NewCLSync(log log.Logger, cfg *rollup.Config, metrics Metrics, emitter rollup.EventEmitter) *CLSync { +func NewCLSync(log log.Logger, cfg *rollup.Config, metrics Metrics, emitter event.Emitter) *CLSync { return &CLSync{ log: log, cfg: cfg, @@ -63,7 +64,7 @@ func (ev ReceivedUnsafePayloadEvent) String() string { return "received-unsafe-payload" } -func (eq *CLSync) OnEvent(ev rollup.Event) { +func (eq *CLSync) OnEvent(ev event.Event) { // Events may be concurrent in the future. Prevent unsafe concurrent modifications to the payloads queue. eq.mu.Lock() defer eq.mu.Unlock() diff --git a/op-node/rollup/derive/deriver.go b/op-node/rollup/derive/deriver.go index e73023169802..c286a7dd7588 100644 --- a/op-node/rollup/derive/deriver.go +++ b/op-node/rollup/derive/deriver.go @@ -6,6 +6,7 @@ import ( "io" "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum-optimism/optimism/op-node/rollup/event" "github.com/ethereum-optimism/optimism/op-service/eth" ) @@ -67,12 +68,12 @@ type PipelineDeriver struct { ctx context.Context - emitter rollup.EventEmitter + emitter event.Emitter needAttributesConfirmation bool } -func NewPipelineDeriver(ctx context.Context, pipeline *DerivationPipeline, emitter rollup.EventEmitter) *PipelineDeriver { +func NewPipelineDeriver(ctx context.Context, pipeline *DerivationPipeline, emitter event.Emitter) *PipelineDeriver { return &PipelineDeriver{ pipeline: pipeline, ctx: ctx, @@ -80,7 +81,7 @@ func NewPipelineDeriver(ctx context.Context, pipeline *DerivationPipeline, emitt } } -func (d *PipelineDeriver) OnEvent(ev rollup.Event) { +func (d *PipelineDeriver) OnEvent(ev event.Event) { switch x := ev.(type) { case rollup.ResetEvent: d.pipeline.Reset() diff --git a/op-node/rollup/driver/driver.go b/op-node/rollup/driver/driver.go index 4d0b47c0e78c..e24a3a78bec6 100644 --- a/op-node/rollup/driver/driver.go +++ b/op-node/rollup/driver/driver.go @@ -4,6 +4,8 @@ import ( "context" "time" + "golang.org/x/time/rate" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" @@ -14,6 +16,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup/conductor" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/engine" + "github.com/ethereum-optimism/optimism/op-node/rollup/event" "github.com/ethereum-optimism/optimism/op-node/rollup/finality" "github.com/ethereum-optimism/optimism/op-node/rollup/status" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" @@ -46,6 +49,8 @@ type Metrics interface { EngineMetrics L1FetcherMetrics SequencerMetrics + event.Metrics + RecordEventsRateLimited() } type L1Chain interface { @@ -93,7 +98,7 @@ type AttributesHandler interface { type Finalizer interface { FinalizedL1() eth.L1BlockRef - rollup.Deriver + event.Deriver } type PlasmaIface interface { @@ -106,7 +111,7 @@ type PlasmaIface interface { } type SyncStatusTracker interface { - rollup.Deriver + event.Deriver SyncStatus() *eth.SyncStatus L1Head() eth.L1BlockRef } @@ -149,6 +154,14 @@ type SequencerStateListener interface { SequencerStopped() error } +// 10,000 events per second is plenty. +// If we are going through more events, the driver needs to breathe, and warn the user of a potential issue. +const eventsLimit = rate.Limit(10_000) + +// 500 events of burst: the maximum amount of events to eat up +// past the rate limit before the rate limit becomes applicable. +const eventsBurst = 500 + // NewDriver composes an events handler that tracks L1 state, triggers L2 Derivation, and optionally sequences new L2 blocks. func NewDriver( driverCfg *Config, @@ -167,8 +180,13 @@ func NewDriver( plasma PlasmaIface, ) *Driver { driverCtx, driverCancel := context.WithCancel(context.Background()) - rootDeriver := &rollup.SynchronousDerivers{} - synchronousEvents := rollup.NewSynchronousEvents(log, driverCtx, rootDeriver) + rootDeriver := &event.DeriverMux{} + var synchronousEvents event.EmitterDrainer + synchronousEvents = event.NewQueue(log, driverCtx, rootDeriver, metrics) + synchronousEvents = event.NewLimiterDrainer(context.Background(), synchronousEvents, eventsLimit, eventsBurst, func() { + metrics.RecordEventsRateLimited() + log.Warn("Driver is hitting events rate limit.") + }) statusTracker := status.NewStatusTracker(log, metrics) @@ -240,7 +258,7 @@ func NewDriver( sequencerConductor: sequencerConductor, } - *rootDeriver = []rollup.Deriver{ + *rootDeriver = []event.Deriver{ syncDeriver, engineResetDeriver, engDeriv, diff --git a/op-node/rollup/driver/state.go b/op-node/rollup/driver/state.go index 41ab9f9d828e..17bfb5a65566 100644 --- a/op-node/rollup/driver/state.go +++ b/op-node/rollup/driver/state.go @@ -17,6 +17,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup/conductor" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/engine" + "github.com/ethereum-optimism/optimism/op-node/rollup/event" "github.com/ethereum-optimism/optimism/op-node/rollup/finality" "github.com/ethereum-optimism/optimism/op-node/rollup/status" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" @@ -41,7 +42,7 @@ type Driver struct { sched *StepSchedulingDeriver - synchronousEvents *rollup.SynchronousEvents + synchronousEvents event.EmitterDrainer // Requests to block the event loop for synchronous execution to avoid reading an inconsistent state stateReq chan chan struct{} @@ -365,7 +366,7 @@ func (s *Driver) eventLoop() { // OnEvent handles broadcasted events. // The Driver itself is a deriver to catch system-critical events. // Other event-handling should be encapsulated into standalone derivers. -func (s *Driver) OnEvent(ev rollup.Event) { +func (s *Driver) OnEvent(ev event.Event) { switch x := ev.(type) { case rollup.CriticalErrorEvent: s.Log.Error("Derivation process critical error", "err", x.Err) @@ -381,7 +382,7 @@ func (s *Driver) OnEvent(ev rollup.Event) { } } -func (s *Driver) Emit(ev rollup.Event) { +func (s *Driver) Emit(ev event.Event) { s.synchronousEvents.Emit(ev) } @@ -408,7 +409,7 @@ type SyncDeriver struct { L1 L1Chain L2 L2Chain - Emitter rollup.EventEmitter + Emitter event.Emitter Log log.Logger @@ -417,7 +418,7 @@ type SyncDeriver struct { Drain func() error } -func (s *SyncDeriver) OnEvent(ev rollup.Event) { +func (s *SyncDeriver) OnEvent(ev event.Event) { switch x := ev.(type) { case StepEvent: s.onStepEvent() @@ -508,7 +509,8 @@ func (s *SyncDeriver) onStepEvent() { s.Log.Error("Derivation process error", "err", err) s.Emitter.Emit(StepReqEvent{}) } else { - s.Emitter.Emit(StepReqEvent{ResetBackoff: true}) // continue with the next step if we can + // Revisit SyncStep in 1/2 of a L2 block. + s.Emitter.Emit(StepDelayedReqEvent{Delay: (time.Duration(s.Config.BlockTime) * time.Second) / 2}) } } diff --git a/op-node/rollup/driver/steps.go b/op-node/rollup/driver/steps.go index 8f29203adcc3..7628584f003e 100644 --- a/op-node/rollup/driver/steps.go +++ b/op-node/rollup/driver/steps.go @@ -5,7 +5,7 @@ import ( "github.com/ethereum/go-ethereum/log" - "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum-optimism/optimism/op-node/rollup/event" "github.com/ethereum-optimism/optimism/op-service/retry" ) @@ -16,6 +16,14 @@ func (ev ResetStepBackoffEvent) String() string { return "reset-step-backoff" } +type StepDelayedReqEvent struct { + Delay time.Duration +} + +func (ev StepDelayedReqEvent) String() string { + return "step-delayed-req" +} + type StepReqEvent struct { ResetBackoff bool } @@ -61,10 +69,10 @@ type StepSchedulingDeriver struct { log log.Logger - emitter rollup.EventEmitter + emitter event.Emitter } -func NewStepSchedulingDeriver(log log.Logger, emitter rollup.EventEmitter) *StepSchedulingDeriver { +func NewStepSchedulingDeriver(log log.Logger, emitter event.Emitter) *StepSchedulingDeriver { return &StepSchedulingDeriver{ stepAttempts: 0, bOffStrategy: retry.Exponential(), @@ -88,7 +96,7 @@ func (s *StepSchedulingDeriver) NextDelayedStep() <-chan time.Time { return s.delayedStepReq } -func (s *StepSchedulingDeriver) OnEvent(ev rollup.Event) { +func (s *StepSchedulingDeriver) OnEvent(ev event.Event) { step := func() { s.delayedStepReq = nil select { @@ -99,6 +107,10 @@ func (s *StepSchedulingDeriver) OnEvent(ev rollup.Event) { } switch x := ev.(type) { + case StepDelayedReqEvent: + if s.delayedStepReq == nil { + s.delayedStepReq = time.After(x.Delay) + } case StepReqEvent: if x.ResetBackoff { s.stepAttempts = 0 diff --git a/op-node/rollup/driver/steps_test.go b/op-node/rollup/driver/steps_test.go index 5dbba314b6e1..764b00152829 100644 --- a/op-node/rollup/driver/steps_test.go +++ b/op-node/rollup/driver/steps_test.go @@ -7,14 +7,14 @@ import ( "github.com/ethereum/go-ethereum/log" - "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum-optimism/optimism/op-node/rollup/event" "github.com/ethereum-optimism/optimism/op-service/testlog" ) func TestStepSchedulingDeriver(t *testing.T) { logger := testlog.Logger(t, log.LevelError) - var queued []rollup.Event - emitter := rollup.EmitterFunc(func(ev rollup.Event) { + var queued []event.Event + emitter := event.EmitterFunc(func(ev event.Event) { queued = append(queued, ev) }) sched := NewStepSchedulingDeriver(logger, emitter) @@ -26,7 +26,7 @@ func TestStepSchedulingDeriver(t *testing.T) { require.Empty(t, queued, "only scheduled so far, no step attempts yet") <-sched.NextStep() sched.OnEvent(StepAttemptEvent{}) - require.Equal(t, []rollup.Event{StepEvent{}}, queued, "got step event") + require.Equal(t, []event.Event{StepEvent{}}, queued, "got step event") require.Nil(t, sched.NextDelayedStep(), "no delayed steps yet") sched.OnEvent(StepReqEvent{}) require.NotNil(t, sched.NextDelayedStep(), "2nd attempt before backoff reset causes delayed step to be scheduled") diff --git a/op-node/rollup/engine/engine_controller.go b/op-node/rollup/engine/engine_controller.go index 8121dc3800aa..fa6b6fd88d85 100644 --- a/op-node/rollup/engine/engine_controller.go +++ b/op-node/rollup/engine/engine_controller.go @@ -14,6 +14,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup/async" "github.com/ethereum-optimism/optimism/op-node/rollup/conductor" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-node/rollup/event" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" "github.com/ethereum-optimism/optimism/op-service/clock" "github.com/ethereum-optimism/optimism/op-service/eth" @@ -54,7 +55,7 @@ type EngineController struct { elStart time.Time clock clock.Clock - emitter rollup.EventEmitter + emitter event.Emitter // Block Head State unsafeHead eth.L2BlockRef @@ -78,7 +79,7 @@ type EngineController struct { } func NewEngineController(engine ExecEngine, log log.Logger, metrics derive.Metrics, - rollupCfg *rollup.Config, syncMode sync.Mode, emitter rollup.EventEmitter) *EngineController { + rollupCfg *rollup.Config, syncMode sync.Mode, emitter event.Emitter) *EngineController { syncStatus := syncStatusCL if syncMode == sync.ELSync { syncStatus = syncStatusWillStartEL diff --git a/op-node/rollup/engine/engine_reset.go b/op-node/rollup/engine/engine_reset.go index c0985d8ddb39..f34ae4d249bc 100644 --- a/op-node/rollup/engine/engine_reset.go +++ b/op-node/rollup/engine/engine_reset.go @@ -7,6 +7,7 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum-optimism/optimism/op-node/rollup/event" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" ) @@ -27,11 +28,11 @@ type EngineResetDeriver struct { l2 sync.L2Chain syncCfg *sync.Config - emitter rollup.EventEmitter + emitter event.Emitter } func NewEngineResetDeriver(ctx context.Context, log log.Logger, cfg *rollup.Config, - l1 sync.L1Chain, l2 sync.L2Chain, syncCfg *sync.Config, emitter rollup.EventEmitter) *EngineResetDeriver { + l1 sync.L1Chain, l2 sync.L2Chain, syncCfg *sync.Config, emitter event.Emitter) *EngineResetDeriver { return &EngineResetDeriver{ ctx: ctx, log: log, @@ -43,7 +44,7 @@ func NewEngineResetDeriver(ctx context.Context, log log.Logger, cfg *rollup.Conf } } -func (d *EngineResetDeriver) OnEvent(ev rollup.Event) { +func (d *EngineResetDeriver) OnEvent(ev event.Event) { switch ev.(type) { case ResetEngineRequestEvent: result, err := sync.FindL2Heads(d.ctx, d.cfg, d.l1, d.l2, d.log, d.syncCfg) diff --git a/op-node/rollup/engine/events.go b/op-node/rollup/engine/events.go index abbe06402d84..12e1ff03ab83 100644 --- a/op-node/rollup/engine/events.go +++ b/op-node/rollup/engine/events.go @@ -13,6 +13,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup/async" "github.com/ethereum-optimism/optimism/op-node/rollup/conductor" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-node/rollup/event" "github.com/ethereum-optimism/optimism/op-service/eth" ) @@ -148,13 +149,13 @@ type EngDeriver struct { cfg *rollup.Config ec *EngineController ctx context.Context - emitter rollup.EventEmitter + emitter event.Emitter } -var _ rollup.Deriver = (*EngDeriver)(nil) +var _ event.Deriver = (*EngDeriver)(nil) func NewEngDeriver(log log.Logger, ctx context.Context, cfg *rollup.Config, - ec *EngineController, emitter rollup.EventEmitter) *EngDeriver { + ec *EngineController, emitter event.Emitter) *EngDeriver { return &EngDeriver{ log: log, cfg: cfg, @@ -164,7 +165,7 @@ func NewEngDeriver(log log.Logger, ctx context.Context, cfg *rollup.Config, } } -func (d *EngDeriver) OnEvent(ev rollup.Event) { +func (d *EngDeriver) OnEvent(ev event.Event) { switch x := ev.(type) { case TryBackupUnsafeReorgEvent: // If we don't need to call FCU to restore unsafeHead using backupUnsafe, keep going b/c diff --git a/op-node/rollup/event.go b/op-node/rollup/event.go new file mode 100644 index 000000000000..bcab847451d8 --- /dev/null +++ b/op-node/rollup/event.go @@ -0,0 +1,48 @@ +package rollup + +import "github.com/ethereum-optimism/optimism/op-node/rollup/event" + +// L1TemporaryErrorEvent identifies a temporary issue with the L1 data. +type L1TemporaryErrorEvent struct { + Err error +} + +var _ event.Event = L1TemporaryErrorEvent{} + +func (ev L1TemporaryErrorEvent) String() string { + return "l1-temporary-error" +} + +// EngineTemporaryErrorEvent identifies a temporary processing issue. +// It applies to both L1 and L2 data, often inter-related. +// This scope will be reduced over time, to only capture L2-engine specific temporary errors. +// See L1TemporaryErrorEvent for L1 related temporary errors. +type EngineTemporaryErrorEvent struct { + Err error +} + +var _ event.Event = EngineTemporaryErrorEvent{} + +func (ev EngineTemporaryErrorEvent) String() string { + return "engine-temporary-error" +} + +type ResetEvent struct { + Err error +} + +var _ event.Event = ResetEvent{} + +func (ev ResetEvent) String() string { + return "reset-event" +} + +type CriticalErrorEvent struct { + Err error +} + +var _ event.Event = CriticalErrorEvent{} + +func (ev CriticalErrorEvent) String() string { + return "critical-error" +} diff --git a/op-node/rollup/event/events.go b/op-node/rollup/event/events.go new file mode 100644 index 000000000000..35e30d0d4d07 --- /dev/null +++ b/op-node/rollup/event/events.go @@ -0,0 +1,75 @@ +package event + +import "github.com/ethereum/go-ethereum/log" + +type Event interface { + // String returns the name of the event. + // The name must be simple and identify the event type, not the event content. + // This name is used for metric-labeling. + String() string +} + +type Deriver interface { + OnEvent(ev Event) +} + +type Emitter interface { + Emit(ev Event) +} + +type Drainer interface { + // Drain processes all events. + Drain() error + // DrainUntil processes all events until a condition is hit. + // If excl, the event that matches the condition is not processed yet. + // If not excl, the event that matches is processed. + DrainUntil(fn func(ev Event) bool, excl bool) error +} + +type EmitterDrainer interface { + Emitter + Drainer +} + +type EmitterFunc func(ev Event) + +func (fn EmitterFunc) Emit(ev Event) { + fn(ev) +} + +// DeriverMux takes an event-signal as deriver, and synchronously fans it out to all contained Deriver ends. +// Technically this is a DeMux: single input to multi output. +type DeriverMux []Deriver + +func (s *DeriverMux) OnEvent(ev Event) { + for _, d := range *s { + d.OnEvent(ev) + } +} + +var _ Deriver = (*DeriverMux)(nil) + +type DebugDeriver struct { + Log log.Logger +} + +func (d DebugDeriver) OnEvent(ev Event) { + d.Log.Debug("on-event", "event", ev) +} + +type NoopDeriver struct{} + +func (d NoopDeriver) OnEvent(ev Event) {} + +// DeriverFunc implements the Deriver interface as a function, +// similar to how the std-lib http HandlerFunc implements a Handler. +// This can be used for small in-place derivers, test helpers, etc. +type DeriverFunc func(ev Event) + +func (fn DeriverFunc) OnEvent(ev Event) { + fn(ev) +} + +type NoopEmitter struct{} + +func (e NoopEmitter) Emit(ev Event) {} diff --git a/op-node/rollup/events_test.go b/op-node/rollup/event/events_test.go similarity index 77% rename from op-node/rollup/events_test.go rename to op-node/rollup/event/events_test.go index d405883d3cce..e52185601a56 100644 --- a/op-node/rollup/events_test.go +++ b/op-node/rollup/event/events_test.go @@ -1,4 +1,4 @@ -package rollup +package event import ( "fmt" @@ -13,7 +13,7 @@ func (ev TestEvent) String() string { return "X" } -func TestSynchronousDerivers_OnEvent(t *testing.T) { +func TestDeriverMux_OnEvent(t *testing.T) { result := "" a := DeriverFunc(func(ev Event) { result += fmt.Sprintf("A:%s\n", ev) @@ -25,26 +25,26 @@ func TestSynchronousDerivers_OnEvent(t *testing.T) { result += fmt.Sprintf("C:%s\n", ev) }) - x := SynchronousDerivers{} + x := DeriverMux{} x.OnEvent(TestEvent{}) require.Equal(t, "", result) - x = SynchronousDerivers{a} + x = DeriverMux{a} x.OnEvent(TestEvent{}) require.Equal(t, "A:X\n", result) result = "" - x = SynchronousDerivers{a, a} + x = DeriverMux{a, a} x.OnEvent(TestEvent{}) require.Equal(t, "A:X\nA:X\n", result) result = "" - x = SynchronousDerivers{a, b} + x = DeriverMux{a, b} x.OnEvent(TestEvent{}) require.Equal(t, "A:X\nB:X\n", result) result = "" - x = SynchronousDerivers{a, b, c} + x = DeriverMux{a, b, c} x.OnEvent(TestEvent{}) require.Equal(t, "A:X\nB:X\nC:X\n", result) } diff --git a/op-node/rollup/event/limiter.go b/op-node/rollup/event/limiter.go new file mode 100644 index 000000000000..f0efcf1d2d62 --- /dev/null +++ b/op-node/rollup/event/limiter.go @@ -0,0 +1,58 @@ +package event + +import ( + "context" + + "golang.org/x/time/rate" +) + +type Limiter[E Emitter] struct { + ctx context.Context + emitter E + rl *rate.Limiter + onLimited func() +} + +// NewLimiter returns an event rate-limiter. +// This can be used to prevent event loops from (accidentally) running too hot. +// The eventRate is the number of events per second. +// The eventBurst is the margin of events to eat into until the rate-limit kicks in. +// The onLimited function is optional, and will be called if an emitted event is getting rate-limited +func NewLimiter[E Emitter](ctx context.Context, em E, eventRate rate.Limit, eventBurst int, onLimited func()) *Limiter[E] { + return &Limiter[E]{ + ctx: ctx, + emitter: em, + rl: rate.NewLimiter(eventRate, eventBurst), + onLimited: onLimited, + } +} + +// Emit is thread-safe, multiple parallel derivers can safely emit events to it. +func (l *Limiter[E]) Emit(ev Event) { + if l.onLimited != nil && l.rl.Tokens() < 1.0 { + l.onLimited() + } + if err := l.rl.Wait(l.ctx); err != nil { + return // ctx error, safe to ignore. + } + l.emitter.Emit(ev) +} + +// LimiterDrainer is a variant of Limiter that supports event draining. +type LimiterDrainer Limiter[EmitterDrainer] + +func NewLimiterDrainer(ctx context.Context, em EmitterDrainer, eventRate rate.Limit, eventBurst int, onLimited func()) *LimiterDrainer { + return (*LimiterDrainer)(NewLimiter(ctx, em, eventRate, eventBurst, onLimited)) +} + +func (l *LimiterDrainer) Emit(ev Event) { + l.emitter.Emit(ev) +} + +func (l *LimiterDrainer) Drain() error { + return l.emitter.Drain() +} + +func (l *LimiterDrainer) DrainUntil(fn func(ev Event) bool, excl bool) error { + return l.emitter.DrainUntil(fn, excl) +} diff --git a/op-node/rollup/event/limiter_test.go b/op-node/rollup/event/limiter_test.go new file mode 100644 index 000000000000..764a8853f256 --- /dev/null +++ b/op-node/rollup/event/limiter_test.go @@ -0,0 +1,28 @@ +package event + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" + "golang.org/x/time/rate" +) + +func TestLimiter(t *testing.T) { + count := uint64(0) + em := EmitterFunc(func(ev Event) { + count += 1 + }) + hitRateLimitAt := uint64(0) + // Test that we are able to hit the specified rate limit, and no earlier + lim := NewLimiter(context.Background(), em, rate.Limit(10), 10, func() { + if hitRateLimitAt != 0 { + return + } + hitRateLimitAt = count + }) + for i := 0; i < 30; i++ { + lim.Emit(TestEvent{}) + } + require.LessOrEqual(t, uint64(10), hitRateLimitAt) +} diff --git a/op-node/rollup/event/metrics.go b/op-node/rollup/event/metrics.go new file mode 100644 index 000000000000..3c41b9b6efe9 --- /dev/null +++ b/op-node/rollup/event/metrics.go @@ -0,0 +1,15 @@ +package event + +type Metrics interface { + RecordEmittedEvent(name string) + RecordProcessedEvent(name string) +} + +type NoopMetrics struct { +} + +func (n NoopMetrics) RecordEmittedEvent(name string) {} + +func (n NoopMetrics) RecordProcessedEvent(name string) {} + +var _ Metrics = NoopMetrics{} diff --git a/op-node/rollup/synchronous.go b/op-node/rollup/event/queue.go similarity index 68% rename from op-node/rollup/synchronous.go rename to op-node/rollup/event/queue.go index 68943381e24e..cee3f1e9985d 100644 --- a/op-node/rollup/synchronous.go +++ b/op-node/rollup/event/queue.go @@ -1,4 +1,4 @@ -package rollup +package event import ( "context" @@ -12,11 +12,11 @@ import ( // At some point it's better to drop events and warn something is exploding the number of events. const sanityEventLimit = 1000 -// SynchronousEvents is a rollup.EventEmitter that a rollup.Deriver can emit events to. +// Queue is a event.Emitter that a event.Deriver can emit events to. // The events will be queued up, and can then be executed synchronously by calling the Drain function, // which will apply all events to the root Deriver. // New events may be queued up while events are being processed by the root rollup.Deriver. -type SynchronousEvents struct { +type Queue struct { // The lock is no-op in FP execution, if running in synchronous FP-VM. // This lock ensures that all emitted events are merged together correctly, // if this util is used in a concurrent context. @@ -29,20 +29,28 @@ type SynchronousEvents struct { ctx context.Context root Deriver + + metrics Metrics } -func NewSynchronousEvents(log log.Logger, ctx context.Context, root Deriver) *SynchronousEvents { - return &SynchronousEvents{ - log: log, - ctx: ctx, - root: root, +var _ EmitterDrainer = (*Queue)(nil) + +func NewQueue(log log.Logger, ctx context.Context, root Deriver, metrics Metrics) *Queue { + return &Queue{ + log: log, + ctx: ctx, + root: root, + metrics: metrics, } } -func (s *SynchronousEvents) Emit(event Event) { +func (s *Queue) Emit(event Event) { s.evLock.Lock() defer s.evLock.Unlock() + s.log.Debug("Emitting event", "event", event) + s.metrics.RecordEmittedEvent(event.String()) + if s.ctx.Err() != nil { s.log.Warn("Ignoring emitted event during shutdown", "event", event) return @@ -56,7 +64,7 @@ func (s *SynchronousEvents) Emit(event Event) { s.events = append(s.events, event) } -func (s *SynchronousEvents) Drain() error { +func (s *Queue) Drain() error { for { if s.ctx.Err() != nil { return s.ctx.Err() @@ -70,11 +78,13 @@ func (s *SynchronousEvents) Drain() error { s.events = s.events[1:] s.evLock.Unlock() + s.log.Debug("Processing event", "event", first) s.root.OnEvent(first) + s.metrics.RecordProcessedEvent(first.String()) } } -func (s *SynchronousEvents) DrainUntil(fn func(ev Event) bool, excl bool) error { +func (s *Queue) DrainUntil(fn func(ev Event) bool, excl bool) error { for { if s.ctx.Err() != nil { return s.ctx.Err() @@ -93,11 +103,13 @@ func (s *SynchronousEvents) DrainUntil(fn func(ev Event) bool, excl bool) error s.events = s.events[1:] s.evLock.Unlock() + s.log.Debug("Processing event", "event", first) s.root.OnEvent(first) + s.metrics.RecordProcessedEvent(first.String()) if stop { return nil } } } -var _ EventEmitter = (*SynchronousEvents)(nil) +var _ Emitter = (*Queue)(nil) diff --git a/op-node/rollup/synchronous_test.go b/op-node/rollup/event/queue_test.go similarity index 83% rename from op-node/rollup/synchronous_test.go rename to op-node/rollup/event/queue_test.go index 191b4f4246a2..696ce4e0babe 100644 --- a/op-node/rollup/synchronous_test.go +++ b/op-node/rollup/event/queue_test.go @@ -1,4 +1,4 @@ -package rollup +package event import ( "context" @@ -11,14 +11,14 @@ import ( "github.com/ethereum-optimism/optimism/op-service/testlog" ) -func TestSynchronousEvents(t *testing.T) { +func TestQueue(t *testing.T) { logger := testlog.Logger(t, log.LevelError) ctx, cancel := context.WithCancel(context.Background()) count := 0 deriver := DeriverFunc(func(ev Event) { count += 1 }) - syncEv := NewSynchronousEvents(logger, ctx, deriver) + syncEv := NewQueue(logger, ctx, deriver, NoopMetrics{}) require.NoError(t, syncEv.Drain(), "can drain, even if empty") syncEv.Emit(TestEvent{}) @@ -38,13 +38,13 @@ func TestSynchronousEvents(t *testing.T) { require.Equal(t, 3, count, "didn't process event after trigger close") } -func TestSynchronousEventsSanityLimit(t *testing.T) { - logger := testlog.Logger(t, log.LevelError) +func TestQueueSanityLimit(t *testing.T) { + logger := testlog.Logger(t, log.LevelCrit) // expecting error log of hitting sanity limit count := 0 deriver := DeriverFunc(func(ev Event) { count += 1 }) - syncEv := NewSynchronousEvents(logger, context.Background(), deriver) + syncEv := NewQueue(logger, context.Background(), deriver, NoopMetrics{}) // emit 1 too many events for i := 0; i < sanityEventLimit+1; i++ { syncEv.Emit(TestEvent{}) @@ -67,7 +67,7 @@ func (ev CyclicEvent) String() string { func TestSynchronousCyclic(t *testing.T) { logger := testlog.Logger(t, log.LevelError) - var emitter EventEmitter + var emitter Emitter result := false deriver := DeriverFunc(func(ev Event) { logger.Info("received event", "event", ev) @@ -80,7 +80,7 @@ func TestSynchronousCyclic(t *testing.T) { } } }) - syncEv := NewSynchronousEvents(logger, context.Background(), deriver) + syncEv := NewQueue(logger, context.Background(), deriver, NoopMetrics{}) emitter = syncEv syncEv.Emit(CyclicEvent{Count: 0}) require.NoError(t, syncEv.Drain()) diff --git a/op-node/rollup/event/util.go b/op-node/rollup/event/util.go new file mode 100644 index 000000000000..5391d312d7ab --- /dev/null +++ b/op-node/rollup/event/util.go @@ -0,0 +1,19 @@ +package event + +// Is as helper function is syntax-sugar to do an Event type check as a boolean function +func Is[T Event](ev Event) bool { + _, ok := ev.(T) + return ok +} + +// Any as helper function combines different event conditions into a single function +func Any(fns ...func(ev Event) bool) func(ev Event) bool { + return func(ev Event) bool { + for _, fn := range fns { + if fn(ev) { + return true + } + } + return false + } +} diff --git a/op-node/rollup/event/util_test.go b/op-node/rollup/event/util_test.go new file mode 100644 index 000000000000..48f73c5c6c48 --- /dev/null +++ b/op-node/rollup/event/util_test.go @@ -0,0 +1,37 @@ +package event + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +type FooEvent struct{} + +func (ev FooEvent) String() string { + return "foo" +} + +type BarEvent struct{} + +func (ev BarEvent) String() string { + return "bar" +} + +func TestIs(t *testing.T) { + require.False(t, Is[TestEvent](FooEvent{})) + require.False(t, Is[TestEvent](BarEvent{})) + require.True(t, Is[FooEvent](FooEvent{})) + require.True(t, Is[BarEvent](BarEvent{})) +} + +func TestAny(t *testing.T) { + require.False(t, Any()(FooEvent{})) + require.False(t, Any(Is[BarEvent])(FooEvent{})) + require.True(t, Any(Is[FooEvent])(FooEvent{})) + require.False(t, Any(Is[TestEvent], Is[BarEvent])(FooEvent{})) + require.True(t, Any(Is[TestEvent], Is[BarEvent], Is[FooEvent])(FooEvent{})) + require.True(t, Any(Is[FooEvent], Is[BarEvent], Is[TestEvent])(FooEvent{})) + require.True(t, Any(Is[FooEvent], Is[FooEvent], Is[FooEvent])(FooEvent{})) + require.False(t, Any(Is[FooEvent], Is[FooEvent], Is[FooEvent])(BarEvent{})) +} diff --git a/op-node/rollup/events.go b/op-node/rollup/events.go deleted file mode 100644 index 29a6acdd1417..000000000000 --- a/op-node/rollup/events.go +++ /dev/null @@ -1,101 +0,0 @@ -package rollup - -import "github.com/ethereum/go-ethereum/log" - -type Event interface { - String() string -} - -type Deriver interface { - OnEvent(ev Event) -} - -type EventEmitter interface { - Emit(ev Event) -} - -type EmitterFunc func(ev Event) - -func (fn EmitterFunc) Emit(ev Event) { - fn(ev) -} - -// L1TemporaryErrorEvent identifies a temporary issue with the L1 data. -type L1TemporaryErrorEvent struct { - Err error -} - -var _ Event = L1TemporaryErrorEvent{} - -func (ev L1TemporaryErrorEvent) String() string { - return "l1-temporary-error" -} - -// EngineTemporaryErrorEvent identifies a temporary processing issue. -// It applies to both L1 and L2 data, often inter-related. -// This scope will be reduced over time, to only capture L2-engine specific temporary errors. -// See L1TemporaryErrorEvent for L1 related temporary errors. -type EngineTemporaryErrorEvent struct { - Err error -} - -var _ Event = EngineTemporaryErrorEvent{} - -func (ev EngineTemporaryErrorEvent) String() string { - return "engine-temporary-error" -} - -type ResetEvent struct { - Err error -} - -var _ Event = ResetEvent{} - -func (ev ResetEvent) String() string { - return "reset-event" -} - -type CriticalErrorEvent struct { - Err error -} - -var _ Event = CriticalErrorEvent{} - -func (ev CriticalErrorEvent) String() string { - return "critical-error" -} - -type SynchronousDerivers []Deriver - -func (s *SynchronousDerivers) OnEvent(ev Event) { - for _, d := range *s { - d.OnEvent(ev) - } -} - -var _ Deriver = (*SynchronousDerivers)(nil) - -type DebugDeriver struct { - Log log.Logger -} - -func (d DebugDeriver) OnEvent(ev Event) { - d.Log.Debug("on-event", "event", ev) -} - -type NoopDeriver struct{} - -func (d NoopDeriver) OnEvent(ev Event) {} - -// DeriverFunc implements the Deriver interface as a function, -// similar to how the std-lib http HandlerFunc implements a Handler. -// This can be used for small in-place derivers, test helpers, etc. -type DeriverFunc func(ev Event) - -func (fn DeriverFunc) OnEvent(ev Event) { - fn(ev) -} - -type NoopEmitter struct{} - -func (e NoopEmitter) Emit(ev Event) {} diff --git a/op-node/rollup/finality/finalizer.go b/op-node/rollup/finality/finalizer.go index 483110083d46..10a8fc49449f 100644 --- a/op-node/rollup/finality/finalizer.go +++ b/op-node/rollup/finality/finalizer.go @@ -11,6 +11,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/engine" + "github.com/ethereum-optimism/optimism/op-node/rollup/event" "github.com/ethereum-optimism/optimism/op-service/eth" ) @@ -72,7 +73,7 @@ type Finalizer struct { ctx context.Context - emitter rollup.EventEmitter + emitter event.Emitter // finalizedL1 is the currently perceived finalized L1 block. // This may be ahead of the current traversed origin when syncing. @@ -93,7 +94,7 @@ type Finalizer struct { l1Fetcher FinalizerL1Interface } -func NewFinalizer(ctx context.Context, log log.Logger, cfg *rollup.Config, l1Fetcher FinalizerL1Interface, emitter rollup.EventEmitter) *Finalizer { +func NewFinalizer(ctx context.Context, log log.Logger, cfg *rollup.Config, l1Fetcher FinalizerL1Interface, emitter event.Emitter) *Finalizer { lookback := calcFinalityLookback(cfg) return &Finalizer{ ctx: ctx, @@ -130,7 +131,7 @@ func (ev TryFinalizeEvent) String() string { return "try-finalize" } -func (fi *Finalizer) OnEvent(ev rollup.Event) { +func (fi *Finalizer) OnEvent(ev event.Event) { switch x := ev.(type) { case FinalizeL1Event: fi.onL1Finalized(x.FinalizedL1) diff --git a/op-node/rollup/finality/plasma.go b/op-node/rollup/finality/plasma.go index e62c96169c5a..289c268c7af7 100644 --- a/op-node/rollup/finality/plasma.go +++ b/op-node/rollup/finality/plasma.go @@ -6,6 +6,7 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum-optimism/optimism/op-node/rollup/event" plasma "github.com/ethereum-optimism/optimism/op-plasma" "github.com/ethereum-optimism/optimism/op-service/eth" ) @@ -27,7 +28,7 @@ type PlasmaFinalizer struct { } func NewPlasmaFinalizer(ctx context.Context, log log.Logger, cfg *rollup.Config, - l1Fetcher FinalizerL1Interface, emitter rollup.EventEmitter, + l1Fetcher FinalizerL1Interface, emitter event.Emitter, backend PlasmaBackend) *PlasmaFinalizer { inner := NewFinalizer(ctx, log, cfg, l1Fetcher, emitter) @@ -45,7 +46,7 @@ func NewPlasmaFinalizer(ctx context.Context, log log.Logger, cfg *rollup.Config, } } -func (fi *PlasmaFinalizer) OnEvent(ev rollup.Event) { +func (fi *PlasmaFinalizer) OnEvent(ev event.Event) { switch x := ev.(type) { case FinalizeL1Event: fi.backend.Finalize(x.FinalizedL1) diff --git a/op-node/rollup/finality/plasma_test.go b/op-node/rollup/finality/plasma_test.go index 291fa026dcb4..1de57233455b 100644 --- a/op-node/rollup/finality/plasma_test.go +++ b/op-node/rollup/finality/plasma_test.go @@ -13,6 +13,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/engine" + "github.com/ethereum-optimism/optimism/op-node/rollup/event" plasma "github.com/ethereum-optimism/optimism/op-plasma" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/testlog" @@ -134,7 +135,7 @@ func TestPlasmaFinalityData(t *testing.T) { emitter.AssertExpectations(t) } // might trigger finalization attempt, if expired finality delay - emitter.ExpectMaybeRun(func(ev rollup.Event) { + emitter.ExpectMaybeRun(func(ev event.Event) { require.IsType(t, TryFinalizeEvent{}, ev) }) fi.OnEvent(derive.DeriverIdleEvent{}) @@ -166,7 +167,7 @@ func TestPlasmaFinalityData(t *testing.T) { l1F.ExpectL1BlockRefByNumber(commitmentInclusionFinalized.Number, commitmentInclusionFinalized, nil) l1F.ExpectL1BlockRefByNumber(commitmentInclusionFinalized.Number, commitmentInclusionFinalized, nil) var finalizedL2 eth.L2BlockRef - emitter.ExpectOnceRun(func(ev rollup.Event) { + emitter.ExpectOnceRun(func(ev event.Event) { if x, ok := ev.(engine.PromoteFinalizedEvent); ok { finalizedL2 = x.Ref } else { diff --git a/op-node/rollup/status/status.go b/op-node/rollup/status/status.go index 7a747463a8d1..4a87f0c3a46e 100644 --- a/op-node/rollup/status/status.go +++ b/op-node/rollup/status/status.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/engine" + "github.com/ethereum-optimism/optimism/op-node/rollup/event" "github.com/ethereum-optimism/optimism/op-node/rollup/finality" "github.com/ethereum-optimism/optimism/op-service/eth" ) @@ -56,7 +57,7 @@ func NewStatusTracker(log log.Logger, metrics Metrics) *StatusTracker { return st } -func (st *StatusTracker) OnEvent(ev rollup.Event) { +func (st *StatusTracker) OnEvent(ev event.Event) { st.mu.Lock() defer st.mu.Unlock() diff --git a/op-program/client/driver/driver.go b/op-program/client/driver/driver.go index 7bcd8268476c..247289a30673 100644 --- a/op-program/client/driver/driver.go +++ b/op-program/client/driver/driver.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/engine" + "github.com/ethereum-optimism/optimism/op-node/rollup/event" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" plasma "github.com/ethereum-optimism/optimism/op-plasma" ) @@ -22,10 +23,10 @@ type EndCondition interface { type Driver struct { logger log.Logger - events []rollup.Event + events []event.Event end EndCondition - deriver rollup.Deriver + deriver event.Deriver } func NewDriver(logger log.Logger, cfg *rollup.Config, l1Source derive.L1Fetcher, @@ -51,7 +52,7 @@ func NewDriver(logger log.Logger, cfg *rollup.Config, l1Source derive.L1Fetcher, targetBlockNum: targetBlockNum, } - d.deriver = &rollup.SynchronousDerivers{ + d.deriver = &event.DeriverMux{ prog, engineDeriv, pipelineDeriver, @@ -62,7 +63,7 @@ func NewDriver(logger log.Logger, cfg *rollup.Config, l1Source derive.L1Fetcher, return d } -func (d *Driver) Emit(ev rollup.Event) { +func (d *Driver) Emit(ev event.Event) { if d.end.Closing() { return } diff --git a/op-program/client/driver/driver_test.go b/op-program/client/driver/driver_test.go index 9ad06e7233fa..d1c4d2af74ec 100644 --- a/op-program/client/driver/driver_test.go +++ b/op-program/client/driver/driver_test.go @@ -8,7 +8,7 @@ import ( "github.com/ethereum/go-ethereum/log" - "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum-optimism/optimism/op-node/rollup/event" "github.com/ethereum-optimism/optimism/op-service/testlog" ) @@ -26,21 +26,21 @@ func (d *fakeEnd) Result() error { } func TestDriver(t *testing.T) { - newTestDriver := func(t *testing.T, onEvent func(d *Driver, end *fakeEnd, ev rollup.Event)) *Driver { + newTestDriver := func(t *testing.T, onEvent func(d *Driver, end *fakeEnd, ev event.Event)) *Driver { logger := testlog.Logger(t, log.LevelInfo) end := &fakeEnd{} d := &Driver{ logger: logger, end: end, } - d.deriver = rollup.DeriverFunc(func(ev rollup.Event) { + d.deriver = event.DeriverFunc(func(ev event.Event) { onEvent(d, end, ev) }) return d } t.Run("insta complete", func(t *testing.T) { - d := newTestDriver(t, func(d *Driver, end *fakeEnd, ev rollup.Event) { + d := newTestDriver(t, func(d *Driver, end *fakeEnd, ev event.Event) { end.closing = true }) require.NoError(t, d.RunComplete()) @@ -48,7 +48,7 @@ func TestDriver(t *testing.T) { t.Run("insta error", func(t *testing.T) { mockErr := errors.New("mock error") - d := newTestDriver(t, func(d *Driver, end *fakeEnd, ev rollup.Event) { + d := newTestDriver(t, func(d *Driver, end *fakeEnd, ev event.Event) { end.closing = true end.result = mockErr }) @@ -57,7 +57,7 @@ func TestDriver(t *testing.T) { t.Run("success after a few events", func(t *testing.T) { count := 0 - d := newTestDriver(t, func(d *Driver, end *fakeEnd, ev rollup.Event) { + d := newTestDriver(t, func(d *Driver, end *fakeEnd, ev event.Event) { if count > 3 { end.closing = true return @@ -71,7 +71,7 @@ func TestDriver(t *testing.T) { t.Run("error after a few events", func(t *testing.T) { count := 0 mockErr := errors.New("mock error") - d := newTestDriver(t, func(d *Driver, end *fakeEnd, ev rollup.Event) { + d := newTestDriver(t, func(d *Driver, end *fakeEnd, ev event.Event) { if count > 3 { end.closing = true end.result = mockErr @@ -85,7 +85,7 @@ func TestDriver(t *testing.T) { t.Run("exhaust events", func(t *testing.T) { count := 0 - d := newTestDriver(t, func(d *Driver, end *fakeEnd, ev rollup.Event) { + d := newTestDriver(t, func(d *Driver, end *fakeEnd, ev event.Event) { if count < 3 { // stop generating events after a while, without changing end condition d.Emit(TestEvent{}) } @@ -96,7 +96,7 @@ func TestDriver(t *testing.T) { t.Run("queued events", func(t *testing.T) { count := 0 - d := newTestDriver(t, func(d *Driver, end *fakeEnd, ev rollup.Event) { + d := newTestDriver(t, func(d *Driver, end *fakeEnd, ev event.Event) { if count < 3 { d.Emit(TestEvent{}) d.Emit(TestEvent{}) diff --git a/op-program/client/driver/program.go b/op-program/client/driver/program.go index 9ed08e531d91..1ab24cf110fe 100644 --- a/op-program/client/driver/program.go +++ b/op-program/client/driver/program.go @@ -8,6 +8,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/engine" + "github.com/ethereum-optimism/optimism/op-node/rollup/event" ) // ProgramDeriver expresses how engine and derivation events are @@ -17,7 +18,7 @@ import ( type ProgramDeriver struct { logger log.Logger - Emitter rollup.EventEmitter + Emitter event.Emitter closing bool result error @@ -32,7 +33,7 @@ func (d *ProgramDeriver) Result() error { return d.result } -func (d *ProgramDeriver) OnEvent(ev rollup.Event) { +func (d *ProgramDeriver) OnEvent(ev event.Event) { switch x := ev.(type) { case engine.EngineResetConfirmedEvent: d.Emitter.Emit(derive.ConfirmPipelineResetEvent{}) diff --git a/op-service/testutils/mock_emitter.go b/op-service/testutils/mock_emitter.go index e9b502dfee38..340f1832181d 100644 --- a/op-service/testutils/mock_emitter.go +++ b/op-service/testutils/mock_emitter.go @@ -1,26 +1,25 @@ package testutils import ( + "github.com/ethereum-optimism/optimism/op-node/rollup/event" "github.com/stretchr/testify/mock" - - "github.com/ethereum-optimism/optimism/op-node/rollup" ) type MockEmitter struct { mock.Mock } -func (m *MockEmitter) Emit(ev rollup.Event) { +func (m *MockEmitter) Emit(ev event.Event) { m.Mock.MethodCalled("Emit", ev) } -func (m *MockEmitter) ExpectOnce(expected rollup.Event) { +func (m *MockEmitter) ExpectOnce(expected event.Event) { m.Mock.On("Emit", expected).Once() } -func (m *MockEmitter) ExpectMaybeRun(fn func(ev rollup.Event)) { +func (m *MockEmitter) ExpectMaybeRun(fn func(ev event.Event)) { m.Mock.On("Emit", mock.Anything).Maybe().Run(func(args mock.Arguments) { - fn(args.Get(0).(rollup.Event)) + fn(args.Get(0).(event.Event)) }) } @@ -28,9 +27,9 @@ func (m *MockEmitter) ExpectOnceType(typ string) { m.Mock.On("Emit", mock.AnythingOfType(typ)).Once() } -func (m *MockEmitter) ExpectOnceRun(fn func(ev rollup.Event)) { +func (m *MockEmitter) ExpectOnceRun(fn func(ev event.Event)) { m.Mock.On("Emit", mock.Anything).Once().Run(func(args mock.Arguments) { - fn(args.Get(0).(rollup.Event)) + fn(args.Get(0).(event.Event)) }) } @@ -38,4 +37,4 @@ func (m *MockEmitter) AssertExpectations(t mock.TestingT) { m.Mock.AssertExpectations(t) } -var _ rollup.EventEmitter = (*MockEmitter)(nil) +var _ event.Emitter = (*MockEmitter)(nil) From 269b153cdbd81cffd93c07319ac774df84d32c8a Mon Sep 17 00:00:00 2001 From: Bill Date: Fri, 28 Jun 2024 22:17:11 +0100 Subject: [PATCH 125/141] delete redundant import (#11045) --- bedrock-devnet/devnet/__init__.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/bedrock-devnet/devnet/__init__.py b/bedrock-devnet/devnet/__init__.py index 2bea550a1d1c..d92d94e340ff 100644 --- a/bedrock-devnet/devnet/__init__.py +++ b/bedrock-devnet/devnet/__init__.py @@ -13,8 +13,6 @@ from collections import namedtuple -import devnet.log_setup - pjoin = os.path.join parser = argparse.ArgumentParser(description='Bedrock devnet launcher') From 822df50ba92a8e0ed15caf73d38a7f8e7f9e9465 Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Sat, 29 Jun 2024 07:42:44 +1000 Subject: [PATCH 126/141] op-supervisor: Create logdb for each chain. (#11043) --- op-supervisor/metrics/metrics.go | 66 ++++++++++++++----- op-supervisor/metrics/noop.go | 3 + op-supervisor/supervisor/backend/backend.go | 55 ++++++++++++---- .../backend/{source => }/chain_metrics.go | 20 +++++- op-supervisor/supervisor/backend/db/db.go | 8 +-- .../supervisor/backend/db/db_test.go | 4 +- .../supervisor/backend/file_layout.go | 24 +++++++ .../supervisor/backend/file_layout_test.go | 28 ++++++++ .../supervisor/backend/source/chain.go | 23 ++----- 9 files changed, 177 insertions(+), 54 deletions(-) rename op-supervisor/supervisor/backend/{source => }/chain_metrics.go (56%) create mode 100644 op-supervisor/supervisor/backend/file_layout.go create mode 100644 op-supervisor/supervisor/backend/file_layout_test.go diff --git a/op-supervisor/metrics/metrics.go b/op-supervisor/metrics/metrics.go index cc7bb5381a32..76fde8a318db 100644 --- a/op-supervisor/metrics/metrics.go +++ b/op-supervisor/metrics/metrics.go @@ -19,6 +19,9 @@ type Metricer interface { CacheAdd(chainID *big.Int, label string, cacheSize int, evicted bool) CacheGet(chainID *big.Int, label string, hit bool) + RecordDBEntryCount(chainID *big.Int, count int64) + RecordDBSearchEntriesRead(chainID *big.Int, count int64) + Document() []opmetrics.DocumentedMetric } @@ -29,9 +32,12 @@ type Metrics struct { opmetrics.RPCMetrics - SizeVec *prometheus.GaugeVec - GetVec *prometheus.CounterVec - AddVec *prometheus.CounterVec + CacheSizeVec *prometheus.GaugeVec + CacheGetVec *prometheus.CounterVec + CacheAddVec *prometheus.CounterVec + + DBEntryCountVec *prometheus.GaugeVec + DBSearchEntriesReadVec *prometheus.HistogramVec info prometheus.GaugeVec up prometheus.Gauge @@ -71,32 +77,48 @@ func NewMetrics(procName string) *Metrics { Help: "1 if the op-supervisor has finished starting up", }), - SizeVec: factory.NewGaugeVec(prometheus.GaugeOpts{ + CacheSizeVec: factory.NewGaugeVec(prometheus.GaugeOpts{ Namespace: ns, Name: "source_rpc_cache_size", - Help: "source rpc cache cache size", + Help: "Source rpc cache cache size", }, []string{ "chain", "type", }), - GetVec: factory.NewCounterVec(prometheus.CounterOpts{ + CacheGetVec: factory.NewCounterVec(prometheus.CounterOpts{ Namespace: ns, Name: "source_rpc_cache_get", - Help: "source rpc cache lookups, hitting or not", + Help: "Source rpc cache lookups, hitting or not", }, []string{ "chain", "type", "hit", }), - AddVec: factory.NewCounterVec(prometheus.CounterOpts{ + CacheAddVec: factory.NewCounterVec(prometheus.CounterOpts{ Namespace: ns, Name: "source_rpc_cache_add", - Help: "source rpc cache additions, evicting previous values or not", + Help: "Source rpc cache additions, evicting previous values or not", }, []string{ "chain", "type", "evicted", }), + + DBEntryCountVec: factory.NewGaugeVec(prometheus.GaugeOpts{ + Namespace: ns, + Name: "logdb_entries_current", + Help: "Current number of entries in the log database by chain ID", + }, []string{ + "chain", + }), + DBSearchEntriesReadVec: factory.NewHistogramVec(prometheus.HistogramOpts{ + Namespace: ns, + Name: "logdb_search_entries_read", + Help: "Entries read per search of the log database", + Buckets: []float64{1, 2, 5, 10, 100, 200, 256}, + }, []string{ + "chain", + }), } } @@ -120,20 +142,32 @@ func (m *Metrics) RecordUp() { } func (m *Metrics) CacheAdd(chainID *big.Int, label string, cacheSize int, evicted bool) { - chain := chainID.String() - m.SizeVec.WithLabelValues(chain, label).Set(float64(cacheSize)) + chain := chainIDLabel(chainID) + m.CacheSizeVec.WithLabelValues(chain, label).Set(float64(cacheSize)) if evicted { - m.AddVec.WithLabelValues(chain, label, "true").Inc() + m.CacheAddVec.WithLabelValues(chain, label, "true").Inc() } else { - m.AddVec.WithLabelValues(chain, label, "false").Inc() + m.CacheAddVec.WithLabelValues(chain, label, "false").Inc() } } func (m *Metrics) CacheGet(chainID *big.Int, label string, hit bool) { - chain := chainID.String() + chain := chainIDLabel(chainID) if hit { - m.GetVec.WithLabelValues(chain, label, "true").Inc() + m.CacheGetVec.WithLabelValues(chain, label, "true").Inc() } else { - m.GetVec.WithLabelValues(chain, label, "false").Inc() + m.CacheGetVec.WithLabelValues(chain, label, "false").Inc() } } + +func (m *Metrics) RecordDBEntryCount(chainID *big.Int, count int64) { + m.DBEntryCountVec.WithLabelValues(chainIDLabel(chainID)).Set(float64(count)) +} + +func (m *Metrics) RecordDBSearchEntriesRead(chainID *big.Int, count int64) { + m.DBSearchEntriesReadVec.WithLabelValues(chainIDLabel(chainID)).Observe(float64(count)) +} + +func chainIDLabel(chainID *big.Int) string { + return chainID.Text(10) +} diff --git a/op-supervisor/metrics/noop.go b/op-supervisor/metrics/noop.go index 515387e76085..29d023c64ef6 100644 --- a/op-supervisor/metrics/noop.go +++ b/op-supervisor/metrics/noop.go @@ -19,3 +19,6 @@ func (*noopMetrics) RecordUp() {} func (m *noopMetrics) CacheAdd(_ *big.Int, _ string, _ int, _ bool) {} func (m *noopMetrics) CacheGet(_ *big.Int, _ string, _ bool) {} + +func (m *noopMetrics) RecordDBEntryCount(_ *big.Int, _ int64) {} +func (m *noopMetrics) RecordDBSearchEntriesRead(_ *big.Int, _ int64) {} diff --git a/op-supervisor/supervisor/backend/backend.go b/op-supervisor/supervisor/backend/backend.go index eb6b6e3ab235..803aff89fb6d 100644 --- a/op-supervisor/supervisor/backend/backend.go +++ b/op-supervisor/supervisor/backend/backend.go @@ -5,30 +5,28 @@ import ( "errors" "fmt" "io" + "math/big" "sync/atomic" + "time" + "github.com/ethereum-optimism/optimism/op-service/client" + "github.com/ethereum-optimism/optimism/op-service/dial" "github.com/ethereum-optimism/optimism/op-supervisor/config" + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/db" "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/source" + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/frontend" + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/types" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/log" - - "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/frontend" - "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/types" ) -type Metrics interface { - source.Metrics -} - type SupervisorBackend struct { started atomic.Bool logger log.Logger chainMonitors []*source.ChainMonitor - - // TODO(protocol-quest#287): collection of logdbs per chain - // TODO(protocol-quest#288): collection of logdb updating services per chain + logDBs []*db.DB } var _ frontend.Backend = (*SupervisorBackend)(nil) @@ -37,8 +35,23 @@ var _ io.Closer = (*SupervisorBackend)(nil) func NewSupervisorBackend(ctx context.Context, logger log.Logger, m Metrics, cfg *config.Config) (*SupervisorBackend, error) { chainMonitors := make([]*source.ChainMonitor, len(cfg.L2RPCs)) + logDBs := make([]*db.DB, len(cfg.L2RPCs)) for i, rpc := range cfg.L2RPCs { - monitor, err := source.NewChainMonitor(ctx, logger, m, rpc) + rpcClient, chainID, err := createRpcClient(ctx, logger, rpc) + if err != nil { + return nil, err + } + cm := newChainMetrics(chainID, m) + path, err := prepLogDBPath(chainID, cfg.Datadir) + if err != nil { + return nil, fmt.Errorf("failed to create datadir for chain %v: %w", chainID, err) + } + logDB, err := db.NewFromFile(logger, cm, path) + if err != nil { + return nil, fmt.Errorf("failed to create logdb for chain %v at %v: %w", chainID, path, err) + } + logDBs[i] = logDB + monitor, err := source.NewChainMonitor(ctx, logger, cm, chainID, rpc, rpcClient) if err != nil { return nil, fmt.Errorf("failed to create monitor for rpc %v: %w", rpc, err) } @@ -47,14 +60,26 @@ func NewSupervisorBackend(ctx context.Context, logger log.Logger, m Metrics, cfg return &SupervisorBackend{ logger: logger, chainMonitors: chainMonitors, + logDBs: logDBs, }, nil } +func createRpcClient(ctx context.Context, logger log.Logger, rpc string) (client.RPC, *big.Int, error) { + ethClient, err := dial.DialEthClientWithTimeout(ctx, 10*time.Second, logger, rpc) + if err != nil { + return nil, nil, fmt.Errorf("failed to connect to rpc %v: %w", rpc, err) + } + chainID, err := ethClient.ChainID(ctx) + if err != nil { + return nil, nil, fmt.Errorf("failed to load chain id for rpc %v: %w", rpc, err) + } + return client.NewBaseRPCClient(ethClient.Client()), chainID, nil +} + func (su *SupervisorBackend) Start(ctx context.Context) error { if !su.started.CompareAndSwap(false, true) { return errors.New("already started") } - // TODO(protocol-quest#288): start logdb updating services of all chains for _, monitor := range su.chainMonitors { if err := monitor.Start(); err != nil { return fmt.Errorf("failed to start chain monitor: %w", err) @@ -67,13 +92,17 @@ func (su *SupervisorBackend) Stop(ctx context.Context) error { if !su.started.CompareAndSwap(true, false) { return errors.New("already stopped") } - // TODO(protocol-quest#288): stop logdb updating services of all chains var errs error for _, monitor := range su.chainMonitors { if err := monitor.Stop(); err != nil { errs = errors.Join(errs, fmt.Errorf("failed to stop chain monitor: %w", err)) } } + for _, logDB := range su.logDBs { + if err := logDB.Close(); err != nil { + errs = errors.Join(errs, fmt.Errorf("failed to close logdb: %w", err)) + } + } return errs } diff --git a/op-supervisor/supervisor/backend/source/chain_metrics.go b/op-supervisor/supervisor/backend/chain_metrics.go similarity index 56% rename from op-supervisor/supervisor/backend/source/chain_metrics.go rename to op-supervisor/supervisor/backend/chain_metrics.go index 96221d367e8d..8095871ca598 100644 --- a/op-supervisor/supervisor/backend/source/chain_metrics.go +++ b/op-supervisor/supervisor/backend/chain_metrics.go @@ -1,11 +1,20 @@ -package source +package backend import ( "math/big" "github.com/ethereum-optimism/optimism/op-service/sources/caching" + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/db" ) +type Metrics interface { + CacheAdd(chainID *big.Int, label string, cacheSize int, evicted bool) + CacheGet(chainID *big.Int, label string, hit bool) + + RecordDBEntryCount(chainID *big.Int, count int64) + RecordDBSearchEntriesRead(chainID *big.Int, count int64) +} + // chainMetrics is an adapter between the metrics API expected by clients that assume there's only a single chain // and the actual metrics implementation which requires a chain ID to identify the source chain. type chainMetrics struct { @@ -28,4 +37,13 @@ func (c *chainMetrics) CacheGet(label string, hit bool) { c.delegate.CacheGet(c.chainID, label, hit) } +func (c *chainMetrics) RecordDBEntryCount(count int64) { + c.delegate.RecordDBEntryCount(c.chainID, count) +} + +func (c *chainMetrics) RecordDBSearchEntriesRead(count int64) { + c.delegate.RecordDBSearchEntriesRead(c.chainID, count) +} + var _ caching.Metrics = (*chainMetrics)(nil) +var _ db.Metrics = (*chainMetrics)(nil) diff --git a/op-supervisor/supervisor/backend/db/db.go b/op-supervisor/supervisor/backend/db/db.go index 7d83ef4750c8..952ec8f7c3e4 100644 --- a/op-supervisor/supervisor/backend/db/db.go +++ b/op-supervisor/supervisor/backend/db/db.go @@ -28,8 +28,8 @@ const ( ) type Metrics interface { - RecordEntryCount(count int64) - RecordSearchEntriesRead(count int64) + RecordDBEntryCount(count int64) + RecordDBSearchEntriesRead(count int64) } type logContext struct { @@ -166,7 +166,7 @@ func (db *DB) trimInvalidTrailingEntries() error { } func (db *DB) updateEntryCountMetric() { - db.m.RecordEntryCount(db.lastEntryIdx() + 1) + db.m.RecordDBEntryCount(db.lastEntryIdx() + 1) } // ClosestBlockInfo returns the block number and hash of the highest recorded block at or before blockNum. @@ -244,7 +244,7 @@ func (db *DB) findLogInfo(blockNum uint64, logIdx uint32) (TruncatedHash, *itera } db.log.Trace("Starting search", "entry", entryIdx, "blockNum", i.current.blockNum, "logIdx", i.current.logIdx) defer func() { - db.m.RecordSearchEntriesRead(i.entriesRead) + db.m.RecordDBSearchEntriesRead(i.entriesRead) }() for { evtBlockNum, evtLogIdx, evtHash, err := i.NextLog() diff --git a/op-supervisor/supervisor/backend/db/db_test.go b/op-supervisor/supervisor/backend/db/db_test.go index f07a5f4b9c8b..cb3eaf2cd5c6 100644 --- a/op-supervisor/supervisor/backend/db/db_test.go +++ b/op-supervisor/supervisor/backend/db/db_test.go @@ -881,11 +881,11 @@ type stubMetrics struct { entriesReadForSearch int64 } -func (s *stubMetrics) RecordEntryCount(count int64) { +func (s *stubMetrics) RecordDBEntryCount(count int64) { s.entryCount = count } -func (s *stubMetrics) RecordSearchEntriesRead(count int64) { +func (s *stubMetrics) RecordDBSearchEntriesRead(count int64) { s.entriesReadForSearch = count } diff --git a/op-supervisor/supervisor/backend/file_layout.go b/op-supervisor/supervisor/backend/file_layout.go new file mode 100644 index 000000000000..75aa32993c82 --- /dev/null +++ b/op-supervisor/supervisor/backend/file_layout.go @@ -0,0 +1,24 @@ +package backend + +import ( + "fmt" + "math/big" + "os" + "path/filepath" +) + +func prepLogDBPath(chainID *big.Int, datadir string) (string, error) { + dir, err := prepChainDir(chainID, datadir) + if err != nil { + return "", err + } + return filepath.Join(dir, "log.db"), nil +} + +func prepChainDir(chainID *big.Int, datadir string) (string, error) { + dir := filepath.Join(datadir, chainID.Text(10)) + if err := os.MkdirAll(dir, 0755); err != nil { + return "", fmt.Errorf("failed to create chain directory %v: %w", dir, err) + } + return dir, nil +} diff --git a/op-supervisor/supervisor/backend/file_layout_test.go b/op-supervisor/supervisor/backend/file_layout_test.go new file mode 100644 index 000000000000..d75fc1a853ed --- /dev/null +++ b/op-supervisor/supervisor/backend/file_layout_test.go @@ -0,0 +1,28 @@ +package backend + +import ( + "math/big" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestLogDBPath(t *testing.T) { + base := t.TempDir() + chainIDStr := "42984928492928428424243444" + chainID, ok := new(big.Int).SetString(chainIDStr, 10) + require.True(t, ok) + expected := filepath.Join(base, "subdir", chainIDStr, "log.db") + path, err := prepLogDBPath(chainID, filepath.Join(base, "subdir")) + require.NoError(t, err) + require.Equal(t, expected, path) + + // Check it still works when directories exist + require.NoError(t, os.WriteFile(path, []byte("test"), 0o644)) + + path, err = prepLogDBPath(chainID, filepath.Join(base, "subdir")) + require.NoError(t, err) + require.Equal(t, expected, path) +} diff --git a/op-supervisor/supervisor/backend/source/chain.go b/op-supervisor/supervisor/backend/source/chain.go index 4d3d53caafef..abddded82c20 100644 --- a/op-supervisor/supervisor/backend/source/chain.go +++ b/op-supervisor/supervisor/backend/source/chain.go @@ -7,13 +7,11 @@ import ( "time" "github.com/ethereum-optimism/optimism/op-service/client" - "github.com/ethereum-optimism/optimism/op-service/dial" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/sources" "github.com/ethereum-optimism/optimism/op-service/sources/caching" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/rpc" ) // TODO(optimism#11032) Make these configurable and a sensible default @@ -23,8 +21,7 @@ const trustRpc = false const rpcKind = sources.RPCKindStandard type Metrics interface { - CacheAdd(chainID *big.Int, label string, cacheSize int, evicted bool) - CacheGet(chainID *big.Int, label string, hit bool) + caching.Metrics } // ChainMonitor monitors a source L2 chain, retrieving the data required to populate the database and perform @@ -34,19 +31,9 @@ type ChainMonitor struct { headMonitor *HeadMonitor } -func NewChainMonitor(ctx context.Context, logger log.Logger, genericMetrics Metrics, rpc string) (*ChainMonitor, error) { - // First dial a simple client and get the chain ID so we have a simple identifier for the chain. - ethClient, err := dial.DialEthClientWithTimeout(ctx, 10*time.Second, logger, rpc) - if err != nil { - return nil, fmt.Errorf("failed to connect to rpc %v: %w", rpc, err) - } - chainID, err := ethClient.ChainID(ctx) - if err != nil { - return nil, fmt.Errorf("failed to load chain id for rpc %v: %w", rpc, err) - } +func NewChainMonitor(ctx context.Context, logger log.Logger, m Metrics, chainID *big.Int, rpc string, client client.RPC) (*ChainMonitor, error) { logger = logger.New("chainID", chainID) - m := newChainMetrics(chainID, genericMetrics) - cl, err := newClient(ctx, logger, m, rpc, ethClient.Client(), pollInterval, trustRpc, rpcKind) + cl, err := newClient(ctx, logger, m, rpc, client, pollInterval, trustRpc, rpcKind) if err != nil { return nil, err } @@ -85,8 +72,8 @@ func (n *loggingReceiptProcessor) ProcessLogs(_ context.Context, block eth.L1Blo return nil } -func newClient(ctx context.Context, logger log.Logger, m caching.Metrics, rpc string, rpcClient *rpc.Client, pollRate time.Duration, trustRPC bool, kind sources.RPCProviderKind) (*sources.L1Client, error) { - c, err := client.NewRPCWithClient(ctx, logger, rpc, client.NewBaseRPCClient(rpcClient), pollRate) +func newClient(ctx context.Context, logger log.Logger, m caching.Metrics, rpc string, rpcClient client.RPC, pollRate time.Duration, trustRPC bool, kind sources.RPCProviderKind) (*sources.L1Client, error) { + c, err := client.NewRPCWithClient(ctx, logger, rpc, rpcClient, pollRate) if err != nil { return nil, fmt.Errorf("failed to create new RPC client: %w", err) } From 43b1c4c0de81a6828118f34eda7cbd89617487c1 Mon Sep 17 00:00:00 2001 From: Minhyuk Kim Date: Sat, 29 Jun 2024 07:17:06 +0900 Subject: [PATCH 127/141] Add new sync config: l2.enginekind (#10767) * Add new syncmode "force-execution-layer" * Add tests * Add l2.enginekind flag instead of ForceELSync * Move l2EngineClientKind to EngineController * Fix lint * Rename engine.EngineClientKind to engine.Kind and added engineKind.SupportsPostFinalizationELSync() * Refactor EL/CL tests in sync_test.go * Refactor tests in sync_test.go * Rename engine to ec * Incorporate enginekind-specific flags into syncConfig, and hide engine kind from the engine controller logic * Fix tests --------- Co-authored-by: protolambda --- op-e2e/actions/l2_verifier.go | 7 +- op-e2e/actions/span_batch_test.go | 1 + op-e2e/actions/sync_test.go | 281 ++++++++++++--------- op-node/flags/flags.go | 13 + op-node/flags/flags_test.go | 1 + op-node/rollup/driver/driver.go | 2 +- op-node/rollup/engine/engine_controller.go | 14 +- op-node/rollup/engine/engine_kind.go | 54 ++++ op-node/rollup/sync/config.go | 2 + op-node/service.go | 8 +- op-program/client/driver/driver.go | 2 +- 11 files changed, 255 insertions(+), 130 deletions(-) create mode 100644 op-node/rollup/engine/engine_kind.go diff --git a/op-e2e/actions/l2_verifier.go b/op-e2e/actions/l2_verifier.go index cc57f27bda18..5039a0ec79fe 100644 --- a/op-e2e/actions/l2_verifier.go +++ b/op-e2e/actions/l2_verifier.go @@ -37,10 +37,7 @@ import ( type L2Verifier struct { log log.Logger - eng interface { - engine.Engine - L2BlockRefByNumber(ctx context.Context, num uint64) (eth.L2BlockRef, error) - } + eng L2API syncStatus driver.SyncStatusTracker @@ -100,7 +97,7 @@ func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc deri }) metrics := &testutils.TestDerivationMetrics{} - ec := engine.NewEngineController(eng, log, metrics, cfg, syncCfg.SyncMode, synchronousEvents) + ec := engine.NewEngineController(eng, log, metrics, cfg, syncCfg, synchronousEvents) engineResetDeriver := engine.NewEngineResetDeriver(ctx, log, cfg, l1, eng, syncCfg, synchronousEvents) clSync := clsync.NewCLSync(log, cfg, metrics, synchronousEvents) diff --git a/op-e2e/actions/span_batch_test.go b/op-e2e/actions/span_batch_test.go index 180c2c1334bf..20bdd4619a8e 100644 --- a/op-e2e/actions/span_batch_test.go +++ b/op-e2e/actions/span_batch_test.go @@ -5,6 +5,7 @@ import ( "crypto/ecdsa" crand "crypto/rand" "fmt" + "math/big" "math/rand" "testing" diff --git a/op-e2e/actions/sync_test.go b/op-e2e/actions/sync_test.go index a634b9edd5eb..f9917d10e8b5 100644 --- a/op-e2e/actions/sync_test.go +++ b/op-e2e/actions/sync_test.go @@ -10,7 +10,7 @@ import ( "github.com/stretchr/testify/require" "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/beacon/engine" + gethengine "github.com/ethereum/go-ethereum/beacon/engine" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" @@ -23,6 +23,7 @@ import ( engine2 "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-node/rollup/event" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" + plasma "github.com/ethereum-optimism/optimism/op-plasma" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/sources" "github.com/ethereum-optimism/optimism/op-service/testlog" @@ -585,7 +586,7 @@ func TestBackupUnsafeReorgForkChoiceNotInputError(gt *testing.T) { serverErrCnt := 2 for i := 0; i < serverErrCnt; i++ { // mock forkChoiceUpdate failure while restoring previous unsafe chain using backupUnsafe. - seqEng.ActL2RPCFail(t, engine.GenericServerError) + seqEng.ActL2RPCFail(t, gethengine.GenericServerError) // TryBackupUnsafeReorg is called - forkChoiceUpdate returns GenericServerError so retry sequencer.ActL2EventsUntil(t, event.Is[rollup.EngineTemporaryErrorEvent], 100, false) // backupUnsafeHead not emptied yet @@ -608,25 +609,15 @@ func TestBackupUnsafeReorgForkChoiceNotInputError(gt *testing.T) { require.Equal(t, sequencer.L2Safe().Number, uint64(0)) } -// TestELSync tests that a verifier will have the EL import the full chain from the sequencer -// when passed a single unsafe block. op-geth can either snap sync or full sync here. -func TestELSync(gt *testing.T) { - t := NewDefaultTesting(gt) - dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) - sd := e2eutils.Setup(t, dp, defaultAlloc) - log := testlog.Logger(t, log.LevelInfo) - - miner, seqEng, sequencer := setupSequencerTest(t, sd, log) - // Enable engine P2P sync - verEng, verifier := setupVerifier(t, sd, log, miner.L1Client(t, sd.RollupCfg), miner.BlobStore(), &sync.Config{SyncMode: sync.ELSync}) - - seqEngCl, err := sources.NewEngineClient(seqEng.RPCClient(), log, nil, sources.EngineClientDefaultConfig(sd.RollupCfg)) - require.NoError(t, err) - +// builds l2 blocks within the specified range `from` - `to` +// and performs an EL sync between the sequencer and the verifier, +// then checks the validity of the payloads within a specified block range. +func PerformELSyncAndCheckPayloads(t Testing, miner *L1Miner, seqEng *L2Engine, sequencer *L2Sequencer, verEng *L2Engine, verifier *L2Verifier, seqEngCl *sources.EngineClient, from, to uint64) { + miner.ActEmptyBlock(t) sequencer.ActL2PipelineFull(t) - // Build 10 L1 blocks on the sequencer - for i := 0; i < 10; i++ { + // Build L1 blocks on the sequencer + for i := from; i < to; i++ { // Build a L2 block sequencer.ActL2StartBlock(t) sequencer.ActL2EndBlock(t) @@ -638,7 +629,7 @@ func TestELSync(gt *testing.T) { // Insert it on the verifier seqHead, err := seqEngCl.PayloadByLabel(t.Ctx(), eth.Unsafe) require.NoError(t, err) - seqStart, err := seqEngCl.PayloadByNumber(t.Ctx(), 1) + seqStart, err := seqEngCl.PayloadByNumber(t.Ctx(), from) require.NoError(t, err) verifier.ActL2InsertUnsafePayload(seqHead)(t) @@ -654,7 +645,7 @@ func TestELSync(gt *testing.T) { // Verify this by checking that the verifier has the correct value for block 1 require.Eventually(t, func() bool { - block, err := verifier.eng.L2BlockRefByNumber(t.Ctx(), 1) + block, err := verifier.eng.L2BlockRefByNumber(t.Ctx(), from) if err != nil { return false } @@ -665,6 +656,69 @@ func TestELSync(gt *testing.T) { ) } +// verifies that a specific block number on the L2 engine has the expected label. +func VerifyBlock(t Testing, engine L2API, number uint64, label eth.BlockLabel) { + id, err := engine.L2BlockRefByLabel(t.Ctx(), label) + require.NoError(t, err) + require.Equal(t, number, id.Number) +} + +// submits batch at a specified block number +func BatchSubmitBlock(t Testing, miner *L1Miner, sequencer *L2Sequencer, verifier *L2Verifier, batcher *L2Batcher, dp *e2eutils.DeployParams, number uint64) { + sequencer.ActL2StartBlock(t) + sequencer.ActL2EndBlock(t) + batcher.ActSubmitAll(t) + miner.ActL1StartBlock(number)(t) + miner.ActL1IncludeTx(dp.Addresses.Batcher)(t) + miner.ActL1EndBlock(t) + sequencer.ActL2PipelineFull(t) + verifier.ActL2PipelineFull(t) +} + +// TestELSync tests that a verifier will have the EL import the full chain from the sequencer +// when passed a single unsafe block. op-geth can either snap sync or full sync here. +func TestELSync(gt *testing.T) { + t := NewDefaultTesting(gt) + dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) + sd := e2eutils.Setup(t, dp, defaultAlloc) + log := testlog.Logger(t, log.LevelInfo) + + miner, seqEng, sequencer := setupSequencerTest(t, sd, log) + // Enable engine P2P sync + verEng, verifier := setupVerifier(t, sd, log, miner.L1Client(t, sd.RollupCfg), miner.BlobStore(), &sync.Config{SyncMode: sync.ELSync}) + + seqEngCl, err := sources.NewEngineClient(seqEng.RPCClient(), log, nil, sources.EngineClientDefaultConfig(sd.RollupCfg)) + require.NoError(t, err) + + PerformELSyncAndCheckPayloads(t, miner, seqEng, sequencer, verEng, verifier, seqEngCl, 0, 10) +} + +func PrepareELSyncedNode(t Testing, miner *L1Miner, sequencer *L2Sequencer, seqEng *L2Engine, verifier *L2Verifier, verEng *L2Engine, seqEngCl *sources.EngineClient, batcher *L2Batcher, dp *e2eutils.DeployParams) { + PerformELSyncAndCheckPayloads(t, miner, seqEng, sequencer, verEng, verifier, seqEngCl, 0, 10) + + // Despite downloading the blocks, it has not finished finalizing + _, err := verifier.eng.L2BlockRefByLabel(t.Ctx(), "safe") + require.ErrorIs(t, err, ethereum.NotFound) + + // Insert a block on the verifier to end snap sync + sequencer.ActL2StartBlock(t) + sequencer.ActL2EndBlock(t) + seqHead, err := seqEngCl.PayloadByLabel(t.Ctx(), eth.Unsafe) + require.NoError(t, err) + verifier.ActL2InsertUnsafePayload(seqHead)(t) + + // Check that safe + finalized are there + VerifyBlock(t, verifier.eng, 11, eth.Safe) + VerifyBlock(t, verifier.eng, 11, eth.Finalized) + + // Batch submit everything + BatchSubmitBlock(t, miner, sequencer, verifier, batcher, dp, 12) + + // Verify that the batch submitted blocks are there now + VerifyBlock(t, sequencer.eng, 12, eth.Safe) + VerifyBlock(t, verifier.eng, 12, eth.Safe) +} + // TestELSyncTransitionstoCL tests that a verifier which starts with EL sync can switch back to a proper CL sync. // It takes a sequencer & verifier through the following: // 1. Build 10 unsafe blocks on the sequencer @@ -692,83 +746,7 @@ func TestELSyncTransitionstoCL(gt *testing.T) { seqEngCl, err := sources.NewEngineClient(seqEng.RPCClient(), logger, nil, sources.EngineClientDefaultConfig(sd.RollupCfg)) require.NoError(t, err) - miner.ActEmptyBlock(t) - sequencer.ActL2PipelineFull(t) - - // Build 10 L1 blocks on the sequencer - for i := 0; i < 10; i++ { - // Build a L2 block - sequencer.ActL2StartBlock(t) - sequencer.ActL2EndBlock(t) - } - - // Wait longer to peer. This tests flakes or takes a long time when the op-geth instances are not able to peer. - verEng.AddPeers(seqEng.Enode()) - - // Insert it on the verifier - seqHead, err := seqEngCl.PayloadByLabel(t.Ctx(), eth.Unsafe) - require.NoError(t, err) - seqStart, err := seqEngCl.PayloadByNumber(t.Ctx(), 1) - require.NoError(t, err) - verifier.ActL2InsertUnsafePayload(seqHead)(t) - - require.Eventually(t, - func() bool { - return seqEng.PeerCount() > 0 && verEng.PeerCount() > 0 - }, - 120*time.Second, 1500*time.Millisecond, - "Sequencer & Verifier must peer with each other for snap sync to work", - ) - - // Expect snap sync to download & execute the entire chain - // Verify this by checking that the verifier has the correct value for block 1 - require.Eventually(t, - func() bool { - block, err := verifier.eng.L2BlockRefByNumber(t.Ctx(), 1) - if err != nil { - return false - } - return seqStart.ExecutionPayload.BlockHash == block.Hash - }, - 60*time.Second, 1500*time.Millisecond, - "verifier did not snap sync", - ) - // Despite downloading the blocks, it has not finished finalizing - _, err = verifier.eng.L2BlockRefByLabel(t.Ctx(), "safe") - require.ErrorIs(t, err, ethereum.NotFound) - - // Insert a block on the verifier to end snap sync - sequencer.ActL2StartBlock(t) - sequencer.ActL2EndBlock(t) - seqHead, err = seqEngCl.PayloadByLabel(t.Ctx(), eth.Unsafe) - require.NoError(t, err) - verifier.ActL2InsertUnsafePayload(seqHead)(t) - - // Check that safe + finalized are there - id, err := verifier.eng.L2BlockRefByLabel(t.Ctx(), eth.Safe) - require.Equal(t, uint64(11), id.Number) - require.NoError(t, err) - id, err = verifier.eng.L2BlockRefByLabel(t.Ctx(), eth.Finalized) - require.Equal(t, uint64(11), id.Number) - require.NoError(t, err) - - // Batch submit everything - sequencer.ActL2StartBlock(t) - sequencer.ActL2EndBlock(t) - batcher.ActSubmitAll(t) - miner.ActL1StartBlock(12)(t) - miner.ActL1IncludeTx(dp.Addresses.Batcher)(t) - miner.ActL1EndBlock(t) - sequencer.ActL2PipelineFull(t) - verifier.ActL2PipelineFull(t) - - // Verify that the batch submitted blocks are there now - id, err = sequencer.eng.L2BlockRefByLabel(t.Ctx(), eth.Safe) - require.NoError(t, err) - require.Equal(t, uint64(12), id.Number) - id, err = verifier.eng.L2BlockRefByLabel(t.Ctx(), eth.Safe) - require.NoError(t, err) - require.Equal(t, uint64(12), id.Number) + PrepareELSyncedNode(t, miner, sequencer, seqEng, verifier, verEng, seqEngCl, batcher, dp) // Build another 10 L1 blocks on the sequencer for i := 0; i < 10; i++ { @@ -780,7 +758,7 @@ func TestELSyncTransitionstoCL(gt *testing.T) { // Now pass payloads to the derivation pipeline // This is a little hacky that we have to manually switch between InsertBlock // and UnsafeGossipReceive in the tests - seqHead, err = seqEngCl.PayloadByLabel(t.Ctx(), eth.Unsafe) + seqHead, err := seqEngCl.PayloadByLabel(t.Ctx(), eth.Unsafe) require.NoError(t, err) verifier.ActL2UnsafeGossipReceive(seqHead)(t) verifier.ActL2PipelineFull(t) @@ -799,27 +777,102 @@ func TestELSyncTransitionstoCL(gt *testing.T) { // This was failing prior to PR 9661 because op-node would attempt to immediately insert blocks into the EL inside the engine queue. op-geth // would not be able to fetch the second range of blocks & it would wipe out the unsafe payloads queue because op-node thought that it had a // higher unsafe block but op-geth did not. - id, err = verifier.eng.L2BlockRefByLabel(t.Ctx(), eth.Unsafe) - require.NoError(t, err) - require.Equal(t, uint64(22), id.Number) + VerifyBlock(t, verifier.eng, 22, eth.Unsafe) // Create 1 more block & batch submit everything - sequencer.ActL2StartBlock(t) - sequencer.ActL2EndBlock(t) - batcher.ActSubmitAll(t) - miner.ActL1StartBlock(12)(t) - miner.ActL1IncludeTx(dp.Addresses.Batcher)(t) - miner.ActL1EndBlock(t) - sequencer.ActL2PipelineFull(t) - verifier.ActL2PipelineFull(t) + BatchSubmitBlock(t, miner, sequencer, verifier, batcher, dp, 12) // Verify that the batch submitted blocks are there now - id, err = sequencer.eng.L2BlockRefByLabel(t.Ctx(), eth.Safe) + VerifyBlock(t, sequencer.eng, 23, eth.Safe) + VerifyBlock(t, verifier.eng, 23, eth.Safe) +} + +func TestELSyncTransitionsToCLSyncAfterNodeRestart(gt *testing.T) { + t := NewDefaultTesting(gt) + dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) + sd := e2eutils.Setup(t, dp, defaultAlloc) + logger := testlog.Logger(t, log.LevelInfo) + + captureLog, captureLogHandler := testlog.CaptureLogger(t, log.LevelInfo) + + miner, seqEng, sequencer := setupSequencerTest(t, sd, logger) + batcher := NewL2Batcher(logger, sd.RollupCfg, DefaultBatcherCfg(dp), sequencer.RollupClient(), miner.EthClient(), seqEng.EthClient(), seqEng.EngineClient(t, sd.RollupCfg)) + // Enable engine P2P sync + verEng, verifier := setupVerifier(t, sd, captureLog, miner.L1Client(t, sd.RollupCfg), miner.BlobStore(), &sync.Config{SyncMode: sync.ELSync}) + + seqEngCl, err := sources.NewEngineClient(seqEng.RPCClient(), logger, nil, sources.EngineClientDefaultConfig(sd.RollupCfg)) + require.NoError(t, err) + + PrepareELSyncedNode(t, miner, sequencer, seqEng, verifier, verEng, seqEngCl, batcher, dp) + + // Create a new verifier which is essentially a new op-node with the sync mode of ELSync and default geth engine kind. + verifier = NewL2Verifier(t, captureLog, miner.L1Client(t, sd.RollupCfg), miner.BlobStore(), plasma.Disabled, verifier.eng, sd.RollupCfg, &sync.Config{SyncMode: sync.ELSync}, defaultVerifierCfg().safeHeadListener) + + // Build another 10 L1 blocks on the sequencer + for i := 0; i < 10; i++ { + // Build a L2 block + sequencer.ActL2StartBlock(t) + sequencer.ActL2EndBlock(t) + } + + // Insert new block to the engine and kick off a CL sync + seqHead, err := seqEngCl.PayloadByLabel(t.Ctx(), eth.Unsafe) + require.NoError(t, err) + verifier.ActL2InsertUnsafePayload(seqHead)(t) + + // Verify that the derivation pipeline did not request a sync to the new head. This is the core of the test, but a little fragile. + record := captureLogHandler.FindLog(testlog.NewMessageFilter("Forkchoice requested sync to new head"), testlog.NewAttributesFilter("number", "22")) + require.Nil(t, record, "The verifier should not request to sync to block number 22 because it is in CL mode, not EL mode at this point.") + + // Verify that op-node has skipped ELSync and started CL sync because geth has finalized block from ELSync. + record = captureLogHandler.FindLog(testlog.NewMessageFilter("Skipping EL sync and going straight to CL sync because there is a finalized block")) + require.NotNil(t, record, "The verifier should skip EL Sync at this point.") +} + +func TestForcedELSyncCLAfterNodeRestart(gt *testing.T) { + t := NewDefaultTesting(gt) + dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) + sd := e2eutils.Setup(t, dp, defaultAlloc) + logger := testlog.Logger(t, log.LevelInfo) + + captureLog, captureLogHandler := testlog.CaptureLogger(t, log.LevelInfo) + + miner, seqEng, sequencer := setupSequencerTest(t, sd, logger) + batcher := NewL2Batcher(logger, sd.RollupCfg, DefaultBatcherCfg(dp), sequencer.RollupClient(), miner.EthClient(), seqEng.EthClient(), seqEng.EngineClient(t, sd.RollupCfg)) + // Enable engine P2P sync + verEng, verifier := setupVerifier(t, sd, captureLog, miner.L1Client(t, sd.RollupCfg), miner.BlobStore(), &sync.Config{SyncMode: sync.ELSync}) + + seqEngCl, err := sources.NewEngineClient(seqEng.RPCClient(), logger, nil, sources.EngineClientDefaultConfig(sd.RollupCfg)) require.NoError(t, err) - require.Equal(t, uint64(23), id.Number) - id, err = verifier.eng.L2BlockRefByLabel(t.Ctx(), eth.Safe) + + PrepareELSyncedNode(t, miner, sequencer, seqEng, verifier, verEng, seqEngCl, batcher, dp) + + // Create a new verifier which is essentially a new op-node with the sync mode of ELSync and erigon engine kind. + verifier2 := NewL2Verifier(t, captureLog, miner.L1Client(t, sd.RollupCfg), miner.BlobStore(), plasma.Disabled, verifier.eng, sd.RollupCfg, &sync.Config{SyncMode: sync.ELSync, SupportsPostFinalizationELSync: true}, defaultVerifierCfg().safeHeadListener) + + // Build another 10 L1 blocks on the sequencer + for i := 0; i < 10; i++ { + // Build a L2 block + sequencer.ActL2StartBlock(t) + sequencer.ActL2EndBlock(t) + } + + // Insert it on the verifier and kick off EL sync. + // Syncing doesn't actually work in test, + // but we can validate the engine is starting EL sync through p2p + seqHead, err := seqEngCl.PayloadByLabel(t.Ctx(), eth.Unsafe) require.NoError(t, err) - require.Equal(t, uint64(23), id.Number) + verifier2.ActL2InsertUnsafePayload(seqHead)(t) + + // Verify that the derivation pipeline did not request a sync to the new head. This is the core of the test, but a little fragile. + record := captureLogHandler.FindLog(testlog.NewMessageFilter("Forkchoice requested sync to new head"), testlog.NewAttributesFilter("number", "22")) + require.NotNil(t, record, "The verifier should request to sync to block number 22 in EL mode") + + // Verify that op-node is starting ELSync. + record = captureLogHandler.FindLog(testlog.NewMessageFilter("Skipping EL sync and going straight to CL sync because there is a finalized block")) + require.Nil(t, record, "The verifier should start EL Sync when l2.engineKind is not geth") + record = captureLogHandler.FindLog(testlog.NewMessageFilter("Starting EL sync")) + require.NotNil(t, record, "The verifier should start EL Sync when l2.engineKind is not geth") } func TestInvalidPayloadInSpanBatch(gt *testing.T) { diff --git a/op-node/flags/flags.go b/op-node/flags/flags.go index 3af45e3ac12c..16333a39db63 100644 --- a/op-node/flags/flags.go +++ b/op-node/flags/flags.go @@ -6,6 +6,7 @@ import ( "github.com/urfave/cli/v2" + "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" plasma "github.com/ethereum-optimism/optimism/op-plasma" openum "github.com/ethereum-optimism/optimism/op-service/enum" @@ -191,6 +192,17 @@ var ( Value: time.Second * 12, Category: L1RPCCategory, } + L2EngineKind = &cli.GenericFlag{ + Name: "l2.enginekind", + Usage: "The kind of engine client, used to control the behavior of optimism in respect to different types of engine clients. Valid options: " + + openum.EnumString(engine.Kinds), + EnvVars: prefixEnvVars("L2_ENGINE_KIND"), + Value: func() *engine.Kind { + out := engine.Geth + return &out + }(), + Category: RollupCategory, + } VerifierL1Confs = &cli.Uint64Flag{ Name: "verifier.l1-confs", Usage: "Number of L1 blocks to keep distance from the L1 head before deriving L2 data from. Reorgs are supported, but may be slow to perform.", @@ -404,6 +416,7 @@ var optionalFlags = []cli.Flag{ ConductorRpcFlag, ConductorRpcTimeoutFlag, SafeDBPath, + L2EngineKind, } var DeprecatedFlags = []cli.Flag{ diff --git a/op-node/flags/flags_test.go b/op-node/flags/flags_test.go index 3a94041c7e6f..942d0f4967f8 100644 --- a/op-node/flags/flags_test.go +++ b/op-node/flags/flags_test.go @@ -110,6 +110,7 @@ func TestEnvVarFormat(t *testing.T) { L2EngineJWTSecret.Name, L1TrustRPC.Name, L1RPCProviderKind.Name, + L2EngineKind.Name, SnapshotLog.Name, BackupL2UnsafeSyncRPC.Name, BackupL2UnsafeSyncRPCTrustRPC.Name, diff --git a/op-node/rollup/driver/driver.go b/op-node/rollup/driver/driver.go index e24a3a78bec6..75531c42dfcd 100644 --- a/op-node/rollup/driver/driver.go +++ b/op-node/rollup/driver/driver.go @@ -194,7 +194,7 @@ func NewDriver( sequencerConfDepth := NewConfDepth(driverCfg.SequencerConfDepth, statusTracker.L1Head, l1) findL1Origin := NewL1OriginSelector(log, cfg, sequencerConfDepth) verifConfDepth := NewConfDepth(driverCfg.VerifierConfDepth, statusTracker.L1Head, l1) - ec := engine.NewEngineController(l2, log, metrics, cfg, syncCfg.SyncMode, synchronousEvents) + ec := engine.NewEngineController(l2, log, metrics, cfg, syncCfg, synchronousEvents) engineResetDeriver := engine.NewEngineResetDeriver(driverCtx, log, cfg, l1, l2, syncCfg, synchronousEvents) clSync := clsync.NewCLSync(log, cfg, metrics, synchronousEvents) diff --git a/op-node/rollup/engine/engine_controller.go b/op-node/rollup/engine/engine_controller.go index fa6b6fd88d85..b963be4a59ee 100644 --- a/op-node/rollup/engine/engine_controller.go +++ b/op-node/rollup/engine/engine_controller.go @@ -48,7 +48,7 @@ type EngineController struct { engine ExecEngine // Underlying execution engine RPC log log.Logger metrics derive.Metrics - syncMode sync.Mode + syncCfg *sync.Config syncStatus syncStatusEnum chainSpec *rollup.ChainSpec rollupCfg *rollup.Config @@ -79,9 +79,9 @@ type EngineController struct { } func NewEngineController(engine ExecEngine, log log.Logger, metrics derive.Metrics, - rollupCfg *rollup.Config, syncMode sync.Mode, emitter event.Emitter) *EngineController { + rollupCfg *rollup.Config, syncCfg *sync.Config, emitter event.Emitter) *EngineController { syncStatus := syncStatusCL - if syncMode == sync.ELSync { + if syncCfg.SyncMode == sync.ELSync { syncStatus = syncStatusWillStartEL } @@ -91,7 +91,7 @@ func NewEngineController(engine ExecEngine, log log.Logger, metrics derive.Metri metrics: metrics, chainSpec: rollup.NewChainSpec(rollupCfg), rollupCfg: rollupCfg, - syncMode: syncMode, + syncCfg: syncCfg, syncStatus: syncStatus, clock: clock.SystemClock, emitter: emitter, @@ -329,7 +329,7 @@ func (e *EngineController) resetBuildingState() { // checkNewPayloadStatus checks returned status of engine_newPayloadV1 request for next unsafe payload. // It returns true if the status is acceptable. func (e *EngineController) checkNewPayloadStatus(status eth.ExecutePayloadStatus) bool { - if e.syncMode == sync.ELSync { + if e.syncCfg.SyncMode == sync.ELSync { if status == eth.ExecutionValid && e.syncStatus == syncStatusStartedEL { e.syncStatus = syncStatusFinishedELButNotFinalized } @@ -342,7 +342,7 @@ func (e *EngineController) checkNewPayloadStatus(status eth.ExecutePayloadStatus // checkForkchoiceUpdatedStatus checks returned status of engine_forkchoiceUpdatedV1 request for next unsafe payload. // It returns true if the status is acceptable. func (e *EngineController) checkForkchoiceUpdatedStatus(status eth.ExecutePayloadStatus) bool { - if e.syncMode == sync.ELSync { + if e.syncCfg.SyncMode == sync.ELSync { if status == eth.ExecutionValid && e.syncStatus == syncStatusStartedEL { e.syncStatus = syncStatusFinishedELButNotFinalized } @@ -398,7 +398,7 @@ func (e *EngineController) InsertUnsafePayload(ctx context.Context, envelope *et if e.syncStatus == syncStatusWillStartEL { b, err := e.engine.L2BlockRefByLabel(ctx, eth.Finalized) rollupGenesisIsFinalized := b.Hash == e.rollupCfg.Genesis.L2.Hash - if errors.Is(err, ethereum.NotFound) || rollupGenesisIsFinalized { + if errors.Is(err, ethereum.NotFound) || rollupGenesisIsFinalized || e.syncCfg.SupportsPostFinalizationELSync { e.syncStatus = syncStatusStartedEL e.log.Info("Starting EL sync") e.elStart = e.clock.Now() diff --git a/op-node/rollup/engine/engine_kind.go b/op-node/rollup/engine/engine_kind.go new file mode 100644 index 000000000000..aa218cd73d14 --- /dev/null +++ b/op-node/rollup/engine/engine_kind.go @@ -0,0 +1,54 @@ +package engine + +import "fmt" + +// Kind identifies the engine client's kind, used to control the behavior of optimism in different engine clients. +type Kind string + +const ( + Geth Kind = "geth" + Reth Kind = "reth" + Erigon Kind = "erigon" +) + +var Kinds = []Kind{ + Geth, + Reth, + Erigon, +} + +func (kind Kind) String() string { + return string(kind) +} + +func (kind *Kind) Set(value string) error { + if !ValidEngineKind(Kind(value)) { + return fmt.Errorf("unknown engine client kind: %q", value) + } + *kind = Kind(value) + return nil +} + +func (kind *Kind) Clone() any { + cpy := *kind + return &cpy +} + +func (kind Kind) SupportsPostFinalizationELSync() bool { + switch kind { + case Geth: + return false + case Erigon, Reth: + return true + } + return false +} + +func ValidEngineKind(value Kind) bool { + for _, k := range Kinds { + if k == value { + return true + } + } + return false +} diff --git a/op-node/rollup/sync/config.go b/op-node/rollup/sync/config.go index 965d7c127cc4..4e36092aaaf3 100644 --- a/op-node/rollup/sync/config.go +++ b/op-node/rollup/sync/config.go @@ -70,4 +70,6 @@ type Config struct { // Note: We probably need to detect the condition that snap sync has not complete when we do a restart prior to running sync-start if we are doing // snap sync with a genesis finalization data. SkipSyncStartCheck bool `json:"skip_sync_start_check"` + + SupportsPostFinalizationELSync bool `json:"supports_post_finalization_elsync"` } diff --git a/op-node/service.go b/op-node/service.go index 3d68c85bd235..c9907e1cb7c5 100644 --- a/op-node/service.go +++ b/op-node/service.go @@ -23,6 +23,7 @@ import ( p2pcli "github.com/ethereum-optimism/optimism/op-node/p2p/cli" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/driver" + "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" opflags "github.com/ethereum-optimism/optimism/op-service/flags" ) @@ -269,9 +270,12 @@ func NewSyncConfig(ctx *cli.Context, log log.Logger) (*sync.Config, error) { if err != nil { return nil, err } + + engineKind := engine.Kind(ctx.String(flags.L2EngineKind.Name)) cfg := &sync.Config{ - SyncMode: mode, - SkipSyncStartCheck: ctx.Bool(flags.SkipSyncStartCheck.Name), + SyncMode: mode, + SkipSyncStartCheck: ctx.Bool(flags.SkipSyncStartCheck.Name), + SupportsPostFinalizationELSync: engineKind.SupportsPostFinalizationELSync(), } if ctx.Bool(flags.L2EngineSyncEnabled.Name) { cfg.SyncMode = sync.ELSync diff --git a/op-program/client/driver/driver.go b/op-program/client/driver/driver.go index 247289a30673..1cdacf813b39 100644 --- a/op-program/client/driver/driver.go +++ b/op-program/client/driver/driver.go @@ -39,7 +39,7 @@ func NewDriver(logger log.Logger, cfg *rollup.Config, l1Source derive.L1Fetcher, pipeline := derive.NewDerivationPipeline(logger, cfg, l1Source, l1BlobsSource, plasma.Disabled, l2Source, metrics.NoopMetrics) pipelineDeriver := derive.NewPipelineDeriver(context.Background(), pipeline, d) - ec := engine.NewEngineController(l2Source, logger, metrics.NoopMetrics, cfg, sync.CLSync, d) + ec := engine.NewEngineController(l2Source, logger, metrics.NoopMetrics, cfg, &sync.Config{SyncMode: sync.CLSync}, d) engineDeriv := engine.NewEngDeriver(logger, context.Background(), cfg, ec, d) syncCfg := &sync.Config{SyncMode: sync.CLSync} engResetDeriv := engine.NewEngineResetDeriver(context.Background(), logger, cfg, l1Source, l2Source, syncCfg, d) From 9032b6057d474edac67bbc06c2642cc99f7a99c1 Mon Sep 17 00:00:00 2001 From: Kien Trinh <51135161+kien6034@users.noreply.github.com> Date: Sat, 29 Jun 2024 05:37:55 +0700 Subject: [PATCH 128/141] perf(op-service/dial/rollup_sync): init timer outside of the loop (#10990) * perf: use go ticker to handle time management in rollup sync * fix: ticker does not accept no negative value * bet --- op-service/dial/rollup_sync.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/op-service/dial/rollup_sync.go b/op-service/dial/rollup_sync.go index 59f40488cab5..3f9a07f677d0 100644 --- a/op-service/dial/rollup_sync.go +++ b/op-service/dial/rollup_sync.go @@ -15,6 +15,9 @@ func WaitRollupSync( l1BlockTarget uint64, pollInterval time.Duration, ) error { + timer := time.NewTimer(pollInterval) + defer timer.Stop() + for { syncst, err := rollup.SyncStatus(ctx) if err != nil { @@ -29,12 +32,12 @@ func WaitRollupSync( } lgr.Info("rollup current L1 block still behind target, retrying") - timer := time.NewTimer(pollInterval) + + timer.Reset(pollInterval) select { case <-timer.C: // next try case <-ctx.Done(): lgr.Warn("waiting for rollup sync timed out") - timer.Stop() return ctx.Err() } } From b219b8489ecd310f5ea6827ee78c325b1a61233b Mon Sep 17 00:00:00 2001 From: zhiqiangxu <652732310@qq.com> Date: Sat, 29 Jun 2024 06:50:47 +0800 Subject: [PATCH 129/141] fix `BuildBlocksValidator`: use bytes buffer pool correctly (#10965) * use bytes buffer poll correctly * only update res if data is larger * fix comment about block version * simplify a bit by shortcut * op-node: preserve largest bytes buf capacity --------- Co-authored-by: protolambda --- op-node/p2p/gossip.go | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/op-node/p2p/gossip.go b/op-node/p2p/gossip.go index 89920867eb60..f835dfb2f163 100644 --- a/op-node/p2p/gossip.go +++ b/op-node/p2p/gossip.go @@ -103,8 +103,11 @@ func BuildMsgIdFn(cfg *rollup.Config) pubsub.MsgIdFunction { if err == nil && dLen <= maxGossipSize { res := msgBufPool.Get().(*[]byte) defer msgBufPool.Put(res) - if data, err = snappy.Decode((*res)[:0], pmsg.Data); err == nil { - *res = data // if we ended up growing the slice capacity, fine, keep the larger one. + if data, err = snappy.Decode((*res)[:cap(*res)], pmsg.Data); err == nil { + if cap(data) > cap(*res) { + // if we ended up growing the slice capacity, fine, keep the larger one. + *res = data[:cap(data)] + } valid = true } } @@ -274,12 +277,15 @@ func BuildBlocksValidator(log log.Logger, cfg *rollup.Config, runCfg GossipRunti res := msgBufPool.Get().(*[]byte) defer msgBufPool.Put(res) - data, err := snappy.Decode((*res)[:0], message.Data) + data, err := snappy.Decode((*res)[:cap(*res)], message.Data) if err != nil { log.Warn("invalid snappy compression", "err", err, "peer", id) return pubsub.ValidationReject } - *res = data // if we ended up growing the slice capacity, fine, keep the larger one. + // if we ended up growing the slice capacity, fine, keep the larger one. + if cap(data) > cap(*res) { + *res = data[:cap(data)] + } // message starts with compact-encoding secp256k1 encoded signature signatureBytes, payloadBytes := data[:65], data[65:] @@ -336,13 +342,13 @@ func BuildBlocksValidator(log log.Logger, cfg *rollup.Config, runCfg GossipRunti return pubsub.ValidationReject } - // [REJECT] if a V2 Block does not have withdrawals + // [REJECT] if a >= V2 Block does not have withdrawals if blockVersion.HasWithdrawals() && payload.Withdrawals == nil { log.Warn("payload is on v2/v3 topic, but does not have withdrawals", "bad_hash", payload.BlockHash.String()) return pubsub.ValidationReject } - // [REJECT] if a V2 Block has non-empty withdrawals + // [REJECT] if a >= V2 Block has non-empty withdrawals if blockVersion.HasWithdrawals() && len(*payload.Withdrawals) != 0 { log.Warn("payload is on v2/v3 topic, but has non-empty withdrawals", "bad_hash", payload.BlockHash.String(), "withdrawal_count", len(*payload.Withdrawals)) return pubsub.ValidationReject @@ -362,13 +368,13 @@ func BuildBlocksValidator(log log.Logger, cfg *rollup.Config, runCfg GossipRunti if blockVersion.HasBlobProperties() { // [REJECT] if the block is on a topic >= V3 and has a blob gas used value that is not zero - if payload.BlobGasUsed == nil || (payload.BlobGasUsed != nil && *payload.BlobGasUsed != 0) { + if payload.BlobGasUsed == nil || *payload.BlobGasUsed != 0 { log.Warn("payload is on v3 topic, but has non-zero blob gas used", "bad_hash", payload.BlockHash.String(), "blob_gas_used", payload.BlobGasUsed) return pubsub.ValidationReject } // [REJECT] if the block is on a topic >= V3 and has an excess blob gas value that is not zero - if payload.ExcessBlobGas == nil || (payload.ExcessBlobGas != nil && *payload.ExcessBlobGas != 0) { + if payload.ExcessBlobGas == nil || *payload.ExcessBlobGas != 0 { log.Warn("payload is on v3 topic, but has non-zero excess blob gas", "bad_hash", payload.BlockHash.String(), "excess_blob_gas", payload.ExcessBlobGas) return pubsub.ValidationReject } From 5204a7da4d275607572aa6cfe5e08f14397f7b02 Mon Sep 17 00:00:00 2001 From: Tien Nguyen Date: Sat, 29 Jun 2024 06:06:27 +0700 Subject: [PATCH 130/141] op-service: add unit test cover address.go file (#11049) --- op-service/eth/address_test.go | 36 ++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 op-service/eth/address_test.go diff --git a/op-service/eth/address_test.go b/op-service/eth/address_test.go new file mode 100644 index 000000000000..290532244a73 --- /dev/null +++ b/op-service/eth/address_test.go @@ -0,0 +1,36 @@ +package eth + +import ( + "testing" + + "github.com/ethereum/go-ethereum/common" +) + +func TestAddressAsLeftPaddedHash(t *testing.T) { + // Test cases with different addresses + testCases := []struct { + name string + addr common.Address + expect common.Hash + }{ + { + name: "empty address", + addr: common.Address{}, + expect: common.HexToHash("0x0000000000000000000000000000000000000000"), + }, + { + name: "simple address", + addr: common.HexToAddress("0x1234567890AbCdEf1234567890AbCdEf"), + expect: common.HexToHash("0x000000000000000000000000000000001234567890abcdef1234567890abcdef"), + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + output := AddressAsLeftPaddedHash(tc.addr) + if output != tc.expect { + t.Fatalf("Expected output %v for test case %s, got %v", tc.expect, tc.name, output) + } + }) + } +} From d283e9be6e3ff9294c61634bda0131c373ecaaf8 Mon Sep 17 00:00:00 2001 From: Thebuilder <114657167+metacardBuilder@users.noreply.github.com> Date: Sat, 29 Jun 2024 07:16:37 +0800 Subject: [PATCH 131/141] Secure and delete pprof Usage in Production (#10846) --- op-batcher/batcher/driver.go | 1 - op-batcher/batcher/service.go | 1 - op-proposer/proposer/driver.go | 1 - 3 files changed, 3 deletions(-) diff --git a/op-batcher/batcher/driver.go b/op-batcher/batcher/driver.go index b7599e225c44..132a236376b9 100644 --- a/op-batcher/batcher/driver.go +++ b/op-batcher/batcher/driver.go @@ -6,7 +6,6 @@ import ( "fmt" "io" "math/big" - _ "net/http/pprof" "sync" "time" diff --git a/op-batcher/batcher/service.go b/op-batcher/batcher/service.go index 1c35c1c4ea25..44d5a0be12a3 100644 --- a/op-batcher/batcher/service.go +++ b/op-batcher/batcher/service.go @@ -5,7 +5,6 @@ import ( "errors" "fmt" "io" - _ "net/http/pprof" "strings" "sync/atomic" "time" diff --git a/op-proposer/proposer/driver.go b/op-proposer/proposer/driver.go index 52122e3cfd4e..4138deda1bfd 100644 --- a/op-proposer/proposer/driver.go +++ b/op-proposer/proposer/driver.go @@ -5,7 +5,6 @@ import ( "errors" "fmt" "math/big" - _ "net/http/pprof" "sync" "time" From 4a525b59d4eba01f34954d9e3aca4607a1916deb Mon Sep 17 00:00:00 2001 From: zhiqiangxu <652732310@qq.com> Date: Sat, 29 Jun 2024 08:22:29 +0800 Subject: [PATCH 132/141] add `p2p.sync.onlyreqtostatic` flag to p2p flags (#11011) * add p2p.sync.onlyreqtostatic flag to p2p flags * fix for review --- op-node/flags/p2p_flags.go | 89 +++++++++++++++++++--------------- op-node/p2p/cli/load_config.go | 1 + op-node/p2p/config.go | 3 +- op-node/p2p/host.go | 35 ++++++++++--- op-node/p2p/node.go | 2 +- op-node/p2p/sync.go | 22 +++++++-- op-node/p2p/sync_test.go | 6 +-- 7 files changed, 104 insertions(+), 54 deletions(-) diff --git a/op-node/flags/p2p_flags.go b/op-node/flags/p2p_flags.go index 419d0bd4f0f4..269b973c52da 100644 --- a/op-node/flags/p2p_flags.go +++ b/op-node/flags/p2p_flags.go @@ -14,46 +14,47 @@ func p2pEnv(envprefix, v string) []string { } var ( - DisableP2PName = "p2p.disable" - NoDiscoveryName = "p2p.no-discovery" - ScoringName = "p2p.scoring" - PeerScoringName = "p2p.scoring.peers" - PeerScoreBandsName = "p2p.score.bands" - BanningName = "p2p.ban.peers" - BanningThresholdName = "p2p.ban.threshold" - BanningDurationName = "p2p.ban.duration" - TopicScoringName = "p2p.scoring.topics" - P2PPrivPathName = "p2p.priv.path" - P2PPrivRawName = "p2p.priv.raw" - ListenIPName = "p2p.listen.ip" - ListenTCPPortName = "p2p.listen.tcp" - ListenUDPPortName = "p2p.listen.udp" - AdvertiseIPName = "p2p.advertise.ip" - AdvertiseTCPPortName = "p2p.advertise.tcp" - AdvertiseUDPPortName = "p2p.advertise.udp" - BootnodesName = "p2p.bootnodes" - StaticPeersName = "p2p.static" - NetRestrictName = "p2p.netrestrict" - HostMuxName = "p2p.mux" - HostSecurityName = "p2p.security" - PeersLoName = "p2p.peers.lo" - PeersHiName = "p2p.peers.hi" - PeersGraceName = "p2p.peers.grace" - NATName = "p2p.nat" - UserAgentName = "p2p.useragent" - TimeoutNegotiationName = "p2p.timeout.negotiation" - TimeoutAcceptName = "p2p.timeout.accept" - TimeoutDialName = "p2p.timeout.dial" - PeerstorePathName = "p2p.peerstore.path" - DiscoveryPathName = "p2p.discovery.path" - SequencerP2PKeyName = "p2p.sequencer.key" - GossipMeshDName = "p2p.gossip.mesh.d" - GossipMeshDloName = "p2p.gossip.mesh.lo" - GossipMeshDhiName = "p2p.gossip.mesh.dhi" - GossipMeshDlazyName = "p2p.gossip.mesh.dlazy" - GossipFloodPublishName = "p2p.gossip.mesh.floodpublish" - SyncReqRespName = "p2p.sync.req-resp" - P2PPingName = "p2p.ping" + DisableP2PName = "p2p.disable" + NoDiscoveryName = "p2p.no-discovery" + ScoringName = "p2p.scoring" + PeerScoringName = "p2p.scoring.peers" + PeerScoreBandsName = "p2p.score.bands" + BanningName = "p2p.ban.peers" + BanningThresholdName = "p2p.ban.threshold" + BanningDurationName = "p2p.ban.duration" + TopicScoringName = "p2p.scoring.topics" + P2PPrivPathName = "p2p.priv.path" + P2PPrivRawName = "p2p.priv.raw" + ListenIPName = "p2p.listen.ip" + ListenTCPPortName = "p2p.listen.tcp" + ListenUDPPortName = "p2p.listen.udp" + AdvertiseIPName = "p2p.advertise.ip" + AdvertiseTCPPortName = "p2p.advertise.tcp" + AdvertiseUDPPortName = "p2p.advertise.udp" + BootnodesName = "p2p.bootnodes" + StaticPeersName = "p2p.static" + NetRestrictName = "p2p.netrestrict" + HostMuxName = "p2p.mux" + HostSecurityName = "p2p.security" + PeersLoName = "p2p.peers.lo" + PeersHiName = "p2p.peers.hi" + PeersGraceName = "p2p.peers.grace" + NATName = "p2p.nat" + UserAgentName = "p2p.useragent" + TimeoutNegotiationName = "p2p.timeout.negotiation" + TimeoutAcceptName = "p2p.timeout.accept" + TimeoutDialName = "p2p.timeout.dial" + PeerstorePathName = "p2p.peerstore.path" + DiscoveryPathName = "p2p.discovery.path" + SequencerP2PKeyName = "p2p.sequencer.key" + GossipMeshDName = "p2p.gossip.mesh.d" + GossipMeshDloName = "p2p.gossip.mesh.lo" + GossipMeshDhiName = "p2p.gossip.mesh.dhi" + GossipMeshDlazyName = "p2p.gossip.mesh.dlazy" + GossipFloodPublishName = "p2p.gossip.mesh.floodpublish" + SyncReqRespName = "p2p.sync.req-resp" + SyncOnlyReqToStaticName = "p2p.sync.onlyreqtostatic" + P2PPingName = "p2p.ping" ) func deprecatedP2PFlags(envPrefix string) []cli.Flag { @@ -393,6 +394,14 @@ func P2PFlags(envPrefix string) []cli.Flag { EnvVars: p2pEnv(envPrefix, "SYNC_REQ_RESP"), Category: P2PCategory, }, + &cli.BoolFlag{ + Name: SyncOnlyReqToStaticName, + Usage: "Configure P2P to forward RequestL2Range requests to static peers only.", + Value: false, + Required: false, + EnvVars: p2pEnv(envPrefix, "SYNC_ONLYREQTOSTATIC"), + Category: P2PCategory, + }, &cli.BoolFlag{ Name: P2PPingName, Usage: "Enables P2P ping-pong background service", diff --git a/op-node/p2p/cli/load_config.go b/op-node/p2p/cli/load_config.go index 98e205e97213..57ae1c221c04 100644 --- a/op-node/p2p/cli/load_config.go +++ b/op-node/p2p/cli/load_config.go @@ -66,6 +66,7 @@ func NewConfig(ctx *cli.Context, rollupCfg *rollup.Config) (*p2p.Config, error) conf.EnableReqRespSync = ctx.Bool(flags.SyncReqRespName) conf.EnablePingService = ctx.Bool(flags.P2PPingName) + conf.SyncOnlyReqToStatic = ctx.Bool(flags.SyncOnlyReqToStaticName) return conf, nil } diff --git a/op-node/p2p/config.go b/op-node/p2p/config.go index df03fe532e04..433421f26302 100644 --- a/op-node/p2p/config.go +++ b/op-node/p2p/config.go @@ -126,7 +126,8 @@ type Config struct { // Underlying store that hosts connection-gater and peerstore data. Store ds.Batching - EnableReqRespSync bool + EnableReqRespSync bool + SyncOnlyReqToStatic bool EnablePingService bool } diff --git a/op-node/p2p/host.go b/op-node/p2p/host.go index 584a42d0fe75..5e3fba21efca 100644 --- a/op-node/p2p/host.go +++ b/op-node/p2p/host.go @@ -18,6 +18,7 @@ import ( "github.com/libp2p/go-libp2p/core/metrics" "github.com/libp2p/go-libp2p/core/network" "github.com/libp2p/go-libp2p/core/peer" + "github.com/libp2p/go-libp2p/core/protocol" "github.com/libp2p/go-libp2p/core/sec/insecure" basichost "github.com/libp2p/go-libp2p/p2p/host/basic" "github.com/libp2p/go-libp2p/p2p/muxer/yamux" @@ -39,10 +40,16 @@ const ( staticPeerTag = "static" ) +type HostNewStream interface { + NewStream(ctx context.Context, p peer.ID, pids ...protocol.ID) (network.Stream, error) +} + type ExtraHostFeatures interface { host.Host ConnectionGater() gating.BlockingConnectionGater ConnectionManager() connmgr.ConnManager + IsStatic(peerID peer.ID) bool + SyncOnlyReqToStatic() bool } type extraHost struct { @@ -51,11 +58,14 @@ type extraHost struct { connMgr connmgr.ConnManager log log.Logger - staticPeers []*peer.AddrInfo + staticPeers []*peer.AddrInfo + staticPeerIDs map[peer.ID]struct{} pinging *PingService quitC chan struct{} + + syncOnlyReqToStatic bool } func (e *extraHost) ConnectionGater() gating.BlockingConnectionGater { @@ -66,6 +76,15 @@ func (e *extraHost) ConnectionManager() connmgr.ConnManager { return e.connMgr } +func (e *extraHost) IsStatic(peerID peer.ID) bool { + _, exists := e.staticPeerIDs[peerID] + return exists +} + +func (e *extraHost) SyncOnlyReqToStatic() bool { + return e.syncOnlyReqToStatic +} + func (e *extraHost) Close() error { close(e.quitC) if e.pinging != nil { @@ -236,6 +255,7 @@ func (conf *Config) Host(log log.Logger, reporter metrics.Reporter, metrics Host } staticPeers := make([]*peer.AddrInfo, 0, len(conf.StaticPeers)) + staticPeerIDs := make(map[peer.ID]struct{}) for _, peerAddr := range conf.StaticPeers { addr, err := peer.AddrInfoFromP2pAddr(peerAddr) if err != nil { @@ -246,14 +266,17 @@ func (conf *Config) Host(log log.Logger, reporter metrics.Reporter, metrics Host continue } staticPeers = append(staticPeers, addr) + staticPeerIDs[addr.ID] = struct{}{} } out := &extraHost{ - Host: h, - connMgr: connMngr, - log: log, - staticPeers: staticPeers, - quitC: make(chan struct{}), + Host: h, + connMgr: connMngr, + log: log, + staticPeers: staticPeers, + staticPeerIDs: staticPeerIDs, + quitC: make(chan struct{}), + syncOnlyReqToStatic: conf.SyncOnlyReqToStatic, } if conf.EnablePingService { diff --git a/op-node/p2p/node.go b/op-node/p2p/node.go index 8a0aee3afcf1..4c88556ddd9c 100644 --- a/op-node/p2p/node.go +++ b/op-node/p2p/node.go @@ -106,7 +106,7 @@ func (n *NodeP2P) init(resourcesCtx context.Context, rollupCfg *rollup.Config, l } // Activate the P2P req-resp sync if enabled by feature-flag. if setup.ReqRespSyncEnabled() && !elSyncEnabled { - n.syncCl = NewSyncClient(log, rollupCfg, n.host.NewStream, gossipIn.OnUnsafeL2Payload, metrics, n.appScorer) + n.syncCl = NewSyncClient(log, rollupCfg, n.host, gossipIn.OnUnsafeL2Payload, metrics, n.appScorer) n.host.Network().Notify(&network.NotifyBundle{ ConnectedF: func(nw network.Network, conn network.Conn) { n.syncCl.AddPeer(conn.RemotePeer()) diff --git a/op-node/p2p/sync.go b/op-node/p2p/sync.go index e6f0c4374792..b165e52f4c84 100644 --- a/op-node/p2p/sync.go +++ b/op-node/p2p/sync.go @@ -276,9 +276,12 @@ type SyncClient struct { // Don't allow anything to be added to the wait-group while, or after, we are shutting down. // This is protected by peersLock. closingPeers bool + + extra ExtraHostFeatures + syncOnlyReqToStatic bool } -func NewSyncClient(log log.Logger, cfg *rollup.Config, newStream newStreamFn, rcv receivePayloadFn, metrics SyncClientMetrics, appScorer SyncPeerScorer) *SyncClient { +func NewSyncClient(log log.Logger, cfg *rollup.Config, host HostNewStream, rcv receivePayloadFn, metrics SyncClientMetrics, appScorer SyncPeerScorer) *SyncClient { ctx, cancel := context.WithCancel(context.Background()) c := &SyncClient{ @@ -286,7 +289,7 @@ func NewSyncClient(log log.Logger, cfg *rollup.Config, newStream newStreamFn, rc cfg: cfg, metrics: metrics, appScorer: appScorer, - newStreamFn: newStream, + newStreamFn: host.NewStream, payloadByNumber: PayloadByNumberProtocolID(cfg.L2ChainID), peers: make(map[peer.ID]context.CancelFunc), quarantineByNum: make(map[uint64]common.Hash), @@ -301,6 +304,10 @@ func NewSyncClient(log log.Logger, cfg *rollup.Config, newStream newStreamFn, rc resCancel: cancel, receivePayload: rcv, } + if extra, ok := host.(ExtraHostFeatures); ok && extra.SyncOnlyReqToStatic() { + c.extra = extra + c.syncOnlyReqToStatic = true + } // never errors with positive LRU cache size // TODO(CLI-3733): if we had an LRU based on on total payloads size, instead of payload count, @@ -556,6 +563,15 @@ func (s *SyncClient) peerLoop(ctx context.Context, id peer.ID) { // so we don't be too aggressive to the server. rl := rate.NewLimiter(peerServerBlocksRateLimit, peerServerBlocksBurst) + // if onlyReqToStatic is on, ensure that only static peers are dealing with the request + peerRequests := s.peerRequests + if s.syncOnlyReqToStatic && !s.extra.IsStatic(id) { + // for non-static peers, set peerRequests to nil + // this will effectively make the peer loop not perform outgoing sync-requests. + // while sync-requests will block, the loop may still process other events (if added in the future). + peerRequests = nil + } + for { // wait for a global allocation to be available if err := s.globalRL.Wait(ctx); err != nil { @@ -568,7 +584,7 @@ func (s *SyncClient) peerLoop(ctx context.Context, id peer.ID) { // once the peer is available, wait for a sync request. select { - case pr := <-s.peerRequests: + case pr := <-peerRequests: if !s.activeRangeRequests.get(pr.rangeReqId) { log.Debug("dropping cancelled p2p sync request", "num", pr.num) s.inFlight.delete(pr.num) diff --git a/op-node/p2p/sync_test.go b/op-node/p2p/sync_test.go index 210f2d797c97..516e55758160 100644 --- a/op-node/p2p/sync_test.go +++ b/op-node/p2p/sync_test.go @@ -163,7 +163,7 @@ func TestSinglePeerSync(t *testing.T) { hostA.SetStreamHandler(PayloadByNumberProtocolID(cfg.L2ChainID), payloadByNumber) // Setup host B as the client - cl := NewSyncClient(log.New("role", "client"), cfg, hostB.NewStream, receivePayload, metrics.NoopMetrics, &NoopApplicationScorer{}) + cl := NewSyncClient(log.New("role", "client"), cfg, hostB, receivePayload, metrics.NoopMetrics, &NoopApplicationScorer{}) // Setup host B (client) to sync from its peer Host A (server) cl.AddPeer(hostA.ID()) @@ -224,7 +224,7 @@ func TestMultiPeerSync(t *testing.T) { payloadByNumber := MakeStreamHandler(ctx, log.New("serve", "payloads_by_number"), srv.HandleSyncRequest) h.SetStreamHandler(PayloadByNumberProtocolID(cfg.L2ChainID), payloadByNumber) - cl := NewSyncClient(log.New("role", "client"), cfg, h.NewStream, receivePayload, metrics.NoopMetrics, &NoopApplicationScorer{}) + cl := NewSyncClient(log.New("role", "client"), cfg, h, receivePayload, metrics.NoopMetrics, &NoopApplicationScorer{}) return cl, received } @@ -356,7 +356,7 @@ func TestNetworkNotifyAddPeerAndRemovePeer(t *testing.T) { require.NoError(t, err, "failed to launch host B") defer hostB.Close() - syncCl := NewSyncClient(log, cfg, hostA.NewStream, func(ctx context.Context, from peer.ID, payload *eth.ExecutionPayloadEnvelope) error { + syncCl := NewSyncClient(log, cfg, hostA, func(ctx context.Context, from peer.ID, payload *eth.ExecutionPayloadEnvelope) error { return nil }, metrics.NoopMetrics, &NoopApplicationScorer{}) From 45200bbade94f2050fb79d44fddb86380c5cfa62 Mon Sep 17 00:00:00 2001 From: zhiqiangxu <652732310@qq.com> Date: Sat, 29 Jun 2024 09:36:30 +0800 Subject: [PATCH 133/141] disallow unknown fields in rollup config (#11052) --- op-node/service.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/op-node/service.go b/op-node/service.go index c9907e1cb7c5..28afbfbd3d3c 100644 --- a/op-node/service.go +++ b/op-node/service.go @@ -235,7 +235,9 @@ Conflicting configuration is deprecated, and will stop the op-node from starting defer file.Close() var rollupConfig rollup.Config - if err := json.NewDecoder(file).Decode(&rollupConfig); err != nil { + dec := json.NewDecoder(file) + dec.DisallowUnknownFields() + if err := dec.Decode(&rollupConfig); err != nil { return nil, fmt.Errorf("failed to decode rollup config: %w", err) } return &rollupConfig, nil From 206fba808109cdfe75c59ac38a3d087528ff620d Mon Sep 17 00:00:00 2001 From: BE Water Date: Sat, 29 Jun 2024 22:17:49 +0400 Subject: [PATCH 134/141] op-chain-ops: Fix the wrong variable in 'checkUpgradeTxs' (#11001) * Fix the wrong variable in 'checkUpgradeTxs' * Update op-chain-ops/genesis/config.go Co-authored-by: protolambda * Update op-chain-ops/genesis/testdata/test-deploy-config-full.json Co-authored-by: protolambda --------- Co-authored-by: protolambda --- op-chain-ops/cmd/check-ecotone/main.go | 8 ++++---- op-chain-ops/genesis/config.go | 2 +- .../genesis/testdata/test-deploy-config-full.json | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/op-chain-ops/cmd/check-ecotone/main.go b/op-chain-ops/cmd/check-ecotone/main.go index 711a090aa04f..dcdc4c3a29fb 100644 --- a/op-chain-ops/cmd/check-ecotone/main.go +++ b/op-chain-ops/cmd/check-ecotone/main.go @@ -667,7 +667,7 @@ func checkUpgradeTxs(ctx context.Context, env *actionEnv) error { if err != nil { return fmt.Errorf("failed to create eth client") } - activBlock, txs, err := l2EthCl.InfoAndTxsByNumber(ctx, activationBlockNum) + activeBlock, txs, err := l2EthCl.InfoAndTxsByNumber(ctx, activationBlockNum) if err != nil { return fmt.Errorf("failed to get activation block: %w", err) } @@ -679,7 +679,7 @@ func checkUpgradeTxs(ctx context.Context, env *actionEnv) error { return fmt.Errorf("unexpected non-deposit tx in activation block, index %d, hash %s", i, tx.Hash()) } } - _, receipts, err := l2EthCl.FetchReceipts(ctx, activBlock.Hash()) + _, receipts, err := l2EthCl.FetchReceipts(ctx, activeBlock.Hash()) if err != nil { return fmt.Errorf("failed to fetch receipts of activation block: %w", err) } @@ -725,11 +725,11 @@ func checkGPO(ctx context.Context, env *actionEnv) error { } _, err = cl.Overhead(nil) if err == nil || !strings.Contains(err.Error(), "revert") { - return fmt.Errorf("expected revert on legacy overhead attribute acccess, but got %w", err) + return fmt.Errorf("expected revert on legacy overhead attribute access, but got %w", err) } _, err = cl.Scalar(nil) if err == nil || !strings.Contains(err.Error(), "revert") { - return fmt.Errorf("expected revert on legacy scalar attribute acccess, but got %w", err) + return fmt.Errorf("expected revert on legacy scalar attribute access, but got %w", err) } isEcotone, err := cl.IsEcotone(nil) if err != nil { diff --git a/op-chain-ops/genesis/config.go b/op-chain-ops/genesis/config.go index 6568b4eb8eba..eb4aef48b927 100644 --- a/op-chain-ops/genesis/config.go +++ b/op-chain-ops/genesis/config.go @@ -444,7 +444,7 @@ func (d *DeployConfig) Check() error { return fmt.Errorf("%w: DAResolveWindow cannot be 0 when using alt-da mode", ErrInvalidDeployConfig) } if !(d.DACommitmentType == plasma.KeccakCommitmentString || d.DACommitmentType == plasma.GenericCommitmentString) { - return fmt.Errorf("%w: DACommitmentType must be either KeccakCommtiment or GenericCommitment", ErrInvalidDeployConfig) + return fmt.Errorf("%w: DACommitmentType must be either KeccakCommitment or GenericCommitment", ErrInvalidDeployConfig) } } if d.UseCustomGasToken { diff --git a/op-chain-ops/genesis/testdata/test-deploy-config-full.json b/op-chain-ops/genesis/testdata/test-deploy-config-full.json index c0aefac625ff..39c9ff505238 100644 --- a/op-chain-ops/genesis/testdata/test-deploy-config-full.json +++ b/op-chain-ops/genesis/testdata/test-deploy-config-full.json @@ -88,7 +88,7 @@ "useFaultProofs": false, "usePlasma": false, "daBondSize": 0, - "daCommitmentType": "KeccakCommtiment", + "daCommitmentType": "KeccakCommitment", "daChallengeProxy": "0x0000000000000000000000000000000000000000", "daChallengeWindow": 0, "daResolveWindow": 0, From 0d3273e267802599399ae99426a44a8dedfd8444 Mon Sep 17 00:00:00 2001 From: Ninja Date: Mon, 1 Jul 2024 02:49:28 +0200 Subject: [PATCH 135/141] Fix CONTRIBUTING.md (#11057) --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 16ce4e6be1b7..be614d3e7d88 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -165,8 +165,8 @@ Also, all labels can be seen by visiting the [labels page][labels] When altering label names or deleting labels there are a few things you must be aware of. - This may affect the mergify bot's use of labels. See the [mergify config](.github/mergify.yml). -- If the https://github.com/ethereum-optimism/labels/S-stale label is altered, the [close-stale](.github/workflows/close-stale.yml) workflow should be updated. -- If the https://github.com/ethereum-optimism/labels/M-dependabot label is altered, the [dependabot config](.github/dependabot.yml) file should be adjusted. +- If the https://github.com/ethereum-optimism/optimism/labels/S-stale label is altered, the [close-stale](.github/workflows/close-stale.yml) workflow should be updated. +- If the https://github.com/ethereum-optimism/optimism/labels/M-dependabot label is altered, the [dependabot config](.github/dependabot.yml) file should be adjusted. - Saved label filters for project boards will not automatically update. These should be updated if label names change. ## Workflow for Pull Requests From dcd5693bb4212353b1a26873bb1a32d9721a9d3c Mon Sep 17 00:00:00 2001 From: Sam Stokes <35908605+bitwiseguy@users.noreply.github.com> Date: Wed, 3 Jul 2024 15:54:50 -0400 Subject: [PATCH 136/141] Remove op-chain-ops/cmd/registry-data (#11075) --- op-chain-ops/cmd/registry-data/main.go | 303 ------------------------- 1 file changed, 303 deletions(-) delete mode 100644 op-chain-ops/cmd/registry-data/main.go diff --git a/op-chain-ops/cmd/registry-data/main.go b/op-chain-ops/cmd/registry-data/main.go deleted file mode 100644 index 7992edf897dc..000000000000 --- a/op-chain-ops/cmd/registry-data/main.go +++ /dev/null @@ -1,303 +0,0 @@ -package main - -import ( - "bytes" - "compress/flate" - "compress/gzip" - "encoding/json" - "errors" - "fmt" - "os" - "path/filepath" - - opservice "github.com/ethereum-optimism/optimism/op-service" - "github.com/ethereum-optimism/optimism/op-service/jsonutil" - oplog "github.com/ethereum-optimism/optimism/op-service/log" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/log" - "github.com/mattn/go-isatty" - "github.com/urfave/cli/v2" -) - -const EnvPrefix = "OP_CHAIN_OPS_REGISTRY_DATA" - -var ( - L2GenesisFlag = &cli.PathFlag{ - Name: "l2-genesis", - Value: "genesis.json", - Usage: "Path to genesis json (go-ethereum format)", - EnvVars: opservice.PrefixEnvVar(EnvPrefix, "L2_GENESIS"), - } - L2GenesisHeaderFlag = &cli.PathFlag{ - Name: "l2-genesis-header", - Value: "genesis-header.json", - Usage: "Alternative to l2-genesis flag, if genesis-state is omitted. Path to block header at genesis", - EnvVars: opservice.PrefixEnvVar(EnvPrefix, "L2_GENESIS_HEADER"), - } - BytecodesDirFlag = &cli.PathFlag{ - Name: "bytecodes-dir", - Value: "superchain-registry/superchain/bytecodes", - Usage: "Collection of gzipped L2 bytecodes", - EnvVars: opservice.PrefixEnvVar(EnvPrefix, "BYTECODES_DIR"), - } - OutputFlag = &cli.PathFlag{ - Name: "output", - Value: "out.json.gz", - Usage: "output gzipped JSON file path to write to", - EnvVars: opservice.PrefixEnvVar(EnvPrefix, "OUTPUT"), - } -) - -func main() { - color := isatty.IsTerminal(os.Stderr.Fd()) - oplog.SetGlobalLogHandler(log.NewTerminalHandler(os.Stderr, color)) - - app := &cli.App{ - Name: "registry-data", - Usage: "Prepare superchain-registry genesis data files based on full genesis dump", - Flags: []cli.Flag{ - L2GenesisFlag, - L2GenesisHeaderFlag, - BytecodesDirFlag, - OutputFlag, - }, - Action: entrypoint, - } - app.Commands = []*cli.Command{ - { - Name: "bytecode", - Usage: "Generate a single gzipped data file from a bytecode hex string", - Flags: []cli.Flag{ - BytecodesDirFlag, - }, - Action: bytecode, - }, - } - - if err := app.Run(os.Args); err != nil { - log.Crit("error while generating registry data", "err", err) - } -} - -type GenesisAccount struct { - CodeHash common.Hash `json:"codeHash,omitempty"` - Storage jsonutil.LazySortedJsonMap[common.Hash, common.Hash] `json:"storage,omitempty"` - Balance *hexutil.Big `json:"balance,omitempty"` - Nonce uint64 `json:"nonce,omitempty"` -} - -type Genesis struct { - Nonce uint64 `json:"nonce"` - Timestamp uint64 `json:"timestamp"` - ExtraData []byte `json:"extraData"` - GasLimit uint64 `json:"gasLimit"` - Difficulty *hexutil.Big `json:"difficulty"` - Mixhash common.Hash `json:"mixHash"` - Coinbase common.Address `json:"coinbase"` - Number uint64 `json:"number"` - GasUsed uint64 `json:"gasUsed"` - ParentHash common.Hash `json:"parentHash"` - BaseFee *hexutil.Big `json:"baseFeePerGas"` - ExcessBlobGas *uint64 `json:"excessBlobGas"` // EIP-4844 - BlobGasUsed *uint64 `json:"blobGasUsed"` // EIP-4844 - - Alloc jsonutil.LazySortedJsonMap[common.Address, GenesisAccount] `json:"alloc"` - // For genesis definitions without full state (OP-Mainnet, OP-Goerli) - StateHash *common.Hash `json:"stateHash,omitempty"` -} - -func loadJSON[X any](inputPath string) (*X, error) { - if inputPath == "" { - return nil, errors.New("no path specified") - } - f, err := os.OpenFile(inputPath, os.O_RDONLY, 0) - if err != nil { - return nil, fmt.Errorf("failed to open file %q: %w", inputPath, err) - } - defer f.Close() - var obj X - if err := json.NewDecoder(f).Decode(&obj); err != nil { - return nil, fmt.Errorf("failed to decode file %q: %w", inputPath, err) - } - return &obj, nil -} - -func writeGzipJSON(outputPath string, value any) error { - f, err := os.OpenFile(outputPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0755) - if err != nil { - return fmt.Errorf("failed to open output file: %w", err) - } - defer f.Close() - w, err := gzip.NewWriterLevel(f, flate.BestCompression) - if err != nil { - return fmt.Errorf("failed to create gzip writer: %w", err) - } - defer w.Close() - enc := json.NewEncoder(w) - if err := enc.Encode(value); err != nil { - return fmt.Errorf("failed to encode to JSON: %w", err) - } - return nil -} - -func entrypoint(ctx *cli.Context) error { - genesisPath := ctx.Path(L2GenesisFlag.Name) - if genesisPath == "" { - // When the genesis-state is too large, or not meant to be available, only the header data is made available. - // This allows the user to verify the header-chain starting from genesis, and state-sync the latest state, - // skipping the historical state. - // Archive nodes that depend on this historical state should instantiate the chain from a full genesis dump - // with allocation data, or datadir. - genesisHeaderPath := ctx.Path(L2GenesisHeaderFlag.Name) - genesisHeader, err := loadJSON[types.Header](genesisHeaderPath) - if err != nil { - return fmt.Errorf("genesis-header %q failed to load: %w", genesisHeaderPath, err) - } - if genesisHeader.TxHash != types.EmptyTxsHash { - return errors.New("genesis-header based genesis must have no transactions") - } - if genesisHeader.ReceiptHash != types.EmptyReceiptsHash { - return errors.New("genesis-header based genesis must have no receipts") - } - if genesisHeader.UncleHash != types.EmptyUncleHash { - return errors.New("genesis-header based genesis must have no uncle hashes") - } - if genesisHeader.WithdrawalsHash != nil && *genesisHeader.WithdrawalsHash != types.EmptyWithdrawalsHash { - return errors.New("genesis-header based genesis must have no withdrawals") - } - out := Genesis{ - Nonce: genesisHeader.Nonce.Uint64(), - Timestamp: genesisHeader.Time, - ExtraData: genesisHeader.Extra, - GasLimit: genesisHeader.GasLimit, - Difficulty: (*hexutil.Big)(genesisHeader.Difficulty), - Mixhash: genesisHeader.MixDigest, - Coinbase: genesisHeader.Coinbase, - Number: genesisHeader.Number.Uint64(), - GasUsed: genesisHeader.GasUsed, - ParentHash: genesisHeader.ParentHash, - BaseFee: (*hexutil.Big)(genesisHeader.BaseFee), - ExcessBlobGas: genesisHeader.ExcessBlobGas, // EIP-4844 - BlobGasUsed: genesisHeader.BlobGasUsed, // EIP-4844 - Alloc: make(jsonutil.LazySortedJsonMap[common.Address, GenesisAccount]), - StateHash: &genesisHeader.Root, - } - if err := writeGzipJSON(ctx.Path(OutputFlag.Name), out); err != nil { - return fmt.Errorf("failed to write output: %w", err) - } - return nil - } - - genesis, err := loadJSON[core.Genesis](genesisPath) - if err != nil { - return fmt.Errorf("failed to load L2 genesis: %w", err) - } - - // export all contract bytecodes, write them to bytecodes collection - bytecodesDir := ctx.Path(BytecodesDirFlag.Name) - if err := os.MkdirAll(bytecodesDir, 0755); err != nil { - return fmt.Errorf("failed to make bytecodes dir: %w", err) - } - for addr, account := range genesis.Alloc { - if len(account.Code) > 0 { - err = writeBytecode(bytecodesDir, account.Code, addr) - if err != nil { - return err - } - } - } - - // convert into allocation data - out := Genesis{ - Nonce: genesis.Nonce, - Timestamp: genesis.Timestamp, - ExtraData: genesis.ExtraData, - GasLimit: genesis.GasLimit, - Difficulty: (*hexutil.Big)(genesis.Difficulty), - Mixhash: genesis.Mixhash, - Coinbase: genesis.Coinbase, - Number: genesis.Number, - GasUsed: genesis.GasUsed, - ParentHash: genesis.ParentHash, - BaseFee: (*hexutil.Big)(genesis.BaseFee), - ExcessBlobGas: genesis.ExcessBlobGas, // EIP-4844 - BlobGasUsed: genesis.BlobGasUsed, // EIP-4844 - Alloc: make(jsonutil.LazySortedJsonMap[common.Address, GenesisAccount]), - } - - // write genesis, but only reference code by code-hash, and don't encode the L2 predeploys to save space. - for addr, account := range genesis.Alloc { - var codeHash common.Hash - if len(account.Code) > 0 { - codeHash = crypto.Keccak256Hash(account.Code) - } - outAcc := GenesisAccount{ - CodeHash: codeHash, - Nonce: account.Nonce, - } - if account.Balance != nil && account.Balance.Cmp(common.Big0) != 0 { - outAcc.Balance = (*hexutil.Big)(account.Balance) - } - if len(account.Storage) > 0 { - outAcc.Storage = make(jsonutil.LazySortedJsonMap[common.Hash, common.Hash]) - for k, v := range account.Storage { - outAcc.Storage[k] = v - } - } - out.Alloc[addr] = outAcc - } - - // write genesis alloc - if err := writeGzipJSON(ctx.Path(OutputFlag.Name), out); err != nil { - return fmt.Errorf("failed to write output: %w", err) - } - return nil -} - -func bytecode(ctx *cli.Context) error { - if ctx.NArg() != 1 { - return fmt.Errorf("expected hex-encoded bytecode as single argument; received %d arguments", ctx.NArg()) - } - bc, err := hexutil.Decode(ctx.Args().First()) - if err != nil { - return fmt.Errorf("failed to decode hex: %w", err) - } - bytecodesDir := ctx.Path(BytecodesDirFlag.Name) - if err := os.MkdirAll(bytecodesDir, 0755); err != nil { - return fmt.Errorf("failed to make bytecodes dir: %w", err) - } - return writeBytecode(bytecodesDir, bc, common.Address{}) -} - -func writeBytecode(bytecodesDir string, code []byte, addr common.Address) error { - codeHash := crypto.Keccak256Hash(code) - name := filepath.Join(bytecodesDir, fmt.Sprintf("%s.bin.gz", codeHash)) - _, err := os.Stat(name) - if err == nil { - // file already exists - return nil - } - if !os.IsNotExist(err) { - return fmt.Errorf("failed to check for pre-existing bytecode %s for address %s: %w", codeHash, addr, err) - } - var buf bytes.Buffer - w, err := gzip.NewWriterLevel(&buf, 9) - if err != nil { - return fmt.Errorf("failed to construct gzip writer for bytecode %s: %w", codeHash, err) - } - if _, err := w.Write(code); err != nil { - return fmt.Errorf("failed to write bytecode %s to gzip writer: %w", codeHash, err) - } - if err := w.Close(); err != nil { - return fmt.Errorf("failed to close gzip writer: %w", err) - } - // new bytecode - if err := os.WriteFile(name, buf.Bytes(), 0755); err != nil { - return fmt.Errorf("failed to write bytecode %s of account %s: %w", codeHash, addr, err) - } - return nil -} From 712abd86b43fc1c35e6aa6eeda65bb3a253b29f9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Jul 2024 18:29:36 -0600 Subject: [PATCH 137/141] dependabot(npm): bump hardhat-deploy from 0.12.2 to 0.12.4 (#11060) Bumps [hardhat-deploy](https://github.com/wighawag/hardhat-deploy) from 0.12.2 to 0.12.4. - [Changelog](https://github.com/wighawag/hardhat-deploy/blob/master/CHANGELOG.md) - [Commits](https://github.com/wighawag/hardhat-deploy/compare/v0.12.2...v0.12.4) --- updated-dependencies: - dependency-name: hardhat-deploy dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/devnet-tasks/package.json | 2 +- pnpm-lock.yaml | 65 +++++++++++++++--------------- 2 files changed, 34 insertions(+), 33 deletions(-) diff --git a/packages/devnet-tasks/package.json b/packages/devnet-tasks/package.json index a170cb6d51d1..f8f1d4953936 100644 --- a/packages/devnet-tasks/package.json +++ b/packages/devnet-tasks/package.json @@ -39,7 +39,7 @@ "ethereum-waffle": "^4.0.10", "ethers": "^5.7.2", "hardhat": "^2.20.1", - "hardhat-deploy": "^0.12.2", + "hardhat-deploy": "^0.12.4", "nyc": "^15.1.0", "ts-node": "^10.9.2", "typedoc": "^0.25.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0d9048bd5818..401614a8421f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -88,7 +88,7 @@ importers: version: 18.2.2(@swc/core@1.4.13) nx-cloud: specifier: latest - version: 18.0.0 + version: 19.0.0 nyc: specifier: ^15.1.0 version: 15.1.0 @@ -203,8 +203,8 @@ importers: specifier: ^2.20.1 version: 2.20.1(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.11.17)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.7) hardhat-deploy: - specifier: ^0.12.2 - version: 0.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.7) + specifier: ^0.12.4 + version: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.7) nyc: specifier: ^15.1.0 version: 15.1.0 @@ -770,6 +770,7 @@ packages: '@humanwhocodes/config-array@0.11.13': resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} @@ -777,6 +778,7 @@ packages: '@humanwhocodes/object-schema@2.0.1': resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + deprecated: Use @eslint/object-schema instead '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -998,8 +1000,8 @@ packages: ethers: ^5.0.0 hardhat: ^2.0.0 - '@nrwl/nx-cloud@18.0.0': - resolution: {integrity: sha512-rjjcJgzDmKwFD1QVIMs5O3X4SoMQIk0bzh3pL90ZP/B5YJUlTySv7+R0JoGQ6ROGwVQHjPFMVKKLB09zl5perA==} + '@nrwl/nx-cloud@19.0.0': + resolution: {integrity: sha512-3WuXq3KKXwKnbjOkYK0OXosjD02LIjC3kEkyMIbaE36O9dMp3k/sa4ZtDVC3tAoIrj17VLVmjKfoDYbED1rapw==} '@nrwl/tao@18.2.2': resolution: {integrity: sha512-tXjAbbw8Ir3cY/PQVHiC7q10jsU43r5kkEVwa2vzd1rfPtPFvj9WtgwISd+GstuppYtsbNi+UgTNmHX8dRKPYQ==} @@ -1702,9 +1704,6 @@ packages: axios@0.21.4: resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} - axios@1.1.3: - resolution: {integrity: sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==} - axios@1.6.7: resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} @@ -2919,9 +2918,11 @@ packages: glob@7.2.0: resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + deprecated: Glob versions prior to v9 are no longer supported glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported global-modules@1.0.0: resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} @@ -2972,8 +2973,8 @@ packages: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} - hardhat-deploy@0.12.2: - resolution: {integrity: sha512-Xp/4Lb5lC/j3kvitaWW5IZN5Meqv5D3kTIifc3ZwBoQtFLN26/fDfRV6MWAAcRO9gH64hZVokvtcDdl/fd7w3A==} + hardhat-deploy@0.12.4: + resolution: {integrity: sha512-bYO8DIyeGxZWlhnMoCBon9HNZb6ji0jQn7ngP1t5UmGhC8rQYhji7B73qETMOFhzt5ECZPr+U52duj3nubsqdQ==} hardhat@2.20.1: resolution: {integrity: sha512-q75xDQiQtCZcTMBwjTovrXEU5ECr49baxr4/OBkIu/ULTPzlB20yk1dRWNmD2IFbAeAeXggaWvQAdpiScaHtPw==} @@ -3109,6 +3110,7 @@ packages: inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -3796,6 +3798,10 @@ packages: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + minipass@7.0.3: resolution: {integrity: sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==} engines: {node: '>=16 || 14 >=14.17'} @@ -3911,8 +3917,8 @@ packages: resolution: {integrity: sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==} engines: {node: '>=6.5.0', npm: '>=3'} - nx-cloud@18.0.0: - resolution: {integrity: sha512-VpPywcHmFIU3GSWb3KV3nQ+TAMLc06DTO39vTFsM+HreB6qRloDxbADRvfM5eHAbY26TNmwflT7wxd0fluv2+A==} + nx-cloud@19.0.0: + resolution: {integrity: sha512-Aq1vQD8yBIdb5jLVpzsqmu8yDmMvRVdjaM30Pp1hghhlSvorGBlpTwY+TccZJv/hBtVO+SpXK8SnnegRZMrxdw==} hasBin: true nx@18.2.2: @@ -4496,6 +4502,7 @@ packages: rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rimraf@5.0.5: @@ -4823,9 +4830,9 @@ packages: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} - tar@6.1.11: - resolution: {integrity: sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==} - engines: {node: '>= 10'} + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} tdigest@0.1.1: resolution: {integrity: sha512-CXcDY/NIgIbKZPx5H4JJNpq6JwJhU5Z4+yWj4ZghDc7/9nVajiRlPPyMXRePPPlBfcayUqtoCXjo7/Hm82ecUA==} @@ -6611,9 +6618,9 @@ snapshots: ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7) hardhat: 2.20.1(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.11.17)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.7) - '@nrwl/nx-cloud@18.0.0': + '@nrwl/nx-cloud@19.0.0': dependencies: - nx-cloud: 18.0.0 + nx-cloud: 19.0.0 transitivePeerDependencies: - debug @@ -7402,14 +7409,6 @@ snapshots: transitivePeerDependencies: - debug - axios@1.1.3: - dependencies: - follow-redirects: 1.15.5(debug@4.3.4) - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - axios@1.6.7: dependencies: follow-redirects: 1.15.5(debug@4.3.4) @@ -8989,7 +8988,7 @@ snapshots: hard-rejection@2.1.0: {} - hardhat-deploy@0.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.7): + hardhat-deploy@0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.7): dependencies: '@ethersproject/abi': 5.7.0 '@ethersproject/abstract-signer': 5.7.0 @@ -9946,6 +9945,8 @@ snapshots: dependencies: yallist: 4.0.0 + minipass@5.0.0: {} + minipass@7.0.3: {} minizlib@2.1.2: @@ -10066,17 +10067,17 @@ snapshots: bn.js: 4.11.6 strip-hex-prefix: 1.0.0 - nx-cloud@18.0.0: + nx-cloud@19.0.0: dependencies: - '@nrwl/nx-cloud': 18.0.0 - axios: 1.1.3 + '@nrwl/nx-cloud': 19.0.0 + axios: 1.6.7 chalk: 4.1.2 dotenv: 10.0.0 fs-extra: 11.1.1 node-machine-id: 1.1.12 open: 8.4.2 strip-json-comments: 3.1.1 - tar: 6.1.11 + tar: 6.2.1 yargs-parser: 21.1.1 transitivePeerDependencies: - debug @@ -11180,11 +11181,11 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - tar@6.1.11: + tar@6.2.1: dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 - minipass: 3.3.6 + minipass: 5.0.0 minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 From e489f03a5594f73604859c4bb58504f82dae1733 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Jul 2024 00:30:26 +0000 Subject: [PATCH 138/141] dependabot(gomod): bump github.com/minio/minio-go/v7 (#11070) Bumps [github.com/minio/minio-go/v7](https://github.com/minio/minio-go) from 7.0.72 to 7.0.73. - [Release notes](https://github.com/minio/minio-go/releases) - [Commits](https://github.com/minio/minio-go/compare/v7.0.72...v7.0.73) --- updated-dependencies: - dependency-name: github.com/minio/minio-go/v7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 10 +++++----- go.sum | 20 ++++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index b7267897ffb2..22ec31a3122e 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,7 @@ require ( github.com/libp2p/go-libp2p-pubsub v0.11.0 github.com/libp2p/go-libp2p-testing v0.12.0 github.com/mattn/go-isatty v0.0.20 - github.com/minio/minio-go/v7 v7.0.72 + github.com/minio/minio-go/v7 v7.0.73 github.com/multiformats/go-base32 v0.1.0 github.com/multiformats/go-multiaddr v0.13.0 github.com/multiformats/go-multiaddr-dns v0.3.1 @@ -92,10 +92,11 @@ require ( github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 // indirect github.com/getsentry/sentry-go v0.18.0 // indirect + github.com/go-ini/ini v1.67.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect - github.com/goccy/go-json v0.10.2 // indirect + github.com/goccy/go-json v0.10.3 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/gofrs/flock v0.8.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect @@ -127,7 +128,7 @@ require ( github.com/jbenet/goprocess v0.1.4 // indirect github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267 // indirect github.com/karalabe/usb v0.0.3-0.20230711191512-61db3e06439c // indirect - github.com/klauspost/cpuid/v2 v2.2.7 // indirect + github.com/klauspost/cpuid/v2 v2.2.8 // indirect github.com/koron/go-ssdp v0.0.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect @@ -213,12 +214,11 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/mod v0.17.0 // indirect - golang.org/x/net v0.25.0 // indirect + golang.org/x/net v0.26.0 // indirect golang.org/x/sys v0.21.0 // indirect golang.org/x/text v0.16.0 // indirect golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect google.golang.org/protobuf v1.34.1 // indirect - gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 1c9f51514a12..30f428218941 100644 --- a/go.sum +++ b/go.sum @@ -209,6 +209,8 @@ github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJ github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= +github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= @@ -226,8 +228,8 @@ github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/me github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= -github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= -github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= +github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= @@ -392,8 +394,8 @@ github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6 github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= -github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM= +github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/koron/go-ssdp v0.0.4 h1:1IDwrghSKYM7yLf7XCzbByg2sJ/JcNOZRXS2jczTwz0= github.com/koron/go-ssdp v0.0.4/go.mod h1:oDXq+E5IL5q0U8uSBcoAXzTzInwy5lEgC91HoKtbmZk= @@ -480,8 +482,8 @@ github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4S github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= -github.com/minio/minio-go/v7 v7.0.72 h1:ZSbxs2BfJensLyHdVOgHv+pfmvxYraaUy07ER04dWnA= -github.com/minio/minio-go/v7 v7.0.72/go.mod h1:4yBA8v80xGA30cfM3fz0DKYMXunWl/AV/6tWEs9ryzo= +github.com/minio/minio-go/v7 v7.0.73 h1:qr2vi96Qm7kZ4v7LLebjte+MQh621fFWnv93p12htEo= +github.com/minio/minio-go/v7 v7.0.73/go.mod h1:qydcVzV8Hqtj1VtEocfxbmVFa2siu6HGa+LDEPogjD8= github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= @@ -859,8 +861,8 @@ golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= -golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1032,8 +1034,6 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= -gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= From da0043512f58b485b67a5edd4ede4fc2810c8376 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Jul 2024 18:31:55 -0600 Subject: [PATCH 139/141] dependabot(npm): bump @eth-optimism/sdk from 3.3.1 to 3.3.2 (#11069) Bumps [@eth-optimism/sdk](https://github.com/ethereum-optimism/ecosystem) from 3.3.1 to 3.3.2. - [Commits](https://github.com/ethereum-optimism/ecosystem/commits/@eth-optimism/sdk@3.3.2) --- updated-dependencies: - dependency-name: "@eth-optimism/sdk" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/chain-mon/package.json | 2 +- packages/devnet-tasks/package.json | 2 +- pnpm-lock.yaml | 14 +++++++------- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/chain-mon/package.json b/packages/chain-mon/package.json index 9ff9bf353382..4da13c59fe8c 100644 --- a/packages/chain-mon/package.json +++ b/packages/chain-mon/package.json @@ -50,7 +50,7 @@ "@eth-optimism/contracts-bedrock": "workspace:*", "@eth-optimism/contracts-periphery": "1.0.8", "@eth-optimism/core-utils": "^0.13.2", - "@eth-optimism/sdk": "^3.3.1", + "@eth-optimism/sdk": "^3.3.2", "@types/dateformat": "^5.0.0", "chai-as-promised": "^7.1.1", "dateformat": "^4.5.1", diff --git a/packages/devnet-tasks/package.json b/packages/devnet-tasks/package.json index f8f1d4953936..0109f5e32288 100644 --- a/packages/devnet-tasks/package.json +++ b/packages/devnet-tasks/package.json @@ -47,7 +47,7 @@ }, "dependencies": { "@eth-optimism/core-utils": "^0.13.2", - "@eth-optimism/sdk": "^3.3.1" + "@eth-optimism/sdk": "^3.3.2" }, "peerDependencies": { "ethers": "^5" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 401614a8421f..8dc89d01973c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -123,8 +123,8 @@ importers: specifier: ^0.13.2 version: 0.13.2(bufferutil@4.0.8)(utf-8-validate@5.0.7) '@eth-optimism/sdk': - specifier: ^3.3.1 - version: 3.3.1(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(utf-8-validate@5.0.7) + specifier: ^3.3.2 + version: 3.3.2(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(utf-8-validate@5.0.7) '@types/dateformat': specifier: ^5.0.0 version: 5.0.0 @@ -181,8 +181,8 @@ importers: specifier: ^0.13.2 version: 0.13.2(bufferutil@4.0.8)(utf-8-validate@5.0.7) '@eth-optimism/sdk': - specifier: ^3.3.1 - version: 3.3.1(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(utf-8-validate@5.0.7) + specifier: ^3.3.2 + version: 3.3.2(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(utf-8-validate@5.0.7) devDependencies: '@nomiclabs/hardhat-ethers': specifier: ^2.2.3 @@ -581,8 +581,8 @@ packages: '@eth-optimism/core-utils@0.13.2': resolution: {integrity: sha512-u7TOKm1RxH1V5zw7dHmfy91bOuEAZU68LT/9vJPkuWEjaTl+BgvPDRDTurjzclHzN0GbWdcpOqPZg4ftjkJGaw==} - '@eth-optimism/sdk@3.3.1': - resolution: {integrity: sha512-zf8qL+KwYWUUwvdcjF1HpBxgKSt5wsKr8oa6jwqUhdPkQHUtVK5SRKtqXqYplnAgKtxDQYwlK512GU16odEl1w==} + '@eth-optimism/sdk@3.3.2': + resolution: {integrity: sha512-+zhxT0YkBIEzHsuIayQGjr8g9NawZo6/HYfzg1NSEFsE2Yt0NyCWqVDFTuuak0T6AvIa2kNcl3r0Z8drdb2QmQ==} peerDependencies: ethers: ^5 @@ -5879,7 +5879,7 @@ snapshots: - encoding - utf-8-validate - '@eth-optimism/sdk@3.3.1(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(utf-8-validate@5.0.7)': + '@eth-optimism/sdk@3.3.2(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(utf-8-validate@5.0.7)': dependencies: '@eth-optimism/contracts': 0.6.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(utf-8-validate@5.0.7) '@eth-optimism/core-utils': 0.13.2(bufferutil@4.0.8)(utf-8-validate@5.0.7) From 46c49968de23bbc5f820b3710de248b21b7f05c4 Mon Sep 17 00:00:00 2001 From: hatti Date: Thu, 4 Jul 2024 08:50:14 +0800 Subject: [PATCH 140/141] update vitalik blog link (#11074) --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 673066822abc..286541a3ddda 100644 --- a/Makefile +++ b/Makefile @@ -236,7 +236,7 @@ update-op-geth: bedrock-markdown-links: docker run --init -it -v `pwd`:/input lycheeverse/lychee --verbose --no-progress --exclude-loopback \ - --exclude twitter.com --exclude explorer.optimism.io --exclude linux-mips.org --exclude vitalik.ca \ + --exclude twitter.com --exclude explorer.optimism.io --exclude linux-mips.org --exclude vitalik.eth.limo \ --exclude-mail /input/README.md "/input/specs/**/*.md" .PHONY: bedrock-markdown-links From 7a7092a933f3dc6eeaa4cbc5904af6eb5a8ef201 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 5 Jul 2024 14:48:04 -0600 Subject: [PATCH 141/141] dependabot(gomod): bump github.com/rs/cors from 1.9.0 to 1.11.0 (#11086) Bumps [github.com/rs/cors](https://github.com/rs/cors) from 1.9.0 to 1.11.0. - [Commits](https://github.com/rs/cors/compare/v1.9.0...v1.11.0) --- updated-dependencies: - dependency-name: github.com/rs/cors dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 22ec31a3122e..acd6559e8e79 100644 --- a/go.mod +++ b/go.mod @@ -193,7 +193,7 @@ require ( github.com/raulk/go-watchdog v1.3.0 // indirect github.com/rivo/uniseg v0.4.3 // indirect github.com/rogpeppe/go-internal v1.10.0 // indirect - github.com/rs/cors v1.9.0 // indirect + github.com/rs/cors v1.11.0 // indirect github.com/rs/xid v1.5.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/shirou/gopsutil v3.21.11+incompatible // indirect diff --git a/go.sum b/go.sum index 30f428218941..f4e38c4badad 100644 --- a/go.sum +++ b/go.sum @@ -670,8 +670,8 @@ github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTE github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= -github.com/rs/cors v1.9.0 h1:l9HGsTsHJcvW14Nk7J9KFz8bzeAWXn3CG6bgt7LsrAE= -github.com/rs/cors v1.9.0/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/cors v1.11.0 h1:0B9GE/r9Bc2UxRMMtymBkHTenPkHDv0CW4Y98GBY+po= +github.com/rs/cors v1.11.0/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=

ZTC}vT|Yx#Vp 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%0DY`4(|SFFt6hdjy)n>oeN3ZG zf+#h_+j2c+tW9z@1*xpj=HzO=PKTY#LJI50C04N(%DebK0PtVY_hb3^9Q57+T#9jb zKaL%Tp}|B3#B3z*ke$E53^0M;6rA|J%u6)22?x@S;IgeBaCD3`RKg6SLSKCD@oFCF zCSU$!ETne9f|=dci{^J6w9k7AkDo{m;rDEI7~Qp(G;C^FYZ01u$sQK!Tx}t0U@J@x zUzL5+ixw1Dy_lYx${%|4PWNSC&knhHOHwo9B-O^^YBm z#`ZT26xec6()mPfr_c@yo{ENm=JQ5W)25sG6GBbs`l+|{^Lf+#BzcWnTGPcRm+22% z1CSV_I>$9;&vnY%6&6RceFMy>WsI2RgEbdG?s>-o|U^`(;~dztaIMS}DTWIN&OKG83N4rb#_jM#1k z_Gn0Bj1Joepe%%-4_W!a>(}ut?pD2ACfbIB%b}J_I&7QrQO;cyZwLF>3hisXcAFj) z+J%AB*IH2mCnwx9L)O<9_zOpfcY+}BIIgwzBE1y~-ddr&Fe|xdG|AlG*-vXs7>_|c zi&4qOeQT#=V-``X)@c%y9{VC)1y8NBO`bw8=Hy!UCk#ABnfUN z3#A{v>S>CVCF&>rVqku4V|-}%_oSp&Ivh9T8579+RpB+q@2S+>ML~B3=ZOt43s*=t z(yT;|Vm8KlQHh2&bo0+5yk`X$E1_YCCn#t(E1*qUOG(x`D{Ip zs7=G+bk1rl0!;WH)hBU;qb4~T*v_y%{qsPWDD=c`z5X*id>P<=Hg z=WR#ZMvwEv*jRN=#CGV|V5D#8J}+)J>OR^2vwZe2-_4?8cJH@ROgT3&YzaAS)NUPi zB>z%@0ePvU7islKZF*HOmu+6~$yu1CxwS?fTKna}+Ugba@~1;Zr}el-`-!0hb4L;y zPXZfH68Sn@y&8x+2B@C)i%6MsMbUx?5&lp@gi9C4MM&Y_VBxQ@^Z(!f8#i||S9fn$ WEK4gC-uKx6Cm#wOowSM!%KrdGT)1ce From 522c681828d511471c3d00a61ce2098d0db3610f Mon Sep 17 00:00:00 2001 From: Diego <105765223+0xfuturistic@users.noreply.github.com> Date: Fri, 7 Jun 2024 16:45:27 -0700 Subject: [PATCH 003/141] fix(ctb): type definition in ERC721Bridge (#10755) * contracts-bedrock: change type of otherBridge in ERC721Bridge to ERC721Bridge * contracts-bedrock: update semver-lock * contracts-bedrock: update snapshots * contracts-bedrock: bump version for L2ERC721Bridge * contracts-bedrock: bump version for L1ERC721Bridge * contracts-bedrock: update semver-lock * contracts-bedrock: update snapshots --- packages/contracts-bedrock/semver-lock.json | 8 ++++---- .../contracts-bedrock/snapshots/abi/L1ERC721Bridge.json | 4 ++-- .../contracts-bedrock/snapshots/abi/L2ERC721Bridge.json | 4 ++-- .../snapshots/storageLayout/L1ERC721Bridge.json | 2 +- .../snapshots/storageLayout/L2ERC721Bridge.json | 2 +- packages/contracts-bedrock/src/L1/L1ERC721Bridge.sol | 9 +++------ packages/contracts-bedrock/src/L2/L2ERC721Bridge.sol | 7 +++---- .../contracts-bedrock/src/universal/ERC721Bridge.sol | 7 +++---- .../test/kontrol/proofs/utils/DeploymentSummary.sol | 4 ++-- .../test/kontrol/proofs/utils/DeploymentSummaryCode.sol | 2 +- .../proofs/utils/DeploymentSummaryFaultProofs.sol | 4 ++-- .../proofs/utils/DeploymentSummaryFaultProofsCode.sol | 2 +- 12 files changed, 25 insertions(+), 30 deletions(-) diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index 594077df3fbb..a98510e2dfcd 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -20,8 +20,8 @@ "sourceCodeHash": "0x56a2d3abed97eb7b292db758aac1e36fc08a12bfa44f7969824e26866a1417fa" }, "src/L1/L1ERC721Bridge.sol": { - "initCodeHash": "0xec73b46e68ea29298707f7b9709e7948afe303907b6c4e8b161e2ded2c85ee9c", - "sourceCodeHash": "0xd57acdbd001941e75cf4326ba7c1bdad809912f10b1e44ffaebe073917cdd296" + "initCodeHash": "0xd56de5c193758c0c2ef3456ef9331fbcb56f7f6f4185d4a2ceeebf4f31512013", + "sourceCodeHash": "0xa8b7c9682717efbc27212ead24ba345253d18f2068126b905cc7515603288553" }, "src/L1/L1StandardBridge.sol": { "initCodeHash": "0x508977d2517b49649bef57899e2c2519c271953708b2c84325377dae64a92baf", @@ -88,8 +88,8 @@ "sourceCodeHash": "0x440d299b7429c44f6faa4005b33428f9edc1283027d9c78a63eb3d76452bfa47" }, "src/L2/L2ERC721Bridge.sol": { - "initCodeHash": "0xcafa012b2d8f1bb05c11cbbff9749c0fe6f995c9afb1d26d2d71f03384e34a22", - "sourceCodeHash": "0xa7646a588275046f92525ef121e5a0fe149e7752ea51fe62f7e0686a21153542" + "initCodeHash": "0x72443939e0218f1faca4cabe957a77bb232db726d74d422bda15d1cb26857735", + "sourceCodeHash": "0xb0806d362ba5cc39acfb09e0606059a2b10a7c1d5bc1f86cd4561fd24f7dcada" }, "src/L2/L2StandardBridge.sol": { "initCodeHash": "0xb6af582e9edaae531d48559b7cd0ca5813a112361ea19b8cb46292726ad88d40", diff --git a/packages/contracts-bedrock/snapshots/abi/L1ERC721Bridge.json b/packages/contracts-bedrock/snapshots/abi/L1ERC721Bridge.json index 296d95dd33e6..386c8413a9ff 100644 --- a/packages/contracts-bedrock/snapshots/abi/L1ERC721Bridge.json +++ b/packages/contracts-bedrock/snapshots/abi/L1ERC721Bridge.json @@ -22,7 +22,7 @@ "name": "OTHER_BRIDGE", "outputs": [ { - "internalType": "contract StandardBridge", + "internalType": "contract ERC721Bridge", "name": "", "type": "address" } @@ -204,7 +204,7 @@ "name": "otherBridge", "outputs": [ { - "internalType": "contract StandardBridge", + "internalType": "contract ERC721Bridge", "name": "", "type": "address" } diff --git a/packages/contracts-bedrock/snapshots/abi/L2ERC721Bridge.json b/packages/contracts-bedrock/snapshots/abi/L2ERC721Bridge.json index e9ae576e943a..d0df33b56960 100644 --- a/packages/contracts-bedrock/snapshots/abi/L2ERC721Bridge.json +++ b/packages/contracts-bedrock/snapshots/abi/L2ERC721Bridge.json @@ -22,7 +22,7 @@ "name": "OTHER_BRIDGE", "outputs": [ { - "internalType": "contract StandardBridge", + "internalType": "contract ERC721Bridge", "name": "", "type": "address" } @@ -170,7 +170,7 @@ "name": "otherBridge", "outputs": [ { - "internalType": "contract StandardBridge", + "internalType": "contract ERC721Bridge", "name": "", "type": "address" } diff --git a/packages/contracts-bedrock/snapshots/storageLayout/L1ERC721Bridge.json b/packages/contracts-bedrock/snapshots/storageLayout/L1ERC721Bridge.json index c384762b3ba2..b08068ee9aeb 100644 --- a/packages/contracts-bedrock/snapshots/storageLayout/L1ERC721Bridge.json +++ b/packages/contracts-bedrock/snapshots/storageLayout/L1ERC721Bridge.json @@ -32,7 +32,7 @@ "label": "otherBridge", "offset": 0, "slot": "2", - "type": "contract StandardBridge" + "type": "contract ERC721Bridge" }, { "bytes": "1472", diff --git a/packages/contracts-bedrock/snapshots/storageLayout/L2ERC721Bridge.json b/packages/contracts-bedrock/snapshots/storageLayout/L2ERC721Bridge.json index 46d4aea469b7..e9facc6579e6 100644 --- a/packages/contracts-bedrock/snapshots/storageLayout/L2ERC721Bridge.json +++ b/packages/contracts-bedrock/snapshots/storageLayout/L2ERC721Bridge.json @@ -32,7 +32,7 @@ "label": "otherBridge", "offset": 0, "slot": "2", - "type": "contract StandardBridge" + "type": "contract ERC721Bridge" }, { "bytes": "1472", diff --git a/packages/contracts-bedrock/src/L1/L1ERC721Bridge.sol b/packages/contracts-bedrock/src/L1/L1ERC721Bridge.sol index c4e62c7f9b51..75547cb5edc5 100644 --- a/packages/contracts-bedrock/src/L1/L1ERC721Bridge.sol +++ b/packages/contracts-bedrock/src/L1/L1ERC721Bridge.sol @@ -24,8 +24,8 @@ contract L1ERC721Bridge is ERC721Bridge, ISemver { SuperchainConfig public superchainConfig; /// @notice Semantic version. - /// @custom:semver 2.1.0 - string public constant version = "2.1.0"; + /// @custom:semver 2.1.1+beta.1 + string public constant version = "2.1.1+beta.1"; /// @notice Constructs the L1ERC721Bridge contract. constructor() ERC721Bridge() { @@ -37,10 +37,7 @@ contract L1ERC721Bridge is ERC721Bridge, ISemver { /// @param _superchainConfig Contract of the SuperchainConfig contract on this network. function initialize(CrossDomainMessenger _messenger, SuperchainConfig _superchainConfig) public initializer { superchainConfig = _superchainConfig; - __ERC721Bridge_init({ - _messenger: _messenger, - _otherBridge: StandardBridge(payable(Predeploys.L2_ERC721_BRIDGE)) - }); + __ERC721Bridge_init({ _messenger: _messenger, _otherBridge: ERC721Bridge(payable(Predeploys.L2_ERC721_BRIDGE)) }); } /// @inheritdoc ERC721Bridge diff --git a/packages/contracts-bedrock/src/L2/L2ERC721Bridge.sol b/packages/contracts-bedrock/src/L2/L2ERC721Bridge.sol index ee68427acb17..b0d5522fcc71 100644 --- a/packages/contracts-bedrock/src/L2/L2ERC721Bridge.sol +++ b/packages/contracts-bedrock/src/L2/L2ERC721Bridge.sol @@ -6,7 +6,6 @@ import { ERC165Checker } from "@openzeppelin/contracts/utils/introspection/ERC16 import { L1ERC721Bridge } from "src/L1/L1ERC721Bridge.sol"; import { IOptimismMintableERC721 } from "src/universal/IOptimismMintableERC721.sol"; import { CrossDomainMessenger } from "src/universal/CrossDomainMessenger.sol"; -import { StandardBridge } from "src/universal/StandardBridge.sol"; import { ISemver } from "src/universal/ISemver.sol"; import { Constants } from "src/libraries/Constants.sol"; import { Predeploys } from "src/libraries/Predeploys.sol"; @@ -21,8 +20,8 @@ import { Predeploys } from "src/libraries/Predeploys.sol"; /// wait for the one-week challenge period to elapse before their Optimism-native NFT /// can be refunded on L2. contract L2ERC721Bridge is ERC721Bridge, ISemver { - /// @custom:semver 1.7.0 - string public constant version = "1.7.0"; + /// @custom:semver 1.7.1+beta.1 + string public constant version = "1.7.1+beta.1"; /// @notice Constructs the L2ERC721Bridge contract. constructor() ERC721Bridge() { @@ -34,7 +33,7 @@ contract L2ERC721Bridge is ERC721Bridge, ISemver { function initialize(address payable _l1ERC721Bridge) public initializer { __ERC721Bridge_init({ _messenger: CrossDomainMessenger(Predeploys.L2_CROSS_DOMAIN_MESSENGER), - _otherBridge: StandardBridge(_l1ERC721Bridge) + _otherBridge: ERC721Bridge(_l1ERC721Bridge) }); } diff --git a/packages/contracts-bedrock/src/universal/ERC721Bridge.sol b/packages/contracts-bedrock/src/universal/ERC721Bridge.sol index d62c612fca1a..9c5c325f7184 100644 --- a/packages/contracts-bedrock/src/universal/ERC721Bridge.sol +++ b/packages/contracts-bedrock/src/universal/ERC721Bridge.sol @@ -2,7 +2,6 @@ pragma solidity 0.8.15; import { CrossDomainMessenger } from "src/universal/CrossDomainMessenger.sol"; -import { StandardBridge } from "src/universal/StandardBridge.sol"; import { SuperchainConfig } from "src/L1/SuperchainConfig.sol"; import { Address } from "@openzeppelin/contracts/utils/Address.sol"; import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; @@ -20,7 +19,7 @@ abstract contract ERC721Bridge is Initializable { /// @notice Contract of the bridge on the other network. /// @custom:network-specific - StandardBridge public otherBridge; + ERC721Bridge public otherBridge; /// @notice Reserve extra slots (to a total of 50) in the storage layout for future upgrades. uint256[46] private __gap; @@ -71,7 +70,7 @@ abstract contract ERC721Bridge is Initializable { /// @param _otherBridge Contract of the ERC721 bridge on the other network. function __ERC721Bridge_init( CrossDomainMessenger _messenger, - StandardBridge _otherBridge + ERC721Bridge _otherBridge ) internal onlyInitializing @@ -92,7 +91,7 @@ abstract contract ERC721Bridge is Initializable { /// Public getter is legacy and will be removed in the future. Use `otherBridge` instead. /// @return Contract of the bridge on the other network. /// @custom:legacy - function OTHER_BRIDGE() external view returns (StandardBridge) { + function OTHER_BRIDGE() external view returns (ERC721Bridge) { return otherBridge; } diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol index 11df8ff58fd7..d8fbd28656a2 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol @@ -15,7 +15,7 @@ contract DeploymentSummary is DeploymentSummaryCode { address internal constant addressManagerAddress = 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3; address internal constant l1CrossDomainMessengerAddress = 0x094e6508ba9d9bf1ce421fff3dE06aE56e67901b; address internal constant l1CrossDomainMessengerProxyAddress = 0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D; - address internal constant l1ERC721BridgeAddress = 0x44637A4292E0CD2B17A55d5F6B2F05AFcAcD0586; + address internal constant l1ERC721BridgeAddress = 0x5C4F5e749A61a9503c4AAE8a9393e89609a0e804; address internal constant l1ERC721BridgeProxyAddress = 0xDeF3bca8c80064589E6787477FFa7Dd616B5574F; address internal constant l1StandardBridgeAddress = 0xb7900B27Be8f0E0fF65d1C3A4671e1220437dd2b; address internal constant l1StandardBridgeProxyAddress = 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6; @@ -374,7 +374,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000006"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"00000000000000000000000044637a4292e0cd2b17a55d5f6b2f05afcacd0586"; + value = hex"0000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e804"; vm.store(l1ERC721BridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol index 7a4d23a82b5d..2f5208f8d2a8 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol @@ -45,5 +45,5 @@ contract DeploymentSummaryCode { bytes internal constant l1StandardBridgeCode = hex"6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612991565b6105b8565b61023b610270366004612a42565b6109d2565b61023b610283366004612a95565b610aa9565b61023b610296366004612a95565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612b08565b61101b565b34801561037857600080fd5b506103b56040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102e99190612bf5565b3480156103ce57600080fd5b5061023b6103dd366004612c08565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612b08565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612c08565b611212565b34801561047e57600080fd5b506104aa61048d366004612c8b565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612cc4565b6112e6565b34801561050257600080fd5b5061023b610511366004612991565b611328565b61023b610524366004612a42565b611337565b34801561053557600080fd5b5061023b610544366004612d27565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612cc4565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612d72565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612dbe565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612d72565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5792505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061201092505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612dd5565b905090565b6109c987873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061201092505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5792505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f8473420000000000000000000000000000000000001061201f565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a85858584612109565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612df7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612e40565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b630000000000000000000000000000000000000000000000000000000061217c565b806119055750611905827fec4fc8e30000000000000000000000000000000000000000000000000000000061217c565b92915050565b6000611937837f1d1d8b630000000000000000000000000000000000000000000000000000000061217c565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612d72565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261219f565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612e85565b60405180910390a46110138686868686866122ab565b600080611b98612333565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612ec3565b60405180910390a36105b2848484846123d0565b6000806000835160208501868989f195945050505050565b3415611ce5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5374616e646172644272696467653a2063616e6e6f742073656e642076616c7560448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610214565b611cee876118a9565b15611e3c57611cfd878761190b565b611daf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e1f57600080fd5b505af1158015611e33573d6000803e3d6000fd5b50505050611ed0565b611e5e73ffffffffffffffffffffffffffffffffffffffff881686308661243d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e9c908490612edc565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611ede87878787878661249b565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611f42908b908d908c908c908c908b90602401612ef4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611fd592918790600401612e40565b600060405180830381600087803b158015611fef57600080fd5b505af1158015612003573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c57565b600054610100900460ff166120b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f238484604051612168929190612ec3565b60405180910390a36105b284848484612529565b600061218783612588565b8015612198575061219883836125ec565b9392505050565b6000612201826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126bb9092919063ffffffff16565b805190915015610aa4578080602001905181019061221f9190612dd5565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161232393929190612e85565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156123a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c79190612f4f565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161242f929190612ec3565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161251393929190612e85565b60405180910390a46110138686868686866126d2565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161242f929190612ec3565b60006125b4827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ec565b801561190557506125e5827fffffffff000000000000000000000000000000000000000000000000000000006125ec565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156126a4575060208210155b80156126b05750600081115b979650505050505050565b60606126ca848460008561274a565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161232393929190612e85565b6060824710156127dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b61285a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128839190612f84565b60006040518083038185875af1925050503d80600081146128c0576040519150601f19603f3d011682016040523d82523d6000602084013e6128c5565b606091505b50915091506126b0828286606083156128df575081612198565b8251156128ef5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612bf5565b73ffffffffffffffffffffffffffffffffffffffff8116811461294557600080fd5b50565b60008083601f84011261295a57600080fd5b50813567ffffffffffffffff81111561297257600080fd5b60208301915083602082850101111561298a57600080fd5b9250929050565b600080600080600080600060c0888a0312156129ac57600080fd5b87356129b781612923565b965060208801356129c781612923565b955060408801356129d781612923565b945060608801356129e781612923565b93506080880135925060a088013567ffffffffffffffff811115612a0a57600080fd5b612a168a828b01612948565b989b979a50959850939692959293505050565b803563ffffffff81168114612a3d57600080fd5b919050565b600080600060408486031215612a5757600080fd5b612a6084612a29565b9250602084013567ffffffffffffffff811115612a7c57600080fd5b612a8886828701612948565b9497909650939450505050565b600080600080600060808688031215612aad57600080fd5b8535612ab881612923565b94506020860135612ac881612923565b935060408601359250606086013567ffffffffffffffff811115612aeb57600080fd5b612af788828901612948565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b2357600080fd5b8735612b2e81612923565b96506020880135612b3e81612923565b95506040880135612b4e81612923565b945060608801359350612b6360808901612a29565b925060a088013567ffffffffffffffff811115612a0a57600080fd5b60005b83811015612b9a578181015183820152602001612b82565b838111156105b25750506000910152565b60008151808452612bc3816020860160208601612b7f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006121986020830184612bab565b60008060008060008060a08789031215612c2157600080fd5b8635612c2c81612923565b95506020870135612c3c81612923565b945060408701359350612c5160608801612a29565b9250608087013567ffffffffffffffff811115612c6d57600080fd5b612c7989828a01612948565b979a9699509497509295939492505050565b60008060408385031215612c9e57600080fd5b8235612ca981612923565b91506020830135612cb981612923565b809150509250929050565b60008060008060608587031215612cda57600080fd5b8435612ce581612923565b9350612cf360208601612a29565b9250604085013567ffffffffffffffff811115612d0f57600080fd5b612d1b87828801612948565b95989497509550505050565b600080600060608486031215612d3c57600080fd5b8335612d4781612923565b92506020840135612d5781612923565b91506040840135612d6781612923565b809150509250925092565b600060208284031215612d8457600080fd5b815161219881612923565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612dd057612dd0612d8f565b500390565b600060208284031215612de757600080fd5b8151801515811461219857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e366080830184612bab565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e6f6060830185612bab565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612eba6060830184612bab565b95945050505050565b8281526040602082015260006126ca6040830184612bab565b60008219821115612eef57612eef612d8f565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f4360c0830184612bab565b98975050505050505050565b60008060408385031215612f6257600080fd5b8251612f6d81612923565b602084015190925060ff81168114612cb957600080fd5b60008251612f96818460208701612b7f565b919091019291505056fea164736f6c634300080f000a"; bytes internal constant l1ERC721BridgeCode = - hex"608060405234801561001057600080fd5b50600436106100d45760003560e01c80635d93a3fc11610081578063927ede2d1161005b578063927ede2d14610231578063aa5574521461024f578063c89701a21461026257600080fd5b80635d93a3fc146101cc578063761f4493146102005780637f46ddb21461021357600080fd5b8063485cc955116100b2578063485cc9551461015857806354fd4d501461016b5780635c975abb146101b457600080fd5b806335e80ab3146100d95780633687011a146101235780633cb747bf14610138575b600080fd5b6032546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610136610131366004610fe1565b610282565b005b6001546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b610136610166366004611064565b61032e565b6101a76040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b60405161011a9190611108565b6101bc610518565b604051901515815260200161011a565b6101bc6101da366004611122565b603160209081526000938452604080852082529284528284209052825290205460ff1681565b61013661020e366004611163565b6105b1565b60025473ffffffffffffffffffffffffffffffffffffffff166100f9565b60015473ffffffffffffffffffffffffffffffffffffffff166100f9565b61013661025d3660046111fb565b610a58565b6002546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b333b15610316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6103268686333388888888610b30565b505050505050565b600054610100900460ff161580801561034e5750600054600160ff909116105b806103685750303b158015610368575060005460ff166001145b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161030d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561045257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556104b083734200000000000000000000000000000000000014610e70565b801561051357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610588573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ac9190611272565b905090565b60015473ffffffffffffffffffffffffffffffffffffffff16331480156106865750600254600154604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691636e296e45916004808201926020929091908290030181865afa15801561064a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066e9190611294565b73ffffffffffffffffffffffffffffffffffffffff16145b610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f746865722062726964676500606482015260840161030d565b61071a610518565b15610781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4c314552433732314272696467653a2070617573656400000000000000000000604482015260640161030d565b3073ffffffffffffffffffffffffffffffffffffffff881603610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c314552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c6600000000000000000000000000000000000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152603160209081526040808320938a1683529281528282208683529052205460ff1615156001146108f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4c314552433732314272696467653a20546f6b656e204944206973206e6f742060448201527f657363726f77656420696e20746865204c312042726964676500000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526031602090815260408083208b8616845282528083208884529091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152918616602483015260448201859052906342842e0e90606401600060405180830381600087803b1580156109b557600080fd5b505af11580156109c9573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac87878787604051610a4794939291906112fa565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516610afb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f74206265206164647265737328302900000000000000000000000000000000606482015260840161030d565b610b0b8787338888888888610b30565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff8716610bd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c314552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f742062652061646472657373283029000000000000000000000000000000606482015260840161030d565b600063761f449360e01b888a8989898888604051602401610bfa979695949392919061133a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000959095169490941790935273ffffffffffffffffffffffffffffffffffffffff8c81166000818152603186528381208e8416825286528381208b82529095529382902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590517f23b872dd000000000000000000000000000000000000000000000000000000008152908a166004820152306024820152604481018890529092506323b872dd90606401600060405180830381600087803b158015610d3a57600080fd5b505af1158015610d4e573d6000803e3d6000fd5b50506001546002546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169450633dbb202b9350610db1929091169085908990600401611397565b600060405180830381600087803b158015610dcb57600080fd5b505af1158015610ddf573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a589898888604051610e5d94939291906112fa565b60405180910390a4505050505050505050565b600054610100900460ff16610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161030d565b6001805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560028054929093169116179055565b73ffffffffffffffffffffffffffffffffffffffff81168114610f7c57600080fd5b50565b803563ffffffff81168114610f9357600080fd5b919050565b60008083601f840112610faa57600080fd5b50813567ffffffffffffffff811115610fc257600080fd5b602083019150836020828501011115610fda57600080fd5b9250929050565b60008060008060008060a08789031215610ffa57600080fd5b863561100581610f5a565b9550602087013561101581610f5a565b94506040870135935061102a60608801610f7f565b9250608087013567ffffffffffffffff81111561104657600080fd5b61105289828a01610f98565b979a9699509497509295939492505050565b6000806040838503121561107757600080fd5b823561108281610f5a565b9150602083013561109281610f5a565b809150509250929050565b6000815180845260005b818110156110c3576020818501810151868301820152016110a7565b818111156110d5576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061111b602083018461109d565b9392505050565b60008060006060848603121561113757600080fd5b833561114281610f5a565b9250602084013561115281610f5a565b929592945050506040919091013590565b600080600080600080600060c0888a03121561117e57600080fd5b873561118981610f5a565b9650602088013561119981610f5a565b955060408801356111a981610f5a565b945060608801356111b981610f5a565b93506080880135925060a088013567ffffffffffffffff8111156111dc57600080fd5b6111e88a828b01610f98565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561121657600080fd5b873561122181610f5a565b9650602088013561123181610f5a565b9550604088013561124181610f5a565b94506060880135935061125660808901610f7f565b925060a088013567ffffffffffffffff8111156111dc57600080fd5b60006020828403121561128457600080fd5b8151801515811461111b57600080fd5b6000602082840312156112a657600080fd5b815161111b81610f5a565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006113306060830184866112b1565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261138a60c0830184866112b1565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006113c6606083018561109d565b905063ffffffff8316604083015294935050505056fea164736f6c634300080f000a"; + hex"608060405234801561001057600080fd5b50600436106100d45760003560e01c80635d93a3fc11610081578063927ede2d1161005b578063927ede2d14610231578063aa5574521461024f578063c89701a21461026257600080fd5b80635d93a3fc146101cc578063761f4493146102005780637f46ddb21461021357600080fd5b8063485cc955116100b2578063485cc9551461015857806354fd4d501461016b5780635c975abb146101b457600080fd5b806335e80ab3146100d95780633687011a146101235780633cb747bf14610138575b600080fd5b6032546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610136610131366004610fe1565b610282565b005b6001546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b610136610166366004611064565b61032e565b6101a76040518060400160405280600c81526020017f322e312e312b626574612e31000000000000000000000000000000000000000081525081565b60405161011a9190611108565b6101bc610518565b604051901515815260200161011a565b6101bc6101da366004611122565b603160209081526000938452604080852082529284528284209052825290205460ff1681565b61013661020e366004611163565b6105b1565b60025473ffffffffffffffffffffffffffffffffffffffff166100f9565b60015473ffffffffffffffffffffffffffffffffffffffff166100f9565b61013661025d3660046111fb565b610a58565b6002546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b333b15610316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6103268686333388888888610b30565b505050505050565b600054610100900460ff161580801561034e5750600054600160ff909116105b806103685750303b158015610368575060005460ff166001145b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161030d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561045257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556104b083734200000000000000000000000000000000000014610e70565b801561051357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610588573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ac9190611272565b905090565b60015473ffffffffffffffffffffffffffffffffffffffff16331480156106865750600254600154604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691636e296e45916004808201926020929091908290030181865afa15801561064a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066e9190611294565b73ffffffffffffffffffffffffffffffffffffffff16145b610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f746865722062726964676500606482015260840161030d565b61071a610518565b15610781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4c314552433732314272696467653a2070617573656400000000000000000000604482015260640161030d565b3073ffffffffffffffffffffffffffffffffffffffff881603610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c314552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c6600000000000000000000000000000000000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152603160209081526040808320938a1683529281528282208683529052205460ff1615156001146108f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4c314552433732314272696467653a20546f6b656e204944206973206e6f742060448201527f657363726f77656420696e20746865204c312042726964676500000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526031602090815260408083208b8616845282528083208884529091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152918616602483015260448201859052906342842e0e90606401600060405180830381600087803b1580156109b557600080fd5b505af11580156109c9573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac87878787604051610a4794939291906112fa565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516610afb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f74206265206164647265737328302900000000000000000000000000000000606482015260840161030d565b610b0b8787338888888888610b30565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff8716610bd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c314552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f742062652061646472657373283029000000000000000000000000000000606482015260840161030d565b600063761f449360e01b888a8989898888604051602401610bfa979695949392919061133a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000959095169490941790935273ffffffffffffffffffffffffffffffffffffffff8c81166000818152603186528381208e8416825286528381208b82529095529382902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590517f23b872dd000000000000000000000000000000000000000000000000000000008152908a166004820152306024820152604481018890529092506323b872dd90606401600060405180830381600087803b158015610d3a57600080fd5b505af1158015610d4e573d6000803e3d6000fd5b50506001546002546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169450633dbb202b9350610db1929091169085908990600401611397565b600060405180830381600087803b158015610dcb57600080fd5b505af1158015610ddf573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a589898888604051610e5d94939291906112fa565b60405180910390a4505050505050505050565b600054610100900460ff16610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161030d565b6001805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560028054929093169116179055565b73ffffffffffffffffffffffffffffffffffffffff81168114610f7c57600080fd5b50565b803563ffffffff81168114610f9357600080fd5b919050565b60008083601f840112610faa57600080fd5b50813567ffffffffffffffff811115610fc257600080fd5b602083019150836020828501011115610fda57600080fd5b9250929050565b60008060008060008060a08789031215610ffa57600080fd5b863561100581610f5a565b9550602087013561101581610f5a565b94506040870135935061102a60608801610f7f565b9250608087013567ffffffffffffffff81111561104657600080fd5b61105289828a01610f98565b979a9699509497509295939492505050565b6000806040838503121561107757600080fd5b823561108281610f5a565b9150602083013561109281610f5a565b809150509250929050565b6000815180845260005b818110156110c3576020818501810151868301820152016110a7565b818111156110d5576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061111b602083018461109d565b9392505050565b60008060006060848603121561113757600080fd5b833561114281610f5a565b9250602084013561115281610f5a565b929592945050506040919091013590565b600080600080600080600060c0888a03121561117e57600080fd5b873561118981610f5a565b9650602088013561119981610f5a565b955060408801356111a981610f5a565b945060608801356111b981610f5a565b93506080880135925060a088013567ffffffffffffffff8111156111dc57600080fd5b6111e88a828b01610f98565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561121657600080fd5b873561122181610f5a565b9650602088013561123181610f5a565b9550604088013561124181610f5a565b94506060880135935061125660808901610f7f565b925060a088013567ffffffffffffffff8111156111dc57600080fd5b60006020828403121561128457600080fd5b8151801515811461111b57600080fd5b6000602082840312156112a657600080fd5b815161111b81610f5a565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006113306060830184866112b1565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261138a60c0830184866112b1565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006113c6606083018561109d565b905063ffffffff8316604083015294935050505056fea164736f6c634300080f000a"; } diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol index 753dc3976604..30d8e8be3fb4 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol @@ -21,7 +21,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { address internal constant disputeGameFactoryProxyAddress = 0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb; address internal constant l1CrossDomainMessengerAddress = 0x094e6508ba9d9bf1ce421fff3dE06aE56e67901b; address internal constant l1CrossDomainMessengerProxyAddress = 0xc7B87b2b892EA5C3CfF47168881FE168C00377FB; - address internal constant l1ERC721BridgeAddress = 0x44637A4292E0CD2B17A55d5F6B2F05AFcAcD0586; + address internal constant l1ERC721BridgeAddress = 0x5C4F5e749A61a9503c4AAE8a9393e89609a0e804; address internal constant l1ERC721BridgeProxyAddress = 0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865; address internal constant l1StandardBridgeAddress = 0xb7900B27Be8f0E0fF65d1C3A4671e1220437dd2b; address internal constant l1StandardBridgeProxyAddress = 0xDeF3bca8c80064589E6787477FFa7Dd616B5574F; @@ -469,7 +469,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"0000000000000000000000000000000000000000000000000000000000000006"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"00000000000000000000000044637a4292e0cd2b17a55d5f6b2f05afcacd0586"; + value = hex"0000000000000000000000005c4f5e749a61a9503c4aae8a9393e89609a0e804"; vm.store(l1ERC721BridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol index e72675bc8a63..c983a7ed5277 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol @@ -47,7 +47,7 @@ contract DeploymentSummaryFaultProofsCode { bytes internal constant l1StandardBridgeCode = hex"6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612991565b6105b8565b61023b610270366004612a42565b6109d2565b61023b610283366004612a95565b610aa9565b61023b610296366004612a95565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612b08565b61101b565b34801561037857600080fd5b506103b56040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102e99190612bf5565b3480156103ce57600080fd5b5061023b6103dd366004612c08565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612b08565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612c08565b611212565b34801561047e57600080fd5b506104aa61048d366004612c8b565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612cc4565b6112e6565b34801561050257600080fd5b5061023b610511366004612991565b611328565b61023b610524366004612a42565b611337565b34801561053557600080fd5b5061023b610544366004612d27565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612cc4565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612d72565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612dbe565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612d72565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5792505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061201092505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612dd5565b905090565b6109c987873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061201092505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5792505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f8473420000000000000000000000000000000000001061201f565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a85858584612109565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612df7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612e40565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b630000000000000000000000000000000000000000000000000000000061217c565b806119055750611905827fec4fc8e30000000000000000000000000000000000000000000000000000000061217c565b92915050565b6000611937837f1d1d8b630000000000000000000000000000000000000000000000000000000061217c565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612d72565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261219f565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612e85565b60405180910390a46110138686868686866122ab565b600080611b98612333565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612ec3565b60405180910390a36105b2848484846123d0565b6000806000835160208501868989f195945050505050565b3415611ce5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5374616e646172644272696467653a2063616e6e6f742073656e642076616c7560448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610214565b611cee876118a9565b15611e3c57611cfd878761190b565b611daf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e1f57600080fd5b505af1158015611e33573d6000803e3d6000fd5b50505050611ed0565b611e5e73ffffffffffffffffffffffffffffffffffffffff881686308661243d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e9c908490612edc565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611ede87878787878661249b565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611f42908b908d908c908c908c908b90602401612ef4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611fd592918790600401612e40565b600060405180830381600087803b158015611fef57600080fd5b505af1158015612003573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c57565b600054610100900460ff166120b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f238484604051612168929190612ec3565b60405180910390a36105b284848484612529565b600061218783612588565b8015612198575061219883836125ec565b9392505050565b6000612201826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126bb9092919063ffffffff16565b805190915015610aa4578080602001905181019061221f9190612dd5565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161232393929190612e85565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156123a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c79190612f4f565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161242f929190612ec3565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161251393929190612e85565b60405180910390a46110138686868686866126d2565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161242f929190612ec3565b60006125b4827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ec565b801561190557506125e5827fffffffff000000000000000000000000000000000000000000000000000000006125ec565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156126a4575060208210155b80156126b05750600081115b979650505050505050565b60606126ca848460008561274a565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161232393929190612e85565b6060824710156127dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b61285a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128839190612f84565b60006040518083038185875af1925050503d80600081146128c0576040519150601f19603f3d011682016040523d82523d6000602084013e6128c5565b606091505b50915091506126b0828286606083156128df575081612198565b8251156128ef5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612bf5565b73ffffffffffffffffffffffffffffffffffffffff8116811461294557600080fd5b50565b60008083601f84011261295a57600080fd5b50813567ffffffffffffffff81111561297257600080fd5b60208301915083602082850101111561298a57600080fd5b9250929050565b600080600080600080600060c0888a0312156129ac57600080fd5b87356129b781612923565b965060208801356129c781612923565b955060408801356129d781612923565b945060608801356129e781612923565b93506080880135925060a088013567ffffffffffffffff811115612a0a57600080fd5b612a168a828b01612948565b989b979a50959850939692959293505050565b803563ffffffff81168114612a3d57600080fd5b919050565b600080600060408486031215612a5757600080fd5b612a6084612a29565b9250602084013567ffffffffffffffff811115612a7c57600080fd5b612a8886828701612948565b9497909650939450505050565b600080600080600060808688031215612aad57600080fd5b8535612ab881612923565b94506020860135612ac881612923565b935060408601359250606086013567ffffffffffffffff811115612aeb57600080fd5b612af788828901612948565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b2357600080fd5b8735612b2e81612923565b96506020880135612b3e81612923565b95506040880135612b4e81612923565b945060608801359350612b6360808901612a29565b925060a088013567ffffffffffffffff811115612a0a57600080fd5b60005b83811015612b9a578181015183820152602001612b82565b838111156105b25750506000910152565b60008151808452612bc3816020860160208601612b7f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006121986020830184612bab565b60008060008060008060a08789031215612c2157600080fd5b8635612c2c81612923565b95506020870135612c3c81612923565b945060408701359350612c5160608801612a29565b9250608087013567ffffffffffffffff811115612c6d57600080fd5b612c7989828a01612948565b979a9699509497509295939492505050565b60008060408385031215612c9e57600080fd5b8235612ca981612923565b91506020830135612cb981612923565b809150509250929050565b60008060008060608587031215612cda57600080fd5b8435612ce581612923565b9350612cf360208601612a29565b9250604085013567ffffffffffffffff811115612d0f57600080fd5b612d1b87828801612948565b95989497509550505050565b600080600060608486031215612d3c57600080fd5b8335612d4781612923565b92506020840135612d5781612923565b91506040840135612d6781612923565b809150509250925092565b600060208284031215612d8457600080fd5b815161219881612923565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612dd057612dd0612d8f565b500390565b600060208284031215612de757600080fd5b8151801515811461219857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e366080830184612bab565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e6f6060830185612bab565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612eba6060830184612bab565b95945050505050565b8281526040602082015260006126ca6040830184612bab565b60008219821115612eef57612eef612d8f565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f4360c0830184612bab565b98975050505050505050565b60008060408385031215612f6257600080fd5b8251612f6d81612923565b602084015190925060ff81168114612cb957600080fd5b60008251612f96818460208701612b7f565b919091019291505056fea164736f6c634300080f000a"; bytes internal constant l1ERC721BridgeCode = - hex"608060405234801561001057600080fd5b50600436106100d45760003560e01c80635d93a3fc11610081578063927ede2d1161005b578063927ede2d14610231578063aa5574521461024f578063c89701a21461026257600080fd5b80635d93a3fc146101cc578063761f4493146102005780637f46ddb21461021357600080fd5b8063485cc955116100b2578063485cc9551461015857806354fd4d501461016b5780635c975abb146101b457600080fd5b806335e80ab3146100d95780633687011a146101235780633cb747bf14610138575b600080fd5b6032546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610136610131366004610fe1565b610282565b005b6001546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b610136610166366004611064565b61032e565b6101a76040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b60405161011a9190611108565b6101bc610518565b604051901515815260200161011a565b6101bc6101da366004611122565b603160209081526000938452604080852082529284528284209052825290205460ff1681565b61013661020e366004611163565b6105b1565b60025473ffffffffffffffffffffffffffffffffffffffff166100f9565b60015473ffffffffffffffffffffffffffffffffffffffff166100f9565b61013661025d3660046111fb565b610a58565b6002546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b333b15610316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6103268686333388888888610b30565b505050505050565b600054610100900460ff161580801561034e5750600054600160ff909116105b806103685750303b158015610368575060005460ff166001145b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161030d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561045257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556104b083734200000000000000000000000000000000000014610e70565b801561051357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610588573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ac9190611272565b905090565b60015473ffffffffffffffffffffffffffffffffffffffff16331480156106865750600254600154604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691636e296e45916004808201926020929091908290030181865afa15801561064a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066e9190611294565b73ffffffffffffffffffffffffffffffffffffffff16145b610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f746865722062726964676500606482015260840161030d565b61071a610518565b15610781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4c314552433732314272696467653a2070617573656400000000000000000000604482015260640161030d565b3073ffffffffffffffffffffffffffffffffffffffff881603610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c314552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c6600000000000000000000000000000000000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152603160209081526040808320938a1683529281528282208683529052205460ff1615156001146108f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4c314552433732314272696467653a20546f6b656e204944206973206e6f742060448201527f657363726f77656420696e20746865204c312042726964676500000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526031602090815260408083208b8616845282528083208884529091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152918616602483015260448201859052906342842e0e90606401600060405180830381600087803b1580156109b557600080fd5b505af11580156109c9573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac87878787604051610a4794939291906112fa565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516610afb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f74206265206164647265737328302900000000000000000000000000000000606482015260840161030d565b610b0b8787338888888888610b30565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff8716610bd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c314552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f742062652061646472657373283029000000000000000000000000000000606482015260840161030d565b600063761f449360e01b888a8989898888604051602401610bfa979695949392919061133a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000959095169490941790935273ffffffffffffffffffffffffffffffffffffffff8c81166000818152603186528381208e8416825286528381208b82529095529382902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590517f23b872dd000000000000000000000000000000000000000000000000000000008152908a166004820152306024820152604481018890529092506323b872dd90606401600060405180830381600087803b158015610d3a57600080fd5b505af1158015610d4e573d6000803e3d6000fd5b50506001546002546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169450633dbb202b9350610db1929091169085908990600401611397565b600060405180830381600087803b158015610dcb57600080fd5b505af1158015610ddf573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a589898888604051610e5d94939291906112fa565b60405180910390a4505050505050505050565b600054610100900460ff16610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161030d565b6001805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560028054929093169116179055565b73ffffffffffffffffffffffffffffffffffffffff81168114610f7c57600080fd5b50565b803563ffffffff81168114610f9357600080fd5b919050565b60008083601f840112610faa57600080fd5b50813567ffffffffffffffff811115610fc257600080fd5b602083019150836020828501011115610fda57600080fd5b9250929050565b60008060008060008060a08789031215610ffa57600080fd5b863561100581610f5a565b9550602087013561101581610f5a565b94506040870135935061102a60608801610f7f565b9250608087013567ffffffffffffffff81111561104657600080fd5b61105289828a01610f98565b979a9699509497509295939492505050565b6000806040838503121561107757600080fd5b823561108281610f5a565b9150602083013561109281610f5a565b809150509250929050565b6000815180845260005b818110156110c3576020818501810151868301820152016110a7565b818111156110d5576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061111b602083018461109d565b9392505050565b60008060006060848603121561113757600080fd5b833561114281610f5a565b9250602084013561115281610f5a565b929592945050506040919091013590565b600080600080600080600060c0888a03121561117e57600080fd5b873561118981610f5a565b9650602088013561119981610f5a565b955060408801356111a981610f5a565b945060608801356111b981610f5a565b93506080880135925060a088013567ffffffffffffffff8111156111dc57600080fd5b6111e88a828b01610f98565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561121657600080fd5b873561122181610f5a565b9650602088013561123181610f5a565b9550604088013561124181610f5a565b94506060880135935061125660808901610f7f565b925060a088013567ffffffffffffffff8111156111dc57600080fd5b60006020828403121561128457600080fd5b8151801515811461111b57600080fd5b6000602082840312156112a657600080fd5b815161111b81610f5a565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006113306060830184866112b1565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261138a60c0830184866112b1565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006113c6606083018561109d565b905063ffffffff8316604083015294935050505056fea164736f6c634300080f000a"; + hex"608060405234801561001057600080fd5b50600436106100d45760003560e01c80635d93a3fc11610081578063927ede2d1161005b578063927ede2d14610231578063aa5574521461024f578063c89701a21461026257600080fd5b80635d93a3fc146101cc578063761f4493146102005780637f46ddb21461021357600080fd5b8063485cc955116100b2578063485cc9551461015857806354fd4d501461016b5780635c975abb146101b457600080fd5b806335e80ab3146100d95780633687011a146101235780633cb747bf14610138575b600080fd5b6032546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610136610131366004610fe1565b610282565b005b6001546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b610136610166366004611064565b61032e565b6101a76040518060400160405280600c81526020017f322e312e312b626574612e31000000000000000000000000000000000000000081525081565b60405161011a9190611108565b6101bc610518565b604051901515815260200161011a565b6101bc6101da366004611122565b603160209081526000938452604080852082529284528284209052825290205460ff1681565b61013661020e366004611163565b6105b1565b60025473ffffffffffffffffffffffffffffffffffffffff166100f9565b60015473ffffffffffffffffffffffffffffffffffffffff166100f9565b61013661025d3660046111fb565b610a58565b6002546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b333b15610316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6103268686333388888888610b30565b505050505050565b600054610100900460ff161580801561034e5750600054600160ff909116105b806103685750303b158015610368575060005460ff166001145b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161030d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561045257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556104b083734200000000000000000000000000000000000014610e70565b801561051357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610588573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ac9190611272565b905090565b60015473ffffffffffffffffffffffffffffffffffffffff16331480156106865750600254600154604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691636e296e45916004808201926020929091908290030181865afa15801561064a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066e9190611294565b73ffffffffffffffffffffffffffffffffffffffff16145b610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f746865722062726964676500606482015260840161030d565b61071a610518565b15610781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4c314552433732314272696467653a2070617573656400000000000000000000604482015260640161030d565b3073ffffffffffffffffffffffffffffffffffffffff881603610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c314552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c6600000000000000000000000000000000000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152603160209081526040808320938a1683529281528282208683529052205460ff1615156001146108f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4c314552433732314272696467653a20546f6b656e204944206973206e6f742060448201527f657363726f77656420696e20746865204c312042726964676500000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526031602090815260408083208b8616845282528083208884529091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152918616602483015260448201859052906342842e0e90606401600060405180830381600087803b1580156109b557600080fd5b505af11580156109c9573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac87878787604051610a4794939291906112fa565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516610afb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f74206265206164647265737328302900000000000000000000000000000000606482015260840161030d565b610b0b8787338888888888610b30565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff8716610bd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c314552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f742062652061646472657373283029000000000000000000000000000000606482015260840161030d565b600063761f449360e01b888a8989898888604051602401610bfa979695949392919061133a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000959095169490941790935273ffffffffffffffffffffffffffffffffffffffff8c81166000818152603186528381208e8416825286528381208b82529095529382902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590517f23b872dd000000000000000000000000000000000000000000000000000000008152908a166004820152306024820152604481018890529092506323b872dd90606401600060405180830381600087803b158015610d3a57600080fd5b505af1158015610d4e573d6000803e3d6000fd5b50506001546002546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169450633dbb202b9350610db1929091169085908990600401611397565b600060405180830381600087803b158015610dcb57600080fd5b505af1158015610ddf573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a589898888604051610e5d94939291906112fa565b60405180910390a4505050505050505050565b600054610100900460ff16610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161030d565b6001805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560028054929093169116179055565b73ffffffffffffffffffffffffffffffffffffffff81168114610f7c57600080fd5b50565b803563ffffffff81168114610f9357600080fd5b919050565b60008083601f840112610faa57600080fd5b50813567ffffffffffffffff811115610fc257600080fd5b602083019150836020828501011115610fda57600080fd5b9250929050565b60008060008060008060a08789031215610ffa57600080fd5b863561100581610f5a565b9550602087013561101581610f5a565b94506040870135935061102a60608801610f7f565b9250608087013567ffffffffffffffff81111561104657600080fd5b61105289828a01610f98565b979a9699509497509295939492505050565b6000806040838503121561107757600080fd5b823561108281610f5a565b9150602083013561109281610f5a565b809150509250929050565b6000815180845260005b818110156110c3576020818501810151868301820152016110a7565b818111156110d5576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061111b602083018461109d565b9392505050565b60008060006060848603121561113757600080fd5b833561114281610f5a565b9250602084013561115281610f5a565b929592945050506040919091013590565b600080600080600080600060c0888a03121561117e57600080fd5b873561118981610f5a565b9650602088013561119981610f5a565b955060408801356111a981610f5a565b945060608801356111b981610f5a565b93506080880135925060a088013567ffffffffffffffff8111156111dc57600080fd5b6111e88a828b01610f98565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561121657600080fd5b873561122181610f5a565b9650602088013561123181610f5a565b9550604088013561124181610f5a565b94506060880135935061125660808901610f7f565b925060a088013567ffffffffffffffff8111156111dc57600080fd5b60006020828403121561128457600080fd5b8151801515811461111b57600080fd5b6000602082840312156112a657600080fd5b815161111b81610f5a565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006113306060830184866112b1565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261138a60c0830184866112b1565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006113c6606083018561109d565b905063ffffffff8316604083015294935050505056fea164736f6c634300080f000a"; bytes internal constant disputeGameFactoryCode = hex"6080604052600436106100e85760003560e01c80636593dc6e1161008a57806396cd97201161005957806396cd972014610313578063bb8aa1fc14610333578063c4d66de814610394578063f2fde38b146103b457600080fd5b80636593dc6e14610293578063715018a6146102c057806382ecf2f6146102d55780638da5cb5b146102e857600080fd5b8063254bd683116100c6578063254bd6831461019c5780634d1975b4146101c957806354fd4d50146101e85780635f0150cb1461023e57600080fd5b806314f6b1a3146100ed5780631b685b9e1461010f5780631e3342401461017c575b600080fd5b3480156100f957600080fd5b5061010d6101083660046110c6565b6103d4565b005b34801561011b57600080fd5b5061015261012a3660046110fd565b60656020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018857600080fd5b5061010d610197366004611118565b61045e565b3480156101a857600080fd5b506101bc6101b7366004611142565b6104aa565b60405161017391906111ef565b3480156101d557600080fd5b506068545b604051908152602001610173565b3480156101f457600080fd5b506102316040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161017391906112ac565b34801561024a57600080fd5b5061025e6102593660046112bf565b6106ee565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff909116602083015201610173565b34801561029f57600080fd5b506101da6102ae3660046110fd565b60666020526000908152604090205481565b3480156102cc57600080fd5b5061010d610741565b6101526102e33660046112bf565b610755565b3480156102f457600080fd5b5060335473ffffffffffffffffffffffffffffffffffffffff16610152565b34801561031f57600080fd5b506101da61032e3660046112bf565b6109ef565b34801561033f57600080fd5b5061035361034e366004611346565b610a28565b6040805163ffffffff909416845267ffffffffffffffff909216602084015273ffffffffffffffffffffffffffffffffffffffff1690820152606001610173565b3480156103a057600080fd5b5061010d6103af36600461135f565b610a91565b3480156103c057600080fd5b5061010d6103cf36600461135f565b610c2d565b6103dc610d00565b63ffffffff821660008181526065602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155905190917fff513d80e2c7fa487608f70a618dfbc0cf415699dc69588c747e8c71566c88de91a35050565b610466610d00565b63ffffffff8216600081815260666020526040808220849055518392917f74d6665c4b26d5596a5aa13d3014e0c06af4d322075a797f87b03cd4c5bc91ca91a35050565b606854606090831015806104bc575081155b6106e7575060408051600583901b8101602001909152825b8381116106e5576000606882815481106104f0576104f061137c565b600091825260209091200154905060e081901c60a082901c67ffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff831663ffffffff891683036106b6576001865101865260008173ffffffffffffffffffffffffffffffffffffffff1663609d33346040518163ffffffff1660e01b8152600401600060405180830381865afa15801561058a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105d091908101906113da565b905060008273ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561061f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064391906114a5565b90506040518060a001604052808881526020018781526020018567ffffffffffffffff168152602001828152602001838152508860018a5161068591906114be565b815181106106955761069561137c565b6020026020010181905250888851106106b3575050505050506106e5565b50505b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191506104d49050565b505b9392505050565b60008060006106ff878787876109ef565b60009081526067602052604090205473ffffffffffffffffffffffffffffffffffffffff81169860a09190911c67ffffffffffffffff16975095505050505050565b610749610d00565b6107536000610d81565b565b63ffffffff841660009081526065602052604081205473ffffffffffffffffffffffffffffffffffffffff16806107c5576040517f031c6de400000000000000000000000000000000000000000000000000000000815263ffffffff871660048201526024015b60405180910390fd5b63ffffffff86166000908152606660205260409020543414610813576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006108206001436114be565b40905061088a338783888860405160200161083f9594939291906114fc565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905273ffffffffffffffffffffffffffffffffffffffff841690610df8565b92508273ffffffffffffffffffffffffffffffffffffffff16638129fc1c346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050505060006108fb888888886109ef565b60008181526067602052604090205490915015610947576040517f014f6fe5000000000000000000000000000000000000000000000000000000008152600481018290526024016107bc565b60004260a01b60e08a901b178517600083815260676020526040808220839055606880546001810182559083527fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c220977530183905551919250899163ffffffff8c169173ffffffffffffffffffffffffffffffffffffffff8916917f5b565efe82411da98814f356d0e7bcb8f0219b8d970307c5afb4a6903a8b2e359190a450505050949350505050565b600084848484604051602001610a089493929190611549565b604051602081830303815290604052805190602001209050949350505050565b600080600080600080610a8160688881548110610a4757610a4761137c565b906000526020600020015460e081901c9160a082901c67ffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff1690565b9199909850909650945050505050565b600054610100900460ff1615808015610ab15750600054600160ff909116105b80610acb5750303b158015610acb575060005460ff166001145b610b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107bc565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610bb557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610bbd610e06565b610bc682610d81565b8015610c2957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b610c35610d00565b73ffffffffffffffffffffffffffffffffffffffff8116610cd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107bc565b610ce181610d81565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff163314610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107bc565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006106e760008484610ea5565b600054610100900460ff16610e9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107bc565b610753610feb565b600060608203516040830351602084035184518060208701018051600283016c5af43d3d93803e606057fd5bf3895289600d8a035278593da1005b363d3d373d3d3d3d610000806062363936013d738160481b1760218a03527f9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff603a8a035272fd6100003d81600a3d39f336602c57343d527f6062820160781b1761ff9e82106059018a03528060f01b8352606c8101604c8a038cf097505086610f715763301164256000526004601cfd5b905285527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08501527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa09092019190915292915050565b600054610100900460ff16611082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107bc565b61075333610d81565b803563ffffffff8116811461109f57600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610ce157600080fd5b600080604083850312156110d957600080fd5b6110e28361108b565b915060208301356110f2816110a4565b809150509250929050565b60006020828403121561110f57600080fd5b6106e78261108b565b6000806040838503121561112b57600080fd5b6111348361108b565b946020939093013593505050565b60008060006060848603121561115757600080fd5b6111608461108b565b95602085013595506040909401359392505050565b60005b83811015611190578181015183820152602001611178565b8381111561119f576000848401525b50505050565b600081518084526111bd816020860160208601611175565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561129e578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc001855281518051845287810151888501528681015167ffffffffffffffff16878501526060808201519085015260809081015160a09185018290529061128a818601836111a5565b968901969450505090860190600101611216565b509098975050505050505050565b6020815260006106e760208301846111a5565b600080600080606085870312156112d557600080fd5b6112de8561108b565b935060208501359250604085013567ffffffffffffffff8082111561130257600080fd5b818701915087601f83011261131657600080fd5b81358181111561132557600080fd5b88602082850101111561133757600080fd5b95989497505060200194505050565b60006020828403121561135857600080fd5b5035919050565b60006020828403121561137157600080fd5b81356106e7816110a4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156113ec57600080fd5b815167ffffffffffffffff8082111561140457600080fd5b818401915084601f83011261141857600080fd5b81518181111561142a5761142a6113ab565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611470576114706113ab565b8160405282815287602084870101111561148957600080fd5b61149a836020830160208801611175565b979650505050505050565b6000602082840312156114b757600080fd5b5051919050565b6000828210156114f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008660601b1681528460148201528360348201528183605483013760009101605401908152949350505050565b63ffffffff8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101939250505056fea164736f6c634300080f000a"; bytes internal constant delayedWETHCode = From 26e7d370d6ca18865c5abf659b9bd905917e67bf Mon Sep 17 00:00:00 2001 From: Dan Coombs Date: Fri, 7 Jun 2024 18:49:26 -0500 Subject: [PATCH 004/141] feat(contracts-bedrock): add ERC-4337 entry point v0.7.0 to predeploys (#10763) * feat(contracts-bedrock): add ERC-4337 entry point v0.7.0 to predeploys * fix: fix lint error --- op-service/predeploys/addresses.go | 28 ++++++++++----- .../contracts-bedrock/scripts/L2Genesis.s.sol | 6 ++-- .../src/libraries/Preinstalls.sol | 36 +++++++++++++------ .../contracts-bedrock/test/L2Genesis.t.sol | 2 +- .../contracts-bedrock/test/Preinstalls.t.sol | 16 ++++++--- .../contracts-bedrock/test/setup/Setup.sol | 6 ++-- 6 files changed, 67 insertions(+), 27 deletions(-) diff --git a/op-service/predeploys/addresses.go b/op-service/predeploys/addresses.go index 045a50413bc9..3602bb5448d3 100644 --- a/op-service/predeploys/addresses.go +++ b/op-service/predeploys/addresses.go @@ -34,8 +34,10 @@ const ( DeterministicDeploymentProxy = "0x4e59b44847b379578588920cA78FbF26c0B4956C" MultiSend_v130 = "0x998739BFdAAdde7C933B942a68053933098f9EDa" Permit2 = "0x000000000022D473030F116dDEE9F6B43aC78BA3" - SenderCreator = "0x7fc98430eaedbb6070b35b39d798725049088348" - EntryPoint = "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" + SenderCreator_v060 = "0x7fc98430eaedbb6070b35b39d798725049088348" + EntryPoint_v060 = "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" + SenderCreator_v070 = "0xEFC2c1444eBCC4Db75e7613d20C6a62fF67A167C" + EntryPoint_v070 = "0x0000000071727De22E5E9d8BAf0edAc6f37da032" ) var ( @@ -67,8 +69,10 @@ var ( DeterministicDeploymentProxyAddr = common.HexToAddress(DeterministicDeploymentProxy) MultiSend_v130Addr = common.HexToAddress(MultiSend_v130) Permit2Addr = common.HexToAddress(Permit2) - SenderCreatorAddr = common.HexToAddress(SenderCreator) - EntryPointAddr = common.HexToAddress(EntryPoint) + SenderCreator_v060Addr = common.HexToAddress(SenderCreator_v060) + EntryPoint_v060Addr = common.HexToAddress(EntryPoint_v060) + SenderCreator_v070Addr = common.HexToAddress(SenderCreator_v070) + EntryPoint_v070Addr = common.HexToAddress(EntryPoint_v070) Predeploys = make(map[string]*Predeploy) PredeploysByAddress = make(map[common.Address]*Predeploy) @@ -136,12 +140,20 @@ func init() { Address: Permit2Addr, ProxyDisabled: true, } - Predeploys["SenderCreator"] = &Predeploy{ - Address: SenderCreatorAddr, + Predeploys["SenderCreator_v060"] = &Predeploy{ + Address: SenderCreator_v060Addr, ProxyDisabled: true, } - Predeploys["EntryPoint"] = &Predeploy{ - Address: EntryPointAddr, + Predeploys["EntryPoint_v060"] = &Predeploy{ + Address: EntryPoint_v060Addr, + ProxyDisabled: true, + } + Predeploys["SenderCreator_v070"] = &Predeploy{ + Address: SenderCreator_v070Addr, + ProxyDisabled: true, + } + Predeploys["EntryPoint_v070"] = &Predeploy{ + Address: EntryPoint_v070Addr, ProxyDisabled: true, } diff --git a/packages/contracts-bedrock/scripts/L2Genesis.s.sol b/packages/contracts-bedrock/scripts/L2Genesis.s.sol index f2607b56f5e0..cca52a3c272c 100644 --- a/packages/contracts-bedrock/scripts/L2Genesis.s.sol +++ b/packages/contracts-bedrock/scripts/L2Genesis.s.sol @@ -492,8 +492,10 @@ contract L2Genesis is Deployer { _setPreinstallCode(Preinstalls.DeterministicDeploymentProxy); _setPreinstallCode(Preinstalls.MultiSend_v130); _setPreinstallCode(Preinstalls.Permit2); - _setPreinstallCode(Preinstalls.SenderCreator); - _setPreinstallCode(Preinstalls.EntryPoint); // ERC 4337 + _setPreinstallCode(Preinstalls.SenderCreator_v060); // ERC 4337 v0.6.0 + _setPreinstallCode(Preinstalls.EntryPoint_v060); // ERC 4337 v0.6.0 + _setPreinstallCode(Preinstalls.SenderCreator_v070); // ERC 4337 v0.7.0 + _setPreinstallCode(Preinstalls.EntryPoint_v070); // ERC 4337 v0.7.0 _setPreinstallCode(Preinstalls.BeaconBlockRoots); // 4788 sender nonce must be incremented, since it's part of later upgrade-transactions. // For the upgrade-tx to not create a contract that conflicts with an already-existing copy, diff --git a/packages/contracts-bedrock/src/libraries/Preinstalls.sol b/packages/contracts-bedrock/src/libraries/Preinstalls.sol index 7c245545c869..327b34c0abf4 100644 --- a/packages/contracts-bedrock/src/libraries/Preinstalls.sol +++ b/packages/contracts-bedrock/src/libraries/Preinstalls.sol @@ -32,11 +32,17 @@ library Preinstalls { /// @notice Address of the Permit2 predeploy. address internal constant Permit2 = 0x000000000022D473030F116dDEE9F6B43aC78BA3; - /// @notice Address of the SenderCreator predeploy. - address internal constant SenderCreator = 0x7fc98430eAEdbb6070B35B39D798725049088348; + /// @notice Address of the SenderCreator_v060 predeploy. + address internal constant SenderCreator_v060 = 0x7fc98430eAEdbb6070B35B39D798725049088348; - /// @notice Address of the EntryPoint predeploy. - address internal constant EntryPoint = 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789; + /// @notice Address of the EntryPoint_v060 predeploy. + address internal constant EntryPoint_v060 = 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789; + + /// @notice Address of the SenderCreator_v070 predeploy. + address internal constant SenderCreator_v070 = 0xEFC2c1444eBCC4Db75e7613d20C6a62fF67A167C; + + /// @notice Address of the EntryPoint_v070 predeploy. + address internal constant EntryPoint_v070 = 0x0000000071727De22E5E9d8BAf0edAc6f37da032; /// @notice Address of beacon block roots contract, introduced in the Cancun upgrade. /// See BEACON_ROOTS_ADDRESS in EIP-4788. @@ -81,12 +87,18 @@ library Preinstalls { bytes internal constant MultiSend_v130Code = hex"60806040526004361061001e5760003560e01c80638d80ff0a14610023575b600080fd5b6100dc6004803603602081101561003957600080fd5b810190808035906020019064010000000081111561005657600080fd5b82018360208201111561006857600080fd5b8035906020019184600183028401116401000000008311171561008a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506100de565b005b7f000000000000000000000000998739bfdaadde7c933b942a68053933098f9eda73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610183576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806102106030913960400191505060405180910390fd5b805160205b8181101561020a578083015160f81c6001820184015160601c6015830185015160358401860151605585018701600085600081146101cd57600181146101dd576101e8565b6000808585888a5af191506101e8565b6000808585895af491505b5060008114156101f757600080fd5b8260550187019650505050505050610188565b50505056fe4d756c746953656e642073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6ca26469706673582212205c784303626eec02b71940b551976170b500a8a36cc5adcbeb2c19751a76d05464736f6c63430007060033"; - bytes internal constant SenderCreatorCode = + bytes internal constant SenderCreator_v060Code = hex"6080604052600436101561001257600080fd5b6000803560e01c63570e1a361461002857600080fd5b346100c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c95760043567ffffffffffffffff918282116100c957366023830112156100c95781600401359283116100c95736602484840101116100c9576100c561009e84602485016100fc565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b80fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90806014116101bb5767ffffffffffffffff917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec82018381116101cd575b604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8701160116850190858210908211176101c0575b604052808452602084019036848401116101bb576020946000600c819682946014880187378301015251923560601c5af19060005191156101b557565b60009150565b600080fd5b6101c86100cc565b610178565b6101d56100cc565b61013a56fea26469706673582212201927e80b76ab9b71c952137dd676621a9fdf520c25928815636594036eb1c40364736f6c63430008110033"; - bytes internal constant EntryPointCode = + bytes internal constant EntryPoint_v060Code = hex"60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000007fc98430eaedbb6070b35b39d798725049088348165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f0000000000000000000000007fc98430eaedbb6070b35b39d7987250490883481690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f0000000000000000000000007fc98430eaedbb6070b35b39d7987250490883481690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c63430008110033"; + bytes internal constant SenderCreator_v070Code = + hex"6080600436101561000f57600080fd5b6000803560e01c63570e1a361461002557600080fd5b3461018a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a576004359167ffffffffffffffff9081841161018657366023850112156101865783600401358281116101825736602482870101116101825780601411610182577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec810192808411610155577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8501160116830190838210908211176101555792846024819482600c60209a968b9960405286845289840196603889018837830101525193013560601c5af1908051911561014d575b5073ffffffffffffffffffffffffffffffffffffffff60405191168152f35b90503861012e565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8380fd5b8280fd5b80fdfea26469706673582212207adef8895ad3393b02fab10a111d85ea80ff35366aa43995f4ea20e67f29200664736f6c63430008170033"; + + bytes internal constant EntryPoint_v070Code = + hex"60806040526004361015610024575b361561001957600080fd5b61002233612748565b005b60003560e01c806242dc5314611b0057806301ffc9a7146119ae5780630396cb60146116765780630bd28e3b146115fa5780631b2e01b814611566578063205c2878146113d157806322cdde4c1461136b57806335567e1a146112b35780635287ce12146111a557806370a0823114611140578063765e827f14610e82578063850aaf6214610dc35780639b249f6914610c74578063b760faf914610c3a578063bb9fe6bf14610a68578063c23a5cea146107c4578063dbed18e0146101a15763fc7e286d0361000e573461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61013a61229f565b16600052600060205260a0604060002065ffffffffffff6001825492015460405192835260ff8116151560208401526dffffffffffffffffffffffffffff8160081c16604084015263ffffffff8160781c16606084015260981c166080820152f35b600080fd5b3461019c576101af36612317565b906101b86129bd565b60009160005b82811061056f57506101d08493612588565b6000805b8481106102fc5750507fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000809360005b81811061024757610240868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2613ba7565b6001600255005b6102a261025582848a612796565b73ffffffffffffffffffffffffffffffffffffffff6102766020830161282a565b167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a2806127d6565b906000915b8083106102b957505050600101610209565b909194976102f36102ed6001926102e78c8b6102e0826102da8e8b8d61269d565b9261265a565b5191613597565b90612409565b99612416565b950191906102a7565b6020610309828789612796565b61031f61031682806127d6565b9390920161282a565b9160009273ffffffffffffffffffffffffffffffffffffffff8091165b8285106103505750505050506001016101d4565b909192939561037f83610378610366848c61265a565b516103728b898b61269d565b856129f6565b9290613dd7565b9116840361050a576104a5576103958491613dd7565b9116610440576103b5576103aa600191612416565b96019392919061033c565b60a487604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608489604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b61057a818487612796565b9361058585806127d6565b919095602073ffffffffffffffffffffffffffffffffffffffff6105aa82840161282a565b1697600192838a1461076657896105da575b5050505060019293949550906105d191612409565b939291016101be565b8060406105e892019061284b565b918a3b1561019c57929391906040519485937f2dd8113300000000000000000000000000000000000000000000000000000000855288604486016040600488015252606490818601918a60051b8701019680936000915b8c83106106e657505050505050838392610684927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8560009803016024860152612709565b03818a5afa90816106d7575b506106c657602486604051907f86a9f7500000000000000000000000000000000000000000000000000000000082526004820152fd5b93945084936105d1600189806105bc565b6106e0906121bd565b88610690565b91939596977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c908a9294969a0301865288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18336030181121561019c57836107538793858394016128ec565b9a0196019301909189979695949261063f565b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b3461019c576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576107fc61229f565b33600052600082526001604060002001908154916dffffffffffffffffffffffffffff8360081c16928315610a0a5765ffffffffffff8160981c1680156109ac57421061094e5760009373ffffffffffffffffffffffffffffffffffffffff859485947fffffffffffffff000000000000000000000000000000000000000000000000ff86951690556040517fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda33391806108da8786836020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b0390a2165af16108e8612450565b50156108f057005b606490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b3461019c5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c573360005260006020526001604060002001805463ffffffff8160781c16908115610bdc5760ff1615610b7e5765ffffffffffff908142160191818311610b4f5780547fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff001678ffffffffffff00000000000000000000000000000000000000609885901b161790556040519116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a2005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610022610c6f61229f565b612748565b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043567ffffffffffffffff811161019c576020610cc8610d1b9236906004016122c2565b919073ffffffffffffffffffffffffffffffffffffffff9260405194859283927f570e1a360000000000000000000000000000000000000000000000000000000084528560048501526024840191612709565b03816000857f000000000000000000000000efc2c1444ebcc4db75e7613d20c6a62ff67a167c165af1908115610db757602492600092610d86575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b610da991925060203d602011610db0575b610da181836121ed565b8101906126dd565b9083610d56565b503d610d97565b6040513d6000823e3d90fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610dfa61229f565b60243567ffffffffffffffff811161019c57600091610e1e839236906004016122c2565b90816040519283928337810184815203915af4610e39612450565b90610e7e6040519283927f99410554000000000000000000000000000000000000000000000000000000008452151560048401526040602484015260448301906123c6565b0390fd5b3461019c57610e9036612317565b610e9b9291926129bd565b610ea483612588565b60005b848110610f1c57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000915b858310610eec576102408585613ba7565b909193600190610f12610f0087898761269d565b610f0a888661265a565b519088613597565b0194019190610edb565b610f47610f40610f2e8385979561265a565b51610f3a84898761269d565b846129f6565b9190613dd7565b73ffffffffffffffffffffffffffffffffffffffff929183166110db5761107657610f7190613dd7565b911661101157610f8657600101929092610ea7565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608483604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61118c61229f565b1660005260006020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff6111f161229f565b6000608060405161120181612155565b828152826020820152826040820152826060820152015216600052600060205260a06040600020608060405161123681612155565b6001835493848352015490602081019060ff8316151582526dffffffffffffffffffffffffffff60408201818560081c16815263ffffffff936060840193858760781c16855265ffffffffffff978891019660981c1686526040519788525115156020880152511660408601525116606084015251166080820152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760206112ec61229f565b73ffffffffffffffffffffffffffffffffffffffff6113096122f0565b911660005260018252604060002077ffffffffffffffffffffffffffffffffffffffffffffffff821660005282526040600020547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b3461019c577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60208136011261019c576004359067ffffffffffffffff821161019c5761012090823603011261019c576113c9602091600401612480565b604051908152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761140861229f565b60243590336000526000602052604060002090815491828411611508576000808573ffffffffffffffffffffffffffffffffffffffff8295839561144c848a612443565b90556040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af16114a2612450565b50156114aa57005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761159d61229f565b73ffffffffffffffffffffffffffffffffffffffff6115ba6122f0565b9116600052600160205277ffffffffffffffffffffffffffffffffffffffffffffffff604060002091166000526020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043577ffffffffffffffffffffffffffffffffffffffffffffffff811680910361019c5733600052600160205260406000209060005260205260406000206116728154612416565b9055005b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043563ffffffff9182821680920361019c5733600052600081526040600020928215611950576001840154908160781c1683106118f2576116f86dffffffffffffffffffffffffffff9182349160081c16612409565b93841561189457818511611836579065ffffffffffff61180592546040519061172082612155565b8152848101926001845260408201908816815260608201878152600160808401936000855233600052600089526040600020905181550194511515917fffffffffffffffffffffffffff0000000000000000000000000000000000000060ff72ffffffff0000000000000000000000000000006effffffffffffffffffffffffffff008954945160081b16945160781b1694169116171717835551167fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffff78ffffffffffff0000000000000000000000000000000000000083549260981b169116179055565b6040519283528201527fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c0160403392a2005b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361019c57807f60fc6b6e0000000000000000000000000000000000000000000000000000000060209214908115611ad6575b8115611aac575b8115611a82575b8115611a58575b506040519015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501482611a4d565b7f3e84f0210000000000000000000000000000000000000000000000000000000081149150611a46565b7fcf28ef970000000000000000000000000000000000000000000000000000000081149150611a3f565b7f915074d80000000000000000000000000000000000000000000000000000000081149150611a38565b3461019c576102007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5767ffffffffffffffff60043581811161019c573660238201121561019c57611b62903690602481600401359101612268565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101c0811261019c5761014060405191611b9e83612155565b1261019c5760405192611bb0846121a0565b60243573ffffffffffffffffffffffffffffffffffffffff8116810361019c578452602093604435858201526064356040820152608435606082015260a435608082015260c43560a082015260e43560c08201526101043573ffffffffffffffffffffffffffffffffffffffff8116810361019c5760e08201526101243561010082015261014435610120820152825261016435848301526101843560408301526101a43560608301526101c43560808301526101e43590811161019c57611c7c9036906004016122c2565b905a3033036120f7578351606081015195603f5a0260061c61271060a0840151890101116120ce5760009681519182611ff0575b5050505090611cca915a9003608085015101923691612268565b925a90600094845193611cdc85613ccc565b9173ffffffffffffffffffffffffffffffffffffffff60e0870151168015600014611ea957505073ffffffffffffffffffffffffffffffffffffffff855116935b5a9003019360a06060820151910151016080860151850390818111611e95575b50508302604085015192818410600014611dce5750506003811015611da157600203611d79576113c99293508093611d7481613d65565b613cf6565b5050507fdeadaa51000000000000000000000000000000000000000000000000000000008152fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b81611dde92979396940390613c98565b506003841015611e6857507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f60808683015192519473ffffffffffffffffffffffffffffffffffffffff865116948873ffffffffffffffffffffffffffffffffffffffff60e0890151169701519160405192835215898301528760408301526060820152a46113c9565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6064919003600a0204909301928780611d3d565b8095918051611eba575b5050611d1d565b6003861015611fc1576002860315611eb35760a088015190823b1561019c57600091611f2491836040519586809581947f7c627b210000000000000000000000000000000000000000000000000000000083528d60048401526080602484015260848301906123c6565b8b8b0260448301528b60648301520393f19081611fad575b50611fa65787893d610800808211611f9e575b506040519282828501016040528184528284013e610e7e6040519283927fad7954bc000000000000000000000000000000000000000000000000000000008452600484015260248301906123c6565b905083611f4f565b8980611eb3565b611fb89199506121bd565b6000978a611f3c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91600092918380938c73ffffffffffffffffffffffffffffffffffffffff885116910192f115612023575b808080611cb0565b611cca929195503d6108008082116120c6575b5060405190888183010160405280825260008983013e805161205f575b5050600194909161201b565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20188870151918973ffffffffffffffffffffffffffffffffffffffff8551169401516120bc604051928392835260408d84015260408301906123c6565b0390a38680612053565b905088612036565b877fdeaddead000000000000000000000000000000000000000000000000000000006000526000fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b60a0810190811067ffffffffffffffff82111761217157604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610140810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157604052565b6060810190811067ffffffffffffffff82111761217157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926122748261222e565b9161228260405193846121ed565b82948184528183011161019c578281602093846000960137010152565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9181601f8401121561019c5782359167ffffffffffffffff831161019c576020838186019501011161019c57565b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261019c5760043567ffffffffffffffff9283821161019c578060238301121561019c57816004013593841161019c5760248460051b8301011161019c57602401919060243573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b60005b8381106123b65750506000910152565b81810151838201526020016123a6565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612402815180928187528780880191016123a3565b0116010190565b91908201809211610b4f57565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b4f5760010190565b91908203918211610b4f57565b3d1561247b573d906124618261222e565b9161246f60405193846121ed565b82523d6000602084013e565b606090565b604061248e8183018361284b565b90818351918237206124a3606084018461284b565b90818451918237209260c06124bb60e083018361284b565b908186519182372091845195602087019473ffffffffffffffffffffffffffffffffffffffff833516865260208301358789015260608801526080870152608081013560a087015260a081013582870152013560e08501526101009081850152835261012083019167ffffffffffffffff918484108385111761217157838252845190206101408501908152306101608601524661018086015260608452936101a00191821183831017612171575251902090565b67ffffffffffffffff81116121715760051b60200190565b9061259282612570565b6040906125a260405191826121ed565b8381527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06125d08295612570565b019160005b8381106125e25750505050565b60209082516125f081612155565b83516125fb816121a0565b600081526000849181838201528187820152816060818184015260809282848201528260a08201528260c08201528260e082015282610100820152826101208201528652818587015281898701528501528301528286010152016125d5565b805182101561266e5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919081101561266e5760051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18136030182121561019c570190565b9081602091031261019c575173ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b7f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4602073ffffffffffffffffffffffffffffffffffffffff61278a3485613c98565b936040519485521692a2565b919081101561266e5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18136030182121561019c570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c57602001918160051b3603831361019c57565b3573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c5760200191813603831361019c57565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019c57016020813591019167ffffffffffffffff821161019c57813603831361019c57565b61012091813573ffffffffffffffffffffffffffffffffffffffff811680910361019c576129626129476129ba9561299b93855260208601356020860152612937604087018761289c565b9091806040880152860191612709565b612954606086018661289c565b908583036060870152612709565b6080840135608084015260a084013560a084015260c084013560c084015261298d60e085018561289c565b9084830360e0860152612709565b916129ac610100918281019061289c565b929091818503910152612709565b90565b60028054146129cc5760028055565b60046040517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b926000905a93805194843573ffffffffffffffffffffffffffffffffffffffff811680910361019c5786526020850135602087015260808501356fffffffffffffffffffffffffffffffff90818116606089015260801c604088015260a086013560c088015260c086013590811661010088015260801c610120870152612a8060e086018661284b565b801561357b576034811061351d578060141161019c578060241161019c5760341161019c57602481013560801c60a0880152601481013560801c60808801523560601c60e08701525b612ad285612480565b60208301526040860151946effffffffffffffffffffffffffffff8660c08901511760608901511760808901511760a0890151176101008901511761012089015117116134bf57604087015160608801510160808801510160a08801510160c0880151016101008801510296835173ffffffffffffffffffffffffffffffffffffffff81511690612b66604085018561284b565b806131e4575b505060e0015173ffffffffffffffffffffffffffffffffffffffff1690600082156131ac575b6020612bd7918b828a01516000868a604051978896879586937f19822f7c00000000000000000000000000000000000000000000000000000000855260048501613db5565b0393f160009181613178575b50612c8b573d8c610800808311612c83575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141323320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612bf5565b9a92939495969798999a91156130f2575b509773ffffffffffffffffffffffffffffffffffffffff835116602084015190600052600160205260406000208160401c60005260205267ffffffffffffffff604060002091825492612cee84612416565b9055160361308d575a8503116130285773ffffffffffffffffffffffffffffffffffffffff60e0606093015116612d42575b509060a09184959697986040608096015260608601520135905a900301910152565b969550505a9683519773ffffffffffffffffffffffffffffffffffffffff60e08a01511680600052600060205260406000208054848110612fc3576080612dcd9a9b9c600093878094039055015192602089015183604051809d819582947f52b7512c0000000000000000000000000000000000000000000000000000000084528c60048501613db5565b039286f1978860009160009a612f36575b50612e86573d8b610800808311612e7e575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141333320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612df0565b9991929394959697989998925a900311612eab57509096959094939291906080612d20565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602760448201527f41413336206f766572207061796d6173746572566572696669636174696f6e4760648201527f61734c696d6974000000000000000000000000000000000000000000000000006084820152fd5b915098503d90816000823e612f4b82826121ed565b604081838101031261019c5780519067ffffffffffffffff821161019c57828101601f83830101121561019c578181015191612f868361222e565b93612f9460405195866121ed565b838552820160208483850101011161019c57602092612fba9184808701918501016123a3565b01519838612dde565b60848b604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413331207061796d6173746572206465706f73697420746f6f206c6f7700006064820152fd5b608490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413236206f76657220766572696669636174696f6e4761734c696d697400006064820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601a60448201527f4141323520696e76616c6964206163636f756e74206e6f6e63650000000000006064820152fd5b600052600060205260406000208054808c11613113578b9003905538612c9c565b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152fd5b9091506020813d6020116131a4575b81613194602093836121ed565b8101031261019c57519038612be3565b3d9150613187565b508060005260006020526040600020548a81116000146131d75750612bd7602060005b915050612b92565b6020612bd7918c036131cf565b833b61345a57604088510151602060405180927f570e1a360000000000000000000000000000000000000000000000000000000082528260048301528160008161323260248201898b612709565b039273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000efc2c1444ebcc4db75e7613d20c6a62ff67a167c1690f1908115610db75760009161343b575b5073ffffffffffffffffffffffffffffffffffffffff811680156133d6578503613371573b1561330c5760141161019c5773ffffffffffffffffffffffffffffffffffffffff9183887fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d604060e0958787602086015195510151168251913560601c82526020820152a391612b6c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152fd5b60848e604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313420696e6974436f6465206d7573742072657475726e2073656e6465726064820152fd5b60848f604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601b60448201527f4141313320696e6974436f6465206661696c6564206f72204f4f4700000000006064820152fd5b613454915060203d602011610db057610da181836121ed565b3861327c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b5050600060e087015260006080870152600060a0870152612ac9565b9092915a906060810151916040928351967fffffffff00000000000000000000000000000000000000000000000000000000886135d7606084018461284b565b600060038211613b9f575b7f8dd7712f0000000000000000000000000000000000000000000000000000000094168403613a445750505061379d6000926136b292602088015161363a8a5193849360208501528b602485015260648401906128ec565b90604483015203906136727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0928381018352826121ed565b61379189519485927e42dc5300000000000000000000000000000000000000000000000000000000602085015261020060248501526102248401906123c6565b613760604484018b60806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152876123c6565b039081018352826121ed565b6020918183809351910182305af1600051988652156137bf575b505050505050565b909192939495965060003d8214613a3a575b7fdeaddead00000000000000000000000000000000000000000000000000000000810361385b57608487878051917f220266b600000000000000000000000000000000000000000000000000000000835260048301526024820152600f60448201527f41413935206f7574206f662067617300000000000000000000000000000000006064820152fd5b7fdeadaa510000000000000000000000000000000000000000000000000000000091929395949650146000146138c55750506138a961389e6138b8935a90612443565b608085015190612409565b9083015183611d748295613d65565b905b3880808080806137b7565b909261395290828601518651907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f479273ffffffffffffffffffffffffffffffffffffffff9580878551169401516139483d610800808211613a32575b508a519084818301018c5280825260008583013e8a805194859485528401528a8301906123c6565b0390a35a90612443565b916139636080860193845190612409565b926000905a94829488519761397789613ccc565b948260e08b0151168015600014613a1857505050875116955b5a9003019560a06060820151910151019051860390818111613a04575b5050840290850151928184106000146139de57505080611e68575090816139d89293611d7481613d65565b906138ba565b6139ee9082849397950390613c98565b50611e68575090826139ff92613cf6565b6139d8565b6064919003600a02049094019338806139ad565b90919892509751613a2a575b50613990565b955038613a24565b905038613920565b8181803e516137d1565b613b97945082935090613a8c917e42dc53000000000000000000000000000000000000000000000000000000006020613b6b9501526102006024860152610224850191612709565b613b3a604484018860806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152846123c6565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018952886121ed565b60008761379d565b5081356135e2565b73ffffffffffffffffffffffffffffffffffffffff168015613c3a57600080809381935af1613bd4612450565b5015613bdc57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff166000526000602052613cc66040600020918254612409565b80915590565b610120610100820151910151808214613cf257480180821015613ced575090565b905090565b5090565b9190917f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f6080602083015192519473ffffffffffffffffffffffffffffffffffffffff946020868851169660e089015116970151916040519283526000602084015260408301526060820152a4565b60208101519051907f67b4fa9642f42120bf031f3051d1824b0fe25627945b27b8a6a65d5761d5482e60208073ffffffffffffffffffffffffffffffffffffffff855116940151604051908152a3565b613dcd604092959493956060835260608301906128ec565b9460208201520152565b8015613e6457600060408051613dec816121d1565b828152826020820152015273ffffffffffffffffffffffffffffffffffffffff811690604065ffffffffffff91828160a01c16908115613e5c575b60d01c92825191613e37836121d1565b8583528460208401521691829101524211908115613e5457509091565b905042109091565b839150613e27565b5060009060009056fea2646970667358221220b094fd69f04977ae9458e5ba422d01cd2d20dbcfca0992ff37f19aa07deec25464736f6c63430008170033"; + bytes internal constant BeaconBlockRootsCode = hex"3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500"; @@ -99,8 +111,10 @@ library Preinstalls { if (_addr == SafeSingletonFactory) return SafeSingletonFactoryCode; if (_addr == DeterministicDeploymentProxy) return DeterministicDeploymentProxyCode; if (_addr == MultiSend_v130) return MultiSend_v130Code; - if (_addr == SenderCreator) return SenderCreatorCode; - if (_addr == EntryPoint) return EntryPointCode; + if (_addr == SenderCreator_v060) return SenderCreator_v060Code; + if (_addr == EntryPoint_v060) return EntryPoint_v060Code; + if (_addr == SenderCreator_v070) return SenderCreator_v070Code; + if (_addr == EntryPoint_v070) return EntryPoint_v070Code; if (_addr == Permit2) return getPermit2Code(_chainID); if (_addr == BeaconBlockRoots) return BeaconBlockRootsCode; @@ -119,8 +133,10 @@ library Preinstalls { if (_addr == SafeSingletonFactory) return "SafeSingletonFactory"; if (_addr == DeterministicDeploymentProxy) return "DeterministicDeploymentProxy"; if (_addr == MultiSend_v130) return "MultiSend_v130"; - if (_addr == SenderCreator) return "SenderCreator"; - if (_addr == EntryPoint) return "EntryPoint"; + if (_addr == SenderCreator_v060) return "SenderCreator_v060"; + if (_addr == EntryPoint_v060) return "EntryPoint_v060"; + if (_addr == SenderCreator_v070) return "SenderCreator_v070"; + if (_addr == EntryPoint_v070) return "EntryPoint_v070"; if (_addr == BeaconBlockRoots) return "BeaconBlockRoots"; revert("Preinstalls: unnamed preinstall"); } diff --git a/packages/contracts-bedrock/test/L2Genesis.t.sol b/packages/contracts-bedrock/test/L2Genesis.t.sol index eb1e603c9f16..f01a3818b880 100644 --- a/packages/contracts-bedrock/test/L2Genesis.t.sol +++ b/packages/contracts-bedrock/test/L2Genesis.t.sol @@ -186,7 +186,7 @@ contract L2GenesisTest is Test { uint256 expected = 0; expected += 2048 - 2; // predeploy proxies - expected += 19; // predeploy implementations (excl. legacy erc20-style eth and legacy message sender) + expected += 21; // predeploy implementations (excl. legacy erc20-style eth and legacy message sender) expected += 256; // precompiles expected += 12; // preinstalls expected += 1; // 4788 deployer account diff --git a/packages/contracts-bedrock/test/Preinstalls.t.sol b/packages/contracts-bedrock/test/Preinstalls.t.sol index 1fa31a0cfb0f..eca9a063b21c 100644 --- a/packages/contracts-bedrock/test/Preinstalls.t.sol +++ b/packages/contracts-bedrock/test/Preinstalls.t.sol @@ -98,12 +98,20 @@ contract PreinstallsTest is CommonTest { vm.chainId(pre); } - function test_preinstall_senderCreator_succeeds() external view { - assertPreinstall(Preinstalls.SenderCreator, Preinstalls.SenderCreatorCode); + function test_preinstall_senderCreatorv060_succeeds() external view { + assertPreinstall(Preinstalls.SenderCreator_v060, Preinstalls.SenderCreator_v060Code); } - function test_preinstall_entrypoint_succeeds() external view { - assertPreinstall(Preinstalls.EntryPoint, Preinstalls.EntryPointCode); + function test_preinstall_entrypointv060_succeeds() external view { + assertPreinstall(Preinstalls.EntryPoint_v060, Preinstalls.EntryPoint_v060Code); + } + + function test_preinstall_senderCreatorv070_succeeds() external view { + assertPreinstall(Preinstalls.SenderCreator_v070, Preinstalls.SenderCreator_v070Code); + } + + function test_preinstall_entrypointv070_succeeds() external view { + assertPreinstall(Preinstalls.EntryPoint_v070, Preinstalls.EntryPoint_v070Code); } function test_preinstall_beaconBlockRoots_succeeds() external view { diff --git a/packages/contracts-bedrock/test/setup/Setup.sol b/packages/contracts-bedrock/test/setup/Setup.sol index 9844e6ddd7cc..42b235dc8a77 100644 --- a/packages/contracts-bedrock/test/setup/Setup.sol +++ b/packages/contracts-bedrock/test/setup/Setup.sol @@ -217,8 +217,10 @@ contract Setup { labelPreinstall(Preinstalls.DeterministicDeploymentProxy); labelPreinstall(Preinstalls.MultiSend_v130); labelPreinstall(Preinstalls.Permit2); - labelPreinstall(Preinstalls.SenderCreator); - labelPreinstall(Preinstalls.EntryPoint); + labelPreinstall(Preinstalls.SenderCreator_v060); + labelPreinstall(Preinstalls.EntryPoint_v060); + labelPreinstall(Preinstalls.SenderCreator_v070); + labelPreinstall(Preinstalls.EntryPoint_v070); labelPreinstall(Preinstalls.BeaconBlockRoots); console.log("Setup: completed L2 genesis"); From dd366772a4f14b75f85e9f22a8e4154c782c95ec Mon Sep 17 00:00:00 2001 From: smartcontracts Date: Sat, 8 Jun 2024 00:47:57 -0400 Subject: [PATCH 005/141] fix(ct): various small Drippie management fixes (#10762) Fixes a number of small bugs in the Drippie management script. - Fixes a bug that caused Gelato tasks to be created with the wrong time interval. - Improves the Drippie script to correctly pause tasks that are no longer present in the config file. - Adds config file prefixing so that the management script can be used with a number of different config files without those other tasks being paused by accident. --- .../sepolia-faucet-bridges.json | 21 ++--- .../drippie-config/sepolia-faucet-core.json | 13 ++-- .../drippie-config/sepolia-ops.json | 27 ++++--- .../periphery-deploy-config/sepolia.json | 4 +- .../periphery/drippie/DrippieConfig.s.sol | 17 +++- .../periphery/drippie/ManageDrippie.s.sol | 77 +++++++++++++++++-- 6 files changed, 120 insertions(+), 39 deletions(-) diff --git a/packages/contracts-bedrock/periphery-deploy-config/drippie-config/sepolia-faucet-bridges.json b/packages/contracts-bedrock/periphery-deploy-config/drippie-config/sepolia-faucet-bridges.json index d48f8c053317..16eb71050d1b 100644 --- a/packages/contracts-bedrock/periphery-deploy-config/drippie-config/sepolia-faucet-bridges.json +++ b/packages/contracts-bedrock/periphery-deploy-config/drippie-config/sepolia-faucet-bridges.json @@ -2,10 +2,13 @@ "drippie": "0xd6F935Bd272BEE05bD64096D82970482EF16D64b", "gelato": "0x859E31b3848Ec384012EECc72C5c49821008296C", - "note": "Object attributes below are prefixed with numbers because of how foundry parses JSON into structs in alphabetical order", + "__comment": "Prefix is used to namespace drips so that drip management can be handled modularly", + "prefix": "faucetbridged", + + "__comment": "Object attributes below are prefixed with numbers because of how foundry parses JSON into structs in alphabetical order", "drips": [ { - "00__name": "FaucetBridgedDrip_opmainnet_V1", + "00__name": "opmainnet_v1", "01__dripcheck": "CheckTrue", "02__checkparams": {}, "03__recipient": "0xFBb0621E0B23b5478B630BD55a5f21f67730B0F1", @@ -14,7 +17,7 @@ "06__data": "0x000000000000000000000000f21d42203af9af1c86e1e8ac501b41f5bc004a0a0000000000000000000000000000000000000000000000000000000000030d4000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" }, { - "00__name": "FaucetBridgedDrip_base_V1", + "00__name": "base_v1", "01__dripcheck": "CheckTrue", "02__checkparams": {}, "03__recipient": "0xfd0Bf71F60660E2f608ed56e1659C450eB113120", @@ -23,7 +26,7 @@ "06__data": "0x000000000000000000000000f21d42203af9af1c86e1e8ac501b41f5bc004a0a0000000000000000000000000000000000000000000000000000000000030d4000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" }, { - "00__name": "FaucetBridgedDrip_zora_V1", + "00__name": "zora_v1", "01__dripcheck": "CheckTrue", "02__checkparams": {}, "03__recipient": "0x5376f1D543dcbB5BD416c56C189e4cB7399fCcCB", @@ -32,7 +35,7 @@ "06__data": "0x000000000000000000000000f21d42203af9af1c86e1e8ac501b41f5bc004a0a0000000000000000000000000000000000000000000000000000000000030d4000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" }, { - "00__name": "FaucetBridgedDrip_pgn_V1", + "00__name": "pgn_v1", "01__dripcheck": "CheckTrue", "02__checkparams": {}, "03__recipient": "0xFaE6abCAF30D23e233AC7faF747F2fC3a5a6Bfa3", @@ -41,7 +44,7 @@ "06__data": "0x000000000000000000000000f21d42203af9af1c86e1e8ac501b41f5bc004a0a0000000000000000000000000000000000000000000000000000000000030d4000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" }, { - "00__name": "FaucetBridgedDrip_orderly_V1", + "00__name": "orderly_v1", "01__dripcheck": "CheckTrue", "02__checkparams": {}, "03__recipient": "0x1Af0494040d6904A9F3EE21921de4b359C736333", @@ -50,7 +53,7 @@ "06__data": "0x000000000000000000000000f21d42203af9af1c86e1e8ac501b41f5bc004a0a0000000000000000000000000000000000000000000000000000000000030d4000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" }, { - "00__name": "FaucetBridgedDrip_mode_V1", + "00__name": "mode_v1", "01__dripcheck": "CheckTrue", "02__checkparams": {}, "03__recipient": "0xbC5C679879B2965296756CD959C3C739769995E2", @@ -59,7 +62,7 @@ "06__data": "0x000000000000000000000000f21d42203af9af1c86e1e8ac501b41f5bc004a0a0000000000000000000000000000000000000000000000000000000000030d4000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" }, { - "00__name": "FaucetBridgedDrip_lyra_V1", + "00__name": "lyra_v1", "01__dripcheck": "CheckTrue", "02__checkparams": {}, "03__recipient": "0x915f179A77FB2e1AeA8b56Ebc0D75A7e1A8a7A17", @@ -68,7 +71,7 @@ "06__data": "0x000000000000000000000000f21d42203af9af1c86e1e8ac501b41f5bc004a0a0000000000000000000000000000000000000000000000000000000000030d4000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" }, { - "00__name": "FaucetBridgedDrip_lisk_V1", + "00__name": "lisk_v1", "01__dripcheck": "CheckTrue", "02__checkparams": {}, "03__recipient": "0x1Fb30e446eA791cd1f011675E5F3f5311b70faF5", diff --git a/packages/contracts-bedrock/periphery-deploy-config/drippie-config/sepolia-faucet-core.json b/packages/contracts-bedrock/periphery-deploy-config/drippie-config/sepolia-faucet-core.json index 1a1ef010eca8..c7eba58a874c 100644 --- a/packages/contracts-bedrock/periphery-deploy-config/drippie-config/sepolia-faucet-core.json +++ b/packages/contracts-bedrock/periphery-deploy-config/drippie-config/sepolia-faucet-core.json @@ -2,10 +2,13 @@ "drippie": "0xd6F935Bd272BEE05bD64096D82970482EF16D64b", "gelato": "0x859E31b3848Ec384012EECc72C5c49821008296C", - "note": "Object attributes below are prefixed with numbers because of how foundry parses JSON into structs in alphabetical order", + "__comment": "Prefix is used to namespace drips so that drip management can be handled modularly", + "prefix": "faucetcore", + + "__comment": "Object attributes below are prefixed with numbers because of how foundry parses JSON into structs in alphabetical order", "drips": [ { - "00__name": "FaucetDrip_V1", + "00__name": "balance_v1", "01__dripcheck": "CheckBalanceLow", "02__checkparams": { "01__target": "0xF21d42203AF9af1C86E1e8ac501B41f5bc004A0a", @@ -17,7 +20,7 @@ "06__data": "" }, { - "00__name": "FaucetDrip_V2", + "00__name": "balance_v2", "01__dripcheck": "CheckBalanceLow", "02__checkparams": { "01__target": "0xF21d42203AF9af1C86E1e8ac501B41f5bc004A0a", @@ -29,7 +32,7 @@ "06__data": "" }, { - "00__name": "FaucetAdminDrip_V1", + "00__name": "admin_v1", "01__dripcheck": "CheckBalanceLow", "02__checkparams": { "01__target": "0x212E789D4523D4BAF464f8Fb2A9B9dff2B36e5A6", @@ -41,7 +44,7 @@ "06__data": "" }, { - "00__name": "FaucetGelatoDrip_V1", + "00__name": "gelato_v1", "01__dripcheck": "CheckGelatoLow", "02__checkparams": { "00__treasury": "0x7506C12a824d73D9b08564d5Afc22c949434755e", diff --git a/packages/contracts-bedrock/periphery-deploy-config/drippie-config/sepolia-ops.json b/packages/contracts-bedrock/periphery-deploy-config/drippie-config/sepolia-ops.json index 6b38dd37b4a2..96210f4e23df 100644 --- a/packages/contracts-bedrock/periphery-deploy-config/drippie-config/sepolia-ops.json +++ b/packages/contracts-bedrock/periphery-deploy-config/drippie-config/sepolia-ops.json @@ -1,23 +1,26 @@ { - "drippie": "0xd6F935Bd272BEE05bD64096D82970482EF16D64b", + "drippie": "0xa0fF2a54AdC3fB33c44a141E67d194CF249258cb", "gelato": "0x2A6C106ae13B558BB9E2Ec64Bd2f1f7BEFF3A5E0", - "note": "Object attributes below are prefixed with numbers because of how foundry parses JSON into structs in alphabetical order", + "__comment": "Prefix is used to namespace drips so that drip management can be handled modularly", + "prefix": "operations", + + "__comment": "Object attributes below are prefixed with numbers because of how foundry parses JSON into structs in alphabetical order", "drips": [ { - "00__name": "OperationsSequencerDrip_V1", + "00__name": "sequencer_v2", "01__dripcheck": "CheckBalanceLow", "02__checkparams": { "01__target": "0x8F23BB38F531600e5d8FDDaAEC41F13FaB46E98c", - "02__threshold": 100000000000000000000 + "02__threshold": 1000000000000000000000 }, "03__recipient": "0x8F23BB38F531600e5d8FDDaAEC41F13FaB46E98c", - "04__value": 20000000000000000000, - "05__interval": 86400, + "04__value": 100000000000000000000, + "05__interval": 3600, "06__data": "" }, { - "00__name": "OperationsProposerDrip_V1", + "00__name": "proposer_v2", "01__dripcheck": "CheckBalanceLow", "02__checkparams": { "01__target": "0x49277EE36A024120Ee218127354c4a3591dc90A9", @@ -29,27 +32,27 @@ "06__data": "" }, { - "00__name": "OperationsGelatoDrip_V1", + "00__name": "gelato_v2", "01__dripcheck": "CheckGelatoLow", "02__checkparams": { "00__treasury": "0x7506C12a824d73D9b08564d5Afc22c949434755e", "01__threshold": 1000000000000000000, - "02__recipient": "0x03C256F7Ae7518D0fe489F257ab4b928D37CBE16" + "02__recipient": "0xCd438409d5Cac9D2E076Ac7Bd0Bf2377E99BB6e4" }, "03__recipient": "0x7506C12a824d73D9b08564d5Afc22c949434755e", "04__value": 1000000000000000000, "05__interval": 86400, - "06__data": "0x00000000000000000000000003c256f7ae7518d0fe489f257ab4b928d37cbe16" + "06__data": "0x0000000000000000000000000Cd438409d5Cac9D2E076Ac7Bd0Bf2377E99BB6e4" }, { - "00__name": "OperationsSecretsDrip_V1", + "00__name": "secrets_v2", "01__dripcheck": "CheckSecrets", "02__checkparams": { "00__delay": 43200, "01__secretHashMustExist": "0x565fa8c7daa859353b5b328b97b12c7d66c5832b2a24d4e0f739a65ad266a46f", "02__secretHashMustNotExist": "0xbc362b01d69a85dff1793803dde67df1f338f37a36fdc73dddf27283d215e614" }, - "03__recipient": "0x03C256F7Ae7518D0fe489F257ab4b928D37CBE16", + "03__recipient": "0xCd438409d5Cac9D2E076Ac7Bd0Bf2377E99BB6e4", "04__value": 1000000000000000000, "05__interval": 3600, "06__data": "" diff --git a/packages/contracts-bedrock/periphery-deploy-config/sepolia.json b/packages/contracts-bedrock/periphery-deploy-config/sepolia.json index 6bf925b7f090..614b6380ef26 100644 --- a/packages/contracts-bedrock/periphery-deploy-config/sepolia.json +++ b/packages/contracts-bedrock/periphery-deploy-config/sepolia.json @@ -1,9 +1,9 @@ { - "create2DeploymentSalt": "0.0.3", + "create2DeploymentSalt": "0.0.7", "gelatoAutomateContract": "0x2A6C106ae13B558BB9E2Ec64Bd2f1f7BEFF3A5E0", - "operationsDrippieOwner": "0x03C256F7Ae7518D0fe489F257ab4b928D37CBE16", + "operationsDrippieOwner": "0xCd438409d5Cac9D2E076Ac7Bd0Bf2377E99BB6e4", "faucetDrippieOwner": "0x10ab157483dd308f8B38aCF2ad823dfD255F56b5", "opChainAdminWalletDripValue": 1000000000000000000, diff --git a/packages/contracts-bedrock/scripts/periphery/drippie/DrippieConfig.s.sol b/packages/contracts-bedrock/scripts/periphery/drippie/DrippieConfig.s.sol index 32b1310d42c1..cb7dfa60386b 100644 --- a/packages/contracts-bedrock/scripts/periphery/drippie/DrippieConfig.s.sol +++ b/packages/contracts-bedrock/scripts/periphery/drippie/DrippieConfig.s.sol @@ -46,9 +46,15 @@ contract DrippieConfig is Script, Artifacts { /// @notice Gelato automation contract. IGelato public gelato; + /// @notice Prefix for the configuration file. + string public prefix; + /// @notice Drip configuration array. FullDripConfig[] public drips; + /// @notice Mapping of drip names in the config. + mapping(string => bool) public names; + /// @param _path Path to the configuration file. constructor(string memory _path) { // Make sure artifacts are set up. @@ -69,6 +75,9 @@ contract DrippieConfig is Script, Artifacts { // Load the Gelato contract address. gelato = IGelato(stdJson.readAddress(_json, "$.gelato")); + // Load the prefix. + prefix = stdJson.readString(_json, "$.prefix"); + // Determine the number of drips. // In an ideal world we'd be able to load this array in one go by parsing it as an array // of structs that include the checkparams as bytes. Unfortunately, Foundry parses the @@ -83,7 +92,8 @@ contract DrippieConfig is Script, Artifacts { for (uint256 i = 0; i < corecfg.length; i++) { // Log so we know what's being loaded. string memory name = corecfg[i].name; - console.log("DrippieConfig: attempting to load config for %s", name); + string memory fullname = string.concat(prefix, "_", name); + console.log("DrippieConfig: attempting to load config for %s", fullname); // Make sure the dripcheck is deployed. string memory dripcheck = corecfg[i].dripcheck; @@ -97,7 +107,7 @@ contract DrippieConfig is Script, Artifacts { bytes memory checkparams = stdJson.parseRaw(_json, string.concat(p, ".02__checkparams")); // Determine if the parameters are decodable. - console.log("DrippieConfig: attempting to decode check parameters for %s", name); + console.log("DrippieConfig: attempting to decode check parameters for %s", fullname); if (strcmp(dripcheck, "CheckBalanceLow")) { abi.decode(checkparams, (CheckBalanceLow.Params)); } else if (strcmp(dripcheck, "CheckGelatoLow")) { @@ -114,7 +124,7 @@ contract DrippieConfig is Script, Artifacts { // Parse all the easy stuff first. console.log("DrippieConfig: attempting to load core configuration for %s", name); FullDripConfig memory dripcfg = FullDripConfig({ - name: name, + name: fullname, dripcheck: dripcheck, checkparams: checkparams, recipient: stdJson.readAddress(_json, string.concat(p, ".03__recipient")), @@ -125,6 +135,7 @@ contract DrippieConfig is Script, Artifacts { // Ok we're good to go. drips.push(dripcfg); + names[fullname] = true; } } diff --git a/packages/contracts-bedrock/scripts/periphery/drippie/ManageDrippie.s.sol b/packages/contracts-bedrock/scripts/periphery/drippie/ManageDrippie.s.sol index dee96d689ffb..b41142ba8045 100644 --- a/packages/contracts-bedrock/scripts/periphery/drippie/ManageDrippie.s.sol +++ b/packages/contracts-bedrock/scripts/periphery/drippie/ManageDrippie.s.sol @@ -4,6 +4,8 @@ pragma solidity ^0.8.0; import { console2 as console } from "forge-std/console2.sol"; import { Script } from "forge-std/Script.sol"; +import { LibString } from "solady/src/utils/LibString.sol"; + import { IAutomate as IGelato } from "gelato/interfaces/IAutomate.sol"; import { LibDataTypes as GelatoDataTypes } from "gelato/libraries/LibDataTypes.sol"; import { LibTaskId as GelatoTaskId } from "gelato/libraries/LibTaskId.sol"; @@ -47,13 +49,40 @@ contract ManageDrippie is Script, Artifacts { /// @notice Runs the management script. function run() public { - console.log("ManageDrippie: running"); + pauseDrips(); installDrips(); } + /// @notice Pauses drips that have been removed from config. + function pauseDrips() public broadcast { + console.log("ManageDrippie: pausing removed drips"); + for (uint256 i = 0; i < cfg.drippie().getDripCount(); i++) { + // Skip drips that aren't prefixed for this config file. + string memory name = cfg.drippie().created(i); + if (!LibString.startsWith(name, cfg.prefix())) { + continue; + } + + // Pause drips that are no longer in the config if not already paused. + if (!cfg.names(name)) { + // Pause the drip if it's active. + if (cfg.drippie().getDripStatus(name) == Drippie.DripStatus.ACTIVE) { + console.log("ManageDrippie: pausing drip for %s", name); + cfg.drippie().status(name, Drippie.DripStatus.PAUSED); + } + + // Cancel the Gelato task if it's active. + if (_isGelatoDripTaskActive(cfg.gelato(), cfg.drippie(), name)) { + console.log("ManageDrippie: pausing Gelato task for %s", name); + _pauseGelatoDripTask(cfg.gelato(), cfg.drippie(), name); + } + } + } + } + /// @notice Installs drips in the drippie contract. function installDrips() public broadcast { - console.log("ManageDrippie: installing Drippie config"); + console.log("ManageDrippie: installing Drippie config for %s drips", cfg.dripsLength()); for (uint256 i = 0; i < cfg.dripsLength(); i++) { DrippieConfig.FullDripConfig memory drip = abi.decode(cfg.drip(i), (DrippieConfig.FullDripConfig)); Drippie.DripAction[] memory actions = new Drippie.DripAction[](1); @@ -93,15 +122,15 @@ contract ManageDrippie is Script, Artifacts { modules[0] = GelatoDataTypes.Module.PROXY; modules[1] = GelatoDataTypes.Module.TRIGGER; + // Interval is in milliseconds, so we should be multiplying by 1000. + // We then want to attempt to trigger the drip 10x per interval, so we divide by 10. + // Total multiplier is then 1000 / 10 = 100. + uint128 interval = uint128(dripInterval) * 100; + // Create arguments for the PROXY and TRIGGER modules. bytes[] memory args = new bytes[](2); args[0] = abi.encode(_name); - args[1] = abi.encode( - GelatoDataTypes.TriggerModuleData({ - triggerType: GelatoDataTypes.TriggerType.TIME, - triggerConfig: abi.encode(GelatoDataTypes.Time({ nextExec: 0, interval: uint128(dripInterval) })) - }) - ); + args[1] = abi.encode(uint128(GelatoDataTypes.TriggerType.TIME), abi.encode(uint128(0), interval)); // Create the task data. _taskData = GelatoTaskData({ @@ -127,6 +156,38 @@ contract ManageDrippie is Script, Artifacts { }); } + /// @notice Determines if a gelato drip task is active or not. + /// @param _gelato The gelato contract. + /// @param _drippie The drippie contract. + /// @param _name The name of the drip being triggered. + /// @return _active True if the task is active, false otherwise. + function _isGelatoDripTaskActive( + IGelato _gelato, + Drippie _drippie, + string memory _name + ) + internal + view + returns (bool _active) + { + GelatoTaskData memory taskData = _makeGelatoDripTaskData({ _drippie: _drippie, _name: _name }); + bytes32 taskId = GelatoTaskId.getTaskId({ + taskCreator: taskData.taskCreator, + execAddress: taskData.execAddress, + execSelector: GelatoBytes.memorySliceSelector(taskData.execData), + moduleData: taskData.moduleData, + feeToken: taskData.feeToken + }); + + // Iterate over the task IDs to see if the task is active. + bytes32[] memory taskIds = _gelato.getTaskIdsByUser(taskData.taskCreator); + for (uint256 i = 0; i < taskIds.length; i++) { + if (taskIds[i] == taskId) { + _active = true; + } + } + } + /// @notice Pauses a gelato drip task. /// @param _gelato The gelato contract. /// @param _drippie The drippie contract. From efc29d7b038ecfd79ed46e1ac1b9a107d54f9517 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 8 Jun 2024 22:22:50 +0300 Subject: [PATCH 006/141] dependabot(gomod): bump golang.org/x/term from 0.20.0 to 0.21.0 (#10734) * dependabot(gomod): bump golang.org/x/term from 0.20.0 to 0.21.0 Bumps [golang.org/x/term](https://github.com/golang/term) from 0.20.0 to 0.21.0. - [Commits](https://github.com/golang/term/compare/v0.20.0...v0.21.0) --- updated-dependencies: - dependency-name: golang.org/x/term dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * deps: update --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Mark Tyneway --- cannon/example/claim/go.mod | 2 +- cannon/example/claim/go.sum | 4 ++-- go.mod | 4 ++-- go.sum | 8 ++++---- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cannon/example/claim/go.mod b/cannon/example/claim/go.mod index 1f6e8b00f49d..75560d14300f 100644 --- a/cannon/example/claim/go.mod +++ b/cannon/example/claim/go.mod @@ -8,7 +8,7 @@ require github.com/ethereum-optimism/optimism v0.0.0 require ( golang.org/x/crypto v0.23.0 // indirect - golang.org/x/sys v0.20.0 // indirect + golang.org/x/sys v0.21.0 // indirect ) replace github.com/ethereum-optimism/optimism v0.0.0 => ../../.. diff --git a/cannon/example/claim/go.sum b/cannon/example/claim/go.sum index 7873502bf9e5..b6ff7b910882 100644 --- a/cannon/example/claim/go.sum +++ b/cannon/example/claim/go.sum @@ -6,7 +6,7 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= -golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/go.mod b/go.mod index 8dfea6e16409..ea4ff1bff572 100644 --- a/go.mod +++ b/go.mod @@ -50,7 +50,7 @@ require ( golang.org/x/crypto v0.23.0 golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 golang.org/x/sync v0.7.0 - golang.org/x/term v0.20.0 + golang.org/x/term v0.21.0 golang.org/x/time v0.5.0 gorm.io/driver/postgres v1.5.7 gorm.io/gorm v1.25.10 @@ -228,7 +228,7 @@ require ( go.uber.org/zap v1.27.0 // indirect golang.org/x/mod v0.17.0 // indirect golang.org/x/net v0.25.0 // indirect - golang.org/x/sys v0.20.0 // indirect + golang.org/x/sys v0.21.0 // indirect golang.org/x/text v0.15.0 // indirect golang.org/x/tools v0.21.0 // indirect google.golang.org/protobuf v1.34.1 // indirect diff --git a/go.sum b/go.sum index e8ef9c5b8d01..b9588d14c1cb 100644 --- a/go.sum +++ b/go.sum @@ -1045,8 +1045,8 @@ golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1058,8 +1058,8 @@ golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= -golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= -golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= +golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= From 608a58d890cd4be45f0c3ba85ef4f6e6381e5be3 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Sun, 9 Jun 2024 02:15:59 +0300 Subject: [PATCH 007/141] contracts-bedrock: fix compiler warning (#10778) Fixes the following compiler warning: ``` Compiler run successful with warnings: Warning (2018): Function state mutability can be restricted to view --> test/periphery/drippie/dripchecks/CheckBalanceLow.t.sol:20:5: | 20 | function test_name_succeeds() external { | ^ (Relevant source part starts here and spans across multiple lines). Warning (2018): Function state mutability can be restricted to view --> test/periphery/drippie/dripchecks/CheckGelatoLow.t.sol:45:5: | 45 | function test_name_succeeds() external { | ^ (Relevant source part starts here and spans across multiple lines). Warning (2018): Function state mutability can be restricted to view --> test/periphery/drippie/dripchecks/CheckSecrets.t.sol:30:5: | 30 | function test_name_succeeds() external { | ^ (Relevant source part starts here and spans across multiple lines). Warning (2018): Function state mutability can be restricted to view --> test/periphery/drippie/dripchecks/CheckTrue.t.sol:19:5: | 19 | function test_name_succeeds() external { | ^ (Relevant source part starts here and spans across multiple lines). ``` This should be caught in CI, not sure why it wasn't --- .../test/periphery/drippie/dripchecks/CheckBalanceLow.t.sol | 2 +- .../test/periphery/drippie/dripchecks/CheckGelatoLow.t.sol | 2 +- .../test/periphery/drippie/dripchecks/CheckSecrets.t.sol | 2 +- .../test/periphery/drippie/dripchecks/CheckTrue.t.sol | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/contracts-bedrock/test/periphery/drippie/dripchecks/CheckBalanceLow.t.sol b/packages/contracts-bedrock/test/periphery/drippie/dripchecks/CheckBalanceLow.t.sol index 03bf12cd4328..bd4d22de8285 100644 --- a/packages/contracts-bedrock/test/periphery/drippie/dripchecks/CheckBalanceLow.t.sol +++ b/packages/contracts-bedrock/test/periphery/drippie/dripchecks/CheckBalanceLow.t.sol @@ -17,7 +17,7 @@ contract CheckBalanceLowTest is Test { } /// @notice Test that the `name` function returns the correct value. - function test_name_succeeds() external { + function test_name_succeeds() external view { assertEq(c.name(), "CheckBalanceLow"); } diff --git a/packages/contracts-bedrock/test/periphery/drippie/dripchecks/CheckGelatoLow.t.sol b/packages/contracts-bedrock/test/periphery/drippie/dripchecks/CheckGelatoLow.t.sol index 3ea86276d132..95cebc115266 100644 --- a/packages/contracts-bedrock/test/periphery/drippie/dripchecks/CheckGelatoLow.t.sol +++ b/packages/contracts-bedrock/test/periphery/drippie/dripchecks/CheckGelatoLow.t.sol @@ -42,7 +42,7 @@ contract CheckGelatoLowTest is Test { } /// @notice Test that the `name` function returns the correct value. - function test_name_succeeds() external { + function test_name_succeeds() external view { assertEq(c.name(), "CheckGelatoLow"); } diff --git a/packages/contracts-bedrock/test/periphery/drippie/dripchecks/CheckSecrets.t.sol b/packages/contracts-bedrock/test/periphery/drippie/dripchecks/CheckSecrets.t.sol index 30f9d619d295..745cad2b934f 100644 --- a/packages/contracts-bedrock/test/periphery/drippie/dripchecks/CheckSecrets.t.sol +++ b/packages/contracts-bedrock/test/periphery/drippie/dripchecks/CheckSecrets.t.sol @@ -27,7 +27,7 @@ contract CheckSecretsTest is Test { } /// @notice Test that the `name` function returns the correct value. - function test_name_succeeds() external { + function test_name_succeeds() external view { assertEq(c.name(), "CheckSecrets"); } diff --git a/packages/contracts-bedrock/test/periphery/drippie/dripchecks/CheckTrue.t.sol b/packages/contracts-bedrock/test/periphery/drippie/dripchecks/CheckTrue.t.sol index 9e35dfcc8729..3396d8eb9b6c 100644 --- a/packages/contracts-bedrock/test/periphery/drippie/dripchecks/CheckTrue.t.sol +++ b/packages/contracts-bedrock/test/periphery/drippie/dripchecks/CheckTrue.t.sol @@ -16,7 +16,7 @@ contract CheckTrueTest is Test { } /// @notice Test that the `name` function returns the correct value. - function test_name_succeeds() external { + function test_name_succeeds() external view { assertEq(c.name(), "CheckTrue"); } From 8e154e75944d10164707236bf1bd9c059f711141 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 9 Jun 2024 04:00:23 +0300 Subject: [PATCH 008/141] dependabot(gomod): bump golang.org/x/crypto from 0.23.0 to 0.24.0 (#10733) * dependabot(gomod): bump golang.org/x/crypto from 0.23.0 to 0.24.0 Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.23.0 to 0.24.0. - [Commits](https://github.com/golang/crypto/compare/v0.23.0...v0.24.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * deps: update --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Mark Tyneway --- cannon/example/claim/go.mod | 2 +- cannon/example/claim/go.sum | 4 ++-- go.mod | 6 +++--- go.sum | 12 ++++++------ 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/cannon/example/claim/go.mod b/cannon/example/claim/go.mod index 75560d14300f..3cc767cd9502 100644 --- a/cannon/example/claim/go.mod +++ b/cannon/example/claim/go.mod @@ -7,7 +7,7 @@ toolchain go1.21.1 require github.com/ethereum-optimism/optimism v0.0.0 require ( - golang.org/x/crypto v0.23.0 // indirect + golang.org/x/crypto v0.24.0 // indirect golang.org/x/sys v0.21.0 // indirect ) diff --git a/cannon/example/claim/go.sum b/cannon/example/claim/go.sum index b6ff7b910882..e9147757ceeb 100644 --- a/cannon/example/claim/go.sum +++ b/cannon/example/claim/go.sum @@ -4,8 +4,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= -golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= +golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/go.mod b/go.mod index ea4ff1bff572..4299c29dba09 100644 --- a/go.mod +++ b/go.mod @@ -47,7 +47,7 @@ require ( github.com/prometheus/client_golang v1.19.1 github.com/stretchr/testify v1.9.0 github.com/urfave/cli/v2 v2.27.1 - golang.org/x/crypto v0.23.0 + golang.org/x/crypto v0.24.0 golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 golang.org/x/sync v0.7.0 golang.org/x/term v0.21.0 @@ -229,8 +229,8 @@ require ( golang.org/x/mod v0.17.0 // indirect golang.org/x/net v0.25.0 // indirect golang.org/x/sys v0.21.0 // indirect - golang.org/x/text v0.15.0 // indirect - golang.org/x/tools v0.21.0 // indirect + golang.org/x/text v0.16.0 // indirect + golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect google.golang.org/protobuf v1.34.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect diff --git a/go.sum b/go.sum index b9588d14c1cb..075230f4fe0d 100644 --- a/go.sum +++ b/go.sum @@ -913,8 +913,8 @@ golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1m golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= -golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= -golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= +golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= @@ -1074,8 +1074,8 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1104,8 +1104,8 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw= -golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From 06d4d20608b9be67a194cbed1fdd2868dbafaa6c Mon Sep 17 00:00:00 2001 From: zhiqiangxu <652732310@qq.com> Date: Mon, 10 Jun 2024 07:40:32 +0800 Subject: [PATCH 009/141] replace original "engine queue" with "ResetEngine" (#10776) --- op-node/rollup/derive/attributes_queue.go | 2 +- op-node/rollup/derive/iface.go | 2 +- op-node/rollup/derive/pipeline.go | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/op-node/rollup/derive/attributes_queue.go b/op-node/rollup/derive/attributes_queue.go index ecace5f874b8..c15079c6bfa9 100644 --- a/op-node/rollup/derive/attributes_queue.go +++ b/op-node/rollup/derive/attributes_queue.go @@ -12,7 +12,7 @@ import ( "github.com/ethereum-optimism/optimism/op-service/eth" ) -// The attributes queue sits in between the batch queue and the engine queue +// The attributes queue sits after the batch queue. // It transforms batches into payload attributes. The outputted payload // attributes cannot be buffered because each batch->attributes transformation // pulls in data about the current L2 safe head. diff --git a/op-node/rollup/derive/iface.go b/op-node/rollup/derive/iface.go index 117e49c23852..4190d84fa534 100644 --- a/op-node/rollup/derive/iface.go +++ b/op-node/rollup/derive/iface.go @@ -15,7 +15,7 @@ import ( // The l1Block specified is the first L1 block that includes sufficient information to derive the new safe head type SafeHeadListener interface { - // Enabled reports if this safe head listener is actively using the posted data. This allows the engine queue to + // Enabled reports if this safe head listener is actively using the posted data. This allows the ResetEngine to // optionally skip making calls that may be expensive to prepare. // Callbacks may still be made if Enabled returns false but are not guaranteed. Enabled() bool diff --git a/op-node/rollup/derive/pipeline.go b/op-node/rollup/derive/pipeline.go index 56086f8cc8c5..2a15dd73badb 100644 --- a/op-node/rollup/derive/pipeline.go +++ b/op-node/rollup/derive/pipeline.go @@ -79,9 +79,9 @@ func NewDerivationPipeline(log log.Logger, rollupCfg *rollup.Config, l1Fetcher L attrBuilder := NewFetchingAttributesBuilder(rollupCfg, l1Fetcher, l2Source) attributesQueue := NewAttributesQueue(log, rollupCfg, attrBuilder, batchQueue) - // Reset from engine queue then up from L1 Traversal. The stages do not talk to each other during - // the reset, but after the engine queue, this is the order in which the stages could talk to each other. - // Note: The engine queue stage is the only reset that can fail. + // Reset from ResetEngine then up from L1 Traversal. The stages do not talk to each other during + // the ResetEngine, but after the ResetEngine, this is the order in which the stages could talk to each other. + // Note: The ResetEngine is the only reset that can fail. stages := []ResettableStage{l1Traversal, l1Src, plasma, frameQueue, bank, chInReader, batchQueue, attributesQueue} return &DerivationPipeline{ From e61a5cd329e98668d2b999b8789917db89dc3423 Mon Sep 17 00:00:00 2001 From: Matthew Slipper Date: Mon, 10 Jun 2024 08:46:36 -0600 Subject: [PATCH 010/141] indexer: Remove (#10784) --- .circleci/config.yml | 98 +- .github/CODEOWNERS | 1 - .github/mergify.yml | 11 - .github/workflows/tag-service.yml | 1 - README.md | 1 - docker-bake.hcl | 13 - go.mod | 16 +- go.sum | 121 - indexer/.gitignore | 6 - indexer/Dockerfile | 29 - indexer/Makefile | 29 - indexer/README.md | 78 - indexer/api-ts/CHANGELOG.md | 13 - indexer/api-ts/LICENSE | 21 - indexer/api-ts/README.md | 1 - indexer/api-ts/generated.ts | 64 - indexer/api-ts/indexer.cjs | 51 - indexer/api-ts/indexer.cjs.map | 1 - indexer/api-ts/indexer.js | 25 - indexer/api-ts/indexer.js.map | 1 - indexer/api-ts/indexer.spec.ts | 12 - indexer/api-ts/indexer.ts | 34 - indexer/api-ts/package.json | 39 - indexer/api-ts/tsconfig.json | 13 - indexer/api-ts/tsup.config.ts | 11 - indexer/api-ts/tygo.yaml | 2 - indexer/api/api.go | 185 - indexer/api/api_client.go | 213 - indexer/api/api_test.go | 186 - indexer/api/config.go | 60 - indexer/api/models/models.go | 62 - indexer/api/models/models_test.go | 1 - indexer/api/routes/common.go | 29 - indexer/api/routes/deposits.go | 34 - indexer/api/routes/docs.go | 22 - indexer/api/routes/routes.go | 22 - indexer/api/routes/supply.go | 21 - indexer/api/routes/withdrawals.go | 34 - indexer/api/service/service.go | 175 - indexer/api/service/service_test.go | 132 - indexer/api/service/validator.go | 61 - indexer/api/service/validator_test.go | 64 - indexer/bigint/bigint.go | 33 - indexer/bigint/bigint_test.go | 29 - indexer/bindings/CanonicalTransactionChain.go | 1522 -- indexer/bindings/StateCommitmentChain.go | 862 - indexer/bindings/crossdomainmessenger.go | 1433 - indexer/bindings/l1crossdomainmessenger.go | 1600 -- indexer/bindings/l1standardbridge.go | 2189 -- indexer/bindings/l2crossdomainmessenger.go | 1538 -- indexer/bindings/l2outputoracle.go | 1373 - indexer/bindings/l2standardbridge.go | 1785 -- indexer/bindings/l2tol1messagepasser.go | 699 - indexer/bindings/optimismportal.go | 1360 - indexer/bindings/standardbridge.go | 1287 - indexer/cmd/indexer/cli.go | 178 - indexer/cmd/indexer/main.go | 27 - indexer/config/config.go | 216 - indexer/config/config_test.go | 323 - indexer/config/devnet.go | 46 - indexer/config/presets.go | 155 - indexer/database/blocks.go | 198 - indexer/database/bridge_messages.go | 203 - indexer/database/bridge_transactions.go | 257 - indexer/database/bridge_transfers.go | 392 - indexer/database/contract_events.go | 288 - indexer/database/db.go | 147 - indexer/database/logger.go | 58 - indexer/database/mocks.go | 98 - indexer/database/serializers/bytes.go | 75 - indexer/database/serializers/rlp.go | 57 - indexer/database/serializers/u256.go | 60 - indexer/database/types.go | 50 - indexer/docker-compose.yml | 107 - indexer/e2e_tests/bridge_messages_e2e_test.go | 191 - .../e2e_tests/bridge_transactions_e2e_test.go | 221 - .../e2e_tests/bridge_transfers_e2e_test.go | 625 - indexer/e2e_tests/etl_e2e_test.go | 167 - indexer/e2e_tests/reorg_e2e_test.go | 92 - indexer/e2e_tests/setup.go | 210 - .../e2e_tests/utils/cross_domain_messages.go | 62 - indexer/e2e_tests/utils/deposits.go | 40 - indexer/etl/etl.go | 170 - indexer/etl/l1_etl.go | 253 - indexer/etl/l1_etl_test.go | 108 - indexer/etl/l2_etl.go | 210 - indexer/etl/metrics.go | 110 - indexer/indexer.go | 282 - indexer/indexer.toml | 60 - indexer/migrations/20230523_create_schema.sql | 238 - indexer/node/client.go | 155 - indexer/node/header_traversal.go | 113 - indexer/node/header_traversal_test.go | 178 - indexer/ops/assets/architecture.png | Bin 28492 -> 0 bytes indexer/ops/assets/indexer-service.png | Bin 86488 -> 0 bytes indexer/ops/docs/troubleshooting.md | 82 - indexer/ops/grafana/dashboards/indexer.json | 2384 -- .../grafana/provisioning/dashboards/all.yml | 9 - .../provisioning/datasources/datasources.yml | 9 - indexer/ops/prometheus/prometheus.yml | 8 - indexer/processors/bridge.go | 419 - .../processors/bridge/l1_bridge_processor.go | 282 - .../processors/bridge/l2_bridge_processor.go | 195 - .../bridge/legacy_bridge_processor.go | 396 - .../bridge/legacy_bridge_processor_test.go | 50 - indexer/processors/bridge/metrics.go | 289 - .../bridge/ovm1/OVM1Withdrawals.csv | 11311 -------- .../processors/bridge/ovm1/skipped_hashes.go | 21816 ---------------- indexer/processors/bridge/types.go | 8 - .../contracts/cross_domain_messenger.go | 149 - .../contracts/l2_to_l1_message_passer.go | 56 - indexer/processors/contracts/legacy_ctc.go | 58 - .../contracts/legacy_standard_bridge.go | 123 - .../processors/contracts/optimism_portal.go | 142 - .../processors/contracts/standard_bridge.go | 173 - indexer/processors/contracts/utils.go | 43 - ops/scripts/ci-docker-tag-op-stack-release.sh | 2 +- ops/scripts/update-op-geth.py | 2 +- ops/tag-service/tag-service.py | 1 - ops/tag-service/tag-tool.py | 1 - 120 files changed, 4 insertions(+), 62127 deletions(-) delete mode 100644 indexer/.gitignore delete mode 100644 indexer/Dockerfile delete mode 100644 indexer/Makefile delete mode 100644 indexer/README.md delete mode 100644 indexer/api-ts/CHANGELOG.md delete mode 100644 indexer/api-ts/LICENSE delete mode 100644 indexer/api-ts/README.md delete mode 100644 indexer/api-ts/generated.ts delete mode 100644 indexer/api-ts/indexer.cjs delete mode 100644 indexer/api-ts/indexer.cjs.map delete mode 100644 indexer/api-ts/indexer.js delete mode 100644 indexer/api-ts/indexer.js.map delete mode 100644 indexer/api-ts/indexer.spec.ts delete mode 100644 indexer/api-ts/indexer.ts delete mode 100644 indexer/api-ts/package.json delete mode 100644 indexer/api-ts/tsconfig.json delete mode 100644 indexer/api-ts/tsup.config.ts delete mode 100644 indexer/api-ts/tygo.yaml delete mode 100644 indexer/api/api.go delete mode 100644 indexer/api/api_client.go delete mode 100644 indexer/api/api_test.go delete mode 100644 indexer/api/config.go delete mode 100644 indexer/api/models/models.go delete mode 100644 indexer/api/models/models_test.go delete mode 100644 indexer/api/routes/common.go delete mode 100644 indexer/api/routes/deposits.go delete mode 100644 indexer/api/routes/docs.go delete mode 100644 indexer/api/routes/routes.go delete mode 100644 indexer/api/routes/supply.go delete mode 100644 indexer/api/routes/withdrawals.go delete mode 100644 indexer/api/service/service.go delete mode 100644 indexer/api/service/service_test.go delete mode 100644 indexer/api/service/validator.go delete mode 100644 indexer/api/service/validator_test.go delete mode 100644 indexer/bigint/bigint.go delete mode 100644 indexer/bigint/bigint_test.go delete mode 100644 indexer/bindings/CanonicalTransactionChain.go delete mode 100644 indexer/bindings/StateCommitmentChain.go delete mode 100644 indexer/bindings/crossdomainmessenger.go delete mode 100644 indexer/bindings/l1crossdomainmessenger.go delete mode 100644 indexer/bindings/l1standardbridge.go delete mode 100644 indexer/bindings/l2crossdomainmessenger.go delete mode 100644 indexer/bindings/l2outputoracle.go delete mode 100644 indexer/bindings/l2standardbridge.go delete mode 100644 indexer/bindings/l2tol1messagepasser.go delete mode 100644 indexer/bindings/optimismportal.go delete mode 100644 indexer/bindings/standardbridge.go delete mode 100644 indexer/cmd/indexer/cli.go delete mode 100644 indexer/cmd/indexer/main.go delete mode 100644 indexer/config/config.go delete mode 100644 indexer/config/config_test.go delete mode 100644 indexer/config/devnet.go delete mode 100644 indexer/config/presets.go delete mode 100644 indexer/database/blocks.go delete mode 100644 indexer/database/bridge_messages.go delete mode 100644 indexer/database/bridge_transactions.go delete mode 100644 indexer/database/bridge_transfers.go delete mode 100644 indexer/database/contract_events.go delete mode 100644 indexer/database/db.go delete mode 100644 indexer/database/logger.go delete mode 100644 indexer/database/mocks.go delete mode 100644 indexer/database/serializers/bytes.go delete mode 100644 indexer/database/serializers/rlp.go delete mode 100644 indexer/database/serializers/u256.go delete mode 100644 indexer/database/types.go delete mode 100644 indexer/docker-compose.yml delete mode 100644 indexer/e2e_tests/bridge_messages_e2e_test.go delete mode 100644 indexer/e2e_tests/bridge_transactions_e2e_test.go delete mode 100644 indexer/e2e_tests/bridge_transfers_e2e_test.go delete mode 100644 indexer/e2e_tests/etl_e2e_test.go delete mode 100644 indexer/e2e_tests/reorg_e2e_test.go delete mode 100644 indexer/e2e_tests/setup.go delete mode 100644 indexer/e2e_tests/utils/cross_domain_messages.go delete mode 100644 indexer/e2e_tests/utils/deposits.go delete mode 100644 indexer/etl/etl.go delete mode 100644 indexer/etl/l1_etl.go delete mode 100644 indexer/etl/l1_etl_test.go delete mode 100644 indexer/etl/l2_etl.go delete mode 100644 indexer/etl/metrics.go delete mode 100644 indexer/indexer.go delete mode 100644 indexer/indexer.toml delete mode 100644 indexer/migrations/20230523_create_schema.sql delete mode 100644 indexer/node/client.go delete mode 100644 indexer/node/header_traversal.go delete mode 100644 indexer/node/header_traversal_test.go delete mode 100644 indexer/ops/assets/architecture.png delete mode 100644 indexer/ops/assets/indexer-service.png delete mode 100644 indexer/ops/docs/troubleshooting.md delete mode 100644 indexer/ops/grafana/dashboards/indexer.json delete mode 100644 indexer/ops/grafana/provisioning/dashboards/all.yml delete mode 100644 indexer/ops/grafana/provisioning/datasources/datasources.yml delete mode 100644 indexer/ops/prometheus/prometheus.yml delete mode 100644 indexer/processors/bridge.go delete mode 100644 indexer/processors/bridge/l1_bridge_processor.go delete mode 100644 indexer/processors/bridge/l2_bridge_processor.go delete mode 100644 indexer/processors/bridge/legacy_bridge_processor.go delete mode 100644 indexer/processors/bridge/legacy_bridge_processor_test.go delete mode 100644 indexer/processors/bridge/metrics.go delete mode 100644 indexer/processors/bridge/ovm1/OVM1Withdrawals.csv delete mode 100644 indexer/processors/bridge/ovm1/skipped_hashes.go delete mode 100644 indexer/processors/bridge/types.go delete mode 100644 indexer/processors/contracts/cross_domain_messenger.go delete mode 100644 indexer/processors/contracts/l2_to_l1_message_passer.go delete mode 100644 indexer/processors/contracts/legacy_ctc.go delete mode 100644 indexer/processors/contracts/legacy_standard_bridge.go delete mode 100644 indexer/processors/contracts/optimism_portal.go delete mode 100644 indexer/processors/contracts/standard_bridge.go delete mode 100644 indexer/processors/contracts/utils.go diff --git a/.circleci/config.yml b/.circleci/config.yml index 26457b953fab..b5fee66b65b4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1085,69 +1085,6 @@ jobs: command: make <> working_directory: <> - indexer-tests: - parameters: - variant: - type: string - default: '' - environment: - DEVNET_L2OO: 'false' - OP_E2E_USE_L2OO: 'false' - docker: - - image: <> - - image: cimg/postgres:14.1 - resource_class: xlarge - steps: - - checkout - - when: - condition: - equal: ['l2oo', <>] - steps: - - run: - name: Set DEVNET_L2OO = true - command: echo 'export DEVNET_L2OO=true' >> $BASH_ENV - - run: - name: Set OP_E2E_USE_L2OO = true - command: echo 'export OP_E2E_USE_L2OO=true' >> $BASH_ENV - - check-changed: - patterns: indexer - - run: - name: Lint - command: golangci-lint run -E goimports,sqlclosecheck,bodyclose,asciicheck,misspell,errorlint --timeout 4m -e "errors.As" -e "errors.Is" ./... - working_directory: indexer - - run: - name: git submodules - command: make submodules - - run: - name: generate cannon prestate - command: make cannon-prestate - - run: - name: generate L1 state - command: make devnet-allocs - - run: - name: Test - command: | - mkdir -p /test-results - DB_USER=postgres gotestsum --format=standard-verbose --junitfile=/test-results/indexer_tests.xml -- -parallel=4 ./... - working_directory: indexer - - store_test_results: - path: /test-results - - run: - name: Build - command: make indexer - working_directory: indexer - - run: - name: Install node_modules - command: pnpm install:ci - - run: - name: Install tygo - command: go install github.com/gzuidhof/tygo@latest - working_directory: indexer/api-ts - - run: - name: Check generated code - command: npm run generate && git diff --exit-code - working_directory: indexer/api-ts - cannon-prestate: docker: - image: <> @@ -1702,11 +1639,6 @@ workflows: name: proxyd-tests binary_name: proxyd working_directory: proxyd - - indexer-tests: - name: indexer-tests<< matrix.variant >> - matrix: - parameters: - variant: ["", "-l2oo"] - semgrep-scan - go-mod-download - fuzz-golang: @@ -1900,10 +1832,6 @@ workflows: - op-challenger-docker-build - da-server-docker-build - cannon-prestate - - docker-build: - name: indexer-docker-build - docker_name: indexer - docker_tags: <>,<> - check-generated-mocks-op-node - check-generated-mocks-op-service - cannon-go-lint-and-test: @@ -1926,7 +1854,7 @@ workflows: type: approval filters: tags: - only: /^(da-server|proxyd|chain-mon|indexer|ci-builder(-rust)?|ufm-[a-z0-9\-]*|op-[a-z0-9\-]*)\/v.*/ + only: /^(da-server|proxyd|chain-mon|ci-builder(-rust)?|ufm-[a-z0-9\-]*|op-[a-z0-9\-]*)\/v.*/ branches: ignore: /.*/ - docker-build: @@ -2119,21 +2047,6 @@ workflows: - oplabs-gcr-release requires: - hold - - docker-build: - name: indexer-docker-release - filters: - tags: - only: /^indexer\/v.*/ - branches: - ignore: /.*/ - docker_name: indexer - docker_tags: <> - publish: true - release: true - context: - - oplabs-gcr-release - requires: - - hold - docker-build: name: chain-mon-docker-release filters: @@ -2340,15 +2253,6 @@ workflows: context: - oplabs-gcr - slack - - docker-build: - name: indexer-docker-publish - docker_name: indexer - docker_tags: <>,<> - publish: true - context: - - oplabs-gcr - - slack - platforms: "linux/amd64,linux/arm64" - docker-build: name: chain-mon-docker-publish docker_name: chain-mon diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c3d58c300f34..97d13e277a2d 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -33,7 +33,6 @@ # Misc /proxyd @ethereum-optimism/infra-reviewers -/indexer @ethereum-optimism/devxpod /infra @ethereum-optimism/infra-reviewers /specs @ethereum-optimism/contract-reviewers @ethereum-optimism/go-reviewers diff --git a/.github/mergify.yml b/.github/mergify.yml index ca07ed88ad64..14196ea82bf8 100644 --- a/.github/mergify.yml +++ b/.github/mergify.yml @@ -89,17 +89,6 @@ pull_request_rules: label: add: - A-cannon - - name: Add A-indexer label and ecopod reviewers - conditions: - - 'files~=^indexer/' - - '#label<5' - actions: - label: - add: - - A-indexer - request_reviews: - users: - - roninjin10 - name: Add A-op-batcher label conditions: - 'files~=^op-batcher/' diff --git a/.github/workflows/tag-service.yml b/.github/workflows/tag-service.yml index a046209cb348..43e581b2cdd1 100644 --- a/.github/workflows/tag-service.yml +++ b/.github/workflows/tag-service.yml @@ -20,7 +20,6 @@ on: options: - ci-builder - ci-builder-rust - - indexer - op-heartbeat - chain-mon - op-node diff --git a/README.md b/README.md index 7ce089f5de55..435fb5b46ca0 100644 --- a/README.md +++ b/README.md @@ -117,7 +117,6 @@ The full set of components that have releases are: - `chain-mon` - `ci-builder` - `ci-builder` -- `indexer` - `op-batcher` - `op-contracts` - `op-challenger` diff --git a/docker-bake.hcl b/docker-bake.hcl index f92aed26f3ee..977aaf2ddbf9 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -212,19 +212,6 @@ target "proxyd" { tags = [for tag in split(",", IMAGE_TAGS) : "${REGISTRY}/${REPOSITORY}/proxyd:${tag}"] } -target "indexer" { - dockerfile = "./indexer/Dockerfile" - context = "./" - args = { - // proxyd dockerfile has no _ in the args - GITCOMMIT = "${GIT_COMMIT}" - GITDATE = "${GIT_DATE}" - GITVERSION = "${GIT_VERSION}" - } - platforms = split(",", PLATFORMS) - tags = [for tag in split(",", IMAGE_TAGS) : "${REGISTRY}/${REPOSITORY}/indexer:${tag}"] -} - target "chain-mon" { dockerfile = "./ops/docker/Dockerfile.packages" context = "." diff --git a/go.mod b/go.mod index 4299c29dba09..7696c277a6bb 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,6 @@ module github.com/ethereum-optimism/optimism go 1.21 require ( - github.com/BurntSushi/toml v1.3.2 github.com/DataDog/zstd v1.5.2 github.com/andybalholm/brotli v1.1.0 github.com/btcsuite/btcd v0.24.0 @@ -16,12 +15,9 @@ require ( github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240603085035-9c8f6081266e github.com/ethereum/go-ethereum v1.13.15 github.com/fsnotify/fsnotify v1.7.0 - github.com/go-chi/chi/v5 v5.0.12 - github.com/go-chi/docgen v1.2.0 github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb github.com/google/go-cmp v0.6.0 github.com/google/gofuzz v1.2.1-0.20220503160820-4a35382e8fc8 - github.com/google/uuid v1.6.0 github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/golang-lru/v2 v2.0.7 github.com/hashicorp/raft v1.6.1 @@ -29,8 +25,6 @@ require ( github.com/holiman/uint256 v1.2.4 github.com/ipfs/go-datastore v0.6.0 github.com/ipfs/go-ds-leveldb v0.5.0 - github.com/jackc/pgtype v1.14.3 - github.com/jackc/pgx/v5 v5.6.0 github.com/libp2p/go-libp2p v0.35.0 github.com/libp2p/go-libp2p-mplex v0.9.0 github.com/libp2p/go-libp2p-pubsub v0.11.0 @@ -52,8 +46,6 @@ require ( golang.org/x/sync v0.7.0 golang.org/x/term v0.21.0 golang.org/x/time v0.5.0 - gorm.io/driver/postgres v1.5.7 - gorm.io/gorm v1.25.10 ) require ( @@ -110,6 +102,7 @@ require ( github.com/golang/protobuf v1.5.3 // indirect github.com/google/gopacket v1.1.19 // indirect github.com/google/pprof v0.0.0-20240207164012-fb44976bdcd5 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.5.1 // indirect github.com/graph-gophers/graphql-go v1.3.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect @@ -128,23 +121,16 @@ require ( github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 // indirect github.com/ipfs/go-cid v0.4.1 // indirect github.com/ipfs/go-log/v2 v2.5.1 // indirect - github.com/jackc/pgio v1.0.0 // indirect - github.com/jackc/pgpassfile v1.0.0 // indirect - github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect - github.com/jackc/puddle/v2 v2.2.1 // indirect github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect github.com/jbenet/goprocess v0.1.4 // indirect github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267 // indirect - github.com/jinzhu/inflection v1.0.0 // indirect - github.com/jinzhu/now v1.1.5 // indirect github.com/karalabe/usb v0.0.3-0.20230711191512-61db3e06439c // indirect github.com/klauspost/compress v1.17.8 // indirect github.com/klauspost/cpuid/v2 v2.2.7 // indirect github.com/koron/go-ssdp v0.0.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect - github.com/lib/pq v1.10.9 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/libp2p/go-flow-metrics v0.1.0 // indirect github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect diff --git a/go.sum b/go.sum index 075230f4fe0d..7daf2b1086ce 100644 --- a/go.sum +++ b/go.sum @@ -16,7 +16,6 @@ github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3 github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= @@ -95,7 +94,6 @@ github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= @@ -116,8 +114,6 @@ github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTF github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -129,7 +125,6 @@ github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 h1:d28BXYi+wUp github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA= github.com/crate-crypto/go-kzg-4844 v0.7.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -211,21 +206,13 @@ github.com/getsentry/sentry-go v0.18.0/go.mod h1:Kgon4Mby+FJ7ZWHFUAZgVaIa8sxHtnR github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= -github.com/go-chi/chi/v5 v5.0.1/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= -github.com/go-chi/chi/v5 v5.0.12 h1:9euLV5sTrTNTRUU9POmDUvfxyj6LAABLUcEWO+JJb4s= -github.com/go-chi/chi/v5 v5.0.12/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= -github.com/go-chi/docgen v1.2.0 h1:da0Nq2PKU9W9pSOTUfVrKI1vIgTGpauo9cfh4Iwivek= -github.com/go-chi/docgen v1.2.0/go.mod h1:G9W0G551cs2BFMSn/cnGwX+JBHEloAgo17MBhyrnhPI= -github.com/go-chi/render v1.0.1/go.mod h1:pq4Rr7HbnsdaeHagklXub+p6Wd16Af5l9koip1OvJns= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= @@ -247,7 +234,6 @@ github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= @@ -380,60 +366,6 @@ github.com/ipfs/go-ds-leveldb v0.5.0/go.mod h1:d3XG9RUDzQ6V4SHi8+Xgj9j1XuEk1z82l github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= -github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0= -github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= -github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8= -github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= -github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= -github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= -github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o= -github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY= -github.com/jackc/pgconn v1.9.1-0.20210724152538-d89c8390a530/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= -github.com/jackc/pgconn v1.14.3 h1:bVoTr12EGANZz66nZPkMInAV/KHD2TxH9npjXXgiB3w= -github.com/jackc/pgconn v1.14.3/go.mod h1:RZbme4uasqzybK2RK5c65VsHxoyaml09lx3tXOcO/VM= -github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= -github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= -github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= -github.com/jackc/pgmock v0.0.0-20201204152224-4fe30f7445fd/go.mod h1:hrBW0Enj2AZTNpt/7Y5rr2xe/9Mn757Wtb2xeBzPv2c= -github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65/go.mod h1:5R2h2EEX+qri8jOWMbJCtaPWkrrNc7OHwsp2TCqp7ak= -github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= -github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgproto3 v1.1.0 h1:FYYE4yRw+AgI8wXIinMlNjBbp/UitDJwfj5LqqewP1A= -github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= -github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgproto3/v2 v2.3.3 h1:1HLSx5H+tXR9pW3in3zaztoEwQYRC9SQaYUHjTSUOag= -github.com/jackc/pgproto3/v2 v2.3.3/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= -github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= -github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= -github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= -github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= -github.com/jackc/pgtype v1.8.1-0.20210724151600-32e20a603178/go.mod h1:C516IlIV9NKqfsMCXTdChteoXmwgUceqaLfjg2e3NlM= -github.com/jackc/pgtype v1.14.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= -github.com/jackc/pgtype v1.14.3 h1:h6W9cPuHsRWQFTWUZMAKMgG5jSwQI0Zurzdvlx3Plus= -github.com/jackc/pgtype v1.14.3/go.mod h1:aKeozOde08iifGosdJpz9MBZonJOUJxqNpPBcMJTlVA= -github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= -github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= -github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= -github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs= -github.com/jackc/pgx/v4 v4.18.2 h1:xVpYkNR5pk5bMCZGfClbO962UIqVABcAGt7ha1s/FeU= -github.com/jackc/pgx/v4 v4.18.2/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw= -github.com/jackc/pgx/v5 v5.6.0 h1:SWJzexBzPL5jb0GEsrPMLIsi/3jOo7RHlzTjcAeDrPY= -github.com/jackc/pgx/v5 v5.6.0/go.mod h1:DNZ/vlrUnhWCoFGxHAG8U2ljioxukquj7utPDgtQdTw= -github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk= -github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= @@ -446,10 +378,6 @@ github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267/go.mod h1:h1n github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= -github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= -github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= -github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -467,7 +395,6 @@ github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa02 github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/koron/go-ssdp v0.0.4 h1:1IDwrghSKYM7yLf7XCzbByg2sJ/JcNOZRXS2jczTwz0= github.com/koron/go-ssdp v0.0.4/go.mod h1:oDXq+E5IL5q0U8uSBcoAXzTzInwy5lEgC91HoKtbmZk= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -479,7 +406,6 @@ github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= @@ -489,12 +415,6 @@ github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4F github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= -github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFGkx3Q3WM= @@ -528,17 +448,13 @@ github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= @@ -754,21 +670,15 @@ github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjR github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/rs/cors v1.9.0 h1:l9HGsTsHJcvW14Nk7J9KFz8bzeAWXn3CG6bgt7LsrAE= github.com/rs/cors v1.9.0/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= -github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= -github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= @@ -793,7 +703,6 @@ github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeV github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= @@ -805,7 +714,6 @@ github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobt github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= @@ -819,7 +727,6 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= @@ -854,11 +761,7 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/automaxprocs v1.5.2 h1:2LxUOGiR3O6tw8ui5sZa2LAaHnsviZdVOUZw4fvbnME= @@ -872,16 +775,11 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= @@ -892,26 +790,20 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= @@ -947,7 +839,6 @@ golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= @@ -996,7 +887,6 @@ golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1064,7 +954,6 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= @@ -1089,14 +978,11 @@ golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -1106,8 +992,6 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= -golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1147,7 +1031,6 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= @@ -1167,10 +1050,6 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gorm.io/driver/postgres v1.5.7 h1:8ptbNJTDbEmhdr62uReG5BGkdQyeasu/FZHxI0IMGnM= -gorm.io/driver/postgres v1.5.7/go.mod h1:3e019WlBaYI5o5LIdNV+LyxCMNtLOQETBXL2h4chKpA= -gorm.io/gorm v1.25.10 h1:dQpO+33KalOA+aFYGlK+EfxcI5MbO7EP2yYygwh9h+s= -gorm.io/gorm v1.25.10/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/indexer/.gitignore b/indexer/.gitignore deleted file mode 100644 index 061d13cc5fa2..000000000000 --- a/indexer/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -docker-compose.dev.yml -.env -/indexer - -api-ts/yarn.lock -api-ts/package-lock.json \ No newline at end of file diff --git a/indexer/Dockerfile b/indexer/Dockerfile deleted file mode 100644 index 4c50c95944b5..000000000000 --- a/indexer/Dockerfile +++ /dev/null @@ -1,29 +0,0 @@ -FROM --platform=$BUILDPLATFORM golang:1.21.1-alpine3.18 as builder - -RUN apk add --no-cache make ca-certificates gcc musl-dev linux-headers git jq bash - -COPY ./go.mod /app/go.mod -COPY ./go.sum /app/go.sum - -WORKDIR /app - -RUN go mod download - -# build indexer with the shared go.mod & go.sum files -COPY ./indexer /app/indexer -COPY ./op-service /app/op-service -COPY ./op-node /app/op-node -COPY ./op-plasma /app/op-plasma -COPY ./op-chain-ops /app/op-chain-ops -COPY ./go.mod /app/go.mod -COPY ./go.sum /app/go.sum - -WORKDIR /app/indexer -RUN make indexer - -FROM alpine:3.18 -COPY --from=builder /app/indexer/indexer /usr/local/bin -COPY --from=builder /app/indexer/migrations /app/indexer/migrations - -WORKDIR /app/indexer -CMD ["indexer"] diff --git a/indexer/Makefile b/indexer/Makefile deleted file mode 100644 index 2384d74c921d..000000000000 --- a/indexer/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -GITCOMMIT := $(shell git rev-parse HEAD) -GITDATE := $(shell git show -s --format='%ct') - -LDFLAGSSTRING +=-X main.GitCommit=$(GITCOMMIT) -LDFLAGSSTRING +=-X main.GitDate=$(GITDATE) -LDFLAGS := -ldflags "$(LDFLAGSSTRING)" - -indexer: - env GO111MODULE=on go build -v $(LDFLAGS) ./cmd/indexer - -up: - docker-compose up --build - -clean: - rm indexer - -test: - go test -v ./... - -lint: - golangci-lint run ./... - -.PHONY: \ - indexer \ - bindings \ - bindings-scc \ - clean \ - test \ - lint diff --git a/indexer/README.md b/indexer/README.md deleted file mode 100644 index 34a568d6f855..000000000000 --- a/indexer/README.md +++ /dev/null @@ -1,78 +0,0 @@ -# @eth-optimism/indexer - -## Getting started - -### Configuration -The `indexer.toml` contains configuration for the indexer. The file is templated for the local devnet, however presets are available for [known networks](https://github.com/ethereum-optimism/optimism/blob/develop/indexer/config/presets.go). The file also templates keys needed for custom networks such as the rollup contract addresses and the `l1-starting-height` for the deployment height. - -Required configuration is network specific `(l1|l2)-rpc` urls that point to archival nodes as well as the `(l1|l2)-polling-interval` & `(l1|l2)-header-buffer-size` keys which controls the of rate data retrieval from these notes. - -### Testing -All tests can be ran by running `make test` from the `/indexer` directory. This will run all unit and e2e tests. - -> **NOTE:** Successfully running the E2E tests requires spinning up a local devnet via [op-e2e](https://github.com/ethereum-optimism/optimism/tree/develop/op-e2e) and pre-populating it with necessary bedrock genesis state. This genesis state is generated by invoking the`make devnet-allocs` target from the root of the optimism monorepo before running the indexer tests. More information on this can be found in the [op-e2e README](../op-e2e/README.md). A postgres database through pwd-less user $DB_USER env variable on port 5432 must be available as well. - -### Run the Indexer (docker-compose) -The local [docker-compose.go](https://github.com/ethereum-optimism/optimism/blob/develop/indexer/docker-compose.yml) file spins up **index, api, postgres, prometheus and grafana** services. The `indexer.toml` file is setup for the local devnet. To run against a live network, update the `indexer.toml` with the desired configuration. - -> The API, Postgres, and Grafana services are the only ones with ports mapped externally. Postgres database is mapped to port 5433 to deconflict any instances already running on the default port - -1. Install Deps: Docker, Genesis State: `make devnet-allocs` -2. Start Devnet `make devnet up`, Otherwise update `indexer.toml` to desired network config. -3. Start Indexer: `cd indexer && docker-compose up` -4. View the Grafana dashboard at http://localhost:3000 - - **User**: admin - - **Password**: optimism - -### Run the Indexer (Go Binary or Dockerfile) -1. Prepare the `indexer.toml` file -2. **Run database migrations**: `indexer migrate --config ` -3. Run index service, cmd: `indexer index --config ` -4. Run the api service, cmd: `indexer api --config ` - -> Both the index and api services listen on an HTTP and Metrics port. Migrations should **always** be run prior to start the indexer to ensure latest schemas are set. - -## Architecture -![Architectural Diagram](./ops/assets/architecture.png) - -The indexer application supports two separate services for collective operation: -**Indexer API** - Provides a lightweight API service that supports paginated lookups for bridge data. -**Indexer Service** - A polling based service that constantly reads and persists OP Stack chain data (i.e, block meta, system contract events, synchronized bridge events) from a L1 and L2 chain. - -### Indexer API -See `api/api.go` & `api/routes/` for available API endpoints to for paginated retrieval of bridge data. **TDB** docs. - -### Indexer Service -![Service Component Diagram](./ops/assets/indexer-service.png) - -The indexer service is responsible for polling and processing real-time batches of L1 and L2 chain data. The indexer service is currently composed of the following key components: -- **Poller Routines** - Individually polls the L1/L2 chain for new blocks and OP Stack contract events. -- **Insertion Routines** - Awaits new batches from the poller routines and inserts them into the database upon retrieval. -- **Bridge Routine** - Polls the database directly for new L1 blocks and bridge events. Upon retrieval, the bridge routine will: - * Process and persist new bridge events - * Synchronize L1 proven/finalized withdrawals with their L2 initialization counterparts - -#### L1 Poller -L1 blocks are only indexed if they contain L1 contract events. This is done to reduce the amount of unnecessary data that is indexed. Because of this, the `l1_block_headers` table will not contain every L1 block header unlike L2 blocks. -An **exception** to this is if no log activity has been observed over the specified `ETLAllowedInactivityWindowSeconds` value in the [chain config](https://github.com/ethereum-optimism/optimism/blob/develop/indexer/config/config.go) -- disabled by default with a zero value. Past this duration, the L1 ETL will index the latest -observed L1 header. - -#### Database -The indexer service currently supports a Postgres database for storing L1/L2 OP Stack chain data. The most up-to-date database schemas can be found in the `./migrations` directory. **Run the idempotent migrations prior to starting the indexer** - -#### HTTP -The indexer service runs a lightweight health server adjacently to the main service. The health server exposes a single endpoint `/healthz` that can be used to check the health of the indexer service. The health assessment doesn't check dependency health (ie. database) but rather checks the health of the indexer service itself. - -#### Metrics -The indexer services exposes a set of Prometheus metrics that can be used to monitor the health of the service. The metrics are exposed via the `/metrics` endpoint on the health server. - - -## Security -All security related issues should be filed via github issues and will be triaged by the team. The following are some security considerations to be taken when running the service: -- Since the Indexer API only performs read operations on the database, access to the database for any API instances should be restricted to read-only operations. -- The API has no rate limiting or authentication/authorization mechanisms. It is recommended to place the API behind a reverse proxy that can provide these features. -- Postgres connection timeouts are unenforced in the services. It is recommended to configure the database to enforce connection timeouts to prevent connection exhaustion attacks. -- Setting confirmation count values too low can result in indexing failures due to chain reorgs. - -## Troubleshooting -Please advise the [troubleshooting](./ops/docs/troubleshooting.md) guide for common failure scenarios and how to resolve them. diff --git a/indexer/api-ts/CHANGELOG.md b/indexer/api-ts/CHANGELOG.md deleted file mode 100644 index 5a611ffa12b8..000000000000 --- a/indexer/api-ts/CHANGELOG.md +++ /dev/null @@ -1,13 +0,0 @@ -# @eth-optimism/indexer-api - -## 0.0.5 - -### Patch Changes - -- [#9964](https://github.com/ethereum-optimism/optimism/pull/9964) [`8241220898128e1f61064f22dcb6fdd0a5f043c3`](https://github.com/ethereum-optimism/optimism/commit/8241220898128e1f61064f22dcb6fdd0a5f043c3) Thanks [@roninjin10](https://github.com/roninjin10)! - Removed only-allow command from package.json - -## 0.0.4 - -### Patch Changes - -- [#7450](https://github.com/ethereum-optimism/optimism/pull/7450) [`ac90e16a7`](https://github.com/ethereum-optimism/optimism/commit/ac90e16a7f85c4f73661ae6023135c3d00421c1e) Thanks [@roninjin10](https://github.com/roninjin10)! - Updated dev dependencies related to testing that is causing audit tooling to report failures diff --git a/indexer/api-ts/LICENSE b/indexer/api-ts/LICENSE deleted file mode 100644 index 86541fdc788e..000000000000 --- a/indexer/api-ts/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2022 Optimism - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/indexer/api-ts/README.md b/indexer/api-ts/README.md deleted file mode 100644 index 8cb1d194639e..000000000000 --- a/indexer/api-ts/README.md +++ /dev/null @@ -1 +0,0 @@ -Generated typescript types for https://github.com/ethereum-optimism/optimism/tree/develop/indexer diff --git a/indexer/api-ts/generated.ts b/indexer/api-ts/generated.ts deleted file mode 100644 index 713aca927fce..000000000000 --- a/indexer/api-ts/generated.ts +++ /dev/null @@ -1,64 +0,0 @@ -// Code generated by tygo. DO NOT EDIT. - -////////// -// source: models.go - -export interface QueryParams { - Address: any /* common.Address */; - Limit: number /* int */; - Cursor: string; -} -/** - * DepositItem ... Deposit item model for API responses - */ -export interface DepositItem { - guid: string; - from: string; - to: string; - timestamp: number /* uint64 */; - l1BlockHash: string; - l1TxHash: string; - l2TxHash: string; - amount: string; - l1TokenAddress: string; - l2TokenAddress: string; -} -/** - * DepositResponse ... Data model for API JSON response - */ -export interface DepositResponse { - cursor: string; - hasNextPage: boolean; - items: DepositItem[]; -} -/** - * WithdrawalItem ... Data model for API JSON response - */ -export interface WithdrawalItem { - guid: string; - from: string; - to: string; - transactionHash: string; - crossDomainMessageHash: string; - timestamp: number /* uint64 */; - l2BlockHash: string; - amount: string; - l1ProvenTxHash: string; - l1FinalizedTxHash: string; - l1TokenAddress: string; - l2TokenAddress: string; -} -/** - * WithdrawalResponse ... Data model for API JSON response - */ -export interface WithdrawalResponse { - cursor: string; - hasNextPage: boolean; - items: WithdrawalItem[]; -} -export interface BridgeSupplyView { - l1DepositSum: number /* float64 */; - l2WithdrawalSum: number /* float64 */; - provenSum: number /* float64 */; - finalizedSum: number /* float64 */; -} diff --git a/indexer/api-ts/indexer.cjs b/indexer/api-ts/indexer.cjs deleted file mode 100644 index 6eee96c7d176..000000000000 --- a/indexer/api-ts/indexer.cjs +++ /dev/null @@ -1,51 +0,0 @@ -"use strict"; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); - -// indexer.ts -var indexer_exports = {}; -__export(indexer_exports, { - depositEndpoint: () => depositEndpoint, - withdrawalEndoint: () => withdrawalEndoint -}); -module.exports = __toCommonJS(indexer_exports); -var createQueryString = ({ cursor, limit }) => { - if (cursor === void 0 && limit === void 0) { - return ""; - } - const queries = []; - if (cursor) { - queries.push(`cursor=${cursor}`); - } - if (limit) { - queries.push(`limit=${limit}`); - } - return `?${queries.join("&")}`; -}; -var depositEndpoint = ({ baseUrl = "", address, cursor, limit }) => { - return [baseUrl, "deposits", `${address}${createQueryString({ cursor, limit })}`].join("/"); -}; -var withdrawalEndoint = ({ baseUrl = "", address, cursor, limit }) => { - return [baseUrl, "withdrawals", `${address}${createQueryString({ cursor, limit })}`].join("/"); -}; -// Annotate the CommonJS export names for ESM import in node: -0 && (module.exports = { - depositEndpoint, - withdrawalEndoint -}); -//# sourceMappingURL=indexer.cjs.map \ No newline at end of file diff --git a/indexer/api-ts/indexer.cjs.map b/indexer/api-ts/indexer.cjs.map deleted file mode 100644 index 694ca7dfa107..000000000000 --- a/indexer/api-ts/indexer.cjs.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["indexer.ts"],"sourcesContent":["export * from './generated'\n\ntype PaginationOptions = {\n limit?: number\n cursor?: string\n}\n\ntype Options = {\n baseUrl?: string\n address: `0x${string}`\n} & PaginationOptions\n\nconst createQueryString = ({ cursor, limit }: PaginationOptions): string => {\n if (cursor === undefined && limit === undefined) {\n return ''\n }\n const queries: string[] = []\n if (cursor) {\n queries.push(`cursor=${cursor}`)\n }\n if (limit) {\n queries.push(`limit=${limit}`)\n }\n return `?${queries.join('&')}`\n}\n\nexport const depositEndpoint = ({ baseUrl = '', address, cursor, limit }: Options): string => {\n return [baseUrl, 'deposits', `${address}${createQueryString({ cursor, limit })}`].join('/')\n}\n\nexport const withdrawalEndoint = ({ baseUrl = '', address, cursor, limit }: Options): string => {\n return [baseUrl, 'withdrawals', `${address}${createQueryString({ cursor, limit })}`].join('/')\n}\n\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA,IAAM,oBAAoB,CAAC,EAAE,QAAQ,MAAM,MAAiC;AAC1E,MAAI,WAAW,UAAa,UAAU,QAAW;AAC/C,WAAO;AAAA,EACT;AACA,QAAM,UAAoB,CAAC;AAC3B,MAAI,QAAQ;AACV,YAAQ,KAAK,UAAU,MAAM,EAAE;AAAA,EACjC;AACA,MAAI,OAAO;AACT,YAAQ,KAAK,SAAS,KAAK,EAAE;AAAA,EAC/B;AACA,SAAO,IAAI,QAAQ,KAAK,GAAG,CAAC;AAC9B;AAEO,IAAM,kBAAkB,CAAC,EAAE,UAAU,IAAI,SAAS,QAAQ,MAAM,MAAuB;AAC5F,SAAO,CAAC,SAAS,YAAY,GAAG,OAAO,GAAG,kBAAkB,EAAE,QAAQ,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,GAAG;AAC5F;AAEO,IAAM,oBAAoB,CAAC,EAAE,UAAU,IAAI,SAAS,QAAQ,MAAM,MAAuB;AAC9F,SAAO,CAAC,SAAS,eAAe,GAAG,OAAO,GAAG,kBAAkB,EAAE,QAAQ,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,GAAG;AAC/F;","names":[]} \ No newline at end of file diff --git a/indexer/api-ts/indexer.js b/indexer/api-ts/indexer.js deleted file mode 100644 index f76434c63b35..000000000000 --- a/indexer/api-ts/indexer.js +++ /dev/null @@ -1,25 +0,0 @@ -// indexer.ts -var createQueryString = ({ cursor, limit }) => { - if (cursor === void 0 && limit === void 0) { - return ""; - } - const queries = []; - if (cursor) { - queries.push(`cursor=${cursor}`); - } - if (limit) { - queries.push(`limit=${limit}`); - } - return `?${queries.join("&")}`; -}; -var depositEndpoint = ({ baseUrl = "", address, cursor, limit }) => { - return [baseUrl, "deposits", `${address}${createQueryString({ cursor, limit })}`].join("/"); -}; -var withdrawalEndoint = ({ baseUrl = "", address, cursor, limit }) => { - return [baseUrl, "withdrawals", `${address}${createQueryString({ cursor, limit })}`].join("/"); -}; -export { - depositEndpoint, - withdrawalEndoint -}; -//# sourceMappingURL=indexer.js.map \ No newline at end of file diff --git a/indexer/api-ts/indexer.js.map b/indexer/api-ts/indexer.js.map deleted file mode 100644 index 8f9742b0c852..000000000000 --- a/indexer/api-ts/indexer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["indexer.ts"],"sourcesContent":["export * from './generated'\n\ntype PaginationOptions = {\n limit?: number\n cursor?: string\n}\n\ntype Options = {\n baseUrl?: string\n address: `0x${string}`\n} & PaginationOptions\n\nconst createQueryString = ({ cursor, limit }: PaginationOptions): string => {\n if (cursor === undefined && limit === undefined) {\n return ''\n }\n const queries: string[] = []\n if (cursor) {\n queries.push(`cursor=${cursor}`)\n }\n if (limit) {\n queries.push(`limit=${limit}`)\n }\n return `?${queries.join('&')}`\n}\n\nexport const depositEndpoint = ({ baseUrl = '', address, cursor, limit }: Options): string => {\n return [baseUrl, 'deposits', `${address}${createQueryString({ cursor, limit })}`].join('/')\n}\n\nexport const withdrawalEndoint = ({ baseUrl = '', address, cursor, limit }: Options): string => {\n return [baseUrl, 'withdrawals', `${address}${createQueryString({ cursor, limit })}`].join('/')\n}\n\n"],"mappings":";AAYA,IAAM,oBAAoB,CAAC,EAAE,QAAQ,MAAM,MAAiC;AAC1E,MAAI,WAAW,UAAa,UAAU,QAAW;AAC/C,WAAO;AAAA,EACT;AACA,QAAM,UAAoB,CAAC;AAC3B,MAAI,QAAQ;AACV,YAAQ,KAAK,UAAU,MAAM,EAAE;AAAA,EACjC;AACA,MAAI,OAAO;AACT,YAAQ,KAAK,SAAS,KAAK,EAAE;AAAA,EAC/B;AACA,SAAO,IAAI,QAAQ,KAAK,GAAG,CAAC;AAC9B;AAEO,IAAM,kBAAkB,CAAC,EAAE,UAAU,IAAI,SAAS,QAAQ,MAAM,MAAuB;AAC5F,SAAO,CAAC,SAAS,YAAY,GAAG,OAAO,GAAG,kBAAkB,EAAE,QAAQ,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,GAAG;AAC5F;AAEO,IAAM,oBAAoB,CAAC,EAAE,UAAU,IAAI,SAAS,QAAQ,MAAM,MAAuB;AAC9F,SAAO,CAAC,SAAS,eAAe,GAAG,OAAO,GAAG,kBAAkB,EAAE,QAAQ,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,GAAG;AAC/F;","names":[]} \ No newline at end of file diff --git a/indexer/api-ts/indexer.spec.ts b/indexer/api-ts/indexer.spec.ts deleted file mode 100644 index 38a83cd3fd30..000000000000 --- a/indexer/api-ts/indexer.spec.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { test, expect } from 'vitest' -import { depositEndpoint, withdrawalEndoint } from './indexer.ts' - -test(depositEndpoint.name, () => { - expect(depositEndpoint({ baseUrl: 'http://localhost:8080/api/v0', address: '0x1234', cursor: '0x1235', limit: 10 })).toMatchInlineSnapshot('"http://localhost:8080/api/v0/deposits/0x1234?cursor=0x1235&limit=10"') - expect(depositEndpoint({ baseUrl: 'http://localhost:8080/api/v0', address: '0x1234' })).toMatchInlineSnapshot('"http://localhost:8080/api/v0/deposits/0x1234"') -}) - -test(withdrawalEndoint.name, () => { - expect(withdrawalEndoint({ baseUrl: 'http://localhost:8080/api/v0', address: '0x1234', cursor: '0x1235', limit: 10 })).toMatchInlineSnapshot('"http://localhost:8080/api/v0/withdrawals/0x1234?cursor=0x1235&limit=10"') - expect(withdrawalEndoint({ baseUrl: 'http://localhost:8080/api/v0', address: '0x1234' })).toMatchInlineSnapshot('"http://localhost:8080/api/v0/withdrawals/0x1234"') -}) diff --git a/indexer/api-ts/indexer.ts b/indexer/api-ts/indexer.ts deleted file mode 100644 index e73ce765039d..000000000000 --- a/indexer/api-ts/indexer.ts +++ /dev/null @@ -1,34 +0,0 @@ -export * from './generated' - -type PaginationOptions = { - limit?: number - cursor?: string -} - -type Options = { - baseUrl?: string - address: `0x${string}` -} & PaginationOptions - -const createQueryString = ({ cursor, limit }: PaginationOptions): string => { - if (cursor === undefined && limit === undefined) { - return '' - } - const queries: string[] = [] - if (cursor) { - queries.push(`cursor=${cursor}`) - } - if (limit) { - queries.push(`limit=${limit}`) - } - return `?${queries.join('&')}` -} - -export const depositEndpoint = ({ baseUrl = '', address, cursor, limit }: Options): string => { - return [baseUrl, 'deposits', `${address}${createQueryString({ cursor, limit })}`].join('/') -} - -export const withdrawalEndoint = ({ baseUrl = '', address, cursor, limit }: Options): string => { - return [baseUrl, 'withdrawals', `${address}${createQueryString({ cursor, limit })}`].join('/') -} - diff --git a/indexer/api-ts/package.json b/indexer/api-ts/package.json deleted file mode 100644 index cb27cee2b59e..000000000000 --- a/indexer/api-ts/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "@eth-optimism/indexer-api", - "version": "0.0.5", - "description": "[Optimism] typescript types for the indexer service", - "main": "indexer.cjs", - "module": "indexer.js", - "types": "indexer.ts", - "type": "module", - "files": [ - "*.ts", - "*.ts", - "*.js", - "*.js.map", - "*.cjs", - "*.cjs.map", - "LICENSE" - ], - "scripts": { - "generate:clean": "rm -rf generated.ts indexer.cjs indexer.js", - "generate": "npm run generate:clean && tygo generate && mv ../api/models/index.ts generated.ts && tsup", - "test": "vitest" - }, - "keywords": [ - "optimism", - "ethereum", - "indexer" - ], - "homepage": "https://github.com/ethereum-optimism/optimism/tree/develop/indexer#readme", - "license": "MIT", - "author": "Optimism PBC", - "repository": { - "type": "git", - "url": "https://github.com/ethereum-optimism/optimism.git" - }, - "devDependencies": { - "tsup": "^8.0.1", - "vitest": "^1.2.2" - } -} diff --git a/indexer/api-ts/tsconfig.json b/indexer/api-ts/tsconfig.json deleted file mode 100644 index 6a6c29f680c4..000000000000 --- a/indexer/api-ts/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "compilerOptions": { - "outDir": "dist", - "strict": true, - "skipLibCheck": true, - "module": "ESNext", - "moduleResolution": "NodeNext", - "jsx": "react", - "target": "ESNext", - "noEmit": true - }, - "include": ["."] -} diff --git a/indexer/api-ts/tsup.config.ts b/indexer/api-ts/tsup.config.ts deleted file mode 100644 index 793f4d65750d..000000000000 --- a/indexer/api-ts/tsup.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import packageJson from './package.json' - -export default { - name: packageJson.name, - entry: ['indexer.ts'], - outDir: '.', - format: ['esm', 'cjs'], - splitting: false, - sourcemap: true, - clean: false, -} diff --git a/indexer/api-ts/tygo.yaml b/indexer/api-ts/tygo.yaml deleted file mode 100644 index 562ae786d30d..000000000000 --- a/indexer/api-ts/tygo.yaml +++ /dev/null @@ -1,2 +0,0 @@ -packages: - - path: "github.com/ethereum-optimism/optimism/indexer/api/models" diff --git a/indexer/api/api.go b/indexer/api/api.go deleted file mode 100644 index ff2601283d38..000000000000 --- a/indexer/api/api.go +++ /dev/null @@ -1,185 +0,0 @@ -package api - -import ( - "context" - "errors" - "fmt" - "net" - "net/http" - "strconv" - "sync/atomic" - "time" - - "github.com/go-chi/chi/v5" - "github.com/go-chi/chi/v5/middleware" - - "github.com/prometheus/client_golang/prometheus" - - "github.com/ethereum/go-ethereum/log" - - "github.com/ethereum-optimism/optimism/indexer/api/routes" - "github.com/ethereum-optimism/optimism/indexer/api/service" - "github.com/ethereum-optimism/optimism/indexer/config" - "github.com/ethereum-optimism/optimism/indexer/database" - "github.com/ethereum-optimism/optimism/op-service/httputil" - "github.com/ethereum-optimism/optimism/op-service/metrics" -) - -const ethereumAddressRegex = `^0x[a-fA-F0-9]{40}$` - -const ( - MetricsNamespace = "op_indexer_api" - addressParam = "{address:%s}" - - // Endpoint paths - DocsPath = "/docs" - HealthPath = "/healthz" - DepositsPath = "/api/v0/deposits/" - WithdrawalsPath = "/api/v0/withdrawals/" - - SupplyPath = "/api/v0/supply" -) - -// Api ... Indexer API struct -// TODO : Structured error responses -type APIService struct { - log log.Logger - router *chi.Mux - - bv database.BridgeTransfersView - dbClose func() error - - metricsRegistry *prometheus.Registry - - apiServer *httputil.HTTPServer - metricsServer *httputil.HTTPServer - - stopped atomic.Bool -} - -// chiMetricsMiddleware ... Injects a metrics recorder into request processing middleware -func chiMetricsMiddleware(rec metrics.HTTPRecorder) func(http.Handler) http.Handler { - return func(next http.Handler) http.Handler { - return metrics.NewHTTPRecordingMiddleware(rec, next) - } -} - -// NewApi ... Construct a new api instance -func NewApi(ctx context.Context, log log.Logger, cfg *Config) (*APIService, error) { - out := &APIService{log: log, metricsRegistry: metrics.NewRegistry()} - if err := out.initFromConfig(ctx, cfg); err != nil { - return nil, errors.Join(err, out.Stop(ctx)) // close any resources we may have opened already - } - return out, nil -} - -func (a *APIService) initFromConfig(ctx context.Context, cfg *Config) error { - if err := a.initDB(ctx, cfg.DB); err != nil { - return fmt.Errorf("failed to init DB: %w", err) - } - if err := a.startMetricsServer(cfg.MetricsServer); err != nil { - return fmt.Errorf("failed to start metrics server: %w", err) - } - a.initRouter(cfg.HTTPServer) - if err := a.startServer(cfg.HTTPServer); err != nil { - return fmt.Errorf("failed to start API server: %w", err) - } - return nil -} - -func (a *APIService) Start(ctx context.Context) error { - // Completed all setup-up jobs at init-time already, - // and the API service does not have any other special starting routines or background-jobs to start. - return nil -} - -func (a *APIService) Stop(ctx context.Context) error { - var result error - if a.apiServer != nil { - if err := a.apiServer.Stop(ctx); err != nil { - result = errors.Join(result, fmt.Errorf("failed to stop API server: %w", err)) - } - } - if a.metricsServer != nil { - if err := a.metricsServer.Stop(ctx); err != nil { - result = errors.Join(result, fmt.Errorf("failed to stop metrics server: %w", err)) - } - } - if a.dbClose != nil { - if err := a.dbClose(); err != nil { - result = errors.Join(result, fmt.Errorf("failed to close DB: %w", err)) - } - } - a.stopped.Store(true) - a.log.Info("API service shutdown complete") - return result -} - -func (a *APIService) Stopped() bool { - return a.stopped.Load() -} - -// Addr ... returns the address that the HTTP server is listening on (excl. http:// prefix, just the host and port) -func (a *APIService) Addr() string { - if a.apiServer == nil { - return "" - } - return a.apiServer.Addr().String() -} - -func (a *APIService) initDB(ctx context.Context, connector DBConnector) error { - db, err := connector.OpenDB(ctx, a.log) - if err != nil { - return fmt.Errorf("failed to connect to database: %w", err) - } - a.dbClose = db.Closer - a.bv = db.BridgeTransfers - return nil -} - -func (a *APIService) initRouter(apiConfig config.ServerConfig) { - v := new(service.Validator) - - svc := service.New(v, a.bv, a.log) - apiRouter := chi.NewRouter() - h := routes.NewRoutes(a.log, apiRouter, svc) - - apiRouter.Use(middleware.Logger) - apiRouter.Use(middleware.Timeout(time.Duration(apiConfig.WriteTimeout) * time.Second)) - apiRouter.Use(middleware.Recoverer) - apiRouter.Use(middleware.Heartbeat(HealthPath)) - apiRouter.Use(chiMetricsMiddleware(metrics.NewPromHTTPRecorder(a.metricsRegistry, MetricsNamespace))) - - apiRouter.Get(fmt.Sprintf(DepositsPath+addressParam, ethereumAddressRegex), h.L1DepositsHandler) - apiRouter.Get(fmt.Sprintf(WithdrawalsPath+addressParam, ethereumAddressRegex), h.L2WithdrawalsHandler) - apiRouter.Get(SupplyPath, h.SupplyView) - apiRouter.Get(DocsPath, h.DocsHandler) - a.router = apiRouter -} - -// startServer ... Starts the API server -func (a *APIService) startServer(serverConfig config.ServerConfig) error { - a.log.Debug("API server listening...", "port", serverConfig.Port) - - addr := net.JoinHostPort(serverConfig.Host, strconv.Itoa(serverConfig.Port)) - srv, err := httputil.StartHTTPServer(addr, a.router) - if err != nil { - return fmt.Errorf("failed to start API server: %w", err) - } - - a.log.Info("API server started", "addr", srv.Addr().String()) - a.apiServer = srv - return nil -} - -// startMetricsServer ... Starts the metrics server -func (a *APIService) startMetricsServer(metricsConfig config.ServerConfig) error { - a.log.Debug("starting metrics server...", "port", metricsConfig.Port) - srv, err := metrics.StartServer(a.metricsRegistry, metricsConfig.Host, metricsConfig.Port) - if err != nil { - return fmt.Errorf("failed to start metrics server: %w", err) - } - a.log.Info("Metrics server started", "addr", srv.Addr().String()) - a.metricsServer = srv - return nil -} diff --git a/indexer/api/api_client.go b/indexer/api/api_client.go deleted file mode 100644 index 3f4ff616aa16..000000000000 --- a/indexer/api/api_client.go +++ /dev/null @@ -1,213 +0,0 @@ -package api - -import ( - "fmt" - "io" - "net/http" - "time" - - "encoding/json" - - "github.com/ethereum-optimism/optimism/indexer/api/models" - "github.com/ethereum-optimism/optimism/op-service/metrics" - "github.com/ethereum/go-ethereum/common" -) - -const ( - urlParams = "?cursor=%s&limit=%d" - - defaultPagingLimit = 100 - - // method names - healthz = "get_health" - deposits = "get_deposits" - withdrawals = "get_withdrawals" - sum = "get_sum" -) - -// Option ... Provides configuration through callback injection -type Option func(*Client) error - -// WithMetrics ... Triggers metric optionality -func WithMetrics(m metrics.RPCClientMetricer) Option { - return func(c *Client) error { - c.metrics = m - return nil - } -} - -// WithTimeout ... Embeds a timeout limit to request -func WithTimeout(t time.Duration) Option { - return func(c *Client) error { - c.c.Timeout = t - return nil - } -} - -// Config ... Indexer client config struct -type ClientConfig struct { - PaginationLimit int - BaseURL string -} - -// Client ... Indexer client struct -type Client struct { - cfg *ClientConfig - c *http.Client - metrics metrics.RPCClientMetricer -} - -// NewClient ... Construct a new indexer client -func NewClient(cfg *ClientConfig, opts ...Option) (*Client, error) { - if cfg.PaginationLimit <= 0 { - cfg.PaginationLimit = defaultPagingLimit - } - - c := &http.Client{} - client := &Client{cfg: cfg, c: c} - - for _, opt := range opts { - err := opt(client) - if err != nil { - return nil, err - } - } - - return client, nil -} - -// doRecordRequest ... Performs a read request on a provided endpoint w/ telemetry -func (c *Client) doRecordRequest(method string, endpoint string) ([]byte, error) { - var recordRequest func(error) = nil - if c.metrics != nil { - recordRequest = c.metrics.RecordRPCClientRequest(method) - } - - resp, err := c.c.Get(endpoint) - if recordRequest != nil { - recordRequest(err) - } - if err != nil { - return nil, err - } - - body, err := io.ReadAll(resp.Body) - if err != nil { - return nil, fmt.Errorf("failed to read response body: %w", err) - } - - if err = resp.Body.Close(); err != nil { - return nil, err - } - if resp.StatusCode != http.StatusOK { - return nil, fmt.Errorf("endpoint failed with status code %d", resp.StatusCode) - } - - return body, nil -} - -// HealthCheck ... Checks the health of the indexer API -func (c *Client) HealthCheck() error { - _, err := c.doRecordRequest(healthz, c.cfg.BaseURL+HealthPath) - return err -} - -// GetDepositsByAddress ... Gets a deposit response object provided an L1 address and cursor -func (c *Client) GetDepositsByAddress(l1Address common.Address, cursor string) (*models.DepositResponse, error) { - var response models.DepositResponse - url := c.cfg.BaseURL + DepositsPath + l1Address.String() + urlParams - endpoint := fmt.Sprintf(url, cursor, c.cfg.PaginationLimit) - - resp, err := c.doRecordRequest(deposits, endpoint) - if err != nil { - return nil, err - } - - if err := json.Unmarshal(resp, &response); err != nil { - return nil, err - } - - return &response, nil -} - -// GetAllDepositsByAddress ... Gets all deposits provided a L1 address -func (c *Client) GetAllDepositsByAddress(l1Address common.Address) ([]models.DepositItem, error) { - var deposits []models.DepositItem - - cursor := "" - for { - dResponse, err := c.GetDepositsByAddress(l1Address, cursor) - if err != nil { - return nil, err - } - - deposits = append(deposits, dResponse.Items...) - if !dResponse.HasNextPage { - break - } - - cursor = dResponse.Cursor - } - - return deposits, nil - -} - -// GetSupplyAssessment ... Returns an assessment of the current supply -// on both L1 and L2. This includes the individual sums of -// (L1/L2) deposits and withdrawals -func (c *Client) GetSupplyAssessment() (*models.BridgeSupplyView, error) { - url := c.cfg.BaseURL + SupplyPath - - resp, err := c.doRecordRequest(sum, url) - if err != nil { - return nil, err - } - - var bsv *models.BridgeSupplyView - if err := json.Unmarshal(resp, &bsv); err != nil { - return nil, err - } - - return bsv, nil -} - -// GetAllWithdrawalsByAddress ... Gets all withdrawals provided a L2 address -func (c *Client) GetAllWithdrawalsByAddress(l2Address common.Address) ([]models.WithdrawalItem, error) { - var withdrawals []models.WithdrawalItem - - cursor := "" - for { - wResponse, err := c.GetWithdrawalsByAddress(l2Address, cursor) - if err != nil { - return nil, err - } - - withdrawals = append(withdrawals, wResponse.Items...) - if !wResponse.HasNextPage { - break - } - - cursor = wResponse.Cursor - } - - return withdrawals, nil -} - -// GetWithdrawalsByAddress ... Gets a withdrawal response object provided an L2 address and cursor -func (c *Client) GetWithdrawalsByAddress(l2Address common.Address, cursor string) (*models.WithdrawalResponse, error) { - var wResponse *models.WithdrawalResponse - url := c.cfg.BaseURL + WithdrawalsPath + l2Address.String() + urlParams - - endpoint := fmt.Sprintf(url, cursor, c.cfg.PaginationLimit) - resp, err := c.doRecordRequest(withdrawals, endpoint) - if err != nil { - return nil, err - } - - if err := json.Unmarshal(resp, &wResponse); err != nil { - return nil, err - } - - return wResponse, nil -} diff --git a/indexer/api/api_test.go b/indexer/api/api_test.go deleted file mode 100644 index e69a22fbfcf4..000000000000 --- a/indexer/api/api_test.go +++ /dev/null @@ -1,186 +0,0 @@ -package api - -import ( - "context" - "encoding/json" - "fmt" - "net/http" - "net/http/httptest" - "testing" - - "github.com/ethereum-optimism/optimism/indexer/api/models" - "github.com/ethereum-optimism/optimism/indexer/config" - "github.com/ethereum-optimism/optimism/indexer/database" - "github.com/ethereum-optimism/optimism/op-service/testlog" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/log" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -// MockBridgeTransfersView mocks the BridgeTransfersView interface -type MockBridgeTransfersView struct{} - -var mockAddress = "0x4204204204204204204204204204204204204204" - -var apiConfig = config.ServerConfig{ - Host: "localhost", - Port: 0, // random port, to allow parallel tests -} - -var metricsConfig = config.ServerConfig{ - Host: "localhost", - Port: 0, // random port, to allow parallel tests -} - -var ( - deposit = database.L1BridgeDeposit{ - TransactionSourceHash: common.HexToHash("abc"), - BridgeTransfer: database.BridgeTransfer{ - CrossDomainMessageHash: &common.Hash{}, - Tx: database.Transaction{}, - TokenPair: database.TokenPair{}, - }, - } - - withdrawal = database.L2BridgeWithdrawal{ - TransactionWithdrawalHash: common.HexToHash("0x420"), - BridgeTransfer: database.BridgeTransfer{ - CrossDomainMessageHash: &common.Hash{}, - Tx: database.Transaction{}, - TokenPair: database.TokenPair{}, - }, - } -) - -func (mbv *MockBridgeTransfersView) L1BridgeDeposit(hash common.Hash) (*database.L1BridgeDeposit, error) { - return &deposit, nil -} - -func (mbv *MockBridgeTransfersView) L1BridgeDepositWithFilter(filter database.BridgeTransfer) (*database.L1BridgeDeposit, error) { - return &deposit, nil -} - -func (mbv *MockBridgeTransfersView) L2BridgeWithdrawal(address common.Hash) (*database.L2BridgeWithdrawal, error) { - return &withdrawal, nil -} - -func (mbv *MockBridgeTransfersView) L2BridgeWithdrawalWithFilter(filter database.BridgeTransfer) (*database.L2BridgeWithdrawal, error) { - return &withdrawal, nil -} - -func (mbv *MockBridgeTransfersView) L1BridgeDepositsByAddress(address common.Address, cursor string, limit int) (*database.L1BridgeDepositsResponse, error) { - return &database.L1BridgeDepositsResponse{ - Deposits: []database.L1BridgeDepositWithTransactionHashes{ - { - L1BridgeDeposit: deposit, - L1TransactionHash: common.HexToHash("0x123"), - L2TransactionHash: common.HexToHash("0x555"), - L1BlockHash: common.HexToHash("0x456"), - }, - }, - }, nil -} - -func (mbv *MockBridgeTransfersView) L2BridgeWithdrawalsByAddress(address common.Address, cursor string, limit int) (*database.L2BridgeWithdrawalsResponse, error) { - return &database.L2BridgeWithdrawalsResponse{ - Withdrawals: []database.L2BridgeWithdrawalWithTransactionHashes{ - { - L2BridgeWithdrawal: withdrawal, - L2TransactionHash: common.HexToHash("0x789"), - L2BlockHash: common.HexToHash("0x456"), - ProvenL1TransactionHash: common.HexToHash("0x123"), - FinalizedL1TransactionHash: common.HexToHash("0x123"), - }, - }, - }, nil -} - -func (mbv *MockBridgeTransfersView) L1TxDepositSum() (float64, error) { - return 69, nil -} -func (mbv *MockBridgeTransfersView) L2BridgeWithdrawalSum(database.WithdrawFilter) (float64, error) { - return 420, nil -} - -func TestHealthz(t *testing.T) { - logger := testlog.Logger(t, log.LevelInfo) - cfg := &Config{ - DB: &TestDBConnector{BridgeTransfers: &MockBridgeTransfersView{}}, - HTTPServer: apiConfig, - MetricsServer: metricsConfig, - } - api, err := NewApi(context.Background(), logger, cfg) - require.NoError(t, err) - request, err := http.NewRequest("GET", "http://"+api.Addr()+"/healthz", nil) - assert.Nil(t, err) - - responseRecorder := httptest.NewRecorder() - api.router.ServeHTTP(responseRecorder, request) - - assert.Equal(t, http.StatusOK, responseRecorder.Code) -} - -func TestL1BridgeDepositsHandler(t *testing.T) { - logger := testlog.Logger(t, log.LevelInfo) - cfg := &Config{ - DB: &TestDBConnector{BridgeTransfers: &MockBridgeTransfersView{}}, - HTTPServer: apiConfig, - MetricsServer: metricsConfig, - } - api, err := NewApi(context.Background(), logger, cfg) - require.NoError(t, err) - request, err := http.NewRequest("GET", fmt.Sprintf("http://"+api.Addr()+"/api/v0/deposits/%s", mockAddress), nil) - assert.Nil(t, err) - - responseRecorder := httptest.NewRecorder() - api.router.ServeHTTP(responseRecorder, request) - - assert.Equal(t, http.StatusOK, responseRecorder.Code) - - var resp models.DepositResponse - err = json.Unmarshal(responseRecorder.Body.Bytes(), &resp) - assert.Nil(t, err) - - require.Len(t, resp.Items, 1) - - assert.Equal(t, resp.Items[0].L1BlockHash, common.HexToHash("0x456").String()) - assert.Equal(t, resp.Items[0].L1TxHash, common.HexToHash("0x123").String()) - assert.Equal(t, resp.Items[0].Timestamp, deposit.Tx.Timestamp) - assert.Equal(t, resp.Items[0].L2TxHash, common.HexToHash("555").String()) -} - -func TestL2BridgeWithdrawalsByAddressHandler(t *testing.T) { - logger := testlog.Logger(t, log.LevelInfo) - cfg := &Config{ - DB: &TestDBConnector{BridgeTransfers: &MockBridgeTransfersView{}}, - HTTPServer: apiConfig, - MetricsServer: metricsConfig, - } - api, err := NewApi(context.Background(), logger, cfg) - require.NoError(t, err) - request, err := http.NewRequest("GET", fmt.Sprintf("http://"+api.Addr()+"/api/v0/withdrawals/%s", mockAddress), nil) - assert.Nil(t, err) - - responseRecorder := httptest.NewRecorder() - api.router.ServeHTTP(responseRecorder, request) - - var resp models.WithdrawalResponse - err = json.Unmarshal(responseRecorder.Body.Bytes(), &resp) - assert.Nil(t, err) - - require.Len(t, resp.Items, 1) - - assert.Equal(t, resp.Items[0].Guid, withdrawal.TransactionWithdrawalHash.String()) - assert.Equal(t, resp.Items[0].L2BlockHash, common.HexToHash("0x456").String()) - assert.Equal(t, resp.Items[0].From, withdrawal.Tx.FromAddress.String()) - assert.Equal(t, resp.Items[0].To, withdrawal.Tx.ToAddress.String()) - assert.Equal(t, resp.Items[0].TransactionHash, common.HexToHash("0x789").String()) - assert.Equal(t, resp.Items[0].Amount, withdrawal.Tx.Amount.String()) - assert.Equal(t, resp.Items[0].L1ProvenTxHash, common.HexToHash("0x123").String()) - assert.Equal(t, resp.Items[0].L1FinalizedTxHash, common.HexToHash("0x123").String()) - assert.Equal(t, resp.Items[0].L1TokenAddress, withdrawal.TokenPair.RemoteTokenAddress.String()) - assert.Equal(t, resp.Items[0].L2TokenAddress, withdrawal.TokenPair.LocalTokenAddress.String()) - assert.Equal(t, resp.Items[0].Timestamp, withdrawal.Tx.Timestamp) - -} diff --git a/indexer/api/config.go b/indexer/api/config.go deleted file mode 100644 index 9db26bfffc13..000000000000 --- a/indexer/api/config.go +++ /dev/null @@ -1,60 +0,0 @@ -package api - -import ( - "context" - "fmt" - - "github.com/ethereum/go-ethereum/log" - - "github.com/ethereum-optimism/optimism/indexer/config" - "github.com/ethereum-optimism/optimism/indexer/database" -) - -// DB represents the abstract DB access the API has. -type DB struct { - BridgeTransfers database.BridgeTransfersView - Closer func() error -} - -// DBConfigConnector implements a fully config based DBConnector -type DBConfigConnector struct { - config.DBConfig -} - -func (cfg *DBConfigConnector) OpenDB(ctx context.Context, log log.Logger) (*DB, error) { - db, err := database.NewDB(ctx, log, cfg.DBConfig) - if err != nil { - return nil, fmt.Errorf("failed to connect to database: %w", err) - } - return &DB{ - BridgeTransfers: db.BridgeTransfers, - Closer: db.Close, - }, nil -} - -type TestDBConnector struct { - BridgeTransfers database.BridgeTransfersView -} - -func (tdb *TestDBConnector) OpenDB(ctx context.Context, log log.Logger) (*DB, error) { - return &DB{ - BridgeTransfers: tdb.BridgeTransfers, - Closer: func() error { - log.Info("API service closed test DB view") - return nil - }, - }, nil -} - -// DBConnector is an interface: the config may provide different ways to access the DB. -// This is implemented in tests to provide custom DB views, or share the DB with other services. -type DBConnector interface { - OpenDB(ctx context.Context, log log.Logger) (*DB, error) -} - -// Config for the API service -type Config struct { - DB DBConnector - HTTPServer config.ServerConfig - MetricsServer config.ServerConfig -} diff --git a/indexer/api/models/models.go b/indexer/api/models/models.go deleted file mode 100644 index f62b1dc6f33a..000000000000 --- a/indexer/api/models/models.go +++ /dev/null @@ -1,62 +0,0 @@ -package models - -import ( - "github.com/ethereum/go-ethereum/common" -) - -type QueryParams struct { - Address common.Address - Limit int - Cursor string -} - -// DepositItem ... Deposit item model for API responses -type DepositItem struct { - Guid string `json:"guid"` - From string `json:"from"` - To string `json:"to"` - Timestamp uint64 `json:"timestamp"` - L1BlockHash string `json:"l1BlockHash"` - L1TxHash string `json:"l1TxHash"` - L2TxHash string `json:"l2TxHash"` - Amount string `json:"amount"` - L1TokenAddress string `json:"l1TokenAddress"` - L2TokenAddress string `json:"l2TokenAddress"` -} - -// DepositResponse ... Data model for API JSON response -type DepositResponse struct { - Cursor string `json:"cursor"` - HasNextPage bool `json:"hasNextPage"` - Items []DepositItem `json:"items"` -} - -// WithdrawalItem ... Data model for API JSON response -type WithdrawalItem struct { - Guid string `json:"guid"` - From string `json:"from"` - To string `json:"to"` - TransactionHash string `json:"transactionHash"` - CrossDomainMessageHash string `json:"crossDomainMessageHash"` - Timestamp uint64 `json:"timestamp"` - L2BlockHash string `json:"l2BlockHash"` - Amount string `json:"amount"` - L1ProvenTxHash string `json:"l1ProvenTxHash"` - L1FinalizedTxHash string `json:"l1FinalizedTxHash"` - L1TokenAddress string `json:"l1TokenAddress"` - L2TokenAddress string `json:"l2TokenAddress"` -} - -// WithdrawalResponse ... Data model for API JSON response -type WithdrawalResponse struct { - Cursor string `json:"cursor"` - HasNextPage bool `json:"hasNextPage"` - Items []WithdrawalItem `json:"items"` -} - -type BridgeSupplyView struct { - L1DepositSum float64 `json:"l1DepositSum"` - InitWithdrawalSum float64 `json:"l2WithdrawalSum"` - ProvenWithdrawSum float64 `json:"provenSum"` - FinalizedWithdrawSum float64 `json:"finalizedSum"` -} diff --git a/indexer/api/models/models_test.go b/indexer/api/models/models_test.go deleted file mode 100644 index 0e60304c7357..000000000000 --- a/indexer/api/models/models_test.go +++ /dev/null @@ -1 +0,0 @@ -package models_test diff --git a/indexer/api/routes/common.go b/indexer/api/routes/common.go deleted file mode 100644 index 63a0106bd305..000000000000 --- a/indexer/api/routes/common.go +++ /dev/null @@ -1,29 +0,0 @@ -package routes - -import ( - "encoding/json" - "net/http" -) - -const ( - InternalServerError = "Internal server error" -) - -// jsonResponse ... Marshals and writes a JSON response provided arbitrary data -func jsonResponse(w http.ResponseWriter, data interface{}, statusCode int) error { - w.Header().Set("Content-Type", "application/json") - jsonData, err := json.Marshal(data) - if err != nil { - http.Error(w, InternalServerError, http.StatusInternalServerError) - return err - } - - w.WriteHeader(statusCode) - _, err = w.Write(jsonData) - if err != nil { - http.Error(w, InternalServerError, http.StatusInternalServerError) - return err - } - - return nil -} diff --git a/indexer/api/routes/deposits.go b/indexer/api/routes/deposits.go deleted file mode 100644 index f66e70b6ab33..000000000000 --- a/indexer/api/routes/deposits.go +++ /dev/null @@ -1,34 +0,0 @@ -package routes - -import ( - "net/http" - - "github.com/go-chi/chi/v5" -) - -// L1DepositsHandler ... Handles /api/v0/deposits/{address} GET requests -func (h Routes) L1DepositsHandler(w http.ResponseWriter, r *http.Request) { - address := chi.URLParam(r, "address") - cursor := r.URL.Query().Get("cursor") - limit := r.URL.Query().Get("limit") - - params, err := h.svc.QueryParams(address, cursor, limit) - if err != nil { - http.Error(w, "invalid query params", http.StatusBadRequest) - h.logger.Error("error reading request params", "err", err.Error()) - return - } - - deposits, err := h.svc.GetDeposits(params) - if err != nil { - http.Error(w, "internal server error", http.StatusInternalServerError) - h.logger.Error("error fetching deposits", "err", err.Error()) - return - } - - resp := h.svc.DepositResponse(deposits) - err = jsonResponse(w, resp, http.StatusOK) - if err != nil { - h.logger.Error("error writing response", "err", err) - } -} diff --git a/indexer/api/routes/docs.go b/indexer/api/routes/docs.go deleted file mode 100644 index b88a8b10a915..000000000000 --- a/indexer/api/routes/docs.go +++ /dev/null @@ -1,22 +0,0 @@ -package routes - -import ( - "net/http" - - "github.com/go-chi/docgen" -) - -func (h Routes) DocsHandler(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Content-Type", "text/plain") - w.WriteHeader(http.StatusOK) - docs := docgen.MarkdownRoutesDoc(h.router, docgen.MarkdownOpts{ - ProjectPath: "github.com/ethereum-optimism/optimism/indexer", - // Intro text included at the top of the generated markdown file. - Intro: "Generated documentation for Optimism indexer", - }) - _, err := w.Write([]byte(docs)) - if err != nil { - h.logger.Error("error writing docs", "err", err) - http.Error(w, "Internal server error fetching docs", http.StatusInternalServerError) - } -} diff --git a/indexer/api/routes/routes.go b/indexer/api/routes/routes.go deleted file mode 100644 index 457a7ed92dd9..000000000000 --- a/indexer/api/routes/routes.go +++ /dev/null @@ -1,22 +0,0 @@ -package routes - -import ( - "github.com/ethereum-optimism/optimism/indexer/api/service" - "github.com/ethereum/go-ethereum/log" - "github.com/go-chi/chi/v5" -) - -type Routes struct { - logger log.Logger - router *chi.Mux - svc service.Service -} - -// NewRoutes ... Construct a new route handler instance -func NewRoutes(l log.Logger, r *chi.Mux, svc service.Service) Routes { - return Routes{ - logger: l, - router: r, - svc: svc, - } -} diff --git a/indexer/api/routes/supply.go b/indexer/api/routes/supply.go deleted file mode 100644 index 4fa4c0aa6f2f..000000000000 --- a/indexer/api/routes/supply.go +++ /dev/null @@ -1,21 +0,0 @@ -package routes - -import ( - "net/http" -) - -// SupplyView ... Handles /api/v0/supply GET requests -func (h Routes) SupplyView(w http.ResponseWriter, r *http.Request) { - - view, err := h.svc.GetSupplyInfo() - if err != nil { - http.Error(w, "Internal server error", http.StatusInternalServerError) - h.logger.Error("error getting supply info", "err", err) - return - } - - err = jsonResponse(w, view, http.StatusOK) - if err != nil { - h.logger.Error("error writing response", "err", err) - } -} diff --git a/indexer/api/routes/withdrawals.go b/indexer/api/routes/withdrawals.go deleted file mode 100644 index 8c26b9e26f18..000000000000 --- a/indexer/api/routes/withdrawals.go +++ /dev/null @@ -1,34 +0,0 @@ -package routes - -import ( - "net/http" - - "github.com/go-chi/chi/v5" -) - -// L2WithdrawalsHandler ... Handles /api/v0/withdrawals/{address} GET requests -func (h Routes) L2WithdrawalsHandler(w http.ResponseWriter, r *http.Request) { - address := chi.URLParam(r, "address") - cursor := r.URL.Query().Get("cursor") - limit := r.URL.Query().Get("limit") - - params, err := h.svc.QueryParams(address, cursor, limit) - if err != nil { - http.Error(w, "Invalid query params", http.StatusBadRequest) - h.logger.Error("Invalid query params", "err", err.Error()) - return - } - - withdrawals, err := h.svc.GetWithdrawals(params) - if err != nil { - http.Error(w, "Internal server error", http.StatusInternalServerError) - h.logger.Error("Error getting withdrawals", "err", err.Error()) - return - } - - resp := h.svc.WithdrawResponse(withdrawals) - err = jsonResponse(w, resp, http.StatusOK) - if err != nil { - h.logger.Error("Error writing response", "err", err.Error()) - } -} diff --git a/indexer/api/service/service.go b/indexer/api/service/service.go deleted file mode 100644 index ba61acb72f46..000000000000 --- a/indexer/api/service/service.go +++ /dev/null @@ -1,175 +0,0 @@ -package service - -import ( - "github.com/ethereum/go-ethereum/log" - - "github.com/ethereum-optimism/optimism/indexer/api/models" - "github.com/ethereum-optimism/optimism/indexer/database" - "github.com/ethereum/go-ethereum/common" -) - -type Service interface { - GetDeposits(*models.QueryParams) (*database.L1BridgeDepositsResponse, error) - DepositResponse(*database.L1BridgeDepositsResponse) models.DepositResponse - GetWithdrawals(params *models.QueryParams) (*database.L2BridgeWithdrawalsResponse, error) - WithdrawResponse(*database.L2BridgeWithdrawalsResponse) models.WithdrawalResponse - GetSupplyInfo() (*models.BridgeSupplyView, error) - - QueryParams(address, cursor, limit string) (*models.QueryParams, error) -} - -type HandlerSvc struct { - v *Validator - db database.BridgeTransfersView - logger log.Logger -} - -func New(v *Validator, db database.BridgeTransfersView, l log.Logger) Service { - return &HandlerSvc{ - logger: l, - v: v, - db: db, - } -} - -func (svc *HandlerSvc) QueryParams(a, c, l string) (*models.QueryParams, error) { - address, err := svc.v.ParseValidateAddress(a) - if err != nil { - svc.logger.Error("invalid address param", "param", a, "err", err) - return nil, err - } - - err = svc.v.ValidateCursor(c) - if err != nil { - svc.logger.Error("invalid cursor param", "cursor", c, "err", err) - return nil, err - } - - limit, err := svc.v.ParseValidateLimit(l) - if err != nil { - svc.logger.Error("invalid query param", "cursor", c, "err", err) - return nil, err - } - - return &models.QueryParams{ - Address: address, - Cursor: c, - Limit: limit, - }, nil - -} - -func (svc *HandlerSvc) GetWithdrawals(params *models.QueryParams) (*database.L2BridgeWithdrawalsResponse, error) { - withdrawals, err := svc.db.L2BridgeWithdrawalsByAddress(params.Address, params.Cursor, params.Limit) - if err != nil { - svc.logger.Error("error getting withdrawals", "err", err.Error(), "address", params.Address.String()) - return nil, err - } - - svc.logger.Debug("read withdrawals from db", "count", len(withdrawals.Withdrawals), "address", params.Address.String()) - return withdrawals, nil -} - -func (svc *HandlerSvc) WithdrawResponse(withdrawals *database.L2BridgeWithdrawalsResponse) models.WithdrawalResponse { - items := make([]models.WithdrawalItem, len(withdrawals.Withdrawals)) - for i, withdrawal := range withdrawals.Withdrawals { - - cdh := withdrawal.L2BridgeWithdrawal.CrossDomainMessageHash - if cdh == nil { // Zero value indicates that the withdrawal didn't have a cross domain message - cdh = &common.Hash{0} - } - - item := models.WithdrawalItem{ - Guid: withdrawal.L2BridgeWithdrawal.TransactionWithdrawalHash.String(), - L2BlockHash: withdrawal.L2BlockHash.String(), - Timestamp: withdrawal.L2BridgeWithdrawal.Tx.Timestamp, - From: withdrawal.L2BridgeWithdrawal.Tx.FromAddress.String(), - To: withdrawal.L2BridgeWithdrawal.Tx.ToAddress.String(), - TransactionHash: withdrawal.L2TransactionHash.String(), - Amount: withdrawal.L2BridgeWithdrawal.Tx.Amount.String(), - CrossDomainMessageHash: cdh.String(), - L1ProvenTxHash: withdrawal.ProvenL1TransactionHash.String(), - L1FinalizedTxHash: withdrawal.FinalizedL1TransactionHash.String(), - L1TokenAddress: withdrawal.L2BridgeWithdrawal.TokenPair.RemoteTokenAddress.String(), - L2TokenAddress: withdrawal.L2BridgeWithdrawal.TokenPair.LocalTokenAddress.String(), - } - items[i] = item - } - - return models.WithdrawalResponse{ - Cursor: withdrawals.Cursor, - HasNextPage: withdrawals.HasNextPage, - Items: items, - } -} - -func (svc *HandlerSvc) GetDeposits(params *models.QueryParams) (*database.L1BridgeDepositsResponse, error) { - deposits, err := svc.db.L1BridgeDepositsByAddress(params.Address, params.Cursor, params.Limit) - if err != nil { - svc.logger.Error("error getting deposits", "err", err.Error(), "address", params.Address.String()) - return nil, err - } - - svc.logger.Debug("read deposits from db", "count", len(deposits.Deposits), "address", params.Address.String()) - return deposits, nil -} - -// DepositResponse ... Converts a database.L1BridgeDepositsResponse to an api.DepositResponse -func (svc *HandlerSvc) DepositResponse(deposits *database.L1BridgeDepositsResponse) models.DepositResponse { - items := make([]models.DepositItem, len(deposits.Deposits)) - for i, deposit := range deposits.Deposits { - item := models.DepositItem{ - Guid: deposit.L1BridgeDeposit.TransactionSourceHash.String(), - L1BlockHash: deposit.L1BlockHash.String(), - Timestamp: deposit.L1BridgeDeposit.Tx.Timestamp, - L1TxHash: deposit.L1TransactionHash.String(), - L2TxHash: deposit.L2TransactionHash.String(), - From: deposit.L1BridgeDeposit.Tx.FromAddress.String(), - To: deposit.L1BridgeDeposit.Tx.ToAddress.String(), - Amount: deposit.L1BridgeDeposit.Tx.Amount.String(), - L1TokenAddress: deposit.L1BridgeDeposit.TokenPair.LocalTokenAddress.String(), - L2TokenAddress: deposit.L1BridgeDeposit.TokenPair.RemoteTokenAddress.String(), - } - items[i] = item - } - - return models.DepositResponse{ - Cursor: deposits.Cursor, - HasNextPage: deposits.HasNextPage, - Items: items, - } -} - -// GetSupplyInfo ... Fetch native bridge supply info -func (svc *HandlerSvc) GetSupplyInfo() (*models.BridgeSupplyView, error) { - depositSum, err := svc.db.L1TxDepositSum() - if err != nil { - svc.logger.Error("error getting deposit sum", "err", err) - return nil, err - } - - initSum, err := svc.db.L2BridgeWithdrawalSum(database.All) - if err != nil { - svc.logger.Error("error getting init sum", "err", err) - return nil, err - } - - provenSum, err := svc.db.L2BridgeWithdrawalSum(database.Proven) - if err != nil { - svc.logger.Error("error getting proven sum", "err", err) - return nil, err - } - - finalizedSum, err := svc.db.L2BridgeWithdrawalSum(database.Finalized) - if err != nil { - svc.logger.Error("error getting finalized sum", "err", err) - return nil, err - } - - return &models.BridgeSupplyView{ - L1DepositSum: depositSum, - InitWithdrawalSum: initSum, - ProvenWithdrawSum: provenSum, - FinalizedWithdrawSum: finalizedSum, - }, nil -} diff --git a/indexer/api/service/service_test.go b/indexer/api/service/service_test.go deleted file mode 100644 index 1ec994148fa1..000000000000 --- a/indexer/api/service/service_test.go +++ /dev/null @@ -1,132 +0,0 @@ -package service_test - -import ( - "fmt" - "reflect" - "testing" - - "github.com/ethereum/go-ethereum/log" - - "github.com/ethereum-optimism/optimism/indexer/api/service" - "github.com/ethereum-optimism/optimism/indexer/database" - "github.com/ethereum/go-ethereum/common" - "github.com/stretchr/testify/require" -) - -func assertFieldsAreSet(t *testing.T, item any) { - structType := reflect.TypeOf(item) - - structVal := reflect.ValueOf(item) - fieldNum := structVal.NumField() - - for i := 0; i < fieldNum; i++ { - field := structVal.Field(i) - fieldName := structType.Field(i).Name - - isSet := field.IsValid() && !field.IsZero() - - require.True(t, isSet, fmt.Sprintf("%s in not set", fieldName)) - - } -} - -func TestWithdrawalResponse(t *testing.T) { - svc := service.New(nil, nil, nil) - cdh := common.HexToHash("0x2") - - withdraws := &database.L2BridgeWithdrawalsResponse{ - Withdrawals: []database.L2BridgeWithdrawalWithTransactionHashes{ - { - L2BridgeWithdrawal: database.L2BridgeWithdrawal{ - TransactionWithdrawalHash: common.HexToHash("0x1"), - BridgeTransfer: database.BridgeTransfer{ - CrossDomainMessageHash: &cdh, - Tx: database.Transaction{ - FromAddress: common.HexToAddress("0x3"), - ToAddress: common.HexToAddress("0x4"), - Timestamp: 5, - }, - TokenPair: database.TokenPair{ - LocalTokenAddress: common.HexToAddress("0x6"), - RemoteTokenAddress: common.HexToAddress("0x7"), - }, - }, - }, - }, - }, - } - - response := svc.WithdrawResponse(withdraws) - require.NotEmpty(t, response.Items) - require.Len(t, response.Items, 1) - assertFieldsAreSet(t, response.Items[0]) -} - -func TestDepositResponse(t *testing.T) { - cdh := common.HexToHash("0x2") - svc := service.New(nil, nil, nil) - - deposits := &database.L1BridgeDepositsResponse{ - Deposits: []database.L1BridgeDepositWithTransactionHashes{ - { - L1BridgeDeposit: database.L1BridgeDeposit{ - BridgeTransfer: database.BridgeTransfer{ - CrossDomainMessageHash: &cdh, - Tx: database.Transaction{ - FromAddress: common.HexToAddress("0x3"), - ToAddress: common.HexToAddress("0x4"), - Timestamp: 5, - }, - TokenPair: database.TokenPair{ - LocalTokenAddress: common.HexToAddress("0x6"), - RemoteTokenAddress: common.HexToAddress("0x7"), - }, - }, - }, - }, - }, - } - - response := svc.DepositResponse(deposits) - require.NotEmpty(t, response.Items) - require.Len(t, response.Items, 1) - assertFieldsAreSet(t, response.Items[0]) -} - -func TestQueryParams(t *testing.T) { - - var tests = []struct { - name string - test func(*testing.T, service.Service) - }{ - { - name: "empty params", - test: func(t *testing.T, svc service.Service) { - params, err := svc.QueryParams("", "", "") - require.Error(t, err) - require.Nil(t, params) - }, - }, - { - name: "empty params except address", - test: func(t *testing.T, svc service.Service) { - addr := common.HexToAddress("0x420") - params, err := svc.QueryParams(addr.String(), "", "") - require.NoError(t, err) - require.NotNil(t, params) - require.Equal(t, addr, params.Address) - require.Equal(t, 100, params.Limit) - require.Equal(t, "", params.Cursor) - }, - }, - } - - v := new(service.Validator) - svc := service.New(v, nil, log.New()) - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - tt.test(t, svc) - }) - } -} diff --git a/indexer/api/service/validator.go b/indexer/api/service/validator.go deleted file mode 100644 index 4e6a72199ec7..000000000000 --- a/indexer/api/service/validator.go +++ /dev/null @@ -1,61 +0,0 @@ -package service - -import ( - "errors" - "strconv" - - "github.com/ethereum/go-ethereum/common" -) - -// Validator ... Validates API user request parameters -type Validator struct{} - -// ParseValidateAddress ... Validates and parses the address query parameter -func (v *Validator) ParseValidateAddress(addr string) (common.Address, error) { - if !common.IsHexAddress(addr) { - return common.Address{}, errors.New("address must be represented as a valid hexadecimal string") - } - - parsedAddr := common.HexToAddress(addr) - if parsedAddr == common.HexToAddress("0x0") { - return common.Address{}, errors.New("address cannot be the zero address") - } - - return parsedAddr, nil -} - -// ValidateCursor ... Validates and parses the cursor query parameter -func (v *Validator) ValidateCursor(cursor string) error { - if cursor == "" { - return nil - } - - if len(cursor) != 66 { // 0x + 64 chars - return errors.New("cursor must be a 32 byte hex string") - } - - if cursor[:2] != "0x" { - return errors.New("cursor must begin with 0x") - } - - return nil -} - -// ParseValidateLimit ... Validates and parses the limit query parameters -func (v *Validator) ParseValidateLimit(limit string) (int, error) { - if limit == "" { - return 100, nil - } - - val, err := strconv.Atoi(limit) - if err != nil { - return 0, errors.New("limit must be an integer value") - } - - if val <= 0 { - return 0, errors.New("limit must be greater than 0") - } - - // TODO - Add a check against a max limit value - return val, nil -} diff --git a/indexer/api/service/validator_test.go b/indexer/api/service/validator_test.go deleted file mode 100644 index fa4a76e6e7b0..000000000000 --- a/indexer/api/service/validator_test.go +++ /dev/null @@ -1,64 +0,0 @@ -package service - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -func TestParseValidateLimit(t *testing.T) { - v := Validator{} - - // (1) Happy case - limit := "100" - _, err := v.ParseValidateLimit(limit) - require.NoError(t, err, "limit should be valid") - - // (2) Boundary validation - limit = "0" - _, err = v.ParseValidateLimit(limit) - require.Error(t, err, "limit must be greater than 0") - - // (3) Type validation - limit = "abc" - _, err = v.ParseValidateLimit(limit) - require.Error(t, err, "limit must be an integer value") -} - -func TestParseValidateAddress(t *testing.T) { - v := Validator{} - - // (1) Happy case - addr := "0x95222290DD7278Aa3Ddd389Cc1E1d165CC4BAfe5" - _, err := v.ParseValidateAddress(addr) - require.NoError(t, err, "address should be pass") - - // (2) Invalid hex - addr = "🫡" - _, err = v.ParseValidateAddress(addr) - require.Error(t, err, "address must be represented as a valid hexadecimal string") - - // (3) Zero address - addr = "0x0000000000000000000000000000000000000000" - _, err = v.ParseValidateAddress(addr) - require.Error(t, err, "address cannot be black-hole value") -} - -func Test_ParseValidateCursor(t *testing.T) { - v := Validator{} - - // (1) Happy case - cursor := "0xf3fd2eb696dab4263550b938726f9b3606e334cce6ebe27446bc26cb700b94e0" - err := v.ValidateCursor(cursor) - require.NoError(t, err, "cursor should be pass") - - // (2) Invalid length - cursor = "0x000" - err = v.ValidateCursor(cursor) - require.Error(t, err, "cursor must be 32 byte hex string") - - // (3) Invalid hex - cursor = "0🫡" - err = v.ValidateCursor(cursor) - require.Error(t, err, "cursor must start with 0x") -} diff --git a/indexer/bigint/bigint.go b/indexer/bigint/bigint.go deleted file mode 100644 index d1caf1908cee..000000000000 --- a/indexer/bigint/bigint.go +++ /dev/null @@ -1,33 +0,0 @@ -package bigint - -import "math/big" - -var ( - Zero = big.NewInt(0) - One = big.NewInt(1) -) - -// Clamp returns a new big.Int for `end` to which `end - start` <= size. -// @note (start, end) is an inclusive range. This function assumes that `start` is not greater than `end`. -func Clamp(start, end *big.Int, size uint64) *big.Int { - temp := new(big.Int) - count := temp.Sub(end, start).Uint64() + 1 - if count <= size { - return end - } - - // we re-use the allocated temp as the new end - temp.Add(start, big.NewInt(int64(size-1))) - return temp -} - -// Matcher returns an inner comparison function result for a big.Int -func Matcher(num int64) func(*big.Int) bool { - return func(bi *big.Int) bool { return bi.Int64() == num } -} - -func WeiToETH(wei *big.Int) *big.Float { - f := new(big.Float) - f.SetString(wei.String()) - return f.Quo(f, big.NewFloat(1e18)) -} diff --git a/indexer/bigint/bigint_test.go b/indexer/bigint/bigint_test.go deleted file mode 100644 index a76f404600d0..000000000000 --- a/indexer/bigint/bigint_test.go +++ /dev/null @@ -1,29 +0,0 @@ -package bigint - -import ( - "math/big" - "testing" - - "github.com/stretchr/testify/require" -) - -func TestClamp(t *testing.T) { - start := big.NewInt(1) - end := big.NewInt(10) - - // When the (start, end) bounds are within range - // the same end pointer should be returned - - // larger range - result := Clamp(start, end, 20) - require.True(t, end == result) - - // exact range - result = Clamp(start, end, 10) - require.True(t, end == result) - - // smaller range - result = Clamp(start, end, 5) - require.False(t, end == result) - require.Equal(t, uint64(5), result.Uint64()) -} diff --git a/indexer/bindings/CanonicalTransactionChain.go b/indexer/bindings/CanonicalTransactionChain.go deleted file mode 100644 index 36c01c1b8d10..000000000000 --- a/indexer/bindings/CanonicalTransactionChain.go +++ /dev/null @@ -1,1522 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindings - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// LibOVMCodecQueueElement is an auto generated low-level Go binding around an user-defined struct. -type LibOVMCodecQueueElement struct { - TransactionHash [32]byte - Timestamp *big.Int - BlockNumber *big.Int -} - -// CanonicalTransactionChainMetaData contains all meta data concerning the CanonicalTransactionChain contract. -var CanonicalTransactionChainMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_libAddressManager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_maxTransactionGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l2GasDiscountDivisor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_enqueueGasCost\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"l2GasDiscountDivisor\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"enqueueGasCost\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"enqueueL2GasPrepaid\",\"type\":\"uint256\"}],\"name\":\"L2GasParamsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_startingQueueIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numQueueElements\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_totalElements\",\"type\":\"uint256\"}],\"name\":\"QueueBatchAppended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_startingQueueIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numQueueElements\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_totalElements\",\"type\":\"uint256\"}],\"name\":\"SequencerBatchAppended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_batchRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_batchSize\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_prevTotalElements\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"TransactionBatchAppended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_l1TxOrigin\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_queueIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"name\":\"TransactionEnqueued\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_ROLLUP_TX_SIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_ROLLUP_TX_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"appendSequencerBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batches\",\"outputs\":[{\"internalType\":\"contractIChainStorageContainer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"enqueue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enqueueGasCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enqueueL2GasPrepaid\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastBlockNumber\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastTimestamp\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextQueueIndex\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNumPendingQueueElements\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getQueueElement\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"transactionHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint40\",\"name\":\"timestamp\",\"type\":\"uint40\"},{\"internalType\":\"uint40\",\"name\":\"blockNumber\",\"type\":\"uint40\"}],\"internalType\":\"structLib_OVMCodec.QueueElement\",\"name\":\"_element\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getQueueLength\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalBatches\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalBatches\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalElements\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalElements\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2GasDiscountDivisor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"libAddressManager\",\"outputs\":[{\"internalType\":\"contractLib_AddressManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxTransactionGasLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2GasDiscountDivisor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_enqueueGasCost\",\"type\":\"uint256\"}],\"name\":\"setGasParams\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b5060405162001a9838038062001a9883398101604081905261003191610072565b600080546001600160a01b0319166001600160a01b03861617905560048390556002829055600181905561006581836100bd565b600355506100ea92505050565b6000806000806080858703121561008857600080fd5b84516001600160a01b038116811461009f57600080fd5b60208601516040870151606090970151919890975090945092505050565b60008160001904831182151516156100e557634e487b7160e01b600052601160045260246000fd5b500290565b61199e80620000fa6000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c8063876ed5cb116100cd578063d0f8934411610081578063e654b1fb11610066578063e654b1fb146102c0578063edcc4a45146102c9578063f722b41a146102dc57600080fd5b8063d0f89344146102b0578063e561dddc146102b857600080fd5b8063b8f77005116100b2578063b8f7700514610297578063ccf987c81461029f578063cfdf677e146102a857600080fd5b8063876ed5cb146102855780638d38c6c11461028e57600080fd5b80635ae6256d1161012457806378f4b2f21161010957806378f4b2f2146102645780637a167a8a1461026e5780637aa63a861461027d57600080fd5b80635ae6256d146102475780636fee07e01461024f57600080fd5b80632a7f18be116101555780632a7f18be146101d25780633789977014610216578063461a44781461023457600080fd5b80630b3dfa9714610171578063299ca4781461018d575b600080fd5b61017a60035481565b6040519081526020015b60405180910390f35b6000546101ad9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610184565b6101e56101e03660046113e5565b6102e4565b604080518251815260208084015164ffffffffff908116918301919091529282015190921690820152606001610184565b61021e610362565b60405164ffffffffff9091168152602001610184565b6101ad6102423660046114c1565b610376565b61021e610423565b61026261025d366004611537565b610437565b005b61017a620186a081565b60055464ffffffffff1661021e565b61017a610899565b61017a61c35081565b61017a60045481565b60065461021e565b61017a60025481565b6101ad6108b4565b6102626108dc565b61017a610df8565b61017a60015481565b6102626102d73660046115a4565b610e7f565b61021e611016565b604080516060810182526000808252602082018190529181019190915260068281548110610314576103146115c6565b6000918252602091829020604080516060810182526002909302909101805483526001015464ffffffffff808216948401949094526501000000000090049092169181019190915292915050565b60008061036d611032565b50949350505050565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac1906103cd908590600401611660565b60206040518083038186803b1580156103e557600080fd5b505afa1580156103f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041d919061167a565b92915050565b60008061042e611032565b95945050505050565b61c350815111156104cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f5472616e73616374696f6e20646174612073697a652065786365656473206d6160448201527f78696d756d20666f7220726f6c6c7570207472616e73616374696f6e2e00000060648201526084015b60405180910390fd5b600454821115610561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f5472616e73616374696f6e20676173206c696d69742065786365656473206d6160448201527f78696d756d20666f7220726f6c6c7570207472616e73616374696f6e2e00000060648201526084016104c6565b620186a08210156105f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f5472616e73616374696f6e20676173206c696d697420746f6f206c6f7720746f60448201527f20656e71756575652e000000000000000000000000000000000000000000000060648201526084016104c6565b6003548211156106dc5760006002546003548461061191906116c6565b61061b91906116dd565b905060005a90508181116106b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e73756666696369656e742067617320666f72204c322072617465206c696d60448201527f6974696e67206275726e2e00000000000000000000000000000000000000000060648201526084016104c6565b60005b825a6106c090846116c6565b10156106d857806106d081611718565b9150506106b4565b5050505b6000333214156106ed575033610706565b5033731111000000000000000000000000000000001111015b60008185858560405160200161071f9493929190611751565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060608401835280845264ffffffffff42811692850192835243811693850193845260068054600181810183556000838152975160029092027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f81019290925594517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d4090910180549651841665010000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090971691909316179490941790559154919350610825916116c6565b9050808673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f4b388aecf9fa6cc92253704e5975a6129a4f735bdbd99567df4ed0094ee4ceb58888426040516108899392919061179a565b60405180910390a4505050505050565b6000806108a4611032565b50505064ffffffffff1692915050565b60006108d760405180606001604052806021815260200161194860219139610376565b905090565b60043560d81c60093560e890811c90600c35901c6108f8610899565b8364ffffffffff161461098d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f41637475616c20626174636820737461727420696e64657820646f6573206e6f60448201527f74206d6174636820657870656374656420737461727420696e6465782e00000060648201526084016104c6565b6109cb6040518060400160405280600d81526020017f4f564d5f53657175656e63657200000000000000000000000000000000000000815250610376565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f46756e6374696f6e2063616e206f6e6c792062652063616c6c6564206279207460448201527f68652053657175656e6365722e0000000000000000000000000000000000000060648201526084016104c6565b6000610a9762ffffff831660106117c3565b610aa290600f611800565b905064ffffffffff8116361015610b3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4e6f7420656e6f756768204261746368436f6e74657874732070726f7669646560448201527f642e00000000000000000000000000000000000000000000000000000000000060648201526084016104c6565b6005546040805160808101825260008082526020820181905291810182905260608101829052909164ffffffffff169060005b8562ffffff168163ffffffff161015610bcc576000610b928263ffffffff166110ed565b8051909350839150610ba49086611818565b9450826020015184610bb69190611840565b9350508080610bc490611860565b915050610b6e565b5060065464ffffffffff83161115610c8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f417474656d7074656420746f20617070656e64206d6f726520656c656d656e7460448201527f73207468616e2061726520617661696c61626c6520696e20746865207175657560648201527f652e000000000000000000000000000000000000000000000000000000000000608482015260a4016104c6565b6000610c9d8462ffffff8916611884565b63ffffffff169050600080836020015160001415610cc657505060408201516060830151610d37565b60006006610cd56001886118a9565b64ffffffffff1681548110610cec57610cec6115c6565b6000918252602091829020604080516060810182526002909302909101805483526001015464ffffffffff808216948401859052650100000000009091041691018190529093509150505b610d5b610d456001436116c6565b408a62ffffff168564ffffffffff168585611174565b7f602f1aeac0ca2e7a13e281a9ef0ad7838542712ce16780fa2ecffd351f05f899610d8684876118a9565b84610d8f610899565b6040805164ffffffffff94851681529390921660208401529082015260600160405180910390a15050600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000001664ffffffffff949094169390931790925550505050505050565b6000610e026108b4565b73ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b158015610e4757600080fd5b505afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d791906118c7565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ee557600080fd5b505afa158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d919061167a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f6e6c792063616c6c61626c6520627920746865204275726e2041646d696e2e60448201526064016104c6565b60018190556002829055610fc581836117c3565b60038190556002546001546040805192835260208301919091528101919091527fc6ed75e96b8b18b71edc1a6e82a9d677f8268c774a262c624eeb2cf0a8b3e07e9060600160405180910390a15050565b6005546006546000916108d79164ffffffffff909116906118a9565b60008060008060006110426108b4565b73ffffffffffffffffffffffffffffffffffffffff1663ccf8f9696040518163ffffffff1660e01b815260040160206040518083038186803b15801561108757600080fd5b505afa15801561109b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bf91906118e0565b64ffffffffff602882901c811697605083901c82169750607883901c8216965060a09290921c169350915050565b6111186040518060800160405280600081526020016000815260200160008152602001600081525090565b60006111256010846117c3565b61113090600f611800565b60408051608081018252823560e890811c82526003840135901c6020820152600683013560d890811c92820192909252600b90920135901c60608201529392505050565b600061117e6108b4565b905060008061118b611032565b50509150915060006040518060a001604052808573ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b1580156111e457600080fd5b505afa1580156111f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121c91906118c7565b81526020018a81526020018981526020018464ffffffffff16815260200160405180602001604052806000815250815250905080600001517f127186556e7be68c7e31263195225b4de02820707889540969f62c05cf73525e82602001518360400151846060015185608001516040516112999493929190611922565b60405180910390a260006112ac8261139f565b905060006112e78360400151866112c39190611840565b6112cd8b87611840565b602890811b9190911760508b901b1760788a901b17901b90565b6040517f2015276c000000000000000000000000000000000000000000000000000000008152600481018490527fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000008216602482015290915073ffffffffffffffffffffffffffffffffffffffff871690632015276c90604401600060405180830381600087803b15801561137a57600080fd5b505af115801561138e573d6000803e3d6000fd5b505050505050505050505050505050565b600081602001518260400151836060015184608001516040516020016113c89493929190611922565b604051602081830303815290604052805190602001209050919050565b6000602082840312156113f757600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115611448576114486113fe565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561148e5761148e6113fe565b816040528093508581528686860111156114a757600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156114d357600080fd5b813567ffffffffffffffff8111156114ea57600080fd5b8201601f810184136114fb57600080fd5b61150a8482356020840161142d565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461153457600080fd5b50565b60008060006060848603121561154c57600080fd5b833561155781611512565b925060208401359150604084013567ffffffffffffffff81111561157a57600080fd5b8401601f8101861361158b57600080fd5b61159a8682356020840161142d565b9150509250925092565b600080604083850312156115b757600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815180845260005b8181101561161b576020818501810151868301820152016115ff565b8181111561162d576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061167360208301846115f5565b9392505050565b60006020828403121561168c57600080fd5b815161167381611512565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156116d8576116d8611697565b500390565b600082611713577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561174a5761174a611697565b5060010190565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261179060808301846115f5565b9695505050505050565b8381526060602082015260006117b360608301856115f5565b9050826040830152949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156117fb576117fb611697565b500290565b6000821982111561181357611813611697565b500190565b600063ffffffff80831681851680830382111561183757611837611697565b01949350505050565b600064ffffffffff80831681851680830382111561183757611837611697565b600063ffffffff8083168181141561187a5761187a611697565b6001019392505050565b600063ffffffff838116908316818110156118a1576118a1611697565b039392505050565b600064ffffffffff838116908316818110156118a1576118a1611697565b6000602082840312156118d957600080fd5b5051919050565b6000602082840312156118f257600080fd5b81517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000008116811461167357600080fd5b84815283602082015282604082015260806060820152600061179060808301846115f556fe436861696e53746f72616765436f6e7461696e65722d4354432d62617463686573a264697066735822122071f9046c41835cfaa3b888bb4aa8b907bdd46588ad69741847a96bf3fcaad90264736f6c63430008090033", -} - -// CanonicalTransactionChainABI is the input ABI used to generate the binding from. -// Deprecated: Use CanonicalTransactionChainMetaData.ABI instead. -var CanonicalTransactionChainABI = CanonicalTransactionChainMetaData.ABI - -// CanonicalTransactionChainBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use CanonicalTransactionChainMetaData.Bin instead. -var CanonicalTransactionChainBin = CanonicalTransactionChainMetaData.Bin - -// DeployCanonicalTransactionChain deploys a new Ethereum contract, binding an instance of CanonicalTransactionChain to it. -func DeployCanonicalTransactionChain(auth *bind.TransactOpts, backend bind.ContractBackend, _libAddressManager common.Address, _maxTransactionGasLimit *big.Int, _l2GasDiscountDivisor *big.Int, _enqueueGasCost *big.Int) (common.Address, *types.Transaction, *CanonicalTransactionChain, error) { - parsed, err := CanonicalTransactionChainMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(CanonicalTransactionChainBin), backend, _libAddressManager, _maxTransactionGasLimit, _l2GasDiscountDivisor, _enqueueGasCost) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &CanonicalTransactionChain{CanonicalTransactionChainCaller: CanonicalTransactionChainCaller{contract: contract}, CanonicalTransactionChainTransactor: CanonicalTransactionChainTransactor{contract: contract}, CanonicalTransactionChainFilterer: CanonicalTransactionChainFilterer{contract: contract}}, nil -} - -// CanonicalTransactionChain is an auto generated Go binding around an Ethereum contract. -type CanonicalTransactionChain struct { - CanonicalTransactionChainCaller // Read-only binding to the contract - CanonicalTransactionChainTransactor // Write-only binding to the contract - CanonicalTransactionChainFilterer // Log filterer for contract events -} - -// CanonicalTransactionChainCaller is an auto generated read-only Go binding around an Ethereum contract. -type CanonicalTransactionChainCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// CanonicalTransactionChainTransactor is an auto generated write-only Go binding around an Ethereum contract. -type CanonicalTransactionChainTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// CanonicalTransactionChainFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type CanonicalTransactionChainFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// CanonicalTransactionChainSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type CanonicalTransactionChainSession struct { - Contract *CanonicalTransactionChain // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// CanonicalTransactionChainCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type CanonicalTransactionChainCallerSession struct { - Contract *CanonicalTransactionChainCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// CanonicalTransactionChainTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type CanonicalTransactionChainTransactorSession struct { - Contract *CanonicalTransactionChainTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// CanonicalTransactionChainRaw is an auto generated low-level Go binding around an Ethereum contract. -type CanonicalTransactionChainRaw struct { - Contract *CanonicalTransactionChain // Generic contract binding to access the raw methods on -} - -// CanonicalTransactionChainCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type CanonicalTransactionChainCallerRaw struct { - Contract *CanonicalTransactionChainCaller // Generic read-only contract binding to access the raw methods on -} - -// CanonicalTransactionChainTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type CanonicalTransactionChainTransactorRaw struct { - Contract *CanonicalTransactionChainTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewCanonicalTransactionChain creates a new instance of CanonicalTransactionChain, bound to a specific deployed contract. -func NewCanonicalTransactionChain(address common.Address, backend bind.ContractBackend) (*CanonicalTransactionChain, error) { - contract, err := bindCanonicalTransactionChain(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &CanonicalTransactionChain{CanonicalTransactionChainCaller: CanonicalTransactionChainCaller{contract: contract}, CanonicalTransactionChainTransactor: CanonicalTransactionChainTransactor{contract: contract}, CanonicalTransactionChainFilterer: CanonicalTransactionChainFilterer{contract: contract}}, nil -} - -// NewCanonicalTransactionChainCaller creates a new read-only instance of CanonicalTransactionChain, bound to a specific deployed contract. -func NewCanonicalTransactionChainCaller(address common.Address, caller bind.ContractCaller) (*CanonicalTransactionChainCaller, error) { - contract, err := bindCanonicalTransactionChain(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &CanonicalTransactionChainCaller{contract: contract}, nil -} - -// NewCanonicalTransactionChainTransactor creates a new write-only instance of CanonicalTransactionChain, bound to a specific deployed contract. -func NewCanonicalTransactionChainTransactor(address common.Address, transactor bind.ContractTransactor) (*CanonicalTransactionChainTransactor, error) { - contract, err := bindCanonicalTransactionChain(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &CanonicalTransactionChainTransactor{contract: contract}, nil -} - -// NewCanonicalTransactionChainFilterer creates a new log filterer instance of CanonicalTransactionChain, bound to a specific deployed contract. -func NewCanonicalTransactionChainFilterer(address common.Address, filterer bind.ContractFilterer) (*CanonicalTransactionChainFilterer, error) { - contract, err := bindCanonicalTransactionChain(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &CanonicalTransactionChainFilterer{contract: contract}, nil -} - -// bindCanonicalTransactionChain binds a generic wrapper to an already deployed contract. -func bindCanonicalTransactionChain(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(CanonicalTransactionChainABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_CanonicalTransactionChain *CanonicalTransactionChainRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _CanonicalTransactionChain.Contract.CanonicalTransactionChainCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_CanonicalTransactionChain *CanonicalTransactionChainRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _CanonicalTransactionChain.Contract.CanonicalTransactionChainTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_CanonicalTransactionChain *CanonicalTransactionChainRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _CanonicalTransactionChain.Contract.CanonicalTransactionChainTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_CanonicalTransactionChain *CanonicalTransactionChainCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _CanonicalTransactionChain.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_CanonicalTransactionChain *CanonicalTransactionChainTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _CanonicalTransactionChain.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_CanonicalTransactionChain *CanonicalTransactionChainTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _CanonicalTransactionChain.Contract.contract.Transact(opts, method, params...) -} - -// MAXROLLUPTXSIZE is a free data retrieval call binding the contract method 0x876ed5cb. -// -// Solidity: function MAX_ROLLUP_TX_SIZE() view returns(uint256) -func (_CanonicalTransactionChain *CanonicalTransactionChainCaller) MAXROLLUPTXSIZE(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _CanonicalTransactionChain.contract.Call(opts, &out, "MAX_ROLLUP_TX_SIZE") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// MAXROLLUPTXSIZE is a free data retrieval call binding the contract method 0x876ed5cb. -// -// Solidity: function MAX_ROLLUP_TX_SIZE() view returns(uint256) -func (_CanonicalTransactionChain *CanonicalTransactionChainSession) MAXROLLUPTXSIZE() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.MAXROLLUPTXSIZE(&_CanonicalTransactionChain.CallOpts) -} - -// MAXROLLUPTXSIZE is a free data retrieval call binding the contract method 0x876ed5cb. -// -// Solidity: function MAX_ROLLUP_TX_SIZE() view returns(uint256) -func (_CanonicalTransactionChain *CanonicalTransactionChainCallerSession) MAXROLLUPTXSIZE() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.MAXROLLUPTXSIZE(&_CanonicalTransactionChain.CallOpts) -} - -// MINROLLUPTXGAS is a free data retrieval call binding the contract method 0x78f4b2f2. -// -// Solidity: function MIN_ROLLUP_TX_GAS() view returns(uint256) -func (_CanonicalTransactionChain *CanonicalTransactionChainCaller) MINROLLUPTXGAS(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _CanonicalTransactionChain.contract.Call(opts, &out, "MIN_ROLLUP_TX_GAS") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// MINROLLUPTXGAS is a free data retrieval call binding the contract method 0x78f4b2f2. -// -// Solidity: function MIN_ROLLUP_TX_GAS() view returns(uint256) -func (_CanonicalTransactionChain *CanonicalTransactionChainSession) MINROLLUPTXGAS() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.MINROLLUPTXGAS(&_CanonicalTransactionChain.CallOpts) -} - -// MINROLLUPTXGAS is a free data retrieval call binding the contract method 0x78f4b2f2. -// -// Solidity: function MIN_ROLLUP_TX_GAS() view returns(uint256) -func (_CanonicalTransactionChain *CanonicalTransactionChainCallerSession) MINROLLUPTXGAS() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.MINROLLUPTXGAS(&_CanonicalTransactionChain.CallOpts) -} - -// Batches is a free data retrieval call binding the contract method 0xcfdf677e. -// -// Solidity: function batches() view returns(address) -func (_CanonicalTransactionChain *CanonicalTransactionChainCaller) Batches(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _CanonicalTransactionChain.contract.Call(opts, &out, "batches") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Batches is a free data retrieval call binding the contract method 0xcfdf677e. -// -// Solidity: function batches() view returns(address) -func (_CanonicalTransactionChain *CanonicalTransactionChainSession) Batches() (common.Address, error) { - return _CanonicalTransactionChain.Contract.Batches(&_CanonicalTransactionChain.CallOpts) -} - -// Batches is a free data retrieval call binding the contract method 0xcfdf677e. -// -// Solidity: function batches() view returns(address) -func (_CanonicalTransactionChain *CanonicalTransactionChainCallerSession) Batches() (common.Address, error) { - return _CanonicalTransactionChain.Contract.Batches(&_CanonicalTransactionChain.CallOpts) -} - -// EnqueueGasCost is a free data retrieval call binding the contract method 0xe654b1fb. -// -// Solidity: function enqueueGasCost() view returns(uint256) -func (_CanonicalTransactionChain *CanonicalTransactionChainCaller) EnqueueGasCost(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _CanonicalTransactionChain.contract.Call(opts, &out, "enqueueGasCost") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// EnqueueGasCost is a free data retrieval call binding the contract method 0xe654b1fb. -// -// Solidity: function enqueueGasCost() view returns(uint256) -func (_CanonicalTransactionChain *CanonicalTransactionChainSession) EnqueueGasCost() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.EnqueueGasCost(&_CanonicalTransactionChain.CallOpts) -} - -// EnqueueGasCost is a free data retrieval call binding the contract method 0xe654b1fb. -// -// Solidity: function enqueueGasCost() view returns(uint256) -func (_CanonicalTransactionChain *CanonicalTransactionChainCallerSession) EnqueueGasCost() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.EnqueueGasCost(&_CanonicalTransactionChain.CallOpts) -} - -// EnqueueL2GasPrepaid is a free data retrieval call binding the contract method 0x0b3dfa97. -// -// Solidity: function enqueueL2GasPrepaid() view returns(uint256) -func (_CanonicalTransactionChain *CanonicalTransactionChainCaller) EnqueueL2GasPrepaid(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _CanonicalTransactionChain.contract.Call(opts, &out, "enqueueL2GasPrepaid") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// EnqueueL2GasPrepaid is a free data retrieval call binding the contract method 0x0b3dfa97. -// -// Solidity: function enqueueL2GasPrepaid() view returns(uint256) -func (_CanonicalTransactionChain *CanonicalTransactionChainSession) EnqueueL2GasPrepaid() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.EnqueueL2GasPrepaid(&_CanonicalTransactionChain.CallOpts) -} - -// EnqueueL2GasPrepaid is a free data retrieval call binding the contract method 0x0b3dfa97. -// -// Solidity: function enqueueL2GasPrepaid() view returns(uint256) -func (_CanonicalTransactionChain *CanonicalTransactionChainCallerSession) EnqueueL2GasPrepaid() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.EnqueueL2GasPrepaid(&_CanonicalTransactionChain.CallOpts) -} - -// GetLastBlockNumber is a free data retrieval call binding the contract method 0x5ae6256d. -// -// Solidity: function getLastBlockNumber() view returns(uint40) -func (_CanonicalTransactionChain *CanonicalTransactionChainCaller) GetLastBlockNumber(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _CanonicalTransactionChain.contract.Call(opts, &out, "getLastBlockNumber") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetLastBlockNumber is a free data retrieval call binding the contract method 0x5ae6256d. -// -// Solidity: function getLastBlockNumber() view returns(uint40) -func (_CanonicalTransactionChain *CanonicalTransactionChainSession) GetLastBlockNumber() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.GetLastBlockNumber(&_CanonicalTransactionChain.CallOpts) -} - -// GetLastBlockNumber is a free data retrieval call binding the contract method 0x5ae6256d. -// -// Solidity: function getLastBlockNumber() view returns(uint40) -func (_CanonicalTransactionChain *CanonicalTransactionChainCallerSession) GetLastBlockNumber() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.GetLastBlockNumber(&_CanonicalTransactionChain.CallOpts) -} - -// GetLastTimestamp is a free data retrieval call binding the contract method 0x37899770. -// -// Solidity: function getLastTimestamp() view returns(uint40) -func (_CanonicalTransactionChain *CanonicalTransactionChainCaller) GetLastTimestamp(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _CanonicalTransactionChain.contract.Call(opts, &out, "getLastTimestamp") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetLastTimestamp is a free data retrieval call binding the contract method 0x37899770. -// -// Solidity: function getLastTimestamp() view returns(uint40) -func (_CanonicalTransactionChain *CanonicalTransactionChainSession) GetLastTimestamp() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.GetLastTimestamp(&_CanonicalTransactionChain.CallOpts) -} - -// GetLastTimestamp is a free data retrieval call binding the contract method 0x37899770. -// -// Solidity: function getLastTimestamp() view returns(uint40) -func (_CanonicalTransactionChain *CanonicalTransactionChainCallerSession) GetLastTimestamp() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.GetLastTimestamp(&_CanonicalTransactionChain.CallOpts) -} - -// GetNextQueueIndex is a free data retrieval call binding the contract method 0x7a167a8a. -// -// Solidity: function getNextQueueIndex() view returns(uint40) -func (_CanonicalTransactionChain *CanonicalTransactionChainCaller) GetNextQueueIndex(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _CanonicalTransactionChain.contract.Call(opts, &out, "getNextQueueIndex") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetNextQueueIndex is a free data retrieval call binding the contract method 0x7a167a8a. -// -// Solidity: function getNextQueueIndex() view returns(uint40) -func (_CanonicalTransactionChain *CanonicalTransactionChainSession) GetNextQueueIndex() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.GetNextQueueIndex(&_CanonicalTransactionChain.CallOpts) -} - -// GetNextQueueIndex is a free data retrieval call binding the contract method 0x7a167a8a. -// -// Solidity: function getNextQueueIndex() view returns(uint40) -func (_CanonicalTransactionChain *CanonicalTransactionChainCallerSession) GetNextQueueIndex() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.GetNextQueueIndex(&_CanonicalTransactionChain.CallOpts) -} - -// GetNumPendingQueueElements is a free data retrieval call binding the contract method 0xf722b41a. -// -// Solidity: function getNumPendingQueueElements() view returns(uint40) -func (_CanonicalTransactionChain *CanonicalTransactionChainCaller) GetNumPendingQueueElements(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _CanonicalTransactionChain.contract.Call(opts, &out, "getNumPendingQueueElements") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetNumPendingQueueElements is a free data retrieval call binding the contract method 0xf722b41a. -// -// Solidity: function getNumPendingQueueElements() view returns(uint40) -func (_CanonicalTransactionChain *CanonicalTransactionChainSession) GetNumPendingQueueElements() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.GetNumPendingQueueElements(&_CanonicalTransactionChain.CallOpts) -} - -// GetNumPendingQueueElements is a free data retrieval call binding the contract method 0xf722b41a. -// -// Solidity: function getNumPendingQueueElements() view returns(uint40) -func (_CanonicalTransactionChain *CanonicalTransactionChainCallerSession) GetNumPendingQueueElements() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.GetNumPendingQueueElements(&_CanonicalTransactionChain.CallOpts) -} - -// GetQueueElement is a free data retrieval call binding the contract method 0x2a7f18be. -// -// Solidity: function getQueueElement(uint256 _index) view returns((bytes32,uint40,uint40) _element) -func (_CanonicalTransactionChain *CanonicalTransactionChainCaller) GetQueueElement(opts *bind.CallOpts, _index *big.Int) (LibOVMCodecQueueElement, error) { - var out []interface{} - err := _CanonicalTransactionChain.contract.Call(opts, &out, "getQueueElement", _index) - - if err != nil { - return *new(LibOVMCodecQueueElement), err - } - - out0 := *abi.ConvertType(out[0], new(LibOVMCodecQueueElement)).(*LibOVMCodecQueueElement) - - return out0, err - -} - -// GetQueueElement is a free data retrieval call binding the contract method 0x2a7f18be. -// -// Solidity: function getQueueElement(uint256 _index) view returns((bytes32,uint40,uint40) _element) -func (_CanonicalTransactionChain *CanonicalTransactionChainSession) GetQueueElement(_index *big.Int) (LibOVMCodecQueueElement, error) { - return _CanonicalTransactionChain.Contract.GetQueueElement(&_CanonicalTransactionChain.CallOpts, _index) -} - -// GetQueueElement is a free data retrieval call binding the contract method 0x2a7f18be. -// -// Solidity: function getQueueElement(uint256 _index) view returns((bytes32,uint40,uint40) _element) -func (_CanonicalTransactionChain *CanonicalTransactionChainCallerSession) GetQueueElement(_index *big.Int) (LibOVMCodecQueueElement, error) { - return _CanonicalTransactionChain.Contract.GetQueueElement(&_CanonicalTransactionChain.CallOpts, _index) -} - -// GetQueueLength is a free data retrieval call binding the contract method 0xb8f77005. -// -// Solidity: function getQueueLength() view returns(uint40) -func (_CanonicalTransactionChain *CanonicalTransactionChainCaller) GetQueueLength(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _CanonicalTransactionChain.contract.Call(opts, &out, "getQueueLength") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetQueueLength is a free data retrieval call binding the contract method 0xb8f77005. -// -// Solidity: function getQueueLength() view returns(uint40) -func (_CanonicalTransactionChain *CanonicalTransactionChainSession) GetQueueLength() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.GetQueueLength(&_CanonicalTransactionChain.CallOpts) -} - -// GetQueueLength is a free data retrieval call binding the contract method 0xb8f77005. -// -// Solidity: function getQueueLength() view returns(uint40) -func (_CanonicalTransactionChain *CanonicalTransactionChainCallerSession) GetQueueLength() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.GetQueueLength(&_CanonicalTransactionChain.CallOpts) -} - -// GetTotalBatches is a free data retrieval call binding the contract method 0xe561dddc. -// -// Solidity: function getTotalBatches() view returns(uint256 _totalBatches) -func (_CanonicalTransactionChain *CanonicalTransactionChainCaller) GetTotalBatches(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _CanonicalTransactionChain.contract.Call(opts, &out, "getTotalBatches") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetTotalBatches is a free data retrieval call binding the contract method 0xe561dddc. -// -// Solidity: function getTotalBatches() view returns(uint256 _totalBatches) -func (_CanonicalTransactionChain *CanonicalTransactionChainSession) GetTotalBatches() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.GetTotalBatches(&_CanonicalTransactionChain.CallOpts) -} - -// GetTotalBatches is a free data retrieval call binding the contract method 0xe561dddc. -// -// Solidity: function getTotalBatches() view returns(uint256 _totalBatches) -func (_CanonicalTransactionChain *CanonicalTransactionChainCallerSession) GetTotalBatches() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.GetTotalBatches(&_CanonicalTransactionChain.CallOpts) -} - -// GetTotalElements is a free data retrieval call binding the contract method 0x7aa63a86. -// -// Solidity: function getTotalElements() view returns(uint256 _totalElements) -func (_CanonicalTransactionChain *CanonicalTransactionChainCaller) GetTotalElements(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _CanonicalTransactionChain.contract.Call(opts, &out, "getTotalElements") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetTotalElements is a free data retrieval call binding the contract method 0x7aa63a86. -// -// Solidity: function getTotalElements() view returns(uint256 _totalElements) -func (_CanonicalTransactionChain *CanonicalTransactionChainSession) GetTotalElements() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.GetTotalElements(&_CanonicalTransactionChain.CallOpts) -} - -// GetTotalElements is a free data retrieval call binding the contract method 0x7aa63a86. -// -// Solidity: function getTotalElements() view returns(uint256 _totalElements) -func (_CanonicalTransactionChain *CanonicalTransactionChainCallerSession) GetTotalElements() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.GetTotalElements(&_CanonicalTransactionChain.CallOpts) -} - -// L2GasDiscountDivisor is a free data retrieval call binding the contract method 0xccf987c8. -// -// Solidity: function l2GasDiscountDivisor() view returns(uint256) -func (_CanonicalTransactionChain *CanonicalTransactionChainCaller) L2GasDiscountDivisor(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _CanonicalTransactionChain.contract.Call(opts, &out, "l2GasDiscountDivisor") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// L2GasDiscountDivisor is a free data retrieval call binding the contract method 0xccf987c8. -// -// Solidity: function l2GasDiscountDivisor() view returns(uint256) -func (_CanonicalTransactionChain *CanonicalTransactionChainSession) L2GasDiscountDivisor() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.L2GasDiscountDivisor(&_CanonicalTransactionChain.CallOpts) -} - -// L2GasDiscountDivisor is a free data retrieval call binding the contract method 0xccf987c8. -// -// Solidity: function l2GasDiscountDivisor() view returns(uint256) -func (_CanonicalTransactionChain *CanonicalTransactionChainCallerSession) L2GasDiscountDivisor() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.L2GasDiscountDivisor(&_CanonicalTransactionChain.CallOpts) -} - -// LibAddressManager is a free data retrieval call binding the contract method 0x299ca478. -// -// Solidity: function libAddressManager() view returns(address) -func (_CanonicalTransactionChain *CanonicalTransactionChainCaller) LibAddressManager(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _CanonicalTransactionChain.contract.Call(opts, &out, "libAddressManager") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// LibAddressManager is a free data retrieval call binding the contract method 0x299ca478. -// -// Solidity: function libAddressManager() view returns(address) -func (_CanonicalTransactionChain *CanonicalTransactionChainSession) LibAddressManager() (common.Address, error) { - return _CanonicalTransactionChain.Contract.LibAddressManager(&_CanonicalTransactionChain.CallOpts) -} - -// LibAddressManager is a free data retrieval call binding the contract method 0x299ca478. -// -// Solidity: function libAddressManager() view returns(address) -func (_CanonicalTransactionChain *CanonicalTransactionChainCallerSession) LibAddressManager() (common.Address, error) { - return _CanonicalTransactionChain.Contract.LibAddressManager(&_CanonicalTransactionChain.CallOpts) -} - -// MaxTransactionGasLimit is a free data retrieval call binding the contract method 0x8d38c6c1. -// -// Solidity: function maxTransactionGasLimit() view returns(uint256) -func (_CanonicalTransactionChain *CanonicalTransactionChainCaller) MaxTransactionGasLimit(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _CanonicalTransactionChain.contract.Call(opts, &out, "maxTransactionGasLimit") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// MaxTransactionGasLimit is a free data retrieval call binding the contract method 0x8d38c6c1. -// -// Solidity: function maxTransactionGasLimit() view returns(uint256) -func (_CanonicalTransactionChain *CanonicalTransactionChainSession) MaxTransactionGasLimit() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.MaxTransactionGasLimit(&_CanonicalTransactionChain.CallOpts) -} - -// MaxTransactionGasLimit is a free data retrieval call binding the contract method 0x8d38c6c1. -// -// Solidity: function maxTransactionGasLimit() view returns(uint256) -func (_CanonicalTransactionChain *CanonicalTransactionChainCallerSession) MaxTransactionGasLimit() (*big.Int, error) { - return _CanonicalTransactionChain.Contract.MaxTransactionGasLimit(&_CanonicalTransactionChain.CallOpts) -} - -// Resolve is a free data retrieval call binding the contract method 0x461a4478. -// -// Solidity: function resolve(string _name) view returns(address) -func (_CanonicalTransactionChain *CanonicalTransactionChainCaller) Resolve(opts *bind.CallOpts, _name string) (common.Address, error) { - var out []interface{} - err := _CanonicalTransactionChain.contract.Call(opts, &out, "resolve", _name) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Resolve is a free data retrieval call binding the contract method 0x461a4478. -// -// Solidity: function resolve(string _name) view returns(address) -func (_CanonicalTransactionChain *CanonicalTransactionChainSession) Resolve(_name string) (common.Address, error) { - return _CanonicalTransactionChain.Contract.Resolve(&_CanonicalTransactionChain.CallOpts, _name) -} - -// Resolve is a free data retrieval call binding the contract method 0x461a4478. -// -// Solidity: function resolve(string _name) view returns(address) -func (_CanonicalTransactionChain *CanonicalTransactionChainCallerSession) Resolve(_name string) (common.Address, error) { - return _CanonicalTransactionChain.Contract.Resolve(&_CanonicalTransactionChain.CallOpts, _name) -} - -// AppendSequencerBatch is a paid mutator transaction binding the contract method 0xd0f89344. -// -// Solidity: function appendSequencerBatch() returns() -func (_CanonicalTransactionChain *CanonicalTransactionChainTransactor) AppendSequencerBatch(opts *bind.TransactOpts) (*types.Transaction, error) { - return _CanonicalTransactionChain.contract.Transact(opts, "appendSequencerBatch") -} - -// AppendSequencerBatch is a paid mutator transaction binding the contract method 0xd0f89344. -// -// Solidity: function appendSequencerBatch() returns() -func (_CanonicalTransactionChain *CanonicalTransactionChainSession) AppendSequencerBatch() (*types.Transaction, error) { - return _CanonicalTransactionChain.Contract.AppendSequencerBatch(&_CanonicalTransactionChain.TransactOpts) -} - -// AppendSequencerBatch is a paid mutator transaction binding the contract method 0xd0f89344. -// -// Solidity: function appendSequencerBatch() returns() -func (_CanonicalTransactionChain *CanonicalTransactionChainTransactorSession) AppendSequencerBatch() (*types.Transaction, error) { - return _CanonicalTransactionChain.Contract.AppendSequencerBatch(&_CanonicalTransactionChain.TransactOpts) -} - -// Enqueue is a paid mutator transaction binding the contract method 0x6fee07e0. -// -// Solidity: function enqueue(address _target, uint256 _gasLimit, bytes _data) returns() -func (_CanonicalTransactionChain *CanonicalTransactionChainTransactor) Enqueue(opts *bind.TransactOpts, _target common.Address, _gasLimit *big.Int, _data []byte) (*types.Transaction, error) { - return _CanonicalTransactionChain.contract.Transact(opts, "enqueue", _target, _gasLimit, _data) -} - -// Enqueue is a paid mutator transaction binding the contract method 0x6fee07e0. -// -// Solidity: function enqueue(address _target, uint256 _gasLimit, bytes _data) returns() -func (_CanonicalTransactionChain *CanonicalTransactionChainSession) Enqueue(_target common.Address, _gasLimit *big.Int, _data []byte) (*types.Transaction, error) { - return _CanonicalTransactionChain.Contract.Enqueue(&_CanonicalTransactionChain.TransactOpts, _target, _gasLimit, _data) -} - -// Enqueue is a paid mutator transaction binding the contract method 0x6fee07e0. -// -// Solidity: function enqueue(address _target, uint256 _gasLimit, bytes _data) returns() -func (_CanonicalTransactionChain *CanonicalTransactionChainTransactorSession) Enqueue(_target common.Address, _gasLimit *big.Int, _data []byte) (*types.Transaction, error) { - return _CanonicalTransactionChain.Contract.Enqueue(&_CanonicalTransactionChain.TransactOpts, _target, _gasLimit, _data) -} - -// SetGasParams is a paid mutator transaction binding the contract method 0xedcc4a45. -// -// Solidity: function setGasParams(uint256 _l2GasDiscountDivisor, uint256 _enqueueGasCost) returns() -func (_CanonicalTransactionChain *CanonicalTransactionChainTransactor) SetGasParams(opts *bind.TransactOpts, _l2GasDiscountDivisor *big.Int, _enqueueGasCost *big.Int) (*types.Transaction, error) { - return _CanonicalTransactionChain.contract.Transact(opts, "setGasParams", _l2GasDiscountDivisor, _enqueueGasCost) -} - -// SetGasParams is a paid mutator transaction binding the contract method 0xedcc4a45. -// -// Solidity: function setGasParams(uint256 _l2GasDiscountDivisor, uint256 _enqueueGasCost) returns() -func (_CanonicalTransactionChain *CanonicalTransactionChainSession) SetGasParams(_l2GasDiscountDivisor *big.Int, _enqueueGasCost *big.Int) (*types.Transaction, error) { - return _CanonicalTransactionChain.Contract.SetGasParams(&_CanonicalTransactionChain.TransactOpts, _l2GasDiscountDivisor, _enqueueGasCost) -} - -// SetGasParams is a paid mutator transaction binding the contract method 0xedcc4a45. -// -// Solidity: function setGasParams(uint256 _l2GasDiscountDivisor, uint256 _enqueueGasCost) returns() -func (_CanonicalTransactionChain *CanonicalTransactionChainTransactorSession) SetGasParams(_l2GasDiscountDivisor *big.Int, _enqueueGasCost *big.Int) (*types.Transaction, error) { - return _CanonicalTransactionChain.Contract.SetGasParams(&_CanonicalTransactionChain.TransactOpts, _l2GasDiscountDivisor, _enqueueGasCost) -} - -// CanonicalTransactionChainL2GasParamsUpdatedIterator is returned from FilterL2GasParamsUpdated and is used to iterate over the raw logs and unpacked data for L2GasParamsUpdated events raised by the CanonicalTransactionChain contract. -type CanonicalTransactionChainL2GasParamsUpdatedIterator struct { - Event *CanonicalTransactionChainL2GasParamsUpdated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *CanonicalTransactionChainL2GasParamsUpdatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(CanonicalTransactionChainL2GasParamsUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(CanonicalTransactionChainL2GasParamsUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *CanonicalTransactionChainL2GasParamsUpdatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *CanonicalTransactionChainL2GasParamsUpdatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// CanonicalTransactionChainL2GasParamsUpdated represents a L2GasParamsUpdated event raised by the CanonicalTransactionChain contract. -type CanonicalTransactionChainL2GasParamsUpdated struct { - L2GasDiscountDivisor *big.Int - EnqueueGasCost *big.Int - EnqueueL2GasPrepaid *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterL2GasParamsUpdated is a free log retrieval operation binding the contract event 0xc6ed75e96b8b18b71edc1a6e82a9d677f8268c774a262c624eeb2cf0a8b3e07e. -// -// Solidity: event L2GasParamsUpdated(uint256 l2GasDiscountDivisor, uint256 enqueueGasCost, uint256 enqueueL2GasPrepaid) -func (_CanonicalTransactionChain *CanonicalTransactionChainFilterer) FilterL2GasParamsUpdated(opts *bind.FilterOpts) (*CanonicalTransactionChainL2GasParamsUpdatedIterator, error) { - - logs, sub, err := _CanonicalTransactionChain.contract.FilterLogs(opts, "L2GasParamsUpdated") - if err != nil { - return nil, err - } - return &CanonicalTransactionChainL2GasParamsUpdatedIterator{contract: _CanonicalTransactionChain.contract, event: "L2GasParamsUpdated", logs: logs, sub: sub}, nil -} - -// WatchL2GasParamsUpdated is a free log subscription operation binding the contract event 0xc6ed75e96b8b18b71edc1a6e82a9d677f8268c774a262c624eeb2cf0a8b3e07e. -// -// Solidity: event L2GasParamsUpdated(uint256 l2GasDiscountDivisor, uint256 enqueueGasCost, uint256 enqueueL2GasPrepaid) -func (_CanonicalTransactionChain *CanonicalTransactionChainFilterer) WatchL2GasParamsUpdated(opts *bind.WatchOpts, sink chan<- *CanonicalTransactionChainL2GasParamsUpdated) (event.Subscription, error) { - - logs, sub, err := _CanonicalTransactionChain.contract.WatchLogs(opts, "L2GasParamsUpdated") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(CanonicalTransactionChainL2GasParamsUpdated) - if err := _CanonicalTransactionChain.contract.UnpackLog(event, "L2GasParamsUpdated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseL2GasParamsUpdated is a log parse operation binding the contract event 0xc6ed75e96b8b18b71edc1a6e82a9d677f8268c774a262c624eeb2cf0a8b3e07e. -// -// Solidity: event L2GasParamsUpdated(uint256 l2GasDiscountDivisor, uint256 enqueueGasCost, uint256 enqueueL2GasPrepaid) -func (_CanonicalTransactionChain *CanonicalTransactionChainFilterer) ParseL2GasParamsUpdated(log types.Log) (*CanonicalTransactionChainL2GasParamsUpdated, error) { - event := new(CanonicalTransactionChainL2GasParamsUpdated) - if err := _CanonicalTransactionChain.contract.UnpackLog(event, "L2GasParamsUpdated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// CanonicalTransactionChainQueueBatchAppendedIterator is returned from FilterQueueBatchAppended and is used to iterate over the raw logs and unpacked data for QueueBatchAppended events raised by the CanonicalTransactionChain contract. -type CanonicalTransactionChainQueueBatchAppendedIterator struct { - Event *CanonicalTransactionChainQueueBatchAppended // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *CanonicalTransactionChainQueueBatchAppendedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(CanonicalTransactionChainQueueBatchAppended) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(CanonicalTransactionChainQueueBatchAppended) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *CanonicalTransactionChainQueueBatchAppendedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *CanonicalTransactionChainQueueBatchAppendedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// CanonicalTransactionChainQueueBatchAppended represents a QueueBatchAppended event raised by the CanonicalTransactionChain contract. -type CanonicalTransactionChainQueueBatchAppended struct { - StartingQueueIndex *big.Int - NumQueueElements *big.Int - TotalElements *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterQueueBatchAppended is a free log retrieval operation binding the contract event 0x64d7f508348c70dea42d5302a393987e4abc20e45954ab3f9d320207751956f0. -// -// Solidity: event QueueBatchAppended(uint256 _startingQueueIndex, uint256 _numQueueElements, uint256 _totalElements) -func (_CanonicalTransactionChain *CanonicalTransactionChainFilterer) FilterQueueBatchAppended(opts *bind.FilterOpts) (*CanonicalTransactionChainQueueBatchAppendedIterator, error) { - - logs, sub, err := _CanonicalTransactionChain.contract.FilterLogs(opts, "QueueBatchAppended") - if err != nil { - return nil, err - } - return &CanonicalTransactionChainQueueBatchAppendedIterator{contract: _CanonicalTransactionChain.contract, event: "QueueBatchAppended", logs: logs, sub: sub}, nil -} - -// WatchQueueBatchAppended is a free log subscription operation binding the contract event 0x64d7f508348c70dea42d5302a393987e4abc20e45954ab3f9d320207751956f0. -// -// Solidity: event QueueBatchAppended(uint256 _startingQueueIndex, uint256 _numQueueElements, uint256 _totalElements) -func (_CanonicalTransactionChain *CanonicalTransactionChainFilterer) WatchQueueBatchAppended(opts *bind.WatchOpts, sink chan<- *CanonicalTransactionChainQueueBatchAppended) (event.Subscription, error) { - - logs, sub, err := _CanonicalTransactionChain.contract.WatchLogs(opts, "QueueBatchAppended") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(CanonicalTransactionChainQueueBatchAppended) - if err := _CanonicalTransactionChain.contract.UnpackLog(event, "QueueBatchAppended", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseQueueBatchAppended is a log parse operation binding the contract event 0x64d7f508348c70dea42d5302a393987e4abc20e45954ab3f9d320207751956f0. -// -// Solidity: event QueueBatchAppended(uint256 _startingQueueIndex, uint256 _numQueueElements, uint256 _totalElements) -func (_CanonicalTransactionChain *CanonicalTransactionChainFilterer) ParseQueueBatchAppended(log types.Log) (*CanonicalTransactionChainQueueBatchAppended, error) { - event := new(CanonicalTransactionChainQueueBatchAppended) - if err := _CanonicalTransactionChain.contract.UnpackLog(event, "QueueBatchAppended", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// CanonicalTransactionChainSequencerBatchAppendedIterator is returned from FilterSequencerBatchAppended and is used to iterate over the raw logs and unpacked data for SequencerBatchAppended events raised by the CanonicalTransactionChain contract. -type CanonicalTransactionChainSequencerBatchAppendedIterator struct { - Event *CanonicalTransactionChainSequencerBatchAppended // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *CanonicalTransactionChainSequencerBatchAppendedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(CanonicalTransactionChainSequencerBatchAppended) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(CanonicalTransactionChainSequencerBatchAppended) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *CanonicalTransactionChainSequencerBatchAppendedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *CanonicalTransactionChainSequencerBatchAppendedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// CanonicalTransactionChainSequencerBatchAppended represents a SequencerBatchAppended event raised by the CanonicalTransactionChain contract. -type CanonicalTransactionChainSequencerBatchAppended struct { - StartingQueueIndex *big.Int - NumQueueElements *big.Int - TotalElements *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSequencerBatchAppended is a free log retrieval operation binding the contract event 0x602f1aeac0ca2e7a13e281a9ef0ad7838542712ce16780fa2ecffd351f05f899. -// -// Solidity: event SequencerBatchAppended(uint256 _startingQueueIndex, uint256 _numQueueElements, uint256 _totalElements) -func (_CanonicalTransactionChain *CanonicalTransactionChainFilterer) FilterSequencerBatchAppended(opts *bind.FilterOpts) (*CanonicalTransactionChainSequencerBatchAppendedIterator, error) { - - logs, sub, err := _CanonicalTransactionChain.contract.FilterLogs(opts, "SequencerBatchAppended") - if err != nil { - return nil, err - } - return &CanonicalTransactionChainSequencerBatchAppendedIterator{contract: _CanonicalTransactionChain.contract, event: "SequencerBatchAppended", logs: logs, sub: sub}, nil -} - -// WatchSequencerBatchAppended is a free log subscription operation binding the contract event 0x602f1aeac0ca2e7a13e281a9ef0ad7838542712ce16780fa2ecffd351f05f899. -// -// Solidity: event SequencerBatchAppended(uint256 _startingQueueIndex, uint256 _numQueueElements, uint256 _totalElements) -func (_CanonicalTransactionChain *CanonicalTransactionChainFilterer) WatchSequencerBatchAppended(opts *bind.WatchOpts, sink chan<- *CanonicalTransactionChainSequencerBatchAppended) (event.Subscription, error) { - - logs, sub, err := _CanonicalTransactionChain.contract.WatchLogs(opts, "SequencerBatchAppended") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(CanonicalTransactionChainSequencerBatchAppended) - if err := _CanonicalTransactionChain.contract.UnpackLog(event, "SequencerBatchAppended", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSequencerBatchAppended is a log parse operation binding the contract event 0x602f1aeac0ca2e7a13e281a9ef0ad7838542712ce16780fa2ecffd351f05f899. -// -// Solidity: event SequencerBatchAppended(uint256 _startingQueueIndex, uint256 _numQueueElements, uint256 _totalElements) -func (_CanonicalTransactionChain *CanonicalTransactionChainFilterer) ParseSequencerBatchAppended(log types.Log) (*CanonicalTransactionChainSequencerBatchAppended, error) { - event := new(CanonicalTransactionChainSequencerBatchAppended) - if err := _CanonicalTransactionChain.contract.UnpackLog(event, "SequencerBatchAppended", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// CanonicalTransactionChainTransactionBatchAppendedIterator is returned from FilterTransactionBatchAppended and is used to iterate over the raw logs and unpacked data for TransactionBatchAppended events raised by the CanonicalTransactionChain contract. -type CanonicalTransactionChainTransactionBatchAppendedIterator struct { - Event *CanonicalTransactionChainTransactionBatchAppended // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *CanonicalTransactionChainTransactionBatchAppendedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(CanonicalTransactionChainTransactionBatchAppended) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(CanonicalTransactionChainTransactionBatchAppended) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *CanonicalTransactionChainTransactionBatchAppendedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *CanonicalTransactionChainTransactionBatchAppendedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// CanonicalTransactionChainTransactionBatchAppended represents a TransactionBatchAppended event raised by the CanonicalTransactionChain contract. -type CanonicalTransactionChainTransactionBatchAppended struct { - BatchIndex *big.Int - BatchRoot [32]byte - BatchSize *big.Int - PrevTotalElements *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterTransactionBatchAppended is a free log retrieval operation binding the contract event 0x127186556e7be68c7e31263195225b4de02820707889540969f62c05cf73525e. -// -// Solidity: event TransactionBatchAppended(uint256 indexed _batchIndex, bytes32 _batchRoot, uint256 _batchSize, uint256 _prevTotalElements, bytes _extraData) -func (_CanonicalTransactionChain *CanonicalTransactionChainFilterer) FilterTransactionBatchAppended(opts *bind.FilterOpts, _batchIndex []*big.Int) (*CanonicalTransactionChainTransactionBatchAppendedIterator, error) { - - var _batchIndexRule []interface{} - for _, _batchIndexItem := range _batchIndex { - _batchIndexRule = append(_batchIndexRule, _batchIndexItem) - } - - logs, sub, err := _CanonicalTransactionChain.contract.FilterLogs(opts, "TransactionBatchAppended", _batchIndexRule) - if err != nil { - return nil, err - } - return &CanonicalTransactionChainTransactionBatchAppendedIterator{contract: _CanonicalTransactionChain.contract, event: "TransactionBatchAppended", logs: logs, sub: sub}, nil -} - -// WatchTransactionBatchAppended is a free log subscription operation binding the contract event 0x127186556e7be68c7e31263195225b4de02820707889540969f62c05cf73525e. -// -// Solidity: event TransactionBatchAppended(uint256 indexed _batchIndex, bytes32 _batchRoot, uint256 _batchSize, uint256 _prevTotalElements, bytes _extraData) -func (_CanonicalTransactionChain *CanonicalTransactionChainFilterer) WatchTransactionBatchAppended(opts *bind.WatchOpts, sink chan<- *CanonicalTransactionChainTransactionBatchAppended, _batchIndex []*big.Int) (event.Subscription, error) { - - var _batchIndexRule []interface{} - for _, _batchIndexItem := range _batchIndex { - _batchIndexRule = append(_batchIndexRule, _batchIndexItem) - } - - logs, sub, err := _CanonicalTransactionChain.contract.WatchLogs(opts, "TransactionBatchAppended", _batchIndexRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(CanonicalTransactionChainTransactionBatchAppended) - if err := _CanonicalTransactionChain.contract.UnpackLog(event, "TransactionBatchAppended", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseTransactionBatchAppended is a log parse operation binding the contract event 0x127186556e7be68c7e31263195225b4de02820707889540969f62c05cf73525e. -// -// Solidity: event TransactionBatchAppended(uint256 indexed _batchIndex, bytes32 _batchRoot, uint256 _batchSize, uint256 _prevTotalElements, bytes _extraData) -func (_CanonicalTransactionChain *CanonicalTransactionChainFilterer) ParseTransactionBatchAppended(log types.Log) (*CanonicalTransactionChainTransactionBatchAppended, error) { - event := new(CanonicalTransactionChainTransactionBatchAppended) - if err := _CanonicalTransactionChain.contract.UnpackLog(event, "TransactionBatchAppended", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// CanonicalTransactionChainTransactionEnqueuedIterator is returned from FilterTransactionEnqueued and is used to iterate over the raw logs and unpacked data for TransactionEnqueued events raised by the CanonicalTransactionChain contract. -type CanonicalTransactionChainTransactionEnqueuedIterator struct { - Event *CanonicalTransactionChainTransactionEnqueued // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *CanonicalTransactionChainTransactionEnqueuedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(CanonicalTransactionChainTransactionEnqueued) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(CanonicalTransactionChainTransactionEnqueued) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *CanonicalTransactionChainTransactionEnqueuedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *CanonicalTransactionChainTransactionEnqueuedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// CanonicalTransactionChainTransactionEnqueued represents a TransactionEnqueued event raised by the CanonicalTransactionChain contract. -type CanonicalTransactionChainTransactionEnqueued struct { - L1TxOrigin common.Address - Target common.Address - GasLimit *big.Int - Data []byte - QueueIndex *big.Int - Timestamp *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterTransactionEnqueued is a free log retrieval operation binding the contract event 0x4b388aecf9fa6cc92253704e5975a6129a4f735bdbd99567df4ed0094ee4ceb5. -// -// Solidity: event TransactionEnqueued(address indexed _l1TxOrigin, address indexed _target, uint256 _gasLimit, bytes _data, uint256 indexed _queueIndex, uint256 _timestamp) -func (_CanonicalTransactionChain *CanonicalTransactionChainFilterer) FilterTransactionEnqueued(opts *bind.FilterOpts, _l1TxOrigin []common.Address, _target []common.Address, _queueIndex []*big.Int) (*CanonicalTransactionChainTransactionEnqueuedIterator, error) { - - var _l1TxOriginRule []interface{} - for _, _l1TxOriginItem := range _l1TxOrigin { - _l1TxOriginRule = append(_l1TxOriginRule, _l1TxOriginItem) - } - var _targetRule []interface{} - for _, _targetItem := range _target { - _targetRule = append(_targetRule, _targetItem) - } - - var _queueIndexRule []interface{} - for _, _queueIndexItem := range _queueIndex { - _queueIndexRule = append(_queueIndexRule, _queueIndexItem) - } - - logs, sub, err := _CanonicalTransactionChain.contract.FilterLogs(opts, "TransactionEnqueued", _l1TxOriginRule, _targetRule, _queueIndexRule) - if err != nil { - return nil, err - } - return &CanonicalTransactionChainTransactionEnqueuedIterator{contract: _CanonicalTransactionChain.contract, event: "TransactionEnqueued", logs: logs, sub: sub}, nil -} - -// WatchTransactionEnqueued is a free log subscription operation binding the contract event 0x4b388aecf9fa6cc92253704e5975a6129a4f735bdbd99567df4ed0094ee4ceb5. -// -// Solidity: event TransactionEnqueued(address indexed _l1TxOrigin, address indexed _target, uint256 _gasLimit, bytes _data, uint256 indexed _queueIndex, uint256 _timestamp) -func (_CanonicalTransactionChain *CanonicalTransactionChainFilterer) WatchTransactionEnqueued(opts *bind.WatchOpts, sink chan<- *CanonicalTransactionChainTransactionEnqueued, _l1TxOrigin []common.Address, _target []common.Address, _queueIndex []*big.Int) (event.Subscription, error) { - - var _l1TxOriginRule []interface{} - for _, _l1TxOriginItem := range _l1TxOrigin { - _l1TxOriginRule = append(_l1TxOriginRule, _l1TxOriginItem) - } - var _targetRule []interface{} - for _, _targetItem := range _target { - _targetRule = append(_targetRule, _targetItem) - } - - var _queueIndexRule []interface{} - for _, _queueIndexItem := range _queueIndex { - _queueIndexRule = append(_queueIndexRule, _queueIndexItem) - } - - logs, sub, err := _CanonicalTransactionChain.contract.WatchLogs(opts, "TransactionEnqueued", _l1TxOriginRule, _targetRule, _queueIndexRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(CanonicalTransactionChainTransactionEnqueued) - if err := _CanonicalTransactionChain.contract.UnpackLog(event, "TransactionEnqueued", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseTransactionEnqueued is a log parse operation binding the contract event 0x4b388aecf9fa6cc92253704e5975a6129a4f735bdbd99567df4ed0094ee4ceb5. -// -// Solidity: event TransactionEnqueued(address indexed _l1TxOrigin, address indexed _target, uint256 _gasLimit, bytes _data, uint256 indexed _queueIndex, uint256 _timestamp) -func (_CanonicalTransactionChain *CanonicalTransactionChainFilterer) ParseTransactionEnqueued(log types.Log) (*CanonicalTransactionChainTransactionEnqueued, error) { - event := new(CanonicalTransactionChainTransactionEnqueued) - if err := _CanonicalTransactionChain.contract.UnpackLog(event, "TransactionEnqueued", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/indexer/bindings/StateCommitmentChain.go b/indexer/bindings/StateCommitmentChain.go deleted file mode 100644 index 51e19e3a01d5..000000000000 --- a/indexer/bindings/StateCommitmentChain.go +++ /dev/null @@ -1,862 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindings - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// LibOVMCodecChainBatchHeader is an auto generated low-level Go binding around an user-defined struct. -type LibOVMCodecChainBatchHeader struct { - BatchIndex *big.Int - BatchRoot [32]byte - BatchSize *big.Int - PrevTotalElements *big.Int - ExtraData []byte -} - -// LibOVMCodecChainInclusionProof is an auto generated low-level Go binding around an user-defined struct. -type LibOVMCodecChainInclusionProof struct { - Index *big.Int - Siblings [][32]byte -} - -// StateCommitmentChainMetaData contains all meta data concerning the StateCommitmentChain contract. -var StateCommitmentChainMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_libAddressManager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_fraudProofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_sequencerPublishWindow\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_batchRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_batchSize\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_prevTotalElements\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"StateBatchAppended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_batchRoot\",\"type\":\"bytes32\"}],\"name\":\"StateBatchDeleted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"FRAUD_PROOF_WINDOW\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEQUENCER_PUBLISH_WINDOW\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_batch\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"_shouldStartAtElement\",\"type\":\"uint256\"}],\"name\":\"appendStateBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batches\",\"outputs\":[{\"internalType\":\"contractIChainStorageContainer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"batchRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"batchSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevTotalElements\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"structLib_OVMCodec.ChainBatchHeader\",\"name\":\"_batchHeader\",\"type\":\"tuple\"}],\"name\":\"deleteStateBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastSequencerTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_lastSequencerTimestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalBatches\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalBatches\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalElements\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalElements\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"batchRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"batchSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevTotalElements\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"structLib_OVMCodec.ChainBatchHeader\",\"name\":\"_batchHeader\",\"type\":\"tuple\"}],\"name\":\"insideFraudProofWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_inside\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"libAddressManager\",\"outputs\":[{\"internalType\":\"contractLib_AddressManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_element\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"batchRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"batchSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevTotalElements\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"structLib_OVMCodec.ChainBatchHeader\",\"name\":\"_batchHeader\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"siblings\",\"type\":\"bytes32[]\"}],\"internalType\":\"structLib_OVMCodec.ChainInclusionProof\",\"name\":\"_proof\",\"type\":\"tuple\"}],\"name\":\"verifyStateCommitment\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506040516120bb3803806120bb83398101604081905261002f9161005b565b600080546001600160a01b0319166001600160a01b03949094169390931790925560015560025561009e565b60008060006060848603121561007057600080fd5b83516001600160a01b038116811461008757600080fd5b602085015160409095015190969495509392505050565b61200e806100ad6000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80638ca5cbb911610081578063c17b291b1161005b578063c17b291b146101bb578063cfdf677e146101c4578063e561dddc146101cc57600080fd5b80638ca5cbb9146101805780639418bddd14610195578063b8e189ac146101a857600080fd5b80637aa63a86116100b25780637aa63a86146101595780637ad168a01461016f57806381eb62ef1461017757600080fd5b8063299ca478146100d9578063461a4478146101235780634d69ee5714610136575b600080fd5b6000546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100f9610131366004611a1b565b6101d4565b610149610144366004611b8d565b610281565b604051901515815260200161011a565b610161610350565b60405190815260200161011a565b610161610369565b61016160025481565b61019361018e366004611c4a565b610382565b005b6101496101a3366004611c8f565b61075c565b6101936101b6366004611c8f565b610804565b61016160015481565b6100f96109c0565b6101616109e8565b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061022b908590600401611d2f565b60206040518083038186803b15801561024357600080fd5b505afa158015610257573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027b9190611d64565b92915050565b600061028c83610a6f565b6102dd5760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e000000000000000000000060448201526064015b60405180910390fd5b6102fa836020015185846000015185602001518760400151610b31565b6103465760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420696e636c7573696f6e2070726f6f662e000000000000000060448201526064016102d4565b5060019392505050565b60008061035b610d9f565b5064ffffffffff1692915050565b600080610374610d9f565b64ffffffffff169392505050565b61038a610350565b81146103fe5760405162461bcd60e51b815260206004820152603d60248201527f41637475616c20626174636820737461727420696e64657820646f6573206e6f60448201527f74206d6174636820657870656374656420737461727420696e6465782e00000060648201526084016102d4565b61043c6040518060400160405280600b81526020017f426f6e644d616e616765720000000000000000000000000000000000000000008152506101d4565b6040517f02ad4d2a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff91909116906302ad4d2a9060240160206040518083038186803b1580156104a357600080fd5b505afa1580156104b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104db9190611d81565b61054d5760405162461bcd60e51b815260206004820152602f60248201527f50726f706f73657220646f6573206e6f74206861766520656e6f75676820636f60448201527f6c6c61746572616c20706f73746564000000000000000000000000000000000060648201526084016102d4565b60008251116105c45760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74207375626d697420616e20656d7074792073746174652062617460448201527f63682e000000000000000000000000000000000000000000000000000000000060648201526084016102d4565b6106026040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e000000000000008152506101d4565b73ffffffffffffffffffffffffffffffffffffffff16637aa63a866040518163ffffffff1660e01b815260040160206040518083038186803b15801561064757600080fd5b505afa15801561065b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067f9190611da3565b8251610689610350565b6106939190611deb565b111561072d5760405162461bcd60e51b815260206004820152604960248201527f4e756d626572206f6620737461746520726f6f74732063616e6e6f742065786360448201527f65656420746865206e756d626572206f662063616e6f6e6963616c207472616e60648201527f73616374696f6e732e0000000000000000000000000000000000000000000000608482015260a4016102d4565b6040805142602082015233818301528151808203830181526060909101909152610758908390610e43565b5050565b60008082608001518060200190518101906107779190611e03565b509050806107ed5760405162461bcd60e51b815260206004820152602560248201527f4261746368206865616465722074696d657374616d702063616e6e6f7420626560448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016102d4565b42600154826107fc9190611deb565b119392505050565b6108426040518060400160405280601181526020017f4f564d5f467261756456657269666965720000000000000000000000000000008152506101d4565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e25760405162461bcd60e51b815260206004820152603b60248201527f537461746520626174636865732063616e206f6e6c792062652064656c65746560448201527f6420627920746865204f564d5f467261756456657269666965722e000000000060648201526084016102d4565b6108eb81610a6f565b6109375760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e000000000000000000000060448201526064016102d4565b6109408161075c565b6109b4576040805162461bcd60e51b81526020600482015260248101919091527f537461746520626174636865732063616e206f6e6c792062652064656c65746560448201527f642077697468696e207468652066726175642070726f6f662077696e646f772e60648201526084016102d4565b6109bd816110e6565b50565b60006109e3604051806060016040528060218152602001611fb8602191396101d4565b905090565b60006109f26109c0565b73ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b158015610a3757600080fd5b505afa158015610a4b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e39190611da3565b6000610a796109c0565b82516040517f9507d39a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9290921691639507d39a91610ad19160040190815260200190565b60206040518083038186803b158015610ae957600080fd5b505afa158015610afd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b219190611da3565b610b2a83611317565b1492915050565b6000808211610ba85760405162461bcd60e51b815260206004820152603760248201527f4c69625f4d65726b6c65547265653a20546f74616c206c6561766573206d757360448201527f742062652067726561746572207468616e207a65726f2e00000000000000000060648201526084016102d4565b818410610c1c5760405162461bcd60e51b8152602060048201526024808201527f4c69625f4d65726b6c65547265653a20496e646578206f7574206f6620626f7560448201527f6e64732e0000000000000000000000000000000000000000000000000000000060648201526084016102d4565b610c258261135d565b835114610cc05760405162461bcd60e51b815260206004820152604d60248201527f4c69625f4d65726b6c65547265653a20546f74616c207369626c696e6773206460448201527f6f6573206e6f7420636f72726563746c7920636f72726573706f6e6420746f2060648201527f746f74616c206c65617665732e00000000000000000000000000000000000000608482015260a4016102d4565b8460005b8451811015610d92578560011660011415610d2b57848181518110610ceb57610ceb611e33565b602002602001015182604051602001610d0e929190918252602082015260400190565b604051602081830303815290604052805190602001209150610d79565b81858281518110610d3e57610d3e611e33565b6020026020010151604051602001610d60929190918252602082015260400190565b6040516020818303038152906040528051906020012091505b60019590951c9480610d8a81611e62565b915050610cc4565b5090951495945050505050565b6000806000610dac6109c0565b73ffffffffffffffffffffffffffffffffffffffff1663ccf8f9696040518163ffffffff1660e01b815260040160206040518083038186803b158015610df157600080fd5b505afa158015610e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e299190611e9b565b64ffffffffff602882901c169460509190911c9350915050565b6000610e836040518060400160405280600c81526020017f4f564d5f50726f706f73657200000000000000000000000000000000000000008152506101d4565b9050600080610e90610d9f565b90925090503373ffffffffffffffffffffffffffffffffffffffff84161415610eba575042610f69565b426002548264ffffffffff16610ed09190611deb565b10610f695760405162461bcd60e51b815260206004820152604360248201527f43616e6e6f74207075626c69736820737461746520726f6f747320776974686960448201527f6e207468652073657175656e636572207075626c69636174696f6e2077696e6460648201527f6f772e0000000000000000000000000000000000000000000000000000000000608482015260a4016102d4565b60006040518060a00160405280610f7e6109e8565b8152602001610f8c88611443565b8152602001875181526020018464ffffffffff16815260200186815250905080600001517f16be4c5129a4e03cf3350262e181dc02ddfb4a6008d925368c0899fcd97ca9c58260200151836040015184606001518560800151604051610ff59493929190611edd565b60405180910390a26110056109c0565b73ffffffffffffffffffffffffffffffffffffffff16632015276c61102983611317565b61104e846040015185606001516110409190611deb565b602887811b91909117901b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092527fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000166024820152604401600060405180830381600087803b1580156110c657600080fd5b505af11580156110da573d6000803e3d6000fd5b50505050505050505050565b6110ee6109c0565b73ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b15801561113357600080fd5b505afa158015611147573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116b9190611da3565b8151106111ba5760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420626174636820696e6465782e00000000000000000000000060448201526064016102d4565b6111c381610a6f565b61120f5760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206261746368206865616465722e000000000000000000000060448201526064016102d4565b6112176109c0565b8151606083015173ffffffffffffffffffffffffffffffffffffffff929092169163167fd681919060281b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092527fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000166024820152604401600060405180830381600087803b1580156112ba57600080fd5b505af11580156112ce573d6000803e3d6000fd5b5050505080600001517f8747b69ce8fdb31c3b9b0a67bd8049ad8c1a69ea417b69b12174068abd9cbd64826020015160405161130c91815260200190565b60405180910390a250565b600081602001518260400151836060015184608001516040516020016113409493929190611edd565b604051602081830303815290604052805190602001209050919050565b60008082116113d45760405162461bcd60e51b815260206004820152603060248201527f4c69625f4d65726b6c65547265653a2043616e6e6f7420636f6d70757465206360448201527f65696c286c6f675f3229206f6620302e0000000000000000000000000000000060648201526084016102d4565b81600114156113e557506000919050565b81600060805b600181106114235780611401600180831b611f0c565b901b83161561141b576114148183611deb565b92811c9291505b60011c6113eb565b506001811b841461143c57611439600182611deb565b90505b9392505050565b6000808251116114bb5760405162461bcd60e51b815260206004820152603460248201527f4c69625f4d65726b6c65547265653a204d7573742070726f766964652061742060448201527f6c65617374206f6e65206c65616620686173682e00000000000000000000000060648201526084016102d4565b8151600114156114e757816000815181106114d8576114d8611e33565b60200260200101519050919050565b60408051610200810182527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56381527f633dc4d7da7256660a892f8f1604a44b5432649cc8ec5cb3ced4c4e6ac94dd1d60208201527f890740a8eb06ce9be422cb8da5cdafc2b58c0a5e24036c578de2a433c828ff7d818301527f3b8ec09e026fdc305365dfc94e189a81b38c7597b3d941c279f042e8206e0bd86060808301919091527fecd50eee38e386bd62be9bedb990706951b65fe053bd9d8a521af753d139e2da60808301527fdefff6d330bb5403f63b14f33b578274160de3a50df4efecf0e0db73bcdd3da560a08301527f617bdd11f7c0a11f49db22f629387a12da7596f9d1704d7465177c63d88ec7d760c08301527f292c23a9aa1d8bea7e2435e555a4a60e379a5a35f3f452bae60121073fb6eead60e08301527fe1cea92ed99acdcb045a6726b2f87107e8a61620a232cf4d7d5b5766b3952e106101008301527f7ad66c0a68c72cb89e4fb4303841966e4062a76ab97451e3b9fb526a5ceb7f826101208301527fe026cc5a4aed3c22a58cbd3d2ac754c9352c5436f638042dca99034e836365166101408301527f3d04cffd8b46a874edf5cfae63077de85f849a660426697b06a829c70dd1409c6101608301527fad676aa337a485e4728a0b240d92b3ef7b3c372d06d189322bfd5f61f1e7203e6101808301527fa2fca4a49658f9fab7aa63289c91b7c7b6c832a6d0e69334ff5b0a3483d09dab6101a08301527f4ebfd9cd7bca2505f7bef59cc1c12ecc708fff26ae4af19abe852afe9e20c8626101c08301527f2def10d13dd169f550f578bda343d9717a138562e0093b380a1120789d53cf106101e083015282518381529081018352909160009190602082018180368337505085519192506000918291508180805b60018411156118fd57611798600285611f52565b91506117a5600285611f66565b600114905060005b82811015611851578a6117c1826002611f7a565b815181106117d1576117d1611e33565b602002602001015196508a8160026117e99190611f7a565b6117f4906001611deb565b8151811061180457611804611e33565b6020026020010151955086602089015285604089015287805190602001208b828151811061183457611834611e33565b60209081029190910101528061184981611e62565b9150506117ad565b5080156118cd5789611864600186611f0c565b8151811061187457611874611e33565b6020026020010151955087836010811061189057611890611e33565b602002015160001b945085602088015284604088015286805190602001208a83815181106118c0576118c0611e33565b6020026020010181815250505b806118d95760006118dc565b60015b6118e99060ff1683611deb565b9350826118f581611e62565b935050611784565b8960008151811061191057611910611e33565b602002602001015198505050505050505050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561199d5761199d611927565b604052919050565b600067ffffffffffffffff8311156119bf576119bf611927565b6119f060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601611956565b9050828152838383011115611a0457600080fd5b828260208301376000602084830101529392505050565b600060208284031215611a2d57600080fd5b813567ffffffffffffffff811115611a4457600080fd5b8201601f81018413611a5557600080fd5b611a64848235602084016119a5565b949350505050565b600060a08284031215611a7e57600080fd5b60405160a0810167ffffffffffffffff8282108183111715611aa257611aa2611927565b81604052829350843583526020850135602084015260408501356040840152606085013560608401526080850135915080821115611adf57600080fd5b508301601f81018513611af157600080fd5b611b00858235602084016119a5565b6080830152505092915050565b600082601f830112611b1e57600080fd5b8135602067ffffffffffffffff821115611b3a57611b3a611927565b8160051b611b49828201611956565b9283528481018201928281019087851115611b6357600080fd5b83870192505b84831015611b8257823582529183019190830190611b69565b979650505050505050565b600080600060608486031215611ba257600080fd5b83359250602084013567ffffffffffffffff80821115611bc157600080fd5b611bcd87838801611a6c565b93506040860135915080821115611be357600080fd5b9085019060408288031215611bf757600080fd5b604051604081018181108382111715611c1257611c12611927565b60405282358152602083013582811115611c2b57600080fd5b611c3789828601611b0d565b6020830152508093505050509250925092565b60008060408385031215611c5d57600080fd5b823567ffffffffffffffff811115611c7457600080fd5b611c8085828601611b0d565b95602094909401359450505050565b600060208284031215611ca157600080fd5b813567ffffffffffffffff811115611cb857600080fd5b611a6484828501611a6c565b6000815180845260005b81811015611cea57602081850181015186830182015201611cce565b81811115611cfc576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061143c6020830184611cc4565b73ffffffffffffffffffffffffffffffffffffffff811681146109bd57600080fd5b600060208284031215611d7657600080fd5b815161143c81611d42565b600060208284031215611d9357600080fd5b8151801515811461143c57600080fd5b600060208284031215611db557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611dfe57611dfe611dbc565b500190565b60008060408385031215611e1657600080fd5b825191506020830151611e2881611d42565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e9457611e94611dbc565b5060010190565b600060208284031215611ead57600080fd5b81517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000008116811461143c57600080fd5b848152836020820152826040820152608060608201526000611f026080830184611cc4565b9695505050505050565b600082821015611f1e57611f1e611dbc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082611f6157611f61611f23565b500490565b600082611f7557611f75611f23565b500690565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611fb257611fb2611dbc565b50029056fe436861696e53746f72616765436f6e7461696e65722d5343432d62617463686573a26469706673582212209fa13437d607d4f762adfcb0d6685a91847a6cbe7462977fd99188a01185f7b564736f6c63430008090033", -} - -// StateCommitmentChainABI is the input ABI used to generate the binding from. -// Deprecated: Use StateCommitmentChainMetaData.ABI instead. -var StateCommitmentChainABI = StateCommitmentChainMetaData.ABI - -// StateCommitmentChainBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use StateCommitmentChainMetaData.Bin instead. -var StateCommitmentChainBin = StateCommitmentChainMetaData.Bin - -// DeployStateCommitmentChain deploys a new Ethereum contract, binding an instance of StateCommitmentChain to it. -func DeployStateCommitmentChain(auth *bind.TransactOpts, backend bind.ContractBackend, _libAddressManager common.Address, _fraudProofWindow *big.Int, _sequencerPublishWindow *big.Int) (common.Address, *types.Transaction, *StateCommitmentChain, error) { - parsed, err := StateCommitmentChainMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(StateCommitmentChainBin), backend, _libAddressManager, _fraudProofWindow, _sequencerPublishWindow) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &StateCommitmentChain{StateCommitmentChainCaller: StateCommitmentChainCaller{contract: contract}, StateCommitmentChainTransactor: StateCommitmentChainTransactor{contract: contract}, StateCommitmentChainFilterer: StateCommitmentChainFilterer{contract: contract}}, nil -} - -// StateCommitmentChain is an auto generated Go binding around an Ethereum contract. -type StateCommitmentChain struct { - StateCommitmentChainCaller // Read-only binding to the contract - StateCommitmentChainTransactor // Write-only binding to the contract - StateCommitmentChainFilterer // Log filterer for contract events -} - -// StateCommitmentChainCaller is an auto generated read-only Go binding around an Ethereum contract. -type StateCommitmentChainCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// StateCommitmentChainTransactor is an auto generated write-only Go binding around an Ethereum contract. -type StateCommitmentChainTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// StateCommitmentChainFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type StateCommitmentChainFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// StateCommitmentChainSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type StateCommitmentChainSession struct { - Contract *StateCommitmentChain // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// StateCommitmentChainCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type StateCommitmentChainCallerSession struct { - Contract *StateCommitmentChainCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// StateCommitmentChainTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type StateCommitmentChainTransactorSession struct { - Contract *StateCommitmentChainTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// StateCommitmentChainRaw is an auto generated low-level Go binding around an Ethereum contract. -type StateCommitmentChainRaw struct { - Contract *StateCommitmentChain // Generic contract binding to access the raw methods on -} - -// StateCommitmentChainCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type StateCommitmentChainCallerRaw struct { - Contract *StateCommitmentChainCaller // Generic read-only contract binding to access the raw methods on -} - -// StateCommitmentChainTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type StateCommitmentChainTransactorRaw struct { - Contract *StateCommitmentChainTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewStateCommitmentChain creates a new instance of StateCommitmentChain, bound to a specific deployed contract. -func NewStateCommitmentChain(address common.Address, backend bind.ContractBackend) (*StateCommitmentChain, error) { - contract, err := bindStateCommitmentChain(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &StateCommitmentChain{StateCommitmentChainCaller: StateCommitmentChainCaller{contract: contract}, StateCommitmentChainTransactor: StateCommitmentChainTransactor{contract: contract}, StateCommitmentChainFilterer: StateCommitmentChainFilterer{contract: contract}}, nil -} - -// NewStateCommitmentChainCaller creates a new read-only instance of StateCommitmentChain, bound to a specific deployed contract. -func NewStateCommitmentChainCaller(address common.Address, caller bind.ContractCaller) (*StateCommitmentChainCaller, error) { - contract, err := bindStateCommitmentChain(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &StateCommitmentChainCaller{contract: contract}, nil -} - -// NewStateCommitmentChainTransactor creates a new write-only instance of StateCommitmentChain, bound to a specific deployed contract. -func NewStateCommitmentChainTransactor(address common.Address, transactor bind.ContractTransactor) (*StateCommitmentChainTransactor, error) { - contract, err := bindStateCommitmentChain(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &StateCommitmentChainTransactor{contract: contract}, nil -} - -// NewStateCommitmentChainFilterer creates a new log filterer instance of StateCommitmentChain, bound to a specific deployed contract. -func NewStateCommitmentChainFilterer(address common.Address, filterer bind.ContractFilterer) (*StateCommitmentChainFilterer, error) { - contract, err := bindStateCommitmentChain(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &StateCommitmentChainFilterer{contract: contract}, nil -} - -// bindStateCommitmentChain binds a generic wrapper to an already deployed contract. -func bindStateCommitmentChain(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(StateCommitmentChainABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_StateCommitmentChain *StateCommitmentChainRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _StateCommitmentChain.Contract.StateCommitmentChainCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_StateCommitmentChain *StateCommitmentChainRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _StateCommitmentChain.Contract.StateCommitmentChainTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_StateCommitmentChain *StateCommitmentChainRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _StateCommitmentChain.Contract.StateCommitmentChainTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_StateCommitmentChain *StateCommitmentChainCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _StateCommitmentChain.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_StateCommitmentChain *StateCommitmentChainTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _StateCommitmentChain.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_StateCommitmentChain *StateCommitmentChainTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _StateCommitmentChain.Contract.contract.Transact(opts, method, params...) -} - -// FRAUDPROOFWINDOW is a free data retrieval call binding the contract method 0xc17b291b. -// -// Solidity: function FRAUD_PROOF_WINDOW() view returns(uint256) -func (_StateCommitmentChain *StateCommitmentChainCaller) FRAUDPROOFWINDOW(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _StateCommitmentChain.contract.Call(opts, &out, "FRAUD_PROOF_WINDOW") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// FRAUDPROOFWINDOW is a free data retrieval call binding the contract method 0xc17b291b. -// -// Solidity: function FRAUD_PROOF_WINDOW() view returns(uint256) -func (_StateCommitmentChain *StateCommitmentChainSession) FRAUDPROOFWINDOW() (*big.Int, error) { - return _StateCommitmentChain.Contract.FRAUDPROOFWINDOW(&_StateCommitmentChain.CallOpts) -} - -// FRAUDPROOFWINDOW is a free data retrieval call binding the contract method 0xc17b291b. -// -// Solidity: function FRAUD_PROOF_WINDOW() view returns(uint256) -func (_StateCommitmentChain *StateCommitmentChainCallerSession) FRAUDPROOFWINDOW() (*big.Int, error) { - return _StateCommitmentChain.Contract.FRAUDPROOFWINDOW(&_StateCommitmentChain.CallOpts) -} - -// SEQUENCERPUBLISHWINDOW is a free data retrieval call binding the contract method 0x81eb62ef. -// -// Solidity: function SEQUENCER_PUBLISH_WINDOW() view returns(uint256) -func (_StateCommitmentChain *StateCommitmentChainCaller) SEQUENCERPUBLISHWINDOW(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _StateCommitmentChain.contract.Call(opts, &out, "SEQUENCER_PUBLISH_WINDOW") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// SEQUENCERPUBLISHWINDOW is a free data retrieval call binding the contract method 0x81eb62ef. -// -// Solidity: function SEQUENCER_PUBLISH_WINDOW() view returns(uint256) -func (_StateCommitmentChain *StateCommitmentChainSession) SEQUENCERPUBLISHWINDOW() (*big.Int, error) { - return _StateCommitmentChain.Contract.SEQUENCERPUBLISHWINDOW(&_StateCommitmentChain.CallOpts) -} - -// SEQUENCERPUBLISHWINDOW is a free data retrieval call binding the contract method 0x81eb62ef. -// -// Solidity: function SEQUENCER_PUBLISH_WINDOW() view returns(uint256) -func (_StateCommitmentChain *StateCommitmentChainCallerSession) SEQUENCERPUBLISHWINDOW() (*big.Int, error) { - return _StateCommitmentChain.Contract.SEQUENCERPUBLISHWINDOW(&_StateCommitmentChain.CallOpts) -} - -// Batches is a free data retrieval call binding the contract method 0xcfdf677e. -// -// Solidity: function batches() view returns(address) -func (_StateCommitmentChain *StateCommitmentChainCaller) Batches(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StateCommitmentChain.contract.Call(opts, &out, "batches") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Batches is a free data retrieval call binding the contract method 0xcfdf677e. -// -// Solidity: function batches() view returns(address) -func (_StateCommitmentChain *StateCommitmentChainSession) Batches() (common.Address, error) { - return _StateCommitmentChain.Contract.Batches(&_StateCommitmentChain.CallOpts) -} - -// Batches is a free data retrieval call binding the contract method 0xcfdf677e. -// -// Solidity: function batches() view returns(address) -func (_StateCommitmentChain *StateCommitmentChainCallerSession) Batches() (common.Address, error) { - return _StateCommitmentChain.Contract.Batches(&_StateCommitmentChain.CallOpts) -} - -// GetLastSequencerTimestamp is a free data retrieval call binding the contract method 0x7ad168a0. -// -// Solidity: function getLastSequencerTimestamp() view returns(uint256 _lastSequencerTimestamp) -func (_StateCommitmentChain *StateCommitmentChainCaller) GetLastSequencerTimestamp(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _StateCommitmentChain.contract.Call(opts, &out, "getLastSequencerTimestamp") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetLastSequencerTimestamp is a free data retrieval call binding the contract method 0x7ad168a0. -// -// Solidity: function getLastSequencerTimestamp() view returns(uint256 _lastSequencerTimestamp) -func (_StateCommitmentChain *StateCommitmentChainSession) GetLastSequencerTimestamp() (*big.Int, error) { - return _StateCommitmentChain.Contract.GetLastSequencerTimestamp(&_StateCommitmentChain.CallOpts) -} - -// GetLastSequencerTimestamp is a free data retrieval call binding the contract method 0x7ad168a0. -// -// Solidity: function getLastSequencerTimestamp() view returns(uint256 _lastSequencerTimestamp) -func (_StateCommitmentChain *StateCommitmentChainCallerSession) GetLastSequencerTimestamp() (*big.Int, error) { - return _StateCommitmentChain.Contract.GetLastSequencerTimestamp(&_StateCommitmentChain.CallOpts) -} - -// GetTotalBatches is a free data retrieval call binding the contract method 0xe561dddc. -// -// Solidity: function getTotalBatches() view returns(uint256 _totalBatches) -func (_StateCommitmentChain *StateCommitmentChainCaller) GetTotalBatches(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _StateCommitmentChain.contract.Call(opts, &out, "getTotalBatches") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetTotalBatches is a free data retrieval call binding the contract method 0xe561dddc. -// -// Solidity: function getTotalBatches() view returns(uint256 _totalBatches) -func (_StateCommitmentChain *StateCommitmentChainSession) GetTotalBatches() (*big.Int, error) { - return _StateCommitmentChain.Contract.GetTotalBatches(&_StateCommitmentChain.CallOpts) -} - -// GetTotalBatches is a free data retrieval call binding the contract method 0xe561dddc. -// -// Solidity: function getTotalBatches() view returns(uint256 _totalBatches) -func (_StateCommitmentChain *StateCommitmentChainCallerSession) GetTotalBatches() (*big.Int, error) { - return _StateCommitmentChain.Contract.GetTotalBatches(&_StateCommitmentChain.CallOpts) -} - -// GetTotalElements is a free data retrieval call binding the contract method 0x7aa63a86. -// -// Solidity: function getTotalElements() view returns(uint256 _totalElements) -func (_StateCommitmentChain *StateCommitmentChainCaller) GetTotalElements(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _StateCommitmentChain.contract.Call(opts, &out, "getTotalElements") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetTotalElements is a free data retrieval call binding the contract method 0x7aa63a86. -// -// Solidity: function getTotalElements() view returns(uint256 _totalElements) -func (_StateCommitmentChain *StateCommitmentChainSession) GetTotalElements() (*big.Int, error) { - return _StateCommitmentChain.Contract.GetTotalElements(&_StateCommitmentChain.CallOpts) -} - -// GetTotalElements is a free data retrieval call binding the contract method 0x7aa63a86. -// -// Solidity: function getTotalElements() view returns(uint256 _totalElements) -func (_StateCommitmentChain *StateCommitmentChainCallerSession) GetTotalElements() (*big.Int, error) { - return _StateCommitmentChain.Contract.GetTotalElements(&_StateCommitmentChain.CallOpts) -} - -// InsideFraudProofWindow is a free data retrieval call binding the contract method 0x9418bddd. -// -// Solidity: function insideFraudProofWindow((uint256,bytes32,uint256,uint256,bytes) _batchHeader) view returns(bool _inside) -func (_StateCommitmentChain *StateCommitmentChainCaller) InsideFraudProofWindow(opts *bind.CallOpts, _batchHeader LibOVMCodecChainBatchHeader) (bool, error) { - var out []interface{} - err := _StateCommitmentChain.contract.Call(opts, &out, "insideFraudProofWindow", _batchHeader) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// InsideFraudProofWindow is a free data retrieval call binding the contract method 0x9418bddd. -// -// Solidity: function insideFraudProofWindow((uint256,bytes32,uint256,uint256,bytes) _batchHeader) view returns(bool _inside) -func (_StateCommitmentChain *StateCommitmentChainSession) InsideFraudProofWindow(_batchHeader LibOVMCodecChainBatchHeader) (bool, error) { - return _StateCommitmentChain.Contract.InsideFraudProofWindow(&_StateCommitmentChain.CallOpts, _batchHeader) -} - -// InsideFraudProofWindow is a free data retrieval call binding the contract method 0x9418bddd. -// -// Solidity: function insideFraudProofWindow((uint256,bytes32,uint256,uint256,bytes) _batchHeader) view returns(bool _inside) -func (_StateCommitmentChain *StateCommitmentChainCallerSession) InsideFraudProofWindow(_batchHeader LibOVMCodecChainBatchHeader) (bool, error) { - return _StateCommitmentChain.Contract.InsideFraudProofWindow(&_StateCommitmentChain.CallOpts, _batchHeader) -} - -// LibAddressManager is a free data retrieval call binding the contract method 0x299ca478. -// -// Solidity: function libAddressManager() view returns(address) -func (_StateCommitmentChain *StateCommitmentChainCaller) LibAddressManager(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StateCommitmentChain.contract.Call(opts, &out, "libAddressManager") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// LibAddressManager is a free data retrieval call binding the contract method 0x299ca478. -// -// Solidity: function libAddressManager() view returns(address) -func (_StateCommitmentChain *StateCommitmentChainSession) LibAddressManager() (common.Address, error) { - return _StateCommitmentChain.Contract.LibAddressManager(&_StateCommitmentChain.CallOpts) -} - -// LibAddressManager is a free data retrieval call binding the contract method 0x299ca478. -// -// Solidity: function libAddressManager() view returns(address) -func (_StateCommitmentChain *StateCommitmentChainCallerSession) LibAddressManager() (common.Address, error) { - return _StateCommitmentChain.Contract.LibAddressManager(&_StateCommitmentChain.CallOpts) -} - -// Resolve is a free data retrieval call binding the contract method 0x461a4478. -// -// Solidity: function resolve(string _name) view returns(address) -func (_StateCommitmentChain *StateCommitmentChainCaller) Resolve(opts *bind.CallOpts, _name string) (common.Address, error) { - var out []interface{} - err := _StateCommitmentChain.contract.Call(opts, &out, "resolve", _name) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Resolve is a free data retrieval call binding the contract method 0x461a4478. -// -// Solidity: function resolve(string _name) view returns(address) -func (_StateCommitmentChain *StateCommitmentChainSession) Resolve(_name string) (common.Address, error) { - return _StateCommitmentChain.Contract.Resolve(&_StateCommitmentChain.CallOpts, _name) -} - -// Resolve is a free data retrieval call binding the contract method 0x461a4478. -// -// Solidity: function resolve(string _name) view returns(address) -func (_StateCommitmentChain *StateCommitmentChainCallerSession) Resolve(_name string) (common.Address, error) { - return _StateCommitmentChain.Contract.Resolve(&_StateCommitmentChain.CallOpts, _name) -} - -// VerifyStateCommitment is a free data retrieval call binding the contract method 0x4d69ee57. -// -// Solidity: function verifyStateCommitment(bytes32 _element, (uint256,bytes32,uint256,uint256,bytes) _batchHeader, (uint256,bytes32[]) _proof) view returns(bool) -func (_StateCommitmentChain *StateCommitmentChainCaller) VerifyStateCommitment(opts *bind.CallOpts, _element [32]byte, _batchHeader LibOVMCodecChainBatchHeader, _proof LibOVMCodecChainInclusionProof) (bool, error) { - var out []interface{} - err := _StateCommitmentChain.contract.Call(opts, &out, "verifyStateCommitment", _element, _batchHeader, _proof) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// VerifyStateCommitment is a free data retrieval call binding the contract method 0x4d69ee57. -// -// Solidity: function verifyStateCommitment(bytes32 _element, (uint256,bytes32,uint256,uint256,bytes) _batchHeader, (uint256,bytes32[]) _proof) view returns(bool) -func (_StateCommitmentChain *StateCommitmentChainSession) VerifyStateCommitment(_element [32]byte, _batchHeader LibOVMCodecChainBatchHeader, _proof LibOVMCodecChainInclusionProof) (bool, error) { - return _StateCommitmentChain.Contract.VerifyStateCommitment(&_StateCommitmentChain.CallOpts, _element, _batchHeader, _proof) -} - -// VerifyStateCommitment is a free data retrieval call binding the contract method 0x4d69ee57. -// -// Solidity: function verifyStateCommitment(bytes32 _element, (uint256,bytes32,uint256,uint256,bytes) _batchHeader, (uint256,bytes32[]) _proof) view returns(bool) -func (_StateCommitmentChain *StateCommitmentChainCallerSession) VerifyStateCommitment(_element [32]byte, _batchHeader LibOVMCodecChainBatchHeader, _proof LibOVMCodecChainInclusionProof) (bool, error) { - return _StateCommitmentChain.Contract.VerifyStateCommitment(&_StateCommitmentChain.CallOpts, _element, _batchHeader, _proof) -} - -// AppendStateBatch is a paid mutator transaction binding the contract method 0x8ca5cbb9. -// -// Solidity: function appendStateBatch(bytes32[] _batch, uint256 _shouldStartAtElement) returns() -func (_StateCommitmentChain *StateCommitmentChainTransactor) AppendStateBatch(opts *bind.TransactOpts, _batch [][32]byte, _shouldStartAtElement *big.Int) (*types.Transaction, error) { - return _StateCommitmentChain.contract.Transact(opts, "appendStateBatch", _batch, _shouldStartAtElement) -} - -// AppendStateBatch is a paid mutator transaction binding the contract method 0x8ca5cbb9. -// -// Solidity: function appendStateBatch(bytes32[] _batch, uint256 _shouldStartAtElement) returns() -func (_StateCommitmentChain *StateCommitmentChainSession) AppendStateBatch(_batch [][32]byte, _shouldStartAtElement *big.Int) (*types.Transaction, error) { - return _StateCommitmentChain.Contract.AppendStateBatch(&_StateCommitmentChain.TransactOpts, _batch, _shouldStartAtElement) -} - -// AppendStateBatch is a paid mutator transaction binding the contract method 0x8ca5cbb9. -// -// Solidity: function appendStateBatch(bytes32[] _batch, uint256 _shouldStartAtElement) returns() -func (_StateCommitmentChain *StateCommitmentChainTransactorSession) AppendStateBatch(_batch [][32]byte, _shouldStartAtElement *big.Int) (*types.Transaction, error) { - return _StateCommitmentChain.Contract.AppendStateBatch(&_StateCommitmentChain.TransactOpts, _batch, _shouldStartAtElement) -} - -// DeleteStateBatch is a paid mutator transaction binding the contract method 0xb8e189ac. -// -// Solidity: function deleteStateBatch((uint256,bytes32,uint256,uint256,bytes) _batchHeader) returns() -func (_StateCommitmentChain *StateCommitmentChainTransactor) DeleteStateBatch(opts *bind.TransactOpts, _batchHeader LibOVMCodecChainBatchHeader) (*types.Transaction, error) { - return _StateCommitmentChain.contract.Transact(opts, "deleteStateBatch", _batchHeader) -} - -// DeleteStateBatch is a paid mutator transaction binding the contract method 0xb8e189ac. -// -// Solidity: function deleteStateBatch((uint256,bytes32,uint256,uint256,bytes) _batchHeader) returns() -func (_StateCommitmentChain *StateCommitmentChainSession) DeleteStateBatch(_batchHeader LibOVMCodecChainBatchHeader) (*types.Transaction, error) { - return _StateCommitmentChain.Contract.DeleteStateBatch(&_StateCommitmentChain.TransactOpts, _batchHeader) -} - -// DeleteStateBatch is a paid mutator transaction binding the contract method 0xb8e189ac. -// -// Solidity: function deleteStateBatch((uint256,bytes32,uint256,uint256,bytes) _batchHeader) returns() -func (_StateCommitmentChain *StateCommitmentChainTransactorSession) DeleteStateBatch(_batchHeader LibOVMCodecChainBatchHeader) (*types.Transaction, error) { - return _StateCommitmentChain.Contract.DeleteStateBatch(&_StateCommitmentChain.TransactOpts, _batchHeader) -} - -// StateCommitmentChainStateBatchAppendedIterator is returned from FilterStateBatchAppended and is used to iterate over the raw logs and unpacked data for StateBatchAppended events raised by the StateCommitmentChain contract. -type StateCommitmentChainStateBatchAppendedIterator struct { - Event *StateCommitmentChainStateBatchAppended // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StateCommitmentChainStateBatchAppendedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StateCommitmentChainStateBatchAppended) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StateCommitmentChainStateBatchAppended) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StateCommitmentChainStateBatchAppendedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StateCommitmentChainStateBatchAppendedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StateCommitmentChainStateBatchAppended represents a StateBatchAppended event raised by the StateCommitmentChain contract. -type StateCommitmentChainStateBatchAppended struct { - BatchIndex *big.Int - BatchRoot [32]byte - BatchSize *big.Int - PrevTotalElements *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterStateBatchAppended is a free log retrieval operation binding the contract event 0x16be4c5129a4e03cf3350262e181dc02ddfb4a6008d925368c0899fcd97ca9c5. -// -// Solidity: event StateBatchAppended(uint256 indexed _batchIndex, bytes32 _batchRoot, uint256 _batchSize, uint256 _prevTotalElements, bytes _extraData) -func (_StateCommitmentChain *StateCommitmentChainFilterer) FilterStateBatchAppended(opts *bind.FilterOpts, _batchIndex []*big.Int) (*StateCommitmentChainStateBatchAppendedIterator, error) { - - var _batchIndexRule []interface{} - for _, _batchIndexItem := range _batchIndex { - _batchIndexRule = append(_batchIndexRule, _batchIndexItem) - } - - logs, sub, err := _StateCommitmentChain.contract.FilterLogs(opts, "StateBatchAppended", _batchIndexRule) - if err != nil { - return nil, err - } - return &StateCommitmentChainStateBatchAppendedIterator{contract: _StateCommitmentChain.contract, event: "StateBatchAppended", logs: logs, sub: sub}, nil -} - -// WatchStateBatchAppended is a free log subscription operation binding the contract event 0x16be4c5129a4e03cf3350262e181dc02ddfb4a6008d925368c0899fcd97ca9c5. -// -// Solidity: event StateBatchAppended(uint256 indexed _batchIndex, bytes32 _batchRoot, uint256 _batchSize, uint256 _prevTotalElements, bytes _extraData) -func (_StateCommitmentChain *StateCommitmentChainFilterer) WatchStateBatchAppended(opts *bind.WatchOpts, sink chan<- *StateCommitmentChainStateBatchAppended, _batchIndex []*big.Int) (event.Subscription, error) { - - var _batchIndexRule []interface{} - for _, _batchIndexItem := range _batchIndex { - _batchIndexRule = append(_batchIndexRule, _batchIndexItem) - } - - logs, sub, err := _StateCommitmentChain.contract.WatchLogs(opts, "StateBatchAppended", _batchIndexRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StateCommitmentChainStateBatchAppended) - if err := _StateCommitmentChain.contract.UnpackLog(event, "StateBatchAppended", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseStateBatchAppended is a log parse operation binding the contract event 0x16be4c5129a4e03cf3350262e181dc02ddfb4a6008d925368c0899fcd97ca9c5. -// -// Solidity: event StateBatchAppended(uint256 indexed _batchIndex, bytes32 _batchRoot, uint256 _batchSize, uint256 _prevTotalElements, bytes _extraData) -func (_StateCommitmentChain *StateCommitmentChainFilterer) ParseStateBatchAppended(log types.Log) (*StateCommitmentChainStateBatchAppended, error) { - event := new(StateCommitmentChainStateBatchAppended) - if err := _StateCommitmentChain.contract.UnpackLog(event, "StateBatchAppended", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StateCommitmentChainStateBatchDeletedIterator is returned from FilterStateBatchDeleted and is used to iterate over the raw logs and unpacked data for StateBatchDeleted events raised by the StateCommitmentChain contract. -type StateCommitmentChainStateBatchDeletedIterator struct { - Event *StateCommitmentChainStateBatchDeleted // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StateCommitmentChainStateBatchDeletedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StateCommitmentChainStateBatchDeleted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StateCommitmentChainStateBatchDeleted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StateCommitmentChainStateBatchDeletedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StateCommitmentChainStateBatchDeletedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StateCommitmentChainStateBatchDeleted represents a StateBatchDeleted event raised by the StateCommitmentChain contract. -type StateCommitmentChainStateBatchDeleted struct { - BatchIndex *big.Int - BatchRoot [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterStateBatchDeleted is a free log retrieval operation binding the contract event 0x8747b69ce8fdb31c3b9b0a67bd8049ad8c1a69ea417b69b12174068abd9cbd64. -// -// Solidity: event StateBatchDeleted(uint256 indexed _batchIndex, bytes32 _batchRoot) -func (_StateCommitmentChain *StateCommitmentChainFilterer) FilterStateBatchDeleted(opts *bind.FilterOpts, _batchIndex []*big.Int) (*StateCommitmentChainStateBatchDeletedIterator, error) { - - var _batchIndexRule []interface{} - for _, _batchIndexItem := range _batchIndex { - _batchIndexRule = append(_batchIndexRule, _batchIndexItem) - } - - logs, sub, err := _StateCommitmentChain.contract.FilterLogs(opts, "StateBatchDeleted", _batchIndexRule) - if err != nil { - return nil, err - } - return &StateCommitmentChainStateBatchDeletedIterator{contract: _StateCommitmentChain.contract, event: "StateBatchDeleted", logs: logs, sub: sub}, nil -} - -// WatchStateBatchDeleted is a free log subscription operation binding the contract event 0x8747b69ce8fdb31c3b9b0a67bd8049ad8c1a69ea417b69b12174068abd9cbd64. -// -// Solidity: event StateBatchDeleted(uint256 indexed _batchIndex, bytes32 _batchRoot) -func (_StateCommitmentChain *StateCommitmentChainFilterer) WatchStateBatchDeleted(opts *bind.WatchOpts, sink chan<- *StateCommitmentChainStateBatchDeleted, _batchIndex []*big.Int) (event.Subscription, error) { - - var _batchIndexRule []interface{} - for _, _batchIndexItem := range _batchIndex { - _batchIndexRule = append(_batchIndexRule, _batchIndexItem) - } - - logs, sub, err := _StateCommitmentChain.contract.WatchLogs(opts, "StateBatchDeleted", _batchIndexRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StateCommitmentChainStateBatchDeleted) - if err := _StateCommitmentChain.contract.UnpackLog(event, "StateBatchDeleted", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseStateBatchDeleted is a log parse operation binding the contract event 0x8747b69ce8fdb31c3b9b0a67bd8049ad8c1a69ea417b69b12174068abd9cbd64. -// -// Solidity: event StateBatchDeleted(uint256 indexed _batchIndex, bytes32 _batchRoot) -func (_StateCommitmentChain *StateCommitmentChainFilterer) ParseStateBatchDeleted(log types.Log) (*StateCommitmentChainStateBatchDeleted, error) { - event := new(StateCommitmentChainStateBatchDeleted) - if err := _StateCommitmentChain.contract.UnpackLog(event, "StateBatchDeleted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/indexer/bindings/crossdomainmessenger.go b/indexer/bindings/crossdomainmessenger.go deleted file mode 100644 index 516b49cbffab..000000000000 --- a/indexer/bindings/crossdomainmessenger.go +++ /dev/null @@ -1,1433 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindings - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// CrossDomainMessengerMetaData contains all meta data concerning the CrossDomainMessenger contract. -var CrossDomainMessengerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", -} - -// CrossDomainMessengerABI is the input ABI used to generate the binding from. -// Deprecated: Use CrossDomainMessengerMetaData.ABI instead. -var CrossDomainMessengerABI = CrossDomainMessengerMetaData.ABI - -// CrossDomainMessenger is an auto generated Go binding around an Ethereum contract. -type CrossDomainMessenger struct { - CrossDomainMessengerCaller // Read-only binding to the contract - CrossDomainMessengerTransactor // Write-only binding to the contract - CrossDomainMessengerFilterer // Log filterer for contract events -} - -// CrossDomainMessengerCaller is an auto generated read-only Go binding around an Ethereum contract. -type CrossDomainMessengerCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// CrossDomainMessengerTransactor is an auto generated write-only Go binding around an Ethereum contract. -type CrossDomainMessengerTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// CrossDomainMessengerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type CrossDomainMessengerFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// CrossDomainMessengerSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type CrossDomainMessengerSession struct { - Contract *CrossDomainMessenger // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// CrossDomainMessengerCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type CrossDomainMessengerCallerSession struct { - Contract *CrossDomainMessengerCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// CrossDomainMessengerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type CrossDomainMessengerTransactorSession struct { - Contract *CrossDomainMessengerTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// CrossDomainMessengerRaw is an auto generated low-level Go binding around an Ethereum contract. -type CrossDomainMessengerRaw struct { - Contract *CrossDomainMessenger // Generic contract binding to access the raw methods on -} - -// CrossDomainMessengerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type CrossDomainMessengerCallerRaw struct { - Contract *CrossDomainMessengerCaller // Generic read-only contract binding to access the raw methods on -} - -// CrossDomainMessengerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type CrossDomainMessengerTransactorRaw struct { - Contract *CrossDomainMessengerTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewCrossDomainMessenger creates a new instance of CrossDomainMessenger, bound to a specific deployed contract. -func NewCrossDomainMessenger(address common.Address, backend bind.ContractBackend) (*CrossDomainMessenger, error) { - contract, err := bindCrossDomainMessenger(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &CrossDomainMessenger{CrossDomainMessengerCaller: CrossDomainMessengerCaller{contract: contract}, CrossDomainMessengerTransactor: CrossDomainMessengerTransactor{contract: contract}, CrossDomainMessengerFilterer: CrossDomainMessengerFilterer{contract: contract}}, nil -} - -// NewCrossDomainMessengerCaller creates a new read-only instance of CrossDomainMessenger, bound to a specific deployed contract. -func NewCrossDomainMessengerCaller(address common.Address, caller bind.ContractCaller) (*CrossDomainMessengerCaller, error) { - contract, err := bindCrossDomainMessenger(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &CrossDomainMessengerCaller{contract: contract}, nil -} - -// NewCrossDomainMessengerTransactor creates a new write-only instance of CrossDomainMessenger, bound to a specific deployed contract. -func NewCrossDomainMessengerTransactor(address common.Address, transactor bind.ContractTransactor) (*CrossDomainMessengerTransactor, error) { - contract, err := bindCrossDomainMessenger(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &CrossDomainMessengerTransactor{contract: contract}, nil -} - -// NewCrossDomainMessengerFilterer creates a new log filterer instance of CrossDomainMessenger, bound to a specific deployed contract. -func NewCrossDomainMessengerFilterer(address common.Address, filterer bind.ContractFilterer) (*CrossDomainMessengerFilterer, error) { - contract, err := bindCrossDomainMessenger(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &CrossDomainMessengerFilterer{contract: contract}, nil -} - -// bindCrossDomainMessenger binds a generic wrapper to an already deployed contract. -func bindCrossDomainMessenger(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(CrossDomainMessengerABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_CrossDomainMessenger *CrossDomainMessengerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _CrossDomainMessenger.Contract.CrossDomainMessengerCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_CrossDomainMessenger *CrossDomainMessengerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _CrossDomainMessenger.Contract.CrossDomainMessengerTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_CrossDomainMessenger *CrossDomainMessengerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _CrossDomainMessenger.Contract.CrossDomainMessengerTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_CrossDomainMessenger *CrossDomainMessengerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _CrossDomainMessenger.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_CrossDomainMessenger *CrossDomainMessengerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _CrossDomainMessenger.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_CrossDomainMessenger *CrossDomainMessengerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _CrossDomainMessenger.Contract.contract.Transact(opts, method, params...) -} - -// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. -// -// Solidity: function MESSAGE_VERSION() view returns(uint16) -func (_CrossDomainMessenger *CrossDomainMessengerCaller) MESSAGEVERSION(opts *bind.CallOpts) (uint16, error) { - var out []interface{} - err := _CrossDomainMessenger.contract.Call(opts, &out, "MESSAGE_VERSION") - - if err != nil { - return *new(uint16), err - } - - out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) - - return out0, err - -} - -// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. -// -// Solidity: function MESSAGE_VERSION() view returns(uint16) -func (_CrossDomainMessenger *CrossDomainMessengerSession) MESSAGEVERSION() (uint16, error) { - return _CrossDomainMessenger.Contract.MESSAGEVERSION(&_CrossDomainMessenger.CallOpts) -} - -// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. -// -// Solidity: function MESSAGE_VERSION() view returns(uint16) -func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) MESSAGEVERSION() (uint16, error) { - return _CrossDomainMessenger.Contract.MESSAGEVERSION(&_CrossDomainMessenger.CallOpts) -} - -// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. -// -// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerCaller) MINGASCALLDATAOVERHEAD(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_CALLDATA_OVERHEAD") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. -// -// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerSession) MINGASCALLDATAOVERHEAD() (uint64, error) { - return _CrossDomainMessenger.Contract.MINGASCALLDATAOVERHEAD(&_CrossDomainMessenger.CallOpts) -} - -// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. -// -// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) MINGASCALLDATAOVERHEAD() (uint64, error) { - return _CrossDomainMessenger.Contract.MINGASCALLDATAOVERHEAD(&_CrossDomainMessenger.CallOpts) -} - -// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerCaller) MINGASDYNAMICOVERHEADDENOMINATOR(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerSession) MINGASDYNAMICOVERHEADDENOMINATOR() (uint64, error) { - return _CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADDENOMINATOR(&_CrossDomainMessenger.CallOpts) -} - -// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) MINGASDYNAMICOVERHEADDENOMINATOR() (uint64, error) { - return _CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADDENOMINATOR(&_CrossDomainMessenger.CallOpts) -} - -// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerCaller) MINGASDYNAMICOVERHEADNUMERATOR(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerSession) MINGASDYNAMICOVERHEADNUMERATOR() (uint64, error) { - return _CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADNUMERATOR(&_CrossDomainMessenger.CallOpts) -} - -// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) MINGASDYNAMICOVERHEADNUMERATOR() (uint64, error) { - return _CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADNUMERATOR(&_CrossDomainMessenger.CallOpts) -} - -// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. -// -// Solidity: function OTHER_MESSENGER() view returns(address) -func (_CrossDomainMessenger *CrossDomainMessengerCaller) OTHERMESSENGER(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _CrossDomainMessenger.contract.Call(opts, &out, "OTHER_MESSENGER") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. -// -// Solidity: function OTHER_MESSENGER() view returns(address) -func (_CrossDomainMessenger *CrossDomainMessengerSession) OTHERMESSENGER() (common.Address, error) { - return _CrossDomainMessenger.Contract.OTHERMESSENGER(&_CrossDomainMessenger.CallOpts) -} - -// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. -// -// Solidity: function OTHER_MESSENGER() view returns(address) -func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) OTHERMESSENGER() (common.Address, error) { - return _CrossDomainMessenger.Contract.OTHERMESSENGER(&_CrossDomainMessenger.CallOpts) -} - -// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. -// -// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerCaller) RELAYCALLOVERHEAD(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _CrossDomainMessenger.contract.Call(opts, &out, "RELAY_CALL_OVERHEAD") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. -// -// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerSession) RELAYCALLOVERHEAD() (uint64, error) { - return _CrossDomainMessenger.Contract.RELAYCALLOVERHEAD(&_CrossDomainMessenger.CallOpts) -} - -// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. -// -// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) RELAYCALLOVERHEAD() (uint64, error) { - return _CrossDomainMessenger.Contract.RELAYCALLOVERHEAD(&_CrossDomainMessenger.CallOpts) -} - -// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. -// -// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerCaller) RELAYCONSTANTOVERHEAD(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _CrossDomainMessenger.contract.Call(opts, &out, "RELAY_CONSTANT_OVERHEAD") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. -// -// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerSession) RELAYCONSTANTOVERHEAD() (uint64, error) { - return _CrossDomainMessenger.Contract.RELAYCONSTANTOVERHEAD(&_CrossDomainMessenger.CallOpts) -} - -// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. -// -// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) RELAYCONSTANTOVERHEAD() (uint64, error) { - return _CrossDomainMessenger.Contract.RELAYCONSTANTOVERHEAD(&_CrossDomainMessenger.CallOpts) -} - -// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. -// -// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerCaller) RELAYGASCHECKBUFFER(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _CrossDomainMessenger.contract.Call(opts, &out, "RELAY_GAS_CHECK_BUFFER") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. -// -// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerSession) RELAYGASCHECKBUFFER() (uint64, error) { - return _CrossDomainMessenger.Contract.RELAYGASCHECKBUFFER(&_CrossDomainMessenger.CallOpts) -} - -// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. -// -// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) RELAYGASCHECKBUFFER() (uint64, error) { - return _CrossDomainMessenger.Contract.RELAYGASCHECKBUFFER(&_CrossDomainMessenger.CallOpts) -} - -// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. -// -// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerCaller) RELAYRESERVEDGAS(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _CrossDomainMessenger.contract.Call(opts, &out, "RELAY_RESERVED_GAS") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. -// -// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerSession) RELAYRESERVEDGAS() (uint64, error) { - return _CrossDomainMessenger.Contract.RELAYRESERVEDGAS(&_CrossDomainMessenger.CallOpts) -} - -// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. -// -// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) RELAYRESERVEDGAS() (uint64, error) { - return _CrossDomainMessenger.Contract.RELAYRESERVEDGAS(&_CrossDomainMessenger.CallOpts) -} - -// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. -// -// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerCaller) BaseGas(opts *bind.CallOpts, _message []byte, _minGasLimit uint32) (uint64, error) { - var out []interface{} - err := _CrossDomainMessenger.contract.Call(opts, &out, "baseGas", _message, _minGasLimit) - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. -// -// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerSession) BaseGas(_message []byte, _minGasLimit uint32) (uint64, error) { - return _CrossDomainMessenger.Contract.BaseGas(&_CrossDomainMessenger.CallOpts, _message, _minGasLimit) -} - -// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. -// -// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) -func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) BaseGas(_message []byte, _minGasLimit uint32) (uint64, error) { - return _CrossDomainMessenger.Contract.BaseGas(&_CrossDomainMessenger.CallOpts, _message, _minGasLimit) -} - -// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. -// -// Solidity: function failedMessages(bytes32 ) view returns(bool) -func (_CrossDomainMessenger *CrossDomainMessengerCaller) FailedMessages(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { - var out []interface{} - err := _CrossDomainMessenger.contract.Call(opts, &out, "failedMessages", arg0) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. -// -// Solidity: function failedMessages(bytes32 ) view returns(bool) -func (_CrossDomainMessenger *CrossDomainMessengerSession) FailedMessages(arg0 [32]byte) (bool, error) { - return _CrossDomainMessenger.Contract.FailedMessages(&_CrossDomainMessenger.CallOpts, arg0) -} - -// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. -// -// Solidity: function failedMessages(bytes32 ) view returns(bool) -func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) FailedMessages(arg0 [32]byte) (bool, error) { - return _CrossDomainMessenger.Contract.FailedMessages(&_CrossDomainMessenger.CallOpts, arg0) -} - -// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. -// -// Solidity: function messageNonce() view returns(uint256) -func (_CrossDomainMessenger *CrossDomainMessengerCaller) MessageNonce(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _CrossDomainMessenger.contract.Call(opts, &out, "messageNonce") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. -// -// Solidity: function messageNonce() view returns(uint256) -func (_CrossDomainMessenger *CrossDomainMessengerSession) MessageNonce() (*big.Int, error) { - return _CrossDomainMessenger.Contract.MessageNonce(&_CrossDomainMessenger.CallOpts) -} - -// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. -// -// Solidity: function messageNonce() view returns(uint256) -func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) MessageNonce() (*big.Int, error) { - return _CrossDomainMessenger.Contract.MessageNonce(&_CrossDomainMessenger.CallOpts) -} - -// OtherMessenger is a free data retrieval call binding the contract method 0xdb505d80. -// -// Solidity: function otherMessenger() view returns(address) -func (_CrossDomainMessenger *CrossDomainMessengerCaller) OtherMessenger(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _CrossDomainMessenger.contract.Call(opts, &out, "otherMessenger") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OtherMessenger is a free data retrieval call binding the contract method 0xdb505d80. -// -// Solidity: function otherMessenger() view returns(address) -func (_CrossDomainMessenger *CrossDomainMessengerSession) OtherMessenger() (common.Address, error) { - return _CrossDomainMessenger.Contract.OtherMessenger(&_CrossDomainMessenger.CallOpts) -} - -// OtherMessenger is a free data retrieval call binding the contract method 0xdb505d80. -// -// Solidity: function otherMessenger() view returns(address) -func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) OtherMessenger() (common.Address, error) { - return _CrossDomainMessenger.Contract.OtherMessenger(&_CrossDomainMessenger.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_CrossDomainMessenger *CrossDomainMessengerCaller) Paused(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _CrossDomainMessenger.contract.Call(opts, &out, "paused") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_CrossDomainMessenger *CrossDomainMessengerSession) Paused() (bool, error) { - return _CrossDomainMessenger.Contract.Paused(&_CrossDomainMessenger.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) Paused() (bool, error) { - return _CrossDomainMessenger.Contract.Paused(&_CrossDomainMessenger.CallOpts) -} - -// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. -// -// Solidity: function successfulMessages(bytes32 ) view returns(bool) -func (_CrossDomainMessenger *CrossDomainMessengerCaller) SuccessfulMessages(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { - var out []interface{} - err := _CrossDomainMessenger.contract.Call(opts, &out, "successfulMessages", arg0) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. -// -// Solidity: function successfulMessages(bytes32 ) view returns(bool) -func (_CrossDomainMessenger *CrossDomainMessengerSession) SuccessfulMessages(arg0 [32]byte) (bool, error) { - return _CrossDomainMessenger.Contract.SuccessfulMessages(&_CrossDomainMessenger.CallOpts, arg0) -} - -// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. -// -// Solidity: function successfulMessages(bytes32 ) view returns(bool) -func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) SuccessfulMessages(arg0 [32]byte) (bool, error) { - return _CrossDomainMessenger.Contract.SuccessfulMessages(&_CrossDomainMessenger.CallOpts, arg0) -} - -// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. -// -// Solidity: function xDomainMessageSender() view returns(address) -func (_CrossDomainMessenger *CrossDomainMessengerCaller) XDomainMessageSender(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _CrossDomainMessenger.contract.Call(opts, &out, "xDomainMessageSender") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. -// -// Solidity: function xDomainMessageSender() view returns(address) -func (_CrossDomainMessenger *CrossDomainMessengerSession) XDomainMessageSender() (common.Address, error) { - return _CrossDomainMessenger.Contract.XDomainMessageSender(&_CrossDomainMessenger.CallOpts) -} - -// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. -// -// Solidity: function xDomainMessageSender() view returns(address) -func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) XDomainMessageSender() (common.Address, error) { - return _CrossDomainMessenger.Contract.XDomainMessageSender(&_CrossDomainMessenger.CallOpts) -} - -// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. -// -// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() -func (_CrossDomainMessenger *CrossDomainMessengerTransactor) RelayMessage(opts *bind.TransactOpts, _nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { - return _CrossDomainMessenger.contract.Transact(opts, "relayMessage", _nonce, _sender, _target, _value, _minGasLimit, _message) -} - -// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. -// -// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() -func (_CrossDomainMessenger *CrossDomainMessengerSession) RelayMessage(_nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { - return _CrossDomainMessenger.Contract.RelayMessage(&_CrossDomainMessenger.TransactOpts, _nonce, _sender, _target, _value, _minGasLimit, _message) -} - -// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. -// -// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() -func (_CrossDomainMessenger *CrossDomainMessengerTransactorSession) RelayMessage(_nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { - return _CrossDomainMessenger.Contract.RelayMessage(&_CrossDomainMessenger.TransactOpts, _nonce, _sender, _target, _value, _minGasLimit, _message) -} - -// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. -// -// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() -func (_CrossDomainMessenger *CrossDomainMessengerTransactor) SendMessage(opts *bind.TransactOpts, _target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { - return _CrossDomainMessenger.contract.Transact(opts, "sendMessage", _target, _message, _minGasLimit) -} - -// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. -// -// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() -func (_CrossDomainMessenger *CrossDomainMessengerSession) SendMessage(_target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { - return _CrossDomainMessenger.Contract.SendMessage(&_CrossDomainMessenger.TransactOpts, _target, _message, _minGasLimit) -} - -// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. -// -// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() -func (_CrossDomainMessenger *CrossDomainMessengerTransactorSession) SendMessage(_target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { - return _CrossDomainMessenger.Contract.SendMessage(&_CrossDomainMessenger.TransactOpts, _target, _message, _minGasLimit) -} - -// CrossDomainMessengerFailedRelayedMessageIterator is returned from FilterFailedRelayedMessage and is used to iterate over the raw logs and unpacked data for FailedRelayedMessage events raised by the CrossDomainMessenger contract. -type CrossDomainMessengerFailedRelayedMessageIterator struct { - Event *CrossDomainMessengerFailedRelayedMessage // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *CrossDomainMessengerFailedRelayedMessageIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(CrossDomainMessengerFailedRelayedMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(CrossDomainMessengerFailedRelayedMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *CrossDomainMessengerFailedRelayedMessageIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *CrossDomainMessengerFailedRelayedMessageIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// CrossDomainMessengerFailedRelayedMessage represents a FailedRelayedMessage event raised by the CrossDomainMessenger contract. -type CrossDomainMessengerFailedRelayedMessage struct { - MsgHash [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterFailedRelayedMessage is a free log retrieval operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. -// -// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) -func (_CrossDomainMessenger *CrossDomainMessengerFilterer) FilterFailedRelayedMessage(opts *bind.FilterOpts, msgHash [][32]byte) (*CrossDomainMessengerFailedRelayedMessageIterator, error) { - - var msgHashRule []interface{} - for _, msgHashItem := range msgHash { - msgHashRule = append(msgHashRule, msgHashItem) - } - - logs, sub, err := _CrossDomainMessenger.contract.FilterLogs(opts, "FailedRelayedMessage", msgHashRule) - if err != nil { - return nil, err - } - return &CrossDomainMessengerFailedRelayedMessageIterator{contract: _CrossDomainMessenger.contract, event: "FailedRelayedMessage", logs: logs, sub: sub}, nil -} - -// WatchFailedRelayedMessage is a free log subscription operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. -// -// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) -func (_CrossDomainMessenger *CrossDomainMessengerFilterer) WatchFailedRelayedMessage(opts *bind.WatchOpts, sink chan<- *CrossDomainMessengerFailedRelayedMessage, msgHash [][32]byte) (event.Subscription, error) { - - var msgHashRule []interface{} - for _, msgHashItem := range msgHash { - msgHashRule = append(msgHashRule, msgHashItem) - } - - logs, sub, err := _CrossDomainMessenger.contract.WatchLogs(opts, "FailedRelayedMessage", msgHashRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(CrossDomainMessengerFailedRelayedMessage) - if err := _CrossDomainMessenger.contract.UnpackLog(event, "FailedRelayedMessage", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseFailedRelayedMessage is a log parse operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. -// -// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) -func (_CrossDomainMessenger *CrossDomainMessengerFilterer) ParseFailedRelayedMessage(log types.Log) (*CrossDomainMessengerFailedRelayedMessage, error) { - event := new(CrossDomainMessengerFailedRelayedMessage) - if err := _CrossDomainMessenger.contract.UnpackLog(event, "FailedRelayedMessage", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// CrossDomainMessengerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the CrossDomainMessenger contract. -type CrossDomainMessengerInitializedIterator struct { - Event *CrossDomainMessengerInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *CrossDomainMessengerInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(CrossDomainMessengerInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(CrossDomainMessengerInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *CrossDomainMessengerInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *CrossDomainMessengerInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// CrossDomainMessengerInitialized represents a Initialized event raised by the CrossDomainMessenger contract. -type CrossDomainMessengerInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_CrossDomainMessenger *CrossDomainMessengerFilterer) FilterInitialized(opts *bind.FilterOpts) (*CrossDomainMessengerInitializedIterator, error) { - - logs, sub, err := _CrossDomainMessenger.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &CrossDomainMessengerInitializedIterator{contract: _CrossDomainMessenger.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_CrossDomainMessenger *CrossDomainMessengerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *CrossDomainMessengerInitialized) (event.Subscription, error) { - - logs, sub, err := _CrossDomainMessenger.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(CrossDomainMessengerInitialized) - if err := _CrossDomainMessenger.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_CrossDomainMessenger *CrossDomainMessengerFilterer) ParseInitialized(log types.Log) (*CrossDomainMessengerInitialized, error) { - event := new(CrossDomainMessengerInitialized) - if err := _CrossDomainMessenger.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// CrossDomainMessengerRelayedMessageIterator is returned from FilterRelayedMessage and is used to iterate over the raw logs and unpacked data for RelayedMessage events raised by the CrossDomainMessenger contract. -type CrossDomainMessengerRelayedMessageIterator struct { - Event *CrossDomainMessengerRelayedMessage // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *CrossDomainMessengerRelayedMessageIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(CrossDomainMessengerRelayedMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(CrossDomainMessengerRelayedMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *CrossDomainMessengerRelayedMessageIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *CrossDomainMessengerRelayedMessageIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// CrossDomainMessengerRelayedMessage represents a RelayedMessage event raised by the CrossDomainMessenger contract. -type CrossDomainMessengerRelayedMessage struct { - MsgHash [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRelayedMessage is a free log retrieval operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. -// -// Solidity: event RelayedMessage(bytes32 indexed msgHash) -func (_CrossDomainMessenger *CrossDomainMessengerFilterer) FilterRelayedMessage(opts *bind.FilterOpts, msgHash [][32]byte) (*CrossDomainMessengerRelayedMessageIterator, error) { - - var msgHashRule []interface{} - for _, msgHashItem := range msgHash { - msgHashRule = append(msgHashRule, msgHashItem) - } - - logs, sub, err := _CrossDomainMessenger.contract.FilterLogs(opts, "RelayedMessage", msgHashRule) - if err != nil { - return nil, err - } - return &CrossDomainMessengerRelayedMessageIterator{contract: _CrossDomainMessenger.contract, event: "RelayedMessage", logs: logs, sub: sub}, nil -} - -// WatchRelayedMessage is a free log subscription operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. -// -// Solidity: event RelayedMessage(bytes32 indexed msgHash) -func (_CrossDomainMessenger *CrossDomainMessengerFilterer) WatchRelayedMessage(opts *bind.WatchOpts, sink chan<- *CrossDomainMessengerRelayedMessage, msgHash [][32]byte) (event.Subscription, error) { - - var msgHashRule []interface{} - for _, msgHashItem := range msgHash { - msgHashRule = append(msgHashRule, msgHashItem) - } - - logs, sub, err := _CrossDomainMessenger.contract.WatchLogs(opts, "RelayedMessage", msgHashRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(CrossDomainMessengerRelayedMessage) - if err := _CrossDomainMessenger.contract.UnpackLog(event, "RelayedMessage", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseRelayedMessage is a log parse operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. -// -// Solidity: event RelayedMessage(bytes32 indexed msgHash) -func (_CrossDomainMessenger *CrossDomainMessengerFilterer) ParseRelayedMessage(log types.Log) (*CrossDomainMessengerRelayedMessage, error) { - event := new(CrossDomainMessengerRelayedMessage) - if err := _CrossDomainMessenger.contract.UnpackLog(event, "RelayedMessage", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// CrossDomainMessengerSentMessageIterator is returned from FilterSentMessage and is used to iterate over the raw logs and unpacked data for SentMessage events raised by the CrossDomainMessenger contract. -type CrossDomainMessengerSentMessageIterator struct { - Event *CrossDomainMessengerSentMessage // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *CrossDomainMessengerSentMessageIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(CrossDomainMessengerSentMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(CrossDomainMessengerSentMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *CrossDomainMessengerSentMessageIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *CrossDomainMessengerSentMessageIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// CrossDomainMessengerSentMessage represents a SentMessage event raised by the CrossDomainMessenger contract. -type CrossDomainMessengerSentMessage struct { - Target common.Address - Sender common.Address - Message []byte - MessageNonce *big.Int - GasLimit *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSentMessage is a free log retrieval operation binding the contract event 0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a. -// -// Solidity: event SentMessage(address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit) -func (_CrossDomainMessenger *CrossDomainMessengerFilterer) FilterSentMessage(opts *bind.FilterOpts, target []common.Address) (*CrossDomainMessengerSentMessageIterator, error) { - - var targetRule []interface{} - for _, targetItem := range target { - targetRule = append(targetRule, targetItem) - } - - logs, sub, err := _CrossDomainMessenger.contract.FilterLogs(opts, "SentMessage", targetRule) - if err != nil { - return nil, err - } - return &CrossDomainMessengerSentMessageIterator{contract: _CrossDomainMessenger.contract, event: "SentMessage", logs: logs, sub: sub}, nil -} - -// WatchSentMessage is a free log subscription operation binding the contract event 0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a. -// -// Solidity: event SentMessage(address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit) -func (_CrossDomainMessenger *CrossDomainMessengerFilterer) WatchSentMessage(opts *bind.WatchOpts, sink chan<- *CrossDomainMessengerSentMessage, target []common.Address) (event.Subscription, error) { - - var targetRule []interface{} - for _, targetItem := range target { - targetRule = append(targetRule, targetItem) - } - - logs, sub, err := _CrossDomainMessenger.contract.WatchLogs(opts, "SentMessage", targetRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(CrossDomainMessengerSentMessage) - if err := _CrossDomainMessenger.contract.UnpackLog(event, "SentMessage", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSentMessage is a log parse operation binding the contract event 0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a. -// -// Solidity: event SentMessage(address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit) -func (_CrossDomainMessenger *CrossDomainMessengerFilterer) ParseSentMessage(log types.Log) (*CrossDomainMessengerSentMessage, error) { - event := new(CrossDomainMessengerSentMessage) - if err := _CrossDomainMessenger.contract.UnpackLog(event, "SentMessage", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// CrossDomainMessengerSentMessageExtension1Iterator is returned from FilterSentMessageExtension1 and is used to iterate over the raw logs and unpacked data for SentMessageExtension1 events raised by the CrossDomainMessenger contract. -type CrossDomainMessengerSentMessageExtension1Iterator struct { - Event *CrossDomainMessengerSentMessageExtension1 // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *CrossDomainMessengerSentMessageExtension1Iterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(CrossDomainMessengerSentMessageExtension1) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(CrossDomainMessengerSentMessageExtension1) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *CrossDomainMessengerSentMessageExtension1Iterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *CrossDomainMessengerSentMessageExtension1Iterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// CrossDomainMessengerSentMessageExtension1 represents a SentMessageExtension1 event raised by the CrossDomainMessenger contract. -type CrossDomainMessengerSentMessageExtension1 struct { - Sender common.Address - Value *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSentMessageExtension1 is a free log retrieval operation binding the contract event 0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546. -// -// Solidity: event SentMessageExtension1(address indexed sender, uint256 value) -func (_CrossDomainMessenger *CrossDomainMessengerFilterer) FilterSentMessageExtension1(opts *bind.FilterOpts, sender []common.Address) (*CrossDomainMessengerSentMessageExtension1Iterator, error) { - - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _CrossDomainMessenger.contract.FilterLogs(opts, "SentMessageExtension1", senderRule) - if err != nil { - return nil, err - } - return &CrossDomainMessengerSentMessageExtension1Iterator{contract: _CrossDomainMessenger.contract, event: "SentMessageExtension1", logs: logs, sub: sub}, nil -} - -// WatchSentMessageExtension1 is a free log subscription operation binding the contract event 0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546. -// -// Solidity: event SentMessageExtension1(address indexed sender, uint256 value) -func (_CrossDomainMessenger *CrossDomainMessengerFilterer) WatchSentMessageExtension1(opts *bind.WatchOpts, sink chan<- *CrossDomainMessengerSentMessageExtension1, sender []common.Address) (event.Subscription, error) { - - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _CrossDomainMessenger.contract.WatchLogs(opts, "SentMessageExtension1", senderRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(CrossDomainMessengerSentMessageExtension1) - if err := _CrossDomainMessenger.contract.UnpackLog(event, "SentMessageExtension1", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSentMessageExtension1 is a log parse operation binding the contract event 0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546. -// -// Solidity: event SentMessageExtension1(address indexed sender, uint256 value) -func (_CrossDomainMessenger *CrossDomainMessengerFilterer) ParseSentMessageExtension1(log types.Log) (*CrossDomainMessengerSentMessageExtension1, error) { - event := new(CrossDomainMessengerSentMessageExtension1) - if err := _CrossDomainMessenger.contract.UnpackLog(event, "SentMessageExtension1", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/indexer/bindings/l1crossdomainmessenger.go b/indexer/bindings/l1crossdomainmessenger.go deleted file mode 100644 index 0aa353e32aff..000000000000 --- a/indexer/bindings/l1crossdomainmessenger.go +++ /dev/null @@ -1,1600 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindings - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// L1CrossDomainMessengerMetaData contains all meta data concerning the L1CrossDomainMessenger contract. -var L1CrossDomainMessengerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PORTAL\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"},{\"name\":\"_portal\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"portal\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b506200001f60008062000025565b6200027f565b600054600160a81b900460ff16158080156200004e57506000546001600160a01b90910460ff16105b806200008557506200006b30620001b960201b620014d61760201c565b158015620000855750600054600160a01b900460ff166001145b620000ee5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011c576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038086166001600160a01b03199283161790925560fc8054928516929091169190911790556200016b734200000000000000000000000000000000000007620001c8565b8015620001b4576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002375760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e5565b60cc546001600160a01b03166200025d5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b611f94806200028f6000396000f3fe6080604052600436106101805760003560e01c80635c975abb116100d6578063a4e7f8bd1161007f578063d764ad0b11610059578063d764ad0b14610463578063db505d8014610476578063ecc70428146104a357600080fd5b8063a4e7f8bd146103e3578063b1b1b20914610413578063b28ade251461044357600080fd5b806383a74074116100b057806383a74074146103a15780638cbeeef2146102b85780639fce812c146103b857600080fd5b80635c975abb1461033a5780636425666b1461035f5780636e296e451461038c57600080fd5b80633dbb202b116101385780634c1d6a69116101125780634c1d6a69146102b857806354fd4d50146102ce5780635644cfdf1461032457600080fd5b80633dbb202b1461025b5780633f827a5a14610270578063485cc9551461029857600080fd5b80630ff754ea116101695780630ff754ea146101cd5780632828d7e81461021957806335e80ab31461022e57600080fd5b8063028f85f7146101855780630c568498146101b8575b600080fd5b34801561019157600080fd5b5061019a601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101c457600080fd5b5061019a603f81565b3480156101d957600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101af565b34801561022557600080fd5b5061019a604081565b34801561023a57600080fd5b5060fb546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b61026e610269366004611a22565b610508565b005b34801561027c57600080fd5b50610285600181565b60405161ffff90911681526020016101af565b3480156102a457600080fd5b5061026e6102b3366004611a89565b610765565b3480156102c457600080fd5b5061019a619c4081565b3480156102da57600080fd5b506103176040518060400160405280600581526020017f322e332e3000000000000000000000000000000000000000000000000000000081525081565b6040516101af9190611b2d565b34801561033057600080fd5b5061019a61138881565b34801561034657600080fd5b5061034f6109d3565b60405190151581526020016101af565b34801561036b57600080fd5b5060fc546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039857600080fd5b506101f4610a6c565b3480156103ad57600080fd5b5061019a62030d4081565b3480156103c457600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101f4565b3480156103ef57600080fd5b5061034f6103fe366004611b47565b60ce6020526000908152604090205460ff1681565b34801561041f57600080fd5b5061034f61042e366004611b47565b60cb6020526000908152604090205460ff1681565b34801561044f57600080fd5b5061019a61045e366004611b60565b610b53565b61026e610471366004611bb4565b610bc1565b34801561048257600080fd5b5060cf546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104af57600080fd5b506104fa60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101af565b60cf5461063a9073ffffffffffffffffffffffffffffffffffffffff16610530858585610b53565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061059c60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016105b89796959493929190611c83565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526114f2565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856106bf60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516106d1959493929190611ce2565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b6000547501000000000000000000000000000000000000000000900460ff16158080156107b0575060005460017401000000000000000000000000000000000000000090910460ff16105b806107e25750303b1580156107e2575060005474010000000000000000000000000000000000000000900460ff166001145b610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905580156108f957600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc80549285169290911691909117905561096b73420000000000000000000000000000000000000761158b565b80156109ce57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a679190611d30565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610b36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f74207365740000000000000000000000606482015260840161086a565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b6f604063ffffffff8816611d81565b610b799190611db1565b610b84601088611d81565b610b919062030d40611dff565b610b9b9190611dff565b610ba59190611dff565b610baf9190611dff565b610bb99190611dff565b949350505050565b610bc96109d3565b15610c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a2070617573656400000000604482015260640161086a565b60f087901c60028110610ceb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a40161086a565b8061ffff16600003610de0576000610d3c878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506116c7915050565b600081815260cb602052604090205490915060ff1615610dde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c61796564000000000000000000606482015260840161086a565b505b6000610e26898989898989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116e692505050565b9050610e30611709565b15610e6857853414610e4457610e44611e2b565b600081815260ce602052604090205460ff1615610e6357610e63611e2b565b610fba565b3415610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a40161086a565b600081815260ce602052604090205460ff16610fba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c6179656400000000000000000000000000000000606482015260840161086a565b610fc3876117e5565b15611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a40161086a565b600081815260cb602052604090205460ff1615611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c6179656400000000000000000000606482015260840161086a565b61113685611127611388619c40611dff565b67ffffffffffffffff1661182b565b158061115c575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561127557600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161086a565b50506114cd565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061130688619c405a6112c99190611e5a565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061184992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156113bc57600082815260cb602052604090205460ff161561135957611359611e2b565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26114c9565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016114c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161086a565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611553908890839089906000908990600401611e71565b6000604051808303818588803b15801561156c57600080fd5b505af1158015611580573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161086a565b60cc5473ffffffffffffffffffffffffffffffffffffffff166116805760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006116d585858585611863565b805190602001209050949350505050565b60006116f68787878787876118fc565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a67575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156117a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c99190611ec9565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611825575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60608484848460405160240161187c9493929190611ee6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606086868686868660405160240161191996959493929190611f30565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146119bd57600080fd5b50565b60008083601f8401126119d257600080fd5b50813567ffffffffffffffff8111156119ea57600080fd5b602083019150836020828501011115611a0257600080fd5b9250929050565b803563ffffffff81168114611a1d57600080fd5b919050565b60008060008060608587031215611a3857600080fd5b8435611a438161199b565b9350602085013567ffffffffffffffff811115611a5f57600080fd5b611a6b878288016119c0565b9094509250611a7e905060408601611a09565b905092959194509250565b60008060408385031215611a9c57600080fd5b8235611aa78161199b565b91506020830135611ab78161199b565b809150509250929050565b6000815180845260005b81811015611ae857602081850181015186830182015201611acc565b81811115611afa576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b406020830184611ac2565b9392505050565b600060208284031215611b5957600080fd5b5035919050565b600080600060408486031215611b7557600080fd5b833567ffffffffffffffff811115611b8c57600080fd5b611b98868287016119c0565b9094509250611bab905060208501611a09565b90509250925092565b600080600080600080600060c0888a031215611bcf57600080fd5b873596506020880135611be18161199b565b95506040880135611bf18161199b565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611c1b57600080fd5b611c278a828b016119c0565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611cd560c083018486611c3a565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611d12608083018688611c3a565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611d4257600080fd5b81518015158114611b4057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611da857611da8611d52565b02949350505050565b600067ffffffffffffffff80841680611df3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611e2257611e22611d52565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611e6c57611e6c611d52565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a060808201526000611ebe60a0830184611ac2565b979650505050505050565b600060208284031215611edb57600080fd5b8151611b408161199b565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611f1f6080830185611ac2565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611f7b60c0830184611ac2565b9897505050505050505056fea164736f6c634300080f000a", -} - -// L1CrossDomainMessengerABI is the input ABI used to generate the binding from. -// Deprecated: Use L1CrossDomainMessengerMetaData.ABI instead. -var L1CrossDomainMessengerABI = L1CrossDomainMessengerMetaData.ABI - -// L1CrossDomainMessengerBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use L1CrossDomainMessengerMetaData.Bin instead. -var L1CrossDomainMessengerBin = L1CrossDomainMessengerMetaData.Bin - -// DeployL1CrossDomainMessenger deploys a new Ethereum contract, binding an instance of L1CrossDomainMessenger to it. -func DeployL1CrossDomainMessenger(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *L1CrossDomainMessenger, error) { - parsed, err := L1CrossDomainMessengerMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(L1CrossDomainMessengerBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &L1CrossDomainMessenger{L1CrossDomainMessengerCaller: L1CrossDomainMessengerCaller{contract: contract}, L1CrossDomainMessengerTransactor: L1CrossDomainMessengerTransactor{contract: contract}, L1CrossDomainMessengerFilterer: L1CrossDomainMessengerFilterer{contract: contract}}, nil -} - -// L1CrossDomainMessenger is an auto generated Go binding around an Ethereum contract. -type L1CrossDomainMessenger struct { - L1CrossDomainMessengerCaller // Read-only binding to the contract - L1CrossDomainMessengerTransactor // Write-only binding to the contract - L1CrossDomainMessengerFilterer // Log filterer for contract events -} - -// L1CrossDomainMessengerCaller is an auto generated read-only Go binding around an Ethereum contract. -type L1CrossDomainMessengerCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L1CrossDomainMessengerTransactor is an auto generated write-only Go binding around an Ethereum contract. -type L1CrossDomainMessengerTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L1CrossDomainMessengerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type L1CrossDomainMessengerFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L1CrossDomainMessengerSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type L1CrossDomainMessengerSession struct { - Contract *L1CrossDomainMessenger // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// L1CrossDomainMessengerCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type L1CrossDomainMessengerCallerSession struct { - Contract *L1CrossDomainMessengerCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// L1CrossDomainMessengerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type L1CrossDomainMessengerTransactorSession struct { - Contract *L1CrossDomainMessengerTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// L1CrossDomainMessengerRaw is an auto generated low-level Go binding around an Ethereum contract. -type L1CrossDomainMessengerRaw struct { - Contract *L1CrossDomainMessenger // Generic contract binding to access the raw methods on -} - -// L1CrossDomainMessengerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type L1CrossDomainMessengerCallerRaw struct { - Contract *L1CrossDomainMessengerCaller // Generic read-only contract binding to access the raw methods on -} - -// L1CrossDomainMessengerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type L1CrossDomainMessengerTransactorRaw struct { - Contract *L1CrossDomainMessengerTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewL1CrossDomainMessenger creates a new instance of L1CrossDomainMessenger, bound to a specific deployed contract. -func NewL1CrossDomainMessenger(address common.Address, backend bind.ContractBackend) (*L1CrossDomainMessenger, error) { - contract, err := bindL1CrossDomainMessenger(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &L1CrossDomainMessenger{L1CrossDomainMessengerCaller: L1CrossDomainMessengerCaller{contract: contract}, L1CrossDomainMessengerTransactor: L1CrossDomainMessengerTransactor{contract: contract}, L1CrossDomainMessengerFilterer: L1CrossDomainMessengerFilterer{contract: contract}}, nil -} - -// NewL1CrossDomainMessengerCaller creates a new read-only instance of L1CrossDomainMessenger, bound to a specific deployed contract. -func NewL1CrossDomainMessengerCaller(address common.Address, caller bind.ContractCaller) (*L1CrossDomainMessengerCaller, error) { - contract, err := bindL1CrossDomainMessenger(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &L1CrossDomainMessengerCaller{contract: contract}, nil -} - -// NewL1CrossDomainMessengerTransactor creates a new write-only instance of L1CrossDomainMessenger, bound to a specific deployed contract. -func NewL1CrossDomainMessengerTransactor(address common.Address, transactor bind.ContractTransactor) (*L1CrossDomainMessengerTransactor, error) { - contract, err := bindL1CrossDomainMessenger(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &L1CrossDomainMessengerTransactor{contract: contract}, nil -} - -// NewL1CrossDomainMessengerFilterer creates a new log filterer instance of L1CrossDomainMessenger, bound to a specific deployed contract. -func NewL1CrossDomainMessengerFilterer(address common.Address, filterer bind.ContractFilterer) (*L1CrossDomainMessengerFilterer, error) { - contract, err := bindL1CrossDomainMessenger(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &L1CrossDomainMessengerFilterer{contract: contract}, nil -} - -// bindL1CrossDomainMessenger binds a generic wrapper to an already deployed contract. -func bindL1CrossDomainMessenger(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(L1CrossDomainMessengerABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_L1CrossDomainMessenger *L1CrossDomainMessengerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _L1CrossDomainMessenger.Contract.L1CrossDomainMessengerCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_L1CrossDomainMessenger *L1CrossDomainMessengerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.L1CrossDomainMessengerTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_L1CrossDomainMessenger *L1CrossDomainMessengerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.L1CrossDomainMessengerTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _L1CrossDomainMessenger.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.contract.Transact(opts, method, params...) -} - -// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. -// -// Solidity: function MESSAGE_VERSION() view returns(uint16) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) MESSAGEVERSION(opts *bind.CallOpts) (uint16, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "MESSAGE_VERSION") - - if err != nil { - return *new(uint16), err - } - - out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) - - return out0, err - -} - -// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. -// -// Solidity: function MESSAGE_VERSION() view returns(uint16) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) MESSAGEVERSION() (uint16, error) { - return _L1CrossDomainMessenger.Contract.MESSAGEVERSION(&_L1CrossDomainMessenger.CallOpts) -} - -// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. -// -// Solidity: function MESSAGE_VERSION() view returns(uint16) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) MESSAGEVERSION() (uint16, error) { - return _L1CrossDomainMessenger.Contract.MESSAGEVERSION(&_L1CrossDomainMessenger.CallOpts) -} - -// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. -// -// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) MINGASCALLDATAOVERHEAD(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_CALLDATA_OVERHEAD") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. -// -// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) MINGASCALLDATAOVERHEAD() (uint64, error) { - return _L1CrossDomainMessenger.Contract.MINGASCALLDATAOVERHEAD(&_L1CrossDomainMessenger.CallOpts) -} - -// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. -// -// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) MINGASCALLDATAOVERHEAD() (uint64, error) { - return _L1CrossDomainMessenger.Contract.MINGASCALLDATAOVERHEAD(&_L1CrossDomainMessenger.CallOpts) -} - -// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) MINGASDYNAMICOVERHEADDENOMINATOR(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) MINGASDYNAMICOVERHEADDENOMINATOR() (uint64, error) { - return _L1CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADDENOMINATOR(&_L1CrossDomainMessenger.CallOpts) -} - -// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) MINGASDYNAMICOVERHEADDENOMINATOR() (uint64, error) { - return _L1CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADDENOMINATOR(&_L1CrossDomainMessenger.CallOpts) -} - -// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) MINGASDYNAMICOVERHEADNUMERATOR(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) MINGASDYNAMICOVERHEADNUMERATOR() (uint64, error) { - return _L1CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADNUMERATOR(&_L1CrossDomainMessenger.CallOpts) -} - -// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) MINGASDYNAMICOVERHEADNUMERATOR() (uint64, error) { - return _L1CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADNUMERATOR(&_L1CrossDomainMessenger.CallOpts) -} - -// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. -// -// Solidity: function OTHER_MESSENGER() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) OTHERMESSENGER(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "OTHER_MESSENGER") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. -// -// Solidity: function OTHER_MESSENGER() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) OTHERMESSENGER() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.OTHERMESSENGER(&_L1CrossDomainMessenger.CallOpts) -} - -// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. -// -// Solidity: function OTHER_MESSENGER() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) OTHERMESSENGER() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.OTHERMESSENGER(&_L1CrossDomainMessenger.CallOpts) -} - -// PORTAL is a free data retrieval call binding the contract method 0x0ff754ea. -// -// Solidity: function PORTAL() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) PORTAL(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "PORTAL") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// PORTAL is a free data retrieval call binding the contract method 0x0ff754ea. -// -// Solidity: function PORTAL() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) PORTAL() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.PORTAL(&_L1CrossDomainMessenger.CallOpts) -} - -// PORTAL is a free data retrieval call binding the contract method 0x0ff754ea. -// -// Solidity: function PORTAL() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) PORTAL() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.PORTAL(&_L1CrossDomainMessenger.CallOpts) -} - -// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. -// -// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) RELAYCALLOVERHEAD(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "RELAY_CALL_OVERHEAD") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. -// -// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) RELAYCALLOVERHEAD() (uint64, error) { - return _L1CrossDomainMessenger.Contract.RELAYCALLOVERHEAD(&_L1CrossDomainMessenger.CallOpts) -} - -// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. -// -// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) RELAYCALLOVERHEAD() (uint64, error) { - return _L1CrossDomainMessenger.Contract.RELAYCALLOVERHEAD(&_L1CrossDomainMessenger.CallOpts) -} - -// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. -// -// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) RELAYCONSTANTOVERHEAD(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "RELAY_CONSTANT_OVERHEAD") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. -// -// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) RELAYCONSTANTOVERHEAD() (uint64, error) { - return _L1CrossDomainMessenger.Contract.RELAYCONSTANTOVERHEAD(&_L1CrossDomainMessenger.CallOpts) -} - -// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. -// -// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) RELAYCONSTANTOVERHEAD() (uint64, error) { - return _L1CrossDomainMessenger.Contract.RELAYCONSTANTOVERHEAD(&_L1CrossDomainMessenger.CallOpts) -} - -// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. -// -// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) RELAYGASCHECKBUFFER(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "RELAY_GAS_CHECK_BUFFER") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. -// -// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) RELAYGASCHECKBUFFER() (uint64, error) { - return _L1CrossDomainMessenger.Contract.RELAYGASCHECKBUFFER(&_L1CrossDomainMessenger.CallOpts) -} - -// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. -// -// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) RELAYGASCHECKBUFFER() (uint64, error) { - return _L1CrossDomainMessenger.Contract.RELAYGASCHECKBUFFER(&_L1CrossDomainMessenger.CallOpts) -} - -// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. -// -// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) RELAYRESERVEDGAS(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "RELAY_RESERVED_GAS") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. -// -// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) RELAYRESERVEDGAS() (uint64, error) { - return _L1CrossDomainMessenger.Contract.RELAYRESERVEDGAS(&_L1CrossDomainMessenger.CallOpts) -} - -// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. -// -// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) RELAYRESERVEDGAS() (uint64, error) { - return _L1CrossDomainMessenger.Contract.RELAYRESERVEDGAS(&_L1CrossDomainMessenger.CallOpts) -} - -// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. -// -// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) BaseGas(opts *bind.CallOpts, _message []byte, _minGasLimit uint32) (uint64, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "baseGas", _message, _minGasLimit) - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. -// -// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) BaseGas(_message []byte, _minGasLimit uint32) (uint64, error) { - return _L1CrossDomainMessenger.Contract.BaseGas(&_L1CrossDomainMessenger.CallOpts, _message, _minGasLimit) -} - -// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. -// -// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) BaseGas(_message []byte, _minGasLimit uint32) (uint64, error) { - return _L1CrossDomainMessenger.Contract.BaseGas(&_L1CrossDomainMessenger.CallOpts, _message, _minGasLimit) -} - -// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. -// -// Solidity: function failedMessages(bytes32 ) view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) FailedMessages(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "failedMessages", arg0) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. -// -// Solidity: function failedMessages(bytes32 ) view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) FailedMessages(arg0 [32]byte) (bool, error) { - return _L1CrossDomainMessenger.Contract.FailedMessages(&_L1CrossDomainMessenger.CallOpts, arg0) -} - -// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. -// -// Solidity: function failedMessages(bytes32 ) view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) FailedMessages(arg0 [32]byte) (bool, error) { - return _L1CrossDomainMessenger.Contract.FailedMessages(&_L1CrossDomainMessenger.CallOpts, arg0) -} - -// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. -// -// Solidity: function messageNonce() view returns(uint256) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) MessageNonce(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "messageNonce") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. -// -// Solidity: function messageNonce() view returns(uint256) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) MessageNonce() (*big.Int, error) { - return _L1CrossDomainMessenger.Contract.MessageNonce(&_L1CrossDomainMessenger.CallOpts) -} - -// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. -// -// Solidity: function messageNonce() view returns(uint256) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) MessageNonce() (*big.Int, error) { - return _L1CrossDomainMessenger.Contract.MessageNonce(&_L1CrossDomainMessenger.CallOpts) -} - -// OtherMessenger is a free data retrieval call binding the contract method 0xdb505d80. -// -// Solidity: function otherMessenger() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) OtherMessenger(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "otherMessenger") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OtherMessenger is a free data retrieval call binding the contract method 0xdb505d80. -// -// Solidity: function otherMessenger() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) OtherMessenger() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.OtherMessenger(&_L1CrossDomainMessenger.CallOpts) -} - -// OtherMessenger is a free data retrieval call binding the contract method 0xdb505d80. -// -// Solidity: function otherMessenger() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) OtherMessenger() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.OtherMessenger(&_L1CrossDomainMessenger.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) Paused(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "paused") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) Paused() (bool, error) { - return _L1CrossDomainMessenger.Contract.Paused(&_L1CrossDomainMessenger.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) Paused() (bool, error) { - return _L1CrossDomainMessenger.Contract.Paused(&_L1CrossDomainMessenger.CallOpts) -} - -// Portal is a free data retrieval call binding the contract method 0x6425666b. -// -// Solidity: function portal() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) Portal(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "portal") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Portal is a free data retrieval call binding the contract method 0x6425666b. -// -// Solidity: function portal() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) Portal() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.Portal(&_L1CrossDomainMessenger.CallOpts) -} - -// Portal is a free data retrieval call binding the contract method 0x6425666b. -// -// Solidity: function portal() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) Portal() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.Portal(&_L1CrossDomainMessenger.CallOpts) -} - -// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. -// -// Solidity: function successfulMessages(bytes32 ) view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) SuccessfulMessages(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "successfulMessages", arg0) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. -// -// Solidity: function successfulMessages(bytes32 ) view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) SuccessfulMessages(arg0 [32]byte) (bool, error) { - return _L1CrossDomainMessenger.Contract.SuccessfulMessages(&_L1CrossDomainMessenger.CallOpts, arg0) -} - -// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. -// -// Solidity: function successfulMessages(bytes32 ) view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) SuccessfulMessages(arg0 [32]byte) (bool, error) { - return _L1CrossDomainMessenger.Contract.SuccessfulMessages(&_L1CrossDomainMessenger.CallOpts, arg0) -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) SuperchainConfig(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "superchainConfig") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) SuperchainConfig() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.SuperchainConfig(&_L1CrossDomainMessenger.CallOpts) -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) SuperchainConfig() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.SuperchainConfig(&_L1CrossDomainMessenger.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) Version() (string, error) { - return _L1CrossDomainMessenger.Contract.Version(&_L1CrossDomainMessenger.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) Version() (string, error) { - return _L1CrossDomainMessenger.Contract.Version(&_L1CrossDomainMessenger.CallOpts) -} - -// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. -// -// Solidity: function xDomainMessageSender() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) XDomainMessageSender(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "xDomainMessageSender") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. -// -// Solidity: function xDomainMessageSender() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) XDomainMessageSender() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.XDomainMessageSender(&_L1CrossDomainMessenger.CallOpts) -} - -// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. -// -// Solidity: function xDomainMessageSender() view returns(address) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) XDomainMessageSender() (common.Address, error) { - return _L1CrossDomainMessenger.Contract.XDomainMessageSender(&_L1CrossDomainMessenger.CallOpts) -} - -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _superchainConfig, address _portal) returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactor) Initialize(opts *bind.TransactOpts, _superchainConfig common.Address, _portal common.Address) (*types.Transaction, error) { - return _L1CrossDomainMessenger.contract.Transact(opts, "initialize", _superchainConfig, _portal) -} - -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _superchainConfig, address _portal) returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) Initialize(_superchainConfig common.Address, _portal common.Address) (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.Initialize(&_L1CrossDomainMessenger.TransactOpts, _superchainConfig, _portal) -} - -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _superchainConfig, address _portal) returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactorSession) Initialize(_superchainConfig common.Address, _portal common.Address) (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.Initialize(&_L1CrossDomainMessenger.TransactOpts, _superchainConfig, _portal) -} - -// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. -// -// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactor) RelayMessage(opts *bind.TransactOpts, _nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { - return _L1CrossDomainMessenger.contract.Transact(opts, "relayMessage", _nonce, _sender, _target, _value, _minGasLimit, _message) -} - -// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. -// -// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) RelayMessage(_nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.RelayMessage(&_L1CrossDomainMessenger.TransactOpts, _nonce, _sender, _target, _value, _minGasLimit, _message) -} - -// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. -// -// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactorSession) RelayMessage(_nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.RelayMessage(&_L1CrossDomainMessenger.TransactOpts, _nonce, _sender, _target, _value, _minGasLimit, _message) -} - -// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. -// -// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactor) SendMessage(opts *bind.TransactOpts, _target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { - return _L1CrossDomainMessenger.contract.Transact(opts, "sendMessage", _target, _message, _minGasLimit) -} - -// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. -// -// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) SendMessage(_target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.SendMessage(&_L1CrossDomainMessenger.TransactOpts, _target, _message, _minGasLimit) -} - -// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. -// -// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactorSession) SendMessage(_target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.SendMessage(&_L1CrossDomainMessenger.TransactOpts, _target, _message, _minGasLimit) -} - -// L1CrossDomainMessengerFailedRelayedMessageIterator is returned from FilterFailedRelayedMessage and is used to iterate over the raw logs and unpacked data for FailedRelayedMessage events raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerFailedRelayedMessageIterator struct { - Event *L1CrossDomainMessengerFailedRelayedMessage // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1CrossDomainMessengerFailedRelayedMessageIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerFailedRelayedMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerFailedRelayedMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1CrossDomainMessengerFailedRelayedMessageIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1CrossDomainMessengerFailedRelayedMessageIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1CrossDomainMessengerFailedRelayedMessage represents a FailedRelayedMessage event raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerFailedRelayedMessage struct { - MsgHash [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterFailedRelayedMessage is a free log retrieval operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. -// -// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) FilterFailedRelayedMessage(opts *bind.FilterOpts, msgHash [][32]byte) (*L1CrossDomainMessengerFailedRelayedMessageIterator, error) { - - var msgHashRule []interface{} - for _, msgHashItem := range msgHash { - msgHashRule = append(msgHashRule, msgHashItem) - } - - logs, sub, err := _L1CrossDomainMessenger.contract.FilterLogs(opts, "FailedRelayedMessage", msgHashRule) - if err != nil { - return nil, err - } - return &L1CrossDomainMessengerFailedRelayedMessageIterator{contract: _L1CrossDomainMessenger.contract, event: "FailedRelayedMessage", logs: logs, sub: sub}, nil -} - -// WatchFailedRelayedMessage is a free log subscription operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. -// -// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchFailedRelayedMessage(opts *bind.WatchOpts, sink chan<- *L1CrossDomainMessengerFailedRelayedMessage, msgHash [][32]byte) (event.Subscription, error) { - - var msgHashRule []interface{} - for _, msgHashItem := range msgHash { - msgHashRule = append(msgHashRule, msgHashItem) - } - - logs, sub, err := _L1CrossDomainMessenger.contract.WatchLogs(opts, "FailedRelayedMessage", msgHashRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1CrossDomainMessengerFailedRelayedMessage) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "FailedRelayedMessage", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseFailedRelayedMessage is a log parse operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. -// -// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) ParseFailedRelayedMessage(log types.Log) (*L1CrossDomainMessengerFailedRelayedMessage, error) { - event := new(L1CrossDomainMessengerFailedRelayedMessage) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "FailedRelayedMessage", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1CrossDomainMessengerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerInitializedIterator struct { - Event *L1CrossDomainMessengerInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1CrossDomainMessengerInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1CrossDomainMessengerInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1CrossDomainMessengerInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1CrossDomainMessengerInitialized represents a Initialized event raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) FilterInitialized(opts *bind.FilterOpts) (*L1CrossDomainMessengerInitializedIterator, error) { - - logs, sub, err := _L1CrossDomainMessenger.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &L1CrossDomainMessengerInitializedIterator{contract: _L1CrossDomainMessenger.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *L1CrossDomainMessengerInitialized) (event.Subscription, error) { - - logs, sub, err := _L1CrossDomainMessenger.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1CrossDomainMessengerInitialized) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) ParseInitialized(log types.Log) (*L1CrossDomainMessengerInitialized, error) { - event := new(L1CrossDomainMessengerInitialized) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1CrossDomainMessengerRelayedMessageIterator is returned from FilterRelayedMessage and is used to iterate over the raw logs and unpacked data for RelayedMessage events raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerRelayedMessageIterator struct { - Event *L1CrossDomainMessengerRelayedMessage // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1CrossDomainMessengerRelayedMessageIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerRelayedMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerRelayedMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1CrossDomainMessengerRelayedMessageIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1CrossDomainMessengerRelayedMessageIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1CrossDomainMessengerRelayedMessage represents a RelayedMessage event raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerRelayedMessage struct { - MsgHash [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRelayedMessage is a free log retrieval operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. -// -// Solidity: event RelayedMessage(bytes32 indexed msgHash) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) FilterRelayedMessage(opts *bind.FilterOpts, msgHash [][32]byte) (*L1CrossDomainMessengerRelayedMessageIterator, error) { - - var msgHashRule []interface{} - for _, msgHashItem := range msgHash { - msgHashRule = append(msgHashRule, msgHashItem) - } - - logs, sub, err := _L1CrossDomainMessenger.contract.FilterLogs(opts, "RelayedMessage", msgHashRule) - if err != nil { - return nil, err - } - return &L1CrossDomainMessengerRelayedMessageIterator{contract: _L1CrossDomainMessenger.contract, event: "RelayedMessage", logs: logs, sub: sub}, nil -} - -// WatchRelayedMessage is a free log subscription operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. -// -// Solidity: event RelayedMessage(bytes32 indexed msgHash) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchRelayedMessage(opts *bind.WatchOpts, sink chan<- *L1CrossDomainMessengerRelayedMessage, msgHash [][32]byte) (event.Subscription, error) { - - var msgHashRule []interface{} - for _, msgHashItem := range msgHash { - msgHashRule = append(msgHashRule, msgHashItem) - } - - logs, sub, err := _L1CrossDomainMessenger.contract.WatchLogs(opts, "RelayedMessage", msgHashRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1CrossDomainMessengerRelayedMessage) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "RelayedMessage", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseRelayedMessage is a log parse operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. -// -// Solidity: event RelayedMessage(bytes32 indexed msgHash) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) ParseRelayedMessage(log types.Log) (*L1CrossDomainMessengerRelayedMessage, error) { - event := new(L1CrossDomainMessengerRelayedMessage) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "RelayedMessage", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1CrossDomainMessengerSentMessageIterator is returned from FilterSentMessage and is used to iterate over the raw logs and unpacked data for SentMessage events raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerSentMessageIterator struct { - Event *L1CrossDomainMessengerSentMessage // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1CrossDomainMessengerSentMessageIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerSentMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerSentMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1CrossDomainMessengerSentMessageIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1CrossDomainMessengerSentMessageIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1CrossDomainMessengerSentMessage represents a SentMessage event raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerSentMessage struct { - Target common.Address - Sender common.Address - Message []byte - MessageNonce *big.Int - GasLimit *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSentMessage is a free log retrieval operation binding the contract event 0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a. -// -// Solidity: event SentMessage(address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) FilterSentMessage(opts *bind.FilterOpts, target []common.Address) (*L1CrossDomainMessengerSentMessageIterator, error) { - - var targetRule []interface{} - for _, targetItem := range target { - targetRule = append(targetRule, targetItem) - } - - logs, sub, err := _L1CrossDomainMessenger.contract.FilterLogs(opts, "SentMessage", targetRule) - if err != nil { - return nil, err - } - return &L1CrossDomainMessengerSentMessageIterator{contract: _L1CrossDomainMessenger.contract, event: "SentMessage", logs: logs, sub: sub}, nil -} - -// WatchSentMessage is a free log subscription operation binding the contract event 0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a. -// -// Solidity: event SentMessage(address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchSentMessage(opts *bind.WatchOpts, sink chan<- *L1CrossDomainMessengerSentMessage, target []common.Address) (event.Subscription, error) { - - var targetRule []interface{} - for _, targetItem := range target { - targetRule = append(targetRule, targetItem) - } - - logs, sub, err := _L1CrossDomainMessenger.contract.WatchLogs(opts, "SentMessage", targetRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1CrossDomainMessengerSentMessage) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "SentMessage", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSentMessage is a log parse operation binding the contract event 0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a. -// -// Solidity: event SentMessage(address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) ParseSentMessage(log types.Log) (*L1CrossDomainMessengerSentMessage, error) { - event := new(L1CrossDomainMessengerSentMessage) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "SentMessage", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1CrossDomainMessengerSentMessageExtension1Iterator is returned from FilterSentMessageExtension1 and is used to iterate over the raw logs and unpacked data for SentMessageExtension1 events raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerSentMessageExtension1Iterator struct { - Event *L1CrossDomainMessengerSentMessageExtension1 // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1CrossDomainMessengerSentMessageExtension1Iterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerSentMessageExtension1) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerSentMessageExtension1) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1CrossDomainMessengerSentMessageExtension1Iterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1CrossDomainMessengerSentMessageExtension1Iterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1CrossDomainMessengerSentMessageExtension1 represents a SentMessageExtension1 event raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerSentMessageExtension1 struct { - Sender common.Address - Value *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSentMessageExtension1 is a free log retrieval operation binding the contract event 0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546. -// -// Solidity: event SentMessageExtension1(address indexed sender, uint256 value) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) FilterSentMessageExtension1(opts *bind.FilterOpts, sender []common.Address) (*L1CrossDomainMessengerSentMessageExtension1Iterator, error) { - - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _L1CrossDomainMessenger.contract.FilterLogs(opts, "SentMessageExtension1", senderRule) - if err != nil { - return nil, err - } - return &L1CrossDomainMessengerSentMessageExtension1Iterator{contract: _L1CrossDomainMessenger.contract, event: "SentMessageExtension1", logs: logs, sub: sub}, nil -} - -// WatchSentMessageExtension1 is a free log subscription operation binding the contract event 0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546. -// -// Solidity: event SentMessageExtension1(address indexed sender, uint256 value) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchSentMessageExtension1(opts *bind.WatchOpts, sink chan<- *L1CrossDomainMessengerSentMessageExtension1, sender []common.Address) (event.Subscription, error) { - - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _L1CrossDomainMessenger.contract.WatchLogs(opts, "SentMessageExtension1", senderRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1CrossDomainMessengerSentMessageExtension1) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "SentMessageExtension1", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSentMessageExtension1 is a log parse operation binding the contract event 0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546. -// -// Solidity: event SentMessageExtension1(address indexed sender, uint256 value) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) ParseSentMessageExtension1(log types.Log) (*L1CrossDomainMessengerSentMessageExtension1, error) { - event := new(L1CrossDomainMessengerSentMessageExtension1) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "SentMessageExtension1", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/indexer/bindings/l1standardbridge.go b/indexer/bindings/l1standardbridge.go deleted file mode 100644 index 619df3f3bcb2..000000000000 --- a/indexer/bindings/l1standardbridge.go +++ /dev/null @@ -1,2189 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindings - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// L1StandardBridgeMetaData contains all meta data concerning the L1StandardBridge contract. -var L1StandardBridgeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositERC20\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositERC20To\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeERC20Withdrawal\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeETHWithdrawal\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_messenger\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l2TokenBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20DepositInitiated\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20WithdrawalFinalized\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHDepositInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHWithdrawalFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b506200001f60008062000025565b62000234565b600054610100900460ff1615808015620000465750600054600160ff909116105b8062000076575062000063306200018a60201b620005511760201c565b15801562000076575060005460ff166001145b620000df5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000103576000805461ff0019166101001790555b603280546001600160a01b0319166001600160a01b0384161790556200013e8373420000000000000000000000000000000000001062000199565b801562000185576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b600054610100900460ff16620002065760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d6565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612c4d80620002446000396000f3fe6080604052600436106101795760003560e01c80637f46ddb2116100cb578063927ede2d1161007f578063b1a1a88211610059578063b1a1a882146104fe578063c89701a214610511578063e11013dd1461053e57600080fd5b8063927ede2d146104a05780639a2ac6d5146104cb578063a9f9e675146104de57600080fd5b806387087623116100b0578063870876231461043a5780638f601f661461045a57806391c49bf8146103ef57600080fd5b80637f46ddb2146103ef578063838b25201461041a57600080fd5b80633cb747bf1161012d57806354fd4d501161010757806354fd4d501461035457806358a997f6146103aa5780635c975abb146103ca57600080fd5b80633cb747bf146102e7578063485cc95514610314578063540abf731461033457600080fd5b80631532ec341161015e5780631532ec341461026a5780631635f5fd1461027d57806335e80ab31461029057600080fd5b80630166a07a1461023757806309fc88431461025757600080fd5b3661023257333b15610212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610230333362030d406040518060200160405280600081525061056d565b005b600080fd5b34801561024357600080fd5b506102306102523660046126b1565b610580565b610230610265366004612762565b61099a565b6102306102783660046127b5565b610a71565b61023061028b3660046127b5565b610a85565b34801561029c57600080fd5b506032546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102f357600080fd5b506003546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032057600080fd5b5061023061032f366004612828565b610f4e565b34801561034057600080fd5b5061023061034f366004612861565b611137565b34801561036057600080fd5b5061039d6040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516102de919061294e565b3480156103b657600080fd5b506102306103c5366004612961565b61117c565b3480156103d657600080fd5b506103df611250565b60405190151581526020016102de565b3480156103fb57600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102bd565b34801561042657600080fd5b50610230610435366004612861565b6112e9565b34801561044657600080fd5b50610230610455366004612961565b61132e565b34801561046657600080fd5b50610492610475366004612828565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102de565b3480156104ac57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102bd565b6102306104d93660046129e4565b611402565b3480156104ea57600080fd5b506102306104f93660046126b1565b611444565b61023061050c366004612762565b611453565b34801561051d57600080fd5b506004546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b61023061054c3660046129e4565b611524565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61057a8484348585611567565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610653575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063b9190612a47565b73ffffffffffffffffffffffffffffffffffffffff16145b610705576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610209565b61070d611250565b15610774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610209565b61077d87611731565b156108cb5761078c8787611793565b61083e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610209565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108ae57600080fd5b505af11580156108c2573d6000803e3d6000fd5b5050505061094d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610909908490612a93565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c168352939052919091209190915561094d9085856118b3565b610991878787878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061198792505050565b50505050505050565b333b15610a29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610a6c3333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061156792505050565b505050565b610a7e8585858585610a85565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b58575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b409190612a47565b73ffffffffffffffffffffffffffffffffffffffff16145b610c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610209565b610c12611250565b15610c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610209565b823414610d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610209565b3073ffffffffffffffffffffffffffffffffffffffff851603610dad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610209565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610e58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610209565b610e9a85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a1592505050565b6000610eb7855a8660405180602001604052806000815250611a88565b905080610f46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610209565b505050505050565b600054610100900460ff1615808015610f6e5750600054600160ff909116105b80610f885750303b158015610f88575060005460ff166001145b611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610209565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561107257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556110d083734200000000000000000000000000000000000010611aa2565b8015610a6c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b61099187873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8c92505050565b333b1561120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610f4686863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eb792505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e49190612aaa565b905090565b61099187873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eb792505050565b333b156113bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610f4686863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8c92505050565b61057a33858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061056d92505050565b61099187878787878787610580565b333b156114e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610a6c33338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061056d92505050565b61057a3385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061156792505050565b8234146115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610209565b61160285858584611ec6565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611665908b908b9086908a90602401612acc565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526116f892918890600401612b15565b6000604051808303818588803b15801561171157600080fd5b505af1158015611725573d6000803e3d6000fd5b50505050505050505050565b600061175d827f1d1d8b6300000000000000000000000000000000000000000000000000000000611f39565b8061178d575061178d827fec4fc8e300000000000000000000000000000000000000000000000000000000611f39565b92915050565b60006117bf837f1d1d8b6300000000000000000000000000000000000000000000000000000000611f39565b15611868578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118339190612a47565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905061178d565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180f573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610a6c9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611f5c565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b38686866040516119ff93929190612b5a565b60405180910390a4610f46868686868686612068565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611a74929190612b98565b60405180910390a361057a848484846120f0565b600080600080845160208601878a8af19695505050505050565b600054610100900460ff16611b39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610209565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b611b9587611731565b15611ce357611ba48787611793565b611c56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610209565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611cc657600080fd5b505af1158015611cda573d6000803e3d6000fd5b50505050611d77565b611d0573ffffffffffffffffffffffffffffffffffffffff881686308661215d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611d43908490612bb1565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611d858787878787866121bb565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611de9908b908d908c908c908c908b90602401612bc9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611e7c92918790600401612b15565b600060405180830381600087803b158015611e9657600080fd5b505af1158015611eaa573d6000803e3d6000fd5b5050505050505050505050565b61099187878787878787611b8c565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f238484604051611f25929190612b98565b60405180910390a361057a84848484612249565b6000611f44836122a8565b8015611f555750611f55838361230c565b9392505050565b6000611fbe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166123db9092919063ffffffff16565b805190915015610a6c5780806020019051810190611fdc9190612aaa565b610a6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610209565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516120e093929190612b5a565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161214f929190612b98565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261057a9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611905565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161223393929190612b5a565b60405180910390a4610f468686868686866123f2565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161214f929190612b98565b60006122d4827f01ffc9a70000000000000000000000000000000000000000000000000000000061230c565b801561178d5750612305827fffffffff0000000000000000000000000000000000000000000000000000000061230c565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156123c4575060208210155b80156123d05750600081115b979650505050505050565b60606123ea848460008561246a565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516120e093929190612b5a565b6060824710156124fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610209565b73ffffffffffffffffffffffffffffffffffffffff85163b61257a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610209565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516125a39190612c24565b60006040518083038185875af1925050503d80600081146125e0576040519150601f19603f3d011682016040523d82523d6000602084013e6125e5565b606091505b50915091506123d0828286606083156125ff575081611f55565b82511561260f5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610209919061294e565b73ffffffffffffffffffffffffffffffffffffffff8116811461266557600080fd5b50565b60008083601f84011261267a57600080fd5b50813567ffffffffffffffff81111561269257600080fd5b6020830191508360208285010111156126aa57600080fd5b9250929050565b600080600080600080600060c0888a0312156126cc57600080fd5b87356126d781612643565b965060208801356126e781612643565b955060408801356126f781612643565b9450606088013561270781612643565b93506080880135925060a088013567ffffffffffffffff81111561272a57600080fd5b6127368a828b01612668565b989b979a50959850939692959293505050565b803563ffffffff8116811461275d57600080fd5b919050565b60008060006040848603121561277757600080fd5b61278084612749565b9250602084013567ffffffffffffffff81111561279c57600080fd5b6127a886828701612668565b9497909650939450505050565b6000806000806000608086880312156127cd57600080fd5b85356127d881612643565b945060208601356127e881612643565b935060408601359250606086013567ffffffffffffffff81111561280b57600080fd5b61281788828901612668565b969995985093965092949392505050565b6000806040838503121561283b57600080fd5b823561284681612643565b9150602083013561285681612643565b809150509250929050565b600080600080600080600060c0888a03121561287c57600080fd5b873561288781612643565b9650602088013561289781612643565b955060408801356128a781612643565b9450606088013593506128bc60808901612749565b925060a088013567ffffffffffffffff81111561272a57600080fd5b60005b838110156128f35781810151838201526020016128db565b8381111561057a5750506000910152565b6000815180845261291c8160208601602086016128d8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f556020830184612904565b60008060008060008060a0878903121561297a57600080fd5b863561298581612643565b9550602087013561299581612643565b9450604087013593506129aa60608801612749565b9250608087013567ffffffffffffffff8111156129c657600080fd5b6129d289828a01612668565b979a9699509497509295939492505050565b600080600080606085870312156129fa57600080fd5b8435612a0581612643565b9350612a1360208601612749565b9250604085013567ffffffffffffffff811115612a2f57600080fd5b612a3b87828801612668565b95989497509550505050565b600060208284031215612a5957600080fd5b8151611f5581612643565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612aa557612aa5612a64565b500390565b600060208284031215612abc57600080fd5b81518015158114611f5557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612b0b6080830184612904565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612b446060830185612904565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612b8f6060830184612904565b95945050505050565b8281526040602082015260006123ea6040830184612904565b60008219821115612bc457612bc4612a64565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612c1860c0830184612904565b98975050505050505050565b60008251612c368184602087016128d8565b919091019291505056fea164736f6c634300080f000a", -} - -// L1StandardBridgeABI is the input ABI used to generate the binding from. -// Deprecated: Use L1StandardBridgeMetaData.ABI instead. -var L1StandardBridgeABI = L1StandardBridgeMetaData.ABI - -// L1StandardBridgeBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use L1StandardBridgeMetaData.Bin instead. -var L1StandardBridgeBin = L1StandardBridgeMetaData.Bin - -// DeployL1StandardBridge deploys a new Ethereum contract, binding an instance of L1StandardBridge to it. -func DeployL1StandardBridge(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *L1StandardBridge, error) { - parsed, err := L1StandardBridgeMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(L1StandardBridgeBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &L1StandardBridge{L1StandardBridgeCaller: L1StandardBridgeCaller{contract: contract}, L1StandardBridgeTransactor: L1StandardBridgeTransactor{contract: contract}, L1StandardBridgeFilterer: L1StandardBridgeFilterer{contract: contract}}, nil -} - -// L1StandardBridge is an auto generated Go binding around an Ethereum contract. -type L1StandardBridge struct { - L1StandardBridgeCaller // Read-only binding to the contract - L1StandardBridgeTransactor // Write-only binding to the contract - L1StandardBridgeFilterer // Log filterer for contract events -} - -// L1StandardBridgeCaller is an auto generated read-only Go binding around an Ethereum contract. -type L1StandardBridgeCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L1StandardBridgeTransactor is an auto generated write-only Go binding around an Ethereum contract. -type L1StandardBridgeTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L1StandardBridgeFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type L1StandardBridgeFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L1StandardBridgeSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type L1StandardBridgeSession struct { - Contract *L1StandardBridge // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// L1StandardBridgeCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type L1StandardBridgeCallerSession struct { - Contract *L1StandardBridgeCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// L1StandardBridgeTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type L1StandardBridgeTransactorSession struct { - Contract *L1StandardBridgeTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// L1StandardBridgeRaw is an auto generated low-level Go binding around an Ethereum contract. -type L1StandardBridgeRaw struct { - Contract *L1StandardBridge // Generic contract binding to access the raw methods on -} - -// L1StandardBridgeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type L1StandardBridgeCallerRaw struct { - Contract *L1StandardBridgeCaller // Generic read-only contract binding to access the raw methods on -} - -// L1StandardBridgeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type L1StandardBridgeTransactorRaw struct { - Contract *L1StandardBridgeTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewL1StandardBridge creates a new instance of L1StandardBridge, bound to a specific deployed contract. -func NewL1StandardBridge(address common.Address, backend bind.ContractBackend) (*L1StandardBridge, error) { - contract, err := bindL1StandardBridge(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &L1StandardBridge{L1StandardBridgeCaller: L1StandardBridgeCaller{contract: contract}, L1StandardBridgeTransactor: L1StandardBridgeTransactor{contract: contract}, L1StandardBridgeFilterer: L1StandardBridgeFilterer{contract: contract}}, nil -} - -// NewL1StandardBridgeCaller creates a new read-only instance of L1StandardBridge, bound to a specific deployed contract. -func NewL1StandardBridgeCaller(address common.Address, caller bind.ContractCaller) (*L1StandardBridgeCaller, error) { - contract, err := bindL1StandardBridge(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &L1StandardBridgeCaller{contract: contract}, nil -} - -// NewL1StandardBridgeTransactor creates a new write-only instance of L1StandardBridge, bound to a specific deployed contract. -func NewL1StandardBridgeTransactor(address common.Address, transactor bind.ContractTransactor) (*L1StandardBridgeTransactor, error) { - contract, err := bindL1StandardBridge(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &L1StandardBridgeTransactor{contract: contract}, nil -} - -// NewL1StandardBridgeFilterer creates a new log filterer instance of L1StandardBridge, bound to a specific deployed contract. -func NewL1StandardBridgeFilterer(address common.Address, filterer bind.ContractFilterer) (*L1StandardBridgeFilterer, error) { - contract, err := bindL1StandardBridge(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &L1StandardBridgeFilterer{contract: contract}, nil -} - -// bindL1StandardBridge binds a generic wrapper to an already deployed contract. -func bindL1StandardBridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(L1StandardBridgeABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_L1StandardBridge *L1StandardBridgeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _L1StandardBridge.Contract.L1StandardBridgeCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_L1StandardBridge *L1StandardBridgeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L1StandardBridge.Contract.L1StandardBridgeTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_L1StandardBridge *L1StandardBridgeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _L1StandardBridge.Contract.L1StandardBridgeTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_L1StandardBridge *L1StandardBridgeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _L1StandardBridge.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_L1StandardBridge *L1StandardBridgeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L1StandardBridge.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_L1StandardBridge *L1StandardBridgeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _L1StandardBridge.Contract.contract.Transact(opts, method, params...) -} - -// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. -// -// Solidity: function MESSENGER() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCaller) MESSENGER(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "MESSENGER") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. -// -// Solidity: function MESSENGER() view returns(address) -func (_L1StandardBridge *L1StandardBridgeSession) MESSENGER() (common.Address, error) { - return _L1StandardBridge.Contract.MESSENGER(&_L1StandardBridge.CallOpts) -} - -// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. -// -// Solidity: function MESSENGER() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCallerSession) MESSENGER() (common.Address, error) { - return _L1StandardBridge.Contract.MESSENGER(&_L1StandardBridge.CallOpts) -} - -// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. -// -// Solidity: function OTHER_BRIDGE() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCaller) OTHERBRIDGE(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "OTHER_BRIDGE") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. -// -// Solidity: function OTHER_BRIDGE() view returns(address) -func (_L1StandardBridge *L1StandardBridgeSession) OTHERBRIDGE() (common.Address, error) { - return _L1StandardBridge.Contract.OTHERBRIDGE(&_L1StandardBridge.CallOpts) -} - -// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. -// -// Solidity: function OTHER_BRIDGE() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCallerSession) OTHERBRIDGE() (common.Address, error) { - return _L1StandardBridge.Contract.OTHERBRIDGE(&_L1StandardBridge.CallOpts) -} - -// Deposits is a free data retrieval call binding the contract method 0x8f601f66. -// -// Solidity: function deposits(address , address ) view returns(uint256) -func (_L1StandardBridge *L1StandardBridgeCaller) Deposits(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "deposits", arg0, arg1) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// Deposits is a free data retrieval call binding the contract method 0x8f601f66. -// -// Solidity: function deposits(address , address ) view returns(uint256) -func (_L1StandardBridge *L1StandardBridgeSession) Deposits(arg0 common.Address, arg1 common.Address) (*big.Int, error) { - return _L1StandardBridge.Contract.Deposits(&_L1StandardBridge.CallOpts, arg0, arg1) -} - -// Deposits is a free data retrieval call binding the contract method 0x8f601f66. -// -// Solidity: function deposits(address , address ) view returns(uint256) -func (_L1StandardBridge *L1StandardBridgeCallerSession) Deposits(arg0 common.Address, arg1 common.Address) (*big.Int, error) { - return _L1StandardBridge.Contract.Deposits(&_L1StandardBridge.CallOpts, arg0, arg1) -} - -// L2TokenBridge is a free data retrieval call binding the contract method 0x91c49bf8. -// -// Solidity: function l2TokenBridge() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCaller) L2TokenBridge(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "l2TokenBridge") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// L2TokenBridge is a free data retrieval call binding the contract method 0x91c49bf8. -// -// Solidity: function l2TokenBridge() view returns(address) -func (_L1StandardBridge *L1StandardBridgeSession) L2TokenBridge() (common.Address, error) { - return _L1StandardBridge.Contract.L2TokenBridge(&_L1StandardBridge.CallOpts) -} - -// L2TokenBridge is a free data retrieval call binding the contract method 0x91c49bf8. -// -// Solidity: function l2TokenBridge() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCallerSession) L2TokenBridge() (common.Address, error) { - return _L1StandardBridge.Contract.L2TokenBridge(&_L1StandardBridge.CallOpts) -} - -// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. -// -// Solidity: function messenger() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCaller) Messenger(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "messenger") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. -// -// Solidity: function messenger() view returns(address) -func (_L1StandardBridge *L1StandardBridgeSession) Messenger() (common.Address, error) { - return _L1StandardBridge.Contract.Messenger(&_L1StandardBridge.CallOpts) -} - -// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. -// -// Solidity: function messenger() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCallerSession) Messenger() (common.Address, error) { - return _L1StandardBridge.Contract.Messenger(&_L1StandardBridge.CallOpts) -} - -// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. -// -// Solidity: function otherBridge() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCaller) OtherBridge(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "otherBridge") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. -// -// Solidity: function otherBridge() view returns(address) -func (_L1StandardBridge *L1StandardBridgeSession) OtherBridge() (common.Address, error) { - return _L1StandardBridge.Contract.OtherBridge(&_L1StandardBridge.CallOpts) -} - -// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. -// -// Solidity: function otherBridge() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCallerSession) OtherBridge() (common.Address, error) { - return _L1StandardBridge.Contract.OtherBridge(&_L1StandardBridge.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_L1StandardBridge *L1StandardBridgeCaller) Paused(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "paused") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_L1StandardBridge *L1StandardBridgeSession) Paused() (bool, error) { - return _L1StandardBridge.Contract.Paused(&_L1StandardBridge.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_L1StandardBridge *L1StandardBridgeCallerSession) Paused() (bool, error) { - return _L1StandardBridge.Contract.Paused(&_L1StandardBridge.CallOpts) -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCaller) SuperchainConfig(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "superchainConfig") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_L1StandardBridge *L1StandardBridgeSession) SuperchainConfig() (common.Address, error) { - return _L1StandardBridge.Contract.SuperchainConfig(&_L1StandardBridge.CallOpts) -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_L1StandardBridge *L1StandardBridgeCallerSession) SuperchainConfig() (common.Address, error) { - return _L1StandardBridge.Contract.SuperchainConfig(&_L1StandardBridge.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L1StandardBridge *L1StandardBridgeCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L1StandardBridge *L1StandardBridgeSession) Version() (string, error) { - return _L1StandardBridge.Contract.Version(&_L1StandardBridge.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L1StandardBridge *L1StandardBridgeCallerSession) Version() (string, error) { - return _L1StandardBridge.Contract.Version(&_L1StandardBridge.CallOpts) -} - -// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. -// -// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) BridgeERC20(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "bridgeERC20", _localToken, _remoteToken, _amount, _minGasLimit, _extraData) -} - -// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. -// -// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeSession) BridgeERC20(_localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.BridgeERC20(&_L1StandardBridge.TransactOpts, _localToken, _remoteToken, _amount, _minGasLimit, _extraData) -} - -// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. -// -// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) BridgeERC20(_localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.BridgeERC20(&_L1StandardBridge.TransactOpts, _localToken, _remoteToken, _amount, _minGasLimit, _extraData) -} - -// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. -// -// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) BridgeERC20To(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "bridgeERC20To", _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) -} - -// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. -// -// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeSession) BridgeERC20To(_localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.BridgeERC20To(&_L1StandardBridge.TransactOpts, _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) -} - -// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. -// -// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) BridgeERC20To(_localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.BridgeERC20To(&_L1StandardBridge.TransactOpts, _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) -} - -// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. -// -// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) BridgeETH(opts *bind.TransactOpts, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "bridgeETH", _minGasLimit, _extraData) -} - -// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. -// -// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeSession) BridgeETH(_minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.BridgeETH(&_L1StandardBridge.TransactOpts, _minGasLimit, _extraData) -} - -// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. -// -// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) BridgeETH(_minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.BridgeETH(&_L1StandardBridge.TransactOpts, _minGasLimit, _extraData) -} - -// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. -// -// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) BridgeETHTo(opts *bind.TransactOpts, _to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "bridgeETHTo", _to, _minGasLimit, _extraData) -} - -// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. -// -// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeSession) BridgeETHTo(_to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.BridgeETHTo(&_L1StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) -} - -// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. -// -// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) BridgeETHTo(_to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.BridgeETHTo(&_L1StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) -} - -// DepositERC20 is a paid mutator transaction binding the contract method 0x58a997f6. -// -// Solidity: function depositERC20(address _l1Token, address _l2Token, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) DepositERC20(opts *bind.TransactOpts, _l1Token common.Address, _l2Token common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "depositERC20", _l1Token, _l2Token, _amount, _minGasLimit, _extraData) -} - -// DepositERC20 is a paid mutator transaction binding the contract method 0x58a997f6. -// -// Solidity: function depositERC20(address _l1Token, address _l2Token, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeSession) DepositERC20(_l1Token common.Address, _l2Token common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.DepositERC20(&_L1StandardBridge.TransactOpts, _l1Token, _l2Token, _amount, _minGasLimit, _extraData) -} - -// DepositERC20 is a paid mutator transaction binding the contract method 0x58a997f6. -// -// Solidity: function depositERC20(address _l1Token, address _l2Token, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) DepositERC20(_l1Token common.Address, _l2Token common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.DepositERC20(&_L1StandardBridge.TransactOpts, _l1Token, _l2Token, _amount, _minGasLimit, _extraData) -} - -// DepositERC20To is a paid mutator transaction binding the contract method 0x838b2520. -// -// Solidity: function depositERC20To(address _l1Token, address _l2Token, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) DepositERC20To(opts *bind.TransactOpts, _l1Token common.Address, _l2Token common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "depositERC20To", _l1Token, _l2Token, _to, _amount, _minGasLimit, _extraData) -} - -// DepositERC20To is a paid mutator transaction binding the contract method 0x838b2520. -// -// Solidity: function depositERC20To(address _l1Token, address _l2Token, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeSession) DepositERC20To(_l1Token common.Address, _l2Token common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.DepositERC20To(&_L1StandardBridge.TransactOpts, _l1Token, _l2Token, _to, _amount, _minGasLimit, _extraData) -} - -// DepositERC20To is a paid mutator transaction binding the contract method 0x838b2520. -// -// Solidity: function depositERC20To(address _l1Token, address _l2Token, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) DepositERC20To(_l1Token common.Address, _l2Token common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.DepositERC20To(&_L1StandardBridge.TransactOpts, _l1Token, _l2Token, _to, _amount, _minGasLimit, _extraData) -} - -// DepositETH is a paid mutator transaction binding the contract method 0xb1a1a882. -// -// Solidity: function depositETH(uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) DepositETH(opts *bind.TransactOpts, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "depositETH", _minGasLimit, _extraData) -} - -// DepositETH is a paid mutator transaction binding the contract method 0xb1a1a882. -// -// Solidity: function depositETH(uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeSession) DepositETH(_minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.DepositETH(&_L1StandardBridge.TransactOpts, _minGasLimit, _extraData) -} - -// DepositETH is a paid mutator transaction binding the contract method 0xb1a1a882. -// -// Solidity: function depositETH(uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) DepositETH(_minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.DepositETH(&_L1StandardBridge.TransactOpts, _minGasLimit, _extraData) -} - -// DepositETHTo is a paid mutator transaction binding the contract method 0x9a2ac6d5. -// -// Solidity: function depositETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) DepositETHTo(opts *bind.TransactOpts, _to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "depositETHTo", _to, _minGasLimit, _extraData) -} - -// DepositETHTo is a paid mutator transaction binding the contract method 0x9a2ac6d5. -// -// Solidity: function depositETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeSession) DepositETHTo(_to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.DepositETHTo(&_L1StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) -} - -// DepositETHTo is a paid mutator transaction binding the contract method 0x9a2ac6d5. -// -// Solidity: function depositETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) DepositETHTo(_to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.DepositETHTo(&_L1StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) -} - -// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. -// -// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) FinalizeBridgeERC20(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "finalizeBridgeERC20", _localToken, _remoteToken, _from, _to, _amount, _extraData) -} - -// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. -// -// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeSession) FinalizeBridgeERC20(_localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.FinalizeBridgeERC20(&_L1StandardBridge.TransactOpts, _localToken, _remoteToken, _from, _to, _amount, _extraData) -} - -// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. -// -// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) FinalizeBridgeERC20(_localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.FinalizeBridgeERC20(&_L1StandardBridge.TransactOpts, _localToken, _remoteToken, _from, _to, _amount, _extraData) -} - -// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. -// -// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) FinalizeBridgeETH(opts *bind.TransactOpts, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "finalizeBridgeETH", _from, _to, _amount, _extraData) -} - -// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. -// -// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeSession) FinalizeBridgeETH(_from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.FinalizeBridgeETH(&_L1StandardBridge.TransactOpts, _from, _to, _amount, _extraData) -} - -// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. -// -// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) FinalizeBridgeETH(_from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.FinalizeBridgeETH(&_L1StandardBridge.TransactOpts, _from, _to, _amount, _extraData) -} - -// FinalizeERC20Withdrawal is a paid mutator transaction binding the contract method 0xa9f9e675. -// -// Solidity: function finalizeERC20Withdrawal(address _l1Token, address _l2Token, address _from, address _to, uint256 _amount, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) FinalizeERC20Withdrawal(opts *bind.TransactOpts, _l1Token common.Address, _l2Token common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "finalizeERC20Withdrawal", _l1Token, _l2Token, _from, _to, _amount, _extraData) -} - -// FinalizeERC20Withdrawal is a paid mutator transaction binding the contract method 0xa9f9e675. -// -// Solidity: function finalizeERC20Withdrawal(address _l1Token, address _l2Token, address _from, address _to, uint256 _amount, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeSession) FinalizeERC20Withdrawal(_l1Token common.Address, _l2Token common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.FinalizeERC20Withdrawal(&_L1StandardBridge.TransactOpts, _l1Token, _l2Token, _from, _to, _amount, _extraData) -} - -// FinalizeERC20Withdrawal is a paid mutator transaction binding the contract method 0xa9f9e675. -// -// Solidity: function finalizeERC20Withdrawal(address _l1Token, address _l2Token, address _from, address _to, uint256 _amount, bytes _extraData) returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) FinalizeERC20Withdrawal(_l1Token common.Address, _l2Token common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.FinalizeERC20Withdrawal(&_L1StandardBridge.TransactOpts, _l1Token, _l2Token, _from, _to, _amount, _extraData) -} - -// FinalizeETHWithdrawal is a paid mutator transaction binding the contract method 0x1532ec34. -// -// Solidity: function finalizeETHWithdrawal(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) FinalizeETHWithdrawal(opts *bind.TransactOpts, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "finalizeETHWithdrawal", _from, _to, _amount, _extraData) -} - -// FinalizeETHWithdrawal is a paid mutator transaction binding the contract method 0x1532ec34. -// -// Solidity: function finalizeETHWithdrawal(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeSession) FinalizeETHWithdrawal(_from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.FinalizeETHWithdrawal(&_L1StandardBridge.TransactOpts, _from, _to, _amount, _extraData) -} - -// FinalizeETHWithdrawal is a paid mutator transaction binding the contract method 0x1532ec34. -// -// Solidity: function finalizeETHWithdrawal(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) FinalizeETHWithdrawal(_from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L1StandardBridge.Contract.FinalizeETHWithdrawal(&_L1StandardBridge.TransactOpts, _from, _to, _amount, _extraData) -} - -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _messenger, address _superchainConfig) returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) Initialize(opts *bind.TransactOpts, _messenger common.Address, _superchainConfig common.Address) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "initialize", _messenger, _superchainConfig) -} - -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _messenger, address _superchainConfig) returns() -func (_L1StandardBridge *L1StandardBridgeSession) Initialize(_messenger common.Address, _superchainConfig common.Address) (*types.Transaction, error) { - return _L1StandardBridge.Contract.Initialize(&_L1StandardBridge.TransactOpts, _messenger, _superchainConfig) -} - -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _messenger, address _superchainConfig) returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) Initialize(_messenger common.Address, _superchainConfig common.Address) (*types.Transaction, error) { - return _L1StandardBridge.Contract.Initialize(&_L1StandardBridge.TransactOpts, _messenger, _superchainConfig) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L1StandardBridge.contract.RawTransact(opts, nil) // calldata is disallowed for receive function -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_L1StandardBridge *L1StandardBridgeSession) Receive() (*types.Transaction, error) { - return _L1StandardBridge.Contract.Receive(&_L1StandardBridge.TransactOpts) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) Receive() (*types.Transaction, error) { - return _L1StandardBridge.Contract.Receive(&_L1StandardBridge.TransactOpts) -} - -// L1StandardBridgeERC20BridgeFinalizedIterator is returned from FilterERC20BridgeFinalized and is used to iterate over the raw logs and unpacked data for ERC20BridgeFinalized events raised by the L1StandardBridge contract. -type L1StandardBridgeERC20BridgeFinalizedIterator struct { - Event *L1StandardBridgeERC20BridgeFinalized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1StandardBridgeERC20BridgeFinalizedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeERC20BridgeFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeERC20BridgeFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1StandardBridgeERC20BridgeFinalizedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1StandardBridgeERC20BridgeFinalizedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1StandardBridgeERC20BridgeFinalized represents a ERC20BridgeFinalized event raised by the L1StandardBridge contract. -type L1StandardBridgeERC20BridgeFinalized struct { - LocalToken common.Address - RemoteToken common.Address - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterERC20BridgeFinalized is a free log retrieval operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. -// -// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) FilterERC20BridgeFinalized(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address, from []common.Address) (*L1StandardBridgeERC20BridgeFinalizedIterator, error) { - - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "ERC20BridgeFinalized", localTokenRule, remoteTokenRule, fromRule) - if err != nil { - return nil, err - } - return &L1StandardBridgeERC20BridgeFinalizedIterator{contract: _L1StandardBridge.contract, event: "ERC20BridgeFinalized", logs: logs, sub: sub}, nil -} - -// WatchERC20BridgeFinalized is a free log subscription operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. -// -// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) WatchERC20BridgeFinalized(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeERC20BridgeFinalized, localToken []common.Address, remoteToken []common.Address, from []common.Address) (event.Subscription, error) { - - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L1StandardBridge.contract.WatchLogs(opts, "ERC20BridgeFinalized", localTokenRule, remoteTokenRule, fromRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1StandardBridgeERC20BridgeFinalized) - if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20BridgeFinalized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseERC20BridgeFinalized is a log parse operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. -// -// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) ParseERC20BridgeFinalized(log types.Log) (*L1StandardBridgeERC20BridgeFinalized, error) { - event := new(L1StandardBridgeERC20BridgeFinalized) - if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20BridgeFinalized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1StandardBridgeERC20BridgeInitiatedIterator is returned from FilterERC20BridgeInitiated and is used to iterate over the raw logs and unpacked data for ERC20BridgeInitiated events raised by the L1StandardBridge contract. -type L1StandardBridgeERC20BridgeInitiatedIterator struct { - Event *L1StandardBridgeERC20BridgeInitiated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1StandardBridgeERC20BridgeInitiatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeERC20BridgeInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeERC20BridgeInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1StandardBridgeERC20BridgeInitiatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1StandardBridgeERC20BridgeInitiatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1StandardBridgeERC20BridgeInitiated represents a ERC20BridgeInitiated event raised by the L1StandardBridge contract. -type L1StandardBridgeERC20BridgeInitiated struct { - LocalToken common.Address - RemoteToken common.Address - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterERC20BridgeInitiated is a free log retrieval operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. -// -// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) FilterERC20BridgeInitiated(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address, from []common.Address) (*L1StandardBridgeERC20BridgeInitiatedIterator, error) { - - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "ERC20BridgeInitiated", localTokenRule, remoteTokenRule, fromRule) - if err != nil { - return nil, err - } - return &L1StandardBridgeERC20BridgeInitiatedIterator{contract: _L1StandardBridge.contract, event: "ERC20BridgeInitiated", logs: logs, sub: sub}, nil -} - -// WatchERC20BridgeInitiated is a free log subscription operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. -// -// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) WatchERC20BridgeInitiated(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeERC20BridgeInitiated, localToken []common.Address, remoteToken []common.Address, from []common.Address) (event.Subscription, error) { - - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L1StandardBridge.contract.WatchLogs(opts, "ERC20BridgeInitiated", localTokenRule, remoteTokenRule, fromRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1StandardBridgeERC20BridgeInitiated) - if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20BridgeInitiated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseERC20BridgeInitiated is a log parse operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. -// -// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) ParseERC20BridgeInitiated(log types.Log) (*L1StandardBridgeERC20BridgeInitiated, error) { - event := new(L1StandardBridgeERC20BridgeInitiated) - if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20BridgeInitiated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1StandardBridgeERC20DepositInitiatedIterator is returned from FilterERC20DepositInitiated and is used to iterate over the raw logs and unpacked data for ERC20DepositInitiated events raised by the L1StandardBridge contract. -type L1StandardBridgeERC20DepositInitiatedIterator struct { - Event *L1StandardBridgeERC20DepositInitiated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1StandardBridgeERC20DepositInitiatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeERC20DepositInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeERC20DepositInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1StandardBridgeERC20DepositInitiatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1StandardBridgeERC20DepositInitiatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1StandardBridgeERC20DepositInitiated represents a ERC20DepositInitiated event raised by the L1StandardBridge contract. -type L1StandardBridgeERC20DepositInitiated struct { - L1Token common.Address - L2Token common.Address - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterERC20DepositInitiated is a free log retrieval operation binding the contract event 0x718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d0396. -// -// Solidity: event ERC20DepositInitiated(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) FilterERC20DepositInitiated(opts *bind.FilterOpts, l1Token []common.Address, l2Token []common.Address, from []common.Address) (*L1StandardBridgeERC20DepositInitiatedIterator, error) { - - var l1TokenRule []interface{} - for _, l1TokenItem := range l1Token { - l1TokenRule = append(l1TokenRule, l1TokenItem) - } - var l2TokenRule []interface{} - for _, l2TokenItem := range l2Token { - l2TokenRule = append(l2TokenRule, l2TokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "ERC20DepositInitiated", l1TokenRule, l2TokenRule, fromRule) - if err != nil { - return nil, err - } - return &L1StandardBridgeERC20DepositInitiatedIterator{contract: _L1StandardBridge.contract, event: "ERC20DepositInitiated", logs: logs, sub: sub}, nil -} - -// WatchERC20DepositInitiated is a free log subscription operation binding the contract event 0x718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d0396. -// -// Solidity: event ERC20DepositInitiated(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) WatchERC20DepositInitiated(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeERC20DepositInitiated, l1Token []common.Address, l2Token []common.Address, from []common.Address) (event.Subscription, error) { - - var l1TokenRule []interface{} - for _, l1TokenItem := range l1Token { - l1TokenRule = append(l1TokenRule, l1TokenItem) - } - var l2TokenRule []interface{} - for _, l2TokenItem := range l2Token { - l2TokenRule = append(l2TokenRule, l2TokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L1StandardBridge.contract.WatchLogs(opts, "ERC20DepositInitiated", l1TokenRule, l2TokenRule, fromRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1StandardBridgeERC20DepositInitiated) - if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20DepositInitiated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseERC20DepositInitiated is a log parse operation binding the contract event 0x718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d0396. -// -// Solidity: event ERC20DepositInitiated(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) ParseERC20DepositInitiated(log types.Log) (*L1StandardBridgeERC20DepositInitiated, error) { - event := new(L1StandardBridgeERC20DepositInitiated) - if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20DepositInitiated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1StandardBridgeERC20WithdrawalFinalizedIterator is returned from FilterERC20WithdrawalFinalized and is used to iterate over the raw logs and unpacked data for ERC20WithdrawalFinalized events raised by the L1StandardBridge contract. -type L1StandardBridgeERC20WithdrawalFinalizedIterator struct { - Event *L1StandardBridgeERC20WithdrawalFinalized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1StandardBridgeERC20WithdrawalFinalizedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeERC20WithdrawalFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeERC20WithdrawalFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1StandardBridgeERC20WithdrawalFinalizedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1StandardBridgeERC20WithdrawalFinalizedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1StandardBridgeERC20WithdrawalFinalized represents a ERC20WithdrawalFinalized event raised by the L1StandardBridge contract. -type L1StandardBridgeERC20WithdrawalFinalized struct { - L1Token common.Address - L2Token common.Address - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterERC20WithdrawalFinalized is a free log retrieval operation binding the contract event 0x3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3. -// -// Solidity: event ERC20WithdrawalFinalized(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) FilterERC20WithdrawalFinalized(opts *bind.FilterOpts, l1Token []common.Address, l2Token []common.Address, from []common.Address) (*L1StandardBridgeERC20WithdrawalFinalizedIterator, error) { - - var l1TokenRule []interface{} - for _, l1TokenItem := range l1Token { - l1TokenRule = append(l1TokenRule, l1TokenItem) - } - var l2TokenRule []interface{} - for _, l2TokenItem := range l2Token { - l2TokenRule = append(l2TokenRule, l2TokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "ERC20WithdrawalFinalized", l1TokenRule, l2TokenRule, fromRule) - if err != nil { - return nil, err - } - return &L1StandardBridgeERC20WithdrawalFinalizedIterator{contract: _L1StandardBridge.contract, event: "ERC20WithdrawalFinalized", logs: logs, sub: sub}, nil -} - -// WatchERC20WithdrawalFinalized is a free log subscription operation binding the contract event 0x3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3. -// -// Solidity: event ERC20WithdrawalFinalized(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) WatchERC20WithdrawalFinalized(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeERC20WithdrawalFinalized, l1Token []common.Address, l2Token []common.Address, from []common.Address) (event.Subscription, error) { - - var l1TokenRule []interface{} - for _, l1TokenItem := range l1Token { - l1TokenRule = append(l1TokenRule, l1TokenItem) - } - var l2TokenRule []interface{} - for _, l2TokenItem := range l2Token { - l2TokenRule = append(l2TokenRule, l2TokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L1StandardBridge.contract.WatchLogs(opts, "ERC20WithdrawalFinalized", l1TokenRule, l2TokenRule, fromRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1StandardBridgeERC20WithdrawalFinalized) - if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20WithdrawalFinalized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseERC20WithdrawalFinalized is a log parse operation binding the contract event 0x3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3. -// -// Solidity: event ERC20WithdrawalFinalized(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) ParseERC20WithdrawalFinalized(log types.Log) (*L1StandardBridgeERC20WithdrawalFinalized, error) { - event := new(L1StandardBridgeERC20WithdrawalFinalized) - if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20WithdrawalFinalized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1StandardBridgeETHBridgeFinalizedIterator is returned from FilterETHBridgeFinalized and is used to iterate over the raw logs and unpacked data for ETHBridgeFinalized events raised by the L1StandardBridge contract. -type L1StandardBridgeETHBridgeFinalizedIterator struct { - Event *L1StandardBridgeETHBridgeFinalized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1StandardBridgeETHBridgeFinalizedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeETHBridgeFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeETHBridgeFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1StandardBridgeETHBridgeFinalizedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1StandardBridgeETHBridgeFinalizedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1StandardBridgeETHBridgeFinalized represents a ETHBridgeFinalized event raised by the L1StandardBridge contract. -type L1StandardBridgeETHBridgeFinalized struct { - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterETHBridgeFinalized is a free log retrieval operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. -// -// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) FilterETHBridgeFinalized(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*L1StandardBridgeETHBridgeFinalizedIterator, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "ETHBridgeFinalized", fromRule, toRule) - if err != nil { - return nil, err - } - return &L1StandardBridgeETHBridgeFinalizedIterator{contract: _L1StandardBridge.contract, event: "ETHBridgeFinalized", logs: logs, sub: sub}, nil -} - -// WatchETHBridgeFinalized is a free log subscription operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. -// -// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) WatchETHBridgeFinalized(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeETHBridgeFinalized, from []common.Address, to []common.Address) (event.Subscription, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _L1StandardBridge.contract.WatchLogs(opts, "ETHBridgeFinalized", fromRule, toRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1StandardBridgeETHBridgeFinalized) - if err := _L1StandardBridge.contract.UnpackLog(event, "ETHBridgeFinalized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseETHBridgeFinalized is a log parse operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. -// -// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) ParseETHBridgeFinalized(log types.Log) (*L1StandardBridgeETHBridgeFinalized, error) { - event := new(L1StandardBridgeETHBridgeFinalized) - if err := _L1StandardBridge.contract.UnpackLog(event, "ETHBridgeFinalized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1StandardBridgeETHBridgeInitiatedIterator is returned from FilterETHBridgeInitiated and is used to iterate over the raw logs and unpacked data for ETHBridgeInitiated events raised by the L1StandardBridge contract. -type L1StandardBridgeETHBridgeInitiatedIterator struct { - Event *L1StandardBridgeETHBridgeInitiated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1StandardBridgeETHBridgeInitiatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeETHBridgeInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeETHBridgeInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1StandardBridgeETHBridgeInitiatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1StandardBridgeETHBridgeInitiatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1StandardBridgeETHBridgeInitiated represents a ETHBridgeInitiated event raised by the L1StandardBridge contract. -type L1StandardBridgeETHBridgeInitiated struct { - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterETHBridgeInitiated is a free log retrieval operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. -// -// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) FilterETHBridgeInitiated(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*L1StandardBridgeETHBridgeInitiatedIterator, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "ETHBridgeInitiated", fromRule, toRule) - if err != nil { - return nil, err - } - return &L1StandardBridgeETHBridgeInitiatedIterator{contract: _L1StandardBridge.contract, event: "ETHBridgeInitiated", logs: logs, sub: sub}, nil -} - -// WatchETHBridgeInitiated is a free log subscription operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. -// -// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) WatchETHBridgeInitiated(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeETHBridgeInitiated, from []common.Address, to []common.Address) (event.Subscription, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _L1StandardBridge.contract.WatchLogs(opts, "ETHBridgeInitiated", fromRule, toRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1StandardBridgeETHBridgeInitiated) - if err := _L1StandardBridge.contract.UnpackLog(event, "ETHBridgeInitiated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseETHBridgeInitiated is a log parse operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. -// -// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) ParseETHBridgeInitiated(log types.Log) (*L1StandardBridgeETHBridgeInitiated, error) { - event := new(L1StandardBridgeETHBridgeInitiated) - if err := _L1StandardBridge.contract.UnpackLog(event, "ETHBridgeInitiated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1StandardBridgeETHDepositInitiatedIterator is returned from FilterETHDepositInitiated and is used to iterate over the raw logs and unpacked data for ETHDepositInitiated events raised by the L1StandardBridge contract. -type L1StandardBridgeETHDepositInitiatedIterator struct { - Event *L1StandardBridgeETHDepositInitiated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1StandardBridgeETHDepositInitiatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeETHDepositInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeETHDepositInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1StandardBridgeETHDepositInitiatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1StandardBridgeETHDepositInitiatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1StandardBridgeETHDepositInitiated represents a ETHDepositInitiated event raised by the L1StandardBridge contract. -type L1StandardBridgeETHDepositInitiated struct { - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterETHDepositInitiated is a free log retrieval operation binding the contract event 0x35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23. -// -// Solidity: event ETHDepositInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) FilterETHDepositInitiated(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*L1StandardBridgeETHDepositInitiatedIterator, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "ETHDepositInitiated", fromRule, toRule) - if err != nil { - return nil, err - } - return &L1StandardBridgeETHDepositInitiatedIterator{contract: _L1StandardBridge.contract, event: "ETHDepositInitiated", logs: logs, sub: sub}, nil -} - -// WatchETHDepositInitiated is a free log subscription operation binding the contract event 0x35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23. -// -// Solidity: event ETHDepositInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) WatchETHDepositInitiated(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeETHDepositInitiated, from []common.Address, to []common.Address) (event.Subscription, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _L1StandardBridge.contract.WatchLogs(opts, "ETHDepositInitiated", fromRule, toRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1StandardBridgeETHDepositInitiated) - if err := _L1StandardBridge.contract.UnpackLog(event, "ETHDepositInitiated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseETHDepositInitiated is a log parse operation binding the contract event 0x35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23. -// -// Solidity: event ETHDepositInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) ParseETHDepositInitiated(log types.Log) (*L1StandardBridgeETHDepositInitiated, error) { - event := new(L1StandardBridgeETHDepositInitiated) - if err := _L1StandardBridge.contract.UnpackLog(event, "ETHDepositInitiated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1StandardBridgeETHWithdrawalFinalizedIterator is returned from FilterETHWithdrawalFinalized and is used to iterate over the raw logs and unpacked data for ETHWithdrawalFinalized events raised by the L1StandardBridge contract. -type L1StandardBridgeETHWithdrawalFinalizedIterator struct { - Event *L1StandardBridgeETHWithdrawalFinalized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1StandardBridgeETHWithdrawalFinalizedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeETHWithdrawalFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeETHWithdrawalFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1StandardBridgeETHWithdrawalFinalizedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1StandardBridgeETHWithdrawalFinalizedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1StandardBridgeETHWithdrawalFinalized represents a ETHWithdrawalFinalized event raised by the L1StandardBridge contract. -type L1StandardBridgeETHWithdrawalFinalized struct { - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterETHWithdrawalFinalized is a free log retrieval operation binding the contract event 0x2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e631. -// -// Solidity: event ETHWithdrawalFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) FilterETHWithdrawalFinalized(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*L1StandardBridgeETHWithdrawalFinalizedIterator, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "ETHWithdrawalFinalized", fromRule, toRule) - if err != nil { - return nil, err - } - return &L1StandardBridgeETHWithdrawalFinalizedIterator{contract: _L1StandardBridge.contract, event: "ETHWithdrawalFinalized", logs: logs, sub: sub}, nil -} - -// WatchETHWithdrawalFinalized is a free log subscription operation binding the contract event 0x2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e631. -// -// Solidity: event ETHWithdrawalFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) WatchETHWithdrawalFinalized(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeETHWithdrawalFinalized, from []common.Address, to []common.Address) (event.Subscription, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _L1StandardBridge.contract.WatchLogs(opts, "ETHWithdrawalFinalized", fromRule, toRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1StandardBridgeETHWithdrawalFinalized) - if err := _L1StandardBridge.contract.UnpackLog(event, "ETHWithdrawalFinalized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseETHWithdrawalFinalized is a log parse operation binding the contract event 0x2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e631. -// -// Solidity: event ETHWithdrawalFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) ParseETHWithdrawalFinalized(log types.Log) (*L1StandardBridgeETHWithdrawalFinalized, error) { - event := new(L1StandardBridgeETHWithdrawalFinalized) - if err := _L1StandardBridge.contract.UnpackLog(event, "ETHWithdrawalFinalized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L1StandardBridgeInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the L1StandardBridge contract. -type L1StandardBridgeInitializedIterator struct { - Event *L1StandardBridgeInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1StandardBridgeInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1StandardBridgeInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1StandardBridgeInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1StandardBridgeInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1StandardBridgeInitialized represents a Initialized event raised by the L1StandardBridge contract. -type L1StandardBridgeInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L1StandardBridge *L1StandardBridgeFilterer) FilterInitialized(opts *bind.FilterOpts) (*L1StandardBridgeInitializedIterator, error) { - - logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &L1StandardBridgeInitializedIterator{contract: _L1StandardBridge.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L1StandardBridge *L1StandardBridgeFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeInitialized) (event.Subscription, error) { - - logs, sub, err := _L1StandardBridge.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1StandardBridgeInitialized) - if err := _L1StandardBridge.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L1StandardBridge *L1StandardBridgeFilterer) ParseInitialized(log types.Log) (*L1StandardBridgeInitialized, error) { - event := new(L1StandardBridgeInitialized) - if err := _L1StandardBridge.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/indexer/bindings/l2crossdomainmessenger.go b/indexer/bindings/l2crossdomainmessenger.go deleted file mode 100644 index ff7241f5e272..000000000000 --- a/indexer/bindings/l2crossdomainmessenger.go +++ /dev/null @@ -1,1538 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindings - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// L2CrossDomainMessengerMetaData contains all meta data concerning the L2CrossDomainMessenger contract. -var L2CrossDomainMessengerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b506200001e600062000024565b62000239565b600054600160a81b900460ff16158080156200004d57506000546001600160a01b90910460ff16105b806200008457506200006a306200017360201b620013071760201c565b158015620000845750600054600160a01b900460ff166001145b620000ed5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011b576000805460ff60a81b1916600160a81b1790555b620001268262000182565b80156200016f576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620001f15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e4565b60cc546001600160a01b0316620002175760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b611c8280620002496000396000f3fe60806040526004361061016a5760003560e01c806383a74074116100cb578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b146103c7578063db505d80146103da578063ecc704281461040757600080fd5b8063b1b1b20914610357578063b28ade2514610387578063c4d66de8146103a757600080fd5b80639fce812c116100b05780639fce812c146102fc578063a4e7f8bd14610327578063a7119869146102fc57600080fd5b806383a74074146102e55780638cbeeef21461020957600080fd5b80634c1d6a69116101225780635644cfdf116101075780635644cfdf146102755780635c975abb1461028b5780636e296e45146102ab57600080fd5b80634c1d6a691461020957806354fd4d501461021f57600080fd5b80632828d7e8116101535780632828d7e8146101b75780633dbb202b146101cc5780633f827a5a146101e157600080fd5b8063028f85f71461016f5780630c568498146101a2575b600080fd5b34801561017b57600080fd5b50610184601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101ae57600080fd5b50610184603f81565b3480156101c357600080fd5b50610184604081565b6101df6101da36600461177b565b61046c565b005b3480156101ed57600080fd5b506101f6600181565b60405161ffff9091168152602001610199565b34801561021557600080fd5b50610184619c4081565b34801561022b57600080fd5b506102686040518060400160405280600581526020017f322e302e3000000000000000000000000000000000000000000000000000000081525081565b604051610199919061184d565b34801561028157600080fd5b5061018461138881565b34801561029757600080fd5b5060005b6040519015158152602001610199565b3480156102b757600080fd5b506102c06106c9565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610199565b3480156102f157600080fd5b5061018462030d4081565b34801561030857600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166102c0565b34801561033357600080fd5b5061029b610342366004611867565b60ce6020526000908152604090205460ff1681565b34801561036357600080fd5b5061029b610372366004611867565b60cb6020526000908152604090205460ff1681565b34801561039357600080fd5b506101846103a2366004611880565b6107b5565b3480156103b357600080fd5b506101df6103c23660046118d4565b610823565b6101df6103d53660046118f1565b610a22565b3480156103e657600080fd5b5060cf546102c09073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041357600080fd5b5061045e60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b604051908152602001610199565b60cf5461059e9073ffffffffffffffffffffffffffffffffffffffff166104948585856107b5565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061050060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161051c97969594939291906119c0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611323565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561062360cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610635959493929190611a1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6107d1604063ffffffff8816611a9c565b6107db9190611acc565b6107e6601088611a9c565b6107f39062030d40611b1a565b6107fd9190611b1a565b6108079190611b1a565b6108119190611b1a565b61081b9190611b1a565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff161580801561086e575060005460017401000000000000000000000000000000000000000090910460ff16105b806108a05750303b1580156108a0575060005474010000000000000000000000000000000000000000900460ff166001145b61092c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161078f565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905580156109b257600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b6109bb826113b1565b8015610a1e57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60f087901c60028110610add576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a40161078f565b8061ffff16600003610bd2576000610b2e878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506114ed915050565b600081815260cb602052604090205490915060ff1615610bd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c61796564000000000000000000606482015260840161078f565b505b6000610c18898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150c92505050565b9050610c6160cf54337fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef0173ffffffffffffffffffffffffffffffffffffffff90811691161490565b15610c9957853414610c7557610c75611b46565b600081815260ce602052604090205460ff1615610c9457610c94611b46565b610deb565b3415610d4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a40161078f565b600081815260ce602052604090205460ff16610deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c6179656400000000000000000000000000000000606482015260840161078f565b610df48761152f565b15610ea7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a40161078f565b600081815260cb602052604090205460ff1615610f46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c6179656400000000000000000000606482015260840161078f565b610f6785610f58611388619c40611b1a565b67ffffffffffffffff16611584565b1580610f8d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156110a657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161109f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161078f565b50506112fe565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061113788619c405a6110fa9190611b75565b8988888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115a292505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156111ed57600082815260cb602052604090205460ff161561118a5761118a611b46565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26112fa565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016112fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161078f565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040517fc2b3e5ac0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000169063c2b3e5ac90849061137990889088908790600401611b8c565b6000604051808303818588803b15801561139257600080fd5b505af11580156113a6573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff1661145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161078f565b60cc5473ffffffffffffffffffffffffffffffffffffffff166114a65760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006114fb858585856115bc565b805190602001209050949350505050565b600061151c878787878787611655565b8051906020012090509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff821630148061157e575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000016145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6060848484846040516024016115d59493929190611bd4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606086868686868660405160240161167296959493929190611c1e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461171657600080fd5b50565b60008083601f84011261172b57600080fd5b50813567ffffffffffffffff81111561174357600080fd5b60208301915083602082850101111561175b57600080fd5b9250929050565b803563ffffffff8116811461177657600080fd5b919050565b6000806000806060858703121561179157600080fd5b843561179c816116f4565b9350602085013567ffffffffffffffff8111156117b857600080fd5b6117c487828801611719565b90945092506117d7905060408601611762565b905092959194509250565b6000815180845260005b81811015611808576020818501810151868301820152016117ec565b8181111561181a576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061186060208301846117e2565b9392505050565b60006020828403121561187957600080fd5b5035919050565b60008060006040848603121561189557600080fd5b833567ffffffffffffffff8111156118ac57600080fd5b6118b886828701611719565b90945092506118cb905060208501611762565b90509250925092565b6000602082840312156118e657600080fd5b8135611860816116f4565b600080600080600080600060c0888a03121561190c57600080fd5b87359650602088013561191e816116f4565b9550604088013561192e816116f4565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561195857600080fd5b6119648a828b01611719565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611a1260c083018486611977565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611a4f608083018688611977565b905083604083015263ffffffff831660608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611ac357611ac3611a6d565b02949350505050565b600067ffffffffffffffff80841680611b0e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611b3d57611b3d611a6d565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611b8757611b87611a6d565b500390565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff83166020820152606060408201526000611bcb60608301846117e2565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611c0d60808301856117e2565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611c6960c08301846117e2565b9897505050505050505056fea164736f6c634300080f000a", -} - -// L2CrossDomainMessengerABI is the input ABI used to generate the binding from. -// Deprecated: Use L2CrossDomainMessengerMetaData.ABI instead. -var L2CrossDomainMessengerABI = L2CrossDomainMessengerMetaData.ABI - -// L2CrossDomainMessengerBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use L2CrossDomainMessengerMetaData.Bin instead. -var L2CrossDomainMessengerBin = L2CrossDomainMessengerMetaData.Bin - -// DeployL2CrossDomainMessenger deploys a new Ethereum contract, binding an instance of L2CrossDomainMessenger to it. -func DeployL2CrossDomainMessenger(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *L2CrossDomainMessenger, error) { - parsed, err := L2CrossDomainMessengerMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(L2CrossDomainMessengerBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &L2CrossDomainMessenger{L2CrossDomainMessengerCaller: L2CrossDomainMessengerCaller{contract: contract}, L2CrossDomainMessengerTransactor: L2CrossDomainMessengerTransactor{contract: contract}, L2CrossDomainMessengerFilterer: L2CrossDomainMessengerFilterer{contract: contract}}, nil -} - -// L2CrossDomainMessenger is an auto generated Go binding around an Ethereum contract. -type L2CrossDomainMessenger struct { - L2CrossDomainMessengerCaller // Read-only binding to the contract - L2CrossDomainMessengerTransactor // Write-only binding to the contract - L2CrossDomainMessengerFilterer // Log filterer for contract events -} - -// L2CrossDomainMessengerCaller is an auto generated read-only Go binding around an Ethereum contract. -type L2CrossDomainMessengerCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L2CrossDomainMessengerTransactor is an auto generated write-only Go binding around an Ethereum contract. -type L2CrossDomainMessengerTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L2CrossDomainMessengerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type L2CrossDomainMessengerFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L2CrossDomainMessengerSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type L2CrossDomainMessengerSession struct { - Contract *L2CrossDomainMessenger // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// L2CrossDomainMessengerCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type L2CrossDomainMessengerCallerSession struct { - Contract *L2CrossDomainMessengerCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// L2CrossDomainMessengerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type L2CrossDomainMessengerTransactorSession struct { - Contract *L2CrossDomainMessengerTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// L2CrossDomainMessengerRaw is an auto generated low-level Go binding around an Ethereum contract. -type L2CrossDomainMessengerRaw struct { - Contract *L2CrossDomainMessenger // Generic contract binding to access the raw methods on -} - -// L2CrossDomainMessengerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type L2CrossDomainMessengerCallerRaw struct { - Contract *L2CrossDomainMessengerCaller // Generic read-only contract binding to access the raw methods on -} - -// L2CrossDomainMessengerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type L2CrossDomainMessengerTransactorRaw struct { - Contract *L2CrossDomainMessengerTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewL2CrossDomainMessenger creates a new instance of L2CrossDomainMessenger, bound to a specific deployed contract. -func NewL2CrossDomainMessenger(address common.Address, backend bind.ContractBackend) (*L2CrossDomainMessenger, error) { - contract, err := bindL2CrossDomainMessenger(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &L2CrossDomainMessenger{L2CrossDomainMessengerCaller: L2CrossDomainMessengerCaller{contract: contract}, L2CrossDomainMessengerTransactor: L2CrossDomainMessengerTransactor{contract: contract}, L2CrossDomainMessengerFilterer: L2CrossDomainMessengerFilterer{contract: contract}}, nil -} - -// NewL2CrossDomainMessengerCaller creates a new read-only instance of L2CrossDomainMessenger, bound to a specific deployed contract. -func NewL2CrossDomainMessengerCaller(address common.Address, caller bind.ContractCaller) (*L2CrossDomainMessengerCaller, error) { - contract, err := bindL2CrossDomainMessenger(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &L2CrossDomainMessengerCaller{contract: contract}, nil -} - -// NewL2CrossDomainMessengerTransactor creates a new write-only instance of L2CrossDomainMessenger, bound to a specific deployed contract. -func NewL2CrossDomainMessengerTransactor(address common.Address, transactor bind.ContractTransactor) (*L2CrossDomainMessengerTransactor, error) { - contract, err := bindL2CrossDomainMessenger(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &L2CrossDomainMessengerTransactor{contract: contract}, nil -} - -// NewL2CrossDomainMessengerFilterer creates a new log filterer instance of L2CrossDomainMessenger, bound to a specific deployed contract. -func NewL2CrossDomainMessengerFilterer(address common.Address, filterer bind.ContractFilterer) (*L2CrossDomainMessengerFilterer, error) { - contract, err := bindL2CrossDomainMessenger(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &L2CrossDomainMessengerFilterer{contract: contract}, nil -} - -// bindL2CrossDomainMessenger binds a generic wrapper to an already deployed contract. -func bindL2CrossDomainMessenger(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(L2CrossDomainMessengerABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_L2CrossDomainMessenger *L2CrossDomainMessengerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _L2CrossDomainMessenger.Contract.L2CrossDomainMessengerCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_L2CrossDomainMessenger *L2CrossDomainMessengerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L2CrossDomainMessenger.Contract.L2CrossDomainMessengerTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_L2CrossDomainMessenger *L2CrossDomainMessengerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _L2CrossDomainMessenger.Contract.L2CrossDomainMessengerTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _L2CrossDomainMessenger.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_L2CrossDomainMessenger *L2CrossDomainMessengerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L2CrossDomainMessenger.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_L2CrossDomainMessenger *L2CrossDomainMessengerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _L2CrossDomainMessenger.Contract.contract.Transact(opts, method, params...) -} - -// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. -// -// Solidity: function MESSAGE_VERSION() view returns(uint16) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) MESSAGEVERSION(opts *bind.CallOpts) (uint16, error) { - var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "MESSAGE_VERSION") - - if err != nil { - return *new(uint16), err - } - - out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) - - return out0, err - -} - -// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. -// -// Solidity: function MESSAGE_VERSION() view returns(uint16) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) MESSAGEVERSION() (uint16, error) { - return _L2CrossDomainMessenger.Contract.MESSAGEVERSION(&_L2CrossDomainMessenger.CallOpts) -} - -// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. -// -// Solidity: function MESSAGE_VERSION() view returns(uint16) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) MESSAGEVERSION() (uint16, error) { - return _L2CrossDomainMessenger.Contract.MESSAGEVERSION(&_L2CrossDomainMessenger.CallOpts) -} - -// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. -// -// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) MINGASCALLDATAOVERHEAD(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_CALLDATA_OVERHEAD") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. -// -// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) MINGASCALLDATAOVERHEAD() (uint64, error) { - return _L2CrossDomainMessenger.Contract.MINGASCALLDATAOVERHEAD(&_L2CrossDomainMessenger.CallOpts) -} - -// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. -// -// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) MINGASCALLDATAOVERHEAD() (uint64, error) { - return _L2CrossDomainMessenger.Contract.MINGASCALLDATAOVERHEAD(&_L2CrossDomainMessenger.CallOpts) -} - -// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) MINGASDYNAMICOVERHEADDENOMINATOR(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) MINGASDYNAMICOVERHEADDENOMINATOR() (uint64, error) { - return _L2CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADDENOMINATOR(&_L2CrossDomainMessenger.CallOpts) -} - -// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) MINGASDYNAMICOVERHEADDENOMINATOR() (uint64, error) { - return _L2CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADDENOMINATOR(&_L2CrossDomainMessenger.CallOpts) -} - -// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) MINGASDYNAMICOVERHEADNUMERATOR(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) MINGASDYNAMICOVERHEADNUMERATOR() (uint64, error) { - return _L2CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADNUMERATOR(&_L2CrossDomainMessenger.CallOpts) -} - -// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. -// -// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) MINGASDYNAMICOVERHEADNUMERATOR() (uint64, error) { - return _L2CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADNUMERATOR(&_L2CrossDomainMessenger.CallOpts) -} - -// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. -// -// Solidity: function OTHER_MESSENGER() view returns(address) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) OTHERMESSENGER(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "OTHER_MESSENGER") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. -// -// Solidity: function OTHER_MESSENGER() view returns(address) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) OTHERMESSENGER() (common.Address, error) { - return _L2CrossDomainMessenger.Contract.OTHERMESSENGER(&_L2CrossDomainMessenger.CallOpts) -} - -// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. -// -// Solidity: function OTHER_MESSENGER() view returns(address) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) OTHERMESSENGER() (common.Address, error) { - return _L2CrossDomainMessenger.Contract.OTHERMESSENGER(&_L2CrossDomainMessenger.CallOpts) -} - -// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. -// -// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) RELAYCALLOVERHEAD(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "RELAY_CALL_OVERHEAD") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. -// -// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) RELAYCALLOVERHEAD() (uint64, error) { - return _L2CrossDomainMessenger.Contract.RELAYCALLOVERHEAD(&_L2CrossDomainMessenger.CallOpts) -} - -// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. -// -// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) RELAYCALLOVERHEAD() (uint64, error) { - return _L2CrossDomainMessenger.Contract.RELAYCALLOVERHEAD(&_L2CrossDomainMessenger.CallOpts) -} - -// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. -// -// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) RELAYCONSTANTOVERHEAD(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "RELAY_CONSTANT_OVERHEAD") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. -// -// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) RELAYCONSTANTOVERHEAD() (uint64, error) { - return _L2CrossDomainMessenger.Contract.RELAYCONSTANTOVERHEAD(&_L2CrossDomainMessenger.CallOpts) -} - -// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. -// -// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) RELAYCONSTANTOVERHEAD() (uint64, error) { - return _L2CrossDomainMessenger.Contract.RELAYCONSTANTOVERHEAD(&_L2CrossDomainMessenger.CallOpts) -} - -// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. -// -// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) RELAYGASCHECKBUFFER(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "RELAY_GAS_CHECK_BUFFER") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. -// -// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) RELAYGASCHECKBUFFER() (uint64, error) { - return _L2CrossDomainMessenger.Contract.RELAYGASCHECKBUFFER(&_L2CrossDomainMessenger.CallOpts) -} - -// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. -// -// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) RELAYGASCHECKBUFFER() (uint64, error) { - return _L2CrossDomainMessenger.Contract.RELAYGASCHECKBUFFER(&_L2CrossDomainMessenger.CallOpts) -} - -// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. -// -// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) RELAYRESERVEDGAS(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "RELAY_RESERVED_GAS") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. -// -// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) RELAYRESERVEDGAS() (uint64, error) { - return _L2CrossDomainMessenger.Contract.RELAYRESERVEDGAS(&_L2CrossDomainMessenger.CallOpts) -} - -// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. -// -// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) RELAYRESERVEDGAS() (uint64, error) { - return _L2CrossDomainMessenger.Contract.RELAYRESERVEDGAS(&_L2CrossDomainMessenger.CallOpts) -} - -// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. -// -// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) BaseGas(opts *bind.CallOpts, _message []byte, _minGasLimit uint32) (uint64, error) { - var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "baseGas", _message, _minGasLimit) - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. -// -// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) BaseGas(_message []byte, _minGasLimit uint32) (uint64, error) { - return _L2CrossDomainMessenger.Contract.BaseGas(&_L2CrossDomainMessenger.CallOpts, _message, _minGasLimit) -} - -// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. -// -// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) BaseGas(_message []byte, _minGasLimit uint32) (uint64, error) { - return _L2CrossDomainMessenger.Contract.BaseGas(&_L2CrossDomainMessenger.CallOpts, _message, _minGasLimit) -} - -// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. -// -// Solidity: function failedMessages(bytes32 ) view returns(bool) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) FailedMessages(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { - var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "failedMessages", arg0) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. -// -// Solidity: function failedMessages(bytes32 ) view returns(bool) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) FailedMessages(arg0 [32]byte) (bool, error) { - return _L2CrossDomainMessenger.Contract.FailedMessages(&_L2CrossDomainMessenger.CallOpts, arg0) -} - -// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. -// -// Solidity: function failedMessages(bytes32 ) view returns(bool) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) FailedMessages(arg0 [32]byte) (bool, error) { - return _L2CrossDomainMessenger.Contract.FailedMessages(&_L2CrossDomainMessenger.CallOpts, arg0) -} - -// L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. -// -// Solidity: function l1CrossDomainMessenger() view returns(address) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) L1CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "l1CrossDomainMessenger") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. -// -// Solidity: function l1CrossDomainMessenger() view returns(address) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) L1CrossDomainMessenger() (common.Address, error) { - return _L2CrossDomainMessenger.Contract.L1CrossDomainMessenger(&_L2CrossDomainMessenger.CallOpts) -} - -// L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. -// -// Solidity: function l1CrossDomainMessenger() view returns(address) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) L1CrossDomainMessenger() (common.Address, error) { - return _L2CrossDomainMessenger.Contract.L1CrossDomainMessenger(&_L2CrossDomainMessenger.CallOpts) -} - -// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. -// -// Solidity: function messageNonce() view returns(uint256) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) MessageNonce(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "messageNonce") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. -// -// Solidity: function messageNonce() view returns(uint256) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) MessageNonce() (*big.Int, error) { - return _L2CrossDomainMessenger.Contract.MessageNonce(&_L2CrossDomainMessenger.CallOpts) -} - -// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. -// -// Solidity: function messageNonce() view returns(uint256) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) MessageNonce() (*big.Int, error) { - return _L2CrossDomainMessenger.Contract.MessageNonce(&_L2CrossDomainMessenger.CallOpts) -} - -// OtherMessenger is a free data retrieval call binding the contract method 0xdb505d80. -// -// Solidity: function otherMessenger() view returns(address) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) OtherMessenger(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "otherMessenger") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OtherMessenger is a free data retrieval call binding the contract method 0xdb505d80. -// -// Solidity: function otherMessenger() view returns(address) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) OtherMessenger() (common.Address, error) { - return _L2CrossDomainMessenger.Contract.OtherMessenger(&_L2CrossDomainMessenger.CallOpts) -} - -// OtherMessenger is a free data retrieval call binding the contract method 0xdb505d80. -// -// Solidity: function otherMessenger() view returns(address) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) OtherMessenger() (common.Address, error) { - return _L2CrossDomainMessenger.Contract.OtherMessenger(&_L2CrossDomainMessenger.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) Paused(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "paused") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) Paused() (bool, error) { - return _L2CrossDomainMessenger.Contract.Paused(&_L2CrossDomainMessenger.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) Paused() (bool, error) { - return _L2CrossDomainMessenger.Contract.Paused(&_L2CrossDomainMessenger.CallOpts) -} - -// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. -// -// Solidity: function successfulMessages(bytes32 ) view returns(bool) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) SuccessfulMessages(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { - var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "successfulMessages", arg0) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. -// -// Solidity: function successfulMessages(bytes32 ) view returns(bool) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) SuccessfulMessages(arg0 [32]byte) (bool, error) { - return _L2CrossDomainMessenger.Contract.SuccessfulMessages(&_L2CrossDomainMessenger.CallOpts, arg0) -} - -// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. -// -// Solidity: function successfulMessages(bytes32 ) view returns(bool) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) SuccessfulMessages(arg0 [32]byte) (bool, error) { - return _L2CrossDomainMessenger.Contract.SuccessfulMessages(&_L2CrossDomainMessenger.CallOpts, arg0) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) Version() (string, error) { - return _L2CrossDomainMessenger.Contract.Version(&_L2CrossDomainMessenger.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) Version() (string, error) { - return _L2CrossDomainMessenger.Contract.Version(&_L2CrossDomainMessenger.CallOpts) -} - -// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. -// -// Solidity: function xDomainMessageSender() view returns(address) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) XDomainMessageSender(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "xDomainMessageSender") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. -// -// Solidity: function xDomainMessageSender() view returns(address) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) XDomainMessageSender() (common.Address, error) { - return _L2CrossDomainMessenger.Contract.XDomainMessageSender(&_L2CrossDomainMessenger.CallOpts) -} - -// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. -// -// Solidity: function xDomainMessageSender() view returns(address) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) XDomainMessageSender() (common.Address, error) { - return _L2CrossDomainMessenger.Contract.XDomainMessageSender(&_L2CrossDomainMessenger.CallOpts) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. -// -// Solidity: function initialize(address _l1CrossDomainMessenger) returns() -func (_L2CrossDomainMessenger *L2CrossDomainMessengerTransactor) Initialize(opts *bind.TransactOpts, _l1CrossDomainMessenger common.Address) (*types.Transaction, error) { - return _L2CrossDomainMessenger.contract.Transact(opts, "initialize", _l1CrossDomainMessenger) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. -// -// Solidity: function initialize(address _l1CrossDomainMessenger) returns() -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) Initialize(_l1CrossDomainMessenger common.Address) (*types.Transaction, error) { - return _L2CrossDomainMessenger.Contract.Initialize(&_L2CrossDomainMessenger.TransactOpts, _l1CrossDomainMessenger) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. -// -// Solidity: function initialize(address _l1CrossDomainMessenger) returns() -func (_L2CrossDomainMessenger *L2CrossDomainMessengerTransactorSession) Initialize(_l1CrossDomainMessenger common.Address) (*types.Transaction, error) { - return _L2CrossDomainMessenger.Contract.Initialize(&_L2CrossDomainMessenger.TransactOpts, _l1CrossDomainMessenger) -} - -// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. -// -// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() -func (_L2CrossDomainMessenger *L2CrossDomainMessengerTransactor) RelayMessage(opts *bind.TransactOpts, _nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { - return _L2CrossDomainMessenger.contract.Transact(opts, "relayMessage", _nonce, _sender, _target, _value, _minGasLimit, _message) -} - -// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. -// -// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) RelayMessage(_nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { - return _L2CrossDomainMessenger.Contract.RelayMessage(&_L2CrossDomainMessenger.TransactOpts, _nonce, _sender, _target, _value, _minGasLimit, _message) -} - -// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. -// -// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() -func (_L2CrossDomainMessenger *L2CrossDomainMessengerTransactorSession) RelayMessage(_nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { - return _L2CrossDomainMessenger.Contract.RelayMessage(&_L2CrossDomainMessenger.TransactOpts, _nonce, _sender, _target, _value, _minGasLimit, _message) -} - -// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. -// -// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() -func (_L2CrossDomainMessenger *L2CrossDomainMessengerTransactor) SendMessage(opts *bind.TransactOpts, _target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { - return _L2CrossDomainMessenger.contract.Transact(opts, "sendMessage", _target, _message, _minGasLimit) -} - -// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. -// -// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) SendMessage(_target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { - return _L2CrossDomainMessenger.Contract.SendMessage(&_L2CrossDomainMessenger.TransactOpts, _target, _message, _minGasLimit) -} - -// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. -// -// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() -func (_L2CrossDomainMessenger *L2CrossDomainMessengerTransactorSession) SendMessage(_target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { - return _L2CrossDomainMessenger.Contract.SendMessage(&_L2CrossDomainMessenger.TransactOpts, _target, _message, _minGasLimit) -} - -// L2CrossDomainMessengerFailedRelayedMessageIterator is returned from FilterFailedRelayedMessage and is used to iterate over the raw logs and unpacked data for FailedRelayedMessage events raised by the L2CrossDomainMessenger contract. -type L2CrossDomainMessengerFailedRelayedMessageIterator struct { - Event *L2CrossDomainMessengerFailedRelayedMessage // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L2CrossDomainMessengerFailedRelayedMessageIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2CrossDomainMessengerFailedRelayedMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2CrossDomainMessengerFailedRelayedMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2CrossDomainMessengerFailedRelayedMessageIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2CrossDomainMessengerFailedRelayedMessageIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2CrossDomainMessengerFailedRelayedMessage represents a FailedRelayedMessage event raised by the L2CrossDomainMessenger contract. -type L2CrossDomainMessengerFailedRelayedMessage struct { - MsgHash [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterFailedRelayedMessage is a free log retrieval operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. -// -// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) FilterFailedRelayedMessage(opts *bind.FilterOpts, msgHash [][32]byte) (*L2CrossDomainMessengerFailedRelayedMessageIterator, error) { - - var msgHashRule []interface{} - for _, msgHashItem := range msgHash { - msgHashRule = append(msgHashRule, msgHashItem) - } - - logs, sub, err := _L2CrossDomainMessenger.contract.FilterLogs(opts, "FailedRelayedMessage", msgHashRule) - if err != nil { - return nil, err - } - return &L2CrossDomainMessengerFailedRelayedMessageIterator{contract: _L2CrossDomainMessenger.contract, event: "FailedRelayedMessage", logs: logs, sub: sub}, nil -} - -// WatchFailedRelayedMessage is a free log subscription operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. -// -// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) WatchFailedRelayedMessage(opts *bind.WatchOpts, sink chan<- *L2CrossDomainMessengerFailedRelayedMessage, msgHash [][32]byte) (event.Subscription, error) { - - var msgHashRule []interface{} - for _, msgHashItem := range msgHash { - msgHashRule = append(msgHashRule, msgHashItem) - } - - logs, sub, err := _L2CrossDomainMessenger.contract.WatchLogs(opts, "FailedRelayedMessage", msgHashRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2CrossDomainMessengerFailedRelayedMessage) - if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "FailedRelayedMessage", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseFailedRelayedMessage is a log parse operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. -// -// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) ParseFailedRelayedMessage(log types.Log) (*L2CrossDomainMessengerFailedRelayedMessage, error) { - event := new(L2CrossDomainMessengerFailedRelayedMessage) - if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "FailedRelayedMessage", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L2CrossDomainMessengerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the L2CrossDomainMessenger contract. -type L2CrossDomainMessengerInitializedIterator struct { - Event *L2CrossDomainMessengerInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L2CrossDomainMessengerInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2CrossDomainMessengerInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2CrossDomainMessengerInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2CrossDomainMessengerInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2CrossDomainMessengerInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2CrossDomainMessengerInitialized represents a Initialized event raised by the L2CrossDomainMessenger contract. -type L2CrossDomainMessengerInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) FilterInitialized(opts *bind.FilterOpts) (*L2CrossDomainMessengerInitializedIterator, error) { - - logs, sub, err := _L2CrossDomainMessenger.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &L2CrossDomainMessengerInitializedIterator{contract: _L2CrossDomainMessenger.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *L2CrossDomainMessengerInitialized) (event.Subscription, error) { - - logs, sub, err := _L2CrossDomainMessenger.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2CrossDomainMessengerInitialized) - if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) ParseInitialized(log types.Log) (*L2CrossDomainMessengerInitialized, error) { - event := new(L2CrossDomainMessengerInitialized) - if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L2CrossDomainMessengerRelayedMessageIterator is returned from FilterRelayedMessage and is used to iterate over the raw logs and unpacked data for RelayedMessage events raised by the L2CrossDomainMessenger contract. -type L2CrossDomainMessengerRelayedMessageIterator struct { - Event *L2CrossDomainMessengerRelayedMessage // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L2CrossDomainMessengerRelayedMessageIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2CrossDomainMessengerRelayedMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2CrossDomainMessengerRelayedMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2CrossDomainMessengerRelayedMessageIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2CrossDomainMessengerRelayedMessageIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2CrossDomainMessengerRelayedMessage represents a RelayedMessage event raised by the L2CrossDomainMessenger contract. -type L2CrossDomainMessengerRelayedMessage struct { - MsgHash [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRelayedMessage is a free log retrieval operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. -// -// Solidity: event RelayedMessage(bytes32 indexed msgHash) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) FilterRelayedMessage(opts *bind.FilterOpts, msgHash [][32]byte) (*L2CrossDomainMessengerRelayedMessageIterator, error) { - - var msgHashRule []interface{} - for _, msgHashItem := range msgHash { - msgHashRule = append(msgHashRule, msgHashItem) - } - - logs, sub, err := _L2CrossDomainMessenger.contract.FilterLogs(opts, "RelayedMessage", msgHashRule) - if err != nil { - return nil, err - } - return &L2CrossDomainMessengerRelayedMessageIterator{contract: _L2CrossDomainMessenger.contract, event: "RelayedMessage", logs: logs, sub: sub}, nil -} - -// WatchRelayedMessage is a free log subscription operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. -// -// Solidity: event RelayedMessage(bytes32 indexed msgHash) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) WatchRelayedMessage(opts *bind.WatchOpts, sink chan<- *L2CrossDomainMessengerRelayedMessage, msgHash [][32]byte) (event.Subscription, error) { - - var msgHashRule []interface{} - for _, msgHashItem := range msgHash { - msgHashRule = append(msgHashRule, msgHashItem) - } - - logs, sub, err := _L2CrossDomainMessenger.contract.WatchLogs(opts, "RelayedMessage", msgHashRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2CrossDomainMessengerRelayedMessage) - if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "RelayedMessage", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseRelayedMessage is a log parse operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. -// -// Solidity: event RelayedMessage(bytes32 indexed msgHash) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) ParseRelayedMessage(log types.Log) (*L2CrossDomainMessengerRelayedMessage, error) { - event := new(L2CrossDomainMessengerRelayedMessage) - if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "RelayedMessage", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L2CrossDomainMessengerSentMessageIterator is returned from FilterSentMessage and is used to iterate over the raw logs and unpacked data for SentMessage events raised by the L2CrossDomainMessenger contract. -type L2CrossDomainMessengerSentMessageIterator struct { - Event *L2CrossDomainMessengerSentMessage // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L2CrossDomainMessengerSentMessageIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2CrossDomainMessengerSentMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2CrossDomainMessengerSentMessage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2CrossDomainMessengerSentMessageIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2CrossDomainMessengerSentMessageIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2CrossDomainMessengerSentMessage represents a SentMessage event raised by the L2CrossDomainMessenger contract. -type L2CrossDomainMessengerSentMessage struct { - Target common.Address - Sender common.Address - Message []byte - MessageNonce *big.Int - GasLimit *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSentMessage is a free log retrieval operation binding the contract event 0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a. -// -// Solidity: event SentMessage(address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) FilterSentMessage(opts *bind.FilterOpts, target []common.Address) (*L2CrossDomainMessengerSentMessageIterator, error) { - - var targetRule []interface{} - for _, targetItem := range target { - targetRule = append(targetRule, targetItem) - } - - logs, sub, err := _L2CrossDomainMessenger.contract.FilterLogs(opts, "SentMessage", targetRule) - if err != nil { - return nil, err - } - return &L2CrossDomainMessengerSentMessageIterator{contract: _L2CrossDomainMessenger.contract, event: "SentMessage", logs: logs, sub: sub}, nil -} - -// WatchSentMessage is a free log subscription operation binding the contract event 0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a. -// -// Solidity: event SentMessage(address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) WatchSentMessage(opts *bind.WatchOpts, sink chan<- *L2CrossDomainMessengerSentMessage, target []common.Address) (event.Subscription, error) { - - var targetRule []interface{} - for _, targetItem := range target { - targetRule = append(targetRule, targetItem) - } - - logs, sub, err := _L2CrossDomainMessenger.contract.WatchLogs(opts, "SentMessage", targetRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2CrossDomainMessengerSentMessage) - if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "SentMessage", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSentMessage is a log parse operation binding the contract event 0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a. -// -// Solidity: event SentMessage(address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) ParseSentMessage(log types.Log) (*L2CrossDomainMessengerSentMessage, error) { - event := new(L2CrossDomainMessengerSentMessage) - if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "SentMessage", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L2CrossDomainMessengerSentMessageExtension1Iterator is returned from FilterSentMessageExtension1 and is used to iterate over the raw logs and unpacked data for SentMessageExtension1 events raised by the L2CrossDomainMessenger contract. -type L2CrossDomainMessengerSentMessageExtension1Iterator struct { - Event *L2CrossDomainMessengerSentMessageExtension1 // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L2CrossDomainMessengerSentMessageExtension1Iterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2CrossDomainMessengerSentMessageExtension1) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2CrossDomainMessengerSentMessageExtension1) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2CrossDomainMessengerSentMessageExtension1Iterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2CrossDomainMessengerSentMessageExtension1Iterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2CrossDomainMessengerSentMessageExtension1 represents a SentMessageExtension1 event raised by the L2CrossDomainMessenger contract. -type L2CrossDomainMessengerSentMessageExtension1 struct { - Sender common.Address - Value *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSentMessageExtension1 is a free log retrieval operation binding the contract event 0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546. -// -// Solidity: event SentMessageExtension1(address indexed sender, uint256 value) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) FilterSentMessageExtension1(opts *bind.FilterOpts, sender []common.Address) (*L2CrossDomainMessengerSentMessageExtension1Iterator, error) { - - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _L2CrossDomainMessenger.contract.FilterLogs(opts, "SentMessageExtension1", senderRule) - if err != nil { - return nil, err - } - return &L2CrossDomainMessengerSentMessageExtension1Iterator{contract: _L2CrossDomainMessenger.contract, event: "SentMessageExtension1", logs: logs, sub: sub}, nil -} - -// WatchSentMessageExtension1 is a free log subscription operation binding the contract event 0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546. -// -// Solidity: event SentMessageExtension1(address indexed sender, uint256 value) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) WatchSentMessageExtension1(opts *bind.WatchOpts, sink chan<- *L2CrossDomainMessengerSentMessageExtension1, sender []common.Address) (event.Subscription, error) { - - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _L2CrossDomainMessenger.contract.WatchLogs(opts, "SentMessageExtension1", senderRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2CrossDomainMessengerSentMessageExtension1) - if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "SentMessageExtension1", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSentMessageExtension1 is a log parse operation binding the contract event 0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546. -// -// Solidity: event SentMessageExtension1(address indexed sender, uint256 value) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) ParseSentMessageExtension1(log types.Log) (*L2CrossDomainMessengerSentMessageExtension1, error) { - event := new(L2CrossDomainMessengerSentMessageExtension1) - if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "SentMessageExtension1", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/indexer/bindings/l2outputoracle.go b/indexer/bindings/l2outputoracle.go deleted file mode 100644 index 1d8934c7c838..000000000000 --- a/indexer/bindings/l2outputoracle.go +++ /dev/null @@ -1,1373 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindings - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// TypesOutputProposal is an auto generated low-level Go binding around an user-defined struct. -type TypesOutputProposal struct { - OutputRoot [32]byte - Timestamp *big.Int - L2BlockNumber *big.Int -} - -// L2OutputOracleMetaData contains all meta data concerning the L2OutputOracle contract. -var L2OutputOracleMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"CHALLENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FINALIZATION_PERIOD_SECONDS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L2_BLOCK_TIME\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PROPOSER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"SUBMISSION_INTERVAL\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"challenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"computeL2Timestamp\",\"inputs\":[{\"name\":\"_l2BlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deleteL2Outputs\",\"inputs\":[{\"name\":\"_l2OutputIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizationPeriodSeconds\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getL2Output\",\"inputs\":[{\"name\":\"_l2OutputIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structTypes.OutputProposal\",\"components\":[{\"name\":\"outputRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"timestamp\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"l2BlockNumber\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getL2OutputAfter\",\"inputs\":[{\"name\":\"_l2BlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structTypes.OutputProposal\",\"components\":[{\"name\":\"outputRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"timestamp\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"l2BlockNumber\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getL2OutputIndexAfter\",\"inputs\":[{\"name\":\"_l2BlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_submissionInterval\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_l2BlockTime\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_startingBlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_startingTimestamp\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_proposer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_challenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l2BlockTime\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestOutputIndex\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"nextBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"nextOutputIndex\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposeL2Output\",\"inputs\":[{\"name\":\"_outputRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_l2BlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_l1BlockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_l1BlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"proposer\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"startingBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"startingTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"submissionInterval\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OutputProposed\",\"inputs\":[{\"name\":\"outputRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"l2OutputIndex\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"l2BlockNumber\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"l1Timestamp\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OutputsDeleted\",\"inputs\":[{\"name\":\"prevNextOutputIndex\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"newNextOutputIndex\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b50620000256001806000808080806200002b565b62000328565b600054610100900460ff16158080156200004c5750600054600160ff909116105b806200007c575062000069306200031960201b6200135d1760201c565b1580156200007c575060005460ff166001145b620000e55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000109576000805461ff0019166101001790555b60008811620001815760405162461bcd60e51b815260206004820152603a60248201527f4c324f75747075744f7261636c653a207375626d697373696f6e20696e74657260448201527f76616c206d7573742062652067726561746572207468616e20300000000000006064820152608401620000dc565b60008711620001f95760405162461bcd60e51b815260206004820152603460248201527f4c324f75747075744f7261636c653a204c3220626c6f636b2074696d65206d7560448201527f73742062652067726561746572207468616e20300000000000000000000000006064820152608401620000dc565b428511156200027f5760405162461bcd60e51b8152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201526374696d6560e01b608482015260a401620000dc565b6004889055600587905560018690556002859055600780546001600160a01b038087166001600160a01b0319928316179092556006805492861692909116919091179055600882905580156200030f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6001600160a01b03163b151590565b6115d580620003386000396000f3fe60806040526004361061018a5760003560e01c806389c44cbb116100d6578063ce5db8d61161007f578063dcec334811610059578063dcec33481461049b578063e1a41bcf146104b0578063f4daa291146104c657600080fd5b8063ce5db8d614610445578063cf8e5cf01461045b578063d1de856c1461047b57600080fd5b8063a25ae557116100b0578063a25ae55714610391578063a8e4fb90146103ed578063bffa7f0f1461041a57600080fd5b806389c44cbb1461034857806393991af3146103685780639aaab6481461037e57600080fd5b806369f16eec1161013857806370872aa51161011257806370872aa5146102fc5780637f00642014610312578063887862721461033257600080fd5b806369f16eec146102a75780636abcf563146102bc5780636b4d98dd146102d157600080fd5b8063529933df11610169578063529933df146101ea578063534db0e2146101ff57806354fd4d501461025157600080fd5b80622134cc1461018f5780631c89c97d146101b35780634599c788146101d5575b600080fd5b34801561019b57600080fd5b506005545b6040519081526020015b60405180910390f35b3480156101bf57600080fd5b506101d36101ce3660046113a2565b6104db565b005b3480156101e157600080fd5b506101a06108b6565b3480156101f657600080fd5b506004546101a0565b34801561020b57600080fd5b5060065461022c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101aa565b34801561025d57600080fd5b5061029a6040518060400160405280600581526020017f312e382e3000000000000000000000000000000000000000000000000000000081525081565b6040516101aa9190611405565b3480156102b357600080fd5b506101a0610929565b3480156102c857600080fd5b506003546101a0565b3480156102dd57600080fd5b5060065473ffffffffffffffffffffffffffffffffffffffff1661022c565b34801561030857600080fd5b506101a060015481565b34801561031e57600080fd5b506101a061032d366004611478565b61093b565b34801561033e57600080fd5b506101a060025481565b34801561035457600080fd5b506101d3610363366004611478565b610b4f565b34801561037457600080fd5b506101a060055481565b6101d361038c366004611491565b610de9565b34801561039d57600080fd5b506103b16103ac366004611478565b61124a565b60408051825181526020808401516fffffffffffffffffffffffffffffffff9081169183019190915292820151909216908201526060016101aa565b3480156103f957600080fd5b5060075461022c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561042657600080fd5b5060075473ffffffffffffffffffffffffffffffffffffffff1661022c565b34801561045157600080fd5b506101a060085481565b34801561046757600080fd5b506103b1610476366004611478565b6112de565b34801561048757600080fd5b506101a0610496366004611478565b611316565b3480156104a757600080fd5b506101a0611346565b3480156104bc57600080fd5b506101a060045481565b3480156104d257600080fd5b506008546101a0565b600054610100900460ff16158080156104fb5750600054600160ff909116105b806105155750303b158015610515575060005460ff166001145b6105a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561060457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60008811610694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a207375626d697373696f6e20696e74657260448201527f76616c206d7573742062652067726561746572207468616e2030000000000000606482015260840161059d565b60008711610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4c324f75747075744f7261636c653a204c3220626c6f636b2074696d65206d7560448201527f73742062652067726561746572207468616e2030000000000000000000000000606482015260840161059d565b428511156107db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201527f74696d6500000000000000000000000000000000000000000000000000000000608482015260a40161059d565b60048890556005879055600186905560028590556007805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556006805492861692909116919091179055600882905580156108ac57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6003546000901561092057600380546108d1906001906114f2565b815481106108e1576108e1611509565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16919050565b6001545b905090565b600354600090610924906001906114f2565b60006109456108b6565b8211156109fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f7420666f72206120626c6f636b207468617420686173206e6f74206265656e2060648201527f70726f706f736564000000000000000000000000000000000000000000000000608482015260a40161059d565b600354610aaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f74206173206e6f206f7574707574732068617665206265656e2070726f706f7360648201527f6564207965740000000000000000000000000000000000000000000000000000608482015260a40161059d565b6003546000905b80821015610b485760006002610acc8385611538565b610ad69190611550565b90508460038281548110610aec57610aec611509565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff161015610b3e57610b37816001611538565b9250610b42565b8091505b50610ab6565b5092915050565b60065473ffffffffffffffffffffffffffffffffffffffff163314610bf6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324f75747075744f7261636c653a206f6e6c7920746865206368616c6c656e60448201527f67657220616464726573732063616e2064656c657465206f7574707574730000606482015260840161059d565b6003548110610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f747075747320616674657220746865206c6174657374206f757470757420696e60648201527f6465780000000000000000000000000000000000000000000000000000000000608482015260a40161059d565b60085460038281548110610cc357610cc3611509565b6000918252602090912060016002909202010154610cf3906fffffffffffffffffffffffffffffffff16426114f2565b10610da6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f74707574732074686174206861766520616c7265616479206265656e2066696e60648201527f616c697a65640000000000000000000000000000000000000000000000000000608482015260a40161059d565b6000610db160035490565b90508160035581817f4ee37ac2c786ec85e87592d3c5c8a1dd66f8496dda3f125d9ea8ca5f657629b660405160405180910390a35050565b60075473ffffffffffffffffffffffffffffffffffffffff163314610eb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f4c324f75747075744f7261636c653a206f6e6c79207468652070726f706f736560448201527f7220616464726573732063616e2070726f706f7365206e6577206f757470757460648201527f7300000000000000000000000000000000000000000000000000000000000000608482015260a40161059d565b610ebe611346565b8314610f72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a20626c6f636b206e756d626572206d757360448201527f7420626520657175616c20746f206e65787420657870656374656420626c6f6360648201527f6b206e756d626572000000000000000000000000000000000000000000000000608482015260a40161059d565b42610f7c84611316565b10611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324f75747075744f7261636c653a2063616e6e6f742070726f706f7365204c60448201527f32206f757470757420696e207468652066757475726500000000000000000000606482015260840161059d565b83611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a204c32206f75747075742070726f706f7360448201527f616c2063616e6e6f7420626520746865207a65726f2068617368000000000000606482015260840161059d565b81156111525781814014611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4c324f75747075744f7261636c653a20626c6f636b206861736820646f65732060448201527f6e6f74206d61746368207468652068617368206174207468652065787065637460648201527f6564206865696768740000000000000000000000000000000000000000000000608482015260a40161059d565b8261115c60035490565b857fa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e24260405161118e91815260200190565b60405180910390a45050604080516060810182529283526fffffffffffffffffffffffffffffffff4281166020850190815292811691840191825260038054600181018255600091909152935160029094027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b810194909455915190518216700100000000000000000000000000000000029116177fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c90910155565b60408051606081018252600080825260208201819052918101919091526003828154811061127a5761127a611509565b600091825260209182902060408051606081018252600290930290910180548352600101546fffffffffffffffffffffffffffffffff8082169484019490945270010000000000000000000000000000000090049092169181019190915292915050565b604080516060810182526000808252602082018190529181019190915260036113068361093b565b8154811061127a5761127a611509565b60006005546001548361132991906114f2565b611333919061158b565b6002546113409190611538565b92915050565b60006004546113536108b6565b6109249190611538565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b803573ffffffffffffffffffffffffffffffffffffffff8116811461139d57600080fd5b919050565b600080600080600080600060e0888a0312156113bd57600080fd5b873596506020880135955060408801359450606088013593506113e260808901611379565b92506113f060a08901611379565b915060c0880135905092959891949750929550565b600060208083528351808285015260005b8181101561143257858101830151858201604001528201611416565b81811115611444576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561148a57600080fd5b5035919050565b600080600080608085870312156114a757600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611504576115046114c3565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561154b5761154b6114c3565b500190565b600082611586577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156115c3576115c36114c3565b50029056fea164736f6c634300080f000a", -} - -// L2OutputOracleABI is the input ABI used to generate the binding from. -// Deprecated: Use L2OutputOracleMetaData.ABI instead. -var L2OutputOracleABI = L2OutputOracleMetaData.ABI - -// L2OutputOracleBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use L2OutputOracleMetaData.Bin instead. -var L2OutputOracleBin = L2OutputOracleMetaData.Bin - -// DeployL2OutputOracle deploys a new Ethereum contract, binding an instance of L2OutputOracle to it. -func DeployL2OutputOracle(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *L2OutputOracle, error) { - parsed, err := L2OutputOracleMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(L2OutputOracleBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &L2OutputOracle{L2OutputOracleCaller: L2OutputOracleCaller{contract: contract}, L2OutputOracleTransactor: L2OutputOracleTransactor{contract: contract}, L2OutputOracleFilterer: L2OutputOracleFilterer{contract: contract}}, nil -} - -// L2OutputOracle is an auto generated Go binding around an Ethereum contract. -type L2OutputOracle struct { - L2OutputOracleCaller // Read-only binding to the contract - L2OutputOracleTransactor // Write-only binding to the contract - L2OutputOracleFilterer // Log filterer for contract events -} - -// L2OutputOracleCaller is an auto generated read-only Go binding around an Ethereum contract. -type L2OutputOracleCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L2OutputOracleTransactor is an auto generated write-only Go binding around an Ethereum contract. -type L2OutputOracleTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L2OutputOracleFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type L2OutputOracleFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L2OutputOracleSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type L2OutputOracleSession struct { - Contract *L2OutputOracle // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// L2OutputOracleCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type L2OutputOracleCallerSession struct { - Contract *L2OutputOracleCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// L2OutputOracleTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type L2OutputOracleTransactorSession struct { - Contract *L2OutputOracleTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// L2OutputOracleRaw is an auto generated low-level Go binding around an Ethereum contract. -type L2OutputOracleRaw struct { - Contract *L2OutputOracle // Generic contract binding to access the raw methods on -} - -// L2OutputOracleCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type L2OutputOracleCallerRaw struct { - Contract *L2OutputOracleCaller // Generic read-only contract binding to access the raw methods on -} - -// L2OutputOracleTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type L2OutputOracleTransactorRaw struct { - Contract *L2OutputOracleTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewL2OutputOracle creates a new instance of L2OutputOracle, bound to a specific deployed contract. -func NewL2OutputOracle(address common.Address, backend bind.ContractBackend) (*L2OutputOracle, error) { - contract, err := bindL2OutputOracle(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &L2OutputOracle{L2OutputOracleCaller: L2OutputOracleCaller{contract: contract}, L2OutputOracleTransactor: L2OutputOracleTransactor{contract: contract}, L2OutputOracleFilterer: L2OutputOracleFilterer{contract: contract}}, nil -} - -// NewL2OutputOracleCaller creates a new read-only instance of L2OutputOracle, bound to a specific deployed contract. -func NewL2OutputOracleCaller(address common.Address, caller bind.ContractCaller) (*L2OutputOracleCaller, error) { - contract, err := bindL2OutputOracle(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &L2OutputOracleCaller{contract: contract}, nil -} - -// NewL2OutputOracleTransactor creates a new write-only instance of L2OutputOracle, bound to a specific deployed contract. -func NewL2OutputOracleTransactor(address common.Address, transactor bind.ContractTransactor) (*L2OutputOracleTransactor, error) { - contract, err := bindL2OutputOracle(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &L2OutputOracleTransactor{contract: contract}, nil -} - -// NewL2OutputOracleFilterer creates a new log filterer instance of L2OutputOracle, bound to a specific deployed contract. -func NewL2OutputOracleFilterer(address common.Address, filterer bind.ContractFilterer) (*L2OutputOracleFilterer, error) { - contract, err := bindL2OutputOracle(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &L2OutputOracleFilterer{contract: contract}, nil -} - -// bindL2OutputOracle binds a generic wrapper to an already deployed contract. -func bindL2OutputOracle(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(L2OutputOracleABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_L2OutputOracle *L2OutputOracleRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _L2OutputOracle.Contract.L2OutputOracleCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_L2OutputOracle *L2OutputOracleRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L2OutputOracle.Contract.L2OutputOracleTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_L2OutputOracle *L2OutputOracleRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _L2OutputOracle.Contract.L2OutputOracleTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_L2OutputOracle *L2OutputOracleCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _L2OutputOracle.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_L2OutputOracle *L2OutputOracleTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L2OutputOracle.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_L2OutputOracle *L2OutputOracleTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _L2OutputOracle.Contract.contract.Transact(opts, method, params...) -} - -// CHALLENGER is a free data retrieval call binding the contract method 0x6b4d98dd. -// -// Solidity: function CHALLENGER() view returns(address) -func (_L2OutputOracle *L2OutputOracleCaller) CHALLENGER(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "CHALLENGER") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// CHALLENGER is a free data retrieval call binding the contract method 0x6b4d98dd. -// -// Solidity: function CHALLENGER() view returns(address) -func (_L2OutputOracle *L2OutputOracleSession) CHALLENGER() (common.Address, error) { - return _L2OutputOracle.Contract.CHALLENGER(&_L2OutputOracle.CallOpts) -} - -// CHALLENGER is a free data retrieval call binding the contract method 0x6b4d98dd. -// -// Solidity: function CHALLENGER() view returns(address) -func (_L2OutputOracle *L2OutputOracleCallerSession) CHALLENGER() (common.Address, error) { - return _L2OutputOracle.Contract.CHALLENGER(&_L2OutputOracle.CallOpts) -} - -// FINALIZATIONPERIODSECONDS is a free data retrieval call binding the contract method 0xf4daa291. -// -// Solidity: function FINALIZATION_PERIOD_SECONDS() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) FINALIZATIONPERIODSECONDS(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "FINALIZATION_PERIOD_SECONDS") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// FINALIZATIONPERIODSECONDS is a free data retrieval call binding the contract method 0xf4daa291. -// -// Solidity: function FINALIZATION_PERIOD_SECONDS() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) FINALIZATIONPERIODSECONDS() (*big.Int, error) { - return _L2OutputOracle.Contract.FINALIZATIONPERIODSECONDS(&_L2OutputOracle.CallOpts) -} - -// FINALIZATIONPERIODSECONDS is a free data retrieval call binding the contract method 0xf4daa291. -// -// Solidity: function FINALIZATION_PERIOD_SECONDS() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) FINALIZATIONPERIODSECONDS() (*big.Int, error) { - return _L2OutputOracle.Contract.FINALIZATIONPERIODSECONDS(&_L2OutputOracle.CallOpts) -} - -// L2BLOCKTIME is a free data retrieval call binding the contract method 0x002134cc. -// -// Solidity: function L2_BLOCK_TIME() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) L2BLOCKTIME(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "L2_BLOCK_TIME") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// L2BLOCKTIME is a free data retrieval call binding the contract method 0x002134cc. -// -// Solidity: function L2_BLOCK_TIME() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) L2BLOCKTIME() (*big.Int, error) { - return _L2OutputOracle.Contract.L2BLOCKTIME(&_L2OutputOracle.CallOpts) -} - -// L2BLOCKTIME is a free data retrieval call binding the contract method 0x002134cc. -// -// Solidity: function L2_BLOCK_TIME() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) L2BLOCKTIME() (*big.Int, error) { - return _L2OutputOracle.Contract.L2BLOCKTIME(&_L2OutputOracle.CallOpts) -} - -// PROPOSER is a free data retrieval call binding the contract method 0xbffa7f0f. -// -// Solidity: function PROPOSER() view returns(address) -func (_L2OutputOracle *L2OutputOracleCaller) PROPOSER(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "PROPOSER") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// PROPOSER is a free data retrieval call binding the contract method 0xbffa7f0f. -// -// Solidity: function PROPOSER() view returns(address) -func (_L2OutputOracle *L2OutputOracleSession) PROPOSER() (common.Address, error) { - return _L2OutputOracle.Contract.PROPOSER(&_L2OutputOracle.CallOpts) -} - -// PROPOSER is a free data retrieval call binding the contract method 0xbffa7f0f. -// -// Solidity: function PROPOSER() view returns(address) -func (_L2OutputOracle *L2OutputOracleCallerSession) PROPOSER() (common.Address, error) { - return _L2OutputOracle.Contract.PROPOSER(&_L2OutputOracle.CallOpts) -} - -// SUBMISSIONINTERVAL is a free data retrieval call binding the contract method 0x529933df. -// -// Solidity: function SUBMISSION_INTERVAL() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) SUBMISSIONINTERVAL(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "SUBMISSION_INTERVAL") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// SUBMISSIONINTERVAL is a free data retrieval call binding the contract method 0x529933df. -// -// Solidity: function SUBMISSION_INTERVAL() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) SUBMISSIONINTERVAL() (*big.Int, error) { - return _L2OutputOracle.Contract.SUBMISSIONINTERVAL(&_L2OutputOracle.CallOpts) -} - -// SUBMISSIONINTERVAL is a free data retrieval call binding the contract method 0x529933df. -// -// Solidity: function SUBMISSION_INTERVAL() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) SUBMISSIONINTERVAL() (*big.Int, error) { - return _L2OutputOracle.Contract.SUBMISSIONINTERVAL(&_L2OutputOracle.CallOpts) -} - -// Challenger is a free data retrieval call binding the contract method 0x534db0e2. -// -// Solidity: function challenger() view returns(address) -func (_L2OutputOracle *L2OutputOracleCaller) Challenger(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "challenger") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Challenger is a free data retrieval call binding the contract method 0x534db0e2. -// -// Solidity: function challenger() view returns(address) -func (_L2OutputOracle *L2OutputOracleSession) Challenger() (common.Address, error) { - return _L2OutputOracle.Contract.Challenger(&_L2OutputOracle.CallOpts) -} - -// Challenger is a free data retrieval call binding the contract method 0x534db0e2. -// -// Solidity: function challenger() view returns(address) -func (_L2OutputOracle *L2OutputOracleCallerSession) Challenger() (common.Address, error) { - return _L2OutputOracle.Contract.Challenger(&_L2OutputOracle.CallOpts) -} - -// ComputeL2Timestamp is a free data retrieval call binding the contract method 0xd1de856c. -// -// Solidity: function computeL2Timestamp(uint256 _l2BlockNumber) view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) ComputeL2Timestamp(opts *bind.CallOpts, _l2BlockNumber *big.Int) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "computeL2Timestamp", _l2BlockNumber) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// ComputeL2Timestamp is a free data retrieval call binding the contract method 0xd1de856c. -// -// Solidity: function computeL2Timestamp(uint256 _l2BlockNumber) view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) ComputeL2Timestamp(_l2BlockNumber *big.Int) (*big.Int, error) { - return _L2OutputOracle.Contract.ComputeL2Timestamp(&_L2OutputOracle.CallOpts, _l2BlockNumber) -} - -// ComputeL2Timestamp is a free data retrieval call binding the contract method 0xd1de856c. -// -// Solidity: function computeL2Timestamp(uint256 _l2BlockNumber) view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) ComputeL2Timestamp(_l2BlockNumber *big.Int) (*big.Int, error) { - return _L2OutputOracle.Contract.ComputeL2Timestamp(&_L2OutputOracle.CallOpts, _l2BlockNumber) -} - -// FinalizationPeriodSeconds is a free data retrieval call binding the contract method 0xce5db8d6. -// -// Solidity: function finalizationPeriodSeconds() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) FinalizationPeriodSeconds(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "finalizationPeriodSeconds") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// FinalizationPeriodSeconds is a free data retrieval call binding the contract method 0xce5db8d6. -// -// Solidity: function finalizationPeriodSeconds() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) FinalizationPeriodSeconds() (*big.Int, error) { - return _L2OutputOracle.Contract.FinalizationPeriodSeconds(&_L2OutputOracle.CallOpts) -} - -// FinalizationPeriodSeconds is a free data retrieval call binding the contract method 0xce5db8d6. -// -// Solidity: function finalizationPeriodSeconds() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) FinalizationPeriodSeconds() (*big.Int, error) { - return _L2OutputOracle.Contract.FinalizationPeriodSeconds(&_L2OutputOracle.CallOpts) -} - -// GetL2Output is a free data retrieval call binding the contract method 0xa25ae557. -// -// Solidity: function getL2Output(uint256 _l2OutputIndex) view returns((bytes32,uint128,uint128)) -func (_L2OutputOracle *L2OutputOracleCaller) GetL2Output(opts *bind.CallOpts, _l2OutputIndex *big.Int) (TypesOutputProposal, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "getL2Output", _l2OutputIndex) - - if err != nil { - return *new(TypesOutputProposal), err - } - - out0 := *abi.ConvertType(out[0], new(TypesOutputProposal)).(*TypesOutputProposal) - - return out0, err - -} - -// GetL2Output is a free data retrieval call binding the contract method 0xa25ae557. -// -// Solidity: function getL2Output(uint256 _l2OutputIndex) view returns((bytes32,uint128,uint128)) -func (_L2OutputOracle *L2OutputOracleSession) GetL2Output(_l2OutputIndex *big.Int) (TypesOutputProposal, error) { - return _L2OutputOracle.Contract.GetL2Output(&_L2OutputOracle.CallOpts, _l2OutputIndex) -} - -// GetL2Output is a free data retrieval call binding the contract method 0xa25ae557. -// -// Solidity: function getL2Output(uint256 _l2OutputIndex) view returns((bytes32,uint128,uint128)) -func (_L2OutputOracle *L2OutputOracleCallerSession) GetL2Output(_l2OutputIndex *big.Int) (TypesOutputProposal, error) { - return _L2OutputOracle.Contract.GetL2Output(&_L2OutputOracle.CallOpts, _l2OutputIndex) -} - -// GetL2OutputAfter is a free data retrieval call binding the contract method 0xcf8e5cf0. -// -// Solidity: function getL2OutputAfter(uint256 _l2BlockNumber) view returns((bytes32,uint128,uint128)) -func (_L2OutputOracle *L2OutputOracleCaller) GetL2OutputAfter(opts *bind.CallOpts, _l2BlockNumber *big.Int) (TypesOutputProposal, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "getL2OutputAfter", _l2BlockNumber) - - if err != nil { - return *new(TypesOutputProposal), err - } - - out0 := *abi.ConvertType(out[0], new(TypesOutputProposal)).(*TypesOutputProposal) - - return out0, err - -} - -// GetL2OutputAfter is a free data retrieval call binding the contract method 0xcf8e5cf0. -// -// Solidity: function getL2OutputAfter(uint256 _l2BlockNumber) view returns((bytes32,uint128,uint128)) -func (_L2OutputOracle *L2OutputOracleSession) GetL2OutputAfter(_l2BlockNumber *big.Int) (TypesOutputProposal, error) { - return _L2OutputOracle.Contract.GetL2OutputAfter(&_L2OutputOracle.CallOpts, _l2BlockNumber) -} - -// GetL2OutputAfter is a free data retrieval call binding the contract method 0xcf8e5cf0. -// -// Solidity: function getL2OutputAfter(uint256 _l2BlockNumber) view returns((bytes32,uint128,uint128)) -func (_L2OutputOracle *L2OutputOracleCallerSession) GetL2OutputAfter(_l2BlockNumber *big.Int) (TypesOutputProposal, error) { - return _L2OutputOracle.Contract.GetL2OutputAfter(&_L2OutputOracle.CallOpts, _l2BlockNumber) -} - -// GetL2OutputIndexAfter is a free data retrieval call binding the contract method 0x7f006420. -// -// Solidity: function getL2OutputIndexAfter(uint256 _l2BlockNumber) view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) GetL2OutputIndexAfter(opts *bind.CallOpts, _l2BlockNumber *big.Int) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "getL2OutputIndexAfter", _l2BlockNumber) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetL2OutputIndexAfter is a free data retrieval call binding the contract method 0x7f006420. -// -// Solidity: function getL2OutputIndexAfter(uint256 _l2BlockNumber) view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) GetL2OutputIndexAfter(_l2BlockNumber *big.Int) (*big.Int, error) { - return _L2OutputOracle.Contract.GetL2OutputIndexAfter(&_L2OutputOracle.CallOpts, _l2BlockNumber) -} - -// GetL2OutputIndexAfter is a free data retrieval call binding the contract method 0x7f006420. -// -// Solidity: function getL2OutputIndexAfter(uint256 _l2BlockNumber) view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) GetL2OutputIndexAfter(_l2BlockNumber *big.Int) (*big.Int, error) { - return _L2OutputOracle.Contract.GetL2OutputIndexAfter(&_L2OutputOracle.CallOpts, _l2BlockNumber) -} - -// L2BlockTime is a free data retrieval call binding the contract method 0x93991af3. -// -// Solidity: function l2BlockTime() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) L2BlockTime(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "l2BlockTime") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// L2BlockTime is a free data retrieval call binding the contract method 0x93991af3. -// -// Solidity: function l2BlockTime() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) L2BlockTime() (*big.Int, error) { - return _L2OutputOracle.Contract.L2BlockTime(&_L2OutputOracle.CallOpts) -} - -// L2BlockTime is a free data retrieval call binding the contract method 0x93991af3. -// -// Solidity: function l2BlockTime() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) L2BlockTime() (*big.Int, error) { - return _L2OutputOracle.Contract.L2BlockTime(&_L2OutputOracle.CallOpts) -} - -// LatestBlockNumber is a free data retrieval call binding the contract method 0x4599c788. -// -// Solidity: function latestBlockNumber() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) LatestBlockNumber(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "latestBlockNumber") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// LatestBlockNumber is a free data retrieval call binding the contract method 0x4599c788. -// -// Solidity: function latestBlockNumber() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) LatestBlockNumber() (*big.Int, error) { - return _L2OutputOracle.Contract.LatestBlockNumber(&_L2OutputOracle.CallOpts) -} - -// LatestBlockNumber is a free data retrieval call binding the contract method 0x4599c788. -// -// Solidity: function latestBlockNumber() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) LatestBlockNumber() (*big.Int, error) { - return _L2OutputOracle.Contract.LatestBlockNumber(&_L2OutputOracle.CallOpts) -} - -// LatestOutputIndex is a free data retrieval call binding the contract method 0x69f16eec. -// -// Solidity: function latestOutputIndex() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) LatestOutputIndex(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "latestOutputIndex") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// LatestOutputIndex is a free data retrieval call binding the contract method 0x69f16eec. -// -// Solidity: function latestOutputIndex() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) LatestOutputIndex() (*big.Int, error) { - return _L2OutputOracle.Contract.LatestOutputIndex(&_L2OutputOracle.CallOpts) -} - -// LatestOutputIndex is a free data retrieval call binding the contract method 0x69f16eec. -// -// Solidity: function latestOutputIndex() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) LatestOutputIndex() (*big.Int, error) { - return _L2OutputOracle.Contract.LatestOutputIndex(&_L2OutputOracle.CallOpts) -} - -// NextBlockNumber is a free data retrieval call binding the contract method 0xdcec3348. -// -// Solidity: function nextBlockNumber() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) NextBlockNumber(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "nextBlockNumber") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// NextBlockNumber is a free data retrieval call binding the contract method 0xdcec3348. -// -// Solidity: function nextBlockNumber() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) NextBlockNumber() (*big.Int, error) { - return _L2OutputOracle.Contract.NextBlockNumber(&_L2OutputOracle.CallOpts) -} - -// NextBlockNumber is a free data retrieval call binding the contract method 0xdcec3348. -// -// Solidity: function nextBlockNumber() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) NextBlockNumber() (*big.Int, error) { - return _L2OutputOracle.Contract.NextBlockNumber(&_L2OutputOracle.CallOpts) -} - -// NextOutputIndex is a free data retrieval call binding the contract method 0x6abcf563. -// -// Solidity: function nextOutputIndex() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) NextOutputIndex(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "nextOutputIndex") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// NextOutputIndex is a free data retrieval call binding the contract method 0x6abcf563. -// -// Solidity: function nextOutputIndex() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) NextOutputIndex() (*big.Int, error) { - return _L2OutputOracle.Contract.NextOutputIndex(&_L2OutputOracle.CallOpts) -} - -// NextOutputIndex is a free data retrieval call binding the contract method 0x6abcf563. -// -// Solidity: function nextOutputIndex() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) NextOutputIndex() (*big.Int, error) { - return _L2OutputOracle.Contract.NextOutputIndex(&_L2OutputOracle.CallOpts) -} - -// Proposer is a free data retrieval call binding the contract method 0xa8e4fb90. -// -// Solidity: function proposer() view returns(address) -func (_L2OutputOracle *L2OutputOracleCaller) Proposer(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "proposer") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Proposer is a free data retrieval call binding the contract method 0xa8e4fb90. -// -// Solidity: function proposer() view returns(address) -func (_L2OutputOracle *L2OutputOracleSession) Proposer() (common.Address, error) { - return _L2OutputOracle.Contract.Proposer(&_L2OutputOracle.CallOpts) -} - -// Proposer is a free data retrieval call binding the contract method 0xa8e4fb90. -// -// Solidity: function proposer() view returns(address) -func (_L2OutputOracle *L2OutputOracleCallerSession) Proposer() (common.Address, error) { - return _L2OutputOracle.Contract.Proposer(&_L2OutputOracle.CallOpts) -} - -// StartingBlockNumber is a free data retrieval call binding the contract method 0x70872aa5. -// -// Solidity: function startingBlockNumber() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) StartingBlockNumber(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "startingBlockNumber") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// StartingBlockNumber is a free data retrieval call binding the contract method 0x70872aa5. -// -// Solidity: function startingBlockNumber() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) StartingBlockNumber() (*big.Int, error) { - return _L2OutputOracle.Contract.StartingBlockNumber(&_L2OutputOracle.CallOpts) -} - -// StartingBlockNumber is a free data retrieval call binding the contract method 0x70872aa5. -// -// Solidity: function startingBlockNumber() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) StartingBlockNumber() (*big.Int, error) { - return _L2OutputOracle.Contract.StartingBlockNumber(&_L2OutputOracle.CallOpts) -} - -// StartingTimestamp is a free data retrieval call binding the contract method 0x88786272. -// -// Solidity: function startingTimestamp() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) StartingTimestamp(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "startingTimestamp") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// StartingTimestamp is a free data retrieval call binding the contract method 0x88786272. -// -// Solidity: function startingTimestamp() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) StartingTimestamp() (*big.Int, error) { - return _L2OutputOracle.Contract.StartingTimestamp(&_L2OutputOracle.CallOpts) -} - -// StartingTimestamp is a free data retrieval call binding the contract method 0x88786272. -// -// Solidity: function startingTimestamp() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) StartingTimestamp() (*big.Int, error) { - return _L2OutputOracle.Contract.StartingTimestamp(&_L2OutputOracle.CallOpts) -} - -// SubmissionInterval is a free data retrieval call binding the contract method 0xe1a41bcf. -// -// Solidity: function submissionInterval() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) SubmissionInterval(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "submissionInterval") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// SubmissionInterval is a free data retrieval call binding the contract method 0xe1a41bcf. -// -// Solidity: function submissionInterval() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) SubmissionInterval() (*big.Int, error) { - return _L2OutputOracle.Contract.SubmissionInterval(&_L2OutputOracle.CallOpts) -} - -// SubmissionInterval is a free data retrieval call binding the contract method 0xe1a41bcf. -// -// Solidity: function submissionInterval() view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) SubmissionInterval() (*big.Int, error) { - return _L2OutputOracle.Contract.SubmissionInterval(&_L2OutputOracle.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L2OutputOracle *L2OutputOracleCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L2OutputOracle *L2OutputOracleSession) Version() (string, error) { - return _L2OutputOracle.Contract.Version(&_L2OutputOracle.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L2OutputOracle *L2OutputOracleCallerSession) Version() (string, error) { - return _L2OutputOracle.Contract.Version(&_L2OutputOracle.CallOpts) -} - -// DeleteL2Outputs is a paid mutator transaction binding the contract method 0x89c44cbb. -// -// Solidity: function deleteL2Outputs(uint256 _l2OutputIndex) returns() -func (_L2OutputOracle *L2OutputOracleTransactor) DeleteL2Outputs(opts *bind.TransactOpts, _l2OutputIndex *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.contract.Transact(opts, "deleteL2Outputs", _l2OutputIndex) -} - -// DeleteL2Outputs is a paid mutator transaction binding the contract method 0x89c44cbb. -// -// Solidity: function deleteL2Outputs(uint256 _l2OutputIndex) returns() -func (_L2OutputOracle *L2OutputOracleSession) DeleteL2Outputs(_l2OutputIndex *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.Contract.DeleteL2Outputs(&_L2OutputOracle.TransactOpts, _l2OutputIndex) -} - -// DeleteL2Outputs is a paid mutator transaction binding the contract method 0x89c44cbb. -// -// Solidity: function deleteL2Outputs(uint256 _l2OutputIndex) returns() -func (_L2OutputOracle *L2OutputOracleTransactorSession) DeleteL2Outputs(_l2OutputIndex *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.Contract.DeleteL2Outputs(&_L2OutputOracle.TransactOpts, _l2OutputIndex) -} - -// Initialize is a paid mutator transaction binding the contract method 0x1c89c97d. -// -// Solidity: function initialize(uint256 _submissionInterval, uint256 _l2BlockTime, uint256 _startingBlockNumber, uint256 _startingTimestamp, address _proposer, address _challenger, uint256 _finalizationPeriodSeconds) returns() -func (_L2OutputOracle *L2OutputOracleTransactor) Initialize(opts *bind.TransactOpts, _submissionInterval *big.Int, _l2BlockTime *big.Int, _startingBlockNumber *big.Int, _startingTimestamp *big.Int, _proposer common.Address, _challenger common.Address, _finalizationPeriodSeconds *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.contract.Transact(opts, "initialize", _submissionInterval, _l2BlockTime, _startingBlockNumber, _startingTimestamp, _proposer, _challenger, _finalizationPeriodSeconds) -} - -// Initialize is a paid mutator transaction binding the contract method 0x1c89c97d. -// -// Solidity: function initialize(uint256 _submissionInterval, uint256 _l2BlockTime, uint256 _startingBlockNumber, uint256 _startingTimestamp, address _proposer, address _challenger, uint256 _finalizationPeriodSeconds) returns() -func (_L2OutputOracle *L2OutputOracleSession) Initialize(_submissionInterval *big.Int, _l2BlockTime *big.Int, _startingBlockNumber *big.Int, _startingTimestamp *big.Int, _proposer common.Address, _challenger common.Address, _finalizationPeriodSeconds *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.Contract.Initialize(&_L2OutputOracle.TransactOpts, _submissionInterval, _l2BlockTime, _startingBlockNumber, _startingTimestamp, _proposer, _challenger, _finalizationPeriodSeconds) -} - -// Initialize is a paid mutator transaction binding the contract method 0x1c89c97d. -// -// Solidity: function initialize(uint256 _submissionInterval, uint256 _l2BlockTime, uint256 _startingBlockNumber, uint256 _startingTimestamp, address _proposer, address _challenger, uint256 _finalizationPeriodSeconds) returns() -func (_L2OutputOracle *L2OutputOracleTransactorSession) Initialize(_submissionInterval *big.Int, _l2BlockTime *big.Int, _startingBlockNumber *big.Int, _startingTimestamp *big.Int, _proposer common.Address, _challenger common.Address, _finalizationPeriodSeconds *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.Contract.Initialize(&_L2OutputOracle.TransactOpts, _submissionInterval, _l2BlockTime, _startingBlockNumber, _startingTimestamp, _proposer, _challenger, _finalizationPeriodSeconds) -} - -// ProposeL2Output is a paid mutator transaction binding the contract method 0x9aaab648. -// -// Solidity: function proposeL2Output(bytes32 _outputRoot, uint256 _l2BlockNumber, bytes32 _l1BlockHash, uint256 _l1BlockNumber) payable returns() -func (_L2OutputOracle *L2OutputOracleTransactor) ProposeL2Output(opts *bind.TransactOpts, _outputRoot [32]byte, _l2BlockNumber *big.Int, _l1BlockHash [32]byte, _l1BlockNumber *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.contract.Transact(opts, "proposeL2Output", _outputRoot, _l2BlockNumber, _l1BlockHash, _l1BlockNumber) -} - -// ProposeL2Output is a paid mutator transaction binding the contract method 0x9aaab648. -// -// Solidity: function proposeL2Output(bytes32 _outputRoot, uint256 _l2BlockNumber, bytes32 _l1BlockHash, uint256 _l1BlockNumber) payable returns() -func (_L2OutputOracle *L2OutputOracleSession) ProposeL2Output(_outputRoot [32]byte, _l2BlockNumber *big.Int, _l1BlockHash [32]byte, _l1BlockNumber *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.Contract.ProposeL2Output(&_L2OutputOracle.TransactOpts, _outputRoot, _l2BlockNumber, _l1BlockHash, _l1BlockNumber) -} - -// ProposeL2Output is a paid mutator transaction binding the contract method 0x9aaab648. -// -// Solidity: function proposeL2Output(bytes32 _outputRoot, uint256 _l2BlockNumber, bytes32 _l1BlockHash, uint256 _l1BlockNumber) payable returns() -func (_L2OutputOracle *L2OutputOracleTransactorSession) ProposeL2Output(_outputRoot [32]byte, _l2BlockNumber *big.Int, _l1BlockHash [32]byte, _l1BlockNumber *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.Contract.ProposeL2Output(&_L2OutputOracle.TransactOpts, _outputRoot, _l2BlockNumber, _l1BlockHash, _l1BlockNumber) -} - -// L2OutputOracleInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the L2OutputOracle contract. -type L2OutputOracleInitializedIterator struct { - Event *L2OutputOracleInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L2OutputOracleInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2OutputOracleInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2OutputOracleInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2OutputOracleInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2OutputOracleInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2OutputOracleInitialized represents a Initialized event raised by the L2OutputOracle contract. -type L2OutputOracleInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L2OutputOracle *L2OutputOracleFilterer) FilterInitialized(opts *bind.FilterOpts) (*L2OutputOracleInitializedIterator, error) { - - logs, sub, err := _L2OutputOracle.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &L2OutputOracleInitializedIterator{contract: _L2OutputOracle.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L2OutputOracle *L2OutputOracleFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *L2OutputOracleInitialized) (event.Subscription, error) { - - logs, sub, err := _L2OutputOracle.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2OutputOracleInitialized) - if err := _L2OutputOracle.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L2OutputOracle *L2OutputOracleFilterer) ParseInitialized(log types.Log) (*L2OutputOracleInitialized, error) { - event := new(L2OutputOracleInitialized) - if err := _L2OutputOracle.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L2OutputOracleOutputProposedIterator is returned from FilterOutputProposed and is used to iterate over the raw logs and unpacked data for OutputProposed events raised by the L2OutputOracle contract. -type L2OutputOracleOutputProposedIterator struct { - Event *L2OutputOracleOutputProposed // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L2OutputOracleOutputProposedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2OutputOracleOutputProposed) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2OutputOracleOutputProposed) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2OutputOracleOutputProposedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2OutputOracleOutputProposedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2OutputOracleOutputProposed represents a OutputProposed event raised by the L2OutputOracle contract. -type L2OutputOracleOutputProposed struct { - OutputRoot [32]byte - L2OutputIndex *big.Int - L2BlockNumber *big.Int - L1Timestamp *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOutputProposed is a free log retrieval operation binding the contract event 0xa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e2. -// -// Solidity: event OutputProposed(bytes32 indexed outputRoot, uint256 indexed l2OutputIndex, uint256 indexed l2BlockNumber, uint256 l1Timestamp) -func (_L2OutputOracle *L2OutputOracleFilterer) FilterOutputProposed(opts *bind.FilterOpts, outputRoot [][32]byte, l2OutputIndex []*big.Int, l2BlockNumber []*big.Int) (*L2OutputOracleOutputProposedIterator, error) { - - var outputRootRule []interface{} - for _, outputRootItem := range outputRoot { - outputRootRule = append(outputRootRule, outputRootItem) - } - var l2OutputIndexRule []interface{} - for _, l2OutputIndexItem := range l2OutputIndex { - l2OutputIndexRule = append(l2OutputIndexRule, l2OutputIndexItem) - } - var l2BlockNumberRule []interface{} - for _, l2BlockNumberItem := range l2BlockNumber { - l2BlockNumberRule = append(l2BlockNumberRule, l2BlockNumberItem) - } - - logs, sub, err := _L2OutputOracle.contract.FilterLogs(opts, "OutputProposed", outputRootRule, l2OutputIndexRule, l2BlockNumberRule) - if err != nil { - return nil, err - } - return &L2OutputOracleOutputProposedIterator{contract: _L2OutputOracle.contract, event: "OutputProposed", logs: logs, sub: sub}, nil -} - -// WatchOutputProposed is a free log subscription operation binding the contract event 0xa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e2. -// -// Solidity: event OutputProposed(bytes32 indexed outputRoot, uint256 indexed l2OutputIndex, uint256 indexed l2BlockNumber, uint256 l1Timestamp) -func (_L2OutputOracle *L2OutputOracleFilterer) WatchOutputProposed(opts *bind.WatchOpts, sink chan<- *L2OutputOracleOutputProposed, outputRoot [][32]byte, l2OutputIndex []*big.Int, l2BlockNumber []*big.Int) (event.Subscription, error) { - - var outputRootRule []interface{} - for _, outputRootItem := range outputRoot { - outputRootRule = append(outputRootRule, outputRootItem) - } - var l2OutputIndexRule []interface{} - for _, l2OutputIndexItem := range l2OutputIndex { - l2OutputIndexRule = append(l2OutputIndexRule, l2OutputIndexItem) - } - var l2BlockNumberRule []interface{} - for _, l2BlockNumberItem := range l2BlockNumber { - l2BlockNumberRule = append(l2BlockNumberRule, l2BlockNumberItem) - } - - logs, sub, err := _L2OutputOracle.contract.WatchLogs(opts, "OutputProposed", outputRootRule, l2OutputIndexRule, l2BlockNumberRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2OutputOracleOutputProposed) - if err := _L2OutputOracle.contract.UnpackLog(event, "OutputProposed", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOutputProposed is a log parse operation binding the contract event 0xa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e2. -// -// Solidity: event OutputProposed(bytes32 indexed outputRoot, uint256 indexed l2OutputIndex, uint256 indexed l2BlockNumber, uint256 l1Timestamp) -func (_L2OutputOracle *L2OutputOracleFilterer) ParseOutputProposed(log types.Log) (*L2OutputOracleOutputProposed, error) { - event := new(L2OutputOracleOutputProposed) - if err := _L2OutputOracle.contract.UnpackLog(event, "OutputProposed", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L2OutputOracleOutputsDeletedIterator is returned from FilterOutputsDeleted and is used to iterate over the raw logs and unpacked data for OutputsDeleted events raised by the L2OutputOracle contract. -type L2OutputOracleOutputsDeletedIterator struct { - Event *L2OutputOracleOutputsDeleted // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L2OutputOracleOutputsDeletedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2OutputOracleOutputsDeleted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2OutputOracleOutputsDeleted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2OutputOracleOutputsDeletedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2OutputOracleOutputsDeletedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2OutputOracleOutputsDeleted represents a OutputsDeleted event raised by the L2OutputOracle contract. -type L2OutputOracleOutputsDeleted struct { - PrevNextOutputIndex *big.Int - NewNextOutputIndex *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOutputsDeleted is a free log retrieval operation binding the contract event 0x4ee37ac2c786ec85e87592d3c5c8a1dd66f8496dda3f125d9ea8ca5f657629b6. -// -// Solidity: event OutputsDeleted(uint256 indexed prevNextOutputIndex, uint256 indexed newNextOutputIndex) -func (_L2OutputOracle *L2OutputOracleFilterer) FilterOutputsDeleted(opts *bind.FilterOpts, prevNextOutputIndex []*big.Int, newNextOutputIndex []*big.Int) (*L2OutputOracleOutputsDeletedIterator, error) { - - var prevNextOutputIndexRule []interface{} - for _, prevNextOutputIndexItem := range prevNextOutputIndex { - prevNextOutputIndexRule = append(prevNextOutputIndexRule, prevNextOutputIndexItem) - } - var newNextOutputIndexRule []interface{} - for _, newNextOutputIndexItem := range newNextOutputIndex { - newNextOutputIndexRule = append(newNextOutputIndexRule, newNextOutputIndexItem) - } - - logs, sub, err := _L2OutputOracle.contract.FilterLogs(opts, "OutputsDeleted", prevNextOutputIndexRule, newNextOutputIndexRule) - if err != nil { - return nil, err - } - return &L2OutputOracleOutputsDeletedIterator{contract: _L2OutputOracle.contract, event: "OutputsDeleted", logs: logs, sub: sub}, nil -} - -// WatchOutputsDeleted is a free log subscription operation binding the contract event 0x4ee37ac2c786ec85e87592d3c5c8a1dd66f8496dda3f125d9ea8ca5f657629b6. -// -// Solidity: event OutputsDeleted(uint256 indexed prevNextOutputIndex, uint256 indexed newNextOutputIndex) -func (_L2OutputOracle *L2OutputOracleFilterer) WatchOutputsDeleted(opts *bind.WatchOpts, sink chan<- *L2OutputOracleOutputsDeleted, prevNextOutputIndex []*big.Int, newNextOutputIndex []*big.Int) (event.Subscription, error) { - - var prevNextOutputIndexRule []interface{} - for _, prevNextOutputIndexItem := range prevNextOutputIndex { - prevNextOutputIndexRule = append(prevNextOutputIndexRule, prevNextOutputIndexItem) - } - var newNextOutputIndexRule []interface{} - for _, newNextOutputIndexItem := range newNextOutputIndex { - newNextOutputIndexRule = append(newNextOutputIndexRule, newNextOutputIndexItem) - } - - logs, sub, err := _L2OutputOracle.contract.WatchLogs(opts, "OutputsDeleted", prevNextOutputIndexRule, newNextOutputIndexRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2OutputOracleOutputsDeleted) - if err := _L2OutputOracle.contract.UnpackLog(event, "OutputsDeleted", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOutputsDeleted is a log parse operation binding the contract event 0x4ee37ac2c786ec85e87592d3c5c8a1dd66f8496dda3f125d9ea8ca5f657629b6. -// -// Solidity: event OutputsDeleted(uint256 indexed prevNextOutputIndex, uint256 indexed newNextOutputIndex) -func (_L2OutputOracle *L2OutputOracleFilterer) ParseOutputsDeleted(log types.Log) (*L2OutputOracleOutputsDeleted, error) { - event := new(L2OutputOracleOutputsDeleted) - if err := _L2OutputOracle.contract.UnpackLog(event, "OutputsDeleted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/indexer/bindings/l2standardbridge.go b/indexer/bindings/l2standardbridge.go deleted file mode 100644 index 8a935e961a7f..000000000000 --- a/indexer/bindings/l2standardbridge.go +++ /dev/null @@ -1,1785 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindings - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// L2StandardBridgeMetaData contains all meta data concerning the L2StandardBridge contract. -var L2StandardBridgeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeDeposit\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_otherBridge\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1TokenBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdrawTo\",\"inputs\":[{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"event\",\"name\":\"DepositFinalized\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalInitiated\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b506200001e600062000024565b62000217565b600054610100900460ff1615808015620000455750600054600160ff909116105b8062000075575062000062306200016d60201b620004811760201c565b15801562000075575060005460ff166001145b620000de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000102576000805461ff0019166101001790555b62000122734200000000000000000000000000000000000007836200017c565b801562000169576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620001e95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d5565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612a8380620002276000396000f3fe60806040526004361061012d5760003560e01c8063662a633a116100a5578063927ede2d11610074578063c4d66de811610059578063c4d66de814610421578063c89701a214610441578063e11013dd1461046e57600080fd5b8063927ede2d146103e3578063a3a795481461040e57600080fd5b8063662a633a1461036a5780637f46ddb21461025a578063870876231461037d5780638f601f661461039d57600080fd5b806336c717c1116100fc578063540abf73116100e1578063540abf73146102d857806354fd4d50146102f85780635c975abb1461034e57600080fd5b806336c717c11461025a5780633cb747bf146102ab57600080fd5b80630166a07a1461020157806309fc8843146102215780631635f5fd1461023457806332b7006d1461024757600080fd5b366101fc57333b156101c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b6101fa73deaddeaddeaddeaddeaddeaddeaddeaddead000033333462030d406040518060200160405280600081525061049d565b005b600080fd5b34801561020d57600080fd5b506101fa61021c366004612476565b610578565b6101fa61022f366004612527565b61091a565b6101fa61024236600461257a565b6109f1565b6101fa6102553660046125ed565b610e43565b34801561026657600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102b757600080fd5b506003546102819073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102e457600080fd5b506101fa6102f3366004612641565b610f1d565b34801561030457600080fd5b506103416040518060400160405280600581526020017f312e382e3000000000000000000000000000000000000000000000000000000081525081565b6040516102a2919061272e565b34801561035a57600080fd5b50604051600081526020016102a2565b6101fa610378366004612476565b610f62565b34801561038957600080fd5b506101fa610398366004612741565b610fd5565b3480156103a957600080fd5b506103d56103b83660046127c4565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102a2565b3480156103ef57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610281565b6101fa61041c366004612741565b6110a9565b34801561042d57600080fd5b506101fa61043c3660046127fd565b6110ed565b34801561044d57600080fd5b506004546102819073ffffffffffffffffffffffffffffffffffffffff1681565b6101fa61047c36600461281a565b611296565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b7fffffffffffffffffffffffff215221522152215221522152215221522153000073ffffffffffffffffffffffffffffffffffffffff8716016104ec576104e785858585856112df565b610570565b60008673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055d919061287d565b905061056e878288888888886114a9565b505b505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561064b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561060f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610633919061287d565b73ffffffffffffffffffffffffffffffffffffffff16145b6106fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101bd565b610706876117d4565b15610854576107158787611836565b6107c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101bd565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b505050506108d6565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546108929084906128c9565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556108d6908585611956565b61056e878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a2a92505050565b333b156109a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101bd565b6109ec3333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112df92505050565b505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610ac4575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aac919061287d565b73ffffffffffffffffffffffffffffffffffffffff16145b610b76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101bd565b823414610c05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e7420726571756972656400000000000060648201526084016101bd565b3073ffffffffffffffffffffffffffffffffffffffff851603610caa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c66000000000000000000000000000000000000000000000000000000000060648201526084016101bd565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610d55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e67657200000000000000000000000000000000000000000000000060648201526084016101bd565b610d9785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ab892505050565b6000610db4855a8660405180602001604052806000815250611b59565b905080610570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c6564000000000000000000000000000000000000000000000000000000000060648201526084016101bd565b333b15610ed2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101bd565b610f16853333878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061049d92505050565b5050505050565b61056e87873388888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114a992505050565b73ffffffffffffffffffffffffffffffffffffffff8716158015610faf575073ffffffffffffffffffffffffffffffffffffffff861673deaddeaddeaddeaddeaddeaddeaddeaddead0000145b15610fc657610fc185858585856109f1565b61056e565b61056e86888787878787610578565b333b15611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101bd565b61057086863333888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114a992505050565b610570863387878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061049d92505050565b600054610100900460ff161580801561110d5750600054600160ff909116105b806111275750303b158015611127575060005460ff166001145b6111b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016101bd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561121157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61122f73420000000000000000000000000000000000000783611b73565b801561129257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6112d93385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112df92505050565b50505050565b82341461136e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c7565000060648201526084016101bd565b61137a85858584611c5d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906113dd908b908b9086908a906024016128e0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261147092918890600401612929565b6000604051808303818588803b15801561148957600080fd5b505af115801561149d573d6000803e3d6000fd5b50505050505050505050565b6114b2876117d4565b15611600576114c18787611836565b611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101bd565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b1580156115e357600080fd5b505af11580156115f7573d6000803e3d6000fd5b50505050611694565b61162273ffffffffffffffffffffffffffffffffffffffff8816863086611cfe565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a168352929052205461166090849061296e565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b6116a2878787878786611d5c565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611706908b908d908c908c908c908b90602401612986565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261179992918790600401612929565b600060405180830381600087803b1580156117b357600080fd5b505af11580156117c7573d6000803e3d6000fd5b5050505050505050505050565b6000611800827f1d1d8b6300000000000000000000000000000000000000000000000000000000611dea565b806118305750611830827fec4fc8e300000000000000000000000000000000000000000000000000000000611dea565b92915050565b6000611862837f1d1d8b6300000000000000000000000000000000000000000000000000000000611dea565b1561190b578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d6919061287d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611830565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b2573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109ec9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611e0d565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611aa2939291906129e1565b60405180910390a4610570868686868686611f19565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611b45939291906129e1565b60405180910390a46112d984848484611fa1565b600080600080845160208601878a8af19695505050505050565b600054610100900460ff16611c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016101bd565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611cea939291906129e1565b60405180910390a46112d98484848461200e565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526112d99085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016119a8565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611dd4939291906129e1565b60405180910390a461057086868686868661206d565b6000611df5836120e5565b8015611e065750611e068383612149565b9392505050565b6000611e6f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166122189092919063ffffffff16565b8051909150156109ec5780806020019051810190611e8d9190612a1f565b6109ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101bd565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd868686604051611f91939291906129e1565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612000929190612a41565b60405180910390a350505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612000929190612a41565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf868686604051611f91939291906129e1565b6000612111827f01ffc9a700000000000000000000000000000000000000000000000000000000612149565b80156118305750612142827fffffffff00000000000000000000000000000000000000000000000000000000612149565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612201575060208210155b801561220d5750600081115b979650505050505050565b6060612227848460008561222f565b949350505050565b6060824710156122c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101bd565b73ffffffffffffffffffffffffffffffffffffffff85163b61233f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101bd565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516123689190612a5a565b60006040518083038185875af1925050503d80600081146123a5576040519150601f19603f3d011682016040523d82523d6000602084013e6123aa565b606091505b509150915061220d828286606083156123c4575081611e06565b8251156123d45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101bd919061272e565b73ffffffffffffffffffffffffffffffffffffffff8116811461242a57600080fd5b50565b60008083601f84011261243f57600080fd5b50813567ffffffffffffffff81111561245757600080fd5b60208301915083602082850101111561246f57600080fd5b9250929050565b600080600080600080600060c0888a03121561249157600080fd5b873561249c81612408565b965060208801356124ac81612408565b955060408801356124bc81612408565b945060608801356124cc81612408565b93506080880135925060a088013567ffffffffffffffff8111156124ef57600080fd5b6124fb8a828b0161242d565b989b979a50959850939692959293505050565b803563ffffffff8116811461252257600080fd5b919050565b60008060006040848603121561253c57600080fd5b6125458461250e565b9250602084013567ffffffffffffffff81111561256157600080fd5b61256d8682870161242d565b9497909650939450505050565b60008060008060006080868803121561259257600080fd5b853561259d81612408565b945060208601356125ad81612408565b935060408601359250606086013567ffffffffffffffff8111156125d057600080fd5b6125dc8882890161242d565b969995985093965092949392505050565b60008060008060006080868803121561260557600080fd5b853561261081612408565b9450602086013593506126256040870161250e565b9250606086013567ffffffffffffffff8111156125d057600080fd5b600080600080600080600060c0888a03121561265c57600080fd5b873561266781612408565b9650602088013561267781612408565b9550604088013561268781612408565b94506060880135935061269c6080890161250e565b925060a088013567ffffffffffffffff8111156124ef57600080fd5b60005b838110156126d35781810151838201526020016126bb565b838111156112d95750506000910152565b600081518084526126fc8160208601602086016126b8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611e0660208301846126e4565b60008060008060008060a0878903121561275a57600080fd5b863561276581612408565b9550602087013561277581612408565b94506040870135935061278a6060880161250e565b9250608087013567ffffffffffffffff8111156127a657600080fd5b6127b289828a0161242d565b979a9699509497509295939492505050565b600080604083850312156127d757600080fd5b82356127e281612408565b915060208301356127f281612408565b809150509250929050565b60006020828403121561280f57600080fd5b8135611e0681612408565b6000806000806060858703121561283057600080fd5b843561283b81612408565b93506128496020860161250e565b9250604085013567ffffffffffffffff81111561286557600080fd5b6128718782880161242d565b95989497509550505050565b60006020828403121561288f57600080fd5b8151611e0681612408565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156128db576128db61289a565b500390565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261291f60808301846126e4565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260606020820152600061295860608301856126e4565b905063ffffffff83166040830152949350505050565b600082198211156129815761298161289a565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526129d560c08301846126e4565b98975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612a1660608301846126e4565b95945050505050565b600060208284031215612a3157600080fd5b81518015158114611e0657600080fd5b82815260406020820152600061222760408301846126e4565b60008251612a6c8184602087016126b8565b919091019291505056fea164736f6c634300080f000a", -} - -// L2StandardBridgeABI is the input ABI used to generate the binding from. -// Deprecated: Use L2StandardBridgeMetaData.ABI instead. -var L2StandardBridgeABI = L2StandardBridgeMetaData.ABI - -// L2StandardBridgeBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use L2StandardBridgeMetaData.Bin instead. -var L2StandardBridgeBin = L2StandardBridgeMetaData.Bin - -// DeployL2StandardBridge deploys a new Ethereum contract, binding an instance of L2StandardBridge to it. -func DeployL2StandardBridge(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *L2StandardBridge, error) { - parsed, err := L2StandardBridgeMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(L2StandardBridgeBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &L2StandardBridge{L2StandardBridgeCaller: L2StandardBridgeCaller{contract: contract}, L2StandardBridgeTransactor: L2StandardBridgeTransactor{contract: contract}, L2StandardBridgeFilterer: L2StandardBridgeFilterer{contract: contract}}, nil -} - -// L2StandardBridge is an auto generated Go binding around an Ethereum contract. -type L2StandardBridge struct { - L2StandardBridgeCaller // Read-only binding to the contract - L2StandardBridgeTransactor // Write-only binding to the contract - L2StandardBridgeFilterer // Log filterer for contract events -} - -// L2StandardBridgeCaller is an auto generated read-only Go binding around an Ethereum contract. -type L2StandardBridgeCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L2StandardBridgeTransactor is an auto generated write-only Go binding around an Ethereum contract. -type L2StandardBridgeTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L2StandardBridgeFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type L2StandardBridgeFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L2StandardBridgeSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type L2StandardBridgeSession struct { - Contract *L2StandardBridge // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// L2StandardBridgeCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type L2StandardBridgeCallerSession struct { - Contract *L2StandardBridgeCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// L2StandardBridgeTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type L2StandardBridgeTransactorSession struct { - Contract *L2StandardBridgeTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// L2StandardBridgeRaw is an auto generated low-level Go binding around an Ethereum contract. -type L2StandardBridgeRaw struct { - Contract *L2StandardBridge // Generic contract binding to access the raw methods on -} - -// L2StandardBridgeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type L2StandardBridgeCallerRaw struct { - Contract *L2StandardBridgeCaller // Generic read-only contract binding to access the raw methods on -} - -// L2StandardBridgeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type L2StandardBridgeTransactorRaw struct { - Contract *L2StandardBridgeTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewL2StandardBridge creates a new instance of L2StandardBridge, bound to a specific deployed contract. -func NewL2StandardBridge(address common.Address, backend bind.ContractBackend) (*L2StandardBridge, error) { - contract, err := bindL2StandardBridge(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &L2StandardBridge{L2StandardBridgeCaller: L2StandardBridgeCaller{contract: contract}, L2StandardBridgeTransactor: L2StandardBridgeTransactor{contract: contract}, L2StandardBridgeFilterer: L2StandardBridgeFilterer{contract: contract}}, nil -} - -// NewL2StandardBridgeCaller creates a new read-only instance of L2StandardBridge, bound to a specific deployed contract. -func NewL2StandardBridgeCaller(address common.Address, caller bind.ContractCaller) (*L2StandardBridgeCaller, error) { - contract, err := bindL2StandardBridge(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &L2StandardBridgeCaller{contract: contract}, nil -} - -// NewL2StandardBridgeTransactor creates a new write-only instance of L2StandardBridge, bound to a specific deployed contract. -func NewL2StandardBridgeTransactor(address common.Address, transactor bind.ContractTransactor) (*L2StandardBridgeTransactor, error) { - contract, err := bindL2StandardBridge(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &L2StandardBridgeTransactor{contract: contract}, nil -} - -// NewL2StandardBridgeFilterer creates a new log filterer instance of L2StandardBridge, bound to a specific deployed contract. -func NewL2StandardBridgeFilterer(address common.Address, filterer bind.ContractFilterer) (*L2StandardBridgeFilterer, error) { - contract, err := bindL2StandardBridge(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &L2StandardBridgeFilterer{contract: contract}, nil -} - -// bindL2StandardBridge binds a generic wrapper to an already deployed contract. -func bindL2StandardBridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(L2StandardBridgeABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_L2StandardBridge *L2StandardBridgeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _L2StandardBridge.Contract.L2StandardBridgeCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_L2StandardBridge *L2StandardBridgeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L2StandardBridge.Contract.L2StandardBridgeTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_L2StandardBridge *L2StandardBridgeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _L2StandardBridge.Contract.L2StandardBridgeTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_L2StandardBridge *L2StandardBridgeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _L2StandardBridge.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_L2StandardBridge *L2StandardBridgeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L2StandardBridge.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_L2StandardBridge *L2StandardBridgeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _L2StandardBridge.Contract.contract.Transact(opts, method, params...) -} - -// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. -// -// Solidity: function MESSENGER() view returns(address) -func (_L2StandardBridge *L2StandardBridgeCaller) MESSENGER(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L2StandardBridge.contract.Call(opts, &out, "MESSENGER") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. -// -// Solidity: function MESSENGER() view returns(address) -func (_L2StandardBridge *L2StandardBridgeSession) MESSENGER() (common.Address, error) { - return _L2StandardBridge.Contract.MESSENGER(&_L2StandardBridge.CallOpts) -} - -// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. -// -// Solidity: function MESSENGER() view returns(address) -func (_L2StandardBridge *L2StandardBridgeCallerSession) MESSENGER() (common.Address, error) { - return _L2StandardBridge.Contract.MESSENGER(&_L2StandardBridge.CallOpts) -} - -// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. -// -// Solidity: function OTHER_BRIDGE() view returns(address) -func (_L2StandardBridge *L2StandardBridgeCaller) OTHERBRIDGE(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L2StandardBridge.contract.Call(opts, &out, "OTHER_BRIDGE") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. -// -// Solidity: function OTHER_BRIDGE() view returns(address) -func (_L2StandardBridge *L2StandardBridgeSession) OTHERBRIDGE() (common.Address, error) { - return _L2StandardBridge.Contract.OTHERBRIDGE(&_L2StandardBridge.CallOpts) -} - -// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. -// -// Solidity: function OTHER_BRIDGE() view returns(address) -func (_L2StandardBridge *L2StandardBridgeCallerSession) OTHERBRIDGE() (common.Address, error) { - return _L2StandardBridge.Contract.OTHERBRIDGE(&_L2StandardBridge.CallOpts) -} - -// Deposits is a free data retrieval call binding the contract method 0x8f601f66. -// -// Solidity: function deposits(address , address ) view returns(uint256) -func (_L2StandardBridge *L2StandardBridgeCaller) Deposits(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { - var out []interface{} - err := _L2StandardBridge.contract.Call(opts, &out, "deposits", arg0, arg1) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// Deposits is a free data retrieval call binding the contract method 0x8f601f66. -// -// Solidity: function deposits(address , address ) view returns(uint256) -func (_L2StandardBridge *L2StandardBridgeSession) Deposits(arg0 common.Address, arg1 common.Address) (*big.Int, error) { - return _L2StandardBridge.Contract.Deposits(&_L2StandardBridge.CallOpts, arg0, arg1) -} - -// Deposits is a free data retrieval call binding the contract method 0x8f601f66. -// -// Solidity: function deposits(address , address ) view returns(uint256) -func (_L2StandardBridge *L2StandardBridgeCallerSession) Deposits(arg0 common.Address, arg1 common.Address) (*big.Int, error) { - return _L2StandardBridge.Contract.Deposits(&_L2StandardBridge.CallOpts, arg0, arg1) -} - -// L1TokenBridge is a free data retrieval call binding the contract method 0x36c717c1. -// -// Solidity: function l1TokenBridge() view returns(address) -func (_L2StandardBridge *L2StandardBridgeCaller) L1TokenBridge(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L2StandardBridge.contract.Call(opts, &out, "l1TokenBridge") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// L1TokenBridge is a free data retrieval call binding the contract method 0x36c717c1. -// -// Solidity: function l1TokenBridge() view returns(address) -func (_L2StandardBridge *L2StandardBridgeSession) L1TokenBridge() (common.Address, error) { - return _L2StandardBridge.Contract.L1TokenBridge(&_L2StandardBridge.CallOpts) -} - -// L1TokenBridge is a free data retrieval call binding the contract method 0x36c717c1. -// -// Solidity: function l1TokenBridge() view returns(address) -func (_L2StandardBridge *L2StandardBridgeCallerSession) L1TokenBridge() (common.Address, error) { - return _L2StandardBridge.Contract.L1TokenBridge(&_L2StandardBridge.CallOpts) -} - -// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. -// -// Solidity: function messenger() view returns(address) -func (_L2StandardBridge *L2StandardBridgeCaller) Messenger(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L2StandardBridge.contract.Call(opts, &out, "messenger") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. -// -// Solidity: function messenger() view returns(address) -func (_L2StandardBridge *L2StandardBridgeSession) Messenger() (common.Address, error) { - return _L2StandardBridge.Contract.Messenger(&_L2StandardBridge.CallOpts) -} - -// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. -// -// Solidity: function messenger() view returns(address) -func (_L2StandardBridge *L2StandardBridgeCallerSession) Messenger() (common.Address, error) { - return _L2StandardBridge.Contract.Messenger(&_L2StandardBridge.CallOpts) -} - -// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. -// -// Solidity: function otherBridge() view returns(address) -func (_L2StandardBridge *L2StandardBridgeCaller) OtherBridge(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L2StandardBridge.contract.Call(opts, &out, "otherBridge") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. -// -// Solidity: function otherBridge() view returns(address) -func (_L2StandardBridge *L2StandardBridgeSession) OtherBridge() (common.Address, error) { - return _L2StandardBridge.Contract.OtherBridge(&_L2StandardBridge.CallOpts) -} - -// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. -// -// Solidity: function otherBridge() view returns(address) -func (_L2StandardBridge *L2StandardBridgeCallerSession) OtherBridge() (common.Address, error) { - return _L2StandardBridge.Contract.OtherBridge(&_L2StandardBridge.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_L2StandardBridge *L2StandardBridgeCaller) Paused(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _L2StandardBridge.contract.Call(opts, &out, "paused") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_L2StandardBridge *L2StandardBridgeSession) Paused() (bool, error) { - return _L2StandardBridge.Contract.Paused(&_L2StandardBridge.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_L2StandardBridge *L2StandardBridgeCallerSession) Paused() (bool, error) { - return _L2StandardBridge.Contract.Paused(&_L2StandardBridge.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L2StandardBridge *L2StandardBridgeCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _L2StandardBridge.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L2StandardBridge *L2StandardBridgeSession) Version() (string, error) { - return _L2StandardBridge.Contract.Version(&_L2StandardBridge.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L2StandardBridge *L2StandardBridgeCallerSession) Version() (string, error) { - return _L2StandardBridge.Contract.Version(&_L2StandardBridge.CallOpts) -} - -// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. -// -// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L2StandardBridge *L2StandardBridgeTransactor) BridgeERC20(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.contract.Transact(opts, "bridgeERC20", _localToken, _remoteToken, _amount, _minGasLimit, _extraData) -} - -// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. -// -// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L2StandardBridge *L2StandardBridgeSession) BridgeERC20(_localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.Contract.BridgeERC20(&_L2StandardBridge.TransactOpts, _localToken, _remoteToken, _amount, _minGasLimit, _extraData) -} - -// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. -// -// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L2StandardBridge *L2StandardBridgeTransactorSession) BridgeERC20(_localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.Contract.BridgeERC20(&_L2StandardBridge.TransactOpts, _localToken, _remoteToken, _amount, _minGasLimit, _extraData) -} - -// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. -// -// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L2StandardBridge *L2StandardBridgeTransactor) BridgeERC20To(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.contract.Transact(opts, "bridgeERC20To", _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) -} - -// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. -// -// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L2StandardBridge *L2StandardBridgeSession) BridgeERC20To(_localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.Contract.BridgeERC20To(&_L2StandardBridge.TransactOpts, _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) -} - -// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. -// -// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_L2StandardBridge *L2StandardBridgeTransactorSession) BridgeERC20To(_localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.Contract.BridgeERC20To(&_L2StandardBridge.TransactOpts, _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) -} - -// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. -// -// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L2StandardBridge *L2StandardBridgeTransactor) BridgeETH(opts *bind.TransactOpts, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.contract.Transact(opts, "bridgeETH", _minGasLimit, _extraData) -} - -// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. -// -// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L2StandardBridge *L2StandardBridgeSession) BridgeETH(_minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.Contract.BridgeETH(&_L2StandardBridge.TransactOpts, _minGasLimit, _extraData) -} - -// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. -// -// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L2StandardBridge *L2StandardBridgeTransactorSession) BridgeETH(_minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.Contract.BridgeETH(&_L2StandardBridge.TransactOpts, _minGasLimit, _extraData) -} - -// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. -// -// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L2StandardBridge *L2StandardBridgeTransactor) BridgeETHTo(opts *bind.TransactOpts, _to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.contract.Transact(opts, "bridgeETHTo", _to, _minGasLimit, _extraData) -} - -// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. -// -// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L2StandardBridge *L2StandardBridgeSession) BridgeETHTo(_to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.Contract.BridgeETHTo(&_L2StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) -} - -// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. -// -// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L2StandardBridge *L2StandardBridgeTransactorSession) BridgeETHTo(_to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.Contract.BridgeETHTo(&_L2StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) -} - -// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. -// -// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() -func (_L2StandardBridge *L2StandardBridgeTransactor) FinalizeBridgeERC20(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.contract.Transact(opts, "finalizeBridgeERC20", _localToken, _remoteToken, _from, _to, _amount, _extraData) -} - -// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. -// -// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() -func (_L2StandardBridge *L2StandardBridgeSession) FinalizeBridgeERC20(_localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.Contract.FinalizeBridgeERC20(&_L2StandardBridge.TransactOpts, _localToken, _remoteToken, _from, _to, _amount, _extraData) -} - -// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. -// -// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() -func (_L2StandardBridge *L2StandardBridgeTransactorSession) FinalizeBridgeERC20(_localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.Contract.FinalizeBridgeERC20(&_L2StandardBridge.TransactOpts, _localToken, _remoteToken, _from, _to, _amount, _extraData) -} - -// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. -// -// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() -func (_L2StandardBridge *L2StandardBridgeTransactor) FinalizeBridgeETH(opts *bind.TransactOpts, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.contract.Transact(opts, "finalizeBridgeETH", _from, _to, _amount, _extraData) -} - -// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. -// -// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() -func (_L2StandardBridge *L2StandardBridgeSession) FinalizeBridgeETH(_from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.Contract.FinalizeBridgeETH(&_L2StandardBridge.TransactOpts, _from, _to, _amount, _extraData) -} - -// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. -// -// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() -func (_L2StandardBridge *L2StandardBridgeTransactorSession) FinalizeBridgeETH(_from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.Contract.FinalizeBridgeETH(&_L2StandardBridge.TransactOpts, _from, _to, _amount, _extraData) -} - -// FinalizeDeposit is a paid mutator transaction binding the contract method 0x662a633a. -// -// Solidity: function finalizeDeposit(address _l1Token, address _l2Token, address _from, address _to, uint256 _amount, bytes _extraData) payable returns() -func (_L2StandardBridge *L2StandardBridgeTransactor) FinalizeDeposit(opts *bind.TransactOpts, _l1Token common.Address, _l2Token common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.contract.Transact(opts, "finalizeDeposit", _l1Token, _l2Token, _from, _to, _amount, _extraData) -} - -// FinalizeDeposit is a paid mutator transaction binding the contract method 0x662a633a. -// -// Solidity: function finalizeDeposit(address _l1Token, address _l2Token, address _from, address _to, uint256 _amount, bytes _extraData) payable returns() -func (_L2StandardBridge *L2StandardBridgeSession) FinalizeDeposit(_l1Token common.Address, _l2Token common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.Contract.FinalizeDeposit(&_L2StandardBridge.TransactOpts, _l1Token, _l2Token, _from, _to, _amount, _extraData) -} - -// FinalizeDeposit is a paid mutator transaction binding the contract method 0x662a633a. -// -// Solidity: function finalizeDeposit(address _l1Token, address _l2Token, address _from, address _to, uint256 _amount, bytes _extraData) payable returns() -func (_L2StandardBridge *L2StandardBridgeTransactorSession) FinalizeDeposit(_l1Token common.Address, _l2Token common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.Contract.FinalizeDeposit(&_L2StandardBridge.TransactOpts, _l1Token, _l2Token, _from, _to, _amount, _extraData) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. -// -// Solidity: function initialize(address _otherBridge) returns() -func (_L2StandardBridge *L2StandardBridgeTransactor) Initialize(opts *bind.TransactOpts, _otherBridge common.Address) (*types.Transaction, error) { - return _L2StandardBridge.contract.Transact(opts, "initialize", _otherBridge) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. -// -// Solidity: function initialize(address _otherBridge) returns() -func (_L2StandardBridge *L2StandardBridgeSession) Initialize(_otherBridge common.Address) (*types.Transaction, error) { - return _L2StandardBridge.Contract.Initialize(&_L2StandardBridge.TransactOpts, _otherBridge) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. -// -// Solidity: function initialize(address _otherBridge) returns() -func (_L2StandardBridge *L2StandardBridgeTransactorSession) Initialize(_otherBridge common.Address) (*types.Transaction, error) { - return _L2StandardBridge.Contract.Initialize(&_L2StandardBridge.TransactOpts, _otherBridge) -} - -// Withdraw is a paid mutator transaction binding the contract method 0x32b7006d. -// -// Solidity: function withdraw(address _l2Token, uint256 _amount, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L2StandardBridge *L2StandardBridgeTransactor) Withdraw(opts *bind.TransactOpts, _l2Token common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.contract.Transact(opts, "withdraw", _l2Token, _amount, _minGasLimit, _extraData) -} - -// Withdraw is a paid mutator transaction binding the contract method 0x32b7006d. -// -// Solidity: function withdraw(address _l2Token, uint256 _amount, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L2StandardBridge *L2StandardBridgeSession) Withdraw(_l2Token common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.Contract.Withdraw(&_L2StandardBridge.TransactOpts, _l2Token, _amount, _minGasLimit, _extraData) -} - -// Withdraw is a paid mutator transaction binding the contract method 0x32b7006d. -// -// Solidity: function withdraw(address _l2Token, uint256 _amount, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L2StandardBridge *L2StandardBridgeTransactorSession) Withdraw(_l2Token common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.Contract.Withdraw(&_L2StandardBridge.TransactOpts, _l2Token, _amount, _minGasLimit, _extraData) -} - -// WithdrawTo is a paid mutator transaction binding the contract method 0xa3a79548. -// -// Solidity: function withdrawTo(address _l2Token, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L2StandardBridge *L2StandardBridgeTransactor) WithdrawTo(opts *bind.TransactOpts, _l2Token common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.contract.Transact(opts, "withdrawTo", _l2Token, _to, _amount, _minGasLimit, _extraData) -} - -// WithdrawTo is a paid mutator transaction binding the contract method 0xa3a79548. -// -// Solidity: function withdrawTo(address _l2Token, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L2StandardBridge *L2StandardBridgeSession) WithdrawTo(_l2Token common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.Contract.WithdrawTo(&_L2StandardBridge.TransactOpts, _l2Token, _to, _amount, _minGasLimit, _extraData) -} - -// WithdrawTo is a paid mutator transaction binding the contract method 0xa3a79548. -// -// Solidity: function withdrawTo(address _l2Token, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_L2StandardBridge *L2StandardBridgeTransactorSession) WithdrawTo(_l2Token common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _L2StandardBridge.Contract.WithdrawTo(&_L2StandardBridge.TransactOpts, _l2Token, _to, _amount, _minGasLimit, _extraData) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_L2StandardBridge *L2StandardBridgeTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L2StandardBridge.contract.RawTransact(opts, nil) // calldata is disallowed for receive function -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_L2StandardBridge *L2StandardBridgeSession) Receive() (*types.Transaction, error) { - return _L2StandardBridge.Contract.Receive(&_L2StandardBridge.TransactOpts) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_L2StandardBridge *L2StandardBridgeTransactorSession) Receive() (*types.Transaction, error) { - return _L2StandardBridge.Contract.Receive(&_L2StandardBridge.TransactOpts) -} - -// L2StandardBridgeDepositFinalizedIterator is returned from FilterDepositFinalized and is used to iterate over the raw logs and unpacked data for DepositFinalized events raised by the L2StandardBridge contract. -type L2StandardBridgeDepositFinalizedIterator struct { - Event *L2StandardBridgeDepositFinalized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L2StandardBridgeDepositFinalizedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2StandardBridgeDepositFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2StandardBridgeDepositFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2StandardBridgeDepositFinalizedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2StandardBridgeDepositFinalizedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2StandardBridgeDepositFinalized represents a DepositFinalized event raised by the L2StandardBridge contract. -type L2StandardBridgeDepositFinalized struct { - L1Token common.Address - L2Token common.Address - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterDepositFinalized is a free log retrieval operation binding the contract event 0xb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89. -// -// Solidity: event DepositFinalized(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) -func (_L2StandardBridge *L2StandardBridgeFilterer) FilterDepositFinalized(opts *bind.FilterOpts, l1Token []common.Address, l2Token []common.Address, from []common.Address) (*L2StandardBridgeDepositFinalizedIterator, error) { - - var l1TokenRule []interface{} - for _, l1TokenItem := range l1Token { - l1TokenRule = append(l1TokenRule, l1TokenItem) - } - var l2TokenRule []interface{} - for _, l2TokenItem := range l2Token { - l2TokenRule = append(l2TokenRule, l2TokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L2StandardBridge.contract.FilterLogs(opts, "DepositFinalized", l1TokenRule, l2TokenRule, fromRule) - if err != nil { - return nil, err - } - return &L2StandardBridgeDepositFinalizedIterator{contract: _L2StandardBridge.contract, event: "DepositFinalized", logs: logs, sub: sub}, nil -} - -// WatchDepositFinalized is a free log subscription operation binding the contract event 0xb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89. -// -// Solidity: event DepositFinalized(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) -func (_L2StandardBridge *L2StandardBridgeFilterer) WatchDepositFinalized(opts *bind.WatchOpts, sink chan<- *L2StandardBridgeDepositFinalized, l1Token []common.Address, l2Token []common.Address, from []common.Address) (event.Subscription, error) { - - var l1TokenRule []interface{} - for _, l1TokenItem := range l1Token { - l1TokenRule = append(l1TokenRule, l1TokenItem) - } - var l2TokenRule []interface{} - for _, l2TokenItem := range l2Token { - l2TokenRule = append(l2TokenRule, l2TokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L2StandardBridge.contract.WatchLogs(opts, "DepositFinalized", l1TokenRule, l2TokenRule, fromRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2StandardBridgeDepositFinalized) - if err := _L2StandardBridge.contract.UnpackLog(event, "DepositFinalized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseDepositFinalized is a log parse operation binding the contract event 0xb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89. -// -// Solidity: event DepositFinalized(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) -func (_L2StandardBridge *L2StandardBridgeFilterer) ParseDepositFinalized(log types.Log) (*L2StandardBridgeDepositFinalized, error) { - event := new(L2StandardBridgeDepositFinalized) - if err := _L2StandardBridge.contract.UnpackLog(event, "DepositFinalized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L2StandardBridgeERC20BridgeFinalizedIterator is returned from FilterERC20BridgeFinalized and is used to iterate over the raw logs and unpacked data for ERC20BridgeFinalized events raised by the L2StandardBridge contract. -type L2StandardBridgeERC20BridgeFinalizedIterator struct { - Event *L2StandardBridgeERC20BridgeFinalized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L2StandardBridgeERC20BridgeFinalizedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2StandardBridgeERC20BridgeFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2StandardBridgeERC20BridgeFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2StandardBridgeERC20BridgeFinalizedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2StandardBridgeERC20BridgeFinalizedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2StandardBridgeERC20BridgeFinalized represents a ERC20BridgeFinalized event raised by the L2StandardBridge contract. -type L2StandardBridgeERC20BridgeFinalized struct { - LocalToken common.Address - RemoteToken common.Address - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterERC20BridgeFinalized is a free log retrieval operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. -// -// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_L2StandardBridge *L2StandardBridgeFilterer) FilterERC20BridgeFinalized(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address, from []common.Address) (*L2StandardBridgeERC20BridgeFinalizedIterator, error) { - - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L2StandardBridge.contract.FilterLogs(opts, "ERC20BridgeFinalized", localTokenRule, remoteTokenRule, fromRule) - if err != nil { - return nil, err - } - return &L2StandardBridgeERC20BridgeFinalizedIterator{contract: _L2StandardBridge.contract, event: "ERC20BridgeFinalized", logs: logs, sub: sub}, nil -} - -// WatchERC20BridgeFinalized is a free log subscription operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. -// -// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_L2StandardBridge *L2StandardBridgeFilterer) WatchERC20BridgeFinalized(opts *bind.WatchOpts, sink chan<- *L2StandardBridgeERC20BridgeFinalized, localToken []common.Address, remoteToken []common.Address, from []common.Address) (event.Subscription, error) { - - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L2StandardBridge.contract.WatchLogs(opts, "ERC20BridgeFinalized", localTokenRule, remoteTokenRule, fromRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2StandardBridgeERC20BridgeFinalized) - if err := _L2StandardBridge.contract.UnpackLog(event, "ERC20BridgeFinalized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseERC20BridgeFinalized is a log parse operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. -// -// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_L2StandardBridge *L2StandardBridgeFilterer) ParseERC20BridgeFinalized(log types.Log) (*L2StandardBridgeERC20BridgeFinalized, error) { - event := new(L2StandardBridgeERC20BridgeFinalized) - if err := _L2StandardBridge.contract.UnpackLog(event, "ERC20BridgeFinalized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L2StandardBridgeERC20BridgeInitiatedIterator is returned from FilterERC20BridgeInitiated and is used to iterate over the raw logs and unpacked data for ERC20BridgeInitiated events raised by the L2StandardBridge contract. -type L2StandardBridgeERC20BridgeInitiatedIterator struct { - Event *L2StandardBridgeERC20BridgeInitiated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L2StandardBridgeERC20BridgeInitiatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2StandardBridgeERC20BridgeInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2StandardBridgeERC20BridgeInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2StandardBridgeERC20BridgeInitiatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2StandardBridgeERC20BridgeInitiatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2StandardBridgeERC20BridgeInitiated represents a ERC20BridgeInitiated event raised by the L2StandardBridge contract. -type L2StandardBridgeERC20BridgeInitiated struct { - LocalToken common.Address - RemoteToken common.Address - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterERC20BridgeInitiated is a free log retrieval operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. -// -// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_L2StandardBridge *L2StandardBridgeFilterer) FilterERC20BridgeInitiated(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address, from []common.Address) (*L2StandardBridgeERC20BridgeInitiatedIterator, error) { - - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L2StandardBridge.contract.FilterLogs(opts, "ERC20BridgeInitiated", localTokenRule, remoteTokenRule, fromRule) - if err != nil { - return nil, err - } - return &L2StandardBridgeERC20BridgeInitiatedIterator{contract: _L2StandardBridge.contract, event: "ERC20BridgeInitiated", logs: logs, sub: sub}, nil -} - -// WatchERC20BridgeInitiated is a free log subscription operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. -// -// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_L2StandardBridge *L2StandardBridgeFilterer) WatchERC20BridgeInitiated(opts *bind.WatchOpts, sink chan<- *L2StandardBridgeERC20BridgeInitiated, localToken []common.Address, remoteToken []common.Address, from []common.Address) (event.Subscription, error) { - - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L2StandardBridge.contract.WatchLogs(opts, "ERC20BridgeInitiated", localTokenRule, remoteTokenRule, fromRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2StandardBridgeERC20BridgeInitiated) - if err := _L2StandardBridge.contract.UnpackLog(event, "ERC20BridgeInitiated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseERC20BridgeInitiated is a log parse operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. -// -// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_L2StandardBridge *L2StandardBridgeFilterer) ParseERC20BridgeInitiated(log types.Log) (*L2StandardBridgeERC20BridgeInitiated, error) { - event := new(L2StandardBridgeERC20BridgeInitiated) - if err := _L2StandardBridge.contract.UnpackLog(event, "ERC20BridgeInitiated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L2StandardBridgeETHBridgeFinalizedIterator is returned from FilterETHBridgeFinalized and is used to iterate over the raw logs and unpacked data for ETHBridgeFinalized events raised by the L2StandardBridge contract. -type L2StandardBridgeETHBridgeFinalizedIterator struct { - Event *L2StandardBridgeETHBridgeFinalized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L2StandardBridgeETHBridgeFinalizedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2StandardBridgeETHBridgeFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2StandardBridgeETHBridgeFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2StandardBridgeETHBridgeFinalizedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2StandardBridgeETHBridgeFinalizedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2StandardBridgeETHBridgeFinalized represents a ETHBridgeFinalized event raised by the L2StandardBridge contract. -type L2StandardBridgeETHBridgeFinalized struct { - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterETHBridgeFinalized is a free log retrieval operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. -// -// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L2StandardBridge *L2StandardBridgeFilterer) FilterETHBridgeFinalized(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*L2StandardBridgeETHBridgeFinalizedIterator, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _L2StandardBridge.contract.FilterLogs(opts, "ETHBridgeFinalized", fromRule, toRule) - if err != nil { - return nil, err - } - return &L2StandardBridgeETHBridgeFinalizedIterator{contract: _L2StandardBridge.contract, event: "ETHBridgeFinalized", logs: logs, sub: sub}, nil -} - -// WatchETHBridgeFinalized is a free log subscription operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. -// -// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L2StandardBridge *L2StandardBridgeFilterer) WatchETHBridgeFinalized(opts *bind.WatchOpts, sink chan<- *L2StandardBridgeETHBridgeFinalized, from []common.Address, to []common.Address) (event.Subscription, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _L2StandardBridge.contract.WatchLogs(opts, "ETHBridgeFinalized", fromRule, toRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2StandardBridgeETHBridgeFinalized) - if err := _L2StandardBridge.contract.UnpackLog(event, "ETHBridgeFinalized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseETHBridgeFinalized is a log parse operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. -// -// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L2StandardBridge *L2StandardBridgeFilterer) ParseETHBridgeFinalized(log types.Log) (*L2StandardBridgeETHBridgeFinalized, error) { - event := new(L2StandardBridgeETHBridgeFinalized) - if err := _L2StandardBridge.contract.UnpackLog(event, "ETHBridgeFinalized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L2StandardBridgeETHBridgeInitiatedIterator is returned from FilterETHBridgeInitiated and is used to iterate over the raw logs and unpacked data for ETHBridgeInitiated events raised by the L2StandardBridge contract. -type L2StandardBridgeETHBridgeInitiatedIterator struct { - Event *L2StandardBridgeETHBridgeInitiated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L2StandardBridgeETHBridgeInitiatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2StandardBridgeETHBridgeInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2StandardBridgeETHBridgeInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2StandardBridgeETHBridgeInitiatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2StandardBridgeETHBridgeInitiatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2StandardBridgeETHBridgeInitiated represents a ETHBridgeInitiated event raised by the L2StandardBridge contract. -type L2StandardBridgeETHBridgeInitiated struct { - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterETHBridgeInitiated is a free log retrieval operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. -// -// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L2StandardBridge *L2StandardBridgeFilterer) FilterETHBridgeInitiated(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*L2StandardBridgeETHBridgeInitiatedIterator, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _L2StandardBridge.contract.FilterLogs(opts, "ETHBridgeInitiated", fromRule, toRule) - if err != nil { - return nil, err - } - return &L2StandardBridgeETHBridgeInitiatedIterator{contract: _L2StandardBridge.contract, event: "ETHBridgeInitiated", logs: logs, sub: sub}, nil -} - -// WatchETHBridgeInitiated is a free log subscription operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. -// -// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L2StandardBridge *L2StandardBridgeFilterer) WatchETHBridgeInitiated(opts *bind.WatchOpts, sink chan<- *L2StandardBridgeETHBridgeInitiated, from []common.Address, to []common.Address) (event.Subscription, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _L2StandardBridge.contract.WatchLogs(opts, "ETHBridgeInitiated", fromRule, toRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2StandardBridgeETHBridgeInitiated) - if err := _L2StandardBridge.contract.UnpackLog(event, "ETHBridgeInitiated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseETHBridgeInitiated is a log parse operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. -// -// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L2StandardBridge *L2StandardBridgeFilterer) ParseETHBridgeInitiated(log types.Log) (*L2StandardBridgeETHBridgeInitiated, error) { - event := new(L2StandardBridgeETHBridgeInitiated) - if err := _L2StandardBridge.contract.UnpackLog(event, "ETHBridgeInitiated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L2StandardBridgeInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the L2StandardBridge contract. -type L2StandardBridgeInitializedIterator struct { - Event *L2StandardBridgeInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L2StandardBridgeInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2StandardBridgeInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2StandardBridgeInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2StandardBridgeInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2StandardBridgeInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2StandardBridgeInitialized represents a Initialized event raised by the L2StandardBridge contract. -type L2StandardBridgeInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L2StandardBridge *L2StandardBridgeFilterer) FilterInitialized(opts *bind.FilterOpts) (*L2StandardBridgeInitializedIterator, error) { - - logs, sub, err := _L2StandardBridge.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &L2StandardBridgeInitializedIterator{contract: _L2StandardBridge.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L2StandardBridge *L2StandardBridgeFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *L2StandardBridgeInitialized) (event.Subscription, error) { - - logs, sub, err := _L2StandardBridge.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2StandardBridgeInitialized) - if err := _L2StandardBridge.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_L2StandardBridge *L2StandardBridgeFilterer) ParseInitialized(log types.Log) (*L2StandardBridgeInitialized, error) { - event := new(L2StandardBridgeInitialized) - if err := _L2StandardBridge.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L2StandardBridgeWithdrawalInitiatedIterator is returned from FilterWithdrawalInitiated and is used to iterate over the raw logs and unpacked data for WithdrawalInitiated events raised by the L2StandardBridge contract. -type L2StandardBridgeWithdrawalInitiatedIterator struct { - Event *L2StandardBridgeWithdrawalInitiated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L2StandardBridgeWithdrawalInitiatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2StandardBridgeWithdrawalInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2StandardBridgeWithdrawalInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2StandardBridgeWithdrawalInitiatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2StandardBridgeWithdrawalInitiatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2StandardBridgeWithdrawalInitiated represents a WithdrawalInitiated event raised by the L2StandardBridge contract. -type L2StandardBridgeWithdrawalInitiated struct { - L1Token common.Address - L2Token common.Address - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterWithdrawalInitiated is a free log retrieval operation binding the contract event 0x73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e. -// -// Solidity: event WithdrawalInitiated(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) -func (_L2StandardBridge *L2StandardBridgeFilterer) FilterWithdrawalInitiated(opts *bind.FilterOpts, l1Token []common.Address, l2Token []common.Address, from []common.Address) (*L2StandardBridgeWithdrawalInitiatedIterator, error) { - - var l1TokenRule []interface{} - for _, l1TokenItem := range l1Token { - l1TokenRule = append(l1TokenRule, l1TokenItem) - } - var l2TokenRule []interface{} - for _, l2TokenItem := range l2Token { - l2TokenRule = append(l2TokenRule, l2TokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L2StandardBridge.contract.FilterLogs(opts, "WithdrawalInitiated", l1TokenRule, l2TokenRule, fromRule) - if err != nil { - return nil, err - } - return &L2StandardBridgeWithdrawalInitiatedIterator{contract: _L2StandardBridge.contract, event: "WithdrawalInitiated", logs: logs, sub: sub}, nil -} - -// WatchWithdrawalInitiated is a free log subscription operation binding the contract event 0x73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e. -// -// Solidity: event WithdrawalInitiated(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) -func (_L2StandardBridge *L2StandardBridgeFilterer) WatchWithdrawalInitiated(opts *bind.WatchOpts, sink chan<- *L2StandardBridgeWithdrawalInitiated, l1Token []common.Address, l2Token []common.Address, from []common.Address) (event.Subscription, error) { - - var l1TokenRule []interface{} - for _, l1TokenItem := range l1Token { - l1TokenRule = append(l1TokenRule, l1TokenItem) - } - var l2TokenRule []interface{} - for _, l2TokenItem := range l2Token { - l2TokenRule = append(l2TokenRule, l2TokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _L2StandardBridge.contract.WatchLogs(opts, "WithdrawalInitiated", l1TokenRule, l2TokenRule, fromRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2StandardBridgeWithdrawalInitiated) - if err := _L2StandardBridge.contract.UnpackLog(event, "WithdrawalInitiated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseWithdrawalInitiated is a log parse operation binding the contract event 0x73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e. -// -// Solidity: event WithdrawalInitiated(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) -func (_L2StandardBridge *L2StandardBridgeFilterer) ParseWithdrawalInitiated(log types.Log) (*L2StandardBridgeWithdrawalInitiated, error) { - event := new(L2StandardBridgeWithdrawalInitiated) - if err := _L2StandardBridge.contract.UnpackLog(event, "WithdrawalInitiated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/indexer/bindings/l2tol1messagepasser.go b/indexer/bindings/l2tol1messagepasser.go deleted file mode 100644 index cc419d057adf..000000000000 --- a/indexer/bindings/l2tol1messagepasser.go +++ /dev/null @@ -1,699 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindings - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// L2ToL1MessagePasserMetaData contains all meta data concerning the L2ToL1MessagePasser contract. -var L2ToL1MessagePasserMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"burn\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initiateWithdrawal\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sentMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"MessagePassed\",\"inputs\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawerBalanceBurnt\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x608060405234801561001057600080fd5b506106d3806100206000396000f3fe6080604052600436106100695760003560e01c806382e3702d1161004357806382e3702d1461012a578063c2b3e5ac1461016a578063ecc704281461017d57600080fd5b80633f827a5a1461009257806344df8e70146100bf57806354fd4d50146100d457600080fd5b3661008d5761008b33620186a0604051806020016040528060008152506101e2565b005b600080fd5b34801561009e57600080fd5b506100a7600181565b60405161ffff90911681526020015b60405180910390f35b3480156100cb57600080fd5b5061008b6103a6565b3480156100e057600080fd5b5061011d6040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b691906104d1565b34801561013657600080fd5b5061015a6101453660046104eb565b60006020819052908152604090205460ff1681565b60405190151581526020016100b6565b61008b610178366004610533565b6101e2565b34801561018957600080fd5b506101d46001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016100b6565b60006102786040518060c0016040528061023c6001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b815233602082015273ffffffffffffffffffffffffffffffffffffffff871660408201523460608201526080810186905260a0018490526103de565b600081815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055905073ffffffffffffffffffffffffffffffffffffffff8416336103136001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b7f02a52367d10742d8032712c1bb8e0144ff1ec5ffda1ed7d70bb05a2744955054348787876040516103489493929190610637565b60405180910390a45050600180547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082168301167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b476103b08161042b565b60405181907f7967de617a5ac1cc7eba2d6f37570a0135afa950d8bb77cdd35f0d0b4e85a16f90600090a250565b80516020808301516040808501516060860151608087015160a0880151935160009761040e979096959101610667565b604051602081830303815290604052805190602001209050919050565b806040516104389061045a565b6040518091039082f0905080158015610455573d6000803e3d6000fd5b505050565b6008806106bf83390190565b6000815180845260005b8181101561048c57602081850181015186830182015201610470565b8181111561049e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006104e46020830184610466565b9392505050565b6000602082840312156104fd57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561054857600080fd5b833573ffffffffffffffffffffffffffffffffffffffff8116811461056c57600080fd5b925060208401359150604084013567ffffffffffffffff8082111561059057600080fd5b818601915086601f8301126105a457600080fd5b8135818111156105b6576105b6610504565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156105fc576105fc610504565b8160405282815289602084870101111561061557600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b8481528360208201526080604082015260006106566080830185610466565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526106b260c0830184610466565b9897505050505050505056fe608060405230fffea164736f6c634300080f000a", -} - -// L2ToL1MessagePasserABI is the input ABI used to generate the binding from. -// Deprecated: Use L2ToL1MessagePasserMetaData.ABI instead. -var L2ToL1MessagePasserABI = L2ToL1MessagePasserMetaData.ABI - -// L2ToL1MessagePasserBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use L2ToL1MessagePasserMetaData.Bin instead. -var L2ToL1MessagePasserBin = L2ToL1MessagePasserMetaData.Bin - -// DeployL2ToL1MessagePasser deploys a new Ethereum contract, binding an instance of L2ToL1MessagePasser to it. -func DeployL2ToL1MessagePasser(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *L2ToL1MessagePasser, error) { - parsed, err := L2ToL1MessagePasserMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(L2ToL1MessagePasserBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &L2ToL1MessagePasser{L2ToL1MessagePasserCaller: L2ToL1MessagePasserCaller{contract: contract}, L2ToL1MessagePasserTransactor: L2ToL1MessagePasserTransactor{contract: contract}, L2ToL1MessagePasserFilterer: L2ToL1MessagePasserFilterer{contract: contract}}, nil -} - -// L2ToL1MessagePasser is an auto generated Go binding around an Ethereum contract. -type L2ToL1MessagePasser struct { - L2ToL1MessagePasserCaller // Read-only binding to the contract - L2ToL1MessagePasserTransactor // Write-only binding to the contract - L2ToL1MessagePasserFilterer // Log filterer for contract events -} - -// L2ToL1MessagePasserCaller is an auto generated read-only Go binding around an Ethereum contract. -type L2ToL1MessagePasserCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L2ToL1MessagePasserTransactor is an auto generated write-only Go binding around an Ethereum contract. -type L2ToL1MessagePasserTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L2ToL1MessagePasserFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type L2ToL1MessagePasserFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// L2ToL1MessagePasserSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type L2ToL1MessagePasserSession struct { - Contract *L2ToL1MessagePasser // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// L2ToL1MessagePasserCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type L2ToL1MessagePasserCallerSession struct { - Contract *L2ToL1MessagePasserCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// L2ToL1MessagePasserTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type L2ToL1MessagePasserTransactorSession struct { - Contract *L2ToL1MessagePasserTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// L2ToL1MessagePasserRaw is an auto generated low-level Go binding around an Ethereum contract. -type L2ToL1MessagePasserRaw struct { - Contract *L2ToL1MessagePasser // Generic contract binding to access the raw methods on -} - -// L2ToL1MessagePasserCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type L2ToL1MessagePasserCallerRaw struct { - Contract *L2ToL1MessagePasserCaller // Generic read-only contract binding to access the raw methods on -} - -// L2ToL1MessagePasserTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type L2ToL1MessagePasserTransactorRaw struct { - Contract *L2ToL1MessagePasserTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewL2ToL1MessagePasser creates a new instance of L2ToL1MessagePasser, bound to a specific deployed contract. -func NewL2ToL1MessagePasser(address common.Address, backend bind.ContractBackend) (*L2ToL1MessagePasser, error) { - contract, err := bindL2ToL1MessagePasser(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &L2ToL1MessagePasser{L2ToL1MessagePasserCaller: L2ToL1MessagePasserCaller{contract: contract}, L2ToL1MessagePasserTransactor: L2ToL1MessagePasserTransactor{contract: contract}, L2ToL1MessagePasserFilterer: L2ToL1MessagePasserFilterer{contract: contract}}, nil -} - -// NewL2ToL1MessagePasserCaller creates a new read-only instance of L2ToL1MessagePasser, bound to a specific deployed contract. -func NewL2ToL1MessagePasserCaller(address common.Address, caller bind.ContractCaller) (*L2ToL1MessagePasserCaller, error) { - contract, err := bindL2ToL1MessagePasser(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &L2ToL1MessagePasserCaller{contract: contract}, nil -} - -// NewL2ToL1MessagePasserTransactor creates a new write-only instance of L2ToL1MessagePasser, bound to a specific deployed contract. -func NewL2ToL1MessagePasserTransactor(address common.Address, transactor bind.ContractTransactor) (*L2ToL1MessagePasserTransactor, error) { - contract, err := bindL2ToL1MessagePasser(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &L2ToL1MessagePasserTransactor{contract: contract}, nil -} - -// NewL2ToL1MessagePasserFilterer creates a new log filterer instance of L2ToL1MessagePasser, bound to a specific deployed contract. -func NewL2ToL1MessagePasserFilterer(address common.Address, filterer bind.ContractFilterer) (*L2ToL1MessagePasserFilterer, error) { - contract, err := bindL2ToL1MessagePasser(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &L2ToL1MessagePasserFilterer{contract: contract}, nil -} - -// bindL2ToL1MessagePasser binds a generic wrapper to an already deployed contract. -func bindL2ToL1MessagePasser(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(L2ToL1MessagePasserABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_L2ToL1MessagePasser *L2ToL1MessagePasserRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _L2ToL1MessagePasser.Contract.L2ToL1MessagePasserCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_L2ToL1MessagePasser *L2ToL1MessagePasserRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L2ToL1MessagePasser.Contract.L2ToL1MessagePasserTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_L2ToL1MessagePasser *L2ToL1MessagePasserRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _L2ToL1MessagePasser.Contract.L2ToL1MessagePasserTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_L2ToL1MessagePasser *L2ToL1MessagePasserCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _L2ToL1MessagePasser.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_L2ToL1MessagePasser *L2ToL1MessagePasserTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L2ToL1MessagePasser.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_L2ToL1MessagePasser *L2ToL1MessagePasserTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _L2ToL1MessagePasser.Contract.contract.Transact(opts, method, params...) -} - -// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. -// -// Solidity: function MESSAGE_VERSION() view returns(uint16) -func (_L2ToL1MessagePasser *L2ToL1MessagePasserCaller) MESSAGEVERSION(opts *bind.CallOpts) (uint16, error) { - var out []interface{} - err := _L2ToL1MessagePasser.contract.Call(opts, &out, "MESSAGE_VERSION") - - if err != nil { - return *new(uint16), err - } - - out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) - - return out0, err - -} - -// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. -// -// Solidity: function MESSAGE_VERSION() view returns(uint16) -func (_L2ToL1MessagePasser *L2ToL1MessagePasserSession) MESSAGEVERSION() (uint16, error) { - return _L2ToL1MessagePasser.Contract.MESSAGEVERSION(&_L2ToL1MessagePasser.CallOpts) -} - -// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. -// -// Solidity: function MESSAGE_VERSION() view returns(uint16) -func (_L2ToL1MessagePasser *L2ToL1MessagePasserCallerSession) MESSAGEVERSION() (uint16, error) { - return _L2ToL1MessagePasser.Contract.MESSAGEVERSION(&_L2ToL1MessagePasser.CallOpts) -} - -// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. -// -// Solidity: function messageNonce() view returns(uint256) -func (_L2ToL1MessagePasser *L2ToL1MessagePasserCaller) MessageNonce(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L2ToL1MessagePasser.contract.Call(opts, &out, "messageNonce") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. -// -// Solidity: function messageNonce() view returns(uint256) -func (_L2ToL1MessagePasser *L2ToL1MessagePasserSession) MessageNonce() (*big.Int, error) { - return _L2ToL1MessagePasser.Contract.MessageNonce(&_L2ToL1MessagePasser.CallOpts) -} - -// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. -// -// Solidity: function messageNonce() view returns(uint256) -func (_L2ToL1MessagePasser *L2ToL1MessagePasserCallerSession) MessageNonce() (*big.Int, error) { - return _L2ToL1MessagePasser.Contract.MessageNonce(&_L2ToL1MessagePasser.CallOpts) -} - -// SentMessages is a free data retrieval call binding the contract method 0x82e3702d. -// -// Solidity: function sentMessages(bytes32 ) view returns(bool) -func (_L2ToL1MessagePasser *L2ToL1MessagePasserCaller) SentMessages(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { - var out []interface{} - err := _L2ToL1MessagePasser.contract.Call(opts, &out, "sentMessages", arg0) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// SentMessages is a free data retrieval call binding the contract method 0x82e3702d. -// -// Solidity: function sentMessages(bytes32 ) view returns(bool) -func (_L2ToL1MessagePasser *L2ToL1MessagePasserSession) SentMessages(arg0 [32]byte) (bool, error) { - return _L2ToL1MessagePasser.Contract.SentMessages(&_L2ToL1MessagePasser.CallOpts, arg0) -} - -// SentMessages is a free data retrieval call binding the contract method 0x82e3702d. -// -// Solidity: function sentMessages(bytes32 ) view returns(bool) -func (_L2ToL1MessagePasser *L2ToL1MessagePasserCallerSession) SentMessages(arg0 [32]byte) (bool, error) { - return _L2ToL1MessagePasser.Contract.SentMessages(&_L2ToL1MessagePasser.CallOpts, arg0) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L2ToL1MessagePasser *L2ToL1MessagePasserCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _L2ToL1MessagePasser.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L2ToL1MessagePasser *L2ToL1MessagePasserSession) Version() (string, error) { - return _L2ToL1MessagePasser.Contract.Version(&_L2ToL1MessagePasser.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_L2ToL1MessagePasser *L2ToL1MessagePasserCallerSession) Version() (string, error) { - return _L2ToL1MessagePasser.Contract.Version(&_L2ToL1MessagePasser.CallOpts) -} - -// Burn is a paid mutator transaction binding the contract method 0x44df8e70. -// -// Solidity: function burn() returns() -func (_L2ToL1MessagePasser *L2ToL1MessagePasserTransactor) Burn(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L2ToL1MessagePasser.contract.Transact(opts, "burn") -} - -// Burn is a paid mutator transaction binding the contract method 0x44df8e70. -// -// Solidity: function burn() returns() -func (_L2ToL1MessagePasser *L2ToL1MessagePasserSession) Burn() (*types.Transaction, error) { - return _L2ToL1MessagePasser.Contract.Burn(&_L2ToL1MessagePasser.TransactOpts) -} - -// Burn is a paid mutator transaction binding the contract method 0x44df8e70. -// -// Solidity: function burn() returns() -func (_L2ToL1MessagePasser *L2ToL1MessagePasserTransactorSession) Burn() (*types.Transaction, error) { - return _L2ToL1MessagePasser.Contract.Burn(&_L2ToL1MessagePasser.TransactOpts) -} - -// InitiateWithdrawal is a paid mutator transaction binding the contract method 0xc2b3e5ac. -// -// Solidity: function initiateWithdrawal(address _target, uint256 _gasLimit, bytes _data) payable returns() -func (_L2ToL1MessagePasser *L2ToL1MessagePasserTransactor) InitiateWithdrawal(opts *bind.TransactOpts, _target common.Address, _gasLimit *big.Int, _data []byte) (*types.Transaction, error) { - return _L2ToL1MessagePasser.contract.Transact(opts, "initiateWithdrawal", _target, _gasLimit, _data) -} - -// InitiateWithdrawal is a paid mutator transaction binding the contract method 0xc2b3e5ac. -// -// Solidity: function initiateWithdrawal(address _target, uint256 _gasLimit, bytes _data) payable returns() -func (_L2ToL1MessagePasser *L2ToL1MessagePasserSession) InitiateWithdrawal(_target common.Address, _gasLimit *big.Int, _data []byte) (*types.Transaction, error) { - return _L2ToL1MessagePasser.Contract.InitiateWithdrawal(&_L2ToL1MessagePasser.TransactOpts, _target, _gasLimit, _data) -} - -// InitiateWithdrawal is a paid mutator transaction binding the contract method 0xc2b3e5ac. -// -// Solidity: function initiateWithdrawal(address _target, uint256 _gasLimit, bytes _data) payable returns() -func (_L2ToL1MessagePasser *L2ToL1MessagePasserTransactorSession) InitiateWithdrawal(_target common.Address, _gasLimit *big.Int, _data []byte) (*types.Transaction, error) { - return _L2ToL1MessagePasser.Contract.InitiateWithdrawal(&_L2ToL1MessagePasser.TransactOpts, _target, _gasLimit, _data) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_L2ToL1MessagePasser *L2ToL1MessagePasserTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L2ToL1MessagePasser.contract.RawTransact(opts, nil) // calldata is disallowed for receive function -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_L2ToL1MessagePasser *L2ToL1MessagePasserSession) Receive() (*types.Transaction, error) { - return _L2ToL1MessagePasser.Contract.Receive(&_L2ToL1MessagePasser.TransactOpts) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_L2ToL1MessagePasser *L2ToL1MessagePasserTransactorSession) Receive() (*types.Transaction, error) { - return _L2ToL1MessagePasser.Contract.Receive(&_L2ToL1MessagePasser.TransactOpts) -} - -// L2ToL1MessagePasserMessagePassedIterator is returned from FilterMessagePassed and is used to iterate over the raw logs and unpacked data for MessagePassed events raised by the L2ToL1MessagePasser contract. -type L2ToL1MessagePasserMessagePassedIterator struct { - Event *L2ToL1MessagePasserMessagePassed // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L2ToL1MessagePasserMessagePassedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2ToL1MessagePasserMessagePassed) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2ToL1MessagePasserMessagePassed) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2ToL1MessagePasserMessagePassedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2ToL1MessagePasserMessagePassedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2ToL1MessagePasserMessagePassed represents a MessagePassed event raised by the L2ToL1MessagePasser contract. -type L2ToL1MessagePasserMessagePassed struct { - Nonce *big.Int - Sender common.Address - Target common.Address - Value *big.Int - GasLimit *big.Int - Data []byte - WithdrawalHash [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterMessagePassed is a free log retrieval operation binding the contract event 0x02a52367d10742d8032712c1bb8e0144ff1ec5ffda1ed7d70bb05a2744955054. -// -// Solidity: event MessagePassed(uint256 indexed nonce, address indexed sender, address indexed target, uint256 value, uint256 gasLimit, bytes data, bytes32 withdrawalHash) -func (_L2ToL1MessagePasser *L2ToL1MessagePasserFilterer) FilterMessagePassed(opts *bind.FilterOpts, nonce []*big.Int, sender []common.Address, target []common.Address) (*L2ToL1MessagePasserMessagePassedIterator, error) { - - var nonceRule []interface{} - for _, nonceItem := range nonce { - nonceRule = append(nonceRule, nonceItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - var targetRule []interface{} - for _, targetItem := range target { - targetRule = append(targetRule, targetItem) - } - - logs, sub, err := _L2ToL1MessagePasser.contract.FilterLogs(opts, "MessagePassed", nonceRule, senderRule, targetRule) - if err != nil { - return nil, err - } - return &L2ToL1MessagePasserMessagePassedIterator{contract: _L2ToL1MessagePasser.contract, event: "MessagePassed", logs: logs, sub: sub}, nil -} - -// WatchMessagePassed is a free log subscription operation binding the contract event 0x02a52367d10742d8032712c1bb8e0144ff1ec5ffda1ed7d70bb05a2744955054. -// -// Solidity: event MessagePassed(uint256 indexed nonce, address indexed sender, address indexed target, uint256 value, uint256 gasLimit, bytes data, bytes32 withdrawalHash) -func (_L2ToL1MessagePasser *L2ToL1MessagePasserFilterer) WatchMessagePassed(opts *bind.WatchOpts, sink chan<- *L2ToL1MessagePasserMessagePassed, nonce []*big.Int, sender []common.Address, target []common.Address) (event.Subscription, error) { - - var nonceRule []interface{} - for _, nonceItem := range nonce { - nonceRule = append(nonceRule, nonceItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - var targetRule []interface{} - for _, targetItem := range target { - targetRule = append(targetRule, targetItem) - } - - logs, sub, err := _L2ToL1MessagePasser.contract.WatchLogs(opts, "MessagePassed", nonceRule, senderRule, targetRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2ToL1MessagePasserMessagePassed) - if err := _L2ToL1MessagePasser.contract.UnpackLog(event, "MessagePassed", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseMessagePassed is a log parse operation binding the contract event 0x02a52367d10742d8032712c1bb8e0144ff1ec5ffda1ed7d70bb05a2744955054. -// -// Solidity: event MessagePassed(uint256 indexed nonce, address indexed sender, address indexed target, uint256 value, uint256 gasLimit, bytes data, bytes32 withdrawalHash) -func (_L2ToL1MessagePasser *L2ToL1MessagePasserFilterer) ParseMessagePassed(log types.Log) (*L2ToL1MessagePasserMessagePassed, error) { - event := new(L2ToL1MessagePasserMessagePassed) - if err := _L2ToL1MessagePasser.contract.UnpackLog(event, "MessagePassed", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// L2ToL1MessagePasserWithdrawerBalanceBurntIterator is returned from FilterWithdrawerBalanceBurnt and is used to iterate over the raw logs and unpacked data for WithdrawerBalanceBurnt events raised by the L2ToL1MessagePasser contract. -type L2ToL1MessagePasserWithdrawerBalanceBurntIterator struct { - Event *L2ToL1MessagePasserWithdrawerBalanceBurnt // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L2ToL1MessagePasserWithdrawerBalanceBurntIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2ToL1MessagePasserWithdrawerBalanceBurnt) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2ToL1MessagePasserWithdrawerBalanceBurnt) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2ToL1MessagePasserWithdrawerBalanceBurntIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2ToL1MessagePasserWithdrawerBalanceBurntIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2ToL1MessagePasserWithdrawerBalanceBurnt represents a WithdrawerBalanceBurnt event raised by the L2ToL1MessagePasser contract. -type L2ToL1MessagePasserWithdrawerBalanceBurnt struct { - Amount *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterWithdrawerBalanceBurnt is a free log retrieval operation binding the contract event 0x7967de617a5ac1cc7eba2d6f37570a0135afa950d8bb77cdd35f0d0b4e85a16f. -// -// Solidity: event WithdrawerBalanceBurnt(uint256 indexed amount) -func (_L2ToL1MessagePasser *L2ToL1MessagePasserFilterer) FilterWithdrawerBalanceBurnt(opts *bind.FilterOpts, amount []*big.Int) (*L2ToL1MessagePasserWithdrawerBalanceBurntIterator, error) { - - var amountRule []interface{} - for _, amountItem := range amount { - amountRule = append(amountRule, amountItem) - } - - logs, sub, err := _L2ToL1MessagePasser.contract.FilterLogs(opts, "WithdrawerBalanceBurnt", amountRule) - if err != nil { - return nil, err - } - return &L2ToL1MessagePasserWithdrawerBalanceBurntIterator{contract: _L2ToL1MessagePasser.contract, event: "WithdrawerBalanceBurnt", logs: logs, sub: sub}, nil -} - -// WatchWithdrawerBalanceBurnt is a free log subscription operation binding the contract event 0x7967de617a5ac1cc7eba2d6f37570a0135afa950d8bb77cdd35f0d0b4e85a16f. -// -// Solidity: event WithdrawerBalanceBurnt(uint256 indexed amount) -func (_L2ToL1MessagePasser *L2ToL1MessagePasserFilterer) WatchWithdrawerBalanceBurnt(opts *bind.WatchOpts, sink chan<- *L2ToL1MessagePasserWithdrawerBalanceBurnt, amount []*big.Int) (event.Subscription, error) { - - var amountRule []interface{} - for _, amountItem := range amount { - amountRule = append(amountRule, amountItem) - } - - logs, sub, err := _L2ToL1MessagePasser.contract.WatchLogs(opts, "WithdrawerBalanceBurnt", amountRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2ToL1MessagePasserWithdrawerBalanceBurnt) - if err := _L2ToL1MessagePasser.contract.UnpackLog(event, "WithdrawerBalanceBurnt", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseWithdrawerBalanceBurnt is a log parse operation binding the contract event 0x7967de617a5ac1cc7eba2d6f37570a0135afa950d8bb77cdd35f0d0b4e85a16f. -// -// Solidity: event WithdrawerBalanceBurnt(uint256 indexed amount) -func (_L2ToL1MessagePasser *L2ToL1MessagePasserFilterer) ParseWithdrawerBalanceBurnt(log types.Log) (*L2ToL1MessagePasserWithdrawerBalanceBurnt, error) { - event := new(L2ToL1MessagePasserWithdrawerBalanceBurnt) - if err := _L2ToL1MessagePasser.contract.UnpackLog(event, "WithdrawerBalanceBurnt", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/indexer/bindings/optimismportal.go b/indexer/bindings/optimismportal.go deleted file mode 100644 index 720b42a03853..000000000000 --- a/indexer/bindings/optimismportal.go +++ /dev/null @@ -1,1360 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindings - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// TypesOutputRootProof is an auto generated low-level Go binding around an user-defined struct. -type TypesOutputRootProof struct { - Version [32]byte - StateRoot [32]byte - MessagePasserStorageRoot [32]byte - LatestBlockhash [32]byte -} - -// TypesWithdrawalTransaction is an auto generated low-level Go binding around an user-defined struct. -type TypesWithdrawalTransaction struct { - Nonce *big.Int - Sender common.Address - Target common.Address - Value *big.Int - GasLimit *big.Int - Data []byte -} - -// OptimismPortalMetaData contains all meta data concerning the OptimismPortal contract. -var OptimismPortalMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositTransaction\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_isCreation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"donateETH\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizedWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_l2Oracle\",\"type\":\"address\",\"internalType\":\"contractL2OutputOracle\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isOutputFinalized\",\"inputs\":[{\"name\":\"_l2OutputIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2Oracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractL2OutputOracle\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2Sender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[{\"name\":\"_byteCount\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"params\",\"inputs\":[],\"outputs\":[{\"name\":\"prevBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"prevBoughtGas\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"prevBlockNum\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"paused_\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proveWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"_l2OutputIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_outputRootProof\",\"type\":\"tuple\",\"internalType\":\"structTypes.OutputRootProof\",\"components\":[{\"name\":\"version\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"latestBlockhash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"provenWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"outputRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"timestamp\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"l2OutputIndex\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransactionDeposited\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"opaqueData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalFinalized\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"success\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalProven\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BadTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasEstimation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LargeCalldata\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfGas\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SmallGasLimit\",\"inputs\":[]}]", - Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b6200191f1760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615142806200029f6000396000f3fe6080604052600436106101125760003560e01c80638c3152e9116100a5578063a35d99df11610074578063cff0ab9611610059578063cff0ab961461039a578063e965084c1461043b578063e9e05c42146104c757600080fd5b8063a35d99df14610341578063c0c53b8b1461037a57600080fd5b80638c3152e9146102975780639b5f694a146102b75780639bf62d82146102e4578063a14238e71461031157600080fd5b806354fd4d50116100e157806354fd4d50146101fc5780635c975abb146102525780636dbffb78146102775780638b4c40b01461013757600080fd5b806333d7e2bd1461013e57806335e80ab314610195578063452a9320146101c75780634870496f146101dc57600080fd5b36610139576101373334620186a06000604051806020016040528060008152506104d5565b005b600080fd5b34801561014a57600080fd5b5060375461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a157600080fd5b5060355461016b90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156101d357600080fd5b5061016b610692565b3480156101e857600080fd5b506101376101f7366004614709565b61072a565b34801561020857600080fd5b506102456040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161018c919061485b565b34801561025e57600080fd5b50610267610d2d565b604051901515815260200161018c565b34801561028357600080fd5b5061026761029236600461486e565b610dc0565b3480156102a357600080fd5b506101376102b2366004614887565b610e7d565b3480156102c357600080fd5b5060365461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102f057600080fd5b5060325461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561031d57600080fd5b5061026761032c36600461486e565b60336020526000908152604090205460ff1681565b34801561034d57600080fd5b5061036161035c3660046148e1565b6116b8565b60405167ffffffffffffffff909116815260200161018c565b34801561038657600080fd5b506101376103953660046148fc565b6116d1565b3480156103a657600080fd5b50600154610402906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161018c565b34801561044757600080fd5b5061049961045636600461486e565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff928316602085015291169082015260600161018c565b6101376104d5366004614955565b8260005a90508380156104fd575073ffffffffffffffffffffffffffffffffffffffff871615155b15610534576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61053e83516116b8565b67ffffffffffffffff168567ffffffffffffffff16101561058b576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0835111156105c9576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146105ea575033731111000000000000000000000000000000001111015b600034888888886040516020016106059594939291906149d2565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3284604051610675919061485b565b60405180910390a45050610689828261193b565b50505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614a37565b905090565b610732610d2d565b15610769576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff160361082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561089d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c19190614a74565b5190506108db6108d636869003860186614ad9565b611c12565b8114610969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610824565b600061097487611c6e565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610a8a5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a869190614a74565b5114155b610b16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610824565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610bdf9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610bd5888a614b3f565b8a60400135611c9e565b610c6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610824565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d9c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614bc3565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610e759173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5a9190614a74565b602001516fffffffffffffffffffffffffffffffff16611cc2565b92915050565b565b610e85610d2d565b15610ebc576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14610f65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610824565b6000610f7082611c6e565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610824565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ec9190614be0565b81602001516fffffffffffffffffffffffffffffffff1610156111b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610824565b6111d681602001516fffffffffffffffffffffffffffffffff16611cc2565b611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610824565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561130f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113339190614a74565b82518151919250146113ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610824565b61140c81602001516fffffffffffffffffffffffffffffffff16611cc2565b6114be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610824565b60008381526033602052604090205460ff161561155d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610824565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a08801516115ff93929190611d68565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061166490841515815260200190565b60405180910390a28015801561167a5750326001145b156116b1576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60006116c5826010614c28565b610e7590615208614c58565b600054610100900460ff16158080156116f15750600054600160ff909116105b8061170b5750303b15801561170b575060005460ff166001145b611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610824565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156117f557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010085841602179055603254166118ae57603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b6118b6611dc6565b801561191957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090611971907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643614c84565b9050600061197d611ed9565b90506000816020015160ff16826000015163ffffffff1661199e9190614cca565b90508215611ad5576001546000906119d5908390700100000000000000000000000000000000900467ffffffffffffffff16614d32565b90506000836040015160ff16836119ec9190614da6565b600154611a0c9084906fffffffffffffffffffffffffffffffff16614da6565b611a169190614cca565b600154909150600090611a6790611a409084906fffffffffffffffffffffffffffffffff16614e62565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16611f9a565b90506001861115611a9657611a93611a4082876040015160ff1660018a611a8e9190614c84565b611fb9565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090611b08908490700100000000000000000000000000000000900467ffffffffffffffff16614c58565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611b95576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090611bc1906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816614ed6565b90506000611bd348633b9aca0061200e565b611bdd9083614f13565b905060005a611bec9088614c84565b905080821115611c0857611c08611c038284614c84565b612025565b5050505050505050565b60008160000151826020015183604001518460600151604051602001611c51949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611c51979096959101614f27565b600080611caa86612053565b9050611cb881868686612085565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015611d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d569190614be0565b611d609083614f7e565b421192915050565b6000806000611d788660006120b5565b905080611dae576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600054610100900460ff16611e5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610824565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600003610e7b5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015611f76573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614fbb565b6000611faf611fa985856120d3565b836120e3565b90505b9392505050565b6000670de0b6b3a7640000611ffa611fd18583614cca565b611fe390670de0b6b3a7640000614d32565b611ff585670de0b6b3a7640000614da6565b6120f2565b6120049086614da6565b611faf9190614cca565b60008183101561201e5781611fb2565b5090919050565b6000805a90505b825a6120389083614c84565b101561204e576120478261505a565b915061202c565b505050565b6060818051906020012060405160200161206f91815260200190565b6040516020818303038152906040529050919050565b60006120ac84612096878686612123565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b60008183121561201e5781611fb2565b600081831261201e5781611fb2565b6000611fb2670de0b6b3a76400008361210a86612ba1565b6121149190614da6565b61211e9190614cca565b612de5565b60606000845111612190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610824565b600061219b84613024565b905060006121a886613110565b90506000846040516020016121bf91815260200190565b60405160208183030381529060405290506000805b8451811015612b185760008582815181106121f1576121f1615092565b60200260200101519050845183111561228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610824565b8260000361234557805180516020918201206040516122da926122b492910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610824565b61249c565b8051516020116123fb578051805160209182012060405161236f926122b492910190815260200190565b612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610824565b80518451602080870191909120825191909201201461249c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610824565b6124a860106001614f7e565b81602001515103612684578451830361261c576124e281602001516010815181106124d5576124d5615092565b6020026020010151613173565b96506000875111612575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610824565b600186516125839190614c84565b8214612611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610824565b505050505050611fb2565b600085848151811061263057612630615092565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061265b5761265b615092565b6020026020010151905061266e816132d3565b955061267b600186614f7e565b94505050612b05565b600281602001515103612a7d57600061269c826132f8565b90506000816000815181106126b3576126b3615092565b016020015160f81c905060006126ca6002836150c1565b6126d59060026150e3565b905060006126e6848360ff1661331c565b905060006126f48a8961331c565b905060006127028383613352565b905080835114612794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610824565b60ff8516600214806127a9575060ff85166003145b15612998578082511461283e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610824565b61285887602001516001815181106124d5576124d5615092565b9c5060008d51116128eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610824565b60018c516128f99190614c84565b8814612987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610824565b505050505050505050505050611fb2565b60ff851615806129ab575060ff85166001145b156129ea576129d787602001516001815181106129ca576129ca615092565b60200260200101516132d3565b99506129e3818a614f7e565b9850612a72565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610824565b505050505050612b05565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610824565b5080612b108161505a565b9150506121d4565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610824565b6000808213612c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610824565b60006060612c1984613406565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c18213612e1657506000919050565b680755bf798b4a1bf1e58212612e88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610824565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff81111561304257613042614529565b60405190808252806020026020018201604052801561308757816020015b60408051808201909152606080825260208201528152602001906001900390816130605790505b50915060005b818110156131095760405180604001604052808583815181106130b2576130b2615092565b602002602001015181526020016130e18684815181106130d4576130d4615092565b60200260200101516134dc565b8152508382815181106130f6576130f6615092565b602090810291909101015260010161308d565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613168578060011b82018184015160001a8060041c8253600f81166001830153505060010161313a565b509295945050505050565b60606000806000613183856134ef565b91945092509050600081600181111561319e5761319e615106565b1461322b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610824565b6132358284614f7e565b8551146132c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610824565b6120ac85602001518484613f5c565b606060208260000151106132ef576132ea82613173565b610e75565b610e7582613ff0565b6060610e7561331783602001516000815181106124d5576124d5615092565b613110565b60608251821061333b5750604080516020810190915260008152610e75565b611fb2838384865161334d9190614c84565b614006565b6000808251845110613365578251613368565b83515b90505b80821080156133ef575082828151811061338757613387615092565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168483815181106133c6576133c6615092565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156133ff5781600101915061336b565b5092915050565b6000808211613471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610824565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060610e756134ea836141de565b6142c7565b6000806000808460000151116135ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610824565b6020840151805160001a607f81116135d2576000600160009450945094505050613f55565b60b781116137e05760006135e7608083614c84565b9050808760000151116136a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610824565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061371b57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6137cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610824565b5060019550935060009250613f55915050565b60bf8111613b2e5760006137f560b783614c84565b9050808760000151116138b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610824565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361398e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610824565b600184015160088302610100031c60378111613a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610824565b613a5c8184614f7e565b895111613b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610824565b613b1c836001614f7e565b9750955060009450613f559350505050565b60f78111613c0f576000613b4360c083614c84565b905080876000015111613bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610824565b600195509350849250613f55915050565b6000613c1c60f783614c84565b905080876000015111613cd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610824565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613db5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610824565b600184015160088302610100031c60378111613e79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610824565b613e838184614f7e565b895111613f38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610824565b613f43836001614f7e565b9750955060019450613f559350505050565b9193909250565b60608167ffffffffffffffff811115613f7757613f77614529565b6040519080825280601f01601f191660200182016040528015613fa1576020820181803683370190505b5090508115611fb2576000613fb68486614f7e565b90506020820160005b84811015613fd7578281015182820152602001613fbf565b84811115613fe6576000858301525b5050509392505050565b6060610e75826020015160008460000151613f5c565b60608182601f011015614075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610824565b8282840110156140e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610824565b8183018451101561414e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610824565b60608215801561416d57604051915060008252602082016040526141d5565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156141a657805183526020928301920161418e565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116142a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610824565b50604080518082019091528151815260209182019181019190915290565b606060008060006142d7856134ef565b9194509250905060018160018111156142f2576142f2615106565b1461437f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610824565b845161438b8385614f7e565b14614418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610824565b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161442f5790505093506000835b865181101561451d576000806144a26040518060400160405280858c600001516144869190614c84565b8152602001858c6020015161449b9190614f7e565b90526134ef565b5091509150604051806040016040528083836144be9190614f7e565b8152602001848b602001516144d39190614f7e565b8152508885815181106144e8576144e8615092565b60209081029190910101526144fe600185614f7e565b935061450a8183614f7e565b6145149084614f7e565b9250505061445c565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561459f5761459f614529565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff811681146145c957600080fd5b50565b600082601f8301126145dd57600080fd5b813567ffffffffffffffff8111156145f7576145f7614529565b61462860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614558565b81815284602083860101111561463d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561466c57600080fd5b60405160c0810167ffffffffffffffff828210818311171561469057614690614529565b8160405282935084358352602085013591506146ab826145a7565b816020840152604085013591506146c1826145a7565b816040840152606085013560608401526080850135608084015260a08501359150808211156146ef57600080fd5b506146fc858286016145cc565b60a0830152505092915050565b600080600080600085870360e081121561472257600080fd5b863567ffffffffffffffff8082111561473a57600080fd5b6147468a838b0161465a565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561477f57600080fd5b60408901955060c089013592508083111561479957600080fd5b828901925089601f8401126147ad57600080fd5b82359150808211156147be57600080fd5b508860208260051b84010111156147d457600080fd5b959894975092955050506020019190565b60005b838110156148005781810151838201526020016147e8565b838111156119195750506000910152565b600081518084526148298160208601602086016147e5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fb26020830184614811565b60006020828403121561488057600080fd5b5035919050565b60006020828403121561489957600080fd5b813567ffffffffffffffff8111156148b057600080fd5b6148bc8482850161465a565b949350505050565b803567ffffffffffffffff811681146148dc57600080fd5b919050565b6000602082840312156148f357600080fd5b611fb2826148c4565b60008060006060848603121561491157600080fd5b833561491c816145a7565b9250602084013561492c816145a7565b9150604084013561493c816145a7565b809150509250925092565b80151581146145c957600080fd5b600080600080600060a0868803121561496d57600080fd5b8535614978816145a7565b94506020860135935061498d604087016148c4565b9250606086013561499d81614947565b9150608086013567ffffffffffffffff8111156149b957600080fd5b6149c5888289016145cc565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614a268160498501602087016147e5565b919091016049019695505050505050565b600060208284031215614a4957600080fd5b8151611fb2816145a7565b80516fffffffffffffffffffffffffffffffff811681146148dc57600080fd5b600060608284031215614a8657600080fd5b6040516060810181811067ffffffffffffffff82111715614aa957614aa9614529565b60405282518152614abc60208401614a54565b6020820152614acd60408401614a54565b60408201529392505050565b600060808284031215614aeb57600080fd5b6040516080810181811067ffffffffffffffff82111715614b0e57614b0e614529565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614b5a57614b5a614529565b8360051b6020614b6b818301614558565b868152918501918181019036841115614b8357600080fd5b865b84811015614bb757803586811115614b9d5760008081fd5b614ba936828b016145cc565b845250918301918301614b85565b50979650505050505050565b600060208284031215614bd557600080fd5b8151611fb281614947565b600060208284031215614bf257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615614c4f57614c4f614bf9565b02949350505050565b600067ffffffffffffffff808316818516808303821115614c7b57614c7b614bf9565b01949350505050565b600082821015614c9657614c96614bf9565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614cd957614cd9614c9b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615614d2d57614d2d614bf9565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615614d6c57614d6c614bf9565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615614da057614da0614bf9565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615614de757614de7614bf9565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615614e2257614e22614bf9565b60008712925087820587128484161615614e3e57614e3e614bf9565b87850587128184161615614e5457614e54614bf9565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615614e9c57614e9c614bf9565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615614ed057614ed0614bf9565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f0e57614f0e614bf9565b500290565b600082614f2257614f22614c9b565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152614f7260c0830184614811565b98975050505050505050565b60008219821115614f9157614f91614bf9565b500190565b805163ffffffff811681146148dc57600080fd5b805160ff811681146148dc57600080fd5b600060c08284031215614fcd57600080fd5b60405160c0810181811067ffffffffffffffff82111715614ff057614ff0614529565b604052614ffc83614f96565b815261500a60208401614faa565b602082015261501b60408401614faa565b604082015261502c60608401614f96565b606082015261503d60808401614f96565b608082015261504e60a08401614a54565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361508b5761508b614bf9565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff8316806150d4576150d4614c9b565b8060ff84160691505092915050565b600060ff821660ff8416808210156150fd576150fd614bf9565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", -} - -// OptimismPortalABI is the input ABI used to generate the binding from. -// Deprecated: Use OptimismPortalMetaData.ABI instead. -var OptimismPortalABI = OptimismPortalMetaData.ABI - -// OptimismPortalBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use OptimismPortalMetaData.Bin instead. -var OptimismPortalBin = OptimismPortalMetaData.Bin - -// DeployOptimismPortal deploys a new Ethereum contract, binding an instance of OptimismPortal to it. -func DeployOptimismPortal(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *OptimismPortal, error) { - parsed, err := OptimismPortalMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OptimismPortalBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &OptimismPortal{OptimismPortalCaller: OptimismPortalCaller{contract: contract}, OptimismPortalTransactor: OptimismPortalTransactor{contract: contract}, OptimismPortalFilterer: OptimismPortalFilterer{contract: contract}}, nil -} - -// OptimismPortal is an auto generated Go binding around an Ethereum contract. -type OptimismPortal struct { - OptimismPortalCaller // Read-only binding to the contract - OptimismPortalTransactor // Write-only binding to the contract - OptimismPortalFilterer // Log filterer for contract events -} - -// OptimismPortalCaller is an auto generated read-only Go binding around an Ethereum contract. -type OptimismPortalCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// OptimismPortalTransactor is an auto generated write-only Go binding around an Ethereum contract. -type OptimismPortalTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// OptimismPortalFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type OptimismPortalFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// OptimismPortalSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type OptimismPortalSession struct { - Contract *OptimismPortal // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// OptimismPortalCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type OptimismPortalCallerSession struct { - Contract *OptimismPortalCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// OptimismPortalTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type OptimismPortalTransactorSession struct { - Contract *OptimismPortalTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// OptimismPortalRaw is an auto generated low-level Go binding around an Ethereum contract. -type OptimismPortalRaw struct { - Contract *OptimismPortal // Generic contract binding to access the raw methods on -} - -// OptimismPortalCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type OptimismPortalCallerRaw struct { - Contract *OptimismPortalCaller // Generic read-only contract binding to access the raw methods on -} - -// OptimismPortalTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type OptimismPortalTransactorRaw struct { - Contract *OptimismPortalTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewOptimismPortal creates a new instance of OptimismPortal, bound to a specific deployed contract. -func NewOptimismPortal(address common.Address, backend bind.ContractBackend) (*OptimismPortal, error) { - contract, err := bindOptimismPortal(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &OptimismPortal{OptimismPortalCaller: OptimismPortalCaller{contract: contract}, OptimismPortalTransactor: OptimismPortalTransactor{contract: contract}, OptimismPortalFilterer: OptimismPortalFilterer{contract: contract}}, nil -} - -// NewOptimismPortalCaller creates a new read-only instance of OptimismPortal, bound to a specific deployed contract. -func NewOptimismPortalCaller(address common.Address, caller bind.ContractCaller) (*OptimismPortalCaller, error) { - contract, err := bindOptimismPortal(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &OptimismPortalCaller{contract: contract}, nil -} - -// NewOptimismPortalTransactor creates a new write-only instance of OptimismPortal, bound to a specific deployed contract. -func NewOptimismPortalTransactor(address common.Address, transactor bind.ContractTransactor) (*OptimismPortalTransactor, error) { - contract, err := bindOptimismPortal(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &OptimismPortalTransactor{contract: contract}, nil -} - -// NewOptimismPortalFilterer creates a new log filterer instance of OptimismPortal, bound to a specific deployed contract. -func NewOptimismPortalFilterer(address common.Address, filterer bind.ContractFilterer) (*OptimismPortalFilterer, error) { - contract, err := bindOptimismPortal(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &OptimismPortalFilterer{contract: contract}, nil -} - -// bindOptimismPortal binds a generic wrapper to an already deployed contract. -func bindOptimismPortal(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(OptimismPortalABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_OptimismPortal *OptimismPortalRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _OptimismPortal.Contract.OptimismPortalCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_OptimismPortal *OptimismPortalRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _OptimismPortal.Contract.OptimismPortalTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_OptimismPortal *OptimismPortalRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _OptimismPortal.Contract.OptimismPortalTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_OptimismPortal *OptimismPortalCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _OptimismPortal.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_OptimismPortal *OptimismPortalTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _OptimismPortal.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_OptimismPortal *OptimismPortalTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _OptimismPortal.Contract.contract.Transact(opts, method, params...) -} - -// FinalizedWithdrawals is a free data retrieval call binding the contract method 0xa14238e7. -// -// Solidity: function finalizedWithdrawals(bytes32 ) view returns(bool) -func (_OptimismPortal *OptimismPortalCaller) FinalizedWithdrawals(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "finalizedWithdrawals", arg0) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// FinalizedWithdrawals is a free data retrieval call binding the contract method 0xa14238e7. -// -// Solidity: function finalizedWithdrawals(bytes32 ) view returns(bool) -func (_OptimismPortal *OptimismPortalSession) FinalizedWithdrawals(arg0 [32]byte) (bool, error) { - return _OptimismPortal.Contract.FinalizedWithdrawals(&_OptimismPortal.CallOpts, arg0) -} - -// FinalizedWithdrawals is a free data retrieval call binding the contract method 0xa14238e7. -// -// Solidity: function finalizedWithdrawals(bytes32 ) view returns(bool) -func (_OptimismPortal *OptimismPortalCallerSession) FinalizedWithdrawals(arg0 [32]byte) (bool, error) { - return _OptimismPortal.Contract.FinalizedWithdrawals(&_OptimismPortal.CallOpts, arg0) -} - -// Guardian is a free data retrieval call binding the contract method 0x452a9320. -// -// Solidity: function guardian() view returns(address) -func (_OptimismPortal *OptimismPortalCaller) Guardian(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "guardian") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Guardian is a free data retrieval call binding the contract method 0x452a9320. -// -// Solidity: function guardian() view returns(address) -func (_OptimismPortal *OptimismPortalSession) Guardian() (common.Address, error) { - return _OptimismPortal.Contract.Guardian(&_OptimismPortal.CallOpts) -} - -// Guardian is a free data retrieval call binding the contract method 0x452a9320. -// -// Solidity: function guardian() view returns(address) -func (_OptimismPortal *OptimismPortalCallerSession) Guardian() (common.Address, error) { - return _OptimismPortal.Contract.Guardian(&_OptimismPortal.CallOpts) -} - -// IsOutputFinalized is a free data retrieval call binding the contract method 0x6dbffb78. -// -// Solidity: function isOutputFinalized(uint256 _l2OutputIndex) view returns(bool) -func (_OptimismPortal *OptimismPortalCaller) IsOutputFinalized(opts *bind.CallOpts, _l2OutputIndex *big.Int) (bool, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "isOutputFinalized", _l2OutputIndex) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsOutputFinalized is a free data retrieval call binding the contract method 0x6dbffb78. -// -// Solidity: function isOutputFinalized(uint256 _l2OutputIndex) view returns(bool) -func (_OptimismPortal *OptimismPortalSession) IsOutputFinalized(_l2OutputIndex *big.Int) (bool, error) { - return _OptimismPortal.Contract.IsOutputFinalized(&_OptimismPortal.CallOpts, _l2OutputIndex) -} - -// IsOutputFinalized is a free data retrieval call binding the contract method 0x6dbffb78. -// -// Solidity: function isOutputFinalized(uint256 _l2OutputIndex) view returns(bool) -func (_OptimismPortal *OptimismPortalCallerSession) IsOutputFinalized(_l2OutputIndex *big.Int) (bool, error) { - return _OptimismPortal.Contract.IsOutputFinalized(&_OptimismPortal.CallOpts, _l2OutputIndex) -} - -// L2Oracle is a free data retrieval call binding the contract method 0x9b5f694a. -// -// Solidity: function l2Oracle() view returns(address) -func (_OptimismPortal *OptimismPortalCaller) L2Oracle(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "l2Oracle") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// L2Oracle is a free data retrieval call binding the contract method 0x9b5f694a. -// -// Solidity: function l2Oracle() view returns(address) -func (_OptimismPortal *OptimismPortalSession) L2Oracle() (common.Address, error) { - return _OptimismPortal.Contract.L2Oracle(&_OptimismPortal.CallOpts) -} - -// L2Oracle is a free data retrieval call binding the contract method 0x9b5f694a. -// -// Solidity: function l2Oracle() view returns(address) -func (_OptimismPortal *OptimismPortalCallerSession) L2Oracle() (common.Address, error) { - return _OptimismPortal.Contract.L2Oracle(&_OptimismPortal.CallOpts) -} - -// L2Sender is a free data retrieval call binding the contract method 0x9bf62d82. -// -// Solidity: function l2Sender() view returns(address) -func (_OptimismPortal *OptimismPortalCaller) L2Sender(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "l2Sender") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// L2Sender is a free data retrieval call binding the contract method 0x9bf62d82. -// -// Solidity: function l2Sender() view returns(address) -func (_OptimismPortal *OptimismPortalSession) L2Sender() (common.Address, error) { - return _OptimismPortal.Contract.L2Sender(&_OptimismPortal.CallOpts) -} - -// L2Sender is a free data retrieval call binding the contract method 0x9bf62d82. -// -// Solidity: function l2Sender() view returns(address) -func (_OptimismPortal *OptimismPortalCallerSession) L2Sender() (common.Address, error) { - return _OptimismPortal.Contract.L2Sender(&_OptimismPortal.CallOpts) -} - -// MinimumGasLimit is a free data retrieval call binding the contract method 0xa35d99df. -// -// Solidity: function minimumGasLimit(uint64 _byteCount) pure returns(uint64) -func (_OptimismPortal *OptimismPortalCaller) MinimumGasLimit(opts *bind.CallOpts, _byteCount uint64) (uint64, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "minimumGasLimit", _byteCount) - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// MinimumGasLimit is a free data retrieval call binding the contract method 0xa35d99df. -// -// Solidity: function minimumGasLimit(uint64 _byteCount) pure returns(uint64) -func (_OptimismPortal *OptimismPortalSession) MinimumGasLimit(_byteCount uint64) (uint64, error) { - return _OptimismPortal.Contract.MinimumGasLimit(&_OptimismPortal.CallOpts, _byteCount) -} - -// MinimumGasLimit is a free data retrieval call binding the contract method 0xa35d99df. -// -// Solidity: function minimumGasLimit(uint64 _byteCount) pure returns(uint64) -func (_OptimismPortal *OptimismPortalCallerSession) MinimumGasLimit(_byteCount uint64) (uint64, error) { - return _OptimismPortal.Contract.MinimumGasLimit(&_OptimismPortal.CallOpts, _byteCount) -} - -// Params is a free data retrieval call binding the contract method 0xcff0ab96. -// -// Solidity: function params() view returns(uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) -func (_OptimismPortal *OptimismPortalCaller) Params(opts *bind.CallOpts) (struct { - PrevBaseFee *big.Int - PrevBoughtGas uint64 - PrevBlockNum uint64 -}, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "params") - - outstruct := new(struct { - PrevBaseFee *big.Int - PrevBoughtGas uint64 - PrevBlockNum uint64 - }) - if err != nil { - return *outstruct, err - } - - outstruct.PrevBaseFee = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - outstruct.PrevBoughtGas = *abi.ConvertType(out[1], new(uint64)).(*uint64) - outstruct.PrevBlockNum = *abi.ConvertType(out[2], new(uint64)).(*uint64) - - return *outstruct, err - -} - -// Params is a free data retrieval call binding the contract method 0xcff0ab96. -// -// Solidity: function params() view returns(uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) -func (_OptimismPortal *OptimismPortalSession) Params() (struct { - PrevBaseFee *big.Int - PrevBoughtGas uint64 - PrevBlockNum uint64 -}, error) { - return _OptimismPortal.Contract.Params(&_OptimismPortal.CallOpts) -} - -// Params is a free data retrieval call binding the contract method 0xcff0ab96. -// -// Solidity: function params() view returns(uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) -func (_OptimismPortal *OptimismPortalCallerSession) Params() (struct { - PrevBaseFee *big.Int - PrevBoughtGas uint64 - PrevBlockNum uint64 -}, error) { - return _OptimismPortal.Contract.Params(&_OptimismPortal.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool paused_) -func (_OptimismPortal *OptimismPortalCaller) Paused(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "paused") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool paused_) -func (_OptimismPortal *OptimismPortalSession) Paused() (bool, error) { - return _OptimismPortal.Contract.Paused(&_OptimismPortal.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool paused_) -func (_OptimismPortal *OptimismPortalCallerSession) Paused() (bool, error) { - return _OptimismPortal.Contract.Paused(&_OptimismPortal.CallOpts) -} - -// ProvenWithdrawals is a free data retrieval call binding the contract method 0xe965084c. -// -// Solidity: function provenWithdrawals(bytes32 ) view returns(bytes32 outputRoot, uint128 timestamp, uint128 l2OutputIndex) -func (_OptimismPortal *OptimismPortalCaller) ProvenWithdrawals(opts *bind.CallOpts, arg0 [32]byte) (struct { - OutputRoot [32]byte - Timestamp *big.Int - L2OutputIndex *big.Int -}, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "provenWithdrawals", arg0) - - outstruct := new(struct { - OutputRoot [32]byte - Timestamp *big.Int - L2OutputIndex *big.Int - }) - if err != nil { - return *outstruct, err - } - - outstruct.OutputRoot = *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - outstruct.Timestamp = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) - outstruct.L2OutputIndex = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) - - return *outstruct, err - -} - -// ProvenWithdrawals is a free data retrieval call binding the contract method 0xe965084c. -// -// Solidity: function provenWithdrawals(bytes32 ) view returns(bytes32 outputRoot, uint128 timestamp, uint128 l2OutputIndex) -func (_OptimismPortal *OptimismPortalSession) ProvenWithdrawals(arg0 [32]byte) (struct { - OutputRoot [32]byte - Timestamp *big.Int - L2OutputIndex *big.Int -}, error) { - return _OptimismPortal.Contract.ProvenWithdrawals(&_OptimismPortal.CallOpts, arg0) -} - -// ProvenWithdrawals is a free data retrieval call binding the contract method 0xe965084c. -// -// Solidity: function provenWithdrawals(bytes32 ) view returns(bytes32 outputRoot, uint128 timestamp, uint128 l2OutputIndex) -func (_OptimismPortal *OptimismPortalCallerSession) ProvenWithdrawals(arg0 [32]byte) (struct { - OutputRoot [32]byte - Timestamp *big.Int - L2OutputIndex *big.Int -}, error) { - return _OptimismPortal.Contract.ProvenWithdrawals(&_OptimismPortal.CallOpts, arg0) -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_OptimismPortal *OptimismPortalCaller) SuperchainConfig(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "superchainConfig") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_OptimismPortal *OptimismPortalSession) SuperchainConfig() (common.Address, error) { - return _OptimismPortal.Contract.SuperchainConfig(&_OptimismPortal.CallOpts) -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_OptimismPortal *OptimismPortalCallerSession) SuperchainConfig() (common.Address, error) { - return _OptimismPortal.Contract.SuperchainConfig(&_OptimismPortal.CallOpts) -} - -// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. -// -// Solidity: function systemConfig() view returns(address) -func (_OptimismPortal *OptimismPortalCaller) SystemConfig(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "systemConfig") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. -// -// Solidity: function systemConfig() view returns(address) -func (_OptimismPortal *OptimismPortalSession) SystemConfig() (common.Address, error) { - return _OptimismPortal.Contract.SystemConfig(&_OptimismPortal.CallOpts) -} - -// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. -// -// Solidity: function systemConfig() view returns(address) -func (_OptimismPortal *OptimismPortalCallerSession) SystemConfig() (common.Address, error) { - return _OptimismPortal.Contract.SystemConfig(&_OptimismPortal.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_OptimismPortal *OptimismPortalCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _OptimismPortal.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_OptimismPortal *OptimismPortalSession) Version() (string, error) { - return _OptimismPortal.Contract.Version(&_OptimismPortal.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_OptimismPortal *OptimismPortalCallerSession) Version() (string, error) { - return _OptimismPortal.Contract.Version(&_OptimismPortal.CallOpts) -} - -// DepositTransaction is a paid mutator transaction binding the contract method 0xe9e05c42. -// -// Solidity: function depositTransaction(address _to, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes _data) payable returns() -func (_OptimismPortal *OptimismPortalTransactor) DepositTransaction(opts *bind.TransactOpts, _to common.Address, _value *big.Int, _gasLimit uint64, _isCreation bool, _data []byte) (*types.Transaction, error) { - return _OptimismPortal.contract.Transact(opts, "depositTransaction", _to, _value, _gasLimit, _isCreation, _data) -} - -// DepositTransaction is a paid mutator transaction binding the contract method 0xe9e05c42. -// -// Solidity: function depositTransaction(address _to, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes _data) payable returns() -func (_OptimismPortal *OptimismPortalSession) DepositTransaction(_to common.Address, _value *big.Int, _gasLimit uint64, _isCreation bool, _data []byte) (*types.Transaction, error) { - return _OptimismPortal.Contract.DepositTransaction(&_OptimismPortal.TransactOpts, _to, _value, _gasLimit, _isCreation, _data) -} - -// DepositTransaction is a paid mutator transaction binding the contract method 0xe9e05c42. -// -// Solidity: function depositTransaction(address _to, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes _data) payable returns() -func (_OptimismPortal *OptimismPortalTransactorSession) DepositTransaction(_to common.Address, _value *big.Int, _gasLimit uint64, _isCreation bool, _data []byte) (*types.Transaction, error) { - return _OptimismPortal.Contract.DepositTransaction(&_OptimismPortal.TransactOpts, _to, _value, _gasLimit, _isCreation, _data) -} - -// DonateETH is a paid mutator transaction binding the contract method 0x8b4c40b0. -// -// Solidity: function donateETH() payable returns() -func (_OptimismPortal *OptimismPortalTransactor) DonateETH(opts *bind.TransactOpts) (*types.Transaction, error) { - return _OptimismPortal.contract.Transact(opts, "donateETH") -} - -// DonateETH is a paid mutator transaction binding the contract method 0x8b4c40b0. -// -// Solidity: function donateETH() payable returns() -func (_OptimismPortal *OptimismPortalSession) DonateETH() (*types.Transaction, error) { - return _OptimismPortal.Contract.DonateETH(&_OptimismPortal.TransactOpts) -} - -// DonateETH is a paid mutator transaction binding the contract method 0x8b4c40b0. -// -// Solidity: function donateETH() payable returns() -func (_OptimismPortal *OptimismPortalTransactorSession) DonateETH() (*types.Transaction, error) { - return _OptimismPortal.Contract.DonateETH(&_OptimismPortal.TransactOpts) -} - -// FinalizeWithdrawalTransaction is a paid mutator transaction binding the contract method 0x8c3152e9. -// -// Solidity: function finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx) returns() -func (_OptimismPortal *OptimismPortalTransactor) FinalizeWithdrawalTransaction(opts *bind.TransactOpts, _tx TypesWithdrawalTransaction) (*types.Transaction, error) { - return _OptimismPortal.contract.Transact(opts, "finalizeWithdrawalTransaction", _tx) -} - -// FinalizeWithdrawalTransaction is a paid mutator transaction binding the contract method 0x8c3152e9. -// -// Solidity: function finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx) returns() -func (_OptimismPortal *OptimismPortalSession) FinalizeWithdrawalTransaction(_tx TypesWithdrawalTransaction) (*types.Transaction, error) { - return _OptimismPortal.Contract.FinalizeWithdrawalTransaction(&_OptimismPortal.TransactOpts, _tx) -} - -// FinalizeWithdrawalTransaction is a paid mutator transaction binding the contract method 0x8c3152e9. -// -// Solidity: function finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx) returns() -func (_OptimismPortal *OptimismPortalTransactorSession) FinalizeWithdrawalTransaction(_tx TypesWithdrawalTransaction) (*types.Transaction, error) { - return _OptimismPortal.Contract.FinalizeWithdrawalTransaction(&_OptimismPortal.TransactOpts, _tx) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. -// -// Solidity: function initialize(address _l2Oracle, address _systemConfig, address _superchainConfig) returns() -func (_OptimismPortal *OptimismPortalTransactor) Initialize(opts *bind.TransactOpts, _l2Oracle common.Address, _systemConfig common.Address, _superchainConfig common.Address) (*types.Transaction, error) { - return _OptimismPortal.contract.Transact(opts, "initialize", _l2Oracle, _systemConfig, _superchainConfig) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. -// -// Solidity: function initialize(address _l2Oracle, address _systemConfig, address _superchainConfig) returns() -func (_OptimismPortal *OptimismPortalSession) Initialize(_l2Oracle common.Address, _systemConfig common.Address, _superchainConfig common.Address) (*types.Transaction, error) { - return _OptimismPortal.Contract.Initialize(&_OptimismPortal.TransactOpts, _l2Oracle, _systemConfig, _superchainConfig) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. -// -// Solidity: function initialize(address _l2Oracle, address _systemConfig, address _superchainConfig) returns() -func (_OptimismPortal *OptimismPortalTransactorSession) Initialize(_l2Oracle common.Address, _systemConfig common.Address, _superchainConfig common.Address) (*types.Transaction, error) { - return _OptimismPortal.Contract.Initialize(&_OptimismPortal.TransactOpts, _l2Oracle, _systemConfig, _superchainConfig) -} - -// ProveWithdrawalTransaction is a paid mutator transaction binding the contract method 0x4870496f. -// -// Solidity: function proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx, uint256 _l2OutputIndex, (bytes32,bytes32,bytes32,bytes32) _outputRootProof, bytes[] _withdrawalProof) returns() -func (_OptimismPortal *OptimismPortalTransactor) ProveWithdrawalTransaction(opts *bind.TransactOpts, _tx TypesWithdrawalTransaction, _l2OutputIndex *big.Int, _outputRootProof TypesOutputRootProof, _withdrawalProof [][]byte) (*types.Transaction, error) { - return _OptimismPortal.contract.Transact(opts, "proveWithdrawalTransaction", _tx, _l2OutputIndex, _outputRootProof, _withdrawalProof) -} - -// ProveWithdrawalTransaction is a paid mutator transaction binding the contract method 0x4870496f. -// -// Solidity: function proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx, uint256 _l2OutputIndex, (bytes32,bytes32,bytes32,bytes32) _outputRootProof, bytes[] _withdrawalProof) returns() -func (_OptimismPortal *OptimismPortalSession) ProveWithdrawalTransaction(_tx TypesWithdrawalTransaction, _l2OutputIndex *big.Int, _outputRootProof TypesOutputRootProof, _withdrawalProof [][]byte) (*types.Transaction, error) { - return _OptimismPortal.Contract.ProveWithdrawalTransaction(&_OptimismPortal.TransactOpts, _tx, _l2OutputIndex, _outputRootProof, _withdrawalProof) -} - -// ProveWithdrawalTransaction is a paid mutator transaction binding the contract method 0x4870496f. -// -// Solidity: function proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx, uint256 _l2OutputIndex, (bytes32,bytes32,bytes32,bytes32) _outputRootProof, bytes[] _withdrawalProof) returns() -func (_OptimismPortal *OptimismPortalTransactorSession) ProveWithdrawalTransaction(_tx TypesWithdrawalTransaction, _l2OutputIndex *big.Int, _outputRootProof TypesOutputRootProof, _withdrawalProof [][]byte) (*types.Transaction, error) { - return _OptimismPortal.Contract.ProveWithdrawalTransaction(&_OptimismPortal.TransactOpts, _tx, _l2OutputIndex, _outputRootProof, _withdrawalProof) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_OptimismPortal *OptimismPortalTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { - return _OptimismPortal.contract.RawTransact(opts, nil) // calldata is disallowed for receive function -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_OptimismPortal *OptimismPortalSession) Receive() (*types.Transaction, error) { - return _OptimismPortal.Contract.Receive(&_OptimismPortal.TransactOpts) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_OptimismPortal *OptimismPortalTransactorSession) Receive() (*types.Transaction, error) { - return _OptimismPortal.Contract.Receive(&_OptimismPortal.TransactOpts) -} - -// OptimismPortalInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the OptimismPortal contract. -type OptimismPortalInitializedIterator struct { - Event *OptimismPortalInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *OptimismPortalInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(OptimismPortalInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(OptimismPortalInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *OptimismPortalInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *OptimismPortalInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// OptimismPortalInitialized represents a Initialized event raised by the OptimismPortal contract. -type OptimismPortalInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_OptimismPortal *OptimismPortalFilterer) FilterInitialized(opts *bind.FilterOpts) (*OptimismPortalInitializedIterator, error) { - - logs, sub, err := _OptimismPortal.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &OptimismPortalInitializedIterator{contract: _OptimismPortal.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_OptimismPortal *OptimismPortalFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *OptimismPortalInitialized) (event.Subscription, error) { - - logs, sub, err := _OptimismPortal.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(OptimismPortalInitialized) - if err := _OptimismPortal.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_OptimismPortal *OptimismPortalFilterer) ParseInitialized(log types.Log) (*OptimismPortalInitialized, error) { - event := new(OptimismPortalInitialized) - if err := _OptimismPortal.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// OptimismPortalTransactionDepositedIterator is returned from FilterTransactionDeposited and is used to iterate over the raw logs and unpacked data for TransactionDeposited events raised by the OptimismPortal contract. -type OptimismPortalTransactionDepositedIterator struct { - Event *OptimismPortalTransactionDeposited // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *OptimismPortalTransactionDepositedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(OptimismPortalTransactionDeposited) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(OptimismPortalTransactionDeposited) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *OptimismPortalTransactionDepositedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *OptimismPortalTransactionDepositedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// OptimismPortalTransactionDeposited represents a TransactionDeposited event raised by the OptimismPortal contract. -type OptimismPortalTransactionDeposited struct { - From common.Address - To common.Address - Version *big.Int - OpaqueData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterTransactionDeposited is a free log retrieval operation binding the contract event 0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32. -// -// Solidity: event TransactionDeposited(address indexed from, address indexed to, uint256 indexed version, bytes opaqueData) -func (_OptimismPortal *OptimismPortalFilterer) FilterTransactionDeposited(opts *bind.FilterOpts, from []common.Address, to []common.Address, version []*big.Int) (*OptimismPortalTransactionDepositedIterator, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - var versionRule []interface{} - for _, versionItem := range version { - versionRule = append(versionRule, versionItem) - } - - logs, sub, err := _OptimismPortal.contract.FilterLogs(opts, "TransactionDeposited", fromRule, toRule, versionRule) - if err != nil { - return nil, err - } - return &OptimismPortalTransactionDepositedIterator{contract: _OptimismPortal.contract, event: "TransactionDeposited", logs: logs, sub: sub}, nil -} - -// WatchTransactionDeposited is a free log subscription operation binding the contract event 0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32. -// -// Solidity: event TransactionDeposited(address indexed from, address indexed to, uint256 indexed version, bytes opaqueData) -func (_OptimismPortal *OptimismPortalFilterer) WatchTransactionDeposited(opts *bind.WatchOpts, sink chan<- *OptimismPortalTransactionDeposited, from []common.Address, to []common.Address, version []*big.Int) (event.Subscription, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - var versionRule []interface{} - for _, versionItem := range version { - versionRule = append(versionRule, versionItem) - } - - logs, sub, err := _OptimismPortal.contract.WatchLogs(opts, "TransactionDeposited", fromRule, toRule, versionRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(OptimismPortalTransactionDeposited) - if err := _OptimismPortal.contract.UnpackLog(event, "TransactionDeposited", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseTransactionDeposited is a log parse operation binding the contract event 0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32. -// -// Solidity: event TransactionDeposited(address indexed from, address indexed to, uint256 indexed version, bytes opaqueData) -func (_OptimismPortal *OptimismPortalFilterer) ParseTransactionDeposited(log types.Log) (*OptimismPortalTransactionDeposited, error) { - event := new(OptimismPortalTransactionDeposited) - if err := _OptimismPortal.contract.UnpackLog(event, "TransactionDeposited", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// OptimismPortalWithdrawalFinalizedIterator is returned from FilterWithdrawalFinalized and is used to iterate over the raw logs and unpacked data for WithdrawalFinalized events raised by the OptimismPortal contract. -type OptimismPortalWithdrawalFinalizedIterator struct { - Event *OptimismPortalWithdrawalFinalized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *OptimismPortalWithdrawalFinalizedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(OptimismPortalWithdrawalFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(OptimismPortalWithdrawalFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *OptimismPortalWithdrawalFinalizedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *OptimismPortalWithdrawalFinalizedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// OptimismPortalWithdrawalFinalized represents a WithdrawalFinalized event raised by the OptimismPortal contract. -type OptimismPortalWithdrawalFinalized struct { - WithdrawalHash [32]byte - Success bool - Raw types.Log // Blockchain specific contextual infos -} - -// FilterWithdrawalFinalized is a free log retrieval operation binding the contract event 0xdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b. -// -// Solidity: event WithdrawalFinalized(bytes32 indexed withdrawalHash, bool success) -func (_OptimismPortal *OptimismPortalFilterer) FilterWithdrawalFinalized(opts *bind.FilterOpts, withdrawalHash [][32]byte) (*OptimismPortalWithdrawalFinalizedIterator, error) { - - var withdrawalHashRule []interface{} - for _, withdrawalHashItem := range withdrawalHash { - withdrawalHashRule = append(withdrawalHashRule, withdrawalHashItem) - } - - logs, sub, err := _OptimismPortal.contract.FilterLogs(opts, "WithdrawalFinalized", withdrawalHashRule) - if err != nil { - return nil, err - } - return &OptimismPortalWithdrawalFinalizedIterator{contract: _OptimismPortal.contract, event: "WithdrawalFinalized", logs: logs, sub: sub}, nil -} - -// WatchWithdrawalFinalized is a free log subscription operation binding the contract event 0xdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b. -// -// Solidity: event WithdrawalFinalized(bytes32 indexed withdrawalHash, bool success) -func (_OptimismPortal *OptimismPortalFilterer) WatchWithdrawalFinalized(opts *bind.WatchOpts, sink chan<- *OptimismPortalWithdrawalFinalized, withdrawalHash [][32]byte) (event.Subscription, error) { - - var withdrawalHashRule []interface{} - for _, withdrawalHashItem := range withdrawalHash { - withdrawalHashRule = append(withdrawalHashRule, withdrawalHashItem) - } - - logs, sub, err := _OptimismPortal.contract.WatchLogs(opts, "WithdrawalFinalized", withdrawalHashRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(OptimismPortalWithdrawalFinalized) - if err := _OptimismPortal.contract.UnpackLog(event, "WithdrawalFinalized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseWithdrawalFinalized is a log parse operation binding the contract event 0xdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b. -// -// Solidity: event WithdrawalFinalized(bytes32 indexed withdrawalHash, bool success) -func (_OptimismPortal *OptimismPortalFilterer) ParseWithdrawalFinalized(log types.Log) (*OptimismPortalWithdrawalFinalized, error) { - event := new(OptimismPortalWithdrawalFinalized) - if err := _OptimismPortal.contract.UnpackLog(event, "WithdrawalFinalized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// OptimismPortalWithdrawalProvenIterator is returned from FilterWithdrawalProven and is used to iterate over the raw logs and unpacked data for WithdrawalProven events raised by the OptimismPortal contract. -type OptimismPortalWithdrawalProvenIterator struct { - Event *OptimismPortalWithdrawalProven // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *OptimismPortalWithdrawalProvenIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(OptimismPortalWithdrawalProven) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(OptimismPortalWithdrawalProven) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *OptimismPortalWithdrawalProvenIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *OptimismPortalWithdrawalProvenIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// OptimismPortalWithdrawalProven represents a WithdrawalProven event raised by the OptimismPortal contract. -type OptimismPortalWithdrawalProven struct { - WithdrawalHash [32]byte - From common.Address - To common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterWithdrawalProven is a free log retrieval operation binding the contract event 0x67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f62. -// -// Solidity: event WithdrawalProven(bytes32 indexed withdrawalHash, address indexed from, address indexed to) -func (_OptimismPortal *OptimismPortalFilterer) FilterWithdrawalProven(opts *bind.FilterOpts, withdrawalHash [][32]byte, from []common.Address, to []common.Address) (*OptimismPortalWithdrawalProvenIterator, error) { - - var withdrawalHashRule []interface{} - for _, withdrawalHashItem := range withdrawalHash { - withdrawalHashRule = append(withdrawalHashRule, withdrawalHashItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _OptimismPortal.contract.FilterLogs(opts, "WithdrawalProven", withdrawalHashRule, fromRule, toRule) - if err != nil { - return nil, err - } - return &OptimismPortalWithdrawalProvenIterator{contract: _OptimismPortal.contract, event: "WithdrawalProven", logs: logs, sub: sub}, nil -} - -// WatchWithdrawalProven is a free log subscription operation binding the contract event 0x67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f62. -// -// Solidity: event WithdrawalProven(bytes32 indexed withdrawalHash, address indexed from, address indexed to) -func (_OptimismPortal *OptimismPortalFilterer) WatchWithdrawalProven(opts *bind.WatchOpts, sink chan<- *OptimismPortalWithdrawalProven, withdrawalHash [][32]byte, from []common.Address, to []common.Address) (event.Subscription, error) { - - var withdrawalHashRule []interface{} - for _, withdrawalHashItem := range withdrawalHash { - withdrawalHashRule = append(withdrawalHashRule, withdrawalHashItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _OptimismPortal.contract.WatchLogs(opts, "WithdrawalProven", withdrawalHashRule, fromRule, toRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(OptimismPortalWithdrawalProven) - if err := _OptimismPortal.contract.UnpackLog(event, "WithdrawalProven", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseWithdrawalProven is a log parse operation binding the contract event 0x67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f62. -// -// Solidity: event WithdrawalProven(bytes32 indexed withdrawalHash, address indexed from, address indexed to) -func (_OptimismPortal *OptimismPortalFilterer) ParseWithdrawalProven(log types.Log) (*OptimismPortalWithdrawalProven, error) { - event := new(OptimismPortalWithdrawalProven) - if err := _OptimismPortal.contract.UnpackLog(event, "WithdrawalProven", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/indexer/bindings/standardbridge.go b/indexer/bindings/standardbridge.go deleted file mode 100644 index eb5866bb7254..000000000000 --- a/indexer/bindings/standardbridge.go +++ /dev/null @@ -1,1287 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindings - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// StandardBridgeMetaData contains all meta data concerning the StandardBridge contract. -var StandardBridgeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false}]", -} - -// StandardBridgeABI is the input ABI used to generate the binding from. -// Deprecated: Use StandardBridgeMetaData.ABI instead. -var StandardBridgeABI = StandardBridgeMetaData.ABI - -// StandardBridge is an auto generated Go binding around an Ethereum contract. -type StandardBridge struct { - StandardBridgeCaller // Read-only binding to the contract - StandardBridgeTransactor // Write-only binding to the contract - StandardBridgeFilterer // Log filterer for contract events -} - -// StandardBridgeCaller is an auto generated read-only Go binding around an Ethereum contract. -type StandardBridgeCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// StandardBridgeTransactor is an auto generated write-only Go binding around an Ethereum contract. -type StandardBridgeTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// StandardBridgeFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type StandardBridgeFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// StandardBridgeSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type StandardBridgeSession struct { - Contract *StandardBridge // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// StandardBridgeCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type StandardBridgeCallerSession struct { - Contract *StandardBridgeCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// StandardBridgeTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type StandardBridgeTransactorSession struct { - Contract *StandardBridgeTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// StandardBridgeRaw is an auto generated low-level Go binding around an Ethereum contract. -type StandardBridgeRaw struct { - Contract *StandardBridge // Generic contract binding to access the raw methods on -} - -// StandardBridgeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type StandardBridgeCallerRaw struct { - Contract *StandardBridgeCaller // Generic read-only contract binding to access the raw methods on -} - -// StandardBridgeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type StandardBridgeTransactorRaw struct { - Contract *StandardBridgeTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewStandardBridge creates a new instance of StandardBridge, bound to a specific deployed contract. -func NewStandardBridge(address common.Address, backend bind.ContractBackend) (*StandardBridge, error) { - contract, err := bindStandardBridge(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &StandardBridge{StandardBridgeCaller: StandardBridgeCaller{contract: contract}, StandardBridgeTransactor: StandardBridgeTransactor{contract: contract}, StandardBridgeFilterer: StandardBridgeFilterer{contract: contract}}, nil -} - -// NewStandardBridgeCaller creates a new read-only instance of StandardBridge, bound to a specific deployed contract. -func NewStandardBridgeCaller(address common.Address, caller bind.ContractCaller) (*StandardBridgeCaller, error) { - contract, err := bindStandardBridge(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &StandardBridgeCaller{contract: contract}, nil -} - -// NewStandardBridgeTransactor creates a new write-only instance of StandardBridge, bound to a specific deployed contract. -func NewStandardBridgeTransactor(address common.Address, transactor bind.ContractTransactor) (*StandardBridgeTransactor, error) { - contract, err := bindStandardBridge(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &StandardBridgeTransactor{contract: contract}, nil -} - -// NewStandardBridgeFilterer creates a new log filterer instance of StandardBridge, bound to a specific deployed contract. -func NewStandardBridgeFilterer(address common.Address, filterer bind.ContractFilterer) (*StandardBridgeFilterer, error) { - contract, err := bindStandardBridge(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &StandardBridgeFilterer{contract: contract}, nil -} - -// bindStandardBridge binds a generic wrapper to an already deployed contract. -func bindStandardBridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(StandardBridgeABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_StandardBridge *StandardBridgeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _StandardBridge.Contract.StandardBridgeCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_StandardBridge *StandardBridgeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _StandardBridge.Contract.StandardBridgeTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_StandardBridge *StandardBridgeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _StandardBridge.Contract.StandardBridgeTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_StandardBridge *StandardBridgeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _StandardBridge.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_StandardBridge *StandardBridgeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _StandardBridge.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_StandardBridge *StandardBridgeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _StandardBridge.Contract.contract.Transact(opts, method, params...) -} - -// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. -// -// Solidity: function MESSENGER() view returns(address) -func (_StandardBridge *StandardBridgeCaller) MESSENGER(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StandardBridge.contract.Call(opts, &out, "MESSENGER") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. -// -// Solidity: function MESSENGER() view returns(address) -func (_StandardBridge *StandardBridgeSession) MESSENGER() (common.Address, error) { - return _StandardBridge.Contract.MESSENGER(&_StandardBridge.CallOpts) -} - -// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. -// -// Solidity: function MESSENGER() view returns(address) -func (_StandardBridge *StandardBridgeCallerSession) MESSENGER() (common.Address, error) { - return _StandardBridge.Contract.MESSENGER(&_StandardBridge.CallOpts) -} - -// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. -// -// Solidity: function OTHER_BRIDGE() view returns(address) -func (_StandardBridge *StandardBridgeCaller) OTHERBRIDGE(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StandardBridge.contract.Call(opts, &out, "OTHER_BRIDGE") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. -// -// Solidity: function OTHER_BRIDGE() view returns(address) -func (_StandardBridge *StandardBridgeSession) OTHERBRIDGE() (common.Address, error) { - return _StandardBridge.Contract.OTHERBRIDGE(&_StandardBridge.CallOpts) -} - -// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. -// -// Solidity: function OTHER_BRIDGE() view returns(address) -func (_StandardBridge *StandardBridgeCallerSession) OTHERBRIDGE() (common.Address, error) { - return _StandardBridge.Contract.OTHERBRIDGE(&_StandardBridge.CallOpts) -} - -// Deposits is a free data retrieval call binding the contract method 0x8f601f66. -// -// Solidity: function deposits(address , address ) view returns(uint256) -func (_StandardBridge *StandardBridgeCaller) Deposits(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { - var out []interface{} - err := _StandardBridge.contract.Call(opts, &out, "deposits", arg0, arg1) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// Deposits is a free data retrieval call binding the contract method 0x8f601f66. -// -// Solidity: function deposits(address , address ) view returns(uint256) -func (_StandardBridge *StandardBridgeSession) Deposits(arg0 common.Address, arg1 common.Address) (*big.Int, error) { - return _StandardBridge.Contract.Deposits(&_StandardBridge.CallOpts, arg0, arg1) -} - -// Deposits is a free data retrieval call binding the contract method 0x8f601f66. -// -// Solidity: function deposits(address , address ) view returns(uint256) -func (_StandardBridge *StandardBridgeCallerSession) Deposits(arg0 common.Address, arg1 common.Address) (*big.Int, error) { - return _StandardBridge.Contract.Deposits(&_StandardBridge.CallOpts, arg0, arg1) -} - -// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. -// -// Solidity: function messenger() view returns(address) -func (_StandardBridge *StandardBridgeCaller) Messenger(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StandardBridge.contract.Call(opts, &out, "messenger") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. -// -// Solidity: function messenger() view returns(address) -func (_StandardBridge *StandardBridgeSession) Messenger() (common.Address, error) { - return _StandardBridge.Contract.Messenger(&_StandardBridge.CallOpts) -} - -// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. -// -// Solidity: function messenger() view returns(address) -func (_StandardBridge *StandardBridgeCallerSession) Messenger() (common.Address, error) { - return _StandardBridge.Contract.Messenger(&_StandardBridge.CallOpts) -} - -// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. -// -// Solidity: function otherBridge() view returns(address) -func (_StandardBridge *StandardBridgeCaller) OtherBridge(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StandardBridge.contract.Call(opts, &out, "otherBridge") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. -// -// Solidity: function otherBridge() view returns(address) -func (_StandardBridge *StandardBridgeSession) OtherBridge() (common.Address, error) { - return _StandardBridge.Contract.OtherBridge(&_StandardBridge.CallOpts) -} - -// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. -// -// Solidity: function otherBridge() view returns(address) -func (_StandardBridge *StandardBridgeCallerSession) OtherBridge() (common.Address, error) { - return _StandardBridge.Contract.OtherBridge(&_StandardBridge.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_StandardBridge *StandardBridgeCaller) Paused(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _StandardBridge.contract.Call(opts, &out, "paused") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_StandardBridge *StandardBridgeSession) Paused() (bool, error) { - return _StandardBridge.Contract.Paused(&_StandardBridge.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_StandardBridge *StandardBridgeCallerSession) Paused() (bool, error) { - return _StandardBridge.Contract.Paused(&_StandardBridge.CallOpts) -} - -// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. -// -// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_StandardBridge *StandardBridgeTransactor) BridgeERC20(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _StandardBridge.contract.Transact(opts, "bridgeERC20", _localToken, _remoteToken, _amount, _minGasLimit, _extraData) -} - -// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. -// -// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_StandardBridge *StandardBridgeSession) BridgeERC20(_localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _StandardBridge.Contract.BridgeERC20(&_StandardBridge.TransactOpts, _localToken, _remoteToken, _amount, _minGasLimit, _extraData) -} - -// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. -// -// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_StandardBridge *StandardBridgeTransactorSession) BridgeERC20(_localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _StandardBridge.Contract.BridgeERC20(&_StandardBridge.TransactOpts, _localToken, _remoteToken, _amount, _minGasLimit, _extraData) -} - -// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. -// -// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_StandardBridge *StandardBridgeTransactor) BridgeERC20To(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _StandardBridge.contract.Transact(opts, "bridgeERC20To", _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) -} - -// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. -// -// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_StandardBridge *StandardBridgeSession) BridgeERC20To(_localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _StandardBridge.Contract.BridgeERC20To(&_StandardBridge.TransactOpts, _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) -} - -// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. -// -// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() -func (_StandardBridge *StandardBridgeTransactorSession) BridgeERC20To(_localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _StandardBridge.Contract.BridgeERC20To(&_StandardBridge.TransactOpts, _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) -} - -// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. -// -// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() -func (_StandardBridge *StandardBridgeTransactor) BridgeETH(opts *bind.TransactOpts, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _StandardBridge.contract.Transact(opts, "bridgeETH", _minGasLimit, _extraData) -} - -// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. -// -// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() -func (_StandardBridge *StandardBridgeSession) BridgeETH(_minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _StandardBridge.Contract.BridgeETH(&_StandardBridge.TransactOpts, _minGasLimit, _extraData) -} - -// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. -// -// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() -func (_StandardBridge *StandardBridgeTransactorSession) BridgeETH(_minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _StandardBridge.Contract.BridgeETH(&_StandardBridge.TransactOpts, _minGasLimit, _extraData) -} - -// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. -// -// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_StandardBridge *StandardBridgeTransactor) BridgeETHTo(opts *bind.TransactOpts, _to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _StandardBridge.contract.Transact(opts, "bridgeETHTo", _to, _minGasLimit, _extraData) -} - -// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. -// -// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_StandardBridge *StandardBridgeSession) BridgeETHTo(_to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _StandardBridge.Contract.BridgeETHTo(&_StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) -} - -// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. -// -// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() -func (_StandardBridge *StandardBridgeTransactorSession) BridgeETHTo(_to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { - return _StandardBridge.Contract.BridgeETHTo(&_StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) -} - -// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. -// -// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() -func (_StandardBridge *StandardBridgeTransactor) FinalizeBridgeERC20(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _StandardBridge.contract.Transact(opts, "finalizeBridgeERC20", _localToken, _remoteToken, _from, _to, _amount, _extraData) -} - -// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. -// -// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() -func (_StandardBridge *StandardBridgeSession) FinalizeBridgeERC20(_localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _StandardBridge.Contract.FinalizeBridgeERC20(&_StandardBridge.TransactOpts, _localToken, _remoteToken, _from, _to, _amount, _extraData) -} - -// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. -// -// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() -func (_StandardBridge *StandardBridgeTransactorSession) FinalizeBridgeERC20(_localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _StandardBridge.Contract.FinalizeBridgeERC20(&_StandardBridge.TransactOpts, _localToken, _remoteToken, _from, _to, _amount, _extraData) -} - -// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. -// -// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() -func (_StandardBridge *StandardBridgeTransactor) FinalizeBridgeETH(opts *bind.TransactOpts, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _StandardBridge.contract.Transact(opts, "finalizeBridgeETH", _from, _to, _amount, _extraData) -} - -// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. -// -// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() -func (_StandardBridge *StandardBridgeSession) FinalizeBridgeETH(_from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _StandardBridge.Contract.FinalizeBridgeETH(&_StandardBridge.TransactOpts, _from, _to, _amount, _extraData) -} - -// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. -// -// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() -func (_StandardBridge *StandardBridgeTransactorSession) FinalizeBridgeETH(_from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { - return _StandardBridge.Contract.FinalizeBridgeETH(&_StandardBridge.TransactOpts, _from, _to, _amount, _extraData) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_StandardBridge *StandardBridgeTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { - return _StandardBridge.contract.RawTransact(opts, nil) // calldata is disallowed for receive function -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_StandardBridge *StandardBridgeSession) Receive() (*types.Transaction, error) { - return _StandardBridge.Contract.Receive(&_StandardBridge.TransactOpts) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_StandardBridge *StandardBridgeTransactorSession) Receive() (*types.Transaction, error) { - return _StandardBridge.Contract.Receive(&_StandardBridge.TransactOpts) -} - -// StandardBridgeERC20BridgeFinalizedIterator is returned from FilterERC20BridgeFinalized and is used to iterate over the raw logs and unpacked data for ERC20BridgeFinalized events raised by the StandardBridge contract. -type StandardBridgeERC20BridgeFinalizedIterator struct { - Event *StandardBridgeERC20BridgeFinalized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StandardBridgeERC20BridgeFinalizedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StandardBridgeERC20BridgeFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StandardBridgeERC20BridgeFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StandardBridgeERC20BridgeFinalizedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StandardBridgeERC20BridgeFinalizedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StandardBridgeERC20BridgeFinalized represents a ERC20BridgeFinalized event raised by the StandardBridge contract. -type StandardBridgeERC20BridgeFinalized struct { - LocalToken common.Address - RemoteToken common.Address - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterERC20BridgeFinalized is a free log retrieval operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. -// -// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_StandardBridge *StandardBridgeFilterer) FilterERC20BridgeFinalized(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address, from []common.Address) (*StandardBridgeERC20BridgeFinalizedIterator, error) { - - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _StandardBridge.contract.FilterLogs(opts, "ERC20BridgeFinalized", localTokenRule, remoteTokenRule, fromRule) - if err != nil { - return nil, err - } - return &StandardBridgeERC20BridgeFinalizedIterator{contract: _StandardBridge.contract, event: "ERC20BridgeFinalized", logs: logs, sub: sub}, nil -} - -// WatchERC20BridgeFinalized is a free log subscription operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. -// -// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_StandardBridge *StandardBridgeFilterer) WatchERC20BridgeFinalized(opts *bind.WatchOpts, sink chan<- *StandardBridgeERC20BridgeFinalized, localToken []common.Address, remoteToken []common.Address, from []common.Address) (event.Subscription, error) { - - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _StandardBridge.contract.WatchLogs(opts, "ERC20BridgeFinalized", localTokenRule, remoteTokenRule, fromRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StandardBridgeERC20BridgeFinalized) - if err := _StandardBridge.contract.UnpackLog(event, "ERC20BridgeFinalized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseERC20BridgeFinalized is a log parse operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. -// -// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_StandardBridge *StandardBridgeFilterer) ParseERC20BridgeFinalized(log types.Log) (*StandardBridgeERC20BridgeFinalized, error) { - event := new(StandardBridgeERC20BridgeFinalized) - if err := _StandardBridge.contract.UnpackLog(event, "ERC20BridgeFinalized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StandardBridgeERC20BridgeInitiatedIterator is returned from FilterERC20BridgeInitiated and is used to iterate over the raw logs and unpacked data for ERC20BridgeInitiated events raised by the StandardBridge contract. -type StandardBridgeERC20BridgeInitiatedIterator struct { - Event *StandardBridgeERC20BridgeInitiated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StandardBridgeERC20BridgeInitiatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StandardBridgeERC20BridgeInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StandardBridgeERC20BridgeInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StandardBridgeERC20BridgeInitiatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StandardBridgeERC20BridgeInitiatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StandardBridgeERC20BridgeInitiated represents a ERC20BridgeInitiated event raised by the StandardBridge contract. -type StandardBridgeERC20BridgeInitiated struct { - LocalToken common.Address - RemoteToken common.Address - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterERC20BridgeInitiated is a free log retrieval operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. -// -// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_StandardBridge *StandardBridgeFilterer) FilterERC20BridgeInitiated(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address, from []common.Address) (*StandardBridgeERC20BridgeInitiatedIterator, error) { - - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _StandardBridge.contract.FilterLogs(opts, "ERC20BridgeInitiated", localTokenRule, remoteTokenRule, fromRule) - if err != nil { - return nil, err - } - return &StandardBridgeERC20BridgeInitiatedIterator{contract: _StandardBridge.contract, event: "ERC20BridgeInitiated", logs: logs, sub: sub}, nil -} - -// WatchERC20BridgeInitiated is a free log subscription operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. -// -// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_StandardBridge *StandardBridgeFilterer) WatchERC20BridgeInitiated(opts *bind.WatchOpts, sink chan<- *StandardBridgeERC20BridgeInitiated, localToken []common.Address, remoteToken []common.Address, from []common.Address) (event.Subscription, error) { - - var localTokenRule []interface{} - for _, localTokenItem := range localToken { - localTokenRule = append(localTokenRule, localTokenItem) - } - var remoteTokenRule []interface{} - for _, remoteTokenItem := range remoteToken { - remoteTokenRule = append(remoteTokenRule, remoteTokenItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _StandardBridge.contract.WatchLogs(opts, "ERC20BridgeInitiated", localTokenRule, remoteTokenRule, fromRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StandardBridgeERC20BridgeInitiated) - if err := _StandardBridge.contract.UnpackLog(event, "ERC20BridgeInitiated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseERC20BridgeInitiated is a log parse operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. -// -// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) -func (_StandardBridge *StandardBridgeFilterer) ParseERC20BridgeInitiated(log types.Log) (*StandardBridgeERC20BridgeInitiated, error) { - event := new(StandardBridgeERC20BridgeInitiated) - if err := _StandardBridge.contract.UnpackLog(event, "ERC20BridgeInitiated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StandardBridgeETHBridgeFinalizedIterator is returned from FilterETHBridgeFinalized and is used to iterate over the raw logs and unpacked data for ETHBridgeFinalized events raised by the StandardBridge contract. -type StandardBridgeETHBridgeFinalizedIterator struct { - Event *StandardBridgeETHBridgeFinalized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StandardBridgeETHBridgeFinalizedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StandardBridgeETHBridgeFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StandardBridgeETHBridgeFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StandardBridgeETHBridgeFinalizedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StandardBridgeETHBridgeFinalizedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StandardBridgeETHBridgeFinalized represents a ETHBridgeFinalized event raised by the StandardBridge contract. -type StandardBridgeETHBridgeFinalized struct { - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterETHBridgeFinalized is a free log retrieval operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. -// -// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_StandardBridge *StandardBridgeFilterer) FilterETHBridgeFinalized(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*StandardBridgeETHBridgeFinalizedIterator, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _StandardBridge.contract.FilterLogs(opts, "ETHBridgeFinalized", fromRule, toRule) - if err != nil { - return nil, err - } - return &StandardBridgeETHBridgeFinalizedIterator{contract: _StandardBridge.contract, event: "ETHBridgeFinalized", logs: logs, sub: sub}, nil -} - -// WatchETHBridgeFinalized is a free log subscription operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. -// -// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_StandardBridge *StandardBridgeFilterer) WatchETHBridgeFinalized(opts *bind.WatchOpts, sink chan<- *StandardBridgeETHBridgeFinalized, from []common.Address, to []common.Address) (event.Subscription, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _StandardBridge.contract.WatchLogs(opts, "ETHBridgeFinalized", fromRule, toRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StandardBridgeETHBridgeFinalized) - if err := _StandardBridge.contract.UnpackLog(event, "ETHBridgeFinalized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseETHBridgeFinalized is a log parse operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. -// -// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_StandardBridge *StandardBridgeFilterer) ParseETHBridgeFinalized(log types.Log) (*StandardBridgeETHBridgeFinalized, error) { - event := new(StandardBridgeETHBridgeFinalized) - if err := _StandardBridge.contract.UnpackLog(event, "ETHBridgeFinalized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StandardBridgeETHBridgeInitiatedIterator is returned from FilterETHBridgeInitiated and is used to iterate over the raw logs and unpacked data for ETHBridgeInitiated events raised by the StandardBridge contract. -type StandardBridgeETHBridgeInitiatedIterator struct { - Event *StandardBridgeETHBridgeInitiated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StandardBridgeETHBridgeInitiatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StandardBridgeETHBridgeInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StandardBridgeETHBridgeInitiated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StandardBridgeETHBridgeInitiatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StandardBridgeETHBridgeInitiatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StandardBridgeETHBridgeInitiated represents a ETHBridgeInitiated event raised by the StandardBridge contract. -type StandardBridgeETHBridgeInitiated struct { - From common.Address - To common.Address - Amount *big.Int - ExtraData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterETHBridgeInitiated is a free log retrieval operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. -// -// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_StandardBridge *StandardBridgeFilterer) FilterETHBridgeInitiated(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*StandardBridgeETHBridgeInitiatedIterator, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _StandardBridge.contract.FilterLogs(opts, "ETHBridgeInitiated", fromRule, toRule) - if err != nil { - return nil, err - } - return &StandardBridgeETHBridgeInitiatedIterator{contract: _StandardBridge.contract, event: "ETHBridgeInitiated", logs: logs, sub: sub}, nil -} - -// WatchETHBridgeInitiated is a free log subscription operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. -// -// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_StandardBridge *StandardBridgeFilterer) WatchETHBridgeInitiated(opts *bind.WatchOpts, sink chan<- *StandardBridgeETHBridgeInitiated, from []common.Address, to []common.Address) (event.Subscription, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _StandardBridge.contract.WatchLogs(opts, "ETHBridgeInitiated", fromRule, toRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StandardBridgeETHBridgeInitiated) - if err := _StandardBridge.contract.UnpackLog(event, "ETHBridgeInitiated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseETHBridgeInitiated is a log parse operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. -// -// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_StandardBridge *StandardBridgeFilterer) ParseETHBridgeInitiated(log types.Log) (*StandardBridgeETHBridgeInitiated, error) { - event := new(StandardBridgeETHBridgeInitiated) - if err := _StandardBridge.contract.UnpackLog(event, "ETHBridgeInitiated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StandardBridgeInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the StandardBridge contract. -type StandardBridgeInitializedIterator struct { - Event *StandardBridgeInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StandardBridgeInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StandardBridgeInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StandardBridgeInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StandardBridgeInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StandardBridgeInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StandardBridgeInitialized represents a Initialized event raised by the StandardBridge contract. -type StandardBridgeInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_StandardBridge *StandardBridgeFilterer) FilterInitialized(opts *bind.FilterOpts) (*StandardBridgeInitializedIterator, error) { - - logs, sub, err := _StandardBridge.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &StandardBridgeInitializedIterator{contract: _StandardBridge.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_StandardBridge *StandardBridgeFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *StandardBridgeInitialized) (event.Subscription, error) { - - logs, sub, err := _StandardBridge.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StandardBridgeInitialized) - if err := _StandardBridge.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_StandardBridge *StandardBridgeFilterer) ParseInitialized(log types.Log) (*StandardBridgeInitialized, error) { - event := new(StandardBridgeInitialized) - if err := _StandardBridge.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/indexer/cmd/indexer/cli.go b/indexer/cmd/indexer/cli.go deleted file mode 100644 index 91b5798a61d9..000000000000 --- a/indexer/cmd/indexer/cli.go +++ /dev/null @@ -1,178 +0,0 @@ -package main - -import ( - "context" - "fmt" - "math/big" - - "github.com/urfave/cli/v2" - - "github.com/ethereum/go-ethereum/ethclient" - "github.com/ethereum/go-ethereum/params" - - "github.com/ethereum-optimism/optimism/indexer" - "github.com/ethereum-optimism/optimism/indexer/api" - "github.com/ethereum-optimism/optimism/indexer/config" - "github.com/ethereum-optimism/optimism/indexer/database" - "github.com/ethereum-optimism/optimism/op-service/cliapp" - oplog "github.com/ethereum-optimism/optimism/op-service/log" - "github.com/ethereum-optimism/optimism/op-service/opio" -) - -var ( - ConfigFlag = &cli.StringFlag{ - Name: "config", - Value: "./indexer.toml", - Aliases: []string{"c"}, - Usage: "path to config file", - EnvVars: []string{"INDEXER_CONFIG"}, - } - MigrationsFlag = &cli.StringFlag{ - Name: "migrations-dir", - Value: "./migrations", - Usage: "path to migrations folder", - EnvVars: []string{"INDEXER_MIGRATIONS_DIR"}, - } - ReorgFlag = &cli.Uint64Flag{ - Name: "l1-height", - Aliases: []string{"height"}, - Usage: `the lowest l1 height that has been reorg'd. All L1 data and derived L2 state will be deleted. Since not all L1 blocks are - indexed, this will find the maximum indexed height <= the marker, which may result in slightly more deleted state.`, - Required: true, - } -) - -func runIndexer(ctx *cli.Context, shutdown context.CancelCauseFunc) (cliapp.Lifecycle, error) { - log := oplog.NewLogger(oplog.AppOut(ctx), oplog.ReadCLIConfig(ctx)).New("role", "indexer") - oplog.SetGlobalLogHandler(log.Handler()) - log.Info("running indexer...") - - cfg, err := config.LoadConfig(log, ctx.String(ConfigFlag.Name)) - if err != nil { - log.Error("failed to load config", "err", err) - return nil, err - } - - return indexer.NewIndexer(ctx.Context, log, &cfg, shutdown) -} - -func runApi(ctx *cli.Context, _ context.CancelCauseFunc) (cliapp.Lifecycle, error) { - log := oplog.NewLogger(oplog.AppOut(ctx), oplog.ReadCLIConfig(ctx)).New("role", "api") - oplog.SetGlobalLogHandler(log.Handler()) - log.Info("running api...") - - cfg, err := config.LoadConfig(log, ctx.String(ConfigFlag.Name)) - if err != nil { - log.Error("failed to load config", "err", err) - return nil, err - } - - apiCfg := &api.Config{ - DB: &api.DBConfigConnector{DBConfig: cfg.DB}, - HTTPServer: cfg.HTTPServer, - MetricsServer: cfg.MetricsServer, - } - - return api.NewApi(ctx.Context, log, apiCfg) -} - -func runMigrations(ctx *cli.Context) error { - // We don't maintain a complicated lifecycle here, just interrupt to shut down. - ctx.Context = opio.CancelOnInterrupt(ctx.Context) - - log := oplog.NewLogger(oplog.AppOut(ctx), oplog.ReadCLIConfig(ctx)).New("role", "migrations") - oplog.SetGlobalLogHandler(log.Handler()) - log.Info("running migrations...") - - cfg, err := config.LoadConfig(log, ctx.String(ConfigFlag.Name)) - if err != nil { - log.Error("failed to load config", "err", err) - return err - } - - db, err := database.NewDB(ctx.Context, log, cfg.DB) - if err != nil { - log.Error("failed to connect to database", "err", err) - return err - } - defer db.Close() - - migrationsDir := ctx.String(MigrationsFlag.Name) - return db.ExecuteSQLMigration(migrationsDir) -} - -func runReorgDeletion(ctx *cli.Context) error { - fromL1Height := ctx.Uint64(ReorgFlag.Name) - - log := oplog.NewLogger(oplog.AppOut(ctx), oplog.ReadCLIConfig(ctx)).New("role", "reorg-deletion") - oplog.SetGlobalLogHandler(log.Handler()) - cfg, err := config.LoadConfig(log, ctx.String(ConfigFlag.Name)) - if err != nil { - return fmt.Errorf("failed to load config: %w", err) - } - - l1Clnt, err := ethclient.DialContext(ctx.Context, cfg.RPCs.L1RPC) - if err != nil { - return fmt.Errorf("failed to dial L1 client: %w", err) - } - l1Header, err := l1Clnt.HeaderByNumber(ctx.Context, big.NewInt(int64(fromL1Height))) - if err != nil { - return fmt.Errorf("failed to query L1 header at height: %w", err) - } else if l1Header == nil { - return fmt.Errorf("no header found at height") - } - - db, err := database.NewDB(ctx.Context, log, cfg.DB) - if err != nil { - return fmt.Errorf("failed to connect to database: %w", err) - } - - defer db.Close() - return db.Transaction(func(db *database.DB) error { - return db.Blocks.DeleteReorgedState(l1Header.Time) - }) -} - -func newCli(GitCommit string, GitDate string) *cli.App { - flags := append([]cli.Flag{ConfigFlag}, oplog.CLIFlags("INDEXER")...) - return &cli.App{ - Version: params.VersionWithCommit(GitCommit, GitDate), - Description: "An indexer of all optimism events with a serving api layer", - EnableBashCompletion: true, - Commands: []*cli.Command{ - { - Name: "api", - Flags: flags, - Description: "Runs the api service", - Action: cliapp.LifecycleCmd(runApi), - }, - { - Name: "index", - Flags: flags, - Description: "Runs the indexing service", - Action: cliapp.LifecycleCmd(runIndexer), - }, - { - Name: "migrate", - Flags: append(flags, MigrationsFlag), - Description: "Runs the database migrations", - Action: runMigrations, - }, - { - Name: "reorg-delete", - Aliases: []string{"reorg"}, - Flags: append(flags, ReorgFlag), - Description: "Deletes data that has been reorg'ed out of the canonical L1 chain", - Action: runReorgDeletion, - }, - { - Name: "version", - Description: "print version", - Action: func(ctx *cli.Context) error { - cli.ShowVersion(ctx) - return nil - }, - }, - }, - } -} diff --git a/indexer/cmd/indexer/main.go b/indexer/cmd/indexer/main.go deleted file mode 100644 index 341f10c4366b..000000000000 --- a/indexer/cmd/indexer/main.go +++ /dev/null @@ -1,27 +0,0 @@ -package main - -import ( - "context" - "os" - - "github.com/ethereum/go-ethereum/log" - - oplog "github.com/ethereum-optimism/optimism/op-service/log" - "github.com/ethereum-optimism/optimism/op-service/opio" -) - -var ( - GitCommit = "" - GitDate = "" -) - -func main() { - oplog.SetupDefaults() - app := newCli(GitCommit, GitDate) - // sub-commands set up their individual interrupt lifecycles, which can block on the given interrupt as needed. - ctx := opio.WithInterruptBlocker(context.Background()) - if err := app.RunContext(ctx, os.Args); err != nil { - log.Error("application failed", "err", err) - os.Exit(1) - } -} diff --git a/indexer/config/config.go b/indexer/config/config.go deleted file mode 100644 index 9524bb97164d..000000000000 --- a/indexer/config/config.go +++ /dev/null @@ -1,216 +0,0 @@ -package config - -import ( - "errors" - "fmt" - "os" - "reflect" - - "github.com/BurntSushi/toml" - "github.com/ethereum-optimism/optimism/op-service/predeploys" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/log" -) - -// In the future, presets can just be onchain system config with everything else -// fetched on initialization - -// Config represents the `indexer.toml` file used to configure the indexer -type Config struct { - Chain ChainConfig `toml:"chain"` - RPCs RPCsConfig `toml:"rpcs"` - DB DBConfig `toml:"db"` - HTTPServer ServerConfig `toml:"http"` - MetricsServer ServerConfig `toml:"metrics"` -} - -// L1Contracts configures deployed contracts -type L1Contracts struct { - // administrative - AddressManager common.Address `toml:"address-manager"` - SystemConfigProxy common.Address `toml:"system-config"` - - // rollup state - OptimismPortalProxy common.Address `toml:"optimism-portal"` - L2OutputOracleProxy common.Address `toml:"l2-output-oracle"` - DisputeGameFactoryProxy common.Address `toml:"dispute-game-factory"` - - // bridging - L1CrossDomainMessengerProxy common.Address `toml:"l1-cross-domain-messenger"` - L1StandardBridgeProxy common.Address `toml:"l1-standard-bridge"` - L1ERC721BridgeProxy common.Address `toml:"l1-erc721-bridge"` - - // IGNORE: legacy contracts (only settable via presets) - LegacyCanonicalTransactionChain common.Address `toml:"-"` - LegacyStateCommitmentChain common.Address `toml:"-"` -} - -func (c L1Contracts) ForEach(cb func(string, common.Address) error) error { - contracts := reflect.ValueOf(c) - fields := reflect.VisibleFields(reflect.TypeOf(c)) - for _, field := range fields { - // ruleid: unsafe-reflect-by-name - addr := (contracts.FieldByName(field.Name).Interface()).(common.Address) - if err := cb(field.Name, addr); err != nil { - return err - } - } - - return nil -} - -// L2Contracts configures core predeploy contracts. We explicitly specify -// fields until we can detect and backfill new addresses -type L2Contracts struct { - L2ToL1MessagePasser common.Address - L2CrossDomainMessenger common.Address - L2StandardBridge common.Address - L2ERC721Bridge common.Address -} - -func L2ContractsFromPredeploys() L2Contracts { - return L2Contracts{ - L2ToL1MessagePasser: predeploys.L2ToL1MessagePasserAddr, - L2CrossDomainMessenger: predeploys.L2CrossDomainMessengerAddr, - L2StandardBridge: predeploys.L2StandardBridgeAddr, - L2ERC721Bridge: predeploys.L2ERC721BridgeAddr, - } -} - -func (c L2Contracts) ForEach(cb func(string, common.Address) error) error { - contracts := reflect.ValueOf(c) - fields := reflect.VisibleFields(reflect.TypeOf(c)) - for _, field := range fields { - // ruleid: unsafe-reflect-by-name - addr := (contracts.FieldByName(field.Name).Interface()).(common.Address) - if err := cb(field.Name, addr); err != nil { - return err - } - } - - return nil -} - -// ChainConfig configures of the chain being indexed -type ChainConfig struct { - // Configure known chains with the l2 chain id - Preset int - L1StartingHeight uint `toml:"l1-starting-height"` - - L1Contracts L1Contracts `toml:"l1-contracts"` - L2Contracts L2Contracts `toml:"-"` - - // Bedrock starting heights only applicable for OP-Mainnet - L1BedrockStartingHeight uint `toml:"-"` - L2BedrockStartingHeight uint `toml:"-"` - - // These configuration options will be removed once - // native reorg handling is implemented - L1ConfirmationDepth uint `toml:"l1-confirmation-depth"` - L2ConfirmationDepth uint `toml:"l2-confirmation-depth"` - - L1PollingInterval uint `toml:"l1-polling-interval"` - L2PollingInterval uint `toml:"l2-polling-interval"` - - L1HeaderBufferSize uint `toml:"l1-header-buffer-size"` - L2HeaderBufferSize uint `toml:"l2-header-buffer-size"` - - // Inactivity allowed before a block is indexed by the ETL. Default 0 value disables this feature - ETLAllowedInactivityWindowSeconds uint `toml:"etl-allowed-inactivity-window-seconds"` -} - -// RPCsConfig configures the RPC urls -type RPCsConfig struct { - L1RPC string `toml:"l1-rpc"` - L2RPC string `toml:"l2-rpc"` -} - -// DBConfig configures the postgres database -type DBConfig struct { - Host string `toml:"host"` - Port int `toml:"port"` - Name string `toml:"name"` - User string `toml:"user"` - Password string `toml:"password"` -} - -// Configures the server -type ServerConfig struct { - Host string `toml:"host"` - Port int `toml:"port"` - WriteTimeout int `toml:"timeout"` -} - -// LoadConfig loads the `indexer.toml` config file from a given path -func LoadConfig(log log.Logger, path string) (Config, error) { - log.Debug("loading config", "path", path) - - var cfg Config - data, err := os.ReadFile(path) - if err != nil { - return cfg, err - } - - data = []byte(os.ExpandEnv(string(data))) - log.Debug("parsed config file", "data", string(data)) - - md, err := toml.Decode(string(data), &cfg) - if err != nil { - log.Error("failed to decode config file", "err", err) - return cfg, err - } - - if len(md.Undecoded()) > 0 { - log.Error("unknown fields in config file", "fields", md.Undecoded()) - err = fmt.Errorf("unknown fields in config file: %v", md.Undecoded()) - return cfg, err - } - - if cfg.Chain.Preset == DevnetPresetId { - preset, err := DevnetPreset() - if err != nil { - return cfg, err - } - - log.Info("detected preset", "preset", DevnetPresetId, "name", preset.Name) - cfg.Chain = preset.ChainConfig - } else if cfg.Chain.Preset != 0 { - preset, ok := Presets[cfg.Chain.Preset] - if !ok { - return cfg, fmt.Errorf("unknown preset: %d", cfg.Chain.Preset) - } - - log.Info("detected preset", "preset", cfg.Chain.Preset, "name", preset.Name) - cfg.Chain = preset.ChainConfig - } - - // Setup L2Contracts from predeploys - cfg.Chain.L2Contracts = L2ContractsFromPredeploys() - - // Deserialize the config file again when a preset is configured such that - // precedence is given to the config file vs the preset - if cfg.Chain.Preset > 0 { - if _, err := toml.Decode(string(data), &cfg); err != nil { - log.Error("failed to decode config file", "err", err) - return cfg, err - } - } - - // Check to make sure some required properties are set - var errs error - if cfg.Chain.L1PollingInterval == 0 { - errs = errors.Join(err, errors.New("`l1-polling-interval` unset")) - } - if cfg.Chain.L2PollingInterval == 0 { - errs = errors.Join(err, errors.New("`l2-polling-interval` unset")) - } - if cfg.Chain.L1HeaderBufferSize == 0 { - errs = errors.Join(err, errors.New("`l1-header-buffer-size` unset")) - } - if cfg.Chain.L2HeaderBufferSize == 0 { - errs = errors.Join(err, errors.New("`l2-header-buffer-size` unset")) - } - - log.Info("loaded chain config", "config", cfg.Chain) - return cfg, errs -} diff --git a/indexer/config/config_test.go b/indexer/config/config_test.go deleted file mode 100644 index 17da2a427dbf..000000000000 --- a/indexer/config/config_test.go +++ /dev/null @@ -1,323 +0,0 @@ -package config - -import ( - "fmt" - "os" - "testing" - - "github.com/ethereum-optimism/optimism/op-service/testlog" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/log" - "github.com/stretchr/testify/require" -) - -func TestLoadConfig(t *testing.T) { - logger := testlog.Logger(t, log.LevelInfo) - tmpfile, err := os.CreateTemp("", "test.toml") - require.NoError(t, err) - defer os.Remove(tmpfile.Name()) - defer tmpfile.Close() - - testData := ` - [chain] - preset = 10 - - l1-polling-interval = 5000 - l2-polling-interval = 5000 - l1-header-buffer-size = 1000 - l2-header-buffer-size = 1000 - - [rpcs] - l1-rpc = "https://l1.example.com" - l2-rpc = "https://l2.example.com" - - [db] - host = "127.0.0.1" - port = 5432 - user = "postgres" - password = "postgres" - name = "indexer" - - [http] - host = "127.0.0.1" - port = 8080 - - [metrics] - host = "127.0.0.1" - port = 7300 - ` - - data := []byte(testData) - err = os.WriteFile(tmpfile.Name(), data, 0644) - require.NoError(t, err) - defer os.Remove(tmpfile.Name()) - - err = tmpfile.Close() - require.NoError(t, err) - - conf, err := LoadConfig(logger, tmpfile.Name()) - require.NoError(t, err) - - require.Equal(t, conf.Chain.Preset, 10) - require.Equal(t, conf.Chain.L1Contracts.OptimismPortalProxy.String(), Presets[10].ChainConfig.L1Contracts.OptimismPortalProxy.String()) - require.Equal(t, conf.Chain.L1Contracts.L1CrossDomainMessengerProxy.String(), Presets[10].ChainConfig.L1Contracts.L1CrossDomainMessengerProxy.String()) - require.Equal(t, conf.Chain.L1Contracts.L1StandardBridgeProxy.String(), Presets[10].ChainConfig.L1Contracts.L1StandardBridgeProxy.String()) - require.Equal(t, conf.Chain.L1Contracts.L2OutputOracleProxy.String(), Presets[10].ChainConfig.L1Contracts.L2OutputOracleProxy.String()) - require.Equal(t, conf.Chain.L1PollingInterval, uint(5000)) - require.Equal(t, conf.Chain.L1HeaderBufferSize, uint(1000)) - require.Equal(t, conf.Chain.L2PollingInterval, uint(5000)) - require.Equal(t, conf.Chain.L2HeaderBufferSize, uint(1000)) - require.Equal(t, conf.RPCs.L1RPC, "https://l1.example.com") - require.Equal(t, conf.RPCs.L2RPC, "https://l2.example.com") - require.Equal(t, conf.DB.Host, "127.0.0.1") - require.Equal(t, conf.DB.Port, 5432) - require.Equal(t, conf.DB.User, "postgres") - require.Equal(t, conf.DB.Password, "postgres") - require.Equal(t, conf.DB.Name, "indexer") - require.Equal(t, conf.HTTPServer.Host, "127.0.0.1") - require.Equal(t, conf.HTTPServer.Port, 8080) - require.Equal(t, conf.MetricsServer.Host, "127.0.0.1") - require.Equal(t, conf.MetricsServer.Port, 7300) -} - -func TestLoadConfigWithoutPreset(t *testing.T) { - tmpfile, err := os.CreateTemp("", "test_without_preset.toml") - require.NoError(t, err) - defer os.Remove(tmpfile.Name()) - defer tmpfile.Close() - - testData := ` - [chain] - l1-polling-interval = 5000 - l2-polling-interval = 5000 - l1-header-buffer-size = 1000 - l2-header-buffer-size = 1000 - - [chain.l1-contracts] - optimism-portal = "0x4205Fc579115071764c7423A4f12eDde41f106Ed" - l2-output-oracle = "0x42097868233d1aa22e815a266982f2cf17685a27" - l1-cross-domain-messenger = "0x420ce71c97B33Cc4729CF772ae268934F7ab5fA1" - l1-standard-bridge = "0x4209fc46f92E8a1c0deC1b1747d010903E884bE1" - dispute-game-factory = "0x4209fc46f92E8a1c0deC1b1747d010903E884bE1" - - [rpcs] - l1-rpc = "https://l1.example.com" - l2-rpc = "https://l2.example.com" - ` - - data := []byte(testData) - err = os.WriteFile(tmpfile.Name(), data, 0644) - require.NoError(t, err) - defer os.Remove(tmpfile.Name()) - - err = tmpfile.Close() - require.NoError(t, err) - - logger := testlog.Logger(t, log.LevelInfo) - conf, err := LoadConfig(logger, tmpfile.Name()) - require.NoError(t, err) - - require.Equal(t, conf.Chain.L1Contracts.OptimismPortalProxy.String(), common.HexToAddress("0x4205Fc579115071764c7423A4f12eDde41f106Ed").String()) - require.Equal(t, conf.Chain.L1Contracts.L2OutputOracleProxy.String(), common.HexToAddress("0x42097868233d1aa22e815a266982f2cf17685a27").String()) - require.Equal(t, conf.Chain.L1Contracts.L1CrossDomainMessengerProxy.String(), common.HexToAddress("0x420ce71c97B33Cc4729CF772ae268934F7ab5fA1").String()) - require.Equal(t, conf.Chain.L1Contracts.L1StandardBridgeProxy.String(), common.HexToAddress("0x4209fc46f92E8a1c0deC1b1747d010903E884bE1").String()) - require.Equal(t, conf.Chain.Preset, 0) -} - -func TestLoadConfigWithUnknownPreset(t *testing.T) { - tmpfile, err := os.CreateTemp("", "test_bad_preset.toml") - require.NoError(t, err) - defer os.Remove(tmpfile.Name()) - defer tmpfile.Close() - - testData := ` - [chain] - preset = 1234567890 # this preset doesn't exist - - [rpcs] - l1-rpc = "https://l1.example.com" - l2-rpc = "https://l2.example.com" - ` - - data := []byte(testData) - err = os.WriteFile(tmpfile.Name(), data, 0644) - require.NoError(t, err) - defer os.Remove(tmpfile.Name()) - - err = tmpfile.Close() - require.NoError(t, err) - - logger := testlog.Logger(t, log.LevelInfo) - conf, err := LoadConfig(logger, tmpfile.Name()) - require.Error(t, err) - - var faultyPreset = 1234567890 - require.Equal(t, conf.Chain.Preset, faultyPreset) - require.Error(t, err) - require.Equal(t, fmt.Sprintf("unknown preset: %d", faultyPreset), err.Error()) -} - -func TestLoadConfigPollingValues(t *testing.T) { - tmpfile, err := os.CreateTemp("", "test_user_values.toml") - require.NoError(t, err) - defer os.Remove(tmpfile.Name()) - defer tmpfile.Close() - - testData := ` - [chain] - l1-polling-interval = 1000 - l2-polling-interval = 1005 - l1-header-buffer-size = 100 - l2-header-buffer-size = 105 - ` - - data := []byte(testData) - err = os.WriteFile(tmpfile.Name(), data, 0644) - require.NoError(t, err) - defer os.Remove(tmpfile.Name()) - - err = tmpfile.Close() - require.NoError(t, err) - - logger := testlog.Logger(t, log.LevelInfo) - conf, err := LoadConfig(logger, tmpfile.Name()) - require.NoError(t, err) - - require.Equal(t, conf.Chain.L1PollingInterval, uint(1000)) - require.Equal(t, conf.Chain.L2PollingInterval, uint(1005)) - require.Equal(t, conf.Chain.L1HeaderBufferSize, uint(100)) - require.Equal(t, conf.Chain.L2HeaderBufferSize, uint(105)) -} - -func TestLoadedConfigPresetPrecendence(t *testing.T) { - tmpfile, err := os.CreateTemp("", "test_bad_preset.toml") - require.NoError(t, err) - defer os.Remove(tmpfile.Name()) - defer tmpfile.Close() - - testData := ` - [chain] - preset = 10 # Optimism Mainnet - - l1-polling-interval = 1000 - l2-polling-interval = 1000 - l1-header-buffer-size = 100 - l2-header-buffer-size = 100 - - # confirmation depths are explicitly set - l1-confirmation-depth = 50 - l2-confirmation-depth = 100 - - # override a contract address - [chain.l1-contracts] - optimism-portal = "0x0000000000000000000000000000000000000001" - - [rpcs] - l1-rpc = "https://l1.example.com" - l2-rpc = "https://l2.example.com" - ` - - data := []byte(testData) - err = os.WriteFile(tmpfile.Name(), data, 0644) - require.NoError(t, err) - defer os.Remove(tmpfile.Name()) - - err = tmpfile.Close() - require.NoError(t, err) - - logger := testlog.Logger(t, log.LevelInfo) - conf, err := LoadConfig(logger, tmpfile.Name()) - require.NoError(t, err) - - // confirmation depths - require.Equal(t, uint(50), conf.Chain.L1ConfirmationDepth) - require.Equal(t, uint(100), conf.Chain.L2ConfirmationDepth) - - // preset is used but does not overwrite config - require.Equal(t, common.HexToAddress("0x0000000000000000000000000000000000000001"), conf.Chain.L1Contracts.OptimismPortalProxy) - require.Equal(t, Presets[10].ChainConfig.L1Contracts.AddressManager, conf.Chain.L1Contracts.AddressManager) -} - -func TestLocalDevnet(t *testing.T) { - tmpfile, err := os.CreateTemp("", "test_user_values.toml") - require.NoError(t, err) - defer os.Remove(tmpfile.Name()) - defer tmpfile.Close() - - testData := ` - [chain] - preset = 901 - - l1-polling-interval = 5000 - l2-polling-interval = 5000 - l1-header-buffer-size = 1000 - l2-header-buffer-size = 1000 - - [rpcs] - l1-rpc = "https://l1.example.com" - l2-rpc = "https://l2.example.com" - ` - - data := []byte(testData) - err = os.WriteFile(tmpfile.Name(), data, 0644) - require.NoError(t, err) - defer os.Remove(tmpfile.Name()) - - err = tmpfile.Close() - require.NoError(t, err) - - logger := testlog.Logger(t, log.LevelInfo) - conf, err := LoadConfig(logger, tmpfile.Name()) - require.NoError(t, err) - - devnetPreset, err := DevnetPreset() - require.NoError(t, err) - - require.Equal(t, devnetPreset.ChainConfig.L1Contracts, conf.Chain.L1Contracts) -} - -func TestThrowsOnUnknownKeys(t *testing.T) { - logger := testlog.Logger(t, log.LevelInfo) - tmpfile, err := os.CreateTemp("", "test.toml") - require.NoError(t, err) - defer os.Remove(tmpfile.Name()) - defer tmpfile.Close() - - testData := ` - [chain] - unknown_key = 420 - preset = 10 - - [rpcs] - l1-rpc = "https://l1.example.com" - l2-rpc = "https://l2.example.com" - - [db] - another_unknownKey = 420 - host = "127.0.0.1" - port = 5432 - user = "postgres" - password = "postgres" - name = "indexer" - - [http] - host = "127.0.0.1" - port = 8080 - - [metrics] - host = "127.0.0.1" - port = 7300 - ` - - data := []byte(testData) - err = os.WriteFile(tmpfile.Name(), data, 0644) - require.NoError(t, err) - defer os.Remove(tmpfile.Name()) - - err = tmpfile.Close() - require.NoError(t, err) - - _, err = LoadConfig(logger, tmpfile.Name()) - require.Error(t, err) - require.Contains(t, err.Error(), "unknown fields in config file") -} diff --git a/indexer/config/devnet.go b/indexer/config/devnet.go deleted file mode 100644 index babc56bbba91..000000000000 --- a/indexer/config/devnet.go +++ /dev/null @@ -1,46 +0,0 @@ -package config - -import ( - "encoding/json" - "errors" - "fmt" - "io/fs" - "os" - "path/filepath" - - op_service "github.com/ethereum-optimism/optimism/op-service" -) - -var DevnetPresetId = 901 - -func DevnetPreset() (*Preset, error) { - cwd, err := os.Getwd() - if err != nil { - return nil, err - } - - root, err := op_service.FindMonorepoRoot(cwd) - if err != nil { - return nil, err - } - - devnetFilepath := filepath.Join(root, ".devnet", "addresses.json") - if _, err := os.Stat(devnetFilepath); errors.Is(err, fs.ErrNotExist) { - return nil, fmt.Errorf(".devnet/addresses.json not found. `make devnet-allocs` in monorepo root: %w", err) - } - - content, err := os.ReadFile(devnetFilepath) - if err != nil { - return nil, fmt.Errorf("unable to read .devnet/addressees.json") - } - - var l1Contracts L1Contracts - if err := json.Unmarshal(content, &l1Contracts); err != nil { - return nil, err - } - - return &Preset{ - Name: "Local Devnet", - ChainConfig: ChainConfig{Preset: DevnetPresetId, L1Contracts: l1Contracts}, - }, nil -} diff --git a/indexer/config/presets.go b/indexer/config/presets.go deleted file mode 100644 index 1c3c994fd60d..000000000000 --- a/indexer/config/presets.go +++ /dev/null @@ -1,155 +0,0 @@ -package config - -import ( - "github.com/ethereum/go-ethereum/common" -) - -type Preset struct { - Name string - ChainConfig ChainConfig -} - -// In the future, presets can just be onchain config and fetched on initialization - -// Mapping of L2 chain ids to their preset chain configurations -var Presets = map[int]Preset{ - 10: { - Name: "Optimism", - ChainConfig: ChainConfig{ - Preset: 10, - L1Contracts: L1Contracts{ - AddressManager: common.HexToAddress("0xdE1FCfB0851916CA5101820A69b13a4E276bd81F"), - SystemConfigProxy: common.HexToAddress("0x229047fed2591dbec1eF1118d64F7aF3dB9EB290"), - OptimismPortalProxy: common.HexToAddress("0xbEb5Fc579115071764c7423A4f12eDde41f106Ed"), - L2OutputOracleProxy: common.HexToAddress("0xdfe97868233d1aa22e815a266982f2cf17685a27"), - L1CrossDomainMessengerProxy: common.HexToAddress("0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1"), - L1StandardBridgeProxy: common.HexToAddress("0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1"), - L1ERC721BridgeProxy: common.HexToAddress("0x5a7749f83b81B301cAb5f48EB8516B986DAef23D"), - DisputeGameFactoryProxy: common.HexToAddress("0x1111111111111111111111111111111111111111"), - - // pre-bedrock - LegacyCanonicalTransactionChain: common.HexToAddress("0x5e4e65926ba27467555eb562121fac00d24e9dd2"), - LegacyStateCommitmentChain: common.HexToAddress("0xBe5dAb4A2e9cd0F27300dB4aB94BeE3A233AEB19"), - }, - L1StartingHeight: 13596466, - L1BedrockStartingHeight: 17422590, - L2BedrockStartingHeight: 105235063, - L1ConfirmationDepth: 10, - L2ConfirmationDepth: 75, - }, - }, - 11155420: { - Name: "Optimism Sepolia", - ChainConfig: ChainConfig{ - Preset: 11155420, - L1Contracts: L1Contracts{ - AddressManager: common.HexToAddress("0x9bFE9c5609311DF1c011c47642253B78a4f33F4B"), - SystemConfigProxy: common.HexToAddress("0x034edD2A225f7f429A63E0f1D2084B9E0A93b538"), - OptimismPortalProxy: common.HexToAddress("0x16Fc5058F25648194471939df75CF27A2fdC48BC"), - L2OutputOracleProxy: common.HexToAddress("0x90E9c4f8a994a250F6aEfd61CAFb4F2e895D458F"), - L1CrossDomainMessengerProxy: common.HexToAddress("0x58Cc85b8D04EA49cC6DBd3CbFFd00B4B8D6cb3ef"), - L1StandardBridgeProxy: common.HexToAddress("0xFBb0621E0B23b5478B630BD55a5f21f67730B0F1"), - L1ERC721BridgeProxy: common.HexToAddress("0xd83e03D576d23C9AEab8cC44Fa98d058D2176D1f"), - DisputeGameFactoryProxy: common.HexToAddress("0x05F9613aDB30026FFd634f38e5C4dFd30a197Fa1"), - }, - L1StartingHeight: 4071408, - L1ConfirmationDepth: 10, - L2ConfirmationDepth: 75, - }, - }, - 8453: { - Name: "Base", - ChainConfig: ChainConfig{ - Preset: 8453, - L1Contracts: L1Contracts{ - AddressManager: common.HexToAddress("0x8EfB6B5c4767B09Dc9AA6Af4eAA89F749522BaE2"), - SystemConfigProxy: common.HexToAddress("0x73a79Fab69143498Ed3712e519A88a918e1f4072"), - OptimismPortalProxy: common.HexToAddress("0x49048044D57e1C92A77f79988d21Fa8fAF74E97e"), - L2OutputOracleProxy: common.HexToAddress("0x56315b90c40730925ec5485cf004d835058518A0"), - L1CrossDomainMessengerProxy: common.HexToAddress("0x866E82a600A1414e583f7F13623F1aC5d58b0Afa"), - L1StandardBridgeProxy: common.HexToAddress("0x3154Cf16ccdb4C6d922629664174b904d80F2C35"), - L1ERC721BridgeProxy: common.HexToAddress("0x608d94945A64503E642E6370Ec598e519a2C1E53"), - DisputeGameFactoryProxy: common.HexToAddress("0x1111111111111111111111111111111111111111"), - }, - L1StartingHeight: 17481768, - L1ConfirmationDepth: 10, - L2ConfirmationDepth: 75, - }, - }, - 84532: { - Name: "Base Sepolia", - ChainConfig: ChainConfig{ - Preset: 84532, - L1Contracts: L1Contracts{ - AddressManager: common.HexToAddress("0x709c2B8ef4A9feFc629A8a2C1AF424Dc5BD6ad1B"), - SystemConfigProxy: common.HexToAddress("0xf272670eb55e895584501d564AfEB048bEd26194"), - OptimismPortalProxy: common.HexToAddress("0x49f53e41452C74589E85cA1677426Ba426459e85"), - L2OutputOracleProxy: common.HexToAddress("0x84457ca9D0163FbC4bbfe4Dfbb20ba46e48DF254"), - L1CrossDomainMessengerProxy: common.HexToAddress("0xC34855F4De64F1840e5686e64278da901e261f20"), - L1StandardBridgeProxy: common.HexToAddress("0xfd0Bf71F60660E2f608ed56e1659C450eB113120"), - L1ERC721BridgeProxy: common.HexToAddress("0x21eFD066e581FA55Ef105170Cc04d74386a09190"), - DisputeGameFactoryProxy: common.HexToAddress("0x1111111111111111111111111111111111111111"), - }, - L1StartingHeight: 4370868, - L1ConfirmationDepth: 10, - L2ConfirmationDepth: 75, - }, - }, - 7777777: { - Name: "Zora", - ChainConfig: ChainConfig{ - Preset: 7777777, - L1Contracts: L1Contracts{ - AddressManager: common.HexToAddress("0xEF8115F2733fb2033a7c756402Fc1deaa56550Ef"), - SystemConfigProxy: common.HexToAddress("0xA3cAB0126d5F504B071b81a3e8A2BBBF17930d86"), - OptimismPortalProxy: common.HexToAddress("0x1a0ad011913A150f69f6A19DF447A0CfD9551054"), - L2OutputOracleProxy: common.HexToAddress("0x9E6204F750cD866b299594e2aC9eA824E2e5f95c"), - L1CrossDomainMessengerProxy: common.HexToAddress("0xdC40a14d9abd6F410226f1E6de71aE03441ca506"), - L1StandardBridgeProxy: common.HexToAddress("0x3e2Ea9B92B7E48A52296fD261dc26fd995284631"), - L1ERC721BridgeProxy: common.HexToAddress("0x83A4521A3573Ca87f3a971B169C5A0E1d34481c3"), - DisputeGameFactoryProxy: common.HexToAddress("0x1111111111111111111111111111111111111111"), - }, - L1StartingHeight: 17473923, - L1ConfirmationDepth: 10, - L2ConfirmationDepth: 75, - }, - }, - 424: { - Name: "PGN", - ChainConfig: ChainConfig{ - Preset: 424, - L1Contracts: L1Contracts{ - AddressManager: common.HexToAddress("0x09d5DbA52F0ee2C4A5E94FD5C802bD74Ca9cAD3e"), - SystemConfigProxy: common.HexToAddress("0x7Df716EAD1d83a2BF35B416B7BC84bd0700357C9"), - OptimismPortalProxy: common.HexToAddress("0xb26Fd985c5959bBB382BAFdD0b879E149e48116c"), - L2OutputOracleProxy: common.HexToAddress("0xA38d0c4E6319F9045F20318BA5f04CDe94208608"), - L1CrossDomainMessengerProxy: common.HexToAddress("0x97BAf688E5d0465E149d1d5B497Ca99392a6760e"), - L1StandardBridgeProxy: common.HexToAddress("0xD0204B9527C1bA7bD765Fa5CCD9355d38338272b"), - L1ERC721BridgeProxy: common.HexToAddress("0xaFF0F8aaB6Cc9108D34b3B8423C76d2AF434d115"), - DisputeGameFactoryProxy: common.HexToAddress("0x1111111111111111111111111111111111111111"), - }, - L1StartingHeight: 17672702, - L1ConfirmationDepth: 10, - L2ConfirmationDepth: 75, - }, - }, - 58008: { - Name: "PGN Sepolia", - ChainConfig: ChainConfig{ - Preset: 58008, - L1Contracts: L1Contracts{ - AddressManager: common.HexToAddress("0x0Ad91488288BBe60ff38258785568A6D1EB3B983"), - SystemConfigProxy: common.HexToAddress("0x4BCCC52151f0ad7C62D45Ce0aA77d9d8ffCE534e"), - OptimismPortalProxy: common.HexToAddress("0xF04BdD5353Bb0EFF6CA60CfcC78594278eBfE179"), - L2OutputOracleProxy: common.HexToAddress("0xD5bAc3152ffC25318F848B3DD5dA6C85171BaEEe"), - L1CrossDomainMessengerProxy: common.HexToAddress("0x97f3558Ce48FE71B8CeFA5497708A49531D5A8E1"), - L1StandardBridgeProxy: common.HexToAddress("0xFaE6abCAF30D23e233AC7faF747F2fC3a5a6Bfa3"), - L1ERC721BridgeProxy: common.HexToAddress("0xBA8397B6f255618D5985d0fB427D8c0496F3a5FA"), - DisputeGameFactoryProxy: common.HexToAddress("0x1111111111111111111111111111111111111111"), - }, - L1StartingHeight: 17672702, - L1ConfirmationDepth: 10, - L2ConfirmationDepth: 75, - }, - }, -} diff --git a/indexer/database/blocks.go b/indexer/database/blocks.go deleted file mode 100644 index 0f89f92e6b3c..000000000000 --- a/indexer/database/blocks.go +++ /dev/null @@ -1,198 +0,0 @@ -package database - -import ( - "errors" - "fmt" - "math/big" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/log" - - "gorm.io/gorm" - "gorm.io/gorm/clause" -) - -/** - * Types - */ - -type BlockHeader struct { - Hash common.Hash `gorm:"primaryKey;serializer:bytes"` - ParentHash common.Hash `gorm:"serializer:bytes"` - Number *big.Int `gorm:"serializer:u256"` - Timestamp uint64 - - RLPHeader *RLPHeader `gorm:"serializer:rlp;column:rlp_bytes"` -} - -func BlockHeaderFromHeader(header *types.Header) BlockHeader { - return BlockHeader{ - Hash: header.Hash(), - ParentHash: header.ParentHash, - Number: header.Number, - Timestamp: header.Time, - - RLPHeader: (*RLPHeader)(header), - } -} - -func (b BlockHeader) String() string { - return fmt.Sprintf("{Hash: %s, Number: %s}", b.Hash, b.Number) -} - -type L1BlockHeader struct { - BlockHeader `gorm:"embedded"` -} - -type L2BlockHeader struct { - BlockHeader `gorm:"embedded"` -} - -type BlocksView interface { - L1BlockHeader(common.Hash) (*L1BlockHeader, error) - L1BlockHeaderWithFilter(BlockHeader) (*L1BlockHeader, error) - L1BlockHeaderWithScope(func(db *gorm.DB) *gorm.DB) (*L1BlockHeader, error) - L1LatestBlockHeader() (*L1BlockHeader, error) - - L2BlockHeader(common.Hash) (*L2BlockHeader, error) - L2BlockHeaderWithFilter(BlockHeader) (*L2BlockHeader, error) - L2BlockHeaderWithScope(func(db *gorm.DB) *gorm.DB) (*L2BlockHeader, error) - L2LatestBlockHeader() (*L2BlockHeader, error) -} - -type BlocksDB interface { - BlocksView - - StoreL1BlockHeaders([]L1BlockHeader) error - StoreL2BlockHeaders([]L2BlockHeader) error - - DeleteReorgedState(uint64) error -} - -/** - * Implementation - */ - -type blocksDB struct { - log log.Logger - gorm *gorm.DB -} - -func newBlocksDB(log log.Logger, db *gorm.DB) BlocksDB { - return &blocksDB{log: log.New("table", "blocks"), gorm: db} -} - -// L1 - -func (db *blocksDB) StoreL1BlockHeaders(headers []L1BlockHeader) error { - deduped := db.gorm.Clauses(clause.OnConflict{Columns: []clause.Column{{Name: "hash"}}, DoNothing: true}) - result := deduped.Create(&headers) - if result.Error == nil && int(result.RowsAffected) < len(headers) { - db.log.Warn("ignored L1 block duplicates", "duplicates", len(headers)-int(result.RowsAffected)) - } - - return result.Error -} - -func (db *blocksDB) L1BlockHeader(hash common.Hash) (*L1BlockHeader, error) { - return db.L1BlockHeaderWithFilter(BlockHeader{Hash: hash}) -} - -func (db *blocksDB) L1BlockHeaderWithFilter(filter BlockHeader) (*L1BlockHeader, error) { - return db.L1BlockHeaderWithScope(func(gorm *gorm.DB) *gorm.DB { return gorm.Where(&filter) }) -} - -func (db *blocksDB) L1BlockHeaderWithScope(scope func(*gorm.DB) *gorm.DB) (*L1BlockHeader, error) { - var l1Header L1BlockHeader - result := db.gorm.Scopes(scope).Take(&l1Header) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - return &l1Header, nil -} - -func (db *blocksDB) L1LatestBlockHeader() (*L1BlockHeader, error) { - var l1Header L1BlockHeader - result := db.gorm.Order("number DESC").Take(&l1Header) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - - return nil, result.Error - } - - return &l1Header, nil -} - -// L2 - -func (db *blocksDB) StoreL2BlockHeaders(headers []L2BlockHeader) error { - deduped := db.gorm.Clauses(clause.OnConflict{Columns: []clause.Column{{Name: "hash"}}, DoNothing: true}) - result := deduped.Create(&headers) - if result.Error == nil && int(result.RowsAffected) < len(headers) { - db.log.Warn("ignored L2 block duplicates", "duplicates", len(headers)-int(result.RowsAffected)) - } - - return result.Error -} - -func (db *blocksDB) L2BlockHeader(hash common.Hash) (*L2BlockHeader, error) { - return db.L2BlockHeaderWithFilter(BlockHeader{Hash: hash}) -} - -func (db *blocksDB) L2BlockHeaderWithFilter(filter BlockHeader) (*L2BlockHeader, error) { - return db.L2BlockHeaderWithScope(func(gorm *gorm.DB) *gorm.DB { return gorm.Where(&filter) }) -} - -func (db *blocksDB) L2BlockHeaderWithScope(scope func(*gorm.DB) *gorm.DB) (*L2BlockHeader, error) { - var l2Header L2BlockHeader - result := db.gorm.Scopes(scope).Take(&l2Header) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - return &l2Header, nil -} - -func (db *blocksDB) L2LatestBlockHeader() (*L2BlockHeader, error) { - var l2Header L2BlockHeader - result := db.gorm.Order("number DESC").Take(&l2Header) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - return &l2Header, nil -} - -// Reorgs - -func (db *blocksDB) DeleteReorgedState(timestamp uint64) error { - db.log.Info("deleting reorg'd state", "from_timestamp", timestamp) - - // Delete reorg'd state. Block deletes cascades to all tables - l1Result := db.gorm.Delete(&L1BlockHeader{}, "timestamp >= ?", timestamp) - if l1Result.Error != nil { - return fmt.Errorf("unable to delete l1 state: %w", l1Result.Error) - } - db.log.Info("L1 blocks (& derived events/tables) deleted", "block_count", l1Result.RowsAffected) - - l2Result := db.gorm.Delete(&L2BlockHeader{}, "timestamp >= ?", timestamp) - if l2Result.Error != nil { - return fmt.Errorf("unable to delete l2 state: %w", l2Result.Error) - } - db.log.Info("L2 blocks (& derived events/tables) deleted", "block_count", l2Result.RowsAffected) - - return nil -} diff --git a/indexer/database/bridge_messages.go b/indexer/database/bridge_messages.go deleted file mode 100644 index 25979a8f0a0d..000000000000 --- a/indexer/database/bridge_messages.go +++ /dev/null @@ -1,203 +0,0 @@ -package database - -import ( - "errors" - "fmt" - "math/big" - - "gorm.io/gorm" - "gorm.io/gorm/clause" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/log" - - "github.com/google/uuid" -) - -/** - * Types - */ - -type BridgeMessage struct { - MessageHash common.Hash `gorm:"primaryKey;serializer:bytes"` - Nonce *big.Int `gorm:"serializer:u256"` - - SentMessageEventGUID uuid.UUID - RelayedMessageEventGUID *uuid.UUID - - Tx Transaction `gorm:"embedded"` - GasLimit *big.Int `gorm:"serializer:u256"` -} - -type L1BridgeMessage struct { - BridgeMessage `gorm:"embedded"` - TransactionSourceHash common.Hash `gorm:"serializer:bytes"` -} - -type L2BridgeMessage struct { - BridgeMessage `gorm:"embedded"` - TransactionWithdrawalHash common.Hash `gorm:"serializer:bytes"` -} - -type L2BridgeMessageVersionedMessageHash struct { - MessageHash common.Hash `gorm:"primaryKey;serializer:bytes"` - V1MessageHash common.Hash `gorm:"serializer:bytes"` -} - -type BridgeMessagesView interface { - L1BridgeMessage(common.Hash) (*L1BridgeMessage, error) - L1BridgeMessageWithFilter(BridgeMessage) (*L1BridgeMessage, error) - - L2BridgeMessage(common.Hash) (*L2BridgeMessage, error) - L2BridgeMessageWithFilter(BridgeMessage) (*L2BridgeMessage, error) -} - -type BridgeMessagesDB interface { - BridgeMessagesView - - StoreL1BridgeMessages([]L1BridgeMessage) error - MarkRelayedL1BridgeMessage(common.Hash, uuid.UUID) error - - StoreL2BridgeMessages([]L2BridgeMessage) error - MarkRelayedL2BridgeMessage(common.Hash, uuid.UUID) error - - StoreL2BridgeMessageV1MessageHashes([]L2BridgeMessageVersionedMessageHash) error -} - -/** - * Implementation - */ - -type bridgeMessagesDB struct { - log log.Logger - gorm *gorm.DB -} - -func newBridgeMessagesDB(log log.Logger, db *gorm.DB) BridgeMessagesDB { - return &bridgeMessagesDB{log: log.New("table", "bridge_messages"), gorm: db} -} - -/** - * Arbitrary Messages Sent from L1 - */ - -func (db bridgeMessagesDB) StoreL1BridgeMessages(messages []L1BridgeMessage) error { - deduped := db.gorm.Clauses(clause.OnConflict{Columns: []clause.Column{{Name: "message_hash"}}, DoNothing: true}) - result := deduped.Create(&messages) - if result.Error == nil && int(result.RowsAffected) < len(messages) { - db.log.Warn("ignored L1 bridge message duplicates", "duplicates", len(messages)-int(result.RowsAffected)) - } - - return result.Error -} - -func (db bridgeMessagesDB) L1BridgeMessage(msgHash common.Hash) (*L1BridgeMessage, error) { - return db.L1BridgeMessageWithFilter(BridgeMessage{MessageHash: msgHash}) -} - -func (db bridgeMessagesDB) L1BridgeMessageWithFilter(filter BridgeMessage) (*L1BridgeMessage, error) { - var sentMessage L1BridgeMessage - result := db.gorm.Where(&filter).Take(&sentMessage) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - return &sentMessage, nil -} - -func (db bridgeMessagesDB) MarkRelayedL1BridgeMessage(messageHash common.Hash, relayEvent uuid.UUID) error { - message, err := db.L1BridgeMessage(messageHash) - if err != nil { - return err - } else if message == nil { - return fmt.Errorf("L1BridgeMessage %s not found", messageHash) - } - - if message.RelayedMessageEventGUID != nil && message.RelayedMessageEventGUID.ID() == relayEvent.ID() { - return nil - } else if message.RelayedMessageEventGUID != nil { - return fmt.Errorf("relayed message %s re-relayed with a different event %s", messageHash, relayEvent) - } - - message.RelayedMessageEventGUID = &relayEvent - result := db.gorm.Save(message) - return result.Error -} - -/** - * Arbitrary Messages Sent from L2 - */ - -func (db bridgeMessagesDB) StoreL2BridgeMessages(messages []L2BridgeMessage) error { - deduped := db.gorm.Clauses(clause.OnConflict{Columns: []clause.Column{{Name: "message_hash"}}, DoNothing: true}) - result := deduped.Create(&messages) - if result.Error == nil && int(result.RowsAffected) < len(messages) { - db.log.Warn("ignored L2 bridge message duplicates", "duplicates", len(messages)-int(result.RowsAffected)) - } - - return result.Error -} - -func (db bridgeMessagesDB) StoreL2BridgeMessageV1MessageHashes(versionedHashes []L2BridgeMessageVersionedMessageHash) error { - deduped := db.gorm.Clauses(clause.OnConflict{Columns: []clause.Column{{Name: "message_hash"}}, DoNothing: true}) - result := deduped.Create(&versionedHashes) - if result.Error == nil && int(result.RowsAffected) < len(versionedHashes) { - db.log.Warn("ignored L2 bridge v1 message hash duplicates", "duplicates", len(versionedHashes)-int(result.RowsAffected)) - } - - return result.Error -} - -func (db bridgeMessagesDB) L2BridgeMessage(msgHash common.Hash) (*L2BridgeMessage, error) { - message, err := db.L2BridgeMessageWithFilter(BridgeMessage{MessageHash: msgHash}) - if message != nil || err != nil { - return message, err - } - - // check if this is a v1 hash of an older message - versioned := L2BridgeMessageVersionedMessageHash{V1MessageHash: msgHash} - result := db.gorm.Where(&versioned).Take(&versioned) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - return db.L2BridgeMessageWithFilter(BridgeMessage{MessageHash: versioned.MessageHash}) -} - -func (db bridgeMessagesDB) L2BridgeMessageWithFilter(filter BridgeMessage) (*L2BridgeMessage, error) { - var sentMessage L2BridgeMessage - result := db.gorm.Where(&filter).Take(&sentMessage) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - return &sentMessage, nil -} - -func (db bridgeMessagesDB) MarkRelayedL2BridgeMessage(messageHash common.Hash, relayEvent uuid.UUID) error { - message, err := db.L2BridgeMessage(messageHash) - if err != nil { - return err - } else if message == nil { - return fmt.Errorf("L2BridgeMessage %s not found", messageHash) - } - - if message.RelayedMessageEventGUID != nil && message.RelayedMessageEventGUID.ID() == relayEvent.ID() { - return nil - } else if message.RelayedMessageEventGUID != nil { - return fmt.Errorf("relayed message %s re-relayed with a different event %s", messageHash, relayEvent) - } - - message.RelayedMessageEventGUID = &relayEvent - result := db.gorm.Save(message) - return result.Error -} diff --git a/indexer/database/bridge_transactions.go b/indexer/database/bridge_transactions.go deleted file mode 100644 index 10482b7e1c27..000000000000 --- a/indexer/database/bridge_transactions.go +++ /dev/null @@ -1,257 +0,0 @@ -package database - -import ( - "errors" - "fmt" - "math/big" - - "github.com/google/uuid" - "gorm.io/gorm" - "gorm.io/gorm/clause" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/log" -) - -/** - * Types - */ - -type Transaction struct { - FromAddress common.Address `gorm:"serializer:bytes"` - ToAddress common.Address `gorm:"serializer:bytes"` - Amount *big.Int `gorm:"serializer:u256"` - Data Bytes `gorm:"serializer:bytes"` - Timestamp uint64 -} - -type L1TransactionDeposit struct { - SourceHash common.Hash `gorm:"serializer:bytes;primaryKey"` - L2TransactionHash common.Hash `gorm:"serializer:bytes"` - InitiatedL1EventGUID uuid.UUID - - Tx Transaction `gorm:"embedded"` - GasLimit *big.Int `gorm:"serializer:u256"` -} - -type L2TransactionWithdrawal struct { - WithdrawalHash common.Hash `gorm:"serializer:bytes;primaryKey"` - Nonce *big.Int `gorm:"serializer:u256"` - InitiatedL2EventGUID uuid.UUID - - ProvenL1EventGUID *uuid.UUID - FinalizedL1EventGUID *uuid.UUID - Succeeded *bool - - Tx Transaction `gorm:"embedded"` - GasLimit *big.Int `gorm:"serializer:u256"` -} - -type BridgeTransactionsView interface { - L1TransactionDeposit(common.Hash) (*L1TransactionDeposit, error) - L1LatestBlockHeader() (*L1BlockHeader, error) - L1LatestFinalizedBlockHeader() (*L1BlockHeader, error) - - L2TransactionWithdrawal(common.Hash) (*L2TransactionWithdrawal, error) - L2LatestBlockHeader() (*L2BlockHeader, error) - L2LatestFinalizedBlockHeader() (*L2BlockHeader, error) -} - -type BridgeTransactionsDB interface { - BridgeTransactionsView - - StoreL1TransactionDeposits([]L1TransactionDeposit) error - - StoreL2TransactionWithdrawals([]L2TransactionWithdrawal) error - MarkL2TransactionWithdrawalProvenEvent(common.Hash, uuid.UUID) error - MarkL2TransactionWithdrawalFinalizedEvent(common.Hash, uuid.UUID, bool) error -} - -/** - * Implementation - */ - -type bridgeTransactionsDB struct { - log log.Logger - gorm *gorm.DB -} - -func newBridgeTransactionsDB(log log.Logger, db *gorm.DB) BridgeTransactionsDB { - return &bridgeTransactionsDB{log: log.New("table", "bridge_transactions"), gorm: db} -} - -/** - * Transactions deposited from L1 - */ - -func (db *bridgeTransactionsDB) StoreL1TransactionDeposits(deposits []L1TransactionDeposit) error { - deduped := db.gorm.Clauses(clause.OnConflict{Columns: []clause.Column{{Name: "source_hash"}}, DoNothing: true}) - result := deduped.Create(&deposits) - if result.Error == nil && int(result.RowsAffected) < len(deposits) { - db.log.Warn("ignored L1 tx deposit duplicates", "duplicates", len(deposits)-int(result.RowsAffected)) - } - - return result.Error -} - -func (db *bridgeTransactionsDB) L1TransactionDeposit(sourceHash common.Hash) (*L1TransactionDeposit, error) { - var deposit L1TransactionDeposit - result := db.gorm.Where(&L1TransactionDeposit{SourceHash: sourceHash}).Take(&deposit) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - return &deposit, nil -} - -func (db *bridgeTransactionsDB) L1LatestBlockHeader() (*L1BlockHeader, error) { - // L1: Latest Transaction Deposit - l1Query := db.gorm.Where("timestamp = (?)", db.gorm.Table("l1_transaction_deposits").Select("MAX(timestamp)")) - - var l1Header L1BlockHeader - result := l1Query.Take(&l1Header) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - return &l1Header, nil -} - -func (db *bridgeTransactionsDB) L1LatestFinalizedBlockHeader() (*L1BlockHeader, error) { - // A Proven, Finalized Event or Relayed Message - - latestProvenWithdrawal := db.gorm.Table("l2_transaction_withdrawals").Where("proven_l1_event_guid IS NOT NULL").Order("timestamp DESC").Limit(1) - provenQuery := db.gorm.Table("l1_contract_events").Where("guid = (?)", latestProvenWithdrawal.Select("proven_l1_event_guid")) - - latestFinalizedWithdrawal := db.gorm.Table("l2_transaction_withdrawals").Where("finalized_l1_event_guid IS NOT NULL").Order("timestamp DESC").Limit(1) - finalizedQuery := db.gorm.Table("l1_contract_events").Where("guid = (?)", latestFinalizedWithdrawal.Select("finalized_l1_event_guid")) - - latestRelayedWithdrawal := db.gorm.Table("l2_bridge_messages").Where("relayed_message_event_guid IS NOT NULL").Order("timestamp DESC").Limit(1) - relayedQuery := db.gorm.Table("l1_contract_events").Where("guid = (?)", latestRelayedWithdrawal.Select("relayed_message_event_guid")) - - events := db.gorm.Table("((?) UNION (?) UNION (?)) AS events", provenQuery, finalizedQuery, relayedQuery) - l1Query := db.gorm.Where("hash = (?)", events.Select("block_hash").Order("timestamp DESC").Limit(1)) - - var l1Header L1BlockHeader - result := l1Query.Take(&l1Header) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - return &l1Header, nil -} - -/** - * Transactions withdrawn from L2 - */ - -func (db *bridgeTransactionsDB) StoreL2TransactionWithdrawals(withdrawals []L2TransactionWithdrawal) error { - deduped := db.gorm.Clauses(clause.OnConflict{Columns: []clause.Column{{Name: "withdrawal_hash"}}, DoNothing: true}) - result := deduped.Create(&withdrawals) - if result.Error == nil && int(result.RowsAffected) < len(withdrawals) { - db.log.Warn("ignored L2 tx withdrawal duplicates", "duplicates", len(withdrawals)-int(result.RowsAffected)) - } - - return result.Error -} - -func (db *bridgeTransactionsDB) L2TransactionWithdrawal(withdrawalHash common.Hash) (*L2TransactionWithdrawal, error) { - var withdrawal L2TransactionWithdrawal - result := db.gorm.Where(&L2TransactionWithdrawal{WithdrawalHash: withdrawalHash}).Take(&withdrawal) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - return &withdrawal, nil -} - -// MarkL2TransactionWithdrawalProvenEvent links a withdrawn transaction with associated Prove action on L1. -func (db *bridgeTransactionsDB) MarkL2TransactionWithdrawalProvenEvent(withdrawalHash common.Hash, provenL1EventGuid uuid.UUID) error { - withdrawal, err := db.L2TransactionWithdrawal(withdrawalHash) - if err != nil { - return err - } else if withdrawal == nil { - return fmt.Errorf("transaction withdrawal hash %s not found", withdrawalHash) - } - - if withdrawal.ProvenL1EventGUID != nil && withdrawal.ProvenL1EventGUID.ID() == provenL1EventGuid.ID() { - return nil - } - - // Withdrawals can be re-proven in the event that the claim they were proven against was successfully - // challenged. Rather than track each individual dispute game, we allow the proven event to simply be - // overwritten. - withdrawal.ProvenL1EventGUID = &provenL1EventGuid - result := db.gorm.Save(&withdrawal) - return result.Error -} - -// MarkL2TransactionWithdrawalFinalizedEvent links a withdrawn transaction in its finalized state -func (db *bridgeTransactionsDB) MarkL2TransactionWithdrawalFinalizedEvent(withdrawalHash common.Hash, finalizedL1EventGuid uuid.UUID, succeeded bool) error { - withdrawal, err := db.L2TransactionWithdrawal(withdrawalHash) - if err != nil { - return err - } else if withdrawal == nil { - return fmt.Errorf("transaction withdrawal hash %s not found", withdrawalHash) - } else if withdrawal.ProvenL1EventGUID == nil { - return fmt.Errorf("cannot mark unproven withdrawal hash %s as finalized", withdrawal.WithdrawalHash) - } - - if withdrawal.FinalizedL1EventGUID != nil && withdrawal.FinalizedL1EventGUID.ID() == finalizedL1EventGuid.ID() { - return nil - } else if withdrawal.FinalizedL1EventGUID != nil { - return fmt.Errorf("finalized withdrawal %s re-finalized with a different event %s", withdrawalHash, finalizedL1EventGuid) - } - - withdrawal.FinalizedL1EventGUID = &finalizedL1EventGuid - withdrawal.Succeeded = &succeeded - result := db.gorm.Save(&withdrawal) - return result.Error -} - -func (db *bridgeTransactionsDB) L2LatestBlockHeader() (*L2BlockHeader, error) { - // L2: Block With The Latest Withdrawal - l2Query := db.gorm.Where("timestamp = (?)", db.gorm.Table("l2_transaction_withdrawals").Select("MAX(timestamp)")) - - var l2Header L2BlockHeader - result := l2Query.Take(&l2Header) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - return &l2Header, nil -} - -func (db *bridgeTransactionsDB) L2LatestFinalizedBlockHeader() (*L2BlockHeader, error) { - // Only a Relayed message since we dont track L1 deposit inclusion status. - latestRelayedDeposit := db.gorm.Table("l1_bridge_messages").Where("relayed_message_event_guid IS NOT NULL").Order("timestamp DESC").Limit(1) - relayedQuery := db.gorm.Table("l2_contract_events").Where("guid = (?)", latestRelayedDeposit.Select("relayed_message_event_guid")) - - l2Query := db.gorm.Where("hash = (?)", relayedQuery.Select("block_hash")) - - var l2Header L2BlockHeader - result := l2Query.Take(&l2Header) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - return &l2Header, nil -} diff --git a/indexer/database/bridge_transfers.go b/indexer/database/bridge_transfers.go deleted file mode 100644 index 8ba803d5029e..000000000000 --- a/indexer/database/bridge_transfers.go +++ /dev/null @@ -1,392 +0,0 @@ -package database - -import ( - "errors" - "fmt" - "strings" - - "gorm.io/gorm" - "gorm.io/gorm/clause" - - "github.com/ethereum-optimism/optimism/op-service/predeploys" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/log" -) - -var ( - ETHTokenPair = TokenPair{LocalTokenAddress: predeploys.LegacyERC20ETHAddr, RemoteTokenAddress: predeploys.LegacyERC20ETHAddr} -) - -/** - * Types - */ - -type TokenPair struct { - LocalTokenAddress common.Address `gorm:"serializer:bytes"` - RemoteTokenAddress common.Address `gorm:"serializer:bytes"` -} - -type BridgeTransfer struct { - CrossDomainMessageHash *common.Hash `gorm:"serializer:bytes"` - - Tx Transaction `gorm:"embedded"` - TokenPair TokenPair `gorm:"embedded"` -} - -type L1BridgeDeposit struct { - BridgeTransfer `gorm:"embedded"` - TransactionSourceHash common.Hash `gorm:"primaryKey;serializer:bytes"` -} - -type L1BridgeDepositWithTransactionHashes struct { - L1BridgeDeposit L1BridgeDeposit `gorm:"embedded"` - - L1BlockHash common.Hash `gorm:"serializer:bytes"` - L1TransactionHash common.Hash `gorm:"serializer:bytes"` - L2TransactionHash common.Hash `gorm:"serializer:bytes"` -} - -type L2BridgeWithdrawal struct { - BridgeTransfer `gorm:"embedded"` - TransactionWithdrawalHash common.Hash `gorm:"primaryKey;serializer:bytes"` -} - -type L2BridgeWithdrawalWithTransactionHashes struct { - L2BridgeWithdrawal L2BridgeWithdrawal `gorm:"embedded"` - L2TransactionHash common.Hash `gorm:"serializer:bytes"` - L2BlockHash common.Hash `gorm:"serializer:bytes"` - - ProvenL1TransactionHash common.Hash `gorm:"serializer:bytes"` - FinalizedL1TransactionHash common.Hash `gorm:"serializer:bytes"` -} - -type BridgeTransfersView interface { - L1BridgeDeposit(common.Hash) (*L1BridgeDeposit, error) - L1TxDepositSum() (float64, error) - L1BridgeDepositWithFilter(BridgeTransfer) (*L1BridgeDeposit, error) - L1BridgeDepositsByAddress(common.Address, string, int) (*L1BridgeDepositsResponse, error) - - L2BridgeWithdrawal(common.Hash) (*L2BridgeWithdrawal, error) - L2BridgeWithdrawalSum(filter WithdrawFilter) (float64, error) - L2BridgeWithdrawalWithFilter(BridgeTransfer) (*L2BridgeWithdrawal, error) - L2BridgeWithdrawalsByAddress(common.Address, string, int) (*L2BridgeWithdrawalsResponse, error) -} - -type BridgeTransfersDB interface { - BridgeTransfersView - - StoreL1BridgeDeposits([]L1BridgeDeposit) error - StoreL2BridgeWithdrawals([]L2BridgeWithdrawal) error -} - -/** - * Implementation - */ - -type bridgeTransfersDB struct { - log log.Logger - gorm *gorm.DB -} - -func newBridgeTransfersDB(log log.Logger, db *gorm.DB) BridgeTransfersDB { - return &bridgeTransfersDB{log: log.New("table", "bridge_transfers"), gorm: db} -} - -/** - * Tokens Bridged (Deposited) from L1 - */ - -func (db *bridgeTransfersDB) StoreL1BridgeDeposits(deposits []L1BridgeDeposit) error { - deduped := db.gorm.Clauses(clause.OnConflict{Columns: []clause.Column{{Name: "transaction_source_hash"}}, DoNothing: true}) - result := deduped.Create(&deposits) - if result.Error == nil && int(result.RowsAffected) < len(deposits) { - db.log.Warn("ignored L1 bridge transfer duplicates", "duplicates", len(deposits)-int(result.RowsAffected)) - } - - return result.Error -} - -func (db *bridgeTransfersDB) L1BridgeDeposit(txSourceHash common.Hash) (*L1BridgeDeposit, error) { - var deposit L1BridgeDeposit - result := db.gorm.Where(&L1BridgeDeposit{TransactionSourceHash: txSourceHash}).Take(&deposit) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - return &deposit, nil -} - -// L1BridgeDepositWithFilter queries for a bridge deposit with set fields in the `BridgeTransfer` filter -func (db *bridgeTransfersDB) L1BridgeDepositWithFilter(filter BridgeTransfer) (*L1BridgeDeposit, error) { - var deposit L1BridgeDeposit - result := db.gorm.Where(&filter).Take(&deposit) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - return &deposit, nil -} - -type L1BridgeDepositsResponse struct { - Deposits []L1BridgeDepositWithTransactionHashes - Cursor string - HasNextPage bool -} - -// L1TxDepositSum ... returns the sum of all l1 tx deposit mints in gwei -func (db *bridgeTransfersDB) L1TxDepositSum() (float64, error) { - var sum float64 - result := db.gorm.Model(&L1TransactionDeposit{}).Select("SUM(amount)").Scan(&sum) - if result.Error != nil { - return 0, result.Error - } - - return sum, nil -} - -// L1BridgeDepositsByAddress retrieves a list of deposits initiated by the specified address, -// coupled with the L1/L2 transaction hashes that complete the bridge transaction. -func (db *bridgeTransfersDB) L1BridgeDepositsByAddress(address common.Address, cursor string, limit int) (*L1BridgeDepositsResponse, error) { - if limit <= 0 { - return nil, fmt.Errorf("limit must be greater than 0") - } - - cursorClause := "" - if cursor != "" { - sourceHash := common.HexToHash(cursor) - txDeposit := new(L1TransactionDeposit) - result := db.gorm.Model(&L1TransactionDeposit{}).Where(&L1TransactionDeposit{SourceHash: sourceHash}).Take(txDeposit) - if result.Error != nil || errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, fmt.Errorf("unable to find transaction with supplied cursor source hash %s: %w", sourceHash, result.Error) - } - cursorClause = fmt.Sprintf("l1_transaction_deposits.timestamp <= %d", txDeposit.Tx.Timestamp) - } - - ethAddressString := predeploys.LegacyERC20ETHAddr.String() - - // Coalesce l1 transaction deposits that are simply ETH sends - ethTransactionDeposits := db.gorm.Model(&L1TransactionDeposit{}) - ethTransactionDeposits = ethTransactionDeposits.Where(&Transaction{FromAddress: address}).Where("amount > 0") - ethTransactionDeposits = ethTransactionDeposits.Joins("INNER JOIN l1_contract_events ON l1_contract_events.guid = initiated_l1_event_guid") - ethTransactionDeposits = ethTransactionDeposits.Select(` -from_address, to_address, amount, data, source_hash AS transaction_source_hash, -l2_transaction_hash, l1_contract_events.transaction_hash AS l1_transaction_hash, l1_contract_events.block_hash as l1_block_hash, -l1_transaction_deposits.timestamp, NULL AS cross_domain_message_hash, ? AS local_token_address, ? AS remote_token_address`, ethAddressString, ethAddressString) - ethTransactionDeposits = ethTransactionDeposits.Order("timestamp DESC").Limit(limit + 1) - if cursorClause != "" { - ethTransactionDeposits = ethTransactionDeposits.Where(cursorClause) - } - - depositsQuery := db.gorm.Model(&L1BridgeDeposit{}) - depositsQuery = depositsQuery.Where(&Transaction{FromAddress: address}) - depositsQuery = depositsQuery.Joins("INNER JOIN l1_transaction_deposits ON l1_transaction_deposits.source_hash = transaction_source_hash") - depositsQuery = depositsQuery.Joins("INNER JOIN l1_contract_events ON l1_contract_events.guid = l1_transaction_deposits.initiated_l1_event_guid") - depositsQuery = depositsQuery.Select(` -l1_bridge_deposits.from_address, l1_bridge_deposits.to_address, l1_bridge_deposits.amount, l1_bridge_deposits.data, transaction_source_hash, -l2_transaction_hash, l1_contract_events.transaction_hash AS l1_transaction_hash, l1_contract_events.block_hash as l1_block_hash, -l1_bridge_deposits.timestamp, cross_domain_message_hash, local_token_address, remote_token_address`) - depositsQuery = depositsQuery.Order("timestamp DESC").Limit(limit + 1) - if cursorClause != "" { - depositsQuery = depositsQuery.Where(cursorClause) - } - - query := db.gorm.Table("(?) AS deposits", depositsQuery) - query = query.Joins("UNION (?)", ethTransactionDeposits) - query = query.Select("*").Order("timestamp DESC").Limit(limit + 1) - deposits := []L1BridgeDepositWithTransactionHashes{} - result := query.Find(&deposits) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - nextCursor := "" - hasNextPage := false - if len(deposits) > limit { - hasNextPage = true - nextCursor = deposits[limit].L1BridgeDeposit.TransactionSourceHash.String() - deposits = deposits[:limit] - } - - response := &L1BridgeDepositsResponse{Deposits: deposits, Cursor: nextCursor, HasNextPage: hasNextPage} - return response, nil -} - -/** - * Tokens Bridged (Withdrawn) from L2 - */ - -func (db *bridgeTransfersDB) StoreL2BridgeWithdrawals(withdrawals []L2BridgeWithdrawal) error { - deduped := db.gorm.Clauses(clause.OnConflict{Columns: []clause.Column{{Name: "transaction_withdrawal_hash"}}, DoNothing: true}) - result := deduped.Create(&withdrawals) - if result.Error == nil && int(result.RowsAffected) < len(withdrawals) { - db.log.Warn("ignored L2 bridge transfer duplicates", "duplicates", len(withdrawals)-int(result.RowsAffected)) - } - - return result.Error -} - -func (db *bridgeTransfersDB) L2BridgeWithdrawal(txWithdrawalHash common.Hash) (*L2BridgeWithdrawal, error) { - var withdrawal L2BridgeWithdrawal - result := db.gorm.Where(&L2BridgeWithdrawal{TransactionWithdrawalHash: txWithdrawalHash}).Take(&withdrawal) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - return &withdrawal, nil -} - -type WithdrawFilter uint8 - -const ( - All WithdrawFilter = iota // Same as "initialized" - Proven - Finalized -) - -func (db *bridgeTransfersDB) L2BridgeWithdrawalSum(filter WithdrawFilter) (float64, error) { - // Determine where filter - var clause string - switch filter { - case All: - clause = "" - - case Finalized: - clause = "finalized_l1_event_guid IS NOT NULL" - - case Proven: - clause = "proven_l1_event_guid IS NOT NULL" - - default: - return 0, fmt.Errorf("unknown filter argument: %d", filter) - } - - // NOTE - Scanning to float64 reduces precision versus scanning to big.Int since amount is a uint256 - // This is ok though given all bridges will never exceed max float64 (10^308 || 1.7E+308) in wei value locked - // since that would require 10^308 / 10^18 = 10^290 ETH locked in the bridge - var sum float64 - result := db.gorm.Model(&L2TransactionWithdrawal{}).Where(clause).Select("SUM(amount)").Scan(&sum) - if result.Error != nil && strings.Contains(result.Error.Error(), "converting NULL to float64 is unsupported") { - // no rows found - return 0, nil - } else if result.Error != nil { - return 0, result.Error - } else { - return sum, nil - } -} - -// L2BridgeWithdrawalWithFilter queries for a bridge withdrawal with set fields in the `BridgeTransfer` filter -func (db *bridgeTransfersDB) L2BridgeWithdrawalWithFilter(filter BridgeTransfer) (*L2BridgeWithdrawal, error) { - var withdrawal L2BridgeWithdrawal - result := db.gorm.Where(filter).Take(&withdrawal) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - return &withdrawal, nil -} - -type L2BridgeWithdrawalsResponse struct { - Withdrawals []L2BridgeWithdrawalWithTransactionHashes - Cursor string - HasNextPage bool -} - -// L2BridgeWithdrawalsByAddress retrieves a list of deposits initiated by the specified address, coupled with the L1/L2 transaction hashes -// that complete the bridge transaction. The hashes that correspond with the Bedrock multi-step withdrawal process are also surfaced -func (db *bridgeTransfersDB) L2BridgeWithdrawalsByAddress(address common.Address, cursor string, limit int) (*L2BridgeWithdrawalsResponse, error) { - if limit <= 0 { - return nil, fmt.Errorf("limit must be greater than 0") - } - - // (1) Generate cursor clause provided a cursor tx hash - cursorClause := "" - if cursor != "" { - withdrawalHash := common.HexToHash(cursor) - var txWithdrawal L2TransactionWithdrawal - result := db.gorm.Model(&L2TransactionWithdrawal{}).Where(&L2TransactionWithdrawal{WithdrawalHash: withdrawalHash}).Take(&txWithdrawal) - if result.Error != nil || errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, fmt.Errorf("unable to find transaction with supplied cursor withdrawal hash %s: %w", withdrawalHash, result.Error) - } - cursorClause = fmt.Sprintf("l2_transaction_withdrawals.timestamp <= %d", txWithdrawal.Tx.Timestamp) - } - - // (2) Generate query for fetching ETH withdrawal data - // This query is a UNION (A | B) of two sub-queries: - // - (A) ETH sends from L2 to L1 - // - (B) Bridge withdrawals from L2 to L1 - - // TODO join with l1_bridged_tokens and l2_bridged_tokens - ethAddressString := predeploys.LegacyERC20ETHAddr.String() - - // Coalesce l2 transaction withdrawals that are simply ETH sends - ethTransactionWithdrawals := db.gorm.Model(&L2TransactionWithdrawal{}) - ethTransactionWithdrawals = ethTransactionWithdrawals.Where(&Transaction{FromAddress: address}).Where("amount > 0") - ethTransactionWithdrawals = ethTransactionWithdrawals.Joins("INNER JOIN l2_contract_events ON l2_contract_events.guid = l2_transaction_withdrawals.initiated_l2_event_guid") - ethTransactionWithdrawals = ethTransactionWithdrawals.Joins("LEFT JOIN l1_contract_events AS proven_l1_events ON proven_l1_events.guid = l2_transaction_withdrawals.proven_l1_event_guid") - ethTransactionWithdrawals = ethTransactionWithdrawals.Joins("LEFT JOIN l1_contract_events AS finalized_l1_events ON finalized_l1_events.guid = l2_transaction_withdrawals.finalized_l1_event_guid") - ethTransactionWithdrawals = ethTransactionWithdrawals.Select(` -from_address, to_address, amount, data, withdrawal_hash AS transaction_withdrawal_hash, -l2_contract_events.transaction_hash AS l2_transaction_hash, l2_contract_events.block_hash as l2_block_hash, proven_l1_events.transaction_hash AS proven_l1_transaction_hash, finalized_l1_events.transaction_hash AS finalized_l1_transaction_hash, -l2_transaction_withdrawals.timestamp, NULL AS cross_domain_message_hash, ? AS local_token_address, ? AS remote_token_address`, ethAddressString, ethAddressString) - ethTransactionWithdrawals = ethTransactionWithdrawals.Order("timestamp DESC").Limit(limit + 1) - if cursorClause != "" { - ethTransactionWithdrawals = ethTransactionWithdrawals.Where(cursorClause) - } - - withdrawalsQuery := db.gorm.Model(&L2BridgeWithdrawal{}) - withdrawalsQuery = withdrawalsQuery.Where(&Transaction{FromAddress: address}) - withdrawalsQuery = withdrawalsQuery.Joins("INNER JOIN l2_transaction_withdrawals ON withdrawal_hash = l2_bridge_withdrawals.transaction_withdrawal_hash") - withdrawalsQuery = withdrawalsQuery.Joins("INNER JOIN l2_contract_events ON l2_contract_events.guid = l2_transaction_withdrawals.initiated_l2_event_guid") - withdrawalsQuery = withdrawalsQuery.Joins("LEFT JOIN l1_contract_events AS proven_l1_events ON proven_l1_events.guid = l2_transaction_withdrawals.proven_l1_event_guid") - withdrawalsQuery = withdrawalsQuery.Joins("LEFT JOIN l1_contract_events AS finalized_l1_events ON finalized_l1_events.guid = l2_transaction_withdrawals.finalized_l1_event_guid") - withdrawalsQuery = withdrawalsQuery.Select(` -l2_bridge_withdrawals.from_address, l2_bridge_withdrawals.to_address, l2_bridge_withdrawals.amount, l2_bridge_withdrawals.data, transaction_withdrawal_hash, -l2_contract_events.transaction_hash AS l2_transaction_hash, l2_contract_events.block_hash as l2_block_hash, proven_l1_events.transaction_hash AS proven_l1_transaction_hash, finalized_l1_events.transaction_hash AS finalized_l1_transaction_hash, -l2_bridge_withdrawals.timestamp, cross_domain_message_hash, local_token_address, remote_token_address`) - withdrawalsQuery = withdrawalsQuery.Order("timestamp DESC").Limit(limit + 1) - if cursorClause != "" { - withdrawalsQuery = withdrawalsQuery.Where(cursorClause) - } - - query := db.gorm.Table("(?) AS withdrawals", withdrawalsQuery) - query = query.Joins("UNION (?)", ethTransactionWithdrawals) - query = query.Select("*").Order("timestamp DESC").Limit(limit + 1) - withdrawals := []L2BridgeWithdrawalWithTransactionHashes{} - - // (3) Execute query and process results - result := query.Find(&withdrawals) - - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - nextCursor := "" - hasNextPage := false - if len(withdrawals) > limit { - hasNextPage = true - nextCursor = withdrawals[limit].L2BridgeWithdrawal.TransactionWithdrawalHash.String() - withdrawals = withdrawals[:limit] - } - - response := &L2BridgeWithdrawalsResponse{Withdrawals: withdrawals, Cursor: nextCursor, HasNextPage: hasNextPage} - return response, nil -} diff --git a/indexer/database/contract_events.go b/indexer/database/contract_events.go deleted file mode 100644 index 48aa5a39f619..000000000000 --- a/indexer/database/contract_events.go +++ /dev/null @@ -1,288 +0,0 @@ -package database - -import ( - "errors" - "fmt" - "math/big" - - "gorm.io/gorm" - "gorm.io/gorm/clause" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/log" - - "github.com/google/uuid" -) - -/** - * Types - */ - -type ContractEvent struct { - GUID uuid.UUID `gorm:"primaryKey"` - - // Some useful derived fields - BlockHash common.Hash `gorm:"serializer:bytes"` - ContractAddress common.Address `gorm:"serializer:bytes"` - TransactionHash common.Hash `gorm:"serializer:bytes"` - LogIndex uint64 - - EventSignature common.Hash `gorm:"serializer:bytes"` - Timestamp uint64 - - // NOTE: NOT ALL THE DERIVED FIELDS ON `types.Log` ARE - // AVAILABLE. FIELDS LISTED ABOVE ARE FILLED IN - RLPLog *types.Log `gorm:"serializer:rlp;column:rlp_bytes"` -} - -func ContractEventFromLog(log *types.Log, timestamp uint64) ContractEvent { - eventSig := common.Hash{} - if len(log.Topics) > 0 { - eventSig = log.Topics[0] - } - - return ContractEvent{ - GUID: uuid.New(), - - BlockHash: log.BlockHash, - TransactionHash: log.TxHash, - ContractAddress: log.Address, - - EventSignature: eventSig, - LogIndex: uint64(log.Index), - - Timestamp: timestamp, - - RLPLog: log, - } -} - -func (c *ContractEvent) AfterFind(tx *gorm.DB) error { - // Fill in some of the derived fields that are not - // populated when decoding the RLPLog from RLP - c.RLPLog.BlockHash = c.BlockHash - c.RLPLog.TxHash = c.TransactionHash - c.RLPLog.Index = uint(c.LogIndex) - return nil -} - -type L1ContractEvent struct { - ContractEvent `gorm:"embedded"` -} - -type L2ContractEvent struct { - ContractEvent `gorm:"embedded"` -} - -type ContractEventsView interface { - L1ContractEvent(uuid.UUID) (*L1ContractEvent, error) - L1ContractEventWithFilter(ContractEvent) (*L1ContractEvent, error) - L1ContractEventsWithFilter(ContractEvent, *big.Int, *big.Int) ([]L1ContractEvent, error) - L1LatestContractEventWithFilter(ContractEvent) (*L1ContractEvent, error) - - L2ContractEvent(uuid.UUID) (*L2ContractEvent, error) - L2ContractEventWithFilter(ContractEvent) (*L2ContractEvent, error) - L2ContractEventsWithFilter(ContractEvent, *big.Int, *big.Int) ([]L2ContractEvent, error) - L2LatestContractEventWithFilter(ContractEvent) (*L2ContractEvent, error) - - ContractEventsWithFilter(ContractEvent, string, *big.Int, *big.Int) ([]ContractEvent, error) -} - -type ContractEventsDB interface { - ContractEventsView - - StoreL1ContractEvents([]L1ContractEvent) error - StoreL2ContractEvents([]L2ContractEvent) error -} - -/** - * Implementation - */ - -type contractEventsDB struct { - log log.Logger - gorm *gorm.DB -} - -func newContractEventsDB(log log.Logger, db *gorm.DB) ContractEventsDB { - return &contractEventsDB{log: log.New("table", "events"), gorm: db} -} - -// L1 - -func (db *contractEventsDB) StoreL1ContractEvents(events []L1ContractEvent) error { - // Since the block hash refers back to L1, we dont necessarily have to check - // that the RLP bytes match when doing conflict resolution. - deduped := db.gorm.Clauses(clause.OnConflict{OnConstraint: "l1_contract_events_block_hash_log_index_key", DoNothing: true}) - result := deduped.Create(&events) - if result.Error == nil && int(result.RowsAffected) < len(events) { - db.log.Warn("ignored L1 contract event duplicates", "duplicates", len(events)-int(result.RowsAffected)) - } - - return result.Error -} - -func (db *contractEventsDB) L1ContractEvent(uuid uuid.UUID) (*L1ContractEvent, error) { - return db.L1ContractEventWithFilter(ContractEvent{GUID: uuid}) -} - -func (db *contractEventsDB) L1ContractEventWithFilter(filter ContractEvent) (*L1ContractEvent, error) { - var l1ContractEvent L1ContractEvent - result := db.gorm.Where(&filter).Take(&l1ContractEvent) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - return &l1ContractEvent, nil -} - -func (db *contractEventsDB) L1ContractEventsWithFilter(filter ContractEvent, fromHeight, toHeight *big.Int) ([]L1ContractEvent, error) { - if fromHeight == nil { - fromHeight = big.NewInt(0) - } - if toHeight == nil { - return nil, errors.New("end height unspecified") - } - if fromHeight.Cmp(toHeight) > 0 { - return nil, fmt.Errorf("fromHeight %d is greater than toHeight %d", fromHeight, toHeight) - } - - query := db.gorm.Table("l1_contract_events").Where(&filter) - query = query.Joins("INNER JOIN l1_block_headers ON l1_contract_events.block_hash = l1_block_headers.hash") - query = query.Where("l1_block_headers.number >= ? AND l1_block_headers.number <= ?", fromHeight, toHeight) - query = query.Order("l1_block_headers.number ASC, l1_contract_events.log_index ASC").Select("l1_contract_events.*") - - // NOTE: We use `Find` here instead of `Scan` since `Scan` doesn't not support - // model hooks like `ContractEvent#AfterFind`. Functionally they are the same - var events []L1ContractEvent - result := query.Find(&events) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - return events, nil -} - -func (db *contractEventsDB) L1LatestContractEventWithFilter(filter ContractEvent) (*L1ContractEvent, error) { - var l1ContractEvent L1ContractEvent - result := db.gorm.Where(&filter).Order("timestamp DESC").Take(&l1ContractEvent) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - return &l1ContractEvent, nil -} - -// L2 - -func (db *contractEventsDB) StoreL2ContractEvents(events []L2ContractEvent) error { - // Since the block hash refers back to L2, we dont necessarily have to check - // that the RLP bytes match when doing conflict resolution. - deduped := db.gorm.Clauses(clause.OnConflict{OnConstraint: "l2_contract_events_block_hash_log_index_key", DoNothing: true}) - result := deduped.Create(&events) - if result.Error == nil && int(result.RowsAffected) < len(events) { - db.log.Warn("ignored L2 contract event duplicates", "duplicates", len(events)-int(result.RowsAffected)) - } - - return result.Error -} - -func (db *contractEventsDB) L2ContractEvent(uuid uuid.UUID) (*L2ContractEvent, error) { - return db.L2ContractEventWithFilter(ContractEvent{GUID: uuid}) -} - -func (db *contractEventsDB) L2ContractEventWithFilter(filter ContractEvent) (*L2ContractEvent, error) { - var l2ContractEvent L2ContractEvent - result := db.gorm.Where(&filter).Take(&l2ContractEvent) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - return &l2ContractEvent, nil -} - -func (db *contractEventsDB) L2ContractEventsWithFilter(filter ContractEvent, fromHeight, toHeight *big.Int) ([]L2ContractEvent, error) { - if fromHeight == nil { - fromHeight = big.NewInt(0) - } - if toHeight == nil { - return nil, errors.New("end height unspecified") - } - if fromHeight.Cmp(toHeight) > 0 { - return nil, fmt.Errorf("fromHeight %d is greater than toHeight %d", fromHeight, toHeight) - } - - query := db.gorm.Table("l2_contract_events").Where(&filter) - query = query.Joins("INNER JOIN l2_block_headers ON l2_contract_events.block_hash = l2_block_headers.hash") - query = query.Where("l2_block_headers.number >= ? AND l2_block_headers.number <= ?", fromHeight, toHeight) - query = query.Order("l2_block_headers.number ASC, l2_contract_events.log_index ASC").Select("l2_contract_events.*") - - // NOTE: We use `Find` here instead of `Scan` since `Scan` doesn't not support - // model hooks like `ContractEvent#AfterFind`. Functionally they are the same - var events []L2ContractEvent - result := query.Find(&events) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - return events, nil -} - -func (db *contractEventsDB) L2LatestContractEventWithFilter(filter ContractEvent) (*L2ContractEvent, error) { - var l2ContractEvent L2ContractEvent - result := db.gorm.Where(&filter).Order("timestamp DESC").Take(&l2ContractEvent) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return nil, nil - } - return nil, result.Error - } - - return &l2ContractEvent, nil -} - -// Auxiliary methods for both L1 and L2 - -// ContractEventsWithFilter will retrieve contract events within the specified range according to the `chainSelector`. -func (db *contractEventsDB) ContractEventsWithFilter(filter ContractEvent, chainSelector string, fromHeight, toHeight *big.Int) ([]ContractEvent, error) { - switch chainSelector { - case "l1": - l1Events, err := db.L1ContractEventsWithFilter(filter, fromHeight, toHeight) - if err != nil { - return nil, err - } - events := make([]ContractEvent, len(l1Events)) - for i := range l1Events { - events[i] = l1Events[i].ContractEvent - } - return events, nil - case "l2": - l2Events, err := db.L2ContractEventsWithFilter(filter, fromHeight, toHeight) - if err != nil { - return nil, err - } - events := make([]ContractEvent, len(l2Events)) - for i := range l2Events { - events[i] = l2Events[i].ContractEvent - } - return events, nil - default: - return nil, errors.New("expected 'l1' or 'l2' for chain selection") - } -} diff --git a/indexer/database/db.go b/indexer/database/db.go deleted file mode 100644 index fdb8db253a04..000000000000 --- a/indexer/database/db.go +++ /dev/null @@ -1,147 +0,0 @@ -// Database module defines the data DB struct which wraps specific DB interfaces for L1/L2 block headers, contract events, bridging schemas. -package database - -import ( - "context" - "fmt" - "os" - "path/filepath" - - "github.com/ethereum-optimism/optimism/indexer/config" - _ "github.com/ethereum-optimism/optimism/indexer/database/serializers" - "github.com/ethereum-optimism/optimism/op-service/retry" - - "github.com/pkg/errors" - - "github.com/ethereum/go-ethereum/log" - - "gorm.io/driver/postgres" - "gorm.io/gorm" -) - -type DB struct { - gorm *gorm.DB - log log.Logger - - Blocks BlocksDB - ContractEvents ContractEventsDB - BridgeTransfers BridgeTransfersDB - BridgeMessages BridgeMessagesDB - BridgeTransactions BridgeTransactionsDB -} - -// NewDB connects to the configured DB, and provides client-bindings to it. -// The initial connection may fail, or the dial may be cancelled with the provided context. -func NewDB(ctx context.Context, log log.Logger, dbConfig config.DBConfig) (*DB, error) { - log = log.New("module", "db") - - dsn := fmt.Sprintf("host=%s dbname=%s sslmode=disable", dbConfig.Host, dbConfig.Name) - if dbConfig.Port != 0 { - dsn += fmt.Sprintf(" port=%d", dbConfig.Port) - } - if dbConfig.User != "" { - dsn += fmt.Sprintf(" user=%s", dbConfig.User) - } - if dbConfig.Password != "" { - dsn += fmt.Sprintf(" password=%s", dbConfig.Password) - } - - gormConfig := gorm.Config{ - Logger: newLogger(log), - - // The indexer will explicitly manage the transactions - SkipDefaultTransaction: true, - - // The postgres parameter counter for a given query is represented with uint16, - // resulting in a parameter limit of 65535. In order to avoid reaching this limit - // we'll utilize a batch size of 3k for inserts, well below the limit as long as - // the number of columns < 20. - CreateBatchSize: 3_000, - } - - retryStrategy := &retry.ExponentialStrategy{Min: 1000, Max: 20_000, MaxJitter: 250} - gorm, err := retry.Do[*gorm.DB](context.Background(), 10, retryStrategy, func() (*gorm.DB, error) { - gorm, err := gorm.Open(postgres.Open(dsn), &gormConfig) - if err != nil { - return nil, fmt.Errorf("failed to connect to database: %w", err) - } - - return gorm, nil - }) - - if err != nil { - return nil, err - } - - db := &DB{ - gorm: gorm, - log: log, - Blocks: newBlocksDB(log, gorm), - ContractEvents: newContractEventsDB(log, gorm), - BridgeTransfers: newBridgeTransfersDB(log, gorm), - BridgeMessages: newBridgeMessagesDB(log, gorm), - BridgeTransactions: newBridgeTransactionsDB(log, gorm), - } - - return db, nil -} - -// Transaction executes all operations conducted with the supplied database in a single -// transaction. If the supplied function errors, the transaction is rolled back. -func (db *DB) Transaction(fn func(db *DB) error) error { - return db.gorm.Transaction(func(tx *gorm.DB) error { - txDB := &DB{ - gorm: tx, - Blocks: newBlocksDB(db.log, tx), - ContractEvents: newContractEventsDB(db.log, tx), - BridgeTransfers: newBridgeTransfersDB(db.log, tx), - BridgeMessages: newBridgeMessagesDB(db.log, tx), - BridgeTransactions: newBridgeTransactionsDB(db.log, tx), - } - - return fn(txDB) - }) -} - -func (db *DB) Close() error { - db.log.Info("closing database") - sql, err := db.gorm.DB() - if err != nil { - return err - } - - return sql.Close() -} - -func (db *DB) ExecuteSQLMigration(migrationsFolder string) error { - err := filepath.Walk(migrationsFolder, func(path string, info os.FileInfo, err error) error { - // Check for any walking error - if err != nil { - return errors.Wrap(err, fmt.Sprintf("Failed to process migration file: %s", path)) - } - - // Skip directories - if info.IsDir() { - return nil - } - - // Read the migration file content - db.log.Info("reading sql file", "path", path) - fileContent, readErr := os.ReadFile(path) - if readErr != nil { - return errors.Wrap(readErr, fmt.Sprintf("Error reading SQL file: %s", path)) - } - - // Execute the migration - db.log.Info("executing sql file", "path", path) - execErr := db.gorm.Exec(string(fileContent)).Error - if execErr != nil { - return errors.Wrap(execErr, fmt.Sprintf("Error executing SQL script: %s", path)) - } - - return nil - }) - - db.log.Info("finished migrations") - return err -} diff --git a/indexer/database/logger.go b/indexer/database/logger.go deleted file mode 100644 index 5ff7c0894924..000000000000 --- a/indexer/database/logger.go +++ /dev/null @@ -1,58 +0,0 @@ -package database - -import ( - "context" - "fmt" - "strings" - "time" - - "github.com/ethereum/go-ethereum/log" - - "gorm.io/gorm/logger" -) - -var ( - _ logger.Interface = Logger{} - - SlowThresholdMilliseconds int64 = 500 -) - -type Logger struct { - log log.Logger -} - -func newLogger(log log.Logger) Logger { - return Logger{log} -} - -func (l Logger) LogMode(lvl logger.LogLevel) logger.Interface { - return l -} - -func (l Logger) Info(ctx context.Context, msg string, data ...interface{}) { - l.log.Info(fmt.Sprintf(msg, data...)) -} - -func (l Logger) Warn(ctx context.Context, msg string, data ...interface{}) { - l.log.Warn(fmt.Sprintf(msg, data...)) -} - -func (l Logger) Error(ctx context.Context, msg string, data ...interface{}) { - l.log.Error(fmt.Sprintf(msg, data...)) -} - -func (l Logger) Trace(ctx context.Context, begin time.Time, fc func() (sql string, rowsAffected int64), err error) { - elapsedMs := time.Since(begin).Milliseconds() - - // omit any values for batch inserts as they can be very long - sql, rows := fc() - if i := strings.Index(strings.ToLower(sql), "values"); i > 0 { - sql = fmt.Sprintf("%sVALUES (...)", sql[:i]) - } - - if elapsedMs < SlowThresholdMilliseconds { - l.log.Debug("database operation", "duration_ms", elapsedMs, "rows_affected", rows, "sql", sql) - } else { - l.log.Warn("database operation", "duration_ms", elapsedMs, "rows_affected", rows, "sql", sql) - } -} diff --git a/indexer/database/mocks.go b/indexer/database/mocks.go deleted file mode 100644 index 07303c7c1e6c..000000000000 --- a/indexer/database/mocks.go +++ /dev/null @@ -1,98 +0,0 @@ -package database - -import ( - "github.com/ethereum/go-ethereum/common" - "gorm.io/gorm" - - "github.com/stretchr/testify/mock" -) - -type MockBlocksView struct { - mock.Mock -} - -func (m *MockBlocksView) L1BlockHeader(common.Hash) (*L1BlockHeader, error) { - args := m.Called() - - header, ok := args.Get(0).(*L1BlockHeader) - if !ok { - header = nil - } - return header, args.Error(1) -} - -func (m *MockBlocksView) L1BlockHeaderWithFilter(BlockHeader) (*L1BlockHeader, error) { - args := m.Called() - return args.Get(0).(*L1BlockHeader), args.Error(1) -} - -func (m *MockBlocksView) L1BlockHeaderWithScope(func(*gorm.DB) *gorm.DB) (*L1BlockHeader, error) { - args := m.Called() - return args.Get(0).(*L1BlockHeader), args.Error(1) -} - -func (m *MockBlocksView) L1LatestBlockHeader() (*L1BlockHeader, error) { - args := m.Called() - - header, ok := args.Get(0).(*L1BlockHeader) - if !ok { - header = nil - } - - return header, args.Error(1) -} - -func (m *MockBlocksView) L2BlockHeader(common.Hash) (*L2BlockHeader, error) { - args := m.Called() - return args.Get(0).(*L2BlockHeader), args.Error(1) -} - -func (m *MockBlocksView) L2BlockHeaderWithFilter(BlockHeader) (*L2BlockHeader, error) { - args := m.Called() - return args.Get(0).(*L2BlockHeader), args.Error(1) -} - -func (m *MockBlocksView) L2BlockHeaderWithScope(func(*gorm.DB) *gorm.DB) (*L2BlockHeader, error) { - args := m.Called() - return args.Get(0).(*L2BlockHeader), args.Error(2) -} - -func (m *MockBlocksView) L2LatestBlockHeader() (*L2BlockHeader, error) { - args := m.Called() - return args.Get(0).(*L2BlockHeader), args.Error(1) -} - -type MockBlocksDB struct { - MockBlocksView -} - -func (m *MockBlocksDB) StoreL1BlockHeaders(headers []L1BlockHeader) error { - args := m.Called(headers) - return args.Error(1) -} - -func (m *MockBlocksDB) StoreL2BlockHeaders(headers []L2BlockHeader) error { - args := m.Called(headers) - return args.Error(1) -} - -func (m *MockBlocksDB) DeleteReorgedState(timestamp uint64) error { - args := m.Called(timestamp) - return args.Error(1) -} - -// MockDB is a mock database that can be used for testing -type MockDB struct { - MockBlocks *MockBlocksDB - DB *DB -} - -func NewMockDB() *MockDB { - // This is currently just mocking the BlocksDB interface - // but can be expanded to mock other inner DB interfaces - // as well - mockBlocks := new(MockBlocksDB) - db := &DB{Blocks: mockBlocks} - - return &MockDB{MockBlocks: mockBlocks, DB: db} -} diff --git a/indexer/database/serializers/bytes.go b/indexer/database/serializers/bytes.go deleted file mode 100644 index c00cc9603085..000000000000 --- a/indexer/database/serializers/bytes.go +++ /dev/null @@ -1,75 +0,0 @@ -package serializers - -import ( - "context" - "fmt" - "reflect" - "strings" - - "github.com/ethereum/go-ethereum/common/hexutil" - "gorm.io/gorm/schema" -) - -type BytesSerializer struct{} -type BytesInterface interface{ Bytes() []byte } -type SetBytesInterface interface{ SetBytes([]byte) } - -func init() { - schema.RegisterSerializer("bytes", BytesSerializer{}) -} - -func (BytesSerializer) Scan(ctx context.Context, field *schema.Field, dst reflect.Value, dbValue interface{}) error { - if dbValue == nil { - return nil - } - - hexStr, ok := dbValue.(string) - if !ok { - return fmt.Errorf("expected hex string as the database value: %T", dbValue) - } - - b, err := hexutil.Decode(hexStr) - if err != nil { - return fmt.Errorf("failed to decode database value: %w", err) - } - - fieldValue := reflect.New(field.FieldType) - fieldInterface := fieldValue.Interface() - - // Detect if we're deserializing into a pointer. If so, we'll need to - // also allocate memory to where the allocated pointer should point to - if field.FieldType.Kind() == reflect.Pointer { - nestedField := fieldValue.Elem() - if nestedField.Elem().Kind() == reflect.Pointer { - return fmt.Errorf("double pointers are the max depth supported: %T", fieldValue) - } - - // We'll want to call `SetBytes` on the pointer to - // the allocated memory and not the double pointer - nestedField.Set(reflect.New(field.FieldType.Elem())) - fieldInterface = nestedField.Interface() - } - - fieldSetBytes, ok := fieldInterface.(SetBytesInterface) - if !ok { - return fmt.Errorf("field does not satisfy the `SetBytes([]byte)` interface: %T", fieldInterface) - } - - fieldSetBytes.SetBytes(b) - field.ReflectValueOf(ctx, dst).Set(fieldValue.Elem()) - return nil -} - -func (BytesSerializer) Value(ctx context.Context, field *schema.Field, dst reflect.Value, fieldValue interface{}) (interface{}, error) { - if fieldValue == nil || (field.FieldType.Kind() == reflect.Pointer && reflect.ValueOf(fieldValue).IsNil()) { - return nil, nil - } - - fieldBytes, ok := fieldValue.(BytesInterface) - if !ok { - return nil, fmt.Errorf("field does not satisfy the `Bytes() []byte` interface") - } - - hexStr := hexutil.Encode(fieldBytes.Bytes()) - return strings.ToLower(hexStr), nil -} diff --git a/indexer/database/serializers/rlp.go b/indexer/database/serializers/rlp.go deleted file mode 100644 index 9af5a28df82a..000000000000 --- a/indexer/database/serializers/rlp.go +++ /dev/null @@ -1,57 +0,0 @@ -package serializers - -import ( - "context" - "fmt" - "reflect" - "strings" - - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/rlp" - - "gorm.io/gorm/schema" -) - -type RLPSerializer struct{} - -func init() { - schema.RegisterSerializer("rlp", RLPSerializer{}) -} - -func (RLPSerializer) Scan(ctx context.Context, field *schema.Field, dst reflect.Value, dbValue interface{}) error { - if dbValue == nil { - return nil - } - - hexStr, ok := dbValue.(string) - if !ok { - return fmt.Errorf("expected hex string as the database value: %T", dbValue) - } - - b, err := hexutil.Decode(hexStr) - if err != nil { - return fmt.Errorf("failed to decode database value: %w", err) - } - - fieldValue := reflect.New(field.FieldType) - if err := rlp.DecodeBytes(b, fieldValue.Interface()); err != nil { - return fmt.Errorf("failed to decode rlp bytes: %w", err) - } - - field.ReflectValueOf(ctx, dst).Set(fieldValue.Elem()) - return nil -} - -func (RLPSerializer) Value(ctx context.Context, field *schema.Field, dst reflect.Value, fieldValue interface{}) (interface{}, error) { - if fieldValue == nil || (field.FieldType.Kind() == reflect.Pointer && reflect.ValueOf(fieldValue).IsNil()) { - return nil, nil - } - - rlpBytes, err := rlp.EncodeToBytes(fieldValue) - if err != nil { - return nil, fmt.Errorf("failed to encode rlp bytes: %w", err) - } - - hexStr := hexutil.Encode(rlpBytes) - return strings.ToLower(hexStr), nil -} diff --git a/indexer/database/serializers/u256.go b/indexer/database/serializers/u256.go deleted file mode 100644 index 4ccd775e9c68..000000000000 --- a/indexer/database/serializers/u256.go +++ /dev/null @@ -1,60 +0,0 @@ -package serializers - -import ( - "context" - "fmt" - "math/big" - "reflect" - - "github.com/jackc/pgtype" - "gorm.io/gorm/schema" -) - -var ( - big10 = big.NewInt(10) - u256BigIntOverflow = new(big.Int).Exp(big.NewInt(2), big.NewInt(256), nil) -) - -type U256Serializer struct{} - -func init() { - schema.RegisterSerializer("u256", U256Serializer{}) -} - -func (U256Serializer) Scan(ctx context.Context, field *schema.Field, dst reflect.Value, dbValue interface{}) error { - if dbValue == nil { - return nil - } else if field.FieldType != reflect.TypeOf((*big.Int)(nil)) { - return fmt.Errorf("can only deserialize into a *big.Int: %T", field.FieldType) - } - - numeric := new(pgtype.Numeric) - err := numeric.Scan(dbValue) - if err != nil { - return err - } - - bigInt := numeric.Int - if numeric.Exp > 0 { - factor := new(big.Int).Exp(big10, big.NewInt(int64(numeric.Exp)), nil) - bigInt.Mul(bigInt, factor) - } - - if bigInt.Cmp(u256BigIntOverflow) >= 0 { - return fmt.Errorf("deserialized number larger than u256 can hold: %s", bigInt) - } - - field.ReflectValueOf(ctx, dst).Set(reflect.ValueOf(bigInt)) - return nil -} - -func (U256Serializer) Value(ctx context.Context, field *schema.Field, dst reflect.Value, fieldValue interface{}) (interface{}, error) { - if fieldValue == nil || (field.FieldType.Kind() == reflect.Pointer && reflect.ValueOf(fieldValue).IsNil()) { - return nil, nil - } else if field.FieldType != reflect.TypeOf((*big.Int)(nil)) { - return nil, fmt.Errorf("can only serialize a *big.Int: %T", field.FieldType) - } - - numeric := pgtype.Numeric{Int: fieldValue.(*big.Int), Status: pgtype.Present} - return numeric.Value() -} diff --git a/indexer/database/types.go b/indexer/database/types.go deleted file mode 100644 index 4b30ef62a0c1..000000000000 --- a/indexer/database/types.go +++ /dev/null @@ -1,50 +0,0 @@ -package database - -import ( - "io" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/rlp" -) - -// Wrapper over types.Header such that we can get an RLP -// encoder over it via a `types.Block` wrapper - -type RLPHeader types.Header - -func (h *RLPHeader) EncodeRLP(w io.Writer) error { - return types.NewBlockWithHeader((*types.Header)(h)).EncodeRLP(w) -} - -func (h *RLPHeader) DecodeRLP(s *rlp.Stream) error { - block := new(types.Block) - err := block.DecodeRLP(s) - if err != nil { - return err - } - - header := block.Header() - *h = (RLPHeader)(*header) - return nil -} - -func (h *RLPHeader) Header() *types.Header { - return (*types.Header)(h) -} - -func (h *RLPHeader) Hash() common.Hash { - return h.Header().Hash() -} - -// Type definition for []byte to conform to the -// interface expected by the `bytes` serializer - -type Bytes []byte - -func (b Bytes) Bytes() []byte { - return b[:] -} -func (b *Bytes) SetBytes(bytes []byte) { - *b = bytes -} diff --git a/indexer/docker-compose.yml b/indexer/docker-compose.yml deleted file mode 100644 index f36aa0411508..000000000000 --- a/indexer/docker-compose.yml +++ /dev/null @@ -1,107 +0,0 @@ -version: '3.8' - -services: - postgres: - image: postgres:14.1 - environment: - - POSTGRES_USER=postgres - - POSTGRES_DB=indexer - - PGDATA=/data/postgres - - POSTGRES_HOST_AUTH_METHOD=trust - healthcheck: - test: [ "CMD-SHELL", "pg_isready -q -U postgres -d indexer" ] - ports: - # deconflict with postgres that might be running already on - # the host machine - - "5433:5432" - volumes: - - postgres_data:/data/postgres - - ./migrations:/docker-entrypoint-initdb.d/ - - index: - build: - context: .. - dockerfile: indexer/Dockerfile - command: ["/bin/sh", "-c", "indexer migrate && indexer index"] - expose: - - "8100" - - "7300" - environment: - - INDEXER_CONFIG=/app/indexer/config.toml - - INDEXER_L1_RPC_URL=http://host.docker.internal:8545 - - INDEXER_L2_RPC_URL=http://host.docker.internal:9545 - - DB_HOST=postgres - - DB_PORT=5432 - - DB_USER=postgres - - DB_NAME=indexer - volumes: - - ./indexer.toml:/app/indexer/config.toml/:ro - # needed only when running against the local devnet such - # that it can bootstrap the local deployment addresses - - ../go.mod:/app/go.mod/:ro - - ../.devnet/addresses.json:/app/.devnet/addresses.json/:ro - healthcheck: - test: wget index:8100/healthz -q -O - > /dev/null 2>&1 - depends_on: - postgres: - condition: service_healthy - - api: - build: - context: .. - dockerfile: indexer/Dockerfile - command: ["indexer", "api"] - environment: - - INDEXER_CONFIG=/app/indexer/config.toml - - DB_HOST=postgres - - DB_PORT=5432 - - DB_USER=postgres - - DB_NAME=indexer - ports: - - "8100:8100" - expose: - - "7300" - volumes: - - ./indexer.toml:/app/indexer/config.toml/:ro - # needed only when running against the local devnet such - # that it can bootstrap the local deployment addresses - - ../go.mod:/app/go.mod/:ro - - ../.devnet/addresses.json:/app/.devnet/addresses.json/:ro - healthcheck: - test: wget api:8100/healthz -q -O - > /dev/null 2>&1 - depends_on: - postgres: - condition: service_healthy - - prometheus: - image: prom/prometheus:latest - expose: - - "9090" - volumes: - - ./ops/prometheus:/etc/prometheus/:ro - - prometheus_data:/prometheus - depends_on: - index: - condition: service_healthy - api: - condition: service_healthy - - grafana: - image: grafana/grafana:latest - environment: - - GF_SECURITY_ADMIN_PASSWORD=optimism - - GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH=/var/lib/grafana/dashboards/indexer.json - ports: - - "3000:3000" - volumes: - - ./ops/grafana/provisioning:/etc/grafana/provisioning/:ro - - ./ops/grafana/dashboards:/var/lib/grafana/dashboards/:ro - - grafana_data:/var/lib/grafana - depends_on: - prometheus: - condition: service_started - -volumes: - postgres_data: - prometheus_data: - grafana_data: diff --git a/indexer/e2e_tests/bridge_messages_e2e_test.go b/indexer/e2e_tests/bridge_messages_e2e_test.go deleted file mode 100644 index 44914574e15a..000000000000 --- a/indexer/e2e_tests/bridge_messages_e2e_test.go +++ /dev/null @@ -1,191 +0,0 @@ -package e2e_tests - -import ( - "context" - "math/big" - "testing" - "time" - - "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/transactions" - - "github.com/ethereum-optimism/optimism/indexer/bindings" - e2etest_utils "github.com/ethereum-optimism/optimism/indexer/e2e_tests/utils" - op_e2e "github.com/ethereum-optimism/optimism/op-e2e" - "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait" - "github.com/ethereum-optimism/optimism/op-node/withdrawals" - "github.com/ethereum-optimism/optimism/op-service/predeploys" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/params" - - "github.com/stretchr/testify/require" -) - -func TestE2EBridgeL1CrossDomainMessenger(t *testing.T) { - testSuite := createE2ETestSuite(t) - - l1CrossDomainMessenger, err := bindings.NewL1CrossDomainMessenger(testSuite.OpCfg.L1Deployments.L1CrossDomainMessengerProxy, testSuite.L1Client) - require.NoError(t, err) - - aliceAddr := testSuite.OpCfg.Secrets.Addresses().Alice - - // Attach 1ETH and random calldata to the sent messages - calldata := []byte{byte(1), byte(2), byte(3)} - l1Opts, err := bind.NewKeyedTransactorWithChainID(testSuite.OpCfg.Secrets.Alice, testSuite.OpCfg.L1ChainIDBig()) - require.NoError(t, err) - l1Opts.Value = big.NewInt(params.Ether) - - // (1) Send the Message - sentMsgTx, err := transactions.PadGasEstimate(l1Opts, 1.2, func(opts *bind.TransactOpts) (*types.Transaction, error) { - return l1CrossDomainMessenger.SendMessage(opts, aliceAddr, calldata, 100_000) - }) - require.NoError(t, err) - sentMsgReceipt, err := wait.ForReceiptOK(context.Background(), testSuite.L1Client, sentMsgTx.Hash()) - require.NoError(t, err) - - depositInfo, err := e2etest_utils.ParseDepositInfo(sentMsgReceipt) - require.NoError(t, err) - - // wait for processor catchup - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l1Header := testSuite.Indexer.BridgeProcessor.LastL1Header - return l1Header != nil && l1Header.Number.Uint64() >= sentMsgReceipt.BlockNumber.Uint64(), nil - })) - - parsedMessage, err := e2etest_utils.ParseCrossDomainMessage(sentMsgReceipt) - require.NoError(t, err) - - // nonce for this message is zero but the current cross domain message version is 1. - nonceBytes := [31]byte{0: byte(1)} - nonce := new(big.Int).SetBytes(nonceBytes[:]) - - sentMessage, err := testSuite.DB.BridgeMessages.L1BridgeMessage(parsedMessage.MessageHash) - require.NoError(t, err) - require.NotNil(t, sentMessage) - require.NotNil(t, sentMessage.SentMessageEventGUID) - require.Equal(t, depositInfo.DepositTx.SourceHash, sentMessage.TransactionSourceHash) - require.Equal(t, nonce.Uint64(), sentMessage.Nonce.Uint64()) - require.Equal(t, uint64(100_000), sentMessage.GasLimit.Uint64()) - require.Equal(t, uint64(params.Ether), sentMessage.Tx.Amount.Uint64()) - require.Equal(t, aliceAddr, sentMessage.Tx.FromAddress) - require.Equal(t, aliceAddr, sentMessage.Tx.ToAddress) - require.ElementsMatch(t, calldata, sentMessage.Tx.Data) - - // (2) Process RelayedMessage on inclusion - // - We dont assert that `RelayedMessageEventGUID` is nil prior to inclusion since there isn't a - // a straightforward way of pausing/resuming the processors at the right time. The codepath is the - // same for L2->L1 messages which does check for this so we are still covered - transaction, err := testSuite.DB.BridgeTransactions.L1TransactionDeposit(sentMessage.TransactionSourceHash) - require.NoError(t, err) - - // wait for processor catchup - l2DepositReceipt, err := wait.ForReceiptOK(context.Background(), testSuite.L2Client, transaction.L2TransactionHash) - require.NoError(t, err) - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l2Header := testSuite.Indexer.BridgeProcessor.LastFinalizedL2Header - return l2Header != nil && l2Header.Number.Uint64() >= l2DepositReceipt.BlockNumber.Uint64(), nil - })) - - sentMessage, err = testSuite.DB.BridgeMessages.L1BridgeMessage(parsedMessage.MessageHash) - require.NoError(t, err) - require.NotNil(t, sentMessage) - require.NotNil(t, sentMessage.RelayedMessageEventGUID) - - event, err := testSuite.DB.ContractEvents.L2ContractEvent(*sentMessage.RelayedMessageEventGUID) - require.NoError(t, err) - require.NotNil(t, event) - require.Equal(t, event.TransactionHash, transaction.L2TransactionHash) -} - -func TestE2EBridgeL2CrossDomainMessenger(t *testing.T) { - testSuite := createE2ETestSuite(t) - - optimismPortal, err := bindings.NewOptimismPortal(testSuite.OpCfg.L1Deployments.OptimismPortalProxy, testSuite.L1Client) - require.NoError(t, err) - l2CrossDomainMessenger, err := bindings.NewL2CrossDomainMessenger(predeploys.L2CrossDomainMessengerAddr, testSuite.L2Client) - require.NoError(t, err) - - aliceAddr := testSuite.OpCfg.Secrets.Addresses().Alice - - // Attach 1ETH and random calldata to the sent messages - calldata := []byte{byte(1), byte(2), byte(3)} - l2Opts, err := bind.NewKeyedTransactorWithChainID(testSuite.OpCfg.Secrets.Alice, testSuite.OpCfg.L2ChainIDBig()) - require.NoError(t, err) - l2Opts.Value = big.NewInt(params.Ether) - - // Ensure L1 has enough funds for the withdrawal by depositing an equal amount into the OptimismPortal - l1Opts, err := bind.NewKeyedTransactorWithChainID(testSuite.OpCfg.Secrets.Alice, testSuite.OpCfg.L1ChainIDBig()) - require.NoError(t, err) - l1Opts.Value = l2Opts.Value - depositTx, err := transactions.PadGasEstimate(l1Opts, 1.2, func(opts *bind.TransactOpts) (*types.Transaction, error) { - return optimismPortal.Receive(opts) - }) - require.NoError(t, err) - depositReceipt, err := wait.ForReceiptOK(context.Background(), testSuite.L1Client, depositTx.Hash()) - require.NoError(t, err) - depositInfo, err := e2etest_utils.ParseDepositInfo(depositReceipt) - require.NoError(t, err) - depositL2TxHash := types.NewTx(depositInfo.DepositTx).Hash() - _, err = wait.ForReceiptOK(context.Background(), testSuite.L2Client, depositL2TxHash) - require.NoError(t, err) - - // (1) Send the Message - sentMsgTx, err := transactions.PadGasEstimate(l2Opts, 1.2, func(opts *bind.TransactOpts) (*types.Transaction, error) { - return l2CrossDomainMessenger.SendMessage(opts, aliceAddr, calldata, 100_000) - }) - require.NoError(t, err) - sentMsgReceipt, err := wait.ForReceiptOK(context.Background(), testSuite.L2Client, sentMsgTx.Hash()) - require.NoError(t, err) - - msgPassed, err := withdrawals.ParseMessagePassed(sentMsgReceipt) - require.NoError(t, err) - withdrawalHash, err := withdrawals.WithdrawalHash(msgPassed) - require.NoError(t, err) - - // wait for processor catchup - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l2Header := testSuite.Indexer.BridgeProcessor.LastL2Header - return l2Header != nil && l2Header.Number.Uint64() >= sentMsgReceipt.BlockNumber.Uint64(), nil - })) - - parsedMessage, err := e2etest_utils.ParseCrossDomainMessage(sentMsgReceipt) - require.NoError(t, err) - - // nonce for this message is zero but the current message version is 1. - nonceBytes := [31]byte{0: byte(1)} - nonce := new(big.Int).SetBytes(nonceBytes[:]) - - sentMessage, err := testSuite.DB.BridgeMessages.L2BridgeMessage(parsedMessage.MessageHash) - require.NoError(t, err) - require.NotNil(t, sentMessage) - require.NotNil(t, sentMessage.SentMessageEventGUID) - require.Equal(t, withdrawalHash, sentMessage.TransactionWithdrawalHash) - require.Equal(t, nonce.Uint64(), sentMessage.Nonce.Uint64()) - require.Equal(t, uint64(100_000), sentMessage.GasLimit.Uint64()) - require.Equal(t, uint64(params.Ether), sentMessage.Tx.Amount.Uint64()) - require.Equal(t, aliceAddr, sentMessage.Tx.FromAddress) - require.Equal(t, aliceAddr, sentMessage.Tx.ToAddress) - require.ElementsMatch(t, calldata, sentMessage.Tx.Data) - - // (2) Process RelayedMessage on withdrawal finalization - require.Nil(t, sentMessage.RelayedMessageEventGUID) - _, finalizedReceipt, _, _ := op_e2e.ProveAndFinalizeWithdrawal(t, *testSuite.OpCfg, testSuite.OpSys, "sequencer", testSuite.OpCfg.Secrets.Alice, sentMsgReceipt) - - // wait for processor catchup - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l1Header := testSuite.Indexer.BridgeProcessor.LastFinalizedL1Header - return l1Header != nil && l1Header.Number.Uint64() >= finalizedReceipt.BlockNumber.Uint64(), nil - })) - - // message is marked as relayed - sentMessage, err = testSuite.DB.BridgeMessages.L2BridgeMessage(parsedMessage.MessageHash) - require.NoError(t, err) - require.NotNil(t, sentMessage) - require.NotNil(t, sentMessage.RelayedMessageEventGUID) - - event, err := testSuite.DB.ContractEvents.L1ContractEvent(*sentMessage.RelayedMessageEventGUID) - require.NoError(t, err) - require.NotNil(t, event) - require.Equal(t, event.TransactionHash, finalizedReceipt.TxHash) - -} diff --git a/indexer/e2e_tests/bridge_transactions_e2e_test.go b/indexer/e2e_tests/bridge_transactions_e2e_test.go deleted file mode 100644 index 02f3eaa83b86..000000000000 --- a/indexer/e2e_tests/bridge_transactions_e2e_test.go +++ /dev/null @@ -1,221 +0,0 @@ -package e2e_tests - -import ( - "context" - "math/big" - "testing" - "time" - - "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/transactions" - - e2etest_utils "github.com/ethereum-optimism/optimism/indexer/e2e_tests/utils" - "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait" - - "github.com/ethereum-optimism/optimism/indexer/bindings" - op_e2e "github.com/ethereum-optimism/optimism/op-e2e" - "github.com/ethereum-optimism/optimism/op-node/withdrawals" - "github.com/ethereum-optimism/optimism/op-service/predeploys" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/params" - - "github.com/stretchr/testify/require" -) - -func TestE2EBridgeTransactionsOptimismPortalDeposits(t *testing.T) { - testSuite := createE2ETestSuite(t) - - optimismPortal, err := bindings.NewOptimismPortal(testSuite.OpCfg.L1Deployments.OptimismPortalProxy, testSuite.L1Client) - require.NoError(t, err) - - bobAddr := testSuite.OpCfg.Secrets.Addresses().Bob - aliceAddr := testSuite.OpCfg.Secrets.Addresses().Alice - - // attach 1 ETH to the deposit and random calldata - calldata := []byte{byte(1), byte(2), byte(3)} - l1Opts, err := bind.NewKeyedTransactorWithChainID(testSuite.OpCfg.Secrets.Alice, testSuite.OpCfg.L1ChainIDBig()) - require.NoError(t, err) - l1Opts.Value = big.NewInt(params.Ether) - - // In the same deposit transaction, transfer, 0.5ETH to Bob. We do this to ensure we're only indexing - // bridged funds from the source address versus any transferred value to a recipient in the same L2 transaction - depositTx, err := transactions.PadGasEstimate(l1Opts, 1.2, func(opts *bind.TransactOpts) (*types.Transaction, error) { - return optimismPortal.DepositTransaction(opts, bobAddr, big.NewInt(params.Ether/2), 100_000, false, calldata) - }) - require.NoError(t, err) - depositReceipt, err := wait.ForReceiptOK(context.Background(), testSuite.L1Client, depositTx.Hash()) - require.NoError(t, err) - - depositInfo, err := e2etest_utils.ParseDepositInfo(depositReceipt) - require.NoError(t, err) - - depositL2TxHash := types.NewTx(depositInfo.DepositTx).Hash() - - // wait for processor catchup - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l1Header := testSuite.Indexer.BridgeProcessor.LastL1Header - return l1Header != nil && l1Header.Number.Uint64() >= depositReceipt.BlockNumber.Uint64(), nil - })) - - deposit, err := testSuite.DB.BridgeTransactions.L1TransactionDeposit(depositInfo.DepositTx.SourceHash) - require.NoError(t, err) - require.NotNil(t, deposit) - require.Equal(t, depositL2TxHash, deposit.L2TransactionHash) - require.Equal(t, uint64(100_000), deposit.GasLimit.Uint64()) - require.Equal(t, uint64(params.Ether), deposit.Tx.Amount.Uint64()) - require.Equal(t, aliceAddr, deposit.Tx.FromAddress) - require.Equal(t, bobAddr, deposit.Tx.ToAddress) - require.ElementsMatch(t, calldata, deposit.Tx.Data) - - event, err := testSuite.DB.ContractEvents.L1ContractEvent(deposit.InitiatedL1EventGUID) - require.NoError(t, err) - require.NotNil(t, event) - require.Equal(t, event.TransactionHash, depositTx.Hash()) - - // NOTE: The indexer does not track deposit inclusion as it's apart of the block derivation process. - // If this changes, we'd like to test for this here. -} - -func TestE2EBridgeTransactionsL2ToL1MessagePasserWithdrawal(t *testing.T) { - testSuite := createE2ETestSuite(t) - - optimismPortal, err := bindings.NewOptimismPortal(testSuite.OpCfg.L1Deployments.OptimismPortalProxy, testSuite.L1Client) - require.NoError(t, err) - l2ToL1MessagePasser, err := bindings.NewL2ToL1MessagePasser(predeploys.L2ToL1MessagePasserAddr, testSuite.L2Client) - require.NoError(t, err) - - aliceAddr := testSuite.OpCfg.Secrets.Addresses().Alice - - // attach 1 ETH to the withdrawal and random calldata - calldata := []byte{byte(1), byte(2), byte(3)} - l2Opts, err := bind.NewKeyedTransactorWithChainID(testSuite.OpCfg.Secrets.Alice, testSuite.OpCfg.L2ChainIDBig()) - require.NoError(t, err) - l2Opts.Value = big.NewInt(params.Ether) - - // Ensure L1 has enough funds for the withdrawal by depositing an equal amount into the OptimismPortal - l1Opts, err := bind.NewKeyedTransactorWithChainID(testSuite.OpCfg.Secrets.Alice, testSuite.OpCfg.L1ChainIDBig()) - require.NoError(t, err) - l1Opts.Value = l2Opts.Value - depositTx, err := transactions.PadGasEstimate(l1Opts, 1.2, func(opts *bind.TransactOpts) (*types.Transaction, error) { - return optimismPortal.Receive(opts) - }) - require.NoError(t, err) - depositReceipt, err := wait.ForReceiptOK(context.Background(), testSuite.L1Client, depositTx.Hash()) - require.NoError(t, err) - depositInfo, err := e2etest_utils.ParseDepositInfo(depositReceipt) - require.NoError(t, err) - depositL2TxHash := types.NewTx(depositInfo.DepositTx).Hash() - _, err = wait.ForReceiptOK(context.Background(), testSuite.L2Client, depositL2TxHash) - require.NoError(t, err) - - withdrawTx, err := transactions.PadGasEstimate(l2Opts, 1.2, func(opts *bind.TransactOpts) (*types.Transaction, error) { - return l2ToL1MessagePasser.InitiateWithdrawal(opts, aliceAddr, big.NewInt(100_000), calldata) - }) - require.NoError(t, err) - withdrawReceipt, err := wait.ForReceiptOK(context.Background(), testSuite.L2Client, withdrawTx.Hash()) - require.NoError(t, err) - - // wait for processor catchup - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l2Header := testSuite.Indexer.BridgeProcessor.LastL2Header - return l2Header != nil && l2Header.Number.Uint64() >= withdrawReceipt.BlockNumber.Uint64(), nil - })) - - msgPassed, err := withdrawals.ParseMessagePassed(withdrawReceipt) - require.NoError(t, err) - withdrawalHash, err := withdrawals.WithdrawalHash(msgPassed) - require.NoError(t, err) - - withdraw, err := testSuite.DB.BridgeTransactions.L2TransactionWithdrawal(withdrawalHash) - require.NoError(t, err) - require.NotNil(t, withdraw) - require.Equal(t, msgPassed.Nonce.Uint64(), withdraw.Nonce.Uint64()) - require.Equal(t, uint64(100_000), withdraw.GasLimit.Uint64()) - require.Equal(t, uint64(params.Ether), withdraw.Tx.Amount.Uint64()) - require.Equal(t, aliceAddr, withdraw.Tx.FromAddress) - require.Equal(t, aliceAddr, withdraw.Tx.ToAddress) - require.ElementsMatch(t, calldata, withdraw.Tx.Data) - - event, err := testSuite.DB.ContractEvents.L2ContractEvent(withdraw.InitiatedL2EventGUID) - require.NoError(t, err) - require.NotNil(t, event) - require.Equal(t, event.TransactionHash, withdrawTx.Hash()) - - // Test Withdrawal Proven - require.Nil(t, withdraw.ProvenL1EventGUID) - require.Nil(t, withdraw.FinalizedL1EventGUID) - - withdrawParams, proveReceipt := op_e2e.ProveWithdrawal(t, *testSuite.OpCfg, testSuite.OpSys, "sequencer", testSuite.OpCfg.Secrets.Alice, withdrawReceipt) - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l1Header := testSuite.Indexer.BridgeProcessor.LastFinalizedL1Header - return l1Header != nil && l1Header.Number.Uint64() >= proveReceipt.BlockNumber.Uint64(), nil - })) - - withdraw, err = testSuite.DB.BridgeTransactions.L2TransactionWithdrawal(withdrawalHash) - require.NoError(t, err) - require.NotNil(t, withdraw.ProvenL1EventGUID) - - proveEvent, err := testSuite.DB.ContractEvents.L1ContractEvent(*withdraw.ProvenL1EventGUID) - require.NoError(t, err) - require.NotNil(t, event) - require.Equal(t, proveEvent.TransactionHash, proveReceipt.TxHash) - - // Test Withdrawal Finalized - require.Nil(t, withdraw.FinalizedL1EventGUID) - - finalizeReceipt, _, _ := op_e2e.FinalizeWithdrawal(t, *testSuite.OpCfg, testSuite.L1Client, testSuite.OpCfg.Secrets.Alice, proveReceipt, withdrawParams) - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l1Header := testSuite.Indexer.BridgeProcessor.LastFinalizedL1Header - return l1Header != nil && l1Header.Number.Uint64() >= finalizeReceipt.BlockNumber.Uint64(), nil - })) - - withdraw, err = testSuite.DB.BridgeTransactions.L2TransactionWithdrawal(withdrawalHash) - require.NoError(t, err) - require.NotNil(t, withdraw.FinalizedL1EventGUID) - require.NotNil(t, withdraw.Succeeded) - require.True(t, *withdraw.Succeeded) - - finalizedEvent, err := testSuite.DB.ContractEvents.L1ContractEvent(*withdraw.FinalizedL1EventGUID) - require.NoError(t, err) - require.NotNil(t, event) - require.Equal(t, finalizedEvent.TransactionHash, finalizeReceipt.TxHash) -} - -func TestE2EBridgeTransactionsL2ToL1MessagePasserFailedWithdrawal(t *testing.T) { - testSuite := createE2ETestSuite(t) - - l2ToL1MessagePasser, err := bindings.NewL2ToL1MessagePasser(predeploys.L2ToL1MessagePasserAddr, testSuite.L2Client) - require.NoError(t, err) - - aliceAddr := testSuite.OpCfg.Secrets.Addresses().Alice - - // Try to withdraw 1 ETH from L2 without any corresponding deposits on L1 - l2Opts, err := bind.NewKeyedTransactorWithChainID(testSuite.OpCfg.Secrets.Alice, testSuite.OpCfg.L2ChainIDBig()) - require.NoError(t, err) - l2Opts.Value = big.NewInt(params.Ether) - - withdrawTx, err := transactions.PadGasEstimate(l2Opts, 1.2, func(opts *bind.TransactOpts) (*types.Transaction, error) { - return l2ToL1MessagePasser.InitiateWithdrawal(opts, aliceAddr, big.NewInt(100_000), nil) - }) - require.NoError(t, err) - withdrawReceipt, err := wait.ForReceiptOK(context.Background(), testSuite.L2Client, withdrawTx.Hash()) - require.NoError(t, err) - - msgPassed, err := withdrawals.ParseMessagePassed(withdrawReceipt) - require.NoError(t, err) - withdrawalHash, err := withdrawals.WithdrawalHash(msgPassed) - require.NoError(t, err) - - // Prove&Finalize withdrawal - _, finalizeReceipt, _, _ := op_e2e.ProveAndFinalizeWithdrawal(t, *testSuite.OpCfg, testSuite.OpSys, "sequencer", testSuite.OpCfg.Secrets.Alice, withdrawReceipt) - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l1Header := testSuite.Indexer.BridgeProcessor.LastFinalizedL1Header - return l1Header != nil && l1Header.Number.Uint64() >= finalizeReceipt.BlockNumber.Uint64(), nil - })) - - // Withdrawal registered but marked as unsuccessful - withdraw, err := testSuite.DB.BridgeTransactions.L2TransactionWithdrawal(withdrawalHash) - require.NoError(t, err) - require.NotNil(t, withdraw.Succeeded) - require.False(t, *withdraw.Succeeded) -} diff --git a/indexer/e2e_tests/bridge_transfers_e2e_test.go b/indexer/e2e_tests/bridge_transfers_e2e_test.go deleted file mode 100644 index ac6cde917e9a..000000000000 --- a/indexer/e2e_tests/bridge_transfers_e2e_test.go +++ /dev/null @@ -1,625 +0,0 @@ -package e2e_tests - -import ( - "context" - "crypto/ecdsa" - "fmt" - "math/big" - "testing" - "time" - - "github.com/ethereum-optimism/optimism/indexer/bigint" - e2etest_utils "github.com/ethereum-optimism/optimism/indexer/e2e_tests/utils" - op_e2e "github.com/ethereum-optimism/optimism/op-e2e" - "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/transactions" - "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait" - "github.com/ethereum-optimism/optimism/op-node/withdrawals" - - "github.com/ethereum-optimism/optimism/indexer/bindings" - "github.com/ethereum-optimism/optimism/op-service/predeploys" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/params" - - "github.com/stretchr/testify/require" -) - -func TestE2EBridgeTransfersStandardBridgeETHDeposit(t *testing.T) { - testSuite := createE2ETestSuite(t) - - l1StandardBridge, err := bindings.NewL1StandardBridge(testSuite.OpCfg.L1Deployments.L1StandardBridgeProxy, testSuite.L1Client) - require.NoError(t, err) - - // 1 ETH transfer - aliceAddr := testSuite.OpCfg.Secrets.Addresses().Alice - l1Opts, err := bind.NewKeyedTransactorWithChainID(testSuite.OpCfg.Secrets.Alice, testSuite.OpCfg.L1ChainIDBig()) - require.NoError(t, err) - l1Opts.Value = big.NewInt(params.Ether) - - // (1) Test Deposit Initiation - depositTx, err := transactions.PadGasEstimate(l1Opts, 1.1, func(opts *bind.TransactOpts) (*types.Transaction, error) { - return l1StandardBridge.DepositETH(opts, 200_000, []byte{byte(1)}) - }) - require.NoError(t, err) - depositReceipt, err := wait.ForReceiptOK(context.Background(), testSuite.L1Client, depositTx.Hash()) - require.NoError(t, err) - - depositInfo, err := e2etest_utils.ParseDepositInfo(depositReceipt) - require.NoError(t, err) - - // wait for processor catchup - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l1Header := testSuite.Indexer.BridgeProcessor.LastL1Header - return l1Header != nil && l1Header.Number.Uint64() >= depositReceipt.BlockNumber.Uint64(), nil - })) - - cursor := "" - limit := 100 - - aliceDeposits, err := testSuite.DB.BridgeTransfers.L1BridgeDepositsByAddress(aliceAddr, cursor, limit) - - require.NoError(t, err) - require.Len(t, aliceDeposits.Deposits, 1) - require.Equal(t, depositTx.Hash(), aliceDeposits.Deposits[0].L1TransactionHash) - require.Equal(t, depositReceipt.BlockHash, aliceDeposits.Deposits[0].L1BlockHash) - require.Equal(t, "", aliceDeposits.Cursor) - require.Equal(t, false, aliceDeposits.HasNextPage) - require.Equal(t, types.NewTx(depositInfo.DepositTx).Hash().String(), aliceDeposits.Deposits[0].L2TransactionHash.String()) - - deposit := aliceDeposits.Deposits[0].L1BridgeDeposit - require.Equal(t, depositInfo.DepositTx.SourceHash, deposit.TransactionSourceHash) - require.Equal(t, predeploys.LegacyERC20ETHAddr, deposit.TokenPair.LocalTokenAddress) - require.Equal(t, predeploys.LegacyERC20ETHAddr, deposit.TokenPair.RemoteTokenAddress) - require.Equal(t, uint64(params.Ether), deposit.Tx.Amount.Uint64()) - require.Equal(t, aliceAddr, deposit.Tx.FromAddress) - require.Equal(t, aliceAddr, deposit.Tx.ToAddress) - require.Equal(t, byte(1), deposit.Tx.Data[0]) - - // StandardBridge flows through the messenger. We remove the first two significant - // bytes of the nonce dedicated to the version. nonce == 0 (first message) - require.NotNil(t, deposit.CrossDomainMessageHash) - - // (2) Test Deposit Finalization via CrossDomainMessenger relayed message - l2DepositReceipt, err := wait.ForReceiptOK(context.Background(), testSuite.L2Client, types.NewTx(depositInfo.DepositTx).Hash()) - require.NoError(t, err) - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l2Header := testSuite.Indexer.BridgeProcessor.LastFinalizedL2Header - return l2Header != nil && l2Header.Number.Uint64() >= l2DepositReceipt.BlockNumber.Uint64(), nil - })) - - crossDomainBridgeMessage, err := testSuite.DB.BridgeMessages.L1BridgeMessage(*deposit.CrossDomainMessageHash) - require.NoError(t, err) - require.NotNil(t, crossDomainBridgeMessage) - require.NotNil(t, crossDomainBridgeMessage.RelayedMessageEventGUID) -} - -func TestE2EBridgeTransfersOptimismPortalETHReceive(t *testing.T) { - testSuite := createE2ETestSuite(t) - - optimismPortal, err := bindings.NewOptimismPortal(testSuite.OpCfg.L1Deployments.OptimismPortalProxy, testSuite.L1Client) - require.NoError(t, err) - - // 1 ETH transfer - aliceAddr := testSuite.OpCfg.Secrets.Addresses().Alice - l1Opts, err := bind.NewKeyedTransactorWithChainID(testSuite.OpCfg.Secrets.Alice, testSuite.OpCfg.L1ChainIDBig()) - require.NoError(t, err) - l1Opts.Value = big.NewInt(params.Ether) - - // (1) Test Deposit Initiation - portalDepositTx, err := transactions.PadGasEstimate(l1Opts, 1.1, func(opts *bind.TransactOpts) (*types.Transaction, error) { - return optimismPortal.Receive(opts) - }) - require.NoError(t, err) - portalDepositReceipt, err := wait.ForReceiptOK(context.Background(), testSuite.L1Client, portalDepositTx.Hash()) - require.NoError(t, err) - - depositInfo, err := e2etest_utils.ParseDepositInfo(portalDepositReceipt) - require.NoError(t, err) - - // wait for processor catchup - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l1Header := testSuite.Indexer.BridgeProcessor.LastL1Header - return l1Header != nil && l1Header.Number.Uint64() >= portalDepositReceipt.BlockNumber.Uint64(), nil - })) - - aliceDeposits, err := testSuite.DB.BridgeTransfers.L1BridgeDepositsByAddress(aliceAddr, "", 1) - require.NoError(t, err) - require.NotNil(t, aliceDeposits) - require.Len(t, aliceDeposits.Deposits, 1) - require.Equal(t, portalDepositTx.Hash(), aliceDeposits.Deposits[0].L1TransactionHash) - - deposit := aliceDeposits.Deposits[0].L1BridgeDeposit - require.Equal(t, depositInfo.DepositTx.SourceHash, deposit.TransactionSourceHash) - require.Equal(t, predeploys.LegacyERC20ETHAddr, deposit.TokenPair.LocalTokenAddress) - require.Equal(t, predeploys.LegacyERC20ETHAddr, deposit.TokenPair.RemoteTokenAddress) - require.Equal(t, uint64(params.Ether), deposit.Tx.Amount.Uint64()) - require.Equal(t, aliceAddr, deposit.Tx.FromAddress) - require.Equal(t, aliceAddr, deposit.Tx.ToAddress) - require.Len(t, deposit.Tx.Data, 0) - - // deposit was not sent through the cross domain messenger - require.Nil(t, deposit.CrossDomainMessageHash) - - // (2) Test Deposit Finalization - l2DepositReceipt, err := wait.ForReceiptOK(context.Background(), testSuite.L2Client, types.NewTx(depositInfo.DepositTx).Hash()) - require.NoError(t, err) - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l2Header := testSuite.Indexer.BridgeProcessor.LastFinalizedL2Header - return l2Header != nil && l2Header.Number.Uint64() >= l2DepositReceipt.BlockNumber.Uint64(), nil - })) - - // Still nil as the withdrawal did not occur through the standard bridge - aliceDeposits, err = testSuite.DB.BridgeTransfers.L1BridgeDepositsByAddress(aliceAddr, "", 1) - require.NoError(t, err) - require.Nil(t, aliceDeposits.Deposits[0].L1BridgeDeposit.CrossDomainMessageHash) -} - -func TestE2EBridgeTransfersCursoredDeposits(t *testing.T) { - testSuite := createE2ETestSuite(t) - - l1StandardBridge, err := bindings.NewL1StandardBridge(testSuite.OpCfg.L1Deployments.L1StandardBridgeProxy, testSuite.L1Client) - require.NoError(t, err) - optimismPortal, err := bindings.NewOptimismPortal(testSuite.OpCfg.L1Deployments.OptimismPortalProxy, testSuite.L1Client) - require.NoError(t, err) - - aliceAddr := testSuite.OpCfg.Secrets.Addresses().Alice - l1Opts, err := bind.NewKeyedTransactorWithChainID(testSuite.OpCfg.Secrets.Alice, testSuite.OpCfg.L1ChainIDBig()) - require.NoError(t, err) - - // Deposit 1/2/3 ETH (second deposit via the optimism portal) - var depositReceipts [3]*types.Receipt - for i := 0; i < 3; i++ { - var depositTx *types.Transaction - l1Opts.Value = big.NewInt(int64((i + 1)) * params.Ether) - if i != 1 { - depositTx, err = transactions.PadGasEstimate(l1Opts, 1.1, func(opts *bind.TransactOpts) (*types.Transaction, error) { return l1StandardBridge.Receive(opts) }) - require.NoError(t, err) - } else { - depositTx, err = transactions.PadGasEstimate(l1Opts, 1.1, func(opts *bind.TransactOpts) (*types.Transaction, error) { return optimismPortal.Receive(opts) }) - require.NoError(t, err) - } - - depositReceipt, err := wait.ForReceiptOK(context.Background(), testSuite.L1Client, depositTx.Hash()) - require.NoError(t, err, fmt.Sprintf("failed on deposit %d", i)) - depositReceipts[i] = depositReceipt - } - - // wait for processor catchup of the latest tx - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l1Header := testSuite.Indexer.BridgeProcessor.LastL1Header - return l1Header != nil && l1Header.Number.Uint64() >= depositReceipts[2].BlockNumber.Uint64(), nil - })) - - // Get All - aliceDeposits, err := testSuite.DB.BridgeTransfers.L1BridgeDepositsByAddress(aliceAddr, "", 3) - require.NotNil(t, aliceDeposits) - require.NoError(t, err) - require.Len(t, aliceDeposits.Deposits, 3) - require.False(t, aliceDeposits.HasNextPage) - - // Respects Limits & Supplied Cursors - aliceDeposits, err = testSuite.DB.BridgeTransfers.L1BridgeDepositsByAddress(aliceAddr, "", 2) - require.NotNil(t, aliceDeposits) - require.NoError(t, err) - require.Len(t, aliceDeposits.Deposits, 2) - require.True(t, aliceDeposits.HasNextPage) - - aliceDeposits, err = testSuite.DB.BridgeTransfers.L1BridgeDepositsByAddress(aliceAddr, aliceDeposits.Cursor, 1) - require.NoError(t, err) - require.NotNil(t, aliceDeposits) - require.Len(t, aliceDeposits.Deposits, 1) - require.False(t, aliceDeposits.HasNextPage) - - // Returns the results in the right order - aliceDeposits, err = testSuite.DB.BridgeTransfers.L1BridgeDepositsByAddress(aliceAddr, "", 3) - require.NotNil(t, aliceDeposits) - require.NoError(t, err) - for i := 0; i < 3; i++ { - deposit := aliceDeposits.Deposits[i] - - // DESCENDING order - require.Equal(t, depositReceipts[2-i].TxHash, deposit.L1TransactionHash) - require.Equal(t, int64(3-i)*params.Ether, deposit.L1BridgeDeposit.Tx.Amount.Int64()) - } -} - -func TestE2EBridgeTransfersStandardBridgeETHWithdrawal(t *testing.T) { - testSuite := createE2ETestSuite(t) - - optimismPortal, err := bindings.NewOptimismPortal(testSuite.OpCfg.L1Deployments.OptimismPortalProxy, testSuite.L1Client) - require.NoError(t, err) - l2StandardBridge, err := bindings.NewL2StandardBridge(predeploys.L2StandardBridgeAddr, testSuite.L2Client) - require.NoError(t, err) - - // 1 ETH transfer - aliceAddr := testSuite.OpCfg.Secrets.Addresses().Alice - l2Opts, err := bind.NewKeyedTransactorWithChainID(testSuite.OpCfg.Secrets.Alice, testSuite.OpCfg.L2ChainIDBig()) - require.NoError(t, err) - l2Opts.Value = big.NewInt(params.Ether) - - // Ensure L1 has enough funds for the withdrawal by depositing an equal amount into the OptimismPortal - l1Opts, err := bind.NewKeyedTransactorWithChainID(testSuite.OpCfg.Secrets.Alice, testSuite.OpCfg.L1ChainIDBig()) - require.NoError(t, err) - l1Opts.Value = l2Opts.Value - depositTx, err := transactions.PadGasEstimate(l1Opts, 1.2, func(opts *bind.TransactOpts) (*types.Transaction, error) { - return optimismPortal.Receive(opts) - }) - require.NoError(t, err) - depositReceipt, err := wait.ForReceiptOK(context.Background(), testSuite.L1Client, depositTx.Hash()) - require.NoError(t, err) - depositInfo, err := e2etest_utils.ParseDepositInfo(depositReceipt) - require.NoError(t, err) - depositL2TxHash := types.NewTx(depositInfo.DepositTx).Hash() - _, err = wait.ForReceiptOK(context.Background(), testSuite.L2Client, depositL2TxHash) - require.NoError(t, err) - - // (1) Test Withdrawal Initiation - withdrawTx, err := transactions.PadGasEstimate(l2Opts, 1.2, func(opts *bind.TransactOpts) (*types.Transaction, error) { - return l2StandardBridge.Withdraw(opts, predeploys.LegacyERC20ETHAddr, l2Opts.Value, 200_000, []byte{byte(1)}) - }) - require.NoError(t, err) - withdrawReceipt, err := wait.ForReceiptOK(context.Background(), testSuite.L2Client, withdrawTx.Hash()) - require.NoError(t, err) - - // wait for processor catchup - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l2Header := testSuite.Indexer.BridgeProcessor.LastL2Header - return l2Header != nil && l2Header.Number.Uint64() >= withdrawReceipt.BlockNumber.Uint64(), nil - })) - - aliceWithdrawals, err := testSuite.DB.BridgeTransfers.L2BridgeWithdrawalsByAddress(aliceAddr, "", 3) - require.NoError(t, err) - require.Len(t, aliceWithdrawals.Withdrawals, 1) - require.Equal(t, withdrawTx.Hash().String(), aliceWithdrawals.Withdrawals[0].L2TransactionHash.String()) - - msgPassed, err := withdrawals.ParseMessagePassed(withdrawReceipt) - require.NoError(t, err) - withdrawalHash, err := withdrawals.WithdrawalHash(msgPassed) - require.NoError(t, err) - - withdrawal := aliceWithdrawals.Withdrawals[0].L2BridgeWithdrawal - require.Equal(t, withdrawalHash, withdrawal.TransactionWithdrawalHash) - require.Equal(t, predeploys.LegacyERC20ETHAddr, withdrawal.TokenPair.LocalTokenAddress) - require.Equal(t, predeploys.LegacyERC20ETHAddr, withdrawal.TokenPair.RemoteTokenAddress) - require.Equal(t, uint64(params.Ether), withdrawal.Tx.Amount.Uint64()) - require.Equal(t, aliceAddr, withdrawal.Tx.FromAddress) - require.Equal(t, aliceAddr, withdrawal.Tx.ToAddress) - require.Equal(t, byte(1), withdrawal.Tx.Data[0]) - - // StandardBridge flows through the messenger. We remove the first two - // bytes of the nonce dedicated to the version. nonce == 0 (first message) - require.NotNil(t, withdrawal.CrossDomainMessageHash) - - crossDomainBridgeMessage, err := testSuite.DB.BridgeMessages.L2BridgeMessage(*withdrawal.CrossDomainMessageHash) - require.NoError(t, err) - require.Nil(t, crossDomainBridgeMessage.RelayedMessageEventGUID) - - // (2) Test Withdrawal Proven/Finalized. Test the sql join queries to populate the right transaction - require.Empty(t, aliceWithdrawals.Withdrawals[0].ProvenL1TransactionHash) - require.Empty(t, aliceWithdrawals.Withdrawals[0].FinalizedL1TransactionHash) - - // wait for processor catchup - proveReceipt, finalizeReceipt, _, _ := op_e2e.ProveAndFinalizeWithdrawal(t, *testSuite.OpCfg, testSuite.OpSys, "sequencer", testSuite.OpCfg.Secrets.Alice, withdrawReceipt) - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l1Header := testSuite.Indexer.BridgeProcessor.LastFinalizedL1Header - return l1Header != nil && l1Header.Number.Uint64() >= finalizeReceipt.BlockNumber.Uint64(), nil - })) - - aliceWithdrawals, err = testSuite.DB.BridgeTransfers.L2BridgeWithdrawalsByAddress(aliceAddr, "", 100) - require.NoError(t, err) - require.Equal(t, proveReceipt.TxHash, aliceWithdrawals.Withdrawals[0].ProvenL1TransactionHash) - require.Equal(t, finalizeReceipt.TxHash, aliceWithdrawals.Withdrawals[0].FinalizedL1TransactionHash) - require.Equal(t, withdrawReceipt.BlockHash, aliceWithdrawals.Withdrawals[0].L2BlockHash) - - crossDomainBridgeMessage, err = testSuite.DB.BridgeMessages.L2BridgeMessage(*withdrawal.CrossDomainMessageHash) - require.NoError(t, err) - require.NotNil(t, crossDomainBridgeMessage) - require.NotNil(t, crossDomainBridgeMessage.RelayedMessageEventGUID) -} - -func TestE2EBridgeTransfersL2ToL1MessagePasserETHReceive(t *testing.T) { - testSuite := createE2ETestSuite(t) - optimismPortal, err := bindings.NewOptimismPortal(testSuite.OpCfg.L1Deployments.OptimismPortalProxy, testSuite.L1Client) - require.NoError(t, err) - l2ToL1MessagePasser, err := bindings.NewOptimismPortal(predeploys.L2ToL1MessagePasserAddr, testSuite.L2Client) - require.NoError(t, err) - - // 1 ETH transfer - aliceAddr := testSuite.OpCfg.Secrets.Addresses().Alice - l2Opts, err := bind.NewKeyedTransactorWithChainID(testSuite.OpCfg.Secrets.Alice, testSuite.OpCfg.L2ChainIDBig()) - require.NoError(t, err) - l2Opts.Value = big.NewInt(params.Ether) - - // Ensure L1 has enough funds for the withdrawal by depositing an equal amount into the OptimismPortal - l1Opts, err := bind.NewKeyedTransactorWithChainID(testSuite.OpCfg.Secrets.Alice, testSuite.OpCfg.L1ChainIDBig()) - require.NoError(t, err) - l1Opts.Value = l2Opts.Value - depositTx, err := transactions.PadGasEstimate(l1Opts, 1.2, func(opts *bind.TransactOpts) (*types.Transaction, error) { - return optimismPortal.Receive(opts) - }) - require.NoError(t, err) - depositReceipt, err := wait.ForReceiptOK(context.Background(), testSuite.L1Client, depositTx.Hash()) - require.NoError(t, err) - depositInfo, err := e2etest_utils.ParseDepositInfo(depositReceipt) - require.NoError(t, err) - depositL2TxHash := types.NewTx(depositInfo.DepositTx).Hash() - _, err = wait.ForReceiptOK(context.Background(), testSuite.L2Client, depositL2TxHash) - require.NoError(t, err) - - // (1) Test Withdrawal Initiation - l2ToL1MessagePasserWithdrawTx, err := transactions.PadGasEstimate(l2Opts, 1.2, func(opts *bind.TransactOpts) (*types.Transaction, error) { - return l2ToL1MessagePasser.Receive(opts) - }) - require.NoError(t, err) - l2ToL1WithdrawReceipt, err := wait.ForReceiptOK(context.Background(), testSuite.L2Client, l2ToL1MessagePasserWithdrawTx.Hash()) - require.NoError(t, err) - - // wait for processor catchup - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l2Header := testSuite.Indexer.BridgeProcessor.LastL2Header - return l2Header != nil && l2Header.Number.Uint64() >= l2ToL1WithdrawReceipt.BlockNumber.Uint64(), nil - })) - - aliceWithdrawals, err := testSuite.DB.BridgeTransfers.L2BridgeWithdrawalsByAddress(aliceAddr, "", 100) - require.NoError(t, err) - require.Len(t, aliceWithdrawals.Withdrawals, 1) - require.Equal(t, l2ToL1MessagePasserWithdrawTx.Hash().String(), aliceWithdrawals.Withdrawals[0].L2TransactionHash.String()) - - msgPassed, err := withdrawals.ParseMessagePassed(l2ToL1WithdrawReceipt) - require.NoError(t, err) - withdrawalHash, err := withdrawals.WithdrawalHash(msgPassed) - require.NoError(t, err) - - withdrawal := aliceWithdrawals.Withdrawals[0].L2BridgeWithdrawal - require.Equal(t, withdrawalHash, withdrawal.TransactionWithdrawalHash) - require.Equal(t, predeploys.LegacyERC20ETHAddr, withdrawal.TokenPair.LocalTokenAddress) - require.Equal(t, predeploys.LegacyERC20ETHAddr, withdrawal.TokenPair.RemoteTokenAddress) - require.Equal(t, uint64(params.Ether), withdrawal.Tx.Amount.Uint64()) - require.Equal(t, aliceAddr, withdrawal.Tx.FromAddress) - require.Equal(t, aliceAddr, withdrawal.Tx.ToAddress) - require.Len(t, withdrawal.Tx.Data, 0) - - // withdrawal was not sent through the cross domain messenger - require.Nil(t, withdrawal.CrossDomainMessageHash) - - // (2) Test Withdrawal Proven/Finalized. Test the sql join queries to populate the right transaction - require.Empty(t, aliceWithdrawals.Withdrawals[0].ProvenL1TransactionHash) - require.Empty(t, aliceWithdrawals.Withdrawals[0].FinalizedL1TransactionHash) - - // wait for processor catchup - proveReceipt, finalizeReceipt, _, _ := op_e2e.ProveAndFinalizeWithdrawal(t, *testSuite.OpCfg, testSuite.OpSys, "sequencer", testSuite.OpCfg.Secrets.Alice, l2ToL1WithdrawReceipt) - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l1Header := testSuite.Indexer.BridgeProcessor.LastFinalizedL1Header - return l1Header != nil && l1Header.Number.Uint64() >= finalizeReceipt.BlockNumber.Uint64(), nil - })) - - aliceWithdrawals, err = testSuite.DB.BridgeTransfers.L2BridgeWithdrawalsByAddress(aliceAddr, "", 100) - require.NoError(t, err) - require.Equal(t, proveReceipt.TxHash, aliceWithdrawals.Withdrawals[0].ProvenL1TransactionHash) - require.Equal(t, finalizeReceipt.TxHash, aliceWithdrawals.Withdrawals[0].FinalizedL1TransactionHash) -} - -func TestE2EBridgeTransfersCursoredWithdrawals(t *testing.T) { - testSuite := createE2ETestSuite(t) - - l2StandardBridge, err := bindings.NewL2StandardBridge(predeploys.L2StandardBridgeAddr, testSuite.L2Client) - require.NoError(t, err) - l2ToL1MP, err := bindings.NewOptimismPortal(predeploys.L2ToL1MessagePasserAddr, testSuite.L2Client) - require.NoError(t, err) - - aliceAddr := testSuite.OpCfg.Secrets.Addresses().Alice - l2Opts, err := bind.NewKeyedTransactorWithChainID(testSuite.OpCfg.Secrets.Alice, testSuite.OpCfg.L2ChainIDBig()) - require.NoError(t, err) - - // Withdraw 1/2/3 ETH (second deposit via the l2ToL1MP). We dont ever finalize these withdrawals on - // L1 so we dont have to worry about funding the OptimismPortal contract with ETH - var withdrawReceipts [3]*types.Receipt - for i := 0; i < 3; i++ { - var withdrawTx *types.Transaction - l2Opts.Value = big.NewInt(int64((i + 1)) * params.Ether) - if i != 1 { - withdrawTx, err = transactions.PadGasEstimate(l2Opts, 1.1, func(opts *bind.TransactOpts) (*types.Transaction, error) { return l2StandardBridge.Receive(opts) }) - require.NoError(t, err) - } else { - withdrawTx, err = transactions.PadGasEstimate(l2Opts, 1.1, func(opts *bind.TransactOpts) (*types.Transaction, error) { return l2ToL1MP.Receive(opts) }) - require.NoError(t, err) - } - - withdrawReceipt, err := wait.ForReceiptOK(context.Background(), testSuite.L2Client, withdrawTx.Hash()) - require.NoError(t, err, fmt.Sprintf("failed on withdrawal %d", i)) - withdrawReceipts[i] = withdrawReceipt - } - - // wait for processor catchup of the latest tx - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l2Header := testSuite.Indexer.BridgeProcessor.LastL2Header - return l2Header != nil && l2Header.Number.Uint64() >= withdrawReceipts[2].BlockNumber.Uint64(), nil - })) - - // Get All - aliceWithdrawals, err := testSuite.DB.BridgeTransfers.L2BridgeWithdrawalsByAddress(aliceAddr, "", 100) - require.NotNil(t, aliceWithdrawals) - require.NoError(t, err) - require.Len(t, aliceWithdrawals.Withdrawals, 3) - require.False(t, aliceWithdrawals.HasNextPage) - - // Respects Limits & Supplied Cursors - aliceWithdrawals, err = testSuite.DB.BridgeTransfers.L2BridgeWithdrawalsByAddress(aliceAddr, "", 2) - require.NotNil(t, aliceWithdrawals) - require.NoError(t, err) - require.Len(t, aliceWithdrawals.Withdrawals, 2) - require.True(t, aliceWithdrawals.HasNextPage) - - aliceWithdrawals, err = testSuite.DB.BridgeTransfers.L2BridgeWithdrawalsByAddress(aliceAddr, aliceWithdrawals.Cursor, 1) - require.NotNil(t, aliceWithdrawals) - require.NoError(t, err) - require.Len(t, aliceWithdrawals.Withdrawals, 1) - require.False(t, aliceWithdrawals.HasNextPage) - - // Returns the results in the right order - aliceWithdrawals, err = testSuite.DB.BridgeTransfers.L2BridgeWithdrawalsByAddress(aliceAddr, "", 100) - require.NotNil(t, aliceWithdrawals) - require.NoError(t, err) - for i := 0; i < 3; i++ { - withdrawal := aliceWithdrawals.Withdrawals[i] - - // DESCENDING order - require.Equal(t, withdrawReceipts[2-i].TxHash, withdrawal.L2TransactionHash) - require.Equal(t, int64(3-i)*params.Ether, withdrawal.L2BridgeWithdrawal.Tx.Amount.Int64()) - } -} - -func TestClientBridgeFunctions(t *testing.T) { - testSuite := createE2ETestSuite(t) - - // (1) Generate contract bindings for the L1 and L2 standard bridges - optimismPortal, err := bindings.NewOptimismPortal(testSuite.OpCfg.L1Deployments.OptimismPortalProxy, testSuite.L1Client) - require.NoError(t, err) - l2ToL1MessagePasser, err := bindings.NewOptimismPortal(predeploys.L2ToL1MessagePasserAddr, testSuite.L2Client) - require.NoError(t, err) - - // (2) Create test actors that will deposit and withdraw using the standard bridge - aliceAddr := testSuite.OpCfg.Secrets.Addresses().Alice - bobAddr := testSuite.OpCfg.Secrets.Addresses().Bob - - type actor struct { - addr common.Address - priv *ecdsa.PrivateKey - amt *big.Int - receipt *types.Receipt - } - - mintSum := bigint.Zero - - actors := []actor{ - { - addr: aliceAddr, - priv: testSuite.OpCfg.Secrets.Alice, - amt: big.NewInt(0), - }, - { - addr: bobAddr, - priv: testSuite.OpCfg.Secrets.Bob, - amt: big.NewInt(0), - }, - } - - type supplies struct { - all *big.Int - proven *big.Int - finalized *big.Int - } - - s := supplies{ - all: big.NewInt(0), - proven: big.NewInt(0), - finalized: big.NewInt(0), - } - - // (3) Iterate over each actor and deposit / withdraw - for i, actor := range actors { - t.Logf("%d - simulating deposit/withdrawal flow for %s", i, actor.addr.String()) - - l2Opts, err := bind.NewKeyedTransactorWithChainID(actor.priv, testSuite.OpCfg.L2ChainIDBig()) - require.NoError(t, err) - l2Opts.Value = big.NewInt(params.Ether) - - // (3.a) Deposit user funds into L2 via OptimismPortal contract - l1Opts, err := bind.NewKeyedTransactorWithChainID(actor.priv, testSuite.OpCfg.L1ChainIDBig()) - require.NoError(t, err) - l1Opts.Value = l2Opts.Value - depositTx, err := transactions.PadGasEstimate(l1Opts, 1.1, func(opts *bind.TransactOpts) (*types.Transaction, error) { - return optimismPortal.Receive(opts) - }) - require.NoError(t, err) - depositReceipt, err := wait.ForReceiptOK(context.Background(), testSuite.L1Client, depositTx.Hash()) - require.NoError(t, err) - depositInfo, err := e2etest_utils.ParseDepositInfo(depositReceipt) - require.NoError(t, err) - depositL2TxHash := types.NewTx(depositInfo.DepositTx).Hash() - _, err = wait.ForReceiptOK(context.Background(), testSuite.L2Client, depositL2TxHash) - require.NoError(t, err) - - mintSum = new(big.Int).Add(mintSum, depositTx.Value()) - - // (3.b) Initiate withdrawal transaction via L2ToL1MessagePasser contract - l2ToL1MessagePasserWithdrawTx, err := transactions.PadGasEstimate(l2Opts, 1.1, func(opts *bind.TransactOpts) (*types.Transaction, error) { - return l2ToL1MessagePasser.Receive(opts) - }) - require.NoError(t, err) - l2ToL1WithdrawReceipt, err := wait.ForReceiptOK(context.Background(), testSuite.L2Client, l2ToL1MessagePasserWithdrawTx.Hash()) - require.NoError(t, err) - - // (3.c) wait for indexer processor to catchup with the L1 & L2 block containing the deposit & withdrawal tx - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l1Header := testSuite.Indexer.BridgeProcessor.LastL1Header - l2Header := testSuite.Indexer.BridgeProcessor.LastL2Header - seenL2 := l2Header != nil && l2Header.Number.Uint64() >= l2ToL1WithdrawReceipt.BlockNumber.Uint64() - seenL1 := l1Header != nil && l1Header.Number.Uint64() >= depositReceipt.BlockNumber.Uint64() - return seenL1 && seenL2, nil - })) - - s.all = new(big.Int).Add(s.all, l2ToL1MessagePasserWithdrawTx.Value()) - actors[i].receipt = l2ToL1WithdrawReceipt - actors[i].amt = l2ToL1MessagePasserWithdrawTx.Value() - - // (3.d) Ensure that withdrawal and deposit txs are retrievable via API - deposits, err := testSuite.ApiClient.GetAllDepositsByAddress(actor.addr) - require.NoError(t, err) - require.Len(t, deposits, 1) - require.Equal(t, depositTx.Hash().String(), deposits[0].L1TxHash) - - withdrawals, err := testSuite.ApiClient.GetAllWithdrawalsByAddress(actor.addr) - require.NoError(t, err) - require.Len(t, withdrawals, 1) - require.Equal(t, l2ToL1MessagePasserWithdrawTx.Hash().String(), withdrawals[0].TransactionHash) - - } - - // (4) Ensure that supply assessment is correct - assessment, err := testSuite.ApiClient.GetSupplyAssessment() - require.NoError(t, err) - - mintFloat, _ := mintSum.Float64() - require.Equal(t, mintFloat, assessment.L1DepositSum) - - withdrawFloat, _ := s.all.Float64() - require.Equal(t, withdrawFloat, assessment.InitWithdrawalSum) - - require.Equal(t, assessment.ProvenWithdrawSum, float64(0)) - require.Equal(t, assessment.FinalizedWithdrawSum, float64(0)) - - // (5) Prove & finalize withdrawals on L1 - for _, actor := range actors { - params, proveReceipt := op_e2e.ProveWithdrawal(t, *testSuite.OpCfg, testSuite.OpSys, "sequencer", actor.priv, actor.receipt) - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l1Header := testSuite.Indexer.BridgeProcessor.LastL1Header - seen := l1Header != nil && l1Header.Number.Uint64() >= proveReceipt.BlockNumber.Uint64() - return seen, nil - })) - - s.proven = new(big.Int).Add(s.proven, actor.amt) - - finalReceipt, _, _ := op_e2e.FinalizeWithdrawal(t, *testSuite.OpCfg, testSuite.L1Client, actor.priv, proveReceipt, params) - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l1Header := testSuite.Indexer.BridgeProcessor.LastFinalizedL1Header - seen := l1Header != nil && l1Header.Number.Uint64() >= finalReceipt.BlockNumber.Uint64() - return seen, nil - })) - - s.finalized = new(big.Int).Add(s.finalized, actor.amt) - } - - // (6) Validate assessment for proven & finalized withdrawals - assessment, err = testSuite.ApiClient.GetSupplyAssessment() - require.NoError(t, err) - - proven, acc := s.proven.Float64() - require.Zero(t, acc) - require.Equal(t, proven, assessment.ProvenWithdrawSum) - - finalized, acc := s.finalized.Float64() - require.Zero(t, acc) - require.Equal(t, finalized, assessment.FinalizedWithdrawSum) -} diff --git a/indexer/e2e_tests/etl_e2e_test.go b/indexer/e2e_tests/etl_e2e_test.go deleted file mode 100644 index 688170bea94a..000000000000 --- a/indexer/e2e_tests/etl_e2e_test.go +++ /dev/null @@ -1,167 +0,0 @@ -package e2e_tests - -import ( - "context" - "math/big" - "testing" - "time" - - "github.com/ethereum-optimism/optimism/indexer/config" - "github.com/ethereum-optimism/optimism/indexer/database" - "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" - "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait" - "github.com/ethereum-optimism/optimism/op-node/bindings" - bindingspreview "github.com/ethereum-optimism/optimism/op-node/bindings/preview" - "github.com/ethereum-optimism/optimism/op-node/withdrawals" - - "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/rlp" - - "github.com/stretchr/testify/require" -) - -func TestE2EL1ETLInactivityWindow(t *testing.T) { - withInactivityWindow := func(cfg *config.Config) *config.Config { - cfg.Chain.ETLAllowedInactivityWindowSeconds = 1 - - // Passing the inactivity window will index the latest header - // in the batch. Make the batch size 1 so all blocks are indexed - cfg.Chain.L1HeaderBufferSize = 1 - return cfg - } - - testSuite := createE2ETestSuite(t, withInactivityWindow) - - // wait for 10 L1 blocks to be posted - require.NoError(t, wait.For(context.Background(), time.Second, func() (bool, error) { - l1Header := testSuite.Indexer.BridgeProcessor.LastL1Header - return l1Header != nil && l1Header.Number.Uint64() >= 10, nil - })) - - // each block is indexed - for height := int64(0); height < int64(10); height++ { - header, err := testSuite.DB.Blocks.L1BlockHeaderWithFilter(database.BlockHeader{Number: big.NewInt(height)}) - require.NoError(t, err) - require.NotNil(t, header) - require.Equal(t, header.Number.Uint64(), uint64(height)) - } -} - -func TestE2EETL(t *testing.T) { - testSuite := createE2ETestSuite(t) - - l2OutputOracle, err := bindings.NewL2OutputOracle(testSuite.OpCfg.L1Deployments.L2OutputOracleProxy, testSuite.L1Client) - require.NoError(t, err) - - disputeGameFactory, err := bindings.NewDisputeGameFactoryCaller(testSuite.OpCfg.L1Deployments.DisputeGameFactoryProxy, testSuite.L1Client) - require.NoError(t, err) - - optimismPortal, err := bindingspreview.NewOptimismPortal2Caller(testSuite.OpCfg.L1Deployments.OptimismPortalProxy, testSuite.L1Client) - require.NoError(t, err) - - // wait for at least 10 L2 blocks posted on L1 - require.NoError(t, wait.For(context.Background(), time.Second, func() (bool, error) { - var l2Height *big.Int - var err error - if e2eutils.UseFaultProofs() { - gameCount, err := disputeGameFactory.GameCount(&bind.CallOpts{Context: context.Background()}) - require.NoError(t, err) - if gameCount.Cmp(big.NewInt(0)) == 0 { - return false, nil - } - - latestGame, err := withdrawals.FindLatestGame(context.Background(), disputeGameFactory, optimismPortal) - require.NoError(t, err) - l2Height = new(big.Int).SetBytes(latestGame.ExtraData[0:32]) - } else { - l2Height, err = l2OutputOracle.LatestBlockNumber(&bind.CallOpts{Context: context.Background()}) - } - return l2Height != nil && l2Height.Uint64() >= 9, err - })) - - // ensure we've indexed up to this state - l1Height, err := testSuite.L1Client.BlockNumber(context.Background()) - require.NoError(t, err) - require.NoError(t, wait.For(context.Background(), 100*time.Millisecond, func() (bool, error) { - l1Header, err := testSuite.DB.Blocks.L1LatestBlockHeader() - require.NoError(t, err) - - l2Header, err := testSuite.DB.Blocks.L2LatestBlockHeader() - require.NoError(t, err) - - return (l1Header != nil && l1Header.Number.Uint64() >= l1Height) && (l2Header != nil && l2Header.Number.Uint64() >= 9), nil - })) - - t.Run("indexes all L2 blocks", func(t *testing.T) { - latestL2Header, err := testSuite.DB.Blocks.L2LatestBlockHeader() - require.NoError(t, err) - require.NotNil(t, latestL2Header) - require.True(t, latestL2Header.Number.Uint64() >= 9) - - for i := int64(0); i < 10; i++ { - height := big.NewInt(i) - - indexedHeader, err := testSuite.DB.Blocks.L2BlockHeaderWithFilter(database.BlockHeader{Number: height}) - require.NoError(t, err) - require.NotNil(t, indexedHeader) - - header, err := testSuite.L2Client.HeaderByNumber(context.Background(), height) - require.NoError(t, err) - require.NotNil(t, indexedHeader) - - require.Equal(t, header.Number.Int64(), indexedHeader.Number.Int64()) - require.Equal(t, header.Hash(), indexedHeader.Hash) - require.Equal(t, header.ParentHash, indexedHeader.ParentHash) - require.Equal(t, header.Time, indexedHeader.Timestamp) - - // ensure the right rlp encoding is stored. checking the hashes - // suffices as it is based on the rlp bytes of the header - require.Equal(t, header.Hash(), indexedHeader.RLPHeader.Hash()) - } - }) - - t.Run("indexes L1 blocks with accompanying contract event", func(t *testing.T) { - l1Contracts := []common.Address{} - testSuite.OpCfg.L1Deployments.ForEach(func(name string, addr common.Address) { l1Contracts = append(l1Contracts, addr) }) - logFilter := ethereum.FilterQuery{FromBlock: big.NewInt(0), ToBlock: big.NewInt(int64(l1Height)), Addresses: l1Contracts} - logs, err := testSuite.L1Client.FilterLogs(context.Background(), logFilter) // []types.Log - require.NoError(t, err) - - for i := range logs { - log := logs[i] - contractEvent, err := testSuite.DB.ContractEvents.L1ContractEventWithFilter(database.ContractEvent{TransactionHash: log.TxHash, LogIndex: uint64(log.Index)}) - require.NoError(t, err) - require.Equal(t, log.Topics[0], contractEvent.EventSignature) - require.Equal(t, log.BlockHash, contractEvent.BlockHash) - require.Equal(t, log.Address, contractEvent.ContractAddress) - require.Equal(t, log.TxHash, contractEvent.TransactionHash) - require.Equal(t, log.Index, uint(contractEvent.LogIndex)) - - // ensure the right rlp encoding of the contract log is stored - logRlp, err := rlp.EncodeToBytes(&log) - require.NoError(t, err) - contractEventRlp, err := rlp.EncodeToBytes(contractEvent.RLPLog) - require.NoError(t, err) - require.ElementsMatch(t, logRlp, contractEventRlp) - - // ensure the block is also indexed - block, err := testSuite.L1Client.BlockByNumber(context.Background(), big.NewInt(int64(log.BlockNumber))) - require.NoError(t, err) - require.Equal(t, block.Time(), contractEvent.Timestamp) - require.Equal(t, block.Hash(), contractEvent.BlockHash) - - l1BlockHeader, err := testSuite.DB.Blocks.L1BlockHeader(block.Hash()) - require.NoError(t, err) - require.Equal(t, block.Hash(), l1BlockHeader.Hash) - require.Equal(t, block.ParentHash(), l1BlockHeader.ParentHash) - require.Equal(t, block.Number().Uint64(), l1BlockHeader.Number.Uint64()) - require.Equal(t, block.Time(), l1BlockHeader.Timestamp) - - // ensure the right rlp encoding is stored. checking the hashes - // suffices as it is based on the rlp bytes of the header - require.Equal(t, block.Hash(), l1BlockHeader.RLPHeader.Hash()) - } - }) -} diff --git a/indexer/e2e_tests/reorg_e2e_test.go b/indexer/e2e_tests/reorg_e2e_test.go deleted file mode 100644 index 04dcef8f2694..000000000000 --- a/indexer/e2e_tests/reorg_e2e_test.go +++ /dev/null @@ -1,92 +0,0 @@ -package e2e_tests - -import ( - "context" - "math/big" - "testing" - "time" - - "github.com/ethereum-optimism/optimism/indexer/bindings" - "github.com/ethereum-optimism/optimism/indexer/database" - "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait" - "github.com/ethereum-optimism/optimism/op-service/predeploys" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/params" - "github.com/stretchr/testify/require" -) - -func TestE2EReorgDeletion(t *testing.T) { - testSuite := createE2ETestSuite(t) - - // Conduct an L1 Deposit/Withdrawal through the standard bridge - // which touches the CDM and root bridge contracts. Thus we'll e2e - // test that the deletes appropriately cascades to all tables - - l1StandardBridge, err := bindings.NewL1StandardBridge(testSuite.OpCfg.L1Deployments.L1StandardBridgeProxy, testSuite.L1Client) - require.NoError(t, err) - l2StandardBridge, err := bindings.NewL2StandardBridge(predeploys.L2StandardBridgeAddr, testSuite.L2Client) - require.NoError(t, err) - - aliceAddr := testSuite.OpCfg.Secrets.Addresses().Alice - - l1Opts, err := bind.NewKeyedTransactorWithChainID(testSuite.OpCfg.Secrets.Alice, testSuite.OpCfg.L1ChainIDBig()) - require.NoError(t, err) - l2Opts, err := bind.NewKeyedTransactorWithChainID(testSuite.OpCfg.Secrets.Alice, testSuite.OpCfg.L2ChainIDBig()) - require.NoError(t, err) - - l1Opts.Value = big.NewInt(params.Ether) - l2Opts.Value = big.NewInt(params.Ether) - - // wait for an L1 block (depends on an emitted event -- L2OO) to get indexed as a reference point prior to deletion - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - latestL1Header, err := testSuite.DB.Blocks.L1LatestBlockHeader() - return latestL1Header != nil, err - })) - - depositTx, err := l1StandardBridge.DepositETH(l1Opts, 200_000, []byte{byte(1)}) - require.NoError(t, err) - depositReceipt, err := wait.ForReceiptOK(context.Background(), testSuite.L1Client, depositTx.Hash()) - require.NoError(t, err) - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l1Header := testSuite.Indexer.BridgeProcessor.LastL1Header - return l1Header != nil && l1Header.Number.Uint64() >= depositReceipt.BlockNumber.Uint64(), nil - })) - deposits, err := testSuite.DB.BridgeTransfers.L1BridgeDepositsByAddress(aliceAddr, "", 1) - require.NoError(t, err) - require.Len(t, deposits.Deposits, 1) - - withdrawTx, err := l2StandardBridge.Withdraw(l2Opts, predeploys.LegacyERC20ETHAddr, l2Opts.Value, 200_000, []byte{byte(1)}) - require.NoError(t, err) - withdrawReceipt, err := wait.ForReceiptOK(context.Background(), testSuite.L2Client, withdrawTx.Hash()) - require.NoError(t, err) - require.NoError(t, wait.For(context.Background(), 500*time.Millisecond, func() (bool, error) { - l2Header := testSuite.Indexer.BridgeProcessor.LastL2Header - return l2Header != nil && l2Header.Number.Uint64() >= withdrawReceipt.BlockNumber.Uint64(), nil - })) - withdrawals, err := testSuite.DB.BridgeTransfers.L2BridgeWithdrawalsByAddress(aliceAddr, "", 1) - require.NoError(t, err) - require.Len(t, withdrawals.Withdrawals, 1) - - // Stop the indexer and reorg out L1 state from the deposit transaction - // and implicitly the derived L2 state where the withdrawal was initiated - depositBlock, err := testSuite.DB.Blocks.L1BlockHeaderWithFilter(database.BlockHeader{Number: depositReceipt.BlockNumber}) - require.NoError(t, err) - require.NoError(t, testSuite.Indexer.Stop(context.Background())) - require.NoError(t, testSuite.DB.Blocks.DeleteReorgedState(deposits.Deposits[0].L1BridgeDeposit.Tx.Timestamp)) - - // L1 & L2 block state deleted appropriately - latestL1Header, err := testSuite.DB.Blocks.L2LatestBlockHeader() - require.NoError(t, err) - require.True(t, latestL1Header.Timestamp < depositBlock.Timestamp) - latestL2Header, err := testSuite.DB.Blocks.L2LatestBlockHeader() - require.NoError(t, err) - require.True(t, latestL2Header.Timestamp < depositBlock.Timestamp) - - // Deposits/Withdrawals deletes cascade appropriately from log deletion - deposits, err = testSuite.DB.BridgeTransfers.L1BridgeDepositsByAddress(aliceAddr, "", 1) - require.NoError(t, err) - require.Len(t, deposits.Deposits, 0) - withdrawals, err = testSuite.DB.BridgeTransfers.L2BridgeWithdrawalsByAddress(aliceAddr, "", 1) - require.NoError(t, err) - require.Len(t, withdrawals.Withdrawals, 0) -} diff --git a/indexer/e2e_tests/setup.go b/indexer/e2e_tests/setup.go deleted file mode 100644 index 32d1268e3343..000000000000 --- a/indexer/e2e_tests/setup.go +++ /dev/null @@ -1,210 +0,0 @@ -package e2e_tests - -import ( - "context" - "database/sql" - "fmt" - "os" - "testing" - "time" - - "github.com/ethereum-optimism/optimism/indexer" - "github.com/ethereum-optimism/optimism/indexer/api" - "github.com/ethereum-optimism/optimism/indexer/config" - "github.com/ethereum-optimism/optimism/indexer/database" - - op_e2e "github.com/ethereum-optimism/optimism/op-e2e" - oplog "github.com/ethereum-optimism/optimism/op-service/log" - "github.com/ethereum-optimism/optimism/op-service/metrics" - "github.com/ethereum-optimism/optimism/op-service/testlog" - - "github.com/ethereum/go-ethereum/ethclient" - "github.com/ethereum/go-ethereum/log" - - _ "github.com/jackc/pgx/v5/stdlib" - "github.com/prometheus/client_golang/prometheus" - "github.com/stretchr/testify/require" -) - -/* - NOTE - Most of the current bridge tests fetch chain data via direct database queries. These could all - be transitioned to use the API client instead to better simulate/validate real-world usage. - Supporting this would potentially require adding new API endpoints for the specific query lookup types. -*/ - -type E2ETestSuite struct { - t *testing.T - MetricsRegistry *prometheus.Registry - - // API - API *api.APIService - ApiClient *api.Client - - // Indexer - DB *database.DB - Indexer *indexer.Indexer - - // Rollup - OpCfg *op_e2e.SystemConfig - OpSys *op_e2e.System - - // Clients - L1Client *ethclient.Client - L2Client *ethclient.Client -} - -type ConfigOpts func(*config.Config) *config.Config - -func init() { - // Disable the global logger. Ideally we'd like to dump geth - // logs per-test but that's possible when running tests in - // parallel as the root logger is shared. - oplog.SetGlobalLogHandler(log.DiscardHandler()) -} - -// createE2ETestSuite ... Create a new E2E test suite -func createE2ETestSuite(t *testing.T, cfgOpt ...ConfigOpts) E2ETestSuite { - dbUser := os.Getenv("DB_USER") - dbName := setupTestDatabase(t) - - require.LessOrEqual(t, len(cfgOpt), 1) - - // E2E tests can run on the order of magnitude of minutes. - // We mark the test as parallel before starting the devnet - // to reduce that number of idle routines when paused. - t.Parallel() - - opCfg := op_e2e.DefaultSystemConfig(t) - - // Unless specified, omit logs emitted by the various components - if len(os.Getenv("ENABLE_ROLLUP_LOGS")) == 0 { - t.Log("set env 'ENABLE_ROLLUP_LOGS' to show rollup logs") - for name := range opCfg.Loggers { - t.Logf("discarding logs for %s", name) - noopLog := log.NewLogger(log.DiscardHandler()) - opCfg.Loggers[name] = noopLog - } - } - - // Rollup Start - opSys, err := opCfg.Start(t) - require.NoError(t, err) - t.Cleanup(func() { opSys.Close() }) - - // Indexer Configuration and Start - indexerCfg := &config.Config{ - DB: config.DBConfig{Host: "127.0.0.1", Port: 5432, Name: dbName, User: dbUser}, - RPCs: config.RPCsConfig{ - L1RPC: opSys.EthInstances["l1"].HTTPEndpoint(), - L2RPC: opSys.EthInstances["sequencer"].HTTPEndpoint(), - }, - Chain: config.ChainConfig{ - L1PollingInterval: uint(opCfg.DeployConfig.L1BlockTime) * 1000, - L2PollingInterval: uint(opCfg.DeployConfig.L2BlockTime) * 1000, - L2Contracts: config.L2ContractsFromPredeploys(), - L1Contracts: config.L1Contracts{ - AddressManager: opCfg.L1Deployments.AddressManager, - SystemConfigProxy: opCfg.L1Deployments.SystemConfigProxy, - OptimismPortalProxy: opCfg.L1Deployments.OptimismPortalProxy, - L2OutputOracleProxy: opCfg.L1Deployments.L2OutputOracleProxy, - L1CrossDomainMessengerProxy: opCfg.L1Deployments.L1CrossDomainMessengerProxy, - L1StandardBridgeProxy: opCfg.L1Deployments.L1StandardBridgeProxy, - L1ERC721BridgeProxy: opCfg.L1Deployments.L1ERC721BridgeProxy, - DisputeGameFactoryProxy: opCfg.L1Deployments.DisputeGameFactoryProxy, - }, - }, - HTTPServer: config.ServerConfig{Host: "127.0.0.1", Port: 0}, - MetricsServer: config.ServerConfig{Host: "127.0.0.1", Port: 0}, - } - - // apply any settings - for _, opt := range cfgOpt { - indexerCfg = opt(indexerCfg) - } - - indexerLog := testlog.Logger(t, log.LevelInfo).New("role", "indexer") - ix, err := indexer.NewIndexer(context.Background(), indexerLog, indexerCfg, func(cause error) { - if cause != nil { - t.Fatalf("indexer shut down with critical error: %v", cause) - } - }) - require.NoError(t, err) - require.NoError(t, ix.Start(context.Background()), "cleanly start indexer") - t.Cleanup(func() { require.NoError(t, ix.Stop(context.Background())) }) - - dbLog := testlog.Logger(t, log.LvlInfo).New("role", "db") - db, err := database.NewDB(context.Background(), dbLog, indexerCfg.DB) - require.NoError(t, err) - t.Cleanup(func() { db.Close() }) - - // API Configuration and Start - apiLog := testlog.Logger(t, log.LevelInfo).New("role", "indexer_api") - apiCfg := &api.Config{ - DB: &api.TestDBConnector{BridgeTransfers: db.BridgeTransfers}, // reuse the same DB - HTTPServer: config.ServerConfig{Host: "127.0.0.1", Port: 0}, - MetricsServer: config.ServerConfig{Host: "127.0.0.1", Port: 0}, - } - - apiService, err := api.NewApi(context.Background(), apiLog, apiCfg) - require.NoError(t, err, "create indexer API service") - require.NoError(t, apiService.Start(context.Background()), "start indexer API service") - t.Cleanup(func() { - require.NoError(t, apiService.Stop(context.Background()), "cleanly shut down indexer") - }) - - // Wait for the API to start listening - time.Sleep(1 * time.Second) - - apiClient, err := api.NewClient(&api.ClientConfig{PaginationLimit: 100, BaseURL: "http://" + apiService.Addr()}) - require.NoError(t, err, "must open indexer API client") - - return E2ETestSuite{ - t: t, - MetricsRegistry: metrics.NewRegistry(), - ApiClient: apiClient, - DB: db, - Indexer: ix, - OpCfg: &opCfg, - OpSys: opSys, - L1Client: opSys.Clients["l1"], - L2Client: opSys.Clients["sequencer"], - } -} - -func setupTestDatabase(t *testing.T) string { - user := os.Getenv("DB_USER") - require.NotEmpty(t, user, "DB_USER env variable expected to instantiate test database") - - pg, err := sql.Open("pgx", fmt.Sprintf("postgres://%s@localhost:5432?sslmode=disable", user)) - require.NoError(t, err) - require.NoError(t, pg.Ping()) - - // create database - dbName := fmt.Sprintf("indexer_test_%d", time.Now().UnixNano()) - _, err = pg.Exec("CREATE DATABASE " + dbName) - require.NoError(t, err) - t.Cleanup(func() { - _, err := pg.Exec("DROP DATABASE " + dbName) - require.NoError(t, err) - pg.Close() - }) - - dbConfig := config.DBConfig{ - Host: "127.0.0.1", - Port: 5432, - Name: dbName, - User: user, - Password: "", - } - - noopLog := log.NewLogger(log.DiscardHandler()) - db, err := database.NewDB(context.Background(), noopLog, dbConfig) - require.NoError(t, err) - defer db.Close() - - err = db.ExecuteSQLMigration("../migrations") - require.NoError(t, err) - - t.Logf("database %s setup and migrations executed", dbName) - return dbName -} diff --git a/indexer/e2e_tests/utils/cross_domain_messages.go b/indexer/e2e_tests/utils/cross_domain_messages.go deleted file mode 100644 index f3c5e72b2068..000000000000 --- a/indexer/e2e_tests/utils/cross_domain_messages.go +++ /dev/null @@ -1,62 +0,0 @@ -package utils - -import ( - "errors" - "math/big" - - "github.com/ethereum-optimism/optimism/indexer/bindings" - "github.com/ethereum-optimism/optimism/op-chain-ops/crossdomain" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" -) - -type CrossDomainMessengerSentMessage struct { - *bindings.CrossDomainMessengerSentMessage - Value *big.Int - MessageHash common.Hash -} - -func ParseCrossDomainMessage(sentMessageReceipt *types.Receipt) (CrossDomainMessengerSentMessage, error) { - abi, err := bindings.CrossDomainMessengerMetaData.GetAbi() - if err != nil { - return CrossDomainMessengerSentMessage{}, err - } - - sentMessageEventAbi := abi.Events["SentMessage"] - messenger, err := bindings.NewCrossDomainMessenger(common.Address{}, nil) - if err != nil { - return CrossDomainMessengerSentMessage{}, err - } - - for i, log := range sentMessageReceipt.Logs { - if len(log.Topics) > 0 && log.Topics[0] == sentMessageEventAbi.ID { - sentMessage, err := messenger.ParseSentMessage(*log) - if err != nil { - return CrossDomainMessengerSentMessage{}, err - } - sentMessageExtension, err := messenger.ParseSentMessageExtension1(*sentMessageReceipt.Logs[i+1]) - if err != nil { - return CrossDomainMessengerSentMessage{}, err - } - - msg := crossdomain.NewCrossDomainMessage( - sentMessage.MessageNonce, - sentMessage.Sender, - sentMessage.Target, - sentMessageExtension.Value, - sentMessage.GasLimit, - sentMessage.Message, - ) - - msgHash, err := msg.Hash() - if err != nil { - return CrossDomainMessengerSentMessage{}, err - } - - return CrossDomainMessengerSentMessage{sentMessage, sentMessageExtension.Value, msgHash}, nil - } - } - - return CrossDomainMessengerSentMessage{}, errors.New("missing SentMessage receipts") -} diff --git a/indexer/e2e_tests/utils/deposits.go b/indexer/e2e_tests/utils/deposits.go deleted file mode 100644 index 23d29bdbcc53..000000000000 --- a/indexer/e2e_tests/utils/deposits.go +++ /dev/null @@ -1,40 +0,0 @@ -package utils - -import ( - "errors" - - "github.com/ethereum-optimism/optimism/indexer/bindings" - "github.com/ethereum-optimism/optimism/op-node/rollup/derive" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" -) - -type DepositInfo struct { - *bindings.OptimismPortalTransactionDeposited - DepositTx *types.DepositTx -} - -func ParseDepositInfo(depositReceipt *types.Receipt) (*DepositInfo, error) { - optimismPortal, err := bindings.NewOptimismPortal(common.Address{}, nil) - if err != nil { - return nil, err - } - - for _, log := range depositReceipt.Logs { - if log.Topics[0] == derive.DepositEventABIHash { - portalTxDeposited, err := optimismPortal.ParseTransactionDeposited(*log) - if err != nil { - return nil, err - } - depositTx, err := derive.UnmarshalDepositLogEvent(log) - if err != nil { - return nil, err - } - - return &DepositInfo{portalTxDeposited, depositTx}, nil - } - } - - return nil, errors.New("cannot find deposit event in receipt") -} diff --git a/indexer/etl/etl.go b/indexer/etl/etl.go deleted file mode 100644 index 380d8ed6815f..000000000000 --- a/indexer/etl/etl.go +++ /dev/null @@ -1,170 +0,0 @@ -package etl - -import ( - "context" - "errors" - "fmt" - "math/big" - "time" - - "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/log" - - "github.com/ethereum-optimism/optimism/indexer/node" - "github.com/ethereum-optimism/optimism/op-service/client" - "github.com/ethereum-optimism/optimism/op-service/clock" -) - -var ( - defaultRequestTimeout = 5 * time.Second -) - -type Config struct { - LoopIntervalMsec uint - HeaderBufferSize uint - - // Applicable only to the L1 ETL (all L2 block are indexed) - AllowedInactivityWindowSeconds uint - - StartHeight *big.Int - ConfirmationDepth *big.Int -} - -type ETL struct { - log log.Logger - metrics Metricer - - loopInterval time.Duration - headerBufferSize uint64 - headerTraversal *node.HeaderTraversal - - contracts []common.Address - etlBatches chan *ETLBatch - - client client.Client - - // A reference that'll stay populated between intervals - // in the event of failures in order to retry. - headers []types.Header - - worker *clock.LoopFn -} - -type ETLBatch struct { - Logger log.Logger - - Headers []types.Header - HeaderMap map[common.Hash]*types.Header - - Logs []types.Log - HeadersWithLog map[common.Hash]bool -} - -// Start starts the ETL polling routine. The ETL work should be stopped with Close(). -func (etl *ETL) Start() error { - if etl.worker != nil { - return errors.New("already started") - } - etl.worker = clock.NewLoopFn(clock.SystemClock, etl.tick, func() error { - etl.log.Info("shutting down batch producer") - close(etl.etlBatches) // can close the channel now, to signal to the consumer that we're done - return nil - }, etl.loopInterval) - return nil -} - -func (etl *ETL) Close() error { - if etl.worker == nil { - return nil // worker was not running - } - return etl.worker.Close() -} - -func (etl *ETL) tick(_ context.Context) { - done := etl.metrics.RecordInterval() - if len(etl.headers) > 0 { - etl.log.Info("retrying previous batch") - } else { - newHeaders, err := etl.headerTraversal.NextHeaders(etl.headerBufferSize) - if err != nil { - etl.log.Error("error querying for headers", "err", err) - } else if len(newHeaders) == 0 { - etl.log.Warn("no new headers. etl at head?") - } else { - etl.headers = newHeaders - } - - latestHeader := etl.headerTraversal.LatestHeader() - if latestHeader != nil { - etl.metrics.RecordLatestHeight(latestHeader.Number) - } - } - - // only clear the reference if we were able to process this batch - err := etl.processBatch(etl.headers) - if err == nil { - etl.headers = nil - } - - done(err) -} - -func (etl *ETL) processBatch(headers []types.Header) error { - if len(headers) == 0 { - return nil - } - - firstHeader, lastHeader := headers[0], headers[len(headers)-1] - batchLog := etl.log.New("batch_start_block_number", firstHeader.Number, "batch_end_block_number", lastHeader.Number) - batchLog.Info("extracting batch", "size", len(headers)) - - headerMap := make(map[common.Hash]*types.Header, len(headers)) - for i := range headers { - header := headers[i] - headerMap[header.Hash()] = &header - } - - headersWithLog := make(map[common.Hash]bool, len(headers)) - - ctxwt, cancel := context.WithTimeout(context.Background(), defaultRequestTimeout) - defer cancel() - - filterQuery := ethereum.FilterQuery{FromBlock: firstHeader.Number, ToBlock: lastHeader.Number, Addresses: etl.contracts} - logs, err := node.FilterLogsSafe(ctxwt, etl.client, filterQuery) - if err != nil { - batchLog.Info("failed to extract logs", "err", err) - return err - } - - if logs.ToBlockHeader.Number.Cmp(lastHeader.Number) != 0 { - // Warn and simply wait for the provider to synchronize state - batchLog.Warn("mismatch in FilterLog#ToBlock number", "queried_to_block_number", lastHeader.Number, "reported_to_block_number", logs.ToBlockHeader.Number) - return fmt.Errorf("mismatch in FilterLog#ToBlock number") - } else if logs.ToBlockHeader.Hash() != lastHeader.Hash() { - batchLog.Error("mismatch in FilterLog#ToBlock block hash!!!", "queried_to_block_hash", lastHeader.Hash().String(), "reported_to_block_hash", logs.ToBlockHeader.Hash().String()) - return fmt.Errorf("mismatch in FilterLog#ToBlock block hash!!!") - } - - if len(logs.Logs) > 0 { - batchLog.Info("detected logs", "size", len(logs.Logs)) - } - - for i := range logs.Logs { - log := logs.Logs[i] - headersWithLog[log.BlockHash] = true - if _, ok := headerMap[log.BlockHash]; !ok { - // NOTE. Definitely an error state if the none of the headers were re-orged out in between - // the blocks and logs retrieval operations. Unlikely as long as the confirmation depth has - // been appropriately set or when we get to natively handling reorgs. - batchLog.Error("log found with block hash not in the batch", "block_hash", logs.Logs[i].BlockHash, "log_index", logs.Logs[i].Index) - return errors.New("parsed log with a block hash not in the batch") - } - } - - // ensure we use unique downstream references for the etl batch - headersRef := headers - etl.etlBatches <- &ETLBatch{Logger: batchLog, Headers: headersRef, HeaderMap: headerMap, Logs: logs.Logs, HeadersWithLog: headersWithLog} - return nil -} diff --git a/indexer/etl/l1_etl.go b/indexer/etl/l1_etl.go deleted file mode 100644 index 1fe87db42c86..000000000000 --- a/indexer/etl/l1_etl.go +++ /dev/null @@ -1,253 +0,0 @@ -package etl - -import ( - "context" - "errors" - "fmt" - "strings" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/log" - - "github.com/ethereum-optimism/optimism/indexer/config" - "github.com/ethereum-optimism/optimism/indexer/database" - "github.com/ethereum-optimism/optimism/indexer/node" - "github.com/ethereum-optimism/optimism/op-service/client" - "github.com/ethereum-optimism/optimism/op-service/retry" - "github.com/ethereum-optimism/optimism/op-service/tasks" -) - -type L1ETL struct { - ETL - latestHeader *types.Header - - cfg Config - - // the batch handler may do work that we can interrupt on shutdown - resourceCtx context.Context - resourceCancel context.CancelFunc - - tasks tasks.Group - - db *database.DB - - mu sync.Mutex - listeners []chan *types.Header -} - -// NewL1ETL creates a new L1ETL instance that will start indexing from different starting points -// depending on the state of the database and the supplied start height. -func NewL1ETL(cfg Config, log log.Logger, db *database.DB, metrics Metricer, client client.Client, - contracts config.L1Contracts, shutdown context.CancelCauseFunc) (*L1ETL, error) { - log = log.New("etl", "l1") - - zeroAddr := common.Address{} - l1Contracts := []common.Address{} - if err := contracts.ForEach(func(name string, addr common.Address) error { - // Since we dont have backfill support yet, we want to make sure all expected - // contracts are specified to ensure consistent behavior. Once backfill support - // is ready, we can relax this requirement. - if addr == zeroAddr && !strings.HasPrefix(name, "Legacy") { - log.Error("address not configured", "name", name) - return errors.New("all L1Contracts must be configured") - } - - log.Info("configured contract", "name", name, "addr", addr) - l1Contracts = append(l1Contracts, addr) - return nil - }); err != nil { - return nil, err - } - - latestHeader, err := db.Blocks.L1LatestBlockHeader() - if err != nil { - return nil, err - } - - // Determine the starting height for traversal - var fromHeader *types.Header - if latestHeader != nil { - log.Info("detected last indexed block", "number", latestHeader.Number, "hash", latestHeader.Hash) - fromHeader = latestHeader.RLPHeader.Header() - } else if cfg.StartHeight.BitLen() > 0 { - log.Info("no indexed state starting from supplied L1 height", "height", cfg.StartHeight.String()) - - ctxwt, cancel := context.WithTimeout(context.Background(), defaultRequestTimeout) - defer cancel() - - header, err := client.HeaderByNumber(ctxwt, cfg.StartHeight) - if err != nil { - return nil, fmt.Errorf("could not fetch starting block header: %w", err) - } - - fromHeader = header - } else { - log.Info("no indexed state, starting from genesis") - } - - // NOTE - The use of un-buffered channel here assumes that downstream consumers - // will be able to keep up with the rate of incoming batches. - // When the producer closes the channel we stop consuming from it. - etlBatches := make(chan *ETLBatch) - - etl := ETL{ - loopInterval: time.Duration(cfg.LoopIntervalMsec) * time.Millisecond, - headerBufferSize: uint64(cfg.HeaderBufferSize), - - log: log, - metrics: metrics, - headerTraversal: node.NewHeaderTraversal(client, fromHeader, cfg.ConfirmationDepth), - contracts: l1Contracts, - etlBatches: etlBatches, - - client: client, - } - - resCtx, resCancel := context.WithCancel(context.Background()) - return &L1ETL{ - ETL: etl, - latestHeader: fromHeader, - - cfg: cfg, - - db: db, - resourceCtx: resCtx, - resourceCancel: resCancel, - tasks: tasks.Group{HandleCrit: func(err error) { - shutdown(fmt.Errorf("critical error in L1 ETL: %w", err)) - }}, - }, nil -} - -func (l1Etl *L1ETL) Close() error { - var result error - // close the producer - if err := l1Etl.ETL.Close(); err != nil { - result = errors.Join(result, fmt.Errorf("failed to close internal ETL: %w", err)) - } - // tell the consumer it can stop what it's doing - l1Etl.resourceCancel() - // wait for consumer to pick up on closure of producer - if err := l1Etl.tasks.Wait(); err != nil { - result = errors.Join(result, fmt.Errorf("failed to await batch handler completion: %w", err)) - } - // close listeners - for i := range l1Etl.listeners { - close(l1Etl.listeners[i]) - } - return result -} - -func (l1Etl *L1ETL) Start() error { - l1Etl.log.Info("starting etl...") - - // start ETL batch producer - if err := l1Etl.ETL.Start(); err != nil { - return fmt.Errorf("failed to start internal ETL: %w", err) - } - // start ETL batch consumer - l1Etl.tasks.Go(func() error { - for batch := range l1Etl.etlBatches { - if err := l1Etl.handleBatch(batch); err != nil { - return fmt.Errorf("failed to handle batch, stopping L2 ETL: %w", err) - } - } - l1Etl.log.Info("no more batches, shutting down batch handler") - return nil - }) - return nil -} - -func (l1Etl *L1ETL) handleBatch(batch *ETLBatch) error { - // Index incoming batches (only L1 blocks that have an emitted log) - l1BlockHeaders := make([]database.L1BlockHeader, 0, len(batch.Headers)) - for i := range batch.Headers { - if _, ok := batch.HeadersWithLog[batch.Headers[i].Hash()]; ok { - l1BlockHeaders = append(l1BlockHeaders, database.L1BlockHeader{BlockHeader: database.BlockHeaderFromHeader(&batch.Headers[i])}) - } - } - - // If there has been no activity and the inactivity window has elapsed since the last header, index the latest - // block to remediate any false-stall alerts on downstream processors that rely on indexed state. - if l1Etl.cfg.AllowedInactivityWindowSeconds > 0 && len(l1BlockHeaders) == 0 { - latestHeader := batch.Headers[len(batch.Headers)-1] - if l1Etl.latestHeader == nil || latestHeader.Time-l1Etl.latestHeader.Time > uint64(l1Etl.cfg.AllowedInactivityWindowSeconds) { - l1BlockHeaders = append(l1BlockHeaders, database.L1BlockHeader{BlockHeader: database.BlockHeaderFromHeader(&latestHeader)}) - } - } - - l1ContractEvents := make([]database.L1ContractEvent, len(batch.Logs)) - for i := range batch.Logs { - timestamp := batch.HeaderMap[batch.Logs[i].BlockHash].Time - l1ContractEvents[i] = database.L1ContractEvent{ContractEvent: database.ContractEventFromLog(&batch.Logs[i], timestamp)} - l1Etl.ETL.metrics.RecordIndexedLog(batch.Logs[i].Address) - } - - // Continually try to persist this batch. If it fails after 10 attempts, we simply error out - retryStrategy := &retry.ExponentialStrategy{Min: 1000, Max: 20_000, MaxJitter: 250} - if _, err := retry.Do[interface{}](l1Etl.resourceCtx, 10, retryStrategy, func() (interface{}, error) { - if len(l1BlockHeaders) == 0 { - return nil, nil // skip - } - - if err := l1Etl.db.Transaction(func(tx *database.DB) error { - if err := tx.Blocks.StoreL1BlockHeaders(l1BlockHeaders); err != nil { - return err - } - // we must have logs if we have l1 blocks - if len(l1ContractEvents) > 0 { - if err := tx.ContractEvents.StoreL1ContractEvents(l1ContractEvents); err != nil { - return err - } - } - return nil - }); err != nil { - batch.Logger.Error("unable to persist batch", "err", err) - return nil, fmt.Errorf("unable to persist batch: %w", err) - } - - // a-ok! - return nil, nil - }); err != nil { - return err - } - - if len(l1BlockHeaders) == 0 { - batch.Logger.Info("skipped batch. no logs found") - } else { - batch.Logger.Info("indexed batch") - } - - // Since not every L1 block is indexed, we still want our metrics to cover L1 blocks - // that have been observed so that a false stall alert isn't triggered on low activity - l1Etl.latestHeader = &batch.Headers[len(batch.Headers)-1] - l1Etl.ETL.metrics.RecordIndexedHeaders(len(l1BlockHeaders)) - l1Etl.ETL.metrics.RecordEtlLatestHeight(l1Etl.latestHeader.Number) - - // Notify Listeners - l1Etl.mu.Lock() - defer l1Etl.mu.Unlock() - for i := range l1Etl.listeners { - select { - case l1Etl.listeners[i] <- l1Etl.latestHeader: - default: - // do nothing if the listener hasn't picked - // up the previous notif - } - } - - return nil -} - -// Notify returns a channel that'll receive the latest header when new data has been persisted -func (l1Etl *L1ETL) Notify() <-chan *types.Header { - receiver := make(chan *types.Header) - l1Etl.mu.Lock() - defer l1Etl.mu.Unlock() - - l1Etl.listeners = append(l1Etl.listeners, receiver) - return receiver -} diff --git a/indexer/etl/l1_etl_test.go b/indexer/etl/l1_etl_test.go deleted file mode 100644 index d97909ec0f4d..000000000000 --- a/indexer/etl/l1_etl_test.go +++ /dev/null @@ -1,108 +0,0 @@ -package etl - -import ( - "math/big" - "testing" - - "github.com/stretchr/testify/require" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/log" - - "github.com/ethereum-optimism/optimism/indexer/config" - "github.com/ethereum-optimism/optimism/indexer/database" - "github.com/ethereum-optimism/optimism/op-service/client" - "github.com/ethereum-optimism/optimism/op-service/metrics" - "github.com/ethereum-optimism/optimism/op-service/testlog" - "github.com/ethereum-optimism/optimism/op-service/testutils" -) - -func TestL1ETLConstruction(t *testing.T) { - etlMetrics := NewMetrics(metrics.NewRegistry(), "l1") - - type testSuite struct { - db *database.MockDB - client client.Client - start *big.Int - contracts config.L1Contracts - } - - var tests = []struct { - name string - construction func() *testSuite - assertion func(*L1ETL, error) - }{ - { - name: "Start from L1 config height", - construction: func() *testSuite { - client := new(testutils.MockClient) - db := database.NewMockDB() - - testStart := big.NewInt(100) - db.MockBlocks.On("L1LatestBlockHeader").Return(nil, nil) - - client.ExpectHeaderByNumber(big.NewInt(100), &types.Header{ParentHash: common.HexToHash("0x69")}, nil) - - return &testSuite{ - db: db, - client: client, - start: testStart, - - // utilize sample l1 contract configuration (optimism) - contracts: config.Presets[10].ChainConfig.L1Contracts, - } - }, - assertion: func(etl *L1ETL, err error) { - require.NoError(t, err) - require.Equal(t, etl.headerTraversal.LastTraversedHeader().ParentHash, common.HexToHash("0x69")) - }, - }, - { - name: "Start from recent height stored in DB", - construction: func() *testSuite { - client := new(testutils.MockClient) - db := database.NewMockDB() - - testStart := big.NewInt(100) - - db.MockBlocks.On("L1LatestBlockHeader").Return( - &database.L1BlockHeader{ - BlockHeader: database.BlockHeader{ - RLPHeader: &database.RLPHeader{ - Number: big.NewInt(69), - }, - }}, nil) - - return &testSuite{ - db: db, - client: client, - start: testStart, - - // utilize sample l1 contract configuration (optimism) - contracts: config.Presets[10].ChainConfig.L1Contracts, - } - }, - assertion: func(etl *L1ETL, err error) { - require.NoError(t, err) - header := etl.headerTraversal.LastTraversedHeader() - - require.True(t, header.Number.Cmp(big.NewInt(69)) == 0) - }, - }, - } - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - ts := test.construction() - - logger := testlog.Logger(t, log.LevelInfo) - cfg := Config{StartHeight: ts.start} - - etl, err := NewL1ETL(cfg, logger, ts.db.DB, etlMetrics, ts.client, ts.contracts, func(cause error) { - t.Fatalf("crit error: %v", cause) - }) - test.assertion(etl, err) - }) - } -} diff --git a/indexer/etl/l2_etl.go b/indexer/etl/l2_etl.go deleted file mode 100644 index f9df6eef7297..000000000000 --- a/indexer/etl/l2_etl.go +++ /dev/null @@ -1,210 +0,0 @@ -package etl - -import ( - "context" - "errors" - "fmt" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/log" - - "github.com/ethereum-optimism/optimism/indexer/config" - "github.com/ethereum-optimism/optimism/indexer/database" - "github.com/ethereum-optimism/optimism/indexer/node" - "github.com/ethereum-optimism/optimism/op-service/client" - "github.com/ethereum-optimism/optimism/op-service/retry" - "github.com/ethereum-optimism/optimism/op-service/tasks" -) - -type L2ETL struct { - ETL - latestHeader *types.Header - - // the batch handler may do work that we can interrupt on shutdown - resourceCtx context.Context - resourceCancel context.CancelFunc - - tasks tasks.Group - - db *database.DB - - mu sync.Mutex - listeners []chan *types.Header -} - -func NewL2ETL(cfg Config, log log.Logger, db *database.DB, metrics Metricer, client client.Client, - contracts config.L2Contracts, shutdown context.CancelCauseFunc) (*L2ETL, error) { - log = log.New("etl", "l2") - - zeroAddr := common.Address{} - l2Contracts := []common.Address{} - if err := contracts.ForEach(func(name string, addr common.Address) error { - // Since we dont have backfill support yet, we want to make sure all expected - // contracts are specified to ensure consistent behavior. Once backfill support - // is ready, we can relax this requirement. - if addr == zeroAddr { - log.Error("address not configured", "name", name) - return errors.New("all L2Contracts must be configured") - } - - log.Info("configured contract", "name", name, "addr", addr) - l2Contracts = append(l2Contracts, addr) - return nil - }); err != nil { - return nil, err - } - - latestHeader, err := db.Blocks.L2LatestBlockHeader() - if err != nil { - return nil, err - } - - var fromHeader *types.Header - if latestHeader != nil { - log.Info("detected last indexed block", "number", latestHeader.Number, "hash", latestHeader.Hash) - fromHeader = latestHeader.RLPHeader.Header() - } else { - log.Info("no indexed state, starting from genesis") - } - - etlBatches := make(chan *ETLBatch) - etl := ETL{ - loopInterval: time.Duration(cfg.LoopIntervalMsec) * time.Millisecond, - headerBufferSize: uint64(cfg.HeaderBufferSize), - - log: log, - metrics: metrics, - headerTraversal: node.NewHeaderTraversal(client, fromHeader, cfg.ConfirmationDepth), - contracts: l2Contracts, - etlBatches: etlBatches, - - client: client, - } - - resCtx, resCancel := context.WithCancel(context.Background()) - return &L2ETL{ - ETL: etl, - latestHeader: fromHeader, - - resourceCtx: resCtx, - resourceCancel: resCancel, - db: db, - tasks: tasks.Group{HandleCrit: func(err error) { - shutdown(fmt.Errorf("critical error in L2 ETL: %w", err)) - }}, - }, nil -} - -func (l2Etl *L2ETL) Close() error { - var result error - // close the producer - if err := l2Etl.ETL.Close(); err != nil { - result = errors.Join(result, fmt.Errorf("failed to close internal ETL: %w", err)) - } - // tell the consumer it can stop what it's doing - l2Etl.resourceCancel() - // wait for consumer to pick up on closure of producer - if err := l2Etl.tasks.Wait(); err != nil { - result = errors.Join(result, fmt.Errorf("failed to await batch handler completion: %w", err)) - } - // close listeners - for i := range l2Etl.listeners { - close(l2Etl.listeners[i]) - } - return result -} - -func (l2Etl *L2ETL) Start() error { - l2Etl.log.Info("starting etl...") - - // start ETL batch producer - if err := l2Etl.ETL.Start(); err != nil { - return fmt.Errorf("failed to start internal ETL: %w", err) - } - - // start ETL batch consumer - l2Etl.tasks.Go(func() error { - for batch := range l2Etl.etlBatches { - if err := l2Etl.handleBatch(batch); err != nil { - return fmt.Errorf("failed to handle batch, stopping L2 ETL: %w", err) - } - } - l2Etl.log.Info("no more batches, shutting down batch handler") - return nil - }) - return nil -} - -func (l2Etl *L2ETL) handleBatch(batch *ETLBatch) error { - l2BlockHeaders := make([]database.L2BlockHeader, len(batch.Headers)) - for i := range batch.Headers { - l2BlockHeaders[i] = database.L2BlockHeader{BlockHeader: database.BlockHeaderFromHeader(&batch.Headers[i])} - } - - l2ContractEvents := make([]database.L2ContractEvent, len(batch.Logs)) - for i := range batch.Logs { - timestamp := batch.HeaderMap[batch.Logs[i].BlockHash].Time - l2ContractEvents[i] = database.L2ContractEvent{ContractEvent: database.ContractEventFromLog(&batch.Logs[i], timestamp)} - l2Etl.ETL.metrics.RecordIndexedLog(batch.Logs[i].Address) - } - - /** Every L2 block is indexed so the inactivity window does not apply here **/ - - // Continually try to persist this batch. If it fails after 10 attempts, we simply error out - retryStrategy := &retry.ExponentialStrategy{Min: 1000, Max: 20_000, MaxJitter: 250} - if _, err := retry.Do[interface{}](l2Etl.resourceCtx, 10, retryStrategy, func() (interface{}, error) { - if err := l2Etl.db.Transaction(func(tx *database.DB) error { - if err := tx.Blocks.StoreL2BlockHeaders(l2BlockHeaders); err != nil { - return err - } - if len(l2ContractEvents) > 0 { - if err := tx.ContractEvents.StoreL2ContractEvents(l2ContractEvents); err != nil { - return err - } - } - return nil - }); err != nil { - batch.Logger.Error("unable to persist batch", "err", err) - return nil, err - } - - // a-ok! - return nil, nil - }); err != nil { - return err - } - - batch.Logger.Info("indexed batch") - - // All L2 blocks are indexed so len(batch.Headers) == len(l2BlockHeaders) - l2Etl.latestHeader = &batch.Headers[len(batch.Headers)-1] - l2Etl.ETL.metrics.RecordIndexedHeaders(len(l2BlockHeaders)) - l2Etl.ETL.metrics.RecordEtlLatestHeight(l2Etl.latestHeader.Number) - - // Notify Listeners - l2Etl.mu.Lock() - defer l2Etl.mu.Unlock() - for i := range l2Etl.listeners { - select { - case l2Etl.listeners[i] <- l2Etl.latestHeader: - default: - // do nothing if the listener hasn't picked - // up the previous notif - } - } - - return nil -} - -// Notify returns a channel that'll receive the latest header when new data has been persisted -func (l2Etl *L2ETL) Notify() <-chan *types.Header { - receiver := make(chan *types.Header) - l2Etl.mu.Lock() - defer l2Etl.mu.Unlock() - - l2Etl.listeners = append(l2Etl.listeners, receiver) - return receiver -} diff --git a/indexer/etl/metrics.go b/indexer/etl/metrics.go deleted file mode 100644 index 5d4b8f6c07ec..000000000000 --- a/indexer/etl/metrics.go +++ /dev/null @@ -1,110 +0,0 @@ -package etl - -import ( - "math/big" - - "github.com/ethereum-optimism/optimism/op-service/metrics" - "github.com/ethereum/go-ethereum/common" - "github.com/prometheus/client_golang/prometheus" -) - -var ( - MetricsNamespace string = "op_indexer_etl" -) - -type Metricer interface { - RecordInterval() (done func(err error)) - RecordLatestHeight(height *big.Int) - - RecordEtlLatestHeight(height *big.Int) - RecordIndexedHeaders(size int) - RecordIndexedLog(contractAddress common.Address) -} - -type etlMetrics struct { - intervalTick prometheus.Counter - intervalDuration prometheus.Histogram - intervalFailures prometheus.Counter - latestHeight prometheus.Gauge - - etlLatestHeight prometheus.Gauge - indexedHeaders prometheus.Counter - indexedLogs *prometheus.CounterVec -} - -func NewMetrics(registry *prometheus.Registry, subsystem string) Metricer { - factory := metrics.With(registry) - return &etlMetrics{ - intervalTick: factory.NewCounter(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Subsystem: subsystem, - Name: "intervals_total", - Help: "number of times the etl has run its extraction loop", - }), - intervalDuration: factory.NewHistogram(prometheus.HistogramOpts{ - Namespace: MetricsNamespace, - Subsystem: subsystem, - Name: "interval_seconds", - Help: "duration elapsed for during the processing loop", - }), - intervalFailures: factory.NewCounter(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Subsystem: subsystem, - Name: "interval_failures_total", - Help: "number of times the etl encountered a failure during the processing loop", - }), - latestHeight: factory.NewGauge(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Subsystem: subsystem, - Name: "latest_height", - Help: "the latest height reported by the connected client", - }), - etlLatestHeight: factory.NewGauge(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Subsystem: subsystem, - Name: "indexed_height", - Help: "the latest block height after a processing interval by the etl", - }), - indexedHeaders: factory.NewCounter(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Subsystem: subsystem, - Name: "indexed_headers_total", - Help: "number of headers indexed by the etl", - }), - indexedLogs: factory.NewCounterVec(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Subsystem: subsystem, - Name: "indexed_logs_total", - Help: "number of logs indexed by the etl", - }, []string{ - "contract", - }), - } -} - -func (m *etlMetrics) RecordInterval() func(error) { - m.intervalTick.Inc() - timer := prometheus.NewTimer(m.intervalDuration) - return func(err error) { - if err != nil { - m.intervalFailures.Inc() - } - timer.ObserveDuration() - } -} - -func (m *etlMetrics) RecordLatestHeight(height *big.Int) { - m.latestHeight.Set(float64(height.Uint64())) -} - -func (m *etlMetrics) RecordEtlLatestHeight(height *big.Int) { - m.etlLatestHeight.Set(float64(height.Uint64())) -} - -func (m *etlMetrics) RecordIndexedHeaders(size int) { - m.indexedHeaders.Add(float64(size)) -} - -func (m *etlMetrics) RecordIndexedLog(addr common.Address) { - m.indexedLogs.WithLabelValues(addr.String()).Inc() -} diff --git a/indexer/indexer.go b/indexer/indexer.go deleted file mode 100644 index b1ef4e156944..000000000000 --- a/indexer/indexer.go +++ /dev/null @@ -1,282 +0,0 @@ -package indexer - -import ( - "context" - "errors" - "fmt" - "math/big" - "net" - "strconv" - "sync/atomic" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/rpc" - - "github.com/go-chi/chi/v5" - "github.com/go-chi/chi/v5/middleware" - - "github.com/prometheus/client_golang/prometheus" - - "github.com/ethereum-optimism/optimism/indexer/config" - "github.com/ethereum-optimism/optimism/indexer/database" - "github.com/ethereum-optimism/optimism/indexer/etl" - "github.com/ethereum-optimism/optimism/indexer/processors" - "github.com/ethereum-optimism/optimism/indexer/processors/bridge" - "github.com/ethereum-optimism/optimism/op-service/client" - "github.com/ethereum-optimism/optimism/op-service/httputil" - "github.com/ethereum-optimism/optimism/op-service/metrics" -) - -const ( - MetricsNamespace = "op_indexer" -) - -// Indexer contains the necessary resources for -// indexing the configured L1 and L2 chains -type Indexer struct { - log log.Logger - DB *database.DB - - l1Client client.Client - l2Client client.Client - - metricsRegistry *prometheus.Registry - - apiServer *httputil.HTTPServer - metricsServer *httputil.HTTPServer - - L1ETL *etl.L1ETL - L2ETL *etl.L2ETL - BridgeProcessor *processors.BridgeProcessor - - // shutdown requests the service that maintains the indexer to shut down, - // and provides the error-cause of the critical failure (if any). - shutdown context.CancelCauseFunc - - stopped atomic.Bool -} - -// NewIndexer initializes an instance of the Indexer -func NewIndexer(ctx context.Context, log log.Logger, cfg *config.Config, shutdown context.CancelCauseFunc) (*Indexer, error) { - out := &Indexer{ - log: log, - metricsRegistry: metrics.NewRegistry(), - shutdown: shutdown, - } - if err := out.initFromConfig(ctx, cfg); err != nil { - return nil, errors.Join(err, out.Stop(ctx)) - } - return out, nil -} - -func (ix *Indexer) Start(ctx context.Context) error { - // If any of these services has a critical failure, - // the service can request a shutdown, while providing the error cause. - if err := ix.L1ETL.Start(); err != nil { - return fmt.Errorf("failed to start L1 ETL: %w", err) - } - if err := ix.L2ETL.Start(); err != nil { - return fmt.Errorf("failed to start L2 ETL: %w", err) - } - if err := ix.BridgeProcessor.Start(); err != nil { - return fmt.Errorf("failed to start bridge processor: %w", err) - } - return nil -} - -func (ix *Indexer) Stop(ctx context.Context) error { - if ix.stopped.Load() { - return nil - } - - var result error - - if ix.L1ETL != nil { - if err := ix.L1ETL.Close(); err != nil { - result = errors.Join(result, fmt.Errorf("failed to close L1 ETL: %w", err)) - } - } - - if ix.L2ETL != nil { - if err := ix.L2ETL.Close(); err != nil { - result = errors.Join(result, fmt.Errorf("failed to close L2 ETL: %w", err)) - } - } - - if ix.BridgeProcessor != nil { - if err := ix.BridgeProcessor.Close(); err != nil { - result = errors.Join(result, fmt.Errorf("failed to close bridge processor: %w", err)) - } - } - - // Now that the ETLs are closed, we can stop the RPC clients - if ix.l1Client != nil { - ix.l1Client.Close() - } - if ix.l2Client != nil { - ix.l2Client.Close() - } - - if ix.apiServer != nil { - if err := ix.apiServer.Close(); err != nil { - result = errors.Join(result, fmt.Errorf("failed to close indexer API server: %w", err)) - } - } - - // DB connection can be closed last, after all its potential users have shut down - if ix.DB != nil { - if err := ix.DB.Close(); err != nil { - result = errors.Join(result, fmt.Errorf("failed to close DB: %w", err)) - } - } - - if ix.metricsServer != nil { - if err := ix.metricsServer.Close(); err != nil { - result = errors.Join(result, fmt.Errorf("failed to close metrics server: %w", err)) - } - } - - ix.stopped.Store(true) - ix.log.Info("indexer stopped") - return result -} - -func (ix *Indexer) Stopped() bool { - return ix.stopped.Load() -} - -func (ix *Indexer) initFromConfig(ctx context.Context, cfg *config.Config) error { - if err := ix.initRPCClients(ctx, cfg.RPCs); err != nil { - return fmt.Errorf("failed to start RPC clients: %w", err) - } - if err := ix.initDB(ctx, cfg.DB); err != nil { - return fmt.Errorf("failed to init DB: %w", err) - } - if err := ix.initL1ETL(cfg.Chain); err != nil { - return fmt.Errorf("failed to init L1 ETL: %w", err) - } - if err := ix.initL2ETL(cfg.Chain); err != nil { - return fmt.Errorf("failed to init L2 ETL: %w", err) - } - if err := ix.initBridgeProcessor(cfg.Chain); err != nil { - return fmt.Errorf("failed to init Bridge-Processor: %w", err) - } - if err := ix.startHttpServer(ctx, cfg.HTTPServer); err != nil { - return fmt.Errorf("failed to start HTTP server: %w", err) - } - if err := ix.startMetricsServer(ctx, cfg.MetricsServer); err != nil { - return fmt.Errorf("failed to start Metrics server: %w", err) - } - return nil -} - -func (ix *Indexer) initRPCClients(ctx context.Context, rpcsConfig config.RPCsConfig) error { - if !client.IsURLAvailable(ctx, rpcsConfig.L1RPC) { - return fmt.Errorf("l1 rpc address unavailable (%s)", rpcsConfig.L1RPC) - } - l1Rpc, err := rpc.DialContext(ctx, rpcsConfig.L1RPC) - if err != nil { - return fmt.Errorf("failed to dial L1 client: %w", err) - } - - if !client.IsURLAvailable(ctx, rpcsConfig.L2RPC) { - return fmt.Errorf("l2 rpc address unavailable (%s)", rpcsConfig.L2RPC) - } - l2Rpc, err := rpc.DialContext(ctx, rpcsConfig.L2RPC) - if err != nil { - return fmt.Errorf("failed to dial L2 client: %w", err) - } - - mFactory := metrics.With(ix.metricsRegistry) - - l1RpcMetrics := metrics.MakeRPCClientMetrics(fmt.Sprintf("%s_%s", MetricsNamespace, "l1"), mFactory) - ix.l1Client = client.NewInstrumentedClient(l1Rpc, &l1RpcMetrics) - - l2RpcMetrics := metrics.MakeRPCClientMetrics(fmt.Sprintf("%s_%s", MetricsNamespace, "l2"), mFactory) - ix.l2Client = client.NewInstrumentedClient(l2Rpc, &l2RpcMetrics) - return nil -} - -func (ix *Indexer) initDB(ctx context.Context, cfg config.DBConfig) error { - db, err := database.NewDB(ctx, ix.log, cfg) - if err != nil { - return fmt.Errorf("failed to connect to database: %w", err) - } - ix.DB = db - return nil -} - -func (ix *Indexer) initL1ETL(chainConfig config.ChainConfig) error { - l1Cfg := etl.Config{ - LoopIntervalMsec: chainConfig.L1PollingInterval, - HeaderBufferSize: chainConfig.L1HeaderBufferSize, - AllowedInactivityWindowSeconds: chainConfig.ETLAllowedInactivityWindowSeconds, - ConfirmationDepth: big.NewInt(int64(chainConfig.L1ConfirmationDepth)), - StartHeight: big.NewInt(int64(chainConfig.L1StartingHeight)), - } - l1Etl, err := etl.NewL1ETL(l1Cfg, ix.log, ix.DB, etl.NewMetrics(ix.metricsRegistry, "l1"), - ix.l1Client, chainConfig.L1Contracts, ix.shutdown) - if err != nil { - return err - } - ix.L1ETL = l1Etl - return nil -} - -func (ix *Indexer) initL2ETL(chainConfig config.ChainConfig) error { - // L2 (defaults to predeploy contracts) - l2Cfg := etl.Config{ - LoopIntervalMsec: chainConfig.L2PollingInterval, - HeaderBufferSize: chainConfig.L2HeaderBufferSize, - ConfirmationDepth: big.NewInt(int64(chainConfig.L2ConfirmationDepth)), - } - l2Etl, err := etl.NewL2ETL(l2Cfg, ix.log, ix.DB, etl.NewMetrics(ix.metricsRegistry, "l2"), - ix.l2Client, chainConfig.L2Contracts, ix.shutdown) - if err != nil { - return err - } - ix.L2ETL = l2Etl - return nil -} - -func (ix *Indexer) initBridgeProcessor(chainConfig config.ChainConfig) error { - bridgeProcessor, err := processors.NewBridgeProcessor( - ix.log, ix.DB, bridge.NewMetrics(ix.metricsRegistry), ix.L1ETL, ix.L2ETL, chainConfig, ix.shutdown) - if err != nil { - return err - } - ix.BridgeProcessor = bridgeProcessor - return nil -} - -func (ix *Indexer) startHttpServer(ctx context.Context, cfg config.ServerConfig) error { - ix.log.Debug("starting http server...", "port", cfg.Port) - - r := chi.NewRouter() - r.Use(middleware.Logger) - r.Use(middleware.Heartbeat("/healthz")) - - // needed so that the middlware gets invoked - r.Get("/", r.NotFoundHandler()) - - addr := net.JoinHostPort(cfg.Host, strconv.Itoa(cfg.Port)) - srv, err := httputil.StartHTTPServer(addr, r) - if err != nil { - return fmt.Errorf("http server failed to start: %w", err) - } - - ix.log.Info("http server started", "addr", srv.Addr()) - ix.apiServer = srv - return nil -} - -func (ix *Indexer) startMetricsServer(ctx context.Context, cfg config.ServerConfig) error { - ix.log.Debug("starting metrics server...", "port", cfg.Port) - srv, err := metrics.StartServer(ix.metricsRegistry, cfg.Host, cfg.Port) - if err != nil { - return fmt.Errorf("metrics server failed to start: %w", err) - } - ix.metricsServer = srv - ix.log.Info("metrics server started", "addr", srv.Addr()) - return nil -} diff --git a/indexer/indexer.toml b/indexer/indexer.toml deleted file mode 100644 index 572f350a3257..000000000000 --- a/indexer/indexer.toml +++ /dev/null @@ -1,60 +0,0 @@ -[chain] -## Required ETL configuration which controls -## the rate and and range at data retrieval -l1-polling-interval = 5000 # 5s -l2-polling-interval = 5000 - -l1-header-buffer-size = 1000 -l2-header-buffer-size = 1000 - -l1-confirmation-depth = 0 # unnecessary for devnet -l2-confirmation-depth = 0 - -### Option 1: Utilize a known preset for chain configuration -### See config/presets.go for available presets. -### i.e OP, Base, Zora, PGN, etc. -preset = 901 # Local Devnet - -### Option 2: Custom Networks -### -### Deployment block height of the rollup. Must be set -### correctly otherwise the ETL will start from L1 -### genesis resulting in a lot of wasted work. Confirmation -### depths should be set appropriately to avoid a the ETL -### getting stuck terminally due to a reorg -# l1-starting-height = 0 -# -# l1-confirmation-depth = 10 -# l2-confirmation-depth = 75 (roughly 10 L1 block equivalent) -# -### These contract addresses MUST be the Proxy contract -### addresses and not the implementation -# [chain.l1-contracts] -# address-manager = "" -# system-config = "" -# optimism-portal = "" -# l2-output-oracle = "" -# l1-cross-domain-messenger = "" -# l1-standard-brigde = "" -# l1-erc721-bridge = "" -### - -[rpcs] -l1-rpc = "${INDEXER_L1_RPC_URL}" -l2-rpc = "${INDEXER_L2_RPC_URL}" - -[db] -host = "${DB_HOST}" -port = ${DB_PORT} -user = "${DB_USER}" -password = "${DB_PWD}" -name = "${DB_NAME}" - -[http] -host = "0.0.0.0" -port = 8100 -timeout = 10 - -[metrics] -host = "0.0.0.0" -port = 7300 diff --git a/indexer/migrations/20230523_create_schema.sql b/indexer/migrations/20230523_create_schema.sql deleted file mode 100644 index 7d0a99d97c12..000000000000 --- a/indexer/migrations/20230523_create_schema.sql +++ /dev/null @@ -1,238 +0,0 @@ -DO $$ -BEGIN - IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'uint256') THEN - CREATE DOMAIN UINT256 AS NUMERIC - CHECK (VALUE >= 0 AND VALUE < POWER(CAST(2 AS NUMERIC), CAST(256 AS NUMERIC)) AND SCALE(VALUE) = 0); - ELSE - -- To remain backwards compatible, drop the old constraint and re-add. - ALTER DOMAIN UINT256 DROP CONSTRAINT uint256_check; - ALTER DOMAIN UINT256 ADD - CHECK (VALUE >= 0 AND VALUE < POWER(CAST(2 AS NUMERIC), CAST(256 AS NUMERIC)) AND SCALE(VALUE) = 0); - END IF; -END $$; - -/** - * BLOCK DATA - */ - -CREATE TABLE IF NOT EXISTS l1_block_headers ( - -- Searchable fields - hash VARCHAR PRIMARY KEY, - parent_hash VARCHAR NOT NULL UNIQUE, - number UINT256 NOT NULL UNIQUE, - timestamp INTEGER NOT NULL UNIQUE CHECK (timestamp > 0), - - -- Raw Data - rlp_bytes VARCHAR NOT NULL -); -CREATE INDEX IF NOT EXISTS l1_block_headers_timestamp ON l1_block_headers(timestamp); -CREATE INDEX IF NOT EXISTS l1_block_headers_number ON l1_block_headers(number); - -CREATE TABLE IF NOT EXISTS l2_block_headers ( - -- Searchable fields - hash VARCHAR PRIMARY KEY, - parent_hash VARCHAR NOT NULL UNIQUE, - number UINT256 NOT NULL UNIQUE, - timestamp INTEGER NOT NULL CHECK (timestamp > 0), - - -- Raw Data - rlp_bytes VARCHAR NOT NULL -); -CREATE INDEX IF NOT EXISTS l2_block_headers_timestamp ON l2_block_headers(timestamp); -CREATE INDEX IF NOT EXISTS l2_block_headers_number ON l2_block_headers(number); - -/** - * EVENT DATA - */ - -CREATE TABLE IF NOT EXISTS l1_contract_events ( - -- Searchable fields - guid VARCHAR PRIMARY KEY, - block_hash VARCHAR NOT NULL REFERENCES l1_block_headers(hash) ON DELETE CASCADE, - contract_address VARCHAR NOT NULL, - transaction_hash VARCHAR NOT NULL, - log_index INTEGER NOT NULL, - event_signature VARCHAR NOT NULL, -- bytes32(0x0) when topics are missing - timestamp INTEGER NOT NULL CHECK (timestamp > 0), - - -- Raw Data - rlp_bytes VARCHAR NOT NULL, - - UNIQUE(block_hash, log_index) -); -CREATE INDEX IF NOT EXISTS l1_contract_events_timestamp ON l1_contract_events(timestamp); -CREATE INDEX IF NOT EXISTS l1_contract_events_block_hash ON l1_contract_events(block_hash); -CREATE INDEX IF NOT EXISTS l1_contract_events_event_signature ON l1_contract_events(event_signature); -CREATE INDEX IF NOT EXISTS l1_contract_events_contract_address ON l1_contract_events(contract_address); - -CREATE TABLE IF NOT EXISTS l2_contract_events ( - -- Searchable fields - guid VARCHAR PRIMARY KEY, - block_hash VARCHAR NOT NULL REFERENCES l2_block_headers(hash) ON DELETE CASCADE, - contract_address VARCHAR NOT NULL, - transaction_hash VARCHAR NOT NULL, - log_index INTEGER NOT NULL, - event_signature VARCHAR NOT NULL, -- bytes32(0x0) when topics are missing - timestamp INTEGER NOT NULL CHECK (timestamp > 0), - - -- Raw Data - rlp_bytes VARCHAR NOT NULL, - - UNIQUE(block_hash, log_index) -); -CREATE INDEX IF NOT EXISTS l2_contract_events_timestamp ON l2_contract_events(timestamp); -CREATE INDEX IF NOT EXISTS l2_contract_events_block_hash ON l2_contract_events(block_hash); -CREATE INDEX IF NOT EXISTS l2_contract_events_event_signature ON l2_contract_events(event_signature); -CREATE INDEX IF NOT EXISTS l2_contract_events_contract_address ON l2_contract_events(contract_address); - -/** - * BRIDGING DATA - */ - --- OptimismPortal/L2ToL1MessagePasser -CREATE TABLE IF NOT EXISTS l1_transaction_deposits ( - source_hash VARCHAR PRIMARY KEY, - l2_transaction_hash VARCHAR NOT NULL UNIQUE, - initiated_l1_event_guid VARCHAR NOT NULL UNIQUE REFERENCES l1_contract_events(guid) ON DELETE CASCADE, - - -- transaction data. NOTE: `to_address` is the recipient of funds transferred in value field of the - -- L2 deposit transaction and not the amount minted on L1 from the source address. Hence the `amount` - -- column in this table does NOT indicate the amount transferred to the recipient but instead funds - -- bridged from L1 by the `from_address`. - from_address VARCHAR NOT NULL, - to_address VARCHAR NOT NULL, - - -- This refers to the amount MINTED on L2 (msg.value of the L1 transaction). Important distinction from - -- the `value` field of the deposit transaction which simply is the value transferred to specified recipient. - amount UINT256 NOT NULL, - - gas_limit UINT256 NOT NULL, - data VARCHAR NOT NULL, - timestamp INTEGER NOT NULL CHECK (timestamp > 0) -); -CREATE INDEX IF NOT EXISTS l1_transaction_deposits_timestamp ON l1_transaction_deposits(timestamp); -CREATE INDEX IF NOT EXISTS l1_transaction_deposits_initiated_l1_event_guid ON l1_transaction_deposits(initiated_l1_event_guid); -CREATE INDEX IF NOT EXISTS l1_transaction_deposits_from_address ON l1_transaction_deposits(from_address); - -CREATE TABLE IF NOT EXISTS l2_transaction_withdrawals ( - withdrawal_hash VARCHAR PRIMARY KEY, - nonce UINT256 NOT NULL UNIQUE, - initiated_l2_event_guid VARCHAR NOT NULL UNIQUE REFERENCES l2_contract_events(guid) ON DELETE CASCADE, - - -- Multistep (bedrock) process of a withdrawal. With permissionless-output proposals, `proven_l1_event_guid` - -- should be treated as the last known proven event. It may be the case (rare) that the proven state of this - -- withdrawal was invalidated via a fault proof. This case is considered "rare" a malicious outputs are - -- disincentivezed via the posted bond. - proven_l1_event_guid VARCHAR UNIQUE REFERENCES l1_contract_events(guid) ON DELETE SET NULL ON UPDATE CASCADE, - finalized_l1_event_guid VARCHAR UNIQUE REFERENCES l1_contract_events(guid) ON DELETE SET NULL ON UPDATE CASCADE, - succeeded BOOLEAN, - - -- transaction data - from_address VARCHAR NOT NULL, - to_address VARCHAR NOT NULL, - amount UINT256 NOT NULL, - gas_limit UINT256 NOT NULL, - data VARCHAR NOT NULL, - timestamp INTEGER NOT NULL CHECK (timestamp > 0) -); -CREATE INDEX IF NOT EXISTS l2_transaction_withdrawals_timestamp ON l2_transaction_withdrawals(timestamp); -CREATE INDEX IF NOT EXISTS l2_transaction_withdrawals_initiated_l2_event_guid ON l2_transaction_withdrawals(initiated_l2_event_guid); -CREATE INDEX IF NOT EXISTS l2_transaction_withdrawals_proven_l1_event_guid ON l2_transaction_withdrawals(proven_l1_event_guid); -CREATE INDEX IF NOT EXISTS l2_transaction_withdrawals_finalized_l1_event_guid ON l2_transaction_withdrawals(finalized_l1_event_guid); -CREATE INDEX IF NOT EXISTS l2_transaction_withdrawals_from_address ON l2_transaction_withdrawals(from_address); - --- CrossDomainMessenger -CREATE TABLE IF NOT EXISTS l1_bridge_messages( - message_hash VARCHAR PRIMARY KEY, - nonce UINT256 NOT NULL UNIQUE, - transaction_source_hash VARCHAR NOT NULL UNIQUE REFERENCES l1_transaction_deposits(source_hash) ON DELETE CASCADE, - - sent_message_event_guid VARCHAR NOT NULL UNIQUE REFERENCES l1_contract_events(guid) ON DELETE CASCADE, - relayed_message_event_guid VARCHAR UNIQUE REFERENCES l2_contract_events(guid) ON DELETE SET NULL ON UPDATE CASCADE, - - -- sent message - from_address VARCHAR NOT NULL, - to_address VARCHAR NOT NULL, - amount UINT256 NOT NULL, - gas_limit UINT256 NOT NULL, - data VARCHAR NOT NULL, - timestamp INTEGER NOT NULL CHECK (timestamp > 0) -); -CREATE INDEX IF NOT EXISTS l1_bridge_messages_timestamp ON l1_bridge_messages(timestamp); -CREATE INDEX IF NOT EXISTS l1_bridge_messages_transaction_source_hash ON l1_bridge_messages(transaction_source_hash); -CREATE INDEX IF NOT EXISTS l1_bridge_messages_transaction_sent_message_event_guid ON l1_bridge_messages(sent_message_event_guid); -CREATE INDEX IF NOT EXISTS l1_bridge_messages_transaction_relayed_message_event_guid ON l1_bridge_messages(relayed_message_event_guid); -CREATE INDEX IF NOT EXISTS l1_bridge_messages_from_address ON l1_bridge_messages(from_address); - -CREATE TABLE IF NOT EXISTS l2_bridge_messages( - message_hash VARCHAR PRIMARY KEY, - nonce UINT256 NOT NULL UNIQUE, - transaction_withdrawal_hash VARCHAR NOT NULL UNIQUE REFERENCES l2_transaction_withdrawals(withdrawal_hash) ON DELETE CASCADE, - - sent_message_event_guid VARCHAR NOT NULL UNIQUE REFERENCES l2_contract_events(guid) ON DELETE CASCADE, - relayed_message_event_guid VARCHAR UNIQUE REFERENCES l1_contract_events(guid) ON DELETE SET NULL ON UPDATE CASCADE, - - -- sent message - from_address VARCHAR NOT NULL, - to_address VARCHAR NOT NULL, - amount UINT256 NOT NULL, - gas_limit UINT256 NOT NULL, - data VARCHAR NOT NULL, - timestamp INTEGER NOT NULL CHECK (timestamp > 0) -); -CREATE INDEX IF NOT EXISTS l2_bridge_messages_timestamp ON l2_bridge_messages(timestamp); -CREATE INDEX IF NOT EXISTS l2_bridge_messages_transaction_withdrawal_hash ON l2_bridge_messages(transaction_withdrawal_hash); -CREATE INDEX IF NOT EXISTS l2_bridge_messages_transaction_sent_message_event_guid ON l2_bridge_messages(sent_message_event_guid); -CREATE INDEX IF NOT EXISTS l2_bridge_messages_transaction_relayed_message_event_guid ON l2_bridge_messages(relayed_message_event_guid); -CREATE INDEX IF NOT EXISTS l2_bridge_messages_from_address ON l2_bridge_messages(from_address); - -/** - * Since the CDM uses the latest versioned message hash when emitting the `RelayedMessage` event, we need - * to keep track of all of the future versions of message hashes such that legacy messages can be queried - * queried for when relayed on L1 - * - * As new the CDM is updated with new versions, we need to ensure that there's a better way to correlate message between - * chains (adding the message nonce to the RelayedMessage event) or continue to add columns to this table and migrate - * unrelayed messages such that finalization logic can handle switching between the varying versioned message hashes - */ -CREATE TABLE IF NOT EXISTS l2_bridge_message_versioned_message_hashes( - message_hash VARCHAR PRIMARY KEY NOT NULL UNIQUE REFERENCES l2_bridge_messages(message_hash), - - -- only filled in if `message_hash` is for a v0 message - v1_message_hash VARCHAR UNIQUE -); - --- StandardBridge -CREATE TABLE IF NOT EXISTS l1_bridge_deposits ( - transaction_source_hash VARCHAR PRIMARY KEY REFERENCES l1_transaction_deposits(source_hash) ON DELETE CASCADE, - cross_domain_message_hash VARCHAR NOT NULL UNIQUE REFERENCES l1_bridge_messages(message_hash) ON DELETE CASCADE, - - -- Deposit information - from_address VARCHAR NOT NULL, - to_address VARCHAR NOT NULL, - local_token_address VARCHAR NOT NULL, - remote_token_address VARCHAR NOT NULL, - amount UINT256 NOT NULL, - data VARCHAR NOT NULL, - timestamp INTEGER NOT NULL CHECK (timestamp > 0) -); -CREATE INDEX IF NOT EXISTS l1_bridge_deposits_timestamp ON l1_bridge_deposits(timestamp); -CREATE INDEX IF NOT EXISTS l1_bridge_deposits_cross_domain_message_hash ON l1_bridge_deposits(cross_domain_message_hash); -CREATE INDEX IF NOT EXISTS l1_bridge_deposits_from_address ON l1_bridge_deposits(from_address); - -CREATE TABLE IF NOT EXISTS l2_bridge_withdrawals ( - transaction_withdrawal_hash VARCHAR PRIMARY KEY REFERENCES l2_transaction_withdrawals(withdrawal_hash) ON DELETE CASCADE, - cross_domain_message_hash VARCHAR NOT NULL UNIQUE REFERENCES l2_bridge_messages(message_hash) ON DELETE CASCADE, - - -- Withdrawal information - from_address VARCHAR NOT NULL, - to_address VARCHAR NOT NULL, - local_token_address VARCHAR NOT NULL, - remote_token_address VARCHAR NOT NULL, - amount UINT256 NOT NULL, - data VARCHAR NOT NULL, - timestamp INTEGER NOT NULL CHECK (timestamp > 0) -); -CREATE INDEX IF NOT EXISTS l2_bridge_withdrawals_timestamp ON l2_bridge_withdrawals(timestamp); -CREATE INDEX IF NOT EXISTS l2_bridge_withdrawals_cross_domain_message_hash ON l2_bridge_withdrawals(cross_domain_message_hash); -CREATE INDEX IF NOT EXISTS l2_bridge_withdrawals_from_address ON l2_bridge_withdrawals(from_address); diff --git a/indexer/node/client.go b/indexer/node/client.go deleted file mode 100644 index 17bae886ae3f..000000000000 --- a/indexer/node/client.go +++ /dev/null @@ -1,155 +0,0 @@ -package node - -import ( - "context" - "errors" - "fmt" - "math/big" - - "github.com/ethereum-optimism/optimism/op-service/client" - - "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/rpc" -) - -// HeadersByRange will retrieve block headers within the specified range -- inclusive. No restrictions -// are placed on the range such as blocks in the "latest", "safe" or "finalized" states. If the specified -// range is too large, `endHeight > latest`, the resulting list is truncated to the available headers -func HeadersByRange(ctx context.Context, c client.Client, startHeight, endHeight *big.Int) ([]types.Header, error) { - if startHeight.Cmp(endHeight) == 0 { - header, err := c.HeaderByNumber(ctx, startHeight) - if err != nil { - return nil, err - } - return []types.Header{*header}, nil - } - - // Batch the header requests - rpcElems := makeHeaderRpcElems(startHeight, endHeight) - if err := c.RPC().BatchCallContext(ctx, rpcElems); err != nil { - return nil, err - } - - // Parse the headers. - // - Ensure integrity that they build on top of each other - // - Truncate out headers that do not exist (endHeight > "latest") - headers := make([]types.Header, 0, len(rpcElems)) - for i, rpcElem := range rpcElems { - if rpcElem.Error != nil { - if len(headers) == 0 { - return nil, rpcElem.Error // no headers - } else { - break // try return whatever headers are available - } - } else if rpcElem.Result == nil { - break - } - - header := (rpcElem.Result).(*types.Header) - if i > 0 { - prevHeader := (rpcElems[i-1].Result).(*types.Header) - if header.ParentHash != prevHeader.Hash() { - return nil, fmt.Errorf("queried header %s does not follow parent %s", header.Hash(), prevHeader.Hash()) - } - } - - headers = append(headers, *header) - } - - return headers, nil -} - -// StorageHash returns the sha3 of the storage root for the specified account -func StorageHash(ctx context.Context, c client.Client, address common.Address, blockNumber *big.Int) (common.Hash, error) { - proof := struct{ StorageHash common.Hash }{} - err := c.RPC().CallContext(ctx, &proof, "eth_getProof", address, nil, toBlockNumArg(blockNumber)) - if err != nil { - return common.Hash{}, err - } - - return proof.StorageHash, nil -} - -type Logs struct { - Logs []types.Log - ToBlockHeader *types.Header -} - -// FilterLogsSafe returns logs that fit the query parameters. The underlying request is a batch -// request including `eth_getBlockByNumber` to allow the caller to check that connected -// node has the state necessary to fulfill this request -func FilterLogsSafe(ctx context.Context, c client.Client, query ethereum.FilterQuery) (Logs, error) { - arg, err := toFilterArg(query) - if err != nil { - return Logs{}, err - } - - var logs []types.Log - var header types.Header - - batchElems := make([]rpc.BatchElem, 2) - batchElems[0] = rpc.BatchElem{Method: "eth_getBlockByNumber", Args: []interface{}{toBlockNumArg(query.ToBlock), false}, Result: &header} - batchElems[1] = rpc.BatchElem{Method: "eth_getLogs", Args: []interface{}{arg}, Result: &logs} - - if err := c.RPC().BatchCallContext(ctx, batchElems); err != nil { - return Logs{}, err - } - - if batchElems[0].Error != nil { - return Logs{}, fmt.Errorf("unable to query for the `FilterQuery#ToBlock` header: %w", batchElems[0].Error) - } - - if batchElems[1].Error != nil { - return Logs{}, fmt.Errorf("unable to query logs: %w", batchElems[1].Error) - } - - return Logs{Logs: logs, ToBlockHeader: &header}, nil -} - -func makeHeaderRpcElems(startHeight, endHeight *big.Int) []rpc.BatchElem { - count := new(big.Int).Sub(endHeight, startHeight).Uint64() + 1 - batchElems := make([]rpc.BatchElem, count) - for i := uint64(0); i < count; i++ { - height := new(big.Int).Add(startHeight, new(big.Int).SetUint64(i)) - batchElems[i] = rpc.BatchElem{ - Method: "eth_getBlockByNumber", - Args: []interface{}{toBlockNumArg(height), false}, - Result: new(types.Header), - } - } - return batchElems -} - -// Needed private utils from geth - -func toBlockNumArg(number *big.Int) string { - if number == nil { - return "latest" - } - if number.Sign() >= 0 { - return hexutil.EncodeBig(number) - } - // It's negative. - return rpc.BlockNumber(number.Int64()).String() -} - -func toFilterArg(q ethereum.FilterQuery) (interface{}, error) { - arg := map[string]interface{}{"address": q.Addresses, "topics": q.Topics} - if q.BlockHash != nil { - arg["blockHash"] = *q.BlockHash - if q.FromBlock != nil || q.ToBlock != nil { - return nil, errors.New("cannot specify both BlockHash and FromBlock/ToBlock") - } - } else { - if q.FromBlock == nil { - arg["fromBlock"] = "0x0" - } else { - arg["fromBlock"] = toBlockNumArg(q.FromBlock) - } - arg["toBlock"] = toBlockNumArg(q.ToBlock) - } - return arg, nil -} diff --git a/indexer/node/header_traversal.go b/indexer/node/header_traversal.go deleted file mode 100644 index 6be52c388667..000000000000 --- a/indexer/node/header_traversal.go +++ /dev/null @@ -1,113 +0,0 @@ -package node - -import ( - "context" - "errors" - "fmt" - "math/big" - "time" - - "github.com/ethereum-optimism/optimism/indexer/bigint" - "github.com/ethereum-optimism/optimism/op-service/client" - - "github.com/ethereum/go-ethereum/core/types" -) - -var ( - ErrHeaderTraversalAheadOfProvider = errors.New("the HeaderTraversal's internal state is ahead of the provider") - ErrHeaderTraversalAndProviderMismatchedState = errors.New("the HeaderTraversal and provider have diverged in state") - - defaultRequestTimeout = 5 * time.Second -) - -type HeaderTraversal struct { - client client.Client - - latestHeader *types.Header - lastTraversedHeader *types.Header - - blockConfirmationDepth *big.Int -} - -// NewHeaderTraversal instantiates a new instance of HeaderTraversal against the supplied rpc client. -// The HeaderTraversal will start fetching blocks starting from the supplied header unless nil, indicating genesis. -func NewHeaderTraversal(client client.Client, fromHeader *types.Header, confDepth *big.Int) *HeaderTraversal { - return &HeaderTraversal{ - client: client, - lastTraversedHeader: fromHeader, - blockConfirmationDepth: confDepth, - } -} - -// LatestHeader returns the latest header reported by underlying eth client -// as headers are traversed via `NextHeaders`. -func (f *HeaderTraversal) LatestHeader() *types.Header { - return f.latestHeader -} - -// LastTraversedHeader returns the last header traversed. -// - This is useful for testing the state of the HeaderTraversal -// - LastTraversedHeader may be << LatestHeader depending on the number -// headers traversed via `NextHeaders`. -func (f *HeaderTraversal) LastTraversedHeader() *types.Header { - return f.lastTraversedHeader -} - -// NextHeaders retrieves the next set of headers that have been -// marked as finalized by the connected client, bounded by the supplied size -func (f *HeaderTraversal) NextHeaders(maxSize uint64) ([]types.Header, error) { - ctxwt, cancel := context.WithTimeout(context.Background(), defaultRequestTimeout) - defer cancel() - - latestHeader, err := f.client.HeaderByNumber(ctxwt, nil) - if err != nil { - return nil, fmt.Errorf("unable to query latest block: %w", err) - } else if latestHeader == nil { - return nil, fmt.Errorf("latest header unreported") - } else { - f.latestHeader = latestHeader - } - - endHeight := new(big.Int).Sub(latestHeader.Number, f.blockConfirmationDepth) - if endHeight.Sign() < 0 { - // No blocks with the provided confirmation depth available - return nil, nil - } - - if f.lastTraversedHeader != nil { - cmp := f.lastTraversedHeader.Number.Cmp(endHeight) - if cmp == 0 { // We're synced to head and there are no new headers - return nil, nil - } else if cmp > 0 { - return nil, ErrHeaderTraversalAheadOfProvider - } - } - - nextHeight := bigint.Zero - if f.lastTraversedHeader != nil { - nextHeight = new(big.Int).Add(f.lastTraversedHeader.Number, bigint.One) - } - - // endHeight = (nextHeight - endHeight) <= maxSize - endHeight = bigint.Clamp(nextHeight, endHeight, maxSize) - - ctxwt, cancel = context.WithTimeout(context.Background(), defaultRequestTimeout) - defer cancel() - - headers, err := HeadersByRange(ctxwt, f.client, nextHeight, endHeight) - if err != nil { - return nil, fmt.Errorf("error querying blocks by range: %w", err) - } - - numHeaders := len(headers) - if numHeaders == 0 { - return nil, nil - } else if f.lastTraversedHeader != nil && headers[0].ParentHash != f.lastTraversedHeader.Hash() { - // The indexer's state is in an irrecoverable state relative to the provider. This - // should never happen since the indexer is dealing with only finalized blocks. - return nil, ErrHeaderTraversalAndProviderMismatchedState - } - - f.lastTraversedHeader = &headers[numHeaders-1] - return headers, nil -} diff --git a/indexer/node/header_traversal_test.go b/indexer/node/header_traversal_test.go deleted file mode 100644 index 2b5ca0528332..000000000000 --- a/indexer/node/header_traversal_test.go +++ /dev/null @@ -1,178 +0,0 @@ -package node - -import ( - "math/big" - "testing" - - "github.com/ethereum-optimism/optimism/indexer/bigint" - "github.com/ethereum-optimism/optimism/op-service/testutils" - "github.com/stretchr/testify/require" - - "github.com/ethereum/go-ethereum/core/types" -) - -// make a set of headers which chain correctly -func makeHeaders(numHeaders uint64, prevHeader *types.Header) []types.Header { - headers := make([]types.Header, numHeaders) - for i := range headers { - if i == 0 { - if prevHeader == nil { - // genesis - headers[i] = types.Header{Number: big.NewInt(0)} - } else { - // chain onto the previous header - headers[i] = types.Header{Number: big.NewInt(prevHeader.Number.Int64() + 1)} - headers[i].ParentHash = prevHeader.Hash() - } - } else { - headers[i] = types.Header{Number: big.NewInt(headers[i-1].Number.Int64() + 1)} - headers[i].ParentHash = headers[i-1].Hash() - } - } - - return headers -} - -func TestHeaderTraversalNextHeadersNoOp(t *testing.T) { - client := &testutils.MockClient{} - t.Cleanup(func() { client.AssertExpectations(t) }) - - // start from block 10 as the latest fetched block - LastTraversedHeader := &types.Header{Number: big.NewInt(10)} - headerTraversal := NewHeaderTraversal(client, LastTraversedHeader, bigint.Zero) - - require.Nil(t, headerTraversal.LatestHeader()) - require.NotNil(t, headerTraversal.LastTraversedHeader()) - - // no new headers when matched with head - client.ExpectHeaderByNumber(nil, LastTraversedHeader, nil) - headers, err := headerTraversal.NextHeaders(100) - require.NoError(t, err) - require.Empty(t, headers) - - require.NotNil(t, headerTraversal.LatestHeader()) - require.NotNil(t, headerTraversal.LastTraversedHeader()) - require.Equal(t, LastTraversedHeader.Number.Uint64(), headerTraversal.LatestHeader().Number.Uint64()) -} - -func TestHeaderTraversalNextHeadersCursored(t *testing.T) { - client := &testutils.MockClient{} - t.Cleanup(func() { client.AssertExpectations(t) }) - - rpc := &testutils.MockRPC{} - client.Mock.On("RPC").Return(rpc) - t.Cleanup(func() { rpc.AssertExpectations(t) }) - - // start from genesis, 7 available headers - headerTraversal := NewHeaderTraversal(client, nil, bigint.Zero) - client.ExpectHeaderByNumber(nil, &types.Header{Number: big.NewInt(7)}, nil) - - headers := makeHeaders(10, nil) - rpcElems := makeHeaderRpcElems(headers[0].Number, headers[9].Number) - for i := 0; i < len(rpcElems); i++ { - rpcElems[i].Result = &headers[i] - } - - // traverse blocks [0..4]. Latest reported is 7 - rpc.ExpectBatchCallContext(rpcElems[:5], nil) - _, err := headerTraversal.NextHeaders(5) - require.NoError(t, err) - - require.Equal(t, uint64(7), headerTraversal.LatestHeader().Number.Uint64()) - require.Equal(t, uint64(4), headerTraversal.LastTraversedHeader().Number.Uint64()) - - // blocks [5..9]. Latest Reported is 9 - client.ExpectHeaderByNumber(nil, &headers[9], nil) - rpc.ExpectBatchCallContext(rpcElems[5:], nil) - _, err = headerTraversal.NextHeaders(5) - require.NoError(t, err) - - require.Equal(t, uint64(9), headerTraversal.LatestHeader().Number.Uint64()) - require.Equal(t, uint64(9), headerTraversal.LastTraversedHeader().Number.Uint64()) -} - -func TestHeaderTraversalNextHeadersMaxSize(t *testing.T) { - client := &testutils.MockClient{} - t.Cleanup(func() { client.AssertExpectations(t) }) - - rpc := &testutils.MockRPC{} - client.Mock.On("RPC").Return(rpc) - t.Cleanup(func() { rpc.AssertExpectations(t) }) - - // start from genesis, 100 available headers - headerTraversal := NewHeaderTraversal(client, nil, bigint.Zero) - client.ExpectHeaderByNumber(nil, &types.Header{Number: big.NewInt(100)}, nil) - - headers := makeHeaders(5, nil) - rpcElems := makeHeaderRpcElems(headers[0].Number, headers[4].Number) - for i := 0; i < len(rpcElems); i++ { - rpcElems[i].Result = &headers[i] - } - - // traverse only 5 headers [0..4] - rpc.ExpectBatchCallContext(rpcElems, nil) - headers, err := headerTraversal.NextHeaders(5) - require.NoError(t, err) - require.Len(t, headers, 5) - - require.Equal(t, uint64(100), headerTraversal.LatestHeader().Number.Uint64()) - require.Equal(t, uint64(4), headerTraversal.LastTraversedHeader().Number.Uint64()) - - // clamped by the supplied size. FinalizedHeight == 100 - client.ExpectHeaderByNumber(nil, &types.Header{Number: big.NewInt(100)}, nil) - headers = makeHeaders(10, &headers[len(headers)-1]) - rpcElems = makeHeaderRpcElems(headers[0].Number, headers[9].Number) - for i := 0; i < len(rpcElems); i++ { - rpcElems[i].Result = &headers[i] - } - - rpc.ExpectBatchCallContext(rpcElems, nil) - headers, err = headerTraversal.NextHeaders(10) - require.NoError(t, err) - require.Len(t, headers, 10) - - require.Equal(t, uint64(100), headerTraversal.LatestHeader().Number.Uint64()) - require.Equal(t, uint64(14), headerTraversal.LastTraversedHeader().Number.Uint64()) -} - -func TestHeaderTraversalMismatchedProviderStateError(t *testing.T) { - client := &testutils.MockClient{} - t.Cleanup(func() { client.AssertExpectations(t) }) - - rpc := &testutils.MockRPC{} - client.Mock.On("RPC").Return(rpc) - t.Cleanup(func() { rpc.AssertExpectations(t) }) - - // start from genesis - headerTraversal := NewHeaderTraversal(client, nil, bigint.Zero) - - // blocks [0..4] - headers := makeHeaders(5, nil) - rpcElems := makeHeaderRpcElems(headers[0].Number, headers[4].Number) - for i := 0; i < len(rpcElems); i++ { - rpcElems[i].Result = &headers[i] - } - - client.ExpectHeaderByNumber(nil, &headers[4], nil) - rpc.ExpectBatchCallContext(rpcElems, nil) - headers, err := headerTraversal.NextHeaders(5) - require.NoError(t, err) - require.Len(t, headers, 5) - - // Build on the wrong previous header, corrupting hashes - prevHeader := headers[len(headers)-2] - prevHeader.Number = headers[len(headers)-1].Number - headers = makeHeaders(5, &prevHeader) - rpcElems = makeHeaderRpcElems(headers[0].Number, headers[4].Number) - for i := 0; i < len(rpcElems); i++ { - rpcElems[i].Result = &headers[i] - } - - // More headers are available (Latest == 9), but the mismatches will the last - // traversed header - client.ExpectHeaderByNumber(nil, &types.Header{Number: big.NewInt(9)}, nil) - rpc.ExpectBatchCallContext(rpcElems[:2], nil) - headers, err = headerTraversal.NextHeaders(2) - require.Nil(t, headers) - require.Equal(t, ErrHeaderTraversalAndProviderMismatchedState, err) -} diff --git a/indexer/ops/assets/architecture.png b/indexer/ops/assets/architecture.png deleted file mode 100644 index 1cff0240406df3d6eed891bac6e388a2dd38e4ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28492 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 AIsgCw diff --git a/indexer/ops/assets/indexer-service.png b/indexer/ops/assets/indexer-service.png deleted file mode 100644 index 0a72735df6ae491402fba36e3c0610ab42c00680..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86488 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 JGI55|+Q}NsYCvYG!~-9%H7MDh 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 n*WnjV{qqYxPHy(zKG)nl|L>o TODO: script that scans for correlated events on L2 using withdrawal hash). If the hash is present, the bridge processor is incorrect and should be investigated further. Please file an issue with the details of the investigation. - -2. Bridge processor halting due to upstream L1/L2 processor failures. See above for troubleshooting steps for L1/L2 processor failures. - * Verify that the bridge processor is not halted due to upstream processor failures. If it is, remediate the upstream processor failures and restart the application. The bridge processor will be able to resume indexing from the last persisted heights. - -### Re-syncing -To resync a deployed indexer, the following steps should be taken: -1. Stop the running indexer service instance (especially if using blue/green deployment strategy). Deleting state while the application is running can cause data corruption since application startups begin operation at the most recent indexed state. -2. Delete the database state. This can be done by doing a cascading delete of both the l1/l2 `blocks` table. This will delete all blocks and associated data (i.e, system events, bridge txs). Since there's referential integrity between the blocks tables and all other table schema, the following commands will delete all data in the database: -```sql -TRUNCATE l1_block_headers CASCADE; -TRUNCATE l2_block_headers CASCADE; -``` -> The indexer syncs L1 & L2 state independently and can thus also be resynced individually as well. -3. Restart the indexer service. The indexer should detect that the database is empty and begin syncing from genesis (i.e, `l2_start_height = 0`, `l1_start_height = l1-starting-height`). This can be verified by checking the logs for the following message: -``` -no indexed state, starting from genesis -``` - -#### Re-syncing just the bridge processor -To resync the bridge processor without re-retrieving L1/L2 contract data, the following steps should be taken: -1. Stop the running indexer service instance. -2. Delete the bridge processor's database state. This can be done by doing performing cascading delete the root bridge tables -- `l1_transaction_deposits` and `l2_transaction_withdrawals`: -```sql -TRUNCATE l1_transaction_deposits CASCADE; -TRUNCATE l2_transaction_withdrawals CASCADE; -``` -> Similar to blocks & logs, deposits & withdrawals are synced independently and can thus be resynced individually as well. The bridge process is smart enough to pause finalization processing until the other side is caught up. For this reason, it's possible to just re-sync deposits or withdrawals. -3. Restart the indexer service. - -## API Troubleshooting - -### API is returning response errors -The API is a read-only service that does not modify the database. If the API is returning errors, it is likely due to the following reasons: - * Verify that the API is able to connect to the database. If the database is down, the API will return errors. - * Verify that http `timeout` env variable is set to a reasonable value. If the timeout is too low, the API may be timing out on requests and returning errors. - * Verify that rate limiting isn't enabled in request routing layer. If rate limiting is enabled, the API may be rate limited and returning errors. - * Verify that service isn't being overloaded by too many requests. If the service is overloaded, the API may be returning errors. diff --git a/indexer/ops/grafana/dashboards/indexer.json b/indexer/ops/grafana/dashboards/indexer.json deleted file mode 100644 index 16a25e4ea93b..000000000000 --- a/indexer/ops/grafana/dashboards/indexer.json +++ /dev/null @@ -1,2384 +0,0 @@ -{ - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "grafana", - "uid": "-- Grafana --" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 0, - "id": 164, - "links": [], - "liveNow": false, - "panels": [ - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 7, - "panels": [], - "title": "ETL Processor (Blocks & Logs)", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 4, - "x": 0, - "y": 1 - }, - "id": 3, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "10.3.0-63588", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "op_indexer_etl_l1_indexed_height", - "instant": false, - "legendFormat": "ETL", - "range": true, - "refId": "A" - } - ], - "title": "Indexed L1 Height", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "fieldMinMax": false, - "mappings": [], - "min": 0, - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 4, - "y": 1 - }, - "id": 25, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value", - "wideLayout": true - }, - "pluginVersion": "10.3.0-63588", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "op_indexer_etl_l1_latest_height", - "instant": false, - "legendFormat": "__auto", - "range": true, - "refId": "A" - } - ], - "title": "Reported L1 Height", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 7, - "y": 1 - }, - "id": 23, - "options": { - "minVizHeight": 75, - "minVizWidth": 75, - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "sizing": "auto" - }, - "pluginVersion": "10.3.0-63588", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "op_indexer_etl_l1_indexed_height\n / op_indexer_etl_l1_latest_height\n", - "instant": false, - "legendFormat": "__auto", - "range": true, - "refId": "A" - } - ], - "title": "L1 Sync %", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 2, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "always", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 14, - "x": 10, - "y": 1 - }, - "id": 20, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "rate(op_indexer_etl_l1_interval_seconds_sum[$etl_rate_interval])\n/\nrate(op_indexer_etl_l1_interval_seconds_count[$etl_rate_interval])", - "instant": false, - "legendFormat": "l1", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "rate(op_indexer_etl_l2_interval_seconds_sum[$etl_rate_interval])\n/\nrate(op_indexer_etl_l2_interval_seconds_count[$etl_rate_interval])", - "hide": false, - "instant": false, - "legendFormat": "l2", - "range": true, - "refId": "B" - } - ], - "title": "AVG ETL Latency", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 4, - "x": 0, - "y": 5 - }, - "id": 2, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "10.3.0-63588", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "disableTextWrap": false, - "editorMode": "code", - "exemplar": true, - "expr": "op_indexer_etl_l2_indexed_height", - "fullMetaSearch": false, - "includeNullMetadata": true, - "instant": false, - "legendFormat": "__auto", - "range": true, - "refId": "A", - "useBackend": false - } - ], - "title": "Indexed L2 Height", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "min": 0, - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 4, - "y": 5 - }, - "id": 26, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "10.3.0-63588", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "op_indexer_etl_l2_latest_height", - "instant": false, - "legendFormat": "__auto", - "range": true, - "refId": "A" - } - ], - "title": "Reported L2 Height", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 7, - "y": 5 - }, - "id": 24, - "options": { - "minVizHeight": 75, - "minVizWidth": 75, - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "sizing": "auto" - }, - "pluginVersion": "10.3.0-63588", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "op_indexer_etl_l2_indexed_height\n / op_indexer_etl_l2_latest_height", - "instant": false, - "legendFormat": "__auto", - "range": true, - "refId": "A" - } - ], - "title": "L2 Sync %", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 2, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "always", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 12, - "x": 0, - "y": 9 - }, - "id": 17, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "sum by(contract) (rate(op_indexer_etl_l1_indexed_logs_total[$etl_rate_interval])) * 60", - "instant": false, - "legendFormat": "{{contract}}", - "range": true, - "refId": "A" - } - ], - "title": "Indexed L1 Logs / m", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 2, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "always", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 12, - "x": 12, - "y": 9 - }, - "id": 18, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "sum by(contract) (rate(op_indexer_etl_l2_indexed_logs_total[$etl_rate_interval])) * 60", - "instant": false, - "legendFormat": "__auto", - "range": true, - "refId": "A" - } - ], - "title": "Indexed L2 Logs / m", - "type": "timeseries" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 16 - }, - "id": 8, - "panels": [], - "title": "Bridge Processor", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 0, - "y": 17 - }, - "id": 5, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "10.3.0-63588", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "op_indexer_bridge_height{chain=\"l1\", kind=\"initiated\"}", - "instant": false, - "legendFormat": "initiated", - "range": true, - "refId": "A" - } - ], - "title": "Initiated Bridge L1 Height", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 3, - "y": 17 - }, - "id": 29, - "options": { - "minVizHeight": 75, - "minVizWidth": 75, - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "sizing": "auto" - }, - "pluginVersion": "10.3.0-63588", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "op_indexer_bridge_height{chain=\"l1\", kind=\"initiated\"} / on() op_indexer_etl_l1_indexed_height", - "instant": false, - "legendFormat": "__auto", - "range": true, - "refId": "A" - } - ], - "title": "Initiated L1 Sync %", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 6, - "y": 17 - }, - "id": 27, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "10.3.0-63588", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "op_indexer_bridge_height{chain=\"l1\", kind=\"finalized\"}", - "instant": false, - "legendFormat": "__auto", - "range": true, - "refId": "A" - } - ], - "title": "Finalized L1 Bridge Height", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 9, - "y": 17 - }, - "id": 32, - "options": { - "minVizHeight": 75, - "minVizWidth": 75, - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "sizing": "auto" - }, - "pluginVersion": "10.3.0-63588", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "op_indexer_bridge_height{chain=\"l1\", kind=\"finalized\"} / on() op_indexer_etl_l1_indexed_height", - "instant": false, - "legendFormat": "__auto", - "range": true, - "refId": "A" - } - ], - "title": "Finalized L1 Sync %", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 1, - "pointSize": 3, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "always", - "spanNulls": true, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 17 - }, - "id": 22, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "max by(chain) \n(rate(op_indexer_bridge_interval_seconds_sum[$etl_rate_interval])\n/\nrate(op_indexer_bridge_interval_seconds_count[$etl_rate_interval]))", - "instant": false, - "legendFormat": "{{chain}}", - "range": true, - "refId": "A" - } - ], - "title": "AVG Bridge Processing Latency", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 0, - "y": 21 - }, - "id": 6, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "10.3.0-63588", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "op_indexer_bridge_height{chain=\"l2\", kind=\"initiated\"}", - "instant": false, - "legendFormat": "initiated", - "range": true, - "refId": "A" - } - ], - "title": "Initiated Bridge L2 Height", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 3, - "y": 21 - }, - "id": 30, - "options": { - "minVizHeight": 75, - "minVizWidth": 75, - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "sizing": "auto" - }, - "pluginVersion": "10.3.0-63588", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "op_indexer_bridge_height{chain=\"l2\", kind=\"initiated\"} / on() op_indexer_etl_l2_indexed_height", - "instant": false, - "legendFormat": "__auto", - "range": true, - "refId": "A" - } - ], - "title": "Initiated L2 Sync %", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 6, - "y": 21 - }, - "id": 28, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "10.3.0-63588", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "op_indexer_bridge_height{chain=\"l2\", kind=\"finalized\"}", - "instant": false, - "legendFormat": "__auto", - "range": true, - "refId": "A" - } - ], - "title": "Finalized Bridge L2 Height", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 3, - "x": 9, - "y": 21 - }, - "id": 31, - "options": { - "minVizHeight": 75, - "minVizWidth": 75, - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "sizing": "auto" - }, - "pluginVersion": "10.3.0-63588", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "op_indexer_bridge_height{chain=\"l2\", kind=\"finalized\"} / on() op_indexer_etl_l2_indexed_height", - "instant": false, - "legendFormat": "__auto", - "range": true, - "refId": "A" - } - ], - "title": "Finalized L2 Sync %", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 2, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "always", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 12, - "x": 0, - "y": 25 - }, - "id": 9, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "exemplar": true, - "expr": "rate(op_indexer_bridge_tx_deposits[$etl_rate_interval]) * 60", - "instant": false, - "legendFormat": "L1 Transaction Deposits", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "exemplar": true, - "expr": "rate(op_indexer_bridge_sent_messages{chain=\"l1\"}[$etl_rate_interval]) * 60", - "hide": false, - "instant": false, - "legendFormat": "L1 Sent Messages", - "range": true, - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "rate(op_indexer_bridge_relayed_messages{chain=\"l1\"}[$etl_rate_interval]) * 60", - "hide": false, - "instant": false, - "legendFormat": "L1 Relayed Messages", - "range": true, - "refId": "C" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "rate(op_indexer_bridge_initiated_token_transfers{chain=\"l1\"}[$etl_rate_interval]) * 60", - "hide": false, - "instant": false, - "legendFormat": "L1 Initiated Bridge Transfers", - "range": true, - "refId": "D" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "rate(op_indexer_bridge_finalized_token_transfers{chain=\"l1\"}[$etl_rate_interval]) * 60", - "hide": false, - "instant": false, - "legendFormat": "L1 Finalized Bridge Transfers", - "range": true, - "refId": "E" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "rate(op_indexer_bridge_skipped_ovm1_withdrawals{chain=\"l1\"}[$etl_rate_interval]) * 60 ", - "hide": false, - "instant": false, - "legendFormat": "Skipped OVM1 Withdrawals", - "range": true, - "refId": "F" - } - ], - "title": "L1 Bridge Transactions / m", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 2, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "always", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 12, - "x": 12, - "y": 25 - }, - "id": 11, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "rate(op_indexer_bridge_tx_minted_eth[$etl_rate_interval]) * 60", - "instant": false, - "legendFormat": "Minted ETH", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "rate(op_indexer_bridge_tx_withdrawn_eth[$etl_rate_interval]) * 60", - "hide": false, - "instant": false, - "legendFormat": "Withdrawn ETH", - "range": true, - "refId": "B" - } - ], - "title": "Transferred ETH / m", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 2, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "always", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 12, - "x": 0, - "y": 32 - }, - "id": 10, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "rate(op_indexer_bridge_tx_withdrawals[$etl_rate_interval]) * 60", - "instant": false, - "legendFormat": "L2 Transaction Withdrawals", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "rate(op_indexer_bridge_sent_messages{chain=\"l2\"}[$etl_rate_interval]) * 60", - "hide": false, - "instant": false, - "legendFormat": "L2 Sent Messages", - "range": true, - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "rate(op_indexer_bridge_relayed_messages{chain=\"l2\"}[$etl_rate_interval]) * 60", - "hide": false, - "instant": false, - "legendFormat": "L2 Relayed Messages", - "range": true, - "refId": "C" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "rate(op_indexer_bridge_initiated_token_transfers{chain=\"l2\"}[$etl_rate_interval]) * 60", - "hide": false, - "instant": false, - "legendFormat": "L2 Initiated Bridge Transfers", - "range": true, - "refId": "D" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "rate(op_indexer_bridge_finalized_token_transfers{chain=\"l2\"}[$etl_rate_interval]) * 60", - "hide": false, - "instant": false, - "legendFormat": "L2 Finalized Bridge Transfers", - "range": true, - "refId": "E" - } - ], - "title": "L2 Bridge Transactions / m", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 2, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "always", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 12, - "x": 12, - "y": 32 - }, - "id": 12, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "disableTextWrap": false, - "editorMode": "code", - "expr": "sum by(token_address) (rate(op_indexer_bridge_initiated_token_transfers{token_address!=\"0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000\"}[$etl_rate_interval])) * 60", - "fullMetaSearch": false, - "includeNullMetadata": true, - "instant": false, - "legendFormat": "{{token_address}}", - "range": true, - "refId": "A", - "useBackend": false - } - ], - "title": "Transferred ERC20 / m", - "type": "timeseries" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 39 - }, - "id": 13, - "panels": [], - "title": "RPC", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 2, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "always", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "reqpm" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 12, - "x": 0, - "y": 40 - }, - "id": 14, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "sum by(method) (rate(op_indexer_rpc_l1_requests_total[$etl_rate_interval])) * 60", - "instant": false, - "legendFormat": "{{method}}", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "sum by(method,error) (rate(op_indexer_rpc_l1_responses_total{error!=\"\"}[$etl_rate_interval])) * 60", - "hide": false, - "instant": false, - "legendFormat": "{{method}} (error: {{error}})", - "range": true, - "refId": "B" - } - ], - "title": "L1 RPC / m", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 2, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "always", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 12, - "x": 12, - "y": 40 - }, - "id": 16, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "10.3.0-62488", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "sum by(method) (rate(op_indexer_rpc_l1_request_duration_seconds_sum[$etl_rate_interval])\n/\nrate(op_indexer_rpc_l1_request_duration_seconds_count[$etl_rate_interval]))", - "hide": false, - "instant": false, - "legendFormat": "{{method}}", - "range": true, - "refId": "A" - } - ], - "title": "AVG L1 RPC Latency", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 2, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "always", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "reqpm" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 12, - "x": 0, - "y": 47 - }, - "id": 15, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "sum by(method) (rate(op_indexer_rpc_l2_requests_total[$etl_rate_interval])) * 60", - "instant": false, - "legendFormat": "{{method}}", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "sum by(method, error) (rate(op_indexer_rpc_l2_responses_total{error!=\"\"}[$etl_rate_interval])) * 60", - "hide": true, - "instant": false, - "legendFormat": "{{method}} (error: {{error}})", - "range": true, - "refId": "B" - } - ], - "title": "L2 RPC / m", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 2, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "always", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 12, - "x": 12, - "y": 47 - }, - "id": 19, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "6R74VAnVz" - }, - "editorMode": "code", - "expr": "sum by(method) (rate(op_indexer_rpc_l2_request_duration_seconds_sum[$etl_rate_interval])\n/\nrate(op_indexer_rpc_l2_request_duration_seconds_count[$etl_rate_interval]))", - "instant": false, - "legendFormat": "{{method}}", - "range": true, - "refId": "A" - } - ], - "title": "AVG L2 RPC Latency", - "type": "timeseries" - } - ], - "refresh": "", - "schemaVersion": 39, - "tags": [], - "templating": { - "list": [ - { - "description": "The window used for `rate`, based on the ETL loop interval", - "hide": 2, - "name": "etl_rate_interval", - "query": "2m", - "skipUrlSync": false, - "type": "constant" - } - ] - }, - "time": { - "from": "now-15m", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Indexer", - "uid": "a3cdb010-d44b-4556-a61e-46d655f57bc4", - "version": 30, - "weekStart": "" -} diff --git a/indexer/ops/grafana/provisioning/dashboards/all.yml b/indexer/ops/grafana/provisioning/dashboards/all.yml deleted file mode 100644 index 3ce6e7c5bc69..000000000000 --- a/indexer/ops/grafana/provisioning/dashboards/all.yml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: 1 -providers: -- name: 'default' - orgId: 1 - folder: '' - type: file - disableDeletion: false - options: - path: /var/lib/grafana/dashboards diff --git a/indexer/ops/grafana/provisioning/datasources/datasources.yml b/indexer/ops/grafana/provisioning/datasources/datasources.yml deleted file mode 100644 index d4e61af386f3..000000000000 --- a/indexer/ops/grafana/provisioning/datasources/datasources.yml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: 1 - -datasources: - - name: Prometheus - type: prometheus - uid: '6R74VAnVz' - access: proxy - url: http://prometheus:9090 - isDefault: true diff --git a/indexer/ops/prometheus/prometheus.yml b/indexer/ops/prometheus/prometheus.yml deleted file mode 100644 index 3f8bdaad0b24..000000000000 --- a/indexer/ops/prometheus/prometheus.yml +++ /dev/null @@ -1,8 +0,0 @@ -global: - scrape_interval: 5s - evaluation_interval: 5s - -scrape_configs: - - job_name: 'indexer' - static_configs: - - targets: ['index:7300'] diff --git a/indexer/processors/bridge.go b/indexer/processors/bridge.go deleted file mode 100644 index 891d1151ac13..000000000000 --- a/indexer/processors/bridge.go +++ /dev/null @@ -1,419 +0,0 @@ -package processors - -import ( - "context" - "errors" - "fmt" - "math/big" - - "gorm.io/gorm" - - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/log" - - "github.com/ethereum-optimism/optimism/indexer/bigint" - "github.com/ethereum-optimism/optimism/indexer/config" - "github.com/ethereum-optimism/optimism/indexer/database" - "github.com/ethereum-optimism/optimism/indexer/etl" - "github.com/ethereum-optimism/optimism/indexer/processors/bridge" - "github.com/ethereum-optimism/optimism/op-service/tasks" -) - -var blocksLimit = 500 - -type BridgeProcessor struct { - log log.Logger - db *database.DB - metrics bridge.Metricer - - resourceCtx context.Context - resourceCancel context.CancelFunc - tasks tasks.Group - - l1Etl *etl.L1ETL - l2Etl *etl.L2ETL - chainConfig config.ChainConfig - - LastL1Header *database.L1BlockHeader - LastL2Header *database.L2BlockHeader - - LastFinalizedL1Header *database.L1BlockHeader - LastFinalizedL2Header *database.L2BlockHeader -} - -func NewBridgeProcessor(log log.Logger, db *database.DB, metrics bridge.Metricer, l1Etl *etl.L1ETL, l2Etl *etl.L2ETL, - chainConfig config.ChainConfig, shutdown context.CancelCauseFunc) (*BridgeProcessor, error) { - log = log.New("processor", "bridge") - - latestL1Header, err := db.BridgeTransactions.L1LatestBlockHeader() - if err != nil { - return nil, err - } - latestL2Header, err := db.BridgeTransactions.L2LatestBlockHeader() - if err != nil { - return nil, err - } - - latestFinalizedL1Header, err := db.BridgeTransactions.L1LatestFinalizedBlockHeader() - if err != nil { - return nil, err - } - latestFinalizedL2Header, err := db.BridgeTransactions.L2LatestFinalizedBlockHeader() - if err != nil { - return nil, err - } - - log.Info("detected indexed bridge state", - "l1_block", latestL1Header, "l2_block", latestL2Header, - "finalized_l1_block", latestFinalizedL1Header, "finalized_l2_block", latestFinalizedL2Header) - - resCtx, resCancel := context.WithCancel(context.Background()) - return &BridgeProcessor{ - log: log, - db: db, - metrics: metrics, - l1Etl: l1Etl, - l2Etl: l2Etl, - resourceCtx: resCtx, - resourceCancel: resCancel, - chainConfig: chainConfig, - LastL1Header: latestL1Header, - LastL2Header: latestL2Header, - LastFinalizedL1Header: latestFinalizedL1Header, - LastFinalizedL2Header: latestFinalizedL2Header, - tasks: tasks.Group{HandleCrit: func(err error) { - shutdown(fmt.Errorf("critical error in bridge processor: %w", err)) - }}, - }, nil -} - -func (b *BridgeProcessor) Start() error { - b.log.Info("starting bridge processor...") - // start L1 worker - b.tasks.Go(func() error { - l1EtlUpdates := b.l1Etl.Notify() - for latestHeader := range l1EtlUpdates { - b.log.Info("notified of traversed L1 state", "l1_etl_block_number", latestHeader.Number) - if err := b.onL1Data(latestHeader); err != nil { - b.log.Error("failed l1 bridge processing interval", "err", err) - } - } - b.log.Info("no more l1 etl updates. shutting down l1 task") - return nil - }) - // start L2 worker - b.tasks.Go(func() error { - l2EtlUpdates := b.l2Etl.Notify() - for latestHeader := range l2EtlUpdates { - b.log.Info("notified of traversed L2 state", "l2_etl_block_number", latestHeader.Number) - if err := b.onL2Data(latestHeader); err != nil { - b.log.Error("failed l2 bridge processing interval", "err", err) - } - } - b.log.Info("no more l2 etl updates. shutting down l2 task") - return nil - }) - return nil -} - -func (b *BridgeProcessor) Close() error { - // signal that we can stop any ongoing work - b.resourceCancel() - // await the work to stop - return b.tasks.Wait() -} - -// onL1Data will index new bridge events for the unvisited L1 state. As new L1 bridge events -// are processed, bridge finalization events can be processed on L2 in this same window. -func (b *BridgeProcessor) onL1Data(latestL1Header *types.Header) (errs error) { - - // Continue while unvisited state is available to process - for errs == nil { - done := b.metrics.RecordL1Interval() - - lastL1Header := b.LastL1Header - lastFinalizedL2Header := b.LastFinalizedL2Header - - // Initiated L1 Events - if b.LastL1Header == nil || b.LastL1Header.Timestamp < latestL1Header.Time { - if err := b.processInitiatedL1Events(latestL1Header); err != nil { - errs = errors.Join(errs, fmt.Errorf("failed processing initiated l1 events: %w", err)) - } - } - - // Finalized L1 Events (on L2) - // - Not every L1 block is indexed so check against a false interval on start. - if b.LastL1Header != nil && (b.LastFinalizedL2Header == nil || b.LastFinalizedL2Header.Timestamp < latestL1Header.Time) { - if err := b.processFinalizedL2Events(latestL1Header); err != nil { - errs = errors.Join(errs, fmt.Errorf("failed processing finalized l2 events: %w", err)) - } - } - - done(errs) - - // Break if there has been no change in processed events. - if lastL1Header == b.LastL1Header && lastFinalizedL2Header == b.LastFinalizedL2Header { - break - } - } - - return errs -} - -// onL2Data will index new bridge events for the unvisited L2 state. As new L2 bridge events -// are processed, bridge finalization events can be processed on L1 in this same window. -func (b *BridgeProcessor) onL2Data(latestL2Header *types.Header) (errs error) { - if latestL2Header.Number.Cmp(bigint.Zero) == 0 { - return nil // skip genesis - } - - // Continue while unvisited state is available to process - for errs == nil { - done := b.metrics.RecordL2Interval() - - lastL2Header := b.LastL2Header - lastFinalizedL1Header := b.LastFinalizedL1Header - - // Initiated L2 Events - if b.LastL2Header == nil || b.LastL2Header.Timestamp < latestL2Header.Time { - if err := b.processInitiatedL2Events(latestL2Header); err != nil { - errs = errors.Join(errs, fmt.Errorf("failed processing initiated l2 events: %w", err)) - } - } - - // Finalized L2 Events (on L1) - if b.LastL2Header != nil && (b.LastFinalizedL1Header == nil || b.LastFinalizedL1Header.Timestamp < latestL2Header.Time) { - if err := b.processFinalizedL1Events(latestL2Header); err != nil { - errs = errors.Join(errs, fmt.Errorf("failed processing finalized l1 events: %w", err)) - } - } - - done(errs) - - // Break if there has been no change in processed events. - if lastL2Header == b.LastL2Header && lastFinalizedL1Header == b.LastFinalizedL1Header { - break - } - } - - return errs -} - -// Process Initiated Bridge Events - -func (b *BridgeProcessor) processInitiatedL1Events(latestL1Header *types.Header) error { - l1BridgeLog := b.log.New("bridge", "l1", "kind", "initiated") - lastL1BlockNumber := big.NewInt(int64(b.chainConfig.L1StartingHeight - 1)) - if b.LastL1Header != nil { - lastL1BlockNumber = b.LastL1Header.Number - } - - // Latest unobserved L1 state bounded by `blockLimits` blocks. Since - // not every L1 block is indexed, we may have nothing to process. - toL1HeaderScope := func(db *gorm.DB) *gorm.DB { - newQuery := db.Session(&gorm.Session{NewDB: true}) // fresh subquery - headers := newQuery.Model(database.L1BlockHeader{}).Where("number > ? AND number <= ?", lastL1BlockNumber, latestL1Header.Number) - return db.Where("number = (?)", newQuery.Table("(?) AS block_numbers", headers.Order("number ASC").Limit(blocksLimit)).Select("MAX(number)")) - } - toL1Header, err := b.db.Blocks.L1BlockHeaderWithScope(toL1HeaderScope) - if err != nil { - return fmt.Errorf("failed to query new L1 state: %w", err) - } else if toL1Header == nil { - l1BridgeLog.Debug("no new L1 state found") - return nil - } - - fromL1Height, toL1Height := new(big.Int).Add(lastL1BlockNumber, bigint.One), toL1Header.Number - if err := b.db.Transaction(func(tx *database.DB) error { - l1BedrockStartingHeight := big.NewInt(int64(b.chainConfig.L1BedrockStartingHeight)) - if l1BedrockStartingHeight.Cmp(fromL1Height) > 0 { // OP Mainnet - legacyFromL1Height, legacyToL1Height := fromL1Height, toL1Height - if l1BedrockStartingHeight.Cmp(toL1Height) <= 0 { - legacyToL1Height = new(big.Int).Sub(l1BedrockStartingHeight, bigint.One) - } - - legacyBridgeLog := l1BridgeLog.New("mode", "legacy", "from_block_number", legacyFromL1Height, "to_block_number", legacyToL1Height) - legacyBridgeLog.Info("scanning for initiated bridge events") - if err := bridge.LegacyL1ProcessInitiatedBridgeEvents(legacyBridgeLog, tx, b.metrics, b.chainConfig.L1Contracts, legacyFromL1Height, legacyToL1Height); err != nil { - return err - } else if legacyToL1Height.Cmp(toL1Height) == 0 { - return nil // a-ok! Entire range was legacy blocks - } - legacyBridgeLog.Info("detected switch to bedrock", "bedrock_block_number", l1BedrockStartingHeight) - fromL1Height = l1BedrockStartingHeight - } - - l1BridgeLog = l1BridgeLog.New("from_block_number", fromL1Height, "to_block_number", toL1Height) - l1BridgeLog.Info("scanning for initiated bridge events") - return bridge.L1ProcessInitiatedBridgeEvents(l1BridgeLog, tx, b.metrics, b.chainConfig.L1Contracts, fromL1Height, toL1Height) - }); err != nil { - return err - } - - b.LastL1Header = toL1Header - b.metrics.RecordL1LatestHeight(toL1Header.Number) - return nil -} - -func (b *BridgeProcessor) processInitiatedL2Events(latestL2Header *types.Header) error { - l2BridgeLog := b.log.New("bridge", "l2", "kind", "initiated") - lastL2BlockNumber := bigint.Zero - if b.LastL2Header != nil { - lastL2BlockNumber = b.LastL2Header.Number - } - - // Latest unobserved L2 state bounded by `blockLimits` blocks. - // Since every L2 block is indexed, we always expect new state. - toL2HeaderScope := func(db *gorm.DB) *gorm.DB { - newQuery := db.Session(&gorm.Session{NewDB: true}) // fresh subquery - headers := newQuery.Model(database.L2BlockHeader{}).Where("number > ? AND number <= ?", lastL2BlockNumber, latestL2Header.Number) - return db.Where("number = (?)", newQuery.Table("(?) AS block_numbers", headers.Order("number ASC").Limit(blocksLimit)).Select("MAX(number)")) - } - toL2Header, err := b.db.Blocks.L2BlockHeaderWithScope(toL2HeaderScope) - if err != nil { - return fmt.Errorf("failed to query new L2 state: %w", err) - } else if toL2Header == nil { - return fmt.Errorf("no new L2 state found") - } - - fromL2Height, toL2Height := new(big.Int).Add(lastL2BlockNumber, bigint.One), toL2Header.Number - if err := b.db.Transaction(func(tx *database.DB) error { - l2BedrockStartingHeight := big.NewInt(int64(b.chainConfig.L2BedrockStartingHeight)) - if l2BedrockStartingHeight.Cmp(fromL2Height) > 0 { // OP Mainnet - legacyFromL2Height, legacyToL2Height := fromL2Height, toL2Height - if l2BedrockStartingHeight.Cmp(toL2Height) <= 0 { - legacyToL2Height = new(big.Int).Sub(l2BedrockStartingHeight, bigint.One) - } - - legacyBridgeLog := l2BridgeLog.New("mode", "legacy", "from_block_number", legacyFromL2Height, "to_block_number", legacyToL2Height) - legacyBridgeLog.Info("scanning for initiated bridge events") - if err := bridge.LegacyL2ProcessInitiatedBridgeEvents(legacyBridgeLog, tx, b.metrics, b.chainConfig.Preset, b.chainConfig.L2Contracts, legacyFromL2Height, legacyToL2Height); err != nil { - return err - } else if legacyToL2Height.Cmp(toL2Height) == 0 { - return nil // a-ok! Entire range was legacy blocks - } - legacyBridgeLog.Info("detected switch to bedrock") - fromL2Height = l2BedrockStartingHeight - } - - l2BridgeLog = l2BridgeLog.New("from_block_number", fromL2Height, "to_block_number", toL2Height) - l2BridgeLog.Info("scanning for initiated bridge events") - return bridge.L2ProcessInitiatedBridgeEvents(l2BridgeLog, tx, b.metrics, b.chainConfig.L2Contracts, fromL2Height, toL2Height) - }); err != nil { - return err - } - - b.LastL2Header = toL2Header - b.metrics.RecordL2LatestHeight(toL2Header.Number) - return nil -} - -// Process Finalized Bridge Events - -func (b *BridgeProcessor) processFinalizedL1Events(latestL2Header *types.Header) error { - l1BridgeLog := b.log.New("bridge", "l1", "kind", "finalization") - lastFinalizedL1BlockNumber := big.NewInt(int64(b.chainConfig.L1StartingHeight) - 1) - if b.LastFinalizedL1Header != nil { - lastFinalizedL1BlockNumber = b.LastFinalizedL1Header.Number - } - - // Latest unfinalized L1 state bounded by `blockLimit` blocks that have had L2 bridge events - // indexed. Since L1 data is indexed independently, there may not be new L1 state to finalize - toL1HeaderScope := func(db *gorm.DB) *gorm.DB { - newQuery := db.Session(&gorm.Session{NewDB: true}) // fresh subquery - headers := newQuery.Model(database.L1BlockHeader{}).Where("number > ? AND timestamp <= ?", lastFinalizedL1BlockNumber, latestL2Header.Time) - return db.Where("number = (?)", newQuery.Table("(?) AS block_numbers", headers.Order("number ASC").Limit(blocksLimit)).Select("MAX(number)")) - } - toL1Header, err := b.db.Blocks.L1BlockHeaderWithScope(toL1HeaderScope) - if err != nil { - return fmt.Errorf("failed to query for latest unfinalized L1 state: %w", err) - } else if toL1Header == nil { - l1BridgeLog.Debug("no new l1 state to finalize", "last_finalized_block_number", lastFinalizedL1BlockNumber) - return nil - } - - fromL1Height, toL1Height := new(big.Int).Add(lastFinalizedL1BlockNumber, bigint.One), toL1Header.Number - if err := b.db.Transaction(func(tx *database.DB) error { - l1BedrockStartingHeight := big.NewInt(int64(b.chainConfig.L1BedrockStartingHeight)) - if l1BedrockStartingHeight.Cmp(fromL1Height) > 0 { - legacyFromL1Height, legacyToL1Height := fromL1Height, toL1Height - if l1BedrockStartingHeight.Cmp(toL1Height) <= 0 { - legacyToL1Height = new(big.Int).Sub(l1BedrockStartingHeight, bigint.One) - } - - legacyBridgeLog := l1BridgeLog.New("mode", "legacy", "from_block_number", legacyFromL1Height, "to_block_number", legacyToL1Height) - legacyBridgeLog.Info("scanning for finalized bridge events") - if err := bridge.LegacyL1ProcessFinalizedBridgeEvents(legacyBridgeLog, tx, b.metrics, b.chainConfig.L1Contracts, legacyFromL1Height, legacyToL1Height); err != nil { - return err - } else if legacyToL1Height.Cmp(toL1Height) == 0 { - return nil // a-ok! Entire range was legacy blocks - } - legacyBridgeLog.Info("detected switch to bedrock") - fromL1Height = l1BedrockStartingHeight - } - - l1BridgeLog = l1BridgeLog.New("from_block_number", fromL1Height, "to_block_number", toL1Height) - l1BridgeLog.Info("scanning for finalized bridge events") - return bridge.L1ProcessFinalizedBridgeEvents(l1BridgeLog, tx, b.metrics, b.chainConfig.L1Contracts, fromL1Height, toL1Height) - }); err != nil { - return err - } - - b.LastFinalizedL1Header = toL1Header - b.metrics.RecordL1LatestFinalizedHeight(toL1Header.Number) - return nil -} - -func (b *BridgeProcessor) processFinalizedL2Events(latestL1Header *types.Header) error { - l2BridgeLog := b.log.New("bridge", "l2", "kind", "finalization") - lastFinalizedL2BlockNumber := bigint.Zero - if b.LastFinalizedL2Header != nil { - lastFinalizedL2BlockNumber = b.LastFinalizedL2Header.Number - } - - // Latest unfinalized L2 state bounded by `blockLimit` blocks that have had L1 bridge events - // indexed. Since L2 data is indexed independently, there may not be new L2 state to finalize - toL2HeaderScope := func(db *gorm.DB) *gorm.DB { - newQuery := db.Session(&gorm.Session{NewDB: true}) // fresh subquery - headers := newQuery.Model(database.L2BlockHeader{}).Where("number > ? AND timestamp <= ?", lastFinalizedL2BlockNumber, latestL1Header.Time) - return db.Where("number = (?)", newQuery.Table("(?) AS block_numbers", headers.Order("number ASC").Limit(blocksLimit)).Select("MAX(number)")) - } - toL2Header, err := b.db.Blocks.L2BlockHeaderWithScope(toL2HeaderScope) - if err != nil { - return fmt.Errorf("failed to query for latest unfinalized L2 state: %w", err) - } else if toL2Header == nil { - l2BridgeLog.Debug("no new l2 state to finalize", "last_finalized_block_number", lastFinalizedL2BlockNumber) - return nil - } - - fromL2Height, toL2Height := new(big.Int).Add(lastFinalizedL2BlockNumber, bigint.One), toL2Header.Number - if err := b.db.Transaction(func(tx *database.DB) error { - l2BedrockStartingHeight := big.NewInt(int64(b.chainConfig.L2BedrockStartingHeight)) - if l2BedrockStartingHeight.Cmp(fromL2Height) > 0 { - legacyFromL2Height, legacyToL2Height := fromL2Height, toL2Height - if l2BedrockStartingHeight.Cmp(toL2Height) <= 0 { - legacyToL2Height = new(big.Int).Sub(l2BedrockStartingHeight, bigint.One) - } - - legacyBridgeLog := l2BridgeLog.New("mode", "legacy", "from_block_number", legacyFromL2Height, "to_block_number", legacyToL2Height) - legacyBridgeLog.Info("scanning for finalized bridge events") - if err := bridge.LegacyL2ProcessFinalizedBridgeEvents(legacyBridgeLog, tx, b.metrics, b.chainConfig.L2Contracts, legacyFromL2Height, legacyToL2Height); err != nil { - return err - } else if legacyToL2Height.Cmp(toL2Height) == 0 { - return nil // a-ok! Entire range was legacy blocks - } - legacyBridgeLog.Info("detected switch to bedrock", "bedrock_block_number", l2BedrockStartingHeight) - fromL2Height = l2BedrockStartingHeight - } - - l2BridgeLog = l2BridgeLog.New("from_block_number", fromL2Height, "to_block_number", toL2Height) - l2BridgeLog.Info("scanning for finalized bridge events") - return bridge.L2ProcessFinalizedBridgeEvents(l2BridgeLog, tx, b.metrics, b.chainConfig.L2Contracts, fromL2Height, toL2Height) - }); err != nil { - return err - } - - b.LastFinalizedL2Header = toL2Header - b.metrics.RecordL2LatestFinalizedHeight(toL2Header.Number) - return nil -} diff --git a/indexer/processors/bridge/l1_bridge_processor.go b/indexer/processors/bridge/l1_bridge_processor.go deleted file mode 100644 index 80c0f829732d..000000000000 --- a/indexer/processors/bridge/l1_bridge_processor.go +++ /dev/null @@ -1,282 +0,0 @@ -package bridge - -import ( - "fmt" - "math/big" - - "github.com/ethereum-optimism/optimism/indexer/bigint" - "github.com/ethereum-optimism/optimism/indexer/config" - "github.com/ethereum-optimism/optimism/indexer/database" - "github.com/ethereum-optimism/optimism/indexer/processors/bridge/ovm1" - "github.com/ethereum-optimism/optimism/indexer/processors/contracts" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/log" -) - -// L1ProcessInitiatedBridgeEvents will query the database for bridge events that have been initiated between -// the specified block range. This covers every part of the multi-layered stack: -// 1. OptimismPortal -// 2. L1CrossDomainMessenger -// 3. L1StandardBridge -func L1ProcessInitiatedBridgeEvents(log log.Logger, db *database.DB, metrics L1Metricer, l1Contracts config.L1Contracts, fromHeight, toHeight *big.Int) error { - // (1) OptimismPortal - optimismPortalTxDeposits, err := contracts.OptimismPortalTransactionDepositEvents(l1Contracts.OptimismPortalProxy, db, fromHeight, toHeight) - if err != nil { - return err - } - if len(optimismPortalTxDeposits) > 0 { - log.Info("detected transaction deposits", "size", len(optimismPortalTxDeposits)) - } - - mintedGWEI := bigint.Zero - portalDeposits := make(map[logKey]*contracts.OptimismPortalTransactionDepositEvent, len(optimismPortalTxDeposits)) - transactionDeposits := make([]database.L1TransactionDeposit, len(optimismPortalTxDeposits)) - for i := range optimismPortalTxDeposits { - depositTx := optimismPortalTxDeposits[i] - portalDeposits[logKey{depositTx.Event.BlockHash, depositTx.Event.LogIndex}] = &depositTx - mintedGWEI = new(big.Int).Add(mintedGWEI, depositTx.Tx.Amount) - - transactionDeposits[i] = database.L1TransactionDeposit{ - SourceHash: depositTx.DepositTx.SourceHash, - L2TransactionHash: types.NewTx(depositTx.DepositTx).Hash(), - InitiatedL1EventGUID: depositTx.Event.GUID, - GasLimit: depositTx.GasLimit, - Tx: depositTx.Tx, - } - } - - if len(transactionDeposits) > 0 { - if err := db.BridgeTransactions.StoreL1TransactionDeposits(transactionDeposits); err != nil { - return err - } - - // Convert to from wei to eth - mintedETH, _ := bigint.WeiToETH(mintedGWEI).Float64() - metrics.RecordL1TransactionDeposits(len(transactionDeposits), mintedETH) - } - - // (2) L1CrossDomainMessenger - crossDomainSentMessages, err := contracts.CrossDomainMessengerSentMessageEvents("l1", l1Contracts.L1CrossDomainMessengerProxy, db, fromHeight, toHeight) - if err != nil { - return err - } - if len(crossDomainSentMessages) > 0 { - log.Info("detected sent messages", "size", len(crossDomainSentMessages)) - } - - sentMessages := make(map[logKey]*contracts.CrossDomainMessengerSentMessageEvent, len(crossDomainSentMessages)) - bridgeMessages := make([]database.L1BridgeMessage, len(crossDomainSentMessages)) - for i := range crossDomainSentMessages { - sentMessage := crossDomainSentMessages[i] - sentMessages[logKey{sentMessage.Event.BlockHash, sentMessage.Event.LogIndex}] = &sentMessage - - // extract the deposit hash from the previous TransactionDepositedEvent - portalDeposit, ok := portalDeposits[logKey{sentMessage.Event.BlockHash, sentMessage.Event.LogIndex - 1}] - if !ok { - return fmt.Errorf("expected TransactionDeposit preceding SentMessage event. tx_hash = %s", sentMessage.Event.TransactionHash.String()) - } else if portalDeposit.Event.TransactionHash != sentMessage.Event.TransactionHash { - return fmt.Errorf("correlated events tx hash mismatch. deposit_tx_hash = %s, message_tx_hash = %s", portalDeposit.Event.TransactionHash, sentMessage.Event.TransactionHash) - } - - bridgeMessages[i] = database.L1BridgeMessage{ - TransactionSourceHash: portalDeposit.DepositTx.SourceHash, - BridgeMessage: sentMessage.BridgeMessage, - } - } - if len(bridgeMessages) > 0 { - if err := db.BridgeMessages.StoreL1BridgeMessages(bridgeMessages); err != nil { - return err - } - metrics.RecordL1CrossDomainSentMessages(len(bridgeMessages)) - } - - // (3) L1StandardBridge - initiatedBridges, err := contracts.StandardBridgeInitiatedEvents("l1", l1Contracts.L1StandardBridgeProxy, db, fromHeight, toHeight) - if err != nil { - return err - } - if len(initiatedBridges) > 0 { - log.Info("detected bridge deposits", "size", len(initiatedBridges)) - } - - bridgedTokens := make(map[common.Address]int) - bridgeDeposits := make([]database.L1BridgeDeposit, len(initiatedBridges)) - for i := range initiatedBridges { - initiatedBridge := initiatedBridges[i] - - // extract the cross domain message hash & deposit source hash from the following events - portalDeposit, ok := portalDeposits[logKey{initiatedBridge.Event.BlockHash, initiatedBridge.Event.LogIndex + 1}] - if !ok { - return fmt.Errorf("expected TransactionDeposit following BridgeInitiated event. tx_hash = %s", initiatedBridge.Event.TransactionHash) - } else if portalDeposit.Event.TransactionHash != initiatedBridge.Event.TransactionHash { - return fmt.Errorf("correlated events tx hash mismatch, bridge_tx_hash = %s, deposit_tx_hash = %s", initiatedBridge.Event.TransactionHash, portalDeposit.Event.TransactionHash) - } - - sentMessage, ok := sentMessages[logKey{initiatedBridge.Event.BlockHash, initiatedBridge.Event.LogIndex + 2}] - if !ok { - return fmt.Errorf("expected SentMessage following BridgeInitiated event. tx_hash = %s", initiatedBridge.Event.TransactionHash) - } else if sentMessage.Event.TransactionHash != initiatedBridge.Event.TransactionHash { - return fmt.Errorf("correlated events tx hash mismatch. bridge_tx_hash = %s, message_tx_hash = %s", initiatedBridge.Event.TransactionHash, sentMessage.Event.TransactionHash) - } - - bridgedTokens[initiatedBridge.BridgeTransfer.TokenPair.LocalTokenAddress]++ - - initiatedBridge.BridgeTransfer.CrossDomainMessageHash = &sentMessage.BridgeMessage.MessageHash - bridgeDeposits[i] = database.L1BridgeDeposit{ - TransactionSourceHash: portalDeposit.DepositTx.SourceHash, - BridgeTransfer: initiatedBridge.BridgeTransfer, - } - } - if len(bridgeDeposits) > 0 { - if err := db.BridgeTransfers.StoreL1BridgeDeposits(bridgeDeposits); err != nil { - return err - } - for tokenAddr, size := range bridgedTokens { - metrics.RecordL1InitiatedBridgeTransfers(tokenAddr, size) - } - } - - return nil -} - -// L1ProcessFinalizedBridgeEvents will query the database for all the finalization markers for all initiated -// bridge events. This covers every part of the multi-layered stack: -// 1. OptimismPortal (Bedrock prove & finalize steps) -// 2. L1CrossDomainMessenger (relayMessage marker) -// 3. L1StandardBridge (no-op, since this is simply a wrapper over the L1CrossDomainMessenger) -func L1ProcessFinalizedBridgeEvents(log log.Logger, db *database.DB, metrics L1Metricer, l1Contracts config.L1Contracts, fromHeight, toHeight *big.Int) error { - // (1) OptimismPortal (proven withdrawals) - provenWithdrawals, err := contracts.OptimismPortalWithdrawalProvenEvents(l1Contracts.OptimismPortalProxy, db, fromHeight, toHeight) - if err != nil { - return err - } - if len(provenWithdrawals) > 0 { - log.Info("detected proven withdrawals", "size", len(provenWithdrawals)) - } - - skippedOVM1ProvenWithdrawals := 0 - for i := range provenWithdrawals { - provenWithdrawal := provenWithdrawals[i] - withdrawal, err := db.BridgeTransactions.L2TransactionWithdrawal(provenWithdrawal.WithdrawalHash) - if err != nil { - return err - } else if withdrawal == nil { - if _, ok := ovm1.PortalWithdrawalTransactions[provenWithdrawal.WithdrawalHash]; ok { - skippedOVM1ProvenWithdrawals++ - continue - } - return fmt.Errorf("missing indexed withdrawal! tx_hash = %s", provenWithdrawal.Event.TransactionHash) - } - - if withdrawal.ProvenL1EventGUID != nil && withdrawal.ProvenL1EventGUID.ID() != provenWithdrawals[i].Event.GUID.ID() { - log.Info("detected re-proven withdrawal", "tx_hash", provenWithdrawal.Event.TransactionHash.String()) - } - - if err := db.BridgeTransactions.MarkL2TransactionWithdrawalProvenEvent(provenWithdrawal.WithdrawalHash, provenWithdrawals[i].Event.GUID); err != nil { - return fmt.Errorf("failed to mark withdrawal as proven. tx_hash = %s: %w", provenWithdrawal.Event.TransactionHash, err) - } - } - if len(provenWithdrawals) > 0 { - metrics.RecordL1ProvenWithdrawals(len(provenWithdrawals)) - if skippedOVM1ProvenWithdrawals > 0 { - metrics.RecordL1SkippedOVM1ProvenWithdrawals(skippedOVM1ProvenWithdrawals) - log.Info("skipped OVM 1.0 proven withdrawals", "size", skippedOVM1ProvenWithdrawals) - } - } - - // (2) OptimismPortal (finalized withdrawals) - finalizedWithdrawals, err := contracts.OptimismPortalWithdrawalFinalizedEvents(l1Contracts.OptimismPortalProxy, db, fromHeight, toHeight) - if err != nil { - return err - } - if len(finalizedWithdrawals) > 0 { - log.Info("detected finalized withdrawals", "size", len(finalizedWithdrawals)) - } - - skippedOVM1FinalizedWithdrawals := 0 - for i := range finalizedWithdrawals { - finalizedWithdrawal := finalizedWithdrawals[i] - withdrawal, err := db.BridgeTransactions.L2TransactionWithdrawal(finalizedWithdrawal.WithdrawalHash) - if err != nil { - return err - } else if withdrawal == nil { - if _, ok := ovm1.PortalWithdrawalTransactions[finalizedWithdrawal.WithdrawalHash]; ok { - skippedOVM1FinalizedWithdrawals++ - continue - } - return fmt.Errorf("missing indexed withdrawal on finalization! tx_hash = %s", finalizedWithdrawal.Event.TransactionHash.String()) - } - - if err = db.BridgeTransactions.MarkL2TransactionWithdrawalFinalizedEvent(finalizedWithdrawal.WithdrawalHash, finalizedWithdrawal.Event.GUID, finalizedWithdrawal.Success); err != nil { - return fmt.Errorf("failed to mark withdrawal as finalized. tx_hash = %s: %w", finalizedWithdrawal.Event.TransactionHash, err) - } - } - if len(finalizedWithdrawals) > 0 { - metrics.RecordL1FinalizedWithdrawals(len(finalizedWithdrawals)) - if skippedOVM1ProvenWithdrawals > 0 { - metrics.RecordL1SkippedOVM1FinalizedWithdrawals(skippedOVM1FinalizedWithdrawals) - log.Info("skipped OVM 1.0 finalized withdrawals", "size", skippedOVM1FinalizedWithdrawals) - } - } - - // (3) L1CrossDomainMessenger - crossDomainRelayedMessages, err := contracts.CrossDomainMessengerRelayedMessageEvents("l1", l1Contracts.L1CrossDomainMessengerProxy, db, fromHeight, toHeight) - if err != nil { - return err - } - if len(crossDomainRelayedMessages) > 0 { - log.Info("detected relayed messages", "size", len(crossDomainRelayedMessages)) - } - - skippedOVM1Messages := 0 - for i := range crossDomainRelayedMessages { - relayedMessage := crossDomainRelayedMessages[i] - message, err := db.BridgeMessages.L2BridgeMessage(relayedMessage.MessageHash) - if err != nil { - return err - } else if message == nil { - if _, ok := ovm1.L1RelayedMessages[relayedMessage.MessageHash]; ok { - skippedOVM1Messages++ - continue - } - return fmt.Errorf("missing indexed L2CrossDomainMessager message! tx_hash = %s", relayedMessage.Event.TransactionHash.String()) - } - - if err := db.BridgeMessages.MarkRelayedL2BridgeMessage(relayedMessage.MessageHash, relayedMessage.Event.GUID); err != nil { - return fmt.Errorf("failed to relay cross domain message. tx_hash = %s: %w", relayedMessage.Event.TransactionHash, err) - } - } - if len(crossDomainRelayedMessages) > 0 { - metrics.RecordL1CrossDomainRelayedMessages(len(crossDomainRelayedMessages)) - if skippedOVM1Messages > 0 { // Logged as a warning just for visibility - metrics.RecordL1SkippedOVM1CrossDomainRelayedMessages(skippedOVM1Messages) - log.Info("skipped OVM 1.0 relayed L2CrossDomainMessenger withdrawals", "size", skippedOVM1Messages) - } - } - - // (4) L1StandardBridge - // - Nothing actionable on the database. Since the StandardBridge is layered ontop of the - // CrossDomainMessenger, there's no need for any sanity or invariant checks as the previous step - // ensures a relayed message (finalized bridge) can be linked with a sent message (initiated bridge). - finalizedBridges, err := contracts.StandardBridgeFinalizedEvents("l1", l1Contracts.L1StandardBridgeProxy, db, fromHeight, toHeight) - if err != nil { - return err - } - - finalizedTokens := make(map[common.Address]int) - for i := range finalizedBridges { - finalizedBridge := finalizedBridges[i] - finalizedTokens[finalizedBridge.BridgeTransfer.TokenPair.LocalTokenAddress]++ - } - if len(finalizedBridges) > 0 { - log.Info("detected finalized bridge withdrawals", "size", len(finalizedBridges)) - for tokenAddr, size := range finalizedTokens { - metrics.RecordL1FinalizedBridgeTransfers(tokenAddr, size) - } - } - - // a-ok! - return nil -} diff --git a/indexer/processors/bridge/l2_bridge_processor.go b/indexer/processors/bridge/l2_bridge_processor.go deleted file mode 100644 index 0fb99ad9fa20..000000000000 --- a/indexer/processors/bridge/l2_bridge_processor.go +++ /dev/null @@ -1,195 +0,0 @@ -package bridge - -import ( - "fmt" - "math/big" - - "github.com/ethereum-optimism/optimism/indexer/bigint" - "github.com/ethereum-optimism/optimism/indexer/config" - "github.com/ethereum-optimism/optimism/indexer/database" - "github.com/ethereum-optimism/optimism/indexer/processors/contracts" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/log" -) - -// L2ProcessInitiatedBridgeEvents will query the database for bridge events that have been initiated between -// the specified block range. This covers every part of the multi-layered stack: -// 1. OptimismPortal -// 2. L2CrossDomainMessenger -// 3. L2StandardBridge -func L2ProcessInitiatedBridgeEvents(log log.Logger, db *database.DB, metrics L2Metricer, l2Contracts config.L2Contracts, fromHeight, toHeight *big.Int) error { - // (1) L2ToL1MessagePasser - l2ToL1MPMessagesPassed, err := contracts.L2ToL1MessagePasserMessagePassedEvents(l2Contracts.L2ToL1MessagePasser, db, fromHeight, toHeight) - if err != nil { - return err - } - if len(l2ToL1MPMessagesPassed) > 0 { - log.Info("detected transaction withdrawals", "size", len(l2ToL1MPMessagesPassed)) - } - - withdrawnWEI := bigint.Zero - messagesPassed := make(map[logKey]*contracts.L2ToL1MessagePasserMessagePassed, len(l2ToL1MPMessagesPassed)) - transactionWithdrawals := make([]database.L2TransactionWithdrawal, len(l2ToL1MPMessagesPassed)) - for i := range l2ToL1MPMessagesPassed { - messagePassed := l2ToL1MPMessagesPassed[i] - messagesPassed[logKey{messagePassed.Event.BlockHash, messagePassed.Event.LogIndex}] = &messagePassed - withdrawnWEI = new(big.Int).Add(withdrawnWEI, messagePassed.Tx.Amount) - - transactionWithdrawals[i] = database.L2TransactionWithdrawal{ - WithdrawalHash: messagePassed.WithdrawalHash, - InitiatedL2EventGUID: messagePassed.Event.GUID, - Nonce: messagePassed.Nonce, - GasLimit: messagePassed.GasLimit, - Tx: messagePassed.Tx, - } - } - if len(messagesPassed) > 0 { - if err := db.BridgeTransactions.StoreL2TransactionWithdrawals(transactionWithdrawals); err != nil { - return err - } - - // Convert the withdrawn WEI to ETH - withdrawnETH, _ := bigint.WeiToETH(withdrawnWEI).Float64() - metrics.RecordL2TransactionWithdrawals(len(transactionWithdrawals), withdrawnETH) - } - - // (2) L2CrossDomainMessenger - crossDomainSentMessages, err := contracts.CrossDomainMessengerSentMessageEvents("l2", l2Contracts.L2CrossDomainMessenger, db, fromHeight, toHeight) - if err != nil { - return err - } - if len(crossDomainSentMessages) > 0 { - log.Info("detected sent messages", "size", len(crossDomainSentMessages)) - } - - sentMessages := make(map[logKey]*contracts.CrossDomainMessengerSentMessageEvent, len(crossDomainSentMessages)) - bridgeMessages := make([]database.L2BridgeMessage, len(crossDomainSentMessages)) - for i := range crossDomainSentMessages { - sentMessage := crossDomainSentMessages[i] - sentMessages[logKey{sentMessage.Event.BlockHash, sentMessage.Event.LogIndex}] = &sentMessage - - // extract the withdrawal hash from the previous MessagePassed event - messagePassed, ok := messagesPassed[logKey{sentMessage.Event.BlockHash, sentMessage.Event.LogIndex - 1}] - if !ok { - return fmt.Errorf("expected MessagePassedEvent preceding SentMessage. tx_hash = %s", sentMessage.Event.TransactionHash) - } else if messagePassed.Event.TransactionHash != sentMessage.Event.TransactionHash { - return fmt.Errorf("correlated events tx hash mismatch. message_tx_hash = %s, withdraw_tx_hash = %s", sentMessage.Event.TransactionHash, messagePassed.Event.TransactionHash) - } - - bridgeMessages[i] = database.L2BridgeMessage{TransactionWithdrawalHash: messagePassed.WithdrawalHash, BridgeMessage: sentMessage.BridgeMessage} - } - if len(bridgeMessages) > 0 { - if err := db.BridgeMessages.StoreL2BridgeMessages(bridgeMessages); err != nil { - return err - } - metrics.RecordL2CrossDomainSentMessages(len(bridgeMessages)) - } - - // (3) L2StandardBridge - initiatedBridges, err := contracts.StandardBridgeInitiatedEvents("l2", l2Contracts.L2StandardBridge, db, fromHeight, toHeight) - if err != nil { - return err - } - if len(initiatedBridges) > 0 { - log.Info("detected bridge withdrawals", "size", len(initiatedBridges)) - } - - bridgedTokens := make(map[common.Address]int) - bridgeWithdrawals := make([]database.L2BridgeWithdrawal, len(initiatedBridges)) - for i := range initiatedBridges { - initiatedBridge := initiatedBridges[i] - - // extract the cross domain message hash & withdraw hash from the following events - messagePassed, ok := messagesPassed[logKey{initiatedBridge.Event.BlockHash, initiatedBridge.Event.LogIndex + 1}] - if !ok { - return fmt.Errorf("expected MessagePassed following BridgeInitiated event. tx_hash = %s", initiatedBridge.Event.TransactionHash) - } else if messagePassed.Event.TransactionHash != initiatedBridge.Event.TransactionHash { - return fmt.Errorf("correlated events tx hash mismatch. bridge_tx_hash = %s, withdraw_tx_hash = %s", initiatedBridge.Event.TransactionHash, messagePassed.Event.TransactionHash) - } - - sentMessage, ok := sentMessages[logKey{initiatedBridge.Event.BlockHash, initiatedBridge.Event.LogIndex + 2}] - if !ok { - return fmt.Errorf("expected SentMessage following BridgeInitiated event. tx_hash = %s", initiatedBridge.Event.TransactionHash) - } else if sentMessage.Event.TransactionHash != initiatedBridge.Event.TransactionHash { - return fmt.Errorf("correlated events tx hash mismatch. bridge_tx_hash = %s, message_tx_hash = %s", initiatedBridge.Event.TransactionHash, sentMessage.Event.TransactionHash) - } - - bridgedTokens[initiatedBridge.BridgeTransfer.TokenPair.LocalTokenAddress]++ - - initiatedBridge.BridgeTransfer.CrossDomainMessageHash = &sentMessage.BridgeMessage.MessageHash - bridgeWithdrawals[i] = database.L2BridgeWithdrawal{ - TransactionWithdrawalHash: messagePassed.WithdrawalHash, - BridgeTransfer: initiatedBridge.BridgeTransfer, - } - } - if len(bridgeWithdrawals) > 0 { - if err := db.BridgeTransfers.StoreL2BridgeWithdrawals(bridgeWithdrawals); err != nil { - return err - } - for tokenAddr, size := range bridgedTokens { - metrics.RecordL2InitiatedBridgeTransfers(tokenAddr, size) - } - } - - // a-ok! - return nil -} - -// L2ProcessFinalizedBridgeEvents will query the database for all the finalization markers for all initiated -// bridge events. This covers every part of the multi-layered stack: -// 1. L2CrossDomainMessenger (relayMessage marker) -// 2. L2StandardBridge (no-op, since this is simply a wrapper over the L2CrossDomainMEssenger) -// -// NOTE: Unlike L1, there's no L2ToL1MessagePasser stage since transaction deposits are apart of the block derivation process. -func L2ProcessFinalizedBridgeEvents(log log.Logger, db *database.DB, metrics L2Metricer, l2Contracts config.L2Contracts, fromHeight, toHeight *big.Int) error { - // (1) L2CrossDomainMessenger - crossDomainRelayedMessages, err := contracts.CrossDomainMessengerRelayedMessageEvents("l2", l2Contracts.L2CrossDomainMessenger, db, fromHeight, toHeight) - if err != nil { - return err - } - if len(crossDomainRelayedMessages) > 0 { - log.Info("detected relayed messages", "size", len(crossDomainRelayedMessages)) - } - - for i := range crossDomainRelayedMessages { - relayed := crossDomainRelayedMessages[i] - message, err := db.BridgeMessages.L1BridgeMessage(relayed.MessageHash) - if err != nil { - return err - } else if message == nil { - return fmt.Errorf("missing indexed L1CrossDomainMessager message! tx_hash = %s", relayed.Event.TransactionHash) - } - - if err := db.BridgeMessages.MarkRelayedL1BridgeMessage(relayed.MessageHash, relayed.Event.GUID); err != nil { - return fmt.Errorf("failed to relay cross domain message. tx_hash = %s: %w", relayed.Event.TransactionHash, err) - } - } - if len(crossDomainRelayedMessages) > 0 { - metrics.RecordL2CrossDomainRelayedMessages(len(crossDomainRelayedMessages)) - } - - // (2) L2StandardBridge - // - Nothing actionable on the database. Since the StandardBridge is layered ontop of the - // CrossDomainMessenger, there's no need for any sanity or invariant checks as the previous step - // ensures a relayed message (finalized bridge) can be linked with a sent message (initiated bridge). - finalizedBridges, err := contracts.StandardBridgeFinalizedEvents("l2", l2Contracts.L2StandardBridge, db, fromHeight, toHeight) - if err != nil { - return err - } - - finalizedTokens := make(map[common.Address]int) - for i := range finalizedBridges { - finalizedBridge := finalizedBridges[i] - finalizedTokens[finalizedBridge.BridgeTransfer.TokenPair.LocalTokenAddress]++ - } - if len(finalizedBridges) > 0 { - log.Info("detected finalized bridge deposits", "size", len(finalizedBridges)) - for tokenAddr, size := range finalizedTokens { - metrics.RecordL2FinalizedBridgeTransfers(tokenAddr, size) - } - } - - // a-ok! - return nil -} diff --git a/indexer/processors/bridge/legacy_bridge_processor.go b/indexer/processors/bridge/legacy_bridge_processor.go deleted file mode 100644 index be3612657a99..000000000000 --- a/indexer/processors/bridge/legacy_bridge_processor.go +++ /dev/null @@ -1,396 +0,0 @@ -package bridge - -import ( - "fmt" - "math/big" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/log" - - "github.com/ethereum-optimism/optimism/indexer/bigint" - "github.com/ethereum-optimism/optimism/indexer/config" - "github.com/ethereum-optimism/optimism/indexer/database" - "github.com/ethereum-optimism/optimism/indexer/processors/bridge/ovm1" - "github.com/ethereum-optimism/optimism/indexer/processors/contracts" - - "github.com/ethereum-optimism/optimism/op-chain-ops/crossdomain" - "github.com/ethereum-optimism/optimism/op-service/predeploys" -) - -// Legacy Bridge Initiation - -// LegacyL1ProcessInitiatedBridgeEvents will query the data for bridge events within the specified block range -// according the pre-bedrock protocol. This follows: -// 1. CanonicalTransactionChain -// 2. L1CrossDomainMessenger -// 3. L1StandardBridge -func LegacyL1ProcessInitiatedBridgeEvents(log log.Logger, db *database.DB, metrics L1Metricer, l1Contracts config.L1Contracts, fromHeight, toHeight *big.Int) error { - // (1) CanonicalTransactionChain - ctcTxDepositEvents, err := contracts.LegacyCTCDepositEvents(l1Contracts.LegacyCanonicalTransactionChain, db, fromHeight, toHeight) - if err != nil { - return err - } - if len(ctcTxDepositEvents) > 0 { - log.Info("detected legacy transaction deposits", "size", len(ctcTxDepositEvents)) - } - - mintedWEI := bigint.Zero - ctcTxDeposits := make(map[logKey]*contracts.LegacyCTCDepositEvent, len(ctcTxDepositEvents)) - transactionDeposits := make([]database.L1TransactionDeposit, len(ctcTxDepositEvents)) - for i := range ctcTxDepositEvents { - deposit := ctcTxDepositEvents[i] - ctcTxDeposits[logKey{deposit.Event.BlockHash, deposit.Event.LogIndex}] = &deposit - mintedWEI = new(big.Int).Add(mintedWEI, deposit.Tx.Amount) - - // We re-use the L2 Transaction hash as the source hash to remain consistent in the schema. - transactionDeposits[i] = database.L1TransactionDeposit{ - SourceHash: deposit.TxHash, - L2TransactionHash: deposit.TxHash, - InitiatedL1EventGUID: deposit.Event.GUID, - GasLimit: deposit.GasLimit, - Tx: deposit.Tx, - } - } - if len(ctcTxDepositEvents) > 0 { - if err := db.BridgeTransactions.StoreL1TransactionDeposits(transactionDeposits); err != nil { - return err - } - - mintedETH, _ := bigint.WeiToETH(mintedWEI).Float64() - metrics.RecordL1TransactionDeposits(len(transactionDeposits), mintedETH) - } - - // (2) L1CrossDomainMessenger - crossDomainSentMessages, err := contracts.CrossDomainMessengerSentMessageEvents("l1", l1Contracts.L1CrossDomainMessengerProxy, db, fromHeight, toHeight) - if err != nil { - return err - } - if len(crossDomainSentMessages) > 0 { - log.Info("detected legacy sent messages", "size", len(crossDomainSentMessages)) - } - - sentMessages := make(map[logKey]*contracts.CrossDomainMessengerSentMessageEvent, len(crossDomainSentMessages)) - bridgeMessages := make([]database.L1BridgeMessage, len(crossDomainSentMessages)) - for i := range crossDomainSentMessages { - sentMessage := crossDomainSentMessages[i] - sentMessages[logKey{sentMessage.Event.BlockHash, sentMessage.Event.LogIndex}] = &sentMessage - - // extract the deposit hash from the previous TransactionDepositedEvent - ctcTxDeposit, ok := ctcTxDeposits[logKey{sentMessage.Event.BlockHash, sentMessage.Event.LogIndex - 1}] - if !ok { - return fmt.Errorf("expected TransactionEnqueued preceding SentMessage event. tx_hash = %s", sentMessage.Event.TransactionHash) - } else if ctcTxDeposit.Event.TransactionHash != sentMessage.Event.TransactionHash { - return fmt.Errorf("correlated events tx hash mismatch. deposit_tx_hash = %s, message_tx_hash = %s", ctcTxDeposit.Event.TransactionHash, sentMessage.Event.TransactionHash) - } - - bridgeMessages[i] = database.L1BridgeMessage{TransactionSourceHash: ctcTxDeposit.TxHash, BridgeMessage: sentMessage.BridgeMessage} - } - if len(bridgeMessages) > 0 { - if err := db.BridgeMessages.StoreL1BridgeMessages(bridgeMessages); err != nil { - return err - } - metrics.RecordL1CrossDomainSentMessages(len(bridgeMessages)) - } - - // (3) L1StandardBridge - initiatedBridges, err := contracts.L1StandardBridgeLegacyDepositInitiatedEvents(l1Contracts.L1StandardBridgeProxy, db, fromHeight, toHeight) - if err != nil { - return err - } - if len(initiatedBridges) > 0 { - log.Info("detected iegacy bridge deposits", "size", len(initiatedBridges)) - } - - bridgedTokens := make(map[common.Address]int) - bridgeDeposits := make([]database.L1BridgeDeposit, len(initiatedBridges)) - for i := range initiatedBridges { - initiatedBridge := initiatedBridges[i] - - // extract the cross domain message hash & deposit source hash from the following events - // Unlike bedrock, the bridge events are emitted AFTER sending the cross domain message - // - Event Flow: TransactionEnqueued -> SentMessage -> DepositInitiated - sentMessage, ok := sentMessages[logKey{initiatedBridge.Event.BlockHash, initiatedBridge.Event.LogIndex - 1}] - if !ok { - return fmt.Errorf("expected SentMessage preceding DepositInitiated event. tx_hash = %s", initiatedBridge.Event.TransactionHash) - } else if sentMessage.Event.TransactionHash != initiatedBridge.Event.TransactionHash { - return fmt.Errorf("correlated events tx hash mismatch. bridge_tx_hash = %s, message_tx_hash = %s", initiatedBridge.Event.TransactionHash, sentMessage.Event.TransactionHash) - } - - ctcTxDeposit, ok := ctcTxDeposits[logKey{initiatedBridge.Event.BlockHash, initiatedBridge.Event.LogIndex - 2}] - if !ok { - return fmt.Errorf("expected TransactionEnqueued preceding BridgeInitiated event. tx_hash = %s", initiatedBridge.Event.TransactionHash) - } else if ctcTxDeposit.Event.TransactionHash != initiatedBridge.Event.TransactionHash { - return fmt.Errorf("correlated events tx hash mismatch. bridge_tx_hash = %s, deposit_tx_hash = %s", initiatedBridge.Event.TransactionHash, ctcTxDeposit.Event.TransactionHash) - } - - initiatedBridge.BridgeTransfer.CrossDomainMessageHash = &sentMessage.BridgeMessage.MessageHash - bridgedTokens[initiatedBridge.BridgeTransfer.TokenPair.LocalTokenAddress]++ - bridgeDeposits[i] = database.L1BridgeDeposit{ - TransactionSourceHash: ctcTxDeposit.TxHash, - BridgeTransfer: initiatedBridge.BridgeTransfer, - } - } - if len(bridgeDeposits) > 0 { - if err := db.BridgeTransfers.StoreL1BridgeDeposits(bridgeDeposits); err != nil { - return err - } - for tokenAddr, size := range bridgedTokens { - metrics.RecordL1InitiatedBridgeTransfers(tokenAddr, size) - } - } - - // a-ok! - return nil -} - -// LegacyL2ProcessInitiatedBridgeEvents will query the data for bridge events within the specified block range -// according the pre-bedrock protocol. This follows: -// 1. L2CrossDomainMessenger - The LegacyMessagePasser contract cannot be used as entrypoint to bridge transactions from L2. The protocol -// only allows the L2CrossDomainMessenger as the sole sender when relaying a bridged message. -// 2. L2StandardBridge -func LegacyL2ProcessInitiatedBridgeEvents(log log.Logger, db *database.DB, metrics L2Metricer, preset int, l2Contracts config.L2Contracts, fromHeight, toHeight *big.Int) error { - // (1) L2CrossDomainMessenger - crossDomainSentMessages, err := contracts.CrossDomainMessengerSentMessageEvents("l2", l2Contracts.L2CrossDomainMessenger, db, fromHeight, toHeight) - if err != nil { - return err - } - if len(crossDomainSentMessages) > 0 { - log.Info("detected legacy transaction withdrawals (via L2CrossDomainMessenger)", "size", len(crossDomainSentMessages)) - } - - type sentMessageEvent struct { - *contracts.CrossDomainMessengerSentMessageEvent - WithdrawalHash common.Hash - } - - withdrawnWEI := bigint.Zero - sentMessages := make(map[logKey]sentMessageEvent, len(crossDomainSentMessages)) - bridgeMessages := make([]database.L2BridgeMessage, len(crossDomainSentMessages)) - versionedMessageHashes := make([]database.L2BridgeMessageVersionedMessageHash, len(crossDomainSentMessages)) - transactionWithdrawals := make([]database.L2TransactionWithdrawal, len(crossDomainSentMessages)) - for i := range crossDomainSentMessages { - sentMessage := crossDomainSentMessages[i] - withdrawnWEI = new(big.Int).Add(withdrawnWEI, sentMessage.BridgeMessage.Tx.Amount) - - // Since these message can be relayed in bedrock, we utilize the migrated withdrawal hash - // and also store the v1 version of the message hash such that the bedrock l1 finalization - // processor works as expected. There will be some entries relayed pre-bedrock that will not - // require the entry but we'll store it anyways as a large % of these withdrawals are not relayed - // pre-bedrock. - - v1MessageHash, err := LegacyBridgeMessageV1MessageHash(&sentMessage.BridgeMessage) - if err != nil { - return fmt.Errorf("failed to compute versioned message hash: %w", err) - } - - withdrawalHash, err := LegacyBridgeMessageWithdrawalHash(preset, &sentMessage.BridgeMessage) - if err != nil { - return fmt.Errorf("failed to construct migrated withdrawal hash: %w", err) - } - - transactionWithdrawals[i] = database.L2TransactionWithdrawal{ - WithdrawalHash: withdrawalHash, - InitiatedL2EventGUID: sentMessage.Event.GUID, - Nonce: sentMessage.BridgeMessage.Nonce, - GasLimit: sentMessage.BridgeMessage.GasLimit, - Tx: database.Transaction{ - FromAddress: sentMessage.BridgeMessage.Tx.FromAddress, - ToAddress: sentMessage.BridgeMessage.Tx.ToAddress, - Amount: bigint.Zero, - Data: sentMessage.BridgeMessage.Tx.Data, - Timestamp: sentMessage.Event.Timestamp, - }, - } - - sentMessages[logKey{sentMessage.Event.BlockHash, sentMessage.Event.LogIndex}] = sentMessageEvent{&sentMessage, withdrawalHash} - bridgeMessages[i] = database.L2BridgeMessage{TransactionWithdrawalHash: withdrawalHash, BridgeMessage: sentMessage.BridgeMessage} - versionedMessageHashes[i] = database.L2BridgeMessageVersionedMessageHash{MessageHash: sentMessage.BridgeMessage.MessageHash, V1MessageHash: v1MessageHash} - } - if len(bridgeMessages) > 0 { - if err := db.BridgeTransactions.StoreL2TransactionWithdrawals(transactionWithdrawals); err != nil { - return err - } - if err := db.BridgeMessages.StoreL2BridgeMessages(bridgeMessages); err != nil { - return err - } - if err := db.BridgeMessages.StoreL2BridgeMessageV1MessageHashes(versionedMessageHashes); err != nil { - return err - } - - withdrawnETH, _ := bigint.WeiToETH(withdrawnWEI).Float64() - metrics.RecordL2TransactionWithdrawals(len(transactionWithdrawals), withdrawnETH) - metrics.RecordL2CrossDomainSentMessages(len(bridgeMessages)) - } - - // (2) L2StandardBridge - initiatedBridges, err := contracts.L2StandardBridgeLegacyWithdrawalInitiatedEvents(l2Contracts.L2StandardBridge, db, fromHeight, toHeight) - if err != nil { - return err - } - if len(initiatedBridges) > 0 { - log.Info("detected legacy bridge withdrawals", "size", len(initiatedBridges)) - } - - bridgedTokens := make(map[common.Address]int) - l2BridgeWithdrawals := make([]database.L2BridgeWithdrawal, len(initiatedBridges)) - for i := range initiatedBridges { - initiatedBridge := initiatedBridges[i] - - // extract the cross domain message hash & deposit source hash from the following events - // Unlike bedrock, the bridge events are emitted AFTER sending the cross domain message - // - Event Flow: TransactionEnqueued -> SentMessage -> DepositInitiated - sentMessage, ok := sentMessages[logKey{initiatedBridge.Event.BlockHash, initiatedBridge.Event.LogIndex - 1}] - if !ok { - return fmt.Errorf("expected SentMessage preceding BridgeInitiated event. tx_hash = %s", initiatedBridge.Event.TransactionHash) - } else if sentMessage.Event.TransactionHash != initiatedBridge.Event.TransactionHash { - return fmt.Errorf("correlated events tx hash mismatch. bridge_tx_hash = %s, message_tx_hash = %s", initiatedBridge.Event.TransactionHash, sentMessage.Event.TransactionHash) - } - - bridgedTokens[initiatedBridge.BridgeTransfer.TokenPair.LocalTokenAddress]++ - initiatedBridge.BridgeTransfer.CrossDomainMessageHash = &sentMessage.BridgeMessage.MessageHash - l2BridgeWithdrawals[i] = database.L2BridgeWithdrawal{ - TransactionWithdrawalHash: sentMessage.WithdrawalHash, - BridgeTransfer: initiatedBridge.BridgeTransfer, - } - } - if len(l2BridgeWithdrawals) > 0 { - if err := db.BridgeTransfers.StoreL2BridgeWithdrawals(l2BridgeWithdrawals); err != nil { - return err - } - for tokenAddr, size := range bridgedTokens { - metrics.RecordL2InitiatedBridgeTransfers(tokenAddr, size) - } - } - - // a-ok - return nil -} - -// Legacy Bridge Finalization - -// LegacyL1ProcessFinalizedBridgeEvents will query for bridge events within the specified block range -// according to the pre-bedrock protocol. This follows: -// 1. L1CrossDomainMessenger -// 2. L1StandardBridge -func LegacyL1ProcessFinalizedBridgeEvents(log log.Logger, db *database.DB, metrics L1Metricer, l1Contracts config.L1Contracts, fromHeight, toHeight *big.Int) error { - // (1) L1CrossDomainMessenger -> This is the root-most contract from which bridge events are finalized since withdrawals must be initiated from the - // L2CrossDomainMessenger. Since there's no two-step withdrawal process, we mark the transaction as proven/finalized in the same step - crossDomainRelayedMessages, err := contracts.CrossDomainMessengerRelayedMessageEvents("l1", l1Contracts.L1CrossDomainMessengerProxy, db, fromHeight, toHeight) - if err != nil { - return err - } - if len(crossDomainRelayedMessages) > 0 { - log.Info("detected relayed messages", "size", len(crossDomainRelayedMessages)) - } - - skippedOVM1Messages := 0 - for i := range crossDomainRelayedMessages { - relayedMessage := crossDomainRelayedMessages[i] - message, err := db.BridgeMessages.L2BridgeMessage(relayedMessage.MessageHash) - if err != nil { - return err - } else if message == nil { - if _, ok := ovm1.L1RelayedMessages[relayedMessage.MessageHash]; ok { - skippedOVM1Messages++ - continue - } - - return fmt.Errorf("missing indexed L2CrossDomainMessenger message! tx_hash %s", relayedMessage.Event.TransactionHash.String()) - } - - if err := db.BridgeMessages.MarkRelayedL2BridgeMessage(relayedMessage.MessageHash, relayedMessage.Event.GUID); err != nil { - return fmt.Errorf("failed to relay cross domain message. tx_hash = %s: %w", relayedMessage.Event.TransactionHash, err) - } - - // Mark the associated tx withdrawal as proven/finalized with the same event. - if err := db.BridgeTransactions.MarkL2TransactionWithdrawalProvenEvent(message.TransactionWithdrawalHash, relayedMessage.Event.GUID); err != nil { - return fmt.Errorf("failed to mark withdrawal as proven. tx_hash = %s: %w", relayedMessage.Event.TransactionHash, err) - } - if err := db.BridgeTransactions.MarkL2TransactionWithdrawalFinalizedEvent(message.TransactionWithdrawalHash, relayedMessage.Event.GUID, true); err != nil { - return fmt.Errorf("failed to mark withdrawal as finalized. tx_hash = %s: %w", relayedMessage.Event.TransactionHash, err) - } - } - if len(crossDomainRelayedMessages) > 0 { - metrics.RecordL1CrossDomainRelayedMessages(len(crossDomainRelayedMessages)) - if skippedOVM1Messages > 0 { // Logged as a warning just for visibility - metrics.RecordL1SkippedOVM1CrossDomainRelayedMessages(skippedOVM1Messages) - log.Info("skipped OVM 1.0 relayed L2CrossDomainMessenger withdrawals", "size", skippedOVM1Messages) - } - } - - // (2) L1StandardBridge - // - Nothing actionable on the database. Since the StandardBridge is layered ontop of the - // CrossDomainMessenger, there's no need for any sanity or invariant checks as the previous step - // ensures a relayed message (finalized bridge) can be linked with a sent message (initiated bridge). - - // - NOTE: Ignoring metrics for pre-bedrock transfers - - // a-ok! - return nil -} - -// LegacyL2ProcessFinalizedBridgeEvents will query for bridge events within the specified block range -// according to the pre-bedrock protocol. This follows: -// 1. L2CrossDomainMessenger -// 2. L2StandardBridge -func LegacyL2ProcessFinalizedBridgeEvents(log log.Logger, db *database.DB, metrics L2Metricer, l2Contracts config.L2Contracts, fromHeight, toHeight *big.Int) error { - // (1) L2CrossDomainMessenger - crossDomainRelayedMessages, err := contracts.CrossDomainMessengerRelayedMessageEvents("l2", l2Contracts.L2CrossDomainMessenger, db, fromHeight, toHeight) - if err != nil { - return err - } - if len(crossDomainRelayedMessages) > 0 { - log.Info("detected relayed legacy messages", "size", len(crossDomainRelayedMessages)) - } - - for i := range crossDomainRelayedMessages { - relayedMessage := crossDomainRelayedMessages[i] - message, err := db.BridgeMessages.L1BridgeMessage(relayedMessage.MessageHash) - if err != nil { - return err - } else if message == nil { - return fmt.Errorf("missing indexed L1CrossDomainMessager message! tx_hash = %s", relayedMessage.Event.TransactionHash) - } - - if err := db.BridgeMessages.MarkRelayedL1BridgeMessage(relayedMessage.MessageHash, relayedMessage.Event.GUID); err != nil { - return fmt.Errorf("failed to relay cross domain message: %w", err) - } - } - if len(crossDomainRelayedMessages) > 0 { - metrics.RecordL2CrossDomainRelayedMessages(len(crossDomainRelayedMessages)) - } - - // (2) L2StandardBridge - // - Nothing actionable on the database. Since the StandardBridge is layered ontop of the - // CrossDomainMessenger, there's no need for any sanity or invariant checks as the previous step - // ensures a relayed message (finalized bridge) can be linked with a sent message (initiated bridge). - - // - NOTE: Ignoring metrics for pre-bedrock transfers - - // a-ok! - return nil -} - -// Utils - -func LegacyBridgeMessageWithdrawalHash(preset int, msg *database.BridgeMessage) (common.Hash, error) { - l1Cdm := config.Presets[preset].ChainConfig.L1Contracts.L1CrossDomainMessengerProxy - legacyWithdrawal := crossdomain.NewLegacyWithdrawal(predeploys.L2CrossDomainMessengerAddr, msg.Tx.ToAddress, msg.Tx.FromAddress, msg.Tx.Data, msg.Nonce) - migratedWithdrawal, err := crossdomain.MigrateWithdrawal(legacyWithdrawal, &l1Cdm, big.NewInt(int64(preset))) - if err != nil { - return common.Hash{}, err - } - - return migratedWithdrawal.Hash() -} - -func LegacyBridgeMessageV1MessageHash(msg *database.BridgeMessage) (common.Hash, error) { - legacyWithdrawal := crossdomain.NewLegacyWithdrawal(predeploys.L2CrossDomainMessengerAddr, msg.Tx.ToAddress, msg.Tx.FromAddress, msg.Tx.Data, msg.Nonce) - value, err := legacyWithdrawal.Value() - if err != nil { - return common.Hash{}, fmt.Errorf("failed to extract ETH value from legacy bridge message: %w", err) - } - - // Note: GasLimit is always zero. Only the GasLimit for the withdrawal transaction was migrated - return crossdomain.HashCrossDomainMessageV1(msg.Nonce, msg.Tx.FromAddress, msg.Tx.ToAddress, value, new(big.Int), msg.Tx.Data) -} diff --git a/indexer/processors/bridge/legacy_bridge_processor_test.go b/indexer/processors/bridge/legacy_bridge_processor_test.go deleted file mode 100644 index fd02df309acf..000000000000 --- a/indexer/processors/bridge/legacy_bridge_processor_test.go +++ /dev/null @@ -1,50 +0,0 @@ -package bridge - -import ( - "math/big" - "testing" - - "github.com/ethereum-optimism/optimism/indexer/bigint" - "github.com/ethereum-optimism/optimism/indexer/database" - - "github.com/ethereum/go-ethereum/common" - - "github.com/stretchr/testify/require" -) - -func TestLegacyWithdrawalAndMessageHash(t *testing.T) { - // OP Mainnet hashes to also check for - // - since the message hash doesn't depend on the preset, we only need to check for the withdrawal hash - - expectedWithdrawalHash := common.HexToHash("0x9c0bc28a77328a405f21d51a32d32f038ebf7ce70e377ca48b2cd194ec024f15") - msg := database.BridgeMessage{ - Nonce: big.NewInt(100180), - GasLimit: bigint.Zero, - Tx: database.Transaction{ - FromAddress: common.HexToAddress("0x4200000000000000000000000000000000000010"), - ToAddress: common.HexToAddress("0x99c9fc46f92e8a1c0dec1b1747d010903e884be1"), - Amount: bigint.Zero, - Data: common.FromHex("0x1532ec34000000000000000000000000094a9009fe93a85658e4b49604fd8177620f8cd8000000000000000000000000094a9009fe93a85658e4b49604fd8177620f8cd8000000000000000000000000000000000000000000000000013abb2a2774ab0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000"), - }, - } - - hash, err := LegacyBridgeMessageWithdrawalHash(10, &msg) - require.NoError(t, err) - require.Equal(t, expectedWithdrawalHash, hash) - - expectedWithdrawalHash = common.HexToHash("0xeb1dd5ead967ad6860d64407413f86e50330ab123ca9adf2768145524c3f5323") - msg = database.BridgeMessage{ - Nonce: big.NewInt(100618), - GasLimit: bigint.Zero, - Tx: database.Transaction{ - FromAddress: common.HexToAddress("0x4200000000000000000000000000000000000010"), - ToAddress: common.HexToAddress("0x99c9fc46f92e8a1c0dec1b1747d010903e884be1"), - Amount: bigint.Zero, - Data: common.FromHex("0xa9f9e67500000000000000000000000028e1de268616a6ba0de59717ac5547589e6bb1180000000000000000000000003ef241d9ae02f2253d8a1bf0b35d68eab9925b400000000000000000000000003e579180cf01f0e2abf6ff4d566b7891fbf9b8680000000000000000000000003e579180cf01f0e2abf6ff4d566b7891fbf9b868000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000"), - }, - } - - hash, err = LegacyBridgeMessageWithdrawalHash(10, &msg) - require.NoError(t, err) - require.Equal(t, expectedWithdrawalHash, hash) -} diff --git a/indexer/processors/bridge/metrics.go b/indexer/processors/bridge/metrics.go deleted file mode 100644 index 564658700272..000000000000 --- a/indexer/processors/bridge/metrics.go +++ /dev/null @@ -1,289 +0,0 @@ -package bridge - -import ( - "math/big" - - "github.com/ethereum-optimism/optimism/op-service/metrics" - "github.com/ethereum/go-ethereum/common" - - "github.com/prometheus/client_golang/prometheus" -) - -var ( - MetricsNamespace string = "op_indexer_bridge" -) - -type L1Metricer interface { - RecordL1Interval() (done func(err error)) - RecordL1LatestHeight(height *big.Int) - RecordL1LatestFinalizedHeight(height *big.Int) - - RecordL1TransactionDeposits(size int, mintedETH float64) - RecordL1ProvenWithdrawals(size int) - RecordL1FinalizedWithdrawals(size int) - - RecordL1CrossDomainSentMessages(size int) - RecordL1CrossDomainRelayedMessages(size int) - - RecordL1SkippedOVM1ProvenWithdrawals(size int) - RecordL1SkippedOVM1FinalizedWithdrawals(size int) - RecordL1SkippedOVM1CrossDomainRelayedMessages(size int) - - RecordL1InitiatedBridgeTransfers(token common.Address, size int) - RecordL1FinalizedBridgeTransfers(token common.Address, size int) -} - -type L2Metricer interface { - RecordL2Interval() (done func(err error)) - RecordL2LatestHeight(height *big.Int) - RecordL2LatestFinalizedHeight(height *big.Int) - - RecordL2TransactionWithdrawals(size int, withdrawnETH float64) - - RecordL2CrossDomainSentMessages(size int) - RecordL2CrossDomainRelayedMessages(size int) - - RecordL2InitiatedBridgeTransfers(token common.Address, size int) - RecordL2FinalizedBridgeTransfers(token common.Address, size int) -} - -type Metricer interface { - L1Metricer - L2Metricer -} - -type bridgeMetrics struct { - latestHeight *prometheus.GaugeVec - - intervalTick *prometheus.CounterVec - intervalDuration *prometheus.HistogramVec - intervalFailures *prometheus.CounterVec - - txDeposits prometheus.Counter - txWithdrawals prometheus.Counter - provenWithdrawals prometheus.Counter - finalizedWithdrawals prometheus.Counter - - txMintedETH prometheus.Counter - txWithdrawnETH prometheus.Counter - - sentMessages *prometheus.CounterVec - relayedMessages *prometheus.CounterVec - - skippedOVM1Withdrawals *prometheus.CounterVec - skippedOVM1RelayedMessages prometheus.Counter - - initiatedBridgeTransfers *prometheus.CounterVec - finalizedBridgeTransfers *prometheus.CounterVec -} - -func NewMetrics(registry *prometheus.Registry) Metricer { - factory := metrics.With(registry) - return &bridgeMetrics{ - intervalTick: factory.NewCounterVec(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "intervals_total", - Help: "number of times processing loop has run", - }, []string{ - "chain", - }), - intervalDuration: factory.NewHistogramVec(prometheus.HistogramOpts{ - Namespace: MetricsNamespace, - Name: "interval_seconds", - Help: "duration elapsed in the processing loop", - }, []string{ - "chain", - }), - intervalFailures: factory.NewCounterVec(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "interval_failures_total", - Help: "number of failures encountered", - }, []string{ - "chain", - }), - latestHeight: factory.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "height", - Help: "the latest processed l1 block height", - }, []string{ - "chain", - "kind", - }), - txDeposits: factory.NewCounter(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "tx_deposits", - Help: "number of processed transactions deposited from l1", - }), - txMintedETH: factory.NewCounter(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "tx_minted_eth", - Help: "amount of eth bridged from l1", - }), - txWithdrawals: factory.NewCounter(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "tx_withdrawals", - Help: "number of initiated transaction withdrawals from l2", - }), - txWithdrawnETH: factory.NewCounter(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "tx_withdrawn_eth", - Help: "amount of eth withdrawn from l2", - }), - provenWithdrawals: factory.NewCounter(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "proven_withdrawals", - Help: "number of proven tx withdrawals on l1", - }), - finalizedWithdrawals: factory.NewCounter(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "finalized_withdrawals", - Help: "number of finalized tx withdrawals on l1", - }), - sentMessages: factory.NewCounterVec(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "sent_messages", - Help: "number of bridged messages between l1 and l2", - }, []string{ - "chain", - }), - relayedMessages: factory.NewCounterVec(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "relayed_messages", - Help: "number of relayed messages between l1 and l2", - }, []string{ - "chain", - }), - skippedOVM1Withdrawals: factory.NewCounterVec(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "skipped_ovm1_withdrawals", - Help: "number of skipped ovm 1.0 withdrawals on l1 (proven|finalized)", - }, []string{ - "stage", - }), - skippedOVM1RelayedMessages: factory.NewCounter(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "skipped_ovm1_relayed_messages", - Help: "number of skipped ovm 1.0 relayed messages on l1", - }), - initiatedBridgeTransfers: factory.NewCounterVec(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "initiated_token_transfers", - Help: "number of bridged tokens between l1 and l2", - }, []string{ - "chain", - "token_address", - }), - finalizedBridgeTransfers: factory.NewCounterVec(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "finalized_token_transfers", - Help: "number of finalized token transfers between l1 and l2", - }, []string{ - "chain", - "token_address", - }), - } -} - -// L1Metricer - -func (m *bridgeMetrics) RecordL1Interval() func(error) { - m.intervalTick.WithLabelValues("l1").Inc() - timer := prometheus.NewTimer(m.intervalDuration.WithLabelValues("l1")) - return func(err error) { - timer.ObserveDuration() - if err != nil { - m.intervalFailures.WithLabelValues("l1").Inc() - } - } -} - -func (m *bridgeMetrics) RecordL1LatestHeight(height *big.Int) { - m.latestHeight.WithLabelValues("l1", "initiated").Set(float64(height.Uint64())) -} - -func (m *bridgeMetrics) RecordL1LatestFinalizedHeight(height *big.Int) { - m.latestHeight.WithLabelValues("l1", "finalized").Set(float64(height.Uint64())) -} - -func (m *bridgeMetrics) RecordL1TransactionDeposits(size int, mintedETH float64) { - m.txDeposits.Add(float64(size)) - m.txMintedETH.Add(mintedETH) -} - -func (m *bridgeMetrics) RecordL1ProvenWithdrawals(size int) { - m.provenWithdrawals.Add(float64(size)) -} - -func (m *bridgeMetrics) RecordL1FinalizedWithdrawals(size int) { - m.finalizedWithdrawals.Add(float64(size)) -} - -func (m *bridgeMetrics) RecordL1CrossDomainSentMessages(size int) { - m.sentMessages.WithLabelValues("l1").Add(float64(size)) -} - -func (m *bridgeMetrics) RecordL1CrossDomainRelayedMessages(size int) { - m.relayedMessages.WithLabelValues("l1").Add(float64(size)) -} - -func (m *bridgeMetrics) RecordL1SkippedOVM1ProvenWithdrawals(size int) { - m.skippedOVM1Withdrawals.WithLabelValues("proven").Add(float64(size)) -} - -func (m *bridgeMetrics) RecordL1SkippedOVM1FinalizedWithdrawals(size int) { - m.skippedOVM1Withdrawals.WithLabelValues("finalized").Add(float64(size)) -} - -func (m *bridgeMetrics) RecordL1SkippedOVM1CrossDomainRelayedMessages(size int) { - m.skippedOVM1RelayedMessages.Add(float64(size)) -} - -func (m *bridgeMetrics) RecordL1InitiatedBridgeTransfers(tokenAddr common.Address, size int) { - m.initiatedBridgeTransfers.WithLabelValues("l1", tokenAddr.String()).Add(float64(size)) -} - -func (m *bridgeMetrics) RecordL1FinalizedBridgeTransfers(tokenAddr common.Address, size int) { - m.finalizedBridgeTransfers.WithLabelValues("l1", tokenAddr.String()).Add(float64(size)) -} - -// L2Metricer - -func (m *bridgeMetrics) RecordL2Interval() func(error) { - m.intervalTick.WithLabelValues("l2").Inc() - timer := prometheus.NewTimer(m.intervalDuration.WithLabelValues("l2")) - return func(err error) { - timer.ObserveDuration() - if err != nil { - m.intervalFailures.WithLabelValues("l2").Inc() - } - } -} - -func (m *bridgeMetrics) RecordL2LatestHeight(height *big.Int) { - m.latestHeight.WithLabelValues("l2", "initiated").Set(float64(height.Uint64())) -} - -func (m *bridgeMetrics) RecordL2LatestFinalizedHeight(height *big.Int) { - m.latestHeight.WithLabelValues("l2", "finalized").Set(float64(height.Uint64())) -} - -func (m *bridgeMetrics) RecordL2TransactionWithdrawals(size int, withdrawnETH float64) { - m.txWithdrawals.Add(float64(size)) - m.txWithdrawnETH.Add(withdrawnETH) -} - -func (m *bridgeMetrics) RecordL2CrossDomainSentMessages(size int) { - m.sentMessages.WithLabelValues("l2").Add(float64(size)) -} - -func (m *bridgeMetrics) RecordL2CrossDomainRelayedMessages(size int) { - m.relayedMessages.WithLabelValues("l2").Add(float64(size)) -} - -func (m *bridgeMetrics) RecordL2InitiatedBridgeTransfers(tokenAddr common.Address, size int) { - m.initiatedBridgeTransfers.WithLabelValues("l2", tokenAddr.String()).Add(float64(size)) -} - -func (m *bridgeMetrics) RecordL2FinalizedBridgeTransfers(tokenAddr common.Address, size int) { - m.finalizedBridgeTransfers.WithLabelValues("l2", tokenAddr.String()).Add(float64(size)) -} diff --git a/indexer/processors/bridge/ovm1/OVM1Withdrawals.csv b/indexer/processors/bridge/ovm1/OVM1Withdrawals.csv deleted file mode 100644 index 20e6a9d26d38..000000000000 --- a/indexer/processors/bridge/ovm1/OVM1Withdrawals.csv +++ /dev/null @@ -1,11311 +0,0 @@ -message_nonce,target,sender,data,relay_tx_hash,relay_timestamp,relay_message_version,post_regenesis_relay -54,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b2317a30fbb53f328cc11324ab37337a28e73b84000000000000000000000000b2317a30fbb53f328cc11324ab37337a28e73b84000000000000000000000000000000000000000000000000001ff973cafa800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -55,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000024e6cc41da6081bda289e6f589825f9ee7b00b200000000000000000000000000000000000000000000000041dedad6365b4017f,,,1,true -59,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000078edd760ff5b5b4604fb338d3cf7b6d5355c7ec00000000000000000000000000000000000000000000000580b5a096b8ce545d,,,1,true -64,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000007244a3012d4363249326997f57909b61b6f5805c00000000000000000000000000000000000000000000000019c541b06cfb2524,,,1,true -92,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000fb6351b09a52db13d9255caaf0a12aff16ad973f000000000000000000000000000000000000000000000003b6c46a04ba030000,,,1,true -94,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c3bbf6bfe155b1444d15a585ad1bea862ea9e29a000000000000000000000000c3bbf6bfe155b1444d15a585ad1bea862ea9e29a0000000000000000000000000000000000000000000000000000999c6cd7580000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -96,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d16d160ff95e492371eac5da4bf255806c088990000000000000000000000000000000000000000000000001668140a182aa8000,0x7da33b3858b471a78e8f32ff11bfaf207c7cf9966668d735e520482c90bcb410,2022-03-15 06:26:18.000 UTC,0,true -100,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000965555ae227348c6df04562805a538a395c42703000000000000000000000000000000000000000000000002ab7b260ff3fd0000,,,1,true -106,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000008a8ea94f6e6fb36a863f63735ee7d1b5f03ea8160000000000000000000000000000000000000000000000056bc75e2d63100000,,,1,true -108,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000375c4952dfe5d5f0eae142f73cf8138ad496a722000000000000000000000000375c4952dfe5d5f0eae142f73cf8138ad496a722000000000000000000000000000000000000000000000000004380663abb800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -112,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d15472d58e1bf8fbfa4a9f87c5f3d4108d965b8f0000000000000000000000000000000000000000000000061f7c830b5c31981c,0xf71a79bb5601b4a889f8bc9df0135d59e4d197c8ccbb3585763a2a25bb6d54a7,2022-01-29 10:28:18.000 UTC,0,true -113,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d15472d58e1bf8fbfa4a9f87c5f3d4108d965b8f0000000000000000000000000000000000000000000000097f78f7ab6d34819f,0xaf946677090eb896aa8f7dc7887c22e86b1bbd8b951810efd615a31805bfcbb8,2022-01-29 10:26:21.000 UTC,0,true -122,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000088b74128df7cb82eb7c2167e89946f83ffc907e90000000000000000000000000000000000000000000000004bf720dbaf1d8000,,,1,true -127,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000754bdb78a3c01afc52f96f1982d04bc181ab0c730000000000000000000000000000000000000000000000000e35fa931a000000,,,1,true -134,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000005f45f8296be3f38119d0c56ad339f6bf66154b9b000000000000000000000000000000000000000000000000858cdd756176e000,,,1,true -138,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000c8462eeeed1fe256c62f89678ebd6dcc1b04690e000000000000000000000000000000000000000000000001fd78d0905cf5b4d4,,,1,true -141,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000e39fef30d17b45e7789812234ac4efc803ee96a8000000000000000000000000000000000000000000000002cf03207879168000,,,1,true -142,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000bc07f994bd3d83cddd732bc50b57a810036ddf30000000000000000000000000bc07f994bd3d83cddd732bc50b57a810036ddf30000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -143,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f196bba501bd8b6bfbe230dd6db39a93c72cb4f8000000000000000000000000f196bba501bd8b6bfbe230dd6db39a93c72cb4f80000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -149,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59900000000000000000000000068f180fcce6836688e9084f035309e29bf0a2095000000000000000000000000bc07f994bd3d83cddd732bc50b57a810036ddf30000000000000000000000000bc07f994bd3d83cddd732bc50b57a810036ddf3000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -158,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000007c1908d49266ba2999c41b07b0895c33821f53a9000000000000000000000000000000000000000000000066ffcbfd5e5a300000,0xf535c5a9b784c3b17dc2a39cc94af42b017d5d648769dcf26b5041905d90a8d9,2022-01-25 02:16:14.000 UTC,0,true -160,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000399bbde115cb626d8dafaf2e79a1373c96fc3dca000000000000000000000000399bbde115cb626d8dafaf2e79a1373c96fc3dca00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -163,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7f4a04c736cc1c5857231417e6cb8da9cadbec7000000000000000000000000d7f4a04c736cc1c5857231417e6cb8da9cadbec7000000000000000000000000000000000000000000000000001930514375200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -165,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000abe26faee77419897090bc4c5a112d463443a662000000000000000000000000abe26faee77419897090bc4c5a112d463443a662000000000000000000000000000000000000000000000000000051dac207a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -167,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d0dff694dafd006a955ca2fce7a018d3aaac08f2000000000000000000000000d0dff694dafd006a955ca2fce7a018d3aaac08f20000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -169,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000abe3bf5043ed0833d3da5148cd58d0f946891e61000000000000000000000000abe3bf5043ed0833d3da5148cd58d0f946891e610000000000000000000000000000000000000000000000000dde1037c52af00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -170,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000019ac702381fdf8b63b04a990fb39e7bde92c97b000000000000000000000000019ac702381fdf8b63b04a990fb39e7bde92c97b0000000000000000000000000000000000000000000000000000ffcb9e57d400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -174,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ab91a2449ff8e2836c02ca03a496bcef69d99f88000000000000000000000000ab91a2449ff8e2836c02ca03a496bcef69d99f880000000000000000000000000000000000000000000000000021c0331d5dc00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -176,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000c8462eeeed1fe256c62f89678ebd6dcc1b04690e000000000000000000000000000000000000000000000000b8156773856431aa,,,1,true -177,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e4569a42140eeb4ff9c31fea691fce2b6f974481000000000000000000000000e4569a42140eeb4ff9c31fea691fce2b6f974481000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -178,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005fe30b7c0ed489493a42a8bc43b8a73ca72f67350000000000000000000000005fe30b7c0ed489493a42a8bc43b8a73ca72f6735000000000000000000000000000000000000000000000000001ff973cafa800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -181,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b04336a8d37b7b1edc5db0b8f46918160df14ba2000000000000000000000000b04336a8d37b7b1edc5db0b8f46918160df14ba2000000000000000000000000000000000000000000000000000ffcb9e57d400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -182,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000580a5b2f32bd14af9da1e01ef41feb754f78c350000000000000000000000000580a5b2f32bd14af9da1e01ef41feb754f78c35000000000000000000000000000000000000000000000000000f6e9e1bbe3c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -183,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fd90ad81ad93d9af1008a513d964f6fbc589034d000000000000000000000000fd90ad81ad93d9af1008a513d964f6fbc589034d000000000000000000000000000000000000000000000000001ff973cafa800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9f96e8b78b3de62d164887e49a0c7b4c9a36d0944dae63333a9ccbdc41aaee84,2022-06-28 01:56:15.000 UTC,0,true -184,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c127c110ceade7370c8b327287f2a669ec7e93ba000000000000000000000000c127c110ceade7370c8b327287f2a669ec7e93ba000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -185,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc02bb12596ed3679c0d2e0d449bd61931d7f5c7000000000000000000000000cc02bb12596ed3679c0d2e0d449bd61931d7f5c700000000000000000000000000000000000000000000000000138a388a43c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -188,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000856b63349fb6c818ea7cd7305483ae0ef6956f6c000000000000000000000000856b63349fb6c818ea7cd7305483ae0ef6956f6c000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -191,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a7258ec040748652576ffb447b228272b87ade4a000000000000000000000000a7258ec040748652576ffb447b228272b87ade4a000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -193,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba0c565110f65d181b9ff1d8a9f787b52857bb0c000000000000000000000000ba0c565110f65d181b9ff1d8a9f787b52857bb0c0000000000000000000000000000000000000000000000000013bc2edbd21c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -195,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000001b001f4b78c511d3260bfa538d4a117cd30d55700000000000000000000000001b001f4b78c511d3260bfa538d4a117cd30d5570000000000000000000000000000000000000000000000000012738915d842bf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -196,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59900000000000000000000000068f180fcce6836688e9084f035309e29bf0a209500000000000000000000000069dc97ad2dc7b179bff12a6eadabf3685d52845e00000000000000000000000069dc97ad2dc7b179bff12a6eadabf3685d52845e000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -198,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000006875d9b42502c79917910b0fc00c6a5a27f1fc6800000000000000000000000000000000000000000000000745b2dd303ca25a32,,,1,true -199,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004678cb6580b20bd4340fb5269e91af3e921180d80000000000000000000000004678cb6580b20bd4340fb5269e91af3e921180d800000000000000000000000000000000000000000000000002e654d9e53e2b8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -201,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000002e0dadd0174bb9f4099b3e04e4a2300de2893b0b0000000000000000000000000000000000000000000000131c31ed18c2068178,,,1,true -213,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000fb5e8a587733e1a8700e1d448f97a12bab4ad4ea00000000000000000000000000000000000000000000000032423e6918e514cc,,,1,true -214,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000fb5e8a587733e1a8700e1d448f97a12bab4ad4ea00000000000000000000000000000000000000000000000000f7855dcff405ec,,,1,true -216,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000816a684f40b8b4b060a4df7a10cad589ef64e95e000000000000000000000000816a684f40b8b4b060a4df7a10cad589ef64e95e000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -218,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009b34b95fe3d018f6047d6ff65b2b6cfc85bd29160000000000000000000000009b34b95fe3d018f6047d6ff65b2b6cfc85bd291600000000000000000000000000000000000000000000000001550f7dca70000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -221,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f28d4face9315ec0343d69e28b90712cb9aca453000000000000000000000000f28d4face9315ec0343d69e28b90712cb9aca453000000000000000000000000000000000000000000000000001ff973cafa800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -222,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000828355119398b77d364f41ef6533dad936d5b5c1000000000000000000000000828355119398b77d364f41ef6533dad936d5b5c100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -229,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000b4a6b88dc7dbe1b437a40bf1637961b0d865871c000000000000000000000000b4a6b88dc7dbe1b437a40bf1637961b0d865871c00000000000000000000000000000000000000000000000000000000000186a000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -230,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000289922fbbfbd38472d7e2a1652b33b834f7c0e49000000000000000000000000289922fbbfbd38472d7e2a1652b33b834f7c0e490000000000000000000000000000000000000000000000000c7d713b49da000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -231,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000e5479903febb574aae0442c5434897d6825d9977000000000000000000000000e5479903febb574aae0442c5434897d6825d99770000000000000000000000000000000000000000000000000000000000e8413700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -235,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000013711b99539d2860aa740c0180a50627d538c28e00000000000000000000000013711b99539d2860aa740c0180a50627d538c28e00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe227d786571d6544f07da9bd0e22f28166fe11f15b3aa401c3e6df1e4e8933a2,2021-12-28 06:33:53.000 UTC,0,true -236,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca1fd44348eb3ffde505346e6a813c2f33c4b816000000000000000000000000ca1fd44348eb3ffde505346e6a813c2f33c4b816000000000000000000000000000000000000000000000000005543df729c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -244,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000260d2fb8c006d2ec9b9fa7b41f3f01f981a0adc5000000000000000000000000260d2fb8c006d2ec9b9fa7b41f3f01f981a0adc50000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -246,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000031760f7cbd0a5a506c8b5822a1555b16c087f35b00000000000000000000000031760f7cbd0a5a506c8b5822a1555b16c087f35b00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -248,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039258caa0f56db9c9e26f3631586b424f0a6477300000000000000000000000039258caa0f56db9c9e26f3631586b424f0a64773000000000000000000000000000000000000000000000000000d0dc7821234b100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -251,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e64cbca254788df4a8d29e3721d077d91d0d92a0000000000000000000000000e64cbca254788df4a8d29e3721d077d91d0d92a000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -252,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000005d6ea8c76ab5d7366578f4b36d798cc37219dc240000000000000000000000005d6ea8c76ab5d7366578f4b36d798cc37219dc240000000000000000000000000000000000000000000000004563918244f4000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -253,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000090a7b41610a25f7bf538bd27dc6e0434bd38933200000000000000000000000090a7b41610a25f7bf538bd27dc6e0434bd3893320000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -263,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a27dbbff05f36dc927137855e3381f0c20c1cdd0000000000000000000000005a27dbbff05f36dc927137855e3381f0c20c1cdd000000000000000000000000000000000000000000000000013fbe85edc9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x8fb6023652e27efa476745645e947b4bd3d12486bc37d301c166cb48aab63c1d,2021-12-31 23:34:04.000 UTC,0,true -264,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000912190dcb9dbd95106f3859e1d08ef290084d690000000000000000000000000912190dcb9dbd95106f3859e1d08ef290084d690000000000000000000000000000000000000000000000001a055690d9db8000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -268,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b45e2b252969394a48e46616378f19b1f1f32bdd000000000000000000000000b45e2b252969394a48e46616378f19b1f1f32bdd000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -269,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000a3730477c3eb009d2dc4fc87ab2b1265251ed3be000000000000000000000000a3730477c3eb009d2dc4fc87ab2b1265251ed3be00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -272,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000070ba90062e0d6c89fe7c46074f20efd57a7557ef00000000000000000000000070ba90062e0d6c89fe7c46074f20efd57a7557ef00000000000000000000000000000000000000000000000000000000001e8bba00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -273,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000353a3b43d34247cbc3f8092187cdd849b5b31a77000000000000000000000000353a3b43d34247cbc3f8092187cdd849b5b31a770000000000000000000000000000000000000000000000000214e8348c4f000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -277,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000075d4bdbf6593ed463e9625694272a0ff9a6d346f00000000000000000000000075d4bdbf6593ed463e9625694272a0ff9a6d346f0000000000000000000000000000000000000000000000000000000016ea135300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xb171cf2697c4858dcf9c3834fe0a02579067214bee40af96018c3d43c14f8675,2022-04-05 01:35:36.000 UTC,0,true -279,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f0004c86b1251b10c7bf4672ca2bc59247a99bf5000000000000000000000000f0004c86b1251b10c7bf4672ca2bc59247a99bf500000000000000000000000000000000000000000000000008807d578bb9440000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe7ce870d054c92c3483f25f07366e283104553f365c0909461c3b862b38eda53,2022-02-13 22:28:36.000 UTC,0,true -283,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009534e4beb4f7e07bb88f4c6a067d666c29e1b4330000000000000000000000009534e4beb4f7e07bb88f4c6a067d666c29e1b433000000000000000000000000000000000000000000000000004115f16449000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -286,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5c161fcdac7d0d16e632626d815658983f583ea000000000000000000000000e5c161fcdac7d0d16e632626d815658983f583ea00000000000000000000000000000000000000000000000001f161421c8e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -289,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000af4807d083287f205d897e6d00c6fde1bf0a241a000000000000000000000000af4807d083287f205d897e6d00c6fde1bf0a241a00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -303,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000063782e602106604145b60a64457f6e92fe2e6dd000000000000000000000000063782e602106604145b60a64457f6e92fe2e6dd0000000000000000000000000000000000000000000000000030950e55ca05a800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -306,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000004189a63be018f4e50d4f770314f1bf87d7d65c810000000000000000000000004189a63be018f4e50d4f770314f1bf87d7d65c810000000000000000000000000000000000000000000000041ef7e8dca25eaf6000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -307,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d346aaf41745f87e71c4f8af9647f4aab2c4c310000000000000000000000007d346aaf41745f87e71c4f8af9647f4aab2c4c31000000000000000000000000000000000000000000000000002ff293c2540fe600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -314,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a91c0df156a5f38aec0813d055aa0184fc478260000000000000000000000001a91c0df156a5f38aec0813d055aa0184fc4782600000000000000000000000000000000000000000000000000656b90ccad2f4e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -315,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000e8b65b125afd293cdb2b496c4035ebf63e4d56a9000000000000000000000000e8b65b125afd293cdb2b496c4035ebf63e4d56a9000000000000000000000000000000000000000000000000846db28c6103bb2600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -323,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047b5ed2279478151d1631014aa90f876fec4a13600000000000000000000000047b5ed2279478151d1631014aa90f876fec4a136000000000000000000000000000000000000000000000000000c5630358fec7d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -329,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a59f7d6ac28e31715a76e949a805b7c1ae3ace50000000000000000000000002a59f7d6ac28e31715a76e949a805b7c1ae3ace500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -330,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a09b9febe45b40a1ab47c8cb323067161d6b9cb4000000000000000000000000a09b9febe45b40a1ab47c8cb323067161d6b9cb40000000000000000000000000000000000000000000000000c767bacdc9585a800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -331,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000027a557d1ab0a0f5dc9039aedee47ffcce6ca160400000000000000000000000027a557d1ab0a0f5dc9039aedee47ffcce6ca1604000000000000000000000000000000000000000000000000032ec990f8f8c30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -338,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000058dc53f7175fdd30c70ab5717c6e91edd8aed01700000000000000000000000058dc53f7175fdd30c70ab5717c6e91edd8aed017000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -339,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000627b4c6e08eeb3712c24713f4eb561e3f33319c0000000000000000000000000627b4c6e08eeb3712c24713f4eb561e3f33319c0000000000000000000000000000000000000000000000000160ff79d502b10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -341,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000668540812466219a4cf9ef22151bb7e513010f17000000000000000000000000668540812466219a4cf9ef22151bb7e513010f170000000000000000000000000000000000000000000000000007224b9463672100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -345,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002079a46983c7e43ca9f26b3ce75f7baf78d8da170000000000000000000000002079a46983c7e43ca9f26b3ce75f7baf78d8da1700000000000000000000000000000000000000000000000000bd3648b1f6271a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -347,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032eec9f20f75442b3dc91279ff307e17c7a6d7e800000000000000000000000032eec9f20f75442b3dc91279ff307e17c7a6d7e8000000000000000000000000000000000000000000000000003e213d0c24066200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -349,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000bd3fe6e83fec5a3f3dc99ebd1088cd0737eb82940000000000000000000000000000000000000000000000013e29f4dcdc610360,,,1,true -353,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000601c6d9eff76ae8cd7bff5fc4900f20f6f80734f000000000000000000000000601c6d9eff76ae8cd7bff5fc4900f20f6f80734f000000000000000000000000000000000000000000000000455c201e31dbbd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -357,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ebaffbdc8c854f0aab0e7567d38541578ff3c047000000000000000000000000ebaffbdc8c854f0aab0e7567d38541578ff3c04700000000000000000000000000000000000000000000000000aaa2708f721c0100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -359,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000b082ddfd74748b763f52f04558e5f814a56de67a00000000000000000000000000000000000000000000000b4ae9cf9d96b685b4,,,1,true -365,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002eb96f3453c00517ef534aa172a18b385ecff9a60000000000000000000000002eb96f3453c00517ef534aa172a18b385ecff9a600000000000000000000000000000000000000000000000000ab82e6a86a13ae00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -367,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fa5b9a2dc716bd732c0633d576db4d9cceb36f55000000000000000000000000fa5b9a2dc716bd732c0633d576db4d9cceb36f5500000000000000000000000000000000000000000000000000309992eaa3ced800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -372,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000006b62e3d14992c702f136a84c95ee60b86fe822000000000000000000000000006b62e3d14992c702f136a84c95ee60b86fe82200000000000000000000000000000000000000000000000000000000000098968000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -376,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000033107b56647014f37375b8291a86409f81a148db00000000000000000000000033107b56647014f37375b8291a86409f81a148db00000000000000000000000000000000000000000000000002bc97d322f093fd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -378,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c89d3625f581dfa803ff7c102b99b72efdc500c0000000000000000000000004c89d3625f581dfa803ff7c102b99b72efdc500c000000000000000000000000000000000000000000000000008a4a7f0a9da61f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -383,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000ec800b12b4c2f4a88b59012c856bf9b727dbfecc0000000000000000000000000000000000000000000000000738cbbd18d8c417,,,1,true -386,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac029a845c9c21bf2010b3769d0661fe7a696cf4000000000000000000000000ac029a845c9c21bf2010b3769d0661fe7a696cf40000000000000000000000000000000000000000000000000002d79883d2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -388,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000004409bc676c79a82f2319c72b204a349a96983d3600000000000000000000000000000000000000000000000bbc04f1385fb6ce3b,,,1,true -390,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001cd87070a7ca125c891c91d80ba148b1983ab62e0000000000000000000000001cd87070a7ca125c891c91d80ba148b1983ab62e000000000000000000000000000000000000000000000000008b9728c2e429c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -391,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000724b91be4efe9abf6d429528257b03f4acc84270000000000000000000000000724b91be4efe9abf6d429528257b03f4acc8427000000000000000000000000000000000000000000000000000ad3ec37a58a30800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -394,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000033ea964bbda6dab2b4067e5ad82b132e5ba83eb200000000000000000000000033ea964bbda6dab2b4067e5ad82b132e5ba83eb200000000000000000000000000000000000000000000000000acbfcad808f97b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -395,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae8b31e6236bec753d01922bd7b6773287490c79000000000000000000000000ae8b31e6236bec753d01922bd7b6773287490c79000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -396,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e0ee214906cdaf22ed18cef730cf66ed4ae06420000000000000000000000001e0ee214906cdaf22ed18cef730cf66ed4ae064200000000000000000000000000000000000000000000000000d434498096afcd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -399,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d232c211c80c8ce716b884b8fcd784bb55e60530000000000000000000000002d232c211c80c8ce716b884b8fcd784bb55e60530000000000000000000000000000000000000000000000000008626851ab800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -402,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc03f894465e2b43be15a56918c4e298e2ee4be5000000000000000000000000fc03f894465e2b43be15a56918c4e298e2ee4be5000000000000000000000000000000000000000000000000000325cff345600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -404,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000897aaceb5620805a04b561c076ca49667d663238000000000000000000000000897aaceb5620805a04b561c076ca49667d66323800000000000000000000000000000000000000000000000000033302c9e0400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -407,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000cc0960243d099bcae96c0d1aeacdda01434d2ebc000000000000000000000000cc0960243d099bcae96c0d1aeacdda01434d2ebc000000000000000000000000000000000000000000000000000000000098968000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xc8f77d7f04d24cb28453acd580e6c9672a09e54e8b6dff121541f6517e890d53,2022-05-13 20:38:58.000 UTC,0,true -410,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc8a9dea9c4f9a8936cc9b4dad270635e76f1197000000000000000000000000fc8a9dea9c4f9a8936cc9b4dad270635e76f119700000000000000000000000000000000000000000000000001a313d48c855b9d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -411,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae8b31e6236bec753d01922bd7b6773287490c79000000000000000000000000ae8b31e6236bec753d01922bd7b6773287490c79000000000000000000000000000000000000000000000000013a240098815be200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -412,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009d2fbb357c1017508f098d69ae7f19d63241d6560000000000000000000000009d2fbb357c1017508f098d69ae7f19d63241d6560000000000000000000000000000000000000000000000000005c1987b565b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -418,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001d639c172c474d56ef85dae0431295466734c1970000000000000000000000001d639c172c474d56ef85dae0431295466734c1970000000000000000000000000000000000000000000000000003a2e68bb1e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -419,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a643bcc171e12448aa4202db2bfd4b008108a5a0000000000000000000000006a643bcc171e12448aa4202db2bfd4b008108a5a000000000000000000000000000000000000000000000000000401ba6660b00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -420,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fd0041184f9387a822216be34da1f4893ea7b426000000000000000000000000fd0041184f9387a822216be34da1f4893ea7b42600000000000000000000000000000000000000000000000000036674b409bec800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -421,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a68f7936d21439e9a5510628ce3dac6a4de79700000000000000000000000001a68f7936d21439e9a5510628ce3dac6a4de7970000000000000000000000000000000000000000000000000000134f491d4880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -422,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009aa1575e60d33cd8e750f3193bdfa7d5540fe1360000000000000000000000009aa1575e60d33cd8e750f3193bdfa7d5540fe1360000000000000000000000000000000000000000000000000001de83adaed97000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -423,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004f2dc64360ebbe78c968338ed4baae1d141443400000000000000000000000004f2dc64360ebbe78c968338ed4baae1d1414434000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -432,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009512b8c1b63c9893258920b5998134a1261db85d0000000000000000000000009512b8c1b63c9893258920b5998134a1261db85d00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -433,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c8ac460603038da12ff2b6516d49929be9237939000000000000000000000000c8ac460603038da12ff2b6516d49929be923793900000000000000000000000000000000000000000000000000859d1923f388cd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x645a8cb90a52ec276d592333f274536d358a1a32a9daff8cff3396c75910b163,2022-05-20 09:44:19.000 UTC,0,true -434,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c8ac460603038da12ff2b6516d49929be9237939000000000000000000000000c8ac460603038da12ff2b6516d49929be9237939000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -436,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000efd67615d66e3819539021d40e155e1a6107f283000000000000000000000000efd67615d66e3819539021d40e155e1a6107f283000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -439,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d8c9e1104b01cc0354782c617ad0c523f19c1b2f000000000000000000000000d8c9e1104b01cc0354782c617ad0c523f19c1b2f000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -440,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000113b64de9690e22494dc3c4b6280156e2a25c487000000000000000000000000113b64de9690e22494dc3c4b6280156e2a25c48700000000000000000000000000000000000000000000000000189e45ae9af62200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -441,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000907a37f4fdcad959ca182538cfd9a6745cd673a6000000000000000000000000907a37f4fdcad959ca182538cfd9a6745cd673a60000000000000000000000000000000000000000000000000011cd58c3bd53ab00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -444,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbb8cf019a716684771515e4e95ad0fa304f29da000000000000000000000000cbb8cf019a716684771515e4e95ad0fa304f29da0000000000000000000000000000000000000000000000000ddf0c7bc568580000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -445,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000536a32e1448cc9e8910d319d8d4639abfb13fbd9000000000000000000000000536a32e1448cc9e8910d319d8d4639abfb13fbd9000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -446,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000367e9c3ac0e28c1536d5503de72bfea24fa4ed8a000000000000000000000000367e9c3ac0e28c1536d5503de72bfea24fa4ed8a000000000000000000000000000000000000000000000000001fa2df261c180000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -447,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000007b3e12359a738171e2872f4db665fe91bcbadbe00000000000000000000000007b3e12359a738171e2872f4db665fe91bcbadbe0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -448,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000af4826b9a4cf2dfe5ffea76389b043b25bf381da000000000000000000000000af4826b9a4cf2dfe5ffea76389b043b25bf381da0000000000000000000000000000000000000000000000000062ac5c4705c25800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -451,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c865bcad9c26a1e24f15a7881e2d09400f518120000000000000000000000003c865bcad9c26a1e24f15a7881e2d09400f518120000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -453,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000042eed31a8bb26099364b301ae087acfb037ba86400000000000000000000000042eed31a8bb26099364b301ae087acfb037ba86400000000000000000000000000000000000000000000000000025d365d84740000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -454,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061e09532c31973271474da3616fa71b38362a5c100000000000000000000000061e09532c31973271474da3616fa71b38362a5c100000000000000000000000000000000000000000000000000b324cbf51749e800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -455,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fde2205127903277f08f20d724abfb53c602f637000000000000000000000000fde2205127903277f08f20d724abfb53c602f63700000000000000000000000000000000000000000000000000baf6f1b3c8940000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -459,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f27c223b051ac3264c59b9ee8ca0f306406003a5000000000000000000000000f27c223b051ac3264c59b9ee8ca0f306406003a500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -462,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004524eb19cb5a1ddec08b2bf4569f480632070fdf0000000000000000000000004524eb19cb5a1ddec08b2bf4569f480632070fdf000000000000000000000000000000000000000000000000006632f18c69640f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -463,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e21b36ebede73eb8acc7e15e13407d629240cfbf000000000000000000000000e21b36ebede73eb8acc7e15e13407d629240cfbf000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -464,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3b5f18add21b6578e679d0de8ac7597d0095b73000000000000000000000000f3b5f18add21b6578e679d0de8ac7597d0095b73000000000000000000000000000000000000000000000000000051dac207a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -465,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bb3a0ceeea78fc630ea6ac4c97eecd106aefa16e000000000000000000000000bb3a0ceeea78fc630ea6ac4c97eecd106aefa16e0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -466,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001506d1fc81a1b5505115884bc7b792f19f4ca2fc0000000000000000000000001506d1fc81a1b5505115884bc7b792f19f4ca2fc000000000000000000000000000000000000000000000000001f1776b40f34ae00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -467,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a608aab1a651e665c8defd5b6cb392484ab37d75000000000000000000000000a608aab1a651e665c8defd5b6cb392484ab37d750000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -468,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea5b010320eff0aabd4099ac733314d829ee0c0f000000000000000000000000ea5b010320eff0aabd4099ac733314d829ee0c0f0000000000000000000000000000000000000000000000000033abab2f34f30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -470,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e17ba3491ef88c8ba6b8181313dd1219d403b08a000000000000000000000000e17ba3491ef88c8ba6b8181313dd1219d403b08a000000000000000000000000000000000000000000000000001c62fde17b34ee00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -474,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000569bfce7a6a72439d699a795c54f66826674e138000000000000000000000000569bfce7a6a72439d699a795c54f66826674e13800000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -476,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000efcbec968df1286d57e16c2cf31edbde3aa11f39000000000000000000000000efcbec968df1286d57e16c2cf31edbde3aa11f390000000000000000000000000000000000000000000000000000000003636f1b00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -479,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000052679a46eb65176dcd38e4ce45089ed84b0bdbe600000000000000000000000052679a46eb65176dcd38e4ce45089ed84b0bdbe600000000000000000000000000000000000000000000000000164dc4d3c9289800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -481,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e1ee06ef0176f9cc95765afef9ef10f451c035cd000000000000000000000000e1ee06ef0176f9cc95765afef9ef10f451c035cd000000000000000000000000000000000000000000000000006e0249c0a6103600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd615f5c8946e95a4cebe5bd7426cc6ed9a8bc7b653aed022bd2a4ce5705f9418,2022-05-22 10:29:02.000 UTC,0,true -482,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a23abf4eb73af80af932ba9abf89f4efe1b4c960000000000000000000000004a23abf4eb73af80af932ba9abf89f4efe1b4c9600000000000000000000000000000000000000000000000000100c72142168dc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -483,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009c2e73a5987801a130a0a01feab47d70a5ec04750000000000000000000000009c2e73a5987801a130a0a01feab47d70a5ec0475000000000000000000000000000000000000000000000000005e259c0e8c400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -490,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000710afef4052c2820059d13eb7ddc14700931cfe1000000000000000000000000710afef4052c2820059d13eb7ddc14700931cfe100000000000000000000000000000000000000000000000000000000004c4b4000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x475aa869685120b676f179f2f1dcddc93b20d8e1c28b1dee9f5ba791ad162e43,2022-05-16 11:14:46.000 UTC,0,true -494,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000384158caae0ec2f338b48500d09240bcb00e3747000000000000000000000000384158caae0ec2f338b48500d09240bcb00e374700000000000000000000000000000000000000000000000000f3c5f8538e269700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -498,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061f2bedbe48c49c38acd299ccdbfb814a23f9e4600000000000000000000000061f2bedbe48c49c38acd299ccdbfb814a23f9e46000000000000000000000000000000000000000000000000002dc1f68b6b4dc700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -499,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e3ce0ab69bbcf986a5a1f7826f58205048d62d60000000000000000000000000e3ce0ab69bbcf986a5a1f7826f58205048d62d60000000000000000000000000000000000000000000000000014c2dc12e7fc00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -502,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000979eabeb86b39f4ae7a0d60b3d2039dfee5ac2a4000000000000000000000000979eabeb86b39f4ae7a0d60b3d2039dfee5ac2a40000000000000000000000000000000000000000000000000031bced02db000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -503,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000085553c73886977397c0eb6231ac95f86015ece9a00000000000000000000000085553c73886977397c0eb6231ac95f86015ece9a0000000000000000000000000000000000000000000000000033558ec475928000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -505,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b2f390af1b11083154a0a15bfd3e555f57d82737000000000000000000000000b2f390af1b11083154a0a15bfd3e555f57d8273700000000000000000000000000000000000000000000000000434009a354799600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -506,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ed3c678f04d92c78c101154a271a50ad9089f443000000000000000000000000ed3c678f04d92c78c101154a271a50ad9089f443000000000000000000000000000000000000000000000000001a16ba969d05b100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -511,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003585c5691d442442685623f071e0fcc9f5ae1e8e0000000000000000000000003585c5691d442442685623f071e0fcc9f5ae1e8e0000000000000000000000000000000000000000000000000032dd27da55020000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xc765b78d01afaaaf650cd5723bb2a299fc15710bd2ee27d95d6b28aafb192e60,2021-12-12 11:37:47.000 UTC,0,true -513,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fe9f4e4fc884fbab008947c09c6bd7ecab1d9510000000000000000000000000fe9f4e4fc884fbab008947c09c6bd7ecab1d95100000000000000000000000000000000000000000000000000022169ece6c250000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -514,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005f071f2ce06084811be5b2ef2e9d2773f53d32cb0000000000000000000000005f071f2ce06084811be5b2ef2e9d2773f53d32cb00000000000000000000000000000000000000000000000000f447514f945c1000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -518,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a82eb7116e2b3117be7ef111fe8e71197fda2fc7000000000000000000000000a82eb7116e2b3117be7ef111fe8e71197fda2fc70000000000000000000000000000000000000000000000000021d1d25511830000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -520,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000892140d07986898067079527a5fe5036a56cc893000000000000000000000000892140d07986898067079527a5fe5036a56cc89300000000000000000000000000000000000000000000000000aead1bb949d50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -522,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000813e2048b3a1e47bb8965bfccd5d70da2324c8b7000000000000000000000000813e2048b3a1e47bb8965bfccd5d70da2324c8b7000000000000000000000000000000000000000000000000000051dac207a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -523,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005fbdc9fc797bc23d716c758821049e91103144280000000000000000000000005fbdc9fc797bc23d716c758821049e911031442800000000000000000000000000000000000000000000000000445d10e361770000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -524,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a5119abbc91c0ef96de588b10df364e862dbc8f6000000000000000000000000a5119abbc91c0ef96de588b10df364e862dbc8f6000000000000000000000000000000000000000000000000003f88a45078c99300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -526,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c16414ac1fedfdac4f8a09674d994e1bbb9d7113000000000000000000000000c16414ac1fedfdac4f8a09674d994e1bbb9d7113000000000000000000000000000000000000000000000000f9b1e8abb4f6187300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xec62f271bfa1cd8dd5146a2f2f5a778d76012bb6f3fe4687f7bd75457bbda544,2021-12-24 05:11:57.000 UTC,0,true -527,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000e30a466d244dffbc36ab3d616796a276ebcd760c0000000000000000000000000000000000000000000000005371a517ff288800,,,1,true -529,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000090ea7c4f89d11fc237a822e7395cd4b33f164e5800000000000000000000000090ea7c4f89d11fc237a822e7395cd4b33f164e580000000000000000000000000000000000000000000000000055febac9875e6e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -533,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003b11cc193ba3ab9c2a0ed9eda03a4d795c7662620000000000000000000000003b11cc193ba3ab9c2a0ed9eda03a4d795c766262000000000000000000000000000000000000000000000000004418446a06d50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -534,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000ef91ecd0142ae4c5163b2cf060c0563d49188c82000000000000000000000000ef91ecd0142ae4c5163b2cf060c0563d49188c820000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -535,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000913ef606ae851af034f2195c63f1c0324fb3e423000000000000000000000000913ef606ae851af034f2195c63f1c0324fb3e42300000000000000000000000000000000000000000000000000ba34e311fa030000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -536,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008bc00f15af562e01d3faa3bc5d53f3aa7bbc59660000000000000000000000008bc00f15af562e01d3faa3bc5d53f3aa7bbc596600000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -537,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000beaae768c2534b882ca2cabf1f04d528b95163fd000000000000000000000000beaae768c2534b882ca2cabf1f04d528b95163fd000000000000000000000000000000000000000000000000011aafc1d8b9a90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -538,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000210e953c0f36dd6df7c07d745cb31660fdea7e72000000000000000000000000210e953c0f36dd6df7c07d745cb31660fdea7e72000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -540,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000039b678799337cb0e04dbdd192020ab4fe65783e000000000000000000000000039b678799337cb0e04dbdd192020ab4fe65783e00000000000000000000000000000000000000000000000000000000ca8231f800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -543,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000069b4f1d198783baca5da8bb69f4447514ffa26df00000000000000000000000069b4f1d198783baca5da8bb69f4447514ffa26df000000000000000000000000000000000000000000000000013543d8b99fee9900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -549,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d030e6d9c9d0951d7d0e902fb0f27caa66d65286000000000000000000000000d030e6d9c9d0951d7d0e902fb0f27caa66d65286000000000000000000000000000000000000000000000000011547f1cab70d4c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf5ca5ec3366a8d1e6d73dcf91c7ae6d61cf4c2166874c87388ec35e5464e7872,2021-12-26 14:51:38.000 UTC,0,true -551,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009e59a19937237224b04aa25b293119ce1733dc580000000000000000000000009e59a19937237224b04aa25b293119ce1733dc5800000000000000000000000000000000000000000000000000963cd9ab5a73c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -553,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003753fa57980fd180655c281158e428ca994d6dfa0000000000000000000000003753fa57980fd180655c281158e428ca994d6dfa000000000000000000000000000000000000000000000000015e314a523b8d9b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -554,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e2876ec5991f19a26bf4a32915b43a03e96d129a000000000000000000000000e2876ec5991f19a26bf4a32915b43a03e96d129a00000000000000000000000000000000000000000000000000688206bd1b360000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -556,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fa0c63a5295eed86bbeb2e49ec44bc0ed4466ada000000000000000000000000fa0c63a5295eed86bbeb2e49ec44bc0ed4466ada000000000000000000000000000000000000000000000000013ad61b2b5b22c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -558,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000016613d9c9f1fec0b1e08233602d7dedf27c5c86800000000000000000000000016613d9c9f1fec0b1e08233602d7dedf27c5c86800000000000000000000000000000000000000000000000002d9f9596ca4166a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -559,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000016613d9c9f1fec0b1e08233602d7dedf27c5c86800000000000000000000000016613d9c9f1fec0b1e08233602d7dedf27c5c868000000000000000000000000000000000000000000000000007edef594c63ecb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -561,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000060655f1e1f87086b27e35ce8eef99945e2f4f6b000000000000000000000000060655f1e1f87086b27e35ce8eef99945e2f4f6b00000000000000000000000000000000000000000000000000233ba7346d80c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -562,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d67b76cf3dcc881255eb2262e788be03b2f5b9f0000000000000000000000003d67b76cf3dcc881255eb2262e788be03b2f5b9f000000000000000000000000000000000000000000000000008a6b67f927a90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -563,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d67b76cf3dcc881255eb2262e788be03b2f5b9f0000000000000000000000003d67b76cf3dcc881255eb2262e788be03b2f5b9f00000000000000000000000000000000000000000000000002ade43338cb380100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -566,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008bc00f15af562e01d3faa3bc5d53f3aa7bbc59660000000000000000000000008bc00f15af562e01d3faa3bc5d53f3aa7bbc5966000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -571,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f39fe64953c20757419d960ee6dbc5e6a19914d3000000000000000000000000f39fe64953c20757419d960ee6dbc5e6a19914d300000000000000000000000000000000000000000000000006ea19e7969e135e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -578,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc07f994bd3d83cddd732bc50b57a810036ddf30000000000000000000000000bc07f994bd3d83cddd732bc50b57a810036ddf30000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -579,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000603fe182e7e1c16e5003fd44cb7263cdb969642e000000000000000000000000603fe182e7e1c16e5003fd44cb7263cdb969642e00000000000000000000000000000000000000000000000000225b6b47c6c70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -580,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc07f994bd3d83cddd732bc50b57a810036ddf30000000000000000000000000bc07f994bd3d83cddd732bc50b57a810036ddf3000000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -581,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000003e4a0e0593df6ffd10d459e06429b93399a3d80a0000000000000000000000003e4a0e0593df6ffd10d459e06429b93399a3d80a000000000000000000000000000000000000000000000000314efb91c16aafaf00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -585,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004329ef4ef2d9b407b277325ba744025ce437920f0000000000000000000000004329ef4ef2d9b407b277325ba744025ce437920f000000000000000000000000000000000000000000000000001aa535d3d0c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -587,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9499fc54c492118620f38b36b72c06632128157000000000000000000000000f9499fc54c492118620f38b36b72c06632128157000000000000000000000000000000000000000000000000001459f02296673000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -588,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9499fc54c492118620f38b36b72c06632128157000000000000000000000000f9499fc54c492118620f38b36b72c066321281570000000000000000000000000000000000000000000000000008b9f5fb47f97700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -589,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000083d420a602b5cd560ac5fa9bbca0d5e91e4cb9750000000000000000000000000000000000000000000000058235a9b32a882e78,,,1,true -590,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7015ab1a9f7348bc2598cd77eb3471092193188000000000000000000000000c7015ab1a9f7348bc2598cd77eb3471092193188000000000000000000000000000000000000000000000000011c37937e08000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -598,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004570d5b4177cf209944e8e3fb1f2a77021ffd5c50000000000000000000000004570d5b4177cf209944e8e3fb1f2a77021ffd5c5000000000000000000000000000000000000000000000000215cef5e3dbe2e1600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -602,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000024bf21c742791848cb37d228afad72a5a273b18100000000000000000000000000000000000000000000000059c531a9e3d6ea85,,,1,true -603,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c29c64e997ea2488c444ff2eba812cf5c6de49b4000000000000000000000000c29c64e997ea2488c444ff2eba812cf5c6de49b40000000000000000000000000000000000000000000000000058d15e1762800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -604,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da989e943caff71f29284a39c8947410480a6e07000000000000000000000000da989e943caff71f29284a39c8947410480a6e070000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -606,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e75ec34b72a1deb5e267365297950fe2649e97d4000000000000000000000000e75ec34b72a1deb5e267365297950fe2649e97d4000000000000000000000000000000000000000000000000006e3ca455466f9800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -612,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000002526ce6014e8c17aedea915fa7470d4b780ade980000000000000000000000002526ce6014e8c17aedea915fa7470d4b780ade9800000000000000000000000000000000000000000000000ad78ebc5ac620000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -615,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000040f9ccc945d52d74b9a023cb295015d28d40d8f300000000000000000000000040f9ccc945d52d74b9a023cb295015d28d40d8f300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -618,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002526ce6014e8c17aedea915fa7470d4b780ade980000000000000000000000002526ce6014e8c17aedea915fa7470d4b780ade980000000000000000000000000000000000000000000000000195708d03af99c800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -623,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008b797bc5cfd2dfa84a727328d8df28d0fde55ca40000000000000000000000008b797bc5cfd2dfa84a727328d8df28d0fde55ca400000000000000000000000000000000000000000000000000af366d1391760000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -626,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc202930867769a83b61cf5053b65d1845e76aea000000000000000000000000cc202930867769a83b61cf5053b65d1845e76aea0000000000000000000000000000000000000000000000000dadff6d8ea92e9500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xa1fc47f1737b884d0f2941ea7afcec2904e543e64dff1b4c441d34e66abf9456,2021-11-24 15:55:04.000 UTC,0,true -633,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004271eb0d4ddcc6856ad0d9eb987257ca2ac5278c0000000000000000000000004271eb0d4ddcc6856ad0d9eb987257ca2ac5278c0000000000000000000000000000000000000000000000000001033e1cf569ac00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -639,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008822645150ae7e252c404381e07bc9c44552e9f50000000000000000000000008822645150ae7e252c404381e07bc9c44552e9f500000000000000000000000000000000000000000000000001175e4aa00dc4af00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -642,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000747439c899faa9a7e2a7695ce64d0909050e6169000000000000000000000000747439c899faa9a7e2a7695ce64d0909050e6169000000000000000000000000000000000000000000000000003a53fe592ae50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -643,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a6cfc086526be4bd7cfc02a0c62f06530fc7212d000000000000000000000000a6cfc086526be4bd7cfc02a0c62f06530fc7212d000000000000000000000000000000000000000000000000001ea657463ba80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -645,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a9732a70489c681bb5b8f53d9eedb83bbe04f04f000000000000000000000000a9732a70489c681bb5b8f53d9eedb83bbe04f04f00000000000000000000000000000000000000000000000000563851dd2db88300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -646,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000035483b77a27a254d0f6248416e94e23ff7c8ef0f00000000000000000000000035483b77a27a254d0f6248416e94e23ff7c8ef0f00000000000000000000000000000000000000000000000000675da46edc155100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -649,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000012ef2cd4231d5cf655a6cdd4ac1524ffaa439c1700000000000000000000000012ef2cd4231d5cf655a6cdd4ac1524ffaa439c17000000000000000000000000000000000000000000000000000000016efcc01a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xf437d5e09082a184bbbdbd788edbc1808509297d76b04dc5be48bf0fc4095093,2022-06-01 07:42:30.000 UTC,0,true -650,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000000d801699678375e43d14f67453e24f17ebbaef8a0000000000000000000000000d801699678375e43d14f67453e24f17ebbaef8a00000000000000000000000000000000000000000000000a35a2f021abc49e6b00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -652,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e9f0b99751b49fffd7115eb0415d4aca11db8980000000000000000000000000e9f0b99751b49fffd7115eb0415d4aca11db898000000000000000000000000000000000000000000000000000f252719c5b74000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -653,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e53fb7989ad637f7a674e8db71e85cab60607183000000000000000000000000e53fb7989ad637f7a674e8db71e85cab6060718300000000000000000000000000000000000000000000000000c1bad3366c576800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -655,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e4e018514c72776fe0f48bdc13aa1aa49e88f610000000000000000000000004e4e018514c72776fe0f48bdc13aa1aa49e88f610000000000000000000000000000000000000000000000000011f0aeb6d599e500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -657,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000153509e78fd04144d482e27716ae14c52d7932b0000000000000000000000000153509e78fd04144d482e27716ae14c52d7932b0000000000000000000000000000000000000000000000000001f4daf5641a1c900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -658,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000006185ca50a8ab43726b08d8e65c6f2173fb2b2360000000000000000000000000000000000000000000000002055d2a7b6a90000,,,1,true -659,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000ace8dccf7bbc639f6de934a962c2d4880bf6d300000000000000000000000000ace8dccf7bbc639f6de934a962c2d4880bf6d30000000000000000000000000000000000000000000000000002e2f6e5e14800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -664,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0d1212b52da5ed44b19f4328f5fe7708f825d81000000000000000000000000c0d1212b52da5ed44b19f4328f5fe7708f825d81000000000000000000000000000000000000000000000000002b8ad18d3d69f200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xbed0c05b25e16393b56973911c96e2f74b09b94faf87f7998a1042232347dcfb,2022-03-08 04:42:00.000 UTC,0,true -665,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c5a61d56ca395fcb87f148532369595e31286d0e000000000000000000000000c5a61d56ca395fcb87f148532369595e31286d0e00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1ae9c293db4cf469b0b6b59c8653555dedb7ad3bea0b52317bc880c456cbf592,2022-05-24 02:45:59.000 UTC,0,true -666,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e9fbf581059cabe23241f8307d96e9087baf7ea0000000000000000000000006e9fbf581059cabe23241f8307d96e9087baf7ea00000000000000000000000000000000000000000000000000a79bbcaeb99b9700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe76ffd8c97fc39b908574ddb3bd20c65199a3922be3153035514f4fb0c150327,2022-03-07 16:27:30.000 UTC,0,true -668,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004f96f50edb37a19216d87693e5db241e31bd37350000000000000000000000004f96f50edb37a19216d87693e5db241e31bd373500000000000000000000000000000000000000000000000164dc0424419e22c200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -671,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e7126dc2ba9e19d84c7d708f294a743fa4bce630000000000000000000000008e7126dc2ba9e19d84c7d708f294a743fa4bce6300000000000000000000000000000000000000000000000000b552f14bae975900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -672,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000896d781ddd4949990ad530e77550577a5cf4b990000000000000000000000000896d781ddd4949990ad530e77550577a5cf4b9900000000000000000000000000000000000000000000000002c1745542ba214200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -673,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000f4b7ba1fb6fea41b7f159f1b86b8295f269abde0000000000000000000000000f4b7ba1fb6fea41b7f159f1b86b8295f269abde0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -677,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000003e17fac953de2cd729b0ace7f6d4353387717e9e0000000000000000000000000000000000000000000000117b0e7dd162419429,,,1,true -681,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005eee0073017bd5a3bc0f031c3ff84cf12302c04c0000000000000000000000005eee0073017bd5a3bc0f031c3ff84cf12302c04c00000000000000000000000000000000000000000000000005f8837463f91e9800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -684,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000479de3aaf6151ae39f74d55e1f440de66e85ddd4000000000000000000000000479de3aaf6151ae39f74d55e1f440de66e85ddd40000000000000000000000000000000000000000000000000159b5206e3c225d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -687,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fe9f4e4fc884fbab008947c09c6bd7ecab1d9510000000000000000000000000fe9f4e4fc884fbab008947c09c6bd7ecab1d951000000000000000000000000000000000000000000000000000079fb988364a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -690,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d41a8fc6c7a6f07ce60b421f0f24c958e09211f0000000000000000000000008d41a8fc6c7a6f07ce60b421f0f24c958e09211f000000000000000000000000000000000000000000000000003b66a05eb12f2a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -691,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d41a8fc6c7a6f07ce60b421f0f24c958e09211f0000000000000000000000008d41a8fc6c7a6f07ce60b421f0f24c958e09211f000000000000000000000000000000000000000000000000002384e11c371cee00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -692,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d105dd0a16290f4a3729cac5c4acaae8492b2590000000000000000000000007d105dd0a16290f4a3729cac5c4acaae8492b259000000000000000000000000000000000000000000000000001d568764f9ee1000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -694,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b35e598fc643037facde62dba4343e99f6294958000000000000000000000000b35e598fc643037facde62dba4343e99f62949580000000000000000000000000000000000000000000000000186cc6acd4b000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -698,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009fcdce0361c3a8a1b5d21afa25383605d26b0f350000000000000000000000009fcdce0361c3a8a1b5d21afa25383605d26b0f35000000000000000000000000000000000000000000000000013720fbf76cd94000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -699,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003b9a250ef1a6a3673d2d4b6805bdb1059d22ecb30000000000000000000000003b9a250ef1a6a3673d2d4b6805bdb1059d22ecb300000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -704,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007c7cb0f3a890df6b8c1de1d22ab9caecf81b172c0000000000000000000000007c7cb0f3a890df6b8c1de1d22ab9caecf81b172c000000000000000000000000000000000000000000000000006abe60bea5c73800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -705,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009f62dd1a43d79cc5acbf94abf823cd33f816bdb90000000000000000000000009f62dd1a43d79cc5acbf94abf823cd33f816bdb9000000000000000000000000000000000000000000000000004e28e2290f000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -706,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008da4bf2f8f0cd17849cc563eba0aa8fd6c14a3ac0000000000000000000000008da4bf2f8f0cd17849cc563eba0aa8fd6c14a3ac000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -707,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f14347ae79a734dbf84883bf2bfd3c285f860220000000000000000000000003f14347ae79a734dbf84883bf2bfd3c285f86022000000000000000000000000000000000000000000000000009c9328f7c9450000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -713,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59900000000000000000000000068f180fcce6836688e9084f035309e29bf0a20950000000000000000000000004ec6b6f9bcdda4432cc134779b62bf8770d925b20000000000000000000000004ec6b6f9bcdda4432cc134779b62bf8770d925b200000000000000000000000000000000000000000000000000000000000a68b300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -715,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000bfddb0906e960c1b3d965b6bd291208e8c5bbad1000000000000000000000000bfddb0906e960c1b3d965b6bd291208e8c5bbad1000000000000000000000000000000000000000000000002fcf22664b680c2c200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -716,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bfddb0906e960c1b3d965b6bd291208e8c5bbad1000000000000000000000000bfddb0906e960c1b3d965b6bd291208e8c5bbad1000000000000000000000000000000000000000000000000001f1311dfbb5bc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -718,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000820d2e1f0e75e83078730605ee6fb436d7a7762f000000000000000000000000820d2e1f0e75e83078730605ee6fb436d7a7762f0000000000000000000000000000000000000000000000000169db2e213ce3d900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -723,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000af4f9aa4a83133ae981b5afeda7d764621c5fae6000000000000000000000000af4f9aa4a83133ae981b5afeda7d764621c5fae600000000000000000000000000000000000000000000000000031c84d188bd8300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -728,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005bcc90a9ed7be531d2be62cbdb6324f0b9bf632f0000000000000000000000005bcc90a9ed7be531d2be62cbdb6324f0b9bf632f00000000000000000000000000000000000000000000000000049cd4f2c773c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -729,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005cf2565d3f2711093ea24d4021248c7bc04697490000000000000000000000005cf2565d3f2711093ea24d4021248c7bc046974900000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -733,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000102e14acfc47ef75167763112024a9ed38596da0000000000000000000000000102e14acfc47ef75167763112024a9ed38596da0000000000000000000000000000000000000000000000000007c58508723800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x34f7bd635826f3bee79626633f454af90ae72171da7641bf354155128c179267,2022-02-26 12:48:03.000 UTC,0,true -738,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000c9037fd858069e2fa03ce1eff31bda66ea3075c1000000000000000000000000c9037fd858069e2fa03ce1eff31bda66ea3075c100000000000000000000000000000000000000000000000000000000f732eff400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -739,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c024559c710123b6caf5d225b56913aab339aad0000000000000000000000000c024559c710123b6caf5d225b56913aab339aad0000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -742,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b08112a69b572e4b05000cfd837ef06b6a255bf1000000000000000000000000b08112a69b572e4b05000cfd837ef06b6a255bf100000000000000000000000000000000000000000000000006eacb8d12142b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -749,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000b4afac1f985afd50cabaa1a607cc0e0e666fadc0000000000000000000000000b4afac1f985afd50cabaa1a607cc0e0e666fadc0000000000000000000000000000000000000000000000000014ef5dc3e86f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -752,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000017ba7a44e90155bb2bf1375bae9c423e48afd48e00000000000000000000000017ba7a44e90155bb2bf1375bae9c423e48afd48e0000000000000000000000000000000000000000000000008ac7230489e8000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -755,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003b9a250ef1a6a3673d2d4b6805bdb1059d22ecb30000000000000000000000003b9a250ef1a6a3673d2d4b6805bdb1059d22ecb300000000000000000000000000000000000000000000000000424de64d71700000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -759,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000743c9d620d2b1943d3347e2120ff9998637042ac000000000000000000000000000000000000000000000002c06fad6cebdb4e00,,,1,true -761,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000015fc0f9a30b6353b6ea191d7c4ba6c8aade92d7000000000000000000000000015fc0f9a30b6353b6ea191d7c4ba6c8aade92d7000000000000000000000000000000000000000000000000003a7a486500c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9baae0cb8f88dc4d64233bbfa72431b50f38e7eb78671dd2f5e3ba69b34d8ae9,2022-03-14 09:24:52.000 UTC,0,true -762,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d7d64469f37bab258e084f4b5e43677789d3ce80000000000000000000000002d7d64469f37bab258e084f4b5e43677789d3ce800000000000000000000000000000000000000000000000000883e62b58fc9a800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -767,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000156825670f19b704d54249f6d4d053a217bf3115000000000000000000000000156825670f19b704d54249f6d4d053a217bf311500000000000000000000000000000000000000000000000000538411c27d619d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -768,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001420bddee23e28a2fab3d91b716dcfbfc2165ff90000000000000000000000001420bddee23e28a2fab3d91b716dcfbfc2165ff900000000000000000000000000000000000000000000000000439fe1e30c815e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -771,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000000111bbc1f307cc9bde8dd181e17c36b17d342efd0000000000000000000000000111bbc1f307cc9bde8dd181e17c36b17d342efd00000000000000000000000000000000000000000000000057f6206a70a171d300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -772,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000111bbc1f307cc9bde8dd181e17c36b17d342efd0000000000000000000000000111bbc1f307cc9bde8dd181e17c36b17d342efd0000000000000000000000000000000000000000000000000000f99a97f0ae6e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -773,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d01b7ff2b2544529ee092240d406051756607260000000000000000000000000d01b7ff2b2544529ee092240d40605175660726000000000000000000000000000000000000000000000000013d09ce8566c91f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -774,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c16e9ce31179909a69f92c6b587e9255bb77fb16000000000000000000000000c16e9ce31179909a69f92c6b587e9255bb77fb16000000000000000000000000000000000000000000000000015f15ecdd140dcd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -775,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007c7c63070372f67b49a269940aa6853e1dccf2950000000000000000000000007c7c63070372f67b49a269940aa6853e1dccf29500000000000000000000000000000000000000000000000000166392a19ebc8200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -777,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e6512dc17c28cb50ab0787c30a806bdc363930d0000000000000000000000006e6512dc17c28cb50ab0787c30a806bdc363930d0000000000000000000000000000000000000000000000000092c5488bbde8b900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -778,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000374b7cf2684850d687b25b13ebc0e3046980aaa8000000000000000000000000374b7cf2684850d687b25b13ebc0e3046980aaa8000000000000000000000000000000000000000000000000015f29b3382a05e700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -779,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a9ee9b9620556054d5e400d0c12ba6393efbc05e000000000000000000000000a9ee9b9620556054d5e400d0c12ba6393efbc05e000000000000000000000000000000000000000000000000007b3fcb8e557aaa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -786,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094f6134e0879f82ecb3aabd67dba21fec57fd04300000000000000000000000094f6134e0879f82ecb3aabd67dba21fec57fd043000000000000000000000000000000000000000000000000000a3f04646f345100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -787,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000042fb7812297ca741c665b3fd60a9310351d1546600000000000000000000000042fb7812297ca741c665b3fd60a9310351d1546600000000000000000000000000000000000000000000000000f8b0a10e47000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -793,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000058d797263f86ae8885c8757efe1a59bd179357c900000000000000000000000058d797263f86ae8885c8757efe1a59bd179357c90000000000000000000000000000000000000000000000ecaf0c2701a80d6a0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -794,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e65b845d994b7eaa59456c36f590907afd896628000000000000000000000000e65b845d994b7eaa59456c36f590907afd89662800000000000000000000000000000000000000000000000000154b191061470000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -796,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1dd073c0ee4bf474a5ce5b0d08a4e240115f176000000000000000000000000c1dd073c0ee4bf474a5ce5b0d08a4e240115f17600000000000000000000000000000000000000000000000000133af6d4f9a9c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -802,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000302d43d1a7c1313608f218446a4266fb312c461e000000000000000000000000302d43d1a7c1313608f218446a4266fb312c461e00000000000000000000000000000000000000000000000256b23d2620995e7200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -808,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008da4bf2f8f0cd17849cc563eba0aa8fd6c14a3ac0000000000000000000000008da4bf2f8f0cd17849cc563eba0aa8fd6c14a3ac000000000000000000000000000000000000000000000000002aade72a6bae1900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -812,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000093f4de4246130b153149a2e26a469c555754559200000000000000000000000093f4de4246130b153149a2e26a469c5557545592000000000000000000000000000000000000000000000000026cd2012bc9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -813,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b7162203d69f761b8d899e8f6f2f12818f87738f000000000000000000000000b7162203d69f761b8d899e8f6f2f12818f87738f0000000000000000000000000000000000000000000000000060e3ed2b874c8100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x0bbfefd6ef7834d869b7aabcbb5d1c538f3409ec1f4adeb6415c0d799800d406,2022-05-27 23:49:34.000 UTC,0,true -814,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000298ed1d964a107517f2a135106e903fcf42e77c0000000000000000000000000298ed1d964a107517f2a135106e903fcf42e77c00000000000000000000000000000000000000000000000000398fd40c23830000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -815,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000051d32336397884d86712814d73ee3f20610e395200000000000000000000000051d32336397884d86712814d73ee3f20610e3952000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -816,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d0864beb3a80a530f494427d6a03b9ca71112fb0000000000000000000000005d0864beb3a80a530f494427d6a03b9ca71112fb00000000000000000000000000000000000000000000000000099dbf4165158400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -819,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000334c5b9f732174caa4b7a67d2178b7e74a527003000000000000000000000000334c5b9f732174caa4b7a67d2178b7e74a52700300000000000000000000000000000000000000000000000000014c77db5eac9800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -821,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000006089bceee94a485c61b311cb61934d5cf8a684e00000000000000000000000006089bceee94a485c61b311cb61934d5cf8a684e000000000000000000000000000000000000000000000000000029a18b7e930e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -823,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000053c9286b4940281609433dc01c28d86c734b44c300000000000000000000000053c9286b4940281609433dc01c28d86c734b44c3000000000000000000000000000000000000000000000000002bcab74dd21e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -825,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032aa36adfe23c52de8737bdb7c7ebf2db4253e8900000000000000000000000032aa36adfe23c52de8737bdb7c7ebf2db4253e89000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -828,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032aa36adfe23c52de8737bdb7c7ebf2db4253e8900000000000000000000000032aa36adfe23c52de8737bdb7c7ebf2db4253e89000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -830,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000041d657fd02fcedaa37df6cc785859423f03a58e900000000000000000000000041d657fd02fcedaa37df6cc785859423f03a58e900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -831,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000016b00db74167b7469dda63b674ca9a3b1b70c439000000000000000000000000000000000000000000000001c09b256500768132,,,1,true -832,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000320ed2be452129381c87d0e4f4aabd7d9b7786fe000000000000000000000000320ed2be452129381c87d0e4f4aabd7d9b7786fe00000000000000000000000000000000000000000000000000000124ebd427c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x678959ef46816db82cec80e038adec4bb506d28570d4ff5174acc79960e62b16,2022-08-25 07:58:33.000 UTC,0,true -833,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000320ed2be452129381c87d0e4f4aabd7d9b7786fe000000000000000000000000320ed2be452129381c87d0e4f4aabd7d9b7786fe00000000000000000000000000000000000000000000000000000000037c621500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xa0ca4994434f8808b3255e0d03507dd4ab4f48b5bc652e5fabef0a93677d52aa,2022-08-25 08:03:39.000 UTC,0,true -834,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009476b5d92f0f6411007ed481405c80c1801a60ce0000000000000000000000009476b5d92f0f6411007ed481405c80c1801a60ce000000000000000000000000000000000000000000000000004497af4bf2343b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -836,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000721c7fffe9ac426a028e616677811f755fa99eba000000000000000000000000721c7fffe9ac426a028e616677811f755fa99eba00000000000000000000000000000000000000000000000002c68af0bb14000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -837,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fe60e3cb6bbdca1879d62796e1e0ea174334493b000000000000000000000000fe60e3cb6bbdca1879d62796e1e0ea174334493b0000000000000000000000000000000000000000000000000046ce59bcae17de00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -838,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d346aaf41745f87e71c4f8af9647f4aab2c4c310000000000000000000000007d346aaf41745f87e71c4f8af9647f4aab2c4c31000000000000000000000000000000000000000000000000008736c880dac63700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -842,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003930934bfd0997f375c0749081b51dacee8d0aa40000000000000000000000003930934bfd0997f375c0749081b51dacee8d0aa40000000000000000000000000000000000000000000000000015265c76b9973900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -845,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6d301feb8c691989f4597cf37167a896085511b000000000000000000000000d6d301feb8c691989f4597cf37167a896085511b00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -846,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007b1815f2c8bf70385e23bf97ad86b152e8171cfc0000000000000000000000007b1815f2c8bf70385e23bf97ad86b152e8171cfc000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -847,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076b7c065ee0ec58b4fcefdf8927063303d3e798900000000000000000000000076b7c065ee0ec58b4fcefdf8927063303d3e7989000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -848,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001632b9c770c809eab725e19cced79249c469aff40000000000000000000000001632b9c770c809eab725e19cced79249c469aff4000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -849,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000053f740aa1962c38b75da7e7eef74c8c05fe9f27600000000000000000000000053f740aa1962c38b75da7e7eef74c8c05fe9f27600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -850,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001852bdf59e59a6ef462f88976bc0e0208d022a2f0000000000000000000000001852bdf59e59a6ef462f88976bc0e0208d022a2f00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -851,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbe934124a766bee19c36aeda167a885c6063f55000000000000000000000000cbe934124a766bee19c36aeda167a885c6063f5500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -852,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cfb3f38a19e1a37eb3b76cfa01ec78149fa7f950000000000000000000000000cfb3f38a19e1a37eb3b76cfa01ec78149fa7f95000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -853,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002dab481d9f9f3dde5157e10e7a3ed8ff4470d2390000000000000000000000002dab481d9f9f3dde5157e10e7a3ed8ff4470d23900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -854,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c3e27850711e108033f2b007226bd29335092786000000000000000000000000c3e27850711e108033f2b007226bd2933509278600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -855,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000051d32336397884d86712814d73ee3f20610e395200000000000000000000000051d32336397884d86712814d73ee3f20610e395200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -856,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c94a5d9648e17a0e30cc7f7f2e8f5cd8ef40bca0000000000000000000000008c94a5d9648e17a0e30cc7f7f2e8f5cd8ef40bca00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -858,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000146ab635fd9f49a57ceaeed6347fd4f9f4349ae4000000000000000000000000146ab635fd9f49a57ceaeed6347fd4f9f4349ae40000000000000000000000000000000000000000000000000078b29eef5bffd400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -862,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007e54ff8766bb1c0d6d978495454e7b2fb041faed0000000000000000000000007e54ff8766bb1c0d6d978495454e7b2fb041faed00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -863,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef08c3d5b02cf6240cf71908d5dbd497e361584f000000000000000000000000ef08c3d5b02cf6240cf71908d5dbd497e361584f0000000000000000000000000000000000000000000000000014c1801dac030000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -864,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca87dfe624d3fc05abcceeac9d50ec3f7a3541d1000000000000000000000000ca87dfe624d3fc05abcceeac9d50ec3f7a3541d1000000000000000000000000000000000000000000000000001943d81419d2c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -868,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d75741e7f919fe1ede40efcf920ff878de08a832000000000000000000000000d75741e7f919fe1ede40efcf920ff878de08a83200000000000000000000000000000000000000000000000000ea21ccda4fe51800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -878,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000064895794c76167dd1566646357592be45893de9800000000000000000000000064895794c76167dd1566646357592be45893de9800000000000000000000000000000000000000000000000000592d824a2ce18d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -881,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a7ce82898efc2afc8fe6e5bfa08c6f96536222a1000000000000000000000000a7ce82898efc2afc8fe6e5bfa08c6f96536222a10000000000000000000000000000000000000000000000000019945ca262000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -887,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef4b2f4ac237a4d52c6c3ae4e425cb174c583bf8000000000000000000000000ef4b2f4ac237a4d52c6c3ae4e425cb174c583bf800000000000000000000000000000000000000000000000000215f6fcde8180000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -889,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000033d8b1655fa39d85ede7fdf89f98b0394166005000000000000000000000000033d8b1655fa39d85ede7fdf89f98b039416600500000000000000000000000000000000000000000000000000429d069189e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -890,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bef78bef9f383bf3bb5e337cec7a4d1160a7fa11000000000000000000000000bef78bef9f383bf3bb5e337cec7a4d1160a7fa1100000000000000000000000000000000000000000000000001617d9b5e28da0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -891,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000091f10cffdeb9701f2a03d72ff309fb08857a9b4900000000000000000000000091f10cffdeb9701f2a03d72ff309fb08857a9b49000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -892,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a949f950d4ed54822eda2a09a67131e2cbd9d4d7000000000000000000000000a949f950d4ed54822eda2a09a67131e2cbd9d4d700000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -893,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b9e62c014d644aebde25c253d0d8e3a40c83de47000000000000000000000000b9e62c014d644aebde25c253d0d8e3a40c83de47000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -898,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ed1d5da0059f42ad19fb9837f0ba7fdc674fe877000000000000000000000000ed1d5da0059f42ad19fb9837f0ba7fdc674fe877000000000000000000000000000000000000000000000000000efc33ae0b787900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -901,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000daccce559a0571083556f39d05b177579613d83b000000000000000000000000daccce559a0571083556f39d05b177579613d83b0000000000000000000000000000000000000000000000000000922936fa9c7c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -902,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008ffc862d7954dbae096d2d1402c5a0aca1e45c890000000000000000000000008ffc862d7954dbae096d2d1402c5a0aca1e45c89000000000000000000000000000000000000000000000000003fb6b7148a826000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -916,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000084e3e0f568ed68b4f6827fe797444b3d5b1fd8b500000000000000000000000084e3e0f568ed68b4f6827fe797444b3d5b1fd8b5000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -918,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3de285e0dd68d90856007ba52bc2a26d6f70b6e000000000000000000000000a3de285e0dd68d90856007ba52bc2a26d6f70b6e00000000000000000000000000000000000000000000000003ecd513c54a24f200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -920,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000bb50690db3897ca5b1f63cff6e0c061b93f9bfbd000000000000000000000000bb50690db3897ca5b1f63cff6e0c061b93f9bfbd0000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x6e4bcfbf482237019641baefddee70e0d83f3bf05bbee8908f270dcda0333189,2022-06-22 09:54:41.000 UTC,0,true -922,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000022536213791b04d8201ba219665dab3835d993f300000000000000000000000022536213791b04d8201ba219665dab3835d993f3000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -924,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000ca4a4e011bdeb6e5cbc229b882ee20ad3231096a000000000000000000000000000000000000000000000000431cc2c4404ddaa8,,,1,true -927,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d364c5c6c803feae75db05ac248fd9dbcc88c210000000000000000000000000d364c5c6c803feae75db05ac248fd9dbcc88c21000000000000000000000000000000000000000000000000003b0aa9caaa432d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -929,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d64d37bdad19aa59d9c43ff4f756f19809bfd7610000000000000000000000000000000000000000000000001bc16d674ec80000,,,1,true -932,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000cde4d4fa46fe2878c6b0530c9b9ac9ab87a380390000000000000000000000000000000000000000000000254c3a5a4cbc5a1a6a,,,1,true -934,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a908362a06b3dbf4496f7d4a298060aaf4307a50000000000000000000000000a908362a06b3dbf4496f7d4a298060aaf4307a50000000000000000000000000000000000000000000000000020aa7d90d1230000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -935,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e2be318532598d2abf8cdb463c21847bae969580000000000000000000000008e2be318532598d2abf8cdb463c21847bae9695800000000000000000000000000000000000000000000000000f8b0a10e47000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -936,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d7e630afcf128feb8b9071a8412914478c00c22a0000000000000000000000000000000000000000000000021a085ff4c4dc3f8f,0x292ba9349489c85415df5cc382ab5a67fd5c9683c2c18316cba1349d1688531e,2022-01-07 08:02:58.000 UTC,0,true -937,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1ade89bb702737a2d5a70f50c00360e1fc1ec5c000000000000000000000000c1ade89bb702737a2d5a70f50c00360e1fc1ec5c00000000000000000000000000000000000000000000000000ed625104278f8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -940,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7a7bd2c1f3c25b0420e71b7fa85fe03728392b6000000000000000000000000f7a7bd2c1f3c25b0420e71b7fa85fe03728392b600000000000000000000000000000000000000000000000006a94d74f430000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -942,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3fb28778630b99d76e4e4a68be58b50c38792a0000000000000000000000000d3fb28778630b99d76e4e4a68be58b50c38792a00000000000000000000000000000000000000000000000000058d15e1762800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -943,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000ed963afed4188993754c045f2f7055d19a7a9da600000000000000000000000000000000000000000000000113ad12516d81cd00,,,1,true -950,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004b2d5adcda64f8167c723105a8bccc542766208e0000000000000000000000004b2d5adcda64f8167c723105a8bccc542766208e000000000000000000000000000000000000000000000000005ac8162691fb7600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -953,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000082adf06307538950bee34802c094aaf9114a338200000000000000000000000082adf06307538950bee34802c094aaf9114a33820000000000000000000000000000000000000000000000000011df27237b55ab00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -955,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e4ebb04b785136d815a0799018f497dc17984f98000000000000000000000000e4ebb04b785136d815a0799018f497dc17984f98000000000000000000000000000000000000000000000000004801933a55312000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -958,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000009e29df3900f4ea3053e183cddb965f5a5b4559b00000000000000000000000009e29df3900f4ea3053e183cddb965f5a5b4559b00000000000000000000000000000000000000000000000000397e2a6ba1cf0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -960,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000614cc7e2fad0a7565f10346c3b9430527abd93e3000000000000000000000000614cc7e2fad0a7565f10346c3b9430527abd93e3000000000000000000000000000000000000000000000000014d3dc45fb7edf100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -961,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e87e162ca440a1bc68f3e9ff6cba6f71c14e2060000000000000000000000000e87e162ca440a1bc68f3e9ff6cba6f71c14e206000000000000000000000000000000000000000000000000003610277d29410000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -963,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d16451a4b73e778bfec126025ba79716a17e32d0000000000000000000000003d16451a4b73e778bfec126025ba79716a17e32d000000000000000000000000000000000000000000000000003c67b5c3f5164000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -965,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009ff8c5a477faac59fda54b7c517d4dc1674ebe560000000000000000000000009ff8c5a477faac59fda54b7c517d4dc1674ebe560000000000000000000000000000000000000000000000000000f233819ffe0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -966,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000079700e477be49b579a9984bb11edaadadbe9474900000000000000000000000079700e477be49b579a9984bb11edaadadbe94749000000000000000000000000000000000000000000000000087727c4a0fd000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -969,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da0e0ada73f37744803cb481b41c6d48265c06c8000000000000000000000000da0e0ada73f37744803cb481b41c6d48265c06c80000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -974,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000002526ce6014e8c17aedea915fa7470d4b780ade980000000000000000000000002526ce6014e8c17aedea915fa7470d4b780ade98000000000000000000000000000000000000000000000010af192ca5e4c4158a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -976,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f567a6ca93dec3203344094cb90f035cc853a248000000000000000000000000f567a6ca93dec3203344094cb90f035cc853a2480000000000000000000000000000000000000000000000000003a12138149e4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -987,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e577e9ee5f508f8e859f4ecd941797a3e1b6fa20000000000000000000000004e577e9ee5f508f8e859f4ecd941797a3e1b6fa2000000000000000000000000000000000000000000000000001f144334de77ad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -989,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000038788c3718faf8e4d783ba97925417de795fe8a000000000000000000000000038788c3718faf8e4d783ba97925417de795fe8a00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -996,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e9a88971e957abb41bae4e2677cae258f0c1e760000000000000000000000006e9a88971e957abb41bae4e2677cae258f0c1e76000000000000000000000000000000000000000000000000001bb7a56f93966400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -997,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d925cbbc53f8d70a05eba2f7abf4eb35d95f5180000000000000000000000000d925cbbc53f8d70a05eba2f7abf4eb35d95f5180000000000000000000000000000000000000000000000000004b74275052fb2900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -999,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f0eaf0c77c1362ad4de668755be5559eb47cfb9f000000000000000000000000f0eaf0c77c1362ad4de668755be5559eb47cfb9f000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1000,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000004c78dfd78482e2c7321d8d14cfae862918cf8b0f00000000000000000000000000000000000000000000000094c152e23fe5b317,,,1,true -1001,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a17479c80de5502e5f5baef0bde186b2a251c5d0000000000000000000000002a17479c80de5502e5f5baef0bde186b2a251c5d00000000000000000000000000000000000000000000000000416d1d7776cba800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1005,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000140901c4487b1ea5a23271aa3debe02a42bcb3ed000000000000000000000000140901c4487b1ea5a23271aa3debe02a42bcb3ed0000000000000000000000000000000000000000000000000042d9087150f4c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1006,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000337d1e27ac8a9c7b87bb4f07d409594142575388000000000000000000000000337d1e27ac8a9c7b87bb4f07d4095941425753880000000000000000000000000000000000000000000000000032d39032695dd600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1008,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e987cbfd0b8af69c93ea544db8b8efdd4aba0de0000000000000000000000008e987cbfd0b8af69c93ea544db8b8efdd4aba0de0000000000000000000000000000000000000000000000000038b3978b55a45800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1012,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076a7df68eed6bbc1d68543b7a471d41158803e9400000000000000000000000076a7df68eed6bbc1d68543b7a471d41158803e9400000000000000000000000000000000000000000000000000053fb7b9db6b3200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1014,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000461b1938a232327a07bf47e202c5f6a27306812d000000000000000000000000461b1938a232327a07bf47e202c5f6a27306812d000000000000000000000000000000000000000000000000000ad6b9d7e928e700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1022,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000006d7881358cf903f2c2db94a32d5c6ae9bc611f600000000000000000000000006d7881358cf903f2c2db94a32d5c6ae9bc611f60000000000000000000000000000000000000000000000000036b0cef2e6635200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1023,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000008c843233f4ac89fd1f98825c3707b023f8427c280000000000000000000000000000000000000000000000000de0b6b3a7640000,,,1,true -1025,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c330440814443d4774ba112819392c366f1bd978000000000000000000000000c330440814443d4774ba112819392c366f1bd9780000000000000000000000000000000000000000000000000068dd95d320801000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1027,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000e19e26becff917f057ebb35217fdf4ab3252dffe000000000000000000000000e19e26becff917f057ebb35217fdf4ab3252dffe000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1028,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000c4f1080f341e9bff5c2411745bb8e22221a6a5c3000000000000000000000000c4f1080f341e9bff5c2411745bb8e22221a6a5c300000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1029,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000ba2dfc38fdf8a5f8dadf1e1c4ab4f73348bbda57000000000000000000000000ba2dfc38fdf8a5f8dadf1e1c4ab4f73348bbda57000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1030,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000a0a961674f7eb74da9ef4087bb262b35a5191a82000000000000000000000000a0a961674f7eb74da9ef4087bb262b35a5191a82000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1031,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000848640772aa8b981c520084473c31aaad491ca75000000000000000000000000848640772aa8b981c520084473c31aaad491ca75000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1032,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000003af154c87f854c934fc2a4fe45265dbce59bd4a30000000000000000000000003af154c87f854c934fc2a4fe45265dbce59bd4a3000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1033,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000396546635b56c60d3597e5c558490754d20bc46c000000000000000000000000396546635b56c60d3597e5c558490754d20bc46c00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1034,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000007e320d04c059aa33f7dcfe3c3add07be5a31b8900000000000000000000000007e320d04c059aa33f7dcfe3c3add07be5a31b89000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1036,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000072713894bd21d2dea4c8f4eb6d0237af8fd2feb200000000000000000000000072713894bd21d2dea4c8f4eb6d0237af8fd2feb2000000000000000000000000000000000000000000000000007fce083dfbf71d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1043,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff6e3780b0b8645b797a889feebe876c2fccd06d000000000000000000000000ff6e3780b0b8645b797a889feebe876c2fccd06d000000000000000000000000000000000000000000000000000f1186da096b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1047,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009b707a58ee408ac8334eaedfc9988deb12c98ac30000000000000000000000009b707a58ee408ac8334eaedfc9988deb12c98ac3000000000000000000000000000000000000000000000000000952e470f45afe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1048,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b023d464f60004438fb4a31014314febfebf98e4000000000000000000000000b023d464f60004438fb4a31014314febfebf98e400000000000000000000000000000000000000000000000000358795e50ffa6f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1049,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b43300442baec524da4546f71548d28a391c2a1a000000000000000000000000b43300442baec524da4546f71548d28a391c2a1a0000000000000000000000000000000000000000000000000097fc871921dce500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1050,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000018fd93c3bb72d41662d858afffb740c8f73a214a00000000000000000000000018fd93c3bb72d41662d858afffb740c8f73a214a0000000000000000000000000000000000000000000000000046f0f4de7cadff00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1052,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009efd9fc88d4b950ae11411005ffe81efcf1b96350000000000000000000000009efd9fc88d4b950ae11411005ffe81efcf1b9635000000000000000000000000000000000000000000000000007cd38292ddccac00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1053,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000eaed802a117a58a5e644a670a1b2d99be459be50000000000000000000000000eaed802a117a58a5e644a670a1b2d99be459be500000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1054,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fd8f43f82697e17c507cfdfebf75b48d8db149b3000000000000000000000000fd8f43f82697e17c507cfdfebf75b48d8db149b3000000000000000000000000000000000000000000000000005c868c3fe6c2e200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xaff2309b92b6577ef9f94fcdfaa2d40f280a87386dafaf4f98b298c98a81d141,2022-11-02 12:32:11.000 UTC,0,true -1055,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007e54ff8766bb1c0d6d978495454e7b2fb041faed0000000000000000000000007e54ff8766bb1c0d6d978495454e7b2fb041faed00000000000000000000000000000000000000000000000000305591732cdfd500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1058,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002bab814da5c1618815998f3e929ed11c24d7da380000000000000000000000002bab814da5c1618815998f3e929ed11c24d7da38000000000000000000000000000000000000000000000000001465c4d1332b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1063,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000353a3b43d34247cbc3f8092187cdd849b5b31a77000000000000000000000000353a3b43d34247cbc3f8092187cdd849b5b31a7700000000000000000000000000000000000000000000000000ab59003f284d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1065,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007afbac5f8f342ca0fba2019e2bcb0e0c57021c170000000000000000000000007afbac5f8f342ca0fba2019e2bcb0e0c57021c170000000000000000000000000000000000000000000000000c7d713b49da000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1072,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000ee9d1d1eb00e090ff0a7f7c9a835007a623a249f000000000000000000000000ee9d1d1eb00e090ff0a7f7c9a835007a623a249f0000000000000000000000000000000000000000000000000000000002160ec000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1074,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000001c9e6a87b6ebf2f7099b04ac2fc4b6f0005688d30000000000000000000000001c9e6a87b6ebf2f7099b04ac2fc4b6f0005688d300000000000000000000000000000000000000000000000000000000004c4b4000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1075,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000000e6b811ace2fad511e2f35d702a2cd93f703b71b0000000000000000000000000e6b811ace2fad511e2f35d702a2cd93f703b71b00000000000000000000000000000000000000000000000000000000004c4b4000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1081,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000031c09f0616532f7a6f33d9ee4e1f45ea529481af00000000000000000000000031c09f0616532f7a6f33d9ee4e1f45ea529481af00000000000000000000000000000000000000000000000000aac7dfc7dd62a600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1086,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007455898a8f461ceb5510c3f264b7290499501b5b0000000000000000000000007455898a8f461ceb5510c3f264b7290499501b5b00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1087,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000025fb6a2730570702f9b2b5eba96a3cbb5e5b7fc300000000000000000000000025fb6a2730570702f9b2b5eba96a3cbb5e5b7fc30000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1088,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a7debb68f2684074ec4354b68e36c34af363fd57000000000000000000000000a7debb68f2684074ec4354b68e36c34af363fd57000000000000000000000000000000000000000000000000026ac2d90ac6917c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1089,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fbfb506a75cb4c32e6ed7490335de139ee0f69c0000000000000000000000000fbfb506a75cb4c32e6ed7490335de139ee0f69c0000000000000000000000000000000000000000000000000008a176a7ce1acba00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1095,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000d35d60b1746caec2289c892eac7351d66d63455b000000000000000000000000d35d60b1746caec2289c892eac7351d66d63455b00000000000000000000000000000000000000000000000150328c82881d9f7a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1096,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a9786da5d3abb6c404b79df28b7f402e58ef7c5b000000000000000000000000a9786da5d3abb6c404b79df28b7f402e58ef7c5b0000000000000000000000000000000000000000000000000398c13ef7a9113900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1097,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000327b9dee1830f8201efa751fd96f7b1ad0b300a1000000000000000000000000327b9dee1830f8201efa751fd96f7b1ad0b300a1000000000000000000000000000000000000000000000000cbdacd745c23cceb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xc9d484c7376c5ce6e8357e9c349536f3d32229135d97337e5c3282e173fd5b98,2022-02-26 07:10:11.000 UTC,0,true -1099,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59900000000000000000000000068f180fcce6836688e9084f035309e29bf0a209500000000000000000000000054174d013e49a80b91ee14f819cadbf59fdaea1400000000000000000000000054174d013e49a80b91ee14f819cadbf59fdaea14000000000000000000000000000000000000000000000000000000000008cd7100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1100,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000092eead2ea4b7044692dfdd524008c36c03b632fd00000000000000000000000092eead2ea4b7044692dfdd524008c36c03b632fd000000000000000000000000000000000000000000000000002b42758471029400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1103,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000000f5aa47a543f7e083f99d4b978653ec9abb621b30000000000000000000000000f5aa47a543f7e083f99d4b978653ec9abb621b3000000000000000000000000000000000000000000000001158e460913d0000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1104,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000536a32e1448cc9e8910d319d8d4639abfb13fbd9000000000000000000000000536a32e1448cc9e8910d319d8d4639abfb13fbd900000000000000000000000000000000000000000000000000591d87458a455a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1105,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b9d8b2ee00469d536cff87ebcd96a9a17ebb1fd7000000000000000000000000b9d8b2ee00469d536cff87ebcd96a9a17ebb1fd7000000000000000000000000000000000000000000000000001d6516992cd65c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1106,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000b9d8b2ee00469d536cff87ebcd96a9a17ebb1fd7000000000000000000000000b9d8b2ee00469d536cff87ebcd96a9a17ebb1fd70000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1107,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002cc8e16afefc8819fa51bd6206632d97a306f8320000000000000000000000002cc8e16afefc8819fa51bd6206632d97a306f83200000000000000000000000000000000000000000000000003537258ab134b2f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1115,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000006487ab75368b2d73a0aee92399253e41bc4487a2000000000000000000000000000000000000000000000001edff8724f21d6d8c,,,1,true -1117,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cfdda5827ed343b94e96a8fef9186646477753ac000000000000000000000000cfdda5827ed343b94e96a8fef9186646477753ac000000000000000000000000000000000000000000000000008c2224c367840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1118,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1cff704c6e6ce459e3e1544a9533cccbdad7b99000000000000000000000000f1cff704c6e6ce459e3e1544a9533cccbdad7b9900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1119,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d801699678375e43d14f67453e24f17ebbaef8a0000000000000000000000000d801699678375e43d14f67453e24f17ebbaef8a00000000000000000000000000000000000000000000000000ac0779dac4ca4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1120,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e421b5c6680bb06f25e0f8dd138c96913d2c1599000000000000000000000000e421b5c6680bb06f25e0f8dd138c96913d2c1599000000000000000000000000000000000000000000000000002137cc6296179500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1125,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000002e8c157bd8bfede1beafc20c68981ee0053da0ca0000000000000000000000002e8c157bd8bfede1beafc20c68981ee0053da0ca000000000000000000000000000000000000000000000004a14257f7a4baaeb800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1126,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000c297434911d5a22eef2925a63e78d211a77c31c40000000000000000000000000000000000000000000000056bc75e2d6310001d,0x43059fc4e3f0fdb2a5a047225f80b2af5063aa96226f6785ac247bea7710d950,2022-02-21 21:34:49.000 UTC,0,true -1130,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e4e076ec8c75afea19a8ae686104d3a819ce8bd5000000000000000000000000e4e076ec8c75afea19a8ae686104d3a819ce8bd5000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1149,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000ee9d1d1eb00e090ff0a7f7c9a835007a623a249f000000000000000000000000ee9d1d1eb00e090ff0a7f7c9a835007a623a249f0000000000000000000000000000000000000000000000000000000000e4e1c000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1157,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000016613d9c9f1fec0b1e08233602d7dedf27c5c86800000000000000000000000016613d9c9f1fec0b1e08233602d7dedf27c5c868000000000000000000000000000000000000000000000000012127e9d6e2624c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1159,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a1037e4c9599ca3b64193b3f255e3b47890caae0000000000000000000000000a1037e4c9599ca3b64193b3f255e3b47890caae00000000000000000000000000000000000000000000000000af2616bb6d400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1163,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ef9e17f94a39daedc52dd45b4354a9b49991d350000000000000000000000007ef9e17f94a39daedc52dd45b4354a9b49991d3500000000000000000000000000000000000000000000000000b9bfcc07ade21e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1164,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000264d8292fe15333f0ac54b859b5397c4d4bcbabd000000000000000000000000264d8292fe15333f0ac54b859b5397c4d4bcbabd000000000000000000000000000000000000000000000000015221e1bab1164c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1166,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000009f3716cb735a5caf42998c420f77a9c8a13fd3a40000000000000000000000009f3716cb735a5caf42998c420f77a9c8a13fd3a4000000000000000000000000000000000000000000000002b5e3af16b188000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1169,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000dbf6045e565f0a2ad62bca011b9878c1a4d111b6000000000000000000000000000000000000000000000004e72df8d23ac74482,,,1,true -1170,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000e8b65b125afd293cdb2b496c4035ebf63e4d56a9000000000000000000000000e8b65b125afd293cdb2b496c4035ebf63e4d56a9000000000000000000000000000000000000000000000000cde8cfe6dadc110200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1171,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000010d823b4818f2454d57a33311eab952c87f40fa90000000000000000000000000000000000000000000000007b21c4eec19fa8d2,,,1,true -1173,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001854bb7718e8c5216de23d2e3eb5207d6d6d1a3a0000000000000000000000001854bb7718e8c5216de23d2e3eb5207d6d6d1a3a000000000000000000000000000000000000000000000000001e1c39e39c058700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1174,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000c5cf11a157937d8ead1c0c3782b52f820f9bf880000000000000000000000000000000000000000000000003df1c2e53242c4ee8,,,1,true -1175,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000ac87fbbf35e5504bee8daec50bef75d43ce20d920000000000000000000000000000000000000000000000004687a54cf7eba7b0,,,1,true -1176,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005989ed76aa0ffc2d6b554d3867ae503e1e83f9800000000000000000000000005989ed76aa0ffc2d6b554d3867ae503e1e83f980000000000000000000000000000000000000000000000000007618a9245c66e400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x63878412d8bdc9a60b7a7f18aa5d1873578115ee55fd11e60f677f15fb87b899,2022-04-17 07:30:44.000 UTC,0,true -1178,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003374af09950ad2f02524f2edec52ecd62846c5080000000000000000000000003374af09950ad2f02524f2edec52ecd62846c508000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1179,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002127575c191bd304072ee2325c007758243f6c2c0000000000000000000000002127575c191bd304072ee2325c007758243f6c2c000000000000000000000000000000000000000000000000004e48214fce08dc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1183,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bb72b4fd0e3de5e2794cbf55745102a047aeeb75000000000000000000000000bb72b4fd0e3de5e2794cbf55745102a047aeeb7500000000000000000000000000000000000000000000000001388521ac47684600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1184,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002585d2b16bda2dbd183f2c3f0da9d38917b0a32a0000000000000000000000002585d2b16bda2dbd183f2c3f0da9d38917b0a32a000000000000000000000000000000000000000000000000004e1b760415c38500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1185,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d4cc652125ec9fd6db625f78f2a8bd9c3ba65db0000000000000000000000000d4cc652125ec9fd6db625f78f2a8bd9c3ba65db0000000000000000000000000000000000000000000000000afcb78257a172d700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1186,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005285a30ecdc23188a46c0b0d9b16aa7c9490a0610000000000000000000000005285a30ecdc23188a46c0b0d9b16aa7c9490a0610000000000000000000000000000000000000000000000000080c5f981ab9bce00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1192,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bed68d4550c1cb3e57eb350031a38323545add92000000000000000000000000bed68d4550c1cb3e57eb350031a38323545add92000000000000000000000000000000000000000000000000007c186d5b74baad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1193,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000002f7b9f2f5f00dd2293b159b6e580a01e8da7acb10000000000000000000000002f7b9f2f5f00dd2293b159b6e580a01e8da7acb1000000000000000000000000000000000000000000000000000000001dcd650000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1197,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000d7b1d6a7f71a9658a41b6d918ac89d8ff849d9f0000000000000000000000000d7b1d6a7f71a9658a41b6d918ac89d8ff849d9f00000000000000000000000000000000000000000000000000000000006756d0500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1198,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000061fd58a054249e2f2360bdf2b84751c453c5415c00000000000000000000000061fd58a054249e2f2360bdf2b84751c453c5415c0000000000000000000000000000000000000000000000000000000010c96f0d00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1199,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061fd58a054249e2f2360bdf2b84751c453c5415c00000000000000000000000061fd58a054249e2f2360bdf2b84751c453c5415c00000000000000000000000000000000000000000000000000301819e71d72f000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1200,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000c6a45502408c9387442a2c7311fadb9fcfe3894c000000000000000000000000c6a45502408c9387442a2c7311fadb9fcfe3894c000000000000000000000000000000000000000000000000000000000fcff4c500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1201,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6a45502408c9387442a2c7311fadb9fcfe3894c000000000000000000000000c6a45502408c9387442a2c7311fadb9fcfe3894c000000000000000000000000000000000000000000000000002c89cbf199b81400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1202,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000000a92380b1ca69ac47d1ea14af62d85a54461c7770000000000000000000000000a92380b1ca69ac47d1ea14af62d85a54461c7770000000000000000000000000000000000000000000000000000000006eaf84f00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1203,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a92380b1ca69ac47d1ea14af62d85a54461c7770000000000000000000000000a92380b1ca69ac47d1ea14af62d85a54461c7770000000000000000000000000000000000000000000000000012754918ea8e4b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1204,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d6d92fc686d58b39a0e340364f7d2c476042d210000000000000000000000000d6d92fc686d58b39a0e340364f7d2c476042d21000000000000000000000000000000000000000000000000000e1825bac0c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1205,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000003b9288ba5dcc2051b1cd243bbaeddec8149ec50c0000000000000000000000003b9288ba5dcc2051b1cd243bbaeddec8149ec50c000000000000000000000000000000000000000000000000000000000661167000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1206,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003b9288ba5dcc2051b1cd243bbaeddec8149ec50c0000000000000000000000003b9288ba5dcc2051b1cd243bbaeddec8149ec50c000000000000000000000000000000000000000000000000000d3b583ed1457000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1208,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000e12e1354ce5b1b9f34fbdfb9a1d5c202ba772a8b000000000000000000000000e12e1354ce5b1b9f34fbdfb9a1d5c202ba772a8b000000000000000000000000000000000000000000000000000000001d2dcfbc00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1209,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000b9e28d206a8b83d49adc829cf9436967e2271cbb000000000000000000000000b9e28d206a8b83d49adc829cf9436967e2271cbb00000000000000000000000000000000000000000000000000000000257a9b9000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1211,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b4fb4c2c91735cae6c2f4460351fbc2cf7fefeeb000000000000000000000000b4fb4c2c91735cae6c2f4460351fbc2cf7fefeeb00000000000000000000000000000000000000000000000000131459b9a8e14000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1213,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032fbefd8c98f4c0e5a32065d738311a40753cf6800000000000000000000000032fbefd8c98f4c0e5a32065d738311a40753cf680000000000000000000000000000000000000000000000000031bced02db000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1215,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000520fa873d99b54d9b2b81858d5a875105bdc89ce000000000000000000000000520fa873d99b54d9b2b81858d5a875105bdc89ce0000000000000000000000000000000000000000000000000b90ffea65f5212e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1219,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9b40f964ffd09289eb5673802424662bc810d48000000000000000000000000f9b40f964ffd09289eb5673802424662bc810d480000000000000000000000000000000000000000000000005f5cab4e3629e00900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x60fa219d00468668aea56eb572d0662ea1c315f27a199151706318a644549697,2021-11-26 05:15:37.000 UTC,0,true -1222,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2ef0d026b5723bdeb4dc65c1e9e9847b4c8df36000000000000000000000000a2ef0d026b5723bdeb4dc65c1e9e9847b4c8df360000000000000000000000000000000000000000000000000044d552eb89410000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1232,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ee20f85dd3f826700a6a42af4873a04af8ac6d75000000000000000000000000ee20f85dd3f826700a6a42af4873a04af8ac6d75000000000000000000000000000000000000000000000000013ef9cf04b74c1900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1233,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d7f583e20351d0c6d1012411522f7f1191233500000000000000000000000007d7f583e20351d0c6d1012411522f7f119123350000000000000000000000000000000000000000000000000001f8dc842d1030000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1239,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000000afe81bbbbf6ef34080e6e7431933ca61760c0300000000000000000000000000afe81bbbbf6ef34080e6e7431933ca61760c0300000000000000000000000000000000000000000000000000000000808840c500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1240,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004673d1246248976ce891a39baf2b18fb54bad3f00000000000000000000000004673d1246248976ce891a39baf2b18fb54bad3f000000000000000000000000000000000000000000000000000002d79883d200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1244,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fbd935c9972b6a4c0b6f7c6f650996677bf6e0a0000000000000000000000007fbd935c9972b6a4c0b6f7c6f650996677bf6e0a00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1245,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000681f284c82eb81054d6696acea2020fdc68f7ca3000000000000000000000000681f284c82eb81054d6696acea2020fdc68f7ca3000000000000000000000000000000000000000000000000000d46de5bad330000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1247,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001ec9dd67af275fa69b6ecf7e4c3c4c0968a28fa80000000000000000000000001ec9dd67af275fa69b6ecf7e4c3c4c0968a28fa800000000000000000000000000000000000000000000000000292105c3ffa10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1248,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002178be208cd14257c3ff58a164a25fe510f14f9a0000000000000000000000002178be208cd14257c3ff58a164a25fe510f14f9a0000000000000000000000000000000000000000000000000096f5388ad3d8d900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x59c6a1dc4b43c8a3a58854e88fead24b1c242705ea4b640c72a796d4a0c8e4e8,2022-04-28 09:29:56.000 UTC,0,true -1251,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000023af55034fe477c99c8eaa9586e6a21042bd39f000000000000000000000000023af55034fe477c99c8eaa9586e6a21042bd39f0000000000000000000000000000000000000000000000000011cf9cc0d600c9000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1252,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c18e70163dfdb13e4057f67fbd1f4ad9c231653b000000000000000000000000c18e70163dfdb13e4057f67fbd1f4ad9c231653b00000000000000000000000000000000000000000000000001f61d86f432866000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1253,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc6f6e3d3948def0199f111b3a272555b0b18641000000000000000000000000cc6f6e3d3948def0199f111b3a272555b0b18641000000000000000000000000000000000000000000000000005166584f96c80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1261,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009241f27daffd0bb1df4f2a022584dd6c77843e640000000000000000000000009241f27daffd0bb1df4f2a022584dd6c77843e64000000000000000000000000000000000000000000000000013fbe85edc9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1268,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000072872adaea835f855d6303c130c7531208a7664200000000000000000000000072872adaea835f855d6303c130c7531208a76642000000000000000000000000000000000000000000000000004036246a43f55f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1272,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000086c3d2697e675bb069a8c2d549f774cf73dcb04700000000000000000000000086c3d2697e675bb069a8c2d549f774cf73dcb04700000000000000000000000000000000000000000000000000201eef731c6a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1274,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e891f3072ea7c072e063f04ae78feed357256adc000000000000000000000000e891f3072ea7c072e063f04ae78feed357256adc00000000000000000000000000000000000000000000000000305fc5c17163dc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1275,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e843e87405219c50590da9f1c2e373b1ffc46cd2000000000000000000000000e843e87405219c50590da9f1c2e373b1ffc46cd2000000000000000000000000000000000000000000000000018785e89a3168ff00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1276,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009da6e45e26a972cb86528abaeed47d010991d5650000000000000000000000009da6e45e26a972cb86528abaeed47d010991d565000000000000000000000000000000000000000000000000015947453f72902b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1277,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd7b2c3e167a1ffbda56917e13f0802affc326d5000000000000000000000000bd7b2c3e167a1ffbda56917e13f0802affc326d500000000000000000000000000000000000000000000000000237d2a77824f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1280,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007774a41c4dc14702c443140015f6aefc5989ff7f0000000000000000000000007774a41c4dc14702c443140015f6aefc5989ff7f0000000000000000000000000000000000000000000000000066ba2a33075c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2205674f3dab6aa7a87e02575d31492aa2f849164a56b0ec2213ed1726a1c3ab,2022-08-24 21:54:45.000 UTC,0,true -1281,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e02e1dd6585b294b029640a929cfb11fd945f3d0000000000000000000000008e02e1dd6585b294b029640a929cfb11fd945f3d000000000000000000000000000000000000000000000000002393510ea1ed0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1282,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000084c0430f3564520dcde45c3dfd7ceb79372e4fa300000000000000000000000084c0430f3564520dcde45c3dfd7ceb79372e4fa30000000000000000000000000000000000000000000000000026c7429d125c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1286,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ffe50d1f402276e73e581fb275f623c7e215f970000000000000000000000003ffe50d1f402276e73e581fb275f623c7e215f970000000000000000000000000000000000000000000000000023c12eb4de590000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1287,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f2a46bd8bf27c5c1d0531dc6a61ccf6810c70127000000000000000000000000f2a46bd8bf27c5c1d0531dc6a61ccf6810c701270000000000000000000000000000000000000000000000000023eb6c86985b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1290,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa26c9b0e44ae0a6eb5a7019ef35defbac52f40b000000000000000000000000aa26c9b0e44ae0a6eb5a7019ef35defbac52f40b00000000000000000000000000000000000000000000000000248fea46a6330000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1291,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc05c664843bb1840e7bce0590ccdd7ce4145369000000000000000000000000bc05c664843bb1840e7bce0590ccdd7ce414536900000000000000000000000000000000000000000000000000f8b0a10e47000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1292,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000009bac86db92e864e455a9ed08fac10c540b5fca4f0000000000000000000000000000000000000000000000033306863a53bee088,,,1,true -1293,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009f032d8bbc918f7535256ab4fc6d8042f4f69f860000000000000000000000009f032d8bbc918f7535256ab4fc6d8042f4f69f8600000000000000000000000000000000000000000000000000231cf5a42f470000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1294,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000001066f6f80fd2717594959a6cf5b24c4e2a348f800000000000000000000000001066f6f80fd2717594959a6cf5b24c4e2a348f8000000000000000000000000000000000000000000000000002509ce3d245b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1297,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000205319257fc9772c0add32950fac182a74dbeb3c000000000000000000000000205319257fc9772c0add32950fac182a74dbeb3c0000000000000000000000000000000000000000000000000022ff08ee5c260000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1298,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ca099a0636d7e9d1d347616ac822ff675e6e1e70000000000000000000000007ca099a0636d7e9d1d347616ac822ff675e6e1e7000000000000000000000000000000000000000000000000003ce662eae5882200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1300,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a79da05566ea8ffd181c45efd6f484616f6eadef000000000000000000000000a79da05566ea8ffd181c45efd6f484616f6eadef00000000000000000000000000000000000000000000000001cac0897fecfa8600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1301,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f6cd700ecb0d37cd7cf6eaddd6b60a8ce44942c9000000000000000000000000f6cd700ecb0d37cd7cf6eaddd6b60a8ce44942c90000000000000000000000000000000000000000000000000018e8d8a3ef3a8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1302,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fbd935c9972b6a4c0b6f7c6f650996677bf6e0a0000000000000000000000007fbd935c9972b6a4c0b6f7c6f650996677bf6e0a00000000000000000000000000000000000000000000000000a4b14591901e7000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1303,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005592e2e200ea9435c840d53fcc60ab5f78574fc90000000000000000000000005592e2e200ea9435c840d53fcc60ab5f78574fc900000000000000000000000000000000000000000000000000c55b3a2dea3bf800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1304,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000006c15f3f8dd7418effc9090d54285f8e2af4d94a700000000000000000000000000000000000000000000000043f04042833e4ca4,,,1,true -1305,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000042ce658f25e182772cfe8b905f0971ef513f839100000000000000000000000042ce658f25e182772cfe8b905f0971ef513f839100000000000000000000000000000000000000000000000002b036e8e2deec8d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1308,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000b17237ee9553b7b07c0622cc436d97694cbbb53a000000000000000000000000b17237ee9553b7b07c0622cc436d97694cbbb53a0000000000000000000000000000000000000000000000000000000009c699c800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1311,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f4d9c88c924079422e5ad77ee64b967ce4efd828000000000000000000000000f4d9c88c924079422e5ad77ee64b967ce4efd82800000000000000000000000000000000000000000000000000587ed569c7637e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1318,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d19f32620f647d08fa8b9a0fa5206fae15c0ed50000000000000000000000002d19f32620f647d08fa8b9a0fa5206fae15c0ed50000000000000000000000000000000000000000000000000093d286135fd7fb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1319,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000dda42f12b8b2ccc6717c053a2b772bad24b08cbd00000000000000000000000000000000000000000000000029a2241af62c0000,,,1,true -1321,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bac79de245633fcc4fb32c19bc0ac93f406c9950000000000000000000000000bac79de245633fcc4fb32c19bc0ac93f406c99500000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1325,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000011f3196443bfe5ad50513386e1c3826cbbd2d72f00000000000000000000000011f3196443bfe5ad50513386e1c3826cbbd2d72f00000000000000000000000000000000000000000000000000b8d560d0f4b8bd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1326,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa7ca3edcba0ebaf2eee83835881fb37710cfc87000000000000000000000000aa7ca3edcba0ebaf2eee83835881fb37710cfc8700000000000000000000000000000000000000000000000000b85e9e3992f5aa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1327,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000109bf98fabb56460bd1584e9410cf70982a80446000000000000000000000000109bf98fabb56460bd1584e9410cf70982a8044600000000000000000000000000000000000000000000000000b90497a830651700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1328,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ef540025be3d2c9932c4dcf7b9f45bf60dcb8a50000000000000000000000006ef540025be3d2c9932c4dcf7b9f45bf60dcb8a500000000000000000000000000000000000000000000000000b99942f9a1abee00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1329,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a1271284ba4a1c01ed016128738005131314b4a0000000000000000000000003a1271284ba4a1c01ed016128738005131314b4a000000000000000000000000000000000000000000000000002d381090ecae9000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1330,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000023cfbc88ebb82e730fcd1c35225d19da1958d80500000000000000000000000023cfbc88ebb82e730fcd1c35225d19da1958d80500000000000000000000000000000000000000000000000000b9ef7a2ded708200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1331,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008752df4018957d0ad6a769a37fadd75a6a744b430000000000000000000000008752df4018957d0ad6a769a37fadd75a6a744b4300000000000000000000000000000000000000000000000000b2f2fad44fbcab00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1333,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000034ebbe40cc5fa34140e8b3627d6743116ee2f3c800000000000000000000000034ebbe40cc5fa34140e8b3627d6743116ee2f3c800000000000000000000000000000000000000000000000000aecb5217508d9500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1334,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c94f16940c0fb741c938e247602b130fbed1ee24000000000000000000000000c94f16940c0fb741c938e247602b130fbed1ee2400000000000000000000000000000000000000000000000000ae4b51f08e869b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1335,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fefd123d721c9a1e712b342dc7f0317760dfb8ab000000000000000000000000fefd123d721c9a1e712b342dc7f0317760dfb8ab00000000000000000000000000000000000000000000000000adba174d8a277500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1336,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000064c263f0ff10b2cc940a7fad3f8b524792f39e0100000000000000000000000064c263f0ff10b2cc940a7fad3f8b524792f39e0100000000000000000000000000000000000000000000000000aee9f75b4d76c700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1339,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000098098214ad5b1b08cc9d94e32f056e9a0de1811000000000000000000000000098098214ad5b1b08cc9d94e32f056e9a0de18110000000000000000000000000000000000000000000000000005a20720d1a580c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1341,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000ad3532392b4a3d427f3af5c7dd3b3dd882f74439000000000000000000000000ad3532392b4a3d427f3af5c7dd3b3dd882f744390000000000000000000000000000000000000000000000003782dace9d90000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1344,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cfbe0b8d935d6b65856c2f0eb39689abc0312e45000000000000000000000000cfbe0b8d935d6b65856c2f0eb39689abc0312e45000000000000000000000000000000000000000000000000000c67a263bf47ef00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1345,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ddfba3aad19d3f466472b5ea8a5b0f77e59b4fc6000000000000000000000000ddfba3aad19d3f466472b5ea8a5b0f77e59b4fc6000000000000000000000000000000000000000000000000003d7e90b2e50e9900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1346,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fccd02660f1dfb2ce9d0f12e113da9a7aae8c071000000000000000000000000fccd02660f1dfb2ce9d0f12e113da9a7aae8c071000000000000000000000000000000000000000000000000015bc8bb5ee4fc6000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1348,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000ba63faeb8ccd03776b3118f4dab186c03aa05121000000000000000000000000ba63faeb8ccd03776b3118f4dab186c03aa051210000000000000000000000000000000000000000000000003782dace9d90000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1349,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c4676e5e99b823e54b3e6c32c8143bb441633eea000000000000000000000000c4676e5e99b823e54b3e6c32c8143bb441633eea000000000000000000000000000000000000000000000000001b60a02488d03a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1351,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be53bedb9c0989c56fc1f3da448783886283d22b000000000000000000000000be53bedb9c0989c56fc1f3da448783886283d22b000000000000000000000000000000000000000000000000001836e549dfab7500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1356,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032730120eeeb23d0e1bd4e16cc7c5247906382e000000000000000000000000032730120eeeb23d0e1bd4e16cc7c5247906382e0000000000000000000000000000000000000000000000000007a3ff2645cc48400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1357,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fbfb506a75cb4c32e6ed7490335de139ee0f69c0000000000000000000000000fbfb506a75cb4c32e6ed7490335de139ee0f69c000000000000000000000000000000000000000000000000000b33994503a2ab600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1358,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c388750a661cc0b99784bab2c55e1f38ff91643b000000000000000000000000c388750a661cc0b99784bab2c55e1f38ff91643b00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1360,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dadc03cd1b8b08b1bf60d3ef62bbe7f38ebeb216000000000000000000000000dadc03cd1b8b08b1bf60d3ef62bbe7f38ebeb216000000000000000000000000000000000000000000000000004c8d4405a4f87f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1366,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000257e746c20c91c84c06ca539675ff2981b35e35d000000000000000000000000257e746c20c91c84c06ca539675ff2981b35e35d000000000000000000000000000000000000000000000000002b0890e8c866b100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xcddbef2353c0d633879b9da8fdfdce83ef160a08864a9f60ed200315fc0581da,2022-05-28 14:53:49.000 UTC,0,true -1372,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004fa20d37e4dfbf3e8b22831f53ba028b753573950000000000000000000000004fa20d37e4dfbf3e8b22831f53ba028b7535739500000000000000000000000000000000000000000000000000a29fb3d5950e4500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1373,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000989d21bd4ab37e523f7347a2cc54ef824b2f23eb000000000000000000000000989d21bd4ab37e523f7347a2cc54ef824b2f23eb00000000000000000000000000000000000000000000000000a35d5697c301f500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1374,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001bdfe729e88070da6ae6b7bb9e85ce3c5fe204c30000000000000000000000001bdfe729e88070da6ae6b7bb9e85ce3c5fe204c300000000000000000000000000000000000000000000000000a1c9871d844ccf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1375,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cb019359cd737d13d6391a18443b8b8a847f120b000000000000000000000000cb019359cd737d13d6391a18443b8b8a847f120b00000000000000000000000000000000000000000000000000a1b6c6a421e0f400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1376,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f8cd600c59dfd1f60b4a9472805e5e6e074155d0000000000000000000000003f8cd600c59dfd1f60b4a9472805e5e6e074155d00000000000000000000000000000000000000000000000000a195cab4cdacdc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1377,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000024f2716cf24cc67f04b893049de5f3ef134c40d800000000000000000000000024f2716cf24cc67f04b893049de5f3ef134c40d800000000000000000000000000000000000000000000000000a157f9d3c8d58000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1378,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004290f59947ea594e396ae1147fb3c4b029209bda0000000000000000000000004290f59947ea594e396ae1147fb3c4b029209bda00000000000000000000000000000000000000000000000000a01ffe00551d7e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1380,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008fe922789c0bd45e837e2becf103a1b456b52a260000000000000000000000008fe922789c0bd45e837e2becf103a1b456b52a26000000000000000000000000000000000000000000000000009d58108f2dd84f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1381,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f32844357f27d8c185255832b914dd7e3ecfb9a0000000000000000000000008f32844357f27d8c185255832b914dd7e3ecfb9a000000000000000000000000000000000000000000000000009bf5556607f1ec00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1382,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd52c13827f012797005f57e4db3b8db155580f2000000000000000000000000bd52c13827f012797005f57e4db3b8db155580f2000000000000000000000000000000000000000000000000009cfe2281354f1400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1383,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000056c9656662fad432973e8743e1f6d2a79df61a3500000000000000000000000056c9656662fad432973e8743e1f6d2a79df61a35000000000000000000000000000000000000000000000000002e4e5c43094c6600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1384,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fc914aeba65ae085469f9830070f0ef731b43d00000000000000000000000007fc914aeba65ae085469f9830070f0ef731b43d0000000000000000000000000000000000000000000000000003ca40d113c15f300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1389,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a03fcdd101ce5b7ac2e072df832866f918c572ff000000000000000000000000a03fcdd101ce5b7ac2e072df832866f918c572ff000000000000000000000000000000000000000000000000002a2c43ad31ca8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1394,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000007e2e5d94f11f358345a4ee14c4f1a8521315c03b0000000000000000000000007e2e5d94f11f358345a4ee14c4f1a8521315c03b0000000000000000000000000000000000000000000000000000000003831e1200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xbfbddc67d3be7a066fece984550e230e093b3e2c3cf382933224c0def974889f,2022-07-03 01:24:31.000 UTC,0,true -1395,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007e2e5d94f11f358345a4ee14c4f1a8521315c03b0000000000000000000000007e2e5d94f11f358345a4ee14c4f1a8521315c03b0000000000000000000000000000000000000000000000000000339234aa9be200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd8c53105ff2eae627eae60dce8aa62cb0452b5aeb72a47d6f005d9ccf1188258,2022-07-03 00:19:21.000 UTC,0,true -1396,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000001162e3d2c6771b3eca319d054e554ffacf5549000000000000000000000000001162e3d2c6771b3eca319d054e554ffacf55490000000000000000000000000000000000000000000000000cbd9f6b17c75e59300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1397,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000001162e3d2c6771b3eca319d054e554ffacf5549000000000000000000000000001162e3d2c6771b3eca319d054e554ffacf5549000000000000000000000000000000000000000000000000b80313c52f0bab66600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1398,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f3c06b4c50b17b4ceaa9d609356ebd57963d0110000000000000000000000006f3c06b4c50b17b4ceaa9d609356ebd57963d01100000000000000000000000000000000000000000000000000a6f2d46fcbbb6000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1399,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d9e6cd0e64a4e989499b1b4995570eec94519260000000000000000000000007d9e6cd0e64a4e989499b1b4995570eec945192600000000000000000000000000000000000000000000000000a5594a6814449c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1400,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff6097d4c652481f1a1e3f25f7a5edc9f5d5625b000000000000000000000000ff6097d4c652481f1a1e3f25f7a5edc9f5d5625b00000000000000000000000000000000000000000000000000a35ee2cc6ed62700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1401,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000013d77053696d78eb23e64e503787163df9967b5a00000000000000000000000013d77053696d78eb23e64e503787163df9967b5a00000000000000000000000000000000000000000000000000a3d8d41242c90c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1402,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e6e068e68ee243b856b57098310ce0f8b2e57e12000000000000000000000000e6e068e68ee243b856b57098310ce0f8b2e57e1200000000000000000000000000000000000000000000000000a26dc3fa3b373000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1403,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000092f7dfb5bfa167674441da031657417a0aaf3d8b00000000000000000000000092f7dfb5bfa167674441da031657417a0aaf3d8b00000000000000000000000000000000000000000000000000a2abe30e92503600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1404,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e47a137646c4499d9ca0c592224608f2f0d36cbe000000000000000000000000e47a137646c4499d9ca0c592224608f2f0d36cbe00000000000000000000000000000000000000000000000000a3b3836be701c100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1405,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000001162e3d2c6771b3eca319d054e554ffacf5549000000000000000000000000001162e3d2c6771b3eca319d054e554ffacf554900000000000000000000000000000000000000000000000000078cad1e25d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1406,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f567a6ca93dec3203344094cb90f035cc853a248000000000000000000000000f567a6ca93dec3203344094cb90f035cc853a2480000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1407,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000af7b3c54e066c54e4bfc08762678fd1bc2ade9b4000000000000000000000000af7b3c54e066c54e4bfc08762678fd1bc2ade9b400000000000000000000000000000000000000000000000000a21751a301fe0400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1408,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004b6c1d2c9ea868e8e37c035e1c7fcadd475d26000000000000000000000000004b6c1d2c9ea868e8e37c035e1c7fcadd475d26000000000000000000000000000000000000000000000000000a2cb95d6f78f6700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1409,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000032dda2351fd5d613db8dba322ef7a5e4fa08c83000000000000000000000000032dda2351fd5d613db8dba322ef7a5e4fa08c8300000000000000000000000000000000000000000000000000a263954eed155a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1410,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000c877fcc358da9eb76f53aeebfbbdb6eefa0b313d00000000000000000000000000000000000000000000000e962d83195749bb35,0x64d2a01996b640311514acbd698e0870a5b9adc9ce3040338c0c521d0224439e,2021-11-23 09:17:37.000 UTC,0,true -1411,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000125a2c1f7f2de8e47625c83e5eb012ab9ee9d113000000000000000000000000125a2c1f7f2de8e47625c83e5eb012ab9ee9d1130000000000000000000000000000000000000000000000000155e4498bb3208700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2181b9f7cc9c66e84f8811c0d94fda83a1a78459d49863d45748701d501273c9,2022-07-19 19:02:36.000 UTC,0,true -1414,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000077109daf4c36b0af7975f539d22528b92f82ecae00000000000000000000000077109daf4c36b0af7975f539d22528b92f82ecae000000000000000000000000000000000000000000000000002ff3041cae3b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1418,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000706e8a1de4f372df952e26f01b6b7611b917bd2d000000000000000000000000706e8a1de4f372df952e26f01b6b7611b917bd2d0000000000000000000000000000000000000000000000000024f12ac0b6ff0900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1421,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000082683f46c69e068f244d86103317b37ebbf9377900000000000000000000000082683f46c69e068f244d86103317b37ebbf937790000000000000000000000000000000000000000000000000010dbe79ee47c7000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1422,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a62a664974939513f165703e76ab8e16ac8eb170000000000000000000000006a62a664974939513f165703e76ab8e16ac8eb170000000000000000000000000000000000000000000000000078e3288e5dfd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1427,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000025b99f078903f7702d3f44b1f8a4fe88bc5d103600000000000000000000000025b99f078903f7702d3f44b1f8a4fe88bc5d1036000000000000000000000000000000000000000000000000000ffcb9e57d400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1430,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d4a3fbd2434c9c1e846a039be62050a08b9fe783000000000000000000000000d4a3fbd2434c9c1e846a039be62050a08b9fe78300000000000000000000000000000000000000000000000002d30a217f0bd7a800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1431,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fff2bcc4313a064d8655b6911bc2db2b9e1c9c98000000000000000000000000fff2bcc4313a064d8655b6911bc2db2b9e1c9c980000000000000000000000000000000000000000000000000003d12e9b292e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1436,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000025f500fc10b0ce86cbe34b2290dc476742a8e0b900000000000000000000000025f500fc10b0ce86cbe34b2290dc476742a8e0b9000000000000000000000000000000000000000000000000004007ea86d6b90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1441,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000089768ca7e116d7971519af950dbbdf6e80b9ded100000000000000000000000089768ca7e116d7971519af950dbbdf6e80b9ded1000000000000000000000000000000000000000000000000030d98d59a96000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1451,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d12301bcb812dbb016fbfa0faec1c1cb71ddc05f000000000000000000000000d12301bcb812dbb016fbfa0faec1c1cb71ddc05f00000000000000000000000000000000000000000000000000a5d8df81d7a1a700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1452,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000517905ce3f8193c46421b2f03312986efbd8874e000000000000000000000000517905ce3f8193c46421b2f03312986efbd8874e000000000000000000000000000000000000000000000000112865cc2351ee7a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1453,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001bad367c336522f7a47e18d51c1287bd55c681120000000000000000000000001bad367c336522f7a47e18d51c1287bd55c6811200000000000000000000000000000000000000000000000000a5088d5fc63e0f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1454,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ece2b12273e6d56d54f2034f71fe8db1805bc394000000000000000000000000ece2b12273e6d56d54f2034f71fe8db1805bc39400000000000000000000000000000000000000000000000000a5b2f7188b274f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1455,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ef7ec56d7d633a2c82af24f15a24182930310510000000000000000000000006ef7ec56d7d633a2c82af24f15a241829303105100000000000000000000000000000000000000000000000000a31ba5d9b31daa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1456,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000113be48e08958c98a066a9d21f0e0c6e9f4ce120000000000000000000000000113be48e08958c98a066a9d21f0e0c6e9f4ce1200000000000000000000000000000000000000000000000000a597e0b0b8bb6700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1457,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000701f52342947c3bd1f20464b8d40e0c6333bc1a0000000000000000000000000701f52342947c3bd1f20464b8d40e0c6333bc1a000000000000000000000000000000000000000000000000000a5c695375318f300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1458,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000946d691877f1775bf7e86ffbdabbb571ed8cfc3c000000000000000000000000946d691877f1775bf7e86ffbdabbb571ed8cfc3c00000000000000000000000000000000000000000000000000a7408840091e5500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1459,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e993f9f9f90205753dd99c85429b302770a7ea78000000000000000000000000e993f9f9f90205753dd99c85429b302770a7ea7800000000000000000000000000000000000000000000000000a5c6af5b5ba35500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1460,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da8cc3a462f7086a929f7cb985e9b937807cc165000000000000000000000000da8cc3a462f7086a929f7cb985e9b937807cc16500000000000000000000000000000000000000000000000000a517ce8c76281700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1461,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b327885341a84bb07a4c9d620e3c345e1b384349000000000000000000000000b327885341a84bb07a4c9d620e3c345e1b38434900000000000000000000000000000000000000000000000000a2cb67bda4c7cf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1462,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008969af66165d93f6124899f5af946635e1645d470000000000000000000000008969af66165d93f6124899f5af946635e1645d4700000000000000000000000000000000000000000000000000a2e77eb04f5f9a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1463,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eacb7edd74f53c4f8c7445cd55381e4b096fec10000000000000000000000000eacb7edd74f53c4f8c7445cd55381e4b096fec1000000000000000000000000000000000000000000000000000a31ba81d47e3bb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1464,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da1c5760fc4c48b3eae7c28b3cb53b3a8271035a000000000000000000000000da1c5760fc4c48b3eae7c28b3cb53b3a8271035a00000000000000000000000000000000000000000000000000a3c26a35dab4da00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1465,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000087694c0a265346e6a3bfab4f1ae6b14eda7849c900000000000000000000000087694c0a265346e6a3bfab4f1ae6b14eda7849c900000000000000000000000000000000000000000000000000a1bfad5a02737d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1466,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000065e8d46a51ce9b5e83a72409c4257b2971f4217700000000000000000000000065e8d46a51ce9b5e83a72409c4257b2971f4217700000000000000000000000000000000000000000000000000a30aad6803ed6e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1467,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a5e581cb20e40bdb884e6647c96ecb2a51b13cbe000000000000000000000000a5e581cb20e40bdb884e6647c96ecb2a51b13cbe00000000000000000000000000000000000000000000000000a5ee0e93a9ca5700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1468,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ef3077374ce35b8c937eb22d1c85a71a2f79aeb0000000000000000000000005ef3077374ce35b8c937eb22d1c85a71a2f79aeb00000000000000000000000000000000000000000000000000a53791a384c4e700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1469,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000deea5b37603f88936f9ab2a932a4521b1e331c8a000000000000000000000000deea5b37603f88936f9ab2a932a4521b1e331c8a00000000000000000000000000000000000000000000000000a51a942d68312c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1470,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea3a5cb144b9922ada2a0148124a522cc3c00fa1000000000000000000000000ea3a5cb144b9922ada2a0148124a522cc3c00fa100000000000000000000000000000000000000000000000000a46a02456edf8e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1471,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000225d2b448852d9d582bdc262d1a37bf823650080000000000000000000000000225d2b448852d9d582bdc262d1a37bf8236500800000000000000000000000000000000000000000000000000a3de4a49757fde00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1476,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000748010fbe056562ef466901f1d38ce481f11b539000000000000000000000000748010fbe056562ef466901f1d38ce481f11b539000000000000000000000000000000000000000000000000000000001125d3b200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1479,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6ef13a56e52cf128d0881a4fcf1105754d7682e000000000000000000000000b6ef13a56e52cf128d0881a4fcf1105754d7682e000000000000000000000000000000000000000000000000005cc7a3362ea0e400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1481,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000002df99be208467d5b050d333244cdac0a998338e0000000000000000000000000000000000000000000000004563918244f40000,,,1,true -1485,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf17fe365b6a160b48d8b2ba76f8a55becf4c7c1000000000000000000000000bf17fe365b6a160b48d8b2ba76f8a55becf4c7c100000000000000000000000000000000000000000000000000fcdc390dc0c13200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1487,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e84c2e90afec8491f94dd477bd11657cefc76900000000000000000000000002e84c2e90afec8491f94dd477bd11657cefc769000000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1492,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000818aa87368876d6864e64aa256cc6a2a43b54207000000000000000000000000818aa87368876d6864e64aa256cc6a2a43b542070000000000000000000000000000000000000000000000034214be8f108edb1a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1499,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000a5372ec86fa34436299a95d3c10f0d721cdd018a00000000000000000000000000000000000000000000000214df071e9d692338,,,1,true -1501,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa08a02f79951f410edf661b0f23202e9681e4c8000000000000000000000000aa08a02f79951f410edf661b0f23202e9681e4c8000000000000000000000000000000000000000000000000001acff920bde8d300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1502,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e66bb5ef7359906b46d2a99b10fbefb643526fa3000000000000000000000000e66bb5ef7359906b46d2a99b10fbefb643526fa3000000000000000000000000000000000000000000000000029f79a3e8e804c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1504,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000090a7b41610a25f7bf538bd27dc6e0434bd38933200000000000000000000000090a7b41610a25f7bf538bd27dc6e0434bd38933200000000000000000000000000000000000000000000000000109581ed03f62200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1505,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000090a7b41610a25f7bf538bd27dc6e0434bd38933200000000000000000000000090a7b41610a25f7bf538bd27dc6e0434bd38933200000000000000000000000000000000000000000000000000000000023161ee00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1508,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000003bd59ed16c462b4464091830dab828dce079076f000000000000000000000000000000000000000000000000316a92244d1ca800,0x0c89331ede9019a096912f6686d40b5bc109782815dbb9ccc93199b577f5998c,2021-11-25 23:30:38.000 UTC,0,true -1509,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000009e63e63554469e0c98450c58e1472fdde65c07ec0000000000000000000000000000000000000000000000003782dace9d900000,,,1,true -1510,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000b9afc24c66d04f773c97d733e4c058a0784fd88a0000000000000000000000000000000000000000000000002725ef1d20bf9400,,,1,true -1511,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007113457d2eb745bfaf2edcb586bc25658d637b7a0000000000000000000000007113457d2eb745bfaf2edcb586bc25658d637b7a0000000000000000000000000000000000000000000000000022764ad44f2a2400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1519,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061d04270a849004364795f5f3fde33a2068383fb00000000000000000000000061d04270a849004364795f5f3fde33a2068383fb00000000000000000000000000000000000000000000000000214880fac9e20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1525,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c3320b4b93a482924a299334c5cb6c0fd7ca0fd3000000000000000000000000c3320b4b93a482924a299334c5cb6c0fd7ca0fd3000000000000000000000000000000000000000000000000014c55bb915e969b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1526,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000ac0b447d5d976b1ec7d8a885c937e0efcc7edbe0000000000000000000000000ac0b447d5d976b1ec7d8a885c937e0efcc7edbe000000000000000000000000000000000000000000000000053c376bd45e001c700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x187a81c216dae186bad5bb5a505ac8c0a2418655808fb05f811907f539966a7b,2022-07-10 05:14:15.000 UTC,0,true -1528,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008edb42bed2a8f10188096e2f90336e853deaac030000000000000000000000008edb42bed2a8f10188096e2f90336e853deaac03000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1532,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2e5d220874222ca63e45c419cc226c5f35e47bb000000000000000000000000d2e5d220874222ca63e45c419cc226c5f35e47bb000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1533,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d0ebdfceee6e8fd3e9be7032c671ecbd2d229032000000000000000000000000d0ebdfceee6e8fd3e9be7032c671ecbd2d229032000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1535,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002aaa03a8293053bd4b7fa1740ac94d935c66ee840000000000000000000000002aaa03a8293053bd4b7fa1740ac94d935c66ee8400000000000000000000000000000000000000000000000001550db544c8362b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1537,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000000ef1ed3d10ce1c766291c7cf9153e1076a4220c20000000000000000000000000ef1ed3d10ce1c766291c7cf9153e1076a4220c20000000000000000000000000000000000000000000000000000000000f0f97000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1539,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009d842bbf50af49dd35291737a139852b7bc48dce0000000000000000000000009d842bbf50af49dd35291737a139852b7bc48dce0000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1542,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000000d7c96322a62573b509ee0b1266e7aa713662c1300000000000000000000000000000000000000000000003683daaee596dcfdb4,,,1,true -1548,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000006719dc6c087ec40261bf08ac1286fa4ceeb6c92500000000000000000000000000000000000000000000000367d3c36a5d62d210,,,1,true -1549,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001fe6a806e0a9858359e16c58e4f84c790171596b0000000000000000000000001fe6a806e0a9858359e16c58e4f84c790171596b00000000000000000000000000000000000000000000000000ed380acce0bf5800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1550,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000033e580cee928d83a61b98905a1f9be68ea6279b800000000000000000000000033e580cee928d83a61b98905a1f9be68ea6279b800000000000000000000000000000000000000000000000003d6260ef6d43f3500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1551,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000b3d381c886f47bd2c091ae7c785229aaf140b0e900000000000000000000000000000000000000000000000f742888823a4f73d0,0x4eaa1f74b5612b0dbf69e36a42e7c34f672541ef8d2f55fff126d6d7984ebb23,2022-04-10 12:27:58.000 UTC,0,true -1554,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000095b683dce50361469742e5184be34a7c6c02b78b00000000000000000000000095b683dce50361469742e5184be34a7c6c02b78b000000000000000000000000000000000000000000000000031fb736e764cce000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1555,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1c675dad880d1887c20b101e9a8fb604e6ad4eb000000000000000000000000c1c675dad880d1887c20b101e9a8fb604e6ad4eb000000000000000000000000000000000000000000000000005cbb9a209baeae00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1556,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ab525dd1016e88f68ca3832c943dbbfd577806e0000000000000000000000006ab525dd1016e88f68ca3832c943dbbfd577806e00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1595,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df10b1d95073a395b4ac15aba63edca8c0bcfea2000000000000000000000000df10b1d95073a395b4ac15aba63edca8c0bcfea200000000000000000000000000000000000000000000000000406b2a9cb110c500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1678,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000c688cc5298ce97cf5b82a88229f3a40e3bf25530000000000000000000000000c688cc5298ce97cf5b82a88229f3a40e3bf255300000000000000000000000000000000000000000000000011dbe1f2dd930b4e200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1681,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b41167f0729aa2b8adb237474a134659e8f279e7000000000000000000000000b41167f0729aa2b8adb237474a134659e8f279e700000000000000000000000000000000000000000000000000aae1ff661e8dc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1684,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000012d8bfd7284b36e77501e842a3222b5f8f30bf2f00000000000000000000000012d8bfd7284b36e77501e842a3222b5f8f30bf2f00000000000000000000000000000000000000000000000000008f9f8c8ac68500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1685,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000421cc7b6224accb6c12280e3b697c65d9d60ad70000000000000000000000000421cc7b6224accb6c12280e3b697c65d9d60ad7000000000000000000000000000000000000000000000000000437e2b560d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1688,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000085ea4171aec13c433b87a303f9c6dda1da4c619b00000000000000000000000085ea4171aec13c433b87a303f9c6dda1da4c619b000000000000000000000000000000000000000000000000006da44d320b725c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1704,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000acaec28670ff7ca851d4d802b123ac7c6dac25e3000000000000000000000000acaec28670ff7ca851d4d802b123ac7c6dac25e300000000000000000000000000000000000000000000000000089d8c5db7e3c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1705,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000052eebd82826a7b530839424ceab6ca3643eb0ef100000000000000000000000000000000000000000000000a5805f66b648d7777,,,1,true -1706,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000089768ca7e116d7971519af950dbbdf6e80b9ded100000000000000000000000089768ca7e116d7971519af950dbbdf6e80b9ded100000000000000000000000000000000000000000000000000e3c5ab9623177000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1707,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000163f875efda73c07f2035f21d532c57131afa09d000000000000000000000000163f875efda73c07f2035f21d532c57131afa09d00000000000000000000000000000000000000000000000000ec2c4aae16cef300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1708,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009e6640ac10ddf31aeb3a88d7853496c0955388a30000000000000000000000009e6640ac10ddf31aeb3a88d7853496c0955388a300000000000000000000000000000000000000000000000000f1f1a3671aefae00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1710,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001dd7c29dba3cfc8cd64220f7331e214a791a59890000000000000000000000001dd7c29dba3cfc8cd64220f7331e214a791a598900000000000000000000000000000000000000000000000001e76082dbe1ae5700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1711,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007819bffd6a93a941f9c9c68bb6eda17766fbe6090000000000000000000000007819bffd6a93a941f9c9c68bb6eda17766fbe60900000000000000000000000000000000000000000000000000faa9790caf06c500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1712,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9bb68e9735de702cbf517aa6c2fb6a36a13b0ce000000000000000000000000c9bb68e9735de702cbf517aa6c2fb6a36a13b0ce0000000000000000000000000000000000000000000000000081eff3be3833cd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1713,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004f7b076d0fcc7641eb968b4bf9983a830699d92a0000000000000000000000004f7b076d0fcc7641eb968b4bf9983a830699d92a00000000000000000000000000000000000000000000000000f556aecaa6d3cd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1714,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6b070f15d10a39f429f25d10bbef42265b94dd1000000000000000000000000d6b070f15d10a39f429f25d10bbef42265b94dd1000000000000000000000000000000000000000000000000007d27de7f56687500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1715,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f71479d0e613ca73523e4f5d2051bd5c0003636d000000000000000000000000f71479d0e613ca73523e4f5d2051bd5c0003636d00000000000000000000000000000000000000000000000000f989b60b2663ea00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1716,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006889f4dde0a2bc0830b49352d42e3a8707187daa0000000000000000000000006889f4dde0a2bc0830b49352d42e3a8707187daa0000000000000000000000000000000000000000000000000038c123fdd37d4300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1717,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ce65009e934732446c5d80aec4bb48d1c6f18984000000000000000000000000ce65009e934732446c5d80aec4bb48d1c6f189840000000000000000000000000000000000000000000000000494654067e1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1718,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be31e3a92b3d0c2d9370663c7e1ff749322fa92f000000000000000000000000be31e3a92b3d0c2d9370663c7e1ff749322fa92f00000000000000000000000000000000000000000000000000564fef3460a1d100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1719,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c4053c76dc251c22ec6d676835ac0b1c63ff11d9000000000000000000000000c4053c76dc251c22ec6d676835ac0b1c63ff11d900000000000000000000000000000000000000000000000001476c424a747f1900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1729,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078d79b027e11b21e13a1887fde77347790b8bca600000000000000000000000078d79b027e11b21e13a1887fde77347790b8bca600000000000000000000000000000000000000000000000000da99c000531a4600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1733,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000004717c3df812351699483ce9ff8fc3ad191fa38f20000000000000000000000000000000000000000000000000de0b6b3a7640000,,,1,true -1734,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003054f483ea0746c497c44bf4ab2468f133ee41900000000000000000000000003054f483ea0746c497c44bf4ab2468f133ee4190000000000000000000000000000000000000000000000000013fbe85edc9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1741,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000955d917e1fabf943bc670f87dfb75ce2fd44aee8000000000000000000000000955d917e1fabf943bc670f87dfb75ce2fd44aee80000000000000000000000000000000000000000000000000050cd3701bf847f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1746,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cab55b0de19c01cdd284535a3fe8d73a657525bb000000000000000000000000cab55b0de19c01cdd284535a3fe8d73a657525bb000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1747,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000bd7fbaf67cf30b5b95f646823dd0bc096e646b080000000000000000000000000000000000000000000000006dac8818ccca3a8d,,,1,true -1751,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000e699e8334d901986d9ff6bc5ae4b44ae5122f1ee0000000000000000000000000000000000000000000000007b0d1be7bfd9a806,0x6267f54b841217b6675df3ccd2d3f008649b4eae982f1f81cb736b377ade75db,2021-12-10 09:38:20.000 UTC,0,true -1755,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000058f4e544ed6a80af689b3d006659157b6ec4e0e300000000000000000000000000000000000000000000000036eeb4e0c66dc000,,,1,true -1756,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002613052b58e51177fbcb5c6665c460dad5c593310000000000000000000000002613052b58e51177fbcb5c6665c460dad5c5933100000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xa4974fabe8b6a9e44cfc718c8e37e89b4115d0092011669cbbab4e8c406b9e9b,2022-03-10 22:21:34.000 UTC,0,true -1764,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000007c614c9da4a195f209ef9e63e5c6f5801db86fab0000000000000000000000000000000000000000000000013c1ccb01b62c326c,,,1,true -1765,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000e22ded5d8cb6c74bedca991c0f67925a38c5a6d2000000000000000000000000e22ded5d8cb6c74bedca991c0f67925a38c5a6d2000000000000000000000000000000000000000000000015b966eec8ec1f632900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1766,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cd0ced634b49b8dc2032dae30e7125439ca7b909000000000000000000000000cd0ced634b49b8dc2032dae30e7125439ca7b909000000000000000000000000000000000000000000000000034e9d576016c51100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1772,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000025b1b0849a9653dcf70bf459c30763d5b7930706000000000000000000000000000000000000000000000000c110d83b2bffaa49,,,1,true -1777,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000007c614c9da4a195f209ef9e63e5c6f5801db86fab000000000000000000000000000000000000000000000004979851ad093e06ac,,,1,true -1778,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a8e8cd60e86262b7d9cc5d08f3ec2f172f856830000000000000000000000006a8e8cd60e86262b7d9cc5d08f3ec2f172f856830000000000000000000000000000000000000000000000000003585d62261e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1781,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f17f232fb241c7cb6d200c0a7b2f77bb4268c280000000000000000000000000f17f232fb241c7cb6d200c0a7b2f77bb4268c280000000000000000000000000000000000000000000000000019cebd0b3d67f4900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1784,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf99bf53caa598d312ee72055e42c8bcf35d24e8000000000000000000000000cf99bf53caa598d312ee72055e42c8bcf35d24e8000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1787,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bcacaa2951eb0d03b788d355f1226701b7ee475e000000000000000000000000bcacaa2951eb0d03b788d355f1226701b7ee475e000000000000000000000000000000000000000000000000010a741a4627800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1792,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000008db02f4db3d165630ab4181994be509e8eaf7f8200000000000000000000000000000000000000000000000ca0a17e135d851158,0xad6f01c8434823d354f10726cda60bcac980f278322d38a8fee6e1f4e009d4da,2021-11-27 19:59:45.000 UTC,0,true -1794,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005f4ef5c539a56291665fcca4e6b7a6446ad11cc10000000000000000000000005f4ef5c539a56291665fcca4e6b7a6446ad11cc10000000000000000000000000000000000000000000000000069290b0d5a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1799,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000db45e0edd323939129792c15278b1204bd29ddd6000000000000000000000000db45e0edd323939129792c15278b1204bd29ddd6000000000000000000000000000000000000000000000000005250aeeb45690000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1807,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ee5c256721abe58af6f582c0efd6774dd2765038000000000000000000000000ee5c256721abe58af6f582c0efd6774dd276503800000000000000000000000000000000000000000000000001352e852f89511e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1809,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ec15a5690361c73b9b60369ab1fa06c559496150000000000000000000000006ec15a5690361c73b9b60369ab1fa06c559496150000000000000000000000000000000000000000000000000078bec232ffe2df00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1812,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a81c50289f16a7e556385d6bab17707e2ea23c50000000000000000000000006a81c50289f16a7e556385d6bab17707e2ea23c5000000000000000000000000000000000000000000000000005f7e5b739ac1cf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1814,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ccb23a9bbae99909b1102549f9a96c2b137a60ec000000000000000000000000ccb23a9bbae99909b1102549f9a96c2b137a60ec000000000000000000000000000000000000000000000000001dcf653460938000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1816,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d8c9bdfbb887a44bf45692f6d4d0576412f8b577000000000000000000000000d8c9bdfbb887a44bf45692f6d4d0576412f8b5770000000000000000000000000000000000000000000000000373d7d3e85d290000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1817,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e7394f05f97257958361329a3fd4f879773c0469000000000000000000000000e7394f05f97257958361329a3fd4f879773c04690000000000000000000000000000000000000000000000000050cd433f02912100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1818,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000060da990aebdd785f50ea3202ff05bff1d0963dbe00000000000000000000000000000000000000000000000081cba1d16e377a7d,,,1,true -1819,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c03b767ccc25b31a76cc50fa3c84cb859ef30f97000000000000000000000000c03b767ccc25b31a76cc50fa3c84cb859ef30f9700000000000000000000000000000000000000000000000000109a260574dcde00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1823,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f16c2bb24b4e844bd9fb9141cc6e812ee50f8330000000000000000000000006f16c2bb24b4e844bd9fb9141cc6e812ee50f833000000000000000000000000000000000000000000000000001c687f50fe852600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1825,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a434108cc9fe2a86796b4d4ac6bf61af1ad8eca1000000000000000000000000a434108cc9fe2a86796b4d4ac6bf61af1ad8eca1000000000000000000000000000000000000000000000000060422e3e632615e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1830,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000013a9bcf887142f70c53f52df7ccd9a832a72a77500000000000000000000000000000000000000000000000fe52cea9f3e6a2842,,,1,true -1837,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000342dbb1fcb0f693bc991b87cab2edfb4f25b69ee000000000000000000000000342dbb1fcb0f693bc991b87cab2edfb4f25b69ee00000000000000000000000000000000000000000000000001101d6c5e198e4f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1838,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000082683f46c69e068f244d86103317b37ebbf9377900000000000000000000000082683f46c69e068f244d86103317b37ebbf937790000000000000000000000000000000000000000000000000002dce362efac9c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1841,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000004e6f61590eac8016f21ab170c488f0350a8fa0000000000000000000000000000000000000000000000000f7671cc47aa1f92c,,,1,true -1846,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d487c2f6f9dd15db0ce76181e6211a1ef9d8d920000000000000000000000005d487c2f6f9dd15db0ce76181e6211a1ef9d8d92000000000000000000000000000000000000000000000000d3b87598235f2cbf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1847,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000009bbf793fe17c934a933b57a9fb4add10289aa6a000000000000000000000000000000000000000000000000621beb6d38839193,,,1,true -1848,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004f13dffed9aa20fb22526463bed09c4e59e1b8330000000000000000000000004f13dffed9aa20fb22526463bed09c4e59e1b83300000000000000000000000000000000000000000000000000473a96fb049f6000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe580c078056fcbb2086db9237a4ca2169706ec239035d62644ac0d4510eccfa9,2022-07-16 08:25:14.000 UTC,0,true -1850,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000009bbf793fe17c934a933b57a9fb4add10289aa6a00000000000000000000000009bbf793fe17c934a933b57a9fb4add10289aa6a00000000000000000000000000000000000000000000000000166e0719f5ccc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1851,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003637a131c537dfdabab3a5e964f70fa65c3640080000000000000000000000003637a131c537dfdabab3a5e964f70fa65c36400800000000000000000000000000000000000000000000000006e4641adad0a37d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1852,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076cdca9ce4ac4804884e1e778e68d256c8b087c100000000000000000000000076cdca9ce4ac4804884e1e778e68d256c8b087c1000000000000000000000000000000000000000000000000045be402e365f2c700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1856,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080af0af8c7ab024039f49fb4bb5f440b1297c41300000000000000000000000080af0af8c7ab024039f49fb4bb5f440b1297c41300000000000000000000000000000000000000000000000000ae2c5d4b720b4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xc53b08b7c3ef1f64dbd9828724950edd650cc7170ca5d675fb8c0be34f908890,2022-02-27 09:15:08.000 UTC,0,true -1857,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000732052b8d446acdb4e43282ec39c1a385c811b02000000000000000000000000732052b8d446acdb4e43282ec39c1a385c811b0200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1859,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c2332295cfbcd03531a77b00a019f39335ab8d43000000000000000000000000c2332295cfbcd03531a77b00a019f39335ab8d43000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1860,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c2a622b764878faf9ab9078ad31303b24fd4b707000000000000000000000000c2a622b764878faf9ab9078ad31303b24fd4b707000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1861,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b355df7a527f215f51af23396c69094955840e2c000000000000000000000000b355df7a527f215f51af23396c69094955840e2c000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1862,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000608972868362504b4820fc26aa60787f45159913000000000000000000000000608972868362504b4820fc26aa60787f45159913000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1863,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a7db7b42e26dc80a7091f72e2389b6cc9deb60d0000000000000000000000004a7db7b42e26dc80a7091f72e2389b6cc9deb60d000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1866,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009d0e4c670b1c3f9213ee13c79f16e2852d1582530000000000000000000000009d0e4c670b1c3f9213ee13c79f16e2852d158253000000000000000000000000000000000000000000000000001ed3bb1c4a6c0700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1867,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009d0e4c670b1c3f9213ee13c79f16e2852d1582530000000000000000000000009d0e4c670b1c3f9213ee13c79f16e2852d15825300000000000000000000000000000000000000000000000000213e63812ae28100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1869,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f0f080b0ff503f6d59edbf8551df24d02c69deef000000000000000000000000f0f080b0ff503f6d59edbf8551df24d02c69deef000000000000000000000000000000000000000000000000003f2ced8ccf31d800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1873,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000002923be587904f3034ffab36c86c495df3c21bc970000000000000000000000000000000000000000000000008138721ac7458fe0,,,1,true -1879,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c59b1008d098b19489a76fd90ce1d870d998492c000000000000000000000000c59b1008d098b19489a76fd90ce1d870d998492c0000000000000000000000000000000000000000000000000084b7651040d1f000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1880,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000725147c2bfa26fca5984b5ac1f7abf8719dc795d000000000000000000000000725147c2bfa26fca5984b5ac1f7abf8719dc795d00000000000000000000000000000000000000000000000000935168819a2d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1883,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d5bd9cec8ecaa2de229fff140d4343584a86b370000000000000000000000000d5bd9cec8ecaa2de229fff140d4343584a86b370000000000000000000000000000000000000000000000000004487374723448a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1888,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd67285ea7e8efa60e0162e7b6ad6bfb57bd6f44000000000000000000000000bd67285ea7e8efa60e0162e7b6ad6bfb57bd6f44000000000000000000000000000000000000000000000000058adbe9880b120000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1890,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000082683f46c69e068f244d86103317b37ebbf9377900000000000000000000000082683f46c69e068f244d86103317b37ebbf937790000000000000000000000000000000000000000000000000035d1bd4bf9369600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1893,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d0172e88bd400884708318bac77bc69f76ae0820000000000000000000000008d0172e88bd400884708318bac77bc69f76ae082000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1895,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f89f1d06505962b95eca6f46387a75e2de1b3b68000000000000000000000000f89f1d06505962b95eca6f46387a75e2de1b3b68000000000000000000000000000000000000000000000000000017750f94750000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1899,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000064b857f38efe672d8938a1022248e7ce9444525500000000000000000000000064b857f38efe672d8938a1022248e7ce944452550000000000000000000000000000000000000000000000000058d15e1762800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1900,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000889cb44823b35fc53dfc3a8b58a825beb6a737b5000000000000000000000000889cb44823b35fc53dfc3a8b58a825beb6a737b5000000000000000000000000000000000000000000000000007e18fb9c0a35ea00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xcb1e847f54fa1d901d3fc50f565f8cad5816f717c841bbdac07d32ffe0b8429f,2022-03-06 05:36:44.000 UTC,0,true -1901,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005c0fdf40988bf0c03b0a600a37ea57b5909ab28f0000000000000000000000005c0fdf40988bf0c03b0a600a37ea57b5909ab28f00000000000000000000000000000000000000000000000001b667a56d48800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1910,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000982bfe6dac3ccdb324984311d5804dbb1cfd4faf000000000000000000000000982bfe6dac3ccdb324984311d5804dbb1cfd4faf000000000000000000000000000000000000000000000000022775fd824e31a700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1911,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000001aedc8c5a2f163685d8ea7b93101d57eab683a840000000000000000000000001aedc8c5a2f163685d8ea7b93101d57eab683a8400000000000000000000000000000000000000000000000098a1fbea3abc65f000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1912,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000bd978c0e11680717f5116f8fd62a19ca325b4877000000000000000000000000bd978c0e11680717f5116f8fd62a19ca325b4877000000000000000000000000000000000000000000000002a1075cd4b4a2f73100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1917,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000321f5373fc2b56153a997d88b7fffdc1d413fcdc000000000000000000000000321f5373fc2b56153a997d88b7fffdc1d413fcdc000000000000000000000000000000000000000000000001998427cc5c934ceb00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1918,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000321f5373fc2b56153a997d88b7fffdc1d413fcdc000000000000000000000000321f5373fc2b56153a997d88b7fffdc1d413fcdc00000000000000000000000000000000000000000000000000066a534ecab04000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1922,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ab303fec8e53841653128610c44ceab5da46c23f000000000000000000000000ab303fec8e53841653128610c44ceab5da46c23f0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1924,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000b361234dc46ec6cb034eb692e6330c1ad57fedcd0000000000000000000000000000000000000000000000093739534d28680000,,,1,true -1926,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003fa93b2d9b95faf616c4c749e958f87f1463b4fe0000000000000000000000003fa93b2d9b95faf616c4c749e958f87f1463b4fe000000000000000000000000000000000000000000000000001f1e32d9f5e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1933,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000e0b56bca567be6daa6dd3e95d484f892a915108900000000000000000000000000000000000000000000000104ae218c7a8b51a6,,,1,true -1936,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000043221135be9d8f9da1345e0242155b779c7633f000000000000000000000000043221135be9d8f9da1345e0242155b779c7633f0000000000000000000000000000000000000000000000000020ab9bf287af0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1942,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ab384c78ec3a44dfe0e3bc1cdcdd042534b055d0000000000000000000000007ab384c78ec3a44dfe0e3bc1cdcdd042534b055d000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1945,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f223460832b3afe7161d87584cfefba7608e4f0c000000000000000000000000f223460832b3afe7161d87584cfefba7608e4f0c0000000000000000000000000000000000000000000000000020091f01b4c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1946,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000edb797dfab3c6fd90295e6264ec4d672d73ac7d3000000000000000000000000edb797dfab3c6fd90295e6264ec4d672d73ac7d300000000000000000000000000000000000000000000000000794d5b3f0a146800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x810336c2a1dcd31b32485950e7faf34dd6867e81b83b70e399a46eb4e11e18bd,2022-03-13 10:34:11.000 UTC,0,true -1948,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000304c161c3a71fbe5867022648fbc7d9aa994a02d000000000000000000000000304c161c3a71fbe5867022648fbc7d9aa994a02d000000000000000000000000000000000000000000000005e870b03b127d1cc100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -1953,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d38ac318aa5821a99b1fe1e6f0a6b5e8fe2941a7000000000000000000000000d38ac318aa5821a99b1fe1e6f0a6b5e8fe2941a70000000000000000000000000000000000000000000000000062f63cbdb886ae00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1954,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000a8e0f532656ab6c2cd83bef11f6e6ce1f7c18a9b00000000000000000000000000000000000000000000000a7669bd7132640000,,,1,true -1959,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a73a8cb53f91a903b4b6202e85e347000d5433a5000000000000000000000000a73a8cb53f91a903b4b6202e85e347000d5433a5000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1960,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000008b82ea55b70e93746bd13d858648772daeaedb1a000000000000000000000000000000000000000000000028885341dd125aeab0,,,1,true -1961,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076ab70829b14430f35e600fd0dab42d2c88d570e00000000000000000000000076ab70829b14430f35e600fd0dab42d2c88d570e00000000000000000000000000000000000000000000000000534a3ccb0b680000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1962,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078ace162a81d2588d6247478a39254b12b5c031600000000000000000000000078ace162a81d2588d6247478a39254b12b5c031600000000000000000000000000000000000000000000000000f2d7012e9b3c4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x501760f15d70a9221ddc582626a214a087d33d42d15fdc1527dab0e9a2892eef,2022-03-06 10:59:59.000 UTC,0,true -1963,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000046d95954dd98b03820c69a7e85e1631a2d3f04250000000000000000000000000000000000000000000000003b2862c2a12ca150,,,1,true -1968,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000008afb85e94953c869f6652bc69f0e4c4bab0b9677000000000000000000000000000000000000000000000000aa54da1123ef48b4,,,1,true -1979,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000044265dae5c21110b0dfdd421503ce3e1ca3280a500000000000000000000000044265dae5c21110b0dfdd421503ce3e1ca3280a500000000000000000000000000000000000000000000000000168fa0c1f2e6ad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1980,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006c03d9b3b58c8589172843f3deb7cb74a0d9d9e30000000000000000000000006c03d9b3b58c8589172843f3deb7cb74a0d9d9e300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1981,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000012235b260b113ebef4a77b27bdc1c8da3e00109d00000000000000000000000012235b260b113ebef4a77b27bdc1c8da3e00109d0000000000000000000000000000000000000000000000000061d2f881fd6a8300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1983,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080f0171d4844436549c1f83b0e5c5ef7ce94371600000000000000000000000080f0171d4844436549c1f83b0e5c5ef7ce9437160000000000000000000000000000000000000000000000000020d74f2b7db0a400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1984,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005eb71caeadf22107a578bc5261ec9a1e16fad5f80000000000000000000000005eb71caeadf22107a578bc5261ec9a1e16fad5f8000000000000000000000000000000000000000000000000015bc0230dede8a400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe7a9176bbb48a1c6179f6d5c85b642065bdfdcde712658f80eadf9fd7a6e3e7a,2022-04-27 04:02:00.000 UTC,0,true -1985,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007450fb048bd81d69c27676b93129f611af948c280000000000000000000000007450fb048bd81d69c27676b93129f611af948c2800000000000000000000000000000000000000000000000000853fcd8ddbdc5e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1987,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b053b3105844613bc91cd10443739cb6123c1ab0000000000000000000000000b053b3105844613bc91cd10443739cb6123c1ab000000000000000000000000000000000000000000000000002e0a6e55898f65e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1988,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ce21d998c7c79c48124583c3bf85d96dccbf8224000000000000000000000000ce21d998c7c79c48124583c3bf85d96dccbf82240000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1990,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006c6344ba5ebe67f6118b8129e37f67ca9c0d10de0000000000000000000000006c6344ba5ebe67f6118b8129e37f67ca9c0d10de00000000000000000000000000000000000000000000000004d37662ceaf1dc900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1992,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d8bb86b43ecd8e84aa3542853ca25655f519c0e0000000000000000000000006d8bb86b43ecd8e84aa3542853ca25655f519c0e00000000000000000000000000000000000000000000000000069309dde49dc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1994,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d77900479ef30963f4b5aa7d752b15795192ee15000000000000000000000000d77900479ef30963f4b5aa7d752b15795192ee1500000000000000000000000000000000000000000000000002bcc373fa1731d100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1995,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a87469931a348664fdf3125670cc1599c2150d07000000000000000000000000a87469931a348664fdf3125670cc1599c2150d0700000000000000000000000000000000000000000000000000ad0eeae705da0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1996,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dda41e662f2ed6609170431d11c885ab7158e19b000000000000000000000000dda41e662f2ed6609170431d11c885ab7158e19b000000000000000000000000000000000000000000000000001e9ef2ef19330000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1997,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043d19b7139089a63f051ab5b8c89cb425a9d861b00000000000000000000000043d19b7139089a63f051ab5b8c89cb425a9d861b000000000000000000000000000000000000000000000000001ef4872226090000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -1998,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000000a95d8ae3c78b779d5aff68764a195a6c634be920000000000000000000000000a95d8ae3c78b779d5aff68764a195a6c634be920000000000000000000000000000000000000000000000053b4ef76346c592cc00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x1e240da1e12e750274192d7e73d85f6589e51e74cddeb7f1fe2f96edb0d4eb53,2022-06-26 03:12:21.000 UTC,0,true -2003,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000634775efe2d77ff787fa843a57e752b9bd515f41000000000000000000000000634775efe2d77ff787fa843a57e752b9bd515f4100000000000000000000000000000000000000000000000000d6e16de1e9520500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2008,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055ec74b554fd87fb1273236b483a973e2734b0a100000000000000000000000055ec74b554fd87fb1273236b483a973e2734b0a10000000000000000000000000000000000000000000000000018feaa7f62e1f700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2010,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000033630b553dfd9a9647c689cbff36a6017400021200000000000000000000000033630b553dfd9a9647c689cbff36a60174000212000000000000000000000000000000000000000000000000001718b815ff2d2100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2011,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000882ae064b136eb4f6f0095b07b87257806c80bab000000000000000000000000882ae064b136eb4f6f0095b07b87257806c80bab0000000000000000000000000000000000000000000000000000000002aea54000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2012,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000078902c0f6f7a3520340e38f87b36b2373e5f3f6a00000000000000000000000078902c0f6f7a3520340e38f87b36b2373e5f3f6a0000000000000000000000000000000000000000000000000000000002aea54000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2013,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000ac495ea31d2002ac8fed73dfe98cffc04b9e82dc000000000000000000000000ac495ea31d2002ac8fed73dfe98cffc04b9e82dc0000000000000000000000000000000000000000000000000000000002aea54000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2014,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000d02f64a4a523b6c981d7e1698f524e867c8d640c000000000000000000000000d02f64a4a523b6c981d7e1698f524e867c8d640c0000000000000000000000000000000000000000000000000000000002aea54000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2015,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000006a6d748b878629aabfb83acc10bb24ea5644f9480000000000000000000000006a6d748b878629aabfb83acc10bb24ea5644f9480000000000000000000000000000000000000000000000000000000002aea54000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2016,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000fc073b372d57c56718127fcf712f5d84c1fa07ff000000000000000000000000fc073b372d57c56718127fcf712f5d84c1fa07ff0000000000000000000000000000000000000000000000000000000002bde78000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2017,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000f9c05511c9baf7f1963d4c3c1cce87dff498ae41000000000000000000000000f9c05511c9baf7f1963d4c3c1cce87dff498ae410000000000000000000000000000000000000000000000000000000002bde78000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2018,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000ac1866e1bfa099db65c77358e7c6e37833ebd899000000000000000000000000ac1866e1bfa099db65c77358e7c6e37833ebd8990000000000000000000000000000000000000000000000000000000002bde78000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2019,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000f447b6eed0c522a0625e08d48af99f4b2cafc2fd000000000000000000000000f447b6eed0c522a0625e08d48af99f4b2cafc2fd0000000000000000000000000000000000000000000000000000000002bde78000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2021,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000fa204a1b8d4d8da5577c1eacac9b7e5f3e896c70000000000000000000000000fa204a1b8d4d8da5577c1eacac9b7e5f3e896c7000000000000000000000000000000000000000000000000000000000014948e000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2024,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000012e322ef04da64246412536f8eb60d6a402a59f9000000000000000000000000000000000000000000000000db44e049bb2c0000,,,1,true -2025,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000ef58868d460c4d5784406960e1ef8aae1512be55000000000000000000000000ef58868d460c4d5784406960e1ef8aae1512be550000000000000000000000000000000000000000000000000000000005226fa700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2026,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c563d8cfcc4f747ddbd7b7f9b243f7ff0f4108aa000000000000000000000000c563d8cfcc4f747ddbd7b7f9b243f7ff0f4108aa00000000000000000000000000000000000000000000000001608039ea25fc0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2027,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e0b56bca567be6daa6dd3e95d484f892a9151089000000000000000000000000e0b56bca567be6daa6dd3e95d484f892a915108900000000000000000000000000000000000000000000000000046a078eec2a8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2028,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000db851d1c7bd4370089bf04641e628cab2a538586000000000000000000000000db851d1c7bd4370089bf04641e628cab2a538586000000000000000000000000000000000000000000000000009c51c4521e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2033,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc4a04c3a9e4f3d6674e3ea292d946a8185abed9000000000000000000000000dc4a04c3a9e4f3d6674e3ea292d946a8185abed90000000000000000000000000000000000000000000000000040b2b33891dace00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2035,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e633336f44c164654eb8e0577a2ba420c776bd5e000000000000000000000000e633336f44c164654eb8e0577a2ba420c776bd5e000000000000000000000000000000000000000000000000003868fbd5aa43e100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2036,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000028886a8f7bc0a58e04deb35c1531b34dc61acb5e00000000000000000000000028886a8f7bc0a58e04deb35c1531b34dc61acb5e000000000000000000000000000000000000000000000000006848f66a57f24a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2037,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000564a90617500a17eab836fcd9f811118079e19b7000000000000000000000000000000000000000000000000477dbd7cc4514834,,,1,true -2038,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b51c80fb02bb165593b3f82d845894fbadf1b040000000000000000000000001b51c80fb02bb165593b3f82d845894fbadf1b040000000000000000000000000000000000000000000000000250eaa302d9f98100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x780f6544bfbb7da05b60c09f5f3b5c43606d4bbbe291c73e51459e208269413e,2021-12-09 23:27:04.000 UTC,0,true -2039,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d0c3ba7132613925c6a5b5ed341f6b879d5e0f580000000000000000000000000000000000000000000000056cc00ece71570000,,,1,true -2040,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000063d612aa37942803ba62e03c2f6fde6b061f6a6f00000000000000000000000063d612aa37942803ba62e03c2f6fde6b061f6a6f00000000000000000000000000000000000000000000000000058c0da2e2fc5800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2045,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1e36163263b89bb2e5d2d694d28e496f1881749000000000000000000000000c1e36163263b89bb2e5d2d694d28e496f18817490000000000000000000000000000000000000000000000000020267c86ac9b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2047,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008318990fba5fd78d7c963924fc4f4eaade5c3df90000000000000000000000008318990fba5fd78d7c963924fc4f4eaade5c3df9000000000000000000000000000000000000000000000000000c05e921153cf700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2054,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000057460ac29351491c402ad53b3630e93a1941f95100000000000000000000000057460ac29351491c402ad53b3630e93a1941f9510000000000000000000000000000000000000000000000000051feeec6ec274000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2055,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a9d1138480226820ecb43abe6563ec0415fc2af0000000000000000000000006a9d1138480226820ecb43abe6563ec0415fc2af000000000000000000000000000000000000000000000000004db48f9a7e1e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2056,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e4a0e0593df6ffd10d459e06429b93399a3d80a0000000000000000000000003e4a0e0593df6ffd10d459e06429b93399a3d80a000000000000000000000000000000000000000000000000000a40ee2576238000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2059,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002daec6744e092a586240e653fc715f9d2cee90270000000000000000000000002daec6744e092a586240e653fc715f9d2cee90270000000000000000000000000000000000000000000000000156a1c1c7197d3f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2060,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f4eeb4d6b029effa2b79e279f94c08be50437d78000000000000000000000000f4eeb4d6b029effa2b79e279f94c08be50437d7800000000000000000000000000000000000000000000000000011fe26917b57500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2062,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3de20dc08f50b3b5cbd68cb06ab798bcdae08a4000000000000000000000000f3de20dc08f50b3b5cbd68cb06ab798bcdae08a40000000000000000000000000000000000000000000000000010caae5801be4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2063,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005e3b906074a29dd2fb1d9ab304bfd927f603b7200000000000000000000000005e3b906074a29dd2fb1d9ab304bfd927f603b720000000000000000000000000000000000000000000000000003fb349a22be82f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2064,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ff36124356df5617dec6e9d40d49b32cc55909d0000000000000000000000004ff36124356df5617dec6e9d40d49b32cc55909d000000000000000000000000000000000000000000000000009ce40a98d8990000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2066,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002daec6744e092a586240e653fc715f9d2cee90270000000000000000000000002daec6744e092a586240e653fc715f9d2cee902700000000000000000000000000000000000000000000000000aa5d21b0199c8d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2068,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000001511be1b433b06ab7c01980d45b2939ee500eb940000000000000000000000001511be1b433b06ab7c01980d45b2939ee500eb940000000000000000000000000000000000000000000000008ac7230489e8000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2069,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c5998e60aa4fa846bb7dab5e3522c2c61266bb52000000000000000000000000c5998e60aa4fa846bb7dab5e3522c2c61266bb52000000000000000000000000000000000000000000000000001c4bca86a8d4fd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2073,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc4171d7b45b9502ebc1d31c50d9d69a1aa6cd13000000000000000000000000dc4171d7b45b9502ebc1d31c50d9d69a1aa6cd1300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2074,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e4eecdb19d80c61cd1d0f28b17d44df1dfaa1870000000000000000000000004e4eecdb19d80c61cd1d0f28b17d44df1dfaa18700000000000000000000000000000000000000000000000000524597a14884fa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2091,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000494d035d1ad677b3fa5cc537a8cebd0bf2480971000000000000000000000000494d035d1ad677b3fa5cc537a8cebd0bf248097100000000000000000000000000000000000000000000000002c1f9a3cf2f950000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2094,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000924ac9910c09a0215b06458653b30471a152022f000000000000000000000000924ac9910c09a0215b06458653b30471a152022f00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2095,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000924ac9910c09a0215b06458653b30471a152022f000000000000000000000000924ac9910c09a0215b06458653b30471a152022f00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2096,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a172d783fc38efe8135e6a3aeaab5c4932cf2623000000000000000000000000a172d783fc38efe8135e6a3aeaab5c4932cf26230000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2097,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f279d33db640c5ad6a53d0e847f98b65ce845a15000000000000000000000000f279d33db640c5ad6a53d0e847f98b65ce845a15000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2100,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000098656b644acaa9faa0d5919d2a2f311582093d1000000000000000000000000098656b644acaa9faa0d5919d2a2f311582093d1000000000000000000000000000000000000000000000000000abac938068210000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2101,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000829f0811319625975292ee7d9d22a3a0b408eed900000000000000000000000000000000000000000000000019485ca897900f89,,,1,true -2103,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000741bc936b183f8bcf807c0204bee62fa68ea561f000000000000000000000000741bc936b183f8bcf807c0204bee62fa68ea561f00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x687b28487c0cab0ca83f0473f24353a60f5871d677fe96dec7e414ee556b3c26,2022-01-02 15:42:12.000 UTC,0,true -2108,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076916bdbd7b84317365fb3bd157e1606550665b900000000000000000000000076916bdbd7b84317365fb3bd157e1606550665b9000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2111,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000298caa03187ba3145bac8749ec258913632e0008000000000000000000000000298caa03187ba3145bac8749ec258913632e000800000000000000000000000000000000000000000000000000122bfa2203f9ed00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2114,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac4bfcd893230a82f9f905f92457378b52a1d706000000000000000000000000ac4bfcd893230a82f9f905f92457378b52a1d7060000000000000000000000000000000000000000000000000160291918f8550000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2116,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009587de586dfa49cf33dd5b30679450f3f6d1fd9a0000000000000000000000009587de586dfa49cf33dd5b30679450f3f6d1fd9a0000000000000000000000000000000000000000000000000054ea9ffaa5944500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2118,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017480555ebf1d3a40341361132c18fbf88fb8aeb00000000000000000000000017480555ebf1d3a40341361132c18fbf88fb8aeb000000000000000000000000000000000000000000000000012305f355f3b77e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2119,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037cc7e32f81f9165f5b09dbaae89c07512e3843300000000000000000000000037cc7e32f81f9165f5b09dbaae89c07512e384330000000000000000000000000000000000000000000000000036ae2cba6a0ccd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2121,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000262c5eaaaa8b5632d073d72df6a08ada25cdbb28000000000000000000000000262c5eaaaa8b5632d073d72df6a08ada25cdbb2800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2122,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e78f896ce38833a6ae75e7bde08508563802a462000000000000000000000000e78f896ce38833a6ae75e7bde08508563802a46200000000000000000000000000000000000000000000000000336939c9bfc29300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2123,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d9fbbb3032dfef61a9abf183ab460f4e18ce2dd8000000000000000000000000d9fbbb3032dfef61a9abf183ab460f4e18ce2dd8000000000000000000000000000000000000000000000000003ff2e795f5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2125,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000afbe097a650ed9da24994739fe1e8b120d23b550000000000000000000000000afbe097a650ed9da24994739fe1e8b120d23b55000000000000000000000000000000000000000000000000005543df729c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2126,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000980b25f29dcc19f5ea6b723dc0d481774e787570000000000000000000000000980b25f29dcc19f5ea6b723dc0d481774e7875700000000000000000000000000000000000000000000000000021051a7b936f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2128,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000602f49db00e1c594ac1c86970047a7d188334b78000000000000000000000000602f49db00e1c594ac1c86970047a7d188334b7800000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2129,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002387949f5fcfe2c61d32b23fb8be22fbd133f12b0000000000000000000000002387949f5fcfe2c61d32b23fb8be22fbd133f12b00000000000000000000000000000000000000000000000000a985cb89de3f8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2130,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e34cabba447e536086363094b5cec334ebd8d7b7000000000000000000000000e34cabba447e536086363094b5cec334ebd8d7b700000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2132,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000760606741594125796c9da208dd156336e9ff4d2000000000000000000000000760606741594125796c9da208dd156336e9ff4d2000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2134,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf3f7fd16849636a132f921438ee593866fd4e24000000000000000000000000cf3f7fd16849636a132f921438ee593866fd4e24000000000000000000000000000000000000000000000000020e4ce871c8c12c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2135,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e2e8d90533c0b5b91a201738e627aaf353e585df000000000000000000000000e2e8d90533c0b5b91a201738e627aaf353e585df00000000000000000000000000000000000000000000000000002d79883d200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2136,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009072063a81bebc2bc246612e8c69891f080bd7f80000000000000000000000009072063a81bebc2bc246612e8c69891f080bd7f800000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2138,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a924c5eff11bcb4d2b00d922e0145510c7459843000000000000000000000000a924c5eff11bcb4d2b00d922e0145510c7459843000000000000000000000000000000000000000000000000001ec8e634ab4dd200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2140,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a52715a5cc5efad1be64865195d2ea39c7d98e7f000000000000000000000000a52715a5cc5efad1be64865195d2ea39c7d98e7f000000000000000000000000000000000000000000000000000248f3a02bec8400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2141,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b7747b82b79cb793f17fe0faf51b5b77d4c44cf1000000000000000000000000b7747b82b79cb793f17fe0faf51b5b77d4c44cf100000000000000000000000000000000000000000000000000aeb9f91cfd1f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2142,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f3218e0434fbda514552fb8e64c90025a45bd520000000000000000000000002f3218e0434fbda514552fb8e64c90025a45bd520000000000000000000000000000000000000000000000000006db26f299913500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2143,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000002f3218e0434fbda514552fb8e64c90025a45bd520000000000000000000000002f3218e0434fbda514552fb8e64c90025a45bd520000000000000000000000000000000000000000000000000000000001f9062e00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2144,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6bd2eb85c151a3eddd17bb17d0933bb40b06fd3000000000000000000000000d6bd2eb85c151a3eddd17bb17d0933bb40b06fd300000000000000000000000000000000000000000000000001cdda4faccd000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x44f6b55ede28657345deac8f3f158b89e6e9186c9b7073078df3952e5fc5f6ae,2022-05-09 10:28:55.000 UTC,0,true -2151,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f85c77731efa8dddc03e6196a838711fa36b81e0000000000000000000000000f85c77731efa8dddc03e6196a838711fa36b81e0000000000000000000000000000000000000000000000000005c5edcbc29000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2162,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a63519e67dae9a551ad34ae679cf0e911a78381a000000000000000000000000a63519e67dae9a551ad34ae679cf0e911a78381a0000000000000000000000000000000000000000000000000589129f32e57c8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2164,0x72209fe68386b37a40d6bca04f78356fd342491f,0xe22d2bedb3eca35e6397e0c6d62857094aa26f52,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000ababf53063ad68050fd4dbe833dfcbe2a5e286becef761352d6698e7dbab9754300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000002fd721500000000000000000000000000000000000000000000000000000000611ef238,,,1,true -2166,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000009feb52de6fd4aac6a5b0aa3f35b9c411dc7bf5c50000000000000000000000009feb52de6fd4aac6a5b0aa3f35b9c411dc7bf5c50000000000000000000000000000000000000000000000000000000041da3d6000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2167,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000c4fb550fa8f2a6e5178711e56d5b48dedf897e5e000000000000000000000000c4fb550fa8f2a6e5178711e56d5b48dedf897e5e0000000000000000000000000000000000000000000000008ac7230489e8000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2169,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a4803d8c45fc2f82a9c14b7191b29ae896ab3540000000000000000000000000a4803d8c45fc2f82a9c14b7191b29ae896ab354000000000000000000000000000000000000000000000000000a8875554cbc83f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2170,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000a4803d8c45fc2f82a9c14b7191b29ae896ab3540000000000000000000000000a4803d8c45fc2f82a9c14b7191b29ae896ab35400000000000000000000000000000000000000000000000008ac7230489e8000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2171,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a4803d8c45fc2f82a9c14b7191b29ae896ab3540000000000000000000000000a4803d8c45fc2f82a9c14b7191b29ae896ab354000000000000000000000000000000000000000000000000000587b06aee2736a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2172,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f4a54a3c6ef95e8df1365dade09b7061eeca9ef4000000000000000000000000f4a54a3c6ef95e8df1365dade09b7061eeca9ef4000000000000000000000000000000000000000000000000001fcb5822f3e48000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2175,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000046d44471a055f0aa11ff23cb9b120c5612c3902d00000000000000000000000000000000000000000000000376095ccf371c82b6,,,1,true -2181,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bfdff8796b34ca75a95ebca3a37809b99dda9287000000000000000000000000bfdff8796b34ca75a95ebca3a37809b99dda9287000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2189,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007a51d0b0ee843c572f197c63bbb8277a957c04c50000000000000000000000007a51d0b0ee843c572f197c63bbb8277a957c04c5000000000000000000000000000000000000000000000000017ffe2e934ef3ae00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2221,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b005ed016b926ec8321516ecef995a6f26e1acf0000000000000000000000001b005ed016b926ec8321516ecef995a6f26e1acf000000000000000000000000000000000000000000000000001d0f63876dcf4700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2223,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eda9885b87c565d5570767e9dbd51c87c9c3d55b000000000000000000000000eda9885b87c565d5570767e9dbd51c87c9c3d55b00000000000000000000000000000000000000000000000000a8b5b155656d4100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2225,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000001c52385216b430ed9a66450faf3a7e6e764b10f00000000000000000000000001c52385216b430ed9a66450faf3a7e6e764b10f000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2247,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000032aa36adfe23c52de8737bdb7c7ebf2db4253e89000000000000000000000000000000000000000000000004c801e112d2aeb229,,,1,true -2248,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005523b536390cab22029250ce3e54d6a4b833d8560000000000000000000000005523b536390cab22029250ce3e54d6a4b833d8560000000000000000000000000000000000000000000000000017210de057c27200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2250,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f939830659501a06f5cbf54d34f27f4fda7a1d80000000000000000000000002f939830659501a06f5cbf54d34f27f4fda7a1d800000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x0009fc3db2db2fe04ba7bd60b141e5fee14a84704713a9f66ae70447f2ca1b95,2021-12-22 17:41:07.000 UTC,0,true -2253,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fd974c71ae34eb4b1e0fc1c101318525b9588c5e000000000000000000000000fd974c71ae34eb4b1e0fc1c101318525b9588c5e000000000000000000000000000000000000000000000000009893b0d976fa0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2254,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd132f10241105201d1de0c53c5e4a40c53687bc000000000000000000000000bd132f10241105201d1de0c53c5e4a40c53687bc0000000000000000000000000000000000000000000000000160df505bc2780000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2257,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b7a46cb435ccc2756758afdd0475419be9648be1000000000000000000000000b7a46cb435ccc2756758afdd0475419be9648be10000000000000000000000000000000000000000000000000006ea7670eec28000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2258,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e17637f59c56d1fbba3c89bd2f59ed09856cb103000000000000000000000000e17637f59c56d1fbba3c89bd2f59ed09856cb1030000000000000000000000000000000000000000000000000142154dfa56894900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2260,0x72209fe68386b37a40d6bca04f78356fd342491f,0xe22d2bedb3eca35e6397e0c6d62857094aa26f52,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a5e2582c330f89a6bdb96366f93e1985f1097b6ed4de7ed5b70bfe2a3c1b474fd000000000000000000000000000000000000000000000000000000000000008900000000000000000000000000000000000000000000000000000000004c6af600000000000000000000000000000000000000000000000000000000611f2c8b,,,1,true -2263,0x72209fe68386b37a40d6bca04f78356fd342491f,0xe22d2bedb3eca35e6397e0c6d62857094aa26f52,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000aa6411e6f9bf6c7641b1578fb8946142acfa5ce0f2f784f312955adc7a7e69f700000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000262ba9e00000000000000000000000000000000000000000000000000000000611fcfb9,,,1,true -2264,0x72209fe68386b37a40d6bca04f78356fd342491f,0xe22d2bedb3eca35e6397e0c6d62857094aa26f52,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a81144e8a2805832e702f790068d5a026d1aef165cbe8be26e261121d39dba81c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000268b75400000000000000000000000000000000000000000000000000000000611fd453,,,1,true -2266,0x72209fe68386b37a40d6bca04f78356fd342491f,0xe22d2bedb3eca35e6397e0c6d62857094aa26f52,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000aec42b9bf3364149cb93bd8ddbb83021fce72d25311ef0fe2d9f30dc9d797e05e000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000026543c800000000000000000000000000000000000000000000000000000000611fde1d,,,1,true -2267,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e1f9b4f01b04eb991143e719fd11071c1d0858da000000000000000000000000e1f9b4f01b04eb991143e719fd11071c1d0858da000000000000000000000000000000000000000000000000008719b1b195a7f000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2268,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078298487706051b52d7e2beb9bea248d71a2973c00000000000000000000000078298487706051b52d7e2beb9bea248d71a2973c0000000000000000000000000000000000000000000000000006e9a94256e60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2269,0x72209fe68386b37a40d6bca04f78356fd342491f,0xe22d2bedb3eca35e6397e0c6d62857094aa26f52,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a8014f057a49374783a520278262c85d5ac1632ec96da9c8f7665df29ee866f8f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000263925d00000000000000000000000000000000000000000000000000000000611fe76b,,,1,true -2270,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000f7801b408c5e3d352e9d67ee2774ae82800bc2d7000000000000000000000000f7801b408c5e3d352e9d67ee2774ae82800bc2d70000000000000000000000000000000000000000000000000000000041f101bf00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2271,0x72209fe68386b37a40d6bca04f78356fd342491f,0xe22d2bedb3eca35e6397e0c6d62857094aa26f52,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a35586a5938c614553ca6ca5b9dbec74bfa0faf069624c182d2cfeaf7190c9d4e000000000000000000000000000000000000000000000000000000000000008900000000000000000000000000000000000000000000000000000000002de8a700000000000000000000000000000000000000000000000000000000611ff26a,,,1,true -2272,0x72209fe68386b37a40d6bca04f78356fd342491f,0xe22d2bedb3eca35e6397e0c6d62857094aa26f52,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a4ff42aeeee9e3571108ca7b75914990673291f9ceea74c608cc30a624a1a158b000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000001e8b5000000000000000000000000000000000000000000000000000000000611ff26a,,,1,true -2274,0x72209fe68386b37a40d6bca04f78356fd342491f,0xe22d2bedb3eca35e6397e0c6d62857094aa26f52,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a874a0917d2cb83658c4b3fd040a33bd7d639666f4869bba21841113ec5810226000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000003d13ef00000000000000000000000000000000000000000000000000000000611ffa9a,,,1,true -2275,0x72209fe68386b37a40d6bca04f78356fd342491f,0xe22d2bedb3eca35e6397e0c6d62857094aa26f52,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a7b4515fc57cf8f8d8923d3ac33263b75212b72cedc9b775bee020b419ffefce1000000000000000000000000000000000000000000000000000000000000008900000000000000000000000000000000000000000000000000000000001e89f700000000000000000000000000000000000000000000000000000000611ffa9a,,,1,true -2280,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007964d88f569d11697493b0f28ffff16187504bc30000000000000000000000007964d88f569d11697493b0f28ffff16187504bc30000000000000000000000000000000000000000000000000060a8464a4a83d700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2286,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000007b37c58980683179fe841f9b2633ba2fe7bcff4e0000000000000000000000007b37c58980683179fe841f9b2633ba2fe7bcff4e0000000000000000000000000000000000000000000000000000000001e7fdb800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2304,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000059f846cfd67af3d403728edc0ebbc978f87fa84f00000000000000000000000059f846cfd67af3d403728edc0ebbc978f87fa84f000000000000000000000000000000000000000000000000016116210fb3440000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2305,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d87db52a9d80812f67193cf7ab62a38c930a8542000000000000000000000000d87db52a9d80812f67193cf7ab62a38c930a85420000000000000000000000000000000000000000000000000208c8190b1d5aa800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2320,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac4fbd8ac75bb5ee493c8a9f3d6c94d538f18370000000000000000000000000ac4fbd8ac75bb5ee493c8a9f3d6c94d538f18370000000000000000000000000000000000000000000000000001ee8000d978ec000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2321,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000012b385a87bb238429ee7ec0ba4554d54a54a6f2c00000000000000000000000012b385a87bb238429ee7ec0ba4554d54a54a6f2c000000000000000000000000000000000000000000000000001eb228ecc3a38000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xaed187d0790d27de4effebe7d4c47f50bad5913d9aab71ebe1b105ecf7974c85,2022-04-28 09:27:57.000 UTC,0,true -2347,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000030048b7d63853bb6439ef75f998a53e803e8929000000000000000000000000000000000000000000000004488a03553e3708d8,0xb412a3a12f61c0d869634e47ba5552f0f393e1eacb0318802a1f49d20556fbfc,2021-12-15 08:47:58.000 UTC,0,true -2364,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d4a96cde701bec80f26913af8a9ce35610b73470000000000000000000000000d4a96cde701bec80f26913af8a9ce35610b73470000000000000000000000000000000000000000000000000002096a24a68ee0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2366,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000003b522b2dd5d57ba9aa6099bf71511640fba4b9fa0000000000000000000000003b522b2dd5d57ba9aa6099bf71511640fba4b9fa00000000000000000000000000000000000000000000001482b5db9d0d29e31900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xb3c832f4ad85b43898ee10552fc91bf1d175cf077c2a5f7ff1bdd4ba644afac6,2022-02-28 07:18:38.000 UTC,0,true -2367,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d5ff14a0fbd6868d30db8387f68cf14c660db630000000000000000000000005d5ff14a0fbd6868d30db8387f68cf14c660db63000000000000000000000000000000000000000000000000001032894648458900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2370,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7a2c1075e963886f001cbaa3a099fc04de7d170000000000000000000000000c7a2c1075e963886f001cbaa3a099fc04de7d170000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2371,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a19216cead35d27dcb1596d969870b7580cc9840000000000000000000000004a19216cead35d27dcb1596d969870b7580cc9840000000000000000000000000000000000000000000000000152abb7d32a72ac00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2376,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000e6badf702f28de2d4e3efc92cb659821a9bd8981000000000000000000000000000000000000000000000002d6a97ffb1525d343,,,1,true -2378,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000752d9c212182da8118bffd3574b7c927fb4ff0b5000000000000000000000000000000000000000000000003151cb805af73524f,,,1,true -2379,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d3afcede3d78797e69d48ac7d72cf7b64e64b030000000000000000000000002d3afcede3d78797e69d48ac7d72cf7b64e64b0300000000000000000000000000000000000000000000000000008be4f825530000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2380,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006491c142bb7e892dfe01db2ba567bff2681b62dd0000000000000000000000006491c142bb7e892dfe01db2ba567bff2681b62dd000000000000000000000000000000000000000000000000001f02a391cbaec000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2383,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000002c84bb38abdf4f92c74704f14df7c61ec70208c30000000000000000000000002c84bb38abdf4f92c74704f14df7c61ec70208c3000000000000000000000000000000000000000000000000000000000003ff1c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2384,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000007ffa9e0a5a7e31cf71d9643d4a9a0ae769a03d520000000000000000000000007ffa9e0a5a7e31cf71d9643d4a9a0ae769a03d52000000000000000000000000000000000000000000000000000000000004f5fa00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2385,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009e1ba1f108f829f882a469c7c552583a9a93c6660000000000000000000000009e1ba1f108f829f882a469c7c552583a9a93c666000000000000000000000000000000000000000000000000001afabfcaf096a000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2386,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000057ddccdd5817017493dc12bbfd4899d2dd74d18b00000000000000000000000057ddccdd5817017493dc12bbfd4899d2dd74d18b000000000000000000000000000000000000000000000000000b4378c885e2b200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2387,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000f7a03f661f5d411e8abc410d3c446c0fbd141225000000000000000000000000f7a03f661f5d411e8abc410d3c446c0fbd1412250000000000000000000000000000000000000000000000000000000000117ddd00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2388,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000da4c9aeaad95dfbcf5e4948a00b7bd92da61c582000000000000000000000000da4c9aeaad95dfbcf5e4948a00b7bd92da61c5820000000000000000000000000000000000000000000000000000000000117da000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2389,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005e014aa0649102e07c074f498845f01bcd5203170000000000000000000000005e014aa0649102e07c074f498845f01bcd52031700000000000000000000000000000000000000000000000001058f45980fbda600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd1953899c214fa0e7f3ac86438e2aaf96c2225463e55554d0f8b180ac8702d7f,2022-03-23 15:43:41.000 UTC,0,true -2390,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000153fc0056d2adad8f10f64ab9744acfca5b40c10000000000000000000000000153fc0056d2adad8f10f64ab9744acfca5b40c10000000000000000000000000000000000000000000000000000000000018f24a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2391,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000003478b441e07c418bba592e9ca395a056ddbb45010000000000000000000000000000000000000000000000001a53a97e43dc5a63,,,1,true -2392,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000028aa0f4a1877bf8d0a8200655849496455619de000000000000000000000000028aa0f4a1877bf8d0a8200655849496455619de0000000000000000000000000000000000000000000000005f68e8131ecf8000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xb4f728821d27575322c4e4ce44203ea942e2b6b236b27d17a550cd8345c63139,2022-03-13 08:28:34.000 UTC,0,true -2394,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b4d207588ea3593ee5376b22eb61ee2895d8773d000000000000000000000000b4d207588ea3593ee5376b22eb61ee2895d8773d000000000000000000000000000000000000000000000000000024dd1617544000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2395,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000007ffa9e0a5a7e31cf71d9643d4a9a0ae769a03d520000000000000000000000007ffa9e0a5a7e31cf71d9643d4a9a0ae769a03d52000000000000000000000000000000000000000000000000000000000011741600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2396,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b9bd90265b963e6e79fb4e05e1373bd5952975a1000000000000000000000000b9bd90265b963e6e79fb4e05e1373bd5952975a1000000000000000000000000000000000000000000000000001ae124d10f734000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2397,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000002c84bb38abdf4f92c74704f14df7c61ec70208c30000000000000000000000002c84bb38abdf4f92c74704f14df7c61ec70208c300000000000000000000000000000000000000000000000004804b94e5d51e5d00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2398,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000002d3afcede3d78797e69d48ac7d72cf7b64e64b030000000000000000000000002d3afcede3d78797e69d48ac7d72cf7b64e64b030000000000000000000000000000000000000000000000000e649af5f189030300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2399,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005cdd5d7618713a7a40b2bb46d128c38872aa0a730000000000000000000000005cdd5d7618713a7a40b2bb46d128c38872aa0a730000000000000000000000000000000000000000000000000013eb1b23eecf4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2400,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eb31d7ac09dab51c9484e71b887da76f72de47ec000000000000000000000000eb31d7ac09dab51c9484e71b887da76f72de47ec00000000000000000000000000000000000000000000000000111c16d8669d2400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2401,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001596ebcd5cfac8e21ebc6d28ad5b86b355ee53fc0000000000000000000000001596ebcd5cfac8e21ebc6d28ad5b86b355ee53fc000000000000000000000000000000000000000000000000000ef1ec4b18b1aa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2402,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000656f62ef0c8b808ce950af91ba310ee1982c150e000000000000000000000000656f62ef0c8b808ce950af91ba310ee1982c150e000000000000000000000000000000000000000000000000005d176d8d6319b300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x82f79f1e918d83d7ce006d71669932dab4da57cd055680f142e0b3b6d5b4120b,2022-08-23 19:00:39.000 UTC,0,true -2403,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000008e17561ffc5177f35671863c1505b8e9ab307383000000000000000000000000000000000000000000000007cb62fd00a16f5867,0xec64e1a8b03a1ea0521a8c766065bf0268c80b62421799ecb6e07e204e617fc2,2021-11-27 19:16:16.000 UTC,0,true -2404,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000829f0811319625975292ee7d9d22a3a0b408eed900000000000000000000000000000000000000000000000066e97479d5f38001,,,1,true -2406,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000014ad7074ffce47d8ba842ee6b3af8d44c618211900000000000000000000000014ad7074ffce47d8ba842ee6b3af8d44c618211900000000000000000000000000000000000000000000000000749c1193eddde700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2407,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d110a0298fbdb68b9f3b937b3a04cc65b65559b2000000000000000000000000d110a0298fbdb68b9f3b937b3a04cc65b65559b2000000000000000000000000000000000000000000000000006d75356a39401900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2408,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005bfd83c76641bea157d670e8e0d42a46ac1442980000000000000000000000005bfd83c76641bea157d670e8e0d42a46ac1442980000000000000000000000000000000000000000000000000b939b7f06a5386900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2411,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000058551816ab840af2310ec3ec157b03829fb1078200000000000000000000000058551816ab840af2310ec3ec157b03829fb1078200000000000000000000000000000000000000000000000001250893774bc81c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2412,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a9035e9c4cdd6d3b3a3983f7ae739853f7840997000000000000000000000000a9035e9c4cdd6d3b3a3983f7ae739853f784099700000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2413,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000052eebd82826a7b530839424ceab6ca3643eb0ef100000000000000000000000000000000000000000000006282064c36a13dcd09,0xf7efeb4ff5c1b56a7a5b5009231c3de3bba516d89e5b6ba93357b31649fcda57,2022-04-26 17:24:38.000 UTC,0,true -2414,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000003e03819123cc6e06de9692c2bd71da5afd777777000000000000000000000000000000000000000000000000016345785d8a0000,,,1,true -2415,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000041f0bdbed2122402d6d61815d558bc7b01000000000000000000000000000000000000000000000000000000013fbe85edc90000,,,1,true -2416,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000bd922eae7bffc9bf320ca224784af09422199999000000000000000000000000000000000000000000000000013fbe85edc90000,,,1,true -2417,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000b9428f4e0c0c104f89dfd1fd3f4ca89549666666000000000000000000000000000000000000000000000000013fbe85edc90000,,,1,true -2418,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000a89102b5e397f753c4fca0b0bcb593b290838888000000000000000000000000000000000000000000000000013fbe85edc90000,,,1,true -2419,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000020a1fef56e50d891475d964ef0f1bb604c355555000000000000000000000000000000000000000000000000013fbe85edc90000,,,1,true -2420,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000e28777719299c96fb583a73e77989cd54e044444000000000000000000000000000000000000000000000000013fbe85edc90000,,,1,true -2421,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000006df8ee83068463e578ef77ce2dd8673a01f3333300000000000000000000000000000000000000000000000001476414e1ef6090,,,1,true -2422,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000092f15cbce433fdca0a87fd778e5bbbd0b3d7ee0f00000000000000000000000092f15cbce433fdca0a87fd778e5bbbd0b3d7ee0f0000000000000000000000000000000000000000000000000060517bcadd10bd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2423,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000c507d79e987d57e8dc72bc92a5c4a38a93cd222200000000000000000000000000000000000000000000000001490f0d55acec32,,,1,true -2424,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000000dc035f2ba5d9aae02c873aa76714a98e6de1111000000000000000000000000000000000000000000000000014c9c2471a5d84c,,,1,true -2426,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000092d044230b5d92222fb8ac72913ac3bafee484e5000000000000000000000000000000000000000000000000917f38c76ea7b4ba,0x7f738e959458da4f239c17ffbaf6b79f885fb7ae3be951d00d4039a01d00c110,2022-01-28 18:04:10.000 UTC,0,true -2428,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000009a0ee0e21f9521e22f4b99c90c2066a38000e49e0000000000000000000000009a0ee0e21f9521e22f4b99c90c2066a38000e49e00000000000000000000000000000000000000000000000137f003f332c7abe800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2433,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004220418bc912c76f62ca70ec74c176424d0a9f190000000000000000000000004220418bc912c76f62ca70ec74c176424d0a9f190000000000000000000000000000000000000000000000000057fb0f1f80ca9a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2436,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001cf0912a7087c6b2e496414fec70832902b14f4f0000000000000000000000001cf0912a7087c6b2e496414fec70832902b14f4f00000000000000000000000000000000000000000000000000ad4bdaaeaa978200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2437,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000001d5340448b8eb32b1fef1e263755c1ca8bf6a05a0000000000000000000000001d5340448b8eb32b1fef1e263755c1ca8bf6a05a000000000000000000000000000000000000000000000002b5e3af16b188000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2438,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d1b86b6df3b7129fb346c7c2c4b4d179ba17c882000000000000000000000000d1b86b6df3b7129fb346c7c2c4b4d179ba17c8820000000000000000000000000000000000000000000000000122969ceb81410800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x8d9d5b121c9aeb8e630e43068728f17238ac5ca2e9a63a5de5ea7fdccfa93410,2021-12-18 21:13:40.000 UTC,0,true -2440,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000260980ff2c01392b8c4f7f04abc2f50c17c9b21f000000000000000000000000260980ff2c01392b8c4f7f04abc2f50c17c9b21f00000000000000000000000000000000000000000000000000e6edc1fbbc812600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2441,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000293f2986b027575fd7fc337465920185a5b9317e000000000000000000000000000000000000000000000000f9c8f7ba1c978724,,,1,true -2442,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ee5894bb440342457eea42e46d6af75bedb14805000000000000000000000000ee5894bb440342457eea42e46d6af75bedb14805000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2448,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001fd8563c594cb7480919a5470ebc21efbacdec9b0000000000000000000000001fd8563c594cb7480919a5470ebc21efbacdec9b000000000000000000000000000000000000000000000000000910f54e8f281800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2449,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000054a0644e689df22accd7357c8e249272e79f5fee00000000000000000000000054a0644e689df22accd7357c8e249272e79f5fee00000000000000000000000000000000000000000000000000acf17d214dd73500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2450,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc14f891346f298e0187720cc744572d3db11ea2000000000000000000000000dc14f891346f298e0187720cc744572d3db11ea20000000000000000000000000000000000000000000000000061aef49888557600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2452,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000009f45fa7845889a3076788e4849b0f5173cc6a76f0000000000000000000000009f45fa7845889a3076788e4849b0f5173cc6a76f00000000000000000000000000000000000000000000000813e1c28d64fd0e8a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xcb403f82501dbce7044e13bfb817fa1b0514499c7edc5c4e01e2e6087032752e,2022-08-04 09:16:07.000 UTC,0,true -2454,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049f47d08ccff91010bfe5978b011c21472b4aee900000000000000000000000049f47d08ccff91010bfe5978b011c21472b4aee90000000000000000000000000000000000000000000000000070bd6228d2908a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2456,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f250345fda1d5e93b4781791556afaf8d696bad70000000000000000000000000000000000000000000000098a1d15c9dc4b24f6,,,1,true -2457,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc6b0e0c50837f8a5785a3d03d4323d4cf7d1118000000000000000000000000fc6b0e0c50837f8a5785a3d03d4323d4cf7d111800000000000000000000000000000000000000000000000000052c4d4d7265c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2459,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fdd4186383fafd6bd41d0c59ed84708dfde004ff000000000000000000000000fdd4186383fafd6bd41d0c59ed84708dfde004ff000000000000000000000000000000000000000000000000001b67f2f770897c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2460,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a64b2820a06a67ee878157a7f48611463d6bd780000000000000000000000004a64b2820a06a67ee878157a7f48611463d6bd7800000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2467,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000066eeb3fb677bb8945c2750451720b78de421629400000000000000000000000066eeb3fb677bb8945c2750451720b78de42162940000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2468,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000e019d4451a14ea686fb24e49b65b75ef4b05d68c000000000000000000000000000000000000000000000016f511cd75944d8bdc,,,1,true -2475,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001aedc8c5a2f163685d8ea7b93101d57eab683a840000000000000000000000001aedc8c5a2f163685d8ea7b93101d57eab683a8400000000000000000000000000000000000000000000000000001433a2c977c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2476,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000092a686623d801fb043d19dddc0e034dad0958f8c00000000000000000000000092a686623d801fb043d19dddc0e034dad0958f8c00000000000000000000000000000000000000000000010ce9b9d89bf75e8cd500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2479,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000006ceb397b68059ca73049874d0a30c62500ae9877000000000000000000000000000000000000000000000000551cd529f91d12d2,,,1,true -2480,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c3d4a6b3bfe187d7e328514f46db9928c569da21000000000000000000000000c3d4a6b3bfe187d7e328514f46db9928c569da2100000000000000000000000000000000000000000000000006f05b59d3b2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2482,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000091130ce2218265fe0bb02e25b11d652ee664c6f400000000000000000000000091130ce2218265fe0bb02e25b11d652ee664c6f4000000000000000000000000000000000000000000000000015181ff25a9800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xeda0fd3a7d3e2c7f71848a254f6d0c0d3f92055fb997b9c7a98f1bf500c24e69,2022-03-21 15:39:20.000 UTC,0,true -2483,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001dd3f55682eab3ddbf2d48dfb23a7b6bd80e05150000000000000000000000001dd3f55682eab3ddbf2d48dfb23a7b6bd80e0515000000000000000000000000000000000000000000000000008d8990b0236b1300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2491,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000397cb2188ed99663640773f68e6198e65bb6184a000000000000000000000000397cb2188ed99663640773f68e6198e65bb6184a000000000000000000000000000000000000000000000000007baddcd1efdb5c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2493,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e54317d37c4f4231334070e74033fdc37f79e797000000000000000000000000e54317d37c4f4231334070e74033fdc37f79e79700000000000000000000000000000000000000000000000001bce4508f16dd3900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2495,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001d031dd22e80c2fd76c6563eb99d21d8e27338d80000000000000000000000001d031dd22e80c2fd76c6563eb99d21d8e27338d80000000000000000000000000000000000000000000000000050636955b7c44b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2496,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f56b7647799e2c4d2fcf93a62b1b578723718814000000000000000000000000f56b7647799e2c4d2fcf93a62b1b5787237188140000000000000000000000000000000000000000000000000051bae348a043ce00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2498,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000028e6aad8fe8a99deb68b78fa400136bb378c952d00000000000000000000000028e6aad8fe8a99deb68b78fa400136bb378c952d00000000000000000000000000000000000000000000000000665a84908f9a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2499,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000304ff03f1526300d5597dfede9a6be316f56569e000000000000000000000000304ff03f1526300d5597dfede9a6be316f56569e000000000000000000000000000000000000000000000000003ff2e795f5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2500,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007b37c58980683179fe841f9b2633ba2fe7bcff4e0000000000000000000000007b37c58980683179fe841f9b2633ba2fe7bcff4e000000000000000000000000000000000000000000000000000d128f5cfdd1c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2504,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fc6d0da9f4078ed1c1badd8dda5fbed257f11df0000000000000000000000007fc6d0da9f4078ed1c1badd8dda5fbed257f11df0000000000000000000000000000000000000000000000000020463c20fa560000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2512,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b521bafffbfd6d865f1e859fbd704a2c040ec5b0000000000000000000000002b521bafffbfd6d865f1e859fbd704a2c040ec5b000000000000000000000000000000000000000000000000001ce3ffc8bea00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2515,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000fb1b20b2b004b3d2022deb478389f40dd1db435c000000000000000000000000fb1b20b2b004b3d2022deb478389f40dd1db435c0000000000000000000000000000000000000000000000072f7c54bcc6334adc00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2519,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ea24f3cdddf5b88f90b73a2d7df7ad9c0f9bec40000000000000000000000006ea24f3cdddf5b88f90b73a2d7df7ad9c0f9bec400000000000000000000000000000000000000000000000000720a2bc9e3410000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2521,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000683b067b7359ebcb3661336f1d72cd9d5798f524000000000000000000000000683b067b7359ebcb3661336f1d72cd9d5798f524000000000000000000000000000000000000000000000000009fa8d5b647958400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2529,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000212a80a5cb63e38511c73bc6f33e454e911ee88d000000000000000000000000212a80a5cb63e38511c73bc6f33e454e911ee88d00000000000000000000000000000000000000000000000000d0cc1001476bff00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2530,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000069eef3e0f28881385d8d376c5686d10b84e2f21f00000000000000000000000069eef3e0f28881385d8d376c5686d10b84e2f21f00000000000000000000000000000000000000000000000001eda8842809884f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2536,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007daedc837b9795e9235fba7204328d81b1de04200000000000000000000000007daedc837b9795e9235fba7204328d81b1de042000000000000000000000000000000000000000000000000000305f1101d60f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2538,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037398f95a1ac3ad92c99fc39a7da0b6430d60a5500000000000000000000000037398f95a1ac3ad92c99fc39a7da0b6430d60a5500000000000000000000000000000000000000000000000000fc634dd19c5b7800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2543,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc6b154fc804c3b2d38ded27c6ec4991da2ecb14000000000000000000000000cc6b154fc804c3b2d38ded27c6ec4991da2ecb14000000000000000000000000000000000000000000000000001e16049a62fa1a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2552,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f867bc59670b6e263c29058caa87709f4aec3dc0000000000000000000000007f867bc59670b6e263c29058caa87709f4aec3dc0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2557,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000008db4b9289bcf79e3df14e2ba56f1ae0958f5a52f0000000000000000000000008db4b9289bcf79e3df14e2ba56f1ae0958f5a52f0000000000000000000000000000000000000000000000a79241b61e75ccf0b200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x9e1de8ac418c884ce295dcfb204cf1f67b40eff398fb966ea72a4786afd5b8cb,2021-11-25 14:13:15.000 UTC,0,true -2560,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a986b2d01020d4b066a7abebf6163a2b7f350040000000000000000000000001a986b2d01020d4b066a7abebf6163a2b7f350040000000000000000000000000000000000000000000000000005609186d2320000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2564,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8c3a3f1eb0a4f845ae1f2115d18db37ab55f51f000000000000000000000000e8c3a3f1eb0a4f845ae1f2115d18db37ab55f51f00000000000000000000000000000000000000000000000000ecaad21edfd39700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2591,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f05181360129ff94ea193298c939a444e87ffbbd000000000000000000000000f05181360129ff94ea193298c939a444e87ffbbd0000000000000000000000000000000000000000000000000061ca19ef459ffe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2599,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a670ebdaaa258311a7c33a5bf795f07b97c83430000000000000000000000000a670ebdaaa258311a7c33a5bf795f07b97c834300000000000000000000000000000000000000000000000000008f06e723797c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2600,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000003b8d47f77c537842cfe003ffd751cbb8cf8f9f540000000000000000000000003b8d47f77c537842cfe003ffd751cbb8cf8f9f5400000000000000000000000000000000000000000000000361febd299e69eeec00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2606,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f83a8074a017acb923b46464504bdda79c0bd37c000000000000000000000000f83a8074a017acb923b46464504bdda79c0bd37c000000000000000000000000000000000000000000000000009413b666d0c5a400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2608,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000004f24a6e61b7745b86e45f42c2bf19fe049d1ccdf000000000000000000000000000000000000000000000004bf6658ea430e64a6,0x861e35be6eeffc86a70db162e24a895582c5bd39966df80945321f9861947b38,2021-12-19 05:39:03.000 UTC,0,true -2610,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6b2818aa57e7d4040c6f1b1307c0d904866a330000000000000000000000000b6b2818aa57e7d4040c6f1b1307c0d904866a3300000000000000000000000000000000000000000000000000050bbd77a62da3700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x67cd886e14856a1ed42cdf19b5b635ff4b88c5e6b10b9584626f59df1a43a79a,2022-05-19 05:33:22.000 UTC,0,true -2611,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000074077879cb2b9c1ec9a5785a7e0ff9afe50583a800000000000000000000000074077879cb2b9c1ec9a5785a7e0ff9afe50583a800000000000000000000000000000000000000000000000001357d433c53d30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2613,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000062443ff3f8733e31945f6b670f4599f9f00416bc0000000000000000000000000000000000000000000000083d6c7aab63600000,,,1,true -2614,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000048b4e85accfb3177a26c6c39f739d867c07485f200000000000000000000000048b4e85accfb3177a26c6c39f739d867c07485f20000000000000000000000000000000000000000000000001cc82a3f025ce2fd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2ff323e92f2f0a2801eb8b3c6699b7895b6fd7a52b82ac6949f86c483c2fe4d1,2021-12-10 15:43:21.000 UTC,0,true -2615,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000820edf94cb50e09b0b9d4b945f0bdecd11c321d2000000000000000000000000820edf94cb50e09b0b9d4b945f0bdecd11c321d2000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xcc27cbd3f25c680cd51f82c48f01dd31e0a245272da05e48db4f8566b2559f22,2022-05-08 00:05:29.000 UTC,0,true -2616,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000059f44829ae4f03a6d673399c99bfcb6eb3716d3200000000000000000000000059f44829ae4f03a6d673399c99bfcb6eb3716d32000000000000000000000000000000000000000000000000023212133018d10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2623,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017b324d8fdafb249cc218c781adf19752e8749d500000000000000000000000017b324d8fdafb249cc218c781adf19752e8749d5000000000000000000000000000000000000000000000000005b37259ff797d200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2624,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000becebaf3ba4b6ed68d82b955cc5faa960f189f80000000000000000000000000becebaf3ba4b6ed68d82b955cc5faa960f189f800000000000000000000000000000000000000000000000002c16019ec11060000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2625,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000063fdb65cca5a9e66b7f8d925758cb935281b0ad200000000000000000000000063fdb65cca5a9e66b7f8d925758cb935281b0ad200000000000000000000000000000000000000000000000002d057154a75863c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2626,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000000a908362a06b3dbf4496f7d4a298060aaf4307a5000000000000000000000000000000000000000000000000600d20f1c6764b4f,,,1,true -2627,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078a7b3846f6b0407c051aef02e365a76cef586e000000000000000000000000078a7b3846f6b0407c051aef02e365a76cef586e00000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2633,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000dbf6045e565f0a2ad62bca011b9878c1a4d111b600000000000000000000000000000000000000000000000005a4473c7470b159,,,1,true -2635,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea24f605ff7a7faff0ec68859e9d28b21228aea7000000000000000000000000ea24f605ff7a7faff0ec68859e9d28b21228aea700000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2644,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000b604b9311ee4a7e30a47388f9c63ef53e97ab53d00000000000000000000000000000000000000000000000235e0d26160b8d13b,,,1,true -2649,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ecd1753bde9a17707f86dc4c0219360ece76ee8b000000000000000000000000ecd1753bde9a17707f86dc4c0219360ece76ee8b000000000000000000000000000000000000000000000000005c5304d5a957c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2650,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fa204a1b8d4d8da5577c1eacac9b7e5f3e896c70000000000000000000000000fa204a1b8d4d8da5577c1eacac9b7e5f3e896c700000000000000000000000000000000000000000000000000032673d6532561800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2653,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000035aa23fdb2454f7bef15f144011093a5a96ac7c900000000000000000000000035aa23fdb2454f7bef15f144011093a5a96ac7c900000000000000000000000000000000000000000000000000a5a68589526d8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2655,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f65330d04f5000823d0bc6a4f7048457b4ecd1dd000000000000000000000000f65330d04f5000823d0bc6a4f7048457b4ecd1dd000000000000000000000000000000000000000000000000001881eec4489ca700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2656,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000022e86ab483084053562ce713e94431c29d1adb8b00000000000000000000000022e86ab483084053562ce713e94431c29d1adb8b000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2658,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002380cf674acefbc515891f1e47339f4179dcd1630000000000000000000000002380cf674acefbc515891f1e47339f4179dcd163000000000000000000000000000000000000000000000000001dabea82eee40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2662,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003477823dc687e24147494b910b367cc85298df8c0000000000000000000000003477823dc687e24147494b910b367cc85298df8c000000000000000000000000000000000000000000000000013fbe85edc9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2666,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000ad453a7eded500955784cc1be9b44ef8fbd7aa16000000000000000000000000000000000000000000000000a1dfcd400d8107f1,,,1,true -2668,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000074cf8b3d122a3cec3c18bbdcd9325aeac42e147000000000000000000000000074cf8b3d122a3cec3c18bbdcd9325aeac42e14700000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2672,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c80703c13de15b73b2e367d8aabb1b0db3922dfa000000000000000000000000c80703c13de15b73b2e367d8aabb1b0db3922dfa0000000000000000000000000000000000000000000000000024fb5259efd5f100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2675,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d42ccaa658d460b5dfbcee6bbbeaf1b6667a30f10000000000000000000000000000000000000000000000001becba76eb8e61ce,,,1,true -2680,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000006c0cf880cb20eefabfb09341fba9e2bd29ad3dfa0000000000000000000000000000000000000000000001f6e605938955c72459,,,1,true -2682,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b01d0063978e8a6f96dbba91d681fc0c571040e9000000000000000000000000b01d0063978e8a6f96dbba91d681fc0c571040e9000000000000000000000000000000000000000000000000039bb49f599a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2688,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000201bb4f276c765df7225e5a4153e17edd23a67ec000000000000000000000000201bb4f276c765df7225e5a4153e17edd23a67ec0000000000000000000000000000000000000000000000000008e1bc9bf0400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2689,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000fa13b582b9d25da1949af33946803b265cb3f4fe0000000000000000000000000000000000000000000000048987425fb87d8118,,,1,true -2690,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000042fb05e09f8a477620defe49af76e577cbd791d80000000000000000000000000000000000000000000000017ea782127c5c28f9,,,1,true -2691,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000002923be587904f3034ffab36c86c495df3c21bc97000000000000000000000000000000000000000000000000513b21cedaeea1be,,,1,true -2694,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c90f88be812349fdd5655c9bad8288c03e7fb230000000000000000000000002c90f88be812349fdd5655c9bad8288c03e7fb23000000000000000000000000000000000000000000000000015b6a4d48065c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2695,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001060a694e21a2a8da7498a187a71969fafa454e40000000000000000000000001060a694e21a2a8da7498a187a71969fafa454e40000000000000000000000000000000000000000000000000054b271c7c30a3a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2696,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d86cb47446eb8ca8147718ef1b48bffc9166c79f000000000000000000000000d86cb47446eb8ca8147718ef1b48bffc9166c79f000000000000000000000000000000000000000000000000007df57f97201ec300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2697,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006cfe9755269786f6681518c00bd22801f98f9e570000000000000000000000006cfe9755269786f6681518c00bd22801f98f9e5700000000000000000000000000000000000000000000000005866c73ad83c34000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2703,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009ef1d4af28130d95e3144f92a47ed6230f3e06ce0000000000000000000000009ef1d4af28130d95e3144f92a47ed6230f3e06ce00000000000000000000000000000000000000000000000000dba9fea1ee8e8400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2704,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c90a1f7d2f7a2643e42a1d177505143190b061e0000000000000000000000002c90a1f7d2f7a2643e42a1d177505143190b061e0000000000000000000000000000000000000000000000000055b7cdd04aa64c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf1504ae86758b2f13423a094619ea709f7380c570d6ef87409de8c4658253feb,2022-03-15 06:30:48.000 UTC,0,true -2705,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006bad9a464a983fb5e0cb20c5e2b897f168749a870000000000000000000000006bad9a464a983fb5e0cb20c5e2b897f168749a870000000000000000000000000000000000000000000000000061ac0c7d99680f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2707,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cdbd5046d1ed8ea807ae9f358eb1c1d4fe0dea21000000000000000000000000cdbd5046d1ed8ea807ae9f358eb1c1d4fe0dea2100000000000000000000000000000000000000000000000000a7353341cdfb3f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2710,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000de16bf2560329013156a976064e7e67c1ef58f06000000000000000000000000de16bf2560329013156a976064e7e67c1ef58f06000000000000000000000000000000000000000000000005b58e73b33f8053e400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2711,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000848e40641cb32d03324b8db26f29ecc6dc996209000000000000000000000000848e40641cb32d03324b8db26f29ecc6dc99620900000000000000000000000000000000000000000000000000000000069f713400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2713,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f776290d2e599ae0f90e04245d4b7590ac228b35000000000000000000000000f776290d2e599ae0f90e04245d4b7590ac228b3500000000000000000000000000000000000000000000000001aad60affb2629a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xb995009bafd7ce77c1fa13b469c6a7cb3d54c23af5b8cf7d1b4e60d21cf1c294,2022-05-24 09:49:49.000 UTC,0,true -2715,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007988e3ae0d19eff3c8bc567ca0438f6df3cb28130000000000000000000000007988e3ae0d19eff3c8bc567ca0438f6df3cb2813000000000000000000000000000000000000000000000000004cfa9da2e1b05b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2717,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a030fe052d5269a45e63421e7122226a28941680000000000000000000000002a030fe052d5269a45e63421e7122226a28941680000000000000000000000000000000000000000000000000036721a1286392800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2721,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000007cbff01d1f33dc1933292c0b0e00ec7aaeffa2b300000000000000000000000000000000000000000000000a29daa7e2da799cdc,,,1,true -2723,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000003b1e3d1ed70d2a17c8eaf7da1a6be9f805a130e20000000000000000000000003b1e3d1ed70d2a17c8eaf7da1a6be9f805a130e2000000000000000000000000000000000000000000000005f47119d59905211b00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2724,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000008750e44dd494c88799d0fb0c6200d289c91d35ff0000000000000000000000008750e44dd494c88799d0fb0c6200d289c91d35ff000000000000000000000000000000000000000000000005bb5f25c22079947800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2729,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000096b3a83fe21c7382e6c5b565744af198dc4bba0300000000000000000000000096b3a83fe21c7382e6c5b565744af198dc4bba03000000000000000000000000000000000000000000000000020fd22ff89d93ff00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2730,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005e1703625848a41f9259e928c8d7ecc67b6885700000000000000000000000005e1703625848a41f9259e928c8d7ecc67b688570000000000000000000000000000000000000000000000000020bcef7d40f9da700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2732,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000e5214a481f2c2bbd501c14dfa66254a8a907cf39000000000000000000000000e5214a481f2c2bbd501c14dfa66254a8a907cf3900000000000000000000000000000000000000000000000057d9ec70c115b49000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2740,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000927521baeba66f707a77b91910a84ff5ccf3447a000000000000000000000000927521baeba66f707a77b91910a84ff5ccf3447a000000000000000000000000000000000000000000000000015e7ad661da0e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2741,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000013869f635f307b12919502a779cec0a8a9bcd27900000000000000000000000013869f635f307b12919502a779cec0a8a9bcd279000000000000000000000000000000000000000000000000015eb9c35a36510000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2742,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000d6c2ca9250bb228d7cf676127213f89ed6a147b0000000000000000000000000d6c2ca9250bb228d7cf676127213f89ed6a147b0000000000000000000000000000000000000000000000000000000000c6c2ddd00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xa8d4e2fce610e40ffe0708de338f3101faf19dc5e879469d93fbfcda0a867420,2022-05-29 06:35:11.000 UTC,0,true -2743,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ccf5ef7c438b95aea40b320ac03e4c9fceba2c70000000000000000000000005ccf5ef7c438b95aea40b320ac03e4c9fceba2c7000000000000000000000000000000000000000000000000004b74318a8d3f0800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2745,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6c2ca9250bb228d7cf676127213f89ed6a147b0000000000000000000000000d6c2ca9250bb228d7cf676127213f89ed6a147b0000000000000000000000000000000000000000000000000011c37937e08000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x64e20e946fcee8ca97f19b992bbaaa6361b75c284e059c72dd0102dcfc9938fc,2022-05-29 06:27:34.000 UTC,0,true -2746,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000349ea0b723e3692a2ddcc0ae5cc85640f372ffd1000000000000000000000000349ea0b723e3692a2ddcc0ae5cc85640f372ffd100000000000000000000000000000000000000000000000000000000036c08a500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2747,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000485464e51fba9955221a6263edde963dfd302a8b000000000000000000000000485464e51fba9955221a6263edde963dfd302a8b000000000000000000000000000000000000000000000000006b18bc01fe85ac00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2752,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1c0501bd0d44164955a4ce50a6a753671f4450d000000000000000000000000c1c0501bd0d44164955a4ce50a6a753671f4450d000000000000000000000000000000000000000000000000006e000d68236d9000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2753,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000022e9a33fb0cc6c1c8c4369b0cd7d042a8845829700000000000000000000000022e9a33fb0cc6c1c8c4369b0cd7d042a884582970000000000000000000000000000000000000000000000000159866b3ad77e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2759,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007c5f132b6e83edce850920328818b09e9163fa720000000000000000000000007c5f132b6e83edce850920328818b09e9163fa720000000000000000000000000000000000000000000000000014c80a80b08d5100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2760,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000aa2f9f0798fab1f08cf508b721e3a81dbe007e83000000000000000000000000000000000000000000000001e8c0be52c16a3746,0xf3b7e907903ae6bacc6a126b331b090a8917ffe41f4d748d7d62fe194c9532bc,2022-03-20 08:34:41.000 UTC,0,true -2764,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cddfdeec87b3041efca0367fb030bd302c4ef23b000000000000000000000000cddfdeec87b3041efca0367fb030bd302c4ef23b000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2765,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000528f3840fbad570d84d9b42e00dc3ad0bccd7432000000000000000000000000528f3840fbad570d84d9b42e00dc3ad0bccd7432000000000000000000000000000000000000000000000000001c622f8201330000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2767,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000ee49f82e58a1c2b306720d0c68047cbf70c11fb500000000000000000000000000000000000000000000002a0ad5a1bb32740c43,,,1,true -2768,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029b9650303f11b3f3b41ea8d6ee4372b460fdef400000000000000000000000029b9650303f11b3f3b41ea8d6ee4372b460fdef40000000000000000000000000000000000000000000000000008c7bd44e0930000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2770,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d4a089e9def16a9ba97fc768dd0a5a3e6912c1b0000000000000000000000000d4a089e9def16a9ba97fc768dd0a5a3e6912c1b00000000000000000000000000000000000000000000000000036f88e8c4122e400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x0b1bb9824c3715158ea500526bbf6d7cad10b6dd716a964e4fe83b48d386a5b9,2022-03-31 02:53:20.000 UTC,0,true -2772,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000b8011ebb5e71100f49c7283e44e00d31bdce3920000000000000000000000000b8011ebb5e71100f49c7283e44e00d31bdce39200000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2773,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008b75af058d0095f334445e157a0eda61d649438c0000000000000000000000008b75af058d0095f334445e157a0eda61d649438c000000000000000000000000000000000000000000000000001167441342593f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2774,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000074ab161045a668b624085fd8cb5c22946e74afca00000000000000000000000074ab161045a668b624085fd8cb5c22946e74afca000000000000000000000000000000000000000000000000000e9bf49997757e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2775,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c59ae3244f81ec51017943b1ed98cccc2345eaba000000000000000000000000c59ae3244f81ec51017943b1ed98cccc2345eaba000000000000000000000000000000000000000000000000000ffab1e53bf47800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2776,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000e31c6a20381739291ee364ccfc0264cb7d3d9a0d000000000000000000000000e31c6a20381739291ee364ccfc0264cb7d3d9a0d0000000000000000000000000000000000000000000000000000000000175fc800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2778,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000006c7409e7fd8ae66d0c5dde1e3b9093fbd0c69d670000000000000000000000006c7409e7fd8ae66d0c5dde1e3b9093fbd0c69d67000000000000000000000000000000000000000000000000000000000010f01d00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2779,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e4e92a22fe7795aec2decf363d8f2e8bcf25105f000000000000000000000000e4e92a22fe7795aec2decf363d8f2e8bcf25105f000000000000000000000000000000000000000000000000000db8581f46825500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2780,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000010217b5aa4704eab4c3224a5b1f3df610aa4aa7000000000000000000000000010217b5aa4704eab4c3224a5b1f3df610aa4aa700000000000000000000000000000000000000000000000000182d74b2f4e09100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2781,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004efc2658a6f7e83527ac5d9897bb0f849fc4078a0000000000000000000000004efc2658a6f7e83527ac5d9897bb0f849fc4078a000000000000000000000000000000000000000000000000001772b8fe82566700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2782,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e4835ead0fe80bc3dcb4861f4bc14163aae9711f000000000000000000000000e4835ead0fe80bc3dcb4861f4bc14163aae9711f0000000000000000000000000000000000000000000000000018a8a5dd968cec00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2783,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005696a90261307b12e96228549c71ae507c2895450000000000000000000000005696a90261307b12e96228549c71ae507c28954500000000000000000000000000000000000000000000000000184fe00fb5e8fd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2784,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008fae2b127c268174afaf3a022b365790096ba6b10000000000000000000000008fae2b127c268174afaf3a022b365790096ba6b100000000000000000000000000000000000000000000000000170c06142a0a6b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2785,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2b23a99acb2c5c3cfda13df9bf803d797afc975000000000000000000000000a2b23a99acb2c5c3cfda13df9bf803d797afc9750000000000000000000000000000000000000000000000000015a00e8ac60baf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2786,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005b0152655d10ac5689247d4a6c2229d01da444a80000000000000000000000005b0152655d10ac5689247d4a6c2229d01da444a8000000000000000000000000000000000000000000000000001530bfd662b83600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2788,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000396ae68e4526f1f46245283a066c912d4d4fd24e000000000000000000000000396ae68e4526f1f46245283a066c912d4d4fd24e000000000000000000000000000000000000000000000000002a5c1dc6ce4e3d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2789,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f6649002c7dee59a4019b1aa722c351c3a8e2af8000000000000000000000000f6649002c7dee59a4019b1aa722c351c3a8e2af80000000000000000000000000000000000000000000000000000b7a9e8e0cb4400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2792,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005c797bbeefc7aa6124ec07ea6a0c581d9cb48fa70000000000000000000000005c797bbeefc7aa6124ec07ea6a0c581d9cb48fa700000000000000000000000000000000000000000000000000ae153d89fe800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2793,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000456e580211757f57cb0eefb35db9283b2a969cb8000000000000000000000000456e580211757f57cb0eefb35db9283b2a969cb800000000000000000000000000000000000000000000000315f58f68cba75b2f00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xa4e209aff277776b5e52d8193c789b03f0a2486d10fe5347648eae33190362b3,2022-03-12 12:08:07.000 UTC,0,true -2796,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001ae748c5a1358726a5935a658b5c8ddb3fecca6a0000000000000000000000001ae748c5a1358726a5935a658b5c8ddb3fecca6a00000000000000000000000000000000000000000000000000055ad034145b4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2798,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c02fadedc679cec2889bbaf8997caa1a7e06231e000000000000000000000000c02fadedc679cec2889bbaf8997caa1a7e06231e000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2799,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000a48ccb8eaaa1e7450fe4a3c0988686ab07ec47d50000000000000000000000000000000000000000000000007a911de7cb73821e,,,1,true -2801,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de64ab675699eadb0abf518d6dbe2d2b90c0641f000000000000000000000000de64ab675699eadb0abf518d6dbe2d2b90c0641f000000000000000000000000000000000000000000000000015b372f422f8a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2805,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004287dc8c78f605812d00c102663ebcec851e1c200000000000000000000000004287dc8c78f605812d00c102663ebcec851e1c2000000000000000000000000000000000000000000000000015b7b6c8aaee60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2807,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c61b1d11cd97842068b40af602a3efb53518124d000000000000000000000000c61b1d11cd97842068b40af602a3efb53518124d0000000000000000000000000000000000000000000000000d7fa27a7bce38ef00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2808,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049f9307536739580deb16f2dae82ba0d25a23b4700000000000000000000000049f9307536739580deb16f2dae82ba0d25a23b47000000000000000000000000000000000000000000000000068609e5f48d0b9900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2809,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d678a8f39dcb33503082220d143a55c58eee15af000000000000000000000000d678a8f39dcb33503082220d143a55c58eee15af00000000000000000000000000000000000000000000000001ecc30c778542f800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2810,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a34faa5b9b9e29c191e163a520edeea93a574ba3000000000000000000000000a34faa5b9b9e29c191e163a520edeea93a574ba3000000000000000000000000000000000000000000000000011684a847196e8400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2811,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000740f3065217ff67e3a13e2634600aed26d9a1368000000000000000000000000740f3065217ff67e3a13e2634600aed26d9a1368000000000000000000000000000000000000000000000000000000000381797400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2816,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000310a744e293ed94f411f9e20764e50af370190d5000000000000000000000000310a744e293ed94f411f9e20764e50af370190d500000000000000000000000000000000000000000000000000aa19927f459e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2820,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005aa8cd3337559a8f230d2043520474fbc19328b20000000000000000000000005aa8cd3337559a8f230d2043520474fbc19328b200000000000000000000000000000000000000000000000004db73254763000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2821,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a08325ad00da971cb66a5e9e04ad3529b8f59ab0000000000000000000000002a08325ad00da971cb66a5e9e04ad3529b8f59ab00000000000000000000000000000000000000000000000000cf4e65ae9c6fc700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2822,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a5835487b38fceafb04a4025dd16cecc8b8c70e3000000000000000000000000a5835487b38fceafb04a4025dd16cecc8b8c70e300000000000000000000000000000000000000000000000006ea9a5446b41b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2823,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e8166910000000000000000000000004b5f7206945951dc0bcf4c0bc5496dbee692a2c90000000000000000000000004b5f7206945951dc0bcf4c0bc5496dbee692a2c900000000000000000000000000000000000000000000000088fbc15536255e2f00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2825,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d923afc2fa9c1e04c496a5d5c52a611244f62e0e000000000000000000000000d923afc2fa9c1e04c496a5d5c52a611244f62e0e000000000000000000000000000000000000000000000000006df46b0a5152b800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2827,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000eccd7127ed5c291fb1e91ef5aa62113d30769345000000000000000000000000000000000000000000000000bea27ec6e3d26de1,,,1,true -2828,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005fd34bf29b43d7eedbd91dc664224ecb835a69270000000000000000000000005fd34bf29b43d7eedbd91dc664224ecb835a69270000000000000000000000000000000000000000000000000418c346d46fef0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xc7828d0a187f65f16ca3efc2d6d710866b6b4e5fac1fd06683ee587a9aa5ba55,2022-01-12 15:50:56.000 UTC,0,true -2829,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000088371ada6fc43d0fddc693bdf325b0cd50360dc300000000000000000000000088371ada6fc43d0fddc693bdf325b0cd50360dc3000000000000000000000000000000000000000000000000004e45ceeb63677100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2832,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fd64a097f72382e6d32a0712cdfdd45cc72b1a03000000000000000000000000fd64a097f72382e6d32a0712cdfdd45cc72b1a03000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2833,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d86222e339787a874179a41c598bca46d5d3c9f0000000000000000000000002d86222e339787a874179a41c598bca46d5d3c9f000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2836,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b3430b686daa829162d2aba22c815ad3b5882f00000000000000000000000000b3430b686daa829162d2aba22c815ad3b5882f0000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2837,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000dc5edfeb777bdfaa851ebda34c102162738290da00000000000000000000000000000000000000000000000104af5f608946e774,,,1,true -2838,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f7712f47bb2527b76a011656947b964c2f5733ba0000000000000000000000000000000000000000000000000fd25b65ebd0b805,,,1,true -2839,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000c1df5e5f5ac6112c9e6677550eb5e53e59651b3c000000000000000000000000000000000000000000000027fac89b0704e5bb61,,,1,true -2842,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004be3ea1967d4117c93a39048316c058025e237c40000000000000000000000004be3ea1967d4117c93a39048316c058025e237c400000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2844,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000004647116a410ca5e80ee2be0077335bbf0db351660000000000000000000000004647116a410ca5e80ee2be0077335bbf0db35166000000000000000000000000000000000000000000000000000000001dcd650000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x420ea7b3d530ee2cde60866f7e6dabc23414239c66f8954b8cacc7dd589b9eb6,2022-03-12 11:55:14.000 UTC,0,true -2845,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002fa11fbb46e2e09c5e648780e2058d490075374a0000000000000000000000002fa11fbb46e2e09c5e648780e2058d490075374a000000000000000000000000000000000000000000000000002a2f3497df273500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2846,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000077ca57216b0c71c3497ec7e62d622f559507333100000000000000000000000077ca57216b0c71c3497ec7e62d622f5595073331000000000000000000000000000000000000000000000000058503666c60fd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xabba7e32fabcbc9565be73583a7d5a8c64b3a234f4568ac2096fde18fb768567,2022-01-12 15:07:55.000 UTC,0,true -2847,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea45236ceafd11e1771010ee65f3068f7b5d8875000000000000000000000000ea45236ceafd11e1771010ee65f3068f7b5d887500000000000000000000000000000000000000000000000000aa6ce9eee55c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2849,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d62966761b3451e272f3498b8f1692b1c5cf6666000000000000000000000000d62966761b3451e272f3498b8f1692b1c5cf6666000000000000000000000000000000000000000000000000015a1e1ddbc6a30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2850,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ffec51798fef19426dfb32260a0967f9f7e6fd49000000000000000000000000ffec51798fef19426dfb32260a0967f9f7e6fd490000000000000000000000000000000000000000000000000244ac7c10ec94cf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2851,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c26936faf3a8377211cf21ad6901c830f5fe960d000000000000000000000000c26936faf3a8377211cf21ad6901c830f5fe960d00000000000000000000000000000000000000000000000001553324fa1908fe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2853,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cd041ba479812a3fb310f9553ce57830cb2e351d000000000000000000000000cd041ba479812a3fb310f9553ce57830cb2e351d0000000000000000000000000000000000000000000000001c4a7575523a3dad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2858,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc1199a5a915a162542ca155d432955151202f0c000000000000000000000000fc1199a5a915a162542ca155d432955151202f0c0000000000000000000000000000000000000000000000000043115f2cedc40900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2861,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a8b65faa0017439057d066e1ab0c597f455b2000000000000000000000000002a8b65faa0017439057d066e1ab0c597f455b20000000000000000000000000000000000000000000000000000567030cb69454600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2867,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000532cb3e10f461280946d139ccb2bf1bd64ba047a000000000000000000000000532cb3e10f461280946d139ccb2bf1bd64ba047a00000000000000000000000000000000000000000000000000624e9f1e41320000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2870,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000003a0fbb2f36271ff92ed8a16ca0343a0f320cfcd50000000000000000000000003a0fbb2f36271ff92ed8a16ca0343a0f320cfcd500000000000000000000000000000000000000000000000000000000058e37e000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2873,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a1a56693e8bde18b243a243c925fb2c9f411c205000000000000000000000000a1a56693e8bde18b243a243c925fb2c9f411c205000000000000000000000000000000000000000000000000005cbb71417b494900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2876,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000662cc488fb749f4ed36396d23cfae84744d692ac000000000000000000000000662cc488fb749f4ed36396d23cfae84744d692ac00000000000000000000000000000000000000000000000004c9bc631c7f16cf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2883,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f2204f49157651f314395f4703622e3fdc8df4e0000000000000000000000007f2204f49157651f314395f4703622e3fdc8df4e000000000000000000000000000000000000000000000000015935fda850290000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2889,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000099a78666b72cb7c0e580e8fc77243146c8fddf59000000000000000000000000000000000000000000000000e86af39d60950e42,,,1,true -2890,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000069568f518102ea935ad2076d088243c6ab0d490f00000000000000000000000000000000000000000000000c5f79a53c5e43c96b,0x818d745b274097ace211a8f7bd36e05aa8a670ebcfe147b177abc3386dad9292,2021-11-28 01:39:28.000 UTC,0,true -2896,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000c2768e9353bf078ace3c345d279e27d393d5c4870000000000000000000000000000000000000000000000076511ac44d3090000,,,1,true -2902,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c82508ef698a893a603d5935305af7c319d61980000000000000000000000000c82508ef698a893a603d5935305af7c319d619800000000000000000000000000000000000000000000000000455d7255ca200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2905,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000073d321b0d6639890a13b833777b6fd2b666b16e400000000000000000000000073d321b0d6639890a13b833777b6fd2b666b16e4000000000000000000000000000000000000000000000000001c4442cc2e120000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2908,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f433bdbf45ae8396805f5882c9f395b246e62af8000000000000000000000000f433bdbf45ae8396805f5882c9f395b246e62af800000000000000000000000000000000000000000000000002c4b8a81e45a56700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2911,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000024f1bb02c7195769acb9fd1d24fdeee6409df62000000000000000000000000024f1bb02c7195769acb9fd1d24fdeee6409df6200000000000000000000000000000000000000000000000000031bced02db000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xba87426646b7d517a2f7dedcaa761d0dba7714ac0ae9a71fc683543872c7823d,2022-04-11 11:24:29.000 UTC,0,true -2913,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d94c5888ef3ab24ad580e8cd04dbc2e2a847b815000000000000000000000000d94c5888ef3ab24ad580e8cd04dbc2e2a847b81500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2914,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000006e401916f9e149f20a1e3137d2897f843b510c64000000000000000000000000000000000000000000000000fd20433c6ed22175,,,1,true -2915,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d600fee9e4162c74a59c7ca3973342d8aa491c70000000000000000000000007d600fee9e4162c74a59c7ca3973342d8aa491c70000000000000000000000000000000000000000000000000008f7bf72006d2000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2916,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9461f543b102000193c3d7438d11f9135121f24000000000000000000000000f9461f543b102000193c3d7438d11f9135121f240000000000000000000000000000000000000000000000000012ae0b321c689100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2917,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000731773eb516e29d9fa37710d9e5dcdc25411d5af000000000000000000000000731773eb516e29d9fa37710d9e5dcdc25411d5af0000000000000000000000000000000000000000000000000035deecb7c78e8300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2920,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000050212068f8968b5ce25acdf662f030635d1aaecb00000000000000000000000050212068f8968b5ce25acdf662f030635d1aaecb000000000000000000000000000000000000000000000000017507f7e547903000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2921,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000052a38af7d4000a763da8e6164286b59aaf11c51d00000000000000000000000052a38af7d4000a763da8e6164286b59aaf11c51d0000000000000000000000000000000000000000000000000000000029f24ffb00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2923,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b843de66d048e87d986c6dda826a79e9a724d894000000000000000000000000b843de66d048e87d986c6dda826a79e9a724d8940000000000000000000000000000000000000000000000000086bd4808b2ee8900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2925,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045852f7653d50d9178545a024fb8d47840e7ca0800000000000000000000000045852f7653d50d9178545a024fb8d47840e7ca0800000000000000000000000000000000000000000000000008fdde787fc0c10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2931,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000062183389f5ff91af9eef1c832ef5913bc34656f100000000000000000000000062183389f5ff91af9eef1c832ef5913bc34656f10000000000000000000000000000000000000000000000000048e3db2425d2fc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9674231b5f21ffcbdca38352610cedae60f3b2ba80d05dbec936a68ea54c0a2b,2022-05-22 14:36:08.000 UTC,0,true -2935,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009b17f6649326e8f8399dacd0ecd69e7251ca92700000000000000000000000009b17f6649326e8f8399dacd0ecd69e7251ca927000000000000000000000000000000000000000000000000000bfb0c17e5571c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2936,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c3dfba44f5c693315d33d85dd5ca965e09bbcbcb000000000000000000000000c3dfba44f5c693315d33d85dd5ca965e09bbcbcb0000000000000000000000000000000000000000000000000032bae7a20a5dd600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2939,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f3d41662bcfbf1ebb14917fcc006ee8ddf3fc7f0000000000000000000000007f3d41662bcfbf1ebb14917fcc006ee8ddf3fc7f000000000000000000000000000000000000000000000000001471362cbd76c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2940,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f7674c70da5241c4f16c33988d6fa879c19072fd00000000000000000000000000000000000000000000000117651c236f3d320f,,,1,true -2943,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000041ceb0d694110b702e2999e54d192c3db4a469760000000000000000000000000000000000000000000000011d744b20a777d1ff,,,1,true -2946,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000004c622a5d55c5cf1bfb8d639ffe702f62a5f77af2000000000000000000000000000000000000000000000009b070adf56505f299,,,1,true -2947,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000a13a510a8fe699c3eb703a5796475536b956aff9000000000000000000000000a13a510a8fe699c3eb703a5796475536b956aff900000000000000000000000000000000000000000000000000000000001053b000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2948,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000001a4decf9f5756ca8cefc99651527dd207403a9f30000000000000000000000001a4decf9f5756ca8cefc99651527dd207403a9f30000000000000000000000000000000000000000000000000efcee47256c000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2949,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000046354310e7621674983306ab8a5085f27a12747a00000000000000000000000046354310e7621674983306ab8a5085f27a12747a0000000000000000000000000000000000000000000000000f207539952d000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2950,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000ec4e39fa0442cbef61f9a9a09e696f599d1e0dfa000000000000000000000000ec4e39fa0442cbef61f9a9a09e696f599d1e0dfa0000000000000000000000000000000000000000000000000f43fc2c04ee000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2952,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a30bad98f277222ef1b732ee5d4d442f90c5b035000000000000000000000000a30bad98f277222ef1b732ee5d4d442f90c5b035000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2953,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f6aae268ffdfd96eb01866c8b7b0b12cbdb73ac4000000000000000000000000f6aae268ffdfd96eb01866c8b7b0b12cbdb73ac400000000000000000000000000000000000000000000000001bc9ca405e4243700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2955,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000006e401916f9e149f20a1e3137d2897f843b510c64000000000000000000000000000000000000000000000000045ba9fb820dd512,,,1,true -2960,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f45fe3fc22116eb8cac9467ed992b2ee5b64bfe0000000000000000000000007f45fe3fc22116eb8cac9467ed992b2ee5b64bfe000000000000000000000000000000000000000000000000006b929aa06a9a8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2962,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000c2142f5c34a7b0c01ef7cae326d4c16132996e33000000000000000000000000c2142f5c34a7b0c01ef7cae326d4c16132996e3300000000000000000000000000000000000000000000001cb93fe45e8d4bb3cf00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2963,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000007bb0185b1ea004cee1e8d006394cc5d85897fe510000000000000000000000007bb0185b1ea004cee1e8d006394cc5d85897fe510000000000000000000000000000000000000000000000140ec80fa7ee88000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x3d84f2dedac8912736dc91bb283a83f3c8b405e230d53fff39dc3b2e28573994,2022-04-24 07:31:07.000 UTC,0,true -2966,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000149762ef3b4ec34b015ee92ed9e64e2f6dfe8f6e000000000000000000000000000000000000000000000000e7255200bb918000,,,1,true -2967,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000149762ef3b4ec34b015ee92ed9e64e2f6dfe8f6e000000000000000000000000149762ef3b4ec34b015ee92ed9e64e2f6dfe8f6e000000000000000000000000000000000000000000000000007bb9a73ac3d40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2974,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f5a9ee2ba013adfc5bf7412eb186a32d9677ba03000000000000000000000000f5a9ee2ba013adfc5bf7412eb186a32d9677ba030000000000000000000000000000000000000000000000000015ff5a92d0b50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2975,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000ad9993d36bb4035bb908d685ad4090e7689d3edb000000000000000000000000ad9993d36bb4035bb908d685ad4090e7689d3edb0000000000000000000000000000000000000000000000000f67831e74af000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -2981,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f0aaaeb39bd9b06905bfd85f37ab59440aa597d4000000000000000000000000f0aaaeb39bd9b06905bfd85f37ab59440aa597d4000000000000000000000000000000000000000000000000000cc9b30494ad3f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2982,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a25ca2d4f30a9ad367910ee528c7ab65b8184e39000000000000000000000000a25ca2d4f30a9ad367910ee528c7ab65b8184e390000000000000000000000000000000000000000000000000005484b203355d100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2987,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000569bfce7a6a72439d699a795c54f66826674e138000000000000000000000000569bfce7a6a72439d699a795c54f66826674e13800000000000000000000000000000000000000000000000000188b4bca2fe40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -2993,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7c8f980c23dd350ddb52905d5104b3eb6a3d035000000000000000000000000d7c8f980c23dd350ddb52905d5104b3eb6a3d03500000000000000000000000000000000000000000000000000b764ae64a3e8ad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x8aaa4751c162be82bb9c7bad6ae34eea99c354b4ed83e5bc353982ab76ec70cf,2022-02-06 12:28:02.000 UTC,0,true -3006,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000047eaaed95dc2b665b7c99e2c83e77552a290bc8100000000000000000000000047eaaed95dc2b665b7c99e2c83e77552a290bc810000000000000000000000000000000000000000000000000f8b0a10e470000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3007,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000003d8ec20c567180efa4ed40a56463ef7e544ccf470000000000000000000000003d8ec20c567180efa4ed40a56463ef7e544ccf470000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3008,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000006e28fd005399e9ea1354fea0374a8d24a67e70610000000000000000000000006e28fd005399e9ea1354fea0374a8d24a67e70610000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3009,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000007e273826908f8085a9a8b8e13536cc55a4542c8e0000000000000000000000007e273826908f8085a9a8b8e13536cc55a4542c8e0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3010,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000004c3351aa306e945825d8531e4d63787b107c9ac20000000000000000000000004c3351aa306e945825d8531e4d63787b107c9ac20000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3011,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000035918cf35b5c97ea1879101c2fdc46296efec18e00000000000000000000000035918cf35b5c97ea1879101c2fdc46296efec18e0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3012,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000002ea67afd407445ecffda6b010419da2cb85a8c1e0000000000000000000000002ea67afd407445ecffda6b010419da2cb85a8c1e0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3013,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000000b716ac1490cb07340a58cdaee34abf9af7b2d510000000000000000000000000b716ac1490cb07340a58cdaee34abf9af7b2d510000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3014,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000006044e2ad9edce0ac262fb8e5048230dc83bffd760000000000000000000000006044e2ad9edce0ac262fb8e5048230dc83bffd760000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3016,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c691644b8095f9c4bb8a002acec957f4ffe368c1000000000000000000000000c691644b8095f9c4bb8a002acec957f4ffe368c1000000000000000000000000000000000000000000000000149b89020e50b7d500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3017,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000891acdefa5f01ab48bf69ff789ce9d3a9997f017000000000000000000000000000000000000000000000003afb087b876900000,,,1,true -3018,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f85c77731efa8dddc03e6196a838711fa36b81e0000000000000000000000000f85c77731efa8dddc03e6196a838711fa36b81e00000000000000000000000000000000000000000000000000033e2c078aaddb900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3022,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000014e8b481bffa5df52a7513612c65003e6bb8237a00000000000000000000000014e8b481bffa5df52a7513612c65003e6bb8237a0000000000000000000000000000000000000000000000000076682ec4f3f1f900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3026,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000214016af97e9435189d81c57864f6256b86e9c330000000000000000000000000000000000000000000000059351d3b293df6355,,,1,true -3029,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000038b15bfda512900fcd056ab43b009fa86234cda900000000000000000000000038b15bfda512900fcd056ab43b009fa86234cda90000000000000000000000000000000000000000000000000032c6b789309f6000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3039,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f23cd4c0cffc6cebd92c189b961b51bef93bd5f10000000000000000000000000000000000000000000000001dcbf130de84fdd1,,,1,true -3043,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000baac2b4491727d78d2b78815144570b9f2fe88990000000000000000000000008f69ee043d52161fd29137aedf63f5e70cd504d500000000000000000000000023bc95f84bd43c1fcc2bc285fda4cb12f9aee2df00000000000000000000000023bc95f84bd43c1fcc2bc285fda4cb12f9aee2df000000000000000000000000000000000000000000000003bd913e6c1df4000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3044,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005b1899d88b4ff0cf5a34651e7ce7164398211c660000000000000000000000005b1899d88b4ff0cf5a34651e7ce7164398211c66000000000000000000000000000000000000000000000000001841922677b8cd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3050,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009a4c18d444dc710828665f2fbfa6301e64412a560000000000000000000000009a4c18d444dc710828665f2fbfa6301e64412a56000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3051,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f771cff1d5ffd05e877447c7604c4d0fe03ca884000000000000000000000000f771cff1d5ffd05e877447c7604c4d0fe03ca884000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3053,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000367bab5c08fd07956f6f70fa3871e1cbca917569000000000000000000000000367bab5c08fd07956f6f70fa3871e1cbca917569000000000000000000000000000000000000000000000000006a7054713fdb3600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3055,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000046ac0c9c530dc960a4df75b20b594fba243e5b7c00000000000000000000000000000000000000000000000090942a24a68a4cbe,,,1,true -3056,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000fc3551f3b51f27ca60efb25f45ed95d4e80e707100000000000000000000000000000000000000000000000071765f0478a614ed,,,1,true -3057,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cb9c0e20fa62e08e8f8d4588efbb8d63ed7331d3000000000000000000000000cb9c0e20fa62e08e8f8d4588efbb8d63ed7331d3000000000000000000000000000000000000000000000000027f7d0bdb92000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3058,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000046ac0c9c530dc960a4df75b20b594fba243e5b7c000000000000000000000000000000000000000000000000f869cca7ed0038b7,,,1,true -3059,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f4fcc2d19ae692a7aeb7d540139a37c7af1205c4000000000000000000000000f4fcc2d19ae692a7aeb7d540139a37c7af1205c40000000000000000000000000000000000000000000000000214e8348c4f000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xb9b522c09ba76f609698b09c75be96a4dc66fc5b41e59e2dd9e1c01cdf7e3994,2021-11-28 14:32:49.000 UTC,0,true -3060,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc89ec35fcecc62273603b6031f93ca692a54414000000000000000000000000cc89ec35fcecc62273603b6031f93ca692a54414000000000000000000000000000000000000000000000000021772c9b190a25800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3061,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000384b123866cd169d1bd00c67a2c869cc836022bb000000000000000000000000384b123866cd169d1bd00c67a2c869cc836022bb000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3062,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000086e4bf82ce08af2202696cf432211ce782d02fb600000000000000000000000086e4bf82ce08af2202696cf432211ce782d02fb600000000000000000000000000000000000000000000000000ab9d2ba41f654b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3063,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000565fe00d8b1ea73adecd7bb86755866242219a31000000000000000000000000565fe00d8b1ea73adecd7bb86755866242219a310000000000000000000000000000000000000000000000065c74b174e14505d400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3064,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f4e6e329e85673be7a15b5ed3c4399a8ba951bc6000000000000000000000000f4e6e329e85673be7a15b5ed3c4399a8ba951bc6000000000000000000000000000000000000000000000000029249fd61b8e1a900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3066,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000095b391ce72da4fd408fd5f0e6c9b697db7ce181000000000000000000000000095b391ce72da4fd408fd5f0e6c9b697db7ce1810000000000000000000000000000000000000000000000000002453edde94d66400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3068,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000087fbccf395d7637bb4baab7602ba78f3edd1277400000000000000000000000087fbccf395d7637bb4baab7602ba78f3edd1277400000000000000000000000000000000000000000000000014c9889c3328fb0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9803cad0b6096136d7f66e08886c960af2fb72eecfb5e4099a50f060b9a1045e,2022-06-17 06:36:16.000 UTC,0,true -3070,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f20872b1517b641bdc0680cc279e0ed33e9b41c0000000000000000000000002f20872b1517b641bdc0680cc279e0ed33e9b41c000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3071,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac4bfcd893230a82f9f905f92457378b52a1d706000000000000000000000000ac4bfcd893230a82f9f905f92457378b52a1d706000000000000000000000000000000000000000000000000006377fc7ef7fc0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3074,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f278ac8e97dd418a3ce13307fa1b44ff87a18f7c000000000000000000000000f278ac8e97dd418a3ce13307fa1b44ff87a18f7c000000000000000000000000000000000000000000000000003873329a317a1700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3076,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e095d1a7ed1a1173d69d7bd724b2b7c6c81b0e4b000000000000000000000000e095d1a7ed1a1173d69d7bd724b2b7c6c81b0e4b000000000000000000000000000000000000000000000000005cd42e99b2990700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3077,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000315483c35d2c1ea9d5be576b0f795ae8cd0d4de0000000000000000000000000315483c35d2c1ea9d5be576b0f795ae8cd0d4de000000000000000000000000000000000000000000000000003c37bf0ca21f5500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3078,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006148c045497f07cda8c2d74a54e510fea4b4ee590000000000000000000000006148c045497f07cda8c2d74a54e510fea4b4ee59000000000000000000000000000000000000000000000000008187f32f0f290000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3080,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000006ed916e093ebccc790109f4a2073bff50cf9160e0000000000000000000000000000000000000000000000022b1c8c1227a00000,,,1,true -3081,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000000d20fc3c32b213a39b0314ce804ba33aa5c6ed6f000000000000000000000000000000000000000000000004e341d84852aef2c9,,,1,true -3092,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000549750e6b5b40e627365bdcf7f7780dbfde113a4000000000000000000000000549750e6b5b40e627365bdcf7f7780dbfde113a4000000000000000000000000000000000000000000000000015bbfa9d32e420000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3094,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000084f1e7260d927e3d2ea4f5c4ba1f52946420ff0400000000000000000000000084f1e7260d927e3d2ea4f5c4ba1f52946420ff0400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3095,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000781cdc81cc8a315433bdc1c581a649c4c0d61ee7000000000000000000000000781cdc81cc8a315433bdc1c581a649c4c0d61ee7000000000000000000000000000000000000000000000000052b4c0a4ee1dbff00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3103,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b62832f8b38570909411d32088fa3eb5d5752bed000000000000000000000000b62832f8b38570909411d32088fa3eb5d5752bed00000000000000000000000000000000000000000000000004f924563be6636900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3105,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa3c2d7d282de8cdd14e97e61d0887d6ce2edafd000000000000000000000000aa3c2d7d282de8cdd14e97e61d0887d6ce2edafd00000000000000000000000000000000000000000000000001f833f035ec0b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x0c3a265d41b13d33f24b2a1611738fafc2be4ad5eb0f9597602b3e37152e5f6d,2021-12-02 23:39:35.000 UTC,0,true -3106,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa1fbe434eb61ca6d7967e7ddc13d93422007892000000000000000000000000aa1fbe434eb61ca6d7967e7ddc13d93422007892000000000000000000000000000000000000000000000000006b4231355963bc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3107,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a0b0a2b343a6cbfb1a2c4eb70ab06b6829e9db9a000000000000000000000000a0b0a2b343a6cbfb1a2c4eb70ab06b6829e9db9a0000000000000000000000000000000000000000000000000095fa88b4a6a67a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3108,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a1de8febdeda64438bdff1ceb70bf6e0820794b1000000000000000000000000a1de8febdeda64438bdff1ceb70bf6e0820794b1000000000000000000000000000000000000000000000000008f2b935ff7c07200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3109,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000fd65af1a0f332c6ee4d3c787a65b0ad674e847ef000000000000000000000000fd65af1a0f332c6ee4d3c787a65b0ad674e847ef00000000000000000000000000000000000000000000000010cac896d239000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3110,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000bb24fdb708e47f85712ab07df417056e4c1438a4000000000000000000000000bb24fdb708e47f85712ab07df417056e4c1438a400000000000000000000000000000000000000000000000010ee4f8941fa000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3111,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000e7166fd81bb217a5c05cefb6e1570bda50cfb21f000000000000000000000000e7166fd81bb217a5c05cefb6e1570bda50cfb21f0000000000000000000000000000000000000000000000001111d67bb1bb000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3112,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000004d9248bd9809b4acc33fedb4ee6101e27e5adbc50000000000000000000000004d9248bd9809b4acc33fedb4ee6101e27e5adbc500000000000000000000000000000000000000000000000011355d6e217c000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3113,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000dd8836898c60e12c064e9b33f78adbebd54a2d14000000000000000000000000dd8836898c60e12c064e9b33f78adbebd54a2d140000000000000000000000000000000000000000000000001158e460913d000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3114,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000b838af0c27e59dd996dd8f4e9a6b758f589a92d7000000000000000000000000b838af0c27e59dd996dd8f4e9a6b758f589a92d7000000000000000000000000000000000000000000000000117c6b5300fe000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3115,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000004d9c2724ae629133e695a6b68b257bb2537263500000000000000000000000004d9c2724ae629133e695a6b68b257bb25372635000000000000000000000000000000000000000000000000119ff24570bf000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3116,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000c2f0b9c7da3494c6fe553c48dc103bb8b5b4b27d000000000000000000000000c2f0b9c7da3494c6fe553c48dc103bb8b5b4b27d00000000000000000000000000000000000000000000000011c37937e080000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3117,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000007f07fc54c59286b42267f550447b3341ef086c200000000000000000000000007f07fc54c59286b42267f550447b3341ef086c2000000000000000000000000000000000000000000000000011e7002a5041000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3118,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000c7cf2ecccece264008aa10dd26fbfcf17b8a1a60000000000000000000000000c7cf2ecccece264008aa10dd26fbfcf17b8a1a60000000000000000000000000000000000000000000000000120a871cc002000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3119,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000596e114e8ff94a75645e67b3d2e3b7fc277cee75000000000000000000000000596e114e8ff94a75645e67b3d2e3b7fc277cee75000000000000000000000000000000000000000000000000122e0e0f2fc3000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3120,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000bd4a8e573a9dd2d20edae1c43c7477e719043296000000000000000000000000bd4a8e573a9dd2d20edae1c43c7477e719043296000000000000000000000000000000000000000000000000125195019f84000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3121,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000dcf71305489604918dc84a42c613104e50a25b4f000000000000000000000000dcf71305489604918dc84a42c613104e50a25b4f00000000000000000000000000000000000000000000000012751bf40f45000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3122,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000008ec827c95d55f097365e47c46cdd0e6d178362f70000000000000000000000008ec827c95d55f097365e47c46cdd0e6d178362f70000000000000000000000000000000000000000000000001298a2e67f06000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3123,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000c65b964cc64973ec71af5345145a6808117127d0000000000000000000000000c65b964cc64973ec71af5345145a6808117127d000000000000000000000000000000000000000000000000012bc29d8eec7000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3124,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000000678ddbda74966f453472fa6c56e15b76ccc162e0000000000000000000000000678ddbda74966f453472fa6c56e15b76ccc162e00000000000000000000000000000000000000000000000012dfb0cb5e88000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3125,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000095db6d4e7596331e6a4c433f58414ac8f1d354b000000000000000000000000095db6d4e7596331e6a4c433f58414ac8f1d354b0000000000000000000000000000000000000000000000000130337bdce49000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3126,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000fe87e90e5a93f099faabc86fc2647001f723cd79000000000000000000000000fe87e90e5a93f099faabc86fc2647001f723cd790000000000000000000000000000000000000000000000001326beb03e0a000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3127,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000008c351deac0d2fb6ee213f6a460de47feba26fe5e0000000000000000000000008c351deac0d2fb6ee213f6a460de47feba26fe5e000000000000000000000000000000000000000000000000134a45a2adcb000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3128,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000faf24f3eaee54b20f1cb50f9ec27674a3a7f7b51000000000000000000000000faf24f3eaee54b20f1cb50f9ec27674a3a7f7b51000000000000000000000000000000000000000000000000136dcc951d8c000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3129,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000d582528b2ced3ea73d247dd6015757c84f83531e000000000000000000000000d582528b2ced3ea73d247dd6015757c84f83531e000000000000000000000000000000000000000000000000139153878d4d000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3130,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000581dcd3c175619057557d9c504578def15f394de000000000000000000000000581dcd3c175619057557d9c504578def15f394de00000000000000000000000000000000000000000000000013b4da79fd0e000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3131,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000004f88513b32d2a747355cc98d8eb7c617c91b9f670000000000000000000000004f88513b32d2a747355cc98d8eb7c617c91b9f6700000000000000000000000000000000000000000000000013d8616c6ccf000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3132,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000dee9350fc8e38d1dca06fdf916bffeddeff468d7000000000000000000000000dee9350fc8e38d1dca06fdf916bffeddeff468d700000000000000000000000000000000000000000000000013fbe85edc90000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3133,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000acb1e9a1dc81c64520f300793f076295929d6b19000000000000000000000000acb1e9a1dc81c64520f300793f076295929d6b19000000000000000000000000000000000000000000000000141f6f514c51000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3134,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000f953a0f3335574e1f4b2f77c3fb7a7a465fa5f20000000000000000000000000f953a0f3335574e1f4b2f77c3fb7a7a465fa5f200000000000000000000000000000000000000000000000001442f643bc12000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3137,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000ae2adf9a0727e69b6f5105d183e684894a75d39a00000000000000000000000000000000000000000000000087f76835c87c8b71,,,1,true -3141,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea3088c92ccf0874c6a13062745fc6b1552a1a87000000000000000000000000ea3088c92ccf0874c6a13062745fc6b1552a1a8700000000000000000000000000000000000000000000000000034b3c6e5f6b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3143,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000e4e87ef976eab568fda866d23141d37950baf4d9000000000000000000000000e4e87ef976eab568fda866d23141d37950baf4d900000000000000000000000000000000000000000000000000000000da6a919800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3146,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cffd91182d94fb37a49fbd626400468197291ccd000000000000000000000000cffd91182d94fb37a49fbd626400468197291ccd0000000000000000000000000000000000000000000000000429d069189e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3147,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a4bc8e08f7ba01043b2088040255036b57edaf91000000000000000000000000a4bc8e08f7ba01043b2088040255036b57edaf9100000000000000000000000000000000000000000000000001e3a602772762cd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3148,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047f80003f5dfa14c12d25dd52c2bbab9f206504e00000000000000000000000047f80003f5dfa14c12d25dd52c2bbab9f206504e0000000000000000000000000000000000000000000000001b52dc7772062e8a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3149,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e1344576ad891ac66e5252dba5365b88da1fd99b000000000000000000000000e1344576ad891ac66e5252dba5365b88da1fd99b00000000000000000000000000000000000000000000000000934b72171c0d6b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3151,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dba4f369e6fce16c0552bb9cb6e0df6b89a0eed1000000000000000000000000dba4f369e6fce16c0552bb9cb6e0df6b89a0eed100000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3153,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009c9fd4438cbc2a251bbf67877c4b70e18e74e4530000000000000000000000009c9fd4438cbc2a251bbf67877c4b70e18e74e45300000000000000000000000000000000000000000000000001547251fa85e06f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3155,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000081d7d26fbc67b56bebf9c6b1937ff3ebeae6e7bc00000000000000000000000081d7d26fbc67b56bebf9c6b1937ff3ebeae6e7bc0000000000000000000000000000000000000000000000000031a6981644520900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3160,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae6686600f0019b56b4c890225ce7526690b83c1000000000000000000000000ae6686600f0019b56b4c890225ce7526690b83c10000000000000000000000000000000000000000000000000a333e9b15e9800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3164,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a80383f17a92b110921c07fb5261798f3a99377f000000000000000000000000a80383f17a92b110921c07fb5261798f3a99377f00000000000000000000000000000000000000000000000000ed877d6e13faae00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3166,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3effc5393cdbe8779c39c4c8d9a934e6f1f390f000000000000000000000000f3effc5393cdbe8779c39c4c8d9a934e6f1f390f0000000000000000000000000000000000000000000000000dd23cedcb7425e300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3171,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000286060cd2e24e0bd0814a83e3621c4ed6d5e2466000000000000000000000000286060cd2e24e0bd0814a83e3621c4ed6d5e2466000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3172,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006b3900179e0d9e20712ed41f8bb9ff8cb1e3fc880000000000000000000000006b3900179e0d9e20712ed41f8bb9ff8cb1e3fc8800000000000000000000000000000000000000000000000000a4f4e11115ae0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3173,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000489872f68bd0da1ca97383a97342f0e230c8f24f000000000000000000000000489872f68bd0da1ca97383a97342f0e230c8f24f000000000000000000000000000000000000000000000000015b4cb81b29910000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3177,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000c50c8c222c35830f74dcc13200570f1203d987d5000000000000000000000000c50c8c222c35830f74dcc13200570f1203d987d5000000000000000000000000000000000000000000000000000000000af33ed000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x2ac23bd99eb6500e0e5f639cc413adcefd0b70799d5cf007db34d44798ef808d,2022-02-27 08:23:16.000 UTC,0,true -3178,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c50c8c222c35830f74dcc13200570f1203d987d5000000000000000000000000c50c8c222c35830f74dcc13200570f1203d987d500000000000000000000000000000000000000000000000000788efe072b90b100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xb5bfb78296ff2811032f3222adb951b97d365cc6a3fe54ed9b5c443fc411dd66,2022-02-27 08:14:41.000 UTC,0,true -3179,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000004599080d9b74316af108884f506ba4a595ea50910000000000000000000000004599080d9b74316af108884f506ba4a595ea5091000000000000000000000000000000000000000000000000000000000ac3030500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xa22a7311378aa22c95826245ca7483b0fe0c8a6a9364f01787c6725bbaaf3f15,2022-02-27 08:14:41.000 UTC,0,true -3180,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bb9950d9400cc1542bad1803a1e5df7ac666e5d5000000000000000000000000bb9950d9400cc1542bad1803a1e5df7ac666e5d500000000000000000000000000000000000000000000000001153f1eabfb52de00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3182,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf4701ca4a43d0028c46b67c92ac436ec290e33e000000000000000000000000cf4701ca4a43d0028c46b67c92ac436ec290e33e00000000000000000000000000000000000000000000000000422f08813e73fa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3184,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a0fbb2f36271ff92ed8a16ca0343a0f320cfcd50000000000000000000000003a0fbb2f36271ff92ed8a16ca0343a0f320cfcd50000000000000000000000000000000000000000000000000014e58f1d3045c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3185,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005b3beffe27430d4ac916b8e9c7715611270d93a90000000000000000000000005b3beffe27430d4ac916b8e9c7715611270d93a900000000000000000000000000000000000000000000000000141a9b3a9f890000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3187,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b65ed9846d774942370620581645c430410f3ab9000000000000000000000000b65ed9846d774942370620581645c430410f3ab900000000000000000000000000000000000000000000000005a853b074c8566600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7c64bbfe4ec9e75c806d01a167416d910a4f8950097663f7c076de27b2d90b0c,2022-02-26 21:41:04.000 UTC,0,true -3190,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0a9de2479f5cd97669b0fbd4d1ee1ef70c99b22000000000000000000000000b0a9de2479f5cd97669b0fbd4d1ee1ef70c99b22000000000000000000000000000000000000000000000000009645dc4d8b334a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3192,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000dc18c785ee9f9d3b797f4b034af8d20bb2ca1e2500000000000000000000000000000000000000000000007d181e3d487f2dd352,,,1,true -3193,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be0f0f1077e5f5ed5e9b1dac16b6873163889381000000000000000000000000be0f0f1077e5f5ed5e9b1dac16b6873163889381000000000000000000000000000000000000000000000000015b6aa4d0fcb20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3195,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000068557e2154013a1c5564175271c1d107c241521000000000000000000000000068557e2154013a1c5564175271c1d107c2415210000000000000000000000000000000000000000000000000016e6fdcb72148000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3199,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000cb036c18b9c382d3ff9ab1319e2964a732961080000000000000000000000000cb036c18b9c382d3ff9ab1319e2964a7329610800000000000000000000000000000000000000000000000000a1aeb5ff8297dd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3203,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000321700a6493f8865d7f5a541c7007c1ff07d9370000000000000000000000000321700a6493f8865d7f5a541c7007c1ff07d937000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3204,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d12f7211071a20ce76bf9fb8e069036b6fb63c6a000000000000000000000000d12f7211071a20ce76bf9fb8e069036b6fb63c6a000000000000000000000000000000000000000000000000014c872a5b4dbe7b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3205,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c86a39e67d1d64071d443721083839bb16c5273f000000000000000000000000c86a39e67d1d64071d443721083839bb16c5273f0000000000000000000000000000000000000000000000000328d829df31030000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3208,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000faef04074a99713bb25f1fefd7cbff5d65235265000000000000000000000000faef04074a99713bb25f1fefd7cbff5d6523526500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3209,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000092c2aa78ae7248f788f14a42e6daba156d3c898100000000000000000000000092c2aa78ae7248f788f14a42e6daba156d3c898100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3210,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b45d0c759524ae9ce9d2091a1b2e663b1f5c6a6a000000000000000000000000b45d0c759524ae9ce9d2091a1b2e663b1f5c6a6a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3211,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ed374ece52ab111bdbaee9f1013429f474c883ba000000000000000000000000ed374ece52ab111bdbaee9f1013429f474c883ba00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3213,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002babe76345d7eb15f6a1c0cddba04d8ee44491d50000000000000000000000002babe76345d7eb15f6a1c0cddba04d8ee44491d500000000000000000000000000000000000000000000000000014add956eb90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3215,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004bbb7ea18ea570ae47d4489991645e4e49bbf3700000000000000000000000004bbb7ea18ea570ae47d4489991645e4e49bbf37000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3216,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c00a3fa2eef1afccf044af59ce105b8200272cd0000000000000000000000003c00a3fa2eef1afccf044af59ce105b8200272cd00000000000000000000000000000000000000000000000000074f0df332dd8300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3217,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001040a43093b700d9bfe90346990afaa4d11515080000000000000000000000001040a43093b700d9bfe90346990afaa4d115150800000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3218,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a8f4d5f35b3d819caa21ff649a1dce9674acd9d1000000000000000000000000a8f4d5f35b3d819caa21ff649a1dce9674acd9d1000000000000000000000000000000000000000000000000002f904483a7ecd300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3219,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006916ea1489b98a932f8da3b884864383b00c13090000000000000000000000006916ea1489b98a932f8da3b884864383b00c130900000000000000000000000000000000000000000000000000dad8dfa62a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3222,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e58dd42d7908d8924a599e5e28e15f4f58c40750000000000000000000000003e58dd42d7908d8924a599e5e28e15f4f58c407500000000000000000000000000000000000000000000000000b602529f40777c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3223,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ec787b619878d0b237bad72f8f7ecfd02716fa07000000000000000000000000ec787b619878d0b237bad72f8f7ecfd02716fa07000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3229,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006bb74a933655bd91c14f29c53cde15dcc747fc080000000000000000000000006bb74a933655bd91c14f29c53cde15dcc747fc08000000000000000000000000000000000000000000000000009ed4c2e0726c8600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7da0ebe1069e4070336264ce02eb9d753ce671a43ea53f3a9ab887c4c4f421d9,2022-09-07 08:34:53.000 UTC,0,true -3231,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000afef7e6c7cc8ee1ce7140fdacee481ed5f219113000000000000000000000000afef7e6c7cc8ee1ce7140fdacee481ed5f21911300000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3233,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000449833c57904f9d88cd3c26932060a329b93fe94000000000000000000000000449833c57904f9d88cd3c26932060a329b93fe940000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3234,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005516a8e92c56017699437689959098d7454669260000000000000000000000005516a8e92c56017699437689959098d74546692600000000000000000000000000000000000000000000000000ce8f2b09b9b90400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf06371c25e66dc83ef6b838bd73c68db17552f18c653fd39e65f5157cec3e02e,2022-06-01 11:26:36.000 UTC,0,true -3235,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000400d7004932cbbf9cecdf4adc879f41d6d21446d000000000000000000000000400d7004932cbbf9cecdf4adc879f41d6d21446d00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7c82eb2e8e7ec23e1a172c3195e2113ebfa0a10f5bc610bfdf66e5423bebcfd3,2022-03-13 18:41:26.000 UTC,0,true -3236,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000009d842ea243d72d025d3765e262d65a3d67e3eee50000000000000000000000009d842ea243d72d025d3765e262d65a3d67e3eee500000000000000000000000000000000000000000000000029a2241af62c000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3237,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a80ffb74fc19d8a6d30ecd2cd0fd9402840cbcc0000000000000000000000001a80ffb74fc19d8a6d30ecd2cd0fd9402840cbcc000000000000000000000000000000000000000000000000015abb4a7c76790000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x43d6fa1fd970ed5d5b5ad360e37d3e72a4c066e0667ebee20ed26b5c3d30a36f,2022-03-26 10:00:56.000 UTC,0,true -3238,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000efa5d5c4816b2fdca66a6cbfb01b7f1767e82176000000000000000000000000efa5d5c4816b2fdca66a6cbfb01b7f1767e8217600000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3240,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000495e9ac565e21f89589675d8a93133a54d7d831c000000000000000000000000495e9ac565e21f89589675d8a93133a54d7d831c00000000000000000000000000000000000000000000000002c68af0bb14000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3243,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000083d420a602b5cd560ac5fa9bbca0d5e91e4cb975000000000000000000000000000000000000000000000002f61d2ac547c71cfe,,,1,true -3244,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2a4fe75cca5fce383be6550a87a05bf3653789a000000000000000000000000d2a4fe75cca5fce383be6550a87a05bf3653789a000000000000000000000000000000000000000000000000013ba2bd2330a77300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3247,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d81c7a2ca633703c7f171c460413ee590ff33e40000000000000000000000002d81c7a2ca633703c7f171c460413ee590ff33e4000000000000000000000000000000000000000000000000014e242122773ce700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3250,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000187da357c4470445f2cb9476afc445875eefc6e5000000000000000000000000187da357c4470445f2cb9476afc445875eefc6e50000000000000000000000000000000000000000000000000096fd865af4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3251,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e5745f3136e1023b7db402f2f20d59ece802f4a0000000000000000000000002e5745f3136e1023b7db402f2f20d59ece802f4a000000000000000000000000000000000000000000000000000ee96c5d2f714800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3253,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e5745f3136e1023b7db402f2f20d59ece802f4a0000000000000000000000002e5745f3136e1023b7db402f2f20d59ece802f4a000000000000000000000000000000000000000000000000003d1dca1ae882de00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3254,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc18c785ee9f9d3b797f4b034af8d20bb2ca1e25000000000000000000000000dc18c785ee9f9d3b797f4b034af8d20bb2ca1e250000000000000000000000000000000000000000000000000ee48f826966c94100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3255,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000088a4b2e09b7c47f0c1434f277c56a5baba0f564400000000000000000000000088a4b2e09b7c47f0c1434f277c56a5baba0f56440000000000000000000000000000000000000000000000000098c445ad57800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3256,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a39ab9a6e560dbc803a9f5a4ce733e567d35de8b000000000000000000000000a39ab9a6e560dbc803a9f5a4ce733e567d35de8b00000000000000000000000000000000000000000000000000809b16e8257a8600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3259,0x72209fe68386b37a40d6bca04f78356fd342491f,0xe22d2bedb3eca35e6397e0c6d62857094aa26f52,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000adca2d0e82c65c3c9bde8441a665eb73b95dd5c91230bab3d96eeec005f12e889000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000f446700000000000000000000000000000000000000000000000000000000613bd7fe,,,1,true -3263,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f310e3613336773ba176fc7b9f90bdb43f7126c3000000000000000000000000f310e3613336773ba176fc7b9f90bdb43f7126c300000000000000000000000000000000000000000000000000510c5675d24b4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3267,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e2c7acc7679eb83585fe171f7f7f5974adf77183000000000000000000000000e2c7acc7679eb83585fe171f7f7f5974adf771830000000000000000000000000000000000000000000000000034b29848cb369f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3269,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca5bf99cdeb411d7f4db43a9bc41d5ed0ce9f979000000000000000000000000ca5bf99cdeb411d7f4db43a9bc41d5ed0ce9f9790000000000000000000000000000000000000000000000000009030fa91c68c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3271,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000767d7106ee69d311d0e483d0f1bbbf109b85429c000000000000000000000000767d7106ee69d311d0e483d0f1bbbf109b85429c000000000000000000000000000000000000000000000000029e24cae0ad987000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3272,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000211db282704d8b184450c123950c4f45ffa95383000000000000000000000000211db282704d8b184450c123950c4f45ffa95383000000000000000000000000000000000000000000000000001c9515dff3150000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3273,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000282f7783c091b115c96f0de119b0fe104b40813f000000000000000000000000282f7783c091b115c96f0de119b0fe104b40813f00000000000000000000000000000000000000000000000002a1e5ac7c671e8f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3274,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000091a4f00bac6190d6bcbd10ee83ccee83f094f8a500000000000000000000000091a4f00bac6190d6bcbd10ee83ccee83f094f8a500000000000000000000000000000000000000000000000000753d533d96800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3275,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000051b0c5368c7efb044efa2e3f39f851e7617db28600000000000000000000000051b0c5368c7efb044efa2e3f39f851e7617db28600000000000000000000000000000000000000000000000002aa19ea93d69c1300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3276,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000db41304d12e287c1bfd74d6965afb106583839b4000000000000000000000000db41304d12e287c1bfd74d6965afb106583839b400000000000000000000000000000000000000000000000002a1229f3baf469000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3278,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9d9eb50b69be30cde50e1875bb82fb90f1b2695000000000000000000000000f9d9eb50b69be30cde50e1875bb82fb90f1b269500000000000000000000000000000000000000000000000002a3f2a22d254e4200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3279,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000005a98f0a07458621598e591a1255316e6515813e40000000000000000000000005a98f0a07458621598e591a1255316e6515813e400000000000000000000000000000000000000000000000014667d362bd3000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3280,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000093adf2405d5a96e854b35401a3d38673ecdab70800000000000000000000000093adf2405d5a96e854b35401a3d38673ecdab708000000000000000000000000000000000000000000000000148a04289b94000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3281,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000004ca8aea046f531bee57a41556ebf948accf8db6b0000000000000000000000004ca8aea046f531bee57a41556ebf948accf8db6b00000000000000000000000000000000000000000000000014ad8b1b0b55000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3282,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000004c5cc3eab1f3b9c2c86859721fcb1e9e7920c48d0000000000000000000000004c5cc3eab1f3b9c2c86859721fcb1e9e7920c48d00000000000000000000000000000000000000000000000014d1120d7b16000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3284,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000000a4cc2af15be61924bf69a677fc86140534b83320000000000000000000000000a4cc2af15be61924bf69a677fc86140534b833200000000000000000000000000000000000000000000000014f498ffead7000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3285,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000dda1beb63aa1e4e3b0b0defeef32d843d99cf02e000000000000000000000000dda1beb63aa1e4e3b0b0defeef32d843d99cf02e00000000000000000000000000000000000000000000000015181ff25a98000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3286,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000082f6c30e1bd3c41e7d21c4c42fc71836c1e9738700000000000000000000000082f6c30e1bd3c41e7d21c4c42fc71836c1e9738700000000000000000000000000000000000000000000000002a2276d2960fcca00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3287,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000000314dcaacfceb25363ffb8c3888068de978d64060000000000000000000000000314dcaacfceb25363ffb8c3888068de978d6406000000000000000000000000000000000000000000000000153ba6e4ca59000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3288,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000001e63f2bb3abdc22fea164895c756c732d55086d10000000000000000000000001e63f2bb3abdc22fea164895c756c732d55086d1000000000000000000000000000000000000000000000000155f2dd73a1a000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3289,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000001494636d65ed41ffb4b614f395b17fc8fa57b3550000000000000000000000001494636d65ed41ffb4b614f395b17fc8fa57b3550000000000000000000000000000000000000000000000001582b4c9a9db000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3290,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000c14795b0683e2ba07d4b59d1dc21ac5142116079000000000000000000000000c14795b0683e2ba07d4b59d1dc21ac5142116079000000000000000000000000000000000000000000000000000000000017cdc000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3291,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000012d1c9ce4475201e93fa9a18952efb549dd8273100000000000000000000000012d1c9ce4475201e93fa9a18952efb549dd8273100000000000000000000000000000000000000000000000015c9c2ae895d000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3292,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000c00e2fcc125ad1258fe8a0c2d677d56129ad972d000000000000000000000000c00e2fcc125ad1258fe8a0c2d677d56129ad972d00000000000000000000000000000000000000000000000015ed49a0f91e000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3293,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000288da700ec522cf8db1c8b275077c87918d3f09e000000000000000000000000288da700ec522cf8db1c8b275077c87918d3f09e0000000000000000000000000000000000000000000000001610d09368df000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3294,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000000ce07fab029d302412d6af25958c7ffa624aa4c30000000000000000000000000ce07fab029d302412d6af25958c7ffa624aa4c300000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3295,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000dda831e92882db02f5c7a41f81cb1a6686143a09000000000000000000000000dda831e92882db02f5c7a41f81cb1a6686143a090000000000000000000000000000000000000000000000001657de784861000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3296,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000132e62f776a7d4ea7f699dc254cf0183f676bfb4000000000000000000000000132e62f776a7d4ea7f699dc254cf0183f676bfb4000000000000000000000000000000000000000000000000167b656ab822000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3297,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000417990fb7123caf0408ab8e6bf0ce940bcbc1984000000000000000000000000417990fb7123caf0408ab8e6bf0ce940bcbc1984000000000000000000000000000000000000000000000000169eec5d27e3000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3298,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000051ceb0212c459d33f2abd2ef42aa032148c63ff700000000000000000000000051ceb0212c459d33f2abd2ef42aa032148c63ff7000000000000000000000000000000000000000000000000009fdf42f6e4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3299,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdf600a6d8a8afba5f04a98332819aa3a5780c1a000000000000000000000000bdf600a6d8a8afba5f04a98332819aa3a5780c1a000000000000000000000000000000000000000000000000025dd7c56866a34600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3300,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000078375e9e5718166d1bc359a83a70b9f1616d729700000000000000000000000078375e9e5718166d1bc359a83a70b9f1616d729700000000000000000000000000000000000000000000000016c2734f97a4000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3301,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000b5e80f61156a718da4e38370e7b05ce996ebe682000000000000000000000000b5e80f61156a718da4e38370e7b05ce996ebe68200000000000000000000000000000000000000000000000016e5fa420765000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3302,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3c983daa3288f2b15bba878a97042dcbf61c698000000000000000000000000a3c983daa3288f2b15bba878a97042dcbf61c6980000000000000000000000000000000000000000000000000023b95a97533e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3303,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000002b9f0d9259597fabeeed9c3f24f80804a708f6ac0000000000000000000000002b9f0d9259597fabeeed9c3f24f80804a708f6ac000000000000000000000000000000000000000000000000170981347726000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3304,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000ea91b1d966822bed13d43ffe992e98560175a1c0000000000000000000000000ea91b1d966822bed13d43ffe992e98560175a1c0000000000000000000000000000000000000000000000000172d0826e6e7000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3305,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000b9662f040de73de8ef26ea04bfcdb6ffbb8087c1000000000000000000000000b9662f040de73de8ef26ea04bfcdb6ffbb8087c100000000000000000000000000000000000000000000000017508f1956a8000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3306,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000aa164df04a535f6d7db441e5657fb06157132142000000000000000000000000aa164df04a535f6d7db441e5657fb061571321420000000000000000000000000000000000000000000000001774160bc669000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3307,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000090ff89c637fd1537e151b8ced1d1d0cb94e31ca600000000000000000000000090ff89c637fd1537e151b8ced1d1d0cb94e31ca6000000000000000000000000000000000000000000000000000ced4c2338705800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3308,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000001141c2896cb6b5409181f76b172bea039e85e7030000000000000000000000001141c2896cb6b5409181f76b172bea039e85e70300000000000000000000000000000000000000000000000017979cfe362a000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3309,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000019d3b5a309ca1d80a65db63981b753c292122ab600000000000000000000000019d3b5a309ca1d80a65db63981b753c292122ab600000000000000000000000000000000000000000000000017bb23f0a5eb000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3310,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000002b1975dc5ccbcbd9eadb427c3c5e3e16d84585130000000000000000000000002b1975dc5ccbcbd9eadb427c3c5e3e16d845851300000000000000000000000000000000000000000000000017deaae315ac000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3312,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000896efe04e776e61958d955ccf7818813a8854d38000000000000000000000000896efe04e776e61958d955ccf7818813a8854d38000000000000000000000000000000000000000000000000180231d5856d000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3313,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000002dcdba685fdb924a4f871f3f898d14a7217db8350000000000000000000000002dcdba685fdb924a4f871f3f898d14a7217db8350000000000000000000000000000000000000000000000001825b8c7f52e000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3314,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf62408b238fd7713c897b976fdabab99acdc978000000000000000000000000bf62408b238fd7713c897b976fdabab99acdc9780000000000000000000000000000000000000000000000000194e6f86a19876b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3316,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000081901a580db0e4cc3f23d7e643486189747d5c7d00000000000000000000000081901a580db0e4cc3f23d7e643486189747d5c7d00000000000000000000000000000000000000000000000018493fba64ef000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3317,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000026eccf86bc1ebdb8da230611c722e8e39ba0738300000000000000000000000026eccf86bc1ebdb8da230611c722e8e39ba07383000000000000000000000000000000000000000000000000001d1be2de5ffb0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3318,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000009c8de489ced4a11e8307cfe405283b0e6c81c6110000000000000000000000009c8de489ced4a11e8307cfe405283b0e6c81c611000000000000000000000000000000000000000000000000186cc6acd4b0000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3320,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000639ebb299c6faa4d1d8e2e6ffed0e8942df2ade9000000000000000000000000639ebb299c6faa4d1d8e2e6ffed0e8942df2ade900000000000000000000000000000000000000000000000018904d9f4471000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3321,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000e13cbd05f314c4eeb5882cc6f4e827c6b4269ade000000000000000000000000e13cbd05f314c4eeb5882cc6f4e827c6b4269ade00000000000000000000000000000000000000000000000018b3d491b432000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3322,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004c17d923fd9f18f2399e9589ab80ab62f85b40700000000000000000000000004c17d923fd9f18f2399e9589ab80ab62f85b40700000000000000000000000000000000000000000000000001543e98f74f8b5900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3325,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e103a6e98867f56c35aba038e630700d8a305f1c000000000000000000000000e103a6e98867f56c35aba038e630700d8a305f1c000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3326,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b55348c5b5c44c3912b3e306096f0d69bf85c6e0000000000000000000000001b55348c5b5c44c3912b3e306096f0d69bf85c6e00000000000000000000000000000000000000000000000000a17c436687784400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3327,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9c877f2456fc3eb2e2d398dadc4d5a4b5531896000000000000000000000000f9c877f2456fc3eb2e2d398dadc4d5a4b553189600000000000000000000000000000000000000000000000000621ea9271a850000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3329,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eceab9cb452a1912437e43bc96a12a0279803c51000000000000000000000000eceab9cb452a1912437e43bc96a12a0279803c51000000000000000000000000000000000000000000000000005fec5b60ef800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3330,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000200241c7796b3b9dde312d330e847807d087ec4e000000000000000000000000200241c7796b3b9dde312d330e847807d087ec4e00000000000000000000000000000000000000000000000001328743305a80dc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3331,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9c877f2456fc3eb2e2d398dadc4d5a4b5531896000000000000000000000000f9c877f2456fc3eb2e2d398dadc4d5a4b5531896000000000000000000000000000000000000000000000000000073521eb9b70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3332,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005cb6eca18d1514300e3f7a49334bcdcc4d7c32730000000000000000000000005cb6eca18d1514300e3f7a49334bcdcc4d7c3273000000000000000000000000000000000000000000000000015e96cdecadba0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3334,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009626de291c92247b1688b829eee73111e1b836a20000000000000000000000009626de291c92247b1688b829eee73111e1b836a200000000000000000000000000000000000000000000000006f05b59d3b2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x8caf3b89edc7aa8ad08654522e6fcfde34252f1c627983783b615769dd5b3669,2021-12-21 10:37:44.000 UTC,0,true -3337,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff4debb853d522d7038197c398385e5dfdbcdd55000000000000000000000000ff4debb853d522d7038197c398385e5dfdbcdd5500000000000000000000000000000000000000000000000002c059c56a59c80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3338,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000090bd35fc5e4375fc1c600e606927bd545696136100000000000000000000000000000000000000000000000098b3c96fdd34784c,,,1,true -3340,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f16d8d189b9066ffe94ba9df555c8dcc852b2dcb000000000000000000000000f16d8d189b9066ffe94ba9df555c8dcc852b2dcb000000000000000000000000000000000000000000000000028a17be1b94f10200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3341,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000013269e29c6f58bd495fd3c12b94f85b2e22d88f600000000000000000000000013269e29c6f58bd495fd3c12b94f85b2e22d88f6000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3342,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009008d095c9abbeca43e837bc22066be3ba261c4f0000000000000000000000009008d095c9abbeca43e837bc22066be3ba261c4f00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3343,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004d477f1aabcfc2fc3fc9b802e861c013e0123ad90000000000000000000000004d477f1aabcfc2fc3fc9b802e861c013e0123ad900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3344,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e474e4be5c881f17189fa229b69cee52160384ab000000000000000000000000e474e4be5c881f17189fa229b69cee52160384ab00000000000000000000000000000000000000000000000000b9742ff41970ce00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3346,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bfc7c7d2a8313b72ce2fea977286a0809a8a6dc2000000000000000000000000bfc7c7d2a8313b72ce2fea977286a0809a8a6dc20000000000000000000000000000000000000000000000000152ae9fda35fd0a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3348,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003b0f2700b69a59dc6d1a9eb0c0cf86c5530a0d620000000000000000000000003b0f2700b69a59dc6d1a9eb0c0cf86c5530a0d62000000000000000000000000000000000000000000000000007c58508723800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3349,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a515be738624462672cc7a4c3e0a3076716d7bee000000000000000000000000a515be738624462672cc7a4c3e0a3076716d7bee00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3350,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008990ed15e254593ce605c7cc4c1b8c836fd615d00000000000000000000000008990ed15e254593ce605c7cc4c1b8c836fd615d000000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3351,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d503f029266c7603094dcdca75e8529702a6d700000000000000000000000002d503f029266c7603094dcdca75e8529702a6d70000000000000000000000000000000000000000000000000000d013b1909a80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3352,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000033cf288a08fac26094289e48b32f9d790642701e00000000000000000000000033cf288a08fac26094289e48b32f9d790642701e000000000000000000000000000000000000000000000000015e833a3eb3280000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3353,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e3e80d88fd4e3417831b8686db83fc36dbe5fee0000000000000000000000006e3e80d88fd4e3417831b8686db83fc36dbe5fee000000000000000000000000000000000000000000000000015e76ec0bdb240000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3354,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d63d28282eeeace4d4d2c67ebb798f3a2ca782b1000000000000000000000000d63d28282eeeace4d4d2c67ebb798f3a2ca782b1000000000000000000000000000000000000000000000000015e76ec0bdb240000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3355,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000081077dea57decabfbbeb8648adca22d42d106c8c00000000000000000000000081077dea57decabfbbeb8648adca22d42d106c8c0000000000000000000000000000000000000000000000000081519b6dd3000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3357,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ddcc4cf0463838e508014d5f131f38c29171835e000000000000000000000000ddcc4cf0463838e508014d5f131f38c29171835e0000000000000000000000000000000000000000000000000090ffe62823132a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3362,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f76562172ad54453a3e3fab93560cb3aee9750d4000000000000000000000000f76562172ad54453a3e3fab93560cb3aee9750d4000000000000000000000000000000000000000000000000001e32b47897400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3364,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000059c57d18c14ab828dcfe1fbc212319ed3980448000000000000000000000000059c57d18c14ab828dcfe1fbc212319ed3980448000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3365,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000058fce926a96977e4090a021935ec8832e9d1453000000000000000000000000058fce926a96977e4090a021935ec8832e9d1453000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3366,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000087a40539b3f0ad7dec878f332ce1ba01f90f815c00000000000000000000000087a40539b3f0ad7dec878f332ce1ba01f90f815c000000000000000000000000000000000000000000000000005fe752f07faa2900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3367,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cda2aaaf034bc06efa3c7f0af5ae2a05e4d5cd82000000000000000000000000cda2aaaf034bc06efa3c7f0af5ae2a05e4d5cd8200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3369,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000530bdc7b11bd02875fdc9d7a4441478c8ca5ccfd000000000000000000000000530bdc7b11bd02875fdc9d7a4441478c8ca5ccfd00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3370,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b2ddb1f4c1404b9e35ba5c3012119bc0aa4d687e000000000000000000000000b2ddb1f4c1404b9e35ba5c3012119bc0aa4d687e000000000000000000000000000000000000000000000000007ed4f5fa7b400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3371,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000f1c7f93771ccbaf028482e843040559b42998430000000000000000000000000f1c7f93771ccbaf028482e843040559b429984300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3372,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f8025c35f4ef7e015fbd4becb2d3b9fe7f6683a0000000000000000000000007f8025c35f4ef7e015fbd4becb2d3b9fe7f6683a000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3374,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009c3c47833c7a277df1e0e5f17deceea1534a75470000000000000000000000009c3c47833c7a277df1e0e5f17deceea1534a75470000000000000000000000000000000000000000000000000036372a332aa84700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3375,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008a259ac7276b58b49b9f2dcc8addd19cc31659430000000000000000000000008a259ac7276b58b49b9f2dcc8addd19cc3165943000000000000000000000000000000000000000000000000001d5969dc980f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3376,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000087a670ea67703d1268d93634eac67cb8549627a600000000000000000000000087a670ea67703d1268d93634eac67cb8549627a6000000000000000000000000000000000000000000000000005987443857000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3378,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043b68fdacc9069a33554ec2964bd21ce5a282d6500000000000000000000000043b68fdacc9069a33554ec2964bd21ce5a282d65000000000000000000000000000000000000000000000000003914c4e7ac523d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3379,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004998b45f0ceebe955ddce8afdab92338945695590000000000000000000000004998b45f0ceebe955ddce8afdab9233894569559000000000000000000000000000000000000000000000000007980b80351800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3381,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004d477f1aabcfc2fc3fc9b802e861c013e0123ad90000000000000000000000004d477f1aabcfc2fc3fc9b802e861c013e0123ad900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3384,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ed4df7a1795021bc6c6b4767d36dd755f7b5de10000000000000000000000002ed4df7a1795021bc6c6b4767d36dd755f7b5de1000000000000000000000000000000000000000000000000024829b72b2b9acf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3385,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ffed310be751fc94780f12884a641a507122cf0e000000000000000000000000ffed310be751fc94780f12884a641a507122cf0e000000000000000000000000000000000000000000000000007d0e36a818000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3388,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9dc2911ba911112b4d587a4fc6e9725c565dd45000000000000000000000000f9dc2911ba911112b4d587a4fc6e9725c565dd4500000000000000000000000000000000000000000000000006d82474d9cee7af00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3390,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e3b7571a9cc44eb7a1057ee4a61cc564dd5783e0000000000000000000000002e3b7571a9cc44eb7a1057ee4a61cc564dd5783e0000000000000000000000000000000000000000000000000032fa3ec820da4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3392,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000027e8769cdc626d0ff052ea52c783176a87fe52ce00000000000000000000000027e8769cdc626d0ff052ea52c783176a87fe52ce00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3393,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000def2262aa7c28dea9aeaf43603ac2b6913e19dee000000000000000000000000def2262aa7c28dea9aeaf43603ac2b6913e19dee000000000000000000000000000000000000000000000000007f2fe90af5800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3395,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000006d7881358cf903f2c2db94a32d5c6ae9bc611f600000000000000000000000006d7881358cf903f2c2db94a32d5c6ae9bc611f60000000000000000000000000000000000000000000000000000000014cd475200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3396,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001bfd59fbc137d6d98416679d0d59ed9f0c2438d60000000000000000000000001bfd59fbc137d6d98416679d0d59ed9f0c2438d6000000000000000000000000000000000000000000000000007ef9573445c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3397,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9a1ded45d94ffde63cde4a504bf2d9ca38f53db000000000000000000000000f9a1ded45d94ffde63cde4a504bf2d9ca38f53db000000000000000000000000000000000000000000000000004b12b4a459bd4a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3398,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b5918d2d19162d2b047f02c89fb27a95e018a409000000000000000000000000b5918d2d19162d2b047f02c89fb27a95e018a409000000000000000000000000000000000000000000000000005a066eacb6303d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3399,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000060948b99d47b5d6ae1201252ccf5208990bb55a500000000000000000000000060948b99d47b5d6ae1201252ccf5208990bb55a5000000000000000000000000000000000000000000000000007ef9573445c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3400,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000620f871707fe81697aa579dce88b49e9c28521aa000000000000000000000000620f871707fe81697aa579dce88b49e9c28521aa000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3403,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004365ffda68e2c62bbbf268f14513f94cdca633090000000000000000000000004365ffda68e2c62bbbf268f14513f94cdca63309000000000000000000000000000000000000000000000000002b76b6c924274f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3404,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1a021b880c6014292adcc9e034d9590ec85cfaf000000000000000000000000f1a021b880c6014292adcc9e034d9590ec85cfaf0000000000000000000000000000000000000000000000001873eda7cb4225a600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3406,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a94c1f22649181e825a70e7254e7c5357e908fd6000000000000000000000000a94c1f22649181e825a70e7254e7c5357e908fd600000000000000000000000000000000000000000000000000a93c12ec15560000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3407,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007442278f3223f890a450db47fb2f36788457bbb10000000000000000000000007442278f3223f890a450db47fb2f36788457bbb10000000000000000000000000000000000000000000000000dd8951e767c9b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3409,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076911b907a11d18d52a4209265753f4244b9bf3900000000000000000000000076911b907a11d18d52a4209265753f4244b9bf3900000000000000000000000000000000000000000000000000071fc4efab330000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3410,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000607b03b3b4b8074142c7aec415e99ebe73a2f21f000000000000000000000000607b03b3b4b8074142c7aec415e99ebe73a2f21f000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3413,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f847e9d51989033b691b8be943f8e9e268f99b9e000000000000000000000000f847e9d51989033b691b8be943f8e9e268f99b9e000000000000000000000000000000000000000000000000003ea82c7f8cbb2000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3415,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc72bd8115311209270c453d52a031773372c52f000000000000000000000000dc72bd8115311209270c453d52a031773372c52f000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3416,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000063bf83c11c50627f44119336a3c2f616b7c6522800000000000000000000000063bf83c11c50627f44119336a3c2f616b7c65228000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3419,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000dd2e2c676485fa398cdad7a4e9863edffd32fb70000000000000000000000000dd2e2c676485fa398cdad7a4e9863edffd32fb700000000000000000000000000000000000000000000000000003691d6afc00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3420,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002497dffc5ed6e49678302c48a29cd930928dc1c80000000000000000000000002497dffc5ed6e49678302c48a29cd930928dc1c8000000000000000000000000000000000000000000000000003838d15b9af90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xce17efe8c27c247493c483522c477c7df6c45ddccd8d1b2efe9bd5c069dad904,2022-04-16 14:03:45.000 UTC,0,true -3422,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fefb25be42c402dc5d3e317fd1ba5294e050f5c8000000000000000000000000fefb25be42c402dc5d3e317fd1ba5294e050f5c8000000000000000000000000000000000000000000000000015e4c2d76da800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3424,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c01dde207a84c71149cde8b3657c5535c208aa20000000000000000000000000c01dde207a84c71149cde8b3657c5535c208aa200000000000000000000000000000000000000000000000000007313970c7970000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3428,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000000f18fc88312cd9b0049668638b84f7d7a48bab650000000000000000000000000f18fc88312cd9b0049668638b84f7d7a48bab65000000000000000000000000000000000000000000000000f922c1c7dc3bfa7800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3429,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000363775b4e9dc4ec8e32be7f6a6b64f0f897d36c0000000000000000000000000363775b4e9dc4ec8e32be7f6a6b64f0f897d36c000000000000000000000000000000000000000000000000009b69608ebbbe7300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3430,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3e6d6600ce982be43976ec5b8d4cd1a88d5baf4000000000000000000000000a3e6d6600ce982be43976ec5b8d4cd1a88d5baf400000000000000000000000000000000000000000000000000852cb840adf7e600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3433,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000090f11bcf68f44a7edc142186fced2314da35655d00000000000000000000000090f11bcf68f44a7edc142186fced2314da35655d000000000000000000000000000000000000000000000000004ddac5402fafc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3437,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000066508ac073baab27706b5f02260e990388a004c800000000000000000000000066508ac073baab27706b5f02260e990388a004c800000000000000000000000000000000000000000000000002b26a53373e1d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3438,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000f89fc7c27f885185afa09a38b29daa1bdaf32d4a000000000000000000000000f89fc7c27f885185afa09a38b29daa1bdaf32d4a00000000000000000000000000000000000000000000000014d1120d7b16000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3439,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004a42a0eb458b1babdbbb685f7e3e1bb4599fdbf00000000000000000000000004a42a0eb458b1babdbbb685f7e3e1bb4599fdbf000000000000000000000000000000000000000000000000003dbaa514941bcc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3441,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc88b41b71890b64ec34e7af035c1b3b77df467d000000000000000000000000dc88b41b71890b64ec34e7af035c1b3b77df467d000000000000000000000000000000000000000000000000000213d8e824a28000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3442,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b0a5aaa86cf5278746e48e09a732b0fc4d3f8590000000000000000000000001b0a5aaa86cf5278746e48e09a732b0fc4d3f859000000000000000000000000000000000000000000000000001daa01bf2cbcd900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3445,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000031561811d3dd53cfe7850c27dabf9fffe747dca200000000000000000000000031561811d3dd53cfe7850c27dabf9fffe747dca2000000000000000000000000000000000000000000000000002f8e800fc755bc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3447,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007eeb48736ca53b10220e8676b832efd4ecd4a90c0000000000000000000000007eeb48736ca53b10220e8676b832efd4ecd4a90c00000000000000000000000000000000000000000000000000341981cfa442a900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3448,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000767065ebdd77a964d0cc8eae6998a1821866672c000000000000000000000000767065ebdd77a964d0cc8eae6998a1821866672c000000000000000000000000000000000000000000000000001687e5912bed4e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3449,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000893837ee290413f5349f3ce47a665f531df56c72000000000000000000000000893837ee290413f5349f3ce47a665f531df56c7200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3450,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d53b1c352f96986eb065bdb2ef7eaf045c16b756000000000000000000000000d53b1c352f96986eb065bdb2ef7eaf045c16b75600000000000000000000000000000000000000000000000000105df0766168c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3451,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dccbfaa8ab8d37757e403b869f43eebfeb96391f000000000000000000000000dccbfaa8ab8d37757e403b869f43eebfeb96391f00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3458,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000059b02e6738d03f1f501ed74dfb2d9b43fdd9ee4d00000000000000000000000059b02e6738d03f1f501ed74dfb2d9b43fdd9ee4d0000000000000000000000000000000000000000000000000429d069189e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3465,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f997558ae6ab4e5b7df35b6686becf512a50202c000000000000000000000000f997558ae6ab4e5b7df35b6686becf512a50202c00000000000000000000000000000000000000000000000007c585087238000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3466,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a23eeff7353c5e6995a6d76957f28e00e3620e20000000000000000000000001a23eeff7353c5e6995a6d76957f28e00e3620e20000000000000000000000000000000000000000000000000015d002442d2f0500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3471,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e90737dd2a9ef97ccfbfbdf91756a353d3533a11000000000000000000000000e90737dd2a9ef97ccfbfbdf91756a353d3533a1100000000000000000000000000000000000000000000000000d0720b9aa0063600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3473,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000597ddaf79527d46a3d838ed4b06bb37ebba8fc87000000000000000000000000597ddaf79527d46a3d838ed4b06bb37ebba8fc870000000000000000000000000000000000000000000000000853a0d2313c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3476,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000533a85eeeabb3e9d7e3ae8d2cc020ab35f19af7f000000000000000000000000533a85eeeabb3e9d7e3ae8d2cc020ab35f19af7f0000000000000000000000000000000000000000000000000037af6899dd9b7300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3478,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e34e61d1ec3de092eac80983fc6480a57dba1cd7000000000000000000000000e34e61d1ec3de092eac80983fc6480a57dba1cd7000000000000000000000000000000000000000000000000013781f240d5721900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xaf2b1bd7538835236b46a645287918976d6834b677dd1c06125a2184964b215f,2022-03-05 02:28:24.000 UTC,0,true -3480,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000004cb780fd3286f2d10199b61423d1c804bd2a5d2b0000000000000000000000004cb780fd3286f2d10199b61423d1c804bd2a5d2b00000000000000000000000000000000000000000000001192e7cf4f7885055a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3483,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008166e2bbe05d961287a1097193f9cccf61dd42e40000000000000000000000008166e2bbe05d961287a1097193f9cccf61dd42e4000000000000000000000000000000000000000000000000002e269a6f3ecc1300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3484,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a252234c2359ad3c1908dd564ae8da74b4910250000000000000000000000005a252234c2359ad3c1908dd564ae8da74b4910250000000000000000000000000000000000000000000000000060c372c91c830000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3485,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bb16dacfbb40bc630298bcd8f3e0bc3d7e1a3631000000000000000000000000bb16dacfbb40bc630298bcd8f3e0bc3d7e1a3631000000000000000000000000000000000000000000000000008ac534ce73625600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3488,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3708b99c1c3cbb4a27e5b8caace1f5a1d9362ac000000000000000000000000a3708b99c1c3cbb4a27e5b8caace1f5a1d9362ac00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3490,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c88533351059765f165a3b51f1a5d2b8dfec3c08000000000000000000000000c88533351059765f165a3b51f1a5d2b8dfec3c08000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3491,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000092c06cc32b45ae9a335be36305e619191ed666fe00000000000000000000000092c06cc32b45ae9a335be36305e619191ed666fe000000000000000000000000000000000000000000000000013e55d22080dcbf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3492,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004bff9b3ede66c6daf42d6deae4c784c520ce5ac10000000000000000000000004bff9b3ede66c6daf42d6deae4c784c520ce5ac10000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3493,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b7ca8db84717c98dcf59be2b3a612e75ef5d54b0000000000000000000000000b7ca8db84717c98dcf59be2b3a612e75ef5d54b00000000000000000000000000000000000000000000000000008f0f3d1d6fff400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3494,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000300c8115f3bbcba6b11ea660bb6b8ad9b50e5095000000000000000000000000300c8115f3bbcba6b11ea660bb6b8ad9b50e5095000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3496,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c2b0ada1b72646964b3303c3612f3bfc85139dc8000000000000000000000000c2b0ada1b72646964b3303c3612f3bfc85139dc8000000000000000000000000000000000000000000000000001d0b1b24adc70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3497,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c29fedb24a18af65ac769a1c3432882b73e5a3a2000000000000000000000000c29fedb24a18af65ac769a1c3432882b73e5a3a200000000000000000000000000000000000000000000000000000002540be40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3498,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000022b7d824428d53100c8f841c383d77aa7489a5f400000000000000000000000022b7d824428d53100c8f841c383d77aa7489a5f400000000000000000000000000000000000000000000000001509018d26db98900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3499,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e69619a71cdd7696b34c52a5c1709c8a811faab8000000000000000000000000e69619a71cdd7696b34c52a5c1709c8a811faab8000000000000000000000000000000000000000000000000012e017786c1794200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3501,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f6e754e84fc4bb7c4ecf296964ad29e5130d8c60000000000000000000000006f6e754e84fc4bb7c4ecf296964ad29e5130d8c6000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3502,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8983d041f4e752032f2964b8e095c1f1c61956b000000000000000000000000b8983d041f4e752032f2964b8e095c1f1c61956b000000000000000000000000000000000000000000000000003890d2358b1a4f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3503,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bb8b8a7894a85dce08a79789cd794abfa0109614000000000000000000000000bb8b8a7894a85dce08a79789cd794abfa010961400000000000000000000000000000000000000000000000000ac86ff86e2680000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3504,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dfc387d937488a300bb73ed805b1e46cdfcf28ae000000000000000000000000dfc387d937488a300bb73ed805b1e46cdfcf28ae00000000000000000000000000000000000000000000000000acb9e5e4d44a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3507,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000059d369c01da6e051409489ed9878bb21037095a900000000000000000000000059d369c01da6e051409489ed9878bb21037095a90000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3510,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005f40324ed97badd9079e67e162c83b1fb9168a120000000000000000000000005f40324ed97badd9079e67e162c83b1fb9168a1200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3511,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cca8329feb40eae13b6bbe26ca2dfc8406b64236000000000000000000000000cca8329feb40eae13b6bbe26ca2dfc8406b64236000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3512,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000842fcd1d99c0c3469022a51685dada5afa91a4e2000000000000000000000000842fcd1d99c0c3469022a51685dada5afa91a4e2000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3514,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da0285ff49800536a53cbef7a7188da10a656efe000000000000000000000000da0285ff49800536a53cbef7a7188da10a656efe000000000000000000000000000000000000000000000000015bd2ae504d8e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3516,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000445c9da83c4211fa8829672785599dd8180ade7c000000000000000000000000445c9da83c4211fa8829672785599dd8180ade7c000000000000000000000000000000000000000000000000009e1d9bbdca638300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3518,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000050f7c1a1db6ac509d4a9e684617a191f3b400c0400000000000000000000000050f7c1a1db6ac509d4a9e684617a191f3b400c040000000000000000000000000000000000000000000000000038f83f9bcedbff00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3519,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000079748bfc42a567c58682add44a072f8900a8499800000000000000000000000079748bfc42a567c58682add44a072f8900a84998000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3520,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea7914b48d8ebd203a7721ccaf083b1c3e78586c000000000000000000000000ea7914b48d8ebd203a7721ccaf083b1c3e78586c000000000000000000000000000000000000000000000000000ec458d7e1930000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3522,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000046ad16c95afd5946b6810d03d7dff72b75f58f7500000000000000000000000046ad16c95afd5946b6810d03d7dff72b75f58f75000000000000000000000000000000000000000000000000005262f360ddd70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3528,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005bca75d1512939dd30f91416c02f1454175a0fb00000000000000000000000005bca75d1512939dd30f91416c02f1454175a0fb0000000000000000000000000000000000000000000000000009c1a4e702a255600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3529,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005c675e0363add2cd4e61abde87a952d5c07492f40000000000000000000000005c675e0363add2cd4e61abde87a952d5c07492f400000000000000000000000000000000000000000000000000017f9dc2d4590000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3531,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000393a4fc32b1311c4fa5774d61fa99230670c604b000000000000000000000000393a4fc32b1311c4fa5774d61fa99230670c604b0000000000000000000000000000000000000000000000000076d637f281de0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3533,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a11749a0b6b2cc397dc2fcb11b1c6c1478cd4290000000000000000000000003a11749a0b6b2cc397dc2fcb11b1c6c1478cd429000000000000000000000000000000000000000000000000009fc8448c3cc06800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3534,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c162389a94467e4827401afed99b4401c46ade90000000000000000000000000c162389a94467e4827401afed99b4401c46ade900000000000000000000000000000000000000000000000000a02ba903725edb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3535,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000012afc0c2c09166892cfc167d35e5907c0b2ccb2d00000000000000000000000012afc0c2c09166892cfc167d35e5907c0b2ccb2d00000000000000000000000000000000000000000000000000e66e97a099c54000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3537,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a707a440e0a34f11c3c259a20622440cbed19700000000000000000000000005a707a440e0a34f11c3c259a20622440cbed1970000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2555ce66cd0bf76150036d44c313632137622b33f595155bbf80cd4a2b7e88be,2021-12-24 23:28:46.000 UTC,0,true -3538,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004579685d695f917e74165177294cfc6924ef8ca10000000000000000000000004579685d695f917e74165177294cfc6924ef8ca1000000000000000000000000000000000000000000000000009df226d114f8ef00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3540,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bcc9ff4a52a0e972b20f3dd63e88396685a57636000000000000000000000000bcc9ff4a52a0e972b20f3dd63e88396685a57636000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3541,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000092cae64f9937bc218c8e1737625717f379f9720000000000000000000000000092cae64f9937bc218c8e1737625717f379f9720000000000000000000000000000000000000000000000000000ae787df528efc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3543,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a45481a6446a33e283c992ae11feaf9237ff421b000000000000000000000000a45481a6446a33e283c992ae11feaf9237ff421b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3544,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bcc9ff4a52a0e972b20f3dd63e88396685a57636000000000000000000000000bcc9ff4a52a0e972b20f3dd63e88396685a576360000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3545,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000531c64cc8796d85e79f96a4507652f67a75bbc020000000000000000000000000000000000000000000000002891e41d1d38844c,,,1,true -3547,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000863e308c6153eee5fcafcc2728b330e9f86c51b9000000000000000000000000863e308c6153eee5fcafcc2728b330e9f86c51b900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3548,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000036fcd9f92d79b45bdcef267e834e276f45f0d27d00000000000000000000000036fcd9f92d79b45bdcef267e834e276f45f0d27d00000000000000000000000000000000000000000000000000fffdf87d4d541e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3549,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017187a7d2a7106f7c9d3fe8db1461ece5a70351d00000000000000000000000017187a7d2a7106f7c9d3fe8db1461ece5a70351d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3550,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000264313b93e8073db685a3d24a4d6c7778fd5e964000000000000000000000000264313b93e8073db685a3d24a4d6c7778fd5e96400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3551,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000358abb5b95f814c833746a2d0e98bbc227cb6e3c000000000000000000000000358abb5b95f814c833746a2d0e98bbc227cb6e3c000000000000000000000000000000000000000000000000000cca2e5131000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3552,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bcc9ff4a52a0e972b20f3dd63e88396685a57636000000000000000000000000bcc9ff4a52a0e972b20f3dd63e88396685a576360000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3554,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df5ebfaece255f16e8ddb8d51f0d4c7a422a9686000000000000000000000000df5ebfaece255f16e8ddb8d51f0d4c7a422a968600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3555,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000095a98188d689715f7a194448fc8c2068adbfe6ee00000000000000000000000095a98188d689715f7a194448fc8c2068adbfe6ee00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3556,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004f205715aa91275dabc59cf5be7c79eb2a2bd5e00000000000000000000000004f205715aa91275dabc59cf5be7c79eb2a2bd5e00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3558,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037e49f50da9eec60c16c7632d71de572687da1fb00000000000000000000000037e49f50da9eec60c16c7632d71de572687da1fb00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3559,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000555860b9cc8a1d1e9e48538c8c6d8b85300a77c5000000000000000000000000555860b9cc8a1d1e9e48538c8c6d8b85300a77c50000000000000000000000000000000000000000000000000000000001f74d0e00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3560,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000abef0e8cd40ff9ee1023d71357aec1f1ad3acf47000000000000000000000000abef0e8cd40ff9ee1023d71357aec1f1ad3acf4700000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3561,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000748f61c456fb1317572cfb550dfd0089f2834030000000000000000000000000748f61c456fb1317572cfb550dfd0089f283403000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3562,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006b954a49833515c62fcfcddbb0a1f69f9d9923d50000000000000000000000006b954a49833515c62fcfcddbb0a1f69f9d9923d500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3563,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c70cd990e0e595fd3df8c8c05aa52cd1cc9d76f6000000000000000000000000c70cd990e0e595fd3df8c8c05aa52cd1cc9d76f600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3565,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006c07a4c89d5b82fc5263bac78385fac2ee403aef0000000000000000000000006c07a4c89d5b82fc5263bac78385fac2ee403aef00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3566,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b2a929a25ad4c77e071376968d4ceb94fee26312000000000000000000000000b2a929a25ad4c77e071376968d4ceb94fee2631200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3568,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001c441f84108848fc7f8b8fcb7b27784acc5bece50000000000000000000000001c441f84108848fc7f8b8fcb7b27784acc5bece500000000000000000000000000000000000000000000000001562e03c79f4d1800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3569,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a7e757bb7e887b99f14de1f88bfbb42d7df1c65c000000000000000000000000a7e757bb7e887b99f14de1f88bfbb42d7df1c65c00000000000000000000000000000000000000000000000000034ebd179c246500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3570,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076b5eac3af4a09949b99b2fc573e345ec640faa200000000000000000000000076b5eac3af4a09949b99b2fc573e345ec640faa2000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3572,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b484c02002f3360cfa3439e260055c41c6df654e000000000000000000000000b484c02002f3360cfa3439e260055c41c6df654e00000000000000000000000000000000000000000000000000a2c1360ac459e500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3575,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000435c52bb29e3a8380ba9045db70910205a4e6eab0000000000000000000000000000000000000000000000000de0b6b3a7640000,,,1,true -3576,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd662e3684770880686264a4bb6632b53244cd9a000000000000000000000000bd662e3684770880686264a4bb6632b53244cd9a000000000000000000000000000000000000000000000000007f4ee741a258e000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3581,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd662e3684770880686264a4bb6632b53244cd9a000000000000000000000000bd662e3684770880686264a4bb6632b53244cd9a000000000000000000000000000000000000000000000000003c79b7d3add40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3582,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf70f1d525a3802df885dd4b35176730608729b4000000000000000000000000cf70f1d525a3802df885dd4b35176730608729b4000000000000000000000000000000000000000000000000015e917d9c8aa10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3583,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000281f9fd6d8dfa9a73539c98030d5071c04ab62c1000000000000000000000000281f9fd6d8dfa9a73539c98030d5071c04ab62c100000000000000000000000000000000000000000000000000aca9714815800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3586,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000add76744e587bd74ab9c23813f883daa4a92a945000000000000000000000000add76744e587bd74ab9c23813f883daa4a92a94500000000000000000000000000000000000000000000000000a34aab7463239e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3588,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000014c963f01f369c96ffbadbd5209f016759f9209300000000000000000000000014c963f01f369c96ffbadbd5209f016759f92093000000000000000000000000000000000000000000000000015c62b0a167aa4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3589,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef665af21a52fe3c9f0c4afe0ebe825975d687cb000000000000000000000000ef665af21a52fe3c9f0c4afe0ebe825975d687cb000000000000000000000000000000000000000000000000014462ff5dac2d8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3592,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae2f175948821430330b2aaed19cea2b60570740000000000000000000000000ae2f175948821430330b2aaed19cea2b60570740000000000000000000000000000000000000000000000000005a322c4cb67adf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3597,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d23e5a77ac2adbddaa1569389581732f2ea09e61000000000000000000000000d23e5a77ac2adbddaa1569389581732f2ea09e6100000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xb938cfa703d14262efc7b88b91aca6974b9650d19e9277a1fb6615d35d4d498c,2022-07-10 08:15:37.000 UTC,0,true -3600,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8faa54d01fb06ac8c55d7ac95f5e1cfe7f2a467000000000000000000000000b8faa54d01fb06ac8c55d7ac95f5e1cfe7f2a46700000000000000000000000000000000000000000000000000a6a2d1836f305f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3601,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000acdceb490c614fa827c4f20710ee38e6b27d0eb2000000000000000000000000acdceb490c614fa827c4f20710ee38e6b27d0eb200000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3602,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000656e4f4777f0ada62dfc8d2e6e4b860cc2dea7db000000000000000000000000656e4f4777f0ada62dfc8d2e6e4b860cc2dea7db0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3606,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000edac8917d97c61f4160ab0483637823d70083017000000000000000000000000edac8917d97c61f4160ab0483637823d70083017000000000000000000000000000000000000000000000000009e68cd212edbed00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3609,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bbca1093f731fb2e4a3625deb1967e6fc9127ffe000000000000000000000000bbca1093f731fb2e4a3625deb1967e6fc9127ffe000000000000000000000000000000000000000000000000004311a84fe1f40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3613,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000069a25973f320c8bd0caa634c76f4464a3d2c5d7d00000000000000000000000069a25973f320c8bd0caa634c76f4464a3d2c5d7d00000000000000000000000000000000000000000000000000a407ab19d10adc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3616,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003114a7881e41d38f4ca1de432bbe279b2d532db20000000000000000000000003114a7881e41d38f4ca1de432bbe279b2d532db2000000000000000000000000000000000000000000000000004df870439c0d6500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3619,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f02feaa50363d3f42fb122e5d7676fff2b24e2af000000000000000000000000f02feaa50363d3f42fb122e5d7676fff2b24e2af0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3623,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000762cfde23d0882729f43eabfe28a50c43a18d2f4000000000000000000000000762cfde23d0882729f43eabfe28a50c43a18d2f40000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3624,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000188aaf665b2e0a2f7b6b4dbc1d5004657d104132000000000000000000000000188aaf665b2e0a2f7b6b4dbc1d5004657d104132000000000000000000000000000000000000000000000000000482af5157b7ce00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3625,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f0a6ab30167c35e9e8c4a3f8df7ce7e38c76831c000000000000000000000000f0a6ab30167c35e9e8c4a3f8df7ce7e38c76831c000000000000000000000000000000000000000000000000002e8312683c84e100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3627,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000086ae1358fc00fcbc32d48ae831bf90558550181000000000000000000000000086ae1358fc00fcbc32d48ae831bf905585501810000000000000000000000000000000000000000000000000003d6037c20ce5900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3628,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e6b0fa6750e6e65867431e53e180dd87e365f46e000000000000000000000000e6b0fa6750e6e65867431e53e180dd87e365f46e000000000000000000000000000000000000000000000000010096d7f1fa7e5d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3630,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055d7af293204dda491de0509b44e5d47ae4a3b3300000000000000000000000055d7af293204dda491de0509b44e5d47ae4a3b3300000000000000000000000000000000000000000000000000071924a16ad40f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3631,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000711fb130ce68576bf819683598efe46bf5e149fb000000000000000000000000711fb130ce68576bf819683598efe46bf5e149fb0000000000000000000000000000000000000000000000000425d26b34dcb49200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3632,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d182f2ff6aa0293a7be976de0018909c9ab1568b000000000000000000000000d182f2ff6aa0293a7be976de0018909c9ab1568b00000000000000000000000000000000000000000000000000004ec14d6625ae00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3633,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002add3cb18e5a40cf0472eb9aef8248dc99b2ade80000000000000000000000002add3cb18e5a40cf0472eb9aef8248dc99b2ade800000000000000000000000000000000000000000000000000015361c836211a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3634,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a7dac61d49a6ca90b5ef1b6c84f40c1cc8d8c469000000000000000000000000a7dac61d49a6ca90b5ef1b6c84f40c1cc8d8c4690000000000000000000000000000000000000000000000000e92596fd629000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3635,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1bd1d7f4794ded7133ebc607aa9f98182397359000000000000000000000000f1bd1d7f4794ded7133ebc607aa9f98182397359000000000000000000000000000000000000000000000000039bb49f599a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3637,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000770e071e6a2fd30c5ac8ee3c5355760b30744435000000000000000000000000770e071e6a2fd30c5ac8ee3c5355760b30744435000000000000000000000000000000000000000000000000008a2f387187cb9a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3638,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002bbb1ac9a6f2cd51a066dded1d0554db7fd51b2f0000000000000000000000002bbb1ac9a6f2cd51a066dded1d0554db7fd51b2f00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3639,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000062b485d3ac74b876582dcb1c3c65c92b92f32c8300000000000000000000000062b485d3ac74b876582dcb1c3c65c92b92f32c83000000000000000000000000000000000000000000000000009600607c3807fd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3640,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009fb7563a1969f034e8feb83e499c967d31538e860000000000000000000000009fb7563a1969f034e8feb83e499c967d31538e860000000000000000000000000000000000000000000000000007e3c47664c0b100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3641,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005bdf630a97936201955b25b279fbe016fe2f04490000000000000000000000005bdf630a97936201955b25b279fbe016fe2f0449000000000000000000000000000000000000000000000000000138232bc379db00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3642,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000011e9df05c3a5adc42c7bfae4f0360b4e2423f29b00000000000000000000000011e9df05c3a5adc42c7bfae4f0360b4e2423f29b0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3643,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000deaef36fa8a391fa09a4b5f8ba67a655435cf07e000000000000000000000000deaef36fa8a391fa09a4b5f8ba67a655435cf07e00000000000000000000000000000000000000000000000000006af3e97ed2c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3644,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000062ff2b32c2c1fb42d95cd2b5439c840cfeb1652a00000000000000000000000062ff2b32c2c1fb42d95cd2b5439c840cfeb1652a00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3646,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c5dcaf4f9edd062d1c8589cf9611253afb982a40000000000000000000000000c5dcaf4f9edd062d1c8589cf9611253afb982a400000000000000000000000000000000000000000000000000101fca146ffb61600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3648,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a16ba1c0084ffdf78849c25d933f2ca49c873f97000000000000000000000000a16ba1c0084ffdf78849c25d933f2ca49c873f9700000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3650,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002036d5417e963825de1299d88cf8a7b5d61b5c8b0000000000000000000000002036d5417e963825de1299d88cf8a7b5d61b5c8b0000000000000000000000000000000000000000000000000083be228e54b68000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3655,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000101f4c1944e1f15d3dec809cec589921ed56d006000000000000000000000000101f4c1944e1f15d3dec809cec589921ed56d0060000000000000000000000000000000000000000000000000125754782fc284700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3656,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009fada4ec572fdb820a00a5607099f4a5049b89a50000000000000000000000009fada4ec572fdb820a00a5607099f4a5049b89a5000000000000000000000000000000000000000000000000001291046558b1c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3657,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009fada4ec572fdb820a00a5607099f4a5049b89a50000000000000000000000009fada4ec572fdb820a00a5607099f4a5049b89a500000000000000000000000000000000000000000000000000456498511c740f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3658,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ec4b0aada8d46640b7296df77132e299c40cc2f7000000000000000000000000ec4b0aada8d46640b7296df77132e299c40cc2f70000000000000000000000000000000000000000000000000055ea748820b50400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3659,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007834c9a4b652f096a84c364b1c44828bb750924b0000000000000000000000007834c9a4b652f096a84c364b1c44828bb750924b00000000000000000000000000000000000000000000000001cdda4faccd000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3660,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000ca64e575083e0a8f9c73ffc214d78027d98fc51b000000000000000000000000ca64e575083e0a8f9c73ffc214d78027d98fc51b0000000000000000000000000000000000000000000000000000000007df1b8e00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3661,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000234cf11ffb859f228bef972bac3116375f45c2eb000000000000000000000000234cf11ffb859f228bef972bac3116375f45c2eb000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3662,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fd728faf4c65cc9af041a5376791c4699f49f0d2000000000000000000000000fd728faf4c65cc9af041a5376791c4699f49f0d200000000000000000000000000000000000000000000000000f8b0a10e47000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3663,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006caba1b5bf7ffd11e061e652e8040527c1b6dd130000000000000000000000006caba1b5bf7ffd11e061e652e8040527c1b6dd1300000000000000000000000000000000000000000000000000a93485d885250000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x96f1dd5e23b91fa9cbbd60ce9fcf5656f1e8b2ba93fb1c817c481417ea78d5fc,2022-05-01 14:05:11.000 UTC,0,true -3664,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076ae8013e0271a2bf0b8d434433c9672cdac06e400000000000000000000000076ae8013e0271a2bf0b8d434433c9672cdac06e4000000000000000000000000000000000000000000000000013fbe85edc9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3666,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a717310f71b2e7809c8941d14e95ef6fba990c16000000000000000000000000a717310f71b2e7809c8941d14e95ef6fba990c16000000000000000000000000000000000000000000000000001c0c9b4ef45d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3667,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c4f717e9fd9c01b68cf68f3e984c3603aecfa1e0000000000000000000000002c4f717e9fd9c01b68cf68f3e984c3603aecfa1e00000000000000000000000000000000000000000000000002adaf74d2984a4100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3668,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003074601bb1f3f0fea734c26d684ba9fd2c2871fa0000000000000000000000003074601bb1f3f0fea734c26d684ba9fd2c2871fa00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3669,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003beca87dd176c613db59af20619dd9e0a99c66060000000000000000000000003beca87dd176c613db59af20619dd9e0a99c660600000000000000000000000000000000000000000000000000203092fd43c6e000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3670,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005c69e40ed489b88fd694ad7e31776e469859afd00000000000000000000000005c69e40ed489b88fd694ad7e31776e469859afd000000000000000000000000000000000000000000000000007c58508723800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x0025d1da6ffd6c3005f710cfd1ef8d9386b8008b39a0008b579625b68855f701,2022-06-20 04:37:06.000 UTC,0,true -3671,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b73a132677af8a3ff0e3e940dde2c89148fa0fe1000000000000000000000000b73a132677af8a3ff0e3e940dde2c89148fa0fe100000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3672,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa95ccaff6b6cb4cf3ec479cab22c60d53d508ec000000000000000000000000aa95ccaff6b6cb4cf3ec479cab22c60d53d508ec00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3673,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d36511ef12161df48da2d618e73586f910ecf380000000000000000000000008d36511ef12161df48da2d618e73586f910ecf3800000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3675,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000027688f913d6d40f39ae1dfde8a1a82e1496e927800000000000000000000000027688f913d6d40f39ae1dfde8a1a82e1496e927800000000000000000000000000000000000000000000000000b6f92e9456149300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3676,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002aaf8308ecabf4b13475437ae1a311076cbb5a0c0000000000000000000000002aaf8308ecabf4b13475437ae1a311076cbb5a0c00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3677,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d730517b1a6066a5746d7f2dcce47b0713e2ae50000000000000000000000000d730517b1a6066a5746d7f2dcce47b0713e2ae50000000000000000000000000000000000000000000000000003b0dacedbc380000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3678,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b83e28f3fdd1d2fa98e4aeb7a5f063d91261d36b000000000000000000000000b83e28f3fdd1d2fa98e4aeb7a5f063d91261d36b00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3679,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000023a3b309b616b8d25a6a6c1bf9d95969ad010f8900000000000000000000000023a3b309b616b8d25a6a6c1bf9d95969ad010f890000000000000000000000000000000000000000000000000147f2872ece120700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3680,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d291a341157f6566c3520e5f920089c243a1b9bb000000000000000000000000d291a341157f6566c3520e5f920089c243a1b9bb00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3681,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc8d40e13f2738844355aa381dd790f83ae0804f000000000000000000000000cc8d40e13f2738844355aa381dd790f83ae0804f00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3682,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f0615906491bad3ecfb38194f32818ffe0590593000000000000000000000000f0615906491bad3ecfb38194f32818ffe05905930000000000000000000000000000000000000000000000000108ad322cac485200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3684,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d52251d6f7c7348b3d4d76b22a666f5ce2ee4641000000000000000000000000d52251d6f7c7348b3d4d76b22a666f5ce2ee464100000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3685,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f435f8278c740b9d866d87e6b1903d33329398cf000000000000000000000000f435f8278c740b9d866d87e6b1903d33329398cf000000000000000000000000000000000000000000000000000b0c11950e2d3500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3686,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017d0a01c3a3b138363501450e6f2b4c0f1a89acb00000000000000000000000017d0a01c3a3b138363501450e6f2b4c0f1a89acb000000000000000000000000000000000000000000000000011c37937e08000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3690,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000023c00c3e224fb25f07d7cf445d802c442fe7af5000000000000000000000000023c00c3e224fb25f07d7cf445d802c442fe7af5000000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3691,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000039af6952f2fbe751a10f28a63f9f57d65f64e3fa00000000000000000000000039af6952f2fbe751a10f28a63f9f57d65f64e3fa0000000000000000000000000000000000000000000000000000000002faf08000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3692,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fa6c38979931cf3aa631ddcb0cfb664a4674c5fc000000000000000000000000fa6c38979931cf3aa631ddcb0cfb664a4674c5fc00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3693,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009e8d3b936f8ffef0d816c489f74ad79cd1c7824e0000000000000000000000009e8d3b936f8ffef0d816c489f74ad79cd1c7824e00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3694,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007636fcbffc81d543c8a439022902b834073dea3e0000000000000000000000007636fcbffc81d543c8a439022902b834073dea3e00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3695,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000097b1b4fe3b85ae6cc85323bb91c62ac9f56aa9ad00000000000000000000000097b1b4fe3b85ae6cc85323bb91c62ac9f56aa9ad00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3696,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c544cf87f37d5862bef3c0a89ac6aa94f8d74e7c000000000000000000000000c544cf87f37d5862bef3c0a89ac6aa94f8d74e7c000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3697,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008ba7a0136cc8e056e8641c8bb006113c8e0caf640000000000000000000000008ba7a0136cc8e056e8641c8bb006113c8e0caf640000000000000000000000000000000000000000000000000054d5fcf923250000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3698,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008346867972983eca1b7ceb5d3a60bb18f23a96010000000000000000000000008346867972983eca1b7ceb5d3a60bb18f23a960100000000000000000000000000000000000000000000000000932892ecc8224800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x146a7f6bacd30db43ed1a0a6052f91063cce9d1d1e6080563dcbf9ac3bb5ff77,2022-03-04 12:04:17.000 UTC,0,true -3699,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b08b9f29edfd8feed9a6f1c23db3d7ffe9bc89f9000000000000000000000000b08b9f29edfd8feed9a6f1c23db3d7ffe9bc89f900000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3700,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000073ce4c69c1e4b26b324f62da4a2439bae8957d3800000000000000000000000073ce4c69c1e4b26b324f62da4a2439bae8957d380000000000000000000000000000000000000000000000000060076ad2445b2e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3701,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000073b1245ec728ae5fc4ffe3287873c89aa057334000000000000000000000000073b1245ec728ae5fc4ffe3287873c89aa05733400000000000000000000000000000000000000000000000001933eb75c39efb200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3702,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007cf1e827a248123f68de5879687ae9e928e5ff7f0000000000000000000000007cf1e827a248123f68de5879687ae9e928e5ff7f00000000000000000000000000000000000000000000000000ce54e7fb424d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3704,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fb5e5e296186ad319c7cd221e47febbfebb2555f000000000000000000000000fb5e5e296186ad319c7cd221e47febbfebb2555f000000000000000000000000000000000000000000000000013fbe85edc9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3706,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f986a3e141dc29b77160fd313faa9c7a3cc983a0000000000000000000000006f986a3e141dc29b77160fd313faa9c7a3cc983a0000000000000000000000000000000000000000000000000150cc1904b5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3707,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004cdf67d66a4958ea1364db82437afaffa6f3295d0000000000000000000000004cdf67d66a4958ea1364db82437afaffa6f3295d000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3709,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e6999a8508d9f36c5ee6ad0152b393e145481aa5000000000000000000000000e6999a8508d9f36c5ee6ad0152b393e145481aa5000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3710,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd27ef02c889230ee98465e570fd4a3a2724abd5000000000000000000000000dd27ef02c889230ee98465e570fd4a3a2724abd50000000000000000000000000000000000000000000000000032e12ac200d3a700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3711,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f275599564fd00281c450ee6c50f03214fce8960000000000000000000000007f275599564fd00281c450ee6c50f03214fce896000000000000000000000000000000000000000000000000015af694b741750000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3712,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b4aa4ad0fa6cb4079ead2b0fb2239ae01f464b60000000000000000000000001b4aa4ad0fa6cb4079ead2b0fb2239ae01f464b60000000000000000000000000000000000000000000000000009dd75da31ba0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3713,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005b25c1a12ace49fe05979041b763b4982e8bdd3e0000000000000000000000005b25c1a12ace49fe05979041b763b4982e8bdd3e00000000000000000000000000000000000000000000000000c8c2ea4839940000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3714,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001c06efe1b692083d3d823687ffdc3b0e4332d12b0000000000000000000000001c06efe1b692083d3d823687ffdc3b0e4332d12b000000000000000000000000000000000000000000000000033d0e4796df2bd500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x56eb5ddb861a5caad51b6d2083933a95e6b9b73a83580a34a957794e8e6af758,2022-04-21 01:58:31.000 UTC,0,true -3716,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a1302555eae657335fb9829cc5afdbe878239cf4000000000000000000000000a1302555eae657335fb9829cc5afdbe878239cf400000000000000000000000000000000000000000000000000a8835de65528b200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3722,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000c24679ce898676e0cbecc1e5c216c5619feaa255000000000000000000000000c24679ce898676e0cbecc1e5c216c5619feaa25500000000000000000000000000000000000000000000000000000000254f578b00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3726,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7e4ca65590e5d0630f5fde7ca5a0bb880522391000000000000000000000000c7e4ca65590e5d0630f5fde7ca5a0bb8805223910000000000000000000000000000000000000000000000000038abb391a804c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3729,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004283e38da7815ab32ded99cd7008fb134b5f3f4b0000000000000000000000004283e38da7815ab32ded99cd7008fb134b5f3f4b000000000000000000000000000000000000000000000000009ad3631d922d7000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3730,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000041f3e6e3c08ef0800d4e563265f55317932c734200000000000000000000000041f3e6e3c08ef0800d4e563265f55317932c73420000000000000000000000000000000000000000000000000016eabcc00d5ea000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3731,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f275599564fd00281c450ee6c50f03214fce8960000000000000000000000007f275599564fd00281c450ee6c50f03214fce896000000000000000000000000000000000000000000000000036f7e03bc6e180000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3732,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000f9175f2cbdf68c1f983db87c41e6d2b7be126c50000000000000000000000000f9175f2cbdf68c1f983db87c41e6d2b7be126c5000000000000000000000000000000000000000000000000001535985d90de0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3734,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000108efaaefa1f2b96928bdb5c78b935458feb8dd5000000000000000000000000108efaaefa1f2b96928bdb5c78b935458feb8dd5000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3736,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009aa405d5ffd65bd6ebbde196170c34bf8e9ae94e0000000000000000000000009aa405d5ffd65bd6ebbde196170c34bf8e9ae94e00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3738,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5cfe9f9ff617a274960dc84f82c03e5098b2d53000000000000000000000000e5cfe9f9ff617a274960dc84f82c03e5098b2d53000000000000000000000000000000000000000000000000001a904188826d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3739,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071c77a0e30b4c2f3ca4cf2cfbaee0e039b2e7b5900000000000000000000000071c77a0e30b4c2f3ca4cf2cfbaee0e039b2e7b59000000000000000000000000000000000000000000000000025bf6196bd1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3740,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b843d5ddf91de2dec8e77dc133aba21a7d013dac000000000000000000000000b843d5ddf91de2dec8e77dc133aba21a7d013dac00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3741,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000bf1751f32bd0cbd8b44d9d3064aadf9df3757349000000000000000000000000bf1751f32bd0cbd8b44d9d3064aadf9df37573490000000000000000000000000000000000000000000000000000000007e8939f00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3742,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf49bf6e2e975325bbea284d615f0cb3d928a20f000000000000000000000000cf49bf6e2e975325bbea284d615f0cb3d928a20f000000000000000000000000000000000000000000000000001a39d68c2cae0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3745,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000078275af1a67c7bb4c88c23601db4066499387c7f00000000000000000000000078275af1a67c7bb4c88c23601db4066499387c7f000000000000000000000000000000000000000000000000000000001b5bc8c000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3746,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000022838365403af97f06a287c97441a2f37b70165a00000000000000000000000022838365403af97f06a287c97441a2f37b70165a000000000000000000000000000000000000000000000000001b87344aaba60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3747,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009e9aab52fbc67240ed8e0df4ac47f9bd8e502b790000000000000000000000009e9aab52fbc67240ed8e0df4ac47f9bd8e502b7900000000000000000000000000000000000000000000000000b3883cecdbec9b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3748,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0667fef209ff1469c334d4de9ee6c78a372b3c2000000000000000000000000c0667fef209ff1469c334d4de9ee6c78a372b3c2000000000000000000000000000000000000000000000000003fff819405230000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3749,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d504f282cd20bff9f0e2b7d006771e3a81f6bdbd000000000000000000000000d504f282cd20bff9f0e2b7d006771e3a81f6bdbd000000000000000000000000000000000000000000000000011c4e0db4e21ba200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3750,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000369378f65bea146234fd290fc1ac59d0ecf921ed000000000000000000000000369378f65bea146234fd290fc1ac59d0ecf921ed00000000000000000000000000000000000000000000000000872dcf7b1423d900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3751,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3d2e2a1de238241ae90e098d06e101e2a428d80000000000000000000000000d3d2e2a1de238241ae90e098d06e101e2a428d80000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3752,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e3a38bb08446a114ba0081aaf55b496f18d9bdcd000000000000000000000000e3a38bb08446a114ba0081aaf55b496f18d9bdcd000000000000000000000000000000000000000000000000000124c7d16723c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3753,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009dd092ead78363e9a86889d70727d1d9037f39f80000000000000000000000009dd092ead78363e9a86889d70727d1d9037f39f8000000000000000000000000000000000000000000000000004559e1a8aed42e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3754,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000002c95fef9de755f18144615ea3e93fd23e677f9b00000000000000000000000002c95fef9de755f18144615ea3e93fd23e677f9b000000000000000000000000000000000000000000000000001cee9468fed50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3755,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e0f589d68f839c5b9e92598370e4728a193edfb0000000000000000000000003e0f589d68f839c5b9e92598370e4728a193edfb00000000000000000000000000000000000000000000000000404b938882530000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3756,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b079b3333e2fba074438c42b2c75be2c60a453fe000000000000000000000000b079b3333e2fba074438c42b2c75be2c60a453fe000000000000000000000000000000000000000000000000003ff2e795f5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3758,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000077d9418d284f2bfd8bfac5428bbf2d7e3372c27e00000000000000000000000077d9418d284f2bfd8bfac5428bbf2d7e3372c27e00000000000000000000000000000000000000000000000000c5f9b15062393d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3759,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d88d5b3dbe8790369799012310c31eb210eeec81000000000000000000000000d88d5b3dbe8790369799012310c31eb210eeec810000000000000000000000000000000000000000000000000af4a5368de1b44000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3761,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd841182e5c586f917015bfb2665bc335267f753000000000000000000000000dd841182e5c586f917015bfb2665bc335267f75300000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3763,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000423f024de8137ecb8396f7f5e657f441f2879dab000000000000000000000000423f024de8137ecb8396f7f5e657f441f2879dab0000000000000000000000000000000000000000000000000031bced02db000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3764,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004cb0032536cef0e50d670dd72b03eaa004d578400000000000000000000000004cb0032536cef0e50d670dd72b03eaa004d57840000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x86eced8d9a730eb85494b1b3cb8cad3f34a916f875d24f189497024d4b39711e,2022-04-28 15:19:38.000 UTC,0,true -3765,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006548e04bd2303fb34cfb89d6bdbfb96200a7ac980000000000000000000000006548e04bd2303fb34cfb89d6bdbfb96200a7ac98000000000000000000000000000000000000000000000000000b3bdbe270136a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3766,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009564d7aed0f3bf0d2ca204fc07a6ec75e969fa8b0000000000000000000000009564d7aed0f3bf0d2ca204fc07a6ec75e969fa8b000000000000000000000000000000000000000000000000000ab565db430b2300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3768,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d74c56c55573d810a130599aac4bec2337b4dc3d000000000000000000000000d74c56c55573d810a130599aac4bec2337b4dc3d000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3769,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003afff5535509253870fc986483328d7eed93f4050000000000000000000000003afff5535509253870fc986483328d7eed93f40500000000000000000000000000000000000000000000000000a1b3d75693691300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3770,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000750477199971bd75e8d75810cfa8a429d7b55828000000000000000000000000750477199971bd75e8d75810cfa8a429d7b55828000000000000000000000000000000000000000000000000004e83d53989400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3771,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b1667baf1bcb5631e45d007d849ecbed61c92537000000000000000000000000b1667baf1bcb5631e45d007d849ecbed61c92537000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3772,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000095d8c745c7073b981c3cc76f9cf739bac0d532c200000000000000000000000095d8c745c7073b981c3cc76f9cf739bac0d532c2000000000000000000000000000000000000000000000000000a444d64d3956900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3774,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000677ec29dbbb8e301e508d4f1bcd59cc0632f66b0000000000000000000000000677ec29dbbb8e301e508d4f1bcd59cc0632f66b00000000000000000000000000000000000000000000000000d529ae9e86000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3775,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000058f54129b66adb13dd2ef12537fa51e300363dbd00000000000000000000000058f54129b66adb13dd2ef12537fa51e300363dbd000000000000000000000000000000000000000000000000000b9ce5059e533b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3776,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001f9ad14de2590813d0788526b22ef112df7286d70000000000000000000000001f9ad14de2590813d0788526b22ef112df7286d700000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3777,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000570cf8eb179d6f8293a88fa79ae0b13fca888898000000000000000000000000570cf8eb179d6f8293a88fa79ae0b13fca888898000000000000000000000000000000000000000000000000008f19aed0609d7e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3779,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b1667baf1bcb5631e45d007d849ecbed61c92537000000000000000000000000b1667baf1bcb5631e45d007d849ecbed61c925370000000000000000000000000000000000000000000000000012795f58d5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3780,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000075f1b7ae6e1f307088b2e65a366ec345e717d3f900000000000000000000000075f1b7ae6e1f307088b2e65a366ec345e717d3f9000000000000000000000000000000000000000000000000000d3f3df217770100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3782,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000089d11c7c7bd8699ac6e089c79b2faac66509ccbf00000000000000000000000089d11c7c7bd8699ac6e089c79b2faac66509ccbf00000000000000000000000000000000000000000000000000a5b952f4f1ba2a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3783,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd519f2206a441738042e7b3af6daacc26b03b0f000000000000000000000000bd519f2206a441738042e7b3af6daacc26b03b0f0000000000000000000000000000000000000000000000000007be578a7f380000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3785,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000754d92358e0d4dff0aad19a21c5e989b9411c698000000000000000000000000754d92358e0d4dff0aad19a21c5e989b9411c698000000000000000000000000000000000000000000000000011c37937e08000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3786,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000516a4adbffa2cd62865effb0bd27a9eb9735d2b0000000000000000000000000516a4adbffa2cd62865effb0bd27a9eb9735d2b000000000000000000000000000000000000000000000000000ad6697411420e400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3787,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6b0e93a33e7d1e18199147d4bf6d0ebf8f8500a000000000000000000000000c6b0e93a33e7d1e18199147d4bf6d0ebf8f8500a000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3788,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000db415f659a141e3abdf3367d7761066515511163000000000000000000000000db415f659a141e3abdf3367d776106651551116300000000000000000000000000000000000000000000000000f8b0a10e47000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3789,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e2dbaacde75dfe48b03260d7f0ff15feef3c4c20000000000000000000000000e2dbaacde75dfe48b03260d7f0ff15feef3c4c2000000000000000000000000000000000000000000000000010eaee42a632fc100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3790,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000072c3c76bad4ead8a5d737a006663cc0a491c79b300000000000000000000000072c3c76bad4ead8a5d737a006663cc0a491c79b3000000000000000000000000000000000000000000000000002aa1efb94e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3791,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000008849ee2e94f6c7437292fdc0c9d85c2577ba69050000000000000000000000008849ee2e94f6c7437292fdc0c9d85c2577ba6905000000000000000000000000000000000000000000000000000000000098968000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3792,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d78e07f410cedcc234447881e5574f0cd0583b48000000000000000000000000d78e07f410cedcc234447881e5574f0cd0583b48000000000000000000000000000000000000000000000000007c101ca157a0c200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3794,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000007e2ab7bd1eb35269d9714dade8ac0302c2146a600000000000000000000000007e2ab7bd1eb35269d9714dade8ac0302c2146a600000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3796,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000813407596e7c63cd3958ff081ca078cb31ddbf10000000000000000000000000813407596e7c63cd3958ff081ca078cb31ddbf1000000000000000000000000000000000000000000000000001efd34eb78aa0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3797,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e01b7a8262bd737068126769c21c86e57a250f53000000000000000000000000e01b7a8262bd737068126769c21c86e57a250f5300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3799,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000096aae12d0d97428bbd24d4e5e43c1db73149bcc400000000000000000000000096aae12d0d97428bbd24d4e5e43c1db73149bcc4000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3800,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d9a5f53cc1c4a32ed891d8a3585905db3ced6689000000000000000000000000d9a5f53cc1c4a32ed891d8a3585905db3ced668900000000000000000000000000000000000000000000000001ccc91ae74612a300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3801,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000489a776cbd29e9f986c8a194cddb3527a6e4d8b8000000000000000000000000489a776cbd29e9f986c8a194cddb3527a6e4d8b800000000000000000000000000000000000000000000000000ae153d89fe800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3802,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000315e1a5c796b734585c27e615b774441372fbd08000000000000000000000000315e1a5c796b734585c27e615b774441372fbd0800000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3803,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a4fcee82f6c8664d63fa93b90dee3ebf940a907d000000000000000000000000a4fcee82f6c8664d63fa93b90dee3ebf940a907d000000000000000000000000000000000000000000000000001a81d2324aa09800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3804,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f412b5f5faa69082ffbf9497480b2596c5097e63000000000000000000000000f412b5f5faa69082ffbf9497480b2596c5097e630000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3805,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c634aa608ccdba729f540bd4f740d8671aa4ff68000000000000000000000000c634aa608ccdba729f540bd4f740d8671aa4ff680000000000000000000000000000000000000000000000000001902d7bb3800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3806,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a05dfcb3e061675bb1628e26161db7c886f707a0000000000000000000000006a05dfcb3e061675bb1628e26161db7c886f707a0000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3807,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078d56686655978326009c884fb12482ea1afd99000000000000000000000000078d56686655978326009c884fb12482ea1afd990000000000000000000000000000000000000000000000000001ce1fe9db92e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3808,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1955833b0786b2f5b725e13f220c3abba9ea89f000000000000000000000000f1955833b0786b2f5b725e13f220c3abba9ea89f00000000000000000000000000000000000000000000000000b5700c4d927dbe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3809,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003fcc251bcc3a519cd4c8b984c6dda0744fcb4ff40000000000000000000000003fcc251bcc3a519cd4c8b984c6dda0744fcb4ff400000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3810,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c4f717e9fd9c01b68cf68f3e984c3603aecfa1e0000000000000000000000002c4f717e9fd9c01b68cf68f3e984c3603aecfa1e00000000000000000000000000000000000000000000000001493b5b91df58ff00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3811,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000008d2800996df63489bbc72291b5105b47dff7c1db0000000000000000000000008d2800996df63489bbc72291b5105b47dff7c1db000000000000000000000000000000000000000000000000000000000097673200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3812,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b2f6d20ca538d094bc14f7f5f78dbb59a2dab941000000000000000000000000b2f6d20ca538d094bc14f7f5f78dbb59a2dab941000000000000000000000000000000000000000000000000002da473a405890000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3813,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a7ebd39478c6d0f4ff652cb3ad1f268f80fc180b000000000000000000000000a7ebd39478c6d0f4ff652cb3ad1f268f80fc180b00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3814,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000072f55b96e746075da2932a5518251aa641f79e4d00000000000000000000000072f55b96e746075da2932a5518251aa641f79e4d000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3815,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000300c8115f3bbcba6b11ea660bb6b8ad9b50e5095000000000000000000000000300c8115f3bbcba6b11ea660bb6b8ad9b50e509500000000000000000000000000000000000000000000000000be513f2e3b538c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3816,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000375004acccfb6c51ece8f8e9d392ac3ee1fc7b50000000000000000000000000375004acccfb6c51ece8f8e9d392ac3ee1fc7b5000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3817,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f0a7f7182a7efee4eb6f2284a18fb3db388f4a30000000000000000000000003f0a7f7182a7efee4eb6f2284a18fb3db388f4a3000000000000000000000000000000000000000000000000002ee474461e847400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3818,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000010611590e8b86fd369ba0053af0d9d94b4d5e2fd00000000000000000000000010611590e8b86fd369ba0053af0d9d94b4d5e2fd000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3819,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000281b87fd1c6e9889a640ea433701a50c188353f0000000000000000000000000281b87fd1c6e9889a640ea433701a50c188353f00000000000000000000000000000000000000000000000000341cbace10a9c100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3820,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000491830a07fb1e9a0ad0594350f4ec40dca7221c9000000000000000000000000491830a07fb1e9a0ad0594350f4ec40dca7221c900000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3821,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006b9fca59517f111b12ed215066c6acb8b047e9f40000000000000000000000006b9fca59517f111b12ed215066c6acb8b047e9f4000000000000000000000000000000000000000000000000003c0a5dfe68008e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3822,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001f0641456068a18bf7c650fa8baa10a16a91e9d20000000000000000000000001f0641456068a18bf7c650fa8baa10a16a91e9d200000000000000000000000000000000000000000000000000b1c8c44c27f84d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3824,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005974bba5c87c1cbfd49ccfa523d2c43a39effa100000000000000000000000005974bba5c87c1cbfd49ccfa523d2c43a39effa10000000000000000000000000000000000000000000000000003be644b1aeb8200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3825,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000771bb178d252a53539bed32a81feed638bece156000000000000000000000000771bb178d252a53539bed32a81feed638bece15600000000000000000000000000000000000000000000000000261b5f5d6ead3c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3826,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000043b2dab2c28e6775626f41d2cdfde0cb2b0fee2300000000000000000000000043b2dab2c28e6775626f41d2cdfde0cb2b0fee230000000000000000000000000000000000000000000000000000000000ca027100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3827,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006fcb0c131c5648808ed90b651dac3ee52167ab300000000000000000000000006fcb0c131c5648808ed90b651dac3ee52167ab30000000000000000000000000000000000000000000000000009a0d5cd60e1c9700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3829,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000091a56b8c4203821bf4267e071b42122f5aef99b500000000000000000000000091a56b8c4203821bf4267e071b42122f5aef99b50000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3830,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039449e70f8c4840d594dc39206ac255250c3de1a00000000000000000000000039449e70f8c4840d594dc39206ac255250c3de1a000000000000000000000000000000000000000000000000014c1782a2b1a85c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3832,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000226d4e9559b91a58f5763d11722178a983e8efd6000000000000000000000000226d4e9559b91a58f5763d11722178a983e8efd60000000000000000000000000000000000000000000000000411084ff1221ca900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3833,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047896f79d4b3f5e67993c3abdb91554a8be03a1100000000000000000000000047896f79d4b3f5e67993c3abdb91554a8be03a11000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3834,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cdf5fa5ddfe6b18c43dfcbf0606a18d03814de62000000000000000000000000cdf5fa5ddfe6b18c43dfcbf0606a18d03814de62000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3835,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009f127e08fe04acbe8562cdd83bc3cb4911264efc0000000000000000000000009f127e08fe04acbe8562cdd83bc3cb4911264efc000000000000000000000000000000000000000000000000004d00ef8d868e1f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3836,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000008408e984be85f93f4b8fdab8c326a300e1299a130000000000000000000000008408e984be85f93f4b8fdab8c326a300e1299a130000000000000000000000000000000000000000000000000000000000fc87b700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3837,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e0251c065aa6a144d573d2b25d8c0b3c07ad0d44000000000000000000000000e0251c065aa6a144d573d2b25d8c0b3c07ad0d4400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3839,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000040f97c33ec682c872eabe60e24bba862a2152ae200000000000000000000000040f97c33ec682c872eabe60e24bba862a2152ae20000000000000000000000000000000000000000000000000555ac9c03666ff200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3841,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000067ba8b7a6cf8b93451422ecbd43152f2c0e101c800000000000000000000000067ba8b7a6cf8b93451422ecbd43152f2c0e101c8000000000000000000000000000000000000000000000000009b4d586152198700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3842,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000f4f342ffb2122ec36ddc77ff5825ff8f430991a4000000000000000000000000f4f342ffb2122ec36ddc77ff5825ff8f430991a40000000000000000000000000000000000000000000000000000000002faf08000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3843,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000040b32f1e906fa57b30e2059b29c698c19dd6fe9500000000000000000000000040b32f1e906fa57b30e2059b29c698c19dd6fe95000000000000000000000000000000000000000000000001c9ca0e4f144b148600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3844,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004f25877c6ab337aab6898cf70db3ea00bad83a900000000000000000000000004f25877c6ab337aab6898cf70db3ea00bad83a90000000000000000000000000000000000000000000000000009fd6f4d17d2c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3845,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007558899d8109d8a2ce457837ade56c3d6ebfe90d0000000000000000000000007558899d8109d8a2ce457837ade56c3d6ebfe90d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3846,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000038bdb2f63e6ac5996cec5cea17ed0c6da066978100000000000000000000000038bdb2f63e6ac5996cec5cea17ed0c6da06697810000000000000000000000000000000000000000000000000000000000975ea200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3847,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000003b8d47f77c537842cfe003ffd751cbb8cf8f9f540000000000000000000000003b8d47f77c537842cfe003ffd751cbb8cf8f9f5400000000000000000000000000000000000000000000000059f0841efbdff9bd00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3849,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000b12fa3e8c3db55cbd103c6f12174c091304eeb1f000000000000000000000000b12fa3e8c3db55cbd103c6f12174c091304eeb1f00000000000000000000000000000000000000000000000000000000007985cd00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3850,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c3a038cb837ff7cdb038c72d3714951a835e6a36000000000000000000000000c3a038cb837ff7cdb038c72d3714951a835e6a36000000000000000000000000000000000000000000000000008b921b2cf6e9f900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3851,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008923b496d365c6de1d694de37e9e11c18627dec20000000000000000000000008923b496d365c6de1d694de37e9e11c18627dec200000000000000000000000000000000000000000000000000307a67ed8bb4ad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3852,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004012460b81a1b975149071eea32f7391a82e54750000000000000000000000004012460b81a1b975149071eea32f7391a82e5475000000000000000000000000000000000000000000000000009871f15500ad6500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3853,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fa5b9a2dc716bd732c0633d576db4d9cceb36f55000000000000000000000000fa5b9a2dc716bd732c0633d576db4d9cceb36f55000000000000000000000000000000000000000000000000013e5769b518517600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3854,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003159fb204e29c5666780d60bd34bffbd1bb1b9660000000000000000000000003159fb204e29c5666780d60bd34bffbd1bb1b9660000000000000000000000000000000000000000000000000102009878bae82600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3855,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029ab02016fd6a2c6fe199f8a2c28c1dd8735dd8100000000000000000000000029ab02016fd6a2c6fe199f8a2c28c1dd8735dd81000000000000000000000000000000000000000000000000005e63b9ee7bec0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3856,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000087497f866184d7e32281e5ba09e36ba476ffbbc400000000000000000000000087497f866184d7e32281e5ba09e36ba476ffbbc4000000000000000000000000000000000000000000000000002905749d1ec11900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3857,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d3eb1796600fddd8128b4ce284f789a942bd1a80000000000000000000000000d3eb1796600fddd8128b4ce284f789a942bd1a8000000000000000000000000000000000000000000000000000b98c538fe4ab600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3858,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca6a99150fa9a555de0b4cd56a3d3cc7ee74591a000000000000000000000000ca6a99150fa9a555de0b4cd56a3d3cc7ee74591a0000000000000000000000000000000000000000000000001af044837ce2a9f100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3860,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000bac76b4c06d7c642601e995a68cb5186ee3154e6000000000000000000000000bac76b4c06d7c642601e995a68cb5186ee3154e60000000000000000000000000000000000000000000000000000000006cb41c600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3861,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000250c60517a09bfe0ce2614f168482d4cdde54521000000000000000000000000250c60517a09bfe0ce2614f168482d4cdde54521000000000000000000000000000000000000000000000000013ebcaf9702341e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3862,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e816691000000000000000000000000e614436af4dce18bb711a46a1eb88c9bd6752f90000000000000000000000000e614436af4dce18bb711a46a1eb88c9bd6752f9000000000000000000000000000000000000000000000000006d013da300ad47200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3863,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a699e3109bf34f6b175287b5d87c3b880ecf36b3000000000000000000000000a699e3109bf34f6b175287b5d87c3b880ecf36b300000000000000000000000000000000000000000000000000ae4473db5f92d900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3867,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000864a269bf59800a7b07c2e543cbcad1339009038000000000000000000000000864a269bf59800a7b07c2e543cbcad1339009038000000000000000000000000000000000000000000000000002bf3c7a7c06a9d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3868,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001eba4156edbc932dbba3ab346df0bc5dad090ca50000000000000000000000001eba4156edbc932dbba3ab346df0bc5dad090ca500000000000000000000000000000000000000000000000000aa2ff221888e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3869,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e816691000000000000000000000000eb40d183faec21ca7abc4af1a5afe59b1e887149000000000000000000000000eb40d183faec21ca7abc4af1a5afe59b1e8871490000000000000000000000000000000000000000000000000605fb92345780c100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3870,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e39d6f3a84ca26c65c941f7de02ea748308781a5000000000000000000000000e39d6f3a84ca26c65c941f7de02ea748308781a5000000000000000000000000000000000000000000000000003fc1fa95cd0f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3871,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000865e56dc344831e91e7618201987a9f7ddf6a716000000000000000000000000865e56dc344831e91e7618201987a9f7ddf6a716000000000000000000000000000000000000000000000000019c1d62a9f2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3872,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017d8319926eb181225cf3c75dfd91e36a065612d00000000000000000000000017d8319926eb181225cf3c75dfd91e36a065612d0000000000000000000000000000000000000000000000000058d15e1762800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3873,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c93ffb6ccfa0fbe215de35afb3c7020a76accb4b000000000000000000000000c93ffb6ccfa0fbe215de35afb3c7020a76accb4b0000000000000000000000000000000000000000000000000086279d5758568f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3875,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a8ff6463f2887c4f1b9fc7e6291d38940e43dd80000000000000000000000000a8ff6463f2887c4f1b9fc7e6291d38940e43dd8000000000000000000000000000000000000000000000000000cb8e41403cb4a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3876,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000aa76c67ab68fa37df3821d41192f21b275f0beac000000000000000000000000aa76c67ab68fa37df3821d41192f21b275f0beac0000000000000000000000000000000000000000000000000000000011e1a30000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3877,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c8460c65f8ecf0e590e0dfeb8ac5a4786370235b000000000000000000000000c8460c65f8ecf0e590e0dfeb8ac5a4786370235b000000000000000000000000000000000000000000000000013fbe85edc9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3879,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008a83bbbee6a05eb158371bc888deda2c853958a60000000000000000000000008a83bbbee6a05eb158371bc888deda2c853958a600000000000000000000000000000000000000000000000000f28d969b8644f500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3880,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc83ece75cdc5f481f2221ca64dc27c7d3a3a360000000000000000000000000fc83ece75cdc5f481f2221ca64dc27c7d3a3a360000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3881,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca4410fed843bd3a596b4b9a825b3ee50eed339f000000000000000000000000ca4410fed843bd3a596b4b9a825b3ee50eed339f00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3882,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc83ece75cdc5f481f2221ca64dc27c7d3a3a360000000000000000000000000fc83ece75cdc5f481f2221ca64dc27c7d3a3a360000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3883,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e92d661bd5063f7df955d68e123b96d069069e90000000000000000000000003e92d661bd5063f7df955d68e123b96d069069e9000000000000000000000000000000000000000000000000009101098c2958ea00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3884,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cdcc0d3d741dd6501ad2f8109cd9d9f5d4784668000000000000000000000000cdcc0d3d741dd6501ad2f8109cd9d9f5d4784668000000000000000000000000000000000000000000000000008fe660daa7ac4d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3885,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000d08487457f8c37ef5a021af28280d4f915dd32f6000000000000000000000000d08487457f8c37ef5a021af28280d4f915dd32f600000000000000000000000000000000000000000000000000000000012ea65400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3887,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000171814db6dcaa27d2f88b1d31e306abda53e7526000000000000000000000000171814db6dcaa27d2f88b1d31e306abda53e752600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3888,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cfa6a349a1e9c5f3bf109d5f00232f3855004567000000000000000000000000cfa6a349a1e9c5f3bf109d5f00232f38550045670000000000000000000000000000000000000000000000000093170bbcef3fc700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3889,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000000c62fb0ed991c19edffedf58136f42d188c3cf200000000000000000000000000c62fb0ed991c19edffedf58136f42d188c3cf2000000000000000000000000000000000000000000000000012ccd9bfd26900200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3890,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000044bbe4e4ef96278a80637b5f5622faba5e32803400000000000000000000000044bbe4e4ef96278a80637b5f5622faba5e3280340000000000000000000000000000000000000000000000000138d5d18ea5b9e800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3891,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cd9e3a9ac8741155abfeee31dbe138dd7ad30069000000000000000000000000cd9e3a9ac8741155abfeee31dbe138dd7ad3006900000000000000000000000000000000000000000000000002780cdbd55d803000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3892,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b9c24db3d1a4b41813e77ecfe12d4397b438791e000000000000000000000000b9c24db3d1a4b41813e77ecfe12d4397b438791e000000000000000000000000000000000000000000000000027002878ae4905b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3893,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000060913b55ae54c325be3a8960536f1266aa64819700000000000000000000000060913b55ae54c325be3a8960536f1266aa64819700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3894,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b53012acbac544b88a6a2dc881012b1eaad87d00000000000000000000000001b53012acbac544b88a6a2dc881012b1eaad87d000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3895,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5bd323d83b66be9c0b841e9774d9098db30f9f7000000000000000000000000e5bd323d83b66be9c0b841e9774d9098db30f9f700000000000000000000000000000000000000000000000000266e9b03cc378d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3896,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000046a2eaa65b8090124478813b690514e96411d60600000000000000000000000046a2eaa65b8090124478813b690514e96411d6060000000000000000000000000000000000000000000000000022fe5e75f0f98900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3897,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000005acfbbf0aa370f232e341bc0b1a40e996c960e07000000000000000000000000000000000000000000000003bd913e6c1df40000,,,1,true -3899,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e2c096bd1e7dec77fd08d5d18792c88a51f85c28000000000000000000000000e2c096bd1e7dec77fd08d5d18792c88a51f85c28000000000000000000000000000000000000000000000000004632ad75f4997100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3900,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca26545fe29370565c2533d39b5294c7b7c89f17000000000000000000000000ca26545fe29370565c2533d39b5294c7b7c89f1700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3902,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae1a62bc5e7f80a45fd02d20520359972143c1e4000000000000000000000000ae1a62bc5e7f80a45fd02d20520359972143c1e400000000000000000000000000000000000000000000000000283d179aab4a7100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3903,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005476e4af71ae0ec991986752a30fd57c2425de200000000000000000000000005476e4af71ae0ec991986752a30fd57c2425de200000000000000000000000000000000000000000000000000183da6981b60e200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3904,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000932adf2d3cea3c8238580e81ecfa79c0ad6032b3000000000000000000000000932adf2d3cea3c8238580e81ecfa79c0ad6032b3000000000000000000000000000000000000000000000000011c37937e08000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xa6dc233b0dbd379e8ebc639fe8ccb7fcd23e5d5aa4381d63d22bf0d34b949767,2022-05-30 08:04:37.000 UTC,0,true -3905,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de213eeb9c3c2a1bf8d95d66a6e025ab97d49de3000000000000000000000000de213eeb9c3c2a1bf8d95d66a6e025ab97d49de300000000000000000000000000000000000000000000000000fd5bfefa9eefc400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3906,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000165accdd467426d974d652bde5c714e38f1311fa000000000000000000000000165accdd467426d974d652bde5c714e38f1311fa0000000000000000000000000000000000000000000000000051fc6c6f02fc0c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3908,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001af331dc34dd7c5c62af28b5685328318b61888a0000000000000000000000001af331dc34dd7c5c62af28b5685328318b61888a0000000000000000000000000000000000000000000000000120d7ee01d5206900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3909,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001bd4b3788f36cfaf2382c7b3727a61adb1dddac70000000000000000000000001bd4b3788f36cfaf2382c7b3727a61adb1dddac70000000000000000000000000000000000000000000000000002c8ec8e7fd28000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3911,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000008f3d7c5cf34d33df17627091ca16f129e91395f50000000000000000000000008f3d7c5cf34d33df17627091ca16f129e91395f5000000000000000000000000000000000000000000000000000000000121eac000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3912,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000064b449bcd01d8b5c64187e5f42f913e48c4706fa00000000000000000000000064b449bcd01d8b5c64187e5f42f913e48c4706fa00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3913,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c59cea94ee8b05bd851af1bf9d243ba585e29620000000000000000000000004c59cea94ee8b05bd851af1bf9d243ba585e29620000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3914,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f53d5e7a853b23e9fe83271e23213fb895492746000000000000000000000000f53d5e7a853b23e9fe83271e23213fb8954927460000000000000000000000000000000000000000000000000031e43dac33400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3916,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa0712940ce249c177a00703fa185a9879bccdd8000000000000000000000000aa0712940ce249c177a00703fa185a9879bccdd8000000000000000000000000000000000000000000000000005550edb490ba8700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3917,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000712fcde4fbf129bb73582b1e2b82eeea556fdf28000000000000000000000000712fcde4fbf129bb73582b1e2b82eeea556fdf2800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3918,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a284fbfb32a2f9be4945aac11b09fd092031f056000000000000000000000000a284fbfb32a2f9be4945aac11b09fd092031f056000000000000000000000000000000000000000000000000002af4b67ab8bc8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3919,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000afabc4dafdf690d69bb02a55678d2e1b8b3feedf000000000000000000000000afabc4dafdf690d69bb02a55678d2e1b8b3feedf000000000000000000000000000000000000000000000000001bdebda8b7f10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3920,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6162f7e7cc842566601e8f98de7eff88377a448000000000000000000000000d6162f7e7cc842566601e8f98de7eff88377a4480000000000000000000000000000000000000000000000000052f0e7a9f3ad9400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3921,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000046be90355eec9acb93a0063f3ef7243f3cd3bcf400000000000000000000000046be90355eec9acb93a0063f3ef7243f3cd3bcf400000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3922,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e76cd0f7944fc8c8243db331890e57d6fdf854e0000000000000000000000008e76cd0f7944fc8c8243db331890e57d6fdf854e000000000000000000000000000000000000000000000000001a6eb4a7ba996000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3923,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000880e38366e241344c32d546f21fafb50d612d857000000000000000000000000880e38366e241344c32d546f21fafb50d612d85700000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3925,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c59cea94ee8b05bd851af1bf9d243ba585e29620000000000000000000000004c59cea94ee8b05bd851af1bf9d243ba585e296200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3926,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f5639057d150e6db16a5b2851e7602633ed5e562000000000000000000000000f5639057d150e6db16a5b2851e7602633ed5e562000000000000000000000000000000000000000000000000001d4812f20a950000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3927,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c59cea94ee8b05bd851af1bf9d243ba585e29620000000000000000000000004c59cea94ee8b05bd851af1bf9d243ba585e296200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3928,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000009029057074ab04e98de5e016271100357e7f8d5b0000000000000000000000009029057074ab04e98de5e016271100357e7f8d5b000000000000000000000000000000000000000000000000000000000064643c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3929,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002dc8c538004708dc54696fb46f94ea701f0eb9290000000000000000000000002dc8c538004708dc54696fb46f94ea701f0eb92900000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3930,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000acb7f456858bc9ff605028bac6f6f2972a5015da000000000000000000000000acb7f456858bc9ff605028bac6f6f2972a5015da000000000000000000000000000000000000000000000000000000000064737400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3931,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006edc29b9115b6e5601ed88711f0baac0a38a251e0000000000000000000000006edc29b9115b6e5601ed88711f0baac0a38a251e000000000000000000000000000000000000000000000000001c54f5b2f9a16a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3933,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f68cb6bf5df2d7f0b1a42a814b0939e14f318610000000000000000000000002f68cb6bf5df2d7f0b1a42a814b0939e14f3186100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3934,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009828dd2e0690405617b755ca81e7decac8c9ddfa0000000000000000000000009828dd2e0690405617b755ca81e7decac8c9ddfa000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3935,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f55d10ce6dd8315ac022a5f367b776925968b9b0000000000000000000000008f55d10ce6dd8315ac022a5f367b776925968b9b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3936,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ccf2677ba63913fbf929aad879236a895e704b4c000000000000000000000000ccf2677ba63913fbf929aad879236a895e704b4c00000000000000000000000000000000000000000000000000064672a2cfb00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3937,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a0d07d3fac606bc1693f79aa706f9e7abd934cd7000000000000000000000000a0d07d3fac606bc1693f79aa706f9e7abd934cd7000000000000000000000000000000000000000000000000000d0643d0bf1e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3938,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009a5c53e3aa62bdc23a9e56ce6e1936435d9cf9430000000000000000000000009a5c53e3aa62bdc23a9e56ce6e1936435d9cf94300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3940,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fe3baf2e9352fb4d894b005a2923a0711b106dcf000000000000000000000000fe3baf2e9352fb4d894b005a2923a0711b106dcf00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3941,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003fa38d04b6e2bb406842a2950f9ac13b51b2b1620000000000000000000000003fa38d04b6e2bb406842a2950f9ac13b51b2b16200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3942,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008886f10011806825b1bc560ceb6f06dfc49719c30000000000000000000000008886f10011806825b1bc560ceb6f06dfc49719c30000000000000000000000000000000000000000000000000049fd13f05e8e7a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3943,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000083f4337272794930d596119e04d84dd4e1310fcd00000000000000000000000083f4337272794930d596119e04d84dd4e1310fcd00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3944,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5bd323d83b66be9c0b841e9774d9098db30f9f7000000000000000000000000e5bd323d83b66be9c0b841e9774d9098db30f9f70000000000000000000000000000000000000000000000000024ab490f11c53700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3945,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eb2c098011513bb2bb8655b3dec65a33e7a09dd5000000000000000000000000eb2c098011513bb2bb8655b3dec65a33e7a09dd500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3946,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d31e04df08efbcaa4d92dd1e3af2ec7dd217d330000000000000000000000008d31e04df08efbcaa4d92dd1e3af2ec7dd217d330000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3947,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000afabc4dafdf690d69bb02a55678d2e1b8b3feedf000000000000000000000000afabc4dafdf690d69bb02a55678d2e1b8b3feedf000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3952,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6ef1ad881c35290dd663ad91165876488abf96c000000000000000000000000c6ef1ad881c35290dd663ad91165876488abf96c00000000000000000000000000000000000000000000000000140e7ad104673600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3953,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000000ac60b8fd10e8fee113676ac25532879b2b5de400000000000000000000000000ac60b8fd10e8fee113676ac25532879b2b5de400000000000000000000000000000000000000000000000000179886821ef82600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3954,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000035e70d60d16352a8cbecc3fdac6d1347579a0de200000000000000000000000035e70d60d16352a8cbecc3fdac6d1347579a0de2000000000000000000000000000000000000000000000000001ee3fc16c639e300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3955,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b43310714f0eaf3ef00f59d1cb960b9f0a2864f2000000000000000000000000b43310714f0eaf3ef00f59d1cb960b9f0a2864f2000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3956,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f925a8e3707414ecc334719d34663738b1e8b3fe000000000000000000000000f925a8e3707414ecc334719d34663738b1e8b3fe00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3957,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0113b17a290b7e6275c1140dc2c76c785a662f1000000000000000000000000c0113b17a290b7e6275c1140dc2c76c785a662f1000000000000000000000000000000000000000000000000001f4dbe12c4260000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3958,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e7acb53b483cdd9ddadbe94458665d3dc5050e73000000000000000000000000e7acb53b483cdd9ddadbe94458665d3dc5050e73000000000000000000000000000000000000000000000000022f372fb5da7fb500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3959,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000206403bc57fe7d0b68e81d4bfdddc67bb0567b70000000000000000000000000206403bc57fe7d0b68e81d4bfdddc67bb0567b7000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3960,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000024a26a581ec9018419c0f1f4a096f1862dd70dc000000000000000000000000024a26a581ec9018419c0f1f4a096f1862dd70dc000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3961,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e0bdfe8fb79376bd51a824d8a7d1438981a9a8fa000000000000000000000000e0bdfe8fb79376bd51a824d8a7d1438981a9a8fa00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3962,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9122d0f8ca7811a7a88a36b614ea619bd21622f000000000000000000000000c9122d0f8ca7811a7a88a36b614ea619bd21622f00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3963,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000af4807d083287f205d897e6d00c6fde1bf0a241a000000000000000000000000af4807d083287f205d897e6d00c6fde1bf0a241a000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3964,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f962a4b2692783babab48e4dae6e874dd9f491f1000000000000000000000000f962a4b2692783babab48e4dae6e874dd9f491f100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3965,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009c1f605b0f4433ebe2670df134c561798caf140c0000000000000000000000009c1f605b0f4433ebe2670df134c561798caf140c00000000000000000000000000000000000000000000000001565ab0e181e9c100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3966,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cdc8e4560cf8ab71713eeaa923bb8dd03bb0259a000000000000000000000000cdc8e4560cf8ab71713eeaa923bb8dd03bb0259a000000000000000000000000000000000000000000000000009fa666e34e120700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3968,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000059dc6b5e1fd34abc2f472960f3519d12a8afa82d00000000000000000000000059dc6b5e1fd34abc2f472960f3519d12a8afa82d000000000000000000000000000000000000000000000000007d5824fc59636000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3969,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de64ea282b06ae636263a28ec305bda1d45d6440000000000000000000000000de64ea282b06ae636263a28ec305bda1d45d644000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3970,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007eb1e94d2aa01d39b7c238ec00e51608ff7ef7c70000000000000000000000007eb1e94d2aa01d39b7c238ec00e51608ff7ef7c70000000000000000000000000000000000000000000000000079b7b86b2a203800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3971,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000002212f6a413793df232c3dfd8e38bb9acd95097a80000000000000000000000002212f6a413793df232c3dfd8e38bb9acd95097a8000000000000000000000000000000000000000000000000000000000096786e00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3972,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000077e88d310614957a5ff962f0a24390da69f906a000000000000000000000000077e88d310614957a5ff962f0a24390da69f906a000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3974,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000045bf2f411439cec318b9593fd4e7c7aac78756e000000000000000000000000045bf2f411439cec318b9593fd4e7c7aac78756e000000000000000000000000000000000000000000000000000e7bccdc1399a800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3975,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009539e2ed84961b56c6bb275a3e2999e4bfa0a25d0000000000000000000000009539e2ed84961b56c6bb275a3e2999e4bfa0a25d000000000000000000000000000000000000000000000000000da76e9a6e16fa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3976,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b760b50c921847aa9a5a47f9903a6600b7995f73000000000000000000000000b760b50c921847aa9a5a47f9903a6600b7995f7300000000000000000000000000000000000000000000000000127398a688d3c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3977,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b30367238ac1da91b0cf31bb4b0b4efb777488e5000000000000000000000000b30367238ac1da91b0cf31bb4b0b4efb777488e500000000000000000000000000000000000000000000000003782dace9d9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3979,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da906a6ca40f9eb04b83f0194c1bfe7ac50ae19a000000000000000000000000da906a6ca40f9eb04b83f0194c1bfe7ac50ae19a000000000000000000000000000000000000000000000000002bf2abb2fce4d700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3980,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000afe1a3fe7c227d7c0246b50289ea82e99d036c1e000000000000000000000000afe1a3fe7c227d7c0246b50289ea82e99d036c1e000000000000000000000000000000000000000000000000001f8a506ab31b3500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3981,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004421de8bfb150486936a4e8da325ce64862f5ac80000000000000000000000004421de8bfb150486936a4e8da325ce64862f5ac8000000000000000000000000000000000000000000000000015aa3408c7b1d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xbbc1a332792675522743ac484a78c2ece1224e33dda1dfac793563bf18ee4041,2022-03-15 09:48:33.000 UTC,0,true -3983,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000015d9ff71b5ab06626a2ca7fd5aab934323b334ac00000000000000000000000015d9ff71b5ab06626a2ca7fd5aab934323b334ac00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3984,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009ffd03ed5bd3d94806730144bcec2fd673b109cd0000000000000000000000009ffd03ed5bd3d94806730144bcec2fd673b109cd0000000000000000000000000000000000000000000000000018020711cb1e6b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3985,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e69b1f36a3a7044dfcc56e1a21e2ffee6f429d00000000000000000000000000e69b1f36a3a7044dfcc56e1a21e2ffee6f429d0000000000000000000000000000000000000000000000000001011251bc203bd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3987,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d75713b70205d97de79a754853fe944bfd7b6f10000000000000000000000002d75713b70205d97de79a754853fe944bfd7b6f1000000000000000000000000000000000000000000000000009e3f0dcc50f05700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3990,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f0737564e414efd5c436970014960245f4490bcc000000000000000000000000f0737564e414efd5c436970014960245f4490bcc00000000000000000000000000000000000000000000000000c434b7c0eafdff00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3991,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009320563d7619bfc9230f5ac0aec7401c16e3acad0000000000000000000000009320563d7619bfc9230f5ac0aec7401c16e3acad000000000000000000000000000000000000000000000000003072157ef55b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf3d12db8997aed8edfa089e7ad9f7501590f4a17b62e4f7c14b779b511cbe196,2022-03-15 09:28:59.000 UTC,0,true -3992,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007a6c1373768e81328372bad188173bf2da5214f90000000000000000000000007a6c1373768e81328372bad188173bf2da5214f900000000000000000000000000000000000000000000000001046d57ddaeae6a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x678d1b4e615ba482e406bf763cb5de43fe75f7640d5171e682d8de97e8a9ef91,2022-03-15 09:52:14.000 UTC,0,true -3993,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005f7aea0293d5b9b68d119582636315df69513c9a0000000000000000000000005f7aea0293d5b9b68d119582636315df69513c9a0000000000000000000000000000000000000000000000000023bf2ef964c7a800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -3994,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b347957d6d017f8783a14abd017065d92cf739e8000000000000000000000000b347957d6d017f8783a14abd017065d92cf739e8000000000000000000000000000000000000000000000000010ae192271ffa3000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x59c2dd02e934c297322d2d92d4eb63388d783464e0c7903e1d3fe18d4c7531b1,2022-03-15 10:01:33.000 UTC,0,true -3997,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000208693c01c3d711fd41b1b1c183ef6b7747cec37000000000000000000000000208693c01c3d711fd41b1b1c183ef6b7747cec370000000000000000000000000000000000000000000000000000000000644c2500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -3999,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d11494a6d9c10a28edd722eb9f5d4492a321799c000000000000000000000000d11494a6d9c10a28edd722eb9f5d4492a321799c0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4000,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001d16ce08f15108d9214eece309f90c119749d29a0000000000000000000000001d16ce08f15108d9214eece309f90c119749d29a000000000000000000000000000000000000000000000000027f7d0bdb92000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4004,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094a6ceb8c80b560f28c9048d40b994ea778c453f00000000000000000000000094a6ceb8c80b560f28c9048d40b994ea778c453f0000000000000000000000000000000000000000000000000055e76776d5623e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4005,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ec6da4426f0ad6982fdd9b26b5816be8dc077f0a000000000000000000000000ec6da4426f0ad6982fdd9b26b5816be8dc077f0a000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4006,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d688982b60b26d86fcd726c7277b903dc68a4150000000000000000000000005d688982b60b26d86fcd726c7277b903dc68a4150000000000000000000000000000000000000000000000000049afa6dbb9f16400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4007,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fd749d32f727122ead72a9de788165bc51950083000000000000000000000000fd749d32f727122ead72a9de788165bc519500830000000000000000000000000000000000000000000000000065788b7685220000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4008,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b161b3e4b117505cd7252c726f5ce431a33ca2b4000000000000000000000000b161b3e4b117505cd7252c726f5ce431a33ca2b4000000000000000000000000000000000000000000000000002edbdee0f1da7400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4011,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e2df5f33f06375d396c121ff312eb6166503121b000000000000000000000000e2df5f33f06375d396c121ff312eb6166503121b000000000000000000000000000000000000000000000000009881ac573d5dec00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4012,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006699c7a0592cccb1d60f5abd52dc824b70baa5700000000000000000000000006699c7a0592cccb1d60f5abd52dc824b70baa57000000000000000000000000000000000000000000000000000a181726f4c932600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4013,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a1e5ac5cbbc8ea4e154c571a8412d5f601338a52000000000000000000000000a1e5ac5cbbc8ea4e154c571a8412d5f601338a52000000000000000000000000000000000000000000000000005cbfa95b51238900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4014,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e782bdb152e26d2b3dbe701cd5b427b820e0e7b3000000000000000000000000e782bdb152e26d2b3dbe701cd5b427b820e0e7b3000000000000000000000000000000000000000000000000000b5e3084bd603500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4015,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000095cb87a1c385ed84414c499220056227e98762c000000000000000000000000095cb87a1c385ed84414c499220056227e98762c00000000000000000000000000000000000000000000000000022302502da081800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4016,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000000d07ba7c276533c9061d99830bef0ea5e0f562300000000000000000000000000d07ba7c276533c9061d99830bef0ea5e0f5623000000000000000000000000000000000000000000000000001fec50ad982b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4019,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000011333555f7806f8ea21c55ec933e3151fe3e012600000000000000000000000011333555f7806f8ea21c55ec933e3151fe3e012600000000000000000000000000000000000000000000000000000000118de8b600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4021,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f19e9b808eca47db283de76eed94fbbf3e9fdf96000000000000000000000000f19e9b808eca47db283de76eed94fbbf3e9fdf96000000000000000000000000000000000000000000000000002714711487800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4022,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e874f4c7e12cccae67e55e08a29588e709b6bc20000000000000000000000004e874f4c7e12cccae67e55e08a29588e709b6bc2000000000000000000000000000000000000000000000000005c5edcbc29000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4023,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000006b971d297528f8db06c069c644ae9e6e1d1dae100000000000000000000000006b971d297528f8db06c069c644ae9e6e1d1dae1000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4024,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2c912039ae856874814150f0b51921cb4ff25a9000000000000000000000000d2c912039ae856874814150f0b51921cb4ff25a9000000000000000000000000000000000000000000000000014858f4a079a6d200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4027,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000051ad4751da4f13974a9e18c27f845f6f3276f11d00000000000000000000000051ad4751da4f13974a9e18c27f845f6f3276f11d000000000000000000000000000000000000000000000000001cd7552d8de26000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4029,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004880d1488f8c2aaadb04ff1e742796998b03cc990000000000000000000000004880d1488f8c2aaadb04ff1e742796998b03cc9900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4033,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b2c6ed80cc5075802ccb59c2466ea61e344fbec5000000000000000000000000b2c6ed80cc5075802ccb59c2466ea61e344fbec5000000000000000000000000000000000000000000000000001fb528a311120200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4035,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8aacbfab425fd86e8b8ae0b30745468d32d387a000000000000000000000000b8aacbfab425fd86e8b8ae0b30745468d32d387a000000000000000000000000000000000000000000000000001a063d7436d7c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4036,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f3070e25db6da541f2aa5e1331b2e5a05ffd62d0000000000000000000000006f3070e25db6da541f2aa5e1331b2e5a05ffd62d000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4038,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c88b861f6bc812449574e8640aa975de087f5a8a000000000000000000000000c88b861f6bc812449574e8640aa975de087f5a8a00000000000000000000000000000000000000000000000000a552b49ca2d8c800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4040,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ea98c8218a5e6758f283e51d1516cc52764858e0000000000000000000000006ea98c8218a5e6758f283e51d1516cc52764858e00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4041,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c57e3c4af5b1ac13b2895db009cdd7eaccaecf10000000000000000000000008c57e3c4af5b1ac13b2895db009cdd7eaccaecf1000000000000000000000000000000000000000000000000000d33031544fe0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe8e3726a57dfcc0f69a6ebdcde8f971d3588e051d358e64933c80d3dc41ca825,2022-06-01 07:48:53.000 UTC,0,true -4042,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000012f666cf593b412dc88cb156584198e2f620b8dc00000000000000000000000012f666cf593b412dc88cb156584198e2f620b8dc000000000000000000000000000000000000000000000000007be38dc092442300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4043,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000090cb71ca70d3bbd831766fa526242715c2a9656300000000000000000000000090cb71ca70d3bbd831766fa526242715c2a96563000000000000000000000000000000000000000000000000001e05f83cd5ea0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4044,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e5a471e1f75ba6ad49a58bbb8ce4dabbb2c95240000000000000000000000008e5a471e1f75ba6ad49a58bbb8ce4dabbb2c952400000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4045,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e5a471e1f75ba6ad49a58bbb8ce4dabbb2c95240000000000000000000000008e5a471e1f75ba6ad49a58bbb8ce4dabbb2c952400000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4048,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045e5d313030be8e40fceb8f03d55300da6a8799e00000000000000000000000045e5d313030be8e40fceb8f03d55300da6a8799e00000000000000000000000000000000000000000000000001536d68579f343700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4050,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc8b4cb035812186ca94af3def98aca690be8a16000000000000000000000000cc8b4cb035812186ca94af3def98aca690be8a160000000000000000000000000000000000000000000000000045c54d8dff0b5f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4051,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000050e37f8b9f344eed54e2de92aaaba4d7bdeb8a5800000000000000000000000050e37f8b9f344eed54e2de92aaaba4d7bdeb8a5800000000000000000000000000000000000000000000000000345e6c85e2a44a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4052,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000ec86b0cfef9a8533197c19663de0b1767fbefe07000000000000000000000000000000000000000000000005218aaa91b104e986,,,1,true -4053,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007438b42d2dc59d089e2527d706563dc9b40b913a0000000000000000000000007438b42d2dc59d089e2527d706563dc9b40b913a00000000000000000000000000000000000000000000000000d162dcc8b2910000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4054,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbbd72bd4e0a8598e2ea0a9ebf9431a3737050f8000000000000000000000000cbbd72bd4e0a8598e2ea0a9ebf9431a3737050f800000000000000000000000000000000000000000000000000d142241e97120000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4055,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da8639ebade510607414fe396e98171280ee86f1000000000000000000000000da8639ebade510607414fe396e98171280ee86f10000000000000000000000000000000000000000000000000091a94863ca800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x95e4a4c00711e65034f0cad47c5aab4af5257e2854f9ac003b21d6ee1be02883,2022-02-26 09:54:24.000 UTC,0,true -4056,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000012345e6fa44eed2df2443c739e65165861e0842000000000000000000000000012345e6fa44eed2df2443c739e65165861e084200000000000000000000000000000000000000000000000001108d56ccb8064b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4057,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca640134967f982dee6754c76b8c386340c8782f000000000000000000000000ca640134967f982dee6754c76b8c386340c8782f000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4058,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9ebccface465d13ec8ce1fa8faa482030661abb000000000000000000000000f9ebccface465d13ec8ce1fa8faa482030661abb000000000000000000000000000000000000000000000000001e3361c485458f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4059,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f4de6e19b30f3efeef30328ea1e46e29db7a56fb000000000000000000000000f4de6e19b30f3efeef30328ea1e46e29db7a56fb000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4060,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fff8524d56408a9d26c22475530a595714448191000000000000000000000000fff8524d56408a9d26c22475530a595714448191000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4061,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b2ade7b54e4ad80b6899bddd7cbc4547cc6263b0000000000000000000000001b2ade7b54e4ad80b6899bddd7cbc4547cc6263b00000000000000000000000000000000000000000000000000a78db0835c249000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4062,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a611b1251096d59846765297e8af43e74be3c160000000000000000000000002a611b1251096d59846765297e8af43e74be3c16000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4063,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8a2e41ee85551d0afab35373290ed670ab2e191000000000000000000000000e8a2e41ee85551d0afab35373290ed670ab2e191000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4064,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7a15b1514cce1ac722f2b99428cbaa0f453d56a000000000000000000000000f7a15b1514cce1ac722f2b99428cbaa0f453d56a000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4065,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e139506d198c1d5e6dec533ce9ba9987466488cc000000000000000000000000e139506d198c1d5e6dec533ce9ba9987466488cc000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4066,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000616cc348b0e5cccc5cd9e8900c151c2f6baf3612000000000000000000000000616cc348b0e5cccc5cd9e8900c151c2f6baf361200000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4067,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000acb80c6446f57ebab29983638040859b89590fc2000000000000000000000000acb80c6446f57ebab29983638040859b89590fc2000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4068,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000023d5a1d24fef3fe084717babe3c24ce82b4844a400000000000000000000000023d5a1d24fef3fe084717babe3c24ce82b4844a4000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4069,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000046dcfb1655036313dac622de7d05337e235a9cf300000000000000000000000046dcfb1655036313dac622de7d05337e235a9cf3000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4070,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000797f0cb60dcfa9a6a6d9cc8f576d763c9407f5c5000000000000000000000000797f0cb60dcfa9a6a6d9cc8f576d763c9407f5c5000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4071,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000040b2de9d83eb776d414950a4bdee6a9dd981444c00000000000000000000000040b2de9d83eb776d414950a4bdee6a9dd981444c00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4072,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000616cc348b0e5cccc5cd9e8900c151c2f6baf3612000000000000000000000000616cc348b0e5cccc5cd9e8900c151c2f6baf361200000000000000000000000000000000000000000000000010a741a46278000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4073,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000a8bb2e8898192852a08e52f504aee6e1378d41510000000000000000000000000000000000000000000000007815743d2f0dbb9c,,,1,true -4074,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001bdb54f09b7dbb7a9ac737e91b399e8f5f5eaced0000000000000000000000001bdb54f09b7dbb7a9ac737e91b399e8f5f5eaced000000000000000000000000000000000000000000000000009d06b588ad83a700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4075,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be28ff6bf1adf9aa3084873e0aa20838b1910c40000000000000000000000000be28ff6bf1adf9aa3084873e0aa20838b1910c40000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4076,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000088c0d341a415448a117b7b4723f729a5b9d734a000000000000000000000000088c0d341a415448a117b7b4723f729a5b9d734a0000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4078,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0d9cf48ffee0a6bdc49954b5e77058cdafb9532000000000000000000000000b0d9cf48ffee0a6bdc49954b5e77058cdafb9532000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4079,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f295da57176a11218f24dd4d95014a89345444f0000000000000000000000006f295da57176a11218f24dd4d95014a89345444f000000000000000000000000000000000000000000000000009efcf7a1c4715e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4080,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a1a5d51e81a588f3f65a449fc6c39aa22d39b5b0000000000000000000000004a1a5d51e81a588f3f65a449fc6c39aa22d39b5b000000000000000000000000000000000000000000000000015758987517449400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4081,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000990e66466826bc07c5c148c5085e654a2d7a8c23000000000000000000000000990e66466826bc07c5c148c5085e654a2d7a8c2300000000000000000000000000000000000000000000000000386d0130e16ece00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4082,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b686dcf9d959ebc90131f1b9e5aed58b60c83a14000000000000000000000000b686dcf9d959ebc90131f1b9e5aed58b60c83a1400000000000000000000000000000000000000000000000000a5b5d9d828cb5d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4083,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000945728797887fdebc2d2df277b5b506a43d6435d000000000000000000000000945728797887fdebc2d2df277b5b506a43d6435d000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4084,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b95b839bdd5851a8e1655f916743b8229fe40131000000000000000000000000b95b839bdd5851a8e1655f916743b8229fe4013100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4085,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006b8abbada1f108e86d04f412b9320d8cfea648170000000000000000000000006b8abbada1f108e86d04f412b9320d8cfea64817000000000000000000000000000000000000000000000000004c6222d6abc00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4086,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000531c64cc8796d85e79f96a4507652f67a75bbc02000000000000000000000000531c64cc8796d85e79f96a4507652f67a75bbc02000000000000000000000000000000000000000000000000004c2e05f02afd7e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4087,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a49571f870108da21bd55b6b9c092a318f316370000000000000000000000005a49571f870108da21bd55b6b9c092a318f316370000000000000000000000000000000000000000000000000020c7e562ae758b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4088,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7b338817049f5126c820b6097ff177ea8aa839c000000000000000000000000f7b338817049f5126c820b6097ff177ea8aa839c000000000000000000000000000000000000000000000000031234e30d6ce3bf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4090,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000e83906d6c19939dcc3ffcc317556d940c87847ec000000000000000000000000e83906d6c19939dcc3ffcc317556d940c87847ec0000000000000000000000000000000000000000000000008ac7230489e8000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4092,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000006b4c4b4e038f7348812f649136c189ffb75b4cd20000000000000000000000006b4c4b4e038f7348812f649136c189ffb75b4cd2000000000000000000000000000000000000000000000001ef5b6f00001e8bff00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4093,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de7f0e2128a1c95b63f6bf48825788a7090bfdb6000000000000000000000000de7f0e2128a1c95b63f6bf48825788a7090bfdb6000000000000000000000000000000000000000000000000006b243f479cca0200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4094,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000000f9987b3352802ad6934402da1a215b1ecef13000000000000000000000000000f9987b3352802ad6934402da1a215b1ecef130000000000000000000000000000000000000000000000000043154b0d733b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4095,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000044b5f2e81bba7b496d91dfbba1487811ed8821eb00000000000000000000000044b5f2e81bba7b496d91dfbba1487811ed8821eb0000000000000000000000000000000000000000000000000024bcb0d03d222000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4096,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000a6f55078b4651ca9330d8c7b4e5503e70b0b1520000000000000000000000000a6f55078b4651ca9330d8c7b4e5503e70b0b15200000000000000000000000000000000000000000000000008ac7230489e8000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4097,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000009f914156f4ef42ae375e77270dc452e9b364db4b0000000000000000000000009f914156f4ef42ae375e77270dc452e9b364db4b000000000000000000000000000000000000000000000000000000000064700800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4098,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000e83906d6c19939dcc3ffcc317556d940c87847ec0000000000000000000000000000000000000000000000000d0820cad21264aa,,,1,true -4099,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000077d25848b2396250df5860ae566f7c341d81efac00000000000000000000000077d25848b2396250df5860ae566f7c341d81efac000000000000000000000000000000000000000000000000009f038e93808b6600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x4082c93ffd4d54d96b3a421eaab46b4dab06e9b445856d527fb2d5d77e24520b,2022-02-26 09:42:37.000 UTC,0,true -4100,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9bfcdbf0bab01807bb3908f4abef78013d52042000000000000000000000000e9bfcdbf0bab01807bb3908f4abef78013d5204200000000000000000000000000000000000000000000000001565638bba4cf1d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4101,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e816691000000000000000000000000dc5c7e9b97149e5d5b9c22f73c5eee23d80c9d4f000000000000000000000000dc5c7e9b97149e5d5b9c22f73c5eee23d80c9d4f00000000000000000000000000000000000000000000000000d529ae9e86000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4102,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008ca3e96fa7fb225776b3bb8140483b7eb4c9233f0000000000000000000000008ca3e96fa7fb225776b3bb8140483b7eb4c9233f000000000000000000000000000000000000000000000000001e612458737c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4104,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c3a0a3dd9d954ede6ba93bfcd0c9e70b92e0b266000000000000000000000000c3a0a3dd9d954ede6ba93bfcd0c9e70b92e0b266000000000000000000000000000000000000000000000000001db18086bb073700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4105,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e816691000000000000000000000000c7d2c67bc38b0e8b15b632c19ef629022fd56543000000000000000000000000c7d2c67bc38b0e8b15b632c19ef629022fd5654300000000000000000000000000000000000000000000000098a7d9b8314c000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xcb8da5b58d3e2723fcb47978eff796c109ec2b176491d6bf43569b05bc20fa73,2022-02-05 10:33:06.000 UTC,0,true -4107,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000865437fd0e361e6482876a5b46a0128f36962706000000000000000000000000865437fd0e361e6482876a5b46a0128f3696270600000000000000000000000000000000000000000000000000128da487ff6f3d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4109,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000059fafea537e14c7fdfa88eefc5e364c1a51dd64100000000000000000000000059fafea537e14c7fdfa88eefc5e364c1a51dd6410000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4110,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ce364bae6274f1b14bfadef0f88e82be96e47814000000000000000000000000ce364bae6274f1b14bfadef0f88e82be96e47814000000000000000000000000000000000000000000000000015dc1f9cec42f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4111,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000069f1e4b906e30755c8a0d77399dc81c4346de96f00000000000000000000000069f1e4b906e30755c8a0d77399dc81c4346de96f0000000000000000000000000000000000000000000000000010a9684080034e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4113,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cb351047ea888746a827fb0d5645430e2016f39b000000000000000000000000cb351047ea888746a827fb0d5645430e2016f39b0000000000000000000000000000000000000000000000000152b5fc046b12fd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4115,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006cced1fb5a36d7d8eeab74b893913ebfb2b4c5840000000000000000000000006cced1fb5a36d7d8eeab74b893913ebfb2b4c584000000000000000000000000000000000000000000000000005f5ec4877c873100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4116,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000090f923e1484912285d07f7e643599b8ebf945ce000000000000000000000000090f923e1484912285d07f7e643599b8ebf945ce0000000000000000000000000000000000000000000000000033dd5a937d450100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4117,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ff3637c180274682b9d292389dbff866aa0a1f10000000000000000000000002ff3637c180274682b9d292389dbff866aa0a1f1000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4118,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000002422d5d8ee568903f42f2a8a887565970569c1cc0000000000000000000000002422d5d8ee568903f42f2a8a887565970569c1cc00000000000000000000000000000000000000000000000000000000ae7cdf8200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4119,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004cdc20567a5783ac84c1a18655a312b4be2625c00000000000000000000000004cdc20567a5783ac84c1a18655a312b4be2625c00000000000000000000000000000000000000000000000002c68af0bb14000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4120,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000235f5de73d5194e3f0f409639eb5e00662059da0000000000000000000000000235f5de73d5194e3f0f409639eb5e00662059da0000000000000000000000000000000000000000000000000015035c07b3a1bc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4121,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002331e097c09c9d8cbc7c75ad35d71368aebfb5ff0000000000000000000000002331e097c09c9d8cbc7c75ad35d71368aebfb5ff000000000000000000000000000000000000000000000000003786d53fba932c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4122,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099a2114c99a6e927c9206f30f66e065f5060754500000000000000000000000099a2114c99a6e927c9206f30f66e065f506075450000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4123,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c04a91219d7d3c3a59c4b0aedff0ff12953e8dd0000000000000000000000002c04a91219d7d3c3a59c4b0aedff0ff12953e8dd00000000000000000000000000000000000000000000000000878a2202891d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4125,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006540d7f11983c01a2e656b944cb0172db311963d0000000000000000000000006540d7f11983c01a2e656b944cb0172db311963d000000000000000000000000000000000000000000000000008cfeb44c7ae68100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4126,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000557007505b53a399a59a93509673fdc5a3dc4540000000000000000000000000557007505b53a399a59a93509673fdc5a3dc45400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4127,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f5411d1da0774fe0f888da5d144faced85a9dc60000000000000000000000008f5411d1da0774fe0f888da5d144faced85a9dc6000000000000000000000000000000000000000000000000005ffaa7d970248000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4128,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000005d55ee935d1aad8cace20528c63b26bc6417b6ce0000000000000000000000005d55ee935d1aad8cace20528c63b26bc6417b6ce000000000000000000000000000000000000000000000000000000000605234000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4129,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b02a522eccc2494f5c2efbc56dba4eace5ba7ff0000000000000000000000002b02a522eccc2494f5c2efbc56dba4eace5ba7ff00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4130,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c5de1beff4c2b8f959c4b1859bc490c4216d3d29000000000000000000000000c5de1beff4c2b8f959c4b1859bc490c4216d3d290000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4131,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005466488073d3dc5a70c885fa41918e654f5027ab0000000000000000000000005466488073d3dc5a70c885fa41918e654f5027ab0000000000000000000000000000000000000000000000000010d13fde21ddfc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4132,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000787f640ca8b506e9ed61be2085e95fff78bf5bd3000000000000000000000000787f640ca8b506e9ed61be2085e95fff78bf5bd3000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4133,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005830db927c7edfff6a095f65f13ab5009011cbc80000000000000000000000005830db927c7edfff6a095f65f13ab5009011cbc8000000000000000000000000000000000000000000000000014236b9afe4b1e900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4134,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e0a755e8414806e06090e1f7859ab1379c7ff494000000000000000000000000e0a755e8414806e06090e1f7859ab1379c7ff4940000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4135,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5690d11ac1b6133dbb482973de8c712a43c8a75000000000000000000000000e5690d11ac1b6133dbb482973de8c712a43c8a75000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4136,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002481e59a934369ce3c86f019b2bd845dd478158e0000000000000000000000002481e59a934369ce3c86f019b2bd845dd478158e00000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4137,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000e8a29e984681002725d547ee8103695283d2e629000000000000000000000000e8a29e984681002725d547ee8103695283d2e62900000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4138,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000018e4a65a844a501826e4e9bf24590ba38b33389300000000000000000000000018e4a65a844a501826e4e9bf24590ba38b333893000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4139,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004165114102bfeb40285253581f6b703dbd20a9070000000000000000000000004165114102bfeb40285253581f6b703dbd20a907000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4140,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000031b33586364621b39da91fa84f18538efa5ad6b700000000000000000000000031b33586364621b39da91fa84f18538efa5ad6b700000000000000000000000000000000000000000000000000405212104eaa2800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4141,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000026fe31cd7807297f98f23fbc4d9c7b8deb0c963000000000000000000000000026fe31cd7807297f98f23fbc4d9c7b8deb0c9630000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4142,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b23a7c2525df85f8be881da6bfa7ee0bb902def8000000000000000000000000b23a7c2525df85f8be881da6bfa7ee0bb902def8000000000000000000000000000000000000000000000000001ae9e67883e78a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x418597cd761779cf93b2719475c0c62d71fde7992bf2c652d0f21ee619006f70,2022-11-01 17:26:11.000 UTC,0,true -4143,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000923c28cc5a05df0664a7ce74915777e5fc500d95000000000000000000000000923c28cc5a05df0664a7ce74915777e5fc500d95000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4144,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000036887cca4fdd9cfffba357de259a7619afd4d28900000000000000000000000036887cca4fdd9cfffba357de259a7619afd4d28900000000000000000000000000000000000000000000000000059b03a6d8ecf700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4145,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f5710774fe287539e825769f5d0c28dd0a4f6b8b000000000000000000000000f5710774fe287539e825769f5d0c28dd0a4f6b8b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4146,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005af10de36b591901e40677492e209c70fcb48edd0000000000000000000000005af10de36b591901e40677492e209c70fcb48edd000000000000000000000000000000000000000000000000000dae8c3fd439aa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4147,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000068e30fdded49610eb349f7c18535a86244a8260100000000000000000000000068e30fdded49610eb349f7c18535a86244a826010000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4148,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000036a78936c69de7f41773b99652c3f6977c0d7a8300000000000000000000000036a78936c69de7f41773b99652c3f6977c0d7a8300000000000000000000000000000000000000000000000001657e44c152a90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4149,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a94025b216890204fd6c882f9399bd23a6591693000000000000000000000000a94025b216890204fd6c882f9399bd23a6591693000000000000000000000000000000000000000000000000008a8b0ebcbfc4e900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5fb0b09bf2dc9b295e1a370c48f9fb07555b7d406b698ccb28a557b03075e96c,2022-11-01 17:38:35.000 UTC,0,true -4150,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000876e96699bb6aad17e05c7adeff46eb969031795000000000000000000000000876e96699bb6aad17e05c7adeff46eb96903179500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4151,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c00bf8daad8273c4cc8463f7333b27e952164268000000000000000000000000c00bf8daad8273c4cc8463f7333b27e952164268000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4152,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007e53d27c6925a8e9dc103d0749adf9d5b63a847f0000000000000000000000007e53d27c6925a8e9dc103d0749adf9d5b63a847f000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4153,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e98281408c920fe8b5182df4bb3feb7324130ed7000000000000000000000000e98281408c920fe8b5182df4bb3feb7324130ed7000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4154,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000857e0e6d38a24c795624415782ed3e937c333c33000000000000000000000000857e0e6d38a24c795624415782ed3e937c333c33000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4155,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000098a764931a82c8c71b278d5fc2ecae00440cf23200000000000000000000000098a764931a82c8c71b278d5fc2ecae00440cf232000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4156,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000063e640294cb0f46859d08ebabcd67fc755c4e14700000000000000000000000063e640294cb0f46859d08ebabcd67fc755c4e147000000000000000000000000000000000000000000000000001aa535d3d0c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4157,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a955d5eeb52232d017bc1793db2db2bb5503a0ef000000000000000000000000a955d5eeb52232d017bc1793db2db2bb5503a0ef000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4158,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000023a719a16b5db2ccfdc4650273ee7e9c42af45bf00000000000000000000000023a719a16b5db2ccfdc4650273ee7e9c42af45bf00000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4159,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008af8154724d919c3dedb05d7dfd6f011f50f48090000000000000000000000008af8154724d919c3dedb05d7dfd6f011f50f4809000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4160,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0ce266aa75ac876f300c13d6f2393c843cd5b3b000000000000000000000000c0ce266aa75ac876f300c13d6f2393c843cd5b3b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4161,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aaa920264671d7fc5ac823e96995edc6bcc5edf3000000000000000000000000aaa920264671d7fc5ac823e96995edc6bcc5edf3000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4162,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002dd55c9d6d939da000a630f31a43ddbee2f410cd0000000000000000000000002dd55c9d6d939da000a630f31a43ddbee2f410cd00000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4163,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000027c041cf26b1b6a092737ae37dca8b121a54867300000000000000000000000027c041cf26b1b6a092737ae37dca8b121a548673000000000000000000000000000000000000000000000000013c0644145d183d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4164,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2dfdcfcb6309546d27423d421874f3827847ebe000000000000000000000000d2dfdcfcb6309546d27423d421874f3827847ebe000000000000000000000000000000000000000000000000003cc1dadfb742c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4165,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7e442ae668656d6dfa51b2e795e701d04442977000000000000000000000000f7e442ae668656d6dfa51b2e795e701d0444297700000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4166,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d300517e3b0f205cb538c4bcb084ed0941650a43000000000000000000000000d300517e3b0f205cb538c4bcb084ed0941650a4300000000000000000000000000000000000000000000000000590b92e3c9f77200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4167,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007709b63f77b79bec56033370f5a30fa19823b68d0000000000000000000000007709b63f77b79bec56033370f5a30fa19823b68d000000000000000000000000000000000000000000000000000b222ba17bcb0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4168,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000faff89949b506dcb0d945779da968d4f996bb68a000000000000000000000000faff89949b506dcb0d945779da968d4f996bb68a000000000000000000000000000000000000000000000000063941678490f39800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4169,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae7b12ea3fd7dfb0e89c48d5bda7c404cdf91ad5000000000000000000000000ae7b12ea3fd7dfb0e89c48d5bda7c404cdf91ad5000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4170,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001f1501185fc7ec323d5163fed7ea6d79556b61590000000000000000000000001f1501185fc7ec323d5163fed7ea6d79556b615900000000000000000000000000000000000000000000000000c821f6fa3c533800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4173,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000006d7dcf2dc399d4d84fcbf312c20aee71e327b4400000000000000000000000006d7dcf2dc399d4d84fcbf312c20aee71e327b44000000000000000000000000000000000000000000000000005d356d2addf58d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4174,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006cacd0aeade45ead6badae6bd7830cc65889fca90000000000000000000000006cacd0aeade45ead6badae6bd7830cc65889fca900000000000000000000000000000000000000000000000000cb381eb01b0bc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4175,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d70a0b9e5f1717d2bb09a4aacea03fe4630133e9000000000000000000000000d70a0b9e5f1717d2bb09a4aacea03fe4630133e900000000000000000000000000000000000000000000000000097c9c9a20da4f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4176,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c596df4b9eb215bb3057f7241f7997d04332cd12000000000000000000000000c596df4b9eb215bb3057f7241f7997d04332cd12000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4178,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000026b400eb576a693c77fa2753b540db4218c0412a00000000000000000000000026b400eb576a693c77fa2753b540db4218c0412a00000000000000000000000000000000000000000000000000200fb9e97f531500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4179,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c596df4b9eb215bb3057f7241f7997d04332cd12000000000000000000000000c596df4b9eb215bb3057f7241f7997d04332cd12000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4180,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c596df4b9eb215bb3057f7241f7997d04332cd12000000000000000000000000c596df4b9eb215bb3057f7241f7997d04332cd12000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4181,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f196de1269c81c5c3f8fe0e8836b6f1a54eeac9a000000000000000000000000f196de1269c81c5c3f8fe0e8836b6f1a54eeac9a000000000000000000000000000000000000000000000000012aa896ccf5ebe300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4182,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e816691000000000000000000000000d884587e95aa4cf73eca390abeab64881826df5d000000000000000000000000d884587e95aa4cf73eca390abeab64881826df5d0000000000000000000000000000000000000000000000000a271178207ab74c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4183,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc6657a6e3ee8ec7004dadd99a7a030b975556f8000000000000000000000000dc6657a6e3ee8ec7004dadd99a7a030b975556f80000000000000000000000000000000000000000000000000003fcb22a77bb4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4184,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1cebd3e2e2317b420bbf1808eabda450b20225c000000000000000000000000c1cebd3e2e2317b420bbf1808eabda450b20225c0000000000000000000000000000000000000000000000000020666e25abb17b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4186,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e81669100000000000000000000000088b1950ea550d2425d47ade6c74b427343ce181000000000000000000000000088b1950ea550d2425d47ade6c74b427343ce1810000000000000000000000000000000000000000000000000009d07aa7312800000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4187,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd4fe8beefdabf942c9c3a4c3911991d4391add7000000000000000000000000bd4fe8beefdabf942c9c3a4c3911991d4391add7000000000000000000000000000000000000000000000000011c26f76d8a3bd800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4189,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000665551f558999ee17e09bfef3b678c6f6d399fdf000000000000000000000000665551f558999ee17e09bfef3b678c6f6d399fdf0000000000000000000000000000000000000000000000000064c58e646da20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4190,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fba1905f6d569a1c2d61d1b1fdecc7951aab37bf000000000000000000000000fba1905f6d569a1c2d61d1b1fdecc7951aab37bf00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4191,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b9d2ee9ea9ab887b00aef85156f504ba1699ef5f000000000000000000000000b9d2ee9ea9ab887b00aef85156f504ba1699ef5f00000000000000000000000000000000000000000000000001537c55c9c214bd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4192,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000052a1ee866213e20123d52a89d03b9aa89315460d00000000000000000000000052a1ee866213e20123d52a89d03b9aa89315460d000000000000000000000000000000000000000000000000001ef948416ddc0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4193,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000002fd20abab2ad403ce4246b82e9f078ec9e23979b0000000000000000000000002fd20abab2ad403ce4246b82e9f078ec9e23979b0000000000000000000000000000000000000000000000000000000001f4b38100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4194,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000057b724f412bd00fde73c6113d8ec0ac1b3d79e9700000000000000000000000057b724f412bd00fde73c6113d8ec0ac1b3d79e9700000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4195,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1cf787e28e15423139045047e17cfb17142c5d0000000000000000000000000f1cf787e28e15423139045047e17cfb17142c5d000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4196,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f64ed0d305c8821e3f9d93e0fcec41e3eba9c013000000000000000000000000f64ed0d305c8821e3f9d93e0fcec41e3eba9c0130000000000000000000000000000000000000000000000000060b2b18eedb38300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4197,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d1a05cf8f23e2f6f9b0849c623a8437c410d2df0000000000000000000000005d1a05cf8f23e2f6f9b0849c623a8437c410d2df000000000000000000000000000000000000000000000000003520fef4d449c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4198,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071803170c1a0298c0ab62fcb540ae769949e495800000000000000000000000071803170c1a0298c0ab62fcb540ae769949e495800000000000000000000000000000000000000000000000000854f0f865f180000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4201,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008b79ae7d5a9417d83cca3bf7a08a2a1e36600ec10000000000000000000000008b79ae7d5a9417d83cca3bf7a08a2a1e36600ec1000000000000000000000000000000000000000000000000001bc0895a772d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4202,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c046dacf5d6068585eb84720fb89fe6c69e37c20000000000000000000000002c046dacf5d6068585eb84720fb89fe6c69e37c2000000000000000000000000000000000000000000000000009ea8dfa325123f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4203,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000057803326193f31bb7b45e5a7a6760476c8e199cb00000000000000000000000057803326193f31bb7b45e5a7a6760476c8e199cb0000000000000000000000000000000000000000000000000058d15e1762800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4204,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9c7b0c3cbab74892e22054dae909adf05e16e85000000000000000000000000c9c7b0c3cbab74892e22054dae909adf05e16e8500000000000000000000000000000000000000000000000000000002540be40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4205,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000005c9038b998debec6f7545925850c8ed1d55d89410000000000000000000000005c9038b998debec6f7545925850c8ed1d55d89410000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4206,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000639e482f52d9f8655e2fd4b3b2244c5ca6eba81c000000000000000000000000639e482f52d9f8655e2fd4b3b2244c5ca6eba81c0000000000000000000000000000000000000000000000000058a628267473e500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4207,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c8fec39aa6e80575bafe7e7b9a8b2e15762a7175000000000000000000000000c8fec39aa6e80575bafe7e7b9a8b2e15762a7175000000000000000000000000000000000000000000000000014df48080e3000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4208,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cb775d1882cd4b4a86b1361e430b5640c9149888000000000000000000000000cb775d1882cd4b4a86b1361e430b5640c91498880000000000000000000000000000000000000000000000000142961e719b000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4209,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000053db3491c03160d722f039f8361b16e9fcc1765800000000000000000000000053db3491c03160d722f039f8361b16e9fcc176580000000000000000000000000000000000000000000000000006fae9b03d39bb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4210,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e0a491c43221e065b182659655920fe2fde3c57e000000000000000000000000e0a491c43221e065b182659655920fe2fde3c57e00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4211,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000015bb7a84eb873d5ea59013187e2f488b4955f7f600000000000000000000000015bb7a84eb873d5ea59013187e2f488b4955f7f6000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4212,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000947acb351394674cc17011c6c662d06ba2a06eee000000000000000000000000947acb351394674cc17011c6c662d06ba2a06eee000000000000000000000000000000000000000000000000003eededd74af18400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4214,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a984cf31de92eb079617338c288265120a56af0c000000000000000000000000a984cf31de92eb079617338c288265120a56af0c00000000000000000000000000000000000000000000000005d1f6ae9bcf1d4800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4215,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d682350bfa1e1db407d75e30e9c749dc02ddd110000000000000000000000008d682350bfa1e1db407d75e30e9c749dc02ddd11000000000000000000000000000000000000000000000000003351106247386e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4216,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fd64b96f5e9a68abbd0cb3d11106c71c3d6abf12000000000000000000000000fd64b96f5e9a68abbd0cb3d11106c71c3d6abf120000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4217,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000015bb7a84eb873d5ea59013187e2f488b4955f7f600000000000000000000000015bb7a84eb873d5ea59013187e2f488b4955f7f6000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4218,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000391181a69c0e69fad0c4c961c6791b3d5b2d0f6a000000000000000000000000391181a69c0e69fad0c4c961c6791b3d5b2d0f6a0000000000000000000000000000000000000000000000000000000003e9183500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4219,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000015bb7a84eb873d5ea59013187e2f488b4955f7f600000000000000000000000015bb7a84eb873d5ea59013187e2f488b4955f7f600000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4220,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b06674d798d4d8c8eab9bf7f1ef2d94da5c19640000000000000000000000001b06674d798d4d8c8eab9bf7f1ef2d94da5c1964000000000000000000000000000000000000000000000000006a0d591df4b9ed00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4221,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000254fe50f65ce3bc5221ee251226e7f78631cd684000000000000000000000000254fe50f65ce3bc5221ee251226e7f78631cd684000000000000000000000000000000000000000000000000002ada524f275a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4222,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000093f09282490c9b71c65e559c54be76c8d70a1e3f00000000000000000000000093f09282490c9b71c65e559c54be76c8d70a1e3f00000000000000000000000000000000000000000000000002c05a9c33a2b10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4223,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000003e05ea1732de84ce5122f4bafc2def475176c9200000000000000000000000003e05ea1732de84ce5122f4bafc2def475176c9200000000000000000000000000000000000000000000000000000000005dd48ec00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4224,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b692fe3764a3c7400a7c27732dbc1b0c6f0d07b0000000000000000000000001b692fe3764a3c7400a7c27732dbc1b0c6f0d07b00000000000000000000000000000000000000000000000000a2654c9babb48900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4225,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000093d154116d1d9bb5080e9f0e919d71e2690ab8a200000000000000000000000093d154116d1d9bb5080e9f0e919d71e2690ab8a200000000000000000000000000000000000000000000000000a36d5a7341990000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4226,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006103169e4ebda70d28a8dc6fa8eced2f6c9b83000000000000000000000000006103169e4ebda70d28a8dc6fa8eced2f6c9b830000000000000000000000000000000000000000000000000000001b48eb57e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4228,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000526fa515c11251ab665040710e2e118ccfa04031000000000000000000000000526fa515c11251ab665040710e2e118ccfa0403100000000000000000000000000000000000000000000000005868377ee1c699d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4229,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a27fb641b4e2aa9ab98f5620ab6ce3de1aa7b870000000000000000000000000a27fb641b4e2aa9ab98f5620ab6ce3de1aa7b8700000000000000000000000000000000000000000000000001475c17bdfd70dd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4230,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000faed754f9108cd26d467e9752f4e30bb49cf4180000000000000000000000000faed754f9108cd26d467e9752f4e30bb49cf418000000000000000000000000000000000000000000000000001a515490262a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4232,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000017c0153066f0dfbdd15b3fab9a70890a13e6282000000000000000000000000017c0153066f0dfbdd15b3fab9a70890a13e62820000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4233,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cb5e81182dcf7040e729ef39c46dffd62e30ea92000000000000000000000000cb5e81182dcf7040e729ef39c46dffd62e30ea9200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4234,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009ac6074d198de1a36a9733e5c752196c792458b00000000000000000000000009ac6074d198de1a36a9733e5c752196c792458b0000000000000000000000000000000000000000000000000002b0ed62de6e96100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4236,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000003700b2cb2b79ef5166d54519b0e91bbe58ec69ed0000000000000000000000003700b2cb2b79ef5166d54519b0e91bbe58ec69ed0000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4240,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000190fbeb640480ce706df35c6a6a515543a079b62000000000000000000000000190fbeb640480ce706df35c6a6a515543a079b6200000000000000000000000000000000000000000000000000003691d6afc00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4248,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f90c4ca068955811f6b57b953c552ed73946ab86000000000000000000000000f90c4ca068955811f6b57b953c552ed73946ab8600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4250,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000050a92cf3a378ac7b4921e6a11b110b230fe2005500000000000000000000000050a92cf3a378ac7b4921e6a11b110b230fe2005500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4255,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f76ae976145fb249d51c6bdb4819cfa445f12501000000000000000000000000f76ae976145fb249d51c6bdb4819cfa445f12501000000000000000000000000000000000000000000000000001b86ecb23e030000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4269,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd4fe8beefdabf942c9c3a4c3911991d4391add7000000000000000000000000bd4fe8beefdabf942c9c3a4c3911991d4391add70000000000000000000000000000000000000000000000000077d11bf46a114200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4271,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f90c4ca068955811f6b57b953c552ed73946ab86000000000000000000000000f90c4ca068955811f6b57b953c552ed73946ab8600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4274,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000941be76b1c8a44401d98b59144055d526586f36f000000000000000000000000941be76b1c8a44401d98b59144055d526586f36f0000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4276,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a8672f2b380be795e8ac446d5c4e01648e56abed000000000000000000000000a8672f2b380be795e8ac446d5c4e01648e56abed00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4277,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061166703a196deb1e9cbbce6b8740b370396f36b00000000000000000000000061166703a196deb1e9cbbce6b8740b370396f36b000000000000000000000000000000000000000000000000038fcff4df133e3600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4279,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a305637fe35e193c341b4244218f292fecd0bed0000000000000000000000006a305637fe35e193c341b4244218f292fecd0bed00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4295,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000040ceaf006224a429f8dfeb593b480d34d636bade00000000000000000000000040ceaf006224a429f8dfeb593b480d34d636bade0000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4301,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd90f026b0acd019f52e97ccb0cf634b75e933e7000000000000000000000000dd90f026b0acd019f52e97ccb0cf634b75e933e70000000000000000000000000000000000000000000000000038c10f9205a13100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4325,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000928abfcdbef4acd34fc6196830fe193765ee13dd000000000000000000000000928abfcdbef4acd34fc6196830fe193765ee13dd0000000000000000000000000000000000000000000000000016f76d6e3f03d700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4340,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000009b97b677c70297accab2a91e345c121b51372fd00000000000000000000000009b97b677c70297accab2a91e345c121b51372fd000000000000000000000000000000000000000000000000001116fe33e36f5900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4342,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be1e0184b5812569cbb3bd6dcf95719575b03d87000000000000000000000000be1e0184b5812569cbb3bd6dcf95719575b03d87000000000000000000000000000000000000000000000000001072eba779714800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4345,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e795eb19b7248757dbe1e43fc77b527f51eb4c37000000000000000000000000e795eb19b7248757dbe1e43fc77b527f51eb4c37000000000000000000000000000000000000000000000000001081c60f02b08b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4346,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000016b658270ac50c0063940ed287c401b3df7ccf7000000000000000000000000016b658270ac50c0063940ed287c401b3df7ccf7000000000000000000000000000000000000000000000000001515f192daf056e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4348,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d960344674d5386e7577db411172cfd2a242c600000000000000000000000005d960344674d5386e7577db411172cfd2a242c6000000000000000000000000000000000000000000000000000108a611965039000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4350,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000067920f8552db96b7eca9ea26545811624f4d091a00000000000000000000000067920f8552db96b7eca9ea26545811624f4d091a00000000000000000000000000000000000000000000000000f8b0a10e47000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4351,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000844c6522a9e21ad82fbea22ad68aaf8fd32a5d57000000000000000000000000844c6522a9e21ad82fbea22ad68aaf8fd32a5d5700000000000000000000000000000000000000000000000002a3be74d411c06200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4352,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000292eae73323683763a558ec8c42c69b76f247e37000000000000000000000000292eae73323683763a558ec8c42c69b76f247e370000000000000000000000000000000000000000000000000010aa2831f9448100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4359,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6ef132ede48d791ca94b98cd5f5ecc5e55f181f000000000000000000000000c6ef132ede48d791ca94b98cd5f5ecc5e55f181f0000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4360,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000edf5b6a5194eaa36726fefc8f8c6a4f8e739f54a000000000000000000000000edf5b6a5194eaa36726fefc8f8c6a4f8e739f54a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4362,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004af15e6cef17bd154e1c2b676cfce18fe0811e8e0000000000000000000000004af15e6cef17bd154e1c2b676cfce18fe0811e8e000000000000000000000000000000000000000000000000001118e5646aadf200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4365,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000db743a2f9f47c615bfae18ddc5a51c59a4a70eef000000000000000000000000db743a2f9f47c615bfae18ddc5a51c59a4a70eef000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4369,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000549f890dc98320b1bd7012233178a1bba55a0d7f000000000000000000000000549f890dc98320b1bd7012233178a1bba55a0d7f00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4370,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f25aba378c7bf5f90f47db14b8056ffa762b7221000000000000000000000000f25aba378c7bf5f90f47db14b8056ffa762b7221000000000000000000000000000000000000000000000000002ba9df9248778600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4376,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e341fbf7bbd43e06f4eadab1ad9e41b01b074bdb000000000000000000000000e341fbf7bbd43e06f4eadab1ad9e41b01b074bdb000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4382,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000128bc803a104748db0259c90867fcebfb4877a1d000000000000000000000000128bc803a104748db0259c90867fcebfb4877a1d00000000000000000000000000000000000000000000000000acded07d5c560000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4387,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d58045868c84793d378876d31e17d90124c82e05000000000000000000000000d58045868c84793d378876d31e17d90124c82e0500000000000000000000000000000000000000000000000000406fa757c1760000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4388,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc64f1b4a1d6854b8c014014621b4e579687fb2c000000000000000000000000fc64f1b4a1d6854b8c014014621b4e579687fb2c00000000000000000000000000000000000000000000000000186f478ebd259700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4392,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc132bbcaf8fefd6ed55c05ffa8d1021a222f119000000000000000000000000cc132bbcaf8fefd6ed55c05ffa8d1021a222f1190000000000000000000000000000000000000000000000000061b4a73c15ee2b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4393,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d829e171dd8e86279d89dc9a7f5ad7ffbad5a86a000000000000000000000000d829e171dd8e86279d89dc9a7f5ad7ffbad5a86a000000000000000000000000000000000000000000000000004e50d8cf7e02c600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4397,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007daa0065dd5bcc24d8829ed3c6281b846387d6040000000000000000000000007daa0065dd5bcc24d8829ed3c6281b846387d60400000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4398,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000135cd9223f46b2287d593afceb278224d9a5da2e000000000000000000000000135cd9223f46b2287d593afceb278224d9a5da2e000000000000000000000000000000000000000000000000001907b66e23721500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4399,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf8c84f4fa5861d718271d0a676e53a5d7922c61000000000000000000000000cf8c84f4fa5861d718271d0a676e53a5d7922c6100000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4400,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a01ec139b82e3e04fc4430317b442800b747fc09000000000000000000000000a01ec139b82e3e04fc4430317b442800b747fc0900000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4401,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da01a63a39c5caaad82c18d5640edc74dd08f016000000000000000000000000da01a63a39c5caaad82c18d5640edc74dd08f01600000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4403,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000016a2f972d8b163f56830834a994159c268e5a6d000000000000000000000000016a2f972d8b163f56830834a994159c268e5a6d000000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4404,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c61edc942bb6a5fca34a207d1d08e2caccbb93c0000000000000000000000002c61edc942bb6a5fca34a207d1d08e2caccbb93c000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4411,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000136ba2f844d4a88fba2f961329ee01d8eb217d2b000000000000000000000000136ba2f844d4a88fba2f961329ee01d8eb217d2b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4413,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005346ad8067250f4a579ade87201ff309533640f80000000000000000000000005346ad8067250f4a579ade87201ff309533640f8000000000000000000000000000000000000000000000000001a171a93f43b3600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4421,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a3d37e257919ee3f59f7fcb776510e332e3aebf0000000000000000000000001a3d37e257919ee3f59f7fcb776510e332e3aebf00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4423,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002891d57e0d43d01b1e5e4f0fdbf246ebe6ffecd40000000000000000000000002891d57e0d43d01b1e5e4f0fdbf246ebe6ffecd400000000000000000000000000000000000000000000000000a00128ef49310700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4425,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000811a6fdd51dc16ca90beec8cc1575cf55c55a6f8000000000000000000000000811a6fdd51dc16ca90beec8cc1575cf55c55a6f80000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4428,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e3cbd67b2e89cb57fd3dc852484136ec768dd680000000000000000000000000e3cbd67b2e89cb57fd3dc852484136ec768dd68000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4431,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047e282d7b1737592b034fef7b427cef8f5a820e600000000000000000000000047e282d7b1737592b034fef7b427cef8f5a820e6000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4433,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3e66a4e786fcf397c6c33c3a973a1105363eb40000000000000000000000000a3e66a4e786fcf397c6c33c3a973a1105363eb400000000000000000000000000000000000000000000000000003e871b540c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4437,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d92b8841178d8a314c845da46276097c37c6c76b000000000000000000000000d92b8841178d8a314c845da46276097c37c6c76b00000000000000000000000000000000000000000000000001485aaad7bb8e5100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4438,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d9f6a085af7acb73e01fe334180c4e9ef5532c80000000000000000000000002d9f6a085af7acb73e01fe334180c4e9ef5532c800000000000000000000000000000000000000000000000000336e152e3e65d500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4444,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a93bfb17b9d9edd76539041f563eecf6e0523c9e000000000000000000000000a93bfb17b9d9edd76539041f563eecf6e0523c9e000000000000000000000000000000000000000000000000003c6568f12e800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4449,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f5d8ba12af7681206be37cee36d2fbd4ebff3f40000000000000000000000006f5d8ba12af7681206be37cee36d2fbd4ebff3f4000000000000000000000000000000000000000000000000003b858e468fa14200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4452,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000982fc54604b391a11211543014711f12b843110a000000000000000000000000982fc54604b391a11211543014711f12b843110a0000000000000000000000000000000000000000000000000060a4609196978e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4455,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002587a07278d72481d1d1d768b4e22abee7c4c8250000000000000000000000002587a07278d72481d1d1d768b4e22abee7c4c82500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4456,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aebc6fd1db7c9a882248b1078569b2eb85218363000000000000000000000000aebc6fd1db7c9a882248b1078569b2eb852183630000000000000000000000000000000000000000000000000151970c759ada2600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4457,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000000e1ac9a2272185c546f8e2f7852a3adfdd91f8300000000000000000000000000e1ac9a2272185c546f8e2f7852a3adfdd91f8300000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4459,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000ca8339fb523b86526efa90a4b305e1a75068ac15000000000000000000000000ca8339fb523b86526efa90a4b305e1a75068ac15000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4460,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029a5c9e2226bc78fccecb4f9ef50bbfc6a86c24200000000000000000000000029a5c9e2226bc78fccecb4f9ef50bbfc6a86c2420000000000000000000000000000000000000000000000000151970c759ada2600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4462,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b84604433c16105afb4e33495e7e64c4b71d1824000000000000000000000000b84604433c16105afb4e33495e7e64c4b71d18240000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4463,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b569fb627ca1e0b51b0a405c456328005019053f000000000000000000000000b569fb627ca1e0b51b0a405c456328005019053f00000000000000000000000000000000000000000000000000a650caee92393900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4464,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000009a6d6640555dbb959466d574402da12fa56fe8f00000000000000000000000009a6d6640555dbb959466d574402da12fa56fe8f000000000000000000000000000000000000000000000000013c2feac60a8c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xed03f507528873b7016df194117900bcb9c2c2fab013051bd38ddf956c5b8ba4,2021-12-12 05:27:46.000 UTC,0,true -4465,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000075ea7a4301c676b3ef194f00643e40a6ff5c508400000000000000000000000075ea7a4301c676b3ef194f00643e40a6ff5c508400000000000000000000000000000000000000000000000000a6052714bf6f0100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4466,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f531b9b9cddb5394f3577e34807220e410809093000000000000000000000000f531b9b9cddb5394f3577e34807220e41080909300000000000000000000000000000000000000000000000000edd0d7cea903bf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4469,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004f8ffeed97d56242424b0fabe846fd1627002a600000000000000000000000004f8ffeed97d56242424b0fabe846fd1627002a60000000000000000000000000000000000000000000000000153b0525a28a62300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4470,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c6b63b05696bbe015f28f4315e470a98e7c48f40000000000000000000000008c6b63b05696bbe015f28f4315e470a98e7c48f4000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4471,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000086dac5a07e05a3caadf86c1ad9681bd23ca8221500000000000000000000000086dac5a07e05a3caadf86c1ad9681bd23ca822150000000000000000000000000000000000000000000000000014a8a7dbd9633e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4478,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc7fd26298a95b5a6a305c6330513261a0108597000000000000000000000000cc7fd26298a95b5a6a305c6330513261a0108597000000000000000000000000000000000000000000000000001cb46d7be4c57f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4480,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000255749ce8ab1dd14c09787e7405a15ff17c24459000000000000000000000000255749ce8ab1dd14c09787e7405a15ff17c2445900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4495,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a6e21fbf6cf82dcfc804602c6f9857c24c80c590000000000000000000000001a6e21fbf6cf82dcfc804602c6f9857c24c80c590000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4496,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000466cfe385d25ddc6ef7ffa1fd16d2fd75362146d000000000000000000000000466cfe385d25ddc6ef7ffa1fd16d2fd75362146d00000000000000000000000000000000000000000000000000597e53f5dce96900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4504,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001bb006840ec39d2bc8e9c8766aec6cfc0161c2330000000000000000000000001bb006840ec39d2bc8e9c8766aec6cfc0161c233000000000000000000000000000000000000000000000000003445407c807f6b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xc57c1cbe7ef62f873d452a2a9f430b2e174f2dabf180758b3fe636dd07504ca8,2022-03-12 12:10:48.000 UTC,0,true -4506,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df1c13b1fffa2ac5984516719cbdbfa22240efbb000000000000000000000000df1c13b1fffa2ac5984516719cbdbfa22240efbb000000000000000000000000000000000000000000000000006f96d8ea35f8d000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4509,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b1df9010790002f57090902c78292cc7e7d948a0000000000000000000000002b1df9010790002f57090902c78292cc7e7d948a000000000000000000000000000000000000000000000000025bf6196bd1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4511,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000006f398ce76acc1fce97b7cab0eb2a96ba9230c9b00000000000000000000000000000000000000000000000098a7d9b8314c0000,,,1,true -4515,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003605c9fe039f3bdacbc2003a33b2586f7bfb67000000000000000000000000003605c9fe039f3bdacbc2003a33b2586f7bfb6700000000000000000000000000000000000000000000000000003972878204a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4518,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005f3582b06b6697fd64e791ab7ace882fe66bc8350000000000000000000000005f3582b06b6697fd64e791ab7ace882fe66bc83500000000000000000000000000000000000000000000000002b7ea9f4ac5307e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4520,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000952f28087fd8df38251ea862e300dd8260ad0feb000000000000000000000000952f28087fd8df38251ea862e300dd8260ad0feb0000000000000000000000000000000000000000000000000012d763c766a05100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4521,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043469718666fbf0d76d53d1aa5e8adaa51aa03c500000000000000000000000043469718666fbf0d76d53d1aa5e8adaa51aa03c5000000000000000000000000000000000000000000000000004262dd2c37010000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4523,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f66c88f9c59a78b3b5435838aeb0465a0805c011000000000000000000000000f66c88f9c59a78b3b5435838aeb0465a0805c01100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4525,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1912c7917b6da214a7118d323c3049229d765b3000000000000000000000000f1912c7917b6da214a7118d323c3049229d765b300000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4526,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d317e99e1d2357c6d61568f7e23f95f31eb132d5000000000000000000000000d317e99e1d2357c6d61568f7e23f95f31eb132d5000000000000000000000000000000000000000000000000005d11f25948917e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4527,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005030a9280a75cb91cc70d0bf3b02c14d3b01d3270000000000000000000000005030a9280a75cb91cc70d0bf3b02c14d3b01d32700000000000000000000000000000000000000000000000000422c5410b3d80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4528,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032360705da597f8c77c67e46986818e199f2d44100000000000000000000000032360705da597f8c77c67e46986818e199f2d441000000000000000000000000000000000000000000000000023428a2fc92712300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4529,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000015591129be9019d57fd6439525b8517d616e8c8f00000000000000000000000015591129be9019d57fd6439525b8517d616e8c8f0000000000000000000000000000000000000000000000000155cd19a78f21d700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4530,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b90adc44da6c179c7d2c048d2cffb7c80c1620f9000000000000000000000000b90adc44da6c179c7d2c048d2cffb7c80c1620f900000000000000000000000000000000000000000000000000a5bf634083be5500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4531,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fe75966551cea0792d65d3b72e4a82918d2675f1000000000000000000000000fe75966551cea0792d65d3b72e4a82918d2675f10000000000000000000000000000000000000000000000000000f85b2a300d7400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4532,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c2b60bcb07410427dc1c6a1328c0dea1d7c9baa0000000000000000000000004c2b60bcb07410427dc1c6a1328c0dea1d7c9baa0000000000000000000000000000000000000000000000000001e7c1d2a2fe9b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4533,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d8b8f4ad3e18983e9fe2ca59d03acd8dac9e0000000000000000000000000005d8b8f4ad3e18983e9fe2ca59d03acd8dac9e0000000000000000000000000000000000000000000000000000081b6280f0678bd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4534,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fbfc958e0d464459edaf31beea4ebf6fcb9614e7000000000000000000000000fbfc958e0d464459edaf31beea4ebf6fcb9614e7000000000000000000000000000000000000000000000000000e1d7cbe6e507f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4535,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000514f2c26d7c56c0857dceb5f84fb875d315f7a09000000000000000000000000514f2c26d7c56c0857dceb5f84fb875d315f7a09000000000000000000000000000000000000000000000000001f91b3c2d5df0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4536,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003652f12c39a23dcb0d1e51a98736ec6334f902990000000000000000000000003652f12c39a23dcb0d1e51a98736ec6334f9029900000000000000000000000000000000000000000000000000a5a43afc15541b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4537,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbb30c604b349078f2ee48e4649ee682898d0d6f000000000000000000000000cbb30c604b349078f2ee48e4649ee682898d0d6f0000000000000000000000000000000000000000000000000039b387761ee11700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4538,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045e508aaf9267855e05f93793c9979b0ffc2975000000000000000000000000045e508aaf9267855e05f93793c9979b0ffc2975000000000000000000000000000000000000000000000000000eaa0e2731f687800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4540,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e2658d224b9f1ec2cdeb6400730a57dafbba9ac9000000000000000000000000e2658d224b9f1ec2cdeb6400730a57dafbba9ac900000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4541,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008615a0536bddc38701560a4b577b4b7c505e4f980000000000000000000000008615a0536bddc38701560a4b577b4b7c505e4f9800000000000000000000000000000000000000000000000001551f8750ba84ed00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4542,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000618ae54643d161d19cd2e2249dd5be383cd44a69000000000000000000000000618ae54643d161d19cd2e2249dd5be383cd44a69000000000000000000000000000000000000000000000000010eb0ee0d6f2a4b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4543,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007002f465c7ab3d7433d4b90cb2fac271ae03d34c0000000000000000000000007002f465c7ab3d7433d4b90cb2fac271ae03d34c000000000000000000000000000000000000000000000000010eea438fbffc9600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4544,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008595ec582c6dc4aed52f4550f734be56d59967ce0000000000000000000000008595ec582c6dc4aed52f4550f734be56d59967ce00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4545,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f6e4525899f4dd05e8532bc2afff78313840aeb0000000000000000000000002f6e4525899f4dd05e8532bc2afff78313840aeb000000000000000000000000000000000000000000000000010ddf1fad6e152300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4546,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000075c328b104580b2bd9153e9dd0037742d006690a00000000000000000000000075c328b104580b2bd9153e9dd0037742d006690a00000000000000000000000000000000000000000000000000f8b0a10e47000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4547,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000009c653c6683dcaf67db2980041d116ef48ad91b500000000000000000000000009c653c6683dcaf67db2980041d116ef48ad91b5000000000000000000000000000000000000000000000000010cedb6b12901c600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4548,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b4073b13dab3f671e28e3fbcada9a9c5ffc3fc40000000000000000000000001b4073b13dab3f671e28e3fbcada9a9c5ffc3fc40000000000000000000000000000000000000000000000000154394a8595f7fe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4549,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df1448337af7529a3b2086982e9916c1a0f96c7b000000000000000000000000df1448337af7529a3b2086982e9916c1a0f96c7b00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4550,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007a3f01f0d2bbc0cf1f58a5c40aaf8b95d5cf437a0000000000000000000000007a3f01f0d2bbc0cf1f58a5c40aaf8b95d5cf437a000000000000000000000000000000000000000000000000010c51b85b9a9dea00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4551,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005b7b2da7d40db2e07ce7bacdc10eb88a24829c910000000000000000000000005b7b2da7d40db2e07ce7bacdc10eb88a24829c91000000000000000000000000000000000000000000000000010c51b85b9a9dea00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4552,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003404fad8173217d296883be88c7ff401d12d7a560000000000000000000000003404fad8173217d296883be88c7ff401d12d7a5600000000000000000000000000000000000000000000000000eb3d9deb81370100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4553,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b3618500c58cc7993e42cc05aea9469fa5458acf000000000000000000000000b3618500c58cc7993e42cc05aea9469fa5458acf00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4554,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000340eecc4e7b04a063e31dbf041c5211f7a7fb7b0000000000000000000000000340eecc4e7b04a063e31dbf041c5211f7a7fb7b000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4555,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc4af6320db7e65e0ee251e081deaacaae0920f8000000000000000000000000fc4af6320db7e65e0ee251e081deaacaae0920f8000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4556,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000340eecc4e7b04a063e31dbf041c5211f7a7fb7b0000000000000000000000000340eecc4e7b04a063e31dbf041c5211f7a7fb7b000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4557,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c739d8aafc091735c9996dcb940023eb23528fed000000000000000000000000c739d8aafc091735c9996dcb940023eb23528fed0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4558,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000013293a9b2d51dc0f82a695d8c2809318df57235500000000000000000000000013293a9b2d51dc0f82a695d8c2809318df57235500000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4559,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fca872ffe467c4983d75148f7584f3afd7877927000000000000000000000000fca872ffe467c4983d75148f7584f3afd787792700000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4561,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000f2076030aab9e7f83c30c210e37af594b10497e0000000000000000000000000f2076030aab9e7f83c30c210e37af594b10497e00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4562,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000340eecc4e7b04a063e31dbf041c5211f7a7fb7b0000000000000000000000000340eecc4e7b04a063e31dbf041c5211f7a7fb7b00000000000000000000000000000000000000000000000000000000000004e2000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4563,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d5eeb2692bbb03932d7b645aa65fc4f5261e5c52000000000000000000000000d5eeb2692bbb03932d7b645aa65fc4f5261e5c5200000000000000000000000000000000000000000000000000878ee35577f02e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4564,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7e7c33cd3bf10a7f60b8b539217d2d9ac42e93b000000000000000000000000d7e7c33cd3bf10a7f60b8b539217d2d9ac42e93b000000000000000000000000000000000000000000000000004b718aa0bc3f6000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4565,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055c3a72eff435c46abc1726c7f945050806eabd500000000000000000000000055c3a72eff435c46abc1726c7f945050806eabd500000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4567,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008916fb668334de7548eaaa65f5a9c3c7aaaeda980000000000000000000000008916fb668334de7548eaaa65f5a9c3c7aaaeda98000000000000000000000000000000000000000000000000002fb743c0e0070000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4568,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005cff30cb947670f57631fe03e5e29cb5b0dfa1480000000000000000000000005cff30cb947670f57631fe03e5e29cb5b0dfa14800000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4569,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002828b1cd64ce9cd865f6cb8cc1427c5b05d665160000000000000000000000002828b1cd64ce9cd865f6cb8cc1427c5b05d6651600000000000000000000000000000000000000000000000000453d19ac94a68000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4570,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000033bd157a226ff92e3184a5955938327b4d0785f400000000000000000000000033bd157a226ff92e3184a5955938327b4d0785f400000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4572,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c942a745f881b58891a853d8a41172b30b726967000000000000000000000000c942a745f881b58891a853d8a41172b30b726967000000000000000000000000000000000000000000000000003ac94eecef7c1500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4574,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7676a93a10350518fc2804cd023cf19084920d8000000000000000000000000f7676a93a10350518fc2804cd023cf19084920d800000000000000000000000000000000000000000000000002c19f06e46d490000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4575,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043e4148d51f72f5d01be90632ea4a3bce0834f1700000000000000000000000043e4148d51f72f5d01be90632ea4a3bce0834f170000000000000000000000000000000000000000000000000014f31f314ec1be00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4576,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000063ded784c8da63a79ee47f9a53bcb1bad1d9f3e000000000000000000000000063ded784c8da63a79ee47f9a53bcb1bad1d9f3e000000000000000000000000000000000000000000000000000a0a145a3e5e20700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4577,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3d1d153fd90347c4e48f9611503524e9162598f000000000000000000000000a3d1d153fd90347c4e48f9611503524e9162598f0000000000000000000000000000000000000000000000000235a164dd2b9e8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4578,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c2de88aae74121a05b8ecf066eac4e6ec404a92e000000000000000000000000c2de88aae74121a05b8ecf066eac4e6ec404a92e00000000000000000000000000000000000000000000000000230133f16f603f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4579,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f18ff2dc14ead656227349209119c0cc5079f00e000000000000000000000000f18ff2dc14ead656227349209119c0cc5079f00e0000000000000000000000000000000000000000000000000003e1e44a99dc5f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4580,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b43310714f0eaf3ef00f59d1cb960b9f0a2864f2000000000000000000000000b43310714f0eaf3ef00f59d1cb960b9f0a2864f200000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4581,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d01b7ff2b2544529ee092240d406051756607260000000000000000000000000d01b7ff2b2544529ee092240d40605175660726000000000000000000000000000000000000000000000000009bad5fbccb58db00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4582,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004743ed9e06fe530798654e27db3508fa146836710000000000000000000000004743ed9e06fe530798654e27db3508fa1468367100000000000000000000000000000000000000000000000000a9688a982d930000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4584,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000022014722f748564486414ec1c73c70f6c6484e3d00000000000000000000000022014722f748564486414ec1c73c70f6c6484e3d000000000000000000000000000000000000000000000000001749b0b45fc33500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4586,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a054517dab4695751c5276148a29a245c2163550000000000000000000000000a054517dab4695751c5276148a29a245c2163550000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4587,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000085f5b414aaf84ec70cb54cc84682cfe9e69d3c2900000000000000000000000085f5b414aaf84ec70cb54cc84682cfe9e69d3c29000000000000000000000000000000000000000000000000006379da05b6000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4588,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fa833a5540c3520582dca433013046a3cb1c3603000000000000000000000000fa833a5540c3520582dca433013046a3cb1c360300000000000000000000000000000000000000000000000000950bff17947ff500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4589,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000b9bd441e853d180d9749315619fe1c4786f866ad000000000000000000000000b9bd441e853d180d9749315619fe1c4786f866ad00000000000000000000000000000000000000000000000000000000000001f200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4590,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000fd6fa501ec50109c6f0f7d848941df9dae44b4b0000000000000000000000000fd6fa501ec50109c6f0f7d848941df9dae44b4b0000000000000000000000000000000000000000000000000043cc3f67ade4d200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4592,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f4f6cecae5c1292ccc6e7d5cb99f45275fffa771000000000000000000000000f4f6cecae5c1292ccc6e7d5cb99f45275fffa771000000000000000000000000000000000000000000000000005bbb04035f625500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4593,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000511fb72e1b71eedc17f11b79fd262c66fbe1c235000000000000000000000000511fb72e1b71eedc17f11b79fd262c66fbe1c23500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4595,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004f098f3429d43d080ba0c8ec27a1ab7dbcfb85f10000000000000000000000004f098f3429d43d080ba0c8ec27a1ab7dbcfb85f100000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4597,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004f098f3429d43d080ba0c8ec27a1ab7dbcfb85f10000000000000000000000004f098f3429d43d080ba0c8ec27a1ab7dbcfb85f100000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4598,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dce620ed8be234b948bcea5694d543d4f7c5438d000000000000000000000000dce620ed8be234b948bcea5694d543d4f7c5438d000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4599,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005675e8037a4c0e32ba06124313680bdd3393c90f0000000000000000000000005675e8037a4c0e32ba06124313680bdd3393c90f00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4600,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e44fce3fdd9ea80ef3e6242121a76d08dcb31d20000000000000000000000002e44fce3fdd9ea80ef3e6242121a76d08dcb31d2000000000000000000000000000000000000000000000000005e50b7c568840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4601,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000093493ee5a1dc42a1ab6581add73dc2a22fa28cb600000000000000000000000093493ee5a1dc42a1ab6581add73dc2a22fa28cb60000000000000000000000000000000000000000000000000156512561d47e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4602,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e6991fa0ac2e1276f645a84de8629d3bcf5a451b000000000000000000000000e6991fa0ac2e1276f645a84de8629d3bcf5a451b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4603,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004f44f957c6cae5adab9bbdb384e5a9b6175bad3f0000000000000000000000004f44f957c6cae5adab9bbdb384e5a9b6175bad3f00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4604,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000881057ff08da8464d044bb839bd914daff95a4a5000000000000000000000000881057ff08da8464d044bb839bd914daff95a4a500000000000000000000000000000000000000000000000722bdd19b6c075b8600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x810bd9369ed5c762dde5876f844ff6cd0e5f27509168be3d6009900a4df994ca,2022-03-20 08:42:00.000 UTC,0,true -4605,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004f44f957c6cae5adab9bbdb384e5a9b6175bad3f0000000000000000000000004f44f957c6cae5adab9bbdb384e5a9b6175bad3f00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4607,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003b55031d7272324ade1960dcbb916ad6fbbe6ca40000000000000000000000003b55031d7272324ade1960dcbb916ad6fbbe6ca40000000000000000000000000000000000000000000000000155de33a9cfcd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4608,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000028caead6b34e86e9e37c816e5143c1d072a90f3000000000000000000000000028caead6b34e86e9e37c816e5143c1d072a90f3000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4609,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004b436f6d8db824a46524610bbf67463f822376390000000000000000000000004b436f6d8db824a46524610bbf67463f8223763900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4610,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f46da3e42ffa142be596d5bd81d464e99edca3d6000000000000000000000000f46da3e42ffa142be596d5bd81d464e99edca3d600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4611,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2c67be3dbe29ce0273b0e6876a00e1e0f52dcf0000000000000000000000000a2c67be3dbe29ce0273b0e6876a00e1e0f52dcf000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4612,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000188632ee3c4e8c7b3e4a7f1315e1b0e1e8db4f00000000000000000000000000188632ee3c4e8c7b3e4a7f1315e1b0e1e8db4f000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4613,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004bb84c87410baa2836a3b4271c25cce24ba5119b0000000000000000000000004bb84c87410baa2836a3b4271c25cce24ba5119b00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4615,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdd974c9081b38392fc2ea125f933666f0cb25b7000000000000000000000000bdd974c9081b38392fc2ea125f933666f0cb25b700000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4616,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea3803125845d12ea9a1e5f882198d7bb796ace8000000000000000000000000ea3803125845d12ea9a1e5f882198d7bb796ace800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4617,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061365358ff2bcc08cf81f22b37d97ab3d8c9924000000000000000000000000061365358ff2bcc08cf81f22b37d97ab3d8c99240000000000000000000000000000000000000000000000000004a2a1962946af400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4618,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000657359a2a5d4ce8cfbca626974c0583d59b072cc000000000000000000000000657359a2a5d4ce8cfbca626974c0583d59b072cc00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4621,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a9f489a464a5818f4bcea5b02d149eafa8e6c7d0000000000000000000000005a9f489a464a5818f4bcea5b02d149eafa8e6c7d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xdd3844b58cc9690689eb793943820248680041ad57ac66047f723744d50e8b47,2022-02-05 12:03:31.000 UTC,0,true -4622,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ce34e2d460771465ed2632e61fe5c4786c9ab631000000000000000000000000ce34e2d460771465ed2632e61fe5c4786c9ab6310000000000000000000000000000000000000000000000000143fa62d016580a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4624,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df7df9267d415da4f85db9b14c8a7ecb6f093560000000000000000000000000df7df9267d415da4f85db9b14c8a7ecb6f093560000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4625,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006dbfea06f4151be174ed028870bf84256d98fd210000000000000000000000006dbfea06f4151be174ed028870bf84256d98fd210000000000000000000000000000000000000000000000000019de62d821790000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4626,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a6780b375cae098a3bb5c465753e57386d0f7023000000000000000000000000a6780b375cae098a3bb5c465753e57386d0f7023000000000000000000000000000000000000000000000000007fb3ac485c2b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4627,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7c31c0279ebe723922f1a5864d8c8a4a0a2810d000000000000000000000000f7c31c0279ebe723922f1a5864d8c8a4a0a2810d0000000000000000000000000000000000000000000000000016884418270b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4628,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ee7dfb575538c2d33783fdef89dc18de0ffd09e1000000000000000000000000ee7dfb575538c2d33783fdef89dc18de0ffd09e10000000000000000000000000000000000000000000000000016841229ba7e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4629,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff0ed05999292f9c586db005e5992aa7289ac2f1000000000000000000000000ff0ed05999292f9c586db005e5992aa7289ac2f10000000000000000000000000000000000000000000000000016841229ba7e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4630,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004826af4b70b248fd9377615ec4409d92cbe5a9fd0000000000000000000000004826af4b70b248fd9377615ec4409d92cbe5a9fd00000000000000000000000000000000000000000000000000084e1796a07e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4631,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a13b69bb3cd138757f58c59c16eed00b43cc60f0000000000000000000000006a13b69bb3cd138757f58c59c16eed00b43cc60f0000000000000000000000000000000000000000000000000012f8411785d00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4632,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007cac2ad175c5b87be2b45688c9f64b74ddfa2d1b0000000000000000000000007cac2ad175c5b87be2b45688c9f64b74ddfa2d1b000000000000000000000000000000000000000000000000000bdd43cdf8d00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4633,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045026d1eb0212a7cf9ff202f7abd0ac06778597800000000000000000000000045026d1eb0212a7cf9ff202f7abd0ac06778597800000000000000000000000000000000000000000000000000034fbb6ccf09e500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4634,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d0b2b774a915cb4b1ef7fc433dd48fd186e0d251000000000000000000000000d0b2b774a915cb4b1ef7fc433dd48fd186e0d2510000000000000000000000000000000000000000000000000013a17452a0070000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4635,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000073b919fbeb9b767466c254b9c438f00c2ace0ff500000000000000000000000073b919fbeb9b767466c254b9c438f00c2ace0ff50000000000000000000000000000000000000000000000000013a17452a0070000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4636,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea0d1c1b2807613c72ea2b8940674ed599b5d724000000000000000000000000ea0d1c1b2807613c72ea2b8940674ed599b5d72400000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4638,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e80dc71b16c059edf302e1d5b151a537696e03da000000000000000000000000e80dc71b16c059edf302e1d5b151a537696e03da00000000000000000000000000000000000000000000000000066327c7fe069700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4639,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f521d0b62a19d3227e16acc4a8b93ace6f76132e000000000000000000000000f521d0b62a19d3227e16acc4a8b93ace6f76132e000000000000000000000000000000000000000000000000000a0b38dc6ac8f900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4641,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045026d1eb0212a7cf9ff202f7abd0ac06778597800000000000000000000000045026d1eb0212a7cf9ff202f7abd0ac06778597800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4642,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b173e192bde6c29bf42b3777b024df38e56663eb000000000000000000000000b173e192bde6c29bf42b3777b024df38e56663eb00000000000000000000000000000000000000000000000000524886156d2a9800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4643,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f351d019ba2727168b9b53331216a927b87fb95d000000000000000000000000f351d019ba2727168b9b53331216a927b87fb95d000000000000000000000000000000000000000000000000017f373a83613d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4644,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c81fb1989d329ae0ab48fa69494c26bf244cf50b000000000000000000000000c81fb1989d329ae0ab48fa69494c26bf244cf50b0000000000000000000000000000000000000000000000000098e5d97c95e83a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4645,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000c12bbd6f806a33406c33e6ad708bf20162269924000000000000000000000000c12bbd6f806a33406c33e6ad708bf20162269924000000000000000000000000000000000000000000000000000000000000091200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4646,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7cd438311c7919adc2475b50c9aaffd89ec76d9000000000000000000000000f7cd438311c7919adc2475b50c9aaffd89ec76d9000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4647,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dccddb7432b7371745233410c943f4882df07937000000000000000000000000dccddb7432b7371745233410c943f4882df0793700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4648,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000e4ebf512413efb8902929fda582a8619928210e8000000000000000000000000e4ebf512413efb8902929fda582a8619928210e8000000000000000000000000000000000000000000000000000000000000065100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4650,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000b800cf62d8017003d56aa100359253f478121c54000000000000000000000000b800cf62d8017003d56aa100359253f478121c540000000000000000000000000000000000000000000000000000000000000e4500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4651,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000060c8a712ad7995eee20945c174cec13a8228eabc00000000000000000000000060c8a712ad7995eee20945c174cec13a8228eabc000000000000000000000000000000000000000000000000002e2f6e5e14800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4652,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a29ea6dea81530b173a29cd3815be9868285e438000000000000000000000000a29ea6dea81530b173a29cd3815be9868285e43800000000000000000000000000000000000000000000000000b91d6c2e956c6800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4653,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff9f20367488f3386a97bc3897798b0e8bd1b2da000000000000000000000000ff9f20367488f3386a97bc3897798b0e8bd1b2da000000000000000000000000000000000000000000000000002aa1efb94e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4655,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000004aef5372bf1cc6b50be36dbe09038fa6c34db05c0000000000000000000000004aef5372bf1cc6b50be36dbe09038fa6c34db05c000000000000000000000000000000000000000000000000000000000000049f00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4656,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f2c5b9949add165aa74b784a55b14ab57e8845d5000000000000000000000000f2c5b9949add165aa74b784a55b14ab57e8845d5000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4658,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000007da0e97cb78832463914392b5d414c1befa1fb010000000000000000000000007da0e97cb78832463914392b5d414c1befa1fb01000000000000000000000000000000000000000000000000000000000032825100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4659,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000491d7f48150522596262d677792306732863b0ef000000000000000000000000491d7f48150522596262d677792306732863b0ef00000000000000000000000000000000000000000000000000998737e2cb495000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4660,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000007c9bae1d479858ef7dde063c0cce31f1ec2fbcb00000000000000000000000007c9bae1d479858ef7dde063c0cce31f1ec2fbcb0000000000000000000000000000000000000000000000000051aa3873ec5e9700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4663,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c60d93b1a9bcce3791c53d05d63e41fa7a67aa10000000000000000000000008c60d93b1a9bcce3791c53d05d63e41fa7a67aa1000000000000000000000000000000000000000000000000002bf6299af051dc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4665,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff9ddb1f1a0174ff61c935232b2c84c122c4d7d8000000000000000000000000ff9ddb1f1a0174ff61c935232b2c84c122c4d7d800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4666,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000003dc2ff9d48cd59085b37cbaae8d56948780373600000000000000000000000003dc2ff9d48cd59085b37cbaae8d56948780373600000000000000000000000000000000000000000000000000524d9e87e7c05700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4668,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ae3f69994b090f2531ae452c20c5a573ed8d81e0000000000000000000000004ae3f69994b090f2531ae452c20c5a573ed8d81e00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4669,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000063496a256167a704445108df3da25a3e8f1a4de300000000000000000000000063496a256167a704445108df3da25a3e8f1a4de3000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4670,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000100f82b00e6488ae8c2c6cda5f3162c0fc0107da000000000000000000000000100f82b00e6488ae8c2c6cda5f3162c0fc0107da00000000000000000000000000000000000000000000000000a025b14927e11d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x47f8bafbbd4811a8bb6ef5d35f41be99e56befb6aa95f3db93d0b16a8c9b1145,2022-05-07 12:37:46.000 UTC,0,true -4672,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc34cb3b39ee317e1f353c71b4542ecbd23357f4000000000000000000000000bc34cb3b39ee317e1f353c71b4542ecbd23357f400000000000000000000000000000000000000000000000001151c96347b000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4673,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d88f2e415698f472b265d45f0bcc65f61c405b80000000000000000000000000d88f2e415698f472b265d45f0bcc65f61c405b8000000000000000000000000000000000000000000000000027f7d0bdb92000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4677,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000416365993481e52e0472e7417656276d4e147a00000000000000000000000000416365993481e52e0472e7417656276d4e147a000000000000000000000000000000000000000000000000000007428a3d7d935900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4678,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037f7ff1864f5d5cba2b63592656049f2d7d06fb400000000000000000000000037f7ff1864f5d5cba2b63592656049f2d7d06fb4000000000000000000000000000000000000000000000000002c0febc3181f9600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4679,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b36f1cd4ad753bc4034ef24f45b97606041f7066000000000000000000000000b36f1cd4ad753bc4034ef24f45b97606041f7066000000000000000000000000000000000000000000000000001ec9302bd03c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4681,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b89bdb7d7bf95273b0d783ee88980fbfc80a269f000000000000000000000000b89bdb7d7bf95273b0d783ee88980fbfc80a269f000000000000000000000000000000000000000000000000004ce03d590bb81f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4682,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001666859ff3c6e3bfcb6165be7a93141afefa8b6c0000000000000000000000001666859ff3c6e3bfcb6165be7a93141afefa8b6c000000000000000000000000000000000000000000000000001c72680ad8210000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4683,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007870cbe0a8dfd925988cc51a3707378018e96c130000000000000000000000007870cbe0a8dfd925988cc51a3707378018e96c13000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4684,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005e72d65bfbc2d89662406037c860fa794ea914a50000000000000000000000005e72d65bfbc2d89662406037c860fa794ea914a50000000000000000000000000000000000000000000000000002c544cfdfac3a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4687,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007373f50c13ab510517edae5a632c9896e04ad46e0000000000000000000000007373f50c13ab510517edae5a632c9896e04ad46e0000000000000000000000000000000000000000000000000018e48641d0a88000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4688,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002cfc429665e84fbe34c73caca17942decbd55bb00000000000000000000000002cfc429665e84fbe34c73caca17942decbd55bb0000000000000000000000000000000000000000000000000002e2f6e5e14800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4689,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9de87ee602681da783dcb73bdd43e04a11a6f14000000000000000000000000f9de87ee602681da783dcb73bdd43e04a11a6f1400000000000000000000000000000000000000000000000001f4e4fb104dd60a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4690,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000655efb468c40ac277e2b4605f70c3063bae3f6c0000000000000000000000000655efb468c40ac277e2b4605f70c3063bae3f6c000000000000000000000000000000000000000000000000006d7e3a7f6235ed00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4691,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007a928306c20bbe9a3adfda0243b562dad439b7860000000000000000000000007a928306c20bbe9a3adfda0243b562dad439b786000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4692,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000027971daeb537ac9597cca37800ad64037fe53bac00000000000000000000000027971daeb537ac9597cca37800ad64037fe53bac000000000000000000000000000000000000000000000000003dfd235cfbf35b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4697,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000058101605da53b9d7727677d1922ee752dde7fa9f00000000000000000000000058101605da53b9d7727677d1922ee752dde7fa9f00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4699,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ee4bb8cf037a6c88da5fc3e84f5e260984daeb30000000000000000000000005ee4bb8cf037a6c88da5fc3e84f5e260984daeb3000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4700,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000089cdd0275599011b4eed9e168149b07aad983b2300000000000000000000000089cdd0275599011b4eed9e168149b07aad983b2300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4701,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c39dc8a181bf7ea6fd59f7883a43e1aa220b7d99000000000000000000000000c39dc8a181bf7ea6fd59f7883a43e1aa220b7d9900000000000000000000000000000000000000000000000001225bdfc6a0575c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4702,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fd39664cbdafc960e3d022aa0c50ea1ec0c23d60000000000000000000000000fd39664cbdafc960e3d022aa0c50ea1ec0c23d6000000000000000000000000000000000000000000000000000026f1fa8f7e59d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4703,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000089cdd0275599011b4eed9e168149b07aad983b2300000000000000000000000089cdd0275599011b4eed9e168149b07aad983b2300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4704,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000006f4acf78fc4749051e2c3203ca21ed2afa7d39300000000000000000000000006f4acf78fc4749051e2c3203ca21ed2afa7d393000000000000000000000000000000000000000000000000006ac43025170d3600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4705,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000faa5d7211dfa5669948434efbf5e701b22625852000000000000000000000000faa5d7211dfa5669948434efbf5e701b22625852000000000000000000000000000000000000000000000000003b1671687d05fd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4706,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac642a2dd6fbdbe118bf5ae8e5ef5d7f573a07e4000000000000000000000000ac642a2dd6fbdbe118bf5ae8e5ef5d7f573a07e4000000000000000000000000000000000000000000000000001f17df00fba6d200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4707,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000e84429bcdc2362e8af0c82aa7a02214cbf2b0eaf000000000000000000000000e84429bcdc2362e8af0c82aa7a02214cbf2b0eaf00000000000000000000000000000000000000000000000ad78ebc5ac620000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -4708,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e84429bcdc2362e8af0c82aa7a02214cbf2b0eaf000000000000000000000000e84429bcdc2362e8af0c82aa7a02214cbf2b0eaf0000000000000000000000000000000000000000000000000142a3635c5511c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4710,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005c951c03c0f66a9e38110de89857d9d05c972f860000000000000000000000005c951c03c0f66a9e38110de89857d9d05c972f8600000000000000000000000000000000000000000000000002c68af0bb14000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4711,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000013f729864e43ea27ee473fb51ceabf3936f4ccef00000000000000000000000013f729864e43ea27ee473fb51ceabf3936f4ccef00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4712,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000003834cd6774ccfcd3c865a39732d1d8b20abdad700000000000000000000000003834cd6774ccfcd3c865a39732d1d8b20abdad70000000000000000000000000000000000000000000000000050708e44eec39c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4713,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004743ed9e06fe530798654e27db3508fa146836710000000000000000000000004743ed9e06fe530798654e27db3508fa146836710000000000000000000000000000000000000000000000000045a3f57118602e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4714,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000036e48e548c8ed0ae685bcba3ca37640870fc9ed100000000000000000000000036e48e548c8ed0ae685bcba3ca37640870fc9ed1000000000000000000000000000000000000000000000000005fe1346ab04c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x109bac4441f95254ad48117cf081251a8e1947959ef78b7b4305dcf14426797f,2022-03-15 08:25:53.000 UTC,0,true -4716,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b9cd2daac4e0ebcf2da51705a0f02eee13072c3c000000000000000000000000b9cd2daac4e0ebcf2da51705a0f02eee13072c3c00000000000000000000000000000000000000000000000001141c07aace4f4300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4717,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e37e33d1325122da5d901292e9b6bda142146000000000000000000000000000e37e33d1325122da5d901292e9b6bda1421460000000000000000000000000000000000000000000000000000220d4ce149553000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4718,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008db8b5cffaf0ab0bcc91906bf5a6739afd9058770000000000000000000000008db8b5cffaf0ab0bcc91906bf5a6739afd90587700000000000000000000000000000000000000000000000000420c32792d715800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4720,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008a8f00438d53e09c3c5813d42cabf3c8a912cf700000000000000000000000008a8f00438d53e09c3c5813d42cabf3c8a912cf7000000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4721,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b937a4938eaef8d5525f156defb83a9382c4cc14000000000000000000000000b937a4938eaef8d5525f156defb83a9382c4cc1400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4724,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2a8a73cd8f888da3e8beba1fcacf50ab8be301f000000000000000000000000d2a8a73cd8f888da3e8beba1fcacf50ab8be301f0000000000000000000000000000000000000000000000000003e871b540c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4725,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c2cc945dcb203a4e88639dce34c647337503ae30000000000000000000000002c2cc945dcb203a4e88639dce34c647337503ae3000000000000000000000000000000000000000000000000003e5e2afb21c1ed00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4726,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ab5b1148453093aa5d4c6cf6bb7b3a373b4ff620000000000000000000000000ab5b1148453093aa5d4c6cf6bb7b3a373b4ff620000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4727,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000089c8121115955831056958861c6800f0298b820a00000000000000000000000089c8121115955831056958861c6800f0298b820a000000000000000000000000000000000000000000000000016799f60ae1ead600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5d3aec761a1bb488b5356307b70f328f0e339112dc367fcc06eb69983e430ff5,2022-04-23 09:43:47.000 UTC,0,true -4729,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004454f2128db755031e43f63ed5113f93bfc70f130000000000000000000000004454f2128db755031e43f63ed5113f93bfc70f13000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4730,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b4fdaf72796a7cdf40382a12a63b228088d755c2000000000000000000000000b4fdaf72796a7cdf40382a12a63b228088d755c2000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4731,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003309ffbc8665d129a0dc3ffe1b1e9976445f60de0000000000000000000000003309ffbc8665d129a0dc3ffe1b1e9976445f60de000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4733,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000ecd74bb8f8f5cdd94b1f429d03e2d16c31cb1d10000000000000000000000000ecd74bb8f8f5cdd94b1f429d03e2d16c31cb1d1000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4734,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000dbf317122027066b969b847a1e21d0bde4a1ee10000000000000000000000000dbf317122027066b969b847a1e21d0bde4a1ee1000000000000000000000000000000000000000000000000010ee8c900c3f34000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4735,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9f6ba779a33b8e230d5794e9e159b9122f78e08000000000000000000000000c9f6ba779a33b8e230d5794e9e159b9122f78e08000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4736,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005bb6fa6f73683f145c627ba1f46781b1a56817350000000000000000000000005bb6fa6f73683f145c627ba1f46781b1a5681735000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4737,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3405dc862b8acfca80f06c40a0287e351964557000000000000000000000000f3405dc862b8acfca80f06c40a0287e351964557000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4738,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005c1ed8c5739c256bc1c7c32887bf4af86f4324f70000000000000000000000005c1ed8c5739c256bc1c7c32887bf4af86f4324f7000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4739,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c732272e39a7b9a628465098fda86968d3a7d740000000000000000000000000c732272e39a7b9a628465098fda86968d3a7d740000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4741,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cd1ef68bff82f8501ad607567488fc03a4cb594d000000000000000000000000cd1ef68bff82f8501ad607567488fc03a4cb594d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4742,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000668689179097d44aa0919d0f2e3a8a9d539ca524000000000000000000000000668689179097d44aa0919d0f2e3a8a9d539ca524000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4743,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a4a8fff4c203387148bcaec54a82da00d4e2cba0000000000000000000000004a4a8fff4c203387148bcaec54a82da00d4e2cba000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4744,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049f5b222888775a0d45dc0ce38e462dcdc9c6f7300000000000000000000000049f5b222888775a0d45dc0ce38e462dcdc9c6f73000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4745,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000044dd1c77393e95166ef23a0ec525efc6ea1da1a800000000000000000000000044dd1c77393e95166ef23a0ec525efc6ea1da1a8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4746,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c29fd8fb70c7b6bec53164f3e501686df90f67c0000000000000000000000004c29fd8fb70c7b6bec53164f3e501686df90f67c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4747,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc852fae19bf05c7b6135afa27a7ff168d8fbcaa000000000000000000000000cc852fae19bf05c7b6135afa27a7ff168d8fbcaa000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4748,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061fea594187504cfe6b148699a3ca5835572f3b900000000000000000000000061fea594187504cfe6b148699a3ca5835572f3b9000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4749,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a18c44237322b8a6e2fd749e71817db64e62f9b1000000000000000000000000a18c44237322b8a6e2fd749e71817db64e62f9b1000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4750,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000031df8042fee3fd9aafa4002b75d2555e249996a500000000000000000000000031df8042fee3fd9aafa4002b75d2555e249996a5000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4751,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004d6bc66c28294abe7b1eec57caf17d1ec9b368220000000000000000000000004d6bc66c28294abe7b1eec57caf17d1ec9b36822000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4752,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a8dbcde95465f64ab7db516c77f198e83030485c000000000000000000000000a8dbcde95465f64ab7db516c77f198e83030485c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4753,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a2d58ce3df52bd8e6d3f67ce476d034a7f30f0b0000000000000000000000006a2d58ce3df52bd8e6d3f67ce476d034a7f30f0b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4754,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca47c17967c740085df98db42c65fd6897c827ac000000000000000000000000ca47c17967c740085df98db42c65fd6897c827ac000000000000000000000000000000000000000000000000004b98dffd817b3100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4755,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000009b15debe0d17473d5cbd655e475567c08bea32400000000000000000000000009b15debe0d17473d5cbd655e475567c08bea324000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4756,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000041a40816f4ba5f979aa1249b51220b4f4296205500000000000000000000000041a40816f4ba5f979aa1249b51220b4f42962055000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4757,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000efffcf5297bee262fcc9a283ebbf8745939b90b9000000000000000000000000efffcf5297bee262fcc9a283ebbf8745939b90b9000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4758,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000013f550f918df5800619d5eb884beb5bf20b52b3600000000000000000000000013f550f918df5800619d5eb884beb5bf20b52b36000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4759,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078509bedf3de8c803604335951080de8ab35631300000000000000000000000078509bedf3de8c803604335951080de8ab356313000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4760,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a8fa6774d7e952992b26c3949eeab9dedade0990000000000000000000000006a8fa6774d7e952992b26c3949eeab9dedade099000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4761,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000075179bc29d0f22268496f0389e89bf18e4a8a16600000000000000000000000075179bc29d0f22268496f0389e89bf18e4a8a166000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4762,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000054b81b4acfcba29164b43b600d66359ed15d296300000000000000000000000054b81b4acfcba29164b43b600d66359ed15d2963000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4763,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043c213b5cd3229ba96ac096b2f1a3f7aa7637c2300000000000000000000000043c213b5cd3229ba96ac096b2f1a3f7aa7637c23000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4764,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032c15485930203d0ea3a57cd17d2d1fb1d76f0f600000000000000000000000032c15485930203d0ea3a57cd17d2d1fb1d76f0f6000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4765,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000096f6acd6573c41accb01f4d391ef8437a1d9d12200000000000000000000000096f6acd6573c41accb01f4d391ef8437a1d9d122000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4766,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000087ad6c4137d73352937d1e784c51787808a5221400000000000000000000000087ad6c4137d73352937d1e784c51787808a52214000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4767,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000840dcb18ddd75d048f3c0320687017dd7420b638000000000000000000000000840dcb18ddd75d048f3c0320687017dd7420b6380000000000000000000000000000000000000000000000000006f2051af0d67d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4768,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d94be38ddce7331e6b393f05060a1089a5c0b73f000000000000000000000000d94be38ddce7331e6b393f05060a1089a5c0b73f000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4769,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008eef779818afa953b0652e45438423ebe089f55a0000000000000000000000008eef779818afa953b0652e45438423ebe089f55a0000000000000000000000000000000000000000000000000040555d5f7f9c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4770,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002808f7a3ffb1d1ab93020c662bce8630e82ef5870000000000000000000000002808f7a3ffb1d1ab93020c662bce8630e82ef587000000000000000000000000000000000000000000000000001d1916ea179d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4771,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a102cd7610a51ccf33fd837bc4b51fbe45986766000000000000000000000000a102cd7610a51ccf33fd837bc4b51fbe45986766000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4772,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de63c51d5db76e8a6286c8a95cf8bf040630aa12000000000000000000000000de63c51d5db76e8a6286c8a95cf8bf040630aa12000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4773,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000774b8d5187e46b2466d9f93253b043de211d25ee000000000000000000000000774b8d5187e46b2466d9f93253b043de211d25ee000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4775,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004934a209bdad5dc81f69344c20e083800062b78b0000000000000000000000004934a209bdad5dc81f69344c20e083800062b78b000000000000000000000000000000000000000000000000009a6a7f0bb4975c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4776,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000093ae918fee314a1d5f01e153273f4b906a03fb4300000000000000000000000093ae918fee314a1d5f01e153273f4b906a03fb43000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4777,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000019a10dae9aa55939b48eb5883f058212c2e461de00000000000000000000000019a10dae9aa55939b48eb5883f058212c2e461de000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4778,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da800ea1c982da53a97d2b3648ca06f7073332f1000000000000000000000000da800ea1c982da53a97d2b3648ca06f7073332f1000000000000000000000000000000000000000000000000005fa48c4590b34000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4779,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fb7c5932a406301b421cfa87bc084c7e4ec50ffb000000000000000000000000fb7c5932a406301b421cfa87bc084c7e4ec50ffb000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4781,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006cf220738ebca441142a4a9e04f1acc54e33ede70000000000000000000000006cf220738ebca441142a4a9e04f1acc54e33ede7000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4782,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1b2f28da2b5ba4a0cc8810b37050c144eccee4f000000000000000000000000c1b2f28da2b5ba4a0cc8810b37050c144eccee4f000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4783,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000128be462b4c51a03d24841f13bb76357b946dc30000000000000000000000000128be462b4c51a03d24841f13bb76357b946dc30000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4784,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005dbada3143b4742ea99609f99d467b77bf314c720000000000000000000000005dbada3143b4742ea99609f99d467b77bf314c72000000000000000000000000000000000000000000000000005f78996678460000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd7ab4c287251b191148832008d393bcb070212e8bd6cda7b4f74be61fa9029a5,2022-05-28 10:21:39.000 UTC,0,true -4785,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc7d7d83538f554b58021ca5f68c5a8370e6aa85000000000000000000000000bc7d7d83538f554b58021ca5f68c5a8370e6aa85000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4786,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003621a4ceca5abceb6edb07261777ca761c06a3180000000000000000000000003621a4ceca5abceb6edb07261777ca761c06a318000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4788,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003cfec638039e8226580b1aa18ef7c81594aab4de0000000000000000000000003cfec638039e8226580b1aa18ef7c81594aab4de000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4789,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000565dac8a20c7ba67e2475998ec94891681303bf3000000000000000000000000565dac8a20c7ba67e2475998ec94891681303bf3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4790,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a03a2dbbe963f48d6db2f52654865cced8a55a00000000000000000000000004a03a2dbbe963f48d6db2f52654865cced8a55a0000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4791,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000002c7c25035572ac801ae1c1389fbc547e53cefc400000000000000000000000002c7c25035572ac801ae1c1389fbc547e53cefc4000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4792,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b32969386bf3367efc46f43c847e5f0fbc9e9352000000000000000000000000b32969386bf3367efc46f43c847e5f0fbc9e9352000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4793,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008413db0f5627121d175db1e28a7b9d6a53a057a40000000000000000000000008413db0f5627121d175db1e28a7b9d6a53a057a4000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4794,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e7bd5bfa094427f38edc4e22b968df5bc628d1ba000000000000000000000000e7bd5bfa094427f38edc4e22b968df5bc628d1ba000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4795,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b515572a7dfa96e3bdcf5da8c07f87c78eb481dd000000000000000000000000b515572a7dfa96e3bdcf5da8c07f87c78eb481dd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4797,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006704a6ab026013784b12d551910754e6b6d420c80000000000000000000000006704a6ab026013784b12d551910754e6b6d420c80000000000000000000000000000000000000000000000000091cd127707bd5700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4798,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd53a43681d0f7dc8c7365d9e9e967f0ae439733000000000000000000000000dd53a43681d0f7dc8c7365d9e9e967f0ae439733000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4799,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047e82d9eaec31f4af15c4e6cf750ee92d4671f4100000000000000000000000047e82d9eaec31f4af15c4e6cf750ee92d4671f41000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4801,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a6c8e08840c4c1cecf72c210a7767a6bc0708ef6000000000000000000000000a6c8e08840c4c1cecf72c210a7767a6bc0708ef6000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4802,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d70efdebd7bf7a18d99dc5743775d2403aedca40000000000000000000000005d70efdebd7bf7a18d99dc5743775d2403aedca4000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4803,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f36f8b6f0978f30e3b4ebc40fffb33614a140870000000000000000000000003f36f8b6f0978f30e3b4ebc40fffb33614a14087000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4804,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd60788b1e68b1829698de4220935609c20640d9000000000000000000000000bd60788b1e68b1829698de4220935609c20640d9000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4805,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001d2e5c70cb5be0ac3f98e8541ad5fe8122a77f3f0000000000000000000000001d2e5c70cb5be0ac3f98e8541ad5fe8122a77f3f000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4806,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000007e44f3d32c23f44e83bc194ec6811d8ddad507b50000000000000000000000007e44f3d32c23f44e83bc194ec6811d8ddad507b5000000000000000000000000000000000000000000000000000000003a09093600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xa859406d75f1e8cecd4a0e11a41b5e6cab2afebb99c5d550639fc81141011d66,2022-04-28 08:43:31.000 UTC,0,true -4807,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005caafbe3b1a065656a7d62cfb527f6dd0983769e0000000000000000000000005caafbe3b1a065656a7d62cfb527f6dd0983769e000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4808,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf28c3909d77b08aba6535ba714a0e0f247b7e24000000000000000000000000bf28c3909d77b08aba6535ba714a0e0f247b7e24000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4809,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3f04dd1048b899a604ead8673e877f74382e83f000000000000000000000000d3f04dd1048b899a604ead8673e877f74382e83f000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4810,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9cd2cd9411b9ab2641a96f7f2308997cc8a7ba8000000000000000000000000e9cd2cd9411b9ab2641a96f7f2308997cc8a7ba8000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4811,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000193030f0925cb2a303f643f47b885f8884bcde51000000000000000000000000193030f0925cb2a303f643f47b885f8884bcde51000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4812,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000019990c1151ea0d9af1a7f001af99369036c6b37700000000000000000000000019990c1151ea0d9af1a7f001af99369036c6b377000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4813,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf6a1374d4ee577e75ff817fb636d5f7a78df437000000000000000000000000bf6a1374d4ee577e75ff817fb636d5f7a78df437000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4814,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000386e85f8041b4c1bb7636187a20d1faf824c7371000000000000000000000000386e85f8041b4c1bb7636187a20d1faf824c7371000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4816,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007659f447322b1a7c8a7762d8e887a14036bc79ac0000000000000000000000007659f447322b1a7c8a7762d8e887a14036bc79ac000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4817,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008a6ad7ded9157b42ac20b12fdeb420a1356024c90000000000000000000000008a6ad7ded9157b42ac20b12fdeb420a1356024c9000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4818,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ae8f908ce70b12879af88a94843d1f21bc973630000000000000000000000004ae8f908ce70b12879af88a94843d1f21bc97363000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4819,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a38840567ef21e89f5e23b701b0d4be22738dd65000000000000000000000000a38840567ef21e89f5e23b701b0d4be22738dd65000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4820,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eeb9e883dd52bf41d672bf61792d32eec7f7d632000000000000000000000000eeb9e883dd52bf41d672bf61792d32eec7f7d632000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4821,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df65527e7d88953234614efe4b72cbe7a848fb8a000000000000000000000000df65527e7d88953234614efe4b72cbe7a848fb8a000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4822,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a07b077c585a0789939520706c9e71207f91e78b000000000000000000000000a07b077c585a0789939520706c9e71207f91e78b000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4823,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf6ae5bd3f76b1b8a4c8be14e93272ef1c214b77000000000000000000000000bf6ae5bd3f76b1b8a4c8be14e93272ef1c214b77000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4824,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d9596218d9f81403c542815dbd56d44ee1e920d0000000000000000000000000d9596218d9f81403c542815dbd56d44ee1e920d0000000000000000000000000000000000000000000000000006656d6d0b7f5e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4825,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e9c4103c54cd5d8c9a79d13225031cae4e8b3f50000000000000000000000006e9c4103c54cd5d8c9a79d13225031cae4e8b3f5000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4826,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009285d24f30390af0cb8331401d9f609275f7813f0000000000000000000000009285d24f30390af0cb8331401d9f609275f7813f000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4827,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000011089817570a67c42dc6a57a545bd4679c17e07600000000000000000000000011089817570a67c42dc6a57a545bd4679c17e076000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4828,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005e12fd8f8a438f7c767c4dc3ba2f9d1819f8d3bd0000000000000000000000005e12fd8f8a438f7c767c4dc3ba2f9d1819f8d3bd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4829,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2efe33e14541da6ad389f36f21b15fe5d305f30000000000000000000000000d2efe33e14541da6ad389f36f21b15fe5d305f30000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4830,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006693b7ef7bcc300dde5830231a3ee0bd972bd85c0000000000000000000000006693b7ef7bcc300dde5830231a3ee0bd972bd85c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4831,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c05e84cd03035a0a6ab98fb5e5b981adebe6733b000000000000000000000000c05e84cd03035a0a6ab98fb5e5b981adebe6733b000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4832,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b287ecc518df66f380405563196b80039fbdd89c000000000000000000000000b287ecc518df66f380405563196b80039fbdd89c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4833,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003340308bdd50f503d3c5efbd69450551b3e8f81f0000000000000000000000003340308bdd50f503d3c5efbd69450551b3e8f81f000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4834,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000197d5852e702f4685e370d0c9fd582ec55a531cd000000000000000000000000197d5852e702f4685e370d0c9fd582ec55a531cd000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4835,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000de38392adc601037dfd89a3d83354b1beaafc660000000000000000000000000de38392adc601037dfd89a3d83354b1beaafc66000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4836,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000083b2245cfbe1d0047f30feaeb61e8043595934fc00000000000000000000000083b2245cfbe1d0047f30feaeb61e8043595934fc000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4837,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000033e7609bfdad6117943b00370a5cb49add49c46400000000000000000000000033e7609bfdad6117943b00370a5cb49add49c464000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4838,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008da9c63c1bcf8598dd44fffbc5dbea53aebd54f60000000000000000000000008da9c63c1bcf8598dd44fffbc5dbea53aebd54f6000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4839,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b7d1f72101b9ba6ea3bcdd1db1826fbbde182892000000000000000000000000b7d1f72101b9ba6ea3bcdd1db1826fbbde182892000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4840,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001197fe10cedf5bbe3f161e1a13d7f6a56f0e4a0f0000000000000000000000001197fe10cedf5bbe3f161e1a13d7f6a56f0e4a0f000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4841,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000008fef97ccbc5d7dfcfdac1aa992fcfb69633c20000000000000000000000000008fef97ccbc5d7dfcfdac1aa992fcfb69633c200000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4842,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c151a1e3123f9eda4f63de7ca6bc461a97f39700000000000000000000000000c151a1e3123f9eda4f63de7ca6bc461a97f39700000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4843,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008a6302c1fb65827304e77d868a770aafe34bbd580000000000000000000000008a6302c1fb65827304e77d868a770aafe34bbd58000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4844,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a8dad3f33f7d585ac789447d93cb697ebcaf1ca7000000000000000000000000a8dad3f33f7d585ac789447d93cb697ebcaf1ca7000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4845,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fa49e30b302dc29ce9f1e96eb5576a70cdfc0542000000000000000000000000fa49e30b302dc29ce9f1e96eb5576a70cdfc0542000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4846,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000033c5a1eb527d804543c64b1008b61f78dfecf72600000000000000000000000033c5a1eb527d804543c64b1008b61f78dfecf726000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4847,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2d2de2f92f297b9a0401a5b815c051c557be376000000000000000000000000a2d2de2f92f297b9a0401a5b815c051c557be376000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4848,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007892bf19be53018a032067925e482620ff67ffcf0000000000000000000000007892bf19be53018a032067925e482620ff67ffcf000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4849,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bcf03bb0dce296dd615d16bc9c338a8a37a020cc000000000000000000000000bcf03bb0dce296dd615d16bc9c338a8a37a020cc000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4850,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000019d1d0e20dd15b0743652f3e0dde9aea0617fd8d00000000000000000000000019d1d0e20dd15b0743652f3e0dde9aea0617fd8d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4851,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ce0118d1bfe9a5f0fa5b381d444f187527623200000000000000000000000003ce0118d1bfe9a5f0fa5b381d444f18752762320000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4852,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df0644d98fc986d6bd4638489e20063fadf8d7d8000000000000000000000000df0644d98fc986d6bd4638489e20063fadf8d7d8000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4853,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f51bc7e52bde3c27e6045d00d3f9c609d305c6b5000000000000000000000000f51bc7e52bde3c27e6045d00d3f9c609d305c6b5000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4854,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e960624cd53229d341bf9158255ddf53bad04dac000000000000000000000000e960624cd53229d341bf9158255ddf53bad04dac000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4855,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006c9031e178a976f8d3697ef5f644b24db615fd9b0000000000000000000000006c9031e178a976f8d3697ef5f644b24db615fd9b000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4856,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000000e1a6e86c6a8375d63555127bd8c15436932c8400000000000000000000000000e1a6e86c6a8375d63555127bd8c15436932c84000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4857,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000b938f823d2da78ec005634a0742b969560d40bc0000000000000000000000000b938f823d2da78ec005634a0742b969560d40bc000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4858,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca7278bffaa541f4fff875a93bf4f4ea72ad43af000000000000000000000000ca7278bffaa541f4fff875a93bf4f4ea72ad43af000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4860,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000010936a472f257dda330bd65bce68dce8b169f69600000000000000000000000010936a472f257dda330bd65bce68dce8b169f696000000000000000000000000000000000000000000000000009e8dff889350b800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4862,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6c0d7a92446b508b49c4a044a6571949bb8b62d000000000000000000000000c6c0d7a92446b508b49c4a044a6571949bb8b62d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4863,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e34bc9b5dd24f71dfebc45ab46d9f2feeded52b0000000000000000000000006e34bc9b5dd24f71dfebc45ab46d9f2feeded52b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4864,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000059d7f642c0df533bd32b971a09d4205a1c1444b900000000000000000000000059d7f642c0df533bd32b971a09d4205a1c1444b9000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4865,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000034e91cf6b9305f13ef4b92f312168ac98be6160f00000000000000000000000034e91cf6b9305f13ef4b92f312168ac98be6160f000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4866,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000907ce6dc4016d472c645906575e59cfaf6db8bee000000000000000000000000907ce6dc4016d472c645906575e59cfaf6db8bee000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4867,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000010dbf82a8bb191bd1c082de5ef915e998aa5ccd700000000000000000000000010dbf82a8bb191bd1c082de5ef915e998aa5ccd70000000000000000000000000000000000000000000000000207a305eff8d32500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2ee0b98892e2afb067bf39c3a5e17182c14ff6796b1aa27fcb14ef28629d7140,2022-02-02 13:39:28.000 UTC,0,true -4868,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000034ce141b83a754705cb36df3f826eba268257dab00000000000000000000000034ce141b83a754705cb36df3f826eba268257dab000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4869,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000502e2a36dba47d881458e03e9e2b6ba47f1196e8000000000000000000000000502e2a36dba47d881458e03e9e2b6ba47f1196e8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4870,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1014980a9591c59f1d95adc14b56edd171bbf00000000000000000000000000c1014980a9591c59f1d95adc14b56edd171bbf00000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4871,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007212b43213e8bd36ad390e86e405867c2adee09e0000000000000000000000007212b43213e8bd36ad390e86e405867c2adee09e000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4872,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017b3e588a306dd47855aeb1c423cafdacf3a665200000000000000000000000017b3e588a306dd47855aeb1c423cafdacf3a665200000000000000000000000000000000000000000000000000014805e10bf6f300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4873,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000007ebb7978e5f752d1af50133d677b4ae84474d0100000000000000000000000007ebb7978e5f752d1af50133d677b4ae84474d0100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4874,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043ec54a69923cf55e5d8cfaffd79b5a52b8202bf00000000000000000000000043ec54a69923cf55e5d8cfaffd79b5a52b8202bf000000000000000000000000000000000000000000000000000f45f0e825925500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4875,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006fae1e971bd93a141eef542b4197a3476d03dacd0000000000000000000000006fae1e971bd93a141eef542b4197a3476d03dacd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4876,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ee9c1ff90f649a7d02e68bd3dcd7d185d68e5020000000000000000000000007ee9c1ff90f649a7d02e68bd3dcd7d185d68e502000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4877,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000591125dbb201bd90635b90e74555f341c4c12196000000000000000000000000591125dbb201bd90635b90e74555f341c4c12196000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4878,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f2415d4f25c37df7f15b84138f370f55ad4fb434000000000000000000000000f2415d4f25c37df7f15b84138f370f55ad4fb434000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4879,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000044f2edfaa320b6b7540fbbff4758b925c5f9c7ac00000000000000000000000044f2edfaa320b6b7540fbbff4758b925c5f9c7ac000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4880,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c72299609537a857c48a3fae2b06e09318d3f6bb000000000000000000000000c72299609537a857c48a3fae2b06e09318d3f6bb000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4881,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c658b02473ae79c2826e770db890c815788788bd000000000000000000000000c658b02473ae79c2826e770db890c815788788bd00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4882,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000079e03e5718268fdd2c219807406a231e2fccb2ef00000000000000000000000079e03e5718268fdd2c219807406a231e2fccb2ef000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4883,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000527625a238857be593920238ea9dee3fa7ce5433000000000000000000000000527625a238857be593920238ea9dee3fa7ce5433000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4884,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000066ac5a53db5349152db5f3c9fab2b93664044a1000000000000000000000000066ac5a53db5349152db5f3c9fab2b93664044a1000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4885,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000afdf046b8eb9f7ec6d341ba923a663633ac0d7a2000000000000000000000000afdf046b8eb9f7ec6d341ba923a663633ac0d7a2000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4886,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f7609d42cd0393ba6e8a3168b20096943eb006f0000000000000000000000008f7609d42cd0393ba6e8a3168b20096943eb006f000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4887,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c3fac74d23767ba74ec0842e24ea39708faad1c8000000000000000000000000c3fac74d23767ba74ec0842e24ea39708faad1c8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4888,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e987723597050e6d073bc3660df5365b764c651c000000000000000000000000e987723597050e6d073bc3660df5365b764c651c00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4889,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007aab79eca85f6259f40ef23d140e39e0ee44d75a0000000000000000000000007aab79eca85f6259f40ef23d140e39e0ee44d75a000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4890,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000016cd17e90d1b5f623505c0796be1e85607defbcb00000000000000000000000016cd17e90d1b5f623505c0796be1e85607defbcb00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4891,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000978260921f7a56a98011e752e3b6847387dd9e13000000000000000000000000978260921f7a56a98011e752e3b6847387dd9e13000000000000000000000000000000000000000000000000028d036819b634ba00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4892,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b45a7d322136ceeb741f153a2d795eb4696799bb000000000000000000000000b45a7d322136ceeb741f153a2d795eb4696799bb000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4893,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004b9a1dfc451d7e6233cde79b627e7c5319e0f1bc0000000000000000000000004b9a1dfc451d7e6233cde79b627e7c5319e0f1bc00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4894,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ed22136c186e2f017d872f6c106cfe21991e8e90000000000000000000000003ed22136c186e2f017d872f6c106cfe21991e8e9000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4895,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a4307a69e4adfab939f3d89c9121a391ad146a20000000000000000000000004a4307a69e4adfab939f3d89c9121a391ad146a2000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4896,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000322ee168f95d3d151105d784fbdcdc8c1ea7d2e2000000000000000000000000322ee168f95d3d151105d784fbdcdc8c1ea7d2e200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4897,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078018b3e65ed26601f9c428383d62e037a0ad5bf00000000000000000000000078018b3e65ed26601f9c428383d62e037a0ad5bf000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4898,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000800400391b32df4c5a2c575c1fffaf8a71f9c22e000000000000000000000000800400391b32df4c5a2c575c1fffaf8a71f9c22e000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4900,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e6256af6d7bf502a25309c7b9017d4c5ea82433b000000000000000000000000e6256af6d7bf502a25309c7b9017d4c5ea82433b00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4901,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009cf52a8174c1a841f9e20e629dd420974b587ba40000000000000000000000009cf52a8174c1a841f9e20e629dd420974b587ba400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4902,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f2ce4f450d9acf7bedacdf7879f68a2e9308e540000000000000000000000006f2ce4f450d9acf7bedacdf7879f68a2e9308e54000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4903,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a5636e3c10390e6f06482f1336f1973e767d9e60000000000000000000000002a5636e3c10390e6f06482f1336f1973e767d9e6000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4904,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c57578c767d48ba722058dfad80ac83f9a2e4860000000000000000000000000c57578c767d48ba722058dfad80ac83f9a2e48600000000000000000000000000000000000000000000000000109c5e7809757c900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4905,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a813569d4fc9a0d2fb0150c2fdfbd6c1645b5df0000000000000000000000004a813569d4fc9a0d2fb0150c2fdfbd6c1645b5df000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4906,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ec4a557a6e430d10a6acaf265610199c49411100000000000000000000000003ec4a557a6e430d10a6acaf265610199c4941110000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4907,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a4e67873e7983f8ed98da6f4b5f9d2719b72ffb5000000000000000000000000a4e67873e7983f8ed98da6f4b5f9d2719b72ffb5000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4909,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0552d9b83590294ab9e5da073c4fde14359d1dd000000000000000000000000c0552d9b83590294ab9e5da073c4fde14359d1dd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4910,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000074a20a756c25d124a4dba853dfd996274c69b4ac00000000000000000000000074a20a756c25d124a4dba853dfd996274c69b4ac000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4911,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008ff745694113df5ea6317f41fa3b371b0f5d7b350000000000000000000000008ff745694113df5ea6317f41fa3b371b0f5d7b3500000000000000000000000000000000000000000000000000fa61bafa78615500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4912,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017e7989777c7b23ac2d8523816df154d8c47123700000000000000000000000017e7989777c7b23ac2d8523816df154d8c471237000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4913,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000082919de1450c9884ecd1aa89fe6c5ef03b56f58e00000000000000000000000082919de1450c9884ecd1aa89fe6c5ef03b56f58e000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4914,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cef7d2a50cb0e6c5f1be47ee71578c93c6966671000000000000000000000000cef7d2a50cb0e6c5f1be47ee71578c93c6966671000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4915,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047f3edb4cf66644514618d98cdc9b813cec77f5c00000000000000000000000047f3edb4cf66644514618d98cdc9b813cec77f5c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4916,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de1a86cd877c622a7fc71739f37e9430317616e2000000000000000000000000de1a86cd877c622a7fc71739f37e9430317616e20000000000000000000000000000000000000000000000000101a553643ec30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4917,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bfc2cf0fc6e6fd3f9c06ea5178426ad2d2e48a06000000000000000000000000bfc2cf0fc6e6fd3f9c06ea5178426ad2d2e48a06000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4918,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000062a80918dde9b992d32a2b59bc7109ccf08b8b6000000000000000000000000062a80918dde9b992d32a2b59bc7109ccf08b8b60000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4919,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6a7c8869359b4ea34f3069b0d84742d76b1bf3d000000000000000000000000d6a7c8869359b4ea34f3069b0d84742d76b1bf3d000000000000000000000000000000000000000000000000009fb43761e5658e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4920,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2772761152a8779bad1004e04a1db547521da6f000000000000000000000000d2772761152a8779bad1004e04a1db547521da6f000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4921,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000246846d6ec87e7b415fcdb2899a81294522316c6000000000000000000000000246846d6ec87e7b415fcdb2899a81294522316c600000000000000000000000000000000000000000000000000057b89e890ed2f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4922,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fa9a1a93ab327fba20384caf9921491f3917ee6a000000000000000000000000fa9a1a93ab327fba20384caf9921491f3917ee6a00000000000000000000000000000000000000000000000000f618f83096749900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4923,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000016fc72333f77568b782d386e82aa400999c8c23a00000000000000000000000016fc72333f77568b782d386e82aa400999c8c23a000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4924,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a577494f74b5f4e7ec517bd66b4403806e8e0378000000000000000000000000a577494f74b5f4e7ec517bd66b4403806e8e0378000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4925,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e6eb978a9cbdb57a02856b3d0b8e6571a2bd6970000000000000000000000004e6eb978a9cbdb57a02856b3d0b8e6571a2bd697000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4926,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006051a9863d97addaf708154e3d5ab3c456b0c1250000000000000000000000006051a9863d97addaf708154e3d5ab3c456b0c12500000000000000000000000000000000000000000000000000fc30f8c65df32d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4927,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000affc3444310c1df92f35fdeeadf4de5be977df06000000000000000000000000affc3444310c1df92f35fdeeadf4de5be977df06000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4929,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a60eb1065aea0d4b78ce2859b6977ac417d3aab0000000000000000000000001a60eb1065aea0d4b78ce2859b6977ac417d3aab0000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4930,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008637aa682344f1e70a37f2d7da02ef79024f6bf50000000000000000000000008637aa682344f1e70a37f2d7da02ef79024f6bf50000000000000000000000000000000000000000000000000101cbc7478a774300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4931,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac45bde4f7869e45e475028ccaf437e6213c2827000000000000000000000000ac45bde4f7869e45e475028ccaf437e6213c2827000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4932,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d5fdafe5b1903ecd1748b109eba3891e6276a0b6000000000000000000000000d5fdafe5b1903ecd1748b109eba3891e6276a0b6000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4933,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf0e864ae108d71db1c710409c7fc5aeb40b43fb000000000000000000000000bf0e864ae108d71db1c710409c7fc5aeb40b43fb000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4934,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b39aec4b84f042677fea1439d1e104326cbc84ac000000000000000000000000b39aec4b84f042677fea1439d1e104326cbc84ac0000000000000000000000000000000000000000000000000060c1c9a353fa4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4935,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004b58e15c56be04743b84dd60d225085c296de2db0000000000000000000000004b58e15c56be04743b84dd60d225085c296de2db0000000000000000000000000000000000000000000000000104a026b15b2cd500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4936,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d78f4935778764a9c64d32a3f590b7da9f5bbb60000000000000000000000000d78f4935778764a9c64d32a3f590b7da9f5bbb60000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4937,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a86d959853519975aba591bc19579682faab1770000000000000000000000003a86d959853519975aba591bc19579682faab177000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4938,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bfe2e4a14e2b77a2d37fda2bd304feca175ea544000000000000000000000000bfe2e4a14e2b77a2d37fda2bd304feca175ea54400000000000000000000000000000000000000000000000001086c348dd0b7e700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4939,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006836cc238567d32a59f6c717e9991e482afbc5bd0000000000000000000000006836cc238567d32a59f6c717e9991e482afbc5bd000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4940,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008bde3ad8a20852e04afd2b2f27b5a59fc287789f0000000000000000000000008bde3ad8a20852e04afd2b2f27b5a59fc287789f000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4941,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000031dc4372b19e2d923813224a31368c88076c29e000000000000000000000000031dc4372b19e2d923813224a31368c88076c29e0000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4942,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a55cfb15941f1692751b2b3a527d94265c7d156e000000000000000000000000a55cfb15941f1692751b2b3a527d94265c7d156e000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4943,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005e75611ea6c050ca1036ec5df6f609b034a5de700000000000000000000000005e75611ea6c050ca1036ec5df6f609b034a5de7000000000000000000000000000000000000000000000000004149842d60770000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd4bb2c4fd4fb4f7d3956541ea347769fcbf8da4ea4ce43ef228f86068b60ea35,2022-04-17 09:27:29.000 UTC,0,true -4944,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff2e53d6da18e31d607f4399220db033d2931d1f000000000000000000000000ff2e53d6da18e31d607f4399220db033d2931d1f000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4945,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ef2ebfb2eba4c63d38c5ad1322104176b165ff40000000000000000000000004ef2ebfb2eba4c63d38c5ad1322104176b165ff4000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4946,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000030bddda2620a715eb5892810b199218b50ea7fdb00000000000000000000000030bddda2620a715eb5892810b199218b50ea7fdb000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4947,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a95a05410921e8190ca1adbaaa45a8917cddae09000000000000000000000000a95a05410921e8190ca1adbaaa45a8917cddae09000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4948,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c2b82e071cfa045d938716e2b2108b022f695df4000000000000000000000000c2b82e071cfa045d938716e2b2108b022f695df4000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4949,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000172b1d027d9f532c8412249c668a87f8f7c328d0000000000000000000000000172b1d027d9f532c8412249c668a87f8f7c328d0000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4950,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f93afebf1e21460e7e9c1ad099c21650e879eedc000000000000000000000000f93afebf1e21460e7e9c1ad099c21650e879eedc000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4952,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b47726b44d8e004e11555431035bbb2930ffd9fc000000000000000000000000b47726b44d8e004e11555431035bbb2930ffd9fc000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4953,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000819b172906649f91c8bce341f08141e3bcbb6fbc000000000000000000000000819b172906649f91c8bce341f08141e3bcbb6fbc000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4954,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f8a2c2c3140b1801a4afdbda89db20e02f736ba9000000000000000000000000f8a2c2c3140b1801a4afdbda89db20e02f736ba9000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4955,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008169dfecd99e8a0945068f8d26a80b4396d3820b0000000000000000000000008169dfecd99e8a0945068f8d26a80b4396d3820b000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4956,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c17da57ee13e8a9e7d3f3c6ac2c011d18071723b000000000000000000000000c17da57ee13e8a9e7d3f3c6ac2c011d18071723b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4957,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000951bf925dc5d5d4849c1b2b93e742ef10012b48e000000000000000000000000951bf925dc5d5d4849c1b2b93e742ef10012b48e000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4958,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003188684ed5b446751851edec8067826d593a76fd0000000000000000000000003188684ed5b446751851edec8067826d593a76fd000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4959,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dfdc09776116cbbc3485bb0b53507a0ec0acbf38000000000000000000000000dfdc09776116cbbc3485bb0b53507a0ec0acbf38000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4960,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6e6a4dc851680fd200367021df4b8d84e4764a5000000000000000000000000c6e6a4dc851680fd200367021df4b8d84e4764a5000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4961,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043ec54a69923cf55e5d8cfaffd79b5a52b8202bf00000000000000000000000043ec54a69923cf55e5d8cfaffd79b5a52b8202bf0000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4962,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef575844bfe8c7872a8ccc9fb2af8318c1550fad000000000000000000000000ef575844bfe8c7872a8ccc9fb2af8318c1550fad00000000000000000000000000000000000000000000000000668b929e7ef09700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4964,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000331189161575a5f9cb7637f6544156889fc77a60000000000000000000000000331189161575a5f9cb7637f6544156889fc77a6000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4965,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c8e4dd49948dc43443e14d7563623b2669779a71000000000000000000000000c8e4dd49948dc43443e14d7563623b2669779a71000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4966,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001f15f71188c240c3d7bdfa5a5c44ebe37e30112f0000000000000000000000001f15f71188c240c3d7bdfa5a5c44ebe37e30112f000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4968,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c939678d75bb552bf3d22aecba8184f0eb9c7ba0000000000000000000000008c939678d75bb552bf3d22aecba8184f0eb9c7ba000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4969,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e021990f6142a5d2bdfe2cb1e6535fcd967d221e000000000000000000000000e021990f6142a5d2bdfe2cb1e6535fcd967d221e000000000000000000000000000000000000000000000000000e80d8b437e92900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4970,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000086845ebf40b3141e18e1fdbd91d845b51fa1242e00000000000000000000000086845ebf40b3141e18e1fdbd91d845b51fa1242e000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4972,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008ea63889a9eba186ee050d6c42d5580ef388face0000000000000000000000008ea63889a9eba186ee050d6c42d5580ef388face000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4973,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001f537cdead4ac51eea305e800692459eeb64f7980000000000000000000000001f537cdead4ac51eea305e800692459eeb64f798000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4974,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001c6b50f3593ac3ddb5e1e38db6a780456b1e49c70000000000000000000000001c6b50f3593ac3ddb5e1e38db6a780456b1e49c7000000000000000000000000000000000000000000000000002f11349bc4d1e400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4975,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043ec54a69923cf55e5d8cfaffd79b5a52b8202bf00000000000000000000000043ec54a69923cf55e5d8cfaffd79b5a52b8202bf0000000000000000000000000000000000000000000000000000088119ffd50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4976,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a17cc8fe40175c9ecaa64f07c88f784b4664f805000000000000000000000000a17cc8fe40175c9ecaa64f07c88f784b4664f805000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4977,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043ec54a69923cf55e5d8cfaffd79b5a52b8202bf00000000000000000000000043ec54a69923cf55e5d8cfaffd79b5a52b8202bf0000000000000000000000000000000000000000000000000000088119ffd50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4978,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000455f982fe6dfa24c72c304f319de71ea806af223000000000000000000000000455f982fe6dfa24c72c304f319de71ea806af223000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4980,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000006eba72cbfa2a136e35056b6451dcc7b412bcc2200000000000000000000000006eba72cbfa2a136e35056b6451dcc7b412bcc2200000000000000000000000000000000000000000000000000732f8e01e8d1bd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4981,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008a020e94c2377c4f22dd16ce609b20ed7b350e410000000000000000000000008a020e94c2377c4f22dd16ce609b20ed7b350e41000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4982,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b7575e23b33a2db2937202fd65d9f8be466f4705000000000000000000000000b7575e23b33a2db2937202fd65d9f8be466f4705000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4983,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000ea4616d1a8d0e67fbde645cdf8aa29889fa5ff90000000000000000000000000ea4616d1a8d0e67fbde645cdf8aa29889fa5ff9000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4984,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e565d1128b56525e69e8acad62fe5d08469581e0000000000000000000000001e565d1128b56525e69e8acad62fe5d08469581e000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4986,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d81a7755f7c2fec66f327e4a9b0363943884afb8000000000000000000000000d81a7755f7c2fec66f327e4a9b0363943884afb8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4987,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000374c0ca51fba5702c8b087344a12455676c60ee2000000000000000000000000374c0ca51fba5702c8b087344a12455676c60ee200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4988,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094de68e06d7aea8effab7f454850646040daea9300000000000000000000000094de68e06d7aea8effab7f454850646040daea9300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4989,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e6a38ffeec8ab6d0ac884c9b3bfebdd901f04241000000000000000000000000e6a38ffeec8ab6d0ac884c9b3bfebdd901f0424100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4990,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ec8d2c72c00062bdc20e0114fb766470f778a6ac000000000000000000000000ec8d2c72c00062bdc20e0114fb766470f778a6ac000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4991,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e43ba864a61900bd2a23585c6a8d49ba806b8ff0000000000000000000000003e43ba864a61900bd2a23585c6a8d49ba806b8ff00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4992,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fcec9538657e734511c93a4e6a6ea1cffd8fda85000000000000000000000000fcec9538657e734511c93a4e6a6ea1cffd8fda8500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4993,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c96588b5f9e6fd600f3dcab3b1fd762db8e37cbb000000000000000000000000c96588b5f9e6fd600f3dcab3b1fd762db8e37cbb00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4994,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac296e024b243a852e3be0ba06c60768c7673c69000000000000000000000000ac296e024b243a852e3be0ba06c60768c7673c69000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4995,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b575fb20f76844dd7b6f7eee023853ac30929750000000000000000000000000b575fb20f76844dd7b6f7eee023853ac3092975000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4996,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c2d61e516e839ac73f28fb1221c10a67228bd45c000000000000000000000000c2d61e516e839ac73f28fb1221c10a67228bd45c00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4997,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f65ab942c891d416a8769afe0c391d20406b59e0000000000000000000000006f65ab942c891d416a8769afe0c391d20406b59e00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4998,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fca21664dc233ff13fc5a495625f7917ff2be070000000000000000000000000fca21664dc233ff13fc5a495625f7917ff2be07000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -4999,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000935d6c2f716a3a0918e8490bf3a4d4e87419df6f000000000000000000000000935d6c2f716a3a0918e8490bf3a4d4e87419df6f000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5000,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e243cd3a0155dc19d8a8f32ce74a83d5860e18b9000000000000000000000000e243cd3a0155dc19d8a8f32ce74a83d5860e18b900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5001,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba741874a06713b2bc166671b176773d00f7c6d1000000000000000000000000ba741874a06713b2bc166671b176773d00f7c6d100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5002,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e4d6c5e77d31dac186f05528eec0a4746d23c7db000000000000000000000000e4d6c5e77d31dac186f05528eec0a4746d23c7db00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5003,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f006417289e9fa4d389a1af4820d48199fb16480000000000000000000000003f006417289e9fa4d389a1af4820d48199fb164800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5004,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000af362e53cbc16264fdd94ba3ea18a8cd9b3180f1000000000000000000000000af362e53cbc16264fdd94ba3ea18a8cd9b3180f1000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5005,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c031d60dad0ce9d34206fd69c0b9abc7e13f6830000000000000000000000004c031d60dad0ce9d34206fd69c0b9abc7e13f68300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5006,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c2c2dd738f3f7e343eab709ed2d22051073690dd000000000000000000000000c2c2dd738f3f7e343eab709ed2d22051073690dd00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5008,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ab4d61d82ceb64a08746ac480eb5167de0c2da08000000000000000000000000ab4d61d82ceb64a08746ac480eb5167de0c2da0800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5009,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a5404a3cf7d03bbd89132894c1ac01bcac00ac4d000000000000000000000000a5404a3cf7d03bbd89132894c1ac01bcac00ac4d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5010,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000809a585650f22cff10919f2948f37f0a1d9f33b7000000000000000000000000809a585650f22cff10919f2948f37f0a1d9f33b700000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5011,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006c78d3dfe8f26585a032dd8abf79b365346f33c80000000000000000000000006c78d3dfe8f26585a032dd8abf79b365346f33c800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5012,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fb875567a3ed86e74d3737cbee33225b6473a3d5000000000000000000000000fb875567a3ed86e74d3737cbee33225b6473a3d500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5013,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000515b96a55c07a19f8746d12007202f277b1dabaa000000000000000000000000515b96a55c07a19f8746d12007202f277b1dabaa00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5014,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b7b698ba27395fae0465abd58beba754cc5ae3ca000000000000000000000000b7b698ba27395fae0465abd58beba754cc5ae3ca00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5015,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000855560d275ed022d5b6d45fba80ae67f53051d31000000000000000000000000855560d275ed022d5b6d45fba80ae67f53051d3100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5016,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d8d20beb8f82b5b8d102fa93d8b605f7242105e0000000000000000000000000d8d20beb8f82b5b8d102fa93d8b605f7242105e00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5017,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a42ad380770c10cfe312e5ef065074f11a5a8ab7000000000000000000000000a42ad380770c10cfe312e5ef065074f11a5a8ab700000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5018,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008bec3f6747c84d8af97a832a6b53030075f703e80000000000000000000000008bec3f6747c84d8af97a832a6b53030075f703e800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5019,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000022841f046f9761539534ce93f842943812a2c01a00000000000000000000000022841f046f9761539534ce93f842943812a2c01a00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5020,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a5404a3cf7d03bbd89132894c1ac01bcac00ac4d000000000000000000000000a5404a3cf7d03bbd89132894c1ac01bcac00ac4d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5021,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000474f5e6716658554003ab54b97bba005622293c6000000000000000000000000474f5e6716658554003ab54b97bba005622293c600000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5023,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000007c3d560e0f7ae4decb435172b85c7bfde30f76100000000000000000000000007c3d560e0f7ae4decb435172b85c7bfde30f76100000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5024,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c7a06a1decad2430c0f785520caf40830a58dd70000000000000000000000000c7a06a1decad2430c0f785520caf40830a58dd700000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5025,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000114d2e9ce76c1adb54327bdee1580101e5b10899000000000000000000000000114d2e9ce76c1adb54327bdee1580101e5b1089900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5026,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006c6d80a298edb9350611812fb0b6faaab16531d90000000000000000000000006c6d80a298edb9350611812fb0b6faaab16531d900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5027,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000088aa5837fd33ddc353fb55983d99f19d6dbbc4aa00000000000000000000000088aa5837fd33ddc353fb55983d99f19d6dbbc4aa00000000000000000000000000000000000000000000000000b4d397ecf3a7f800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5028,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d94f2fb24978abcd03d6211861624f4762ead476000000000000000000000000d94f2fb24978abcd03d6211861624f4762ead47600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5029,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000347f37f4ed042a208f1be1202aa0577b1d5f1a31000000000000000000000000347f37f4ed042a208f1be1202aa0577b1d5f1a3100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5030,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000215b9442daa7055c8b732d557ff01cd2ee22cba5000000000000000000000000215b9442daa7055c8b732d557ff01cd2ee22cba500000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5031,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea2903d63ac3cf003a9b7a05084c29c463c89892000000000000000000000000ea2903d63ac3cf003a9b7a05084c29c463c8989200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5032,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000feef8f3abff528358d86294ddb6fbb4ff0e26d8a000000000000000000000000feef8f3abff528358d86294ddb6fbb4ff0e26d8a00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5033,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000234e5ece80de8d99de5cf12e4a8dabe1ae1c9cde000000000000000000000000234e5ece80de8d99de5cf12e4a8dabe1ae1c9cde00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5034,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a75ff1bad5d7949e80cea17d64af301bdcc74dcb000000000000000000000000a75ff1bad5d7949e80cea17d64af301bdcc74dcb00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5035,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fad12de52a35f4c7dc73b89368f20f38efbf406e000000000000000000000000fad12de52a35f4c7dc73b89368f20f38efbf406e00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5036,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e895819c3b9a0d2eb84ffbe745a6a9881c2322d1000000000000000000000000e895819c3b9a0d2eb84ffbe745a6a9881c2322d1000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5037,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d28c29828fada742312f92a5c53188c3654666c9000000000000000000000000d28c29828fada742312f92a5c53188c3654666c9000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5038,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fb16bc5c386ee0714fde56f78832695e569f5643000000000000000000000000fb16bc5c386ee0714fde56f78832695e569f564300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5039,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f39772b205e4e74b4eb2aefacc4208aca60c23ff000000000000000000000000f39772b205e4e74b4eb2aefacc4208aca60c23ff000000000000000000000000000000000000000000000000006d82c6d4a77f6300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5040,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b63d6fb10663f481a8b6f2be5c4dcbddb8fb12ac000000000000000000000000b63d6fb10663f481a8b6f2be5c4dcbddb8fb12ac00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5041,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002507c70bd624a4e873fb016e45b60e65ceb9e68a0000000000000000000000002507c70bd624a4e873fb016e45b60e65ceb9e68a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5042,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e315d07fd063fc2c6784a1ab0bdc5292402c0564000000000000000000000000e315d07fd063fc2c6784a1ab0bdc5292402c056400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5043,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000038e47a84ab5fb6970a50d282bf46db995f1cd6cb00000000000000000000000038e47a84ab5fb6970a50d282bf46db995f1cd6cb000000000000000000000000000000000000000000000000003570ffc60a1c7900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5045,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007e5af51bd0edbfa5a622370427331466ad140cc30000000000000000000000007e5af51bd0edbfa5a622370427331466ad140cc300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5048,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000acd559d2284cc8c01d0e9bcb0d802f66efb5cd45000000000000000000000000acd559d2284cc8c01d0e9bcb0d802f66efb5cd450000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5049,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d9c152cd51f1f4bc34395f0cd8e906bccf9a103b000000000000000000000000d9c152cd51f1f4bc34395f0cd8e906bccf9a103b00000000000000000000000000000000000000000000000000f6d4bf351f523d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5050,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006328647e2fadfee689f1bd53d4fd6958e3ae8dc00000000000000000000000006328647e2fadfee689f1bd53d4fd6958e3ae8dc00000000000000000000000000000000000000000000000000022718923b9ce0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5051,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000020c609472f22804ed2dbc161a6dcc7495e577ff700000000000000000000000020c609472f22804ed2dbc161a6dcc7495e577ff7000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5053,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea1705996645f718a575ca7bafee22e27e2faf52000000000000000000000000ea1705996645f718a575ca7bafee22e27e2faf5200000000000000000000000000000000000000000000000000243030f2a131d600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5054,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005365471fdc9e4e2423026b4120243b8cd43f44820000000000000000000000005365471fdc9e4e2423026b4120243b8cd43f448200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5055,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000744369c5ca6caae54c50bc8afb2fab3492b4e9b5000000000000000000000000744369c5ca6caae54c50bc8afb2fab3492b4e9b5000000000000000000000000000000000000000000000000001c196b162ad80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5056,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b005d1f62b0ef700b7fecc88c53e725a5e7ef115000000000000000000000000b005d1f62b0ef700b7fecc88c53e725a5e7ef11500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5057,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fb150564534e5c910bffafac2e114d5766ad523e000000000000000000000000fb150564534e5c910bffafac2e114d5766ad523e00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5058,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009672bf43e2e9092b28c9450f0e6cea60245d3f100000000000000000000000009672bf43e2e9092b28c9450f0e6cea60245d3f1000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5059,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000068ebd81edcf5f1e11c3807c75b98ddee6409513700000000000000000000000068ebd81edcf5f1e11c3807c75b98ddee6409513700000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5060,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ee6b7a44d790a125c0fa574e113dc7d9b0d7722c000000000000000000000000ee6b7a44d790a125c0fa574e113dc7d9b0d7722c0000000000000000000000000000000000000000000000000019000c7ba8480000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5061,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008262e1fe3ad8dedae6610b108bd0e17ecbce70320000000000000000000000008262e1fe3ad8dedae6610b108bd0e17ecbce703200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5062,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008ac738ef43a130a3f72e600c2719df1889e5c96c0000000000000000000000008ac738ef43a130a3f72e600c2719df1889e5c96c000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5063,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000006a77e6b069cecf50bb5b4d4b0359619c91b6b1100000000000000000000000006a77e6b069cecf50bb5b4d4b0359619c91b6b1100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5064,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008a74324b8fa2c48c88ccf73bc440e06b92a487800000000000000000000000008a74324b8fa2c48c88ccf73bc440e06b92a4878000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5065,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000917b0d7b1ae65924d096a3d726c882b20828ff90000000000000000000000000917b0d7b1ae65924d096a3d726c882b20828ff900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5066,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e2057ac34968dc23e40b8a926531afa4950777b0000000000000000000000000e2057ac34968dc23e40b8a926531afa4950777b00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5067,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c5c9821a3166b745500dfefbcf75eebe94f3bc31000000000000000000000000c5c9821a3166b745500dfefbcf75eebe94f3bc3100000000000000000000000000000000000000000000000000040b1783e7c30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5068,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001828ea84f0fc021a437f387b09e9efa92da08a0b0000000000000000000000001828ea84f0fc021a437f387b09e9efa92da08a0b00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5069,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032f5b4a9cddc363919f0f4a3d558b2fec57c082a00000000000000000000000032f5b4a9cddc363919f0f4a3d558b2fec57c082a00000000000000000000000000000000000000000000000000158d80bd91057200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5070,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c2b45fd77c27d30bbbffad298e9c19dd658e179a000000000000000000000000c2b45fd77c27d30bbbffad298e9c19dd658e179a0000000000000000000000000000000000000000000000000061b24946da450000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5071,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000adfed7f23a61f2e7a5f2033f3de64c3c19322c1c000000000000000000000000adfed7f23a61f2e7a5f2033f3de64c3c19322c1c000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5072,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bccd47e23ff721f0f14078c6d6b3dfc8d1250128000000000000000000000000bccd47e23ff721f0f14078c6d6b3dfc8d1250128000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5073,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008174ea753c3625514685426b042f1a590d2b84d60000000000000000000000008174ea753c3625514685426b042f1a590d2b84d6000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5074,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d81fc84e3efa1022809a03d4a43dfd83ad695fbd000000000000000000000000d81fc84e3efa1022809a03d4a43dfd83ad695fbd000000000000000000000000000000000000000000000000002b0583e48f280000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5075,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001ca849c36a41e248bcb1bf3b61d0c1d3a05330160000000000000000000000001ca849c36a41e248bcb1bf3b61d0c1d3a053301600000000000000000000000000000000000000000000000000901471898663ee00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2d46ca45812591aac5b3c5720321a653456d820965cb8ddfdf9caec058c4ed97,2022-05-22 09:40:49.000 UTC,0,true -5076,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000083d553362dfc0c1295e98f879edc98d54a8d885400000000000000000000000083d553362dfc0c1295e98f879edc98d54a8d885400000000000000000000000000000000000000000000000000a8cd9abaead50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5077,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b264a584feeb81978319c84c96aa71fc7fccc652000000000000000000000000b264a584feeb81978319c84c96aa71fc7fccc6520000000000000000000000000000000000000000000000000017969a87065a3900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5078,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f964a658db4f29d1942eb07abc7927a0c09f10c8000000000000000000000000f964a658db4f29d1942eb07abc7927a0c09f10c80000000000000000000000000000000000000000000000000048cf7afa779d4c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5079,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e4b5364b23202aa18bb38c6b82bcc0910ad8eec4000000000000000000000000e4b5364b23202aa18bb38c6b82bcc0910ad8eec400000000000000000000000000000000000000000000000000411de34a91230000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5080,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000434a8f647db4b515560a3f9b8d2518550fc351e2000000000000000000000000434a8f647db4b515560a3f9b8d2518550fc351e2000000000000000000000000000000000000000000000000001d96f0dad0230000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5081,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003efedddeed8d7eaeb7d2d964f4f365cc66cd9e130000000000000000000000003efedddeed8d7eaeb7d2d964f4f365cc66cd9e1300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5082,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000007b8bafdbbfb50a891e627d20508cda2988b817260000000000000000000000007b8bafdbbfb50a891e627d20508cda2988b81726000000000000000000000000000000000000000000000000000000000098968000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -5083,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000090f21c3b410072a886703c1a30f70378c8367bac00000000000000000000000090f21c3b410072a886703c1a30f70378c8367bac00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5084,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d83d580e194ed1d3df1d1315912c905ebb21d26a000000000000000000000000d83d580e194ed1d3df1d1315912c905ebb21d26a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5085,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000060a4c36f24e7c8668a5533766d51d50a5331366d00000000000000000000000060a4c36f24e7c8668a5533766d51d50a5331366d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5086,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000005c2930356784c160a667c5673b2ef1996b9d69570000000000000000000000005c2930356784c160a667c5673b2ef1996b9d6957000000000000000000000000000000000000000000000001de2bdb8264d4cb8500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -5087,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000091f886f277cb32c24455b2fb8695dc1a1aad01d600000000000000000000000091f886f277cb32c24455b2fb8695dc1a1aad01d600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5088,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b7645f44ab4bd0a4edd00db6a4da9074fb8d8f80000000000000000000000001b7645f44ab4bd0a4edd00db6a4da9074fb8d8f800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5089,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000642970fa022ea7e17d4927691f59c3ba46554cb2000000000000000000000000642970fa022ea7e17d4927691f59c3ba46554cb200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5090,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3b9ce7f164a8a7e520ac46ba7eac65ae2394d74000000000000000000000000f3b9ce7f164a8a7e520ac46ba7eac65ae2394d7400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5091,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000363508d7b605b4ef829f16a1b29968b7553733ae000000000000000000000000363508d7b605b4ef829f16a1b29968b7553733ae00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5092,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d3b604a8f4cf11588ede649f1bd8f89569198d40000000000000000000000000d3b604a8f4cf11588ede649f1bd8f89569198d400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5093,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000375ec6cf33b035b8cf5f68bcdcd4aca8bf92aea1000000000000000000000000375ec6cf33b035b8cf5f68bcdcd4aca8bf92aea100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5094,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000877b97d30ab9fdec5e09da78d5caf245ad25e027000000000000000000000000877b97d30ab9fdec5e09da78d5caf245ad25e02700000000000000000000000000000000000000000000000000000000020a0df000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -5095,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001168a9a9d9bbe07530df288e268f73e704f45c350000000000000000000000001168a9a9d9bbe07530df288e268f73e704f45c3500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5096,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000074b56f1c91a2557939db5faf7b0c8df190e653b800000000000000000000000074b56f1c91a2557939db5faf7b0c8df190e653b800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5097,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003cf61f00721fddf7ee026c33fdcd5f23d70d5ec50000000000000000000000003cf61f00721fddf7ee026c33fdcd5f23d70d5ec500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5098,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000059651d28e14a422e14cac75a1adc07fa8d743afb00000000000000000000000059651d28e14a422e14cac75a1adc07fa8d743afb00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5099,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005b1030ddf0fec2b6136550c8195ae99caddf4a680000000000000000000000005b1030ddf0fec2b6136550c8195ae99caddf4a6800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5100,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b6db660ec54b809579f70b901aad272c45834910000000000000000000000001b6db660ec54b809579f70b901aad272c458349100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5101,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000db23e2c8d54973df91917e22943b65d99b050b78000000000000000000000000db23e2c8d54973df91917e22943b65d99b050b7800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5102,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037a8209e3e658e16ad62361cc1560359324f703400000000000000000000000037a8209e3e658e16ad62361cc1560359324f703400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5103,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000070cf8841372eab5d939ce3f7703f068ac4ea92e000000000000000000000000070cf8841372eab5d939ce3f7703f068ac4ea92e000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5104,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f45f9b40c7a7fa66e2d1eb259a463ed60d0701b0000000000000000000000002f45f9b40c7a7fa66e2d1eb259a463ed60d0701b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5105,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003664349a38d509eba3b9477f26b8c9c900bec89b0000000000000000000000003664349a38d509eba3b9477f26b8c9c900bec89b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5106,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000042b801dedb7f2c90bff9c787ca7d50be659c925900000000000000000000000042b801dedb7f2c90bff9c787ca7d50be659c925900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5107,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ec5b8820356f4b53b6985e7fed01a7911f54d2d0000000000000000000000007ec5b8820356f4b53b6985e7fed01a7911f54d2d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5108,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001125f5d40d3708bf9ba2438d542b125707be24620000000000000000000000001125f5d40d3708bf9ba2438d542b125707be246200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5109,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000091db989532cb978665423ad55fd8b9cb0476f5d100000000000000000000000091db989532cb978665423ad55fd8b9cb0476f5d100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5110,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006b140f83c7a2502a36f71fca69aef1bea0223e460000000000000000000000006b140f83c7a2502a36f71fca69aef1bea0223e4600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5111,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f77c54df6e8783ebb224695866dea18757cfce1a000000000000000000000000f77c54df6e8783ebb224695866dea18757cfce1a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5112,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd7b0dc4cc48e8748fb3d30be2b4b05ac2dcb32b000000000000000000000000dd7b0dc4cc48e8748fb3d30be2b4b05ac2dcb32b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5115,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a43e62c525531a21620addbac63a1c31f36d1fc6000000000000000000000000a43e62c525531a21620addbac63a1c31f36d1fc600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5116,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ab120e7d26d6aadd2034e7dc8ee9e71b6776c010000000000000000000000006ab120e7d26d6aadd2034e7dc8ee9e71b6776c0100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5117,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d4f6c31a81d46725c352889c6b2e12d2f9108d9a000000000000000000000000d4f6c31a81d46725c352889c6b2e12d2f9108d9a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5118,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009ac03be125c9dc1ba195a4724246f4e2938191800000000000000000000000009ac03be125c9dc1ba195a4724246f4e29381918000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5119,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007604a95fa996c51ed0c7b79cc932441efe403fe40000000000000000000000007604a95fa996c51ed0c7b79cc932441efe403fe400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5120,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b8663965dc40d17aad211936daf6267b5f7a16b0000000000000000000000002b8663965dc40d17aad211936daf6267b5f7a16b000000000000000000000000000000000000000000000000001f1abf669efb5e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5121,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000081a473df6d2c7ed704230153ccb8c5d9a505b07000000000000000000000000081a473df6d2c7ed704230153ccb8c5d9a505b0700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5122,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045ea183a7daf2b82610a4f8e68f65243c0f360e900000000000000000000000045ea183a7daf2b82610a4f8e68f65243c0f360e9000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5123,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c53a9720211ad3370fae5837371462b1eb1de0db000000000000000000000000c53a9720211ad3370fae5837371462b1eb1de0db000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5124,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f55ef9fcad3d864cd08d30d6c92acd61f5ce5f86000000000000000000000000f55ef9fcad3d864cd08d30d6c92acd61f5ce5f8600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5125,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000731ae2c51a3f8d765fde66d14e669dcf030a4a4b000000000000000000000000731ae2c51a3f8d765fde66d14e669dcf030a4a4b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5126,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003daa719ad16020634aacfebf13defeceead15f510000000000000000000000003daa719ad16020634aacfebf13defeceead15f510000000000000000000000000000000000000000000000000008a5ec77e6053b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5127,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000015c09552494f8e969f1d96b4b83735b72f491db400000000000000000000000015c09552494f8e969f1d96b4b83735b72f491db4000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5128,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c13ffa37fdc78fadd8ed0e9bf9833a435725fd77000000000000000000000000c13ffa37fdc78fadd8ed0e9bf9833a435725fd7700000000000000000000000000000000000000000000000000356e1cd5a0107200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5129,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000025caf39455495c39c599700bf7187718d195f49100000000000000000000000025caf39455495c39c599700bf7187718d195f49100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5130,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003fde77ca6fab639e4b4d02509b5dab5c6e6fcefe0000000000000000000000003fde77ca6fab639e4b4d02509b5dab5c6e6fcefe00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5131,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001d17e9a93e0396d0eb5d5e48b9b54782f6d1a8360000000000000000000000001d17e9a93e0396d0eb5d5e48b9b54782f6d1a836000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5132,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d4d00d3fc5aa2cba1df644ab6e89df38cb276730000000000000000000000000d4d00d3fc5aa2cba1df644ab6e89df38cb2767300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5133,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000534453452c6f72e5bbf7c4afa9e76228c2d0c0a4000000000000000000000000534453452c6f72e5bbf7c4afa9e76228c2d0c0a400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5134,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009437cadead20b62e178494105c9023c874ceef9a0000000000000000000000009437cadead20b62e178494105c9023c874ceef9a00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5135,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000046dfac775041c1fa8ca013c25fdb1fb61cd6642000000000000000000000000046dfac775041c1fa8ca013c25fdb1fb61cd6642000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5136,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000464cd1b13f62d25226f1d38dc0ecfea2a38e1a10000000000000000000000000464cd1b13f62d25226f1d38dc0ecfea2a38e1a1000000000000000000000000000000000000000000000000001d413fda682e4f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5137,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a8b1567856358e3f0009c90c2075fac8a4019620000000000000000000000003a8b1567856358e3f0009c90c2075fac8a40196200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5138,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071a5f9098e14d527bf9f183a6902fa423f0c5ec800000000000000000000000071a5f9098e14d527bf9f183a6902fa423f0c5ec8000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5139,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006483218c93004f184b20f9a8eba04c408104ca4e0000000000000000000000006483218c93004f184b20f9a8eba04c408104ca4e00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5140,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006c9ecedb72533f58e189c4d1291d87312f1253880000000000000000000000006c9ecedb72533f58e189c4d1291d87312f12538800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5141,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a0f8f9ba307045ffd866add6f7c6ddcc99f35cac000000000000000000000000a0f8f9ba307045ffd866add6f7c6ddcc99f35cac00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5142,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d44b22adcbb1be539ade0b45c392996863180ceb000000000000000000000000d44b22adcbb1be539ade0b45c392996863180ceb00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5143,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f913066302af3e8872bbc65496872d1d6f270429000000000000000000000000f913066302af3e8872bbc65496872d1d6f27042900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5144,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f579dda8080dd092e891dc6a00622f46d9b4e7b2000000000000000000000000f579dda8080dd092e891dc6a00622f46d9b4e7b200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5145,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000041f3e0ff13d91feb6f0cc3f3b5269b8d519aedd200000000000000000000000041f3e0ff13d91feb6f0cc3f3b5269b8d519aedd200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5146,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c58bc4a0a869b901644982c99f038b8268c3c9f3000000000000000000000000c58bc4a0a869b901644982c99f038b8268c3c9f300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5147,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004926f61b042442166a2942a3ec46f37cb97ba6f40000000000000000000000004926f61b042442166a2942a3ec46f37cb97ba6f4000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5148,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000096aa6052c7abf2f9a578008b3435b1cca027e0e900000000000000000000000096aa6052c7abf2f9a578008b3435b1cca027e0e900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5149,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000efb3e1a1a4a553248f7c4742a4f3ecdeb614b0c7000000000000000000000000efb3e1a1a4a553248f7c4742a4f3ecdeb614b0c7000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5150,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ccd3be5225cb8f7e58202398330d343a8254b8e4000000000000000000000000ccd3be5225cb8f7e58202398330d343a8254b8e400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5151,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae2d97a7d5e2923bae593bcec28f950bde7e7623000000000000000000000000ae2d97a7d5e2923bae593bcec28f950bde7e762300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5152,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000efb3e1a1a4a553248f7c4742a4f3ecdeb614b0c7000000000000000000000000efb3e1a1a4a553248f7c4742a4f3ecdeb614b0c7000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5153,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a11d47eebdca5a10125047259c123ab22716f4f0000000000000000000000000a11d47eebdca5a10125047259c123ab22716f4f0000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5154,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007e6ce0ba52556d871edfdef653b2b8c570cc89e80000000000000000000000007e6ce0ba52556d871edfdef653b2b8c570cc89e800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5155,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004637d0439527619e3dc8482c11bbc5a97ef6c4090000000000000000000000004637d0439527619e3dc8482c11bbc5a97ef6c409000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5156,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a7076b2a73c654a23d73b1007f31e0518fc3dfe4000000000000000000000000a7076b2a73c654a23d73b1007f31e0518fc3dfe4000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5157,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000681874d70d2ee3fe858c02c56e96ec722e864c6a000000000000000000000000681874d70d2ee3fe858c02c56e96ec722e864c6a000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5158,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6612097eff6defa0f70a20308d98db40f0d8b73000000000000000000000000b6612097eff6defa0f70a20308d98db40f0d8b7300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5159,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000003d17633cde823657abce86e514785e4fc19161000000000000000000000000003d17633cde823657abce86e514785e4fc19161000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5161,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d75ffa03684d7b92f50b72833047963a1029f04b000000000000000000000000d75ffa03684d7b92f50b72833047963a1029f04b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5162,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006856b58f89ac4646039b5e2adcddb20fa18b590c0000000000000000000000006856b58f89ac4646039b5e2adcddb20fa18b590c00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5163,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000069e9a4dcb5cfe4776083a2a4f93437ae78e9166900000000000000000000000069e9a4dcb5cfe4776083a2a4f93437ae78e91669000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5164,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037fd65e19beccae404be8f4fb5e65b8ac7dd96fe00000000000000000000000037fd65e19beccae404be8f4fb5e65b8ac7dd96fe000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5165,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004867063da4d6c3717bdc0a5d87a370a022bbb8aa0000000000000000000000004867063da4d6c3717bdc0a5d87a370a022bbb8aa000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5166,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c03086a0db933b7e5ffe8430f698a955b25859b0000000000000000000000008c03086a0db933b7e5ffe8430f698a955b25859b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5167,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ce3711b0900c00912b8b388ab0c619437e9bf6a9000000000000000000000000ce3711b0900c00912b8b388ab0c619437e9bf6a9000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5168,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001641669254cb47d614586c0c049b653f247a54a40000000000000000000000001641669254cb47d614586c0c049b653f247a54a4000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5169,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000470bd03ead42a683dc30ac39ec136a0c0325fb2b000000000000000000000000470bd03ead42a683dc30ac39ec136a0c0325fb2b000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5170,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000054baccf09a47265b1166364dc17f560e58462c2e00000000000000000000000054baccf09a47265b1166364dc17f560e58462c2e00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5171,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000012897bcabbdb34a9761562c59eab49b22b59e8b700000000000000000000000012897bcabbdb34a9761562c59eab49b22b59e8b70000000000000000000000000000000000000000000000000009a0c5a5428f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5172,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004778c3cd7bd498e8c8212775876c95352b6780ab0000000000000000000000004778c3cd7bd498e8c8212775876c95352b6780ab000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5173,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009a288945a3524d996265ff3c2ecf5ed329b192f60000000000000000000000009a288945a3524d996265ff3c2ecf5ed329b192f6000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5174,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000400b1f85bcac75499ac094d72a2aee0aa88b9236000000000000000000000000400b1f85bcac75499ac094d72a2aee0aa88b923600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5175,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000efb3e1a1a4a553248f7c4742a4f3ecdeb614b0c7000000000000000000000000efb3e1a1a4a553248f7c4742a4f3ecdeb614b0c7000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5176,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e900fd85cae85971e684dd56b2eee1c542bb08e0000000000000000000000000e900fd85cae85971e684dd56b2eee1c542bb08e000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5177,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a55e93fd3cce2cf40d43824b2f18889f404ddf57000000000000000000000000a55e93fd3cce2cf40d43824b2f18889f404ddf57000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5178,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001eea4cd714c11cbfa1117325743fab95140c71050000000000000000000000001eea4cd714c11cbfa1117325743fab95140c710500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5179,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ec0153679dc5f92de0e593a11a855f68e79263a0000000000000000000000005ec0153679dc5f92de0e593a11a855f68e79263a00000000000000000000000000000000000000000000000001d5c3e8b3145a7200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5180,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008212abb29d65e20b5dba67950abc03d8e88af32d0000000000000000000000008212abb29d65e20b5dba67950abc03d8e88af32d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5181,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004608a905c141dfd4bd31280bafacdc29d40092c70000000000000000000000004608a905c141dfd4bd31280bafacdc29d40092c7000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5182,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000034b5b3a130dc7fee0ba9eab67dcfa7bb9342d0b800000000000000000000000034b5b3a130dc7fee0ba9eab67dcfa7bb9342d0b800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5183,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000057c6fc00ada30222a5d25f48c07692f352d11abd00000000000000000000000057c6fc00ada30222a5d25f48c07692f352d11abd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5184,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006cbda63ab9186d62792b6cacb45ce9dcef4faee90000000000000000000000006cbda63ab9186d62792b6cacb45ce9dcef4faee9000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5185,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d88b64bdea80595c13e0bde5782998a3dc314903000000000000000000000000d88b64bdea80595c13e0bde5782998a3dc31490300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5186,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fcd02843e312979e7e07e65725136ab91e0bd460000000000000000000000000fcd02843e312979e7e07e65725136ab91e0bd46000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5187,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a3d0b7a441e85b99b876c72d0d031ed27b307ff0000000000000000000000002a3d0b7a441e85b99b876c72d0d031ed27b307ff00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5188,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a886fb5ae7e8f1d45e9f76e5c8d352f829968726000000000000000000000000a886fb5ae7e8f1d45e9f76e5c8d352f82996872600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5189,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c52971bb63f84c467e38b95e1492d613c9380910000000000000000000000000c52971bb63f84c467e38b95e1492d613c93809100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5190,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006abff89d51064459b897e00a5416aec2c4ce2ea70000000000000000000000006abff89d51064459b897e00a5416aec2c4ce2ea700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5191,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008b700bd8e560b63738c7ca36a22ad47b51af3fdd0000000000000000000000008b700bd8e560b63738c7ca36a22ad47b51af3fdd00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5192,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f541d31546b4c1cc5f3c78f26515dcb7290d2e63000000000000000000000000f541d31546b4c1cc5f3c78f26515dcb7290d2e6300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5194,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b63aba9dd4b07c20d1d21430274e2f1b927cad01000000000000000000000000b63aba9dd4b07c20d1d21430274e2f1b927cad0100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5196,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6e43242bc4eaf2fedd216884524951a296e9883000000000000000000000000d6e43242bc4eaf2fedd216884524951a296e9883000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5197,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c57e133430fc4fc73d9994afc75e9a3e3a2bfdd0000000000000000000000004c57e133430fc4fc73d9994afc75e9a3e3a2bfdd00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5198,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f6af8f97c444fe8454af14023e4f316815101af2000000000000000000000000f6af8f97c444fe8454af14023e4f316815101af200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5199,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000009accc104a0453083c5c6e225c77fef20775c1ddf0000000000000000000000000000000000000000000000172238756f25ef922f,0x1a983c22304ace95fe4f64f7b08a227bfdbe9702ceca7a824aafcd59e4b43b0d,2022-04-17 18:14:58.000 UTC,0,true -5200,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f69269c8bed1981b5532e2aaeadfbab34dc596fe000000000000000000000000f69269c8bed1981b5532e2aaeadfbab34dc596fe000000000000000000000000000000000000000000000000004b98dffd817b3100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5201,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017d2af86b679a934431fb0530f6dec73c572ba2e00000000000000000000000017d2af86b679a934431fb0530f6dec73c572ba2e000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5202,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b23e35e554c48005f8fe2dff278ef8518133a02a000000000000000000000000b23e35e554c48005f8fe2dff278ef8518133a02a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5203,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ddf2649e6bc35d8af214da61308bf4e43b0f6b20000000000000000000000004ddf2649e6bc35d8af214da61308bf4e43b0f6b2000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5204,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000757f2b4dc16549d1171ed9afa9ce79408e07e8c4000000000000000000000000757f2b4dc16549d1171ed9afa9ce79408e07e8c400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5205,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a27a24432421dcbd4a7f62c444ab68277e705420000000000000000000000003a27a24432421dcbd4a7f62c444ab68277e70542000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5206,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001febf84fee73d9618f213a201ddad1651fdecc110000000000000000000000001febf84fee73d9618f213a201ddad1651fdecc1100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5207,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3e03bf610c2abc4888aa24a15ff225ac9a6df3b000000000000000000000000d3e03bf610c2abc4888aa24a15ff225ac9a6df3b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5208,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000025edbddad5c8842dfe510b96f0b64a6fe48ba5d900000000000000000000000025edbddad5c8842dfe510b96f0b64a6fe48ba5d9000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5209,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004043bff29f796ecbb2df2d3527b736436321e1bb0000000000000000000000004043bff29f796ecbb2df2d3527b736436321e1bb00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5210,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a875bbb57298590f72ee1659fbd45973cdf7ff30000000000000000000000001a875bbb57298590f72ee1659fbd45973cdf7ff3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5211,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f4a4813fb0285d92ec2f66cb4c90491776fd279a000000000000000000000000f4a4813fb0285d92ec2f66cb4c90491776fd279a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5212,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000084336491f96883b1c236ce63a3921cfcf6dbadd500000000000000000000000084336491f96883b1c236ce63a3921cfcf6dbadd5000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5213,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f2edd4daae9e807dc607b84c98a919fad8ac2120000000000000000000000006f2edd4daae9e807dc607b84c98a919fad8ac21200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5214,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002cb4bb6da78577e18b183f5ec93995b3e42fe4c80000000000000000000000002cb4bb6da78577e18b183f5ec93995b3e42fe4c8000000000000000000000000000000000000000000000000013fbe85edc9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5215,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000136ef350085641008bdc271a4eb19b084d40bc55000000000000000000000000136ef350085641008bdc271a4eb19b084d40bc5500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5216,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c3f0ecec2511bc9c80f9a22f581bc8ded71b5dac000000000000000000000000c3f0ecec2511bc9c80f9a22f581bc8ded71b5dac00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5217,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001d967a67e2f3a87952cb61aa47bee567ed9801d60000000000000000000000001d967a67e2f3a87952cb61aa47bee567ed9801d600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5218,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006492af84362e4a176b9672ef3759099bf401051d0000000000000000000000006492af84362e4a176b9672ef3759099bf401051d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5219,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ee67daf4d0e40af9bb29d0c8a9ef7e88bee4a67a000000000000000000000000ee67daf4d0e40af9bb29d0c8a9ef7e88bee4a67a000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5220,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a932e8b317d3193e258a5b47e8932f961f1ad380000000000000000000000005a932e8b317d3193e258a5b47e8932f961f1ad38000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5221,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b38857d4c47997ebb95cb6b43c9fcdf212504c11000000000000000000000000b38857d4c47997ebb95cb6b43c9fcdf212504c1100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5222,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a192e8015f2e7fc714f7ccafc4a8cc951dae32d0000000000000000000000000a192e8015f2e7fc714f7ccafc4a8cc951dae32d000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5223,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002901e47e5ca1f6b3a1a8fa1dfff88fda27782e0c0000000000000000000000002901e47e5ca1f6b3a1a8fa1dfff88fda27782e0c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5224,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e31fdb4dec937e220b28adeef0cd4c2563f3a5c0000000000000000000000001e31fdb4dec937e220b28adeef0cd4c2563f3a5c00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5225,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000051f7851943420194e50dbbf76abbc60faa5cb24400000000000000000000000051f7851943420194e50dbbf76abbc60faa5cb244000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5226,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a18d51cd028e4cb4fffd44c385dc67144fefcb00000000000000000000000001a18d51cd028e4cb4fffd44c385dc67144fefcb0000000000000000000000000000000000000000000000000004a9b638448800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5227,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004748a7408abac38fcefc62e35da9868eb3b78ebe0000000000000000000000004748a7408abac38fcefc62e35da9868eb3b78ebe000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5228,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d343187fe6ec0578a350c8255bae21ecf2643ca0000000000000000000000000d343187fe6ec0578a350c8255bae21ecf2643ca000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5229,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b43b826750f2e99b722254b860f7235d15c6c736000000000000000000000000b43b826750f2e99b722254b860f7235d15c6c73600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5230,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df0ce34b903c62a5cfb43b620eaeb4dd726b92c8000000000000000000000000df0ce34b903c62a5cfb43b620eaeb4dd726b92c8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5231,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3503c57358b3b792ece9351c0630b3f35721712000000000000000000000000f3503c57358b3b792ece9351c0630b3f35721712000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5232,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055a134595ded9987d1ebd6bd39e28c177bbf5cf900000000000000000000000055a134595ded9987d1ebd6bd39e28c177bbf5cf900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5233,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c166c81a8dcfd45a44267b10dfd6192a5a27ea3b000000000000000000000000c166c81a8dcfd45a44267b10dfd6192a5a27ea3b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5234,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f210e462eef3da98fc1a4ebff0706e74d4f521d0000000000000000000000003f210e462eef3da98fc1a4ebff0706e74d4f521d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5235,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039ebb809e994739b83c0d51106af549fbd0fb21f00000000000000000000000039ebb809e994739b83c0d51106af549fbd0fb21f000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5236,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c78e2adc94900e03fe98cfa7aecfa6d8b32559d0000000000000000000000002c78e2adc94900e03fe98cfa7aecfa6d8b32559d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5237,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005f9d95c03776186f58d6021d6cff7eedea4ece030000000000000000000000005f9d95c03776186f58d6021d6cff7eedea4ece03000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5239,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c13f93146dd9cf19a1b1a6e99c19dbec4dc10979000000000000000000000000c13f93146dd9cf19a1b1a6e99c19dbec4dc109790000000000000000000000000000000000000000000000000119854e788acd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5240,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a5d583aa33b9d2970714f37d9a4d3dd4dc39690d000000000000000000000000a5d583aa33b9d2970714f37d9a4d3dd4dc39690d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5241,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a6fe9aa605b0aceef8891076489204334d50b7c3000000000000000000000000a6fe9aa605b0aceef8891076489204334d50b7c300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5243,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008210cee4975b26ae67ec7f4e8cc505740924bee60000000000000000000000008210cee4975b26ae67ec7f4e8cc505740924bee60000000000000000000000000000000000000000000000000012094fad0d8ea700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5244,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000084df5e05e52d377ac45f588e736e37b9c77a6f3100000000000000000000000084df5e05e52d377ac45f588e736e37b9c77a6f31000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5245,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2bcba5310c6a93eb4613e7a5ecce02b25be4a4d000000000000000000000000a2bcba5310c6a93eb4613e7a5ecce02b25be4a4d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5246,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000477222d8683f29947c50c67d8c8ba9955aa0269e000000000000000000000000477222d8683f29947c50c67d8c8ba9955aa0269e000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5247,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021f23c8bc2875fcec3f9690cdb22a32fd389e89600000000000000000000000021f23c8bc2875fcec3f9690cdb22a32fd389e896000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5248,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e92e41395d76c7255c0cc2cafc41ecaa4bc15050000000000000000000000000e92e41395d76c7255c0cc2cafc41ecaa4bc1505000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5249,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009a5cac76fbbdcc0f1ef8e1a07ff188f6e42374000000000000000000000000009a5cac76fbbdcc0f1ef8e1a07ff188f6e4237400000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5250,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000068a180a647b6e1f0ab4d6c3930adf66d06b64d0400000000000000000000000068a180a647b6e1f0ab4d6c3930adf66d06b64d04000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5251,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d5f879cfbc6ff77b60b063ecc01b92716dbaa1af000000000000000000000000d5f879cfbc6ff77b60b063ecc01b92716dbaa1af00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5252,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef3afb502c56a4a3ce43586d62e6e4c775fc5edc000000000000000000000000ef3afb502c56a4a3ce43586d62e6e4c775fc5edc000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5254,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8d0f7cfed9ac546a6261c0c3bd99e005e8d1bc6000000000000000000000000e8d0f7cfed9ac546a6261c0c3bd99e005e8d1bc6000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5255,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001f10e1ad433711989d1620baa81c0e28aef43eff0000000000000000000000001f10e1ad433711989d1620baa81c0e28aef43eff00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5256,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc046ce31027ac1c8ac6333f686f574aa4da5e8e000000000000000000000000fc046ce31027ac1c8ac6333f686f574aa4da5e8e000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5257,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000042e4229a7aac161fac4bd0e8a8ecc7b26970aaa400000000000000000000000042e4229a7aac161fac4bd0e8a8ecc7b26970aaa4000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5258,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004dd9e316a13e69e1a1955e9b080c3eda84c839d00000000000000000000000004dd9e316a13e69e1a1955e9b080c3eda84c839d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5259,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008177d61d9ebcf431dea91a44a3de5ad9912761470000000000000000000000008177d61d9ebcf431dea91a44a3de5ad99127614700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5260,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e3bf310a2a8f882788dae5bb2266863d6bb35bf8000000000000000000000000e3bf310a2a8f882788dae5bb2266863d6bb35bf8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5261,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eff30cfe706c00caa925bfb6b7a2b3a469dd7587000000000000000000000000eff30cfe706c00caa925bfb6b7a2b3a469dd7587000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5262,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e23ea4f5031a7ff95c35f59be23915548af3ecf2000000000000000000000000e23ea4f5031a7ff95c35f59be23915548af3ecf2000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5263,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a23c1688d867fa92db4af59f579612128d443b61000000000000000000000000a23c1688d867fa92db4af59f579612128d443b6100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5264,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6ad626bbfe42a100e17881844a4b0a7b5c90ca0000000000000000000000000b6ad626bbfe42a100e17881844a4b0a7b5c90ca0000000000000000000000000000000000000000000000000004bb0cf277174a900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5265,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de4f6dd4723cfa55e0a82cb19fd82e264c2bc395000000000000000000000000de4f6dd4723cfa55e0a82cb19fd82e264c2bc395000000000000000000000000000000000000000000000000006ba0016b980a2600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5266,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004acc7859f692c540a8f18fe63f6aa4f847c076e10000000000000000000000004acc7859f692c540a8f18fe63f6aa4f847c076e100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5267,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000027ed73802cbeb0fe1653873dbb80d2ff31f3f52e00000000000000000000000027ed73802cbeb0fe1653873dbb80d2ff31f3f52e00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5268,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000213d547441446f4a9f27cc9af59bcaac052ee933000000000000000000000000213d547441446f4a9f27cc9af59bcaac052ee93300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5269,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a8de74cbe47c1602b64a4d40607761fe1cebca80000000000000000000000003a8de74cbe47c1602b64a4d40607761fe1cebca800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5270,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea20a895f36b7d8c45e2a75efed8b88945b0dfe6000000000000000000000000ea20a895f36b7d8c45e2a75efed8b88945b0dfe600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5271,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000085f5228040a3a56506a3dfdd8ddb110f5fa2532000000000000000000000000085f5228040a3a56506a3dfdd8ddb110f5fa253200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5272,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008fc2236ac32307df8ab5116024b5c73827c37ceb0000000000000000000000008fc2236ac32307df8ab5116024b5c73827c37ceb0000000000000000000000000000000000000000000000000095dc1de61d34b000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5273,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ec4738df2cd2e8c5b438720f0cc046d91db5c7d9000000000000000000000000ec4738df2cd2e8c5b438720f0cc046d91db5c7d900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5274,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000dcdbc5ef852964945ba5d4772b26dacffcd9f59d000000000000000000000000dcdbc5ef852964945ba5d4772b26dacffcd9f59d0000000000000000000000000000000000000000000000000000000002fc352a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -5275,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000035026c1fd9e765c43e335f5be94d96def205834d00000000000000000000000035026c1fd9e765c43e335f5be94d96def205834d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5276,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8d15c8b69d542b37cb046c0381f1d4bccf93b39000000000000000000000000e8d15c8b69d542b37cb046c0381f1d4bccf93b3900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5278,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cfbc289e4660ebd611f880c263dd52b81024b041000000000000000000000000cfbc289e4660ebd611f880c263dd52b81024b04100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5279,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a49d9c803a500248b8718eaa39a893bf486e6100000000000000000000000001a49d9c803a500248b8718eaa39a893bf486e61000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5280,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004cd3a4ae02572ee2889511615b0418a5692b6c2c0000000000000000000000004cd3a4ae02572ee2889511615b0418a5692b6c2c000000000000000000000000000000000000000000000000000e86572714a1ad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5281,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000081148ff43841d273b9c0ce73c39758e68a5cedeb00000000000000000000000081148ff43841d273b9c0ce73c39758e68a5cedeb00000000000000000000000000000000000000000000000000b218429a13a4ab00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5282,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff01ee666547c77061c49b87f613a26c7de81638000000000000000000000000ff01ee666547c77061c49b87f613a26c7de8163800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5283,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000033d15d8d7e51a5875640e7e580d86e84dd16ab4000000000000000000000000033d15d8d7e51a5875640e7e580d86e84dd16ab4000000000000000000000000000000000000000000000000001a4358cabc540000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5284,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000699d69f311c745187510aa6130c55f6b79d9e083000000000000000000000000699d69f311c745187510aa6130c55f6b79d9e08300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5285,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f118f2728e205bf589d871cfe7cb8cab937a3ed5000000000000000000000000f118f2728e205bf589d871cfe7cb8cab937a3ed500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5286,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff10964bbe2e6accd98c159dc49525c8c8092976000000000000000000000000ff10964bbe2e6accd98c159dc49525c8c809297600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5287,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fab259ec89398d21704b880628c9127c0b813851000000000000000000000000fab259ec89398d21704b880628c9127c0b81385100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5288,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff9f20367488f3386a97bc3897798b0e8bd1b2da000000000000000000000000ff9f20367488f3386a97bc3897798b0e8bd1b2da0000000000000000000000000000000000000000000000000000f9f14221b43b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5289,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f65d674d08d881ed614b5a10384870f5208cdb8a000000000000000000000000f65d674d08d881ed614b5a10384870f5208cdb8a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5290,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a94db14a4979e91e573caf7ac710d18514e7c43d000000000000000000000000a94db14a4979e91e573caf7ac710d18514e7c43d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5293,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000033d15d8d7e51a5875640e7e580d86e84dd16ab4000000000000000000000000033d15d8d7e51a5875640e7e580d86e84dd16ab400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5294,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa3a931e382151ab19a6f239a88275729139ee5e000000000000000000000000aa3a931e382151ab19a6f239a88275729139ee5e0000000000000000000000000000000000000000000000000005b8883354787400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5295,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000052f11eb31ea2b16d2a38d9e24f32a9c60366742000000000000000000000000052f11eb31ea2b16d2a38d9e24f32a9c6036674200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5296,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0a70396fb43b8ba490060c95aa18edc3fd75499000000000000000000000000c0a70396fb43b8ba490060c95aa18edc3fd7549900000000000000000000000000000000000000000000000001416bb02880d06300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5299,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fcabd0beb3322ae01bb0f7a6ddceb7ae08816496000000000000000000000000fcabd0beb3322ae01bb0f7a6ddceb7ae0881649600000000000000000000000000000000000000000000000000153ad037d13f7e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5300,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007cf9e4db024bafc59fbae2264b6ab91eb902a8dc0000000000000000000000007cf9e4db024bafc59fbae2264b6ab91eb902a8dc00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5301,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e58bdee94a421f967ad93a0c937681e9c75aafc0000000000000000000000006e58bdee94a421f967ad93a0c937681e9c75aafc0000000000000000000000000000000000000000000000000034ecbb6f8b00b700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5302,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008ef16fc940c3e88f1bfa1edb3615ca0ae8496a310000000000000000000000008ef16fc940c3e88f1bfa1edb3615ca0ae8496a3100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5303,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b9442b2a71a85967f59c799c0b45ea048620dad0000000000000000000000000b9442b2a71a85967f59c799c0b45ea048620dad00000000000000000000000000000000000000000000000000015e6f5ac9efb8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5304,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003eeb6da567597f5e61609ea2cd55531f61663b0a0000000000000000000000003eeb6da567597f5e61609ea2cd55531f61663b0a000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5305,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000093907de38066d70109935732757b625d636e47b600000000000000000000000093907de38066d70109935732757b625d636e47b60000000000000000000000000000000000000000000000059569dbfedc46237e00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -5307,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f785621f8ebf63207559ed2df3a087ef44d9b2c4000000000000000000000000f785621f8ebf63207559ed2df3a087ef44d9b2c4000000000000000000000000000000000000000000000000003654696dc0650000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5308,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de34f7c26fa503a3b8fe80e2df4e62a30d4dc86c000000000000000000000000de34f7c26fa503a3b8fe80e2df4e62a30d4dc86c000000000000000000000000000000000000000000000000008abda7d91f037900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5309,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000255749ce8ab1dd14c09787e7405a15ff17c24459000000000000000000000000255749ce8ab1dd14c09787e7405a15ff17c2445900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5310,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000095b3d55ebee4dda802f8b86cf08779a3ef97015b00000000000000000000000095b3d55ebee4dda802f8b86cf08779a3ef97015b000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5311,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b44367a09051fe452f9b2a2955ad97c73ad355bb000000000000000000000000b44367a09051fe452f9b2a2955ad97c73ad355bb0000000000000000000000000000000000000000000000000096e72c32e30acd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5312,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001aa008151d2dd54679a48653b4527bb4ca82e3fe0000000000000000000000001aa008151d2dd54679a48653b4527bb4ca82e3fe000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5313,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b169602074599dea52fff5e89787dca7744f42e7000000000000000000000000b169602074599dea52fff5e89787dca7744f42e70000000000000000000000000000000000000000000000000015aac31bfa817e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5314,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002af3c89625e7679083cd1c48b0b9e54387d5f5390000000000000000000000002af3c89625e7679083cd1c48b0b9e54387d5f539000000000000000000000000000000000000000000000000002e2f6e5e14800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5315,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001961b12feffeac651c293277920636d6cdd0e4dc0000000000000000000000001961b12feffeac651c293277920636d6cdd0e4dc000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5317,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000013bf4152e8b499b15f272fd61eb4dabe88072d9f00000000000000000000000013bf4152e8b499b15f272fd61eb4dabe88072d9f0000000000000000000000000000000000000000000000000096e051387c824c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5318,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000081178b143737677629d61d47199d76a32b537d9600000000000000000000000081178b143737677629d61d47199d76a32b537d960000000000000000000000000000000000000000000000000107f272d040b65200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf380a24ef40672bcacf8bc5cc2b5f38ef58081293b95ce3eaae1ef3d866b9e96,2022-08-15 20:42:51.000 UTC,0,true -5319,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b3bcf7fb3ece89c19e58ea5460dffc28ffd43aa0000000000000000000000000b3bcf7fb3ece89c19e58ea5460dffc28ffd43aa00000000000000000000000000000000000000000000000000099d8f8a5c684c500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5320,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000471f5c9e664827b81f7fc7297f64da33bd8b18b5000000000000000000000000471f5c9e664827b81f7fc7297f64da33bd8b18b5000000000000000000000000000000000000000000000000001c0289df89710000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5321,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c08f3cc0aa473f15113d36fa2398d1532e9feec2000000000000000000000000c08f3cc0aa473f15113d36fa2398d1532e9feec2000000000000000000000000000000000000000000000000004296d3418d05e800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5322,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8c29c1c75efe25e27c1d0c9e97c4ac18f24a60a000000000000000000000000b8c29c1c75efe25e27c1d0c9e97c4ac18f24a60a0000000000000000000000000000000000000000000000000033cfd4b9b19bc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5323,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009303002f61b7db55fd981e16bb01177a9bcd8bcf0000000000000000000000009303002f61b7db55fd981e16bb01177a9bcd8bcf00000000000000000000000000000000000000000000000000ab4ee308efd40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5324,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f8d870c2b7f63e9af2ec1e4690cbe196c05efc7f000000000000000000000000f8d870c2b7f63e9af2ec1e4690cbe196c05efc7f000000000000000000000000000000000000000000000000009affdd6c1757db00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5327,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c01e57d6de118e3384ce41d6cee30627af254de0000000000000000000000004c01e57d6de118e3384ce41d6cee30627af254de000000000000000000000000000000000000000000000000009f9b176b0f4df400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5329,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000835283ae92194e867f98c70d6183a5bf4923a6a0000000000000000000000000835283ae92194e867f98c70d6183a5bf4923a6a0000000000000000000000000000000000000000000000000016fc6e43b2600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5331,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008732d8a9fa97537d8c286697e9d9adc0126171750000000000000000000000008732d8a9fa97537d8c286697e9d9adc0126171750000000000000000000000000000000000000000000000000009c63e70e9c81200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5333,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a0bc05c307eda344f2a6afb2a228780e8b383af0000000000000000000000000a0bc05c307eda344f2a6afb2a228780e8b383af0000000000000000000000000000000000000000000000000059087b34ce061b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5334,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b995486de4bd894079097717fb1152ee1e6c754f000000000000000000000000b995486de4bd894079097717fb1152ee1e6c754f0000000000000000000000000000000000000000000000000008658a56c19e6000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5336,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b7596ed9c1d6e76ebeca641b810e6dddbe6ea9c5000000000000000000000000b7596ed9c1d6e76ebeca641b810e6dddbe6ea9c50000000000000000000000000000000000000000000000000042f20e077d010000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5337,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001279b4ee0d53a0056ec829fb1051e8a1356c5d9e0000000000000000000000001279b4ee0d53a0056ec829fb1051e8a1356c5d9e0000000000000000000000000000000000000000000000000031bced02db000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5338,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005f70967c0256c7bb263313058858a2cd5feb65440000000000000000000000005f70967c0256c7bb263313058858a2cd5feb654400000000000000000000000000000000000000000000000000f195a3c4ba000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5339,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d8b95a0a595a9c01f1e152c07fbdba6de643472f000000000000000000000000d8b95a0a595a9c01f1e152c07fbdba6de643472f000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5341,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aad7bd9bf8523b6812a262ecb2ca5bef5256a24e000000000000000000000000aad7bd9bf8523b6812a262ecb2ca5bef5256a24e00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5342,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002fd11c68f235ed87a4a25e0764ec1aa0c67a631c0000000000000000000000002fd11c68f235ed87a4a25e0764ec1aa0c67a631c000000000000000000000000000000000000000000000000001f8133a1914e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5343,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c977df4bbe96fe101675313874284b7e0561d8de000000000000000000000000c977df4bbe96fe101675313874284b7e0561d8de0000000000000000000000000000000000000000000000000155785e56f36ea400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5344,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007765a840b2a90464d4f4e85ba014ffe170b135be0000000000000000000000007765a840b2a90464d4f4e85ba014ffe170b135be00000000000000000000000000000000000000000000000000aa87bee538000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5345,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a308a53d18c8428339a03fe0f44ceb25c32259c0000000000000000000000000a308a53d18c8428339a03fe0f44ceb25c32259c0000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5348,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba6a5d1d74e056fb7ec1263a110f5bd9462df58a000000000000000000000000ba6a5d1d74e056fb7ec1263a110f5bd9462df58a0000000000000000000000000000000000000000000000000073b8c569e24ccb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5349,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009f507ef3ef4d3d5cef569d72666672bfdd0a5d270000000000000000000000009f507ef3ef4d3d5cef569d72666672bfdd0a5d27000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5351,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae57f5971b276289182c02cb0a9886881d3a336d000000000000000000000000ae57f5971b276289182c02cb0a9886881d3a336d00000000000000000000000000000000000000000000000000a24c17255e857f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5352,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005e89f9a34ab21e7858da997eb17d8dcdd684245b0000000000000000000000005e89f9a34ab21e7858da997eb17d8dcdd684245b000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5353,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e6e21237fd68911c9e4f17690ca016aebf58f190000000000000000000000001e6e21237fd68911c9e4f17690ca016aebf58f19000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5355,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004b23da66d3a9689cde3e694ce0c0b8aafd97e1d10000000000000000000000004b23da66d3a9689cde3e694ce0c0b8aafd97e1d1000000000000000000000000000000000000000000000000009b4b9734ba9fa200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5356,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ecbc7e35d03bfb5310adb50f3208d68e57436f90000000000000000000000005ecbc7e35d03bfb5310adb50f3208d68e57436f9000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5359,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000040b41de1e402e42646aa9648a6091d670618435800000000000000000000000040b41de1e402e42646aa9648a6091d6706184358000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5361,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000232e9346eeecac4d51e14c02dde61a0729a204ee000000000000000000000000232e9346eeecac4d51e14c02dde61a0729a204ee00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5363,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000006463dbd8ae7dfb08cfe903cdf98ea7558faf36e60000000000000000000000006463dbd8ae7dfb08cfe903cdf98ea7558faf36e600000000000000000000000000000000000000000000016b39d0ac6fafcbb8f600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x6d5aca5fcfc7bc6bff488931e7467a36c2ef502b03f4ab9e779a82d6e65b30b6,2022-03-26 20:16:11.000 UTC,0,true -5364,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080565b854b3f9b3697ee45b3e20a8cdadaab746e00000000000000000000000080565b854b3f9b3697ee45b3e20a8cdadaab746e00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5365,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e6e21237fd68911c9e4f17690ca016aebf58f190000000000000000000000001e6e21237fd68911c9e4f17690ca016aebf58f19000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5367,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f84f89fb1bfc303ac9744fe63a1c4f41b799b57a000000000000000000000000f84f89fb1bfc303ac9744fe63a1c4f41b799b57a00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5368,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017b64570484aae779d718e727e21a1b05b975da300000000000000000000000017b64570484aae779d718e727e21a1b05b975da3000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5369,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000918fe5fa6304f4bbc548aa64269352b2c7bf9489000000000000000000000000918fe5fa6304f4bbc548aa64269352b2c7bf9489000000000000000000000000000000000000000000000000001e25a45a05747900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5370,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000329ddef7737094022baefe6d6a8b258cbdd210d0000000000000000000000000329ddef7737094022baefe6d6a8b258cbdd210d000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5372,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f0fdeaa067f641bcb5932ef44629e9b4a96f5d60000000000000000000000006f0fdeaa067f641bcb5932ef44629e9b4a96f5d60000000000000000000000000000000000000000000000000093f7eb0f1f106000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5373,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ebe911df04f665f84a5ba93da5090cc4076b3d46000000000000000000000000ebe911df04f665f84a5ba93da5090cc4076b3d460000000000000000000000000000000000000000000000000058d15e1762800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5374,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009b602f5b8e0a87bb91f410bc88012b2a4b54ce360000000000000000000000009b602f5b8e0a87bb91f410bc88012b2a4b54ce36000000000000000000000000000000000000000000000000009536c70891000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5376,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000087b57ac904dac73e9bc7938f510ec80d70951a0700000000000000000000000087b57ac904dac73e9bc7938f510ec80d70951a07000000000000000000000000000000000000000000000000002e1b55279714e600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5377,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e5d38340cb06c770bcff353f4ab90a1c83f1a100000000000000000000000002e5d38340cb06c770bcff353f4ab90a1c83f1a10000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5378,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001f31bdf0003f7c6d6747728f6cd9741117619b470000000000000000000000001f31bdf0003f7c6d6747728f6cd9741117619b470000000000000000000000000000000000000000000000000050cbe758eab20b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5379,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000e60d9c72c5ec15136b942525407d07527f2df2b7000000000000000000000000e60d9c72c5ec15136b942525407d07527f2df2b7000000000000000000000000000000000000000000000024b777f3586239995c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -5380,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000097a7415e1a2651f8700006f2111bc575f393773100000000000000000000000097a7415e1a2651f8700006f2111bc575f3937731000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5381,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b1fcf0eaf1e02e7ff9592bac7a42202a5d116d30000000000000000000000001b1fcf0eaf1e02e7ff9592bac7a42202a5d116d3000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5382,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e944fc5ad408665f758ece18b2e5ffe3b8eaedc9000000000000000000000000e944fc5ad408665f758ece18b2e5ffe3b8eaedc9000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5383,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000096668c69449b38995e6f6fd742f128b221ba0fe400000000000000000000000096668c69449b38995e6f6fd742f128b221ba0fe40000000000000000000000000000000000000000000000000107c57b2e9519d500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5385,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000883c781c07abc91798bd8fd231563a0cc8bd9a1e000000000000000000000000883c781c07abc91798bd8fd231563a0cc8bd9a1e00000000000000000000000000000000000000000000000000002d79883d200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5386,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c19f3377cb50b2b8dc4169a6073316e1abb67c20000000000000000000000004c19f3377cb50b2b8dc4169a6073316e1abb67c20000000000000000000000000000000000000000000000000866402d2256033d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5387,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001267f79d6988977411338bb494f26678c7f281ba0000000000000000000000001267f79d6988977411338bb494f26678c7f281ba000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5390,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009ea0af889357f6ba2caa7e7e0899d518e396f0270000000000000000000000009ea0af889357f6ba2caa7e7e0899d518e396f027000000000000000000000000000000000000000000000000004b9cf364fe91c200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5391,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f6bce9a326d67703691dda5cbcc0fa381733e6ae000000000000000000000000f6bce9a326d67703691dda5cbcc0fa381733e6ae000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5392,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000007ee17c26699fe707ac1e5f5074f4a4dafc9fa26f0000000000000000000000007ee17c26699fe707ac1e5f5074f4a4dafc9fa26f0000000000000000000000000000000000000000000000000000000007351c2600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -5393,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e740245d5c4afec7655ade6854b788ec755d24d6000000000000000000000000e740245d5c4afec7655ade6854b788ec755d24d6000000000000000000000000000000000000000000000000014eebc66ccee69000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5394,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000054c66b94f3b4eef7ae8cc6d95bf5dfbce778a04800000000000000000000000054c66b94f3b4eef7ae8cc6d95bf5dfbce778a048000000000000000000000000000000000000000000000000014e4384ea89f9be00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5395,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d25f942adbb4d53a53160f419abcf6b73b0aa4b9000000000000000000000000d25f942adbb4d53a53160f419abcf6b73b0aa4b90000000000000000000000000000000000000000000000000194938cce2b75ca00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5396,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ba7604330b8eb2933644ba3522855d2a320dad30000000000000000000000003ba7604330b8eb2933644ba3522855d2a320dad3000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5397,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ba5f02bd1e8c6feec3561ebb34cc87f348d458a0000000000000000000000002ba5f02bd1e8c6feec3561ebb34cc87f348d458a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5398,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b758a373cb815941ad7e0657d5ff671e4bbf49d7000000000000000000000000b758a373cb815941ad7e0657d5ff671e4bbf49d7000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5399,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b885084a6c9f8ebe365ed6cdd12c9c7c9ca2b2cf000000000000000000000000b885084a6c9f8ebe365ed6cdd12c9c7c9ca2b2cf00000000000000000000000000000000000000000000000002239b9a80d42d7d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5400,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf41127a9ac8b5d19fbd196b8ad8295b2a2579f5000000000000000000000000bf41127a9ac8b5d19fbd196b8ad8295b2a2579f500000000000000000000000000000000000000000000000002216c1dc011b2db00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5401,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000072c3c76bad4ead8a5d737a006663cc0a491c79b300000000000000000000000072c3c76bad4ead8a5d737a006663cc0a491c79b3000000000000000000000000000000000000000000000000006379da05b6000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5402,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d122f221d9c56afac72b04ddc48f415e540376eb000000000000000000000000d122f221d9c56afac72b04ddc48f415e540376eb000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5403,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006edc318c3103b6ba19b40ff9b009b836ebcf3f4e0000000000000000000000006edc318c3103b6ba19b40ff9b009b836ebcf3f4e000000000000000000000000000000000000000000000000009581ea081c233500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5404,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ee40e804b25fc915fd2c2f6d8d2f650afbf9709a000000000000000000000000ee40e804b25fc915fd2c2f6d8d2f650afbf9709a000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5405,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000634cea5cbe400f8d19bac14b43735bce52f20680000000000000000000000000634cea5cbe400f8d19bac14b43735bce52f206800000000000000000000000000000000000000000000000000138c1e766f5a0b800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5406,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000660a9d3363178cd677adb15b6acb196507176074000000000000000000000000660a9d3363178cd677adb15b6acb1965071760740000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5407,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000035e5ac4c7cb20350321459813f42df14f9ffc1fb00000000000000000000000035e5ac4c7cb20350321459813f42df14f9ffc1fb000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5408,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be7fee1d7fd765ed350319424dc2b1630a1343e7000000000000000000000000be7fee1d7fd765ed350319424dc2b1630a1343e7000000000000000000000000000000000000000000000000000119f17fe1600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5411,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000091816394be18d923a45b3ef57201aef19dfe116000000000000000000000000091816394be18d923a45b3ef57201aef19dfe1160000000000000000000000000000000000000000000000000031bced02db000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5412,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a97459776e144c6554d03a95868fe258e70d69a8000000000000000000000000a97459776e144c6554d03a95868fe258e70d69a800000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5414,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca2cbf8ab2b4662bf992a9651c03bab54279d16d000000000000000000000000ca2cbf8ab2b4662bf992a9651c03bab54279d16d00000000000000000000000000000000000000000000000000517c11eeac177800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5415,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c8cdb4ef8d93572f8217a157db8ad0a0f7b4c486000000000000000000000000c8cdb4ef8d93572f8217a157db8ad0a0f7b4c48600000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5416,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000641ef149db1c2fa150b045b9881c3cc8306439db000000000000000000000000641ef149db1c2fa150b045b9881c3cc8306439db000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5417,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d9b7c19cf1a55abd4458634752751840576156c0000000000000000000000000d9b7c19cf1a55abd4458634752751840576156c000000000000000000000000000000000000000000000000009c51c4521e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5418,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3c6d6e24fe8629e2961467fd15144f701154c57000000000000000000000000d3c6d6e24fe8629e2961467fd15144f701154c57000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5419,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000074845afc929b47d7886cdb266eba8054831b1e5e00000000000000000000000074845afc929b47d7886cdb266eba8054831b1e5e000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5420,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0d771006a4578f338f2043c99b74503207a67b1000000000000000000000000c0d771006a4578f338f2043c99b74503207a67b1000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5421,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007839c9bc2d4d61296ddf85667aaac421601bb9740000000000000000000000007839c9bc2d4d61296ddf85667aaac421601bb97400000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5422,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d38f4411539ce4c0050dc4015bda014eb911178f000000000000000000000000d38f4411539ce4c0050dc4015bda014eb911178f000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5424,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df3bdca9ebb45cbe0e9f4205d8107126ab4aacd7000000000000000000000000df3bdca9ebb45cbe0e9f4205d8107126ab4aacd700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5425,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000744eba6f0476d5d57b937b7ad1c44607931955b2000000000000000000000000744eba6f0476d5d57b937b7ad1c44607931955b2000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5426,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b970984bdd183724bd872b1b9b5db5471b125223000000000000000000000000b970984bdd183724bd872b1b9b5db5471b12522300000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5427,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a58171e75565922e0557a940f1f10eb0d897fde9000000000000000000000000a58171e75565922e0557a940f1f10eb0d897fde9000000000000000000000000000000000000000000000000003f13bea2fd620000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5428,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000078ad5270b0240d8529f600f35a271fc6e2b2bd8000000000000000000000000078ad5270b0240d8529f600f35a271fc6e2b2bd8000000000000000000000000000000000000000000000000000000000001a87600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -5429,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7e07c80f79874e6867deb580d63746f6c072bc2000000000000000000000000d7e07c80f79874e6867deb580d63746f6c072bc2000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5430,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000071213a9c9504e406d3242436a4bf69c6bfe7446100000000000000000000000071213a9c9504e406d3242436a4bf69c6bfe74461000000000000000000000000000000000000000000000000000000000001980300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -5431,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000079d87b8a6bbaee0b7aa9b0c7da5586406474a0ab00000000000000000000000079d87b8a6bbaee0b7aa9b0c7da5586406474a0ab00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5432,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a90a1a41750946246a532224593a48313bb7f983000000000000000000000000a90a1a41750946246a532224593a48313bb7f983000000000000000000000000000000000000000000000000003119d47d228e8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5433,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea79e50d57dc3248da486861ec5891f445c45dad000000000000000000000000ea79e50d57dc3248da486861ec5891f445c45dad00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5435,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000058192d5eb9c774cf3de1efab41371a1e392f941d00000000000000000000000058192d5eb9c774cf3de1efab41371a1e392f941d0000000000000000000000000000000000000000000000000051bd7bba4832a100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5436,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001d239ca503f55bdfab65f1c2e22966b4195daacd0000000000000000000000001d239ca503f55bdfab65f1c2e22966b4195daacd00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5437,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000920fba25c6e266930ca3fbaf958c0d5145cb6a50000000000000000000000000920fba25c6e266930ca3fbaf958c0d5145cb6a50000000000000000000000000000000000000000000000000001130b0cdf7610000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1e6b7681d1b15a6ed71fe2f0b2b9b6b745f1722abd4e644b3437e8afc872f361,2021-12-27 08:13:55.000 UTC,0,true -5438,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bff987e43331cc5958b982563ff6c6378432f8f0000000000000000000000000bff987e43331cc5958b982563ff6c6378432f8f0000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5439,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bff987e43331cc5958b982563ff6c6378432f8f0000000000000000000000000bff987e43331cc5958b982563ff6c6378432f8f0000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5440,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000199c92538e4946451c2b2bca3c0f5722e008615f000000000000000000000000199c92538e4946451c2b2bca3c0f5722e008615f0000000000000000000000000000000000000000000000000074bdda7849287500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5441,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000062f1cfe35428566baa6e0206b089abe0a6068d4b00000000000000000000000062f1cfe35428566baa6e0206b089abe0a6068d4b000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5442,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004768393fbbfce919fcc3fa3e324dd216a4a0b3fd0000000000000000000000004768393fbbfce919fcc3fa3e324dd216a4a0b3fd00000000000000000000000000000000000000000000000003a84c44f042578900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x79c4e88b1bddaed64b3ea0cf05c061f3b90dcb94e99309d941d44b3013a8ea98,2022-05-01 13:45:13.000 UTC,0,true -5443,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004d65fa86720661bae0692b7e1fe5637e553494c60000000000000000000000004d65fa86720661bae0692b7e1fe5637e553494c6000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5444,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c72b76292f925a5b65289084c0c26305bd313ea8000000000000000000000000c72b76292f925a5b65289084c0c26305bd313ea800000000000000000000000000000000000000000000000000998a9b6a04e50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5445,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001cb15998a75f4628a2bdcbd86a632a33d906c1160000000000000000000000001cb15998a75f4628a2bdcbd86a632a33d906c116000000000000000000000000000000000000000000000000014912b611ee8d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5446,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009c49cadc89a3b8cb6239a37a692ba370c32bdfd30000000000000000000000009c49cadc89a3b8cb6239a37a692ba370c32bdfd30000000000000000000000000000000000000000000000000011e20ada8780fb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5447,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000026b7929ce02124e8ff4aa380da99f92abc45f16700000000000000000000000026b7929ce02124e8ff4aa380da99f92abc45f16700000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5449,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000067cda0e16f96ab6ec66295159615df54d607661200000000000000000000000067cda0e16f96ab6ec66295159615df54d6076612000000000000000000000000000000000000000000000000001d341429e237ee00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x67299c88982db6dd1cc41ced8b97867f62df9d7400dc587d634d99f15cc2ad7a,2022-04-12 19:24:31.000 UTC,0,true -5451,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7c1025fc4d558e4fd0f4e072b92a89616ddbb3e000000000000000000000000d7c1025fc4d558e4fd0f4e072b92a89616ddbb3e00000000000000000000000000000000000000000000000000011ada5486700000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5452,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000011a4373cdbe76eb7dda4aa36093bf95f4d41192900000000000000000000000011a4373cdbe76eb7dda4aa36093bf95f4d411929000000000000000000000000000000000000000000000000019c895744a7e16800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5453,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d1bd9d66437549cdc30420fa3d5162d49f0fbc8d000000000000000000000000d1bd9d66437549cdc30420fa3d5162d49f0fbc8d0000000000000000000000000000000000000000000000000027aff71ec9300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5454,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a5aaab5f12216e049ec43b85e15d1127e79becfd000000000000000000000000a5aaab5f12216e049ec43b85e15d1127e79becfd00000000000000000000000000000000000000000000000000012c221cc6a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5456,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da89fc38046b64328da0661108959c5616faa339000000000000000000000000da89fc38046b64328da0661108959c5616faa339000000000000000000000000000000000000000000000000001d137f0186e10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd41b85713a6c2bafedc970e18e6ec9dfc5d1c888f0ae8783a7d566fdc96c1102,2022-05-25 22:10:50.000 UTC,0,true -5457,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009e2fc870b3350ab8c9973b33ed56a3b2e45d1d180000000000000000000000009e2fc870b3350ab8c9973b33ed56a3b2e45d1d1800000000000000000000000000000000000000000000000002b4c7cb0463ec8d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5459,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000855de1c89382ffef9615c5430db23cdc38d36bc9000000000000000000000000855de1c89382ffef9615c5430db23cdc38d36bc900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5460,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000409540398e05fe99ff11702d80cc1a249a1f8c50000000000000000000000000409540398e05fe99ff11702d80cc1a249a1f8c5000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5461,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000051c2522d728e2f011bb35a96e5aaa2a3e867228200000000000000000000000051c2522d728e2f011bb35a96e5aaa2a3e867228200000000000000000000000000000000000000000000000000011393af5df00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5462,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000084a7b031d90b7d50f1c49bb0b6379b4306cd8a5100000000000000000000000084a7b031d90b7d50f1c49bb0b6379b4306cd8a5100000000000000000000000000000000000000000000000002e2c15ea55b0d4800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5463,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b4bb5d055613bef3bab73a8c75e70eca6e199590000000000000000000000001b4bb5d055613bef3bab73a8c75e70eca6e19959000000000000000000000000000000000000000000000000001168862766400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5465,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6d1b80b6cfab7fa7f16402ea9fa6580bb99f7d8000000000000000000000000c6d1b80b6cfab7fa7f16402ea9fa6580bb99f7d8000000000000000000000000000000000000000000000000078cad1e25d0000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5467,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b4bb5d055613bef3bab73a8c75e70eca6e199590000000000000000000000001b4bb5d055613bef3bab73a8c75e70eca6e19959000000000000000000000000000000000000000000000000001168862766400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5468,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dccb3b984c89f97afd551bede081f72e5c50c223000000000000000000000000dccb3b984c89f97afd551bede081f72e5c50c22300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5470,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3aa7c9b3bd025fe59bbc4e8a1b402c52fd25247000000000000000000000000a3aa7c9b3bd025fe59bbc4e8a1b402c52fd252470000000000000000000000000000000000000000000000000001353a6b39400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5471,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000007e62aa7fde60ceebfcb72c49018ede750f7353200000000000000000000000007e62aa7fde60ceebfcb72c49018ede750f7353200000000000000000000000000000000000000000000000000d529ae9e86000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5472,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009e7ece53974e4914f7448d4dad027ed3cbf69b5e0000000000000000000000009e7ece53974e4914f7448d4dad027ed3cbf69b5e000000000000000000000000000000000000000000000000000fc9e774ed58c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5473,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000159764bf0f3aec21b3df78d4f2a8fcf20fdbe864000000000000000000000000159764bf0f3aec21b3df78d4f2a8fcf20fdbe864000000000000000000000000000000000000000000000000013acce631adebf900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5474,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6916424ff1361c780e82919abc8c9255d4ff5ff000000000000000000000000d6916424ff1361c780e82919abc8c9255d4ff5ff000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5475,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002572742a4017aa0e77771e1288617b7105eb86ee0000000000000000000000002572742a4017aa0e77771e1288617b7105eb86ee00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5476,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bfa61059504bc913d1e79a01116e7d83cf6248ab000000000000000000000000bfa61059504bc913d1e79a01116e7d83cf6248ab000000000000000000000000000000000000000000000000004996f1be7c9bc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5477,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9241fc168e087fb39c1c864d5975a62e5a29b81000000000000000000000000e9241fc168e087fb39c1c864d5975a62e5a29b81000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5478,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7fdd807d73593b1a09b2ab31e8159c88e50daf3000000000000000000000000d7fdd807d73593b1a09b2ab31e8159c88e50daf300000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5479,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000005acfbbf0aa370f232e341bc0b1a40e996c960e07000000000000000000000000000000000000000000000003cabde168b1bef25c,,,1,true -5480,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000aeb9a479ddb28ac9aa3eddb24290b4d58cf7e9e0000000000000000000000000aeb9a479ddb28ac9aa3eddb24290b4d58cf7e9e000000000000000000000000000000000000000000000000001c32a44932f50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5ae62350336d7cd2e2901cd7698db1cb220b2b10519bb822c75ce3cc67faf96e,2022-05-25 22:14:44.000 UTC,0,true -5484,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006627d5eeaf0d706853cfb41eaa68604c06ab97450000000000000000000000006627d5eeaf0d706853cfb41eaa68604c06ab9745000000000000000000000000000000000000000000000000000119f17fe1600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5485,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008ad1f20830e3bfd4f81eaa850989e3b1133d90d50000000000000000000000008ad1f20830e3bfd4f81eaa850989e3b1133d90d50000000000000000000000000000000000000000000000000062e55d0d17630000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5486,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047bbf8e3251aed23abda3d13ff75e2471e726aa100000000000000000000000047bbf8e3251aed23abda3d13ff75e2471e726aa10000000000000000000000000000000000000000000000000040a5a33d87200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5488,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000020753667309b033d24d11d5ab564b3cab3b52e9f00000000000000000000000020753667309b033d24d11d5ab564b3cab3b52e9f000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5490,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000967f3fee8ba153c8b05b638d44c6adeb7b0c620d000000000000000000000000967f3fee8ba153c8b05b638d44c6adeb7b0c620d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5492,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c784de0eacbe31eb87e0ec7a7f612ca011e33030000000000000000000000000c784de0eacbe31eb87e0ec7a7f612ca011e330300000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5494,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004e3499142cb3191ea3ad1ee1eb218539e2b246b00000000000000000000000004e3499142cb3191ea3ad1ee1eb218539e2b246b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5495,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e421482ca059264a9179423fceb76b9f2055a8c0000000000000000000000004e421482ca059264a9179423fceb76b9f2055a8c00000000000000000000000000000000000000000000000000100eea8262800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5496,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037d1ea02b0ece0fb3dacd345173a8d6b82f41bc000000000000000000000000037d1ea02b0ece0fb3dacd345173a8d6b82f41bc0000000000000000000000000000000000000000000000000000897df5811670300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5497,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021038df6c33b259e3a41c83424b27f9b7a20398700000000000000000000000021038df6c33b259e3a41c83424b27f9b7a2039870000000000000000000000000000000000000000000000000020e5916de78b1100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5498,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e248e69ddb1f8164476034da503fe9b19a5780a0000000000000000000000000e248e69ddb1f8164476034da503fe9b19a5780a0000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5499,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ad2d23dcff6cdbb8a15e71d9acef313690933145000000000000000000000000ad2d23dcff6cdbb8a15e71d9acef313690933145000000000000000000000000000000000000000000000000004e28e2290f000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5500,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078b1ccc9aa17f8e6bbb39cdb2c0b137ba92e240e00000000000000000000000078b1ccc9aa17f8e6bbb39cdb2c0b137ba92e240e000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5501,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdac4cf4a0b261c383049dc692aede5360a08752000000000000000000000000bdac4cf4a0b261c383049dc692aede5360a0875200000000000000000000000000000000000000000000000000298656c76b068200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5503,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002477e1fe36b8359432a24ae3a933896a3b6588a00000000000000000000000002477e1fe36b8359432a24ae3a933896a3b6588a000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5504,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d493217b1f4bf46bf5b4627663bec9529d6e7f43000000000000000000000000d493217b1f4bf46bf5b4627663bec9529d6e7f4300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5505,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000490573336c7733a899f8c3b1b3067d3d42eb26ee000000000000000000000000490573336c7733a899f8c3b1b3067d3d42eb26ee0000000000000000000000000000000000000000000000000093481b808d1dfd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x424d9991ba1fd9057c6d522eb5f6e51badc39f21a73b9be130cfc59279493042,2022-08-09 05:15:19.000 UTC,0,true -5506,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000056e1029173d5b6b39943eb5967dde3c6da74351000000000000000000000000056e1029173d5b6b39943eb5967dde3c6da7435100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5507,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000825dbbf50ee12b278139dd03fd88f49e57c7f84d000000000000000000000000825dbbf50ee12b278139dd03fd88f49e57c7f84d000000000000000000000000000000000000000000000000002f4d081e1a867500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5510,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eb73fd2afd47cd70747bfb6d1245f711533e5901000000000000000000000000eb73fd2afd47cd70747bfb6d1245f711533e590100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5512,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000011b5580c708a14bf5c39cba6e84bd07584753ac400000000000000000000000011b5580c708a14bf5c39cba6e84bd07584753ac40000000000000000000000000000000000000000000000000011b85607cd6c5200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5513,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000571965667a29abd76d5d43fa8788c0bc0cfe8088000000000000000000000000000000000000000000000000530548c1ddbdca98,,,1,true -5514,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e0e7943a7500ec3d6ee0e6205461c1aaa6850a46000000000000000000000000e0e7943a7500ec3d6ee0e6205461c1aaa6850a460000000000000000000000000000000000000000000000000098ffab3587bdf800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5515,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009889e4cc3c754f892c32388c08c9384c7c17a0080000000000000000000000009889e4cc3c754f892c32388c08c9384c7c17a00800000000000000000000000000000000000000000000000000fc4101b654f43500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5516,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094f33be325f62b5d584312a65c9a1ae3254360e700000000000000000000000094f33be325f62b5d584312a65c9a1ae3254360e7000000000000000000000000000000000000000000000000010dcbff0e119d1600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5519,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000573a35ccea5dd981e7e2adb5d570c50296f91262000000000000000000000000573a35ccea5dd981e7e2adb5d570c50296f91262000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5520,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000949ffe8488aed787de11c95ccd5fc258141b4f28000000000000000000000000949ffe8488aed787de11c95ccd5fc258141b4f2800000000000000000000000000000000000000000000000000d01919a6bc0b9800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5523,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a7137da63b53138a6dcdc9d9a010f42f951f1113000000000000000000000000a7137da63b53138a6dcdc9d9a010f42f951f111300000000000000000000000000000000000000000000000000a08787534379d000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5524,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008867d4a10a1a5b9cab771deb5dcbb5fb14db28020000000000000000000000008867d4a10a1a5b9cab771deb5dcbb5fb14db2802000000000000000000000000000000000000000000000000009abe8f672939c700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5525,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017eda91a844f303a8184f826e8ffae9924ec978200000000000000000000000017eda91a844f303a8184f826e8ffae9924ec97820000000000000000000000000000000000000000000000000cfb29a034a20b1700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5526,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b4054e9d66229d5605946dedfeca96eee6590377000000000000000000000000b4054e9d66229d5605946dedfeca96eee6590377000000000000000000000000000000000000000000000000022750d1b0ee1d8d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5527,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000edca050e06b595616c6365d2630837c63b331cb0000000000000000000000000edca050e06b595616c6365d2630837c63b331cb00000000000000000000000000000000000000000000000000a2e6e27f020dd000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5528,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005fde45087d5ed774ea077ada40e82cc48a77df5d0000000000000000000000005fde45087d5ed774ea077ada40e82cc48a77df5d00000000000000000000000000000000000000000000000000e56c87d339580200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5529,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000178c05cf60526ea3e35bc4ac05d3141027ee15ce000000000000000000000000178c05cf60526ea3e35bc4ac05d3141027ee15ce000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5531,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000571965667a29abd76d5d43fa8788c0bc0cfe8088000000000000000000000000571965667a29abd76d5d43fa8788c0bc0cfe8088000000000000000000000000000000000000000000000000001fb59dfa24371d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5534,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000880db1abee87651b667615c24db3a30aa6aaa716000000000000000000000000880db1abee87651b667615c24db3a30aa6aaa716000000000000000000000000000000000000000000000001d44d2f325763eab500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -5535,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000851807a2cf79c10228d2729e4983072a1b99bf5c000000000000000000000000851807a2cf79c10228d2729e4983072a1b99bf5c000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5536,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000063acae9fce2f889e35b703f7b831cc585aabbe0000000000000000000000000063acae9fce2f889e35b703f7b831cc585aabbe00000000000000000000000000000000000000000000000000149841644f10e4700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5537,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000002ffcbc0ba249219e02e84e4273847f8e7d4ff6e60000000000000000000000002ffcbc0ba249219e02e84e4273847f8e7d4ff6e6000000000000000000000000000000000000000000000000000000000807ddc900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -5538,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000820d36cb2728dff7625ff66454eb964b3afa7cce000000000000000000000000820d36cb2728dff7625ff66454eb964b3afa7cce0000000000000000000000000000000000000000000000000013cabda263469300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5539,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d4701f5ab31d4104c091a9b5504827ec6aacdf39000000000000000000000000d4701f5ab31d4104c091a9b5504827ec6aacdf39000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5540,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071d2f08f217e0e81feb1143677850dd872694ee500000000000000000000000071d2f08f217e0e81feb1143677850dd872694ee500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5542,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071d2f08f217e0e81feb1143677850dd872694ee500000000000000000000000071d2f08f217e0e81feb1143677850dd872694ee500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5544,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aead1f2626c4ef3b0246ba9a343a310931a7ded5000000000000000000000000aead1f2626c4ef3b0246ba9a343a310931a7ded500000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5545,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2e6466956f9184ccf9f03e8b933239562209b6e000000000000000000000000d2e6466956f9184ccf9f03e8b933239562209b6e00000000000000000000000000000000000000000000000000e7a2505b0c15df00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5547,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a9ce001353e021767264f5ab6102e65bc9cd2023000000000000000000000000a9ce001353e021767264f5ab6102e65bc9cd20230000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5548,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e46eeacefe95efcc1ca54371bc88d7eae261dcbc000000000000000000000000e46eeacefe95efcc1ca54371bc88d7eae261dcbc00000000000000000000000000000000000000000000000000f9bb3890f8b81200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5549,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca922b1454c4cbe30a965047d51b0dace5b808d6000000000000000000000000ca922b1454c4cbe30a965047d51b0dace5b808d600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5551,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009fc9b76e8c2485c769c899c6c598688c56b0c52c0000000000000000000000009fc9b76e8c2485c769c899c6c598688c56b0c52c00000000000000000000000000000000000000000000000000a3309af71f642500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5552,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6e8e8739e98d36fa5dfb8d9c512175fc69db30f000000000000000000000000b6e8e8739e98d36fa5dfb8d9c512175fc69db30f0000000000000000000000000000000000000000000000000029062798b06ca300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5553,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029eaa8c7ea07a452b90da24b216f8af5a6f85cee00000000000000000000000029eaa8c7ea07a452b90da24b216f8af5a6f85cee00000000000000000000000000000000000000000000000000219d159b48770f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5554,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000026a5a22570d8a4408cb21e333486ca04e60dec4d00000000000000000000000026a5a22570d8a4408cb21e333486ca04e60dec4d0000000000000000000000000000000000000000000000000015a6b183d97e9300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5555,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a1430ae58cc8ebcc4e47e08fa16bfc78972b39a0000000000000000000000002a1430ae58cc8ebcc4e47e08fa16bfc78972b39a000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5556,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e08d5492488d710350408c22d328162af4be8620000000000000000000000002e08d5492488d710350408c22d328162af4be8620000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5557,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004d54243a81f132ca4db3174194145373490b469c0000000000000000000000004d54243a81f132ca4db3174194145373490b469c00000000000000000000000000000000000000000000000000075ea80fdf005200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5558,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078cbd3ac362577935a2421ea4b2ee548b7eb76ba00000000000000000000000078cbd3ac362577935a2421ea4b2ee548b7eb76ba0000000000000000000000000000000000000000000000000004169f662966c400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5559,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000620f6600496e0466f3341dff311d43c82fa953a5000000000000000000000000620f6600496e0466f3341dff311d43c82fa953a5000000000000000000000000000000000000000000000000001dd1644c52360000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5561,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bcfc60c0c0a12408499bdf8ab20955d491e3b178000000000000000000000000bcfc60c0c0a12408499bdf8ab20955d491e3b17800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5562,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d32c1d33bf023aae1d9666e714c5ac3418cdede3000000000000000000000000d32c1d33bf023aae1d9666e714c5ac3418cdede300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5563,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b2a9aef4bbb101be350b6dcf20de0551b5b628ae000000000000000000000000b2a9aef4bbb101be350b6dcf20de0551b5b628ae000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5564,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000edb00e1646b8bf9d9cc3c8b1d364e371bf57ab2b000000000000000000000000edb00e1646b8bf9d9cc3c8b1d364e371bf57ab2b00000000000000000000000000000000000000000000000000ee9a2049a22dc800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5565,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000941169fff3c353be965e3f34823eea63b772219c000000000000000000000000941169fff3c353be965e3f34823eea63b772219c000000000000000000000000000000000000000000000000008b878d12c0b0aa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5566,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008da53d90095a3af28a8f7c706c2b08b59ca9a4c50000000000000000000000008da53d90095a3af28a8f7c706c2b08b59ca9a4c50000000000000000000000000000000000000000000000000111a2b2639f5fa200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5567,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004fc920c69979da8194875d06f7c6d6ee99d5001f0000000000000000000000004fc920c69979da8194875d06f7c6d6ee99d5001f00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5568,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a48c2dd26e09fd78083df35e5f92ffd7156be402000000000000000000000000a48c2dd26e09fd78083df35e5f92ffd7156be40200000000000000000000000000000000000000000000000000d52b1ac5dc2ced00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5569,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000044a999a01cf6fc3de03fc1739f8826d5e46a84fa00000000000000000000000044a999a01cf6fc3de03fc1739f8826d5e46a84fa000000000000000000000000000000000000000000000000010053dea3eceb9700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5571,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000347f715dd0f6f09bf75fc98b4b4f356208ad2fb2000000000000000000000000347f715dd0f6f09bf75fc98b4b4f356208ad2fb2000000000000000000000000000000000000000000000000010041076283b80800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5572,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000090741e1fdca0e490ccfdec50917f13a9be9cdc7a00000000000000000000000090741e1fdca0e490ccfdec50917f13a9be9cdc7a000000000000000000000000000000000000000000000000001fefd337b19f1400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5573,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0f25775ced2dd9613d588f67765708fb317ac1d000000000000000000000000c0f25775ced2dd9613d588f67765708fb317ac1d00000000000000000000000000000000000000000000000000d54771877a56fd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5574,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000500d0f63df0b7daec3155ff7d68e59204e7bcc29000000000000000000000000500d0f63df0b7daec3155ff7d68e59204e7bcc2900000000000000000000000000000000000000000000000000f8438bb2a5ceb900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5575,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f10937d5a4531754449ac0ddbdf23331e1487890000000000000000000000007f10937d5a4531754449ac0ddbdf23331e14878900000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5577,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000964a69b94386b95077798ae475d0660975413faa000000000000000000000000964a69b94386b95077798ae475d0660975413faa00000000000000000000000000000000000000000000000000edd01b47f12c2c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5578,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6f1459439258798391df7a9d60dcac96b3afa9e000000000000000000000000c6f1459439258798391df7a9d60dcac96b3afa9e00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5579,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000014441fac45abfe6fa3c3889a5dde3dbd8977c23600000000000000000000000014441fac45abfe6fa3c3889a5dde3dbd8977c23600000000000000000000000000000000000000000000000000dd6c3d4bf7f81100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5580,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf3a4a0dda2e5d94ef6d30d218cff62252c32cd1000000000000000000000000cf3a4a0dda2e5d94ef6d30d218cff62252c32cd100000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5581,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001fe7c5f80aa20b042cbe590f2984c6be98270a850000000000000000000000001fe7c5f80aa20b042cbe590f2984c6be98270a8500000000000000000000000000000000000000000000000000f7f64f7269977600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5582,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b4e7abab7389c9c7d5bb49c6e437485676ff9cb3000000000000000000000000b4e7abab7389c9c7d5bb49c6e437485676ff9cb3000000000000000000000000000000000000000000000000002d3e3e5745eb8900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5583,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003597ed66ea2a8d6b93d23b15f2fd30d308bf83180000000000000000000000003597ed66ea2a8d6b93d23b15f2fd30d308bf83180000000000000000000000000000000000000000000000000028079e4d14ab6300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5584,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002847184449afc8f238076ea4d3969121d8adeb460000000000000000000000002847184449afc8f238076ea4d3969121d8adeb4600000000000000000000000000000000000000000000000001b44e9ee2eeb41000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5585,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d328feb7ad9fc26a050cbb0495da38bd3f751e40000000000000000000000000d328feb7ad9fc26a050cbb0495da38bd3f751e4000000000000000000000000000000000000000000000000001e03c17f6ce8c2200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x01bf05ef8043a9452b164a88bee54dec16e896b25ccfb1e8ecfe8e5a23596dd6,2022-05-07 02:34:46.000 UTC,0,true -5586,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000629c4565be654c4a5f742da05ced064e16224981000000000000000000000000629c4565be654c4a5f742da05ced064e1622498100000000000000000000000000000000000000000000000000d367e7ee4dacfb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5587,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e0832f9519c3a09fb2e6acb63df7d2b7155c4060000000000000000000000006e0832f9519c3a09fb2e6acb63df7d2b7155c40600000000000000000000000000000000000000000000000001a0a52d5479d54500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5589,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf59e62f6add0b2f0914d47ef0375103cdebcbf9000000000000000000000000bf59e62f6add0b2f0914d47ef0375103cdebcbf900000000000000000000000000000000000000000000000001ac808a831d894500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5590,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000257f99fd962db35704a3ed32523eede0f6b04fa6000000000000000000000000257f99fd962db35704a3ed32523eede0f6b04fa600000000000000000000000000000000000000000000000004db73254763000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5591,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000098ec2fec32a8a9e321c6655693868b1d301848ae00000000000000000000000098ec2fec32a8a9e321c6655693868b1d301848ae000000000000000000000000000000000000000000000000019e27971a47a90f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5593,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004645e30cac1df7bfc5752eadfdf37ef331178f570000000000000000000000004645e30cac1df7bfc5752eadfdf37ef331178f570000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5595,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d76ef4e3e749aece088c0d674002fd4234fc6bbb000000000000000000000000d76ef4e3e749aece088c0d674002fd4234fc6bbb00000000000000000000000000000000000000000000000001ba8829041700ba00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5597,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000009bbec2d116d4a4986f752907c77f85abab71b9e00000000000000000000000009bbec2d116d4a4986f752907c77f85abab71b9e00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5599,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000793745e010dbed0d859d3f83e7dafafb210860b1000000000000000000000000793745e010dbed0d859d3f83e7dafafb210860b100000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5600,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0c76ea5c4bb71f32cd08462bb48d43c0ecf85e2000000000000000000000000c0c76ea5c4bb71f32cd08462bb48d43c0ecf85e2000000000000000000000000000000000000000000000000002779c433836c1300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5602,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000566b56bdc1f5c1bbe388d44479524b07f30f7d60000000000000000000000000566b56bdc1f5c1bbe388d44479524b07f30f7d6000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5609,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017eda91a844f303a8184f826e8ffae9924ec978200000000000000000000000017eda91a844f303a8184f826e8ffae9924ec978200000000000000000000000000000000000000000000000001a383abbc60c88800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5610,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e1d59d7edce98aa7444b7383f8c27d4ab3e19eb5000000000000000000000000e1d59d7edce98aa7444b7383f8c27d4ab3e19eb5000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5611,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076da8cf045ed1a404f8fc9f8513dac885d1afad000000000000000000000000076da8cf045ed1a404f8fc9f8513dac885d1afad000000000000000000000000000000000000000000000000000a0c42a2513ac7300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5612,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004fc920c69979da8194875d06f7c6d6ee99d5001f0000000000000000000000004fc920c69979da8194875d06f7c6d6ee99d5001f00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5613,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004331a6f53f75b215b1a6d6292acaa564bd89464f0000000000000000000000004331a6f53f75b215b1a6d6292acaa564bd89464f00000000000000000000000000000000000000000000000000a3e7cd0d4a035600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5614,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a6e0ac20117184fce07470205c27fdd1f01c266f000000000000000000000000a6e0ac20117184fce07470205c27fdd1f01c266f00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5615,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000286fe436539b18407b3fd8285c20e5eeb56de5f4000000000000000000000000286fe436539b18407b3fd8285c20e5eeb56de5f4000000000000000000000000000000000000000000000001a055690d9db8060300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -5616,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000033b2c9c2a6050316c2aa96891f47fd43e08c49d200000000000000000000000033b2c9c2a6050316c2aa96891f47fd43e08c49d2000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5617,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078777450f3a2a76f21abd549c125849cf5f5006700000000000000000000000078777450f3a2a76f21abd549c125849cf5f5006700000000000000000000000000000000000000000000000000284c96a0dc137500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5618,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000286fe436539b18407b3fd8285c20e5eeb56de5f4000000000000000000000000286fe436539b18407b3fd8285c20e5eeb56de5f4000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5619,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e773c91f242bd1cb26889ff0210f7cf3815ddc99000000000000000000000000e773c91f242bd1cb26889ff0210f7cf3815ddc9900000000000000000000000000000000000000000000000007af31844ced7fdd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5620,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007a16d006da707a3286e6ced7931b8259be1604970000000000000000000000007a16d006da707a3286e6ced7931b8259be16049700000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5621,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004910eff6b570542153f33b6a3404efe27f2f86670000000000000000000000004910eff6b570542153f33b6a3404efe27f2f866700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5623,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cca632a308cad16d4396f67a7b312e55edc24061000000000000000000000000cca632a308cad16d4396f67a7b312e55edc240610000000000000000000000000000000000000000000000000098c445ad57800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5624,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043ec54a69923cf55e5d8cfaffd79b5a52b8202bf00000000000000000000000043ec54a69923cf55e5d8cfaffd79b5a52b8202bf0000000000000000000000000000000000000000000000000000008bb2c9700000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5625,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007472aab4e5e4d993f1ce8f51dc1edfa3724e8ca10000000000000000000000007472aab4e5e4d993f1ce8f51dc1edfa3724e8ca100000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5626,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a57e22bf556074dabe4e456792dd71a846ad8d38000000000000000000000000a57e22bf556074dabe4e456792dd71a846ad8d380000000000000000000000000000000000000000000000000017c726144388c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5628,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000075b995c813da60dd3055d98b73dd1b32f588367f00000000000000000000000075b995c813da60dd3055d98b73dd1b32f588367f00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5629,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007a1130cf808f53492997d68b838306b3d52c101f0000000000000000000000007a1130cf808f53492997d68b838306b3d52c101f0000000000000000000000000000000000000000000000000028f1c0908d7cb800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5631,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f598aab7895eba4b86035353f9152a2ee9568550000000000000000000000006f598aab7895eba4b86035353f9152a2ee956855000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5633,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e1245aa226c025094ff0ce7e7e5a35eec214ac8e000000000000000000000000e1245aa226c025094ff0ce7e7e5a35eec214ac8e00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5634,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f276c6ae5fe256d5cfcbf02f352fd63b2d41b07b000000000000000000000000f276c6ae5fe256d5cfcbf02f352fd63b2d41b07b00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5635,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fcb48913ffd25a4a3a940600e9b28769785b4467000000000000000000000000fcb48913ffd25a4a3a940600e9b28769785b446700000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5636,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009a259270e869dd40ddcba90cd82a9f49e41269430000000000000000000000009a259270e869dd40ddcba90cd82a9f49e412694300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5637,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc56dd5f5a70f7dbdb10e7390af65622f78fbfdc000000000000000000000000cc56dd5f5a70f7dbdb10e7390af65622f78fbfdc00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5638,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b11e0cb32ddc622f89ad62068758e42bbf973ff4000000000000000000000000b11e0cb32ddc622f89ad62068758e42bbf973ff400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5639,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007b5ef088312939b249271bb7f8a61e77749ab5390000000000000000000000007b5ef088312939b249271bb7f8a61e77749ab53900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5641,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d0d6bc9ba4d93a8ed8fe0283b48c71b818b48230000000000000000000000006d0d6bc9ba4d93a8ed8fe0283b48c71b818b482300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5642,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076a833c76e6238215f9aaca3f6ad2e5e9847e92400000000000000000000000076a833c76e6238215f9aaca3f6ad2e5e9847e92400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5643,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006985ae552d11a091b75f446ba38508d7668d7b720000000000000000000000006985ae552d11a091b75f446ba38508d7668d7b720000000000000000000000000000000000000000000000000077c604eccf863000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5645,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000222e79ab40d859e50f0161d48aa4f0c1e8e5ded8000000000000000000000000222e79ab40d859e50f0161d48aa4f0c1e8e5ded800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5646,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000091162672cc2feb0e8627f384ff93294c79fbf36100000000000000000000000091162672cc2feb0e8627f384ff93294c79fbf3610000000000000000000000000000000000000000000000000158a60943cc837500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xbe8a216bafa7ad4ac4b90f3c2abd57648f8bb25394e874f9ba3e7e37152be61e,2022-04-27 10:57:39.000 UTC,0,true -5649,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000082abe0456afbd32abf1f0c5add8c4199dc4a3bc300000000000000000000000082abe0456afbd32abf1f0c5add8c4199dc4a3bc30000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5654,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000af2686a65a101ba79971561c128bdfe7fb1157f3000000000000000000000000af2686a65a101ba79971561c128bdfe7fb1157f30000000000000000000000000000000000000000000000000006c1afcaa8fdc400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5655,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3d9bc84e30ca21277d0bc7a943f3ad1ea3208d7000000000000000000000000d3d9bc84e30ca21277d0bc7a943f3ad1ea3208d7000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5656,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba35b90e51c42e1069bad364b65512c1e7d87f39000000000000000000000000ba35b90e51c42e1069bad364b65512c1e7d87f39000000000000000000000000000000000000000000000000015181ff25a9800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5657,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002aa85a041e7af248ae2e9aee7f5b32daabe133370000000000000000000000002aa85a041e7af248ae2e9aee7f5b32daabe13337000000000000000000000000000000000000000000000000009a8b04ffbac00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5659,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000404b7233782034330ed760d56979338789546567000000000000000000000000404b7233782034330ed760d5697933878954656700000000000000000000000000000000000000000000000000174c986cac1b1200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5660,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a1459f5991a9e07a64ec4b49e2292131d3ebd520000000000000000000000004a1459f5991a9e07a64ec4b49e2292131d3ebd5200000000000000000000000000000000000000000000000000a1f64934f6070000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5662,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e6cf371e21e7a1ad36b440b80f8be79526b0bb70000000000000000000000001e6cf371e21e7a1ad36b440b80f8be79526b0bb7000000000000000000000000000000000000000000000000000f55306c71bb1a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5663,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a6e0ac20117184fce07470205c27fdd1f01c266f000000000000000000000000a6e0ac20117184fce07470205c27fdd1f01c266f0000000000000000000000000000000000000000000000000145b4bbdedef18000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5664,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eaf60507489320623b9f4485b33e112421d4c900000000000000000000000000eaf60507489320623b9f4485b33e112421d4c90000000000000000000000000000000000000000000000000000a0ccb0c32152a000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5665,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000033cb44260a7564d3cac8da5a6d0fffbcacbfcfea00000000000000000000000033cb44260a7564d3cac8da5a6d0fffbcacbfcfea0000000000000000000000000000000000000000000000000084dcbba72b4cc100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5667,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047075648c0c715e68b49d938b87552fab718a9c800000000000000000000000047075648c0c715e68b49d938b87552fab718a9c8000000000000000000000000000000000000000000000000005543df729c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x90d39395e12172a11c1ceadd655316bb3d20562f4c2f147c924484b4c61a5790,2022-03-12 20:30:31.000 UTC,0,true -5668,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006b51ae3a0de15387b8f1d602a40704db9e137c5d0000000000000000000000006b51ae3a0de15387b8f1d602a40704db9e137c5d000000000000000000000000000000000000000000000000014d63bc86d98f8f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5669,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017202b62feb408b478d3c247e2001311a48f5f3200000000000000000000000017202b62feb408b478d3c247e2001311a48f5f32000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5670,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000c223f476b4f44cf01b296fbeab782daf6b101e81000000000000000000000000c223f476b4f44cf01b296fbeab782daf6b101e8100000000000000000000000000000000000000000000000053444878b2ca5ef400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -5674,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000095d27c7dcbd1fb45e70585a3a71f2f229229715700000000000000000000000095d27c7dcbd1fb45e70585a3a71f2f229229715700000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5677,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000444444cc7fe267251797d8592c3f4d5ee6888d62000000000000000000000000444444cc7fe267251797d8592c3f4d5ee6888d62000000000000000000000000000000000000000000000000014bf403eb5c488000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5678,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000084a198db31ea79734b58bc70ac0484b8b23ae9f500000000000000000000000084a198db31ea79734b58bc70ac0484b8b23ae9f500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5679,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be9f07d564b0c6f47d56980d055925d798441792000000000000000000000000be9f07d564b0c6f47d56980d055925d79844179200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5680,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000023236075c29ab1ddc1731a1271dbf448ffd8688000000000000000000000000023236075c29ab1ddc1731a1271dbf448ffd8688000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5681,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071f5280932a10eee4deadbe08898087452f64d0500000000000000000000000071f5280932a10eee4deadbe08898087452f64d0500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5682,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b30919008eabe486fbb04bde517875788dbb3abe000000000000000000000000b30919008eabe486fbb04bde517875788dbb3abe00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5683,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b78d6814d1894edfd0d9e369d024fb47842540d0000000000000000000000002b78d6814d1894edfd0d9e369d024fb47842540d00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5684,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000738fdd122cf588106832e6b1f73a44aab20066b4000000000000000000000000738fdd122cf588106832e6b1f73a44aab20066b400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5685,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac3446f9e80e20f370d9a50d9c85daf216f5afdc000000000000000000000000ac3446f9e80e20f370d9a50d9c85daf216f5afdc00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5686,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e1d59d7edce98aa7444b7383f8c27d4ab3e19eb5000000000000000000000000e1d59d7edce98aa7444b7383f8c27d4ab3e19eb500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5687,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000fb61a8e5cf37cc1de7c1fe155ee5295c3d023600000000000000000000000000fb61a8e5cf37cc1de7c1fe155ee5295c3d0236000000000000000000000000000000000000000000000000000ab95ec45b78e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5688,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a1651b690addfc93caa656a2870fcc40487c7bc5000000000000000000000000a1651b690addfc93caa656a2870fcc40487c7bc500000000000000000000000000000000000000000000000000a017d0784e3e1f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5689,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007cb508b3d71f5fc3ad9815ac72602e1dadf16c3b0000000000000000000000007cb508b3d71f5fc3ad9815ac72602e1dadf16c3b000000000000000000000000000000000000000000000000005b9cb4431999e600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5694,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a4b0316afc04371092a2019158edc213dbb4ffc0000000000000000000000003a4b0316afc04371092a2019158edc213dbb4ffc000000000000000000000000000000000000000000000000001d6b085f932c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5696,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000098ff454c5d8a367c5532c057c665410610d409ec00000000000000000000000098ff454c5d8a367c5532c057c665410610d409ec000000000000000000000000000000000000000000000000002614941f8c2b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5699,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000001574a47822dc67d7ffd5e9de7b9fa85dbe98ac5f0000000000000000000000000000000000000000000000016f4f2e86035451a9,,,1,true -5702,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000013b1a8a6770eb031f23af46292df580aa3c2ab0000000000000000000000000013b1a8a6770eb031f23af46292df580aa3c2ab000000000000000000000000000000000000000000000000000055a797c3f443af00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5703,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001cbb4c62da977613636a7a779a3f364dfd6906a40000000000000000000000001cbb4c62da977613636a7a779a3f364dfd6906a400000000000000000000000000000000000000000000000000f6616c3475d18500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5704,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ab27b843f3f02d98f072e2ce937eeec0c0b9ce90000000000000000000000004ab27b843f3f02d98f072e2ce937eeec0c0b9ce900000000000000000000000000000000000000000000000000a2e5b5dfb2bb0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5706,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000c05079e4a384b51df73f2b632d81a92282d4125e000000000000000000000000c05079e4a384b51df73f2b632d81a92282d4125e00000000000000000000000000000000000000000000000ad4cdcc52a321fe0800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -5707,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c05079e4a384b51df73f2b632d81a92282d4125e000000000000000000000000c05079e4a384b51df73f2b632d81a92282d4125e00000000000000000000000000000000000000000000000001a20fc1d1aa06f500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5708,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003411cb2b60694d43f8f242fd8b48e28f2b4cafe90000000000000000000000003411cb2b60694d43f8f242fd8b48e28f2b4cafe90000000000000000000000000000000000000000000000000002279192f8bc2000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5709,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000011180325b253dad82be5855af67496ea2a7d207200000000000000000000000011180325b253dad82be5855af67496ea2a7d20720000000000000000000000000000000000000000000000000018f255faa0310000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5710,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000060e15f715ce1739d00280970aee91ded8644484500000000000000000000000060e15f715ce1739d00280970aee91ded86444845000000000000000000000000000000000000000000000000004263744d3897d900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5711,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000014189b7286fa5674bc1eda3b9846ba50b527570e00000000000000000000000014189b7286fa5674bc1eda3b9846ba50b527570e0000000000000000000000000000000000000000000000000034ffaf0b84688700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5714,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000118b2b107009ef2e874aca0eca4628dac947d64b000000000000000000000000118b2b107009ef2e874aca0eca4628dac947d64b00000000000000000000000000000000000000000000000000ac4c8c1560550000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5716,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8e5d2c181ee73458142792c2659cfe3ed10cb02000000000000000000000000e8e5d2c181ee73458142792c2659cfe3ed10cb02000000000000000000000000000000000000000000000000000b50fb934b0d8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5717,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008242b4304d70948b53d3a09ae1fc5542c0d4292a0000000000000000000000008242b4304d70948b53d3a09ae1fc5542c0d4292a000000000000000000000000000000000000000000000000015ac1b3b7fced0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5718,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009ef90a7c2581b17b8db0980cfed761745ec3f74b0000000000000000000000009ef90a7c2581b17b8db0980cfed761745ec3f74b000000000000000000000000000000000000000000000000002e5ba2cce65ed900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5719,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000052509e3d2a165416e14cc5603e99957b9ce83b0f00000000000000000000000052509e3d2a165416e14cc5603e99957b9ce83b0f000000000000000000000000000000000000000000000000003a0b0662d4792300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5720,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e23735c25becc2838e2f053886cd9c983a75449a000000000000000000000000e23735c25becc2838e2f053886cd9c983a75449a000000000000000000000000000000000000000000000000006e2255f409800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5722,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5f55468585ef91cf1a87aa3af4c830fa7ae78de000000000000000000000000e5f55468585ef91cf1a87aa3af4c830fa7ae78de0000000000000000000000000000000000000000000000000063a7f10cdcb4e000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5723,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009981e8c28824392eb77396e3fd183c83208b7cc80000000000000000000000009981e8c28824392eb77396e3fd183c83208b7cc8000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5724,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ce822ff7ae1cce0223ff7d44fcde422889c5a230000000000000000000000004ce822ff7ae1cce0223ff7d44fcde422889c5a23000000000000000000000000000000000000000000000000002b72ce23a37d1300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5725,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3ce8c5ef43afebab7e35bcca6b7f363ba14a10b000000000000000000000000d3ce8c5ef43afebab7e35bcca6b7f363ba14a10b000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5726,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f321716db6d2e5318a1cdbc15af80df25f2f8244000000000000000000000000f321716db6d2e5318a1cdbc15af80df25f2f824400000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5729,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e1031825e9667178167df00c485911847e4f91fe000000000000000000000000e1031825e9667178167df00c485911847e4f91fe000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5730,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000207b113566f3182208a28fb8c8e4f23ab8b0c42a000000000000000000000000207b113566f3182208a28fb8c8e4f23ab8b0c42a00000000000000000000000000000000000000000000000000000000026fd3d700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -5731,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa9ccef24415475e88d644d3c33fb4ed1b29ffaf000000000000000000000000aa9ccef24415475e88d644d3c33fb4ed1b29ffaf00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5732,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007af91cc664841f22e00f32efbd08c75da629d0110000000000000000000000007af91cc664841f22e00f32efbd08c75da629d01100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5733,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000883c6898713f968dde996467af2a20ff034a2e7b000000000000000000000000883c6898713f968dde996467af2a20ff034a2e7b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5735,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007277e46511d46981b2d63bb2e8304710e85075e70000000000000000000000007277e46511d46981b2d63bb2e8304710e85075e70000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5736,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000931e8a21e4714ff99b4514dc891f357bff8e54f8000000000000000000000000931e8a21e4714ff99b4514dc891f357bff8e54f80000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5737,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6e56fd011fde843410914e8c58ba005b447a64e000000000000000000000000b6e56fd011fde843410914e8c58ba005b447a64e0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5739,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c434436ad93c531f47b0a6415dafad6ebfa6d823000000000000000000000000c434436ad93c531f47b0a6415dafad6ebfa6d823000000000000000000000000000000000000000000000000007c58508723800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5740,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de50587f77e7cb30c3cceb2bcf19affb12668865000000000000000000000000de50587f77e7cb30c3cceb2bcf19affb126688650000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5741,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000943be0102bdd5eab787e510ff7d578cf1a499a8a000000000000000000000000943be0102bdd5eab787e510ff7d578cf1a499a8a0000000000000000000000000000000000000000000000000000000004f78c7200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -5743,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080f534afdb982ef359f3d9de8d82a8d3f3b965c500000000000000000000000080f534afdb982ef359f3d9de8d82a8d3f3b965c50000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5744,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d83abb0e7a9643c9b9040d6ca9238a4b78ab0210000000000000000000000008d83abb0e7a9643c9b9040d6ca9238a4b78ab0210000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5745,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000575db8bf64d74df770386196f651f5e920634b72000000000000000000000000575db8bf64d74df770386196f651f5e920634b72000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5746,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000098aa52dc061b008f3c11866c1294fb878b34e10d00000000000000000000000098aa52dc061b008f3c11866c1294fb878b34e10d000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5747,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000060c1b9739000dd2ae75f3bc27d93f4181d77e3d200000000000000000000000060c1b9739000dd2ae75f3bc27d93f4181d77e3d2000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5748,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b4d09b441573b8169341be1d0d2e6cb42e2bf721000000000000000000000000b4d09b441573b8169341be1d0d2e6cb42e2bf721000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5749,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e6b59759ec807879baa25ca6cc19aabef6191692000000000000000000000000e6b59759ec807879baa25ca6cc19aabef6191692000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5750,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000813407596e7c63cd3958ff081ca078cb31ddbf10000000000000000000000000813407596e7c63cd3958ff081ca078cb31ddbf100000000000000000000000000000000000000000000000000a7fff78c0ecf9200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5751,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a1ca2cd95c881800d86a3b3ba6b120b49cd7da03000000000000000000000000a1ca2cd95c881800d86a3b3ba6b120b49cd7da03000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5752,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000050849ee0e1b4b87ddd43fb3de905ce2783c2ad5000000000000000000000000050849ee0e1b4b87ddd43fb3de905ce2783c2ad50000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5753,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dff97b7634cb8df4d2b29185667b982118f1e620000000000000000000000000dff97b7634cb8df4d2b29185667b982118f1e620000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5754,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047f4ee0ecc560668854ea1b0b0c64742fe778b7500000000000000000000000047f4ee0ecc560668854ea1b0b0c64742fe778b75000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5755,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eca01f7d3efaedadd45786ad4bf6b10f471f0a29000000000000000000000000eca01f7d3efaedadd45786ad4bf6b10f471f0a29000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5757,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f06a88da83f93a4028b3917523d66e409c070b60000000000000000000000007f06a88da83f93a4028b3917523d66e409c070b6000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5758,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000000f14994ffd06b8c352e12b41113bc0f77fc404200000000000000000000000000f14994ffd06b8c352e12b41113bc0f77fc4042000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5759,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b4f9d59a0bc92cfe2103a4862573b58d86be3424000000000000000000000000b4f9d59a0bc92cfe2103a4862573b58d86be342400000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5761,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa9ccef24415475e88d644d3c33fb4ed1b29ffaf000000000000000000000000aa9ccef24415475e88d644d3c33fb4ed1b29ffaf000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5762,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a6fd5764581c142213140e17fabef2db70692c40000000000000000000000001a6fd5764581c142213140e17fabef2db70692c4000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5764,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009f13365f0d9c0470b86817e05a9c0cca4d17c8ae0000000000000000000000009f13365f0d9c0470b86817e05a9c0cca4d17c8ae0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5765,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000085a0ae757f88dae8b14f59e86b5f5616ba9de3c200000000000000000000000085a0ae757f88dae8b14f59e86b5f5616ba9de3c2000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5766,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032d641b2d54a46b9e4448bf35f667e17da2fd14d00000000000000000000000032d641b2d54a46b9e4448bf35f667e17da2fd14d00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5767,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b4a08ddb47fb1ab70b5bcc561caa39c3f63827a2000000000000000000000000b4a08ddb47fb1ab70b5bcc561caa39c3f63827a200000000000000000000000000000000000000000000000000499c8322914c6300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5768,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d071194f93de2461b545c85d621c730704a02343000000000000000000000000d071194f93de2461b545c85d621c730704a02343000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5770,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d703a8918da1bb6ee7073a481e89ae04581a5342000000000000000000000000d703a8918da1bb6ee7073a481e89ae04581a53420000000000000000000000000000000000000000000000000002433b35bafe4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5771,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c56569af55410b2922e116a233494972b8dc3474000000000000000000000000c56569af55410b2922e116a233494972b8dc34740000000000000000000000000000000000000000000000000031bced02db000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5772,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000822759d8f48a42b9ff29c040619b5539c31b727b000000000000000000000000822759d8f48a42b9ff29c040619b5539c31b727b000000000000000000000000000000000000000000000000013fbe85edc9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5774,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000067e3d581dbfe600510b0aed1a74b2840ef4ea3db00000000000000000000000067e3d581dbfe600510b0aed1a74b2840ef4ea3db000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5775,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d10aa04285b5f85d22901b9d01d89d75077a9657000000000000000000000000d10aa04285b5f85d22901b9d01d89d75077a96570000000000000000000000000000000000000000000000000006b88d918b780000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5776,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000520d54f75777b58fee71a3074256aabbdb47074c000000000000000000000000520d54f75777b58fee71a3074256aabbdb47074c00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5777,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000087105752954887b1140b7cea133eacc8ae8607b500000000000000000000000087105752954887b1140b7cea133eacc8ae8607b5000000000000000000000000000000000000000000000000005fec5b60ef800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5778,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000035f78a470000c9974aab3e37a6882e374f42566300000000000000000000000035f78a470000c9974aab3e37a6882e374f425663000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5779,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59900000000000000000000000068f180fcce6836688e9084f035309e29bf0a209500000000000000000000000008968309443465c03244c9206052aa20cdbb679700000000000000000000000008968309443465c03244c9206052aa20cdbb6797000000000000000000000000000000000000000000000000000000000ccf22bb00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x45e79fb50a21687be2a39626198e4b64260ee10f3a43ca36c409f2913507eda4,2022-01-11 16:07:02.000 UTC,0,true -5780,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009f9f1a9c106cadb1f776cc582d3c78da4043dd510000000000000000000000009f9f1a9c106cadb1f776cc582d3c78da4043dd51000000000000000000000000000000000000000000000000015d7d2d55698d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5783,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef101ffdcef941b6fad240226f754e99f84e177c000000000000000000000000ef101ffdcef941b6fad240226f754e99f84e177c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5784,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000018a842c315c6a8c54d041c65b0aa2732f50c00da00000000000000000000000018a842c315c6a8c54d041c65b0aa2732f50c00da000000000000000000000000000000000000000000000000003c6568f12e800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5785,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e3b749409d240c7f50b483079e0df003c8c181f0000000000000000000000003e3b749409d240c7f50b483079e0df003c8c181f000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5786,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cb55475384aa31c5100986cda2476df2103fc2ee000000000000000000000000cb55475384aa31c5100986cda2476df2103fc2ee000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5787,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000086d7667cb7b0d33e81300cb6a220b553360b3d3400000000000000000000000086d7667cb7b0d33e81300cb6a220b553360b3d34000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5789,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000445bf7bab73ab0bdb84c882f8f7b3ee6bd28a2ba000000000000000000000000445bf7bab73ab0bdb84c882f8f7b3ee6bd28a2ba000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5793,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d565a49e5caa0eb79d5175405283fc0e3326c097000000000000000000000000d565a49e5caa0eb79d5175405283fc0e3326c097000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5797,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000067a6076958f88b4944c7281b6fc2e67c76bcb9e200000000000000000000000067a6076958f88b4944c7281b6fc2e67c76bcb9e2000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5799,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000187f7311a58baa258855fd190071411110d685f0000000000000000000000000187f7311a58baa258855fd190071411110d685f000000000000000000000000000000000000000000000000001d882cb9b20800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x4aa6164a39bbbd80526f575a4715ac329342863884ac948c4c8617a98e25aade,2022-03-04 10:57:07.000 UTC,0,true -5800,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000068abe26c2e9fae42c4daeed9d1ac68b3488fc83900000000000000000000000068abe26c2e9fae42c4daeed9d1ac68b3488fc839000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5802,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e124f9182d36cf13c2cc6b4657394080b5807d20000000000000000000000002e124f9182d36cf13c2cc6b4657394080b5807d200000000000000000000000000000000000000000000000000a4c59d670a7f4100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5803,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000dc1d71121c0880e02ea1bad4f8fde0ae2c018f50000000000000000000000000dc1d71121c0880e02ea1bad4f8fde0ae2c018f5000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5804,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7101e2e0680d30623e59de267ec4b2f4ecfd3ce000000000000000000000000d7101e2e0680d30623e59de267ec4b2f4ecfd3ce000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5806,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c5e7c5032d203b69da4d8feb7f3c3179fd9cb83b000000000000000000000000c5e7c5032d203b69da4d8feb7f3c3179fd9cb83b00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5808,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000001b6fc127150282b390e255f0772e6f8d806e264d0000000000000000000000001b6fc127150282b390e255f0772e6f8d806e264d00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -5809,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000eed8403b6513c80bfcedeb8b616796e4b91d1a0b000000000000000000000000eed8403b6513c80bfcedeb8b616796e4b91d1a0b000000000000000000000000000000000000000000000000000000007735940000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -5810,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000000444c019c90402033ff8246bcea440ceb9468c880000000000000000000000000444c019c90402033ff8246bcea440ceb9468c8800000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -5811,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d0d6e0e58fe68bd495b4fd56bff3b19676460272000000000000000000000000d0d6e0e58fe68bd495b4fd56bff3b196764602720000000000000000000000000000000000000000000000000332e7e028cc6b7e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5812,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d565a49e5caa0eb79d5175405283fc0e3326c097000000000000000000000000d565a49e5caa0eb79d5175405283fc0e3326c0970000000000000000000000000000000000000000000000000003bde3f4c6630000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5815,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d41b30ea59b8e7fca13ac85172411bd98779fb9d000000000000000000000000d41b30ea59b8e7fca13ac85172411bd98779fb9d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5816,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d41b30ea59b8e7fca13ac85172411bd98779fb9d000000000000000000000000d41b30ea59b8e7fca13ac85172411bd98779fb9d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5817,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d41b30ea59b8e7fca13ac85172411bd98779fb9d000000000000000000000000d41b30ea59b8e7fca13ac85172411bd98779fb9d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5818,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005f079c9d3f5b212698f30359d1bea0fe9a037e620000000000000000000000005f079c9d3f5b212698f30359d1bea0fe9a037e62000000000000000000000000000000000000000000000000003fc3a8285ee10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5819,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003bb97b97fa7499d688251eabae41ab0810f6dea50000000000000000000000003bb97b97fa7499d688251eabae41ab0810f6dea5000000000000000000000000000000000000000000000000009ee3b65cf3854b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5820,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ffea6035d1300c983d2cbbe42e48351a2c1f27b9000000000000000000000000ffea6035d1300c983d2cbbe42e48351a2c1f27b90000000000000000000000000000000000000000000000000040d9ed9a7f6a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5822,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000958f5a41ba65d1eed7aae15a03a6e557c17b91fd000000000000000000000000958f5a41ba65d1eed7aae15a03a6e557c17b91fd00000000000000000000000000000000000000000000000001469b1fe578b62400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5824,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039be4b0a0b0486a28eb60bf16061be14f51ef91400000000000000000000000039be4b0a0b0486a28eb60bf16061be14f51ef91400000000000000000000000000000000000000000000000000acc4ce1d881f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5826,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004b3dab9f937030d14eb25f6f25ce749c68dd57ab0000000000000000000000004b3dab9f937030d14eb25f6f25ce749c68dd57ab00000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5827,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000068e70285e515aeda9a99dcea429d0c9dc36a85b000000000000000000000000068e70285e515aeda9a99dcea429d0c9dc36a85b00000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5828,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e703b5d3abbfbf7d64c3e164f812b1998f097f47000000000000000000000000e703b5d3abbfbf7d64c3e164f812b1998f097f4700000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5829,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba35b90e51c42e1069bad364b65512c1e7d87f39000000000000000000000000ba35b90e51c42e1069bad364b65512c1e7d87f39000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5830,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e34076bc4355792c789a46ada9fa8a3e8b57f03b000000000000000000000000e34076bc4355792c789a46ada9fa8a3e8b57f03b00000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5831,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000098908c98a27a26189f5f226aa16171c0cb9fdb3600000000000000000000000098908c98a27a26189f5f226aa16171c0cb9fdb3600000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5832,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000938780de40be92d05bfe2dac27ecc4c69f4cd6ac000000000000000000000000938780de40be92d05bfe2dac27ecc4c69f4cd6ac00000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5834,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000059b254553bb97ca61a99c2bbdbefb594aa94365000000000000000000000000059b254553bb97ca61a99c2bbdbefb594aa94365000000000000000000000000000000000000000000000000001947f6d5c72d4600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5835,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a4e2be266106268849f75138db3f0ad66d804aad000000000000000000000000a4e2be266106268849f75138db3f0ad66d804aad000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5836,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a8c650ccdec6078828b30bd52ae82caf31a38aae000000000000000000000000a8c650ccdec6078828b30bd52ae82caf31a38aae00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5837,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000913cf0f5d17c595a36c94dfec86f16efaa50f5b1000000000000000000000000913cf0f5d17c595a36c94dfec86f16efaa50f5b10000000000000000000000000000000000000000000000000038d494eb1715d100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5838,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005cf0931ac79d56ef8ecef6842e0c78f7b3be789f0000000000000000000000005cf0931ac79d56ef8ecef6842e0c78f7b3be789f0000000000000000000000000000000000000000000000000154e7b83e4f34c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5839,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099e0ba8e8919d18fad1977208d50bdbabd868b1200000000000000000000000099e0ba8e8919d18fad1977208d50bdbabd868b12000000000000000000000000000000000000000000000000000c6f3b40b6c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5840,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000053eb86f6d4d65d0325142844b4dac80ccf92404f00000000000000000000000053eb86f6d4d65d0325142844b4dac80ccf92404f0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5841,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000067e3d581dbfe600510b0aed1a74b2840ef4ea3db00000000000000000000000067e3d581dbfe600510b0aed1a74b2840ef4ea3db00000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5842,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000089b2439ed5a0579c9dd1ec0060dca78aa9e0276500000000000000000000000089b2439ed5a0579c9dd1ec0060dca78aa9e0276500000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5843,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b41ea083efb19b5a42e548f5b82594688b2a46c7000000000000000000000000b41ea083efb19b5a42e548f5b82594688b2a46c700000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5844,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ad2df9bc2fe3438f5b67a25ef31557fa63420b0d000000000000000000000000ad2df9bc2fe3438f5b67a25ef31557fa63420b0d00000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5845,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000081242be4885f8da938bc1795a0fc86b12bc7a01300000000000000000000000081242be4885f8da938bc1795a0fc86b12bc7a01300000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5846,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003035a1bbd824041b07f8ab2297a71a81e00127c50000000000000000000000003035a1bbd824041b07f8ab2297a71a81e00127c500000000000000000000000000000000000000000000000006f05b59d3b2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x3e470a3549faf6faad097a10ea574689edfc0ddfee58d7911e408f30905b6326,2021-12-03 08:47:30.000 UTC,0,true -5847,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000432c4407683f2a751da658448f14a9fc76bf4887000000000000000000000000432c4407683f2a751da658448f14a9fc76bf488700000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5848,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008dbd7d8fad56a6698063c77447cd0d31f59c839f0000000000000000000000008dbd7d8fad56a6698063c77447cd0d31f59c839f00000000000000000000000000000000000000000000000000531d4f1ebe547d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5849,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b4455961533f9bff3db0ffc51197679e76a044f0000000000000000000000000b4455961533f9bff3db0ffc51197679e76a044f000000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5850,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000257989cfdb248c515807d7e5892eeca350518c83000000000000000000000000257989cfdb248c515807d7e5892eeca350518c8300000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5851,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000942030d115a5895d1412604e4302dcd674875722000000000000000000000000942030d115a5895d1412604e4302dcd67487572200000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5852,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000592d646b32e06cbeb37eca996bc3de09b9284f02000000000000000000000000592d646b32e06cbeb37eca996bc3de09b9284f02000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5853,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000053eb86f6d4d65d0325142844b4dac80ccf92404f00000000000000000000000053eb86f6d4d65d0325142844b4dac80ccf92404f000000000000000000000000000000000000000000000000058d15e17628000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5854,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ed79e33546d13ae3e0bc5a295cdd16648bd3d1c7000000000000000000000000ed79e33546d13ae3e0bc5a295cdd16648bd3d1c700000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5855,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a90ee5a3bec0d9313b7992cd94dfc2f495f39041000000000000000000000000a90ee5a3bec0d9313b7992cd94dfc2f495f3904100000000000000000000000000000000000000000000000000638a5e59c50d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5856,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000334af0de88370100861140ad7d01d99ac0af1159000000000000000000000000334af0de88370100861140ad7d01d99ac0af1159000000000000000000000000000000000000000000000000001377384c99a6e200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5857,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000400d190cc5451e8127b3dd393559a7ed12249123000000000000000000000000400d190cc5451e8127b3dd393559a7ed1224912300000000000000000000000000000000000000000000000000ab856c2472fd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5860,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b843de66d048e87d986c6dda826a79e9a724d894000000000000000000000000b843de66d048e87d986c6dda826a79e9a724d89400000000000000000000000000000000000000000000000000013969cc61790000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5861,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007453019b806919563eac33870fe5f8e5154fdf380000000000000000000000007453019b806919563eac33870fe5f8e5154fdf3800000000000000000000000000000000000000000000000000c4ea764436a10600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x8df0392700003ce47d3e1a40ad85f1a91c215d7d3bb5684c4777db996277a6a5,2022-05-29 05:47:39.000 UTC,0,true -5863,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003459566b907c90be7868c2aad3a951b63ad631d90000000000000000000000003459566b907c90be7868c2aad3a951b63ad631d9000000000000000000000000000000000000000000000000001ff973cafa800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5864,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000edadb841ffa02e2eb1f9b61829ad6ac318c38588000000000000000000000000edadb841ffa02e2eb1f9b61829ad6ac318c3858800000000000000000000000000000000000000000000000000406cdb6379180000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5868,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000151b079d1f51ff2dda6a4bcb7077380b0d76d721000000000000000000000000151b079d1f51ff2dda6a4bcb7077380b0d76d7210000000000000000000000000000000000000000000000000000b50c85fa2c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5869,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ccc93c66c6e80bf3d68bc63f546cbb42ab4895d6000000000000000000000000ccc93c66c6e80bf3d68bc63f546cbb42ab4895d6000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5870,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001bd91efda871150bf54d11ee87ef67c2036b52460000000000000000000000001bd91efda871150bf54d11ee87ef67c2036b524600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5871,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d21dac3f1a8672d385ab7caeeb3eb31b5eee1947000000000000000000000000d21dac3f1a8672d385ab7caeeb3eb31b5eee194700000000000000000000000000000000000000000000000002c156df45ef030000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5872,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000082fd529006e13beea50f5cf906d268de905ce7f900000000000000000000000082fd529006e13beea50f5cf906d268de905ce7f900000000000000000000000000000000000000000000000000068b14feb6870200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5878,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8983d041f4e752032f2964b8e095c1f1c61956b000000000000000000000000b8983d041f4e752032f2964b8e095c1f1c61956b0000000000000000000000000000000000000000000000000375ebcf5a6ba6f900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5879,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fa3402befaf74404c531c878f433aac27bad2340000000000000000000000007fa3402befaf74404c531c878f433aac27bad23400000000000000000000000000000000000000000000000000ac12603c4be50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5880,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bfa3f52d271883e11c0210b1bfd2fa061bf49d8a000000000000000000000000bfa3f52d271883e11c0210b1bfd2fa061bf49d8a00000000000000000000000000000000000000000000000002a0871a679c199a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5883,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007841ca40b1ae5e5b19818817ecd784a496f87df00000000000000000000000007841ca40b1ae5e5b19818817ecd784a496f87df00000000000000000000000000000000000000000000000000137ac9eb581b1c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5884,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099f0b621c3cb9149bd653ae5fcb79481764eb5f200000000000000000000000099f0b621c3cb9149bd653ae5fcb79481764eb5f200000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5885,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000196aafc8f801c749196062e19774ba747a8ac3c4000000000000000000000000196aafc8f801c749196062e19774ba747a8ac3c4000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5887,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000eb4b776bd8dadbe54b4de754338ac1f07897d3e0000000000000000000000000eb4b776bd8dadbe54b4de754338ac1f07897d3e0000000000000000000000000000000000000000000000000008d539894c0cc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5893,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1912c7917b6da214a7118d323c3049229d765b3000000000000000000000000f1912c7917b6da214a7118d323c3049229d765b300000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5894,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000036e7f8a7e490f6b10f55c985441bbba13e04f5be00000000000000000000000036e7f8a7e490f6b10f55c985441bbba13e04f5be00000000000000000000000000000000000000000000000000464ac2467aa00700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5895,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000007a64826e5798109d75b519010bcc833ee80d99d00000000000000000000000007a64826e5798109d75b519010bcc833ee80d99d000000000000000000000000000000000000000000000000015c9e002fa7730000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5897,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000490fcefab0dfbd85aeda3eef8fb4a0628bba2060000000000000000000000000490fcefab0dfbd85aeda3eef8fb4a0628bba206000000000000000000000000000000000000000000000000000443a6bd55edc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5898,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e3c92ebf0eaa833207e49183a485c362489640a9000000000000000000000000e3c92ebf0eaa833207e49183a485c362489640a900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5899,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b114bd2fd24258a9ba8fe40e0c7081bda923f6aa000000000000000000000000b114bd2fd24258a9ba8fe40e0c7081bda923f6aa00000000000000000000000000000000000000000000000004022a29bd180c3800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5900,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000353b03d97f644bb6c296e07cd347af64083e918b000000000000000000000000353b03d97f644bb6c296e07cd347af64083e918b00000000000000000000000000000000000000000000001814d08819d47036aa00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -5901,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ce7e5098619f8660aad4bac0de6ac57ef709d8a7000000000000000000000000ce7e5098619f8660aad4bac0de6ac57ef709d8a7000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5902,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbab5f03e366b48459110f582953fe81fb88ec30000000000000000000000000cbab5f03e366b48459110f582953fe81fb88ec3000000000000000000000000000000000000000000000000000c29fb5eb32e5c900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5903,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b389b98659d17ec8c264b523064e246bb464e755000000000000000000000000b389b98659d17ec8c264b523064e246bb464e755000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5904,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e08a4b01143443f3beb5768748543d6347360f5b000000000000000000000000e08a4b01143443f3beb5768748543d6347360f5b0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5905,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000410d9cbadd36333d98c2391bc6525f1724d53949000000000000000000000000410d9cbadd36333d98c2391bc6525f1724d539490000000000000000000000000000000000000000000000000000000001e6aa3200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -5906,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e6e0f3c0c361675c8c08afb33eaea33880eaf239000000000000000000000000e6e0f3c0c361675c8c08afb33eaea33880eaf2390000000000000000000000000000000000000000000000000004dc00c864c2c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5907,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000410d9cbadd36333d98c2391bc6525f1724d53949000000000000000000000000410d9cbadd36333d98c2391bc6525f1724d5394900000000000000000000000000000000000000000000000000152cbe698a3f4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5908,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004bc6480367e6e572e503b2b6b579031105b3c5c80000000000000000000000004bc6480367e6e572e503b2b6b579031105b3c5c800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5909,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ebc1818f2c4803cd8ecfb6dc0ee0da0dd42f31d0000000000000000000000003ebc1818f2c4803cd8ecfb6dc0ee0da0dd42f31d0000000000000000000000000000000000000000000000000008b8b072a6624a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5910,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002875403e0d69641cf631f10e48e63c40e4b27fc30000000000000000000000002875403e0d69641cf631f10e48e63c40e4b27fc3000000000000000000000000000000000000000000000000001becd9a8d38cb500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5911,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001778cb9fd8d489c740568a9bf16004d948d9b6bf0000000000000000000000001778cb9fd8d489c740568a9bf16004d948d9b6bf000000000000000000000000000000000000000000000000002d12be6ce4ce0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5912,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006241ad77084b023f13e9ef075610452d1b51725f0000000000000000000000006241ad77084b023f13e9ef075610452d1b51725f000000000000000000000000000000000000000000000000002e72d910156f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5913,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005a07d49f109207f5b23c6405a321d14fe8f130c00000000000000000000000005a07d49f109207f5b23c6405a321d14fe8f130c00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5914,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000087b1f518ca6bec87d70af81e378fe961012e988200000000000000000000000087b1f518ca6bec87d70af81e378fe961012e98820000000000000000000000000000000000000000000000000000000001853e4500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -5915,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bb8248ab9b9e4e82beb10c74622975270643ee8d000000000000000000000000bb8248ab9b9e4e82beb10c74622975270643ee8d0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5916,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061656eb3ce807894625d4a87510e53e719186af000000000000000000000000061656eb3ce807894625d4a87510e53e719186af000000000000000000000000000000000000000000000000000ea7aa67b2d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5918,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007aa3c6a33ec4bbfc6319e3c98333a018efdb1e680000000000000000000000007aa3c6a33ec4bbfc6319e3c98333a018efdb1e6800000000000000000000000000000000000000000000000000a80290b961acc600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5919,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a9bb8b1211ed7648982ac37cbaf4f381efb3db32000000000000000000000000a9bb8b1211ed7648982ac37cbaf4f381efb3db32000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5920,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9e2b81fd37418a8d2b276e257e9e129a79c1c21000000000000000000000000e9e2b81fd37418a8d2b276e257e9e129a79c1c2100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5922,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f5771dd835880fff8cede5a8f5d0f2843ee9869e000000000000000000000000f5771dd835880fff8cede5a8f5d0f2843ee9869e00000000000000000000000000000000000000000000000000069dc7a032cb0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5923,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000319aeb370f46a08477fa577a9b3567799dbae57d000000000000000000000000319aeb370f46a08477fa577a9b3567799dbae57d0000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5924,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006dfb311f0be648cd0b1fe2065b6d0ca41397bd140000000000000000000000006dfb311f0be648cd0b1fe2065b6d0ca41397bd14000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5927,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000004d9618239044a2ab2581f0cc954d28873afa4d7b00000000000000000000000000000000000000000000000194755ac36206ac0a,,,1,true -5928,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000275c6cb0d5ce33ae2268438fe40fcf51bbc989bc000000000000000000000000275c6cb0d5ce33ae2268438fe40fcf51bbc989bc000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5929,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008cf368d64aabb3996ff23707e9e326e8c707ef400000000000000000000000008cf368d64aabb3996ff23707e9e326e8c707ef40000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5930,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c33a2966a7559b41d0f4b1ad85a0d8468c3517c9000000000000000000000000c33a2966a7559b41d0f4b1ad85a0d8468c3517c9000000000000000000000000000000000000000000000000015e9f7961f4770000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5931,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009e16a7785336f411796bbdd2246e13d506009c590000000000000000000000009e16a7785336f411796bbdd2246e13d506009c590000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5932,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005150fe3c1407fe9ccc2821feb94cf7dd6ca789c80000000000000000000000005150fe3c1407fe9ccc2821feb94cf7dd6ca789c800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5933,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006148cb29b9fadc348ddb3f87900f31bcc2dc645d0000000000000000000000006148cb29b9fadc348ddb3f87900f31bcc2dc645d00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5934,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004d5b7e62d31fcb77b0765a27b26b29bb76af54a80000000000000000000000004d5b7e62d31fcb77b0765a27b26b29bb76af54a800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5937,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de05d52a6a2f06399511098e408b37b24d1c0923000000000000000000000000de05d52a6a2f06399511098e408b37b24d1c092300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5938,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004bed34780515bc6d6d4dec9cbc178dc7c3f523730000000000000000000000004bed34780515bc6d6d4dec9cbc178dc7c3f5237300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5939,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006dc681ae0d0a0525e302a9e0b26f4ea60015bc9e0000000000000000000000006dc681ae0d0a0525e302a9e0b26f4ea60015bc9e00000000000000000000000000000000000000000000000000169c9eee8f61e500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5940,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fa81d0ab5fa49f4f0881fc6b8c51b53911c99336000000000000000000000000fa81d0ab5fa49f4f0881fc6b8c51b53911c99336000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5941,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dbbea5db8e58f569ac80cc71a9d8c7e9201d6205000000000000000000000000dbbea5db8e58f569ac80cc71a9d8c7e9201d6205000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5942,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdafef987dfe2e90c68b303d82f84fda268e43dc000000000000000000000000bdafef987dfe2e90c68b303d82f84fda268e43dc000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5943,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008fc9ae9b556a138c30c3bb4b149ebc0ebc419e500000000000000000000000008fc9ae9b556a138c30c3bb4b149ebc0ebc419e5000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5944,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a13f02db8b4f27531ceaeadf341ee69ea731ee4f000000000000000000000000a13f02db8b4f27531ceaeadf341ee69ea731ee4f00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5945,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055b07b1efe15bbeff6209045775dc3d3aee1731b00000000000000000000000055b07b1efe15bbeff6209045775dc3d3aee1731b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5946,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000af30b0285bb41bdbb732e4a533874901e4943522000000000000000000000000af30b0285bb41bdbb732e4a533874901e4943522000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5947,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000054a212e596846a3e59c694f33073e6b4dc9f7d8e00000000000000000000000054a212e596846a3e59c694f33073e6b4dc9f7d8e00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5948,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006291a2710471c6689b22acf546cc8c7379011ad00000000000000000000000006291a2710471c6689b22acf546cc8c7379011ad0000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5951,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049caffd56bf1e854ccfe40579a446553ba5f531200000000000000000000000049caffd56bf1e854ccfe40579a446553ba5f53120000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5952,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000006d74a139d0181056baae5bb64db44e15e74ccbd00000000000000000000000006d74a139d0181056baae5bb64db44e15e74ccbd0000000000000000000000000000000000000000000000000021bb2d6e6cd40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5954,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b2206efd4292d7722856670c7acfc8c5a36fbb8c000000000000000000000000b2206efd4292d7722856670c7acfc8c5a36fbb8c00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5955,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006291a2710471c6689b22acf546cc8c7379011ad00000000000000000000000006291a2710471c6689b22acf546cc8c7379011ad000000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5956,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000325a250b27c689717327997de95e0d71303729b0000000000000000000000000325a250b27c689717327997de95e0d71303729b000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5957,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d5a99d45458fcd9bad227d94190fad98157c565d000000000000000000000000d5a99d45458fcd9bad227d94190fad98157c565d00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5958,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008ed64b84c54763d4ea9ffd645431176e1471034d0000000000000000000000008ed64b84c54763d4ea9ffd645431176e1471034d00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5959,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b5b41c5b4bf57c4fbe4fb638b1106e00b9210b79000000000000000000000000b5b41c5b4bf57c4fbe4fb638b1106e00b9210b7900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5960,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000006d71e7ea3a5b4a2f0760a06d0b393a29b4ace7e00000000000000000000000006d71e7ea3a5b4a2f0760a06d0b393a29b4ace7e0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5961,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008a878215d4cf364777b75b4e35ed8e004fdcde1f0000000000000000000000008a878215d4cf364777b75b4e35ed8e004fdcde1f0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5962,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000410d9cbadd36333d98c2391bc6525f1724d53949000000000000000000000000410d9cbadd36333d98c2391bc6525f1724d53949000000000000000000000000000000000000000000000000002d010feed42fc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5963,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005b82b8a947c5e4c4a5d2a9ca659712d92394135c0000000000000000000000005b82b8a947c5e4c4a5d2a9ca659712d92394135c0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5964,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000014f0b038c7d8487a40d05da17d7e0c412b9e712e00000000000000000000000014f0b038c7d8487a40d05da17d7e0c412b9e712e0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5965,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ffd70adf0fc48fc2f0e3866ef02f893794588d0f000000000000000000000000ffd70adf0fc48fc2f0e3866ef02f893794588d0f00000000000000000000000000000000000000000000000000805bbf5222998700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5966,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c9082b3eccbbb7a83a1d54317735f126bf990170000000000000000000000008c9082b3eccbbb7a83a1d54317735f126bf990170000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5967,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e0678aff40449aa5d26292558846da4b5e745bfd000000000000000000000000e0678aff40449aa5d26292558846da4b5e745bfd00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5968,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6bc3639127cac8e38cefc1670109d8fedfd1ac0000000000000000000000000c6bc3639127cac8e38cefc1670109d8fedfd1ac000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5969,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001ba2fc93c2306110c6cedc576e7e150c0d32f67b0000000000000000000000001ba2fc93c2306110c6cedc576e7e150c0d32f67b00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5970,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be0c773fa345a04f1570fda6859cf6500e437dc6000000000000000000000000be0c773fa345a04f1570fda6859cf6500e437dc600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5971,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000023a88b6fcb58dbc37d415e654384d9bf7a51a50800000000000000000000000023a88b6fcb58dbc37d415e654384d9bf7a51a5080000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5972,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000989111660f5c0872ad46881d56267c186782db22000000000000000000000000989111660f5c0872ad46881d56267c186782db2200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5973,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a738b833927a7ac96e05aa27aa49c5ded511f345000000000000000000000000a738b833927a7ac96e05aa27aa49c5ded511f34500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5974,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045d036d3a342248eb2e3880d144079630cccba2800000000000000000000000045d036d3a342248eb2e3880d144079630cccba2800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5975,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf0b8850992a8ebd82b2247d9c5d296f26add866000000000000000000000000bf0b8850992a8ebd82b2247d9c5d296f26add86600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5976,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008ce6d8964996007feab7d718264a0a31791bcc020000000000000000000000008ce6d8964996007feab7d718264a0a31791bcc0200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5978,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000215b32d9c41b217328b9a185fb68e82a43afa3d0000000000000000000000000215b32d9c41b217328b9a185fb68e82a43afa3d000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5979,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008cf6eb2048d61f1d36e33331a20110c42cded27f0000000000000000000000008cf6eb2048d61f1d36e33331a20110c42cded27f00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5980,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e796b8b4d0646e7d2717840372020a431b738410000000000000000000000006e796b8b4d0646e7d2717840372020a431b7384100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5981,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000065a3c7d35b7deb7a76000b9e6118b4ce8a6ce99000000000000000000000000065a3c7d35b7deb7a76000b9e6118b4ce8a6ce9900000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5982,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000093af239db06c41adea389ab30b3b6a9e69d34a8f00000000000000000000000093af239db06c41adea389ab30b3b6a9e69d34a8f00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5983,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ecf30ad77bc17ca2959cadbbf23f791da44c3ca3000000000000000000000000ecf30ad77bc17ca2959cadbbf23f791da44c3ca30000000000000000000000000000000000000000000000000002d79883d2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5984,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007e29d74db1f1147cc3717102e64f6e7cfa66c7430000000000000000000000007e29d74db1f1147cc3717102e64f6e7cfa66c74300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5985,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000347cc2875d007d2ffd5ccfd2f700538fbb66a0d0000000000000000000000000347cc2875d007d2ffd5ccfd2f700538fbb66a0d00000000000000000000000000000000000000000000000000002d79883d2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5986,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000422a4fa6b254f24718d79bd6f86f6315cf50d139000000000000000000000000422a4fa6b254f24718d79bd6f86f6315cf50d13900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5988,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000010d456618cd9ad73e0bbfe060d9b6c92e54b858e00000000000000000000000010d456618cd9ad73e0bbfe060d9b6c92e54b858e00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5989,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de0d201cffb9e692ef999bed8aefee0dcc7b2cb4000000000000000000000000de0d201cffb9e692ef999bed8aefee0dcc7b2cb40000000000000000000000000000000000000000000000000081277a09edf8a100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5990,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001f26286c4b6c7edbeb055405fe653a2c5cec27ae0000000000000000000000001f26286c4b6c7edbeb055405fe653a2c5cec27ae00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5991,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000804d91166fd352e5712482dd1f5c5c329c4d64a8000000000000000000000000804d91166fd352e5712482dd1f5c5c329c4d64a80000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5992,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a0f0a3f1d464119592504540ca9893f1ecc11539000000000000000000000000a0f0a3f1d464119592504540ca9893f1ecc11539000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5993,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000092c5d762103ddfca8d2ded96dd503317873afb1e00000000000000000000000092c5d762103ddfca8d2ded96dd503317873afb1e00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5994,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006111bfff26b60a5b45a2693db6fef1a52897f84c0000000000000000000000006111bfff26b60a5b45a2693db6fef1a52897f84c00000000000000000000000000000000000000000000000000027ca57357c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5995,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000316e0ba8105e8bbf53a9549ceff8cc36f8761e75000000000000000000000000316e0ba8105e8bbf53a9549ceff8cc36f8761e7500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5997,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a618250db48aca188d44d3827ed627166a2f7be1000000000000000000000000a618250db48aca188d44d3827ed627166a2f7be100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -5998,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009efbebcc6e7284d8e97a3ccd06d735d25391a9b10000000000000000000000009efbebcc6e7284d8e97a3ccd06d735d25391a9b100000000000000000000000000000000000000000000000002390c216e8f067000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6000,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007b2798b32b5006641265f86c823d4938cad329070000000000000000000000007b2798b32b5006641265f86c823d4938cad3290700000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6001,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f92305d31299a049387e78992961cffbad0315b5000000000000000000000000f92305d31299a049387e78992961cffbad0315b500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6002,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000020ff9ae90bd2751559bdc01bf425cc395831d09100000000000000000000000020ff9ae90bd2751559bdc01bf425cc395831d091000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6003,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000239f09dfa18d501cbd283237f3985c04047b7a57000000000000000000000000239f09dfa18d501cbd283237f3985c04047b7a57000000000000000000000000000000000000000000000000083361c02feb308000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x73837927bca29223e9527991ff947f94b48bd6f7e2939dc77cfdcc2b110c662f,2022-04-28 09:49:33.000 UTC,0,true -6004,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000860ecd7df22ec9c7d8535fd9e59faae93b20bb9a000000000000000000000000860ecd7df22ec9c7d8535fd9e59faae93b20bb9a00000000000000000000000000000000000000000000000000a66e480ee9c92300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6005,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c80651d6ddd6d35b380d1c9e7d56d25e400163a4000000000000000000000000c80651d6ddd6d35b380d1c9e7d56d25e400163a400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6006,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e7243c2681857f05891be7e91a6049402dd74060000000000000000000000004e7243c2681857f05891be7e91a6049402dd740600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6007,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000084a1830b4ca5c9ec317a380756cf3fd9ea9889f700000000000000000000000084a1830b4ca5c9ec317a380756cf3fd9ea9889f700000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6008,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005cf60c4bd43defd4e62096e7a82f615b4fe156840000000000000000000000005cf60c4bd43defd4e62096e7a82f615b4fe1568400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6009,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000053c0e301d886723f7e76ca2db4b9fd673ff690ab00000000000000000000000053c0e301d886723f7e76ca2db4b9fd673ff690ab00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6010,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a8d1e6a7af3ff1b85f5056af6aed9caa5a670840000000000000000000000001a8d1e6a7af3ff1b85f5056af6aed9caa5a6708400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6012,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f35f15297404e21d832232cca28933dc1ff75bb0000000000000000000000003f35f15297404e21d832232cca28933dc1ff75bb00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6013,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c14eaa5467971a22a8d0198f6319595055208c80000000000000000000000002c14eaa5467971a22a8d0198f6319595055208c800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6014,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000100ceb2adcfdbd339a2926ea670298a91ee3d501000000000000000000000000100ceb2adcfdbd339a2926ea670298a91ee3d501000000000000000000000000000000000000000000000000010a741a4627800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6015,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000d6d085f6b641799f70e0446fa96c828d66b1bc1d000000000000000000000000d6d085f6b641799f70e0446fa96c828d66b1bc1d0000000000000000000000000000000000000000000000000000000002f6b2da00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -6017,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6d085f6b641799f70e0446fa96c828d66b1bc1d000000000000000000000000d6d085f6b641799f70e0446fa96c828d66b1bc1d0000000000000000000000000000000000000000000000000035b6219134d70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6019,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000073da2ab610c2e570740ec6e6aeb857b22240227000000000000000000000000073da2ab610c2e570740ec6e6aeb857b2224022700000000000000000000000000000000000000000000000000036ceeccdf7194000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe59037c08ab16d1757f0f85617051c227a744e969f18cedcc4bf7b61cc4113c7,2022-03-12 06:40:03.000 UTC,0,true -6020,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000088a3dd4a42cb8f0655e0807b99969fcf45a2f9f700000000000000000000000088a3dd4a42cb8f0655e0807b99969fcf45a2f9f700000000000000000000000000000000000000000000000000a30ca23cb262b500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6023,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aaaca4aae53881cca5f86b9b46f5b04e9ae3b0f2000000000000000000000000aaaca4aae53881cca5f86b9b46f5b04e9ae3b0f2000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6024,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007e3d993a8d63c25d1db5f7ff8a8d6c59091003b10000000000000000000000007e3d993a8d63c25d1db5f7ff8a8d6c59091003b1000000000000000000000000000000000000000000000000029fb0b4300d0aff00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6025,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be13517a2b520b2449068d2ec45280992b04047b000000000000000000000000be13517a2b520b2449068d2ec45280992b04047b000000000000000000000000000000000000000000000000007dd601852ed8a400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6026,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002db35527a753850b4396367a03fa834d13a32f100000000000000000000000002db35527a753850b4396367a03fa834d13a32f10000000000000000000000000000000000000000000000000000a747dcc27c90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6027,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da1cb7ea9b5ee288bce3bb4cac2b6642c5421411000000000000000000000000da1cb7ea9b5ee288bce3bb4cac2b6642c5421411000000000000000000000000000000000000000000000000001f0bbd8db1e20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6028,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3784cfaf0471b99f37c339db3d302e8a13b1a7a000000000000000000000000d3784cfaf0471b99f37c339db3d302e8a13b1a7a00000000000000000000000000000000000000000000000000a51beaf8f1d45200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6029,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ce788cacc9211fa93af8747d6c652fb425280d72000000000000000000000000ce788cacc9211fa93af8747d6c652fb425280d72000000000000000000000000000000000000000000000000005d2ac67a8c578000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6030,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b919a9fdf4d9f8f812ad64bd8599850e9f810e2c000000000000000000000000b919a9fdf4d9f8f812ad64bd8599850e9f810e2c000000000000000000000000000000000000000000000000003e61535f69a6c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6032,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000098f82578da11c79c95459a26fb27baa3ca7f906a00000000000000000000000098f82578da11c79c95459a26fb27baa3ca7f906a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6035,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9d4f265d008b0fc42829e80dcf3d5f14835d0b4000000000000000000000000c9d4f265d008b0fc42829e80dcf3d5f14835d0b40000000000000000000000000000000000000000000000000039f6c353d8c44b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6037,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009458c4ad1c97e9f26315a8c904175db628ff9f930000000000000000000000009458c4ad1c97e9f26315a8c904175db628ff9f93000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6038,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000837550f148ebf3e7de481f8778582c429f1e8274000000000000000000000000837550f148ebf3e7de481f8778582c429f1e8274000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6039,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000716ae766ee5c3590b516f2da5921540044fcdd93000000000000000000000000716ae766ee5c3590b516f2da5921540044fcdd93000000000000000000000000000000000000000000000000003d1cf622b4ab8700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6042,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000054b7f8fe8d3aaeeb115d2ae1ac9ea5d6b824e2dc00000000000000000000000054b7f8fe8d3aaeeb115d2ae1ac9ea5d6b824e2dc000000000000000000000000000000000000000000000000003da48c1309d78d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6044,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f198c77d9c968840995e0172a003388d4aa02352000000000000000000000000f198c77d9c968840995e0172a003388d4aa023520000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6046,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f7bac92aa3e28351f9e89535ca334e8a44542d00000000000000000000000007f7bac92aa3e28351f9e89535ca334e8a44542d000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6047,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007a38b009f9e176f07978c2e75bab2a5b657ca37a0000000000000000000000007a38b009f9e176f07978c2e75bab2a5b657ca37a00000000000000000000000000000000000000000000000000000000006acfc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6049,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f830a902a162874c946bf9e9b11e1388caee3029000000000000000000000000f830a902a162874c946bf9e9b11e1388caee302900000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6051,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e220bfb0d093e2b1fdc7d3af08c97f5b22f7f908000000000000000000000000e220bfb0d093e2b1fdc7d3af08c97f5b22f7f908000000000000000000000000000000000000000000000000001cab25204daf0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6052,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000acc452a494b59a3f536d717f6222d09c5acf20a8000000000000000000000000acc452a494b59a3f536d717f6222d09c5acf20a8000000000000000000000000000000000000000000000000008d3438f6e5930e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6053,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d16ef7f37544a3792463a44d0557eab4c21d89a1000000000000000000000000d16ef7f37544a3792463a44d0557eab4c21d89a10000000000000000000000000000000000000000000000000001de405f21460000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6054,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2bf6ac67aee061297775043ccd9b613e53413a5000000000000000000000000a2bf6ac67aee061297775043ccd9b613e53413a5000000000000000000000000000000000000000000000000015396a49d67732a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6055,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d89fb7b2953670b03c28f81c77658191b6036c91000000000000000000000000d89fb7b2953670b03c28f81c77658191b6036c9100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6056,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009b5f0ceaa46a28dcefa619e14a3536fbd6296f270000000000000000000000009b5f0ceaa46a28dcefa619e14a3536fbd6296f2700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6057,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000000f3a2fc40c421a320d235e70543a06620e50b5400000000000000000000000000f3a2fc40c421a320d235e70543a06620e50b5400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6058,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da5c938837e5cd21c8e37a2811bb9bda6515955c000000000000000000000000da5c938837e5cd21c8e37a2811bb9bda6515955c00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6059,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000505d2d3979f41ac084851a89b2ef154a65dd8a0f000000000000000000000000505d2d3979f41ac084851a89b2ef154a65dd8a0f00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6060,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df60be630e94a957b5f4033c7def69e1c4554bb6000000000000000000000000df60be630e94a957b5f4033c7def69e1c4554bb6000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6061,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000038e75b73c046372b353c9b4bb3e11ca6f6e7515800000000000000000000000038e75b73c046372b353c9b4bb3e11ca6f6e7515800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6062,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ffdf260bb7dbeac048c593166260a960bf71b7a0000000000000000000000003ffdf260bb7dbeac048c593166260a960bf71b7a00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6063,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae966d3bf115eb480ee121dc20dc2b7e8326911d000000000000000000000000ae966d3bf115eb480ee121dc20dc2b7e8326911d00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6064,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000535a625fd19e7dafa1bd07f60576f780e50711e0000000000000000000000000535a625fd19e7dafa1bd07f60576f780e50711e000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6065,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006177da08f66984b7e116d9f2079b98c5fe6f507e0000000000000000000000006177da08f66984b7e116d9f2079b98c5fe6f507e00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6066,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000550305bd6b572fef436002aad6fb5fdec9f3e8b2000000000000000000000000550305bd6b572fef436002aad6fb5fdec9f3e8b200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6067,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b3ef731cee95b989fafcf3ee2949dbaa8bd04f3f000000000000000000000000b3ef731cee95b989fafcf3ee2949dbaa8bd04f3f00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6068,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bec87160d56dd6d3c41c56613088e0559fabb689000000000000000000000000bec87160d56dd6d3c41c56613088e0559fabb68900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6069,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8f1091949750d217e8fb7aab56269e6595e27e9000000000000000000000000e8f1091949750d217e8fb7aab56269e6595e27e9000000000000000000000000000000000000000000000000005802b8233a3f4900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6070,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a169d8ad32ce1a54c456b446e182aac42420b9d2000000000000000000000000a169d8ad32ce1a54c456b446e182aac42420b9d200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6071,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea5e21ef5ff21d7cb4c83df80620226e19f6cf08000000000000000000000000ea5e21ef5ff21d7cb4c83df80620226e19f6cf0800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6072,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000097310815e5fe521d95428ff81034ca1000144cfd00000000000000000000000097310815e5fe521d95428ff81034ca1000144cfd00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6073,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a0fdf298d1be0cc74cf50d4be0d2289ce3a6f713000000000000000000000000a0fdf298d1be0cc74cf50d4be0d2289ce3a6f71300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6074,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef5c351763eeb26c2be15d6d649c3bffa5b2e62e000000000000000000000000ef5c351763eeb26c2be15d6d649c3bffa5b2e62e00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6075,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d0a78bca674769691690edb78890ddd3ac787800000000000000000000000006d0a78bca674769691690edb78890ddd3ac7878000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6076,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8a17e27c663954a6b13102dbf1d6e8be11f2a1e000000000000000000000000e8a17e27c663954a6b13102dbf1d6e8be11f2a1e00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6077,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de1fa30568693e95411d978f50d61d95583cc41c000000000000000000000000de1fa30568693e95411d978f50d61d95583cc41c00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6078,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001c7004540ad0735906fc803f4d4fad1a1dbd264b0000000000000000000000001c7004540ad0735906fc803f4d4fad1a1dbd264b00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6079,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007b1e1e51b869d5c3098314708243fe6a70e0b73b0000000000000000000000007b1e1e51b869d5c3098314708243fe6a70e0b73b00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6080,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ab881a681a63d6da7eddbea7008355780f84cbcc000000000000000000000000ab881a681a63d6da7eddbea7008355780f84cbcc000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6081,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000072418814ddece4a58be3a8c772b817c5d0985bab00000000000000000000000072418814ddece4a58be3a8c772b817c5d0985bab00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6082,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc518a752f63e70ae1d902359c627fc3b16eabf4000000000000000000000000dc518a752f63e70ae1d902359c627fc3b16eabf400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6083,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fdbb828d024bca418e7d381f4a51b17943f3ff0f000000000000000000000000fdbb828d024bca418e7d381f4a51b17943f3ff0f00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6084,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000042ade5caf115cca078731afb4e74da068db7546a00000000000000000000000042ade5caf115cca078731afb4e74da068db7546a00000000000000000000000000000000000000000000000000a639bd2a06204700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6085,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000023ac809fab9fcd6845150bb5b60836b0f37b2be300000000000000000000000023ac809fab9fcd6845150bb5b60836b0f37b2be300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6086,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f2906419014f9bc87a0bad857630716a22e821a1000000000000000000000000f2906419014f9bc87a0bad857630716a22e821a100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6087,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000034316123517658e803efaa1d01e6c943bfd54a5200000000000000000000000034316123517658e803efaa1d01e6c943bfd54a5200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6088,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000019563a18135447a1227a415f2464329b76095c2100000000000000000000000019563a18135447a1227a415f2464329b76095c2100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6089,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d696bb2a273469e81db818eedf3e55020a69fe49000000000000000000000000d696bb2a273469e81db818eedf3e55020a69fe4900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6090,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000abd91342f65fdf85b2803eb2b26b0c5a849ec204000000000000000000000000abd91342f65fdf85b2803eb2b26b0c5a849ec20400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6091,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009f5ba92a3f6cd97151be5091add73fb87ebd40650000000000000000000000009f5ba92a3f6cd97151be5091add73fb87ebd406500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6092,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3e543f609321e0ecac4e60a322bc833402bccf0000000000000000000000000d3e543f609321e0ecac4e60a322bc833402bccf000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6093,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d5350d0cfc2947655b08386ae6a257428df6e7b6000000000000000000000000d5350d0cfc2947655b08386ae6a257428df6e7b600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6094,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000102d8693ae4f47366b50218e1e6a4752c90a1356000000000000000000000000102d8693ae4f47366b50218e1e6a4752c90a135600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6095,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c4d43e87d85fec5339e8517fb677b6884c8895c4000000000000000000000000c4d43e87d85fec5339e8517fb677b6884c8895c400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6096,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ddacf2b28b3c5f08c9e638bc0c28f1e3d0dde6de000000000000000000000000ddacf2b28b3c5f08c9e638bc0c28f1e3d0dde6de00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6097,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e55b4c05d74d84931a513f3c7b37d609a487c0ea000000000000000000000000e55b4c05d74d84931a513f3c7b37d609a487c0ea0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6098,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000265c7ee6c12d5450cf883a8c1d448d5862dd52af000000000000000000000000265c7ee6c12d5450cf883a8c1d448d5862dd52af000000000000000000000000000000000000000000000000005d8d5c28d6173d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6099,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008bb0dbb962e6add906c6fbf8d30620a757074a650000000000000000000000008bb0dbb962e6add906c6fbf8d30620a757074a6500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6100,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000874f15934503cad67c145bed096e03966b2639e6000000000000000000000000874f15934503cad67c145bed096e03966b2639e600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6101,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5126ae26d383d2bf95315ae952aa78127b8ac7f000000000000000000000000e5126ae26d383d2bf95315ae952aa78127b8ac7f000000000000000000000000000000000000000000000000004adda27681328d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6102,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007412e63420f327482b0513fb63b8c7ffc04d7a400000000000000000000000007412e63420f327482b0513fb63b8c7ffc04d7a4000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6103,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000033a081ac356765e4f084772d4490890567015a8900000000000000000000000033a081ac356765e4f084772d4490890567015a8900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6104,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000092cc1672390d00636e107d190222a530b266c41e00000000000000000000000092cc1672390d00636e107d190222a530b266c41e0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6105,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf61155471f6f338b282c3ec5e65e4f5eeee8354000000000000000000000000bf61155471f6f338b282c3ec5e65e4f5eeee835400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6106,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bba6cd8b55cb2952bb24a987686aa74d2d27d633000000000000000000000000bba6cd8b55cb2952bb24a987686aa74d2d27d63300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6107,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000ed63aaad9f9e4aec77b06858e2ccb1afadc2d340000000000000000000000000ed63aaad9f9e4aec77b06858e2ccb1afadc2d3400000000000000000000000000000000000000000000000000ab4a21e9a8010000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6108,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e401b9bcab9929b0aaabf0ec0d189122084ecf58000000000000000000000000e401b9bcab9929b0aaabf0ec0d189122084ecf580000000000000000000000000000000000000000000000000001794a6c866b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6109,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000027099c76408a157c934a1d41e98ec545f5d1d77b00000000000000000000000027099c76408a157c934a1d41e98ec545f5d1d77b00000000000000000000000000000000000000000000000000017777ce9a7aab00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6111,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000065f4ab2661a4e5c8f5c37e121819db86ee93b2cd00000000000000000000000065f4ab2661a4e5c8f5c37e121819db86ee93b2cd0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6112,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e70d82324cf51b204a875f72a4648c03694043f0000000000000000000000008e70d82324cf51b204a875f72a4648c03694043f0000000000000000000000000000000000000000000000000001ede9b71cee0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6114,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a31723b2e0bdfe317f4e07589436ecf5515622d2000000000000000000000000a31723b2e0bdfe317f4e07589436ecf5515622d20000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6115,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005c6d446d4b7ff3a5bd4cfa8b91e2fcdb9af984f90000000000000000000000005c6d446d4b7ff3a5bd4cfa8b91e2fcdb9af984f90000000000000000000000000000000000000000000000000001fc74ad620a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6116,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000754501440645e89d8a06dd698ad55fadd0b4a556000000000000000000000000754501440645e89d8a06dd698ad55fadd0b4a5560000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6117,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e2c67e0b55f80738ad264c1a973929362dee3213000000000000000000000000e2c67e0b55f80738ad264c1a973929362dee32130000000000000000000000000000000000000000000000000002c9741f4dc10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6118,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000057ade2bed67c61f01176997a2c87c8eb8e4ddd4c00000000000000000000000057ade2bed67c61f01176997a2c87c8eb8e4ddd4c0000000000000000000000000000000000000000000000000002dd96fe23990000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6119,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000087db5fff1928edfaa0dcdf531e821e28721b3f1c00000000000000000000000087db5fff1928edfaa0dcdf531e821e28721b3f1c000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6120,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aae53a6ead2a4c07e34e49f1e658152355450d7f000000000000000000000000aae53a6ead2a4c07e34e49f1e658152355450d7f0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6121,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be6b0ef7b49e4bb39a44ed4c629c559c229a6b05000000000000000000000000be6b0ef7b49e4bb39a44ed4c629c559c229a6b050000000000000000000000000000000000000000000000000002dd96fe23990000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6122,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000259e397108514b8a2cc910429590a17ceb14f772000000000000000000000000259e397108514b8a2cc910429590a17ceb14f772000000000000000000000000000000000000000000000000000215111312120000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6123,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004acddeea281310d00756555e42be3802f9bf771e0000000000000000000000004acddeea281310d00756555e42be3802f9bf771e0000000000000000000000000000000000000000000000000001f4e799d1d90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6124,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000070330e027a3e4327ba69f0c8a1885df4b545837000000000000000000000000070330e027a3e4327ba69f0c8a1885df4b54583700000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6125,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000023b31301bffdc9c7f55661a4db9c0a904d1eb62e00000000000000000000000023b31301bffdc9c7f55661a4db9c0a904d1eb62e0000000000000000000000000000000000000000000000000002e01b59fe540000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6126,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000301feaced087a254b09874551da70d4c58689f04000000000000000000000000301feaced087a254b09874551da70d4c58689f040000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6127,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000077edee3b888d9ce54df25b18a4badf9f6340d73300000000000000000000000077edee3b888d9ce54df25b18a4badf9f6340d73300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6128,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006afd0cf9e929bf7c46b8b729233697bc226078880000000000000000000000006afd0cf9e929bf7c46b8b729233697bc2260788800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6129,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006b75b8c39c3c42c9dee4b82363606cb28c3d0a2f0000000000000000000000006b75b8c39c3c42c9dee4b82363606cb28c3d0a2f0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6130,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000131b76b9b89dd3d98147ec3b7e2cb73adf245133000000000000000000000000131b76b9b89dd3d98147ec3b7e2cb73adf24513300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6131,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000db9718552f6b5a06422d7ce790a0f47241178753000000000000000000000000db9718552f6b5a06422d7ce790a0f4724117875300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6132,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000576bf86b5e5f52632b98ac3bdb2a8291cdf79337000000000000000000000000576bf86b5e5f52632b98ac3bdb2a8291cdf793370000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6135,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006bd78ab5053a84cb285b81024fb10ea2c465b0450000000000000000000000006bd78ab5053a84cb285b81024fb10ea2c465b0450000000000000000000000000000000000000000000000000102a336dba6000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6136,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0ad0a7a432e058733cd4819efb1e859bae49b68000000000000000000000000c0ad0a7a432e058733cd4819efb1e859bae49b68000000000000000000000000000000000000000000000000015d576bf398980000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6137,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000073ab8be850af291e989039bad78a65a32347286700000000000000000000000073ab8be850af291e989039bad78a65a3234728670000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6138,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3227760f77cd04dc27de314b02efd2850676b66000000000000000000000000f3227760f77cd04dc27de314b02efd2850676b66000000000000000000000000000000000000000000000000015e49a47c439e4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6139,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000001001ed634ff8b495479783a0620fdd71a6151b6c0000000000000000000000001001ed634ff8b495479783a0620fdd71a6151b6c000000000000000000000000000000000000000000000000000000000f4c0c6c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -6140,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a6536a05bdbbcdaf352ad53382136ebe9d277eb5000000000000000000000000a6536a05bdbbcdaf352ad53382136ebe9d277eb50000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6141,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008de42a7b282832b84bfcf7c2e9edb882b99abaac0000000000000000000000008de42a7b282832b84bfcf7c2e9edb882b99abaac00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6142,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000200d4376a05189581fc658c0ffdad4a56861331d000000000000000000000000200d4376a05189581fc658c0ffdad4a56861331d00000000000000000000000000000000000000000000000000bd4a7fa937ec8b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6146,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000028b4f08d1f1aa9bfe787447dcf75ff3fea1fd4d200000000000000000000000028b4f08d1f1aa9bfe787447dcf75ff3fea1fd4d20000000000000000000000000000000000000000000000000090851ef9cb3c9000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6148,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000cf7a503b76b63e8c8642f3bf6af64fffe1e8efb0000000000000000000000000cf7a503b76b63e8c8642f3bf6af64fffe1e8efb00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6151,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005a71143c2cb2c26d0a94553534ee2059d275ad400000000000000000000000005a71143c2cb2c26d0a94553534ee2059d275ad40000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6152,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008613b7748af1126a07d522869cb48a9d0485fe310000000000000000000000008613b7748af1126a07d522869cb48a9d0485fe31000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6153,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000680e0e17a8998c5d3221f470706f0d20c66c6a7b000000000000000000000000680e0e17a8998c5d3221f470706f0d20c66c6a7b000000000000000000000000000000000000000000000000014b7db4e94fb01d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6154,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061c33a73354e33e297948d60b3a83fd14b3ca21900000000000000000000000061c33a73354e33e297948d60b3a83fd14b3ca219000000000000000000000000000000000000000000000000003a8321cc8d7c5300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6156,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000280b04d23618f2983b8008f8d4b796d1a37ecd21000000000000000000000000280b04d23618f2983b8008f8d4b796d1a37ecd2100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6157,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000489872f68bd0da1ca97383a97342f0e230c8f24f000000000000000000000000489872f68bd0da1ca97383a97342f0e230c8f24f00000000000000000000000000000000000000000000000002c28a7efb0a6d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6158,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043769e73238a7cc8ad08fabc427620a5361ef19900000000000000000000000043769e73238a7cc8ad08fabc427620a5361ef199000000000000000000000000000000000000000000000000003f835535de6f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6159,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000075db933f690903730724498e1767bd7bbbf5a45c00000000000000000000000075db933f690903730724498e1767bd7bbbf5a45c000000000000000000000000000000000000000000000000009c35bf3ca1488400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6161,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001d07ca009d9e507e780fd921d63c90c2bcd1052c0000000000000000000000001d07ca009d9e507e780fd921d63c90c2bcd1052c00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6162,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008efcd8400655a9a0887368b13ec631e8bf0a7d540000000000000000000000008efcd8400655a9a0887368b13ec631e8bf0a7d540000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6163,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c036c021402451242cd413a6a6b863ff41b8e6ac000000000000000000000000c036c021402451242cd413a6a6b863ff41b8e6ac00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6164,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000f98490ed481611ae1945c62274a20480c8cdc400000000000000000000000000f98490ed481611ae1945c62274a20480c8cdc40000000000000000000000000000000000000000000000000008c2864635c488000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5415e9b0b366662bbd8500692460bbf3aba81387e664839dc877bfd7a1672b1c,2021-12-11 12:51:43.000 UTC,0,true -6165,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000035164610721ffab73d28e4a16e32607288946af400000000000000000000000035164610721ffab73d28e4a16e32607288946af40000000000000000000000000000000000000000000000000011ca63fd75a5c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6166,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000056df4482739435c82d8129a98555ac93d1f3f52500000000000000000000000056df4482739435c82d8129a98555ac93d1f3f52500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6168,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c43cd6565c758ea8331ffd1fc40dd2eb685cdf40000000000000000000000000c43cd6565c758ea8331ffd1fc40dd2eb685cdf40000000000000000000000000000000000000000000000000015cdb872ddf870000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6169,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007bf37710f7139be98db50b2259051f84e41397f80000000000000000000000007bf37710f7139be98db50b2259051f84e41397f800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6171,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a4bdd1484b10c2b77da547bd8c58b05896d18930000000000000000000000004a4bdd1484b10c2b77da547bd8c58b05896d189300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6172,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006b60edeab595a8e908e12ee2c11e744883b2d61a0000000000000000000000006b60edeab595a8e908e12ee2c11e744883b2d61a00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6173,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000827f2155e5d6cc98b176c0d6033cc08849e7a863000000000000000000000000827f2155e5d6cc98b176c0d6033cc08849e7a86300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6174,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000495fc90677e398d70b5066f294337f164a996b52000000000000000000000000495fc90677e398d70b5066f294337f164a996b5200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6175,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2460960451ec2482b2ee668c844d59aa7f2f7f1000000000000000000000000a2460960451ec2482b2ee668c844d59aa7f2f7f100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6176,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d42ad56aac4b4dd8a5173b440e511d66ef268b93000000000000000000000000d42ad56aac4b4dd8a5173b440e511d66ef268b93000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6177,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005cf968f202abb9f97063c5ce1a0ed07ff2f3e6280000000000000000000000005cf968f202abb9f97063c5ce1a0ed07ff2f3e628000000000000000000000000000000000000000000000000000179b5479f971c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6178,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d1ef5b3dffd39b3e40b9b6ccefcb1b9020c49348000000000000000000000000d1ef5b3dffd39b3e40b9b6ccefcb1b9020c49348000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x103d287f08f7487a6e59416c97ae80eb0999027818c090561a200a6e92d948a2,2022-09-11 09:39:19.000 UTC,0,true -6179,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba09d569676f00a800144a557ce45729f9067bf7000000000000000000000000ba09d569676f00a800144a557ce45729f9067bf700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6180,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fd2e96e66c9508029d5520f1f991e8cd8dc6e562000000000000000000000000fd2e96e66c9508029d5520f1f991e8cd8dc6e5620000000000000000000000000000000000000000000000000008d7749523930000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6181,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bab442313afd6650d8cf23cf5bdc29255694df2a000000000000000000000000bab442313afd6650d8cf23cf5bdc29255694df2a00000000000000000000000000000000000000000000000000a917e195bb6aac00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6182,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d4f28a98f1f3f45acffc42dea779467516a9c486000000000000000000000000d4f28a98f1f3f45acffc42dea779467516a9c486000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6187,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0901490ea1dbbb439aa472e89945fb2d7a077b7000000000000000000000000c0901490ea1dbbb439aa472e89945fb2d7a077b70000000000000000000000000000000000000000000000000076add99dfcc82600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6188,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d2fc24c8e0a517be44017c363738feacc336f460000000000000000000000003d2fc24c8e0a517be44017c363738feacc336f4600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6190,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003296fb4fb0188d3c4ebbc6ee55ce636ac1ab5b4b0000000000000000000000003296fb4fb0188d3c4ebbc6ee55ce636ac1ab5b4b000000000000000000000000000000000000000000000000009317d79afac68000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6191,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6e8d29a8c5d0fcef149c5641e1eee004582d07e000000000000000000000000b6e8d29a8c5d0fcef149c5641e1eee004582d07e00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6192,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000067a0fe77d11bb228e4abc8303e11a70221ece23d00000000000000000000000067a0fe77d11bb228e4abc8303e11a70221ece23d00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6193,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c40326ea38b5b7ad6f21b6d2725a736320b2b13a000000000000000000000000c40326ea38b5b7ad6f21b6d2725a736320b2b13a00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6194,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000af4c12f61ec66327b8230215ce76bb5d5d87ae41000000000000000000000000af4c12f61ec66327b8230215ce76bb5d5d87ae4100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6195,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f73d8cf6974c675e8fb695180eebb693a0c90f40000000000000000000000002f73d8cf6974c675e8fb695180eebb693a0c90f400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6196,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000594185ad7267edbc4d909660e36dae73642279ac000000000000000000000000594185ad7267edbc4d909660e36dae73642279ac00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6197,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c1828e25724846b84b75fe89d984464da43a3b50000000000000000000000004c1828e25724846b84b75fe89d984464da43a3b500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6198,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017c434152967287d37601a331c998f7569532d5800000000000000000000000017c434152967287d37601a331c998f7569532d5800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6199,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a3416da2690142c4d29833c3ccba07ad91fd2e50000000000000000000000004a3416da2690142c4d29833c3ccba07ad91fd2e500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6200,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007485416586bb2c820d8e17dc9f08e13d769dcb900000000000000000000000007485416586bb2c820d8e17dc9f08e13d769dcb9000000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6201,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000010a262209be8c3e5293b4d2744c7591180b06fb500000000000000000000000010a262209be8c3e5293b4d2744c7591180b06fb500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6202,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa8c135316894210564b4bd6a62d711efffe6ab3000000000000000000000000aa8c135316894210564b4bd6a62d711efffe6ab300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6203,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005c82309fb96679c4a246effb6cae82e4f5a503a90000000000000000000000005c82309fb96679c4a246effb6cae82e4f5a503a900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6204,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007a3a97e9548c1d7b6b271586c3df7d598401195d0000000000000000000000007a3a97e9548c1d7b6b271586c3df7d598401195d00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6205,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c16c6707c225bcfe6cb45d70c2c3b60fa1dd8684000000000000000000000000c16c6707c225bcfe6cb45d70c2c3b60fa1dd868400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6206,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000476cf12d3a58803a6396fa9d996b16bd5fd5bc97000000000000000000000000476cf12d3a58803a6396fa9d996b16bd5fd5bc9700000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6207,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076d70b9f4d57b9a142402a10e6dd66d23434d66300000000000000000000000076d70b9f4d57b9a142402a10e6dd66d23434d66300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6208,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001300ad33bb8615e965d9ae24faefd917859c51690000000000000000000000001300ad33bb8615e965d9ae24faefd917859c516900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6209,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000534a350439c0d8ef6bd87dbd8ae87a98d7a19fee000000000000000000000000534a350439c0d8ef6bd87dbd8ae87a98d7a19fee00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6210,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000779a4fe40cd3d0e522e6acd979355bd13319d4eb000000000000000000000000779a4fe40cd3d0e522e6acd979355bd13319d4eb00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6211,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a259607466a7f8c233a90f8056c7c2b088e44a3b000000000000000000000000a259607466a7f8c233a90f8056c7c2b088e44a3b00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6212,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b4074eacf0d93b51da37cf2fdb2b92a29f7a62b0000000000000000000000002b4074eacf0d93b51da37cf2fdb2b92a29f7a62b00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6213,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cd5743a88dbd7283c7b62969315737d0c09108b9000000000000000000000000cd5743a88dbd7283c7b62969315737d0c09108b900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6214,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006c4162902791407e9c97f0d103cc7f18014e05000000000000000000000000006c4162902791407e9c97f0d103cc7f18014e050000000000000000000000000000000000000000000000000000d529ae9e86000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6215,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e1339e1c320fba582437346f5f8f255ccc0298b0000000000000000000000001e1339e1c320fba582437346f5f8f255ccc0298b00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6217,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000086ab8050fa2dbf473b6b2b835eaeecf79fdb853a00000000000000000000000086ab8050fa2dbf473b6b2b835eaeecf79fdb853a00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6218,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6e8f993e38a2080bfcf6059e0e53035cc6e4c70000000000000000000000000c6e8f993e38a2080bfcf6059e0e53035cc6e4c7000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6219,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5c45509af209bda85bba4eed08b8ee109ccdef7000000000000000000000000e5c45509af209bda85bba4eed08b8ee109ccdef700000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6220,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fed459299bd99747cec1f0a5422a930aea38ff66000000000000000000000000fed459299bd99747cec1f0a5422a930aea38ff6600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6221,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000315bbdc92a1d5ac1d5cd72fcab68db625932b546000000000000000000000000315bbdc92a1d5ac1d5cd72fcab68db625932b54600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6222,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000066b3ae9ce70bf1f8adf6164086881a9d3a59f79900000000000000000000000066b3ae9ce70bf1f8adf6164086881a9d3a59f79900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6223,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a0b5dd11e6b7a32f72f20354cd28cfd525bf2610000000000000000000000000a0b5dd11e6b7a32f72f20354cd28cfd525bf26100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6224,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a252c6caff320a0a2349ec78f2eed5e5d6958e89000000000000000000000000a252c6caff320a0a2349ec78f2eed5e5d6958e8900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6225,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c5b16f1b8eefded06173ca6fce42a5b624043d40000000000000000000000000c5b16f1b8eefded06173ca6fce42a5b624043d400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6226,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbc44dd131bc2ab9e555cc4b43485874e10ec6eb000000000000000000000000cbc44dd131bc2ab9e555cc4b43485874e10ec6eb00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6227,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cefbf484039b2d4ea0bc018c1857170c7b1b481c000000000000000000000000cefbf484039b2d4ea0bc018c1857170c7b1b481c00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6228,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aaa9722e144867288e390dee76b2ac90a703d233000000000000000000000000aaa9722e144867288e390dee76b2ac90a703d23300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6229,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049196ccd96632f3c2ed79e7ee02b22ce89860cd800000000000000000000000049196ccd96632f3c2ed79e7ee02b22ce89860cd800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6230,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009595cd099429cbd13327b2add9c9af1ac1495faf0000000000000000000000009595cd099429cbd13327b2add9c9af1ac1495faf00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6231,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000082ceb6c9bde6f0d141da7c62374d4b8cfdde321200000000000000000000000082ceb6c9bde6f0d141da7c62374d4b8cfdde3212000000000000000000000000000000000000000000000000002e2f6e5e14800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6232,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008286d5a11fe8737c80f52436ef58ae880b156db90000000000000000000000008286d5a11fe8737c80f52436ef58ae880b156db900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6233,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d78ee648e21f36ac5881b356f57605773efe1950000000000000000000000008d78ee648e21f36ac5881b356f57605773efe19500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6234,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003fcaaa3062b75ceb9a9a230310c71250e33835990000000000000000000000003fcaaa3062b75ceb9a9a230310c71250e338359900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6235,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f5c1d799431338c9266a20a31ebd7ff8565f9e40000000000000000000000006f5c1d799431338c9266a20a31ebd7ff8565f9e400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6236,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d1b7bbf015f73bff3c8a8ef105c2d3d857d48186000000000000000000000000d1b7bbf015f73bff3c8a8ef105c2d3d857d4818600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6237,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c42662d950a9b86b37e992737edaf24ae1eefd52000000000000000000000000c42662d950a9b86b37e992737edaf24ae1eefd5200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6238,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009c28c11326d22dd12cae0bac4442cf339c5b2a7b0000000000000000000000009c28c11326d22dd12cae0bac4442cf339c5b2a7b000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6240,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009238516001504cf6228e1e18f6f1d5c6dc3366b70000000000000000000000009238516001504cf6228e1e18f6f1d5c6dc3366b700000000000000000000000000000000000000000000000006e3a298ab351d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6241,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004369e98806b77c31fb8aaaf22fd99392d2ecd1f10000000000000000000000004369e98806b77c31fb8aaaf22fd99392d2ecd1f100000000000000000000000000000000000000000000000000fc4562136c383f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6242,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037c53c4146c9952e806ed05d358c55b6ee13a14d00000000000000000000000037c53c4146c9952e806ed05d358c55b6ee13a14d000000000000000000000000000000000000000000000000007a2f0ddd43fa0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6244,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c8af873ccf3379491750835130d1d81beecc9c30000000000000000000000003c8af873ccf3379491750835130d1d81beecc9c300000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6248,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e8215ff2db1ac1d023eee2040cb81f73fa4b8fb0000000000000000000000004e8215ff2db1ac1d023eee2040cb81f73fa4b8fb0000000000000000000000000000000000000000000000000005cf3606cecb4c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6250,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000041f7fc9cd42e9559e1f73aaa2d06653bc815998d00000000000000000000000041f7fc9cd42e9559e1f73aaa2d06653bc815998d0000000000000000000000000000000000000000000000000039c01982d1f9a400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6252,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000016da895d3b3e77f25e6035c01981a7126f99f9da00000000000000000000000016da895d3b3e77f25e6035c01981a7126f99f9da00000000000000000000000000000000000000000000000000e6ed27d666800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xedefa5bd834783935fa51ac9a850177a1366b3338e4c9d80ad21ed6907d5d68d,2022-02-17 12:06:48.000 UTC,0,true -6253,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df5758524fcb5f096a07830bc72a815f5701dbd4000000000000000000000000df5758524fcb5f096a07830bc72a815f5701dbd4000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6256,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ed688a91f3a1a466a719dfd933e32cdd69fe92a0000000000000000000000002ed688a91f3a1a466a719dfd933e32cdd69fe92a0000000000000000000000000000000000000000000000000017659cca426ec000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6258,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000940214134c5e8d81dbd5e9015908c697dab5e0dd000000000000000000000000940214134c5e8d81dbd5e9015908c697dab5e0dd000000000000000000000000000000000000000000000000013fbe85edc9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6260,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000053a67719f7e50beb47e6cae7fbbb04cf65d2962600000000000000000000000053a67719f7e50beb47e6cae7fbbb04cf65d2962600000000000000000000000000000000000000000000000000babe8103e6a10d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6261,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000055f86e2214dadb7e364fba38c12fe44fff6870d20000000000000000000000000000000000000000000000008cfe9010eb30ec02,,,1,true -6262,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a889b33e317c507fc4a8d116b2a1884a65d6d90a000000000000000000000000a889b33e317c507fc4a8d116b2a1884a65d6d90a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6263,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000087b61e7e1bf4cc3e9e6b40518ded79439924f9e200000000000000000000000087b61e7e1bf4cc3e9e6b40518ded79439924f9e2000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6264,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c78366cc2aa23ef0409bf13803b5cc6145fba0f5000000000000000000000000c78366cc2aa23ef0409bf13803b5cc6145fba0f5000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6266,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007af27b2ed937f738f6fa81048c8be89cf04991140000000000000000000000007af27b2ed937f738f6fa81048c8be89cf049911400000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6268,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000020b99860d324741aabc4c208f5464060a08db84a00000000000000000000000020b99860d324741aabc4c208f5464060a08db84a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6270,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e910cc299f45787e5eca168085618fa44148a1e0000000000000000000000004e910cc299f45787e5eca168085618fa44148a1e00000000000000000000000000000000000000000000000001e8a3bbd098939800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6271,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009092164dcde75456862c7ac90c52120fa87094fb0000000000000000000000009092164dcde75456862c7ac90c52120fa87094fb000000000000000000000000000000000000000000000000005f74af10795c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6273,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a61c698fb2b2913c194ba98445a12338e3288440000000000000000000000005a61c698fb2b2913c194ba98445a12338e32884400000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6274,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d445d31483882576e8eda27b51491be77cbb69d4000000000000000000000000d445d31483882576e8eda27b51491be77cbb69d400000000000000000000000000000000000000000000000000987b6fea6e1f8b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6276,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba6ffaea3206d86e04dc1b2c029efcb99494549e000000000000000000000000ba6ffaea3206d86e04dc1b2c029efcb99494549e000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6277,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0f770c3de2fff71850e35bee24be4f4ddcc9c59000000000000000000000000b0f770c3de2fff71850e35bee24be4f4ddcc9c5900000000000000000000000000000000000000000000000000628a6d33774ec400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6278,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000030d84e2c44d2b66975d02ad194363324cd3dfb9b00000000000000000000000030d84e2c44d2b66975d02ad194363324cd3dfb9b0000000000000000000000000000000000000000000000000032af6a70f4850000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6281,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071628a735b74ba74d93fbbb14131c846c13d8eed00000000000000000000000071628a735b74ba74d93fbbb14131c846c13d8eed000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6282,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005fb02812573f49cf965f1881878fa804ba7c63160000000000000000000000005fb02812573f49cf965f1881878fa804ba7c6316000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6283,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000006810dba12317406828d64b07d34ad22338644bb30000000000000000000000006810dba12317406828d64b07d34ad22338644bb300000000000000000000000000000000000000000000000443172f0bfe46b9ee00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x19168165ce2657720a459f6931d9a24a8e86b1431b1401d6fc8d977edab49f68,2022-06-28 11:54:08.000 UTC,0,true -6285,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0552ba5df6da78e609e3af1f5e566e2b96f000b000000000000000000000000b0552ba5df6da78e609e3af1f5e566e2b96f000b000000000000000000000000000000000000000000000000002f82bfd2c5820100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6286,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000024875e064103cf1f8f1a3f0951d07afb302256ad00000000000000000000000024875e064103cf1f8f1a3f0951d07afb302256ad000000000000000000000000000000000000000000000000015c24e75e36c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1d4e411895fdd35f25bfa0144df50110817a860743eb2d63c345aa5172eb4f42,2022-05-25 10:12:28.000 UTC,0,true -6287,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005678e3d553cc261b690126952ce58828add4b0380000000000000000000000005678e3d553cc261b690126952ce58828add4b038000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6288,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000006810dba12317406828d64b07d34ad22338644bb30000000000000000000000006810dba12317406828d64b07d34ad22338644bb3000000000000000000000000000000000000000000000001314fb3706298000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xe8f0bf0df1d0e8b63c9a7cb97af3040fc3ddfa3453b71ac6971369e244ff0b8e,2022-07-23 04:30:41.000 UTC,0,true -6289,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003af22eadb1319617c8ab95c04d2ba96ca6728e050000000000000000000000003af22eadb1319617c8ab95c04d2ba96ca6728e0500000000000000000000000000000000000000000000000000d9b967236676d200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6290,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005f01a4acc32c5834786a3fe20a40dc8697fcb6b20000000000000000000000005f01a4acc32c5834786a3fe20a40dc8697fcb6b2000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6292,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f22deebdf3eead96a0609f29c49ef7f9f652ade0000000000000000000000008f22deebdf3eead96a0609f29c49ef7f9f652ade000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6294,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d5e388b530864423b27d3394edffc9510bf5ed40000000000000000000000000d5e388b530864423b27d3394edffc9510bf5ed4000000000000000000000000000000000000000000000000009ad0531208b12e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6296,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005e3a1d91c232d7e6887ae83bf99ac38e777fbcd90000000000000000000000005e3a1d91c232d7e6887ae83bf99ac38e777fbcd90000000000000000000000000000000000000000000000000040db0b9968f26200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6297,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001ce58ec06f621fee629c5ea2e790a39924cc8e210000000000000000000000001ce58ec06f621fee629c5ea2e790a39924cc8e21000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6298,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bb907d3b1d7db12314279a954dd8b5a86c0e86fc000000000000000000000000bb907d3b1d7db12314279a954dd8b5a86c0e86fc000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6300,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000111b58c01afa72d04bc0adb523266aa55749ed92000000000000000000000000111b58c01afa72d04bc0adb523266aa55749ed920000000000000000000000000000000000000000000000000131f7e2cbb633b400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6301,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000beb3662c34c8be5172b32ef9d3012e5c7b8680c0000000000000000000000000beb3662c34c8be5172b32ef9d3012e5c7b8680c000000000000000000000000000000000000000000000000007a1fe160277000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6304,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000070b1e584456ad5d8dc8f7ad0b410374984e1e75200000000000000000000000000000000000000000000000039b6204432e90373,,,1,true -6305,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f66945895001023cf1cf9ef36a361ad909ca9336000000000000000000000000f66945895001023cf1cf9ef36a361ad909ca9336000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6306,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f4627cec6ea1c46963942c076f39746814b7aa9e000000000000000000000000f4627cec6ea1c46963942c076f39746814b7aa9e0000000000000000000000000000000000000000000000000062d2e8a6ebaae100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6308,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000662d9c83c75ec4c2622cb6a45a764eaa6e1be89b000000000000000000000000662d9c83c75ec4c2622cb6a45a764eaa6e1be89b00000000000000000000000000000000000000000000000000497d70d0430b0700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6309,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a64f54ca8af1eafbcb31fec17042fc05c10aa140000000000000000000000005a64f54ca8af1eafbcb31fec17042fc05c10aa140000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6310,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000648b7355aea321b558ed5609570c179e41751e26000000000000000000000000648b7355aea321b558ed5609570c179e41751e2600000000000000000000000000000000000000000000000001a072041bb64a8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x838fa964f5d78315fae8279605f8f5c80feeda481d80d97ef60a4b0b78267126,2021-12-08 16:08:28.000 UTC,0,true -6311,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000022d2380f3d396fb9ffb3523f1d570138b404a4e200000000000000000000000022d2380f3d396fb9ffb3523f1d570138b404a4e200000000000000000000000000000000000000000000000000a204c415bec1b500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6312,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000546c35a376735dad1ada63b63550f4528853d32200000000000000000000000000000000000000000000000ad78ebc5ac6200000,,,1,true -6314,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa23be134c9bdfa8bda5ee6034b2083e09d8a4d9000000000000000000000000aa23be134c9bdfa8bda5ee6034b2083e09d8a4d90000000000000000000000000000000000000000000000000152afb15f65af3700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6315,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000700b81ebc4854cc92c0f8726384b8165379101c6000000000000000000000000700b81ebc4854cc92c0f8726384b8165379101c60000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6316,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d466900fea4c92cf0dc3dd354c2013b6037e734d000000000000000000000000d466900fea4c92cf0dc3dd354c2013b6037e734d000000000000000000000000000000000000000000000000004c5ab53cb0cad600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6317,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000089a23f067054fcec705e64d4f4aac36ff0db6b2c00000000000000000000000089a23f067054fcec705e64d4f4aac36ff0db6b2c00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6322,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f2d3c29bcf8b7db513fcb09937bb69de81475e05000000000000000000000000f2d3c29bcf8b7db513fcb09937bb69de81475e0500000000000000000000000000000000000000000000000000a34a257751602a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6323,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bcf0fd9c42cc8cb2060c4930d2c1d277f18146a5000000000000000000000000bcf0fd9c42cc8cb2060c4930d2c1d277f18146a5000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6325,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000060663af31be6fb5f4c89cc2cca07f0bf3b2cfa9400000000000000000000000060663af31be6fb5f4c89cc2cca07f0bf3b2cfa940000000000000000000000000000000000000000000000000042a0642a6f150000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6326,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f8ae64665c750207ac62203a29c70edc7f91784d000000000000000000000000000000000000000000000000226abadc42f80000,,,1,true -6328,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000008a6838b8ce1e427892c0069e40c81ac3af1444fe00000000000000000000000000000000000000000000001ae2bf3612bb93a0f5,0x3f2733185c0c9552b8fcdb0096e6ddd4f30bdfbfffa4cf4fb7ede2c531a98adf,2021-11-26 07:02:24.000 UTC,0,true -6329,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f34293b6f2617e676a25a6b823396c6e63de7980000000000000000000000002f34293b6f2617e676a25a6b823396c6e63de798000000000000000000000000000000000000000000000000006acf9437f14e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xccc621b60c73dd77808a99cecd16eeacdea0e480d560d0300252974e930f0556,2022-06-05 07:27:45.000 UTC,0,true -6331,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d1a5b91957530e1b3e9cfac1543467c60c352f69000000000000000000000000d1a5b91957530e1b3e9cfac1543467c60c352f690000000000000000000000000000000000000000000000000029281dfd38090d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6332,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000aa87daf0dd4ecaa131d68d888a2a636c405393c0000000000000000000000000aa87daf0dd4ecaa131d68d888a2a636c405393c00000000000000000000000000000000000000000000000002ae3331f8143d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x4b82c8a1e96caab53f631664ee54109ac953ff4080aff20c749c2b967b8b1fcc,2022-03-02 22:32:22.000 UTC,0,true -6333,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b840dfec84de16e0ad8143ae3536b1d592876228000000000000000000000000b840dfec84de16e0ad8143ae3536b1d59287622800000000000000000000000000000000000000000000000000a6abc3f786f1e600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6334,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8e856fd16c4e38e8ff7643aa1a7f1b5dfa9938c000000000000000000000000e8e856fd16c4e38e8ff7643aa1a7f1b5dfa9938c0000000000000000000000000000000000000000000000000018fc6c600eb19600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6335,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000083381ee6b054a70226363aa4a98b8dfd7ce8aee000000000000000000000000083381ee6b054a70226363aa4a98b8dfd7ce8aee00000000000000000000000000000000000000000000000000001370c1483600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6336,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd2ff170381c1299550ddc2e142723c8fca7d685000000000000000000000000bd2ff170381c1299550ddc2e142723c8fca7d6850000000000000000000000000000000000000000000000000001370c1483600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6337,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dfdeb82e4893a7357dc941fcc5cdb8b1a2d08915000000000000000000000000dfdeb82e4893a7357dc941fcc5cdb8b1a2d089150000000000000000000000000000000000000000000000000001373aa571300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6338,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000818c4df073ec43b80fd6e3bdd451382a390d0466000000000000000000000000000000000000000000000000a2a632f9d1e30b3a,,,1,true -6339,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000052d2ee31368104138d5fe98effd7ce8f5558d37300000000000000000000000052d2ee31368104138d5fe98effd7ce8f5558d3730000000000000000000000000000000000000000000000000001370e688f440000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6340,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c641582d9eb6c40b2b07f3848b917e686c3fe49b000000000000000000000000c641582d9eb6c40b2b07f3848b917e686c3fe49b0000000000000000000000000000000000000000000000000001370ea42a0e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6341,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009eb4eb18cf1d8a8451fe062d914d81c5bf9ce1e30000000000000000000000009eb4eb18cf1d8a8451fe062d914d81c5bf9ce1e300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6342,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ba5d980d983164803d1a9f90485f6ef1cebe9480000000000000000000000003ba5d980d983164803d1a9f90485f6ef1cebe9480000000000000000000000000000000000000000000000000001370fce30000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6343,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9dc1ea1b25a752cc4882f7b5fdf3aa53cc32ebe000000000000000000000000f9dc1ea1b25a752cc4882f7b5fdf3aa53cc32ebe00000000000000000000000000000000000000000000000000714a0420d4132200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6344,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c62fedcc778e49daf606416ead602e40a002dec1000000000000000000000000c62fedcc778e49daf606416ead602e40a002dec10000000000000000000000000000000000000000000000000001370eaa1fef0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6345,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000824e79aabb599a969d07ef67391c33ceb39ac800000000000000000000000000824e79aabb599a969d07ef67391c33ceb39ac800000000000000000000000000000000000000000000000000044a7d1b245773a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6347,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000923c0d5dbb0be64eac9c79a7781762b4395f17ce000000000000000000000000923c0d5dbb0be64eac9c79a7781762b4395f17ce00000000000000000000000000000000000000000000000000044364c5bb000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6348,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004598a3b9f8e61e5cf6b4f50cda88b0666bba23d40000000000000000000000004598a3b9f8e61e5cf6b4f50cda88b0666bba23d4000000000000000000000000000000000000000000000000000d3c3dbb67010000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6349,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000081069f658da5fac80bbeee0023a21f0531d144dc00000000000000000000000081069f658da5fac80bbeee0023a21f0531d144dc00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6350,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6726399a01376f1dc6e5b81adf6d41c19de0cc1000000000000000000000000c6726399a01376f1dc6e5b81adf6d41c19de0cc10000000000000000000000000000000000000000000000000051b660cdd5800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6351,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000001558c24d917026f552dc74dbd7202485795680df0000000000000000000000001558c24d917026f552dc74dbd7202485795680df000000000000000000000000000000000000000000000000000000000100ed7d00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -6352,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001558c24d917026f552dc74dbd7202485795680df0000000000000000000000001558c24d917026f552dc74dbd7202485795680df000000000000000000000000000000000000000000000000002258044a403e4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6353,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2bca9a3911dbdd6968fbf0bdbf22bb750aa4ed7000000000000000000000000a2bca9a3911dbdd6968fbf0bdbf22bb750aa4ed7000000000000000000000000000000000000000000000000000c6f3b40b6c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6354,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006bc51aefc2eccc5916825f96bfe0215b7626c1a40000000000000000000000006bc51aefc2eccc5916825f96bfe0215b7626c1a4000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6356,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002bc57482492d63420c29fa88e6654e2b42769f690000000000000000000000002bc57482492d63420c29fa88e6654e2b42769f690000000000000000000000000000000000000000000000000007ec1d64d71ac000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6357,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000764b908d96fcff7df8792e66a9c43c0014e3df3e000000000000000000000000764b908d96fcff7df8792e66a9c43c0014e3df3e0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6358,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a432b8023270db100a316ebf47871733df263d10000000000000000000000001a432b8023270db100a316ebf47871733df263d10000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6359,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004fc4aa1af42db84b5befcdef7a7618a3a59e108e0000000000000000000000004fc4aa1af42db84b5befcdef7a7618a3a59e108e0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6360,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f198c77d9c968840995e0172a003388d4aa02352000000000000000000000000f198c77d9c968840995e0172a003388d4aa0235200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6361,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f11556dc1c53440c769b33542fd1ca0c373ca28b000000000000000000000000f11556dc1c53440c769b33542fd1ca0c373ca28b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6362,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f1a3f4f7dfacf318a7c7a6a9773add3c9ff82f60000000000000000000000002f1a3f4f7dfacf318a7c7a6a9773add3c9ff82f60000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6364,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055f0c1e1c64d656bdc369e50a7935eb4417b3eb600000000000000000000000055f0c1e1c64d656bdc369e50a7935eb4417b3eb60000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6365,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2966908f05b065d7006c25d91f991b3260c9250000000000000000000000000a2966908f05b065d7006c25d91f991b3260c92500000000000000000000000000000000000000000000000000066543a9944a5ba00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6366,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f820c77a87d0c29b2fc0127d4043c3ac12f7a3c3000000000000000000000000f820c77a87d0c29b2fc0127d4043c3ac12f7a3c300000000000000000000000000000000000000000000000000044364c5bb000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6367,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000af423790163935a517b229019088c0388ad24551000000000000000000000000af423790163935a517b229019088c0388ad245510000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6368,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d72dd704147ac65e0ade2a030088329396d27615000000000000000000000000d72dd704147ac65e0ade2a030088329396d276150000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6370,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000088c7de054c28e03deb4c6feb393b40b08780150100000000000000000000000088c7de054c28e03deb4c6feb393b40b0878015010000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6372,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a713b2af2c6a1452c0c87b742f97700560fc6eca000000000000000000000000a713b2af2c6a1452c0c87b742f97700560fc6eca0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6373,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003aa2f6138599a7d22b742881b77c78c07bd549030000000000000000000000003aa2f6138599a7d22b742881b77c78c07bd549030000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6374,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005bd166035bb746ff5c2bc190ed615e5761e2ad310000000000000000000000005bd166035bb746ff5c2bc190ed615e5761e2ad3100000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6375,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e2991ccb1dd1d9f10a5d4bcbdade6a97289b5e5e000000000000000000000000e2991ccb1dd1d9f10a5d4bcbdade6a97289b5e5e0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6376,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b4dceb958f0e2472811ab21669712f63ac6e9ee9000000000000000000000000b4dceb958f0e2472811ab21669712f63ac6e9ee90000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6377,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007030b4b422546c60b4e77896344c781f116c43200000000000000000000000007030b4b422546c60b4e77896344c781f116c43200000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6378,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000010e08067623e27fba375b9dabf5e8366da6bc06d00000000000000000000000010e08067623e27fba375b9dabf5e8366da6bc06d0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6379,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fcacd4ed1f378163d15101d8f20900b1c4d9662e000000000000000000000000fcacd4ed1f378163d15101d8f20900b1c4d9662e0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6380,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032cce025af9e68044937c2377d403a72013ea44e00000000000000000000000032cce025af9e68044937c2377d403a72013ea44e0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6381,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae60140b46282c9caca0fe3241447b63b884a2f2000000000000000000000000ae60140b46282c9caca0fe3241447b63b884a2f20000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6382,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bb446eeb0453d24b012910336dc4170063a8d130000000000000000000000000bb446eeb0453d24b012910336dc4170063a8d1300000000000000000000000000000000000000000000000000020e57016d196eb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6383,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6ec2a147ed598ab72d1578f92a400ca99a46260000000000000000000000000b6ec2a147ed598ab72d1578f92a400ca99a46260000000000000000000000000000000000000000000000000013a9396d78af54700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6384,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001d62865a54e3fc57c43a1c7401e2499f241ba6450000000000000000000000001d62865a54e3fc57c43a1c7401e2499f241ba6450000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6385,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc2b2e250e315c8d024b14cd5503131ae7c8ecc5000000000000000000000000dc2b2e250e315c8d024b14cd5503131ae7c8ecc50000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6386,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006daf6dc3c8aa3ee860478645205b5f9d6397616d0000000000000000000000006daf6dc3c8aa3ee860478645205b5f9d6397616d00000000000000000000000000000000000000000000000000049e57d635400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6387,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008bf8ef0a3cd17245300936ab8069bce536f7d6c60000000000000000000000008bf8ef0a3cd17245300936ab8069bce536f7d6c60000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6388,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000016d3529382e60edd749942589771c579a72c479500000000000000000000000016d3529382e60edd749942589771c579a72c47950000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6389,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a4474516897af9015887f6f784c865b7922cf800000000000000000000000000a4474516897af9015887f6f784c865b7922cf800000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6391,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000035b92fd72c499ece40298df93fa9552f08f9373f00000000000000000000000035b92fd72c499ece40298df93fa9552f08f9373f0000000000000000000000000000000000000000000000000019ef4fb2dc400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6392,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e7e01621c46b43d030949e474348c2b835c3de84000000000000000000000000e7e01621c46b43d030949e474348c2b835c3de840000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6393,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a816876f1750d88636c678240c5ab049e851e3b0000000000000000000000002a816876f1750d88636c678240c5ab049e851e3b000000000000000000000000000000000000000000000000003ff2e795f5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6394,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001faeb47d071f796dc9ce31b0212efa31fe65ea110000000000000000000000001faeb47d071f796dc9ce31b0212efa31fe65ea110000000000000000000000000000000000000000000000000039ed2ca295c20a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6395,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008aa40f0bf095a7974396b55ca8056d2892efda610000000000000000000000008aa40f0bf095a7974396b55ca8056d2892efda6100000000000000000000000000000000000000000000000000063dba24d5de6a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6396,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000059636a3198c7718037c8f4e47ff476a997611e8000000000000000000000000059636a3198c7718037c8f4e47ff476a997611e80000000000000000000000000000000000000000000000000005ba9e844fff8f200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6397,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9373046a064c700f27c878cf881f31dc07ebff2000000000000000000000000f9373046a064c700f27c878cf881f31dc07ebff20000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6398,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000075de74801c5c9771bec4c5695f917cf3b951ba4100000000000000000000000075de74801c5c9771bec4c5695f917cf3b951ba410000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6399,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005cf968f202abb9f97063c5ce1a0ed07ff2f3e6280000000000000000000000005cf968f202abb9f97063c5ce1a0ed07ff2f3e6280000000000000000000000000000000000000000000000000013305ca623f00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6400,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c57598b68719641dbe3bc5eb9edbf5fcf14193cd000000000000000000000000c57598b68719641dbe3bc5eb9edbf5fcf14193cd00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6401,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009cd57ab451145a5705dcd0a0e5608cd309c36ac00000000000000000000000009cd57ab451145a5705dcd0a0e5608cd309c36ac00000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6402,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ddddb71d309c54f0838e1d48faeef2634c197fb6000000000000000000000000ddddb71d309c54f0838e1d48faeef2634c197fb6000000000000000000000000000000000000000000000000001ad7b431d3d66900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6403,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000085046ee159fbde94eed825855638c173b450a11c00000000000000000000000085046ee159fbde94eed825855638c173b450a11c0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6405,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c4d43e87d85fec5339e8517fb677b6884c8895c4000000000000000000000000c4d43e87d85fec5339e8517fb677b6884c8895c40000000000000000000000000000000000000000000000000214e8348c4f000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6406,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000024926a489189fc1475541149d45c1c8872246fef00000000000000000000000024926a489189fc1475541149d45c1c8872246fef000000000000000000000000000000000000000000000000023fc04fe2804a1c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6407,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b00d522543e1530dc5f9eccced7e055a877231ae000000000000000000000000b00d522543e1530dc5f9eccced7e055a877231ae0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6408,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3d2939eb7e59daaa7e11f1d31057f86164e8b98000000000000000000000000a3d2939eb7e59daaa7e11f1d31057f86164e8b980000000000000000000000000000000000000000000000000021e3d105c88c8e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6410,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000f1c877774262fc6d467f626d077d2fbb276f9680000000000000000000000000f1c877774262fc6d467f626d077d2fbb276f9680000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6411,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003796a49560f4ec38cae0c451fbc8f1ec33649fa10000000000000000000000003796a49560f4ec38cae0c451fbc8f1ec33649fa1000000000000000000000000000000000000000000000000000221b262dd800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6412,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000414e4df902397f3f459cf59d2ca778e4d6230ab6000000000000000000000000414e4df902397f3f459cf59d2ca778e4d6230ab60000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6413,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000091f4202fcc0521c745a44c3097650c0757c5291400000000000000000000000091f4202fcc0521c745a44c3097650c0757c529140000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6415,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005adfd3ea26e023098903bbcbe9a0cb3361446e5c0000000000000000000000005adfd3ea26e023098903bbcbe9a0cb3361446e5c0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6416,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d595547a6cf1d082b0f342f4827c1360125a70c0000000000000000000000008d595547a6cf1d082b0f342f4827c1360125a70c000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6417,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c3f49f97a71b0dde68e40653c938ed8697fc7841000000000000000000000000c3f49f97a71b0dde68e40653c938ed8697fc78410000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6418,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000059a62f8bd4a72417a762fef9104c11e92e1205dc00000000000000000000000059a62f8bd4a72417a762fef9104c11e92e1205dc0000000000000000000000000000000000000000000000000038c0d61369504000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6419,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c30bec87bead77c71942e89600d8f669d76a56a7000000000000000000000000c30bec87bead77c71942e89600d8f669d76a56a700000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6420,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000ff73618c2029909ae2d62e6dc05eec8b64bd39c0000000000000000000000000ff73618c2029909ae2d62e6dc05eec8b64bd39c0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6421,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000059a62f8bd4a72417a762fef9104c11e92e1205dc00000000000000000000000059a62f8bd4a72417a762fef9104c11e92e1205dc0000000000000000000000000000000000000000000000000016e4739dfa5c5a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6422,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055ba7f8c5ea45109bfdef64b101c5da25c5ac6a800000000000000000000000055ba7f8c5ea45109bfdef64b101c5da25c5ac6a80000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6423,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004fdb7bd4f6f301e132e93457943ecb93be79399d0000000000000000000000004fdb7bd4f6f301e132e93457943ecb93be79399d0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6424,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aaad594018955dee2541465ea2fdda1777026fc7000000000000000000000000aaad594018955dee2541465ea2fdda1777026fc70000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6425,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001c2d8da83b4cf891db819cbcda16ccf42dbeb9030000000000000000000000001c2d8da83b4cf891db819cbcda16ccf42dbeb9030000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6426,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6632c27d31499f4490462bcfe623b24b8dff8db000000000000000000000000b6632c27d31499f4490462bcfe623b24b8dff8db0000000000000000000000000000000000000000000000000099def4160021ee00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6427,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000063d937ed6dec82f33141f89026a8d15eb2d6520000000000000000000000000063d937ed6dec82f33141f89026a8d15eb2d6520000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6428,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003414b9ce85a5c17c16226c018ffa712b997e27110000000000000000000000003414b9ce85a5c17c16226c018ffa712b997e2711000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6429,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e86ffe5ecd8b6da1796d2737dee86d9ad585f76f000000000000000000000000e86ffe5ecd8b6da1796d2737dee86d9ad585f76f0000000000000000000000000000000000000000000000000098a3d1c2ad9e7e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6430,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008cefa30ccaddd6228c0bd93aa67e0945546d29540000000000000000000000008cefa30ccaddd6228c0bd93aa67e0945546d29540000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6432,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003bc8a01e685eb5277e57f5081f7704f2a061a0a90000000000000000000000003bc8a01e685eb5277e57f5081f7704f2a061a0a90000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6433,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cccd945857e6f70e9249e6e9509fe8ab3f4d9feb000000000000000000000000cccd945857e6f70e9249e6e9509fe8ab3f4d9feb0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6435,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000052b24e9f816f9d0121fa47e545b86e0f74a872ee00000000000000000000000052b24e9f816f9d0121fa47e545b86e0f74a872ee0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6436,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006db8a50c879f17da3d6d3c94ab99aec3e21229940000000000000000000000006db8a50c879f17da3d6d3c94ab99aec3e21229940000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6437,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b25c6474f6e10e9c9930a36c32fb29e6243c3a19000000000000000000000000b25c6474f6e10e9c9930a36c32fb29e6243c3a190000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6438,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000f5f6eb014093902d9367517e23c4b418d9becd6a000000000000000000000000f5f6eb014093902d9367517e23c4b418d9becd6a0000000000000000000000000000000000000000000000000000000001ee1eb800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -6439,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006c4a55dbc592555f8c96d520054cb52e90e29bb20000000000000000000000006c4a55dbc592555f8c96d520054cb52e90e29bb20000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6440,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000086f5ee2ada23227d8b75791c64c32a467b566e5600000000000000000000000086f5ee2ada23227d8b75791c64c32a467b566e560000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6441,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e35ed5fc914da2e02f79dc8ee80f7fce750d0080000000000000000000000006e35ed5fc914da2e02f79dc8ee80f7fce750d008000000000000000000000000000000000000000000000000004a407073ce400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6442,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000427c6de41db0619a101dd5323463ed4d82ee822e000000000000000000000000427c6de41db0619a101dd5323463ed4d82ee822e000000000000000000000000000000000000000000000000006740af99069f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6444,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000becf8bb57afd39baca320b1177bf23dc53f2fe30000000000000000000000000becf8bb57afd39baca320b1177bf23dc53f2fe3000000000000000000000000000000000000000000000000000deca9399e5875f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6445,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e235a100b610f1bbf27f6cf826828bccfdb45e55000000000000000000000000e235a100b610f1bbf27f6cf826828bccfdb45e5500000000000000000000000000000000000000000000000000619f19428d7faf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6446,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a273f8eb3f4203e3058b5c6bc4d459dcbc3557c8000000000000000000000000a273f8eb3f4203e3058b5c6bc4d459dcbc3557c8000000000000000000000000000000000000000000000000008bf959f55bae0c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6447,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e892622181587805df303338a43759d20ba13500000000000000000000000004e892622181587805df303338a43759d20ba135000000000000000000000000000000000000000000000000000a6c2c0be7808b800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6448,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a7d1323199e48e20c43db56f5f082e4fa88b3ec5000000000000000000000000a7d1323199e48e20c43db56f5f082e4fa88b3ec50000000000000000000000000000000000000000000000000043aaea9a92e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6449,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ad1e365152589d3501340af5c004bfa1ef0d724a000000000000000000000000ad1e365152589d3501340af5c004bfa1ef0d724a0000000000000000000000000000000000000000000000000354a6ba7a18000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6451,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000422fc6d98bfc720be3b9c594a324dbdce79c9967000000000000000000000000422fc6d98bfc720be3b9c594a324dbdce79c9967000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6453,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a51d52ea55af256e2cd323c44839ec4ad7809edd000000000000000000000000a51d52ea55af256e2cd323c44839ec4ad7809edd0000000000000000000000000000000000000000000000000029e0884c47f71d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6455,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007c8e8dc76b61d473a59373d05f64e6272ef481420000000000000000000000007c8e8dc76b61d473a59373d05f64e6272ef481420000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6456,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b62b3f714036e8d973109f55727e6f9da416513e000000000000000000000000b62b3f714036e8d973109f55727e6f9da416513e0000000000000000000000000000000000000000000000000005455b3469dd6c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6457,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047fa565d61fd4d97b93b3d6dd559d97c321fecd800000000000000000000000047fa565d61fd4d97b93b3d6dd559d97c321fecd80000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6459,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c821da8f59947715030e0a0c301719b77fbe6be9000000000000000000000000c821da8f59947715030e0a0c301719b77fbe6be900000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6460,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000090e796ca6ab5fda3692eb327038d540f07ded70000000000000000000000000090e796ca6ab5fda3692eb327038d540f07ded7000000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6461,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008a030931e0df303c601f743c8b73f12ba15b3bd80000000000000000000000008a030931e0df303c601f743c8b73f12ba15b3bd800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6462,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000003fbbf87d84733e70c54e93b669d3e4c4716432800000000000000000000000003fbbf87d84733e70c54e93b669d3e4c471643280000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6463,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055be352901e49213f5467d55c1383ef888da6bbf00000000000000000000000055be352901e49213f5467d55c1383ef888da6bbf0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6465,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dfbc8fea29cec36cad1fee29c2ddf176d4810063000000000000000000000000dfbc8fea29cec36cad1fee29c2ddf176d48100630000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6466,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6ce241b44b26286d4c3d7c13b9fece7b4ce159b000000000000000000000000b6ce241b44b26286d4c3d7c13b9fece7b4ce159b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6467,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008002323f8b78fb24b65edb5563025278611593fa0000000000000000000000008002323f8b78fb24b65edb5563025278611593fa0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6468,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fb390ea6f867bbfe6aa709c05edc7cd948ba5707000000000000000000000000fb390ea6f867bbfe6aa709c05edc7cd948ba57070000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6469,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cd81320bfa0105241fcf099541802fc4fd396aca000000000000000000000000cd81320bfa0105241fcf099541802fc4fd396aca0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6470,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000030be19e4887663efa1d153205d7df97b35d81d7900000000000000000000000030be19e4887663efa1d153205d7df97b35d81d790000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6471,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f4c2444cd28c052b140c94957b19b616335775e2000000000000000000000000f4c2444cd28c052b140c94957b19b616335775e2000000000000000000000000000000000000000000000000001e857fc020420000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6472,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000064d8a22881fdb8984737f4c4760cd256e126f7ea00000000000000000000000064d8a22881fdb8984737f4c4760cd256e126f7ea000000000000000000000000000000000000000000000000003a585005f155ad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6473,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000473dff3f18d2b44e98129b7b1ef6f5a7d28b5270000000000000000000000000473dff3f18d2b44e98129b7b1ef6f5a7d28b527000000000000000000000000000000000000000000000000000a24ebf1c816f3b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6474,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000cdd02d15521f7a7fbb4e5d6d0cbab90a29463730000000000000000000000000cdd02d15521f7a7fbb4e5d6d0cbab90a2946373000000000000000000000000000000000000000000000000015e421082e9cd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6475,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c5614db57a4e24bee825e08a03e41af281273fef000000000000000000000000c5614db57a4e24bee825e08a03e41af281273fef000000000000000000000000000000000000000000000000001791157627b6c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6476,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ec643cc2bd8ee525f1784c6505d60b8d9452bf9b000000000000000000000000ec643cc2bd8ee525f1784c6505d60b8d9452bf9b0000000000000000000000000000000000000000000000000003b0910c86334000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6477,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000381af25e0264eaa2233d0c8d69bdd40cfe60e833000000000000000000000000381af25e0264eaa2233d0c8d69bdd40cfe60e8330000000000000000000000000000000000000000000000000024bd01f873541000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6479,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000039f22efb07a647557c7c5d17854cfd6d489ef30000000000000000000000000039f22efb07a647557c7c5d17854cfd6d489ef300000000000000000000000000000000000000000000000006e7dc258e0028e200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6480,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000063d80caa6d0ea78f9a502c9c2c8b5079a666d60000000000000000000000000063d80caa6d0ea78f9a502c9c2c8b5079a666d600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6482,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ecfe3326223df6f99f6527213222af3fabba93e7000000000000000000000000ecfe3326223df6f99f6527213222af3fabba93e70000000000000000000000000000000000000000000000000001599ba503c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6483,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000077fab6facc647806593c3e670058fc13699da5da00000000000000000000000077fab6facc647806593c3e670058fc13699da5da000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6484,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000360751b3b6d58a63b24709694de5169136016281000000000000000000000000360751b3b6d58a63b24709694de516913601628100000000000000000000000000000000000000000000000002483e1dcdbe7d1500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6485,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008b4e927fcef617a7e6c92fae48bc1b3d956bd8c50000000000000000000000008b4e927fcef617a7e6c92fae48bc1b3d956bd8c50000000000000000000000000000000000000000000000000006cbe25efe853400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6486,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055ed55e77fd107829bc3bc3bde78ed2d0598d11e00000000000000000000000055ed55e77fd107829bc3bc3bde78ed2d0598d11e000000000000000000000000000000000000000000000000001a766dacdc374c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6487,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae2ec43d0c061cede6cbeb4157e6a3d67acf780a000000000000000000000000ae2ec43d0c061cede6cbeb4157e6a3d67acf780a00000000000000000000000000000000000000000000000001feb4211821a82900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6488,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0081e6380af5d61da4a4d17e7532c123c70ad38000000000000000000000000c0081e6380af5d61da4a4d17e7532c123c70ad3800000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6490,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009a72c4275919b54401c9665ae6e4ea070c50c9230000000000000000000000009a72c4275919b54401c9665ae6e4ea070c50c923000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6491,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000048d540daa0a0da768b6ace1a0981968e179b207b00000000000000000000000048d540daa0a0da768b6ace1a0981968e179b207b0000000000000000000000000000000000000000000000000059f8602e70abb000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6492,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000bdab303ff2a5804065970d1b750895d834a57710000000000000000000000000bdab303ff2a5804065970d1b750895d834a577100000000000000000000000000000000000000000000000000068ab7b8087e0100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6494,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003997e11f8e25b96e8d4e9d72d2ce1d22dd962bfb0000000000000000000000003997e11f8e25b96e8d4e9d72d2ce1d22dd962bfb0000000000000000000000000000000000000000000000000005a53ceda36b3c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6495,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000007f9186026deaa14e242a1f209b3f85be99c27d500000000000000000000000007f9186026deaa14e242a1f209b3f85be99c27d500000000000000000000000000000000000000000000000000091100e5f458ce00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6496,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d5db0328428f9980b9d3dad9ee8606dfbaa54085000000000000000000000000d5db0328428f9980b9d3dad9ee8606dfbaa540850000000000000000000000000000000000000000000000000081dd9430b17ee000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6497,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e0619f4301f6b8f013fc603574bc52484296c2b0000000000000000000000003e0619f4301f6b8f013fc603574bc52484296c2b0000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x98d4f947a1855c63c04f83fb96820cc9eb5d2a19de2461450ef4826b5c68d9e3,2022-05-29 05:50:13.000 UTC,0,true -6498,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0081e6380af5d61da4a4d17e7532c123c70ad38000000000000000000000000c0081e6380af5d61da4a4d17e7532c123c70ad38000000000000000000000000000000000000000000000000014af4c48c7050fe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6500,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000a71cabc14966c6fae86c05630a20ba1c90944a1f000000000000000000000000000000000000000000000000cadf5fa1648ec4cb,,,1,true -6502,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc83d4d0356f65da131cad32ddee510ffbe299c9000000000000000000000000bc83d4d0356f65da131cad32ddee510ffbe299c900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6503,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cd37d23fb161f96efef5f7463abaf5b63169caa4000000000000000000000000cd37d23fb161f96efef5f7463abaf5b63169caa4000000000000000000000000000000000000000000000000000307269dbf415800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6504,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b876ec1045badcb845acfd6f5182f200af6a0861000000000000000000000000b876ec1045badcb845acfd6f5182f200af6a086100000000000000000000000000000000000000000000000000a47e6b89de3d5800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6505,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007efcaa576e55449a1645b1f493436fc0959e78c60000000000000000000000007efcaa576e55449a1645b1f493436fc0959e78c600000000000000000000000000000000000000000000000001f69013913835e600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6506,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004bbb7ea18ea570ae47d4489991645e4e49bbf3700000000000000000000000004bbb7ea18ea570ae47d4489991645e4e49bbf3700000000000000000000000000000000000000000000000008b41a36c41b5ec800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6507,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b9e8029395c758e1359bd6308e8c2b85907658c9000000000000000000000000b9e8029395c758e1359bd6308e8c2b85907658c90000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6508,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000014150988c18b8ca4b9d91b0b064a228e83b91a4d00000000000000000000000014150988c18b8ca4b9d91b0b064a228e83b91a4d0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6509,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000176537296f7b527e00c61f6f303e8ca1b4d34125000000000000000000000000176537296f7b527e00c61f6f303e8ca1b4d341250000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6510,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae5defa9e0e94b461029b09c3bd500f9cb1be1ae000000000000000000000000ae5defa9e0e94b461029b09c3bd500f9cb1be1ae0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6511,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8a3eb612c36858955939579c920329c8c93b081000000000000000000000000b8a3eb612c36858955939579c920329c8c93b0810000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6512,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b1a3826ea3270facd57ded4aeda05966bb72cc4b000000000000000000000000b1a3826ea3270facd57ded4aeda05966bb72cc4b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6513,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000064aec6d32fb6a4bf80347fa7e38fd3504c83cecc00000000000000000000000064aec6d32fb6a4bf80347fa7e38fd3504c83cecc0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6514,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cd37ef933d0aa9c260dd4b24bae16d2fe1387fb8000000000000000000000000cd37ef933d0aa9c260dd4b24bae16d2fe1387fb800000000000000000000000000000000000000000000000000499a5fc88afb4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6515,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c86628b4170652db03ea1e67762deaa156ec1df6000000000000000000000000c86628b4170652db03ea1e67762deaa156ec1df600000000000000000000000000000000000000000000000000092e6ed2935d5400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6516,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045627772199e4a1d89cd345d93ee52763d85bee800000000000000000000000045627772199e4a1d89cd345d93ee52763d85bee80000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6519,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1166aa914487997a72227ee5f1fc346deb31ad4000000000000000000000000c1166aa914487997a72227ee5f1fc346deb31ad40000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6520,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef92dc32c64ac6c96e5bd1d6fd3f2f5bbc6f7552000000000000000000000000ef92dc32c64ac6c96e5bd1d6fd3f2f5bbc6f75520000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6522,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003b0f66f556208c7ecce91002b983aa310c87f31f0000000000000000000000003b0f66f556208c7ecce91002b983aa310c87f31f0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6523,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ac830c73b295bdc178b0d337db55e7cf141c7850000000000000000000000003ac830c73b295bdc178b0d337db55e7cf141c7850000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6524,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094862c5241d46251f1e3fac1d2c5ea7f93ba0de200000000000000000000000094862c5241d46251f1e3fac1d2c5ea7f93ba0de20000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6525,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa16ad6d01c0a67cfdf933a64f320c221abbcf97000000000000000000000000aa16ad6d01c0a67cfdf933a64f320c221abbcf970000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6526,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9fb3cebf326388bd6f9bc374a035cbd8a4dc000000000000000000000000000e9fb3cebf326388bd6f9bc374a035cbd8a4dc0000000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6527,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078fcc9ed722de1bc459ce108102f3e25b1c3255600000000000000000000000078fcc9ed722de1bc459ce108102f3e25b1c325560000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6528,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dce8344556e362016cb5981dd22dfe8021a271e2000000000000000000000000dce8344556e362016cb5981dd22dfe8021a271e200000000000000000000000000000000000000000000000001ff90b365edef2100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6529,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b404acbf9a5408f15952497dd596308b646c2cb0000000000000000000000001b404acbf9a5408f15952497dd596308b646c2cb0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6530,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d0511b8785d6f1161d917b1c9057f61a21e753e0000000000000000000000005d0511b8785d6f1161d917b1c9057f61a21e753e000000000000000000000000000000000000000000000000000e864054c2550000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6531,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7a8aac126dbbc027c1b6c745e819827b519215b000000000000000000000000d7a8aac126dbbc027c1b6c745e819827b519215b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6532,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000048cca6555b1f7119e01f3a534a2ddd7b3d14a9b800000000000000000000000048cca6555b1f7119e01f3a534a2ddd7b3d14a9b80000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6533,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000208e47293cff4e85dce018ae704948049083a550000000000000000000000000208e47293cff4e85dce018ae704948049083a5500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6534,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000634c994e9f1945016d90d30d540971fade8b26f8000000000000000000000000634c994e9f1945016d90d30d540971fade8b26f8000000000000000000000000000000000000000000000000001fd24e4dc3f40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6535,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000208e47293cff4e85dce018ae704948049083a550000000000000000000000000208e47293cff4e85dce018ae704948049083a5500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6536,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000446aceb97d5191ba737c48879a70fe8b397a5f58000000000000000000000000446aceb97d5191ba737c48879a70fe8b397a5f580000000000000000000000000000000000000000000000000001f42adc5218b800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6537,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a281527a3d9521fcb1aba3738ad694c9cb4f17d0000000000000000000000002a281527a3d9521fcb1aba3738ad694c9cb4f17d0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6538,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008940715d8501f1a29268ed7082fda356aec0f2170000000000000000000000008940715d8501f1a29268ed7082fda356aec0f2170000000000000000000000000000000000000000000000000024be9eb62b880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6539,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007c8f98a42499a960c36388c3423b375f9330589f0000000000000000000000007c8f98a42499a960c36388c3423b375f9330589f0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6540,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000189f88a82cb02a0299f8017cdd23183bb7422a0d000000000000000000000000189f88a82cb02a0299f8017cdd23183bb7422a0d0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6541,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000211c370b256f83f67f1c95a7a71da623cea02fa9000000000000000000000000211c370b256f83f67f1c95a7a71da623cea02fa9000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6542,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000d3c2ededebfabf6b29e2aeba4ce82a4bf99d1082000000000000000000000000d3c2ededebfabf6b29e2aeba4ce82a4bf99d1082000000000000000000000000000000000000000000000000000000000118e01a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -6543,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000085d2d1d094ffbd688d8bcb7034a336902fcea93400000000000000000000000085d2d1d094ffbd688d8bcb7034a336902fcea9340000000000000000000000000000000000000000000000000003e871b540c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6544,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ce827705e7c4f67169dadd925a05f097af35d450000000000000000000000007ce827705e7c4f67169dadd925a05f097af35d4500000000000000000000000000000000000000000000000000753d533d96800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6545,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071231c3aee4a32cd2344f70d5e3ef8245c8a5fcf00000000000000000000000071231c3aee4a32cd2344f70d5e3ef8245c8a5fcf0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6546,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004dbfda2864b5ccdbea5b30419d1778e42bb6cc660000000000000000000000004dbfda2864b5ccdbea5b30419d1778e42bb6cc660000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6547,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b1f457238c422d97d231ac10137aafd4b9a37030000000000000000000000001b1f457238c422d97d231ac10137aafd4b9a37030000000000000000000000000000000000000000000000000027a8bb138bdf0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6548,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8beec2b0facca7be0f25a2468a06ddea9f9bfe2000000000000000000000000e8beec2b0facca7be0f25a2468a06ddea9f9bfe20000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6549,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003883694454d4afa41b30e8bcf2c1810139d7348e0000000000000000000000003883694454d4afa41b30e8bcf2c1810139d7348e0000000000000000000000000000000000000000000000000026b248f4f39b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6550,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000916766e8259e05eb941abcdecb3dc79aa72e16cc000000000000000000000000916766e8259e05eb941abcdecb3dc79aa72e16cc00000000000000000000000000000000000000000000000000234227d524f60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6551,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000059ba2fd919585cf0620518f7691b044303c0f6df00000000000000000000000059ba2fd919585cf0620518f7691b044303c0f6df0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6552,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000846dc401933c01742242a1a515ee2843af41ec8e000000000000000000000000846dc401933c01742242a1a515ee2843af41ec8e000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6553,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ddd6578efdf7a516dc13487d38720947bb225da6000000000000000000000000ddd6578efdf7a516dc13487d38720947bb225da600000000000000000000000000000000000000000000000000234227d524f60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6554,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1a004a8c2a462f057c7e83dcced62fb48eb6fc0000000000000000000000000f1a004a8c2a462f057c7e83dcced62fb48eb6fc00000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6555,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d23bc8da7fb9fa49af7d74db3328e7970452a280000000000000000000000007d23bc8da7fb9fa49af7d74db3328e7970452a280000000000000000000000000000000000000000000000000026d10c740fa50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6556,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc73d43cd1553d512d631206fc90696651964c4a000000000000000000000000bc73d43cd1553d512d631206fc90696651964c4a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6557,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007c718d6ee2dad9e27b985e7c34cd2214410316f10000000000000000000000007c718d6ee2dad9e27b985e7c34cd2214410316f10000000000000000000000000000000000000000000000000021b1f2c84ad10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6559,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000686d26d709a11f4da840f4fc4b14b94fed5f90c7000000000000000000000000686d26d709a11f4da840f4fc4b14b94fed5f90c700000000000000000000000000000000000000000000000000260572fc481d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6560,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009345c48c1dbcf90b73a095a261cd7777aff6d8e50000000000000000000000009345c48c1dbcf90b73a095a261cd7777aff6d8e5000000000000000000000000000000000000000000000000002398f7847cfa0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6561,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000027b0fc6c4a5a0cf213a570097279a5bde61214d200000000000000000000000027b0fc6c4a5a0cf213a570097279a5bde61214d200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6562,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5a1e201c6c621b1bc4782a89beefbcec833d105000000000000000000000000e5a1e201c6c621b1bc4782a89beefbcec833d1050000000000000000000000000000000000000000000000000030bd984297450000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6564,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000098c54e453e5fb273fa6c0cdc22d340bea23ef1b000000000000000000000000098c54e453e5fb273fa6c0cdc22d340bea23ef1b00000000000000000000000000000000000000000000000000049e57d635400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6565,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000072500ffa253799327f5963fcc35e34ea6a6880b100000000000000000000000072500ffa253799327f5963fcc35e34ea6a6880b1000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6566,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1d10dd665f35dd6f1e595bb42e3924f92aef005000000000000000000000000f1d10dd665f35dd6f1e595bb42e3924f92aef0050000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6567,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055a55bdd1259809061cd677308e385603271ee4900000000000000000000000055a55bdd1259809061cd677308e385603271ee490000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6568,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001edec03eab28cbd0940ad39d684bf1aa3eb131260000000000000000000000001edec03eab28cbd0940ad39d684bf1aa3eb131260000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6571,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae9150e882d17fa39e668ea1f6a0e08ebdd7e562000000000000000000000000ae9150e882d17fa39e668ea1f6a0e08ebdd7e56200000000000000000000000000000000000000000000000000e92e14ceaea0e700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6572,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009cc84e44fac29559654fd3b51e7ae2213dfab4fc0000000000000000000000009cc84e44fac29559654fd3b51e7ae2213dfab4fc0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6573,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000887e2120c2d75c75faf422bb856768726d1e8ad6000000000000000000000000887e2120c2d75c75faf422bb856768726d1e8ad600000000000000000000000000000000000000000000000001196180a3f71c1f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6574,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d023313bb4e503a0277ae7a8da0a81f8e887c0b4000000000000000000000000d023313bb4e503a0277ae7a8da0a81f8e887c0b40000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6575,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cb23b4df2cc272eda72ad7e41e919cf02b164c4b000000000000000000000000cb23b4df2cc272eda72ad7e41e919cf02b164c4b000000000000000000000000000000000000000000000000010d3d79b37e969700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6576,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000440e0140aae0e85344f4c1853697d7159217b70e000000000000000000000000440e0140aae0e85344f4c1853697d7159217b70e0000000000000000000000000000000000000000000000000118d5eb028a708200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6577,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c40b49313fb10ec7ca60293168097ed332daee70000000000000000000000004c40b49313fb10ec7ca60293168097ed332daee70000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6578,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a92ad7e0bd2670c9130edf9534be003b5b06bf92000000000000000000000000a92ad7e0bd2670c9130edf9534be003b5b06bf92000000000000000000000000000000000000000000000000003519d7d9929d8200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6579,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000419a60d57f2dd0a0d332a86de04d3d7c5da95509000000000000000000000000419a60d57f2dd0a0d332a86de04d3d7c5da955090000000000000000000000000000000000000000000000000114b2dbf86435a700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6580,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032243242dbc34c9a80f66f4047848f3bca1ed1ed00000000000000000000000032243242dbc34c9a80f66f4047848f3bca1ed1ed0000000000000000000000000000000000000000000000000110447667c5ac7000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6581,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000523fd220eb4172214dc811b7d4e8781df50836b4000000000000000000000000523fd220eb4172214dc811b7d4e8781df50836b40000000000000000000000000000000000000000000000000112ec300c5588a600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6582,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004aa706defd337b3c86eb236151223ecfc73c9d3a0000000000000000000000004aa706defd337b3c86eb236151223ecfc73c9d3a000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6583,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005f9aa8be086b2343407496f4fe58c5054d040c5a0000000000000000000000005f9aa8be086b2343407496f4fe58c5054d040c5a0000000000000000000000000000000000000000000000000113f36cfbdd1b2200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6584,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f2b8624f63a45e445b854c86c0ac028e195b8092000000000000000000000000f2b8624f63a45e445b854c86c0ac028e195b80920000000000000000000000000000000000000000000000000113e0dde14f2c5d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6585,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc0ab9f9e603031fb53d69ff80928b335494c4a2000000000000000000000000cc0ab9f9e603031fb53d69ff80928b335494c4a2000000000000000000000000000000000000000000000000011168da3b1bd49600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6586,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000006c4865ab16c9c760622f19a313a2e637e2e66a200000000000000000000000006c4865ab16c9c760622f19a313a2e637e2e66a2000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6588,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009b0cd7ff30f19ef4b3d031f7c84cb22a63080cd30000000000000000000000009b0cd7ff30f19ef4b3d031f7c84cb22a63080cd300000000000000000000000000000000000000000000000000ad0136ba09a70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6589,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005f6ff6ea50edfa7852d194a79b414a5de0891dd90000000000000000000000005f6ff6ea50edfa7852d194a79b414a5de0891dd900000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6590,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008901baea259b7aa8d00da8a109a5bed145b5f5dc0000000000000000000000008901baea259b7aa8d00da8a109a5bed145b5f5dc0000000000000000000000000000000000000000000000000023a48fa834505b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6591,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e095d1a7ed1a1173d69d7bd724b2b7c6c81b0e4b000000000000000000000000e095d1a7ed1a1173d69d7bd724b2b7c6c81b0e4b00000000000000000000000000000000000000000000000000223953dbbfa10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6595,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000623db2c9a0a8e1d3825f57e5cbf1dc8e034e8a48000000000000000000000000623db2c9a0a8e1d3825f57e5cbf1dc8e034e8a4800000000000000000000000000000000000000000000000000a4ee2c2d88cedf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6599,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000abfdbdfd20440c6495ca4036807e62bd7b38b88a000000000000000000000000abfdbdfd20440c6495ca4036807e62bd7b38b88a000000000000000000000000000000000000000000000000007ca2b347503fcd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6604,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f661216d01f19b7510b2231c9011d36fdc43fb28000000000000000000000000f661216d01f19b7510b2231c9011d36fdc43fb28000000000000000000000000000000000000000000000000005833ccd169b17a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6614,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d0bd436d80ce813267a856167db48f598f2c9dc0000000000000000000000003d0bd436d80ce813267a856167db48f598f2c9dc000000000000000000000000000000000000000000000000009414471f5aa18900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6618,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000015a2c6080f554ad428632a89a0743fcf766eacc000000000000000000000000015a2c6080f554ad428632a89a0743fcf766eacc00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6621,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000073b877d6f891d3f621571098b537b756cf028fef00000000000000000000000073b877d6f891d3f621571098b537b756cf028fef0000000000000000000000000000000000000000000000000002d79883d2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6625,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3e4254aead0870d17a20624d7b2a466de98d216000000000000000000000000a3e4254aead0870d17a20624d7b2a466de98d216000000000000000000000000000000000000000000000000001c3e38a5b399c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6628,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b1ab8886163021b940362d01e432cd213f74879c000000000000000000000000b1ab8886163021b940362d01e432cd213f74879c000000000000000000000000000000000000000000000000003c6b7e61199c2000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6631,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dac1e9ceda1b0576585185c289f3544b3f6f3966000000000000000000000000dac1e9ceda1b0576585185c289f3544b3f6f3966000000000000000000000000000000000000000000000000001b689fb847f50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6632,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000874ffb0ec913131bd9c26984f1d9d911c4c897cc000000000000000000000000874ffb0ec913131bd9c26984f1d9d911c4c897cc00000000000000000000000000000000000000000000000000f8b0a10e47000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6633,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e5af1f11ad9856d8c6e1ab27fe2c0c40b579b370000000000000000000000006e5af1f11ad9856d8c6e1ab27fe2c0c40b579b37000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6634,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000874ffb0ec913131bd9c26984f1d9d911c4c897cc000000000000000000000000874ffb0ec913131bd9c26984f1d9d911c4c897cc0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6635,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a13594f72403765bbf45270a74375f2e81a3dc8f000000000000000000000000a13594f72403765bbf45270a74375f2e81a3dc8f000000000000000000000000000000000000000000000000001fc0afcac8d70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6636,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000745c0fa858115b9ccc4148fb9b41049e729fdbb5000000000000000000000000745c0fa858115b9ccc4148fb9b41049e729fdbb5000000000000000000000000000000000000000000000000007b52d7d7472ede00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6637,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008a8c448e8bbe80b9022bcac1e3a67d9e717e17640000000000000000000000008a8c448e8bbe80b9022bcac1e3a67d9e717e1764000000000000000000000000000000000000000000000000019218a6fffe7f0900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6638,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000067dbb60cb215f601e33ae776ea7ca40ad62dcde700000000000000000000000067dbb60cb215f601e33ae776ea7ca40ad62dcde700000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6639,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca8f7ddeb3ba7864e71e161d6bfc7ef86b1b275d000000000000000000000000ca8f7ddeb3ba7864e71e161d6bfc7ef86b1b275d000000000000000000000000000000000000000000000000004062f5df3b410c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6640,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000069428b8507d725a12a3f367edc79c928a490452b00000000000000000000000069428b8507d725a12a3f367edc79c928a490452b00000000000000000000000000000000000000000000000000aef21da8d16f2400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6641,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d19b5de52d139b4d2c683d986830c6a621474292000000000000000000000000d19b5de52d139b4d2c683d986830c6a62147429200000000000000000000000000000000000000000000000000c1fa5c05b7bbfa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6642,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fb5cf7ecfddca71ee8d88780d1d5c90dd392c64c000000000000000000000000fb5cf7ecfddca71ee8d88780d1d5c90dd392c64c00000000000000000000000000000000000000000000000000603c37d925fb6600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6643,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d8b19af2638856b3984d02015b6230d1daadbf20000000000000000000000003d8b19af2638856b3984d02015b6230d1daadbf20000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6644,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ad06f116674a878336914171ade46fd8f8a62490000000000000000000000004ad06f116674a878336914171ade46fd8f8a624900000000000000000000000000000000000000000000000000a87b5ce9b3b08b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6645,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac16c8fd47716cd64161d8c3f1f804cec36861cb000000000000000000000000ac16c8fd47716cd64161d8c3f1f804cec36861cb0000000000000000000000000000000000000000000000000076b27b40522bd800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6646,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029c0ce4cbd333b5c1eca001ae59cd8587c6970c500000000000000000000000029c0ce4cbd333b5c1eca001ae59cd8587c6970c500000000000000000000000000000000000000000000000000a42fd7776d7d2e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6647,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000016e868c6d41a1a9d4f4d48a1961130c1538524e400000000000000000000000016e868c6d41a1a9d4f4d48a1961130c1538524e4000000000000000000000000000000000000000000000000015971de36d84d8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6648,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000601496f365423b60fceb676829d8a6598a9d7a0b000000000000000000000000601496f365423b60fceb676829d8a6598a9d7a0b000000000000000000000000000000000000000000000000e54d3e150694144200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -6649,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000090d5713068c4c4f889a086b7cec5044ce773963e00000000000000000000000090d5713068c4c4f889a086b7cec5044ce773963e00000000000000000000000000000000000000000000000000097f30723aa68000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6650,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a233deb08bcb3a54b183749398663dad0ec4b55c000000000000000000000000a233deb08bcb3a54b183749398663dad0ec4b55c00000000000000000000000000000000000000000000000000a68b949106aac600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6652,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000508e37a6a77620053b5cdf627dd25b30ebe0d0de000000000000000000000000508e37a6a77620053b5cdf627dd25b30ebe0d0de000000000000000000000000000000000000000000000000001fa8a295f4150000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6653,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000025b3a312525a5a80da92ccd034d1359bff74eedd00000000000000000000000025b3a312525a5a80da92ccd034d1359bff74eedd00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6654,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cb974bf9c76290d4216a0d2124a213e1167d087a000000000000000000000000cb974bf9c76290d4216a0d2124a213e1167d087a0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6655,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c1c0baccc78de4b02e4f3c83209294ccd462c450000000000000000000000008c1c0baccc78de4b02e4f3c83209294ccd462c4500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6656,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000267d3062be04e8101e2b0522e949f1369dba38dd000000000000000000000000267d3062be04e8101e2b0522e949f1369dba38dd0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6657,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000867fe52d01283053bd3edac93ec50a70ff47443f000000000000000000000000867fe52d01283053bd3edac93ec50a70ff47443f00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6659,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc62c6c6ac36ce092da2110be9cd8b7ce8031173000000000000000000000000fc62c6c6ac36ce092da2110be9cd8b7ce80311730000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6660,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e6d5b68f4c928d709182f06b4279c09240d2ad89000000000000000000000000e6d5b68f4c928d709182f06b4279c09240d2ad8900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6661,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6f8157f6e36763ea04af3969ae519f74b202012000000000000000000000000d6f8157f6e36763ea04af3969ae519f74b2020120000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6662,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005f62cd4ff9291c5745139043c8882061a8d4b4360000000000000000000000005f62cd4ff9291c5745139043c8882061a8d4b4360000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6663,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000063d80caa6d0ea78f9a502c9c2c8b5079a666d60000000000000000000000000063d80caa6d0ea78f9a502c9c2c8b5079a666d60000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6664,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff071c783c770c715575fd1c3948ca8808d09ba1000000000000000000000000ff071c783c770c715575fd1c3948ca8808d09ba10000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6665,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f6d4f52d978252947554a529fe151833c2441988000000000000000000000000f6d4f52d978252947554a529fe151833c244198800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6666,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000286f9209ad18ecb53e655a2b2d67ba4836eca37c000000000000000000000000286f9209ad18ecb53e655a2b2d67ba4836eca37c0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6667,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000025b3a312525a5a80da92ccd034d1359bff74eedd00000000000000000000000025b3a312525a5a80da92ccd034d1359bff74eedd00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6668,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7e4efc63d964fb54d158f935da146bc1d110111000000000000000000000000c7e4efc63d964fb54d158f935da146bc1d11011100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6669,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000067483bd638e743def96cc6ec22370890e806266700000000000000000000000067483bd638e743def96cc6ec22370890e80626670000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6670,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000025ab40e11289f84c7922d6c9701482d2ce71bb3b00000000000000000000000025ab40e11289f84c7922d6c9701482d2ce71bb3b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6671,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc83d4d0356f65da131cad32ddee510ffbe299c9000000000000000000000000bc83d4d0356f65da131cad32ddee510ffbe299c900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6672,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd8cbf8346fd11605d3ab90f70119f16c96c36d7000000000000000000000000dd8cbf8346fd11605d3ab90f70119f16c96c36d70000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6673,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071ef8f6abd528f29ff6f72fa065e28e029a4333f00000000000000000000000071ef8f6abd528f29ff6f72fa065e28e029a4333f00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6674,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c3e756bc7166c59a16feaecf6f4ef79809602500000000000000000000000000c3e756bc7166c59a16feaecf6f4ef7980960250000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6675,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e9b8031a39b2d7c75923b7bb008c68aff0857770000000000000000000000001e9b8031a39b2d7c75923b7bb008c68aff08577700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6676,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000718f4656f2ca7651703b8fc4f0f4bdfef6c2f5f4000000000000000000000000718f4656f2ca7651703b8fc4f0f4bdfef6c2f5f40000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6677,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d17e59eddd8ece9dee0a080a59ec054f1f088cc0000000000000000000000003d17e59eddd8ece9dee0a080a59ec054f1f088cc00000000000000000000000000000000000000000000000000027ca57357c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6678,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009f40ec377e00a8824af15fda1f594f7529a244950000000000000000000000009f40ec377e00a8824af15fda1f594f7529a244950000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6679,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e869afc9e11808553dd26cb14e3a6e4d02f81880000000000000000000000003e869afc9e11808553dd26cb14e3a6e4d02f818800000000000000000000000000000000000000000000000000027ca57357c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6681,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000effc506ccea7885f1e9b083ca335f5461c825055000000000000000000000000effc506ccea7885f1e9b083ca335f5461c82505500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6682,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000057b8aa42c89c1665d5bbf2a905b5e13b88a2c2ca00000000000000000000000057b8aa42c89c1665d5bbf2a905b5e13b88a2c2ca000000000000000000000000000000000000000000000000005bb1030379c58000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6683,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000615dc9211890d374b5e8238aa0a1e1d610dae2a3000000000000000000000000615dc9211890d374b5e8238aa0a1e1d610dae2a30000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6684,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000015ba2529b499a8d4a1f2023b2cccef67255b223300000000000000000000000015ba2529b499a8d4a1f2023b2cccef67255b223300000000000000000000000000000000000000000000000000027ca57357c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6685,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b58dd5de6947a9af979b6319c7764d00d86599ee000000000000000000000000b58dd5de6947a9af979b6319c7764d00d86599ee00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6686,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001533a8bee6a563156b93cd173e0b082aed5977a10000000000000000000000001533a8bee6a563156b93cd173e0b082aed5977a10000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6687,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000075334ff3095e21595eeda01a6cf45e3344561abc00000000000000000000000075334ff3095e21595eeda01a6cf45e3344561abc00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6688,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a332a063fa84977d9b3e702e82832a4263d63eef000000000000000000000000a332a063fa84977d9b3e702e82832a4263d63eef0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6689,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000096283598b4f1ff22d25938c38e4fd6c20c74bb3300000000000000000000000096283598b4f1ff22d25938c38e4fd6c20c74bb3300000000000000000000000000000000000000000000000000000000003157ed00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -6690,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000284439da6039b2e2fdd4dca08444856b9b7a6b90000000000000000000000000284439da6039b2e2fdd4dca08444856b9b7a6b90000000000000000000000000000000000000000000000000017c917612441de00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6691,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ae2795fbfe8c0f9cd111b7b10ffb7aef69c5d000000000000000000000000005ae2795fbfe8c0f9cd111b7b10ffb7aef69c5d000000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6692,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000acf2b39a6fe489cbcbcb34d767f2c1ede152e3ff000000000000000000000000acf2b39a6fe489cbcbcb34d767f2c1ede152e3ff0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6693,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003162d262871948881d5c7829d97ef60945a486540000000000000000000000003162d262871948881d5c7829d97ef60945a486540000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6694,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fd3beee5318121bd40a84db070da51799df6e42d000000000000000000000000fd3beee5318121bd40a84db070da51799df6e42d00000000000000000000000000000000000000000000000000487fd36235eb2b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6695,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a5f7c27187665f1493257f215bab01513d945bd0000000000000000000000000a5f7c27187665f1493257f215bab01513d945bd00000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6696,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b9b95c3e7b283df258a8243989d57d234290e7ee000000000000000000000000b9b95c3e7b283df258a8243989d57d234290e7ee0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6697,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ce9f98f11357a8cefc00ae30c5bb631d1358f270000000000000000000000005ce9f98f11357a8cefc00ae30c5bb631d1358f270000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6698,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008137d0a34a169af74193b378982ec2799beafefa0000000000000000000000008137d0a34a169af74193b378982ec2799beafefa0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6699,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e067258fd4a337568325fe9013bdf5f863556941000000000000000000000000e067258fd4a337568325fe9013bdf5f8635569410000000000000000000000000000000000000000000000000015e886c679eb7000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6700,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000f33f8b6dde723ad36be008d958418cbef9362f79000000000000000000000000f33f8b6dde723ad36be008d958418cbef9362f79000000000000000000000000000000000000000000000011fe9fb60ff9246d8f00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x399ae0fd92433078e23ab91f3dd853fa0ffb6010d68ab5b4af786aba1b5db633,2022-03-08 08:28:26.000 UTC,0,true -6701,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000583ed46aeb355b2ac96e5225ec3d6004077965b0000000000000000000000000583ed46aeb355b2ac96e5225ec3d6004077965b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6702,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e780e711a483d291d25f8a6b3e17c71dd71f7860000000000000000000000003e780e711a483d291d25f8a6b3e17c71dd71f78600000000000000000000000000000000000000000000000000019e82c4f47a5f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6703,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da42e741a6c75ef7a644574485d530667b4cc509000000000000000000000000da42e741a6c75ef7a644574485d530667b4cc5090000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6705,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000096f838cccf3299b4a456f39c393c0d6ec959649000000000000000000000000096f838cccf3299b4a456f39c393c0d6ec95964900000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6706,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000989b82ed1e240597c0ead2e1734235784ff865c0000000000000000000000000989b82ed1e240597c0ead2e1734235784ff865c000000000000000000000000000000000000000000000000000985792b17b37c200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6707,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9d52c08223533751fea859b8751b10617fea736000000000000000000000000e9d52c08223533751fea859b8751b10617fea7360000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6708,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dae14824041cb79bc4b6b036fc398e6fcd17af36000000000000000000000000dae14824041cb79bc4b6b036fc398e6fcd17af360000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6709,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef8c15fd7476664e3ce5c5dc1bf1a41587eaa9df000000000000000000000000ef8c15fd7476664e3ce5c5dc1bf1a41587eaa9df0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6710,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005c0ab71b90e97662bbd2ce0bd50663a3218925f80000000000000000000000005c0ab71b90e97662bbd2ce0bd50663a3218925f80000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6711,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eb665bba0648c249e6e80d254610d8722cf16e06000000000000000000000000eb665bba0648c249e6e80d254610d8722cf16e06000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6713,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d06a071d682387800aa4cfdf4bc041286fae29c0000000000000000000000002d06a071d682387800aa4cfdf4bc041286fae29c0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6714,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c2427fc07cb9eba0524813f81628b40a6e085008000000000000000000000000c2427fc07cb9eba0524813f81628b40a6e085008000000000000000000000000000000000000000000000000005c4d9ced308fbf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6715,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a78ef0a38e4f7e6de8c1188bf1e23be7fde6d163000000000000000000000000a78ef0a38e4f7e6de8c1188bf1e23be7fde6d1630000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6716,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000593a39b3049a37b69aa20f76e1ba82cf4dd3d8df000000000000000000000000593a39b3049a37b69aa20f76e1ba82cf4dd3d8df0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6717,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000068e227245a15aebffb30e2119ac8471b2d585fe700000000000000000000000068e227245a15aebffb30e2119ac8471b2d585fe7000000000000000000000000000000000000000000000000002bf638399c56cd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6718,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000743ee42aea17236e6e352291f5af19985340b5ef000000000000000000000000743ee42aea17236e6e352291f5af19985340b5ef0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6719,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009a6875bd4551e2ce409735128cc3ea0f679dde450000000000000000000000009a6875bd4551e2ce409735128cc3ea0f679dde450000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6721,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a24ef7cb10bbf9a13f72efee6704dd2ed00a7a37000000000000000000000000a24ef7cb10bbf9a13f72efee6704dd2ed00a7a37000000000000000000000000000000000000000000000000004fea443334973000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6723,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009ddc3b986528d899d6e8c83b43854f239a8ce9370000000000000000000000009ddc3b986528d899d6e8c83b43854f239a8ce9370000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6724,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002739490a39ecd9627a4a62c6a09d3cccb7d0cce10000000000000000000000002739490a39ecd9627a4a62c6a09d3cccb7d0cce1000000000000000000000000000000000000000000000000000137ed63e19a9a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6725,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa4efd397ed95854a1aabbd0d3c0f9a22583aca7000000000000000000000000aa4efd397ed95854a1aabbd0d3c0f9a22583aca700000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6726,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bfd7b3c53d7e9dff11c8325c3fdad957849de552000000000000000000000000bfd7b3c53d7e9dff11c8325c3fdad957849de5520000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6727,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000050eae46b07f2773c9743f393df2a546a0a5bd08e00000000000000000000000050eae46b07f2773c9743f393df2a546a0a5bd08e00000000000000000000000000000000000000000000000000193f6ba6304c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6729,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6227a80ffeba38ea32ab6b9713be920289cb3cf000000000000000000000000d6227a80ffeba38ea32ab6b9713be920289cb3cf0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6731,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017ed4599964c08a7e87ac85d5260fac711dcb20800000000000000000000000017ed4599964c08a7e87ac85d5260fac711dcb2080000000000000000000000000000000000000000000000000001064b62f3e60600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6732,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd128dd4f3bc1087003b118f7b605d0acecc87af000000000000000000000000dd128dd4f3bc1087003b118f7b605d0acecc87af0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6733,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a86efb65073925ab10a0d7afcd380de728e8a940000000000000000000000001a86efb65073925ab10a0d7afcd380de728e8a9400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6734,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc948a999aa852f1be4059cb9a35c3b0c7d8d5c7000000000000000000000000cc948a999aa852f1be4059cb9a35c3b0c7d8d5c70000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6735,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da074a0cea8b865dcd6f29840c7cc43117d7e7cf000000000000000000000000da074a0cea8b865dcd6f29840c7cc43117d7e7cf00000000000000000000000000000000000000000000000000053cd2d6ecc36900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6736,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b4ec5cbec873b8b856151707bbc108959b878d60000000000000000000000000b4ec5cbec873b8b856151707bbc108959b878d600000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6737,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d910066ad7695771c59596b7d18a5b17a1e19fa9000000000000000000000000d910066ad7695771c59596b7d18a5b17a1e19fa900000000000000000000000000000000000000000000000000604051253ea9f300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6738,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078aa649f3650210370473af4d2e76d0134bad04200000000000000000000000078aa649f3650210370473af4d2e76d0134bad04200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6739,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061797bbe124100ed5ccab9563e846d4032e6bddb00000000000000000000000061797bbe124100ed5ccab9563e846d4032e6bddb0000000000000000000000000000000000000000000000000002f31db95900f100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6740,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d70cb8d1d6f6c5c0103590aaaa89728ef1c71bc0000000000000000000000000d70cb8d1d6f6c5c0103590aaaa89728ef1c71bc0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6742,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078aa649f3650210370473af4d2e76d0134bad04200000000000000000000000078aa649f3650210370473af4d2e76d0134bad0420000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6743,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e8b2321803b479333c94415e8d5a6ea62bb7af50000000000000000000000002e8b2321803b479333c94415e8d5a6ea62bb7af50000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6744,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000068990547d34fc703c923be5ffe823b73005accc800000000000000000000000068990547d34fc703c923be5ffe823b73005accc80000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6745,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a86efb65073925ab10a0d7afcd380de728e8a940000000000000000000000001a86efb65073925ab10a0d7afcd380de728e8a94000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6746,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000debbca93d481a510ce1b84a6413b8b4b858b17f0000000000000000000000000debbca93d481a510ce1b84a6413b8b4b858b17f0000000000000000000000000000000000000000000000000000427b31cbf515a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6747,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005cfbcbf4b01eac0631b0a2864f670e829716390b0000000000000000000000005cfbcbf4b01eac0631b0a2864f670e829716390b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6748,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f4867a97a644c0ba2cfa01251c5f444247e1d4a9000000000000000000000000f4867a97a644c0ba2cfa01251c5f444247e1d4a90000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6749,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea0cfed9a954ef5058bea5489932759fe433bd25000000000000000000000000ea0cfed9a954ef5058bea5489932759fe433bd250000000000000000000000000000000000000000000000000001bd64e8a389c500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6750,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a0f8028a63bee304d331e54a420a581bcff254d0000000000000000000000000a0f8028a63bee304d331e54a420a581bcff254d000000000000000000000000000000000000000000000000002165400ce3800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6751,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc11da00aaf47cde957b20f8e6ba3289b5b12755000000000000000000000000cc11da00aaf47cde957b20f8e6ba3289b5b1275500000000000000000000000000000000000000000000000000ae0cdb8be3fe0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6752,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cd5f81f7a74b48d4d7bc9014ef8bbfe68adff7ef000000000000000000000000cd5f81f7a74b48d4d7bc9014ef8bbfe68adff7ef0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6753,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000255ae1b7ea3e90a693c577116a9a6b9e8ad9d7a0000000000000000000000000255ae1b7ea3e90a693c577116a9a6b9e8ad9d7a00000000000000000000000000000000000000000000000000019de182d7fa29f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6754,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001f13e23fca742b91b5dd0ce6dbdbaade23d5a8510000000000000000000000001f13e23fca742b91b5dd0ce6dbdbaade23d5a851000000000000000000000000000000000000000000000000000c1448303c800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6755,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d4e3332ad0148a1f9dc2c3f22962a4ac01fe9380000000000000000000000002d4e3332ad0148a1f9dc2c3f22962a4ac01fe93800000000000000000000000000000000000000000000000000049db5c31bba7c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6756,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd05389364119733c81c11326f2a10c5525674da000000000000000000000000dd05389364119733c81c11326f2a10c5525674da00000000000000000000000000000000000000000000000000320c0d1cca362100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6757,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ddd57633ec77f9c4dae0eb10ec3ae92e8bf2b8c7000000000000000000000000ddd57633ec77f9c4dae0eb10ec3ae92e8bf2b8c70000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6758,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7685b061bcbe69aa0f5805b0f9044fe27c26219000000000000000000000000f7685b061bcbe69aa0f5805b0f9044fe27c2621900000000000000000000000000000000000000000000000000a79e07db20f27000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6759,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ec6295bf707b896efe73fb9f9a8aca0855c22460000000000000000000000006ec6295bf707b896efe73fb9f9a8aca0855c2246000000000000000000000000000000000000000000000000000818ccbc67cec000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6760,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f3dec91e024382085c5eb75c53c9e1affcddcda0000000000000000000000007f3dec91e024382085c5eb75c53c9e1affcddcda000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6761,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e85a3e42bcb125c4f002877590783cfe043af38a000000000000000000000000e85a3e42bcb125c4f002877590783cfe043af38a0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6762,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000382f7e0d466fde37662adab977b43ff3408fbadc000000000000000000000000382f7e0d466fde37662adab977b43ff3408fbadc00000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6763,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061df273850e894883ea2a07abb83412bd3ac7ac300000000000000000000000061df273850e894883ea2a07abb83412bd3ac7ac30000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6764,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002bd7911ad761733ed33e5c3759c11ac8950a9b810000000000000000000000002bd7911ad761733ed33e5c3759c11ac8950a9b8100000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6765,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ec20a48606ed812d4ff83cddff24f056e9567a00000000000000000000000003ec20a48606ed812d4ff83cddff24f056e9567a00000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6766,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e04e81d73664ab466181f467d37b065021e78b50000000000000000000000003e04e81d73664ab466181f467d37b065021e78b500000000000000000000000000000000000000000000000001902e262da0e2d700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6767,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d752d7f9ac9b31181ad78a8ff650d3bfaa56b3a0000000000000000000000005d752d7f9ac9b31181ad78a8ff650d3bfaa56b3a0000000000000000000000000000000000000000000000000056308a22b602f200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6768,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000562156551d44f126d4a062c1acf3982191f9e75f000000000000000000000000562156551d44f126d4a062c1acf3982191f9e75f00000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6769,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000338485735554d67e60826cf8a7a0f16168657301000000000000000000000000338485735554d67e60826cf8a7a0f161686573010000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6770,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094c4ddf43ad5caf17155961c427b3bca8fcb5e6700000000000000000000000094c4ddf43ad5caf17155961c427b3bca8fcb5e670000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6771,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dbf1ac97a4174328ed8f72f973f6048e9ea7eef2000000000000000000000000dbf1ac97a4174328ed8f72f973f6048e9ea7eef2000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6772,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000661e6111844f9e63c9c9f64ae285fbf771b753a7000000000000000000000000661e6111844f9e63c9c9f64ae285fbf771b753a7000000000000000000000000000000000000000000000000000ec42f934ec70b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6773,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000056ee385e4cb6f046cba4bca258888e05d6b2ed3f00000000000000000000000056ee385e4cb6f046cba4bca258888e05d6b2ed3f0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6774,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c82877142407489d1c287b9477c5dd207fdd3403000000000000000000000000c82877142407489d1c287b9477c5dd207fdd34030000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6775,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000fd31e056c2efaea5c7f2434361675c86aa46b190000000000000000000000000fd31e056c2efaea5c7f2434361675c86aa46b190000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6776,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdfa32808e6c14fd1a237271fecc6e4e65332213000000000000000000000000bdfa32808e6c14fd1a237271fecc6e4e653322130000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6777,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005455f0d4c30bdf9674e4ab2874e9c35ee56bb1750000000000000000000000005455f0d4c30bdf9674e4ab2874e9c35ee56bb1750000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6778,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000092db20ba1eef01e50ee4b77aadc381a13a6e5c9b00000000000000000000000092db20ba1eef01e50ee4b77aadc381a13a6e5c9b0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6779,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b070973752ee0d32b297fae01fc949b1f8895458000000000000000000000000b070973752ee0d32b297fae01fc949b1f88954580000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6780,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d20cefb170c77788c958b33c3d3c1df5001c0081000000000000000000000000d20cefb170c77788c958b33c3d3c1df5001c00810000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6781,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f2df6eb279693cd4df01b3cee95ad7edd6c18a49000000000000000000000000f2df6eb279693cd4df01b3cee95ad7edd6c18a490000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6782,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd6d9d0e7a11eca7be5dc7617901203e8fb90c73000000000000000000000000bd6d9d0e7a11eca7be5dc7617901203e8fb90c730000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6783,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f2dd81fc7b7a5d603864c4bbc0b5a0db2b818560000000000000000000000008f2dd81fc7b7a5d603864c4bbc0b5a0db2b818560000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6784,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ffb52199b115b695aa1b0153bb6f167330de7550000000000000000000000005ffb52199b115b695aa1b0153bb6f167330de7550000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6785,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005dbbc46e95b9abb77a49296b0baf6e464cefe8da0000000000000000000000005dbbc46e95b9abb77a49296b0baf6e464cefe8da0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6786,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009790062ed975a3d3df2926fe677a970d63608b030000000000000000000000009790062ed975a3d3df2926fe677a970d63608b03000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6787,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8300f627164a1bfd983b43e7b75825f0ac3d659000000000000000000000000e8300f627164a1bfd983b43e7b75825f0ac3d6590000000000000000000000000000000000000000000000000016932a38a315ff00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6789,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006743dc6c402b4ec457d243a3fe39b5fd3cbd68a60000000000000000000000006743dc6c402b4ec457d243a3fe39b5fd3cbd68a6000000000000000000000000000000000000000000000000001e82bdbc5dc65c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6790,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005fe4c41bdc99fc8c93b443a048fe453fd480263f0000000000000000000000005fe4c41bdc99fc8c93b443a048fe453fd480263f0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6791,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9f170e6ce173e753ecc2161676a89a45e413d6d000000000000000000000000f9f170e6ce173e753ecc2161676a89a45e413d6d00000000000000000000000000000000000000000000000000a4928b3a8663a000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6792,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f77cec2fcaa9cd0cd57207fff081791433da5420000000000000000000000007f77cec2fcaa9cd0cd57207fff081791433da5420000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6793,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000073d5cee28154860b4c74544e97243e24c498eb9400000000000000000000000073d5cee28154860b4c74544e97243e24c498eb940000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6794,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3c90e136e0ef3a784a409fd03ebdc441d281bba000000000000000000000000f3c90e136e0ef3a784a409fd03ebdc441d281bba000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6795,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000077f957271c6603f5e09f98ae3a832fc807b9f5ba00000000000000000000000077f957271c6603f5e09f98ae3a832fc807b9f5ba0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6796,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf494685a64273fd97682572c4d18ac3a8dd8541000000000000000000000000cf494685a64273fd97682572c4d18ac3a8dd8541000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6797,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e55b4c05d74d84931a513f3c7b37d609a487c0ea000000000000000000000000e55b4c05d74d84931a513f3c7b37d609a487c0ea0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6798,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000026ef3b71bd9fb55cd9e5e78cc00cf47c469e607100000000000000000000000026ef3b71bd9fb55cd9e5e78cc00cf47c469e6071000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6799,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ee2bf824a123cdeaafae3a48d815389346592ff0000000000000000000000003ee2bf824a123cdeaafae3a48d815389346592ff0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6800,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000052018495652d3306a488c491cf26814ce2cb0efc00000000000000000000000052018495652d3306a488c491cf26814ce2cb0efc000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6801,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003b86f41e27467435e82602009db717f22f7dbb6f0000000000000000000000003b86f41e27467435e82602009db717f22f7dbb6f0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6802,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd6f5a15a452ae14538624da5035fd86d2bdd4e0000000000000000000000000dd6f5a15a452ae14538624da5035fd86d2bdd4e00000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6803,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c00b37353608eaa0602304b68eab325914799310000000000000000000000000c00b37353608eaa0602304b68eab325914799310000000000000000000000000000000000000000000000000072bfc62055f97500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6804,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ea73574617b991c15be1ab57fc018465d29147b0000000000000000000000004ea73574617b991c15be1ab57fc018465d29147b000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6805,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000158e1aa7940735af8edaca168bf60e5707ff91d0000000000000000000000000158e1aa7940735af8edaca168bf60e5707ff91d00000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6807,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d7e9f89c3cf7a6ea7e820ae8737ec624f6586c70000000000000000000000000d7e9f89c3cf7a6ea7e820ae8737ec624f6586c7000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6808,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000062df12cc459f484e670845804706849fcc83788500000000000000000000000062df12cc459f484e670845804706849fcc8378850000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6809,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a70d9c59ad7418abec8155ec8154ade6d1a31c50000000000000000000000004a70d9c59ad7418abec8155ec8154ade6d1a31c50000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6810,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001907037c1acf968cefa05f730ccdc522b94720ad0000000000000000000000001907037c1acf968cefa05f730ccdc522b94720ad0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6811,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b5fe3482344526cf9d6234703c074e3880907b8b000000000000000000000000b5fe3482344526cf9d6234703c074e3880907b8b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6812,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f97722f8c20461c77da6b696f41b5b908c6cf6b5000000000000000000000000f97722f8c20461c77da6b696f41b5b908c6cf6b50000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6813,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000031e9b62825f0ffa39cf95df3eba4e97065fee33700000000000000000000000031e9b62825f0ffa39cf95df3eba4e97065fee3370000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6814,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da1c3d4df3281ca6a6b14bde37a509959a096759000000000000000000000000da1c3d4df3281ca6a6b14bde37a509959a096759000000000000000000000000000000000000000000000000008a663c5a4fdf8b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd2c242f68eec50d30940c9d17f2662e138ad8440be1385d24ed142ccb8ed043f,2022-02-04 00:49:13.000 UTC,0,true -6815,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000610dd633fc5d2f573b10b1b614a00c5d6d75b451000000000000000000000000610dd633fc5d2f573b10b1b614a00c5d6d75b4510000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6816,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002dd057787bd3301549277f7e93b5b5380ec4b5470000000000000000000000002dd057787bd3301549277f7e93b5b5380ec4b5470000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6817,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000065089bbedf4a46b336c969ae1abdbb79ffe1f60200000000000000000000000065089bbedf4a46b336c969ae1abdbb79ffe1f6020000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6818,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cef1526a2e3aacd6a404c69ee7b6a29a3417d3aa000000000000000000000000cef1526a2e3aacd6a404c69ee7b6a29a3417d3aa0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6820,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000684ac097ee23a5cf3a74265d34ad557c17d694a0000000000000000000000000684ac097ee23a5cf3a74265d34ad557c17d694a0000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6822,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003cdc7a4c7185d73cffb7c2e4b3c80a95609d95040000000000000000000000003cdc7a4c7185d73cffb7c2e4b3c80a95609d95040000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6823,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000064986e67ef13776ac665142cfb10f049f93443a600000000000000000000000064986e67ef13776ac665142cfb10f049f93443a6000000000000000000000000000000000000000000000000002eef9496c9af3e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6824,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ed19639b0bb87b3f5547eaa514e289d4ea79c34c000000000000000000000000ed19639b0bb87b3f5547eaa514e289d4ea79c34c00000000000000000000000000000000000000000000000000a4c0900a5c774600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6825,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000019f875200b36f910c05d32cc8016132a7cfbdd2900000000000000000000000019f875200b36f910c05d32cc8016132a7cfbdd290000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6826,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f5a67baeb7c7ddfd5e214739e9a4f737ed7f0556000000000000000000000000f5a67baeb7c7ddfd5e214739e9a4f737ed7f05560000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6827,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000073797185afa718066af2927a916a07daee1edae000000000000000000000000073797185afa718066af2927a916a07daee1edae0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6828,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5076f22e60df3ab138191b745c5252ed43d5989000000000000000000000000e5076f22e60df3ab138191b745c5252ed43d59890000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6829,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fa65879e61241800b5c7f89ab6992920f3c08d75000000000000000000000000fa65879e61241800b5c7f89ab6992920f3c08d750000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6830,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000013be29e577d8d967cd74b4c5c0452bb5a875e49c00000000000000000000000013be29e577d8d967cd74b4c5c0452bb5a875e49c000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6831,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc2101a89696a4f6f94fb526ffc8a1d97714e81d000000000000000000000000fc2101a89696a4f6f94fb526ffc8a1d97714e81d00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6832,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e610f8d228a51f3370a4f862234fcbb3ac5cc01b000000000000000000000000e610f8d228a51f3370a4f862234fcbb3ac5cc01b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6834,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000518b77149261f06abab57d7bdfcc10b7577c111c000000000000000000000000518b77149261f06abab57d7bdfcc10b7577c111c0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6835,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b75dad96ff6758f330856f3fdd3a6b873769b2f6000000000000000000000000b75dad96ff6758f330856f3fdd3a6b873769b2f60000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6836,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3cc830800591174492fb5ee692941dfdb6a6a4b000000000000000000000000a3cc830800591174492fb5ee692941dfdb6a6a4b000000000000000000000000000000000000000000000000006fdf9a7a614d2500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6837,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000478c189ac3424841b16a11aff581720913c345f4000000000000000000000000478c189ac3424841b16a11aff581720913c345f40000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6838,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009a898dacad27fb10e1cef7c6a3bb61d08299962c0000000000000000000000009a898dacad27fb10e1cef7c6a3bb61d08299962c0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6839,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2f89d9e4f8984a5028a9fd7a84e07ac6d5cc430000000000000000000000000d2f89d9e4f8984a5028a9fd7a84e07ac6d5cc4300000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6840,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007525fc2e118d8e931c820d4d0937d42bc42537280000000000000000000000007525fc2e118d8e931c820d4d0937d42bc425372800000000000000000000000000000000000000000000000000a450e30c8be73400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6841,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f3c1c2ecc94e7117d29629930393186d998ce1b0000000000000000000000008f3c1c2ecc94e7117d29629930393186d998ce1b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6842,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e224e7e9e6084877856f147ce06a33ccb88eeff0000000000000000000000004e224e7e9e6084877856f147ce06a33ccb88eeff000000000000000000000000000000000000000000000000008305a4a951b09000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6843,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002cf69d546ea33258d7f14303758dda665ab90f640000000000000000000000002cf69d546ea33258d7f14303758dda665ab90f6400000000000000000000000000000000000000000000000000a733bf557b260200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6844,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f6480446fafda6d13e228cc69eb594ea3a995e74000000000000000000000000f6480446fafda6d13e228cc69eb594ea3a995e74000000000000000000000000000000000000000000000000000bf2e4a1a1868000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6845,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2a8a73cd8f888da3e8beba1fcacf50ab8be301f000000000000000000000000d2a8a73cd8f888da3e8beba1fcacf50ab8be301f000000000000000000000000000000000000000000000000002e478127f3b10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6846,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d662b686995eca77d59a52228afd1bb7188687e0000000000000000000000003d662b686995eca77d59a52228afd1bb7188687e0000000000000000000000000000000000000000000000000073b4c1c535898200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6847,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000082932cd9589c1ac167c2a902abd27cd15fcf825000000000000000000000000082932cd9589c1ac167c2a902abd27cd15fcf8250000000000000000000000000000000000000000000000000004ee415767e601900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6848,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000091af4e20a9610c0ddd99ee81af75161fedcf9d5100000000000000000000000091af4e20a9610c0ddd99ee81af75161fedcf9d5100000000000000000000000000000000000000000000000000a8fe484cb3c02000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6849,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c92d9d1d611c0efe375e32c0aa41b543dcfabc76000000000000000000000000c92d9d1d611c0efe375e32c0aa41b543dcfabc7600000000000000000000000000000000000000000000000000659c3ae8e2f34000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6850,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cb84d1fdd67eee26015c46cf938d5f651890e3df000000000000000000000000cb84d1fdd67eee26015c46cf938d5f651890e3df00000000000000000000000000000000000000000000000000a9a4b187e5773c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6851,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049b48f5d813301700e22e654501156fb2d58c89800000000000000000000000049b48f5d813301700e22e654501156fb2d58c89800000000000000000000000000000000000000000000000000a3ef86815e8ef000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6852,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f2ff8196b4ae960e3a1b533857f6f054bffa92fb000000000000000000000000f2ff8196b4ae960e3a1b533857f6f054bffa92fb00000000000000000000000000000000000000000000000001c03f5ff499958d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6854,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000fc0475cecca273e96152768d9739a1b8b9e7c750000000000000000000000000fc0475cecca273e96152768d9739a1b8b9e7c7500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6855,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005180ba6607473001ae52cef5a9f267eb3a2d22580000000000000000000000005180ba6607473001ae52cef5a9f267eb3a2d2258000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6856,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007e799e5672106f838dacf3a5f2044a2cc8ae6efb0000000000000000000000007e799e5672106f838dacf3a5f2044a2cc8ae6efb000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6857,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009e2a20d6298438532e4830cd33350541dc057a7e0000000000000000000000009e2a20d6298438532e4830cd33350541dc057a7e000000000000000000000000000000000000000000000000003771aa6e89f50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6858,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000055605545adaca40212837f988aa6bd1066b873c000000000000000000000000055605545adaca40212837f988aa6bd1066b873c00000000000000000000000000000000000000000000000000a39d153894c6ff00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6859,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007a08bba2a71665cc607af4124f61bdb0983fa37a0000000000000000000000007a08bba2a71665cc607af4124f61bdb0983fa37a0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6860,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000681f284c82eb81054d6696acea2020fdc68f7ca3000000000000000000000000681f284c82eb81054d6696acea2020fdc68f7ca3000000000000000000000000000000000000000000000000004fdc3050a9fb8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf92f12f784cc351b5ce6640e2d0fbe040bdfc91c8fa13fbe2062a6e322af3ef1,2022-05-24 09:00:13.000 UTC,0,true -6861,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b13a4dbaa41983319782438646f37eaf2fc1ae5e000000000000000000000000b13a4dbaa41983319782438646f37eaf2fc1ae5e000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6862,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000064ab0caf0bd155a5b696ea4b08c68424bcc16a4400000000000000000000000064ab0caf0bd155a5b696ea4b08c68424bcc16a44000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6863,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b359d90f2a827afb6a9e9b84a5d2a99064cd4723000000000000000000000000b359d90f2a827afb6a9e9b84a5d2a99064cd4723000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6864,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d39bd8ab97f6421fdb43f64e9af444759a5b1bac000000000000000000000000d39bd8ab97f6421fdb43f64e9af444759a5b1bac000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6865,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f07790bf96c6e6d967d89a5c3a9be8d55c36ade3000000000000000000000000f07790bf96c6e6d967d89a5c3a9be8d55c36ade3000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6866,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000397eb4ba465dd51ebfc02a5832cd0d849c629e11000000000000000000000000397eb4ba465dd51ebfc02a5832cd0d849c629e11000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6867,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd66a3148866f5bfd68fd324ef4afc3a96301ec4000000000000000000000000bd66a3148866f5bfd68fd324ef4afc3a96301ec400000000000000000000000000000000000000000000000000a7009deb6f608000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6868,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3f68d305ab94fcfd7ee595f217160b9e544f2a9000000000000000000000000a3f68d305ab94fcfd7ee595f217160b9e544f2a900000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6869,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d679e36e57535c4c4f220b6404d115afa3dcc060000000000000000000000003d679e36e57535c4c4f220b6404d115afa3dcc0600000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6871,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d0c7ff038c90aeaec83327f5fb5ae748df81a389000000000000000000000000d0c7ff038c90aeaec83327f5fb5ae748df81a38900000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6872,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000096f0ce0e9cc9fdba644341d7c5fb5fad5eb8d3c400000000000000000000000096f0ce0e9cc9fdba644341d7c5fb5fad5eb8d3c400000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6873,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000060e308ac2a46e528f6f9821e9533f272fdbcc6d300000000000000000000000060e308ac2a46e528f6f9821e9533f272fdbcc6d3000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6874,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e40c1139ff356545caa2ca22b2527be092dfac5e000000000000000000000000e40c1139ff356545caa2ca22b2527be092dfac5e000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6875,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029eb0da916392512919fb2e423d9a23db2bf459000000000000000000000000029eb0da916392512919fb2e423d9a23db2bf45900000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6876,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf9a724613095d5704eb3ac79ea61dbc4854957f000000000000000000000000cf9a724613095d5704eb3ac79ea61dbc4854957f000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6877,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9d0bb52d740d5b1195468ce9194b82df48465b9000000000000000000000000e9d0bb52d740d5b1195468ce9194b82df48465b9000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6878,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d4d6b0db4bf5efb57e02bdba258e6978774c2678000000000000000000000000d4d6b0db4bf5efb57e02bdba258e6978774c267800000000000000000000000000000000000000000000000000728a1c936f52ac00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6879,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bcf210ed32285b8a2e3cd4f7ae6c8e252cce93a3000000000000000000000000bcf210ed32285b8a2e3cd4f7ae6c8e252cce93a3000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6880,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b27e1f879c4a1061d99682d5cc7680190a48200e000000000000000000000000b27e1f879c4a1061d99682d5cc7680190a48200e000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6881,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000034361fa5987629afbeeaada70f1aa29bb60c51a400000000000000000000000034361fa5987629afbeeaada70f1aa29bb60c51a4000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6882,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000647dbb5ca567702688ef0e458bd8f1af302e98e600000000000000000000000000000000000000000000000531136396bb290000,,,1,true -6883,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1c4806d27ecf6d09a2f14c5edab5a61dcfbe48d000000000000000000000000f1c4806d27ecf6d09a2f14c5edab5a61dcfbe48d000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6884,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d66a7a3d590c0b892db851d2278cb76d1decfbd9000000000000000000000000d66a7a3d590c0b892db851d2278cb76d1decfbd900000000000000000000000000000000000000000000000000a85ba7593fa82000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6885,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f69f1bf59fa788f894d5693d75a7250ffcd7f878000000000000000000000000f69f1bf59fa788f894d5693d75a7250ffcd7f87800000000000000000000000000000000000000000000000000d529ae9e86000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6886,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000025a2ebfaa31d4312204ba2be4973cdcf4253587700000000000000000000000025a2ebfaa31d4312204ba2be4973cdcf42535877000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6887,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bfd1f46ef8eef67e51796e183f4ba00cdbb078f7000000000000000000000000bfd1f46ef8eef67e51796e183f4ba00cdbb078f70000000000000000000000000000000000000000000000000075c2455e1871e900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6888,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000068662163a2e664f8f81a751463db74864eea752200000000000000000000000068662163a2e664f8f81a751463db74864eea75220000000000000000000000000000000000000000000000000018f5441a31cfec00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6889,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000053bb4a4eafed31b562d766a61c8bc4681caf2ee100000000000000000000000053bb4a4eafed31b562d766a61c8bc4681caf2ee100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6890,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e90d5f1d9e1634eefb1849ea6870ad9c615ede24000000000000000000000000e90d5f1d9e1634eefb1849ea6870ad9c615ede240000000000000000000000000000000000000000000000000091a94863ca800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6891,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001f48e0a83e07541d9b60a29bb249db703574b8c20000000000000000000000001f48e0a83e07541d9b60a29bb249db703574b8c20000000000000000000000000000000000000000000000000053e108c83e5e0f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6892,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3da7b05bf56a6b090f21b0513316851ddf839a8000000000000000000000000a3da7b05bf56a6b090f21b0513316851ddf839a800000000000000000000000000000000000000000000000000a7b1ac6ee236fe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6893,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e6f0cb5d962d453f05ef628278c544dc2e9b58ff000000000000000000000000e6f0cb5d962d453f05ef628278c544dc2e9b58ff00000000000000000000000000000000000000000000000000c6f3b40b6c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6894,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000140ebfbbd62e51d45c2a4fccf6aa44b10eff32fb000000000000000000000000140ebfbbd62e51d45c2a4fccf6aa44b10eff32fb00000000000000000000000000000000000000000000000001f2a9c76eb8fceb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6896,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000025c6acc11d1814a3ca59562957cada7d673ae0ac00000000000000000000000025c6acc11d1814a3ca59562957cada7d673ae0ac0000000000000000000000000000000000000000000000000077129cb6e560a100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6899,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000417be1be8e825bde060a365c5e1754403ca281b6000000000000000000000000417be1be8e825bde060a365c5e1754403ca281b6000000000000000000000000000000000000000000000000001bff73fec78c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6900,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e5af1f11ad9856d8c6e1ab27fe2c0c40b579b370000000000000000000000006e5af1f11ad9856d8c6e1ab27fe2c0c40b579b3700000000000000000000000000000000000000000000000000d529ae9e86000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6901,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e7ea7126a10df07b3ed6f425ebf7632d6df15480000000000000000000000008e7ea7126a10df07b3ed6f425ebf7632d6df154800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6902,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a46119d6d8faf6a482b14fb7185de29f5a241293000000000000000000000000a46119d6d8faf6a482b14fb7185de29f5a241293000000000000000000000000000000000000000000000000003dc754a067e39f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6904,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078807e8347fd291a22e4e798ac8b2c373abd070f00000000000000000000000078807e8347fd291a22e4e798ac8b2c373abd070f00000000000000000000000000000000000000000000000006e497f4bab19c4900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6905,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005615b91b204e2d5a342972b2aeaafb30ad3d11840000000000000000000000005615b91b204e2d5a342972b2aeaafb30ad3d1184000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6906,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c794b210337339ce83f5be21f0f62802c029b332000000000000000000000000c794b210337339ce83f5be21f0f62802c029b332000000000000000000000000000000000000000000000000002043cb9a67fc1900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6909,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000953995ac114b527b97f6c5070de898962b8c7ad0000000000000000000000000953995ac114b527b97f6c5070de898962b8c7ad00000000000000000000000000000000000000000000000000a98b0d5f31eb2e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6910,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005842aa91fde70566883c12b07ec700792630e9c50000000000000000000000005842aa91fde70566883c12b07ec700792630e9c500000000000000000000000000000000000000000000000000c86e454d307f3900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6911,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc139276ff0be2dd9485d24c8e33e1c0b9d2e2df000000000000000000000000cc139276ff0be2dd9485d24c8e33e1c0b9d2e2df000000000000000000000000000000000000000000000000003bb36eb25045e100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6912,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ad5b935a336fa91d049a07071cc80b22625377ad000000000000000000000000ad5b935a336fa91d049a07071cc80b22625377ad000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6913,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9b8bc71e8d0a948c90e776db9986f394cc65a23000000000000000000000000c9b8bc71e8d0a948c90e776db9986f394cc65a2300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6914,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000699db59f23d4fc9aeb9dc770eb3f30e84cc5acf1000000000000000000000000699db59f23d4fc9aeb9dc770eb3f30e84cc5acf100000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6915,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f79ed2e7846523719875fb10a6b0cd1ea40c05cc000000000000000000000000f79ed2e7846523719875fb10a6b0cd1ea40c05cc0000000000000000000000000000000000000000000000000c81d245ac433fc400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6916,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008dd42c713d06633f2bbcc9f7571d0cdb0a20777c0000000000000000000000008dd42c713d06633f2bbcc9f7571d0cdb0a20777c00000000000000000000000000000000000000000000000000489c6d7a469c0b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6917,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000eac4899b7ab841ad7d68550b43d877aab93f143b000000000000000000000000eac4899b7ab841ad7d68550b43d877aab93f143b0000000000000000000000000000000000000000000000000000000002faefbc00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -6918,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ace8be2bbf60b8d8beb956175eff03e49240ee5e000000000000000000000000ace8be2bbf60b8d8beb956175eff03e49240ee5e000000000000000000000000000000000000000000000000010d0beb5dd7a1a000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6920,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094dcb38e3901a0d2a6d1bbf8fe232d626632571900000000000000000000000094dcb38e3901a0d2a6d1bbf8fe232d626632571900000000000000000000000000000000000000000000000000833461775ce5b700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6922,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004d2dea9c4cdced177021f25a879d3cbf4c89e46d0000000000000000000000004d2dea9c4cdced177021f25a879d3cbf4c89e46d00000000000000000000000000000000000000000000000000000433cd2b250000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6923,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3907cef128f29a4c20a53ef803039a8ceb3db40000000000000000000000000d3907cef128f29a4c20a53ef803039a8ceb3db40000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6924,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001d7f3e7477509e5aaef96cc8c45879b6de3414860000000000000000000000001d7f3e7477509e5aaef96cc8c45879b6de34148600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6925,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e0be25bbaf45c32f1b494ad1428570cda54ffbbb000000000000000000000000e0be25bbaf45c32f1b494ad1428570cda54ffbbb00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6926,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000634c994e9f1945016d90d30d540971fade8b26f8000000000000000000000000634c994e9f1945016d90d30d540971fade8b26f8000000000000000000000000000000000000000000000000001e4a70ab4c0c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6927,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005113260b89790bcf675083fece6c66ce6ab3b6390000000000000000000000005113260b89790bcf675083fece6c66ce6ab3b63900000000000000000000000000000000000000000000000000a4f784696b1de400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6928,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e1240655fe99f9e8f225258bd1d664a030ad46de000000000000000000000000e1240655fe99f9e8f225258bd1d664a030ad46de000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6929,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b5ad56a8708f50ba9e0cef123bfaa4684f6c7331000000000000000000000000b5ad56a8708f50ba9e0cef123bfaa4684f6c73310000000000000000000000000000000000000000000000000092ba219539400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6931,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000013a875ea21c9f2f599f667a02ee90f4758f1c87300000000000000000000000013a875ea21c9f2f599f667a02ee90f4758f1c87300000000000000000000000000000000000000000000000000ba1352924c125800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6932,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000040333b174f38dbdc909b7e2763e7764e133fbaf600000000000000000000000040333b174f38dbdc909b7e2763e7764e133fbaf600000000000000000000000000000000000000000000000000a8661a217bcd2200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6933,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdc3a9a543aa7029085dc500d639f0868be7eaea000000000000000000000000bdc3a9a543aa7029085dc500d639f0868be7eaea00000000000000000000000000000000000000000000000000a8660c825a800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xbd0fd524ef9c6c721476e31ef9737967588586e6f861991cf0d29ff3047b2a91,2021-12-12 03:23:38.000 UTC,0,true -6936,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000685704e8a92c1f57e0c697697738412886ccb6e3000000000000000000000000685704e8a92c1f57e0c697697738412886ccb6e3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6937,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000575ab966f12c09eee2fd0888b63ed81115088269000000000000000000000000575ab966f12c09eee2fd0888b63ed8111508826900000000000000000000000000000000000000000000000000438600020ad40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2654cbb590daa9a2b7dcbdc2e24fc6ac3a46fa0f407f23819944d09be23ac5d3,2022-03-04 10:22:14.000 UTC,0,true -6938,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5c1cbb2717cb644b7c84cce6519c58e560ee007000000000000000000000000e5c1cbb2717cb644b7c84cce6519c58e560ee0070000000000000000000000000000000000000000000000000097d9e0ad74360800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6939,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043a2ec2991f189cff8c024fb34a3fce9a33c5ae200000000000000000000000043a2ec2991f189cff8c024fb34a3fce9a33c5ae2000000000000000000000000000000000000000000000000003d25828834f8e100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6940,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000029fca5052da9b93b2b25809135022ec36735599500000000000000000000000029fca5052da9b93b2b25809135022ec367355995000000000000000000000000000000000000000000000000000000000851572900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -6941,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003de35c78f166828a9723d1b9d29a54bc159b3aa70000000000000000000000003de35c78f166828a9723d1b9d29a54bc159b3aa70000000000000000000000000000000000000000000000000014cabbedd3f80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6942,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004375c14f100c563dd92b34f8fb41e764e7c9f3530000000000000000000000004375c14f100c563dd92b34f8fb41e764e7c9f35300000000000000000000000000000000000000000000000000cd63f6b2e62e4f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6943,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000705c7909e5d4b833778cb95fee849c7dff1d0681000000000000000000000000705c7909e5d4b833778cb95fee849c7dff1d068100000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6944,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ef0430c20044bf343e26edfdd992c67807cf64d0000000000000000000000003ef0430c20044bf343e26edfdd992c67807cf64d00000000000000000000000000000000000000000000000000a64fddbdf7280200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6946,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000afa841fab90d5b2f68d04799ed35a458d856d1e5000000000000000000000000afa841fab90d5b2f68d04799ed35a458d856d1e5000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6949,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf207d607ffd7c7174b997a879125e5301c526af000000000000000000000000cf207d607ffd7c7174b997a879125e5301c526af00000000000000000000000000000000000000000000000000350647ebd9f85400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6950,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dccede7fc9210649eb6e593aeb351f89adb92831000000000000000000000000dccede7fc9210649eb6e593aeb351f89adb92831000000000000000000000000000000000000000000000000027f7d0bdb92000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6951,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000cf64a18bc553eb5a8c97ced14799223d2e37e53d000000000000000000000000000000000000000000000000a81ed803516f8775,,,1,true -6952,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be13517a2b520b2449068d2ec45280992b04047b000000000000000000000000be13517a2b520b2449068d2ec45280992b04047b000000000000000000000000000000000000000000000000003f37cc711c78e300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6953,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a1be60a3dd728c15004344ace9039dae426a707b000000000000000000000000a1be60a3dd728c15004344ace9039dae426a707b00000000000000000000000000000000000000000000000000c3c5d5f6376d7000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5a8c6a35ba00a69fe63451d4ba267eea1c69d5f70f1659d7dc2b3884e44c5f59,2021-12-15 09:51:43.000 UTC,0,true -6954,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f54c655ac5f39b5f5d9e0f843d3150d9730eb33a000000000000000000000000f54c655ac5f39b5f5d9e0f843d3150d9730eb33a0000000000000000000000000000000000000000000000000a2874de7c7be64f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1cd6cd0b9a28eba0eb249794f1440bf64f35988cd0ddedfa94ecea721719f64a,2021-11-23 07:58:16.000 UTC,0,true -6956,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e6ec83200fa6f55a3ada624e074e599d74cffa86000000000000000000000000e6ec83200fa6f55a3ada624e074e599d74cffa8600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6958,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006df6f687918352b0a8548e6e4770ae97888c18d80000000000000000000000006df6f687918352b0a8548e6e4770ae97888c18d8000000000000000000000000000000000000000000000000001133316a91286f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6959,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003db3065790799c9d8e8c64a2b9148b81f2fa06540000000000000000000000003db3065790799c9d8e8c64a2b9148b81f2fa06540000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6962,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a78589943301b0ba9f41a24068cf46531feb37c3000000000000000000000000a78589943301b0ba9f41a24068cf46531feb37c3000000000000000000000000000000000000000000000000003efed42c129d8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6963,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000033469566baf1484f2e65b747a4eae1296d33db4000000000000000000000000033469566baf1484f2e65b747a4eae1296d33db4000000000000000000000000000000000000000000000000004293d094d5213500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6965,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f9976003c160d52905f143cda321ad4007dbb730000000000000000000000007f9976003c160d52905f143cda321ad4007dbb73000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6966,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000070c2fd9fe3d7c927a90b3e28d561d30c6412384800000000000000000000000070c2fd9fe3d7c927a90b3e28d561d30c64123848000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6967,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa1ac469e3868e8852d396d901e4adeeec6560c8000000000000000000000000aa1ac469e3868e8852d396d901e4adeeec6560c800000000000000000000000000000000000000000000000000188c3d9634eb8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6968,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000075d2bfe4eb037c00cb6797ce803ef6b22e13485d00000000000000000000000075d2bfe4eb037c00cb6797ce803ef6b22e13485d000000000000000000000000000000000000000000000000009d11b489df795300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6969,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ae1254db23febf6b70d911ed68051011cf974f00000000000000000000000006ae1254db23febf6b70d911ed68051011cf974f0000000000000000000000000000000000000000000000000010a741a4627800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x98329802bae06e23ca6dd8af45f717b8f8a385f2d7340a2e78d5c1439b8bb361,2022-04-21 09:24:56.000 UTC,0,true -6971,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004f7028fc52f77cb3a17f8fbca6291197a93be9ee0000000000000000000000004f7028fc52f77cb3a17f8fbca6291197a93be9ee00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6972,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d4880e59f3d4da1ea2202c71a7440ac3065c1a8d000000000000000000000000d4880e59f3d4da1ea2202c71a7440ac3065c1a8d00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6976,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea6887f2b7d9eac0149b13f1a61019cba4b8a512000000000000000000000000ea6887f2b7d9eac0149b13f1a61019cba4b8a51200000000000000000000000000000000000000000000000000193bdc8f3c7ac800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6979,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a6edb0a8dec9e7dc90568d3bfe21ecfc7aacf974000000000000000000000000a6edb0a8dec9e7dc90568d3bfe21ecfc7aacf974000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6980,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3f09b35627af530077582052bffadd545123d39000000000000000000000000a3f09b35627af530077582052bffadd545123d39000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6981,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fa308d5c5ff97708bf1bd5775a46ccfbe5dd027d000000000000000000000000fa308d5c5ff97708bf1bd5775a46ccfbe5dd027d000000000000000000000000000000000000000000000000005acd2d4b7f2f0d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6982,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000064df66e938ad5cbc8f0de19684ab3e3af958d42400000000000000000000000064df66e938ad5cbc8f0de19684ab3e3af958d424000000000000000000000000000000000000000000000000001f0a0ffb20100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6984,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b3d0d1322c8f24ce8d449514e2c9e95acbef9e38000000000000000000000000b3d0d1322c8f24ce8d449514e2c9e95acbef9e38000000000000000000000000000000000000000000000000000c1448303c800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6985,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e1bc356915a235f748ae37a27a170ffecbc32474000000000000000000000000e1bc356915a235f748ae37a27a170ffecbc32474000000000000000000000000000000000000000000000000001629e6c5c0d65f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6986,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b7f95b574bfcbe1a7d809ff628b5514ba8a1ba87000000000000000000000000b7f95b574bfcbe1a7d809ff628b5514ba8a1ba870000000000000000000000000000000000000000000000000058d15e1762800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6987,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ef15bcedc4886379fbbf27e5f4cd40228cf52ca0000000000000000000000003ef15bcedc4886379fbbf27e5f4cd40228cf52ca0000000000000000000000000000000000000000000000000014d797c6d4018500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6988,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001cd6d041d8881049488c0cd0d83637404abc433c0000000000000000000000001cd6d041d8881049488c0cd0d83637404abc433c000000000000000000000000000000000000000000000000005543df729c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6990,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000fdddd15ced3b169ac8496ecfad78645c4ca27370000000000000000000000000fdddd15ced3b169ac8496ecfad78645c4ca2737000000000000000000000000000000000000000000000000007ee78a0be8366b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6991,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000678a3d4ce40e13ab864862db6728e38481f83865000000000000000000000000678a3d4ce40e13ab864862db6728e38481f83865000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6993,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c16ea242b5b063d7840d99be1c08088a63070280000000000000000000000003c16ea242b5b063d7840d99be1c08088a63070280000000000000000000000000000000000000000000000000009db6a87ff570a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6994,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000335396fc4c0ae063015af959c6815387e529fad4000000000000000000000000335396fc4c0ae063015af959c6815387e529fad40000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6995,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047f8f31858cc5e2325241451f7166f625d2ea0db00000000000000000000000047f8f31858cc5e2325241451f7166f625d2ea0db000000000000000000000000000000000000000000000000005b65568c96a4dd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6996,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e1ddafb6de9c840c1d769c9a51ca27e65fbbb4df000000000000000000000000e1ddafb6de9c840c1d769c9a51ca27e65fbbb4df0000000000000000000000000000000000000000000000000099033cd65e2b7300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -6997,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e42980f6b1c3c3c51833393d3e77082201644490000000000000000000000004e42980f6b1c3c3c51833393d3e7708220164449000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x6f52ca45ad92cca6c2c1fac04ad1a141ace76ca0f20a673b12736a47a6cb4b12,2021-12-01 11:44:14.000 UTC,0,true -6999,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ad592ca81266c661717d23d3faa0077f2993bca0000000000000000000000005ad592ca81266c661717d23d3faa0077f2993bca0000000000000000000000000000000000000000000000000002c8e3b880c70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7000,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9a4b682d3a0134e9886ca4acbe02bcc879447fa000000000000000000000000f9a4b682d3a0134e9886ca4acbe02bcc879447fa000000000000000000000000000000000000000000000000003080a0d0b6dc4d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7004,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000034a8166ce58363440aba38f0bbcddfb99b282c5500000000000000000000000034a8166ce58363440aba38f0bbcddfb99b282c550000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7005,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ce5d510ca05f897cd489e03276ce680344005bcd000000000000000000000000ce5d510ca05f897cd489e03276ce680344005bcd00000000000000000000000000000000000000000000000001540b4286588eed00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7008,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000160da53315b0b84317c97b0e400a74f0d0e5476c000000000000000000000000160da53315b0b84317c97b0e400a74f0d0e5476c000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7009,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006db5f521fd5117733f774dd9ee0325ccbf8c1d190000000000000000000000006db5f521fd5117733f774dd9ee0325ccbf8c1d19000000000000000000000000000000000000000000000000004a9b638448800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7011,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001db2c763aa6a2951de67f63003c126dede0d56050000000000000000000000001db2c763aa6a2951de67f63003c126dede0d56050000000000000000000000000000000000000000000000000002525078dc830000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7012,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6091be65c67346421fad6b626dc4bedd6f1f21e000000000000000000000000c6091be65c67346421fad6b626dc4bedd6f1f21e0000000000000000000000000000000000000000000000000002075ce615df0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7013,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d8586fa8844e678e257cfbed87bd84df2dc49602000000000000000000000000d8586fa8844e678e257cfbed87bd84df2dc496020000000000000000000000000000000000000000000000000007e2d1050b060f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7014,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd0ce2f515c2c0a3e553014ac1ed44843b5515c1000000000000000000000000bd0ce2f515c2c0a3e553014ac1ed44843b5515c1000000000000000000000000000000000000000000000000009d2803a7744f1b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7015,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005e05d64b0e6226d31845b01458e405bccaec5b5f0000000000000000000000005e05d64b0e6226d31845b01458e405bccaec5b5f00000000000000000000000000000000000000000000000000017902d418c80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7016,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002bfc44dbbccd59e3cbd85ae8c019ff381e5601ef0000000000000000000000002bfc44dbbccd59e3cbd85ae8c019ff381e5601ef0000000000000000000000000000000000000000000000000001a6e07a55340000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7017,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fde131f300b1b4d142860c919e4f426c2c521389000000000000000000000000fde131f300b1b4d142860c919e4f426c2c5213890000000000000000000000000000000000000000000000000001a6e07a55340000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7018,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ffc746c826cd4386c722773b7bb859d49f5edf30000000000000000000000007ffc746c826cd4386c722773b7bb859d49f5edf30000000000000000000000000000000000000000000000000041a9716845dc0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7019,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a9e34dbebb9b4f900ac0e763042ea42ea16016e8000000000000000000000000a9e34dbebb9b4f900ac0e763042ea42ea16016e80000000000000000000000000000000000000000000000000001ad0793c1360000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7021,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055e6569cf39fba89d321055eb3706fabb715337700000000000000000000000055e6569cf39fba89d321055eb3706fabb7153377000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7022,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b39722c490406f5ee58f347d962c2e1db91da570000000000000000000000002b39722c490406f5ee58f347d962c2e1db91da570000000000000000000000000000000000000000000000000005fd1512ce265c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7023,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005ebb8027fa5a9faaa289cda2e6ffbdee82cd71000000000000000000000000005ebb8027fa5a9faaa289cda2e6ffbdee82cd710000000000000000000000000000000000000000000000000009a40ffab0f118500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7025,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007af8c067719f38f324ecd3fa99431178160ff0230000000000000000000000007af8c067719f38f324ecd3fa99431178160ff0230000000000000000000000000000000000000000000000000001cca1dc26290000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7026,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009531246b6beae6ae8f778aa576c477dd214a7c530000000000000000000000009531246b6beae6ae8f778aa576c477dd214a7c5300000000000000000000000000000000000000000000000000000e4790a1f50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7027,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001778a453a689e347e623208e46d7365fed31a6fd0000000000000000000000001778a453a689e347e623208e46d7365fed31a6fd000000000000000000000000000000000000000000000000000008f7407edc0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7028,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b2c36e80f45ab84b11cec92e468cffd79d510bf0000000000000000000000002b2c36e80f45ab84b11cec92e468cffd79d510bf000000000000000000000000000000000000000000000000000178bb3bab250000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7029,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e025f492e4e635126861039783d960c575905f43000000000000000000000000e025f492e4e635126861039783d960c575905f4300000000000000000000000000000000000000000000000000957ead4d10083f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7030,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f8f6fb663954aa3229c366307aad2fa4190464aa000000000000000000000000f8f6fb663954aa3229c366307aad2fa4190464aa0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7031,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000090fba8deb4857adb55f5f211cb7c8ab6efd8b05900000000000000000000000090fba8deb4857adb55f5f211cb7c8ab6efd8b05900000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7032,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f1a0d5de668ddb632145df59baa81cbbf5767b60000000000000000000000008f1a0d5de668ddb632145df59baa81cbbf5767b600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7033,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c953b9ca9cf6dd7a1cb526537f8f7f8d61a01ff0000000000000000000000008c953b9ca9cf6dd7a1cb526537f8f7f8d61a01ff00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7034,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b30367238ac1da91b0cf31bb4b0b4efb777488e5000000000000000000000000b30367238ac1da91b0cf31bb4b0b4efb777488e5000000000000000000000000000000000000000000000000005543df729c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7035,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009ff598ed5e0a5c1790bfe210d0a61d077f6e83ab0000000000000000000000009ff598ed5e0a5c1790bfe210d0a61d077f6e83ab00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7036,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009453620d6e882a7018a3ee9a4ec2b1fca5d0205c0000000000000000000000009453620d6e882a7018a3ee9a4ec2b1fca5d0205c000000000000000000000000000000000000000000000000008cf5bc9790ca3900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7037,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000336bdf7a8dc958ca317197b764a29eae90c14f7d000000000000000000000000336bdf7a8dc958ca317197b764a29eae90c14f7d000000000000000000000000000000000000000000000000005ac3a30356e6a700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7040,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000dea777f50b238bdb932cde9453ed8a8c2ce34e17000000000000000000000000dea777f50b238bdb932cde9453ed8a8c2ce34e170000000000000000000000000000000000000000000000008af3e5acfad6006800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7041,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000767a60f295aedd958932088f9cd6a4951d8739b6000000000000000000000000767a60f295aedd958932088f9cd6a4951d8739b6000000000000000000000000000000000000000000000000001ff973cafa800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x3186d9e91f3dfd4c6ca5bc5cf928b74bb590ae9a39c28683f6c6f00d9ac09bcd,2022-03-01 09:35:19.000 UTC,0,true -7042,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8c3eb10a717183b6c23bf785bedc147f5296b55000000000000000000000000e8c3eb10a717183b6c23bf785bedc147f5296b55000000000000000000000000000000000000000000000000008fe731254cd5a900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7045,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001085498ad079c5e2ead3a2b4262aa164194c36b00000000000000000000000001085498ad079c5e2ead3a2b4262aa164194c36b00000000000000000000000000000000000000000000000000051f06e54c05ed100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7047,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000079b1a68f67de6625433e79665fd00e2ffc7e02c100000000000000000000000079b1a68f67de6625433e79665fd00e2ffc7e02c100000000000000000000000000000000000000000000000001388244fc0fb70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7049,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b30367238ac1da91b0cf31bb4b0b4efb777488e5000000000000000000000000b30367238ac1da91b0cf31bb4b0b4efb777488e5000000000000000000000000000000000000000000000000004a9b638448800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7050,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a33a46408c871c0c4d172e8036dfcdcb19e6f226000000000000000000000000a33a46408c871c0c4d172e8036dfcdcb19e6f226000000000000000000000000000000000000000000000000005824934da52a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7051,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000448e1bee08d6fab78160762beb05a3672ddea0b2000000000000000000000000448e1bee08d6fab78160762beb05a3672ddea0b200000000000000000000000000000000000000000000000002c5bf8e1616543900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7052,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b03ec0b8ef92c5f7ee5c95c442850eeb0b3cc358000000000000000000000000b03ec0b8ef92c5f7ee5c95c442850eeb0b3cc358000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7053,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000028011e8364199981caf8c2bad99f9462faa0141700000000000000000000000028011e8364199981caf8c2bad99f9462faa0141700000000000000000000000000000000000000000000000000471b6843f2f94500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7054,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f619fc95d58b25b708f36a6452760314bf8bb173000000000000000000000000f619fc95d58b25b708f36a6452760314bf8bb173000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7055,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000073c17da35fb211b7c0eef1b474b560b01d9a0a4c00000000000000000000000073c17da35fb211b7c0eef1b474b560b01d9a0a4c0000000000000000000000000000000000000000000000000002c3b3d3f77b9f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7056,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000618aa9d95c4119d623be6a40f6b7f543d12e97e8000000000000000000000000618aa9d95c4119d623be6a40f6b7f543d12e97e80000000000000000000000000000000000000000000000000048d3d165e7bc7400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7057,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005f33734d47761b1578f20808714adf2a669d23a80000000000000000000000005f33734d47761b1578f20808714adf2a669d23a8000000000000000000000000000000000000000000000000004fefa17b72400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7058,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc41150bbe0c60c40473c2864f0fed89732d311c000000000000000000000000bc41150bbe0c60c40473c2864f0fed89732d311c000000000000000000000000000000000000000000000000023595f03635285f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7059,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fee6f809f099b91639a7070b30aaaf3f45d313ca000000000000000000000000fee6f809f099b91639a7070b30aaaf3f45d313ca000000000000000000000000000000000000000000000000000a9d8dbd2e8a4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7060,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9a393258d34d4b26bd456d727117900ef38f37c000000000000000000000000e9a393258d34d4b26bd456d727117900ef38f37c0000000000000000000000000000000000000000000000000008e0cd9f2c5d0f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7062,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000011bccb4b866b7a0c46d488d1531f80b9253b7bd200000000000000000000000011bccb4b866b7a0c46d488d1531f80b9253b7bd20000000000000000000000000000000000000000000000000012eaf211246fcb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7063,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000001be549fa377710b9e59d57bbdf593ce1e379ca0000000000000000000000000000000000000000000000006124fee993bc0000,,,1,true -7065,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f12bb7b027e51baa96dd0f4c78e2bdf2b24da26a000000000000000000000000f12bb7b027e51baa96dd0f4c78e2bdf2b24da26a000000000000000000000000000000000000000000000000001b0ca02bffdb8100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7068,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000573c78a4a1fe8e77ffd340fb5e42c8b80d6e6009000000000000000000000000000000000000000000000000ea9ab5eafbc77b66,,,1,true -7069,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002746976a56c7778a55ad115fc7c1c87e02d357790000000000000000000000002746976a56c7778a55ad115fc7c1c87e02d35779000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7071,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009cbf67c82ba7b1ebf45731c360582de85a5e9dcb0000000000000000000000009cbf67c82ba7b1ebf45731c360582de85a5e9dcb000000000000000000000000000000000000000000000000001258caf0404f9000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7072,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000068a6dde19e0f736f0eba178807c1cb8e8e7782d600000000000000000000000068a6dde19e0f736f0eba178807c1cb8e8e7782d60000000000000000000000000000000000000000000000000092073f315d620100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7073,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c94fa7be6e276d699bcd1587a172bf5f32e7657a000000000000000000000000c94fa7be6e276d699bcd1587a172bf5f32e7657a0000000000000000000000000000000000000000000000000052d123f99ab50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7074,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d25e30c27841514e0bf05d7f6f0d0f6d87dde740000000000000000000000002d25e30c27841514e0bf05d7f6f0d0f6d87dde74000000000000000000000000000000000000000000000000006405fb87107b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7075,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006fe1911c5bacbc593e558ac33212176f1c12b6590000000000000000000000006fe1911c5bacbc593e558ac33212176f1c12b6590000000000000000000000000000000000000000000000000064590b5e42960000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7076,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa2d70ff6fe9ef712f21e182c4590a03a5d9f01b000000000000000000000000aa2d70ff6fe9ef712f21e182c4590a03a5d9f01b0000000000000000000000000000000000000000000000000063e1e7b7d1580000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7077,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c352439a276f26684195a49afeb116e99059fd64000000000000000000000000c352439a276f26684195a49afeb116e99059fd6400000000000000000000000000000000000000000000000000641900042fc70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7078,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004cfef319625be2d783978a554b2e4a340e64e3a10000000000000000000000004cfef319625be2d783978a554b2e4a340e64e3a100000000000000000000000000000000000000000000000000641900042fc70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7079,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e3625b95ffbc956a2ae5573fc446c1a04aa08de0000000000000000000000004e3625b95ffbc956a2ae5573fc446c1a04aa08de00000000000000000000000000000000000000000000000000641900042fc70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7080,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b404c6e33fb20f5e576a5530afdbc846edc002f0000000000000000000000002b404c6e33fb20f5e576a5530afdbc846edc002f0000000000000000000000000000000000000000000000000064c47002b7160000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7081,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e2ff704732987e191cf37918bd32701ca2a5849c000000000000000000000000e2ff704732987e191cf37918bd32701ca2a5849c00000000000000000000000000000000000000000000000000640e17cb7bf20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7082,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000072bd148bbbb381fc0b248e832ad65db9b6ce20b600000000000000000000000072bd148bbbb381fc0b248e832ad65db9b6ce20b60000000000000000000000000000000000000000000000000063415ff1fdde0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7083,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000429f260fe1cdca577c7bd1f811e6931fd018dcd8000000000000000000000000429f260fe1cdca577c7bd1f811e6931fd018dcd800000000000000000000000000000000000000000000000000631459150a5b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7084,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003eeb932003862c0a12a7ace91d427dc254adf1570000000000000000000000003eeb932003862c0a12a7ace91d427dc254adf157000000000000000000000000000000000000000000000000006421ab7976840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7085,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f05ac484206b348b1fbb0094da58739a4ffdaab4000000000000000000000000f05ac484206b348b1fbb0094da58739a4ffdaab4000000000000000000000000000000000000000000000000001b9fce5c4fca0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7086,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009d9c1715c66cbee0566f509b8db7344095d936220000000000000000000000009d9c1715c66cbee0566f509b8db7344095d936220000000000000000000000000000000000000000000000000038257e49ea5e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7088,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e798fa801e25858176c9c3f8586078a681c29c60000000000000000000000000e798fa801e25858176c9c3f8586078a681c29c600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7089,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000052761ed75d8c14568a6c4b2964d7effed2fb15d400000000000000000000000052761ed75d8c14568a6c4b2964d7effed2fb15d40000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7092,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000073ce4c69c1e4b26b324f62da4a2439bae8957d3800000000000000000000000000000000000000000000000006f05b59d3b20000,,,1,true -7093,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006b62d985c806e447ebdc1ec9666c0c3462323c240000000000000000000000006b62d985c806e447ebdc1ec9666c0c3462323c24000000000000000000000000000000000000000000000000000e3706c714751b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7098,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004d8be8dcc4f78d4ecbdd77e260c113dbc17767a70000000000000000000000004d8be8dcc4f78d4ecbdd77e260c113dbc17767a7000000000000000000000000000000000000000000000000004a9b638448800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7099,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b918d6fab29ffcdbaa5d75e893c78bcdd1f08844000000000000000000000000b918d6fab29ffcdbaa5d75e893c78bcdd1f088440000000000000000000000000000000000000000000000000072be0627831cc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7101,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000334bc680d521d64f48bd09b10bd24e598dc0da0d000000000000000000000000334bc680d521d64f48bd09b10bd24e598dc0da0d00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7102,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000014987ba7b4dfdadbde5c4b43089e0c47110cbd970000000000000000000000000000000000000000000000002eef165df63b9e0a,,,1,true -7104,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006b1a2d3b948c1dd866c66c986e8637fb715df42a0000000000000000000000006b1a2d3b948c1dd866c66c986e8637fb715df42a00000000000000000000000000000000000000000000000000053c8c8a01dc9000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7105,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000b29607ded2d70f962406685bbb59dc7028dcc2b0000000000000000000000000b29607ded2d70f962406685bbb59dc7028dcc2b000000000000000000000000000000000000000000000000000636fa33c609d500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7106,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf8ed0fae2a2a37b131b7891d525bb992eefa744000000000000000000000000bf8ed0fae2a2a37b131b7891d525bb992eefa7440000000000000000000000000000000000000000000000000007ee5d4a2b1f9c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7111,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f08793c6e14d4d7f8baece3af748094aa2876858000000000000000000000000f08793c6e14d4d7f8baece3af748094aa28768580000000000000000000000000000000000000000000000000041b590c7ec497d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7112,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cabbb8207dd2bfaf3aa2b82ef62d710a2b168157000000000000000000000000cabbb8207dd2bfaf3aa2b82ef62d710a2b168157000000000000000000000000000000000000000000000000005fec5b60ef800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7113,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa1ebb3e079c6d7b516fc5beee64955c15e395f9000000000000000000000000aa1ebb3e079c6d7b516fc5beee64955c15e395f900000000000000000000000000000000000000000000000002de0591183342b000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7114,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2fd5efb267cd7f7a0ba2af47fbabf53443fb36f000000000000000000000000d2fd5efb267cd7f7a0ba2af47fbabf53443fb36f00000000000000000000000000000000000000000000000000044364c5bb000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7115,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000064a1ca8b4f19571ebc7d92ec8eb8d04fa4d63e1100000000000000000000000064a1ca8b4f19571ebc7d92ec8eb8d04fa4d63e1100000000000000000000000000000000000000000000000000101d87d0ba5fcd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7118,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000022bd8c9e6a8485965c39fc99e83ebfd9a5ed5cfb00000000000000000000000022bd8c9e6a8485965c39fc99e83ebfd9a5ed5cfb0000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7119,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005c8ea2b3fbd168a291c59576505fc853d24631200000000000000000000000005c8ea2b3fbd168a291c59576505fc853d24631200000000000000000000000000000000000000000000000000cccaa5e32f811400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7120,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000009adfe827e504a4cce2df5f5217f0749401e6c5b00000000000000000000000009adfe827e504a4cce2df5f5217f0749401e6c5b0000000000000000000000000000000000000000000000000147efdac48ea80700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7121,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000139f9efe062caaf5e967fb6eb9c569f017fe3520000000000000000000000000139f9efe062caaf5e967fb6eb9c569f017fe352000000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7122,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c4a65de4593362c91579c62d78e3285bdb9115a4000000000000000000000000c4a65de4593362c91579c62d78e3285bdb9115a400000000000000000000000000000000000000000000000000195334b9b7c64000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7123,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e97cf541ecf916cde6907addad109e4dc973b98f000000000000000000000000e97cf541ecf916cde6907addad109e4dc973b98f00000000000000000000000000000000000000000000000000681b0bce31f0fa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7124,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d64f4c6d227d1e2c8fc9f90e0dad742ef77e7810000000000000000000000000d64f4c6d227d1e2c8fc9f90e0dad742ef77e78100000000000000000000000000000000000000000000000000eff3ab213357c700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7125,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ffc6642e1fd5a2eb6853dcaac53bfef845d4daa8000000000000000000000000ffc6642e1fd5a2eb6853dcaac53bfef845d4daa800000000000000000000000000000000000000000000000000f8b0a10e47000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7130,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045b381a5b6ed9312926c1fac846696d33ae1c0db00000000000000000000000045b381a5b6ed9312926c1fac846696d33ae1c0db000000000000000000000000000000000000000000000000006e7d490483c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7131,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039eb58cd54b082766a99851706744f5b6724677c00000000000000000000000039eb58cd54b082766a99851706744f5b6724677c000000000000000000000000000000000000000000000000013b4cd34a49880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7132,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cd750f5854ece8252fb7d59d4a8be7864241d50d000000000000000000000000cd750f5854ece8252fb7d59d4a8be7864241d50d00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7133,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dca9c88434ba8a6a7e23f2fc3eba2527af825e46000000000000000000000000dca9c88434ba8a6a7e23f2fc3eba2527af825e460000000000000000000000000000000000000000000000000159adf74f1b5c5600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7134,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b72c1c7a79b19f927781edacd19e6a9512a3554c000000000000000000000000b72c1c7a79b19f927781edacd19e6a9512a3554c00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7135,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdc357a38867b05a3355c1345aba9bd3eb5cb935000000000000000000000000bdc357a38867b05a3355c1345aba9bd3eb5cb9350000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7136,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000a4127b892653964ffefc9fab4809eabacc5acc77000000000000000000000000a4127b892653964ffefc9fab4809eabacc5acc770000000000000000000000000000000000000000000000da1af5dece48c942fe00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7137,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbb04ee9ed69ae934db51165aa95492fdb018d76000000000000000000000000cbb04ee9ed69ae934db51165aa95492fdb018d76000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7139,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000ca1e244c6064993dc7cf86dd0b3375fcebd9d9e0000000000000000000000000ca1e244c6064993dc7cf86dd0b3375fcebd9d9e00000000000000000000000000000000000000000000000004563918244f4000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7140,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e07f06b27d051924d918d76bbf10973c9fd5e8be000000000000000000000000e07f06b27d051924d918d76bbf10973c9fd5e8be000000000000000000000000000000000000000000000000018aef634863737900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7143,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000882a75525c81e70f1c712e4446287e636958b4e4000000000000000000000000882a75525c81e70f1c712e4446287e636958b4e40000000000000000000000000000000000000000000000000001d5dabedca1f400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7145,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049b48f5d813301700e22e654501156fb2d58c89800000000000000000000000049b48f5d813301700e22e654501156fb2d58c89800000000000000000000000000000000000000000000000000849d237080a93b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7146,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f2ff8196b4ae960e3a1b533857f6f054bffa92fb000000000000000000000000f2ff8196b4ae960e3a1b533857f6f054bffa92fb00000000000000000000000000000000000000000000000001bb77495794ac5a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7147,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009730e08737d1a3d6364d76dafc4ab334d3f3430e0000000000000000000000009730e08737d1a3d6364d76dafc4ab334d3f3430e0000000000000000000000000000000000000000000000000020b44767ce6c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7148,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b30367238ac1da91b0cf31bb4b0b4efb777488e5000000000000000000000000b30367238ac1da91b0cf31bb4b0b4efb777488e5000000000000000000000000000000000000000000000000027f7d0bdb92000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7149,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009a0a84be18cbe5dbaba7cfbe58d180288c3a08da0000000000000000000000009a0a84be18cbe5dbaba7cfbe58d180288c3a08da00000000000000000000000000000000000000000000000002086dbecadc164800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7150,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000023c0bae29b2c92d90ebdf2b78ff86f1cb1bb667d00000000000000000000000023c0bae29b2c92d90ebdf2b78ff86f1cb1bb667d0000000000000000000000000000000000000000000000000b1a2bc2ec50000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7151,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc713097f3e7ffcbb4e60e4f4efee4a0ae8af234000000000000000000000000cc713097f3e7ffcbb4e60e4f4efee4a0ae8af234000000000000000000000000000000000000000000000000002511fd7970425500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7152,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc713097f3e7ffcbb4e60e4f4efee4a0ae8af234000000000000000000000000cc713097f3e7ffcbb4e60e4f4efee4a0ae8af2340000000000000000000000000000000000000000000000000073541deb5da5c100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7153,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b5bd472975dd3e335541d84c0790cb836a70b7a4000000000000000000000000b5bd472975dd3e335541d84c0790cb836a70b7a4000000000000000000000000000000000000000000000000001db2fc28be00c700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7154,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000bee62d215c1bfb54aaa6a554f398b33056a7f120000000000000000000000000bee62d215c1bfb54aaa6a554f398b33056a7f120000000000000000000000000000000000000000000000000002b62809c0d20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7155,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eab112b9a150ab981fb9680ed89f7caaa3a9b7c0000000000000000000000000eab112b9a150ab981fb9680ed89f7caaa3a9b7c0000000000000000000000000000000000000000000000000014393708307005f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7156,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002973c156d9e4019bcb7e65e371c4d2755bcb02e40000000000000000000000002973c156d9e4019bcb7e65e371c4d2755bcb02e400000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7158,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f63a25197ae0715db718e9ec2e96620b3ba3f940000000000000000000000007f63a25197ae0715db718e9ec2e96620b3ba3f940000000000000000000000000000000000000000000000000034948586ad000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7160,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7460912011c86fc57bc49096f209e482b50cb36000000000000000000000000f7460912011c86fc57bc49096f209e482b50cb3600000000000000000000000000000000000000000000000000049e57d635400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7161,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f6ffbf4428b1c4fe6ce1470d307a8ccac7887ce4000000000000000000000000f6ffbf4428b1c4fe6ce1470d307a8ccac7887ce40000000000000000000000000000000000000000000000000031bced02db000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7162,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f521800ca503321dbfd319d0cb22693fbafbb161000000000000000000000000f521800ca503321dbfd319d0cb22693fbafbb1610000000000000000000000000000000000000000000000000006dd28a1ee2f4600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7163,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000877a891877d98c611e16bcf53fe64fa6a36c1bbb000000000000000000000000877a891877d98c611e16bcf53fe64fa6a36c1bbb000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7165,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000005ed6a87517914eb67cce0930fed72e61ce2d64450000000000000000000000005ed6a87517914eb67cce0930fed72e61ce2d6445000000000000000000000000000000000000000000000000000000000098968000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7166,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000651291caa0ea151434c068a02d154f7a6e6fd139000000000000000000000000651291caa0ea151434c068a02d154f7a6e6fd139000000000000000000000000000000000000000000000000002aa1efb94e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7168,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9649565e81d86679c570dc774fa70772cb3814c000000000000000000000000f9649565e81d86679c570dc774fa70772cb3814c000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7169,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b23168f076caca9563d814acd3f584cfc1401fd0000000000000000000000000b23168f076caca9563d814acd3f584cfc1401fd00000000000000000000000000000000000000000000000000031bced02db000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7170,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d7ad1f4cf604ea8bf64d10d1d8e2d04076c49cb0000000000000000000000008d7ad1f4cf604ea8bf64d10d1d8e2d04076c49cb000000000000000000000000000000000000000000000000004406ed7f795b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7172,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f52157000356c034bba9e04707acf9a40ebd49a2000000000000000000000000f52157000356c034bba9e04707acf9a40ebd49a2000000000000000000000000000000000000000000000000012a5d84cea55a7f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7174,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000dc277d26a32808b9517ec5809164305f38ab2e30000000000000000000000000dc277d26a32808b9517ec5809164305f38ab2e3000000000000000000000000000000000000000000000000001f7dd87c6daa0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7175,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021606ee18fc1c9b398c25f56e98e6035ab43429900000000000000000000000021606ee18fc1c9b398c25f56e98e6035ab43429900000000000000000000000000000000000000000000000000080975a2e3d64700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7176,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b53547656127e8a43f686eeebf10d2c4229b3ec6000000000000000000000000b53547656127e8a43f686eeebf10d2c4229b3ec600000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7177,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000457787467c2f5600a7b70ac22cb27d206735bad0000000000000000000000000457787467c2f5600a7b70ac22cb27d206735bad0000000000000000000000000000000000000000000000000018649dfd2e6cb100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7179,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000063baa2dc5597bcce4bbbf60f27901d726c34436c00000000000000000000000063baa2dc5597bcce4bbbf60f27901d726c34436c000000000000000000000000000000000000000000000000001f23832a19010000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7182,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000b777aba39f4194f2f1f43b6e6432252b6976a990000000000000000000000000b777aba39f4194f2f1f43b6e6432252b6976a9900000000000000000000000000000000000000000000000000a3f0f5562e547800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7183,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000052704f183db6b8f526387dca0fb9f3ca911babc800000000000000000000000052704f183db6b8f526387dca0fb9f3ca911babc8000000000000000000000000000000000000000000000000001f74e56eb94a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7184,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a33a46408c871c0c4d172e8036dfcdcb19e6f226000000000000000000000000a33a46408c871c0c4d172e8036dfcdcb19e6f22600000000000000000000000000000000000000000000000000062db54b8b130000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7185,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d9d8d43edcd9817db8ba5c4779cf2f2b431e6955000000000000000000000000d9d8d43edcd9817db8ba5c4779cf2f2b431e6955000000000000000000000000000000000000000000000000000c780476f6dc4500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7186,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071cc92c87c43e38bf6039a70ca9fdc39515aace600000000000000000000000071cc92c87c43e38bf6039a70ca9fdc39515aace600000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7188,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017b8042e8254d262fbaa6851be938e94aaec9f0100000000000000000000000017b8042e8254d262fbaa6851be938e94aaec9f0100000000000000000000000000000000000000000000000001472eacccfb4f1100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x24fbca117442e2a0bd805ce5f690f34bb568d44c2b1e6cb42ba451b422c62efc,2022-04-29 10:17:47.000 UTC,0,true -7189,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b1eb054e725c69234b9c3ac321756dd3159201b0000000000000000000000000b1eb054e725c69234b9c3ac321756dd3159201b00000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7190,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b9557fc2dead39953982973df776734f469ef20b000000000000000000000000b9557fc2dead39953982973df776734f469ef20b0000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7192,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c83710dd670126ff42fcfb29a0a42114c8239eaa000000000000000000000000c83710dd670126ff42fcfb29a0a42114c8239eaa00000000000000000000000000000000000000000000000001d5d2c44a992b9300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7193,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000095e6ddd5d0483157731629acbaf4df02172c093900000000000000000000000095e6ddd5d0483157731629acbaf4df02172c09390000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7194,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a87470c769608bbde6df513a7d1730be3afb8371000000000000000000000000a87470c769608bbde6df513a7d1730be3afb837100000000000000000000000000000000000000000000000000a6be51f94913a100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7196,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000248f4e6c5dcd9ef1892704770a93373bbad93154000000000000000000000000248f4e6c5dcd9ef1892704770a93373bbad931540000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7198,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fbfbd5f3ba79c2ef8f121b871ac00ddd5bd19251000000000000000000000000fbfbd5f3ba79c2ef8f121b871ac00ddd5bd1925100000000000000000000000000000000000000000000000000ac2e9f5f8d340000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7200,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc078cb21b5772a12f1cff4e96eba3d13c4d390a000000000000000000000000bc078cb21b5772a12f1cff4e96eba3d13c4d390a0000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7201,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000069e1d848848c37d72526664535a6bf5a8bf8c63500000000000000000000000069e1d848848c37d72526664535a6bf5a8bf8c6350000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7202,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cebc634afdeb7b151c38561dddbb65d594e074e4000000000000000000000000cebc634afdeb7b151c38561dddbb65d594e074e400000000000000000000000000000000000000000000000000ae6b62cca5340000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7203,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099fbca51e564b974a573a3e49ffadecefe3fcbab00000000000000000000000099fbca51e564b974a573a3e49ffadecefe3fcbab00000000000000000000000000000000000000000000000000670758aa7c800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7205,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000326691f419883359a641ae9488042b1ebce7c9e0000000000000000000000000326691f419883359a641ae9488042b1ebce7c9e0000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7206,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000ee4a248cd7000bb93e60afbc9dcdce485b75fb30000000000000000000000000ee4a248cd7000bb93e60afbc9dcdce485b75fb30000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7207,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fff73f5a1f6c01902bde607ffcc9de8f0e64ea2c000000000000000000000000fff73f5a1f6c01902bde607ffcc9de8f0e64ea2c00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7208,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009caac316559a88a8dfa585e4b9ac9969248e2fd80000000000000000000000009caac316559a88a8dfa585e4b9ac9969248e2fd8000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7210,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa8e079c420d8b950129b5a007bd4374673cae65000000000000000000000000aa8e079c420d8b950129b5a007bd4374673cae65000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7211,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac273a987cd2f8dec4a0eb5be71029f7cb97b769000000000000000000000000ac273a987cd2f8dec4a0eb5be71029f7cb97b76900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7212,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f92d581df7f9396e014d481d44102227d90cd570000000000000000000000002f92d581df7f9396e014d481d44102227d90cd570000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7213,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008eb9cb5ab64d04f1b92dd0b548be4335f34419550000000000000000000000008eb9cb5ab64d04f1b92dd0b548be4335f34419550000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7214,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000259c84808553bb13458703882dd14a8a03639231000000000000000000000000259c84808553bb13458703882dd14a8a0363923100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7215,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000259c84808553bb13458703882dd14a8a03639231000000000000000000000000259c84808553bb13458703882dd14a8a0363923100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7216,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac273a987cd2f8dec4a0eb5be71029f7cb97b769000000000000000000000000ac273a987cd2f8dec4a0eb5be71029f7cb97b76900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7218,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099d218d6de7f4f0b3166c16d4efd46a19aa276a700000000000000000000000099d218d6de7f4f0b3166c16d4efd46a19aa276a7000000000000000000000000000000000000000000000000015e432ee4a0590000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7220,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008460328a53fd608713a12c2b3ea35124a077b9c00000000000000000000000008460328a53fd608713a12c2b3ea35124a077b9c0000000000000000000000000000000000000000000000000001f974bab669b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x659bc230587386912c40fb39a5f9c6c0fa0d6238aec64b0637717eddb37b857a,2022-08-27 06:30:24.000 UTC,0,true -7221,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f09ab3dac50e4f2e4dc2f5b9f4dbcd50c27341ed000000000000000000000000f09ab3dac50e4f2e4dc2f5b9f4dbcd50c27341ed00000000000000000000000000000000000000000000000000228ebe2b2312e600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7223,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047de76492cf9fc04a01dbe042c3b39d95709063900000000000000000000000047de76492cf9fc04a01dbe042c3b39d957090639000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7224,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de55ae6ea569f75c955e5f3d551b4682732d5b11000000000000000000000000de55ae6ea569f75c955e5f3d551b4682732d5b11000000000000000000000000000000000000000000000000001fd7e63654b00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7225,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000086250c2ca9aa91e66cf6ec2925278ce89b89fe1a00000000000000000000000086250c2ca9aa91e66cf6ec2925278ce89b89fe1a000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7226,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000024acce6cd49ab809deb477bfee50338554a6dbeb00000000000000000000000024acce6cd49ab809deb477bfee50338554a6dbeb000000000000000000000000000000000000000000000000005c5edcbc29000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7229,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000702f776f5943784c4a9040c886cac15a76d22729000000000000000000000000702f776f5943784c4a9040c886cac15a76d22729000000000000000000000000000000000000000000000000011c37937e08000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7230,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000036410ae136e07af5c99ccf97c8e9398558f82b5400000000000000000000000036410ae136e07af5c99ccf97c8e9398558f82b54000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7231,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000f80f38152c9e55ce951fd25bf8a0ac43e0fd29a0000000000000000000000000f80f38152c9e55ce951fd25bf8a0ac43e0fd29a0000000000000000000000000000000000000000000000000086c7ec2f7a958000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7232,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be7ae762dc142a1b4a56e36ed86dc90ba3484b44000000000000000000000000be7ae762dc142a1b4a56e36ed86dc90ba3484b4400000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7233,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ad0610250a14faa0cb46fd65a5e0f69613f2e623000000000000000000000000ad0610250a14faa0cb46fd65a5e0f69613f2e6230000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7234,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e4762e9ee58589b0f2cbc5fe2dec55e27086d6c0000000000000000000000004e4762e9ee58589b0f2cbc5fe2dec55e27086d6c00000000000000000000000000000000000000000000000000000a3b5840f40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7236,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017fcdf505d90821be2c1cc9defa930153e73e7a700000000000000000000000017fcdf505d90821be2c1cc9defa930153e73e7a700000000000000000000000000000000000000000000000000000b242ce6040000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7237,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001094bbe0bb8cbfa94d549df5ce122020f6add50a0000000000000000000000001094bbe0bb8cbfa94d549df5ce122020f6add50a0000000000000000000000000000000000000000000000000000143c7b58a40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7238,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000438bf64cf9c6c23c1b5263dc85100dd3b4fe801a000000000000000000000000438bf64cf9c6c23c1b5263dc85100dd3b4fe801a0000000000000000000000000000000000000000000000000000143c7b58a40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7239,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008ba2666ee8376a2134551c85e5415cb19c67f8fb0000000000000000000000008ba2666ee8376a2134551c85e5415cb19c67f8fb0000000000000000000000000000000000000000000000000000143c7b58a40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7240,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a6d4517c7a00089ee0ea54a6fffd59d4180ef800000000000000000000000001a6d4517c7a00089ee0ea54a6fffd59d4180ef800000000000000000000000000000000000000000000000000063648aa216748000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7241,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c4497fffdcfe9a5ce1de09c1b4b4623fd158c130000000000000000000000003c4497fffdcfe9a5ce1de09c1b4b4623fd158c130000000000000000000000000000000000000000000000000000143c7b58a40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7242,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c5bf796b9ce740d8f7132e5da6ab04aa76467e30000000000000000000000003c5bf796b9ce740d8f7132e5da6ab04aa76467e30000000000000000000000000000000000000000000000000000143c7b58a40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7244,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000088b1c5da745171d7fca547972d28fa7b0646870000000000000000000000000088b1c5da745171d7fca547972d28fa7b06468700000000000000000000000000000000000000000000000000001818c7d0cdd73800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7245,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008b34070951e16b87dce3d6421629dbf9a4a932610000000000000000000000008b34070951e16b87dce3d6421629dbf9a4a9326100000000000000000000000000000000000000000000000000001d54c9cb440000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7246,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000103324828119cce56ccb05208079b5462a5904d3000000000000000000000000103324828119cce56ccb05208079b5462a5904d300000000000000000000000000000000000000000000000000001d54c9cb440000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7247,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009f45e4a6564ac682461d6389aceb034277a224f80000000000000000000000009f45e4a6564ac682461d6389aceb034277a224f800000000000000000000000000000000000000000000000000001d54c9cb440000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7248,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fecdddff12ce2dff360fbc34235867d10212a9c2000000000000000000000000fecdddff12ce2dff360fbc34235867d10212a9c200000000000000000000000000000000000000000000000000001d54c9cb440000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7250,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b5901d9007c4b4a06151378276822e4bba8839af000000000000000000000000b5901d9007c4b4a06151378276822e4bba8839af00000000000000000000000000000000000000000000000000001d1a94a2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7251,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099738d3492513ac17750a235544eadadf753e11f00000000000000000000000099738d3492513ac17750a235544eadadf753e11f00000000000000000000000000000000000000000000000000001d1a94a2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7252,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fa4877ee2154d7b1c3119d15c6f6e12456c360ff000000000000000000000000fa4877ee2154d7b1c3119d15c6f6e12456c360ff00000000000000000000000000000000000000000000000000001d1a94a2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7253,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000082fe7f91b2a685457429a3a15a6153aed4a3d03000000000000000000000000082fe7f91b2a685457429a3a15a6153aed4a3d03000000000000000000000000000000000000000000000000000001d1a94a2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7254,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c3ea3451399f27851700d3be86fa131c7c319130000000000000000000000002c3ea3451399f27851700d3be86fa131c7c3191300000000000000000000000000000000000000000000000000001d1a94a2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7255,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd4fa60bfc1acf77ecc8cbe12cfd8eb99de3fca2000000000000000000000000bd4fa60bfc1acf77ecc8cbe12cfd8eb99de3fca200000000000000000000000000000000000000000000000000001d1a94a2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7256,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000054c98e9bfc80e365630fbc32c730fa14bcea643e00000000000000000000000054c98e9bfc80e365630fbc32c730fa14bcea643e00000000000000000000000000000000000000000000000000001d1a94a2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7257,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003198097c3afc75144d36f860b2d85a0c1798d1d20000000000000000000000003198097c3afc75144d36f860b2d85a0c1798d1d200000000000000000000000000000000000000000000000000bbfd820f1b5f3e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7259,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008dd42c713d06633f2bbcc9f7571d0cdb0a20777c0000000000000000000000008dd42c713d06633f2bbcc9f7571d0cdb0a20777c000000000000000000000000000000000000000000000000000388b973d44e8600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7260,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000decdae05f91aa2729e1347c09f5877c52c83fa56000000000000000000000000decdae05f91aa2729e1347c09f5877c52c83fa5600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7261,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001fca81a8257d78e5c3520e94dc34d6ee9f6937b40000000000000000000000001fca81a8257d78e5c3520e94dc34d6ee9f6937b40000000000000000000000000000000000000000000000000047bf0f79fe991600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7262,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000456ec7f61e3821bd589b0b12f86706f7ad489a6f000000000000000000000000456ec7f61e3821bd589b0b12f86706f7ad489a6f0000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7263,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1f69449730e70e4f85fa878307d73ed69bd9b16000000000000000000000000c1f69449730e70e4f85fa878307d73ed69bd9b160000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7264,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b00af2f40f5f581a78d93c803e7b90aebc21139b000000000000000000000000b00af2f40f5f581a78d93c803e7b90aebc21139b000000000000000000000000000000000000000000000000004952c17d1caf3a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7265,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002bdf1a400eb0b46bcc9919b712ef231126a9e37e0000000000000000000000002bdf1a400eb0b46bcc9919b712ef231126a9e37e0000000000000000000000000000000000000000000000000059a421015de11d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7266,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000096f0ce0e9cc9fdba644341d7c5fb5fad5eb8d3c400000000000000000000000096f0ce0e9cc9fdba644341d7c5fb5fad5eb8d3c400000000000000000000000000000000000000000000000000074464494a4cd600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7267,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000015a2adfe8e91a077198d0ecd2614b34c894f6af100000000000000000000000015a2adfe8e91a077198d0ecd2614b34c894f6af1000000000000000000000000000000000000000000000000003ff2e795f5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7268,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000038333730107be4c1ec0249326b5f5616c151330f00000000000000000000000038333730107be4c1ec0249326b5f5616c151330f0000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7269,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004d3d44ce35875cbe8f9b26b9456c658e8ff019590000000000000000000000004d3d44ce35875cbe8f9b26b9456c658e8ff01959000000000000000000000000000000000000000000000000001429cafd7e831e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7271,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000015635645dca64c04a239c453a10ec5cf4a7e2ad000000000000000000000000015635645dca64c04a239c453a10ec5cf4a7e2ad000000000000000000000000000000000000000000000000003e2c284391c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7274,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005b93f432baa191c5452d783e473f0b24a2f9631c0000000000000000000000005b93f432baa191c5452d783e473f0b24a2f9631c0000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7275,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000001923ccd42a7ef8cb10898bbdfb927a4db3eb36000000000000000000000000001923ccd42a7ef8cb10898bbdfb927a4db3eb36000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7276,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c137489cc02fe09e95d3f98f94d9ad832df67b70000000000000000000000003c137489cc02fe09e95d3f98f94d9ad832df67b700000000000000000000000000000000000000000000000001581cf87716812500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7277,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000edd6041b630ae6606296f7d656adae8f8f3037f0000000000000000000000000edd6041b630ae6606296f7d656adae8f8f3037f0000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7278,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a068efbc6e7debac6465204b64c2f4f29152364e000000000000000000000000a068efbc6e7debac6465204b64c2f4f29152364e00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7279,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005b4a625a5bda77d9fa03e3cfc0fa9bd1fd86d9760000000000000000000000005b4a625a5bda77d9fa03e3cfc0fa9bd1fd86d976000000000000000000000000000000000000000000000000001f3508b729a2c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7280,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b239f10fed415a29ebe3adb3d601d986e8fd3970000000000000000000000002b239f10fed415a29ebe3adb3d601d986e8fd3970000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7282,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ebbf71a8c4cf3788e7ae7a9427e9d3a23cdfa6e0000000000000000000000002ebbf71a8c4cf3788e7ae7a9427e9d3a23cdfa6e00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7283,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da346e4251ea91efed55dd01ee16f9a6d3e3d003000000000000000000000000da346e4251ea91efed55dd01ee16f9a6d3e3d00300000000000000000000000000000000000000000000000000dd206d2524e26100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7285,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007e58a6006c66838ef57afb04d9b9bbd1251cd84f0000000000000000000000007e58a6006c66838ef57afb04d9b9bbd1251cd84f000000000000000000000000000000000000000000000000013b3df1ef6a724000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7286,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008164e9c410588e97965169f07294e697438b87630000000000000000000000008164e9c410588e97965169f07294e697438b8763000000000000000000000000000000000000000000000000001b466b4b6cbcc200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7287,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000058e7e60534251b5ca9a5e48f3aad2621578c1be600000000000000000000000058e7e60534251b5ca9a5e48f3aad2621578c1be60000000000000000000000000000000000000000000000000020d73cd557030000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7288,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c415ec56185161339ed545428218426a36dfd44e000000000000000000000000c415ec56185161339ed545428218426a36dfd44e000000000000000000000000000000000000000000000000008d62056256b19f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7289,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cfe286b207d067d43733059c906197c611b9e64f000000000000000000000000cfe286b207d067d43733059c906197c611b9e64f00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7290,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e77c563c2b2f35cd5560828e197e4ec575566870000000000000000000000008e77c563c2b2f35cd5560828e197e4ec57556687000000000000000000000000000000000000000000000000008ca72b909cb64600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5d0df63db77e0067d4f05d69e0dcab8431c232a0f83ba72b4bacf4d41df03fcf,2022-05-29 04:47:41.000 UTC,0,true -7292,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e92d559f99857114c610abef473c31be38e4a08b000000000000000000000000e92d559f99857114c610abef473c31be38e4a08b00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7293,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000052a3a7d1d84772ba1384ee0385275fe16a8513cc00000000000000000000000052a3a7d1d84772ba1384ee0385275fe16a8513cc000000000000000000000000000000000000000000000000001119b4ae9b03d000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7294,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f367549ecda1259b749f25b624a98a39190891ab000000000000000000000000f367549ecda1259b749f25b624a98a39190891ab00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7296,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000886f136d699ebf04e06038183c445578e69acc6f000000000000000000000000886f136d699ebf04e06038183c445578e69acc6f000000000000000000000000000000000000000000000000005543df729c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7297,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8ccb62cc5adf1bf23612107e3782f4ced3b9ace000000000000000000000000b8ccb62cc5adf1bf23612107e3782f4ced3b9ace00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7298,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e0f695742052fd558ca627a4f93feb75fa526f84000000000000000000000000e0f695742052fd558ca627a4f93feb75fa526f84000000000000000000000000000000000000000000000000002d1e952ca5c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7300,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001679665f47ef61552abf555f9c34f826dc6852220000000000000000000000001679665f47ef61552abf555f9c34f826dc685222000000000000000000000000000000000000000000000000002802c58c79514000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7301,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a1135bce14a1bbe1084d45d35431cc4702e08234000000000000000000000000a1135bce14a1bbe1084d45d35431cc4702e08234000000000000000000000000000000000000000000000000000a46ca0670c95400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7302,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f0d3a10267ede65800ac01f6ee40c8353826521c000000000000000000000000f0d3a10267ede65800ac01f6ee40c8353826521c00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7303,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000639e2ea573935f7dc62effd6314269b82e6fa9a2000000000000000000000000639e2ea573935f7dc62effd6314269b82e6fa9a2000000000000000000000000000000000000000000000000009bc446b8e8c77200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7305,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045988c3d7a4ba9b93a0fef23476ad689df7eddb000000000000000000000000045988c3d7a4ba9b93a0fef23476ad689df7eddb000000000000000000000000000000000000000000000000001368685b133398000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7306,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001872c1bbb51c9d1129420f8baa4e6b7ddef79dfb0000000000000000000000001872c1bbb51c9d1129420f8baa4e6b7ddef79dfb000000000000000000000000000000000000000000000000015d1f7cddf1400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7307,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000536aec407c77142c4a19a4978e3d78c2beef81f6000000000000000000000000536aec407c77142c4a19a4978e3d78c2beef81f600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7309,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b860014d1891ed95bf2cde0d47e1b415194c6808000000000000000000000000b860014d1891ed95bf2cde0d47e1b415194c6808000000000000000000000000000000000000000000000000000268ee4cb72f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7310,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000060da990aebdd785f50ea3202ff05bff1d0963dbe0000000000000000000000000000000000000000000000006ada64be50311102,,,1,true -7312,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac57640958516bf078fd52dd48edf11fe418d7a8000000000000000000000000ac57640958516bf078fd52dd48edf11fe418d7a80000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7313,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007306509a72803bc7027d694c71f641943dde27d50000000000000000000000007306509a72803bc7027d694c71f641943dde27d5000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7314,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b8b2a20c8ad6c35eaf670cb8d856da62553bf010000000000000000000000001b8b2a20c8ad6c35eaf670cb8d856da62553bf0100000000000000000000000000000000000000000000000002ed37aee8ecd25c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xbd7461df248e52485296296afba396d6ed36225119b99de0bfbd8d4f4f8f486d,2022-02-17 07:15:23.000 UTC,0,true -7315,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a8008c0645bd21f5cef33d2d38b2ba2cc66aedf0000000000000000000000002a8008c0645bd21f5cef33d2d38b2ba2cc66aedf00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7318,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e9c94870b662ea4a7f66f95d517866407ed7b2b0000000000000000000000003e9c94870b662ea4a7f66f95d517866407ed7b2b000000000000000000000000000000000000000000000000007d44e2f5015d8200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7320,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000056479ace4817c0cd5601e6e70cd2b067275cd02400000000000000000000000056479ace4817c0cd5601e6e70cd2b067275cd02400000000000000000000000000000000000000000000000001364cceb90e4f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7321,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000328bef21aa2f291482250fdab11112a65366061c000000000000000000000000328bef21aa2f291482250fdab11112a65366061c00000000000000000000000000000000000000000000000000369c1af66a4b9500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7322,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000d726723da8c4e8ecabd559ea8c8ae22fb2331066000000000000000000000000d726723da8c4e8ecabd559ea8c8ae22fb2331066000000000000000000000000000000000000000000000000000000001349713d00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7323,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d726723da8c4e8ecabd559ea8c8ae22fb2331066000000000000000000000000d726723da8c4e8ecabd559ea8c8ae22fb23310660000000000000000000000000000000000000000000000000019427f6b585fc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7324,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d0675cd26b17a535fd4e5f21e735d4aabcd2ef30000000000000000000000006d0675cd26b17a535fd4e5f21e735d4aabcd2ef3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7325,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000025132de651514b6c417c734558694fc576294d0300000000000000000000000025132de651514b6c417c734558694fc576294d030000000000000000000000000000000000000000000000000732d2641409510400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7326,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009231cdc62e929be11297a1a733d5088c85b7600a0000000000000000000000009231cdc62e929be11297a1a733d5088c85b7600a000000000000000000000000000000000000000000000000013839052419924000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7327,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008451b41b170d8a510cc85c1cf3fd3c82a6b250880000000000000000000000008451b41b170d8a510cc85c1cf3fd3c82a6b2508800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7329,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da8f9e5595cf71006ab107c5609bc445a61172f9000000000000000000000000da8f9e5595cf71006ab107c5609bc445a61172f900000000000000000000000000000000000000000000000000a4ff5955bc09e100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7330,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061a4ab28b1b2024d2e087baba8fb7ac8630a9e0300000000000000000000000061a4ab28b1b2024d2e087baba8fb7ac8630a9e030000000000000000000000000000000000000000000000000016b96e7f2f4b9e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7331,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba6745edf8f0f3fab7a58d06a4165620adc0a075000000000000000000000000ba6745edf8f0f3fab7a58d06a4165620adc0a07500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7333,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f475cb1e982f794cde073ac6303fecbc1e95ca4f000000000000000000000000f475cb1e982f794cde073ac6303fecbc1e95ca4f00000000000000000000000000000000000000000000000000618c765856164000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7334,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000040d6f0f43a7e31e8e9bfc8c5f3b41b17e3509be200000000000000000000000040d6f0f43a7e31e8e9bfc8c5f3b41b17e3509be200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7337,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a524ee7f9137f208bcc0105f8864c9a5b674b1c0000000000000000000000001a524ee7f9137f208bcc0105f8864c9a5b674b1c00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7338,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000208f6a3551ef656325aaab922feb0a3b9888a05f000000000000000000000000208f6a3551ef656325aaab922feb0a3b9888a05f000000000000000000000000000000000000000000000000001db7f11d59450000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7339,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003188c2d18e3a0c972ec68d71787d724834c117610000000000000000000000003188c2d18e3a0c972ec68d71787d724834c1176100000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7340,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca1cd76832aa9a3ba08efe3625e80ab06217b9b6000000000000000000000000ca1cd76832aa9a3ba08efe3625e80ab06217b9b600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7341,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d24e9e6ff7915f9353e2614050528b776d120ee0000000000000000000000003d24e9e6ff7915f9353e2614050528b776d120ee000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7342,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003188c2d18e3a0c972ec68d71787d724834c117610000000000000000000000003188c2d18e3a0c972ec68d71787d724834c11761000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7343,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000398259c183a1ef12d8f3a900b734b7d2e064cb25000000000000000000000000398259c183a1ef12d8f3a900b734b7d2e064cb250000000000000000000000000000000000000000000000000084f0229ac5918000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7344,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000835f658ec7db45e18e6f7b78a08267d89ca8ac13000000000000000000000000835f658ec7db45e18e6f7b78a08267d89ca8ac13000000000000000000000000000000000000000000000000001bbabc726494c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7345,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca1cd76832aa9a3ba08efe3625e80ab06217b9b6000000000000000000000000ca1cd76832aa9a3ba08efe3625e80ab06217b9b600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7346,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000902f1f73320c1e25473a5694d954fd96def3afc8000000000000000000000000902f1f73320c1e25473a5694d954fd96def3afc8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7348,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca1cd76832aa9a3ba08efe3625e80ab06217b9b6000000000000000000000000ca1cd76832aa9a3ba08efe3625e80ab06217b9b600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7349,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cb185d133406df9ae3c1c4bcd73cda595383fff8000000000000000000000000cb185d133406df9ae3c1c4bcd73cda595383fff8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7350,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061413ac783df9ccc7690272112f95ff3991a290e00000000000000000000000061413ac783df9ccc7690272112f95ff3991a290e000000000000000000000000000000000000000000000000001f416fdfec220000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7351,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000084e2834759cc2e6957cb05bf46bbf4a6e71830df00000000000000000000000084e2834759cc2e6957cb05bf46bbf4a6e71830df0000000000000000000000000000000000000000000000000087ad1a6ab5e8c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7353,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d756d9f86ea38006b93007e9fe02fe5d697c1b00000000000000000000000007d756d9f86ea38006b93007e9fe02fe5d697c1b0000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7355,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000020ff0f42101e3638194ed6b442e13f8f5c32b93b00000000000000000000000020ff0f42101e3638194ed6b442e13f8f5c32b93b0000000000000000000000000000000000000000000000000129f5e89b13bf4c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7356,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000eaa5e98b286bd6e4cb13fca6665cb72e0fc93ffc000000000000000000000000eaa5e98b286bd6e4cb13fca6665cb72e0fc93ffc0000000000000000000000000000000000000000000000000000000007effe6f00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7357,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000492d61ab91dfbad8d376fca1fca57afc95a03551000000000000000000000000492d61ab91dfbad8d376fca1fca57afc95a035510000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7358,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009ec77f3922707e16d7dd12750707f0213175d81f0000000000000000000000009ec77f3922707e16d7dd12750707f0213175d81f0000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7359,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000595aedd52e88a1db7041b52b239d0980fd65d621000000000000000000000000595aedd52e88a1db7041b52b239d0980fd65d6210000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7360,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000085ce3c5a646ab55e5d1bd871cd8b4cde7d7cd16900000000000000000000000085ce3c5a646ab55e5d1bd871cd8b4cde7d7cd169000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7361,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d756d9f86ea38006b93007e9fe02fe5d697c1b00000000000000000000000007d756d9f86ea38006b93007e9fe02fe5d697c1b0000000000000000000000000000000000000000000000000003024a5fa0397d400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7362,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029a9842dd19e154656747ed5bd2f2a1efedc368900000000000000000000000029a9842dd19e154656747ed5bd2f2a1efedc368900000000000000000000000000000000000000000000000001548d75c2e589b000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7363,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003188c2d18e3a0c972ec68d71787d724834c117610000000000000000000000003188c2d18e3a0c972ec68d71787d724834c11761000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7365,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003188c2d18e3a0c972ec68d71787d724834c117610000000000000000000000003188c2d18e3a0c972ec68d71787d724834c11761000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7367,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000d540dfe0c05dd8f6b4f204b77b4fafd425a13dcc000000000000000000000000d540dfe0c05dd8f6b4f204b77b4fafd425a13dcc000000000000000000000000000000000000000000000000000000000bee973900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7368,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c0f690f3c1539d0951b1131275266a298002fee0000000000000000000000004c0f690f3c1539d0951b1131275266a298002fee00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7369,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c32ec10a689cbbcaef9f921ebaff01735b2ac690000000000000000000000008c32ec10a689cbbcaef9f921ebaff01735b2ac690000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7370,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fc95b6e4d11bd603bbe7833a53ad0317f8104de0000000000000000000000007fc95b6e4d11bd603bbe7833a53ad0317f8104de0000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7371,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd7b789e8815122be16ed246c32922b8e4bab0df000000000000000000000000dd7b789e8815122be16ed246c32922b8e4bab0df0000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7372,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000083666f9aaca4f97239a1770817c9c3b0dfa9cad000000000000000000000000083666f9aaca4f97239a1770817c9c3b0dfa9cad00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7373,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000981f4663eae659910357daae7b9c66d4261e5140000000000000000000000000981f4663eae659910357daae7b9c66d4261e514000000000000000000000000000000000000000000000000030e5281024d607f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7374,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a872b8ae4df25903fcb6f0c7d31a50b29b6d4a50000000000000000000000005a872b8ae4df25903fcb6f0c7d31a50b29b6d4a5000000000000000000000000000000000000000000000000000a7e841d85811c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7375,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001be79610b81df611526351968c2dbb81dc8d36dd0000000000000000000000001be79610b81df611526351968c2dbb81dc8d36dd000000000000000000000000000000000000000000000000000be8ff35ea631500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7377,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c64a53627910055b602571b6ea801e78fd52c737000000000000000000000000c64a53627910055b602571b6ea801e78fd52c737000000000000000000000000000000000000000000000000002892efb39b86fe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7382,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e3345fe824f8bdbdeea4610c6be5427282f7b890000000000000000000000006e3345fe824f8bdbdeea4610c6be5427282f7b8900000000000000000000000000000000000000000000000000670758aa7c800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7384,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ad755be12464f87c7ad1b10bdba9027f1519f750000000000000000000000006ad755be12464f87c7ad1b10bdba9027f1519f750000000000000000000000000000000000000000000000000001fee3518e613000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7385,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000026da4f747dd974f873be9422918faf1c3c0049d600000000000000000000000026da4f747dd974f873be9422918faf1c3c0049d6000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7386,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9179bf69d9162e09ac3ca5773481946e158cd62000000000000000000000000f9179bf69d9162e09ac3ca5773481946e158cd620000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7387,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000373b6285ee0b3053c73c55e0198960842c762eb8000000000000000000000000373b6285ee0b3053c73c55e0198960842c762eb800000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7388,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000059150b4dcb622f260ca0882aac487fe8701981e000000000000000000000000059150b4dcb622f260ca0882aac487fe8701981e000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7389,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000897b264586ca7dfe3ccd80505f8bc4844d058a38000000000000000000000000897b264586ca7dfe3ccd80505f8bc4844d058a38000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7390,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009f31009532a60709d19e7a2ac09fc2e013394e850000000000000000000000009f31009532a60709d19e7a2ac09fc2e013394e85000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7392,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000005aab0dc1817324363ff993d93616346f4f999d240000000000000000000000005aab0dc1817324363ff993d93616346f4f999d2400000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7393,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000044a4d81102e3cd02a9dfdf1404e8db09826a08ce00000000000000000000000044a4d81102e3cd02a9dfdf1404e8db09826a08ce000000000000000000000000000000000000000000000000002cedda1c3297c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7394,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dcc6fec3f5393c453b38e9af061fa5c4285cc363000000000000000000000000dcc6fec3f5393c453b38e9af061fa5c4285cc363000000000000000000000000000000000000000000000000000048351cb39e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7395,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000048511fa38fed232c7b1b6d40085f5e6ee5a485f200000000000000000000000048511fa38fed232c7b1b6d40085f5e6ee5a485f200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7396,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000005a10bb23698ee66aff584523a92c7a2f275c833e0000000000000000000000005a10bb23698ee66aff584523a92c7a2f275c833e00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7397,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c076a075f9a6a79288fb7c2ac782e6b3e9550b6b000000000000000000000000c076a075f9a6a79288fb7c2ac782e6b3e9550b6b000000000000000000000000000000000000000000000000000ad2b92e826f4100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7398,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001379b4508d23ee2f661aa49429c38f9cb0d8721f0000000000000000000000001379b4508d23ee2f661aa49429c38f9cb0d8721f00000000000000000000000000000000000000000000000000020645c2f88bc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7399,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004dc7e2e195f78a4fed312c3e6eb6a32eada3d8ce0000000000000000000000004dc7e2e195f78a4fed312c3e6eb6a32eada3d8ce00000000000000000000000000000000000000000000000000a07569135bd2dc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7400,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076e922dc720a166c61f2121ddd8f20fdf4a7629700000000000000000000000076e922dc720a166c61f2121ddd8f20fdf4a7629700000000000000000000000000000000000000000000000000ae56692486730000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7401,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf881401a8455249f030914c10b85378062ccdc7000000000000000000000000cf881401a8455249f030914c10b85378062ccdc700000000000000000000000000000000000000000000000000ae626fbef0d40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7402,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000007212c64b39a1e53a5e79ca826738d0d94e6a9c040000000000000000000000007212c64b39a1e53a5e79ca826738d0d94e6a9c0400000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7403,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006704b17cc393cabfa02c376772e613bba9130b820000000000000000000000006704b17cc393cabfa02c376772e613bba9130b8200000000000000000000000000000000000000000000000000ae44caa18b560000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7404,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000006d390a4f4151d8edc5de04b2087009691c7c1cb00000000000000000000000006d390a4f4151d8edc5de04b2087009691c7c1cb00000000000000000000000000000000000000000000000000ae56692486730000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x0cba90d703dad3e7989905a76e717e52b34cca8caea6618631810a6a210601d0,2022-08-29 07:53:30.000 UTC,0,true -7405,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000010bd0cffbdd0710d5d66f9260be7b4298246d9cc00000000000000000000000010bd0cffbdd0710d5d66f9260be7b4298246d9cc00000000000000000000000000000000000000000000000000addd08baa81d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7406,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006cb47dc2eec74215fea0ade40ffcd1c4dbf482190000000000000000000000006cb47dc2eec74215fea0ade40ffcd1c4dbf4821900000000000000000000000000000000000000000000000000ae83700179f60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7407,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ad1dd4267aa78ca8098d12d3a8a6f517c7d1fc69000000000000000000000000ad1dd4267aa78ca8098d12d3a8a6f517c7d1fc6900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7408,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dcc6fec3f5393c453b38e9af061fa5c4285cc363000000000000000000000000dcc6fec3f5393c453b38e9af061fa5c4285cc36300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7409,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001cd6219211c5bc7c14dd38e4095db4b2378687c90000000000000000000000001cd6219211c5bc7c14dd38e4095db4b2378687c90000000000000000000000000000000000000000000000000159a1d7760e155200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7410,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a62e8ebcbd4026f1cd1829d0617c15ceca863dcc000000000000000000000000a62e8ebcbd4026f1cd1829d0617c15ceca863dcc000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7411,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a258aca19ea33ea0c21f2d6de8e2a3093acfee40000000000000000000000003a258aca19ea33ea0c21f2d6de8e2a3093acfee400000000000000000000000000000000000000000000000000ade9e61e5b670000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7412,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f32c082a5f2ecbcec5c44416646fb44d16b76732000000000000000000000000f32c082a5f2ecbcec5c44416646fb44d16b76732000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7413,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c86b505cad0b39497a9d7420a582a277f7175398000000000000000000000000c86b505cad0b39497a9d7420a582a277f717539800000000000000000000000000000000000000000000000000adc0c99766ce0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7414,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000908dbd31ed8ac9ae70db0228c0ca0df59af8fb56000000000000000000000000908dbd31ed8ac9ae70db0228c0ca0df59af8fb5600000000000000000000000000000000000000000000000166913cbfe1e33c2000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7415,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009fbc667c68f448904962aad8eac3d5b7aa41af750000000000000000000000009fbc667c68f448904962aad8eac3d5b7aa41af7500000000000000000000000000000000000000000000000000adf17331eb980000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7416,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000190a8bed2282f4be3ca0263cfb1cc355760185a0000000000000000000000000190a8bed2282f4be3ca0263cfb1cc355760185a0000000000000000000000000000000000000000000000000021f965ffe54c2500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7417,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008dfff0573a6f0b40864f874d64122c4815e887dc0000000000000000000000008dfff0573a6f0b40864f874d64122c4815e887dc00000000000000000000000000000000000000000000000000ade68af937c30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7418,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c2db46798bebf1a0276b92e88c01f5ae80422784000000000000000000000000c2db46798bebf1a0276b92e88c01f5ae8042278400000000000000000000000000000000000000000000000000ade68af937c30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7419,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc2b5939cfbed9bdee0b7fc4d901e070a40713ab000000000000000000000000fc2b5939cfbed9bdee0b7fc4d901e070a40713ab00000000000000000000000000000000000000000000000000ae180b5d05760000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7420,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e4038e4de3d9f19f24af03a25ba3442606b03c44000000000000000000000000e4038e4de3d9f19f24af03a25ba3442606b03c4400000000000000000000000000000000000000000000000000ae5ecd015f8d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7421,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000026ed9f944312483a6daeab7fad4184a2ef7f9b2d00000000000000000000000026ed9f944312483a6daeab7fad4184a2ef7f9b2d00000000000000000000000000000000000000000000000000ae36cedc21800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7422,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001c12886bd97ee471c336275199c2f6f269bf4adc0000000000000000000000001c12886bd97ee471c336275199c2f6f269bf4adc00000000000000000000000000000000000000000000000000ae7ac48c33390000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7423,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f03cff0446685d04434c165d181b696ff36056f9000000000000000000000000f03cff0446685d04434c165d181b696ff36056f900000000000000000000000000000000000000000000000000ae189a8de0bc0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7424,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005515cc4193b736fb49f1afb0bb5f5c7ea92a3e110000000000000000000000005515cc4193b736fb49f1afb0bb5f5c7ea92a3e1100000000000000000000000000000000000000000000000000ae55d9f3ab2d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7425,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8b044956d8dd77340f71451c509c1d0fdd4d57a000000000000000000000000e8b044956d8dd77340f71451c509c1d0fdd4d57a00000000000000000000000000000000000000000000000000ae24a1284b1d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7426,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7acf65694d468de909d5acbc300fcab9c420a88000000000000000000000000f7acf65694d468de909d5acbc300fcab9c420a8800000000000000000000000000000000000000000000000000ae180b5d05760000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7427,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c21ae590cd1e60786a20df85215b0345ca5114ce000000000000000000000000c21ae590cd1e60786a20df85215b0345ca5114ce00000000000000000000000000000000000000000000000000adab40be6cc70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7428,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b2a2bf256b65d151bd1fa53d46317eba8a215c80000000000000000000000001b2a2bf256b65d151bd1fa53d46317eba8a215c800000000000000000000000000000000000000000000000000ad353b79b2150000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7429,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf8f553b1cebeb9a6fec9a9fae7486aeb68e2be6000000000000000000000000bf8f553b1cebeb9a6fec9a9fae7486aeb68e2be600000000000000000000000000000000000000000000000000addefde5a7920000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7430,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000ec0e504fb50a08ae7eebb3e35b097d3b4720bf10000000000000000000000000ec0e504fb50a08ae7eebb3e35b097d3b4720bf1000000000000000000000000000000000000000000000000015905133188f80b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7431,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000082ae721301dda20654fc1fb7a12c660c3bfb461200000000000000000000000082ae721301dda20654fc1fb7a12c660c3bfb46120000000000000000000000000000000000000000000000000de2973d1eaa4da900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7432,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c71f9673daa6d65dd389f5bc211295104e8a38d6000000000000000000000000c71f9673daa6d65dd389f5bc211295104e8a38d600000000000000000000000000000000000000000000000000ae4b80ebd29e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7433,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f6aab2339285450df21ca210ac3c2163e0f07a6e000000000000000000000000f6aab2339285450df21ca210ac3c2163e0f07a6e00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7434,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ad891e1f33e356ac839657fee01f324d75fe8141000000000000000000000000ad891e1f33e356ac839657fee01f324d75fe8141000000000000000000000000000000000000000000000000000344a034a0670d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7435,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005fa44a75162b58198e431a6b5b413b0197a1e0910000000000000000000000005fa44a75162b58198e431a6b5b413b0197a1e091000000000000000000000000000000000000000000000000015635dbfc0f5a2d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7436,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000efc621666b128e0c64fe5be97d2be33b701e3e64000000000000000000000000efc621666b128e0c64fe5be97d2be33b701e3e6400000000000000000000000000000000000000000000000000ae26ddebb8350000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7437,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0f076450b38cf7d41a2e92e95549cb02bcde08c000000000000000000000000c0f076450b38cf7d41a2e92e95549cb02bcde08c0000000000000000000000000000000000000000000000000003f1fd6743cf3800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7439,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ecbaa7d2f86f2d78c04f49986ec2c57938752a60000000000000000000000004ecbaa7d2f86f2d78c04f49986ec2c57938752a60000000000000000000000000000000000000000000000000043d525833e050000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7440,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001c600c447ae7602780a778ac9fac97672af2ec6f0000000000000000000000001c600c447ae7602780a778ac9fac97672af2ec6f00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7441,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e6c30e98c92f9e9d8b60ac043dc6efdaa909a380000000000000000000000002e6c30e98c92f9e9d8b60ac043dc6efdaa909a3800000000000000000000000000000000000000000000000000adc158c842140000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7442,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ff0e2ae0042972a39495cce0b669de7bdbe184f0000000000000000000000004ff0e2ae0042972a39495cce0b669de7bdbe184f00000000000000000000000000000000000000000000000000adc9bca51b2e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7443,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000815d234bdb6f1e818c6f80da33d2a285c588b730000000000000000000000000815d234bdb6f1e818c6f80da33d2a285c588b7300000000000000000000000000000000000000000000000000addacbf73b050000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7444,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b43d75915742a36307d071dd3fb33e27c08e0e7c000000000000000000000000b43d75915742a36307d071dd3fb33e27c08e0e7c00000000000000000000000000000000000000000000000000ae1c3d4b72030000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7445,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a6add0031caafa83311e47171a97a54e30f4cff0000000000000000000000004a6add0031caafa83311e47171a97a54e30f4cff00000000000000000000000000000000000000000000000000ae1a4820728e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7446,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000566f4717a58a0fbde8952454c715a8ec14ebe774000000000000000000000000566f4717a58a0fbde8952454c715a8ec14ebe77400000000000000000000000000000000000000000000000000ae26ddebb8350000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7447,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000089445c90cf4d3cfde19861a55691134e3b68abff00000000000000000000000089445c90cf4d3cfde19861a55691134e3b68abff00000000000000000000000000000000000000000000000000ae24e8c0b8c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7448,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ce59b53303e225dbf581b9eb8aa4ff1ee7f33601000000000000000000000000ce59b53303e225dbf581b9eb8aa4ff1ee7f3360100000000000000000000000000000000000000000000000000ad8c7d3f50bd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7449,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000d1b726adc4093c773b934d1223003a43fa0fc914000000000000000000000000d1b726adc4093c773b934d1223003a43fa0fc9140000000000000000000000000000000000000000000000000dcf2679cfee633200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7450,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ce9863e4ae1423d644b653db56d95a2017a374d8000000000000000000000000ce9863e4ae1423d644b653db56d95a2017a374d800000000000000000000000000000000000000000000000000ae50420b1a710000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7451,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000077e2938deee318ddcc320a66cc19c03db50979ce00000000000000000000000077e2938deee318ddcc320a66cc19c03db50979ce00000000000000000000000000000000000000000000000000ba6a198897faf500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7452,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000266b41a8c5368df78a5ba327df04c2df6fc5e020000000000000000000000000266b41a8c5368df78a5ba327df04c2df6fc5e0200000000000000000000000000000000000000000000000000ae0cdb8be3fe0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7453,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d51a0ac942ea64705b472fb09ab87b98d38d4cd0000000000000000000000008d51a0ac942ea64705b472fb09ab87b98d38d4cd00000000000000000000000000000000000000000000000000ae363fab463a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7454,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ab0a4be35d0a5541ac28b23b4de6d00f7ef8a5e0000000000000000000000007ab0a4be35d0a5541ac28b23b4de6d00f7ef8a5e00000000000000000000000000000000000000000000000000adcb6a37ad000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7455,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1e407b2f39cf536e29d6cd3ff23ee39444efd35000000000000000000000000f1e407b2f39cf536e29d6cd3ff23ee39444efd3500000000000000000000000000000000000000000000000000ad548e29a9650000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7456,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001fa280ed16803d8338010ddb496d9a4285d0fa0e0000000000000000000000001fa280ed16803d8338010ddb496d9a4285d0fa0e00000000000000000000000000000000000000000000000000a0c97fbcad5b7d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7457,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000064a1f73d89381b60de444a15af69caea1dafd25000000000000000000000000064a1f73d89381b60de444a15af69caea1dafd2500000000000000000000000000000000000000000000000000ad8a407be3a50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7458,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dbe9b37777d1d8a62b5d102e7e1bd98db67c3e25000000000000000000000000dbe9b37777d1d8a62b5d102e7e1bd98db67c3e2500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7459,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d8610fede62ce73f5badced1fa3b31064358d442000000000000000000000000d8610fede62ce73f5badced1fa3b31064358d44200000000000000000000000000000000000000000000000000ad76f46656b60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7460,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001555f1925e30242e6bea7c61535ca37c5b5296e70000000000000000000000001555f1925e30242e6bea7c61535ca37c5b5296e700000000000000000000000000000000000000000000000000ad76f46656b60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7461,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000075b79f415445ad96c502cc40a3207d784aa253d000000000000000000000000075b79f415445ad96c502cc40a3207d784aa253d00000000000000000000000000000000000000000000000000a658094349467d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7462,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000031e5910ab03575cddf4a8c5e960af53ae8644ea000000000000000000000000031e5910ab03575cddf4a8c5e960af53ae8644ea000000000000000000000000000000000000000000000000000ad3c80f4d4a30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7464,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c11c53143696077d3bbd52d5a229e619069be1c7000000000000000000000000c11c53143696077d3bbd52d5a229e619069be1c700000000000000000000000000000000000000000000000000ade4dd66a5f10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7465,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000074ef14b3dd4df02cc46a2c0794fb23e63d61a2e000000000000000000000000074ef14b3dd4df02cc46a2c0794fb23e63d61a2e000000000000000000000000000000000000000000000000000adcbb1d01aa30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7466,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000564473919343604508a0a629de4358f05b6217e3000000000000000000000000564473919343604508a0a629de4358f05b6217e300000000000000000000000000000000000000000000000000adcbb1d01aa30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7467,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a258434cbb2ede8d85fc9793f86c616236ee00db000000000000000000000000a258434cbb2ede8d85fc9793f86c616236ee00db00000000000000000000000000000000000000000000000000adcbb1d01aa30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7468,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000036d00e21a271287f3ba0905f59fdc2954613a92000000000000000000000000036d00e21a271287f3ba0905f59fdc2954613a9200000000000000000000000000000000000000000000000000ad7a4f8b7a5a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7469,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004f8c2d3c16f7e6d8c34f8e152c15a8689d1296cd0000000000000000000000004f8c2d3c16f7e6d8c34f8e152c15a8689d1296cd00000000000000000000000000000000000000000000000000ad60059338800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7470,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7cbd7e623a1622cc16a252e796710c6073a1489000000000000000000000000d7cbd7e623a1622cc16a252e796710c6073a148900000000000000000000000000000000000000000000000000add3867c18770000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7471,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000051d03118eb9206f5118372ca58ec7397e54655ed00000000000000000000000051d03118eb9206f5118372ca58ec7397e54655ed00000000000000000000000000000000000000000000000000add3867c18770000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7472,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001fa280ed16803d8338010ddb496d9a4285d0fa0e0000000000000000000000001fa280ed16803d8338010ddb496d9a4285d0fa0e000000000000000000000000000000000000000000000000001dc3ce3c689ab400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7474,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f426fadc9ae9ba557887b706e391d766df0f0fa5000000000000000000000000f426fadc9ae9ba557887b706e391d766df0f0fa500000000000000000000000000000000000000000000000000ad4ef64118a90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7475,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008aea5dea3876e506eae703509ef214becff891df0000000000000000000000008aea5dea3876e506eae703509ef214becff891df00000000000000000000000000000000000000000000000000adc3065ad3e60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7476,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3320052a474497938b9acfb3615918767257758000000000000000000000000f3320052a474497938b9acfb361591876725775800000000000000000000000000000000000000000000000000addd505315c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7477,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d72895f98c83d7528b05329c75b463dc511e22a4000000000000000000000000d72895f98c83d7528b05329c75b463dc511e22a400000000000000000000000000000000000000000000000000adff6ef7556e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7479,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f00ff423a370e6cbbdd08768fc5bf39635f22352000000000000000000000000f00ff423a370e6cbbdd08768fc5bf39635f2235200000000000000000000000000000000000000000000000000ae301891da380000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7481,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000315ff0594cdc932fb91ccdfab5b713d3f86b9b0a000000000000000000000000315ff0594cdc932fb91ccdfab5b713d3f86b9b0a00000000000000000000000000000000000000000000000000ae233b2e26ee0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7482,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005668a0a0a359e17e2bb27ac3978400e67fa09c2a0000000000000000000000005668a0a0a359e17e2bb27ac3978400e67fa09c2a00000000000000000000000000000000000000000000000000ae8bd3de53100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7483,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000f6e7aad312ec5b59a360091eafb4e2db2be0ce02000000000000000000000000f6e7aad312ec5b59a360091eafb4e2db2be0ce020000000000000000000000000000000000000000000000000dcf877b646fe8a300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7484,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007c1df74089df99917816cc2ada2ac3f817520a470000000000000000000000007c1df74089df99917816cc2ada2ac3f817520a4700000000000000000000000000000000000000000000000000ae83700179f60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7485,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d13acab6a8e805e1c9d6221cfaa4f07f4e947d0c000000000000000000000000d13acab6a8e805e1c9d6221cfaa4f07f4e947d0c00000000000000000000000000000000000000000000000000aedd7dbb60fc0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7486,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b65deb1b5db4699193006f90301f01d3aa62f710000000000000000000000002b65deb1b5db4699193006f90301f01d3aa62f7100000000000000000000000000000000000000000000000000ae894f8278550000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7487,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000092f209f5c4ba44273f692f3776e5c2764386c81800000000000000000000000092f209f5c4ba44273f692f3776e5c2764386c81800000000000000000000000000000000000000000000000000ae12bb0ce25d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7488,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000003dcb335bb0c288ac15a1bca6002fc074221b1fc00000000000000000000000003dcb335bb0c288ac15a1bca6002fc074221b1fc00000000000000000000000000000000000000000000000000dcb8bddfe72a9df00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7489,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000063ee5872e8549acb99f7b24508d5fee5f3ca5ef000000000000000000000000063ee5872e8549acb99f7b24508d5fee5f3ca5ef000000000000000000000000000000000000000000000000000ae6c3995ee1d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7490,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000459ce113d1a1cbf4fbf08e951a7336518f6d02d5000000000000000000000000459ce113d1a1cbf4fbf08e951a7336518f6d02d500000000000000000000000000000000000000000000000000ae6c3995ee1d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7491,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9f8ccf9e8a020c00d7796d2ecb62886a438a3cb000000000000000000000000c9f8ccf9e8a020c00d7796d2ecb62886a438a3cb00000000000000000000000000000000000000000000000000ae6c3995ee1d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7492,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000003768cb4dd86eb023351ed692b7a2914e9bafa6db0000000000000000000000003768cb4dd86eb023351ed692b7a2914e9bafa6db0000000000000000000000000000000000000000000000000dcb76c5bc2565ab00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7493,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000079e614793261bb897479ba2695e12e52a917479d00000000000000000000000079e614793261bb897479ba2695e12e52a917479d00000000000000000000000000000000000000000000000000adbb794743b50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7494,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000034ac975586e7d8fbd6a9b70531d47de1ebb3b8f000000000000000000000000034ac975586e7d8fbd6a9b70531d47de1ebb3b8f00000000000000000000000000000000000000000000000000adbb794743b50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7495,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000639aee9a0395d9bcb76078c6c1da119a2ea83078000000000000000000000000639aee9a0395d9bcb76078c6c1da119a2ea8307800000000000000000000000000000000000000000000000000adbb794743b50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7496,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000edc113cb810b4b6fb87770e80376e0947d27e3c7000000000000000000000000edc113cb810b4b6fb87770e80376e0947d27e3c700000000000000000000000000000000000000000000000000adf8b8ad0e260000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7497,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000005f4b6fd9b735438cf5b8a3288497933249cd8ae50000000000000000000000005f4b6fd9b735438cf5b8a3288497933249cd8ae50000000000000000000000000000000000000000000000000dcb5f47ca0cee7d00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7498,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a891a1ced2d7289a643a92e788a271dcdcabb2eb000000000000000000000000a891a1ced2d7289a643a92e788a271dcdcabb2eb00000000000000000000000000000000000000000000000000adf8b8ad0e260000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7499,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000cb1daeebc6a365c6968ad8fe53f8fccdfa05aba1000000000000000000000000cb1daeebc6a365c6968ad8fe53f8fccdfa05aba10000000000000000000000000000000000000000000000000dc5ef108125f78900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7500,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a54a961158f8e4611c544b47af75f8a002ac1eb0000000000000000000000000a54a961158f8e4611c544b47af75f8a002ac1eb0000000000000000000000000000000000000000000000000000784f25631540000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7501,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000219929399f860d4598976051288d2e7b224dc301000000000000000000000000219929399f860d4598976051288d2e7b224dc301000000000000000000000000000000000000000000000000003bf846dec395bb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7504,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000089b559e0286ddd85197694f7b51dcc2d69e2cf3d00000000000000000000000089b559e0286ddd85197694f7b51dcc2d69e2cf3d0000000000000000000000000000000000000000000000000006268f1f360d0600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7507,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000060bb17be832944e648c979ab76f40902db27d7df00000000000000000000000060bb17be832944e648c979ab76f40902db27d7df000000000000000000000000000000000000000000000000003d6d04c1f0cb6000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7509,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f24b327b0df485a44ff4d7b1289e9e1b4da93fe0000000000000000000000000f24b327b0df485a44ff4d7b1289e9e1b4da93fe000000000000000000000000000000000000000000000000000ae88c0519d0f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7510,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000f801b192adef546d8da04ae9e8c8d134d0157a90000000000000000000000000f801b192adef546d8da04ae9e8c8d134d0157a900000000000000000000000000000000000000000000000000085f61d330706100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7513,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d37bab7903aa966b9a997e3d32ae8bf64b6044d6000000000000000000000000d37bab7903aa966b9a997e3d32ae8bf64b6044d600000000000000000000000000000000000000000000000000adea7811b1fac700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9fbc98e2b46f938d2f4955fb27b460cb64da110bb6ab43b1c8c8a6d009c314e2,2021-12-13 09:32:28.000 UTC,0,true -7514,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a846a337ad081e78984ca9f2c20504151b66c29b000000000000000000000000a846a337ad081e78984ca9f2c20504151b66c29b00000000000000000000000000000000000000000000000000adcfe3be87300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7515,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d4961a88513692fd878f1b44986c5c4a639980cc000000000000000000000000d4961a88513692fd878f1b44986c5c4a639980cc00000000000000000000000000000000000000000000000000ae6d9f90124c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7516,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004c0186d8bc845ae8e09e707bf5dc3fa03f91bed00000000000000000000000004c0186d8bc845ae8e09e707bf5dc3fa03f91bed00000000000000000000000000000000000000000000000000ae6d9f90124c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7517,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000035445c18ff0b5be58fb4397ef6c9072a0b76368500000000000000000000000035445c18ff0b5be58fb4397ef6c9072a0b76368500000000000000000000000000000000000000000000000000ad4ef64118a90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7518,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000010e66cc24b7b91c26ee80a284d3e85246f8ca2b700000000000000000000000010e66cc24b7b91c26ee80a284d3e85246f8ca2b700000000000000000000000000000000000000000000000000ae30ef5b23210000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7519,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000057b62746a34614143c48a26d84f95dab0329d11100000000000000000000000057b62746a34614143c48a26d84f95dab0329d111000000000000000000000000000000000000000000000000003c27d8aeefaac900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7520,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009252160105181fbe25dc8aca2e5e4367b2c362f10000000000000000000000009252160105181fbe25dc8aca2e5e4367b2c362f100000000000000000000000000000000000000000000000000ae0e891e75d00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7521,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b3b87a20fe00b4bb4d62107d7f6aebe2e8dc3aa7000000000000000000000000b3b87a20fe00b4bb4d62107d7f6aebe2e8dc3aa7000000000000000000000000000000000000000000000000001ff2bf5f71d00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7522,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000772cc8808e7bbeee498ac01f2cb54684bc9737a6000000000000000000000000772cc8808e7bbeee498ac01f2cb54684bc9737a600000000000000000000000000000000000000000000000000ae0e891e75d00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7523,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a876938b4db24735393e0060d2b9ac0998d8e4f0000000000000000000000003a876938b4db24735393e0060d2b9ac0998d8e4f00000000000000000000000000000000000000000000000000ae2be6a36dab0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7524,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009997919e8e35921da36a3296926b9b75e54823f30000000000000000000000009997919e8e35921da36a3296926b9b75e54823f300000000000000000000000000000000000000000000000000ae134a3dbda30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7525,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a9a0dc7a3f7216cfbfae6895bc8624575e3aa947000000000000000000000000a9a0dc7a3f7216cfbfae6895bc8624575e3aa94700000000000000000000000000000000000000000000000000ae6d9f90124c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7526,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000001567fe56a6eb4b473a4ddde014fe8f1731c951060000000000000000000000000000000000000000000000004d73a39e2b1491f9,,,1,true -7527,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000060814e6e0242f07a1ada442fc47918159d0af5fb00000000000000000000000060814e6e0242f07a1ada442fc47918159d0af5fb00000000000000000000000000000000000000000000000000ae5787863cff0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7528,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000588235b8980662b2d8aa248c894820c70772d0fe000000000000000000000000588235b8980662b2d8aa248c894820c70772d0fe00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7529,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f62a6c144422c49d322ab53ebe94081dcc7e0a70000000000000000000000007f62a6c144422c49d322ab53ebe94081dcc7e0a70000000000000000000000000000000000000000000000000003e8f437904d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7530,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000044d0e5b18f58782304750680f5d08df1dc5f2ed100000000000000000000000044d0e5b18f58782304750680f5d08df1dc5f2ed100000000000000000000000000000000000000000000000000ae5787863cff0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7531,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000ec7de88937299efad9e2d1a252e4dc6da9e043a0000000000000000000000000ec7de88937299efad9e2d1a252e4dc6da9e043a00000000000000000000000000000000000000000000000000aeb4f06547a90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7532,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000492ad0dfa799db64344e97af57249cf921e5ee09000000000000000000000000492ad0dfa799db64344e97af57249cf921e5ee0900000000000000000000000000000000000000000000000000ae8a264bc13e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7533,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099829510a9bb0bdb0db43300c1def5be184c399e00000000000000000000000099829510a9bb0bdb0db43300c1def5be184c399e00000000000000000000000000000000000000000000000000aebba6af8ef10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7534,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005bada7f9158b13cc63b5ff0a1d4cfc7b4687418c0000000000000000000000005bada7f9158b13cc63b5ff0a1d4cfc7b4687418c00000000000000000000000000000000000000000000000000ae9aee0573720000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7535,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ad28fc8cccd7a56904f0aac295f46fa5f0e6ce7c000000000000000000000000ad28fc8cccd7a56904f0aac295f46fa5f0e6ce7c00000000000000000000000000000000000000000000000000aeb02f45ffd60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7536,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008daf76b646554f9a0b5c12c554653ab7360f200a0000000000000000000000008daf76b646554f9a0b5c12c554653ab7360f200a00000000000000000000000000000000000000000000000000aedc5f59aa700000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7537,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000056472645efa1c71dc206c6caf9424b5cc281e54800000000000000000000000056472645efa1c71dc206c6caf9424b5cc281e54800000000000000000000000000000000000000000000000000ae46309baf850000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7538,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000281e5b0130168236f475b0565dd1f03c47c8cf7a000000000000000000000000281e5b0130168236f475b0565dd1f03c47c8cf7a00000000000000000000000000000000000000000000000000aed443153ef90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7539,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b074550f54bb62ca7e770704edcdfb5f285c2a98000000000000000000000000b074550f54bb62ca7e770704edcdfb5f285c2a9800000000000000000000000000000000000000000000000000af1cf9e498850000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7540,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c5fae7d266f5890110b285d5b732a908e5624339000000000000000000000000c5fae7d266f5890110b285d5b732a908e562433900000000000000000000000000000000000000000000000000aeb26c096cee0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7541,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009a08382adbebaa283ba7780269c9f7703ea3363e0000000000000000000000009a08382adbebaa283ba7780269c9f7703ea3363e00000000000000000000000000000000000000000000000000aeb26c096cee0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7542,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff9470aa9ab2c0763c5223028df0d160c6ccf018000000000000000000000000ff9470aa9ab2c0763c5223028df0d160c6ccf01800000000000000000000000000000000000000000000000000ae820a0755c70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7543,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000022532682436ad59a16baf0e986042e1e640f37ca00000000000000000000000022532682436ad59a16baf0e986042e1e640f37ca00000000000000000000000000000000000000000000000000aea783d0b9190000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7544,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df04be0d58741743c1152c78fc3d1bc4a33dcd3a000000000000000000000000df04be0d58741743c1152c78fc3d1bc4a33dcd3a00000000000000000000000000000000000000000000000000ae9d2ac8e08a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7545,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f772ce83e0411588bd6318d1a7b6585854b11188000000000000000000000000f772ce83e0411588bd6318d1a7b6585854b1118800000000000000000000000000000000000000000000000000aee002173bb70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7546,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d80a617cd71449abda8585fb9895a0c80b99001d000000000000000000000000d80a617cd71449abda8585fb9895a0c80b99001d00000000000000000000000000000000000000000000000000ae8e9fd29b6e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7547,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000018d729566ae764c238c2a9bc9cef3a1710cedaad00000000000000000000000018d729566ae764c238c2a9bc9cef3a1710cedaad00000000000000000000000000000000000000000000000000ae8f769be4570000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7548,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000014e4be76d2152b25553509459cf20394cf581fef00000000000000000000000014e4be76d2152b25553509459cf20394cf581fef00000000000000000000000000000000000000000000000000ae63d5b915030000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7549,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ffa47af2bda483d1c94795223020774aeb3d3f30000000000000000000000006ffa47af2bda483d1c94795223020774aeb3d3f300000000000000000000000000000000000000000000000000aec88413423b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7550,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000054cbc1c6f27e32abb247ed24931041f545ffcfa900000000000000000000000054cbc1c6f27e32abb247ed24931041f545ffcfa900000000000000000000000000000000000000000000000000ae85acc4e70e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7551,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000562cb434b6b0163e78cbcefea6557ceb18ed0d2a000000000000000000000000562cb434b6b0163e78cbcefea6557ceb18ed0d2a00000000000000000000000000000000000000000000000000aeab6e26b8030000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7552,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009ca24558487bb0e0b7d919c10b68bd4766b65ba90000000000000000000000009ca24558487bb0e0b7d919c10b68bd4766b65ba900000000000000000000000000000000000000000000000000ae9aee0573720000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7553,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000533c373483ced08185769e8b75c5ae7a0913420e000000000000000000000000533c373483ced08185769e8b75c5ae7a0913420e00000000000000000000000000000000000000000000000000ae9aee0573720000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7554,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006960f073f21f08f9e70d92a3829a9639883860160000000000000000000000006960f073f21f08f9e70d92a3829a96398838601600000000000000000000000000000000000000000000000000ae3dccbed66b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7555,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004610982bc3942433c50ce6ea228da3d118a467810000000000000000000000004610982bc3942433c50ce6ea228da3d118a4678100000000000000000000000000000000000000000000000000ae3dccbed66b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7556,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f30859796a0d2618a1e6dd27a47f27ce03bb210d000000000000000000000000f30859796a0d2618a1e6dd27a47f27ce03bb210d00000000000000000000000000000000000000000000000000add60ad7f3320000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7557,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a16a05b1833a0bb47226e35b18f60c6145a4039a000000000000000000000000a16a05b1833a0bb47226e35b18f60c6145a4039a00000000000000000000000000000000000000000000000000ad8bee0e75770000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7558,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000081f019fb5dbc4123d0273f7fbab06e78f889189800000000000000000000000081f019fb5dbc4123d0273f7fbab06e78f889189800000000000000000000000000000000000000000000000000ad2c00d390120000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7559,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c10dbf2acf476b2e64beecefb531cd42ec6c4531000000000000000000000000c10dbf2acf476b2e64beecefb531cd42ec6c453100000000000000000000000000000000000000000000000000ad2c00d390120000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7560,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000087ac26530ba964e0b63df037adb69c050f42683100000000000000000000000087ac26530ba964e0b63df037adb69c050f42683100000000000000000000000000000000000000000000000000ad9bdefedec20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7561,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d5b1318c4c0a00d9a6bd2d1a5df78849671d4451000000000000000000000000d5b1318c4c0a00d9a6bd2d1a5df78849671d445100000000000000000000000000000000000000000000000000ad1edbd76f250000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7562,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000083af5f707e02c7fe0a08e6fe1e680028848e1b6900000000000000000000000083af5f707e02c7fe0a08e6fe1e680028848e1b6900000000000000000000000000000000000000000000000000acf06f0057730000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7563,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000599f9850a621ed6f53d4ea55f905b24a6001bada000000000000000000000000599f9850a621ed6f53d4ea55f905b24a6001bada00000000000000000000000000000000000000000000000000ad69cf6a35c90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7564,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000209e56d2595d1b2506d73b97e26b09ed01b83649000000000000000000000000209e56d2595d1b2506d73b97e26b09ed01b8364900000000000000000000000000000000000000000000000000adb35d02d83e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7566,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c369d580e0edddbc4ae412febd6754db90461aa0000000000000000000000000c369d580e0edddbc4ae412febd6754db90461aa000000000000000000000000000000000000000000000000000adb35d02d83e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7567,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005133ba94f973019f002dbce1a90c250422defa1c0000000000000000000000005133ba94f973019f002dbce1a90c250422defa1c00000000000000000000000000000000000000000000000000addeb64d39ef0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7569,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc9dc3b6dc79e8801e1b5f57f0e255f28b0499bd000000000000000000000000fc9dc3b6dc79e8801e1b5f57f0e255f28b0499bd00000000000000000000000000000000000000000000000000ae4364a767270000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7570,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cffa2bad785cc2d369830692fbbf7ed3d8a0f983000000000000000000000000cffa2bad785cc2d369830692fbbf7ed3d8a0f98300000000000000000000000000000000000000000000000000ae2696534a920000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7571,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000040bc79e4558c74168f3c113a9d9a4aad6f29624c00000000000000000000000040bc79e4558c74168f3c113a9d9a4aad6f29624c00000000000000000000000000000000000000000000000000ae2696534a920000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7572,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007720064a8dc14750449304ba9307f9567bfad0960000000000000000000000007720064a8dc14750449304ba9307f9567bfad09600000000000000000000000000000000000000000000000000ae25bf8a01a90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7573,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e17b3c19eb8e4ca5eb0af01c2d5c944b73d1eeeb000000000000000000000000e17b3c19eb8e4ca5eb0af01c2d5c944b73d1eeeb00000000000000000000000000000000000000000000000000ae25bf8a01a90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7574,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047d713f03e4520c3949093c90c8e0f40c60ca19000000000000000000000000047d713f03e4520c3949093c90c8e0f40c60ca19000000000000000000000000000000000000000000000000000ae904d652d400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7575,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008582fdfa0003af19f26470ed2f7d18e5aeb000060000000000000000000000008582fdfa0003af19f26470ed2f7d18e5aeb0000600000000000000000000000000000000000000000000000000adc6a918652d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7576,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7fbb67ca1f7db16e798952a7b4e1ef84b247054000000000000000000000000f7fbb67ca1f7db16e798952a7b4e1ef84b24705400000000000000000000000000000000000000000000000000ad995aa304070000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7577,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000432e0d86aa20743fc53e361b06975cd34fce2e4f000000000000000000000000432e0d86aa20743fc53e361b06975cd34fce2e4f00000000000000000000000000000000000000000000000000ad884b50e4300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7578,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008159bb4c392c0d904a0372933683f60cf3cc4f100000000000000000000000008159bb4c392c0d904a0372933683f60cf3cc4f10000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7579,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5b5dbb678b8b4314384b60d6f9a293ae1b58b8d000000000000000000000000e5b5dbb678b8b4314384b60d6f9a293ae1b58b8d00000000000000000000000000000000000000000000000000adc58ab6aea10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7580,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005cd19361680979905686aaa5870d73991bb362900000000000000000000000005cd19361680979905686aaa5870d73991bb362900000000000000000000000000000000000000000000000000addddf83f1060000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7581,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c89b8dd7e3e137db108575eeae301e52b6c72d9f000000000000000000000000c89b8dd7e3e137db108575eeae301e52b6c72d9f000000000000000000000000000000000000000000000000016a264bacc1280000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7582,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000638f308e92240793b35910cb87bf9a580a3fa162000000000000000000000000638f308e92240793b35910cb87bf9a580a3fa16200000000000000000000000000000000000000000000000000adf9d70ec4b20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7583,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3a4cc5bbd5a061575a019f4e2c5f8cb1167be11000000000000000000000000d3a4cc5bbd5a061575a019f4e2c5f8cb1167be1100000000000000000000000000000000000000000000000000ad8803b8768d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7585,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a80f1a7623fd8e04b0e0f4e2a8d393852da63211000000000000000000000000a80f1a7623fd8e04b0e0f4e2a8d393852da6321100000000000000000000000000000000000000000000000000adbcdf4167e40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7586,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6b51cf482a0bed3f88614e1fa8484ad9117039e000000000000000000000000c6b51cf482a0bed3f88614e1fa8484ad9117039e00000000000000000000000000000000000000000000000000adbcdf4167e40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7587,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b89defa50227491d7587eeef3e706ce0fcc3b595000000000000000000000000b89defa50227491d7587eeef3e706ce0fcc3b59500000000000000000000000000000000000000000000000000acde414c81100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7588,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eeaa75be33235789287252d238cbe9f2c58ac051000000000000000000000000eeaa75be33235789287252d238cbe9f2c58ac051000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7589,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a5036e0c6217193784ba3f50e2cafa5056edfd25000000000000000000000000a5036e0c6217193784ba3f50e2cafa5056edfd2500000000000000000000000000000000000000000000000000ad43c66ff7310000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7590,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3e358543a57a213d4df6cf884570a1b9e0de7ea000000000000000000000000a3e358543a57a213d4df6cf884570a1b9e0de7ea00000000000000000000000000000000000000000000000000adac5f2023530000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7591,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8bbe5d99fe12ad0f5db68ab893f408ebdf4d5d2000000000000000000000000e8bbe5d99fe12ad0f5db68ab893f408ebdf4d5d20000000000000000000000000000000000000000000000000005c5ba7442b96e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7592,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000060024087c862f75febe1f249808a54ec6a7da89e00000000000000000000000060024087c862f75febe1f249808a54ec6a7da89e00000000000000000000000000000000000000000000000000ade211725d930000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7593,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008780aa9160d3da8fbb2b1a05278c5dac31ad36720000000000000000000000008780aa9160d3da8fbb2b1a05278c5dac31ad367200000000000000000000000000000000000000000000000000ade211725d930000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7594,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d218950ec60eb78201acf20f2c3b8fd66888da94000000000000000000000000d218950ec60eb78201acf20f2c3b8fd66888da9400000000000000000000000000000000000000000000000000ad5f2ec9ef970000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7595,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2b96cdd902ba47b97dc98d4da4e7b696f5e0f1d000000000000000000000000d2b96cdd902ba47b97dc98d4da4e7b696f5e0f1d00000000000000000000000000000000000000000000000000adde271c5ea90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7597,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000001a8a09311d1d558f07f6d05d0e8bc6fd8fe8b8a00000000000000000000000001a8a09311d1d558f07f6d05d0e8bc6fd8fe8b8a00000000000000000000000000000000000000000000000000f8b0a10e47000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7598,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7789cdf5b5ff0cf171b4b389986f35844e502a6000000000000000000000000d7789cdf5b5ff0cf171b4b389986f35844e502a600000000000000000000000000000000000000000000000000adf320c47d6a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7599,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a56de955933d795418532eec5b4690c2f7e64350000000000000000000000005a56de955933d795418532eec5b4690c2f7e643500000000000000000000000000000000000000000000000000ae6a8c035c4b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7600,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a4bbd1b7b224c31d62d4042e0c08a032c8d77350000000000000000000000000a4bbd1b7b224c31d62d4042e0c08a032c8d773500000000000000000000000000000000000000000000000000adc9750cad8b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7601,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc289f97fc3446ecdecd30dd19c56960a24ae950000000000000000000000000dc289f97fc3446ecdecd30dd19c56960a24ae95000000000000000000000000000000000000000000000000000ae30ef5b23210000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7602,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000038811574db392d15d0827f8cc903283af3ca29ae00000000000000000000000038811574db392d15d0827f8cc903283af3ca29ae00000000000000000000000000000000000000000000000000ae30ef5b23210000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7603,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a428bdcb44eb5306bc7991239bba5179872b30de000000000000000000000000a428bdcb44eb5306bc7991239bba5179872b30de00000000000000000000000000000000000000000000000000ad9b9766711f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7604,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006b92df354b82594f63ddbc4cac6eebe2009f155b0000000000000000000000006b92df354b82594f63ddbc4cac6eebe2009f155b00000000000000000000000000000000000000000000000000ad9b9766711f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7605,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007a34169af16e1d8a7d6649b0dbfe85ea18d7ce070000000000000000000000007a34169af16e1d8a7d6649b0dbfe85ea18d7ce0700000000000000000000000000000000000000000000000000ae16ecfb4eea0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7606,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d9682971028449408ae5e809246d056cabbff3fc000000000000000000000000d9682971028449408ae5e809246d056cabbff3fc00000000000000000000000000000000000000000000000000ad7665357b700000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7607,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdb8ed3779a0d42b996fa1d24b2617015450b9a9000000000000000000000000bdb8ed3779a0d42b996fa1d24b2617015450b9a900000000000000000000000000000000000000000000000000adc6f0b0d2d00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7608,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b36118ddb7586072b359fda10d90cd39b24fdf42000000000000000000000000b36118ddb7586072b359fda10d90cd39b24fdf4200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7609,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000022e3bd619ae5c006afec292774d3b6b645dc1c1900000000000000000000000022e3bd619ae5c006afec292774d3b6b645dc1c19000000000000000000000000000000000000000000000000003bade431716b8300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7610,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009260bb6c9b32e04547be20db02f6aaa530fc36080000000000000000000000009260bb6c9b32e04547be20db02f6aaa530fc360800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7611,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004088f2fd285c51de2203db3a0c6014b36c7c4d610000000000000000000000004088f2fd285c51de2203db3a0c6014b36c7c4d6100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7612,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001431a59a078a6cba473c3899b6ad358ad698d2a50000000000000000000000001431a59a078a6cba473c3899b6ad358ad698d2a500000000000000000000000000000000000000000000000000adf6c3820eb10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7613,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000059bd3cb9cd4c016f0dbcd93bfbdc56b05063de0f00000000000000000000000059bd3cb9cd4c016f0dbcd93bfbdc56b05063de0f00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7614,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000156181484c8a8b3983f5be98a63dce1372eaa7b1000000000000000000000000156181484c8a8b3983f5be98a63dce1372eaa7b100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7615,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007a74627ee05cb76db741f66542a1fbcfed29a20f0000000000000000000000007a74627ee05cb76db741f66542a1fbcfed29a20f00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7616,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000054c1349cff8b5fd7cf4124a778f4aa4676d3599f00000000000000000000000054c1349cff8b5fd7cf4124a778f4aa4676d3599f00000000000000000000000000000000000000000000000000043bf0082b4d8800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7618,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000830e7ef90616c0ac756899a26e36fe291a4ea635000000000000000000000000830e7ef90616c0ac756899a26e36fe291a4ea635000000000000000000000000000000000000000000000000004e753cd36cbe0b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7619,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000303e60ea993c8f6bcfd7d0f7d5270a71b458b4c7000000000000000000000000303e60ea993c8f6bcfd7d0f7d5270a71b458b4c700000000000000000000000000000000000000000000000000a56ced518fd7ac00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7620,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000086d004eb704b385d2c75c8ff70dcd52ba789ab3a00000000000000000000000086d004eb704b385d2c75c8ff70dcd52ba789ab3a00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7621,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009b361ac29c912fb2b9565719dfff901cf6904d310000000000000000000000009b361ac29c912fb2b9565719dfff901cf6904d31000000000000000000000000000000000000000000000000007119e5e0c33f3800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7622,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c35a338756c87b3f9cc2283ed58e6a36d0508b80000000000000000000000002c35a338756c87b3f9cc2283ed58e6a36d0508b80000000000000000000000000000000000000000000000000020ba9e148b17c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7623,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000012e0301eb01dd35007cc04e09051834cb22212c000000000000000000000000012e0301eb01dd35007cc04e09051834cb22212c0000000000000000000000000000000000000000000000000030c2a0fa4cbb0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7624,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000420e26061672cc8d6bf4e0ac93e71fb8b07b542c000000000000000000000000420e26061672cc8d6bf4e0ac93e71fb8b07b542c0000000000000000000000000000000000000000000000000000000001c9c38000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7626,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000376ff58d081d75732730b57dd516462c07c8a7a9000000000000000000000000376ff58d081d75732730b57dd516462c07c8a7a900000000000000000000000000000000000000000000000000a2ca713d68562e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7627,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ab0da4e336bc4d777364d14de819aa712a4161c7000000000000000000000000ab0da4e336bc4d777364d14de819aa712a4161c700000000000000000000000000000000000000000000000000a3971e86b06ad800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7628,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000023d208c963d9945695882ba278e1769918a241fd00000000000000000000000023d208c963d9945695882ba278e1769918a241fd00000000000000000000000000000000000000000000000000a43508ab10fe4e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7629,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000766c1ee5fe7c684b22becef250e110f61842a01e000000000000000000000000766c1ee5fe7c684b22becef250e110f61842a01e0000000000000000000000000000000000000000000000000039320be8cd412e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7630,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aafcbe22104766f57d1d60e169cc466697b41913000000000000000000000000aafcbe22104766f57d1d60e169cc466697b4191300000000000000000000000000000000000000000000000000a3272993bf0eef00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7631,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d199eefa598894d13adafce1ef015c758b0fa06f000000000000000000000000d199eefa598894d13adafce1ef015c758b0fa06f00000000000000000000000000000000000000000000000000a32a7937ca7a0200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7633,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f038b3a2adb14326be2c6c011b2b2fe334f1c440000000000000000000000003f038b3a2adb14326be2c6c011b2b2fe334f1c4400000000000000000000000000000000000000000000000000a46d2b2d81b6af00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7634,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a5a9715581c227dbc3c2c7567121dc5118751a7b000000000000000000000000a5a9715581c227dbc3c2c7567121dc5118751a7b0000000000000000000000000000000000000000000000000047f27f41e4138600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7635,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000050cf9ddccdeed303f9bc1296bcd09083a62c725f00000000000000000000000050cf9ddccdeed303f9bc1296bcd09083a62c725f0000000000000000000000000000000000000000000000000030b1249eeb127700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7638,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000303b464c2b8f94c3f107655e0dfd595fd070f43b000000000000000000000000303b464c2b8f94c3f107655e0dfd595fd070f43b000000000000000000000000000000000000000000000000004e6b8db9ad3a2e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7640,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f14319280aa9757e41bf7c3fcd02af8b87009aec000000000000000000000000f14319280aa9757e41bf7c3fcd02af8b87009aec0000000000000000000000000000000000000000000000000081e7863b3b1be200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x517e438da569f7389f7f7c8703fe1974054cfbe0a835081af811520234f24931,2022-06-09 08:47:55.000 UTC,0,true -7641,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006577d0b14abfce382d3912a9eff263b7981fb35b0000000000000000000000006577d0b14abfce382d3912a9eff263b7981fb35b00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7642,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000adcfb436689d356ad27bfe508adb5b9d3bd5268e000000000000000000000000adcfb436689d356ad27bfe508adb5b9d3bd5268e00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7643,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf10a9e1380ad7f369898e55491c54ce4baa3d67000000000000000000000000bf10a9e1380ad7f369898e55491c54ce4baa3d6700000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7644,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000b4f1ed9aff74e4d0c75e3bb0e3fc637b3c040fca000000000000000000000000b4f1ed9aff74e4d0c75e3bb0e3fc637b3c040fca000000000000000000000000000000000000000000000000000000000000004100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7645,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006686db6ede1acd9d912710debcac2f7ab35fd2e90000000000000000000000006686db6ede1acd9d912710debcac2f7ab35fd2e900000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7646,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000070498fbc17815115d12482f3666415853ef9b70e00000000000000000000000070498fbc17815115d12482f3666415853ef9b70e0000000000000000000000000000000000000000000000000036b67ce1e1629300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7647,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000283141f359a0aa691cb294072924dd449f98b560000000000000000000000000283141f359a0aa691cb294072924dd449f98b5600000000000000000000000000000000000000000000000002be01c867c2dc4200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7649,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006668460ef71721227b6d59a0cd091ce655bc9f7a0000000000000000000000006668460ef71721227b6d59a0cd091ce655bc9f7a000000000000000000000000000000000000000000000000001e87f2bb63444000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7651,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002922804f9d43dd90737c3c2d47eb787ed5d800e20000000000000000000000002922804f9d43dd90737c3c2d47eb787ed5d800e2000000000000000000000000000000000000000000000000008b93a93c26c00200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7653,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000084e89efbead5707b3665707cd273704d36b3b98a00000000000000000000000084e89efbead5707b3665707cd273704d36b3b98a000000000000000000000000000000000000000000000000018109287ce0030000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7654,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009d70c7fc7e403b88ef65ea7581dd209314fce6df0000000000000000000000009d70c7fc7e403b88ef65ea7581dd209314fce6df000000000000000000000000000000000000000000000000006341a660658f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7656,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000df60be630e94a957b5f4033c7def69e1c4554bb6000000000000000000000000df60be630e94a957b5f4033c7def69e1c4554bb6000000000000000000000000000000000000000000000000000000001330c1f300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7657,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e04e81d73664ab466181f467d37b065021e78b50000000000000000000000003e04e81d73664ab466181f467d37b065021e78b5000000000000000000000000000000000000000000000000003ff2e795f5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7658,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c5dc13274c280a380fda4490f3cab944338a01ee000000000000000000000000c5dc13274c280a380fda4490f3cab944338a01ee0000000000000000000000000000000000000000000000000050dc7bd9f5ec1500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7660,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006860fe601068c2ed033fdb17ca1bc8351db6a8a80000000000000000000000006860fe601068c2ed033fdb17ca1bc8351db6a8a8000000000000000000000000000000000000000000000000013a73e82249930000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7662,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf39ddbac5cfedc4476b4088904131ce3cad1d14000000000000000000000000bf39ddbac5cfedc4476b4088904131ce3cad1d140000000000000000000000000000000000000000000000000131f9a1516d1cf000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7663,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000082a87dc8b036f8542d8373ef194b46b096eb41ad00000000000000000000000082a87dc8b036f8542d8373ef194b46b096eb41ad0000000000000000000000000000000000000000000000000015dfa32da4fb4300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7664,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a509ef076b42e1face74c267f454e60f1ce779bd000000000000000000000000a509ef076b42e1face74c267f454e60f1ce779bd00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7665,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000443571116e56aa45b6bf8408641ef13474708c21000000000000000000000000443571116e56aa45b6bf8408641ef13474708c210000000000000000000000000000000000000000000000000003e871b540c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7666,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000af297dec752c909092a117a932a8ca4aaaff9795000000000000000000000000af297dec752c909092a117a932a8ca4aaaff979500000000000000000000000000000000000000000000000002b834d8500c4c8400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xa477a8986a9ef854b6a43e97ae05ecd585d39c8eb9a97fa19646fca1ee05704f,2022-08-06 22:25:41.000 UTC,0,true -7671,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b050e6833ae2d750c90183259d45fee366436e34000000000000000000000000b050e6833ae2d750c90183259d45fee366436e34000000000000000000000000000000000000000000000000002aa1efb94e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7672,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045c0b853c382516ff6aa825ea1bb59d1aeafb1de00000000000000000000000045c0b853c382516ff6aa825ea1bb59d1aeafb1de000000000000000000000000000000000000000000000000002977670646daa000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7674,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000026462ddd25e757d3f8dae688be7d78e6154a005000000000000000000000000026462ddd25e757d3f8dae688be7d78e6154a005000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7677,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000541f1e027ed075e356d895014c2da8778694ea6a000000000000000000000000541f1e027ed075e356d895014c2da8778694ea6a00000000000000000000000000000000000000000000000000eaaf3737da138400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7678,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b82f413c1efd1a2a6e7639d5c38fbec70ebe7941000000000000000000000000b82f413c1efd1a2a6e7639d5c38fbec70ebe79410000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7679,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005d4c5b72a62ca1e2548f1914252d31a9023fec700000000000000000000000005d4c5b72a62ca1e2548f1914252d31a9023fec7000000000000000000000000000000000000000000000000000ab5ea67a7910500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x093d477e04e391668e29a96121574ea4eba65185870fc84935fed4c9a6b61446,2022-04-26 17:44:13.000 UTC,0,true -7681,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037824015ff5d2337339c7fde958fcdd2fd99151a00000000000000000000000037824015ff5d2337339c7fde958fcdd2fd99151a000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7682,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000f16d205fb2ad682e9c844357194358ee3505706c000000000000000000000000f16d205fb2ad682e9c844357194358ee3505706c00000000000000000000000000000000000000000000000f21518bbffea3386300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7683,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039885aacc9dc0b053131605fc2f43b2f1275014300000000000000000000000039885aacc9dc0b053131605fc2f43b2f12750143000000000000000000000000000000000000000000000000001dd477d908370000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7684,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005f48fc75f1dfc63d2f0636ca0292dd33918091c30000000000000000000000005f48fc75f1dfc63d2f0636ca0292dd33918091c300000000000000000000000000000000000000000000000000f38f04e566090000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7685,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea33cf28ccbf57277428c1c03c70c0a482efda52000000000000000000000000ea33cf28ccbf57277428c1c03c70c0a482efda52000000000000000000000000000000000000000000000000030d98d59a96000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7687,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008b32f9141f100ebcc304f78bbd8ef9da730342170000000000000000000000008b32f9141f100ebcc304f78bbd8ef9da73034217000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7688,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008b32f9141f100ebcc304f78bbd8ef9da730342170000000000000000000000008b32f9141f100ebcc304f78bbd8ef9da73034217000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7692,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043ccda6275973913ec16392afec6b1f547afded300000000000000000000000043ccda6275973913ec16392afec6b1f547afded30000000000000000000000000000000000000000000000000086633e873fdcb600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7693,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6bc866c9110ce7c29c197197d0e76204be1175e000000000000000000000000b6bc866c9110ce7c29c197197d0e76204be1175e000000000000000000000000000000000000000000000000001aaba9e27ad30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7694,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000019935d31af29c8c7dd7a975b86ea63d712e4270f00000000000000000000000019935d31af29c8c7dd7a975b86ea63d712e4270f000000000000000000000000000000000000000000000000001866704f306e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7695,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007bcbeb74cf9297dc3bff964478bf8637f61c30a60000000000000000000000007bcbeb74cf9297dc3bff964478bf8637f61c30a6000000000000000000000000000000000000000000000000002a81827431cd4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7697,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b2e81226fad8b5e2ca20145d6d06880e4bd2cf18000000000000000000000000b2e81226fad8b5e2ca20145d6d06880e4bd2cf180000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7698,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000016217daf5a44a7b610ee836d51c5ee177b0efe7500000000000000000000000016217daf5a44a7b610ee836d51c5ee177b0efe750000000000000000000000000000000000000000000000000041399c31a0119a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7700,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000005bca305df5b8446546224d7e548ef4e681eacfc9000000000000000000000000000000000000000000000000a0c0676b65a05728,0x3ec8b5d5194d2e830f576c3f5cfd981389dcaef4c2a71871172f29eff58e51ca,2022-04-27 06:06:25.000 UTC,0,true -7701,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000018361c087e74e742a84dc724dfec5b1565c6005800000000000000000000000018361c087e74e742a84dc724dfec5b1565c60058000000000000000000000000000000000000000000000000001b9241725cf3fb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7702,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a7ce80b7681693de60bc0e1e5d5ad37080523990000000000000000000000000a7ce80b7681693de60bc0e1e5d5ad370805239900000000000000000000000000000000000000000000000000034e06092dd1ac800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7703,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ef449eee029a136bf7d43ba1e1ba2350252b1d40000000000000000000000007ef449eee029a136bf7d43ba1e1ba2350252b1d400000000000000000000000000000000000000000000000000df9cc405d75f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7704,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ab38b08d03e8011b9badb8472fb2a61d901754e1000000000000000000000000ab38b08d03e8011b9badb8472fb2a61d901754e1000000000000000000000000000000000000000000000000013fbe85edc9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7705,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001ff29c355d137c263062bde72a48523893bbd2440000000000000000000000001ff29c355d137c263062bde72a48523893bbd2440000000000000000000000000000000000000000000000000037bc3d8277c3c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7706,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000002c5220549c03c01b8bc9435efa65a65a946b43300000000000000000000000002c5220549c03c01b8bc9435efa65a65a946b4330000000000000000000000000000000000000000000000000038463680fc668000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7707,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049c8eb6dd499473c368b7429f6d5110816bf1bb400000000000000000000000049c8eb6dd499473c368b7429f6d5110816bf1bb400000000000000000000000000000000000000000000000000363f4bcffdf6c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7708,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ceb97387e83c6a6f7d846bb5d8ab4deb2d16bebc000000000000000000000000ceb97387e83c6a6f7d846bb5d8ab4deb2d16bebc00000000000000000000000000000000000000000000000000268d857d475ac000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7709,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000350b6bc3134039195e9a35663a5943f52d33734e000000000000000000000000350b6bc3134039195e9a35663a5943f52d33734e000000000000000000000000000000000000000000000000002e4dbe3087798000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7710,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d9d90b7a1cc20b181560229e7263b9e1abaf66ee000000000000000000000000d9d90b7a1cc20b181560229e7263b9e1abaf66ee00000000000000000000000000000000000000000000000000263f8ae4d1db0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7711,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001bd425a743300559d70490c4bb2c68d4e1bd80cd0000000000000000000000001bd425a743300559d70490c4bb2c68d4e1bd80cd00000000000000000000000000000000000000000000000000265805cff49b8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7712,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061d6edb871b41d0adbf263070c15a2af992e7f9d00000000000000000000000061d6edb871b41d0adbf263070c15a2af992e7f9d0000000000000000000000000000000000000000000000000028bbc836e1144000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7713,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f6d3d319584ed3e9630f9592c4b51252a3f4c770000000000000000000000000f6d3d319584ed3e9630f9592c4b51252a3f4c770000000000000000000000000000000000000000000000000000a4d88ddd9400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7714,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000082dd0a466e873367cc171335bf8b699f6045918f00000000000000000000000082dd0a466e873367cc171335bf8b699f6045918f000000000000000000000000000000000000000000000000002e1869fe5f95c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7717,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ab40f53f84ad9a8dc03ccb2acf192df56236b573000000000000000000000000ab40f53f84ad9a8dc03ccb2acf192df56236b5730000000000000000000000000000000000000000000000000035366a0992e9d500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7718,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d1bcdc1594dd5511c7cdeaf0dc149b7cfaf87cf1000000000000000000000000d1bcdc1594dd5511c7cdeaf0dc149b7cfaf87cf100000000000000000000000000000000000000000000000000007f4978ad333600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7720,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000097c9b49b19b7f5cad4bec2933a68cfef21f4593900000000000000000000000097c9b49b19b7f5cad4bec2933a68cfef21f459390000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7722,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c76dc52cdc620480c81c8de2c2d71e6fc853a7ff000000000000000000000000c76dc52cdc620480c81c8de2c2d71e6fc853a7ff000000000000000000000000000000000000000000000000000e6506a1faeaad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7723,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e1e28903dab85d87f00feacaea6596fb41ec4e70000000000000000000000006e1e28903dab85d87f00feacaea6596fb41ec4e700000000000000000000000000000000000000000000000000010b8113f0304800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7727,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006cb37d07f9314d47e81a8eb4447120e7521f9dea0000000000000000000000006cb37d07f9314d47e81a8eb4447120e7521f9dea000000000000000000000000000000000000000000000000008dc358448a182d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd497fb4a129b54902bf49068784e564d1f0ad56e5c8cc8d31bab028852b23c31,2021-12-12 11:55:52.000 UTC,0,true -7732,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c204f33f3bc17dd8d637d1edeb1b36c4696c64b4000000000000000000000000c204f33f3bc17dd8d637d1edeb1b36c4696c64b4000000000000000000000000000000000000000000000000008ec12ecd2a5fc500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7733,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e1ddb13c83f96dd45f4db58d76dfbbe0f8c5d5e5000000000000000000000000e1ddb13c83f96dd45f4db58d76dfbbe0f8c5d5e500000000000000000000000000000000000000000000000000ab8bdad64ca20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7734,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b82238511d1e7e28f284c2691823ea971a382a96000000000000000000000000b82238511d1e7e28f284c2691823ea971a382a9600000000000000000000000000000000000000000000000000ab8bdad64ca20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7735,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ce1976f7002d827388c76250173a6cbab0c5ad0d000000000000000000000000ce1976f7002d827388c76250173a6cbab0c5ad0d00000000000000000000000000000000000000000000000000a9f57eb0067b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7736,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000046f7cd2d49ca9ced4ceb57ed5ef81337c576e30c00000000000000000000000046f7cd2d49ca9ced4ceb57ed5ef81337c576e30c00000000000000000000000000000000000000000000000000a904b30749440000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7737,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc103822d42b9861a0d98ae6506de2fd3e23b1d5000000000000000000000000dc103822d42b9861a0d98ae6506de2fd3e23b1d50000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7738,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff7bdbe12a3ad62b2815425c9f0d13d059c729a5000000000000000000000000ff7bdbe12a3ad62b2815425c9f0d13d059c729a500000000000000000000000000000000000000000000000000091fbff51e158000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7739,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009db71fb4da06a8cd93efeaf5bb2f685dced691110000000000000000000000009db71fb4da06a8cd93efeaf5bb2f685dced69111000000000000000000000000000000000000000000000000000ca6076d769e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7740,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000269a042f10fac5b5cf40d2c09810870150773a23000000000000000000000000269a042f10fac5b5cf40d2c09810870150773a23000000000000000000000000000000000000000000000000000ab70d1c7516c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7741,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000794f8281c1a4eb3c631d89bce6b30d60b9f542b0000000000000000000000000794f8281c1a4eb3c631d89bce6b30d60b9f542b00000000000000000000000000000000000000000000000000009345102f4f84000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7742,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc4503e550465fbc3086cf218152ecf9db58144a000000000000000000000000fc4503e550465fbc3086cf218152ecf9db58144a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7743,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ab13daf038e0b10544e14638c1de3052b66b0771000000000000000000000000ab13daf038e0b10544e14638c1de3052b66b077100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7745,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fe1bb644c349dfc485086715c8d80c491a273491000000000000000000000000fe1bb644c349dfc485086715c8d80c491a2734910000000000000000000000000000000000000000000000000011aafcb9c2b6f800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7749,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f815b421839515bf2a277739cc259b16b8e55293000000000000000000000000f815b421839515bf2a277739cc259b16b8e552930000000000000000000000000000000000000000000000000005a207389f7b8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7750,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000472da78b116e06940876819dee6011be15fd85e2000000000000000000000000472da78b116e06940876819dee6011be15fd85e2000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7754,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000618ca00c244fcf86f0f64338a1b480569e312a20000000000000000000000000618ca00c244fcf86f0f64338a1b480569e312a2000000000000000000000000000000000000000000000000020c0fb7f351310000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7755,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fa2740d9e5462b4ffe05d15c3d168c99fbcf76f2000000000000000000000000fa2740d9e5462b4ffe05d15c3d168c99fbcf76f200000000000000000000000000000000000000000000000000c2c97a96bc188000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7756,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f361aa96041eb143ec27f65620dbd7a0ea325540000000000000000000000007f361aa96041eb143ec27f65620dbd7a0ea3255400000000000000000000000000000000000000000000000004ac404080f4f44000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7758,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000238baa6b4a877a55e18295d3be8ff6ffe4ab73c3000000000000000000000000238baa6b4a877a55e18295d3be8ff6ffe4ab73c3000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7759,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000005a9e51f5796310f633a90a9caf21eb57fb3b48bb0000000000000000000000000000000000000000000000000de0b6b3a7640000,,,1,true -7760,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f5f2223ba5756eb5403d05fd0b9df9fffed253f0000000000000000000000002f5f2223ba5756eb5403d05fd0b9df9fffed253f000000000000000000000000000000000000000000000000009eb4ad0c2c684000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7761,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf70e07186c442055218bf20c50522478235c4a0000000000000000000000000bf70e07186c442055218bf20c50522478235c4a000000000000000000000000000000000000000000000000000c3ab54e9e6533100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x4ebde6ebefd2185e27add497979e148f928cf7888da245af8bfec2aaf1007fdc,2022-03-11 19:10:41.000 UTC,0,true -7762,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004bed6811c6bb261ab1a1059d5c4b779efa5735b40000000000000000000000004bed6811c6bb261ab1a1059d5c4b779efa5735b40000000000000000000000000000000000000000000000000085e7bf41d8950000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7765,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000bdee104f077fc445b066c2378559d801fac58a0f000000000000000000000000000000000000000000000002c83956ea49404da0,,,1,true -7766,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f5b1c6d34ce0060f5b6fd6d23bbafcfce44a8ce5000000000000000000000000f5b1c6d34ce0060f5b6fd6d23bbafcfce44a8ce500000000000000000000000000000000000000000000000000a0e731003d117f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7767,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001cbb4c62da977613636a7a779a3f364dfd6906a40000000000000000000000001cbb4c62da977613636a7a779a3f364dfd6906a4000000000000000000000000000000000000000000000000000075d426888e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7772,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001d2d56a152a454d8463ebad575fd85de790e28d30000000000000000000000001d2d56a152a454d8463ebad575fd85de790e28d300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7774,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006816cb8a561000742f459baf54a355cb38bcb01d0000000000000000000000006816cb8a561000742f459baf54a355cb38bcb01d00000000000000000000000000000000000000000000000000129d5951a94d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7776,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000082c9c2dd525a4b3d549b4e2df70d3df9b9a738ed00000000000000000000000082c9c2dd525a4b3d549b4e2df70d3df9b9a738ed0000000000000000000000000000000000000000000000000011da09f214e3eb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7779,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d10f76a657d52adace28314787450d1753d39f85000000000000000000000000d10f76a657d52adace28314787450d1753d39f8500000000000000000000000000000000000000000000000000968603ec148dfd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7781,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008a83bbbee6a05eb158371bc888deda2c853958a60000000000000000000000008a83bbbee6a05eb158371bc888deda2c853958a6000000000000000000000000000000000000000000000000000049281764c70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7782,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9034bcd20119ee7563d145dc817820690afd5fb000000000000000000000000e9034bcd20119ee7563d145dc817820690afd5fb000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7785,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000eba34ce0cd07f2df484ce6f04c6f89b18a2a4760000000000000000000000000eba34ce0cd07f2df484ce6f04c6f89b18a2a47600000000000000000000000000000000000000000000000000eb8a4df52fb0f6800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7786,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000bddf8194ccc04be52d3e66d5dfb63edba8735e40000000000000000000000000bddf8194ccc04be52d3e66d5dfb63edba8735e400000000000000000000000000000000000000000000000000de0db79f17ea7d600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7787,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000f11a600d875f83bf02337622c47d106e45f126d3000000000000000000000000f11a600d875f83bf02337622c47d106e45f126d30000000000000000000000000000000000000000000000000ec2b71761c60c0100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7789,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000b42bc255de791f979a4b5ef296e1cff15e60cd55000000000000000000000000b42bc255de791f979a4b5ef296e1cff15e60cd550000000000000000000000000000000000000000000000000ec2b6d32080fd1800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7790,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000009c4665f252378a1c6d1aaa6172be1885b9cf87570000000000000000000000009c4665f252378a1c6d1aaa6172be1885b9cf87570000000000000000000000000000000000000000000000000ec2b52e8a335d8b00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7791,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000192755ce697d06f694e3b218d1c462b17e7bac50000000000000000000000000192755ce697d06f694e3b218d1c462b17e7bac500000000000000000000000000000000000000000000000000eb429ad131557bf00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7792,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000088146955a7207a1cee4213c3c92b411993588ae200000000000000000000000088146955a7207a1cee4213c3c92b411993588ae20000000000000000000000000000000000000000000000000eb30827623d65a100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7793,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000e11f1b9b2e41e1bdc4ffee660c4414ce10867f1e000000000000000000000000e11f1b9b2e41e1bdc4ffee660c4414ce10867f1e0000000000000000000000000000000000000000000000000eb5d4f036c13ab600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7794,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000004ab31beab901c582cbf32d38f041ecb30f4096d80000000000000000000000004ab31beab901c582cbf32d38f041ecb30f4096d80000000000000000000000000000000000000000000000000eb45b0f8da491b600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7795,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000ebf2658fae3ddae5e4065c3426066ca5b8eb2218000000000000000000000000ebf2658fae3ddae5e4065c3426066ca5b8eb22180000000000000000000000000000000000000000000000000000000000103c8100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7796,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a3c473b5f1d471d7cfc0d0f9b7fb76a8e554ff70000000000000000000000000a3c473b5f1d471d7cfc0d0f9b7fb76a8e554ff7000000000000000000000000000000000000000000000000001675cc77d7210000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7797,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000060d5a2efa14e0772ae04e4f31d1ecb6f4dfd03cf00000000000000000000000060d5a2efa14e0772ae04e4f31d1ecb6f4dfd03cf0000000000000000000000000000000000000000000000000000000000103ade00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7798,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000bd4f6a77a34bd6527b915bf7de56dc61b947d924000000000000000000000000bd4f6a77a34bd6527b915bf7de56dc61b947d9240000000000000000000000000000000000000000000000000000000000104f9200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7799,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000008ea5804927b508057c7361ece58b9604a79da2800000000000000000000000008ea5804927b508057c7361ece58b9604a79da2800000000000000000000000000000000000000000000000000937007b62dc00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x35bde942b8e53ad00ced8db112038bc7eee03b041703c591b05ca2560892a448,2021-12-12 08:20:07.000 UTC,0,true -7800,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000b90b37c007cafda8154d6cf6e1b74924b781f37c000000000000000000000000b90b37c007cafda8154d6cf6e1b74924b781f37c000000000000000000000000000000000000000000000000000000000010529100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7803,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000019c7ff37b882829d6d821733d7a102ee37653df800000000000000000000000019c7ff37b882829d6d821733d7a102ee37653df80000000000000000000000000000000000000000000000000000000001ba814000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7805,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000046d22bcfeedc27c643953b5945d766ae73d4852d0000000000000000000000000000000000000000000000291819341b91c52987,0xe726b47830149d9b59d751af4a4091452eead1d70576d69c7047943920bf81fc,2021-11-26 06:22:09.000 UTC,0,true -7806,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c590ed9c6b18cefb629917280b25e7f08914220d000000000000000000000000c590ed9c6b18cefb629917280b25e7f08914220d000000000000000000000000000000000000000000000000004b52cd32c783ea00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7807,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007aff06e2f0e25d0e291b086b92889ec2df3aa2240000000000000000000000007aff06e2f0e25d0e291b086b92889ec2df3aa224000000000000000000000000000000000000000000000000002642bc8e9667fa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7809,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c730b3763297722f73a2eef7bef8939bfa0900ec000000000000000000000000c730b3763297722f73a2eef7bef8939bfa0900ec00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7810,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001bba1ab4d90cf352c7f4efbaa1a4d782845391a80000000000000000000000001bba1ab4d90cf352c7f4efbaa1a4d782845391a800000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7813,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000007ef5cf7ee561ce57250faca9a99e9f85d50705b60000000000000000000000007ef5cf7ee561ce57250faca9a99e9f85d50705b600000000000000000000000000000000000000000000005adcdd4461fb9b7db200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7814,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff059d87096d1edf40ab0af9f1bd32efebcfb386000000000000000000000000ff059d87096d1edf40ab0af9f1bd32efebcfb386000000000000000000000000000000000000000000000000016e7333114ebfc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7816,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001df9b5a2ad6b5b4611de9cb8a069ff1d200bb8280000000000000000000000001df9b5a2ad6b5b4611de9cb8a069ff1d200bb8280000000000000000000000000000000000000000000000000000befe6f67200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7817,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000087dc8ee4ce4feef4c4d38a84fda9768d39e51cec00000000000000000000000087dc8ee4ce4feef4c4d38a84fda9768d39e51cec00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7818,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000061751119a686def10ee8f60671c670c290f927a000000000000000000000000061751119a686def10ee8f60671c670c290f927a00000000000000000000000000000000000000000000000000313146e991560900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7819,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000067c1bb9d5408655bacd89773f5534d039bfa765a00000000000000000000000067c1bb9d5408655bacd89773f5534d039bfa765a00000000000000000000000000000000000000000000000001515bc7f76f3e8e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7821,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000017c8616c5744bc4b3660238d7c34f1747466c54000000000000000000000000017c8616c5744bc4b3660238d7c34f1747466c54000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7823,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000439ab76ed2369bb987d958a0ee7d1c7c50d7c898000000000000000000000000439ab76ed2369bb987d958a0ee7d1c7c50d7c89800000000000000000000000000000000000000000000021e6f49f35c5e70796600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7824,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9346c2cfd24541af4c54c8ef2e5aa6f3d4834c1000000000000000000000000f9346c2cfd24541af4c54c8ef2e5aa6f3d4834c10000000000000000000000000000000000000000000000000027b8e76324600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7826,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be7dd3a9bede56136bef4669337b64d8dc463146000000000000000000000000be7dd3a9bede56136bef4669337b64d8dc46314600000000000000000000000000000000000000000000000000ac37da05af370000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7827,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000361cf5e2fe3925ff2e7ce5a44bf1a38c12e2fafd000000000000000000000000361cf5e2fe3925ff2e7ce5a44bf1a38c12e2fafd00000000000000000000000000000000000000000000000000abb5868e1c810000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7828,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000035e0050e5c244bdf5a1c8e9b68b8ce51df73de4000000000000000000000000035e0050e5c244bdf5a1c8e9b68b8ce51df73de400000000000000000000000000000000000000000000000000aad806faec390000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7829,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000dd71c2b33bc97260575c53003ec68c65b9d85e00000000000000000000000000dd71c2b33bc97260575c53003ec68c65b9d85e000000000000000000000000000000000000000000000000000ab66f03dc4960000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7830,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c9fd82a2bd26b4cd848e0255b5e77a2f055921b0000000000000000000000003c9fd82a2bd26b4cd848e0255b5e77a2f055921b00000000000000000000000000000000000000000000000000ac17215b93b80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7831,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9ba8d9576c19b61e2ad21963af0dfb9d6d65d7b000000000000000000000000c9ba8d9576c19b61e2ad21963af0dfb9d6d65d7b00000000000000000000000000000000000000000000000000acabea1f6a740000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7833,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007cc5163b4409c1ad7b0395c5deca0e515020fc300000000000000000000000007cc5163b4409c1ad7b0395c5deca0e515020fc3000000000000000000000000000000000000000000000000000ac10b2a9ba130000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7834,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cfea3acaaae83da01c21baeb33c261b0e863616c000000000000000000000000cfea3acaaae83da01c21baeb33c261b0e863616c00000000000000000000000000000000000000000000000000ac17215b93b80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7835,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae93d722db362e3f146dfc35f4eb0eaec71eae3f000000000000000000000000ae93d722db362e3f146dfc35f4eb0eaec71eae3f00000000000000000000000000000000000000000000000000ac847b2b07ad0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7836,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000031bd88e60b7fd952a9b99914de2781b28bf3f35000000000000000000000000031bd88e60b7fd952a9b99914de2781b28bf3f3500000000000000000000000000000000000000000000000000ac847b2b07ad0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7837,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d12acade9a3e66e0fb2c9de727bdd28d12655160000000000000000000000000d12acade9a3e66e0fb2c9de727bdd28d1265516000000000000000000000000000000000000000000000000000ab301f89d3ca0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7838,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000643207a711f81626d8eb3c605097efa50aa3ef6f000000000000000000000000643207a711f81626d8eb3c605097efa50aa3ef6f00000000000000000000000000000000000000000000000000aae4552dc43d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7839,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a82b4429156db6d64ea3977816676b66863309ff000000000000000000000000a82b4429156db6d64ea3977816676b66863309ff00000000000000000000000000000000000000000000000000abc88b0b3bcd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7840,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cfd0ae189d1e08df256d4a4f9031f684489ef72a000000000000000000000000cfd0ae189d1e08df256d4a4f9031f684489ef72a00000000000000000000000000000000000000000000000000abf041980c370000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7841,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea88074ed8a8ba08fa038a59d3fb8387e1c5268c000000000000000000000000ea88074ed8a8ba08fa038a59d3fb8387e1c5268c00000000000000000000000000000000000000000000000000ab1bb512904f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7842,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000139106c7afede02d0957ebc49756e3156c88c7f0000000000000000000000000139106c7afede02d0957ebc49756e3156c88c7f00000000000000000000000000000000000000000000000000ac893c4a4f800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7843,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e0badf855e6e92b94ab584bb6a8699add1b985b0000000000000000000000003e0badf855e6e92b94ab584bb6a8699add1b985b00000000000000000000000000000000000000000000000000ac9081c5720e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7844,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078699b7ab6ccbc5af1d36cef503045b67c614d6800000000000000000000000078699b7ab6ccbc5af1d36cef503045b67c614d6800000000000000000000000000000000000000000000000000aace84bc5c930000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7845,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000008fde022fb6c8020c8ba21b890c24d6a9df0fc9100000000000000000000000008fde022fb6c8020c8ba21b890c24d6a9df0fc9100000000000000000000000000000000000000000000000000ac010951be6b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7848,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ffc1100973a5247afcd0c008e48a8030d3c00bb0000000000000000000000000ffc1100973a5247afcd0c008e48a8030d3c00bb000000000000000000000000000000000000000000000000000ab28da0eb13c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7849,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000040a5f5b02af3e1d3eb64d28c19e840f56490503f00000000000000000000000040a5f5b02af3e1d3eb64d28c19e840f56490503f00000000000000000000000000000000000000000000000000aa8733e727360000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7850,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003054e421b52338d44a1d95e88fc58ba773b0a1120000000000000000000000003054e421b52338d44a1d95e88fc58ba773b0a11200000000000000000000000000000000000000000000000000aa6a1dfa9cfe0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7851,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c5b009d80019070b71c83cd41d79e564418ec4c1000000000000000000000000c5b009d80019070b71c83cd41d79e564418ec4c100000000000000000000000000000000000000000000000000ab8b4ba5715c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7852,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000539eb2aee60122d1a9b5b59554b5648eeadd83a8000000000000000000000000539eb2aee60122d1a9b5b59554b5648eeadd83a800000000000000000000000000000000000000000000000000ace10d40c96e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7853,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a4217061de88bb05f2bac6d8aea3699282db3b9c000000000000000000000000a4217061de88bb05f2bac6d8aea3699282db3b9c00000000000000000000000000000000000000000000000000acebf5797d430000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7854,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f2c61e450304898b7ebf700db2e3e1c0a58daaee000000000000000000000000f2c61e450304898b7ebf700db2e3e1c0a58daaee00000000000000000000000000000000000000000000000000a3f94729f1e49200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7855,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000499428155f893e88abfa89dbef4d5017ee3b92ff000000000000000000000000499428155f893e88abfa89dbef4d5017ee3b92ff0000000000000000000000000000000000000000000000000005fcdc92d4dbe500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7856,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008621bf24c4fe541faa4f3e3d6abf05dbe657b4630000000000000000000000008621bf24c4fe541faa4f3e3d6abf05dbe657b46300000000000000000000000000000000000000000000000000acda56f682260000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7857,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000488c0746bbc745ecdf26498499319ec89a2f96fe000000000000000000000000488c0746bbc745ecdf26498499319ec89a2f96fe00000000000000000000000000000000000000000000000000ac53425fa79d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7858,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039c950d42f47d4d29cb4a581c2bfedb824774cf400000000000000000000000039c950d42f47d4d29cb4a581c2bfedb824774cf400000000000000000000000000000000000000000000000000abd32bab81ff0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7859,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000246bce86884439b5de18730ad32c20bd65216417000000000000000000000000246bce86884439b5de18730ad32c20bd6521641700000000000000000000000000000000000000000000000000ac149cffb8fd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7860,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b856c3909aa63f205fba6c3c3f18bb90c9b0611a000000000000000000000000b856c3909aa63f205fba6c3c3f18bb90c9b0611a00000000000000000000000000000000000000000000000000abcb0f6716880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7861,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ebda3411c77a6a2f6381432f41336d826fe458dd000000000000000000000000ebda3411c77a6a2f6381432f41336d826fe458dd00000000000000000000000000000000000000000000000000ac20eb3291010000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7862,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0386d27624ed1b0eceb501b075446a73152619f000000000000000000000000b0386d27624ed1b0eceb501b075446a73152619f00000000000000000000000000000000000000000000000000ac8001a42d7d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7863,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6e2ca8299f23ca47493bdf5a03c8cf6d15e1fbb000000000000000000000000d6e2ca8299f23ca47493bdf5a03c8cf6d15e1fbb00000000000000000000000000000000000000000000000000ac8001a42d7d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7864,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009c5a6123f4fa37f8563d437c13f7a221dfaf19e10000000000000000000000009c5a6123f4fa37f8563d437c13f7a221dfaf19e100000000000000000000000000000000000000000000000000ac2ee6f7fad70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7865,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002fa5d33b4ef02758cac386cb12b48f7510e5d7fd0000000000000000000000002fa5d33b4ef02758cac386cb12b48f7510e5d7fd00000000000000000000000000000000000000000000000000abcf415583150000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7866,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001fab1a103edc0e7020dcd764c2b621c7da1297e70000000000000000000000001fab1a103edc0e7020dcd764c2b621c7da1297e700000000000000000000000000000000000000000000000000abcf415583150000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7867,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e67500000000000000000000000057ab1ec28d129707052df4df418d58a2d46d5f510000000000000000000000008c6f28f2f1a3c87f0f938b96d27520d9751ec8d9000000000000000000000000656fafabbf1b8c42b4f63ab15f9bee8027a25978000000000000000000000000656fafabbf1b8c42b4f63ab15f9bee8027a259780000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7868,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000878bc19bb4c346bd7db6189a2c3733d1844b0b19000000000000000000000000878bc19bb4c346bd7db6189a2c3733d1844b0b1900000000000000000000000000000000000000000000000000aa4dded75baf0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7869,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000095dacc17b990d7f010109ae64765f67b2748b64a00000000000000000000000095dacc17b990d7f010109ae64765f67b2748b64a00000000000000000000000000000000000000000000000000aa8ccbcfb7f20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7870,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ba1c716dcbcf2ae512d275752d38b027c9d1ff50000000000000000000000002ba1c716dcbcf2ae512d275752d38b027c9d1ff500000000000000000000000000000000000000000000000000a9e9307d2e770000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7871,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d1f25c3605a4d6ba7f213e3bcaef2001603b98b0000000000000000000000000d1f25c3605a4d6ba7f213e3bcaef2001603b98b000000000000000000000000000000000000000000000000000aa7a0eeb06490000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7872,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032d641b2d54a46b9e4448bf35f667e17da2fd14d00000000000000000000000032d641b2d54a46b9e4448bf35f667e17da2fd14d000000000000000000000000000000000000000000000000026a3bd6fd71075e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7873,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c272a7f4cb36058880362dfa5c5fcd330e8084ad000000000000000000000000c272a7f4cb36058880362dfa5c5fcd330e8084ad00000000000000000000000000000000000000000000000000ac0ad328bbb40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7874,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076052b96412a486647a911562f1c395394587dd900000000000000000000000076052b96412a486647a911562f1c395394587dd900000000000000000000000000000000000000000000000000ac5c356d5bfd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7875,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a920cd19f49f14185fba187b6cb45a8f909ea31c000000000000000000000000a920cd19f49f14185fba187b6cb45a8f909ea31c00000000000000000000000000000000000000000000000000ac5c356d5bfd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7876,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043d968da7bb8d89a9eae51088bde865fc636cb9400000000000000000000000043d968da7bb8d89a9eae51088bde865fc636cb9400000000000000000000000000000000000000000000000000ac2ee6f7fad70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7877,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000048d932097ea2e401fab65426a14c7d58b0a0e40700000000000000000000000048d932097ea2e401fab65426a14c7d58b0a0e40700000000000000000000000000000000000000000000000000ac2ee6f7fad70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7878,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000075e41492b7915ace101d66946f36e61885efe3fc00000000000000000000000075e41492b7915ace101d66946f36e61885efe3fc00000000000000000000000000000000000000000000000000ac2ee6f7fad70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7879,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6ab573c00e0c4340bbe89c500d16452e2e203b9000000000000000000000000b6ab573c00e0c4340bbe89c500d16452e2e203b900000000000000000000000000000000000000000000000000aac54a163a900000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7880,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f8d16f7695bb0232619f183f2903854ec33670cc000000000000000000000000f8d16f7695bb0232619f183f2903854ec33670cc00000000000000000000000000000000000000000000000000abece672e8930000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7881,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000985abc5fd8d85cc4e0d0c17275535d5d27bf2bd0000000000000000000000000985abc5fd8d85cc4e0d0c17275535d5d27bf2bd000000000000000000000000000000000000000000000000000a7233d69492c2b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7883,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba22884e029afd269c42b069cf41df45170ef3da000000000000000000000000ba22884e029afd269c42b069cf41df45170ef3da0000000000000000000000000000000000000000000000000148a6a40063021900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7885,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004009526a0679bfca93056822ffef50265ac1c1f50000000000000000000000004009526a0679bfca93056822ffef50265ac1c1f50000000000000000000000000000000000000000000000000159dd434c812bd300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x29c36db02a90d6484f45427336bad3cce0f702829c98687c798e07f218862e0b,2022-03-21 01:19:27.000 UTC,0,true -7886,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000003d2a9ff2e85b64fbdc433dc8ffe8f4bf3358999e0000000000000000000000000000000000000000000000a1224e02cddb531aaa,,,1,true -7887,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000985ced69658f06727ecb691b16987191a5250634000000000000000000000000985ced69658f06727ecb691b16987191a5250634000000000000000000000000000000000000000000000000005a1e203eae76b400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7889,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fe18fa79295de47b6602236c7b46b487f6927a30000000000000000000000000fe18fa79295de47b6602236c7b46b487f6927a30000000000000000000000000000000000000000000000000002cd2692658780000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7890,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009be5ca1ac018460574933a2e065cb04f675ee6260000000000000000000000009be5ca1ac018460574933a2e065cb04f675ee626000000000000000000000000000000000000000000000000015713afb7ebc07800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd03d5e3cee5945c85d1fede621cafb7543e972dc61183926fb8ba6c1e7a52630,2022-04-13 06:28:11.000 UTC,0,true -7891,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000187d7570362140deda52d4ead921b00c3a2efb1f000000000000000000000000187d7570362140deda52d4ead921b00c3a2efb1f000000000000000000000000000000000000000000000000005f74f5e92becaf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7892,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5cf553b66ce0dafb2acf1c70e0e8af7232459cf000000000000000000000000e5cf553b66ce0dafb2acf1c70e0e8af7232459cf00000000000000000000000000000000000000000000000000240b882cf9b8df00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7893,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009039326a3c562bcb02c04db463e4790f0ec79ab30000000000000000000000009039326a3c562bcb02c04db463e4790f0ec79ab3000000000000000000000000000000000000000000000000011338eaf7ccfafd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7894,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ad014a4dd7893447242333dfeed5852d57b72d00000000000000000000000007ad014a4dd7893447242333dfeed5852d57b72d000000000000000000000000000000000000000000000000000442361743b9ed700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7896,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc36df9e64431481fd24eac8afe9adafe8f449ec000000000000000000000000cc36df9e64431481fd24eac8afe9adafe8f449ec000000000000000000000000000000000000000000000000005dc919cb8a3a3d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7897,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b5c34f3bc6e950e1c4756b058ee31a744716a64e000000000000000000000000b5c34f3bc6e950e1c4756b058ee31a744716a64e000000000000000000000000000000000000000000000000004f2764812ae5d800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7898,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e4bbec1cee2de29632cfdfddae9b22243afb9c16000000000000000000000000e4bbec1cee2de29632cfdfddae9b22243afb9c1600000000000000000000000000000000000000000000000000a2aa6450d95c4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7901,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000820b0cbe7f4df3b3f186377a2fa9d626062ae98e000000000000000000000000820b0cbe7f4df3b3f186377a2fa9d626062ae98e00000000000000000000000000000000000000000000000000146de3bfcb794000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7902,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9f513d12057e23b0719ead57af009e77f23a9d5000000000000000000000000f9f513d12057e23b0719ead57af009e77f23a9d5000000000000000000000000000000000000000000000000001e7e3a44fdb40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7903,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000018695c5660fc0bf3a3f50c5d81477686c2ffa5e000000000000000000000000018695c5660fc0bf3a3f50c5d81477686c2ffa5e000000000000000000000000000000000000000000000000005da6a79d1eaef400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7904,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000056498320e99df15093e6e052c956bb188da210af00000000000000000000000056498320e99df15093e6e052c956bb188da210af000000000000000000000000000000000000000000000000006c22ad5047791c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9f88d38960c80ab785d15875de42de9984fa55a19be3febe151a94db9f47c40a,2022-03-10 10:13:02.000 UTC,0,true -7905,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c65c2ee6e87264139139553d5e4266ebc29b4020000000000000000000000000c65c2ee6e87264139139553d5e4266ebc29b40200000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7906,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d41cc18d57125fb07e3cd2ebb322c6c4cb4eef3e000000000000000000000000d41cc18d57125fb07e3cd2ebb322c6c4cb4eef3e00000000000000000000000000000000000000000000000000035fc57210514000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7907,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc47bfe4887b82cccf2b1af40d1bf6a6e6708e89000000000000000000000000bc47bfe4887b82cccf2b1af40d1bf6a6e6708e89000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7908,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d907f8a147df1120602818039ee7e0d801e9db0a000000000000000000000000d907f8a147df1120602818039ee7e0d801e9db0a000000000000000000000000000000000000000000000000005ce6301578e68500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7909,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c01528c7e09ce05e7734d915f5009ad40e056886000000000000000000000000c01528c7e09ce05e7734d915f5009ad40e05688600000000000000000000000000000000000000000000000000669a34fd1d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7911,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b1118ad43a3184850475d1fb35080c9c00720885000000000000000000000000b1118ad43a3184850475d1fb35080c9c0072088500000000000000000000000000000000000000000000000000d420dee112365600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7912,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000528db62f1828b284eb2041296aecb4dac9f0515c00000000000000000000000000000000000000000000000059cc6d80cb5ca42c,,,1,true -7914,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000003a58d948bbc6e4ee1cac210f1b4451bc3274c3e00000000000000000000000003a58d948bbc6e4ee1cac210f1b4451bc3274c3e00000000000000000000000000000000000000000000000029a2241af62c070800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7915,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000499428155f893e88abfa89dbef4d5017ee3b92ff000000000000000000000000499428155f893e88abfa89dbef4d5017ee3b92ff00000000000000000000000000000000000000000000000000302eb67d7142f800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7916,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002edf166a658af79c5c8bb268265a7def157eb62e0000000000000000000000002edf166a658af79c5c8bb268265a7def157eb62e000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7917,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000035164610721ffab73d28e4a16e32607288946af400000000000000000000000035164610721ffab73d28e4a16e32607288946af40000000000000000000000000000000000000000000000000000b74e279e070000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7920,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a12747381fa12208b493f57fe0e28d59a42ce7e0000000000000000000000003a12747381fa12208b493f57fe0e28d59a42ce7e00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7924,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c5a8674e1e244c61a4587849ccb0e66653072a00000000000000000000000000c5a8674e1e244c61a4587849ccb0e66653072a00000000000000000000000000000000000000000000000000003712499b08218000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7925,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008659adf49357be438c6337a524c4d08559aa09f20000000000000000000000008659adf49357be438c6337a524c4d08559aa09f2000000000000000000000000000000000000000000000000005a4daa4e80ad7d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7926,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f2f064a3e85308efbd67ea1fa9f3d58c8f8e8123000000000000000000000000f2f064a3e85308efbd67ea1fa9f3d58c8f8e81230000000000000000000000000000000000000000000000000dc7d83d25f6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7927,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdb8e2cb7e7af95ca2e9c327ce255d1f92e19efb000000000000000000000000bdb8e2cb7e7af95ca2e9c327ce255d1f92e19efb000000000000000000000000000000000000000000000000043555f6d2a7705a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7928,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005795b03e97c48c57864c383186921cde539806ef0000000000000000000000005795b03e97c48c57864c383186921cde539806ef00000000000000000000000000000000000000000000000000615a740c351f9200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7929,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7f34f09416de766e03003e50dcf6f27e072ce73000000000000000000000000c7f34f09416de766e03003e50dcf6f27e072ce7300000000000000000000000000000000000000000000000001459ca2ae03484100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x451d9237d699ac260867e39c15c9d9f136d2e79422a0a99b1d9bdc565a081320,2022-01-08 11:00:32.000 UTC,0,true -7930,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e11f47e997c19f39b0559d3a2be89501e0615e18000000000000000000000000e11f47e997c19f39b0559d3a2be89501e0615e18000000000000000000000000000000000000000000000000001ea9db27cd080000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7932,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1c6f64a27a3134aac5808e862601747d9bd0bcb000000000000000000000000f1c6f64a27a3134aac5808e862601747d9bd0bcb000000000000000000000000000000000000000000000000057df149cd31822400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x322e9aa1863a8dc85ba7a390f40b7e369f79e487421374cbdec8283b25acc4e7,2021-12-20 09:38:08.000 UTC,0,true -7934,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5475abd39d6b73a3b74fb535e46bc6c9c032b2d000000000000000000000000e5475abd39d6b73a3b74fb535e46bc6c9c032b2d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7935,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f5bf901261249bae99c6eaaddf8e9907b756de10000000000000000000000002f5bf901261249bae99c6eaaddf8e9907b756de1000000000000000000000000000000000000000000000000005d6e183917a0b200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7936,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009094eff2adf2ad7c22c5419c427042e707fe70160000000000000000000000009094eff2adf2ad7c22c5419c427042e707fe7016000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7938,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009094eff2adf2ad7c22c5419c427042e707fe70160000000000000000000000009094eff2adf2ad7c22c5419c427042e707fe70160000000000000000000000000000000000000000000000000003328b944c400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7939,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ce09978479907597943dd81dc3c318b0ed5ef6d0000000000000000000000004ce09978479907597943dd81dc3c318b0ed5ef6d00000000000000000000000000000000000000000000000000a4ebc75921a46700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7940,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ab8e1229e0d1ba185f2940a7f4e3835bcb106acf000000000000000000000000ab8e1229e0d1ba185f2940a7f4e3835bcb106acf0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7941,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000b5e2f50af7be3724198a74f8529ada0b135bb87d000000000000000000000000b5e2f50af7be3724198a74f8529ada0b135bb87d0000000000000000000000000000000000000000000000000000000006d0f46800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x79fa17de86315bdaf90cad35956338624cbc5787a33c97daa21b9a0c486f0a4d,2022-09-07 15:15:32.000 UTC,0,true -7942,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005f4b9a4300cbd45b113f6028f7f6dbd1b5955f800000000000000000000000005f4b9a4300cbd45b113f6028f7f6dbd1b5955f80000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7943,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f90c4ca068955811f6b57b953c552ed73946ab86000000000000000000000000f90c4ca068955811f6b57b953c552ed73946ab86000000000000000000000000000000000000000000000000002e2f6e5e14800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7944,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e83c1c23fe932de2b3e9048623f6ec812c837478000000000000000000000000e83c1c23fe932de2b3e9048623f6ec812c83747800000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7946,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003807865c2b82eb2b41dbfe51a328be275d8433980000000000000000000000003807865c2b82eb2b41dbfe51a328be275d84339800000000000000000000000000000000000000000000000000421878ca4ba30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xac7b225d07d1e53214a66c7a6538388a85239e942afd3cc094876209fb5c5f5c,2022-03-13 09:17:38.000 UTC,0,true -7947,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000e4e87ef976eab568fda866d23141d37950baf4d9000000000000000000000000e4e87ef976eab568fda866d23141d37950baf4d9000000000000000000000000000000000000000000000460d5281b496a5f4bc300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -7949,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e4e87ef976eab568fda866d23141d37950baf4d9000000000000000000000000e4e87ef976eab568fda866d23141d37950baf4d90000000000000000000000000000000000000000000000000b428ceb6623e85400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7950,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d274079a4157cd9ad7545f0ff7fb3d7b472fb570000000000000000000000005d274079a4157cd9ad7545f0ff7fb3d7b472fb570000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7951,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a509ef076b42e1face74c267f454e60f1ce779bd000000000000000000000000a509ef076b42e1face74c267f454e60f1ce779bd00000000000000000000000000000000000000000000000000002d79883d200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7952,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006577d0b14abfce382d3912a9eff263b7981fb35b0000000000000000000000006577d0b14abfce382d3912a9eff263b7981fb35b00000000000000000000000000000000000000000000000000002d79883d200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7953,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eeaa75be33235789287252d238cbe9f2c58ac051000000000000000000000000eeaa75be33235789287252d238cbe9f2c58ac05100000000000000000000000000000000000000000000000000002d79883d200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7954,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006577d0b14abfce382d3912a9eff263b7981fb35b0000000000000000000000006577d0b14abfce382d3912a9eff263b7981fb35b00000000000000000000000000000000000000000000000000002d79883d200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7955,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000443571116e56aa45b6bf8408641ef13474708c21000000000000000000000000443571116e56aa45b6bf8408641ef13474708c2100000000000000000000000000000000000000000000000000002d79883d200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7956,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a6b9b2568b071e4d06cf740371b7607ba6469fe2000000000000000000000000a6b9b2568b071e4d06cf740371b7607ba6469fe2000000000000000000000000000000000000000000000000001ef6c3e593210000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7957,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bfd3ab57c7a6b5a1e8fd18d728123d26373bec66000000000000000000000000bfd3ab57c7a6b5a1e8fd18d728123d26373bec6600000000000000000000000000000000000000000000000000002d79883d200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7958,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f78944945b0e0450f5ecde5d8e2004fba5b8a3f4000000000000000000000000f78944945b0e0450f5ecde5d8e2004fba5b8a3f400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7959,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b32476579accb1dab72bbb39c843857d92d076b0000000000000000000000002b32476579accb1dab72bbb39c843857d92d076b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7961,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000002e9a5f06ad0c9b372e696991b4091534cf3e7c200000000000000000000000002e9a5f06ad0c9b372e696991b4091534cf3e7c2000000000000000000000000000000000000000000000000000997a2bce4c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7962,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e08cc99723d23b660f7c4aabffae784e2e5aaaee000000000000000000000000e08cc99723d23b660f7c4aabffae784e2e5aaaee00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7964,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9c8c0adb686ba89c18d4b5428223c6111349f68000000000000000000000000e9c8c0adb686ba89c18d4b5428223c6111349f6800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7966,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b32476579accb1dab72bbb39c843857d92d076b0000000000000000000000002b32476579accb1dab72bbb39c843857d92d076b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7967,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f784bcac40eb7ba2b3969e8e13227679f62d0c27000000000000000000000000f784bcac40eb7ba2b3969e8e13227679f62d0c2700000000000000000000000000000000000000000000000000051d8e26c99d1c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7969,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000826b31fc2badc1cc8724de4b3f69b79201877d61000000000000000000000000826b31fc2badc1cc8724de4b3f69b79201877d61000000000000000000000000000000000000000000000000001f5c90a176e50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7970,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000245f36c27de0d8f371b303cca1239b797802a25e000000000000000000000000245f36c27de0d8f371b303cca1239b797802a25e000000000000000000000000000000000000000000000000000c41c1b879a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7972,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004be97ec3f1c6a386d5ddf2c0a72e98463bb107ad0000000000000000000000004be97ec3f1c6a386d5ddf2c0a72e98463bb107ad0000000000000000000000000000000000000000000000000008b53920d0bf8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7973,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000fc0e14cf00122df50f0fc8ea599572a0386b1e20000000000000000000000000fc0e14cf00122df50f0fc8ea599572a0386b1e20000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7974,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e24f8451461a17aacfbfdd1521cc47f432c8d349000000000000000000000000e24f8451461a17aacfbfdd1521cc47f432c8d349000000000000000000000000000000000000000000000000025205397e0b7a4500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf87933b5e67a59e1825c4a399362b821379e586fc4898365326558164b1fee3f,2022-02-25 15:39:20.000 UTC,0,true -7976,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000302e559551f93374ef1a0feaed42e34f36ff72e4000000000000000000000000302e559551f93374ef1a0feaed42e34f36ff72e4000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7977,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7913ee1f2a4f307917a7099b6903b5251745d24000000000000000000000000c7913ee1f2a4f307917a7099b6903b5251745d24000000000000000000000000000000000000000000000000001ebb79aac8250000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7979,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a0c5b14cdf7daeaae92a0313d81322d4f7f92275000000000000000000000000a0c5b14cdf7daeaae92a0313d81322d4f7f922750000000000000000000000000000000000000000000000000044a88afd6c21c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7980,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006b5f4db264257d14c84c2cfe4beb8dbe2e93de1a0000000000000000000000006b5f4db264257d14c84c2cfe4beb8dbe2e93de1a000000000000000000000000000000000000000000000000001f36400ecaaa0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7982,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e153b3f9fce55abc3ab26d6513a634c5cb5f9213000000000000000000000000e153b3f9fce55abc3ab26d6513a634c5cb5f9213000000000000000000000000000000000000000000000000000b5e620f48000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7983,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e292babb03689c7d55d83a903f9da81b55ec8959000000000000000000000000e292babb03689c7d55d83a903f9da81b55ec89590000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7986,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002370ab10aa4965abad72e08ee40df72aaede124f0000000000000000000000002370ab10aa4965abad72e08ee40df72aaede124f0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7987,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9feb729a473a46b1939a5b409096f754f97eeb9000000000000000000000000c9feb729a473a46b1939a5b409096f754f97eeb900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7988,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000003ba15bf6d3c597d9e7e0eb76ea522fc089ec30200000000000000000000000003ba15bf6d3c597d9e7e0eb76ea522fc089ec30200000000000000000000000000000000000000000000000000b807d3575d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7989,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e5d20108ffcbdcf9bf9be93c0bb0fb0c7fa83130000000000000000000000004e5d20108ffcbdcf9bf9be93c0bb0fb0c7fa831300000000000000000000000000000000000000000000000000201b051d1d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7990,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000762009efa840eb7ed893049b2d2b787502879d7c000000000000000000000000762009efa840eb7ed893049b2d2b787502879d7c000000000000000000000000000000000000000000000000001f1c3daef6730000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7991,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021a8394c620a3ed1327f689ccf319aba059aca8e00000000000000000000000021a8394c620a3ed1327f689ccf319aba059aca8e00000000000000000000000000000000000000000000000000ca8132b032800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7992,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5788c5d9a05c7b9b85eef7501a0689451823bc2000000000000000000000000e5788c5d9a05c7b9b85eef7501a0689451823bc200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7993,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c353fa34b747faef8035f09c1aa90136eaf5a153000000000000000000000000c353fa34b747faef8035f09c1aa90136eaf5a153000000000000000000000000000000000000000000000000001fa470a787880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7994,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000274c3e5dc565a4845fa73acf6536a01f3e43104f000000000000000000000000274c3e5dc565a4845fa73acf6536a01f3e43104f00000000000000000000000000000000000000000000000000a6fa404071800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7995,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d830ee097539cc5602cca64cb67ccab851d08210000000000000000000000000d830ee097539cc5602cca64cb67ccab851d0821000000000000000000000000000000000000000000000000001fa470a787880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7996,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000852390120f80a07537d20a97c94627edbf58adb1000000000000000000000000852390120f80a07537d20a97c94627edbf58adb100000000000000000000000000000000000000000000000000ee08251ff3800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7997,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5788c5d9a05c7b9b85eef7501a0689451823bc2000000000000000000000000e5788c5d9a05c7b9b85eef7501a0689451823bc200000000000000000000000000000000000000000000000000a36cc19bab000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7998,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000046b6f4f9c11a9fc95c13fc49eb8d16871075aa2200000000000000000000000046b6f4f9c11a9fc95c13fc49eb8d16871075aa22000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -7999,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a04550e15035c1145d8692edcc6f5f8ab7101040000000000000000000000003a04550e15035c1145d8692edcc6f5f8ab710104000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8000,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6cc8af1b4299eb37bee7de464f4c5152ba3137e000000000000000000000000b6cc8af1b4299eb37bee7de464f4c5152ba3137e000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8001,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071ea03598702d2fef81cf676d8fa7083c2b58f4300000000000000000000000071ea03598702d2fef81cf676d8fa7083c2b58f43000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8002,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001ca9e9cc095b0bc7d863c8f23c40d2bfa81ddec20000000000000000000000001ca9e9cc095b0bc7d863c8f23c40d2bfa81ddec2000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8003,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000595ef74cfca44eac149740e18d6d8c80309c4e1b000000000000000000000000595ef74cfca44eac149740e18d6d8c80309c4e1b0000000000000000000000000000000000000000000000008da7acf4eb27156b00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -8004,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f4213796a6ce2c24bcbc2074ad66b14c94804a40000000000000000000000002f4213796a6ce2c24bcbc2074ad66b14c94804a40000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8006,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000602c0269eb2d8a5dbadca05998eb72d9246d850d000000000000000000000000602c0269eb2d8a5dbadca05998eb72d9246d850d00000000000000000000000000000000000000000000000000003f78ce229bc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8007,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000301b15702fafe00394f3ff772bcf97cf18cfc668000000000000000000000000301b15702fafe00394f3ff772bcf97cf18cfc66800000000000000000000000000000000000000000000000002c1a76ac146630000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8008,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007b9c1807a853fc1ecc1bf4b86e190835d17cd71b0000000000000000000000007b9c1807a853fc1ecc1bf4b86e190835d17cd71b00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8009,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002237ea9cc8bc70eaa5a9bf898f186c7a0e89c8820000000000000000000000002237ea9cc8bc70eaa5a9bf898f186c7a0e89c88200000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8011,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b3d8bfee35c6272095db789b6eaa45ac2fb571b1000000000000000000000000b3d8bfee35c6272095db789b6eaa45ac2fb571b10000000000000000000000000000000000000000000000000028b87ee55e9f8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8013,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005cc123eabfd7f93e562e28ab5592d5575536ef240000000000000000000000005cc123eabfd7f93e562e28ab5592d5575536ef240000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8014,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000045ecd61c87bd0df7993da8f2b7b9084429da496c0000000000000000000000000000000000000000000000000de0b6b3a7640000,,,1,true -8017,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000054bc0b774feac29bba39fb6b5f88d39cb8ca669800000000000000000000000054bc0b774feac29bba39fb6b5f88d39cb8ca6698000000000000000000000000000000000000000000000000003b0bf3ac14f38a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8018,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000585e9ce05b06a863edd448a7e6b7ff67494b27ab000000000000000000000000585e9ce05b06a863edd448a7e6b7ff67494b27ab00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8020,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001ae1220658bf9cd4d02cfd17409c09fb9e8fd9f50000000000000000000000001ae1220658bf9cd4d02cfd17409c09fb9e8fd9f5000000000000000000000000000000000000000000000000002ef7500153378d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8021,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000b248c1f8f0c8dc709acbcd8b83d8ef58571231b0000000000000000000000000b248c1f8f0c8dc709acbcd8b83d8ef58571231b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8023,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e3d8720e780ad1db79ee16f08f164dfc688a9135000000000000000000000000e3d8720e780ad1db79ee16f08f164dfc688a9135000000000000000000000000000000000000000000000000001e8eba6642450000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8024,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000667cea6cd8665c5de673ce447aaee3ec60c93e22000000000000000000000000667cea6cd8665c5de673ce447aaee3ec60c93e22000000000000000000000000000000000000000000000000001f221d2ff4d20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8025,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001eac26a4ef3ab37d79ab27fa2c753fdc1d75d6570000000000000000000000001eac26a4ef3ab37d79ab27fa2c753fdc1d75d657000000000000000000000000000000000000000000000000001aaf45d1055a1200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8026,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b34c0cfe54b6249bcb4ae4baca21e44e53199ea7000000000000000000000000b34c0cfe54b6249bcb4ae4baca21e44e53199ea7000000000000000000000000000000000000000000000000001efe50f923520000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8027,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ec51820b336f661af970527098b8347f4f0938c6000000000000000000000000ec51820b336f661af970527098b8347f4f0938c600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8028,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000081d7d26fbc67b56bebf9c6b1937ff3ebeae6e7bc00000000000000000000000081d7d26fbc67b56bebf9c6b1937ff3ebeae6e7bc0000000000000000000000000000000000000000000000000001a72724d1c10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8029,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f9013b8bff314203b13f6d20fa4af1b1024eeb70000000000000000000000008f9013b8bff314203b13f6d20fa4af1b1024eeb7000000000000000000000000000000000000000000000000001940543d67ad3900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8030,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000015735d481dadf3dcb8be78f716be048112796ba400000000000000000000000015735d481dadf3dcb8be78f716be048112796ba4000000000000000000000000000000000000000000000000005bebe4aa1aa28a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8032,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba637c7f42470561dcf609ca673550ee6832cf63000000000000000000000000ba637c7f42470561dcf609ca673550ee6832cf630000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8033,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000063b2eb82073447bad2e02113e615c207c5ee616700000000000000000000000063b2eb82073447bad2e02113e615c207c5ee616700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8034,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000041f0bef1b9b6002d2a8826067613e83d41384f5800000000000000000000000041f0bef1b9b6002d2a8826067613e83d41384f5800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8035,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ab5dd55a7c1632fdca0d3b60c28b5461a62f0aa6000000000000000000000000ab5dd55a7c1632fdca0d3b60c28b5461a62f0aa600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8036,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007014a2c9a116742947faabe727b6eb6242fc38fe0000000000000000000000007014a2c9a116742947faabe727b6eb6242fc38fe00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8037,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf9cedfde652368a9b9bb490b3253583d5763967000000000000000000000000bf9cedfde652368a9b9bb490b3253583d576396700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8038,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005fa73bea8e33f6fd4441b60db920b038e979ec7e0000000000000000000000005fa73bea8e33f6fd4441b60db920b038e979ec7e000000000000000000000000000000000000000000000000000b2cf37ea16a4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8039,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6b1ee03c47be152c024a8879edafca28cf9258c000000000000000000000000b6b1ee03c47be152c024a8879edafca28cf9258c00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8040,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d0cfc0f638f7496193356c3e4f0bcf9747b55310000000000000000000000007d0cfc0f638f7496193356c3e4f0bcf9747b55310000000000000000000000000000000000000000000000000071314894c8730300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xfcf8e57290a0e647d393a201c25021e755ac92abd3f6b610bf6322cf24d85f3b,2022-05-26 03:57:41.000 UTC,0,true -8042,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001c4dc8ced26e8b4714fbe4c9e9e21e517ec29eae0000000000000000000000001c4dc8ced26e8b4714fbe4c9e9e21e517ec29eae00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8043,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032e0aa7d26551ab64d834bb6c19bd4ee38e4979b00000000000000000000000032e0aa7d26551ab64d834bb6c19bd4ee38e4979b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8044,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000098b577dbeec67660dceff6eb7d05321a233eec1800000000000000000000000098b577dbeec67660dceff6eb7d05321a233eec1800000000000000000000000000000000000000000000000000026c4c2863d3be00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8045,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000883fbb89b7afeca8f58301a40e579e95c612e540000000000000000000000000883fbb89b7afeca8f58301a40e579e95c612e5400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8046,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f57af0c2231726e584086faa4266bee467109fa2000000000000000000000000f57af0c2231726e584086faa4266bee467109fa200000000000000000000000000000000000000000000000000735356d3f223ce00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8047,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3234d4e330ad5e8a7e6a0c6bc458b24bdf7d3bf000000000000000000000000d3234d4e330ad5e8a7e6a0c6bc458b24bdf7d3bf0000000000000000000000000000000000000000000000000002ee06a83ecc0f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8048,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000001dadf8110a7b5f2dc6d13bcb26599ae255b493000000000000000000000000001dadf8110a7b5f2dc6d13bcb26599ae255b4930000000000000000000000000000000000000000000000000001ea70f3384aa0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8050,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000725313887d5651f0f2d676d354334b70cf84ec8a000000000000000000000000725313887d5651f0f2d676d354334b70cf84ec8a00000000000000000000000000000000000000000000000005881b0df04f6bf500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8051,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000469b83988610b92aac8c3ec1fdac42d531b9178a000000000000000000000000469b83988610b92aac8c3ec1fdac42d531b9178a0000000000000000000000000000000000000000000000000c7d713b49da000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8052,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e7197e7cca2355b83a33e345bc6a65c722d03630000000000000000000000001e7197e7cca2355b83a33e345bc6a65c722d0363000000000000000000000000000000000000000000000000002718e5c01ed21600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8053,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f33856be70bb5fbccb08cbe5753336beab04ba40000000000000000000000003f33856be70bb5fbccb08cbe5753336beab04ba40000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8055,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea22e2411b5c1812aa27724f61178e439f0cc7aa000000000000000000000000ea22e2411b5c1812aa27724f61178e439f0cc7aa00000000000000000000000000000000000000000000000002c1d4719e39e60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8057,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f33856be70bb5fbccb08cbe5753336beab04ba40000000000000000000000003f33856be70bb5fbccb08cbe5753336beab04ba40000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8058,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f33856be70bb5fbccb08cbe5753336beab04ba40000000000000000000000003f33856be70bb5fbccb08cbe5753336beab04ba40000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8059,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ee3479373e6a31185a5cf9a40a00469814b21420000000000000000000000005ee3479373e6a31185a5cf9a40a00469814b214200000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8060,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eb7c67585ca996b4b20529f02ff2046c75edcafc000000000000000000000000eb7c67585ca996b4b20529f02ff2046c75edcafc000000000000000000000000000000000000000000000000012e991fb9cbaddf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8061,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007525af9498280da3fc2f5498c495e89561b8ee790000000000000000000000007525af9498280da3fc2f5498c495e89561b8ee79000000000000000000000000000000000000000000000000015fb7f9b8c3800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xbcc8124d5316c46cfa4f767d04abc2fdf98b78372209179b0ad6fef18392234c,2021-12-08 02:48:38.000 UTC,0,true -8062,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca7c767854b1e7305de07247ab85e30543d1d9c9000000000000000000000000ca7c767854b1e7305de07247ab85e30543d1d9c90000000000000000000000000000000000000000000000000ddc46ae96765a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8063,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003526f94b578c224601d5f198dbb1643910c2f93b0000000000000000000000003526f94b578c224601d5f198dbb1643910c2f93b000000000000000000000000000000000000000000000000002d200865bf880600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8065,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000667816ea7e29233aa2c4f5e6d2d17b658156902d000000000000000000000000667816ea7e29233aa2c4f5e6d2d17b658156902d000000000000000000000000000000000000000000000000003c01cb5c59898000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8067,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000092eead2ea4b7044692dfdd524008c36c03b632fd00000000000000000000000092eead2ea4b7044692dfdd524008c36c03b632fd0000000000000000000000000000000000000000000000000056f3d8a43ab78400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8069,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d7955d1e697389c6b748ce52cfca7b536fa2ebf0000000000000000000000007d7955d1e697389c6b748ce52cfca7b536fa2ebf00000000000000000000000000000000000000000000000000446b247ef4e48c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8070,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000216e36333cfed41cdfcda3fa2642f6c4b14d4358000000000000000000000000216e36333cfed41cdfcda3fa2642f6c4b14d43580000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8072,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000066f742da1ec05f3531c161e1412ac58abed58ba100000000000000000000000066f742da1ec05f3531c161e1412ac58abed58ba100000000000000000000000000000000000000000000000000369c1405ce37be00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8073,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000deaa628859122cb4b570882aa8bc9c786e8a932a000000000000000000000000deaa628859122cb4b570882aa8bc9c786e8a932a000000000000000000000000000000000000000000000000016916718eae33bd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8077,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000001b2e7503a3da1f16c11be33d35640e379c80b94a0000000000000000000000000000000000000000000000008963dd8c2c5e0000,,,1,true -8078,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004f71a91733f55c82fd29f064b37f7d83b2ee86d00000000000000000000000004f71a91733f55c82fd29f064b37f7d83b2ee86d0000000000000000000000000000000000000000000000000015ae60b7a4110000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8079,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac7adda48ffb1b1c756bcacde9dec410927509e5000000000000000000000000ac7adda48ffb1b1c756bcacde9dec410927509e5000000000000000000000000000000000000000000000000005fec5b60ef800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8080,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007c85d1682a48ae42ed1923b53e7b0e2c4bd72b050000000000000000000000007c85d1682a48ae42ed1923b53e7b0e2c4bd72b050000000000000000000000000000000000000000000000000062eb842683650000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8081,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d70327e5620f5b8199f9e83e7281839286870dd7000000000000000000000000d70327e5620f5b8199f9e83e7281839286870dd700000000000000000000000000000000000000000000000007796610160dd14900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8083,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000345cec5bb2626e347c02d493950c20dd16f63ad9000000000000000000000000345cec5bb2626e347c02d493950c20dd16f63ad9000000000000000000000000000000000000000000000000000137a9046d8e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8084,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004fe62c9735b59c8a1c6b6e10e657b976401a43b00000000000000000000000004fe62c9735b59c8a1c6b6e10e657b976401a43b000000000000000000000000000000000000000000000000006866332e9e57ee800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7c4e5dcb3929603f4cc6148a16f3254c4b5869d1c5fe075eb2cd66a3c8917c1b,2022-03-28 08:39:08.000 UTC,0,true -8085,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ad2b87c7b0e86401660c3ba70ab1222556dac987000000000000000000000000ad2b87c7b0e86401660c3ba70ab1222556dac9870000000000000000000000000000000000000000000000003ad855409f5d70d000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2a402fbe79d58916a1419619edaea3e530858a0630e20901830bc39bbdd3123d,2021-11-25 11:47:04.000 UTC,0,true -8087,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055b1edfe744e4544f9d1668efff6e8ba2290377800000000000000000000000055b1edfe744e4544f9d1668efff6e8ba2290377800000000000000000000000000000000000000000000000000652a3cbe9ada0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8089,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba081d2bcf60b2f4d25468daeab35e44227f0aa6000000000000000000000000ba081d2bcf60b2f4d25468daeab35e44227f0aa6000000000000000000000000000000000000000000000000015be4946bb64e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8091,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a9ef4b1d2eb0102a5169ea6f2bd7934474e6f7d7000000000000000000000000a9ef4b1d2eb0102a5169ea6f2bd7934474e6f7d7000000000000000000000000000000000000000000000000013083f18a4c970d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8092,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea0cd27bf777e480700a083513e605f0bfef3202000000000000000000000000ea0cd27bf777e480700a083513e605f0bfef3202000000000000000000000000000000000000000000000000011c37937e08000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7c2a5cc45ba3f68a31c0e17125723aad146508b15fe3a6994c7a7e2dcd4f5aa8,2021-11-25 18:32:37.000 UTC,0,true -8093,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000072c083ccbb46b6960a541c9850dbedc0257850be00000000000000000000000072c083ccbb46b6960a541c9850dbedc0257850be000000000000000000000000000000000000000000000000003e70577a47010000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8095,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009da5c4c283c2fe334e2a1081a7fdae45475ceb410000000000000000000000009da5c4c283c2fe334e2a1081a7fdae45475ceb41000000000000000000000000000000000000000000000000001de9b919949b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8096,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e397a17d0f5c554a3fca64bfc99267db286ab155000000000000000000000000e397a17d0f5c554a3fca64bfc99267db286ab15500000000000000000000000000000000000000000000000006b4cb63cde35be600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x0490578e0cf6d6c0a5c8417bcc0900f6aeb79b17a1fc2b5360043a95ff4a3d0e,2021-12-08 13:19:35.000 UTC,0,true -8097,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000018d1d461ce665094821d17b82730f3fd923d435200000000000000000000000018d1d461ce665094821d17b82730f3fd923d435200000000000000000000000000000000000000000000000006be36de3721d26f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9ae57d30b21d1d2535b5cf04fdc2385e989d253bab4d378a5746e35ecbdc9427,2022-02-22 17:52:55.000 UTC,0,true -8098,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cb2fabbfa866570768bf6b0439f69b9f2fa72fec000000000000000000000000cb2fabbfa866570768bf6b0439f69b9f2fa72fec000000000000000000000000000000000000000000000000000aa2657d23c78000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8099,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b38638d4e09a66a9ef98ca5d36aa57fcbf12e26f000000000000000000000000b38638d4e09a66a9ef98ca5d36aa57fcbf12e26f00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8101,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003cd27bc0c2fe10705578e62fb11c110a14778bcf0000000000000000000000003cd27bc0c2fe10705578e62fb11c110a14778bcf0000000000000000000000000000000000000000000000000002cd042f01d11500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8102,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076744f4fd8ad6627e838bcabec82c25bdb06a9f100000000000000000000000076744f4fd8ad6627e838bcabec82c25bdb06a9f10000000000000000000000000000000000000000000000000002e48981dcc73400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8104,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cdfe073bfdb8d8f9d8db26621d7e33b803a06670000000000000000000000000cdfe073bfdb8d8f9d8db26621d7e33b803a066700000000000000000000000000000000000000000000000000000204f36f1e91500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8105,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a62bb8263dcb26d1c5f77f4b747cd8e246fa4fe6000000000000000000000000a62bb8263dcb26d1c5f77f4b747cd8e246fa4fe60000000000000000000000000000000000000000000000000000204f36f1e91500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8106,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000072681b6fa7e64d790260831a0c62d640f83789e300000000000000000000000072681b6fa7e64d790260831a0c62d640f83789e3000000000000000000000000000000000000000000000000000101faa271941800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8107,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f2af0268a8b83b9581dfbf67011b0957ee4c31a0000000000000000000000000f2af0268a8b83b9581dfbf67011b0957ee4c31a0000000000000000000000000000000000000000000000000000101faa271941800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8108,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f2af0268a8b83b9581dfbf67011b0957ee4c31a0000000000000000000000000f2af0268a8b83b9581dfbf67011b0957ee4c31a0000000000000000000000000000000000000000000000000000101faa271941800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8109,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e58a15be9b5377e9b457768595af7f5a537cd4dd000000000000000000000000e58a15be9b5377e9b457768595af7f5a537cd4dd000000000000000000000000000000000000000000000000000101faa271941800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8110,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd8eb22b2e8d78982166f66149f258b8ac7a8bc1000000000000000000000000dd8eb22b2e8d78982166f66149f258b8ac7a8bc100000000000000000000000000000000000000000000000000005fc946ddb48000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8111,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000cdac7bca5da93eef2e0d00c337f917d3f6639330000000000000000000000000cdac7bca5da93eef2e0d00c337f917d3f663933000000000000000000000000000000000000000000000000007ac0aeb874bbbd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8118,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009a97dbc9baa91707b5bde45c810536c17b8ceb150000000000000000000000009a97dbc9baa91707b5bde45c810536c17b8ceb1500000000000000000000000000000000000000000000000006391f4ea4bf850000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x675e9a22219def7c57e025758944ecaf45c2387e81c3f2d0f2857507786f9689,2022-06-01 10:34:42.000 UTC,0,true -8119,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000003c00a3fa2eef1afccf044af59ce105b8200272cd0000000000000000000000003c00a3fa2eef1afccf044af59ce105b8200272cd00000000000000000000000000000000000000000000000057be307ed8b2177300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -8120,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000324e0b53cefa84cf970833939249880f814557c6000000000000000000000000324e0b53cefa84cf970833939249880f814557c60000000000000000000000000000000000000000000000000dcee9c35fe2020000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8121,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017f0cef921129890f57cc660ce7d67b9b17edbf800000000000000000000000017f0cef921129890f57cc660ce7d67b9b17edbf80000000000000000000000000000000000000000000000000026c22c182497cf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8122,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a7ac9632080867423f8fb3e922ed212734e0fc10000000000000000000000000a7ac9632080867423f8fb3e922ed212734e0fc1000000000000000000000000000000000000000000000000002dbbc9f5c1aaf700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8123,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef09db43283c53b2fe1e56bb46feb42f57a5e3cf000000000000000000000000ef09db43283c53b2fe1e56bb46feb42f57a5e3cf0000000000000000000000000000000000000000000000000dd7d780c41ee90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8124,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000687549b38e7453a88e271404250c659908de7d80000000000000000000000000687549b38e7453a88e271404250c659908de7d80000000000000000000000000000000000000000000000000000cc1d48a81382d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8125,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000691819b746a82592d36abbfaac0ed4a1a64e666d000000000000000000000000691819b746a82592d36abbfaac0ed4a1a64e666d0000000000000000000000000000000000000000000000000009d53c5af3a9f600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8126,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000014d74016422f9a923c6e995e6576d1539a4f4c1800000000000000000000000014d74016422f9a923c6e995e6576d1539a4f4c18000000000000000000000000000000000000000000000000006067ff15114e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8129,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a679c6154b8d4619af9f83f0bf9a13a680e01ecf000000000000000000000000a679c6154b8d4619af9f83f0bf9a13a680e01ecf000000000000000000000000000000000000000000000000041ccea40f5817c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8130,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000650aede9768d80cbdbfda2d1e2d35250ee0691e0000000000000000000000000650aede9768d80cbdbfda2d1e2d35250ee0691e00000000000000000000000000000000000000000000000e0eea9d435dbffc53b00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xaaa4b0a233fa23546c41b141ccb1d775d44de4af0c1575e657e359c7842903e8,2022-02-01 19:25:46.000 UTC,0,true -8131,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc13514bc2b74b1886e7aff16645756436f2de82000000000000000000000000cc13514bc2b74b1886e7aff16645756436f2de820000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8133,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000216e36333cfed41cdfcda3fa2642f6c4b14d4358000000000000000000000000216e36333cfed41cdfcda3fa2642f6c4b14d435800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8135,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000759d669fd65cc5a42c02e9d22c291ec09e066023000000000000000000000000759d669fd65cc5a42c02e9d22c291ec09e0660230000000000000000000000000000000000000000000000000018d2186f66612400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8136,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002cab3a5c1d3cfea0abaa075d0eeb5fcff08852460000000000000000000000002cab3a5c1d3cfea0abaa075d0eeb5fcff088524600000000000000000000000000000000000000000000000000dfe2af11f8936d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8139,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000858d150df99c308b406b2796d933689d9ac3cffa000000000000000000000000858d150df99c308b406b2796d933689d9ac3cffa000000000000000000000000000000000000000000000000006a0011af4deebf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8142,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c8c6094a3288a5e20dddde2c466edf9b3fdf3d04000000000000000000000000c8c6094a3288a5e20dddde2c466edf9b3fdf3d04000000000000000000000000000000000000000000000000001e3bf2277dcd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8143,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000041fa51fffe4b6d2d5d5a45fd050531a74cc3fc1300000000000000000000000041fa51fffe4b6d2d5d5a45fd050531a74cc3fc13000000000000000000000000000000000000000000000000001db5fbf259d00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8144,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b63101940135b7c85f5f536ce41ccf5818aa2e5b000000000000000000000000b63101940135b7c85f5f536ce41ccf5818aa2e5b000000000000000000000000000000000000000000000000001ed2b01653fe0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8145,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007c82bdcf970f33866c2b7f73a3628418f8229eb90000000000000000000000007c82bdcf970f33866c2b7f73a3628418f8229eb9000000000000000000000000000000000000000000000000001ed2b01653fe0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8146,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000010590af6d0cdef12d9608c442170c3f76a6fc97600000000000000000000000010590af6d0cdef12d9608c442170c3f76a6fc976000000000000000000000000000000000000000000000000001ed2b01653fe0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8147,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc4f1956f7261a120238df9861731b84c1a94066000000000000000000000000dc4f1956f7261a120238df9861731b84c1a94066000000000000000000000000000000000000000000000000001ed2b01653fe0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8148,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e61c985ac87b493b8bf98fabdff0a86c0bb223a4000000000000000000000000e61c985ac87b493b8bf98fabdff0a86c0bb223a4000000000000000000000000000000000000000000000000001e7d1be347280000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8149,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d7c09c7ab07424d74e47e1fa1e7eea02933c8e20000000000000000000000006d7c09c7ab07424d74e47e1fa1e7eea02933c8e2000000000000000000000000000000000000000000000000001e7d1be347280000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8150,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000000bcd328f7bb87399ff5c363d244355094b0614100000000000000000000000000bcd328f7bb87399ff5c363d244355094b06141000000000000000000000000000000000000000000000000001de2bb36dfb00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8151,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000097b96d3d407257e0602c3b107a169861bb1b0ff900000000000000000000000097b96d3d407257e0602c3b107a169861bb1b0ff9000000000000000000000000000000000000000000000000001de2bb36dfb00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8152,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009d3c63dd02af2f8832c8725cfdb15bb445e129120000000000000000000000009d3c63dd02af2f8832c8725cfdb15bb445e12912000000000000000000000000000000000000000000000000001d5803e273e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8153,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000060da990aebdd785f50ea3202ff05bff1d0963dbe000000000000000000000000000000000000000000000000e77c1395f1a6b324,,,1,true -8156,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ec3b481c482e92850edf554a3ad5bcd89e15c662000000000000000000000000ec3b481c482e92850edf554a3ad5bcd89e15c66200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8157,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008de3c3891268502f77db7e876d727257dec0f8520000000000000000000000008de3c3891268502f77db7e876d727257dec0f852000000000000000000000000000000000000000000000000017199c64bb8c00600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8159,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c4402ceee20579a0b3c5cad83883b3d6e2bdb490000000000000000000000000c4402ceee20579a0b3c5cad83883b3d6e2bdb49000000000000000000000000000000000000000000000000001f291b12a9bd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8160,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e6b39bffd69557145611c746d5b13cc125972860000000000000000000000006e6b39bffd69557145611c746d5b13cc12597286000000000000000000000000000000000000000000000000001f344ae3cb350000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8161,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1a5161d604d7348d7f5c534517b5404a8edefe4000000000000000000000000f1a5161d604d7348d7f5c534517b5404a8edefe4000000000000000000000000000000000000000000000000016dc800f1af8c9c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8163,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c2af77dce51511a0663053ea7fa5043e0f4227d5000000000000000000000000c2af77dce51511a0663053ea7fa5043e0f4227d500000000000000000000000000000000000000000000000000056c94fbfa558000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8164,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d19eb5ed5838da9806681688f03ac2b9cbc389e0000000000000000000000007d19eb5ed5838da9806681688f03ac2b9cbc389e00000000000000000000000000000000000000000000000000002a91fd59fc7400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8166,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000ec83e4768e314cdd88f910e397affcde78a52f92000000000000000000000000ec83e4768e314cdd88f910e397affcde78a52f92000000000000000000000000000000000000000000000000000000001dcd650000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x5f8cc08c8a019ebb5e26286c5de9818c192aef3125dc52ec8d7540ef67df8e01,2022-06-26 01:19:36.000 UTC,0,true -8168,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e2ae50242c85577be214e5e48120a4012096f751000000000000000000000000e2ae50242c85577be214e5e48120a4012096f7510000000000000000000000000000000000000000000000000004d70254e4d93e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8169,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000003414bc24c60cfe67b3a1ef2720c6677dc1634910000000000000000000000000000000000000000000000001d390c3de779d324,,,1,true -8170,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b813cecf4fa33172f5fedf635e363cb35d7c361b000000000000000000000000b813cecf4fa33172f5fedf635e363cb35d7c361b000000000000000000000000000000000000000000000000004ab72822fd8c7f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8172,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000091edb26c6abdfb69e4f3360808157ed100b13b5d00000000000000000000000091edb26c6abdfb69e4f3360808157ed100b13b5d0000000000000000000000000000000000000000000000000030967bf921d7c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8174,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000813407596e7c63cd3958ff081ca078cb31ddbf10000000000000000000000000813407596e7c63cd3958ff081ca078cb31ddbf1000000000000000000000000000000000000000000000000008165265da50d4700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8177,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000406c00ac4b3d865931c66bcd3f8621c4230af7bb000000000000000000000000406c00ac4b3d865931c66bcd3f8621c4230af7bb0000000000000000000000000000000000000000000000000019396991e7c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8178,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000db326c0f5f60ef7940a319e386db26f9e5810656000000000000000000000000000000000000000000000001da166835f41a135d,,,1,true -8179,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000db49553ff31e88e5cd561c9b6c1d90ebf165d6bf000000000000000000000000db49553ff31e88e5cd561c9b6c1d90ebf165d6bf0000000000000000000000000000000000000000000000000018ccf5c64c51c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8180,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000011c4f894cc4cd2d96e87ff90bb30a4a99c97df1b00000000000000000000000011c4f894cc4cd2d96e87ff90bb30a4a99c97df1b0000000000000000000000000000000000000000000000000008d6cd0360cac000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8181,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e1376738101036030b76723154f4db4b0ab3ae33000000000000000000000000e1376738101036030b76723154f4db4b0ab3ae33000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8182,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000770464ef67b6e276cd76576100cba00ca91fc02c000000000000000000000000770464ef67b6e276cd76576100cba00ca91fc02c0000000000000000000000000000000000000000000000000089e9069317bc1b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8183,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cfe33c2a47d74f24ae0c1e434ced836dd78a43eb000000000000000000000000cfe33c2a47d74f24ae0c1e434ced836dd78a43eb00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8184,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000041cc4a3fe2227953da7eadecd77e366d2cda886600000000000000000000000041cc4a3fe2227953da7eadecd77e366d2cda8866000000000000000000000000000000000000000000000000010e207120ed966000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8185,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b4e9abcf9f98cae5088cee01862a43c239ee963c000000000000000000000000b4e9abcf9f98cae5088cee01862a43c239ee963c000000000000000000000000000000000000000000000000002b50be4fe7538200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8186,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000008810a2d251df25b4fbce3c1fcfeb050034e50ff60000000000000000000000008810a2d251df25b4fbce3c1fcfeb050034e50ff600000000000000000000000000000000000000000000000000000000109a305600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -8187,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ffaa7ee8fe0d828e5844d3fd991fcfd7288390c9000000000000000000000000ffaa7ee8fe0d828e5844d3fd991fcfd7288390c9000000000000000000000000000000000000000000000000002b50be4fe7538200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8188,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000498f39362d1bd31a673fadc57efa53969aefbbea000000000000000000000000498f39362d1bd31a673fadc57efa53969aefbbea000000000000000000000000000000000000000000000000001857214a18e84000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8189,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000273ec095fe4c3c023b6e5d3dcd3642af950ac930000000000000000000000000273ec095fe4c3c023b6e5d3dcd3642af950ac9300000000000000000000000000000000000000000000000000b3b01229605b9dc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8191,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dddf40605bcb1f8346b328e4bd0f873f75d66690000000000000000000000000dddf40605bcb1f8346b328e4bd0f873f75d666900000000000000000000000000000000000000000000000000015684fc149653b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8192,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000dddf40605bcb1f8346b328e4bd0f873f75d66690000000000000000000000000dddf40605bcb1f8346b328e4bd0f873f75d6669000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -8194,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cfe33c2a47d74f24ae0c1e434ced836dd78a43eb000000000000000000000000cfe33c2a47d74f24ae0c1e434ced836dd78a43eb0000000000000000000000000000000000000000000000000056840fa85e791100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8195,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000009fe553de68865f425d8071c81640855a7c9613eb0000000000000000000000009fe553de68865f425d8071c81640855a7c9613eb000000000000000000000000000000000000000000000000000000003a15328200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -8199,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000052905a5e83a83f6a9d0e64ad24e79a37512d35b900000000000000000000000052905a5e83a83f6a9d0e64ad24e79a37512d35b900000000000000000000000000000000000000000000000002af9e74268d935200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8200,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e816691000000000000000000000000139c6b1985656a6a2727b714060eb2f0230d8a81000000000000000000000000139c6b1985656a6a2727b714060eb2f0230d8a810000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -8201,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f8a10b701c58aa99f9a240208c7be64381c313f0000000000000000000000006f8a10b701c58aa99f9a240208c7be64381c313f000000000000000000000000000000000000000000000000000f873df4294f9b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8202,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000067320a4323eb84534cc5dce232c69b57f9a8cf6400000000000000000000000067320a4323eb84534cc5dce232c69b57f9a8cf6400000000000000000000000000000000000000000000000001a20c7aaf8aa44f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8203,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000040077ad46d6f11e4d2dc3cc8a09227355c70e45700000000000000000000000040077ad46d6f11e4d2dc3cc8a09227355c70e45700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8204,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d88463cc7b5d448f4457614f16556be46060b3d6000000000000000000000000d88463cc7b5d448f4457614f16556be46060b3d6000000000000000000000000000000000000000000000000002867448af4f9f400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8205,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df62defaf89a4f4ff370854a9d521fab2edd1734000000000000000000000000df62defaf89a4f4ff370854a9d521fab2edd1734000000000000000000000000000000000000000000000000009d1b6ecba12eab00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8207,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008bb1390a642e4dc2a5a6b9b8f32d34f37144fcdc0000000000000000000000008bb1390a642e4dc2a5a6b9b8f32d34f37144fcdc00000000000000000000000000000000000000000000000003c1b483c16e19ec00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8209,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004568b388342840f2d249873f197ed383da25de7f0000000000000000000000004568b388342840f2d249873f197ed383da25de7f000000000000000000000000000000000000000000000000019878f10f3471a600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8210,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000300117c369a7d1b32413a255723ef0cb5c5f95c7000000000000000000000000300117c369a7d1b32413a255723ef0cb5c5f95c700000000000000000000000000000000000000000000000045a40f357504cf0200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -8212,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078a90951bc30582fb8f5b1ec218a15463418374400000000000000000000000078a90951bc30582fb8f5b1ec218a15463418374400000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8213,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e42a67f51dce014ae17fe0b0e6a0c692ef5eae60000000000000000000000003e42a67f51dce014ae17fe0b0e6a0c692ef5eae600000000000000000000000000000000000000000000000000a2033cb4ff14b100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8214,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000025d64f2d94807613ecfdae56fa9ec7bcdb29da2000000000000000000000000025d64f2d94807613ecfdae56fa9ec7bcdb29da200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8215,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000060b6eade8258a52bfda3c80df3fde715ef47df7300000000000000000000000060b6eade8258a52bfda3c80df3fde715ef47df7300000000000000000000000000000000000000000000000000b763687f50dd6600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8216,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae0f777ccd5cbf23dd99c93d52a8a0f630dc47ae000000000000000000000000ae0f777ccd5cbf23dd99c93d52a8a0f630dc47ae00000000000000000000000000000000000000000000000000522317276c5eb800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8217,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000985cb01e8830aaa1a3dff87151ccdf5ce2ce999b000000000000000000000000985cb01e8830aaa1a3dff87151ccdf5ce2ce999b00000000000000000000000000000000000000000000000000039c95d2925ec000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8218,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000510bbd7b7408c073e9e6e7f50f46bff1e6f2867f000000000000000000000000510bbd7b7408c073e9e6e7f50f46bff1e6f2867f0000000000000000000000000000000000000000000000000015ec3ee7d893f200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8219,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9981f4cb68bcc98e7e3ebd28e80cd30661e111c000000000000000000000000f9981f4cb68bcc98e7e3ebd28e80cd30661e111c0000000000000000000000000000000000000000000000000083740cd93a448000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8220,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004324a7c9679dbdf26ea2f98a0c1545cab2a9d9350000000000000000000000004324a7c9679dbdf26ea2f98a0c1545cab2a9d935000000000000000000000000000000000000000000000000004ae7772bffae6900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8221,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000096e76dacbbcbad74b82bb893bf3e8bf4b7b06c9f00000000000000000000000096e76dacbbcbad74b82bb893bf3e8bf4b7b06c9f000000000000000000000000000000000000000000000000003b57276d8144cb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8227,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d31600bf70eb4d5921247ff3931176ea81566e5d000000000000000000000000d31600bf70eb4d5921247ff3931176ea81566e5d000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8231,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b4bcde3ccfe072892aebbba1f0532bcc37043a1a000000000000000000000000b4bcde3ccfe072892aebbba1f0532bcc37043a1a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8233,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc713097f3e7ffcbb4e60e4f4efee4a0ae8af234000000000000000000000000cc713097f3e7ffcbb4e60e4f4efee4a0ae8af23400000000000000000000000000000000000000000000000000c502ac76ef29ab00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8234,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000a00a4135c45a9cce73688b5660b2d018e1aac3d2000000000000000000000000a00a4135c45a9cce73688b5660b2d018e1aac3d2000000000000000000000000000000000000000000000003bea23e9421de4dfc00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -8235,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080f715be0f5516501bb49bfda53975bdcb7e3c1b00000000000000000000000080f715be0f5516501bb49bfda53975bdcb7e3c1b00000000000000000000000000000000000000000000000000c7483ca2561bae00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8236,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b8625b05db41aff7f66ce7a540745b941078e400000000000000000000000002b8625b05db41aff7f66ce7a540745b941078e40000000000000000000000000000000000000000000000000010a0d78c3b0e76300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8237,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000012b81e4275fbd5834320252841949f6973b405f900000000000000000000000012b81e4275fbd5834320252841949f6973b405f9000000000000000000000000000000000000000000000000014979f2c190c7c800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8238,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000093d154116d1d9bb5080e9f0e919d71e2690ab8a200000000000000000000000093d154116d1d9bb5080e9f0e919d71e2690ab8a200000000000000000000000000000000000000000000000000a2348402c60d4900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8239,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080f715be0f5516501bb49bfda53975bdcb7e3c1b00000000000000000000000080f715be0f5516501bb49bfda53975bdcb7e3c1b000000000000000000000000000000000000000000000000003e67e7fee81fe600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8240,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000513989e0ab20f597145600e837d05b4aa96b4e8e000000000000000000000000513989e0ab20f597145600e837d05b4aa96b4e8e00000000000000000000000000000000000000000000000000287559223283b300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8241,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000041c1e0d927248d5d3341041c416a6f8fa894faf000000000000000000000000041c1e0d927248d5d3341041c416a6f8fa894faf000000000000000000000000000000000000000000000000014d57d62293301000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8243,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000053858909e782b7af40d7ae8673c140aa0bb4751000000000000000000000000053858909e782b7af40d7ae8673c140aa0bb47510000000000000000000000000000000000000000000000000147a6baa4dbdf4300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8244,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000070b0fbd3176d5a0871fae1325dbe5657e1607bb000000000000000000000000070b0fbd3176d5a0871fae1325dbe5657e1607bb0000000000000000000000000000000000000000000000000014b0e141307a6f800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8245,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e969ef6523502ec36917bc925ef1b729c6d4e9c3000000000000000000000000e969ef6523502ec36917bc925ef1b729c6d4e9c3000000000000000000000000000000000000000000000000004902a6f5571b5d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8246,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000097812657db486589c1b2171b19ef9045e14c69ea00000000000000000000000097812657db486589c1b2171b19ef9045e14c69ea00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8247,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000088f6872cf20351bb46a2c3ec7863c9541327774e00000000000000000000000088f6872cf20351bb46a2c3ec7863c9541327774e000000000000000000000000000000000000000000000000014a288c3cf3c35d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8250,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2ff32278bd611168c3798682fe90bb20dc825e1000000000000000000000000d2ff32278bd611168c3798682fe90bb20dc825e1000000000000000000000000000000000000000000000000014dccbf9ba71d3900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8251,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000fe8f8ce0c13f826e1a17383524dba614d4c399e0000000000000000000000000fe8f8ce0c13f826e1a17383524dba614d4c399e000000000000000000000000000000000000000000000000014c088c2d3f986700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8252,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b96a958a82ecabab9e7cf14ae538c38996f2c7b6000000000000000000000000b96a958a82ecabab9e7cf14ae538c38996f2c7b600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8253,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000009628d07ab4cabe66400f6a627732b4c11ab057500000000000000000000000009628d07ab4cabe66400f6a627732b4c11ab057500000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8254,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ef6c440ca6f7dfe8f87bb9c0df4f7d58112e12b0000000000000000000000002ef6c440ca6f7dfe8f87bb9c0df4f7d58112e12b00000000000000000000000000000000000000000000000001464b9b6dc4bea400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8255,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000016ea30ba1a15fc03ba3b563bf6312d5813f2e3c200000000000000000000000016ea30ba1a15fc03ba3b563bf6312d5813f2e3c200000000000000000000000000000000000000000000000001421bc5c811427200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8256,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000899929b4e35a1e29b940ab41ab278a41a6a4947d000000000000000000000000899929b4e35a1e29b940ab41ab278a41a6a4947d000000000000000000000000000000000000000000000000013d477c079f254600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8257,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6fe2689141ebe625dcb91b7d9be8fad54099d25000000000000000000000000c6fe2689141ebe625dcb91b7d9be8fad54099d2500000000000000000000000000000000000000000000000001419f6dc5b6d03a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8258,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a03a90eb2910debbb3fbda9568e2f5a9e0bbd92f000000000000000000000000a03a90eb2910debbb3fbda9568e2f5a9e0bbd92f000000000000000000000000000000000000000000000000014790098f1baf8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8259,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d917e96568ac609a86c7c1578911c31d197bb5f0000000000000000000000003d917e96568ac609a86c7c1578911c31d197bb5f00000000000000000000000000000000000000000000000001450c4554847bc500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8260,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003bab2479b992440e597dc69363b9bec012811a7c0000000000000000000000003bab2479b992440e597dc69363b9bec012811a7c0000000000000000000000000000000000000000000000000149547b2040316c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8261,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bba974083e667ad7a9809cc378ca1fd9c3341eb8000000000000000000000000bba974083e667ad7a9809cc378ca1fd9c3341eb80000000000000000000000000000000000000000000000000148dec4fb08529000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8262,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004eff6050c03742c0ec10bdf483bc1f2ab8479bd20000000000000000000000004eff6050c03742c0ec10bdf483bc1f2ab8479bd200000000000000000000000000000000000000000000000000a8f5875375a84500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8263,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c3f445d067442b439056fd1a118a4c1dcc7d7d60000000000000000000000004c3f445d067442b439056fd1a118a4c1dcc7d7d600000000000000000000000000000000000000000000000001f161421c8e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8264,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000570f9e457463d263560c76ecc9e41d16a5a25373000000000000000000000000570f9e457463d263560c76ecc9e41d16a5a25373000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8266,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8c0fe3699db673486c391a4eefa5a18c7cfd4d6000000000000000000000000e8c0fe3699db673486c391a4eefa5a18c7cfd4d600000000000000000000000000000000000000000000000000654d79c491140000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xcf1a901e0c9f629cd75c4317121a51cef9f95f25d1c5e852cd44fbb82892849b,2022-03-22 14:43:39.000 UTC,0,true -8267,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac8dec6722d5fe329f93377978c1e661a6c021e8000000000000000000000000ac8dec6722d5fe329f93377978c1e661a6c021e8000000000000000000000000000000000000000000000000023557e4531ba00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8268,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000000a67ff33dcc411fa327f752cbcd8dd63acb0f6c00000000000000000000000000a67ff33dcc411fa327f752cbcd8dd63acb0f6c000000000000000000000000000000000000000000000000007aa5d83964068500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8269,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef56c8d320ebf6b79e3cb7e3e098dc01ce186a0d000000000000000000000000ef56c8d320ebf6b79e3cb7e3e098dc01ce186a0d000000000000000000000000000000000000000000000000001a42c745d52a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8270,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007372a7934b86c2015721af1367bbce24e5fa17b20000000000000000000000007372a7934b86c2015721af1367bbce24e5fa17b20000000000000000000000000000000000000000000000000065c916f1dc820000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8272,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a017279b02e3b92f252cf7239bdc2a5f7fe6223e000000000000000000000000a017279b02e3b92f252cf7239bdc2a5f7fe6223e000000000000000000000000000000000000000000000000007dcc775f2541df00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8273,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d38c3879cb3ddab7cab997f27345bd7aad860680000000000000000000000008d38c3879cb3ddab7cab997f27345bd7aad86068000000000000000000000000000000000000000000000000003aff271232df2600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8275,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039338033df3b80ed5fa78780bf4f4ba175f23b2600000000000000000000000039338033df3b80ed5fa78780bf4f4ba175f23b26000000000000000000000000000000000000000000000000003b990c903fa17600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8276,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000144c94ad5bb9d7c8b59c60cc5f5b0b984ff71a53000000000000000000000000144c94ad5bb9d7c8b59c60cc5f5b0b984ff71a530000000000000000000000000000000000000000000000000003d092431e650000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8277,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008676c970dd185479ae889bcea18b84201bad57ce0000000000000000000000008676c970dd185479ae889bcea18b84201bad57ce00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8279,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004b18d92b4c88e8e0a718a9ea8d1271e5277e6e100000000000000000000000004b18d92b4c88e8e0a718a9ea8d1271e5277e6e1000000000000000000000000000000000000000000000000001339a771575d18000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8281,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d3c85f7d2e8222d4a0f6df4b76a9911f3e4bcdc0000000000000000000000006d3c85f7d2e8222d4a0f6df4b76a9911f3e4bcdc00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8283,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021503af4d1c8e71ce2a575e57376e5f60dac152900000000000000000000000021503af4d1c8e71ce2a575e57376e5f60dac15290000000000000000000000000000000000000000000000000001313dd0a5bf0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8284,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000011ff5d408f6aa0366620f2833b4cd35603c08eeb00000000000000000000000011ff5d408f6aa0366620f2833b4cd35603c08eeb00000000000000000000000000000000000000000000000000128aeb18cb199400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8287,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006b0e455abf6736380f6ca69d0ac0d81163ebb8cc0000000000000000000000006b0e455abf6736380f6ca69d0ac0d81163ebb8cc000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8288,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e44b4f50210126d44b5a601f551dc5d6af14e3f0000000000000000000000008e44b4f50210126d44b5a601f551dc5d6af14e3f00000000000000000000000000000000000000000000000000a323b2ad5d677900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8293,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc3b00a6548fbf13293cb47910ded9cd275765b9000000000000000000000000dc3b00a6548fbf13293cb47910ded9cd275765b9000000000000000000000000000000000000000000000000002aa1efb94e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8294,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c3f445d067442b439056fd1a118a4c1dcc7d7d60000000000000000000000004c3f445d067442b439056fd1a118a4c1dcc7d7d6000000000000000000000000000000000000000000000000003f086f2a02f40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8295,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002cd75b057dc88ea5c5bd7f9396507712481066b50000000000000000000000002cd75b057dc88ea5c5bd7f9396507712481066b500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8298,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002cd75b057dc88ea5c5bd7f9396507712481066b50000000000000000000000002cd75b057dc88ea5c5bd7f9396507712481066b5000000000000000000000000000000000000000000000000001bb1391c3365cb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8299,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e67500000000000000000000000057ab1ec28d129707052df4df418d58a2d46d5f510000000000000000000000008c6f28f2f1a3c87f0f938b96d27520d9751ec8d90000000000000000000000000b7c43af43d76f79b6f6cfbafb3a01dde04682250000000000000000000000000b7c43af43d76f79b6f6cfbafb3a01dde04682250000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -8303,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7f12307ee6002f7fd2aa6c10b9e8cfcc67b0bf9000000000000000000000000c7f12307ee6002f7fd2aa6c10b9e8cfcc67b0bf9000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8304,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef731d11c5076b983857815f99daf612c46f030b000000000000000000000000ef731d11c5076b983857815f99daf612c46f030b0000000000000000000000000000000000000000000000000030ec16cdaa3ef000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8305,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1f897e2311bfc2af1f42bf87fe4e1cbfd23e4ac000000000000000000000000c1f897e2311bfc2af1f42bf87fe4e1cbfd23e4ac000000000000000000000000000000000000000000000000000c32db4908686700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8306,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000002c7867c3beffdbc1dbaaa15e8a711f183f9d8d900000000000000000000000002c7867c3beffdbc1dbaaa15e8a711f183f9d8d9000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8307,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fa3ce4b82cc4dd303104b5c43eecf72871d31632000000000000000000000000fa3ce4b82cc4dd303104b5c43eecf72871d316320000000000000000000000000000000000000000000000000011ca37adaee3b000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8308,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007737c517986e8030610c31a9686d04a63f6ef5560000000000000000000000007737c517986e8030610c31a9686d04a63f6ef55600000000000000000000000000000000000000000000000000095a655d3dfb2400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8309,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076766ce199954d2dc52e14577e2434ed00fb4bb000000000000000000000000076766ce199954d2dc52e14577e2434ed00fb4bb000000000000000000000000000000000000000000000000000ebc1a185edce7800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8310,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005cf968f202abb9f97063c5ce1a0ed07ff2f3e6280000000000000000000000005cf968f202abb9f97063c5ce1a0ed07ff2f3e628000000000000000000000000000000000000000000000000003fec7cd071f38000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8311,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000192cdfc4edf00fb06c888bc25aae8acbe8d7fa7e000000000000000000000000192cdfc4edf00fb06c888bc25aae8acbe8d7fa7e00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8312,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000781cdc81cc8a315433bdc1c581a649c4c0d61ee7000000000000000000000000781cdc81cc8a315433bdc1c581a649c4c0d61ee700000000000000000000000000000000000000000000000004d7eb18333f255900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8313,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000019ca3875c04e64cdc097759225452ad3982fbc4500000000000000000000000019ca3875c04e64cdc097759225452ad3982fbc4500000000000000000000000000000000000000000000000000b6a90f8921696500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8316,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000349ea0b723e3692a2ddcc0ae5cc85640f372ffd1000000000000000000000000349ea0b723e3692a2ddcc0ae5cc85640f372ffd1000000000000000000000000000000000000000000000000003b93918f5c881300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8317,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047b2efa18736c6c211505aefd321bec3ac3e877900000000000000000000000047b2efa18736c6c211505aefd321bec3ac3e877900000000000000000000000000000000000000000000000000eaf5fc44be8ae400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x06710b719473e4197fe2bbd00253d172ee3dd13d766cb928e18cd30b1d4914f3,2022-02-06 15:12:38.000 UTC,0,true -8318,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004af48abe68f94e32d03dd6dfeb2e73281f479c800000000000000000000000004af48abe68f94e32d03dd6dfeb2e73281f479c80000000000000000000000000000000000000000000000000001f36400ecaaa0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8319,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a353b568cf88770d9627b27082851de0e58347ea000000000000000000000000a353b568cf88770d9627b27082851de0e58347ea0000000000000000000000000000000000000000000000000b405adfc274e1b000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8320,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000057768da7994d07d56e1f348e48e1bf8fd4b9934500000000000000000000000057768da7994d07d56e1f348e48e1bf8fd4b9934500000000000000000000000000000000000000000000000000a57d470dedb81400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8321,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ce2f3600d79ea3608feb1ea0f51a88bfc7d485c7000000000000000000000000ce2f3600d79ea3608feb1ea0f51a88bfc7d485c700000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2e98534267738a3f1cef3a8bdf004004f18dd896883a8cbb90b18e463c4a9995,2022-03-08 15:03:16.000 UTC,0,true -8324,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000000efa5c7ba17a797a867820ffd51b890125bda360000000000000000000000000000000000000000000000003782dace9d900000,,,1,true -8326,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009181256f04ba5fbc3381354832cdab22e60918b50000000000000000000000009181256f04ba5fbc3381354832cdab22e60918b500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8327,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc9a0bcb451329a5c30b4dfbbf96024588521053000000000000000000000000bc9a0bcb451329a5c30b4dfbbf96024588521053000000000000000000000000000000000000000000000000003ff2e795f5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8328,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000383e96959e6c1dc55885f5437e8a01a41f5dc5a9000000000000000000000000383e96959e6c1dc55885f5437e8a01a41f5dc5a900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8330,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049df5d7e42cc8c0bbb6f54f132bc07f8e5e046f700000000000000000000000049df5d7e42cc8c0bbb6f54f132bc07f8e5e046f7000000000000000000000000000000000000000000000000002af758bd01288000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8333,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000028e452555f12e461c6b21588efed281b22e7c97f00000000000000000000000028e452555f12e461c6b21588efed281b22e7c97f00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8335,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e67500000000000000000000000003ab458634910aad20ef5f1c8ee96f1d6ac549190000000000000000000000007fb688ccf682d58f86d7e38e03f9d22e7705448b00000000000000000000000083437112034414883ee20b3a2f98d0cd9e53b45b00000000000000000000000083437112034414883ee20b3a2f98d0cd9e53b45b000000000000000000000000000000000000000000000000984a439f1afe227800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -8336,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b814bc7e97996e341157f43e711faebe32b81a75000000000000000000000000b814bc7e97996e341157f43e711faebe32b81a750000000000000000000000000000000000000000000000000245168ed4d6df6200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8337,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009086226729f6cc36ab626d8e341cbec912d21b7c0000000000000000000000009086226729f6cc36ab626d8e341cbec912d21b7c00000000000000000000000000000000000000000000000000f88290bacc56e300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8338,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000051e6e2df45186fd18e11e76b487552cb80a8de6800000000000000000000000051e6e2df45186fd18e11e76b487552cb80a8de6800000000000000000000000000000000000000000000000000e6b9d33ecfd52d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8339,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000616964aa4652812da73a8ca0cd9b1f0fac5b49e5000000000000000000000000616964aa4652812da73a8ca0cd9b1f0fac5b49e5000000000000000000000000000000000000000000000000027f7d0bdb92000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x222a3984e54eec86ae9b7faac0d10cd383b31fd15334cd870c0d30bb7f79bfb5,2021-12-06 15:10:08.000 UTC,0,true -8340,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005af12635675427ea85358ac42b8550027b10f4910000000000000000000000005af12635675427ea85358ac42b8550027b10f491000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8342,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000008315fa4d626aafb8f170270f7692d685d6646c000000000000000000000000008315fa4d626aafb8f170270f7692d685d6646c0000000000000000000000000000000000000000000000000007b6ff547b2b42e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8343,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000079904d39117d5fec74ce78ef08ba0e90e426e8d300000000000000000000000079904d39117d5fec74ce78ef08ba0e90e426e8d300000000000000000000000000000000000000000000000000423ec11d8695a500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8347,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000232b26c22d14428b20f9885a1ec0a9567ef9f080000000000000000000000000232b26c22d14428b20f9885a1ec0a9567ef9f080000000000000000000000000000000000000000000000000008998b5b003410b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8349,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ab04c70d86143193990371d691995325ecbed717000000000000000000000000ab04c70d86143193990371d691995325ecbed7170000000000000000000000000000000000000000000000000082e1056b0a444200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8351,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006da3e90a3aeb11353e54c4830a7903947e519bfc0000000000000000000000006da3e90a3aeb11353e54c4830a7903947e519bfc00000000000000000000000000000000000000000000000004011bb1b087312b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8354,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003108f1ffc15716ad537e039d4e33deb221f4982d0000000000000000000000003108f1ffc15716ad537e039d4e33deb221f4982d00000000000000000000000000000000000000000000000000c48541ff0dbe9000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8355,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fd6972254906c2ccd4c325f67dcc1a2ebc80652b000000000000000000000000fd6972254906c2ccd4c325f67dcc1a2ebc80652b00000000000000000000000000000000000000000000000001e0fd0dbcf1660a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8356,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000f7de8cd5e0fd700af34c5d5ff214b0aca5c49d70000000000000000000000000f7de8cd5e0fd700af34c5d5ff214b0aca5c49d7000000000000000000000000000000000000000000000000015c31c4c1ea0a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8357,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000083d420a602b5cd560ac5fa9bbca0d5e91e4cb9750000000000000000000000000000000000000000000000036bc7cbd7666adda4,,,1,true -8358,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002fb4aaa9c305f9888d1131325259a31378fa36ab0000000000000000000000002fb4aaa9c305f9888d1131325259a31378fa36ab00000000000000000000000000000000000000000000000000d8d7be4dec417300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8360,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eb6c46c494f6468cfb7b02d708cc17589662ee53000000000000000000000000eb6c46c494f6468cfb7b02d708cc17589662ee53000000000000000000000000000000000000000000000000000d1ea736c19fb400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8362,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d4b09c164cd54aef6c5cbafba305bb162b98c490000000000000000000000006d4b09c164cd54aef6c5cbafba305bb162b98c4900000000000000000000000000000000000000000000000004005e72322d2e8600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8363,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e68055d6d79498ee3f90ebf1a8301094a25a38e0000000000000000000000000e68055d6d79498ee3f90ebf1a8301094a25a38e0000000000000000000000000000000000000000000000000009f678b05d4a6ad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8364,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8d1b13e56d1a680ee306364628cdc07a4be8072000000000000000000000000b8d1b13e56d1a680ee306364628cdc07a4be8072000000000000000000000000000000000000000000000000009f678b05d4a6ad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8365,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003777786a1717a93bf950d16d4e6c0faa35995eff0000000000000000000000003777786a1717a93bf950d16d4e6c0faa35995eff000000000000000000000000000000000000000000000000009f678b05d4a6ad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8366,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000274fa9f7bbc8a1bb4cd8bf33c6c23e3f36fc2502000000000000000000000000274fa9f7bbc8a1bb4cd8bf33c6c23e3f36fc2502000000000000000000000000000000000000000000000000009f678b05d4a6ad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8367,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000074af1733a7cefdfa34fd028e8b7aee68a1c76c8300000000000000000000000074af1733a7cefdfa34fd028e8b7aee68a1c76c83000000000000000000000000000000000000000000000000009f678b05d4a6ad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8368,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d89c351b97dff632a38ff10265ee0d74f4573b20000000000000000000000000d89c351b97dff632a38ff10265ee0d74f4573b20000000000000000000000000000000000000000000000000009f678b05d4a6ad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8370,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c869639d0c999f8cd29a87cd7cc0b93de0c10e88000000000000000000000000c869639d0c999f8cd29a87cd7cc0b93de0c10e88000000000000000000000000000000000000000000000000008afb2401777acb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8371,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000905777492201f8cc36e2b5981df9fc532023b7d7000000000000000000000000905777492201f8cc36e2b5981df9fc532023b7d700000000000000000000000000000000000000000000000000929e8a2a2fb67800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8372,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c002ddf1bdd3878c6b1c93c2a215158d24fbfdb0000000000000000000000003c002ddf1bdd3878c6b1c93c2a215158d24fbfdb000000000000000000000000000000000000000000000000008fce5515a65eb600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8373,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a57d88e37658471f64eb906835cd634cb2181e80000000000000000000000004a57d88e37658471f64eb906835cd634cb2181e800000000000000000000000000000000000000000000000000964e3c48c11a1400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8375,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a384da004bba6297921c8d684cfe6102e4737647000000000000000000000000a384da004bba6297921c8d684cfe6102e4737647000000000000000000000000000000000000000000000000009813359878059900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8376,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000015438e55fd7558576369c0cab84e6a96b70e430000000000000000000000000015438e55fd7558576369c0cab84e6a96b70e4300000000000000000000000000000000000000000000000000098908391377eea00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8377,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fd31cb624261d7c4626d103c5cee441add892ade000000000000000000000000fd31cb624261d7c4626d103c5cee441add892ade000000000000000000000000000000000000000000000000009b001906f4436e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8378,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006416e7c281a55e76973546c9d3175f69fd4a8aeb0000000000000000000000006416e7c281a55e76973546c9d3175f69fd4a8aeb00000000000000000000000000000000000000000000000000969752b302c9e000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8379,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039140487e6b09d073e3c859039a9088a11cf1ae600000000000000000000000039140487e6b09d073e3c859039a9088a11cf1ae600000000000000000000000000000000000000000000000000aba5959db3360000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8380,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ae344fd27bd50cdcd807bccecf747c8218dc30d0000000000000000000000007ae344fd27bd50cdcd807bccecf747c8218dc30d000000000000000000000000000000000000000000000000009c797429c5288800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8381,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000606f62cdb593a03dc158e39fa06c5c1c12c730d9000000000000000000000000606f62cdb593a03dc158e39fa06c5c1c12c730d9000000000000000000000000000000000000000000000000009ccc69c688c73800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8382,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000081e11c21016dd61c94c9a9d4251dd9702bbf770300000000000000000000000081e11c21016dd61c94c9a9d4251dd9702bbf770300000000000000000000000000000000000000000000000000975e5e01ff4a7000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8383,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078a613d8c147e3c1a9b9b103410260d82ec4ca4800000000000000000000000078a613d8c147e3c1a9b9b103410260d82ec4ca48000000000000000000000000000000000000000000000000009d6b7be496935d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8384,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000046f6abf7566711db611a79162bb587a1d8a319fa00000000000000000000000046f6abf7566711db611a79162bb587a1d8a319fa000000000000000000000000000000000000000000000000009dd76536c8181b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8385,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dcd695bb523fd1ef04f0a17f8cc0f7b270759adf000000000000000000000000dcd695bb523fd1ef04f0a17f8cc0f7b270759adf000000000000000000000000000000000000000000000000009d81db750823f200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8386,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000064176d54674c06414a9e3dffb5d1857ecb97044900000000000000000000000064176d54674c06414a9e3dffb5d1857ecb970449000000000000000000000000000000000000000000000000009d81db750823f200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8387,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000664d72a63847339b5e7d76a1ffb3656d465042c6000000000000000000000000664d72a63847339b5e7d76a1ffb3656d465042c600000000000000000000000000000000000000000000000000a0aa48e7cc8ab500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8388,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000f35693a104ba7fad7ac91530cfb0625c9fbae240000000000000000000000000f35693a104ba7fad7ac91530cfb0625c9fbae24000000000000000000000000000000000000000000000000009ed58cf833830c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8389,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007321723c2e19cd27190dcfb888abd44fd6627d4e0000000000000000000000007321723c2e19cd27190dcfb888abd44fd6627d4e000000000000000000000000000000000000000000000000009a83943cf6d01700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8390,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000030c4af4fa29e0d3c7b840d55b6db4646d52b23e700000000000000000000000030c4af4fa29e0d3c7b840d55b6db4646d52b23e7000000000000000000000000000000000000000000000000009ccef6c1cfb4ff00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8391,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099ae174133946e7ea01cba09555069f0a67b9b6100000000000000000000000099ae174133946e7ea01cba09555069f0a67b9b61000000000000000000000000000000000000000000000000009d8b9b7f575ec800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8392,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000863ce1bf06fe1a066310d4e5aea3f11bd2473675000000000000000000000000863ce1bf06fe1a066310d4e5aea3f11bd2473675000000000000000000000000000000000000000000000000009d88419d16bce000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8393,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004235dd69859c58fa0ebdd7b5e6df255a24a5bc700000000000000000000000004235dd69859c58fa0ebdd7b5e6df255a24a5bc7000000000000000000000000000000000000000000000000009d7613e49c9c8200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8394,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e4c03e75b92f7e07a15376850a4cae9f9e1b1803000000000000000000000000e4c03e75b92f7e07a15376850a4cae9f9e1b1803000000000000000000000000000000000000000000000000009e5481dd89aec900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8395,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6dde5e70c254c141caa6b1b00f171fc1178c9f6000000000000000000000000c6dde5e70c254c141caa6b1b00f171fc1178c9f6000000000000000000000000000000000000000000000000009e275fd1f575e000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8396,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd31b1775610896ea9e1dd2ab40ab16c7d03c29b000000000000000000000000bd31b1775610896ea9e1dd2ab40ab16c7d03c29b000000000000000000000000000000000000000000000000009f55b0d202dbda00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8397,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009dc97597e33ffbbf56f7304bcc520f855b49b55d0000000000000000000000009dc97597e33ffbbf56f7304bcc520f855b49b55d00000000000000000000000000000000000000000000000000a1717573d4e32a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8398,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000022e27e1997a4017643c273e4fa8552f885bd477400000000000000000000000022e27e1997a4017643c273e4fa8552f885bd477400000000000000000000000000000000000000000000000000a28ff7424894e300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8399,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a1efd1ce051d9be9f16d3452887c1a44a9b93780000000000000000000000000a1efd1ce051d9be9f16d3452887c1a44a9b937800000000000000000000000000000000000000000000000001978395190a630f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8400,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008874803a8040e343d60734d99689c1aa809c58c20000000000000000000000008874803a8040e343d60734d99689c1aa809c58c200000000000000000000000000000000000000000000000000a08a1adae03e7000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8402,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f217c58af896247d18150ef76a5112e34a97be60000000000000000000000006f217c58af896247d18150ef76a5112e34a97be60000000000000000000000000000000000000000000000000058d15e1762800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8404,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c49a331ce7186b1e7294ed3a5a2af1e73b53a921000000000000000000000000c49a331ce7186b1e7294ed3a5a2af1e73b53a92100000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8405,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d2537201050756a7e53da2006becfaa02727de50000000000000000000000000d2537201050756a7e53da2006becfaa02727de5000000000000000000000000000000000000000000000000003fe303e8a9fcd400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8406,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a8337a50441a3e5b2d187961e130b070bc9df09a000000000000000000000000a8337a50441a3e5b2d187961e130b070bc9df09a00000000000000000000000000000000000000000000000000413d86570bd6e400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8407,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000783db0d30e2ce47b9ef9eaee9e32a6caef8022f4000000000000000000000000783db0d30e2ce47b9ef9eaee9e32a6caef8022f40000000000000000000000000000000000000000000000000004536a4212a6c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8408,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000270815659d4f6ecd770546c161f9b7a929d31877000000000000000000000000270815659d4f6ecd770546c161f9b7a929d318770000000000000000000000000000000000000000000000000013bc3e39ba300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8409,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000020344897c84492526169005a77e5c31277362edb00000000000000000000000020344897c84492526169005a77e5c31277362edb000000000000000000000000000000000000000000000000003ee4f362f7cd0d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8410,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ec3b481c482e92850edf554a3ad5bcd89e15c662000000000000000000000000ec3b481c482e92850edf554a3ad5bcd89e15c66200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8411,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a02f48636a3a71d4c9e4377c562fd2e90f9485ae000000000000000000000000a02f48636a3a71d4c9e4377c562fd2e90f9485ae00000000000000000000000000000000000000000000000000028a64b14e777c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8412,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000abde762e8e7155b766200d291aeefb3cb96b8729000000000000000000000000abde762e8e7155b766200d291aeefb3cb96b87290000000000000000000000000000000000000000000000000002c337218e1ac000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8413,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007deff0333176bb6b998dc54f924bdc34f36e2f560000000000000000000000007deff0333176bb6b998dc54f924bdc34f36e2f560000000000000000000000000000000000000000000000000042eba2c376663900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8414,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c18776e78e4a5a295ab99d86912a36d38c11f3ef000000000000000000000000c18776e78e4a5a295ab99d86912a36d38c11f3ef0000000000000000000000000000000000000000000000000015abeaed21400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8415,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000541bbdbdcb20462eab5c0abaeff1f75450223c70000000000000000000000000541bbdbdcb20462eab5c0abaeff1f75450223c7000000000000000000000000000000000000000000000000000221b262dd800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8416,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc13514bc2b74b1886e7aff16645756436f2de82000000000000000000000000cc13514bc2b74b1886e7aff16645756436f2de8200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8417,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc13514bc2b74b1886e7aff16645756436f2de82000000000000000000000000cc13514bc2b74b1886e7aff16645756436f2de8200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8418,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e194ceedda82ca630ff495911683937b6b0c5c48000000000000000000000000e194ceedda82ca630ff495911683937b6b0c5c48000000000000000000000000000000000000000000000000000419103e50cd8600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8419,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000765a90ee3610330e76ae4d4010bf8abfef83ba2a000000000000000000000000765a90ee3610330e76ae4d4010bf8abfef83ba2a0000000000000000000000000000000000000000000000000005af3107a4000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8420,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ee97dbc9491f74f72a3f6e6e84eefd4d5873e8e0000000000000000000000005ee97dbc9491f74f72a3f6e6e84eefd4d5873e8e00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8421,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b379f5cf09ec93ef91162f79ecd37c32c60fb6d4000000000000000000000000b379f5cf09ec93ef91162f79ecd37c32c60fb6d400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8422,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b59543592a4cf2c9cd89ae37a0ddf589b52ab4a1000000000000000000000000b59543592a4cf2c9cd89ae37a0ddf589b52ab4a100000000000000000000000000000000000000000000000000489d562cb25a9b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8423,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ee97dbc9491f74f72a3f6e6e84eefd4d5873e8e0000000000000000000000005ee97dbc9491f74f72a3f6e6e84eefd4d5873e8e00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8424,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f923918aa540eae6756e8b0be6e84003bbcebfe0000000000000000000000006f923918aa540eae6756e8b0be6e84003bbcebfe00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8425,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a913be969fd81224a9b7022c97ee52aabaa5d1ce000000000000000000000000a913be969fd81224a9b7022c97ee52aabaa5d1ce00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8426,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fce1fbc0b5dec54e400118dc40e6bf4d7c1d7b87000000000000000000000000fce1fbc0b5dec54e400118dc40e6bf4d7c1d7b8700000000000000000000000000000000000000000000000000aa87bee538000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8427,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000156d07be5ce6cffadbe92f8171427c9bf71ffb94000000000000000000000000156d07be5ce6cffadbe92f8171427c9bf71ffb9400000000000000000000000000000000000000000000000000427a5fd37eaf6c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8428,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001876ac47bc2bcc8ccc70ff6e25206585e923923e0000000000000000000000001876ac47bc2bcc8ccc70ff6e25206585e923923e00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8429,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e605e60773ce0ee4f528159d237e80dce064331e000000000000000000000000e605e60773ce0ee4f528159d237e80dce064331e000000000000000000000000000000000000000000000000003c7b6a9e6b595200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8430,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fe489e78f1d3f8d076544ecc1242aacdb0fb6215000000000000000000000000fe489e78f1d3f8d076544ecc1242aacdb0fb621500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8431,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009d3f616e9e9179a6e9922b2eeff37dc563981ce90000000000000000000000009d3f616e9e9179a6e9922b2eeff37dc563981ce900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8432,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000092ca74bdb45f90b87770fbe3e1473df47a51b8d100000000000000000000000092ca74bdb45f90b87770fbe3e1473df47a51b8d100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8433,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004dc08221af9352f411d69648d960369d137332f00000000000000000000000004dc08221af9352f411d69648d960369d137332f000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8434,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e0a2d1950a8f9552d91d234bda7df9327e333eb0000000000000000000000000e0a2d1950a8f9552d91d234bda7df9327e333eb00000000000000000000000000000000000000000000000000180fc32d2cb60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8435,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c515d7c837c9896399d0bfeb69e74dbff9e9925c000000000000000000000000c515d7c837c9896399d0bfeb69e74dbff9e9925c00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8436,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001506942a580e61f3afd004fbdd94136bb4e5fefa0000000000000000000000001506942a580e61f3afd004fbdd94136bb4e5fefa00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8437,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a9aab3e6dbafb5c23c174066374778d957b45660000000000000000000000004a9aab3e6dbafb5c23c174066374778d957b456600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8438,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000991f88662a8a9e071b4f963b006d88af5e2631bd000000000000000000000000991f88662a8a9e071b4f963b006d88af5e2631bd00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8439,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc0faf8887cef250b2b692ae6cf2a710a79960be000000000000000000000000cc0faf8887cef250b2b692ae6cf2a710a79960be00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8440,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002deb9bc20b0ee85156bd1b453f6ace54552c3e100000000000000000000000002deb9bc20b0ee85156bd1b453f6ace54552c3e1000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8441,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000002602cda64237b42a8c90c33bd7074edd1f4c07070000000000000000000000000000000000000000000000037c1b86be361fe9bc,0xd619b3b7749864d770ac06fcea4d19d72e6992a498c21bf501d228d8fc3aa08e,2022-02-08 09:49:55.000 UTC,0,true -8442,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000068617ba9993be213696b3d2935c042a2a35dfb8000000000000000000000000068617ba9993be213696b3d2935c042a2a35dfb800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8443,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a93fe41bfb59f631b76810caf26ec6c013ed6b43000000000000000000000000a93fe41bfb59f631b76810caf26ec6c013ed6b43000000000000000000000000000000000000000000000000000238cc48d7b00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8444,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ebcdd05e56182063a0521556d71ba062576ceecc000000000000000000000000ebcdd05e56182063a0521556d71ba062576ceecc0000000000000000000000000000000000000000000000000042a143ee988ecb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8445,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000067ccdfeac464d9fa9bcafdeee13c928fa223181700000000000000000000000067ccdfeac464d9fa9bcafdeee13c928fa22318170000000000000000000000000000000000000000000000000001acbc5d8c100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8446,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000519928fd018de695b5e39d3343404ceea2cf26f8000000000000000000000000519928fd018de695b5e39d3343404ceea2cf26f8000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8447,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008db89388fa485c6b85074140b865c946dc23f6520000000000000000000000008db89388fa485c6b85074140b865c946dc23f65200000000000000000000000000000000000000000000000000a23a161324da0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8448,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003777ac398a53a27409f8caf284871b6a9dca1d710000000000000000000000003777ac398a53a27409f8caf284871b6a9dca1d71000000000000000000000000000000000000000000000000000221b262dd800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8449,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8cd49bd45db93e80c995e9eea06106896aaf290000000000000000000000000e8cd49bd45db93e80c995e9eea06106896aaf29000000000000000000000000000000000000000000000000000eb4b34a72b008000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8451,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005bab8e08de34b1c00e07767f865a8b986474d4690000000000000000000000005bab8e08de34b1c00e07767f865a8b986474d4690000000000000000000000000000000000000000000000000049e487ab9a71c800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8452,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000022f501feb15ef39026cc4eae6863f2423427a64e00000000000000000000000022f501feb15ef39026cc4eae6863f2423427a64e000000000000000000000000000000000000000000000000000252e68625c80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8459,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000421cc7b6224accb6c12280e3b697c65d9d60ad70000000000000000000000000421cc7b6224accb6c12280e3b697c65d9d60ad7000000000000000000000000000000000000000000000000000120fca2831e1ec00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8460,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d5fae9a76de0bf1063eee5d4ae05be77cb08e68a0000000000000000000000000000000000000000000000001d64e0ffd574af32,,,1,true -8461,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000071d9d738d494d4a8e2de76f3df081c24a096fbe000000000000000000000000071d9d738d494d4a8e2de76f3df081c24a096fbe00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8462,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000d061cbfcd7749558f635dea77428f83d15455f4f000000000000000000000000d061cbfcd7749558f635dea77428f83d15455f4f00000000000000000000000000000000000000000000000000000000001cfde000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x1c3a1f543319ade8b064fc581d339ea36ae33f9d6942b81e141eab90bfb09492,2022-05-07 05:56:39.000 UTC,0,true -8463,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000022f501feb15ef39026cc4eae6863f2423427a64e00000000000000000000000022f501feb15ef39026cc4eae6863f2423427a64e00000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8464,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ccec22598f81b2df2060b4803987d734ac79ea00000000000000000000000006ccec22598f81b2df2060b4803987d734ac79ea00000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8465,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009a515e8879d4e389da004a35aeffdc6fcc0608600000000000000000000000009a515e8879d4e389da004a35aeffdc6fcc06086000000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8466,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000184f35026bc65ae1116ce640b1d7751fde0c7cc8000000000000000000000000184f35026bc65ae1116ce640b1d7751fde0c7cc8000000000000000000000000000000000000000000000000000182890607900000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8467,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009a515e8879d4e389da004a35aeffdc6fcc0608600000000000000000000000009a515e8879d4e389da004a35aeffdc6fcc0608600000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8468,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003db125bed35332943fb9b7d74da6ed0dcde16d9f0000000000000000000000003db125bed35332943fb9b7d74da6ed0dcde16d9f0000000000000000000000000000000000000000000000000001d37af36a200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8469,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009caf735c8c949e465a4f35c426e5ba50abb7a4870000000000000000000000009caf735c8c949e465a4f35c426e5ba50abb7a4870000000000000000000000000000000000000000000000000002d79883d2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8470,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003cf96cad02b1c82087f11aa7c892ff91109a34150000000000000000000000003cf96cad02b1c82087f11aa7c892ff91109a34150000000000000000000000000000000000000000000000000003328b944c400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8471,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000067f53a7f020b545bb1ec501bd17b30d0202462c500000000000000000000000067f53a7f020b545bb1ec501bd17b30d0202462c5000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8472,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000053f338161f177268034c5d38f77679b72c1a284c00000000000000000000000053f338161f177268034c5d38f77679b72c1a284c0000000000000000000000000000000000000000000000000001d0d7bdf1d80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8473,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001153b404e2d3f0dfaba51a74f89f404977225c9b0000000000000000000000001153b404e2d3f0dfaba51a74f89f404977225c9b000000000000000000000000000000000000000000000000000221b262dd800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8474,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e62fca375844029c7ecf251a3f6320329b84e4ad000000000000000000000000e62fca375844029c7ecf251a3f6320329b84e4ad00000000000000000000000000000000000000000000000000030b6fdc92900000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8475,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003475dca1b35e709328e94344882bf56c023db0fc0000000000000000000000003475dca1b35e709328e94344882bf56c023db0fc00000000000000000000000000000000000000000000000002a303fe4b53000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8476,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009f886192d5c6f3c8e4478b1a0bde79ba3a68bb4f0000000000000000000000009f886192d5c6f3c8e4478b1a0bde79ba3a68bb4f0000000000000000000000000000000000000000000000000001eec3dec2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8477,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d491c4f7291e1d0a60774635218edb35857ff09f000000000000000000000000d491c4f7291e1d0a60774635218edb35857ff09f000000000000000000000000000000000000000000000000000175cd6500b00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8479,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000687966bd74782f3585d471442231100abb5a46d8000000000000000000000000687966bd74782f3585d471442231100abb5a46d8000000000000000000000000000000000000000000000000002a59568f9e6f0600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8480,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000877ace1b6e0f421fffb33fe73856ef011de158c9000000000000000000000000877ace1b6e0f421fffb33fe73856ef011de158c90000000000000000000000000000000000000000000000000045314e81f8955d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8481,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9006c3732dde8c2d5c4ce65568179035ace744d000000000000000000000000e9006c3732dde8c2d5c4ce65568179035ace744d00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8482,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c032a30d6446d70963a91694693cad2c7fa25ca8000000000000000000000000c032a30d6446d70963a91694693cad2c7fa25ca80000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8483,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fe33afe1109a52d7f6311cc0b8b8388d547ea5c0000000000000000000000007fe33afe1109a52d7f6311cc0b8b8388d547ea5c00000000000000000000000000000000000000000000000000a50aae61d1b86600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8485,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000adfd117f7e3fca69a28ac4f415bee1132b2c265c000000000000000000000000adfd117f7e3fca69a28ac4f415bee1132b2c265c0000000000000000000000000000000000000000000000000006484a6b74f72f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8486,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000678970c3f6ed29662a580dc276d40fd1db5412d6000000000000000000000000678970c3f6ed29662a580dc276d40fd1db5412d600000000000000000000000000000000000000000000000000911f41f5b47c9300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8487,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000002d885d747c93fc075ffbfe43074a3ebd7c2c21a00000000000000000000000002d885d747c93fc075ffbfe43074a3ebd7c2c21a000000000000000000000000000000000000000000000000000c69b36465b63f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8488,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a6c34c40ee88667d145a789516dd3aac6ff66569000000000000000000000000a6c34c40ee88667d145a789516dd3aac6ff665690000000000000000000000000000000000000000000000000016f59fa05cfdd600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8489,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c3b9fe8c9cb09360f1b72d91681cdaaf7d9fe575000000000000000000000000c3b9fe8c9cb09360f1b72d91681cdaaf7d9fe575000000000000000000000000000000000000000000000000008845c95fe1680000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8490,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a6c34c40ee88667d145a789516dd3aac6ff66569000000000000000000000000a6c34c40ee88667d145a789516dd3aac6ff66569000000000000000000000000000000000000000000000000001dc1811eddd51e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8491,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a6c34c40ee88667d145a789516dd3aac6ff66569000000000000000000000000a6c34c40ee88667d145a789516dd3aac6ff665690000000000000000000000000000000000000000000000000000d12c7f080bff00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8492,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000365a3ec18ea9e4591dbd2e7687cb14f472f4b559000000000000000000000000365a3ec18ea9e4591dbd2e7687cb14f472f4b559000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8493,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000050f71937e2ca4cff80e713f188db1a989d76dcae00000000000000000000000050f71937e2ca4cff80e713f188db1a989d76dcae00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8494,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dbeab3ac04a0b633bf9c7aaf102330fbc50387dd000000000000000000000000dbeab3ac04a0b633bf9c7aaf102330fbc50387dd000000000000000000000000000000000000000000000000006782b01e18e30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8495,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000011d26bd5b0cc0762431e5be22ed10317a6440e6b00000000000000000000000011d26bd5b0cc0762431e5be22ed10317a6440e6b000000000000000000000000000000000000000000000000000c23ad62f3ff4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8496,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008a7a56ab6d5bb974f2d3e35e2ebc2ed261feacb00000000000000000000000008a7a56ab6d5bb974f2d3e35e2ebc2ed261feacb0000000000000000000000000000000000000000000000000002714711487800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8498,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000407410d84e15f79642272edaeb437ac65d7298e6000000000000000000000000407410d84e15f79642272edaeb437ac65d7298e60000000000000000000000000000000000000000000000000007d0e36a81800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8499,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004cb62717bfee56bd65111dc7006afbe53a41e6c90000000000000000000000004cb62717bfee56bd65111dc7006afbe53a41e6c90000000000000000000000000000000000000000000000000077c6985a22e64500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8500,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001d1870a437031ea33add0d3e1cb9fbbb89cac91c0000000000000000000000001d1870a437031ea33add0d3e1cb9fbbb89cac91c00000000000000000000000000000000000000000000000000c15831e3c6781e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8501,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000063968e995e962375d3bc514bef7fd9b78aaa550b00000000000000000000000063968e995e962375d3bc514bef7fd9b78aaa550b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8502,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c03cd00d464faa73dd37111358905f3c6c96999f000000000000000000000000c03cd00d464faa73dd37111358905f3c6c96999f0000000000000000000000000000000000000000000000000000d15d9251d44000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8503,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000134342210990c23e58cac9224af88882f455a75c000000000000000000000000134342210990c23e58cac9224af88882f455a75c00000000000000000000000000000000000000000000000000e858af89f5948300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x3c31b2075c0ed0d5464c432cc8ced58c31b403630592cdf88dc18ccfb83168d5,2022-05-16 06:55:13.000 UTC,0,true -8504,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009682b2878122d178dcf20185c7ad9f5a39a1d0fa0000000000000000000000009682b2878122d178dcf20185c7ad9f5a39a1d0fa00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8506,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf42be03d6c9ecabcc98b0b8198c63d5062d078b000000000000000000000000cf42be03d6c9ecabcc98b0b8198c63d5062d078b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8507,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037ee45e654e4d602a5487faa14197a8a2d45e34c00000000000000000000000037ee45e654e4d602a5487faa14197a8a2d45e34c0000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8508,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b30f8c4b4957333f905a8fa1a4cb5fb3876ad37f000000000000000000000000b30f8c4b4957333f905a8fa1a4cb5fb3876ad37f0000000000000000000000000000000000000000000000000001aa1a47315e4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8510,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc0920a6a94919c3bba20ee0d53612b9054a013a000000000000000000000000cc0920a6a94919c3bba20ee0d53612b9054a013a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8511,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009dc922ae6cf0b888592a72d32839fac7c43f55870000000000000000000000009dc922ae6cf0b888592a72d32839fac7c43f558700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8514,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004988ec8fa41ac3430611e9abfc453329f26fa3770000000000000000000000004988ec8fa41ac3430611e9abfc453329f26fa3770000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8515,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7f8a31c11193b801785993894cbce9af3b23368000000000000000000000000d7f8a31c11193b801785993894cbce9af3b2336800000000000000000000000000000000000000000000000000968f1757353f9e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8516,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005167078032728ab3f1915c353badd2441edbc7920000000000000000000000005167078032728ab3f1915c353badd2441edbc792000000000000000000000000000000000000000000000000000414aafc9d368000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8517,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000934c53be5f96f298e55b83763aa9aa84bd2ed438000000000000000000000000934c53be5f96f298e55b83763aa9aa84bd2ed43800000000000000000000000000000000000000000000000000004d4e9ace500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8519,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001fca6887e8f99f3f40f980a837f487d46224a1d80000000000000000000000001fca6887e8f99f3f40f980a837f487d46224a1d8000000000000000000000000000000000000000000000000000044936e37500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8520,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000008e7488075d58158083330e9f37db55056b5edb33000000000000000000000000000000000000000000000002b5e3af16b1880000,0x6533748c005fd3fb6c2b567228a6b32ce60d9f890f6857a60c8c51c6d4ed18ec,2021-12-24 08:12:51.000 UTC,0,true -8521,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000091cf62d238d64103ebe29f65e53fe5cbeff60f7f00000000000000000000000091cf62d238d64103ebe29f65e53fe5cbeff60f7f00000000000000000000000000000000000000000000000000005666e940f00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8522,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6d3c16c3f3414ff268efb043f913a4d492e825c000000000000000000000000b6d3c16c3f3414ff268efb043f913a4d492e825c0000000000000000000000000000000000000000000000000000338740c1200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8523,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000197ee44e8749419f4d87ebc9d311b15345137657000000000000000000000000197ee44e8749419f4d87ebc9d311b15345137657000000000000000000000000000000000000000000000000000046f0ca4ae00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8524,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000058b02cca85bfe859a9a5f1957bd27d29aacb71f300000000000000000000000058b02cca85bfe859a9a5f1957bd27d29aacb71f30000000000000000000000000000000000000000000000000000327a19c8f80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8525,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000101539495fdb941639fca27c8e17424c7fbe37e6000000000000000000000000101539495fdb941639fca27c8e17424c7fbe37e600000000000000000000000000000000000000000000000000003be191cfe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8526,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000177e6d1beaee7a3331d8dacbd829fdda1a4e8356000000000000000000000000177e6d1beaee7a3331d8dacbd829fdda1a4e835600000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8528,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd12c0787a0d9eab016cfd2ef26620f2ae9cbb79000000000000000000000000dd12c0787a0d9eab016cfd2ef26620f2ae9cbb790000000000000000000000000000000000000000000000000000434d77b6a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8529,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000685a6447906bd6ffafaa27cc1867abb87ee87c6b000000000000000000000000685a6447906bd6ffafaa27cc1867abb87ee87c6b0000000000000000000000000000000000000000000000000000356328a5f80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8530,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a5ff89a6331e1b7145d9024523ab7bc92f0853c0000000000000000000000005a5ff89a6331e1b7145d9024523ab7bc92f0853c00000000000000000000000000000000000000000000000000001719e5fa300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8531,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004b05dafc5da73a5c20163568c18c58daa40ab8540000000000000000000000004b05dafc5da73a5c20163568c18c58daa40ab85400000000000000000000000000000000000000000000000000005ac47f8c700000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8532,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e4ba7e02b90527dbb0cbb5173e42ae486cb8ae89000000000000000000000000e4ba7e02b90527dbb0cbb5173e42ae486cb8ae8900000000000000000000000000000000000000000000000000003291623fe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8533,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049fc3f948a2374e5d3d92bfb8dbc2173d27882cc00000000000000000000000049fc3f948a2374e5d3d92bfb8dbc2173d27882cc00000000000000000000000000000000000000000000000000003b7b1fc4b00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8535,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d90c9f524e9b2c01a043d546456560db4af16130000000000000000000000003d90c9f524e9b2c01a043d546456560db4af161300000000000000000000000000000000000000000000000000008c0feb4ba00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8537,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e227b016dd30cdea3d72ff050cf90a5de57c8dc4000000000000000000000000e227b016dd30cdea3d72ff050cf90a5de57c8dc40000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8538,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000764c417532dc983b80294a3da65b269da712c564000000000000000000000000764c417532dc983b80294a3da65b269da712c56400000000000000000000000000000000000000000000000000376e4164382e1700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8539,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099c2fd7a0e0820ddcc859ff8567426d28f74557600000000000000000000000099c2fd7a0e0820ddcc859ff8567426d28f74557600000000000000000000000000000000000000000000000000130d551f49d9e700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8540,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008ae882adb8c6c87f33896069c64f44bdf1f3f1820000000000000000000000008ae882adb8c6c87f33896069c64f44bdf1f3f182000000000000000000000000000000000000000000000000069f9d23bdc3f85600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8541,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099c2fd7a0e0820ddcc859ff8567426d28f74557600000000000000000000000099c2fd7a0e0820ddcc859ff8567426d28f745576000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8543,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099c2fd7a0e0820ddcc859ff8567426d28f74557600000000000000000000000099c2fd7a0e0820ddcc859ff8567426d28f745576000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8544,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cab55b0de19c01cdd284535a3fe8d73a657525bb000000000000000000000000cab55b0de19c01cdd284535a3fe8d73a657525bb0000000000000000000000000000000000000000000000000096193d81d8dd8900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8545,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000063e077bf9b0faf76704cafe9f053e415112271c300000000000000000000000063e077bf9b0faf76704cafe9f053e415112271c3000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8547,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5ffc23c7fc71d65a5a9e30a161b4fbd3d6a093a000000000000000000000000e5ffc23c7fc71d65a5a9e30a161b4fbd3d6a093a00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8548,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078b6849ca39cfb26b1de6742a3349ad54a18e02e00000000000000000000000078b6849ca39cfb26b1de6742a3349ad54a18e02e00000000000000000000000000000000000000000000000000911fbea4781c7a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8550,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000008efebae61c2abfd41181dcc04f3c36334cb820a00000000000000000000000008efebae61c2abfd41181dcc04f3c36334cb820a000000000000000000000000000000000000000000000000002039396b5e440000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8551,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d06240b68a66fc009cd81ef695b4b4cc31e37bf9000000000000000000000000d06240b68a66fc009cd81ef695b4b4cc31e37bf900000000000000000000000000000000000000000000000002c68af0bb14000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8552,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa692efef3f2d1d0639755299c797c6a3579b25e000000000000000000000000aa692efef3f2d1d0639755299c797c6a3579b25e000000000000000000000000000000000000000000000000009c757ce290c5d200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8553,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000056d662d0e2dbe179dfeee9f8fc4038f3128ccdc600000000000000000000000056d662d0e2dbe179dfeee9f8fc4038f3128ccdc600000000000000000000000000000000000000000000000000168fcc219efbae00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8555,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005734d110867db331fce3c5e863ddb6a4f0201ed20000000000000000000000005734d110867db331fce3c5e863ddb6a4f0201ed2000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8559,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007607ee99410e57e5da56cc9f334235c7663930940000000000000000000000007607ee99410e57e5da56cc9f334235c766393094000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8560,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000048cf31c151b1a2dfb5d2c9a90552f05c8aeca9cd00000000000000000000000048cf31c151b1a2dfb5d2c9a90552f05c8aeca9cd000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8561,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be76ec0c017db75da73254ce30c65fd2c6e7058d000000000000000000000000be76ec0c017db75da73254ce30c65fd2c6e7058d000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8566,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e2cfb11253c219e8af1623a3b29788717e7b3db2000000000000000000000000e2cfb11253c219e8af1623a3b29788717e7b3db2000000000000000000000000000000000000000000000000006ec714722ede9a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8567,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e64c5aaddfa2f0274aa73367bee6e3879b0f9540000000000000000000000004e64c5aaddfa2f0274aa73367bee6e3879b0f954000000000000000000000000000000000000000000000000004f94ae6af8000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8568,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b255d025a6a1da4e5a707f8501dac148a0be382c000000000000000000000000b255d025a6a1da4e5a707f8501dac148a0be382c000000000000000000000000000000000000000000000000015f271d29aa460000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xffb196ad45f6b6f4b718b043f3a14b1658ac1c037dfaa64a58201e58e39a039f,2021-12-18 11:47:14.000 UTC,0,true -8569,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bb62fab8d0e5303310d90ec325fe84f342671b43000000000000000000000000bb62fab8d0e5303310d90ec325fe84f342671b430000000000000000000000000000000000000000000000000138f2f038467b4f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8570,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000775dcdcff29bd88721172ecb35da4e948bcc8667000000000000000000000000775dcdcff29bd88721172ecb35da4e948bcc866700000000000000000000000000000000000000000000000000193223118055fb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8572,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000097a136d6b1ab9fc5e8ae9dbaec812e2d6eb4893e00000000000000000000000097a136d6b1ab9fc5e8ae9dbaec812e2d6eb4893e0000000000000000000000000000000000000000000000000014db79f698080e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8574,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000ad268606cec97ef0fa77f74ddbebdcebbbd8d7c4000000000000000000000000ad268606cec97ef0fa77f74ddbebdcebbbd8d7c4000000000000000000000000000000000000000000000000000000000319750000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -8575,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fcf03727718cccaa55123eb6f21e57a60d972481000000000000000000000000fcf03727718cccaa55123eb6f21e57a60d97248100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8576,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007823ac7dd217d0f7cb5c49410b2c894d052bda760000000000000000000000007823ac7dd217d0f7cb5c49410b2c894d052bda7600000000000000000000000000000000000000000000000000288529f74657ee00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8577,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fcf03727718cccaa55123eb6f21e57a60d972481000000000000000000000000fcf03727718cccaa55123eb6f21e57a60d972481000000000000000000000000000000000000000000000000003af6a58e9e650000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8578,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a054517dab4695751c5276148a29a245c2163550000000000000000000000000a054517dab4695751c5276148a29a245c216355000000000000000000000000000000000000000000000000000352526bcc9ee0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8579,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e64c5aaddfa2f0274aa73367bee6e3879b0f9540000000000000000000000004e64c5aaddfa2f0274aa73367bee6e3879b0f95400000000000000000000000000000000000000000000000000399ca53698600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8581,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006972fe17e3b739a9851da27ba3602ad0e76aabb80000000000000000000000006972fe17e3b739a9851da27ba3602ad0e76aabb80000000000000000000000000000000000000000000000000060681d79af9f6c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xc887e18fc8be649f4b2a72fc2767d892754572952385ec4fd2eda91d2de64a9d,2022-03-12 07:32:39.000 UTC,0,true -8583,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd925e0bac97cd4b988539620141753d6345969d000000000000000000000000dd925e0bac97cd4b988539620141753d6345969d000000000000000000000000000000000000000000000000002917e64fa5b11a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8584,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000815c971b10315a50ecc1fe77cfcb5ff8093f2493000000000000000000000000815c971b10315a50ecc1fe77cfcb5ff8093f2493000000000000000000000000000000000000000000000000002badafaa018d7200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8585,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000091b597ad2ff79cc5266e326ca728adfe44757c5700000000000000000000000091b597ad2ff79cc5266e326ca728adfe44757c570000000000000000000000000000000000000000000000000015c8ac92b21c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8586,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005099683a6a18d13f025cfd19a4767d00448176200000000000000000000000005099683a6a18d13f025cfd19a4767d0044817620000000000000000000000000000000000000000000000000002bd91620ecbb8a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8589,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a4cfca09d930c6634f074ca6bea7ec69c0625037000000000000000000000000a4cfca09d930c6634f074ca6bea7ec69c06250370000000000000000000000000000000000000000000000000058d15e1762800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8590,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8846f368ccb46308a40379c28d85408fa891baf000000000000000000000000e8846f368ccb46308a40379c28d85408fa891baf000000000000000000000000000000000000000000000000001f04307a21b10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8591,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007c629a744d5d4641ae11032630432ce48e74971b0000000000000000000000007c629a744d5d4641ae11032630432ce48e74971b00000000000000000000000000000000000000000000000000295d641fda672300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8592,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f119602f96bbcf31604360a46dda1ed10b501b57000000000000000000000000f119602f96bbcf31604360a46dda1ed10b501b570000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8593,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d489f49c614deac1ed8463ebe789555b1e519485000000000000000000000000d489f49c614deac1ed8463ebe789555b1e51948500000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8595,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7a99e49910499eb0f78eff09a422068ea438fa6000000000000000000000000c7a99e49910499eb0f78eff09a422068ea438fa60000000000000000000000000000000000000000000000000031091b06392f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8597,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d1da2a98a7d498d6bd18b053359fc11c9d9e079d000000000000000000000000d1da2a98a7d498d6bd18b053359fc11c9d9e079d00000000000000000000000000000000000000000000000000000002540be40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8598,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b5ea922bd46a0c1cb6a6699a3b7b5964a4b7f6cc000000000000000000000000b5ea922bd46a0c1cb6a6699a3b7b5964a4b7f6cc000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8599,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047a72907b9d6488cb0d164de592b0be0bb95554f00000000000000000000000047a72907b9d6488cb0d164de592b0be0bb95554f000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8600,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d4d97dea692f8cb1f3e80dbd1724ae7b3305d180000000000000000000000002d4d97dea692f8cb1f3e80dbd1724ae7b3305d18000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8601,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e085c4425e8a3a7b05fe77e929c6db8779f25f41000000000000000000000000e085c4425e8a3a7b05fe77e929c6db8779f25f41000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8602,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000089329fcc52c2e5ad78f32cddc92a75aadb7ad2b600000000000000000000000089329fcc52c2e5ad78f32cddc92a75aadb7ad2b6000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8603,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002055d8ef30cfa3ba2f14d8cc4be8738ae09400d80000000000000000000000002055d8ef30cfa3ba2f14d8cc4be8738ae09400d800000000000000000000000000000000000000000000000000838ff79d0fee6700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8604,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000255af8e20e5ff15268bf4ca81f4679d0abe32102000000000000000000000000255af8e20e5ff15268bf4ca81f4679d0abe32102000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8605,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dae836e608110d6c81d6ff7dafd327d52126e976000000000000000000000000dae836e608110d6c81d6ff7dafd327d52126e976000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8606,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bb18a38061a5ed1490dcee7d6941a0a9c2a82b50000000000000000000000000bb18a38061a5ed1490dcee7d6941a0a9c2a82b50000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8607,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001933baa0d5e98fd53e60f237b67e39d40cda19e50000000000000000000000001933baa0d5e98fd53e60f237b67e39d40cda19e5000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8608,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000041d5def13c7602b129bbed114c44ee0fec5ef74400000000000000000000000041d5def13c7602b129bbed114c44ee0fec5ef744000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8609,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076aa729dc76da61b5a59b06ca678fefec86c332200000000000000000000000076aa729dc76da61b5a59b06ca678fefec86c3322000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8610,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d954013b3866152d5c788eff83eb69704621a497000000000000000000000000d954013b3866152d5c788eff83eb69704621a497000000000000000000000000000000000000000000000000004380663abb800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8611,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c9f580d9062c41f0858f6b19d2491217b76cb9f0000000000000000000000004c9f580d9062c41f0858f6b19d2491217b76cb9f000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8612,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009554c02da9113f9cca954405ad401090751178c20000000000000000000000009554c02da9113f9cca954405ad401090751178c2000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8613,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e7ab243035c94a87ee3d97d8bbab9b8514e52b86000000000000000000000000e7ab243035c94a87ee3d97d8bbab9b8514e52b86000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8614,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ea49c6dc749d2a34d51f24de63b9ea1fe3605100000000000000000000000007ea49c6dc749d2a34d51f24de63b9ea1fe360510000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8615,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff22a6b7d20a0eacd62b428da07171fa7be6e67a000000000000000000000000ff22a6b7d20a0eacd62b428da07171fa7be6e67a00000000000000000000000000000000000000000000000003fe9ee53deae91c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8616,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001eb4b6976d04e9df25d7426fcb409e5d9d99cb6f0000000000000000000000001eb4b6976d04e9df25d7426fcb409e5d9d99cb6f000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8618,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005aa07a9d950f1b496b928dd455d6be761ccc0f8d0000000000000000000000005aa07a9d950f1b496b928dd455d6be761ccc0f8d000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8619,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004660a02784d60ad35a50005df3981f1ad40c491f0000000000000000000000004660a02784d60ad35a50005df3981f1ad40c491f000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8620,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0b78ccc36a78a6ab0b8ddcc56a00fd292e222d3000000000000000000000000c0b78ccc36a78a6ab0b8ddcc56a00fd292e222d3000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8621,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001ab6a10692855a79b34644ec47ecbe04071579350000000000000000000000001ab6a10692855a79b34644ec47ecbe0407157935000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8622,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000681df54a8672b76796b29f5402866da2065249c0000000000000000000000000681df54a8672b76796b29f5402866da2065249c0000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8623,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004eb1bf3c42fc1c394078c33174479f550c11430f0000000000000000000000004eb1bf3c42fc1c394078c33174479f550c11430f000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8624,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021c64d4d94938af244e1c80dc3c52c0d23b2af8f00000000000000000000000021c64d4d94938af244e1c80dc3c52c0d23b2af8f000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8625,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000926051a979aa8dd87a4cc49fcc40ac3eacc57750000000000000000000000000926051a979aa8dd87a4cc49fcc40ac3eacc5775000000000000000000000000000000000000000000000000005e17bd19b47c4100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8626,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000d954013b3866152d5c788eff83eb69704621a497000000000000000000000000d954013b3866152d5c788eff83eb69704621a497000000000000000000000000000000000000000000000000000000000112a88000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -8627,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c981cb893a285cb5276488099023389afa134650000000000000000000000003c981cb893a285cb5276488099023389afa13465000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8629,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007c3dd65805ed46f78e3665f15899146140c0e30e0000000000000000000000007c3dd65805ed46f78e3665f15899146140c0e30e000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8630,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000023c63cb0b2fc6925f5ca3bf0fe2bf0a22ba39b6f00000000000000000000000023c63cb0b2fc6925f5ca3bf0fe2bf0a22ba39b6f000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8631,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e12c11e98b97f5788baa0c8a1034ae68a9662482000000000000000000000000e12c11e98b97f5788baa0c8a1034ae68a9662482000000000000000000000000000000000000000000000000007393ee87573e7d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8632,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ccab53eda7efb901cbb4d52454ff382c7a8afb00000000000000000000000006ccab53eda7efb901cbb4d52454ff382c7a8afb0000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8633,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6241b99a30554c52c3713026b1d6e485158ea73000000000000000000000000c6241b99a30554c52c3713026b1d6e485158ea73000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8634,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000098566c84c47c5d9eba54a3931b150e4e2327c72000000000000000000000000098566c84c47c5d9eba54a3931b150e4e2327c720000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8635,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b437e238bf5ee4fd2240fc5ff4740691ad440549000000000000000000000000b437e238bf5ee4fd2240fc5ff4740691ad4405490000000000000000000000000000000000000000000000000012202d1274aca800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8636,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000067a63f68052d70bdaebb15786d73ca55c8ecae0f00000000000000000000000067a63f68052d70bdaebb15786d73ca55c8ecae0f000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8637,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009729e4584afb7ae74aca69d982c43c2c02d03a2b0000000000000000000000009729e4584afb7ae74aca69d982c43c2c02d03a2b000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8638,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000f81cfeab6217a0d2b0144cb1238dad0b55be6f90000000000000000000000000f81cfeab6217a0d2b0144cb1238dad0b55be6f9000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8639,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e060d80e2e284282a710f08a105db7328110c920000000000000000000000008e060d80e2e284282a710f08a105db7328110c92000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8640,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005f3f94b8bae2b195e8efe85d5872ee76602af3f90000000000000000000000005f3f94b8bae2b195e8efe85d5872ee76602af3f9000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8641,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a109e8af4af849bf79add6649e67ae07663a284a000000000000000000000000a109e8af4af849bf79add6649e67ae07663a284a000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8642,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fb008401e9ad8e98b9b1999b45b7a094813930dd000000000000000000000000fb008401e9ad8e98b9b1999b45b7a094813930dd000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8643,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8ec9189b9a8e6fff4081b02798229e9667b0ff4000000000000000000000000e8ec9189b9a8e6fff4081b02798229e9667b0ff4000000000000000000000000000000000000000000000000020279e9a77a5afc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7c0d52c0d6984b3fa98313995751521880fe89eb6850bf7438fb119881c88eb4,2021-11-28 07:36:08.000 UTC,0,true -8644,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f29c7278d460b590f8e0ed780c6266837a7e98d7000000000000000000000000f29c7278d460b590f8e0ed780c6266837a7e98d7000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8645,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dfb2546ad9b9e461abb03fe5491bad95250d0f75000000000000000000000000dfb2546ad9b9e461abb03fe5491bad95250d0f75000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8647,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001de786dc3586de4eac8627d2eaf8164dd3fc506d0000000000000000000000001de786dc3586de4eac8627d2eaf8164dd3fc506d000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8648,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e475fb57a19f7acbb16734560c2ba4de8f093b12000000000000000000000000e475fb57a19f7acbb16734560c2ba4de8f093b12000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8649,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ecfc2f7c4f7d98e27b801d78dc58a26217d7707c000000000000000000000000ecfc2f7c4f7d98e27b801d78dc58a26217d7707c000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8650,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005bf506ef751596fd72c7346f078232070b253c0e0000000000000000000000005bf506ef751596fd72c7346f078232070b253c0e000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8651,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b910ba7e631c642965b58308b1d29b84341c32f8000000000000000000000000b910ba7e631c642965b58308b1d29b84341c32f8000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8652,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055fb49b462a42d5af6078717c77f0ffb28859d7200000000000000000000000055fb49b462a42d5af6078717c77f0ffb28859d72000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8653,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca3811070abc940e95643bef8c47a9a108aaa768000000000000000000000000ca3811070abc940e95643bef8c47a9a108aaa768000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8654,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f6b2f2ecebf791768ec0c583d41fd3ffff17a120000000000000000000000002f6b2f2ecebf791768ec0c583d41fd3ffff17a12000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8655,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8b3bbe9c82a4e64550f30b0a100d51eff99a618000000000000000000000000e8b3bbe9c82a4e64550f30b0a100d51eff99a61800000000000000000000000000000000000000000000000000100ca6d56a7a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8656,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f4530ca9327217af710f382c9209973a1e66d04d000000000000000000000000f4530ca9327217af710f382c9209973a1e66d04d000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8657,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005840379db6f88f09492cd090dc6837b09097c5160000000000000000000000005840379db6f88f09492cd090dc6837b09097c516000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8658,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000573a7938d10b9b89f01642bd459cb4650c11474b000000000000000000000000573a7938d10b9b89f01642bd459cb4650c11474b000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8659,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004cb780fd3286f2d10199b61423d1c804bd2a5d2b0000000000000000000000004cb780fd3286f2d10199b61423d1c804bd2a5d2b000000000000000000000000000000000000000000000000001368c8aca8e44000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8663,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000463bb4e552cf87d88319ddb1012fac4682c61b28000000000000000000000000463bb4e552cf87d88319ddb1012fac4682c61b28000000000000000000000000000000000000000000000000001898fa413d2c3700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8664,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000076655696e3abcc91f86e6d91c7019f9bae6f014000000000000000000000000076655696e3abcc91f86e6d91c7019f9bae6f014000000000000000000000000000000000000000000000000002aa1efb94e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8665,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b72f0a2e5269951e3bcbeb50e8e35f182043f790000000000000000000000002b72f0a2e5269951e3bcbeb50e8e35f182043f790000000000000000000000000000000000000000000000000014da53dfae255d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8667,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9fbc77427074635331abcf9e57b47dbfdc3edf2000000000000000000000000e9fbc77427074635331abcf9e57b47dbfdc3edf200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8669,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9fbc77427074635331abcf9e57b47dbfdc3edf2000000000000000000000000e9fbc77427074635331abcf9e57b47dbfdc3edf200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8670,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d99d383ff00a24a5af94b64c09570b8d8fb7aa0f000000000000000000000000d99d383ff00a24a5af94b64c09570b8d8fb7aa0f0000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8671,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9f3b9e68ead6179dedbbbc781e3ccca4f7409ad000000000000000000000000e9f3b9e68ead6179dedbbbc781e3ccca4f7409ad000000000000000000000000000000000000000000000000003c6568f12e800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8672,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005686633573ceaca844621daf102a0c5dd1b102150000000000000000000000005686633573ceaca844621daf102a0c5dd1b1021500000000000000000000000000000000000000000000000000518f6e506c1c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8673,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1c3e416c5592fdc87f538dd6d7f8f5bc4a908a2000000000000000000000000c1c3e416c5592fdc87f538dd6d7f8f5bc4a908a200000000000000000000000000000000000000000000000000aff92204a3e6ad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8674,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000000e3cbd67b2e89cb57fd3dc852484136ec768dd680000000000000000000000000000000000000000000000001bc16d674ec80000,,,1,true -8675,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000000ad65afa08e18ae282088bbae83526d6f14554b5000000000000000000000000000000000000000000000000140e46e10013c2ab,,,1,true -8676,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a9ee69b6781c18164ee9f7c58f1763bcffc7c510000000000000000000000006a9ee69b6781c18164ee9f7c58f1763bcffc7c510000000000000000000000000000000000000000000000000dc2f6866b062a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8679,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045a5549b2baf17dcaa883e1b4f40bc89abce8a2e00000000000000000000000045a5549b2baf17dcaa883e1b4f40bc89abce8a2e000000000000000000000000000000000000000000000000005b4bab14e4329c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x275a3e27205f29d81676da4ef45bea7ea9109e9d0402e9051a937611c9b8f227,2021-12-12 06:26:21.000 UTC,0,true -8680,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6305f5b950f22b1997247017bdab763d9a5e224000000000000000000000000c6305f5b950f22b1997247017bdab763d9a5e22400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8681,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a93718595a93c81cc4e34104092eda31e43a9499000000000000000000000000a93718595a93c81cc4e34104092eda31e43a94990000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8683,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b68c9cb7d998c0959ad97d47ec7e6b0f3e93d8be000000000000000000000000b68c9cb7d998c0959ad97d47ec7e6b0f3e93d8be0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8684,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1035d8072333180191ad98d7971d9015f6e7b26000000000000000000000000c1035d8072333180191ad98d7971d9015f6e7b26000000000000000000000000000000000000000000000000002714711487800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8685,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae3d48ad47ad3a446c0205d3d0f6a94c439bd163000000000000000000000000ae3d48ad47ad3a446c0205d3d0f6a94c439bd163000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8687,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000fdbfceecd0df13f8ed2311211eb08f52dea041f0000000000000000000000000fdbfceecd0df13f8ed2311211eb08f52dea041f000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8688,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fcdf99014248fc287a1dd2747caa7a52035b63b2000000000000000000000000fcdf99014248fc287a1dd2747caa7a52035b63b20000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8689,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f87cc56adf0d44f8e2da7023f5403534bf2c9f80000000000000000000000007f87cc56adf0d44f8e2da7023f5403534bf2c9f8000000000000000000000000000000000000000000000000001e98843d3f8e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8691,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c02230f20dfa84e8ea2102fd1be5f20f22089bc9000000000000000000000000c02230f20dfa84e8ea2102fd1be5f20f22089bc90000000000000000000000000000000000000000000000000055c275c73d221b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8692,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000774058bea27013e38f2182fbcfa8883beb870ec8000000000000000000000000774058bea27013e38f2182fbcfa8883beb870ec8000000000000000000000000000000000000000000000000001af262f25a71b100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8694,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006665fec3fa3ff6b0d318d6d9348ea0808cfae8be0000000000000000000000006665fec3fa3ff6b0d318d6d9348ea0808cfae8be000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8695,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000716e5d3550948c68ecf9966c39bda74da13c0613000000000000000000000000716e5d3550948c68ecf9966c39bda74da13c061300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8696,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000761634ae1f79ce06d658a9a08f2521c88276b898000000000000000000000000761634ae1f79ce06d658a9a08f2521c88276b898000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8697,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c75de1d876334f103f795b7b931a0dba0d627941000000000000000000000000c75de1d876334f103f795b7b931a0dba0d62794100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8698,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9be27da8deaa03fdf2a40558e5100e91f39594f000000000000000000000000c9be27da8deaa03fdf2a40558e5100e91f39594f000000000000000000000000000000000000000000000000001bc5fbb89fd37700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8699,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eb2ca0d610f449c65ccdc4151200643ffd956e7e000000000000000000000000eb2ca0d610f449c65ccdc4151200643ffd956e7e000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8700,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005fe6cb581fef51949022a4960b74ff2c2903e77f0000000000000000000000005fe6cb581fef51949022a4960b74ff2c2903e77f000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8701,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a6a5965a7f8998b5b8e1febddb34d394252f5c13000000000000000000000000a6a5965a7f8998b5b8e1febddb34d394252f5c13000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8702,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000022e45db423c0974de0f5f2dde836519d1a173e5f00000000000000000000000022e45db423c0974de0f5f2dde836519d1a173e5f000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8703,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ffb19ed04a94d3cefe20e8a89f7c13085d5e244e000000000000000000000000ffb19ed04a94d3cefe20e8a89f7c13085d5e244e000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8704,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbe51818354300f2b95f224e584967819260de80000000000000000000000000cbe51818354300f2b95f224e584967819260de80000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8705,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000068adeb69fe02f191f744dbc8ce53cb5f517e823600000000000000000000000068adeb69fe02f191f744dbc8ce53cb5f517e8236000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8706,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e15430ebbc70a4d32bcd8d9f1861c68a68888f60000000000000000000000002e15430ebbc70a4d32bcd8d9f1861c68a68888f600000000000000000000000000000000000000000000000000002d79883d200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8707,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b804c290fc1e2d6bbd7c7099e0738d12a0b4437c000000000000000000000000b804c290fc1e2d6bbd7c7099e0738d12a0b4437c0000000000000000000000000000000000000000000000000d9ab6fa344a5bbe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8712,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bacbccda5f670437d2d5473e21d1b41f027dea0d000000000000000000000000bacbccda5f670437d2d5473e21d1b41f027dea0d00000000000000000000000000000000000000000000000000392ec52d5c152500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8713,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000495e9ac565e21f89589675d8a93133a54d7d831c000000000000000000000000495e9ac565e21f89589675d8a93133a54d7d831c000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8715,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000087df47f57fa337a7deeb12e01220d0a72ef9bf3200000000000000000000000087df47f57fa337a7deeb12e01220d0a72ef9bf32000000000000000000000000000000000000000000000000004221b3706da60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8721,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b7aa0e8b7a67d11ec26f6b13a70fc0e510f760bb000000000000000000000000b7aa0e8b7a67d11ec26f6b13a70fc0e510f760bb00000000000000000000000000000000000000000000000000a33fbf40f665f100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8722,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f4d9529df32208efa4cfc7ef2711c49546ad87b0000000000000000000000000f4d9529df32208efa4cfc7ef2711c49546ad87b0000000000000000000000000000000000000000000000000003882824f5bf77f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8723,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fcb830302bc8994d2b518d29e29f53e012a10fe8000000000000000000000000fcb830302bc8994d2b518d29e29f53e012a10fe8000000000000000000000000000000000000000000000000000de5295e13950000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8724,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000434290f0f31723a16e07b705bdd0e8f5e49b6b04000000000000000000000000434290f0f31723a16e07b705bdd0e8f5e49b6b04000000000000000000000000000000000000000000000000000dbf2063d4fd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8727,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f09473bead03711eb34f3efd5e59c369cc11c3aa000000000000000000000000f09473bead03711eb34f3efd5e59c369cc11c3aa000000000000000000000000000000000000000000000000015de891f9de0d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8728,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e7c51775505458cd958ae06985d44eb891d07e7a000000000000000000000000e7c51775505458cd958ae06985d44eb891d07e7a000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8729,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000067d63c52806f9ee874763a3eeca4fe11ebc286be00000000000000000000000067d63c52806f9ee874763a3eeca4fe11ebc286be000000000000000000000000000000000000000000000000005754660fc9c40a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8730,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000086d7c37933ab22ee4a744dcdb12ca7c6c57b593100000000000000000000000086d7c37933ab22ee4a744dcdb12ca7c6c57b593100000000000000000000000000000000000000000000000000a5fd5da26c4ddd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8731,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000964ac758e00402b2b590fc5e75cb72c4fc0ebe74000000000000000000000000964ac758e00402b2b590fc5e75cb72c4fc0ebe74000000000000000000000000000000000000000000000000005ec2d61a8591f700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8732,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000702580f7ab23fd4f9d739180b852b8ea7881a1fb000000000000000000000000702580f7ab23fd4f9d739180b852b8ea7881a1fb000000000000000000000000000000000000000000000000003784f42f8ea96a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8733,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d51c508f3e3e2e34fb35919a7fe932634b2f1b2f000000000000000000000000d51c508f3e3e2e34fb35919a7fe932634b2f1b2f000000000000000000000000000000000000000000000000009d5aa83ef6c73000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8734,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000311c13e8ccab5b3af959ad4aa95c612920f615c2000000000000000000000000311c13e8ccab5b3af959ad4aa95c612920f615c20000000000000000000000000000000000000000000000000039b46ac9c590af00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x02e05057db4eb8079b3762e7cde25832188c2bb9869c5dfde2268842aee43d46,2022-05-09 05:59:17.000 UTC,0,true -8735,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1a5161d604d7348d7f5c534517b5404a8edefe4000000000000000000000000f1a5161d604d7348d7f5c534517b5404a8edefe400000000000000000000000000000000000000000000000001602849c120640000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8737,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000042c3f118eae67ff35d7f81d00b15241e02a8378c00000000000000000000000042c3f118eae67ff35d7f81d00b15241e02a8378c000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8738,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ee68feb9c2e9619b57ea15c5274fb153e0927f40000000000000000000000005ee68feb9c2e9619b57ea15c5274fb153e0927f40000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8739,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000081114446302eb82364ebe39b218fb8d4ea52607d00000000000000000000000081114446302eb82364ebe39b218fb8d4ea52607d0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8740,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000062d2db1dc5376850241cfc3dbc0990632df277e500000000000000000000000062d2db1dc5376850241cfc3dbc0990632df277e50000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8741,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006be86b163524c2e541865547caf732ed831f30120000000000000000000000006be86b163524c2e541865547caf732ed831f30120000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8742,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000053670d5c5f55355dc72a718ad6b06f1d114ca49500000000000000000000000053670d5c5f55355dc72a718ad6b06f1d114ca4950000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8744,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c83852e1290e2a573d2dc8571d51c1b26fa3f7c9000000000000000000000000c83852e1290e2a573d2dc8571d51c1b26fa3f7c90000000000000000000000000000000000000000000000000060a3dda142a9f200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8746,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000069f21a1f0328016ae026896957b05e27ec33db9900000000000000000000000069f21a1f0328016ae026896957b05e27ec33db9900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8747,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000febd841555eb34de9b082a9f43ae6b12e408de48000000000000000000000000febd841555eb34de9b082a9f43ae6b12e408de480000000000000000000000000000000000000000000000000004ab9bdd3ebec000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8749,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009da2ee83b7eac61783c6b60c553cebcad934a4950000000000000000000000009da2ee83b7eac61783c6b60c553cebcad934a49500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8750,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e09a92b75b32f7a9faca607b15823952dcdef354000000000000000000000000e09a92b75b32f7a9faca607b15823952dcdef35400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8755,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7bd5f4d7e13b11b948f7cc90cb4f2128c31c9b2000000000000000000000000d7bd5f4d7e13b11b948f7cc90cb4f2128c31c9b2000000000000000000000000000000000000000000000000003a9ea99ecb400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8756,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae39869ed77d33f4a25aee3e47946249539f21ce000000000000000000000000ae39869ed77d33f4a25aee3e47946249539f21ce000000000000000000000000000000000000000000000000000e8fc29351fb0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8758,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005150fe3c1407fe9ccc2821feb94cf7dd6ca789c80000000000000000000000005150fe3c1407fe9ccc2821feb94cf7dd6ca789c800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8760,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000682668912cb71471b87733e95a6d51af2d3b1da8000000000000000000000000682668912cb71471b87733e95a6d51af2d3b1da8000000000000000000000000000000000000000000000000005dafbf922d05cf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8767,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009634388afb4ed1aa04be2231866811b01f43a2910000000000000000000000009634388afb4ed1aa04be2231866811b01f43a2910000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8768,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000024f36b02608a5129c61f8df54dc7286f9113dee000000000000000000000000024f36b02608a5129c61f8df54dc7286f9113dee00000000000000000000000000000000000000000000000002d9b3d0462f075700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8770,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000555860b9cc8a1d1e9e48538c8c6d8b85300a77c5000000000000000000000000555860b9cc8a1d1e9e48538c8c6d8b85300a77c50000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8771,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000711a1e1cd8da2d5c4f46118c1a1373e9d2610d04000000000000000000000000711a1e1cd8da2d5c4f46118c1a1373e9d2610d04000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8774,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a8eac5592228f1108fd4a488bd13d2201268cc3f000000000000000000000000a8eac5592228f1108fd4a488bd13d2201268cc3f00000000000000000000000000000000000000000000000000753d533d96800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8776,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001071a56413701b104f35fcd0a94822457e5121140000000000000000000000001071a56413701b104f35fcd0a94822457e51211400000000000000000000000000000000000000000000000003bb935379282d1500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8777,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009a2d82e134fd7b79cb0445a8f5f0afab34760a530000000000000000000000009a2d82e134fd7b79cb0445a8f5f0afab34760a5300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8778,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d637b55735c538072d2da83c7bf154b46cb1ad98000000000000000000000000d637b55735c538072d2da83c7bf154b46cb1ad9800000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1b1eccb05fbe31b5bb02cbba0a6fdc3daee5f09201cbd27344a9020ea479c1fd,2022-02-21 06:33:59.000 UTC,0,true -8779,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e06cdcae2113a6a14ca994fff730a6de1b7edca9000000000000000000000000e06cdcae2113a6a14ca994fff730a6de1b7edca9000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8780,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f0d3e8bcf90fc2bd9d5aba1458daf4965f85d0a0000000000000000000000008f0d3e8bcf90fc2bd9d5aba1458daf4965f85d0a0000000000000000000000000000000000000000000000000060a2fcc2e1f6cc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe2bc66479b1a42c75600c0215cb1609ef3813485ecd1053310d29ee5bcfabc40,2022-03-12 07:48:53.000 UTC,0,true -8781,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f9cc0aef516e99dd66a6b75bbc719db95d05fc40000000000000000000000007f9cc0aef516e99dd66a6b75bbc719db95d05fc40000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8782,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000019cbda26aba474b7367b9a71ab58f9838435c60600000000000000000000000019cbda26aba474b7367b9a71ab58f9838435c60600000000000000000000000000000000000000000000000000000000004c4b4000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -8783,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000268a743f3e052a91363dc1ca330e9e772a27bf8a000000000000000000000000268a743f3e052a91363dc1ca330e9e772a27bf8a0000000000000000000000000000000000000000000000000025d7a027526b1d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8784,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bfdff69e12c0cc9dcd14188a247dfe4763d0ee56000000000000000000000000bfdff69e12c0cc9dcd14188a247dfe4763d0ee56000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8785,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000864fa05ae397ce827b1d7fc70a962b9af3c819ef000000000000000000000000864fa05ae397ce827b1d7fc70a962b9af3c819ef000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8786,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000020e3dab8c6d71932077eef37da9267aeef3206ab00000000000000000000000020e3dab8c6d71932077eef37da9267aeef3206ab000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8787,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c924f2e488fea9e7e1b6243dac0097254a61140f000000000000000000000000c924f2e488fea9e7e1b6243dac0097254a61140f000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8788,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000091587456d06fbb36a522b7bb4887f8892a30535100000000000000000000000091587456d06fbb36a522b7bb4887f8892a305351000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8789,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b62a725a00f98955f81cd0c63f9cc0431b7c597e000000000000000000000000b62a725a00f98955f81cd0c63f9cc0431b7c597e00000000000000000000000000000000000000000000000002c2bd689af9490000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8790,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e28c5ef710db84fd95298abbbb50f07d97bc235a000000000000000000000000e28c5ef710db84fd95298abbbb50f07d97bc235a000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8791,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ba556f042776d8c590b1c6da6122511f36258e80000000000000000000000005ba556f042776d8c590b1c6da6122511f36258e8000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8792,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000019f6d81ca164ab9b2b9b20a0a854b06ce425621700000000000000000000000019f6d81ca164ab9b2b9b20a0a854b06ce4256217000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8793,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000baacf9486835683a8e7ee0e528bb5117fab98671000000000000000000000000baacf9486835683a8e7ee0e528bb5117fab986710000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8794,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a728f11510ec1ec8421f3962ea5ffc936f6650d6000000000000000000000000a728f11510ec1ec8421f3962ea5ffc936f6650d600000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8795,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a1db64fc6151f7985c8b9df32503a2b9a4125752000000000000000000000000a1db64fc6151f7985c8b9df32503a2b9a4125752000000000000000000000000000000000000000000000000011dd8269942589100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8796,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e50dd0bfc9c4dec6d9206be428414322dc9cabe4000000000000000000000000e50dd0bfc9c4dec6d9206be428414322dc9cabe4000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8797,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b035b9678bf874b3cb91c64bdcc9a95b4b3ffb28000000000000000000000000b035b9678bf874b3cb91c64bdcc9a95b4b3ffb28000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8798,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bbb40b4b71d5ff88199f5279df505eac4eab434c000000000000000000000000bbb40b4b71d5ff88199f5279df505eac4eab434c000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8799,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bca46727116c2fbb2284c49bba696f40749cd341000000000000000000000000bca46727116c2fbb2284c49bba696f40749cd341000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8800,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a310038314884dea1f909a13539bcef7f5a06111000000000000000000000000a310038314884dea1f909a13539bcef7f5a06111000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8801,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000031f2a75c0c79dbc7537d2b9687f74e90aa6503a000000000000000000000000031f2a75c0c79dbc7537d2b9687f74e90aa6503a00000000000000000000000000000000000000000000000000000000006d53b9500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -8802,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2d755c62aa4d9493808b62d68939b1e095dfb4c000000000000000000000000d2d755c62aa4d9493808b62d68939b1e095dfb4c00000000000000000000000000000000000000000000000000201f184922d81b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8803,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000423db69b9161fb4697d002bce6934682472cf34f000000000000000000000000423db69b9161fb4697d002bce6934682472cf34f000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8804,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007276fe1c8f90f47b3c5d63a63f5b28f2b346e1640000000000000000000000007276fe1c8f90f47b3c5d63a63f5b28f2b346e16400000000000000000000000000000000000000000000000000858ce2bb7fcbf400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8805,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004db1c1a03e80b340a230425f598ab0583661ad1d0000000000000000000000004db1c1a03e80b340a230425f598ab0583661ad1d000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8806,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e655016b2183dee463197f0c176eafe14bbfc304000000000000000000000000e655016b2183dee463197f0c176eafe14bbfc3040000000000000000000000000000000000000000000000000000a04e793e018000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8807,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094790546b7e618f86148da978035846d24da670200000000000000000000000094790546b7e618f86148da978035846d24da6702000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8808,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009c22c8a0d3027fb01ab0248353b9616446cd40e80000000000000000000000009c22c8a0d3027fb01ab0248353b9616446cd40e8000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8809,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca04f881b6c5524465b4334c0d175ad88d49a555000000000000000000000000ca04f881b6c5524465b4334c0d175ad88d49a55500000000000000000000000000000000000000000000000000a22c59e441574200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8810,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000014d2eb90a237990132cce5b398d3ce0b382d4f8700000000000000000000000014d2eb90a237990132cce5b398d3ce0b382d4f87000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8811,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000f474f2ae653064a1619da919d85a9003151ab5c0000000000000000000000000f474f2ae653064a1619da919d85a9003151ab5c000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8812,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000353e21433a5d15774c1689119922b68d0db9ec66000000000000000000000000353e21433a5d15774c1689119922b68d0db9ec66000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8813,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007aad778f6de4d7fda0001ebe559103ad76e1486f0000000000000000000000007aad778f6de4d7fda0001ebe559103ad76e1486f000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8814,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e98a63a88d50a88ffe83c2d553e1a8b0ece0d035000000000000000000000000e98a63a88d50a88ffe83c2d553e1a8b0ece0d035000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8815,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003878c9ba53af40037271b076411a95e86378f7ed0000000000000000000000003878c9ba53af40037271b076411a95e86378f7ed000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8816,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000370645b655fa20f247411b323cc5c7824e1193f3000000000000000000000000370645b655fa20f247411b323cc5c7824e1193f3000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8817,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000012970106add28486a63ed6deef4f0076ddc50aa200000000000000000000000012970106add28486a63ed6deef4f0076ddc50aa20000000000000000000000000000000000000000000000000069a5be3cf9ec0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8818,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000286dcfcd06c5575fa64dd1eb94d2d9587196d4c0000000000000000000000000286dcfcd06c5575fa64dd1eb94d2d9587196d4c0000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8819,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001c86e28d27f4a5655acf0a94fafcfec394d4fa990000000000000000000000001c86e28d27f4a5655acf0a94fafcfec394d4fa99000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8820,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006df1eaf904462ab2c27ce1290dc9819ea01f52490000000000000000000000006df1eaf904462ab2c27ce1290dc9819ea01f5249000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8821,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000126413913ef8735a58d4763613e473cd3320846a000000000000000000000000126413913ef8735a58d4763613e473cd3320846a0000000000000000000000000000000000000000000000000160991de843a70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8823,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e67911a7c234e7813f654fdb20a31deb2ad4c415000000000000000000000000e67911a7c234e7813f654fdb20a31deb2ad4c415000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8824,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000027733dedd8ce55de434a80df65e161aa39d7b73500000000000000000000000027733dedd8ce55de434a80df65e161aa39d7b735000000000000000000000000000000000000000000000000015f9e40d01b840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8825,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000911769d523e8e51819525db932f8822174009777000000000000000000000000911769d523e8e51819525db932f88221740097770000000000000000000000000000000000000000000000000063a07fdcffe0cc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8826,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006646ad58d4b213f59abf859b85b0ac68c05ec1440000000000000000000000006646ad58d4b213f59abf859b85b0ac68c05ec144000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8827,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006b90bd5489126d80f5aa021880e30297c35d964a0000000000000000000000006b90bd5489126d80f5aa021880e30297c35d964a000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8828,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000074a6263578c5b9fd42fa7afeff1ca52d04e90e3600000000000000000000000074a6263578c5b9fd42fa7afeff1ca52d04e90e36000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8829,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000365883c5d9ae80760d8b3296d11cb33cfe53ab24000000000000000000000000365883c5d9ae80760d8b3296d11cb33cfe53ab24000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8830,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c2095fc42ef164f317a0b93835a052acf03fd3e0000000000000000000000004c2095fc42ef164f317a0b93835a052acf03fd3e000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8831,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000daf0910920f4bbc5ccfb70b3e9db797959ba0674000000000000000000000000daf0910920f4bbc5ccfb70b3e9db797959ba0674000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8832,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd72ad6175868a55f4508c6973223ea7795f7121000000000000000000000000dd72ad6175868a55f4508c6973223ea7795f7121000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8833,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000000f1a011fbfb9911ab2bb6bdba208e5892579c8b50000000000000000000000000f1a011fbfb9911ab2bb6bdba208e5892579c8b50000000000000000000000000000000000000000000000000000000059452fa300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -8834,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000044836f9fd50a63a609e88c4d225570f6592509ac00000000000000000000000044836f9fd50a63a609e88c4d225570f6592509ac0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8835,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a5f5e1a2e17e680476eefff135a7f9ab87c2e9f5000000000000000000000000a5f5e1a2e17e680476eefff135a7f9ab87c2e9f50000000000000000000000000000000000000000000000000057a8d0410268f600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8836,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f164b1818c1a1ef344a15124c5dd769071460e90000000000000000000000006f164b1818c1a1ef344a15124c5dd769071460e9000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8837,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008999938863f37c05c4ebb1752ab9987aa565b3fd0000000000000000000000008999938863f37c05c4ebb1752ab9987aa565b3fd00000000000000000000000000000000000000000000000000516fb6636c529300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8838,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000f1a011fbfb9911ab2bb6bdba208e5892579c8b50000000000000000000000000f1a011fbfb9911ab2bb6bdba208e5892579c8b5000000000000000000000000000000000000000000000000013fbe85edc9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8839,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f9654f52b3ed762bc07bdd01c592a95b28d5ba40000000000000000000000003f9654f52b3ed762bc07bdd01c592a95b28d5ba4000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8840,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000015d1eba25db9075c87afb1055c84e1259228566c00000000000000000000000015d1eba25db9075c87afb1055c84e1259228566c0000000000000000000000000000000000000000000000000013891ef3f7601200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8841,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000249f752c53dbf2486a57678b95f0f200d06a9913000000000000000000000000249f752c53dbf2486a57678b95f0f200d06a9913000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8842,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000036d5ed41f464e19a48db0559d89eea3f8861916100000000000000000000000036d5ed41f464e19a48db0559d89eea3f88619161000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8843,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a72e92738e6a667a063d8c042a9495cb9d732b70000000000000000000000000a72e92738e6a667a063d8c042a9495cb9d732b7000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8844,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000041926365e4c9ea29d6905932043c1573e4d7cc8600000000000000000000000041926365e4c9ea29d6905932043c1573e4d7cc86000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8845,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008854c59ba3416f09c87a26f7a93edc1f756574b40000000000000000000000008854c59ba3416f09c87a26f7a93edc1f756574b40000000000000000000000000000000000000000000000000058191e8324d6f400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8846,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a9e2cc6ec8cba89ce3231bcc6735afc099fb7e30000000000000000000000000a9e2cc6ec8cba89ce3231bcc6735afc099fb7e30000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8848,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f8798c9d86543c8fb222660d1246e4bf83f03d40000000000000000000000006f8798c9d86543c8fb222660d1246e4bf83f03d400000000000000000000000000000000000000000000000000601779a9aecd3a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x01b97acd33224dfa3d9cc03c644d6b2e2bf9730046d7bf54fd2f5963b5056414,2022-03-12 07:57:19.000 UTC,0,true -8850,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004f38b00150550d4acc65f55c566fab97a7e3aa090000000000000000000000004f38b00150550d4acc65f55c566fab97a7e3aa0900000000000000000000000000000000000000000000000001579f09689b637200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8851,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000030988a15f85640e1bed9a61bdb85d13fa35d11d300000000000000000000000030988a15f85640e1bed9a61bdb85d13fa35d11d3000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8852,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009e4e9e3e80144c274c324597ae9cc2f29e99bd610000000000000000000000009e4e9e3e80144c274c324597ae9cc2f29e99bd61000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8853,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008be5f5b6428f9cb2d8753881d7f48507684f90510000000000000000000000008be5f5b6428f9cb2d8753881d7f48507684f905100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8855,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a13e0359ceeb8724b620a63c19c21d88ec48cc1a000000000000000000000000a13e0359ceeb8724b620a63c19c21d88ec48cc1a000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8856,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e3f33164c5a61069f24dc99dc454795be210ff51000000000000000000000000e3f33164c5a61069f24dc99dc454795be210ff51000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8857,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a99223e73a879d347ef018f580ac524fcc356690000000000000000000000005a99223e73a879d347ef018f580ac524fcc35669000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8858,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000866b95fc824ba7e0419336cb92e754db15b29a0b000000000000000000000000866b95fc824ba7e0419336cb92e754db15b29a0b0000000000000000000000000000000000000000000000000009e0a2c5d8c76200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8859,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be57fc806770cc832124a18daee0db1c9fd50b37000000000000000000000000be57fc806770cc832124a18daee0db1c9fd50b37000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8860,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006af2c7083249beb46d6ced78b52deae781a6fd520000000000000000000000006af2c7083249beb46d6ced78b52deae781a6fd52000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8861,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000c344f940332d3aa76e4f20d7352aaf086480111f000000000000000000000000c344f940332d3aa76e4f20d7352aaf086480111f0000000000000000000000000000000000000000000000000000000131cf5b9c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -8863,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000175099aff5a2c7ce22b2b0884cf53b1cb661525f000000000000000000000000175099aff5a2c7ce22b2b0884cf53b1cb661525f000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8864,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000322403c2a3281aad788910ff8d8139fc4c790fe5000000000000000000000000322403c2a3281aad788910ff8d8139fc4c790fe5000000000000000000000000000000000000000000000000001142ca2b96b69100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8865,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005b231eca44fb2002a24f9579ddaf2d7d263d1f350000000000000000000000005b231eca44fb2002a24f9579ddaf2d7d263d1f35000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8866,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000010fce6f17d33dca4eb13cf2447b7dfce7588d68c00000000000000000000000010fce6f17d33dca4eb13cf2447b7dfce7588d68c000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8867,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bcb0f53f0dfac2de3d050ed8136f20298611e3ee000000000000000000000000bcb0f53f0dfac2de3d050ed8136f20298611e3ee000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8868,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f78da5055cc38971f93918de4760403f9cc80e40000000000000000000000003f78da5055cc38971f93918de4760403f9cc80e4000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8869,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ea88468068108c07ccabccf7794c390998c6f8b0000000000000000000000007ea88468068108c07ccabccf7794c390998c6f8b000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8870,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000005ed6a87517914eb67cce0930fed72e61ce2d64450000000000000000000000005ed6a87517914eb67cce0930fed72e61ce2d6445000000000000000000000000000000000000000000000000000000000058159c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -8871,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000196d70d55142d3510a9206501e5c818a6287abcd000000000000000000000000196d70d55142d3510a9206501e5c818a6287abcd000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8872,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e1d66a314eee0e0ba234b935181c9ce0cc265c93000000000000000000000000e1d66a314eee0e0ba234b935181c9ce0cc265c93000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8873,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045fbece740f52641d32b99bd97d2765462ab437d00000000000000000000000045fbece740f52641d32b99bd97d2765462ab437d000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8874,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c2489676b3acfd19deb01c01c264db83b789e6c8000000000000000000000000c2489676b3acfd19deb01c01c264db83b789e6c80000000000000000000000000000000000000000000000000059e801176e7b6700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8875,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da3d001988a48a34bdb3c940c83bd420fc187d82000000000000000000000000da3d001988a48a34bdb3c940c83bd420fc187d82000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8876,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eaadabcc0c849a514372d4717e87c0a69dd4d571000000000000000000000000eaadabcc0c849a514372d4717e87c0a69dd4d571000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8877,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000077f30de8d26c4050f7b158c93472d8900b2d8f4000000000000000000000000077f30de8d26c4050f7b158c93472d8900b2d8f4000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8878,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bea93b95f66a229b1760bb5390d7bbe99429893c000000000000000000000000bea93b95f66a229b1760bb5390d7bbe99429893c000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8880,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fccaa885bf22d3f343611f28313f900d9e1761d0000000000000000000000007fccaa885bf22d3f343611f28313f900d9e1761d000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8881,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f924e374699737ab57e42207a7c4003c09320f64000000000000000000000000f924e374699737ab57e42207a7c4003c09320f640000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8882,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000092e0c901a768a4998f45eb746e37fdf75ae80d1400000000000000000000000092e0c901a768a4998f45eb746e37fdf75ae80d14000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8884,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ffe48f83372f528dd649c162c28175bb5bebce9c000000000000000000000000ffe48f83372f528dd649c162c28175bb5bebce9c000000000000000000000000000000000000000000000000008526e8978f117900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8885,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c04f345d5a50fe433de3235ca88333aba11b90a7000000000000000000000000c04f345d5a50fe433de3235ca88333aba11b90a7000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8886,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fba243e2fd77d4100ca89aacc42b6968db695be2000000000000000000000000fba243e2fd77d4100ca89aacc42b6968db695be2000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8887,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf237300b8901169f8729ca0dc46a19d2a452a1b000000000000000000000000bf237300b8901169f8729ca0dc46a19d2a452a1b000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8888,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c293b5cd5b02567977497984357394a90ed0f98e000000000000000000000000c293b5cd5b02567977497984357394a90ed0f98e0000000000000000000000000000000000000000000000000002fbcb4c645d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8889,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000041aacbff90f535abfbae4146a425dc27353a685c00000000000000000000000041aacbff90f535abfbae4146a425dc27353a685c000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8890,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fa750efd7cd4af96172c906e30c13c535a0d706f000000000000000000000000fa750efd7cd4af96172c906e30c13c535a0d706f000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8891,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a810f3441b89d370b36d9eea0dd8c614f102b687000000000000000000000000a810f3441b89d370b36d9eea0dd8c614f102b687000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8892,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008ea52f410e8374e1e97c5f200c0c2eb11bae49220000000000000000000000008ea52f410e8374e1e97c5f200c0c2eb11bae4922000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8893,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9eb8da6832be27b8ae4176f2ee91ed55a86c50d000000000000000000000000e9eb8da6832be27b8ae4176f2ee91ed55a86c50d000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8894,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a59aad96fbcaaa2c04e18c6cf63921b216171c33000000000000000000000000a59aad96fbcaaa2c04e18c6cf63921b216171c33000000000000000000000000000000000000000000000000005fc9e6cf2323ab00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5079d84bbf013de8a66ad0cb776045fc62ea09d43b11d654a5cd801ef297f4a6,2022-03-12 08:04:08.000 UTC,0,true -8896,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d6a6cefb6505f5c0f68391a15da873a5924a6cc0000000000000000000000005d6a6cefb6505f5c0f68391a15da873a5924a6cc00000000000000000000000000000000000000000000000001600ac3d646900000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8897,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002119498db925ca740e32f2d8aca72baa05eadef00000000000000000000000002119498db925ca740e32f2d8aca72baa05eadef0000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8898,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000093498bf17fa04b8d331d863edc350f596396802900000000000000000000000093498bf17fa04b8d331d863edc350f5963968029000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8899,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007e12eb4fc9e44180942875aae0599c1c0739a96f0000000000000000000000007e12eb4fc9e44180942875aae0599c1c0739a96f000000000000000000000000000000000000000000000000003ccab5584f19ca00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8900,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000069a38f5bedf8ef24ccd1a8f7c68b88921d663ecc00000000000000000000000069a38f5bedf8ef24ccd1a8f7c68b88921d663ecc000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8901,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f69191567b0140cdfd3014218d8198fff5ae1d0f000000000000000000000000f69191567b0140cdfd3014218d8198fff5ae1d0f00000000000000000000000000000000000000000000000000ae08a99d77710000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8902,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f7c581759cf23f121af82f0415900f38ac243050000000000000000000000008f7c581759cf23f121af82f0415900f38ac243050000000000000000000000000000000000000000000000000021332e4580830200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8903,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e7e1852b2fd7598c8588435d56d9f881067955eb000000000000000000000000e7e1852b2fd7598c8588435d56d9f881067955eb0000000000000000000000000000000000000000000000000003c25c0c766f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8904,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000062875df71a7a09501db20e97988fe19d052babef00000000000000000000000062875df71a7a09501db20e97988fe19d052babef00000000000000000000000000000000000000000000000000ae7eaee232230000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8905,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000adbe153bda9a214d057ca9b2173130b66329e65d000000000000000000000000adbe153bda9a214d057ca9b2173130b66329e65d000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8906,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000056c10dfc9b7d713be569bee473653774d6325acd00000000000000000000000056c10dfc9b7d713be569bee473653774d6325acd0000000000000000000000000000000000000000000000000039898d61bb2c2500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8909,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000066dcd3279dcba7039f4dcc5a6dc5a6c7ff3dbcbf00000000000000000000000066dcd3279dcba7039f4dcc5a6dc5a6c7ff3dbcbf00000000000000000000000000000000000000000000000000601cc915706f9f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8910,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de3a05d226b96b39d1522cfe88fec8596bfde209000000000000000000000000de3a05d226b96b39d1522cfe88fec8596bfde2090000000000000000000000000000000000000000000000000119ff31e53128f300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8911,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdafbeb555e9752720f8a72778c1273efa27d97d000000000000000000000000bdafbeb555e9752720f8a72778c1273efa27d97d000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8912,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005af79a5d8f099555380d4ae7b467a6e0cf35014f0000000000000000000000005af79a5d8f099555380d4ae7b467a6e0cf35014f0000000000000000000000000000000000000000000000000060be026755a9ef00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x042bc55478901857d473d69418341216ee5597df3d845b1658b3f0ef80e224e5,2022-03-12 08:00:15.000 UTC,0,true -8913,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df4bebb2e9d31d5d3372907d3d59d10ef497449e000000000000000000000000df4bebb2e9d31d5d3372907d3d59d10ef497449e000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8914,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000021dc4d87969d1888adba243240942093c80e0fd000000000000000000000000021dc4d87969d1888adba243240942093c80e0fd000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8915,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005bc751bc8dcda36b88802727ad1ef0bb97216cc70000000000000000000000005bc751bc8dcda36b88802727ad1ef0bb97216cc700000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8916,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df7502f3b51b488f38bfacad00a0eab5c238d4ad000000000000000000000000df7502f3b51b488f38bfacad00a0eab5c238d4ad000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8917,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000328c209ae03146f5b460f87a637968fff5c279c1000000000000000000000000328c209ae03146f5b460f87a637968fff5c279c10000000000000000000000000000000000000000000000000009e36c0f88e9c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8919,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000034ea897392ee016fadaa50569247b66c5c906b0000000000000000000000000034ea897392ee016fadaa50569247b66c5c906b000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8920,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f53159644a7939b5708cc02914553d110e7080c7000000000000000000000000f53159644a7939b5708cc02914553d110e7080c7000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8921,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b88cb83038bd20d370df898af18b2ee21e68e430000000000000000000000002b88cb83038bd20d370df898af18b2ee21e68e43000000000000000000000000000000000000000000000000009fdf42f6e4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8922,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000069ea386172228de29c65ccf4d3a8792b1009d14700000000000000000000000069ea386172228de29c65ccf4d3a8792b1009d147000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8923,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000048a232b662951419b0385240c27908b4e3191cf200000000000000000000000048a232b662951419b0385240c27908b4e3191cf2000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8924,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f2263baf15778c87a6210c5da74af291b465c021000000000000000000000000f2263baf15778c87a6210c5da74af291b465c021000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8925,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e1a6dccbfcd05baeba7dfdbda27e56a4100cf93c000000000000000000000000e1a6dccbfcd05baeba7dfdbda27e56a4100cf93c000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8926,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009f071f182396c342e54c52b6d264c21c23a3218c0000000000000000000000009f071f182396c342e54c52b6d264c21c23a3218c000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8927,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc87b155e610adf3505d19f0182db2db3d8af3f1000000000000000000000000bc87b155e610adf3505d19f0182db2db3d8af3f1000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8928,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000069d2ad62ce28b648afa5f9229c15a9ace6611df000000000000000000000000069d2ad62ce28b648afa5f9229c15a9ace6611df000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8929,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000069c9e86257e0c9d26639cec3fad8f2ba0a827dae00000000000000000000000069c9e86257e0c9d26639cec3fad8f2ba0a827dae00000000000000000000000000000000000000000000000000042367a912600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8930,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000799f328d9bb00045c15d68ab226c18512f67def8000000000000000000000000799f328d9bb00045c15d68ab226c18512f67def8000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8931,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000945f09790a3d310004994e23b9c0bc84629d2cf8000000000000000000000000945f09790a3d310004994e23b9c0bc84629d2cf8000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8932,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f325ff7250180548b86b17bce8e18d8aa266c850000000000000000000000007f325ff7250180548b86b17bce8e18d8aa266c85000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8933,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f09b73fb5831b05b1f09b78822034475a1773028000000000000000000000000f09b73fb5831b05b1f09b78822034475a1773028000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8934,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029c81999158c10e54f87ac4e1d30c5aed4bc28ed00000000000000000000000029c81999158c10e54f87ac4e1d30c5aed4bc28ed000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8935,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2cdf89e1988e2d2fd31e887a7917be6fde8cb7b000000000000000000000000a2cdf89e1988e2d2fd31e887a7917be6fde8cb7b000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8936,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000042b7484733a843cc587c43aae0e3aac2b1b03cbb00000000000000000000000042b7484733a843cc587c43aae0e3aac2b1b03cbb000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8938,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008a8fca9ea97e3d6bd81173757f9824fa2b46e8e60000000000000000000000008a8fca9ea97e3d6bd81173757f9824fa2b46e8e6000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8939,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1fc1579e285ced99a8cdb7546d6b6829f9f197e000000000000000000000000f1fc1579e285ced99a8cdb7546d6b6829f9f197e00000000000000000000000000000000000000000000000000aedfba7ece140000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8940,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f32c92f838edfe0de82e41d1619ad4b39fd8e61c000000000000000000000000f32c92f838edfe0de82e41d1619ad4b39fd8e61c000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8942,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000162231e6e9616747983113dc4952cbfc5fce440b000000000000000000000000162231e6e9616747983113dc4952cbfc5fce440b000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8943,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000018e27597614fe3d251d91a3ff2386c8a24c5984600000000000000000000000018e27597614fe3d251d91a3ff2386c8a24c59846000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8944,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000011620e95a173280c84f46fa965d5ceb9fbf86e6500000000000000000000000011620e95a173280c84f46fa965d5ceb9fbf86e65000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8945,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a491fc7f3e6d40a17f9c19c4b423fbe643cbe64f000000000000000000000000a491fc7f3e6d40a17f9c19c4b423fbe643cbe64f000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8946,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000105af1dcddb73a25ab4f95299766c36ba36cde06000000000000000000000000105af1dcddb73a25ab4f95299766c36ba36cde06000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8949,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b5e9625abea5c2fcb6081d3e4007811c4933cc69000000000000000000000000b5e9625abea5c2fcb6081d3e4007811c4933cc69000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8950,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001279ee81560cd636eed9e97a599c765f2b3b0c900000000000000000000000001279ee81560cd636eed9e97a599c765f2b3b0c90000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8951,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cb49735d72ff7747dba184fac99ac53aa441c668000000000000000000000000cb49735d72ff7747dba184fac99ac53aa441c668000000000000000000000000000000000000000000000000003d7642229d400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8952,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004eb82de8377a63821940db41ccceabf6d48336600000000000000000000000004eb82de8377a63821940db41ccceabf6d483366000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8953,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000008aa49c5de68507f98ca4f3ad95dd016cf96a2ac00000000000000000000000008aa49c5de68507f98ca4f3ad95dd016cf96a2ac0000000000000000000000000000000000000000000000000032f0aba6407a1500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8955,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e27558dd3c386c6c3990c7a60ad44efba6376f1c000000000000000000000000e27558dd3c386c6c3990c7a60ad44efba6376f1c000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8957,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000400a63ed396e27b28f1eec510221085d5593e539000000000000000000000000400a63ed396e27b28f1eec510221085d5593e539000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8958,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f351bd0a80d2632b2a07d4420062aee1def17193000000000000000000000000f351bd0a80d2632b2a07d4420062aee1def17193000000000000000000000000000000000000000000000000011318133c27860a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8959,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000074a51448cadd6fe66f1d73694f13fac400062bab00000000000000000000000074a51448cadd6fe66f1d73694f13fac400062bab000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8960,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080fc9e301517ef5cb59da70a9806a8613075619000000000000000000000000080fc9e301517ef5cb59da70a9806a86130756190000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8961,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7c3b3cbb9c1dc64333ce8a715472950d096c11f000000000000000000000000c7c3b3cbb9c1dc64333ce8a715472950d096c11f000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8962,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2df54f12d8c18e801e4cfaed6b20ac38c7073a2000000000000000000000000a2df54f12d8c18e801e4cfaed6b20ac38c7073a2000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8963,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e0e2808091ea445226d56be85aa5c8356bb6d3af000000000000000000000000e0e2808091ea445226d56be85aa5c8356bb6d3af000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8964,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b88d6d394d74c46a491d36f74f40a76dd32bbe30000000000000000000000001b88d6d394d74c46a491d36f74f40a76dd32bbe3000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8965,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001f9e53485ac9bfc9d6827ee746d00b3fd5ef2caa0000000000000000000000001f9e53485ac9bfc9d6827ee746d00b3fd5ef2caa000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8966,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f158f2b5a046c2c8a7d99629f52fe0317e528ca0000000000000000000000003f158f2b5a046c2c8a7d99629f52fe0317e528ca000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8967,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000060c1d1b2e4f018baf3933580642ca5364adf08c800000000000000000000000060c1d1b2e4f018baf3933580642ca5364adf08c8000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8968,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000819131ed60022fd60f411f1153c7412a473cbeb0000000000000000000000000819131ed60022fd60f411f1153c7412a473cbeb0000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8969,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f76a9cfc41ef3257bb9eba87a312eae1d94cca27000000000000000000000000f76a9cfc41ef3257bb9eba87a312eae1d94cca27000000000000000000000000000000000000000000000000000429472a10bf0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8970,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043b7c3c20896476635ab7b35c73a2435de1ad68f00000000000000000000000043b7c3c20896476635ab7b35c73a2435de1ad68f000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8971,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009d78787c47c16bfc36ccd1461f8afb7993badf8a0000000000000000000000009d78787c47c16bfc36ccd1461f8afb7993badf8a0000000000000000000000000000000000000000000000000003a4fe877e940000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8972,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c4d43670ff357845a63c8dc62e4aee02da646bf0000000000000000000000003c4d43670ff357845a63c8dc62e4aee02da646bf000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8973,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e1ded22ca713eb479bbd50c055714abcca8ca57e000000000000000000000000e1ded22ca713eb479bbd50c055714abcca8ca57e00000000000000000000000000000000000000000000000000357b931622479000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xc63f4172d0127c6174a09ec3d0186131be8c1aeb66327b22726f1c0f0430407b,2022-03-13 07:30:48.000 UTC,0,true -8974,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ccc6090d602f0c024a0c3331b1bb794659350450000000000000000000000005ccc6090d602f0c024a0c3331b1bb7946593504500000000000000000000000000000000000000000000000000033567f49d870000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8975,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd97107587e7dcaccf87e23e68d8101c089e2c6d000000000000000000000000dd97107587e7dcaccf87e23e68d8101c089e2c6d0000000000000000000000000000000000000000000000000160834d76dbfd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8976,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000549e2463558389f90b0f6d298d291d7f2ac7127a000000000000000000000000549e2463558389f90b0f6d298d291d7f2ac7127a00000000000000000000000000000000000000000000000000992f268b64e91d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8977,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000088bdeb67570c6f33d1e938f8760d0fe37570065300000000000000000000000088bdeb67570c6f33d1e938f8760d0fe37570065300000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8978,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017183bc3e7c63eff7aed65d336142beecbb6457c00000000000000000000000017183bc3e7c63eff7aed65d336142beecbb6457c00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8979,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000002c1aae9710c09b68f7c51d11a5ff994297d4b3880000000000000000000000002c1aae9710c09b68f7c51d11a5ff994297d4b38800000000000000000000000000000000000000000000000f005f88f8f8c1649800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -8982,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e834defdc52a103cb34e0871555dae81e1bcd225000000000000000000000000e834defdc52a103cb34e0871555dae81e1bcd225000000000000000000000000000000000000000000000000003ded7fdd80392800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8983,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f263f99b27e37e97720b9ddaf525b565e18a89c2000000000000000000000000f263f99b27e37e97720b9ddaf525b565e18a89c2000000000000000000000000000000000000000000000000004a9b638448800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8984,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000015404b45517abf78cc4b77459c4883f551f105f300000000000000000000000015404b45517abf78cc4b77459c4883f551f105f30000000000000000000000000000000000000000000000000092ea7784b5e79000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8985,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000020f976206f66ef58cd27d2d11379a0666acd232300000000000000000000000020f976206f66ef58cd27d2d11379a0666acd23230000000000000000000000000000000000000000000000000082a98449da00ce00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8987,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003b8d47f77c537842cfe003ffd751cbb8cf8f9f540000000000000000000000003b8d47f77c537842cfe003ffd751cbb8cf8f9f54000000000000000000000000000000000000000000000000002bce3a03f88d3e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8988,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000035ed001589911bf0a465a2bd9eeead1c0143dac900000000000000000000000035ed001589911bf0a465a2bd9eeead1c0143dac9000000000000000000000000000000000000000000000000000aae432e2009c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8989,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000faac26eac65ecff478dcc6f0ab9d9e414cad3bed000000000000000000000000faac26eac65ecff478dcc6f0ab9d9e414cad3bed00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8990,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000098802c66883bad4e9a66f4093c7e961b4224840600000000000000000000000098802c66883bad4e9a66f4093c7e961b42248406000000000000000000000000000000000000000000000000001813b555e2f00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8991,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032099d8bbab07d71991623f31501e1882265218c00000000000000000000000032099d8bbab07d71991623f31501e1882265218c00000000000000000000000000000000000000000000000000a63312366eaed800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xcca3f2d7ec89db253714cfdc857b4bc0b407e4cf740cd43bbeee91938361d0ff,2021-12-11 08:11:16.000 UTC,0,true -8993,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000010dbf82a8bb191bd1c082de5ef915e998aa5ccd700000000000000000000000010dbf82a8bb191bd1c082de5ef915e998aa5ccd70000000000000000000000000000000000000000000000000002eec68ffbcb0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x672bae9275a17505583d1024280179b56747b1133b2ec4854ed300af053794a4,2022-02-02 13:33:59.000 UTC,0,true -8994,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da7ab1cd50f3af487cc76b422a3bdd8140c03a32000000000000000000000000da7ab1cd50f3af487cc76b422a3bdd8140c03a3200000000000000000000000000000000000000000000000006ed8aeb8f2c840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2648832248012d645b182736bfa3d092eeb936a42953045e1492b7c45e17d681,2022-03-03 09:13:47.000 UTC,0,true -8995,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004522f131d03f994fe9aa354ebc9e2553deaee05c0000000000000000000000004522f131d03f994fe9aa354ebc9e2553deaee05c00000000000000000000000000000000000000000000000000a9f25e14c5c40f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8997,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a9381071abc4267d5d30a605ab2dbfcde644b41f000000000000000000000000a9381071abc4267d5d30a605ab2dbfcde644b41f0000000000000000000000000000000000000000000000000158e07dcd53757b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -8998,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078ce14fefa2847cc8672d2850b72d10b1ccb849a00000000000000000000000078ce14fefa2847cc8672d2850b72d10b1ccb849a0000000000000000000000000000000000000000000000000005ac79cf919c4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9000,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000a895f950150145b5b9a646af8ce4c06edcb116cf000000000000000000000000a895f950150145b5b9a646af8ce4c06edcb116cf000000000000000000000000000000000000000000000000000000000484090b00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9001,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a895f950150145b5b9a646af8ce4c06edcb116cf000000000000000000000000a895f950150145b5b9a646af8ce4c06edcb116cf000000000000000000000000000000000000000000000000003ee1348978b94000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9003,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000013f692432324e050c928ac24699b2a0da6601f7100000000000000000000000013f692432324e050c928ac24699b2a0da6601f7100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9004,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c219e9887dfa58a783f9d6270b5eefcc81ba7100000000000000000000000004c219e9887dfa58a783f9d6270b5eefcc81ba710000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9006,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c4f31fa1dba138aa9d1c0c40f740bda817f966ee000000000000000000000000c4f31fa1dba138aa9d1c0c40f740bda817f966ee00000000000000000000000000000000000000000000000000a5112ff8aceff900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xc81b268f69c061a976a21576ff37acb462cff66576ec0a2dcc99c0221adbae5b,2022-04-16 02:22:35.000 UTC,0,true -9007,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000024a13ed318a3e9e64533667178987d8db4787a9400000000000000000000000024a13ed318a3e9e64533667178987d8db4787a94000000000000000000000000000000000000000000000000002307773b11df4100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9008,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009fc6fed9dd777ff731d093491f82e6e5d9b0bea00000000000000000000000009fc6fed9dd777ff731d093491f82e6e5d9b0bea000000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9010,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000050e8e455b2c9db89a5843ed175da060c3a1f1cac000000000000000000000000000000000000000000000000ccb3d3354e1fe433,,,1,true -9011,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000632659f18682013ab15da51fd7f7448237421d53000000000000000000000000632659f18682013ab15da51fd7f7448237421d5300000000000000000000000000000000000000000000000001b6c73ade6b779e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9012,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000965ace0642921168f54fc0b84d9e5c20fc2cd3f0000000000000000000000000965ace0642921168f54fc0b84d9e5c20fc2cd3f000000000000000000000000000000000000000000000000000000000001b503000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9013,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c460b612054d64df1bb417ffe78c630a85ba270b000000000000000000000000c460b612054d64df1bb417ffe78c630a85ba270b00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9018,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c460b612054d64df1bb417ffe78c630a85ba270b000000000000000000000000c460b612054d64df1bb417ffe78c630a85ba270b0000000000000000000000000000000000000000000000000024a3271e7accfe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9021,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000ed3909aba279b46a2feb97d878d402a8ea5faea8000000000000000000000000ed3909aba279b46a2feb97d878d402a8ea5faea800000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9022,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009ccc5cf77d794fc89a610a43e2231c427e8d498d0000000000000000000000009ccc5cf77d794fc89a610a43e2231c427e8d498d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9023,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc332d328b8854d52c18023d00b984341dba8968000000000000000000000000fc332d328b8854d52c18023d00b984341dba8968000000000000000000000000000000000000000000000000001d6910d580f2c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9024,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc332d328b8854d52c18023d00b984341dba8968000000000000000000000000fc332d328b8854d52c18023d00b984341dba89680000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9025,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e37821edeeea8f94cf90472dba3efa2c9010c4a1000000000000000000000000e37821edeeea8f94cf90472dba3efa2c9010c4a10000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9026,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6a2361cd991dd31e69c92da7ebf322bb0ce4a2f000000000000000000000000c6a2361cd991dd31e69c92da7ebf322bb0ce4a2f0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9027,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e34801ea425691b512c384aa000bd3e4f7099f70000000000000000000000001e34801ea425691b512c384aa000bd3e4f7099f7000000000000000000000000000000000000000000000000001b0dc63d8a851a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9028,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000031452cc486d6decb90ca5effa9868bed982b4b7d00000000000000000000000031452cc486d6decb90ca5effa9868bed982b4b7d000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9029,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f934bc0ce2607b4c3b78cf33dd8e16ead186acaf000000000000000000000000f934bc0ce2607b4c3b78cf33dd8e16ead186acaf0000000000000000000000000000000000000000000000000020ff829302b30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9030,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d96551879f9d50f1886bfe8ab3ee4d9220a9d180000000000000000000000005d96551879f9d50f1886bfe8ab3ee4d9220a9d180000000000000000000000000000000000000000000000000005691c6372770000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9031,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000420c0cbc0da2c4b85e5aaefe95a9350f217c4882000000000000000000000000420c0cbc0da2c4b85e5aaefe95a9350f217c48820000000000000000000000000000000000000000000000000007d0e36a81800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9032,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007dc4d33e3e28214751260102dc46431a7b9780d00000000000000000000000007dc4d33e3e28214751260102dc46431a7b9780d0000000000000000000000000000000000000000000000000032cb86e6eb0170000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9033,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e96114e7bc582cee09edb84af5cb544cacaea1dc000000000000000000000000e96114e7bc582cee09edb84af5cb544cacaea1dc0000000000000000000000000000000000000000000000000026d34a9441830200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9034,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007019e04f5c7a20bbc686ce071f128d85e08bb89a0000000000000000000000007019e04f5c7a20bbc686ce071f128d85e08bb89a000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9035,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000882c34e0a3405f713581b8c8c9650f3cc28df488000000000000000000000000882c34e0a3405f713581b8c8c9650f3cc28df488000000000000000000000000000000000000000000000000015fbc751e5c480000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1356ed6e8398eaea48cc66c56428fb2facc2163dbccfd70376fc050bb827ca38,2022-08-04 23:27:48.000 UTC,0,true -9037,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000085dc21776b349c07c080b454e27387e32d3a2e6900000000000000000000000085dc21776b349c07c080b454e27387e32d3a2e6900000000000000000000000000000000000000000000000000adcf0cf53e470000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9038,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b033961bd425926c12f622eff02b5a1a1ef807dd000000000000000000000000b033961bd425926c12f622eff02b5a1a1ef807dd000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9039,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e72fb69d6f28bf6b9d171ea5cc4e2bcd5a406f20000000000000000000000008e72fb69d6f28bf6b9d171ea5cc4e2bcd5a406f2000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9040,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d6756e1a072c3edf08451494eba0787c61eebe60000000000000000000000002d6756e1a072c3edf08451494eba0787c61eebe600000000000000000000000000000000000000000000000000394092f7c0780300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9041,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fa5a5a0a4ac902522e83eb0c00a0f8bfa0493a5a000000000000000000000000fa5a5a0a4ac902522e83eb0c00a0f8bfa0493a5a0000000000000000000000000000000000000000000000000139d78a1965dc8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9042,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de6bb34a2f8c0465bcc6a0f692b8fa59737e9994000000000000000000000000de6bb34a2f8c0465bcc6a0f692b8fa59737e999400000000000000000000000000000000000000000000000000b8a7eec4f0bb3700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9044,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000042c6b48ef77d01203ba920872b6b011f1ed9717600000000000000000000000042c6b48ef77d01203ba920872b6b011f1ed971760000000000000000000000000000000000000000000000000058d15e1762800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9045,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000056170df5f737bd4578a6785eee0ce9e008aea09e00000000000000000000000056170df5f737bd4578a6785eee0ce9e008aea09e00000000000000000000000000000000000000000000000000569757e3c965a900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9046,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000009d5d5048a937e4ac8beae2ce7cb5cae7545041ec0000000000000000000000009d5d5048a937e4ac8beae2ce7cb5cae7545041ec0000000000000000000000000000000000000000000000000000000000a7d8c000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9047,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000372fa25ea9647da526b5b001bd18361f00f2d408000000000000000000000000372fa25ea9647da526b5b001bd18361f00f2d40800000000000000000000000000000000000000000000000000894ff86091a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9048,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000885477124122b1547df1d1fae946c15bb4149b98000000000000000000000000885477124122b1547df1d1fae946c15bb4149b98000000000000000000000000000000000000000000000000005c07475d6f808300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9049,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000621351604e300f3f4990aafcc17d0bb23f98ff6e000000000000000000000000621351604e300f3f4990aafcc17d0bb23f98ff6e00000000000000000000000000000000000000000000000001608d174dd9460000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9050,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005e0e76d32ecfee51bad0360245d4cb710abfa1d70000000000000000000000005e0e76d32ecfee51bad0360245d4cb710abfa1d700000000000000000000000000000000000000000000000000003903c0c7ba8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9051,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d96551879f9d50f1886bfe8ab3ee4d9220a9d180000000000000000000000005d96551879f9d50f1886bfe8ab3ee4d9220a9d1800000000000000000000000000000000000000000000000000003903c0c7ba8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9052,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000596504bec398f7a1a6542731a461ebb381bc33c8000000000000000000000000596504bec398f7a1a6542731a461ebb381bc33c800000000000000000000000000000000000000000000000000003903c0c7ba8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9054,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff54d42aead3ca357ce09cc084845151d47e76de000000000000000000000000ff54d42aead3ca357ce09cc084845151d47e76de000000000000000000000000000000000000000000000000005958f70438be9700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9057,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000010fedd3a2ecc9abbde294c1d13e1f71eb71f3aad00000000000000000000000010fedd3a2ecc9abbde294c1d13e1f71eb71f3aad000000000000000000000000000000000000000000000000002b898b0971e5a700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1a0f8d5757f3ee04fa9a1c36291d64070a2a2b4c25636496d88b89418c9bb6f0,2022-06-02 23:37:00.000 UTC,0,true -9058,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f543504a1f2076fffcc5892f5511ca08e664f2c0000000000000000000000007f543504a1f2076fffcc5892f5511ca08e664f2c00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9059,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002dec44a6acf386368f6468461b810a5b2d60982f0000000000000000000000002dec44a6acf386368f6468461b810a5b2d60982f000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9061,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005530a2bb579402819042c8a4ea06b7020b37fee60000000000000000000000005530a2bb579402819042c8a4ea06b7020b37fee6000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9062,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f21eb9fc6843e8d8816113589d6282bab6369184000000000000000000000000f21eb9fc6843e8d8816113589d6282bab6369184000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9063,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c8af873ccf3379491750835130d1d81beecc9c30000000000000000000000003c8af873ccf3379491750835130d1d81beecc9c3000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9064,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000003c8af873ccf3379491750835130d1d81beecc9c30000000000000000000000003c8af873ccf3379491750835130d1d81beecc9c3000000000000000000000000000000000000000000000001158e460913d0000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9066,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000573c78a4a1fe8e77ffd340fb5e42c8b80d6e60090000000000000000000000000000000000000000000000019cb9e11561173021,,,1,true -9067,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ee3fbdfac79b7a4ce9f20ef67677a502680f137e000000000000000000000000ee3fbdfac79b7a4ce9f20ef67677a502680f137e00000000000000000000000000000000000000000000000002105d30da002ef800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9068,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e461b332fa92694b8aba65fff93d591bb0b4c840000000000000000000000008e461b332fa92694b8aba65fff93d591bb0b4c840000000000000000000000000000000000000000000000000155501839c6112900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9069,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000000c80b51912c089bea4c5dc8accba11cb0e8aaf410000000000000000000000000c80b51912c089bea4c5dc8accba11cb0e8aaf410000000000000000000000000000000000000000000000082339333e0bb16d0300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9071,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f543504a1f2076fffcc5892f5511ca08e664f2c0000000000000000000000007f543504a1f2076fffcc5892f5511ca08e664f2c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9075,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000000a379b8266faee951aaefecf15a484b438fe59b00000000000000000000000000a379b8266faee951aaefecf15a484b438fe59b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9076,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d1bcdc1594dd5511c7cdeaf0dc149b7cfaf87cf1000000000000000000000000d1bcdc1594dd5511c7cdeaf0dc149b7cfaf87cf100000000000000000000000000000000000000000000000000c46517a3e56fa900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9077,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a1ad95ed4ded15200df4220fde31c8b6b3b7a723000000000000000000000000a1ad95ed4ded15200df4220fde31c8b6b3b7a72300000000000000000000000000000000000000000000000000590c47973fcac000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9078,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000000a379b8266faee951aaefecf15a484b438fe59b00000000000000000000000000a379b8266faee951aaefecf15a484b438fe59b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9079,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004372de44f255a78b3a3b89a923fdca35ef4157f60000000000000000000000004372de44f255a78b3a3b89a923fdca35ef4157f60000000000000000000000000000000000000000000000000df83069ad91790b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9080,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dfc3914aafa7cbcc897bd9ec5a6d8ec6b63e9a90000000000000000000000000dfc3914aafa7cbcc897bd9ec5a6d8ec6b63e9a900000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9082,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ae1bb3c234ce4436133d4c4b6a8665257cc0acb0000000000000000000000005ae1bb3c234ce4436133d4c4b6a8665257cc0acb000000000000000000000000000000000000000000000000006673f7bf888b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9084,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009650f48230a0be8106bab9d978456da25f74189c0000000000000000000000009650f48230a0be8106bab9d978456da25f74189c00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9086,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000813377240d97bb58aac5f22266a6215e53d7889c000000000000000000000000813377240d97bb58aac5f22266a6215e53d7889c000000000000000000000000000000000000000000000000000a03588723becb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9087,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6b69502b58f4ef1186a23345779b32d1b512eb5000000000000000000000000d6b69502b58f4ef1186a23345779b32d1b512eb500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9088,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ddc2a3c06590b7401c41bbe7f6ff742f2101a946000000000000000000000000ddc2a3c06590b7401c41bbe7f6ff742f2101a9460000000000000000000000000000000000000000000000000008aca26a56b44a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9089,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000374cb27a8753520bb153906a0a34cc823cea3c3e000000000000000000000000374cb27a8753520bb153906a0a34cc823cea3c3e000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9091,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e816691000000000000000000000000374cb27a8753520bb153906a0a34cc823cea3c3e000000000000000000000000374cb27a8753520bb153906a0a34cc823cea3c3e000000000000000000000000000000000000000000000000003524343e6bd79800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9092,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8e4e00aad7a9bcf6f6376662b83bb1e6bdc5212000000000000000000000000b8e4e00aad7a9bcf6f6376662b83bb1e6bdc5212000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9093,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e33d600655f808805dd21bfd00b4f56db28f0b40000000000000000000000004e33d600655f808805dd21bfd00b4f56db28f0b4000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9094,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000004784ac6aea2d4dff992c46b560d3a94264c740000000000000000000000000004784ac6aea2d4dff992c46b560d3a94264c74000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9095,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae805c15ed60aa9cb1b0111f00a9f616b72a546d000000000000000000000000ae805c15ed60aa9cb1b0111f00a9f616b72a546d000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9096,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b31abfef6710675de9e17e053c8466ed3497757d000000000000000000000000b31abfef6710675de9e17e053c8466ed3497757d000000000000000000000000000000000000000000000000002fef9e96bc879100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9097,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d2d34366edfb727a704980330e62bd822bac0f50000000000000000000000003d2d34366edfb727a704980330e62bd822bac0f5000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9098,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f93f111beae29fd649d0dae7c26de4fcd2edbdb1000000000000000000000000f93f111beae29fd649d0dae7c26de4fcd2edbdb1000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9099,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000081dce610c64f7ad9cdb23db11d3c72eb17ebddb400000000000000000000000081dce610c64f7ad9cdb23db11d3c72eb17ebddb4000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9101,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002996fe21cf925d4304ac11ef7c61481e97e739790000000000000000000000002996fe21cf925d4304ac11ef7c61481e97e73979000000000000000000000000000000000000000000000000005dc8924fd150f000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9102,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000067e7246bf971318a9d4d7145ef7e9cca7a7190a100000000000000000000000067e7246bf971318a9d4d7145ef7e9cca7a7190a1000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9103,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003cd2d3e932e4e2f567544196b429a628cb9389210000000000000000000000003cd2d3e932e4e2f567544196b429a628cb93892100000000000000000000000000000000000000000000000000a76803fe0d10be00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9104,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001fe07a3e5d15f3f6b7d7529253566a5341e59b140000000000000000000000001fe07a3e5d15f3f6b7d7529253566a5341e59b14000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9105,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000977093b83bc716507c7952faf8e968fb1a5f3212000000000000000000000000977093b83bc716507c7952faf8e968fb1a5f3212000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9106,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021d13cc7560792aaa19f482d1ee9797e0d06abb900000000000000000000000021d13cc7560792aaa19f482d1ee9797e0d06abb9000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9107,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a11f1b016ce50b352bff0e8502b9b8f8c83fa8de000000000000000000000000a11f1b016ce50b352bff0e8502b9b8f8c83fa8de000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9108,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ccc0a27a01d7cad1bef84bf1b8f266e0eeea273b000000000000000000000000ccc0a27a01d7cad1bef84bf1b8f266e0eeea273b000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9109,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000027ead2e036bbb1d22092768adf6088de83d9773a00000000000000000000000027ead2e036bbb1d22092768adf6088de83d9773a000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9110,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a2f3ea41324fe1aa34b0ebc97df66beb5597c550000000000000000000000006a2f3ea41324fe1aa34b0ebc97df66beb5597c55000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9111,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001322743e9407421991c9e4d405f166f0c4e5430e0000000000000000000000001322743e9407421991c9e4d405f166f0c4e5430e000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9112,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006870fdf5a38791bcc11177cc05d9c3164482dad40000000000000000000000006870fdf5a38791bcc11177cc05d9c3164482dad400000000000000000000000000000000000000000000000000d25b799b90faaa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9113,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000130b9676da337441df79706be0640daa7ccb1a52000000000000000000000000130b9676da337441df79706be0640daa7ccb1a5200000000000000000000000000000000000000000000000000000000009dd21100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9114,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c26f5e1ef92f0001492184c67bcb5219733671af000000000000000000000000c26f5e1ef92f0001492184c67bcb5219733671af000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9115,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6eec7c3c5763fd83631237fd9425bc8b7adad7a000000000000000000000000c6eec7c3c5763fd83631237fd9425bc8b7adad7a000000000000000000000000000000000000000000000000007a69afbb1e4b7200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9116,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6fcb29f0d8b9058882d801522f85a2b2e3ae7ad000000000000000000000000c6fcb29f0d8b9058882d801522f85a2b2e3ae7ad000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9117,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ddeb3d70574d4e11330fa69999d0c5cc74b7a1be000000000000000000000000ddeb3d70574d4e11330fa69999d0c5cc74b7a1be0000000000000000000000000000000000000000000000000052e2ec0493eff000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9118,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000326600085aad2407b951bd8dc2ca004e3cb94824000000000000000000000000326600085aad2407b951bd8dc2ca004e3cb94824000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9119,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ca1111888bcd15992f4bab4fe11ed748be9db2e0000000000000000000000003ca1111888bcd15992f4bab4fe11ed748be9db2e000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9120,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000549f70392f4035ed0b4467e304e65a0c5c0b80f2000000000000000000000000549f70392f4035ed0b4467e304e65a0c5c0b80f2000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9121,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ed38e91fd9896c95458b7304a47110fcb4c419ea000000000000000000000000ed38e91fd9896c95458b7304a47110fcb4c419ea000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9122,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045fde6b2977e251637a2c19759a00d0f2ab7c35000000000000000000000000045fde6b2977e251637a2c19759a00d0f2ab7c350000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9123,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d9b817a4a54ff7b9bf912cfe6946cd66dd709717000000000000000000000000d9b817a4a54ff7b9bf912cfe6946cd66dd709717000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9124,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a06e36648fe747dbe4fea0fd3cec9da632193a8e000000000000000000000000a06e36648fe747dbe4fea0fd3cec9da632193a8e000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9125,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d85d934577c027433f4cacb53210b79f1a039470000000000000000000000003d85d934577c027433f4cacb53210b79f1a03947000000000000000000000000000000000000000000000000000b54ef82454e0600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9126,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc0834397ac2147387f71c6097f4e593b3655feb000000000000000000000000fc0834397ac2147387f71c6097f4e593b3655feb000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9127,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a56777fbae59666a2f58bb19cfe02861566c3d8f000000000000000000000000a56777fbae59666a2f58bb19cfe02861566c3d8f000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9128,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000835215ceca121e78263d2ebde6d12fae6bf49d11000000000000000000000000835215ceca121e78263d2ebde6d12fae6bf49d110000000000000000000000000000000000000000000000000002f9646cdeae0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9129,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004570b3d9feebb2f0b033ef7cbfc45d9b5399fd300000000000000000000000004570b3d9feebb2f0b033ef7cbfc45d9b5399fd3000000000000000000000000000000000000000000000000000c0c9dd2640b1300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9130,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000584313319d0bfead2a9d98a7154f5dcb5a62887f000000000000000000000000000000000000000000000001c9f78d2893e40000,,,1,true -9131,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000008dcff10b76083afa20679ae0203c84479df71c300000000000000000000000008dcff10b76083afa20679ae0203c84479df71c3000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9132,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ed26122ff39147a40457fe1a7d9443e3dabb7063000000000000000000000000ed26122ff39147a40457fe1a7d9443e3dabb7063000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9133,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007319c9390a8e4b9434c8ebc04fce609a72ee2aa00000000000000000000000007319c9390a8e4b9434c8ebc04fce609a72ee2aa0000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9134,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f181b16663fd416dcd466591e841ca407d9c6590000000000000000000000003f181b16663fd416dcd466591e841ca407d9c659000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9135,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7ea3ffc8e17e4127969b9b05e218c830e317d9d000000000000000000000000d7ea3ffc8e17e4127969b9b05e218c830e317d9d000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9136,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e51e885186f384dd7f95f5f39a750059e84f04b2000000000000000000000000e51e885186f384dd7f95f5f39a750059e84f04b2000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9137,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000012e016811f2d6244f77ea21a171230d4d787ed5b00000000000000000000000012e016811f2d6244f77ea21a171230d4d787ed5b000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9139,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008163e1014b2aa4e19712707a954c3dcef05910690000000000000000000000008163e1014b2aa4e19712707a954c3dcef0591069000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9140,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d9054cb84c86fd1a262edce44df65120359cb1ce000000000000000000000000d9054cb84c86fd1a262edce44df65120359cb1ce000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9141,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b60e289b9faa929c6a3211cd9aba95f655b0b381000000000000000000000000b60e289b9faa929c6a3211cd9aba95f655b0b3810000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9142,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000090558eb23d1d1183d8a18dd507179e87d66764ef00000000000000000000000090558eb23d1d1183d8a18dd507179e87d66764ef0000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9143,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e88d2e687093ce4342ecfb51441ade926320c077000000000000000000000000e88d2e687093ce4342ecfb51441ade926320c0770000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9144,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000692059c9391d9d0d2072867bdb75f4499a70261c000000000000000000000000692059c9391d9d0d2072867bdb75f4499a70261c00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9145,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004b1ec19beac9c7542d0055a1527c3bb9c276ecd20000000000000000000000004b1ec19beac9c7542d0055a1527c3bb9c276ecd2000000000000000000000000000000000000000000000000007dac86834637e500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xcc6d775dbd9bd34b83854896ad21b2401c4a2c0b57767601469b383be38da36c,2022-05-27 12:36:07.000 UTC,0,true -9146,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000025bec8158b13394095aeb6412a5b06ca416eeb5700000000000000000000000025bec8158b13394095aeb6412a5b06ca416eeb570000000000000000000000000000000000000000000000000000000001312d0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9147,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000198286fdf097bc1178c89aee772a7c505afeffcc000000000000000000000000198286fdf097bc1178c89aee772a7c505afeffcc000000000000000000000000000000000000000000000000010fcd70f577a0d400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9148,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a9e2322e585ad31fb3f126fe4621f60bb5df3c5f000000000000000000000000a9e2322e585ad31fb3f126fe4621f60bb5df3c5f00000000000000000000000000000000000000000000000000c2df8ec054cbbf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9149,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e94629793d7cd090bb863f185c29f4316eee0590000000000000000000000000e94629793d7cd090bb863f185c29f4316eee059000000000000000000000000000000000000000000000000001c5d67098290acc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x28fb8b0a43577e9bae1ab1b51f6b6d97518cf3b74396f831ec1af7e464d550de,2021-12-18 19:40:20.000 UTC,0,true -9151,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000065f6e3f32dca337fd8cea78ac25e0b590906b6fb00000000000000000000000065f6e3f32dca337fd8cea78ac25e0b590906b6fb0000000000000000000000000000000000000000000000000160975da9b4be7a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2e0e3680cadffc19211d6b25b77f2d0167ddb9b8472d53a96893ff44dedbbce2,2022-04-30 05:30:46.000 UTC,0,true -9153,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007aa3c6a33ec4bbfc6319e3c98333a018efdb1e680000000000000000000000007aa3c6a33ec4bbfc6319e3c98333a018efdb1e680000000000000000000000000000000000000000000000000152b4421ba4783f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9157,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bfa3a0e1d36f51e50d2d8e1318506f52c1a136e3000000000000000000000000bfa3a0e1d36f51e50d2d8e1318506f52c1a136e3000000000000000000000000000000000000000000000000009e0459c803abbe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9159,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f4f96a548f847ca2c97aa7b801d683b92353fce9000000000000000000000000f4f96a548f847ca2c97aa7b801d683b92353fce900000000000000000000000000000000000000000000000000088cb0ede33ac000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9160,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ce11f7d8a72536aebfd5a7b35ad90cc9d4e31bf8000000000000000000000000ce11f7d8a72536aebfd5a7b35ad90cc9d4e31bf8000000000000000000000000000000000000000000000000015d77956cd8d10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9164,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008376b16bb899cb80e07fe758a7a04dd6ed0b6e580000000000000000000000008376b16bb899cb80e07fe758a7a04dd6ed0b6e580000000000000000000000000000000000000000000000000060fa99e35b5cb400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9165,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009dd8ef100e98f980bd6d79374b9b4c10c8dc52840000000000000000000000009dd8ef100e98f980bd6d79374b9b4c10c8dc5284000000000000000000000000000000000000000000000000004c6e7a7c9214e800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9166,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9b98fc6810dc95954e3f9e951118b2f0fc4cf4d000000000000000000000000c9b98fc6810dc95954e3f9e951118b2f0fc4cf4d0000000000000000000000000000000000000000000000000774c9670cf3080000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe73825d2a32056928761d14071907dda8e1e3ae27fdc24a7af9ca36b96abe442,2022-02-03 12:34:24.000 UTC,0,true -9167,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000028a4f1c13fc3af4b4ac9ce8dac5eb7de9dd35ca100000000000000000000000028a4f1c13fc3af4b4ac9ce8dac5eb7de9dd35ca1000000000000000000000000000000000000000000000000019b66a1e1470efb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x858b58079605f577b99d9c3875f7ec111d60bb196bd7e48114368fea0fa8595d,2022-02-19 18:39:08.000 UTC,0,true -9170,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007764afa522fcf3f2f9c681d8b987a6b87ba22e790000000000000000000000007764afa522fcf3f2f9c681d8b987a6b87ba22e7900000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9171,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005c2930356784c160a667c5673b2ef1996b9d69570000000000000000000000005c2930356784c160a667c5673b2ef1996b9d6957000000000000000000000000000000000000000000000000001b2d5f27f999c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9172,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c4d6cbe3e704f5f8d18d3b3125b45a4cf82bb5a6000000000000000000000000c4d6cbe3e704f5f8d18d3b3125b45a4cf82bb5a600000000000000000000000000000000000000000000000000f09609c014860000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9174,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001ed43339d2c883b40519ec49c82b94897db7b1e10000000000000000000000001ed43339d2c883b40519ec49c82b94897db7b1e10000000000000000000000000000000000000000000000000051b660cdd5800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9176,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e1173b4410ea8142690d2be8fcf4022ba442a300000000000000000000000001e1173b4410ea8142690d2be8fcf4022ba442a3000000000000000000000000000000000000000000000000001597d1ac0b35f1100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2c80f47ec56c231c484b87a7343ff218072651d9a24eb6c6961f7dd77715276b,2021-12-20 02:27:31.000 UTC,0,true -9177,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e6ce84fb35db1cd9e17016abef2b06f7630f97b2000000000000000000000000e6ce84fb35db1cd9e17016abef2b06f7630f97b2000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9178,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000095538e1ab67caaf337e5048c097390af8119f74300000000000000000000000095538e1ab67caaf337e5048c097390af8119f743000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9179,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061eaa93248e9b4c317058d223ad59a4b5ae050e700000000000000000000000061eaa93248e9b4c317058d223ad59a4b5ae050e7000000000000000000000000000000000000000000000000000cca2e5131000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9180,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ffe8b3425cc5c5c5e425ad5565b334f7074778a7000000000000000000000000ffe8b3425cc5c5c5e425ad5565b334f7074778a7000000000000000000000000000000000000000000000000000cca2e5131000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9181,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000410d7f8d3d48d7f596f51c89f30ac2be06f2c8a0000000000000000000000000410d7f8d3d48d7f596f51c89f30ac2be06f2c8a0000000000000000000000000000000000000000000000000000cca2e5131000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9182,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aec42dae1d9550d83fe147fcb33b138a8084f0bd000000000000000000000000aec42dae1d9550d83fe147fcb33b138a8084f0bd000000000000000000000000000000000000000000000000000cca2e5131000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9185,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f708191c907fdb52f4359b169429ec03321036a4000000000000000000000000f708191c907fdb52f4359b169429ec03321036a4000000000000000000000000000000000000000000000000007857bb56be5e8f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9187,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000011d89a9b799c54aa3add4af585c929ad22b1f90600000000000000000000000011d89a9b799c54aa3add4af585c929ad22b1f90600000000000000000000000000000000000000000000000000190ca1ad26420000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9188,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000027bde5a4806188c84d6d6cbdce01f23cf5d492ac00000000000000000000000027bde5a4806188c84d6d6cbdce01f23cf5d492ac000000000000000000000000000000000000000000000000001bcfeb1a05320000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9189,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c27a8c3090cc5daa057f71cfef75b68ef9d75cfe000000000000000000000000c27a8c3090cc5daa057f71cfef75b68ef9d75cfe00000000000000000000000000000000000000000000000000002a104b02463500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9190,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c27a8c3090cc5daa057f71cfef75b68ef9d75cfe000000000000000000000000c27a8c3090cc5daa057f71cfef75b68ef9d75cfe00000000000000000000000000000000000000000000000000002a104b02463500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9195,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008efe405ed383ca3cdc4d71905f2891caec7f78520000000000000000000000008efe405ed383ca3cdc4d71905f2891caec7f78520000000000000000000000000000000000000000000000000020e4b6da66d86b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9196,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006702db7613fa734d9d59e3ae756c41236ac87a440000000000000000000000006702db7613fa734d9d59e3ae756c41236ac87a440000000000000000000000000000000000000000000000000060f333a3c3c57a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9198,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009f603173b7f845e8c05a5c325ecb2bdbe1a1db6c0000000000000000000000009f603173b7f845e8c05a5c325ecb2bdbe1a1db6c00000000000000000000000000000000000000000000000000053b8deab29b8b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9199,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b02000c80e381fe5a55b543cdf6abc7aeb44662f000000000000000000000000b02000c80e381fe5a55b543cdf6abc7aeb44662f00000000000000000000000000000000000000000000000000db43a93501972e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9200,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000583e4f6400ca8b7dbb0d9912a6627f80065287eb000000000000000000000000583e4f6400ca8b7dbb0d9912a6627f80065287eb0000000000000000000000000000000000000000000000000035a55eb81bc00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9204,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000054776f34b7d8f92671884a33dba19aa356580a6700000000000000000000000054776f34b7d8f92671884a33dba19aa356580a67000000000000000000000000000000000000000000000000005593560798bfcf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9205,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000020e4c5a2e44250b251e5018ab08e01a8a0990ca100000000000000000000000020e4c5a2e44250b251e5018ab08e01a8a0990ca10000000000000000000000000000000000000000000000000000000002fc1c4000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9206,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000006ff5c188b977bbfe299244b5c8adab10db3df9360000000000000000000000006ff5c188b977bbfe299244b5c8adab10db3df9360000000000000000000000000000000000000000000000000000000002fb407100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9207,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fe254efa26aebfd48693e214f30fca97f9ff91b8000000000000000000000000fe254efa26aebfd48693e214f30fca97f9ff91b80000000000000000000000000000000000000000000000000027de1e0462d5ea00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9209,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000505f6d43864de1d3e10a3615f68f67a39714e5b8000000000000000000000000505f6d43864de1d3e10a3615f68f67a39714e5b80000000000000000000000000000000000000000000000000000000002faf65400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9210,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000fd9272d6fd33507356a86f62c0070c1d5652f4df000000000000000000000000fd9272d6fd33507356a86f62c0070c1d5652f4df0000000000000000000000000000000000000000000000000000000002fab22700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9211,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dcedc4a80f03ba8ff3a7fc545fc9f4461b5788be000000000000000000000000dcedc4a80f03ba8ff3a7fc545fc9f4461b5788be00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9212,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc6e9f322c5e694139228cfbfef35b9bfe846e84000000000000000000000000cc6e9f322c5e694139228cfbfef35b9bfe846e84000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9214,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d1e33539ac9169415dac3bd2b2a8f63efb602479000000000000000000000000d1e33539ac9169415dac3bd2b2a8f63efb60247900000000000000000000000000000000000000000000000000044bd14142fd8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9215,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b34bd1d3ce820b56ab9adc2ebc81b819080a6403000000000000000000000000b34bd1d3ce820b56ab9adc2ebc81b819080a6403000000000000000000000000000000000000000000000000000504d56923008000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9217,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e54c2e783e8fde040096404e67688d5744596b3a000000000000000000000000e54c2e783e8fde040096404e67688d5744596b3a00000000000000000000000000000000000000000000000000921c83f1284f0600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9218,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000114b88f671c2fcb4b5457cbedf8a1da5a11f9611000000000000000000000000114b88f671c2fcb4b5457cbedf8a1da5a11f961100000000000000000000000000000000000000000000000000962f6229d07a4500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9219,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000006539028b70a88f11b853f0b08aa8740ded60c1080000000000000000000000006539028b70a88f11b853f0b08aa8740ded60c108000000000000000000000000000000000000000000000000000000002faf080000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9222,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071c04e28317150e78903047407d5253edc15819c00000000000000000000000071c04e28317150e78903047407d5253edc15819c00000000000000000000000000000000000000000000000000672366cf64cdac00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9223,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dced0b4ef8c9e236307726c8d18496009b8693d0000000000000000000000000dced0b4ef8c9e236307726c8d18496009b8693d000000000000000000000000000000000000000000000000000254d59e672b70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9225,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f09f00cb348571d0f9f03ca1e1efa77f25b3ba43000000000000000000000000f09f00cb348571d0f9f03ca1e1efa77f25b3ba4300000000000000000000000000000000000000000000000003ee63bcd23a8e5c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9229,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000044d0b1b261d980fbaedc869d909bc59a9ca1342700000000000000000000000044d0b1b261d980fbaedc869d909bc59a9ca1342700000000000000000000000000000000000000000000000000080cb955bba4ed00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9230,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a23469cf23dc27054610c2b12bbe4d86abeffea0000000000000000000000002a23469cf23dc27054610c2b12bbe4d86abeffea000000000000000000000000000000000000000000000000002aa1efb94e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9231,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000034f4f78e412c6ab52a4c1f58e257f21547584ca500000000000000000000000034f4f78e412c6ab52a4c1f58e257f21547584ca50000000000000000000000000000000000000000000000000022548ecd850d4900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9233,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a007b5d85f67a4d882927ef2ca992735a21d5028000000000000000000000000a007b5d85f67a4d882927ef2ca992735a21d50280000000000000000000000000000000000000000000000000060b9ce4961130200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2ce949ccd67d40b5a62a63f2fc3ffcdd2708537a55bd58ed6bbe77c370f06f0a,2022-04-20 10:40:09.000 UTC,0,true -9236,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d4e6ac859e207036f0bd1f891a7661122f871980000000000000000000000007d4e6ac859e207036f0bd1f891a7661122f87198000000000000000000000000000000000000000000000000015a4c3ae94033c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9238,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf4701ca4a43d0028c46b67c92ac436ec290e33e000000000000000000000000cf4701ca4a43d0028c46b67c92ac436ec290e33e0000000000000000000000000000000000000000000000000098bb42ad93b0a100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9239,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9cb3aa3f3fff85918904fa341db511866f9f4fe000000000000000000000000f9cb3aa3f3fff85918904fa341db511866f9f4fe000000000000000000000000000000000000000000000000000665172898800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9240,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002cb4bb6da78577e18b183f5ec93995b3e42fe4c80000000000000000000000002cb4bb6da78577e18b183f5ec93995b3e42fe4c8000000000000000000000000000000000000000000000000000d0591bf1d3e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9241,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e4230ceea610111f3bd7925aa27dd1de1bfe2a80000000000000000000000002e4230ceea610111f3bd7925aa27dd1de1bfe2a8000000000000000000000000000000000000000000000000001a9def5bd2195700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9242,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ea6838036e80f29f8e06c07e2bd225aa324e9560000000000000000000000005ea6838036e80f29f8e06c07e2bd225aa324e9560000000000000000000000000000000000000000000000000089a62cc5859e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9243,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002fd053df2901ec08938aa235e2c48fc3f2a751210000000000000000000000002fd053df2901ec08938aa235e2c48fc3f2a75121000000000000000000000000000000000000000000000000002d3eeba754dfe100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9244,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002abcacef500c0a228450a0c605c5fce842ec32890000000000000000000000002abcacef500c0a228450a0c605c5fce842ec3289000000000000000000000000000000000000000000000000000b3810b171c93200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9245,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a9dd44ed03ca24ac14f193d3ceb43c89dac7cf9c000000000000000000000000a9dd44ed03ca24ac14f193d3ceb43c89dac7cf9c0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9246,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000048e5bc4d87bf5878ed75c0755cc6385389752f9200000000000000000000000048e5bc4d87bf5878ed75c0755cc6385389752f92000000000000000000000000000000000000000000000000000221b262dd800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9247,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000052727488692711bf76b8114b28765733341d99b500000000000000000000000052727488692711bf76b8114b28765733341d99b50000000000000000000000000000000000000000000000000080e71cd4aa600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9248,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003fe87af9c27243ab2e70f55daacd990ea4f971280000000000000000000000003fe87af9c27243ab2e70f55daacd990ea4f9712800000000000000000000000000000000000000000000000000197f9c1d453a7200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9249,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff54b8ff7bd8f58295055606b59abdf3ac2eb27a000000000000000000000000ff54b8ff7bd8f58295055606b59abdf3ac2eb27a00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9250,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080439db68611029d6e8a46f49b7747242fac203900000000000000000000000080439db68611029d6e8a46f49b7747242fac203900000000000000000000000000000000000000000000000000611298a3f2d57d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9251,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cd9746d5bd872cccb178099553dccfb9c93f5b79000000000000000000000000cd9746d5bd872cccb178099553dccfb9c93f5b790000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9255,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021f14394d1eb6cf83743a1cfb78f1fb1049e7d6c00000000000000000000000021f14394d1eb6cf83743a1cfb78f1fb1049e7d6c000000000000000000000000000000000000000000000000000d726db46be90e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9257,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000599c5c2df0b8c398d151ac2a13ae576bbcecb671000000000000000000000000599c5c2df0b8c398d151ac2a13ae576bbcecb671000000000000000000000000000000000000000000000000001f06e3e2f66cbc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9258,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000042ba2a84c1440290d9d66bea78248db81c160a6400000000000000000000000042ba2a84c1440290d9d66bea78248db81c160a64000000000000000000000000000000000000000000000000e70baa9f4b7f3cc400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9259,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008dc804d15747266979f6a1929fb2446301cee87b0000000000000000000000008dc804d15747266979f6a1929fb2446301cee87b0000000000000000000000000000000000000000000000000006c00a3912c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9262,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000004285286356a91735d56bf3d072e49b72be370d270000000000000000000000004285286356a91735d56bf3d072e49b72be370d2700000000000000000000000000000000000000000000000056ff03f7d19c214800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xe0f8974f6533fd34f8a403ebf1f027726e411a95404c22b513f38c36745b1660,2021-12-17 05:34:09.000 UTC,0,true -9263,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e816691000000000000000000000000a87df5f4ff03ac496988b87e25f025415118324c000000000000000000000000a87df5f4ff03ac496988b87e25f025415118324c0000000000000000000000000000000000000000000000000785a4bee73b569b00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x1745c8a044007993744768851862593b2e7306086a3a1d99a89404358505c66e,2022-05-28 06:33:45.000 UTC,0,true -9264,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047c5402a052957c9f0f126d956b2bccfb2a33a8400000000000000000000000047c5402a052957c9f0f126d956b2bccfb2a33a84000000000000000000000000000000000000000000000000000dcf6a5b91bfc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9265,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ee9dd8df1e32a3299796fd133b0a19fd27d5a78d000000000000000000000000ee9dd8df1e32a3299796fd133b0a19fd27d5a78d0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9268,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000459dabca5ada6670cbc4da49593f8abb1bd849ba0000000000000000000000000000000000000000000000003761758e90ac8000,,,1,true -9271,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf6380c18387dfacbb2a5a6d5c5064c05ceb707d000000000000000000000000bf6380c18387dfacbb2a5a6d5c5064c05ceb707d00000000000000000000000000000000000000000000000000560ec7e179493600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9272,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000001b3eb2d3e6eccb1b276bf9b3b35ce6f970652b000000000000000000000000001b3eb2d3e6eccb1b276bf9b3b35ce6f970652b000000000000000000000000000000000000000000000000000648924d793154d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9274,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000034fc0c81594d49caa2da7f218d4232a67fe9f8cd00000000000000000000000034fc0c81594d49caa2da7f218d4232a67fe9f8cd0000000000000000000000000000000000000000000000000032c0e63eb172a400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9275,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000008d0b5f85c1517c94742ceb2b56b36fbb63717d400000000000000000000000008d0b5f85c1517c94742ceb2b56b36fbb63717d400000000000000000000000000000000000000000000000000173b7b514ea77c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9276,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca47aaea6120929ce02ada914a46165481ec270f000000000000000000000000ca47aaea6120929ce02ada914a46165481ec270f000000000000000000000000000000000000000000000000001a4747e9aacbb700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9277,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7d18ca327701c4ebffc8d7df123fa03eecb65b2000000000000000000000000f7d18ca327701c4ebffc8d7df123fa03eecb65b2000000000000000000000000000000000000000000000000014a236bedf9fb2b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9278,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000196bd4b3c76dec0f12bae6c97c86745880f330dd000000000000000000000000196bd4b3c76dec0f12bae6c97c86745880f330dd000000000000000000000000000000000000000000000000006a8c9930ca629a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9279,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d528c1d6e3b5d544f161b5670183da6398e4ea83000000000000000000000000d528c1d6e3b5d544f161b5670183da6398e4ea830000000000000000000000000000000000000000000000000013c9abf30b4d3100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xdfe26960e002b57af9221dd365396a99900f02ef3e898d8c60c4a318eb5f1f0a,2022-03-16 11:26:15.000 UTC,0,true -9280,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bfa11ee4870d08acd8530056a738e4fec094bb01000000000000000000000000bfa11ee4870d08acd8530056a738e4fec094bb01000000000000000000000000000000000000000000000000001f8f206ee6b05700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9281,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006eaab50da15fda48238a463012241b91b92fda140000000000000000000000006eaab50da15fda48238a463012241b91b92fda140000000000000000000000000000000000000000000000000013c285ed92ae7000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9282,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b54f3fb9731b3486136ed35d2786672793eac37b000000000000000000000000b54f3fb9731b3486136ed35d2786672793eac37b0000000000000000000000000000000000000000000000000023756f5a033f6f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9283,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009f457c86f33ed9072055e549b0573dd4eec99c600000000000000000000000009f457c86f33ed9072055e549b0573dd4eec99c6000000000000000000000000000000000000000000000000000283161f22cb56900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5e527358bc01b64be29549d446a75dc73051329fb159e4569c589ec10a8e1e48,2022-05-18 14:59:01.000 UTC,0,true -9284,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000013c65f9acdf88140bc900e848f383462db39144b00000000000000000000000013c65f9acdf88140bc900e848f383462db39144b0000000000000000000000000000000000000000000000000009f295cd5f000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9285,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f46d8d3da0ad193c3830d0c4674d836453c1f730000000000000000000000000f46d8d3da0ad193c3830d0c4674d836453c1f730000000000000000000000000000000000000000000000000000b54452c383c7700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9286,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000555d164196c81b8eb43b8222ae54c3d2edf432b5000000000000000000000000555d164196c81b8eb43b8222ae54c3d2edf432b5000000000000000000000000000000000000000000000000002c7648b123bcca00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9287,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c3f8214027a3bd2b9f2a3c0b25d6dff3b524be70000000000000000000000004c3f8214027a3bd2b9f2a3c0b25d6dff3b524be700000000000000000000000000000000000000000000000000858ab8ac2a973d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9288,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000511fd147204c6d0ca4559eb6d87c1fe4bd1fa006000000000000000000000000511fd147204c6d0ca4559eb6d87c1fe4bd1fa0060000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9293,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001877a64a37778e58ac2646107ece72a24d07021d0000000000000000000000001877a64a37778e58ac2646107ece72a24d07021d00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9295,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be0f0f1077e5f5ed5e9b1dac16b6873163889381000000000000000000000000be0f0f1077e5f5ed5e9b1dac16b687316388938100000000000000000000000000000000000000000000000000215c7330bae20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5d8d3d298cb3a3592f301c75c0a1063535216a71023dcd0b71957e977f367d13,2022-01-09 08:58:25.000 UTC,0,true -9298,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002478c895d589c86f8a3b4166bf50532250449c470000000000000000000000002478c895d589c86f8a3b4166bf50532250449c4700000000000000000000000000000000000000000000000000994ac868457a6200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9300,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b1f0b017a8a1cf913056bd813c3e1958045feca4000000000000000000000000b1f0b017a8a1cf913056bd813c3e1958045feca400000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9301,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a068f207215241f406d01c5b0f767ead62f28f10000000000000000000000002a068f207215241f406d01c5b0f767ead62f28f10000000000000000000000000000000000000000000000000093f87c9f9bd07500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xc2e5af446d8b40cd61aecac17e07df8510ae753fd548ea2ea686ebdafd59c58e,2022-05-07 02:43:56.000 UTC,0,true -9302,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b25e559bd09e91f3b28f787c17530b2da5d2b5fe000000000000000000000000b25e559bd09e91f3b28f787c17530b2da5d2b5fe00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9303,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b25e559bd09e91f3b28f787c17530b2da5d2b5fe000000000000000000000000b25e559bd09e91f3b28f787c17530b2da5d2b5fe0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9305,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f09473bead03711eb34f3efd5e59c369cc11c3aa000000000000000000000000f09473bead03711eb34f3efd5e59c369cc11c3aa00000000000000000000000000000000000000000000000002c0a5566257e60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9306,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e18c444e82ddac4046a55355d97241ec59c7184c000000000000000000000000e18c444e82ddac4046a55355d97241ec59c7184c0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9308,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be88f94781de8d77f0af8fb312eae9839e3a6837000000000000000000000000be88f94781de8d77f0af8fb312eae9839e3a6837000000000000000000000000000000000000000000000000015f46284133f30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9310,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000ae15032ef0fd26cd64379d1320cd480641c1de9400000000000000000000000000000000000000000000000635963db041b4e000,,,1,true -9311,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037f9349dfb6c8875e40421eb32be9fc1e20f2e4600000000000000000000000037f9349dfb6c8875e40421eb32be9fc1e20f2e4600000000000000000000000000000000000000000000000000178a2ba80d0f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9316,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd2dc5fb8b6222d9f743b3eeec059790c07ca2a4000000000000000000000000bd2dc5fb8b6222d9f743b3eeec059790c07ca2a4000000000000000000000000000000000000000000000000001c3e3054eb723500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9317,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f0c09d91aa30e491e1a3a20c6fd35838257e2648000000000000000000000000f0c09d91aa30e491e1a3a20c6fd35838257e26480000000000000000000000000000000000000000000000000019519394a8c3ea00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9318,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a06716d67727dfd6ab1d2ea59be872a9164c17f0000000000000000000000006a06716d67727dfd6ab1d2ea59be872a9164c17f00000000000000000000000000000000000000000000000002b5a9c2fa34d2c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9320,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000006a06716d67727dfd6ab1d2ea59be872a9164c17f0000000000000000000000006a06716d67727dfd6ab1d2ea59be872a9164c17f0000000000000000000000000000000000000000000000360af9ae23bb59135800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9323,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000655790887ba1125627a35b1402121f85619c4ce9000000000000000000000000655790887ba1125627a35b1402121f85619c4ce90000000000000000000000000000000000000000000000000032e69d7292a58000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9324,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000af25f79ffd2fc428c80392f0796ec9c3b2e37fac000000000000000000000000af25f79ffd2fc428c80392f0796ec9c3b2e37fac000000000000000000000000000000000000000000000000036ae123beeec7bb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2573bdff57c0c2aee2eacfe6e8bc1e4d894f5b454ef998458289c88433ce739d,2022-05-07 04:47:34.000 UTC,0,true -9325,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002fa7d6b46a2e88ba99c7b3aa150916eedd3401b90000000000000000000000002fa7d6b46a2e88ba99c7b3aa150916eedd3401b9000000000000000000000000000000000000000000000000001e2ad1d57b627500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9332,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000003224a28d565ccd730e815affd83772ece93e1760000000000000000000000000000000000000000000000069bb18b4790727b3e4,,,1,true -9334,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002996fe21cf925d4304ac11ef7c61481e97e739790000000000000000000000002996fe21cf925d4304ac11ef7c61481e97e7397900000000000000000000000000000000000000000000000000b4cb58a4efe73900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9335,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000067e056e707834cde7635023da431ba5eb3dff28000000000000000000000000067e056e707834cde7635023da431ba5eb3dff280000000000000000000000000000000000000000000000000153f909e7ca181b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9336,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9686237455fd803f1fafecd58b194569462dc3e000000000000000000000000e9686237455fd803f1fafecd58b194569462dc3e0000000000000000000000000000000000000000000000001796ee934707dd6500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9338,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f6b34da0a9272d9e178345cdc9cdffcaf22e0c50000000000000000000000002f6b34da0a9272d9e178345cdc9cdffcaf22e0c5000000000000000000000000000000000000000000000000001696d36a3aebad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9339,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ebd026b41b789b7d6085e42fee4fef5f566bc51e000000000000000000000000ebd026b41b789b7d6085e42fee4fef5f566bc51e0000000000000000000000000000000000000000000000000000169f544d2ca200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9340,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000353814d9e14c5b225c53d2405a88b54926a52f19000000000000000000000000353814d9e14c5b225c53d2405a88b54926a52f190000000000000000000000000000000000000000000000000c20b280db71303d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9342,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004993c856bf66dc5fe26f2760b6eb5795d4d1c1b20000000000000000000000004993c856bf66dc5fe26f2760b6eb5795d4d1c1b200000000000000000000000000000000000000000000000000861251576f90d200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9345,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000837e285fd01be3720b8d39d685721372da434505000000000000000000000000837e285fd01be3720b8d39d685721372da434505000000000000000000000000000000000000000000000000000665172898800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9346,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a251df99a88a20a93876205fb7f5faf2e85a4810000000000000000000000000a251df99a88a20a93876205fb7f5faf2e85a481000000000000000000000000000000000000000000000000003c7ad7f46d4b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9347,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004710bd5bf91c3e56be0f8f60a4f70b1eb8fb0a7c0000000000000000000000004710bd5bf91c3e56be0f8f60a4f70b1eb8fb0a7c0000000000000000000000000000000000000000000000000002e78c1604f96300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9351,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000057f257e58b1831e4e57815026e889203c4338c2200000000000000000000000057f257e58b1831e4e57815026e889203c4338c22000000000000000000000000000000000000000000000000005fec5b60ef800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9352,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000137bc42fb993998427f77ea9fa00428b15eb6e9c000000000000000000000000137bc42fb993998427f77ea9fa00428b15eb6e9c000000000000000000000000000000000000000000000000000df91a9fb2d24a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9353,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fdc1fdaefc803081705b6828be4dabe657a38b63000000000000000000000000fdc1fdaefc803081705b6828be4dabe657a38b63000000000000000000000000000000000000000000000000000665172898800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9354,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ed3657715825bb97462f54a4e9954c0b567a527c000000000000000000000000ed3657715825bb97462f54a4e9954c0b567a527c00000000000000000000000000000000000000000000000000119ecc9f07cd0b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9356,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021efeb91568e267861805964a49b52de13b3214300000000000000000000000021efeb91568e267861805964a49b52de13b32143000000000000000000000000000000000000000000000000000f07fe7fab2c6000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9358,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002720c59ec77de3c95bc96f7331094e6d2c424d540000000000000000000000002720c59ec77de3c95bc96f7331094e6d2c424d54000000000000000000000000000000000000000000000000001b27692b42438000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9359,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef3c98e82e07e20b727320c8007cad35cdfcae82000000000000000000000000ef3c98e82e07e20b727320c8007cad35cdfcae820000000000000000000000000000000000000000000000000022ff2c2c5705a000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9360,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf5271dfce67df0c4ab7508990a396dac9260fb7000000000000000000000000cf5271dfce67df0c4ab7508990a396dac9260fb70000000000000000000000000000000000000000000000000010cfd7f1d93b6a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9365,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be4619bfec05b3f08626e371f683c966fb20c03e000000000000000000000000be4619bfec05b3f08626e371f683c966fb20c03e00000000000000000000000000000000000000000000000000408089599f349100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9366,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000090f0c594f6a091adf6e8a2d5f542c393dda2bcc000000000000000000000000090f0c594f6a091adf6e8a2d5f542c393dda2bcc000000000000000000000000000000000000000000000000002e2c01e24d5b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9367,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000092e8eb0cc8cb7aa6c315deb3d6901b17e58d063b00000000000000000000000092e8eb0cc8cb7aa6c315deb3d6901b17e58d063b000000000000000000000000000000000000000000000000002b749ddf128ade00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9368,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000012152e86425e2177951468219474b9ba6b7af02b00000000000000000000000012152e86425e2177951468219474b9ba6b7af02b0000000000000000000000000000000000000000000000000089475dec56c50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9369,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004f41e7b786ba3dcc794a1798e4b940f83b828b1b0000000000000000000000004f41e7b786ba3dcc794a1798e4b940f83b828b1b00000000000000000000000000000000000000000000000000f234409b70023b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9371,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000008be1c270218a2468f720b8d00a7de43eadbc29a00000000000000000000000008be1c270218a2468f720b8d00a7de43eadbc29a000000000000000000000000000000000000000000000000015e99e17963bb0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9372,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000201dc733562b29eb35f358f401b8cff97297d340000000000000000000000000201dc733562b29eb35f358f401b8cff97297d34000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9373,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ab6e6ef4d98a59c76769f7ab4e30bd3895e96005000000000000000000000000ab6e6ef4d98a59c76769f7ab4e30bd3895e9600500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9374,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005c49f81bdabbfc584ed69a448df43506a50079000000000000000000000000005c49f81bdabbfc584ed69a448df43506a50079000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9375,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003645219d84c202e86e5a0652d198ab176bd1b18b0000000000000000000000003645219d84c202e86e5a0652d198ab176bd1b18b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9376,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000084285466b55d6f377e32005bd26848c85cb0020600000000000000000000000084285466b55d6f377e32005bd26848c85cb0020600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9378,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000b3c8597032cce4fc2af68cc48783455c2fd7a5c0000000000000000000000000b3c8597032cce4fc2af68cc48783455c2fd7a5c00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9379,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000025e6fccf1b93555aa9e2c58fea2f469507cf76a500000000000000000000000025e6fccf1b93555aa9e2c58fea2f469507cf76a500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9380,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000069612b3c79d214aa9fbbed24e758ea296d373c3600000000000000000000000069612b3c79d214aa9fbbed24e758ea296d373c3600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9381,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000215dc4f0eebb4e57fd0e5827add3403035109704000000000000000000000000215dc4f0eebb4e57fd0e5827add340303510970400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9382,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000781c3d6bacb3417c2c5dae348e35c6cb801a425d000000000000000000000000781c3d6bacb3417c2c5dae348e35c6cb801a425d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9383,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000813c36852827c230c3f53dd2ab319d2d59797bcd000000000000000000000000813c36852827c230c3f53dd2ab319d2d59797bcd00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9384,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1ee081974bd829eb8f88fe283d4cab03099abd6000000000000000000000000f1ee081974bd829eb8f88fe283d4cab03099abd600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9385,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ed16299c9f3ad2b85342991fd1c7fb5b7641f28e000000000000000000000000ed16299c9f3ad2b85342991fd1c7fb5b7641f28e00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9386,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000502b811e4d4e89ab278e3d5edd70c1142d0f7207000000000000000000000000502b811e4d4e89ab278e3d5edd70c1142d0f720700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9387,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001810bc0600f9c0c008e0bccc980d40a651f0992a0000000000000000000000001810bc0600f9c0c008e0bccc980d40a651f0992a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9388,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000074297dba00d452cedde835c6f7c3a8a903104e4e00000000000000000000000074297dba00d452cedde835c6f7c3a8a903104e4e00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9389,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071e76dc3bebc994087b736c277fd343df20ec37900000000000000000000000071e76dc3bebc994087b736c277fd343df20ec37900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9390,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000731fd0bee5e6586376a71abb99ff8163564e5940000000000000000000000000731fd0bee5e6586376a71abb99ff8163564e594000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9391,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000e80d4eb607984b26c488f265801c997a259dd80b000000000000000000000000e80d4eb607984b26c488f265801c997a259dd80b000000000000000000000000000000000000000000000000000000003528a93900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9392,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d646c61d4588d27491ce4fb3d56301f2a493c280000000000000000000000006d646c61d4588d27491ce4fb3d56301f2a493c28000000000000000000000000000000000000000000000000004d304e1fa4e2c800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9393,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef45e94c3e03979ad47d6aeb1170ed86bae00d1e000000000000000000000000ef45e94c3e03979ad47d6aeb1170ed86bae00d1e00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9394,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000454e08277cf48c2db7e619c921f22db9360494e3000000000000000000000000454e08277cf48c2db7e619c921f22db9360494e300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9395,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043dda16a8e5fa5d5bee9f8e442ea812cc5a80c8900000000000000000000000043dda16a8e5fa5d5bee9f8e442ea812cc5a80c8900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9396,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001d17cf7dbe048807ddc142fe887dc174d9e59ec90000000000000000000000001d17cf7dbe048807ddc142fe887dc174d9e59ec900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9397,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c69b47d4c9ba5f6440183ecff4749f12905933fd000000000000000000000000c69b47d4c9ba5f6440183ecff4749f12905933fd00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9398,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be41953010251d94ad5de4f4a7c6b970ca7be4d0000000000000000000000000be41953010251d94ad5de4f4a7c6b970ca7be4d000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9399,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000085704b4b37cdb762a66d15e5fff3096620456d5c00000000000000000000000085704b4b37cdb762a66d15e5fff3096620456d5c00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9400,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dbae11ccb6b39d2fbda0ccb4712b9d40cbc63d3e000000000000000000000000dbae11ccb6b39d2fbda0ccb4712b9d40cbc63d3e00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9401,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099e86304a71df6e3181d4dc594e9da2c7b91e72d00000000000000000000000099e86304a71df6e3181d4dc594e9da2c7b91e72d000000000000000000000000000000000000000000000000007ffb96364d9ea300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9402,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000072cc613ab9d908cf47ba1eda214f8db5afcef1ce00000000000000000000000072cc613ab9d908cf47ba1eda214f8db5afcef1ce000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9403,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000030ca51c31a25a8a581903ca37647eee1c827602b00000000000000000000000030ca51c31a25a8a581903ca37647eee1c827602b00000000000000000000000000000000000000000000000000ad3227ecfc140000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9405,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005f24b98ad804e6e87b1d90ff843f6a46b3feab4e0000000000000000000000005f24b98ad804e6e87b1d90ff843f6a46b3feab4e000000000000000000000000000000000000000000000000000d63f448376b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9406,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000070c969b616e0e400d55b5ada2cd544a5d7c160bf00000000000000000000000070c969b616e0e400d55b5ada2cd544a5d7c160bf0000000000000000000000000000000000000000000000000040846d7982345b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9407,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000003e23505d4c3a701c6ae843a3bd48997a7376fb400000000000000000000000003e23505d4c3a701c6ae843a3bd48997a7376fb40000000000000000000000000000000000000000000000001bb7c64f114bca4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9408,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005483d50d366b2c47b16ec6f0f0a66963754c3d030000000000000000000000005483d50d366b2c47b16ec6f0f0a66963754c3d0300000000000000000000000000000000000000000000000000884925af0afe0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9409,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e63ddc147253f8d004b14224df49b529de47a665000000000000000000000000e63ddc147253f8d004b14224df49b529de47a6650000000000000000000000000000000000000000000000000080aa1e7c9ee07b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9410,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000bfa9f6741056c180a0ac825bac06a665898d44c0000000000000000000000000bfa9f6741056c180a0ac825bac06a665898d44c000000000000000000000000000000000000000000000000005ff3db60039fc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9411,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006c29696ebd2a47ccf361dc7fb421da4532e897fb0000000000000000000000006c29696ebd2a47ccf361dc7fb421da4532e897fb000000000000000000000000000000000000000000000000006042c8aa21bd4b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9412,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000097bab1b1353f3717aefab2f9ae319e1f4f614b0100000000000000000000000097bab1b1353f3717aefab2f9ae319e1f4f614b010000000000000000000000000000000000000000000000000042da6f7ae3784e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9413,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ce00ca9e1675fe532dda35a8784bef9f276a0165000000000000000000000000ce00ca9e1675fe532dda35a8784bef9f276a016500000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x8d64c56ffd31140fc4df58691b76ffb0ea752e34a7b48794506fdb758c63280b,2022-07-04 07:14:28.000 UTC,0,true -9414,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000084c57ac9448b9fd931d2b4803716aa4e76c8e82a00000000000000000000000084c57ac9448b9fd931d2b4803716aa4e76c8e82a000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xcb9c0343593a2f248d3e41cca83577bb495a1f6f75a660fa1002da21bc938f41,2022-06-11 19:28:32.000 UTC,0,true -9415,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d01df8cde50458831a311cc114f2e2fc262b4573000000000000000000000000d01df8cde50458831a311cc114f2e2fc262b4573000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9416,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009119c41ad7a14e53b5882210a4acc31eaf23275e0000000000000000000000009119c41ad7a14e53b5882210a4acc31eaf23275e00000000000000000000000000000000000000000000000000f740b7c15c580200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x71afdbec735c684d14c15ae3716d112438710a2a829ceb0eab4a0faf0804c2fb,2022-03-04 07:22:33.000 UTC,0,true -9417,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000843a315006c23eb34b4b0dc6a4284e80c3db86d4000000000000000000000000843a315006c23eb34b4b0dc6a4284e80c3db86d4000000000000000000000000000000000000000000000000013c31d34ed01ae300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xacd3bf31ad1250ae7e92bed70fd588af0d5b25be91c92a0191bf6914033be4d5,2021-12-15 10:01:54.000 UTC,0,true -9420,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006722222812d18958a0ee6c2a75ac4ed3f2048ca40000000000000000000000006722222812d18958a0ee6c2a75ac4ed3f2048ca4000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9421,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fe9cdb03ebf1508f8dae114a7095cee140ed9cf2000000000000000000000000fe9cdb03ebf1508f8dae114a7095cee140ed9cf200000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9422,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d01df8cde50458831a311cc114f2e2fc262b4573000000000000000000000000d01df8cde50458831a311cc114f2e2fc262b4573000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9423,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000059bd4ae28ac8b6215f722a9a813c7f67fc0e929400000000000000000000000059bd4ae28ac8b6215f722a9a813c7f67fc0e92940000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9424,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000172f7bcf2ab7f5066ab4e22c85f366e36a28820a000000000000000000000000172f7bcf2ab7f5066ab4e22c85f366e36a28820a0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9425,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fe9cdb03ebf1508f8dae114a7095cee140ed9cf2000000000000000000000000fe9cdb03ebf1508f8dae114a7095cee140ed9cf200000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9426,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fe9cdb03ebf1508f8dae114a7095cee140ed9cf2000000000000000000000000fe9cdb03ebf1508f8dae114a7095cee140ed9cf200000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9427,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001ed92d98c7204084d9d86c80cf1cecfba64e11cc0000000000000000000000001ed92d98c7204084d9d86c80cf1cecfba64e11cc0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9428,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a14d9797878c6592e53ec17b81b6729f3a0c19d6000000000000000000000000a14d9797878c6592e53ec17b81b6729f3a0c19d60000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9429,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000090450285065bd2aae5539e7dec285c2b909cbbdc00000000000000000000000090450285065bd2aae5539e7dec285c2b909cbbdc000000000000000000000000000000000000000000000000008a271a42f4250000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9432,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000009102ab6f2c92b7fae7d35687a4d9654c2bc309c00000000000000000000000009102ab6f2c92b7fae7d35687a4d9654c2bc309c000000000000000000000000000000000000000000000000005102d67afffd2d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9433,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004f78c76667750062a28470fa9d17636cf99e7ff60000000000000000000000004f78c76667750062a28470fa9d17636cf99e7ff60000000000000000000000000000000000000000000000000062af5123b128cc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9434,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000867f2c3854a0feb9f0e2fa7da9484831732f302f000000000000000000000000867f2c3854a0feb9f0e2fa7da9484831732f302f00000000000000000000000000000000000000000000000000060a24181e400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9435,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf9d50f495e489f03419c9037d437c3c6122b744000000000000000000000000cf9d50f495e489f03419c9037d437c3c6122b74400000000000000000000000000000000000000000000000000178773a2ba85f500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9436,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006450da461d027a49c2b30f8cf41bd72798699a6b0000000000000000000000006450da461d027a49c2b30f8cf41bd72798699a6b000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9437,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000870b93d72d217d4b85f11d6507896f49d5f08feb000000000000000000000000870b93d72d217d4b85f11d6507896f49d5f08feb000000000000000000000000000000000000000000000000004e7c2c255a26b300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9439,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2034241e6ed97b11e5dabba229c968c747a19e5000000000000000000000000a2034241e6ed97b11e5dabba229c968c747a19e5000000000000000000000000000000000000000000000000000221b262dd800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9440,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e46c821441771cf14f1d07602b27c64ca3341a12000000000000000000000000e46c821441771cf14f1d07602b27c64ca3341a120000000000000000000000000000000000000000000000000a71bf54649d37af00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9441,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000383aca4e21388e32faf89fd941dffac9e3b33ff8000000000000000000000000383aca4e21388e32faf89fd941dffac9e3b33ff80000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9442,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ef70c1bb25f298ff9827d522e3b1c2a38fb95e60000000000000000000000007ef70c1bb25f298ff9827d522e3b1c2a38fb95e6000000000000000000000000000000000000000000000000001ff973cafa800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9444,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000009923338e76f7e853d93a3a5a4924f046ec7550e00000000000000000000000009923338e76f7e853d93a3a5a4924f046ec7550e000000000000000000000000000000000000000000000000000e1c8942dfa70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9445,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ee33af102f6fef6c3c155499adaa804ffbd0398f000000000000000000000000ee33af102f6fef6c3c155499adaa804ffbd0398f00000000000000000000000000000000000000000000000000154dcaf4770c3b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9447,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000063798de1a0e801de233034d57cb9b033f7606d2d00000000000000000000000063798de1a0e801de233034d57cb9b033f7606d2d000000000000000000000000000000000000000000000000001c19fc81eb0fea00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9448,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f93bee3e6c159f51581e39dcbf97db9727690a6a000000000000000000000000f93bee3e6c159f51581e39dcbf97db9727690a6a000000000000000000000000000000000000000000000000015adf6a8488945e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x6cfbb271749cb8eb91e6a2d0dad558cd696f12f8141ca319de956de91328a4b6,2022-02-15 14:00:21.000 UTC,0,true -9449,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a45672f14c8272a9443c6255e52ac4eae882bfc0000000000000000000000005a45672f14c8272a9443c6255e52ac4eae882bfc00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9450,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e835af9a97134dd295174ca9ac0718db63b07ad7000000000000000000000000e835af9a97134dd295174ca9ac0718db63b07ad700000000000000000000000000000000000000000000000000f8b0a10e47000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9451,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3f982b963a063440cf4a93ee2f2b7262473a2a8000000000000000000000000d3f982b963a063440cf4a93ee2f2b7262473a2a800000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9452,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac82d6a9e995b3b8dcc24456218b816e5e5832aa000000000000000000000000ac82d6a9e995b3b8dcc24456218b816e5e5832aa00000000000000000000000000000000000000000000000000ca8132b032800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9453,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3770cef12ca18f738778a65d4ed793af09b05ef000000000000000000000000d3770cef12ca18f738778a65d4ed793af09b05ef0000000000000000000000000000000000000000000000000121e6c485ac000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9454,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000b4283d33efa4c509242f33147f0c6ccd20a8d980000000000000000000000000b4283d33efa4c509242f33147f0c6ccd20a8d980000000000000000000000000000000000000000000000000045e1c069e0c49700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9455,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bb9a04ec522d4d2de555d3c32032728f44ceac6f000000000000000000000000bb9a04ec522d4d2de555d3c32032728f44ceac6f00000000000000000000000000000000000000000000000000db8ec5c71e800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9456,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000020b181d2f2afed425eced4cc680f97973a64060500000000000000000000000020b181d2f2afed425eced4cc680f97973a64060500000000000000000000000000000000000000000000000000fc9912c387c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9457,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049f44c6df326ac1577bad16b85d902c59196dce100000000000000000000000049f44c6df326ac1577bad16b85d902c59196dce100000000000000000000000000000000000000000000000001c10a77b72d76e600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xc8f1177068c454162da1bb1e585517286844ce1963e626a631509c6ca4a46e58,2022-02-14 08:42:28.000 UTC,0,true -9458,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ec53fc9628c449bffebf3aa47c6f57d0608c18e0000000000000000000000004ec53fc9628c449bffebf3aa47c6f57d0608c18e00000000000000000000000000000000000000000000000001478f69584a800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9459,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001629052ed55b2198eec166a26a17db252a2e094f0000000000000000000000001629052ed55b2198eec166a26a17db252a2e094f00000000000000000000000000000000000000000000000001207af843c3000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9460,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000036a656d41bbc80953e1d7aff9b704db5070d940e00000000000000000000000036a656d41bbc80953e1d7aff9b704db5070d940e000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9461,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002032dd3a8779d3fe81809af004b7bfe6ebd612f50000000000000000000000002032dd3a8779d3fe81809af004b7bfe6ebd612f500000000000000000000000000000000000000000000000000ffcb9e57d4000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9463,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000edc2fdcc98b72e6e0406e795e485f1665ec8cfc6000000000000000000000000edc2fdcc98b72e6e0406e795e485f1665ec8cfc6000000000000000000000000000000000000000000000000000000003b9224f000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xa1554d6712b9c794da107909c2269f16602cfd55f251b748c195b9af0967085b,2022-04-20 10:33:15.000 UTC,0,true -9465,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6fcd3e0e93e92d7f26aa0567bb3bb09528cdd79000000000000000000000000b6fcd3e0e93e92d7f26aa0567bb3bb09528cdd79000000000000000000000000000000000000000000000000013150f3779a922700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9466,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fd5344ac489cad99bac38b6e1a1ad718289e074b000000000000000000000000fd5344ac489cad99bac38b6e1a1ad718289e074b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9467,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b1833e3a5eb53d3700517e6466a1844c9dfb5bd4000000000000000000000000b1833e3a5eb53d3700517e6466a1844c9dfb5bd400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9468,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000852958a22a290e7dc0702d9bc2f3d60f3bc24f00000000000000000000000000852958a22a290e7dc0702d9bc2f3d60f3bc24f0000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9469,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c459fa807062efc84c4d18e032ae05da9e1272cd000000000000000000000000c459fa807062efc84c4d18e032ae05da9e1272cd00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9470,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000517da7183897730aa3424898c44c8bc0d0206bf2000000000000000000000000517da7183897730aa3424898c44c8bc0d0206bf200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9471,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e260ac9ecb4f1e4e19222a6442ce8ce0267e5a30000000000000000000000006e260ac9ecb4f1e4e19222a6442ce8ce0267e5a300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9472,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000058a4da2ce842e7df975eb1077ec1e4c06a0b866100000000000000000000000058a4da2ce842e7df975eb1077ec1e4c06a0b866100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9473,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c7f6a9a32cdf437b6390b713bcd45a779e5492e0000000000000000000000003c7f6a9a32cdf437b6390b713bcd45a779e5492e00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9474,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d12e0865917014e64e30afea6cf235b6ce830640000000000000000000000007d12e0865917014e64e30afea6cf235b6ce8306400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9475,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000395d583fe840c275bc528d285682e81a8e7c6b0d000000000000000000000000395d583fe840c275bc528d285682e81a8e7c6b0d000000000000000000000000000000000000000000000000002a1bb74be714e900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9476,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d11a7d1e3f3d1aad17294a513940312347922d40000000000000000000000006d11a7d1e3f3d1aad17294a513940312347922d400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9477,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000440c50687f35f0f251525dbd50f381a3084373ac000000000000000000000000440c50687f35f0f251525dbd50f381a3084373ac00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9478,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076873fb189363a8c4a8d69ba6fba300ac5b1d91600000000000000000000000076873fb189363a8c4a8d69ba6fba300ac5b1d91600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9479,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000473e3eaf7961585fcd80626af4a07882db86a904000000000000000000000000473e3eaf7961585fcd80626af4a07882db86a90400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9480,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002feb6a35b7ba6aac0442364532a06d12409b10900000000000000000000000002feb6a35b7ba6aac0442364532a06d12409b109000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9481,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000053c0068da58dc80de6f3ec50ed67ae9aad3209a000000000000000000000000053c0068da58dc80de6f3ec50ed67ae9aad3209a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9482,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000051aae740d3b49c91e2b584adc30d50cbb27b798e00000000000000000000000051aae740d3b49c91e2b584adc30d50cbb27b798e00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9483,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000719a04e7710a1709d7b30237121c023450da512c000000000000000000000000719a04e7710a1709d7b30237121c023450da512c00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9484,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be68697ec3450fecfef189ce70a05f2f289c6e8b000000000000000000000000be68697ec3450fecfef189ce70a05f2f289c6e8b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9485,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000256cd210943dc84c9164320a439c3e71c74527d5000000000000000000000000256cd210943dc84c9164320a439c3e71c74527d500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9486,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000079c7df7740e999872277fe97eb3f8c106ee2af4b00000000000000000000000079c7df7740e999872277fe97eb3f8c106ee2af4b000000000000000000000000000000000000000000000010965bef679745935200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9487,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003137f5c744eb1ad89501841aa556c50b02f953d90000000000000000000000003137f5c744eb1ad89501841aa556c50b02f953d900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9488,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd273f64246432fe8d73e88397b6b683b4e39bd1000000000000000000000000bd273f64246432fe8d73e88397b6b683b4e39bd100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9489,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b02dba56bcfa33564826aaf3c2a85b47e9f2c1c4000000000000000000000000b02dba56bcfa33564826aaf3c2a85b47e9f2c1c400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9490,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fe4d75e540d6706b85d887992187fea4be84de78000000000000000000000000fe4d75e540d6706b85d887992187fea4be84de7800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9491,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004da38517372d424636e81632cd991fdf437514170000000000000000000000004da38517372d424636e81632cd991fdf4375141700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9492,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006dd20eb7d91144f0fa2b2a001105ae9322db8e990000000000000000000000006dd20eb7d91144f0fa2b2a001105ae9322db8e9900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9493,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005db7f5fce4f251701d4c5dc398177c0318a75efe0000000000000000000000005db7f5fce4f251701d4c5dc398177c0318a75efe00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9494,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005fdbda741479644440c061f79d3c0e5982086ebb0000000000000000000000005fdbda741479644440c061f79d3c0e5982086ebb00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9495,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000010cf17d2b35f2acbb348ea89da5d184f3b5d2a9f00000000000000000000000010cf17d2b35f2acbb348ea89da5d184f3b5d2a9f00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9496,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f5654f35da5afc0a9a73021574830f79ad953d6d000000000000000000000000f5654f35da5afc0a9a73021574830f79ad953d6d000000000000000000000000000000000000000000000000014461965063196600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9497,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c427e9e0e014476a6351ed0608fa7c6e433cb550000000000000000000000008c427e9e0e014476a6351ed0608fa7c6e433cb5500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9498,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006b987ee8e3943b982d2c3e7e162a6ca99dd532210000000000000000000000006b987ee8e3943b982d2c3e7e162a6ca99dd5322100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9499,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fb5296a3df62e12af6f96ab7f7e83386964535fc000000000000000000000000fb5296a3df62e12af6f96ab7f7e83386964535fc00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9500,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c5f565848e3bbb1d616dcb1cc80b412e5ff12e45000000000000000000000000c5f565848e3bbb1d616dcb1cc80b412e5ff12e4500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9501,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a7fc63c64f4c8769919247d3dfcc16fa408cc3b0000000000000000000000002a7fc63c64f4c8769919247d3dfcc16fa408cc3b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9502,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008fdf7681d2f5ec9896df42075d884c6dc03669a30000000000000000000000008fdf7681d2f5ec9896df42075d884c6dc03669a300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9503,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be1bbd830083f371edbc41517781255427c5ea5a000000000000000000000000be1bbd830083f371edbc41517781255427c5ea5a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9504,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000026aefab14d61df7a3973160abfcf22145b2ab61000000000000000000000000026aefab14d61df7a3973160abfcf22145b2ab6100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9505,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002af88171fe9668210705ea5633ca48a1a8a36efe0000000000000000000000002af88171fe9668210705ea5633ca48a1a8a36efe00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9506,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008b6284f86b21575aaa4240f6852db428ad5c0d0a0000000000000000000000008b6284f86b21575aaa4240f6852db428ad5c0d0a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9508,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004805c22f5f813fc05c4d825290f33c228bbe8dc20000000000000000000000004805c22f5f813fc05c4d825290f33c228bbe8dc200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9511,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006b05e05aa636d41bab5cb58a6c80f7dddd6fc8a90000000000000000000000006b05e05aa636d41bab5cb58a6c80f7dddd6fc8a900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9512,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000493b6750f108726df8e60b082adf9a59472d784d000000000000000000000000493b6750f108726df8e60b082adf9a59472d784d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9513,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080c9f47a8e6be7da9cb8e5076fa3955a7b29873700000000000000000000000080c9f47a8e6be7da9cb8e5076fa3955a7b29873700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9515,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000014aa9f6dbfdda9dc79c6f456926ba9f6226381f000000000000000000000000014aa9f6dbfdda9dc79c6f456926ba9f6226381f00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9516,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e718661eea5cc11fcc4340430dec3b2c11fc4eaf000000000000000000000000e718661eea5cc11fcc4340430dec3b2c11fc4eaf00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9517,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cedf07b70896aa2f08af2828d8f82689d721c19b000000000000000000000000cedf07b70896aa2f08af2828d8f82689d721c19b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9518,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d5987d44e206af78e9aab666ca76d1cf963f1aa8000000000000000000000000d5987d44e206af78e9aab666ca76d1cf963f1aa800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9519,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080fc9e301517ef5cb59da70a9806a8613075619000000000000000000000000080fc9e301517ef5cb59da70a9806a8613075619000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9521,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da5f734c3c9a7c0370f1412a87ba2524e996c399000000000000000000000000da5f734c3c9a7c0370f1412a87ba2524e996c39900000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9522,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001cc25aca4516a33cd3f61515048498823e2391850000000000000000000000001cc25aca4516a33cd3f61515048498823e239185000000000000000000000000000000000000000000000000000a3e7a178476ab00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9523,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000007165efe18fbf79a3e8fdbf3211927ca32ad86bb50000000000000000000000000000000000000000000000006124fee993bc0000,,,1,true -9524,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f39dd7675baa0ba061659fdc44bafc6ebc14d71f000000000000000000000000f39dd7675baa0ba061659fdc44bafc6ebc14d71f000000000000000000000000000000000000000000000000000a6f5a049ab93f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9525,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cb5d817cfed6f47ebcdb8a1b0833552e999351bb000000000000000000000000cb5d817cfed6f47ebcdb8a1b0833552e999351bb0000000000000000000000000000000000000000000000000014a854db45241400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9526,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007cbe610551f4e48ceed8056ac217dcc3f4f4ca180000000000000000000000007cbe610551f4e48ceed8056ac217dcc3f4f4ca18000000000000000000000000000000000000000000000000003babaf0d76b5f100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9527,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8ddac677012e293b47ca5a00d2e33d6c8988c6e000000000000000000000000e8ddac677012e293b47ca5a00d2e33d6c8988c6e00000000000000000000000000000000000000000000000000cebc36cb66030900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9528,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000af7610346b2da6194780085e1629ca57e53f2b540000000000000000000000000000000000000000000000001feb3dd067660000,,,1,true -9530,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000376236b8277bbd26b7163caf4870691c37e751070000000000000000000000000000000000000000000000056bc75e2d63100000,,,1,true -9531,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000051a0e3e0fe5783f7c0d5c1003fc121cb9981183000000000000000000000000051a0e3e0fe5783f7c0d5c1003fc121cb9981183000000000000000000000000000000000000000000000000037318a1b6ea283400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9532,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e7e3d2e485520aa0af765aafc54f030d51729bd7000000000000000000000000e7e3d2e485520aa0af765aafc54f030d51729bd700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9533,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000009d685739feec6d10cef02889957386c876fbd1f00000000000000000000000009d685739feec6d10cef02889957386c876fbd1f0000000000000000000000000000000000000000000000000064b017ae72b8fc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9535,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3d8abfbd8069a8fb255b94c9c2ecdb04bd2f210000000000000000000000000d3d8abfbd8069a8fb255b94c9c2ecdb04bd2f21000000000000000000000000000000000000000000000000000815c23343f4d2000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x23886566fe0b30b38e015ae68fbc9958d29f46208ee3399c8ea9282907bc1f60,2022-06-10 03:25:18.000 UTC,0,true -9536,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000af25c239db4533c1958f823665db2e44cbf9c6f7000000000000000000000000af25c239db4533c1958f823665db2e44cbf9c6f700000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9537,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e75a3c620a1f1a1b8047e1f03083956b8781f715000000000000000000000000e75a3c620a1f1a1b8047e1f03083956b8781f715000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9538,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000382d96d6a2f7f32ca6292c35d7175fa6b7ba9da7000000000000000000000000382d96d6a2f7f32ca6292c35d7175fa6b7ba9da700000000000000000000000000000000000000000000000000034d6f1b212e8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9539,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000250249f3f5d3c6860bd880ee4af0a334e0a0cba4000000000000000000000000250249f3f5d3c6860bd880ee4af0a334e0a0cba4000000000000000000000000000000000000000000000000006d53dd79ffaeb600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9540,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000006f9f5be183eb34f447b39de0ecc55ebba219a2b00000000000000000000000006f9f5be183eb34f447b39de0ecc55ebba219a2b00000000000000000000000000000000000000000000000000254a5bde0f57a700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9541,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049214bf0a657c0d6cbc5f20526a563a6dca448f100000000000000000000000049214bf0a657c0d6cbc5f20526a563a6dca448f1000000000000000000000000000000000000000000000000003d909039944b1000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9542,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000019f372338364550b5fe17fb1c97852ecb08579ed00000000000000000000000019f372338364550b5fe17fb1c97852ecb08579ed00000000000000000000000000000000000000000000000000336cf0446c67eb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9543,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000056c8ed6d0e36b639544466381834e404615755d300000000000000000000000056c8ed6d0e36b639544466381834e404615755d3000000000000000000000000000000000000000000000000001cb671da4b663400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9544,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a7c6d9ae1371930c0b4856a71811174a6a92daa0000000000000000000000002a7c6d9ae1371930c0b4856a71811174a6a92daa0000000000000000000000000000000000000000000000000027425c7b19781000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9545,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003394a1ae60679c07a4af07c92d674818cb1c2ba60000000000000000000000003394a1ae60679c07a4af07c92d674818cb1c2ba60000000000000000000000000000000000000000000000000023cbdce95776b100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9546,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000014c963f01f369c96ffbadbd5209f016759f9209300000000000000000000000014c963f01f369c96ffbadbd5209f016759f920930000000000000000000000000000000000000000000000000668d2426581086300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9549,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e155396dfd335ef16dccfdc28c159ab92c88058c000000000000000000000000e155396dfd335ef16dccfdc28c159ab92c88058c00000000000000000000000000000000000000000000000000258000fc39382e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9550,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000687624745396900e2c942c4e32f10651615e294a000000000000000000000000687624745396900e2c942c4e32f10651615e294a0000000000000000000000000000000000000000000000000023b62c9bf7d68000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9551,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000095dc79b0ccb34cc6622df8282d77c03b63e0240700000000000000000000000095dc79b0ccb34cc6622df8282d77c03b63e02407000000000000000000000000000000000000000000000000001d2e1f2650c36000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9552,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008cd7b3cfd0dd527e21e491b49568e35dad44d0f30000000000000000000000008cd7b3cfd0dd527e21e491b49568e35dad44d0f3000000000000000000000000000000000000000000000000002300bf9a120a2000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9553,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d5abd30462e816da67b9a954b1961213bb8a2e92000000000000000000000000d5abd30462e816da67b9a954b1961213bb8a2e920000000000000000000000000000000000000000000000000026c8d31e70ab8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9554,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0ed794e70d438f2b1fe0d8d2f39152a7b408ba1000000000000000000000000b0ed794e70d438f2b1fe0d8d2f39152a7b408ba100000000000000000000000000000000000000000000000000200be6ef205c4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9556,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000f2fc892056888e637cb2d77f0cd03b05676dbd5e000000000000000000000000f2fc892056888e637cb2d77f0cd03b05676dbd5e0000000000000000000000000000000000000000000000000000000000cec93500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9557,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f2fc892056888e637cb2d77f0cd03b05676dbd5e000000000000000000000000f2fc892056888e637cb2d77f0cd03b05676dbd5e000000000000000000000000000000000000000000000000001e4c716cd16f8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9558,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000128c3c6d48434c8713ec00358c1ecf252319b4c7000000000000000000000000128c3c6d48434c8713ec00358c1ecf252319b4c7000000000000000000000000000000000000000000000000003d1521a9aab49000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9559,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000facf1ead3b42f6855175dd655a65f9ff5a48dc10000000000000000000000000facf1ead3b42f6855175dd655a65f9ff5a48dc10000000000000000000000000000000000000000000000000038ef0e78cab86e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9561,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000742cfe2a1fb49ae444c91b696c771a7b2f65e9f4000000000000000000000000742cfe2a1fb49ae444c91b696c771a7b2f65e9f40000000000000000000000000000000000000000000000000003e871b540c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9562,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ccc93c66c6e80bf3d68bc63f546cbb42ab4895d6000000000000000000000000ccc93c66c6e80bf3d68bc63f546cbb42ab4895d600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9563,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000083df74e7114079b98e69089edcdc8de377fb7cb000000000000000000000000083df74e7114079b98e69089edcdc8de377fb7cb000000000000000000000000000000000000000000000000000fa6ad8a4d4788200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9564,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e370c9c93014ca879da928274324f0253cde8490000000000000000000000002e370c9c93014ca879da928274324f0253cde849000000000000000000000000000000000000000000000000007044fb523604ae00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1c4ac2986b29b5ec2454a09ead225ca65a949314999f99783e099d37d8249aff,2022-05-20 09:07:52.000 UTC,0,true -9567,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ee11be943141c5073680cbc587aa60c4c8dd78b0000000000000000000000002ee11be943141c5073680cbc587aa60c4c8dd78b0000000000000000000000000000000000000000000000000058d15e1762800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9569,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000025b99f078903f7702d3f44b1f8a4fe88bc5d103600000000000000000000000025b99f078903f7702d3f44b1f8a4fe88bc5d103600000000000000000000000000000000000000000000000000c9b83e3a31027900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9571,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000075e094cee2ddf4ee04f782d9670eb6dce88dcc9800000000000000000000000075e094cee2ddf4ee04f782d9670eb6dce88dcc98000000000000000000000000000000000000000000000000001aa535d3d0c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9573,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e75a3c620a1f1a1b8047e1f03083956b8781f715000000000000000000000000e75a3c620a1f1a1b8047e1f03083956b8781f715000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9576,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e75a3c620a1f1a1b8047e1f03083956b8781f715000000000000000000000000e75a3c620a1f1a1b8047e1f03083956b8781f715000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9577,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000728b6672bceee270e92637bae8bacb54a9b32888000000000000000000000000728b6672bceee270e92637bae8bacb54a9b3288800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9578,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094054865f83f9df3fae7d4b8e6b08b7ff420b0e200000000000000000000000094054865f83f9df3fae7d4b8e6b08b7ff420b0e2000000000000000000000000000000000000000000000000007c00e7bfc5e7a500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9579,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1b3aeb7afd5642b1d20d00636b7c70163c3a15d000000000000000000000000f1b3aeb7afd5642b1d20d00636b7c70163c3a15d000000000000000000000000000000000000000000000000004360a091733e8c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9580,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cad3c3d957bcf6f3a3af9caaaadd2804ab132928000000000000000000000000cad3c3d957bcf6f3a3af9caaaadd2804ab13292800000000000000000000000000000000000000000000000000263d804fb3a83b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9585,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000076b68dc2509a483223256d56877bdc5c3ca4bce000000000000000000000000076b68dc2509a483223256d56877bdc5c3ca4bce000000000000000000000000000000000000000000000000003eb7f2a8b2c89200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9587,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000006bd996abee08d068ea284787a1b66ddf4145072a0000000000000000000000006bd996abee08d068ea284787a1b66ddf4145072a000000000000000000000000000000000000000000000000000000001f40a15b00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9588,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000ba7a90a128eeb1d74ea2152ec2d808b30ebead13000000000000000000000000ba7a90a128eeb1d74ea2152ec2d808b30ebead1300000000000000000000000000000000000000000000000000000000401d9de500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9589,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000076b68dc2509a483223256d56877bdc5c3ca4bce000000000000000000000000076b68dc2509a483223256d56877bdc5c3ca4bce0000000000000000000000000000000000000000000000000011f86c7b3f8d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9591,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008bde2372200e80d22212dc27b036080e929b779c0000000000000000000000008bde2372200e80d22212dc27b036080e929b779c00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xa38959380281110ffdab2118246dd993f44573b0a53fe156629d4efe8ab50d32,2021-11-21 04:18:40.000 UTC,0,true -9596,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007934b4344d6308dc7aecd2f8cfe006ed875504220000000000000000000000007934b4344d6308dc7aecd2f8cfe006ed87550422000000000000000000000000000000000000000000000000009c51c4521e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9598,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bac76b4c06d7c642601e995a68cb5186ee3154e6000000000000000000000000bac76b4c06d7c642601e995a68cb5186ee3154e600000000000000000000000000000000000000000000000000e62df32ebf295000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9599,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a82446df8eec33acc2a88cf61044f0ce9e561077000000000000000000000000a82446df8eec33acc2a88cf61044f0ce9e56107700000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9600,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000086beae41e798b3f1114d6e26e944c5c604c32ac600000000000000000000000086beae41e798b3f1114d6e26e944c5c604c32ac60000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9612,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc98abbbe01f19826bdb72953a6ec712b25f0aa3000000000000000000000000bc98abbbe01f19826bdb72953a6ec712b25f0aa300000000000000000000000000000000000000000000000003782dace9d9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9623,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dafe428c48841ffa6166e3695f1e0572db988f02000000000000000000000000dafe428c48841ffa6166e3695f1e0572db988f0200000000000000000000000000000000000000000000000000318bb61639880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9668,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b5bbd1f0b42b1c40e13c83d8918b81616ee4c683000000000000000000000000b5bbd1f0b42b1c40e13c83d8918b81616ee4c683000000000000000000000000000000000000000000000000004c41434dc4336d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9670,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b2dac809cc20f01b1933d8a1d9317bfd971f82e1000000000000000000000000b2dac809cc20f01b1933d8a1d9317bfd971f82e1000000000000000000000000000000000000000000000000003c5b1b9cc217c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9681,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007b619744e17158dc2a53aec56c734f9195007f490000000000000000000000007b619744e17158dc2a53aec56c734f9195007f49000000000000000000000000000000000000000000000000000d415a2ee721c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9696,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000defb5b606ec1a3da6cc145f6498748cc456df21b000000000000000000000000defb5b606ec1a3da6cc145f6498748cc456df21b000000000000000000000000000000000000000000000000004ea69ae416c75d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9700,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c167064cb32f4923ebe2d1c47d621af2c73213fc000000000000000000000000c167064cb32f4923ebe2d1c47d621af2c73213fc000000000000000000000000000000000000000000000000008f7a1fcefbfa7e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9714,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004f06ed24667f0bb586730c20fb968f9303368fee0000000000000000000000004f06ed24667f0bb586730c20fb968f9303368fee0000000000000000000000000000000000000000000000000046507a8b4360fd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9715,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007cf9977c3907624da58d69cfdc7f86f5552ddc2b0000000000000000000000007cf9977c3907624da58d69cfdc7f86f5552ddc2b00000000000000000000000000000000000000000000000000daf11b2f3f1f8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9716,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aab1db5591a190242210b78f8895c9929d0a9efb000000000000000000000000aab1db5591a190242210b78f8895c9929d0a9efb0000000000000000000000000000000000000000000000000049e85e865c176700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9718,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009e9d7531e717da3aa7cf6fb2f059a9e7ca4dd1760000000000000000000000009e9d7531e717da3aa7cf6fb2f059a9e7ca4dd176000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9720,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c64263d33d2a07d23976904b9d2dcf83f7270f50000000000000000000000008c64263d33d2a07d23976904b9d2dcf83f7270f500000000000000000000000000000000000000000000000000a798a47c4a6c6b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x4afeb4c2cf6e213ee49a5d1c0093b553397821c2b19d67c2a9a2e03af0fd3c94,2021-12-20 09:25:41.000 UTC,0,true -9721,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000064f99d8d532e2418a29199b84bc41cf702c6fc3300000000000000000000000064f99d8d532e2418a29199b84bc41cf702c6fc3300000000000000000000000000000000000000000000000000aa5c5f3a544f9100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9722,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5afaa33e1557dd72c2187557c4d6820c4f5467f000000000000000000000000e5afaa33e1557dd72c2187557c4d6820c4f5467f0000000000000000000000000000000000000000000000000039ccd125c9649000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9723,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000002b26975022d55b218ef2b29df3f8d3047102c56b0000000000000000000000002b26975022d55b218ef2b29df3f8d3047102c56b0000000000000000000000000000000000000000000000000000000001edbb4100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9724,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000154e0f9554170e39447b72c6f4230dbfdc6afc56000000000000000000000000154e0f9554170e39447b72c6f4230dbfdc6afc5600000000000000000000000000000000000000000000000000200b5bc521d80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9729,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000185fdf7b36c6a002d0803c37d2597ca9906b62f5000000000000000000000000185fdf7b36c6a002d0803c37d2597ca9906b62f5000000000000000000000000000000000000000000000000004e465dc6611a8700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9730,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b12cc021009006cc87da206394a4951a1c7d5aef000000000000000000000000b12cc021009006cc87da206394a4951a1c7d5aef00000000000000000000000000000000000000000000000000a754fdef82af6800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9731,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000924b569b23935a0bf7a422594c94a046fa0e3491000000000000000000000000924b569b23935a0bf7a422594c94a046fa0e34910000000000000000000000000000000000000000000000000015b04ff816429000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9732,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008fe1636a434d139fa7bc80552b966af6e4b417f40000000000000000000000008fe1636a434d139fa7bc80552b966af6e4b417f400000000000000000000000000000000000000000000000000cfb9c3bdbac10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x3229f36fed9ae97be04c873a9c51dab612f6b5ba0f98673c37354789aaeda025,2022-03-24 10:32:12.000 UTC,0,true -9733,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c61edc942bb6a5fca34a207d1d08e2caccbb93c0000000000000000000000002c61edc942bb6a5fca34a207d1d08e2caccbb93c000000000000000000000000000000000000000000000000001468190b49c47300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9735,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca84c49bd0f4fa84b5a16a3f30a6754c312d079a000000000000000000000000ca84c49bd0f4fa84b5a16a3f30a6754c312d079a000000000000000000000000000000000000000000000000004e180f2ca67d6a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9737,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000079dafd0da626f23a66e63fe06a0f2b97781f819800000000000000000000000079dafd0da626f23a66e63fe06a0f2b97781f81980000000000000000000000000000000000000000000000000018e3a3ee86298000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9738,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000452008779b6bd5b2bcdd113d1e3f10c5e27b5cf8000000000000000000000000452008779b6bd5b2bcdd113d1e3f10c5e27b5cf800000000000000000000000000000000000000000000000000721440adfa9b8100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9739,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d1b71a98d689ad670a2966837f83740cf5b4d600000000000000000000000007d1b71a98d689ad670a2966837f83740cf5b4d600000000000000000000000000000000000000000000000000045b239dd41825100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9740,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca89925c2693cf6e2c37572ee3ceec485ce642fb000000000000000000000000ca89925c2693cf6e2c37572ee3ceec485ce642fb00000000000000000000000000000000000000000000000000a8ccc77fe5b5bc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9742,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003742799e12a6850e9ec9f8bf4db4461de958cc920000000000000000000000003742799e12a6850e9ec9f8bf4db4461de958cc9200000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9743,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007018c432bd81a91b3b8deaf5408547efe783548f0000000000000000000000007018c432bd81a91b3b8deaf5408547efe783548f0000000000000000000000000000000000000000000000000050a53a9589dffe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9744,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002abee2293455f0b6803a8326ab6d746c721d78c80000000000000000000000002abee2293455f0b6803a8326ab6d746c721d78c8000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x76c2e173a17edda1ca84e6e1489c5618fef7a84fb08d543b95128ac9889f7247,2022-03-06 10:28:43.000 UTC,0,true -9745,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000871f95a4966be1f2dd7d8fb1a32f450b51e74ecb000000000000000000000000871f95a4966be1f2dd7d8fb1a32f450b51e74ecb000000000000000000000000000000000000000000000000000000001265f7df00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9747,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e1037ac10790f8514f7540e05ccae6f9d41f2150000000000000000000000000e1037ac10790f8514f7540e05ccae6f9d41f21500000000000000000000000000000000000000000000000002b9c5eeafb4bd0a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xdc657337ce083d3c3602c1dd013c1cf9c696119abe50a64a0249e24d7a98cf18,2022-06-11 20:24:59.000 UTC,0,true -9748,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002fd55370391e5e099aa300a587d93c35dd8986b40000000000000000000000002fd55370391e5e099aa300a587d93c35dd8986b4000000000000000000000000000000000000000000000000009c51c4521e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9749,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000074a279a3fcfa3b078413277026d82acdf2eac5c700000000000000000000000074a279a3fcfa3b078413277026d82acdf2eac5c7000000000000000000000000000000000000000000000000004c3c5c248591b500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9750,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d126b531e39f1838db27bc88e861a76612b96970000000000000000000000008d126b531e39f1838db27bc88e861a76612b96970000000000000000000000000000000000000000000000000029110738fc7ac200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9751,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000053fad1623bc32399dcabcc2164e57e1bc549593d00000000000000000000000053fad1623bc32399dcabcc2164e57e1bc549593d00000000000000000000000000000000000000000000000004c9afac0f82800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9752,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eb3153798373cf5f13a97e34fc72e1e3170e15d2000000000000000000000000eb3153798373cf5f13a97e34fc72e1e3170e15d2000000000000000000000000000000000000000000000000004cb159054ba2d100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9756,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000064b7fcc8c17540139bdd84d00c7261035602cb6600000000000000000000000064b7fcc8c17540139bdd84d00c7261035602cb66000000000000000000000000000000000000000000000000001d24762cb31c6200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9757,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004af78ad4d68ac32bde6ad79849e4356e530879100000000000000000000000004af78ad4d68ac32bde6ad79849e4356e530879100000000000000000000000000000000000000000000000000618c3a423e005200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9758,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007c0ce17de0c79c59b40ffcc024e56cf6121440ae0000000000000000000000007c0ce17de0c79c59b40ffcc024e56cf6121440ae000000000000000000000000000000000000000000000000004ef46a8345646300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9762,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000abd8cee5a93265fc7d1f9e45f0169294d01b8802000000000000000000000000abd8cee5a93265fc7d1f9e45f0169294d01b8802000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9768,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004b4f9e20415833c250e6a64a364e7126b25241b30000000000000000000000004b4f9e20415833c250e6a64a364e7126b25241b300000000000000000000000000000000000000000000000000847a30ee1ce2cf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9770,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002dfddc72b4a0b6027282539ed22e6239268c1cfb0000000000000000000000002dfddc72b4a0b6027282539ed22e6239268c1cfb000000000000000000000000000000000000000000000000377a8ecd65cb520000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9771,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aae4b5f8eb2e6aaaf6ee98072e1c58826f75e261000000000000000000000000aae4b5f8eb2e6aaaf6ee98072e1c58826f75e261000000000000000000000000000000000000000000000000001ff973cafa800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9772,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b13a4cf595b46f38ce0090bf84add5acea5ff227000000000000000000000000b13a4cf595b46f38ce0090bf84add5acea5ff22700000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xeae9cc2c256947f8f9483ae7ca13026e4026f273c5ddc4e0f20c82d435ac58da,2022-07-30 11:37:12.000 UTC,0,true -9775,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000063bb1caab997a6b9743e62034d9ccc7fda7359f100000000000000000000000063bb1caab997a6b9743e62034d9ccc7fda7359f100000000000000000000000000000000000000000000000000207e9515942c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9781,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6b4a5c74c29dafbf671fd931dfb26fc0a5adf8a000000000000000000000000b6b4a5c74c29dafbf671fd931dfb26fc0a5adf8a00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9782,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061a0fc420ae17760e328f5713b87d812dca163c300000000000000000000000061a0fc420ae17760e328f5713b87d812dca163c300000000000000000000000000000000000000000000000000b8882dfd8be03a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9783,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008335bff7ce4cdbd37baf0aae5bddbd58ab0f68540000000000000000000000008335bff7ce4cdbd37baf0aae5bddbd58ab0f6854000000000000000000000000000000000000000000000000014941aac1ec2e6f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9784,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a2a343bb1f29a1ef123fa358a9f61c42ab6e4b70000000000000000000000000a2a343bb1f29a1ef123fa358a9f61c42ab6e4b7000000000000000000000000000000000000000000000000003a3d931158076800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9785,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d14141da76488f5bb17e54ebb8ed4538fd2b82c8000000000000000000000000d14141da76488f5bb17e54ebb8ed4538fd2b82c80000000000000000000000000000000000000000000000000039925ccdc0a49100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9786,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ef9318a615dc080033fb5f51a6ecbba3327ae1b0000000000000000000000004ef9318a615dc080033fb5f51a6ecbba3327ae1b000000000000000000000000000000000000000000000000003b19673e1ba01d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9787,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003900971c3ce486b9506303f821d04f7c2b769b530000000000000000000000003900971c3ce486b9506303f821d04f7c2b769b53000000000000000000000000000000000000000000000000003b7504c181ca4200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9789,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6919543a40d33a39ddf109372f2128b34b46727000000000000000000000000c6919543a40d33a39ddf109372f2128b34b46727000000000000000000000000000000000000000000000000029d3071634e777500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2a60471747c33d39f7f63c90ef7d4aa6395a1f4f29bc172b8ee4766c71d90e65,2022-02-13 04:59:30.000 UTC,0,true -9790,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000195f61d13576f2ec92c812dc01faafd6433b6af7000000000000000000000000195f61d13576f2ec92c812dc01faafd6433b6af700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9792,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000058a168e0ad6fb41bee9e89e9d1762fef50d6637c00000000000000000000000058a168e0ad6fb41bee9e89e9d1762fef50d6637c00000000000000000000000000000000000000000000000000ad18258d27dd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9793,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006bf3d2c240ff569e11e75dfb2c42b57b7ae8be9d0000000000000000000000006bf3d2c240ff569e11e75dfb2c42b57b7ae8be9d00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x06c49a403db079de4a3e5b741729cbb94e76475333f5fe8b4da017dc81894821,2021-12-09 01:11:52.000 UTC,0,true -9794,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d62f72c8d8809325cc94b43d8f5c50f306e8318e000000000000000000000000d62f72c8d8809325cc94b43d8f5c50f306e8318e000000000000000000000000000000000000000000000000003a715e7281d30d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9795,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fdbbfb0fe2986672af97eca0e797d76a0bbf35c9000000000000000000000000fdbbfb0fe2986672af97eca0e797d76a0bbf35c9000000000000000000000000000000000000000000000000145d94a4694b6ff100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9796,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d9e65ae225f20d29de51ce8d5998d9456f80b9c4000000000000000000000000d9e65ae225f20d29de51ce8d5998d9456f80b9c4000000000000000000000000000000000000000000000000005aba364c1cdc8600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9798,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000007ec4ce8860cb6c4516675e494884369ca874ba6c0000000000000000000000007ec4ce8860cb6c4516675e494884369ca874ba6c0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9799,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000e18d66ffab7ef9a44579288c39854b42f03edab2000000000000000000000000e18d66ffab7ef9a44579288c39854b42f03edab20000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9800,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000293761f789b5fa61d0b871cf603ece3a73942ac6000000000000000000000000293761f789b5fa61d0b871cf603ece3a73942ac60000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9801,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000008a88ccb818702afdd390b7e7938377d9afb9e3200000000000000000000000008a88ccb818702afdd390b7e7938377d9afb9e32000000000000000000000000000000000000000000000000009b6e64a8ec6000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9802,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ad9a89e66ba5c1af450a304829401cb5545b92bc000000000000000000000000ad9a89e66ba5c1af450a304829401cb5545b92bc000000000000000000000000000000000000000000000000015ddaddcce1da0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9804,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000c101a05d6aea4f14ea0e303c22fe10556f28a205000000000000000000000000c101a05d6aea4f14ea0e303c22fe10556f28a2050000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9806,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000074515748caf5cc74b1b86f5baaa25c2f5652daff00000000000000000000000074515748caf5cc74b1b86f5baaa25c2f5652daff0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9807,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000007bdf3a24169303cfa2fcdcac49013f3c06eaad8b0000000000000000000000007bdf3a24169303cfa2fcdcac49013f3c06eaad8b0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9808,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000558fb9800de9453a5f4c7ac2d2398e42d1bc7351000000000000000000000000558fb9800de9453a5f4c7ac2d2398e42d1bc73510000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9809,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000a69acd8419e3b3a8a57ccadf69fb65fa21a33fb0000000000000000000000000a69acd8419e3b3a8a57ccadf69fb65fa21a33fb00000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9810,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000231d24f024d074cec551e768a17d4ff246575f6b000000000000000000000000231d24f024d074cec551e768a17d4ff246575f6b0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9811,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000001059aaed4254afe9a6e88ce5c089683171b59eff0000000000000000000000001059aaed4254afe9a6e88ce5c089683171b59eff0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9812,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000072a7b09495bb6e8309b8e76460a38a425a62354100000000000000000000000072a7b09495bb6e8309b8e76460a38a425a6235410000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9813,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000f31364e33ef5b11a69877df8e173e0392e288da2000000000000000000000000f31364e33ef5b11a69877df8e173e0392e288da20000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9814,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000008a1c15068ef08ea8abcfdc158fb60230f74fdb6c0000000000000000000000008a1c15068ef08ea8abcfdc158fb60230f74fdb6c0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9815,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000026f5901547f837f0b987d4f9ae2984560f4ae29b00000000000000000000000026f5901547f837f0b987d4f9ae2984560f4ae29b0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9816,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000004e0cc752ca23f5a6c99fd13cb86654396cf0e68e0000000000000000000000004e0cc752ca23f5a6c99fd13cb86654396cf0e68e0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9817,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000002c58196a9b8916f888771917cb219dd6eaf801010000000000000000000000002c58196a9b8916f888771917cb219dd6eaf8010100000000000000000000000000000000000000000000000000000000017a818900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9818,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bb9bc462592676f5911da0bad269bd11a2212b55000000000000000000000000bb9bc462592676f5911da0bad269bd11a2212b5500000000000000000000000000000000000000000000000000413519b61cfc0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9821,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000918bb2298c60955053f64833b4a804fcdb8f29ed000000000000000000000000918bb2298c60955053f64833b4a804fcdb8f29ed0000000000000000000000000000000000000000000000000000000002a5352f00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9822,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b23a7c2525df85f8be881da6bfa7ee0bb902def8000000000000000000000000b23a7c2525df85f8be881da6bfa7ee0bb902def800000000000000000000000000000000000000000000000006d48d9510a7763700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x6c8834779362cf17f2a53419a5bda8b0364dd537c07ce50cbc271c5290eff35c,2022-11-01 17:23:11.000 UTC,0,true -9823,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000626dcaae150e6240b5b24413cfd6b2aeb8ad443c000000000000000000000000626dcaae150e6240b5b24413cfd6b2aeb8ad443c00000000000000000000000000000000000000000000000000a8c3f5794ec74400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9824,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000875d0e316c50b4d167167335e539a8579ddff934000000000000000000000000875d0e316c50b4d167167335e539a8579ddff93400000000000000000000000000000000000000000000000000aa89a370bee2d300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9825,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005067823770154868970ce35a50782c35d0a4e76d0000000000000000000000005067823770154868970ce35a50782c35d0a4e76d000000000000000000000000000000000000000000000000006d60881ba3cd3e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9826,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000317890de9ee2d5987e30662b3cb640cffce62ce6000000000000000000000000317890de9ee2d5987e30662b3cb640cffce62ce6000000000000000000000000000000000000000000000000002898f52107e04000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9832,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d450c85676f20271b773903cf3fec32e94086118000000000000000000000000d450c85676f20271b773903cf3fec32e94086118000000000000000000000000000000000000000000000000001c46c72808cd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9842,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005f4148dffca80f4c66c65d2a3c0d3342f20a313b0000000000000000000000005f4148dffca80f4c66c65d2a3c0d3342f20a313b000000000000000000000000000000000000000000000000005543df729c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9843,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005f4148dffca80f4c66c65d2a3c0d3342f20a313b0000000000000000000000005f4148dffca80f4c66c65d2a3c0d3342f20a313b00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9846,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000228bf23ca1a080c0cb564bd2a074a8426de15247000000000000000000000000228bf23ca1a080c0cb564bd2a074a8426de15247000000000000000000000000000000000000000000000000000833de5811c0c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9847,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000004935d32f454085a3de3766e48b5cf0b85c107531000000000000000000000000000000000000000000000001d6db934fba36c057,,,1,true -9849,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000057bc04ca8608bc33f7d5486edbb6876f88eb700d000000000000000000000000000000000000000000000018c4c62833642554eb,,,1,true -9850,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008ad5918400a49fe9c2f515800fed7f4bb48bfeee0000000000000000000000008ad5918400a49fe9c2f515800fed7f4bb48bfeee00000000000000000000000000000000000000000000000002bbaeb4363fcb4700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9852,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000095814996f2d2ab5882debca4c7d37b9f3a53bac800000000000000000000000095814996f2d2ab5882debca4c7d37b9f3a53bac800000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9854,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055d36e1644a4db37c57ba133d127a7216b1f19b400000000000000000000000055d36e1644a4db37c57ba133d127a7216b1f19b400000000000000000000000000000000000000000000000000051eef581dc04900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9857,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000557007505b53a399a59a93509673fdc5a3dc4540000000000000000000000000557007505b53a399a59a93509673fdc5a3dc454000000000000000000000000000000000000000000000000005e87cb3076bb0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9860,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d36663aea03c3cdf0d508595659fa0524e2cf5b0000000000000000000000002d36663aea03c3cdf0d508595659fa0524e2cf5b000000000000000000000000000000000000000000000000004d181f37b9773400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x8dbbbd889ce1267443056a06fafb779d6785459c09ac9c30a5eccd8de5823ec2,2022-05-20 12:18:01.000 UTC,0,true -9861,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c8882b1bfa6cdd7dcc065f6b86450992ce679190000000000000000000000004c8882b1bfa6cdd7dcc065f6b86450992ce6791900000000000000000000000000000000000000000000000003782dace9d9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x69406854f4a0e24ef562734edad82515d5abb36575817f2bc82bf64f3ddcf746,2022-03-15 05:51:00.000 UTC,0,true -9864,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000062725eac2bd3d2a1f3ac17e41c4f94dfbd47c22c00000000000000000000000062725eac2bd3d2a1f3ac17e41c4f94dfbd47c22c0000000000000000000000000000000000000000000000000002d79883d2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9869,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000944f9f9b31f4de729b60e2c0b89de7cbdd5ac878000000000000000000000000944f9f9b31f4de729b60e2c0b89de7cbdd5ac87800000000000000000000000000000000000000000000000015cccfb275f46a8700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf28b5ea051b37a504078d77c13a88086a29aa56f7d1f9a7d98cc40e2ae4fb3c3,2021-12-17 15:10:05.000 UTC,0,true -9871,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006df9525658fd2c864fab747274579f5b0c1c11b00000000000000000000000006df9525658fd2c864fab747274579f5b0c1c11b00000000000000000000000000000000000000000000000000297aa4a74e43b2d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9872,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0568c83470e77f4c5891d190361e4340f954a0d000000000000000000000000c0568c83470e77f4c5891d190361e4340f954a0d000000000000000000000000000000000000000000000000000730b1113de0e000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9873,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000019ba331d6adfc46e829ea33fa2a24ee87d7a676d00000000000000000000000019ba331d6adfc46e829ea33fa2a24ee87d7a676d000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9874,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000001ec5eae8306a271e7b2a0054f46455264217c5ba000000000000000000000000000000000000000000000000285d3b2dc5a86e3f,,,1,true -9875,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003132c2259c22cf2b60d104436c90150edca037690000000000000000000000003132c2259c22cf2b60d104436c90150edca037690000000000000000000000000000000000000000000000000051bda6a156a0f500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9876,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003132c2259c22cf2b60d104436c90150edca037690000000000000000000000003132c2259c22cf2b60d104436c90150edca03769000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9877,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000fcc8ec856092f49c640ab945d7f842655fc30b50000000000000000000000000fcc8ec856092f49c640ab945d7f842655fc30b50000000000000000000000000000000000000000000000000001ff973cafa80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9878,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c943aecd667d9239b7b0ce7f64747fab323f90a2000000000000000000000000c943aecd667d9239b7b0ce7f64747fab323f90a2000000000000000000000000000000000000000000000000003fefe8bb292e4800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9880,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000f42cfe525388486554f8fc3c2ea2ba3414c4f16c000000000000000000000000f42cfe525388486554f8fc3c2ea2ba3414c4f16c0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9885,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ccf7a254f35c89468c0884a31de5eedaf6a5771b000000000000000000000000ccf7a254f35c89468c0884a31de5eedaf6a5771b000000000000000000000000000000000000000000000000004a7f36fee5300700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9888,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000698fa8dfa821489cf4b69225347f28a56e3c3129000000000000000000000000698fa8dfa821489cf4b69225347f28a56e3c3129000000000000000000000000000000000000000000000000000e535e8c64602700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9889,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004199181f2510ec0486a40611042fab40492548600000000000000000000000004199181f2510ec0486a40611042fab404925486000000000000000000000000000000000000000000000000004559b9ca9423a900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9890,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004f612dcbca32bb3943de530d21d21970380cd39d0000000000000000000000004f612dcbca32bb3943de530d21d21970380cd39d00000000000000000000000000000000000000000000000000fb58f763584cdf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9891,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b67fbf8c8d51253e4b3a943fe6e095468345b39e000000000000000000000000b67fbf8c8d51253e4b3a943fe6e095468345b39e000000000000000000000000000000000000000000000000003577f60f1d244000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9893,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001ec5eae8306a271e7b2a0054f46455264217c5ba0000000000000000000000001ec5eae8306a271e7b2a0054f46455264217c5ba0000000000000000000000000000000000000000000000000092a9f8908034ce00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9895,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be1c5ae29a2eb9548db9a8625f89e762f323a8a6000000000000000000000000be1c5ae29a2eb9548db9a8625f89e762f323a8a600000000000000000000000000000000000000000000000000277a5f981b9c2500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9896,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ad769178ffff88945f175317b0e57ed9e7a5a680000000000000000000000000ad769178ffff88945f175317b0e57ed9e7a5a6800000000000000000000000000000000000000000000000000038ced1ba29c77600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9897,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d09418a23be24ad2f17192920df37f182629d269000000000000000000000000d09418a23be24ad2f17192920df37f182629d269000000000000000000000000000000000000000000000000003b41dae10709f600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9899,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000bab67a3e542138f0562b5ce572cd85ad14232ee0000000000000000000000000bab67a3e542138f0562b5ce572cd85ad14232ee0000000000000000000000000000000000000000000000000031e43d1bedb23a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9900,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004dd8a7631842772f42d5a54ac018143757b7790d0000000000000000000000004dd8a7631842772f42d5a54ac018143757b7790d0000000000000000000000000000000000000000000000000006110952cfec8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9902,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f70b585acf0030bdd393239f54bffcad1ea14f50000000000000000000000008f70b585acf0030bdd393239f54bffcad1ea14f5000000000000000000000000000000000000000000000000002613554619446000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9906,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000734d784f7ce1e164807785e2ba2425fae40c1da6000000000000000000000000734d784f7ce1e164807785e2ba2425fae40c1da600000000000000000000000000000000000000000000000000acbe17d340d70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9908,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a333c62787d3173395fb8bc7fb898cb17063caf0000000000000000000000006a333c62787d3173395fb8bc7fb898cb17063caf00000000000000000000000000000000000000000000000000181db7b8374a6300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9910,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006264e4eab94e93ee2afa9a47e689ce00cecd3f610000000000000000000000006264e4eab94e93ee2afa9a47e689ce00cecd3f61000000000000000000000000000000000000000000000000003d90e31830ab9800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9912,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000783f7a1a160e75d88eb08c44c47144b87a22a3ba000000000000000000000000783f7a1a160e75d88eb08c44c47144b87a22a3ba0000000000000000000000000000000000000000000000000045866f0f6b6ec800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9913,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a40eb870dcf533d4dc097c3d87aafe9f64490a10000000000000000000000004a40eb870dcf533d4dc097c3d87aafe9f64490a10000000000000000000000000000000000000000000000000214e8348c4f000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9914,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdb8e2cb7e7af95ca2e9c327ce255d1f92e19efb000000000000000000000000bdb8e2cb7e7af95ca2e9c327ce255d1f92e19efb0000000000000000000000000000000000000000000000000100a8ccf26d254f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9915,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e816691000000000000000000000000092840aee0f4659a089d09572d1b219bcd540850000000000000000000000000092840aee0f4659a089d09572d1b219bcd540850000000000000000000000000000000000000000000000000021d8aa85d3edb4e00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9916,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ee44b8e9c0f7238887220564da32afee8ce92b08000000000000000000000000ee44b8e9c0f7238887220564da32afee8ce92b08000000000000000000000000000000000000000000000000003a89fb6d5a0cee00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9917,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005937626ef988f82973de5c57bd389b86c113a3c20000000000000000000000005937626ef988f82973de5c57bd389b86c113a3c2000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9918,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004484fdb3a9d3973cd6d250b6d22608509b01d7920000000000000000000000004484fdb3a9d3973cd6d250b6d22608509b01d792000000000000000000000000000000000000000000000000001597bcb23bf69400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9919,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a54691936d4330435ed0f388e191df34499e7410000000000000000000000000a54691936d4330435ed0f388e191df34499e74100000000000000000000000000000000000000000000000000170c66cfc69dbd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9920,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b67620e8c9e19592b616942f895153e2dcf9ccb6000000000000000000000000b67620e8c9e19592b616942f895153e2dcf9ccb60000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5bedd996786147d19805e9cc6e5501e2e0b2b9c3b5940088a2ea14a6809c8460,2021-12-12 02:10:02.000 UTC,0,true -9921,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b1eebc9ad0f4df141ef429bd0d7fdb0de9e4120c000000000000000000000000b1eebc9ad0f4df141ef429bd0d7fdb0de9e4120c000000000000000000000000000000000000000000000000001310c8ba769fc500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9923,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e32a1b6a0947b7843b541b0d2ff6c99a41e80b8f000000000000000000000000e32a1b6a0947b7843b541b0d2ff6c99a41e80b8f0000000000000000000000000000000000000000000000000048f46308111e1200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9924,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f47f60cb5426f63a8dd3786387742c2c49ad96e3000000000000000000000000f47f60cb5426f63a8dd3786387742c2c49ad96e300000000000000000000000000000000000000000000000000002acc90c1992600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9925,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7faec15d7da6f3d67ce27c6fd7236877f0ae95c000000000000000000000000c7faec15d7da6f3d67ce27c6fd7236877f0ae95c0000000000000000000000000000000000000000000000000005ca574c3c7a5000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9926,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000429c92eedc46e27bd1a6aa5da61c22255390f6b1000000000000000000000000429c92eedc46e27bd1a6aa5da61c22255390f6b1000000000000000000000000000000000000000000000000005dc15917e7567100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9927,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bfa4042acf723c60d9e873dd884ae8760fd6b620000000000000000000000000bfa4042acf723c60d9e873dd884ae8760fd6b620000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9928,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007daa0dcf42e969e407449d4c869f862f8d361b270000000000000000000000007daa0dcf42e969e407449d4c869f862f8d361b27000000000000000000000000000000000000000000000000004058d01d56115c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9930,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c861d1eeea4b595603621e967fcd9887a72a74a9000000000000000000000000c861d1eeea4b595603621e967fcd9887a72a74a90000000000000000000000000000000000000000000000000017d2e1d192e95600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9931,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005b8c68e6a69cf500675ae2f6c1f6816bd5a8788f0000000000000000000000005b8c68e6a69cf500675ae2f6c1f6816bd5a8788f000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9932,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b25f162913c84f94f23a9f0e89ed294ef4024871000000000000000000000000b25f162913c84f94f23a9f0e89ed294ef40248710000000000000000000000000000000000000000000000000028683e679e536300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9933,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000000ecd428e33ed22b060625e7649ab0ed274bad9200000000000000000000000000ecd428e33ed22b060625e7649ab0ed274bad920000000000000000000000000000000000000000000000000047153bae43ffc600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9935,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000025a0452f00529d7471ca0941ffc58c52c500d6ce00000000000000000000000025a0452f00529d7471ca0941ffc58c52c500d6ce00000000000000000000000000000000000000000000000000448f0cab58e8ae00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9936,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080ebc88a66c217ad08ebd62476af0ebb00512bc700000000000000000000000080ebc88a66c217ad08ebd62476af0ebb00512bc7000000000000000000000000000000000000000000000000001c208dc050b2e300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9937,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000001d754f2a403bf165aa04aff1940176581263ba300000000000000000000000001d754f2a403bf165aa04aff1940176581263ba30000000000000000000000000000000000000000000000000194df65be4a7ee100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9938,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009c1a9cf8b192359795361e22ec22a18a1569a2780000000000000000000000009c1a9cf8b192359795361e22ec22a18a1569a27800000000000000000000000000000000000000000000000001a8697b3528344e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9939,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ddd57e2a98cdd576e73c5e86c56b34e3d94a2158000000000000000000000000ddd57e2a98cdd576e73c5e86c56b34e3d94a21580000000000000000000000000000000000000000000000000045a6be04d433c100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9943,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d5a7f961133a8d8b05cde8f113bb7c4f81c70550000000000000000000000008d5a7f961133a8d8b05cde8f113bb7c4f81c705500000000000000000000000000000000000000000000000000497ebb533af40400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9945,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f847e9d51989033b691b8be943f8e9e268f99b9e000000000000000000000000f847e9d51989033b691b8be943f8e9e268f99b9e0000000000000000000000000000000000000000000000000062d734cdb35ec000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9948,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007b5e58994020fc30836d8506bcd8739385fb5f380000000000000000000000007b5e58994020fc30836d8506bcd8739385fb5f380000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9949,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009f216ce5ff7219b7c889e981e02346e7fc2ac6240000000000000000000000009f216ce5ff7219b7c889e981e02346e7fc2ac624000000000000000000000000000000000000000000000000009176d72a784bca00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9950,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000f133919b60bdf696b0ebfa625ee7b16d92c17e60000000000000000000000000f133919b60bdf696b0ebfa625ee7b16d92c17e6000000000000000000000000000000000000000000000000015aba5bb12af4b400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9957,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005dad2e60516aead381996b18258828ca778b3cc70000000000000000000000005dad2e60516aead381996b18258828ca778b3cc7000000000000000000000000000000000000000000000000051f2bcb226c054f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9959,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007de44516f45761ef42e5d654b98c9943a615f8e60000000000000000000000007de44516f45761ef42e5d654b98c9943a615f8e600000000000000000000000000000000000000000000000000034fc4510b208000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9962,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000173c39a48c61035a1fedc5e880dc711c3d387814000000000000000000000000173c39a48c61035a1fedc5e880dc711c3d38781400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9963,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f73615d9c4ceb2afa641e14a07039eb862802d60000000000000000000000007f73615d9c4ceb2afa641e14a07039eb862802d600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9964,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c2f6f572d847d7c3fa36b2b77b2c118dec6102e0000000000000000000000003c2f6f572d847d7c3fa36b2b77b2c118dec6102e00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9965,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006c2e0172da35a9411b5fd1b873cbbe08dc5a54b40000000000000000000000006c2e0172da35a9411b5fd1b873cbbe08dc5a54b400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9966,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cda31aae920b358d6933b05b14f3af183781162e000000000000000000000000cda31aae920b358d6933b05b14f3af183781162e00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9967,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002cbe5cc94b176619b9ca63f0fe8475d1f64c7fe90000000000000000000000002cbe5cc94b176619b9ca63f0fe8475d1f64c7fe900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9968,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1d88743a9b35185e035a903369783f595d2be1d000000000000000000000000f1d88743a9b35185e035a903369783f595d2be1d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9969,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006c19abd29fc942fbf749a9346f5f21aac3cbfde90000000000000000000000006c19abd29fc942fbf749a9346f5f21aac3cbfde900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9970,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000292410be51ee882d7f1f83f2a953c16e240c122b000000000000000000000000292410be51ee882d7f1f83f2a953c16e240c122b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9971,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000051b619f48a8e8fe3fff8c6b6149485577e2fc8c000000000000000000000000051b619f48a8e8fe3fff8c6b6149485577e2fc8c000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9972,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f74ebcb5750836cc2107e12637c285c21a3f2190000000000000000000000007f74ebcb5750836cc2107e12637c285c21a3f21900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9973,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c69fb9e079efc3dac4f5037f6324e89b4def0c0c000000000000000000000000c69fb9e079efc3dac4f5037f6324e89b4def0c0c00000000000000000000000000000000000000000000000000207aaabf95420000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9974,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b2240f1d714f6016259edac934c1d61b1cef4110000000000000000000000000b2240f1d714f6016259edac934c1d61b1cef411000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9975,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6d7259c494db121d490b07bbb31ba7966d395a0000000000000000000000000b6d7259c494db121d490b07bbb31ba7966d395a000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9976,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000adb39595cfe21bb87f0ef1c4ad3f4d85144d2db4000000000000000000000000adb39595cfe21bb87f0ef1c4ad3f4d85144d2db400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9977,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004da4ca139ff7868d9e84da98086386ac7a4f42620000000000000000000000004da4ca139ff7868d9e84da98086386ac7a4f426200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9978,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000006e401916f9e149f20a1e3137d2897f843b510c6400000000000000000000000000000000000000000000000002b8b22448d7bfcc,,,1,true -9980,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000750ea760b19f87dde87492b69479a5b0a094b018000000000000000000000000750ea760b19f87dde87492b69479a5b0a094b018000000000000000000000000000000000000000000000000001f17c4281c430000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x018d967a923e864744595484b5da8c0744b0a943316d593b6c2763784c230fbf,2022-06-05 10:29:35.000 UTC,0,true -9981,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000193a14bd9ec595cb9f17c35926869925ea2d9607000000000000000000000000193a14bd9ec595cb9f17c35926869925ea2d960700000000000000000000000000000000000000000000000000002e60f9a3ce0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9982,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e46a5c54225e347e138fffd648362e190948c3ed000000000000000000000000e46a5c54225e347e138fffd648362e190948c3ed000000000000000000000000000000000000000000000000002581c786a9875400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9984,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000fd61d925fed7c3bf871f34f4a73cbcfab06d76790000000000000000000000000000000000000000000000028d5b0d2af6eee3c4,,,1,true -9985,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001332f3755f48a9c7f618681ae3bdbe618ddf65d90000000000000000000000001332f3755f48a9c7f618681ae3bdbe618ddf65d900000000000000000000000000000000000000000000000000c4b13afcc00fc500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9986,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001446e8f97318d7115483dfe09a43c2614b2e995d0000000000000000000000001446e8f97318d7115483dfe09a43c2614b2e995d0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9987,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000396bff8a62a4c8b3cf4c385d45e77795d9ed6b42000000000000000000000000396bff8a62a4c8b3cf4c385d45e77795d9ed6b4200000000000000000000000000000000000000000000000002b9ab14524493e800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9990,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d07dc0e3d1e9e8e85fcb6200816cda57ea027810000000000000000000000003d07dc0e3d1e9e8e85fcb6200816cda57ea0278100000000000000000000000000000000000000000000000000d134ff2276250000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9991,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf96c38e87dc3b7734ce61c48f30ea156c29e06f000000000000000000000000bf96c38e87dc3b7734ce61c48f30ea156c29e06f0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9992,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000001ab4bea4d7acc413c34bc2c467cec21f9141f0710000000000000000000000001ab4bea4d7acc413c34bc2c467cec21f9141f0710000000000000000000000000000000000000000000000026269b1b5dde1f2bd00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -9993,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a226b0069ea5a21a97d2e799c9746f25bd685fb3000000000000000000000000a226b0069ea5a21a97d2e799c9746f25bd685fb3000000000000000000000000000000000000000000000000004c0cf7196af4f600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9997,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006c29696ebd2a47ccf361dc7fb421da4532e897fb0000000000000000000000006c29696ebd2a47ccf361dc7fb421da4532e897fb000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -9998,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000007514ec83c05ae7406eab24ed8ca54fc3710550200000000000000000000000007514ec83c05ae7406eab24ed8ca54fc37105502000000000000000000000000000000000000000000000000005543df729c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10000,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000050856959952516c0183c3570fbddcf071a81826a00000000000000000000000050856959952516c0183c3570fbddcf071a81826a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10002,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fdd317f6507556ef5733a7b8c6fa5947a0b6df52000000000000000000000000fdd317f6507556ef5733a7b8c6fa5947a0b6df52000000000000000000000000000000000000000000000000000d6518a764b9e500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10003,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002efdd444da9e1823208e96e138add4d8b8063bf20000000000000000000000002efdd444da9e1823208e96e138add4d8b8063bf20000000000000000000000000000000000000000000000000051b660cdd5800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10004,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa4209660e4663f321186a84cd4be739bf405e57000000000000000000000000aa4209660e4663f321186a84cd4be739bf405e57000000000000000000000000000000000000000000000000003ff2e795f5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10005,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008a6e9957e9177adaf95ca41f7e1243899687fbdf0000000000000000000000008a6e9957e9177adaf95ca41f7e1243899687fbdf00000000000000000000000000000000000000000000000001c6bf526340000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10007,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004012972309aaff4793885eac13857b6f33851d810000000000000000000000004012972309aaff4793885eac13857b6f33851d810000000000000000000000000000000000000000000000000012e20b65da6d3200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10009,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000086fb865af41659dcdb86410b32b44c7e087ff14000000000000000000000000086fb865af41659dcdb86410b32b44c7e087ff140000000000000000000000000000000000000000000000000022e6ad3a2b4db400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10011,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000394f5d7096bc8acc82ff09cb83be4ada8897efbd000000000000000000000000394f5d7096bc8acc82ff09cb83be4ada8897efbd0000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10018,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f07c87105d334c4349059513713226d75ed23160000000000000000000000007f07c87105d334c4349059513713226d75ed2316000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10020,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004871c5532d7a56f70f4d9c85dd616595a28d62860000000000000000000000004871c5532d7a56f70f4d9c85dd616595a28d6286000000000000000000000000000000000000000000000000003ff2e795f5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10021,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004df622c2d7df728960230ec203e833034cac84610000000000000000000000004df622c2d7df728960230ec203e833034cac846100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10024,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007bd3939f47d5e9b001583b795e575aa06cb8e2450000000000000000000000007bd3939f47d5e9b001583b795e575aa06cb8e2450000000000000000000000000000000000000000000000000005bbfa4fb47d4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10026,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f3bf62d91baccc69c93c5f944a9eba13bed8ba70000000000000000000000006f3bf62d91baccc69c93c5f944a9eba13bed8ba700000000000000000000000000000000000000000000000000c18efce3b2b4d400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10027,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006aa4e37240e5002c086867408cfe6fc5d2708de30000000000000000000000006aa4e37240e5002c086867408cfe6fc5d2708de3000000000000000000000000000000000000000000000000020e831d63b6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10029,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000742cfe2a1fb49ae444c91b696c771a7b2f65e9f4000000000000000000000000742cfe2a1fb49ae444c91b696c771a7b2f65e9f4000000000000000000000000000000000000000000000000000221b262dd800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10030,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003bd13e5254b6d0dee77b7b9cb6328eb59ea058bc0000000000000000000000003bd13e5254b6d0dee77b7b9cb6328eb59ea058bc000000000000000000000000000000000000000000000000000221b262dd800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10031,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf09c3560b7176bffe3700d1a1283fb85eaf85f9000000000000000000000000cf09c3560b7176bffe3700d1a1283fb85eaf85f9000000000000000000000000000000000000000000000000000221b262dd800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10032,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f999e7c8e06c0128b6d030f80fad725d4da1a8b0000000000000000000000002f999e7c8e06c0128b6d030f80fad725d4da1a8b00000000000000000000000000000000000000000000000000199d19747f280000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10033,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000582f19a6934a1d5b04592b4b5418022ba1d78941000000000000000000000000582f19a6934a1d5b04592b4b5418022ba1d7894100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10034,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3ddb4aa7af5d73a1c019bedfcc179006d6c7329000000000000000000000000d3ddb4aa7af5d73a1c019bedfcc179006d6c732900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10035,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037b2ab0cb7d20646e54463f7453b88756cc6ac5d00000000000000000000000037b2ab0cb7d20646e54463f7453b88756cc6ac5d0000000000000000000000000000000000000000000000000245c4c6c6b1c94000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10036,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000040bb18f181938acfbb62bac84cc2812376fe817d00000000000000000000000040bb18f181938acfbb62bac84cc2812376fe817d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10037,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000014008f25de5a57c9a6c5c64d8275e99b8001138b00000000000000000000000014008f25de5a57c9a6c5c64d8275e99b8001138b000000000000000000000000000000000000000000000000000221b262dd800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10039,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ec4839fa846aa47aee6ad551cd6dcc8c9355bf1c000000000000000000000000ec4839fa846aa47aee6ad551cd6dcc8c9355bf1c000000000000000000000000000000000000000000000000000221b262dd800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10040,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000002e4230ceea610111f3bd7925aa27dd1de1bfe2a80000000000000000000000002e4230ceea610111f3bd7925aa27dd1de1bfe2a80000000000000000000000000000000000000000000000058788cb94b1d8000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10041,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ec4839fa846aa47aee6ad551cd6dcc8c9355bf1c000000000000000000000000ec4839fa846aa47aee6ad551cd6dcc8c9355bf1c0000000000000000000000000000000000000000000000000003e871b540c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10042,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000030f84f0aa9cad152d1852a8767b3e7ad63e056e100000000000000000000000030f84f0aa9cad152d1852a8767b3e7ad63e056e10000000000000000000000000000000000000000000000264ceed6c7efec4c9800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10047,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000072bf82b40dbe01b1e832042d62b4f794405bb2e900000000000000000000000072bf82b40dbe01b1e832042d62b4f794405bb2e90000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10048,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d6e381035ab5995e06a5b1661ee58e92be755a90000000000000000000000003d6e381035ab5995e06a5b1661ee58e92be755a9000000000000000000000000000000000000000000000000015b36e7a9c1e70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10050,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ae488d14ff5622ca5ab1df32a8c26e775d4a7d30000000000000000000000004ae488d14ff5622ca5ab1df32a8c26e775d4a7d3000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10055,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000064e9ea8eeb3ea9a0e68b397db271fb7ac525e330000000000000000000000000000000000000000000000004563918244f40000,,,1,true -10058,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000087602bee24cb297397265ef2b47755f6a7858b2000000000000000000000000087602bee24cb297397265ef2b47755f6a7858b20000000000000000000000000000000000000000000000000006d27dfb67fa16d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10059,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000c1df5e5f5ac6112c9e6677550eb5e53e59651b3c000000000000000000000000000000000000000000000000ba7f18071c0fd89d,,,1,true -10060,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000062223bb2a4781c9512e5b78cef1655d1d9cd216d0000000000000000000000000000000000000000000000006aefe2c9c540b038,,,1,true -10061,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000abcbc48537de3b2120feee5f7eafb78cda48f00c000000000000000000000000abcbc48537de3b2120feee5f7eafb78cda48f00c000000000000000000000000000000000000000000000000013fbe85edc9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10065,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006cb4f60f5806e2eb260cdc33f81523f93795107a0000000000000000000000006cb4f60f5806e2eb260cdc33f81523f93795107a000000000000000000000000000000000000000000000000002a5a55b037944000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10067,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008823fd46766a52ad9e4587df2b6eb93a6c6922290000000000000000000000008823fd46766a52ad9e4587df2b6eb93a6c6922290000000000000000000000000000000000000000000000000058d15e1762800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10071,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000072bf82b40dbe01b1e832042d62b4f794405bb2e900000000000000000000000072bf82b40dbe01b1e832042d62b4f794405bb2e90000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10072,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000072bf82b40dbe01b1e832042d62b4f794405bb2e900000000000000000000000072bf82b40dbe01b1e832042d62b4f794405bb2e90000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10073,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000072bf82b40dbe01b1e832042d62b4f794405bb2e900000000000000000000000072bf82b40dbe01b1e832042d62b4f794405bb2e90000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10074,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000075fef9a38b2f816d31077d34802fd2ebcad79ce600000000000000000000000075fef9a38b2f816d31077d34802fd2ebcad79ce600000000000000000000000000000000000000000000000000546bb20e4d690000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10075,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000049ed1732cec6d80a8163aa053fa78d35e56a608a00000000000000000000000049ed1732cec6d80a8163aa053fa78d35e56a608a000000000000000000000000000000000000000000000000000000000198ef8000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10076,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001ca9e9cc095b0bc7d863c8f23c40d2bfa81ddec20000000000000000000000001ca9e9cc095b0bc7d863c8f23c40d2bfa81ddec2000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10077,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071ea03598702d2fef81cf676d8fa7083c2b58f4300000000000000000000000071ea03598702d2fef81cf676d8fa7083c2b58f43000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10079,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d107fb7d638216a641827517011e54982a8ea1f2000000000000000000000000d107fb7d638216a641827517011e54982a8ea1f2000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10080,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f038d81d37dc40182742c38f096d3821ba07c190000000000000000000000002f038d81d37dc40182742c38f096d3821ba07c19000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10081,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000057230c0d93aaea20709c49dc80272a06df0c401200000000000000000000000057230c0d93aaea20709c49dc80272a06df0c4012000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10082,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021a86e150450d2751435ab390c026e0cdd12664200000000000000000000000021a86e150450d2751435ab390c026e0cdd126642000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10083,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008ac2537286e8168df4ae7971a8d56716a3110ab40000000000000000000000008ac2537286e8168df4ae7971a8d56716a3110ab4000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10084,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000458af2c1ed0e782bced4ad7c6af87d9a7a6fd790000000000000000000000000458af2c1ed0e782bced4ad7c6af87d9a7a6fd79000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10085,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000075c2c8a53eccdf562c6c2f9fb96751f2e2bf970900000000000000000000000075c2c8a53eccdf562c6c2f9fb96751f2e2bf9709000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10086,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000518c302322cdc7a2597b2df46be285bc23a74500000000000000000000000000518c302322cdc7a2597b2df46be285bc23a7450000000000000000000000000000000000000000000000000002e2f6e5e14800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10087,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000097db23710a380967fcea208540d4e70be7797f8300000000000000000000000097db23710a380967fcea208540d4e70be7797f83000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10088,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d0d0f44e92bc9a9278cf8a4f9e5027d56d68d4f0000000000000000000000007d0d0f44e92bc9a9278cf8a4f9e5027d56d68d4f000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10089,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003cd66418db4c9a559c8bba52c80e5c328771d5670000000000000000000000003cd66418db4c9a559c8bba52c80e5c328771d567000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10090,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000ce685b14e8ba490b37be916982610ce1a984d401000000000000000000000000ce685b14e8ba490b37be916982610ce1a984d4010000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10091,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000000315c272cfda98d59b0671d5c7736f404b0929f00000000000000000000000000315c272cfda98d59b0671d5c7736f404b0929f000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10092,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0b152dc2a4dd5700927430c4e2c10c6d1f59d01000000000000000000000000c0b152dc2a4dd5700927430c4e2c10c6d1f59d0100000000000000000000000000000000000000000000000000545dfde151360000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10093,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000036f5a5c87f44e2cf2bde4976878527f934f7e24b00000000000000000000000036f5a5c87f44e2cf2bde4976878527f934f7e24b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10094,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ffaa410e323cb0f594ff2bde976993b3a32cacb0000000000000000000000004ffaa410e323cb0f594ff2bde976993b3a32cacb000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10095,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bfcfd6875dead16273e3d2c9cbf4e310aa61b8f0000000000000000000000000bfcfd6875dead16273e3d2c9cbf4e310aa61b8f0000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10096,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fa0e64bb7405e198912b789f0a034cb406c27ad8000000000000000000000000fa0e64bb7405e198912b789f0a034cb406c27ad8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10097,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd2422c3a18c477b455eeca76336299b71a782bd000000000000000000000000bd2422c3a18c477b455eeca76336299b71a782bd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10098,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000085f5aded0b12fefbf87d44106465eef6fd2b8fbc00000000000000000000000085f5aded0b12fefbf87d44106465eef6fd2b8fbc0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10100,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000c7e1b198a199c1eaa3d5065c2f14c3710e456ec0000000000000000000000000c7e1b198a199c1eaa3d5065c2f14c3710e456ec00000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10101,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000b1b749f5325c6b9692093575e519a4191432379f000000000000000000000000b1b749f5325c6b9692093575e519a4191432379f0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10102,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000052b78e734ab4239a31c4df316f515d2a67aa09ad00000000000000000000000052b78e734ab4239a31c4df316f515d2a67aa09ad0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10103,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000007f4825c7d1faf7400a500a4da4c356c89f7193880000000000000000000000007f4825c7d1faf7400a500a4da4c356c89f7193880000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10104,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000d8e12edc97ca9432dae369a0a9b42c4ed9338e1b000000000000000000000000d8e12edc97ca9432dae369a0a9b42c4ed9338e1b0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10106,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000cdc5a129d5c21f57e0b4030f14dcc0736a6e0fbf000000000000000000000000cdc5a129d5c21f57e0b4030f14dcc0736a6e0fbf0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10107,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000002b81cad571025bc0003724602f9f1981aa0e272c0000000000000000000000002b81cad571025bc0003724602f9f1981aa0e272c0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10108,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000008e081ed1dc015d6c240ce53c1f2ef34f4b494c3f0000000000000000000000008e081ed1dc015d6c240ce53c1f2ef34f4b494c3f0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10109,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000733849262454294011ab8dec5324c94f5cb56286000000000000000000000000733849262454294011ab8dec5324c94f5cb562860000000000000000000000000000000000000000000000000042acb25d47190000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10110,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000454d998f8bb9a7c15f057a65fdf2ece62ed10717000000000000000000000000454d998f8bb9a7c15f057a65fdf2ece62ed107170000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10111,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000005f73e68a8f4e35509cc9489ffc1bace4cdfd39580000000000000000000000005f73e68a8f4e35509cc9489ffc1bace4cdfd39580000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10112,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000ba6b247cb6183fd5ad3b1e3381c7832036881f13000000000000000000000000ba6b247cb6183fd5ad3b1e3381c7832036881f130000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10113,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000092f65115b22ca4b1c30eb1f5e884ccec076aff0500000000000000000000000092f65115b22ca4b1c30eb1f5e884ccec076aff050000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10115,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000d3303476f4444ae95bd24a17bfc3205f53efe840000000000000000000000000d3303476f4444ae95bd24a17bfc3205f53efe8400000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10116,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000050d569614dd212ac6ac46702696ae8116985a99300000000000000000000000050d569614dd212ac6ac46702696ae8116985a9930000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10117,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000e8496213adbaecf2186be49e5bf5e5da3b079da4000000000000000000000000e8496213adbaecf2186be49e5bf5e5da3b079da40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10118,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000c7e441581383460082f3face8021c7aa7d0bf1c0000000000000000000000000c7e441581383460082f3face8021c7aa7d0bf1c00000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10119,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000fea4c9731d15337539116d07f61bd6f5b889e6d0000000000000000000000000fea4c9731d15337539116d07f61bd6f5b889e6d00000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10120,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000004b591f78e5fb4097964a35d3322fdbcde179d2ad0000000000000000000000004b591f78e5fb4097964a35d3322fdbcde179d2ad0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10121,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000008ae15e79144fc11428faeb99ec025d0b525dacf40000000000000000000000008ae15e79144fc11428faeb99ec025d0b525dacf40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10122,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000007e44734df1f5270c0f461b3159ef9065769d09c00000000000000000000000007e44734df1f5270c0f461b3159ef9065769d09c00000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10123,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d9b98b2c4ff722d5a1cdac65725f5d609782b225000000000000000000000000d9b98b2c4ff722d5a1cdac65725f5d609782b2250000000000000000000000000000000000000000000000000076508955cb840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10124,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000081993c552d3a9923acff5f0c74a7fe3714781c8800000000000000000000000081993c552d3a9923acff5f0c74a7fe3714781c880000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10125,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000702b564c22f3c715c3f0a6ced062a3a1c938aaae000000000000000000000000702b564c22f3c715c3f0a6ced062a3a1c938aaae0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10126,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000573207197d089e98ca46ea6d8fa24a1d6ba7cac4000000000000000000000000573207197d089e98ca46ea6d8fa24a1d6ba7cac40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10127,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000006aa459e7eb8d057ece344bccaabfbe37fb2d777b0000000000000000000000006aa459e7eb8d057ece344bccaabfbe37fb2d777b0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10129,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000bddf8194ccc04be52d3e66d5dfb63edba8735e40000000000000000000000000bddf8194ccc04be52d3e66d5dfb63edba8735e400000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10130,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000008ccf1bb8e9664863040f9ec000db69a98c01095c0000000000000000000000008ccf1bb8e9664863040f9ec000db69a98c01095c0000000000000000000000000000000000000000000000000000000003adc7e300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10131,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004b5568579983f59b1bac36926c0cb8ef03883bab0000000000000000000000004b5568579983f59b1bac36926c0cb8ef03883bab000000000000000000000000000000000000000000000000003b64767291b94000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10134,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b460d7ffa9d9dc485d73bbb0dcd6086dbe11486e000000000000000000000000b460d7ffa9d9dc485d73bbb0dcd6086dbe11486e000000000000000000000000000000000000000000000000003326139aeb092d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10138,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005121d18eae0be5bb57d6bb7907a9d49d9e5af1ef0000000000000000000000005121d18eae0be5bb57d6bb7907a9d49d9e5af1ef0000000000000000000000000000000000000000000000000031bced02db000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x371a90ee0a969e3223f940a0007dde944e478c8b171ee418adf6a4d55667563b,2022-05-29 09:29:12.000 UTC,0,true -10139,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7f06d3ae0aad1d5c1f5602d93c0f44927b91fba000000000000000000000000c7f06d3ae0aad1d5c1f5602d93c0f44927b91fba00000000000000000000000000000000000000000000000000403bf970f702a900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10140,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004de67d3e4dbe226f216022c2f1c2ff80311a1d960000000000000000000000004de67d3e4dbe226f216022c2f1c2ff80311a1d9600000000000000000000000000000000000000000000000000ad9b9766711f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x0c80e2a3ae845c2d255b9d5f72636cf4679130ecbf1566d77fcf1cf1f64de099,2021-12-26 08:12:45.000 UTC,0,true -10143,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa6dc8d75c0be59983207f16da1168068fe816da000000000000000000000000aa6dc8d75c0be59983207f16da1168068fe816da00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10145,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000026f0b7289933220d76e9e11257d741454cf3cce000000000000000000000000026f0b7289933220d76e9e11257d741454cf3cce0000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10146,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045f425484d66db4f639ba8d17c0b218044323eee00000000000000000000000045f425484d66db4f639ba8d17c0b218044323eee000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10147,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000027e52eeb0d7b910dec57fd66833ad1d4ba2d4c7700000000000000000000000027e52eeb0d7b910dec57fd66833ad1d4ba2d4c77000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10148,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000197cf41f02f380ca1c135eed92321aa1b663d06d000000000000000000000000197cf41f02f380ca1c135eed92321aa1b663d06d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10149,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eaca773f51c4a561ae622a6d7d6b98cc490e929e000000000000000000000000eaca773f51c4a561ae622a6d7d6b98cc490e929e000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10150,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5577bb739ac71d1d2af723b29fdd48246622690000000000000000000000000e5577bb739ac71d1d2af723b29fdd48246622690000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10152,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000742f477a2ec86b9ea08769a56a1d1dcdf42808f8000000000000000000000000742f477a2ec86b9ea08769a56a1d1dcdf42808f8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10153,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000f11913257505b756071462301810a189ec635390000000000000000000000000f11913257505b756071462301810a189ec63539000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10154,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000724d0c36c59e1e8b872e7513242678a90dcc693e000000000000000000000000724d0c36c59e1e8b872e7513242678a90dcc693e000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10156,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c230098ca60a8805605dcb8162edb7ac2c2ec03a000000000000000000000000c230098ca60a8805605dcb8162edb7ac2c2ec03a000000000000000000000000000000000000000000000000002fddb9c7d4685600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10158,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a6c8118a562029638ebb4a268a14aa148e66320a000000000000000000000000a6c8118a562029638ebb4a268a14aa148e66320a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10159,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000042acc6c41ba0085452b0abc0385b45af73bc030100000000000000000000000042acc6c41ba0085452b0abc0385b45af73bc03010000000000000000000000000000000000000000000000000043306bcefdfe0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10160,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049c0dce4dd4f830cbf99c9012e556c5032aea3fe00000000000000000000000049c0dce4dd4f830cbf99c9012e556c5032aea3fe00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10162,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000daa201fe714db677be1ce4ddcb1671db58536e9e000000000000000000000000daa201fe714db677be1ce4ddcb1671db58536e9e00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10163,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a0545180d0f14ecff7195fe4dedaec4463aa9477000000000000000000000000a0545180d0f14ecff7195fe4dedaec4463aa947700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10166,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000064409b6f951b944cd474112596918443e949d73a00000000000000000000000000000000000000000000000049b4a92da3d541cc,,,1,true -10167,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c14e3364f5f6e642a4258ef1ec1f4fdcb6192380000000000000000000000004c14e3364f5f6e642a4258ef1ec1f4fdcb6192380000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10168,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b6ca557426ef32205cbd3521fcd84df73c023970000000000000000000000002b6ca557426ef32205cbd3521fcd84df73c0239700000000000000000000000000000000000000000000000000d529ae9e86000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10169,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003fe00711f5bc714bdd9cd02c078212735c752ad20000000000000000000000003fe00711f5bc714bdd9cd02c078212735c752ad20000000000000000000000000000000000000000000000000067fd768e86b7e000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10171,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6c86df56d0a5c574658bf2831d8dda94e6fee58000000000000000000000000b6c86df56d0a5c574658bf2831d8dda94e6fee580000000000000000000000000000000000000000000000000000f3e017c4d74000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10173,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000046f64499d85f2c9c2da909c23ae14171ad497a8000000000000000000000000046f64499d85f2c9c2da909c23ae14171ad497a800000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10174,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000940f065eeef9895db3e7f0c6e81285a23999ef62000000000000000000000000940f065eeef9895db3e7f0c6e81285a23999ef62000000000000000000000000000000000000000000000000003f411813d9b51f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10175,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000220b573118f76e07e39378debab10229f81088f3000000000000000000000000220b573118f76e07e39378debab10229f81088f300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10177,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d225664800111cb92bfada74d2f7ddb64dbb5fa6000000000000000000000000d225664800111cb92bfada74d2f7ddb64dbb5fa600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10178,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009d7129923d67697398506754af137c7ed14240f90000000000000000000000009d7129923d67697398506754af137c7ed14240f900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10179,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000704e37fad86c7c83c4815705cfc1d05b428fcb16000000000000000000000000704e37fad86c7c83c4815705cfc1d05b428fcb1600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10180,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004cde9d17ffe865b52abba7f6c24d4ab00dd81ee30000000000000000000000004cde9d17ffe865b52abba7f6c24d4ab00dd81ee300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10181,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029347aaf07d8e9d97bb4ca54c17de6f008b0081200000000000000000000000029347aaf07d8e9d97bb4ca54c17de6f008b0081200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10182,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a8727c34188323c7de9a2c50965d11e8601a2cc0000000000000000000000005a8727c34188323c7de9a2c50965d11e8601a2cc00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10185,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a4e54944bb193f47967df9c872107d7dafe279a0000000000000000000000004a4e54944bb193f47967df9c872107d7dafe279a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10186,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000018a468f1001dedb8ae05dca5d565b9717eae214500000000000000000000000018a468f1001dedb8ae05dca5d565b9717eae214500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10188,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8699196330d4f5f336447e714af78f7ddce10f4000000000000000000000000b8699196330d4f5f336447e714af78f7ddce10f400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10232,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a8fe31643fb7106966f7f6f4022a9089097fd577000000000000000000000000a8fe31643fb7106966f7f6f4022a9089097fd577000000000000000000000000000000000000000000000000015c9f5156085e9c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10234,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000008eafda6638457c05c210df7bc7331ce01b8fa3a00000000000000000000000008eafda6638457c05c210df7bc7331ce01b8fa3a000000000000000000000000000000000000000000000000000000004d7c6d0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x2bb6234353e0e6e023d68077c5f57d8e460a84cf89e05921da6df587a9e3c124,2021-12-20 14:30:00.000 UTC,0,true -10235,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000000f23ca10acd56f752737db7286478dfcf6e5dd700000000000000000000000000f23ca10acd56f752737db7286478dfcf6e5dd700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10238,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f6fb0f6063e851a21091c12a8e030dfe27caeff0000000000000000000000000f6fb0f6063e851a21091c12a8e030dfe27caeff000000000000000000000000000000000000000000000000000b02bf9db96800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10239,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf9f420d42c6c55be64ff4631b6aa1a38934f73c000000000000000000000000cf9f420d42c6c55be64ff4631b6aa1a38934f73c000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10241,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000350a791bfc2c21f9ed5d10980dad2e2638ffa7f6000000000000000000000000317854d799bf228f22ae1af441f0e3cededcebae000000000000000000000000317854d799bf228f22ae1af441f0e3cededcebae00000000000000000000000000000000000000000000000000048f83ef278ff000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10242,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d0eb55100cf5e2a70cd8773275dfa50e679270e0000000000000000000000003d0eb55100cf5e2a70cd8773275dfa50e679270e000000000000000000000000000000000000000000000000004521ac7874140000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10243,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005d4c5b72a62ca1e2548f1914252d31a9023fec700000000000000000000000005d4c5b72a62ca1e2548f1914252d31a9023fec700000000000000000000000000000000000000000000000000017c2fa463780000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x3ad2bad724109d9d82fb2398e41e50c89660b5e1f02230da8f462c2f9cd4cad7,2022-04-26 17:42:12.000 UTC,0,true -10244,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000af8bc4650698b53d8d2cedfe180ddf1f3cba5bf6000000000000000000000000af8bc4650698b53d8d2cedfe180ddf1f3cba5bf6000000000000000000000000000000000000000000000000000000000660b0c000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10245,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000102c13752113c8d60000bf3fbf9205a80ca245e7000000000000000000000000102c13752113c8d60000bf3fbf9205a80ca245e7000000000000000000000000000000000000000000000000005d27d837a977fd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10246,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b255d025a6a1da4e5a707f8501dac148a0be382c000000000000000000000000b255d025a6a1da4e5a707f8501dac148a0be382c00000000000000000000000000000000000000000000000000000dda5e87f50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10249,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000007bd3939f47d5e9b001583b795e575aa06cb8e2450000000000000000000000007bd3939f47d5e9b001583b795e575aa06cb8e245000000000000000000000000000000000000000000000002fe0ba986973593cc00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10250,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ecb769fb7e68cda5026349c0d0e446105bdce880000000000000000000000007ecb769fb7e68cda5026349c0d0e446105bdce88000000000000000000000000000000000000000000000000006d0d660b17ad2500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10251,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000063bb1caab997a6b9743e62034d9ccc7fda7359f100000000000000000000000063bb1caab997a6b9743e62034d9ccc7fda7359f1000000000000000000000000000000000000000000000000000974d1c1df000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10252,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a658f95d3b82fcf45a0c4758474c6f3564e4cb9f000000000000000000000000a658f95d3b82fcf45a0c4758474c6f3564e4cb9f000000000000000000000000000000000000000000000000000c60c9cde5ca4d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10253,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000086fb865af41659dcdb86410b32b44c7e087ff14000000000000000000000000086fb865af41659dcdb86410b32b44c7e087ff140000000000000000000000000000000000000000000000000000a533b777d90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10254,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000217a347ad2daac7d2e0fc0185df1c57ecd532ad0000000000000000000000000217a347ad2daac7d2e0fc0185df1c57ecd532ad00000000000000000000000000000000000000000000000000000a6e55200be300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10255,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1825e8203d05434534756f1c0c639f74792fcd6000000000000000000000000f1825e8203d05434534756f1c0c639f74792fcd60000000000000000000000000000000000000000000000000068894b86ce6f4700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10256,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000727d55cd776946e4cad03a26915d5c0f5bb12a63000000000000000000000000727d55cd776946e4cad03a26915d5c0f5bb12a6300000000000000000000000000000000000000000000000000000a6e55200be300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10257,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b4f60da1acfa4f0c0897c34a9c830cb16494ed6d000000000000000000000000b4f60da1acfa4f0c0897c34a9c830cb16494ed6d0000000000000000000000000000000000000000000000000000e10adb56387300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10258,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000659e15424b6f24b66e5c3cb0a9e2d591bba93b88000000000000000000000000659e15424b6f24b66e5c3cb0a9e2d591bba93b8800000000000000000000000000000000000000000000000000003240e2cda1a500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10259,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b1eebc9ad0f4df141ef429bd0d7fdb0de9e4120c000000000000000000000000b1eebc9ad0f4df141ef429bd0d7fdb0de9e4120c00000000000000000000000000000000000000000000000000003240e2cda1a500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10260,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f70b585acf0030bdd393239f54bffcad1ea14f50000000000000000000000008f70b585acf0030bdd393239f54bffcad1ea14f500000000000000000000000000000000000000000000000000003240e2cda1a500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10261,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0568c83470e77f4c5891d190361e4340f954a0d000000000000000000000000c0568c83470e77f4c5891d190361e4340f954a0d00000000000000000000000000000000000000000000000000003240e2cda1a500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10262,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005055b56dd5f68a77ce57c6dac3b64f4fc17fab890000000000000000000000005055b56dd5f68a77ce57c6dac3b64f4fc17fab8900000000000000000000000000000000000000000000000000003240e2cda1a500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10263,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000573e97a089ada31d62d42b61c248cc86be764b99000000000000000000000000573e97a089ada31d62d42b61c248cc86be764b9900000000000000000000000000000000000000000000000000003240e2cda1a500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10264,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7faec15d7da6f3d67ce27c6fd7236877f0ae95c000000000000000000000000c7faec15d7da6f3d67ce27c6fd7236877f0ae95c00000000000000000000000000000000000000000000000000003240e2cda1a500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10265,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ccf7a254f35c89468c0884a31de5eedaf6a5771b000000000000000000000000ccf7a254f35c89468c0884a31de5eedaf6a5771b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10266,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003132c2259c22cf2b60d104436c90150edca037690000000000000000000000003132c2259c22cf2b60d104436c90150edca037690000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10267,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043ae58171e667dd417db1ef49ee5f18e466f581200000000000000000000000043ae58171e667dd417db1ef49ee5f18e466f581200000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10268,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000b0ce2f4a9ecc7c94d89f4288efe11dbfc139bce0000000000000000000000000b0ce2f4a9ecc7c94d89f4288efe11dbfc139bce0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10269,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000727d55cd776946e4cad03a26915d5c0f5bb12a63000000000000000000000000727d55cd776946e4cad03a26915d5c0f5bb12a630000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10270,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fb1b4f5fc05eca6e86e33d0719ae4cab47b9fc6d000000000000000000000000fb1b4f5fc05eca6e86e33d0719ae4cab47b9fc6d00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10271,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c915cdd6254a77125280f4e58070229e942f6dff000000000000000000000000c915cdd6254a77125280f4e58070229e942f6dff000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10272,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff08f4394a19c5e01b2d16b9faaf905581e2a16e000000000000000000000000ff08f4394a19c5e01b2d16b9faaf905581e2a16e00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10273,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007233bc516651ece192db7502b97648bee50488070000000000000000000000007233bc516651ece192db7502b97648bee5048807000000000000000000000000000000000000000000000000000221b262dd800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10274,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9bea21a2ecd9296f722e91fe806972728d890fd000000000000000000000000f9bea21a2ecd9296f722e91fe806972728d890fd0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10275,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b4f60da1acfa4f0c0897c34a9c830cb16494ed6d000000000000000000000000b4f60da1acfa4f0c0897c34a9c830cb16494ed6d0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10276,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080b0e7dcbe436fa8a614f25c872f43539de1461f00000000000000000000000080b0e7dcbe436fa8a614f25c872f43539de1461f0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10277,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e1f404ef1cea424a35fa4cbe373e74f0154eeb0e000000000000000000000000e1f404ef1cea424a35fa4cbe373e74f0154eeb0e0000000000000000000000000000000000000000000000000003328b944c400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10278,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a0a8017c2af6212a96ce718c12f90b89bee11a60000000000000000000000006a0a8017c2af6212a96ce718c12f90b89bee11a6000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10279,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d055c2753009604e1dcbacc648c0b2744aa620ce000000000000000000000000d055c2753009604e1dcbacc648c0b2744aa620ce00000000000000000000000000000000000000000000000000024f2beb1aa00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10281,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000169d31b52d8de8d1235e54cb29ab1d1a466f14d9000000000000000000000000169d31b52d8de8d1235e54cb29ab1d1a466f14d900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10282,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000212a7f5ea445d92d0d900cffdcf6cac9bffb850b000000000000000000000000212a7f5ea445d92d0d900cffdcf6cac9bffb850b00000000000000000000000000000000000000000000000000027ca57357c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10283,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2c07722d72bd0bba8360ed4e91c97df17cfd1cd000000000000000000000000d2c07722d72bd0bba8360ed4e91c97df17cfd1cd000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10284,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c6eab90d841ab91affe69a0409e0b6de14d95070000000000000000000000008c6eab90d841ab91affe69a0409e0b6de14d950700000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10285,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000586a911410d6bfc5281b641539f159032b745ea1000000000000000000000000586a911410d6bfc5281b641539f159032b745ea1000000000000000000000000000000000000000000000000001b658611edae0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10289,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3e9b7e2cc8dd20837d97e53359584434bdb177a000000000000000000000000a3e9b7e2cc8dd20837d97e53359584434bdb177a0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10290,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c01aa6d5c839555c4de1a5b3ecbdf4bc49aded0e000000000000000000000000c01aa6d5c839555c4de1a5b3ecbdf4bc49aded0e00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10291,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007772e14acc07bbc8feac62134450bb96c9b75af50000000000000000000000007772e14acc07bbc8feac62134450bb96c9b75af5000000000000000000000000000000000000000000000000050540d84e58629d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10292,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029958d6de6a7eb94859a1a2f14cc95956497fe9500000000000000000000000029958d6de6a7eb94859a1a2f14cc95956497fe95000000000000000000000000000000000000000000000000008361f8c4e19e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10293,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009d62f9f64135eb257d54e3e7bfcd7af5461e038d0000000000000000000000009d62f9f64135eb257d54e3e7bfcd7af5461e038d000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10294,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000013af0bcef44bb79eb362b9fdce618b3d5687251200000000000000000000000013af0bcef44bb79eb362b9fdce618b3d56872512000000000000000000000000000000000000000000000000015741231033621300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10295,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000964ae9de12550092156981ef8e90f1f728b54488000000000000000000000000964ae9de12550092156981ef8e90f1f728b5448800000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10296,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d71f8d6a355196391bd22eb45dd991addec97b3d000000000000000000000000d71f8d6a355196391bd22eb45dd991addec97b3d0000000000000000000000000000000000000000000000000036515138f29c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x0fc1db5b578e450291e4f8773213680656e019f3a2f42ff28bae810ce5fae2c0,2022-04-20 10:37:33.000 UTC,0,true -10297,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009cc7285272b1d0561f58002b38fdc62dc4d58c7c0000000000000000000000009cc7285272b1d0561f58002b38fdc62dc4d58c7c000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10298,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d13a94dee746792b1d1eb6c5c2dde9abaaf4f410000000000000000000000003d13a94dee746792b1d1eb6c5c2dde9abaaf4f41000000000000000000000000000000000000000000000000003affc7c9cb277c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10299,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa2d5b6b5b1e3955c0d15c0a8973bb40a6445a0b000000000000000000000000aa2d5b6b5b1e3955c0d15c0a8973bb40a6445a0b00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10301,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000ebbd86806394e54dc5910f643c746c4ea6bc7180000000000000000000000000ebbd86806394e54dc5910f643c746c4ea6bc718000000000000000000000000000000000000000000000000004482431457260000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10304,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071fde05ed1cd7e5f15605f155d568cfc4a11169f00000000000000000000000071fde05ed1cd7e5f15605f155d568cfc4a11169f000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10305,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000002556d2ff1766dc2dcfe95c3066745c0eb2d885000000000000000000000000002556d2ff1766dc2dcfe95c3066745c0eb2d88500000000000000000000000000000000000000000000000000394290a8e95a8200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10307,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000073c486d8828778d1113fc251bb0f8051cf4831d100000000000000000000000073c486d8828778d1113fc251bb0f8051cf4831d100000000000000000000000000000000000000000000000000000000853e594400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10310,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002495fbe9664d0cb6fa64ff82ab0c09828c6fec5d0000000000000000000000002495fbe9664d0cb6fa64ff82ab0c09828c6fec5d00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10311,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1e65b35a31bbd0e3be874107077668b890eca71000000000000000000000000f1e65b35a31bbd0e3be874107077668b890eca710000000000000000000000000000000000000000000000000033d1fe15ed120000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10313,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fd62ff34e049b1aa707cc2354b284d1d14d05feb000000000000000000000000fd62ff34e049b1aa707cc2354b284d1d14d05feb0000000000000000000000000000000000000000000000000029cee12b25d50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10315,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006adadd07bc925e5b1ee66ab7882cd9123659b3070000000000000000000000006adadd07bc925e5b1ee66ab7882cd9123659b30700000000000000000000000000000000000000000000000000f5fb428d649b1600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10316,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080aaf7d99a2fc604f597b3e4aa5caeb309fb8ff300000000000000000000000080aaf7d99a2fc604f597b3e4aa5caeb309fb8ff3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10317,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000075259cc3a74fde232f8219af4c6f11bfb3ae4f7000000000000000000000000075259cc3a74fde232f8219af4c6f11bfb3ae4f7000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10318,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ad24ff5b503be5b6dd3936f842a252b0843ab808000000000000000000000000ad24ff5b503be5b6dd3936f842a252b0843ab80800000000000000000000000000000000000000000000000000a5c44c2413bc3400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10320,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000012592819286ea4352dc732edd6b65492325d33f000000000000000000000000012592819286ea4352dc732edd6b65492325d33f000000000000000000000000000000000000000000000000000000009411cfd1d00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10321,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000009fddfa181c05f23eab8b17f15719dbeffcb060000000000000000000000000009fddfa181c05f23eab8b17f15719dbeffcb06000000000000000000000000000000000000000000000000000000000060905df00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x991d81d23dd63378654c79d88281a9398d8097bfc9c8a29914e79b68c3dd1ac4,2022-08-26 07:10:26.000 UTC,0,true -10322,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000075259cc3a74fde232f8219af4c6f11bfb3ae4f7000000000000000000000000075259cc3a74fde232f8219af4c6f11bfb3ae4f700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10323,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c2b1742dac3d8e05c8f4497a14c8be56834d6320000000000000000000000003c2b1742dac3d8e05c8f4497a14c8be56834d63200000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10324,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000115c5b00726c22797c7dac1e614bc85aecf4d629000000000000000000000000115c5b00726c22797c7dac1e614bc85aecf4d629000000000000000000000000000000000000000000000000000000000666bafb00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x39ccd67a7700b997967bf0bbc08251c796652a75e34a8fd41be387856791a2d3,2022-08-26 07:06:59.000 UTC,0,true -10325,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e3c20cdfb58665c6b5ef73a3c6e3bb915dbe5d10000000000000000000000001e3c20cdfb58665c6b5ef73a3c6e3bb915dbe5d100000000000000000000000000000000000000000000000002eed84182f5f57100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10326,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f6c3c3621f42ec1f1cd1207bb1571d93646ab29a000000000000000000000000f6c3c3621f42ec1f1cd1207bb1571d93646ab29a000000000000000000000000000000000000000000000000015ebfea73a2530000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10327,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000060a2653f59dedafb8097d2ebb7306faaa396969400000000000000000000000060a2653f59dedafb8097d2ebb7306faaa396969400000000000000000000000000000000000000000000000000255cf559e8911b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10328,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba84c858a959d236b375a969412e3d78dc49d01e000000000000000000000000ba84c858a959d236b375a969412e3d78dc49d01e000000000000000000000000000000000000000000000000007d31275d4edc4100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10329,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000085e8f7c8a4c0dad2ad621a0452fca994202c924000000000000000000000000085e8f7c8a4c0dad2ad621a0452fca994202c9240000000000000000000000000000000000000000000000000003abbf91aa5519900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10330,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000477c43b4835cfdabbeca1db95ca830b9865a588e000000000000000000000000477c43b4835cfdabbeca1db95ca830b9865a588e00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10333,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000049205e7f66591d3742bdf61b5477dd5579896e9a000000000000000000000000000000000000000000000005f68e8131ecf80000,,,1,true -10334,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000049205e7f66591d3742bdf61b5477dd5579896e9a0000000000000000000000000000000000000000000000000de0b6b3a7640000,,,1,true -10336,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000049205e7f66591d3742bdf61b5477dd5579896e9a0000000000000000000000000000000000000000000000006124fee993bc0000,,,1,true -10337,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000974250fa680bcf173d77c1950f2a9662d80c094b000000000000000000000000974250fa680bcf173d77c1950f2a9662d80c094b000000000000000000000000000000000000000000000000005629e98d33e95000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10338,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7a3cf40a424706362a4e7593826bf7976e8caf2000000000000000000000000c7a3cf40a424706362a4e7593826bf7976e8caf20000000000000000000000000000000000000000000000000000910ffc834bc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10339,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eee8def7aff805bd3d34ce2926e55308af6fdea7000000000000000000000000eee8def7aff805bd3d34ce2926e55308af6fdea70000000000000000000000000000000000000000000000000051acebe37b8d8400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10340,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3265d44000d2dffe2987b379759f657912c0df7000000000000000000000000a3265d44000d2dffe2987b379759f657912c0df70000000000000000000000000000000000000000000000000038d62a5f060fc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10342,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000ef0f60b0de23ef1943545392d9999acc2bf93a90000000000000000000000000ef0f60b0de23ef1943545392d9999acc2bf93a900000000000000000000000000000000000000000000000000524c1560ffebfe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10343,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003027e896eb33338ee957c75c850dfa5675192dd30000000000000000000000003027e896eb33338ee957c75c850dfa5675192dd300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10344,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003027e896eb33338ee957c75c850dfa5675192dd30000000000000000000000003027e896eb33338ee957c75c850dfa5675192dd300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10345,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c2d10e462338c73aa623c66d7ab7000e3113d0c0000000000000000000000000c2d10e462338c73aa623c66d7ab7000e3113d0c00000000000000000000000000000000000000000000000000540fc1d5bdc0a200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10346,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba1a0bea968df4223863751bb1d38e6598875994000000000000000000000000ba1a0bea968df4223863751bb1d38e6598875994000000000000000000000000000000000000000000000000005755daaa5fc49b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10347,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000020d6827df2cb81cc673e2d8aaf1a551ba4a223ef00000000000000000000000020d6827df2cb81cc673e2d8aaf1a551ba4a223ef00000000000000000000000000000000000000000000000000535f100862a1a800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10349,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005de56eff8cca0aacba2843ea6f4d95bd3f18fb6f0000000000000000000000005de56eff8cca0aacba2843ea6f4d95bd3f18fb6f0000000000000000000000000000000000000000000000000066851c120c91ca00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10350,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c9f2f77293528e7d2e8b02e6176d8eef9d35ec30000000000000000000000002c9f2f77293528e7d2e8b02e6176d8eef9d35ec3000000000000000000000000000000000000000000000000000d145bc1e07f6000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10351,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000016d95d23a1c8004791c6054eb44e5ab0247b91d500000000000000000000000016d95d23a1c8004791c6054eb44e5ab0247b91d50000000000000000000000000000000000000000000000000131493891a5f2b200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10352,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000024efda7b7781f877bd1ea07d50db5f4f39378bd600000000000000000000000024efda7b7781f877bd1ea07d50db5f4f39378bd6000000000000000000000000000000000000000000000000000efca6e002cdc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10353,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e81669100000000000000000000000024efda7b7781f877bd1ea07d50db5f4f39378bd600000000000000000000000024efda7b7781f877bd1ea07d50db5f4f39378bd60000000000000000000000000000000000000000000000001e8210322557b37500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10357,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b7a0a0b2b1f6a256dcbf6516aaecd6a5c616a020000000000000000000000000b7a0a0b2b1f6a256dcbf6516aaecd6a5c616a02000000000000000000000000000000000000000000000000000845e39c720d1df00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10359,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000051cfff329f4e823c370b1d210bc52a53c084e7d300000000000000000000000051cfff329f4e823c370b1d210bc52a53c084e7d300000000000000000000000000000000000000000000000000303d2b6931c19b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x73813adc4c0da4fedfce1011fdaa2bba0c66889f2ea5a4663707577d3ff27b32,2022-08-25 00:51:03.000 UTC,0,true -10360,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac30912712612e1b8cd3ece688fb1e917ae3d62b000000000000000000000000ac30912712612e1b8cd3ece688fb1e917ae3d62b000000000000000000000000000000000000000000000000000b2d034bb75cfc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10361,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005465b4f4ea1cb0222063fe68812e064688d55fe70000000000000000000000005465b4f4ea1cb0222063fe68812e064688d55fe700000000000000000000000000000000000000000000000000b3a2307b20a3f600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10363,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007c0fa5ab1a86cba0321d7b173b751e264fba955b0000000000000000000000007c0fa5ab1a86cba0321d7b173b751e264fba955b000000000000000000000000000000000000000000000000000c4940304217d400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10364,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002731d63bd9dcc8954a00ce371ee684f3a80731670000000000000000000000002731d63bd9dcc8954a00ce371ee684f3a80731670000000000000000000000000000000000000000000000000de24152aa6c010000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf7d7e75e42294d5c18a1b180f49710329b550cf22bd6039c219dd3d9743664af,2022-01-06 11:09:27.000 UTC,0,true -10365,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a751840c88c172fd286ed65d7370e80af88f77a6000000000000000000000000a751840c88c172fd286ed65d7370e80af88f77a6000000000000000000000000000000000000000000000000000ba6331297b7c400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10366,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a72315bf50892d6c75341446b890ec0064b2eec4000000000000000000000000a72315bf50892d6c75341446b890ec0064b2eec4000000000000000000000000000000000000000000000000000b51c38f73e0c900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10367,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003b9bf228ef7c4fe0f27338944e56babcbe1363540000000000000000000000003b9bf228ef7c4fe0f27338944e56babcbe13635400000000000000000000000000000000000000000000000000d827f523ed588800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10368,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a07014c48675e60949a2324400e2a783c4c8e3db000000000000000000000000a07014c48675e60949a2324400e2a783c4c8e3db000000000000000000000000000000000000000000000000001b3ebfdfe218c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10369,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029c56a174a6407ded4297fa9b3db40986eeae49200000000000000000000000029c56a174a6407ded4297fa9b3db40986eeae492000000000000000000000000000000000000000000000000000d4c94a4f3c64700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10370,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000025132bb3a3276d1cb05f975e790f86b5122b34e400000000000000000000000025132bb3a3276d1cb05f975e790f86b5122b34e4000000000000000000000000000000000000000000000000000c6a8a8d77d60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10371,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6310c4d5e6680d891d1ebf25d0783fe60c40520000000000000000000000000d6310c4d5e6680d891d1ebf25d0783fe60c405200000000000000000000000000000000000000000000000000060fb56aab1ee3800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10372,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000290ea250ce53f591a3343967683702e43c2b4f3f000000000000000000000000290ea250ce53f591a3343967683702e43c2b4f3f000000000000000000000000000000000000000000000000004705057d8edd7c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10373,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006780f586701c31e08eecef12302fc97c0ae994490000000000000000000000006780f586701c31e08eecef12302fc97c0ae99449000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10374,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e988e5332a1bbd17dc7392cc94f391ff27e7e2f0000000000000000000000008e988e5332a1bbd17dc7392cc94f391ff27e7e2f000000000000000000000000000000000000000000000000000d4651ea74c44500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10375,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000edc11c59261bc0df4bfe982aae936f7f213ab260000000000000000000000000edc11c59261bc0df4bfe982aae936f7f213ab26000000000000000000000000000000000000000000000000000d181962a8f39400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10377,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8c0fe3699db673486c391a4eefa5a18c7cfd4d6000000000000000000000000e8c0fe3699db673486c391a4eefa5a18c7cfd4d60000000000000000000000000000000000000000000000000059bd223f7c06c200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1e65de2fa611ffe46c6d4df47841ff787a8163af1432b13e5e67e90bbea998d6,2022-03-22 14:28:02.000 UTC,0,true -10380,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002076a89dd5fc291ebd740a83b4ca3e8ea8909e4d0000000000000000000000002076a89dd5fc291ebd740a83b4ca3e8ea8909e4d000000000000000000000000000000000000000000000000000e14ff25ee120200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10381,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076766ce199954d2dc52e14577e2434ed00fb4bb000000000000000000000000076766ce199954d2dc52e14577e2434ed00fb4bb00000000000000000000000000000000000000000000000000001dab777c54d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10383,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007a31e57d956e539de434d1c7d8685c4971bd6fb80000000000000000000000007a31e57d956e539de434d1c7d8685c4971bd6fb8000000000000000000000000000000000000000000000000001e63e0cca6755900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10384,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003bfcfcb32ff59f173d834fa3b354d0bb7c86956f0000000000000000000000003bfcfcb32ff59f173d834fa3b354d0bb7c86956f000000000000000000000000000000000000000000000000000e045c4cff80e500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10389,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e1c63ce6d149b35ed6daba02cc354d34c9faa180000000000000000000000001e1c63ce6d149b35ed6daba02cc354d34c9faa1800000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10391,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001f8155e3886a9c97013982d38aec63c2193775d30000000000000000000000001f8155e3886a9c97013982d38aec63c2193775d3000000000000000000000000000000000000000000000000000d105fc1be372400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10392,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000459a546e809a0e0c62681c37246e38d95953aa54000000000000000000000000459a546e809a0e0c62681c37246e38d95953aa54000000000000000000000000000000000000000000000000000c15529be51da700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10393,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000bdf115e1d046d7349a661eaa251d48608e3f939e000000000000000000000000bdf115e1d046d7349a661eaa251d48608e3f939e0000000000000000000000000000000000000000000000000000000001312d0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10398,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc390424dfea40cfd543e587990b2b5f7b4cc915000000000000000000000000bc390424dfea40cfd543e587990b2b5f7b4cc915000000000000000000000000000000000000000000000000000c57c32afd240000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10399,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b4aead784c4e59ee9d1b317f82603b769bdba982000000000000000000000000b4aead784c4e59ee9d1b317f82603b769bdba98200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10400,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000306499ad40e5bdbe11f9a6d033f007ee20fe345a000000000000000000000000306499ad40e5bdbe11f9a6d033f007ee20fe345a0000000000000000000000000000000000000000000000000033edf34cb4da0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10401,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000033ef01af8b91f84e1c0c6b08bae0c5c4e65b7fc100000000000000000000000033ef01af8b91f84e1c0c6b08bae0c5c4e65b7fc1000000000000000000000000000000000000000000000000000d1b7004b4446000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10403,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002fee36c9f72e1da974805789a8b5733653d679b80000000000000000000000002fee36c9f72e1da974805789a8b5733653d679b8000000000000000000000000000000000000000000000000002588b8679d0d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10404,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f109367d4ace9ae46031b69edd5412f892d3d1d7000000000000000000000000f109367d4ace9ae46031b69edd5412f892d3d1d70000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10405,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001afb2264e1bbbf65f452626328d040eefcb92e0c0000000000000000000000001afb2264e1bbbf65f452626328d040eefcb92e0c000000000000000000000000000000000000000000000000000d380f258d8c0700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10407,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a5bd1f7a3dac45018d73f1214b87363801af7ede000000000000000000000000a5bd1f7a3dac45018d73f1214b87363801af7ede000000000000000000000000000000000000000000000000000d60bc5d1e387200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10409,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000000fe4cc87fe5cbf2fc26bf1884538ec47b5aaf012000000000000000000000000000000000000000000000000004cfb4352ddefe9,0xaa820607003db3ab74700a02f2629c7c02600022c8c0a91416627ab1c8e78d4c,2022-04-27 09:18:18.000 UTC,0,true -10410,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc9aefd6d7f074c382f193546a79491eb421a80b000000000000000000000000dc9aefd6d7f074c382f193546a79491eb421a80b00000000000000000000000000000000000000000000000000ae953c13ad3bdb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10412,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc6c17eacee54c466f081689975a861c0a7698ff000000000000000000000000dc6c17eacee54c466f081689975a861c0a7698ff00000000000000000000000000000000000000000000000000310658aa6c335b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10413,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000095529429a073b6fe1c6b21a6d92ba9879fafbdee00000000000000000000000095529429a073b6fe1c6b21a6d92ba9879fafbdee000000000000000000000000000000000000000000000000007e49daa7c5d10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10414,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000758a1e3e12ef6c74d77b4320ea4ef017ad5a4fc4000000000000000000000000758a1e3e12ef6c74d77b4320ea4ef017ad5a4fc400000000000000000000000000000000000000000000000000473f64cde6048000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10415,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e591a4be7dea045f49159cf671ed41f55191dbb1000000000000000000000000e591a4be7dea045f49159cf671ed41f55191dbb10000000000000000000000000000000000000000000000000021e3293f9efd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10416,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000047c4df460eec9929bd791792f018a795b306a2a000000000000000000000000047c4df460eec9929bd791792f018a795b306a2a000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10417,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5584e0a5e18c086e20f28eef05dcb6be676c555000000000000000000000000e5584e0a5e18c086e20f28eef05dcb6be676c55500000000000000000000000000000000000000000000000000222fe6fa62056e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10419,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7e76789cc5d88a7214c5c32121f4d1e2f0c2f77000000000000000000000000f7e76789cc5d88a7214c5c32121f4d1e2f0c2f77000000000000000000000000000000000000000000000000015b8bc5b8f0535400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x68e3c3c3665281b703e7b7596aed47a0f1601edadba36f038b70a3d8b5671f5b,2021-12-11 11:00:54.000 UTC,0,true -10420,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ccf5ef7c438b95aea40b320ac03e4c9fceba2c70000000000000000000000005ccf5ef7c438b95aea40b320ac03e4c9fceba2c700000000000000000000000000000000000000000000000000018b369621c10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10423,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f81ccb8e57b2ed0adcaf8b897c9a0f02a129189c000000000000000000000000f81ccb8e57b2ed0adcaf8b897c9a0f02a129189c000000000000000000000000000000000000000000000000006cfe6cc923b13800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10424,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009628f11c8fbf15df1307ad5284398ad7dcdf573c0000000000000000000000009628f11c8fbf15df1307ad5284398ad7dcdf573c000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10426,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000072187a33d6f951afc3c1d7755b605f02fa498b2d00000000000000000000000072187a33d6f951afc3c1d7755b605f02fa498b2d0000000000000000000000000000000000000000000000000157ee701579a06400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10429,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000efdb6a72c4481baf344d128822e8904f1f9d1720000000000000000000000000efdb6a72c4481baf344d128822e8904f1f9d17200000000000000000000000000000000000000000000000000a7edf0d93cac1300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10430,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000af7075810810db4f9a248946f5d4cdd165df4a68000000000000000000000000af7075810810db4f9a248946f5d4cdd165df4a6800000000000000000000000000000000000000000000000000599235cec2c53f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10431,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000662402017f2b470c0bc3cd2eec7d5aba295e5a80000000000000000000000000662402017f2b470c0bc3cd2eec7d5aba295e5a800000000000000000000000000000000000000000000000000031281ea042f4cd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10432,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000190145bf14bb40dd7b0ba8ed664c43cd6cbe2a88000000000000000000000000190145bf14bb40dd7b0ba8ed664c43cd6cbe2a88000000000000000000000000000000000000000000000000004546dea969c30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10433,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b9d67ddaaa7b695c4e10b24950dae1b992addae8000000000000000000000000b9d67ddaaa7b695c4e10b24950dae1b992addae80000000000000000000000000000000000000000000000000045aea0904cfc0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10436,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ed688a91f3a1a466a719dfd933e32cdd69fe92a0000000000000000000000002ed688a91f3a1a466a719dfd933e32cdd69fe92a000000000000000000000000000000000000000000000000019bf74f7eb51a2d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10437,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdefae79ca8c7ee5c7d34e45d4a63453dbc0363c000000000000000000000000bdefae79ca8c7ee5c7d34e45d4a63453dbc0363c000000000000000000000000000000000000000000000000000ecd47e32dcd7c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10438,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006abc41db02e8a2eb9bdd6fc4095325f0b2b721360000000000000000000000006abc41db02e8a2eb9bdd6fc4095325f0b2b7213600000000000000000000000000000000000000000000000000254db1c224400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10439,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf1d8a0504262f9f66ffa62beacc4102be4661f8000000000000000000000000bf1d8a0504262f9f66ffa62beacc4102be4661f8000000000000000000000000000000000000000000000000000d0c2e31ae3dfe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10440,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009e695566c9ac320367556a16af50cd272d577c7f0000000000000000000000009e695566c9ac320367556a16af50cd272d577c7f000000000000000000000000000000000000000000000000015e565549ac8b6700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10442,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000feefe20c0f5627ecd1b7b0f6d2a9a5ff0e64d3ab000000000000000000000000feefe20c0f5627ecd1b7b0f6d2a9a5ff0e64d3ab000000000000000000000000000000000000000000000000000e098a21e3f27400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10443,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e7197e7cca2355b83a33e345bc6a65c722d03630000000000000000000000001e7197e7cca2355b83a33e345bc6a65c722d036300000000000000000000000000000000000000000000000000011563f569ae0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10444,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001efabc745a24d9b957dc383f2e422203c4f2889f0000000000000000000000001efabc745a24d9b957dc383f2e422203c4f2889f000000000000000000000000000000000000000000000000000abcc4d43595c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10445,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c19d05ae498b8143a14463eb78b84a4cd71b7d53000000000000000000000000c19d05ae498b8143a14463eb78b84a4cd71b7d53000000000000000000000000000000000000000000000000000dbc30fd03389900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10446,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000256ff537f23af82ad81ab9d9f5af0135a9fc6f29000000000000000000000000256ff537f23af82ad81ab9d9f5af0135a9fc6f290000000000000000000000000000000000000000000000000156b2164c3106df00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10447,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ebf7b028d7388828c806d6dd79d776fe39e19e3c000000000000000000000000ebf7b028d7388828c806d6dd79d776fe39e19e3c000000000000000000000000000000000000000000000000001f322b984cad2200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10448,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d89b1bd184f350fdf7d14e7158b184deb236f999000000000000000000000000d89b1bd184f350fdf7d14e7158b184deb236f999000000000000000000000000000000000000000000000000000dd67a35380b2b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10449,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000004df622c2d7df728960230ec203e833034cac84610000000000000000000000004df622c2d7df728960230ec203e833034cac84610000000000000000000000000000000000000000000000000000000002faf08000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10450,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000477693335ab58bbd009b6b796f5bbeb13bd10cd0000000000000000000000000477693335ab58bbd009b6b796f5bbeb13bd10cd0000000000000000000000000000000000000000000000000000e59f15c94493a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10452,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc3bd9d13fea7ffff52b7d2e32cd64a8cf1387f3000000000000000000000000bc3bd9d13fea7ffff52b7d2e32cd64a8cf1387f3000000000000000000000000000000000000000000000000000d45234dbafca800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10453,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b684e3800bd805c14b52031467c3c42373ad65f8000000000000000000000000b684e3800bd805c14b52031467c3c42373ad65f80000000000000000000000000000000000000000000000000068de98d2dcf70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10456,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ab11283c156a1703a4f5e1aa42e9780d52bcf73f000000000000000000000000ab11283c156a1703a4f5e1aa42e9780d52bcf73f000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10457,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017680a3936ff75d52535d1e33d3e68c647e48a3300000000000000000000000017680a3936ff75d52535d1e33d3e68c647e48a33000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10458,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2a7262fc073aac863e3e48e3bcb00558093bff3000000000000000000000000a2a7262fc073aac863e3e48e3bcb00558093bff3000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10459,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000093dde3d39f3154adf86a9ab0ae6397363fc590cd00000000000000000000000093dde3d39f3154adf86a9ab0ae6397363fc590cd000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10460,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004156507bf3ade70dfa9e682b4cb1cdd8b24e705a0000000000000000000000004156507bf3ade70dfa9e682b4cb1cdd8b24e705a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10461,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b2f56984239bcb2d062bc7788ec5aab25f686fbb000000000000000000000000b2f56984239bcb2d062bc7788ec5aab25f686fbb000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10462,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000248f389281687095198ccceb16fd2b92efc8b7bd000000000000000000000000248f389281687095198ccceb16fd2b92efc8b7bd0000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10463,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000255c391f2c1c64bc135fb394362bf310e09f3328000000000000000000000000255c391f2c1c64bc135fb394362bf310e09f33280000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10464,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10465,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000a9a64cb1b4119f8db3ee530702190aa10694c24d000000000000000000000000a9a64cb1b4119f8db3ee530702190aa10694c24d000000000000000000000000000000000000000000000000000000000633d64100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10466,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fbe9c1b0f02686a8402ec81e347779a564c09c84000000000000000000000000fbe9c1b0f02686a8402ec81e347779a564c09c84000000000000000000000000000000000000000000000000000be4d61616648f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10467,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000256aa98410eb7b35bf24ee99e7524024d99a26ad000000000000000000000000256aa98410eb7b35bf24ee99e7524024d99a26ad0000000000000000000000000000000000000000000000000078cd007cd583ae00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10468,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000019971072299d8b90fdaa3db41ba90fc0025f914000000000000000000000000019971072299d8b90fdaa3db41ba90fc0025f9140000000000000000000000000000000000000000000000000000d56053960c04100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10469,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd2dc5fb8b6222d9f743b3eeec059790c07ca2a4000000000000000000000000bd2dc5fb8b6222d9f743b3eeec059790c07ca2a40000000000000000000000000000000000000000000000000005a1e6918c630000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10470,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf4b2306c778e05583a70e8292cd8b249d2f8b23000000000000000000000000cf4b2306c778e05583a70e8292cd8b249d2f8b23000000000000000000000000000000000000000000000000000ce808aa26c15400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10471,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e17e0015b6ca59718544629173ef950f71b58bf9000000000000000000000000e17e0015b6ca59718544629173ef950f71b58bf9000000000000000000000000000000000000000000000000000cd2b6fc03d92a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10472,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a8c61ac44459438cc507a374e4d795bf02dd55ba000000000000000000000000a8c61ac44459438cc507a374e4d795bf02dd55ba00000000000000000000000000000000000000000000000001988fe4052b800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10473,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021e23a038552857d2c4618b025e62c1a800bf52900000000000000000000000021e23a038552857d2c4618b025e62c1a800bf529000000000000000000000000000000000000000000000000015c2a7b13fd000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10475,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000710adece5ee716c3607352ea34736fe0a186b16b000000000000000000000000710adece5ee716c3607352ea34736fe0a186b16b000000000000000000000000000000000000000000000000000c6fc30ab9230b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10477,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003324e3701dbc3143b39ca02e3c72b88d9757cf7b0000000000000000000000003324e3701dbc3143b39ca02e3c72b88d9757cf7b000000000000000000000000000000000000000000000000000dce63a989b4e100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10478,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3be5ba3ada495ee2977e624347db8a2a79a10f7000000000000000000000000a3be5ba3ada495ee2977e624347db8a2a79a10f700000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10481,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037e7262cb909dd674e102ed54d186e27b371c88f00000000000000000000000037e7262cb909dd674e102ed54d186e27b371c88f000000000000000000000000000000000000000000000000005cd319724f977100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7430ed0891ec4564e91ebcddc1ced1ef35ce12087e9d8292a6cd82be3dbdc736,2022-05-15 04:58:05.000 UTC,0,true -10482,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e0bb9621fe9260272fa3bb754d6ad2e6d93062d0000000000000000000000004e0bb9621fe9260272fa3bb754d6ad2e6d93062d000000000000000000000000000000000000000000000000000c6fe94b550f2400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10483,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2d9240c737c2db2acacbe96d925d701893bac4d000000000000000000000000a2d9240c737c2db2acacbe96d925d701893bac4d0000000000000000000000000000000000000000000000000038f020adcc529600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10484,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000002d66f67924d41f82c5cb76f83bd08511b8c543b10000000000000000000000002d66f67924d41f82c5cb76f83bd08511b8c543b10000000000000000000000000000000000000000000000000429d069189e000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10485,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000007657b4ea5812f03232e553549ab93f54c2d38c100000000000000000000000007657b4ea5812f03232e553549ab93f54c2d38c1000000000000000000000000000000000000000000000000000c87b79f6e99e700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10487,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000051cc2245a1ef254091b081221096ca8df45410a800000000000000000000000051cc2245a1ef254091b081221096ca8df45410a8000000000000000000000000000000000000000000000000011c37937e08000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10488,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ffd7e2c88dabcdcd2c8525dfb53f133084e64c4a000000000000000000000000ffd7e2c88dabcdcd2c8525dfb53f133084e64c4a000000000000000000000000000000000000000000000000000b386ae4b49d6a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10489,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d06cb12b9c761bb73707b180637f13d08e495b71000000000000000000000000d06cb12b9c761bb73707b180637f13d08e495b71000000000000000000000000000000000000000000000000000c4ea07e3c82c500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10490,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f88196d9a8eab8c950d8233271268f9e47a26405000000000000000000000000f88196d9a8eab8c950d8233271268f9e47a26405000000000000000000000000000000000000000000000000000c8858a0eb0aed00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10491,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000083e91c72cd9fb3ab637c285127a46590cb7d3c9700000000000000000000000083e91c72cd9fb3ab637c285127a46590cb7d3c97000000000000000000000000000000000000000000000000000b8a3f66289b2500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10492,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007aaabbafdd47479d9f6a57470b83a65169b9e15b0000000000000000000000007aaabbafdd47479d9f6a57470b83a65169b9e15b000000000000000000000000000000000000000000000000000c36ad0f6c0a6600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10493,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009eb832fcc5bf2d7f29863f508c21d63fb11d1f430000000000000000000000009eb832fcc5bf2d7f29863f508c21d63fb11d1f43000000000000000000000000000000000000000000000000000cf0498673fac000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10494,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa2500bc101fdadb2226a2e41e597f28cdac39c1000000000000000000000000aa2500bc101fdadb2226a2e41e597f28cdac39c1000000000000000000000000000000000000000000000000000d9a62a278ef6b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10495,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000549b8995b9701126dd48b8dc0b46299273714c60000000000000000000000000549b8995b9701126dd48b8dc0b46299273714c600000000000000000000000000000000000000000000000001176a5c84ee058000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10496,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e8166910000000000000000000000005c3d205052b1b081b2d31b8a9caad7a7dea6690c0000000000000000000000005c3d205052b1b081b2d31b8a9caad7a7dea6690c00000000000000000000000000000000000000000000000019db110828b7993200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10497,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b5860fb66477149695d65c3dbf3483a89853398d000000000000000000000000b5860fb66477149695d65c3dbf3483a89853398d0000000000000000000000000000000000000000000000000098c445ad57800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10499,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a7ce80b7681693de60bc0e1e5d5ad37080523990000000000000000000000000a7ce80b7681693de60bc0e1e5d5ad3708052399000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10500,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000683cb0cfb74d7ae69af0b1b7c747fe916bd51612000000000000000000000000683cb0cfb74d7ae69af0b1b7c747fe916bd51612000000000000000000000000000000000000000000000000003d6c3e0395d93700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10501,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000239884357cdf794825d17433d7e53f2a2dd282f6000000000000000000000000239884357cdf794825d17433d7e53f2a2dd282f60000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xc70d8e9f68f5fbc6675ee7cec19d2a45eb2b2ef83026c388f55e20f3a74e13b0,2022-02-25 11:13:44.000 UTC,0,true -10504,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000e8ea1dcaf34ca901b9702d32cf47cc4ad5fad63b000000000000000000000000e8ea1dcaf34ca901b9702d32cf47cc4ad5fad63b000000000000000000000000000000000000000000000000000000004d408f6d00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10506,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000884fd3cc1440ab13451fbbab18317b784930e7f2000000000000000000000000884fd3cc1440ab13451fbbab18317b784930e7f20000000000000000000000000000000000000000000000003782dace9d90000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10507,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f82e9b159e39dbac277bd3041be6b1e240676fa6000000000000000000000000f82e9b159e39dbac277bd3041be6b1e240676fa60000000000000000000000000000000000000000000000000053d101b53d989000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10508,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000006b77ba93c90918e8183015e1d34ea560849c65d20000000000000000000000006b77ba93c90918e8183015e1d34ea560849c65d200000000000000000000000000000000000000000000000000000000004c4b4000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10509,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000087e897fe3270ceaf6d6fda5d7244a9656814d4c4000000000000000000000000000000000000000000000000165b2c3acd098ef4,,,1,true -10511,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000030a07e234288d0f0da72222f76b9f838d8f35f2d00000000000000000000000030a07e234288d0f0da72222f76b9f838d8f35f2d00000000000000000000000000000000000000000000000000482515a12529b900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10512,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000000c0f6e714ea96c4b984e03ef848b50e2ad5c1a450000000000000000000000000c0f6e714ea96c4b984e03ef848b50e2ad5c1a450000000000000000000000000000000000000000000000000000000009740b4000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xba38e66c9e7f453fd9c074496c2066714d62cfa797149f60880217d696acb3ec,2022-08-25 06:53:31.000 UTC,0,true -10513,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000626a06dfd07e6c74ad68ee1ccad71db0081f7069000000000000000000000000626a06dfd07e6c74ad68ee1ccad71db0081f7069000000000000000000000000000000000000000000000000000000000814c96000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x9e901d5a425313528d890a106cf0b51d487b1a5d55e7e8be17f4344b9df35e37,2022-08-24 06:15:50.000 UTC,0,true -10515,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000682057e6e33d5d7beff7d95215273abe218b02b9000000000000000000000000682057e6e33d5d7beff7d95215273abe218b02b900000000000000000000000000000000000000000000000000007c923688bb8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10516,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cb165605142b60ef97688dc8890cebda3a31b694000000000000000000000000cb165605142b60ef97688dc8890cebda3a31b6940000000000000000000000000000000000000000000000000000a32de099514000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10517,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000004bad03f2cf3e05dcd033b19cfc5da26a05a2d5700000000000000000000000004bad03f2cf3e05dcd033b19cfc5da26a05a2d57000000000000000000000000000000000000000000000000000000000848f8c000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x27cf4d03d91db3520338bb12d1eff2faa381bfa0ba18a518c15a5640d78273e1,2022-08-22 06:07:25.000 UTC,0,true -10518,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000073a0afc565454f4618d07732a79471d60486338a00000000000000000000000073a0afc565454f4618d07732a79471d60486338a00000000000000000000000000000000000000000000000000000000081b320000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xfc9bfe03844c563a153037d86c44fc92202695976d2b99e2b502d9db13b48aa9,2022-08-22 07:07:53.000 UTC,0,true -10519,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c677d82671ab99fb881d7bd22d597d29c7b5ae60000000000000000000000000c677d82671ab99fb881d7bd22d597d29c7b5ae6000000000000000000000000000000000000000000000000003f3d6c9baf193c300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10520,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000009b9c9bc11ece77edbead7d545eb9d1ca6bd115d00000000000000000000000009b9c9bc11ece77edbead7d545eb9d1ca6bd115d00000000000000000000000000000000000000000000000000000000074096ab00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xdfae0b1dd1347b0aaac615c011664c988e9ba287d9ff18e6695eebdadc120147,2022-08-23 07:02:18.000 UTC,0,true -10521,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e818f9e0023a1a19c0da79a33b8d02dd993006ea000000000000000000000000e818f9e0023a1a19c0da79a33b8d02dd993006ea00000000000000000000000000000000000000000000000000a595b521f57dd400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x18aa0dd5c651a7cc4efa53bd41d487dc73b1260f24eee57734fcfdfcab2c905f,2022-03-09 14:38:36.000 UTC,0,true -10522,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e17c5cec6cb7587c28f2b9a16a93c97e4d93e871000000000000000000000000e17c5cec6cb7587c28f2b9a16a93c97e4d93e8710000000000000000000000000000000000000000000000000032cdc63449c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9b7dc8ee74002073518c84ec070c46d77659d281a9125a4b468e62c9cef2e4ed,2022-06-20 22:48:49.000 UTC,0,true -10523,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0e2e1edbe4029e55bd217f82724420023b90cd4000000000000000000000000b0e2e1edbe4029e55bd217f82724420023b90cd4000000000000000000000000000000000000000000000000004411d696c3ebb200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10528,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000912026a2b3c52984830a1848ef5828d1dccc0c0b000000000000000000000000912026a2b3c52984830a1848ef5828d1dccc0c0b0000000000000000000000000000000000000000000000000021f9d07a4f900000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xb3e80fbfa8bfc01b732523605a5f456dec59f38bf7841ddc57128f9081bfdb77,2022-05-28 21:46:40.000 UTC,0,true -10529,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000349ea0b723e3692a2ddcc0ae5cc85640f372ffd1000000000000000000000000349ea0b723e3692a2ddcc0ae5cc85640f372ffd1000000000000000000000000000000000000000000000000005af5a38e20373900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10530,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007394dd6e970ecce75b1c36631c170d66aa172fc60000000000000000000000007394dd6e970ecce75b1c36631c170d66aa172fc60000000000000000000000000000000000000000000000000001c77c45f0ed0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10531,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d1453c1310846ec5ba080fcb1d3e128e9d124745000000000000000000000000d1453c1310846ec5ba080fcb1d3e128e9d124745000000000000000000000000000000000000000000000000007e6f918cce6e5100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10533,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2fc64900dc0591e2bc8d8dcca8f758115bab519000000000000000000000000a2fc64900dc0591e2bc8d8dcca8f758115bab51900000000000000000000000000000000000000000000000000ad0b7ac8eb48f500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x0070034200f7acf6ef113110b661f31c2f46a5ece2cbbe4b1be864448e7edd0e,2022-04-25 09:07:01.000 UTC,0,true -10536,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000b2dd50d400d4e82768c4204bad49cde6186356e5000000000000000000000000b2dd50d400d4e82768c4204bad49cde6186356e5000000000000000000000000000000000000000000000000000000003c0c43f500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x22985cd7f07143938f0b0c1767d52715335bd4c0d2a2cadb87e9a1d751263bb2,2022-04-30 04:55:41.000 UTC,0,true -10537,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000001d3476db54dd1058b6d8a5bf8748cf1b8a7813e90000000000000000000000001d3476db54dd1058b6d8a5bf8748cf1b8a7813e90000000000000000000000000000000000000000000000000000000044d7081800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x4fe5f45375db48c4c88b130bf8a0131be183ce0e6d823c43f3e6e88660895d4e,2022-04-29 08:54:00.000 UTC,0,true -10540,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000230221cae667969b423a3cf335891f30b1829caa000000000000000000000000230221cae667969b423a3cf335891f30b1829caa00000000000000000000000000000000000000000000000002c68af0bb14000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10543,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d308cc699614de8cf75c89f7ea6c604a59f216c2000000000000000000000000d308cc699614de8cf75c89f7ea6c604a59f216c2000000000000000000000000000000000000000000000000001fcb992932d3a800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10544,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c184e921d0c51ea0c12194050f2791d23f991f68000000000000000000000000c184e921d0c51ea0c12194050f2791d23f991f680000000000000000000000000000000000000000000000000374fead7ea2e92d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10546,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f275599564fd00281c450ee6c50f03214fce8960000000000000000000000007f275599564fd00281c450ee6c50f03214fce8960000000000000000000000000000000000000000000000000003f53fbd6e500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10549,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ca58d8c7635e1f555aaa1bc522e4b9be477a0ed0000000000000000000000004ca58d8c7635e1f555aaa1bc522e4b9be477a0ed00000000000000000000000000000000000000000000000001aa535d3d0c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10551,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000064e6d480acc5944c90e4c7d04f56f8099f6d317300000000000000000000000064e6d480acc5944c90e4c7d04f56f8099f6d3173000000000000000000000000000000000000000000000000015a31782aad37be00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10554,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b7d865c7c63d758db991b191e9c80c3867b34b8e000000000000000000000000b7d865c7c63d758db991b191e9c80c3867b34b8e0000000000000000000000000000000000000000000000000033c4d66561629d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10555,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000085ae5cade318b59742c490fc07490e298a4e6d8400000000000000000000000085ae5cade318b59742c490fc07490e298a4e6d84000000000000000000000000000000000000000000000000001a8e16e89354b100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10556,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b1a3fdae3c2f48f3b943cc2c1234e4b3d77a1d6e000000000000000000000000b1a3fdae3c2f48f3b943cc2c1234e4b3d77a1d6e00000000000000000000000000000000000000000000000000857179ebcc3c4900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10557,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ea9b8ba0d889ba42458f657ed27244ad593dfe70000000000000000000000007ea9b8ba0d889ba42458f657ed27244ad593dfe7000000000000000000000000000000000000000000000000004fb3de9058e0db00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10558,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000748bef7395e2559d83374e820e598213dd547773000000000000000000000000748bef7395e2559d83374e820e598213dd5477730000000000000000000000000000000000000000000000000066819177a2487d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10560,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fddbc85a20014ee4e6cad2fcd1b925ae6cd5f61b000000000000000000000000fddbc85a20014ee4e6cad2fcd1b925ae6cd5f61b00000000000000000000000000000000000000000000000000c6f3b40b6c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10564,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bce09efa4d3297e63f4deb685c2cf73af0019617000000000000000000000000bce09efa4d3297e63f4deb685c2cf73af00196170000000000000000000000000000000000000000000000000000dde123eb400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10566,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000057aa3edb78fea6a5adb99e285597d7a8edcc41f400000000000000000000000057aa3edb78fea6a5adb99e285597d7a8edcc41f4000000000000000000000000000000000000000000000000005f264b590d273c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10568,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000854d7b23d48377b2e658685909668b7683f5d983000000000000000000000000854d7b23d48377b2e658685909668b7683f5d983000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10571,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ec6295bf707b896efe73fb9f9a8aca0855c22460000000000000000000000006ec6295bf707b896efe73fb9f9a8aca0855c22460000000000000000000000000000000000000000000000000070413f59fa067900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10572,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d70804c92a0660bc8e6420e6755f87cb96f5bd4e000000000000000000000000d70804c92a0660bc8e6420e6755f87cb96f5bd4e000000000000000000000000000000000000000000000000004214e94911e3b800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10591,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8c907430e1ed83797e0a8bf1eda14a8087cac92000000000000000000000000e8c907430e1ed83797e0a8bf1eda14a8087cac92000000000000000000000000000000000000000000000000005905de0ba3703700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10593,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f973582d2966d752285caacd17e153b393914357000000000000000000000000f973582d2966d752285caacd17e153b39391435700000000000000000000000000000000000000000000000000bc4b381d18800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10596,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ad5fddadf2507c54115b1d7fca7d1e5885edfaaa000000000000000000000000ad5fddadf2507c54115b1d7fca7d1e5885edfaaa000000000000000000000000000000000000000000000000001f2a397460490000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10597,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d880ec117a107eec557ebb84dfa7e88a69a2377a0000000000000000000000000000000000000000000000391207eb67e7b78540,,,1,true -10599,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f436f60887a30a44a1bf4c935dda240121eedaf1000000000000000000000000f436f60887a30a44a1bf4c935dda240121eedaf1000000000000000000000000000000000000000000000000000e8b90a4e56e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10600,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c805ef4eef0b47a7084530603fb41225e24da42f000000000000000000000000c805ef4eef0b47a7084530603fb41225e24da42f000000000000000000000000000000000000000000000000000f1c277a4f9d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10601,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000af8ffe93bc58efe850fee556ccca7698927a2112000000000000000000000000af8ffe93bc58efe850fee556ccca7698927a2112000000000000000000000000000000000000000000000000007b43635b4d0f9800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10602,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000052bbcd3ebfd6183852ee91b39efd5a07caa0d50000000000000000000000000052bbcd3ebfd6183852ee91b39efd5a07caa0d50000000000000000000000000000000000000000000000000000772a204ba62fee00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10604,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003317b15136eaa9e17ffadad0aa911fb8ec37e7690000000000000000000000003317b15136eaa9e17ffadad0aa911fb8ec37e769000000000000000000000000000000000000000000000000004281813a5a123700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10605,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000788600fac3c4e2f72ce0961827442b310b5f4f62000000000000000000000000788600fac3c4e2f72ce0961827442b310b5f4f62000000000000000000000000000000000000000000000000002d5d5dc048abd500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10608,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006fb57707d462679fd44a22a5afeb965f201fefd50000000000000000000000006fb57707d462679fd44a22a5afeb965f201fefd50000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10609,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a19c369eeae40e88c75cea6583c57962f88f061c000000000000000000000000a19c369eeae40e88c75cea6583c57962f88f061c0000000000000000000000000000000000000000000000000002d79883d2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10610,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007209533bac94838146af34bdc4d97af96e6a42ca0000000000000000000000007209533bac94838146af34bdc4d97af96e6a42ca0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10611,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b1fe2cbc08935d3bc4f4e0f3bcc61296312e5d70000000000000000000000002b1fe2cbc08935d3bc4f4e0f3bcc61296312e5d70000000000000000000000000000000000000000000000000007d0e36a81800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10612,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017549fed7c40297742e14ae86d75e99627c9686100000000000000000000000017549fed7c40297742e14ae86d75e99627c96861000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10613,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f21050d9e3f52eafee77eeccf753d20a0bcbc5ff000000000000000000000000f21050d9e3f52eafee77eeccf753d20a0bcbc5ff0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10614,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae61eefc847e057d08dce23f7a1f7dddbf2f3783000000000000000000000000ae61eefc847e057d08dce23f7a1f7dddbf2f378300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10616,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d15472d58e1bf8fbfa4a9f87c5f3d4108d965b8f000000000000000000000000000000000000000000000017c1f1c18e6c8bc583,0x8553b02a7a241a02994414581bf56cf2dd1b762f5bab83bcd5897412a774edd5,2022-01-29 10:20:17.000 UTC,0,true -10617,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea3088c92ccf0874c6a13062745fc6b1552a1a87000000000000000000000000ea3088c92ccf0874c6a13062745fc6b1552a1a87000000000000000000000000000000000000000000000000000245d5b034760000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10618,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f300000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10619,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000206884cad656298f3cb333b4a9afaadd085381e8000000000000000000000000206884cad656298f3cb333b4a9afaadd085381e800000000000000000000000000000000000000000000000000169f974d37920000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10620,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a01760f3a473ef7d917fe48a39a99e648089d2b0000000000000000000000005a01760f3a473ef7d917fe48a39a99e648089d2b00000000000000000000000000000000000000000000000000ab85862f797f1200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10621,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009ccd71558efe1fcf62ae92c033fb710b626036e00000000000000000000000009ccd71558efe1fcf62ae92c033fb710b626036e000000000000000000000000000000000000000000000000000aae0bbc225b5b000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xc057389c91718fc4052ad5102e8aad21e33151a234933c7e20259c0218698fe9,2021-12-12 08:54:48.000 UTC,0,true -10622,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008469ad2042364ad39d0318849c6865e435c527230000000000000000000000008469ad2042364ad39d0318849c6865e435c52723000000000000000000000000000000000000000000000000004bd5997de745b400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10623,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039626030e577b306a931772d553bbbfc941295bc00000000000000000000000039626030e577b306a931772d553bbbfc941295bc00000000000000000000000000000000000000000000000000228f9def75ef9f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10626,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a5cee6dd64166899a5fd92d9f2bb6a6c407f3ffb000000000000000000000000a5cee6dd64166899a5fd92d9f2bb6a6c407f3ffb000000000000000000000000000000000000000000000000003707e3732583a200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10627,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9fef11e493a712dc9b3b9f9d970bee8a763f177000000000000000000000000c9fef11e493a712dc9b3b9f9d970bee8a763f177000000000000000000000000000000000000000000000000003fae3c9139be3000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10628,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f31241fdd27965db448393e80bc8a6cc107c1e70000000000000000000000000f31241fdd27965db448393e80bc8a6cc107c1e700000000000000000000000000000000000000000000000000041a8308b94c50e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10629,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000fafd58b0f488a6df3d583ee684ca2b77049b0c90000000000000000000000000fafd58b0f488a6df3d583ee684ca2b77049b0c9000000000000000000000000000000000000000000000000003742d4b208a5c900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10630,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b709fba2035eb9941afc53f21acf2c4f78cda8b0000000000000000000000000b709fba2035eb9941afc53f21acf2c4f78cda8b000000000000000000000000000000000000000000000000000ad55b9cef52f0500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10631,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000072dc02b8168f36d2d51fd40a6b8a553eeb638a8500000000000000000000000072dc02b8168f36d2d51fd40a6b8a553eeb638a8500000000000000000000000000000000000000000000000000290f90fd5169ef00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10633,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a26429316a286f629c2833db44f780f3092ee480000000000000000000000002a26429316a286f629c2833db44f780f3092ee480000000000000000000000000000000000000000000000000041084dff6409c900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10634,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004f8fc4816bbb2c992a149cdacd05f7839663e6ff0000000000000000000000004f8fc4816bbb2c992a149cdacd05f7839663e6ff00000000000000000000000000000000000000000000000001f9e80ba804000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10635,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e0ae3197635e6f4106515050800feecb61de79b0000000000000000000000000e0ae3197635e6f4106515050800feecb61de79b0000000000000000000000000000000000000000000000000003ff6627eec8ac100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10636,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000064e143009e01fc9887779a80256e2b65771e8a1c00000000000000000000000064e143009e01fc9887779a80256e2b65771e8a1c000000000000000000000000000000000000000000000000001bb934ea07b7c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10637,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009bab8a8719351ea0ae583e2c80e869d9926f27830000000000000000000000009bab8a8719351ea0ae583e2c80e869d9926f27830000000000000000000000000000000000000000000000000030071d0b858f8900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10638,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000215836ae9dbe97fba1f18bf6ff6a2ebf0f6a98d2000000000000000000000000215836ae9dbe97fba1f18bf6ff6a2ebf0f6a98d20000000000000000000000000000000000000000000000000011c2f60abd428000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10639,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f170020148f41ba8e0e00b43cf6a807090c9f970000000000000000000000002f170020148f41ba8e0e00b43cf6a807090c9f9700000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10640,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000512298d291dc51246db4c7a8fd4079b3e384524d000000000000000000000000512298d291dc51246db4c7a8fd4079b3e384524d00000000000000000000000000000000000000000000000000ab9eeb8fd3645500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xfdf38331b64e54a4ccb4ec7172e6feda3d894b43cda27ef7b2467c4e323dc7b6,2021-12-12 08:58:00.000 UTC,0,true -10641,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000006f8fb853d9aec922fc467cb09837042a858760100000000000000000000000006f8fb853d9aec922fc467cb09837042a858760100000000000000000000000000000000000000000000000000ba8c309f6f5f4100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10642,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000052d0fc1cab209eebbff485b93fe7d8d88f6c0d2900000000000000000000000052d0fc1cab209eebbff485b93fe7d8d88f6c0d290000000000000000000000000000000000000000000000000853a0d2313c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x97349f6f704e26d991eb01e711fefbf20e7e225c05a75bb89882b9f2aead1acf,2021-12-13 00:54:06.000 UTC,0,true -10643,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a77d40ab6ccfb109291ac584087cee05438b8830000000000000000000000002a77d40ab6ccfb109291ac584087cee05438b883000000000000000000000000000000000000000000000000001172465f55c65800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10645,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c2039de34d52fcbc6f7ffcb30c16048af919aaf7000000000000000000000000c2039de34d52fcbc6f7ffcb30c16048af919aaf700000000000000000000000000000000000000000000000000714006c9390b5400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10650,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004d03aea34ffefd6af6cc154b3f03501ae083fb920000000000000000000000004d03aea34ffefd6af6cc154b3f03501ae083fb92000000000000000000000000000000000000000000000000136dcc951d8c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10651,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c8289523abfa9e2fecc53a73d041adcbb3bea5ab000000000000000000000000c8289523abfa9e2fecc53a73d041adcbb3bea5ab000000000000000000000000000000000000000000000000015a6ebb4c170d7800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10655,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a92959842ceecd4a49a36de06d7fde1050c65fb5000000000000000000000000a92959842ceecd4a49a36de06d7fde1050c65fb500000000000000000000000000000000000000000000000000407858abf690c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10658,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000283c3524dca01f348303988d98613e5ad61e6d65000000000000000000000000283c3524dca01f348303988d98613e5ad61e6d6500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10659,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a2235e33e7ed5e95a508ba2ca6947aa85af4f620000000000000000000000003a2235e33e7ed5e95a508ba2ca6947aa85af4f62000000000000000000000000000000000000000000000000000894d492e2cd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10660,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000505a194a0c4dbb3915f60aa7f949720800738fb1000000000000000000000000505a194a0c4dbb3915f60aa7f949720800738fb100000000000000000000000000000000000000000000000000080bb781b9234000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10661,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000073965314f82945b88132330de1dcad4c89c943de00000000000000000000000073965314f82945b88132330de1dcad4c89c943de0000000000000000000000000000000000000000000000000007f36eedb52b4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10662,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bb527a976b904307d62d8230b91bf54d219e029a000000000000000000000000bb527a976b904307d62d8230b91bf54d219e029a0000000000000000000000000000000000000000000000000007a6ed36fd3b4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10663,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006663d8b52d878cdc92e8c63e61f4d8c6d13314d70000000000000000000000006663d8b52d878cdc92e8c63e61f4d8c6d13314d7000000000000000000000000000000000000000000000000009faeaa0ae971c200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10664,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007da0047f7801d88cd6d3731c75621a2d03eaf4410000000000000000000000007da0047f7801d88cd6d3731c75621a2d03eaf4410000000000000000000000000000000000000000000000000007fabee30d3b4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10665,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d88d6c3e5721099a64674a347f145f6859b671f6000000000000000000000000d88d6c3e5721099a64674a347f145f6859b671f600000000000000000000000000000000000000000000000000080eb99815f64000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10666,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ead2cf05f3e772d3345b1daa24bca46b9f809a52000000000000000000000000ead2cf05f3e772d3345b1daa24bca46b9f809a520000000000000000000000000000000000000000000000000007ff2c30a8fe4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10667,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000513644f432e4ce7fb8578617af90cc072ae1f80b000000000000000000000000513644f432e4ce7fb8578617af90cc072ae1f80b0000000000000000000000000000000000000000000000000007ece44b4cd64000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10668,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000803aade81954d851c1d72ae5b7204bfa505031b5000000000000000000000000803aade81954d851c1d72ae5b7204bfa505031b500000000000000000000000000000000000000000000000000094bb191baa7e000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10669,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000026583cf3a90d69277c8c9d46c0fe3734ec7f5d5c00000000000000000000000026583cf3a90d69277c8c9d46c0fe3734ec7f5d5c0000000000000000000000000000000000000000000000000008650de0f7c64000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10670,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9521819a9de0ba71e802a02304dc3c557af2549000000000000000000000000c9521819a9de0ba71e802a02304dc3c557af2549000000000000000000000000000000000000000000000000004b510eade99eba00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10671,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba8c244aeb70d524ecac46fe2f48d80cb66abc6b000000000000000000000000ba8c244aeb70d524ecac46fe2f48d80cb66abc6b0000000000000000000000000000000000000000000000000008a3ece10cb14000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10672,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000053834efefba6623225ea7b58fa764e76dfe8912c00000000000000000000000053834efefba6623225ea7b58fa764e76dfe8912c0000000000000000000000000000000000000000000000000003f4c999daf74000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10673,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a81742216906c904e9b94ab9872e50993eae4fe0000000000000000000000006a81742216906c904e9b94ab9872e50993eae4fe00000000000000000000000000000000000000000000000000ab76f2164a1f9500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x551d730adbbb91e5661cf74b5d20a3f2d894bd1157c05c6a9e1f92b575c6342a,2021-12-12 08:46:54.000 UTC,0,true -10674,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bb1bcb22ea8a88dcb63a4f7e5a00afe6e859f709000000000000000000000000bb1bcb22ea8a88dcb63a4f7e5a00afe6e859f7090000000000000000000000000000000000000000000000000022c466a2035d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10677,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc8afb40b6f6897b66830a763c2c589dcc97136a000000000000000000000000dc8afb40b6f6897b66830a763c2c589dcc97136a000000000000000000000000000000000000000000000000009fd989cee184d900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10678,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007e993a1f4b615138114825e4055ad9212d5d08680000000000000000000000007e993a1f4b615138114825e4055ad9212d5d086800000000000000000000000000000000000000000000000001bf192137f5338600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5d08bf1a4071bbee69ee3f6bc5ec69724ecbba985c40a257533958e5e0b94b32,2022-03-06 15:01:30.000 UTC,0,true -10679,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e8166910000000000000000000000000fdf96094afc4c1f87b24d793af0ba987c1ab6540000000000000000000000000fdf96094afc4c1f87b24d793af0ba987c1ab654000000000000000000000000000000000000000000000003955a98b826e4a42700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10680,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f6be3816ca29e641bd532aa089672a0d306e3012000000000000000000000000f6be3816ca29e641bd532aa089672a0d306e301200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10681,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d777ad175dd8aba028101fda9c9ed322e34b221e000000000000000000000000d777ad175dd8aba028101fda9c9ed322e34b221e000000000000000000000000000000000000000000000000005529d1d9744b4800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10683,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000c84bc2a90de4e0b95fc40a464f364401e13e53800000000000000000000000000000000000000000000000000dc4afd08074d154,,,1,true -10684,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006120719070c7f83592c166a056d2c728fb063e4d0000000000000000000000006120719070c7f83592c166a056d2c728fb063e4d0000000000000000000000000000000000000000000000000021dc72f557b50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10686,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d84c2fdf2f8733a5bbea65eec0bb211947792871000000000000000000000000000000000000000000000003db19d6b436d44c3a,,,1,true -10688,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003fa0f53fc06dc5d7df77505dea6e96cdd6e99b050000000000000000000000003fa0f53fc06dc5d7df77505dea6e96cdd6e99b0500000000000000000000000000000000000000000000000001253464d17cd85400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10690,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9e197deb88d82e2d45f29c396dbfd94bc8212ea000000000000000000000000c9e197deb88d82e2d45f29c396dbfd94bc8212ea00000000000000000000000000000000000000000000000000830668df772eb000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x70ec5aeaee850328fb932907675776614c2705cc3d362db8858a9ce890948f40,2022-05-14 21:04:54.000 UTC,0,true -10691,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f436f60887a30a44a1bf4c935dda240121eedaf1000000000000000000000000f436f60887a30a44a1bf4c935dda240121eedaf100000000000000000000000000000000000000000000000000004242a72cb60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10692,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000031bae26218f30dbbb1db787233fa71fa7d1b8cc000000000000000000000000031bae26218f30dbbb1db787233fa71fa7d1b8cc0000000000000000000000000000000000000000000000000000fe6a29060990000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10693,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000988b5a5e972fbedcba97968f927ed31054715a81000000000000000000000000988b5a5e972fbedcba97968f927ed31054715a81000000000000000000000000000000000000000000000000001007a2d2e9bb0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10694,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006503558d76d2672b2870883fdf96d45f698c2e000000000000000000000000006503558d76d2672b2870883fdf96d45f698c2e00000000000000000000000000000000000000000000000000000f96edde52220000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10695,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f5b241d83c7244861d642e519bc47fd84b4518cd000000000000000000000000f5b241d83c7244861d642e519bc47fd84b4518cd0000000000000000000000000000000000000000000000000010083203c5010000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10696,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000548c25259f8652eb25379c6affbcb5b8091d67f1000000000000000000000000548c25259f8652eb25379c6affbcb5b8091d67f10000000000000000000000000000000000000000000000000010083203c5010000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10697,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000113b448a88727d28cf4f54f27c9c0acab1990f45000000000000000000000000113b448a88727d28cf4f54f27c9c0acab1990f45000000000000000000000000000000000000000000000000000fb403cadc5a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10698,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f8afd5b1a75877af89bcd6e0800ae109078576a0000000000000000000000007f8afd5b1a75877af89bcd6e0800ae109078576a000000000000000000000000000000000000000000000000000fb403cadc5a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10699,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005e18f002cfeed23e630ca25007905db0197649420000000000000000000000005e18f002cfeed23e630ca25007905db019764942000000000000000000000000000000000000000000000000000fc0999622010000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10700,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a969330b6ce9393a8227153e3f7fe7b90314c9d0000000000000000000000004a969330b6ce9393a8227153e3f7fe7b90314c9d000000000000000000000000000000000000000000000000000f823bcea1040000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10701,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017bce7876ea7a11ee9ebd5c00eff32adb4ccb70800000000000000000000000017bce7876ea7a11ee9ebd5c00eff32adb4ccb7080000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10703,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a83e84a9d7073b7f219fb397cc7d512342def56f000000000000000000000000a83e84a9d7073b7f219fb397cc7d512342def56f0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10704,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fa26023bbc43247722e21af76a5c5821a63ae712000000000000000000000000fa26023bbc43247722e21af76a5c5821a63ae7120000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10706,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000007812ab25fd042bc7cd1b6cc2a51554c3b6ce28b00000000000000000000000007812ab25fd042bc7cd1b6cc2a51554c3b6ce28b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10707,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000faf8a58c781476f9a7be7bc9399c39d22243b2f8000000000000000000000000faf8a58c781476f9a7be7bc9399c39d22243b2f80000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10708,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006adb60a1683997c914eca540916d44ece685675c0000000000000000000000006adb60a1683997c914eca540916d44ece685675c0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10709,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f967d75fd0e579b7cc68568e47663894206d7ef0000000000000000000000008f967d75fd0e579b7cc68568e47663894206d7ef0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10712,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000a3cb5b568529b27e93ae726c7d8aef18cd55162100000000000000000000000000000000000000000000000019d72bb383476094,,,1,true -10713,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000030548feb73b495391e409866e84cceb5adee973000000000000000000000000030548feb73b495391e409866e84cceb5adee9730000000000000000000000000000000000000000000000000001efc410027c5c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10714,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009ead5e6e90440e69b5f28fef5942a5b273387c130000000000000000000000009ead5e6e90440e69b5f28fef5942a5b273387c13000000000000000000000000000000000000000000000000015ad327aec96a5a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10716,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d45b2e4bad581fe6b43cc6d6532487d8986c6d38000000000000000000000000d45b2e4bad581fe6b43cc6d6532487d8986c6d380000000000000000000000000000000000000000000000000044886a2dc3280000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10717,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000165e4b9ab6cdf7d6920c8594e5ef63cd62255ca7000000000000000000000000165e4b9ab6cdf7d6920c8594e5ef63cd62255ca70000000000000000000000000000000000000000000000000068b4ed1b0d180000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10719,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d9f059459e64d3c1d11fa73381f75f297359de40000000000000000000000000d9f059459e64d3c1d11fa73381f75f297359de40000000000000000000000000000000000000000000000000009ce63668caa2ad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10720,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b47fee8ff0436deadbf0cb5d65275165967e2c43000000000000000000000000b47fee8ff0436deadbf0cb5d65275165967e2c4300000000000000000000000000000000000000000000000000a90b94052cc6fb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10721,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6304410e1e130f092c6a37c7e10811788e6e10d000000000000000000000000d6304410e1e130f092c6a37c7e10811788e6e10d000000000000000000000000000000000000000000000000005250b6b89f6e8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10725,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a1851237ebd4883376d6bd603eca2d169b6f2b20000000000000000000000005a1851237ebd4883376d6bd603eca2d169b6f2b200000000000000000000000000000000000000000000000000337d0ec07ce08f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10727,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071d8e8b2a0098869d60793a2af743e414da22b4600000000000000000000000071d8e8b2a0098869d60793a2af743e414da22b4600000000000000000000000000000000000000000000000000acfb4c0a1d200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10731,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000c05bc25eaa52a23476e113b9a139a66e7473b3640000000000000000000000000000000000000000000000011d947904d826cfc0,,,1,true -10732,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cb61edc2007b476e44be5bbe81486247425e5f8b000000000000000000000000cb61edc2007b476e44be5bbe81486247425e5f8b0000000000000000000000000000000000000000000000000025c548655c4e3300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10735,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000b91b076e014a9b127fe2e5084786c27ecaff8409000000000000000000000000000000000000000000000003777cdc3d984bd92b,0x4a6eaf3e6b9e91a4ad73e1c4b52674062fe57653d5202f2d8a86e77b146e3b3c,2022-03-21 06:12:35.000 UTC,0,true -10736,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000092765c4301ae115861a79cc015603bc8ce6510c900000000000000000000000092765c4301ae115861a79cc015603bc8ce6510c90000000000000000000000000000000000000000000000000051ba90f3bec35c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10738,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d682c7a14f0821c7bf1bd0349210167d394034c0000000000000000000000005d682c7a14f0821c7bf1bd0349210167d394034c00000000000000000000000000000000000000000000000002bc56b04fbe5d0600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10739,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000009923338e76f7e853d93a3a5a4924f046ec7550e00000000000000000000000009923338e76f7e853d93a3a5a4924f046ec7550e0000000000000000000000000000000000000000000000000402bbf80416800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10740,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000060606e92777b6097a2c4d19c79433837f725c5bb00000000000000000000000060606e92777b6097a2c4d19c79433837f725c5bb00000000000000000000000000000000000000000000000000217421dd99360000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10760,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001d6b74d149c2ed9a43125891308fea3a223694d80000000000000000000000001d6b74d149c2ed9a43125891308fea3a223694d800000000000000000000000000000000000000000000000000d2b6a9390b2e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10763,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000042ba2a84c1440290d9d66bea78248db81c160a6400000000000000000000000042ba2a84c1440290d9d66bea78248db81c160a6400000000000000000000000000000000000000000000000a687c606904d4433a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10766,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000042103c5793d4998c8da3203e541c7692c0bcb81700000000000000000000000042103c5793d4998c8da3203e541c7692c0bcb81700000000000000000000000000000000000000000000000001510e804f39ea9400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10767,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000834344cfa5956899997fb1a70fd17f7f87572f8d000000000000000000000000834344cfa5956899997fb1a70fd17f7f87572f8d00000000000000000000000000000000000000000000000000000000007a120000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10768,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a2c3596d664f5a0e59580c2bd3000fc9a7d5bb20000000000000000000000004a2c3596d664f5a0e59580c2bd3000fc9a7d5bb200000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10769,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000093b514be39415f6c746f57de8d7d50d686d7ae3600000000000000000000000093b514be39415f6c746f57de8d7d50d686d7ae360000000000000000000000000000000000000000000000000083af25b864b23900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10772,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000007c6b4a3202e1ed3f6fe94c78b12ba261968aaa400000000000000000000000007c6b4a3202e1ed3f6fe94c78b12ba261968aaa400000000000000000000000000000000000000000000000001382a0c1448958000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10773,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bfe0b47d3155d85318aecdef21caa8adf80e88dc000000000000000000000000bfe0b47d3155d85318aecdef21caa8adf80e88dc000000000000000000000000000000000000000000000000009a11c329b8931e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7fd65b2c3b9a8224ce2af42f646f251d77a0bc186983fe566dcd91a7c8388a07,2022-06-21 09:55:57.000 UTC,0,true -10774,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000384fd7b2211b37fbf8506b3e9b29de1c98b5bef1000000000000000000000000384fd7b2211b37fbf8506b3e9b29de1c98b5bef1000000000000000000000000000000000000000000000000007c58508723800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2b8015779ee7294e31f6570302c6ce794eb41c32705867ac5e828ac5e4158e07,2022-06-07 12:49:08.000 UTC,0,true -10776,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a0628df86fee0fdb325b813c9c3dd8f0ec67e002000000000000000000000000a0628df86fee0fdb325b813c9c3dd8f0ec67e002000000000000000000000000000000000000000000000000000bab94d478990000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10777,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f0a4cd57ac7e75b92d8b23881e99d73b24946bd4000000000000000000000000f0a4cd57ac7e75b92d8b23881e99d73b24946bd4000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10779,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d3b8744600da2e200d2a46f676fd5a29b7bd1bc0000000000000000000000000d3b8744600da2e200d2a46f676fd5a29b7bd1bc00000000000000000000000000000000000000000000000000b4133a718b653200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10780,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001053f4b74a78342ed5708dc96482f37bcab5a8b20000000000000000000000001053f4b74a78342ed5708dc96482f37bcab5a8b200000000000000000000000000000000000000000000000001d4341ca057d33600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10783,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f8a371dc3b89bbb3653992c5b3bafaed1b13c466000000000000000000000000f8a371dc3b89bbb3653992c5b3bafaed1b13c466000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10787,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff902bfb0618b5c0b423a09d7aacf41cf86e4937000000000000000000000000ff902bfb0618b5c0b423a09d7aacf41cf86e4937000000000000000000000000000000000000000000000000001aa73708721f5800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10788,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009d0b9e7b1054efcbb7dd090ac10c07046f5811260000000000000000000000009d0b9e7b1054efcbb7dd090ac10c07046f58112600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10789,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000088fa395aa8a7b57cff6572fd37b585e1e8ce3dac000000000000000000000000000000000000000000000000136e0e69f5d8d787,,,1,true -10790,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a5d779284f4a319621ec7ff1ca88479a6c1308e7000000000000000000000000a5d779284f4a319621ec7ff1ca88479a6c1308e700000000000000000000000000000000000000000000000001edd63133246eca00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10791,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf6a2f8247c439ec0b3c61b2546cb05e49c41644000000000000000000000000bf6a2f8247c439ec0b3c61b2546cb05e49c416440000000000000000000000000000000000000000000000000021608e2f9ea40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10793,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b3e5497d22d80be71d34a3eaf191426d0b2bb4ba000000000000000000000000b3e5497d22d80be71d34a3eaf191426d0b2bb4ba000000000000000000000000000000000000000000000000013c31074902800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10794,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000019edc3bead34b13da9a742127b9fa060fc1169db00000000000000000000000019edc3bead34b13da9a742127b9fa060fc1169db0000000000000000000000000000000000000000000000000021c5cbbaa7220000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10796,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007286e7d3afa7c56f52e28263e0df68cc016776ad0000000000000000000000007286e7d3afa7c56f52e28263e0df68cc016776ad00000000000000000000000000000000000000000000000000218f8a37919c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10797,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076d010682c309037ffc0af9c24b0f3daeb61cb4c00000000000000000000000076d010682c309037ffc0af9c24b0f3daeb61cb4c000000000000000000000000000000000000000000000000002152033959880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10799,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000192227fa32d81c101ad5f1da4f0219cd967f3e18000000000000000000000000192227fa32d81c101ad5f1da4f0219cd967f3e180000000000000000000000000000000000000000000000000008f47a355a8f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10800,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ee8b7d0d4bc1fbb8ed182b10ad174bf7d20ebfaa000000000000000000000000ee8b7d0d4bc1fbb8ed182b10ad174bf7d20ebfaa000000000000000000000000000000000000000000000000000d84873d0dbb4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10801,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b05cb4612f9886a6a604f4c1f416cecb772c3194000000000000000000000000b05cb4612f9886a6a604f4c1f416cecb772c31940000000000000000000000000000000000000000000000000008a09394df8b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10803,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000ee8b7d0d4bc1fbb8ed182b10ad174bf7d20ebfaa0000000000000000000000000000000000000000000000003e33aa820173f8ae,,,1,true -10804,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000935cb2f7e86d395d0692d39cf8be5ffb8fcd51fa000000000000000000000000935cb2f7e86d395d0692d39cf8be5ffb8fcd51fa000000000000000000000000000000000000000000000000006196007a15970100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10805,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000099a409fc717ec84acb7d48bff1fd9981190d46ab00000000000000000000000099a409fc717ec84acb7d48bff1fd9981190d46ab000000000000000000000000000000000000000000000000000000000078bdcd00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10806,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000052477254b96ceaa05613c078b3fde56a92d6255600000000000000000000000052477254b96ceaa05613c078b3fde56a92d6255600000000000000000000000000000000000000000000000000a4a39f0de54de600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10829,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000001a8a09311d1d558f07f6d05d0e8bc6fd8fe8b8a00000000000000000000000001a8a09311d1d558f07f6d05d0e8bc6fd8fe8b8a000000000000000000000000000000000000000000000000004042e547153c4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10830,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9ecb55ce5b1b38abdf767433f6b35fc89c2ceb0000000000000000000000000e9ecb55ce5b1b38abdf767433f6b35fc89c2ceb0000000000000000000000000000000000000000000000000001ff973cafa800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10831,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000004240268a3ad66fab234e124c31c9cecc8b457e820000000000000000000000004240268a3ad66fab234e124c31c9cecc8b457e82000000000000000000000000000000000000000000000000000000003d25ab3400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10834,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000336bdf7a8dc958ca317197b764a29eae90c14f7d000000000000000000000000336bdf7a8dc958ca317197b764a29eae90c14f7d00000000000000000000000000000000000000000000000000013e10ba23870000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10835,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000bebe6acde175848b79606fa0de9b17ab2749d7d20000000000000000000000000000000000000000000000004abc49e16e331046,,,1,true -10838,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000d5096b4d21abd25d0d3e0cf9e2ff7a840b202906000000000000000000000000d5096b4d21abd25d0d3e0cf9e2ff7a840b20290600000000000000000000000000000000000000000000007d95f141f7e8b3f91600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10839,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000e540a58cb58a4ee5c35a980fd030d8a449b52695000000000000000000000000e540a58cb58a4ee5c35a980fd030d8a449b52695000000000000000000000000000000000000000000000000000000000062369400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10841,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e07c9b38ef430c9a79b78a505b321084ffd354c3000000000000000000000000e07c9b38ef430c9a79b78a505b321084ffd354c30000000000000000000000000000000000000000000000000000a0761641dc0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10843,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cb61edc2007b476e44be5bbe81486247425e5f8b000000000000000000000000cb61edc2007b476e44be5bbe81486247425e5f8b00000000000000000000000000000000000000000000000000154ff58a9dddd900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10846,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000672926d500e20ffc44ec712aa86277a85f72f4c6000000000000000000000000672926d500e20ffc44ec712aa86277a85f72f4c6000000000000000000000000000000000000000000000000003af3ea470a8d9900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10847,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000e540a58cb58a4ee5c35a980fd030d8a449b52695000000000000000000000000e540a58cb58a4ee5c35a980fd030d8a449b5269500000000000000000000000000000000000000000000000000000000004c4b4000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10849,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005f33734d47761b1578f20808714adf2a669d23a80000000000000000000000005f33734d47761b1578f20808714adf2a669d23a800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10852,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c330130e49398bf5311b030c620b0d2ba361552e000000000000000000000000c330130e49398bf5311b030c620b0d2ba361552e000000000000000000000000000000000000000000000000002833a4521c1e2400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10856,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000474f47707ae222c3a4dd1520de1aceed8d40643a000000000000000000000000474f47707ae222c3a4dd1520de1aceed8d40643a000000000000000000000000000000000000000000000000004ec89c84df33e900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10859,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000ba07c823f84bb2aa1cfda61cfa957750f2cf002200000000000000000000000000000000000000000000000dbbd4b593e2dce33c,,,1,true -10860,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000037223d721901ec493906ddf800b71dbcb347fa6800000000000000000000000037223d721901ec493906ddf800b71dbcb347fa68000000000000000000000000000000000000000000000000000000000c6eb59600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x40fcb1b68dfd8edf1a14e02116bdb05da8340f1602f6261a18901ad8cf07ab13,2022-03-20 12:24:21.000 UTC,0,true -10861,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a81579aab05701838b80c826844e618aa023ed40000000000000000000000002a81579aab05701838b80c826844e618aa023ed4000000000000000000000000000000000000000000000000002e46d65eb68d0d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10863,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a163d40de9dc681d7850ed24564d1805414ac468000000000000000000000000a163d40de9dc681d7850ed24564d1805414ac46800000000000000000000000000000000000000000000000002c40dd9e62e420000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10865,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002edf166a658af79c5c8bb268265a7def157eb62e0000000000000000000000002edf166a658af79c5c8bb268265a7def157eb62e0000000000000000000000000000000000000000000000000008e1bc9bf0400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10867,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000004e27452b03dbfdbb36e796cd0167a30b242871d20000000000000000000000000000000000000000000000013ef134172978f2e5,,,1,true -10868,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000e540a58cb58a4ee5c35a980fd030d8a449b52695000000000000000000000000e540a58cb58a4ee5c35a980fd030d8a449b5269500000000000000000000000000000000000000000000000000000000004c4b4000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10870,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000443d12a4a89ae225df8460eed40f3dfd3f2ea8a80000000000000000000000000000000000000000000000000de0b6b3a7640000,,,1,true -10871,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000223c930c6ad42f7e9cdebf88c68a29c508a616f6000000000000000000000000223c930c6ad42f7e9cdebf88c68a29c508a616f600000000000000000000000000000000000000000000000002869809251f000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x946a735ce3e5092ed3b0ef730738a2f45411ba2b56824d72e23e60bba9aedec2,2022-02-27 03:01:16.000 UTC,0,true -10872,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000710751fde40475ae92c8b267a1e5738de609156a000000000000000000000000710751fde40475ae92c8b267a1e5738de609156a00000000000000000000000000000000000000000000000000fd107932132a4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10873,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc5e0b41320fec3821e6c2e70fd6fd548c9e609a000000000000000000000000cc5e0b41320fec3821e6c2e70fd6fd548c9e609a000000000000000000000000000000000000000000000000017b6435a682fc6900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10879,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f28b24d61cabd44aa94142f58e70be3722a23a10000000000000000000000007f28b24d61cabd44aa94142f58e70be3722a23a100000000000000000000000000000000000000000000000000ea0be46dd01b5100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10880,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000085a61295752440af1f3071abfcd8233491a1621800000000000000000000000085a61295752440af1f3071abfcd8233491a162180000000000000000000000000000000000000000000000000033b35a5f44e12500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10881,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f300000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10884,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037505d100c98de9d9026f621cb11bb222275af3a00000000000000000000000037505d100c98de9d9026f621cb11bb222275af3a0000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10885,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7cd0406c712510813a257b19d852c3d1dfb817b000000000000000000000000d7cd0406c712510813a257b19d852c3d1dfb817b000000000000000000000000000000000000000000000000006e0f97cbfa0ebf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10886,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c83600000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c8360000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10888,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000939fef762c9ba24d802a9def26e2ecf32212072c000000000000000000000000939fef762c9ba24d802a9def26e2ecf32212072c00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10889,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d181a7312cad7bdc5208f5bb65368fab933ca260000000000000000000000007d181a7312cad7bdc5208f5bb65368fab933ca26000000000000000000000000000000000000000000000000003dc4ab23255ab500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10890,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a6b7cdaef5d67fed5d470c94006c2197924f1c10000000000000000000000003a6b7cdaef5d67fed5d470c94006c2197924f1c100000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10891,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003947217dc84e655d42371683a5b80f461903b2940000000000000000000000003947217dc84e655d42371683a5b80f461903b2940000000000000000000000000000000000000000000000000a6b51382b7c992800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x6dfc238924705d8663911a909973867febe62b88a8c65eef8918322ac8898792,2022-05-30 09:16:56.000 UTC,0,true -10892,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006521f20f2e82dedefbabc0047f6a82acab125d4b0000000000000000000000006521f20f2e82dedefbabc0047f6a82acab125d4b000000000000000000000000000000000000000000000000003ef29626e86a7a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10893,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000d073a15d57f958f8098ac87e421a2c9983885ac8000000000000000000000000d073a15d57f958f8098ac87e421a2c9983885ac80000000000000000000000000000000000000000000000022b1c8c1227a0000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -10894,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000006bc8e668402f5c1b895aced390aa1871cc6352900000000000000000000000006bc8e668402f5c1b895aced390aa1871cc63529000000000000000000000000000000000000000000000000003fa03caedc0dbe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10895,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c98c0741a5d439ca7ec73e49f2735388a96cf3e2000000000000000000000000c98c0741a5d439ca7ec73e49f2735388a96cf3e2000000000000000000000000000000000000000000000000001c31d9b037a78000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10897,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae89056d488eebe4331613daad6a2bace2cb77e7000000000000000000000000ae89056d488eebe4331613daad6a2bace2cb77e70000000000000000000000000000000000000000000000000040e300c85408ba00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10899,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d9c032b435d1163a7f6c894aab9924d3c0dc1989000000000000000000000000d9c032b435d1163a7f6c894aab9924d3c0dc1989000000000000000000000000000000000000000000000000023043508114400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x4e178aded85fe4de0dcf58d9b9fe36987bd2c5a0633e65c918ed1d44c9e274de,2022-02-27 03:07:00.000 UTC,0,true -10903,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b95152d72c9e182f2edd1e6a611a615f3d1a8033000000000000000000000000b95152d72c9e182f2edd1e6a611a615f3d1a8033000000000000000000000000000000000000000000000000002023c960aba00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10927,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000084d0654d741fc89ab8610ec9c3fed33b68b7694800000000000000000000000084d0654d741fc89ab8610ec9c3fed33b68b7694800000000000000000000000000000000000000000000000000ede3c3e629000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10928,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000084d0654d741fc89ab8610ec9c3fed33b68b7694800000000000000000000000084d0654d741fc89ab8610ec9c3fed33b68b76948000000000000000000000000000000000000000000000000004089d9c9f1c73800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10932,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000092dd06f1cf1b9d086ce2bae7facdcf7067a35ccf00000000000000000000000092dd06f1cf1b9d086ce2bae7facdcf7067a35ccf000000000000000000000000000000000000000000000000015181ff25a9800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x30fb2fe3044f63668c54bef3b1030e089f51cddf45f80a0dc0b29aa20fa76bd9,2022-02-27 03:15:02.000 UTC,0,true -10957,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b1df9010790002f57090902c78292cc7e7d948a0000000000000000000000002b1df9010790002f57090902c78292cc7e7d948a00000000000000000000000000000000000000000000000000043b30e5b86fab00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10958,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000006b912dc08176500e2a5b2221b9e54ea3fa547f100000000000000000000000006b912dc08176500e2a5b2221b9e54ea3fa547f100000000000000000000000000000000000000000000000000afe19579ab220000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7ac308a24db2c414373c8efdc59a6f4f13c9cd6f7bdc4841d69809ba03b3a46b,2022-03-16 01:10:44.000 UTC,0,true -10959,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10960,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c83600000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c8360000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10961,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000695473b868a5ae578df18ce0e9002a97f0a5eb8f000000000000000000000000695473b868a5ae578df18ce0e9002a97f0a5eb8f000000000000000000000000000000000000000000000000006bc0ba559023fd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10962,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10963,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000191e1b3df06260d8813d8bfe666bbb36851068f5000000000000000000000000191e1b3df06260d8813d8bfe666bbb36851068f500000000000000000000000000000000000000000000000000d0858bd80570c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x32891689d5a48cba308da37d973188a375a98fe5e387a4865315798304ec2f8b,2022-01-05 10:59:11.000 UTC,0,true -10964,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000009e1d470604b79d1ed9ba77166928373773b273e00000000000000000000000009e1d470604b79d1ed9ba77166928373773b273e00000000000000000000000000000000000000000000000000408bba061df51900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10966,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10969,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000866db22cf538fd470db7fe3c8bdb0416f6760874000000000000000000000000866db22cf538fd470db7fe3c8bdb0416f676087400000000000000000000000000000000000000000000000000037fc4e05c771100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10970,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000722246643c7bb3d15ccef7e72fc5f90e53b9f457000000000000000000000000722246643c7bb3d15ccef7e72fc5f90e53b9f4570000000000000000000000000000000000000000000000000093f851baa0c0d600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10972,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d65bf5e2843463ad1857cd1f464598d79332d0b6000000000000000000000000d65bf5e2843463ad1857cd1f464598d79332d0b600000000000000000000000000000000000000000000000000db4e8e0ff8bb0200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5dde0bf7ad06d20b0d6a4871bc5b47d731317085efa7c0c93df368b6ed7f56be,2022-04-20 12:55:23.000 UTC,0,true -10974,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be7ae762dc142a1b4a56e36ed86dc90ba3484b44000000000000000000000000be7ae762dc142a1b4a56e36ed86dc90ba3484b440000000000000000000000000000000000000000000000000002f0865f34c8c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10975,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000365be1502c03306a39a945d3e1f33b0a560c5ecc000000000000000000000000365be1502c03306a39a945d3e1f33b0a560c5ecc000000000000000000000000000000000000000000000000013fbe85edc9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10976,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10977,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc39849500000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc398495000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10978,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a08700000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10980,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c29d88b3776aea8abab1d322cf54b05215858ea9000000000000000000000000c29d88b3776aea8abab1d322cf54b05215858ea9000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10981,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10982,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10983,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d41aa4577d756c05bff040abfd9b106056479290000000000000000000000000d41aa4577d756c05bff040abfd9b10605647929000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10984,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d741776da5549e31bf419178b0d031e59401f419000000000000000000000000d741776da5549e31bf419178b0d031e59401f419000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10985,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000262efc46e2723b4552e5cc3ddbec23141d328092000000000000000000000000262efc46e2723b4552e5cc3ddbec23141d328092000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10986,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000050cf6c627b7284f210e3b4fbe791867f4411022700000000000000000000000050cf6c627b7284f210e3b4fbe791867f44110227000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10987,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000461460989787016397e1b2c1ecb5f6c306ee577d000000000000000000000000461460989787016397e1b2c1ecb5f6c306ee577d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10988,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071e56c34b9b74fd2f195e545ab4d5d14b78cd88800000000000000000000000071e56c34b9b74fd2f195e545ab4d5d14b78cd888000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10989,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000247680b6a3af46db33680373e8dcc6cc86e6d798000000000000000000000000247680b6a3af46db33680373e8dcc6cc86e6d798000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10992,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001941f0ab39dbbe69855fe819991e6dac2bcc45ed0000000000000000000000001941f0ab39dbbe69855fe819991e6dac2bcc45ed00000000000000000000000000000000000000000000000000d12a5e822ff30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x08e666cfdd1d672aeb4a71f4e947a296b519a2af6bceabebd1927bcfa3eaac98,2021-12-19 07:25:26.000 UTC,0,true -10994,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001227b6eeb15510badf14b1683fe41676ffcf2b1d0000000000000000000000001227b6eeb15510badf14b1683fe41676ffcf2b1d00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -10996,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039b370dca90663ffdd30838cd97c93a5042cceaa00000000000000000000000039b370dca90663ffdd30838cd97c93a5042cceaa0000000000000000000000000000000000000000000000000040311dc578c5ee00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11009,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bafd5b823eb5b00207e0e1f9ba4ca7a57cc01ce2000000000000000000000000bafd5b823eb5b00207e0e1f9ba4ca7a57cc01ce2000000000000000000000000000000000000000000000000002ed320df92200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11013,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000835bdd5f86919022837efd01cd684d5b1e75e19c000000000000000000000000835bdd5f86919022837efd01cd684d5b1e75e19c000000000000000000000000000000000000000000000000009493d3acc111cb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11017,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ba50a11c2b726abb4b4f945b04e11c192cd1d3d0000000000000000000000007ba50a11c2b726abb4b4f945b04e11c192cd1d3d00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11019,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000007b488f9e43a834a136147315016593fb6128ae500000000000000000000000007b488f9e43a834a136147315016593fb6128ae5000000000000000000000000000000000000000000000000007c58508723800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11020,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000851064900dcb11351e53a39e5af340e9fc2b7689000000000000000000000000851064900dcb11351e53a39e5af340e9fc2b7689000000000000000000000000000000000000000000000000012ffff40b947e5a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11021,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006beb35a80a6e34aed6cc639517856df28cf938850000000000000000000000006beb35a80a6e34aed6cc639517856df28cf93885000000000000000000000000000000000000000000000000003fa5ceaabdb19800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11022,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004bce3cec9ffebdc48b90cccbe3f568b5b03f31c20000000000000000000000004bce3cec9ffebdc48b90cccbe3f568b5b03f31c2000000000000000000000000000000000000000000000000013c4bd0697f37fa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf8deb7916eac32583f9ec0ed24c75f4407ea1578febc05a05818b6e47fc06fb7,2022-05-22 18:25:07.000 UTC,0,true -11023,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008617e81ab3ecf651f8b94b2d472efd37f724c1330000000000000000000000008617e81ab3ecf651f8b94b2d472efd37f724c133000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11024,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000024c9440ee1add29a03fb2e18d18fc3ec463d357900000000000000000000000024c9440ee1add29a03fb2e18d18fc3ec463d3579000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11025,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e90ac62991600ba537d6c8c567f42f0cd4b346c9000000000000000000000000e90ac62991600ba537d6c8c567f42f0cd4b346c9000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11026,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbcfa66204895046b47313dd761a981e6a99f33b000000000000000000000000cbcfa66204895046b47313dd761a981e6a99f33b0000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11027,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000869fd339567356ff41d8e9a6d0fbb7afc679d7b1000000000000000000000000869fd339567356ff41d8e9a6d0fbb7afc679d7b100000000000000000000000000000000000000000000000000138a388a43c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11028,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000983ae2cfe680c18300154bc910ca8d117a1ed20f000000000000000000000000983ae2cfe680c18300154bc910ca8d117a1ed20f000000000000000000000000000000000000000000000000000ffcb9e57d400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11029,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009eaaf4db9a9ba7b1404877568c7f93356bd1dcf70000000000000000000000009eaaf4db9a9ba7b1404877568c7f93356bd1dcf7000000000000000000000000000000000000000000000000000ffcb9e57d400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11030,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a9aabc663eb801a970807ea3a0e36d49ab03fc1e000000000000000000000000a9aabc663eb801a970807ea3a0e36d49ab03fc1e000000000000000000000000000000000000000000000000001717b72f0a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11031,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000efe8ee8b892b88f2e7acca277e128074ece49b6b000000000000000000000000efe8ee8b892b88f2e7acca277e128074ece49b6b000000000000000000000000000000000000000000000000001aa535d3d0c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11032,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ccf5ce1115395c99feab660911e59f2c1a80684e000000000000000000000000ccf5ce1115395c99feab660911e59f2c1a80684e000000000000000000000000000000000000000000000000001e32b47897400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11033,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d572beca83dd4c1a49ad56c6aa6126653678555f000000000000000000000000d572beca83dd4c1a49ad56c6aa6126653678555f00000000000000000000000000000000000000000000000000138a388a43c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11034,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061339e9f27a21bfbd309bb5d9c00dbeb9b88562300000000000000000000000061339e9f27a21bfbd309bb5d9c00dbeb9b88562300000000000000000000000000000000000000000000000000138a388a43c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11036,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc465f297e18bd50befa610d503c5571c56e925a000000000000000000000000fc465f297e18bd50befa610d503c5571c56e925a00000000000000000000000000000000000000000000000000f451e45a9c830000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1127e3f96f2df912d4e830ee7d91559cfe2d6f370a8978a6ae444b08d1cc5397,2022-03-12 06:51:43.000 UTC,0,true -11039,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c3a62f16ea361cdd5c65ac22dfd1ef4cb5560bb0000000000000000000000002c3a62f16ea361cdd5c65ac22dfd1ef4cb5560bb0000000000000000000000000000000000000000000000000034a558ab62380000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11041,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bb22ffae8c9205cc3677f16c5b79dffba9479b4a000000000000000000000000bb22ffae8c9205cc3677f16c5b79dffba9479b4a000000000000000000000000000000000000000000000000003776a76816644000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11043,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017d4dac6081d305209c693b702f9a8cf0e4df15100000000000000000000000017d4dac6081d305209c693b702f9a8cf0e4df1510000000000000000000000000000000000000000000000000071afd498d0000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11044,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da485bc95377b68f19721d3c661bcd9c7e0a616f000000000000000000000000da485bc95377b68f19721d3c661bcd9c7e0a616f00000000000000000000000000000000000000000000000002ed182ae759b8d300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11048,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000214013e8e5d8264b27e824077ce9fff49bc20e8e000000000000000000000000214013e8e5d8264b27e824077ce9fff49bc20e8e00000000000000000000000000000000000000000000000000ad9f018e2c600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11049,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ecaf5554b3e7acc936cf5b9f7e9173a7b85cba73000000000000000000000000ecaf5554b3e7acc936cf5b9f7e9173a7b85cba73000000000000000000000000000000000000000000000000015b4dca52666abc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11051,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007464c993af64925ba9f38fa36e8e7578c31773540000000000000000000000007464c993af64925ba9f38fa36e8e7578c3177354000000000000000000000000000000000000000000000000007fe5cf2bea000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11052,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f797f8b349b34821d8ec65f3fd754e9c60cfde60000000000000000000000006f797f8b349b34821d8ec65f3fd754e9c60cfde600000000000000000000000000000000000000000000000000249f00b6c89a4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11053,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d365821a7a763ca01021ae5ef00bb9ab9ecc553d000000000000000000000000d365821a7a763ca01021ae5ef00bb9ab9ecc553d00000000000000000000000000000000000000000000000000ab73e1d6c5258000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe67ccda1fffc26dd6bba2c3c7530cbbf5c10e3b394390c162103cd583dea0188,2021-12-19 12:20:13.000 UTC,0,true -11054,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000ceb5591110444504bf02283c05bfaf42d6ea0f07000000000000000000000000ceb5591110444504bf02283c05bfaf42d6ea0f070000000000000000000000000000000000000000000000000000000006e95e1c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11056,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000003296fb4fb0188d3c4ebbc6ee55ce636ac1ab5b4b0000000000000000000000003296fb4fb0188d3c4ebbc6ee55ce636ac1ab5b4b00000000000000000000000000000000000000000000000000000000078b44d900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11057,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000082b2001c9adfc027ffba3fa37b1e18c11cc5c3e600000000000000000000000082b2001c9adfc027ffba3fa37b1e18c11cc5c3e6000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11059,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ffc9c646cf9399a3adfde4ad042c5e0c2ffa1210000000000000000000000002ffc9c646cf9399a3adfde4ad042c5e0c2ffa121000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11060,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11061,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11062,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032255bda08d9dfb5af628818075c78c6ead1336900000000000000000000000032255bda08d9dfb5af628818075c78c6ead1336900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11063,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc39849500000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc398495000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11064,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f419db6a84d599b5802fe555f6e1c4e4ca71d1c2000000000000000000000000f419db6a84d599b5802fe555f6e1c4e4ca71d1c2000000000000000000000000000000000000000000000000001e75f6d4130fa800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11065,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11066,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c29d88b3776aea8abab1d322cf54b05215858ea9000000000000000000000000c29d88b3776aea8abab1d322cf54b05215858ea9000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11067,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11068,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11069,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003880a75cc09b8ccd4adbbce0d29ecd33a77115ec0000000000000000000000003880a75cc09b8ccd4adbbce0d29ecd33a77115ec00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11070,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d41aa4577d756c05bff040abfd9b106056479290000000000000000000000000d41aa4577d756c05bff040abfd9b10605647929000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11071,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a33698d7ce3d595934c3a580e043f48e8c52f3dd000000000000000000000000a33698d7ce3d595934c3a580e043f48e8c52f3dd00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11072,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d741776da5549e31bf419178b0d031e59401f419000000000000000000000000d741776da5549e31bf419178b0d031e59401f419000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11073,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c074be0305e9ee1b5a69c94aaf9e0546e3d70fff000000000000000000000000c074be0305e9ee1b5a69c94aaf9e0546e3d70fff00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11074,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000262efc46e2723b4552e5cc3ddbec23141d328092000000000000000000000000262efc46e2723b4552e5cc3ddbec23141d328092000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11075,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004318d15cab26aff5995a3993581dd2264bc81e770000000000000000000000004318d15cab26aff5995a3993581dd2264bc81e7700000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11076,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000050cf6c627b7284f210e3b4fbe791867f4411022700000000000000000000000050cf6c627b7284f210e3b4fbe791867f44110227000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11077,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000025e250f4144811f1e7e3aa3b8bff4ce49e06fe6900000000000000000000000025e250f4144811f1e7e3aa3b8bff4ce49e06fe6900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11078,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000461460989787016397e1b2c1ecb5f6c306ee577d000000000000000000000000461460989787016397e1b2c1ecb5f6c306ee577d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11079,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071e56c34b9b74fd2f195e545ab4d5d14b78cd88800000000000000000000000071e56c34b9b74fd2f195e545ab4d5d14b78cd888000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11080,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006099c5863f280a81532be79afe969821ac92feb30000000000000000000000006099c5863f280a81532be79afe969821ac92feb300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11081,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a25cf88f762e4a9e75ceab2b6c71138f07a2e6f4000000000000000000000000a25cf88f762e4a9e75ceab2b6c71138f07a2e6f400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11082,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef55dd49e4ef9df47669f0e8fd44c26b6ed41a8b000000000000000000000000ef55dd49e4ef9df47669f0e8fd44c26b6ed41a8b00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11083,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000ffb49827cdf0d398970919a37e0218a9f01509c0000000000000000000000000ffb49827cdf0d398970919a37e0218a9f01509c00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11084,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a960cd9dd85d6f1dc2ece6f8dff862f81a409483000000000000000000000000a960cd9dd85d6f1dc2ece6f8dff862f81a40948300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11085,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000048a99f12ac0bac569b846422a35775f98e59bba600000000000000000000000048a99f12ac0bac569b846422a35775f98e59bba600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11086,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6fe30e32cfe1e1e6c0f40a4c7c0ffe77edc2eaa000000000000000000000000c6fe30e32cfe1e1e6c0f40a4c7c0ffe77edc2eaa00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11087,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a99ca43db25dee844eb6a55f78b9bfaea0e2d96d000000000000000000000000a99ca43db25dee844eb6a55f78b9bfaea0e2d96d00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11088,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000247680b6a3af46db33680373e8dcc6cc86e6d798000000000000000000000000247680b6a3af46db33680373e8dcc6cc86e6d798000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11089,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000247680b6a3af46db33680373e8dcc6cc86e6d798000000000000000000000000247680b6a3af46db33680373e8dcc6cc86e6d798000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11090,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11091,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca79106a1a187c40e4830eca639b63b2dc0415fb000000000000000000000000ca79106a1a187c40e4830eca639b63b2dc0415fb00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11092,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f73f2ad9434cd2e86d298b9f03d3ad135320dd71000000000000000000000000f73f2ad9434cd2e86d298b9f03d3ad135320dd7100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11093,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ed668c3aacc5411b9116aac58c9e41efdc7e1e12000000000000000000000000ed668c3aacc5411b9116aac58c9e41efdc7e1e1200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11094,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f8c2efb6a45096afbfc4617b1aa4941d28d3531b000000000000000000000000f8c2efb6a45096afbfc4617b1aa4941d28d3531b00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11095,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006bd8e8275b285fd66a36b66abe6a9021e58be82a0000000000000000000000006bd8e8275b285fd66a36b66abe6a9021e58be82a00000000000000000000000000000000000000000000000003731728748c6d4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11096,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b441a9e5d5581fa859858f35f437790228b956ed000000000000000000000000b441a9e5d5581fa859858f35f437790228b956ed00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11097,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a4db982a2761cb7abe328f09d5992bd5a79c9e16000000000000000000000000a4db982a2761cb7abe328f09d5992bd5a79c9e1600000000000000000000000000000000000000000000000000220bb695b8500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11100,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6c86df56d0a5c574658bf2831d8dda94e6fee58000000000000000000000000b6c86df56d0a5c574658bf2831d8dda94e6fee58000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11103,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001f41219828d15fc06786aea5026597fba62471950000000000000000000000001f41219828d15fc06786aea5026597fba6247195000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11105,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f21c72dc8c8dca4ee2b60996636cb65f14109452000000000000000000000000f21c72dc8c8dca4ee2b60996636cb65f14109452000000000000000000000000000000000000000000000000002061749153584000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11106,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000babd94d14a221936a4b13f9db96e241a3abddb81000000000000000000000000babd94d14a221936a4b13f9db96e241a3abddb8100000000000000000000000000000000000000000000000000586497ea697d0400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11107,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b26975022d55b218ef2b29df3f8d3047102c56b0000000000000000000000002b26975022d55b218ef2b29df3f8d3047102c56b0000000000000000000000000000000000000000000000000085bff4b4b1e4c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11108,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004bec9722651a94f1999d22e6895314566b3f54330000000000000000000000004bec9722651a94f1999d22e6895314566b3f543300000000000000000000000000000000000000000000000000207fb87b2d090000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11109,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008619c0c06e1f601ee60dd9a7330f9c4d2c869fbf0000000000000000000000008619c0c06e1f601ee60dd9a7330f9c4d2c869fbf00000000000000000000000000000000000000000000000000c630340eee02d600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11113,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a47e6a0bd3b361ba2784e61be35ae5407502cd82000000000000000000000000a47e6a0bd3b361ba2784e61be35ae5407502cd8200000000000000000000000000000000000000000000000000fba74299a8528000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11114,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000140f0479b7db7e1643e66a1dfad79b1537bca1df000000000000000000000000140f0479b7db7e1643e66a1dfad79b1537bca1df000000000000000000000000000000000000000000000000014a99912ddf556300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11115,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f5f3fac8634369bbf50606eee7d49bbb97f3c686000000000000000000000000f5f3fac8634369bbf50606eee7d49bbb97f3c68600000000000000000000000000000000000000000000000000522667f90adf0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11116,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000048e492c0acc7f277c0f0a8335a35aa33caa0365200000000000000000000000048e492c0acc7f277c0f0a8335a35aa33caa036520000000000000000000000000000000000000000000000000037ed803d38378100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11117,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000e366355e53169d030c6af3de0e48b15ad657892f000000000000000000000000000000000000000000000000004dc0da02a8cc12,,,1,true -11119,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de55e26ac20c5aca6dc7d5768631840eb53d6868000000000000000000000000de55e26ac20c5aca6dc7d5768631840eb53d686800000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11121,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c60e967fb9ecf571cf69f007971d487ce748528b000000000000000000000000c60e967fb9ecf571cf69f007971d487ce748528b000000000000000000000000000000000000000000000000007a583cd9ad5f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11122,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11123,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11124,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11125,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11126,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11127,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11128,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11129,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11130,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11131,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11132,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11133,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11134,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11135,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11136,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000bdf15d94f8e4cd2c8d422225f194755534f63464000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11138,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078c8e648e99c53c5b320d16fae7cf667db3a521300000000000000000000000078c8e648e99c53c5b320d16fae7cf667db3a521300000000000000000000000000000000000000000000000006cc4350c474f01400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2b1aa31ebc9cc1d45571b4a37dd287b99ea8908b1e7fa891c0c4f57c88550959,2022-03-01 15:54:56.000 UTC,0,true -11139,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000064fde70dc6d475fd5482e788b0391a9b1f5a6a6700000000000000000000000064fde70dc6d475fd5482e788b0391a9b1f5a6a67000000000000000000000000000000000000000000000000000000005b3b4d8800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x2b1cae93e5109bba5f5ee06aa9098bc7d44611efd8bf92d80832d6918e5c42e9,2022-06-08 16:42:39.000 UTC,0,true -11147,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b45c64303eee659e573597335473467b6222ea9a000000000000000000000000b45c64303eee659e573597335473467b6222ea9a0000000000000000000000000000000000000000000000000021c10a9b5f4f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11149,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0929a7fa093c6219789a592856f8e67ccf0500b000000000000000000000000b0929a7fa093c6219789a592856f8e67ccf0500b00000000000000000000000000000000000000000000000000011f7b0985e5dd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11150,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0929a7fa093c6219789a592856f8e67ccf0500b000000000000000000000000b0929a7fa093c6219789a592856f8e67ccf0500b000000000000000000000000000000000000000000000000015d85436020bf2000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11151,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000169bc617dfdd54623132f9cc633dfe4d786d5bc0000000000000000000000000169bc617dfdd54623132f9cc633dfe4d786d5bc0000000000000000000000000000000000000000000000000017d0cdfededc11900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11155,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000052dd96ce3ad7f658cc0645ed9cb4ac896c1360f900000000000000000000000052dd96ce3ad7f658cc0645ed9cb4ac896c1360f9000000000000000000000000000000000000000000000000016c35d5523e4d1f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11156,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0a98e6477003e2e889a774dd5e75cce6e4d8a68000000000000000000000000c0a98e6477003e2e889a774dd5e75cce6e4d8a68000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11157,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d74c56c55573d810a130599aac4bec2337b4dc3d000000000000000000000000d74c56c55573d810a130599aac4bec2337b4dc3d0000000000000000000000000000000000000000000000000137dc155d22ce0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11158,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ad0f834fd587c0f11bdb5654a7c53c4198f70600000000000000000000000003ad0f834fd587c0f11bdb5654a7c53c4198f70600000000000000000000000000000000000000000000000000813adea9b47000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x68b7fff14bb9979cc0cc7c9e983b903aef7f837f039586daecfe6b767bdbd48c,2021-11-29 07:33:40.000 UTC,0,true -11167,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b0000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11168,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b0000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11169,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b0000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11170,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b0000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11171,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b0000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11172,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b0000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11173,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b0000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11174,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b0000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11175,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b0000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11176,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b0000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11177,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b0000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11179,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a18af6843286143afcc833ce9a310cbf8b3c2d2f000000000000000000000000a18af6843286143afcc833ce9a310cbf8b3c2d2f00000000000000000000000000000000000000000000000000aee865f414d10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11180,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b0000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11181,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b0000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11182,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b0000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11183,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b0000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11184,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b0000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11185,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b0000000000000000000000006d6dff1f616b9af592fd4092c3df123746a3168b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11186,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11187,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11188,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11189,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11190,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d03d8bd1fd8e208b163a5e7304dff35c10310770000000000000000000000002d03d8bd1fd8e208b163a5e7304dff35c103107700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11191,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11193,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11194,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11195,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11196,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000083ea9d59eb73d2c7183072fa22efcbf35ef6e55500000000000000000000000083ea9d59eb73d2c7183072fa22efcbf35ef6e5550000000000000000000000000000000000000000000000000037962084227d1100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11197,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11198,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11199,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11201,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11202,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11203,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000cbd89600a173f377be4d59d155c9c59e6030fda3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11204,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11205,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11206,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11207,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11208,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11209,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11210,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11211,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11212,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11213,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11214,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11215,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11216,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11217,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11218,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000581edc6ba25b2e56d59a2e82b038caa35b7b1f4d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11219,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa930000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa93000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11220,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa930000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa93000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11221,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa930000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa93000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11222,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa930000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa93000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11223,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa930000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa93000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11224,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa930000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa93000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11225,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa930000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa93000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11226,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa930000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa93000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11227,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa930000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa93000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11228,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa930000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa93000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11229,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa930000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa93000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11230,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa930000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa93000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11231,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa930000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa93000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11232,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa930000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa93000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11233,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa930000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa93000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11234,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa930000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa93000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11235,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa930000000000000000000000002ffafb6a09999d2cb2cff49af667c084bf12aa93000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11236,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11237,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11238,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11239,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11240,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11242,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11243,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11244,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11245,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11246,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11247,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11248,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11249,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11250,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000aeebeab3168ec11d58bddb633fe498f78f2811cd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11251,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d7800000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d780000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11252,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d7800000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d780000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11253,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d7800000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d780000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11254,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d7800000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d780000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11255,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d7800000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d780000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11256,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d7800000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d780000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11257,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d7800000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d780000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11258,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d7800000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d780000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11259,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d7800000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d780000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11260,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d7800000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d780000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11261,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d7800000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d780000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11262,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d7800000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d780000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11263,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d7800000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d780000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11264,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d7800000000000000000000000003f298b99f6a38d56df11afdc6b7cb7d351c8d780000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11265,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11266,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11267,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11268,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11269,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11270,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11271,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11272,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11273,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11274,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11275,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11276,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11277,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11278,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11279,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000888a721ede33cbdc79325843ae786c0ae41a927c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11280,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff80000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11281,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff80000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11282,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff80000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11283,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff80000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11284,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff80000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11285,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff80000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11286,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff80000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11287,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff80000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11288,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff80000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11289,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff80000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11290,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff80000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11291,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff80000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11292,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff80000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11293,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff80000000000000000000000007fb50bf1b2dbfc249d5327c01713daa9ff92eff8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11294,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f300000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11295,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f300000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11296,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f300000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11297,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f300000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11298,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f300000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11299,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f300000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11300,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f300000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11301,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f300000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11302,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f300000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11303,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f300000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11304,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f300000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11305,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f300000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11306,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f300000000000000000000000094d14ebb36a69f621e458f4b06dbdd8c317097f3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11307,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c83600000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c8360000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11308,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c83600000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c8360000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11309,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c83600000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c8360000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11310,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c83600000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c8360000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11311,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c83600000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c8360000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11312,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c83600000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c8360000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11313,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c83600000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c8360000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11314,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c83600000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c8360000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11315,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c83600000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c8360000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11316,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c83600000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c8360000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11317,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c83600000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c8360000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11318,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c83600000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c8360000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11319,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c83600000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c8360000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11320,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c83600000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c8360000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11321,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c83600000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c8360000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11322,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c83600000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c8360000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11323,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c83600000000000000000000000000eb5bc0465292f0df1003207cb9cce17707c8360000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11324,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbcda62ad56791f9a3f8ab16e0a45ca376cf5c9c000000000000000000000000cbcda62ad56791f9a3f8ab16e0a45ca376cf5c9c000000000000000000000000000000000000000000000000001c063b3bfa60c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11325,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11326,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11327,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11328,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11329,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11330,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11331,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11332,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11333,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11334,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11335,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11336,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11337,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11338,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11339,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11340,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000c92e9fa369fa4e94c462d9fad4a79ad16f54ef08000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11341,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11342,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11343,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11344,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11345,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11346,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11347,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11348,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11349,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11350,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11351,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11352,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11353,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11354,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11355,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000f506f4bc57ac62f72e846a781882d037d1dde02b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11357,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc39849500000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc398495000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11358,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc39849500000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc398495000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11359,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc39849500000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc398495000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11360,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc39849500000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc398495000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11361,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc39849500000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc398495000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11362,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc39849500000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc398495000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11363,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc39849500000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc398495000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11364,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc39849500000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc398495000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11365,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc39849500000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc398495000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11366,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc39849500000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc398495000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11367,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc39849500000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc398495000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11368,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc39849500000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc398495000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11369,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc39849500000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc398495000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11370,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc39849500000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc398495000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11371,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc39849500000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc398495000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11372,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc39849500000000000000000000000005bc0a8aab1923237dd18d5b1b57efcdfc398495000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11373,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000c3ba25500e7ad8e7c6d78682b204fb9e59d7473200000000000000000000000000000000000000000000000d0fdd35ab37e456e1,,,1,true -11374,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11375,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11376,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11377,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11378,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11379,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11380,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11381,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000497793742d0774c653fbaa82cde35d1b13252c8e000000000000000000000000497793742d0774c653fbaa82cde35d1b13252c8e00000000000000000000000000000000000000000000000000844acea669563600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11383,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e1031825e9667178167df00c485911847e4f91fe000000000000000000000000e1031825e9667178167df00c485911847e4f91fe000000000000000000000000000000000000000000000000003c6568f12e800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11384,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000009349c8c39dd1d5a6271861ce6f9974b2b76142bc0000000000000000000000009349c8c39dd1d5a6271861ce6f9974b2b76142bc000000000000000000000000000000000000000000000000000000004b7df6f700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11385,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076916bdbd7b84317365fb3bd157e1606550665b900000000000000000000000076916bdbd7b84317365fb3bd157e1606550665b90000000000000000000000000000000000000000000000000056c9d9e93e3db700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11386,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071a89164464e2c76693c4675254288eb7006af3b00000000000000000000000071a89164464e2c76693c4675254288eb7006af3b000000000000000000000000000000000000000000000000007fdc9a5c17c36500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11387,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca12f90047176053a219a0046091478de20b3e87000000000000000000000000ca12f90047176053a219a0046091478de20b3e870000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11388,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7c70dfd9c8a035dcd7c9df7b8e8fe0822ceab6e000000000000000000000000c7c70dfd9c8a035dcd7c9df7b8e8fe0822ceab6e00000000000000000000000000000000000000000000000000a5ccf32cbd974000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x06138a8c1028448831c112fb061c00e4f58d7e393856b8db76afc5fdbf86111d,2022-03-22 06:13:54.000 UTC,0,true -11389,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a8a33b9ce7f931335311ab2add963981ef20e080000000000000000000000001a8a33b9ce7f931335311ab2add963981ef20e0800000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11392,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11393,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11394,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11395,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11396,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000827123b697289543ccc99d5c41bc5a5a9575a087000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11398,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f18ad2dc771e36426b96163141b9bf25f8edbc0c000000000000000000000000000000000000000000000000470143d205ae4f4e,,,1,true -11399,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d3db1a276dd5571a94863a02c4e02d4513f7aa64000000000000000000000000000000000000000000000007302bd1afcb95c403,,,1,true -11400,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c29d88b3776aea8abab1d322cf54b05215858ea9000000000000000000000000c29d88b3776aea8abab1d322cf54b05215858ea9000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11401,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c29d88b3776aea8abab1d322cf54b05215858ea9000000000000000000000000c29d88b3776aea8abab1d322cf54b05215858ea9000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11402,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c29d88b3776aea8abab1d322cf54b05215858ea9000000000000000000000000c29d88b3776aea8abab1d322cf54b05215858ea9000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11403,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c29d88b3776aea8abab1d322cf54b05215858ea9000000000000000000000000c29d88b3776aea8abab1d322cf54b05215858ea9000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11404,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c29d88b3776aea8abab1d322cf54b05215858ea9000000000000000000000000c29d88b3776aea8abab1d322cf54b05215858ea9000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11405,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c29d88b3776aea8abab1d322cf54b05215858ea9000000000000000000000000c29d88b3776aea8abab1d322cf54b05215858ea9000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11406,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c29d88b3776aea8abab1d322cf54b05215858ea9000000000000000000000000c29d88b3776aea8abab1d322cf54b05215858ea9000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11407,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c29d88b3776aea8abab1d322cf54b05215858ea9000000000000000000000000c29d88b3776aea8abab1d322cf54b05215858ea9000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11408,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c29d88b3776aea8abab1d322cf54b05215858ea9000000000000000000000000c29d88b3776aea8abab1d322cf54b05215858ea9000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11409,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11410,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11411,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11412,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11413,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11414,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11415,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11416,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11417,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11418,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11419,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11420,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11421,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11422,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000eebc42b3bb20c202f7941a0ce1febf7cbd23e114000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11423,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11424,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11425,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11426,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11427,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11428,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11429,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11430,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11431,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11432,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000b8c3b004f4380b219e220f747661ab7d0f42c10a000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11433,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d8ae114d43770bea2b50ec7c8ac2fec87a1d872a000000000000000000000000d8ae114d43770bea2b50ec7c8ac2fec87a1d872a0000000000000000000000000000000000000000000000000028d332a8552d6900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11434,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000072bb27dec00202d977aa870fdc8487c89939713900000000000000000000000072bb27dec00202d977aa870fdc8487c89939713900000000000000000000000000000000000000000000000000138a388a43c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11435,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000052a7160ab9e27d5cf95fc572d93c39d8b0559a5900000000000000000000000052a7160ab9e27d5cf95fc572d93c39d8b0559a59000000000000000000000000000000000000000000000000054ccb1648dfe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11436,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000077e39267e87fdd02d62d831708b7e1152710397c00000000000000000000000077e39267e87fdd02d62d831708b7e1152710397c0000000000000000000000000000000000000000000000000de0471ef3418b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9f9ffcfb613b16551bfdea64531c1b7e088a5c09180b53c9a4ac63931443751f,2022-01-06 11:04:31.000 UTC,0,true -11437,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009c57037d4dbbb992ed3984b20a24ed08007475ab0000000000000000000000009c57037d4dbbb992ed3984b20a24ed08007475ab0000000000000000000000000000000000000000000000001bc032473adb080000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11438,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bb2879457867f5aa85f6e5a789905ed8c1a83403000000000000000000000000bb2879457867f5aa85f6e5a789905ed8c1a834030000000000000000000000000000000000000000000000000de14438ced6c60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd037f8611717f669076002704fcf28acf3435862da99d0b2dac33c8864502abc,2022-01-06 10:52:38.000 UTC,0,true -11439,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9c123d5642e424f1b059e17ea09fc596b6469bb000000000000000000000000f9c123d5642e424f1b059e17ea09fc596b6469bb0000000000000000000000000000000000000000000000000ddda681a139580000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11440,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000daaf3d7ce4c025714586c2590c9072a4698fc4b3000000000000000000000000daaf3d7ce4c025714586c2590c9072a4698fc4b30000000000000000000000000000000000000000000000000033ade4f34f250c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11443,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a892bf6aebae2de008edefa9a25eae5e7a9313a0000000000000000000000003a892bf6aebae2de008edefa9a25eae5e7a9313a00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11444,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008989eb731524c22e2c76f161a10dfdb7051205040000000000000000000000008989eb731524c22e2c76f161a10dfdb70512050400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11445,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bff4062c3029ea1591c13b3ba0574f4d50c66c76000000000000000000000000bff4062c3029ea1591c13b3ba0574f4d50c66c7600000000000000000000000000000000000000000000000000bfab2a59d2aec200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11446,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000783da486c76b4f2767605869e2c88d145c307818000000000000000000000000783da486c76b4f2767605869e2c88d145c30781800000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11447,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9107317b0ff77ed5b7adea15e50514a3564002b000000000000000000000000f9107317b0ff77ed5b7adea15e50514a3564002b0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11448,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c447e511495c761808b76e9d0792a9f45bd145be000000000000000000000000c447e511495c761808b76e9d0792a9f45bd145be00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11452,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b16c8220b3a2f31e569f6dda03ec0bf39e9be439000000000000000000000000b16c8220b3a2f31e569f6dda03ec0bf39e9be43900000000000000000000000000000000000000000000000000475fbfa842118d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11454,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000007782c1c31f0eed9ebf466d78beec0cb0cd2b51af000000000000000000000000000000000000000000000000976b35e09eb77c1a,,,1,true -11455,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004351884e49eef08ea1bc7528f3e32ad4ef1f4b080000000000000000000000004351884e49eef08ea1bc7528f3e32ad4ef1f4b08000000000000000000000000000000000000000000000000002d49faef92660200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11456,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000035a07be085ecac45aee8dddd71467b6b45a7aa1200000000000000000000000035a07be085ecac45aee8dddd71467b6b45a7aa12000000000000000000000000000000000000000000000000007c58508723800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11460,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080046121d4c997e9affccce59bef6689795c8c0d00000000000000000000000080046121d4c997e9affccce59bef6689795c8c0d00000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11462,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000db5d39414fab620dd38e5a477ab58320b10f42c9000000000000000000000000db5d39414fab620dd38e5a477ab58320b10f42c9000000000000000000000000000000000000000000000000000000000073d3cb00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11463,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000db5d39414fab620dd38e5a477ab58320b10f42c9000000000000000000000000db5d39414fab620dd38e5a477ab58320b10f42c900000000000000000000000000000000000000000000000000a86e9f68f2fac000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11464,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d9c8863c71377123ba2ea383b8c537d0d683db85000000000000000000000000d9c8863c71377123ba2ea383b8c537d0d683db850000000000000000000000000000000000000000000000000013246c8318a20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11465,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000072988183250af3ffeeb3ab47731b924a8cc6c16000000000000000000000000072988183250af3ffeeb3ab47731b924a8cc6c16000000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11467,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000dc277d26a32808b9517ec5809164305f38ab2e30000000000000000000000000dc277d26a32808b9517ec5809164305f38ab2e3000000000000000000000000000000000000000000000000001314bef78d2f0900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11468,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000063baa2dc5597bcce4bbbf60f27901d726c34436c00000000000000000000000063baa2dc5597bcce4bbbf60f27901d726c34436c0000000000000000000000000000000000000000000000000019d820b6a02d4900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11469,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c81de614aa8f239c355671ddb21caa46ce3e7e2d000000000000000000000000c81de614aa8f239c355671ddb21caa46ce3e7e2d0000000000000000000000000000000000000000000000000078cad1e25d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11470,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c81de614aa8f239c355671ddb21caa46ce3e7e2d000000000000000000000000c81de614aa8f239c355671ddb21caa46ce3e7e2d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11471,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000246d62740b17059764ae74a8c44de2d85836da8b000000000000000000000000246d62740b17059764ae74a8c44de2d85836da8b0000000000000000000000000000000000000000000000000078cad1e25d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11472,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000246d62740b17059764ae74a8c44de2d85836da8b000000000000000000000000246d62740b17059764ae74a8c44de2d85836da8b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11473,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000007e8e46620dfbe263f7a90ac2e3ae5aa5bfe528100000000000000000000000007e8e46620dfbe263f7a90ac2e3ae5aa5bfe52810000000000000000000000000000000000000000000000000078cad1e25d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11474,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000007e8e46620dfbe263f7a90ac2e3ae5aa5bfe528100000000000000000000000007e8e46620dfbe263f7a90ac2e3ae5aa5bfe5281000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11475,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008cbdf071dea2ea6fb8d69ddb2b67d7bbdc5f544f0000000000000000000000008cbdf071dea2ea6fb8d69ddb2b67d7bbdc5f544f0000000000000000000000000000000000000000000000000078cad1e25d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11476,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008cbdf071dea2ea6fb8d69ddb2b67d7bbdc5f544f0000000000000000000000008cbdf071dea2ea6fb8d69ddb2b67d7bbdc5f544f000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11477,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000814069653b9538da6d3c78281125c62f38736e20000000000000000000000000814069653b9538da6d3c78281125c62f38736e20000000000000000000000000000000000000000000000000078cad1e25d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11478,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000814069653b9538da6d3c78281125c62f38736e20000000000000000000000000814069653b9538da6d3c78281125c62f38736e2000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11479,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000205c0c15b6ca60b7388947f9a300423212f514be000000000000000000000000205c0c15b6ca60b7388947f9a300423212f514be0000000000000000000000000000000000000000000000000078cad1e25d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11480,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000205c0c15b6ca60b7388947f9a300423212f514be000000000000000000000000205c0c15b6ca60b7388947f9a300423212f514be000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11481,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009bada5a8d176bc93fde52317ae018a411324e1be0000000000000000000000009bada5a8d176bc93fde52317ae018a411324e1be0000000000000000000000000000000000000000000000000078cad1e25d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11482,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009bada5a8d176bc93fde52317ae018a411324e1be0000000000000000000000009bada5a8d176bc93fde52317ae018a411324e1be000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11483,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b2402f982a63800207dd232b6a05f4239173ec76000000000000000000000000b2402f982a63800207dd232b6a05f4239173ec760000000000000000000000000000000000000000000000000078cad1e25d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11484,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b2402f982a63800207dd232b6a05f4239173ec76000000000000000000000000b2402f982a63800207dd232b6a05f4239173ec76000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11485,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0ab5a849eee3e75068333c4b771833f9c828ace000000000000000000000000b0ab5a849eee3e75068333c4b771833f9c828ace0000000000000000000000000000000000000000000000000078cad1e25d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11486,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0ab5a849eee3e75068333c4b771833f9c828ace000000000000000000000000b0ab5a849eee3e75068333c4b771833f9c828ace000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11487,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006bce4d74a1306acc91ee88ad1eb14844f1e0d9780000000000000000000000006bce4d74a1306acc91ee88ad1eb14844f1e0d9780000000000000000000000000000000000000000000000000078cad1e25d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11488,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006bce4d74a1306acc91ee88ad1eb14844f1e0d9780000000000000000000000006bce4d74a1306acc91ee88ad1eb14844f1e0d9780000000000000000000000000000000000000000000000000078cad1e25d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11489,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006bce4d74a1306acc91ee88ad1eb14844f1e0d9780000000000000000000000006bce4d74a1306acc91ee88ad1eb14844f1e0d978000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11490,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a0f4c9de49d53d84709df1ed8c4947591c571dd2000000000000000000000000a0f4c9de49d53d84709df1ed8c4947591c571dd20000000000000000000000000000000000000000000000000078cad1e25d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11491,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a0f4c9de49d53d84709df1ed8c4947591c571dd2000000000000000000000000a0f4c9de49d53d84709df1ed8c4947591c571dd2000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11492,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b058cd01a21a907453e201b927f258646ce75175000000000000000000000000b058cd01a21a907453e201b927f258646ce751750000000000000000000000000000000000000000000000000078cad1e25d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11493,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b058cd01a21a907453e201b927f258646ce75175000000000000000000000000b058cd01a21a907453e201b927f258646ce75175000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11494,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000020a85c450eb7c40c89dab5ab61ac43eedd6a211300000000000000000000000020a85c450eb7c40c89dab5ab61ac43eedd6a21130000000000000000000000000000000000000000000000000078cad1e25d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11495,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000020a85c450eb7c40c89dab5ab61ac43eedd6a211300000000000000000000000020a85c450eb7c40c89dab5ab61ac43eedd6a2113000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11496,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000081e4286ae422fa457cefa1435dd44ae0bb9286ef00000000000000000000000081e4286ae422fa457cefa1435dd44ae0bb9286ef0000000000000000000000000000000000000000000000000078cad1e25d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11497,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000081e4286ae422fa457cefa1435dd44ae0bb9286ef00000000000000000000000081e4286ae422fa457cefa1435dd44ae0bb9286ef000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11498,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000297b4d91270a60e31336cfe27175168ba37949f0000000000000000000000000297b4d91270a60e31336cfe27175168ba37949f000000000000000000000000000000000000000000000000015cf863e114dd4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11500,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004d75e5fdf2ffd3453434d89ca32e67b94b9331b70000000000000000000000004d75e5fdf2ffd3453434d89ca32e67b94b9331b7000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11501,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000004c411485477522813167cfecc71393ea8b2ca0100000000000000000000000004c411485477522813167cfecc71393ea8b2ca0100000000000000000000000000000000000000000000000000000000034e21d000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11503,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba8180be54f0ba63b522cf0b7aa0c224e8f85e2f000000000000000000000000ba8180be54f0ba63b522cf0b7aa0c224e8f85e2f000000000000000000000000000000000000000000000000001aa71cdf88da3100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11504,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d41aa4577d756c05bff040abfd9b106056479290000000000000000000000000d41aa4577d756c05bff040abfd9b10605647929000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11505,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d41aa4577d756c05bff040abfd9b106056479290000000000000000000000000d41aa4577d756c05bff040abfd9b10605647929000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11506,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d41aa4577d756c05bff040abfd9b106056479290000000000000000000000000d41aa4577d756c05bff040abfd9b10605647929000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11507,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029acac16c2d740838ad2ea70906f7770ff7d61d500000000000000000000000029acac16c2d740838ad2ea70906f7770ff7d61d500000000000000000000000000000000000000000000000002b3b697072410f400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xa819870defd32e40a530bba66ce1c2a20587ec83732ec8c4d7e1aa93fcde9fe3,2022-04-21 00:40:19.000 UTC,0,true -11509,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008be11e449bc40d84c94ef7cc4b7fc7e05fda80110000000000000000000000008be11e449bc40d84c94ef7cc4b7fc7e05fda801100000000000000000000000000000000000000000000000000683a6e4f78360000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11510,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d52d6970660cf9b5fb02be7c8c9accd14e57de30000000000000000000000000d52d6970660cf9b5fb02be7c8c9accd14e57de300000000000000000000000000000000000000000000000000152451ac8208f8400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11512,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a0d941e4ab7ae78b1f287a5df076d88338466460000000000000000000000000a0d941e4ab7ae78b1f287a5df076d8833846646000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11513,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a0d941e4ab7ae78b1f287a5df076d88338466460000000000000000000000000a0d941e4ab7ae78b1f287a5df076d8833846646000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11514,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e4b5364b23202aa18bb38c6b82bcc0910ad8eec4000000000000000000000000e4b5364b23202aa18bb38c6b82bcc0910ad8eec40000000000000000000000000000000000000000000000000000ffd0a23a250000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11515,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000039f6a4c70c582d90b403f2d72d897577830fa45b0000000000000000000000000000000000000000000000002a9046a26e95f6e2,0x92ad0957ac447e4bf29551326dfb8aea7318333b9e7f494395f6f336716e5ee1,2022-05-06 09:32:13.000 UTC,0,true -11516,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000048618c2aa5367a39d3e5b50c1c73a20c8a526dc600000000000000000000000048618c2aa5367a39d3e5b50c1c73a20c8a526dc600000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe7bce3571c11d9b4643de81b6be89e2114c144a75f01a1c44d33e639557c805f,2022-08-04 12:57:56.000 UTC,0,true -11519,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000c42bf74b2994882212034f15342cbe3520ef50d5000000000000000000000000c42bf74b2994882212034f15342cbe3520ef50d5000000000000000000000000000000000000000000000000000000000a31acbd00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11521,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000060a9a65a99fdb184b6d2ba75010a789b725979c600000000000000000000000060a9a65a99fdb184b6d2ba75010a789b725979c60000000000000000000000000000000000000000000000000de433da14b5d66200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11527,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000006710f4d73f116f7204629d511dbfff128f6aed290000000000000000000000006710f4d73f116f7204629d511dbfff128f6aed290000000000000000000000000000000000000000000000000f123f3f0213000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11528,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e558abb2f5a0dec4192a71ffcce766a2986fc900000000000000000000000004e558abb2f5a0dec4192a71ffcce766a2986fc9000000000000000000000000000000000000000000000000000060a24181e400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11529,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000057cc8aeb3765b260fa6e058104cf56dbf7cf051300000000000000000000000057cc8aeb3765b260fa6e058104cf56dbf7cf051300000000000000000000000000000000000000000000000000e835dc79935ad100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x085b6dbd607994e4287a09a0020f1c5b1e5ee0b909020acd3ff39836b23ec6e1,2022-04-21 00:43:07.000 UTC,0,true -11530,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f2fe5797f43f6e1932b9e78c3aa4599ca8f92e83000000000000000000000000f2fe5797f43f6e1932b9e78c3aa4599ca8f92e830000000000000000000000000000000000000000000000000045a17b942c0f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11531,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e760f55753a38ef936aab6c1e6e9b6951afca1f0000000000000000000000000e760f55753a38ef936aab6c1e6e9b6951afca1f00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11532,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000890bf4a988c8c846fdeb8a35aed0f53fb139904c000000000000000000000000890bf4a988c8c846fdeb8a35aed0f53fb139904c000000000000000000000000000000000000000000000000003a96c516ac3b2a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11533,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009e939d5f4ea6566a1a1f674d16446d83d60dbba40000000000000000000000009e939d5f4ea6566a1a1f674d16446d83d60dbba400000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11534,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d226904f0584d1ed41bacb99d295d41757719330000000000000000000000003d226904f0584d1ed41bacb99d295d41757719330000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11535,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000003d226904f0584d1ed41bacb99d295d41757719330000000000000000000000003d226904f0584d1ed41bacb99d295d41757719330000000000000000000000000000000000000000000000008ac7230489e8000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11537,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004372586e924a21264c5c2ef74aeea85dda9d17b60000000000000000000000004372586e924a21264c5c2ef74aeea85dda9d17b6000000000000000000000000000000000000000000000000011a571a18f6d20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11541,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f9ea193a21b446f62264a8f0c354c293447507f0000000000000000000000002f9ea193a21b446f62264a8f0c354c293447507f0000000000000000000000000000000000000000000000000015b83a6a9a5eb600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11542,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000c61f03c27a1df9c5f1967c98f0c33a86db2e5e87000000000000000000000000c61f03c27a1df9c5f1967c98f0c33a86db2e5e870000000000000000000000000000000000000000000000000000000000b71b0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11544,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000000694580c722c01e65125a2013d3e83a360d78faa0000000000000000000000000694580c722c01e65125a2013d3e83a360d78faa000000000000000000000000000000000000000000000000000000000296baa800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11545,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000694580c722c01e65125a2013d3e83a360d78faa0000000000000000000000000694580c722c01e65125a2013d3e83a360d78faa000000000000000000000000000000000000000000000000001611a9b980b6c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11547,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008620262510c86943fd841ec2047dfc2953afaea40000000000000000000000008620262510c86943fd841ec2047dfc2953afaea4000000000000000000000000000000000000000000000000006b6a681ce4941f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11551,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e9d2c76cf11bd7720b723743a49a422a41744990000000000000000000000006e9d2c76cf11bd7720b723743a49a422a417449900000000000000000000000000000000000000000000000000012c221cc6a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11553,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000158dc5b8d904b089e60f26dc6e46c7eaaa45ab19000000000000000000000000158dc5b8d904b089e60f26dc6e46c7eaaa45ab190000000000000000000000000000000000000000000000000000000001cd048700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11555,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ad8c8b5e49ca573b5773d1341f94a0cf4a7f87e0000000000000000000000003ad8c8b5e49ca573b5773d1341f94a0cf4a7f87e000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11556,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000acb7acab4753e146b4b96dba23001a6e4b9641f4000000000000000000000000acb7acab4753e146b4b96dba23001a6e4b9641f40000000000000000000000000000000000000000000000000001267fd9b60f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11557,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000009adcfbb8130121d16f97f8b3c85577290eada2100000000000000000000000009adcfbb8130121d16f97f8b3c85577290eada2100000000000000000000000000000000000000000000000000015c79c45df20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11558,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a74b807ba83d2d8e1eb89c52e7755d71b6997b7e000000000000000000000000a74b807ba83d2d8e1eb89c52e7755d71b6997b7e00000000000000000000000000000000000000000000000000014a047819ec0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11559,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000577261ec9ee56d7aba53992a461b5354a93bb18e000000000000000000000000577261ec9ee56d7aba53992a461b5354a93bb18e00000000000000000000000000000000000000000000000000018b75cc50ea0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11560,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000008a5a39e310735d307bdf5a9d85cd43ea68a763d00000000000000000000000008a5a39e310735d307bdf5a9d85cd43ea68a763d0000000000000000000000000000000000000000000000000001398456d55b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11561,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000091dfa6495e82f9693d8861df38000c07c45e5c6100000000000000000000000091dfa6495e82f9693d8861df38000c07c45e5c610000000000000000000000000000000000000000000000000001398456d55b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11562,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008774e03db6408f86a0ba2c0efa72785da6aba95e0000000000000000000000008774e03db6408f86a0ba2c0efa72785da6aba95e00000000000000000000000000000000000000000000000000014395c640470000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11563,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000064811f98714304766366fe5aa4c46113f1045d9700000000000000000000000064811f98714304766366fe5aa4c46113f1045d9700000000000000000000000000000000000000000000000000014395c640470000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11564,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f6e8bbf21e37a54e03350d535f929e1817cb6efc000000000000000000000000f6e8bbf21e37a54e03350d535f929e1817cb6efc000000000000000000000000000000000000000000000000000104a8cde4040000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11565,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003779a82f00cd8d1aa38f29645553511b8730692b0000000000000000000000003779a82f00cd8d1aa38f29645553511b8730692b000000000000000000000000000000000000000000000000000104a8cde4040000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11566,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dcd47ce5f406cc7538a421c6370e9205fd3bc58e000000000000000000000000dcd47ce5f406cc7538a421c6370e9205fd3bc58e000000000000000000000000000000000000000000000000000104a8cde4040000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11567,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a0d941e4ab7ae78b1f287a5df076d88338466460000000000000000000000000a0d941e4ab7ae78b1f287a5df076d8833846646000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11568,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fbd1532d9e42a011f96a5525ab92ad65e7aa84bb000000000000000000000000fbd1532d9e42a011f96a5525ab92ad65e7aa84bb0000000000000000000000000000000000000000000000000000a118d56d580000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11569,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a0d941e4ab7ae78b1f287a5df076d88338466460000000000000000000000000a0d941e4ab7ae78b1f287a5df076d8833846646000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11570,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1b8fe74b07117cd9366efb8b8dac6a297f4c342000000000000000000000000f1b8fe74b07117cd9366efb8b8dac6a297f4c34200000000000000000000000000000000000000000000000000039ccef756f84000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11571,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e73a86165f7af016a226ac479e0bac466014609e000000000000000000000000e73a86165f7af016a226ac479e0bac466014609e0000000000000000000000000000000000000000000000000000a118d56d580000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11572,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a0d941e4ab7ae78b1f287a5df076d88338466460000000000000000000000000a0d941e4ab7ae78b1f287a5df076d8833846646000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11573,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000002abe428abc766f084717edd95719e2db9b43d0300000000000000000000000002abe428abc766f084717edd95719e2db9b43d030000000000000000000000000000000000000000000000000000a118d56d580000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11574,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e8414bc362f1467660f38745dd8bfc0d6e28dbc0000000000000000000000000e8414bc362f1467660f38745dd8bfc0d6e28dbc0000000000000000000000000000000000000000000000000000a118d56d580000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11575,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f0b65f3c1f0b85431296df9340e34388a63891c1000000000000000000000000f0b65f3c1f0b85431296df9340e34388a63891c100000000000000000000000000000000000000000000000000001b22a0495b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11576,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008894e730951204b7d64e1f59d49709338545bcc80000000000000000000000008894e730951204b7d64e1f59d49709338545bcc80000000000000000000000000000000000000000000000000000a473fa90fc0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11577,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008753f2d2c6ae30915ff0f0c2c6dbc4bcb538ffef0000000000000000000000008753f2d2c6ae30915ff0f0c2c6dbc4bcb538ffef0000000000000000000000000000000000000000000000000001002f4709d40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11578,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bcffb44d92c56976fabcd4de6115cf56a7bc7146000000000000000000000000bcffb44d92c56976fabcd4de6115cf56a7bc714600000000000000000000000000000000000000000000000000006d5bae328d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11579,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f8892b736ffc855e4eecf6b3ab947c61a340cb28000000000000000000000000f8892b736ffc855e4eecf6b3ab947c61a340cb2800000000000000000000000000000000000000000000000000006d5bae328d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11580,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000030cd54e2a9d82760ba591a51c83cd883974dab5200000000000000000000000030cd54e2a9d82760ba591a51c83cd883974dab5200000000000000000000000000000000000000000000000000006d5bae328d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11581,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c61c0b9ff192b495a1099cbf917c833c8c086190000000000000000000000003c61c0b9ff192b495a1099cbf917c833c8c086190000000000000000000000000000000000000000000000000000c1424ead910000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11582,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006bb1d9bd63345e604f020558e9058df365285fc00000000000000000000000006bb1d9bd63345e604f020558e9058df365285fc00000000000000000000000000000000000000000000000000000c1424ead910000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11583,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a0d941e4ab7ae78b1f287a5df076d88338466460000000000000000000000000a0d941e4ab7ae78b1f287a5df076d8833846646000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11584,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a0d941e4ab7ae78b1f287a5df076d88338466460000000000000000000000000a0d941e4ab7ae78b1f287a5df076d8833846646000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11585,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000093e4abd1c5460d06260eca4de43c31ec5264c5af00000000000000000000000093e4abd1c5460d06260eca4de43c31ec5264c5af0000000000000000000000000000000000000000000000000000d5652d83690000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11586,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000646131fdebeb2db7a1b3c4cb174b916cd0a319be000000000000000000000000646131fdebeb2db7a1b3c4cb174b916cd0a319be0000000000000000000000000000000000000000000000000000899ad173dc0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11587,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cb49c0142bb393376f1e7504f159fca9a46e9e44000000000000000000000000cb49c0142bb393376f1e7504f159fca9a46e9e4400000000000000000000000000000000000000000000000000009f6b42db860000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11588,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c94b4d98fe35e7334bfc8cb8415830b9de454f90000000000000000000000003c94b4d98fe35e7334bfc8cb8415830b9de454f900000000000000000000000000000000000000000000000000004320c587680000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11589,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000525e1aac73a5d4f5d61dc802fe2246673fea9e92000000000000000000000000525e1aac73a5d4f5d61dc802fe2246673fea9e9200000000000000000000000000000000000000000000000000004320c587680000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11590,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000007cb7e8fae5ceafa9ef063b54aa3258045c5023000000000000000000000000007cb7e8fae5ceafa9ef063b54aa3258045c5023000000000000000000000000000000000000000000000000000004320c587680000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11591,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ab5f2ab0de0455ba06ecea8502da721f005b5330000000000000000000000004ab5f2ab0de0455ba06ecea8502da721f005b53300000000000000000000000000000000000000000000000000004320c587680000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11592,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e4a6bb16eca4a584cf8ba21dd86fc52da6693c50000000000000000000000000e4a6bb16eca4a584cf8ba21dd86fc52da6693c5000000000000000000000000000000000000000000000000000004320c587680000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11593,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003960f374c35d8b13502528b24f55c3037387eca70000000000000000000000003960f374c35d8b13502528b24f55c3037387eca700000000000000000000000000000000000000000000000000004320c587680000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11594,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007730fa4b23e5a0f6e01aa058eff275f155dc40030000000000000000000000007730fa4b23e5a0f6e01aa058eff275f155dc400300000000000000000000000000000000000000000000000000002ddf84fb040000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11595,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047a20e747763e82dd6e6339cc4f551c6d94552f200000000000000000000000047a20e747763e82dd6e6339cc4f551c6d94552f200000000000000000000000000000000000000000000000000002ddf84fb040000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11596,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e38452c4571ae2259dd5362df4559bb5c4e0d6f3000000000000000000000000e38452c4571ae2259dd5362df4559bb5c4e0d6f30000000000000000000000000000000000000000000000000000c8cf623dc20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11597,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1b8fe74b07117cd9366efb8b8dac6a297f4c342000000000000000000000000f1b8fe74b07117cd9366efb8b8dac6a297f4c34200000000000000000000000000000000000000000000000000affad2c2a47a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11598,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a2b0cbec59fa79c1239db2668afff910be0fb780000000000000000000000001a2b0cbec59fa79c1239db2668afff910be0fb78000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11599,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000052870639beb9df97757882384538f8c0d2e056c300000000000000000000000052870639beb9df97757882384538f8c0d2e056c3000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11600,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f12b92d14415f71fb12b6b000e962ecd8a65f1c0000000000000000000000008f12b92d14415f71fb12b6b000e962ecd8a65f1c000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11601,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a00d212fd92b45bd0cc810c93d014916adb6bd4f000000000000000000000000a00d212fd92b45bd0cc810c93d014916adb6bd4f000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11602,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000091382e33a385470061c3586d11a4716758257d1800000000000000000000000091382e33a385470061c3586d11a4716758257d18000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11603,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ce31f92369461850e7a6824ce8c9c77f2ce4279b000000000000000000000000ce31f92369461850e7a6824ce8c9c77f2ce4279b000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11604,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba67979a4d652ca11c1c545739eec468abbbe122000000000000000000000000ba67979a4d652ca11c1c545739eec468abbbe122000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11605,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061afdca5ab3b32a5b54460a7e57d9f63434a3d5b00000000000000000000000061afdca5ab3b32a5b54460a7e57d9f63434a3d5b000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11606,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006dc8583a625298aaa8671b70eb3ce3b86197a5cb0000000000000000000000006dc8583a625298aaa8671b70eb3ce3b86197a5cb00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11607,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f15c653f85315a36f843f8fb85cbe587171274ca000000000000000000000000f15c653f85315a36f843f8fb85cbe587171274ca000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11608,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007edebd14451fa80394d486602cede9b12d28ca290000000000000000000000007edebd14451fa80394d486602cede9b12d28ca29000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11609,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007c431698ca9876356e7c323eac9cc35da28182650000000000000000000000007c431698ca9876356e7c323eac9cc35da2818265000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11610,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c536b179274d0e545631200f8c9244fb65bc30c3000000000000000000000000c536b179274d0e545631200f8c9244fb65bc30c300000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11611,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000caee6f7d0562ea2f12964aacab17cb011bfafe9d000000000000000000000000caee6f7d0562ea2f12964aacab17cb011bfafe9d000000000000000000000000000000000000000000000000001e94524ed3010000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11612,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007b3e1735989bf78a070231aecc6b13166d085a4b0000000000000000000000007b3e1735989bf78a070231aecc6b13166d085a4b00000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11613,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006635fdbdbbeb9df291121aff8cf143ef99f98dfc0000000000000000000000006635fdbdbbeb9df291121aff8cf143ef99f98dfc00000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11614,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aee527ad6aee9243b49ed7dfb6a533bf355b60f4000000000000000000000000aee527ad6aee9243b49ed7dfb6a533bf355b60f400000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11615,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9085ee5e61775c7a88d329d6829e77f6a712c59000000000000000000000000f9085ee5e61775c7a88d329d6829e77f6a712c5900000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11616,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dba18812ee9b2f25773ace23bf34ef2db7e79737000000000000000000000000dba18812ee9b2f25773ace23bf34ef2db7e7973700000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11617,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b198861ea2c62ff1c96d3424a441296c4a54fae1000000000000000000000000b198861ea2c62ff1c96d3424a441296c4a54fae100000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11618,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000074aa8463874aebb1ae29be8f8ba1adc322a9402d00000000000000000000000074aa8463874aebb1ae29be8f8ba1adc322a9402d000000000000000000000000000000000000000000000000001b7dd8d2d8a67000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11619,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b198861ea2c62ff1c96d3424a441296c4a54fae1000000000000000000000000b198861ea2c62ff1c96d3424a441296c4a54fae1000000000000000000000000000000000000000000000000000c7606fae9420000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11620,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000516f7df8b3ff2787e6086534435e8fea9f14fd29000000000000000000000000516f7df8b3ff2787e6086534435e8fea9f14fd29000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11621,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000001c7de0e480812e74f76b83a81cd6453da5bf30000000000000000000000000001c7de0e480812e74f76b83a81cd6453da5bf3000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11622,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000084c641b467ba83ea61d68d0bb589a3e47f447c2b00000000000000000000000084c641b467ba83ea61d68d0bb589a3e47f447c2b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11623,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f6463d3bb34f80da48008eb8610c6a221e782808000000000000000000000000f6463d3bb34f80da48008eb8610c6a221e7828080000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11624,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099f316195d72f7627d22a7994f0abac609af751400000000000000000000000099f316195d72f7627d22a7994f0abac609af75140000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11625,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f07780f9a8e3835befaa4bfee05fe1fe60b1f4cb000000000000000000000000f07780f9a8e3835befaa4bfee05fe1fe60b1f4cb0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11626,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005956e5e6b032f5b0f34faf2f8f99ec158f278f9c0000000000000000000000005956e5e6b032f5b0f34faf2f8f99ec158f278f9c000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11627,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3e5ff75cf6e0f0c90d0baa305b2ce33dbfeced3000000000000000000000000d3e5ff75cf6e0f0c90d0baa305b2ce33dbfeced30000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11628,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000048ee21533af3087ea90b3efeb94334cc528f512800000000000000000000000048ee21533af3087ea90b3efeb94334cc528f51280000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11629,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000068d227556054b7bf14ca43a1b9b96387098033e800000000000000000000000068d227556054b7bf14ca43a1b9b96387098033e80000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11630,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021617c7270f645e59e9da4a6fd1269b56953199600000000000000000000000021617c7270f645e59e9da4a6fd1269b5695319960000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11631,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d5bd0596b241e9954ca6da08132de7fea11238d0000000000000000000000000d5bd0596b241e9954ca6da08132de7fea11238d00000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11632,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008aa6869c58b6be38dc61c1ca883cff5a59b2d3020000000000000000000000008aa6869c58b6be38dc61c1ca883cff5a59b2d3020000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11633,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d43867c2bb79bc362e96b14528c977053aefff6f000000000000000000000000d43867c2bb79bc362e96b14528c977053aefff6f0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11634,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c40082505b0d4481384b2208c0c61a0ca55ebaa4000000000000000000000000c40082505b0d4481384b2208c0c61a0ca55ebaa40000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11635,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a0101ede2d003f78d70310379b1d294eba4c4530000000000000000000000000a0101ede2d003f78d70310379b1d294eba4c4530000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11637,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d391e8aeac08f158c789d15de0862b25f5b8f32a000000000000000000000000d391e8aeac08f158c789d15de0862b25f5b8f32a000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11638,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000b24adeb0b9fbbca38192c4104120d0065d3d67fe000000000000000000000000b24adeb0b9fbbca38192c4104120d0065d3d67fe0000000000000000000000000000000000000000000000000000000001c8cfaa00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11640,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000003c264c1366ebd96542098d3506f0d3be8d25ee380000000000000000000000000000000000000000000000001b56d88fff850000,,,1,true -11642,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000a70fe1e31c432658b1903502979a6e01092113ff000000000000000000000000a70fe1e31c432658b1903502979a6e01092113ff0000000000000000000000000000000000000000000000000000000001c9c38000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11643,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b18e2769c8f29bb604d517e6f4167869adb88ab0000000000000000000000001b18e2769c8f29bb604d517e6f4167869adb88ab000000000000000000000000000000000000000000000000015418c5f4bc438900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11645,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f804bc24fca7df18e5fee7ceabf553f00c049f90000000000000000000000006f804bc24fca7df18e5fee7ceabf553f00c049f900000000000000000000000000000000000000000000000000044364c5bb000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11646,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008b1d10ac24be13ddd7c4186490dacf50727ffff40000000000000000000000008b1d10ac24be13ddd7c4186490dacf50727ffff4000000000000000000000000000000000000000000000000000665172898800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11648,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e695826d245ea190c9414df6c4eae980174bcbb0000000000000000000000003e695826d245ea190c9414df6c4eae980174bcbb000000000000000000000000000000000000000000000000000665172898800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11649,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000db7ffb5ef7d6a059f914884fc7c33f7eeb194b5c000000000000000000000000db7ffb5ef7d6a059f914884fc7c33f7eeb194b5c000000000000000000000000000000000000000000000000000665172898800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11653,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005dff7f38b4869eac1639e32c0c32e824d3be6cc60000000000000000000000005dff7f38b4869eac1639e32c0c32e824d3be6cc600000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11654,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004adce7bbd76ac682b51a83a2b41562a3c17449900000000000000000000000004adce7bbd76ac682b51a83a2b41562a3c174499000000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11655,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b67fff3fb149c9009502e107fd51815ab329b4ea000000000000000000000000b67fff3fb149c9009502e107fd51815ab329b4ea00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11656,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000824b83fce26b47e3f362610ea0e24af489ae4fb4000000000000000000000000824b83fce26b47e3f362610ea0e24af489ae4fb400000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11657,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000254be7b39396b1a9fceac3685f57d3b04d717ab2000000000000000000000000254be7b39396b1a9fceac3685f57d3b04d717ab2000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11658,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000093ea069784ba3580805ca976455201dff1cdc53f00000000000000000000000093ea069784ba3580805ca976455201dff1cdc53f0000000000000000000000000000000000000000000000000010a153a7476cab00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11659,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c4839c439a8646a64c7ce5a7da008a5d0062d4bc000000000000000000000000c4839c439a8646a64c7ce5a7da008a5d0062d4bc00000000000000000000000000000000000000000000000000277ce89ab52ae300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11660,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000000aa33d9bcdcebe2db009ac6849aa305f8a7ee5600000000000000000000000000aa33d9bcdcebe2db009ac6849aa305f8a7ee56000000000000000000000000000000000000000000000000009e3a48c03141ce00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11665,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000036c88373b259a8e7947e0a36072adaa733c794b900000000000000000000000036c88373b259a8e7947e0a36072adaa733c794b900000000000000000000000000000000000000000000000000ffd8e1655634b100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11666,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e866fb89265ae8f9f9ef5f4b0d30f6f30eb13c84000000000000000000000000e866fb89265ae8f9f9ef5f4b0d30f6f30eb13c8400000000000000000000000000000000000000000000000000e31bfcf8ba820000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11667,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a668818c0e0f43811ed647e49799ba22181d832a000000000000000000000000a668818c0e0f43811ed647e49799ba22181d832a00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11671,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078f4775fb0ad590d7790bcbe460ae4304b06d02b00000000000000000000000078f4775fb0ad590d7790bcbe460ae4304b06d02b0000000000000000000000000000000000000000000000000076097db36b977d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x24f718c2a3349a1230aba5e5d663b3bd4be2b819cb92251fc322f5ed2c30dc80,2022-03-28 06:50:26.000 UTC,0,true -11672,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d27cfb08a7e2c32dfddb0ca0496af5a9d1148f30000000000000000000000007d27cfb08a7e2c32dfddb0ca0496af5a9d1148f3000000000000000000000000000000000000000000000000003630fb5e01fdc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11674,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005234ec9b99d1ded2c9bd394cd0e786b1a43806c10000000000000000000000005234ec9b99d1ded2c9bd394cd0e786b1a43806c1000000000000000000000000000000000000000000000000014ed85e68f59fe500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11675,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000403c2d4099179e178a0b9860139f0284a63c8690000000000000000000000000403c2d4099179e178a0b9860139f0284a63c86900000000000000000000000000000000000000000000000000c7d713b49da000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11679,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049d2db5f6c17a5a2894f52125048aaa98885000900000000000000000000000049d2db5f6c17a5a2894f52125048aaa98885000900000000000000000000000000000000000000000000000000564e2aaf3b19f600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11683,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ba9e3d69f573c1c79c7d66e8a0d096583b524540000000000000000000000004ba9e3d69f573c1c79c7d66e8a0d096583b5245400000000000000000000000000000000000000000000000006e151cceff9115a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11684,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bcc34be4cce3c236ccc2e4b9940c874c13d05ed3000000000000000000000000bcc34be4cce3c236ccc2e4b9940c874c13d05ed300000000000000000000000000000000000000000000000002c68af0bb14000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11687,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c9d9fc19515b544f84b597af87da1f7d60c86460000000000000000000000008c9d9fc19515b544f84b597af87da1f7d60c864600000000000000000000000000000000000000000000000001670911247c87bf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11690,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000af884a663e7353d8adf6a2cbea90eb5961296136000000000000000000000000af884a663e7353d8adf6a2cbea90eb596129613600000000000000000000000000000000000000000000000006dd1fce7a1ce40500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2795f799d8095f694b7362dad309550236506b3e91a93d372687353f6b199e48,2022-02-15 10:53:27.000 UTC,0,true -11697,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f6510b68c671514190e6c3bc74ec4a316970e0e0000000000000000000000006f6510b68c671514190e6c3bc74ec4a316970e0e00000000000000000000000000000000000000000000000000a5185ce924dbca00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11699,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000006f6634b2aab01df7f47f615fb4e2b876bd3ae5ea0000000000000000000000000000000000000000000000043b6293db1d233a0e,0x548764f6aceeddd484701201a1dcd73b7898582a84d87550710b9b1afcd5aaed,2021-12-26 23:37:59.000 UTC,0,true -11702,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf053cd97db53e930e03ca1e6dab3c7507b6e2fb000000000000000000000000cf053cd97db53e930e03ca1e6dab3c7507b6e2fb000000000000000000000000000000000000000000000000001f467897a1980000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11705,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000885fbc6e02db6b1d26de3f73e80ad7f1ddc10021000000000000000000000000885fbc6e02db6b1d26de3f73e80ad7f1ddc1002100000000000000000000000000000000000000000000000000cb7dd7974e1e9100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x658d664b433c9ae3c7b6af92b84de682cce84f0e36ef18f6761d5092df8bdf24,2022-02-13 14:11:20.000 UTC,0,true -11710,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fd46396d5a6f7429edde41020601c37fb986f1f0000000000000000000000000fd46396d5a6f7429edde41020601c37fb986f1f0000000000000000000000000000000000000000000000000001b5113435414c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11711,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6a7b804644124978896dc656c886fa4dcd36156000000000000000000000000b6a7b804644124978896dc656c886fa4dcd36156000000000000000000000000000000000000000000000000009d73da8bdfc12700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x8d9a32e521b309f01766b00d3b1cdf886025092bcb33165086d696c6f0a38ca5,2022-02-13 14:11:59.000 UTC,0,true -11713,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045c1cc34a0981e5d91fb683a6f7756698a643e7b00000000000000000000000045c1cc34a0981e5d91fb683a6f7756698a643e7b000000000000000000000000000000000000000000000000000e7e241056de0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11717,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005be10f3434bc1ac6c0a34f86da39ea0095392f210000000000000000000000005be10f3434bc1ac6c0a34f86da39ea0095392f21000000000000000000000000000000000000000000000000003c29d8fcb4790000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11720,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf9ffdfb47332beee87adbd06724459a82cf639f000000000000000000000000cf9ffdfb47332beee87adbd06724459a82cf639f000000000000000000000000000000000000000000000000009b6a90700b6bcf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11722,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e19adc684c906dda7f425eb49763adddcb83f81e000000000000000000000000e19adc684c906dda7f425eb49763adddcb83f81e0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11724,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000467ba81768726359f4a5172e2c548902ff880ef0000000000000000000000000467ba81768726359f4a5172e2c548902ff880ef000000000000000000000000000000000000000000000000000ac48f4bde5d52d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x44207f02f8a62576f7e259d5042ebe5a21d9b13a10d8b85985cfef6015cd26ab,2022-08-01 01:28:30.000 UTC,0,true -11730,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006da005df546294539904fd749a953849db2b45e00000000000000000000000006da005df546294539904fd749a953849db2b45e00000000000000000000000000000000000000000000000000057c7a330b8d60200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x084eed396a65c452d14f68a981a02c59f17387f101a58b3c984696e8c9854f34,2022-03-15 06:39:59.000 UTC,0,true -11733,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f6c8c9479772775c7577c5fecea9621df7c1175a000000000000000000000000f6c8c9479772775c7577c5fecea9621df7c1175a00000000000000000000000000000000000000000000000000a3fbf3d40a14ca00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11742,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000025950f980176941e146b8a4bf8cdf48b2631463400000000000000000000000025950f980176941e146b8a4bf8cdf48b263146340000000000000000000000000000000000000000000000000080e373da35bd6400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11743,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000019601a8469f4e1ff0ecbae0b5be957efe7f7f1e100000000000000000000000019601a8469f4e1ff0ecbae0b5be957efe7f7f1e1000000000000000000000000000000000000000000000000001a51bfc567e1c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11744,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000002e50a97212a0c1bef5cea4a5edb0f6309b11a8a90000000000000000000000002e50a97212a0c1bef5cea4a5edb0f6309b11a8a900000000000000000000000000000000000000000000003ed493ca13f1dba7be00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11748,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003755b30ed3f778c526fd8eebd7b8adefce1f62970000000000000000000000003755b30ed3f778c526fd8eebd7b8adefce1f6297000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11751,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dab8c2d612826775ecfeb22c46298bfcdf456649000000000000000000000000dab8c2d612826775ecfeb22c46298bfcdf456649000000000000000000000000000000000000000000000000058d15e17628000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11756,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000064364de05b2fa5255e9733e4ef6394a98d5fd16c00000000000000000000000064364de05b2fa5255e9733e4ef6394a98d5fd16c00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11758,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008fb682dba959981243ee93a73ee81bc38f9983f00000000000000000000000008fb682dba959981243ee93a73ee81bc38f9983f000000000000000000000000000000000000000000000000000595e70acea06f100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11761,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a3a9196408d30e8b3809780432d35ee090a31d10000000000000000000000003a3a9196408d30e8b3809780432d35ee090a31d100000000000000000000000000000000000000000000000003782dace9d9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11762,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000fc6bc21172b32b445c84e07e4d219fcf04756140000000000000000000000000fc6bc21172b32b445c84e07e4d219fcf047561400000000000000000000000000000000000000000000000000c9897e80af132700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9a04f3b03ee261c57149ec9b00031b187bf59207f2cc54cfb87af6ec25400dfd,2022-03-06 04:58:54.000 UTC,0,true -11769,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004f459dc2a1dac3cfb64dc5dceba6ab02d8e1fc1c0000000000000000000000004f459dc2a1dac3cfb64dc5dceba6ab02d8e1fc1c0000000000000000000000000000000000000000000000000018a2000fa188c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11771,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001de489664453556166157824d6b853df73cb4e8e0000000000000000000000001de489664453556166157824d6b853df73cb4e8e0000000000000000000000000000000000000000000000000ddac67e2f17319000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11777,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da0495efc637cb645d4c81f684bbc5af7d8a3fdc000000000000000000000000da0495efc637cb645d4c81f684bbc5af7d8a3fdc00000000000000000000000000000000000000000000000001988fe4052b800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd737e94b8e5f9530d2450892e46e7c6facaab937f54f96281f57a7eebca3f5a4,2022-02-27 03:23:05.000 UTC,0,true -11779,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000528c81bf6af32e5f6a4a39a0990cb01d1a121a49000000000000000000000000528c81bf6af32e5f6a4a39a0990cb01d1a121a4900000000000000000000000000000000000000000000000002a303fe4b53000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xbe08285497966bb82f98d899dd5914129caaf3bb6826b1584fa04eb18f39d3a0,2022-02-27 03:19:59.000 UTC,0,true -11783,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002282bc8e090439a0195e0c862ae3ffc47bd2edd80000000000000000000000002282bc8e090439a0195e0c862ae3ffc47bd2edd80000000000000000000000000000000000000000000000000020fe64314c270000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11785,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029867e23140a908770b750fb4e30f35c619a3b3a00000000000000000000000029867e23140a908770b750fb4e30f35c619a3b3a00000000000000000000000000000000000000000000000000cc5c6677b702f800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11787,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000350a791bfc2c21f9ed5d10980dad2e2638ffa7f60000000000000000000000007e363fd04efec7050be8e8bb1adfb22f44e7c3e60000000000000000000000007e363fd04efec7050be8e8bb1adfb22f44e7c3e6000000000000000000000000000000000000000000000000ae88baa6de28dbef00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11788,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e81669100000000000000000000000082b7062e1bd9a0e1b6caaf031311fcba585a8fd600000000000000000000000082b7062e1bd9a0e1b6caaf031311fcba585a8fd6000000000000000000000000000000000000000000000000a531b37bb7d66b4000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11789,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000741f0e84e8115dc41a03f27ade25ce8bfca3cd35000000000000000000000000741f0e84e8115dc41a03f27ade25ce8bfca3cd3500000000000000000000000000000000000000000000000001cdda4faccd000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xb1f304788f99ac59828b3f4f377032661e60c6dbd33ae8058513e60c580beb6f,2022-05-08 01:15:20.000 UTC,0,true -11790,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000098ae0e9d9b63cbed47db9b456b51e58c7b87328000000000000000000000000098ae0e9d9b63cbed47db9b456b51e58c7b8732800000000000000000000000000000000000000000000000000ac4d594064aa8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11791,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59900000000000000000000000068f180fcce6836688e9084f035309e29bf0a2095000000000000000000000000bef448d1598e91e37a037fef50993af4a0f827be000000000000000000000000bef448d1598e91e37a037fef50993af4a0f827be000000000000000000000000000000000000000000000000000000000004880100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11792,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b77a6d92fc116a6a3e2bd441e9623172e7f0623a000000000000000000000000b77a6d92fc116a6a3e2bd441e9623172e7f0623a0000000000000000000000000000000000000000000000000160eeb21b507d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11797,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000968cb804437f8698bd2bcc5481bd56bec96c1a1c000000000000000000000000968cb804437f8698bd2bcc5481bd56bec96c1a1c00000000000000000000000000000000000000000000000000a6f8cd5d2d046700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5d6cd6a575a387eaacb9d27e23c67de82879a9c593ef93a4de2d29c552e204a5,2022-04-17 00:12:45.000 UTC,0,true -11798,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000004defc44cdfd3eee7fae1d5a3901e97b27cd01e3c0000000000000000000000004defc44cdfd3eee7fae1d5a3901e97b27cd01e3c00000000000000000000000000000000000000000000000000000000018b5bc300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11799,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000064c0ff667164e973b2c4d7fbab01cbe41ef84c3e000000000000000000000000000000000000000000000001975567701a9e1179,,,1,true -11800,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002282bc8e090439a0195e0c862ae3ffc47bd2edd80000000000000000000000002282bc8e090439a0195e0c862ae3ffc47bd2edd80000000000000000000000000000000000000000000000000022cd8672976b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11802,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a365df59857437932bd0394775ac957745edce20000000000000000000000006a365df59857437932bd0394775ac957745edce200000000000000000000000000000000000000000000000002fdf30fe18606aa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11805,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e07a438db3505bcec55417096d4361ef9e8f30f0000000000000000000000008e07a438db3505bcec55417096d4361ef9e8f30f0000000000000000000000000000000000000000000000000dcf70ef714dc79900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11808,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000509e427f5b930822094f203a7ea67d22aa32076b000000000000000000000000509e427f5b930822094f203a7ea67d22aa32076b0000000000000000000000000000000000000000000000000dd0565ed3444ca400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5075031f937830a3daf7ae5c3089aeb8fd8a5db1c018e203c59da700fee35dc1,2022-06-01 01:55:47.000 UTC,0,true -11810,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000044c485a970fc789a64584edacbb32088df5c3ec400000000000000000000000044c485a970fc789a64584edacbb32088df5c3ec4000000000000000000000000000000000000000000000000042e4b861038adec00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11819,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c9e03c778ec2196c84b0f9281761e5f0c966bd80000000000000000000000002c9e03c778ec2196c84b0f9281761e5f0c966bd800000000000000000000000000000000000000000000000000a8735a5928b5ee00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xcad1ab53d788e90076a6728de272fdc139f38e9fce25d19bf59a44c16b133e7f,2022-05-19 05:56:09.000 UTC,0,true -11823,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bb5337c8f4f0ba489a995b863eea29e8c2999664000000000000000000000000bb5337c8f4f0ba489a995b863eea29e8c299966400000000000000000000000000000000000000000000000003e650740306620500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x3ddf90e32936b03deb7b035e41b0a761fe764a7cbd27cce15727408c14f2209a,2022-04-13 06:23:46.000 UTC,0,true -11824,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000004a9a4e4098dadf71d63b53e1b948b501a56fa9920000000000000000000000004a9a4e4098dadf71d63b53e1b948b501a56fa9920000000000000000000000000000000000000000000000a621f311b9214edc6c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11825,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a9a4e4098dadf71d63b53e1b948b501a56fa9920000000000000000000000004a9a4e4098dadf71d63b53e1b948b501a56fa9920000000000000000000000000000000000000000000000000e692456d8b2e4c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11826,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f82a06ee5c6ec735a49bb646f6e401b60f464f10000000000000000000000008f82a06ee5c6ec735a49bb646f6e401b60f464f100000000000000000000000000000000000000000000000002be23d896db90f500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11827,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000003a1eeb08c6df9348956414192c16f00d206291f00000000000000000000000003a1eeb08c6df9348956414192c16f00d206291f0000000000000000000000000000000000000000000000000dd00157fd89767700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11828,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000055affa6bdc01d0cfa8a738b068ece76e56dad51000000000000000000000000055affa6bdc01d0cfa8a738b068ece76e56dad510000000000000000000000000000000000000000000000000012da295010a75700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11829,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a196c9a7d4c5bae6e7f6bec1a5af7ea9a4cac2ef000000000000000000000000a196c9a7d4c5bae6e7f6bec1a5af7ea9a4cac2ef0000000000000000000000000000000000000000000000000017719bc4bfa40100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11832,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000acecb5340a939ee1b9e7ceb975d9ecef88e25bc6000000000000000000000000acecb5340a939ee1b9e7ceb975d9ecef88e25bc6000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11834,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e5ed3d9e994b6e8cbf1e82e303bfbd0d89b3f890000000000000000000000002e5ed3d9e994b6e8cbf1e82e303bfbd0d89b3f890000000000000000000000000000000000000000000000000ad0ef5d88402d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11835,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000031229af0915aa6b3a0f7badac595f8fc90a6534f00000000000000000000000031229af0915aa6b3a0f7badac595f8fc90a6534f00000000000000000000000000000000000000000000000000689ff372ee570000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11837,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d9744cd4aa86dd1b338f02e00ae02c3ddfa39d18000000000000000000000000d9744cd4aa86dd1b338f02e00ae02c3ddfa39d18000000000000000000000000000000000000000000000000009801e77f02404800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11838,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000bd825705ffe24abed5dc12cd1e3b789253b82e3e00000000000000000000000000000000000000000000000031c9703005a731f1,,,1,true -11840,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9c45b6e9a9c2d58dedc192f3eee627dde5d9a3f000000000000000000000000f9c45b6e9a9c2d58dedc192f3eee627dde5d9a3f000000000000000000000000000000000000000000000000003db6579b2724fa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11843,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099c794b7a618f72e89387821b6f184598d75fb4800000000000000000000000099c794b7a618f72e89387821b6f184598d75fb480000000000000000000000000000000000000000000000000160b486423c0d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11846,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000abdcfd11af016bbd617847a464a87993cc61c050000000000000000000000000abdcfd11af016bbd617847a464a87993cc61c050000000000000000000000000000000000000000000000000060cfbb0a212000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xcdb881647ef8144a3583faa156dda9d4ae209f34f1b23aed47b136b5220a2e2c,2022-03-08 04:13:25.000 UTC,0,true -11847,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000066d9679255db0d846c60aeaa6eb8ffb91e57751b00000000000000000000000066d9679255db0d846c60aeaa6eb8ffb91e57751b0000000000000000000000000000000000000000000000000064c13096283b5e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11848,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000588ea768aeb968da685022c5b28760d39937dd9f000000000000000000000000588ea768aeb968da685022c5b28760d39937dd9f00000000000000000000000000000000000000000000000002e86a9cc2020a8a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x57b0ac509a37aac6941d7cc8e820345b6d4705d921b0d1f179fe978a16d9c798,2021-11-28 10:49:01.000 UTC,0,true -11852,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000082747972853c8da3d53ad554cf0c3fed8eed4c1000000000000000000000000082747972853c8da3d53ad554cf0c3fed8eed4c100000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11853,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000082747972853c8da3d53ad554cf0c3fed8eed4c1000000000000000000000000082747972853c8da3d53ad554cf0c3fed8eed4c1000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11854,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000478c1cdd7f51b9ff7e08434363364e9e79784d85000000000000000000000000478c1cdd7f51b9ff7e08434363364e9e79784d8500000000000000000000000000000000000000000000000001546ed86f36746a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11857,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d8e211913247a0ec5454137e7a6ed18ed727a2f0000000000000000000000002d8e211913247a0ec5454137e7a6ed18ed727a2f000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11859,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037ef6c69278b5107dfa058d86e13a1c0cb7f54c900000000000000000000000037ef6c69278b5107dfa058d86e13a1c0cb7f54c9000000000000000000000000000000000000000000000000015f0d455ac1e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11861,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a9b867c876a81d1b82278872cd9fab15462196f1000000000000000000000000a9b867c876a81d1b82278872cd9fab15462196f100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11862,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006316c0c5d19e9c5a957d7e411d2179ec05637d0b0000000000000000000000006316c0c5d19e9c5a957d7e411d2179ec05637d0b00000000000000000000000000000000000000000000000001611502adfcb80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11864,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061f3be073bd5c5a6ed11443e51744ce505e27b8500000000000000000000000061f3be073bd5c5a6ed11443e51744ce505e27b85000000000000000000000000000000000000000000000000008142d82123380000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11867,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009a8f606325d5f74e58575353dcee9993b032b2380000000000000000000000009a8f606325d5f74e58575353dcee9993b032b23800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11870,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3925751f682f1dc13310ca2bafb96cd1cf770a7000000000000000000000000d3925751f682f1dc13310ca2bafb96cd1cf770a700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11873,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099e5eb0fa8ce36525cfe5c434b3f26befd7f0d6700000000000000000000000099e5eb0fa8ce36525cfe5c434b3f26befd7f0d67000000000000000000000000000000000000000000000000015c4678bd3ebfd500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11874,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fcb6b92e6e5460a9f6d759988b04af1fc30d75f6000000000000000000000000fcb6b92e6e5460a9f6d759988b04af1fc30d75f60000000000000000000000000000000000000000000000000373002f2e01edd000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11876,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a9a796d3cc151556e04fd6e5a6b01de7f5ae343e000000000000000000000000a9a796d3cc151556e04fd6e5a6b01de7f5ae343e00000000000000000000000000000000000000000000000000aef15901c9310000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11877,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3aa68cadb8f25ad25b054841df221d234b8b374000000000000000000000000f3aa68cadb8f25ad25b054841df221d234b8b37400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11878,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001c1757cdde3b690ac887ff89974758f3d07e44480000000000000000000000001c1757cdde3b690ac887ff89974758f3d07e444800000000000000000000000000000000000000000000000000a51544cbd30d9700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11879,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fe332afd6dea8f0f741462aec785b902f0315d7c000000000000000000000000fe332afd6dea8f0f741462aec785b902f0315d7c000000000000000000000000000000000000000000000000010117756f62d88000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11880,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e81669100000000000000000000000099c794b7a618f72e89387821b6f184598d75fb4800000000000000000000000099c794b7a618f72e89387821b6f184598d75fb4800000000000000000000000000000000000000000000000045a7230a2814096f00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11882,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000087ebf5038cacde1891683176a802c0a5b6da3cc600000000000000000000000087ebf5038cacde1891683176a802c0a5b6da3cc6000000000000000000000000000000000000000000000002c94c71ca0b6e714b00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11883,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d633e9a50647707279dc8aa4c20f57959cf4c393000000000000000000000000d633e9a50647707279dc8aa4c20f57959cf4c39300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11885,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6b754372dd1c0f47652e989b2405d10783195e7000000000000000000000000d6b754372dd1c0f47652e989b2405d10783195e700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11887,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de09b5a841a33ab73099349a7927d7609b5b3cce000000000000000000000000de09b5a841a33ab73099349a7927d7609b5b3cce000000000000000000000000000000000000000000000000004ca599354b265900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11888,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009d7a199c805650468374e5d76c7dce15ec9a97090000000000000000000000009d7a199c805650468374e5d76c7dce15ec9a9709000000000000000000000000000000000000000000000000002e2f6e5e14800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11890,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000023beea0467685c3e8ce4b31d7306b2d758010f5600000000000000000000000023beea0467685c3e8ce4b31d7306b2d758010f56000000000000000000000000000000000000000000000000002d4d45171035c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11892,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e0bd01517c0ab68988c54e52b811587a9e744744000000000000000000000000e0bd01517c0ab68988c54e52b811587a9e74474400000000000000000000000000000000000000000000000001152c1292cd408b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11893,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000c28fda731c13ccf4f513f187fda345f870fc6392000000000000000000000000c28fda731c13ccf4f513f187fda345f870fc6392000000000000000000000000000000000000000000000000000000000182fd5b00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11897,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001442f26e93c193e9c2107d3f90f43a841cc0faec0000000000000000000000001442f26e93c193e9c2107d3f90f43a841cc0faec0000000000000000000000000000000000000000000000000125bb1da9c30c8400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11898,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d51afe8c20a429fe6555ca4db037f6b9d26490a4000000000000000000000000d51afe8c20a429fe6555ca4db037f6b9d26490a40000000000000000000000000000000000000000000000000216e633e41b7a0200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x60b5d1c78cdd9a7b7e6a53c6ca260a813ef6da9dba24c004620c644abf8da9a9,2022-06-19 07:00:45.000 UTC,0,true -11899,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005df63bf3545acfbeaf608332d767a0ef957021610000000000000000000000005df63bf3545acfbeaf608332d767a0ef9570216100000000000000000000000000000000000000000000000006edb68c71fbd80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11900,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005c872cfe1511c0671c3182629d600e2f7be672750000000000000000000000005c872cfe1511c0671c3182629d600e2f7be6727500000000000000000000000000000000000000000000000000af6886b0abf5af00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11901,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001d01e2010c7018aa9a10ee81beb8e88f212a12090000000000000000000000001d01e2010c7018aa9a10ee81beb8e88f212a120900000000000000000000000000000000000000000000000002be627611b7797400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x11a9d6784e037282645aec7d4aeff27acae0bce477e49d12bb6e5a927acdee66,2022-01-31 04:22:40.000 UTC,0,true -11903,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ca97ae70e38736a94eea00427d50846bab978dd0000000000000000000000007ca97ae70e38736a94eea00427d50846bab978dd000000000000000000000000000000000000000000000000003bdc7143f8b43d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x4f41cfbf4e4647501149e710af3083d8ed0b5807eebd1c37444f26486e351282,2021-12-26 09:09:22.000 UTC,0,true -11904,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000084bfbb65c8e7ad4cd835de354ad43a0f0f10e3b600000000000000000000000084bfbb65c8e7ad4cd835de354ad43a0f0f10e3b6000000000000000000000000000000000000000000000000012dfb0cb5e8800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11905,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a218d0ce0693c41a96f58667ba34f5f489e75628000000000000000000000000a218d0ce0693c41a96f58667ba34f5f489e7562800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11906,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ae8c2812447c23c8b721011d40fe1448e1e64b90000000000000000000000006ae8c2812447c23c8b721011d40fe1448e1e64b900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11907,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009f5bf5011770655c751aa54a8a60839bf8f596ff0000000000000000000000009f5bf5011770655c751aa54a8a60839bf8f596ff00000000000000000000000000000000000000000000000000320dc09fa5168700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11908,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000007c84d134d1ac55126fb215fc35438a3c278f81b20000000000000000000000007c84d134d1ac55126fb215fc35438a3c278f81b20000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -11909,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006fabc23baefcd1f1e34a25f6e54ea4d033b9362d0000000000000000000000006fabc23baefcd1f1e34a25f6e54ea4d033b9362d0000000000000000000000000000000000000000000000000087f620e8d2c2ac00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x3de4ef7f69d53c0ab22ca6d90ef82f9b184720fedcdfaf0a8dd21a70a10094fb,2022-02-28 03:42:38.000 UTC,0,true -11910,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004efeb767b3b0941ccbadd6cb897a391499324fd00000000000000000000000004efeb767b3b0941ccbadd6cb897a391499324fd0000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11911,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000014f650b3cfbcd901893ae90fcde1b38c7077575c00000000000000000000000014f650b3cfbcd901893ae90fcde1b38c7077575c00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11913,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ce9ad2ccacb8f5f36d04d1d30c1daa17f7dbb541000000000000000000000000ce9ad2ccacb8f5f36d04d1d30c1daa17f7dbb54100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11915,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037ca2fb13f200e3f922d7f07e9bef1fcfa3e8b4a00000000000000000000000037ca2fb13f200e3f922d7f07e9bef1fcfa3e8b4a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11916,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000345ebd1b3c20a7c249f9a8f1b6fcde7e531f2985000000000000000000000000345ebd1b3c20a7c249f9a8f1b6fcde7e531f29850000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11917,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a651e5c177cc60fb60529631e1b5bdd93a82fb70000000000000000000000002a651e5c177cc60fb60529631e1b5bdd93a82fb7000000000000000000000000000000000000000000000000012dfb0cb5e8800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11919,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007143c902f08212861aa5e9749f019f2feba117540000000000000000000000007143c902f08212861aa5e9749f019f2feba117540000000000000000000000000000000000000000000000000214e8348c4f000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11923,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d28bf17c6b194a0aa6db97afb5c6781fc96c3fec000000000000000000000000d28bf17c6b194a0aa6db97afb5c6781fc96c3fec00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11924,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a9643a822abe24a62d989cba0ef57a8168ba3730000000000000000000000000a9643a822abe24a62d989cba0ef57a8168ba37300000000000000000000000000000000000000000000000000060a24181e400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11925,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac32406f31634322662bdc1e9f9d5ea247de7e2a000000000000000000000000ac32406f31634322662bdc1e9f9d5ea247de7e2a00000000000000000000000000000000000000000000000000aa13b7c87c0dd900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11926,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000073342f619780312b3f6d85af48c64aaf8c32315d00000000000000000000000073342f619780312b3f6d85af48c64aaf8c32315d00000000000000000000000000000000000000000000000000082bd67afbc00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11930,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001c139649763b154b18a3407dbbc7c29c63f8e0e60000000000000000000000001c139649763b154b18a3407dbbc7c29c63f8e0e600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11931,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000568c7b10f0b0d87e88401f5167bc6db5934dfcc4000000000000000000000000568c7b10f0b0d87e88401f5167bc6db5934dfcc4000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11933,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000079ce1426b21bb2cfae014388ade594666ecef4c000000000000000000000000079ce1426b21bb2cfae014388ade594666ecef4c0000000000000000000000000000000000000000000000000000c6f3b40b6c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11935,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d2b49dd577a65bb18208fb7e9be307f4b028a200000000000000000000000005d2b49dd577a65bb18208fb7e9be307f4b028a2000000000000000000000000000000000000000000000000000060a24181e400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11938,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d6129da37dad28b70ba29e542e3a0a074084c6260000000000000000000000000000000000000000000000009d4120c707de5e06,,,1,true -11939,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf1967f9ec206f4bbb009eb5947f252db58e10f8000000000000000000000000bf1967f9ec206f4bbb009eb5947f252db58e10f800000000000000000000000000000000000000000000000000060a24181e400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11940,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006220c72064620a4aacc99c68677eef8bf36877f70000000000000000000000006220c72064620a4aacc99c68677eef8bf36877f700000000000000000000000000000000000000000000000006f05b59d3b2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11942,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba139847cd31ac73d2df5862dd1b9a1269b05bf5000000000000000000000000ba139847cd31ac73d2df5862dd1b9a1269b05bf50000000000000000000000000000000000000000000000000dd4892e096c46b900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11945,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000002f67566867a23b5fc56b26a4cbe0d7eb2c76df050000000000000000000000002f67566867a23b5fc56b26a4cbe0d7eb2c76df05000000000000000000000000000000000000000000000000000000001ba2a86d00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xde0e617c86199de66b80a053111b1f4ccf97174e5963e0fd6482e42c6e7f43a3,2021-12-12 07:49:39.000 UTC,0,true -11947,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea4e3a392b7a94dde227a5df50645229a69d12f7000000000000000000000000ea4e3a392b7a94dde227a5df50645229a69d12f700000000000000000000000000000000000000000000000000201a32bc25778000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11949,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea4e3a392b7a94dde227a5df50645229a69d12f7000000000000000000000000ea4e3a392b7a94dde227a5df50645229a69d12f7000000000000000000000000000000000000000000000000013a0a79480b4cdf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11953,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d28bf17c6b194a0aa6db97afb5c6781fc96c3fec000000000000000000000000d28bf17c6b194a0aa6db97afb5c6781fc96c3fec000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11957,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005558430f593a32be28dd369fab48c291a7ccfb960000000000000000000000005558430f593a32be28dd369fab48c291a7ccfb9600000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11959,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000107e60e09c1b9399c2f9c51051051acc2d5db0db000000000000000000000000107e60e09c1b9399c2f9c51051051acc2d5db0db000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11961,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac5f837b8c55c0acfef6d900db388533866050f5000000000000000000000000ac5f837b8c55c0acfef6d900db388533866050f500000000000000000000000000000000000000000000000002c06611853df7ef00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x8bef80cd7a2214296355ed60b1c79cb30f2efca908004921610993295c920541,2022-03-04 10:35:33.000 UTC,0,true -11962,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ab46674dfb8539ab5380173f9c86138df5230b90000000000000000000000002ab46674dfb8539ab5380173f9c86138df5230b9000000000000000000000000000000000000000000000000021e6d1855e43b8e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11963,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a7c4f4c108efbe0a0ad9c0dc0920e5ecfaa52108000000000000000000000000a7c4f4c108efbe0a0ad9c0dc0920e5ecfaa521080000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11964,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f36a4ccb3b96f1e7718b12cc076506e5c0c602d3000000000000000000000000f36a4ccb3b96f1e7718b12cc076506e5c0c602d3000000000000000000000000000000000000000000000000015c622b4c412bd400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11965,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008358672afa934969f986ed644c3a8b8bcc17eec40000000000000000000000008358672afa934969f986ed644c3a8b8bcc17eec400000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11968,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001930f414f04adc142aafebf7f6651a31e6a708de0000000000000000000000001930f414f04adc142aafebf7f6651a31e6a708de000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11971,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001651106085698f19912753ef131d6a5c9c8024c40000000000000000000000001651106085698f19912753ef131d6a5c9c8024c40000000000000000000000000000000000000000000000000467e10df683db6300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11972,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d833a03f32bd62070bfc53f1e02497bb7fbbe720000000000000000000000005d833a03f32bd62070bfc53f1e02497bb7fbbe7200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11973,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000050738cf28a47f00537da8cfbd2c51efc384a134a00000000000000000000000050738cf28a47f00537da8cfbd2c51efc384a134a000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11974,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000042d9ebf0e126b29824fffeb4fc4ba5393ce1975000000000000000000000000042d9ebf0e126b29824fffeb4fc4ba5393ce197500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11975,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009cdd2b751f0f88468348b6ec3f47cc6e818bcf570000000000000000000000009cdd2b751f0f88468348b6ec3f47cc6e818bcf5700000000000000000000000000000000000000000000000000aaf3bce37e735700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11977,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055ab119210fc6b44177b5c6ec08ec8289e360ce000000000000000000000000055ab119210fc6b44177b5c6ec08ec8289e360ce0000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11978,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cfc2b9c3000ec2ab725b925a83b4d693077f2be1000000000000000000000000cfc2b9c3000ec2ab725b925a83b4d693077f2be100000000000000000000000000000000000000000000000000b7e1fd124360a200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11979,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047dd44a601daf48b7a5dd18fb1eb1cee14be416900000000000000000000000047dd44a601daf48b7a5dd18fb1eb1cee14be416900000000000000000000000000000000000000000000000000aab7a2e9171e0800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11981,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d5901ecad0bc8786a9b6fa53a19ce465ccba1990000000000000000000000000d5901ecad0bc8786a9b6fa53a19ce465ccba19900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11982,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a842261c0f3c9c3a9c5cb99116a4f2af7d55f8bd000000000000000000000000a842261c0f3c9c3a9c5cb99116a4f2af7d55f8bd000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11984,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c5a05853401bc0631a693ec719ca8725407db190000000000000000000000000c5a05853401bc0631a693ec719ca8725407db19000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11985,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000030051dc685a3e27bc94928858d02f3b5e8835ae200000000000000000000000030051dc685a3e27bc94928858d02f3b5e8835ae2000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11987,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000890a0047f8d573347872cb6c019f86552f2367d6000000000000000000000000890a0047f8d573347872cb6c019f86552f2367d6000000000000000000000000000000000000000000000000002aa1efb94e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11990,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000014a90490a5439ae28ed1b2214355d20b5927ef8500000000000000000000000014a90490a5439ae28ed1b2214355d20b5927ef85000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11992,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000075ac65073d45d3f53c66fe338827ad13ed362a8800000000000000000000000075ac65073d45d3f53c66fe338827ad13ed362a88000000000000000000000000000000000000000000000000015aeab2d7ff93a500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11997,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007eff1b48ff4e4c1fad9879eef26670d49347def60000000000000000000000007eff1b48ff4e4c1fad9879eef26670d49347def6000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -11999,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000467dff5627f13b71a10a62c9d79a34be4043ae69000000000000000000000000467dff5627f13b71a10a62c9d79a34be4043ae69000000000000000000000000000000000000000000000000015c2a7b13fd000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12000,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd55c5bad3a6faab9cc7e917d03af0e91ef38f2d000000000000000000000000bd55c5bad3a6faab9cc7e917d03af0e91ef38f2d00000000000000000000000000000000000000000000000001d7aaff0c21cb9700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x357f628ca652889dc3a402959e3956dd07d675d1e62d49334317dfbd8a62bb14,2022-03-11 03:46:32.000 UTC,0,true -12003,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5dc734123047c8c2a85fe9c6c86992b575bda91000000000000000000000000e5dc734123047c8c2a85fe9c6c86992b575bda910000000000000000000000000000000000000000000000000dbd2fc137a3000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12004,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004bf0d6b03588ce8a00d2c3d7fd9d1933a039c9dc0000000000000000000000004bf0d6b03588ce8a00d2c3d7fd9d1933a039c9dc00000000000000000000000000000000000000000000000001526acb1803a88000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12009,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000929a2d59f6d8f8b63d976f8053d1349032127900000000000000000000000000929a2d59f6d8f8b63d976f8053d1349032127900000000000000000000000000000000000000000000000000058d15e1762800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12015,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000989680e560b3374798559a1a9c11ca8eb811c979000000000000000000000000989680e560b3374798559a1a9c11ca8eb811c9790000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12016,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ed6c97a0bd5c0bb5e5f3d9fc844a1b031327cb72000000000000000000000000ed6c97a0bd5c0bb5e5f3d9fc844a1b031327cb720000000000000000000000000000000000000000000000000069c84558c6391900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12017,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000487590f027355961c9f9811b602fe29c6f88055a000000000000000000000000487590f027355961c9f9811b602fe29c6f88055a00000000000000000000000000000000000000000000000000a801d1d68ceefd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12018,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e2070eddf64822e36b7c57353319e2c531815b2c000000000000000000000000e2070eddf64822e36b7c57353319e2c531815b2c0000000000000000000000000000000000000000000000000289b4ac6fd6a86e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12020,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005fdc62e19a5bfdc1b56a7843bf378635eb362e6e0000000000000000000000005fdc62e19a5bfdc1b56a7843bf378635eb362e6e000000000000000000000000000000000000000000000000014c1ce34b1b570400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x274cbd5daae237de00a23a25b96ced81231cd88590e0c9026fbf399cbba5acdc,2021-12-26 09:00:54.000 UTC,0,true -12021,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094db391a8298d6de90892d78406551e8987c2c1a00000000000000000000000094db391a8298d6de90892d78406551e8987c2c1a0000000000000000000000000000000000000000000000000000fb90a5bda5b100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12022,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000030ceb5248d27cc826a7563a7abc1ce5ab166c41200000000000000000000000030ceb5248d27cc826a7563a7abc1ce5ab166c412000000000000000000000000000000000000000000000000001c04ce2b08a97500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12023,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003eb40255eecc782507c4b98c0ef7944d03a67e5d0000000000000000000000003eb40255eecc782507c4b98c0ef7944d03a67e5d0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12026,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000014f4785e5f8738eb589eb0bf9edc6a5f8675594400000000000000000000000014f4785e5f8738eb589eb0bf9edc6a5f86755944000000000000000000000000000000000000000000000000001d2190327665e900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12027,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029541aa4328e1cb4d820eda83ca84dcb1a1ccd1a00000000000000000000000029541aa4328e1cb4d820eda83ca84dcb1a1ccd1a00000000000000000000000000000000000000000000000003cda88363e920ad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1144dd5fce53d2b82cea0da4d97150ee584486db707cfa0cd9bdddb24d2dd635,2022-02-20 20:39:14.000 UTC,0,true -12028,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000096e0ea298c54f058f73e52ebf1050d0dc2c7368600000000000000000000000096e0ea298c54f058f73e52ebf1050d0dc2c736860000000000000000000000000000000000000000000000000062c446aa696af300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12029,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ed6a87517914eb67cce0930fed72e61ce2d64450000000000000000000000005ed6a87517914eb67cce0930fed72e61ce2d6445000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12031,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a7ac3c661368cff60e87464b19915eaf9a5d3f8a000000000000000000000000a7ac3c661368cff60e87464b19915eaf9a5d3f8a0000000000000000000000000000000000000000000000000009adbf5e9016e200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12037,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c3f2a7d831a35fba958028f4a6ca0b2003390099000000000000000000000000c3f2a7d831a35fba958028f4a6ca0b200339009900000000000000000000000000000000000000000000000003311fc80a57000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12040,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000015b2745b585a07a449f4dc1c61fca4c7a446459500000000000000000000000015b2745b585a07a449f4dc1c61fca4c7a4464595000000000000000000000000000000000000000000000000003f84a6338bd6da00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12041,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000069279507fc76feb6b3e455b064b52bae5043cb2500000000000000000000000069279507fc76feb6b3e455b064b52bae5043cb2500000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12042,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fd2e96e66c9508029d5520f1f991e8cd8dc6e562000000000000000000000000fd2e96e66c9508029d5520f1f991e8cd8dc6e562000000000000000000000000000000000000000000000000000ba9fbe228620000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12043,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005b0e303fdac2f18509793aec7e53676540f434c20000000000000000000000005b0e303fdac2f18509793aec7e53676540f434c2000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x11722756f3f34237cfca034c171999466a88d9614d07ba69fb92e593a2a99de8,2022-05-18 08:59:44.000 UTC,0,true -12045,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e39d2fa4c2881445e50ecb9319b9308a0de3b540000000000000000000000002e39d2fa4c2881445e50ecb9319b9308a0de3b5400000000000000000000000000000000000000000000000000995116b48e17a400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12046,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e5847c75c961c25ecd81fcae4bb24ed5023da2a0000000000000000000000001e5847c75c961c25ecd81fcae4bb24ed5023da2a000000000000000000000000000000000000000000000000005dc59b98ecc0c100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12051,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f726679d42ce2a8e67064e090768fb2468225800000000000000000000000002f726679d42ce2a8e67064e090768fb246822580000000000000000000000000000000000000000000000000014f069a55ca39a400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12056,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f75350e9e70c2531345d7b567b742923b2d8ef43000000000000000000000000f75350e9e70c2531345d7b567b742923b2d8ef4300000000000000000000000000000000000000000000000001610d759a6c870000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12057,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000015097e42b6e80063967b33257d7eae981273c13500000000000000000000000015097e42b6e80063967b33257d7eae981273c1350000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12059,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006094d4b6b8d6710dd56682a73c0e6c09b4aa08c60000000000000000000000006094d4b6b8d6710dd56682a73c0e6c09b4aa08c6000000000000000000000000000000000000000000000000036e230927e3378000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12060,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005fc7ef8128b2a49067783fdd0c5b58c3f8c0a8980000000000000000000000005fc7ef8128b2a49067783fdd0c5b58c3f8c0a89800000000000000000000000000000000000000000000000006e04c673618af5c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xda464806c12b2ebb4d0cfd59e4e4ae43ebee248d5236d95d97af9dcab98fd011,2022-02-16 03:29:43.000 UTC,0,true -12061,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000771e53058313a5f0eb388d676cdfcd4d273ce052000000000000000000000000771e53058313a5f0eb388d676cdfcd4d273ce052000000000000000000000000000000000000000000000000000581b77f66e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12064,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba5651e3d4f3d63d19cb6e351147773dbf505095000000000000000000000000ba5651e3d4f3d63d19cb6e351147773dbf50509500000000000000000000000000000000000000000000000000a9124ad2032e2e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12065,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000093074926da1378296243fc766208b841c61cde6600000000000000000000000093074926da1378296243fc766208b841c61cde66000000000000000000000000000000000000000000000000000581b77f66e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12068,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c18237f4facf817839b229ea67b94ae073be0fa9000000000000000000000000c18237f4facf817839b229ea67b94ae073be0fa9000000000000000000000000000000000000000000000000000581b77f66e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12069,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d0295e32371bc61b0c35cd9b6caf89106ad01ea0000000000000000000000005d0295e32371bc61b0c35cd9b6caf89106ad01ea000000000000000000000000000000000000000000000000001a4a42c356800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12070,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009558882b792bb58c469ad20e072e50f8bdf065cd0000000000000000000000009558882b792bb58c469ad20e072e50f8bdf065cd000000000000000000000000000000000000000000000000000581b77f66e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12076,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000268f91e2e132fde501ac194f347ae78cb907f64e000000000000000000000000268f91e2e132fde501ac194f347ae78cb907f64e00000000000000000000000000000000000000000000000000f0150773ea0dcb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2db8529fd4092888fd8137354b50d6c554c1a7daf2f2a8580a9e1c6677f63b35,2021-11-21 13:20:24.000 UTC,0,true -12078,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a5777aa4045d2fa53b41a2012d5d4fe814537fee000000000000000000000000a5777aa4045d2fa53b41a2012d5d4fe814537fee00000000000000000000000000000000000000000000000003311fc80a57000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12080,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b9b73a69c1a59de5c89e18574adf3ce6b6d9102b000000000000000000000000b9b73a69c1a59de5c89e18574adf3ce6b6d9102b000000000000000000000000000000000000000000000000003fbc1268ef14bf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12081,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007c789404d651cfc68f39b2f3dcf2feb0360460ce0000000000000000000000007c789404d651cfc68f39b2f3dcf2feb0360460ce000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x6256ddff5264c3a0b3310ca673f36ea34c66945a75aa8e3092edb05a7cde595a,2022-05-18 12:55:50.000 UTC,0,true -12084,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005430c0b289a72895062941368d7ac4a78b9f94c40000000000000000000000005430c0b289a72895062941368d7ac4a78b9f94c400000000000000000000000000000000000000000000000000398b3102235ded00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12086,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000060590470118e4b4797132c98fb395c18f12aa87a00000000000000000000000060590470118e4b4797132c98fb395c18f12aa87a000000000000000000000000000000000000000000000000015b151fc2d9e5f000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12087,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078b8690e940df55554fa1fde360921ee39e6ba2d00000000000000000000000078b8690e940df55554fa1fde360921ee39e6ba2d000000000000000000000000000000000000000000000000004db470adaecf0200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12089,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000013b65bc0885e7d9f11f6affd0ba44c19ddc12c4100000000000000000000000013b65bc0885e7d9f11f6affd0ba44c19ddc12c41000000000000000000000000000000000000000000000000007f2e335c2e47c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12092,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fe958a22c1f453c797e341c202c86ba607276c88000000000000000000000000fe958a22c1f453c797e341c202c86ba607276c88000000000000000000000000000000000000000000000000032938a8f5b0e36a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12095,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000067ffb0c645f5843ff88a6ff0fc91fd1798974e5700000000000000000000000067ffb0c645f5843ff88a6ff0fc91fd1798974e570000000000000000000000000000000000000000000000000000000000c0641000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -12101,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000659f7952cf483abcb29111f0e79730328a3ca612000000000000000000000000659f7952cf483abcb29111f0e79730328a3ca61200000000000000000000000000000000000000000000000001c9ec6dfeb0a22c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12102,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca39fdb1ec1d885318e6111f2eef8b600bc33db9000000000000000000000000ca39fdb1ec1d885318e6111f2eef8b600bc33db9000000000000000000000000000000000000000000000000000d42623645a28000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12103,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004defc44cdfd3eee7fae1d5a3901e97b27cd01e3c0000000000000000000000004defc44cdfd3eee7fae1d5a3901e97b27cd01e3c0000000000000000000000000000000000000000000000000043917c6ccd9ac000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12105,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009d19aa0d24e604f77aba4cd250ffbaf6b15819b70000000000000000000000009d19aa0d24e604f77aba4cd250ffbaf6b15819b70000000000000000000000000000000000000000000000000040c67ea3a989b500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12107,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000106d5bcd38f25e584150e1915687675c36d28ea8000000000000000000000000106d5bcd38f25e584150e1915687675c36d28ea8000000000000000000000000000000000000000000000000005e489a8390697500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12109,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000079a549989e7aecd4c0e40ed0ebb9a30350a870bd00000000000000000000000079a549989e7aecd4c0e40ed0ebb9a30350a870bd0000000000000000000000000000000000000000000000000113d7bbcf92158500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2069a1d6e737681d6dfb154e86e61c6629318116df688f0238d718546306e6da,2022-04-23 17:50:07.000 UTC,0,true -12110,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f167ddd0d854c524d5f8b16a09471a63772a8ffb000000000000000000000000f167ddd0d854c524d5f8b16a09471a63772a8ffb00000000000000000000000000000000000000000000000001596d834ee4efa200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12112,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000764ef8aba8e67af506fa65bad1342bf34571ec3e000000000000000000000000764ef8aba8e67af506fa65bad1342bf34571ec3e0000000000000000000000000000000000000000000000000002e3c65acf830000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12115,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c581081214b403b8aa2fd1098e250e0f82cd4605000000000000000000000000c581081214b403b8aa2fd1098e250e0f82cd4605000000000000000000000000000000000000000000000000020b305717a605f500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12116,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e990486968daeac95fdf07ef6722ab71db276c40000000000000000000000003e990486968daeac95fdf07ef6722ab71db276c4000000000000000000000000000000000000000000000000000458d262defd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12117,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000e865637cbc8468ad4214f5055b9a7500a2b96e32000000000000000000000000e865637cbc8468ad4214f5055b9a7500a2b96e3200000000000000000000000000000000000000000000000000000000078a1cb700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x0b4e154ff93557de368a5dd1db67e2daf991a966e4cb4ae99809cc63b8fa8be1,2022-06-01 04:45:12.000 UTC,0,true -12120,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b882b087bd80a0258f19d907849c8d64cac3dba1000000000000000000000000b882b087bd80a0258f19d907849c8d64cac3dba10000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12121,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a7a1c07b74806800eff667c5de512404810684f0000000000000000000000002a7a1c07b74806800eff667c5de512404810684f00000000000000000000000000000000000000000000000002b9c4e91a857eb800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xb3b1918badb67b6e032052dddc7174e8adec6006aa3bf6cea7bd1e8d79ad0471,2022-02-27 18:58:51.000 UTC,0,true -12124,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021bc50129dd6c34162ec0cf715857042cd09ec2300000000000000000000000021bc50129dd6c34162ec0cf715857042cd09ec230000000000000000000000000000000000000000000000000020e96a892d660000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12125,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000aa350fb487f75d4f5d6ed920a5ae0923ded06e10000000000000000000000000aa350fb487f75d4f5d6ed920a5ae0923ded06e100000000000000000000000000000000000000000000000002c68af0bb14000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12126,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000357e6a98da9c3bde7e17f5bcbbbd3e2107d117ba000000000000000000000000357e6a98da9c3bde7e17f5bcbbbd3e2107d117ba00000000000000000000000000000000000000000000000002bb0098c93cc62000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12129,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ca68692fc89e29f7e79cd74aeec92af4ed166460000000000000000000000003ca68692fc89e29f7e79cd74aeec92af4ed166460000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12131,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029c7ec5e8ca184ba83b970b4a89a2adb4a083dba00000000000000000000000029c7ec5e8ca184ba83b970b4a89a2adb4a083dba000000000000000000000000000000000000000000000000005286bd43a3730000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12132,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fcc64593075d713bfc9e927d7161ba7b53a33898000000000000000000000000fcc64593075d713bfc9e927d7161ba7b53a33898000000000000000000000000000000000000000000000000003bc46397c3ddf600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12133,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b882b087bd80a0258f19d907849c8d64cac3dba1000000000000000000000000b882b087bd80a0258f19d907849c8d64cac3dba100000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12135,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002dec44a6acf386368f6468461b810a5b2d60982f0000000000000000000000002dec44a6acf386368f6468461b810a5b2d60982f00000000000000000000000000000000000000000000000002c68af0bb14000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12136,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000093433264cccb31c80a62b0eee78e37ebbb0377e300000000000000000000000093433264cccb31c80a62b0eee78e37ebbb0377e30000000000000000000000000000000000000000000000000d77cf52a1946b3c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12143,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cb7a4c047a5b152b1319b2d7f3a590d5388e78a3000000000000000000000000cb7a4c047a5b152b1319b2d7f3a590d5388e78a3000000000000000000000000000000000000000000000000003c105824cfe10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12145,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf8c7f3aef546992c9f8f42900b4ca245ceb5c88000000000000000000000000cf8c7f3aef546992c9f8f42900b4ca245ceb5c880000000000000000000000000000000000000000000000000139b4b5118bc91100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12148,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7083893735f9aa7e9ccc4b41f8a3a0b188e9fda000000000000000000000000c7083893735f9aa7e9ccc4b41f8a3a0b188e9fda00000000000000000000000000000000000000000000000006bb10ee2c10800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12151,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b72f0a2e5269951e3bcbeb50e8e35f182043f790000000000000000000000002b72f0a2e5269951e3bcbeb50e8e35f182043f79000000000000000000000000000000000000000000000000003dc64337b204f600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12152,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000492261c62c8f0e1783b6f3e60d5c03e2e532f167000000000000000000000000492261c62c8f0e1783b6f3e60d5c03e2e532f1670000000000000000000000000000000000000000000000000079638a034e2c2500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5c6c1a3acd6b03fb837f15ee8cc60796b2fef4673bd31f7ff5266f33c8b76df9,2022-03-14 06:54:17.000 UTC,0,true -12156,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd533307557ac9e1b9ee7fce0256ae909d6aedc8000000000000000000000000dd533307557ac9e1b9ee7fce0256ae909d6aedc800000000000000000000000000000000000000000000000000497384c12aa18000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12157,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd533307557ac9e1b9ee7fce0256ae909d6aedc8000000000000000000000000dd533307557ac9e1b9ee7fce0256ae909d6aedc800000000000000000000000000000000000000000000000000309dbd04fa3e0100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12159,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005e4038eb6f1e7316a45ed569e94c8cd1706a5ec50000000000000000000000005e4038eb6f1e7316a45ed569e94c8cd1706a5ec50000000000000000000000000000000000000000000000000048c36b4374b7ce00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12163,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f339fa28e328d783b991bcc6785d1eba0b4fe2d0000000000000000000000003f339fa28e328d783b991bcc6785d1eba0b4fe2d00000000000000000000000000000000000000000000000000411ae864d78fe900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12164,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f5a9ca279a99365d83c6c744ca5d3e0b87ec060d000000000000000000000000f5a9ca279a99365d83c6c744ca5d3e0b87ec060d000000000000000000000000000000000000000000000000003f532fbd67641400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12167,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7a3668f8bc40af03579fc00bedc31e4cc662624000000000000000000000000f7a3668f8bc40af03579fc00bedc31e4cc662624000000000000000000000000000000000000000000000000089d0381984f555600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12168,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000927fd99fc1cc1d0da4c421149e708a6db193b239000000000000000000000000927fd99fc1cc1d0da4c421149e708a6db193b239000000000000000000000000000000000000000000000000005e920e7547557c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12170,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000099e201231e44ba38af6fea7f54eaa19c90bef80600000000000000000000000099e201231e44ba38af6fea7f54eaa19c90bef80600000000000000000000000000000000000000000000000c18751e446e5e912f00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xa32478d043bb4df36c41b33eced66255503aee33b2d15c0aa3bddc50bea0b465,2021-11-28 12:52:31.000 UTC,0,true -12183,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000edbcf860bee646199b84a351f4a55d7e929a7a36000000000000000000000000edbcf860bee646199b84a351f4a55d7e929a7a36000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12186,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000081304f07bb9c9c66cc64100a5d827810e6a6530300000000000000000000000081304f07bb9c9c66cc64100a5d827810e6a653030000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12189,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a9e11c0fe965f551fd21d448a9861d10b9b6c5e0000000000000000000000004a9e11c0fe965f551fd21d448a9861d10b9b6c5e0000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12191,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b2274d48ae08c580e08d316530b64a32fde0fbb0000000000000000000000000b2274d48ae08c580e08d316530b64a32fde0fbb00000000000000000000000000000000000000000000000000002d7272244020000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12193,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004d70e9499b2d791b5eb15759b2c2e6f3947ab4980000000000000000000000004d70e9499b2d791b5eb15759b2c2e6f3947ab4980000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12194,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a7f769421e4486eb2f8bc3067f8c79a354552930000000000000000000000006a7f769421e4486eb2f8bc3067f8c79a354552930000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12196,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c2db6c1cdd02b8bf48c9d30fea6c8ac13eff5a0a000000000000000000000000c2db6c1cdd02b8bf48c9d30fea6c8ac13eff5a0a0000000000000000000000000000000000000000000000000044da35120a0dcd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12197,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d93b019f298b369adb1ce53b72cdf239a9b0b838000000000000000000000000d93b019f298b369adb1ce53b72cdf239a9b0b8380000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12199,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a87a104b9601874d981436738546337d94e4be02000000000000000000000000a87a104b9601874d981436738546337d94e4be020000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12203,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000618208c77c81898331ec6880ef5f1ffa758d3915000000000000000000000000618208c77c81898331ec6880ef5f1ffa758d39150000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12204,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003170b8bfbe8b8938c9c42006ddd5faec04232bbf0000000000000000000000003170b8bfbe8b8938c9c42006ddd5faec04232bbf0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12206,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0196dedba94cb41a9480eb2cc38cbe044ec0496000000000000000000000000b0196dedba94cb41a9480eb2cc38cbe044ec04960000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12214,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf5310fae4d7a0c6df0452bcda09aefa2748ad59000000000000000000000000bf5310fae4d7a0c6df0452bcda09aefa2748ad59000000000000000000000000000000000000000000000000000c6f3b40b6c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12215,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e604e03d0b90e8aa058bb8bb6313e749606832c0000000000000000000000002e604e03d0b90e8aa058bb8bb6313e749606832c000000000000000000000000000000000000000000000000002441157bb525dd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12216,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000467a755ba59267678e14e414ed214c3cea836498000000000000000000000000467a755ba59267678e14e414ed214c3cea83649800000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12217,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eb4413d6ac1b0225523eeb00f1dd4c1d733621dd000000000000000000000000eb4413d6ac1b0225523eeb00f1dd4c1d733621dd00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12219,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000435be2e484393babeaa4a919f8e30bb5dbd808ce000000000000000000000000435be2e484393babeaa4a919f8e30bb5dbd808ce0000000000000000000000000000000000000000000000000429d069189e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12221,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000350a791bfc2c21f9ed5d10980dad2e2638ffa7f60000000000000000000000006bc4c6cfd03decb17657e71d5b6eca3cbaf8a4360000000000000000000000006bc4c6cfd03decb17657e71d5b6eca3cbaf8a43600000000000000000000000000000000000000000000000025c838dcff60c4aa00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -12222,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000322cc309626a170df4385a7a5624dee44d4e5e1f000000000000000000000000322cc309626a170df4385a7a5624dee44d4e5e1f0000000000000000000000000000000000000000000000000067cccce7969e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12225,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009d7ad2d86beae9f82f35b1f3fa9a246a5e6ff7fc0000000000000000000000009d7ad2d86beae9f82f35b1f3fa9a246a5e6ff7fc000000000000000000000000000000000000000000000000007d7b9c5b6a05d500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12226,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000084861b33ba6c7ae0dc01e0e3192e74d133d9a13a00000000000000000000000084861b33ba6c7ae0dc01e0e3192e74d133d9a13a000000000000000000000000000000000000000000000000001bbba96a3612e100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12233,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007269f818a33779b8f1f517e0bc1466110ce915050000000000000000000000007269f818a33779b8f1f517e0bc1466110ce91505000000000000000000000000000000000000000000000000001c28cd70b1b70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12235,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9cd8427ba55bef4ee8cd22b5f82f88d04f17619000000000000000000000000e9cd8427ba55bef4ee8cd22b5f82f88d04f1761900000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12239,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3e11d89b07e738f31de12e8d8cfa0eac7867a37000000000000000000000000f3e11d89b07e738f31de12e8d8cfa0eac7867a37000000000000000000000000000000000000000000000000006416a75da11bf500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x15ebfe79959c1800128378e37a74757f6cc82fefdd9694b4afd79289aaf24606,2021-12-07 02:37:27.000 UTC,0,true -12240,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000373622442c34e0c0d9cc1c3cb79a773eb3635ec0000000000000000000000000373622442c34e0c0d9cc1c3cb79a773eb3635ec00000000000000000000000000000000000000000000000000b9630f607e4b4200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12243,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021aa38a4f7943f5088347765b210c7148edbadc000000000000000000000000021aa38a4f7943f5088347765b210c7148edbadc000000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12246,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c3d4a6b3bfe187d7e328514f46db9928c569da21000000000000000000000000c3d4a6b3bfe187d7e328514f46db9928c569da210000000000000000000000000000000000000000000000001158d61588b2628300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12251,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c691ac73cd49e2c0b0e0ea4cae51bae1387f466a000000000000000000000000c691ac73cd49e2c0b0e0ea4cae51bae1387f466a00000000000000000000000000000000000000000000000001e3209cdaef050000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x297264e529b6b2f3d8584cfbf609f6d12046abc7f0a73547873d369a42ad3733,2022-05-23 08:57:25.000 UTC,0,true -12253,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000054f37eb4e1b42409db572bd4661b003eebaf71d100000000000000000000000054f37eb4e1b42409db572bd4661b003eebaf71d10000000000000000000000000000000000000000000000000009e48b3595f8fe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12254,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d06c65961476fc3d5d812e14b9a8dbf995c06f60000000000000000000000005d06c65961476fc3d5d812e14b9a8dbf995c06f60000000000000000000000000000000000000000000000000131867863646f9000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12256,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc5bc0ccc7ffd05aece6231373844f3d86ccb114000000000000000000000000dc5bc0ccc7ffd05aece6231373844f3d86ccb11400000000000000000000000000000000000000000000000000d52de26bb1250000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12258,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000033fe1df4c09e4ddd4e880f9cedd0ae638b048ea900000000000000000000000033fe1df4c09e4ddd4e880f9cedd0ae638b048ea9000000000000000000000000000000000000000000000000048b3f9040c9a94600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x84c8c9a97d045abf61a65fdca44f7f8d4f899c0014a1343b694eb53e25b73781,2022-02-23 08:23:23.000 UTC,0,true -12259,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef0905745ce28ebe1ded7004146132fbfba548ba000000000000000000000000ef0905745ce28ebe1ded7004146132fbfba548ba000000000000000000000000000000000000000000000000007d5713ea7d4eda00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12260,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000095b18b7721ee14714ab9d50f21fd8027d9b9643200000000000000000000000095b18b7721ee14714ab9d50f21fd8027d9b964320000000000000000000000000000000000000000000000000167e9a71ed79d3900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xcdf49f180f2cc9270a6925a8c753485348103799362db8589f24ae1434587aef,2022-02-23 08:20:16.000 UTC,0,true -12261,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000066da1e3a39516a5e07c7f3e36e683a81393ecd3a00000000000000000000000066da1e3a39516a5e07c7f3e36e683a81393ecd3a0000000000000000000000000000000000000000000000000529ee0633db488000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x31fb299649fb109641f257a5feb83851ce6b6892d261316a17654802430023a1,2022-02-23 08:25:57.000 UTC,0,true -12262,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fae87a37ade1a92d2ec6c5d4a7c29d635a505a91000000000000000000000000fae87a37ade1a92d2ec6c5d4a7c29d635a505a910000000000000000000000000000000000000000000000000092fa0befdd856b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12263,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000022a4954445046a65fd7054e598f2feb6ed54a61800000000000000000000000022a4954445046a65fd7054e598f2feb6ed54a61800000000000000000000000000000000000000000000000003f6e352c532444d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x8973c49612dda1aacc7bc37427dcb5be17183740cbcdbd87fddf3d79cd586fa8,2021-12-19 06:32:36.000 UTC,0,true -12266,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000105c70544b7f806f5b424ccffff34dcabc813a10000000000000000000000000105c70544b7f806f5b424ccffff34dcabc813a1000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12273,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000350a791bfc2c21f9ed5d10980dad2e2638ffa7f6000000000000000000000000d5ac6365ae4ce0008789888fd2e03a5db84d2ccb000000000000000000000000d5ac6365ae4ce0008789888fd2e03a5db84d2ccb000000000000000000000000000000000000000000000000891de09c74496f3d00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -12274,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d5ac6365ae4ce0008789888fd2e03a5db84d2ccb000000000000000000000000d5ac6365ae4ce0008789888fd2e03a5db84d2ccb000000000000000000000000000000000000000000000000001d75e00d11bf4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12275,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005c2ea83cb2b21cf11ce1fe19a46c2eaf1668d0880000000000000000000000005c2ea83cb2b21cf11ce1fe19a46c2eaf1668d0880000000000000000000000000000000000000000000000000084a01b0133db3b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12277,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000748010fbe056562ef466901f1d38ce481f11b539000000000000000000000000000000000000000000000001a71b0bfa7d6e59f8,,,1,true -12279,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6b78b3717dfa5118ae60263a0b547a8ec43896b000000000000000000000000d6b78b3717dfa5118ae60263a0b547a8ec43896b00000000000000000000000000000000000000000000000000cc74c44c2f77b900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12280,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000063060f713b377af8d7d50669ec0fdce1d31e3f2800000000000000000000000063060f713b377af8d7d50669ec0fdce1d31e3f2800000000000000000000000000000000000000000000000000dd79dbd3511aa200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12281,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac1c9fd0405296598b0b6ca8e290784197198fa7000000000000000000000000ac1c9fd0405296598b0b6ca8e290784197198fa70000000000000000000000000000000000000000000000000032ea2718d4b3f300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12282,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a12213d1bba68432be1fb5e9ac8d8169c0e66201000000000000000000000000a12213d1bba68432be1fb5e9ac8d8169c0e6620100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12284,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001906bd0244b749381e2974192fc581fe0da4d3630000000000000000000000001906bd0244b749381e2974192fc581fe0da4d363000000000000000000000000000000000000000000000000008d4f56c175acb500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12288,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002438375ee587b54e0dbcc0704dbe90670265b4cd0000000000000000000000002438375ee587b54e0dbcc0704dbe90670265b4cd0000000000000000000000000000000000000000000000000853a0d2313c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12289,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c05846781c8c0745464d8dc5673ea821b23d4aa3000000000000000000000000c05846781c8c0745464d8dc5673ea821b23d4aa300000000000000000000000000000000000000000000000000c8928211b4fc1300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12290,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d606452ee5d7ae5f31ee14a7273265db77a1b7f4000000000000000000000000d606452ee5d7ae5f31ee14a7273265db77a1b7f400000000000000000000000000000000000000000000000000c70ff4a6f52d8800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12291,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000081a35224db38747caccbd8e980c875de9e3fc13900000000000000000000000081a35224db38747caccbd8e980c875de9e3fc139000000000000000000000000000000000000000000000000015992133a82fa6e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12292,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6b78b3717dfa5118ae60263a0b547a8ec43896b000000000000000000000000d6b78b3717dfa5118ae60263a0b547a8ec43896b0000000000000000000000000000000000000000000000000147a507e05a2a4e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12294,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000000ea455f073321b662635245e32ef1a488fb093000000000000000000000000000ea455f073321b662635245e32ef1a488fb0930000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -12296,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007605fa24b13e9f61a2fc7b636a165b863116f9a20000000000000000000000007605fa24b13e9f61a2fc7b636a165b863116f9a200000000000000000000000000000000000000000000000000660a7865a49fe800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12298,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bdbfdf3e82fc9d2be1352e252ab1ce2287fc2122000000000000000000000000bdbfdf3e82fc9d2be1352e252ab1ce2287fc2122000000000000000000000000000000000000000000000000007957fdcb4812a100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7736f636106ec904dc0c6e4157cf33c136114e201c82c71a5dcee5aeee0c528e,2022-02-17 10:41:49.000 UTC,0,true -12300,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000b68c0d55d467f901bb1c62950b441f7bfe8ec3ea000000000000000000000000b68c0d55d467f901bb1c62950b441f7bfe8ec3ea0000000000000000000000000000000000000000000000019573086fe285bae500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -12302,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000398259c183a1ef12d8f3a900b734b7d2e064cb25000000000000000000000000398259c183a1ef12d8f3a900b734b7d2e064cb2500000000000000000000000000000000000000000000000000883c797cfdb3f900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12303,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000e56bbbb98982c8476bdabbcc5f27f3d354dff3a8000000000000000000000000e56bbbb98982c8476bdabbcc5f27f3d354dff3a800000000000000000000000000000000000000000000000000000000004c4b4000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -12306,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000e56bbbb98982c8476bdabbcc5f27f3d354dff3a8000000000000000000000000e56bbbb98982c8476bdabbcc5f27f3d354dff3a800000000000000000000000000000000000000000000000000000000004c4b4000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -12307,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000350a791bfc2c21f9ed5d10980dad2e2638ffa7f60000000000000000000000007599bd674137e9109a4bab48e3d68bf99c39b3190000000000000000000000007599bd674137e9109a4bab48e3d68bf99c39b31900000000000000000000000000000000000000000000000007e0428d85c29dc700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -12312,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006399ef7d7be677e0f7afee94a343935ab933cf800000000000000000000000006399ef7d7be677e0f7afee94a343935ab933cf80000000000000000000000000000000000000000000000000016137f81b854f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12316,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000350a791bfc2c21f9ed5d10980dad2e2638ffa7f6000000000000000000000000b50e8634486e329a64dfdc2a55ee5b1a05c24751000000000000000000000000b50e8634486e329a64dfdc2a55ee5b1a05c2475100000000000000000000000000000000000000000000000014d1120d7b16000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -12317,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc5bfdaf66371bcbb2edffac04eee810685e79b9000000000000000000000000dc5bfdaf66371bcbb2edffac04eee810685e79b900000000000000000000000000000000000000000000000000ce6123896dfdf100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12318,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000350a791bfc2c21f9ed5d10980dad2e2638ffa7f600000000000000000000000032c601a2ba37db9c6a9716f951c893a0ec9002d800000000000000000000000032c601a2ba37db9c6a9716f951c893a0ec9002d8000000000000000000000000000000000000000000000000333027d55fc2178200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xa02e2d6eb6d3706ddcd080453aebcbb1e10bcdd3711b9c20a4091fa53b6e53a9,2022-05-29 00:28:04.000 UTC,0,true -12320,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004b8b511851a8e11d8e729005dafefdf05e3d3b5f0000000000000000000000004b8b511851a8e11d8e729005dafefdf05e3d3b5f00000000000000000000000000000000000000000000000001a31a834b3025d100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12323,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000bfd011afe4b326817db13df58f0dea7188154aac0000000000000000000000000000000000000000000000300d5bcb349b77e5dd,0x09368beafa461833e1b099bd0bb3c6efcd4c539c249e047793d7143390732556,2021-12-13 02:25:47.000 UTC,0,true -12326,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9fcd609bfd554d051de2e1adc413c6443daf7da000000000000000000000000e9fcd609bfd554d051de2e1adc413c6443daf7da000000000000000000000000000000000000000000000000012bd93c902296a900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12327,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e049c3c7736ce67883b19f3d2b50c9d71bc83e10000000000000000000000008e049c3c7736ce67883b19f3d2b50c9d71bc83e10000000000000000000000000000000000000000000000000154eb7e9a230c9200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12329,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001dd3479d59950e6f756c2d3fd0ab0647713e09bb0000000000000000000000001dd3479d59950e6f756c2d3fd0ab0647713e09bb00000000000000000000000000000000000000000000000000c95bd3a56e8f3600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12330,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043d13bbdcbdf43f376bc696f7742a9aebb6e0ce700000000000000000000000043d13bbdcbdf43f376bc696f7742a9aebb6e0ce700000000000000000000000000000000000000000000000000a51019dee4457800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12335,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000031e7f474d5d02ff11a270218107b8e3ae783205600000000000000000000000031e7f474d5d02ff11a270218107b8e3ae783205600000000000000000000000000000000000000000000000000724a3324654d2100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12336,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000425f76e3cb1ba3b65a9ddba16b31e5454d08a1a1000000000000000000000000425f76e3cb1ba3b65a9ddba16b31e5454d08a1a1000000000000000000000000000000000000000000000000001e6db5d323ca0500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12339,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000024b25321490839428ea48a456d5d76586eca025d00000000000000000000000024b25321490839428ea48a456d5d76586eca025d00000000000000000000000000000000000000000000000000769285f0c3211f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12340,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b805d4dd668758536f210bed08476b58c4142a5e000000000000000000000000b805d4dd668758536f210bed08476b58c4142a5e0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12341,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3020016900be232d277743d10893064be7cc7f9000000000000000000000000d3020016900be232d277743d10893064be7cc7f90000000000000000000000000000000000000000000000000354a6ba7a18000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12347,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e68d7feca592cca0ab9a5d0be4b3b22c996430dd000000000000000000000000e68d7feca592cca0ab9a5d0be4b3b22c996430dd0000000000000000000000000000000000000000000000000070b002272d6e4e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12349,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000801510553f5b523f75f40d77ce9e476e7f48e192000000000000000000000000801510553f5b523f75f40d77ce9e476e7f48e19200000000000000000000000000000000000000000000000000a6a26335c27f9500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12351,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009c858345d95f2d8eef33cf31e9f119eb85bc3f660000000000000000000000009c858345d95f2d8eef33cf31e9f119eb85bc3f66000000000000000000000000000000000000000000000000015d7e23c3dc9eb500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12352,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b9dad802f0febae1fb84c1910e8bb8215ce68ea4000000000000000000000000b9dad802f0febae1fb84c1910e8bb8215ce68ea400000000000000000000000000000000000000000000000000a830cf1a4e138600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12353,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001fcca7466fb4a3a6c15d5f901ad93aed2c3ada340000000000000000000000001fcca7466fb4a3a6c15d5f901ad93aed2c3ada3400000000000000000000000000000000000000000000000002d36a78013c6da600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12354,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000064e9ea8eeb3ea9a0e68b397db271fb7ac525e33000000000000000000000000064e9ea8eeb3ea9a0e68b397db271fb7ac525e33000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12355,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be003db78e91d32fba49a5a93f8ec6f3398d8df6000000000000000000000000be003db78e91d32fba49a5a93f8ec6f3398d8df600000000000000000000000000000000000000000000000000a74186094273b600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12356,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e72ce1ece575f66792f5d35aeb1111a615aebda0000000000000000000000008e72ce1ece575f66792f5d35aeb1111a615aebda0000000000000000000000000000000000000000000000000073528b83edc91d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12357,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f5d8f53a36c4bbef078e352ef38cc06132320d3c000000000000000000000000f5d8f53a36c4bbef078e352ef38cc06132320d3c0000000000000000000000000000000000000000000000000ddafe7a671a57ff00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xc1492a75f1fe47964580f647401b443552eadbde916e7159fa909826cd061e53,2021-11-28 05:21:23.000 UTC,0,true -12358,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f4df4d5c7b7cea92d403903c67f5005df3081681000000000000000000000000f4df4d5c7b7cea92d403903c67f5005df308168100000000000000000000000000000000000000000000000000a3b0e21b6a441f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12360,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009f341472663d4d328c58477d04c27aee530b03e10000000000000000000000009f341472663d4d328c58477d04c27aee530b03e100000000000000000000000000000000000000000000000000a2ec7ed9121eed00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12362,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8584d1552c0e68ef8fc580169456a8806a9ee5f000000000000000000000000e8584d1552c0e68ef8fc580169456a8806a9ee5f00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12363,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000034222096a91c73ba06bd1dd3eeea16e250dde36a00000000000000000000000034222096a91c73ba06bd1dd3eeea16e250dde36a00000000000000000000000000000000000000000000000000a4ff45ee21769000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12364,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000700efd158f49f0958d85cdb0b28e1f24fdfb7db0000000000000000000000000700efd158f49f0958d85cdb0b28e1f24fdfb7db0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12365,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000030d3f805c896d8b6290d7978d7121ff24ce4ab2200000000000000000000000030d3f805c896d8b6290d7978d7121ff24ce4ab2200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12366,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000095dd317732fbc595206928c4974b653da65f59e300000000000000000000000095dd317732fbc595206928c4974b653da65f59e300000000000000000000000000000000000000000000000000cf4d293f509bb400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12367,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006b778b4616b024c4de5686dc064a9c7de3435cc70000000000000000000000006b778b4616b024c4de5686dc064a9c7de3435cc700000000000000000000000000000000000000000000000000a64c2c9badefdc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12368,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac87fbbf35e5504bee8daec50bef75d43ce20d92000000000000000000000000ac87fbbf35e5504bee8daec50bef75d43ce20d920000000000000000000000000000000000000000000000000429d069189e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x0a6fb8ec52aea5b3548eec6463151dca2425a54c07e6f720eb73363b4bfcf93e,2022-03-11 18:12:12.000 UTC,0,true -12369,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000036b0440e2106edc46b632722c531b6f6d5d4fc6d00000000000000000000000036b0440e2106edc46b632722c531b6f6d5d4fc6d00000000000000000000000000000000000000000000000000a50ce658f7244d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12370,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000048c84fb52dd6fd66cf4c150224b1d41b5f0729c400000000000000000000000048c84fb52dd6fd66cf4c150224b1d41b5f0729c4000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12372,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049fe6d0096ec9a51a59231c2d46f09a339d1629600000000000000000000000049fe6d0096ec9a51a59231c2d46f09a339d162960000000000000000000000000000000000000000000000000088e622139322e700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12376,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000053be6809662db6de0db5c8d9081b9a6c29b3e0a700000000000000000000000053be6809662db6de0db5c8d9081b9a6c29b3e0a700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12377,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa07bab7248dc4e752ab42950ef8a66686c31db1000000000000000000000000aa07bab7248dc4e752ab42950ef8a66686c31db100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12378,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da4bd497c38a6acb9c98d133614faa5d9c8e9598000000000000000000000000da4bd497c38a6acb9c98d133614faa5d9c8e95980000000000000000000000000000000000000000000000000000470fe6c8c98000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12379,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da4bd497c38a6acb9c98d133614faa5d9c8e9598000000000000000000000000da4bd497c38a6acb9c98d133614faa5d9c8e95980000000000000000000000000000000000000000000000000000470fe6c8c98000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12381,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da4bd497c38a6acb9c98d133614faa5d9c8e9598000000000000000000000000da4bd497c38a6acb9c98d133614faa5d9c8e95980000000000000000000000000000000000000000000000000000470fe6c8c98000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12382,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da4bd497c38a6acb9c98d133614faa5d9c8e9598000000000000000000000000da4bd497c38a6acb9c98d133614faa5d9c8e95980000000000000000000000000000000000000000000000000000af7c0fce8c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12384,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e4272bca6da323391ae38bbcdc9c864345541597000000000000000000000000e4272bca6da323391ae38bbcdc9c8643455415970000000000000000000000000000000000000000000000000040fb8958066f1800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12387,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001bc467b322875a3abafd99e21edd410e9eacd3390000000000000000000000001bc467b322875a3abafd99e21edd410e9eacd3390000000000000000000000000000000000000000000000000071afd498d0000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12390,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001cb2abfca6f0799526913a6f934b4d43c3d4b7fe0000000000000000000000001cb2abfca6f0799526913a6f934b4d43c3d4b7fe00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12391,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000237d3ee0674782599c6df583f8b7bc62b9850034000000000000000000000000237d3ee0674782599c6df583f8b7bc62b985003400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12393,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009ecf59234351a4557e62178b07ef83f98d6e86520000000000000000000000009ecf59234351a4557e62178b07ef83f98d6e86520000000000000000000000000000000000000000000000001aec16906a10b11000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12394,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000571fc4de243e743ccabf46bfd10d878406f82042000000000000000000000000571fc4de243e743ccabf46bfd10d878406f8204200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12395,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8a8cc3939a8c3c148c7d328d8455c3f73703b08000000000000000000000000e8a8cc3939a8c3c148c7d328d8455c3f73703b08000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12398,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000597d2d5bba8bb938474b0234450edebabe4b3c1b000000000000000000000000597d2d5bba8bb938474b0234450edebabe4b3c1b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12399,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000466f0ac408d52e7eb082aca07f2835a0d5b8d89b000000000000000000000000466f0ac408d52e7eb082aca07f2835a0d5b8d89b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12400,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039cc43b3068a208ae87042f927fb53b85586c65400000000000000000000000039cc43b3068a208ae87042f927fb53b85586c65400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12401,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc3de6ab97634192cbb2d9d82d2216f33292dc2e000000000000000000000000cc3de6ab97634192cbb2d9d82d2216f33292dc2e0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12403,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c4d18fc7d98f204e393a3045ee9073e87c137e8b000000000000000000000000c4d18fc7d98f204e393a3045ee9073e87c137e8b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12404,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eb29cbf4b3d04e003b3c82fbbf45f0c97cab3451000000000000000000000000eb29cbf4b3d04e003b3c82fbbf45f0c97cab345100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12405,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000123317f544d620465d938789656edfcf9699330f000000000000000000000000123317f544d620465d938789656edfcf9699330f00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12406,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001171697a3f96a3790e6c265fd1d9f0c601f08f790000000000000000000000001171697a3f96a3790e6c265fd1d9f0c601f08f7900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12407,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000f93149d54461a783c1517b23974113b89e382410000000000000000000000000f93149d54461a783c1517b23974113b89e3824100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12409,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d4d36ced9a3096fb1916fc83675bc3785afc9710000000000000000000000005d4d36ced9a3096fb1916fc83675bc3785afc97100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12410,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000056584ee28735e10b381275b913b934ed656b0e2800000000000000000000000056584ee28735e10b381275b913b934ed656b0e2800000000000000000000000000000000000000000000000001886e2d09d3620900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12416,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000002f5f4ac52b217828c8fa780a5fe675674bb761700000000000000000000000002f5f4ac52b217828c8fa780a5fe675674bb76170000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12417,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000002f5f4ac52b217828c8fa780a5fe675674bb761700000000000000000000000002f5f4ac52b217828c8fa780a5fe675674bb76170000000000000000000000000000000000000000000000000000008bb2c9700000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12419,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008a2ea71352fd4a3fdcbf33dc847a7aaf85dd0b040000000000000000000000008a2ea71352fd4a3fdcbf33dc847a7aaf85dd0b0400000000000000000000000000000000000000000000000000060a24181e400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12420,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf8445a17f25d149e63ba8662eb602e5103a236b000000000000000000000000cf8445a17f25d149e63ba8662eb602e5103a236b0000000000000000000000000000000000000000000000000dcf39df802b162900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12423,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000048a0a3ae50991044e5d797e73394f0dfff92180b00000000000000000000000048a0a3ae50991044e5d797e73394f0dfff92180b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12424,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000521d8d1a5c001895a8f735137b4e0fc4aebc91ae000000000000000000000000521d8d1a5c001895a8f735137b4e0fc4aebc91ae00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12425,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0d7561c786b5f5fb702f59f026a5011e25b95f1000000000000000000000000b0d7561c786b5f5fb702f59f026a5011e25b95f100000000000000000000000000000000000000000000000000157f7e818c82c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12428,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001eaf2bfccc4f09ea373e0f7cd79b7d6803e1aace0000000000000000000000001eaf2bfccc4f09ea373e0f7cd79b7d6803e1aace00000000000000000000000000000000000000000000000000645f6d065403e000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12429,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e281add1e87f5aa0fd9c39d8bcfd7c1a6da61fd0000000000000000000000004e281add1e87f5aa0fd9c39d8bcfd7c1a6da61fd0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12431,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000af435f714502846ca912b6225964ef7a62714564000000000000000000000000af435f714502846ca912b6225964ef7a6271456400000000000000000000000000000000000000000000000000017d2684ae983800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12433,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099436be04157c939f548abd8e3cae9ce01c7abca00000000000000000000000099436be04157c939f548abd8e3cae9ce01c7abca000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12435,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d79add81d0b801eaa6e7fc9e1aca731cb28381f7000000000000000000000000d79add81d0b801eaa6e7fc9e1aca731cb28381f7000000000000000000000000000000000000000000000000003b460fb1d669d200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12436,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000404551724744d0dfc51cda2731f0fd8c62923173000000000000000000000000404551724744d0dfc51cda2731f0fd8c62923173000000000000000000000000000000000000000000000000005af2bab4353fd500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12442,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017aab8b3ffe10f1ab840d90dc2a788a3fdef505c00000000000000000000000017aab8b3ffe10f1ab840d90dc2a788a3fdef505c00000000000000000000000000000000000000000000000006ccd46763f1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12444,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c3f01f6e61c0cedba21b6e22ea5a005e7b5ece03000000000000000000000000c3f01f6e61c0cedba21b6e22ea5a005e7b5ece03000000000000000000000000000000000000000000000000015bb4896242211200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12445,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2b6fe0d48498b892992c2e8b018160f21a6e104000000000000000000000000d2b6fe0d48498b892992c2e8b018160f21a6e10400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12447,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000078259703c92b0ba6491f1162f4a4b17a2ada0ae000000000000000000000000078259703c92b0ba6491f1162f4a4b17a2ada0ae000000000000000000000000000000000000000000000000015d9f93ef4d8f9a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12449,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000443dfb2a4b76693ba596742d6bd2ae52a39ad0c8000000000000000000000000443dfb2a4b76693ba596742d6bd2ae52a39ad0c80000000000000000000000000000000000000000000000000077ed8698a8dcc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12450,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049f63b254ea9043e57678c13e06aef257fab45c100000000000000000000000049f63b254ea9043e57678c13e06aef257fab45c1000000000000000000000000000000000000000000000000015407c84249e36100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x26cfbf229aff2ae8f27a32b7de6e1de00c2828e5e8023076cbbddfca9e238e28,2021-12-20 17:01:31.000 UTC,0,true -12453,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a71504de8712ab1405bb6d007365f56f3886d0f1000000000000000000000000a71504de8712ab1405bb6d007365f56f3886d0f1000000000000000000000000000000000000000000000000004053c8ddc9654500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe3e90cc6793235b8145495d50a8b95bab5895375810a34c53e835e384569eba8,2022-06-28 11:58:41.000 UTC,0,true -12457,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000524fddf4a772b34846553c6765fad662f207a090000000000000000000000000524fddf4a772b34846553c6765fad662f207a090000000000000000000000000000000000000000000000000007240e19ff4428700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12458,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000027490c1fccfd250cca46d17cf3f35960e1d7863700000000000000000000000027490c1fccfd250cca46d17cf3f35960e1d7863700000000000000000000000000000000000000000000000001157fa250dde2c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12459,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000054291d14e7b1c33abe9d59765b065a2f782b202b00000000000000000000000054291d14e7b1c33abe9d59765b065a2f782b202b0000000000000000000000000000000000000000000000000000000022be61e200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x7c6d7058062f078a9675ef7d77a25dd22ac2516576a4ab2a4d8ec16bf127b434,2022-05-21 06:52:31.000 UTC,0,true -12462,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000ef531802e40883e1867215b66f304412188bcc60000000000000000000000000ef531802e40883e1867215b66f304412188bcc600000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12468,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005cd11fae257afe4638141c27cabc2830896f97ed0000000000000000000000005cd11fae257afe4638141c27cabc2830896f97ed000000000000000000000000000000000000000000000000006559cc98e1873c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12470,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c5d1cd7ec090a6186164fee2e648001dc7ed3d70000000000000000000000000c5d1cd7ec090a6186164fee2e648001dc7ed3d700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12471,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e6ce8f922512551527d6670d6d41861b5128c220000000000000000000000003e6ce8f922512551527d6670d6d41861b5128c220000000000000000000000000000000000000000000000000008e1bc9bf0400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12472,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000319fdba64234fcbdc4c884cc7d9db1cc00c429b7000000000000000000000000319fdba64234fcbdc4c884cc7d9db1cc00c429b700000000000000000000000000000000000000000000000001c39f40a0c4092c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12473,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000220a6cb04d48ca2c33735e94df78c17f8b0f7c9f000000000000000000000000220a6cb04d48ca2c33735e94df78c17f8b0f7c9f0000000000000000000000000000000000000000000000000008e1bc9bf0400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12474,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009fec7a5b0ba8a8dc5e32ab479bc15e13b6577a510000000000000000000000009fec7a5b0ba8a8dc5e32ab479bc15e13b6577a51000000000000000000000000000000000000000000000000002ad25e289cd60900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12482,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c60048fd2bccd82da8a1c0d06b3cf1bfd7d740a2000000000000000000000000c60048fd2bccd82da8a1c0d06b3cf1bfd7d740a2000000000000000000000000000000000000000000000000001eb0062ff1fc8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12485,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df74afb1a98682d0163000beaa91a40b2fb04b5e000000000000000000000000df74afb1a98682d0163000beaa91a40b2fb04b5e000000000000000000000000000000000000000000000000012f99c1aadd635900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12486,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c93224c75ded80416f0c90d26acf22328e62dede000000000000000000000000c93224c75ded80416f0c90d26acf22328e62dede000000000000000000000000000000000000000000000000002030bafc871f8f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12488,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006b5b14f21fa818596414614ddc954e17ded368b90000000000000000000000006b5b14f21fa818596414614ddc954e17ded368b9000000000000000000000000000000000000000000000000000119f17fe1600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12491,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e030d0727b116a30b4858cb395a4ee7f0557ef10000000000000000000000000e030d0727b116a30b4858cb395a4ee7f0557ef100000000000000000000000000000000000000000000000000198047866b3072400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12493,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009a930c154dfb62b1dddf26d8c78bc93d5e6f17500000000000000000000000009a930c154dfb62b1dddf26d8c78bc93d5e6f175000000000000000000000000000000000000000000000000003dba786ef8f000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12494,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000069bbeaf77d38a812d448ad92216ecce1228d108100000000000000000000000069bbeaf77d38a812d448ad92216ecce1228d10810000000000000000000000000000000000000000000000000000000041587ec100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x7fbc7e39791ec715851c97a61e8e7d089b6ef61a918d1d75c5f97ebcbabeff6b,2022-04-29 08:54:00.000 UTC,0,true -12495,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000000fc95af4cfb33dddc2d8144fd36dcdcac2a5e01c0000000000000000000000000fc95af4cfb33dddc2d8144fd36dcdcac2a5e01c000000000000000000000000000000000000000000000000000000004232d52400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xcd6a470db49ca4efca7abb11e3de703b38001f19b7488454675289c2e9d4d7fa,2022-04-30 04:55:41.000 UTC,0,true -12496,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000c1daa72eb73b036def6e1287967695e40d197a58000000000000000000000000c1daa72eb73b036def6e1287967695e40d197a580000000000000000000000000000000000000000000000000000000040e7411300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x7971f4f1113227a0b305b6d7617747466a7d36b20cece379276a8b3ea2be17e8,2022-04-30 04:55:41.000 UTC,0,true -12497,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000c1a3b5c321d73065449f25d40fa61a2b4036f9c1000000000000000000000000c1a3b5c321d73065449f25d40fa61a2b4036f9c1000000000000000000000000000000000000000000000000000000004020137900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x9501f92578cc94b7a4327fac5a26550c13d8cf6074cf25d2166bb03ff8c3cea6,2022-04-30 07:47:45.000 UTC,0,true -12498,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000046f05604850563c5caf174bd14a7e346f0767e1e00000000000000000000000046f05604850563c5caf174bd14a7e346f0767e1e00000000000000000000000000000000000000000000000000000000484a7f4900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x06a7d5e5deaec3b3858eecc61adf72d62547e082356899afa4f33aef1ca5fc9c,2022-04-30 10:26:47.000 UTC,0,true -12501,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a95bc97d8b30795cc5fbadb149fe2e9144912d9c000000000000000000000000a95bc97d8b30795cc5fbadb149fe2e9144912d9c0000000000000000000000000000000000000000000000000090cf211193f56000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12507,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000006d6dec719e2acf3480e9478ad368e2eff1368cd00000000000000000000000006d6dec719e2acf3480e9478ad368e2eff1368cd00000000000000000000000000000000000000000000000000520c21fa67c24600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12510,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bfb786bef16ed161829ba9e4c0eb94d026a338c5000000000000000000000000bfb786bef16ed161829ba9e4c0eb94d026a338c5000000000000000000000000000000000000000000000000005840452088dde600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12512,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007e8e651e8c22609d0f86528c98829023165d78560000000000000000000000007e8e651e8c22609d0f86528c98829023165d7856000000000000000000000000000000000000000000000000001a4676d705c1f700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12514,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aec769ae46b7d4baa9215e1775a37c9984656c27000000000000000000000000aec769ae46b7d4baa9215e1775a37c9984656c2700000000000000000000000000000000000000000000000001aa535d3d0c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12515,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a79648a1a89219a135e55bc2a8803eeae4b03772000000000000000000000000a79648a1a89219a135e55bc2a8803eeae4b037720000000000000000000000000000000000000000000000000082d85aeff600c800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12518,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba715566ebb933102651465b02e8dba50b29dd43000000000000000000000000ba715566ebb933102651465b02e8dba50b29dd43000000000000000000000000000000000000000000000000015d76908fb6b38f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12521,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004f6bad66ba1e4bf8d2c328c11653bb47b3f3449f0000000000000000000000004f6bad66ba1e4bf8d2c328c11653bb47b3f3449f000000000000000000000000000000000000000000000000058b1733c2d60e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12524,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eb1eaf530ed313103b2450d188012b3f5b03e68b000000000000000000000000eb1eaf530ed313103b2450d188012b3f5b03e68b000000000000000000000000000000000000000000000000058b58ecaf7aaf0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12529,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d51e9f882465b20a1ea3063e8ac98e720057b240000000000000000000000008d51e9f882465b20a1ea3063e8ac98e720057b24000000000000000000000000000000000000000000000000005e1928929a653d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x52bc0a60508f1a40c9136479c94b47ddbda8551f5982642ef48ca7f0946d2bf0,2021-12-20 08:21:56.000 UTC,0,true -12534,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000af61206578fb4e4ad1842efde1dc74fb44b497d3000000000000000000000000af61206578fb4e4ad1842efde1dc74fb44b497d300000000000000000000000000000000000000000000000001564531e6436a0700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12536,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd65c5e9d1d4124a4730a9bad9ba5784f9b1d1ec000000000000000000000000dd65c5e9d1d4124a4730a9bad9ba5784f9b1d1ec00000000000000000000000000000000000000000000000000b3ea62ddd50e5800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12537,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004f93a736784091e6292f7c6bad4d97836ce06a920000000000000000000000004f93a736784091e6292f7c6bad4d97836ce06a92000000000000000000000000000000000000000000000000037189a38ee5571200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12539,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061f4442da3ba5875916073697e96ee44019275fd00000000000000000000000061f4442da3ba5875916073697e96ee44019275fd0000000000000000000000000000000000000000000000000159a42c0d57749f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12541,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007db7bf3177b157fe9e8be57915e6bb653423a8e20000000000000000000000007db7bf3177b157fe9e8be57915e6bb653423a8e20000000000000000000000000000000000000000000000000159d9c30fb2bde000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12542,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000033853501d457b975eded3398fa3f127f7c30073900000000000000000000000033853501d457b975eded3398fa3f127f7c300739000000000000000000000000000000000000000000000000015803af67d108fe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12543,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009ca2c5e91ef49549819d805a0c38f348d33078cc0000000000000000000000009ca2c5e91ef49549819d805a0c38f348d33078cc000000000000000000000000000000000000000000000000015ca8f3f2cf889b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12545,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e2837d50d9c8f48262340ebb953a7525d13e2540000000000000000000000000e2837d50d9c8f48262340ebb953a7525d13e2540000000000000000000000000000000000000000000000000015bc11cf4ea1d1400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12546,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a04d7df825fa6a0c1daddc4285ae41762b92a230000000000000000000000003a04d7df825fa6a0c1daddc4285ae41762b92a2300000000000000000000000000000000000000000000000002bfab037dc4d19500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12547,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000027d204b561bf99ddfb872c8e1ca023ae468820ca00000000000000000000000027d204b561bf99ddfb872c8e1ca023ae468820ca000000000000000000000000000000000000000000000000015c033cf2411b6d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12548,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005c1c6ca180ac3446302bb396ade4ba392c26c7b20000000000000000000000005c1c6ca180ac3446302bb396ade4ba392c26c7b2000000000000000000000000000000000000000000000000015b88480c6f71b800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12549,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f6484a1e627f425aea442482d2ed3a71c3dbf474000000000000000000000000f6484a1e627f425aea442482d2ed3a71c3dbf474000000000000000000000000000000000000000000000000015c22d9bd95664800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12550,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a1225cde04c3f5d4b233aa3901eca3bc3fb83f41000000000000000000000000a1225cde04c3f5d4b233aa3901eca3bc3fb83f41000000000000000000000000000000000000000000000000015d74c7223a273f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12551,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000044be41c7efd167737b78fcaa93eb55bd8bf8165700000000000000000000000044be41c7efd167737b78fcaa93eb55bd8bf81657000000000000000000000000000000000000000000000000015ba4ff9cd40c2d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12552,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000061014b6fb0b97646762d2b1e523ed3af0b76f98000000000000000000000000061014b6fb0b97646762d2b1e523ed3af0b76f98000000000000000000000000000000000000000000000000015cee3c4c03f8b000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12553,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000030e17308b734d6f7177fef54018e552c6242b1ba00000000000000000000000030e17308b734d6f7177fef54018e552c6242b1ba00000000000000000000000000000000000000000000000000b504f03d5ad5bf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12554,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c13d5f2a4c59b897ebe4f3dc3e4a7893feb322c9000000000000000000000000c13d5f2a4c59b897ebe4f3dc3e4a7893feb322c900000000000000000000000000000000000000000000000000ee08251ff3800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12555,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000814390720bf3f2b45c31d3d1dc39cf609e6731e5000000000000000000000000814390720bf3f2b45c31d3d1dc39cf609e6731e500000000000000000000000000000000000000000000000000455c678263ca0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12556,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a5851a0ad5205d3c49f70c6b8f73a1b1cae259b1000000000000000000000000a5851a0ad5205d3c49f70c6b8f73a1b1cae259b1000000000000000000000000000000000000000000000000012b48797546277200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12558,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d1d9169f3dd1e7a2e89b1a5e62b7425f6fdb8fe6000000000000000000000000d1d9169f3dd1e7a2e89b1a5e62b7425f6fdb8fe6000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12560,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e296113009c902bb372db1d2bb04756c787990a5000000000000000000000000e296113009c902bb372db1d2bb04756c787990a500000000000000000000000000000000000000000000000000216b2ecfe4d60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12562,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f0e97deadff3a31601c5a6f92600a5bee2946afb000000000000000000000000f0e97deadff3a31601c5a6f92600a5bee2946afb000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12563,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047c0510103840dac5af896a027219231630d40ae00000000000000000000000047c0510103840dac5af896a027219231630d40ae000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12564,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001575c7913329e382ccc91afdd2adf735b6686e170000000000000000000000001575c7913329e382ccc91afdd2adf735b6686e17000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12565,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c04bab572576adf321f0002963b70c715a49ec30000000000000000000000000c04bab572576adf321f0002963b70c715a49ec30000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12584,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000046e94a8ceb7bf9666ca8da233838fbcd924d466500000000000000000000000046e94a8ceb7bf9666ca8da233838fbcd924d4665000000000000000000000000000000000000000000000000000107c0e2fc200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12605,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a80d3dec587d242f06db92a4398668b66f183c60000000000000000000000005a80d3dec587d242f06db92a4398668b66f183c60000000000000000000000000000000000000000000000001ba6ccee3a25143900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xdc9b7ec5d338c0ec72ade7ba1af0971e433f584d877d5380731e70aabbf90158,2022-02-23 07:54:45.000 UTC,0,true -12606,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b13ca2d6f12407f2430e8da4a30269b22ef07bd0000000000000000000000001b13ca2d6f12407f2430e8da4a30269b22ef07bd000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12607,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000068430574da4bdaa97680d7697f2580e46fef559200000000000000000000000068430574da4bdaa97680d7697f2580e46fef5592000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12609,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005427190f27b844b71f47aa4ea1028b73e01224250000000000000000000000005427190f27b844b71f47aa4ea1028b73e0122425000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12611,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000159254bf9fe9856e593a23373513548f7ea6c980000000000000000000000000159254bf9fe9856e593a23373513548f7ea6c98000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12612,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3b053a95db2da8ada39f892b17eb7f886216992000000000000000000000000d3b053a95db2da8ada39f892b17eb7f88621699200000000000000000000000000000000000000000000000001a229d893a0c5ea00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x93e71a99de387904ec8ccbf0a88a54d45f5ccf7abfeae14da3dd5b8f374cc998,2022-06-28 07:18:45.000 UTC,0,true -12613,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000028b273920f12584387bd886175d4f6e0bec446b400000000000000000000000028b273920f12584387bd886175d4f6e0bec446b4000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12614,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005b3b7eefd64b11fc3f55fdf36514e591745eef260000000000000000000000005b3b7eefd64b11fc3f55fdf36514e591745eef2600000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12618,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ad6278079874587d7d56b185ae66f54a857670a0000000000000000000000007ad6278079874587d7d56b185ae66f54a857670a000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12621,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000041c71043ef53a2185523ee0af27ee17a3c7ff03900000000000000000000000041c71043ef53a2185523ee0af27ee17a3c7ff039000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12625,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000218c16b3a742a99a4616b76acab015d53c39665e000000000000000000000000218c16b3a742a99a4616b76acab015d53c39665e000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12626,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006539dd3f72d798693e4f4b2290d84de3c5115f3d0000000000000000000000006539dd3f72d798693e4f4b2290d84de3c5115f3d000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12627,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b9edf1c495f910f100a1b3f3eccc9583cb7eefcd000000000000000000000000b9edf1c495f910f100a1b3f3eccc9583cb7eefcd000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12628,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d51765816727e250f7a565745d769236b8e2b05f000000000000000000000000d51765816727e250f7a565745d769236b8e2b05f0000000000000000000000000000000000000000000000000032d5013509054000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12629,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000139eeb895d86939eb18b52b3347402dddeaad378000000000000000000000000139eeb895d86939eb18b52b3347402dddeaad37800000000000000000000000000000000000000000000000000a73b849db7688f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12632,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e342d8cd201ce9d9c14f3a015c8dae0f41e40fa0000000000000000000000001e342d8cd201ce9d9c14f3a015c8dae0f41e40fa00000000000000000000000000000000000000000000000002bdfb72cb4f837300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12634,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a946173859026fc1e83341210b919b0b7d60d45d000000000000000000000000a946173859026fc1e83341210b919b0b7d60d45d00000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12635,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000020b45ffb7bdd01a17c7477acf706ce6781d259f200000000000000000000000020b45ffb7bdd01a17c7477acf706ce6781d259f20000000000000000000000000000000000000000000000000019a46adeaaf1c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12641,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fe8648813901b86ea9d8ec0a4594c76a6af8dd04000000000000000000000000fe8648813901b86ea9d8ec0a4594c76a6af8dd0400000000000000000000000000000000000000000000000000d52107cdda176600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe93937dfe5ee78b3982fc6260a6a3ca315264dde4b7d375722d89078f0c171dc,2022-03-14 12:02:18.000 UTC,0,true -12645,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061067823763a87b7029e43f1583be9be9658e31000000000000000000000000061067823763a87b7029e43f1583be9be9658e3100000000000000000000000000000000000000000000000000000f5904616e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12648,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e4796a49c6a7b316612f7a095ffd33ac2b078953000000000000000000000000e4796a49c6a7b316612f7a095ffd33ac2b078953000000000000000000000000000000000000000000000000002579a693e21fa900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12652,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008a99fd459b17ca41258bd85704f6ed8db8ea2e720000000000000000000000008a99fd459b17ca41258bd85704f6ed8db8ea2e72000000000000000000000000000000000000000000000000001c267d3ce0528000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12653,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba003e0ac4a61f3ba9d7f60ebdf8c0d76e8f6d7d000000000000000000000000ba003e0ac4a61f3ba9d7f60ebdf8c0d76e8f6d7d000000000000000000000000000000000000000000000000003e8456d93aaad900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12654,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000cfa366350853663ac7d6128217138a02af8af66e000000000000000000000000cfa366350853663ac7d6128217138a02af8af66e0000000000000000000000000000000000000000000000006f05b59d3b20000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -12655,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000087e4c23cc70d2f83d94748709d6337bd7a3a700000000000000000000000000087e4c23cc70d2f83d94748709d6337bd7a3a70000000000000000000000000000000000000000000000000000041647b1a6e853400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12657,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047769fcdfd4a92b858d1fa8b89569fcd5865db1100000000000000000000000047769fcdfd4a92b858d1fa8b89569fcd5865db11000000000000000000000000000000000000000000000000006387ecff04b63100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12658,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000191390bf43d7d987684a7fb2a0aacfa509984a2e000000000000000000000000191390bf43d7d987684a7fb2a0aacfa509984a2e000000000000000000000000000000000000000000000000002e4412dc7d513a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12659,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc262a30c95ec32fe38ca820660febe4e206cede000000000000000000000000cc262a30c95ec32fe38ca820660febe4e206cede000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12660,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000091c0cba20f536cd7e8163f0335ae98f5eb0eeff400000000000000000000000091c0cba20f536cd7e8163f0335ae98f5eb0eeff400000000000000000000000000000000000000000000000000060a24181e400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12661,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000abf2eb2b127c8de7e6cc34fa236dedf28a9761ce000000000000000000000000abf2eb2b127c8de7e6cc34fa236dedf28a9761ce00000000000000000000000000000000000000000000000000012309ce54000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12662,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007dbcfb15d9945c0651319982425d4daa4eeea56d0000000000000000000000007dbcfb15d9945c0651319982425d4daa4eeea56d00000000000000000000000000000000000000000000000000060a24181e400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12664,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d270c1d351e54520e42a809e3072865cbcb397db000000000000000000000000d270c1d351e54520e42a809e3072865cbcb397db00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12665,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000024c275c4b6303b2dccb2fe5800c9b3c4fe1ac8c600000000000000000000000024c275c4b6303b2dccb2fe5800c9b3c4fe1ac8c600000000000000000000000000000000000000000000000000a72fc21487ac8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12668,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000089709569ace26c3202bc29ba1149c77fe9cd1ceb00000000000000000000000089709569ace26c3202bc29ba1149c77fe9cd1ceb00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12669,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e97f96e80e3a324f0564b4b2e806238d9666fc50000000000000000000000003e97f96e80e3a324f0564b4b2e806238d9666fc500000000000000000000000000000000000000000000000000744ca984f499b600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12671,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002108e0845a138c031731e756117e71d5f87671b40000000000000000000000002108e0845a138c031731e756117e71d5f87671b400000000000000000000000000000000000000000000000000002d79883d200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12676,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000086d7b8065f85eba4cc25d9476478c033c9a31c8800000000000000000000000086d7b8065f85eba4cc25d9476478c033c9a31c880000000000000000000000000000000000000000000000000dde368945c8410000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12677,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d9450faa3a0d1a68ef7d259db484e9f2b9927d40000000000000000000000000d9450faa3a0d1a68ef7d259db484e9f2b9927d4000000000000000000000000000000000000000000000000005b6ee628b48a1000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12679,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000075671888fd4090fbe05bd130ab8999e72e21b7c000000000000000000000000075671888fd4090fbe05bd130ab8999e72e21b7c000000000000000000000000000000000000000000000000002066968eba9c63e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12684,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c889f649bcf28072c5aaf6e853568e506dee0c6a000000000000000000000000c889f649bcf28072c5aaf6e853568e506dee0c6a00000000000000000000000000000000000000000000000000448704339ef90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12685,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006b95a4f17e9792afc6d9fc585e57b7f8bab97b1a0000000000000000000000006b95a4f17e9792afc6d9fc585e57b7f8bab97b1a000000000000000000000000000000000000000000000000007819c56fbeb77300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12686,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f514e198143ed375ad99c224059a3bc301766adb000000000000000000000000f514e198143ed375ad99c224059a3bc301766adb0000000000000000000000000000000000000000000000000045c913cd7b328000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12688,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009b11b6d5eaf7dcc3dc2d65067e585ac814a0e29c0000000000000000000000009b11b6d5eaf7dcc3dc2d65067e585ac814a0e29c000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x0d945151be2be0ba1c94fd3ad7441596cfe281d585c54ff465280e6a153d6c2b,2022-03-12 12:04:38.000 UTC,0,true -12689,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003fedefe818aad7901954bae7efe677542c6177f00000000000000000000000003fedefe818aad7901954bae7efe677542c6177f0000000000000000000000000000000000000000000000000005b0d15f0743f0700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12690,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e20337ca0354a7007a0fb1ac4b3bbc6229d8e99d000000000000000000000000e20337ca0354a7007a0fb1ac4b3bbc6229d8e99d00000000000000000000000000000000000000000000000000581ac2ecac5b1900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12692,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f8ba35cc5493e2dc4e0780d4e299fd627265baaf000000000000000000000000f8ba35cc5493e2dc4e0780d4e299fd627265baaf0000000000000000000000000000000000000000000000000413c2366c04bd2000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12694,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fce1466cd1533580d6988fd3f6de2312e7f9b478000000000000000000000000fce1466cd1533580d6988fd3f6de2312e7f9b47800000000000000000000000000000000000000000000000002dcb9be0f6ed76e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12695,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000077341b139631a179397692815b6fc3e015244aec00000000000000000000000077341b139631a179397692815b6fc3e015244aec000000000000000000000000000000000000000000000000001f5de40cd14bc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12697,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000013faff37f9d615514d88c38d5371b74012a159f500000000000000000000000013faff37f9d615514d88c38d5371b74012a159f50000000000000000000000000000000000000000000000000117906885aec5c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12698,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a55920c86b7b277aa9e46dd35b5243b7024d4da0000000000000000000000002a55920c86b7b277aa9e46dd35b5243b7024d4da000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12699,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b1e192e0c53412eea8ea2e83c4773c5682f615ee000000000000000000000000b1e192e0c53412eea8ea2e83c4773c5682f615ee000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12700,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004b57903f6089e017cb58cf3106685c46ca52f9f00000000000000000000000004b57903f6089e017cb58cf3106685c46ca52f9f000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12701,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008a54641040bcb58b095f7e2c1ce7cb9fbd9b89730000000000000000000000008a54641040bcb58b095f7e2c1ce7cb9fbd9b897300000000000000000000000000000000000000000000000000a68329c833fefd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12702,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001876761f051f548d5e645a971a235860f8cb07420000000000000000000000001876761f051f548d5e645a971a235860f8cb0742000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12704,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a166a2403953146f27f4d3fae975ce2c71f0c85f000000000000000000000000a166a2403953146f27f4d3fae975ce2c71f0c85f000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12707,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba18e462a6145c1b45b57642b7116f5e4625945b000000000000000000000000ba18e462a6145c1b45b57642b7116f5e4625945b000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12708,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fb50e64a84303861f4ce3cb7ec2c278719f0e736000000000000000000000000fb50e64a84303861f4ce3cb7ec2c278719f0e736000000000000000000000000000000000000000000000000000a3886eaca5c8100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12709,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a961583fa5d5bce5303873f1e03ab47404709b2a000000000000000000000000a961583fa5d5bce5303873f1e03ab47404709b2a000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12710,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b24adeb0b9fbbca38192c4104120d0065d3d67fe000000000000000000000000b24adeb0b9fbbca38192c4104120d0065d3d67fe000000000000000000000000000000000000000000000000001f36d97df45cc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12711,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ae52eedb15f230f5808f7534f9dc7ce714263e30000000000000000000000006ae52eedb15f230f5808f7534f9dc7ce714263e3000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12712,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000130ff3c7481bdda0341a8bf9b49d7576405e2ae5000000000000000000000000130ff3c7481bdda0341a8bf9b49d7576405e2ae5000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12713,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aab30cec92a8340dd03f3b53192957beb46ce602000000000000000000000000aab30cec92a8340dd03f3b53192957beb46ce602000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12714,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000065eda3923fe4a0da4457f7386d0d53160deed0ef00000000000000000000000065eda3923fe4a0da4457f7386d0d53160deed0ef000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12715,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b5803ab7d40541c08bba4b604537f8a1ec1ff111000000000000000000000000b5803ab7d40541c08bba4b604537f8a1ec1ff111000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12716,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d3a16071fb668aa901f9779d0224fd806f790610000000000000000000000000d3a16071fb668aa901f9779d0224fd806f79061000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12717,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c500a923764edb66541d2d73ba7976784f2fc860000000000000000000000004c500a923764edb66541d2d73ba7976784f2fc86000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12718,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000058f1449c9ed689d565a44391cae37391e54ed79200000000000000000000000058f1449c9ed689d565a44391cae37391e54ed792000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12719,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009326d59692f9e9b81be83e5bb3dde124ce1929750000000000000000000000009326d59692f9e9b81be83e5bb3dde124ce192975000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12720,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a5ec11a3c2d0d16a237962739877eed9fda44444000000000000000000000000a5ec11a3c2d0d16a237962739877eed9fda44444000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12721,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000031f87119d2d00f2647494a4b621ca52d228f32e900000000000000000000000031f87119d2d00f2647494a4b621ca52d228f32e9000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12722,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000081c2e1491bb91821d847b24312c5ef47c39b73a700000000000000000000000081c2e1491bb91821d847b24312c5ef47c39b73a7000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12723,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a11e87dea51429fa7db5f082dd924adbd69049eb000000000000000000000000a11e87dea51429fa7db5f082dd924adbd69049eb0000000000000000000000000000000000000000000000000d7cb58247ad936c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12724,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fca5d3cbe52d1b6271f4281c42402113ffac582b000000000000000000000000fca5d3cbe52d1b6271f4281c42402113ffac582b000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12725,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f4e9af1249e6ab82ac6d0ec433a97c9107b62470000000000000000000000008f4e9af1249e6ab82ac6d0ec433a97c9107b6247000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12726,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff590b4ccb8c7759cef24e9d808852628d837ddf000000000000000000000000ff590b4ccb8c7759cef24e9d808852628d837ddf000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12727,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e281add1e87f5aa0fd9c39d8bcfd7c1a6da61fd0000000000000000000000004e281add1e87f5aa0fd9c39d8bcfd7c1a6da61fd000000000000000000000000000000000000000000000000002657444e6a800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12728,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cfc6b3bd3c6b935f81f5adf4d6f7c2e7775f728a000000000000000000000000cfc6b3bd3c6b935f81f5adf4d6f7c2e7775f728a000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12729,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e3f319e3d501d5f4dc5d3fd33d18e6ba604d0184000000000000000000000000e3f319e3d501d5f4dc5d3fd33d18e6ba604d0184000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12730,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006fd9ef433f64e6bbd329c97bd4b896c27e209ee70000000000000000000000006fd9ef433f64e6bbd329c97bd4b896c27e209ee7000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12731,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a213f4e26ad5d1e446deb665a36f062d6bd26966000000000000000000000000a213f4e26ad5d1e446deb665a36f062d6bd26966000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12732,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea02854800d8c005f1f66df7ddd8512501ccb6d3000000000000000000000000ea02854800d8c005f1f66df7ddd8512501ccb6d300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12733,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a139bff325056bced6728154733a3c6198e5e946000000000000000000000000a139bff325056bced6728154733a3c6198e5e946000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12739,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000083540f4e22064133f42671ebf6bc8c70dc2d3adc00000000000000000000000083540f4e22064133f42671ebf6bc8c70dc2d3adc000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12740,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b15c515b73817cedebf7501735c6e0da8344e3df000000000000000000000000b15c515b73817cedebf7501735c6e0da8344e3df00000000000000000000000000000000000000000000000002bde0a65af2303800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12741,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000004a85db7967db16bd82f93f2f426eff3cc9261e7e000000000000000000000000000000000000000000000003f45a2d2e460cf8dc,,,1,true -12742,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000057424e704d9912129445cadae8c321a3bede349d00000000000000000000000057424e704d9912129445cadae8c321a3bede349d000000000000000000000000000000000000000000000000017e9c164ba03bfb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12747,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a492dbab5fdbd910ec4120aca58ac72999eed160000000000000000000000004a492dbab5fdbd910ec4120aca58ac72999eed1600000000000000000000000000000000000000000000000000207c4cf86d1c8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12748,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000755d95d8374e861b970ab341494ab2016555611a000000000000000000000000755d95d8374e861b970ab341494ab2016555611a0000000000000000000000000000000000000000000000000018cee9a1a7627f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12752,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d661570546cfceccb801c02bd043248a36cfbc99000000000000000000000000d661570546cfceccb801c02bd043248a36cfbc990000000000000000000000000000000000000000000000000020d0868b0fbb0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12753,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000071c1812bb93315c214a3855504dc6cb1f910545000000000000000000000000071c1812bb93315c214a3855504dc6cb1f91054500000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12754,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000158dc5b8d904b089e60f26dc6e46c7eaaa45ab19000000000000000000000000158dc5b8d904b089e60f26dc6e46c7eaaa45ab1900000000000000000000000000000000000000000000000000207d9ea1c3a7c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12756,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e1344576ad891ac66e5252dba5365b88da1fd99b000000000000000000000000e1344576ad891ac66e5252dba5365b88da1fd99b000000000000000000000000000000000000000000000000000702eb3368060000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12757,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a492dbab5fdbd910ec4120aca58ac72999eed160000000000000000000000004a492dbab5fdbd910ec4120aca58ac72999eed16000000000000000000000000000000000000000000000000061cc5d8345ac09700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12759,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000007461f3b3d064138f1cb963f0d1322c6568c3c0910000000000000000000000000000000000000000000000174dd0001a9d4accf9,,,1,true -12760,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000007461f3b3d064138f1cb963f0d1322c6568c3c091000000000000000000000000000000000000000000000051b6477b647f405e12,,,1,true -12762,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000075586c3a0bc01ca9a0e36a712bee1523a1cc631200000000000000000000000075586c3a0bc01ca9a0e36a712bee1523a1cc63120000000000000000000000000000000000000000000000002980e84cbd48c67d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7a626ddae1b5bb518fc9ecf24c96b772cf5645a0ae662566360bddd439346c56,2021-11-21 08:42:13.000 UTC,0,true -12763,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000705c7909e5d4b833778cb95fee849c7dff1d0681000000000000000000000000705c7909e5d4b833778cb95fee849c7dff1d0681000000000000000000000000000000000000000000000000004cfd3251019af800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12766,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3c6beb2f0de8e0d5c88f8dc7a801ad76b93b3ee000000000000000000000000f3c6beb2f0de8e0d5c88f8dc7a801ad76b93b3ee00000000000000000000000000000000000000000000000000062a5fde78d17e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12769,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1116f024b707e3640b2a0f312af3fdcc336d4a7000000000000000000000000c1116f024b707e3640b2a0f312af3fdcc336d4a7000000000000000000000000000000000000000000000000015714a295308f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12772,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009bd1f47bf530f5e0eb44dda1236e4c8e817dcd8d0000000000000000000000009bd1f47bf530f5e0eb44dda1236e4c8e817dcd8d00000000000000000000000000000000000000000000000004db73254763000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12774,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055d4deb9198118354f9edb1a0d0efd754a3b765b00000000000000000000000055d4deb9198118354f9edb1a0d0efd754a3b765b000000000000000000000000000000000000000000000000005b4b64304f482400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12775,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000809505a32511e8d1a04cf40b15ca1ef86929cf4c000000000000000000000000809505a32511e8d1a04cf40b15ca1ef86929cf4c0000000000000000000000000000000000000000000000000117191b3f0fe1c100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x46b423fafd82e1b9314ed49ad3ee97f6f3f369006cf74ecf09434e5e84294872,2022-05-07 06:09:43.000 UTC,0,true -12776,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e693edbbfbd115a36c438a02584a23c36c329190000000000000000000000008e693edbbfbd115a36c438a02584a23c36c329190000000000000000000000000000000000000000000000000ddb55e27d5ff42600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xaa1d4f12a955d125b3338ea70941a1e5b099ca720719e009b9e27f5a493d900f,2021-11-29 01:03:57.000 UTC,0,true -12777,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fb32aa7933be746a166199eb498114915df22cb0000000000000000000000007fb32aa7933be746a166199eb498114915df22cb000000000000000000000000000000000000000000000000005730e38f31f63c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12780,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c10c675b9aee3cb7dca0c455f4b94d45367ddbf0000000000000000000000008c10c675b9aee3cb7dca0c455f4b94d45367ddbf00000000000000000000000000000000000000000000000006f05b59d3b2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12781,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000719618e0a60a1bed6e136be73533ff057c227148000000000000000000000000719618e0a60a1bed6e136be73533ff057c22714800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12783,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000091f6a0688c1fcd87edf8dd094b709f0626f5960d00000000000000000000000091f6a0688c1fcd87edf8dd094b709f0626f5960d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12784,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000809505a32511e8d1a04cf40b15ca1ef86929cf4c000000000000000000000000809505a32511e8d1a04cf40b15ca1ef86929cf4c0000000000000000000000000000000000000000000000093ae73131b2ce43ce00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xb57799339a131dd602339412db52c1a302a25a12ddc54d63716561511f0ea4cb,2022-05-07 06:00:02.000 UTC,0,true -12785,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005326b539394f053ddbc1277362bb1719ecb0f67f0000000000000000000000005326b539394f053ddbc1277362bb1719ecb0f67f00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12787,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a629ed28c4d37c5571f70ee756faee46a00ff06a000000000000000000000000a629ed28c4d37c5571f70ee756faee46a00ff06a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12788,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009943bf91aa4b0fc79ff880a62d3b3880b7dd117d0000000000000000000000009943bf91aa4b0fc79ff880a62d3b3880b7dd117d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12789,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c085aea011244074edc9a58e8687ade6c4cbc81a000000000000000000000000c085aea011244074edc9a58e8687ade6c4cbc81a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12791,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000007bdf143f15b3b7d83d1b49e8ad3d6a496bd3b8300000000000000000000000007bdf143f15b3b7d83d1b49e8ad3d6a496bd3b8300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12792,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004dbfaee2a9a1a4b453ff3c8b0fdcb98c10772f6b0000000000000000000000004dbfaee2a9a1a4b453ff3c8b0fdcb98c10772f6b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12793,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005f7f14d3a32d1dd3e1c769a8c01b74cc6b927c860000000000000000000000005f7f14d3a32d1dd3e1c769a8c01b74cc6b927c8600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12794,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004b8d2e8fdcadd8524c25a59c1df7d6fbbf522a170000000000000000000000004b8d2e8fdcadd8524c25a59c1df7d6fbbf522a1700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12795,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ab7d26bd08d4cc1274b337609ae50832a5f79953000000000000000000000000ab7d26bd08d4cc1274b337609ae50832a5f7995300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12796,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000066a67b1bc7304cce366e562617c07ddd0d41f35a00000000000000000000000066a67b1bc7304cce366e562617c07ddd0d41f35a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12797,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f71d5ce40059259b0dcc70c62e4bcd1186cafc6e000000000000000000000000f71d5ce40059259b0dcc70c62e4bcd1186cafc6e00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12798,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c84758bc4d3e4f3c0412376e904fec06b675f088000000000000000000000000c84758bc4d3e4f3c0412376e904fec06b675f08800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12799,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3f595cf45c5b3bbc9866cd5893ea1a561603538000000000000000000000000f3f595cf45c5b3bbc9866cd5893ea1a56160353800000000000000000000000000000000000000000000000001a65169d00b10ff00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12801,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001faa9b8c8eacffbae7c5cd2d5da4642cabfc3bf00000000000000000000000001faa9b8c8eacffbae7c5cd2d5da4642cabfc3bf00000000000000000000000000000000000000000000000000040ef039249039b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12803,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000028bdc7378d6e28e1b7db3578e7553494e609b5060000000000000000000000000000000000000000000000008ac7230489e80000,,,1,true -12804,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008cc4de9142fd56061197a0fc41e77446c5befb260000000000000000000000008cc4de9142fd56061197a0fc41e77446c5befb2600000000000000000000000000000000000000000000000002bcae08e5f95e7400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf3802b74f5e828bc424e869081d2579d6f9a14fa2c82b934fc3b86886231745f,2022-01-31 13:00:57.000 UTC,0,true -12805,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000515c495808d85b1955e9cc99af4bffb59898c458000000000000000000000000515c495808d85b1955e9cc99af4bffb59898c45800000000000000000000000000000000000000000000000009b6de9a817efd3300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12810,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006442e7898a122afec3cb6db82519461f8a30e8890000000000000000000000006442e7898a122afec3cb6db82519461f8a30e889000000000000000000000000000000000000000000000000006fdd3b0899f80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12811,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc0274c302e5c90d092a02fd41f0238eba44b72b000000000000000000000000bc0274c302e5c90d092a02fd41f0238eba44b72b0000000000000000000000000000000000000000000000000dd0c7089e4cd75800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12812,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000212e676d6252a03f9f2e06ae8de251fa5c9b4a14000000000000000000000000212e676d6252a03f9f2e06ae8de251fa5c9b4a14000000000000000000000000000000000000000000000000006f8e40053fc80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12814,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004f97c713f909bbee228c76176de971b6ce0a03120000000000000000000000004f97c713f909bbee228c76176de971b6ce0a0312000000000000000000000000000000000000000000000000016901d16999a4e100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12818,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bb22ffae8c9205cc3677f16c5b79dffba9479b4a000000000000000000000000bb22ffae8c9205cc3677f16c5b79dffba9479b4a00000000000000000000000000000000000000000000000000000573039d050000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12821,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000065d70debbab734a5af4c3c52db9442ae74c211b700000000000000000000000065d70debbab734a5af4c3c52db9442ae74c211b7000000000000000000000000000000000000000000000007a170773c6941199400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -12822,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000addb10584f84d8afaaa3151c44104e667cc5f845000000000000000000000000addb10584f84d8afaaa3151c44104e667cc5f845000000000000000000000000000000000000000000000000003b939aff026ad500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12823,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021bc50129dd6c34162ec0cf715857042cd09ec2300000000000000000000000021bc50129dd6c34162ec0cf715857042cd09ec2300000000000000000000000000000000000000000000000000252cc852a6358000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12824,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cd0229dc6b9d2977a6104d2d42e68d6646cba411000000000000000000000000cd0229dc6b9d2977a6104d2d42e68d6646cba411000000000000000000000000000000000000000000000000005d5ff49dd39c3200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12825,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000458dc04bcd7e95c5bbbe0a7a997e2a6923add5c8000000000000000000000000458dc04bcd7e95c5bbbe0a7a997e2a6923add5c800000000000000000000000000000000000000000000000006e6d708d296866200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x8e143b2b975340b1f3bc9877f0befd03bbf7fece4f2ef7addd4a94bc0a0ba605,2021-12-09 01:22:14.000 UTC,0,true -12826,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000746e6c744fe06068a7a929d164537ed5f8b1763a000000000000000000000000746e6c744fe06068a7a929d164537ed5f8b1763a000000000000000000000000000000000000000000000000000000001215b93800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -12827,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c4ef68733ce0bbac45f02c2b183c9ce7c21843dd000000000000000000000000c4ef68733ce0bbac45f02c2b183c9ce7c21843dd00000000000000000000000000000000000000000000000006f05b59d3b2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12828,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000016b53915280fdbcc205dc90b83f802ec5e3656e100000000000000000000000016b53915280fdbcc205dc90b83f802ec5e3656e100000000000000000000000000000000000000000000002828731523712523ff00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -12833,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000370b3b4ceefd6778318ff01b7102be801d4fb661000000000000000000000000370b3b4ceefd6778318ff01b7102be801d4fb661000000000000000000000000000000000000000000000000006203718bd0b76300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12834,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000092a966e56bbfb61f634cbeda33cd54efa068e99300000000000000000000000092a966e56bbfb61f634cbeda33cd54efa068e99300000000000000000000000000000000000000000000000000e6ed27d666800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12835,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b751649de24d0c89e1da9146a21d0edb856ab21c000000000000000000000000b751649de24d0c89e1da9146a21d0edb856ab21c00000000000000000000000000000000000000000000000000d529ae9e86000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12840,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000051adc9e994b4fee643906fbf2c25c1dc101191bc00000000000000000000000051adc9e994b4fee643906fbf2c25c1dc101191bc0000000000000000000000000000000000000000000000000022102f217f257f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12841,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000066eaf73d1608983e349fc2ab7f54bac42f59cf1e00000000000000000000000066eaf73d1608983e349fc2ab7f54bac42f59cf1e00000000000000000000000000000000000000000000000000034ac267addfab00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12842,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cac3bfe014ee049d2eeec30c7a396a29b1fe1349000000000000000000000000cac3bfe014ee049d2eeec30c7a396a29b1fe13490000000000000000000000000000000000000000000000000001d565e5c2a7f700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12843,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a71f0695dacde00ccecc622556f711e2b4d50a00000000000000000000000003a71f0695dacde00ccecc622556f711e2b4d50a0000000000000000000000000000000000000000000000000010402a50fa3095d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5f3eb59805654adf40549be292648881c654a3717d9ea5dd78581b1c62dc797f,2022-08-05 14:59:48.000 UTC,0,true -12844,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000915d26fa87d887e165d6573a77461f79a3de37ed000000000000000000000000915d26fa87d887e165d6573a77461f79a3de37ed00000000000000000000000000000000000000000000000006e2029807ce00b600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12845,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000073b2e83fa1ee3057053350e830ecc3b535672b6200000000000000000000000073b2e83fa1ee3057053350e830ecc3b535672b620000000000000000000000000000000000000000000000000049dabdd8e497f800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd149b57d5e2aacdeeb6c028b7daaa738f78739b107a381c3900e09cc7e14f59a,2022-07-17 11:26:13.000 UTC,0,true -12846,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021fb9d4351ec723fae6e643a92b8fdb5aaaf5b4a00000000000000000000000021fb9d4351ec723fae6e643a92b8fdb5aaaf5b4a00000000000000000000000000000000000000000000000000034ac267addfab00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12847,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000378991fb57ee360b66a106eef83e362dc8ba8c1c000000000000000000000000378991fb57ee360b66a106eef83e362dc8ba8c1c000000000000000000000000000000000000000000000000001c5b2b6a0e93c700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12849,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000046483f48fdf320b98700c7309270c0ad44f1d24400000000000000000000000046483f48fdf320b98700c7309270c0ad44f1d24400000000000000000000000000000000000000000000000001cdda4faccd000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12850,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009a9da0a5be8c3fcdf748807186ae25618aa3d0cd0000000000000000000000009a9da0a5be8c3fcdf748807186ae25618aa3d0cd000000000000000000000000000000000000000000000000004c2cb8d197c90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12853,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000954b0f9b718d637e3e748718538687a4779afc96000000000000000000000000954b0f9b718d637e3e748718538687a4779afc960000000000000000000000000000000000000000000000000047aad43b28ac7f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12860,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd079cc159b66c3a4c64ebbe1555226913c4a1c4000000000000000000000000dd079cc159b66c3a4c64ebbe1555226913c4a1c400000000000000000000000000000000000000000000000008cff922b85f800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x662831a1c7275eedaa8dda8d086f4719d8904838cab7fdb8cc04477a557eb531,2022-11-01 19:49:11.000 UTC,0,true -12861,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000828b3b3cb2fa9eb8c631d40db9de6b0809fcaacc000000000000000000000000828b3b3cb2fa9eb8c631d40db9de6b0809fcaacc000000000000000000000000000000000000000000000000004f7948c33f618d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xff8a829554519b0d6b3348dd373d4fa05b7009f961b4f5f97d9401a19d1957e5,2022-08-06 09:46:38.000 UTC,0,true -12864,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6e3db3b88c1c9a5f19554df3736e6c5c6630ad0000000000000000000000000b6e3db3b88c1c9a5f19554df3736e6c5c6630ad0000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12865,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2966908f05b065d7006c25d91f991b3260c9250000000000000000000000000a2966908f05b065d7006c25d91f991b3260c92500000000000000000000000000000000000000000000000000001d8865af6030000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12867,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000659ba0b652fb66bb6c1261f5d0aeaeb30fcfec35000000000000000000000000659ba0b652fb66bb6c1261f5d0aeaeb30fcfec35000000000000000000000000000000000000000000000000005457648effdaec00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12876,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6fd1ad1419a72cf120586bf741e7292872d91c4000000000000000000000000c6fd1ad1419a72cf120586bf741e7292872d91c4000000000000000000000000000000000000000000000000014af5dad985d03c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12877,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e77a8fb60de5f73c610997976e619e4d51d09c98000000000000000000000000e77a8fb60de5f73c610997976e619e4d51d09c98000000000000000000000000000000000000000000000000001e00e95f906c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12879,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3f34c80b30ce105704e259a79cacb53fd35e124000000000000000000000000f3f34c80b30ce105704e259a79cacb53fd35e1240000000000000000000000000000000000000000000000002a53c6d724f1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12881,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e71c9fc7f58baa5501f8f64c0b7b8fb11b7bdcd9000000000000000000000000e71c9fc7f58baa5501f8f64c0b7b8fb11b7bdcd90000000000000000000000000000000000000000000000000000cd3e077f172200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12882,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9cef4b10b7461fc0db63bc55b01721583b4a620000000000000000000000000e9cef4b10b7461fc0db63bc55b01721583b4a620000000000000000000000000000000000000000000000000001283b363e5361a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12883,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df621e4da74bb2249b7bdec7f5db6d00967d52a9000000000000000000000000df621e4da74bb2249b7bdec7f5db6d00967d52a90000000000000000000000000000000000000000000000000043a476d6e1006e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x83d3e95d584cd5c794dbc7b9547838b27fc3ae18af10baf5cc1ac49c9d4ed667,2022-05-17 07:45:36.000 UTC,0,true -12885,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea62f4842744fc78400e7a6c7e5ff6b0dd9bea37000000000000000000000000ea62f4842744fc78400e7a6c7e5ff6b0dd9bea37000000000000000000000000000000000000000000000000010121dc0ad067b400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12886,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000b4a1e68ec39294ee9d7bc92bcfe66c2cdc47f5dd000000000000000000000000b4a1e68ec39294ee9d7bc92bcfe66c2cdc47f5dd000000000000000000000000000000000000000000000000b9066c620cb5876900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -12887,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d03635c0adf3501ccfc69e5cefd8ecf88cadd3c0000000000000000000000008d03635c0adf3501ccfc69e5cefd8ecf88cadd3c0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12888,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008176d3d058a568b3ec428105cd994cc4d7acdaca0000000000000000000000008176d3d058a568b3ec428105cd994cc4d7acdaca000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12889,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e4c5a6730f373f43aa11f5c10b1f89bb4cd731f0000000000000000000000004e4c5a6730f373f43aa11f5c10b1f89bb4cd731f000000000000000000000000000000000000000000000000000018f88167808000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12890,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e17634a96b2f1a0f9c0cde3d825f7345e2071dd5000000000000000000000000e17634a96b2f1a0f9c0cde3d825f7345e2071dd50000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12891,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6112bb75d036a4af8d1fae4eb6cb01e9731f703000000000000000000000000d6112bb75d036a4af8d1fae4eb6cb01e9731f7030000000000000000000000000000000000000000000000000021fdbe4608150000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12892,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c8b53c62cb8b13993fba7bfcb0be04bec999bd8f000000000000000000000000c8b53c62cb8b13993fba7bfcb0be04bec999bd8f0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12893,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e4c5a6730f373f43aa11f5c10b1f89bb4cd731f0000000000000000000000004e4c5a6730f373f43aa11f5c10b1f89bb4cd731f00000000000000000000000000000000000000000000000000044b1bd821019300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12896,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d08c941d3d5e36ffcfa0a090a7247ac08b0473f5000000000000000000000000d08c941d3d5e36ffcfa0a090a7247ac08b0473f5000000000000000000000000000000000000000000000000001fb6edc125938000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12897,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000befb73c7f61ed9f3c5392a25acc58cfe00cc0554000000000000000000000000befb73c7f61ed9f3c5392a25acc58cfe00cc055400000000000000000000000000000000000000000000000000222eac0340e70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12900,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004046d34aa2748a6d9d252526681b0d7d70ef8a4a0000000000000000000000004046d34aa2748a6d9d252526681b0d7d70ef8a4a00000000000000000000000000000000000000000000000001100d4b270c0a4700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12901,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000075aa792a13f651a167ec764915ce19619342190100000000000000000000000075aa792a13f651a167ec764915ce1961934219010000000000000000000000000000000000000000000000000039843e1868fa2700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12902,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000350a791bfc2c21f9ed5d10980dad2e2638ffa7f600000000000000000000000001687491cb797f011790f349cbf8969dad49fcd300000000000000000000000001687491cb797f011790f349cbf8969dad49fcd30000000000000000000000000000000000000000000000069131912f2c09a6f700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -12903,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d4701f5ab31d4104c091a9b5504827ec6aacdf39000000000000000000000000d4701f5ab31d4104c091a9b5504827ec6aacdf39000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12907,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009bd8f365fe9e81826ff3069516f01fdc7f7c81cf0000000000000000000000009bd8f365fe9e81826ff3069516f01fdc7f7c81cf0000000000000000000000000000000000000000000000000005f41a4b6b0a4100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12908,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002282bc8e090439a0195e0c862ae3ffc47bd2edd80000000000000000000000002282bc8e090439a0195e0c862ae3ffc47bd2edd8000000000000000000000000000000000000000000000000008220c6a2c11be600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12909,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a787a56c43847a3b5a0110d0b5e004e47f57b22e000000000000000000000000a787a56c43847a3b5a0110d0b5e004e47f57b22e00000000000000000000000000000000000000000000000002115892d54d00c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12910,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000019e2feb48d91ef9cddcc4efbad34f83d537e056b00000000000000000000000019e2feb48d91ef9cddcc4efbad34f83d537e056b0000000000000000000000000000000000000000000000000004758442a6703f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12911,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002921ad97c82508fc9d5ec82d588392c41e707aef0000000000000000000000002921ad97c82508fc9d5ec82d588392c41e707aef00000000000000000000000000000000000000000000000000087910629986b400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12912,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009c28be66c952d1cd635323d22bb0ce47aa5e5b4e0000000000000000000000009c28be66c952d1cd635323d22bb0ce47aa5e5b4e0000000000000000000000000000000000000000000000000007c0ccd18b8e8500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12913,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aba29c745654aacfe8ffbdc9d41b908d18818dc9000000000000000000000000aba29c745654aacfe8ffbdc9d41b908d18818dc90000000000000000000000000000000000000000000000000009449e9cce5d8a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12914,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007e32c81de998997fed27be29e5a09be5202007fa0000000000000000000000007e32c81de998997fed27be29e5a09be5202007fa000000000000000000000000000000000000000000000000003c6568f12e800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12915,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000777af6717e781652c513e6e3a90088d4e1d404f4000000000000000000000000777af6717e781652c513e6e3a90088d4e1d404f4000000000000000000000000000000000000000000000000003e0a8a66fedde000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12918,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000539b3f56d9e09e59d814ae8d89cd6a0376f1ee8d000000000000000000000000539b3f56d9e09e59d814ae8d89cd6a0376f1ee8d000000000000000000000000000000000000000000000000014f0b69a5d5efae00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x93e5b6e3508153f1b6f653574d3d0b61906d3c94a76423690020d306ce860960,2022-04-21 09:27:28.000 UTC,0,true -12920,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e7913d85f52cf4010b1439c13043918cbedc3fb6000000000000000000000000e7913d85f52cf4010b1439c13043918cbedc3fb600000000000000000000000000000000000000000000000000af4c851d66c30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12921,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004485524d6c604e5bac8b574c3a084da6d870bee90000000000000000000000004485524d6c604e5bac8b574c3a084da6d870bee9000000000000000000000000000000000000000000000000013fb438495583d700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12922,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006840046c485f25b355efbcdd68f12b9af94af5e80000000000000000000000006840046c485f25b355efbcdd68f12b9af94af5e80000000000000000000000000000000000000000000000000328761afeaaded700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12924,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009071d90ce852d0c5ab0a5fbdd5f79110246cfe8f0000000000000000000000009071d90ce852d0c5ab0a5fbdd5f79110246cfe8f00000000000000000000000000000000000000000000000000653d9290edc77a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12925,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d3efc714ec1828967d3d13e65a2709c1639d5110000000000000000000000003d3efc714ec1828967d3d13e65a2709c1639d511000000000000000000000000000000000000000000000000002b208e82668d9500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x971aca1eb95534c05ad2d19d1d1b3261445e1e271d42a888019e1672666569c8,2022-04-19 17:24:24.000 UTC,0,true -12926,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000000255441d1244e801c4728b87f942e8299ae416400000000000000000000000000255441d1244e801c4728b87f942e8299ae41640000000000000000000000000000000000000000000000000006aa4592d3879100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12931,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000092d9078f2d1e56d0027ebea225a132966ef199ca00000000000000000000000092d9078f2d1e56d0027ebea225a132966ef199ca0000000000000000000000000000000000000000000000000005dcaa8fe1200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12934,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000027ee65c004cbc638b558719ec0b5ca79b7f6570400000000000000000000000027ee65c004cbc638b558719ec0b5ca79b7f657040000000000000000000000000000000000000000000000000c0b749a9b91c0cf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12936,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bde9553f80906e869a07ef97e9e1bfce9990659a000000000000000000000000bde9553f80906e869a07ef97e9e1bfce9990659a00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12937,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000426033ec3f5be02d1804d7f13156079fe4e8f375000000000000000000000000426033ec3f5be02d1804d7f13156079fe4e8f375000000000000000000000000000000000000000000000000001dafb87e5ec1bc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12938,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000038631194260edb73c589184037a4a853487d72dd00000000000000000000000038631194260edb73c589184037a4a853487d72dd00000000000000000000000000000000000000000000000000054ec37a271a3a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12939,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005043af16d5d2079310a08fb28ed574fb7791465f0000000000000000000000005043af16d5d2079310a08fb28ed574fb7791465f00000000000000000000000000000000000000000000000000a8ac8d0e25108100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12940,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dee8450efd643f7ee615ec6ae8b91bac59c49f1d000000000000000000000000dee8450efd643f7ee615ec6ae8b91bac59c49f1d0000000000000000000000000000000000000000000000000000352bff8879c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12945,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003391b9df7de82946e87f1a0baa92bd962011245d0000000000000000000000003391b9df7de82946e87f1a0baa92bd962011245d00000000000000000000000000000000000000000000000001618fc911ff3d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12947,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b54cb94f64697f723bdd16886de9e13b2fd11831000000000000000000000000b54cb94f64697f723bdd16886de9e13b2fd118310000000000000000000000000000000000000000000000000019105228d7c27d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12949,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd46b0537b49ea212ec86308c20bd0070477d60e000000000000000000000000dd46b0537b49ea212ec86308c20bd0070477d60e00000000000000000000000000000000000000000000000000c2fa3d9bc3d16900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12950,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef20f2b7367028a1adf9d1d0bcb7f9cea6beb0c3000000000000000000000000ef20f2b7367028a1adf9d1d0bcb7f9cea6beb0c30000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12952,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000077cfb5f69dd4825c0ffd6fce079af786ac13a10800000000000000000000000077cfb5f69dd4825c0ffd6fce079af786ac13a1080000000000000000000000000000000000000000000000000058d15e1762800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12953,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007bfeeafd6bdb6a87e9c3d9454311964f4feeec450000000000000000000000007bfeeafd6bdb6a87e9c3d9454311964f4feeec450000000000000000000000000000000000000000000000000001e69beac04f4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12954,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007b22f4e0b10b2d3a09f8bddf02988d3ae34f82bf0000000000000000000000007b22f4e0b10b2d3a09f8bddf02988d3ae34f82bf0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12956,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dee8450efd643f7ee615ec6ae8b91bac59c49f1d000000000000000000000000dee8450efd643f7ee615ec6ae8b91bac59c49f1d000000000000000000000000000000000000000000000000000649efc657056400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12958,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f532929c0a50b84656394ff58e75c49a95270db0000000000000000000000003f532929c0a50b84656394ff58e75c49a95270db000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12959,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000ca4eb9db9d8bc0d7dae95467d51ae72445e0aab1000000000000000000000000000000000000000000000000827b47667778a720,,,1,true -12961,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000329934d67e38c93d2e86dff79826649e9bf6462a000000000000000000000000329934d67e38c93d2e86dff79826649e9bf6462a000000000000000000000000000000000000000000000000006681e11de380d700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12963,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000563ac66ba17d69ea73c0b531556c922c31699474000000000000000000000000563ac66ba17d69ea73c0b531556c922c31699474000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12965,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000286e7c578f188cccc123075f7045b183ce85bc05000000000000000000000000286e7c578f188cccc123075f7045b183ce85bc050000000000000000000000000000000000000000000000000061e1da0666727100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12967,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f532929c0a50b84656394ff58e75c49a95270db0000000000000000000000003f532929c0a50b84656394ff58e75c49a95270db000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12968,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5277f97e41f39b84b255db419bb2a27936da075000000000000000000000000e5277f97e41f39b84b255db419bb2a27936da075000000000000000000000000000000000000000000000000005b8d2e56074a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12969,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c38344d5aeb271938ee11dbb2488a89df4080db1000000000000000000000000c38344d5aeb271938ee11dbb2488a89df4080db10000000000000000000000000000000000000000000000000721f42f9297a84000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x65a1d69c4e12fc7f67ade6a51ebb5a0d3ae97e10bc3d6f29707208bd2818f081,2022-04-27 06:47:33.000 UTC,0,true -12971,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d385890bb9beae40d902a890ba04e8d1f87f10cd000000000000000000000000d385890bb9beae40d902a890ba04e8d1f87f10cd00000000000000000000000000000000000000000000000000ad128ddcce0da100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12972,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d4326b581615643d70a68f2d2ba0cfdf381c81f0000000000000000000000007d4326b581615643d70a68f2d2ba0cfdf381c81f00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12974,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006cd387adb134470953881c9a416806d636e7a0150000000000000000000000006cd387adb134470953881c9a416806d636e7a0150000000000000000000000000000000000000000000000000aa51f57014be30d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12975,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004c1ecdfae5975ad3c0f91049a7daa0bac20579400000000000000000000000004c1ecdfae5975ad3c0f91049a7daa0bac20579400000000000000000000000000000000000000000000000000432d1c04ec16a500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12976,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b7ce42bf09ad09f696889eb5ea5341946d8fb22f000000000000000000000000b7ce42bf09ad09f696889eb5ea5341946d8fb22f00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12977,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ed20ba69d7977d97a930634beb75424edcceb235000000000000000000000000ed20ba69d7977d97a930634beb75424edcceb23500000000000000000000000000000000000000000000000002c4c8640bd5f30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12978,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e153ba6e7c8d5ff6ce6d5968044ce72cd4ba38fe000000000000000000000000e153ba6e7c8d5ff6ce6d5968044ce72cd4ba38fe00000000000000000000000000000000000000000000000002c1a6acfd69632100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xefe34ced3e361a6bea117829b6dde6f242187114bfce7c061b7dc2b76642e5ed,2021-12-08 09:18:11.000 UTC,0,true -12979,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f84a3d0e725e2712f93e0db9560c603cc645451a000000000000000000000000f84a3d0e725e2712f93e0db9560c603cc645451a000000000000000000000000000000000000000000000000001d598832c7fac000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12981,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f6acaf70c70390dcaab3c5653eac3ac564f0a084000000000000000000000000f6acaf70c70390dcaab3c5653eac3ac564f0a08400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12982,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009fb9625e34b3bf2e87e0c45c892fa8299c46422a0000000000000000000000009fb9625e34b3bf2e87e0c45c892fa8299c46422a00000000000000000000000000000000000000000000000003ed6b00276f800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12984,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000333a9bcaa5b9e48d72f43032f99ed54aa572a60d000000000000000000000000333a9bcaa5b9e48d72f43032f99ed54aa572a60d00000000000000000000000000000000000000000000000002bc2042130e102600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xeee240a23618757e9f72e48161344dffea48949a43e2717e25630a80d2eb5483,2021-12-08 09:13:08.000 UTC,0,true -12987,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000ce1d028626c6a215a4e1619bbe695a564b674aa0000000000000000000000000ce1d028626c6a215a4e1619bbe695a564b674aa00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12988,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000008426ff787ecfecaa3754c2034f4c41c87c6ee5600000000000000000000000008426ff787ecfecaa3754c2034f4c41c87c6ee56000000000000000000000000000000000000000000000000001bc1d00fef278100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12989,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001c1a54bb8d43d4a3c9f7b034ad673f737b8471c50000000000000000000000001c1a54bb8d43d4a3c9f7b034ad673f737b8471c5000000000000000000000000000000000000000000000000008c1d9439e443d800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9bb8abe860524e9d795e9a793d42ecad9883578433fdcec06f6aa404af765577,2022-06-01 14:38:31.000 UTC,0,true -12992,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000047c5402a052957c9f0f126d956b2bccfb2a33a8400000000000000000000000047c5402a052957c9f0f126d956b2bccfb2a33a840000000000000000000000000000000000000000000000000000000001dfcacd00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -12993,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000025b2e51750f4dc6e3fdf0035eab833e50911509000000000000000000000000025b2e51750f4dc6e3fdf0035eab833e509115090000000000000000000000000000000000000000000000000070b3233a814e0400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x4f4b95b0977a89402ea0d02cfbb4589fe6bb95b40e9858cb7b1302e68c7d47a9,2021-12-11 19:19:55.000 UTC,0,true -12994,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003dde0fd04599c7c0e2a3b25ce6c0beb7804226e40000000000000000000000003dde0fd04599c7c0e2a3b25ce6c0beb7804226e400000000000000000000000000000000000000000000000006ec2af8301ba60300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x074758eed77fa384beb98231576b01fef563828d2f5dd997fd1b0204e3c85fe3,2022-05-09 01:39:54.000 UTC,0,true -12995,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c41bcb170d402c0eb10b29c9f77deeb697d65295000000000000000000000000c41bcb170d402c0eb10b29c9f77deeb697d6529500000000000000000000000000000000000000000000000002c1ded1cbb88c1c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12996,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004bb5287127973ea561b6e2ce37eae7e624597a370000000000000000000000004bb5287127973ea561b6e2ce37eae7e624597a37000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -12999,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e3e3320bd3f8c48b334724a037688d9df2e76820000000000000000000000008e3e3320bd3f8c48b334724a037688d9df2e76820000000000000000000000000000000000000000000000000045278bf972730000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13001,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e58ca5494079fb88dd5757af80960a912e753782000000000000000000000000e58ca5494079fb88dd5757af80960a912e753782000000000000000000000000000000000000000000000000007a823029eae10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13003,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000350a791bfc2c21f9ed5d10980dad2e2638ffa7f6000000000000000000000000df8979cce6f1534df0a042543a187aaafbdcb671000000000000000000000000df8979cce6f1534df0a042543a187aaafbdcb671000000000000000000000000000000000000000000000000667449c3b49b933400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13004,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000820eac4125bace760d0ed89f801887ac0470d1ae000000000000000000000000820eac4125bace760d0ed89f801887ac0470d1ae000000000000000000000000000000000000000000000000004527d391e0160000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13005,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000033742965cc48d996b5884dfa574904f35613b2f100000000000000000000000033742965cc48d996b5884dfa574904f35613b2f10000000000000000000000000000000000000000000000000004caa21536dce900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13006,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2ee68b520984c6144ef0ab128ab8e45afc21d8e000000000000000000000000a2ee68b520984c6144ef0ab128ab8e45afc21d8e00000000000000000000000000000000000000000000000000057be319977d2500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13009,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6d8d40e682dd3539a7a4f49f908476cc28516b2000000000000000000000000d6d8d40e682dd3539a7a4f49f908476cc28516b2000000000000000000000000000000000000000000000000001cbbea393d3e8900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13011,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dde9eff243e499ad9ba862f30d7ce395cf5fb246000000000000000000000000dde9eff243e499ad9ba862f30d7ce395cf5fb2460000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13012,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000092a686623d801fb043d19dddc0e034dad0958f8c00000000000000000000000092a686623d801fb043d19dddc0e034dad0958f8c0000000000000000000000000000000000000000000000000421727f5c881a8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13014,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc150be7d845838183728c8f578b8261044419b6000000000000000000000000bc150be7d845838183728c8f578b8261044419b60000000000000000000000000000000000000000000000000002cb8ed43e748000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13016,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006054c42b96ac2ddfadf3bad28263a6df9411cc190000000000000000000000006054c42b96ac2ddfadf3bad28263a6df9411cc19000000000000000000000000000000000000000000000000016168a1b60a190000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13019,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e392ec084684dcb90fe6912af470ac8b687287a0000000000000000000000004e392ec084684dcb90fe6912af470ac8b687287a000000000000000000000000000000000000000000000000004f6b9f0d6f92b100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13020,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b7d40515946223afb8e1b241813c36593a609b5c000000000000000000000000b7d40515946223afb8e1b241813c36593a609b5c000000000000000000000000000000000000000000000000002d7e50a571875300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13022,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000026ce053f2febc4c4c9aafcabfe0b9845e182229300000000000000000000000026ce053f2febc4c4c9aafcabfe0b9845e1822293000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13023,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea98b932441cd24f21cc7a633cdb6001208996b5000000000000000000000000ea98b932441cd24f21cc7a633cdb6001208996b5000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13024,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c50d3e6cc60a90ab04454efcff722fb4f03077d0000000000000000000000008c50d3e6cc60a90ab04454efcff722fb4f03077d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13025,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000bb33da2c8fca1a5d1f5d513a18fb66198759d220000000000000000000000000bb33da2c8fca1a5d1f5d513a18fb66198759d22000000000000000000000000000000000000000000000000000205d10c7cd42c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13026,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000065d6b31ec9413bf7918bda21ac7db401949fef4e00000000000000000000000065d6b31ec9413bf7918bda21ac7db401949fef4e000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13027,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e6fdf0c64c7f4536fc6776b80a895d770995d1ce000000000000000000000000e6fdf0c64c7f4536fc6776b80a895d770995d1ce000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13028,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008916a89d83d9477d774da628e3e7c0b5170c05030000000000000000000000008916a89d83d9477d774da628e3e7c0b5170c0503000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13029,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000023ef2693c7792e49ad2cdc5fe3fe910a17ff6c7d00000000000000000000000023ef2693c7792e49ad2cdc5fe3fe910a17ff6c7d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13030,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000073538c91eff3476c721439eed9c8b4fc239dab9d00000000000000000000000073538c91eff3476c721439eed9c8b4fc239dab9d0000000000000000000000000000000000000000000000000002733276cb110000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13031,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000081ba73b26a2d7b22407cd5933607571877d7eb4c00000000000000000000000081ba73b26a2d7b22407cd5933607571877d7eb4c0000000000000000000000000000000000000000000000000004660fd0333ad100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13033,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e00ee4f51fcca840afa8e68286127a2a189e8c3a000000000000000000000000e00ee4f51fcca840afa8e68286127a2a189e8c3a000000000000000000000000000000000000000000000000012dfb0cb5e8800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13034,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f0c6a569cf9d53dc2af4bab04a7c509afb45b515000000000000000000000000f0c6a569cf9d53dc2af4bab04a7c509afb45b515000000000000000000000000000000000000000000000000000446ae9c00cd3d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13035,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c3539ed2536160488f3b3b312a137f76550b25b0000000000000000000000000c3539ed2536160488f3b3b312a137f76550b25b00000000000000000000000000000000000000000000000000005c78ee270664900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13036,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000238edb437f8d98c48122964ec6d3ddcbdc3ec217000000000000000000000000238edb437f8d98c48122964ec6d3ddcbdc3ec217000000000000000000000000000000000000000000000000009b00c360c0750000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13037,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d951a35a7b36971e0de44c938c247fa11d053934000000000000000000000000d951a35a7b36971e0de44c938c247fa11d05393400000000000000000000000000000000000000000000000000907a66ef7ccfd700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13038,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e2186f759e919896daec9d2e72d4ccd60141aba0000000000000000000000000e2186f759e919896daec9d2e72d4ccd60141aba0000000000000000000000000000000000000000000000000005f4b5f261f83a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13039,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d5f1c2bf387894f4677e8a16b1d526614db4a08f000000000000000000000000d5f1c2bf387894f4677e8a16b1d526614db4a08f00000000000000000000000000000000000000000000000000d529ae9e86000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13041,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d5f1c2bf387894f4677e8a16b1d526614db4a08f000000000000000000000000d5f1c2bf387894f4677e8a16b1d526614db4a08f000000000000000000000000000000000000000000000000001e4e895b60c36c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13044,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006cabe296e0cd1e0a12105a8c063a51d54de65cdf0000000000000000000000006cabe296e0cd1e0a12105a8c063a51d54de65cdf000000000000000000000000000000000000000000000000007042553626f42800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13046,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004f47c2887a8f27aeadf4e15e418f311355510bf00000000000000000000000004f47c2887a8f27aeadf4e15e418f311355510bf000000000000000000000000000000000000000000000000005c4af283e97c4800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13047,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001c5d969acf5234629fdd4543ef6c43ed557de9830000000000000000000000001c5d969acf5234629fdd4543ef6c43ed557de98300000000000000000000000000000000000000000000000000421499f8d2800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13049,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f91e9f141e252845cfb87dfc98a99dcdd85774f0000000000000000000000003f91e9f141e252845cfb87dfc98a99dcdd85774f0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13050,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000133e6693cc630f10cf35c82550b1a11fc450b102000000000000000000000000133e6693cc630f10cf35c82550b1a11fc450b102000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13051,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1db96f644be5f64fc090188046e213bb03c8828000000000000000000000000c1db96f644be5f64fc090188046e213bb03c88280000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13052,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006192898cb6e6a6d3c37b0081803a3ede74cf49220000000000000000000000006192898cb6e6a6d3c37b0081803a3ede74cf49220000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13053,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e7bfe9b78d32469796deb029b2bea3d68773aec4000000000000000000000000e7bfe9b78d32469796deb029b2bea3d68773aec4000000000000000000000000000000000000000000000000058d15e17628000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7f9aaea2c628d508f3a1e63c13b44de19f9c50c1dce090925246f29a5cb58325,2021-11-30 10:45:40.000 UTC,0,true -13054,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004344ffd6c8d3188f08671a2ea7eb257afb3137f90000000000000000000000004344ffd6c8d3188f08671a2ea7eb257afb3137f900000000000000000000000000000000000000000000000000036aeabb09bb1200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13055,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b63cd166b1108c7a4ed72d44c4676d46f088e079000000000000000000000000b63cd166b1108c7a4ed72d44c4676d46f088e079000000000000000000000000000000000000000000000000001f7b2e8cfc77db00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13056,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000084433ec26d444159c8710858d4eddec0293874ec00000000000000000000000084433ec26d444159c8710858d4eddec0293874ec0000000000000000000000000000000000000000000000000003bbcdfc6248a600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13057,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2d613d71d32237d9b6d1b979a3efcfd1519b931000000000000000000000000a2d613d71d32237d9b6d1b979a3efcfd1519b93100000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13058,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000646bf56e1d87b353611f456826977a8be2e04f6a000000000000000000000000646bf56e1d87b353611f456826977a8be2e04f6a00000000000000000000000000000000000000000000000000a797e04db537bb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13059,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008497daabaafcfb72389a2934e7400d4a8091981a0000000000000000000000008497daabaafcfb72389a2934e7400d4a8091981a0000000000000000000000000000000000000000000000000002602935d6a45b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13060,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001139db00d2815f99df958a7fb3a101d7c4bd39280000000000000000000000001139db00d2815f99df958a7fb3a101d7c4bd392800000000000000000000000000000000000000000000000000014fdc3bbb06e000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13063,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de98f62c8773ed56c177cc5ecc44f152f040bf9b000000000000000000000000de98f62c8773ed56c177cc5ecc44f152f040bf9b000000000000000000000000000000000000000000000000001ed060be777fc400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13064,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000093e0e4c16722a2330c41ed04c1a68490dc730f7500000000000000000000000093e0e4c16722a2330c41ed04c1a68490dc730f7500000000000000000000000000000000000000000000000001600811e33c588000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13065,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f35f9e005d2dec0506bf41d618eeeca38c7b1143000000000000000000000000f35f9e005d2dec0506bf41d618eeeca38c7b11430000000000000000000000000000000000000000000000000041b9a6e858400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13068,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ee76180901e2b0edfb0d4b6cfa89b93969c7ad70000000000000000000000005ee76180901e2b0edfb0d4b6cfa89b93969c7ad7000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13071,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000899174e2b29fc08aced0d78c87a42b7b678881b9000000000000000000000000899174e2b29fc08aced0d78c87a42b7b678881b9000000000000000000000000000000000000000000000000000ce6293046a69900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13073,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae4b590b3d79658cd8b304b006011036c18e2f7c000000000000000000000000ae4b590b3d79658cd8b304b006011036c18e2f7c0000000000000000000000000000000000000000000000000071cf06ec4da6be00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x48bec2f0a3c1ba8a94f1d75062ca188db28e6f2deceb3fb7a7325b489cb8ddeb,2022-08-31 20:56:33.000 UTC,0,true -13075,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1e95e8fe861230ed8d81235e58e056bde90d18d000000000000000000000000c1e95e8fe861230ed8d81235e58e056bde90d18d000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13076,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ad268606cec97ef0fa77f74ddbebdcebbbd8d7c4000000000000000000000000ad268606cec97ef0fa77f74ddbebdcebbbd8d7c4000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13078,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa48407b02024584665e6e1309bf7bc6d71be3e2000000000000000000000000aa48407b02024584665e6e1309bf7bc6d71be3e2000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13079,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a50f0dec48d2554d7754c62c2c961198264221b0000000000000000000000002a50f0dec48d2554d7754c62c2c961198264221b00000000000000000000000000000000000000000000000000083de1c644834000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13080,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000808a5e3fbee7d2c068140270e4ecb30795b3e282000000000000000000000000808a5e3fbee7d2c068140270e4ecb30795b3e2820000000000000000000000000000000000000000000000000000e0fde331884800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13082,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a318ac48a52e44eea6192e3d85dfb832dc3bb9f0000000000000000000000000a318ac48a52e44eea6192e3d85dfb832dc3bb9f00000000000000000000000000000000000000000000000000043bb94c909a8d800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13083,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045067be6800ec34b13f2d595d6b1f4efbacd717600000000000000000000000045067be6800ec34b13f2d595d6b1f4efbacd717600000000000000000000000000000000000000000000000000aa72686399513d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13085,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002451b6106d6c1d6ec53a09bab352c9574c82f3210000000000000000000000002451b6106d6c1d6ec53a09bab352c9574c82f321000000000000000000000000000000000000000000000000009a00ea3ae76c7700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13086,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ddedd14f66904678b9354af59c6d32639bc45b80000000000000000000000005ddedd14f66904678b9354af59c6d32639bc45b800000000000000000000000000000000000000000000000001f161421c8e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13089,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd533307557ac9e1b9ee7fce0256ae909d6aedc8000000000000000000000000dd533307557ac9e1b9ee7fce0256ae909d6aedc800000000000000000000000000000000000000000000000000abe94d2914859f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13091,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a4e3642e611553644e6fe0c47f6ed1d8eed66930000000000000000000000000a4e3642e611553644e6fe0c47f6ed1d8eed6693000000000000000000000000000000000000000000000000000254db1c224400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13093,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c522fe59a742562da44277d50163488b612458f0000000000000000000000002c522fe59a742562da44277d50163488b612458f00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13094,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000abc0ce4652c76a36a6d79a21a43ab89610d3276f000000000000000000000000abc0ce4652c76a36a6d79a21a43ab89610d3276f00000000000000000000000000000000000000000000000000ab634420f5bb2500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13095,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007564a1dff93744ba3f1bfb954fa17d9c81d4b3f30000000000000000000000007564a1dff93744ba3f1bfb954fa17d9c81d4b3f3000000000000000000000000000000000000000000000000006423dea00df34500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xb25d1b997cf3cd6e398bce504ef354e9870e3765aa54df1d9de1f2a42cafd7f9,2022-03-20 11:48:25.000 UTC,0,true -13096,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c522fe59a742562da44277d50163488b612458f0000000000000000000000002c522fe59a742562da44277d50163488b612458f00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13097,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c522fe59a742562da44277d50163488b612458f0000000000000000000000002c522fe59a742562da44277d50163488b612458f00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13098,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000764ef8aba8e67af506fa65bad1342bf34571ec3e000000000000000000000000764ef8aba8e67af506fa65bad1342bf34571ec3e0000000000000000000000000000000000000000000000000002df48f6d5b62f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13101,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000779e42b6eb275e5f396bb4f47f5dec036281e937000000000000000000000000779e42b6eb275e5f396bb4f47f5dec036281e937000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13105,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7a19118187f51f418d5112e72181ae137fa9997000000000000000000000000c7a19118187f51f418d5112e72181ae137fa9997000000000000000000000000000000000000000000000000011493432891830800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13109,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000067e77561035265311e6895063926b2f2cec127a200000000000000000000000067e77561035265311e6895063926b2f2cec127a2000000000000000000000000000000000000000000000000042809aa7af3660000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13116,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d38bebf9b178f9c52676ff5f8a44eeecf5f9f1ba000000000000000000000000d38bebf9b178f9c52676ff5f8a44eeecf5f9f1ba0000000000000000000000000000000000000000000000000046cce25e7ff95a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13117,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000495e827e540ca60c93bbac919b4627554211f33f000000000000000000000000495e827e540ca60c93bbac919b4627554211f33f00000000000000000000000000000000000000000000000000d529ae9e86000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13118,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a20ae6f0e88e6cb7c260d2513c0e337a08f6c52c000000000000000000000000a20ae6f0e88e6cb7c260d2513c0e337a08f6c52c000000000000000000000000000000000000000000000000004486a2393e9d4400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13119,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bffb5c7f47d801ed932539f02f99ffdb9f64ca66000000000000000000000000bffb5c7f47d801ed932539f02f99ffdb9f64ca66000000000000000000000000000000000000000000000000001fc27d2d23028000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13120,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fbe6790b2221c6bb41af88f398254b9662c01a38000000000000000000000000fbe6790b2221c6bb41af88f398254b9662c01a380000000000000000000000000000000000000000000000000069239bf33e4e2d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13121,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df6056a4673eb21fd6c957d84eb390b2a3fc9a6a000000000000000000000000df6056a4673eb21fd6c957d84eb390b2a3fc9a6a000000000000000000000000000000000000000000000000002cc8fdaba2cd0b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13123,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d72708e95577f80056fd6a44ec30d644b5a86486000000000000000000000000d72708e95577f80056fd6a44ec30d644b5a86486000000000000000000000000000000000000000000000000112919ff6fb19bb800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xa1a5adea3018cdf2198f376d1df8bfcfe84efe35d94e3f6c1d550b2e2cc7a62a,2021-12-12 20:15:36.000 UTC,0,true -13124,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009841d9e166ed96aed9597f879835c6cc15ab46820000000000000000000000009841d9e166ed96aed9597f879835c6cc15ab468200000000000000000000000000000000000000000000000000087502535fa9b800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13125,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007da37fd05f8a38886fd3d5a2f60474e4d179783e0000000000000000000000007da37fd05f8a38886fd3d5a2f60474e4d179783e00000000000000000000000000000000000000000000000000d96b3c50869d1f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13132,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000350a4b5ac6216902e095ef47f3bd5fdc9d387e23000000000000000000000000350a4b5ac6216902e095ef47f3bd5fdc9d387e23000000000000000000000000000000000000000000000000005bea2e85d978aa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13133,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d183e645c5f1d36996d03ff730d45cf4bb57ea34000000000000000000000000d183e645c5f1d36996d03ff730d45cf4bb57ea3400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13135,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e5745f3136e1023b7db402f2f20d59ece802f4a0000000000000000000000002e5745f3136e1023b7db402f2f20d59ece802f4a000000000000000000000000000000000000000000000000008cb11a91ec792800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13139,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000af490b4a10b69d59bad2c95e9bd82223e2fb3386000000000000000000000000af490b4a10b69d59bad2c95e9bd82223e2fb3386000000000000000000000000000000000000000000000000024943f334bf45eb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13141,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef95f81a30b69d18fbc6e44fb33aa37135d0d1d1000000000000000000000000ef95f81a30b69d18fbc6e44fb33aa37135d0d1d1000000000000000000000000000000000000000000000000001739646eabace300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13143,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d17fc86bc9d50872df4d2b10d8855e1965a6baca000000000000000000000000d17fc86bc9d50872df4d2b10d8855e1965a6baca000000000000000000000000000000000000000000000000005c5edcbc29000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13150,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001455cf52f007f7e474d3cb7525f4da0ef5313dde0000000000000000000000001455cf52f007f7e474d3cb7525f4da0ef5313dde00000000000000000000000000000000000000000000000000885c14487650c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13151,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000052a5f7004723e4a6481ef9884ca1120b9c11fcc300000000000000000000000052a5f7004723e4a6481ef9884ca1120b9c11fcc30000000000000000000000000000000000000000000000000166a19531131f6d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13152,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000013f5e3d06576a8aa0b9f72f1b6bf772f1addc80d00000000000000000000000013f5e3d06576a8aa0b9f72f1b6bf772f1addc80d000000000000000000000000000000000000000000000000a9cdbd11830db89b00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13153,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000025366b53f3976bd6f214ece12c2e8b2ad9e392fd00000000000000000000000025366b53f3976bd6f214ece12c2e8b2ad9e392fd0000000000000000000000000000000000000000000000000036eec92749427e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13156,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000013f5e3d06576a8aa0b9f72f1b6bf772f1addc80d00000000000000000000000013f5e3d06576a8aa0b9f72f1b6bf772f1addc80d000000000000000000000000000000000000000000000000000b2e8714f651a800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13158,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ae5edbdd1342ce6acaa48342792315d52e7b0670000000000000000000000003ae5edbdd1342ce6acaa48342792315d52e7b06700000000000000000000000000000000000000000000000003850aba094ccdcd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x6a5b8005e342a6a2bca835dbf3808cea6159f0696381359fa3b322ca5c21c7c9,2022-06-28 22:22:51.000 UTC,0,true -13160,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000010256d931dd2bf74826cfd90b665c836381086be00000000000000000000000010256d931dd2bf74826cfd90b665c836381086be000000000000000000000000000000000000000000000000006138b56748b18b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13161,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000429a748be0acfcf0ddb7d1e7ec4917a4f04f6bbd000000000000000000000000429a748be0acfcf0ddb7d1e7ec4917a4f04f6bbd0000000000000000000000000000000000000000000000000070858df6901aa900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13163,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000016c4e68b5ea69af57085b5152065100ba24ad71f00000000000000000000000016c4e68b5ea69af57085b5152065100ba24ad71f0000000000000000000000000000000000000000000000000074ab9ade6b130300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x54af3d012d8eb66f5fecb55bc7a9386fe2ff26edce8fcb0e45f9fe66e261b3db,2022-07-20 09:10:13.000 UTC,0,true -13165,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d815e9109f8d9a9f5a21f47351df83134571eb56000000000000000000000000d815e9109f8d9a9f5a21f47351df83134571eb560000000000000000000000000000000000000000000000000061a761a2d89aaa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13166,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006fdf6b570a15f4a79f44501a6b56bd2b47ff46100000000000000000000000006fdf6b570a15f4a79f44501a6b56bd2b47ff461000000000000000000000000000000000000000000000000000465d6d4a1c83e300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13167,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055cc224cc1e686304d29ec32fd963c68ea83b17c00000000000000000000000055cc224cc1e686304d29ec32fd963c68ea83b17c00000000000000000000000000000000000000000000000003d2cec7d6b8375300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13168,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ddff29c54046bbde55702342a319be7fdb1c5200000000000000000000000002ddff29c54046bbde55702342a319be7fdb1c5200000000000000000000000000000000000000000000000000038b1b12319870000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13171,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aed5ef0aa3d1461946257d9198475a8aced910d0000000000000000000000000aed5ef0aa3d1461946257d9198475a8aced910d000000000000000000000000000000000000000000000000001393e20f3158b9a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13176,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008bbd6aec68aef08b2d4cdd93b2cffa48b6e103520000000000000000000000008bbd6aec68aef08b2d4cdd93b2cffa48b6e1035200000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13181,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000035fbea3a80400948e97660cdcc9f82a3f79015a900000000000000000000000035fbea3a80400948e97660cdcc9f82a3f79015a9000000000000000000000000000000000000000000000000001fdb5586bf73df00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13183,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d4d3fae4d0282fd8a558b5f42ba700974cbfd1a0000000000000000000000005d4d3fae4d0282fd8a558b5f42ba700974cbfd1a0000000000000000000000000000000000000000000000000429d069189e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13190,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e696871ba5afd8d467755bf698f102cfd08fe777000000000000000000000000e696871ba5afd8d467755bf698f102cfd08fe7770000000000000000000000000000000000000000000000000011d0069b6dd5d300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13194,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006766cf760835b6617c77ce6c6caffc5f8af0b1860000000000000000000000006766cf760835b6617c77ce6c6caffc5f8af0b186000000000000000000000000000000000000000000000000002c3fce602f24b800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13195,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a40071a4ae125f72522c266b3bf0c300d9ed7aad000000000000000000000000a40071a4ae125f72522c266b3bf0c300d9ed7aad00000000000000000000000000000000000000000000000000417845cfd029a500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13198,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2150ec582cb139ef273dc4b62c6a450d0fbd2c6000000000000000000000000d2150ec582cb139ef273dc4b62c6a450d0fbd2c6000000000000000000000000000000000000000000000000006843c0a9e2a2ac00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13200,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000facb1846d71b0f8d6e0d142c06380e60d8892d4b000000000000000000000000000000000000000000000024fa1eb1f2433d2ebf,0x2344c02d2893e59b4c8ed76e86c48adbba6412dcb699c08766e776dfa254be4f,2022-03-06 05:00:30.000 UTC,0,true -13201,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a5a80e7225c7bf9d3e7002efd6a16398e94d52ed000000000000000000000000a5a80e7225c7bf9d3e7002efd6a16398e94d52ed0000000000000000000000000000000000000000000000000dd279ca89c3169e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13204,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004176a257f28ea2ca86c92285b05c9fdde20b59c20000000000000000000000004176a257f28ea2ca86c92285b05c9fdde20b59c20000000000000000000000000000000000000000000000000001526a44e5063900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13206,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a4354a30064b53382f6653346bd86240d7251555000000000000000000000000a4354a30064b53382f6653346bd86240d72515550000000000000000000000000000000000000000000000000000f9c1fcd0a58300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13207,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf84a80e155c35d0bd092b88c4453091447602c6000000000000000000000000cf84a80e155c35d0bd092b88c4453091447602c6000000000000000000000000000000000000000000000000000250d5e5aac18a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13208,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000001045e946c5469be8763e4127e27dcd1d4778ec600000000000000000000000001045e946c5469be8763e4127e27dcd1d4778ec6000000000000000000000000000000000000000000000000003165699e6ffe9b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13209,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000295dbd87c78019fa347ee6a65f2b98b2443550f0000000000000000000000000295dbd87c78019fa347ee6a65f2b98b2443550f0000000000000000000000000000000000000000000000000002b72fb9447f9b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13210,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001abe68d9bfc860852a7bb3a5bb67bcf2a248332c0000000000000000000000001abe68d9bfc860852a7bb3a5bb67bcf2a248332c00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13212,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006b7c8205c3975497aa9dd464277b94fe33ef26860000000000000000000000006b7c8205c3975497aa9dd464277b94fe33ef26860000000000000000000000000000000000000000000000000022366f192fe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13215,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006cc150449d10afbc5d2f4b9041afcc8fbebeadf00000000000000000000000006cc150449d10afbc5d2f4b9041afcc8fbebeadf00000000000000000000000000000000000000000000000002a7094858647f89600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x4dfd6c05d4387489817c724bf0d80c74374ed173cd8d8e39476c45c9ce84d527,2021-12-11 04:01:30.000 UTC,0,true -13217,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f184492b79f83224d42c29572fb4655d945861e8000000000000000000000000f184492b79f83224d42c29572fb4655d945861e800000000000000000000000000000000000000000000000000d5924624ac300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13219,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004694725ca38a50fa08be9852edbaa9c7663f254e0000000000000000000000004694725ca38a50fa08be9852edbaa9c7663f254e000000000000000000000000000000000000000000000000001e5bbfda61238000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13220,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008be55503a932709606c4e8ee242533a6b50894f50000000000000000000000008be55503a932709606c4e8ee242533a6b50894f50000000000000000000000000000000000000000000000000190f7bcee8179a200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13221,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ee56188250e9ca6c359c7f636077c699dfc6caa0000000000000000000000003ee56188250e9ca6c359c7f636077c699dfc6caa000000000000000000000000000000000000000000000000000002ba7e218aa000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13222,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000940214134c5e8d81dbd5e9015908c697dab5e0dd000000000000000000000000940214134c5e8d81dbd5e9015908c697dab5e0dd00000000000000000000000000000000000000000000000002ea11e32ad5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13224,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000be2849c3a4380af6735bfde32c940554feaa73d40000000000000000000000000000000000000000000000010f4c26725125c637,0xef529bf567756199e8b079dfa523458af5a6e82212fdb13f36c551ffa6bd0168,2022-03-05 13:04:48.000 UTC,0,true -13225,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000940214134c5e8d81dbd5e9015908c697dab5e0dd000000000000000000000000940214134c5e8d81dbd5e9015908c697dab5e0dd000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13226,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000a0ccc8e62a6b4b689a9031d27ab73157ce851aa8000000000000000000000000a0ccc8e62a6b4b689a9031d27ab73157ce851aa80000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13231,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fa2cc694b53d6e35d2ac2306ac9a0eb1af546ae0000000000000000000000000fa2cc694b53d6e35d2ac2306ac9a0eb1af546ae00000000000000000000000000000000000000000000000000023e1e5803b400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13232,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000db743a2f9f47c615bfae18ddc5a51c59a4a70eef000000000000000000000000db743a2f9f47c615bfae18ddc5a51c59a4a70eef00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13233,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000095078871e27f88b19ee4bfbeb2de5a3e1a0bb19900000000000000000000000095078871e27f88b19ee4bfbeb2de5a3e1a0bb19900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13234,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e71bf9d0e63fd3b82c96ed8bfdce4efff53bfdb7000000000000000000000000e71bf9d0e63fd3b82c96ed8bfdce4efff53bfdb7000000000000000000000000000000000000000000000000001cc76f42fbe4c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13235,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004900c75345d4e38a47a4b985bdc39f8b3ce919df0000000000000000000000004900c75345d4e38a47a4b985bdc39f8b3ce919df0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13236,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004b2d18056015fa4d08b8519e201ce741f804ea090000000000000000000000004b2d18056015fa4d08b8519e201ce741f804ea09000000000000000000000000000000000000000000000000008221f07e78fbeb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7e3f0c00fc0e50f9c6d9ffe7c9ee40644fae66b2fd54673221ffaa25f49c9eb6,2022-03-15 05:19:45.000 UTC,0,true -13237,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000891d9211ee72c5c7e188ab5ac9017c3904c54eef000000000000000000000000891d9211ee72c5c7e188ab5ac9017c3904c54eef0000000000000000000000000000000000000000000000000016b2684bf7367000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13238,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0ab05f8beba695ea4b724c3a1dc3a290f81a85d000000000000000000000000b0ab05f8beba695ea4b724c3a1dc3a290f81a85d0000000000000000000000000000000000000000000000000c7d713b49da000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13241,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59900000000000000000000000068f180fcce6836688e9084f035309e29bf0a2095000000000000000000000000c3e5789beec7f018cb983db2a673d603c7168f54000000000000000000000000c3e5789beec7f018cb983db2a673d603c7168f54000000000000000000000000000000000000000000000000000000000009909c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x28cf12971ccaa5515d377eb6a34e08a10038ccab3f60fd1b953cd77a6d9fefb2,2022-02-17 09:06:35.000 UTC,0,true -13245,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007745748f6361a2c3fd37022545e0a484e54c73600000000000000000000000007745748f6361a2c3fd37022545e0a484e54c7360000000000000000000000000000000000000000000000000007c58508723800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x01c00ccd10b24b0ddd804d1fe76962122e4a88cac10b0be7f7021e36d5e2904c,2022-02-05 08:00:59.000 UTC,0,true -13246,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001032b93af6dd3d287193bdac7e3e4c70e24c84be0000000000000000000000001032b93af6dd3d287193bdac7e3e4c70e24c84be00000000000000000000000000000000000000000000000000013a5c11ea094100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13250,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c179bea549dcac9a6313b2379a4290a8ee281d09000000000000000000000000c179bea549dcac9a6313b2379a4290a8ee281d09000000000000000000000000000000000000000000000000009fdf42f6e4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13251,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fe90f17cc6428a5d2d940235512472c94c5a5a9d000000000000000000000000fe90f17cc6428a5d2d940235512472c94c5a5a9d0000000000000000000000000000000000000000000000000000a43efab541bc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13252,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d1d093aae2604b2ce57acd3b7355ffac9f081e00000000000000000000000002d1d093aae2604b2ce57acd3b7355ffac9f081e0000000000000000000000000000000000000000000000000000008c9b1046f2000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13255,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000040d8a1d1603d47ff2f3a4b18ff4bbe4b0ad2e7eb00000000000000000000000040d8a1d1603d47ff2f3a4b18ff4bbe4b0ad2e7eb0000000000000000000000000000000000000000000000000000bdf55592d9e500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13256,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078f333e5cd98d0eec8257d442151429f013aaa0700000000000000000000000078f333e5cd98d0eec8257d442151429f013aaa070000000000000000000000000000000000000000000000000001d4910d26b84600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13257,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000066da918f292d553ed698271e49641d6b1db75b9300000000000000000000000066da918f292d553ed698271e49641d6b1db75b9300000000000000000000000000000000000000000000000000012285861e7c9c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13259,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a0e61e950e8415fa5f70d8ab2c26654cda80bd30000000000000000000000000a0e61e950e8415fa5f70d8ab2c26654cda80bd30000000000000000000000000000000000000000000000000000147d07f451c0100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13260,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b7c2831a3a8d424e8b66f3fbc49d5a68f1a5d724000000000000000000000000b7c2831a3a8d424e8b66f3fbc49d5a68f1a5d724000000000000000000000000000000000000000000000000000035d7bf41739800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13267,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000659ba0b652fb66bb6c1261f5d0aeaeb30fcfec35000000000000000000000000659ba0b652fb66bb6c1261f5d0aeaeb30fcfec35000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13268,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004103d6215ed19eb868a16eaff7baabd82dbb9ace0000000000000000000000004103d6215ed19eb868a16eaff7baabd82dbb9ace00000000000000000000000000000000000000000000000006ecb7c503d4cb0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13269,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d1d2db319ac20113dc1e816c62b38fdb57b72f80000000000000000000000005d1d2db319ac20113dc1e816c62b38fdb57b72f800000000000000000000000000000000000000000000000000018ea8d93cc8c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13271,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e595b6bb4e3bf27ebea22c3c52133126556ad17a000000000000000000000000e595b6bb4e3bf27ebea22c3c52133126556ad17a00000000000000000000000000000000000000000000000000d05f1709d5a57000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13272,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000684fb5d8b3611469e72bdf1282860b252e51c1f7000000000000000000000000684fb5d8b3611469e72bdf1282860b252e51c1f700000000000000000000000000000000000000000000000000058453f03244dd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13273,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d0dd373463e787112850e00af51125ec418b4af0000000000000000000000000d0dd373463e787112850e00af51125ec418b4af000000000000000000000000000000000000000000000000000502d630bd9fe800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13275,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a7de19aa01cec13a7b3b930d068c03f6ee83ac90000000000000000000000003a7de19aa01cec13a7b3b930d068c03f6ee83ac900000000000000000000000000000000000000000000000000003da0af5fc77600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13277,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005faa22b10b055441fdc0fe929d0b3de316a15c1e0000000000000000000000005faa22b10b055441fdc0fe929d0b3de316a15c1e000000000000000000000000000000000000000000000000000000a0fcb6cec800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13278,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000605e552947868d1ffa35188308153da83978d4c9000000000000000000000000605e552947868d1ffa35188308153da83978d4c900000000000000000000000000000000000000000000000000019b396be7c25400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13279,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000088eeb79b0cce7000142bbb474562663b4ab623db00000000000000000000000088eeb79b0cce7000142bbb474562663b4ab623db0000000000000000000000000000000000000000000000003782dace9d9007af00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xf0735a6bd45ce5faad47589ba49edf81989bca306a7a803775c08880a99ddf30,2022-03-12 11:19:28.000 UTC,0,true -13280,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000efbd2c4355ca73a236062d2650e503ba0f443d5f000000000000000000000000efbd2c4355ca73a236062d2650e503ba0f443d5f000000000000000000000000000000000000000000000000006f01b697f0c1c800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13281,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a71d1e79402ef838c626b4ae2d050c356448aa9d000000000000000000000000a71d1e79402ef838c626b4ae2d050c356448aa9d000000000000000000000000000000000000000000000000003c150a981ee5e300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13283,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8961caf32692fe14b4b2d0fb89aa7675910ccd4000000000000000000000000b8961caf32692fe14b4b2d0fb89aa7675910ccd4000000000000000000000000000000000000000000000000005e0c51f2c7f9cd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13285,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf09dae602adae0c48de9ef743060696132f6a92000000000000000000000000bf09dae602adae0c48de9ef743060696132f6a92000000000000000000000000000000000000000000000000015181ff25a9800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13290,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006bb550d3cfdb13d5feec42ed3d20e0b46e1994400000000000000000000000006bb550d3cfdb13d5feec42ed3d20e0b46e199440000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x16921de3849672735dcd47b62934718baa593eddc7eb3b421e998fcca7cb8148,2021-12-22 17:00:50.000 UTC,0,true -13291,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006bb550d3cfdb13d5feec42ed3d20e0b46e1994400000000000000000000000006bb550d3cfdb13d5feec42ed3d20e0b46e199440000000000000000000000000000000000000000000000000013fbe85edc9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x712327294533d025b3447e6528aee85388965abf5fc4c5957245599d06ddbf19,2021-12-22 16:57:35.000 UTC,0,true -13292,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000007a64826e5798109d75b519010bcc833ee80d99d00000000000000000000000007a64826e5798109d75b519010bcc833ee80d99d0000000000000000000000000000000000000000000000000001a7a3204aee0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13295,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000088ec95ad2fd42866af4e2e5cc14a80f5ba2d83c200000000000000000000000088ec95ad2fd42866af4e2e5cc14a80f5ba2d83c2000000000000000000000000000000000000000000000000015492d1e7d5ed4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13298,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f9ca61b2c3938d3c5ec8fa669622240a7a0cb3160000000000000000000000000000000000000000000000070c1cc73b00c80000,0xc38cc1108ec566b0b0c331c890b3d0fae24b384ff76a38f2df2c71a48d8527f1,2021-11-29 01:01:56.000 UTC,0,true -13301,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007fc961737ce37fcb682935ccff859abdf009505c0000000000000000000000007fc961737ce37fcb682935ccff859abdf009505c00000000000000000000000000000000000000000000000000014f6bb3ff059700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13303,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000b35a8ef31e9f8c2002f5925c6e978e7570bf2d92000000000000000000000000b35a8ef31e9f8c2002f5925c6e978e7570bf2d9200000000000000000000000000000000000000000000000000000000076a3c9100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13304,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de1d2cf646bfb8f3148364b9419cefc0f376226a000000000000000000000000de1d2cf646bfb8f3148364b9419cefc0f376226a0000000000000000000000000000000000000000000000000001afd133fdb00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13305,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c5b4c2a4d2d0706b61103769faaaf530d57de124000000000000000000000000c5b4c2a4d2d0706b61103769faaaf530d57de12400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13307,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000f844c1229095b11c191adf0c545f63a320576d90000000000000000000000000f844c1229095b11c191adf0c545f63a320576d9000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13308,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de54074b547f325b9ea169273ade267192ad88fb000000000000000000000000de54074b547f325b9ea169273ade267192ad88fb00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13311,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a8515527652ff795574cb9dc3f506ba336d261d2000000000000000000000000a8515527652ff795574cb9dc3f506ba336d261d200000000000000000000000000000000000000000000000000abb1a0c9385b6f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13312,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000982a1fde980e291e921fad931f2ae73d33d246ae000000000000000000000000982a1fde980e291e921fad931f2ae73d33d246ae00000000000000000000000000000000000000000000000000e7a3620b7690ec00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7da93384f145c60be24459761d54b6cf4769b00e88118685ad56f164b45012a6,2022-05-06 09:44:24.000 UTC,0,true -13313,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8b5705547cdd26b9095f04bc431e1e8893e068c000000000000000000000000e8b5705547cdd26b9095f04bc431e1e8893e068c00000000000000000000000000000000000000000000000000abaa0dc6acfacc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13314,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e585b5499586d7dd17f410367a8d17e301dee7ee000000000000000000000000e585b5499586d7dd17f410367a8d17e301dee7ee00000000000000000000000000000000000000000000000000ab3c7440e1b6d900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13315,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c07dfc765102bf07b6ade961b47f6ac0cd8461b0000000000000000000000003c07dfc765102bf07b6ade961b47f6ac0cd8461b000000000000000000000000000000000000000000000000002aa1efb94e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13316,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e449afed04b9609e26609f5126b740f9edee5f00000000000000000000000000e449afed04b9609e26609f5126b740f9edee5f000000000000000000000000000000000000000000000000000aaf5e80a96f90100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13317,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de5e235808e2a1b3dd7b9e7c86383f48eda706e1000000000000000000000000de5e235808e2a1b3dd7b9e7c86383f48eda706e100000000000000000000000000000000000000000000000000abc38b40eb68d300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13318,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f0229b91244e37161c7974acd35e880ac6323060000000000000000000000002f0229b91244e37161c7974acd35e880ac63230600000000000000000000000000000000000000000000000000ab49ad6dfe92b700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13319,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000648257704c8cc4d76c8bfeb1a900b3683368357a000000000000000000000000648257704c8cc4d76c8bfeb1a900b3683368357a00000000000000000000000000000000000000000000000000aa3520ba15ee7100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13321,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b768b2927175409da5254bf4187f77cba72ecec1000000000000000000000000b768b2927175409da5254bf4187f77cba72ecec10000000000000000000000000000000000000000000000000321b3278859810d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x986a2c16f6b8ccba37cdf8f84e5cac2b2c8c8a4244214ac6ff9448035eac59a0,2022-03-30 13:51:07.000 UTC,0,true -13323,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000091b4210b7a1cbc503b192a130b10dbe8c4929c7600000000000000000000000091b4210b7a1cbc503b192a130b10dbe8c4929c7600000000000000000000000000000000000000000000000000aa900c7c62133400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13326,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000add8b3a8b51d978b8266326f3b4904e132668403000000000000000000000000add8b3a8b51d978b8266326f3b4904e132668403000000000000000000000000000000000000000000000000000939131c88457f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13327,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009c5cc0954a7de04d108b4571991986c1ce96c94d0000000000000000000000009c5cc0954a7de04d108b4571991986c1ce96c94d00000000000000000000000000000000000000000000000000a20ce2555d97c200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13329,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000672b370abce91f9df9c70819a160dff5bea4cfb3000000000000000000000000672b370abce91f9df9c70819a160dff5bea4cfb3000000000000000000000000000000000000000000000000008b1cc6bf538e9000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13332,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae8e2b4abb13de393515ef5abad7e35a2b11ba6d000000000000000000000000ae8e2b4abb13de393515ef5abad7e35a2b11ba6d000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xc0c1d270f3f52c3859f4b14b1367dcec26640bec4e83025a26588c314a719808,2022-05-25 06:34:53.000 UTC,0,true -13333,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000028523ae8fc1ef411669a4f284d34f2030434d38a00000000000000000000000028523ae8fc1ef411669a4f284d34f2030434d38a00000000000000000000000000000000000000000000000002b9bb89d5afdb2800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13336,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009658d095406b17b45b3109c7b8b57cfa641a2e150000000000000000000000009658d095406b17b45b3109c7b8b57cfa641a2e1500000000000000000000000000000000000000000000000001586d349ec3667100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13338,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c73567e09e1774f6e9e5f1f9de7fd0c3c4ce94fa000000000000000000000000c73567e09e1774f6e9e5f1f9de7fd0c3c4ce94fa00000000000000000000000000000000000000000000000006f05b59d3b2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13339,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0efeebaef875186d8b250aa69377aa8ccc93283000000000000000000000000b0efeebaef875186d8b250aa69377aa8ccc93283000000000000000000000000000000000000000000000000003feb7a8302056f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13345,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a4ce5470a3854a2840e970d51de7810e65417b71000000000000000000000000a4ce5470a3854a2840e970d51de7810e65417b71000000000000000000000000000000000000000000000000003b5602554d95c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13346,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000366bffc83477dbcdd5670859cb7f59081a53ea4c000000000000000000000000366bffc83477dbcdd5670859cb7f59081a53ea4c0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13347,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000000d7c96322a62573b509ee0b1266e7aa713662c130000000000000000000000000000000000000000000000004563918244f40000,,,1,true -13351,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002453a37cb6598b02631dbef572bd4848c119c8ed0000000000000000000000002453a37cb6598b02631dbef572bd4848c119c8ed00000000000000000000000000000000000000000000000002a19bad6fcfea7b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13352,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000123fb8874214032c05c661677004f36ad5569aa3000000000000000000000000123fb8874214032c05c661677004f36ad5569aa300000000000000000000000000000000000000000000000001518e3a83bf1fbc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13353,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000003c71ab47ad0263f57f274e1094a50b74c10f93400000000000000000000000003c71ab47ad0263f57f274e1094a50b74c10f93400000000000000000000000000000000000000000000000006df75a00e817cf800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x99deffe6badcadf10238d723b80da24a5323c43a4a1f2ec42a0e10117c695dbf,2022-04-27 01:09:30.000 UTC,0,true -13355,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007783b43770587a394d410c5330b25937f311acbd0000000000000000000000007783b43770587a394d410c5330b25937f311acbd00000000000000000000000000000000000000000000000006e5cf238f762f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13356,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e0d91a3e9266a25fafa978d29fdf692d5aa79bae000000000000000000000000e0d91a3e9266a25fafa978d29fdf692d5aa79bae00000000000000000000000000000000000000000000000000a54dd2972c6c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13357,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000a550215d922af5af685461887190cbe1cb7c807100000000000000000000000000000000000000000000004af91435611c752327,,,1,true -13361,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006740888dad1a16931a1dcdd16538c9edd8c5ade00000000000000000000000006740888dad1a16931a1dcdd16538c9edd8c5ade000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13363,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000041dae192e88ca982f4db6d0fc80a64be74002b8000000000000000000000000041dae192e88ca982f4db6d0fc80a64be74002b80000000000000000000000000000000000000000000000000000000003db974900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13366,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094fa0e817004844f358d5aadaac45b61d444e6cb00000000000000000000000094fa0e817004844f358d5aadaac45b61d444e6cb0000000000000000000000000000000000000000000000000133342fdcd36b7000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13367,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000000d0eb908e66917e2da851eb837977eca176bf10d0000000000000000000000000d0eb908e66917e2da851eb837977eca176bf10d0000000000000000000000000000000000000000000000000000000001fd9f0400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13368,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d0eb908e66917e2da851eb837977eca176bf10d0000000000000000000000000d0eb908e66917e2da851eb837977eca176bf10d000000000000000000000000000000000000000000000000001b75bb22a8a70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13369,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b62e0312d6a6790b07f3a87b9ec339f7d8d47a60000000000000000000000002b62e0312d6a6790b07f3a87b9ec339f7d8d47a600000000000000000000000000000000000000000000000000318544ec44921300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13370,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000068dcff0b1175b0199f3ca65ace43cd82fb703ce200000000000000000000000068dcff0b1175b0199f3ca65ace43cd82fb703ce200000000000000000000000000000000000000000000000000000000016664b400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13371,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e56e30a76f08e67a72dd9f360e422b9fa48a70c7000000000000000000000000e56e30a76f08e67a72dd9f360e422b9fa48a70c7000000000000000000000000000000000000000000000000002d5596036831ae00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13375,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d7c1e4e4de7219a7adfe0a0843b785917411847400000000000000000000000000000000000000000000000038e62046fb1a0000,,,1,true -13376,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e65bc9d90619e0f98fdb6bda851aaa19e054355a000000000000000000000000e65bc9d90619e0f98fdb6bda851aaa19e054355a0000000000000000000000000000000000000000000000000003328b944c400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13380,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000083ac17696774768c26e48a98d115b5eccbf81a8600000000000000000000000000000000000000000000000b78c1217cd03784a9,0xbac2fd97ec5d4fd61f6f2eb8f4aaa974dd5ea0ec1936897cb57d2583091b47be,2022-01-07 22:11:22.000 UTC,0,true -13381,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000014bd7ca23817d50faecbd0cc09701a1246cbce8a00000000000000000000000014bd7ca23817d50faecbd0cc09701a1246cbce8a000000000000000000000000000000000000000000000001dd6f3c536656d31a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13382,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000014bd7ca23817d50faecbd0cc09701a1246cbce8a00000000000000000000000014bd7ca23817d50faecbd0cc09701a1246cbce8a0000000000000000000000000000000000000000000000000077d19e62dd146e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13383,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000095dd74037b29fa89d2fbec452579b47e634503db00000000000000000000000095dd74037b29fa89d2fbec452579b47e634503db000000000000000000000000000000000000000000000000005edcd80fb5f5fa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13387,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d95e0e2c3b10b361f5c1f624620a26fa2a07d760000000000000000000000000d95e0e2c3b10b361f5c1f624620a26fa2a07d760000000000000000000000000000000000000000000000000002e8ca081fa230000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13388,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000093f16d737e50c3aa47f9406b3cf79e0293f7b1c400000000000000000000000093f16d737e50c3aa47f9406b3cf79e0293f7b1c4000000000000000000000000000000000000000000000000002e9145b0b3460000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13392,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000054ec0f31378c8fef5abd9ff0be137f5a1fe765ae00000000000000000000000054ec0f31378c8fef5abd9ff0be137f5a1fe765ae000000000000000000000000000000000000000000000000025bf6196bd1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13393,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000706d32a171e4f7b32dbd9dd3d4d726122c6fc3b9000000000000000000000000706d32a171e4f7b32dbd9dd3d4d726122c6fc3b9000000000000000000000000000000000000000000000000011c37937e08000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13400,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000350a791bfc2c21f9ed5d10980dad2e2638ffa7f60000000000000000000000000133d7b8e24d11a9b4c511e31d3ee94ef3c9a0e70000000000000000000000000133d7b8e24d11a9b4c511e31d3ee94ef3c9a0e7000000000000000000000000000000000000000000000000467b75af1884132a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13406,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000004257bc72ea94e5f7459190dee12236ee7ee0203c00000000000000000000000000000000000000000000002ac5861dc2e0019aad,0xa02e678afd7c1fc85484a8cf4b61f90e59aa2fee75d2039e8d8234b0e17e6a37,2021-11-29 10:44:43.000 UTC,0,true -13408,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000350a791bfc2c21f9ed5d10980dad2e2638ffa7f60000000000000000000000002f4cc285bc316ba1ff2f1a71761839629c19d5a20000000000000000000000002f4cc285bc316ba1ff2f1a71761839629c19d5a2000000000000000000000000000000000000000000000000086b8baf635e393e00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13414,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009e882c4b9d59ab62c212c00db7aa9aefa3634ba30000000000000000000000009e882c4b9d59ab62c212c00db7aa9aefa3634ba300000000000000000000000000000000000000000000000003311fc80a57000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13417,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ec5b986c5c531d41ec6e2391a0d253fc3588628e000000000000000000000000ec5b986c5c531d41ec6e2391a0d253fc3588628e00000000000000000000000000000000000000000000000000860a11acad7ac000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13418,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000085622bc4f29911f6a8cbc2135c7c21e8f32c283000000000000000000000000085622bc4f29911f6a8cbc2135c7c21e8f32c28300000000000000000000000000000000000000000000000001b70fa471e588fd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13424,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000060408fd5e5ed4c9824802e290c152c3023bbeaf600000000000000000000000060408fd5e5ed4c9824802e290c152c3023bbeaf60000000000000000000000000000000000000000000000063bf212b431ec000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13427,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ca9212b3b9640dcbe866f86b8601e5beb6666480000000000000000000000007ca9212b3b9640dcbe866f86b8601e5beb666648000000000000000000000000000000000000000000000000002da48aab845c8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13429,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000fa5d04a5058d7f55cfd75487b62278421398f66b000000000000000000000000fa5d04a5058d7f55cfd75487b62278421398f66b000000000000000000000000000000000000000000000003cf40d8656828d2a300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13430,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c21a0e64a7b39a3d41dd17942d74e63c0bb6ae12000000000000000000000000c21a0e64a7b39a3d41dd17942d74e63c0bb6ae120000000000000000000000000000000000000000000000000853a0d2313c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13431,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e6aee6ec5a83010859e350cc07b16210a4641cbd000000000000000000000000e6aee6ec5a83010859e350cc07b16210a4641cbd000000000000000000000000000000000000000000000000002b49c61940db9000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13432,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a734bf1acceaf44049898315f012fa240489d909000000000000000000000000a734bf1acceaf44049898315f012fa240489d90900000000000000000000000000000000000000000000000002ba2e5c07d9e82e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13434,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d13e1c8b0315fbaa4f385ee44c6444c474c20f00000000000000000000000003d13e1c8b0315fbaa4f385ee44c6444c474c20f0000000000000000000000000000000000000000000000000000df8b16cca2e0b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13436,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000c7db50bfb824c4e60d107c2892313b127739b6fd000000000000000000000000c7db50bfb824c4e60d107c2892313b127739b6fd0000000000000000000000000000000000000000000000006f05b59d3b20000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13439,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a699720418f612558e2827bf68631686e9d1095e000000000000000000000000a699720418f612558e2827bf68631686e9d1095e000000000000000000000000000000000000000000000000015feb298de19d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13440,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7da9b0677d17341ada49902e9c0d5f4f11dfb3e000000000000000000000000d7da9b0677d17341ada49902e9c0d5f4f11dfb3e000000000000000000000000000000000000000000000000003b508d54a33e8200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13441,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f90f56afa1dae825db57fc305b2f8f1ccf337531000000000000000000000000f90f56afa1dae825db57fc305b2f8f1ccf337531000000000000000000000000000000000000000000000000003a43b68e51000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x34f0eaf76174149f8b53a0f9f33ce91cae044fc7f360a576ccafd9ea08836519,2022-05-18 05:42:46.000 UTC,0,true -13442,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000092c0689fe3c559657e5e3409dcb5eb5eab76f2b800000000000000000000000092c0689fe3c559657e5e3409dcb5eb5eab76f2b8000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13443,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7db50bfb824c4e60d107c2892313b127739b6fd000000000000000000000000c7db50bfb824c4e60d107c2892313b127739b6fd0000000000000000000000000000000000000000000000000008632c28b9737500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13444,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c6bee58695595ae32288b5afcbee1d4c030f62e5000000000000000000000000c6bee58695595ae32288b5afcbee1d4c030f62e50000000000000000000000000000000000000000000000000006959dd3aaf74100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13446,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d9590b6019c8e52718b85e7caa2bb3318be10f44000000000000000000000000d9590b6019c8e52718b85e7caa2bb3318be10f44000000000000000000000000000000000000000000000000000965dbce70760600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13447,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000089c3d632031e77667bd8d752cea80bb185354df100000000000000000000000089c3d632031e77667bd8d752cea80bb185354df1000000000000000000000000000000000000000000000000000a76577aa35cb400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13448,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000093ccaa2c29ea8b79899400c5a037f18bb9b2a60700000000000000000000000093ccaa2c29ea8b79899400c5a037f18bb9b2a60700000000000000000000000000000000000000000000000000091b93a4bba8fd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13449,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007761162e5d5e7143fafca23c76b1e91724f130090000000000000000000000007761162e5d5e7143fafca23c76b1e91724f130090000000000000000000000000000000000000000000000000009ed6c2fc9a8b800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13450,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e495b919885d93a2c16fc7ae9439d178377cf94d000000000000000000000000e495b919885d93a2c16fc7ae9439d178377cf94d0000000000000000000000000000000000000000000000000005a5660ff85fc700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13451,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000573c5c8d84a892217ecbce14226394beb8329c40000000000000000000000000573c5c8d84a892217ecbce14226394beb8329c4000000000000000000000000000000000000000000000000009bc7c76f30f95100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe3116290c91802b53713f256af60e804f7ed999536c8b4fbc8dab54fb5b986a7,2021-12-26 11:49:23.000 UTC,0,true -13452,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7bf83b30acb185654630f04612d71a84786e6cc000000000000000000000000d7bf83b30acb185654630f04612d71a84786e6cc000000000000000000000000000000000000000000000000000aac369e1e001900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13456,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000028d4bd86a22befc00bfbb4f94950a4ac0b10fd5b00000000000000000000000028d4bd86a22befc00bfbb4f94950a4ac0b10fd5b000000000000000000000000000000000000000000000000000b663933acbf5a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13458,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005fbd43b140b9b84cfc05ef7b0afe930a58a1e8f60000000000000000000000005fbd43b140b9b84cfc05ef7b0afe930a58a1e8f600000000000000000000000000000000000000000000000000580a6871ec193100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13459,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ebf5049401a882c20690ec3e9dfa78f6ff93cadc000000000000000000000000ebf5049401a882c20690ec3e9dfa78f6ff93cadc000000000000000000000000000000000000000000000000004945df1084304000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13460,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000634dc398000d102cd78c8a707bef9f9813464983000000000000000000000000634dc398000d102cd78c8a707bef9f9813464983000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13461,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b30a35bb3b3830626c97f0ea9b123a3d9439c468000000000000000000000000b30a35bb3b3830626c97f0ea9b123a3d9439c4680000000000000000000000000000000000000000000000000d98cc4ff03f280200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13462,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f90cae83a037e3e7600b842898f52fa87239d3a2000000000000000000000000f90cae83a037e3e7600b842898f52fa87239d3a20000000000000000000000000000000000000000000000000009dd503a02a7e800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13463,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c456f81419a4c0ab25d33677640715f62fe8462e000000000000000000000000c456f81419a4c0ab25d33677640715f62fe8462e0000000000000000000000000000000000000000000000000044e6f16e845e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13465,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c83dff7353a75e5489f98a64e08619a10b796081000000000000000000000000c83dff7353a75e5489f98a64e08619a10b796081000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13466,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a74e944fba53828d1f63ae3db91fdd966d5ae0d0000000000000000000000002a74e944fba53828d1f63ae3db91fdd966d5ae0d0000000000000000000000000000000000000000000000000009c826fea8c1dd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13467,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009418533015471c727d4aa4d8fd1effc1433fa6cd0000000000000000000000009418533015471c727d4aa4d8fd1effc1433fa6cd00000000000000000000000000000000000000000000000000062857ad59620a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13469,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d00ab9ca2447832d570014835567392a47fb5568000000000000000000000000d00ab9ca2447832d570014835567392a47fb55680000000000000000000000000000000000000000000000000098f6677f4c2b0d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13470,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d0d8bf8e14a6b3237195b8d28a19a07252c68850000000000000000000000007d0d8bf8e14a6b3237195b8d28a19a07252c6885000000000000000000000000000000000000000000000000014ccee5b47dc5c500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13471,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000deb0488784f01d0bf118b536e4b7ad48357f8c40000000000000000000000000deb0488784f01d0bf118b536e4b7ad48357f8c400000000000000000000000000000000000000000000000000162fe12eea018a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13472,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000726ad4bdaf04ed2eb26c43881f8d8648f7abc047000000000000000000000000726ad4bdaf04ed2eb26c43881f8d8648f7abc047000000000000000000000000000000000000000000000000014f985e39f5fe9200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13473,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff3c4e561df2b1573c367707794b5df25425ac6e000000000000000000000000ff3c4e561df2b1573c367707794b5df25425ac6e000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13474,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f270fa131fea5d7e1798672f87a9da4e01b399ef000000000000000000000000f270fa131fea5d7e1798672f87a9da4e01b399ef000000000000000000000000000000000000000000000000046d989cbeec002600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13475,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e816691000000000000000000000000c7d2c67bc38b0e8b15b632c19ef629022fd56543000000000000000000000000c7d2c67bc38b0e8b15b632c19ef629022fd565430000000000000000000000000000000000000000000000001b91f57b06ea36e500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x8117b77e95158c049fd22e71181d8557e1b663279ef08725b305c62e88222462,2022-02-05 09:37:55.000 UTC,0,true -13478,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d696e4aa7fb6e9d828ac804bef9baeee136ed40c000000000000000000000000d696e4aa7fb6e9d828ac804bef9baeee136ed40c00000000000000000000000000000000000000000000000000a31e78e853832400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13479,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005b9b5f9c69aa245db149a6de6dadd3427da1fbbf0000000000000000000000005b9b5f9c69aa245db149a6de6dadd3427da1fbbf0000000000000000000000000000000000000000000000000026896f771f09ca00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13480,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a13f3599ff620500f360dc6185ad30f625ebfc38000000000000000000000000a13f3599ff620500f360dc6185ad30f625ebfc38000000000000000000000000000000000000000000000000018bc24f13e462d300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13486,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000034a79f99185794408d3227bce62fff0adb36dc9600000000000000000000000034a79f99185794408d3227bce62fff0adb36dc9600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13489,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000034be96d237998af9ec63986a266a81937ca208c200000000000000000000000034be96d237998af9ec63986a266a81937ca208c200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13490,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000009d374d3d5f9ce1f388994c98d7279bd1b4f87b330000000000000000000000000000000000000000000000000de0b6b3a7640000,,,1,true -13491,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e34c4cf29f9e06f4186dccd1853c6f0a17b54065000000000000000000000000e34c4cf29f9e06f4186dccd1853c6f0a17b5406500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13492,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000463892108a1b2503dfb0c335893af1858bbc8777000000000000000000000000463892108a1b2503dfb0c335893af1858bbc877700000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13493,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000554047f6e0120ed3738e994b89d2a06462919e60000000000000000000000000554047f6e0120ed3738e994b89d2a06462919e6000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13494,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ede75dbcc5e9896126518a7741650aadb7dbe539000000000000000000000000ede75dbcc5e9896126518a7741650aadb7dbe53900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13495,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e4ee46cbecd6d340401d35b72d64b1ac9b63e3c0000000000000000000000002e4ee46cbecd6d340401d35b72d64b1ac9b63e3c00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13496,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006eec9ed388f1ba3b1c4b08f2737149e4cbe3af4f0000000000000000000000006eec9ed388f1ba3b1c4b08f2737149e4cbe3af4f00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13497,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001c620f148d7caec6073691d78f046d72ee099ad00000000000000000000000001c620f148d7caec6073691d78f046d72ee099ad000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13498,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a3b89800f47cbad213a496c96791a7ccb05eeb80000000000000000000000005a3b89800f47cbad213a496c96791a7ccb05eeb800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13499,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d79d6f19c2c10fa1ad06eba12a72e65905a99c01000000000000000000000000d79d6f19c2c10fa1ad06eba12a72e65905a99c0100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13500,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fbe6790b2221c6bb41af88f398254b9662c01a38000000000000000000000000fbe6790b2221c6bb41af88f398254b9662c01a38000000000000000000000000000000000000000000000000003f8967058c84e700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13501,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000b6f6d8131b159ea36fd4eabd6d08ae3f6f0ba190000000000000000000000000b6f6d8131b159ea36fd4eabd6d08ae3f6f0ba1900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13502,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dff53ba0007507ccaaf30264b8212db37a84b6b4000000000000000000000000dff53ba0007507ccaaf30264b8212db37a84b6b400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13503,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000095537634202c31521315078bc1b8837e1da7269900000000000000000000000095537634202c31521315078bc1b8837e1da7269900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13504,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009ce7a5f00f7d83126520cb2916d16489b495169b0000000000000000000000009ce7a5f00f7d83126520cb2916d16489b495169b00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13505,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000783b4926b83d666d6897b96f3049428b08343890000000000000000000000000783b4926b83d666d6897b96f3049428b083438900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13506,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b542568f06eef54ce03203fce472481b7d3cf7b0000000000000000000000001b542568f06eef54ce03203fce472481b7d3cf7b00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13507,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ab56fa34d26f674939b2947ea25d8a6097655970000000000000000000000006ab56fa34d26f674939b2947ea25d8a60976559700000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13508,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000041a083bab355451b1a4e4b5366a72271ce849c5100000000000000000000000041a083bab355451b1a4e4b5366a72271ce849c5100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13509,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd4c9130c75659bd84ab5cb27fcb0663b78c006c000000000000000000000000bd4c9130c75659bd84ab5cb27fcb0663b78c006c000000000000000000000000000000000000000000000000015c2a7b13fd000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13510,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f6e315d113a0bb37986d581cc71d663a0e9b69ee000000000000000000000000f6e315d113a0bb37986d581cc71d663a0e9b69ee00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13511,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000c50a6f05500c941b080c56ea3764e6a920ad92f2000000000000000000000000c50a6f05500c941b080c56ea3764e6a920ad92f2000000000000000000000000000000000000000000000000000000001dcd650000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13512,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dde199991ad1a917be29b92618dbb1daa464372e000000000000000000000000dde199991ad1a917be29b92618dbb1daa464372e0000000000000000000000000000000000000000000000000067e0609591300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1425a9f1c6798ccc9ebc51b76b177a118c8bda0c4b5e6d09868d3f91407b4b17,2022-05-21 05:56:16.000 UTC,0,true -13515,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc9a5cdeff2d022a9e910c4c1c7c78e6be666a36000000000000000000000000cc9a5cdeff2d022a9e910c4c1c7c78e6be666a360000000000000000000000000000000000000000000000000068f0e3a147fc0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xa1ddd0810574ab4ac5fa2367fd658f7b25b68671d0cddbf624d78fd81ba0628f,2022-05-22 18:42:06.000 UTC,0,true -13516,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003734a41abe1cccbb4519fe361e7c5ce0dfe879f80000000000000000000000003734a41abe1cccbb4519fe361e7c5ce0dfe879f800000000000000000000000000000000000000000000000001f161421c8e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13518,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000308eb3dcc77391d02941944909dc85d23af03220000000000000000000000000308eb3dcc77391d02941944909dc85d23af03220000000000000000000000000000000000000000000000000004bfbcf4ff0609700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xc3623a2f038be5deae8c09768729ef74acfd36d66a065052f92f5c99326eee63,2022-03-12 17:38:49.000 UTC,0,true -13523,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f030b74371167d3b71cf3214e749b0d1814c0490000000000000000000000006f030b74371167d3b71cf3214e749b0d1814c0490000000000000000000000000000000000000000000000000074fd5dd242dc9400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x12949014e04b39fa458a2d59f92163e811d1d671378ef8a973e5352d0d0ed41e,2021-12-09 00:40:57.000 UTC,0,true -13526,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a30a5c6554fdc4b2a23e7f87150a192786b30b20000000000000000000000005a30a5c6554fdc4b2a23e7f87150a192786b30b200000000000000000000000000000000000000000000000000793a22bb8f020000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13527,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008cc5f52ca537df691f15f5f88a0ae7f95bdd72060000000000000000000000008cc5f52ca537df691f15f5f88a0ae7f95bdd7206000000000000000000000000000000000000000000000000000d7f72f39764c500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13528,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df8ce52f7a50c1ba79d778717d48357df4d9150e000000000000000000000000df8ce52f7a50c1ba79d778717d48357df4d9150e0000000000000000000000000000000000000000000000000072924212078b8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13529,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000049a1d052b0b3a5324ddfb4f4d374313edeea0d3700000000000000000000000049a1d052b0b3a5324ddfb4f4d374313edeea0d37000000000000000000000000000000000000000000000003c932de100869e29300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13531,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e28d0e01d8f1501600b0f19bc142a6546626d605000000000000000000000000e28d0e01d8f1501600b0f19bc142a6546626d6050000000000000000000000000000000000000000000000000036fc685780307900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13532,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eec03bc36752a1e991d5df6022778a84bab9ac49000000000000000000000000eec03bc36752a1e991d5df6022778a84bab9ac490000000000000000000000000000000000000000000000000022766a152044dd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x0c18bf666f37cd37ed471f7db69e0c7fe11ebdfd8441e6a22c61bc682906b83b,2022-03-14 12:33:34.000 UTC,0,true -13533,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000521f8c295b140d310bb8aee6bd9e008797953524000000000000000000000000521f8c295b140d310bb8aee6bd9e0087979535240000000000000000000000000000000000000000000000000061b3347238707700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x68284e4de4a9d1aa534b7415aa77c0226cf31012817a9d7c87d6a0d8fbc530ab,2022-08-01 00:37:53.000 UTC,0,true -13535,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f119103ae79e98ecc7791e3b4a765f303d7d7da1000000000000000000000000f119103ae79e98ecc7791e3b4a765f303d7d7da1000000000000000000000000000000000000000000000000001fd9db6154250000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13537,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e874b45764eedd2c76398a57b4d5f2fe0f05a4f2000000000000000000000000e874b45764eedd2c76398a57b4d5f2fe0f05a4f2000000000000000000000000000000000000000000000000000c195119000bd200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13539,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a183a8304c3523d7963096b831c2ae160ce9dac8000000000000000000000000a183a8304c3523d7963096b831c2ae160ce9dac8000000000000000000000000000000000000000000000000000947c655a0c38000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13540,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017e555e5f72cd268453ad027666df4e3bad8f4db00000000000000000000000017e555e5f72cd268453ad027666df4e3bad8f4db000000000000000000000000000000000000000000000000000a296ebc7845e300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13541,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000376236b8277bbd26b7163caf4870691c37e75107000000000000000000000000376236b8277bbd26b7163caf4870691c37e7510700000000000000000000000000000000000000000000000000c21d4dc767724200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13542,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000052e9ac8200924ef2871208f34ce68ddb0b16e99000000000000000000000000052e9ac8200924ef2871208f34ce68ddb0b16e990000000000000000000000000000000000000000000000000009aae84f480fbc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13543,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000158169a722f85e8dd64fa4692af4ba0ee3ac3f1f000000000000000000000000158169a722f85e8dd64fa4692af4ba0ee3ac3f1f0000000000000000000000000000000000000000000000000081e4625b4b85d200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13544,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000003ec99088cdc87b1927f87831b570995bea0f63500000000000000000000000003ec99088cdc87b1927f87831b570995bea0f635000000000000000000000000000000000000000000000000000b6737c298120a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13546,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000003322f34f6be8eb57642df8a768eb12478ffc40a00000000000000000000000003322f34f6be8eb57642df8a768eb12478ffc40a000000000000000000000000000000000000000000000000001116a29b23126a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13547,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006c4a2c30a7d8150a63cc4268ca86c85c22c461500000000000000000000000006c4a2c30a7d8150a63cc4268ca86c85c22c461500000000000000000000000000000000000000000000000000013f9713c6cec6300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13548,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004b01cec888e8f3904966f53852ca95fdeb166a9b0000000000000000000000004b01cec888e8f3904966f53852ca95fdeb166a9b000000000000000000000000000000000000000000000000000e8409dcf9ef6400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13549,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001d86aae1dcc5d4534dcac0f2d3daf962b4277b200000000000000000000000001d86aae1dcc5d4534dcac0f2d3daf962b4277b20000000000000000000000000000000000000000000000000000cd170a2baf0d300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13551,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000062ab1cd519eafdb64ad685a686c6f5d67a544ad200000000000000000000000062ab1cd519eafdb64ad685a686c6f5d67a544ad20000000000000000000000000000000000000000000000000067802bc23e280000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf6f02a4b061dbb92e4b987d64650b33e0e1d0a89b40ac7acdba4bd84d53d1c82,2022-05-29 09:20:45.000 UTC,0,true -13552,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000101d5479a5b33bc7a0720c93df1715612d059a24000000000000000000000000101d5479a5b33bc7a0720c93df1715612d059a2400000000000000000000000000000000000000000000000000101398cd168dc800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13553,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006730e06a5d67719c3895c56bcd01740734d411450000000000000000000000006730e06a5d67719c3895c56bcd01740734d41145000000000000000000000000000000000000000000000000000c8feabb3c345a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13554,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e6732ddbd83c56fddf81d4e71074075b28b4fb9f000000000000000000000000e6732ddbd83c56fddf81d4e71074075b28b4fb9f000000000000000000000000000000000000000000000000000d452216a0b92600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13555,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c4629261cd1c28c439321567a211c5db9ad81c3f000000000000000000000000c4629261cd1c28c439321567a211c5db9ad81c3f00000000000000000000000000000000000000000000000000082a5e4aaf9a8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13556,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000011e56f8a14d70896f7daf6695a18e4b2d965637000000000000000000000000011e56f8a14d70896f7daf6695a18e4b2d9656370000000000000000000000000000000000000000000000000012712404f735cb400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13557,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000092c0689fe3c559657e5e3409dcb5eb5eab76f2b800000000000000000000000092c0689fe3c559657e5e3409dcb5eb5eab76f2b8000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13559,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf2144acdab6d0267faf627ae8ce57544df1f23a000000000000000000000000cf2144acdab6d0267faf627ae8ce57544df1f23a00000000000000000000000000000000000000000000000001369453121169f200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13560,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000095c5a2f8053b5efdf84a640ae03ee5f449870c0000000000000000000000000095c5a2f8053b5efdf84a640ae03ee5f449870c0000000000000000000000000000000000000000000000000002062e8108ccd73e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13561,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f30bc3626a28d6d5ce1af949043ccd2fc36440f0000000000000000000000007f30bc3626a28d6d5ce1af949043ccd2fc36440f000000000000000000000000000000000000000000000000015e466b398984cb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13563,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009ceba1d1c54282179b77e318b4b0561a14af71730000000000000000000000009ceba1d1c54282179b77e318b4b0561a14af7173000000000000000000000000000000000000000000000000000054291bfda50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13564,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000c819620fe48cfee437db472eb52b70946409aea2000000000000000000000000000000000000000000000020e0c83d1cad95e150,,,1,true -13567,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000039f85ae146ce38e5f14eef5c90a007420a29f19c00000000000000000000000039f85ae146ce38e5f14eef5c90a007420a29f19c0000000000000000000000000000000000000000000000000000000007361f6c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13568,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c618a50e79eefc2a421e8203f9f70a29e6a48170000000000000000000000003c618a50e79eefc2a421e8203f9f70a29e6a481700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13569,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032280087208adda9d2c5a1108969ea974ff95f4d00000000000000000000000032280087208adda9d2c5a1108969ea974ff95f4d000000000000000000000000000000000000000000000000005c5de18f44e2db00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9f4385e5308efc189f4ee67ce3bd0e117463a16cb60ecace06c6c0e68c45d46c,2022-07-24 05:16:53.000 UTC,0,true -13572,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f8611af181da9b5283d2bdf4c0799aaff3a278d6000000000000000000000000f8611af181da9b5283d2bdf4c0799aaff3a278d60000000000000000000000000000000000000000000000000009c01bb1eb3d3600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13573,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009d89195a9322a9e8f5535512da06cdd165db0bc90000000000000000000000009d89195a9322a9e8f5535512da06cdd165db0bc9000000000000000000000000000000000000000000000000010af2595e3dd8a600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13577,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c04c7c2efc023731303e7bf81a9b6540e361c76a000000000000000000000000c04c7c2efc023731303e7bf81a9b6540e361c76a000000000000000000000000000000000000000000000000008a234e96f95da100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13581,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eccc3a11a481e992ce4fd4d37e1568f11399b053000000000000000000000000eccc3a11a481e992ce4fd4d37e1568f11399b053000000000000000000000000000000000000000000000000001ccdfe282810c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13586,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000958118ab88b764151d6e67e779aae7ebfa064a48000000000000000000000000958118ab88b764151d6e67e779aae7ebfa064a48000000000000000000000000000000000000000000000000002b610a86cdaa0200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13589,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e46b89a906e70786f0ff94a40aaa63ebbf30aee0000000000000000000000000e46b89a906e70786f0ff94a40aaa63ebbf30aee000000000000000000000000000000000000000000000000001f4f6e4da65a63600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13592,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000982ad1aed87c4adf0de68939266c2cfe302567b90000000000000000000000000000000000000000000000013319a67d2993a96f,,,1,true -13596,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b50716974bb074a4d463cdd03152c495a0796ca2000000000000000000000000b50716974bb074a4d463cdd03152c495a0796ca200000000000000000000000000000000000000000000000000a1be53562fccda00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13598,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000350a791bfc2c21f9ed5d10980dad2e2638ffa7f6000000000000000000000000d2d070dc9389506ec673938ef2a0c9a0f681d414000000000000000000000000d2d070dc9389506ec673938ef2a0c9a0f681d4140000000000000000000000000000000000000000000000008ac7230489e8000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13599,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000006a5510dd227b846595500fea81b8f0761fa0f0a00000000000000000000000006a5510dd227b846595500fea81b8f0761fa0f0a0000000000000000000000000000000000000000000000000006d1e7adaa9c5c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13601,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000f7e63da70b47255073cf8528d5ac54fbfb8c3130000000000000000000000000f7e63da70b47255073cf8528d5ac54fbfb8c31300000000000000000000000000000000000000000000000000bfd8b6c1df000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13602,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59900000000000000000000000068f180fcce6836688e9084f035309e29bf0a20950000000000000000000000009d522c3aee1cbb7743b69a2e3d38f6b7348434920000000000000000000000009d522c3aee1cbb7743b69a2e3d38f6b7348434920000000000000000000000000000000000000000000000000000000000995cd300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x858b1e251ccd26f8fb60fc8abf6d56c1a1b621b23665b09b20cf34bc4ec76e10,2021-12-09 16:16:28.000 UTC,0,true -13603,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b293d010257a41484dbdf0699030a0661f0b3446000000000000000000000000b293d010257a41484dbdf0699030a0661f0b344600000000000000000000000000000000000000000000000000a0f0e25649817b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x01ae15db9c4ebdd6867944922b24df9708d490928b59a2c79ecdaa88f0b21fbe,2022-04-24 09:10:34.000 UTC,0,true -13604,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c73567e09e1774f6e9e5f1f9de7fd0c3c4ce94fa000000000000000000000000c73567e09e1774f6e9e5f1f9de7fd0c3c4ce94fa00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13605,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2d070dc9389506ec673938ef2a0c9a0f681d414000000000000000000000000d2d070dc9389506ec673938ef2a0c9a0f681d41400000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13607,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5a117fdd91052627c75e40f06bf090205f233ff000000000000000000000000e5a117fdd91052627c75e40f06bf090205f233ff000000000000000000000000000000000000000000000000000200fa57fb508c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13609,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e0f312c1d27e389061b6cbde969f5cf4b6033f04000000000000000000000000e0f312c1d27e389061b6cbde969f5cf4b6033f0400000000000000000000000000000000000000000000000000c3f0635499deda00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13610,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000097b8e2856a360e11d8f2b29ec6a1d2d05be4310100000000000000000000000097b8e2856a360e11d8f2b29ec6a1d2d05be4310100000000000000000000000000000000000000000000000000102267eea76ae600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13611,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003aeedcd329e91e352d6c3d42c2b90d4e33a9e7d50000000000000000000000003aeedcd329e91e352d6c3d42c2b90d4e33a9e7d500000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13614,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000891acdefa5f01ab48bf69ff789ce9d3a9997f017000000000000000000000000000000000000000000000002e1b63a18a3938538,,,1,true -13615,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a5945b102d58b1c2ee3c6c48be47341307b97023000000000000000000000000a5945b102d58b1c2ee3c6c48be47341307b97023000000000000000000000000000000000000000000000000012a0295d08c170000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13616,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bca589eee75761cbe808f9663ec62c1ed474bde5000000000000000000000000bca589eee75761cbe808f9663ec62c1ed474bde5000000000000000000000000000000000000000000000000009c184c7555ca0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13617,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a7bcbae98d2e410240045b6e6f2280e9d1523650000000000000000000000006a7bcbae98d2e410240045b6e6f2280e9d1523650000000000000000000000000000000000000000000000000056bf02012295c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13622,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000e26917d01160f51dc28a58be9e1489b52a3eae67000000000000000000000000e26917d01160f51dc28a58be9e1489b52a3eae67000000000000000000000000000000000000000000000000000000000e5c414e00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13627,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000970128b339a3223ac799af9c5b07ff15f253ed23000000000000000000000000970128b339a3223ac799af9c5b07ff15f253ed230000000000000000000000000000000000000000000000000040bfdcd201598500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13629,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c6c2c7d3a716ec100b7e3d1a99dbb7cee236b4e0000000000000000000000008c6c2c7d3a716ec100b7e3d1a99dbb7cee236b4e0000000000000000000000000000000000000000000000000249a5da5d34ac7d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13632,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf0b30daecb36a1cd35f409d2f219c2384c881b4000000000000000000000000cf0b30daecb36a1cd35f409d2f219c2384c881b4000000000000000000000000000000000000000000000000016b09e3eca3d03d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13633,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000873ec3e237fa0fafece9a1b25c0ad3bc9281adbd000000000000000000000000873ec3e237fa0fafece9a1b25c0ad3bc9281adbd0000000000000000000000000000000000000000000000000005f9a29020782100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13635,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b89c7fe5abe5c2a117e60f6222b88fed7d9d03ec000000000000000000000000b89c7fe5abe5c2a117e60f6222b88fed7d9d03ec00000000000000000000000000000000000000000000000000be2cbc77c47bbc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13638,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e816691000000000000000000000000c7cb3516ac75e8f2deeb86d831b907952f46fa41000000000000000000000000c7cb3516ac75e8f2deeb86d831b907952f46fa4100000000000000000000000000000000000000000000000012903918324c710400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13640,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba4f59ada21c3a8116f1b3fb644378fe1d7b2c95000000000000000000000000ba4f59ada21c3a8116f1b3fb644378fe1d7b2c9500000000000000000000000000000000000000000000000000afd68e3ec472b100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13642,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df25d35bd400d854006711efeb19a3530570d3cd000000000000000000000000df25d35bd400d854006711efeb19a3530570d3cd000000000000000000000000000000000000000000000000006f45e39ff7b5af00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13643,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc9a5cdeff2d022a9e910c4c1c7c78e6be666a36000000000000000000000000cc9a5cdeff2d022a9e910c4c1c7c78e6be666a3600000000000000000000000000000000000000000000000000274d351264fc3e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x3c225aa226963fe3567090b3fb558c0dbdf25b30e4939585a92d126418967345,2022-05-22 18:40:31.000 UTC,0,true -13646,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bb11a95772ff45df169e8e917eeaeded0c1547d3000000000000000000000000bb11a95772ff45df169e8e917eeaeded0c1547d3000000000000000000000000000000000000000000000000004983bc275496a800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13647,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f7cf5cdc5ef913fa0066225a97f23b776d5821a0000000000000000000000007f7cf5cdc5ef913fa0066225a97f23b776d5821a000000000000000000000000000000000000000000000000006815fbd52c765e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13651,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000ff393874358530cf9740b5c90f8c9594cc1772ab000000000000000000000000ff393874358530cf9740b5c90f8c9594cc1772ab0000000000000000000000000000000000000000000000000000000009c3428d00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13652,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff393874358530cf9740b5c90f8c9594cc1772ab000000000000000000000000ff393874358530cf9740b5c90f8c9594cc1772ab00000000000000000000000000000000000000000000000001aa535d3d0c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13653,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000051cc2245a1ef254091b081221096ca8df45410a800000000000000000000000051cc2245a1ef254091b081221096ca8df45410a80000000000000000000000000000000000000000000000000005586f1156aeb900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13654,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000937e277649d3af92f1fd1393369994ac10b8ed70000000000000000000000000937e277649d3af92f1fd1393369994ac10b8ed700000000000000000000000000000000000000000000000000bbf505a32aad7200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13655,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0635e38a63c11c7f48cc94f473909d069660056000000000000000000000000c0635e38a63c11c7f48cc94f473909d069660056000000000000000000000000000000000000000000000000005c15d97dbca35a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13657,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000e468e0188041203f1617e8d08735c8f00b54d352000000000000000000000000e468e0188041203f1617e8d08735c8f00b54d3520000000000000000000000000000000000000000000001276deeec284f81d93500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13659,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d346f2eecfab56f4fcc27b34eab78cce7080198a000000000000000000000000d346f2eecfab56f4fcc27b34eab78cce7080198a00000000000000000000000000000000000000000000000000610c079a612f9900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xa2764bcab55a73f70427f75d6ae4353e2e81c985758b1c6644d5a0dde4b47d84,2022-03-06 11:13:27.000 UTC,0,true -13660,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d3944d5c30ebacac4b8ad3dc381a1f0ef821e760000000000000000000000005d3944d5c30ebacac4b8ad3dc381a1f0ef821e7600000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13662,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005984000b183c5fc63c0b2e0e86d584ee269cabe00000000000000000000000005984000b183c5fc63c0b2e0e86d584ee269cabe0000000000000000000000000000000000000000000000000032b563be66b5ca00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13663,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000038388a70999d3563dabdd906505d5dabce6660a200000000000000000000000038388a70999d3563dabdd906505d5dabce6660a2000000000000000000000000000000000000000000000000000d127a2a235e9100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13664,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f17dc054461600ea83bf571080cdb20cce4c5a22000000000000000000000000f17dc054461600ea83bf571080cdb20cce4c5a22000000000000000000000000000000000000000000000000000aa54ad79d861f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13665,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005314235ba5b766fb8e107c8e8109279264a2308e0000000000000000000000005314235ba5b766fb8e107c8e8109279264a2308e000000000000000000000000000000000000000000000000000c462da7d5ec4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13666,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000866742a1f91f5fdbd473741b23acc42248694b51000000000000000000000000866742a1f91f5fdbd473741b23acc42248694b5100000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13667,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005c4e3de7c408f9a45592efaa2829d04dd88a3f720000000000000000000000005c4e3de7c408f9a45592efaa2829d04dd88a3f720000000000000000000000000000000000000000000000000033d79a8506582100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1890d3dd50416293df20b881a1aa75907b64733a2e0be3c72cdc544dd7c1eb66,2021-12-16 14:27:23.000 UTC,0,true -13668,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000018d8b65f80454a74491a1265736a574973d9c78100000000000000000000000018d8b65f80454a74491a1265736a574973d9c78100000000000000000000000000000000000000000000000006f05b59d3b2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x15617ccc700ee119b063663d2499c41f26b7afe7822a24a808e1ff897caabf91,2022-04-27 01:05:04.000 UTC,0,true -13669,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bfe440c533f6861c00e71ce187f37a1a70b7b7e9000000000000000000000000bfe440c533f6861c00e71ce187f37a1a70b7b7e9000000000000000000000000000000000000000000000000015e02dbf21fe70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13681,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d9b558d97301783a6e00b27e122fcf4031eb12a6000000000000000000000000d9b558d97301783a6e00b27e122fcf4031eb12a60000000000000000000000000000000000000000000000000012cf779b2516fc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13682,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c033aab89b26650057881dabbc0815146ffc0f20000000000000000000000003c033aab89b26650057881dabbc0815146ffc0f200000000000000000000000000000000000000000000000006db6291970d97b800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd61d3c32f39adac31ea52c0efe0074492cda6a8da7d06471be3f854e9dc82ba8,2021-11-24 11:59:22.000 UTC,0,true -13684,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000025ae391a0f8b3254123a0278f599a43d4c44462700000000000000000000000025ae391a0f8b3254123a0278f599a43d4c4446270000000000000000000000000000000000000000000000000139a82c70392ec800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13685,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000038720e3787058d56fafa38c0f034a9c94067c28000000000000000000000000038720e3787058d56fafa38c0f034a9c94067c2800000000000000000000000000000000000000000000000000008e1bc9bf0400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13686,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071cc3892dddad179cc6d8c9646ec82d65140f5ee00000000000000000000000071cc3892dddad179cc6d8c9646ec82d65140f5ee00000000000000000000000000000000000000000000000000a18553ee95f38000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13687,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a73bfd196ae9e09925efb1ffb3e35593ab183bb0000000000000000000000004a73bfd196ae9e09925efb1ffb3e35593ab183bb000000000000000000000000000000000000000000000000014a81f9106dfd4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13689,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000e7e8336b7023386bdbc7b1f2b000783a463614b40000000000000000000000000000000000000000000000012a21cdfa744d5aa5,,,1,true -13691,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000f1ccfa46b1356589ec6361468f3520aff95b21c3000000000000000000000000f1ccfa46b1356589ec6361468f3520aff95b21c300000000000000000000000000000000000000000000001b0da07c7d9262f67700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13692,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000002a81579aab05701838b80c826844e618aa023ed4000000000000000000000000000000000000000000000000182fd7d1303545b1,,,1,true -13693,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3f686811c223b701ea913b0ae7018c7ae2bd1c5000000000000000000000000a3f686811c223b701ea913b0ae7018c7ae2bd1c500000000000000000000000000000000000000000000000002b4e97044a834d000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13694,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b412b96dbe138da98be8e475f632e1a8f0037748000000000000000000000000b412b96dbe138da98be8e475f632e1a8f003774800000000000000000000000000000000000000000000000000082b1cc6bc67c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13696,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000ea82a3403fa84dab71ef6146da215dcc5798e8ce00000000000000000000000000000000000000000000000018362ac6c93984b2,,,1,true -13697,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080d4d18e9e1407f8b7c6ecee4b7ece6ad847401200000000000000000000000080d4d18e9e1407f8b7c6ecee4b7ece6ad847401200000000000000000000000000000000000000000000000000ac49e2f770474400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xfde3993f48729f1ac7641a629dc64e471cd520651ff43ccb78c576a305dde0a8,2022-03-05 15:20:46.000 UTC,0,true -13698,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf8c7f3aef546992c9f8f42900b4ca245ceb5c88000000000000000000000000cf8c7f3aef546992c9f8f42900b4ca245ceb5c880000000000000000000000000000000000000000000000000077040e43ac810000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13699,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000b3036b15fcd13d66131f5368c444ffc4cfa9b6db00000000000000000000000000000000000000000000000018368045a0390491,,,1,true -13700,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0387235a4b51d1dfc8a9e4eaf864535e8ded7d8000000000000000000000000b0387235a4b51d1dfc8a9e4eaf864535e8ded7d8000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13701,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000959db0e23993319053d28a5b9a056237a4eb9e8c0000000000000000000000000000000000000000000000001836acd458210044,,,1,true -13703,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000004a9337d7376219f7e2e24732b8096d92a079ad700000000000000000000000000000000000000000000000018363f88e61c7c4d,,,1,true -13704,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000a0f9e61bfd61c4f5ecdf7b5c838f402549d6b9ec0000000000000000000000000000000000000000000000001836544b1db1b9f5,,,1,true -13705,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039af6952f2fbe751a10f28a63f9f57d65f64e3fa00000000000000000000000039af6952f2fbe751a10f28a63f9f57d65f64e3fa00000000000000000000000000000000000000000000000000487504ba8eba6400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13707,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000043917a8174465dc01522e8e14335eaa2cde33f6f00000000000000000000000000000000000000000000000024b420a32e9e04c7,,,1,true -13708,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000043917a8174465dc01522e8e14335eaa2cde33f6f000000000000000000000000000000000000000000000000bbcda00c7cf990c2,,,1,true -13711,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000064f7939b100932308286400b6289e6d2d4d1b46200000000000000000000000064f7939b100932308286400b6289e6d2d4d1b46200000000000000000000000000000000000000000000001044e573f6f154039a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13714,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000027b6d3610012461ec0aa3e4bb7155767d77f564f00000000000000000000000027b6d3610012461ec0aa3e4bb7155767d77f564f000000000000000000000000000000000000000000000000004d3a988820a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13717,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008947269c4c2ea8e6b91634d2c2f12c7bdfa95a1b0000000000000000000000008947269c4c2ea8e6b91634d2c2f12c7bdfa95a1b000000000000000000000000000000000000000000000000002fad4006ee84e600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13719,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c516ef1165b6f4f478c3a021d4333e2a1e73658a000000000000000000000000c516ef1165b6f4f478c3a021d4333e2a1e73658a000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2d4e4bb39b094f9dce72f67e8980e19551c2732d6a0dda7834cc4022e4ab85dd,2022-06-19 17:02:51.000 UTC,0,true -13721,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000219518e022f219a79900365b06c9c2a1ff51d767000000000000000000000000219518e022f219a79900365b06c9c2a1ff51d76700000000000000000000000000000000000000000000000000135154eaf46d6400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xff936d8d80b15a29becb8b0cf540cccf61715149b5d6207584ff0da92f7e3513,2022-06-04 04:45:59.000 UTC,0,true -13722,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000546911aa23511b9b023d4cfa2d97b82f4d423a710000000000000000000000000000000000000000000000003b84acdf3738d5ca,,,1,true -13723,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aa8532152a2420b253fd775f9ddf482fdbe01061000000000000000000000000aa8532152a2420b253fd775f9ddf482fdbe01061000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13724,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a6058d9f92befa23c21a63581daa82a0ade0ec14000000000000000000000000a6058d9f92befa23c21a63581daa82a0ade0ec1400000000000000000000000000000000000000000000000000753d533d96800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13725,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000019be4885e21217a78c505713bae6869e3eaa391400000000000000000000000019be4885e21217a78c505713bae6869e3eaa3914000000000000000000000000000000000000000000000000006171551822660000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13732,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000008d9793b6bf062146630154b8d59908b470523895000000000000000000000000000000000000000000000000aa487051d17ae4ab,,,1,true -13734,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef28d0039f0ef5e859ee969908c4e96bc73ce91c000000000000000000000000ef28d0039f0ef5e859ee969908c4e96bc73ce91c00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13735,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2d070dc9389506ec673938ef2a0c9a0f681d414000000000000000000000000d2d070dc9389506ec673938ef2a0c9a0f681d41400000000000000000000000000000000000000000000000004c5dc152f1e801800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13737,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cae337b0c02f21e3785c84949cccd61b9a0ba996000000000000000000000000cae337b0c02f21e3785c84949cccd61b9a0ba996000000000000000000000000000000000000000000000000003c9561de46cfd400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13738,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc3fd391414bf8f902726d465d2286ffdff91794000000000000000000000000cc3fd391414bf8f902726d465d2286ffdff9179400000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13739,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005f01f75803f329a072a9243b11d7feb1d9ee4ebb0000000000000000000000005f01f75803f329a072a9243b11d7feb1d9ee4ebb000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13743,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b3e67de00916aca84260b4c243a89e0f5066333e000000000000000000000000b3e67de00916aca84260b4c243a89e0f5066333e000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13744,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b3e67de00916aca84260b4c243a89e0f5066333e000000000000000000000000b3e67de00916aca84260b4c243a89e0f5066333e0000000000000000000000000000000000000000000000000000febd88f4840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13745,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000081423ad03f559a3a9ff38737c56b4497d6c7416600000000000000000000000081423ad03f559a3a9ff38737c56b4497d6c741660000000000000000000000000000000000000000000000000000febd88f4840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13746,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e88c5846b3575eb52fa73b622d34c9a7bcadd5f0000000000000000000000008e88c5846b3575eb52fa73b622d34c9a7bcadd5f0000000000000000000000000000000000000000000000000000febd88f4840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13747,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d33b32db98cf814f9117b75a7bb950f8a152c872000000000000000000000000d33b32db98cf814f9117b75a7bb950f8a152c8720000000000000000000000000000000000000000000000000000febd88f4840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13748,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000acac85b03ce497fa43af7f39a40b59c749c7f627000000000000000000000000acac85b03ce497fa43af7f39a40b59c749c7f6270000000000000000000000000000000000000000000000000000febd88f4840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13749,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e6bdcfaf5e2d4862ddd85294cc0fa72cb2bfda10000000000000000000000008e6bdcfaf5e2d4862ddd85294cc0fa72cb2bfda10000000000000000000000000000000000000000000000000000febd88f4840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13750,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004f90835defacbaa0c9a44fd2528a53377d20e9b00000000000000000000000004f90835defacbaa0c9a44fd2528a53377d20e9b0000000000000000000000000000000000000000000000000000febd88f4840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13751,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002127f3ee6080f0b4dbb1b68ad4e1a2bfcf68f31c0000000000000000000000002127f3ee6080f0b4dbb1b68ad4e1a2bfcf68f31c0000000000000000000000000000000000000000000000000000febd88f4840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13752,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003610fedd465abd506fdddc1a27e599a3e60743890000000000000000000000003610fedd465abd506fdddc1a27e599a3e60743890000000000000000000000000000000000000000000000000000febd88f4840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13753,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000579fd38a3456c82074be725f1460458c03d723d1000000000000000000000000579fd38a3456c82074be725f1460458c03d723d10000000000000000000000000000000000000000000000000000febd88f4840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13754,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e395cf1acb6ee2815f41485ad1a5ada34180e1e0000000000000000000000001e395cf1acb6ee2815f41485ad1a5ada34180e1e0000000000000000000000000000000000000000000000000000febd88f4840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13755,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0877fd8349dea069bbe19945eb3ee2ee1919038000000000000000000000000b0877fd8349dea069bbe19945eb3ee2ee19190380000000000000000000000000000000000000000000000000000febd88f4840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13756,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002148db985350559e78e4326dcc63b0ee42fb57e70000000000000000000000002148db985350559e78e4326dcc63b0ee42fb57e70000000000000000000000000000000000000000000000000000febd88f4840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13757,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001ac1d1b238944e4cc46281899d139e48e36035b00000000000000000000000001ac1d1b238944e4cc46281899d139e48e36035b00000000000000000000000000000000000000000000000000000febd88f4840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13758,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000063b8e7d341ca2629db6570e5d17bd137e72a601000000000000000000000000063b8e7d341ca2629db6570e5d17bd137e72a6010000000000000000000000000000000000000000000000000000febd88f4840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13759,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000198dcf44001d05c04b5576db43ed22ee9510997f000000000000000000000000198dcf44001d05c04b5576db43ed22ee9510997f000000000000000000000000000000000000000000000000001debae4494100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13760,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000051e7be9eec7e86198ae475ccdd5f03319f7522aa00000000000000000000000051e7be9eec7e86198ae475ccdd5f03319f7522aa0000000000000000000000000000000000000000000000000000febd88f4840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13762,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000968774c040cf7ab7dd25657ff172d947cd0259d2000000000000000000000000968774c040cf7ab7dd25657ff172d947cd0259d20000000000000000000000000000000000000000000000000000febd88f4840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13763,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dbb1e8d856bffb7d9f28a49106904250ef3f9d80000000000000000000000000dbb1e8d856bffb7d9f28a49106904250ef3f9d800000000000000000000000000000000000000000000000000000febd88f4840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13764,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1d6068e3cf2d020c26ed9f56375ac6244efbc48000000000000000000000000c1d6068e3cf2d020c26ed9f56375ac6244efbc480000000000000000000000000000000000000000000000000000febd88f4840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13765,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ce9d538cf6f65a62632e4f03811676be17162c68000000000000000000000000ce9d538cf6f65a62632e4f03811676be17162c680000000000000000000000000000000000000000000000000000febd88f4840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13766,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c87ec6959855718a4c20616d4468445df21c2064000000000000000000000000c87ec6959855718a4c20616d4468445df21c206400000000000000000000000000000000000000000000000000acd54e3eccb00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xcac3f812ca41672bafd6d56516aff23e2278a0c620b4b33c47f6b75a699df25f,2022-03-30 08:44:09.000 UTC,0,true -13768,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000315db0a3e7db5ba1a7c5cc7f26cf091ef05bd5c4000000000000000000000000315db0a3e7db5ba1a7c5cc7f26cf091ef05bd5c40000000000000000000000000000000000000000000000000000febd88f4840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13769,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005575b51eae681fc57565717ef94f1ead2abe229c0000000000000000000000005575b51eae681fc57565717ef94f1ead2abe229c0000000000000000000000000000000000000000000000000000febd88f4840000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13770,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000364fae0eec5d11fa906878500c7edcde1466a92e000000000000000000000000364fae0eec5d11fa906878500c7edcde1466a92e0000000000000000000000000000000000000000000000000000ff62d840c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13771,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007cac9ca7914980ea03f30049d7cc34d2dd3aef680000000000000000000000007cac9ca7914980ea03f30049d7cc34d2dd3aef680000000000000000000000000000000000000000000000000000febb34e8a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13772,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9f3d4827f881f6c19d4cedfdf7316e7821cef2c000000000000000000000000f9f3d4827f881f6c19d4cedfdf7316e7821cef2c0000000000000000000000000000000000000000000000000000febb34e8a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13773,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c4b8a67e9f66f0b01fda8d80d869a539b6bc320e000000000000000000000000c4b8a67e9f66f0b01fda8d80d869a539b6bc320e0000000000000000000000000000000000000000000000000000febb34e8a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13774,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6d641b2615db1e054aa3fea7a2e4e6427f4f136000000000000000000000000d6d641b2615db1e054aa3fea7a2e4e6427f4f1360000000000000000000000000000000000000000000000000000febb34e8a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13775,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009e0b2662e6474c57f48f597cb4454c4d74e94f0c0000000000000000000000009e0b2662e6474c57f48f597cb4454c4d74e94f0c0000000000000000000000000000000000000000000000000000febb34e8a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13776,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000054483a3074e5b300c9dfd5c291841d34e4a0a3f800000000000000000000000054483a3074e5b300c9dfd5c291841d34e4a0a3f80000000000000000000000000000000000000000000000000000febb34e8a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13777,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a8dc224d071ea7c895a38ecdb8d4259de3f07940000000000000000000000003a8dc224d071ea7c895a38ecdb8d4259de3f07940000000000000000000000000000000000000000000000000000febb34e8a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13780,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000098bafa71334eae0037d7ce585702d340ece7138300000000000000000000000098bafa71334eae0037d7ce585702d340ece7138300000000000000000000000000000000000000000000000000fa81a83f6d894000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13781,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000084ba64ffc799272e5d52a724ff8f02cf0555832000000000000000000000000084ba64ffc799272e5d52a724ff8f02cf0555832000000000000000000000000000000000000000000000000011c68878f6c5d0c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13784,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2805dfd8a541b38493e2ebd5934e22ff106af5f000000000000000000000000a2805dfd8a541b38493e2ebd5934e22ff106af5f00000000000000000000000000000000000000000000000000ac9856716fe20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13786,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000676e1705c3550dec29f2e03f6267f893af664d0c000000000000000000000000676e1705c3550dec29f2e03f6267f893af664d0c000000000000000000000000000000000000000000000000000db996be0d158000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13792,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000932adf2d3cea3c8238580e81ecfa79c0ad6032b3000000000000000000000000932adf2d3cea3c8238580e81ecfa79c0ad6032b3000000000000000000000000000000000000000000000000014ccbb8a6c358e000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13796,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000de0004eb5a2dfea5f5789c253da23cfe1c68a9f9000000000000000000000000de0004eb5a2dfea5f5789c253da23cfe1c68a9f90000000000000000000000000000000000000000000000000000000003f4797100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -13797,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008aa77780e81dc51f8f90b80210aafa5b44be28010000000000000000000000008aa77780e81dc51f8f90b80210aafa5b44be280100000000000000000000000000000000000000000000000000ce4752812b3ea200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13801,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032181bedfcc11d5a14e23955fe5560b2ac46407600000000000000000000000032181bedfcc11d5a14e23955fe5560b2ac4640760000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13803,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e575233ed38f45c14d18205e6dc4bdbfeca637e4000000000000000000000000e575233ed38f45c14d18205e6dc4bdbfeca637e400000000000000000000000000000000000000000000000001576ce67541b1a500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13804,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d861415f6703ab50ce101c7e6f6a80ada1fc2b1c0000000000000000000000000000000000000000000000006c8f76ad9111a6a6,0xe7606f11a82d9e2a5679cba45f79bd2a371104be26201346e9060b9ce7abde76,2022-02-14 01:13:29.000 UTC,0,true -13809,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000041337285f9c00a3b2f7224cb2f591313ee1fb0f300000000000000000000000041337285f9c00a3b2f7224cb2f591313ee1fb0f300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13814,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003dc29113a1fe2299714c1bbb855fba8bb0b4415c0000000000000000000000003dc29113a1fe2299714c1bbb855fba8bb0b4415c00000000000000000000000000000000000000000000000000502b04164c3e5100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13817,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076e2c6d6f961168dd892516438ec807933d0941f00000000000000000000000076e2c6d6f961168dd892516438ec807933d0941f000000000000000000000000000000000000000000000000034623d158f4acf000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2e741cfb75495cb4293eee5a00b5a456c591d58d0fa06660dcc11aa5a37bfe1a,2021-11-27 22:06:02.000 UTC,0,true -13818,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f7c16d37a07ffd7e570533015a439c805fcb2c00000000000000000000000008f7c16d37a07ffd7e570533015a439c805fcb2c00000000000000000000000000000000000000000000000000020a41ec34825b100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13819,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c04d107c3f21d215772ead8af02d3f4f2321fcd4000000000000000000000000c04d107c3f21d215772ead8af02d3f4f2321fcd40000000000000000000000000000000000000000000000000017b0f70c6e41d000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13821,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e8a40add5f9c5ba0745be38444e96c63d0d9b8b0000000000000000000000002e8a40add5f9c5ba0745be38444e96c63d0d9b8b00000000000000000000000000000000000000000000000002ea11e32ad5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13822,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae60da5f4f1ae7a4f18e5632f389ade1d1a8bcb2000000000000000000000000ae60da5f4f1ae7a4f18e5632f389ade1d1a8bcb200000000000000000000000000000000000000000000000000612d1b3a71de8f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13823,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6b30aba25fadd6acc0a7b314004ddc18cb35311000000000000000000000000d6b30aba25fadd6acc0a7b314004ddc18cb35311000000000000000000000000000000000000000000000000004e30757b97b51000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13824,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd3858559b8bf543333fbce1af7dde964f0f9461000000000000000000000000dd3858559b8bf543333fbce1af7dde964f0f94610000000000000000000000000000000000000000000000000153e6baf037079d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x346255597474201c3b0e665385377fbe23a924de8a6ec8825de979a46065c31b,2021-11-24 22:47:29.000 UTC,0,true -13825,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001bece8c246e30d9067c9b0975651429e4d59c8800000000000000000000000001bece8c246e30d9067c9b0975651429e4d59c8800000000000000000000000000000000000000000000000000009edfebeb9a2a200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13826,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c46cfa41efdcef6e2f29da3b9303f67534b028b0000000000000000000000002c46cfa41efdcef6e2f29da3b9303f67534b028b000000000000000000000000000000000000000000000000000b0b49e6f8bfcd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13827,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000038dbb1eb69ba4e66e6c76526a30a537a584e5cc500000000000000000000000038dbb1eb69ba4e66e6c76526a30a537a584e5cc50000000000000000000000000000000000000000000000000009bb6122162f8400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13828,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d71da19b58b32781f67a5c22336b200f9c7ddf21000000000000000000000000d71da19b58b32781f67a5c22336b200f9c7ddf21000000000000000000000000000000000000000000000000000c2acd124a86c700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13830,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000087fa43b5647d4d98c073de139ee4339394f349b200000000000000000000000087fa43b5647d4d98c073de139ee4339394f349b2000000000000000000000000000000000000000000000000000861316f5e3fe500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13832,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003510bc6a39ef985c35b1562c610de464e45f025a0000000000000000000000003510bc6a39ef985c35b1562c610de464e45f025a000000000000000000000000000000000000000000000000000b9f7e5c6b7ae200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13833,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001bb2aff9a50bd3fa0ec4c780198e6cc8f7dd068a0000000000000000000000001bb2aff9a50bd3fa0ec4c780198e6cc8f7dd068a00000000000000000000000000000000000000000000000000136d4d067f418600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13834,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000027b77419682e8ff5c992c8663e3d3bfe8971256a00000000000000000000000027b77419682e8ff5c992c8663e3d3bfe8971256a0000000000000000000000000000000000000000000000000138757658ff9cca00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13836,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e2de13ed36177ad43cb2a399f8c53de407b13ab9000000000000000000000000e2de13ed36177ad43cb2a399f8c53de407b13ab90000000000000000000000000000000000000000000000000166e6438dabbe6800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13838,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000471d854855c9bd2c92ff45c68dfdf35181c97993000000000000000000000000471d854855c9bd2c92ff45c68dfdf35181c9799300000000000000000000000000000000000000000000000000f9825970e4d10a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13839,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009e4d25d4d44899d53506464a7f8996ae9cc958f10000000000000000000000009e4d25d4d44899d53506464a7f8996ae9cc958f1000000000000000000000000000000000000000000000000000f401378df49cf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13841,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009ccb308c9f732f66b776e07805ea2109f9b1006e0000000000000000000000009ccb308c9f732f66b776e07805ea2109f9b1006e000000000000000000000000000000000000000000000000001e49d06674695d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13842,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a06f48cf3780a5d1cfb243644249840ab459c82e000000000000000000000000a06f48cf3780a5d1cfb243644249840ab459c82e0000000000000000000000000000000000000000000000000016c60d3d244be900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13843,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f149bdfbf2d9ae300c8610b192c0faf4ea5dea50000000000000000000000007f149bdfbf2d9ae300c8610b192c0faf4ea5dea50000000000000000000000000000000000000000000000000019baa30756ddc400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13844,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009da41a6beaf774ef78aaac226a946a5034aac85f0000000000000000000000009da41a6beaf774ef78aaac226a946a5034aac85f00000000000000000000000000000000000000000000000000198de0adb8596400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13845,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000068ac76e092bd073864fc908f51199660157b16aa00000000000000000000000068ac76e092bd073864fc908f51199660157b16aa000000000000000000000000000000000000000000000000000928335ad9cb7000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13846,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004dd1e277bb273ef3b3b7ededb34e39ca90c0844d0000000000000000000000004dd1e277bb273ef3b3b7ededb34e39ca90c0844d0000000000000000000000000000000000000000000000000017ffb6218e529c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13847,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000540e17ccb9a4b9ab23cd9eea1f129b1343bbe89e000000000000000000000000540e17ccb9a4b9ab23cd9eea1f129b1343bbe89e00000000000000000000000000000000000000000000000000a41711cab156d100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x14572f42cfe04bdd8774ef2881e449c612b96a7d0304335d1c2d5bd37b3ff0ca,2021-11-29 10:48:38.000 UTC,0,true -13848,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000062c7bdc15d4c0a02d0a9f7c169c098ef9f44a98100000000000000000000000062c7bdc15d4c0a02d0a9f7c169c098ef9f44a98100000000000000000000000000000000000000000000000000182af521455e1700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13849,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d76503e7e454be25378f7a881c3737b2b21c9590000000000000000000000006d76503e7e454be25378f7a881c3737b2b21c959000000000000000000000000000000000000000000000000058d15e17628000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13856,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9e52a623a6a19f16bde2cd0aa16df7bc2acc1ee000000000000000000000000c9e52a623a6a19f16bde2cd0aa16df7bc2acc1ee00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13863,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f77b1e693cc7ca589de9c75eec759448dc5ee74d000000000000000000000000f77b1e693cc7ca589de9c75eec759448dc5ee74d0000000000000000000000000000000000000000000000000003931a2b1ebf0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13866,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f7c14e402fcc3864d6e1ae1c4747ff1805d05120000000000000000000000003f7c14e402fcc3864d6e1ae1c4747ff1805d051200000000000000000000000000000000000000000000000000644d9f94d6221400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x88455eec9c3283bcccbd41feb50e0cfb8b9fa7dd581ee88d8c7094dfda096ebb,2022-07-28 02:22:29.000 UTC,0,true -13869,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004b0c28517d4f12024c61e8b5a4d09ad44cb876540000000000000000000000004b0c28517d4f12024c61e8b5a4d09ad44cb87654000000000000000000000000000000000000000000000000014a5449159dd40f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13870,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000386fc57656d7e2ef7a64d4b2d8586fc76b1a5921000000000000000000000000386fc57656d7e2ef7a64d4b2d8586fc76b1a5921000000000000000000000000000000000000000000000000014a5449159dd40f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13876,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000acd74381d49863a7d894e65d1a169bad28d4518d000000000000000000000000acd74381d49863a7d894e65d1a169bad28d4518d000000000000000000000000000000000000000000000000009a7270a91f654f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13879,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000aa911d5c666ba32641c88f902db24c2072c61c40000000000000000000000000aa911d5c666ba32641c88f902db24c2072c61c4000000000000000000000000000000000000000000000000007d39215ee4bd4700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13883,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000046aef1f4da528d1fcf08ed3168e6dd0162b0caef00000000000000000000000046aef1f4da528d1fcf08ed3168e6dd0162b0caef00000000000000000000000000000000000000000000000001637522d0bcbf9100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13884,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045eb6f503216a9e790004ff9826a0ccc8354ff3600000000000000000000000045eb6f503216a9e790004ff9826a0ccc8354ff3600000000000000000000000000000000000000000000000000a44f12b27a2a7400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13886,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd884503024358c06d20d286fe7abc99c1ab6fb3000000000000000000000000dd884503024358c06d20d286fe7abc99c1ab6fb30000000000000000000000000000000000000000000000000000feaae895640000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13887,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006c72bc234ee8da7c547fedaffe8fcc3b341594550000000000000000000000006c72bc234ee8da7c547fedaffe8fcc3b341594550000000000000000000000000000000000000000000000000000feaae895640000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13888,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000069688011f03577887b75d392d207eb11281bab20000000000000000000000000000000000000000000000001043561a882930000,,,1,true -13889,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007571eb1e3a18317a87f8d643aa72b921dc228fad0000000000000000000000007571eb1e3a18317a87f8d643aa72b921dc228fad0000000000000000000000000000000000000000000000000000feaae895640000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13890,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ca8e720077bdd6066b2a346de9f450357eff1c50000000000000000000000007ca8e720077bdd6066b2a346de9f450357eff1c50000000000000000000000000000000000000000000000000000feaae895640000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13891,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a70716545fa4557e08f21638da33ef1298840e7f000000000000000000000000a70716545fa4557e08f21638da33ef1298840e7f0000000000000000000000000000000000000000000000000000feaae895640000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13893,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000657b8bf0f4e281d832766b5943a91740a36b34e0000000000000000000000000657b8bf0f4e281d832766b5943a91740a36b34e00000000000000000000000000000000000000000000000000000feaae895640000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13894,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003763f804c7b15159fb1e0a9ab4fb5f552a179dd90000000000000000000000003763f804c7b15159fb1e0a9ab4fb5f552a179dd90000000000000000000000000000000000000000000000000000feaae895640000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13895,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037f0311939fa7cd463a576e6c46e0a35fe562b5d00000000000000000000000037f0311939fa7cd463a576e6c46e0a35fe562b5d0000000000000000000000000000000000000000000000000000feaae895640000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13896,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e6fc4bd7c821d191a210c1fd9a0738c4f73afbc0000000000000000000000000e6fc4bd7c821d191a210c1fd9a0738c4f73afbc0000000000000000000000000000000000000000000000000000feaae895640000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13897,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2c108451ef9a340ca738e470c874c4cc55b561a000000000000000000000000d2c108451ef9a340ca738e470c874c4cc55b561a0000000000000000000000000000000000000000000000000000feaae895640000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13898,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000002abf33485edf704511dfa42dfb8afa71a0450a8e000000000000000000000000000000000000000000000000055a2966fa1696f2,,,1,true -13899,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007eb0e5d522e3e1e5127bb41712744636b8c5485e0000000000000000000000007eb0e5d522e3e1e5127bb41712744636b8c5485e0000000000000000000000000000000000000000000000000000feaae895640000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13900,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000002abf33485edf704511dfa42dfb8afa71a0450a8e00000000000000000000000000000000000000000000000008868d4cad4d690e,,,1,true -13902,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000926db61b0dc59db81b2030e98a9887442e1ab9e7000000000000000000000000926db61b0dc59db81b2030e98a9887442e1ab9e70000000000000000000000000000000000000000000000000000feaae895640000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13903,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008be8b54bf1891e9cf5c7524ee145fdf112ac5da50000000000000000000000008be8b54bf1891e9cf5c7524ee145fdf112ac5da50000000000000000000000000000000000000000000000000000feaae895640000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13905,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e583c8c7ec232d3bc00d8667f26c003b5032b6a3000000000000000000000000e583c8c7ec232d3bc00d8667f26c003b5032b6a30000000000000000000000000000000000000000000000000000febb34e8a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13906,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e583c8c7ec232d3bc00d8667f26c003b5032b6a3000000000000000000000000e583c8c7ec232d3bc00d8667f26c003b5032b6a30000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13907,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ed7bdd301418b06d96c895e4a1e68cf200d34389000000000000000000000000ed7bdd301418b06d96c895e4a1e68cf200d343890000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13908,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fb998faf59b246cd6001772d44a265d16e5c0804000000000000000000000000fb998faf59b246cd6001772d44a265d16e5c08040000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13909,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac3cfb3d1ad099597474ec2a663aa3cac0a2c4d5000000000000000000000000ac3cfb3d1ad099597474ec2a663aa3cac0a2c4d50000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13911,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000038ea73c4299b86c733f7fb11b7ddc4f5bbc46e0b00000000000000000000000038ea73c4299b86c733f7fb11b7ddc4f5bbc46e0b0000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13912,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f582a5819feab1c4e50c1da34405dd36f7300228000000000000000000000000f582a5819feab1c4e50c1da34405dd36f73002280000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13913,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000efabd4c414a7d5a5bafc3328c031e0bbe0b26524000000000000000000000000efabd4c414a7d5a5bafc3328c031e0bbe0b265240000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13914,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000378b280e96d6370dc5b2ba090a9add33d91c86fd000000000000000000000000378b280e96d6370dc5b2ba090a9add33d91c86fd00000000000000000000000000000000000000000000000002385215c8c1209500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1ae8f8565d9e807e12e54b888cc048314c3edd78c84306b8eb697db5b534f8e3,2022-04-09 09:21:29.000 UTC,0,true -13915,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea581366ef46df7d2bb6a6b33718e5a2c25bbf41000000000000000000000000ea581366ef46df7d2bb6a6b33718e5a2c25bbf410000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13916,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c97aec31eb8cfd2276296b8e4752ba8bf07d1772000000000000000000000000c97aec31eb8cfd2276296b8e4752ba8bf07d17720000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13917,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005b3e9cb38c3f3b2c9b32ea0b45cb1b84145845480000000000000000000000005b3e9cb38c3f3b2c9b32ea0b45cb1b84145845480000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13918,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c778b86a9d91cbabd36277088024c24660de1ccc000000000000000000000000c778b86a9d91cbabd36277088024c24660de1ccc0000000000000000000000000000000000000000000000000061743c7719340d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13919,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b73ecf578f050e9a1355b9c7e568c69660b3c1a3000000000000000000000000b73ecf578f050e9a1355b9c7e568c69660b3c1a30000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13920,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094bfc5aae1a892c10387f2f7b45f76522f318ade00000000000000000000000094bfc5aae1a892c10387f2f7b45f76522f318ade0000000000000000000000000000000000000000000000000027385e23e4e40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13921,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a56b43ca0fa370e227e04f892bb1168e32805c47000000000000000000000000a56b43ca0fa370e227e04f892bb1168e32805c470000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13922,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ed991ee4ebd2a9fc687faaa9834bb867b0f57d0c000000000000000000000000ed991ee4ebd2a9fc687faaa9834bb867b0f57d0c0000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13923,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000020d0b2841ea0f89a709e0b7c9abce1321edf084200000000000000000000000020d0b2841ea0f89a709e0b7c9abce1321edf08420000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13924,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b346d91dfccbd53a43b4003a99f30c729412d15d000000000000000000000000b346d91dfccbd53a43b4003a99f30c729412d15d0000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13925,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9331396e253c39691ae73ac7da5127048e6a5bc000000000000000000000000e9331396e253c39691ae73ac7da5127048e6a5bc000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13926,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000089d2fe7fd0bd029d0d1ddad4619a555a46ef4f5000000000000000000000000089d2fe7fd0bd029d0d1ddad4619a555a46ef4f50000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13928,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000093806f29ccf0c6d992107913f24c0796cada5d5800000000000000000000000093806f29ccf0c6d992107913f24c0796cada5d58000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13929,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007428573fe900b09aee5d11913e81053cf386029c0000000000000000000000007428573fe900b09aee5d11913e81053cf386029c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13930,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f71ade9a6f0e548b4c54fe6333c44acaa0277070000000000000000000000006f71ade9a6f0e548b4c54fe6333c44acaa027707000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13931,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008b5a2ab94fa6065ec4d66a78b21be36c699d2bb80000000000000000000000008b5a2ab94fa6065ec4d66a78b21be36c699d2bb8000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13932,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049ac0a98c73a9da0d722c2d44dc2b6c261cf793600000000000000000000000049ac0a98c73a9da0d722c2d44dc2b6c261cf7936000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13933,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a33defcd8507b606bb1776246e24b9ac81de3e2b000000000000000000000000a33defcd8507b606bb1776246e24b9ac81de3e2b0000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13934,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004221eb734ecbbb279f356679edbee5bf21481fae0000000000000000000000004221eb734ecbbb279f356679edbee5bf21481fae000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13935,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff1b8bd40f333a3daf9f2f5326e11ae38ca74249000000000000000000000000ff1b8bd40f333a3daf9f2f5326e11ae38ca74249000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13937,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000adbc690ea8138a409cfaf4ad20c4687d437a8b7d000000000000000000000000adbc690ea8138a409cfaf4ad20c4687d437a8b7d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13938,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7cd515939a31a2880bf4d98ff01d0c98fe06c89000000000000000000000000d7cd515939a31a2880bf4d98ff01d0c98fe06c89000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13939,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b9d046134839453197704912587376e4d6fd4173000000000000000000000000b9d046134839453197704912587376e4d6fd4173000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13940,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ff1bd9e54a04c1d3a506ce65a310257165cfc1e0000000000000000000000007ff1bd9e54a04c1d3a506ce65a310257165cfc1e000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13941,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006be80aa1185f13ad6413892a8cb011fe98607ad20000000000000000000000006be80aa1185f13ad6413892a8cb011fe98607ad2000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13942,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007061ff738f5a687391033dfac6a13b319d01853c0000000000000000000000007061ff738f5a687391033dfac6a13b319d01853c0000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13943,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008a7f3bb21c1294ce86363c749d863de828fd8a420000000000000000000000008a7f3bb21c1294ce86363c749d863de828fd8a42000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13944,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b87445dae401ee96d23c1a764df0e51f5c0c7e00000000000000000000000000b87445dae401ee96d23c1a764df0e51f5c0c7e00000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13945,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc619ccbe3767e9879795f503bdc307bf0471cdf000000000000000000000000dc619ccbe3767e9879795f503bdc307bf0471cdf000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13946,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d446d0f677aabc963e45a7e0282794dd382a56cb000000000000000000000000d446d0f677aabc963e45a7e0282794dd382a56cb000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13947,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c65af1aed293190166f140040c519264b82d97d3000000000000000000000000c65af1aed293190166f140040c519264b82d97d3000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13948,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000013738ebdd225434c565d57166e557ce07e49f57a00000000000000000000000013738ebdd225434c565d57166e557ce07e49f57a000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13949,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055c74e5d2e12ff0a0aeafd8ddc4cc438b3ec490a00000000000000000000000055c74e5d2e12ff0a0aeafd8ddc4cc438b3ec490a000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13950,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003699c0bdeb3d7489ef9123947afa7de57552226b0000000000000000000000003699c0bdeb3d7489ef9123947afa7de57552226b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13951,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea22ec383782641db5112198c11b1f782c1bb0b1000000000000000000000000ea22ec383782641db5112198c11b1f782c1bb0b1000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13952,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008760e69e17351123d13d2a9102d3d787bed1206c0000000000000000000000008760e69e17351123d13d2a9102d3d787bed1206c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13953,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ce972a8b898a1ec6f6a1f2254065a2e8edc943f0000000000000000000000006ce972a8b898a1ec6f6a1f2254065a2e8edc943f0000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13954,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000072cd5ab60d1494759ba1b76d8bbc732ae0e7a52700000000000000000000000072cd5ab60d1494759ba1b76d8bbc732ae0e7a527000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13955,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dcb876ccb0408266f75fe8ce7d19f15a5a25dc68000000000000000000000000dcb876ccb0408266f75fe8ce7d19f15a5a25dc68000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13956,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001905bc213f329050fccfd8688a37f072c0ad522e0000000000000000000000001905bc213f329050fccfd8688a37f072c0ad522e000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13957,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008a434cc9e0171d0dffc624268c34bc21fa827fcb0000000000000000000000008a434cc9e0171d0dffc624268c34bc21fa827fcb000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13958,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004596fe685ee632aec056a39801c5c7cac7489f2f0000000000000000000000004596fe685ee632aec056a39801c5c7cac7489f2f000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13959,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043b438a636f6b7b5119caf80d0847f79b9f51b2200000000000000000000000043b438a636f6b7b5119caf80d0847f79b9f51b22000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13960,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a638b0cda2eb11f6481d93f49c9399c19e65ce94000000000000000000000000a638b0cda2eb11f6481d93f49c9399c19e65ce94000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13961,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000054007de4177bdeb85934fd2d1b58b1082b6fb7bb00000000000000000000000054007de4177bdeb85934fd2d1b58b1082b6fb7bb000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13962,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001517de48b5afccc8c676fdd99d0a6c4b1a1506a60000000000000000000000001517de48b5afccc8c676fdd99d0a6c4b1a1506a60000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13963,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c10c3d54383c213b87bd41cc78f4a813d8cea24a000000000000000000000000c10c3d54383c213b87bd41cc78f4a813d8cea24a000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13964,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e59a8903894d1871765123a8e0e4a9188ce0bdf0000000000000000000000002e59a8903894d1871765123a8e0e4a9188ce0bdf000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13965,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f0a661b2648b4a39af50ca869ea718e9379df487000000000000000000000000f0a661b2648b4a39af50ca869ea718e9379df487000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13966,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d615d68db3b7f5a9ee4223e9cf4e213e56cb5412000000000000000000000000d615d68db3b7f5a9ee4223e9cf4e213e56cb5412000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13967,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000ad1c55b19ad189562ab039198bc5259e41598ab0000000000000000000000000ad1c55b19ad189562ab039198bc5259e41598ab000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13968,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e431058e8937788e0a2b22a3037dd6c7243ec260000000000000000000000000e431058e8937788e0a2b22a3037dd6c7243ec260000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13969,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a9cf89096b79fc10ef3f175c5094dba8219dcad4000000000000000000000000a9cf89096b79fc10ef3f175c5094dba8219dcad4000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13970,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d72a737be8c884a5f93908b7257d1e5d186ec987000000000000000000000000d72a737be8c884a5f93908b7257d1e5d186ec987000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13971,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000070e8e9e531eba77eddd0c6c42080a077254e435400000000000000000000000070e8e9e531eba77eddd0c6c42080a077254e43540000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13972,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000910b8e7f2e20e6899ad8d94b20aac648140213fe000000000000000000000000910b8e7f2e20e6899ad8d94b20aac648140213fe0000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13973,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000491cdd0df6458128de36676840b9f03e13444d68000000000000000000000000491cdd0df6458128de36676840b9f03e13444d6800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13974,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a049828c4c731619b712a85f7206c97654c98588000000000000000000000000a049828c4c731619b712a85f7206c97654c9858800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13975,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000051352c34e58a430d0e2dd96baea5076b956d543200000000000000000000000051352c34e58a430d0e2dd96baea5076b956d54320000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13976,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004950c1b741e7db211c9934dc1c8af912e0af6d010000000000000000000000004950c1b741e7db211c9934dc1c8af912e0af6d010000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13977,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003b6cf92855c9e36b82babc001dfae0ae00837edf0000000000000000000000003b6cf92855c9e36b82babc001dfae0ae00837edf0000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13978,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004bb1236ea6dafe4e96e9f89c19e1cfbe080bd26e0000000000000000000000004bb1236ea6dafe4e96e9f89c19e1cfbe080bd26e0000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13980,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000731bdb08cdb43b510d5d65e41568325c2122c0b2000000000000000000000000731bdb08cdb43b510d5d65e41568325c2122c0b20000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13981,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c43d5475758ae9dc53b5e586b6354cd2787dd603000000000000000000000000c43d5475758ae9dc53b5e586b6354cd2787dd6030000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13983,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc4fca3ce3571bfb598c475a95dedb02bee8feff000000000000000000000000cc4fca3ce3571bfb598c475a95dedb02bee8feff0000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13984,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d63559f3fd761efc2eb35bb8bdd2fa95fb5cd446000000000000000000000000d63559f3fd761efc2eb35bb8bdd2fa95fb5cd446000000000000000000000000000000000000000000000000008286015568797400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13985,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000ad549234d500b79608264ac69ed358f66e244e80000000000000000000000000ad549234d500b79608264ac69ed358f66e244e80000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13986,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000038084c3d816529d0909cfcff6c56a4da3f308d0300000000000000000000000038084c3d816529d0909cfcff6c56a4da3f308d030000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13987,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f5d24542b2538f0c2b3eb291e7cdf0f3d5516a73000000000000000000000000f5d24542b2538f0c2b3eb291e7cdf0f3d5516a730000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13988,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000096b09c83e56efb894f9b37483b79d569e143ed1d00000000000000000000000096b09c83e56efb894f9b37483b79d569e143ed1d000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -13989,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc232401ff59c1457123a1b59e2da06c3b0c6102000000000000000000000000dc232401ff59c1457123a1b59e2da06c3b0c610200000000000000000000000000000000000000000000000000a46c1987f592c500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x44718591410e8a6134882fcfabc04a84a4dfe4e9b0bad5472b42e76806550087,2022-02-12 07:14:02.000 UTC,0,true -14011,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b30096786fd20835715ddca2b60c0ec5343ca26a000000000000000000000000b30096786fd20835715ddca2b60c0ec5343ca26a000000000000000000000000000000000000000000000000008a7a17d8aa4dcd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14012,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003be5a478c352e786f747dcf2f77048460da198b30000000000000000000000003be5a478c352e786f747dcf2f77048460da198b300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14013,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002fbea2829b51ff4c5f202beae970075847baaba40000000000000000000000002fbea2829b51ff4c5f202beae970075847baaba400000000000000000000000000000000000000000000000001534c920cb8909400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14015,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000435115b69f6c7377453e7122cce8ce645af30dc5000000000000000000000000435115b69f6c7377453e7122cce8ce645af30dc5000000000000000000000000000000000000000000000000001fb1dd3c16180000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14017,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017738112576aa140e29b3b68d21269ef6bff7a4300000000000000000000000017738112576aa140e29b3b68d21269ef6bff7a430000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14018,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000003d60664aec76bb0ad73690f59a299dd0510b4dc00000000000000000000000003d60664aec76bb0ad73690f59a299dd0510b4dc0000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14019,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fcecd9bf045f00dd5d826b091a13c8fc516938b0000000000000000000000000fcecd9bf045f00dd5d826b091a13c8fc516938b00000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14020,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae0fc1f7bd56fca484820e28435f060bb1d12d05000000000000000000000000ae0fc1f7bd56fca484820e28435f060bb1d12d050000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14021,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000006e8ed0e05741f50f71550aa557b0f8deb406d7c00000000000000000000000006e8ed0e05741f50f71550aa557b0f8deb406d7c0000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14022,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3b97b496d641d2c2123b8f2cd0cb07b4419b0c1000000000000000000000000a3b97b496d641d2c2123b8f2cd0cb07b4419b0c10000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14023,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ffabe7d64185bc2d73e53d533d501e21a6877f90000000000000000000000003ffabe7d64185bc2d73e53d533d501e21a6877f90000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14024,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a556b2ee089f046d986e61fd6d0facebb3abfd86000000000000000000000000a556b2ee089f046d986e61fd6d0facebb3abfd860000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14025,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b833a762c2d7dd4d1c0ef82a182ed892195f5546000000000000000000000000b833a762c2d7dd4d1c0ef82a182ed892195f55460000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14026,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080a6e3295723d9497bd9927433a21e8ae6b5d8a800000000000000000000000080a6e3295723d9497bd9927433a21e8ae6b5d8a80000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14027,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9c39034b4df95c96fb8c413755a2b6611fec832000000000000000000000000f9c39034b4df95c96fb8c413755a2b6611fec8320000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14028,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000423c207e9ca9797fa420f657ee8a68947d9a1fb9000000000000000000000000423c207e9ca9797fa420f657ee8a68947d9a1fb90000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14029,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000212ca1bdbeab58d4ece78a6c1fdbe95d23a7bea3000000000000000000000000212ca1bdbeab58d4ece78a6c1fdbe95d23a7bea30000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14030,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de0eb11d50dd1a53a10554e9172c7efe6495a113000000000000000000000000de0eb11d50dd1a53a10554e9172c7efe6495a1130000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14031,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b660eb39b1dc18330be9efdb91e4928ebc41d7df000000000000000000000000b660eb39b1dc18330be9efdb91e4928ebc41d7df0000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14032,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003b5aed04415ebe946cb366d088edf914fc66f0050000000000000000000000003b5aed04415ebe946cb366d088edf914fc66f0050000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14033,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc69cd67c58d7349d5648fdd2ea30e1564e20bdf000000000000000000000000bc69cd67c58d7349d5648fdd2ea30e1564e20bdf0000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14034,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d27473941c088ffbf1f79dbd784fc64db783b1a6000000000000000000000000d27473941c088ffbf1f79dbd784fc64db783b1a60000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14035,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eb544a124126a6d9ea07e8e94ac5a5fb0721c955000000000000000000000000eb544a124126a6d9ea07e8e94ac5a5fb0721c9550000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14038,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9054b28d9bf8861a3caba7b1d5160596587cbd5000000000000000000000000e9054b28d9bf8861a3caba7b1d5160596587cbd50000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14039,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ee6119eb22f6f73a8ff42a2f7f591b6a8b332aa0000000000000000000000003ee6119eb22f6f73a8ff42a2f7f591b6a8b332aa0000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14040,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000583dc6999c5db47a477143b85a3cdfbd65bf3cc0000000000000000000000000583dc6999c5db47a477143b85a3cdfbd65bf3cc00000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14041,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000040aa839408d7c4a0bb7c4d03a8859f8d7c7a586200000000000000000000000040aa839408d7c4a0bb7c4d03a8859f8d7c7a58620000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14042,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e1bcbd688e0c9f853f3a0d04654dd769c624848b000000000000000000000000e1bcbd688e0c9f853f3a0d04654dd769c624848b0000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14044,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002fca4727873be4b050026ecc4e3d555f246f762d0000000000000000000000002fca4727873be4b050026ecc4e3d555f246f762d0000000000000000000000000000000000000000000000000000fed27d5f880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14045,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a88efd6d2014aa6351f03129e233169288688080000000000000000000000002a88efd6d2014aa6351f03129e233169288688080000000000000000000000000000000000000000000000000017db32e1655d8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14046,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009e9057e00024172126a37395118f49214dabd7910000000000000000000000009e9057e00024172126a37395118f49214dabd7910000000000000000000000000000000000000000000000000006a9be44aa103d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14048,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0deac064652083d2d39d331a9931218fac6c517000000000000000000000000b0deac064652083d2d39d331a9931218fac6c517000000000000000000000000000000000000000000000000001fd36cd60b4b4300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14049,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000daf896a9888df3827737f29e8f8ba128a4026bce000000000000000000000000daf896a9888df3827737f29e8f8ba128a4026bce000000000000000000000000000000000000000000000002c5da7142cfe0185900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14052,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59900000000000000000000000068f180fcce6836688e9084f035309e29bf0a2095000000000000000000000000485b29c2ce1e8ab267dfb1f66ae1d79ae65597ab000000000000000000000000485b29c2ce1e8ab267dfb1f66ae1d79ae65597ab000000000000000000000000000000000000000000000000000000000048e3f200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xee72b1d1d7aebcafec0a9913de0243fb5a4fd6f2f2536e257310f3de73a08501,2021-11-25 12:38:06.000 UTC,0,true -14055,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f16247eaec7517320ca3121619702c119039ede5000000000000000000000000f16247eaec7517320ca3121619702c119039ede500000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14059,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000292cca8955b726a53c7ad7facea051f42d88f8a5000000000000000000000000292cca8955b726a53c7ad7facea051f42d88f8a5000000000000000000000000000000000000000000000000015e57e0f451770000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14060,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000007e9a33df66d96a441f5783ce4bbd002fe14d6a42000000000000000000000000000000000000000000000000056a97255b65b0ec,,,1,true -14061,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea24f605ff7a7faff0ec68859e9d28b21228aea7000000000000000000000000ea24f605ff7a7faff0ec68859e9d28b21228aea7000000000000000000000000000000000000000000000000009fdf42f6e4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14064,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000b06fabe92cc26f03ecc7d42ebc02201a06bccc0d000000000000000000000000b06fabe92cc26f03ecc7d42ebc02201a06bccc0d0000000000000000000000000000000000000000000000152ad43133965561d300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14065,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a8167145a4b67c64c76d1a56ae713abee0a1e8f0000000000000000000000005a8167145a4b67c64c76d1a56ae713abee0a1e8f00000000000000000000000000000000000000000000000002c68af0bb14000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14068,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076288be212c272dd56dc9a73f1a25d2151dbb2c800000000000000000000000076288be212c272dd56dc9a73f1a25d2151dbb2c8000000000000000000000000000000000000000000000000003a2cee48243e5b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14070,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f8a95c3213f1226385ad0d750a0dd0b73b501930000000000000000000000006f8a95c3213f1226385ad0d750a0dd0b73b501930000000000000000000000000000000000000000000000000036a3ed159101df00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14071,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c4ca96d4e63af64fb7896ab41e0aa871a59fabb0000000000000000000000000c4ca96d4e63af64fb7896ab41e0aa871a59fabb000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14072,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8fe303642401cfbb750b435854ceff9aa21fde6000000000000000000000000e8fe303642401cfbb750b435854ceff9aa21fde600000000000000000000000000000000000000000000000000a142b73870b7fe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14073,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000124c2c231a8bc7967c78172f51ea419e256fe1a9000000000000000000000000124c2c231a8bc7967c78172f51ea419e256fe1a9000000000000000000000000000000000000000000000000057f74bfda81e90900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14075,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e53ade7d9a62adc6e5ec926272d508ce8729f056000000000000000000000000e53ade7d9a62adc6e5ec926272d508ce8729f056000000000000000000000000000000000000000000000000001a662a2d75dd9900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14076,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078f28811eaf483a50a2c1776040a6189c3e5b28a00000000000000000000000078f28811eaf483a50a2c1776040a6189c3e5b28a0000000000000000000000000000000000000000000000000161e638c671a18700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5c6ac0f966d2159b20f39d400ecb320b94d52167e9f3359a4eeffb786f03900f,2022-02-20 22:51:55.000 UTC,0,true -14079,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c04d107c3f21d215772ead8af02d3f4f2321fcd4000000000000000000000000c04d107c3f21d215772ead8af02d3f4f2321fcd400000000000000000000000000000000000000000000000000009fc776c6100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14080,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c04d107c3f21d215772ead8af02d3f4f2321fcd4000000000000000000000000c04d107c3f21d215772ead8af02d3f4f2321fcd400000000000000000000000000000000000000000000000000677dd80f86d73e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14081,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000bfe98ba61eb224f657d392333f213f6d75cc6972000000000000000000000000bfe98ba61eb224f657d392333f213f6d75cc6972000000000000000000000000000000000000000000000000000000001d5b950d00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14082,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000030288b14c84a10ee2c3391da1f680482b6ef1f6a00000000000000000000000030288b14c84a10ee2c3391da1f680482b6ef1f6a000000000000000000000000000000000000000000000000000000001d72bdf600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14083,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000009508ef3443ef753e5ccf158bf7a8a6e2f5de56c00000000000000000000000009508ef3443ef753e5ccf158bf7a8a6e2f5de56c0000000000000000000000000000000000000000000000000000000001d79f68200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14084,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000000e53ff2dbbc64a45f21c020feeac042f5f15be390000000000000000000000000e53ff2dbbc64a45f21c020feeac042f5f15be39000000000000000000000000000000000000000000000000000000001d798ce800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14085,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000df6526993e056e43241bdc9c8711cd2de2e5cc13000000000000000000000000df6526993e056e43241bdc9c8711cd2de2e5cc13000000000000000000000000000000000000000000000000000000001d6ebc3d00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14086,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000051e6e92e81c9ac173d45390f5f5bf9463ffd3ca000000000000000000000000051e6e92e81c9ac173d45390f5f5bf9463ffd3ca000000000000000000000000000000000000000000000000001419e3759e1976100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14092,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000787e5e1f40881ddec138253d9735ac5207659096000000000000000000000000787e5e1f40881ddec138253d9735ac520765909600000000000000000000000000000000000000000000000000046a9a6083205500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14094,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000f1687c086e7565c96b395f484c42aad406e6c140000000000000000000000000f1687c086e7565c96b395f484c42aad406e6c1400000000000000000000000000000000000000000000000000b5ef79e5c9a0d400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x0905e088343a54e7ff334f8fb6bd47293852c499d4bc992fc01202a43b6e60b3,2021-12-25 18:00:46.000 UTC,0,true -14095,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d49e5771bea214f10a31ac160e6159717481c432000000000000000000000000d49e5771bea214f10a31ac160e6159717481c432000000000000000000000000000000000000000000000000017fb16d83be000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14097,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e95c0a312687e01bd27f62d56d80f2ff71c2cb11000000000000000000000000e95c0a312687e01bd27f62d56d80f2ff71c2cb110000000000000000000000000000000000000000000000000150d6e367d3c8d500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14099,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000009f626dbfc2a3b9e140ee7b6c317ed6b60e0f33bc0000000000000000000000009f626dbfc2a3b9e140ee7b6c317ed6b60e0f33bc000000000000000000000000000000000000000000000000000000001cc1864b00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xa198d6248a2cb1d7c3a37bc15aed5a29df99e4e4f6782e906d90f2d3b080e247,2022-07-29 23:23:29.000 UTC,0,true -14100,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008aef8de06aa03916eccd39d7552c81bbdf2693490000000000000000000000008aef8de06aa03916eccd39d7552c81bbdf26934900000000000000000000000000000000000000000000000000c73be88a799d5b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14101,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000066f0b8003010bc8fc592879ef700509d937f542300000000000000000000000066f0b8003010bc8fc592879ef700509d937f54230000000000000000000000000000000000000000000000000083470522a942d700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14102,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e81669100000000000000000000000001a145c9338cad4720149cda57d2178d7906829900000000000000000000000001a145c9338cad4720149cda57d2178d7906829900000000000000000000000000000000000000000000000070e0b4640846e11000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14103,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004fba1425c65f42f8c3178d6c4738efa55de814d50000000000000000000000004fba1425c65f42f8c3178d6c4738efa55de814d5000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14105,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da3d7dbb9fe32ed3b4455ba0507b9c66b4607710000000000000000000000000da3d7dbb9fe32ed3b4455ba0507b9c66b460771000000000000000000000000000000000000000000000000000dfcf68ae79960a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x91bb9cda780df4023f05acb666e3fc1a16b78113c224d399b15de06cb0fd8646,2022-03-05 05:30:07.000 UTC,0,true -14106,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7a7c1cfc1d66ea62b9c06b0a1b05f8e835c76c8000000000000000000000000d7a7c1cfc1d66ea62b9c06b0a1b05f8e835c76c8000000000000000000000000000000000000000000000000003ff2e795f5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd3a4551595e189ca77a59fe73acefd9afbefd4480827485f2a8d43d06aefc4bf,2022-06-28 07:00:56.000 UTC,0,true -14107,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c4ca96d4e63af64fb7896ab41e0aa871a59fabb0000000000000000000000000c4ca96d4e63af64fb7896ab41e0aa871a59fabb000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14110,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dce8c8cc21841b1b257c6683fd4778a902c68c69000000000000000000000000dce8c8cc21841b1b257c6683fd4778a902c68c69000000000000000000000000000000000000000000000000001af43b103a96c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14113,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e81669100000000000000000000000051f033a3eaf8e446bacd1b0a0c4f5c1dd783292200000000000000000000000051f033a3eaf8e446bacd1b0a0c4f5c1dd783292200000000000000000000000000000000000000000000000070df7fb51b387ee000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14114,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000e60d9c72c5ec15136b942525407d07527f2df2b7000000000000000000000000e60d9c72c5ec15136b942525407d07527f2df2b700000000000000000000000000000000000000000000000e5e5b8a4d481c42b100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14115,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ed78d87d23c6df3c879fa185e4e45f285b756dc0000000000000000000000004ed78d87d23c6df3c879fa185e4e45f285b756dc000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x176fa3118f5eea5b70e943cbe719f8909c3f7e79c9cc95b61027ac376ed8ef13,2022-01-31 19:02:14.000 UTC,0,true -14116,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007362aba7c2667bf2dad14111de0252cf848dc2e60000000000000000000000007362aba7c2667bf2dad14111de0252cf848dc2e600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14122,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e1f00ed84b2796bf54c44f7b2a1739005a978788000000000000000000000000e1f00ed84b2796bf54c44f7b2a1739005a978788000000000000000000000000000000000000000000000000019d10b6e1245adc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14123,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000000258da40e011acb8e0f6308d6dda4de363c9b604000000000000000000000000000000000000000000000004ef3aacc1f6d7965b,,,1,true -14124,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000258da40e011acb8e0f6308d6dda4de363c9b6040000000000000000000000000258da40e011acb8e0f6308d6dda4de363c9b604000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14127,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007a8e7b7197e94d2cb194dbed7a80575c047a75750000000000000000000000007a8e7b7197e94d2cb194dbed7a80575c047a757500000000000000000000000000000000000000000000000003f2cc7a70f7f90f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14128,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004020cfce02de3c10b440ec0f229ee583c456a81e0000000000000000000000004020cfce02de3c10b440ec0f229ee583c456a81e000000000000000000000000000000000000000000000000000073ca600c320000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14130,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000175d7ac3844ac969c1d17431e59ff057ad17ee3b000000000000000000000000175d7ac3844ac969c1d17431e59ff057ad17ee3b00000000000000000000000000000000000000000000000000006c71476e403d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14131,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a34417c1837171910f4d72ad4876a83e9d3103c9000000000000000000000000a34417c1837171910f4d72ad4876a83e9d3103c9000000000000000000000000000000000000000000000000009eb2a15263458300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14134,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000056279d1110c8adf39b2cf8e8657356d0854a5bbf00000000000000000000000056279d1110c8adf39b2cf8e8657356d0854a5bbf0000000000000000000000000000000000000000000000000207f5bed76f0adc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14136,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d57f561135ea6fd6b2f37627dd836c1d7162ff0b000000000000000000000000d57f561135ea6fd6b2f37627dd836c1d7162ff0b0000000000000000000000000000000000000000000000000000fea89489800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14137,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055e7b3038aa65781ff936221447e2b6caa4a4e8b00000000000000000000000055e7b3038aa65781ff936221447e2b6caa4a4e8b0000000000000000000000000000000000000000000000000019d3c8e9c9c1c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14140,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000001892ccee554fb70d50f96e42f287c155980bd8800000000000000000000000001892ccee554fb70d50f96e42f287c155980bd88000000000000000000000000000000000000000000000000009a8fc50ef2542600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14142,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032fd820024c3c6aac07b7aa58986961c94fa1f3800000000000000000000000032fd820024c3c6aac07b7aa58986961c94fa1f380000000000000000000000000000000000000000000000000000fea89489800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14144,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a9038d842354fd62d5604eefab491ec0a60b3869000000000000000000000000a9038d842354fd62d5604eefab491ec0a60b38690000000000000000000000000000000000000000000000000000fea89489800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14146,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000098f990ef129d59a3e511fa6471cab60c215cdfeb00000000000000000000000098f990ef129d59a3e511fa6471cab60c215cdfeb00000000000000000000000000000000000000000000000003782dace9d9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x67f9e7a9ce31ab98561f0e49b387c30ea556fbffac0445d5cf56409702ee0cbd,2021-12-26 23:14:47.000 UTC,0,true -14148,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f12f8d68c75d4d8852808e1be5cd8cf7776ef2d0000000000000000000000000f12f8d68c75d4d8852808e1be5cd8cf7776ef2d0000000000000000000000000000000000000000000000000004402aaea81858b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14149,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000043c7df1186687da64730999e727a7ca668ec719000000000000000000000000043c7df1186687da64730999e727a7ca668ec7190000000000000000000000000000000000000000000000000000fea89489800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14151,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039d2d986dd5bfa5afb50a292b681f984591e7ebd00000000000000000000000039d2d986dd5bfa5afb50a292b681f984591e7ebd0000000000000000000000000000000000000000000000000000fea89489800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14152,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f26988ede871862233aed3773572ae22e6195e3b000000000000000000000000f26988ede871862233aed3773572ae22e6195e3b0000000000000000000000000000000000000000000000000046e96616fef20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14153,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ea39e9a3cf88258befd321bb747a20ab8a4b33b0000000000000000000000002ea39e9a3cf88258befd321bb747a20ab8a4b33b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14157,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000262dca9b8906e73923736ba7ef71b0ff10f2da7a000000000000000000000000262dca9b8906e73923736ba7ef71b0ff10f2da7a0000000000000000000000000000000000000000000000000000fea89489800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14158,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8c89e3cfe798e7dee53acfd61bc31355cceecb3000000000000000000000000e8c89e3cfe798e7dee53acfd61bc31355cceecb30000000000000000000000000000000000000000000000000000fea89489800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14159,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e6a8ca6bf0dfaa5e0c27be2fa32d8f242b3be9f0000000000000000000000006e6a8ca6bf0dfaa5e0c27be2fa32d8f242b3be9f000000000000000000000000000000000000000000000000005b3a0ecd8d9c2e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14160,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b39d44640438d2dff075e8046569ef0f8d3510ed000000000000000000000000b39d44640438d2dff075e8046569ef0f8d3510ed0000000000000000000000000000000000000000000000000000fea89489800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14161,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f809a9b799697b4fdd656c29deac20ed55d330b0000000000000000000000006f809a9b799697b4fdd656c29deac20ed55d330b00000000000000000000000000000000000000000000000006ede09beedce60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14162,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc2e7d827c788005ba971599d7f7dc911673a6f5000000000000000000000000bc2e7d827c788005ba971599d7f7dc911673a6f500000000000000000000000000000000000000000000000000901b15612cccd900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14163,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007174c6cf7fa9c714feb89575c9431815cd595aa30000000000000000000000007174c6cf7fa9c714feb89575c9431815cd595aa30000000000000000000000000000000000000000000000000000fea89489800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14164,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000986a1de622305f441a3c763036ca06da417ffff40000000000000000000000000000000000000000000000002602dc56002bb0c7,,,1,true -14165,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2c02702ea8f4fe7b8325e9d613a2ba99454f9ff000000000000000000000000d2c02702ea8f4fe7b8325e9d613a2ba99454f9ff0000000000000000000000000000000000000000000000000000fea89489800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14166,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b98fc0a7c413db271f93dd03aa828d6359564266000000000000000000000000b98fc0a7c413db271f93dd03aa828d635956426600000000000000000000000000000000000000000000000004d2131d003ea32300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14167,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d344a3e06ef05ffe63ec09472ca8dd9f01d05d00000000000000000000000006d344a3e06ef05ffe63ec09472ca8dd9f01d05d000000000000000000000000000000000000000000000000002c5536b24d12f8300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xbfc9275b6bc817d565df2ccb9db4b2d89cc39f509bcd5d2b64e0f96a88c5be17,2021-12-20 08:12:21.000 UTC,0,true -14168,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000faec9e70cba0b0f174cbab4b1c19b6cb7cfca25e000000000000000000000000faec9e70cba0b0f174cbab4b1c19b6cb7cfca25e0000000000000000000000000000000000000000000000000063a07b7f306a6d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14169,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ee970cd2aee28778c1bd384283c80c50c19f1616000000000000000000000000ee970cd2aee28778c1bd384283c80c50c19f16160000000000000000000000000000000000000000000000002dc84eb27b7fb30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14171,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ee64532f1b2e2d32a9ed45689e879c04f9e5d648000000000000000000000000ee64532f1b2e2d32a9ed45689e879c04f9e5d64800000000000000000000000000000000000000000000000000730b5bae13705d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14175,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000182527962c891ef2b4cacec7b06618c902314bb3000000000000000000000000182527962c891ef2b4cacec7b06618c902314bb3000000000000000000000000000000000000000000000000004e3c0536bfe1fb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14176,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005cfaa12bbe1d09f29b4ccf91f795a7386b92b6250000000000000000000000005cfaa12bbe1d09f29b4ccf91f795a7386b92b625000000000000000000000000000000000000000000000000007c20bc202cceb900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14177,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009511bab567161d053b43f56f416b113aba3e7c1d0000000000000000000000009511bab567161d053b43f56f416b113aba3e7c1d00000000000000000000000000000000000000000000000000a4391f86a6b2e700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14179,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000755aaa8fe876d7d6c28c8988ad0912150f72abce0000000000000000000000000000000000000000000000001b30390dbc701540,,,1,true -14180,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e3904f1a245dba803b6c5370da750988d475f4bd000000000000000000000000e3904f1a245dba803b6c5370da750988d475f4bd0000000000000000000000000000000000000000000000000364145bedf2353d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14182,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d5e1e0fafe09bfe954f33f32fc624f0b2e2caaa3000000000000000000000000d5e1e0fafe09bfe954f33f32fc624f0b2e2caaa300000000000000000000000000000000000000000000000001e165fda8dc549e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14185,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006c50c278d4f3714919b046a01981698685093b470000000000000000000000006c50c278d4f3714919b046a01981698685093b4700000000000000000000000000000000000000000000000001d9dfebed4fa88400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14187,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000001dba9923efb6b28612f3a7ba90ece5657a1941250000000000000000000000000000000000000000000000004563918244f40000,,,1,true -14188,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d3ed789252bac04595ee5903d8a2421c43353030000000000000000000000000d3ed789252bac04595ee5903d8a2421c433530300000000000000000000000000000000000000000000000000399d9f8ade478400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14190,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000095346e29fbee4c60bfa00d4e2d1912d579cdc76f00000000000000000000000095346e29fbee4c60bfa00d4e2d1912d579cdc76f0000000000000000000000000000000000000000000000000000000013d9f78e00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14192,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000edba99b8c5c6e1b9c8a9b34fcd00505d8511f913000000000000000000000000edba99b8c5c6e1b9c8a9b34fcd00505d8511f91300000000000000000000000000000000000000000000000000027ca57357c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14193,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000033d14308158623a785b6e85a30e64dbb16b4ceed00000000000000000000000033d14308158623a785b6e85a30e64dbb16b4ceed000000000000000000000000000000000000000000000000005e13b8fbe80a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14194,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff3883b3b82528bccfce4356cefaa6d7d07e4fc2000000000000000000000000ff3883b3b82528bccfce4356cefaa6d7d07e4fc200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14199,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1afea5a1d95982e4ebafa878b93feded22dc374000000000000000000000000f1afea5a1d95982e4ebafa878b93feded22dc374000000000000000000000000000000000000000000000000020ab2b0dcd6910000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xcb8de44e72d0049d8008cf758682db09ea3982f4ccc1a1b7aafc4bb87a39bb14,2022-04-27 12:47:38.000 UTC,0,true -14207,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ddf13201064ecae004306594c670acc7ac519aa0000000000000000000000004ddf13201064ecae004306594c670acc7ac519aa0000000000000000000000000000000000000000000000000017b341b4c97b2900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14208,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007e9e0079c3b4003e4cb34b4e3fbd4a9f3482c6d80000000000000000000000007e9e0079c3b4003e4cb34b4e3fbd4a9f3482c6d80000000000000000000000000000000000000000000000000003b1843925e0f200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14209,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000001d08b5667c9de15b5ab40f882d2bff6deae2c83d000000000000000000000000000000000000000000000000b0723a590433f979,,,1,true -14212,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000639eb289710d1ae2165ac0e76d02b739644883d2000000000000000000000000639eb289710d1ae2165ac0e76d02b739644883d2000000000000000000000000000000000000000000000000004380663abb800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14214,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e81669100000000000000000000000026afa302c9d2f7659ecf800c0c606fd7faea16f300000000000000000000000026afa302c9d2f7659ecf800c0c606fd7faea16f300000000000000000000000000000000000000000000000821ab0d441498000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xbc6a9dc7db85adaf9f19f15e884727fd2e63981fdf80afe775cefbc93de590aa,2022-06-02 02:24:06.000 UTC,0,true -14215,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d17fc86bc9d50872df4d2b10d8855e1965a6baca000000000000000000000000d17fc86bc9d50872df4d2b10d8855e1965a6baca00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14218,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a63e1239cea6c90107dbd1a8fe127be73efe2582000000000000000000000000a63e1239cea6c90107dbd1a8fe127be73efe258200000000000000000000000000000000000000000000000000810e1660b89f6d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14226,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f530a21ecc87cfaf169ab2be3bf1766bb77a49df000000000000000000000000f530a21ecc87cfaf169ab2be3bf1766bb77a49df000000000000000000000000000000000000000000000000011c37937e08000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14229,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f0b481823ce1fd808f2196a2af17239f0f458b25000000000000000000000000f0b481823ce1fd808f2196a2af17239f0f458b2500000000000000000000000000000000000000000000000000226519828c8fc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14230,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b9cd2daac4e0ebcf2da51705a0f02eee13072c3c000000000000000000000000b9cd2daac4e0ebcf2da51705a0f02eee13072c3c0000000000000000000000000000000000000000000000000003baca8ce3520000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14232,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049e1f9a244765bce02d3af4799da414c0256092600000000000000000000000049e1f9a244765bce02d3af4799da414c02560926000000000000000000000000000000000000000000000000012ff7a1125a66f500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14234,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007cbfe5c2219bac8f00b3a4d6220cea26e4f8e14d0000000000000000000000007cbfe5c2219bac8f00b3a4d6220cea26e4f8e14d00000000000000000000000000000000000000000000000000f8b0a10e47000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14235,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000007cbfe5c2219bac8f00b3a4d6220cea26e4f8e14d0000000000000000000000007cbfe5c2219bac8f00b3a4d6220cea26e4f8e14d0000000000000000000000000000000000000000000000000000000007dd977500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14236,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f560f36da0a8e73467f6561203762cd73f5caf2c000000000000000000000000f560f36da0a8e73467f6561203762cd73f5caf2c00000000000000000000000000000000000000000000000000e0d1ab747abac000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14238,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a39653495ac64cdd4d63da235750ea7d7d88d553000000000000000000000000a39653495ac64cdd4d63da235750ea7d7d88d5530000000000000000000000000000000000000000000000000000fd38d4e8750000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14239,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008fbb51d6e0f91c6fac1045a7e4c851d88b8ee5450000000000000000000000008fbb51d6e0f91c6fac1045a7e4c851d88b8ee5450000000000000000000000000000000000000000000000000001e19a5a3ef80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14240,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000093b59660f7aca23ae0371a1cc85ab1f9698895e000000000000000000000000093b59660f7aca23ae0371a1cc85ab1f9698895e000000000000000000000000000000000000000000000000000313f471c7cf0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14241,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d89ed93e36f45f2c619aa690732f52e1bdd4aec0000000000000000000000008d89ed93e36f45f2c619aa690732f52e1bdd4aec000000000000000000000000000000000000000000000000000313f471c7cf0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14242,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006fab7bc5ebb46220eaa77b88b4a574233f76e1ee0000000000000000000000006fab7bc5ebb46220eaa77b88b4a574233f76e1ee000000000000000000000000000000000000000000000000000313f471c7cf0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14243,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008ee7f67b307365ccc216311d61e6faad0265090f0000000000000000000000008ee7f67b307365ccc216311d61e6faad0265090f000000000000000000000000000000000000000000000000000313f471c7cf0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14244,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dbbcf0aee88ef5e75d55b74faaa65fea2eb0be43000000000000000000000000dbbcf0aee88ef5e75d55b74faaa65fea2eb0be4300000000000000000000000000000000000000000000000000032cc657e6760000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14245,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ef6ef03a9f085953ca84b56c440a25dbc86aa4d0000000000000000000000006ef6ef03a9f085953ca84b56c440a25dbc86aa4d0000000000000000000000000000000000000000000000000002fbf1b7288f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14246,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f6c94056f2ce538fc150156c328697a7c4aabb10000000000000000000000008f6c94056f2ce538fc150156c328697a7c4aabb1000000000000000000000000000000000000000000000000000356e4c7a2cf0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14247,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dff81dc1364bbfe7a2c9ba48e992cd38d54787f7000000000000000000000000dff81dc1364bbfe7a2c9ba48e992cd38d54787f7000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14248,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000033f68ebe57cf7d4010a7ca183e9da103791aeee300000000000000000000000033f68ebe57cf7d4010a7ca183e9da103791aeee30000000000000000000000000000000000000000000000000004c2b90fffc00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14249,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc8dc4bfbb815b4625e27ab2944b9f34c1da0db8000000000000000000000000cc8dc4bfbb815b4625e27ab2944b9f34c1da0db800000000000000000000000000000000000000000000000004d1d2f32bd0971e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14250,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3bd721db7f7a260ab1766d24ae5381485bb78dc000000000000000000000000f3bd721db7f7a260ab1766d24ae5381485bb78dc0000000000000000000000000000000000000000000000000004f032983ce00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14258,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049aa1d51f3b20599921f1f970ffda42361a6e0be00000000000000000000000049aa1d51f3b20599921f1f970ffda42361a6e0be00000000000000000000000000000000000000000000000000739540706ab17d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14259,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007196ccdc9ba6214492e165a5dda53e20de5b53520000000000000000000000007196ccdc9ba6214492e165a5dda53e20de5b53520000000000000000000000000000000000000000000000000ddce46a6801760000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14261,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000062c42f0479fb731712b3ee290fe4e9178d79143b00000000000000000000000062c42f0479fb731712b3ee290fe4e9178d79143b00000000000000000000000000000000000000000000000000745e03f38b0cfe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14264,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9d498434b722855f14388fb2d734c4bbefaaae1000000000000000000000000e9d498434b722855f14388fb2d734c4bbefaaae100000000000000000000000000000000000000000000000001434f7128416f0a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xdda35a643081731901945991976d454328d82a62d7727e50b3ada41d5c5fe39f,2022-05-23 21:08:52.000 UTC,0,true -14265,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000da21dc5e01ef214adf55124fcc0b310c5832191b000000000000000000000000da21dc5e01ef214adf55124fcc0b310c5832191b000000000000000000000000000000000000000000000000000000000098968000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xebeb558cbf0ed0c082dfe27c58d32155cf03c7b0a5b506fdc1647a518592a35d,2022-08-18 10:11:48.000 UTC,0,true -14268,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e2cb253d7af60c49a3cc906ca3ea38916e1938a0000000000000000000000006e2cb253d7af60c49a3cc906ca3ea38916e1938a000000000000000000000000000000000000000000000000007fc199088c0d5a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14272,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000002185c428ee0ddbb23003dfb7b849ace5b86c4faa0000000000000000000000002185c428ee0ddbb23003dfb7b849ace5b86c4faa00000000000000000000000000000000000000000000000000000000000f541300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14279,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000169c4f390548ac0d3ed22b0c18e5c2a294b642a9000000000000000000000000169c4f390548ac0d3ed22b0c18e5c2a294b642a90000000000000000000000000000000000000000000000056e47e29fe29c0a3900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14282,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be55369bfbfd4bccf13bd197ee7b1165c0b7a4f8000000000000000000000000be55369bfbfd4bccf13bd197ee7b1165c0b7a4f8000000000000000000000000000000000000000000000000000de0a8a7fe51d700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14283,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002134240c7041ce4a50dcef6c40db82ec158793700000000000000000000000002134240c7041ce4a50dcef6c40db82ec158793700000000000000000000000000000000000000000000000000015fd3edd34ef2100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14287,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000084509b4d29d486a55fa5e4c096848d286c7a027a00000000000000000000000084509b4d29d486a55fa5e4c096848d286c7a027a00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14290,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000969fba502f1c11d869676739c0a4dcb9a5ad95b2000000000000000000000000969fba502f1c11d869676739c0a4dcb9a5ad95b20000000000000000000000000000000000000000000000000137f806f2b775f600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x704389f2ce140b906e33c94945beffd0e4f65cdf1fdf02df01b6489762bdda44,2022-03-12 07:39:33.000 UTC,0,true -14291,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000003f396735af8b4046d7de08ad8449f4db6f253f600000000000000000000000003f396735af8b4046d7de08ad8449f4db6f253f6000000000000000000000000000000000000000000000010904258cdee9b91c300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x387c89dad0f684d3028029b0a36c0e9d60b99b81dc4a2a3bd8c7679a4d467833,2021-12-21 11:56:19.000 UTC,0,true -14292,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006250900f938cff02c43276af05badc2d06c1da5f0000000000000000000000006250900f938cff02c43276af05badc2d06c1da5f00000000000000000000000000000000000000000000000000807350737cc83a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14293,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000581f900fb75d4c37416f1d3ad86b815b4d07a884000000000000000000000000581f900fb75d4c37416f1d3ad86b815b4d07a8840000000000000000000000000000000000000000000000000093e1ab906375ac00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xaf3664e632f72e7a43e49bfd4963965a3c0b7b3824fbf336798bfdb507af7b61,2021-12-16 11:56:03.000 UTC,0,true -14294,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000012b3e17ee9bcf90763d11b67f3029ce54ea8ff0300000000000000000000000012b3e17ee9bcf90763d11b67f3029ce54ea8ff03000000000000000000000000000000000000000000000000002bab2eedbe86dc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14295,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b389b98659d17ec8c264b523064e246bb464e755000000000000000000000000b389b98659d17ec8c264b523064e246bb464e755000000000000000000000000000000000000000000000000004a9b638448800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14296,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000db5050691e32aaecb39946674737fb87c6230c15000000000000000000000000db5050691e32aaecb39946674737fb87c6230c150000000000000000000000000000000000000000000000000e043da61725000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14298,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000d60efe9e4560bf32a785c39923caef1d580a0edd000000000000000000000000d60efe9e4560bf32a785c39923caef1d580a0edd0000000000000000000000000000000000000000000000000e043da61725000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14299,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006710f4d73f116f7204629d511dbfff128f6aed290000000000000000000000006710f4d73f116f7204629d511dbfff128f6aed2900000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14300,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006710f4d73f116f7204629d511dbfff128f6aed290000000000000000000000006710f4d73f116f7204629d511dbfff128f6aed2900000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14301,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002185c428ee0ddbb23003dfb7b849ace5b86c4faa0000000000000000000000002185c428ee0ddbb23003dfb7b849ace5b86c4faa0000000000000000000000000000000000000000000000000000246139ca800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14302,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000015c3d6298743e3115df3794f6da20ec4079d1eee00000000000000000000000015c3d6298743e3115df3794f6da20ec4079d1eee0000000000000000000000000000000000000000000000000dbd2fc137a3000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14303,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000db5050691e32aaecb39946674737fb87c6230c15000000000000000000000000db5050691e32aaecb39946674737fb87c6230c1500000000000000000000000000000000000000000000000000001402462f600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14304,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d60efe9e4560bf32a785c39923caef1d580a0edd000000000000000000000000d60efe9e4560bf32a785c39923caef1d580a0edd0000000000000000000000000000000000000000000000000000246139ca800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14305,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d60efe9e4560bf32a785c39923caef1d580a0edd000000000000000000000000d60efe9e4560bf32a785c39923caef1d580a0edd0000000000000000000000000000000000000000000000000000246139ca800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14306,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000ad4217cb594fe7a49cfa0daeb5556ea61ee45a88000000000000000000000000ad4217cb594fe7a49cfa0daeb5556ea61ee45a880000000000000000000000000000000000000000000000000f43fc2c04ee000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14308,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000004cf8c6f3a6653704cfa718b348588fda44f1d57d0000000000000000000000004cf8c6f3a6653704cfa718b348588fda44f1d57d0000000000000000000000000000000000000000000000000f43fc2c04ee000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14309,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000028723161c5d1f50a9acb947c1633678f899910f700000000000000000000000028723161c5d1f50a9acb947c1633678f899910f70000000000000000000000000000000000000000000000000429d069189e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14312,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000071ecf0b8b63ad6498e8adcb893e57173c474c8e900000000000000000000000071ecf0b8b63ad6498e8adcb893e57173c474c8e90000000000000000000000000000000000000000000000000e92596fd629000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14314,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000038d4cdf4b69aa2960974d3dd3d5318524c8c0e2000000000000000000000000038d4cdf4b69aa2960974d3dd3d5318524c8c0e200000000000000000000000000000000000000000000000000e0b58a360b2000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14316,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000dfd5b125b629758c01047752917564521c98afa2000000000000000000000000dfd5b125b629758c01047752917564521c98afa20000000000000000000000000000000000000000000000000e4b4b8af6a7000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14317,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c2ef1173a4b051bbcc4474c407bbb2ac7e02e363000000000000000000000000c2ef1173a4b051bbcc4474c407bbb2ac7e02e3630000000000000000000000000000000000000000000000000095617a016b654000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14318,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000f7c200fec2cb4695b87e40bfbf8bd7dc52400635000000000000000000000000f7c200fec2cb4695b87e40bfbf8bd7dc524006350000000000000000000000000000000000000000000000000e6ed27d6668000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14322,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000ba07c823f84bb2aa1cfda61cfa957750f2cf0022000000000000000000000000ba07c823f84bb2aa1cfda61cfa957750f2cf002200000000000000000000000000000000000000000000002d72f355c2fca1385e00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14323,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b700e3039076924b6f801c72893810fe1ea44425000000000000000000000000b700e3039076924b6f801c72893810fe1ea444250000000000000000000000000000000000000000000000000007d10fc719190000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14325,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000382d2640a2838c8757feef06cb233f181a1d1eb9000000000000000000000000382d2640a2838c8757feef06cb233f181a1d1eb900000000000000000000000000000000000000000000000000adf429bd7327f200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14327,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f90715df94c96b6b4ede0b4f0731afd6a78b7b80000000000000000000000003f90715df94c96b6b4ede0b4f0731afd6a78b7b80000000000000000000000000000000000000000000000000068607749b6ce0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x20552df6e2ae30ea2ec22d852499e7569cbbeb0bed61e79d4f0666f7fe42dd8c,2022-05-20 12:41:28.000 UTC,0,true -14328,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009995dbde9a62e939b14c4236a9b027e3349bd05e0000000000000000000000009995dbde9a62e939b14c4236a9b027e3349bd05e0000000000000000000000000000000000000000000000000063bbe0ca22e69100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14330,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000108ac19fa07d24a49965dccd53dc505ad3bf5acd000000000000000000000000108ac19fa07d24a49965dccd53dc505ad3bf5acd0000000000000000000000000000000000000000000000000140ddf0477868c900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14331,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b1aa11bb98e70000aac020045bc011db35097163000000000000000000000000b1aa11bb98e70000aac020045bc011db3509716300000000000000000000000000000000000000000000000000674cde2405ad0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14332,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c99f3b968b7a8c88414c266c4bd199bb1c7eb86c000000000000000000000000c99f3b968b7a8c88414c266c4bd199bb1c7eb86c000000000000000000000000000000000000000000000000013c53923ac6b94000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14333,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000885541c875019bc0d2dcd7576fe3d531efd5cb48000000000000000000000000885541c875019bc0d2dcd7576fe3d531efd5cb480000000000000000000000000000000000000000000000000dddb122417f8a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14335,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c66cbebd9a8c00be01bde46d3d2d82d5b0630f04000000000000000000000000c66cbebd9a8c00be01bde46d3d2d82d5b0630f04000000000000000000000000000000000000000000000000001ff973cafa800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14336,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bcd522547f34273cb52886f5df5c65cf9381055a000000000000000000000000bcd522547f34273cb52886f5df5c65cf9381055a000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14339,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f8a09bf413576a2e8b406dae09732aae29a1c8d4000000000000000000000000f8a09bf413576a2e8b406dae09732aae29a1c8d40000000000000000000000000000000000000000000000000020842cfe24e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14340,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e6b87ff2168d15794a865d09a6716415e7dbecf0000000000000000000000003e6b87ff2168d15794a865d09a6716415e7dbecf00000000000000000000000000000000000000000000000000212d60393f1f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14341,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f4d0137d8433943cb58c4db97ef81a23eb9170c0000000000000000000000002f4d0137d8433943cb58c4db97ef81a23eb9170c000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14343,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e365f00be0d20be799f89555dad65287fbcfb6cb000000000000000000000000e365f00be0d20be799f89555dad65287fbcfb6cb0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14344,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d4875bd28c8fc049b3cd5fb1c62dbf3e954a8be0000000000000000000000007d4875bd28c8fc049b3cd5fb1c62dbf3e954a8be000000000000000000000000000000000000000000000000001c161164ac1aae00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14346,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f341966266afeb6d6ab89a0e9683ebd108692c20000000000000000000000008f341966266afeb6d6ab89a0e9683ebd108692c20000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14348,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f341966266afeb6d6ab89a0e9683ebd108692c20000000000000000000000008f341966266afeb6d6ab89a0e9683ebd108692c20000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14350,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000907e8fef030bb24d63a6a3ee60e2aeca999540a2000000000000000000000000907e8fef030bb24d63a6a3ee60e2aeca999540a2000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14354,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000676dac4935496dc09d51f3fbe8eab36d02155360000000000000000000000000676dac4935496dc09d51f3fbe8eab36d0215536000000000000000000000000000000000000000000000000003658b282e3d2a4e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14355,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c3dcc314cc33f56ba4caad3d2885a5c23149923e000000000000000000000000c3dcc314cc33f56ba4caad3d2885a5c23149923e0000000000000000000000000000000000000000000000000037ddc65a30f7b600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14363,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006add6a3a49c1583a3ecb62b3de1dbae9604b1dff0000000000000000000000006add6a3a49c1583a3ecb62b3de1dbae9604b1dff00000000000000000000000000000000000000000000000000670758aa7c800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd0ed299556ffbb495b4fd6a92106bf0b5e36fdeb2dbea6f90da495def0197a3a,2022-05-08 23:47:24.000 UTC,0,true -14364,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e0ba1356f184df2ec47d79cd69d144d985eaf625000000000000000000000000e0ba1356f184df2ec47d79cd69d144d985eaf62500000000000000000000000000000000000000000000000000c5105aa657689200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14365,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fecc81fff6ad516b005ce8b4cdb36d485ac252b4000000000000000000000000fecc81fff6ad516b005ce8b4cdb36d485ac252b40000000000000000000000000000000000000000000000000126789f618167e100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14368,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000067248f105749b60045d89869c33b8bec986897eb00000000000000000000000067248f105749b60045d89869c33b8bec986897eb00000000000000000000000000000000000000000000000000a64c45d0fc9b2900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14369,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a5ecb25122e36b7b6816b50c100dda189c1857e8000000000000000000000000a5ecb25122e36b7b6816b50c100dda189c1857e80000000000000000000000000000000000000000000000000001ca39b9894f5b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14370,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d657419b9eeb14472a76472d4269d3a9686f065f000000000000000000000000d657419b9eeb14472a76472d4269d3a9686f065f000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14372,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000277cb0775eb752862118987414944448b87bc679000000000000000000000000277cb0775eb752862118987414944448b87bc6790000000000000000000000000000000000000000000000000043364b4ffc5d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14373,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c4d9d599a339f292560fa120d71875893d9a2af0000000000000000000000000c4d9d599a339f292560fa120d71875893d9a2af000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14374,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000702f25a8c9c090239be779b567e5246ebb7e31cd000000000000000000000000702f25a8c9c090239be779b567e5246ebb7e31cd00000000000000000000000000000000000000000000000003e2c284391c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14376,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004103d6215ed19eb868a16eaff7baabd82dbb9ace0000000000000000000000004103d6215ed19eb868a16eaff7baabd82dbb9ace000000000000000000000000000000000000000000000000018d75ff0c716a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14377,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef7b11bb7d88d3b42e866fd40d0a974c9ed78188000000000000000000000000ef7b11bb7d88d3b42e866fd40d0a974c9ed781880000000000000000000000000000000000000000000000000182fae4463195cd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14378,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000003e23505d4c3a701c6ae843a3bd48997a7376fb400000000000000000000000003e23505d4c3a701c6ae843a3bd48997a7376fb40000000000000000000000000000000000000000000000000000f6da1673ef0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14381,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000d0be70667943e357bb9be0f224854561d9909847000000000000000000000000d0be70667943e357bb9be0f224854561d990984700000000000000000000000000000000000000000000000000000000021f597800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14383,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ed4df5ffa42559caa3905500e9e9e3e0eaf06d12000000000000000000000000ed4df5ffa42559caa3905500e9e9e3e0eaf06d120000000000000000000000000000000000000000000000000a5bc62c2184d68800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14385,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000004807cc1ea844f4e600848767bc5ad16a560bcb34000000000000000000000000000000000000000000000000bf5c1cb3f7d9cd3f,,,1,true -14387,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9fe2d0c9c90ad3c90cc267c7d1da44bb4e4a4ff000000000000000000000000c9fe2d0c9c90ad3c90cc267c7d1da44bb4e4a4ff00000000000000000000000000000000000000000000000001307539711f6d7d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14388,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f058b1f37596d606ac8585cbf197f692720d11b1000000000000000000000000f058b1f37596d606ac8585cbf197f692720d11b1000000000000000000000000000000000000000000000000003817283252a59400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14393,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000658555cc8ff249c73ffd823cb1ede7b38c0a7f93000000000000000000000000658555cc8ff249c73ffd823cb1ede7b38c0a7f9300000000000000000000000000000000000000000000000001604f011ec5ec0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14395,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000acad92fe0f90820b3300f64436be3cbd5d2af725000000000000000000000000acad92fe0f90820b3300f64436be3cbd5d2af72500000000000000000000000000000000000000000000000000c71029e928694500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14396,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004bd142068e4220649ae629677ff1f073a48733330000000000000000000000004bd142068e4220649ae629677ff1f073a48733330000000000000000000000000000000000000000000000000587bb5d63f4c3d400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14398,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6d6533a41f5c5dd4d10cef8a008217b3a6532a2000000000000000000000000d6d6533a41f5c5dd4d10cef8a008217b3a6532a200000000000000000000000000000000000000000000000000675324e54aa50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14399,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000956331dc229f59643b2d1ef680f3a8442ba60921000000000000000000000000956331dc229f59643b2d1ef680f3a8442ba6092100000000000000000000000000000000000000000000000000d88da4bdf9e3ee00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x71769dae020ed4a2930388f30e8594da2280559e5cb8fc123b0bf718a442750a,2022-06-03 16:08:24.000 UTC,0,true -14403,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000eb47fa16f2d2c911cd615124776fe0545f775520000000000000000000000000eb47fa16f2d2c911cd615124776fe0545f775520000000000000000000000000000000000000000000000000000000000c7f923900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14405,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d969eec40f3c0497a221a0c0e19313dddfd5e167000000000000000000000000d969eec40f3c0497a221a0c0e19313dddfd5e1670000000000000000000000000000000000000000000000000b79c1e56ceb6a0e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14409,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000017e3c0330d2eaffc8a21acae5db958c50950bc0a00000000000000000000000017e3c0330d2eaffc8a21acae5db958c50950bc0a000000000000000000000000000000000000000000000000000000002c4e64f900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14410,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d97e7a71824ae41ae4606762e06885eccb287e80000000000000000000000005d97e7a71824ae41ae4606762e06885eccb287e8000000000000000000000000000000000000000000000000015ac213ac7dd7cc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x929e90cd3813eaf4a27b20d5a65d9095894570f79bea62fef849455537610d0e,2022-08-26 19:36:40.000 UTC,0,true -14413,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032d5802d32ba81b28c85c6ab2d02867bd8c757d700000000000000000000000032d5802d32ba81b28c85c6ab2d02867bd8c757d7000000000000000000000000000000000000000000000000007b446d11c82b8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14417,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000047034b82573d3ed0cd16d01dfb70881b3af4d92000000000000000000000000047034b82573d3ed0cd16d01dfb70881b3af4d9200000000000000000000000000000000000000000000000000a00d56eb8b3e0100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14419,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009f9ec6b671f30ff554bc8ef93b7f111260e1b80a0000000000000000000000009f9ec6b671f30ff554bc8ef93b7f111260e1b80a00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14421,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008dc6e176391948aeb4aadf817e081d68dd20a2980000000000000000000000008dc6e176391948aeb4aadf817e081d68dd20a29800000000000000000000000000000000000000000000000000374a7309a7f7bf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14424,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c43d79baeba1acb896b4e35f02615eb25c3e4aa0000000000000000000000000c43d79baeba1acb896b4e35f02615eb25c3e4aa000000000000000000000000000000000000000000000000008684f9d2c3d34000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14425,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000311d07b222519bff34bd42c032478ea98b5e6eee000000000000000000000000311d07b222519bff34bd42c032478ea98b5e6eee00000000000000000000000000000000000000000000000000000000a1963f0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14428,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047930c76790c865217472f2ddb4d14c640ee450a00000000000000000000000047930c76790c865217472f2ddb4d14c640ee450a0000000000000000000000000000000000000000000000000014e9c5db57b30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14429,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009da89e29ab90c95efb8b4aa30825c7bfdbab80b80000000000000000000000009da89e29ab90c95efb8b4aa30825c7bfdbab80b8000000000000000000000000000000000000000000000000036fad342d8c265800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x375d461b39ac7451ae71488c6b2de06db498c9b1c270a93438933a3f45e8cf02,2022-02-22 20:58:51.000 UTC,0,true -14433,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3513c1261d7c9470c064bf3c7b80a8cb8a24e86000000000000000000000000f3513c1261d7c9470c064bf3c7b80a8cb8a24e8600000000000000000000000000000000000000000000000000da7f62d85f6af900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x23100f30018e81430c2f95211cddcaf70527253e0d555fab27d9773227309661,2022-05-24 20:22:46.000 UTC,0,true -14434,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009148fcc2b78bb12f960fd5c7bd5421b80d832cce0000000000000000000000009148fcc2b78bb12f960fd5c7bd5421b80d832cce00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x51a55607bd5ee7841f417aa637d6e5f9bf6fd00905627afc8b73f5463a342a16,2022-04-03 20:58:51.000 UTC,0,true -14435,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd14cec791a6e925d482ed1205132bdf1e7ed74e000000000000000000000000bd14cec791a6e925d482ed1205132bdf1e7ed74e000000000000000000000000000000000000000000000000005c7dac57b9783f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14438,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000010e75f657fd34d9217e2a87ec30ccbbb23d0b5f300000000000000000000000010e75f657fd34d9217e2a87ec30ccbbb23d0b5f3000000000000000000000000000000000000000000000000003c6675a706db0400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14439,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ede97d279dabb60410b8ef0d8884a53a6f33a331000000000000000000000000ede97d279dabb60410b8ef0d8884a53a6f33a331000000000000000000000000000000000000000000000000020e4159b2aface800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x09b5a4735b4178c0eea46c86ae226532c01ea4c380cb357b9632620aa1b697fb,2021-12-19 04:17:46.000 UTC,0,true -14440,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d867554fb5e44d0b120b5019dfcd20999fd43690000000000000000000000002d867554fb5e44d0b120b5019dfcd20999fd4369000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14441,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009512b8c1b63c9893258920b5998134a1261db85d0000000000000000000000009512b8c1b63c9893258920b5998134a1261db85d000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14444,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006f5eea1e20e69c5db953db53267d0ab99b98bb030000000000000000000000006f5eea1e20e69c5db953db53267d0ab99b98bb030000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14445,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006141ee2a0f53255c79b629e2830b9ab2617c76a00000000000000000000000006141ee2a0f53255c79b629e2830b9ab2617c76a0000000000000000000000000000000000000000000000000005e6e8b56941fbd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14447,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ef5011856fb7a0d837340afc30522459a3899420000000000000000000000006ef5011856fb7a0d837340afc30522459a38994200000000000000000000000000000000000000000000000001787a68c02fd26900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14448,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006871f7b5822439d13d37bfbcde61944e10863fe50000000000000000000000006871f7b5822439d13d37bfbcde61944e10863fe500000000000000000000000000000000000000000000000000000002540be40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14449,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f988e0c45ee66006b7d815eeb3dd2c06b28ed1bc00000000000000000000000000000000000000000000000098a7d9b8314c0000,,,1,true -14452,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3712bac7a9070647a4f7a0e671bbd1640857418000000000000000000000000a3712bac7a9070647a4f7a0e671bbd1640857418000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14455,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000652330a1285f96e29053964913605a77acea38cb000000000000000000000000652330a1285f96e29053964913605a77acea38cb0000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14456,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c899506db8549f1a1864e1938e290c90538c9990000000000000000000000000c899506db8549f1a1864e1938e290c90538c99900000000000000000000000000000000000000000000000000232053e3433655700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x96d748df3ed5cd2f16982d60ce28dac62f21b015a42d459077a066847298982a,2021-12-19 04:39:48.000 UTC,0,true -14457,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008123b9fc439e224387710d5443e0ba65741758ef0000000000000000000000008123b9fc439e224387710d5443e0ba65741758ef00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14458,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c431c7a0a3b877c5dd2c01280da5f3bbe4054944000000000000000000000000c431c7a0a3b877c5dd2c01280da5f3bbe40549440000000000000000000000000000000000000000000000000cf55d4d7a1aff6300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14460,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000073b368c00bbbdaa25846d9c4530d32562ddb879200000000000000000000000073b368c00bbbdaa25846d9c4530d32562ddb87920000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14461,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000049063afec15f575944003e46ce5d614feeed99e000000000000000000000000049063afec15f575944003e46ce5d614feeed99e00000000000000000000000000000000000000000000000001588df28ad6e11a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14462,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000528aa39abab48b2dad03abe397be201a08bba8bf000000000000000000000000528aa39abab48b2dad03abe397be201a08bba8bf0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14463,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cfff7e57d91cbed35aaaa168fe4bf94bce120393000000000000000000000000cfff7e57d91cbed35aaaa168fe4bf94bce120393000000000000000000000000000000000000000000000000001b3fcd19a0c58000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14464,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cb374b5829edc474f2fe713b05342f331b23f17e000000000000000000000000cb374b5829edc474f2fe713b05342f331b23f17e000000000000000000000000000000000000000000000000022f2f6689d416ec00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5b0e94a000cafc48f6e8c8353a5f44de015ae8e28f8f3c1fd96da43d9acf682d,2021-12-19 04:44:20.000 UTC,0,true -14465,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc58a9eea6360167a0c3e81b13404a9b9b8803f0000000000000000000000000bc58a9eea6360167a0c3e81b13404a9b9b8803f0000000000000000000000000000000000000000000000000001ea533966d99c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14466,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002bb524649296a6b8bede1cccf3b327852975e9b50000000000000000000000002bb524649296a6b8bede1cccf3b327852975e9b50000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14467,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fab7efa4514a401f212b494c9cc4dfe28a8bd9ad000000000000000000000000fab7efa4514a401f212b494c9cc4dfe28a8bd9ad00000000000000000000000000000000000000000000000003311fc80a57000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x3ffdae3a7a1edf932391f02ce22c9bf040402109f8244922015311fd3721ec0e,2021-11-27 02:45:46.000 UTC,0,true -14469,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aaade03035337dc4e64c9df724817ff0bf162acd000000000000000000000000aaade03035337dc4e64c9df724817ff0bf162acd0000000000000000000000000000000000000000000000000188c0c5241224a300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14470,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9c0420c9b944a003d45b66f17d0c384e35b2139000000000000000000000000e9c0420c9b944a003d45b66f17d0c384e35b2139000000000000000000000000000000000000000000000000005fbdb13b34508900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14471,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a8808a771cf983d0ef33b2f8d1e34701ef5abf17000000000000000000000000a8808a771cf983d0ef33b2f8d1e34701ef5abf170000000000000000000000000000000000000000000000000200203500f0ea4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14472,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006b2616fdcb783d326577bcd98c561bcaad16035d0000000000000000000000006b2616fdcb783d326577bcd98c561bcaad16035d00000000000000000000000000000000000000000000000002000632a11cb34000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14473,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000020b4c93fcc01db24666e7a3b1c1737527a4339fa00000000000000000000000020b4c93fcc01db24666e7a3b1c1737527a4339fa000000000000000000000000000000000000000000000000003de9f054d2417300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14474,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be79ced87649ea760589f56829dafc9f2c1cd6f2000000000000000000000000be79ced87649ea760589f56829dafc9f2c1cd6f20000000000000000000000000000000000000000000000000033387f911b4e6200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14475,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ac350ec997e3efb3d3253a77ea8a8f3a4eb95c00000000000000000000000006ac350ec997e3efb3d3253a77ea8a8f3a4eb95c000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14476,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ab6012234a086b3312100f0299c93cff21c24cd0000000000000000000000004ab6012234a086b3312100f0299c93cff21c24cd00000000000000000000000000000000000000000000000000137a2786dd02cd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14477,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e05898253609dc3b63fd71bb9d28243b1767abf0000000000000000000000003e05898253609dc3b63fd71bb9d28243b1767abf00000000000000000000000000000000000000000000000000566674f653250000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14478,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f0ac690ae67ee389ef8b521758a4d5c13922c080000000000000000000000008f0ac690ae67ee389ef8b521758a4d5c13922c0800000000000000000000000000000000000000000000000000df6491915ca9c700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14479,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002825ad2da5aa9356aed20d2aa876813d50d4bfd80000000000000000000000002825ad2da5aa9356aed20d2aa876813d50d4bfd80000000000000000000000000000000000000000000000000032ba50559c760000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14481,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003aa44ddc54f9ab8e82c0a457035097f53c8641780000000000000000000000003aa44ddc54f9ab8e82c0a457035097f53c86417800000000000000000000000000000000000000000000000000573ab10f2c220000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14482,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003b5f7c521eda2259aa12620a25cd71789e6471ca0000000000000000000000003b5f7c521eda2259aa12620a25cd71789e6471ca00000000000000000000000000000000000000000000000000133041c11fff2a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14483,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029bea86ecb22fbf7f5cb764fdfd40f13199302ab00000000000000000000000029bea86ecb22fbf7f5cb764fdfd40f13199302ab0000000000000000000000000000000000000000000000000015c3d5b22cddd400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14485,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b32e99470c494256e3683493be6edbd6b943a0ed000000000000000000000000b32e99470c494256e3683493be6edbd6b943a0ed0000000000000000000000000000000000000000000000000016ac5bb2eeb47700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14486,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000068d8882ab5b5ac332f5636a02808c8addd94882900000000000000000000000068d8882ab5b5ac332f5636a02808c8addd9488290000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14487,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005b7b80c8c25bea60f3d08d73dc7f5be827764ef00000000000000000000000005b7b80c8c25bea60f3d08d73dc7f5be827764ef000000000000000000000000000000000000000000000000000da4bec5dfc2d6400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x01c6b46140a84777df79a4759fb84f2e83d8406965a395c14051560115d86eb9,2022-06-01 02:19:39.000 UTC,0,true -14489,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a1812222b05e44b90e0771f3d84387e2bfd981d0000000000000000000000000a1812222b05e44b90e0771f3d84387e2bfd981d00000000000000000000000000000000000000000000000000016ac9c7dcb74f600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14490,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f83fc1f2a97e5f014188775e228de9044ce98af6000000000000000000000000f83fc1f2a97e5f014188775e228de9044ce98af600000000000000000000000000000000000000000000000001f08f4e10c456fb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14492,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000080fc7793deb839d65a0d233d1ba6fec97444fcf000000000000000000000000080fc7793deb839d65a0d233d1ba6fec97444fcf000000000000000000000000000000000000000000000000000012309ce5400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14493,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004d683f0f3c665488c2faaf11db87fab24e8ff0c80000000000000000000000004d683f0f3c665488c2faaf11db87fab24e8ff0c8000000000000000000000000000000000000000000000000003744e99d0c8c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14494,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c3112778f18924da2c30dd865ab492a44990a190000000000000000000000004c3112778f18924da2c30dd865ab492a44990a190000000000000000000000000000000000000000000000000016d9a1753ee81000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14495,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e21c83d1c3af9d1f3aea34863f576e97581e5953000000000000000000000000e21c83d1c3af9d1f3aea34863f576e97581e59530000000000000000000000000000000000000000000000000001476b081e800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14496,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e21333b29bad2e7471ec30658a693bda4d65d2ff000000000000000000000000e21333b29bad2e7471ec30658a693bda4d65d2ff00000000000000000000000000000000000000000000000000138113e4944af200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14497,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003daed5bcaaa96264f1da7d092079dab6947dbc8f0000000000000000000000003daed5bcaaa96264f1da7d092079dab6947dbc8f000000000000000000000000000000000000000000000000001083c0ac5ebdad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14498,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000058863b10a5e7efe698b2546b3e91cbc28c06c81300000000000000000000000058863b10a5e7efe698b2546b3e91cbc28c06c813000000000000000000000000000000000000000000000000006122ac0656ba4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14499,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005eae41614a92e9cd5a017494fdb86df65672cb200000000000000000000000005eae41614a92e9cd5a017494fdb86df65672cb2000000000000000000000000000000000000000000000000000afde251fbcfc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14500,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d5aaf71264632b23af10a95c48a89bcb9d09c6d2000000000000000000000000d5aaf71264632b23af10a95c48a89bcb9d09c6d2000000000000000000000000000000000000000000000000000002ba7def300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14502,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000075565fd255dce7d7c7911b38a26c841b850c1ca500000000000000000000000075565fd255dce7d7c7911b38a26c841b850c1ca5000000000000000000000000000000000000000000000000002c160232714b3300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14503,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000048e91697f0cbbcafd1f3e53b25af7720c07ca0be00000000000000000000000048e91697f0cbbcafd1f3e53b25af7720c07ca0be0000000000000000000000000000000000000000000000000012645398b7887800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14504,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000590ed1d0352a17fe5c7d5fb81d9df5b5e6233a75000000000000000000000000590ed1d0352a17fe5c7d5fb81d9df5b5e6233a75000000000000000000000000000000000000000000000000002ab4384cf51de600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14505,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004bc5102023fa952e470720983633d74c400d73440000000000000000000000004bc5102023fa952e470720983633d74c400d734400000000000000000000000000000000000000000000000000153a661757f05700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14506,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e6bf88d7a74498f1bdb76fc917e4b6d259d12419000000000000000000000000e6bf88d7a74498f1bdb76fc917e4b6d259d12419000000000000000000000000000000000000000000000000004773c3d7812f5b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14508,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000862f5898ab9c9574cbdee239fce21cac6fd1c2d0000000000000000000000000862f5898ab9c9574cbdee239fce21cac6fd1c2d000000000000000000000000000000000000000000000000000195b4073dea4f400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14509,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008890799c9a1e9ece844d8271347643843583087f0000000000000000000000008890799c9a1e9ece844d8271347643843583087f0000000000000000000000000000000000000000000000000021b532ce3a560100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14510,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a98d86ec1ebdd9122110aeff9ead46deefb09ce0000000000000000000000001a98d86ec1ebdd9122110aeff9ead46deefb09ce0000000000000000000000000000000000000000000000000015efcaa1d4268100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14511,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dfbd3dfa1c72cd64ecc504b97c111926ea3b94d7000000000000000000000000dfbd3dfa1c72cd64ecc504b97c111926ea3b94d70000000000000000000000000000000000000000000000000015ab2c0301005600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14513,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000086a7f79b8f6d9c7542dc0c0f26ec52e1be7da90000000000000000000000000086a7f79b8f6d9c7542dc0c0f26ec52e1be7da9000000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14514,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b1d94fcdb66dec18ece038bba08f4a465f630449000000000000000000000000b1d94fcdb66dec18ece038bba08f4a465f630449000000000000000000000000000000000000000000000000007e7a4792a6d5d800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14515,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009fd1adb1f6d760b020f65940e56a59338cbff54c0000000000000000000000009fd1adb1f6d760b020f65940e56a59338cbff54c00000000000000000000000000000000000000000000000000c547ec8b15161400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14516,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000067fc64e8681e590ddd35285c13d1fcb89deeb12000000000000000000000000067fc64e8681e590ddd35285c13d1fcb89deeb12000000000000000000000000000000000000000000000000032f198d4374dd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14517,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002aaf4e90520baeca9cdfed9ea92c5fa71993192a0000000000000000000000002aaf4e90520baeca9cdfed9ea92c5fa71993192a00000000000000000000000000000000000000000000000000153f302b7266a500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14518,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006dc8583a625298aaa8671b70eb3ce3b86197a5cb0000000000000000000000006dc8583a625298aaa8671b70eb3ce3b86197a5cb000000000000000000000000000000000000000000000000018309b07b25e90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9b80769cc2efa99fbee48904e980523622b09b8c441abfd596d0c2fb33ccc16c,2022-03-04 08:04:03.000 UTC,0,true -14520,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9471b4ec137853a1b5cae871bd6de9a8b08c5cf000000000000000000000000c9471b4ec137853a1b5cae871bd6de9a8b08c5cf0000000000000000000000000000000000000000000000000015b1d1baaea8c100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14521,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc1dcaf774304ff2fa7920836c95400b237f349f000000000000000000000000fc1dcaf774304ff2fa7920836c95400b237f349f000000000000000000000000000000000000000000000000001322c1dea952aa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14523,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000041fa8cf2ae231a7e76881b935d374b4237aa998300000000000000000000000041fa8cf2ae231a7e76881b935d374b4237aa998300000000000000000000000000000000000000000000000000a10aa109566b3600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14524,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000181a81e54da038370a88b95f5b6e352c27c5bdac000000000000000000000000181a81e54da038370a88b95f5b6e352c27c5bdac00000000000000000000000000000000000000000000000000a9b12a19f1451100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xbe0f8569175eeffdae9592eb9c3ec921bb0f18b227ba2004a76db2426261572b,2022-03-17 06:34:23.000 UTC,0,true -14525,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000302380cf390d95136ea80b5efe6366c11b32cb51000000000000000000000000302380cf390d95136ea80b5efe6366c11b32cb5100000000000000000000000000000000000000000000000000b6c452b8246fd200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14526,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004774978adbd9a017e8f42ef1be55c2c058450fb30000000000000000000000004774978adbd9a017e8f42ef1be55c2c058450fb3000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14527,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002671b78e7cb60779e5409c588c9c11fa2ccbd34c0000000000000000000000002671b78e7cb60779e5409c588c9c11fa2ccbd34c0000000000000000000000000000000000000000000000000012a3e2bbd01c1400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14528,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000083940789ecf1123ecda5259d180ff4c7637c736c00000000000000000000000083940789ecf1123ecda5259d180ff4c7637c736c0000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14529,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b41d08126deb4010da0b031d06dc543653f88329000000000000000000000000b41d08126deb4010da0b031d06dc543653f88329000000000000000000000000000000000000000000000000005ac5ada651f26a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14530,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004dc34ac1247e9d4cded76ce5cdd582804081c8fe0000000000000000000000004dc34ac1247e9d4cded76ce5cdd582804081c8fe00000000000000000000000000000000000000000000000000114ffeff82b12600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14531,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000302380cf390d95136ea80b5efe6366c11b32cb51000000000000000000000000302380cf390d95136ea80b5efe6366c11b32cb51000000000000000000000000000000000000000000000000005fd9e6dc0b553000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14532,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000af583fe68440eec623fc223ebfc84d2ba75c9acf000000000000000000000000af583fe68440eec623fc223ebfc84d2ba75c9acf0000000000000000000000000000000000000000000000000015322f9510cad600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14533,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000018c0ccd1b42a9781481d97a4b73ba8962b9f4d9000000000000000000000000018c0ccd1b42a9781481d97a4b73ba8962b9f4d900000000000000000000000000000000000000000000000002304d06820ef1d700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x01419262a5d4aad4ef96c868a4bbd9da8653fbc8966527ed89e2ed063f30d61f,2021-12-19 04:48:04.000 UTC,0,true -14534,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b3f4cf4195b6fc1601b667e524f8b9bca720f996000000000000000000000000b3f4cf4195b6fc1601b667e524f8b9bca720f9960000000000000000000000000000000000000000000000000230d900bc05b1df00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xdcd6bb59974c2f284b3ccf7d8a467ec85d4352dec8111bb4d8f1f331977e2c23,2021-12-19 04:51:19.000 UTC,0,true -14535,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045f99d8974120001c3300b320a266f40f1601f3900000000000000000000000045f99d8974120001c3300b320a266f40f1601f3900000000000000000000000000000000000000000000000000092456df261c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14536,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a01ca6267c599388ccd9049d5c8f69db3baab041000000000000000000000000a01ca6267c599388ccd9049d5c8f69db3baab041000000000000000000000000000000000000000000000000022e718ab8ed6fc600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xca226dca43bf3f8ceb607089e30842511812971157b6ea87103fa0c9c5ce9f63,2021-12-19 05:22:35.000 UTC,0,true -14537,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000036a7a9f86189e6e548de91428304f347932e728100000000000000000000000036a7a9f86189e6e548de91428304f347932e7281000000000000000000000000000000000000000000000000001263d320a579d300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14538,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047e36a6edbcef05c3f697bab1d7d633c4ba4e49100000000000000000000000047e36a6edbcef05c3f697bab1d7d633c4ba4e49100000000000000000000000000000000000000000000000001dc104a3fe7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x4eb63412bc12490d40b03106345accf2fe9dfd6f6178b5ed39996b582d539002,2021-11-28 11:56:41.000 UTC,0,true -14539,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000adfc26b6520a35c37af3ac5af174249737ec612c000000000000000000000000adfc26b6520a35c37af3ac5af174249737ec612c0000000000000000000000000000000000000000000000000082dced6e12d84a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14540,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032f83b494fc594f8e57cba39e8a0c33214073f4000000000000000000000000032f83b494fc594f8e57cba39e8a0c33214073f40000000000000000000000000000000000000000000000000022f0fad90899e9100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x009b61c67c41a9654a64f323e64230db3c8f849d332e63634a10859552aa48b7,2021-12-19 05:26:12.000 UTC,0,true -14541,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a7e7ebf02b8d9727f8406e97cb21ffd02250d57b000000000000000000000000a7e7ebf02b8d9727f8406e97cb21ffd02250d57b0000000000000000000000000000000000000000000000000015e41083cc00b900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14542,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007de6aa8cd9a9654145fd9869ea08816992b59c870000000000000000000000007de6aa8cd9a9654145fd9869ea08816992b59c870000000000000000000000000000000000000000000000000000034630b8a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14544,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008ad865b57fb72870eb1daf309f92fb7ba327860b0000000000000000000000008ad865b57fb72870eb1daf309f92fb7ba327860b000000000000000000000000000000000000000000000000001138afa2de6fc100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5200f07ad61d09354ba78d1df1e4e1fb6ff5a14413474b6bba423a1b5ea5cae2,2022-07-30 22:41:27.000 UTC,0,true -14545,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000162a9669c0e162d9ef545efe37f70b010f4bed77000000000000000000000000162a9669c0e162d9ef545efe37f70b010f4bed77000000000000000000000000000000000000000000000000008e4030122ae39500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14546,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003df9f33d7caaf1b50cfd16738bdf308468ef0c140000000000000000000000003df9f33d7caaf1b50cfd16738bdf308468ef0c140000000000000000000000000000000000000000000000000016ad8b8140bc0f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14547,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b06568d5f401012530139ece2667a5de6c85eec2000000000000000000000000b06568d5f401012530139ece2667a5de6c85eec200000000000000000000000000000000000000000000000000180d212006dce700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14549,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a9c67cb03729a72237ec6205fa5e32b645cc0a6f000000000000000000000000a9c67cb03729a72237ec6205fa5e32b645cc0a6f0000000000000000000000000000000000000000000000000013a2070e82c65c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14550,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dee36b5856df7ebedc8fabcef0f86417547363bb000000000000000000000000dee36b5856df7ebedc8fabcef0f86417547363bb00000000000000000000000000000000000000000000000032cfb69b38ce453d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14551,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000057e4b7d3926e8970c94bbea676e4144fcc3866f300000000000000000000000057e4b7d3926e8970c94bbea676e4144fcc3866f30000000000000000000000000000000000000000000000000000034630b8a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14552,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000abc42b6a90c2a5962c1be78be7344a7d05848ee4000000000000000000000000abc42b6a90c2a5962c1be78be7344a7d05848ee400000000000000000000000000000000000000000000000001569f77dbcf766700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14553,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000091b56d6bee38057e62b36eb844d793bfcca7d48600000000000000000000000091b56d6bee38057e62b36eb844d793bfcca7d48600000000000000000000000000000000000000000000000000149347a146511700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14554,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f5e5f687406d072c4bcccda452f426688df7a901000000000000000000000000f5e5f687406d072c4bcccda452f426688df7a9010000000000000000000000000000000000000000000000000010c9818331419a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14556,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eb57544ac7ea46db54958f8a48af53fa5546c246000000000000000000000000eb57544ac7ea46db54958f8a48af53fa5546c2460000000000000000000000000000000000000000000000000010d850f07ede7400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14557,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1007f903a8c583f8f9efa7a693d41eec2ed9bd0000000000000000000000000f1007f903a8c583f8f9efa7a693d41eec2ed9bd0000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14558,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007dc6155b6a5ec6bb0096dfc460ba69299bc7f6570000000000000000000000007dc6155b6a5ec6bb0096dfc460ba69299bc7f657000000000000000000000000000000000000000000000000003be4eebd68304000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14559,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007a32265bcd45c5f7d24db5ccd9051ce6f058e1db0000000000000000000000007a32265bcd45c5f7d24db5ccd9051ce6f058e1db000000000000000000000000000000000000000000000000005e7ab05cb1304500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14560,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f26998db738b9f6658d5a47b2666549dd524bb7b000000000000000000000000f26998db738b9f6658d5a47b2666549dd524bb7b000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14563,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004b8259591efce15da36232c473a83199e780a4110000000000000000000000004b8259591efce15da36232c473a83199e780a41100000000000000000000000000000000000000000000000000112e33b52acd3c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14564,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2b1d3508bb2e1d9caa5e91016847e8d73064793000000000000000000000000a2b1d3508bb2e1d9caa5e91016847e8d730647930000000000000000000000000000000000000000000000000010fe4b1ac7f41600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14565,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc9c19d3277012a9c325cf355e5719f3cd3dfcf7000000000000000000000000fc9c19d3277012a9c325cf355e5719f3cd3dfcf700000000000000000000000000000000000000000000000000001b48eb57e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14567,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000003be267c19ceff4a3a303faaeee5127cb0947c60e00000000000000000000000000000000000000000000000024f73ba9dcadf3d4,,,1,true -14568,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae8e2b4abb13de393515ef5abad7e35a2b11ba6d000000000000000000000000ae8e2b4abb13de393515ef5abad7e35a2b11ba6d000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x4e96a73b6eba0022552641aa7f226ef3b0d5ddc63ed2583196700f0646d90f1d,2022-05-25 06:41:00.000 UTC,0,true -14570,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d87e4695d674635795966bd72a545ca54d253140000000000000000000000000d87e4695d674635795966bd72a545ca54d25314000000000000000000000000000000000000000000000000006d3350e05e9b4d700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xa197cbde91d0b613faac888c7b5a0220e9b0d12ec307f70fa38aff595979e6f4,2022-05-27 06:52:15.000 UTC,0,true -14572,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008ef01cc68a08dcdc771fcda60a402c0992ad87670000000000000000000000008ef01cc68a08dcdc771fcda60a402c0992ad87670000000000000000000000000000000000000000000000000014c8e4a2f764a100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14574,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d69de8e55e73e0b308b8c6c4424090febea5ced2000000000000000000000000d69de8e55e73e0b308b8c6c4424090febea5ced20000000000000000000000000000000000000000000000000267c26a8c021ea100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14575,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a0d715b20c3df8d3859e897dab846453beee2a53000000000000000000000000a0d715b20c3df8d3859e897dab846453beee2a53000000000000000000000000000000000000000000000000000221b262dd800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14576,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000057005a8c8639a64327ea53c05d0a8f3359adcc8d00000000000000000000000057005a8c8639a64327ea53c05d0a8f3359adcc8d000000000000000000000000000000000000000000000000000001d1a94a200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14577,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a9e7432d487cc67eaf5c909fc10f8c1257723ba0000000000000000000000005a9e7432d487cc67eaf5c909fc10f8c1257723ba000000000000000000000000000000000000000000000000013ebc0208e7765700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14578,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000442e074b32775ec36d84fe9c137074bc4e97c200000000000000000000000000442e074b32775ec36d84fe9c137074bc4e97c20000000000000000000000000000000000000000000000000001d0ef13cbb0ee6300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14582,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002bab2e743a32a054eae3f26bd921f13116ee4f7a0000000000000000000000002bab2e743a32a054eae3f26bd921f13116ee4f7a00000000000000000000000000000000000000000000000000060a24181e400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14585,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bec5c94c0ce7a6b27e5d43d8b0da2701d6393537000000000000000000000000bec5c94c0ce7a6b27e5d43d8b0da2701d639353700000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14586,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c5ed8bc55129b31e4a801fda5489b27bb96ded3f000000000000000000000000c5ed8bc55129b31e4a801fda5489b27bb96ded3f0000000000000000000000000000000000000000000000000059a7c3452b4c7c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14587,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d0cd6508fd2a1baee0a0c7f596d63e23676616a0000000000000000000000003d0cd6508fd2a1baee0a0c7f596d63e23676616a000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14590,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000008449f8db1a87d8105d7e1e697c3b220193e344700000000000000000000000008449f8db1a87d8105d7e1e697c3b220193e3447000000000000000000000000000000000000000000000000001c7ced19a167c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14593,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8d32f90d8283830145a95aebad1b83c565e045a000000000000000000000000e8d32f90d8283830145a95aebad1b83c565e045a000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14605,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a2f1b8d1e3bfd649811a4944d155cffb6be54260000000000000000000000000a2f1b8d1e3bfd649811a4944d155cffb6be5426000000000000000000000000000000000000000000000000015d6f8b75cbb97500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14609,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002932eb2cea773396e242423e401fba74c57ceb1d0000000000000000000000002932eb2cea773396e242423e401fba74c57ceb1d00000000000000000000000000000000000000000000000053444835ec58000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14619,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ed99802e97eb84809c07fa93f91bdddf27c61250000000000000000000000002ed99802e97eb84809c07fa93f91bdddf27c61250000000000000000000000000000000000000000000000000014d280ac5b05d900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14621,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000073a54e1b681dfdba14d74226e2c88090e4c61ca300000000000000000000000073a54e1b681dfdba14d74226e2c88090e4c61ca300000000000000000000000000000000000000000000000000163c0356db051000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14624,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000068ed88ea02fbebd2538dadd3ba656d8e76bef5c100000000000000000000000068ed88ea02fbebd2538dadd3ba656d8e76bef5c1000000000000000000000000000000000000000000000000001752b5b30d85a500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14627,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b1598d77786da3748f8f6315494a88f9a190c55c000000000000000000000000b1598d77786da3748f8f6315494a88f9a190c55c0000000000000000000000000000000000000000000000000016145a9607d1ec00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14628,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d0d6ec6895a73a049bb380a1feb4f58c4003a933000000000000000000000000d0d6ec6895a73a049bb380a1feb4f58c4003a93300000000000000000000000000000000000000000000000000141adddd886a0d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14630,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ec83585e2cbb3b178a9b457da006867c5d14a021000000000000000000000000ec83585e2cbb3b178a9b457da006867c5d14a021000000000000000000000000000000000000000000000000001890816ca567ff00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14632,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000497eaef16a3b4ac502e0ecef0bf858228b531774000000000000000000000000497eaef16a3b4ac502e0ecef0bf858228b5317740000000000000000000000000000000000000000000000000150ecfa9e882da300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x68f01dd88f03047f6d14497e8cbda9d70d026ba24edcdf9a17dd360bdbb18359,2021-12-13 11:33:41.000 UTC,0,true -14633,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff690312a3791db3597148e69ebd411c99975159000000000000000000000000ff690312a3791db3597148e69ebd411c99975159000000000000000000000000000000000000000000000000001601a6db2812d300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14634,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001c8ef4aae0d0c3f1ee879ee14d2713cfcd3676470000000000000000000000001c8ef4aae0d0c3f1ee879ee14d2713cfcd3676470000000000000000000000000000000000000000000000000062fa5e90a96dc200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14635,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9dfd080ace9e813fb42d9e0ca34d07b758c8710000000000000000000000000c9dfd080ace9e813fb42d9e0ca34d07b758c8710000000000000000000000000000000000000000000000000001034fc105682cf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14636,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000555916e2b2a7b353f4d58486122587d57c9a1440000000000000000000000000555916e2b2a7b353f4d58486122587d57c9a1440000000000000000000000000000000000000000000000000011dc3242c55bc800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14641,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000748a1bea1a431a0f424dd264af25ef67a0232fce000000000000000000000000748a1bea1a431a0f424dd264af25ef67a0232fce000000000000000000000000000000000000000000000000001316eeeb5a505300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14644,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7030954e5a634bc690acd0ed59da14879bdb50b000000000000000000000000d7030954e5a634bc690acd0ed59da14879bdb50b00000000000000000000000000000000000000000000000001617cc494dff10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14646,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000934124e672e932c0f686954db57cfd3fbd1d4ff0000000000000000000000000934124e672e932c0f686954db57cfd3fbd1d4ff000000000000000000000000000000000000000000000000005deda701dcb2de00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x0851f068e16184864bd5ab418791346c3df5fc2778a278e91256ca3c30b5e807,2022-03-24 08:55:09.000 UTC,0,true -14648,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c223b9c56b0433387343fc23728fda353fe50ff0000000000000000000000000c223b9c56b0433387343fc23728fda353fe50ff000000000000000000000000000000000000000000000000000550057fbe2e82a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xacd86f96c1bef309d983ecffee05b28770345f2a88cb1ba34daf8b4715f9f750,2022-04-10 09:25:02.000 UTC,0,true -14652,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c223b9c56b0433387343fc23728fda353fe50ff0000000000000000000000000c223b9c56b0433387343fc23728fda353fe50ff000000000000000000000000000000000000000000000000000508f9e3ae06a8d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9f26cc06c8d5c075d9b98bc625978008383892bf12d4ce9b3cf0d2f4095282e3,2022-04-10 09:01:34.000 UTC,0,true -14653,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ea36af93f0ab4c882c9d71a5d9f04dabcdcc4fd0000000000000000000000006ea36af93f0ab4c882c9d71a5d9f04dabcdcc4fd000000000000000000000000000000000000000000000000015e8b43b43e445000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14654,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002dcbc955b963534aa09572cfbe644a6f4f8b280f0000000000000000000000002dcbc955b963534aa09572cfbe644a6f4f8b280f0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14656,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000632501776bb853b435ecee64b1a99eaa4f5e2ad0000000000000000000000000632501776bb853b435ecee64b1a99eaa4f5e2ad00000000000000000000000000000000000000000000000009182356d327b92800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14664,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d8ea2af408ced89a6b09059c1f27aba3b37d1afd000000000000000000000000d8ea2af408ced89a6b09059c1f27aba3b37d1afd000000000000000000000000000000000000000000000000044443c5f165d00200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14666,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000001bedb365b833dea1dcfdd2a924874da9d37c80b70000000000000000000000000000000000000000000000040c8aa6e4a42c6083,0x5c0c4ad3e8aebfa7401f18888f851734ffa293d4e730cd97e33db14656f7c5ed,2022-03-15 11:08:08.000 UTC,0,true -14667,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000020a97ad799236be3e4971f1fdc9a6a42f5e7f7b900000000000000000000000020a97ad799236be3e4971f1fdc9a6a42f5e7f7b9000000000000000000000000000000000000000000000000001ed5711348e11600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14668,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d942e0ac4f140ecf3bfb223421c73ec156dfcf53000000000000000000000000d942e0ac4f140ecf3bfb223421c73ec156dfcf5300000000000000000000000000000000000000000000000000245e3315b427a900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14669,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008fb4f6ae091050630bccde15062cbf547ad173720000000000000000000000008fb4f6ae091050630bccde15062cbf547ad173720000000000000000000000000000000000000000000000000173ebc27c68637400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14670,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001d5968b303ad5e782c052740e4bea456b90ba3470000000000000000000000001d5968b303ad5e782c052740e4bea456b90ba3470000000000000000000000000000000000000000000000000016f9936bfddefa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14672,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a843d8033f630f4c1d43776cebd69a045301e090000000000000000000000005a843d8033f630f4c1d43776cebd69a045301e09000000000000000000000000000000000000000000000000000b5e620f48000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14674,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000009036f17af475c9793dd3baef5f5610a10920b40c0000000000000000000000009036f17af475c9793dd3baef5f5610a10920b40c000000000000000000000000000000000000000000000000000000000608a06700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x005cbf91d16ea2b0f797d8e3d1ee7bc3790bc4e7b5fcf2b2df0fa1591300eaab,2022-02-26 10:21:41.000 UTC,0,true -14675,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000274cab0c9a1795add5e07cb478d8c1c072cc0bc1000000000000000000000000274cab0c9a1795add5e07cb478d8c1c072cc0bc1000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14676,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032996dcc495f32eec85dcbbd79c7467a3217e81600000000000000000000000032996dcc495f32eec85dcbbd79c7467a3217e8160000000000000000000000000000000000000000000000000014cda00a75385600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14677,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007c7e5cbabfa66f985f0ef32322c45014e193bd090000000000000000000000007c7e5cbabfa66f985f0ef32322c45014e193bd09000000000000000000000000000000000000000000000000052d93204ae3e08a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14678,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000687c5fba506025a4d633c4f2fcabdd3ff0524238000000000000000000000000687c5fba506025a4d633c4f2fcabdd3ff05242380000000000000000000000000000000000000000000000000012fe61583dbf7f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14680,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f0b830fb6b31a3aac77fe37b6e946bb6f5c83744000000000000000000000000f0b830fb6b31a3aac77fe37b6e946bb6f5c83744000000000000000000000000000000000000000000000000020808be2a7b719b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14683,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ff5207e5a1d0d8ccc2787215f8ed51b7daa5f1aa000000000000000000000000ff5207e5a1d0d8ccc2787215f8ed51b7daa5f1aa0000000000000000000000000000000000000000000000000038eb635efb4ab500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14684,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ee3479373e6a31185a5cf9a40a00469814b21420000000000000000000000005ee3479373e6a31185a5cf9a40a00469814b21420000000000000000000000000000000000000000000000000086863322a6358000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14685,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004d6b678a6f8ee90cecf5679d435fd2165b4b1f9b0000000000000000000000004d6b678a6f8ee90cecf5679d435fd2165b4b1f9b0000000000000000000000000000000000000000000000000012fd206edfeb9200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14686,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000007afc7f83b1ea7b96c480c3a70d7313ad5c89bca7000000000000000000000000000000000000000000000000947e094f18ae0000,,,1,true -14687,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005b420f03437908be1d67ddf9686363f1a08de0f40000000000000000000000005b420f03437908be1d67ddf9686363f1a08de0f40000000000000000000000000000000000000000000000000023b4edfe657a8100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14688,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029200feddcb5993f6f59d5e475985c267a9fd87e00000000000000000000000029200feddcb5993f6f59d5e475985c267a9fd87e000000000000000000000000000000000000000000000000000e8764d3e1e9aa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14690,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d18e84b21b6acb69628ecb85f8074fd441478050000000000000000000000000d18e84b21b6acb69628ecb85f8074fd441478050000000000000000000000000000000000000000000000000000e0ea594b3938b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14691,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006dafabb007a3f441a9de9b8ec245ba3fa07187080000000000000000000000006dafabb007a3f441a9de9b8ec245ba3fa071870800000000000000000000000000000000000000000000000009a19552b21f000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xcc6eefe4261f08a048b5cd48caf57980085d591b578bb0aac4f8cdcf2fd3023e,2022-02-06 14:58:55.000 UTC,0,true -14692,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007e20120d84d629e3c15fee39aa4d7c21e7d60f1d0000000000000000000000007e20120d84d629e3c15fee39aa4d7c21e7d60f1d00000000000000000000000000000000000000000000000000a1d467dabab3ae00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14693,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000057d6c4efb2ca6703674343d1a7c0492fba49a6f300000000000000000000000057d6c4efb2ca6703674343d1a7c0492fba49a6f300000000000000000000000000000000000000000000000000548401628df7c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14694,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001aeea3a2da3a47ed7bcf84448d535285914b02b50000000000000000000000001aeea3a2da3a47ed7bcf84448d535285914b02b5000000000000000000000000000000000000000000000000000bd0fcb09fe67500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14696,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000b9d7a43bb331fc2736f617373d60aaf8a5dbf4e0000000000000000000000000b9d7a43bb331fc2736f617373d60aaf8a5dbf4e0000000000000000000000000000000000000000000000003cee13d497943fe6000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14698,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000084a14f52dcda17356ae54b29891c9f6c0c88703300000000000000000000000084a14f52dcda17356ae54b29891c9f6c0c887033000000000000000000000000000000000000000000000000001597bf3959afa400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14699,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000091104c2f8f25be4ec4eaad392159e51c4e1f1b1000000000000000000000000091104c2f8f25be4ec4eaad392159e51c4e1f1b100000000000000000000000000000000000000000000000004f631a8fb3f21a300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14700,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000087c2b4a504b76cf71179ace53654c4e115623af900000000000000000000000087c2b4a504b76cf71179ace53654c4e115623af900000000000000000000000000000000000000000000000000102a56192e2cf600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14701,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039885aacc9dc0b053131605fc2f43b2f1275014300000000000000000000000039885aacc9dc0b053131605fc2f43b2f1275014300000000000000000000000000000000000000000000000000fce30a6d5a97d400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14702,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000008d3b3152265ed42c1fdfd8bcb553f4de4d4fef600000000000000000000000008d3b3152265ed42c1fdfd8bcb553f4de4d4fef6000000000000000000000000000000000000000000000000000bc69f4f8c70af00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14704,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000250e936d39bcdbc0b84c15b248a8356d341f06c7000000000000000000000000250e936d39bcdbc0b84c15b248a8356d341f06c700000000000000000000000000000000000000000000000000000000015c051900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14705,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dafb902776a0203d7e4cfecd5eef4e10bc5e48a9000000000000000000000000dafb902776a0203d7e4cfecd5eef4e10bc5e48a9000000000000000000000000000000000000000000000000019424f7e652d89100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14706,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007983c62d7ad755343fc57c4a3592f94381da79220000000000000000000000007983c62d7ad755343fc57c4a3592f94381da792200000000000000000000000000000000000000000000000000a7b4b88ea5e1b300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14708,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000b2720df9175987bef9e33ded3de06c78487310c0000000000000000000000000b2720df9175987bef9e33ded3de06c78487310c0000000000000000000000000000000000000000000000000019c17c77ad8d5c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14709,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000a2f8e4744fd85e9089a337fed259f05dd864a91e000000000000000000000000a2f8e4744fd85e9089a337fed259f05dd864a91e00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14713,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000001c46bda792db342cc8899a0335713dd6980138ea0000000000000000000000001c46bda792db342cc8899a0335713dd6980138ea00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14715,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000016f9a7d7877776b58625937333f9c9666470200900000000000000000000000016f9a7d7877776b58625937333f9c96664702009000000000000000000000000000000000000000000000000de6e8966c5e07d1000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14716,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000f57871a2f715f1a0d48965b6556cd14ef1577f33000000000000000000000000f57871a2f715f1a0d48965b6556cd14ef1577f3300000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14719,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000170246b41adf6c859093b17b19548c25c7109f93000000000000000000000000170246b41adf6c859093b17b19548c25c7109f9300000000000000000000000000000000000000000000000010a64c426f4a3cc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x39b4d4f5eb0ffab046b1482cb5dde3c200485fe8ea6b7916cb8886c5dff8e3cd,2021-11-30 09:47:57.000 UTC,0,true -14720,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dccb3b984c89f97afd551bede081f72e5c50c223000000000000000000000000dccb3b984c89f97afd551bede081f72e5c50c223000000000000000000000000000000000000000000000000076470f11aeba9a000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x15f16c287097ae4a5c2ed2199d30d7307ce743f655754d11f0c637fa6f197d70,2021-12-10 22:13:50.000 UTC,0,true -14721,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000022edfb7d07ccc3a28cd315c5ad9b9808a867e56300000000000000000000000022edfb7d07ccc3a28cd315c5ad9b9808a867e56300000000000000000000000000000000000000000000000003a492a4feddf97d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x79f5d9d87d6fa5e4a1b05bf442dd15fe8ed3a846d080a79c08eaf699590b930c,2021-12-19 05:40:38.000 UTC,0,true -14730,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000e25ff9081a1d09897f255b5c557605c2d0bda77d0000000000000000000000000000000000000000000000007492cb7eb1480000,,,1,true -14732,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c5f10840a067045587761f5563bdaf758fa298b9000000000000000000000000c5f10840a067045587761f5563bdaf758fa298b900000000000000000000000000000000000000000000000000ee8e4d8fbfe23600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14736,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9fc7c85de39f5b36f99a9ef5385d3267584ac06000000000000000000000000f9fc7c85de39f5b36f99a9ef5385d3267584ac0600000000000000000000000000000000000000000000000003fae9a875792bec00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x67c38d53adff1620bc1ff373a5ca241fa41e8920de6a143a17e03a944d5d766c,2021-12-11 23:33:38.000 UTC,0,true -14738,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a95c6b020840f706d036af32143175b7a3d11ee0000000000000000000000006a95c6b020840f706d036af32143175b7a3d11ee000000000000000000000000000000000000000000000000000de307e461f55400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14741,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0f90e81e6c89d7581c55dade471fff8fd3cff60000000000000000000000000c0f90e81e6c89d7581c55dade471fff8fd3cff600000000000000000000000000000000000000000000000000a616e0973fe000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14744,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000065890d61f79db0e2b9107107d0a02daa35e123ee00000000000000000000000065890d61f79db0e2b9107107d0a02daa35e123ee000000000000000000000000000000000000000000000000008dd060e5804c6600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14745,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f7db26ef8eab61a68df3c285ccc04b9e60102510000000000000000000000007f7db26ef8eab61a68df3c285ccc04b9e6010251000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14746,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1fe1f074b32013a3eefd57d5fb1b853e38522e6000000000000000000000000c1fe1f074b32013a3eefd57d5fb1b853e38522e600000000000000000000000000000000000000000000000004b530b28cee817a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x94c4c137096132aac23ae9d5fbd392d7dc78edbf4b90ceef3f2f4d7735d0081a,2021-11-25 03:41:42.000 UTC,0,true -14747,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d819c62dde216ef3b508d348542b59477efd606f000000000000000000000000d819c62dde216ef3b508d348542b59477efd606f0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14751,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000478a4ad6fb7e44c2f0a5af299399a9c797fc98f2000000000000000000000000478a4ad6fb7e44c2f0a5af299399a9c797fc98f200000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14752,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000b6365c4670076b90f7958f7d20455c3a8999fed9000000000000000000000000b6365c4670076b90f7958f7d20455c3a8999fed900000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14753,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a4ddc5af57f7fa6710346ebe18e5a3ca9e086a5d000000000000000000000000a4ddc5af57f7fa6710346ebe18e5a3ca9e086a5d000000000000000000000000000000000000000000000000020688cb3a02ceb600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14754,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000ec64e346fddc63ab96486288294be8b6a346a40d000000000000000000000000ec64e346fddc63ab96486288294be8b6a346a40d00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14760,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000046f1a0b0af9eb44089fec8ee8bbe74f6e58661d300000000000000000000000046f1a0b0af9eb44089fec8ee8bbe74f6e58661d300000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14762,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000001646b30f2f5d1d94c58e78f748af25cd5831112f0000000000000000000000001646b30f2f5d1d94c58e78f748af25cd5831112f00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14768,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000f33ee8617e5db3e5f7ccf08f9f0159d40b5e7252000000000000000000000000f33ee8617e5db3e5f7ccf08f9f0159d40b5e725200000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14770,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000029396eb0a246fa5321d30dbf01261fddaa16067e00000000000000000000000029396eb0a246fa5321d30dbf01261fddaa16067e00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14771,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ddd6ae239a5eaf73608eedd8f47e0eb1fc1474ff000000000000000000000000ddd6ae239a5eaf73608eedd8f47e0eb1fc1474ff00000000000000000000000000000000000000000000000000099931b788348000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14774,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000b86777a778b30889765fa9e5230a24f6ffafa94f000000000000000000000000b86777a778b30889765fa9e5230a24f6ffafa94f0000000000000000000000000000000000000000000000000000000001198c7600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14775,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000a829116c1430c7431e037c0a71547ec247246a02000000000000000000000000a829116c1430c7431e037c0a71547ec247246a0200000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14776,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007e44f3d32c23f44e83bc194ec6811d8ddad507b50000000000000000000000007e44f3d32c23f44e83bc194ec6811d8ddad507b500000000000000000000000000000000000000000000000000a9c8df4d443aac00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xae9b9ede21e54cddc000adc7e59610c1556cc4efb41474f987de576c258901f1,2022-04-28 08:41:38.000 UTC,0,true -14777,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001c99aa08febc29634b97100c576e2f0172f32fd60000000000000000000000001c99aa08febc29634b97100c576e2f0172f32fd6000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14778,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008185191ca6bfb4b76214abb3572be413e51d24bc0000000000000000000000008185191ca6bfb4b76214abb3572be413e51d24bc000000000000000000000000000000000000000000000000058d15e17628000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14780,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000b1fd98f016718c905a9a5ce55cb9e4f8e163b9fc000000000000000000000000b1fd98f016718c905a9a5ce55cb9e4f8e163b9fc00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14784,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008185191ca6bfb4b76214abb3572be413e51d24bc0000000000000000000000008185191ca6bfb4b76214abb3572be413e51d24bc000000000000000000000000000000000000000000000000015b73de76859ec000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14785,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000f7f4352fa9b3fb1a57adcd9f62a11a5f5d40cea6000000000000000000000000f7f4352fa9b3fb1a57adcd9f62a11a5f5d40cea600000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14786,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000d7b4b35bc317f731c86757c29a0c86754f15b0cd000000000000000000000000d7b4b35bc317f731c86757c29a0c86754f15b0cd00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14787,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000f67bc705466a5480190525436d36bc4e821dd7e2000000000000000000000000f67bc705466a5480190525436d36bc4e821dd7e200000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14788,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000d1d6733de35ed9025fddea264d35b860edce3e25000000000000000000000000d1d6733de35ed9025fddea264d35b860edce3e2500000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14789,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000275e096df57fa32aea8be81188ed0dbbe4c3efcf000000000000000000000000275e096df57fa32aea8be81188ed0dbbe4c3efcf00000000000000000000000000000000000000000000000000f98ba97396c6a400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14791,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000635c5a713bbd9132617544db8dcdcae549e6f738000000000000000000000000635c5a713bbd9132617544db8dcdcae549e6f73800000000000000000000000000000000000000000000000002dac46a5f7dc84c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14792,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d48f76b510197152810bd58b91bb5983020e9510000000000000000000000008d48f76b510197152810bd58b91bb5983020e9510000000000000000000000000000000000000000000000000086942faaf4828600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x6c18ef0eb0db380611f07cce8e9573bcee9b636a608169a9528a39bbd6d98ee1,2022-05-24 04:24:07.000 UTC,0,true -14793,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000bfd687d8adf6b3ebe53e922b93d2915163ded26800000000000000000000000000000000000000000000000020020b6eaf8d493b,,,1,true -14794,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000005d25f77d1704a2c18e406404483aa594c83c23050000000000000000000000005d25f77d1704a2c18e406404483aa594c83c2305000000000000000000000000000000000000000000000000000000000645fa6a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14796,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a09f46e3b7165bf38af1ac13d89be34bdf662e7f000000000000000000000000a09f46e3b7165bf38af1ac13d89be34bdf662e7f000000000000000000000000000000000000000000000000001f79f61064fd8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14797,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000000e910a91f98ca9b5848b16d5c294645a2c4ba64300000000000000000000000000000000000000000000000698e90d908d162aab,,,1,true -14798,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf53e53ac22160e47675fe7dfc7a9afb3547b0d2000000000000000000000000bf53e53ac22160e47675fe7dfc7a9afb3547b0d200000000000000000000000000000000000000000000000000036ecd0982094000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14804,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002cbc7ebafca5f1e33e15e5cccbc24ecfc0c55a3e0000000000000000000000002cbc7ebafca5f1e33e15e5cccbc24ecfc0c55a3e0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14805,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000053d7043fb8a7d162eba5d9bb374868595d8d203b00000000000000000000000053d7043fb8a7d162eba5d9bb374868595d8d203b000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14806,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e7dc00521e64c3146ed4b9a94a0bdadc55d79b01000000000000000000000000e7dc00521e64c3146ed4b9a94a0bdadc55d79b01000000000000000000000000000000000000000000000000020a2aa21cbdf9a600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xa96bf7fc59635e05a18318f417bf3d69c81b38bf6e85383f60ec211dff1a6a7e,2021-11-23 08:16:28.000 UTC,0,true -14807,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000616ec7d0b66cad90f901e36bac4d91490ac3a99d000000000000000000000000616ec7d0b66cad90f901e36bac4d91490ac3a99d0000000000000000000000000000000000000000000000000429d069189e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14808,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009f16b1691277d60f084a2346c6c6e48393b471450000000000000000000000009f16b1691277d60f084a2346c6c6e48393b471450000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14810,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005553729d902df38cff09d3077250af73dc8244440000000000000000000000005553729d902df38cff09d3077250af73dc8244440000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14811,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005553729d902df38cff09d3077250af73dc8244440000000000000000000000005553729d902df38cff09d3077250af73dc8244440000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14812,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a7c79534b52acb69b5231868dae7b81006689cf9000000000000000000000000a7c79534b52acb69b5231868dae7b81006689cf90000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14813,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029d333e2bf6b75d669675ebb9ce0b5a78a6eace500000000000000000000000029d333e2bf6b75d669675ebb9ce0b5a78a6eace50000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14814,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c8ef161fe4df88be6baf32ac8981d739529cdd70000000000000000000000004c8ef161fe4df88be6baf32ac8981d739529cdd70000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14815,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000065197fdf8de5ae05c3e622d116a682b01cf748d200000000000000000000000065197fdf8de5ae05c3e622d116a682b01cf748d2000000000000000000000000000000000000000000000000015cfa7c7d19314000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14816,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dff855094f0bb1cf1a9f5284b7b095e402b946d5000000000000000000000000dff855094f0bb1cf1a9f5284b7b095e402b946d50000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14817,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000481f1e27ea5a1c542219677df58638d1135c0238000000000000000000000000481f1e27ea5a1c542219677df58638d1135c02380000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14818,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000959c21342d6a7c9f7b8197a7baa004c18eaa12c8000000000000000000000000959c21342d6a7c9f7b8197a7baa004c18eaa12c80000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14819,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ca7ad9584ea2316922acc3c108fbb6cbdd8cc9c4000000000000000000000000ca7ad9584ea2316922acc3c108fbb6cbdd8cc9c40000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14820,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008b786c184fa67e87309f7ead62e193eff8ffa9970000000000000000000000008b786c184fa67e87309f7ead62e193eff8ffa997000000000000000000000000000000000000000000000000007bed343d4b085c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14821,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000059bae35cee6a074e4945376e65111c7f06cf3f5a00000000000000000000000059bae35cee6a074e4945376e65111c7f06cf3f5a0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14822,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c009516ff3a46d0bcb08ae979e55cf0b09e4a43c000000000000000000000000c009516ff3a46d0bcb08ae979e55cf0b09e4a43c0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14823,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d85b4c4c4f5781a957a1caef0f80934227f73ceb000000000000000000000000d85b4c4c4f5781a957a1caef0f80934227f73ceb0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14824,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a5fd3e33d3618432e7a062edd7c850657b2baf60000000000000000000000004a5fd3e33d3618432e7a062edd7c850657b2baf60000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14825,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e530b61b19a2066d43542a45c4bc3bd428f9fbf7000000000000000000000000e530b61b19a2066d43542a45c4bc3bd428f9fbf7000000000000000000000000000000000000000000000000006488b27145784000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14827,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005757ef8da15fb2e01f4a743f12e0ec7d048e3ca50000000000000000000000005757ef8da15fb2e01f4a743f12e0ec7d048e3ca50000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14828,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005757ef8da15fb2e01f4a743f12e0ec7d048e3ca50000000000000000000000005757ef8da15fb2e01f4a743f12e0ec7d048e3ca50000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14829,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005757ef8da15fb2e01f4a743f12e0ec7d048e3ca50000000000000000000000005757ef8da15fb2e01f4a743f12e0ec7d048e3ca50000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14830,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005757ef8da15fb2e01f4a743f12e0ec7d048e3ca50000000000000000000000005757ef8da15fb2e01f4a743f12e0ec7d048e3ca50000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14832,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a746a530bdc89096d012bbaefa4bf6dbb185b030000000000000000000000002a746a530bdc89096d012bbaefa4bf6dbb185b030000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14833,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a746a530bdc89096d012bbaefa4bf6dbb185b030000000000000000000000002a746a530bdc89096d012bbaefa4bf6dbb185b030000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14834,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a746a530bdc89096d012bbaefa4bf6dbb185b030000000000000000000000002a746a530bdc89096d012bbaefa4bf6dbb185b030000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14835,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a746a530bdc89096d012bbaefa4bf6dbb185b030000000000000000000000002a746a530bdc89096d012bbaefa4bf6dbb185b030000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14836,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d1df56799398477b16790eea966927808b8dead0000000000000000000000008d1df56799398477b16790eea966927808b8dead0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14837,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d1df56799398477b16790eea966927808b8dead0000000000000000000000008d1df56799398477b16790eea966927808b8dead0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14838,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d1df56799398477b16790eea966927808b8dead0000000000000000000000008d1df56799398477b16790eea966927808b8dead0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14839,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d1df56799398477b16790eea966927808b8dead0000000000000000000000008d1df56799398477b16790eea966927808b8dead0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14840,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d2ea91ea2ec05d54f01494da98c9739e41c71730000000000000000000000000d2ea91ea2ec05d54f01494da98c9739e41c71730000000000000000000000000000000000000000000000000075d579054f780000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x834cd48c00ac06a4423200ebabe38271d3c844a0832ef3e5a514c4288c58a568,2022-04-24 03:49:58.000 UTC,0,true -14841,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d127fbe1408696af0a9ab6c93b7449e33641fd0a000000000000000000000000d127fbe1408696af0a9ab6c93b7449e33641fd0a0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14842,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d127fbe1408696af0a9ab6c93b7449e33641fd0a000000000000000000000000d127fbe1408696af0a9ab6c93b7449e33641fd0a0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14843,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d127fbe1408696af0a9ab6c93b7449e33641fd0a000000000000000000000000d127fbe1408696af0a9ab6c93b7449e33641fd0a0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14844,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d127fbe1408696af0a9ab6c93b7449e33641fd0a000000000000000000000000d127fbe1408696af0a9ab6c93b7449e33641fd0a0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14845,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004d00afd8f1cc62e50ac768f5f2a639070ab2ae7b0000000000000000000000004d00afd8f1cc62e50ac768f5f2a639070ab2ae7b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14846,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004d00afd8f1cc62e50ac768f5f2a639070ab2ae7b0000000000000000000000004d00afd8f1cc62e50ac768f5f2a639070ab2ae7b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14847,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004d00afd8f1cc62e50ac768f5f2a639070ab2ae7b0000000000000000000000004d00afd8f1cc62e50ac768f5f2a639070ab2ae7b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14848,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004d00afd8f1cc62e50ac768f5f2a639070ab2ae7b0000000000000000000000004d00afd8f1cc62e50ac768f5f2a639070ab2ae7b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14849,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080b0bcdafbbd39bf74173c48a384e675a37ec74b00000000000000000000000080b0bcdafbbd39bf74173c48a384e675a37ec74b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14850,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080b0bcdafbbd39bf74173c48a384e675a37ec74b00000000000000000000000080b0bcdafbbd39bf74173c48a384e675a37ec74b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14851,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080b0bcdafbbd39bf74173c48a384e675a37ec74b00000000000000000000000080b0bcdafbbd39bf74173c48a384e675a37ec74b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14852,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080b0bcdafbbd39bf74173c48a384e675a37ec74b00000000000000000000000080b0bcdafbbd39bf74173c48a384e675a37ec74b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14853,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be3f3d91f54f93aacaa6bb7fb67eaa90b790de72000000000000000000000000be3f3d91f54f93aacaa6bb7fb67eaa90b790de720000000000000000000000000000000000000000000000000dd521f3c75540b500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x36c2c721697b5d10df1a55ae533972abb00bc599d42a0fb7ef58f73fbfbc4a11,2021-11-25 07:59:06.000 UTC,0,true -14854,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000059bae35cee6a074e4945376e65111c7f06cf3f5a00000000000000000000000059bae35cee6a074e4945376e65111c7f06cf3f5a0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14855,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000059bae35cee6a074e4945376e65111c7f06cf3f5a00000000000000000000000059bae35cee6a074e4945376e65111c7f06cf3f5a0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14856,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000059bae35cee6a074e4945376e65111c7f06cf3f5a00000000000000000000000059bae35cee6a074e4945376e65111c7f06cf3f5a0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14859,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001c46bda792db342cc8899a0335713dd6980138ea0000000000000000000000001c46bda792db342cc8899a0335713dd6980138ea0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14860,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001c46bda792db342cc8899a0335713dd6980138ea0000000000000000000000001c46bda792db342cc8899a0335713dd6980138ea0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14861,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c009516ff3a46d0bcb08ae979e55cf0b09e4a43c000000000000000000000000c009516ff3a46d0bcb08ae979e55cf0b09e4a43c0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14862,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c009516ff3a46d0bcb08ae979e55cf0b09e4a43c000000000000000000000000c009516ff3a46d0bcb08ae979e55cf0b09e4a43c0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14863,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001c46bda792db342cc8899a0335713dd6980138ea0000000000000000000000001c46bda792db342cc8899a0335713dd6980138ea0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14864,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6365c4670076b90f7958f7d20455c3a8999fed9000000000000000000000000b6365c4670076b90f7958f7d20455c3a8999fed90000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14865,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c009516ff3a46d0bcb08ae979e55cf0b09e4a43c000000000000000000000000c009516ff3a46d0bcb08ae979e55cf0b09e4a43c0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14866,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6365c4670076b90f7958f7d20455c3a8999fed9000000000000000000000000b6365c4670076b90f7958f7d20455c3a8999fed90000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14867,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6365c4670076b90f7958f7d20455c3a8999fed9000000000000000000000000b6365c4670076b90f7958f7d20455c3a8999fed90000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14868,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d85b4c4c4f5781a957a1caef0f80934227f73ceb000000000000000000000000d85b4c4c4f5781a957a1caef0f80934227f73ceb0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14869,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a829116c1430c7431e037c0a71547ec247246a02000000000000000000000000a829116c1430c7431e037c0a71547ec247246a020000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14870,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d85b4c4c4f5781a957a1caef0f80934227f73ceb000000000000000000000000d85b4c4c4f5781a957a1caef0f80934227f73ceb0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14871,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a829116c1430c7431e037c0a71547ec247246a02000000000000000000000000a829116c1430c7431e037c0a71547ec247246a020000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14872,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d85b4c4c4f5781a957a1caef0f80934227f73ceb000000000000000000000000d85b4c4c4f5781a957a1caef0f80934227f73ceb0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14873,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a829116c1430c7431e037c0a71547ec247246a02000000000000000000000000a829116c1430c7431e037c0a71547ec247246a020000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14874,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a5fd3e33d3618432e7a062edd7c850657b2baf60000000000000000000000004a5fd3e33d3618432e7a062edd7c850657b2baf60000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14875,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7b4b35bc317f731c86757c29a0c86754f15b0cd000000000000000000000000d7b4b35bc317f731c86757c29a0c86754f15b0cd0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14876,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7b4b35bc317f731c86757c29a0c86754f15b0cd000000000000000000000000d7b4b35bc317f731c86757c29a0c86754f15b0cd0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14877,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7b4b35bc317f731c86757c29a0c86754f15b0cd000000000000000000000000d7b4b35bc317f731c86757c29a0c86754f15b0cd0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14878,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f67bc705466a5480190525436d36bc4e821dd7e2000000000000000000000000f67bc705466a5480190525436d36bc4e821dd7e20000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14879,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f67bc705466a5480190525436d36bc4e821dd7e2000000000000000000000000f67bc705466a5480190525436d36bc4e821dd7e20000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14880,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a5fd3e33d3618432e7a062edd7c850657b2baf60000000000000000000000004a5fd3e33d3618432e7a062edd7c850657b2baf60000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14881,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a5fd3e33d3618432e7a062edd7c850657b2baf60000000000000000000000004a5fd3e33d3618432e7a062edd7c850657b2baf60000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14882,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f67bc705466a5480190525436d36bc4e821dd7e2000000000000000000000000f67bc705466a5480190525436d36bc4e821dd7e20000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14883,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b1fd98f016718c905a9a5ce55cb9e4f8e163b9fc000000000000000000000000b1fd98f016718c905a9a5ce55cb9e4f8e163b9fc0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14884,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b1fd98f016718c905a9a5ce55cb9e4f8e163b9fc000000000000000000000000b1fd98f016718c905a9a5ce55cb9e4f8e163b9fc0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14885,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b1fd98f016718c905a9a5ce55cb9e4f8e163b9fc000000000000000000000000b1fd98f016718c905a9a5ce55cb9e4f8e163b9fc0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14886,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7f4352fa9b3fb1a57adcd9f62a11a5f5d40cea6000000000000000000000000f7f4352fa9b3fb1a57adcd9f62a11a5f5d40cea60000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14887,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7f4352fa9b3fb1a57adcd9f62a11a5f5d40cea6000000000000000000000000f7f4352fa9b3fb1a57adcd9f62a11a5f5d40cea60000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14888,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7f4352fa9b3fb1a57adcd9f62a11a5f5d40cea6000000000000000000000000f7f4352fa9b3fb1a57adcd9f62a11a5f5d40cea60000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14889,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d1d6733de35ed9025fddea264d35b860edce3e25000000000000000000000000d1d6733de35ed9025fddea264d35b860edce3e250000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14890,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d1d6733de35ed9025fddea264d35b860edce3e25000000000000000000000000d1d6733de35ed9025fddea264d35b860edce3e250000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14891,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d1d6733de35ed9025fddea264d35b860edce3e25000000000000000000000000d1d6733de35ed9025fddea264d35b860edce3e250000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14892,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000250e936d39bcdbc0b84c15b248a8356d341f06c7000000000000000000000000250e936d39bcdbc0b84c15b248a8356d341f06c70000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14893,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000250e936d39bcdbc0b84c15b248a8356d341f06c7000000000000000000000000250e936d39bcdbc0b84c15b248a8356d341f06c70000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14894,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000250e936d39bcdbc0b84c15b248a8356d341f06c7000000000000000000000000250e936d39bcdbc0b84c15b248a8356d341f06c70000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14895,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000057d6c4efb2ca6703674343d1a7c0492fba49a6f300000000000000000000000057d6c4efb2ca6703674343d1a7c0492fba49a6f30000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14896,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000057d6c4efb2ca6703674343d1a7c0492fba49a6f300000000000000000000000057d6c4efb2ca6703674343d1a7c0492fba49a6f30000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14897,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000057c6155a0bf0a040dc59021fd32c95f35dc632c000000000000000000000000057c6155a0bf0a040dc59021fd32c95f35dc632c00000000000000000000000000000000000000000000000000142e1355d8a88b800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14899,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021a38a7ee0675e249fe000a21efe55e4c366247d00000000000000000000000021a38a7ee0675e249fe000a21efe55e4c366247d0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14900,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021a38a7ee0675e249fe000a21efe55e4c366247d00000000000000000000000021a38a7ee0675e249fe000a21efe55e4c366247d0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14901,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021a38a7ee0675e249fe000a21efe55e4c366247d00000000000000000000000021a38a7ee0675e249fe000a21efe55e4c366247d0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14902,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021a38a7ee0675e249fe000a21efe55e4c366247d00000000000000000000000021a38a7ee0675e249fe000a21efe55e4c366247d0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14903,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021a38a7ee0675e249fe000a21efe55e4c366247d00000000000000000000000021a38a7ee0675e249fe000a21efe55e4c366247d0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14904,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7a1e18a6cb3e98b3c01005484108f21cc50bdb4000000000000000000000000f7a1e18a6cb3e98b3c01005484108f21cc50bdb40000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14905,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7a1e18a6cb3e98b3c01005484108f21cc50bdb4000000000000000000000000f7a1e18a6cb3e98b3c01005484108f21cc50bdb40000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14906,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7a1e18a6cb3e98b3c01005484108f21cc50bdb4000000000000000000000000f7a1e18a6cb3e98b3c01005484108f21cc50bdb40000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14907,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7a1e18a6cb3e98b3c01005484108f21cc50bdb4000000000000000000000000f7a1e18a6cb3e98b3c01005484108f21cc50bdb40000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14908,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039f8b4c776a3baac5bbfafc8f4abcf2a720c4b2100000000000000000000000039f8b4c776a3baac5bbfafc8f4abcf2a720c4b210000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14909,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039f8b4c776a3baac5bbfafc8f4abcf2a720c4b2100000000000000000000000039f8b4c776a3baac5bbfafc8f4abcf2a720c4b210000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14910,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039f8b4c776a3baac5bbfafc8f4abcf2a720c4b2100000000000000000000000039f8b4c776a3baac5bbfafc8f4abcf2a720c4b210000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14911,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039f8b4c776a3baac5bbfafc8f4abcf2a720c4b2100000000000000000000000039f8b4c776a3baac5bbfafc8f4abcf2a720c4b210000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14912,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000250047cdeadd75c39b44c605a348bc46d8d28f8b000000000000000000000000250047cdeadd75c39b44c605a348bc46d8d28f8b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14913,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000250047cdeadd75c39b44c605a348bc46d8d28f8b000000000000000000000000250047cdeadd75c39b44c605a348bc46d8d28f8b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14914,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000250047cdeadd75c39b44c605a348bc46d8d28f8b000000000000000000000000250047cdeadd75c39b44c605a348bc46d8d28f8b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14915,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000250047cdeadd75c39b44c605a348bc46d8d28f8b000000000000000000000000250047cdeadd75c39b44c605a348bc46d8d28f8b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14916,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e74fb25f9faafc4d957adc6109a9638150bcf6ed000000000000000000000000e74fb25f9faafc4d957adc6109a9638150bcf6ed0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14917,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e74fb25f9faafc4d957adc6109a9638150bcf6ed000000000000000000000000e74fb25f9faafc4d957adc6109a9638150bcf6ed0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14918,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e74fb25f9faafc4d957adc6109a9638150bcf6ed000000000000000000000000e74fb25f9faafc4d957adc6109a9638150bcf6ed0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14919,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e74fb25f9faafc4d957adc6109a9638150bcf6ed000000000000000000000000e74fb25f9faafc4d957adc6109a9638150bcf6ed0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14920,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005c30ff3315038e68b94eca460002da04c72305580000000000000000000000005c30ff3315038e68b94eca460002da04c72305580000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14921,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005c30ff3315038e68b94eca460002da04c72305580000000000000000000000005c30ff3315038e68b94eca460002da04c72305580000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14922,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005c30ff3315038e68b94eca460002da04c72305580000000000000000000000005c30ff3315038e68b94eca460002da04c72305580000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14923,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005c30ff3315038e68b94eca460002da04c72305580000000000000000000000005c30ff3315038e68b94eca460002da04c72305580000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14924,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf87fd806711400405bfab60c9a78585324eb0b9000000000000000000000000bf87fd806711400405bfab60c9a78585324eb0b90000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14926,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf87fd806711400405bfab60c9a78585324eb0b9000000000000000000000000bf87fd806711400405bfab60c9a78585324eb0b90000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14927,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf87fd806711400405bfab60c9a78585324eb0b9000000000000000000000000bf87fd806711400405bfab60c9a78585324eb0b90000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14928,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf87fd806711400405bfab60c9a78585324eb0b9000000000000000000000000bf87fd806711400405bfab60c9a78585324eb0b90000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14929,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f902c7eada99de8bf3cdaf3fa5bddba6a1ecc70a000000000000000000000000f902c7eada99de8bf3cdaf3fa5bddba6a1ecc70a0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14930,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f902c7eada99de8bf3cdaf3fa5bddba6a1ecc70a000000000000000000000000f902c7eada99de8bf3cdaf3fa5bddba6a1ecc70a0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14931,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f902c7eada99de8bf3cdaf3fa5bddba6a1ecc70a000000000000000000000000f902c7eada99de8bf3cdaf3fa5bddba6a1ecc70a0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14932,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f902c7eada99de8bf3cdaf3fa5bddba6a1ecc70a000000000000000000000000f902c7eada99de8bf3cdaf3fa5bddba6a1ecc70a0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14933,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000081d0a08250e3bb8618ba3d10871fcf001bfd87d000000000000000000000000081d0a08250e3bb8618ba3d10871fcf001bfd87d0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14934,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000081d0a08250e3bb8618ba3d10871fcf001bfd87d000000000000000000000000081d0a08250e3bb8618ba3d10871fcf001bfd87d0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14935,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000081d0a08250e3bb8618ba3d10871fcf001bfd87d000000000000000000000000081d0a08250e3bb8618ba3d10871fcf001bfd87d0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14936,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000081d0a08250e3bb8618ba3d10871fcf001bfd87d000000000000000000000000081d0a08250e3bb8618ba3d10871fcf001bfd87d0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14937,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000011878d39b635e3d9a188dcafe3c7c4e8517674c900000000000000000000000011878d39b635e3d9a188dcafe3c7c4e8517674c90000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14938,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000011878d39b635e3d9a188dcafe3c7c4e8517674c900000000000000000000000011878d39b635e3d9a188dcafe3c7c4e8517674c90000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14939,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000011878d39b635e3d9a188dcafe3c7c4e8517674c900000000000000000000000011878d39b635e3d9a188dcafe3c7c4e8517674c90000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14940,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000011878d39b635e3d9a188dcafe3c7c4e8517674c900000000000000000000000011878d39b635e3d9a188dcafe3c7c4e8517674c90000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14941,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000011878d39b635e3d9a188dcafe3c7c4e8517674c900000000000000000000000011878d39b635e3d9a188dcafe3c7c4e8517674c90000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14943,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000007a557fff0f0ac24b11bda40650fd873e114ebcae0000000000000000000000007a557fff0f0ac24b11bda40650fd873e114ebcae00000000000000000000000000000000000000000000000000000000dc193bbf00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -14944,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d3335ada4acdc568d4a78e8ec7b402e99b082550000000000000000000000005d3335ada4acdc568d4a78e8ec7b402e99b082550000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14946,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d3335ada4acdc568d4a78e8ec7b402e99b082550000000000000000000000005d3335ada4acdc568d4a78e8ec7b402e99b082550000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14947,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d3335ada4acdc568d4a78e8ec7b402e99b082550000000000000000000000005d3335ada4acdc568d4a78e8ec7b402e99b082550000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14948,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d3335ada4acdc568d4a78e8ec7b402e99b082550000000000000000000000005d3335ada4acdc568d4a78e8ec7b402e99b082550000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14952,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e92d33a9709803d1bfdc82143cf7078406ece6b0000000000000000000000000e92d33a9709803d1bfdc82143cf7078406ece6b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14953,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e92d33a9709803d1bfdc82143cf7078406ece6b0000000000000000000000000e92d33a9709803d1bfdc82143cf7078406ece6b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14954,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e92d33a9709803d1bfdc82143cf7078406ece6b0000000000000000000000000e92d33a9709803d1bfdc82143cf7078406ece6b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14955,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e92d33a9709803d1bfdc82143cf7078406ece6b0000000000000000000000000e92d33a9709803d1bfdc82143cf7078406ece6b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14956,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e92d33a9709803d1bfdc82143cf7078406ece6b0000000000000000000000000e92d33a9709803d1bfdc82143cf7078406ece6b0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14957,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fae56b193a22404e9414247fedeb1c58f02ad2c4000000000000000000000000fae56b193a22404e9414247fedeb1c58f02ad2c40000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14958,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fae56b193a22404e9414247fedeb1c58f02ad2c4000000000000000000000000fae56b193a22404e9414247fedeb1c58f02ad2c40000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14959,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fae56b193a22404e9414247fedeb1c58f02ad2c4000000000000000000000000fae56b193a22404e9414247fedeb1c58f02ad2c40000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14961,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fae56b193a22404e9414247fedeb1c58f02ad2c4000000000000000000000000fae56b193a22404e9414247fedeb1c58f02ad2c40000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14962,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fae56b193a22404e9414247fedeb1c58f02ad2c4000000000000000000000000fae56b193a22404e9414247fedeb1c58f02ad2c40000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14963,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cab2f322841c850e813ff3c5f4bc827d67a35614000000000000000000000000cab2f322841c850e813ff3c5f4bc827d67a356140000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14964,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cab2f322841c850e813ff3c5f4bc827d67a35614000000000000000000000000cab2f322841c850e813ff3c5f4bc827d67a356140000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14965,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cab2f322841c850e813ff3c5f4bc827d67a35614000000000000000000000000cab2f322841c850e813ff3c5f4bc827d67a356140000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14966,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cab2f322841c850e813ff3c5f4bc827d67a35614000000000000000000000000cab2f322841c850e813ff3c5f4bc827d67a356140000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14967,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf1789a59818c9f3fa9261325de902f79aa03264000000000000000000000000cf1789a59818c9f3fa9261325de902f79aa032640000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14968,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf1789a59818c9f3fa9261325de902f79aa03264000000000000000000000000cf1789a59818c9f3fa9261325de902f79aa032640000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14969,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf1789a59818c9f3fa9261325de902f79aa03264000000000000000000000000cf1789a59818c9f3fa9261325de902f79aa032640000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14970,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf1789a59818c9f3fa9261325de902f79aa03264000000000000000000000000cf1789a59818c9f3fa9261325de902f79aa032640000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14971,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000afbc9dd7cee3646e8cff9500ce654b4185cbeabe000000000000000000000000afbc9dd7cee3646e8cff9500ce654b4185cbeabe0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14972,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000afbc9dd7cee3646e8cff9500ce654b4185cbeabe000000000000000000000000afbc9dd7cee3646e8cff9500ce654b4185cbeabe0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14973,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000afbc9dd7cee3646e8cff9500ce654b4185cbeabe000000000000000000000000afbc9dd7cee3646e8cff9500ce654b4185cbeabe0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14974,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000afbc9dd7cee3646e8cff9500ce654b4185cbeabe000000000000000000000000afbc9dd7cee3646e8cff9500ce654b4185cbeabe0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14975,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000432412ef806641cf51a8276616d28b98c086aef0000000000000000000000000432412ef806641cf51a8276616d28b98c086aef0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14976,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000432412ef806641cf51a8276616d28b98c086aef0000000000000000000000000432412ef806641cf51a8276616d28b98c086aef0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14977,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000432412ef806641cf51a8276616d28b98c086aef0000000000000000000000000432412ef806641cf51a8276616d28b98c086aef0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14978,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000432412ef806641cf51a8276616d28b98c086aef0000000000000000000000000432412ef806641cf51a8276616d28b98c086aef0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14979,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037e03168c330d26ee749be0d7ab734ed2459af0300000000000000000000000037e03168c330d26ee749be0d7ab734ed2459af030000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14980,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037e03168c330d26ee749be0d7ab734ed2459af0300000000000000000000000037e03168c330d26ee749be0d7ab734ed2459af030000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14981,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037e03168c330d26ee749be0d7ab734ed2459af0300000000000000000000000037e03168c330d26ee749be0d7ab734ed2459af030000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14982,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037e03168c330d26ee749be0d7ab734ed2459af0300000000000000000000000037e03168c330d26ee749be0d7ab734ed2459af030000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14983,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea324dc75c40ab87340c966e21c0ad1f74fe6a6c000000000000000000000000ea324dc75c40ab87340c966e21c0ad1f74fe6a6c0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14985,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea324dc75c40ab87340c966e21c0ad1f74fe6a6c000000000000000000000000ea324dc75c40ab87340c966e21c0ad1f74fe6a6c0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14986,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea324dc75c40ab87340c966e21c0ad1f74fe6a6c000000000000000000000000ea324dc75c40ab87340c966e21c0ad1f74fe6a6c0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14987,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ea324dc75c40ab87340c966e21c0ad1f74fe6a6c000000000000000000000000ea324dc75c40ab87340c966e21c0ad1f74fe6a6c0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14988,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8c82153578a508c797d9f47087ff9a049d4a87c000000000000000000000000b8c82153578a508c797d9f47087ff9a049d4a87c0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14989,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8c82153578a508c797d9f47087ff9a049d4a87c000000000000000000000000b8c82153578a508c797d9f47087ff9a049d4a87c0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14990,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8c82153578a508c797d9f47087ff9a049d4a87c000000000000000000000000b8c82153578a508c797d9f47087ff9a049d4a87c0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14991,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8c82153578a508c797d9f47087ff9a049d4a87c000000000000000000000000b8c82153578a508c797d9f47087ff9a049d4a87c0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14992,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5c8069f3e04bc4acef97c499eff3e19b389e13e000000000000000000000000e5c8069f3e04bc4acef97c499eff3e19b389e13e0000000000000000000000000000000000000000000000000184311faa247e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14993,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000062a2d0f2bdb776da7bd258f076a716b14aef8fce00000000000000000000000062a2d0f2bdb776da7bd258f076a716b14aef8fce00000000000000000000000000000000000000000000000000cceec0fdfe4db900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14994,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c033aab89b26650057881dabbc0815146ffc0f20000000000000000000000003c033aab89b26650057881dabbc0815146ffc0f2000000000000000000000000000000000000000000000000026352913376ece400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd789b1aa8f7cfd47d397732924c2c77ab5bf500c7f8a5f8d78dbea72472c7988,2021-11-24 11:57:50.000 UTC,0,true -14995,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005f5a4ecf33fa9eba7f7e52a4bc0c2aab5dcb82b00000000000000000000000005f5a4ecf33fa9eba7f7e52a4bc0c2aab5dcb82b00000000000000000000000000000000000000000000000000f8b0a10e47000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14996,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000060e203841ad895952990241374e8599d437dba8e00000000000000000000000060e203841ad895952990241374e8599d437dba8e000000000000000000000000000000000000000000000000005c28b3b3406c6100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -14997,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080eadcd56c6ea034331bd9c72a86220c85a815c100000000000000000000000080eadcd56c6ea034331bd9c72a86220c85a815c100000000000000000000000000000000000000000000000000ee6cd6844e843a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x44ba34e68238003db9c84c9ff7fdccc2241ef5a268f8952a8546afcb6ba5117c,2022-02-26 23:01:17.000 UTC,0,true -14998,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001778cb9fd8d489c740568a9bf16004d948d9b6bf0000000000000000000000001778cb9fd8d489c740568a9bf16004d948d9b6bf000000000000000000000000000000000000000000000000004205b433402fc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15000,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f58c3f6331d4acb595f9d1c799b88cc2bcd305b2000000000000000000000000f58c3f6331d4acb595f9d1c799b88cc2bcd305b2000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15001,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000fb61a8e5cf37cc1de7c1fe155ee5295c3d023600000000000000000000000000fb61a8e5cf37cc1de7c1fe155ee5295c3d0236000000000000000000000000000000000000000000000000005f7aab8c56b000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15003,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000883758d9d67de6334496552897f31e5e5a2565ab000000000000000000000000883758d9d67de6334496552897f31e5e5a2565ab00000000000000000000000000000000000000000000000000106d10c95fa0f100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15004,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ffb7f2f91fea3212649a68c25f604c128968a2ba000000000000000000000000ffb7f2f91fea3212649a68c25f604c128968a2ba00000000000000000000000000000000000000000000000001a715603d7d9b4900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15007,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039074b2b4434bf3115890094e1360e36d42ecbbd00000000000000000000000039074b2b4434bf3115890094e1360e36d42ecbbd00000000000000000000000000000000000000000000000002587a6eeef4002a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15009,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000081cfc36ef7bffe9a1e95f8fa1bec6bad71e1db7e00000000000000000000000081cfc36ef7bffe9a1e95f8fa1bec6bad71e1db7e000000000000000000000000000000000000000000000000000000000173ad0300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15011,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008603c52132af298f90093d9697b954aceefdd1d60000000000000000000000008603c52132af298f90093d9697b954aceefdd1d6000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15015,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bb62e25a011acfd4afef3c7e074d44c56a0867d7000000000000000000000000bb62e25a011acfd4afef3c7e074d44c56a0867d7000000000000000000000000000000000000000000000000001ec738acc4e30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15017,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3ec605d078326b0a636ca90d496ebb5eb457a27000000000000000000000000d3ec605d078326b0a636ca90d496ebb5eb457a2700000000000000000000000000000000000000000000000000c9a4aa8882689700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15018,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ecc524bac33f76cc3b5bfcee2aed8b96e2053140000000000000000000000003ecc524bac33f76cc3b5bfcee2aed8b96e205314000000000000000000000000000000000000000000000000013fbe85edc9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15019,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004cd48098cec9db1019b19e232d39787fa58029f60000000000000000000000004cd48098cec9db1019b19e232d39787fa58029f6000000000000000000000000000000000000000000000000003cbc5c89c45d4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15021,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000350a791bfc2c21f9ed5d10980dad2e2638ffa7f6000000000000000000000000f9629f4d682d5f81b1efc48197cd8f1813c7ff9c000000000000000000000000f9629f4d682d5f81b1efc48197cd8f1813c7ff9c0000000000000000000000000000000000000000000000007681b071ae64322400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15023,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000057424e704d9912129445cadae8c321a3bede349d00000000000000000000000057424e704d9912129445cadae8c321a3bede349d000000000000000000000000000000000000000000000000003c19beb550e32600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15024,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000020f9151b1643f660bef88a5aa7c2ff0ba2bebe8200000000000000000000000020f9151b1643f660bef88a5aa7c2ff0ba2bebe820000000000000000000000000000000000000000000000000dcc004ea0ba75be00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x527f5b9ae48cb051a8a8051d1b0b14ebaa446ce741d2009b843471d5e26ef4cb,2022-11-01 15:22:11.000 UTC,0,true -15028,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cdb921352f72fbfe5eecf0fa34d1b26a4e0c57ad000000000000000000000000cdb921352f72fbfe5eecf0fa34d1b26a4e0c57ad0000000000000000000000000000000000000000000000000f3162295c4c96c200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x65a4914dbb010ce7002fcb2b8661efe6789d660fec7301acdb886aa9615fc71b,2021-11-21 17:44:44.000 UTC,0,true -15033,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078ee4d78d27b20d97e3e51c0cc917ebe55806b0000000000000000000000000078ee4d78d27b20d97e3e51c0cc917ebe55806b000000000000000000000000000000000000000000000000000159fc5d54628a4800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15035,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000085ea7c5ee10c3e37865799faf1b0535986f143b300000000000000000000000085ea7c5ee10c3e37865799faf1b0535986f143b300000000000000000000000000000000000000000000000002b2a9b238f4e22900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15038,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a782d8b7cd409ce196a3ef1b9f44de41f4fa5b40000000000000000000000003a782d8b7cd409ce196a3ef1b9f44de41f4fa5b400000000000000000000000000000000000000000000000001eb8b1e1e46c93500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15040,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000ac0b447d5d976b1ec7d8a885c937e0efcc7edbe0000000000000000000000000ac0b447d5d976b1ec7d8a885c937e0efcc7edbe00000000000000000000000000000000000000000000000006d9491212756b49600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xd5997f47c09d89f451188e90873bed99ea488108adf95af592c8ed8ada152a9c,2022-07-10 05:17:23.000 UTC,0,true -15042,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c154383b6ce66f0a9981544fc78a71526281ba78000000000000000000000000c154383b6ce66f0a9981544fc78a71526281ba78000000000000000000000000000000000000000000000000003cc7710635bc1c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15044,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000a02513b5c1695940b87c835f5cd038ac13c1b53f00000000000000000000000000000000000000000000000037919d20e97e1496,,,1,true -15046,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000033e7a93470ae5b27dbfe27f94ad3c1b1ff7efe5e00000000000000000000000033e7a93470ae5b27dbfe27f94ad3c1b1ff7efe5e000000000000000000000000000000000000000000000000000000000dc445d800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15048,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef4981e9ced215d267ae900c5802c6966efd312a000000000000000000000000ef4981e9ced215d267ae900c5802c6966efd312a000000000000000000000000000000000000000000000000015ed886d9525b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15049,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f278ac8e97dd418a3ce13307fa1b44ff87a18f7c000000000000000000000000f278ac8e97dd418a3ce13307fa1b44ff87a18f7c0000000000000000000000000000000000000000000000000000e5d0016ed90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15050,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cd8771ae2d6cb344663b8da7253c944f0801edd8000000000000000000000000cd8771ae2d6cb344663b8da7253c944f0801edd800000000000000000000000000000000000000000000000001833e37b527bb7100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15051,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c7121dcbd8e2288cd3e181d2c3b2477527c3e810000000000000000000000002c7121dcbd8e2288cd3e181d2c3b2477527c3e8100000000000000000000000000000000000000000000000000e1eafd8c4f803400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15053,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fad545d7391f9c9a93b6f2c6924c7b6aabb13d21000000000000000000000000fad545d7391f9c9a93b6f2c6924c7b6aabb13d2100000000000000000000000000000000000000000000000000e360f9ee45edcf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15054,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000052ad07a854ff71c27eeb85606a30600646ac84b700000000000000000000000052ad07a854ff71c27eeb85606a30600646ac84b700000000000000000000000000000000000000000000000000e5e5105a17fbca00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15056,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000227443f8cb623e4e8e2e4e6505e0c5d20a9ab4e1000000000000000000000000227443f8cb623e4e8e2e4e6505e0c5d20a9ab4e10000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15057,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000062009d75c7312dd460f9ac0682e705ac3ca57f1d00000000000000000000000062009d75c7312dd460f9ac0682e705ac3ca57f1d00000000000000000000000000000000000000000000000000e1b0911080971e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15058,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000044cb2d713bda3858001f038645fd05e23e5de03d00000000000000000000000044cb2d713bda3858001f038645fd05e23e5de03d0000000000000000000000000000000000000000000000008ac7230489e8000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15060,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002763347165cdb87d12ac3217cb9ee0d395f0d0070000000000000000000000002763347165cdb87d12ac3217cb9ee0d395f0d00700000000000000000000000000000000000000000000000000148836c082f89b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15061,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aed09b2654bee737eead92dfcf451953cf88b448000000000000000000000000aed09b2654bee737eead92dfcf451953cf88b4480000000000000000000000000000000000000000000000000023a75513f2fda700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15064,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be2461207b633ea5da676a0e738ea80b7c95d8a6000000000000000000000000be2461207b633ea5da676a0e738ea80b7c95d8a600000000000000000000000000000000000000000000000002d62bfc5bb0c28000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15065,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be2461207b633ea5da676a0e738ea80b7c95d8a6000000000000000000000000be2461207b633ea5da676a0e738ea80b7c95d8a600000000000000000000000000000000000000000000000002e3ba376a62c40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15066,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000917d24f8d2c41a434796d16a53ad51aaaa9ec129000000000000000000000000917d24f8d2c41a434796d16a53ad51aaaa9ec129000000000000000000000000000000000000000000000000009c2d1104d6060000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15068,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000006a45c27e47ecb7d51e69839ac949aa69f8f0f15f0000000000000000000000006a45c27e47ecb7d51e69839ac949aa69f8f0f15f00000000000000000000000000000000000000000000001539964beba9db13cf00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x3b789b63d3a38b0a5b76882013f22952f6c5f6ede63fad04e2a2d57b1817fadd,2022-02-13 04:50:20.000 UTC,0,true -15069,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c25c0092307a5b8afd8a4bd01351a92579040951000000000000000000000000c25c0092307a5b8afd8a4bd01351a925790409510000000000000000000000000000000000000000000000001582b4c9a9db000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xac5fff10b1e5d6c58731a15ba2dcae4a15dd5151ca95390522f93ad6843694ec,2022-04-05 11:32:34.000 UTC,0,true -15072,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029c80c2690f91a47803445c5922e76597d1dd2b600000000000000000000000029c80c2690f91a47803445c5922e76597d1dd2b6000000000000000000000000000000000000000000000000003a56fcc7cca2e400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15075,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001d50f52301e5ad3e9e6abbcd645a72b18df914f00000000000000000000000001d50f52301e5ad3e9e6abbcd645a72b18df914f00000000000000000000000000000000000000000000000000153615bda39c1ca00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1081f749592fbcc21bcd6dbfbaef31cf2bc06d2b26d1342e5fe5f36ef452f523,2022-08-09 23:34:35.000 UTC,0,true -15077,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000008e1083d25ce5c4c48a28f80445e79f27788f54d30000000000000000000000008e1083d25ce5c4c48a28f80445e79f27788f54d30000000000000000000000000000000000000000000000000e043da61725000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15079,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000bcf5411619e85f92ded9f8835f230aefab84e41c000000000000000000000000bcf5411619e85f92ded9f8835f230aefab84e41c0000000000000000000000000000000000000000000000000de444324c2a800000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15082,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e25031e37e0c111d6d3b510ea85be0347d375750000000000000000000000003e25031e37e0c111d6d3b510ea85be0347d37575000000000000000000000000000000000000000000000000008b12959b8e430000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15083,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008ac5e0ff3b00b2bc35b0382e7fcb738f27989fc00000000000000000000000008ac5e0ff3b00b2bc35b0382e7fcb738f27989fc00000000000000000000000000000000000000000000000000078a43b9601ba0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15086,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c920d0261ac02532922a4af66168fbcf8b0a8ed0000000000000000000000000c920d0261ac02532922a4af66168fbcf8b0a8ed0000000000000000000000000000000000000000000000000214e8348c4f000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15087,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3fa725536edce8a7d3a169ef093c6ea17c796f1000000000000000000000000a3fa725536edce8a7d3a169ef093c6ea17c796f10000000000000000000000000000000000000000000000000051b660cdd5800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15088,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3fa725536edce8a7d3a169ef093c6ea17c796f1000000000000000000000000a3fa725536edce8a7d3a169ef093c6ea17c796f1000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15089,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a3fa725536edce8a7d3a169ef093c6ea17c796f1000000000000000000000000a3fa725536edce8a7d3a169ef093c6ea17c796f1000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15090,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029c2fad45523f97940d8d2e7e0fa6c9081bc4a4f00000000000000000000000029c2fad45523f97940d8d2e7e0fa6c9081bc4a4f00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15091,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000679d91865fdb6792c61e7a275012380fc47022d3000000000000000000000000679d91865fdb6792c61e7a275012380fc47022d30000000000000000000000000000000000000000000000000e4b4b8af6a7000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15092,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eabb2157a5fc3cd650a0e3d0e8c9c6894e1b756b000000000000000000000000eabb2157a5fc3cd650a0e3d0e8c9c6894e1b756b000000000000000000000000000000000000000000000000023512699b531c7e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x8b3b67bdbcb00e4a2dc80c3c75e54baf51794573d4f731c5f78b73d43d4a9589,2022-08-02 20:47:32.000 UTC,0,true -15093,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac5201f9e7d908a9877929807cd878051b7f2d50000000000000000000000000ac5201f9e7d908a9877929807cd878051b7f2d50000000000000000000000000000000000000000000000000104aa4469555649800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15094,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001df8da860dd62a439361d1ec0446dd3a440cf1d90000000000000000000000001df8da860dd62a439361d1ec0446dd3a440cf1d900000000000000000000000000000000000000000000000000bc12d0749d289300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15097,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000088f96204a47c3bd173b672a49f010149c4bd802c00000000000000000000000088f96204a47c3bd173b672a49f010149c4bd802c000000000000000000000000000000000000000000000000000000005355bab900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15101,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc29d61e6915b42f7c46465dfc854d63218a5d1a000000000000000000000000cc29d61e6915b42f7c46465dfc854d63218a5d1a0000000000000000000000000000000000000000000000000158f8c568781f6000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15105,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e67500000000000000000000000003ab458634910aad20ef5f1c8ee96f1d6ac549190000000000000000000000007fb688ccf682d58f86d7e38e03f9d22e7705448b0000000000000000000000003b71f26ad2e05fee688391929dfa73fd672cb79d0000000000000000000000003b71f26ad2e05fee688391929dfa73fd672cb79d000000000000000000000000000000000000000000000001feb3dd067660000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15106,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d47666e190166383c1623ab7a806cc2b29bdcbd6000000000000000000000000d47666e190166383c1623ab7a806cc2b29bdcbd6000000000000000000000000000000000000000000000000032d0ae6378a94f700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15107,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099f9353111fdb15312af41c9646ac810b70980f000000000000000000000000099f9353111fdb15312af41c9646ac810b70980f000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15108,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099f9353111fdb15312af41c9646ac810b70980f000000000000000000000000099f9353111fdb15312af41c9646ac810b70980f000000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15110,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099f9353111fdb15312af41c9646ac810b70980f000000000000000000000000099f9353111fdb15312af41c9646ac810b70980f000000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15112,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e054e91786d9eb097d166027b9c7428a6a96dd10000000000000000000000001e054e91786d9eb097d166027b9c7428a6a96dd10000000000000000000000000000000000000000000000000299543d679a183900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15114,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d242c1aba34d16ddb176aaa329cedb451bce2d00000000000000000000000002d242c1aba34d16ddb176aaa329cedb451bce2d0000000000000000000000000000000000000000000000000053ae705411254fd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2bd0ccb4a763f70a29f01e5e9d85992c0801c304469da76c6a17a16a17452476,2022-03-29 20:30:15.000 UTC,0,true -15115,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001028e34f2c628e364084c99f37e6260cf9db18d20000000000000000000000001028e34f2c628e364084c99f37e6260cf9db18d200000000000000000000000000000000000000000000000002c68af0bb14000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x98683dfb35d314377de7e1ca7aec65df3e1c57cf2e5bc9446a8c5f45d0a43fc7,2021-11-23 08:16:12.000 UTC,0,true -15120,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000085dc21776b349c07c080b454e27387e32d3a2e6900000000000000000000000085dc21776b349c07c080b454e27387e32d3a2e6900000000000000000000000000000000000000000000000000757d43dfee47ba00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15121,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000033ba2329f4ed833a27e8a52c1999f3ad651b046f00000000000000000000000033ba2329f4ed833a27e8a52c1999f3ad651b046f000000000000000000000000000000000000000000000000016042b2ebede80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe6f3c1e8b2052b2f7b74f312156accd81b2bafd9d7bd7310843e7ba72f7febc2,2021-12-15 06:36:00.000 UTC,0,true -15123,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055a62cb69d2ac981b358aee432853f8865e934b100000000000000000000000055a62cb69d2ac981b358aee432853f8865e934b10000000000000000000000000000000000000000000000000089924782ec681f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15125,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d4919ff6577f38a75a28d1848a37ebc3f04edaa5000000000000000000000000d4919ff6577f38a75a28d1848a37ebc3f04edaa500000000000000000000000000000000000000000000000000050f044f41a1c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15126,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000b26185bd5cf165190cd8ccfe10f45fba1c929380000000000000000000000000b26185bd5cf165190cd8ccfe10f45fba1c9293800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15127,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3991840aa317390b08e021e644945535dc15bcf000000000000000000000000f3991840aa317390b08e021e644945535dc15bcf00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15128,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aec73d60af3340627aff834a7f19742681c5500f000000000000000000000000aec73d60af3340627aff834a7f19742681c5500f00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15129,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000030de8c2ac674b359680ca58ea9cc52b3783e9f5900000000000000000000000030de8c2ac674b359680ca58ea9cc52b3783e9f5900000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15130,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9171fe297b8f64f286ede0ca8f70c1ee381deeb000000000000000000000000c9171fe297b8f64f286ede0ca8f70c1ee381deeb00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15131,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f3830815e699acf83348213742915e7fb9e23040000000000000000000000008f3830815e699acf83348213742915e7fb9e230400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15132,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e676e97391094e95102795457ca9c3a8448ac093000000000000000000000000e676e97391094e95102795457ca9c3a8448ac09300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15133,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000050b45690c84ba86de44b4cf653639f96cf81304000000000000000000000000050b45690c84ba86de44b4cf653639f96cf81304000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15134,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ecccb4ffeaf383a61781544e11a225be4d1170d0000000000000000000000002ecccb4ffeaf383a61781544e11a225be4d1170d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15135,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f01f671c66d803f87937e22a152c46936a5756d0000000000000000000000003f01f671c66d803f87937e22a152c46936a5756d00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15136,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eb298417b4ba252f11d0cf132fdfc35f3b516bac000000000000000000000000eb298417b4ba252f11d0cf132fdfc35f3b516bac00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15137,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000336a06457c655d2ed2407bccf0945a96560f2170000000000000000000000000336a06457c655d2ed2407bccf0945a96560f21700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15138,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000284172e59721939f3fdd1e1306c84f6750140e2c000000000000000000000000284172e59721939f3fdd1e1306c84f6750140e2c00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15139,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000084b2411605959e7c2e11bfc35de428d582af4cf400000000000000000000000084b2411605959e7c2e11bfc35de428d582af4cf400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15140,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e7af729ad4f5ba883c796375da406a0e2a4cec87000000000000000000000000e7af729ad4f5ba883c796375da406a0e2a4cec8700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15141,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000038fb9ecab5c65c40bea458b02b9df1d9e71a411100000000000000000000000038fb9ecab5c65c40bea458b02b9df1d9e71a411100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15142,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000002d8f962f019d32fb136bf4728407fbf951b37f600000000000000000000000002d8f962f019d32fb136bf4728407fbf951b37f600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15143,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004cd521c85edf64598537ffa8e6eefa16f5fd12db0000000000000000000000004cd521c85edf64598537ffa8e6eefa16f5fd12db00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15144,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021b998c9d12ad8611e3375be5209d734c1e0285c00000000000000000000000021b998c9d12ad8611e3375be5209d734c1e0285c00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15145,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e014080fcf47ee8eef764b1531f2fc8dc2d0e40c000000000000000000000000e014080fcf47ee8eef764b1531f2fc8dc2d0e40c00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15146,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd020a2987273c96bd31a9ac96a1fbd6f62b9318000000000000000000000000dd020a2987273c96bd31a9ac96a1fbd6f62b931800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15147,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000098abec5be0b3d45a2ceb96df9e161a0a325660cd00000000000000000000000098abec5be0b3d45a2ceb96df9e161a0a325660cd00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15148,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b9581d747b3a339a0a57b1c47d892461e0261102000000000000000000000000b9581d747b3a339a0a57b1c47d892461e026110200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15149,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ab9e2cfcfe7a1012bee720b93f84c902a4c87a76000000000000000000000000ab9e2cfcfe7a1012bee720b93f84c902a4c87a7600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15150,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a356eba6ee53d43e227020390b19cc10c70b885c000000000000000000000000a356eba6ee53d43e227020390b19cc10c70b885c00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15151,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000077f3e03da404d32002616c6d88535b5a8859930800000000000000000000000077f3e03da404d32002616c6d88535b5a8859930800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15152,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d71d32cb5fc0176fb084be646214e038bef21ab0000000000000000000000005d71d32cb5fc0176fb084be646214e038bef21ab00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15153,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a3a2f7ff6bc14a9f5a58314aa155123a6db0c090000000000000000000000001a3a2f7ff6bc14a9f5a58314aa155123a6db0c0900000000000000000000000000000000000000000000000000155f8d2f8c44f800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15154,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000677f8e0a8fc7befddba89c6c967f334fd4b8ee45000000000000000000000000677f8e0a8fc7befddba89c6c967f334fd4b8ee4500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15155,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e5c9c95396c7ddff339243873664f6394d9a7e40000000000000000000000002e5c9c95396c7ddff339243873664f6394d9a7e400000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15156,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000224515d82ef8751da30f54e98c9bcda58dc858b2000000000000000000000000224515d82ef8751da30f54e98c9bcda58dc858b200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15157,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007958121e61a478f6e2a4815ede4498838373a1280000000000000000000000007958121e61a478f6e2a4815ede4498838373a12800000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15158,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ed6edeafc994f3f7d41896726c774f8f5d29d5c3000000000000000000000000ed6edeafc994f3f7d41896726c774f8f5d29d5c300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15159,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003037cb40171c56cc895e9bd40fc608ff4f775c520000000000000000000000003037cb40171c56cc895e9bd40fc608ff4f775c5200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15160,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000070428f51cf940a073b6016c0529e98ff5e6004a200000000000000000000000070428f51cf940a073b6016c0529e98ff5e6004a200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15161,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e61b95d17d60d6c892c65608a5b60ecd26d85375000000000000000000000000e61b95d17d60d6c892c65608a5b60ecd26d8537500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15162,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9f42f7bd627db7bc659805dca56b2f3d04a28f6000000000000000000000000c9f42f7bd627db7bc659805dca56b2f3d04a28f600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15163,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000018c70d13cf1da0fa7a7b2d39f6ca8fc81d9a3b3e00000000000000000000000018c70d13cf1da0fa7a7b2d39f6ca8fc81d9a3b3e00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15164,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008eeed9e71389f14a3b23ba34c3857a13202314500000000000000000000000008eeed9e71389f14a3b23ba34c3857a132023145000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15165,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e24821319fd60fad948ddb2587e935a9d2f96ad1000000000000000000000000e24821319fd60fad948ddb2587e935a9d2f96ad100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15166,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ce09978479907597943dd81dc3c318b0ed5ef6d0000000000000000000000004ce09978479907597943dd81dc3c318b0ed5ef6d0000000000000000000000000000000000000000000000000000253038b4540000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15167,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009bd157e3d49c683287f132400796bf12b8e84d0d0000000000000000000000009bd157e3d49c683287f132400796bf12b8e84d0d000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15170,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000949da94aecf949ea5a468aee1bdcadf60ec6b41d000000000000000000000000949da94aecf949ea5a468aee1bdcadf60ec6b41d00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15171,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000f5c44945671f4e9018ff0993e7bf9fdf573d07cb000000000000000000000000f5c44945671f4e9018ff0993e7bf9fdf573d07cb000000000000000000000000000000000000000000000000000000000098968000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15172,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008ad8541f86b30ea4c6a2604fd5f8924d704526360000000000000000000000008ad8541f86b30ea4c6a2604fd5f8924d70452636000000000000000000000000000000000000000000000000006649741469d10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15174,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000009840f29b22a3c3427d8a9b98c6890164b859a1f00000000000000000000000009840f29b22a3c3427d8a9b98c6890164b859a1f0000000000000000000000000000000000000000000000000067f1284f43640000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15175,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003758ff8b7fca3faa76789940eeff8031e3ceeab50000000000000000000000003758ff8b7fca3faa76789940eeff8031e3ceeab500000000000000000000000000000000000000000000000000a4c21295fe77d700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15176,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000fb47cc947e5257de494086ee29fe9121bd687078000000000000000000000000fb47cc947e5257de494086ee29fe9121bd687078000000000000000000000000000000000000000000000000000000000df6663700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15177,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000077388170fd75c3eda4427972a92d757764acc03100000000000000000000000077388170fd75c3eda4427972a92d757764acc031000000000000000000000000000000000000000000000000007f6f60d771bae000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15178,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1339235da383a92e18f7081cc1dc9a8bb00157f000000000000000000000000c1339235da383a92e18f7081cc1dc9a8bb00157f00000000000000000000000000000000000000000000000001eb8459891ed02d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15180,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ab06c07dab7c8a220fda74b54296964c88941bc0000000000000000000000000ab06c07dab7c8a220fda74b54296964c88941bc000000000000000000000000000000000000000000000000000064ac0fdcdd34f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15181,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000006554ac8069938943ea3f9acd7edc42c3b68850f70000000000000000000000006554ac8069938943ea3f9acd7edc42c3b68850f7000000000000000000000000000000000000000000000000000000001290d0ed00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15182,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7e834d31f953157480ff3533b7f885884ccd441000000000000000000000000d7e834d31f953157480ff3533b7f885884ccd441000000000000000000000000000000000000000000000000008098de11fd423500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15183,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006554ac8069938943ea3f9acd7edc42c3b68850f70000000000000000000000006554ac8069938943ea3f9acd7edc42c3b68850f70000000000000000000000000000000000000000000000000011fd6484e15d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15184,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b510fddc194f5f771d45e1ecdff32156c5bb1aea000000000000000000000000b510fddc194f5f771d45e1ecdff32156c5bb1aea000000000000000000000000000000000000000000000000000f065708e7f30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15194,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc861260e9501ffa5b042e6ce233a637d98274d2000000000000000000000000fc861260e9501ffa5b042e6ce233a637d98274d200000000000000000000000000000000000000000000000000db3e750bf3a3b400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15197,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e239b011f5ae87a47a075562cca78d0b71706770000000000000000000000004e239b011f5ae87a47a075562cca78d0b71706770000000000000000000000000000000000000000000000000099afdfc683936100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x083d9e5a87211b70eb0b1dc14a825e05b766dbf892e399b73fc2387b6dd98ca0,2022-05-21 14:01:01.000 UTC,0,true -15202,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba8801a8e9f2ed103e89fd5acd605921bfa1cb62000000000000000000000000ba8801a8e9f2ed103e89fd5acd605921bfa1cb620000000000000000000000000000000000000000000000000060ccf3caec17d200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15203,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f7b460b8bad09e2d58fb879c8bd1141aaf6f1b90000000000000000000000008f7b460b8bad09e2d58fb879c8bd1141aaf6f1b900000000000000000000000000000000000000000000000000679d894736030000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15204,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d11b1dd436fc09d61d7339e0127f92aefc88a2ae000000000000000000000000d11b1dd436fc09d61d7339e0127f92aefc88a2ae00000000000000000000000000000000000000000000000000168b4ad6e7f14000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15205,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000015f490fe47a84a50c75b0cc4c1f4b17b7188306d000000000000000000000000000000000000000000000000316336151813c381,,,1,true -15206,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a31395f7ee44b6c5aef70bbd48718aa1b33b7890000000000000000000000001a31395f7ee44b6c5aef70bbd48718aa1b33b78900000000000000000000000000000000000000000000000001389e044d72381b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15207,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000098e1dc7c0b1b6d55433ccebbfeb7b016070445f200000000000000000000000098e1dc7c0b1b6d55433ccebbfeb7b016070445f20000000000000000000000000000000000000000000000000020041d5496ac2000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15208,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de02faa2bc5a046a59c23e5667789037a5b776ed000000000000000000000000de02faa2bc5a046a59c23e5667789037a5b776ed000000000000000000000000000000000000000000000000000279cd0dfc2eb200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15209,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029552b08d2c5f98a3de6063ea9f7b54bf291889000000000000000000000000029552b08d2c5f98a3de6063ea9f7b54bf2918890000000000000000000000000000000000000000000000000005fec5b60ef800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15210,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000042ff60bca5196455c8ae35a9ce6e423388e08c6800000000000000000000000042ff60bca5196455c8ae35a9ce6e423388e08c6800000000000000000000000000000000000000000000000000d21118bb823e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15211,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000150ac2efbb090921d5a6fdf089f9e9d285972430000000000000000000000000150ac2efbb090921d5a6fdf089f9e9d2859724300000000000000000000000000000000000000000000000000ac6256afe909cd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15216,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000539018e88aa7b5277fd074e3a06bdb025f0d1cf6000000000000000000000000539018e88aa7b5277fd074e3a06bdb025f0d1cf6000000000000000000000000000000000000000000000000000d12c276b88c8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15219,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007b79004340f1c6641514f165dce2171e579edd340000000000000000000000007b79004340f1c6641514f165dce2171e579edd340000000000000000000000000000000000000000000000000000fea89489800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15220,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c2ca774cfabb33b7392af0c6ab73e858f3ba6580000000000000000000000004c2ca774cfabb33b7392af0c6ab73e858f3ba65800000000000000000000000000000000000000000000000000c0b0b1cf33b4fe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15221,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000064a73977fe3d49f6d2ed853e0f573b6e6e730a2f00000000000000000000000064a73977fe3d49f6d2ed853e0f573b6e6e730a2f000000000000000000000000000000000000000000000000007ede2e0035011800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15224,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005af9aecb1850fc16181ebdef1f05fae66ad3f0b90000000000000000000000005af9aecb1850fc16181ebdef1f05fae66ad3f0b90000000000000000000000000000000000000000000000000dca416e776f980300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15228,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000089d345e4910b201a4780e0bfe286f56adfad7be000000000000000000000000089d345e4910b201a4780e0bfe286f56adfad7be0000000000000000000000000000000000000000000000000000000000365c04000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15230,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029d4d51dd07220879d014701bb89c03decfa7a9000000000000000000000000029d4d51dd07220879d014701bb89c03decfa7a900000000000000000000000000000000000000000000000000011e92c10b1c60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15232,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000027f18241002c0d4899c08c76778dbb2229273dd500000000000000000000000027f18241002c0d4899c08c76778dbb2229273dd500000000000000000000000000000000000000000000000006b9c6bca486511600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15233,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a0bd4b75dc06c7f1860d6f123103404d3f1a1c93000000000000000000000000a0bd4b75dc06c7f1860d6f123103404d3f1a1c93000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15234,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f8bd8b491928553da8440ad5b4a3354acc54b87e000000000000000000000000f8bd8b491928553da8440ad5b4a3354acc54b87e00000000000000000000000000000000000000000000000000c04cacfad4b95d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15236,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000e9554c002b8e72586e1d87f9c4f9c23b90a3b18b000000000000000000000000e9554c002b8e72586e1d87f9c4f9c23b90a3b18b000000000000000000000000000000000000000000000000000000008d539e8500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x4925811d8a0cab2f3d62b30745a56cbabd910d12b01b036878b92cd3fe0df248,2022-03-07 22:27:11.000 UTC,0,true -15238,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008b147c4db4e2616c0bacfb29f5c61589bc0de4dc0000000000000000000000008b147c4db4e2616c0bacfb29f5c61589bc0de4dc0000000000000000000000000000000000000000000000000051b660cdd5800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15241,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f082d20cc4abebf31f2a2d0ddae522449d7d45d0000000000000000000000002f082d20cc4abebf31f2a2d0ddae522449d7d45d0000000000000000000000000000000000000000000000000036d7c674c973fe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15243,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005309ccead59405eabece0bddfd93e4a981522da70000000000000000000000005309ccead59405eabece0bddfd93e4a981522da7000000000000000000000000000000000000000000000000020f62f87a6eaa0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15244,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000ad5d9a0ffa01b99d0120262db629c9c69748ad4d00000000000000000000000000000000000000000000000266f70961288b7028,,,1,true -15247,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c3086dc59a92a5eeee98f28b14ddce5a2da15290000000000000000000000008c3086dc59a92a5eeee98f28b14ddce5a2da152900000000000000000000000000000000000000000000000001550f7dca70000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15250,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e6128ac5ed7993a17924bd473c98e25e053673f9000000000000000000000000e6128ac5ed7993a17924bd473c98e25e053673f900000000000000000000000000000000000000000000000000564e202910c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15251,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b69307de914273bc58d9d1e176336320a9ade464000000000000000000000000b69307de914273bc58d9d1e176336320a9ade464000000000000000000000000000000000000000000000000003e0b768c21a7ad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15253,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbf16b26bb634027f0ca3b202edf478b2da9d4cf000000000000000000000000cbf16b26bb634027f0ca3b202edf478b2da9d4cf000000000000000000000000000000000000000000000000001c6bf52634000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15254,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000db0c3b9548cd7de42c362ee4d9e66c15271a4efe000000000000000000000000db0c3b9548cd7de42c362ee4d9e66c15271a4efe0000000000000000000000000000000000000000000000000275a759ce8fa17c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15255,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000618e79fa928aa226c19b7afe5fef58649a8c59fb000000000000000000000000618e79fa928aa226c19b7afe5fef58649a8c59fb00000000000000000000000000000000000000000000000000032077bc3248ce00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15256,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000029bd57d591ad823f98d3cd73da938a56ab4945e400000000000000000000000029bd57d591ad823f98d3cd73da938a56ab4945e4000000000000000000000000000000000000000000000000027f7d0bdb92000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15259,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000909fdf2feea01276081253e2486dfbc81ab491d4000000000000000000000000909fdf2feea01276081253e2486dfbc81ab491d40000000000000000000000000000000000000000000000000e1730b663ce940000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15260,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000c32fcbe1aaeccad035af0d371abeb41929efc4ed000000000000000000000000c32fcbe1aaeccad035af0d371abeb41929efc4ed00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15261,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000858804057376dad586029d21fe09b8a4f647781d000000000000000000000000858804057376dad586029d21fe09b8a4f647781d0000000000000000000000000000000000000000000000000051ab9b337db21000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15262,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000cbf16b26bb634027f0ca3b202edf478b2da9d4cf000000000000000000000000cbf16b26bb634027f0ca3b202edf478b2da9d4cf0000000000000000000000000000000000000000000000000000000000ae162b00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15264,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005aad5dd01faa0d5e96a80d460560fdef84e3a46a0000000000000000000000005aad5dd01faa0d5e96a80d460560fdef84e3a46a000000000000000000000000000000000000000000000000015228f77c15370000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15265,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007357464a4692ca5466740b8f5ce0b26d6e4b01280000000000000000000000007357464a4692ca5466740b8f5ce0b26d6e4b0128000000000000000000000000000000000000000000000000000d14bd215acc4600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xad82acbd60479dfecbbd8912c1e598636959c5626b726a129716ffbed6f7abaa,2022-03-13 05:35:14.000 UTC,0,true -15266,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000112e05297b5c03a849459868d1b1af7b2b10d68a000000000000000000000000112e05297b5c03a849459868d1b1af7b2b10d68a0000000000000000000000000000000000000000000000000000000003f9755800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15269,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000002d2b9e1732d729ee11dffa54f4b32a57f9cf7e550000000000000000000000002d2b9e1732d729ee11dffa54f4b32a57f9cf7e5500000000000000000000000000000000000000000000000000000000000f695000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15270,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000008cf0354a5175ca1cf9c14dbfc6e66cabd3d224240000000000000000000000000000000000000000000000026c9c34ee2454fdf6,,,1,true -15272,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000568e25f94a97e01865d966e244a65135e2c095c4000000000000000000000000568e25f94a97e01865d966e244a65135e2c095c4000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15274,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9fe40cc7297def42fd3759571e237b414d5c0cf000000000000000000000000f9fe40cc7297def42fd3759571e237b414d5c0cf00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15275,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e0b750efa5fb1bfed2a31ac6bb741551bcc98f40000000000000000000000006e0b750efa5fb1bfed2a31ac6bb741551bcc98f40000000000000000000000000000000000000000000000000083734dd0b0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf10001df8d9f436ba0dd3e121474aaad50f6b5a591a1da642c1ff4b5036ba2af,2022-05-21 11:14:43.000 UTC,0,true -15276,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1c7902f266c3360854ad9b6bbaaa82a52273908000000000000000000000000f1c7902f266c3360854ad9b6bbaaa82a52273908000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15277,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd6b6f5b2e9527b3420c0751925e56f1bb08a02a000000000000000000000000bd6b6f5b2e9527b3420c0751925e56f1bb08a02a000000000000000000000000000000000000000000000000005cfaf9e3c2a47c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x6549effe1390db13e7df687e15add3689d0f86ee58e4e96823c0788a993b417e,2022-07-24 14:26:08.000 UTC,0,true -15279,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001308443df8ff1da25bcd1a1b898a56dd66144b050000000000000000000000001308443df8ff1da25bcd1a1b898a56dd66144b05000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15280,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000003e957dd41f95c213b3b9b772472dddf7ed3b00960000000000000000000000003e957dd41f95c213b3b9b772472dddf7ed3b009600000000000000000000000000000000000000000000000000000000000f695000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15281,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ae18450b90b7b6847b9f26787d6529746bb417e0000000000000000000000006ae18450b90b7b6847b9f26787d6529746bb417e000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15282,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f61efd9365cdbfd86c76827f90a1a9ad7b9ada52000000000000000000000000f61efd9365cdbfd86c76827f90a1a9ad7b9ada5200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15283,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039d4bd8f3347734c523a6775f7e4edd67baec5da00000000000000000000000039d4bd8f3347734c523a6775f7e4edd67baec5da00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15284,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a94b2a63a069a1fc3e1f730d684e7955f76d6750000000000000000000000003a94b2a63a069a1fc3e1f730d684e7955f76d67500000000000000000000000000000000000000000000000001f68e5744b98f8a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15285,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007c556added55593a7da07b340a381af1278851c30000000000000000000000007c556added55593a7da07b340a381af1278851c300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15286,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ec383945e14de368782d8e063e9ac179c39f3590000000000000000000000006ec383945e14de368782d8e063e9ac179c39f359000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15287,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009622348f0a2268983c90dd4c37b5a900a23c83900000000000000000000000009622348f0a2268983c90dd4c37b5a900a23c8390000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15289,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ddee7dc3288f18bd0ed48255c95f730f146738b3000000000000000000000000ddee7dc3288f18bd0ed48255c95f730f146738b300000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15290,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000607c3eb4ad13036078fe5e346c092195ac7ddf0c000000000000000000000000607c3eb4ad13036078fe5e346c092195ac7ddf0c00000000000000000000000000000000000000000000000000000000000f695000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15291,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f333193872a0dbbf8ad7c82579626e4c6216d5e3000000000000000000000000f333193872a0dbbf8ad7c82579626e4c6216d5e300000000000000000000000000000000000000000000000000905a3731df5cd200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15292,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000053b4b974261c61ce81e433461ba5cd96fee63db100000000000000000000000053b4b974261c61ce81e433461ba5cd96fee63db1000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15294,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000008e89d60af020a59aca87767f7440386dbbf6c6300000000000000000000000008e89d60af020a59aca87767f7440386dbbf6c63000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15295,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc29516f75bb6d8e7e76566062cd90f8c3087072000000000000000000000000dc29516f75bb6d8e7e76566062cd90f8c3087072000000000000000000000000000000000000000000000000010b0e2f6b90a4df00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15296,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7492674a89623bb0ab5577b658817b89e2e20ca000000000000000000000000c7492674a89623bb0ab5577b658817b89e2e20ca00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15297,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009f0e8a28fb6d062c275dd20371c28e741aac880b0000000000000000000000009f0e8a28fb6d062c275dd20371c28e741aac880b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15298,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000035c8bf626c7cd9d8604dbdb6fca693471e5dbb0b0000000000000000000000000000000000000000000000033633b826da50c000,,,1,true -15299,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094fdcf186e122ba9a507c58394a5295402d2dfd000000000000000000000000094fdcf186e122ba9a507c58394a5295402d2dfd000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15300,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000035c8bf626c7cd9d8604dbdb6fca693471e5dbb0b00000000000000000000000035c8bf626c7cd9d8604dbdb6fca693471e5dbb0b00000000000000000000000000000000000000000000000000fe2ee4620dcf4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15301,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0bd89eaa63dd244ae1d2bcced93d58d72d6d961000000000000000000000000c0bd89eaa63dd244ae1d2bcced93d58d72d6d961000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15302,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f4520d07cea9c1915b94c1d2b788256153ecfe27000000000000000000000000f4520d07cea9c1915b94c1d2b788256153ecfe27000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15303,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c014d4024ecf998456b226e38a7607991f1aac72000000000000000000000000c014d4024ecf998456b226e38a7607991f1aac7200000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15304,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b80914f7918df483d216198d7e2fb8d4e14af408000000000000000000000000b80914f7918df483d216198d7e2fb8d4e14af40800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15305,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d24f83d0eac36cd83eed870f520b1c3caa5d2b07000000000000000000000000d24f83d0eac36cd83eed870f520b1c3caa5d2b0700000000000000000000000000000000000000000000000000000cbba106e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15310,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000058e2d39109fa3a452b229fc03cf9d3b61324cbcd00000000000000000000000058e2d39109fa3a452b229fc03cf9d3b61324cbcd00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15311,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000039ca2a2d5854c613fb1b3f8208e4f241942587b000000000000000000000000039ca2a2d5854c613fb1b3f8208e4f241942587b0000000000000000000000000000000000000000000000000000000000314e2a900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15312,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c84ab5000d34a853231d6ce90a28431106f4ca55000000000000000000000000c84ab5000d34a853231d6ce90a28431106f4ca55000000000000000000000000000000000000000000000000007fe5cf2bea000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15313,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000069a263804bc8ea966095ea21aea58b9ea6bf52a700000000000000000000000069a263804bc8ea966095ea21aea58b9ea6bf52a7000000000000000000000000000000000000000000000000000ef3528bc8a70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15315,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e3f1abd4fc3435c452b6267c407ec535800b52f0000000000000000000000000e3f1abd4fc3435c452b6267c407ec535800b52f00000000000000000000000000000000000000000000000000026ff85c3b8a9b400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15316,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000122c85f702c56dda52c951f1d855652150a1e067000000000000000000000000122c85f702c56dda52c951f1d855652150a1e067000000000000000000000000000000000000000000000000001f157551dfaac000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15317,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004fa4c5ac56045630bf0c75b42ca8259fda61effe0000000000000000000000004fa4c5ac56045630bf0c75b42ca8259fda61effe0000000000000000000000000000000000000000000000000044e7809f5fa40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15318,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000007345344510b1104514666a6f4c0aa85ff8f556360000000000000000000000007345344510b1104514666a6f4c0aa85ff8f5563600000000000000000000000000000000000000000000000000000000000f695000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15319,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002dee84d469ea2c8bb4af371ecdc95a71a77322a40000000000000000000000002dee84d469ea2c8bb4af371ecdc95a71a77322a40000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15322,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000000b173b9014a0a36aac51ee4957bc8c7e20686d3f0000000000000000000000000000000000000000000000005998fce1a86ecd1b,,,1,true -15323,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000ad0e907a3f3c517acbfd9054b43f743e4edbbe9500000000000000000000000000000000000000000000000ef644f9b077d00000,0xcdd420b678eb08cee4c6b481b887daa19d4d870142bcb2d0cdf6d4b29f91bf34,2021-11-30 00:28:36.000 UTC,0,true -15325,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000122c85f702c56dda52c951f1d855652150a1e067000000000000000000000000122c85f702c56dda52c951f1d855652150a1e06700000000000000000000000000000000000000000000000000464a9e5e85a65d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15332,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a708b4d523dca59b28b47e79851a5ca52f9dd78a000000000000000000000000a708b4d523dca59b28b47e79851a5ca52f9dd78a0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15335,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000895c5aa8f7abd95f5b152bb5c7f2052972013fa1000000000000000000000000895c5aa8f7abd95f5b152bb5c7f2052972013fa10000000000000000000000000000000000000000000000000000000002f98f6100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15343,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005e4b293c7fda80b545561ec599bd7de5208901fe0000000000000000000000005e4b293c7fda80b545561ec599bd7de5208901fe000000000000000000000000000000000000000000000000015bd15ba65dec8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15344,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a269a9cc18d1fb05ffd567e3b1f6e8bf2d841530000000000000000000000005a269a9cc18d1fb05ffd567e3b1f6e8bf2d841530000000000000000000000000000000000000000000000000020910a61d8320000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15345,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007c74619e359640019b1c9f53d95ad3489f8b0da60000000000000000000000007c74619e359640019b1c9f53d95ad3489f8b0da600000000000000000000000000000000000000000000000000009836e524090000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15346,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac844070b40db6042b99e206b4ed1dbdb5fa676d000000000000000000000000ac844070b40db6042b99e206b4ed1dbdb5fa676d000000000000000000000000000000000000000000000000001f83b7fd6c090000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15347,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000066e623994cd56fd05f6ec18f82110a8b6535819d00000000000000000000000066e623994cd56fd05f6ec18f82110a8b6535819d000000000000000000000000000000000000000000000000000ee9159a39984000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15349,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f3111165ef850b11f50a5f45074e7becca7cbfd0000000000000000000000002f3111165ef850b11f50a5f45074e7becca7cbfd000000000000000000000000000000000000000000000000000d45786189040000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15350,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eacc381ed43f477e8d74be5f3d87f583db82c89d000000000000000000000000eacc381ed43f477e8d74be5f3d87f583db82c89d000000000000000000000000000000000000000000000000000d40b74241310000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15351,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d10248ef4907d54f012af7b2f8ddc2edd611adae000000000000000000000000d10248ef4907d54f012af7b2f8ddc2edd611adae000000000000000000000000000000000000000000000000000d40b74241310000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15352,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bca10a7a49d1f56a92a541b91858abf7821f0a10000000000000000000000000bca10a7a49d1f56a92a541b91858abf7821f0a10000000000000000000000000000000000000000000000000000e94cb4b07710000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15353,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043e7f3e1583216053f8bdbe300738d46f2dcd71800000000000000000000000043e7f3e1583216053f8bdbe300738d46f2dcd718000000000000000000000000000000000000000000000000000e81c6cde8250000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15354,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3aeedd405726b61bfc4c099309b237549b6d78f000000000000000000000000f3aeedd405726b61bfc4c099309b237549b6d78f000000000000000000000000000000000000000000000000000e81c6cde8250000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15355,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3aeedd405726b61bfc4c099309b237549b6d78f000000000000000000000000f3aeedd405726b61bfc4c099309b237549b6d78f00000000000000000000000000000000000000000000000000909a26d1c3334000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15356,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eb9ef9eea95a4492e3f05973a08c75093d673dc5000000000000000000000000eb9ef9eea95a4492e3f05973a08c75093d673dc5000000000000000000000000000000000000000000000000001cd715640c076f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15359,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a4a86fdfb80071d28f385bdc7b7a04811ef4c5eb000000000000000000000000a4a86fdfb80071d28f385bdc7b7a04811ef4c5eb0000000000000000000000000000000000000000000000000017550b48febb8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15364,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000000dcea91eb1418949cb112d733fc6c3603829e4d30000000000000000000000000dcea91eb1418949cb112d733fc6c3603829e4d300000000000000000000000000000000000000000000000000000000011b480a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15365,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000729aefa54c7825f89c155683a133d60e7167e528000000000000000000000000729aefa54c7825f89c155683a133d60e7167e52800000000000000000000000000000000000000000000000000a87991d1a7208000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15367,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc29d61e6915b42f7c46465dfc854d63218a5d1a000000000000000000000000cc29d61e6915b42f7c46465dfc854d63218a5d1a00000000000000000000000000000000000000000000000000403fb64baae07c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15368,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000a732b8f964eda419441e969e7a49392360e860f70000000000000000000000000000000000000000000000000cf1a3f4e4b748ee,,,1,true -15369,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000054e6e074299b4b32ab7dcbe44952677fccca10f200000000000000000000000054e6e074299b4b32ab7dcbe44952677fccca10f200000000000000000000000000000000000000000000000001b262753631cbcd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xee9ad62e398258937bd32d66faea8869f870f9ef4ed89d5bd2ec03dc09f3a156,2021-12-13 06:44:40.000 UTC,0,true -15372,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000046ced0e736cdbb8d467b56df1dea1edf7544495800000000000000000000000046ced0e736cdbb8d467b56df1dea1edf7544495800000000000000000000000000000000000000000000000001914a39af30436300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xc0b360c8a277a0ed6bc115905983679f68238de71d51593f8e8a8d46636a7a90,2021-12-13 06:57:36.000 UTC,0,true -15374,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7518d58aa2a0c05ee28e4589e9ba58165de2df5000000000000000000000000d7518d58aa2a0c05ee28e4589e9ba58165de2df50000000000000000000000000000000000000000000000000c7d713b49da000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xfcc8e39964c3aad6ec6cffba797cca3fdf03901c916b9c8b43683ec8f064fa64,2022-01-17 13:27:45.000 UTC,0,true -15375,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b573b0781ebbff1301e26dfb15edd774f8f4cb85000000000000000000000000b573b0781ebbff1301e26dfb15edd774f8f4cb8500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15377,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3b5b2b7c2e97331a606466e88cda86e359e1f61000000000000000000000000d3b5b2b7c2e97331a606466e88cda86e359e1f6100000000000000000000000000000000000000000000000000176b8103bcc08000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15383,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e6436d5c2b8a02cfdb853607418adc44eec38876000000000000000000000000e6436d5c2b8a02cfdb853607418adc44eec38876000000000000000000000000000000000000000000000000012927994b97cfd100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15384,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000245a4887c7ca101419d629e447f2de60d8861de4000000000000000000000000245a4887c7ca101419d629e447f2de60d8861de400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15386,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d1c805676244085838262806ffb92b21421e5b8d000000000000000000000000d1c805676244085838262806ffb92b21421e5b8d00000000000000000000000000000000000000000000000000f8b0a10e47000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15387,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000059e175bcb48a316b91bdbbaae8cd0758b8a7259500000000000000000000000059e175bcb48a316b91bdbbaae8cd0758b8a7259500000000000000000000000000000000000000000000000000006a439063453300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15388,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000065240476b113ee6ea1325b3ebe47d21acfa037f700000000000000000000000065240476b113ee6ea1325b3ebe47d21acfa037f700000000000000000000000000000000000000000000000006df2da4bfb17e5e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15390,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f4f80a0d2434fe62bae26627fe4c228c0723f0b2000000000000000000000000f4f80a0d2434fe62bae26627fe4c228c0723f0b200000000000000000000000000000000000000000000000006c7615549cfc0ca00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15391,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000566bee2e257a1a606cb7632486f77d8b8b7be075000000000000000000000000566bee2e257a1a606cb7632486f77d8b8b7be075000000000000000000000000000000000000000000000000000287834ea7524800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15392,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf9f99c643b28daec98de3f70a4b84c271c2b404000000000000000000000000cf9f99c643b28daec98de3f70a4b84c271c2b404000000000000000000000000000000000000000000000000006674e8fdee25d200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd786d10d0a2e7257ca750317b5fac5ba6b7185cc8aa99bf3ff7ef94a9b635c0e,2022-04-27 10:03:45.000 UTC,0,true -15393,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002835720be787d30b58aa7c56aea19c1e3053e10b0000000000000000000000002835720be787d30b58aa7c56aea19c1e3053e10b000000000000000000000000000000000000000000000000000032c09176e4a200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15394,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000431e4b84e3b8a739af3394c3a4463e62a8c721c100000000000000000000000000000000000000000000001d89e11e88b65afb4f,0x023479b94b7eebcb8c1b8e2da3447695bca0b1d0f5d720368e05914f53ace59c,2021-11-22 09:56:35.000 UTC,0,true -15395,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d1490a127021f5dbeeb92a4156179a93679c76b6000000000000000000000000d1490a127021f5dbeeb92a4156179a93679c76b600000000000000000000000000000000000000000000000005801a3f2da94b3100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7e6214e3dec588af0a92f68f86b55540c5dec5c2f15ae23be2b64953d574c638,2022-01-19 08:35:44.000 UTC,0,true -15398,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f98fafa9f99a0e493e4220841a71c7475f5dee76000000000000000000000000f98fafa9f99a0e493e4220841a71c7475f5dee760000000000000000000000000000000000000000000000000017b9d4d0d2660000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15399,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000076e2c6d6f961168dd892516438ec807933d0941f00000000000000000000000076e2c6d6f961168dd892516438ec807933d0941f0000000000000000000000000000000000000000000000000042db1dd805406f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x95c3fedec2a0df0305d727e5c9671e74a2a21e7366bd947bd076c2867bc0454f,2021-11-27 22:03:17.000 UTC,0,true -15400,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006777fca2ffb7376a6df2844bf684e48250a9ce0e0000000000000000000000006777fca2ffb7376a6df2844bf684e48250a9ce0e00000000000000000000000000000000000000000000000000ae37a5a56a690000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15406,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e56d4397e492a5ce2867e30c5547f312c1c25f56000000000000000000000000e56d4397e492a5ce2867e30c5547f312c1c25f5600000000000000000000000000000000000000000000000000215a0028e0dfa500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15407,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a1423a1c631711dd2f64b887bceff09917e3ad50000000000000000000000001a1423a1c631711dd2f64b887bceff09917e3ad5000000000000000000000000000000000000000000000000000654c932203d6a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15408,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ad68d0af76006c762edfe72aa49b8b088d26f1e0000000000000000000000005ad68d0af76006c762edfe72aa49b8b088d26f1e000000000000000000000000000000000000000000000000000e86a947e29f9700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x50f92acb95d3986dd4944d2f5dd64233022bbf4dd0c0fbeed35e4f6c6347df9d,2022-05-28 22:44:03.000 UTC,0,true -15413,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c114b578dab1e6417afdf3f94f6bd4ced508d392000000000000000000000000c114b578dab1e6417afdf3f94f6bd4ced508d392000000000000000000000000000000000000000000000000002e2f6e5e14800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15414,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000303308d5f4fef62ce6c246f00b886a2420a5bc0f000000000000000000000000303308d5f4fef62ce6c246f00b886a2420a5bc0f000000000000000000000000000000000000000000000000002c6b91062aaec300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15415,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a2566b9a398958590b39b9a9013383a71a73a2a0000000000000000000000005a2566b9a398958590b39b9a9013383a71a73a2a00000000000000000000000000000000000000000000000000049e57d635400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15416,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000033e0f6b6c246fa636fd250a4af6166b83fa8a7e200000000000000000000000033e0f6b6c246fa636fd250a4af6166b83fa8a7e20000000000000000000000000000000000000000000000000000223d9d92e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15417,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b9f34a609b6fbc2954d960feb88252a35d0c5c44000000000000000000000000b9f34a609b6fbc2954d960feb88252a35d0c5c440000000000000000000000000000000000000000000000000000ff84259fde0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15418,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6118f12ef110c9c2c3168f08787af5d569cc62c000000000000000000000000b6118f12ef110c9c2c3168f08787af5d569cc62c000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15419,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000001687491cb797f011790f349cbf8969dad49fcd300000000000000000000000001687491cb797f011790f349cbf8969dad49fcd3000000000000000000000000000000000000000000000000001d55cf064e604000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15420,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000374098e411a4aaf574ca9080512125764df217d0000000000000000000000000374098e411a4aaf574ca9080512125764df217d0000000000000000000000000000000000000000000000000001c91b0f23920000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15421,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dfc24a11ba5ce6be386444c46b79308189e991cb000000000000000000000000dfc24a11ba5ce6be386444c46b79308189e991cb0000000000000000000000000000000000000000000000000001ddcd1ed4b00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15422,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e12598b84a6e5e2436e268d403f2f79d1af23807000000000000000000000000e12598b84a6e5e2436e268d403f2f79d1af238070000000000000000000000000000000000000000000000000332555df265d71500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x71b63083278921c32fb30f4ede37688b95df8c7af8df6ba89f6ea27b7d47931c,2021-12-11 09:53:04.000 UTC,0,true -15427,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000c1a1c3bed7bff1418487b6af7f3fb9e13fc51969000000000000000000000000c1a1c3bed7bff1418487b6af7f3fb9e13fc519690000000000000000000000000000000000000000000000000000000000b5946000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15428,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000c1a1c3bed7bff1418487b6af7f3fb9e13fc51969000000000000000000000000c1a1c3bed7bff1418487b6af7f3fb9e13fc519690000000000000000000000000000000000000000000000000000000000b5c5b100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15429,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c4ef68733ce0bbac45f02c2b183c9ce7c21843dd000000000000000000000000c4ef68733ce0bbac45f02c2b183c9ce7c21843dd000000000000000000000000000000000000000000000000005e1edc5305d4ea00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15431,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000c1a1c3bed7bff1418487b6af7f3fb9e13fc51969000000000000000000000000c1a1c3bed7bff1418487b6af7f3fb9e13fc519690000000000000000000000000000000000000000000000000000000000c6006300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15432,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000c1a1c3bed7bff1418487b6af7f3fb9e13fc51969000000000000000000000000c1a1c3bed7bff1418487b6af7f3fb9e13fc519690000000000000000000000000000000000000000000000000000000000bbe60f00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15433,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000008360cd7c6d87f9f4ad9434dd94b836c0ca61c8530000000000000000000000008360cd7c6d87f9f4ad9434dd94b836c0ca61c85300000000000000000000000000000000000000000000000000000000199f45bf00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15434,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061fac34ed5aba1edc80e1267e830270401bcc89000000000000000000000000061fac34ed5aba1edc80e1267e830270401bcc8900000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15435,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008360cd7c6d87f9f4ad9434dd94b836c0ca61c8530000000000000000000000008360cd7c6d87f9f4ad9434dd94b836c0ca61c853000000000000000000000000000000000000000000000000001bb6282e8b0ec000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15436,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e62556766debc521c4f745846d275578b7947400000000000000000000000008e62556766debc521c4f745846d275578b7947400000000000000000000000000000000000000000000000000181ed1f85e8911100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15437,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae416e324029acb10367349234c13edf44b0ddfd000000000000000000000000ae416e324029acb10367349234c13edf44b0ddfd00000000000000000000000000000000000000000000000002b075761a6f4a5800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15438,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f4c458f31f1cd636c221e7e5d6e2f9d3105e4b17000000000000000000000000f4c458f31f1cd636c221e7e5d6e2f9d3105e4b1700000000000000000000000000000000000000000000000000770a91ac13adca00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15439,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000007532551bed089a581d17618abb0286b6a93d7e8c0000000000000000000000007532551bed089a581d17618abb0286b6a93d7e8c00000000000000000000000000000000000000000000000000000000000f695000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15440,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd713a96cb3d6f1454ec644e8b017b419a0aa1c6000000000000000000000000dd713a96cb3d6f1454ec644e8b017b419a0aa1c600000000000000000000000000000000000000000000000000ac6c265dc5480000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15441,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000e8b8c88c0c2757f03679e2ef1b43a3ff2e021962000000000000000000000000e8b8c88c0c2757f03679e2ef1b43a3ff2e021962000000000000000000000000000000000000000000000000000000000187a3e500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15442,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000e8b8c88c0c2757f03679e2ef1b43a3ff2e021962000000000000000000000000e8b8c88c0c2757f03679e2ef1b43a3ff2e021962000000000000000000000000000000000000000000000000000000000a8a661700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15443,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000901f007510f776c978cce30df4a59b49e11650c6000000000000000000000000901f007510f776c978cce30df4a59b49e11650c6000000000000000000000000000000000000000000000000005c543dfaa1660000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15444,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000e8b8c88c0c2757f03679e2ef1b43a3ff2e021962000000000000000000000000e8b8c88c0c2757f03679e2ef1b43a3ff2e0219620000000000000000000000000000000000000000000000000000000000bc4e3700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15446,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000e35e4a4b3db623f5997065068c0eefc6da752b19000000000000000000000000e35e4a4b3db623f5997065068c0eefc6da752b1900000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15447,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000079d2f1e855ecbff1e3d24aa2d05bc8bab2dd7b7000000000000000000000000079d2f1e855ecbff1e3d24aa2d05bc8bab2dd7b70000000000000000000000000000000000000000000000000002da05de16ca93500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15448,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000ecf67f602c23698ee680914271e900175a65a403000000000000000000000000ecf67f602c23698ee680914271e900175a65a4030000000000000000000000000000000000000000000000000000000000cfad0600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15450,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000009aa6d4697057fa85023930c2062410d38adc407d0000000000000000000000009aa6d4697057fa85023930c2062410d38adc407d0000000000000000000000000000000000000000000000000000000002254abf00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15451,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b985fc8f4012a2df292da9aa323967b98c289faf000000000000000000000000b985fc8f4012a2df292da9aa323967b98c289faf000000000000000000000000000000000000000000000000001faf0bfd19092f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15452,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000d20574d9739f084b67b8a2ad0cebf670284d1c4b000000000000000000000000d20574d9739f084b67b8a2ad0cebf670284d1c4b000000000000000000000000000000000000000000000000000000000113221800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15453,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000ecf67f602c23698ee680914271e900175a65a403000000000000000000000000ecf67f602c23698ee680914271e900175a65a4030000000000000000000000000000000000000000000000000000000000b6211d00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15454,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000ecf67f602c23698ee680914271e900175a65a403000000000000000000000000ecf67f602c23698ee680914271e900175a65a4030000000000000000000000000000000000000000000000000000000000d6cb8300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15456,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005eb81691fd7505b796241dcf2f62231928d8f6ec0000000000000000000000005eb81691fd7505b796241dcf2f62231928d8f6ec0000000000000000000000000000000000000000000000000305a7e543d158cd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15462,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3c21b5d95f52635fab1d0c2a6b84c4f6924e54f000000000000000000000000f3c21b5d95f52635fab1d0c2a6b84c4f6924e54f0000000000000000000000000000000000000000000000000019defba741528000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15463,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000006d8fea199019d796c848ae1d67fc781f61aef1de0000000000000000000000006d8fea199019d796c848ae1d67fc781f61aef1de00000000000000000000000000000000000000000000000000000000000f695000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15464,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a3533bc8606bcdaaa0a2ac6e8b5d81c9c6349940000000000000000000000005a3533bc8606bcdaaa0a2ac6e8b5d81c9c63499400000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15465,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009b2855918fff918739d96b1d930b1b3e3a0a95000000000000000000000000009b2855918fff918739d96b1d930b1b3e3a0a950000000000000000000000000000000000000000000000000000049e57d635400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15466,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000098e640296317a9f5ab7078ebeb7e685da030a19a00000000000000000000000098e640296317a9f5ab7078ebeb7e685da030a19a00000000000000000000000000000000000000000000000000044364c5bb000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15467,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ebe4cdef0ccc5c84ab5259501e8ede675ee7cae2000000000000000000000000ebe4cdef0ccc5c84ab5259501e8ede675ee7cae200000000000000000000000000000000000000000000000003ed4e6d5a5ef86a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15468,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000063389e216b926ec5f705d47028765c35c89825be0000000000000000000000000000000000000000000000004563918244f40000,,,1,true -15469,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c308b8857c2621685fbd9f762bea9fdb8bad1fc6000000000000000000000000c308b8857c2621685fbd9f762bea9fdb8bad1fc6000000000000000000000000000000000000000000000000001a85f051976a8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15470,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000aa4ddacb7a5bf7613c10404dab72523569e77860000000000000000000000000aa4ddacb7a5bf7613c10404dab72523569e77860000000000000000000000000000000000000000000000000016800d4dde9f4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15484,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d23b036e1e0227631c76aa74b97b1e539661c9d1000000000000000000000000d23b036e1e0227631c76aa74b97b1e539661c9d1000000000000000000000000000000000000000000000000001ff973cafa800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15486,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e8b8c88c0c2757f03679e2ef1b43a3ff2e021962000000000000000000000000e8b8c88c0c2757f03679e2ef1b43a3ff2e02196200000000000000000000000000000000000000000000000000a7ccba815cb74000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15487,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a928c403af1993eb309451a3559f8946e7d81f7f000000000000000000000000a928c403af1993eb309451a3559f8946e7d81f7f00000000000000000000000000000000000000000000000006d96b07d16e8a9e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15491,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c33cf53b8e2b70a101ede8b334169dbf6e9a4ff3000000000000000000000000c33cf53b8e2b70a101ede8b334169dbf6e9a4ff3000000000000000000000000000000000000000000000000013d695097163b1500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15492,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fa27bcb140e9e2b64d7a54d77b7194052b330311000000000000000000000000fa27bcb140e9e2b64d7a54d77b7194052b33031100000000000000000000000000000000000000000000000003121c0638ace06f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15494,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3140bdbc0c880c3ee641ad72cf445d354a59012000000000000000000000000f3140bdbc0c880c3ee641ad72cf445d354a590120000000000000000000000000000000000000000000000000247fe25b1314fa700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9de017b537f3eaa0c360328ffd2f73b8bff5e3fc342aefdcd72af50f61d27a76,2022-06-01 12:25:28.000 UTC,0,true -15495,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000008e7488075d58158083330e9f37db55056b5edb330000000000000000000000000000000000000000000000000de0b6b3a7640000,0x9fc9c127408408704529378d2b7b40ea0f214244c41465dee757c2600e75ae90,2022-03-10 11:49:57.000 UTC,0,true -15497,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b9e03299d9449d3add284a1c13ab2566e876d640000000000000000000000002b9e03299d9449d3add284a1c13ab2566e876d64000000000000000000000000000000000000000000000000036ddc7ce2074ad100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2baab833765c964b6caddc27b84dbca79f9028e63a2d9fd3e0a6a4ff39372b78,2021-12-04 12:27:52.000 UTC,0,true -15500,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da263667e51f7bdd638abf6d9f67d7327745363d000000000000000000000000da263667e51f7bdd638abf6d9f67d7327745363d000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15501,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c2f1004ad19f2ff281de8015c39a23702fc523f0000000000000000000000000c2f1004ad19f2ff281de8015c39a23702fc523f0000000000000000000000000000000000000000000000000b774bdb944a9c7000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x547805a689d5c4da7968db7ebc0c341f3eda99864aab28daacac2af5366ac42d,2022-03-26 13:07:54.000 UTC,0,true -15502,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000350a791bfc2c21f9ed5d10980dad2e2638ffa7f600000000000000000000000084c567a704ba44a9166ddbd0cd73c2a7a8ac987f00000000000000000000000084c567a704ba44a9166ddbd0cd73c2a7a8ac987f000000000000000000000000000000000000000000000000f540559538888a9c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15503,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eeeaa0b5efdea861832e2efafc38dc9e8b47c888000000000000000000000000eeeaa0b5efdea861832e2efafc38dc9e8b47c88800000000000000000000000000000000000000000000000005d2a2807f73141800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15505,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000621256092aa05304bd2dfb3eb1836a6b259444db000000000000000000000000621256092aa05304bd2dfb3eb1836a6b259444db0000000000000000000000000000000000000000000000004563918244f4000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe939bbfecd67f042dbb6e6f4348931149c6fa19d5006b947dbc257d1104c4dc5,2021-12-15 09:08:57.000 UTC,0,true -15506,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d44988f48d651ea649df93ea83fffe2e1f777d20000000000000000000000002d44988f48d651ea649df93ea83fffe2e1f777d2000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15510,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b62d4d345cb18372e3375effd5ffaaaa591726b4000000000000000000000000b62d4d345cb18372e3375effd5ffaaaa591726b400000000000000000000000000000000000000000000000001a5578275fbfe0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15515,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032e2509cbee40743ccdda0af60ba43d5deb62d4700000000000000000000000032e2509cbee40743ccdda0af60ba43d5deb62d4700000000000000000000000000000000000000000000000000ad13ac064dad0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15516,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ab7b7ff0e3103d0ab5d87aa4f1988789bee3e504000000000000000000000000ab7b7ff0e3103d0ab5d87aa4f1988789bee3e5040000000000000000000000000000000000000000000000000d6212c57779f9f100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15517,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005986115f255b23fe5904a62771f2506abda134760000000000000000000000005986115f255b23fe5904a62771f2506abda13476000000000000000000000000000000000000000000000000006f3c4773eae00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15518,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ce31bcaa6a0d361635ff3b16f5170bb2c78becb0000000000000000000000004ce31bcaa6a0d361635ff3b16f5170bb2c78becb000000000000000000000000000000000000000000000000006db53246aa000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15520,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045c960d3342f778939bd4e121c0d07bf3692ca2300000000000000000000000045c960d3342f778939bd4e121c0d07bf3692ca2300000000000000000000000000000000000000000000000000a20f19d898305400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x95727129f89214160bfa9106ed4cc49ea1135b5dabd4d714bfdcf56bf2e02d8d,2022-02-21 03:42:32.000 UTC,0,true -15521,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1f7c6a69ea406cad335a94af565d57b66cbaf0d000000000000000000000000f1f7c6a69ea406cad335a94af565d57b66cbaf0d000000000000000000000000000000000000000000000000014e195748e939d800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15525,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f0b3f4211808f21331952d18065921c7465efa63000000000000000000000000f0b3f4211808f21331952d18065921c7465efa63000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1f493c549e296586be0c532bdb95a3bdccdd33984ca5c615e1a4f84802539c3e,2022-06-12 07:57:21.000 UTC,0,true -15527,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000480d57dc208fd4c5a2306f0c8614621053b7c643000000000000000000000000480d57dc208fd4c5a2306f0c8614621053b7c6430000000000000000000000000000000000000000000000000091da9d457a0a9100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15528,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004976af020929f31b79218567af8ef7b019f3d7bb0000000000000000000000004976af020929f31b79218567af8ef7b019f3d7bb000000000000000000000000000000000000000000000000008cb1f6f437025b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15529,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000657002379861b62b241cdf1e622c76902547cd65000000000000000000000000657002379861b62b241cdf1e622c76902547cd65000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15530,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000086849b0122425c1ba46b0916562b36a6b799794200000000000000000000000000000000000000000000000011772214a1a6fc2e,,,1,true -15534,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f221d4a60e5610c74b017ecb3eaef32ca61730fe000000000000000000000000f221d4a60e5610c74b017ecb3eaef32ca61730fe00000000000000000000000000000000000000000000000000a13e59641a178800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1556c33248015034466923cee1895bef9a405346a6f231d70fc4f15f4eec9729,2022-03-20 10:05:49.000 UTC,0,true -15535,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000139eeb895d86939eb18b52b3347402dddeaad378000000000000000000000000139eeb895d86939eb18b52b3347402dddeaad37800000000000000000000000000000000000000000000000000ade5040d7eff0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15538,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009bd1f47bf530f5e0eb44dda1236e4c8e817dcd8d0000000000000000000000009bd1f47bf530f5e0eb44dda1236e4c8e817dcd8d00000000000000000000000000000000000000000000000001f35e87950f7f3200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15540,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000090eb8081c94b56a8278d016252793fd82c0059e700000000000000000000000090eb8081c94b56a8278d016252793fd82c0059e700000000000000000000000000000000000000000000000000a717b0fe679a3a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x42e4d2a8f70491661b772fd9d0173d43152306f778a70ec1fb7caa73345889a7,2022-08-03 05:13:06.000 UTC,0,true -15541,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004f61201a26d24891926c4066adbd98685a00f1f70000000000000000000000004f61201a26d24891926c4066adbd98685a00f1f7000000000000000000000000000000000000000000000000014f5d7be772aa5900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15542,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094520e2f86afd790263715f727d0d35f533f2a3600000000000000000000000094520e2f86afd790263715f727d0d35f533f2a360000000000000000000000000000000000000000000000000008d6d09ee0d2d600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15547,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000009bbc644ec23f35d62cc09e68bfd9f18ba7a3ba900000000000000000000000009bbc644ec23f35d62cc09e68bfd9f18ba7a3ba90000000000000000000000000000000000000000000000000153ffcf40bc0f1900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15548,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a4b6508f51ba37765846a12d4362205acef278e1000000000000000000000000a4b6508f51ba37765846a12d4362205acef278e10000000000000000000000000000000000000000000000000587549450bc780000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd3c3a4d4f82452eda6cead765e4cbb616b1ef207db8bb03801a940684b4eed45,2022-03-10 00:57:43.000 UTC,0,true -15552,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000885f1d2f1f29adea24a8f23223f04f154bcc2e4f000000000000000000000000885f1d2f1f29adea24a8f23223f04f154bcc2e4f000000000000000000000000000000000000000000000000002d1fab3e0b9be800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15553,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001675d5e5f800b117530d62b7da664dbf8bdc8f190000000000000000000000001675d5e5f800b117530d62b7da664dbf8bdc8f1900000000000000000000000000000000000000000000000000047f6e8d65bc8a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15557,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da4bcd3ed7c54bbedca1012bdf9999140b9ec840000000000000000000000000da4bcd3ed7c54bbedca1012bdf9999140b9ec840000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15559,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000a5458cdb2608f25c874cf4d20dec1f6edace6b11000000000000000000000000a5458cdb2608f25c874cf4d20dec1f6edace6b1100000000000000000000000000000000000000000000000000000000000f695000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15561,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008b5a40b8563e721ef298c44ba4a4440f67b5af170000000000000000000000008b5a40b8563e721ef298c44ba4a4440f67b5af170000000000000000000000000000000000000000000000000000886c98b7600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15563,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000038fa9da35d8905c0367e68ab3c90920be33ed64200000000000000000000000038fa9da35d8905c0367e68ab3c90920be33ed642000000000000000000000000000000000000000000000000002714711487800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15564,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000236187c608cfc18f602fe35625533395ecdd2ada000000000000000000000000236187c608cfc18f602fe35625533395ecdd2ada00000000000000000000000000000000000000000000000000000000000f695000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15565,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f2f5207b459a3b6fbeaabdbc6ececed7ca878d1a000000000000000000000000f2f5207b459a3b6fbeaabdbc6ececed7ca878d1a00000000000000000000000000000000000000000000000002270128669ac7bb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15566,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008b5a40b8563e721ef298c44ba4a4440f67b5af170000000000000000000000008b5a40b8563e721ef298c44ba4a4440f67b5af170000000000000000000000000000000000000000000000000000886c98b7600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15570,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e89cf21911a160730d27e62589f52869a1abc5d0000000000000000000000006e89cf21911a160730d27e62589f52869a1abc5d0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15573,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000cfc7a084444c5a41ee0e3df3333a5f203c98f3ee000000000000000000000000000000000000000000000003420e179398fa0000,,,1,true -15574,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000fbbac497570e775ae6bb6393b1ef9584ac2262c0000000000000000000000000fbbac497570e775ae6bb6393b1ef9584ac2262c0000000000000000000000000000000000000000000000000ddb6da88a20420000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15578,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0a7aade64bface56abb7f5ca2190e9f3c0efdcd000000000000000000000000b0a7aade64bface56abb7f5ca2190e9f3c0efdcd0000000000000000000000000000000000000000000000000000886c98b7600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15580,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006503c34b11527e35a73fbb893bc18468aaee2e780000000000000000000000006503c34b11527e35a73fbb893bc18468aaee2e78000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15582,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000735b2f2a6cfcb2a3306f2b8805ca7f59358ce422000000000000000000000000735b2f2a6cfcb2a3306f2b8805ca7f59358ce4220000000000000000000000000000000000000000000000000018bb6fb4e92d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15583,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000085d33380514aba3ae6cf1c58ad9717a2b1cf0272000000000000000000000000000000000000000000000000d02ab486cedc0000,,,1,true -15584,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000735b2f2a6cfcb2a3306f2b8805ca7f59358ce422000000000000000000000000735b2f2a6cfcb2a3306f2b8805ca7f59358ce422000000000000000000000000000000000000000000000000d3397d48e46a863700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15585,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000735b2f2a6cfcb2a3306f2b8805ca7f59358ce422000000000000000000000000735b2f2a6cfcb2a3306f2b8805ca7f59358ce42200000000000000000000000000000000000000000000000000127c1396adfec000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15587,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000080cffdca4d7e05eb25e703a183e98c7a4094eec000000000000000000000000080cffdca4d7e05eb25e703a183e98c7a4094eec000000000000000000000000000000000000000000000000e4d70fcb6dee77fd800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xd3515b1ae756c50ba48a56c7bd4f4f8979bc5910b786346598583bf2082691d7,2022-06-11 07:11:36.000 UTC,0,true -15588,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080cffdca4d7e05eb25e703a183e98c7a4094eec000000000000000000000000080cffdca4d7e05eb25e703a183e98c7a4094eec0000000000000000000000000000000000000000000000000007294135de941c500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x14c37c119b5fcdee1db5d65d8359e2366e66b0f9eea03561bfbf177955071d9b,2022-06-05 07:10:15.000 UTC,0,true -15589,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003181f3cfbe3137612e53f27e249f0e380e0e0ac30000000000000000000000003181f3cfbe3137612e53f27e249f0e380e0e0ac3000000000000000000000000000000000000000000000000003b2a943fceae3800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15590,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000407e41dc7b2b69a97eb05e371b01257ecd68509f000000000000000000000000407e41dc7b2b69a97eb05e371b01257ecd68509f000000000000000000000000000000000000000000000000142f37477334f9c400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15591,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000db706ba75c0882fe5ab49e8369feb9646b7dc99c000000000000000000000000db706ba75c0882fe5ab49e8369feb9646b7dc99c00000000000000000000000000000000000000000000000000000000000f695000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15594,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002cac8830d0a4bb04728ccaf7bbeefead775172130000000000000000000000002cac8830d0a4bb04728ccaf7bbeefead775172130000000000000000000000000000000000000000000000000429d069189e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x48416e1070fee1598a30d75fea522f744ff59aa3bce28f95f6cc35488ce484d3,2021-12-11 09:01:42.000 UTC,0,true -15595,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000011c0a0a876bfe0aaf5092c5ac03518d67824ec6400000000000000000000000011c0a0a876bfe0aaf5092c5ac03518d67824ec6400000000000000000000000000000000000000000000000000000000000f695000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15596,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1d1280cbe4432f4ba29d1531952b968ce266fcc000000000000000000000000c1d1280cbe4432f4ba29d1531952b968ce266fcc000000000000000000000000000000000000000000000000001fd904980b3c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15598,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007848c04fb28d52fd52a5e63b6bb4a1a2e0528bbf0000000000000000000000007848c04fb28d52fd52a5e63b6bb4a1a2e0528bbf000000000000000000000000000000000000000000000000023b529939be0c3c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15599,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf1538fb243c868053b78a23e4a06612b4a45c7a000000000000000000000000bf1538fb243c868053b78a23e4a06612b4a45c7a00000000000000000000000000000000000000000000000001ee6258622bd30d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15600,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c4e58d790453dbb161982657664e1a5b76032790000000000000000000000000c4e58d790453dbb161982657664e1a5b760327900000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15602,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000009ab3f9a3f33933d17967e95b74d29f5bdb8cb4910000000000000000000000009ab3f9a3f33933d17967e95b74d29f5bdb8cb49100000000000000000000000000000000000000000000000000000000000f695000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15603,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000000951ce71f33c24af58c5253612938d107d537b970000000000000000000000000000000000000000000000002cabc97d71c9e09e,,,1,true -15605,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000000cd543bebb1ec53e66e6c82694b4b5056c7056590000000000000000000000000cd543bebb1ec53e66e6c82694b4b5056c70565900000000000000000000000000000000000000000000000000000000000f695000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15606,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b829c7dfec0373983e463351af11a96e61668f66000000000000000000000000b829c7dfec0373983e463351af11a96e61668f660000000000000000000000000000000000000000000000000408b73897132e9b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15609,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fbc266b81ae6b630a854948ab2f222c9f44ff32d000000000000000000000000fbc266b81ae6b630a854948ab2f222c9f44ff32d00000000000000000000000000000000000000000000000000ad1be5e3f6b34000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15613,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005abf14ddcb863e2709201aaf932f826a181cd2e70000000000000000000000005abf14ddcb863e2709201aaf932f826a181cd2e700000000000000000000000000000000000000000000000001609efd6942060000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15615,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000073b968d104cb550f4e28543a52ff7357b20c746800000000000000000000000073b968d104cb550f4e28543a52ff7357b20c7468000000000000000000000000000000000000000000000001bbcdedad1ca7b2b400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15616,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000044775476a3c87740f9ff7d013b601e8f3857a72600000000000000000000000044775476a3c87740f9ff7d013b601e8f3857a72600000000000000000000000000000000000000000000000000d5df4e3a60eb1900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15617,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000dee96105de27c6f47a610fba6b700b22abb26c040000000000000000000000000000000000000000000000009a2488cb49cce6ff,,,1,true -15619,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001905c1e4278d34920fbd4a479b8f5d51ea065b3d0000000000000000000000001905c1e4278d34920fbd4a479b8f5d51ea065b3d0000000000000000000000000000000000000000000000006c8616e9a737f55a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf94f7ce14399d5a2f5daae532c6aff898ca496ce620e5d0a44874ff3740325ca,2021-11-25 08:06:25.000 UTC,0,true -15621,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000620c00e43aaa99ceee1b84bf1bb49c3fbee22b0c000000000000000000000000620c00e43aaa99ceee1b84bf1bb49c3fbee22b0c000000000000000000000000000000000000000000000000074e6602336f04c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15622,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ba03e80342ea3011dfcddeb2d1813d81c05caec0000000000000000000000002ba03e80342ea3011dfcddeb2d1813d81c05caec00000000000000000000000000000000000000000000000000fc5e3dd2ac1d2100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x20124594972827f2e50c99074cc48a212ac61198812795595f2b0f41ccf624c9,2022-04-27 08:40:34.000 UTC,0,true -15623,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000881cf1834434084b05fbd2d17d46bdf2ac685ee7000000000000000000000000881cf1834434084b05fbd2d17d46bdf2ac685ee7000000000000000000000000000000000000000000000000019602080c041b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15625,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bbcb54119492581766c1256ffbe8f816c13f26e2000000000000000000000000bbcb54119492581766c1256ffbe8f816c13f26e200000000000000000000000000000000000000000000000002b97fa8c894b4ac00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15626,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef60a333d909f97ca9f6248b831f979bf5e205d3000000000000000000000000ef60a333d909f97ca9f6248b831f979bf5e205d300000000000000000000000000000000000000000000000000034493c1291bb000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15627,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d9b70f1b761e529f451898a821840f622794bf90000000000000000000000003d9b70f1b761e529f451898a821840f622794bf9000000000000000000000000000000000000000000000000034843e49e3cac4100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x8ac58a40358e5f6456a6012cdcfd4611650206c05e9e4b95de0011c739677a8b,2021-12-12 10:04:19.000 UTC,0,true -15628,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef60a333d909f97ca9f6248b831f979bf5e205d3000000000000000000000000ef60a333d909f97ca9f6248b831f979bf5e205d300000000000000000000000000000000000000000000000001340848f100f83b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15629,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000feee48a7d7eb20b4f9f3ec8246ab49b9e5e305a5000000000000000000000000feee48a7d7eb20b4f9f3ec8246ab49b9e5e305a50000000000000000000000000000000000000000000000000e82d332f8d3690600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15630,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000067be7f6775bf056f9c1d1fd1debff44ef2ad67f000000000000000000000000067be7f6775bf056f9c1d1fd1debff44ef2ad67f0000000000000000000000000000000000000000000000000038edb0938993db000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xc8906005439c3886df6e01a7ad91cb43c0b72609e7d2d0d6633dca7d2480fad7,2021-12-18 16:14:46.000 UTC,0,true -15631,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002255be730f41cbea4aabda73b17f6b6f511fd6a40000000000000000000000002255be730f41cbea4aabda73b17f6b6f511fd6a40000000000000000000000000000000000000000000000000dd0bda52890241f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15632,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e816691000000000000000000000000dc5aa4908abaf08a853fd459f35fe7df029fb1e5000000000000000000000000dc5aa4908abaf08a853fd459f35fe7df029fb1e50000000000000000000000000000000000000000000000004dd288cb44a30ccb00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x741757683093055e9b12528b7b2db066310bf0adef1b183829101573f4b7898c,2021-12-11 17:47:14.000 UTC,0,true -15633,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005bb55c485319b2b770bfb03c08d7ba4c9bea33370000000000000000000000005bb55c485319b2b770bfb03c08d7ba4c9bea33370000000000000000000000000000000000000000000000000366135cf75cb53200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15635,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fe879cc3e4089f618cf5b8bbc8edd9a6cecdb60d000000000000000000000000fe879cc3e4089f618cf5b8bbc8edd9a6cecdb60d00000000000000000000000000000000000000000000000000cfb8162b28ef0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xda33481248c65b04c479e3542a286b763589c3be4f7e187413c2fabdb7b3581a,2022-03-10 01:23:36.000 UTC,0,true -15637,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b1d5604b8ad680ceb7147ef9a23237b68a21d73b000000000000000000000000b1d5604b8ad680ceb7147ef9a23237b68a21d73b00000000000000000000000000000000000000000000000002bdde51d99e9bab00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15643,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000016bb0ca466b8cafac10fd9c4325dc19040dec79900000000000000000000000016bb0ca466b8cafac10fd9c4325dc19040dec79900000000000000000000000000000000000000000000000000c079fc799567c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15644,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000002849ef9c4f4f8a2ba98279dcb4d61b7a4a982b320000000000000000000000000000000000000000000000001015089496b6027b,,,1,true -15651,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000058e5453b2a2a3b0b62e84562384170796167cbd000000000000000000000000058e5453b2a2a3b0b62e84562384170796167cbd000000000000000000000000000000000000000000000000001512a74848fabe100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15653,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000930c2db8ee04a798d215ae89ae957db5556917c0000000000000000000000000930c2db8ee04a798d215ae89ae957db5556917c0000000000000000000000000000000000000000000000000007f7666fc5b429300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15654,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000653879c36be0552e44aeddf50bf3e9ab6eb2b895000000000000000000000000653879c36be0552e44aeddf50bf3e9ab6eb2b89500000000000000000000000000000000000000000000000000d0d4193be5c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15656,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000216902b0d12e37c1e0a6470f95daa24950bd2cb7000000000000000000000000216902b0d12e37c1e0a6470f95daa24950bd2cb70000000000000000000000000000000000000000000000000b1b464f3280584300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15657,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000216902b0d12e37c1e0a6470f95daa24950bd2cb7000000000000000000000000216902b0d12e37c1e0a6470f95daa24950bd2cb70000000000000000000000000000000000000000000000000c3d49f23532269f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15658,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000016f1760ed9321eac4788514b1e5cce598ab3c43a00000000000000000000000016f1760ed9321eac4788514b1e5cce598ab3c43a000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15661,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9df1158c6da7e3dee926896a99388810c7c59cb000000000000000000000000c9df1158c6da7e3dee926896a99388810c7c59cb000000000000000000000000000000000000000000000000013d7ec8204b531d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15663,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b917f2001b6143d43d2cdefefd02f8055e862c0e000000000000000000000000b917f2001b6143d43d2cdefefd02f8055e862c0e000000000000000000000000000000000000000000000000012c6cdbf7973df500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15664,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002dbfe0adaf96f9da1d6f78057f73392894452a5e0000000000000000000000002dbfe0adaf96f9da1d6f78057f73392894452a5e00000000000000000000000000000000000000000000000000a706af3f4c415c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15665,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005c01d32809bbb33d585b4175d06b5ba7b8f0e96d0000000000000000000000005c01d32809bbb33d585b4175d06b5ba7b8f0e96d000000000000000000000000000000000000000000000000015a61df50f2ed0d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15666,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000003422473b7de8204445edf001e33ef637d6cb60ad0000000000000000000000003422473b7de8204445edf001e33ef637d6cb60ad00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15668,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef4981e9ced215d267ae900c5802c6966efd312a000000000000000000000000ef4981e9ced215d267ae900c5802c6966efd312a00000000000000000000000000000000000000000000000000b08d49cea31a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15672,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e7d1cfec62aec12320ef42bd59283590f4216151000000000000000000000000e7d1cfec62aec12320ef42bd59283590f421615100000000000000000000000000000000000000000000000000677e328e0f350c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15673,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e25eecf3ebdea654861c59805c074657bd0a3680000000000000000000000008e25eecf3ebdea654861c59805c074657bd0a3680000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15675,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a425fe8b53b1386ed496dd3ee143f2d8c3a624d3000000000000000000000000a425fe8b53b1386ed496dd3ee143f2d8c3a624d30000000000000000000000000000000000000000000000000003b602bac7763500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15678,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000012ef99df0866b69754558cf7ab1650ccb4c04a0c00000000000000000000000012ef99df0866b69754558cf7ab1650ccb4c04a0c0000000000000000000000000000000000000000000000000067c77c9773850000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15679,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d3b8ba6e97efd09aca212d79fc3b7ac0e2673100000000000000000000000007d3b8ba6e97efd09aca212d79fc3b7ac0e267310000000000000000000000000000000000000000000000000008f74daf0cdecf500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15681,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000239d80a9243e6576be0b3ad7e9e8e5a29a796440000000000000000000000000239d80a9243e6576be0b3ad7e9e8e5a29a796440000000000000000000000000000000000000000000000000045103e79aeb98f800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x70acccad5851f8e4a87a8c7e123e025f9457312d031dc29241f9763fe84190a3,2021-12-25 15:22:17.000 UTC,0,true -15682,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000007de9f19149a86da212b97d30131f4ce1c3f6c7900000000000000000000000007de9f19149a86da212b97d30131f4ce1c3f6c7900000000000000000000000000000000000000000000000000747a04e594281a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe052b3daad4cb6d23eae5032e1ad3e00c5ac5b7e4b2e999ace55b300fda261f1,2022-03-11 12:49:25.000 UTC,0,true -15684,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e725c37b2368d71c4976cfe7e3c69ffdc3635bba000000000000000000000000e725c37b2368d71c4976cfe7e3c69ffdc3635bba00000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xa53c5f3ff5b61cd85acae0f9fb7adea8c162ce83b2efbdfb12fc92734584e2eb,2022-07-21 05:05:53.000 UTC,0,true -15685,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a0a29a5ea152da70f70ec9900a08bc55ff59bb01000000000000000000000000a0a29a5ea152da70f70ec9900a08bc55ff59bb01000000000000000000000000000000000000000000000000006258023832c84900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15688,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000273ec095fe4c3c023b6e5d3dcd3642af950ac930000000000000000000000000273ec095fe4c3c023b6e5d3dcd3642af950ac930000000000000000000000000000000000000000000000000013ea0665957720700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15689,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043c76b04ed218a881346d8b2b65e5d29f87e985300000000000000000000000043c76b04ed218a881346d8b2b65e5d29f87e9853000000000000000000000000000000000000000000000000015fdd7560e56a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x47e6a8472abe99cff5917c8dbfb7b6fb9137bc17e4396ffe6effd8417d52ea2c,2021-11-28 05:35:26.000 UTC,0,true -15691,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000970e1cbbea26bbbafe4608848f7add9b397343df000000000000000000000000970e1cbbea26bbbafe4608848f7add9b397343df0000000000000000000000000000000000000000000000000267480e976331f700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15693,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd530b6604ad97989c09449a10df892c0206fc96000000000000000000000000dd530b6604ad97989c09449a10df892c0206fc96000000000000000000000000000000000000000000000000004fb641dd2701b800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15694,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc69699b7f25a0311f055880a421abe5eb89f111000000000000000000000000fc69699b7f25a0311f055880a421abe5eb89f1110000000000000000000000000000000000000000000000000f3abe76b684734000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15695,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000070753fc8fcaafaf71df307799243d0152e1e774900000000000000000000000070753fc8fcaafaf71df307799243d0152e1e7749000000000000000000000000000000000000000000000000001b2b764c90d29400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15696,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e36957237b18282b8d08739b98922991759bc771000000000000000000000000e36957237b18282b8d08739b98922991759bc77100000000000000000000000000000000000000000000000002bb1f79f177567a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15697,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c512e897ea2e17d49587a15ac8563a19c4514580000000000000000000000002c512e897ea2e17d49587a15ac8563a19c4514580000000000000000000000000000000000000000000000000067d7fcb8b8160000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15698,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000018b25c78b356a3247bcef5bf487a1ff0e5e0885200000000000000000000000018b25c78b356a3247bcef5bf487a1ff0e5e08852000000000000000000000000000000000000000000000000009812d0bb55244500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15702,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000510b2fd4adee51d4ee6dfc6c15a2af9665a15a7e000000000000000000000000510b2fd4adee51d4ee6dfc6c15a2af9665a15a7e0000000000000000000000000000000000000000000000001b7967daaaa41ddf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15703,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000a5ecbcda96210b6f93f60bb0002d008b2c4aced6000000000000000000000000a5ecbcda96210b6f93f60bb0002d008b2c4aced6000000000000000000000000000000000000000000000000000000000d0b5ade00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x5688c5f6aaafe2bc2fc1e3cbd357c7ebd9bcf3e1deda2b9c387e99985d9f9a52,2021-12-11 09:28:44.000 UTC,0,true -15706,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003580e55e0157228f7d648dbb2d1ac8aa8a4f69450000000000000000000000003580e55e0157228f7d648dbb2d1ac8aa8a4f6945000000000000000000000000000000000000000000000000042346f0b63b000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15707,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002dc2442365fd0389a3312107274adaa865513f0b0000000000000000000000002dc2442365fd0389a3312107274adaa865513f0b000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15708,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000003580e55e0157228f7d648dbb2d1ac8aa8a4f694500000000000000000000000000000000000000000000000456a91d69381ae92f,,,1,true -15709,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007036847a2a085df50bd2e5bcd42091eec9f2b9dc0000000000000000000000007036847a2a085df50bd2e5bcd42091eec9f2b9dc000000000000000000000000000000000000000000000000041f6fa3827d608000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15714,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc7f3c5fc1ce22e8d8f2c35029055bcc06ea1dfc000000000000000000000000dc7f3c5fc1ce22e8d8f2c35029055bcc06ea1dfc00000000000000000000000000000000000000000000000001605b96ea0b930000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15717,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000aa2f9f0798fab1f08cf508b721e3a81dbe007e830000000000000000000000000000000000000000000000000aa27c94fbf9aece,,,1,true -15718,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a31cd363cd2867e98fb0102e07e0c226f8346e48000000000000000000000000a31cd363cd2867e98fb0102e07e0c226f8346e48000000000000000000000000000000000000000000000000004f94ae6af8000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe14c739ea867a22d7aab7284f54551735cf2fb463544838fad22930d92f0f5b6,2022-08-21 04:58:51.000 UTC,0,true -15719,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000003a01aeaf23caa39d85e8e06b1938f4f1af282fa7000000000000000000000000000000000000000000000000345e5a253e611c58,,,1,true -15720,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f372f8bf76c652b51d293038431f9deb8333e67b000000000000000000000000f372f8bf76c652b51d293038431f9deb8333e67b0000000000000000000000000000000000000000000000000360098d8359634b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x4fd5b3a7ab3a585bd9821b0ce7063bf263a14f99d7766d2d02da4a7376a22d10,2021-11-25 22:28:26.000 UTC,0,true -15723,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005b9915aa990cea3f67e0af53c05573aafc4206560000000000000000000000005b9915aa990cea3f67e0af53c05573aafc4206560000000000000000000000000000000000000000000000000dd15bc36ce4653a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xc5354bdac33b6b07019d1a31e212e1a17a3fab2b56efdffcfca2e6bb91987043,2021-11-21 05:07:32.000 UTC,0,true -15725,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b70ec21d2908fd7f8553a7beab19ba0da4f0204c000000000000000000000000b70ec21d2908fd7f8553a7beab19ba0da4f0204c00000000000000000000000000000000000000000000000000bd1addfe8ee3e600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x6e22d8dcc99c9a1be52548d2527eafdf78dcff3cd68b0227837f7048817713a2,2022-03-14 07:31:01.000 UTC,0,true -15727,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000019f372338364550b5fe17fb1c97852ecb08579ed00000000000000000000000019f372338364550b5fe17fb1c97852ecb08579ed000000000000000000000000000000000000000000000000006ccc1accd5377500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15729,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001fae7e1347cc2a5f625dec6d9d4e5d1c86deda380000000000000000000000001fae7e1347cc2a5f625dec6d9d4e5d1c86deda38000000000000000000000000000000000000000000000000003c84d21c65943600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf39d76e8c3f79c3f59fea47b25abb57643fe617bc7b26643265db11a5142bd20,2022-09-04 14:36:59.000 UTC,0,true -15731,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000deb552b4fbd93b65cec9de13c8157e8cd634933e000000000000000000000000deb552b4fbd93b65cec9de13c8157e8cd634933e00000000000000000000000000000000000000000000000002c46afb2ccb490000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15733,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000095b62a3e480f4944ab0949c2da586b6d39d692ef00000000000000000000000000000000000000000000000407ac9401792e5cf2,,,1,true -15734,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000095b62a3e480f4944ab0949c2da586b6d39d692ef000000000000000000000000000000000000000000000003d92f4d976c98551e,,,1,true -15736,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000025c9ca23e7f4a857bf5ce4a343830560776a12ad00000000000000000000000025c9ca23e7f4a857bf5ce4a343830560776a12ad000000000000000000000000000000000000000000000000008a583afeac337200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15740,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007c4a4734de9278982e0fbad7974615ab2b55f8960000000000000000000000007c4a4734de9278982e0fbad7974615ab2b55f896000000000000000000000000000000000000000000000000015a9e4209d2f35000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15741,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b17bbfbd1cc5faee7976d7f0ee8249ebddf78726000000000000000000000000b17bbfbd1cc5faee7976d7f0ee8249ebddf7872600000000000000000000000000000000000000000000000006e6b6aeff4a122300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x60065690965b034a5591bbf8be6d3274666e34dec788de0db582cca560bd2f18,2021-12-19 08:23:39.000 UTC,0,true -15743,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000005600051d9924b05d7098157ad8d791d48a93185a0000000000000000000000005600051d9924b05d7098157ad8d791d48a93185a0000000000000000000000000000000000000000000000000000000013fc1e2300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15745,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac0da3a79a854b99b08ba6fae140617901453ba8000000000000000000000000ac0da3a79a854b99b08ba6fae140617901453ba8000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15747,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac0da3a79a854b99b08ba6fae140617901453ba8000000000000000000000000ac0da3a79a854b99b08ba6fae140617901453ba800000000000000000000000000000000000000000000000000431a1baad2e10000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15752,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000084411f2f63602504e25206d5b447ce16747cb01000000000000000000000000084411f2f63602504e25206d5b447ce16747cb01000000000000000000000000000000000000000000000000005b668820972f5100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15753,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000079855ef6cf3d3e4ba05fa7466e94c23adc0cc8c6000000000000000000000000000000000000000000000002b5e3af16b1880000,,,1,true -15754,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001217211a1145e5388d45f98c98a6fe5cf29efbdc0000000000000000000000001217211a1145e5388d45f98c98a6fe5cf29efbdc00000000000000000000000000000000000000000000000000f0b0d67fbf11d200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15755,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f0935b128abb3b5074850247d615392366fa08a0000000000000000000000002f0935b128abb3b5074850247d615392366fa08a000000000000000000000000000000000000000000000000015175ab2c4528a300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15758,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000273455e1d9c8b8f311a65d45e605978e57c88870000000000000000000000000273455e1d9c8b8f311a65d45e605978e57c88870000000000000000000000000000000000000000000000000443bbfe26b7e94000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15761,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a9c49c64a020f19bd6af4f2ee4b2eb9758dd9bf0000000000000000000000006a9c49c64a020f19bd6af4f2ee4b2eb9758dd9bf0000000000000000000000000000000000000000000000000040bba76c20fe0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15762,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000063d1277b25710bfeb1e95085262f365a5cc8dfaf0000000000000000000000000000000000000000000000026d9888752fa0fd68,,,1,true -15763,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008fe146b2ffe8b629a524dcb8913a358b386883610000000000000000000000008fe146b2ffe8b629a524dcb8913a358b3868836100000000000000000000000000000000000000000000000000f8d8c19f36e2e000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15764,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000034e2389ffc1d198e4aa275b8b2bcc2ef913be71300000000000000000000000034e2389ffc1d198e4aa275b8b2bcc2ef913be71300000000000000000000000000000000000000000000000000af23b02edfcd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15766,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000069b430d064874597632c3f2a019f0a8f6decc47900000000000000000000000069b430d064874597632c3f2a019f0a8f6decc47900000000000000000000000000000000000000000000000000e661aa24ea50d200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf16a1df9771ddaabc00f4eabb3c35ec9d7fc29602329ae047adc42239e10c12f,2021-12-22 08:29:57.000 UTC,0,true -15767,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000a74fb7544d54a1d8f8178b6ae3f2700ebd3a65ba000000000000000000000000a74fb7544d54a1d8f8178b6ae3f2700ebd3a65ba000000000000000000000000000000000000000000000000000000003b6456ea00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15768,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000500576d9501fff6fb42280df6d2994b36e7aefc1000000000000000000000000500576d9501fff6fb42280df6d2994b36e7aefc10000000000000000000000000000000000000000000000000000000044c0ae8e00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x4ac50a1bc67e2f6214179be701bb0722077c30ad9a8826f8fa2da1ab2a585101,2021-11-21 15:29:16.000 UTC,0,true -15769,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a74fb7544d54a1d8f8178b6ae3f2700ebd3a65ba000000000000000000000000a74fb7544d54a1d8f8178b6ae3f2700ebd3a65ba00000000000000000000000000000000000000000000000000e34759c3ace08200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15776,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000017e3c0330d2eaffc8a21acae5db958c50950bc0a00000000000000000000000017e3c0330d2eaffc8a21acae5db958c50950bc0a000000000000000000000000000000000000000000000000008836b1517e6b4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15779,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000002e5745f3136e1023b7db402f2f20d59ece802f4a0000000000000000000000002e5745f3136e1023b7db402f2f20d59ece802f4a00000000000000000000000000000000000000000000000914fce452ed8c2d4c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15781,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000934c76f53f7de96b39ab4f9b73f0e8f39ca23be2000000000000000000000000934c76f53f7de96b39ab4f9b73f0e8f39ca23be20000000000000000000000000000000000000000000000000114c7513b35da0d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x6560a6314a4600a4590516e92493a8fc322e97c1b35072cf641d4866944c1ad3,2022-03-02 11:24:14.000 UTC,0,true -15783,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000999277e47e782a2f1efff2ea234ee7486c5cbb56000000000000000000000000999277e47e782a2f1efff2ea234ee7486c5cbb56000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15785,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ceeb9e598bf6c31f3ca3eb944297c0826048bf2f000000000000000000000000ceeb9e598bf6c31f3ca3eb944297c0826048bf2f0000000000000000000000000000000000000000000000000019e74ca440ea4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15786,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009b35884498aa02ba3fe3b290c287d8e9fc892e3d0000000000000000000000009b35884498aa02ba3fe3b290c287d8e9fc892e3d000000000000000000000000000000000000000000000000014ffba3b9c3055900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15787,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000052841db83d2ddcae6afa935783c3d591b313feb500000000000000000000000052841db83d2ddcae6afa935783c3d591b313feb5000000000000000000000000000000000000000000000000021e56460e3a45a800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15789,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000d0bd81eeee1d3abf0ad446a6f52c847a6904d233000000000000000000000000d0bd81eeee1d3abf0ad446a6f52c847a6904d23300000000000000000000000000000000000000000000003e805fcef407624a8700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xfff2895933b649184626dbe0cd43aec959330a9cb7b27e7503b4f6a0df2c6ca2,2021-12-08 08:43:18.000 UTC,0,true -15790,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d0bd81eeee1d3abf0ad446a6f52c847a6904d233000000000000000000000000d0bd81eeee1d3abf0ad446a6f52c847a6904d2330000000000000000000000000000000000000000000000000031050bda72d3e300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xae95f6afc080c1e2cba52d89ac4e17fd952627d360352ab1b6ba509678a1fadc,2021-12-08 08:41:11.000 UTC,0,true -15793,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000988cab9493ed968b6499e3419844ba3c117fc070000000000000000000000000988cab9493ed968b6499e3419844ba3c117fc07000000000000000000000000000000000000000000000000000d16a69dc42c20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15794,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000343131422453b116d55955f99b27286a828bbba3000000000000000000000000343131422453b116d55955f99b27286a828bbba3000000000000000000000000000000000000000000000000023453fbf4c7ba1f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x40ae9a1f748813f53c3192f3e73223453a10cf9b53e0ccb49c8b2ec0f4c9e389,2022-02-16 10:07:03.000 UTC,0,true -15796,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c99320096dda3eeba6b3158f8c61bf993ef00e10000000000000000000000004c99320096dda3eeba6b3158f8c61bf993ef00e100000000000000000000000000000000000000000000000001ffa31dcd19f07f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xbb3379532e1b9285923808c90c7534afff71024a9c6e7ef909e2f8b06d522caf,2022-02-26 21:57:22.000 UTC,0,true -15799,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000067b5fb289c4701596e28bc3622e1f0021ee3bd24000000000000000000000000000000000000000000000003e51b4799438955e3,,,1,true -15802,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049bc79b5923273b1df30c67be9da6adcb0ad8a2300000000000000000000000049bc79b5923273b1df30c67be9da6adcb0ad8a23000000000000000000000000000000000000000000000000036af0b22bfc4dea00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15803,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000002911c55725bc15226d69a1799b6d45f18844834a0000000000000000000000000000000000000000000000014ff9cf9b24c2bced,,,1,true -15806,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000082a214b23c0119f0c37be360889927d68c2caab600000000000000000000000082a214b23c0119f0c37be360889927d68c2caab6000000000000000000000000000000000000000000000000057cfd7d55fc455e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15811,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000db6c892f2392134524b85105cf4a85559acb82d3000000000000000000000000db6c892f2392134524b85105cf4a85559acb82d300000000000000000000000000000000000000000000000006dc26f5b7c2553a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15812,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000d92ed5732d385381d00dc22792545086346bb63d000000000000000000000000d92ed5732d385381d00dc22792545086346bb63d000000000000000000000000000000000000000000000000000000006b2e9d2300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15813,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000036c448b1eb59f3b6fabbab8d1049548861687a0b00000000000000000000000036c448b1eb59f3b6fabbab8d1049548861687a0b000000000000000000000000000000000000000000000000010675001e50479600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15814,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c3b661f847e06c2b3bd9d5a356757f3e765a822e000000000000000000000000c3b661f847e06c2b3bd9d5a356757f3e765a822e00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15818,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000b3f7ef4c8c6aea014737165a98d41605cae4546e000000000000000000000000b3f7ef4c8c6aea014737165a98d41605cae4546e00000000000000000000000000000000000000000000001ca384754e508fca7600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15819,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007d73904f8b3a7fb1cf94d3497a26dc1e18b5543a0000000000000000000000007d73904f8b3a7fb1cf94d3497a26dc1e18b5543a00000000000000000000000000000000000000000000000000f657567032c20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15821,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000410b26c4509b9759ffe4ef4cfc418714daf4558a000000000000000000000000410b26c4509b9759ffe4ef4cfc418714daf4558a00000000000000000000000000000000000000000000000000000000000f695000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15823,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008959092b77f5b2f531e52041623ae90f8fd13d090000000000000000000000008959092b77f5b2f531e52041623ae90f8fd13d09000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15824,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003b887932adda07db3dee4ec3aac0d01230e8ad2f0000000000000000000000003b887932adda07db3dee4ec3aac0d01230e8ad2f000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15825,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000484f5add96dbc6744aa47052d3c7e46c9f1a0d94000000000000000000000000484f5add96dbc6744aa47052d3c7e46c9f1a0d94000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15826,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ec3e067ed83b71d59fa4cbd081c94944baf96734000000000000000000000000ec3e067ed83b71d59fa4cbd081c94944baf96734000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15827,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000022e50124549c5265a50dec8dc14f9650b094915c00000000000000000000000022e50124549c5265a50dec8dc14f9650b094915c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15828,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004b492ae8421dca3f6f5c252fe53544a7b261f6f50000000000000000000000004b492ae8421dca3f6f5c252fe53544a7b261f6f5000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15829,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007e2eb70730a90f46f6a5438f77f2fb28c2f110760000000000000000000000007e2eb70730a90f46f6a5438f77f2fb28c2f11076000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15830,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f44fbe168e7bbfe8a21e7fcf487c53782cd0ae19000000000000000000000000f44fbe168e7bbfe8a21e7fcf487c53782cd0ae19000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15831,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049e6f5ea02b107af84ebbe00e4998b8f51d51d9500000000000000000000000049e6f5ea02b107af84ebbe00e4998b8f51d51d95000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15832,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001f2f542b6eaea0badb33bcf31af27636f6b45c830000000000000000000000001f2f542b6eaea0badb33bcf31af27636f6b45c83000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15833,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000026048c504867a74ebb5cf7e06399f911274ae90100000000000000000000000026048c504867a74ebb5cf7e06399f911274ae901000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15834,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006bf076cf12d96252ecc7987aae25c165a1861d880000000000000000000000006bf076cf12d96252ecc7987aae25c165a1861d88000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15835,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000004f97e52d391a56976317c82e0fef586b77c76b480000000000000000000000004f97e52d391a56976317c82e0fef586b77c76b4800000000000000000000000000000000000000000000000000000000000f695000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15836,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f012d13a5857fa5a81fcbed7b2d76fc000f53600000000000000000000000003f012d13a5857fa5a81fcbed7b2d76fc000f5360000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15837,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000818e81671d2f1ffbf3cdaf2b9e6e171a3468face000000000000000000000000818e81671d2f1ffbf3cdaf2b9e6e171a3468face000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15838,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c194f01f4ceda4e94e76955702a7a5a7100944d0000000000000000000000003c194f01f4ceda4e94e76955702a7a5a7100944d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15839,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c58ac50c22389ee0ef7839ec0dd7f2453930a793000000000000000000000000c58ac50c22389ee0ef7839ec0dd7f2453930a793000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15840,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7797c9fcde9c1cf0fc69445873b841f78dbf0a6000000000000000000000000c7797c9fcde9c1cf0fc69445873b841f78dbf0a6000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15841,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000089e42b5b59dbc160bd1482ba3f5aefe4576acc6500000000000000000000000089e42b5b59dbc160bd1482ba3f5aefe4576acc65000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15842,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d009413e55d4ec3723ef2e187a0fe2eab355cb57000000000000000000000000d009413e55d4ec3723ef2e187a0fe2eab355cb57000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15843,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000243afda220b03bf3d3f8b8efde80d0acf4eb7918000000000000000000000000243afda220b03bf3d3f8b8efde80d0acf4eb7918000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15844,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d10ebb8f2eb9f42a4601c15d0c5ae0fcaf341338000000000000000000000000d10ebb8f2eb9f42a4601c15d0c5ae0fcaf341338000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15845,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2f3ac06205b33f50d9573fd52a1f245bce87489000000000000000000000000d2f3ac06205b33f50d9573fd52a1f245bce87489000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15846,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000199d03d61a91f44111156af6685e66df4b5cc47b000000000000000000000000199d03d61a91f44111156af6685e66df4b5cc47b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15847,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007dc04be3f84c761b7143f078dd8fa54b8e03de920000000000000000000000007dc04be3f84c761b7143f078dd8fa54b8e03de92000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15848,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000096e61138134ad5aa24c00c6ede503614d0292df900000000000000000000000096e61138134ad5aa24c00c6ede503614d0292df9000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15849,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf0e9234c9450e97b40a489c3911df26c3448ca9000000000000000000000000cf0e9234c9450e97b40a489c3911df26c3448ca9000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15850,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eea00ea19d3802ae07516afbc49a8a0a522db8fc000000000000000000000000eea00ea19d3802ae07516afbc49a8a0a522db8fc000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15851,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dfba4da6ff1c6ef56797914995b88d6d003ce3af000000000000000000000000dfba4da6ff1c6ef56797914995b88d6d003ce3af000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15852,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a6f898fab08a131a54b39495c0ef5aba32a66bcc000000000000000000000000a6f898fab08a131a54b39495c0ef5aba32a66bcc000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15853,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005bcc4977d9de3c95cdd3599dd8821dc826ef7fd00000000000000000000000005bcc4977d9de3c95cdd3599dd8821dc826ef7fd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15854,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dbad2c166e00f8b6e73a0956278aca5a80d0fd83000000000000000000000000dbad2c166e00f8b6e73a0956278aca5a80d0fd83000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15855,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000046b1162cf45ea72aafdd963c179cb1f9ed5391fe00000000000000000000000046b1162cf45ea72aafdd963c179cb1f9ed5391fe000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15856,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000803c1791bec1f1bba4c78e5e3425f00f15200d2d000000000000000000000000803c1791bec1f1bba4c78e5e3425f00f15200d2d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15857,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007670b2f86766c079e411dd64b4f8634cca1030590000000000000000000000007670b2f86766c079e411dd64b4f8634cca103059000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15858,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7d4c3b00bfa97d52087b4c15c0076d3c4a072fe000000000000000000000000c7d4c3b00bfa97d52087b4c15c0076d3c4a072fe000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15859,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037a841d75d87e4250fb5ae2f693bbc98c118975100000000000000000000000037a841d75d87e4250fb5ae2f693bbc98c1189751000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15860,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f191e949bb5da90e65c2ced253c7bbc4d709e4fe000000000000000000000000f191e949bb5da90e65c2ced253c7bbc4d709e4fe000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15861,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1d9b182c0541d580e1fc536f6ee3a6e5b9a3bcd000000000000000000000000c1d9b182c0541d580e1fc536f6ee3a6e5b9a3bcd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15862,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aae4513607ef680fab45679d81f47416eb445fac000000000000000000000000aae4513607ef680fab45679d81f47416eb445fac000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15864,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d07cda4e8441e11f34124dcddb65ba4e19c6dbb7000000000000000000000000d07cda4e8441e11f34124dcddb65ba4e19c6dbb7000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15865,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ed2242ff55ad0dec702c7dbac1cb22d61a42af7a000000000000000000000000ed2242ff55ad0dec702c7dbac1cb22d61a42af7a000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15866,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009a1f36d8111fd8ad9a6d48f192884851876579bf0000000000000000000000009a1f36d8111fd8ad9a6d48f192884851876579bf000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15867,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000232059053a33df592a159749979667acb54dbd34000000000000000000000000232059053a33df592a159749979667acb54dbd34000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15868,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003389c4b2524b528ec068b1e62975b52a434310330000000000000000000000003389c4b2524b528ec068b1e62975b52a43431033000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15869,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae4629ef6d42ecfa16199972ec7ba53a1803ee7b000000000000000000000000ae4629ef6d42ecfa16199972ec7ba53a1803ee7b000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15870,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000529c9c42799d2c83ac1999937f36e0bdfecab4cf000000000000000000000000529c9c42799d2c83ac1999937f36e0bdfecab4cf000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15871,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd7cdd38ca6354f5c1438c12ed0c2b4eed7dd1c1000000000000000000000000dd7cdd38ca6354f5c1438c12ed0c2b4eed7dd1c1000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15872,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000707436e5148045c5b8b468bd28a3ce3c1c709a70000000000000000000000000707436e5148045c5b8b468bd28a3ce3c1c709a70000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15873,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e51ab0fe5af399bf1d4954e3b832b61c4bad4d27000000000000000000000000e51ab0fe5af399bf1d4954e3b832b61c4bad4d27000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15874,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004420aea1d680bb28e137a24b06865500bdee48250000000000000000000000004420aea1d680bb28e137a24b06865500bdee4825000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15875,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f42b50e4bf895d12bcc2e0def2de33d87e3f4e84000000000000000000000000f42b50e4bf895d12bcc2e0def2de33d87e3f4e84000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15876,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc873f545dbcbdb12796d3a7b1c5d9f8703460cd000000000000000000000000fc873f545dbcbdb12796d3a7b1c5d9f8703460cd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15877,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001ae33d484e2f076adf88ae8515500dcda78a35140000000000000000000000001ae33d484e2f076adf88ae8515500dcda78a3514000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15878,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000038592eef244ea6699b2d05e30235c9483b775efe00000000000000000000000038592eef244ea6699b2d05e30235c9483b775efe000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15879,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000787bb66c3f729bf35e777dfa2078511879ed27f4000000000000000000000000787bb66c3f729bf35e777dfa2078511879ed27f4000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15880,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008338190e4886d154b5fb3da346c541899b4d401c0000000000000000000000008338190e4886d154b5fb3da346c541899b4d401c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15881,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d7fe0171db5e7faeb4413122322b2ecae7430013000000000000000000000000d7fe0171db5e7faeb4413122322b2ecae7430013000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15882,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003998f7679d637f55b83d14eaf34d2e3969e835240000000000000000000000003998f7679d637f55b83d14eaf34d2e3969e83524000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15883,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d8eec416ff747c2b0adfd93763c8dfc4b12ef8aa000000000000000000000000d8eec416ff747c2b0adfd93763c8dfc4b12ef8aa000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15884,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000159da56108df786465591fdd7d9a702e20d60040000000000000000000000000159da56108df786465591fdd7d9a702e20d60040000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15885,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c24be493aee47664fe9814e1dcefbf5f01e661f0000000000000000000000000c24be493aee47664fe9814e1dcefbf5f01e661f000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15886,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003bef62261ac99af57d487981356a52085acee01c0000000000000000000000003bef62261ac99af57d487981356a52085acee01c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15887,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000534b386f0cdf96cce3ecdb64cf756dcc0a8ae3de000000000000000000000000534b386f0cdf96cce3ecdb64cf756dcc0a8ae3de000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15888,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009dda4fddf4ff734906fb8d5c62f0e8d25bacf6bc0000000000000000000000009dda4fddf4ff734906fb8d5c62f0e8d25bacf6bc000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15889,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000021edb0df93524cbe1583e301966ba2a6242e899000000000000000000000000021edb0df93524cbe1583e301966ba2a6242e899000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15890,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f20463f65aa8bc812dc646cea23a9a836aa776c0000000000000000000000008f20463f65aa8bc812dc646cea23a9a836aa776c000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15891,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007dc3237c4493a36f9161b15c6a3b9f9f9508029d0000000000000000000000007dc3237c4493a36f9161b15c6a3b9f9f9508029d000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15892,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008fa9bb98ff760943a0cd142db51bb0d3bbcf78870000000000000000000000008fa9bb98ff760943a0cd142db51bb0d3bbcf7887000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15893,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000052b376dcde73a992a86b1b93e93f71d2e3d06e9a00000000000000000000000052b376dcde73a992a86b1b93e93f71d2e3d06e9a000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15894,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da84d6eeb8247262bcbd5512fd9ce457209a75cd000000000000000000000000da84d6eeb8247262bcbd5512fd9ce457209a75cd000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15895,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000438328b257d6c4c597dccdcb21697fcc638ac797000000000000000000000000438328b257d6c4c597dccdcb21697fcc638ac797000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15896,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d9ed82fd90560924d9f2f0ac0540ba9111fefe50000000000000000000000000d9ed82fd90560924d9f2f0ac0540ba9111fefe50000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15897,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f42bcf8fc4ba23eb5fd2a0d4c34522408df27dfe000000000000000000000000f42bcf8fc4ba23eb5fd2a0d4c34522408df27dfe000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15898,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ca1634f79f523a5a2b20da5d8b60ff8c5d9bf7f0000000000000000000000005ca1634f79f523a5a2b20da5d8b60ff8c5d9bf7f000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15899,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000755a2ae169bc0af03f2184df040793d770592ce9000000000000000000000000755a2ae169bc0af03f2184df040793d770592ce900000000000000000000000000000000000000000000000000000000000f695000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15902,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009a333f0f29cab0fdd9c53bce5394e4171bc314c30000000000000000000000009a333f0f29cab0fdd9c53bce5394e4171bc314c300000000000000000000000000000000000000000000000000588e3b09c2b2d300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15904,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005b77249d67d9a40cc6a192cd9167e9e7ee8458bb0000000000000000000000005b77249d67d9a40cc6a192cd9167e9e7ee8458bb00000000000000000000000000000000000000000000000000f34fbe4590a6eb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15906,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d321da0925318aa4b5d81e01c90e397f9461ea5d000000000000000000000000d321da0925318aa4b5d81e01c90e397f9461ea5d0000000000000000000000000000000000000000000000000082c5aa14df9cac00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15909,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000000066ac5489afafa35b83819c8999b0c610958de00000000000000000000000000066ac5489afafa35b83819c8999b0c610958de000000000000000000000000000000000000000000000000012b8612256e390000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15912,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e142e84c1b6edd4858a81999352d8af9a767521b000000000000000000000000e142e84c1b6edd4858a81999352d8af9a767521b000000000000000000000000000000000000000000000000000ef035c0786dc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15913,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000ed5ac934bdbe04ea6d7fca1a9bacceb2d23ff1f0000000000000000000000000ed5ac934bdbe04ea6d7fca1a9bacceb2d23ff1f00000000000000000000000000000000000000000000000006e4de8120cdd84f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15914,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055d891fa80809d30d650875d00b903c19e090aa000000000000000000000000055d891fa80809d30d650875d00b903c19e090aa0000000000000000000000000000000000000000000000000001e6e9fc4cdd98000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15916,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005225d258185f2c5dbcdc5ca0eb2bd251941a32fc0000000000000000000000005225d258185f2c5dbcdc5ca0eb2bd251941a32fc0000000000000000000000000000000000000000000000000032184b66b6d73d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15917,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000001acb8d661018ac209fab4c099cabffb37d73b74e0000000000000000000000001acb8d661018ac209fab4c099cabffb37d73b74e00000000000000000000000000000000000000000000000000000000000f695000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15918,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d76d58e63a0c91b8914268902ec3dcd2d7101a32000000000000000000000000d76d58e63a0c91b8914268902ec3dcd2d7101a32000000000000000000000000000000000000000000000000005b7706e42d0b0200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15921,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de2e6020bcba5241ef81a588201713617759d4d1000000000000000000000000de2e6020bcba5241ef81a588201713617759d4d10000000000000000000000000000000000000000000000000052423101ba288e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15923,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000436e4cf5f7e9f10195feec6a427f4821e844941d000000000000000000000000436e4cf5f7e9f10195feec6a427f4821e844941d00000000000000000000000000000000000000000000000000000000000f906000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15924,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000041cc4a3fe2227953da7eadecd77e366d2cda886600000000000000000000000041cc4a3fe2227953da7eadecd77e366d2cda88660000000000000000000000000000000000000000000000000000aea9bcc9120000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15925,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000139dde62bccc5bc1bf1eea7c74b91f44c58f71e0000000000000000000000000139dde62bccc5bc1bf1eea7c74b91f44c58f71e00000000000000000000000000000000000000000000000003b1a228ac46272b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xc78c3d6a724909c10a96f5dc414b1a7b3638276d899b7c67319d7ba008ad66cf,2022-05-21 11:35:00.000 UTC,0,true -15926,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000002c2b24aa09c427ef9b61a83977832f0c7cb651b90000000000000000000000002c2b24aa09c427ef9b61a83977832f0c7cb651b900000000000000000000000000000000000000000000000000000000000fb77000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15927,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000058c58d02323af6659e8d94fe3feb14385503a8f900000000000000000000000058c58d02323af6659e8d94fe3feb14385503a8f90000000000000000000000000000000000000000000000000069666e7b6c0e8a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15928,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000a55e48aab1d2eef88b6ad40c0663654c690c7750000000000000000000000000a55e48aab1d2eef88b6ad40c0663654c690c775000000000000000000000000000000000000000000000000000000000000fb77000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15929,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e673ba53ae04d4d56c13621c60307cf3140fbb20000000000000000000000003e673ba53ae04d4d56c13621c60307cf3140fbb20000000000000000000000000000000000000000000000000159cbb6584cde4e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15930,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e3faef6489ed6eb32844ee25514fe11a33f831c0000000000000000000000006e3faef6489ed6eb32844ee25514fe11a33f831c00000000000000000000000000000000000000000000000003af28f55dc0e27600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x50e0d358ea9f1426623fdffdcaa5d0d8e56a08bf90c6c1face5b1a2f510c5ee1,2022-05-21 11:41:16.000 UTC,0,true -15931,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003d1e52920476844c1d4f5b59d2796c535d41d75a0000000000000000000000003d1e52920476844c1d4f5b59d2796c535d41d75a00000000000000000000000000000000000000000000000001c390b7f5f0a89400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe2cb4618fe21af99ae30176093188cecb624e4ac5ecbde8561c5fffb65a1fda0,2022-02-25 11:31:20.000 UTC,0,true -15932,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000a06c9cf8608b43c987ccc3a782bfb3ea4d30ce6a000000000000000000000000a06c9cf8608b43c987ccc3a782bfb3ea4d30ce6a000000000000000000000000000000000000000000000020827c8928d04dd03900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x1cebb49b08faf8b6e1c1e134fb43277d7db956d6d92d517e6412b6cb6c1a0a8d,2021-12-15 07:46:14.000 UTC,0,true -15934,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f1ca045e8b77eb2c62b9c0e60708ce6fe54d4a570000000000000000000000000000000000000000000000005d0b7933c847594b,,,1,true -15935,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fd95878137bba373c2951652fe189190383247d6000000000000000000000000fd95878137bba373c2951652fe189190383247d60000000000000000000000000000000000000000000000000033706af1963b6700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15936,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ec1f704da3a038bc34371e672ba3ce3c632612fd000000000000000000000000ec1f704da3a038bc34371e672ba3ce3c632612fd00000000000000000000000000000000000000000000000003b96dc2c343076d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xdf63413ff328eb15df265d29ba6e39d7b2f3c14cd8c620bf4e4615d519aa9119,2022-05-21 11:44:56.000 UTC,0,true -15938,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000004164e19bf327a773b146cde403755660ad4ac55d000000000000000000000000000000000000000000000000196c0a0c57500f05,,,1,true -15939,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007cfc810c14b69559f88b1ba82469a78311213fb50000000000000000000000007cfc810c14b69559f88b1ba82469a78311213fb500000000000000000000000000000000000000000000000000cf75edf5b21a4800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xb518ca78f0f98553e1b033ac7111a3eb9ebe7d49e1b7ae99d4cc05c779e2e8d4,2022-03-19 06:10:45.000 UTC,0,true -15941,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000087cb43594556ff576841b5db05641c895d87545e00000000000000000000000087cb43594556ff576841b5db05641c895d87545e000000000000000000000000000000000000000000000000002781820fbd827000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15943,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae8e2b4abb13de393515ef5abad7e35a2b11ba6d000000000000000000000000ae8e2b4abb13de393515ef5abad7e35a2b11ba6d000000000000000000000000000000000000000000000000013fbe85edc9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x0ac02717900528a7cb4863ad38f268437aa0b8b318c48fcec696fba95a9d1bd7,2022-05-25 06:42:26.000 UTC,0,true -15953,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e5caa02cd1d0ae5d670625d36b5a50d3e226a260000000000000000000000004e5caa02cd1d0ae5d670625d36b5a50d3e226a260000000000000000000000000000000000000000000000000254bd05bdefe0eb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15957,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000171c1cf42c8e11589381f5e4846ffe4e2c7f6d95000000000000000000000000000000000000000000000000378500fe00f039e5,0x341c156f425e1e839ddafa962d42fc8f8b71e92f264528dfeb3f894df7a0cd11,2022-03-05 10:02:12.000 UTC,0,true -15960,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000065fc8c391d7d258d01963825f619e725ac2a335f00000000000000000000000065fc8c391d7d258d01963825f619e725ac2a335f00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15963,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000000f6dada0db6430d58c16207a9ba33015cc72635a0000000000000000000000000000000000000000000000027e60d44813f80000,,,1,true -15965,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a76d60c6b02f070b9fd631976e8d253b39cb1f56000000000000000000000000a76d60c6b02f070b9fd631976e8d253b39cb1f56000000000000000000000000000000000000000000000000008c065d97869e1900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15968,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a8e7d3078ac3020f6a8e597a165f161424c041fe000000000000000000000000a8e7d3078ac3020f6a8e597a165f161424c041fe0000000000000000000000000000000000000000000000000062a06d9f12eb3600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15969,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004fdd8fc4d2b5a3ef49af517ef747d9f1c67108910000000000000000000000004fdd8fc4d2b5a3ef49af517ef747d9f1c6710891000000000000000000000000000000000000000000000000036f2ba6cad09d1f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5516482a0bd4f4cd5870d9dc23681aa3a379dad92044d2c0601a0e98e11be69a,2022-05-08 20:39:21.000 UTC,0,true -15971,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001098071bad894f3cce4dabc93cff9da3f6464c5e0000000000000000000000001098071bad894f3cce4dabc93cff9da3f6464c5e000000000000000000000000000000000000000000000000002ffccb297ee8d900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15972,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000c948402983ed80bc79fe5e8c240779582d68d08a000000000000000000000000c948402983ed80bc79fe5e8c240779582d68d08a0000000000000000000000000000000000000000000000019feb44e0c8d2819700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15973,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000ff6bb7a7688f2a8b548d13212c65ec50ea918b4d000000000000000000000000ff6bb7a7688f2a8b548d13212c65ec50ea918b4d0000000000000000000000000000000000000000000000000000000000e737e300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15974,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a563af28d54d8f2a81c33d5a3e4f8a76ceb1fdc9000000000000000000000000a563af28d54d8f2a81c33d5a3e4f8a76ceb1fdc90000000000000000000000000000000000000000000000000008e1bc9bf0400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15975,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000952ecc0080ed9a0cbd5839a3cc6758b85c3a8350000000000000000000000000952ecc0080ed9a0cbd5839a3cc6758b85c3a835000000000000000000000000000000000000000000000000027536093001bf3c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15976,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000c8e4b7b34befdc23007f13925a5c10e1b1c4729d0000000000000000000000000000000000000000000000002f2f39fc6c540000,,,1,true -15977,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc9c451d7d58422c3734508c038bf9e608c214bf000000000000000000000000fc9c451d7d58422c3734508c038bf9e608c214bf0000000000000000000000000000000000000000000000000035de8800dbfb4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15978,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000002f3d886584cc4f9089c579b4877824975f8f217d0000000000000000000000002f3d886584cc4f9089c579b4877824975f8f217d000000000000000000000000000000000000000000000000000000000f735fc100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15979,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000083d9948019e680f3514866e5a5c16f2eaae140a800000000000000000000000083d9948019e680f3514866e5a5c16f2eaae140a800000000000000000000000000000000000000000000000005aa592c6ff8423800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15981,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000004e6fdce9b676c44b2c5e8800327e923696ddc62900000000000000000000000000000000000000000000001978b1bf4a3dfda8b2,0x28abf05c2c1b5e5bd886dcbbae773f6f105aea83717366dccc5094ca4497e813,2021-11-22 15:20:13.000 UTC,0,true -15982,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000909c9406808f89b88b277d099c11d36283eb66f9000000000000000000000000909c9406808f89b88b277d099c11d36283eb66f900000000000000000000000000000000000000000000000000350cf6d42889f400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15985,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000001627902c8aa6572894ce678d0703ead3dbf74d5e0000000000000000000000001627902c8aa6572894ce678d0703ead3dbf74d5e00000000000000000000000000000000000000000000000000000000180946bc00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x3b51aec0829c0649dbdc4f2a5a9496db858eca943ab1d5c6bdb6ff4cfa51559e,2022-03-25 08:17:06.000 UTC,0,true -15987,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c61221b53a52fb48a6d5515681169da0612870d5000000000000000000000000c61221b53a52fb48a6d5515681169da0612870d50000000000000000000000000000000000000000000000000d2df35200f7244300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x42a1eced86b1c51ff542ebcd8238ce67e0f45b9361d8868ad2ea9aad71dedc70,2022-02-13 07:16:05.000 UTC,0,true -15990,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000024f99023f6741b27d3bf6189c7f3ae2fa45eed8f00000000000000000000000024f99023f6741b27d3bf6189c7f3ae2fa45eed8f0000000000000000000000000000000000000000000000000d26ee616dc708b700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x03c801b40061d1b451b75488a214616f823e9d30257ad52794a9db1f3ab4ff77,2021-12-10 08:02:27.000 UTC,0,true -15991,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009215f9bb7c38a3013b108099fd5d4494731ce02b0000000000000000000000009215f9bb7c38a3013b108099fd5d4494731ce02b000000000000000000000000000000000000000000000000008493e920868ec800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15992,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a62fdf90dacc91d98de3f72ab4f1f5bef64e48ba000000000000000000000000a62fdf90dacc91d98de3f72ab4f1f5bef64e48ba0000000000000000000000000000000000000000000000000153ec22501c7d8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15993,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000082fbf1a9789613c266420d2b5110c9747ad52fcd00000000000000000000000082fbf1a9789613c266420d2b5110c9747ad52fcd0000000000000000000000000000000000000000000000000000000003d675d300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -15994,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ae8c7bab2c4861ba5a451dfd4b4a83c06c2a7c80000000000000000000000006ae8c7bab2c4861ba5a451dfd4b4a83c06c2a7c8000000000000000000000000000000000000000000000000003b35a381d3a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xc96c00e608ea6d5c2a35b623e8a87c31c7c7ed66e2c74a35e6061651b4b70417,2022-03-13 15:28:23.000 UTC,0,true -15995,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008e841ba5b89142c196af4695ef200c56afd0d0300000000000000000000000008e841ba5b89142c196af4695ef200c56afd0d0300000000000000000000000000000000000000000000000000c7acf39dc6c360000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2171dc8ad3964ffeac86de8c4f5805bbebcb82141cd2ec1ae560633d91bd0d21,2021-12-01 18:08:34.000 UTC,0,true -15996,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000407410d84e15f79642272edaeb437ac65d7298e6000000000000000000000000407410d84e15f79642272edaeb437ac65d7298e6000000000000000000000000000000000000000000000000001370737b15f91700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15997,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a221b6a586e11268f2cce4123481e01de48c2b4b000000000000000000000000a221b6a586e11268f2cce4123481e01de48c2b4b000000000000000000000000000000000000000000000000008b18751c8ca20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15998,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000006f4250cb856f928c62743fe6925740e90e6d5c000000000000000000000000006f4250cb856f928c62743fe6925740e90e6d5c00000000000000000000000000000000000000000000000005d38fd67792a5b600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -15999,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000008a18a9dcbe1abf8cedd4781c10fb90fc5c28e4a50000000000000000000000000000000000000000000000018696417a3da0ec8b,,,1,true -16001,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac8ad678b3ab523056c4c82f94d466ee778e373b000000000000000000000000ac8ad678b3ab523056c4c82f94d466ee778e373b00000000000000000000000000000000000000000000000000a941ced1366d2300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16003,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000043e4f031f795dcafd662ce097f53b5f908f39dc8000000000000000000000000000000000000000000000001bedafd7d055a9e15,0xca895f5cc0cb74950e32b7c08d55e7ecd6cc83eb7994f9f1961bcf69dae66bfd,2021-12-13 13:07:25.000 UTC,0,true -16006,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000024749aedf18208ab74a8110e07e820286bb5acf800000000000000000000000024749aedf18208ab74a8110e07e820286bb5acf8000000000000000000000000000000000000000000000000006478fe5b8808fb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7945f9a872671d217fe89785593d745eaa09e432e9b938aa1400e353f775a8a8,2022-05-28 03:24:12.000 UTC,0,true -16007,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000063a6b026eff8f1abdab941cc0d18c5bb408e53e400000000000000000000000063a6b026eff8f1abdab941cc0d18c5bb408e53e400000000000000000000000000000000000000000000000000012bf0fe947c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16008,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000073b968d104cb550f4e28543a52ff7357b20c746800000000000000000000000073b968d104cb550f4e28543a52ff7357b20c746800000000000000000000000000000000000000000000000000070aca1038c8c200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16010,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000051c1e9bed89903e924611fa3c557b2827981848f000000000000000000000000000000000000000000000004d92c64a9dc61c669,0x63271b09fa2bd266ccd676d8a7f1b4ab16ac162db6d746de2140b694a001b358,2021-11-29 06:04:58.000 UTC,0,true -16011,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000934c6cbc9e0266dd266e35fa16540a2422fff889000000000000000000000000934c6cbc9e0266dd266e35fa16540a2422fff88900000000000000000000000000000000000000000000000001aa535d3d0c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16013,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000880807ca35b45f007854e0e834a605e397354f42000000000000000000000000880807ca35b45f007854e0e834a605e397354f42000000000000000000000000000000000000000000000000037465ffeb24810700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x199c1bc018f391d5ad61d0c35749fae330519a0917e26ea987f89d8072009581,2022-06-28 06:55:24.000 UTC,0,true -16015,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000729b81511ebba7c95f6f43a5e3b778f40772f622000000000000000000000000729b81511ebba7c95f6f43a5e3b778f40772f622000000000000000000000000000000000000000000000000015fcf799b7b940000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16017,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000fec958a68f2f46d67bf708f14badef9ab53c4e9200000000000000000000000000000000000000000000000ae401ad8ec9e75bd6,,,1,true -16018,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000d7504409e859e84b126009c1a8a787b1475c8731000000000000000000000000d7504409e859e84b126009c1a8a787b1475c873100000000000000000000000000000000000000000000003635c9adc5dea0000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xb0b919fee3625ba0475d8f38ef9d16a1847abe10dbc97b504cf24849882ff3bf,2021-12-05 13:47:50.000 UTC,0,true -16021,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000f4d6635a15f79d00700db4d8a40cc7baa655563d000000000000000000000000f4d6635a15f79d00700db4d8a40cc7baa655563d00000000000000000000000000000000000000000000000000000000b2d05e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x9a334505fe52575058c1fd5af523035b35e4593c65121ea01267b26af91774e3,2022-02-09 09:13:29.000 UTC,0,true -16022,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e538c32d73cc13610cb1fdc7191abc47be08ddd0000000000000000000000004e538c32d73cc13610cb1fdc7191abc47be08ddd000000000000000000000000000000000000000000000000008bf2e12306e90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16023,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000784b90d1b653b12deb2352cf9fd18e7c780a9f8c000000000000000000000000784b90d1b653b12deb2352cf9fd18e7c780a9f8c0000000000000000000000000000000000000000000000000069212e2133ac1700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16024,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f1ca045e8b77eb2c62b9c0e60708ce6fe54d4a570000000000000000000000000000000000000000000000000a021fcf4e4701fe,,,1,true -16025,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000002646fd1cf53139c336db689ff104c6ce3ba9b18b0000000000000000000000002646fd1cf53139c336db689ff104c6ce3ba9b18b0000000000000000000000000000000000000000000000000000000008f7aa0800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16026,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a345d187b9f4b68c0b3eedec152e8a1dd808d089000000000000000000000000a345d187b9f4b68c0b3eedec152e8a1dd808d0890000000000000000000000000000000000000000000000000057113f2731960000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16027,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e87bfff3c69f58c8bf30f1b29bf11e60605780e1000000000000000000000000e87bfff3c69f58c8bf30f1b29bf11e60605780e1000000000000000000000000000000000000000000000000015d66b74d6909de00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16028,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004e0515f80b238b785e8faae48cf0fa36b348b5e90000000000000000000000004e0515f80b238b785e8faae48cf0fa36b348b5e9000000000000000000000000000000000000000000000000001acba70d38060000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16030,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d54e90597ec00914fa99c4fd62dda9d1924a2665000000000000000000000000d54e90597ec00914fa99c4fd62dda9d1924a26650000000000000000000000000000000000000000000000000069339071ca280000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16031,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a6d1a769fa8232fcd858a9b4592d7ae2d6169bca000000000000000000000000a6d1a769fa8232fcd858a9b4592d7ae2d6169bca000000000000000000000000000000000000000000000000004b5e03fc7ccf8400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16032,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009437be78cdca83cc83423fe85e734e49bea511e00000000000000000000000009437be78cdca83cc83423fe85e734e49bea511e00000000000000000000000000000000000000000000000000243c2293decf70e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16035,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eaff78bc539dcc9b98e492f4e3bde6506f3ec238000000000000000000000000eaff78bc539dcc9b98e492f4e3bde6506f3ec2380000000000000000000000000000000000000000000000000154ff3827a91c3900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16036,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000a0e4eccf02f9b83ee1f270c735751d602e88ea1e000000000000000000000000a0e4eccf02f9b83ee1f270c735751d602e88ea1e000000000000000000000000000000000000000000000007359bcae42b3a1f0400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16041,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f748833f13f24c8872b4b83e14e63607df9ce8d0000000000000000000000003f748833f13f24c8872b4b83e14e63607df9ce8d000000000000000000000000000000000000000000000000057a3548e05c429700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16042,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000004e0122cad4e35c83302a7fc3a402a215935f36070000000000000000000000004e0122cad4e35c83302a7fc3a402a215935f360700000000000000000000000000000000000000000000000000000000000fde8000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16043,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000054656203833a6c6646c66acb3d246d96eb6bc34c00000000000000000000000054656203833a6c6646c66acb3d246d96eb6bc34c00000000000000000000000000000000000000000000000000000000000fc32800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16044,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bbf8d46a69024593fcc0e692f1c0a2f38144ea84000000000000000000000000bbf8d46a69024593fcc0e692f1c0a2f38144ea8400000000000000000000000000000000000000000000000006ea53d65c36cfe300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16045,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000ae7bc2ecb4d293105cb0b21500b710eeb7ca83210000000000000000000000000000000000000000000000020abdd9bee328ebaf,,,1,true -16046,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000dbb94c392bd0c21c2e4a1e7005012ee9907a06a0000000000000000000000000000000000000000000000002e95aeb8850ef4265,,,1,true -16047,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000046488b2cab4ba1406f6fa1d5827c8d16c1f5fdea00000000000000000000000046488b2cab4ba1406f6fa1d5827c8d16c1f5fdea000000000000000000000000000000000000000000000000001d8313405c0a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16048,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049f63b254ea9043e57678c13e06aef257fab45c100000000000000000000000049f63b254ea9043e57678c13e06aef257fab45c1000000000000000000000000000000000000000000000000018431ef9971044000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x6c062bcb5317ff645cee0885db3d30bfcea05a02ffe1628db9fc983a061130be,2021-12-20 17:00:08.000 UTC,0,true -16049,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004fe15e3b4e9f695d5712583c591ae52f1af616a10000000000000000000000004fe15e3b4e9f695d5712583c591ae52f1af616a1000000000000000000000000000000000000000000000000016fee38a5d9468900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16050,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000010fd37e98c79529ca2249ca6086971c6e92e549f00000000000000000000000010fd37e98c79529ca2249ca6086971c6e92e549f00000000000000000000000000000000000000000000000000000000000fb77000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16051,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000004e3b5a6c60c3f39d9ee4b8151348fd56aaceda080000000000000000000000004e3b5a6c60c3f39d9ee4b8151348fd56aaceda0800000000000000000000000000000000000000000000000000000000000f906000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16053,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005da70d2a1858a883b42d560edeb5a4ff4e7829fe0000000000000000000000005da70d2a1858a883b42d560edeb5a4ff4e7829fe0000000000000000000000000000000000000000000000000031cf2d28a336e100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16054,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f830726d6750b458bd10326a32bf53e7ffebda74000000000000000000000000f830726d6750b458bd10326a32bf53e7ffebda74000000000000000000000000000000000000000000000000096e2973de7221ad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16055,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000065935eeca6a9a5c9d5f3df0bd8341960b2516a5e00000000000000000000000065935eeca6a9a5c9d5f3df0bd8341960b2516a5e000000000000000000000000000000000000000000000000000000000a2b5cbc00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16056,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000cc910f68502b40d2bcdfad952f34db8778426e5e000000000000000000000000cc910f68502b40d2bcdfad952f34db8778426e5e00000000000000000000000000000000000000000000000000000000000fb77000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16058,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000ccf27f3dae039a4d2981fe0deb0621346ac9c58c0000000000000000000000000000000000000000000000003edaed08765ae042,,,1,true -16059,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e92a21b89b64de21f920acc875cd0b1e782c33c0000000000000000000000002e92a21b89b64de21f920acc875cd0b1e782c33c00000000000000000000000000000000000000000000000000ae153d89fe800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd392e158fee8aa4ec5de197aa32835f89ec4f8fd5e90ecf0f6d85aef09f647ff,2022-04-17 05:12:53.000 UTC,0,true -16060,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000007bfc1a618783b32f57770d85c682fb04120858e70000000000000000000000007bfc1a618783b32f57770d85c682fb04120858e700000000000000000000000000000000000000000000000000000000000f906000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16061,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dffa4c9d55d7b1a2dc8197718c48b593420b9399000000000000000000000000dffa4c9d55d7b1a2dc8197718c48b593420b939900000000000000000000000000000000000000000000000006de8f1fce81ec6700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16062,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000ffe9465c0458fdf8b8ad034aca2040324c3f9f02000000000000000000000000ffe9465c0458fdf8b8ad034aca2040324c3f9f020000000000000000000000000000000000000000000000000000000000102ca000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16063,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045c155d926df6c2e66b0a3db407587d192affff600000000000000000000000045c155d926df6c2e66b0a3db407587d192affff60000000000000000000000000000000000000000000000000010c3b085fd494000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16065,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b49883b3fe2aa3cdfaf9def7f3dba2816a681e16000000000000000000000000b49883b3fe2aa3cdfaf9def7f3dba2816a681e160000000000000000000000000000000000000000000000000032fdb6d4d2e90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16067,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000009a36d5b3a4347a221efe23851ce7cb9745fea6ff0000000000000000000000009a36d5b3a4347a221efe23851ce7cb9745fea6ff0000000000000000000000000000000000000000000000000000000000102ca000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16070,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f516ac25592ab08d6df0e6fdc934f14dad504369000000000000000000000000f516ac25592ab08d6df0e6fdc934f14dad5043690000000000000000000000000000000000000000000000000114809246492b3600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xad4ede185325b2cf2420913e454233d44342f37c74d7b62954bd1a52af177f33,2022-05-21 13:54:23.000 UTC,0,true -16071,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008894993046fa4c42816b3021de0bb1dabd5b0cd80000000000000000000000008894993046fa4c42816b3021de0bb1dabd5b0cd8000000000000000000000000000000000000000000000000014f796df858187200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16072,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000000ba7bdbdbd934320b8401646803ad939a4a9f3c00000000000000000000000000ba7bdbdbd934320b8401646803ad939a4a9f3c000000000000000000000000000000000000000000000000000000000010a1d000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16073,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049ec1574f4e5f03d830bec6a9a4441e10dfed84d00000000000000000000000049ec1574f4e5f03d830bec6a9a4441e10dfed84d0000000000000000000000000000000000000000000000000214e8348c4f000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x28eb1c15c650c6f9d26712fe2ffcf257b3f06138ff867421de20fb20b1c8a4d1,2021-12-21 10:49:55.000 UTC,0,true -16074,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000008325bcbea40dbc59e4e9fe0e9ce41ca781db08880000000000000000000000008325bcbea40dbc59e4e9fe0e9ce41ca781db08880000000000000000000000000000000000000000000000000000000000102ca000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16075,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2b41b28fe1d007bd1008391e517c4c5d27c815c000000000000000000000000a2b41b28fe1d007bd1008391e517c4c5d27c815c00000000000000000000000000000000000000000000000001380f858730dcdd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1be59af70e7ae3cb489c112a2b2c63b4590cd220047dab2ac1dfcabae98b7a61,2021-11-27 10:54:19.000 UTC,0,true -16076,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a083d45dc7b97eaf4532f19b112662bd3adf03a4000000000000000000000000a083d45dc7b97eaf4532f19b112662bd3adf03a40000000000000000000000000000000000000000000000000161714d2b50d60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9c5a8c3df69e7a196933d00fb2154f7ec979812c1394c4826c1bcd2b4871db83,2022-02-17 09:39:59.000 UTC,0,true -16077,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf09dae602adae0c48de9ef743060696132f6a92000000000000000000000000bf09dae602adae0c48de9ef743060696132f6a92000000000000000000000000000000000000000000000000007944dbe91eb54000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16078,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000cb5a1dc8307fc3f9c3fce8765232d42458f3aeb2000000000000000000000000cb5a1dc8307fc3f9c3fce8765232d42458f3aeb20000000000000000000000000000000000000000000000000000000000102ca000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16079,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000392bd4b4d4dfe5a3ab4370e348f90d1d508285bc000000000000000000000000392bd4b4d4dfe5a3ab4370e348f90d1d508285bc00000000000000000000000000000000000000000000000005c70b854a1c884000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16080,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008ce6c4777822be44ef0d749ec77028b215b475ba0000000000000000000000008ce6c4777822be44ef0d749ec77028b215b475ba0000000000000000000000000000000000000000000000000079eb3dd4840d7400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xa830f8fc1a0db6a671e660593cd9fbd7417a16e7458aade34d3d27f7c83b5bb6,2022-05-21 20:23:11.000 UTC,0,true -16081,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000ef89f0bcfe2e3f6440ec2bbf0fe93646a9f6780d000000000000000000000000ef89f0bcfe2e3f6440ec2bbf0fe93646a9f6780d00000000000000000000000000000000000000000000000000000000000fb77000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16082,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000035856a6a5f866ca903c5d33773a96308c5b696bc00000000000000000000000035856a6a5f866ca903c5d33773a96308c5b696bc000000000000000000000000000000000000000000000000000000002e224d8000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16083,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a5224abfce9d3a1e6c25fedd61f36c44e1e684c8000000000000000000000000a5224abfce9d3a1e6c25fedd61f36c44e1e684c800000000000000000000000000000000000000000000000000dd55851981c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x61123618741d424d2d6081b7e095df40c5043e5951422c174c4641888f9ee90c,2021-12-10 07:38:36.000 UTC,0,true -16085,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000001e3c45c9920310bc878e843db0ddaba304fa91150000000000000000000000001e3c45c9920310bc878e843db0ddaba304fa911500000000000000000000000000000000000000000000000000000000000f6d9c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16086,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b260669eb9471f8e1cac9f2897ff70e806e21af2000000000000000000000000b260669eb9471f8e1cac9f2897ff70e806e21af2000000000000000000000000000000000000000000000000004daf1126755d5d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16087,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000ab0619d952bf9ac0952c70ada9e62a227c698264000000000000000000000000ab0619d952bf9ac0952c70ada9e62a227c69826400000000000000000000000000000000000000000000000000000000017fbaf200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16088,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be862b4d355ecd39bbf23d7f939dc35ab86c4dbd000000000000000000000000be862b4d355ecd39bbf23d7f939dc35ab86c4dbd000000000000000000000000000000000000000000000000069df95c1315dc8300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x45d26aa01728be57493366da858e216f2ddc5b3ebc32362eb5444651eb82fd3a,2022-05-22 15:42:25.000 UTC,0,true -16093,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a6546c8d9306843350009d09e38705465673428a000000000000000000000000a6546c8d9306843350009d09e38705465673428a00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16094,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004cae1cf90ec13e60a435e8fa638316ee337c472c0000000000000000000000004cae1cf90ec13e60a435e8fa638316ee337c472c000000000000000000000000000000000000000000000000000221b262dd800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16095,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004cae1cf90ec13e60a435e8fa638316ee337c472c0000000000000000000000004cae1cf90ec13e60a435e8fa638316ee337c472c00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16097,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000030a515c27534a346be6eb5d1d5bb3d1e50db060a00000000000000000000000030a515c27534a346be6eb5d1d5bb3d1e50db060a0000000000000000000000000000000000000000000000000061a9cf9333ccac00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16098,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e7846949d13003dbaa2f98d555426a2a3dca5e6f000000000000000000000000e7846949d13003dbaa2f98d555426a2a3dca5e6f000000000000000000000000000000000000000000000000013f1a797dc9c9de00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16099,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f31a41419e2aa2ab3cccd915aaf3585096ed7034000000000000000000000000f31a41419e2aa2ab3cccd915aaf3585096ed7034000000000000000000000000000000000000000000000000005ed4667876741b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9ecd0952704f74692ee4b91849b5cdb552c31389e480c3a927f743added5ab98,2022-05-21 17:25:07.000 UTC,0,true -16101,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004f30bb3d4198e6a839576f19a650aef2855e07150000000000000000000000004f30bb3d4198e6a839576f19a650aef2855e0715000000000000000000000000000000000000000000000000000aec234d240d9200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16102,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005af34a3fffc67e7778393ad01f4204354ff889d10000000000000000000000005af34a3fffc67e7778393ad01f4204354ff889d100000000000000000000000000000000000000000000000000ee7994cb49ad6800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16103,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000030a98bc74cc6a10a36332802fdad70fee516054100000000000000000000000030a98bc74cc6a10a36332802fdad70fee51605410000000000000000000000000000000000000000000000000487aaf06bc87ca300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x4f49f1aca3846ff1cdf682caf641baea09349753acfa7783e794cf3ffc4d02b5,2021-11-28 08:52:38.000 UTC,0,true -16107,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5d900cb9631b1195aa53f2a378f4facbc8ec663000000000000000000000000e5d900cb9631b1195aa53f2a378f4facbc8ec663000000000000000000000000000000000000000000000000167b656ab822000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xed7ad251daac4062e107fbd7281fa671df5e19283fee7dff5b6b929a750417a2,2021-11-25 12:48:39.000 UTC,0,true -16111,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000798aafcaf1b9ee461d7d30f034dcab006dc495100000000000000000000000000000000000000000000000743bf75cfd3068a1fc,0xc3b89778850d4353c6be02cfce31dcacf04d23bbd69003ee0c6111330ad8db5f,2021-11-27 16:14:03.000 UTC,0,true -16113,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000002bed6fb507948e637179c175fe427f3205e345850000000000000000000000002bed6fb507948e637179c175fe427f3205e345850000000000000000000000000000000000000000000000000000000008a58a9e00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16115,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3058ab3e0fbd58853b7e14eab9041ee849e7a61000000000000000000000000f3058ab3e0fbd58853b7e14eab9041ee849e7a6100000000000000000000000000000000000000000000000002ab76ad0fed1f0d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16120,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aabd00507b5df6f20819bc933f74d053ffa44ecd000000000000000000000000aabd00507b5df6f20819bc933f74d053ffa44ecd00000000000000000000000000000000000000000000000000aebc35e06a370000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16122,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000776678223fd719582183afa1865b041a18e83ee6000000000000000000000000776678223fd719582183afa1865b041a18e83ee6000000000000000000000000000000000000000000000000001ee13b0c991a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x657788da747086ae376a9ac3b99ef689d5e7d44db7a7c0597bf9850867394eb1,2022-08-28 15:27:53.000 UTC,0,true -16123,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000d1516425127856704329b33a39240f1e5405bcad000000000000000000000000d1516425127856704329b33a39240f1e5405bcad000000000000000000000000000000000000000000000a7adbb7f6be0208000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xde97beb72d923c5a9c58196bfef2ab55ab5f20b278f74c711627fa9768023a6b,2021-12-09 12:05:39.000 UTC,0,true -16124,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d1516425127856704329b33a39240f1e5405bcad000000000000000000000000d1516425127856704329b33a39240f1e5405bcad0000000000000000000000000000000000000000000000001cdcbf0409c631b700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xa1ca8fd4dc2a54cdc4f17fc5a1cc87e97a98c3a4c0477d1bc5701c77d641c4b1,2021-12-09 12:04:29.000 UTC,0,true -16127,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000edb183bda0993b01d95eee08ce74158b671fed76000000000000000000000000edb183bda0993b01d95eee08ce74158b671fed7600000000000000000000000000000000000000000000000001573e4987acd81b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16130,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b211a2f3a1d20df7f8c3944e6228467e0abda9f4000000000000000000000000b211a2f3a1d20df7f8c3944e6228467e0abda9f40000000000000000000000000000000000000000000000000016811c7fded0d100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16131,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000070513a081114ed019361d7d6f0e575206da93810000000000000000000000000000000000000000000000028edd5b89ee18edb9d,0x42f2766d35ee0e0ac3199d3cf968998d64d503eada29cfea7871b0beaa69fef8,2021-11-24 14:49:16.000 UTC,0,true -16133,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000caf268268ca94f53305c20cc92132fd51165c9a0000000000000000000000000caf268268ca94f53305c20cc92132fd51165c9a0000000000000000000000000000000000000000000000000001cc39dc64b3e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16134,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000caf268268ca94f53305c20cc92132fd51165c9a0000000000000000000000000caf268268ca94f53305c20cc92132fd51165c9a0000000000000000000000000000000000000000000000000005a7aff9324fdab00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16135,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006167e0e49bb745c4665a77b53306ff4206fe70ff0000000000000000000000006167e0e49bb745c4665a77b53306ff4206fe70ff000000000000000000000000000000000000000000000000001a6adf86d786c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe178944852c30355bd786a756666f2dd8c64d1f67833ec296565f38352c29d1d,2021-12-15 17:39:10.000 UTC,0,true -16138,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d4d3fae4d0282fd8a558b5f42ba700974cbfd1a0000000000000000000000005d4d3fae4d0282fd8a558b5f42ba700974cbfd1a000000000000000000000000000000000000000000000000008093283475add900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16139,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000bb86cd4020dc5120cbe6d443551e32f85980131d000000000000000000000000bb86cd4020dc5120cbe6d443551e32f85980131d000000000000000000000000000000000000000000000001db74bd5ef5d8719200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16140,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000113cd2467bc19c16b4ce4a070e57666d35828eb3000000000000000000000000113cd2467bc19c16b4ce4a070e57666d35828eb3000000000000000000000000000000000000000000000000001c74672c9f76c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16143,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c512544e8f33fcccfaa1aa3b236da8f4348c14d0000000000000000000000000c512544e8f33fcccfaa1aa3b236da8f4348c14d000000000000000000000000000000000000000000000000005eb6874c1542a200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16144,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000010b7a7e9a5d527a821b574e688c71519bdf8a15700000000000000000000000010b7a7e9a5d527a821b574e688c71519bdf8a15700000000000000000000000000000000000000000000000002bc2b9ce43b9d2300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16145,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000509da798f0af5bfd7a93e55d922c9e6795bc9b51000000000000000000000000509da798f0af5bfd7a93e55d922c9e6795bc9b5100000000000000000000000000000000000000000000000002072c08066ffe0200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16146,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d7554d0183e613e27cb4eda71622e57fb4150bb0000000000000000000000002d7554d0183e613e27cb4eda71622e57fb4150bb0000000000000000000000000000000000000000000000000158db44e201516b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16147,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f23d209054debaaf0d295c1fa0b22c5eca34706a000000000000000000000000f23d209054debaaf0d295c1fa0b22c5eca34706a00000000000000000000000000000000000000000000000000f5f8c6706f3cdd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16148,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049f4b1eac2a0fed5a7e58cef8af576c77495d6bf00000000000000000000000049f4b1eac2a0fed5a7e58cef8af576c77495d6bf00000000000000000000000000000000000000000000000001560a759083e10400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16149,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000154e41602119aba736ff9d23a17e8a2cb51545b1000000000000000000000000154e41602119aba736ff9d23a17e8a2cb51545b1000000000000000000000000000000000000000000000000001b910ceeba278000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16151,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a1dbd6c82ccb233dafb553146e34ebdca59174ca000000000000000000000000a1dbd6c82ccb233dafb553146e34ebdca59174ca000000000000000000000000000000000000000000000000041bd209b3d5bb5300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16152,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a28335f6f1a2fb847821215ae4d32695e040ca60000000000000000000000002a28335f6f1a2fb847821215ae4d32695e040ca6000000000000000000000000000000000000000000000000066c67d86233c15a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x355d14d483bf9cfeb63f39cb386ec0d02b058529d83c864c8dbe3a67966c19b1,2022-01-29 13:07:25.000 UTC,0,true -16153,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f841249c065984ba49c785977b872231c1b44374000000000000000000000000f841249c065984ba49c785977b872231c1b4437400000000000000000000000000000000000000000000000000e983534e74ca9500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16154,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba2c8c57f57593956cfd612f97d9e882c44302f5000000000000000000000000ba2c8c57f57593956cfd612f97d9e882c44302f500000000000000000000000000000000000000000000000000f0807a9bbe232d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16155,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c55cf36f9f16c75e7d4bbd97ddbbcd4e4b0bb959000000000000000000000000c55cf36f9f16c75e7d4bbd97ddbbcd4e4b0bb95900000000000000000000000000000000000000000000000000e8430445faf12c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16156,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d1ef1058a3b75a914c2f15b42a5e4ee6b19edffe000000000000000000000000d1ef1058a3b75a914c2f15b42a5e4ee6b19edffe0000000000000000000000000000000000000000000000000a07b12e2b997cd100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16158,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000dc4e7b7b9ee70846125d89d7440a184d5ca68b170000000000000000000000000000000000000000000000001b59dbf02698c597,,,1,true -16159,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000046c7860fa18ff68e1faf50630546dff7f35d2b2300000000000000000000000046c7860fa18ff68e1faf50630546dff7f35d2b2300000000000000000000000000000000000000000000000006623f9014ae000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16160,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f6890ba19de422639f7155a4a6c2fc7847d90bde000000000000000000000000f6890ba19de422639f7155a4a6c2fc7847d90bde00000000000000000000000000000000000000000000000001cd8c3e2dbea5ac00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16161,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba067d3c09153aa959072da7516f71686f7a49a9000000000000000000000000ba067d3c09153aa959072da7516f71686f7a49a900000000000000000000000000000000000000000000000000679bdbb4a4310000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16162,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000408e1c415a52cc08abab3ad8b08dffe842a6df8c000000000000000000000000408e1c415a52cc08abab3ad8b08dffe842a6df8c00000000000000000000000000000000000000000000000006f05b59d3b2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16163,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc37fee294548c3cc4556757ad74241dc09ab644000000000000000000000000bc37fee294548c3cc4556757ad74241dc09ab64400000000000000000000000000000000000000000000000006f05b59d3b2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16164,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001d1a9f4e2e1730db50e46aa40c54fa41544092610000000000000000000000001d1a9f4e2e1730db50e46aa40c54fa415440926100000000000000000000000000000000000000000000000006f05b59d3b2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16166,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a7d79d08c788860136fce0c3d6e82939b1d03a06000000000000000000000000a7d79d08c788860136fce0c3d6e82939b1d03a0600000000000000000000000000000000000000000000000018cb0ab861e24b6300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16167,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000097b04c20ca1cf1e89249b7b7b7462eb382e943e7000000000000000000000000000000000000000000000003456101d6c525df92,,,1,true -16171,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d16c33117e004fa8ea0dace84b942468e6b69798000000000000000000000000d16c33117e004fa8ea0dace84b942468e6b697980000000000000000000000000000000000000000000000000044f1920eca900000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16175,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000046ba65479c4c550fb602065c0bb15d67472f78d100000000000000000000000046ba65479c4c550fb602065c0bb15d67472f78d1000000000000000000000000000000000000000000000000008c825996ba8c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16176,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000005a4be3634039a27d00f7634aaa5dc687ce4a7a0f0000000000000000000000005a4be3634039a27d00f7634aaa5dc687ce4a7a0f00000000000000000000000000000000000000000000000000000000000f906000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16177,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000ac7005eb5a78dcee54ac369d345e91eafe9c1f7d000000000000000000000000ac7005eb5a78dcee54ac369d345e91eafe9c1f7d0000000000000000000000000000000000000000000000000000000000109a0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16178,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004630483f9edeb8dea6f5339bd8aa6c86fc6046de0000000000000000000000004630483f9edeb8dea6f5339bd8aa6c86fc6046de00000000000000000000000000000000000000000000000000870bb66d33c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x0241acb15920c72b50194b4b74ed76be1296252e5beef672ba17a92888134e31,2022-03-19 08:03:51.000 UTC,0,true -16179,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000daf3a243e5109d67ad7749121751510a8b54094c000000000000000000000000daf3a243e5109d67ad7749121751510a8b54094c000000000000000000000000000000000000000000000000001e7bfebd2be5c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16180,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000001793f656d03108ddbf56b5005a17142dc8fe1c400000000000000000000000001793f656d03108ddbf56b5005a17142dc8fe1c400000000000000000000000000000000000000000000000000000000000102ca000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16183,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f32e2c3394353274573bbcf669afbfcd7402423b000000000000000000000000f32e2c3394353274573bbcf669afbfcd7402423b000000000000000000000000000000000000000000000000046858b5b26e56ea00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16185,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003bfbdf4a113f267c5001d86cfb1a60c2ebbf425e0000000000000000000000003bfbdf4a113f267c5001d86cfb1a60c2ebbf425e000000000000000000000000000000000000000000000000001e3f3cbfa26bc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16186,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000ab232f3e0c775bbe09f6b5df0b0b7a71254f32a5000000000000000000000000ab232f3e0c775bbe09f6b5df0b0b7a71254f32a5000000000000000000000000000000000000000000000000000000000010c8e000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16187,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099f566638eb23d708fba490f4d9798247a402d0f00000000000000000000000099f566638eb23d708fba490f4d9798247a402d0f0000000000000000000000000000000000000000000000002eceba19cfa7359800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd0875f9799e2e44b03736d043f9216f3da56b375caa7dd380691e9828fbc1c62,2021-11-23 07:04:50.000 UTC,0,true -16189,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e47bf5707d521074a09066f77a7586d2f613aae7000000000000000000000000e47bf5707d521074a09066f77a7586d2f613aae7000000000000000000000000000000000000000000000000011b368f0c0c1af600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x0a0c6f5bc32b676c63696d87fd1a51623b8d4fdb35056575950381d8bac9a3d7,2021-12-19 13:28:34.000 UTC,0,true -16191,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6e4600760fe4ad9c6a738569873728ff629c474000000000000000000000000d6e4600760fe4ad9c6a738569873728ff629c474000000000000000000000000000000000000000000000000002714711487800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16192,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000e0e8ba21dadd65341b098b83bc1d1a5c927baa36000000000000000000000000e0e8ba21dadd65341b098b83bc1d1a5c927baa3600000000000000000000000000000000000000000000000000000000000f695000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16194,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005f40324ed97badd9079e67e162c83b1fb9168a120000000000000000000000005f40324ed97badd9079e67e162c83b1fb9168a1200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16195,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b52644ec19cff7e3fd37bd3f6c072724ed066b90000000000000000000000000b52644ec19cff7e3fd37bd3f6c072724ed066b9000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16196,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000041adf6dc0bf8d5d85050a9d88a3c4b9b25ae439b00000000000000000000000041adf6dc0bf8d5d85050a9d88a3c4b9b25ae439b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16197,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000b38575bd4f8d4e65b304c667526c473ff02fb610000000000000000000000000b38575bd4f8d4e65b304c667526c473ff02fb6100000000000000000000000000000000000000000000000001618e6317db0e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16198,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000350a791bfc2c21f9ed5d10980dad2e2638ffa7f6000000000000000000000000714cf7b379e9ccc07a452eea459095a54a60af45000000000000000000000000714cf7b379e9ccc07a452eea459095a54a60af4500000000000000000000000000000000000000000000000185d4175a04c25a1c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x4c5239ae63b7a5311d1af8ceaed7e3e96ea66cf033a81d0c1ea40840f88e0911,2021-11-21 15:27:51.000 UTC,0,true -16199,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000741cfe64d81b0929895237a0a858b4628d7adbc9000000000000000000000000741cfe64d81b0929895237a0a858b4628d7adbc900000000000000000000000000000000000000000000000000000000000fcee000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16200,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e2cb253d7af60c49a3cc906ca3ea38916e1938a0000000000000000000000006e2cb253d7af60c49a3cc906ca3ea38916e1938a00000000000000000000000000000000000000000000000000019617d2b1ea0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16201,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3fe811aa9ec8a0a94b48cd81121043cf5cd0513000000000000000000000000f3fe811aa9ec8a0a94b48cd81121043cf5cd051300000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16202,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000312b37ef3e483dad46de413dbf9b421c8c920c31000000000000000000000000312b37ef3e483dad46de413dbf9b421c8c920c3100000000000000000000000000000000000000000000000000013e52b9abe00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16203,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000002f318c8f9d3938372eb49303fb14567d62df28d70000000000000000000000002f318c8f9d3938372eb49303fb14567d62df28d700000000000000000000000000000000000000000000000e831c382ea2498d9e00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16206,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000272007d3625914bad0e1cc698e6d453f65c62f21000000000000000000000000272007d3625914bad0e1cc698e6d453f65c62f21000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x284ffb2c6e7d5b1708bc9f0c29746922461d4fbc2643d06a361c3bb03fbff69c,2022-04-15 04:45:59.000 UTC,0,true -16207,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba0d2c9dde95078e97ad7052235da83b3018b585000000000000000000000000ba0d2c9dde95078e97ad7052235da83b3018b58500000000000000000000000000000000000000000000000004cb0aa27bbea18800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5a87f2febda9f4f1b6721c7972d080c9f4fd7f549a226bd08504b9994fbbf042,2021-12-06 11:35:58.000 UTC,0,true -16208,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dffa86ce7ee3aa3c1dcc6e884aaf4df86005b57e000000000000000000000000dffa86ce7ee3aa3c1dcc6e884aaf4df86005b57e00000000000000000000000000000000000000000000000004c1c7971c0656b700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x04003942d0a7af5d0ee0e704a3bdead2f607e6956714e06859a36dfa8a456a9b,2021-12-06 11:39:31.000 UTC,0,true -16209,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000050e1c1760db4681fcc6cf6935a27633e4441570700000000000000000000000050e1c1760db4681fcc6cf6935a27633e4441570700000000000000000000000000000000000000000000000004c42cfbaaaff1f700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1299262b3297301230e291537317707a3de6717657906929b3e0e57bd750b58d,2021-12-06 11:41:00.000 UTC,0,true -16210,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003263decaa813a870862e32adbc85933060f9c46d0000000000000000000000003263decaa813a870862e32adbc85933060f9c46d00000000000000000000000000000000000000000000000004c4b9812fbff0a000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf6afffd53f1788147ea96bf048ef8944c9427ca59cd224191b4509a978f05fd9,2021-12-06 12:09:12.000 UTC,0,true -16212,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000bd81af0236b3c3adcc59982015d1f5dbe337a5fe000000000000000000000000000000000000000000000010fa140f1616eb83ae,0xc8fad02ba353f26fa50bd4b2831e76f92830e703f5d7649b3ffda61dd6175bad,2021-12-10 06:15:19.000 UTC,0,true -16215,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e1c63ce6d149b35ed6daba02cc354d34c9faa180000000000000000000000001e1c63ce6d149b35ed6daba02cc354d34c9faa18000000000000000000000000000000000000000000000000001d5ceb30710cc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16216,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000695ac4ba3412e209a248041d4e94f6fec6e26e5c000000000000000000000000695ac4ba3412e209a248041d4e94f6fec6e26e5c00000000000000000000000000000000000000000000000000daa577074afc7400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16217,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000d0652b76639b93ae0e7829d5608e233c8e2eeb62000000000000000000000000d0652b76639b93ae0e7829d5608e233c8e2eeb6200000000000000000000000000000000000000000000000000000000443260af00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x32f7ad76bc4de5474b87355c506d6b70e3b275a00168ca24f16fbdc7b56a9003,2021-12-03 11:19:53.000 UTC,0,true -16218,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000030c05b9066113696b2f6194e067a21d0a77108e900000000000000000000000030c05b9066113696b2f6194e067a21d0a77108e90000000000000000000000000000000000000000000000000058e3751f8aa28a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16220,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007c98ab80d060ca57dd067712d0ed084a58f69c490000000000000000000000007c98ab80d060ca57dd067712d0ed084a58f69c490000000000000000000000000000000000000000000000000026a46679ebdc7700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xca5c91dca869dcab7ef4be90cd89aaba6d5b3268cea8b62db62a992ce43593c8,2022-08-19 05:50:17.000 UTC,0,true -16222,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000000acbc858d78b2d3332cb96ace137ccfc49405a140000000000000000000000000acbc858d78b2d3332cb96ace137ccfc49405a1400000000000000000000000000000000000000000000000000000000000f906000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16224,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000344ae5a277c4cf1864941cfb35807f28d5241687000000000000000000000000344ae5a277c4cf1864941cfb35807f28d524168700000000000000000000000000000000000000000000000000b92f0e2f5d3f5100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16225,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000056325a71d3ff95c8bca8b985903123ab2ab9c10000000000000000000000000056325a71d3ff95c8bca8b985903123ab2ab9c100000000000000000000000000000000000000000000000000cee48c9c29a2da00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1f19706c75bfe926b6cef6a9a8f44dd733d6e9445aef47224abdb0bf4aed772c,2021-12-20 12:58:16.000 UTC,0,true -16226,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001f89f28490e4f4a544df6f23782f19b9dc0855db0000000000000000000000001f89f28490e4f4a544df6f23782f19b9dc0855db00000000000000000000000000000000000000000000000000adfa07ba85f60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16227,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000095c8287dc54aab2176a7ba495034e24f315693f500000000000000000000000095c8287dc54aab2176a7ba495034e24f315693f500000000000000000000000000000000000000000000000000000000000fb77000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16231,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004dfd01933c8af1151d208a897b97926a2a47867e0000000000000000000000004dfd01933c8af1151d208a897b97926a2a47867e0000000000000000000000000000000000000000000000000064658521bd409f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16232,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000ab0e775f87cf8d1c77e617ef050bbd365ae37740000000000000000000000000ab0e775f87cf8d1c77e617ef050bbd365ae3774000000000000000000000000000000000000000000000000000000000000fa7d000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16233,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000843601e30bab716f5128cd3e269ae70ee4d218f0000000000000000000000000843601e30bab716f5128cd3e269ae70ee4d218f00000000000000000000000000000000000000000000000000000000008f0d18000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16234,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000601d9a3d680b62e45b75e7d616e1024f1f5a3204000000000000000000000000601d9a3d680b62e45b75e7d616e1024f1f5a32040000000000000000000000000000000000000000000000000000000003df249900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16235,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000601d9a3d680b62e45b75e7d616e1024f1f5a3204000000000000000000000000601d9a3d680b62e45b75e7d616e1024f1f5a320400000000000000000000000000000000000000000000000000c234a4cd408fc500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16236,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000003a3b5ae8cfe9fee4cc8d783da3b6e89cacca5c080000000000000000000000003a3b5ae8cfe9fee4cc8d783da3b6e89cacca5c0800000000000000000000000000000000000000000000000000000000000fcee000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16237,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e241013cd6b4d4c70466cb1334ff500befaf10fb000000000000000000000000e241013cd6b4d4c70466cb1334ff500befaf10fb00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16238,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e241013cd6b4d4c70466cb1334ff500befaf10fb000000000000000000000000e241013cd6b4d4c70466cb1334ff500befaf10fb00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16239,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b05b03e6456d710d906b462f05d3403a0ded1c1b000000000000000000000000b05b03e6456d710d906b462f05d3403a0ded1c1b0000000000000000000000000000000000000000000000000104bcb131f6f11700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16241,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bfb4e5c4833ba5258cf5b805d5ddc52d7c0fc2c2000000000000000000000000bfb4e5c4833ba5258cf5b805d5ddc52d7c0fc2c2000000000000000000000000000000000000000000000000013bb448f83570bf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x458689ead127fb0e9103cc5b961645317e5c22f59e08d64e3f6f1fa3219d1daf,2021-12-26 08:10:47.000 UTC,0,true -16243,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000034fca7ba58551dfa89e486c8934a7b35f4d02dd000000000000000000000000034fca7ba58551dfa89e486c8934a7b35f4d02dd000000000000000000000000000000000000000000000000003d49ccf811f1e7100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16244,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ab327d86e8a9cdc7bd516582ba3ca199ef431800000000000000000000000007ab327d86e8a9cdc7bd516582ba3ca199ef431800000000000000000000000000000000000000000000000000021f74c1e74d50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16245,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000659db7f3ea1801dde55259fccbb1e8608f8ebdef000000000000000000000000659db7f3ea1801dde55259fccbb1e8608f8ebdef0000000000000000000000000000000000000000000000000002d79883d2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16246,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000659db7f3ea1801dde55259fccbb1e8608f8ebdef000000000000000000000000659db7f3ea1801dde55259fccbb1e8608f8ebdef0000000000000000000000000000000000000000000000001248be6158f4765f00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16248,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000659db7f3ea1801dde55259fccbb1e8608f8ebdef000000000000000000000000659db7f3ea1801dde55259fccbb1e8608f8ebdef0000000000000000000000000000000000000000000000000000000000135c6800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16249,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000659db7f3ea1801dde55259fccbb1e8608f8ebdef000000000000000000000000659db7f3ea1801dde55259fccbb1e8608f8ebdef0000000000000000000000000000000000000000000000000000000000135c6800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16250,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b53672ab0315620662f31c429635bf8b3ac62345000000000000000000000000b53672ab0315620662f31c429635bf8b3ac62345000000000000000000000000000000000000000000000000002020aa16652ec000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16251,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d2269145a8ebbe814be80284e1346bb428e49357000000000000000000000000d2269145a8ebbe814be80284e1346bb428e4935700000000000000000000000000000000000000000000000000335155dce04a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16253,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bb81746a8af0738dd5a4412970a2224f3309749a000000000000000000000000bb81746a8af0738dd5a4412970a2224f3309749a00000000000000000000000000000000000000000000000000432b3043c3e57000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16255,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000048193168a19164c6f50c2fef223ebcd3cce803c900000000000000000000000048193168a19164c6f50c2fef223ebcd3cce803c900000000000000000000000000000000000000000000000000354a6ba7a1800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16256,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f09073676f37b4e8281b1be3b2f6a030fc188b70000000000000000000000002f09073676f37b4e8281b1be3b2f6a030fc188b700000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16258,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b129f1910a9e90a715b69a8dd42e7646a448dbb0000000000000000000000002b129f1910a9e90a715b69a8dd42e7646a448dbb0000000000000000000000000000000000000000000000000093e7bcd3f30a4600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16259,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043232604615a225aded5713e41161d82f616467200000000000000000000000043232604615a225aded5713e41161d82f616467200000000000000000000000000000000000000000000000001a91ce9a67b8c3100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16262,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000806375720c42753be3d98109e93f5df192fb0222000000000000000000000000806375720c42753be3d98109e93f5df192fb022200000000000000000000000000000000000000000000000000000000043fa7db00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x29ef5e2db5ee67fb356073458da9b510d79302d1ab73bd1d3a6ab27aab527f4d,2022-03-05 14:33:11.000 UTC,0,true -16263,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000806375720c42753be3d98109e93f5df192fb0222000000000000000000000000806375720c42753be3d98109e93f5df192fb0222000000000000000000000000000000000000000000000000007535f91d618cf500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x43aadccc817072d42d37dcadbd346b77d18f23b102a8b02f6bf29993d7dccbf6,2022-03-05 14:36:55.000 UTC,0,true -16264,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000097ca9c21af6b38aa7f8df9b2da2555f9346fb89c00000000000000000000000097ca9c21af6b38aa7f8df9b2da2555f9346fb89c0000000000000000000000000000000000000000000000000012b80f58fefa0200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16266,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ec712ce410df07c9a5a38954d1a85520410b8b83000000000000000000000000ec712ce410df07c9a5a38954d1a85520410b8b8300000000000000000000000000000000000000000000000000aaf4b2df7384be00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x77c474eba6526ce4ba403c345af8d4138f1b60125248fd7d0f7c62e8f77ed4c8,2022-01-01 15:20:54.000 UTC,0,true -16267,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e26d88cd8deec6e5762cc5be6e33cb49a01932b0000000000000000000000000e26d88cd8deec6e5762cc5be6e33cb49a01932b00000000000000000000000000000000000000000000000002a0e1730340bfb200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9f902c41ab9c170177b91a4ce6530588ea9ff35f26d47b00a965e8f4f93010b4,2021-12-11 11:00:54.000 UTC,0,true -16268,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000069b1763765443f114212247d6f639427c90e331a0000000000000000000000000000000000000000000000045fbb1781ff7daeab,,,1,true -16269,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000daee2a62e9a1a13721bacb3f04d3f80b6a0719a5000000000000000000000000daee2a62e9a1a13721bacb3f04d3f80b6a0719a5000000000000000000000000000000000000000000000000000000000121b23d00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16270,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be669d83fe4de792132aceb7cd84eb6479df76e3000000000000000000000000be669d83fe4de792132aceb7cd84eb6479df76e3000000000000000000000000000000000000000000000000030b3a1463b20f1900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16272,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000069b1763765443f114212247d6f639427c90e331a00000000000000000000000000000000000000000000000007f0b765bd31d9cc,,,1,true -16273,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000daee2a62e9a1a13721bacb3f04d3f80b6a0719a5000000000000000000000000daee2a62e9a1a13721bacb3f04d3f80b6a0719a50000000000000000000000000000000000000000000000000028db3066eac00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16275,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000223418ec0b76fa09f430ab36e609c71be901c559000000000000000000000000223418ec0b76fa09f430ab36e609c71be901c55900000000000000000000000000000000000000000000000001f161421c8e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16278,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000000a8f515e37b1b074c9f1a41e5013252c607fcd7c000000000000000000000000000000000000000000000000288b24f6824425e8,,,1,true -16279,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a0c0adc8073b25431117f6d97368f743e3ee30c1000000000000000000000000a0c0adc8073b25431117f6d97368f743e3ee30c100000000000000000000000000000000000000000000000002e77a3ac53fc50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2a1c35503575c16b5b313a6e2f5bca81e336ec38b7ca8290836721e0571d4390,2021-12-31 10:27:32.000 UTC,0,true -16280,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049c884014dec517a066438b6b17a3d12862d0b6400000000000000000000000049c884014dec517a066438b6b17a3d12862d0b6400000000000000000000000000000000000000000000000000738f8943a437b600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16281,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d5f5902901bbe4221c633a4a491a21ab7e4ac091000000000000000000000000d5f5902901bbe4221c633a4a491a21ab7e4ac09100000000000000000000000000000000000000000000000000a0f2e2e18b34cd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16282,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005b808821a873774589c738a5d7191bf7d498d23c0000000000000000000000005b808821a873774589c738a5d7191bf7d498d23c00000000000000000000000000000000000000000000000000adeb048011f30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16283,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e7e5c18aa987d8c8a55e610ff39f3fa48d48dd15000000000000000000000000e7e5c18aa987d8c8a55e610ff39f3fa48d48dd1500000000000000000000000000000000000000000000000000a4762b38ba469b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16286,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c3acf8b3e836bb75b8ea170a58967db79e54deb7000000000000000000000000c3acf8b3e836bb75b8ea170a58967db79e54deb700000000000000000000000000000000000000000000000000001fad739e454f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16287,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003345deb0e8552220eab98763309bce486efafecf0000000000000000000000003345deb0e8552220eab98763309bce486efafecf0000000000000000000000000000000000000000000000000083edb0cb6cc64700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16288,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000823d0b781d951b22bd72e03a14a4656a4391c742000000000000000000000000823d0b781d951b22bd72e03a14a4656a4391c742000000000000000000000000000000000000000000000000000000001805ea7900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xa18cd3a2ce1803231268f83fd62fdc2f9ca141865bf0899a5ba3305c2c17f705,2022-02-26 10:46:02.000 UTC,0,true -16291,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c3acf8b3e836bb75b8ea170a58967db79e54deb7000000000000000000000000c3acf8b3e836bb75b8ea170a58967db79e54deb7000000000000000000000000000000000000000000000000007c85980e88c37700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16292,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ac5201f9e7d908a9877929807cd878051b7f2d50000000000000000000000000ac5201f9e7d908a9877929807cd878051b7f2d5000000000000000000000000000000000000000000000000014ccabc532e581b900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16294,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f4fcc2d19ae692a7aeb7d540139a37c7af1205c4000000000000000000000000f4fcc2d19ae692a7aeb7d540139a37c7af1205c40000000000000000000000000000000000000000000000001582b4c9a9db000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x143675e019b6041cdc2c9f4e9ccccad2918597bfc3e23f889c606d88dadcaaad,2021-11-28 14:47:52.000 UTC,0,true -16295,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f0ebd71291bf99bf64a87e2094dcd8496f098bb8000000000000000000000000f0ebd71291bf99bf64a87e2094dcd8496f098bb800000000000000000000000000000000000000000000000003ab00f7b6f758d900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x29bfda8c8b31eb112c47c22adc4d3ee2c4c9564196effa9ca0428a1e5e43aeb7,2021-11-29 15:47:39.000 UTC,0,true -16297,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000047034b82573d3ed0cd16d01dfb70881b3af4d92000000000000000000000000047034b82573d3ed0cd16d01dfb70881b3af4d920000000000000000000000000000000000000000000000000157318fdf58fdbb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16298,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000090da0933225115da9df2829e2c16d85069cd7d9700000000000000000000000090da0933225115da9df2829e2c16d85069cd7d9700000000000000000000000000000000000000000000000001161dc8173c796800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16299,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005e28f1e1a4bb46e9a6128b59c7550deada8095a40000000000000000000000005e28f1e1a4bb46e9a6128b59c7550deada8095a400000000000000000000000000000000000000000000000001c3d7e86ba821d900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x4798089e4dbbeb6957442851f3f7bd8089b247ad30e48feabe12c71a2817446b,2021-12-26 19:25:52.000 UTC,0,true -16300,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006365aacc94254318572bcd5fb2a6fe68a23068df0000000000000000000000006365aacc94254318572bcd5fb2a6fe68a23068df0000000000000000000000000000000000000000000000000c9257c7eb3790a500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xaf0bc70c6971ea337aa24c89c3cf899fddd791669fa7152b21c4f458a6c770ea,2021-11-21 19:47:40.000 UTC,0,true -16301,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000083ac17696774768c26e48a98d115b5eccbf81a86000000000000000000000000000000000000000000000000200888947fddce22,0xba858621a76b860bee6cdae3a8bac4d4f75d2e4dfe2755cc5b74b66a13c931b2,2022-01-07 22:22:54.000 UTC,0,true -16303,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eb536f050d7ff33eb2d7a822ee4553f75372b72a000000000000000000000000eb536f050d7ff33eb2d7a822ee4553f75372b72a00000000000000000000000000000000000000000000000000205f42659cdc0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16304,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ebf1a5ffa9b693a8779aa3331796ab645ddcaf90000000000000000000000004ebf1a5ffa9b693a8779aa3331796ab645ddcaf9000000000000000000000000000000000000000000000000003440a6e228610000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16305,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000190522e3c7158e5462e0d4a6152cc00219368e90000000000000000000000000190522e3c7158e5462e0d4a6152cc00219368e900000000000000000000000000000000000000000000000000429d069189e000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd7f4b66eeacc1cfa328bf47ad7bee31b792de0fef024c7317489487d7f4dc93f,2022-01-18 18:27:36.000 UTC,0,true -16306,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000569849661e1163a0ddbfe46f39a43c8ec65c3f81000000000000000000000000569849661e1163a0ddbfe46f39a43c8ec65c3f8100000000000000000000000000000000000000000000000000e6d50a3c2e05fe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16307,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd9f75b265dbdcf8460de10175f9f91bcccaf7c8000000000000000000000000bd9f75b265dbdcf8460de10175f9f91bcccaf7c800000000000000000000000000000000000000000000000003d72205ebb7f65b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16308,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000072868c29660f74cda76b23068e3f92075cb93c0000000000000000000000000072868c29660f74cda76b23068e3f92075cb93c0000000000000000000000000000000000000000000000000000e75406123288000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16313,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ba763db587b947ea9bf33348189f6352c970404f000000000000000000000000ba763db587b947ea9bf33348189f6352c970404f00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16314,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000795080e2fe89afd22edc943b35a676f37d8f2f0a000000000000000000000000795080e2fe89afd22edc943b35a676f37d8f2f0a000000000000000000000000000000000000000000000000107694ca9cd875c300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16323,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d07d7fc9d70e703723cc08ee060a5969666934a6000000000000000000000000d07d7fc9d70e703723cc08ee060a5969666934a600000000000000000000000000000000000000000000000004bcfa8ab7807b5100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16324,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000092b3346317eeafba459be28c7ffe38703dca45d800000000000000000000000092b3346317eeafba459be28c7ffe38703dca45d8000000000000000000000000000000000000000000000000001e5380cb3cd30000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16329,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007cc5e2bffbd7cfaf1fb68cd7ccbcb74ab2c355590000000000000000000000007cc5e2bffbd7cfaf1fb68cd7ccbcb74ab2c3555900000000000000000000000000000000000000000000000000402b38f1f4d7bf00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16332,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000659db7f3ea1801dde55259fccbb1e8608f8ebdef000000000000000000000000659db7f3ea1801dde55259fccbb1e8608f8ebdef0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16333,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000659db7f3ea1801dde55259fccbb1e8608f8ebdef000000000000000000000000659db7f3ea1801dde55259fccbb1e8608f8ebdef0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16334,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7031208635987cad84d1ef694019d0bfaff0adb000000000000000000000000c7031208635987cad84d1ef694019d0bfaff0adb000000000000000000000000000000000000000000000000001f6438b6de52c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16335,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000003ed50e3d283191ac4271606094b6a1bf0c8494cc0000000000000000000000003ed50e3d283191ac4271606094b6a1bf0c8494cc00000000000000000000000000000000000000000000000000000000000fb77000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16336,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000065fa6ca0de117ce8cf124e68c3a320539d9975f300000000000000000000000065fa6ca0de117ce8cf124e68c3a320539d9975f3000000000000000000000000000000000000000000000000000000000010385800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16338,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a6f425fc561201c4d5e9170e55ae3837ee9c0e90000000000000000000000000a6f425fc561201c4d5e9170e55ae3837ee9c0e90000000000000000000000000000000000000000000000000011c37937e08000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5ea6c1689e725bc6c624277e317778d1ce087c2371bccf8e578f56890f34f627,2022-06-01 08:04:54.000 UTC,0,true -16339,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000009c119e6105b3e97c67a19afe3ca7ad487a129fc70000000000000000000000009c119e6105b3e97c67a19afe3ca7ad487a129fc700000000000000000000000000000000000000000000000000000000000f906000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16340,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009989cc2cc1ec46091ffc41b53b4f10e33744776b0000000000000000000000009989cc2cc1ec46091ffc41b53b4f10e33744776b00000000000000000000000000000000000000000000000000c4d4a33ddd484e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16341,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006af4cde70d344c2623361a9045489c7b3db8c6a50000000000000000000000006af4cde70d344c2623361a9045489c7b3db8c6a50000000000000000000000000000000000000000000000000070d0a3acd47f9f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16342,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a8823d3e315a08e32bff594362066fa117420485000000000000000000000000a8823d3e315a08e32bff594362066fa117420485000000000000000000000000000000000000000000000000077e772392b6000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x098e5704a110022e513f27ba67018de3ed61b9ea77bb993dbd47e3e038de43bb,2021-11-21 08:25:45.000 UTC,0,true -16343,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000084b1d109eb5334b79cc9e7572cea5a651bb844c800000000000000000000000084b1d109eb5334b79cc9e7572cea5a651bb844c800000000000000000000000000000000000000000000000000000000000fb77000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16346,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000b7909a40025d939d087efedae3c7f95b7897cad9000000000000000000000000b7909a40025d939d087efedae3c7f95b7897cad900000000000000000000000000000000000000000000000000000000000fcee000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16348,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e228f07818bc1dd1b42ad2edc604d1f2c200b1af000000000000000000000000e228f07818bc1dd1b42ad2edc604d1f2c200b1af000000000000000000000000000000000000000000000000000f907f2c787d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16349,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a454c64d1ed985303c22135d2eacbadd3dfeb713000000000000000000000000a454c64d1ed985303c22135d2eacbadd3dfeb71300000000000000000000000000000000000000000000000000abff3aff6b46fe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16350,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000000de65e4c79b71931592fb489af49fa719d126b500000000000000000000000000de65e4c79b71931592fb489af49fa719d126b500000000000000000000000000000000000000000000000000e16fdeb32e6c9e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xa7b99c38f4a30681d39571b2640b11f974b30c20f88269d822ab0a17c194888b,2022-05-30 07:35:09.000 UTC,0,true -16351,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000350a791bfc2c21f9ed5d10980dad2e2638ffa7f6000000000000000000000000f5a80332ad3652fc285f2ba6f04793d1a1590f46000000000000000000000000f5a80332ad3652fc285f2ba6f04793d1a1590f46000000000000000000000000000000000000000000000000138f54735b52fb4b00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16352,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000bd2be39bf52a66de061ab2a70b740b6421e41a0d000000000000000000000000bd2be39bf52a66de061ab2a70b740b6421e41a0d000000000000000000000000000000000000000000000000000000000010308800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16353,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a51ccd010b9122fee9a82c3428a9c4815beb34f5000000000000000000000000a51ccd010b9122fee9a82c3428a9c4815beb34f5000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16354,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000008681943727aca47a0bdc9cd52be518a0f2d99fd60000000000000000000000008681943727aca47a0bdc9cd52be518a0f2d99fd60000000000000000000000000000000000000000000000000e043da61725000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16355,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000447ccb085fb749b73bd15a697ab2bc8fe07057dd000000000000000000000000447ccb085fb749b73bd15a697ab2bc8fe07057dd0000000000000000000000000000000000000000000000000713e24c4373000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x3f4b73ffb4a4865e3f5651ca81be96c06aa27e2ac891022f1141e049ede50aec,2021-12-10 00:28:06.000 UTC,0,true -16358,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000004e41002ec04fd598057095026e9d78ef852509000000000000000000000000004e41002ec04fd598057095026e9d78ef85250900000000000000000000000000000000000000000000000000000000000102ca000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16359,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000001636262f0303075118376bb00f77c942bad697940000000000000000000000001636262f0303075118376bb00f77c942bad6979400000000000000000000000000000000000000000000000000000000000fb77000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16360,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000cc0fdfa2a9edfc89087e405a4d4b6120ea686fb0000000000000000000000000cc0fdfa2a9edfc89087e405a4d4b6120ea686fb0000000000000000000000000000000000000000000000000711c26648b6032200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xea7845e1cd7ff622e096f04d4c567260e46972b5ab3552bc3417e5aed1edc80e,2021-11-28 06:28:49.000 UTC,0,true -16361,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000eebf675984cd7ac1eb2cb70ac951118306b88288000000000000000000000000eebf675984cd7ac1eb2cb70ac951118306b88288000000000000000000000000000000000000000000000000000000000010059000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16362,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000cd87388d31ccc184050a1afd75c980ccf800c890000000000000000000000000cd87388d31ccc184050a1afd75c980ccf800c89000000000000000000000000000000000000000000000000000000000000f906000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16363,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e816691000000000000000000000000b53672ab0315620662f31c429635bf8b3ac62345000000000000000000000000b53672ab0315620662f31c429635bf8b3ac62345000000000000000000000000000000000000000000000000326584266145792d00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16365,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ee39c70efb6af381c15e949c53a2025e0303340d000000000000000000000000ee39c70efb6af381c15e949c53a2025e0303340d000000000000000000000000000000000000000000000000015b2a08b2c0e89300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe71492dee1e3a2b4572beab5a279cef8342e6db552bd3a9cd7c9f19f1efcb4dc,2022-05-21 10:59:50.000 UTC,0,true -16366,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000ceb96ee856fb4a0bd157e5912beb3d7542d10ac9000000000000000000000000ceb96ee856fb4a0bd157e5912beb3d7542d10ac9000000000000000000000000000000000000000000000000000000000010191800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16368,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ecd9653829ac3908a73fb43d3a51e0f9b8c27193000000000000000000000000ecd9653829ac3908a73fb43d3a51e0f9b8c27193000000000000000000000000000000000000000000000000001f022da5887e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xfc82b6a6c942bcdd955d7fae5e717e47d95063152fc8a4f58e7773e278d5dac9,2022-06-16 14:58:39.000 UTC,0,true -16370,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000a4a52844c02088e9289cb41a4601e1f8b1847384000000000000000000000000a4a52844c02088e9289cb41a4601e1f8b18473840000000000000000000000000000000000000000000000000e27c49886e6000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16372,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000065deca52291340ee8af8476e7c2f7adcc869c69700000000000000000000000065deca52291340ee8af8476e7c2f7adcc869c6970000000000000000000000000000000000000000000000000394c6ad41ed318f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16373,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000843c45fb93515cfb6931353aad53cdb0570b326a000000000000000000000000843c45fb93515cfb6931353aad53cdb0570b326a0000000000000000000000000000000000000000000000000eb5e06245ea000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16375,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f787e89c570419bbefc7afea97e9a51e7a21ad2c000000000000000000000000f787e89c570419bbefc7afea97e9a51e7a21ad2c0000000000000000000000000000000000000000000000000329c6a1b533e73f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16376,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000fdee9fbb41c691025682e81534efeaf4723e9d60000000000000000000000000fdee9fbb41c691025682e81534efeaf4723e9d60000000000000000000000000000000000000000000000000394c5515113c70e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16377,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000002d98ec3c5be60d9fb6f68c7f95a694b154f6e3b80000000000000000000000002d98ec3c5be60d9fb6f68c7f95a694b154f6e3b80000000000000000000000000000000000000000000000000e326d147539800000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16379,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000007fb3507a58f8dd61944eb7d79160b16cf97e9edb0000000000000000000000007fb3507a58f8dd61944eb7d79160b16cf97e9edb0000000000000000000000000000000000000000000000000e609c82d34e000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16381,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000a7ce39734d29a717ccacf7e6667de9353f09b75b000000000000000000000000a7ce39734d29a717ccacf7e6667de9353f09b75b0000000000000000000000000000000000000000000000000e4b4b8af6a7000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16382,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000eb6d85ff965506cf2639a828c3c04fa9f0d091120000000000000000000000000000000000000000000000012fa68ec8e62db52a,0x8d226af4e220c5a6a976c6a2155a054a68e186690c3f7bd45c6c3c4ef8c70511,2022-02-13 11:24:50.000 UTC,0,true -16383,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f60c9808a0205535c6a211f2732c730157f163fc00000000000000000000000000000000000000000000000522938106c0f77572,0x422a579ea26966f4998cbee274231675504064a85d63bca3b0d6588c20cfb2d7,2021-12-12 16:58:44.000 UTC,0,true -16384,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f90181c1d7720d63588bf3578af0136082158542000000000000000000000000f90181c1d7720d63588bf3578af013608215854200000000000000000000000000000000000000000000000002bf25bfab1c87b100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16385,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d5f1fa7a6010b1afb2f08d799012390c178c2aba000000000000000000000000d5f1fa7a6010b1afb2f08d799012390c178c2aba00000000000000000000000000000000000000000000000002bea5b5ae5dd74a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16386,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000f69560fd1fe5e89e57616b02540b16169a680ce6000000000000000000000000f69560fd1fe5e89e57616b02540b16169a680ce60000000000000000000000000000000000000000000000000000000000102ca000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16387,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000badb5a9584060b9559be9fd43793bfa233be5d95000000000000000000000000badb5a9584060b9559be9fd43793bfa233be5d95000000000000000000000000000000000000000000000000013654378ef00cb600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xb5cce49a142b0adb04d300f56092405ae121f1d7492114ff13bee7b774700168,2022-03-15 12:55:05.000 UTC,0,true -16388,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000a174fb1658f1f33ba012fa05d69bc132cca50a3c000000000000000000000000a174fb1658f1f33ba012fa05d69bc132cca50a3c0000000000000000000000000000000000000000000000000e609c82d34e000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16389,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e758f44477e1c2e131f871b061a5ca18beff6bcc000000000000000000000000e758f44477e1c2e131f871b061a5ca18beff6bcc000000000000000000000000000000000000000000000000076c57a76a4da10b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16390,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006365aacc94254318572bcd5fb2a6fe68a23068df0000000000000000000000006365aacc94254318572bcd5fb2a6fe68a23068df000000000000000000000000000000000000000000000000000020894af2460000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16392,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000bf130dd432296f17e7cce406735a48470ec56956000000000000000000000000bf130dd432296f17e7cce406735a48470ec569560000000000000000000000000000000000000000000000000eb5e06245ea000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16394,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a5df59adb90608f7906b66eb17d9efa8e5c4ab71000000000000000000000000a5df59adb90608f7906b66eb17d9efa8e5c4ab7100000000000000000000000000000000000000000000000007a01f91c865470000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16395,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000068a7d4056c98fbffa4f01f6c5496b768ebfab91500000000000000000000000068a7d4056c98fbffa4f01f6c5496b768ebfab91500000000000000000000000000000000000000000000000007661388fd0e54f100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9de02a1aeb4390524e68a475fe7d49a2fbeeea33f48dff8f578630e39dd2119c,2021-11-23 08:12:48.000 UTC,0,true -16396,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000002e87c017fa0140c482ed9f1dc424c364d555152b0000000000000000000000002e87c017fa0140c482ed9f1dc424c364d555152b0000000000000000000000000000000000000000000000000eb5e06245ea000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16397,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004c6a5ec9677de01b8ee7b271dbd5c0383bf50a030000000000000000000000004c6a5ec9677de01b8ee7b271dbd5c0383bf50a030000000000000000000000000000000000000000000000000774fdabb3b65ccc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x4daa8b2c1d63b6df693b4643cae1a0c5f9e1ac35249ed6407a5b3effd6f5911d,2021-11-23 09:07:33.000 UTC,0,true -16398,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000986b4eb9604972b9f0fe3e37dc531412bf19d39e000000000000000000000000986b4eb9604972b9f0fe3e37dc531412bf19d39e000000000000000000000000000000000000000000000000076e267049e741f200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x29c5c972cf2b1a63a4171db00990d516d20261f1f8337eb5402b2c6b5a6a2973,2021-11-23 09:15:43.000 UTC,0,true -16399,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000009337aae58a723ce45f9d4ab24fb85b19ae6b6ee70000000000000000000000009337aae58a723ce45f9d4ab24fb85b19ae6b6ee700000000000000000000000000000000000000000000000000000000093ddc6e00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x4a0dedc00bccde5a709816b89690917c53613aa886df789e212271e1935e1118,2022-06-16 12:26:12.000 UTC,0,true -16400,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000e1c57826461421f2acffd361673ceafdb71f349f000000000000000000000000e1c57826461421f2acffd361673ceafdb71f349f0000000000000000000000000000000000000000000000000e4b4b8af6a7000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16401,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a0d53d61037ac768a7e18a86428c3cfd662ed2a0000000000000000000000003a0d53d61037ac768a7e18a86428c3cfd662ed2a00000000000000000000000000000000000000000000000000305aae3e83e6b000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16402,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fd5b1e1ce2b0284a6b716e15e82420f2b79d5f7b000000000000000000000000fd5b1e1ce2b0284a6b716e15e82420f2b79d5f7b000000000000000000000000000000000000000000000000013a80b2fd5eed2900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16404,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045a5549b2baf17dcaa883e1b4f40bc89abce8a2e00000000000000000000000045a5549b2baf17dcaa883e1b4f40bc89abce8a2e0000000000000000000000000000000000000000000000000000ed4d5daec70000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16405,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000209e3dcad4a178be4475238fd6cc4e62b7b6ac80000000000000000000000000209e3dcad4a178be4475238fd6cc4e62b7b6ac800000000000000000000000000000000000000000000000000986fd4c05d594c900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16410,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cba87d88699365cd440366719c21ac7f1b790a12000000000000000000000000cba87d88699365cd440366719c21ac7f1b790a120000000000000000000000000000000000000000000000000082b65d343cd14000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x06ba81ec66ee077dabc49e261b4598b3878549bac47dcea0880430fb00db5269,2021-11-21 15:35:06.000 UTC,0,true -16412,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ead180ae502757fc6e444e4cf3d861fe27fe0ac0000000000000000000000003ead180ae502757fc6e444e4cf3d861fe27fe0ac0000000000000000000000000000000000000000000000003efe1e383e5e4a0800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xff672c0d2453349ac0f43b52568ed858b09c7b4aacad78cd1713693e4e5bfdb2,2021-11-23 01:57:45.000 UTC,0,true -16414,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fbcf84dec4d532881543edfab762844d5dd100dc000000000000000000000000fbcf84dec4d532881543edfab762844d5dd100dc00000000000000000000000000000000000000000000000002dd5af7a414616c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16415,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000677d9c4f92616e96b271af5c07eaf91804be6ac9000000000000000000000000677d9c4f92616e96b271af5c07eaf91804be6ac9000000000000000000000000000000000000000000000000000f6d48f4c67d7500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16417,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000052f654faf01d809aba82e645bde093f5037924fb00000000000000000000000052f654faf01d809aba82e645bde093f5037924fb00000000000000000000000000000000000000000000000000000000050524b000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16418,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004d96836b10b3fa48970e7a9929ab5c40d1ab4ec00000000000000000000000004d96836b10b3fa48970e7a9929ab5c40d1ab4ec00000000000000000000000000000000000000000000000000f8b0a10e47000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16424,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e5ae85b28b61cd23b9781ea8888352661e7fb5d0000000000000000000000003e5ae85b28b61cd23b9781ea8888352661e7fb5d00000000000000000000000000000000000000000000000001252471e143194700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16428,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d5bc81829141cc7ae5039cab8ea719798331f6f6000000000000000000000000d5bc81829141cc7ae5039cab8ea719798331f6f600000000000000000000000000000000000000000000000001397d082bc58e1f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x077110c41b2aeea0f25f2a05398cfba1ca64ab8de1c97426c184f60a022c27d0,2021-11-28 05:22:57.000 UTC,0,true -16430,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000196e7bcc060303cf386e40095a111277f6c91f3b000000000000000000000000196e7bcc060303cf386e40095a111277f6c91f3b000000000000000000000000000000000000000000000000014efac9a304501300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7cca7d6fbba6459d52f46a2b2e0c25494bfc9ab89cb499930266dc4083bd8e14,2022-05-21 10:10:44.000 UTC,0,true -16431,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a26cae39c5d0ffa194f3ac438f4ffcae10da2130000000000000000000000006a26cae39c5d0ffa194f3ac438f4ffcae10da21300000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16432,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a26cae39c5d0ffa194f3ac438f4ffcae10da2130000000000000000000000006a26cae39c5d0ffa194f3ac438f4ffcae10da2130000000000000000000000000000000000000000000000000167a3f9761cf96b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16433,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000009ef9c73d7d8239b93fe48b35a6974292c2ff1e1c0000000000000000000000009ef9c73d7d8239b93fe48b35a6974292c2ff1e1c00000000000000000000000000000000000000000000000000000000200e7e8000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xf909b92d7c3e8ce7cbf767dfe9a4abb80988d8da17fdf076f1b244427829a10d,2021-12-13 11:25:22.000 UTC,0,true -16435,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000005b78f06123ee99dc8b21d4e1ef51afe08059d5ec00000000000000000000000000000000000000000000001003c2a21ecbd2e6b2,0x90885767125bec492a85c382c523a931c0849eb2e5374b1e08043a591a72b6e5,2022-01-24 17:12:09.000 UTC,0,true -16437,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000968c9fd77857295327d6a516d2be3b03ceef3cc0000000000000000000000000968c9fd77857295327d6a516d2be3b03ceef3cc000000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x3544edb6389e79875b2cae18b808baa7b3fe34155ba55ad2320bfb66b91753ad,2021-12-27 15:32:51.000 UTC,0,true -16438,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000056a090734d40037545d617a5ef56309b3ed499a400000000000000000000000056a090734d40037545d617a5ef56309b3ed499a40000000000000000000000000000000000000000000000000085f15ef08539c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7653674a547ab3f6cae714170181051a8c7e1c233aea1349c4e00938b431fcea,2022-06-01 08:52:56.000 UTC,0,true -16439,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d705adf785cc44d3b8b0ab42819252633ccdaec0000000000000000000000002d705adf785cc44d3b8b0ab42819252633ccdaec0000000000000000000000000000000000000000000000000109eeec5930d1b600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2afc08446a1342037e6c1194ff69b61966c4d872949cc23711088abe1134a37e,2021-12-27 10:20:30.000 UTC,0,true -16440,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000891acdefa5f01ab48bf69ff789ce9d3a9997f01700000000000000000000000000000000000000000000000440e5988847f53549,,,1,true -16445,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d063eaceaa164db6eb296b6c7011cbb6f5355770000000000000000000000000d063eaceaa164db6eb296b6c7011cbb6f535577000000000000000000000000000000000000000000000000013fbe85edc9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16446,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f256bb63d41a2c1fca4250d6c9a6fb7ff69df7a7000000000000000000000000f256bb63d41a2c1fca4250d6c9a6fb7ff69df7a700000000000000000000000000000000000000000000000001cdda4faccd000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16448,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000beb3662c34c8be5172b32ef9d3012e5c7b8680c0000000000000000000000000beb3662c34c8be5172b32ef9d3012e5c7b8680c00000000000000000000000000000000000000000000000000424ea52507ecb0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16449,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c27581421dcdcdec3d3f916414e117f82e185465000000000000000000000000c27581421dcdcdec3d3f916414e117f82e18546500000000000000000000000000000000000000000000000000ae6a8c035c4b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16450,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ffd5e9186f89ce3a22f836dab29115a5afb29992000000000000000000000000ffd5e9186f89ce3a22f836dab29115a5afb29992000000000000000000000000000000000000000000000000001b475ca8c2ad6800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16451,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a67a20dfc73c86f6ba5f4438d8914e3f6780d397000000000000000000000000a67a20dfc73c86f6ba5f4438d8914e3f6780d3970000000000000000000000000000000000000000000000000058aee4087cb95500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16452,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000368f15629684eaeedc064926badd534e535dd79c000000000000000000000000368f15629684eaeedc064926badd534e535dd79c000000000000000000000000000000000000000000000000035c7041ea94814300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16453,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000097ce2212e16138c638f90a873872de76aa1f6ec300000000000000000000000097ce2212e16138c638f90a873872de76aa1f6ec3000000000000000000000000000000000000000000000000027258b897331f1d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16455,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e26917d01160f51dc28a58be9e1489b52a3eae67000000000000000000000000e26917d01160f51dc28a58be9e1489b52a3eae6700000000000000000000000000000000000000000000000000194dd5c046bac000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16456,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f6a82e1452f38fdcb4f15e050ccec895bde84456000000000000000000000000f6a82e1452f38fdcb4f15e050ccec895bde84456000000000000000000000000000000000000000000000000046d29253f5c7ed600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16458,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000386f3f9d3f5bcefaefe962fbeb849ca6c4dadd7c00000000000000000000000000000000000000000000000000005af3107a4000,,,1,true -16459,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fbe3e8d699640cfa4cd808a247d0fd2349aef9b5000000000000000000000000fbe3e8d699640cfa4cd808a247d0fd2349aef9b5000000000000000000000000000000000000000000000000000acfec3eec1f8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16460,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005533f954d78aaf3601b8e0aa1f3ce4140bde23d70000000000000000000000005533f954d78aaf3601b8e0aa1f3ce4140bde23d70000000000000000000000000000000000000000000000000f410cfa414c7a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16467,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da445e727b9cfe07b83b4b8fe7fcb3f70e326500000000000000000000000000da445e727b9cfe07b83b4b8fe7fcb3f70e32650000000000000000000000000000000000000000000000000000a8371da2115a8e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16469,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f486d56cce70c481b3455af901fcc4f03fee8107000000000000000000000000000000000000000000000002e68d65f925534e36,,,1,true -16470,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004d548894265f1ac957a4a9a6a9f0bbf28317949e0000000000000000000000004d548894265f1ac957a4a9a6a9f0bbf28317949e0000000000000000000000000000000000000000000000000aafd120b1854e5a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7dc6b3af103c6ff2538eac1b54dd11a0134578ab7845e4d0ff1c7fe771385436,2021-12-07 11:21:53.000 UTC,0,true -16472,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ee538b3a9c12644a9d3ae20a67437e8d18b91c20000000000000000000000004ee538b3a9c12644a9d3ae20a67437e8d18b91c200000000000000000000000000000000000000000000000006156aea5d1265f100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16474,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000350a4336c8acf120d23ef732d24969602d7b9b0b000000000000000000000000350a4336c8acf120d23ef732d24969602d7b9b0b00000000000000000000000000000000000000000000000001603a4f0f14ce0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16475,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000009c39e0731f467f4875d4938ca4a79502d137d7ad000000000000000000000000000000000000000000000009d300bfe10af7aebb,0xaec781e8f66b48dee3b2eb023a677a14579473964129ae619f8bfed6da2b2fd1,2022-03-21 08:59:51.000 UTC,0,true -16477,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000065be5a73d072e8454d88c3ffe1a278d5ff2fff3400000000000000000000000065be5a73d072e8454d88c3ffe1a278d5ff2fff34000000000000000000000000000000000000000000000000013fbe85edc9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16478,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000decd4b961b1984c44afbadbe2844777a627572aa000000000000000000000000decd4b961b1984c44afbadbe2844777a627572aa0000000000000000000000000000000000000000000000000853a0d2313c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x20020ff990bc70dd94ff094a61208cc6c34a4b98493aa4a49caf7f397f3924b3,2022-01-13 00:24:33.000 UTC,0,true -16480,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a535d27b204d9c2280be5ccb73ae48bf19f52c94000000000000000000000000a535d27b204d9c2280be5ccb73ae48bf19f52c94000000000000000000000000000000000000000000000000001b4cbd353e684000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16481,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000a535d27b204d9c2280be5ccb73ae48bf19f52c94000000000000000000000000a535d27b204d9c2280be5ccb73ae48bf19f52c940000000000000000000000000000000000000000000000000000000023f2241300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16482,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000000ab0bdde61532fa3df988646d606326f4c93f6dd0000000000000000000000000ab0bdde61532fa3df988646d606326f4c93f6dd0000000000000000000000000000000000000000000000000e4b4b8af6a7000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16483,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000da7c9a05cde990986310b4c77a2e92da2db0f542000000000000000000000000da7c9a05cde990986310b4c77a2e92da2db0f5420000000000000000000000000000000000000000000000000e4b4b8af6a7000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16484,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b41b0b63018085c58b5ac521303e9f23bb2edd14000000000000000000000000b41b0b63018085c58b5ac521303e9f23bb2edd14000000000000000000000000000000000000000000000000013294476f8a944d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16485,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000008fb6eb0df60b4b574d4dcd34b330b7c969b986390000000000000000000000008fb6eb0df60b4b574d4dcd34b330b7c969b986390000000000000000000000000000000000000000000000000e27c49886e6000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16486,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000faeb5539ae06c460aa83e1849a69b9bfd52395d5000000000000000000000000faeb5539ae06c460aa83e1849a69b9bfd52395d50000000000000000000000000000000000000000000000000eb5e06245ea000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16487,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000357d5b3b1527f642da8765b98b4717e907a930ec000000000000000000000000357d5b3b1527f642da8765b98b4717e907a930ec00000000000000000000000000000000000000000000000000f5b658930f605100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1c300505e51683db6eb1722d01ae9758261b6a4b40abb81d6c9bef9993fa4bed,2022-06-02 07:17:18.000 UTC,0,true -16488,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000b5b783402b764ae687386af9a87da28eee027a46000000000000000000000000b5b783402b764ae687386af9a87da28eee027a46000000000000000000000000000000000000000000000000000000000102cefe00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16489,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bb7e284fd7b65a64581d1aa227e79c640899e4b5000000000000000000000000bb7e284fd7b65a64581d1aa227e79c640899e4b500000000000000000000000000000000000000000000000001547e089196b43500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16490,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032aa102827efed975456b03f712337511f6b0a1500000000000000000000000032aa102827efed975456b03f712337511f6b0a1500000000000000000000000000000000000000000000000004db73254763000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x34690ffc37d61a32cfc2984f18caee18976957426b0131db667bec35f43d0dca,2021-12-11 06:38:12.000 UTC,0,true -16494,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000007e0de437a96a9844dde4e43326aa83b3cc6384f00000000000000000000000007e0de437a96a9844dde4e43326aa83b3cc6384f00000000000000000000000000000000000000000000000000e4b4b8af6a7000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16495,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c5fd654ba7c9c9d6b5710fc347c1306e855ec582000000000000000000000000c5fd654ba7c9c9d6b5710fc347c1306e855ec58200000000000000000000000000000000000000000000000001d74d21b9ea085a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9895cb951d6d8d37de3cc3426b1ba05e91a37b2548c3957c4d4c50e6d989d36b,2021-11-27 10:02:08.000 UTC,0,true -16498,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000fcffa243e47f0f9607b426312a3f54daba0d4c93000000000000000000000000fcffa243e47f0f9607b426312a3f54daba0d4c930000000000000000000000000000000000000000000000000e4b4b8af6a7000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16499,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000000761b46d1a9309e449c06215827573143f85d7b60000000000000000000000000761b46d1a9309e449c06215827573143f85d7b6000000000000000000000000000000000000000000000000000000027f6a7e5600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xaf715fefcfcc6c26a2c745dd31f84db82a119134191d0abcb72a91abd114caeb,2021-12-01 10:09:59.000 UTC,0,true -16500,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000761b46d1a9309e449c06215827573143f85d7b60000000000000000000000000761b46d1a9309e449c06215827573143f85d7b60000000000000000000000000000000000000000000000000182fc338fd1361b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe00f3fc44303c7fd3065abf96315e481e722ac4dfe6d3dbbefbf5fbfcb4f399e,2021-12-01 10:06:06.000 UTC,0,true -16501,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000002260cf37fe45c007824d31815d561ed6204befd00000000000000000000000002260cf37fe45c007824d31815d561ed6204befd0000000000000000000000000000000000000000000000000e92596fd629000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16502,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000151997baecc36419f91a03e3cfa79b06ae99669f000000000000000000000000151997baecc36419f91a03e3cfa79b06ae99669f0000000000000000000000000000000000000000000000000e2f957bf167800000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16503,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000c8fe1c27d568ee2177e27154d954352877d6899b000000000000000000000000c8fe1c27d568ee2177e27154d954352877d6899b0000000000000000000000000000000000000000000000000eb5e06245ea000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16504,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000c674e0feb95a9203f670417a9aa1745e4c509842000000000000000000000000c674e0feb95a9203f670417a9aa1745e4c5098420000000000000000000000000000000000000000000000000eb5e06245ea000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16505,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7e36f0a2af61953b20f0da39eb53d9d22b6c07d000000000000000000000000f7e36f0a2af61953b20f0da39eb53d9d22b6c07d00000000000000000000000000000000000000000000000000503b54323d336300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16506,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000d07f1b97fbd20521e53c69f4fd34de6542cb00b9000000000000000000000000d07f1b97fbd20521e53c69f4fd34de6542cb00b90000000000000000000000000000000000000000000000000000000000102ca000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16507,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000b7f08230e88f43df94fb2af78175de42f88e5148000000000000000000000000b7f08230e88f43df94fb2af78175de42f88e51480000000000000000000000000000000000000000000000000e609c82d34e000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16508,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef0171fedb4bdd6f1713d204d5978bb2b138909d000000000000000000000000ef0171fedb4bdd6f1713d204d5978bb2b138909d00000000000000000000000000000000000000000000000000815b7486d3400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x3ad2cdd33642ac431389dda238537c66c2c729c163c5b229eaa9736b22e75a76,2022-02-08 11:16:31.000 UTC,0,true -16509,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000da21cd0183af61a6666988364f281092256fe6ab000000000000000000000000da21cd0183af61a6666988364f281092256fe6ab0000000000000000000000000000000000000000000000000eb5e06245ea000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16510,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007b660807b7208cc17c80f606eed0e7da5f69e7710000000000000000000000007b660807b7208cc17c80f606eed0e7da5f69e771000000000000000000000000000000000000000000000000003f5fcd1968bc0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16511,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000000555c5a397d52b52d5f18f19695e30d2d7fe8cc00000000000000000000000000555c5a397d52b52d5f18f19695e30d2d7fe8cc0000000000000000000000000000000000000000000000000eb5e06245ea000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16512,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000066fda376c00d156e3c14767ae54f3e4b7e8c6d7400000000000000000000000066fda376c00d156e3c14767ae54f3e4b7e8c6d740000000000000000000000000000000000000000000000000eb5e06245ea000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16513,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd15b4342a031bbd032a9bf1d34fbc7515f7933d000000000000000000000000dd15b4342a031bbd032a9bf1d34fbc7515f7933d00000000000000000000000000000000000000000000000001ea818d75fd81f300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16514,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000091104fd56af1e295c626108f49a144e44674e48d00000000000000000000000091104fd56af1e295c626108f49a144e44674e48d0000000000000000000000000000000000000000000000000e27c49886e6000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16515,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000e78cbe52ab6f05dd39dde596b6885d36ece13f41000000000000000000000000e78cbe52ab6f05dd39dde596b6885d36ece13f410000000000000000000000000000000000000000000000000e2edf95d073000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16516,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000088307d3bd0e4a1908c442d2d05c8651e643333b400000000000000000000000088307d3bd0e4a1908c442d2d05c8651e643333b400000000000000000000000000000000000000000000000000214fc675ec700000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16517,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000004f904839aa85c581d91d45ab190609f3573275710000000000000000000000004f904839aa85c581d91d45ab190609f3573275710000000000000000000000000000000000000000000000000eb5e06245ea000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16518,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000000f51996a94205f0700b0090e5be3db5d08d887cb0000000000000000000000000f51996a94205f0700b0090e5be3db5d08d887cb0000000000000000000000000000000000000000000000000f43fc2c04ee000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16519,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000035afbcc1be94ed3b3c0bb9a71561aeae5d47dc8e00000000000000000000000035afbcc1be94ed3b3c0bb9a71561aeae5d47dc8e0000000000000000000000000000000000000000000000000e40481bf7d9400000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16520,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000623b22606612eff9d107d8acbdbdc54b2691190c000000000000000000000000623b22606612eff9d107d8acbdbdc54b2691190c0000000000000000000000000000000000000000000000000f43fc2c04ee000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16521,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000ca81706c587a64a73e720b2a66894d52c5957b23000000000000000000000000ca81706c587a64a73e720b2a66894d52c5957b230000000000000000000000000000000000000000000000000e27c49886e6000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16522,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000a3e1b18bdf4311a23894e9fd3a57c0f1ec4c859f000000000000000000000000a3e1b18bdf4311a23894e9fd3a57c0f1ec4c859f0000000000000000000000000000000000000000000000000e27c49886e6000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16523,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000006c8febfce14a32eda3e3a3f1246521d2ceb1701c0000000000000000000000006c8febfce14a32eda3e3a3f1246521d2ceb1701c0000000000000000000000000000000000000000000000000e4b4b8af6a7000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16524,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000009a1c5911f6bb5481ad63c103569bfd4f186c706b0000000000000000000000009a1c5911f6bb5481ad63c103569bfd4f186c706b0000000000000000000000000000000000000000000000000e27c49886e6000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16525,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae9b8c92ba9cd153fe5e52cd623caae3f17dedf4000000000000000000000000ae9b8c92ba9cd153fe5e52cd623caae3f17dedf400000000000000000000000000000000000000000000000000a9a5047968430000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16526,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000f240c40f09faf67cb254f7475b01287fd0583514000000000000000000000000f240c40f09faf67cb254f7475b01287fd058351400000000000000000000000000000000000000000000000000000000321d4dcb00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x84b05992479bfd8a13191c83f96ff6eebc2b37e5393d34fc80856edfa4cfcadc,2021-11-26 07:27:39.000 UTC,0,true -16527,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000020ba98f7f2a97af0b6b42e73d6fe905ea4bb475600000000000000000000000020ba98f7f2a97af0b6b42e73d6fe905ea4bb4756000000000000000000000000000000000000000000000000000000003b15b7b200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xba8c1dec7859f5f1cbda37f9c74216f9b0a12ecd074c7b4cb673c70d50c5e2bd,2021-11-26 07:34:33.000 UTC,0,true -16529,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c76fa990f9fc8e2d51647f48fc5b31af5e892b58000000000000000000000000c76fa990f9fc8e2d51647f48fc5b31af5e892b58000000000000000000000000000000000000000000000000031e381d6514f96400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16530,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000072d799a56ea651470e30b8cfdd6ba1be50db1ed100000000000000000000000072d799a56ea651470e30b8cfdd6ba1be50db1ed10000000000000000000000000000000000000000000000000e4b4b8af6a7000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16533,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000390f824ae0d77b4e510e1e49f4ca4be45909386e000000000000000000000000390f824ae0d77b4e510e1e49f4ca4be45909386e000000000000000000000000000000000000000000000000034270e0333fb71100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16535,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000dbc75c003e387e0503f269d645be9e1469f25ac7000000000000000000000000dbc75c003e387e0503f269d645be9e1469f25ac70000000000000000000000000000000000000000000000000e4b4b8af6a7000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16536,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000023b76e8cce30575181a1fc3a245422857147279000000000000000000000000023b76e8cce30575181a1fc3a2454228571472790000000000000000000000000000000000000000000000000e27c49886e6000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16538,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000001aa6719c1e9198c9b5499303a3f7dbb81390db960000000000000000000000001aa6719c1e9198c9b5499303a3f7dbb81390db960000000000000000000000000000000000000000000000000e27c49886e6000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16539,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e1a5cd5bf397c10783dc6f92cf94057dcc345e30000000000000000000000000e1a5cd5bf397c10783dc6f92cf94057dcc345e30000000000000000000000000000000000000000000000000026e8e633ab6e8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x860f64bc92f021eabe6f8e6568d5bf0f30412f0c4a5cd998242e3c217bd32fc9,2022-05-29 02:43:14.000 UTC,0,true -16540,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000093fa220a56f80355a960738dc34101c401d7062800000000000000000000000093fa220a56f80355a960738dc34101c401d706280000000000000000000000000000000000000000000000000e27c49886e6000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16541,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7790a6880a166f79d44a12a7a91897a895b6420000000000000000000000000c7790a6880a166f79d44a12a7a91897a895b6420000000000000000000000000000000000000000000000000003122fd6e2c40db00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16542,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000009bd5448fe9d544339ef01bde163032ff612c3a570000000000000000000000009bd5448fe9d544339ef01bde163032ff612c3a570000000000000000000000000000000000000000000000000eb5e06245ea000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16543,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000511b820f3c51c529d47e240c36c18ce785b1369700000000000000000000000000000000000000000000000082bbdc0616b49281,,,1,true -16545,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000a2bc88883ccc7e9cfa4af8ca05983336f2903d35000000000000000000000000a2bc88883ccc7e9cfa4af8ca05983336f2903d350000000000000000000000000000000000000000000000000000000015a31c2d00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x40f5e3654544c8d1bed0ea54680a746cfa4300ce1f3c88ad658e1537bc35582e,2022-03-14 01:43:51.000 UTC,0,true -16546,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2bc88883ccc7e9cfa4af8ca05983336f2903d35000000000000000000000000a2bc88883ccc7e9cfa4af8ca05983336f2903d3500000000000000000000000000000000000000000000000000ad1fc8445fe90000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1a4cc4c730fb8421ab066d687a081c1faa0ec2831a7f8a1dc3e18a70a165ab1c,2022-03-14 01:40:21.000 UTC,0,true -16547,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000035fecc6d7ca3ce53e4eb3fbefda0681d664dd47a00000000000000000000000035fecc6d7ca3ce53e4eb3fbefda0681d664dd47a00000000000000000000000000000000000000000000000000a9a72343ebf07100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16548,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000438e269cef2262b56d936617e0798fc242670316000000000000000000000000438e269cef2262b56d936617e0798fc2426703160000000000000000000000000000000000000000000000000e27c49886e6000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16549,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000009364c8d6ac5c00a585a0ecff16d0f73c336501cc0000000000000000000000009364c8d6ac5c00a585a0ecff16d0f73c336501cc0000000000000000000000000000000000000000000000000e4b4b8af6a7000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16550,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000ad453a7eded500955784cc1be9b44ef8fbd7aa160000000000000000000000000000000000000000000000000de0b6b3a7640000,,,1,true -16551,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000007c19d83f2661a3c5e0d3e175332e51d456a738a40000000000000000000000007c19d83f2661a3c5e0d3e175332e51d456a738a40000000000000000000000000000000000000000000000000e27c49886e6000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16554,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e37b714cffa4e0d7418701fc1ce0f3d11e42dd6a000000000000000000000000e37b714cffa4e0d7418701fc1ce0f3d11e42dd6a000000000000000000000000000000000000000000000000029913d5c397543000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x14e32791a64223040581b3bbe35bbd94f49848944fbf2bf364dc5075dcbd6791,2021-11-21 11:50:59.000 UTC,0,true -16555,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000d1e3f3f6673159721f064ddc0030fb1d9d3a464b000000000000000000000000d1e3f3f6673159721f064ddc0030fb1d9d3a464b0000000000000000000000000000000000000000000000000e4b4b8af6a7000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16557,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000000d857dcb55d809cc60b28ccebd6e7f1c02e20b0e0000000000000000000000000d857dcb55d809cc60b28ccebd6e7f1c02e20b0e0000000000000000000000000000000000000000000000000e4b4b8af6a7000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16558,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000074ffa23f2c4e62ce68c4ed591a454472bfb1486200000000000000000000000074ffa23f2c4e62ce68c4ed591a454472bfb14862000000000000000000000000000000000000000000000000003f2f9dad7571a000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16559,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000288346fa5695bcf9fafbd617b2a4becd94da4a11000000000000000000000000288346fa5695bcf9fafbd617b2a4becd94da4a110000000000000000000000000000000000000000000000000e326d147539800000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16560,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000d5fd028115fbfcff0d4d546a542f6edff47da8cc000000000000000000000000d5fd028115fbfcff0d4d546a542f6edff47da8cc000000000000000000000000000000000000000000000000000000003b15697800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x45110db0bbf0f2ddc7d21d3d6650dbab2d86271aff34b3958f700a7357e4b20a,2021-11-26 07:42:07.000 UTC,0,true -16561,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000027273a090d5e0a3ea65755b4073b53e0326bc76c00000000000000000000000027273a090d5e0a3ea65755b4073b53e0326bc76c000000000000000000000000000000000000000000000000027f56a6fb7be24300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16562,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000f641f29fa14d753a2d1a623fd1b6a108bb099c89000000000000000000000000f641f29fa14d753a2d1a623fd1b6a108bb099c890000000000000000000000000000000000000000000000000eb5e06245ea000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16563,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000097503816d20243c45be7575b7e8073d563e7407c00000000000000000000000097503816d20243c45be7575b7e8073d563e7407c000000000000000000000000000000000000000000000000027f71d2f1eadaf600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16565,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008fbdc7f65515729a5a5c4f3456811599bf759f260000000000000000000000008fbdc7f65515729a5a5c4f3456811599bf759f2600000000000000000000000000000000000000000000000001a0eb308e6b7f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16566,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000004382672867e32f33e71f75689f4c2b5dcd347e000000000000000000000000004382672867e32f33e71f75689f4c2b5dcd347e00000000000000000000000000000000000000000000000002be41224e6017e900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16567,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000005a34e436a32357eb845f9770002958c4202cd0180000000000000000000000005a34e436a32357eb845f9770002958c4202cd018000000000000000000000000000000000000000000000000000000003ba96e0c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x854488f29855f4aed9679675379ad6f475f2b753bb9f3bd4f710a4ec32a435b9,2021-11-26 07:49:12.000 UTC,0,true -16568,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000f0eba858b3ac74f1302695f87968acb3d42b6b02000000000000000000000000f0eba858b3ac74f1302695f87968acb3d42b6b020000000000000000000000000000000000000000000000000e92596fd629000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16569,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000022e524662e2bf804654517d40fa8124a8291953e00000000000000000000000022e524662e2bf804654517d40fa8124a8291953e000000000000000000000000000000000000000000000000000000003bc1f37100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x81e670ba95821d87cb427ecfdc26a0d064f6618725710199d5660172dd845a13,2021-11-26 07:57:24.000 UTC,0,true -16570,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000003ddf486383cc45c4074ab41b3c116ad1f9241e660000000000000000000000003ddf486383cc45c4074ab41b3c116ad1f9241e66000000000000000000000000000000000000000000000000000000003bc1639400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xba16561d6575be0d88f573c9de52b9a6b1bcad7889afa6926cf0dcb08cd75ac9,2021-11-26 08:13:09.000 UTC,0,true -16571,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000002b7bf82481f32fb20b0b99e751ba757c76f53dad0000000000000000000000002b7bf82481f32fb20b0b99e751ba757c76f53dad000000000000000000000000000000000000000000000000000000003baf69f600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x14eb889a0a1f061c7a43ffce423e1c812afcca7992ea97683b2e79acbe28b578,2021-11-26 08:17:40.000 UTC,0,true -16572,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a4cdcd9bfd5c11d0c9e1db05fe8706b99b822f7e000000000000000000000000a4cdcd9bfd5c11d0c9e1db05fe8706b99b822f7e00000000000000000000000000000000000000000000000000aa410173e4774d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16573,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000091b778d58c92cf61325f5dcc4a5e117a6bdc0d8500000000000000000000000091b778d58c92cf61325f5dcc4a5e117a6bdc0d85000000000000000000000000000000000000000000000000000000003bb7c01000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x48ed0caa0ba892a7a34b15f754664b6366cd259c874d63411dd35ea2ec556112,2021-11-26 08:30:30.000 UTC,0,true -16574,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000009867d2c7983aa2a163bb5837c9a9b5eb88d1a37b0000000000000000000000009867d2c7983aa2a163bb5837c9a9b5eb88d1a37b000000000000000000000000000000000000000000000000000000003bb72ba000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xd28b67bebb78ff76226993dfb6e646795a1d43a0c8fd2edef2ef9499e9e7eb56,2021-12-06 06:23:24.000 UTC,0,true -16575,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001fe38aba75d5eb1a9b4bef00613ad225d8092d180000000000000000000000001fe38aba75d5eb1a9b4bef00613ad225d8092d18000000000000000000000000000000000000000000000000005d8c53afc1ba3000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16576,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000008a547c228fe1001ce8395d9820ac60d5de8c2bf80000000000000000000000008a547c228fe1001ce8395d9820ac60d5de8c2bf8000000000000000000000000000000000000000000000000000000003b9d2a9800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x2f1bf26c9c0781c6040a57fd49dbfec1432f08b44f8761b04f22fa59930054d7,2021-12-06 06:26:24.000 UTC,0,true -16577,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007da91d7c55c818d06a7e405fbd719cea0310c43d0000000000000000000000007da91d7c55c818d06a7e405fbd719cea0310c43d000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16578,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000dd801247f030dcc38e839d04fa9dc82b0ac92c51000000000000000000000000dd801247f030dcc38e839d04fa9dc82b0ac92c51000000000000000000000000000000000000000000000000000000003ba1e13c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xa9d809efe4ecd53eb60417ad580b364176d24892013cdb410d59146497d294ba,2021-12-06 06:28:29.000 UTC,0,true -16579,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000080afc7e083e81ce2aeb0ed17c15c6253a11ae49f00000000000000000000000080afc7e083e81ce2aeb0ed17c15c6253a11ae49f0000000000000000000000000000000000000000000000000efcee47256c000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16580,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000000d3a50bac8dd8b3c1b6d6a92a91c79a685a3800e0000000000000000000000000d3a50bac8dd8b3c1b6d6a92a91c79a685a3800e000000000000000000000000000000000000000000000000000000003bbf845800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xa3808fe50fef32f956ee9e2ddb05e09ab8885ceef9307de4b49e26baebc857d2,2021-12-06 06:30:25.000 UTC,0,true -16581,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000276eb3c55a80b005432a88de569a8be1bc4b2ad7000000000000000000000000276eb3c55a80b005432a88de569a8be1bc4b2ad7000000000000000000000000000000000000000000000000000000003bb439b800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x6628874dacff3f28c3df69cff586bbb02fc7b3f2a1a81c435ae178743b2e6c14,2021-12-06 06:34:14.000 UTC,0,true -16582,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000004a6aafb11caf7e4c6d591707ffa421b0fbe4f2f20000000000000000000000004a6aafb11caf7e4c6d591707ffa421b0fbe4f2f20000000000000000000000000000000000000000000000000000000035cffbe200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x39e1d529c1d1b3eaa7997eb3376a3050ba182c016c0e10cba51bcc0a34039448,2021-12-06 06:37:12.000 UTC,0,true -16583,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000825dd5f32adc2df67ae4bf503ff3f348299578c2000000000000000000000000825dd5f32adc2df67ae4bf503ff3f348299578c20000000000000000000000000000000000000000000000000e609c82d34e000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16584,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000035c59a6e195dac739a51a74c52d6ae986eb8d27300000000000000000000000035c59a6e195dac739a51a74c52d6ae986eb8d2730000000000000000000000000000000000000000000000000e55f406e4fa800000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16585,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000eba34ce0cd07f2df484ce6f04c6f89b18a2a4760000000000000000000000000eba34ce0cd07f2df484ce6f04c6f89b18a2a476000000000000000000000000000000000000000000000000006f05b59d3b2000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16586,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000787c0764bfbb8bb191cc72425e859d7fed4ba050000000000000000000000000787c0764bfbb8bb191cc72425e859d7fed4ba0500000000000000000000000000000000000000000000000000057ef912bbd906f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16587,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000cf5c09df16f1c621f3c90af7d0d7b5d195980c44000000000000000000000000cf5c09df16f1c621f3c90af7d0d7b5d195980c440000000000000000000000000000000000000000000000000e5266884034000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16588,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b448d779599d13d599034ce158d998ecc81ca1ef000000000000000000000000b448d779599d13d599034ce158d998ecc81ca1ef00000000000000000000000000000000000000000000000000aad265f9ebc1a700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16589,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000fb5a64c43128962277cd202310ab6662b72722b2000000000000000000000000fb5a64c43128962277cd202310ab6662b72722b20000000000000000000000000000000000000000000000000e609c82d34e000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16591,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000004477db1ec914ab90e20d9071cd760a5da47878f90000000000000000000000000000000000000000000000001a5e27eef13e0000,,,1,true -16593,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094ee763f9930ea718b9c131c58f20f227dc5279500000000000000000000000094ee763f9930ea718b9c131c58f20f227dc527950000000000000000000000000000000000000000000000000060f4dfcdd1285100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16594,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000000db7d61baf85ff477d683377ed140aa3af66039c0000000000000000000000000db7d61baf85ff477d683377ed140aa3af66039c000000000000000000000000000000000000000000000000000000001035464200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16595,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000834bd96881486ae605f3bac3595f7d635c6efd78000000000000000000000000834bd96881486ae605f3bac3595f7d635c6efd7800000000000000000000000000000000000000000000000000aa9fd30073452e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2bc76e4b70144c85578fc3e4f3fb6b7c012fc0acbfc607015134cdcec55dacfe,2021-12-20 13:02:43.000 UTC,0,true -16596,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001c1f677a42909cccc0f50b4c85d82977281b0c0c0000000000000000000000001c1f677a42909cccc0f50b4c85d82977281b0c0c00000000000000000000000000000000000000000000000000003f9d3d5e370000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16597,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e81669100000000000000000000000041e8e159b4bc5375827c26ca2be353bae277bb0200000000000000000000000041e8e159b4bc5375827c26ca2be353bae277bb0200000000000000000000000000000000000000000000000021062d3080e719c100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16598,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000041e8e159b4bc5375827c26ca2be353bae277bb0200000000000000000000000041e8e159b4bc5375827c26ca2be353bae277bb02000000000000000000000000000000000000000000000000005347f3036c7fa800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16601,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000690dae9338ba55bffbd6e00e77c42d4fd1e04fe9000000000000000000000000690dae9338ba55bffbd6e00e77c42d4fd1e04fe90000000000000000000000000000000000000000000000000036386afea0910000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16602,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000543b32df9413874e8711fc71a40bd964fb322016000000000000000000000000543b32df9413874e8711fc71a40bd964fb32201600000000000000000000000000000000000000000000000000a90ec8b432590900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16609,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e816691000000000000000000000000d004846f7676672414f50b39bcfd39c283c870cc000000000000000000000000d004846f7676672414f50b39bcfd39c283c870cc00000000000000000000000000000000000000000000000545a4a94bcaffe19f00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xda365c3530d52e127077394ee38c752cf4f9ea6298ec075490954cd012bc6195,2021-12-19 09:03:09.000 UTC,0,true -16611,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000274a18ef14d86d00f4a07e811d1dca3ff8b180a9000000000000000000000000274a18ef14d86d00f4a07e811d1dca3ff8b180a9000000000000000000000000000000000000000000000000000000002217182c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xcd3bc1f7a32a179cc2d70c23fbf7c4904d1e711603d20c7751be4d3ac7efcecc,2021-12-11 13:43:49.000 UTC,0,true -16612,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000090066d6807ff44488331e7fa902fa50064c9785300000000000000000000000090066d6807ff44488331e7fa902fa50064c97853000000000000000000000000000000000000000000000000025ca5e83986ac8700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16616,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fd1fb4cab680c3f30dc2e45b416e0450d0c0e93f000000000000000000000000fd1fb4cab680c3f30dc2e45b416e0450d0c0e93f0000000000000000000000000000000000000000000000000e720e9ec352d79500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x23a84e986640be1a661b81d00a6005c0662aae69363e30526e64c4c87d17f28e,2021-12-09 14:14:54.000 UTC,0,true -16617,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fa8083a23e16f78a4b64e154ab76aca50e8a8635000000000000000000000000fa8083a23e16f78a4b64e154ab76aca50e8a8635000000000000000000000000000000000000000000000000002014073a68950000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16618,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a152b8488c89268d0e6f3b8e2217e2cbea87bb43000000000000000000000000a152b8488c89268d0e6f3b8e2217e2cbea87bb4300000000000000000000000000000000000000000000000001f4e9aae366df7400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xcff929e2fe7aceb974ad77360a1c16aea57ba2fd7ef4cab04d208f9ba2b9463b,2021-12-18 18:11:48.000 UTC,0,true -16621,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d51e08e9518ef4eadf4df312ddad49e0f0febde0000000000000000000000000d51e08e9518ef4eadf4df312ddad49e0f0febde000000000000000000000000000000000000000000000000001f46daf7ed9f74b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xfa496664a66da62964ad90f49f76bc02947d6b38db01f777c7c50293498ddf25,2022-04-23 15:16:35.000 UTC,0,true -16622,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001d812b38e4dffb92b21aba2338b529b72af6378e0000000000000000000000001d812b38e4dffb92b21aba2338b529b72af6378e00000000000000000000000000000000000000000000000002821e82d99220d500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16623,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e03a816fd580cbc6956027440d038041918b45b7000000000000000000000000e03a816fd580cbc6956027440d038041918b45b70000000000000000000000000000000000000000000000000005bfa98481f38b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16624,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cb4620765165432b84130624e52b15dc209476c4000000000000000000000000cb4620765165432b84130624e52b15dc209476c400000000000000000000000000000000000000000000000000d43a002bb3354500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16625,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d8b62078a5b6219532a9a5f68cdb7cffaad07e9f000000000000000000000000d8b62078a5b6219532a9a5f68cdb7cffaad07e9f00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16626,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ecc3be441d6ac9e977a36079014b4c920eb39585000000000000000000000000ecc3be441d6ac9e977a36079014b4c920eb39585000000000000000000000000000000000000000000000000022ae5ed018153bd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x88729d324d0bac13c16a0cb816088a67fbdfedd5e86fd2ff6459530b76b9475d,2021-12-18 18:11:48.000 UTC,0,true -16627,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d42a2fdea3714a15ffdf86ea3873e05d79838500000000000000000000000000d42a2fdea3714a15ffdf86ea3873e05d7983850000000000000000000000000000000000000000000000000024f8b00d610eb0a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x83bd91bccf410ebf8e6f2a50cea3a8169d331bc37ed5883d2e4bcd15156c7beb,2021-12-18 18:10:02.000 UTC,0,true -16628,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000088977418747bbf018f1e8b38c94b9d4619e509f800000000000000000000000088977418747bbf018f1e8b38c94b9d4619e509f8000000000000000000000000000000000000000000000000027340ce1a4b8d0200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7bb5d6a7a67d317b070901246920531533376af6121e212a0e7422c59f34792f,2021-12-18 18:07:42.000 UTC,0,true -16629,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c9a03e2d7d169bf07e29cd2ee0452f1900099bd0000000000000000000000008c9a03e2d7d169bf07e29cd2ee0452f1900099bd00000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x24a260280e5906e493125926907a89dc5e4ae226915b60879597a1c406ad512b,2021-12-18 18:07:40.000 UTC,0,true -16630,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c9a03e2d7d169bf07e29cd2ee0452f1900099bd0000000000000000000000008c9a03e2d7d169bf07e29cd2ee0452f1900099bd00000000000000000000000000000000000000000000000000669adac7e9720000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xeb85c0720b35459749ef53b6f1f91a74123e848003a6384072531633c2e56a92,2021-12-18 18:05:31.000 UTC,0,true -16631,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009376569d21c11cf0b794a1738276fc6af3b26bba0000000000000000000000009376569d21c11cf0b794a1738276fc6af3b26bba00000000000000000000000000000000000000000000000002b9a4538e9ba12900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd97025d06fe7db62d33a6a71c57df47c28b2a2766fc3c55d68a2abdecafdc9ac,2021-12-18 18:01:28.000 UTC,0,true -16632,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000087e8e70b6651cba5c7ab8a3cc808086437ccfda300000000000000000000000087e8e70b6651cba5c7ab8a3cc808086437ccfda300000000000000000000000000000000000000000000000002d9bb35da8c290c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x6c6f9863b25c1d39ad836810bfc0ab17e0535cb05063c4acbd52aed4f17005f9,2021-12-18 18:07:40.000 UTC,0,true -16633,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ce440d67394a858a69d8aa720c65d2bb769d5fe0000000000000000000000006ce440d67394a858a69d8aa720c65d2bb769d5fe0000000000000000000000000000000000000000000000000301b1338844df3200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9eb8640f521252e355cad9e347484832015c31a56604c144074eb81ec9064e6e,2021-12-18 18:00:30.000 UTC,0,true -16634,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000876c06abb421abda10bdcc11c391e3c9ffa910b6000000000000000000000000876c06abb421abda10bdcc11c391e3c9ffa910b6000000000000000000000000000000000000000000000000032678de5cd749fe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2cc28b524f87886666ffacc61f832bf1ec1bcfdd7165094e954b726bbf4b2a1a,2021-12-18 17:59:41.000 UTC,0,true -16635,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b82eb6c935525b961c31cd7ae3974c27b95b6f7f000000000000000000000000b82eb6c935525b961c31cd7ae3974c27b95b6f7f00000000000000000000000000000000000000000000000003016562ba5e289e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x8a66141421c78484b401585e18ecd0c5a20a754742b0b14f910ce393cfefa20b,2021-12-18 17:59:06.000 UTC,0,true -16636,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c29f4f7427313ec1faa6a82c972aa93a4e5e719c000000000000000000000000c29f4f7427313ec1faa6a82c972aa93a4e5e719c000000000000000000000000000000000000000000000000036c9e868696ea0d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7e9b3b6d378bc96fc0820330059b6a169dc32878830ec03afce4ecc5ee200473,2021-12-18 17:56:57.000 UTC,0,true -16637,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000832c238cee46cd0e763b48c234f06bfba551335c000000000000000000000000832c238cee46cd0e763b48c234f06bfba551335c0000000000000000000000000000000000000000000000000207444a9afa1a9300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xfb35b38e690f5eec941d1ab6c938829e3be9c7b0803cbc4a40cbb1f5aa19fcee,2021-12-18 17:56:43.000 UTC,0,true -16638,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aba877ffb70502dbe16b2241dccb4428b192d1dc000000000000000000000000aba877ffb70502dbe16b2241dccb4428b192d1dc0000000000000000000000000000000000000000000000000048988ef1bd32ba00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x3f120134b6e3606d5e414d7b786ac95f61fb50c1e73719010a6a6bade1f099b0,2022-05-18 07:30:56.000 UTC,0,true -16640,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000264ba3fa47bd6c10536b8ef801109a84ab70b6fc000000000000000000000000264ba3fa47bd6c10536b8ef801109a84ab70b6fc000000000000000000000000000000000000000000000000022b54905e57736e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x02de9d87f164c5e2328354a7510abdf09866764de44d48184966917ae3f2143b,2021-12-18 18:04:08.000 UTC,0,true -16641,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000567b1c49e7ab1435ccecd62459d8d1c5fa4356c3000000000000000000000000567b1c49e7ab1435ccecd62459d8d1c5fa4356c3000000000000000000000000000000000000000000000000022caf3a77a01da800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x0145affcdcac6aeb446a62a23cf60a82b3672646d31a663a5195f19a2caa07b8,2021-12-18 17:57:50.000 UTC,0,true -16642,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003aa68ac4765f1112611b598e59b2f3da624fbe600000000000000000000000003aa68ac4765f1112611b598e59b2f3da624fbe6000000000000000000000000000000000000000000000000002526a89d2fb598900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x69e8bb94786c7cae651c52874d57c302f222c2827836752d10b6f89154482c6d,2021-12-18 17:47:55.000 UTC,0,true -16643,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ab77f357dcb26fb296bd4f8a757d3ec3f015a410000000000000000000000002ab77f357dcb26fb296bd4f8a757d3ec3f015a410000000000000000000000000000000000000000000000000250c56498eac5f800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x6c172c02b0baa2e6cf0e22558fbff6f07e211b48c2c93167e8a1b70688fd72c9,2021-12-18 17:46:36.000 UTC,0,true -16644,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001606cd117e229d2a6c97c0b33382c5a75932b9e30000000000000000000000001606cd117e229d2a6c97c0b33382c5a75932b9e3000000000000000000000000000000000000000000000000022d77876d8909a600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x3107c8ebcecb27ea7c3c615ef3b20104eb99f17e6592de7721b8373f5a2a91e7,2021-12-18 17:46:26.000 UTC,0,true -16645,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000465dca9995d6c2a81a9be80fbced5a770dee3dae000000000000000000000000465dca9995d6c2a81a9be80fbced5a770dee3dae000000000000000000000000000000000000000000000000035d8b7c89e60d2000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16647,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd244e565d07f2247ec8e2ff8bea7d7f5182566a000000000000000000000000bd244e565d07f2247ec8e2ff8bea7d7f5182566a0000000000000000000000000000000000000000000000000273c7a4c0ad1df400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x4b5da98a1176d85257d650f0e4878c8530f065d39bc8cdfd6de466009504daf3,2021-12-18 17:46:26.000 UTC,0,true -16648,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000375c42839d55b5c2fb51688e737d7645468c9b95000000000000000000000000375c42839d55b5c2fb51688e737d7645468c9b9500000000000000000000000000000000000000000000000002b8e81fc4627f3b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf448395b5a95893ccd9b6fb97e990cab4136310933903f86a6d50666fe68e558,2021-12-18 17:44:29.000 UTC,0,true -16649,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b167f0c11d6813240099c9fbe32983d9a01078e0000000000000000000000001b167f0c11d6813240099c9fbe32983d9a01078e0000000000000000000000000000000000000000000000000300bc138126f0fc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x27e6088ba4f60ffe4cb5d43143f39fecb14bb70c1589513b5fba5fb0769763a2,2021-12-18 17:39:56.000 UTC,0,true -16650,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008deeaa63b610bd4cf0bb54e11d5b8258d25267660000000000000000000000008deeaa63b610bd4cf0bb54e11d5b8258d252676600000000000000000000000000000000000000000000000001635e52cf283e6700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16651,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000003e65612bb2ba3d98e3a4728e22fe4740237da3400000000000000000000000003e65612bb2ba3d98e3a4728e22fe4740237da3400000000000000000000000000000000000000000000000003273d20490ebcd000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x191956bc5cf0f7261f0ccce841d935626d70e50aef3e3b66195fd69de95bb827,2021-12-18 17:38:33.000 UTC,0,true -16652,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000514040cf6b5c0fb7a5e245a0e628867ae675ae25000000000000000000000000514040cf6b5c0fb7a5e245a0e628867ae675ae250000000000000000000000000000000000000000000000000349cda3dabcece700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x3bb5ce5ecc4bb2f56c71615682e75bf7cd0b6d163b028e41eb6166ba69e23bcc,2021-12-18 17:37:53.000 UTC,0,true -16653,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000584b1c4db87c222bd7ff3b8fdeef337b1e8cf416000000000000000000000000584b1c4db87c222bd7ff3b8fdeef337b1e8cf41600000000000000000000000000000000000000000000000003253e3dbab0721e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x79e32123604dca1506b8a31a77bed15c5d54a18b159ebbd6f1c138654348a7fa,2021-12-18 17:35:00.000 UTC,0,true -16654,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005638fe6b8fb55b2fc9a2ccc25a95404bd6b397350000000000000000000000005638fe6b8fb55b2fc9a2ccc25a95404bd6b3973500000000000000000000000000000000000000000000000003253e3dbab0721e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x4b4eba740f3a560c256d63db7f8b55646c68b0581536b13f68ed17addfbcfafe,2021-12-18 17:27:28.000 UTC,0,true -16655,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f08a9f930dcf9606facdaf6be404b0f3b11ca520000000000000000000000007f08a9f930dcf9606facdaf6be404b0f3b11ca5200000000000000000000000000000000000000000000000002505abd83c4d5df00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x4cb1fa15370bb80179e9ca9412e47efadd49aabbe817f66be6f5381d745b4156,2021-12-18 17:19:20.000 UTC,0,true -16656,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000594cb92be8f6153cf00f6500d6655397d1eefd39000000000000000000000000594cb92be8f6153cf00f6500d6655397d1eefd390000000000000000000000000000000000000000000000000207b2b618424e8300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x12bc6113da5ee90bcca55f4dc6ba76fc93bf41c40f4ef00766145f23e17ba1af,2021-12-18 00:35:49.000 UTC,0,true -16657,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000e1061be8f7590a2601ff3db6a16c4e7d41a9bd5c000000000000000000000000e1061be8f7590a2601ff3db6a16c4e7d41a9bd5c000000000000000000000000000000000000000000000303a13bd93eb18ace9a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x3c3be6a741e45538809733683e255200d6c72f4bcff939f11cd70de0f2168ae0,2021-12-17 00:22:04.000 UTC,0,true -16658,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fbd140bf147bd4a38f6fa1f7bdfc6e35b7df9837000000000000000000000000fbd140bf147bd4a38f6fa1f7bdfc6e35b7df9837000000000000000000000000000000000000000000000000017c17d5472564ea00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x8645611523e6b4dfd4218b9172bdd2fe4eb12f5e715493f136a14a00c0195000,2021-12-10 07:45:19.000 UTC,0,true -16659,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007cc927f4a57dbd8cc29f2cb72c962ef5c5b0f6c20000000000000000000000007cc927f4a57dbd8cc29f2cb72c962ef5c5b0f6c200000000000000000000000000000000000000000000000000a4465becb9f2aa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16661,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000063e3213987ebce0517b6c6577534dcfa2e08c76c00000000000000000000000063e3213987ebce0517b6c6577534dcfa2e08c76c0000000000000000000000000000000000000000000000000128f55f405540a800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xde2fef190b6b506fc802f3dc007189691272f954eedbf9810abafefb31978ccd,2021-12-10 14:00:49.000 UTC,0,true -16664,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000069b49d9e84fa10548e432b7bb055e70324502f9a00000000000000000000000069b49d9e84fa10548e432b7bb055e70324502f9a00000000000000000000000000000000000000000000000000e90b3ea9fa84b700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16665,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000358c84faa7f860ab41b93edccb7e64f7eb330bb1000000000000000000000000358c84faa7f860ab41b93edccb7e64f7eb330bb100000000000000000000000000000000000000000000000006e5193f899d6d7d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16666,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000b4b04564f56f4795ea4e14d566af78da54a9998000000000000000000000000000000000000000000000001b0e86716a08449cff,,,1,true -16667,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8f09b8d61dfa68389990b247c49101c9514d6d6000000000000000000000000b8f09b8d61dfa68389990b247c49101c9514d6d60000000000000000000000000000000000000000000000000049deca74ae260200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16668,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000669a5e73ab710b7a2e5e060a3726f046f4e7b491000000000000000000000000669a5e73ab710b7a2e5e060a3726f046f4e7b491000000000000000000000000000000000000000000000000004d1869dbeb8ac000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16670,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000016957feb799ee6c8c4c97d37da5be553ec0039b600000000000000000000000016957feb799ee6c8c4c97d37da5be553ec0039b60000000000000000000000000000000000000000000000000e682ef66420e24d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x3a4f30764421d14d5a18e140588ce6b29be216b6d2e1afe0fa0f823fbb9ab0eb,2022-08-17 10:34:02.000 UTC,0,true -16674,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e2e8fee9ac2af4352a0e424650b77da25c36bf80000000000000000000000000e2e8fee9ac2af4352a0e424650b77da25c36bf80000000000000000000000000000000000000000000000000026df4ea282c3c1d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x8a95dca20df3911ef75736f1a0ddf539afedd19de01516b3666bd09a192dc60d,2021-12-27 02:07:20.000 UTC,0,true -16675,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021a8529a0180fb36037599c375bb37ac765359bd00000000000000000000000021a8529a0180fb36037599c375bb37ac765359bd0000000000000000000000000000000000000000000000000c0e7d8e6b7007a500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16677,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cbad01980e700fbf6bea01b3c25adcd25c22e4b2000000000000000000000000cbad01980e700fbf6bea01b3c25adcd25c22e4b2000000000000000000000000000000000000000000000000002d87d711a62c0f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16681,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fdf05e7f3e9cd329fc58a08ed88e641d083d4a9f000000000000000000000000fdf05e7f3e9cd329fc58a08ed88e641d083d4a9f0000000000000000000000000000000000000000000000000ab8ba1861f2d8c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16682,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fd5250977d6d6b48789aea0cff78580796336bf2000000000000000000000000fd5250977d6d6b48789aea0cff78580796336bf2000000000000000000000000000000000000000000000000013fbe85edc9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x8d774f2fa010aaa5d0ce94bff1e6b70c6a482f91687eed85b257049fb81e5b19,2022-05-30 01:09:16.000 UTC,0,true -16683,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5cb6552fd6561e3e4197020a4c941ebdd6876f6000000000000000000000000e5cb6552fd6561e3e4197020a4c941ebdd6876f600000000000000000000000000000000000000000000000001ff4dbbffde6b6000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16684,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000baa738690c4e617f64c00fcbdb2ee69281d5da80000000000000000000000000baa738690c4e617f64c00fcbdb2ee69281d5da80000000000000000000000000000000000000000000000000032ea341ea4a6f0300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16685,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a9ce001353e021767264f5ab6102e65bc9cd2023000000000000000000000000a9ce001353e021767264f5ab6102e65bc9cd20230000000000000000000000000000000000000000000000000013d5d5cc2d801200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16688,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000469a04b76f03bbafc5ffc31c9e5a53ebab745fde000000000000000000000000469a04b76f03bbafc5ffc31c9e5a53ebab745fde0000000000000000000000000000000000000000000000000e27c49886e6000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16689,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000071c3c6df5f834a55e6edd4b5aa768990d2c5034d00000000000000000000000071c3c6df5f834a55e6edd4b5aa768990d2c5034d0000000000000000000000000000000000000000000000000e4b4b8af6a7000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16690,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000007ff9fa40aaadcc91374e69d4222fef34e7d644710000000000000000000000007ff9fa40aaadcc91374e69d4222fef34e7d644710000000000000000000000000000000000000000000000000e27c49886e6000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16691,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000005ac2371763dfc1b67b009b58e93f4a55779e50dd0000000000000000000000005ac2371763dfc1b67b009b58e93f4a55779e50dd0000000000000000000000000000000000000000000000000e47be0c51e0800000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16692,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000000f298f2c578d25f9f59b03c6d0cb3725b42da7070000000000000000000000000f298f2c578d25f9f59b03c6d0cb3725b42da7070000000000000000000000000000000000000000000000000e92596fd629000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16693,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005811bedd2cbde3f040cbf875fd3cd7ef2bc7878f0000000000000000000000005811bedd2cbde3f040cbf875fd3cd7ef2bc7878f00000000000000000000000000000000000000000000000000b3329905396a2200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16694,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000e2f37ceaeff9549597fcbdadaf3e3545d1b0e0eb000000000000000000000000e2f37ceaeff9549597fcbdadaf3e3545d1b0e0eb0000000000000000000000000000000000000000000000000e6ed27d6668000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16695,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004770cbf93bb7e113abdfdcf8ab71134f018b5d750000000000000000000000004770cbf93bb7e113abdfdcf8ab71134f018b5d7500000000000000000000000000000000000000000000000001143514dbdef79300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x47e866afa67f7b20b7958a6c82728270c78ed9178f51eec79d2abd8b1449fcbc,2021-11-28 10:08:58.000 UTC,0,true -16696,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000005811bedd2cbde3f040cbf875fd3cd7ef2bc7878f0000000000000000000000005811bedd2cbde3f040cbf875fd3cd7ef2bc7878f000000000000000000000000000000000000000000000000000000000e483be700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16697,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fa2ae7a2b9afea302839429a4307effe00f72d55000000000000000000000000fa2ae7a2b9afea302839429a4307effe00f72d550000000000000000000000000000000000000000000000000f0607ad232f864a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16698,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000005fb2a7793a08de719b0b750fb2961f1281d893a50000000000000000000000005fb2a7793a08de719b0b750fb2961f1281d893a5000000000000000000000000000000000000000000000000000000002fd6f7fe00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16699,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e0012884cc3b4d6fe361dced4b748f53dc5c6fe0000000000000000000000001e0012884cc3b4d6fe361dced4b748f53dc5c6fe000000000000000000000000000000000000000000000000023fcb98613088fb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xb3f055c45ee86955b2b659587223f5124dabb1483115ef2bb0293645c40f21f9,2021-12-12 10:07:29.000 UTC,0,true -16700,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9e52a623a6a19f16bde2cd0aa16df7bc2acc1ee000000000000000000000000c9e52a623a6a19f16bde2cd0aa16df7bc2acc1ee00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16701,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9e52a623a6a19f16bde2cd0aa16df7bc2acc1ee000000000000000000000000c9e52a623a6a19f16bde2cd0aa16df7bc2acc1ee00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16702,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9e52a623a6a19f16bde2cd0aa16df7bc2acc1ee000000000000000000000000c9e52a623a6a19f16bde2cd0aa16df7bc2acc1ee00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16703,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009a13436984309295e093ccda722680befdc2a3de0000000000000000000000009a13436984309295e093ccda722680befdc2a3de00000000000000000000000000000000000000000000000000aa0294bdf7c1f500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16704,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c9e52a623a6a19f16bde2cd0aa16df7bc2acc1ee000000000000000000000000c9e52a623a6a19f16bde2cd0aa16df7bc2acc1ee00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16705,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000abf48bbcb7816c4a89362537ae6719b62f8885e4000000000000000000000000abf48bbcb7816c4a89362537ae6719b62f8885e400000000000000000000000000000000000000000000000002fc35846d77e2b100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x51f39d0df7a0d5b43e2befb3862d3fa724a1c0e210de44defb6678c1c4b3894c,2022-01-24 19:51:49.000 UTC,0,true -16709,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000261f1a7031f27e55b8a89bfca26a625eb4036694000000000000000000000000261f1a7031f27e55b8a89bfca26a625eb4036694000000000000000000000000000000000000000000000000013875b27dd1001e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16710,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ddbcb5be8b445a60c15380137e6f7d6ef4689190000000000000000000000007ddbcb5be8b445a60c15380137e6f7d6ef46891900000000000000000000000000000000000000000000000000cc90b4762ac00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16712,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001f4c2e01760fc3dca50aba4b1bdca066592c57af0000000000000000000000001f4c2e01760fc3dca50aba4b1bdca066592c57af0000000000000000000000000000000000000000000000000257af48694d667f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x3b5380d46c626a38900680296ed9401e9ba2eb425955f084ceea18f930d3ac51,2021-11-21 07:11:26.000 UTC,0,true -16714,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000001f4c2e01760fc3dca50aba4b1bdca066592c57af0000000000000000000000001f4c2e01760fc3dca50aba4b1bdca066592c57af000000000000000000000000000000000000000000000014574994cdeafbf67000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x171833b83beb73806731096ab04b1af6fe8702254447a816cf4561836bfcedf6,2021-11-21 07:14:35.000 UTC,0,true -16715,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007cea25d6a18abf648ef0bc70ad70c962b87564c40000000000000000000000007cea25d6a18abf648ef0bc70ad70c962b87564c400000000000000000000000000000000000000000000000003d890fa19610fb600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7bcbb0c1e1aeffb9b46c9a244f26f2fd6e1b4ae68c63aae40b7817d07f5783be,2021-11-24 11:52:33.000 UTC,0,true -16717,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a2e7d7abb825e77015a639f9d867117bd43a7c00000000000000000000000000a2e7d7abb825e77015a639f9d867117bd43a7c0000000000000000000000000000000000000000000000000000abe684e8226f2800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16718,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c7996f170cdeeae270f13d58e3e0d0ae1b9f3880000000000000000000000002c7996f170cdeeae270f13d58e3e0d0ae1b9f38800000000000000000000000000000000000000000000000001a2caf43939d9ba00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16719,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0e1a32409cb788797035885d580a9493d346f5d000000000000000000000000c0e1a32409cb788797035885d580a9493d346f5d000000000000000000000000000000000000000000000000007303d28656748b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16720,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000978482015863de289a738cd9fa44ffa9a71156d1000000000000000000000000978482015863de289a738cd9fa44ffa9a71156d100000000000000000000000000000000000000000000000000488dc571d991ad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16723,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000311febd2efbe8d2b2646d708dfba70a2e6fae030000000000000000000000000311febd2efbe8d2b2646d708dfba70a2e6fae0300000000000000000000000000000000000000000000000000e27c49886e6000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16724,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000abfd99a7da59e8b96f1cefa6e35fd03e6831bc10000000000000000000000000abfd99a7da59e8b96f1cefa6e35fd03e6831bc1000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16725,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000008508cabb156b0624b3c3be004709c8890080b56b0000000000000000000000008508cabb156b0624b3c3be004709c8890080b56b0000000000000000000000000000000000000000000000000e043da61725000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16726,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000d2df0d14a20bfa3be92ba9b694de41b0bf3a6287000000000000000000000000d2df0d14a20bfa3be92ba9b694de41b0bf3a62870000000000000000000000000000000000000000000000000e043da61725000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16727,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000002766c7a52e9cdb67372fa8b7139de9da8c63bdd70000000000000000000000002766c7a52e9cdb67372fa8b7139de9da8c63bdd70000000000000000000000000000000000000000000000000e4b4b8af6a7000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16729,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b3e7e79fdd91565fe0f16303377d87ef2b8e811d000000000000000000000000b3e7e79fdd91565fe0f16303377d87ef2b8e811d00000000000000000000000000000000000000000000000000b05a53b960f50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16733,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b00e4bbe8656c98a4d95f18c2f381e86da94243f000000000000000000000000b00e4bbe8656c98a4d95f18c2f381e86da94243f00000000000000000000000000000000000000000000000000a52234d99d98fd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x00ebb490ccefd3d2077d287c966e643ac919176837b62ce94c2a4bd9653e80ec,2022-08-14 12:46:07.000 UTC,0,true -16734,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000032d2f9e5f38ac0459cb5a3c22374f1d826b1d7f000000000000000000000000032d2f9e5f38ac0459cb5a3c22374f1d826b1d7f000000000000000000000000000000000000000000000000003305efc166e4ee00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16735,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b3f3b7a78410e1d0214e9e704b0fa4d7145ff248000000000000000000000000b3f3b7a78410e1d0214e9e704b0fa4d7145ff24800000000000000000000000000000000000000000000000000ababec6b154e1e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16736,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd41805c022e23daa5703159f7439213ff57d243000000000000000000000000bd41805c022e23daa5703159f7439213ff57d24300000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16737,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000797d27a0a90bf878350f6cb80c50f09598246ab9000000000000000000000000797d27a0a90bf878350f6cb80c50f09598246ab90000000000000000000000000000000000000000000000000006e62275544f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16739,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a4f2ade0bc540edee69d3324abfe049655480c91000000000000000000000000a4f2ade0bc540edee69d3324abfe049655480c91000000000000000000000000000000000000000000000000003ccaf32149fcc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xac36c877e38cbb70f346a8984ce6aa2d4ff7d9959d6872efe182753499655ec4,2021-12-11 11:35:47.000 UTC,0,true -16740,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000e5c37b43eaad5bcc72e0d5c42cb32a5f3edb048b00000000000000000000000000000000000000000000001c7f25062bfb730903,0xdb01c388f0b6ecee37197800056d31ba9fe494deff3745265f5aace678bd1605,2021-11-24 12:35:42.000 UTC,0,true -16744,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a41ad7e5556125d39fdd17a2846a731ffaa6f5fa000000000000000000000000a41ad7e5556125d39fdd17a2846a731ffaa6f5fa0000000000000000000000000000000000000000000000000024c66e40a11a8800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16745,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003ce5261982fab4890176255b867ae9cdab4bab700000000000000000000000003ce5261982fab4890176255b867ae9cdab4bab7000000000000000000000000000000000000000000000000000552dc947854b0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16746,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000005ec259773b76b215ac0fca91723445e002fa8e360000000000000000000000005ec259773b76b215ac0fca91723445e002fa8e3600000000000000000000000000000000000000000000000000000000020c5f1000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16747,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000618e09582b5f03b1fa2785ddce71b7d96b75017c000000000000000000000000618e09582b5f03b1fa2785ddce71b7d96b75017c00000000000000000000000000000000000000000000000002a303fe4b53000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16751,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000021b9d16971a7dee4102689864f8ff9381943458c00000000000000000000000021b9d16971a7dee4102689864f8ff9381943458c000000000000000000000000000000000000000000000000200cec774738658000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x989622b4617cdc88a083e5c8445844f8b1789e71b8c8746c943e6bc8b427add1,2021-11-29 21:37:42.000 UTC,0,true -16752,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007bcec44c7486143ee875103de66006047cae8df70000000000000000000000007bcec44c7486143ee875103de66006047cae8df700000000000000000000000000000000000000000000000000a7ef8e0df5851b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16754,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0b6b2e2d7d8e687d06ffded2632160377ee1f68000000000000000000000000b0b6b2e2d7d8e687d06ffded2632160377ee1f680000000000000000000000000000000000000000000000000392cba7145d7bfa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16755,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b47f89c3ffa2adb6d539746589820695046e01b9000000000000000000000000b47f89c3ffa2adb6d539746589820695046e01b9000000000000000000000000000000000000000000000000004e3a828ac8b50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16758,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004778b055dfed8f46a2966619f3d8291cf0c706680000000000000000000000004778b055dfed8f46a2966619f3d8291cf0c70668000000000000000000000000000000000000000000000000005281f0c6e777b600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16759,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a90ed84161e6a7c565de94e825e2b2a874e70e50000000000000000000000000a90ed84161e6a7c565de94e825e2b2a874e70e50000000000000000000000000000000000000000000000000ca99104766880cc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2698cee79c9b71c8e64b68d54423ccbf39d97383b32bbddde82587c05058b4df,2021-11-27 21:39:51.000 UTC,0,true -16760,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b3f672982f319f1a141bd9ee91aa186126e43bab000000000000000000000000b3f672982f319f1a141bd9ee91aa186126e43bab0000000000000000000000000000000000000000000000000078292d7ff0f37300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16761,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000015f8745b5f315d56403ecba5724cc222b9f271b300000000000000000000000015f8745b5f315d56403ecba5724cc222b9f271b300000000000000000000000000000000000000000000000000010e14d2e3f44000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16762,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000343a7316f1681cff3171438b8c7aa0e0e828b097000000000000000000000000343a7316f1681cff3171438b8c7aa0e0e828b0970000000000000000000000000000000000000000000000000017d6fa4b8c508000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16766,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008656eacc5ba829549f005da59d8040f1d73d2df90000000000000000000000008656eacc5ba829549f005da59d8040f1d73d2df9000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16768,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ab3fcb1dac9e0eae480c49a832914a230d265a3e000000000000000000000000ab3fcb1dac9e0eae480c49a832914a230d265a3e00000000000000000000000000000000000000000000000000574d68931e147700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16771,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da100000000000000000000000080db58cc6b8a5818bbba36177010330fbf9af62b00000000000000000000000080db58cc6b8a5818bbba36177010330fbf9af62b00000000000000000000000000000000000000000000004737c65fa2b4e96e9a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x9f7adc981bd7c28669fe4b23caf78c2e35924b8f1268c347816636760bbda89d,2022-05-16 01:38:33.000 UTC,0,true -16772,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c73da5668d34972fb210d3bb1fe7592e5716959e000000000000000000000000c73da5668d34972fb210d3bb1fe7592e5716959e0000000000000000000000000000000000000000000000000ccd62399ee926f400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x148c1470a9b40199624f9fe5116bd17849bf493f64774ddc5828f02e8f984335,2021-11-23 10:20:34.000 UTC,0,true -16773,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000659ba0b652fb66bb6c1261f5d0aeaeb30fcfec35000000000000000000000000659ba0b652fb66bb6c1261f5d0aeaeb30fcfec350000000000000000000000000000000000000000000000000855a6b44930182500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16774,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a0bd4b75dc06c7f1860d6f123103404d3f1a1c93000000000000000000000000a0bd4b75dc06c7f1860d6f123103404d3f1a1c930000000000000000000000000000000000000000000000000054dad1bb2cf1c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16775,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000077ee282ab43cc815c12a33a18186c4c37e1ef3ea00000000000000000000000077ee282ab43cc815c12a33a18186c4c37e1ef3ea0000000000000000000000000000000000000000000000000000000027ddf1d300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16777,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e0508e801cf6fca1c302495f91d47af582b6f090000000000000000000000000e0508e801cf6fca1c302495f91d47af582b6f0900000000000000000000000000000000000000000000000000947e91965ae5f100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16779,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c4b10eb0af780a6fd3f2b7ee2deca81a2e3befe0000000000000000000000008c4b10eb0af780a6fd3f2b7ee2deca81a2e3befe0000000000000000000000000000000000000000000000000000f5904616e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16780,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ee00c54b0fa1b4eaf41685db0f8dbf95b0d7437d000000000000000000000000ee00c54b0fa1b4eaf41685db0f8dbf95b0d7437d0000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16782,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c36909271002ce677ad2f71a68704aeda2d3b3dd000000000000000000000000c36909271002ce677ad2f71a68704aeda2d3b3dd0000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16783,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000537449d7e9011ed8ecfefc611850cdcb5d41a3b6000000000000000000000000537449d7e9011ed8ecfefc611850cdcb5d41a3b600000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16784,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099a409fc717ec84acb7d48bff1fd9981190d46ab00000000000000000000000099a409fc717ec84acb7d48bff1fd9981190d46ab0000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16786,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000b5b89f599b4a8859f4ca3f034e7affda6d08d8b0000000000000000000000000b5b89f599b4a8859f4ca3f034e7affda6d08d8b000000000000000000000000000000000000000000000000008c24a91f423f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16787,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006177c71d568960d87e958c38000350ed3276796b0000000000000000000000006177c71d568960d87e958c38000350ed3276796b000000000000000000000000000000000000000000000000028bc9c6b592c12800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16788,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f763c31379b7a717de8fef568600f84c407c7e00000000000000000000000003f763c31379b7a717de8fef568600f84c407c7e00000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16789,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000ff05ce30fe57bff365a03fcc96e401bd42c97900000000000000000000000000ff05ce30fe57bff365a03fcc96e401bd42c97900000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16790,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000040e5a0d553140989460511fe948c38689e791ded00000000000000000000000040e5a0d553140989460511fe948c38689e791ded0000000000000000000000000000000000000000000000000000eaa64e5a200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16791,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000224de5157760bf46ef3981d8eb1beebea73b2114000000000000000000000000224de5157760bf46ef3981d8eb1beebea73b21140000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16792,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000005a513898b701c865091317e855cd8781304b781e0000000000000000000000005a513898b701c865091317e855cd8781304b781e0000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16793,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005a513898b701c865091317e855cd8781304b781e0000000000000000000000005a513898b701c865091317e855cd8781304b781e00000000000000000000000000000000000000000000000000e1b93fb703856100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16794,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001bf97cdadbdd6bc93f8bed9dd9f93d5818780bfa0000000000000000000000001bf97cdadbdd6bc93f8bed9dd9f93d5818780bfa0000000000000000000000000000000000000000000000000000e7ebd06af00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16795,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006a177b1ec0c5e6324a586c3205b598466be5c2aa0000000000000000000000006a177b1ec0c5e6324a586c3205b598466be5c2aa0000000000000000000000000000000000000000000000000000e7ebd06af00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16796,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f8465260550f027511d8552a0f425ae66d055360000000000000000000000007f8465260550f027511d8552a0f425ae66d0553600000000000000000000000000000000000000000000000000a7d2e38172baa500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16797,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061a1353d6ac8cf95918545a63455557a55e5f82400000000000000000000000061a1353d6ac8cf95918545a63455557a55e5f8240000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16798,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000bcd44ca0238940129f6d4e13af10ce1ba8d6c9b8000000000000000000000000000000000000000000000000b36ae3a8acf1a5f7,,,1,true -16799,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc8a9cb6bdbad13a07d2fe70f2bda8a66a79811d000000000000000000000000bc8a9cb6bdbad13a07d2fe70f2bda8a66a79811d0000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16800,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061be9402542ae211ef6b9476e7238d5f3331589f00000000000000000000000061be9402542ae211ef6b9476e7238d5f3331589f00000000000000000000000000000000000000000000000002a5b9a1fddaaf7d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xda58c252833426fbdc6a67a4b603f2b132c825faab15c402c762852841338527,2021-12-13 06:09:17.000 UTC,0,true -16801,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009d70e1c5d4e01c6716565088d36a4e70370c25860000000000000000000000009d70e1c5d4e01c6716565088d36a4e70370c2586000000000000000000000000000000000000000000000000017a728abcb29a2700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16802,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c4fb48b7ba32babc400d078c73feda2593434fe3000000000000000000000000c4fb48b7ba32babc400d078c73feda2593434fe300000000000000000000000000000000000000000000000000bd022a386ac7ba00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe9d7b2ae14536c6469ffa2733c5544c633cfad9f32a9e36255e92adb526e1b96,2021-12-10 12:33:19.000 UTC,0,true -16803,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e3ed6938be54c51f2eb65aa8d97994fc881a5b00000000000000000000000003e3ed6938be54c51f2eb65aa8d97994fc881a5b000000000000000000000000000000000000000000000000000870d378f59a23300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x115001e6c22fda0d80a0916547c4005f6b959efa08cca27148c58ea16057e2c1,2022-04-17 01:40:45.000 UTC,0,true -16804,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cab9a59019a7dc9627dfd16f63f20b8adda22b30000000000000000000000000cab9a59019a7dc9627dfd16f63f20b8adda22b30000000000000000000000000000000000000000000000000016865ce43e8972300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7d07b0b57b98a236affee77c71ee5c966cc4b57461e2f42fc8acf9576ccacdba,2021-12-04 05:07:28.000 UTC,0,true -16806,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f5f01c28d2b8b128e60528226576858742ddcdd0000000000000000000000000f5f01c28d2b8b128e60528226576858742ddcdd000000000000000000000000000000000000000000000000000aa2f8bd3f5efb700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16808,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001458f005d3a56626e394fb17acd64dfae42f581c0000000000000000000000001458f005d3a56626e394fb17acd64dfae42f581c0000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16809,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aca9e6139683c8d131dd63dded180fb13f45eb6e000000000000000000000000aca9e6139683c8d131dd63dded180fb13f45eb6e0000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16810,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006aaeb488295a48f51c08edaa11dce101d5339e2a0000000000000000000000006aaeb488295a48f51c08edaa11dce101d5339e2a0000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16811,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007b71e07ca52415e7581c20391dd9880accc3abcd0000000000000000000000007b71e07ca52415e7581c20391dd9880accc3abcd0000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16812,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000deb7daf37573cca2d722a994ec68048fd185483f000000000000000000000000deb7daf37573cca2d722a994ec68048fd185483f00000000000000000000000000000000000000000000000000a9b86b2fabb00a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16813,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000070675b0fffd9be1739ebfd8d70033a2a0d67727e00000000000000000000000070675b0fffd9be1739ebfd8d70033a2a0d67727e0000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16814,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b157e467e9af944ea91e10d1ae5ae74d3be7ada0000000000000000000000001b157e467e9af944ea91e10d1ae5ae74d3be7ada0000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16815,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000065823e171f037b889c4e1029e8aa34d6b13430700000000000000000000000000000000000000000000011f87220d50ebc1d180,,,1,true -16816,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000037d7f6f6845fce57068f6389283e6c9dd9ed710f00000000000000000000000037d7f6f6845fce57068f6389283e6c9dd9ed710f000000000000000000000000000000000000000000000000055778282dac0a0700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x3e087d66c6aa2abc88ce2c92f7ea1c0c37feedc592b48566e7464c08aad267e4,2021-12-08 16:05:46.000 UTC,0,true -16817,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000123dafc6ba0d25aa362f315486cee7bc823f433d000000000000000000000000123dafc6ba0d25aa362f315486cee7bc823f433d0000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16818,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc1708fe24383cc91c46f9ee360e61335ade5b1a000000000000000000000000fc1708fe24383cc91c46f9ee360e61335ade5b1a0000000000000000000000000000000000000000000000000041b9a6e858400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16819,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a8d3a8717fa5488a817a5bb33822c07cd63a5abe000000000000000000000000a8d3a8717fa5488a817a5bb33822c07cd63a5abe0000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16820,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000016c86b5f07080a6fcbde9b1e09926bea162df46b00000000000000000000000016c86b5f07080a6fcbde9b1e09926bea162df46b0000000000000000000000000000000000000000000000000075438a8a52f67500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16821,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b17a5ff2012ac401880c3e2d4a9fbca50d4baa60000000000000000000000000b17a5ff2012ac401880c3e2d4a9fbca50d4baa600000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16822,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071d314c69bc3167e4e7670f27c8f78e2b072aa4500000000000000000000000071d314c69bc3167e4e7670f27c8f78e2b072aa4500000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16823,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d104b361f416236bd4bcabe11e731dde2b4e0743000000000000000000000000d104b361f416236bd4bcabe11e731dde2b4e07430000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16824,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000306734230a5b02d274cadff38770832ef8630ceb000000000000000000000000306734230a5b02d274cadff38770832ef8630ceb00000000000000000000000000000000000000000000000000507bb88566fea500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16825,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d52e479ced90fb13969e21695bd1d861eb3573b0000000000000000000000005d52e479ced90fb13969e21695bd1d861eb3573b0000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16826,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000afad93492b75cdfb3e685c09966aa8ee6ad872c400000000000000000000000000000000000000000000000001f7b325868aac02,,,1,true -16827,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc41f7fdc1d13ad936d3b3f7032ebdad002f1390000000000000000000000000bc41f7fdc1d13ad936d3b3f7032ebdad002f1390000000000000000000000000000000000000000000000000000c3228b294510400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16828,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001d9698671d792c42afded97b4df08f6b9c585a560000000000000000000000001d9698671d792c42afded97b4df08f6b9c585a56000000000000000000000000000000000000000000000000014dece145ec2c0900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xfef8a83ca1e13494d14d4a5f09ff16758a126f0d046bee7d44d10578ea85097a,2021-12-19 07:56:55.000 UTC,0,true -16830,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cff22f51b57854b8e479d0d2be8c379400e684ad000000000000000000000000cff22f51b57854b8e479d0d2be8c379400e684ad000000000000000000000000000000000000000000000000003d17367d1bd98000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16831,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000096dfa1224bf898d7865ea8fbe077458bbef060f400000000000000000000000096dfa1224bf898d7865ea8fbe077458bbef060f40000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16832,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e464224ad69be6bd28c5bdb8e54087c35d2b2112000000000000000000000000e464224ad69be6bd28c5bdb8e54087c35d2b211200000000000000000000000000000000000000000000000000ac68158a6eb17b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16833,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000622c7344db7c5b64a31e19773e473caa886b4ab3000000000000000000000000622c7344db7c5b64a31e19773e473caa886b4ab30000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16834,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a69d57d1428b65720f0641ec69ef424873588b9b000000000000000000000000a69d57d1428b65720f0641ec69ef424873588b9b000000000000000000000000000000000000000000000000008933289e5a998800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xba53b64802fb1d065e25dd4c9c25b4259855da8c6eada9a24dd42f9a6ce09088,2022-02-06 12:29:34.000 UTC,0,true -16835,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f232b391a27dd36b69f20e814c83eaa6c8370630000000000000000000000000f232b391a27dd36b69f20e814c83eaa6c83706300000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16836,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000041ebf69c471122fbdaa1d543dbb7f15f5083c8e000000000000000000000000041ebf69c471122fbdaa1d543dbb7f15f5083c8e0000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16837,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007599f83c36fa93310a5302c138af0001cf7e47830000000000000000000000007599f83c36fa93310a5302c138af0001cf7e4783000000000000000000000000000000000000000000000000040293cdb57c3d8c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x3a341ae9f48dc542189a71ab97ae4505e98580ada5b5e172ba03ef027cc6b731,2022-03-12 09:53:46.000 UTC,0,true -16838,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002dfb60fcd21d919b26932d36368a8a7f053aa2ed0000000000000000000000002dfb60fcd21d919b26932d36368a8a7f053aa2ed000000000000000000000000000000000000000000000000000e35fa931a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16839,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001630028e5261856e58157e18a2378c68278dc2770000000000000000000000001630028e5261856e58157e18a2378c68278dc2770000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16840,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005450f43f8b1995145f918ee0534452aa691418510000000000000000000000005450f43f8b1995145f918ee0534452aa691418510000000000000000000000000000000000000000000000000152f9d4fdf8291300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16841,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bbdc4b606d1d1d1201f1cf9682143abe7f4a0ece000000000000000000000000bbdc4b606d1d1d1201f1cf9682143abe7f4a0ece0000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16846,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007c0ebe534ae135f84a8d0ac08119247923da10a50000000000000000000000007c0ebe534ae135f84a8d0ac08119247923da10a50000000000000000000000000000000000000000000000000007a22f133e7ec000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16847,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000417176e00b17a5cc618dbcc36b00ea8e0f0c9985000000000000000000000000417176e00b17a5cc618dbcc36b00ea8e0f0c998500000000000000000000000000000000000000000000000003d7ffc0d600866500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf9cc364326e9e1dac15a83a945c52682c0dbc153ab4c95411545ed8257098927,2022-02-05 18:31:41.000 UTC,0,true -16848,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005c3fcf281d8c867fd867f78496c95addd8ad23910000000000000000000000005c3fcf281d8c867fd867f78496c95addd8ad23910000000000000000000000000000000000000000000000000007a22f133e7ec000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16849,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000024409f656e3cdb7fd0b24303898ae6ef4610d64c00000000000000000000000024409f656e3cdb7fd0b24303898ae6ef4610d64c0000000000000000000000000000000000000000000000000011ca20d85fc38000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16850,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e5e494bdeb6c683e425816b44413fc788566618a000000000000000000000000e5e494bdeb6c683e425816b44413fc788566618a00000000000000000000000000000000000000000000000000b030e7f0b32e5600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16851,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004523069170b38d1e3f618b9cf51ce0e05428318e0000000000000000000000004523069170b38d1e3f618b9cf51ce0e05428318e0000000000000000000000000000000000000000000000000034086e9e54af4c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16853,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f1f2dbb03017fe558ae37b92e38c6d0bd22556c9000000000000000000000000f1f2dbb03017fe558ae37b92e38c6d0bd22556c900000000000000000000000000000000000000000000000000150729a82563c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16854,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f83acd92a8c2fe89199389c41e784b7c84e468bc000000000000000000000000f83acd92a8c2fe89199389c41e784b7c84e468bc00000000000000000000000000000000000000000000000000020572709a6ac000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16855,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000087b675e9219a3b870df51449268b8c8c2241bf0c00000000000000000000000087b675e9219a3b870df51449268b8c8c2241bf0c000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16857,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ec8d98f1b747f00eef3b82f17d3a6fc14ef9fb64000000000000000000000000ec8d98f1b747f00eef3b82f17d3a6fc14ef9fb6400000000000000000000000000000000000000000000000000a372491167e71e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x32b8ecb990fd640b11aec774db2403d1392fb8da393f3bb8ac4a6b109b848ac3,2022-09-04 11:25:25.000 UTC,0,true -16859,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ed4292d00c52d1040e0e1f03949be10caa4ba885000000000000000000000000ed4292d00c52d1040e0e1f03949be10caa4ba885000000000000000000000000000000000000000000000000015d6279fd6aad4700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xcf083625196e984745dfefd5ba44367b775505290ff5c86e93cd7e3ac7fa2bd4,2021-12-11 09:25:21.000 UTC,0,true -16860,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000000e331b752bc500d8699a183ad9594b95a5fdf5fe0000000000000000000000000e331b752bc500d8699a183ad9594b95a5fdf5fe000000000000000000000000000000000000000000000000000000000610612a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16864,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002ad6be6a50d93a485a82b897991c6cba0879c87b0000000000000000000000002ad6be6a50d93a485a82b897991c6cba0879c87b00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16865,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000350a791bfc2c21f9ed5d10980dad2e2638ffa7f60000000000000000000000005ec259773b76b215ac0fca91723445e002fa8e360000000000000000000000005ec259773b76b215ac0fca91723445e002fa8e360000000000000000000000000000000000000000000000002b7e6808fdb629d700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16866,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ec259773b76b215ac0fca91723445e002fa8e360000000000000000000000005ec259773b76b215ac0fca91723445e002fa8e36000000000000000000000000000000000000000000000000004d22ac15e0f74b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16868,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000c102dd014ba57c1a5a431d996edc87cdf78b897a00000000000000000000000000000000000000000000002ae698982a47e28e30,,,1,true -16869,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ee41f2aca01759210b36a5361c3ef29e17a2aa40000000000000000000000007ee41f2aca01759210b36a5361c3ef29e17a2aa400000000000000000000000000000000000000000000000000aa2fac3f12909400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16870,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f07e2fc66c75982e7c35149d3d500e37b0e8b0b0000000000000000000000002f07e2fc66c75982e7c35149d3d500e37b0e8b0b0000000000000000000000000000000000000000000000000034c4f04feb6cd200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16871,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000055d69ffabcc1137c4d8a7143d5cfcc03e7710c7000000000000000000000000055d69ffabcc1137c4d8a7143d5cfcc03e7710c700000000000000000000000000000000000000000000000000600d6d79d1d57e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16872,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009a5da4e26d99fb53daedae1e947158ecb656c6250000000000000000000000009a5da4e26d99fb53daedae1e947158ecb656c62500000000000000000000000000000000000000000000000000a9d9f7900cc33d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16873,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004bb02c6a86cc516e355bd25ff48ce800355af2b70000000000000000000000004bb02c6a86cc516e355bd25ff48ce800355af2b700000000000000000000000000000000000000000000000000aac186ad1c0e8e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16874,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3e425f2d8369287087fd149df99f108cb3f97d0000000000000000000000000d3e425f2d8369287087fd149df99f108cb3f97d000000000000000000000000000000000000000000000000000188fb4755d74c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16875,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009408cd0da72bff5f87cddc07bdd2e44fd512b71a0000000000000000000000009408cd0da72bff5f87cddc07bdd2e44fd512b71a00000000000000000000000000000000000000000000000000349d2764a870c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16877,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006b601a4bb4e2a09559cfcbbc73d0f3e5cfea262e0000000000000000000000006b601a4bb4e2a09559cfcbbc73d0f3e5cfea262e000000000000000000000000000000000000000000000000009aaeed27425c4d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16878,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039a6afc920eab4722cf217ba84644ebd6adecf1500000000000000000000000039a6afc920eab4722cf217ba84644ebd6adecf1500000000000000000000000000000000000000000000000006edb40816211d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x850e46b9905a7097657368439928a878ea319398ee5ac1805cdc9c1ecdb42f17,2022-07-21 22:38:16.000 UTC,0,true -16880,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ed2d1e71eaebdbc4aec6e04cdc0b07bb0113d889000000000000000000000000ed2d1e71eaebdbc4aec6e04cdc0b07bb0113d8890000000000000000000000000000000000000000000000000028ad1e9502c04000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16881,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000709fea9fac17d22c704042968823f1742226b2d1000000000000000000000000709fea9fac17d22c704042968823f1742226b2d100000000000000000000000000000000000000000000000000609f9eddf9ae8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16884,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000bbb06f09101965daf51756b0b59620a245140cc2000000000000000000000000000000000000000000000000244bf69364bd6179,,,1,true -16886,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf9ed12538fcb472f33e2e8bc2d0a4669ac0913c000000000000000000000000cf9ed12538fcb472f33e2e8bc2d0a4669ac0913c000000000000000000000000000000000000000000000000008700cc7577000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16887,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e25fab412cc70cac0104ca99362d2331a7d69b8e000000000000000000000000e25fab412cc70cac0104ca99362d2331a7d69b8e000000000000000000000000000000000000000000000000027fe6abb9a1ec7f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16888,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a8c411e0b012dba8ced3ccbbcf0335739ec75b30000000000000000000000002a8c411e0b012dba8ced3ccbbcf0335739ec75b300000000000000000000000000000000000000000000000000491ae2f89695a400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16889,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a57e6e37092062f467fef468e1b714beb2c343f7000000000000000000000000a57e6e37092062f467fef468e1b714beb2c343f7000000000000000000000000000000000000000000000000031d7f9d5caa084c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x109810ad9f7915c35e46118727dfe21a76f3038ed6570aa19de58f8982a15ef8,2022-02-05 08:44:49.000 UTC,0,true -16891,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000025a4cb8b9da1d3218165d6f296f42cf8d049afdd00000000000000000000000000000000000000000000000a21c22fc2e8820000,,,1,true -16893,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000069dd97aee3d665e75ba685a6ad13bac889a9837700000000000000000000000069dd97aee3d665e75ba685a6ad13bac889a983770000000000000000000000000000000000000000000000001b9863cfc665948000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16895,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000365a3ec18ea9e4591dbd2e7687cb14f472f4b559000000000000000000000000365a3ec18ea9e4591dbd2e7687cb14f472f4b55900000000000000000000000000000000000000000000000000013462b8634fb200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16896,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000172b6e023c25a1962129177f18d5b5dce441e8e6000000000000000000000000172b6e023c25a1962129177f18d5b5dce441e8e600000000000000000000000000000000000000000000000000125bc30a984fe100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16898,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e58000000000000000000000000e8ac385ae701d3c431a8f4bef2e1177796110745000000000000000000000000e8ac385ae701d3c431a8f4bef2e11777961107450000000000000000000000000000000000000000000000000000000009e8e18100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16908,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000036fb3c8d2174285888a97c6f398a8ba91673eee400000000000000000000000036fb3c8d2174285888a97c6f398a8ba91673eee400000000000000000000000000000000000000000000000003e2c284391c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x642f30f8cf1e35d41d43ae59542aa9add3a2ea0194b3a36a9e53b87874934855,2021-12-11 10:38:15.000 UTC,0,true -16909,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000005d5955fc64d46b33b636c3db72b863be184fe9600000000000000000000000005d5955fc64d46b33b636c3db72b863be184fe9600000000000000000000000000000000000000000000000000000000060f3c2200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x319231b3b32db4fb647a8073a1206b3cc25fbe8464a6d243559adf4b1bc84cdf,2022-05-09 00:19:55.000 UTC,0,true -16910,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000de8878aa52d2eea1f8b83edca567afea71f970db00000000000000000000000000000000000000000000000f29a76a9e5dbbbdb6,0x39320fb3657729da59b38f052ca84cf458ee02007353a4e07a4db0d875709599,2021-11-28 01:15:28.000 UTC,0,true -16911,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047bb57496ae8c10b3b714bc7f064f3ac049b28e000000000000000000000000047bb57496ae8c10b3b714bc7f064f3ac049b28e0000000000000000000000000000000000000000000000000001f52d5ff411f8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16913,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009dd0e68ef913df841826450f843233484d418bb30000000000000000000000009dd0e68ef913df841826450f843233484d418bb300000000000000000000000000000000000000000000000000af40c61b6a050000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16915,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000008d088c12e979f2bf94045b7ba092377db7727ba0000000000000000000000000000000000000000000000722b3e304b15017c7a,0x4a851087ec8df25827cfd9faa0850d8ca0aec98e59248ef683d3dc10cdf46604,2022-04-10 16:25:18.000 UTC,0,true -16920,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008840a72627f06d1def290e6de5d1c70e0dd9c44a0000000000000000000000008840a72627f06d1def290e6de5d1c70e0dd9c44a00000000000000000000000000000000000000000000000000aa885991c7666b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16924,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006235489a0c0a6eaafade625766f6f28a760830890000000000000000000000006235489a0c0a6eaafade625766f6f28a76083089000000000000000000000000000000000000000000000000029e68fedb0a328000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16925,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000045b8231073ce8e8c5d88dd451c8a2badbeec05fd00000000000000000000000045b8231073ce8e8c5d88dd451c8a2badbeec05fd00000000000000000000000000000000000000000000000000ab059981404a1600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16926,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d3fb28778630b99d76e4e4a68be58b50c38792a00000000000000000000000000000000000000000000000000de0b6b3a7640000,0xdaf7a9c06912b32f48c3e44a8eeb17c76b02bdbcbf830840f8e6e751a5aad699,2022-05-08 05:21:38.000 UTC,0,true -16927,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007338f56e2f0de5c7664cbe5bd7de30fb923956570000000000000000000000007338f56e2f0de5c7664cbe5bd7de30fb923956570000000000000000000000000000000000000000000000000208e09d545a594800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x190b960c62b38aa32b64b78a0b207f3c08e85c2faabc16fe42207ed5e771eb89,2021-12-24 12:55:46.000 UTC,0,true -16928,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000024f8d92794a283b454d1fc32722f51a4f3bc1ae500000000000000000000000000000000000000000000000765384ce234f5f10b,,,1,true -16929,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c4cb01191ad5bba5a471294bc1977e726c9b8059000000000000000000000000c4cb01191ad5bba5a471294bc1977e726c9b8059000000000000000000000000000000000000000000000000007580fe08bd922900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16930,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a5b711d5db1e50ddae8ce732a1b967a4908ed710000000000000000000000000a5b711d5db1e50ddae8ce732a1b967a4908ed710000000000000000000000000000000000000000000000000dd85bb46e19f28000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x59bf5b45feb1805bdb7f3d5ee2c736f10c0ef93106314e262cc9ff392df6ef1e,2021-11-28 04:12:56.000 UTC,0,true -16932,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006abcf6820ad0386402933117ceb6e831b906e0710000000000000000000000006abcf6820ad0386402933117ceb6e831b906e0710000000000000000000000000000000000000000000000000221576fcd05c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16933,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000063e7098e900e28f2d0c22344d42ca8cc5a1a855000000000000000000000000063e7098e900e28f2d0c22344d42ca8cc5a1a855000000000000000000000000000000000000000000000000000ad1071f045b2d800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16934,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ccdde9b51cb5ed1caa7c0f58c8c8be573463ee13000000000000000000000000ccdde9b51cb5ed1caa7c0f58c8c8be573463ee1300000000000000000000000000000000000000000000000000d822416ca3ba5400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x321287d2dae70d3e40852978168148aca3023f19a6809ae407cfd6444f9fcf3b,2021-11-28 09:41:07.000 UTC,0,true -16935,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004a58362d60e81bb5596c546881312c820abb5eda0000000000000000000000004a58362d60e81bb5596c546881312c820abb5eda00000000000000000000000000000000000000000000000000d71519692b45d900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16936,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e4e41c26bb48c72d91f73eda93cc19c9f65644b6000000000000000000000000e4e41c26bb48c72d91f73eda93cc19c9f65644b60000000000000000000000000000000000000000000000000021b2380cac900000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf508012f63b9a8e77d2eac216ba49fcabc2d2fccf3f7b5cad7110415cab63340,2022-07-01 07:20:08.000 UTC,0,true -16937,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005e656a9f107cb5fbe26d3fe349b123da2d4e463d0000000000000000000000005e656a9f107cb5fbe26d3fe349b123da2d4e463d000000000000000000000000000000000000000000000000003823e693f3ccd700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16938,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000093c9a74f211c44c2ebc5d90aa43ab6ec2d896e4600000000000000000000000093c9a74f211c44c2ebc5d90aa43ab6ec2d896e4600000000000000000000000000000000000000000000000000ac55d7738339e900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16939,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000294631547727b128bff92f7d1b996bad0edfbe68000000000000000000000000294631547727b128bff92f7d1b996bad0edfbe680000000000000000000000000000000000000000000000000dcebed3a4a2103200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf1053732d488c89742c50c26bebefe75dfbe9977591dc71e7db749e422adbc05,2021-11-24 21:21:56.000 UTC,0,true -16941,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005b1cd4eeaa0f0574f7bd243b69099cd6da033bbf0000000000000000000000005b1cd4eeaa0f0574f7bd243b69099cd6da033bbf000000000000000000000000000000000000000000000000002913d138b1040200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16943,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dca75c930758cd0a4c64ead527e21e3d61174073000000000000000000000000dca75c930758cd0a4c64ead527e21e3d611740730000000000000000000000000000000000000000000000000186cc6acd4b000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16946,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e724a5756406b6ec652b2fd82704456efa540e54000000000000000000000000e724a5756406b6ec652b2fd82704456efa540e5400000000000000000000000000000000000000000000000000d27db1fb26a62000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16947,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000062486ae25f0b44bb4b51e11fc7208fbcd375a7a000000000000000000000000062486ae25f0b44bb4b51e11fc7208fbcd375a7a0000000000000000000000000000000000000000000000000007e3e8e7eefc1000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16948,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000002df67caf0dd06d05c867b5a72bd2d6726ae7ac7e0000000000000000000000002df67caf0dd06d05c867b5a72bd2d6726ae7ac7e000000000000000000000000000000000000000000000000000000000b44290300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16949,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000004ee4e1147f0138ce606cbc9dc8e94b602963a844000000000000000000000000000000000000000000000000cb63480e47622769,,,1,true -16950,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d11beeac6eea20f48145b86ea14abcab3d8f9f9b0000000000000000000000000000000000000000000000003ba8d1d19e14f82d,,,1,true -16951,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d11beeac6eea20f48145b86ea14abcab3d8f9f9b0000000000000000000000000000000000000000000000008a85226f8dab360d,,,1,true -16952,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004d9ba778b7f121e58e5d3bb6aef514e035a7c7f50000000000000000000000004d9ba778b7f121e58e5d3bb6aef514e035a7c7f500000000000000000000000000000000000000000000000000a7e4f0794ac00900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16953,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000064816835a84d48f1de570d07f007b110315a93b300000000000000000000000064816835a84d48f1de570d07f007b110315a93b300000000000000000000000000000000000000000000000001517903d615863e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x7207d22251f7fe734b07120d2bdad35c01dbbe2ae62a26082f49bd2f6ad6b648,2022-03-27 07:38:42.000 UTC,0,true -16954,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000077c5d343e226e7e152246780be2bca2af91631e000000000000000000000000077c5d343e226e7e152246780be2bca2af91631e000000000000000000000000000000000000000000000000004502e4b3bf7bd400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe94e3e04b4641e7e686bcdb17cfac62af2cfa41c0c4ccfeff05ca0aee7bf5796,2022-03-10 16:43:11.000 UTC,0,true -16956,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e87bf6541249102772516185156e59b649b7bcb9000000000000000000000000e87bf6541249102772516185156e59b649b7bcb900000000000000000000000000000000000000000000000000457a9bd0a48e0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16958,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a29012a376716fbd163ae8693974422eaf4b194c000000000000000000000000a29012a376716fbd163ae8693974422eaf4b194c000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x695253567b6c9c4439711d413b111a755f7b8291f549f018ba0c941fd934c89c,2022-09-07 10:58:25.000 UTC,0,true -16959,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007053d9262b7a6aea8ca0eb172d9fb2f3f09a35c70000000000000000000000007053d9262b7a6aea8ca0eb172d9fb2f3f09a35c7000000000000000000000000000000000000000000000000018faa3dce5a857500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16960,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d56460e9b6235b59ef881cd5f7adc137ed0b2f13000000000000000000000000d56460e9b6235b59ef881cd5f7adc137ed0b2f13000000000000000000000000000000000000000000000000018f0833d64c78cc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16961,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004d3da6d4ff825d0f97f96b423c06f14a6d0c92780000000000000000000000004d3da6d4ff825d0f97f96b423c06f14a6d0c9278000000000000000000000000000000000000000000000000018f0833d64c78cc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16962,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b699fafba3d0ad9ed0583ef2aed0dd88fee4652f000000000000000000000000b699fafba3d0ad9ed0583ef2aed0dd88fee4652f000000000000000000000000000000000000000000000000018e86c5204966f200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16963,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c019f390abe0e94885ce3eecffe5e2b3875be8ea000000000000000000000000c019f390abe0e94885ce3eecffe5e2b3875be8ea00000000000000000000000000000000000000000000000000456af278a8e60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16965,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002bd99c2680f9dacf898dd4088187323f5149323a0000000000000000000000002bd99c2680f9dacf898dd4088187323f5149323a000000000000000000000000000000000000000000000000002d59bdceff818900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16966,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000004a64b2820a06a67ee878157a7f48611463d6bd780000000000000000000000004a64b2820a06a67ee878157a7f48611463d6bd7800000000000000000000000000000000000000000000002acdcab48e97bb8f4c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16967,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000e69b3e9e744219ecd5f40fa392f73f2c98762690000000000000000000000000e69b3e9e744219ecd5f40fa392f73f2c98762690000000000000000000000000000000000000000000000000b5e45ca13dd4ee000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16970,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000000fe4cc87fe5cbf2fc26bf1884538ec47b5aaf0120000000000000000000000000000000000000000000000003dc6ca52ebeb99d5,,,1,true -16971,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000c1a1182d98f146be42927a4a78db8ac75296acf0000000000000000000000000c1a1182d98f146be42927a4a78db8ac75296acf000000000000000000000000000000000000000000000000000000000d372843600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -16974,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009e319d9ae1f0c493bc047f8a6ca6541a09e2c86a0000000000000000000000009e319d9ae1f0c493bc047f8a6ca6541a09e2c86a000000000000000000000000000000000000000000000000020dcd3742c2000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16979,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f5c839627849e20f7e67313e1598c7fd33924860000000000000000000000002f5c839627849e20f7e67313e1598c7fd339248600000000000000000000000000000000000000000000000000af56968cd1af0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16982,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f1915aba3c55ba20258e6ad98760eece256eff28000000000000000000000000000000000000000000000000107cf03b0591cc48,,,1,true -16983,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000731ca97a11a7e0c1be91a979c37ec0ac811293fd000000000000000000000000731ca97a11a7e0c1be91a979c37ec0ac811293fd0000000000000000000000000000000000000000000000000240bff3b0484b2900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16987,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b325ecd1463ca55c399765061956377b3f47b1ea000000000000000000000000b325ecd1463ca55c399765061956377b3f47b1ea0000000000000000000000000000000000000000000000000001b400ce5e590000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16988,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000085e645fe242a8ceae70f517dd5a773f1129be3170000000000000000000000000000000000000000000000027b40c5e5c2b486a2,,,1,true -16989,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000ac1c1c174c0177bd7ec4b1067a2fc4563d398540000000000000000000000000ac1c1c174c0177bd7ec4b1067a2fc4563d39854000000000000000000000000000000000000000000000000000c78293794838000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16993,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002c3adf438022b055b069cda225ed522d2391fd840000000000000000000000002c3adf438022b055b069cda225ed522d2391fd840000000000000000000000000000000000000000000000001c8351a4fa3e5ceb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x014b6286d400bdb9ae76008a18483fdb696ac4d9bd7be65d209d6a7dd18c4fdb,2021-11-28 14:32:49.000 UTC,0,true -16994,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b724845049cbf7e09f98f673c1bec7208db39a37000000000000000000000000b724845049cbf7e09f98f673c1bec7208db39a37000000000000000000000000000000000000000000000000004d4bfbf5c6cc1f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -16995,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006cd8401984a8dd15382dcbb44d87dd249472fd8b0000000000000000000000006cd8401984a8dd15382dcbb44d87dd249472fd8b0000000000000000000000000000000000000000000000000130eee4c84fc3a200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x3cfb8b6a90cf09e495444d79279e10a86c2a4240022f1805d0201547ef44a0ea,2022-03-08 08:26:51.000 UTC,0,true -16996,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000006cd8401984a8dd15382dcbb44d87dd249472fd8b0000000000000000000000006cd8401984a8dd15382dcbb44d87dd249472fd8b000000000000000000000000000000000000000000000010bf4e3f542e674be700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x6f80afaad6e8765cbe4e2c7e0a118d72ebd681b03c19c2e0e10af93ba6cf221e,2022-03-08 08:25:06.000 UTC,0,true -16997,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000553ef84376c68008f665473268d4a6fb9abf11fe000000000000000000000000553ef84376c68008f665473268d4a6fb9abf11fe000000000000000000000000000000000000000000000000002e9519b911fe3500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x596c0f02788f0a3e0680b9da4d4f704f5e2cebe8140cf0d567812f7c307ba3c4,2022-05-29 15:11:43.000 UTC,0,true -16999,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be659018e3e8afe7838e6c786996d663a5699813000000000000000000000000be659018e3e8afe7838e6c786996d663a569981300000000000000000000000000000000000000000000000000a5a74df156adb800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17000,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d937b707737b81d1da49a0995f93f77cdf0e4608000000000000000000000000d937b707737b81d1da49a0995f93f77cdf0e4608000000000000000000000000000000000000000000000000025d0f870b6cbcab00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd8329c41b10bc93f9619a144abb12eacd372a195dd82ef1e8c2da676334254c3,2021-12-12 07:16:05.000 UTC,0,true -17001,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003bf3077256842bd9409b3645797855e721ab22f40000000000000000000000003bf3077256842bd9409b3645797855e721ab22f4000000000000000000000000000000000000000000000000003b7918dd0b9e1800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17002,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078e7d7d4b454ab02904477ea71e6f15270bbb71600000000000000000000000078e7d7d4b454ab02904477ea71e6f15270bbb71600000000000000000000000000000000000000000000000002e689b6b4f0310000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xb1f3290022081453ac401163418c71fed9babf6463df38723a845d07b3673a7b,2021-11-28 01:41:16.000 UTC,0,true -17003,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e71da5f8f6e90fa92f794963ba90f5c1cd16a6a6000000000000000000000000e71da5f8f6e90fa92f794963ba90f5c1cd16a6a600000000000000000000000000000000000000000000000000aa87bee538000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd1861440fb71d7f90fee5df06b1e8f21008f9ea9a63ab9451fe9ac2507566fb7,2022-06-17 20:05:45.000 UTC,0,true -17004,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009141e07491347467855e16a2d973bf84c6ecd8de0000000000000000000000009141e07491347467855e16a2d973bf84c6ecd8de000000000000000000000000000000000000000000000000012790550d6e43d100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17007,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cb1d07354fc52380ca0adc16d781ad7be0a0064a000000000000000000000000cb1d07354fc52380ca0adc16d781ad7be0a0064a000000000000000000000000000000000000000000000000003e331efcbe1a6d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17012,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000aa9ccef24415475e88d644d3c33fb4ed1b29ffaf000000000000000000000000aa9ccef24415475e88d644d3c33fb4ed1b29ffaf00000000000000000000000000000000000000000000004b4c3f4cc33994000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x5e12a29a2624037467c67d82c193b048159aca9bb736776d9e4bbf2edd25c1ac,2021-11-23 12:11:31.000 UTC,0,true -17013,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e3c42dff9c595f6c1538d9e98396b9220d304b80000000000000000000000000e3c42dff9c595f6c1538d9e98396b9220d304b80000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x717f916573dd54a48e0908bcf3eb14008f6f8776476c607ac382f009f417a466,2021-12-03 11:39:02.000 UTC,0,true -17014,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094fce1ba7ba586f1fbc14b6970e7c1cb6a04402e00000000000000000000000094fce1ba7ba586f1fbc14b6970e7c1cb6a04402e000000000000000000000000000000000000000000000000020c408c4e4641d200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf7d5937d41ee8c81d1406e68e42fd2a906d68cf4e645ba5fc93c1623105a93c5,2021-12-25 09:29:02.000 UTC,0,true -17016,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000222c006c2e1956383caf63b761d73e804cb47118000000000000000000000000222c006c2e1956383caf63b761d73e804cb471180000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17017,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000027b1f8343c5509fd0b5d63a7fdd920507c7e0da700000000000000000000000000000000000000000000000238fd42c5cf040000,0x2df01c8b7252b0c16ec199867972b5f959b6b7bfd1f13a7db415b4e47d3104e1,2022-03-13 06:13:31.000 UTC,0,true -17020,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000678e1e7a4c55b5bc3735df2355c4c1240c079846000000000000000000000000678e1e7a4c55b5bc3735df2355c4c1240c0798460000000000000000000000000000000000000000000000000035b77aed2c399200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17021,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003774afdd53d42f21c106f9fa1abf66a9acf4ff970000000000000000000000003774afdd53d42f21c106f9fa1abf66a9acf4ff970000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17022,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001be5f9df988c06400780d53df143c1bbff2988b50000000000000000000000001be5f9df988c06400780d53df143c1bbff2988b5000000000000000000000000000000000000000000000000015eee5c95bdfaa300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17023,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000010f53b57c6a6f07c9d9684e774cd77a4d29ceb3a00000000000000000000000010f53b57c6a6f07c9d9684e774cd77a4d29ceb3a00000000000000000000000000000000000000000000000001033b9e8a203b9900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17024,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f13d1861f0f26ecd8700a021cc1767a59c1ff3c2000000000000000000000000f13d1861f0f26ecd8700a021cc1767a59c1ff3c20000000000000000000000000000000000000000000000000000e4487dd6b00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17025,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ffdebb7ea3ab60bbc1e2ca9d7b4997f2e5f601bb000000000000000000000000ffdebb7ea3ab60bbc1e2ca9d7b4997f2e5f601bb0000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17026,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d50521ca9abc795148cb881ce3ee4fd739bf2c0f000000000000000000000000d50521ca9abc795148cb881ce3ee4fd739bf2c0f0000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17027,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f4be26f5cd223b61f9fc1bd22241646e02fef5bd000000000000000000000000f4be26f5cd223b61f9fc1bd22241646e02fef5bd0000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17028,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000094d297963f98aeef31211e442ece6d7f620039b500000000000000000000000094d297963f98aeef31211e442ece6d7f620039b50000000000000000000000000000000000000000000000000000ec77f7a4400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17029,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008b67ca567bed1a234c4938a7e89d91e86ad4fbc50000000000000000000000008b67ca567bed1a234c4938a7e89d91e86ad4fbc50000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17030,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002a5a819afa55000bbc9b9e909613189eb92c37390000000000000000000000002a5a819afa55000bbc9b9e909613189eb92c37390000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17031,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004cc76a4e7036fad1a348249c73b922c2715a6c730000000000000000000000004cc76a4e7036fad1a348249c73b922c2715a6c730000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17032,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009aeda209c979408798397336277c690f72b521540000000000000000000000009aeda209c979408798397336277c690f72b521540000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17034,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f7627169b4c1b0dddf40daaa2dca03f0ca6037a0000000000000000000000007f7627169b4c1b0dddf40daaa2dca03f0ca6037a0000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17035,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005df004d8653297117319d015168238d47b21d2d70000000000000000000000005df004d8653297117319d015168238d47b21d2d70000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17043,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cdcf64bcd5ecc4990798110bd4ad8ed3c5dc6f1e000000000000000000000000cdcf64bcd5ecc4990798110bd4ad8ed3c5dc6f1e0000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17052,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002975d61c9884eb506886d7ecc60ef86d019c818a0000000000000000000000002975d61c9884eb506886d7ecc60ef86d019c818a0000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17088,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e816691000000000000000000000000bc3b0fa064869296faea0467f97984ab60ddec3d000000000000000000000000bc3b0fa064869296faea0467f97984ab60ddec3d0000000000000000000000000000000000000000000000000c47b6c66e3ae6a900000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -17089,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f2d822fc64381b44a036295bcaa1ead4848f8ecf000000000000000000000000f2d822fc64381b44a036295bcaa1ead4848f8ecf0000000000000000000000000000000000000000000000000023ea88fe4109c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17090,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000c2768e9353bf078ace3c345d279e27d393d5c4870000000000000000000000000000000000000000000000121e9814442075020b,,,1,true -17091,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000fae86fa6eb0d21e198c74956217dec00842adc99000000000000000000000000fae86fa6eb0d21e198c74956217dec00842adc990000000000000000000000000000000000000000000000000000000015f2a14c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -17092,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000aae301463fbb85789b888661f113c18a35e623b4000000000000000000000000aae301463fbb85789b888661f113c18a35e623b40000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17093,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cfcdfe2b8c5fd921f0cb1554deef92e8595f6c9b000000000000000000000000cfcdfe2b8c5fd921f0cb1554deef92e8595f6c9b0000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17094,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c8cf7ece3065aa6117ae2dde3c5f311b56bf430b000000000000000000000000c8cf7ece3065aa6117ae2dde3c5f311b56bf430b0000000000000000000000000000000000000000000000000000e18dffe7800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17095,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000002f779cd8d2d37f719dd6f14563ba3fde845625500000000000000000000000002f779cd8d2d37f719dd6f14563ba3fde84562550000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17096,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001482974cb66f425c1c2d3fc580a5c7d4b3bdedf70000000000000000000000001482974cb66f425c1c2d3fc580a5c7d4b3bdedf7000000000000000000000000000000000000000000000000033fd2a64598263600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xd30778c18102533bb41852514ac1ca0849f403edaa6aa7a79364b7710005079d,2022-04-24 03:53:15.000 UTC,0,true -17097,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007bae9ff328da5530501e2f05d07b1f79acf321ec0000000000000000000000007bae9ff328da5530501e2f05d07b1f79acf321ec0000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17098,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005436d1b90693655eaf8eb656fb69136d9c37c58a0000000000000000000000005436d1b90693655eaf8eb656fb69136d9c37c58a0000000000000000000000000000000000000000000000000000ded381f8500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17099,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000595f4f65072917c337cd31afce860777ad0e2261000000000000000000000000595f4f65072917c337cd31afce860777ad0e22610000000000000000000000000000000000000000000000000000dd01d8ae300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17100,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007b8aa49debb429ce54df296520b68331d669cdce0000000000000000000000007b8aa49debb429ce54df296520b68331d669cdce0000000000000000000000000000000000000000000000000000e18dffe7800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17101,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007b9e41122be54a08999b1100ebf9221d5246d50b0000000000000000000000007b9e41122be54a08999b1100ebf9221d5246d50b0000000000000000000000000000000000000000000000000000ded381f8500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17102,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005e885198c6c34ee90bf65c4958794ba65f4da0d90000000000000000000000005e885198c6c34ee90bf65c4958794ba65f4da0d90000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17103,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004b4ef2441c53360d3aacd06c95bdbba51c791b790000000000000000000000004b4ef2441c53360d3aacd06c95bdbba51c791b790000000000000000000000000000000000000000000000000147b8d4fe413d5600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17104,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e6f3bf96e9bce7da411920e5e7e118ef3cdd1a00000000000000000000000001e6f3bf96e9bce7da411920e5e7e118ef3cdd1a00000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17105,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e2c056c3f1c9eeb3315321b8dd83b7e8aea05ea0000000000000000000000002e2c056c3f1c9eeb3315321b8dd83b7e8aea05ea0000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17107,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004999c3a36f8ed0ae7ad33abd828cac81a6d7af230000000000000000000000004999c3a36f8ed0ae7ad33abd828cac81a6d7af230000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17108,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000917bcd9ed06da0c81eca88dd2dee9ca8df6e4522000000000000000000000000917bcd9ed06da0c81eca88dd2dee9ca8df6e45220000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17112,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c8b02b5b18e7c6ae87876cb94e1d273a04fbfe90000000000000000000000003c8b02b5b18e7c6ae87876cb94e1d273a04fbfe900000000000000000000000000000000000000000000000000ab4e26016b7ffa00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x82e990794cfba8a8120792e4a5f311066316bcc020f187853d90b92dbd4114f3,2021-12-16 12:18:43.000 UTC,0,true -17117,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000480ccf469f7f2d65baad9c97413c64a9b9ff6ff2000000000000000000000000480ccf469f7f2d65baad9c97413c64a9b9ff6ff2000000000000000000000000000000000000000000000000037c90b1541a67d000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17118,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000030eeff183dce51bd0738e931f6d7b73e2323886800000000000000000000000030eeff183dce51bd0738e931f6d7b73e232388680000000000000000000000000000000000000000000000001c7a552b0a49ac3300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xcb22a7eacf81eabc4b97d66c5d3e2de185e98df259e257ff18aa0037279d61d5,2021-11-24 10:13:43.000 UTC,0,true -17120,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b965034eb2256079d7dc8e5b0bba5ed030fffd10000000000000000000000001b965034eb2256079d7dc8e5b0bba5ed030fffd10000000000000000000000000000000000000000000000000049db11f5bd992900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9bd1d2765f49efdddc8eb6199d20421f58c6cd2bc9200b3c90d74da4dc0235c2,2022-02-17 16:33:19.000 UTC,0,true -17122,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000065ac569e966648cf629d8b0e5e15ce644b3a01a900000000000000000000000065ac569e966648cf629d8b0e5e15ce644b3a01a9000000000000000000000000000000000000000000000000003ed5f6b1da8a4500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17123,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000f9897fd1163dc6995acbfe3db1e35c2821281550000000000000000000000000f9897fd1163dc6995acbfe3db1e35c282128155000000000000000000000000000000000000000000000000009d0aedce82bc0900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xbe364e60a5477c74aa5fc573314489cc1f3e9acead60a36904b0713c8534f9db,2021-12-17 11:22:20.000 UTC,0,true -17125,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009f8e08c542fac3ffdc450c6dcf92deb2863a9efb0000000000000000000000009f8e08c542fac3ffdc450c6dcf92deb2863a9efb000000000000000000000000000000000000000000000000010cbfe83185d21200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x3a983ea4e5c5cc810ee6c427456634830763bf611ba336a671eab210be84fadd,2021-12-02 04:14:08.000 UTC,0,true -17126,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d8f43fba05d633a71bdfcd536c3fc836fe23558a000000000000000000000000d8f43fba05d633a71bdfcd536c3fc836fe23558a000000000000000000000000000000000000000000000000010d5a306e041dec00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x57aa9493eb62973a0991121537bb06c36d70ecdc8fe990e9ec4e49dbf2d37fc4,2021-12-02 04:20:10.000 UTC,0,true -17127,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b7f7d8fce54c53ad964e4dc3538cbf4b0e3b1395000000000000000000000000b7f7d8fce54c53ad964e4dc3538cbf4b0e3b1395000000000000000000000000000000000000000000000000010ea2ad9cb3d82400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x21ba2bba5ac12ae4b46b00eee102783a37f23e6235261f0177cf1b2c4919dcb7,2021-12-02 04:23:34.000 UTC,0,true -17128,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c62bec5f0a750260f98bea79b820e9f18d5bad44000000000000000000000000c62bec5f0a750260f98bea79b820e9f18d5bad4400000000000000000000000000000000000000000000000001103c993c03b81700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe263e12580fedbb647a1c6a90d3ae6f2d42c981af44231fa084873aa29d63009,2021-12-02 04:27:41.000 UTC,0,true -17129,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000075f6a7d7c8aaa0db29e9cd4c49b17df5b829e31e00000000000000000000000075f6a7d7c8aaa0db29e9cd4c49b17df5b829e31e000000000000000000000000000000000000000000000000010edd0dce74daf000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x69f5800e38cf4269850e250d329d6f8472712fedfc22eff216fe95b5c91bf282,2021-12-02 04:30:15.000 UTC,0,true -17130,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cc969c8fe6299fcdc4785153540ea2da4efd3834000000000000000000000000cc969c8fe6299fcdc4785153540ea2da4efd3834000000000000000000000000000000000000000000000000010ce032ce88b72300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xa24e98697ea53c5d42b97d63107e167e8d4205028809d7439b9f2700d10dacb2,2021-12-02 04:34:47.000 UTC,0,true -17131,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099a288b8cc9c581af9aa2deed29a4f73c7c199f600000000000000000000000099a288b8cc9c581af9aa2deed29a4f73c7c199f6000000000000000000000000000000000000000000000000010eb0a78bc61bf500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x328f336e9b35b1b5cd44475ebd65972d38ce0a01bcd296d344b0184081ae2533,2021-12-02 04:42:40.000 UTC,0,true -17132,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005e5e48f3f09748a8854103981a836a964b816c420000000000000000000000005e5e48f3f09748a8854103981a836a964b816c42000000000000000000000000000000000000000000000000010f989f9451aca300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5da816a4c8db071f3e23e19c40b0da171d70d04778f9ff6e2cc683c6eb8a2126,2021-12-02 04:47:26.000 UTC,0,true -17133,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a240707caeb1fcc72404f964d697f78a1239d07a000000000000000000000000a240707caeb1fcc72404f964d697f78a1239d07a00000000000000000000000000000000000000000000000001109a1009d3a73100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17134,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000028f8f8ab489f65cac52b1aeec9a213e424a9853100000000000000000000000028f8f8ab489f65cac52b1aeec9a213e424a98531000000000000000000000000000000000000000000000000010f30d203d6dbd100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x626edf0e93ee5023050a523a8b94a04f79a340397cde559a48407665452f6ebd,2021-12-02 04:55:55.000 UTC,0,true -17135,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f99b31f3dc3b05975cf6924988d4a0b4813505f4000000000000000000000000000000000000000000000002b613371e38c86589,,,1,true -17136,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000053ed1cb341d105673d85763ec7889469455b46f000000000000000000000000053ed1cb341d105673d85763ec7889469455b46f000000000000000000000000000000000000000000000000000c749178a0c1ad200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17137,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ad539ef1257f61fe15e878b9b7d5d1abe2156678000000000000000000000000ad539ef1257f61fe15e878b9b7d5d1abe215667800000000000000000000000000000000000000000000000000c8a38b9472673e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x001c0efc3bb5a70874db95ae06ff053e9334ba43a2fc772bac97bfef8a6e272c,2022-02-26 12:51:54.000 UTC,0,true -17139,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047a80f9d951d4fcfc34a7c04e671a2d663760a1900000000000000000000000047a80f9d951d4fcfc34a7c04e671a2d663760a1900000000000000000000000000000000000000000000000001587a9c76d8129400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17140,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000350a791bfc2c21f9ed5d10980dad2e2638ffa7f6000000000000000000000000078ec322eef36f157600bf3ce43211e28adbc07b000000000000000000000000078ec322eef36f157600bf3ce43211e28adbc07b000000000000000000000000000000000000000000000000ca9071965e4fe06100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -17142,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e25ba8ec283a86a3dbfb471ec262e26dd8137c59000000000000000000000000e25ba8ec283a86a3dbfb471ec262e26dd8137c59000000000000000000000000000000000000000000000000000bc72f2ebe6c9400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17143,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000566e62982f0318616977dac873e83d1d0c825ddb000000000000000000000000566e62982f0318616977dac873e83d1d0c825ddb000000000000000000000000000000000000000000000000004576847595350700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17144,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000090157efaaa8dc6006434d98e60231a7ae81162e10000000000000000000000000000000000000000000000061317e7748a8f234f,,,1,true -17145,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001830dbb1d9054ff82d8c2efa4c2107a1e28305a40000000000000000000000001830dbb1d9054ff82d8c2efa4c2107a1e28305a400000000000000000000000000000000000000000000000001aa535d3d0c000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17146,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000abdcfd11af016bbd617847a464a87993cc61c050000000000000000000000000abdcfd11af016bbd617847a464a87993cc61c05000000000000000000000000000000000000000000000000000d1dd398444537800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17150,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000090a247279b94f4609481d0ca8459b68aa79959ea00000000000000000000000090a247279b94f4609481d0ca8459b68aa79959ea00000000000000000000000000000000000000000000000002cda5ee04a1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17153,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000a61443cdf751dcb8d95f24633522562fb93f512400000000000000000000000000000000000000000000000c5d4c6b0cb78097fe,0x6988598a4aeaaa2efe660ce979c881e61c11af78a3eb8c2c013b6e3d8a61b947,2021-11-26 07:16:58.000 UTC,0,true -17154,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae08eba835fc6c2b9726b31c7e248171457cc44a000000000000000000000000ae08eba835fc6c2b9726b31c7e248171457cc44a00000000000000000000000000000000000000000000000000561117f211d76800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17156,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f85385347f56819c316939434d427d0c9537eddc000000000000000000000000f85385347f56819c316939434d427d0c9537eddc000000000000000000000000000000000000000000000000a6ef525ab4e2c51b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17157,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000324cac984d3f7f40bc00ba9621d341769c90a97a00000000000000000000000000000000000000000000010f611e8b1b85461d44,0x5fb95d43b8f10d3e637f527cd66826fdfad712ce5f478d0aa9c4c0096e961fed,2021-12-02 00:32:48.000 UTC,0,true -17158,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000df938d253a6fb2845eb4b96f27cf8b3d61216b93000000000000000000000000000000000000000000000007372a8dcc56ab11b1,,,1,true -17160,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004fc7f0fd2a353b7694deb8da43684f3d50c928130000000000000000000000004fc7f0fd2a353b7694deb8da43684f3d50c92813000000000000000000000000000000000000000000000000004aae626c506aa300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17161,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000312761d81670c5906e487620cec73b1556add74d000000000000000000000000312761d81670c5906e487620cec73b1556add74d0000000000000000000000000000000000000000000000000000ded381f8500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17162,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007b0105344845232f19100471c24ca4c320ebf2e00000000000000000000000007b0105344845232f19100471c24ca4c320ebf2e000000000000000000000000000000000000000000000000000798387ee84f0fd00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17163,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000038bba1f6d1e9a703744774beadad5a477cc3a9cf00000000000000000000000038bba1f6d1e9a703744774beadad5a477cc3a9cf0000000000000000000000000000000000000000000000000000ddeaad53400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17165,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003598143d676dc58eb7a2a159326d26f3c09363fb0000000000000000000000003598143d676dc58eb7a2a159326d26f3c09363fb000000000000000000000000000000000000000000000000019571e36245517b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x39bd2797798b0569bab2f6f0d70ba973662f59b65fd0c2ce1eaead94596fbb2a,2022-03-22 10:27:58.000 UTC,0,true -17168,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000059d12abaefdf2233380f08f2ab9f7944aaba165600000000000000000000000059d12abaefdf2233380f08f2ab9f7944aaba16560000000000000000000000000000000000000000000000000000ded381f8500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17169,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000b7c484d9eca2fd5a9b670c25b33f45daf7d9b85f0000000000000000000000000000000000000000000000121f57872c129ce2f5,,,1,true -17172,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c7231008f957439294ff4f5bf10a7b373dfbbfa0000000000000000000000008c7231008f957439294ff4f5bf10a7b373dfbbfa00000000000000000000000000000000000000000000000002b154638f62987700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xb8cf97d1bb6ed6136ddc942ad6bb99fd81d20cc3d1c60dc6cbac2c646468e8cf,2021-12-01 08:33:50.000 UTC,0,true -17173,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c5459faea42aa128423cb494a7fa29bbb41f5d42000000000000000000000000c5459faea42aa128423cb494a7fa29bbb41f5d4200000000000000000000000000000000000000000000000000caddd9c68c876800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17174,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a6e7e18314f36cf2ef4f0bd0035fdd1b126f84e0000000000000000000000003a6e7e18314f36cf2ef4f0bd0035fdd1b126f84e0000000000000000000000000000000000000000000000000000ddeaad53400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17175,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055cd6f4a80d0e62e5557ef266d0fa00372fd9a9300000000000000000000000055cd6f4a80d0e62e5557ef266d0fa00372fd9a93000000000000000000000000000000000000000000000000003c6fb31adc483f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17176,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f998e2ff04e6b1c367837da0d4f42c4aa764f08d000000000000000000000000f998e2ff04e6b1c367837da0d4f42c4aa764f08d0000000000000000000000000000000000000000000000000000dd01d8ae300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17177,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e2567fde0415f238fa424e5be49b11b64b253de7000000000000000000000000e2567fde0415f238fa424e5be49b11b64b253de70000000000000000000000000000000000000000000000000000dd01d8ae300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17178,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000019e80654656af3fa27ea3b8f68b04e070de1423700000000000000000000000019e80654656af3fa27ea3b8f68b04e070de1423700000000000000000000000000000000000000000000000000d529ae9e86000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17179,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f4adcaafc1769c8cb34ea6b128beb777a58a6bc0000000000000000000000008f4adcaafc1769c8cb34ea6b128beb777a58a6bc000000000000000000000000000000000000000000000000002ea7a052fb556900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17180,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d734dcc789e84a61cb154b1812af6e3d02d09dad000000000000000000000000d734dcc789e84a61cb154b1812af6e3d02d09dad0000000000000000000000000000000000000000000000000000dc190409200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17181,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bd7ac85da56c0bfb3373380e2396d453d094970a000000000000000000000000bd7ac85da56c0bfb3373380e2396d453d094970a0000000000000000000000000000000000000000000000000000dd01d8ae300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17182,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0b044e0dfa39199fb5cbcf466762b8b80c2d85d000000000000000000000000b0b044e0dfa39199fb5cbcf466762b8b80c2d85d000000000000000000000000000000000000000000000000009e21a698b1baeb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17183,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000008bcf9320497028119da1c99525d19a9f0d86f92a0000000000000000000000000000000000000000000000000bbab876113c2ca8,,,1,true -17184,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc65c103438b426f02940a351415f52e11431f98000000000000000000000000fc65c103438b426f02940a351415f52e11431f980000000000000000000000000000000000000000000000000000dd01d8ae300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17185,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b8c72154b9766f4b05895738ef217914c9be6b90000000000000000000000001b8c72154b9766f4b05895738ef217914c9be6b90000000000000000000000000000000000000000000000000000dd01d8ae300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17186,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e8d9f46f1526d8f5640000c83a81b92578bb3800000000000000000000000001e8d9f46f1526d8f5640000c83a81b92578bb38000000000000000000000000000000000000000000000000001c2d7d3874b8d2b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17188,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b4916641c4975ebf23585b3d6845955d01d504e0000000000000000000000001b4916641c4975ebf23585b3d6845955d01d504e0000000000000000000000000000000000000000000000000000dc190409200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17190,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000699053f19f64217206d2d1cb34006b355180718b000000000000000000000000699053f19f64217206d2d1cb34006b355180718b000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17192,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000117266cdd328d8c59b85c68cb4d4ae6c71a78c5e000000000000000000000000117266cdd328d8c59b85c68cb4d4ae6c71a78c5e000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17193,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e71bc1a0c50b7356ec5ff9e54088e55ef63e1a80000000000000000000000006e71bc1a0c50b7356ec5ff9e54088e55ef63e1a8000000000000000000000000000000000000000000000000057d1dfe9ad1083d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xaedd13fdc63313981afa909c3c248bc116fe4704212fdd487c14fcedf2deb79e,2021-12-14 10:54:18.000 UTC,0,true -17194,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da5dfd2d4807741fe0eb6ee1fd88a04000c88e5c000000000000000000000000da5dfd2d4807741fe0eb6ee1fd88a04000c88e5c000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17195,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000077e1105c4782493ab490d7151b6ce690ee2bb7a400000000000000000000000077e1105c4782493ab490d7151b6ce690ee2bb7a4000000000000000000000000000000000000000000000000000110d9316ec00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17198,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004421de8bfb150486936a4e8da325ce64862f5ac80000000000000000000000004421de8bfb150486936a4e8da325ce64862f5ac800000000000000000000000000000000000000000000000000003aa41d43570000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1689aee63e65f7d827c41621f9ee17654b0c6891120a3b9f1d4fef5fa3e1044d,2022-03-15 09:34:39.000 UTC,0,true -17199,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000bc9522834584aee4502d999b0f0cb71e1fa5fac0000000000000000000000000bc9522834584aee4502d999b0f0cb71e1fa5fac00000000000000000000000000000000000000000000000000af1b04b999100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17200,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000064509cdbda147bd7ccad34ff0c9ac8d59f7cedb900000000000000000000000064509cdbda147bd7ccad34ff0c9ac8d59f7cedb90000000000000000000000000000000000000000000000000033e3f2e5d0c3a800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17201,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000471b9a239acbdcfed92b754ca76273e57aae507d000000000000000000000000471b9a239acbdcfed92b754ca76273e57aae507d00000000000000000000000000000000000000000000000004002afa86cbdc4900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17202,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000973b78c7d8ab8f92bed18ee594baeea5bdaa4052000000000000000000000000973b78c7d8ab8f92bed18ee594baeea5bdaa40520000000000000000000000000000000000000000000000000000dc190409200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17204,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a0fc3bc1ca1e4346b1c4cb71db3b9e1d9c5454dd000000000000000000000000a0fc3bc1ca1e4346b1c4cb71db3b9e1d9c5454dd000000000000000000000000000000000000000000000000013d0f3b9c4de24900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17205,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006c272244c7c0dda6017402d8bc357e5b283930030000000000000000000000006c272244c7c0dda6017402d8bc357e5b283930030000000000000000000000000000000000000000000000000000db302f64100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17206,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000214cf6b080aa5c7371eeb0e2a15f28fe25fddaa8000000000000000000000000214cf6b080aa5c7371eeb0e2a15f28fe25fddaa800000000000000000000000000000000000000000000000001e0f90eea632b9300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17207,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000382d14d295ecbcb67fd834bc31e894e420529a4a000000000000000000000000382d14d295ecbcb67fd834bc31e894e420529a4a0000000000000000000000000000000000000000000000000000dd01d8ae300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17209,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef8622b58fb925b3819cadce537b0ffafa0a1a6b000000000000000000000000ef8622b58fb925b3819cadce537b0ffafa0a1a6b000000000000000000000000000000000000000000000000003cb99a17b7f8d200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17210,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f277720138dd910a8f27a5a624f297fec4c1f8c1000000000000000000000000f277720138dd910a8f27a5a624f297fec4c1f8c1000000000000000000000000000000000000000000000000015a105b4412380000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17211,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f1e2c281f699cd0773cf4489ea1d569329258da0000000000000000000000003f1e2c281f699cd0773cf4489ea1d569329258da0000000000000000000000000000000000000000000000000000db302f64100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17212,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae69dac9e28bdf65480e0d88a4c46d1c702fa506000000000000000000000000ae69dac9e28bdf65480e0d88a4c46d1c702fa506000000000000000000000000000000000000000000000000047c3adae4fe8b5d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17214,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000528869eb2d3b35597a32779cb1b9c2d62cca923d00000000000000000000000000000000000000000000000523fb2972e2fa1566,,,1,true -17216,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000091a7c920007e1db566f88eb8eb99f5dc7ed7223800000000000000000000000091a7c920007e1db566f88eb8eb99f5dc7ed722380000000000000000000000000000000000000000000000000000db302f64100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17218,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be9e50182ea6e23362a003a131a6173e884f259c000000000000000000000000be9e50182ea6e23362a003a131a6173e884f259c0000000000000000000000000000000000000000000000000195c8074677ce2200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x955269866c0ae81bf9f302cf427fc6a7b3cb26b0774499e36d4068662028d8f0,2022-02-02 09:00:29.000 UTC,0,true -17220,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df7e033a2c8b167f857184971493f70326d200be000000000000000000000000df7e033a2c8b167f857184971493f70326d200be00000000000000000000000000000000000000000000000001cb9e644f8a3dbe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x0281355da0285f38e8bb99c53ea09c9f5e69605f36a9841274969f67acae9c5e,2022-02-02 09:05:33.000 UTC,0,true -17221,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000068ba19fb87380b86f6bd2462da0fbc83f4b5b1ee00000000000000000000000068ba19fb87380b86f6bd2462da0fbc83f4b5b1ee000000000000000000000000000000000000000000000000017412dec23b2e4c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xc9de0b497e2955e924e1c613dcb51c0144c609931b8e7a652eb2e2fcb13027a6,2022-02-02 09:16:29.000 UTC,0,true -17222,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e0ea7fb67036150b7797727235a0e6b2166456f5000000000000000000000000e0ea7fb67036150b7797727235a0e6b2166456f500000000000000000000000000000000000000000000000001da18fad1d259c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x588cd9b975eea69daf76cd6649474fc3abbb4af1c8b596ebffb0e6df8b1af4f9,2022-02-02 09:22:13.000 UTC,0,true -17223,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dbdc7394909d893eb0c99a0a56d177728314fd9c000000000000000000000000dbdc7394909d893eb0c99a0a56d177728314fd9c00000000000000000000000000000000000000000000000001af101fee19806f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5554dbde96339e753baaaae6b071cbbf634281fa5d54a04fca8acb214f88e2fa,2022-02-02 09:26:43.000 UTC,0,true -17224,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000628ec392726fddc854ad574f06d24a772d21fa53000000000000000000000000628ec392726fddc854ad574f06d24a772d21fa5300000000000000000000000000000000000000000000000001fd38a657ce100200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x20b20973112ac567f379abba0bfc85b639c809169012e648b8df2b86160c67fb,2022-02-02 09:30:25.000 UTC,0,true -17225,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000005f601a092974b52853ffbbef763d19186b8e6ad00000000000000000000000005f601a092974b52853ffbbef763d19186b8e6ad0000000000000000000000000000000000000000000000000171224de43c04d600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x3d206fa7971978461111103fae60d00c00d9a10538b8e2c9ac857fff6bb8562f,2022-02-02 09:35:54.000 UTC,0,true -17226,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f7b2229beee1de8cf84973fd59b641efc9a894c6000000000000000000000000f7b2229beee1de8cf84973fd59b641efc9a894c60000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17227,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000086ec96ff8d423910b26dab62dfe30720fc47605f00000000000000000000000086ec96ff8d423910b26dab62dfe30720fc47605f0000000000000000000000000000000000000000000000000161a99fcd89b35800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x632bac6537b7b6a121faf970ef7c17b9c32a855d9816b26f4a9cacf16f1238ed,2022-02-02 09:42:20.000 UTC,0,true -17228,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b6b624a91d3b98c38ad619e6c3f27d291c617385000000000000000000000000b6b624a91d3b98c38ad619e6c3f27d291c6173850000000000000000000000000000000000000000000000000000db302f64100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17230,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000002fb733c3239a1e807d380fa0845b9101ee54c69300000000000000000000000000000000000000000000004bdef0437ede6cbc80,0x28f4f35f05a365617ee7a35be46994154fe8c92e34479cfd1422c778330ec538,2022-04-02 07:17:52.000 UTC,0,true -17231,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000e1da16be636a5775f0c7eac9eab670b6db17b707000000000000000000000000e1da16be636a5775f0c7eac9eab670b6db17b707000000000000000000000000000000000000000000000001c4e1db48bab19bd800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x5623442e7c7f03441aacd60ee0e6dab3ccae50db855ae62c150d4fbc022fc4c3,2022-05-28 09:51:44.000 UTC,0,true -17232,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1c2d0860a213c630c7e285eb5b8b1ebdfa205b1000000000000000000000000c1c2d0860a213c630c7e285eb5b8b1ebdfa205b100000000000000000000000000000000000000000000000000992e501987f2e800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x784d2629e7bbed5abc12e45ef5ab5a0389c50d40c1c7c98841db07bfed29d910,2021-12-03 12:25:56.000 UTC,0,true -17234,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000061a275fca0242363c658edbdb0527bfc1ee140d100000000000000000000000061a275fca0242363c658edbdb0527bfc1ee140d10000000000000000000000000000000000000000000000000049d8bef8f3f00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17235,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004fc7f0fd2a353b7694deb8da43684f3d50c928130000000000000000000000004fc7f0fd2a353b7694deb8da43684f3d50c92813000000000000000000000000000000000000000000000000008ce1f4c272d59500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17236,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df82ee79e40bbe3d088fc8620feedd6793283c8f000000000000000000000000df82ee79e40bbe3d088fc8620feedd6793283c8f00000000000000000000000000000000000000000000000000cbb0bc63e0fb4b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17237,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000350a791bfc2c21f9ed5d10980dad2e2638ffa7f600000000000000000000000046d54bf2c77d02f1b19b54e6fac2bcd5a05a980200000000000000000000000046d54bf2c77d02f1b19b54e6fac2bcd5a05a98020000000000000000000000000000000000000000000000004442dd683b34ee7500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -17239,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e4c86cf4302deb8c4757a6a46359fee49438dbc2000000000000000000000000e4c86cf4302deb8c4757a6a46359fee49438dbc2000000000000000000000000000000000000000000000000013f3cee05096dfe00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17242,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e4493623399fbf0a622eb87f52210c20f13054c4000000000000000000000000e4493623399fbf0a622eb87f52210c20f13054c40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17243,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dd31937ededa450105a75e28b0a3246b22ebf030000000000000000000000000dd31937ededa450105a75e28b0a3246b22ebf030000000000000000000000000000000000000000000000000009fdf42f6e4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17244,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000006515ac8eab778dd6a533e60e4cda41e0a8e4fcf00000000000000000000000006515ac8eab778dd6a533e60e4cda41e0a8e4fcf0000000000000000000000000000000000000000000000000e84ab227b66cc5100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x4f472721804924e7afd67d66c4ae13f2f2ee3c76ed95191785ac817703ea7e5d,2021-11-25 17:54:52.000 UTC,0,true -17246,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e580000000000000000000000001296d4a9fa924a289c270c4fa09e5332484c489c0000000000000000000000001296d4a9fa924a289c270c4fa09e5332484c489c000000000000000000000000000000000000000000000000000000001442189100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xa3dc89e032969457169147ece203c0fd34bd2c98cb5ce98fb23fde186356a947,2021-11-26 14:54:54.000 UTC,0,true -17247,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f4039e492374dd1008322dd7536fbe7f43cfd33e000000000000000000000000f4039e492374dd1008322dd7536fbe7f43cfd33e0000000000000000000000000000000000000000000000003ada84007264841300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17249,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000005f56e5ade609d0869351bd43b768568bc690c6f900000000000000000000000000000000000000000000010193e476a20d4b0000,0xe9a507eb120ba34c6c0ecf1324e2feb63786fecf8fc0236c1a4da0b34326ed01,2021-11-24 07:13:25.000 UTC,0,true -17252,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000001744e87f864eed8ff1e87ff83cc203a7dc44bd100000000000000000000000001744e87f864eed8ff1e87ff83cc203a7dc44bd1000000000000000000000000000000000000000000000000002fde6cbdd649f500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17253,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000070513a081114ed019361d7d6f0e575206da938100000000000000000000000000000000000000000000000000f65120188a664cb,,,1,true -17254,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000482d685a17c90d7bb3e0c753f72c870f76aaa850000000000000000000000000482d685a17c90d7bb3e0c753f72c870f76aaa8500000000000000000000000000000000000000000000000126342bb15d57e905100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xbba597349f6230600b0f587b505de6c0e5c721c996fc545222aafc2cb116de19,2021-12-02 12:21:01.000 UTC,0,true -17255,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000917e4e563701e9d94b8d00775dcbd4ab86efd479000000000000000000000000917e4e563701e9d94b8d00775dcbd4ab86efd47900000000000000000000000000000000000000000000000000131bfd304bb72b00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17257,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003210cc31ba9c6788eebddc3f5de02b9cedde2c6f0000000000000000000000003210cc31ba9c6788eebddc3f5de02b9cedde2c6f00000000000000000000000000000000000000000000000006d33393818bde9900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17258,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000522afb5d3bae59b08fa6114dcc043a88aff12fe0000000000000000000000000522afb5d3bae59b08fa6114dcc043a88aff12fe00000000000000000000000000000000000000000000000000045c7a1ea8ff4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17259,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607000000000000000000000000acd003ed939fb8f80b2f4fe33769d13bc04e5847000000000000000000000000acd003ed939fb8f80b2f4fe33769d13bc04e58470000000000000000000000000000000000000000000000000000000008c45ef400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -17260,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000acd003ed939fb8f80b2f4fe33769d13bc04e5847000000000000000000000000acd003ed939fb8f80b2f4fe33769d13bc04e5847000000000000000000000000000000000000000000000000005f4f2bcc07ed6f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17262,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c15175feef26f9d8e9ea44e1dded1c493a7948d7000000000000000000000000c15175feef26f9d8e9ea44e1dded1c493a7948d70000000000000000000000000000000000000000000000000139f8c47bd7114e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17263,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000007d279221e3c6b88f550f0056a4a8506dd1999841000000000000000000000000000000000000000000000000120a871cc0020000,,,1,true -17264,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000038619ab48fa7be0550646024513b198e00349fb3000000000000000000000000000000000000000000000007551800ed3c149eb8,0x6241acf9fa459615207017ddef3bc306a831c9aac39e65ba51a8abc954f9169a,2022-04-14 15:23:50.000 UTC,0,true -17265,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000b6ed7644c69416d67b522e20bc294a9a9b405b31000000000000000000000000e0bb0d3de8c10976511e5030ca403dbf4c25165b000000000000000000000000034f5590a08c2ca060494ef0b424b5620cc5ddce000000000000000000000000034f5590a08c2ca060494ef0b424b5620cc5ddce000000000000000000000000000000000000000000000000000000000bebc20000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -17269,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000251d14ea6929fc5163db5de098f82bed3710bb32000000000000000000000000251d14ea6929fc5163db5de098f82bed3710bb320000000000000000000000000000000000000000000000000038366020c30c7900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17270,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000172d9a724ce598bdfcaf5617d920cae6969e1070000000000000000000000000172d9a724ce598bdfcaf5617d920cae6969e1070000000000000000000000000000000000000000000000000dd0fbf75d11c2b200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17271,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008013ccf525b4b9cabf6f19846d409c9d8bc820b50000000000000000000000008013ccf525b4b9cabf6f19846d409c9d8bc820b500000000000000000000000000000000000000000000000000a43ba9fb96730100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17272,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000000545a605a6b0c42bb5bd01f918e17d7347095acc0000000000000000000000000000000000000000000000000dacd0ae5481d68f,,,1,true -17277,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d106794a34e67744a71cf9ecd1e7ec2089c557db000000000000000000000000d106794a34e67744a71cf9ecd1e7ec2089c557db000000000000000000000000000000000000000000000000004b0041de31fec000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17278,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002f833b4a48395ce96c6fa26ee834fef6e5a421270000000000000000000000002f833b4a48395ce96c6fa26ee834fef6e5a421270000000000000000000000000000000000000000000000000000dc190409200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17279,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b7398a7aecac2c18e2dd25f38666900be73c09eb000000000000000000000000b7398a7aecac2c18e2dd25f38666900be73c09eb0000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17280,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000240f6e31e1f4c7afd30000d779a3e64bf183c19a000000000000000000000000240f6e31e1f4c7afd30000d779a3e64bf183c19a00000000000000000000000000000000000000000000000001876cc9adc581b000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17281,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007e73fa7e1ca276ded206fcb1e4ca7d500e426dde0000000000000000000000007e73fa7e1ca276ded206fcb1e4ca7d500e426dde0000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17282,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000909402b195b28065ff1ae4d44214eb9a84934c5c000000000000000000000000909402b195b28065ff1ae4d44214eb9a84934c5c0000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17283,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000258aa64c04c29835115ef539263b44d407d1865f000000000000000000000000258aa64c04c29835115ef539263b44d407d1865f000000000000000000000000000000000000000000000000019f0cb4d7b3c93200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xcbd1aa34320cda82a8b4702a7920826e91115bb75d4cfbc2c4accda707774707,2022-08-14 19:02:55.000 UTC,0,true -17284,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000724a6685ce532eaa6d7e50fc190121ba0e125fdb000000000000000000000000724a6685ce532eaa6d7e50fc190121ba0e125fdb0000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17285,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000052981b61cec2ec625d543a917c06b26c2b2a647600000000000000000000000052981b61cec2ec625d543a917c06b26c2b2a64760000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17286,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001d7729531091e66190f59690ea3aa661dbd0e1ba0000000000000000000000001d7729531091e66190f59690ea3aa661dbd0e1ba0000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17288,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009239e943376c9a700b8c3232d1754fd88cdd20870000000000000000000000009239e943376c9a700b8c3232d1754fd88cdd20870000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17289,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000666cdb303b6ce4c27995570e06273a66d8c4bb63000000000000000000000000666cdb303b6ce4c27995570e06273a66d8c4bb630000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17290,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039652d24da8893e7d3316046f531649dc0764f9a00000000000000000000000039652d24da8893e7d3316046f531649dc0764f9a0000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17291,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000a251df99a88a20a93876205fb7f5faf2e85a4810000000000000000000000000a251df99a88a20a93876205fb7f5faf2e85a481000000000000000000000000000000000000000000000000008b0d39f93e954600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17292,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002173d6e48199512a24ef95a9293f1ed5d46f5f2e0000000000000000000000002173d6e48199512a24ef95a9293f1ed5d46f5f2e0000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17293,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000060ca0cff985910b8f2d582f766ffa920b50ecc8f00000000000000000000000060ca0cff985910b8f2d582f766ffa920b50ecc8f0000000000000000000000000000000000000000000000000000dc190409200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17294,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3fe5596e7d3a1845ea032ae9062527a91e56fcd000000000000000000000000f3fe5596e7d3a1845ea032ae9062527a91e56fcd0000000000000000000000000000000000000000000000000000ded381f8500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17296,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000049da81cea71f4290f637f1a62be5876d25c4ca6000000000000000000000000049da81cea71f4290f637f1a62be5876d25c4ca600000000000000000000000000000000000000000000000000000ded381f8500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17298,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a5269423a6cb778237a276d7209f746f9664f060000000000000000000000003a5269423a6cb778237a276d7209f746f9664f060000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17299,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007a70973471f8a71ffefe0fda91e905fc730926a60000000000000000000000007a70973471f8a71ffefe0fda91e905fc730926a60000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17300,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000698d4cf17ee2bbd49afd287328b74e36d5666654000000000000000000000000698d4cf17ee2bbd49afd287328b74e36d56666540000000000000000000000000000000000000000000000000000e531527bc00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17301,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9991995a403b33f9059bacb85666d0e43afb28c000000000000000000000000e9991995a403b33f9059bacb85666d0e43afb28c0000000000000000000000000000000000000000000000000000e61a2720d00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17302,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ac45e7f57912beae2535fb6d941eb64c6feb13f0000000000000000000000006ac45e7f57912beae2535fb6d941eb64c6feb13f0000000000000000000000000000000000000000000000000000e61a2720d00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17304,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c0d561bcb3bb59fda309c26b037079f2ecbb2cf0000000000000000000000000c0d561bcb3bb59fda309c26b037079f2ecbb2cf00000000000000000000000000000000000000000000000000000e702fbc5e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17305,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000084437d9084fbf39acae49ca7faff9946131b433000000000000000000000000084437d9084fbf39acae49ca7faff9946131b4330000000000000000000000000000000000000000000000000000e702fbc5e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17306,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000031ab4b11c342d2dde0d087fb2d7d8d7b12275fe500000000000000000000000031ab4b11c342d2dde0d087fb2d7d8d7b12275fe50000000000000000000000000000000000000000000000000000e61a2720d00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17308,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004fa4d4524502998372716acda9e639af84d3e0310000000000000000000000004fa4d4524502998372716acda9e639af84d3e0310000000000000000000000000000000000000000000000000000e61a2720d00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17309,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000033668616f8a8ce314afbe27b250be6ce45d361cb00000000000000000000000033668616f8a8ce314afbe27b250be6ce45d361cb0000000000000000000000000000000000000000000000000000e61a2720d00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17310,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001177e92fc87372f1df6f478d538ccf19436df2430000000000000000000000001177e92fc87372f1df6f478d538ccf19436df2430000000000000000000000000000000000000000000000000000e61a2720d00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17311,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000084356ffcaeb364f4e5bcbe71862a67c97842a16b0000000000000000000000000000000000000000000000000a55b1b272983993,,,1,true -17312,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007f6dfddb6a056fd03951d17ef45dd5e1612093e10000000000000000000000007f6dfddb6a056fd03951d17ef45dd5e1612093e1000000000000000000000000000000000000000000000000011c37937e08000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17313,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ec17a12cad66bd5758d4887008440435a5ac4062000000000000000000000000ec17a12cad66bd5758d4887008440435a5ac4062000000000000000000000000000000000000000000000000001081872a8fb67f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17314,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9840000000000000000000000006fd9d7ad17242c41f7131d257212c54a0e8166910000000000000000000000007ecd9a6364fe493f5ea902851243f24622a3078b0000000000000000000000007ecd9a6364fe493f5ea902851243f24622a3078b00000000000000000000000000000000000000000000000034695e07c333932f00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -17315,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ecd9a6364fe493f5ea902851243f24622a3078b0000000000000000000000007ecd9a6364fe493f5ea902851243f24622a3078b0000000000000000000000000000000000000000000000000017c4d83647cbc000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17316,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000b11c46a0601b0329d2e069900a675da75d1df6dd000000000000000000000000b11c46a0601b0329d2e069900a675da75d1df6dd00000000000000000000000000000000000000000000000897bf32e4714b14e600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -17317,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b11c46a0601b0329d2e069900a675da75d1df6dd000000000000000000000000b11c46a0601b0329d2e069900a675da75d1df6dd00000000000000000000000000000000000000000000000000a5c0111d5efe4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17318,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000882ce9e1307cd42e3daf573bdb76055cc89a4df8000000000000000000000000882ce9e1307cd42e3daf573bdb76055cc89a4df800000000000000000000000000000000000000000000000004059597f8e7969500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17321,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000006d49e448194f5425ae1120e5fac54bb0ec67631a0000000000000000000000000000000000000000000000021d3bd55e803c0000,,,1,true -17323,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005533f954d78aaf3601b8e0aa1f3ce4140bde23d70000000000000000000000005533f954d78aaf3601b8e0aa1f3ce4140bde23d700000000000000000000000000000000000000000000000001bc16d674ec800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17324,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000004682f0ccc7bd7cd668bc319fce8497a6b35277e300000000000000000000000000000000000000000000002d14378f3944f4bef7,0x4c169aceba4439b62cce13af459090f859554accb539d5d80882d63d14de8648,2021-12-01 17:04:39.000 UTC,0,true -17328,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000070f52b922e9eabf97c8d39828a045f8f81eb467b00000000000000000000000070f52b922e9eabf97c8d39828a045f8f81eb467b000000000000000000000000000000000000000000000000006a94d74f43000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17329,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000005faa51f65e1dc92ab7c18faadb1435f90ac5fa9c00000000000000000000000000000000000000000000000b02acf2e392709e8e,0x9f9888a69077b73863794f7773d0689ef61ab7eebbca5323853c0a618eb08a1f,2021-11-28 12:10:47.000 UTC,0,true -17331,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000051679136e1a3407912f8fa131bc5f611c52d9fee00000000000000000000000051679136e1a3407912f8fa131bc5f611c52d9fee00000000000000000000000000000000000000000000000001425dbf8daff34200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17332,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000308a2a13f0cfe9d6f17d3b15da7278b70b85523c000000000000000000000000308a2a13f0cfe9d6f17d3b15da7278b70b85523c000000000000000000000000000000000000000000000000000d1e38e721ea8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17333,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000001a91c0df156a5f38aec0813d055aa0184fc478260000000000000000000000000000000000000000000000005d7aaebc1a055d58,,,1,true -17334,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000001a91c0df156a5f38aec0813d055aa0184fc478260000000000000000000000000000000000000000000000000001ae50b2a26b62,,,1,true -17337,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009a72c4275919b54401c9665ae6e4ea070c50c9230000000000000000000000009a72c4275919b54401c9665ae6e4ea070c50c9230000000000000000000000000000000000000000000000000137e11559abad0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17338,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000675d5f9f18afd31aed61b28cf69f55ab12030b05000000000000000000000000675d5f9f18afd31aed61b28cf69f55ab12030b0500000000000000000000000000000000000000000000000001d7cbf31616e64a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17340,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000009c07990bc8e0ae119edb60ae751c5b1a21ab271600000000000000000000000000000000000000000000000eef75e630a873f30b,0x1c2eedc66fcc722cd6cc72ec097b21ebe0382115b164a502520cf1f020703967,2021-11-23 21:51:31.000 UTC,0,true -17341,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000baa882d68fc5325fc3899de264f24b5981523a5c00000000000000000000000000000000000000000000001236efcbcbb3400000,0x1f23044a56e431b0f1a8ebda55ebb2d09410ae6703df3fe051e7c63e2742ff2b,2021-12-15 04:08:25.000 UTC,0,true -17344,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000471bd4de7f8f26558cfe3256c8cf8e239abaede6000000000000000000000000471bd4de7f8f26558cfe3256c8cf8e239abaede60000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17345,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002fb17d612f277ea6689f2500ff9534c4784cea020000000000000000000000002fb17d612f277ea6689f2500ff9534c4784cea020000000000000000000000000000000000000000000000000000e61a2720d00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17346,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc7bf974d38e52a66d5259feaa9552432f7dc0ca000000000000000000000000dc7bf974d38e52a66d5259feaa9552432f7dc0ca00000000000000000000000000000000000000000000000000cbe4d1ac5b4ec800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17347,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009aedae918f56d8df08f2a5ea473d2aaff7c4ddc90000000000000000000000009aedae918f56d8df08f2a5ea473d2aaff7c4ddc90000000000000000000000000000000000000000000000000000e61a2720d00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17348,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000059d69238caad27f2353075065bbd4a3f91dc005100000000000000000000000059d69238caad27f2353075065bbd4a3f91dc00510000000000000000000000000000000000000000000000000000e531527bc00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17349,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e137d025bbf8284cdc906bfe8a59bc26e7a6cf5d000000000000000000000000e137d025bbf8284cdc906bfe8a59bc26e7a6cf5d0000000000000000000000000000000000000000000000000000e61a2720d00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17350,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000065e2d45920eb747a4895f3040aaa6277372c0c1800000000000000000000000065e2d45920eb747a4895f3040aaa6277372c0c180000000000000000000000000000000000000000000000000000e531527bc00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17351,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000067b6a6cd8f7815369abe49f8fb397a6349ba524400000000000000000000000067b6a6cd8f7815369abe49f8fb397a6349ba52440000000000000000000000000000000000000000000000000000e531527bc00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17352,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d42f9c063ca6d8d21b78a12ae3ffb62d3b64f949000000000000000000000000d42f9c063ca6d8d21b78a12ae3ffb62d3b64f9490000000000000000000000000000000000000000000000000000e531527bc00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17353,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000013a32aa268ca78d82a7c3ce5e59d78dbe72a5a17000000000000000000000000000000000000000000000066f8f181aef1472327,0xf2ca490457e211260dd21a54817fa99e1eabfe3dc11bfca153a5e7fdcd5a32b3,2021-12-05 03:37:46.000 UTC,0,true -17354,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ddabad84d46a65e58be5f29a16225d6d8e1fc97f000000000000000000000000ddabad84d46a65e58be5f29a16225d6d8e1fc97f0000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17355,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001fb90ec242c3da509cacb8a0b6415903f53f5dd60000000000000000000000001fb90ec242c3da509cacb8a0b6415903f53f5dd60000000000000000000000000000000000000000000000000000e18dffe7800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17359,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005bce5cfdbcff2d53fa30d654813c09f0ac23b6dd0000000000000000000000005bce5cfdbcff2d53fa30d654813c09f0ac23b6dd0000000000000000000000000000000000000000000000000000e0a52b42700000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17360,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009ea9569ebfe156e1548c6bc6795fcfc6b63b18410000000000000000000000009ea9569ebfe156e1548c6bc6795fcfc6b63b18410000000000000000000000000000000000000000000000000000e0a52b42700000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17361,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000640d148193fbd62e0057cd39c7400ef1816371d2000000000000000000000000640d148193fbd62e0057cd39c7400ef1816371d20000000000000000000000000000000000000000000000000000dfbc569d600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17362,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000367694c570581a87dc14fff5b1a032955678b7dc000000000000000000000000367694c570581a87dc14fff5b1a032955678b7dc0000000000000000000000000000000000000000000000000000e276d48c900000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17363,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000e6980a436e36c3543872f3e496c2466a01f14c850000000000000000000000000000000000000000000000012e7de6058bcd726e,,,1,true -17364,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000090eb33aedd32d1610e8d7defe1cc7230faa8b1e800000000000000000000000090eb33aedd32d1610e8d7defe1cc7230faa8b1e80000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17365,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c74abd2cf12ed34f5b88eda5f35558d899465670000000000000000000000008c74abd2cf12ed34f5b88eda5f35558d899465670000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17367,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b80058c3100c0d2a2ed35295f139ea75a58faf90000000000000000000000002b80058c3100c0d2a2ed35295f139ea75a58faf9000000000000000000000000000000000000000000000000003e55adb7164f9800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1b9257c5d4f5ec727461491ed4d391800c63c68004b8ef84c7d8ea2b0705df3a,2022-06-12 12:42:46.000 UTC,0,true -17368,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e27993c8571f321b94aed638c91be186178eb826000000000000000000000000e27993c8571f321b94aed638c91be186178eb8260000000000000000000000000000000000000000000000000000e276d48c900000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17369,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000001852fc454ee9c176e847c77ba63841ef122ff9300000000000000000000000001852fc454ee9c176e847c77ba63841ef122ff930000000000000000000000000000000000000000000000000000e18dffe7800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17370,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f3ac722d2302758bd5f331324e4b9d8cd4fb33d2000000000000000000000000f3ac722d2302758bd5f331324e4b9d8cd4fb33d20000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17371,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000656e9642ae9e3a9edbe4d53927aa58c68428094b000000000000000000000000656e9642ae9e3a9edbe4d53927aa58c68428094b0000000000000000000000000000000000000000000000000000e18dffe7800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17372,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f065362c176bac34aa0ff34aec08928c28175ee5000000000000000000000000f065362c176bac34aa0ff34aec08928c28175ee5000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17374,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d657c543723c8563daba902ed078bc28ea9e5597000000000000000000000000d657c543723c8563daba902ed078bc28ea9e559700000000000000000000000000000000000000000000000001456dab70e7390000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17377,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000053f66041bfe3b65ce1dbd03694c2be84cba78b2100000000000000000000000053f66041bfe3b65ce1dbd03694c2be84cba78b2100000000000000000000000000000000000000000000000000abc238bdbedd6c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17379,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d07c8b9eaf17b6d31abd4125e28c7c6a5e1e9870000000000000000000000000d07c8b9eaf17b6d31abd4125e28c7c6a5e1e98700000000000000000000000000000000000000000000000000b8a248c2b320e8000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17380,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f15d4b322a88213674431814fe249d561abf465b000000000000000000000000f15d4b322a88213674431814fe249d561abf465b000000000000000000000000000000000000000000000000015181ff25a9800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17381,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d7be06fed116c75c4b0e2d766f5b69ee741e15e200000000000000000000000000000000000000000000000029a2241af62c0000,,,1,true -17383,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000079a98a9f41051e119cad1b9ffefe523cd0be65f000000000000000000000000000000000000000000000004507116808705714f8,0x60eeb170ba2affe996b6933aa2d818c9ec291fad97d4fc92634be852f2ffc126,2022-02-03 06:22:16.000 UTC,0,true -17384,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004b4781df451642f490de17b0f58354e426f632230000000000000000000000004b4781df451642f490de17b0f58354e426f632230000000000000000000000000000000000000000000000000138763e61a5560000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17386,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006664bbd4748c7678766caf2d591fdb6ee2cb15470000000000000000000000006664bbd4748c7678766caf2d591fdb6ee2cb1547000000000000000000000000000000000000000000000000014f24787b57766700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17388,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000009251d5835f4a68d1e3603735b43409941c24434300000000000000000000000000000000000000000000001f9127525004faafba,,,1,true -17389,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000873676c1b5ef9b387b3cc99dabe73c804f90f972000000000000000000000000873676c1b5ef9b387b3cc99dabe73c804f90f972000000000000000000000000000000000000000000000000007f16a28481e9fb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17390,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000009c07990bc8e0ae119edb60ae751c5b1a21ab271600000000000000000000000000000000000000000000002244482d97e8bf33f1,0xe7569ef3a4dfd363b6a57514f448eb092d5bcaa673b961ba8b8b83e2f52f7be1,2021-11-23 21:53:51.000 UTC,0,true -17391,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ff85c6208ee8a3bc484f73a9b8f2d55b9b01c000000000000000000000000006ff85c6208ee8a3bc484f73a9b8f2d55b9b01c0000000000000000000000000000000000000000000000000001b335624357578000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17393,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000eecf245ae681a55ba5dcbf2b4ba8b08cb4a92451000000000000000000000000eecf245ae681a55ba5dcbf2b4ba8b08cb4a924510000000000000000000000000000000000000000000000000000dc190409200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17394,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000044e02bed8aa1c18fee0283ca262a05df7b1cbc4100000000000000000000000044e02bed8aa1c18fee0283ca262a05df7b1cbc410000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17395,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000036cdf46b4fd4381f5d79e009f01400b92b8ce6d400000000000000000000000036cdf46b4fd4381f5d79e009f01400b92b8ce6d40000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17396,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c4066642fe89232369d0adb6b6e125ee29197cd0000000000000000000000003c4066642fe89232369d0adb6b6e125ee29197cd0000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17398,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000028180c4b1852333a258ce261b479fb99e1d5d72d00000000000000000000000028180c4b1852333a258ce261b479fb99e1d5d72d0000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17399,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003e3dea41bb540288ffd6ae03c4c849c24dc58a6e0000000000000000000000003e3dea41bb540288ffd6ae03c4c849c24dc58a6e0000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17400,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008b97baab653bd6424d7f9f1826476115c24da4220000000000000000000000008b97baab653bd6424d7f9f1826476115c24da4220000000000000000000000000000000000000000000000000000d875b174e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17403,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000290bd8f5e770d500763004cef3f09a245cc64733000000000000000000000000290bd8f5e770d500763004cef3f09a245cc647330000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17404,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ec5d524582b8d3f921631ec233262edcbbed008f000000000000000000000000ec5d524582b8d3f921631ec233262edcbbed008f0000000000000000000000000000000000000000000000000000d875b174e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17405,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b633ea40f49b4bf8e00b938bbe48d1438630e6ac000000000000000000000000b633ea40f49b4bf8e00b938bbe48d1438630e6ac0000000000000000000000000000000000000000000000000000d875b174e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17406,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000de3521ed8529fbcf3c3e3de1fde0dc60afb51239000000000000000000000000de3521ed8529fbcf3c3e3de1fde0dc60afb512390000000000000000000000000000000000000000000000000000d875b174e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17407,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005d6dd6b50585e107167285851efa5cfa0cac54f50000000000000000000000005d6dd6b50585e107167285851efa5cfa0cac54f50000000000000000000000000000000000000000000000000000d78cdccfd00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17408,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d438da20a82a9b131a2b53880a30214f353a32a5000000000000000000000000d438da20a82a9b131a2b53880a30214f353a32a50000000000000000000000000000000000000000000000000000db302f64100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17409,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003328df0d9924308e257cdd19e40df4bcae8e81190000000000000000000000003328df0d9924308e257cdd19e40df4bcae8e81190000000000000000000000000000000000000000000000000000ded381f8500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17411,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006e8a0f43b7eec5c77a9d4aac28570b0a0b5b19670000000000000000000000006e8a0f43b7eec5c77a9d4aac28570b0a0b5b19670000000000000000000000000000000000000000000000000000d875b174e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17412,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001a28d5b9e40762bde62b39ed3227a0dbb42417110000000000000000000000001a28d5b9e40762bde62b39ed3227a0dbb42417110000000000000000000000000000000000000000000000000000d5bb3385b00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17414,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c7b9b1a605bdec44664e61603eb7e061ab94864a000000000000000000000000c7b9b1a605bdec44664e61603eb7e061ab94864a000000000000000000000000000000000000000000000000057661692ea0016700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x1613f3f53325f08439dc254dcdac99d9319633c13c10e3edb190b5c69ddc369c,2022-06-01 08:36:32.000 UTC,0,true -17415,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000c625e0541656cbdde921cc6179cb920633f5408c000000000000000000000000c625e0541656cbdde921cc6179cb920633f5408c00000000000000000000000000000000000000000000001418216a02f7f181ef00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0xe6e33def00c5a0630b300f51090912049f46fa08cb8430162d543c08d8518c9c,2021-12-09 16:26:31.000 UTC,0,true -17416,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000014f0f90fa59e3bd60aa7e1097abda932f2f1640500000000000000000000000014f0f90fa59e3bd60aa7e1097abda932f2f16405000000000000000000000000000000000000000000000000013fbe85edc9000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x59cfb83a88b1d49724ea96c9327d4bfe351b5e4463fdb1bc34918fb18ef652a9,2022-08-09 09:33:28.000 UTC,0,true -17417,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a05c33f8e7d9e600f5f61abdade4537320196030000000000000000000000003a05c33f8e7d9e600f5f61abdade4537320196030000000000000000000000000000000000000000000000000000d5bb3385b00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17419,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a199b0bfbd246994738ea545eac381aac73503ae000000000000000000000000a199b0bfbd246994738ea545eac381aac73503ae0000000000000000000000000000000000000000000000000000d5bb3385b00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17420,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a22d38ac19d95792dac606674201aa306e8498e2000000000000000000000000a22d38ac19d95792dac606674201aa306e8498e20000000000000000000000000000000000000000000000000000d4d25ee0a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17421,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cedf43079f72894103b5817b467ab361496c2ac4000000000000000000000000cedf43079f72894103b5817b467ab361496c2ac40000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17422,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000885a3810e1fca74faac070af24c0de8378323e92000000000000000000000000885a3810e1fca74faac070af24c0de8378323e920000000000000000000000000000000000000000000000000000d78cdccfd00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17423,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fbcda728abb86d3fa38d0263cc5c831eb06bc1e0000000000000000000000000fbcda728abb86d3fa38d0263cc5c831eb06bc1e00000000000000000000000000000000000000000000000000000d5bb3385b00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17424,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003519ef2ca968712388ce7d39f1523d5b2dfdd8d90000000000000000000000003519ef2ca968712388ce7d39f1523d5b2dfdd8d90000000000000000000000000000000000000000000000000000d217e0f1700000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17425,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c67df5fbad50979f0ea2bb7111f84df1366c85a5000000000000000000000000c67df5fbad50979f0ea2bb7111f84df1366c85a50000000000000000000000000000000000000000000000000000d5bb3385b00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17426,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc79e4fe5d61076bb91fe2aab0446c522b274aee000000000000000000000000bc79e4fe5d61076bb91fe2aab0446c522b274aee0000000000000000000000000000000000000000000000000000d5bb3385b00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17428,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009bf90bcff11df8dbbd22e2efb082b2fcaddb86d30000000000000000000000009bf90bcff11df8dbbd22e2efb082b2fcaddb86d30000000000000000000000000000000000000000000000000000d6a4082ac00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17429,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000064373326129e926f4425ddfd294ae22075eb2aba00000000000000000000000064373326129e926f4425ddfd294ae22075eb2aba000000000000000000000000000000000000000000000000006651d91b48dd0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17430,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bcb1c9373b1214ce96ce847160e33660aa293fc8000000000000000000000000bcb1c9373b1214ce96ce847160e33660aa293fc8000000000000000000000000000000000000000000000000004f157eec24340000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17431,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000822f9725ef111647863fc4035d13761efdb7e488000000000000000000000000822f9725ef111647863fc4035d13761efdb7e488000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17433,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000000258da40e011acb8e0f6308d6dda4de363c9b604000000000000000000000000000000000000000000000000053906430e9d7cd5,,,1,true -17436,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000902c915d3a062aa72a4e3c9fbdf193e19025cdd4000000000000000000000000902c915d3a062aa72a4e3c9fbdf193e19025cdd4000000000000000000000000000000000000000000000000132fe40ca22df40900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x6d44845d9179ef5580559db92926b78426e3e69ef23c20758f86593a962327e2,2021-11-27 22:39:52.000 UTC,0,true -17445,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000edcb53f0ea600b3c15eb2351f9aee65660d383de000000000000000000000000000000000000000000000000114631114ba8c6dd,,,1,true -17446,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ab8887950986fb6502c93af7611cf4c9d60b4070000000000000000000000006ab8887950986fb6502c93af7611cf4c9d60b4070000000000000000000000000000000000000000000000000051b660cdd5800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17447,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ab8887950986fb6502c93af7611cf4c9d60b4070000000000000000000000006ab8887950986fb6502c93af7611cf4c9d60b407000000000000000000000000000000000000000000000000001517ab8808100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17452,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000006c00fd260ce525f7945f6bd91bcad5e8d57ef6d10000000000000000000000000000000000000000000000694cc0c717efb7cec4,0xa6fcf19d464743cbcfa062069cf563735d49b4018d876fbf2416c78d3b640d24,2021-12-19 10:29:34.000 UTC,0,true -17455,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ab17ffe29ef29439e6e0236bf70afdec20dec594000000000000000000000000ab17ffe29ef29439e6e0236bf70afdec20dec594000000000000000000000000000000000000000000000000020eb9304f74215900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xa3141397c090dc22de6008affaa9e6ea6462c35b1390a11a37f4782d5da68c20,2022-07-24 06:34:07.000 UTC,0,true -17456,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000020b45ffb7bdd01a17c7477acf706ce6781d259f200000000000000000000000020b45ffb7bdd01a17c7477acf706ce6781d259f200000000000000000000000000000000000000000000000001a66d2afb0ec50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17457,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000078613721f001003c83d17930a470140edb3df5d900000000000000000000000078613721f001003c83d17930a470140edb3df5d90000000000000000000000000000000000000000000000000233bd216610160000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xb4614ad7e3928afc2d5cac3d2ba465c47a9181fed7ba3081ed885b24167beafc,2022-11-01 08:39:23.000 UTC,0,true -17460,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000350a791bfc2c21f9ed5d10980dad2e2638ffa7f6000000000000000000000000b3b49304c663cd70c0a3fa15cf29de426b6d109d000000000000000000000000b3b49304c663cd70c0a3fa15cf29de426b6d109d00000000000000000000000000000000000000000000000b14b5c9374c17f6b300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -17461,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000038eef87a7123c61d37e140c1e6e15f917acddcfb00000000000000000000000038eef87a7123c61d37e140c1e6e15f917acddcfb00000000000000000000000000000000000000000000000000cff00540d0470000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17462,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032753fc346c1479271490fbab8aa2faf88f3135500000000000000000000000032753fc346c1479271490fbab8aa2faf88f31355000000000000000000000000000000000000000000000000002a01021fd1e8c400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17463,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000cc3c15da0f598711cea394460653540ef97ff99e00000000000000000000000000000000000000000000000d8449a0f0a7e60000,,,1,true -17464,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007599635c81550d076fae4b6971716e983ef86d3e0000000000000000000000007599635c81550d076fae4b6971716e983ef86d3e000000000000000000000000000000000000000000000000001cae2868c7633400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17465,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bfd457de4cbc3b930b34a893cc0463dc095c6d90000000000000000000000000bfd457de4cbc3b930b34a893cc0463dc095c6d90000000000000000000000000000000000000000000000000001bf8c7d4d0c30800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17466,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d9884ed4cd8e44cc7fe50f9dc23587b8a9c7904e000000000000000000000000d9884ed4cd8e44cc7fe50f9dc23587b8a9c7904e000000000000000000000000000000000000000000000000002ef590bac57e1f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17467,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d1b02eba530e7248102a455200a41dae58058cd0000000000000000000000006d1b02eba530e7248102a455200a41dae58058cd0000000000000000000000000000000000000000000000000624a42eeb32504400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x2c4985004b213ea2f601668cb8400b466d526e3b7bff293a19ab54fe29194da8,2021-11-23 23:11:21.000 UTC,0,true -17471,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d867583eebd7f82f79d12836d15c512b54e7c2c4000000000000000000000000d867583eebd7f82f79d12836d15c512b54e7c2c40000000000000000000000000000000000000000000000000000d4d25ee0a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17472,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007414e97e91645d0ebbd6b4ec354b3617741a6b4c0000000000000000000000007414e97e91645d0ebbd6b4ec354b3617741a6b4c0000000000000000000000000000000000000000000000000000d3e98a3b900000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17473,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000066f4594eed3ddbc6eae99b5116bb0e2f4d4a71b900000000000000000000000066f4594eed3ddbc6eae99b5116bb0e2f4d4a71b90000000000000000000000000000000000000000000000000000d12f0c4c600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17474,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a01be7266be4d0d63802691b576491af7055e018000000000000000000000000a01be7266be4d0d63802691b576491af7055e0180000000000000000000000000000000000000000000000000000d217e0f1700000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17475,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071cc934d93ae3cdd597d3a7017a05293b3a862fe00000000000000000000000071cc934d93ae3cdd597d3a7017a05293b3a862fe0000000000000000000000000000000000000000000000000000d95e8619f00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17476,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000050f56bd03c9fb317ec2c6bac998b1e773e12df8800000000000000000000000050f56bd03c9fb317ec2c6bac998b1e773e12df880000000000000000000000000000000000000000000000000000d217e0f1700000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17477,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005143e1e81c9ba050499fff2212a13a14a4be5fd80000000000000000000000005143e1e81c9ba050499fff2212a13a14a4be5fd80000000000000000000000000000000000000000000000000000d300b596800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17478,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003f3382b354835151c7e2f8d61f7318d4f118efd20000000000000000000000003f3382b354835151c7e2f8d61f7318d4f118efd20000000000000000000000000000000000000000000000000000d300b596800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17479,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000b01a5802f354e19a2f42b68ebe9cfe6d9d0bb430000000000000000000000000b01a5802f354e19a2f42b68ebe9cfe6d9d0bb430000000000000000000000000000000000000000000000000000d3e98a3b900000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17480,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d845d5f143f1401a1650c2b70e2ea3350b1d50b3000000000000000000000000d845d5f143f1401a1650c2b70e2ea3350b1d50b30000000000000000000000000000000000000000000000000000d4d25ee0a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17481,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001728f815456c6d7f516584d354fb1b80346ffb9a0000000000000000000000001728f815456c6d7f516584d354fb1b80346ffb9a0000000000000000000000000000000000000000000000000000d3e98a3b900000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17482,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ee16d8f098d61a5a8504f3775c508e25b7675640000000000000000000000006ee16d8f098d61a5a8504f3775c508e25b7675640000000000000000000000000000000000000000000000000000d3e98a3b900000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17483,0x10e6593cdda8c58a1d0f14c5164b376352a55f2f,0x467194771dae2967aef3ecbedd3bf9a310c76c65,0xa9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000005b513ea36823a094a66a291d3ab88eda2298943c0000000000000000000000005b513ea36823a094a66a291d3ab88eda2298943c00000000000000000000000000000000000000000000000b0ae9a14e42ad355a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -17484,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005b513ea36823a094a66a291d3ab88eda2298943c0000000000000000000000005b513ea36823a094a66a291d3ab88eda2298943c00000000000000000000000000000000000000000000000000776cdf5c35dbd100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17485,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000755192487edda64e5114f8a94ded82d7b5a03aa1000000000000000000000000755192487edda64e5114f8a94ded82d7b5a03aa10000000000000000000000000000000000000000000000000000d3e98a3b900000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17486,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000203f6b4778864ea089c1711f2574031f9e8b5f17000000000000000000000000203f6b4778864ea089c1711f2574031f9e8b5f170000000000000000000000000000000000000000000000000000d3e98a3b900000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17487,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000002f6be2184972c7786ef1c5cc2d92f11c55c33d080000000000000000000000000000000000000000000000015e10b080ac027e3e,,,1,true -17488,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004315d7cd76c83bac4e27cd1e4664ea610d1100770000000000000000000000004315d7cd76c83bac4e27cd1e4664ea610d1100770000000000000000000000000000000000000000000000000000d300b596800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17489,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000091f9b7b15458972f78af36e602876122bee8995400000000000000000000000091f9b7b15458972f78af36e602876122bee899540000000000000000000000000000000000000000000000000000d4d25ee0a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17490,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000950453ac097411e04f2a2fa745ca37887909bec4000000000000000000000000950453ac097411e04f2a2fa745ca37887909bec40000000000000000000000000000000000000000000000000000d4d25ee0a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17491,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ed521bd887f427cf79cbcf0fb3d3eaa68f7146f0000000000000000000000006ed521bd887f427cf79cbcf0fb3d3eaa68f7146f0000000000000000000000000000000000000000000000000000d6a4082ac00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17492,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ae1e2c000ce7463d641f995f42a6eee2e0b48b00000000000000000000000006ae1e2c000ce7463d641f995f42a6eee2e0b48b00000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17493,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000c8e9b24afee116a08387414f6b6a8e8823f00fa300000000000000000000000000000000000000000000000df027c9ea9f82f5fc,,,1,true -17494,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f9eb56be6042802ce130d5149c25dbec0ca9be1e000000000000000000000000f9eb56be6042802ce130d5149c25dbec0ca9be1e0000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17495,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000efe6649c303e0032fe3afaccb4488391ef8943f6000000000000000000000000efe6649c303e0032fe3afaccb4488391ef8943f600000000000000000000000000000000000000000000000001548f3e29018f4e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xf559761853a0f2abdda5bd05a174aa2ae07fe195329e569cc60f0a479604a294,2021-12-20 11:59:49.000 UTC,0,true -17496,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000dfd2df5b5a5305f69f499e06ef4b0442767aebf0000000000000000000000000dfd2df5b5a5305f69f499e06ef4b0442767aebf0000000000000000000000000000000000000000000000000000d875b174e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17497,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000042a14ec383551dec3cacc62ad58ab7413e5518a0000000000000000000000000000000000000000000000007ca94f93b5c5c7fac,0x7e45531ecb144662a57857b41230113ba3cacd36878d9c8f8d26b7ee189bb76d,2022-02-01 21:37:21.000 UTC,0,true -17498,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002178367ea01a093caf1cd6ab7608a82b9521ab410000000000000000000000002178367ea01a093caf1cd6ab7608a82b9521ab41000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17499,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002b21bbe1b1c7097a5402ad4ad9860f19e07badb00000000000000000000000002b21bbe1b1c7097a5402ad4ad9860f19e07badb00000000000000000000000000000000000000000000000000000dd01d8ae300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17501,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000034e100ae67f93d9ccb9c0cf11a34e56dbdc09ad000000000000000000000000034e100ae67f93d9ccb9c0cf11a34e56dbdc09ad0000000000000000000000000000000000000000000000000000d875b174e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17502,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000f1b630493180996c769539ec5e402153eb7f5af0000000000000000000000000f1b630493180996c769539ec5e402153eb7f5af0000000000000000000000000000000000000000000000000000d95e8619f00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17503,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000001e69ef2d9be1ad7468d6a305ad01d347f12f6d40000000000000000000000000000000000000000000000001f823602dad852d29,,,1,true -17504,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000189d1e4299dbf518e54e507e05e57c0e350daf68000000000000000000000000189d1e4299dbf518e54e507e05e57c0e350daf680000000000000000000000000000000000000000000000000000d78cdccfd00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17505,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007a7742c55a5361de00e9b91be6faad46cabd12eb0000000000000000000000007a7742c55a5361de00e9b91be6faad46cabd12eb0000000000000000000000000000000000000000000000000000d92ff52c200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17506,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000744d5875fc81af39adb0826a3b4c4b84e0448655000000000000000000000000744d5875fc81af39adb0826a3b4c4b84e04486550000000000000000000000000000000000000000000000000000d92ff52c200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17507,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d9c48c0d99140f3db0e8b12c6c7b2147da67ccd0000000000000000000000006d9c48c0d99140f3db0e8b12c6c7b2147da67ccd0000000000000000000000000000000000000000000000000000da301248180000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17508,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001303a8a5fb974c2d7df6157010b1b27f55924ce00000000000000000000000001303a8a5fb974c2d7df6157010b1b27f55924ce00000000000000000000000000000000000000000000000000000d82fd810280000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17509,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a35425dc344212c23d6d3f3cce76a5d64f218ad5000000000000000000000000a35425dc344212c23d6d3f3cce76a5d64f218ad50000000000000000000000000000000000000000000000000000d875b174e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17510,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000752bfefb7857685849929b1f5c5de653e5443f68000000000000000000000000752bfefb7857685849929b1f5c5de653e5443f680000000000000000000000000000000000000000000000000000d95e8619f00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17511,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000051fd2af043bb40f68cd9d69ec07262834649a57600000000000000000000000051fd2af043bb40f68cd9d69ec07262834649a5760000000000000000000000000000000000000000000000000000d918acb5380000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17512,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000086bccfa5549e4127b3f140dc203762ae29ed925000000000000000000000000086bccfa5549e4127b3f140dc203762ae29ed9250000000000000000000000000000000000000000000000000000d875b174e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17513,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000038664ea95a6464e5d70496e12b559a86e9fcc33400000000000000000000000038664ea95a6464e5d70496e12b559a86e9fcc3340000000000000000000000000000000000000000000000000000d78cdccfd00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17515,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b67eebe86182a234aae9001ee449b2bdaae1e3b6000000000000000000000000b67eebe86182a234aae9001ee449b2bdaae1e3b6000000000000000000000000000000000000000000000000002b15ec1c3092ef00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17516,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001556927ca1dd8b2e80112105d83fa6c5d7ea39550000000000000000000000001556927ca1dd8b2e80112105d83fa6c5d7ea39550000000000000000000000000000000000000000000000000000d78cdccfd00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17518,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000086cd2f687a86b3a7dca6c01a71a9b9e2f6e4a2eb00000000000000000000000086cd2f687a86b3a7dca6c01a71a9b9e2f6e4a2eb0000000000000000000000000000000000000000000000000000d7759458e80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17519,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008941471a1520bdd3208aa1d85fe9e989e0bef59e0000000000000000000000008941471a1520bdd3208aa1d85fe9e989e0bef59e0000000000000000000000000000000000000000000000000000d95e8619f00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17520,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000242743c00659e6a7f566de17ab7c47735bf9041f000000000000000000000000242743c00659e6a7f566de17ab7c47735bf9041f0000000000000000000000000000000000000000000000000000d875b174e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17521,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fc55a58d67a5b8ff5a0be3a5029ff4ec93a7cb09000000000000000000000000fc55a58d67a5b8ff5a0be3a5029ff4ec93a7cb090000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17522,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000be5eb30e34716ae8b9ef8b712f6afeacd6b0e70d000000000000000000000000be5eb30e34716ae8b9ef8b712f6afeacd6b0e70d0000000000000000000000000000000000000000000000000000da301248180000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17523,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6f0f886028e694f6c6cc98a78d2576cdaac4269000000000000000000000000d6f0f886028e694f6c6cc98a78d2576cdaac4269000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17526,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003040ea8303133a1b063ac967c72c1604e1642bfb0000000000000000000000003040ea8303133a1b063ac967c72c1604e1642bfb0000000000000000000000000000000000000000000000000dd9f8050df59a0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x79a8272fe2873b6658dcd01733f63d4f9c41da91c24db2b6d02dc0ae02f37c0e,2021-11-23 05:51:28.000 UTC,0,true -17531,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d3b468d28e942bbc25570029a50aa102e0f2c18900000000000000000000000000000000000000000000000ae3192e2183dd3e32,0x5a31b61bec6e5c400fb6a7bc1914dd747b08263e825723648ba6b568bd6cea1c,2021-11-25 12:19:26.000 UTC,0,true -17534,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006fa39574ab01aa1d8e21f6f9f12a4ba80a788b020000000000000000000000006fa39574ab01aa1d8e21f6f9f12a4ba80a788b020000000000000000000000000000000000000000000000000206618aecb98a6700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x693bfd1669523560750b192d3d06e35016d7a5dd7e8629f65631b033ccdd226b,2021-12-26 00:44:17.000 UTC,0,true -17535,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009263de705ba26acd1fc0820ad85235c400f9cadf0000000000000000000000009263de705ba26acd1fc0820ad85235c400f9cadf0000000000000000000000000000000000000000000000000203a3f2c472980f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xe09261901c3a21362cb05901c1069c7113d88e52ab1ad2f02f2d7098626d3e02,2021-12-26 01:00:29.000 UTC,0,true -17536,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000067861906c5e9e8d6a8b2f523f5a2d5991524fe0000000000000000000000000067861906c5e9e8d6a8b2f523f5a2d5991524fe0000000000000000000000000000000000000000000000000002019f8f34c21fab00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x15b3716a07a918d1123774977659f2660637fa5796a4ec424e1185303941a624,2021-12-26 01:16:26.000 UTC,0,true -17540,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000062accbf874fe1b42d3c473819c9053b663dc3c4900000000000000000000000062accbf874fe1b42d3c473819c9053b663dc3c4900000000000000000000000000000000000000000000000000d529ae9e86000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17541,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000e8fe9295cdd4fd2a6edd0cd47eafb6d61d8e50e10000000000000000000000000000000000000000000000047a045b29c30d0d36,,,1,true -17544,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a0ac49961698a8c6ad87ecaf91f3b148a6c5571c000000000000000000000000a0ac49961698a8c6ad87ecaf91f3b148a6c5571c00000000000000000000000000000000000000000000000000422437cc48610000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17546,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d67507850ec643e33e4ee494c3e226fb62bcea12000000000000000000000000d67507850ec643e33e4ee494c3e226fb62bcea120000000000000000000000000000000000000000000000000000ded381f8500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17547,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc7d9fe33903376798d63bfc39e9db8a1db7c887000000000000000000000000dc7d9fe33903376798d63bfc39e9db8a1db7c8870000000000000000000000000000000000000000000000000000dd01d8ae300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17548,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006c10654f7479f68284f3a0415b7240d13912d7d50000000000000000000000006c10654f7479f68284f3a0415b7240d13912d7d50000000000000000000000000000000000000000000000000000dd01d8ae300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17549,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032a818fb907f2ef5e40138638d1f200a4456340200000000000000000000000032a818fb907f2ef5e40138638d1f200a445634020000000000000000000000000000000000000000000000000000dd01d8ae300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17551,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000df4c99f93c3130e3287384ad5fad660891abe4660000000000000000000000000000000000000000000000056bc75e2d63100000,0x65b862ecf2f4e490265e53e34a0a0a8d563eadb17863b136810c02fc92b7ee30,2021-11-23 08:02:09.000 UTC,0,true -17552,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cdeaad6d0c8c8ceb60cd286bf76a60e26961bb52000000000000000000000000cdeaad6d0c8c8ceb60cd286bf76a60e26961bb520000000000000000000000000000000000000000000000000000ded381f8500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17553,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bc820741956b6315287004667aceddf3d15ea1bd000000000000000000000000bc820741956b6315287004667aceddf3d15ea1bd0000000000000000000000000000000000000000000000000000e702fbc5e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17554,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e2f47cbd9594d2eea0c00af354d9c325cdb7392c000000000000000000000000e2f47cbd9594d2eea0c00af354d9c325cdb7392c0000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17555,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000001dc4b7cd57245e46c6c93d1bf89f6fa9355640600000000000000000000000001dc4b7cd57245e46c6c93d1bf89f6fa935564060000000000000000000000000000000000000000000000000000e35fa931a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17556,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f66f75b42277a3a262b681b35329f45d725261bf000000000000000000000000f66f75b42277a3a262b681b35329f45d725261bf0000000000000000000000000000000000000000000000000000e61a2720d00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17557,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000df642259ef722c58775ad4e2535d31fff4d75ad4000000000000000000000000df642259ef722c58775ad4e2535d31fff4d75ad40000000000000000000000000000000000000000000000000000ded381f8500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17558,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000413d1b2573237f0dad55851a93b0b376ab1607af000000000000000000000000413d1b2573237f0dad55851a93b0b376ab1607af0000000000000000000000000000000000000000000000000000dd01d8ae300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17559,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c1dc563d39a785ed7f0c2301b4d00245e33c53b0000000000000000000000000c1dc563d39a785ed7f0c2301b4d00245e33c53b0000000000000000000000000000000000000000000000000000db302f64100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17560,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002895b5b2616960f9d0cc324630ab0c6b1ab456880000000000000000000000002895b5b2616960f9d0cc324630ab0c6b1ab456880000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17561,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004ccefa8e656308fa7fdd7acf9509467266edf84d0000000000000000000000004ccefa8e656308fa7fdd7acf9509467266edf84d0000000000000000000000000000000000000000000000000000d95e8619f00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17562,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cef59e634b5536823037c15db7a9548ea996be4c000000000000000000000000cef59e634b5536823037c15db7a9548ea996be4c0000000000000000000000000000000000000000000000000000d92ff52c200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17563,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008ac4ad1976120b8b15da77e52d74932bd3184b940000000000000000000000008ac4ad1976120b8b15da77e52d74932bd3184b940000000000000000000000000000000000000000000000000000d8472087100000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17564,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000747c475abc7f6cd5bc273f989021d5a1e558e074000000000000000000000000747c475abc7f6cd5bc273f989021d5a1e558e0740000000000000000000000000000000000000000000000000000d5bb3385b00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17565,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001c24eab3ca4e1feb7f7b43b152e7b7531bab21c70000000000000000000000001c24eab3ca4e1feb7f7b43b152e7b7531bab21c70000000000000000000000000000000000000000000000000000d4d25ee0a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17566,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008c0753dcdc2437febe0825ecad86ff65b0ac08850000000000000000000000008c0753dcdc2437febe0825ecad86ff65b0ac08850000000000000000000000000000000000000000000000000000d4d25ee0a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17567,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000291587abf4830f230001520c36dda1db6623deb4000000000000000000000000291587abf4830f230001520c36dda1db6623deb40000000000000000000000000000000000000000000000000000d875b174e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17568,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ce40f28da9869bcaed42fa651cc6f58db0163c80000000000000000000000007ce40f28da9869bcaed42fa651cc6f58db0163c80000000000000000000000000000000000000000000000000000d95e8619f00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17569,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f65859f45f7f8e992adc3ba2481ec0e70333c756000000000000000000000000f65859f45f7f8e992adc3ba2481ec0e70333c7560000000000000000000000000000000000000000000000000000d875b174e00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17570,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c366cadd0773c6ff55b5916f19f382284ca30bcb000000000000000000000000c366cadd0773c6ff55b5916f19f382284ca30bcb0000000000000000000000000000000000000000000000000000d78cdccfd00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17571,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000caa0418a77461540be251b4ecf28cee88b5520a8000000000000000000000000caa0418a77461540be251b4ecf28cee88b5520a80000000000000000000000000000000000000000000000000000d72fbaf4300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17572,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000099301e83a0bf5429769a87850b1863ecb60f4f7e00000000000000000000000099301e83a0bf5429769a87850b1863ecb60f4f7e0000000000000000000000000000000000000000000000000000d718727d480000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17573,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f894e177535e411334889f0676671a24b14e6a5f0000000000000000000000000000000000000000000000007572edb17e893720,,,1,true -17574,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000007f43909414ff1b9e8fcc531e87212378e4a3f9e4000000000000000000000000000000000000000000000025f59b68038128a1fc,0xa7f9d1f0188dd2cfce78e9596367bfbc9957ce2eee9d20f4602af4086ce4d711,2021-12-10 08:40:46.000 UTC,0,true -17575,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ebd39421e3ad3fbe2b1bf0f58366147536a07fc3000000000000000000000000ebd39421e3ad3fbe2b1bf0f58366147536a07fc30000000000000000000000000000000000000000000000000000d901643e500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17576,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f80bbbc1cbdc2db0f913d1b371e9d4eacba688d9000000000000000000000000f80bbbc1cbdc2db0f913d1b371e9d4eacba688d90000000000000000000000000000000000000000000000000000d546c933280000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17577,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007ff548c4858a9e9be5710f3cdeeeccdb6dc02fad0000000000000000000000007ff548c4858a9e9be5710f3cdeeeccdb6dc02fad00000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17578,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d6129da37dad28b70ba29e542e3a0a074084c626000000000000000000000000000000000000000000000000210af52b11a048b2,,,1,true -17579,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000ce2a930b5dc8357f25bed4970602ba49761b28c0000000000000000000000000ce2a930b5dc8357f25bed4970602ba49761b28c00000000000000000000000000000000000000000000000001589efb0c7d8c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17580,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cdc285f782cbab70d667dc04e50e21bb7de96437000000000000000000000000cdc285f782cbab70d667dc04e50e21bb7de9643700000000000000000000000000000000000000000000000000426ee3c6a1620000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17581,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000063aa434f9695989de6318e4e6bda9c2acc2075a900000000000000000000000063aa434f9695989de6318e4e6bda9c2acc2075a900000000000000000000000000000000000000000000000000425fc99f81000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17582,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000995a2db38b88571b9f9409a34ef0aed87a6fde56000000000000000000000000995a2db38b88571b9f9409a34ef0aed87a6fde56000000000000000000000000000000000000000000000000004307de78e4ab0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17583,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000208847658adf83d0ca5bf0503d80d6cb2694a760000000000000000000000000208847658adf83d0ca5bf0503d80d6cb2694a760000000000000000000000000000000000000000000000000004307de78e4ab0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17584,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000039b08619351aa6fd183b20841d86896c7f310ffb00000000000000000000000039b08619351aa6fd183b20841d86896c7f310ffb00000000000000000000000000000000000000000000000000430512849c4d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17586,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae9155be72fd213dbf5ad46308c7eafc63a71b16000000000000000000000000ae9155be72fd213dbf5ad46308c7eafc63a71b1600000000000000000000000000000000000000000000000002c68af0bb14000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17587,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cfa9d627e4fe03dd1dd1de7dbb9fc352c555a6a1000000000000000000000000cfa9d627e4fe03dd1dd1de7dbb9fc352c555a6a10000000000000000000000000000000000000000000000000043512479197d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17588,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a0805d693ec6a4f0b12ad03482d41be896224a19000000000000000000000000a0805d693ec6a4f0b12ad03482d41be896224a19000000000000000000000000000000000000000000000000004281e843c0ae0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17589,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cddc9c5fa645bbb7d90e215c71e6902dea5c2e26000000000000000000000000cddc9c5fa645bbb7d90e215c71e6902dea5c2e260000000000000000000000000000000000000000000000000041e6b0ce104d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17590,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000adb5373a8bc60681ce12ca48c95d4ccf858bca8d000000000000000000000000adb5373a8bc60681ce12ca48c95d4ccf858bca8d0000000000000000000000000000000000000000000000000041d4cab2a78d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17591,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e63baca99ea0e6eb8b1da27b61a9e30c91d029a7000000000000000000000000e63baca99ea0e6eb8b1da27b61a9e30c91d029a7000000000000000000000000000000000000000000000000004297711cbab50000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17592,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000438ef5a483a2cd7bd4fb75475c361f2bc328f0af000000000000000000000000438ef5a483a2cd7bd4fb75475c361f2bc328f0af00000000000000000000000000000000000000000000000000426f72f77ca80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17593,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d954c95680b7070ddb196658acfdbf80491a55c9000000000000000000000000d954c95680b7070ddb196658acfdbf80491a55c90000000000000000000000000000000000000000000000000042f20e077d010000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17594,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da5d39dcbb8ff4652d1d8c05dc3e648487036cef000000000000000000000000da5d39dcbb8ff4652d1d8c05dc3e648487036cef0000000000000000000000000000000000000000000000000041a929cfd8390000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17595,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000038190a55151d3a55446c2d69dd35c006de3f76fa00000000000000000000000038190a55151d3a55446c2d69dd35c006de3f76fa00000000000000000000000000000000000000000000000000422005dddbd40000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17596,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000035979754a0e1d42fd5fbe396689555f87a76f38e00000000000000000000000035979754a0e1d42fd5fbe396689555f87a76f38e00000000000000000000000000000000000000000000000000430b399e084f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17597,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a38f35b89cced1b3b94e6f46e58097f95a9d01fa000000000000000000000000a38f35b89cced1b3b94e6f46e58097f95a9d01fa0000000000000000000000000000000000000000000000000042ab93fb908d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17598,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000047ce2fb44be7188ff1d7ccc25b2c10934a1804af00000000000000000000000047ce2fb44be7188ff1d7ccc25b2c10934a1804af0000000000000000000000000000000000000000000000000042ab93fb908d0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17599,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000c9b9ff0acb9d5a621a16363b05fd82d47daa94b0000000000000000000000000c9b9ff0acb9d5a621a16363b05fd82d47daa94b0000000000000000000000000000000000000000000000000042fa2a4be8780000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17600,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000dae7939b5cf4f49eb8a041177c3ba95a2196d7c200000000000000000000000000000000000000000000000568f35e2631342b3e,,,1,true -17601,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f60c9808a0205535c6a211f2732c730157f163fc00000000000000000000000000000000000000000000000533082720db044846,0x06e384e7f7fd7271ce6788a0bb320cdef2b92f8ff112ac7689bafa0d19be91a8,2021-12-12 17:03:36.000 UTC,0,true -17603,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d5ae8b3d65d676e11a132b84a3ecbd1c5d4db97f000000000000000000000000d5ae8b3d65d676e11a132b84a3ecbd1c5d4db97f0000000000000000000000000000000000000000000000011125ff51c76f588d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x230dcfe2af2ddc08040fa00b95c199c45352b4298bc7b7cbc78ab4cd1466f3f3,2021-11-21 09:06:49.000 UTC,0,true -17604,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cae6223e0c70633b4f4afdef76ae9fa72e2cb545000000000000000000000000cae6223e0c70633b4f4afdef76ae9fa72e2cb545000000000000000000000000000000000000000000000000001ec425200ee20000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17608,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000647a8646a70c9e1f038fdc9fa2a190d5ead3ffe6000000000000000000000000000000000000000000000008b270d02c69b64356,0x743936c0cb629ce06f16e16e0d99b30c60ed1fde858cbc569d3350a50f109bf5,2021-11-23 20:06:39.000 UTC,0,true -17609,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000082cea2d73bdd35fd7980ed975020fb5a565ea26e00000000000000000000000082cea2d73bdd35fd7980ed975020fb5a565ea26e000000000000000000000000000000000000000000000000004b1c6c6736f5c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17610,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001e52e505b4dd582a17fb7697026a6296fd33f7b00000000000000000000000001e52e505b4dd582a17fb7697026a6296fd33f7b0000000000000000000000000000000000000000000000000003de9158c1633b200000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9e2870c950e5e77e532719e7a488c35e76687747054a62b60eb2d41e21d60828,2022-04-23 11:03:39.000 UTC,0,true -17616,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008252f2300d09319fe4100bdfd8ad624adff3d05f0000000000000000000000008252f2300d09319fe4100bdfd8ad624adff3d05f00000000000000000000000000000000000000000000000006ddfccf25d88c4500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x35542b5be56e7eaecd328270942643d4c11d92afd19e09cf9dc62e6ff75b7b13,2021-12-15 01:08:27.000 UTC,0,true -17617,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009cec4f45144c8a594f634c586545af0ca51f47890000000000000000000000009cec4f45144c8a594f634c586545af0ca51f478900000000000000000000000000000000000000000000000000127bf889ee664000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17619,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006177c71d568960d87e958c38000350ed3276796b0000000000000000000000006177c71d568960d87e958c38000350ed3276796b00000000000000000000000000000000000000000000000000ec0d07dabbbd4f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17620,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006bba96d2fcf9e4730014b0f7f3f0f89f96a5d9240000000000000000000000006bba96d2fcf9e4730014b0f7f3f0f89f96a5d92400000000000000000000000000000000000000000000000007f8ec9de9a21b5800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17623,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000994317196b32c1d73a38e0fcfee08db0f624e325000000000000000000000000994317196b32c1d73a38e0fcfee08db0f624e3250000000000000000000000000000000000000000000000000000d6a4082ac00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17624,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000b73db6bd2539258d380daa13d9937fefc543b700000000000000000000000000b73db6bd2539258d380daa13d9937fefc543b7000000000000000000000000000000000000000000000000002a8dd53dfe7dc8c00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17625,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c16dfe34d78246ae49f4098630cfbc90c78df161000000000000000000000000c16dfe34d78246ae49f4098630cfbc90c78df16100000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17626,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f57c86041a7c5eedf5478d324292fcb08e427a26000000000000000000000000f57c86041a7c5eedf5478d324292fcb08e427a260000000000000000000000000000000000000000000000000000d5bb3385b00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17627,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008be625b3a8e6d6a4ad226a53790248fc3ca703a40000000000000000000000008be625b3a8e6d6a4ad226a53790248fc3ca703a400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17628,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006acb872f1eb512c9df43306e6e80f4ea5398a8660000000000000000000000006acb872f1eb512c9df43306e6e80f4ea5398a86600000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17629,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000901d13f8b0ddfcc460a095ca75f998e5640e4471000000000000000000000000901d13f8b0ddfcc460a095ca75f998e5640e44710000000000000000000000000000000000000000000000000000d6a4082ac00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17630,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000087d617dbb2d58119a5be94aedd7f858d27f5bba700000000000000000000000087d617dbb2d58119a5be94aedd7f858d27f5bba70000000000000000000000000000000000000000000000000e4e36646bcb664d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x9fd9883797c1fc70edc643f69b76a7b466db59d6a60c6db6912208fbef019fd2,2021-11-25 20:27:48.000 UTC,0,true -17631,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c84ed7674a9d57db75d4deb938c0396f97aa3cbd000000000000000000000000c84ed7674a9d57db75d4deb938c0396f97aa3cbd00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17632,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dfe70bbe4ddf055de55ca27ad1625c2d4cc11b48000000000000000000000000dfe70bbe4ddf055de55ca27ad1625c2d4cc11b4800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17633,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c5f2cd0780c0f6a45928870347a21993c1575d51000000000000000000000000c5f2cd0780c0f6a45928870347a21993c1575d5100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17634,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000833838849c09b66fe1951b526e15b2d530d69b5e000000000000000000000000833838849c09b66fe1951b526e15b2d530d69b5e0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17635,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000071b55d92acbe7afac302f639b090f9b99262418200000000000000000000000071b55d92acbe7afac302f639b090f9b9926241820000000000000000000000000000000000000000000000000000640b5eece00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17636,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000010fe0a48058551d3db4fd064e085a106d2d4d83200000000000000000000000010fe0a48058551d3db4fd064e085a106d2d4d83200000000000000000000000000000000000000000000000000006d23ad5f800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17637,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d1059b4bc5c4816c0db0c86c9995d3b6b1d274f1000000000000000000000000d1059b4bc5c4816c0db0c86c9995d3b6b1d274f10000000000000000000000000000000000000000000000000000640b5eece00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17638,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d3bae088a07a1d2cf608c332b40eafaa42a7863b000000000000000000000000d3bae088a07a1d2cf608c332b40eafaa42a7863b0000000000000000000000000000000000000000000000000000763bfbd2200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17639,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e9176aaa4a4b13a4405213a652616a41e405179f000000000000000000000000e9176aaa4a4b13a4405213a652616a41e405179f00000000000000000000000000000000000000000000000000005f7f37b3900000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17640,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e37232d5a120f8d7d32fc8281f4c95e6442ce4a0000000000000000000000000e37232d5a120f8d7d32fc8281f4c95e6442ce4a000000000000000000000000000000000000000000000000000005dad8e69700000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17641,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006589098a35aef96eaa06ecaed3a47410e7e4594f0000000000000000000000006589098a35aef96eaa06ecaed3a47410e7e4594f00000000000000000000000000000000000000000000000000005e96630e800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17642,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ef61e9ea2f9ebb5d102b00dca72391817539bb23000000000000000000000000ef61e9ea2f9ebb5d102b00dca72391817539bb2300000000000000000000000000000000000000000000000000005cc4b9c4600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17643,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ce903173d0096ac33f351b142606edbddfc03410000000000000000000000005ce903173d0096ac33f351b142606edbddfc03410000000000000000000000000000000000000000000000000000640b5eece00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17644,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000591564d8a2f1f09f0dc25ba3af8ffc1fa9aa6686000000000000000000000000591564d8a2f1f09f0dc25ba3af8ffc1fa9aa668600000000000000000000000000000000000000000000000000005cc4b9c4600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17645,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ee02ab46e6d8df72ebe5d81fdc8780f932465430000000000000000000000006ee02ab46e6d8df72ebe5d81fdc8780f9324654300000000000000000000000000000000000000000000000000005bdbe51f500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17646,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ebfef2cc9ba3465b69a05e67a1ea51e3037be94f000000000000000000000000ebfef2cc9ba3465b69a05e67a1ea51e3037be94f00000000000000000000000000000000000000000000000000005f7f37b3900000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17647,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000508a0453ab8e74ef700ef9b36e3ebd108ce19214000000000000000000000000508a0453ab8e74ef700ef9b36e3ebd108ce1921400000000000000000000000000000000000000000000000000005bdbe51f500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17648,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004eb23a048fca4b24bbbd646feb36abbb870d0a0a0000000000000000000000004eb23a048fca4b24bbbd646feb36abbb870d0a0a000000000000000000000000000000000000000000000000000060680c58a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x50eaafb1aa1334bbb7dc1edd29f9f927601944bef915cb7b9a5609fa4b4c5f31,2021-11-21 13:20:15.000 UTC,0,true -17649,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b039029da896c6e27dcd61350de3bacbca68049d000000000000000000000000b039029da896c6e27dcd61350de3bacbca68049d00000000000000000000000000000000000000000000000000005dad8e69700000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17650,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f49a5879c87e37cb3f5b79aea04d85ee7c46ee53000000000000000000000000f49a5879c87e37cb3f5b79aea04d85ee7c46ee530000000000000000000000000000000000000000000000000000d78cdccfd00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17651,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006802b763e09fc2a32132b41763d65573671a59c90000000000000000000000006802b763e09fc2a32132b41763d65573671a59c90000000000000000000000000000000000000000000000000000d5bb3385b00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17652,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006c7298aa9ae1d86a00fe1af854173899839956de0000000000000000000000006c7298aa9ae1d86a00fe1af854173899839956de0000000000000000000000000000000000000000000000000000d5e9c473800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17653,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000bf70ff80e909e9c1714f25acf87c0f2efc472a44000000000000000000000000bf70ff80e909e9c1714f25acf87c0f2efc472a440000000000000000000000000000000000000000000000000000d5e9c473800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17654,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ee00b658f24281a7c829ba8071bf8672cff148f0000000000000000000000006ee00b658f24281a7c829ba8071bf8672cff148f0000000000000000000000000000000000000000000000000000d6010cea680000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17655,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005287d3237af69a73c026128b71de866743d606cb0000000000000000000000005287d3237af69a73c026128b71de866743d606cb0000000000000000000000000000000000000000000000000000d5a3eb0ec80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17657,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002fd77c4db86278bcc62a3e62184ebaa901de85170000000000000000000000002fd77c4db86278bcc62a3e62184ebaa901de85170000000000000000000000000000000000000000000000000000d5bd8791940000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17658,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006d903a8e1e6bb1b41bb09cd683c415b49c003a090000000000000000000000006d903a8e1e6bb1b41bb09cd683c415b49c003a0900000000000000000000000000000000000000000000000000005bdbe51f500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17659,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000007a7ffb798f9c883bc1f1867183422d096e1929d50000000000000000000000007a7ffb798f9c883bc1f1867183422d096e1929d500000000000000000000000000000000000000000000000000005f7f37b3900000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17660,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b393d37d67c21e9a3e56baa82c297de0636c7f3e000000000000000000000000b393d37d67c21e9a3e56baa82c297de0636c7f3e00000000000000000000000000000000000000000000000000006d23ad5f800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17661,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000010343e645d7bad425466d47a0eb138f7c734d2aa00000000000000000000000010343e645d7bad425466d47a0eb138f7c734d2aa0000000000000000000000000000000000000000000000000000640b5eece00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17662,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b70dd5dfbfdb5fbeb635f5ded1732d0a04f4c03b000000000000000000000000b70dd5dfbfdb5fbeb635f5ded1732d0a04f4c03b00000000000000000000000000000000000000000000000000005bdbe51f500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17663,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006239bd9e155037c2df077146a02d563158d50bfa0000000000000000000000006239bd9e155037c2df077146a02d563158d50bfa00000000000000000000000000000000000000000000000000005cc4b9c4600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17664,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002d5f17408bf60b9ead22abc40cefb6302c816ec40000000000000000000000002d5f17408bf60b9ead22abc40cefb6302c816ec40000000000000000000000000000000000000000000000000000d4e9a757880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17665,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000af0586105adc69145f0b82e03a4ece3a26b76bd7000000000000000000000000af0586105adc69145f0b82e03a4ece3a26b76bd7000000000000000000000000000000000000000000000000000060680c58a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17666,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000d6b168747c39db417c54e187e415965ae0353a0c000000000000000000000000d6b168747c39db417c54e187e415965ae0353a0c00000000000000000000000000000000000000000000000000005bdbe51f500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17668,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005956ad429bc34e333616924642d192a876ca15ce0000000000000000000000005956ad429bc34e333616924642d192a876ca15ce0000000000000000000000000000000000000000000000000000d4d25ee0a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17669,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c16872483ce63168d61d5f192a6969ad1e3a9867000000000000000000000000c16872483ce63168d61d5f192a6969ad1e3a986700000000000000000000000000000000000000000000000000005e96630e800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17670,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e4c51ae64abb97b0d10329d04d873fd15992d00b000000000000000000000000e4c51ae64abb97b0d10329d04d873fd15992d00b00000000000000000000000000000000000000000000000000006239b5a2c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17671,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000593988afd7905c358aba6f59357e7f7c5b6a19b6000000000000000000000000593988afd7905c358aba6f59357e7f7c5b6a19b60000000000000000000000000000000000000000000000000000d646e64f200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17672,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000288478fec717c0bab68140afaf1e9cc8b2be3f74000000000000000000000000288478fec717c0bab68140afaf1e9cc8b2be3f7400000000000000000000000000000000000000000000000000006150e0fdb00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17673,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005fcf5a55f97bca62601f68c6f79e3515cb8b9f8f0000000000000000000000005fcf5a55f97bca62601f68c6f79e3515cb8b9f8f00000000000000000000000000000000000000000000000000005bdbe51f500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17674,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e920476bdd6c73a250ee0b8ed68ca8e24125bbda000000000000000000000000e920476bdd6c73a250ee0b8ed68ca8e24125bbda000000000000000000000000000000000000000000000000000063228a47d00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17675,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000011cdb59e1f91948a261d2e8926621acf54d53f1300000000000000000000000011cdb59e1f91948a261d2e8926621acf54d53f1300000000000000000000000000000000000000000000000000005bdbe51f500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17676,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b5bf8de51dc8adb18622edef0a1ce6f443eda841000000000000000000000000b5bf8de51dc8adb18622edef0a1ce6f443eda8410000000000000000000000000000000000000000000000000000640b5eece00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17677,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cf595ac2e61987f2b22146be5f6ef702078703dc000000000000000000000000cf595ac2e61987f2b22146be5f6ef702078703dc00000000000000000000000000000000000000000000000000005dad8e69700000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17678,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005417828ee95a0f5a2d32ad97e88701a936de307d0000000000000000000000005417828ee95a0f5a2d32ad97e88701a936de307d0000000000000000000000000000000000000000000000000000da475abf000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17679,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000055d0df9f252ec80062ffc326092b3f5892a5ae3300000000000000000000000055d0df9f252ec80062ffc326092b3f5892a5ae3300000000000000000000000000000000000000000000000000005cc4b9c4600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17680,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000096bb7ead27b65e3f4d449d0430169d69304631f000000000000000000000000096bb7ead27b65e3f4d449d0430169d69304631f00000000000000000000000000000000000000000000000000006150e0fdb00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17681,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000dc2919189be897058e49572a4c9a6d327cb9b9bf000000000000000000000000dc2919189be897058e49572a4c9a6d327cb9b9bf0000000000000000000000000000000000000000000000000000640b5eece00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17682,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000010607c953c0e84ea4deea9c9716d39e6f1a801ee00000000000000000000000010607c953c0e84ea4deea9c9716d39e6f1a801ee00000000000000000000000000000000000000000000000000006239b5a2c00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17683,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a83b5cd66634f717e6e1737e703e273ee9296813000000000000000000000000a83b5cd66634f717e6e1737e703e273ee92968130000000000000000000000000000000000000000000000000000d4e9a757880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17684,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000144457a28850f5802161308179bd22523a9f2e6b000000000000000000000000144457a28850f5802161308179bd22523a9f2e6b00000000000000000000000000000000000000000000000000005bdbe51f500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17685,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006ea35561e6b432f182b8b9ce7ea8361def921b940000000000000000000000006ea35561e6b432f182b8b9ce7ea8361def921b9400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17686,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000f4209c9460d8ce4c56ccb558d0c14d8d39dd63c6000000000000000000000000f4209c9460d8ce4c56ccb558d0c14d8d39dd63c600000000000000000000000000000000000000000000000000005bdbe51f500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17687,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001682eb55f4a712c9145fc4c1cca6d59e41493b510000000000000000000000001682eb55f4a712c9145fc4c1cca6d59e41493b51000000000000000000000000000000000000000000000000000060680c58a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17688,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000011a9a257bd5294e4bae1633210e1636ab145547100000000000000000000000011a9a257bd5294e4bae1633210e1636ab145547100000000000000000000000000000000000000000000000000005dad8e69700000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17689,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000689fcd7f101d31237c489b6e423716b72b6ef64a000000000000000000000000689fcd7f101d31237c489b6e423716b72b6ef64a00000000000000000000000000000000000000000000000000005cc4b9c4600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17690,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000084081666479f10be36c5f4c41fa6706e02f3fa0c00000000000000000000000084081666479f10be36c5f4c41fa6706e02f3fa0c00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17691,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000057a4cde8e7672372eb02f9f51a2fe2325f5a052300000000000000000000000057a4cde8e7672372eb02f9f51a2fe2325f5a05230000000000000000000000000000000000000000000000000000d5d27bfc980000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17692,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000e3bccd993bf5debafb948a6259f61a67715b4657000000000000000000000000e3bccd993bf5debafb948a6259f61a67715b465700000000000000000000000000000000000000000000000000005bdbe51f500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17693,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000747f475a83a68d32ba92c6337460f95cd5a74d60000000000000000000000000747f475a83a68d32ba92c6337460f95cd5a74d6000000000000000000000000000000000000000000000000000a3614784bc32c900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17694,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000000e910a91f98ca9b5848b16d5c294645a2c4ba64300000000000000000000000000000000000000000000000a650e6d0a8be6f50e,0x6afa7b3deeead4c9b2a8631daf687946a3824e91f8b20e3755109c7680c3fad9,2021-11-23 09:04:42.000 UTC,0,true -17695,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005776cc5782c4ca0a659f7385c14d0f52492ea5490000000000000000000000005776cc5782c4ca0a659f7385c14d0f52492ea54900000000000000000000000000000000000000000000000000005bdbe51f500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17696,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b3f1a4128d164cc1500587aabdc32d7131f3703d000000000000000000000000b3f1a4128d164cc1500587aabdc32d7131f3703d00000000000000000000000000000000000000000000000000005bdbe51f500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17697,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000c1361c64d69117b4058b71e344557e5e0d0cd276000000000000000000000000c1361c64d69117b4058b71e344557e5e0d0cd276000000000000000000000000000000000000000000000000000060680c58a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17698,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000979bdc6c454b2038fe33abe90b999124ee588258000000000000000000000000979bdc6c454b2038fe33abe90b999124ee58825800000000000000000000000000000000000000000000000000005cc4b9c4600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17699,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005bbe723821532eabb68e76dc12a7ca4332f609a20000000000000000000000005bbe723821532eabb68e76dc12a7ca4332f609a20000000000000000000000000000000000000000000000000000640b5eece00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17700,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000003bdde7e7eb133a322ef4a39ef663098bc4d9bb100000000000000000000000003bdde7e7eb133a322ef4a39ef663098bc4d9bb100000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17701,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000026233240d673eb9953fe38001464a1d273b786e800000000000000000000000026233240d673eb9953fe38001464a1d273b786e80000000000000000000000000000000000000000000000000000d5755a20f80000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17702,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000082558ce1f4e88934990f82aba844898644d3fdb800000000000000000000000082558ce1f4e88934990f82aba844898644d3fdb8000000000000000000000000000000000000000000000000015d7f228069020000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17703,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000051b7ee88658b7d0d2a41d6d73c920ec85f444aff00000000000000000000000051b7ee88658b7d0d2a41d6d73c920ec85f444aff0000000000000000000000000000000000000000000000000000d217e0f1700000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17704,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000004a6938047817a26df223fc4aac88fe14ce3488c00000000000000000000000004a6938047817a26df223fc4aac88fe14ce3488c0000000000000000000000000000000000000000000000000000d300b596800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17705,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000fac62c8aeac063bed226a7cfc278c126056d7c82000000000000000000000000fac62c8aeac063bed226a7cfc278c126056d7c8200000000000000000000000000000000000000000000000000005bdbe51f500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17706,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008d5a9bbdf1ee8e974000dec395c73d3ce8a205b20000000000000000000000008d5a9bbdf1ee8e974000dec395c73d3ce8a205b2000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17707,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000005ac368c62141a4acbd5a48302cae2a56052730530000000000000000000000005ac368c62141a4acbd5a48302cae2a56052730530000000000000000000000000000000000000000000000000000d3468efb380000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17708,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000ae1b882c3455be57d40067930b6a2d9233d9330c000000000000000000000000ae1b882c3455be57d40067930b6a2d9233d9330c00000000000000000000000000000000000000000000000004064976a8dd000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17709,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000caf207c77249f768cbf59af0b26b7a39ccc0ec9c000000000000000000000000caf207c77249f768cbf59af0b26b7a39ccc0ec9c0000000000000000000000000000000000000000000000000000d42f63a0480000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17710,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000006fb9878c67cade394e00c8a7e3195f05c4f3ba700000000000000000000000006fb9878c67cade394e00c8a7e3195f05c4f3ba700000000000000000000000000000000000000000000000000000d217e0f1700000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17711,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003c3248a43eef8f341e6a3549354ed05024f1e6ea0000000000000000000000003c3248a43eef8f341e6a3549354ed05024f1e6ea0000000000000000000000000000000000000000000000000000d15d9d3a300000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17712,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000ec39e27bed0d40c5bfdd8203665c0e85f18e11fb000000000000000000000000000000000000000000000000967f37f7dc333359,0x98cea5dcd4fa997186086fadedebacd4d0537bf07932fc5110e76f2a598de405,2022-02-15 11:24:39.000 UTC,0,true -17713,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e675000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000094b008aa00579c1307b0ef2c499ad98a8ce58e5800000000000000000000000017acd2acc73685ee4a4bc28682f64965cb865c3a00000000000000000000000017acd2acc73685ee4a4bc28682f64965cb865c3a00000000000000000000000000000000000000000000000000000000306a2ccd00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,0x279af99476cac91cf33770e39522b24727a324f03eb05bb6c659b6c653723ca8,2021-11-26 01:39:13.000 UTC,0,true -17715,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b3bc73d79d21a97ae50a35af976ce4b9eb87b6f7000000000000000000000000b3bc73d79d21a97ae50a35af976ce4b9eb87b6f700000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17716,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b8551df8f9e8029d8a951fc549c90718b4ea8248000000000000000000000000b8551df8f9e8029d8a951fc549c90718b4ea824800000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17722,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0381dc10bb93f63b236a9f8e3dc409fcd39d810000000000000000000000000b0381dc10bb93f63b236a9f8e3dc409fcd39d810000000000000000000000000000000000000000000000000003e8e98e5eca34300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17724,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0xa9f9e6750000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59900000000000000000000000068f180fcce6836688e9084f035309e29bf0a2095000000000000000000000000c1c0db07907fa2eca68e9f62fac22a4fff7b8782000000000000000000000000c1c0db07907fa2eca68e9f62fac22a4fff7b8782000000000000000000000000000000000000000000000000000000000012557700000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000,,,1,true -17728,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000080017970f4e68348b560c9acc4a0f8322decf5b900000000000000000000000080017970f4e68348b560c9acc4a0f8322decf5b900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17729,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000da917846074acdf397e213daa701f9556a4f5618000000000000000000000000da917846074acdf397e213daa701f9556a4f561800000000000000000000000000000000000000000000000000005bdbe51f500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17730,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000044e9d9473fd2cefae44e06e7b4b0c4a42024341300000000000000000000000044e9d9473fd2cefae44e06e7b4b0c4a42024341300000000000000000000000000000000000000000000000000005cc4b9c4600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17731,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000062addcc4091ea31b7d9b6f91e23a791aa1add17500000000000000000000000062addcc4091ea31b7d9b6f91e23a791aa1add17500000000000000000000000000000000000000000000000000005dad8e69700000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17732,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000032713864132d941be23f3f6fe41441a87a80d07600000000000000000000000032713864132d941be23f3f6fe41441a87a80d07600000000000000000000000000000000000000000000000000005e96630e800000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17733,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000ed7a5f34d0ed6a513bec66675bd789123ef4fa80000000000000000000000000ed7a5f34d0ed6a513bec66675bd789123ef4fa800000000000000000000000000000000000000000000000000005bdbe51f500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17734,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000001867aa355db059d649ab84cedd7f0403d11d6a37000000000000000000000000000000000000000000000030940660a8bc5a7589,,,1,true -17735,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000002e2de0ef24d9f2d067fb49dd180dd305889691e50000000000000000000000002e2de0ef24d9f2d067fb49dd180dd305889691e500000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17736,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000000d20fc3c32b213a39b0314ce804ba33aa5c6ed6f00000000000000000000000000000000000000000000000010ad87b3960ea127,,,1,true -17737,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000722154a260198d161abde4598b9bb9f711483ea1000000000000000000000000722154a260198d161abde4598b9bb9f711483ea100000000000000000000000000000000000000000000000000005cc4b9c4600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17738,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b51e532ca2399f1d0acbc83b78768fb33a9fa50d000000000000000000000000b51e532ca2399f1d0acbc83b78768fb33a9fa50d00000000000000000000000000000000000000000000000000006150e0fdb00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17739,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000015d3b70b2021603716340038d096526000caad9000000000000000000000000015d3b70b2021603716340038d096526000caad9000000000000000000000000000000000000000000000000000005cc4b9c4600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17740,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a1649324e76f33a91a9d09dcc8f1c2764bebaf6a000000000000000000000000a1649324e76f33a91a9d09dcc8f1c2764bebaf6a00000000000000000000000000000000000000000000000000005bdbe51f500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17741,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000001b526248ba302e9a1ab4a29261aec7cc7317a9440000000000000000000000001b526248ba302e9a1ab4a29261aec7cc7317a94400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17742,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000008f4db9b455e10895108e941232ed7281419b4dad0000000000000000000000008f4db9b455e10895108e941232ed7281419b4dad000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17743,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000820a2b3993308fd2590f7c3d0cb25a885a7be0f6000000000000000000000000820a2b3993308fd2590f7c3d0cb25a885a7be0f60000000000000000000000000000000000000000000000000000092f96e9880000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17744,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000cb060cfc1662d1ff1df9299c63baaf3e7fb5515f000000000000000000000000cb060cfc1662d1ff1df9299c63baaf3e7fb5515f00000000000000000000000000000000000000000000000000000946df60700000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17747,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a000d1947e1fa6fa9f3442bb5c2a365216bb0f22000000000000000000000000a000d1947e1fa6fa9f3442bb5c2a365216bb0f22000000000000000000000000000000000000000000000000001e9b97c9f58f0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x5fb9aefb66c1eb8117bfd0dd8db6091fc31ca359c68c4f38aec29c7c9288d846,2021-11-26 04:15:18.000 UTC,0,true -17748,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000007b3d4f79b24d19d992f36d019a0c0e9de22afa0200000000000000000000000000000000000000000000000678c82ea01d5f4436,,,1,true -17749,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000a98d2867de6b1dff44fe4b355dea098e81d06aeb000000000000000000000000a98d2867de6b1dff44fe4b355dea098e81d06aeb00000000000000000000000000000000000000000000000003961cfdebfe570000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17750,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000043548d5f1c42ea85f4cbd9d03030a3eb56e6f9a600000000000000000000000043548d5f1c42ea85f4cbd9d03030a3eb56e6f9a6000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17752,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000388d73beb86e297e420a5bdc6aeb43e787d02338000000000000000000000000388d73beb86e297e420a5bdc6aeb43e787d02338000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17753,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000370e104682930977667999c7af343ed04b77c923000000000000000000000000370e104682930977667999c7af343ed04b77c92300000000000000000000000000000000000000000000000001b778519606153800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x27128ff82784f78d3230891cc2d7a8e9ab00ec2c85b3cab4c24c09212f0acf01,2021-12-14 14:22:10.000 UTC,0,true -17756,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000007ff916da10365f3456174e8250021f27b66cf9300000000000000000000000000000000000000000000000006097753aa83830bf,,,1,true -17757,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000048c3ce879d2ba290aa9dc1dcab243edad3b143050000000000000000000000000000000000000000000000001967fe394e1292d3,,,1,true -17758,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000057fb6c359c8cf9caf0ec8beac0c8b944cb63d9b80000000000000000000000000000000000000000000002bfa18b4ac514af2400,0x4f7317c1422bb0976f14e8c5b572e8ea40add2c1a2a27a849c72a68fef518bb2,2021-11-22 01:43:33.000 UTC,0,true -17759,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f1d80f08df95f254cb7e6e075ad7265a5b85b92a000000000000000000000000000000000000000000000004a594fefcda61d57c,0xaa67680d66db50865ed3facc5a38b428c2fd190c0178a64c00fe245e9843890c,2022-03-30 20:37:07.000 UTC,0,true -17760,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000035c610124f469593469a025d712adc13f819fa5400000000000000000000000000000000000000000000000be8060f61577b3236,,,1,true -17763,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000051004a19e236fd098ba15888b8eb6a050a3fde4000000000000000000000000051004a19e236fd098ba15888b8eb6a050a3fde40000000000000000000000000000000000000000000000000020623adcc644c7d00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x35630d101d2fc72a46a2d2d3ae58fa4b028b413a708ff6617f8fb19e46fda121,2021-12-30 09:38:18.000 UTC,0,true -17766,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000003a3cfb013e07ca672329ec3e96da5eba2f780d7c0000000000000000000000003a3cfb013e07ca672329ec3e96da5eba2f780d7c0000000000000000000000000000000000000000000000000000d12f0c4c600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17767,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000000d87d1de05588fb27c71c9d267c15c4afa51d92b0000000000000000000000000d87d1de05588fb27c71c9d267c15c4afa51d92b0000000000000000000000000000000000000000000000000000d12f0c4c600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17768,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000009b73de47db0e52bc9951cef9dc3bedb1696f7c570000000000000000000000009b73de47db0e52bc9951cef9dc3bedb1696f7c570000000000000000000000000000000000000000000000000000d04637a7500000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17769,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000364d9fb3c4bb5e3b8c4f91e37fc1bb290013dfd8000000000000000000000000364d9fb3c4bb5e3b8c4f91e37fc1bb290013dfd800000000000000000000000000000000000000000000000001332da4e18a600000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17773,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000b8972e9db4c65a681312b85b12827d0426b655f4000000000000000000000000000000000000000000000000052afb1baf876dfb,,,1,true -17775,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000063ff748023fbdf4dcae4ea3d11668784f176bbfb00000000000000000000000000000000000000000000000f90739fd376670000,0x6353cc64508bfa0f60146e485a2f9850d957bb9e7d912da194cd2cd6673fb7f6,2021-12-03 06:20:17.000 UTC,0,true -17776,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000b462fb0098f104e88837a46e5f4fdfb5ebff7d96000000000000000000000000000000000000000000000014998f32ac78700000,0x56e4c807e24095a15f8744dc52ca8dfd7fb428da81a76c372cd6aa892483343a,2021-12-19 21:34:31.000 UTC,0,true -17780,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000007267168be3688b533b4e815fb8c38389b33e34b500000000000000000000000000000000000000000000000054ab228d2989a16a,,,1,true -17781,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec3400000000000000000000000031a41cd29d962f56be639f35a14a6c99faf1bcb800000000000000000000000031a41cd29d962f56be639f35a14a6c99faf1bcb800000000000000000000000000000000000000000000000000ac1ef607918c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17782,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000048c3ce879d2ba290aa9dc1dcab243edad3b14305000000000000000000000000000000000000000000000000ce175f96a5f14b9b,,,1,true -17783,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000043d16ccd581e1d6a8d51768f75ddf09b79f4f8560000000000000000000000000000000000000000000000001ff2f8f1b68c6529,,,1,true -17785,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000098a3da6293e56674d250fa9ada4c684dc34e4e0b00000000000000000000000000000000000000000000006eaad5974a3b2bac1c,0x4ce0094158a2bf9eded0bf7b92ff70f8dc73c8c036cdfb876327f61992e02c21,2021-12-02 07:51:12.000 UTC,0,true -17786,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000dc899fb367312f3a3a0532b8b31a0744de11968200000000000000000000000000000000000000000000000053d7c06e75ba2572,,,1,true -17787,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000001e69ef2d9be1ad7468d6a305ad01d347f12f6d400000000000000000000000000000000000000000000000002a0dd9d1b77d683e,,,1,true -17788,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000864121c7335bcd61b545b81e19757e2d7ad4263f0000000000000000000000000000000000000000000000000a219e89d25c2fac,,,1,true -17790,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f0692d3344987619906f9299c4e0f8f43312db160000000000000000000000000000000000000000000000457bd4d3bb19d2383f,0x604d89243b4e0a0becaa5f2e3a97e047c348356734895ab67205a8253fc6ebea,2022-04-01 00:03:33.000 UTC,0,true -17791,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000000056bcfe33f5c6dfa62b6d3d3cf5a957429828bb0000000000000000000000000000000000000000000000922d9e006f3c329c3c,,,1,true -17792,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000022510fe99f63ae03ba792c21a29ec10fd87cae0800000000000000000000000000000000000000000000003d8eb4f7fe10a1d963,0x7f66c55dcef9d6264a6c3f30d182d1605037897b3af10035bc52c3a35d41f20b,2021-11-21 08:15:33.000 UTC,0,true -17794,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000007c95d0cd038e06c4152a37325d48aed406006fe300000000000000000000000000000000000000000000001eca955e9b65e00000,0x537c10e6364176e4b6616eb8d63f2e9cec3d26e807e50bc0c0b2de5689848607,2021-12-06 13:38:54.000 UTC,0,true -17795,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000fc830cd343857a3befc4dc53828846ce97ca13a900000000000000000000000000000000000000000000001ae9841c04024c8182,0x18de24dcbea5428dc53fba4a843f0bec556b4935184198e2f2a3b5bd25416b55,2022-01-04 14:10:11.000 UTC,0,true -17796,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a0ac9d14049246430921aa9c23f12a20a1b88edf77c3dc89f68795c5cdf32fc8b000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000373ea25ad2ca66b780000000000000000000000000000000000000000000000000000000061840df0,,,1,true -17797,0x3d4cc8a61c7528fd86c55cfe061a78dcba48edd1,0x7191061d5d4c60f598214cc6913502184baddf18,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a1d198484f8ebf55f2ba49dcd64b24031069cddb5e09776f57be566394d69f817000000000000000000000000000000000000000000000000000000000000a4b10000000000000000000000000000000000000000000013a29300b6604b6951da0000000000000000000000000000000000000000000000000000000061841b96,,,1,true -17798,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000008705e42eb5cbf3581fc1716dffebb88f20dc6626000000000000000000000000000000000000000000000008751aac59e6aafcf1,0xf58ee4737252966e691115c589a87533daf6bd75207e4b56150b173d10fbbe09,2021-11-27 19:21:56.000 UTC,0,true -17799,0x3666f603cc164936c1b87e207f36beba4ac5f18a,0xa81d244a1814468c734e5b4101f7b9c0c577a8fc,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000ae002060bf60efcba93cc32236e45da2b1067d640c3a9f43eb2b0a982eadcd71e00000000000000000000000000000000000000000000000000000000000000890000000000000000000000000000000000000000000000000000003531e8b22d0000000000000000000000000000000000000000000000000000000061846454,,,1,true -17800,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000142a39c156f814aa0c5d54f4636c4e5fec708b8700000000000000000000000000000000000000000000002a54bf87c5ff470000,0x9d46d96587ea4323fc6417afa72c27efe145ce76b932620b181166aae5f082c1,2021-11-23 05:51:28.000 UTC,0,true -17801,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a8df3be8957a6b70db6353c4e1ddf58f05d089a02d80b7009e7088718913ffbd9000000000000000000000000000000000000000000000000000000000000a4b10000000000000000000000000000000000000000000000023145bc97697a33700000000000000000000000000000000000000000000000000000000061848206,,,1,true -17802,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000000efa5c7ba17a797a867820ffd51b890125bda3600000000000000000000000000000000000000000000002870d46785c9680000,0x61f0a5c9956e24989160fc7df5156de1e3c98f278ac15ea043fb05b2d592cc19,2022-02-13 20:28:36.000 UTC,0,true -17803,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000028a2106e8005336adddf006d790608e2a8853d740000000000000000000000000000000000000000000000410f9c5fdf48a2ba37,0x6237f01973017cf8aadf2fb45d98f42f1cdb7e6d3ccee2dd62029be725c6802c,2021-11-21 11:59:42.000 UTC,0,true -17804,0x3d4cc8a61c7528fd86c55cfe061a78dcba48edd1,0x7191061d5d4c60f598214cc6913502184baddf18,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000ac4264f89b9a32664405896f8b1b8347b308b8db97e69ba770e86368f4ea15fe8000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000211b73c4314ee2afff3e000000000000000000000000000000000000000000000000000000006184c052,,,1,true -17805,0x3e4a3a4796d16c0cd582c382691998f7c06420b6,0x46ae9bab8cea96610807a275ebd36f8e916b5c61,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000ad45d93738601e54d2bd02b758c72598ea20b84ed6da07f981dc26a4978a91c7a000000000000000000000000000000000000000000000000000000000000a4b100000000000000000000000000000000000000000000000000000018a2c377dd0000000000000000000000000000000000000000000000000000000061850694,,,1,true -17806,0x3e4a3a4796d16c0cd582c382691998f7c06420b6,0x46ae9bab8cea96610807a275ebd36f8e916b5c61,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a1a793500fe911e8d9320f1c9c3885fa913d0534c54d018d08c0c626a3e3bfb28000000000000000000000000000000000000000000000000000000000000a4b10000000000000000000000000000000000000000000000000000002e77151a100000000000000000000000000000000000000000000000000000000061851dfb,,,1,true -17807,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a4c26d3e35f39b7e73a2d05cf72b13546de5d2afb0ba62844d85b182d1c8065440000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000002bf58d12bbbd03ae10000000000000000000000000000000000000000000000000000000061853d13,,,1,true -17808,0x3666f603cc164936c1b87e207f36beba4ac5f18a,0xa81d244a1814468c734e5b4101f7b9c0c577a8fc,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000ad0b0c39d7fd65a0b0d4abdd57e19513597c5444061f5656b700a3adf56bcf951000000000000000000000000000000000000000000000000000000000000a4b100000000000000000000000000000000000000000000000000000011b7065f8d0000000000000000000000000000000000000000000000000000000061854b35,,,1,true -17809,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a84cc5c71c7112454b9d18daf1e2c5b6795e9fef5dc4df77a2dd9e29a0e503776000000000000000000000000000000000000000000000000000000000000a4b10000000000000000000000000000000000000000000000022e4f17db638f34020000000000000000000000000000000000000000000000000000000061856f10,,,1,true -17810,0x3e4a3a4796d16c0cd582c382691998f7c06420b6,0x46ae9bab8cea96610807a275ebd36f8e916b5c61,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000ae4a1d9ddfe3222aa7784a2018ef387dcb271cb5031fa285e212d8dc2e4232016000000000000000000000000000000000000000000000000000000000000a4b10000000000000000000000000000000000000000000000000000001721aba46500000000000000000000000000000000000000000000000000000000618577e1,,,1,true -17811,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000b35e598fc643037facde62dba4343e99f62949580000000000000000000000000000000000000000000000208b536eef913758d6,0x44ffc9898569234d8ee9f7062301e1da06d865cbe5782785be0f511198e48315,2021-11-23 18:52:46.000 UTC,0,true -17812,0x3666f603cc164936c1b87e207f36beba4ac5f18a,0xa81d244a1814468c734e5b4101f7b9c0c577a8fc,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a1d35ba3ccc771fc403862804eec055082a21374e2b73af3f38a88906648e5ab1000000000000000000000000000000000000000000000000000000000000008900000000000000000000000000000000000000000000000000000013d3ee1214000000000000000000000000000000000000000000000000000000006185a677,,,1,true -17813,0x3e4a3a4796d16c0cd582c382691998f7c06420b6,0x46ae9bab8cea96610807a275ebd36f8e916b5c61,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a563f1e3292bbbc3b115206e4dd509e06ca76af5e1b90cde69f5c85fd4aac3ead00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000004546a23e3f000000000000000000000000000000000000000000000000000000006185af5a,,,1,true -17814,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000af542914015967cff7bfbf3f44c18697e82487667b3e021c1601d72fff30ce5420000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000002ba1762468901801c000000000000000000000000000000000000000000000000000000006185c7d5,,,1,true -17815,0x3666f603cc164936c1b87e207f36beba4ac5f18a,0xa81d244a1814468c734e5b4101f7b9c0c577a8fc,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000ab01bbcff132c8c3cf591da6f138837df4fed064337d94a9bcc1fa974138a4b8e000000000000000000000000000000000000000000000000000000000000a4b10000000000000000000000000000000000000000000000000000002c4e59dde90000000000000000000000000000000000000000000000000000000061861e6a,,,1,true -17816,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d63154abc9c6655626f16f0aed41c2e9584107240000000000000000000000000000000000000000000000079ca3466dcc4e60ce,0x31c236a106a92cb9df085b4317bd485e09f0fe94893389869597bf667707c2d9,2021-11-23 07:53:08.000 UTC,0,true -17817,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d63154abc9c6655626f16f0aed41c2e95841072400000000000000000000000000000000000000000000000a4ad21867b32d494d,0x9c8b2798285122b1b3d4795bbc410209806f5caf5372e47f6c35b866e6b055c0,2021-11-23 07:58:16.000 UTC,0,true -17818,0x3d4cc8a61c7528fd86c55cfe061a78dcba48edd1,0x7191061d5d4c60f598214cc6913502184baddf18,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000ad58f678b4b4baa90c95bb49e72c75b1bfba2b27a26f76df8e0d9445e080ec4fb00000000000000000000000000000000000000000000000000000000000000890000000000000000000000000000000000000000000014bb4b00945ec5e500850000000000000000000000000000000000000000000000000000000061864541,,,1,true -17819,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f1d80f08df95f254cb7e6e075ad7265a5b85b92a000000000000000000000000000000000000000000000003ceb4ffbba54b5e64,0x5f8a75dcd0448f90ec776cfc61bb63a076f0559f0c075fa8ba77c15644712c36,2022-03-30 20:31:55.000 UTC,0,true -17820,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f1d80f08df95f254cb7e6e075ad7265a5b85b92a0000000000000000000000000000000000000000000000001878e9d03ee7add6,0x74da62aab0a5b96997c52e12e008dab59344d6a9159e85161ef7d0e2ea0345d6,2022-03-20 18:50:51.000 UTC,0,true -17821,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000afb2e085915aed02d3299de33edc28e5a1b62e0f0000000000000000000000000000000000000000000000234448c0b680431ab4,0xbf5ea6c90c4be16b61eb1193378eb01fc8b648d4b5d00a3851b32b631b39c8a5,2021-11-23 12:22:27.000 UTC,0,true -17822,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a9acffbe77f99d488b20e48d6ecfe9cfcd287a9cf55dcee377c3986d35bd8d63b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000002ff327d126540c2620000000000000000000000000000000000000000000000000000000061868a50,,,1,true -17823,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000aab2915687e6d20c40470c2a3720887fd0150129950c471525a4cf291ce73787e000000000000000000000000000000000000000000000000000000000000a4b100000000000000000000000000000000000000000000000077c1ef3185dcb479000000000000000000000000000000000000000000000000000000006186a2b7,,,1,true -17824,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a827f20e17d9a86460f19637daa2f01032e625ba1691c378f711866595c01e06f00000000000000000000000000000000000000000000000000000000000000890000000000000000000000000000000000000000000000026d199654bf01a78e000000000000000000000000000000000000000000000000000000006186b5ea,,,1,true -17825,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000007a0c7c84ec066b14f83d127bff2b7f46094b62260000000000000000000000000000000000000000000000001215d6c864e1cf35,,,1,true -17826,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000051bc9862ad17023fa88435f51fcaa6e677b2ca97000000000000000000000000000000000000000000000001566c010a90e7a32a,,,1,true -17827,0x3666f603cc164936c1b87e207f36beba4ac5f18a,0xa81d244a1814468c734e5b4101f7b9c0c577a8fc,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000afcf398abc919194b05082fcee0c697dda2072bb882e80eeaff6ca689b91d3442000000000000000000000000000000000000000000000000000000000000a4b100000000000000000000000000000000000000000000000000000018eaedf4c0000000000000000000000000000000000000000000000000000000006186d948,,,1,true -17828,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004200000000000000000000000000000000000011000000000000000000000000391716d440c151c42cdf1c95c1d83a5427bca52c000000000000000000000000000000000000000000000006aea892f4972ac98000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0xff844a28eb2b787a114128783b1fcb038f19305d8cd2d10c0b7240c7c24dc012,2021-11-23 18:38:24.000 UTC,0,true -17829,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a83f064178cc8ba6c1c9e58de3614c0fa0d0dee3792f1c649b32d781f4af35ab60000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000002ba70c91dd3dacfcd000000000000000000000000000000000000000000000000000000006186fb47,,,1,true -17830,0x3666f603cc164936c1b87e207f36beba4ac5f18a,0xa81d244a1814468c734e5b4101f7b9c0c577a8fc,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a3da1da846925d85e1c17eca3d8ecdbda21bbdcba4e03d2bdfbbbff858e2098fa000000000000000000000000000000000000000000000000000000000000a4b1000000000000000000000000000000000000000000000000000000179bc8f65c00000000000000000000000000000000000000000000000000000000618719d8,,,1,true -17831,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000002d83fa3eff5c3a397b2ba6ae62d1563dda1db3e500000000000000000000000000000000000000000000016eabbe7d3411ed8286,0xa8b8b8c6f8c083332c371848b03e8c45ce1a2efb4b503e88a5b08b539fdd5095,2021-11-25 01:59:54.000 UTC,0,true -17832,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000003a15459851b5346677bf9f7d3f8b2a8233eadaad0000000000000000000000000000000000000000000000894b0cf091a4e30000,0xaed8b92a88a536dbc4aa89be6738cd2f9453f39a3573750eb62e55d389fb4b31,2022-01-21 02:53:56.000 UTC,0,true -17833,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d519060280a35c8cc069f9656edf60ae9cfad2e500000000000000000000000000000000000000000000000df39ca58b84abc1f6,0xf47604aa713be97816d529b42dc897b9e5babe7f0419283c5b3fd4cb13fd6ab9,2021-12-07 04:40:48.000 UTC,0,true -17834,0x3d4cc8a61c7528fd86c55cfe061a78dcba48edd1,0x7191061d5d4c60f598214cc6913502184baddf18,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a9d57315ac7326d8cc06a91979683505e101cf005d98a4ce663ad6fc390034af50000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000001d1ba6f6bae94b549c320000000000000000000000000000000000000000000000000000000061877949,,,1,true -17835,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000006cd28541d19ff437df6edd4555443d9e92d911960000000000000000000000000000000000000000000000000708672312b02628,,,1,true -17836,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000ac0e238c1b55c0e1e6e4fc08ca2a697e8f29a4532a2a85d050ecba3265794d1b80000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000002b73a1947c9b4ab7f000000000000000000000000000000000000000000000000000000006187932e,,,1,true -17837,0x3666f603cc164936c1b87e207f36beba4ac5f18a,0xa81d244a1814468c734e5b4101f7b9c0c577a8fc,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a4f8569080387e7fcd050a74eb2682693b16a2236cfbffdd94eeb504151f10bbe00000000000000000000000000000000000000000000000000000000000000890000000000000000000000000000000000000000000000000000002e62ccbb5900000000000000000000000000000000000000000000000000000000618797ae,,,1,true -17838,0x3666f603cc164936c1b87e207f36beba4ac5f18a,0xa81d244a1814468c734e5b4101f7b9c0c577a8fc,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a012c5c5e44a7beadb8a2a42701707a61e507d324374bd12dfbef74862a659291000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000020ffc6a92a000000000000000000000000000000000000000000000000000000006187c933,,,1,true -17839,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000bf3e7b8049d880ed408589db5221419a4680afa6000000000000000000000000000000000000000000000000023afbb33ae9c72d,,,1,true -17840,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000081a93e9494925347241a8966278fceb4167d9b0c00000000000000000000000000000000000000000000000086df1e119ba4a8bd,,,1,true -17841,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000abecb0f669c30161318fc60d3d2fe9e857f305e38bd6d1ae486a1ab78452e28840000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000002bbba967a8cbd4cf5000000000000000000000000000000000000000000000000000000006188190f,,,1,true -17842,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000003f01940c87f09a351d422022d61bca0b682755c800000000000000000000000000000000000000000000001d049745e72ce36dce,0x1a20d6e6b8c2bc701e4b557bbb191da955cd63487d5cc82a8dfd02c7fadc45c8,2021-11-23 15:55:49.000 UTC,0,true -17843,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000005163d2109ac93b447828789b8df537bc9fa3bf1900000000000000000000000000000000000000000000000c48400cb7b99010a4,0x21a27e066f54f21127e9c5ec46df304a3dd87e205d9aec941b96394ef260aefa,2021-11-28 16:24:04.000 UTC,0,true -17844,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000004d4902bd7e080159964f46b10feeb6482d148e5a00000000000000000000000000000000000000000000066a58bb42696e41be42,0xac82fbc035aa320792efab3ddea869819bcf3bb45c4172a62a7128ad3600cae2,2021-11-26 14:47:28.000 UTC,0,true -17845,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000df91e8eb4208ab196bdcf2dcf4c669951528e6d10000000000000000000000000000000000000000000000007863ca89b2838000,,,1,true -17846,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000ea16545cf2e4c30b38b156cda0972be63ce71d500000000000000000000000000000000000000000000000059690f85313498eb2,,,1,true -17847,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a96914168f96bb7f9d19796c60b4a0bd2914a09ee31ee36be9e83dbfff75a8a920000000000000000000000000000000000000000000000000000000000000089000000000000000000000000000000000000000000000002314f6592167acab70000000000000000000000000000000000000000000000000000000061887932,,,1,true -17848,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000b0c7ad67ab0ce69a370973f6248713ab2e7878490000000000000000000000000000000000000000000000590f2f832549c71c36,,,1,true -17849,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f43f2416f41b0b58086ff06040115b9522dfbe8c0000000000000000000000000000000000000000000000456bdcdeaf07022ce2,0xe906d20e0fa3b5cb64b836e89e55e3835a4841c2626734eb7f11937e215ebc05,2021-12-30 03:46:04.000 UTC,0,true -17850,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000928efa31db4d805dc355945a5ab3c8c7a8db2fe200000000000000000000000000000000000000000000000d8192d01d51a05905,0x067d050acc8813f7b3c42a34456d1d74d2e6c126120e27b7a345fa5594d5dcdb,2021-11-29 18:34:56.000 UTC,0,true -17851,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a1bfb01220659328f9379ef2dab7356c98889c3f0db57920aa7ee491cd8d3ad60000000000000000000000000000000000000000000000000000000000000a4b100000000000000000000000000000000000000000000000242923cdb2cf6116c000000000000000000000000000000000000000000000000000000006188b515,,,1,true -17852,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a2330e9c4571636eb0ef16681c993d7b64b97b44be71b8ffb89543fe23b27e3070000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000002ecdfd973ea65a76a000000000000000000000000000000000000000000000000000000006188ebcb,,,1,true -17853,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000cb016db66774bd5dd798fc3ac9c3bfcc06d68c8400000000000000000000000000000000000000000000001dd0c885f9a0d80000,0x6ed08fd1e8ab3aeef3631e02c30f1e48a33278a4db584689f2608266d328e5d8,2021-11-24 10:30:22.000 UTC,0,true -17854,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000208b82b04449cd51803fae4b1561450ba13d951000000000000000000000000000000000000000000000002adc029a4462c50129,0x8fd14221691ba604ac3c39f6d861d26c1907de44350c4a6c1dfc6f3671e8d31f,2021-11-22 14:00:36.000 UTC,0,true -17855,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000461b4b406d7a366a965bfd455c013de70aa12a6b00000000000000000000000000000000000000000000003d9a6be04c94691f18,0x09e70d427f693e8c07516c18a314bd1d4f58d03403400fad4d8259087e936c7e,2021-11-22 14:05:51.000 UTC,0,true -17856,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000d5096b4d21abd25d0d3e0cf9e2ff7a840b20290600000000000000000000000000000000000000000000001d5aa492a3db56cb66,,,1,true -17857,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000001a9b6546a6c01c7cd4f7bcba968335382815a730000000000000000000000000000000000000000000000000471a0a73866cf2e4,,,1,true -17858,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000cc02538fdaee643a36a87adefa7286fef154a1c30000000000000000000000000000000000000000000000003012bc3cb7a62990,,,1,true -17859,0x3666f603cc164936c1b87e207f36beba4ac5f18a,0xa81d244a1814468c734e5b4101f7b9c0c577a8fc,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000af1f81936c6900d7c94c021d6aea7be8c85cf33b6afc81a8ef684549c372e7a8000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000001d82667b6f0000000000000000000000000000000000000000000000000000000061893532,,,1,true -17860,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a729bc3f5620b63c15b2fad19828b5f87f6c28f221068939043405b2b04c29626000000000000000000000000000000000000000000000000000000000000a4b10000000000000000000000000000000000000000000000029cd62f02cb6f96bb0000000000000000000000000000000000000000000000000000000061893b54,,,1,true -17861,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000a423fe4cfb811e9cf6a61a02e80e372c0970d4b000000000000000000000000000000000000000000000005a4b9fb8fd64e3db19,,,1,true -17862,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000ae829c81a24c014d17d529ab69309481d3c57784a146d31994552022330ff34b7000000000000000000000000000000000000000000000000000000000000a4b1000000000000000000000000000000000000000000000000d46e7aced2e3e5f800000000000000000000000000000000000000000000000000000000618976e2,0xf474168ff02289064f265af1a1cb0b8804b644f50adaf9d860c6ab241fad77fc,2022-01-08 16:52:48.000 UTC,0,true -17863,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a3af969e3fe25f4b37a38371091bfc69cf139299bf795714ee636c8ce4fa6f5b40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000002c2ec03fa86dc613300000000000000000000000000000000000000000000000000000000618995e2,,,1,true -17864,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000007f5a1afefe061395bdad9256251d16b70ea27733000000000000000000000000000000000000000000000004953262f17bed1f25,,,1,true -17865,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a07cb3b4d0246d68af81e5ba78d3714726679116137b4c426be9695730daff61a000000000000000000000000000000000000000000000000000000000000a4b100000000000000000000000000000000000000000000000116e4d62043338d71000000000000000000000000000000000000000000000000000000006189a89e,,,1,true -17866,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a4a9bfe4f60a922fce15d8883e655eaa618635eeae982eaa452cf4476ec7fae030000000000000000000000000000000000000000000000000000000000000089000000000000000000000000000000000000000000000000ca4355eb5a024687000000000000000000000000000000000000000000000000000000006189af88,,,1,true -17867,0x3666f603cc164936c1b87e207f36beba4ac5f18a,0xa81d244a1814468c734e5b4101f7b9c0c577a8fc,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000ae6d07c9338010f34bbf389ab4e62d1ba22f3fa829ecafad905ab9625510058bb0000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000072f8d6cb5000000000000000000000000000000000000000000000000000000006189bbde,,,1,true -17868,0x3666f603cc164936c1b87e207f36beba4ac5f18a,0xa81d244a1814468c734e5b4101f7b9c0c577a8fc,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000ac37401063bfbfe6eae98b8c81a4eb032e1e1d23494a4992d0da23dfe9611c9a300000000000000000000000000000000000000000000000000000000000000890000000000000000000000000000000000000000000000000000001203b771d100000000000000000000000000000000000000000000000000000000618a053e,,,1,true -17869,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a088b33a098c33e7ee5f34505b75193bd404876d736c0c30914f2d408054ced23000000000000000000000000000000000000000000000000000000000000a4b10000000000000000000000000000000000000000000000022d239e62fda3978f00000000000000000000000000000000000000000000000000000000618a1c0f,,,1,true -17870,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000074d47619ce2245b65b0309e637e1144f2ae1053400000000000000000000000000000000000000000000000110bd8a4336cfe0c4,,,1,true -17871,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000005db06883736a244cb14dbd51eeb3c6ac3d207b8d00000000000000000000000000000000000000000000000779e3395d14db9dfe,,,1,true -17872,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000fbb33eddaa987f05ade310fac4d1289e17dbdc240000000000000000000000000000000000000000000000031ed5b59bb21dfd6a,,,1,true -17873,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a70d65979ad41c41b2ccf277895e9d9aa52c3fb93de804547b31a2828fe4b4b09000000000000000000000000000000000000000000000000000000000000a4b10000000000000000000000000000000000000000000000009b4ca9af41ac873100000000000000000000000000000000000000000000000000000000618a6812,0x55c7e56bc6a991108b79b5abae884a976ed2268f34b75c75b1362facecc60424,2022-05-27 11:05:23.000 UTC,0,true -17874,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a00000000000000000000000031d9ff6340798f1479e511d35071b76f62f1cc43000000000000000000000000000000000000000000000001de313f0708365881,0xaad5d6c383337a4200768be95822992e85a9b1c5da27c0b637dc1ef9fd0d12f6,2022-03-12 12:01:26.000 UTC,0,true -17875,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a2ae7edb530bf5fcdbc806e7ea59fe997e25239363001c50dd08eca3bb910d6970000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000002bff64007c87572e700000000000000000000000000000000000000000000000000000000618a74cf,,,1,true -17876,0x3e4a3a4796d16c0cd582c382691998f7c06420b6,0x46ae9bab8cea96610807a275ebd36f8e916b5c61,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a8456eb2a500dba23484f977e70f53e9034943847a0e01288099df9a3a93af731000000000000000000000000000000000000000000000000000000000000008900000000000000000000000000000000000000000000000000000011801319f700000000000000000000000000000000000000000000000000000000618a7cb4,,,1,true -17877,0x3d4cc8a61c7528fd86c55cfe061a78dcba48edd1,0x7191061d5d4c60f598214cc6913502184baddf18,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a32b03dadfe5a73405fd38ac3842d33aa306a502471184d9a378c86747e5c2dfb000000000000000000000000000000000000000000000000000000000000a4b1000000000000000000000000000000000000000000001c080f6e2781566911f400000000000000000000000000000000000000000000000000000000618aa431,,,1,true -17878,0x3666f603cc164936c1b87e207f36beba4ac5f18a,0xa81d244a1814468c734e5b4101f7b9c0c577a8fc,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a70550ec1e2f1a4301d38047ed3ddd9700948fb3d5b92eb9c63032f2cb5626a6b000000000000000000000000000000000000000000000000000000000000a4b1000000000000000000000000000000000000000000000000000000246069028100000000000000000000000000000000000000000000000000000000618aa6eb,,,1,true -17879,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000ab072bf7f4f839e71c11379960133b99d92cbd13c3da29ba6a81878a588437e9300000000000000000000000000000000000000000000000000000000000000890000000000000000000000000000000000000000000000013b3ca5ac63a4dbd400000000000000000000000000000000000000000000000000000000618aa8a0,,,1,true -17880,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000af64d0094f9fcc615afec9007fcd9b978e9cfcb69824a8134eac162d541104c84000000000000000000000000000000000000000000000000000000000000a4b100000000000000000000000000000000000000000000000152e6a8e98c66933400000000000000000000000000000000000000000000000000000000618ac403,,,1,true -17881,0x3d4cc8a61c7528fd86c55cfe061a78dcba48edd1,0x7191061d5d4c60f598214cc6913502184baddf18,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a6df854bfb1030b22cc89fe36f7c4950124e463118eedd1af43d45c43fbe376b10000000000000000000000000000000000000000000000000000000000000089000000000000000000000000000000000000000000001103c727e6cebe07aed900000000000000000000000000000000000000000000000000000000618ac516,,,1,true -17882,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000ad6d8e36135e6669027f8547a8d3d9023cfab0f31c9720fb6a893bf9799d7df05000000000000000000000000000000000000000000000000000000000000a4b10000000000000000000000000000000000000000000000028dbeefcfda93a30e00000000000000000000000000000000000000000000000000000000618ae727,,,1,true -17883,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a77e2d7331c148cce2cc1e60e5a999f3a11ac7ec970e334a81c37d338bb209b2f000000000000000000000000000000000000000000000000000000000000a4b1000000000000000000000000000000000000000000000002c150b7c16f56dda000000000000000000000000000000000000000000000000000000000618af6bd,,,1,true -17884,0x3666f603cc164936c1b87e207f36beba4ac5f18a,0xa81d244a1814468c734e5b4101f7b9c0c577a8fc,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a65bbcaa6e0e2ff8104bb76a6ec13a57c4d6065c68816e4a1b908068a94c3f23800000000000000000000000000000000000000000000000000000000000000890000000000000000000000000000000000000000000000000000001f4f77800700000000000000000000000000000000000000000000000000000000618b3629,,,1,true -17885,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000e10b628bdd00896912677470b771a381640fc17600000000000000000000000000000000000000000000005b95d07c6bc11b5ba1,0x7799204f4ffc53616e165bb08b7b0ee391b58a23c1cbab9db4010f9d5b83470a,2021-11-27 21:29:55.000 UTC,0,true -17886,0x3e4a3a4796d16c0cd582c382691998f7c06420b6,0x46ae9bab8cea96610807a275ebd36f8e916b5c61,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a4272c01a9343c39baa571248efe2ec835aed1bd871ca4f6f37892f338e29593400000000000000000000000000000000000000000000000000000000000000890000000000000000000000000000000000000000000000000000001287a756c800000000000000000000000000000000000000000000000000000000618b44f0,,,1,true -17887,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000aa67b01a7f1114c17ca6ac7c6079a8a8c934319f936e3ad108e146f9685147041000000000000000000000000000000000000000000000000000000000000a4b10000000000000000000000000000000000000000000000023e8e97e9f3d6b7ed00000000000000000000000000000000000000000000000000000000618b4e49,,,1,true -17888,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a3c3d2d5646dcdd6c890f32991bdf75adadee42b6d9c3d8ad241c75e81c9868cc000000000000000000000000000000000000000000000000000000000000008900000000000000000000000000000000000000000000000133627e06e26f218700000000000000000000000000000000000000000000000000000000618b5660,,,1,true -17889,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f3b06391631c69609d7ab0cd435b38e44312623800000000000000000000000000000000000000000000007a9a6bd65ee6b30000,0x1956e52cf6356dba403907d3d90a3f1b0aab93818d4046254464960e7b7ddf01,2021-12-08 02:20:56.000 UTC,0,true -17890,0x3666f603cc164936c1b87e207f36beba4ac5f18a,0xa81d244a1814468c734e5b4101f7b9c0c577a8fc,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a681393cb757efd511d4ff69219b35b546585feb8e986d8f176e2b27979bb0501000000000000000000000000000000000000000000000000000000000000a4b100000000000000000000000000000000000000000000000000000018509e23fd00000000000000000000000000000000000000000000000000000000618b67ad,,,1,true -17891,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000009d414882fc618720fa8b850184f846422f422bd10000000000000000000000000000000000000000000000e3d5fafa9d203d4606,0x2c58fba734337a898ebd57218592440b8c6632d788c73114bbdc856663f30db4,2021-12-01 09:25:11.000 UTC,0,true -17892,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000009f917290249608f66cbf666596bf71d9d1632d9a000000000000000000000000000000000000000000000000a5254af37b260000,,,1,true -17893,0x3666f603cc164936c1b87e207f36beba4ac5f18a,0xa81d244a1814468c734e5b4101f7b9c0c577a8fc,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a9dfbd28d936bb70b05a8f81fc676ccafe9f6acb702b8506f4fd9705c000f9fc8000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000023bbee2a9000000000000000000000000000000000000000000000000000000000618bb22f,,,1,true -17894,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000553de6c52ca165f63196b5dd80817f8636d029ac0000000000000000000000000000000000000000000003ac2dedffbcfce3c325,0x6594d1d7dc28a2d581a431a2b0967dec29052f3347e31158fe2830496ef3dfc8,2022-02-08 11:52:23.000 UTC,0,true -17895,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000ac512792df647c70f0f1ba2c015002b7e09ee9099a562cdfd1e5ecc8c634b310e000000000000000000000000000000000000000000000000000000000000a4b1000000000000000000000000000000000000000000000001f21b453db51832e900000000000000000000000000000000000000000000000000000000618bb696,,,1,true -17896,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000afb9240d6494a59093b3fb57f78cc1df1ee1295b1bdf951f119c40d651955e13f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000002b8927e83bfb7aae700000000000000000000000000000000000000000000000000000000618bb73f,,,1,true -17897,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec34000000000000000000000000b0df4a06d6aa6b81dee3ee489b4d9693a2040d82000000000000000000000000b0df4a06d6aa6b81dee3ee489b4d9693a2040d8200000000000000000000000000000000000000000000000000191b6628a0b00000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,,,1,true -17898,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000ccec342967170b4f3cda502e6c12c059fb86f6f00000000000000000000000000000000000000000000000246ddf979766800000,0xb52b3e0444717488cc64a307ab98ba0b49529ebcac6ae194c6c1372afb12f60c,2021-12-03 23:28:46.000 UTC,0,true -17899,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f1d80f08df95f254cb7e6e075ad7265a5b85b92a00000000000000000000000000000000000000000000000133dd238c6c975e4a,0x9ae664ee25b2429a62ecedb67e1dd535d5bab8d2315bbc0bc687e8a88c03097b,2021-12-21 09:19:20.000 UTC,0,true -17900,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000657becb53fbc3be121224d929040db06de383533000000000000000000000000000000000000000000000057f0dc60716d13c31b,0x40868226c27a5a50ad0c67ee29e28c7e06f962f59e1533e22e299e8f4b078622,2021-11-22 15:34:07.000 UTC,0,true -17901,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000903a6df07b4f4d6f6f6846c8b3b3f9dab5a2bdb5000000000000000000000000000000000000000000000012c48d433c07fd6911,0x84f96f171fb08022ed37e2350fe5b1faee7becfdbfae3678f8a582c517b9de5a,2021-12-14 14:43:26.000 UTC,0,true -17902,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000002fb1bc1c4d93df699ff96fd8ca7f999333f7480900000000000000000000000000000000000000000000000135096791ea012ae8,,,1,true -17903,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000000b43549a2e758d96eebe15af586a972135225ab3000000000000000000000000000000000000000000000002aaa5fc6155770000,0x19ab3ee2dda745bd8880aa150fcd95d49b83de5058b5d38a0c1b1d228ff2fc95,2021-12-19 10:55:55.000 UTC,0,true -17904,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a4845904728a0676c0edd849c961f17c7775b91855d0a8e97fe9365da8bf06e1300000000000000000000000000000000000000000000000000000000000000890000000000000000000000000000000000000000000000007baff13e1b06fe3c00000000000000000000000000000000000000000000000000000000618c245b,,,1,true -17905,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000af1f87619ce2021939ff8ca2327b1812541bfbf8416e3510514990253dbcb2fb2000000000000000000000000000000000000000000000000000000000000a4b10000000000000000000000000000000000000000000000022f48f1058e23fa9700000000000000000000000000000000000000000000000000000000618c290b,,,1,true -17906,0x99c9fc46f92e8a1c0dec1b1747d010903e884be1,0x4200000000000000000000000000000000000010,0x1532ec340000000000000000000000004200000000000000000000000000000000000011000000000000000000000000391716d440c151c42cdf1c95c1d83a5427bca52c000000000000000000000000000000000000000000000007ba3c86846e187b4000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000,0x82f86b195a1c14575016b79702ba3f3cadc555b8b8ce7c6251f4455999866237,2021-11-23 18:41:00.000 UTC,0,true -17907,0x3e4a3a4796d16c0cd582c382691998f7c06420b6,0x46ae9bab8cea96610807a275ebd36f8e916b5c61,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a0f8e6b2e001bfaf605388008a58cc04d58d0fedbdf0751d8568a41c1458c4954000000000000000000000000000000000000000000000000000000000000008900000000000000000000000000000000000000000000000000000012931c4e3b00000000000000000000000000000000000000000000000000000000618c5b01,,,1,true -17908,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000c5225364e93709c3a53f5938b92517c3fbe17d840000000000000000000000000000000000000000000000468d281b0f47ffdb59,,,1,true -17909,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000af5393cdd34e47ae881a76266297b5ab293baf7df7fe34d39606a5f09afe3c26a0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000002ca4dfd6b78c2ecde00000000000000000000000000000000000000000000000000000000618c6570,,,1,true -17910,0x3d4cc8a61c7528fd86c55cfe061a78dcba48edd1,0x7191061d5d4c60f598214cc6913502184baddf18,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a2abd27ac4ab063916a1df5f91d76841c84918f8a70eecdd1408713b973a52375000000000000000000000000000000000000000000000000000000000000008900000000000000000000000000000000000000000000103cb804346a8d12a6bd00000000000000000000000000000000000000000000000000000000618ca44e,,,1,true -17911,0x3e4a3a4796d16c0cd582c382691998f7c06420b6,0x46ae9bab8cea96610807a275ebd36f8e916b5c61,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000ae10628a506a1af3c886c28c801d90258e09c90f7b9530c7ccebbd879aef0cd950000000000000000000000000000000000000000000000000000000000000089000000000000000000000000000000000000000000000000000000123b434ffc00000000000000000000000000000000000000000000000000000000618ca52c,,,1,true -17912,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000009f3a593a2984d5d9a7008df32d7e2d7da4db0ff4000000000000000000000000000000000000000000000003cfe4350f9a6ce293,,,1,true -17913,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f6792da267b264a24da725c584337c84103fe2b10000000000000000000000000000000000000000000000010ec721391f0640e6,,,1,true -17914,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000f6792da267b264a24da725c584337c84103fe2b100000000000000000000000000000000000000000000000165019814569d8a95,,,1,true -17915,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000004dde2cb805fff76e2deb661725c1e41e0adf7f6500000000000000000000000000000000000000000000015c1b85291880d34174,0x85a9432bc4e5b541b32d8a33c1dec7c12162eec2cc9d496838f2a62de89b694f,2021-11-23 07:05:21.000 UTC,0,true -17916,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000008ce47ca78fc1d3066a19ae004cd1760fcbb5644e0000000000000000000000000000000000000000000000137683fc1fff4d5a16,,,1,true -17917,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a962a1c8b2847ac00838330cac53d97b4247686c67c6b8db9083149686972056d000000000000000000000000000000000000000000000000000000000000a4b1000000000000000000000000000000000000000000000001df43df4a1d36ae6200000000000000000000000000000000000000000000000000000000618ce314,,,1,true -17918,0x3666f603cc164936c1b87e207f36beba4ac5f18a,0xa81d244a1814468c734e5b4101f7b9c0c577a8fc,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a97dc8ddd4cdd54c0d4de3b44ee2bb4a1172c926f85cdfd39144b45afb19f1008000000000000000000000000000000000000000000000000000000000000008900000000000000000000000000000000000000000000000000000012a964e5db00000000000000000000000000000000000000000000000000000000618ce58e,,,1,true -17919,0x3666f603cc164936c1b87e207f36beba4ac5f18a,0xa81d244a1814468c734e5b4101f7b9c0c577a8fc,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a7ecddf0913debebd1369304bb913ee9b8d092b30442b2507b5bc8167c4023cdf00000000000000000000000000000000000000000000000000000000000000890000000000000000000000000000000000000000000000000000001bd99958df00000000000000000000000000000000000000000000000000000000618cf492,,,1,true -17920,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a000000000000000000000000a969475b7fffdb97f29df047118dfdcaa11220090000000000000000000000000000000000000000000001b1ae4d6e2ef5000000,0x06671082257b083c7b35ae813c8b31aebd675f079c72f6eb55478ba547fcb825,2021-11-22 13:44:28.000 UTC,0,true -17921,0x3e4a3a4796d16c0cd582c382691998f7c06420b6,0x46ae9bab8cea96610807a275ebd36f8e916b5c61,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000a04772dcc5a12e6df2f000f2aaac0d205189975db617be22102b4329322e184450000000000000000000000000000000000000000000000000000000000000089000000000000000000000000000000000000000000000000000000128066fb4700000000000000000000000000000000000000000000000000000000618d153d,,,1,true -17922,0xb8901acb165ed027e32754e0ffe830802919727f,0x83f6244bd87662118d96d9a6d44f09dfff14b30e,0xef6ebe5e000000000000000000000000000000000000000000000000000000000000000ae321c402a022865093f366bd41c1ddeb5efd4d374327da4e57f58c8f198efa960000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000002b8a99afb7236564900000000000000000000000000000000000000000000000000000000618d1bf5,,,1,true -17923,0xcd9d4988c0ae61887b075ba77f08cbfad2b65068,0x3f87ff1de58128ef8fcb4c807efd776e1ac72e51,0xf4f7b41a0000000000000000000000006643fbb25018ffc27f2df9335eb5aa94dc3db35400000000000000000000000000000000000000000000000617726fa362a50000,,,1,true diff --git a/indexer/processors/bridge/ovm1/skipped_hashes.go b/indexer/processors/bridge/ovm1/skipped_hashes.go deleted file mode 100644 index 35fffc5dd27a..000000000000 --- a/indexer/processors/bridge/ovm1/skipped_hashes.go +++ /dev/null @@ -1,21816 +0,0 @@ -package ovm1 - -import ( - "github.com/ethereum/go-ethereum/common" -) - -var PortalWithdrawalTransactions = map[common.Hash]bool{ - common.HexToHash("0xba6348e51701c2637723ea761561794442861e78c471282b3a982a59cadccfc5"): true, - common.HexToHash("0xc3f516a82467644d93722e108397c09f4ed78a66e87c0a82072df712543bae31"): true, - common.HexToHash("0x554cadef5a6220504524adbb4063d53a8d25817de6e0358130c496083268d758"): true, - common.HexToHash("0x36824f8662cc0dcd4cc561e0b78df4fdddaa0efc843060335af1b1b0a0d6198f"): true, - common.HexToHash("0x452330502d122dd783957a48070718a229c0bd886aaf147832546307c02f9560"): true, - common.HexToHash("0x865463c2132f70bcf31dd7c1603a5af98fe8843ee3f3f4c8258ddd7b566b0e43"): true, - common.HexToHash("0x736d788a73e92faa9cf9afc25aaf4572813e3aeaf9a552f371ecc9ebb1453d76"): true, - common.HexToHash("0xb545a6d66f2df216706a94948453fc434b0398a26698a479e8628b6e1c5a30ca"): true, - common.HexToHash("0xe3b088b19936636dd5f447148447aa206f204ddd5a6358e8dcb41eafc2cb86be"): true, - common.HexToHash("0xbe3f7e812eba97d74ed55eac2716535c2937eb090ee2d4877aa056049ff52c9f"): true, - common.HexToHash("0x85f648ed3452f6effe11a84c5cbfe5ea7c92c05774677746f6a06ff1a982266d"): true, - common.HexToHash("0x8a65bcf92027d5a658d8285fe5e912e2e2305f5b89c8d95735a1be722675d084"): true, - common.HexToHash("0x130b1fff5d8fb0688a4aef40c102e6718115af4bfe6ab1438d1cfd44c3e53903"): true, - common.HexToHash("0x05c6edc87da53dad0cdcdb620f6cb9778e775cef8f94c9b8ca33b736b2e0c366"): true, - common.HexToHash("0x50551172151a8001d1a358044d734176e432cd60a95735939e3287ffc5d031cf"): true, - common.HexToHash("0xbf0230e7d6fa0a2f097b331b0e21bc3b9377f724693911839e2a42f80255cd1b"): true, - common.HexToHash("0x2bf242473d6e0475736115a29e3a6891e97c1c204097d55548ad3cfa4cbc5ff9"): true, - common.HexToHash("0x2128aa0be113ac23b56596c707f2ef66e839e2aba18f4d568f1cf83234a03a49"): true, - common.HexToHash("0x16192e56741d45f8447f0991d488f8a35d5aaa0884e7b94e586fff960ef394c5"): true, - common.HexToHash("0x3c05005265f00262e89ff76a2eb7554c37e23a66ec54df83e74f21137c8f6119"): true, - common.HexToHash("0x976a00f6473a3950ef91fd58b139fb20d4cd638a4de8116986ab15eb8f30b008"): true, - common.HexToHash("0x187b30621c2c33f6399c3922b6e18377207b6dad861f30ccc7addf9c28b2f5b6"): true, - common.HexToHash("0x7dee1040883e4e8d923aa0b23e3fd990f6dc2eb48bb7092dbf6c7fc284ac8fa5"): true, - common.HexToHash("0x283fd2ad543dd42b96057f87164a85e099e2c1b7bba464fdbcb816e31fb8607b"): true, - common.HexToHash("0xf89297104ef3528415cdc3854757639e71cc2aec428d6c9a2ea47cafed2f411c"): true, - common.HexToHash("0x25e6c02603449519df98b8c38456dd1ef58ab34adfbf86325b4d8adf6194b574"): true, - common.HexToHash("0x2756f5d616ec1b075fde8edd3193b30eb241bed644e61e94f1a968faf6b435da"): true, - common.HexToHash("0x14d3e01f06802805aeeb578466fc4f82d433cd68b15bd1e13c05e09930fe47f7"): true, - common.HexToHash("0xeb973323eb1c8fcadfd48cccd7adf83bf64c42fade938e6c02f47ff2db295219"): true, - common.HexToHash("0x38b331dfc302a7957a02b22e49158284b2448670d496e33a28f159d368545f90"): true, - common.HexToHash("0x2b616fc62deb8076da6457ff0343bbfa99fcdb0b09c79d9724c80a36d17754a3"): true, - common.HexToHash("0xf7b7e2dfdf8e53232f426901df3a0215b027e07945b08b95d171219ea60e2d6d"): true, - common.HexToHash("0x4d5f743e45d24083b6800cd17b3db2e672890d209943d77e1312e0c0bce489d4"): true, - common.HexToHash("0xaf447ce0563022b4bff87240bee82267f224052b7de9bfa8edcdc5499e2bf18b"): true, - common.HexToHash("0x706dd401f78d74dd4ac9a93fccfbdbb25e89fb3d2aeaf7ec7a56a34b4498faf9"): true, - common.HexToHash("0xb6c5445ff133433f37b8a91ff5bcdb90c0555bb011ac1cf766e52b96220b76c7"): true, - common.HexToHash("0x2b2e28851eef0322f23e7d14cf5e1b0bb854b323fd085a8953be25dcebca3bbd"): true, - common.HexToHash("0x2f34921a0bfb64feaa4c81b2d054c528c3d54dda8e348f35ef0ffa36154cc1b7"): true, - common.HexToHash("0xbe78fa474f60e721344eba82d73ffeaab11ea0d4e0d0cf6c702b407f58a93d8b"): true, - common.HexToHash("0xef0c880d329bc06df4a522a2a33d0e1ee9bfd9b0394221a4687340e5a63ab2b2"): true, - common.HexToHash("0xfdc5dcc0c32eb685b799b3cb081c61e4f3f646172fbf2af0f33feb674bbfd7c2"): true, - common.HexToHash("0xe1a761da9cc12c2a31ce732e23e21a22267c1fb29ab13c657550fa8b1f03ed0c"): true, - common.HexToHash("0xc330c1b9b45e81417079323c278235513ad5d9ad13f8bae7d0bbc505c7430f3a"): true, - common.HexToHash("0xc921539ce5e82bee4e40d226880e922a3a4c33fc1afd6c8b11682fc91bbcc042"): true, - common.HexToHash("0xea43a25d8c1a4e6eea642b1e7e4ca1283dd6a346b7ffe93e2e78b4a083f4ab59"): true, - common.HexToHash("0x786330136729c99160a4dc1102934d6046f3c33bd7a8ec50c710f5ce9bcded3b"): true, - common.HexToHash("0x8ffc1a2e80f94d39b80b2382c97551eaab9d7b7560f5d9d8fc4c09d92e57fa0b"): true, - common.HexToHash("0xd9ad4da475518b4a85b8a2d55ed445dd7d93ee611f97e2ed326f2795d8a419ba"): true, - common.HexToHash("0x0cf3b305c2648924cdb26f38cb6d9a6fc954cad49090dd3670601591df6ca032"): true, - common.HexToHash("0x3a91a7c6ce28650075b80036c88060ae44c1d0554208fb82ef8132a1dcd5dc43"): true, - common.HexToHash("0x689e21e2dc035148263b3ac494fc755cfd31326126e66b127e87e41acd84a695"): true, - common.HexToHash("0x6c6d1cf7edbe6ec5f57a55abc6fb4ef483b4f1cc5373730d4d6cd8b751efc8ad"): true, - common.HexToHash("0x721768e7afd355b3b04a55ab90b2e86d47843155a17e9ec9d45580ad2cff4217"): true, - common.HexToHash("0xfb41af2f155042ee9ef821dc224bcae60d50efd6437d85b3e88a589d31ce2030"): true, - common.HexToHash("0x88c1757641598e1f4f3c48e56e45d34feeeb3fed59816c4f4d0d47b9c3905d0a"): true, - common.HexToHash("0x8e57408b7b12bfc65cfd26d5493ae6b10ce70e5d675f9312455601fdadf6a311"): true, - common.HexToHash("0xd0a46cec82b0a2c05b2e672ef3a7d5ed9ab00ea332ca492b0ec78dcfa4228042"): true, - common.HexToHash("0xff83f831a8f6a7f501f06f1ddc5d6ebbb1d4be7de6f7a587d218c4710bcb4a65"): true, - common.HexToHash("0x6b52fa9d1e6710b86d979d8c29dcaf58542c7676c5590af33013a572193e2957"): true, - common.HexToHash("0x0f30ece1ade99c46b288064a727b1e1f5706e553ffc94a9056e6ee0ae5d18fa2"): true, - common.HexToHash("0xb5b37c57bbc0997cfc966632e3108ff2f8075bc01861748e36934ff0077d65a3"): true, - common.HexToHash("0xdaea2d65d2b9f3a14b23fd0d18575624763a488936b5f1aef85a3339682c17ea"): true, - common.HexToHash("0xd5652f83fabc34c205669b894d47081c5e75492c702b5b9a4843481eee8234cd"): true, - common.HexToHash("0xf9d260601b95f211c3560cdc4e4ada531fa7ee15bab9103cdb11c77c7039f985"): true, - common.HexToHash("0xc0ca4fed68e1ef6e37d0c7f2c0156939f2dcb86662dc6d6cfb9d18a913ceaee0"): true, - common.HexToHash("0x3b20481d80b025a70b0a61b89d013ab24b9105bc4f423bc8ee225c68e2536665"): true, - common.HexToHash("0xf2036cd8773d25a91418db3d3b60ace385f8090026cd55cef4cc822b5ddedc07"): true, - common.HexToHash("0x96dcd1befb244b0465f69daea98441d1b66411600224af41df5cd49f7b441dd2"): true, - common.HexToHash("0xb0daa45e6cd5fe877ea0cafaf09b8dce83a4bd0790402cee0db8f4450af6e246"): true, - common.HexToHash("0x2762569b2624db0151c4724d030809227da242a4aaaba28d17c1d2f5ef5977f4"): true, - common.HexToHash("0xfec4a22983b256cd123014e5f166bdaf38f14ca8d87c5ea351ad352bbef54ef1"): true, - common.HexToHash("0xb337cf83aebb0b5e04033b729be0e3e85dbc12fde1b93f3448ac394f023b5539"): true, - common.HexToHash("0x86faf3ccacea5cc48d94775da9dd01140678783e3b11bf676c6d2313fd25dc5b"): true, - common.HexToHash("0xfc5a6e587bed9f3d8cb62e123d15fe6c3dc4e02796c6f0f8f4ae700d9bb57b10"): true, - common.HexToHash("0x243770004306f6c6cad7f610fb6d1939f0fc847138b1981848177dc448627f00"): true, - common.HexToHash("0x2cad7175f2cbed874b1a25e30a14644c1c4ca07a900ba17310af3aba2b2f0193"): true, - common.HexToHash("0xab84cd7588b3cb6c94a9cf67be71870141ab9065e4b49d3db8e431663f9c3ad5"): true, - common.HexToHash("0x4f08477a325053210d054e0dd55703e48f3630a308a1308134f54512f83dca84"): true, - common.HexToHash("0x527c82286f0e841577d79c9e98f7e3d52a52aa42959e12c53112e7765df3c611"): true, - common.HexToHash("0x51ff65b000a613ea4e78c34534c31f0a1b6c17d2320b1839a902f53833c1f0d3"): true, - common.HexToHash("0x5ab9415c538254b3a43550d34efcc47ac5f445f7373ac471b0e6f721416feb6c"): true, - common.HexToHash("0x3e15b576481ac7fdf6fcac9588556b8151974525da4c118f86cc3fce75b2c4b6"): true, - common.HexToHash("0x12906d94cbe5d33906b8b5bc6eaf6d096e67c85e0e71ef366099de192e8577ca"): true, - common.HexToHash("0xc2cc96faa76537182c76f38839804d0b6b22de550c38f5e60424af0e8a06eb30"): true, - common.HexToHash("0xe43f091346824bd17576fb7e8f158af5ad95f4d180df2f5466a069859a4169f5"): true, - common.HexToHash("0xe04e7354292260d3c7237c76c8f16359182ea1e43dff6ee17e189222ef7bbeb4"): true, - common.HexToHash("0x0462f0c5cf97e79356d07b1d66834feba148aeac50bfefec945d3e5c47076d43"): true, - common.HexToHash("0xd3dba6185eb88ee02c9ff466c18c3c2b17a0c77fd5086322baebaca0614049a9"): true, - common.HexToHash("0x7e0b6d35efa3b453cbe7fea9f843a51aeb91683a1e3e121eee26e1ecd875c125"): true, - common.HexToHash("0x4f79da7a590170e88cb218bb21e9f48e5b72fa06072978ad8df47fd766a0dccf"): true, - common.HexToHash("0x1be6972d5fa44a21764aca595c7a747bc0bc6385315c66a4bf9cde1a6e6eae40"): true, - common.HexToHash("0x08f77dbe9f1a5ffa6f6d5e9d796f22b55b67727c28f2bc663f56aa2618d5a8eb"): true, - common.HexToHash("0x388daf4dead6ea350de1ccc8387643792bef09b2af5f23b7a9575e68ee68884e"): true, - common.HexToHash("0xeebbaaa6f924bff879859e1fb1f70c3377c247bf1c5e2c93bc54cc4a02412066"): true, - common.HexToHash("0x9abf55ce56c96ec2560b09947aafccb3d0cf36daea83f6d910903ce3598cb047"): true, - common.HexToHash("0x42029765b8b241a4d7bf025d37986a24ecb8d9dcc8667f113b4ccfb15c6303da"): true, - common.HexToHash("0x96f81d0f9236f080f95b003953258355260f8c748619e0c85c75152385c08a28"): true, - common.HexToHash("0x2c9d5a453d7f34d2e1f6d80fb27aa7c4a22dcb98905759ed7fcb67036a34e8f2"): true, - common.HexToHash("0x7738252c9122d4a211287bbb1e5a70d194817a908e3230f1bc1cce4ad1b964c6"): true, - common.HexToHash("0x0de53fe987765bafe1aaffe0f8126df60b23f1c52d5a8c9d86949de922286da1"): true, - common.HexToHash("0x927826c238f450064d0050b49ccee2f67a9cdf8842f6e9ef6cbe2fcc6808a9ce"): true, - common.HexToHash("0xa152e12858d9071daa058023f6ea8ee03e8d397f95bbca609b74cc6ef363dfff"): true, - common.HexToHash("0x8b2d5f6d5e02fe3dc7c74c7b2bd1b09d4b66e3a8f216497bb80bfadb5ee55c82"): true, - common.HexToHash("0x34f0f7430722f2b0867422e03dc832d4c979b20f9fec78a2fbd93fb04c8bb9fe"): true, - common.HexToHash("0x08796d774f6c7cbf751b66bbf954e8783b842bfd936169738082b7c9c51064c9"): true, - common.HexToHash("0x966534c95334e1609b28306ea1f430060296d1d145ba31d37f3f19afb8964842"): true, - common.HexToHash("0xa73764741fed17d63b7a4c5648bbb7bd1d1bca0dfbfd6e9166729cc08a532d2b"): true, - common.HexToHash("0x34264669e9061930ee091addcb8df276f577a19929a58fe0cde4d7ce91eb90fe"): true, - common.HexToHash("0x8894f697b605c268422955f13baea93cd5082ea0e34b1826bc12bc98994847b8"): true, - common.HexToHash("0xf6a8806ae5470ac4f3bc87b8114b8eda8c46ae522656ea28e5a3ff4e9c364246"): true, - common.HexToHash("0xe8e7293083cd8827d82819b3284f93b5cfad4c0b5128b3da24404744e9c072d5"): true, - common.HexToHash("0x4a802a52acbb7a8b36f90cc16708c103b51772d53e74bf10368d482cd6043c70"): true, - common.HexToHash("0x4dd7a20c6fd05d601c66b22a0c56d9640e0bf43b78467f113719ddf7721213e1"): true, - common.HexToHash("0x788bb0b0cbec9946277483bb399fafcc322277e563559c32842e567207df277b"): true, - common.HexToHash("0x787d461e071dd134e55727d9f582ecf147a3ca2f36d924c0abaaab51cc6bb653"): true, - common.HexToHash("0x11e513bb8eaa14e35f8dfdc433a26d24d610bab5262cd506fdd1df222ad15c47"): true, - common.HexToHash("0x06eeece757a16cf87e73c4ed36c03619208cd7fbb34ca82b87032a2d505e0071"): true, - common.HexToHash("0x25931fd94ab65e6f371dc2ad082d2789c047c6cb67041066a8454e2b863fb358"): true, - common.HexToHash("0xafc6d1beaf5b954a115ba9a0d8c641a2a96fd38e388ae63bae1cfd779b96df74"): true, - common.HexToHash("0x405be1abea6da192eebeacc371f3dd8a4a617f71bbfede0647184eaedb5c57fc"): true, - common.HexToHash("0xf0208a3825d42c6e4cd3a4a06ff3827ee0871cf1f92894a8be5fb43f3a298897"): true, - common.HexToHash("0x912ccc4a9d1234263e8147b0888cd85f7d2fb5c4e1cf42c1317af4bad7accbee"): true, - common.HexToHash("0xc03156bcc0101b1c58d668f64f763cdd694c9274e5766b4ecddbed8af5574c5f"): true, - common.HexToHash("0x250f37693ba474cdf10814f850b89fd5347736145d40a3369d86f2b8f7069d5c"): true, - common.HexToHash("0x6b52b2ab258580ad20aeb0c981aeb4056446481766fc034896812bfd832efd64"): true, - common.HexToHash("0x1231544a8d752dcaac16f3c113ebe6be0f28712775e1a69b1720008a78b7d561"): true, - common.HexToHash("0x42fea02c7e4db4a4f8338cf8ff7cbe5fd39f6ea6cb372eed147e5bb5430e2aaf"): true, - common.HexToHash("0x79d3947dbdd1cb041a536976a698287917bca6b4b13357d9ac5f5915f2670bb9"): true, - common.HexToHash("0x97ba1275ce8fc9707db86887ccaf6c5a80d138c99aac9e65c9a89c2ac540c79f"): true, - common.HexToHash("0x5af3fec9c57d41e8fcaaf9e95cdb6a5bfcef66d021d8358e29b01044a2026aa6"): true, - common.HexToHash("0xe9b139a2411c6afc3868f7a4c69ab3d20ac91030f836252ade92657d1983e685"): true, - common.HexToHash("0xcc183935f076b4c7ef037b17d1c0c988243c52c25e51d65992cf59db123d68c5"): true, - common.HexToHash("0xb00ad5834e8e65351c95520dc8208dd089f1b26772ecb4ea82ed7923f42089a6"): true, - common.HexToHash("0x138ab9b60015f8854681385110c4decf90324475b817e6c8da7f108ec3a7cf3f"): true, - common.HexToHash("0x8e66944b2af0dbe6de24f6b6ea2b99e707b8747d633fd66376f9ce374f3e71f4"): true, - common.HexToHash("0xc3ef459dc9e7ade0b3eed368bc0ac1da62f5180af61aa9872c1f710358dc797c"): true, - common.HexToHash("0x88f1277fb9e0e165d5c91d885e4787d34b2f225f7fa2571dc87691c3e8a7fc32"): true, - common.HexToHash("0x1b61e0405105575997a229fa4aa3c9f9a7db6db73b6891609f48432bb68ec7e2"): true, - common.HexToHash("0xcaf2edccfa9ffeeb7dc04506635219034f8a949d336cd6d52d08af76d24e30bf"): true, - common.HexToHash("0xa2126448dc2aa307b5e8bdef52ba3baaaa45157718cc3220f24604fad49bde3d"): true, - common.HexToHash("0x2b64aabb4a1c5fce585622099f256fa283baf1632537f7d1f44761d97d5189f4"): true, - common.HexToHash("0x4a5b2ec6b6c37476678d9b538f968837eec505859b71cee302071294897dbfe4"): true, - common.HexToHash("0xdfcaeaeed3ddcd9e822fd18fd46e3428eb4ab546ef0b41bf6fe7a74c90517afc"): true, - common.HexToHash("0x7949d1e7c01868563306e15fe947667c2d6516ccfd139945283373f19c540c43"): true, - common.HexToHash("0xfeb9293ebdf86054e2ad486fe434aae1fac62e6b602776f23c9a6b2606b68995"): true, - common.HexToHash("0x8025b79c2ddf506347fb59a308cb35398ef23f0e67e8e8482783358d3264484f"): true, - common.HexToHash("0x2cfc9952ded3bcdd3eccc124595e55619ddb4ac8efc87028278159987dee519e"): true, - common.HexToHash("0x0fab2e09e17e6d7fdb6d97b4e08392274bb1b12e25b5cbcf262f90d68d3f3780"): true, - common.HexToHash("0x65f658059b5798375e1cccc9113c5e46ba44d9cfa41999ea9ba2ceeee8c911f8"): true, - common.HexToHash("0xb436d11eed16e66839442bb7813cef4ca2ab660ed046d019381f9643fcaf84ac"): true, - common.HexToHash("0xd9bc4ffa1e6b2e6161edf86bd47386c3fcbc4c71a1baf78ab1c632f2b84866a9"): true, - common.HexToHash("0xbc36a665c160df8bc2a55b67d4a2577f7e6c1a70f697ab1d093ce10921dbeff1"): true, - common.HexToHash("0x63953b5e0c649b841bdaa238b7f718b94d9cedf591c1a137dd192157fd7d1036"): true, - common.HexToHash("0x0a64e5abd6c3dd159f3f40a3c9e146c2f7362d8f492f4f0899eba97a5a510d8b"): true, - common.HexToHash("0x8dfbe330c2587421b8a7a2ba7b6161057d74558f626b5cf9d154e5dc27f25761"): true, - common.HexToHash("0x76c92c87a2f4f0194c8328bd24684908b246efed97c9ea37b3e0a27ff1ea7b20"): true, - common.HexToHash("0x6a18cdb325c3f89b3a68d31d18633c9fbb51208ee947a14de5cf58b8a427eb40"): true, - common.HexToHash("0x8736f947067803d366bef08ec2a2b218cd1d978c399a16f231ea9710eee26613"): true, - common.HexToHash("0x81fc172851c585f7dfa7cb19d2e39beff25211437604f82d71c29d82c29c7660"): true, - common.HexToHash("0xb7e079a096a480949f3031b8a9b7b9aa0503b1076e76bb78c444531cb93d53a9"): true, - common.HexToHash("0x57ed8176b865053e3e6a51acd1963da48e0123f0273db78d663ff9221e789253"): true, - common.HexToHash("0xcaa3ae0217cac9aaf769927f8ea2a2bb6fc750b683158227ca4c9b8043f04543"): true, - common.HexToHash("0x343779257a771080217b3a734130b34951bf52d32413fcd7fa77c69139abe2cf"): true, - common.HexToHash("0xd4f4eb054cb9fa08a3b75fe0ef8e09048d02af5633d317decdb73f15733d0be7"): true, - common.HexToHash("0x312a1c0b2b43cf702d570791e99f4aa15199da499f24a92fc0e2dd7e55553e89"): true, - common.HexToHash("0xaff1b857ba8590854c8ef7eb9653d96234384382d44f25320a7fbdc050d8d767"): true, - common.HexToHash("0xdfb9d95ab64faa780ae74d5b0371e5226ab136a45fc26a8f29149b524321f560"): true, - common.HexToHash("0x466551a20e3c6905ec3473d2afb49e540505aa15613492b53e4847f433beae78"): true, - common.HexToHash("0xf912744c182c384579b4abf96b815bc0ae755d136ab61d0e8d9e12ac544fc243"): true, - common.HexToHash("0x2866177d0ca4ce281eeae714d18a153ef8774e6cbfc6ec0451997be6106ee166"): true, - common.HexToHash("0x91657a03563ee1e4ae368f979a3868df376a67545786b7cdb4cc9a0e4c54ca2a"): true, - common.HexToHash("0x3db769277039c7658dd1e9f8715771ba0a2e03ff232035a49025a44ae1c0d9ba"): true, - common.HexToHash("0x48c5c8030211d6701328ebdab0f3fb95fececea917df39fb8d13f4843cc395ff"): true, - common.HexToHash("0x32a1fc4ae50247d2520b9f8f0ab93dee6178cebadb2b307d7c55806df96bac4b"): true, - common.HexToHash("0x0822d28aee2188fe36afdba9977cceecb56d761277bcc4a9a325acc549de81bb"): true, - common.HexToHash("0xb9e36b272c252866a14cfd21cb12fc53af5639fdb9e4708d1ba2f5f88917168c"): true, - common.HexToHash("0x038a7646dacf52d0c9d6a0571b33629d130aa50e6e8706fe3e280ff22fb6968b"): true, - common.HexToHash("0xd9389e7f2f387cd6c683d5dfe2f0137f094e7c957fddfd3f2895cb9817e3f4ad"): true, - common.HexToHash("0x7c286a747cb7122e6f0aa3e5aa88e32a1d6b068c2535c4d07aa85a2625bfa024"): true, - common.HexToHash("0xef9a71c64d5f618e533cd065a51f8581f9f259e9d5ebaa971b41f7c9763651cc"): true, - common.HexToHash("0x0aca5890d8905d572a67771e79927942ef3431ddffd4ada62982ef7311d800a1"): true, - common.HexToHash("0xe23744034352cd3044b316109e3d1617ffdfe6264122d3b287b73f4840b06ae3"): true, - common.HexToHash("0x4a3d8c631f643d3716b32f09b789fd1d7287ab66de0593008ad6871bc9dd5698"): true, - common.HexToHash("0x5dcf2935a5759627605c2502e2c54a94d1bd8e8f2c5d2a235778f13cd3afc520"): true, - common.HexToHash("0x421127802ea308388b2eb351cf37750ce9c2eef74f2ef764fb6208318a28bac9"): true, - common.HexToHash("0x4019ed34b3efc99e490e90dee5503a3ab7316a2a0b3db8adfad7339ab28692f7"): true, - common.HexToHash("0x68454c03b41c2c27b9d4965ee7178530ec6968b7677db23c79e6870708bdd7e2"): true, - common.HexToHash("0x55860ae969b5757255205452613abb026148899955867e2934e049ddc4087f72"): true, - common.HexToHash("0x21f240168d6fb972300931703cc2ce9899c647cf6370ef1ffe3890b841b3a8c6"): true, - common.HexToHash("0xcfe5eebf2ab33b02d36c211d46279034ed3cf932eebed67bf9c3d2a23d021a0a"): true, - common.HexToHash("0xd867da96e83083f299bd2c7ee141a4ecfd69cf23aca0b90fcf8e196ff662f5a5"): true, - common.HexToHash("0x50813588aa71c0ac827c2e05ad67d09369693f086a7b08fff4a5e32dec90d29f"): true, - common.HexToHash("0x652c8b03cc6bcae4cb4a6d3e1c9817e01655dbedf26927b224c28f4a4a2baa2d"): true, - common.HexToHash("0x00049a3bdea34141cca41721100232f46a21151c1b4458d36e515b488f215c31"): true, - common.HexToHash("0xb3f7d6e776242647130670f8cb454b6e5ded30cb47c84fa9550fdfb2e3ccb119"): true, - common.HexToHash("0x25bb65b6e5a4743b0cf4f02104a72a4995ff9ad1066f55363c9e8fa137f990f1"): true, - common.HexToHash("0xaba5487f97e1d566445d07166272436b73b7593420b9c747e879677ac62ab05a"): true, - common.HexToHash("0x728e5defafc2556f63598d3b9d4a2d16b01ff1933aaeb0bfb76c2dc1fdfa847b"): true, - common.HexToHash("0x6202bb3a3eaa37e39b04169c7f7956f936f1aeff5477c87cbb7213f510674766"): true, - common.HexToHash("0x169f33ea18b6b123cdda37fe0cd87b8b64b9c7fede9898c33964449f03749cbf"): true, - common.HexToHash("0x086b289d05a6afbbd5dd60261c7710d7c6508d2fad5dc0f8c7195fa88ef804fc"): true, - common.HexToHash("0x6e15a53cc43c01ee647e6015b6f64b06e6845fea913508aafec565614b09cb19"): true, - common.HexToHash("0xa4e8ee7fd7bf051c9c2db92ea240c493ccf1711c86c14f73efad6ed9778fdc45"): true, - common.HexToHash("0x92c1b71f6dbc5245ec8fc7a8390e2801786284e6a3276b83a70ad1da35440442"): true, - common.HexToHash("0xd08a7a221dbac23e849e184a47f5499495ca243a025b6f2fc766e0f7fa49fdff"): true, - common.HexToHash("0xf2bd1408b16b81c70bb2758e5b8b29798a06971317573eca9c77f9ef1be72ffb"): true, - common.HexToHash("0x9eaaf38ac737ad92a19252b749fbc049113a0400b69a218ca5ca4a4b8af01d64"): true, - common.HexToHash("0xcb6e09e834880244b6a8a41c132ec215607b387d1bbdbb509da30b6abee8c335"): true, - common.HexToHash("0xbf591d35d4d75a3f020ff970c66ac1d86e79ecfcb25cd49411052310e8e2c2b5"): true, - common.HexToHash("0x9619450dc88d831e2931546293f268e1c02be612f3c9b9ce8989702a4401565e"): true, - common.HexToHash("0x60eea1985c351421958aae683060f7b28405351406235cb9385dc2b71705b476"): true, - common.HexToHash("0xcf35a47f4d733e6515d048ed43fd200af17c8375b056774e2a90afdf247f27b8"): true, - common.HexToHash("0x85dc8d522eeef55018aaea9112b3f6236f55568e0132cab80b80eab192dda7c4"): true, - common.HexToHash("0xf375fcc8e2d6ccc4694c36ce85d610bb4a01b8776add658125ccb3b2047ee18a"): true, - common.HexToHash("0x583b7e0c8f83fcda3ed601bc15d2914519c5bde8022e892a961908f997a17402"): true, - common.HexToHash("0xd6a4001f65d9488a01d80fdc4f0564baaee7b6a5447bede7cb38758a2ba40a2b"): true, - common.HexToHash("0x947620b5f5292b958c345f59d402afd93fa47e52e554b429d0ed4e1def9c13c2"): true, - common.HexToHash("0x66359583c47264914658e6db19cd8481443a3f2a509130920e0d12bf83591d11"): true, - common.HexToHash("0x183e50218a9efffcbae23fcdea39d86338d5b20011634d2518fff4d0506a7dbb"): true, - common.HexToHash("0xb6c6a2c290f1536467b79d8dda604b7f56bdca04fecf3d35bab586b082243aeb"): true, - common.HexToHash("0xe58fc5a1871fa22456597ff4565cf140dc3f5b6a4d4206662ec2506d103bd3a7"): true, - common.HexToHash("0xfe5575087faa79668c2e55dea03b248e704bd1476a29d54a2be7af6d83653022"): true, - common.HexToHash("0x99087265bdcb465234684daef17cbef310a45b507009d365097a56500509f545"): true, - common.HexToHash("0xa93dab49e22e8c286f5f28426e40b51372c2b703e3307caa6b1e9045305b9ce8"): true, - common.HexToHash("0x7a7739e24e15bdea5d2425f11036548129afb1f31a84a00abc1575c2edc1420c"): true, - common.HexToHash("0x6db272fc1f757346a8bf10b94863917ae476f2b01dc0479009e4a6d31a474ab9"): true, - common.HexToHash("0x11eb78893c446f3a28333a31723665360936fbd06c99788c8ae206f4e8e945a5"): true, - common.HexToHash("0xc216c8e902c5d1d38aa4653e40ac7bdb86e4afd430727ccbb38c62da3bae0fce"): true, - common.HexToHash("0x96c2d023f9274c3766087d7bf202071877ddf611fb9ee1a2cc733f6f9e0b65dd"): true, - common.HexToHash("0x21c576952d16c085a2885e7c19875081653e145dcf6d74774369d9a6e1482179"): true, - common.HexToHash("0x573d0e0813179651a24fa9a16cb39951894ab80d97d2810c2b1e4fdc01a56390"): true, - common.HexToHash("0xcc259040864f82194283785cedaecb618956d3aeed1cb1d9af404cf07052a19f"): true, - common.HexToHash("0x1daa12c5080e5cb227bdd9b6671ba54b7e86ef15221d814964ca58d267fdc0a1"): true, - common.HexToHash("0xb1569d4e13452047b312f03df64929ed5fe5d86d2117f237de434c3846f854b2"): true, - common.HexToHash("0x857aa63465836d9e4f6f69188bdaee99b9f66b60497999f235461ba02c38fd5f"): true, - common.HexToHash("0x82cc288ac854755281e3e0d6b071c916f9b7f18728790fa87a431b261f13956a"): true, - common.HexToHash("0x5d9f5e4b2e18af20407dfebf868ca0bc3a8f6faf612a86039e08fa83103d30e3"): true, - common.HexToHash("0xadae3f0ad57bc669f2551f371e52668b43a4ffa228659b275d4c06c491f13600"): true, - common.HexToHash("0xbb2c8107831b57d4355866abe69252a8613f90c9f500338e05a96817364cbc37"): true, - common.HexToHash("0x393e3e99e647982451b3f0c4bb331529f419042861db12221a3bf7208d8650c9"): true, - common.HexToHash("0x508b71c2d85afd712993e35a882841833c1c65db2949a178992fa3e9d783db81"): true, - common.HexToHash("0xab6deb0008d2ebe53dada4323cf09dca298a2b3ebbb8bfdb67e86b9cb4fee31e"): true, - common.HexToHash("0x3fb11041ed4d98ebbbfbca91c32675d8e1d6dbcc59ce1f3cc9436940fa42af88"): true, - common.HexToHash("0xc05b65a3081e33e8fb0c5ce31a0671d211b1c792f13c8156abdf995e26e6401c"): true, - common.HexToHash("0x092acedadc417ce4ebcaa9ce1669f7a50002abcb64a85fddfd38039186911c13"): true, - common.HexToHash("0x7e6e958a10c96b370d24e971bb08c135cf548872a76927f11867257766f22844"): true, - common.HexToHash("0xdb7a37d79ad25883b97e49790284f3e2225723b9634f4ba12788ed25c5815a9e"): true, - common.HexToHash("0x8798e280df97388e344c56ad4a834abf2760b4bc8f863fe5dd6b6e66e89d78ee"): true, - common.HexToHash("0xf933c5e17f09163365b03297767096c7bbd358a8acbdc914cbed750dd26ee326"): true, - common.HexToHash("0x8be73ef1062ddf8fb41c8d71e81512533f4b6de6f9901752fce82caebab5daff"): true, - common.HexToHash("0x3ff9b593f14da762b8446be289a40eea329b0cdafb087b36675816c9bc7c4e8b"): true, - common.HexToHash("0xf3b459782419cb03dcca2b5e599dc655bdb921c5303049987fa1a668b50c7345"): true, - common.HexToHash("0xe1f1083fe10186c96f781ccacbaf612febce8e5d31b5f34172c9c443905e4e17"): true, - common.HexToHash("0xc6ea9af446e6e5347c4ce0db44f77b54aa662c91e000881aca6953c8638a08bc"): true, - common.HexToHash("0xa75adc863227cd6bb20d984148c2a78bd2055afbf2418f22d78949c792028862"): true, - common.HexToHash("0x46155b7fd62da11c13bbed3aaf60175105b2014bb9c4283183e95f459745bf94"): true, - common.HexToHash("0xf29f4ab1580de1a676f59289de66bd042b5a2cee29d9401b741bc4515cb35240"): true, - common.HexToHash("0x76084a42a2736d7f111b52a9c241bb7fc2c87276e84cae7093f0ea64e5004551"): true, - common.HexToHash("0x53de5451df2a82592c715d0d898c77457cf47fe8b9ffdaab233f2142193c5bf0"): true, - common.HexToHash("0xc3c46eecd1627d72acc9c40dda762c89bb59cbc4ff4cfa8cd450684c914c894c"): true, - common.HexToHash("0x12a53d7f5b9472eab3321a2acd3c20a54b4a8d9e158793bdbd446eae4f62cd51"): true, - common.HexToHash("0xf200b2ba370c41b3c833c956918b2269b4cbeba274c7b1e166ae9e053bef0a2f"): true, - common.HexToHash("0x0e26b017ac2e1c7dac2bf71b217ff0c2a2591b98c340102f2e4b963223f50174"): true, - common.HexToHash("0xe36d5e21791a9474f2e3ba54e014f648adf9c481cfd1dfe31f57181df2905b6c"): true, - common.HexToHash("0xd46adc38f98bd2006dd9837a04bc12818180fd7f542cc9a99f1f378a01f95ce4"): true, - common.HexToHash("0x06a302b5037a901fa4e09faf598c134a34c6a2ec164877b27491cc78ab54cf05"): true, - common.HexToHash("0xeba46e1e7731d5d8507c01c2f0311bc8b2d7bc04f7c55dac0487a9ee4b067569"): true, - common.HexToHash("0x1ba464d0d8b1381db36181308fb1c884f3b9e0db7dfd7d12d54cac2d90c62737"): true, - common.HexToHash("0xf8fb7558c18ade95e6b371ba262148c888a142890027ccf7c66516f18ffd42e7"): true, - common.HexToHash("0x30e198f5a604b6f5821746f0fca7264e10b6edcf8a33f223d0d45ced23ed5989"): true, - common.HexToHash("0x75e9263b742eba31499200fd38073180f3d4a6c1772f7142d465825fdba64f56"): true, - common.HexToHash("0x42427e6c8d3de1f85838b0e091af2c08bd2ff5461b19af8ed3da86758a3ce150"): true, - common.HexToHash("0xd79f0e6065e51dba0cda56929421523dab9988e96dcfee752d776d046c7e5119"): true, - common.HexToHash("0x9c722e2f3e7b9518632c2aa709077364536eb26c960226d1821387e2bc870d9d"): true, - common.HexToHash("0x17eea224e7ad407b20b657860d01c2fbeaa29d88c9d7d3d5ed65546d10e98ee1"): true, - common.HexToHash("0x75f8dafef26a8cf6648f158b4feb7f8f2700620adbb976b912cc1995425350d8"): true, - common.HexToHash("0x1f29cd352de505e2b932966f5ed08cb78264a275ada7b7541423fc068335c369"): true, - common.HexToHash("0x47f2050d8dd3d4a21db1854417489483ceab530b74f0f75d2c5a1a9568f6540c"): true, - common.HexToHash("0x888da0085c3c04dcaa8797ad308a5ae03c4122926833b430c6b1649302337aba"): true, - common.HexToHash("0xb662210543c8ff913f7e1265906cf615896272806678190b491697f5d94cb9b7"): true, - common.HexToHash("0x793f8b5efa653d2dfeebfa424f4cffe704c8f6eff6019de52915d0d4161ad959"): true, - common.HexToHash("0xd3117530a0e70796e3c561a914697408717a25956e6355e72fe608359be34d8c"): true, - common.HexToHash("0x94e7a46061578fa33e11d8bf186300ef1a67943084fac0973870c61cdbd945f4"): true, - common.HexToHash("0xd0801dab7412fcb772fe331125169a264c57dd7e61dd089c7bf483cdc9c43a53"): true, - common.HexToHash("0x28ecbd85a4e79e1c6c6012462db18ae50f9ee26d83ac901c33869f9cb8333a38"): true, - common.HexToHash("0x5d22115b8603c8045f887eb5c3319c2755f42845db87becf9ea724143881a598"): true, - common.HexToHash("0xffb27ac51783887ea96244d8d1f01aa26cd4ed029999f9b148420ce98f31154c"): true, - common.HexToHash("0x433faeb878ec3acef832013e68dc7f96e5dacd327c2022fbb6324468abe372e6"): true, - common.HexToHash("0xf429d9b0ed80e7aee71779bfac0b544f35f5809ed5bfb7b0536b82143dd236e2"): true, - common.HexToHash("0xc636b79317b11874fbd1487438fbf7119c409327fc9ab21335296d37d730d3ca"): true, - common.HexToHash("0xebb892f78c0ad8d6cd5030ef38294f8884625554bbad814c7a0821b92cef01bd"): true, - common.HexToHash("0x234f6dd123397e807fd9578813e0111b0b5a45e3634fe31b1c22b7e9e2b069ec"): true, - common.HexToHash("0x4b3996e2892a25c2919a45111ec455d57b790ec0a59ce261626e6b65093be68c"): true, - common.HexToHash("0x118a63c9edb4cd8e89c5ae5aa589b40820d946c88b5499d0a1cd5a4d3b38df14"): true, - common.HexToHash("0x71c2eeb1f5c95addc51684b3b7e623775dd7fdf93d54160841d5d1aadd402f07"): true, - common.HexToHash("0x9afacfc6b4a34f4093b119370c5203daad662491c77058795e905393ccd1518b"): true, - common.HexToHash("0x8a7f2819b8328e99cef4f7fc0788d1a3ceaecac8cd0fde8f696c15c3b5fda06f"): true, - common.HexToHash("0x37c192fd5bf2161362e4706be093f9382b4539beceb6984a789bc68b2df23434"): true, - common.HexToHash("0x888b786e52abaee9be6c8019b6d7a0ab71d3a83ef809f9f946dbcd2acaa55fd3"): true, - common.HexToHash("0x4634c3cb6d693d19545b6f40988c8789bc8e205cfa843d19bb01a5f7c4ab8337"): true, - common.HexToHash("0xe163420e42d0b3adb1e887220560001d8a981dd3aa9f5b7f732fb35c9afc4159"): true, - common.HexToHash("0xde16ca4253f0b42473e06894b5afbab345c4c5dd2eb07aaf255c17bdede0041c"): true, - common.HexToHash("0x7e0c257052b02f59c12644c0db512950aa8a3309c0a3b80109907f8ed11ac8f0"): true, - common.HexToHash("0xa21834b5993d748ade0a32e37bbceb05ea1f963bb2569e28507fc02139d7988d"): true, - common.HexToHash("0x106cb6f4bda0afb8428939b8acfa00f5c7180281a2689f2eb91edae15ca15962"): true, - common.HexToHash("0x045980c9cf6344e704f807fcdad5313ff2d4ce6c355d419c2acbef13f8630a75"): true, - common.HexToHash("0xd05f25aa6bd31b9f730b8f810dacf08d7fe27611b5881886a456d887b13bfe13"): true, - common.HexToHash("0x07ca837ee22fe16f5ef2fbbaced39e5554a3d80c276333f72ee653ff0e86096a"): true, - common.HexToHash("0x30f4498959133ae725aa628012bfc97b8ec357676b56b4749ea453d4c83e411c"): true, - common.HexToHash("0x358cc0e8095dc4fa8854346bf8237033db2dd85f57468fbc30f54cd58daa13aa"): true, - common.HexToHash("0x35a1846366b9c3cb7e6aedd708eb4b44e44c32cf96960c4972d1597d12ce0705"): true, - common.HexToHash("0x520b873792b3976f90038cc9369948e3ee4f124e9d5a947f0171cb590b269332"): true, - common.HexToHash("0x48f105401e4152ea5bf20c9e213e57cc731df73990fdba0489e1b5a7ec745433"): true, - common.HexToHash("0x567355ea2c63be39e14d71dd133ce2bfea8ea9ed21f06297bff474344445c72f"): true, - common.HexToHash("0xca8298b39ec1410d910b8e40ec8eb18b5f1f192b2d82f42d4086a18be10afcc1"): true, - common.HexToHash("0x1cdc3a5ea15fe9879a8e8ec05d56944e3efbaa4f460690da50b559e3dc41f90b"): true, - common.HexToHash("0xfa2f917eacc0d44fa14ac8ea0e92ed92b02f8c78ccedb0776e6ce9d5f9f95dcb"): true, - common.HexToHash("0x132cc44ad8ea8409231d878132fd30c1dd7d7f44e02653f1d1a35002f457313b"): true, - common.HexToHash("0x0952cbea84ac30eaac28bcbee3da375d50090f37d145368bf64e7eafeddcc901"): true, - common.HexToHash("0x0d3c2fc0f39ff0ea3a63ee47b9da932df968e5e82422e038e2462d4d7cc4163a"): true, - common.HexToHash("0xc700557f7f5576a9ef625e39320943d934d76fdbe84c657eb7695b4156255a99"): true, - common.HexToHash("0x0e1cda6ba1919c3373bcd7b7e11de34177fe448c513601f2b6aa7e7183e0b47f"): true, - common.HexToHash("0x55b9b41af3e1df842b352123dcd1c4762a2953ff91632c9b6fcf150fc1e66f59"): true, - common.HexToHash("0x0349d7f31a1b91e253bffb037489a536129727f0d779346d3cfba8baac6d537f"): true, - common.HexToHash("0x951b8ea0ba872a9319f0250d16101127aeb68b325d62c0e3724b5cbac655b5f3"): true, - common.HexToHash("0x4d510815935154783deb9dc60428e9b7e4712cb1ec7b6fdf77e1bdcd093dcc97"): true, - common.HexToHash("0x0e489cf0f77f4357d5cd5f8dce771dd787e92db397ef9585f6486099f7feb161"): true, - common.HexToHash("0x33db90873529cee7bb4017adb585bf5f7bc0d38b6bf9b3def5840132314346ca"): true, - common.HexToHash("0x4be837f2f3ae253f6bab7de2c243865b300ff61fe8505f3b4929b0da318fbfbe"): true, - common.HexToHash("0x802bd9892667958047be01256ab4b78f7354721abae7162c7f19bc1501fb9eaa"): true, - common.HexToHash("0x62cbacf895f3be1184528e431974572ed49dd0596df7e3de5b8e78723accad7a"): true, - common.HexToHash("0xc5ee8809dfec576ff81921b3911d5f54cb4ac690ec05678a4f1a3138359f94e4"): true, - common.HexToHash("0x20752eb4b6b47a023ebc0d83547a9e5ba4cba89b5e1b653a896a325d65950d07"): true, - common.HexToHash("0xf38edff71152678941d044815b72f00db0b58f999e4253cde2d71d6ba131a22a"): true, - common.HexToHash("0x1d135d2f71742747348c7988303767fc9bb7cb93c6e831955acb4ce8f71e4203"): true, - common.HexToHash("0x2068a6a228599002ac5378046363e54e70d0ca5c60f1c20fa13000bb2a23c95f"): true, - common.HexToHash("0x04622baffacc173192bf85c3ffd1f03594d62a57440d52de11c3ffc545efce48"): true, - common.HexToHash("0xc99ff576ff47047ed4fbc89d4d43fcc51a0eec12db23e4014a7fc78f5ae2b79c"): true, - common.HexToHash("0xd159a8b1974cc4f60a5dc0184f6357305f73bec4e85e1dfa065cff276b569162"): true, - common.HexToHash("0xc0ecda30be34ace5297d2988fb9f6c1db293f40265da60fa22cdd6832dd974a3"): true, - common.HexToHash("0x587dd3044233ad298f53ce72890b06a3d738945b8f01a84afcf02727b5a29643"): true, - common.HexToHash("0xc39af18d0f84a1c286583f1889649f66f7407f8dc05e35c920f510c0f60bb466"): true, - common.HexToHash("0xe449fb9146956d37d93d84728c12d93b471a54edae884fec655fb5b6da4d083b"): true, - common.HexToHash("0xc5711585c1b349aef8f803b4565697811856ae863cc050918bc5aeb3e66120f3"): true, - common.HexToHash("0x31bdf470e5023dcf50f3720cedde8a1fb7955be0e4751d8fe8eb2ce110f4e158"): true, - common.HexToHash("0xe9a9a15131364f6f9ba10abbe3963cfaf3a9909e63b772c431340ef2b856f6b7"): true, - common.HexToHash("0x5cc68b9979e0b2db34cb3e1538300fea5a7085e548922014d4726801aa68eee2"): true, - common.HexToHash("0x548084c30983bc0636d51ed58fa4a46507d84704996bf500ec2394e6848d5104"): true, - common.HexToHash("0x2686199b8185be4bdbf644ede6e9b3c7faaef4711702a6aeb3ec16632da3eee6"): true, - common.HexToHash("0x178cba6928ad52fc4116efa567b3dbed85127fabf13e7194350308db6fffa614"): true, - common.HexToHash("0xa820a076821b4bc53bb0e5f85474cb60a4519cdeb41b1d6aa6ab12ddf91a7011"): true, - common.HexToHash("0x8be85fb47a559de9c5f727b63cc7b535bcb3292e1a0cba0001693e87c387a390"): true, - common.HexToHash("0xb72d863d65484e2da8629f7a3673e8b645c08abb578502b3a914d5d9c8396985"): true, - common.HexToHash("0x6deb18e37297407ee613e03d9e9850032b00f83909dfb97530d4c1371dbfb8fc"): true, - common.HexToHash("0xb563458848049f23a5177b7ba2a36d2fa203a2bdd37749454eebb40eddada253"): true, - common.HexToHash("0x67f9a86270ba9da086fcda25c03697f53ac9c6d625fa1694af2f82d9b3290f0f"): true, - common.HexToHash("0x18c2779e4ece2a7bbb2c2c7f00dbacf2d749148bbc9d0834893aa1c147474077"): true, - common.HexToHash("0x03610164bdb16f6448556ffb81582089137e76ff1d5e51e97db676cc96ef6c46"): true, - common.HexToHash("0x090131119faeda2fc1bd83819d8ee2b90bf0c1655d1b4e59c65d290c4b96740e"): true, - common.HexToHash("0xbedfa77e89bc70f9101bcb2d276029bb7bd9c19119f617e7ebf67423fa4319c7"): true, - common.HexToHash("0x54091cc3786ada7ed88e06de76c47fe3361ed784bf26b6a5781f9a2d86a64ad9"): true, - common.HexToHash("0x5a52e6a8d5ec73ccbd70d5afef9f00c3de42ff2509f07acf566d615bd2220bc0"): true, - common.HexToHash("0xc67171fc28b058ee03632909daa98dc085e42c20244d2798a3eca02b56ca007a"): true, - common.HexToHash("0x6876384e3bd3eb29f7e98ad3d90c4ec6eb168110592972a6c01e58548eb211f2"): true, - common.HexToHash("0xbfd3255d7be5f9e89eec4ddc9bf1b5aafe1962414bd9092f0fded9f86988b5e5"): true, - common.HexToHash("0x6649daf825949a9a446436c0b8ce18f365b85e5b1cff6f507ecb641614442d43"): true, - common.HexToHash("0x1c1ac90ce52548b6b83f137cbf19fdc08b9e557bd93c33276c2e696a5f14954e"): true, - common.HexToHash("0xb7f9e461177bd7979cde786f58a04b7cee6aea6465d7019e52b231032c2c5a43"): true, - common.HexToHash("0x31ee5582d5b672d0364f06d84808b0006abae6507ea75a37020c7a8a9c1e9f1c"): true, - common.HexToHash("0x06f95223928adb5fab877c35422729d7b01b49a94df5282c4496423c578e7385"): true, - common.HexToHash("0x76796847deb19cad8a0f70f49c064f8e65e5dd386f979c9e35ced470fae07654"): true, - common.HexToHash("0x88a98ce8818eb10ac492c89512bad7b3f021be34467ae423ee0004ed31f20a87"): true, - common.HexToHash("0xdcf76b5b51d56b65a69bbe44ba50d323ae2c69cc75cf917886513b874298659a"): true, - common.HexToHash("0x48d656799f451fa599e2f33b199467d1de181a07436e95c1110da225ffda61df"): true, - common.HexToHash("0x2927686db59b04e30658140352d6a18c8d4fd7fe907bde1ddf85388488e5a0e5"): true, - common.HexToHash("0xbcd0958890b48e7fe80ba9ddd03b76358ccd3e5b96f562b0180fc07da3c21931"): true, - common.HexToHash("0x55aef1171188d3160cfaaed5b498717ac260197bfefd849dbb93c64a1d614a22"): true, - common.HexToHash("0x5fbe100e8bb85f49bf23ef4cacf3379fa6fe0e234734c6c2641f2e038670424f"): true, - common.HexToHash("0x7a144a3f15d10a8e1e74f6ef7a3208ddf647b5eaa20570e86eb116c630330dbc"): true, - common.HexToHash("0x3015aa83080617f2023c781b9f3bb18508d835730373831ac81991d6290193fc"): true, - common.HexToHash("0x7d6d23ab51b5031281270118ede575642c6d0693e736c462896cbecfcb407f97"): true, - common.HexToHash("0x69cdb6f5fae07810137d65b87be839ec6295e500c2880eee2f6278e6823c58ba"): true, - common.HexToHash("0x3bb550ffb475b60f48a09798f73f7d8528c793b4bac01d471d29c33f2d57fa07"): true, - common.HexToHash("0xc3b2260b0126e4cad0a53941eea65280a35c1d0fa8a88d29cef4ed11ef3a5d46"): true, - common.HexToHash("0x53f91c5eea3579e5d41de95349707df9b579122002ae6fb559f3c2f35e4b1d52"): true, - common.HexToHash("0x3c44701a0c903afd053cdcb93db4e3e4e7399fc9faf3ac299316b2f74e21902a"): true, - common.HexToHash("0xce85bf78e977e7fbc1bba9004715cf6991bac6988ae3e4f88a960963dda397c3"): true, - common.HexToHash("0xe074792566155c6a850e286bd95d2ef4a37421e99f15471792c8e451896123b4"): true, - common.HexToHash("0x4c80cc51a37332dd827413f62847bdee514776ce6971c926529b4b80ea723090"): true, - common.HexToHash("0x752a45bbcb5cb85563715155baa9f311e7fe0d44a6b6c1c254e3b90b7fc2b1fd"): true, - common.HexToHash("0xf9e58af07082a151d7c934b94a7ec97b79ee8cf1c6879525a9ca9f9637c564fb"): true, - common.HexToHash("0xe0e932be990b6c6875d48750636eeef59da6b18167b0039c8a3bed63a03c6f07"): true, - common.HexToHash("0x9828776edcaf16be6f0b63713093ac02c5039cff4dcb3e7f7867f75a7e2e99ed"): true, - common.HexToHash("0x77a11132c1b0c25c5265ccfc7c460d452a501a3ab2ea4d5485a46d2a6b63af56"): true, - common.HexToHash("0x75254f5b9c421f1271e2441316318c947249ec9fbda972c447382ac097662e95"): true, - common.HexToHash("0xa9add731db0bfe8b29423bc1785fccc96c7f774218c7c7c55eef7bad1ac04f4c"): true, - common.HexToHash("0x93f2a0eea938302513458c16cef6df14dd9e264e27ead8df46f809ee967e57a1"): true, - common.HexToHash("0x958c1b4be6492755f7d6e47220957ac4a5c492cae7687ff964d6093ebf018383"): true, - common.HexToHash("0x9e9fddf90064d7de8ece28a08781364f806042dbf6e19c3e330ef666d9fe53eb"): true, - common.HexToHash("0xb8160eeb5562455c8f42adf5e8cebf647873fa2f6f0b44b39e0e2c9eb57f9380"): true, - common.HexToHash("0xffe662d26b12e0246eeeaa0bf6444a4d701ad5b1ce2dc50c01ae0e8e8dd6dbe0"): true, - common.HexToHash("0x11af44deb7c8bc6200bbe22832aa9e7e0b92a393fa95e7297f678e10dc56b65a"): true, - common.HexToHash("0xc10c076029840f7d2f0c4422fe8dad06f1fc47f73a1a0a1ff3247089a7e5234e"): true, - common.HexToHash("0xaf6ad8e5b79dfae28eec76eed6b2ba3d85abb4eb3d9e5f7969b045a92ac724cc"): true, - common.HexToHash("0x57e5ae6d973d901a0901325ae567f114b4b1800bf69b767d4c8b42310701fc02"): true, - common.HexToHash("0xeddc92e3dc1b3b72ccd0331a8611dd34016073a08658a2909663346fd2df1724"): true, - common.HexToHash("0xdd2bedae8887a6f8c7f0a785d0a368c586940df573636d82a1f471dafa5bf138"): true, - common.HexToHash("0xa5e7697136ab0737ed02e9799df703c9a19ac95b979de6382b696d03da062621"): true, - common.HexToHash("0x282c4b7b06ba4a55f4fa32f1a8609d48b34b86ac7a81a5bdf559fb099935ab43"): true, - common.HexToHash("0x6573cf1609d66650061076c29ddc76210ccc74faf815c318f87360690da1bad4"): true, - common.HexToHash("0x4383d85fcb8d934b29f28ee9557f4676020255def426cf7667520d990d4641e6"): true, - common.HexToHash("0x1af0664f2b20ba08bd58050e1d47b534339ea9706524d5411c6283aca33a7c1b"): true, - common.HexToHash("0x35eaccf2ed51c2aa350b925b79b0adf851b7914db213db97acc8bbf8d59a97ad"): true, - common.HexToHash("0xfb833580b4c4445a7a2ab4ef0cb3095b3aada375b046da14139f42dc1b3d6025"): true, - common.HexToHash("0xf158d9b5bd36ab55c52ac3fa47a67ad89dae22aa63d615d8c9a7d5ef85e518e8"): true, - common.HexToHash("0xf76e2921bebcd60b5ff79ac65dadc37eebc6dcf7a5f7bc02652dbdc0f8edd928"): true, - common.HexToHash("0x76827180d2e483605f57fe6a91f37c16433cf0526e5d8108c77c799aff6c3944"): true, - common.HexToHash("0x5291ca2702d3cb2e6dbbdddd60242ba136ab7b250c39a74356ed0dfaa00e48ee"): true, - common.HexToHash("0x522957188c33654cf6ff7c187614ffc2fa00e05fe7caeb4010f9dabcf533963a"): true, - common.HexToHash("0x00842234e56a8aee269a65bedc99196e4013792ee750e1af6ba3cace6911f400"): true, - common.HexToHash("0x8770d277622e5661bcb102ff3a99543353c99ef04afe5a59fe53b27bdbe81313"): true, - common.HexToHash("0xafd8c79a5193d89c58f48cc99c219dd72267c06f83d2722ced5745d63a0d2357"): true, - common.HexToHash("0xb4ebc03e5657f64fb8674fb646775bd61814a998373b1da31ac3304571de3a3b"): true, - common.HexToHash("0xb4df772e90d95ad40ca23f55fa3726348dcddb21d74650ab2f5d2625b4e13be7"): true, - common.HexToHash("0x93c104110d47178628a40d864e80ee463551280788bf3b23d4562238b7b006b8"): true, - common.HexToHash("0xed33a39fa900589a3e3f0ef0784632b9be228081657d0a27c8f3a9af8cb34d49"): true, - common.HexToHash("0x0506ab60d4eeb6e0115fad5846c8aec0a9ab431a3dd864a710d0c78e0893eb41"): true, - common.HexToHash("0xae8b4fb2f700d05da0c1456088e16cc6048e1f99d71aa478d91be365a82533eb"): true, - common.HexToHash("0xd4e80d6a3b956d7eb34562a4fda6168fa88db784740b432c9a380812c297c8a5"): true, - common.HexToHash("0x0e183336b0e23087cb78a3b27859eb718cab8463c4a8ae748134ae1584f369b7"): true, - common.HexToHash("0x10120a6ed8b569c089163c6e9dcd79acbbf3ee5b17fefb4468884a6f06e9bb4d"): true, - common.HexToHash("0x73932cab08017ba036873b84aba412e876623531eae1ceda80057dbb26032003"): true, - common.HexToHash("0xce40d77bacb0ebc636bed398ae1051e88310c6c5eecedffbd013be52e16c8b1e"): true, - common.HexToHash("0xb57c97b9c545a844f43c9bea8ac3f586632bf04b88834be7e02e91d925b2c50d"): true, - common.HexToHash("0xf96069274fc87e50688d3b3f0a8326c0afdccd38acb8f447b8900146e49f4b22"): true, - common.HexToHash("0x27b1eb1cf140690f3e297cade6ac71e6a97390bbf6b8b15f86ba9a5ef20c4116"): true, - common.HexToHash("0x965333b136c755ba1fbb16aab643fe4875319dafd70d4163bd504799f95e9d99"): true, - common.HexToHash("0x73c45e904c308a42cdd04b4a2f3031696bcc75fb27f2e7d4d52947f8b5b471ae"): true, - common.HexToHash("0x62196856f6dcb3fb6c71e68c0d68b8ce23169e0e5d818869e837961a331538ff"): true, - common.HexToHash("0xaace57e883bce848bbac1ed7931aa4bb49756a51f350773caf0aab5bf0492611"): true, - common.HexToHash("0x315ac16d8cf785d69ac189d53e978c7053e0d41ed0c9d8f7d117760cffb767be"): true, - common.HexToHash("0xcacf8aea85f002e50f05b337c74cbee3af7e2615874692ccd682f65176fbee42"): true, - common.HexToHash("0xaa4d959c587cefa976efa44d57faf0b78ccbfc8c23718fcfd5589d040f2d65ec"): true, - common.HexToHash("0x59f496e0fb21563125e905749d3eb96043c8a9bb30a9f373e5eadc3b3a042116"): true, - common.HexToHash("0xbf52a5148fbbb9ee2a79004b1ee437363b7e680f23ede30b026a75695257e8b2"): true, - common.HexToHash("0x67fdcc17e6a90ed16325cd864d4e09bacf4bda6863b04585807763cb0466e877"): true, - common.HexToHash("0xaa1682f524504bf42dd7181686c31d45cc828e6aa7f37a61ec3d187582d35543"): true, - common.HexToHash("0xf0c12436e7a684d2edf1142d250412b1fe435b8b8788803a0c0a334fdb611cb7"): true, - common.HexToHash("0x4f3f57a6eab57d883e4fb3939f3e4df0a9b900dfc00ea9db648fc7090240c6fd"): true, - common.HexToHash("0xabf6c99728ee59a7c2e356fe735ba9aea2c48fc6e3d5cebf4c8618ccee2decb9"): true, - common.HexToHash("0xc767732013db412f9f34134b9e1a6b7fc00cf2f75be427b3fcf2f066263278ac"): true, - common.HexToHash("0x15482b72cb5aa349b2f638d3c5dacc94c82306c478fb7b5ada260640d9c4d3dd"): true, - common.HexToHash("0x66e5b023c5f9a9b66eadccda989e1687accbec33b24c043b18675f5765d3b3e8"): true, - common.HexToHash("0x3529301da91b66a0c341c80688043ecb872cf43f50a744e9f6f139284cc38dcd"): true, - common.HexToHash("0xbe6c9b67129b5b72d8ef40d4a2a58487846f271be29b961fb78f8e4d9b51bbfe"): true, - common.HexToHash("0xb7fb5d1cf6aa7ab6ccab01500ccf7508f2a51e091feaa0f579521f5d8626633b"): true, - common.HexToHash("0xd55938461abdaf3db12114cab476003c5e06b1d8daa38b96f42c40e551c22e34"): true, - common.HexToHash("0x9746cc1062aba92d4e6b19e53b260238986de6a4fb8e846cb02efdb98628cf8e"): true, - common.HexToHash("0xabbd7e00eb9bda4313aa822af33a60776015af173354299c420947f5610b824c"): true, - common.HexToHash("0xff5a84d64ddb7251d23ac001c45ec619bc817d80c971a003878005a8e51b759c"): true, - common.HexToHash("0xf85eb8cedd6582b8d5b8ea708f562660b673d7bfaf3d7cc78558234e367ed30e"): true, - common.HexToHash("0xf79339e813f815d5e477547c4605cec457e9b8c993d9949d31f27569056a93fa"): true, - common.HexToHash("0x7c074c526ff3725b90c23ea6117de25d79abd3638db0aeaec5935ef818767119"): true, - common.HexToHash("0xdf176302c9c793660b8a03c4060fc4d7b8b0148e38bc1cd80f9573ca6bc0a103"): true, - common.HexToHash("0x6155fa23c55f535f15f5f2dc75196df8f87a86a93aec13c8cf6d6c50a0761d3c"): true, - common.HexToHash("0x91818cbc86a2e6f90c49cf00cee85f3f2a11500b6cdd7cfdee70f83a663eea58"): true, - common.HexToHash("0xb734e55cb8c108f2c182ad356f097c0c9aa836c69071ba904be9c571d36175a4"): true, - common.HexToHash("0x859d245e441802eae94f605864a0e6296234a7ed4c3a1f99418f54427a94c243"): true, - common.HexToHash("0x3ad2789dabc347f52a513c03f485d4875a63b5350d0a400974a1566d024a3fa4"): true, - common.HexToHash("0x1ead49b66da006a1f373e0810e06a4b5ab3d404446fe162820e4ba026643e3d6"): true, - common.HexToHash("0x9654bb616e3ac20ac16bb24cc8b33b900a7096269dcf9a8a1036ced0cfa3b3c7"): true, - common.HexToHash("0xef2e539e9d70bd775f3ea666cf8a34ba34fb5eda56da5297be424ba8731ce778"): true, - common.HexToHash("0x6a7019119e4e38510fcbc8d348b0566e37106500aeb45bc8c3418e1cf6282b1a"): true, - common.HexToHash("0x4bdff5402a12294448ee2ccbef44d7712e74abb96b4ddc897ed823117f244346"): true, - common.HexToHash("0x25ab16642de05a71fe81cbd9574bd240c6e57b4376a8f61ce561759a234d5e02"): true, - common.HexToHash("0x4bfd3404ae4214c5f8a9c51185d5e3a250473e0c0bee7a20076f54066e5eed4d"): true, - common.HexToHash("0x0a58f3ae76267ae69db9a06916cdbc728eb0af28d51142ba63f04e25b983dc48"): true, - common.HexToHash("0x04e63cb5fbbca95eada7e79aa756c6de21878260d3d43c6a3e9cf84cf5477d38"): true, - common.HexToHash("0x07f7c0a6686c8897502eba98b6fb6356111a30475f78896f58c5e3dd77bf9d72"): true, - common.HexToHash("0xf40e024fec3ce4c701f6a435a8706d280a2718bd62a629c6db4c3518d540f433"): true, - common.HexToHash("0x6aba632d0fd841f911bbc9399bcb8f83c41b65dfb611b0357662459b4d9bd74a"): true, - common.HexToHash("0x1ac8a66f853f0ee3e840c5da3f42b7b9e3e806f201e2891cd09e6d97dd5deea9"): true, - common.HexToHash("0x2eafe5bfb7999ed034bcc483e0d319cbc12c3b22c4f38d90d4723e2e359b7192"): true, - common.HexToHash("0x5c9d1c9dff44fbe55317ce8294b9dff39adcd5cdabed1aad282d72ce1b874510"): true, - common.HexToHash("0x890b3f1a6970d8109c94fe3efbea8b84d578a275bc2bf94a2fed793524a51768"): true, - common.HexToHash("0x7f7133cef26d5b99d82efaf66aa59b51161bdc3ff3aca000ad208946f691a9fb"): true, - common.HexToHash("0x07b640483d47da243834e01e40f5ae4c0f81c2e97c91a8c470cf2ea31bf65379"): true, - common.HexToHash("0xeec384a8fd47b0276b39e44930351015fbe316b2f29a003f5c590552f32e469b"): true, - common.HexToHash("0x283f25831cd3a6d94d0d0a7301aed99c8643c7dd0fed572d41ed8788f0d00e4e"): true, - common.HexToHash("0x70c42fb30ad6c6cce3d6a126436e9a8b0b9599a2739b26ca83df562d75be9843"): true, - common.HexToHash("0x1d4a66125bc738a61fd30db833b7ac874f52a10ae25f7fe179319d4c159fd198"): true, - common.HexToHash("0x8dd0f4a1f2b994f5b4988374276dc3c94dc10aedf0f308c1a0a4f22dedb0f897"): true, - common.HexToHash("0xefb8fdb03bddb7cc4355fdc7d7e0ad5fac08ea0804d2fc60c9bede8cbe3be73c"): true, - common.HexToHash("0x25b2bf98719c1204f69d1dd8de562e8f43f582a647dacd56be2170d5bd20a106"): true, - common.HexToHash("0x4673d948e01500b15321961c8acb37157a5f59e6f6d951fda8de5f018af8d8eb"): true, - common.HexToHash("0x427580211d47bd1a6a77859c215f1b8d32bc5f8b6de97be5c416ddcb1b65dfb4"): true, - common.HexToHash("0x89cc0e8088e990acdc65d08e07c92437c3db9e68ed73118b31ec422fbd0ad1f0"): true, - common.HexToHash("0x09379124a1e42defa8144585b20e7a53de8750e83f11eb3c8a6a2dd2e02b32bc"): true, - common.HexToHash("0x365aa110ba3f4b21d4c2dda61189aed59626d844f3b118204c719708fc5f31ee"): true, - common.HexToHash("0x5707885e4bdce12cdc00c96e2e0de30289223f14380b8defa6d726c6fac9d539"): true, - common.HexToHash("0x683f3f9b0f525e330b6aa167acba456c340f123e3b36c259f011a30cb65a45b7"): true, - common.HexToHash("0x6cb9351173968049a7b3e85feeac53447cda210a6b505bf9bb87c3c4c497ed65"): true, - common.HexToHash("0xb749f1321602b19b0286857ed2c802f1b5427dc9e948793c874f524b7add9200"): true, - common.HexToHash("0x6d0a3176717b3c5a9e4faff3195f2af8284774c307002e160639e9163eb9e767"): true, - common.HexToHash("0x095df1fa4d67b9220b9dfe6a1a6ea832d8bf63ad47b6c2589571a7efb4859d63"): true, - common.HexToHash("0xb612808ba182314ad2c5eb3100bbc4fe27a875cc112a37d01cf1c002e2a01fd8"): true, - common.HexToHash("0x4253c1c9060f17d0d3a509912efe42763094b5c6da52273f56558dab963a4067"): true, - common.HexToHash("0x4b6ba4b10cd199492821f0768ab0e73ddba7cb87b5dd89c0f00c2868a6f91498"): true, - common.HexToHash("0x6195516ad7649f47a1ec0fb37790d9886c7ffcd5c801e5bba92a4f41fa6c8787"): true, - common.HexToHash("0x57cd97b0370a64630e6fa79bc0d490ddc982fa5a30b34477e00ed2d63d9c98bb"): true, - common.HexToHash("0xe2967f92c2a10c503cbb0374317d8c066ec05a0058c8613dffc36a73c8322c86"): true, - common.HexToHash("0xa61830add4738de6b3c43ddf409ea9dc189443b3a66738d178ad7812a7740c05"): true, - common.HexToHash("0x145ad0ff920bf60855c42f72e3c945a30783c5d4837fa737de8f0a4289adf5ba"): true, - common.HexToHash("0x2dd4be67d2d24641984886b6a03638bab882a9976b296dafce5f14dbf1bd30e4"): true, - common.HexToHash("0x3fbc8ca4d97419bb309f84de6e13f22be5d296c13c73b821bc77e6da25a6bed8"): true, - common.HexToHash("0xe99266c37c891982bf79d292523a9f9d15d110e223dae393dac9bed93fe8a4db"): true, - common.HexToHash("0x80414f43625303e2ed6b2366ac35217f3e4793d4d82c20d1156ed84c58039996"): true, - common.HexToHash("0xbed57eea995e70e8895fc74089f5b95be1c9a7052514abb436cbfc52733af258"): true, - common.HexToHash("0xe11fa435a23d415df5a5a9ffdf39ea8e0e061b5d3e6908fc4f6169a4bba6f102"): true, - common.HexToHash("0xcaa39ead55ac4f124782b97c3d643825f8b2fba67fd4866970adc0066f638f1d"): true, - common.HexToHash("0x6c2bac650e7b2f76087cd91dbc4c91e7db369e96b3f583065b6f5f1ecb95ecf2"): true, - common.HexToHash("0xf227cfa4dc5959297712986b6c09d7685d6ab7a77fca5525f4de0272241e66c3"): true, - common.HexToHash("0x9719b6f243cd5f25778ebeccd6b42673664a6452c1b6fbbef5da4a54705f6e11"): true, - common.HexToHash("0x05bc51041dcace928b916e66ba72589a5a26e8ce4605b9f29bb791f496d1041d"): true, - common.HexToHash("0x1a18f26549029d81d4a00fc155380dbca74692c64cdc3d057b46cc95ed74df40"): true, - common.HexToHash("0xcc67575d02a56e9508ce02bdaf9c5f5cea2342a9560f45fbf6d5f929f60f0b6f"): true, - common.HexToHash("0xde202a07bdc960bd5677b1386cab86a36f12489ab33f7a3c3c3935371ddf5f46"): true, - common.HexToHash("0x608409bb3a66ca98b29ab9c9b7d5deee1e163bba502e20c2ba8b0cb8d261b20e"): true, - common.HexToHash("0xe7684f5ab76eb6ceb457be6c681c98c77377bfee1c8f182926cb92f8a6e9270a"): true, - common.HexToHash("0x946f94492d7e2a786469c3d4948b3c6dcb5354ccc15f693de641c19e97fad453"): true, - common.HexToHash("0x67648a1215aaf58e011a19dfd015a41bf80b348cc88f0e232ca295dfc127026e"): true, - common.HexToHash("0x1f2e15521336552de702cf432422b2e8769cf53967b102b93fe38bf4d8075a93"): true, - common.HexToHash("0x12798dd933f7b483fd13a9b7f6c7f3a14c046eb2b56514d718e199905528cd11"): true, - common.HexToHash("0xb389436b932633dd9a184257cbabc6c9c61008df5c58f325e15f89bac5cc6e9f"): true, - common.HexToHash("0x60605354568d5e033b5813af20bdbc856ef1d1de78075e52597c938f75ba8935"): true, - common.HexToHash("0x9f6eb8b6a3e892e6f900ac26f5f0e2d21633a6370485b3d020576ab3739feff5"): true, - common.HexToHash("0x9921927d08ec7e61856afb718ba58854e11785943ccf2c7e8de253068cbf9b1a"): true, - common.HexToHash("0x357ed2732dd7f9cf5cc6d396b1e3656fe372326dfa50759bc31c0adb3b37c94b"): true, - common.HexToHash("0xb4f153ee6a4632a156f355e2a0ca809f65e7eba3984b5ccba2df375bcec17df8"): true, - common.HexToHash("0x609d5f8a7a662d73ec2e332b2b4b2d3a0e19e6a67c027ad7c96f8d37a561db60"): true, - common.HexToHash("0xd690d87eb56afe578deefa74ab643932844d1f583d532712a1632552b6cf5dd4"): true, - common.HexToHash("0x1059f9a93b6f81fc9ac3865cd425228bc179ac74648e2b78829cfd477b05928d"): true, - common.HexToHash("0xdc70d966ccd7983d872ced54b4d285a92876f8edbdb628629724103a4467cf25"): true, - common.HexToHash("0x714475b4f4ec4ccb355f9fa68dae6beb25d7267eda242460f8b30dec4aeea63d"): true, - common.HexToHash("0xb6ac437c8e6dad348afdcac06942665e7c7ec7a904adb26e2a93cffdeafbe134"): true, - common.HexToHash("0x7226c91fe6e3b05799738d04c18b714c69a170a5e94ade73e908acf5556b8acc"): true, - common.HexToHash("0xb7d937676cd249e29065eec2fc6c7a7ebc93a61afbdcf5e76ef9bf28d681f7e4"): true, - common.HexToHash("0x3f26f2954dbdc187352a516c2ca22bd64771594f233de5e91ac923635a1ac250"): true, - common.HexToHash("0xed137afe048cd79f98b555d931cbef01735d09c12c004032b861f3e24d58ca4e"): true, - common.HexToHash("0xe040c033373f26075c44346a35198455b5a6e89536eebc750625a24fb65b4db7"): true, - common.HexToHash("0x96ebc9ec15864435f9dc1c0bf01278ca607a87a56480cbdbd98da03f380867a9"): true, - common.HexToHash("0xf53fefab7b7286d7919ed043651e8aa1bdb6157b4d256729dbe387b5684d66b9"): true, - common.HexToHash("0x9057c76d08f16e11a1e1a9d03472a4713a2bf6a2f5099e78635a5febf42ddb92"): true, - common.HexToHash("0xb83270996ed5778f7ec83784d591b69f1306bf16ace51b1b90574dd39593dbaf"): true, - common.HexToHash("0x61233527e8868b4b95a6ea1535f63e64bf26f71d86cd42479c0e32930d44c942"): true, - common.HexToHash("0x7e6c2beb3fc3f6929d70eb0ee66416f596475d2ee28e65dfdeed7584574b0d35"): true, - common.HexToHash("0x60182162e6c4f5968e063e8e5d1d333b82a1c577a162856c8c6549e592822f24"): true, - common.HexToHash("0x9277b07f948a1510a155bc5604a48edec633a19121613a6f6cd917cb3b6b04a9"): true, - common.HexToHash("0x85f52c146229caef4328917a71f2b0be6d011036476c475bbb41dd366bb90bbf"): true, - common.HexToHash("0xa200902f1dd4259653fa65666bb6b9da78218372c023ecc389439fd93f8f9cc2"): true, - common.HexToHash("0x4eb35c71d588b97f6a460b30f9a6621af0037fe6de022f81c4769f72ca56c9ea"): true, - common.HexToHash("0x1d6809fd5a1f7af1664ac725690f3dabae8b9d66bc5163bda6aabc9086c8795f"): true, - common.HexToHash("0x3aa9b7e8ec3d5cd64c1cb3a29a57161000f5dc837ef28d34efdfc2b0264a6b8d"): true, - common.HexToHash("0x6de27a58ace98d7e4eef3724fc248aecd625c3dd8abccc1a07467a32dcf1394d"): true, - common.HexToHash("0x9d9b7760c8dd8c5420517544574ef98b92e48480748b34af222a1cedf9466dbf"): true, - common.HexToHash("0xe79e984a8040d5b877850edc97832568b9973564819f0ad1236815808889ba0b"): true, - common.HexToHash("0x396b68fc27ac80bc7aa0251b7c2f32f7d2ea2d545a5017b7ed12c86be707c392"): true, - common.HexToHash("0x9636126f6c2ffef77867eb92252dac40201f39ba3f7525a3139a088113d25274"): true, - common.HexToHash("0xdc934835b3d5d3fc7b7ba309e755f9352289b41c67febb3ab3ede1ed2eece9f6"): true, - common.HexToHash("0x45dda47d4904001aaf154242d6025dc0cf21b8d25f9088d0dcce05fa9c9c6c22"): true, - common.HexToHash("0x82302d918f9983a9619734fb3e4925accd50411f40bca576c6102dfa00c21870"): true, - common.HexToHash("0xb53eca1c12b04cb2fe697d21a57d08f66d399bd8cc8632ec0e3f29b0c90f47c5"): true, - common.HexToHash("0x7a889f565081677b083a5d5fa18f551d364f2f8b7b13db9df624c0846f1351de"): true, - common.HexToHash("0x9c40c05a2b8df54c31209cd938318292f0573243286f3148e1931d5631b87895"): true, - common.HexToHash("0x60358591bd6b8702cc6f7fb67f8369e85fc293285f37f6f3412f63fd884d6f1c"): true, - common.HexToHash("0x5aacfe39a582d1d1679c1dbfbc789453d9dc35504e2dddb344cc7396ef7c8d44"): true, - common.HexToHash("0x1a5d7c78cde41758809f0f88ceb3aa5326d811bc00b7dd8d39e512c0bc18efd5"): true, - common.HexToHash("0xd1f9a6e9c52e7e565499d873025c3c2d57d05b27233e2f7db560c3921625d22b"): true, - common.HexToHash("0xb71cfd9f2d3a2f8d5d5e05f7c066568b403c6070fe7d93e3d72d9616c057b434"): true, - common.HexToHash("0x60bb7c7a624419c06affe6d4964dc771d271852ddbbf40be2e126f2e9e452d21"): true, - common.HexToHash("0xc2257da34fd404e474b7f4a9c2840bd60c3c9f454270c655d5081d4a199c60af"): true, - common.HexToHash("0x74fad5d78fe091313d3e21d97d937c7485ea8ff8a8488db99c759165931960f0"): true, - common.HexToHash("0x5af353b7b51fd582f24f72e57bfe2854b48790c21923581e47549b137cec9383"): true, - common.HexToHash("0xf64e22514bba51ee2e04bd713db07f75e322a57eec594418df7068edf3df28d5"): true, - common.HexToHash("0xf7d3779697b65700f65f0b6611e976f41c32d3f380e11a73da3f37a8ab187689"): true, - common.HexToHash("0x2816ee21d9b0a1a81b4d910f56497f23b6909265cd68bbc5c3c1515b077770f4"): true, - common.HexToHash("0x7b4832885af2dced89f31505943c95432ee4ae786311752c543ace48ef16c785"): true, - common.HexToHash("0xc0de727c0760293118eb3b6ee232201538672fba929881992f5e8cf8f94983fa"): true, - common.HexToHash("0xe281421f2ed2b221d1695b5170e78c482f75c70a4e71d9357e41034837860a2a"): true, - common.HexToHash("0xc03a228c66884e7b716d95d13c2b53eb118260a1e11d2c048793f9a3da8b89ab"): true, - common.HexToHash("0x9166661035a4d6bc104d5ffa75cac9e4f8ba0bf357572d5ac77b827a14dc1213"): true, - common.HexToHash("0x3b32884150869ef741d57ed2c39665db943c846be0414b9b85bb49bbd682ac8f"): true, - common.HexToHash("0x3541fee6a3199a68261d0a56eb72301c5e4e26b8cb611f3ee14873f920622be2"): true, - common.HexToHash("0x17ccdb936412412df12dec612eb1da50270809d43a97f67d8f5428aa04124bbd"): true, - common.HexToHash("0x5d3a6d9c473e9ee3ceb21667076d0d1a1203810227f454b6b8360e0264550dbc"): true, - common.HexToHash("0xf0d026c00ed8f177b86d0cb0a0ffe161a1c22d3f5ac2d9ec66bc012dc526e063"): true, - common.HexToHash("0x8dcce2574dfa46fa6e38353d763a85008c0ba0d5f1a6c92108a7b00f33405019"): true, - common.HexToHash("0xe98bf5bd4f1f3b8d9559cff2e0064a6a4c432aeb7bd459bf266999456d08d29e"): true, - common.HexToHash("0x469ebd3722dce869c04f4363ef2be926b8ea81237288f18355a5a718e97d1c54"): true, - common.HexToHash("0x5e1bd7a496f702a63d250017143e5ae8bca035372debbab76d5c854a20008acb"): true, - common.HexToHash("0x962cdfe5e4741cd68f36163b2ada9329f80d82e2679a7bd06227a111f45b7b88"): true, - common.HexToHash("0xceaf962608f172590b0e5eb128ace208b86e4a2e42b582d0b115eef88e1995e7"): true, - common.HexToHash("0xa17c94a7c6b139383285d1c9b0fe8d1a6c144a1eb21327d6b488a85ea4492665"): true, - common.HexToHash("0xdb30042751b6c590ad2c7dbb745a611caba8108346be1d54fda2ccee10f6bbb7"): true, - common.HexToHash("0x86c74c469f5f2cbe50ba63decd71989375acc5aedb458de2ca99fedd91bc1e46"): true, - common.HexToHash("0x56d6b48e28a7a03a712660ad46abf6014c642fac1635a23c4373c190c7122cb9"): true, - common.HexToHash("0x916061d350aecf3e1c2e5c98f88bef983942f558cc5a51d80a683f2795d5dae7"): true, - common.HexToHash("0x43606dbe2b0c6583247c8b041c51f16481f663dce8384e7188a32a5fcf9c4da0"): true, - common.HexToHash("0x3e21ea6e174b33bf7171ed7070f935a46cc9b5e3cf4db17cb6cee8fcaaad0270"): true, - common.HexToHash("0x1d8228190aac64e0804e8d9903ca0f6bb9781411171a6ca2c090e17beb4b8688"): true, - common.HexToHash("0x4993ae4cc4692837b722d1992146d667f019a69febaa8b7c1b9f450e0376f9f5"): true, - common.HexToHash("0xa724640a7f7aa0dca0817ccc88f7d63a9d1c83761d26d0a958fd64235f6ea751"): true, - common.HexToHash("0xed5405efa7a93214626718f0cd94e693faafec31225bf2d11a6047971872f65d"): true, - common.HexToHash("0x547ce12c56ee25156cdcba1ed9676ee458d829e1e1893abb9ec0e068620732fe"): true, - common.HexToHash("0xd6470582d2957727c9939d284c1caa4bbb45bb0834d3948d2152e3b85473c8ba"): true, - common.HexToHash("0xe8664cb2608a4eb02b98bf5118153e4af81100686f6ed2885de2f74f30f8dc0d"): true, - common.HexToHash("0xebb005b227d293bf84dc3d86ea6ba376071d45c1db4b19b9389c826c390bed0c"): true, - common.HexToHash("0x923bfe8f3a2959a79f475a46890e03e4eb259a04e3b9344ff8e5654ebc8efb23"): true, - common.HexToHash("0x47330f743aadb77b589ce783bb9cecd5c437f5e2f3fbe41bbcec4716f8117528"): true, - common.HexToHash("0x736ef67947f642aa0bf7fdc3189ee188060eb8f9c02bbb51acd6a03812dd2394"): true, - common.HexToHash("0xb6d0f8a7dd76ff78ac8845094b0e583ee825a7a32e86fc34566ffd7204d05f21"): true, - common.HexToHash("0xe6f8c56fb5d257b5c15cfeb61e09c2a49cc9c4813fc67afb9da4a21ec5242f72"): true, - common.HexToHash("0x713ee6fa5046348a79e0b9725d40530118dcb6c1fc4ddb61eb794ea99bd92c33"): true, - common.HexToHash("0x324f878ec13c8926b40ec138c1118a909701c12ddb51f7df37d46ea8a7af3404"): true, - common.HexToHash("0xd519e64bac315564a05f1912b401e3bb4b28132a341abc7333acd7c4309b9642"): true, - common.HexToHash("0xa2e6c501352a82298d2fa6e3ce729297e94dfa0443bdb907c7de1c9f64f13c59"): true, - common.HexToHash("0xec2843d0bc8d558f2172d0fbc2269fbd49fa81c76066eb125b67b7265634d1ba"): true, - common.HexToHash("0xb8bb002ed2dda3de7df4198f86ebf335f833c70eb75eebc65718a4286e8d97bd"): true, - common.HexToHash("0x40389d7a731bfb9a8bae633b946fe9b22661af4b7ab77daddcb90fc318b26db9"): true, - common.HexToHash("0xc82afca76ec0f4f66247e91723448754960d672849e9c69f17b92922607dee22"): true, - common.HexToHash("0x61bfe85a5c1c97401bb4305afbf4850cd13e9d248219040c06483d6579350ea6"): true, - common.HexToHash("0x3b0932e7f0f110edeaa24fccf651b599847aba463cfc2040d8eccfec848256ca"): true, - common.HexToHash("0xf2271304ac342098f4b9e58512ad957150154995bfcb2bc387c218bf4ff135e2"): true, - common.HexToHash("0xa1d45d6a0f7f282db0f1309933b65e25700095ef4d88c803686f58ef7e8e17d3"): true, - common.HexToHash("0x32d236d9918db3169ac48b69749c3cf858d93fb062e9f179c5b92c19655f08ab"): true, - common.HexToHash("0xdc3fa2b9d6c12ba1abca1d6ee5e620767b4fb3b0161c6821243005fa2ba6b867"): true, - common.HexToHash("0xa5ad3e05f343d004a95061a26c88e6bb7d7b4d37f6b9c695c5e817038fd2b5df"): true, - common.HexToHash("0xd99a8b3e5499a3c22d0179ca2185f78e91b9d8873faa0a223ea94eee6313fe39"): true, - common.HexToHash("0xf1d5a47a875f66c204533bd7e331cd7bb0d0e98f9b9bd6755a2ef54c55176d20"): true, - common.HexToHash("0x9f1dae1f89c7fdc5dc3d6ae9484b15744841fc77a1546082eba88da52481979a"): true, - common.HexToHash("0x20a793ce9a60e83dd910233d42dd72a8dd601a04db8f7c6d02a8d1c25f0761cc"): true, - common.HexToHash("0xc477d387767dfc1912609d8deb8778253a58e5341aa7bff66b906856946d6bd0"): true, - common.HexToHash("0xa58b03ac78df9b57d33bb6afcabdbb8dde00a4e837ee773768f40f3f26301857"): true, - common.HexToHash("0x887b92fb3385cb53d48085b0aed29e44bbfc698fa707353c408c108761ab518d"): true, - common.HexToHash("0x950df5ed138ee0273ce9c2d9c18400eade1596dbf905d4e9eef24223b159c9af"): true, - common.HexToHash("0xdec4f689a0a319fbb74fb3a9cc8583fde0c5d08e3e321041477ffe4f4b2c0bb1"): true, - common.HexToHash("0x63884e2d8a3695f9df78ddd543df8ac778265c8da677a7ea6282dc786aa12c96"): true, - common.HexToHash("0x6e943217be35556204c5db71d140b3448dbc316f9210578b036956415ff04dd5"): true, - common.HexToHash("0x827ee87d745f322cf09a1423c3193bffd29f49839256d318555a2deab435b483"): true, - common.HexToHash("0xca7ae48b7cdf818ef781731105bdecfbac58005dcff74392eeb3527b7ee9d053"): true, - common.HexToHash("0x421565891f68f14d957564e941e043663a5a4260c7c395b31a538725716172cb"): true, - common.HexToHash("0x76a88977a3d1e823b3e0d841aba9761a7245a8b4900091ce1834c0a620a049e0"): true, - common.HexToHash("0x9d06030d9e80dbd90a98d400ec2126860372eeece19614294172c1ab2badeecc"): true, - common.HexToHash("0x2ca9595e7c84607a7294fe7acf82a429cb40c083f383d9b08210889d214f4e1b"): true, - common.HexToHash("0x0a02207d9140c9b5f4d24bc1ab148cc2a3cb65ed9c71ba868bd1975b4f23af7e"): true, - common.HexToHash("0xa2e42dbfed81e23058210fa329d107c7d65707add6ca2aa899ee8eaed56d061e"): true, - common.HexToHash("0xc12cfc4ee3d474f3d947283394c261659365983d96b59a72592dc00beef7cc76"): true, - common.HexToHash("0x537d29cefe7278b39d465cb2dfa049ce3ac54f955c408ed0eb33180bb4bba2a6"): true, - common.HexToHash("0x3cb3d533ceb60eeab3ebaad099348771357630faebd40abbd24a0a23ec0e09f5"): true, - common.HexToHash("0x9f314eb81e3a1fb5b04d247f8ad13ff07ea973396eb7a5a29e35d95337038f8a"): true, - common.HexToHash("0x181064c56951a2b7393c685d00618e8b5ce40bcadb2589044d9fe5eecd41ea06"): true, - common.HexToHash("0x4c1da5174bcfe05e141a99f6df76308919d385c748c9cb99eaf01d999951dba6"): true, - common.HexToHash("0xace50a1a5cfa9b2fa6838c613e323334a2709229e274c9417499b29a72d3bf09"): true, - common.HexToHash("0x4293e6bc863de497a154fc7152790b98be23efb4b560c4094956948c6543f10c"): true, - common.HexToHash("0x7276541a091a809b1c473fb476bb49346243dd3f8d42ea5a1d1237bedd0499a4"): true, - common.HexToHash("0x4b916afa09388165ddd5f28357624bb80c540470f67d10578230de4b0cc1820d"): true, - common.HexToHash("0x49f0b91a1a0a9e60f6f32bbd0aa14575d321567c421e20ec272049502347c8f9"): true, - common.HexToHash("0xb03833724d698a0f880e476c8afa10f4b61bc27f8e56dfae4e6eb80d1744323f"): true, - common.HexToHash("0x45ad70e5adc767b4ca07c3d609f971b12a4674eb69dd144842afe01689466ed5"): true, - common.HexToHash("0xc3a9fe6c635dd21025b72bf3a1fcffea7665c6e809ce52b007c90d4085730e46"): true, - common.HexToHash("0x3d16cd2c88e0301333ae2c6ade5f8b596819db8ccfb0d6b6c6885bc5092fe0bb"): true, - common.HexToHash("0xecfdd0b351cc806805b69f6ae8660ce46c0f14979efba293e7d2a5822abd49ab"): true, - common.HexToHash("0x5209ec9b34bb5727a1bf3693a98a640a59e92276db5c572f48b95ea8b6ba93cf"): true, - common.HexToHash("0x27cbbb4d8bfc7629e0aba5441ea2d4698985052ef432c0e3e3e2822914fb866a"): true, - common.HexToHash("0x44751ec3bba7972e936c0983f7f1d49330c6573ad30017f28de69967ba2c5bf6"): true, - common.HexToHash("0x996322ec3f558fd69fcac34af08a6ebac2ad040454025ce11f1c0f21bfdd2ac7"): true, - common.HexToHash("0x5d14ac257ee0eb5b97930e5db96ce890e363f7aecec0a6e03ca600793fbf05db"): true, - common.HexToHash("0x3e31f88225d7785d6548b5b346d695c7928fbf091d0cc709232736548873029d"): true, - common.HexToHash("0x603f09b2e5b2ba6978847e36cf7a58ce392df45a7775aecb09efea71774de8bb"): true, - common.HexToHash("0xdc92b3e218b3e140abea3f8fbd2c3d50e393a92b55e15fdc83de96440de62ca6"): true, - common.HexToHash("0x0978446fbe919cc287f9322ad12b10e8dd6488a80d6af89d46f1270103bf2732"): true, - common.HexToHash("0x4e00581686dc50eefa029e292ebbecbfb5ebbf2a27abe1fc445b8666fd690b95"): true, - common.HexToHash("0xd433136e3a32aed5767636c49e11c7c1ac109ea4a13f8a4e428bbbeb88c46dda"): true, - common.HexToHash("0x14b2ba713a5e948220889d5c9df988bf267c3a989a26268c8b8cd484268dc244"): true, - common.HexToHash("0x90897cba1cc2238e7e75634cf84be91e2708dcbf52787fc0fd4ad92a5328cd36"): true, - common.HexToHash("0x68dedfd4f8d0a2756c711524efc55ab53c5ff8db7772006fcb1fb80f73686646"): true, - common.HexToHash("0x6912c0861eb6fe627f8737d27d92f0d329179dc0a9b07dd0462f0a301353a5f9"): true, - common.HexToHash("0x61efd66b910c83914e9a20c2cdd052dde41ec6b0ac88e53eb105e30a679dbe2b"): true, - common.HexToHash("0xc7d73de5c2b59f04d587b8479ffcd1a0dbe8c67315eab44187d83f91f7f4cd20"): true, - common.HexToHash("0xdd74973daa6c97a87484b5b87749a449236f1156aa8821239dad145d2cba79a6"): true, - common.HexToHash("0xe53dd8cc1ce3fefdc6ee1eb5ce79de375346455ee4e0fe11f109efa577a41692"): true, - common.HexToHash("0xbaae346c3129d485913e0583841adba069c206428a97fcb34cb0aebcc0d1a25a"): true, - common.HexToHash("0xda7c87c524c3c18be297f26703bcf5d54470412d9897cd4d8e4c6a1504e6d3e0"): true, - common.HexToHash("0xb18dcbfa18db6f48ab2b81475ee804617e42699ab6f01978dc92f3de421ddf4a"): true, - common.HexToHash("0x1344d8c6b0cd927ffa21e20545a265def23c486fa823f0d3ce0fda62cffb3a39"): true, - common.HexToHash("0x4e9c799bc28bb9ad67eaf3659c7ac667490e372d3462f8cf21a620ff0bf29508"): true, - common.HexToHash("0xc962863e2f94b423e7d2979118c26452f3d67e96dcd1808940bcce35f5dd6575"): true, - common.HexToHash("0x43c12b3264532c5c588eeefa3e35a1b5c7b3356655a45b063eab48662fbeedc4"): true, - common.HexToHash("0x0844b4570ec8780c2e89981366effc36560529068143003e85f3cc6d2aafa40c"): true, - common.HexToHash("0x77aaadf03d7cda976fbde7500da9388bb9f3f17425030dee87781e19d64c1fdb"): true, - common.HexToHash("0xe7801f5132b37b54f4d2ca7a264500a7859ac6742770076c7a3ff618c0790105"): true, - common.HexToHash("0x512ecec711018c3a19ec0ff2da92f8142b03797251fa4c204f765b9b404e35d0"): true, - common.HexToHash("0xdf6a81803ad63618cdb48a317af3699f5dcd3ce8656dcfdbdcfe168c39642014"): true, - common.HexToHash("0x3f3e69c731a052fd12efbc124e65e3a053074a8c32f903d2066121bef37a3f07"): true, - common.HexToHash("0x5a8e4ba0f0cd4c4151d14fcd75c9025f13ebf91b2ded3fd358c5b007b7bec006"): true, - common.HexToHash("0xae2d88e4826060834832c750f3dd889ffd24e6312ff9a30ab01e3ad1368752ec"): true, - common.HexToHash("0x4f52a9694343703a3c33db08c1db71886e4482dd08164d533b4653c0ec8430d1"): true, - common.HexToHash("0x3c1b1bf73fef739ddcde0bb12b24d27b2705cc876bd0df2a354b512244e283db"): true, - common.HexToHash("0x99a76f45dac4664cf2e9cbbdfce921ab2dc315d6f69bf1eb13e414e4e093332e"): true, - common.HexToHash("0xc350d3be72d894fe7de7ceff01d5992dad0e26e87ce3a6dd0fd80affbae0d6ed"): true, - common.HexToHash("0xb015aefae93b86ef5345e9b41ad82cf0a53e31764d85c726b005f676fd5c0178"): true, - common.HexToHash("0xbf7e7aa5ff5ff3027c74f1af02152417aeb253f8974d2119f8b2dc8225364d51"): true, - common.HexToHash("0xec2b79e376d9a4f76f87a6dcf68a0f28af4806387bbd041432fe0b2e92b211fe"): true, - common.HexToHash("0x6ef801d918f91097278a27ee680b14483620ae7013980acea804c6091c995c1b"): true, - common.HexToHash("0x55985d6024f0e06a6eb749beea8d434ae258c47f96cd1d46cfca669144ca5717"): true, - common.HexToHash("0x7e4d3e7ca94be8fda51892e8f2f86b349b36fff0a0de09d39353801218cdc439"): true, - common.HexToHash("0x0aa92f3b1969d0708a3ba0e65aac8ca1c31d5e07f9ea37ed8f5df5ba64c15d98"): true, - common.HexToHash("0xa4d19e67a8906327146e71a4b0af44fdf30340ce248256cdb2e9c05a578c68a1"): true, - common.HexToHash("0xa900054fa8425ab34074198645158dee673ffcdc4fde4704c906113b9b9a3169"): true, - common.HexToHash("0x60b2f4e11b942c57751f0f229b88e1389df21717d5e7c410059dcee1433c01a2"): true, - common.HexToHash("0x2fb85412b234c3cbe0c350fd1d3abc519cbc618b6154d8d76934c8a2d1b16190"): true, - common.HexToHash("0x3a7b534e7f66c9256b8dc5aaea77e89e3f87f50eef7fb2bb90fb5a4a5cf420fc"): true, - common.HexToHash("0x940e75a4ef2a4fdfb9ef6a731951644b8a522c72453ba1755dd62b535f87e2c9"): true, - common.HexToHash("0xf207667b5523e4955f65b5df10d3c3a20c019030a0903f89e1f2540a08ea3833"): true, - common.HexToHash("0x43426eed13f47fcfe7338db83b334762c86c2bed52e11454da7fe61ea463e127"): true, - common.HexToHash("0x70a96a9bf9bb616fb279d9def5966c2cb92df2feb78f5eba80fa2b01b8ebc7f6"): true, - common.HexToHash("0x00066a56add0748584b142faae548cf49c0de8b1713aa7282559a1e08cc2271f"): true, - common.HexToHash("0x33febc4f0193ce915795b77b25aa4e58cd8c94f9f471a99b2c00668402afb9e9"): true, - common.HexToHash("0xad94b7f54a3dbf9588da6ae3067911e71ae336dc7d0bfd72846fa4bf74bafeb3"): true, - common.HexToHash("0x325d2d4435dc369aff299257e8d19091b6ffc6caee446b5e50711c4b8f0bca52"): true, - common.HexToHash("0x02f255a3072fef83d167730393452d711e9a4cd9f10d03723ea56428c071269e"): true, - common.HexToHash("0x8e5d30884ee16e1bcfdb98844c3904b410cbda10e5d141245c08b5eba577b817"): true, - common.HexToHash("0x8e375f0700ac14d972810333bd7492e45f2d464fd5a4124dce0a415e9b2057af"): true, - common.HexToHash("0x1eae3f1116e499a3e382fc682c8ffcd5c902b2796121c29bd47d70a4af5c7d60"): true, - common.HexToHash("0xb942cb2e1db128444eb99a1d00aece957d48c774320404e04701fe3316f118f0"): true, - common.HexToHash("0x87158b3f8d1a009a5d1d02b7db0e464db7de408e913b4ec0c6ff6611f1b66fe2"): true, - common.HexToHash("0xcb3a9a4ad5dad0b4962a0a3e3c95054bcb57d6c156f5e8419e86061e02c5105d"): true, - common.HexToHash("0x4854cdc8945cf9ba4895c5e6d19810524ccbeaa51983535d80d9c9a5c772300a"): true, - common.HexToHash("0xad3b28e745b8c8482768c1fb250091907b0fe4536ad14333d052d154043de0a3"): true, - common.HexToHash("0x4ae7bdfe8908c3712449a7ab406706a171ab0d380c54d6b00e03ffcd68128b37"): true, - common.HexToHash("0x2867d0587a45a4720a00f07795228c5e7d6bbf5097676a91685f5e7c7d0c99cf"): true, - common.HexToHash("0xe817e6f4702b9bcc554b0556763d6e8103713bab594c3b1a9546a70e4fdfd49c"): true, - common.HexToHash("0x6d5f8073549fd7a50997861c84c0b3a49ff425639484ab41178f18ecb665f1be"): true, - common.HexToHash("0x73e4acbc201eb9226175b6d78f40dc8f4abd29f1018733468c56cbc8549c4eb8"): true, - common.HexToHash("0x65c41f15fb5161d4f7badf2e6f6e56cd8824812abe17d59107da7e5c1bada25d"): true, - common.HexToHash("0x6812aff5fa4d2830d60cc104cad1e5657e988ea40587f161391d51dd316dd21d"): true, - common.HexToHash("0xe38f0cedaf4a0e13bbd7c9a0a8d13763ca2a4c0ce31beaf4722ca7f1f9721e91"): true, - common.HexToHash("0x99647b84b60f2abd81760bf27b67409dba97b4d7411caeb0c05e73ede83f6b0b"): true, - common.HexToHash("0xae4f6ca822dac045edb6a67826f4d23e301d8e9d6021ffe586caed7961edabf1"): true, - common.HexToHash("0x2986413ff9caefcc5f984a8953640e6d795ac9206dad1989539fc05cddf6e5b4"): true, - common.HexToHash("0xe289b7de95591f2bb919dcc696e6d5febd4e3a62675c2d1de49fcd0ca94cccee"): true, - common.HexToHash("0xae4af8979e4787cf17d942bab081fd3d48b7c5304eaf62d39abfa69751426993"): true, - common.HexToHash("0x06a908549560d82d8f37bf26bb6fdadf10c8012bfc74acbc080c8af130c7c617"): true, - common.HexToHash("0xa05c473afc24a64602f9a3883f05bf42037f3a14e3d91e960d66508a1b535306"): true, - common.HexToHash("0x17ae21b04b5ed377fdcddd05cc16b1f392e7cd43e0edc4f929ea06d1884f3689"): true, - common.HexToHash("0xf0e22247f67885e99cfc1d4c34b4608a8c272999fb07703bd6151a9646b2b950"): true, - common.HexToHash("0x8d87a8b4dde83b47e77b09602ebde4a29a2082195169e84845ca7c3894ba4518"): true, - common.HexToHash("0x23aaa1f4f2f5c73d5f0a8696f65a0f9aba95073dd38acd1414997b59fb3ae2f4"): true, - common.HexToHash("0x5035ef27db9c2751d0f25da879e760da33ae10610dcd0ddbe9b2ae97fc8afdb7"): true, - common.HexToHash("0x7285c470368d41b8764737fb383a7e0ebc5cf6477d8eaf159e0fb4984dd39b3b"): true, - common.HexToHash("0x76d7a771e4b1680ce00cecc910d0525f5d78f595c141cf0df55776afef20a406"): true, - common.HexToHash("0xdf8441acbcb3ac7d06981bf2afd0e5e5b62e10ec922d7a7729eaaeadb775e500"): true, - common.HexToHash("0x6bfdb660725de47b2e1a35ae1260850c5e2c3d814a65c730835c71f45ba1a058"): true, - common.HexToHash("0xeaaea8e6a9a0b630cfa67d55174584a3461d32266e6c318ad5e3d68c37f9ba7b"): true, - common.HexToHash("0xa2d33d91e8f1afc43be5dd6dc6ff8bd8cfd505d0f80d90cd7b92fd4b77ece09d"): true, - common.HexToHash("0xea79bc00a21f1d0dfd06abcdb5347dfe1f8c6356550d440e94cbbce6a3882e35"): true, - common.HexToHash("0xde8c610008507205f84c68e957e604d7afbdbc0c79382251f07cff43ffea5f6e"): true, - common.HexToHash("0x8a7134953d2273b5bb894ec962aaaa965a73429e671e88df2d6695cf9a040e62"): true, - common.HexToHash("0x79844a896438e88b02da6700d2be81081feee7a3fdee06ce99a3ea7d10c6860e"): true, - common.HexToHash("0xe3d2a128464cb4a079f2ae789279209bfdf5ee1b4e6747e7b88d51b5a7a25ef4"): true, - common.HexToHash("0xfd3b6251b912d20ef333a086ffda2cd4fecb985a79360ca5835d1c61be12f0c5"): true, - common.HexToHash("0x52d949d8fd583d6c768549f674457ced00e6044f772eb6e187272f8a016255dd"): true, - common.HexToHash("0x0fd4b9e0f8e1da7465b4714e3e09cfed7ce7a0d2e44496e8c2f4a12b5e0ecf5f"): true, - common.HexToHash("0xc9288251a045457a75643c2f42202ddc83e078ebb8047f37effcb6e9f438cf61"): true, - common.HexToHash("0xa8ac0dfdf2b690c37bd7d1282023071bf0d9e49e1dd0867a65bf6c3b792f9c3f"): true, - common.HexToHash("0x1b7986a2aa3f3b2e76b8b0c939645e6b35667330c292c851adeed86109766571"): true, - common.HexToHash("0xcfbbe0afcaefd29eef78900cd4aa8fbd0806971c20c6ced110250409f6e15463"): true, - common.HexToHash("0xdd604794ab00f88feed2a19a8c5198c12f49bed8764e94d456d88b8a9831184b"): true, - common.HexToHash("0xec3989d7f4e9eb54ede4f252b0b86306bcd3ca5fd91424f410921e2125a30640"): true, - common.HexToHash("0xb6643d7411537008faccf010451d01a6745a574a88d9cc76f0e4a34087baac94"): true, - common.HexToHash("0xd99231e3127a18728b82f2fc5d075801eee10cbe3a3b846e0f2597a8e5272e53"): true, - common.HexToHash("0xe22e30098603d77d087ad9216121725e9907c17430b14da84961335ca5d26907"): true, - common.HexToHash("0x3ca237f49db983d7d391e08a84db52c51d90d118f0db5f8fc4aa3bbe091e830d"): true, - common.HexToHash("0xb4a58454b29ca42b1e5b882e1bc476c435720266bbef88a4786396514efbee36"): true, - common.HexToHash("0x7cc40aee57d5ddc910c328d9186ac9fc5ac38c06a54247dee5b1aa7f2ea94a99"): true, - common.HexToHash("0xb6d5d581166040d86f2397c8db546148f2b72bba050b7d2b1dcc93588dd4afa2"): true, - common.HexToHash("0x7b4fad86882535986526d48cec2ffe1fffa06668b0d9c6fa08955b9d26c4547d"): true, - common.HexToHash("0x3048699a4b46d40633e9521e06896876b6befb388366e56a982ad9de0f365505"): true, - common.HexToHash("0xd34b22e226071e20cc5a74381b9a8919bed728be200149a71cda4781c08df2f2"): true, - common.HexToHash("0xc5f7cb591da8792a5275e9f6f75e4e031d1fdec422bf117b62771618ac947026"): true, - common.HexToHash("0x83bc03e9c17b33c175cbcffb74aedcc601cbc71bdf546fbe3033b051e6b57207"): true, - common.HexToHash("0x01ab06963d82f9b563560726017c584d6febb7d2583655deb52c9548b03e8e39"): true, - common.HexToHash("0x7309416b59dda0272e8e710ce276ae462555fcb207bbe4a0a87c1cde1296c9f6"): true, - common.HexToHash("0xb10da8a8ac94184fa9c44817347ed29f452f68287bc90b9493eb85e2266d317b"): true, - common.HexToHash("0xd21866b44d990ba06e121cc781b98e4524f8548b07d91ee41a10fcce274358c0"): true, - common.HexToHash("0xceb490a77232e3d99aa666e716d619748fcbffb534b5ae0f9bcedea6331b66bf"): true, - common.HexToHash("0x51214f2f161bdbd40828b8e9db9108ca949976497ed181acf690ae7f858fcfff"): true, - common.HexToHash("0xc6bfb5cbf49d9be05bd5b9d86b3ebcd8ce657466a5e5b36bf7f6ba13f15980d7"): true, - common.HexToHash("0x4b8d271eb1eb20761052d994edb5fb4f4b2daa6758b7d42fa4a7361f132d7a1f"): true, - common.HexToHash("0x5281db7cc752643813a61571dd1cc2d6adac48918c6f951732519d6b4913a64c"): true, - common.HexToHash("0xb46890a23b10962f166129ff7d4627615b4ced51300e66b014234fb7168aaa5e"): true, - common.HexToHash("0x0c0a5096a4472246ebec3af6be3377d001c1616d6653bf17d12680bdfb00ea46"): true, - common.HexToHash("0xe3e9625b10dc1ee69804270ca7967e17b4e396b657068a4480de542c44584b22"): true, - common.HexToHash("0xf39457330c806a6270c4dbe7f5d9c8c259c1ae89d456988c0731f5b9b40a2b93"): true, - common.HexToHash("0x197085b35bac28995f9fd804c1ea879dc7841513874ae40dd1630fb42ed9a1eb"): true, - common.HexToHash("0xc3b074f29cbea86eb1489f378b5381c6223ae17513e41ace391a5da9957c5593"): true, - common.HexToHash("0xa1cc8722837e99f48ac6eac37dba202d90421999e0b6eda93dd944b38c8b092e"): true, - common.HexToHash("0x5eb58f48090aae02d3b00fbe8e1c01bfdec912ac60c649df05ca23206f30bd31"): true, - common.HexToHash("0x39d1a2834da50b1cbac9ed6274f0c0cabaa195887ab8ce98353ee7df7014dcd4"): true, - common.HexToHash("0xfca7461be8e9f731fdbb1a4149a30bfef3bd7fa614295a763114274903c6968c"): true, - common.HexToHash("0xd71711a3fe8eb81bdd0f92593d97a2611f1f3be9624693631e1192cc82bb70bc"): true, - common.HexToHash("0x4a60a6874bab322ebcfce7ea563efe46916a4674ef0146d7004f5b5092d8f316"): true, - common.HexToHash("0xdb6cc45d3f1830e1e4373a332dce14fab5d9c72c7680b65558de5d9addbe3c91"): true, - common.HexToHash("0x4c27b6e0c26d832960fea4408ddc20cc4959f36188f3b2a64beae1cfe1b6e9e9"): true, - common.HexToHash("0x26370aae71d04280287950052f06cac81b510a2ddcacccf8d64d0c3885c79eee"): true, - common.HexToHash("0xd0dec9436141d1509f1ca259979dfd2d508bce992be34a954d2770167d8dac22"): true, - common.HexToHash("0xb148720560e11fcea6f5e39b0d0056be1ef97d14aa9310a028defaebf4b75a38"): true, - common.HexToHash("0x18a301265c7ea7a6a0070ddf34b9f4aa5dd96bd612c1869e3428a62980cba78f"): true, - common.HexToHash("0xe4d832b8761cca9e2120446c02592f9da702c959067c9a33a545016e504c4dc1"): true, - common.HexToHash("0xdc825be02cd90b5620013b4b4c40c060a4419ac11f12af65df0c49b7d42dc870"): true, - common.HexToHash("0x5b4caee7e0a0273a236d39bc4197d180027cc0b27456485c7bfb3b6253502653"): true, - common.HexToHash("0xf45e07761023d26685dfb44deb901aa17ec3f4f3284fdbda8fff08352f065641"): true, - common.HexToHash("0xd3465fea1a2a12bd205daede15acdde1511b4d46d4226f6180c315d5001b2d77"): true, - common.HexToHash("0xb03820b29201222db9d5b8384009ba5ad0aaf090c5305d221c9743d5cafa344b"): true, - common.HexToHash("0x1f6ac502c56beff19e67d101dc38f355e9729a758ba5921967b81191c62a8ccc"): true, - common.HexToHash("0xc949d159151940213e31d2547797e6db9bb10c4bda51668034702c7f68c2a749"): true, - common.HexToHash("0x2bd392f9c731f1c978fdb9c00f64c227d79493a846ddf504567d533d9b1f2417"): true, - common.HexToHash("0xe8a642a8449f87ddadada2214cbff05e0adc7a19056f69c937d14ef7ac11bab3"): true, - common.HexToHash("0x7ab6184c8e3524a00c62ba13eeeb4e5b20cc452aebf6c33800479948acf66802"): true, - common.HexToHash("0x984f842e2ec7ae6e7a7165d6079939f99f559716d5c4ab8c26fe1f134dd1e12e"): true, - common.HexToHash("0x740045d29237f388494536e1eb12f6bd79a6172a36430968eca2b0b5ba8d2752"): true, - common.HexToHash("0x85ae41d2329aa3574bbaee12363a263bdfe4b97d180406ab9ee5ad90ec0d2748"): true, - common.HexToHash("0x63fafd10371366a39d623af4eaf354a180e75fc9692e4c763c5b36a5b45263e6"): true, - common.HexToHash("0x3c46192b6833a2505e86c02bf78a86a7b8f14e82b9be93ebde5bc3c370ae7cf5"): true, - common.HexToHash("0xcca76d2713ccbac834f87907af32788c4125e5718b413ec6d20068322a4c62af"): true, - common.HexToHash("0x004278ac29f59c6655253bd54a901b47557759dcf3f7b3d45bf971cefc4dc1f0"): true, - common.HexToHash("0xb2f38524829d17be6f98ac720bab7398e83a76a7151a21e34e41883cd03488ab"): true, - common.HexToHash("0x8ee54ac209c50cd2f8981d5b7b5a475d0a936a45c625b2f6cbc18aab5892577f"): true, - common.HexToHash("0x183a227c6bb7c5a84591fbebb9627f37f7d4faa9124257b88e62b0066fa3b012"): true, - common.HexToHash("0xd8cde2d0302cf932a567b70788b2b961a054b164aa923795d0317121f2df0e8c"): true, - common.HexToHash("0xe8eed22b4d0d7ec4fee31a5a9098c5a43a2754eb9fc21c0184af09d3c29a67c9"): true, - common.HexToHash("0x635e4fef60717b0e684c5fcee9ec6c8686ed50c0dc92303bed8223162de6a52a"): true, - common.HexToHash("0x156f58dfec76619d33c0116ca158423987a05450dc7da93152a6f3fe298f9fa2"): true, - common.HexToHash("0x36f82ea67d06e795c86cd5acef8d727647f21db9b2e5691269f3bca9b51be5d9"): true, - common.HexToHash("0xd396f0c761d042761bd68e745400aa95e86eeca4f7337b5bd1395ab04b2a39b8"): true, - common.HexToHash("0x52382c87c99240089462360407d49f58a8efcddfb307d86e8dc63a2fa9b21160"): true, - common.HexToHash("0x420d40cfe72125dfb2195363bce76f075c0edac4b5e28fb2da3307f7783db366"): true, - common.HexToHash("0x534d654be26e158ce0a8c0ce7cb262978fc461573653f7d39894df5ed5dafb65"): true, - common.HexToHash("0x2816773cd55ed3695d98b6edcbabf476d9949caf41a05fbf5314b3555c1768ff"): true, - common.HexToHash("0x7c5b08999e80dd415f859e672e4fc9c5b6c67debfc19d2ba72f4dc19ccdd30e2"): true, - common.HexToHash("0x6ab037313ed193ed7cf648b12d76dcbec790116f8f6e7d64040b7721a398e731"): true, - common.HexToHash("0x7b96099ad25a095b55b245d4365ef6e34213f07b47298848f7a8563ff74cb6c3"): true, - common.HexToHash("0x38856dadec9afd427f8310b26faa8e895f2009b00f1847e82a06ea5fe5f532fc"): true, - common.HexToHash("0x67daa79caaee33562a4d3f26f505b4d03e7125247e8bd3ff9b3e00d6b806ed79"): true, - common.HexToHash("0xa78b852fae15f8d7c18e35127d2da25b037805a474685da39a2ce5d77e2eddff"): true, - common.HexToHash("0xf99a8728eb6ecfc554a07d17ab3679be292a51d2e3c4f0ef4677738f4c333030"): true, - common.HexToHash("0x2d89a0353fad8a4cd233c0a7abe669049a302457a37d1f833e23ed0ffff491ab"): true, - common.HexToHash("0xbe1f6103cec29bc8178bab0b001b67171c6786e9008c50d24e28ab6a86f8eb24"): true, - common.HexToHash("0x30cb11760fa90f7e6aa1a9c218eb90fb58d71de22d695fa65e609c24ab085922"): true, - common.HexToHash("0xd90977c569dbe8c770347d350bb884271d7226c6086785823ffa72fe4fb64016"): true, - common.HexToHash("0x95cf9e3155ecfec023e05cd695a31555ffc1dba0eb904141729fbbd1806d9e39"): true, - common.HexToHash("0x80fd681d3a9f74997b483fe267f13496ca7af9b97c976ed78b5155ce8345047e"): true, - common.HexToHash("0xd912ed604e843437b7aa2d8718e7e5ec24a05f29935448704acc8daffdc1e217"): true, - common.HexToHash("0x04211c4f674f0ea66e854b2c467b95123f3b9a42d0174fc3ae423fea619af482"): true, - common.HexToHash("0xd4d4620fbe200436afe7c6b8df339d24c06514ffca0d0c546e5c7a4ac60e4575"): true, - common.HexToHash("0x70ed9b2a0f0a98c1bd2b6544d1dba2728f09d8bcddd89234721147cd93e53a4b"): true, - common.HexToHash("0x60fbdf38a33b2730f2552d8c86802476315cd74ed514c256a29f7dae225be0f1"): true, - common.HexToHash("0xdedbe9df269c077217cde73299d137f8c9e15896431ba5a0e18e3b85e7d2dc52"): true, - common.HexToHash("0xf691f2789bd0f61b31399fe6bd700484f03b031de15af2f0b94d9f3edee867b5"): true, - common.HexToHash("0xe1ffbefd7fd80a119188ded18ea71fc99cee64827a875b88a618a4e485768d41"): true, - common.HexToHash("0x06a1e3862996e54bbe21d23a353531fa9e7af070abafde0b6f01340de07763e1"): true, - common.HexToHash("0xae368296d825c2d1c5b4d61547a85cdb7c8941c21d57c9d4d786bff5897db1bd"): true, - common.HexToHash("0x3fdedc2bfda5f7ae29dc491dfab433754c5ee1453682ab741cb780d0a3026889"): true, - common.HexToHash("0xe1a9bb3cbde8c8aec0cdb5be8da5ae75a61901215fcead8504fdade73fbf2de1"): true, - common.HexToHash("0xa778f231768e9af735caa9f9d80ad2d066f285f36f2cfae8fce78eb7f980f96a"): true, - common.HexToHash("0xf3f563cc34ffe5361be490a7872122f7265ad07219613dbb236af2bcf43ddeb8"): true, - common.HexToHash("0x91404790d9835d69632ad4cf610eb578e8d927488e569fb03865c17e3038819d"): true, - common.HexToHash("0xebc4deb30ebfa1e95212d741e894d218ed00a03052da89d432dc68a9f57ea7ba"): true, - common.HexToHash("0xa853c053aaebc4f41acce9bf05ceeff787b6876b11f5d50f23b517d2fc2b16a5"): true, - common.HexToHash("0x1314db21e128b3dcb30aff38c29217a8c42e3cae6032946f7d8878c8c1d991b9"): true, - common.HexToHash("0x616093ccda3eeb337556622ff565318ba19a5801cabada1d60c55c4bbbf51225"): true, - common.HexToHash("0x4b64fc44ea4ca2714b791ba8b9a709454fa089fe73baab7b40eee651dc7c0edb"): true, - common.HexToHash("0x1082efc3b5fb31240a379f106af634f130484ef7aa5cecdbf3eabdad11b576f4"): true, - common.HexToHash("0x9172a4d1536adbbd50f37286eb61d68ecf43287b50562c5ccc9f117d7bedf0c6"): true, - common.HexToHash("0xd03178888aae93dbe922f7c372b56598f70022fa3c9c1d87d6d2715c100e9fbb"): true, - common.HexToHash("0x8112390107a6bd427592b33101787c07989ea707de06d833e4fcf8b2ebaf89d3"): true, - common.HexToHash("0xd8fb6e5bd0071e32c2071c84a0da9129fa1e85a8e612ea3069dfba0c77376d5b"): true, - common.HexToHash("0x0ef6a0a00faa677ab66f5825dadef154061f06c21a1211afb910776b42b201e4"): true, - common.HexToHash("0xe2b87a76b680943ebbddcd1db90af7db05aaa7a840d59b820a56891f5c099c8e"): true, - common.HexToHash("0xafafef049ee646b902fba8c9d1a4dcb448c82a6e848be8919e956ba3cd2371eb"): true, - common.HexToHash("0xee1e0851741f06563930adbdbc5a0bfa5f746ad3423be7a117dc02b8f8cb29d6"): true, - common.HexToHash("0xc7f963fad1e8f37d08a7e6ca03516528907a2fa1c48b42216b8b146346baae73"): true, - common.HexToHash("0x0f3d14d83cf58b9a926558afc9cb6bee7ffc036616ce3b0383edcaee23c45b98"): true, - common.HexToHash("0x521752db9a1a540a727b9e05a6028cdda24b737c44ac8201d24613432b993d77"): true, - common.HexToHash("0x3d764f5ef0e5fdc7e838ab36578dc24d1684b31a38dea6e1403dee8cd0febb90"): true, - common.HexToHash("0xbf24f7e954938d69f33065758085d7f28eb2d13034cfdbcc3861b67204b471dc"): true, - common.HexToHash("0xe51ee3e22323daaa1c409674a65cd1702b15e694bae8bec1802252e4585da486"): true, - common.HexToHash("0x334eda947c487676287c1df5bdd35af97f85424e16c7182ff09b3764042f1e1c"): true, - common.HexToHash("0x7b4e90d3802b56cdaf91682a27454094667c0c902fab2f3c4e478cd5a103b25d"): true, - common.HexToHash("0xd43e59c5db0dd450722faf91824ab02cc13c87ce2dbc981bb33327a4b4aac3c8"): true, - common.HexToHash("0x6febdfb6a8414625174b52801003f56a3f3ebb1c55d0cae675e8a7a8d784dd30"): true, - common.HexToHash("0x0a5a1e12b5d4facc412b293cd8909098115ff5e6e191cc6d812bf45928b45ff7"): true, - common.HexToHash("0xb356da34c596c2bc9670c527a4e6662f6ab4a697bafafd4f76a5785fe57daf78"): true, - common.HexToHash("0x404afb25c6e30efbcd69b450f819cad7db30ca2c119778a7267be0c0e752b081"): true, - common.HexToHash("0xa635c1afbc6607cddb7f51592d9e42928224b6d439879239e6566fe3c010f97e"): true, - common.HexToHash("0x87d686e3e87510092e2438fde005e21c696a4c40596281c52da45c303cc8d39b"): true, - common.HexToHash("0xea949f0932d41ca8f56a86816471e95658abec6f9c45ab8949f93fd9079f43f6"): true, - common.HexToHash("0xe788f368aa0fd387cfac057804395cbed9f50a733460d721971b0fc95c9aa942"): true, - common.HexToHash("0x6ecef0303677d4766df7b8f5621e298f4c4d7d7f4a89f93349a98247fc41af0e"): true, - common.HexToHash("0xc4b99f4c6112a41ebb4ceedf9983a69d0299a5be2d83706ac21ae037109921d0"): true, - common.HexToHash("0x367e8682e540ae30c95360bc61e3fc0b82cbc9015ad7f4601ad7834421079238"): true, - common.HexToHash("0xb0bf43e00e982dee687a0d14c72fc842d3c21bd67d82d4bbf70a5045a4b25d46"): true, - common.HexToHash("0x06574ccaf1a9991b46db032be52191bc361c20c6047e9819b7139de22cd9df42"): true, - common.HexToHash("0x13b4d178cf59645bde1a8053dab37059d235ee25f67dcb4e6bff93c183f4d551"): true, - common.HexToHash("0xfa8e2134859247ee387bcfd0e11256992cf0fca901e9499d53ab9725fe169671"): true, - common.HexToHash("0xad133e9527d547f283619c844437bda3b4df35422b601c3291e82d12c871606a"): true, - common.HexToHash("0x434cd3ca552669d092246562e8e0bd13636e10ddee7f6a53370f6fa869896e18"): true, - common.HexToHash("0x356042daa4577072ce3af40fbb4e32a68c91a363cef60dafa7a5f829437c7240"): true, - common.HexToHash("0xad90cf4431179a7d1a5a90ee6717d572d294554df095c013e849c25661655e0d"): true, - common.HexToHash("0xade98a5e17c94cefeba7f3315404bf5cc51cd9c255c0ecfe2721c24d798b5a9f"): true, - common.HexToHash("0x7d6ee9a733e1e49d8a2a4c325eee3d41eaf4af519c67afe064f0fe8285a0f1bb"): true, - common.HexToHash("0xb4709065f9ecfd3d442b62ed4636f9459da92b9464e2246a7aa58dab0d1e880e"): true, - common.HexToHash("0x3844700a98151d0ef575a3b4b0a8112a5c7554ccbfa0c2eaa5c14eb6060154da"): true, - common.HexToHash("0xf15b5a3b84b3211cb98767fa3c2a1be663515319d0dc115b242e3084782bb4ca"): true, - common.HexToHash("0x6154b9a1aa5b9c28a1cffa65b262b011f8fef8e5072c66a021d68200505aa1f1"): true, - common.HexToHash("0x07abac3dcf64353f3d8a22a1d29c3c25e64994dcd0c94be2c3f616a91dca5d8a"): true, - common.HexToHash("0x91ff9bee4b823a214521a7db71e9ca2f50817ae5d8f9c54ce68f258e2b019b17"): true, - common.HexToHash("0x73b3605bd6d37cc3f17491264d8582bdc7d605e969beca42db90f7a733da0c30"): true, - common.HexToHash("0x36ca8d6e4a193997f720a09c489a2d4c6fc3769459c167c8d7c4c9755df3ccca"): true, - common.HexToHash("0x11b897e9555bd852ba614e2aaeaea015774b5412fc68c134cd0058703d64f3f6"): true, - common.HexToHash("0xa504dacf9824579c385f6f5a6107f4e8d04297efcd4cb961b233f49371d2397a"): true, - common.HexToHash("0xcd112de24009ecdf2c30f2c016779cc2742d65f1f807c20dd07f50322a6d5cad"): true, - common.HexToHash("0x1ad653fa2919bf0ab791c37aef18344e6874b92ba730c434c211c2ef769e1757"): true, - common.HexToHash("0x4aa825beac6e2a4a65e4d401cf4ed0b23069e13a4ef3717231d1faf35c24614e"): true, - common.HexToHash("0xc0a1af0fecf88d6a84c782a07f6d3676a99d81b57e2a04752a66cd5614e7b8a2"): true, - common.HexToHash("0x7438ef44314bc9b94abe782ec0ca0f200955e92ac202f20a965f60e3f9a0515b"): true, - common.HexToHash("0x738bbdbfe83d531b8e97a005304e5664fa0ed32f7e9b687b9ef4883df9378667"): true, - common.HexToHash("0x60e96e154a3a9f1daa6a396e00b06f5d1d612867685c63ebd7732416e25ee009"): true, - common.HexToHash("0x73b03dfcb5b37bf01bdacf3063b298b1c5853bdef350b6a010592a79bc0de7cb"): true, - common.HexToHash("0xe7dce39653880fd7a0be6defbe589559f4e72841a55075ff69d53f53aef725f0"): true, - common.HexToHash("0x6c51eca4b9b6e81e431d97743aeb87852deace5aa8761688d90dd92529a8ca14"): true, - common.HexToHash("0x1decf00406ef541daa2a1639ecc9d802926c2028eacdabe438c3f7a0e56c3a1d"): true, - common.HexToHash("0x338f60e995c087e3b460f43ff275ebbd9c494814f9026f579220e123103ea958"): true, - common.HexToHash("0xe742450816882fb72197c512b374b19e70ba788804318aa85fef54e9ba6a9822"): true, - common.HexToHash("0xd55a94f43a62677ea4a60b98566fd4e14284842f314c9ab50286920af979cd5e"): true, - common.HexToHash("0x69e568bb2585cbf3f00039f22caabe23fa5c75513a4fd9ef00666bfe0b47ed85"): true, - common.HexToHash("0x885ea74be363b8a95143dfa9ae67591e607cf61c4374e31f770f6236c1e3c193"): true, - common.HexToHash("0x2495c544fb3e1b0e0e9febb09e537a4905c15df79823d06cae767ac257f06368"): true, - common.HexToHash("0xa7b167608812f7771fc31cabd375354be006e2f3d3672700a517117681640944"): true, - common.HexToHash("0x2464116b9a261cbbd81e7125d5acc9ebd23577d0d19b1324c69ee2520471fe2f"): true, - common.HexToHash("0x01cf6a5529aae825706b1aa5d73d87d596bda4c48bef8f68fcfa9b1a0f1e7fdb"): true, - common.HexToHash("0xbf63d59ab4e4767bc8d7829f2607fb9f73d62587e33c2b915a11cfa3f1479d64"): true, - common.HexToHash("0xeb97ca74bca21c34efc6b77ee148b71d29ea79f7012998297f044c0942fe8243"): true, - common.HexToHash("0xe84115c380d74c5455e88cc731e7bc6f4239428f48b02c70a3cffa33135dd89a"): true, - common.HexToHash("0x3b0285d952adbfaabd81f5d855908d9bdf5ff57f2e7a67039f90190eb1bd492c"): true, - common.HexToHash("0xa90068ebdd5e2f1d2c19717037d2c5167317527d6c48ec7530763db2ab42b9ca"): true, - common.HexToHash("0xb8db51f1be1371d1e3bd32692f894e90d5a165ddebba3284c13bb43aa0c0b954"): true, - common.HexToHash("0xecb96e5e72b259af36f7275685148d64c5061fe1d5f0f09e6cb1f6468d428724"): true, - common.HexToHash("0x53a8eb84defcf844dc3211250f116f77fe2b233be913397085bbfa2ce8e62739"): true, - common.HexToHash("0x063d995d54b3a5720eccc142a58c5d0db0622d5b21e57dfb850964f023bd6a67"): true, - common.HexToHash("0x647886ff94172eea94eb70d26bfbf7b21aaf13c725ff8cc83fa8f40835d9c96a"): true, - common.HexToHash("0x57633da59be76a6cd16848cef7e2b244a3b1bc57922b092222eeab9c74ca27e5"): true, - common.HexToHash("0x57ed9e6fb0aef76c4b5bcbefa58c62b2452440ab2116d75c88a99bed5b59b381"): true, - common.HexToHash("0x64f55339b628f7b47ce6f8e5bc15af2bd9319e746a58eb85afcb387ef98efd65"): true, - common.HexToHash("0x693d7f471466645ab0710cb07facd983295a8706d206b4d943b1624b7babb9cf"): true, - common.HexToHash("0x7955263ee21c1bacb33b4d841fcb90946b2fb493cbbf0930d312ea3019f63b7b"): true, - common.HexToHash("0x6331903f91cf8c55b4c560cd7609bb8b7b44ffe478d6f2e1eab53b8ca336ac04"): true, - common.HexToHash("0xa9930b0a0dde8ba1fb460092993f7d5e51755687417dbe345586685c105c5134"): true, - common.HexToHash("0x3a22b7e7f8a39af68992ab20ecb2939ee010d5a49791ff0c58055d705f58b9a5"): true, - common.HexToHash("0x92c1f355bd31247c001668347309eae74ac0560eb962256d040dc6fa61471b2f"): true, - common.HexToHash("0xc84a3cf3746539020a2a242ea009e38d4b6fb1be8dda903be7b041ebdb7f00b2"): true, - common.HexToHash("0x500b9aeb17ef60cd7c7ac74df42cb30df8678f999590310588d09fa3105ccd44"): true, - common.HexToHash("0x26a4a5cc9037a737a58b71e4cb3c1d71709bf874d6066ae2ea9b070bef6a7855"): true, - common.HexToHash("0xf03203a34a8ac1c793b5b7871343ea0a96465d2c5c8b93e93d6c9a30b88e27ba"): true, - common.HexToHash("0xeaf74731373cef9e27bd07c6097ce497972fbf0d35f351a4f1cbd6bbece635c5"): true, - common.HexToHash("0x588fd40c607728c035e87a488dce588fb9b205632aaf5ddd1f9d8bf2fd30412d"): true, - common.HexToHash("0x6f6ba9628dedb88635b1f0b7f3780e513caab000d1c055d38d67f76f03620b85"): true, - common.HexToHash("0xff88241567ffd87b2076982bce0fa51880f50a75255519d805c235d8fd500230"): true, - common.HexToHash("0xa681d9ea1548f393dc3d29248d652972a761afdd398ba8d40d74eee4769b7ae4"): true, - common.HexToHash("0xd617f36ef6325c84411a3ef23c459eff1907396913e17c3122f5c855c3a79d0b"): true, - common.HexToHash("0x0229d501ad73a5f0f2a03cd10b85cd2fda99ed26c5628092d45340a2dd7e5146"): true, - common.HexToHash("0xc5a322ab703f8d04b6697cf7ab963063847991283a94b9b2beb7ba6361ea78bb"): true, - common.HexToHash("0xf135818b84274d54fa06187ee96c13a750377895522e6e687843244744904006"): true, - common.HexToHash("0xe473de334ce31a33106544e8d5f5d583efa17c384842fd4d977e4aaa13253013"): true, - common.HexToHash("0xa1c1dabc617f1ba707dba95bc3b9b2fe6d28519d1af3c925ce511c0841f178cd"): true, - common.HexToHash("0x22fea511133992df7a5cb0d8fbc4ab9943d3daf2b760be0bc77f50d0d1df47c8"): true, - common.HexToHash("0x9d4d5370df8763f96c20ba7c0e08bfe8d5059cd6760b1e67b2cb5590ea09a046"): true, - common.HexToHash("0x868bca039757fd5243b6bf6c427eb09bb9345cc50c60029c7c0e1b127eabf23c"): true, - common.HexToHash("0x515ce889256e8b5308af31ca91e582717d9c4f4ba4db77cf171267cf5e08225b"): true, - common.HexToHash("0xc36daad332a36d7defe7deab511619e816e2ef7eadcefae70814256968f51968"): true, - common.HexToHash("0x96a81ed54046616ad1971a292ea683ea3e8c18d499b1bdeef29dbefa4f6e669b"): true, - common.HexToHash("0x4d473c441802e0e5a504f61c72ac6a4d4491e61b752722da7b29b3458c0ef16b"): true, - common.HexToHash("0x2149f8dcd4719fd889e7be14750615079bc25277a4ccc83240b4f2f1b5d1d1f0"): true, - common.HexToHash("0xdff68df5fb5539deaf28524157ff81601d3eaed7043fed7a82cccf71fb644803"): true, - common.HexToHash("0x684fd5d4b6d0547cd896ed4db360956e02ec20b77880fa47034868726a98b437"): true, - common.HexToHash("0x851e7fdeb955f721299cb58b48976201ad62473aecbc2fd030443ab6fbe9fed5"): true, - common.HexToHash("0x201342a5a89937af411aac38f1f5e85bbc4b200cb2854b0775d771c4e8271f0d"): true, - common.HexToHash("0x2779a192bc1cfd084db77d1315b50eb07e925a854d472becaf2db5c7617c121f"): true, - common.HexToHash("0x8f04d25a1d9b33563d302562c1b1f46dfed36977d05cdf02015b89bebf11b8fe"): true, - common.HexToHash("0xca98e1bc78147d8b2f77b588cfe04fda5a729ab124656e921c4456954feacaa4"): true, - common.HexToHash("0xb80e16812c8fcdc7d5c27551158c9a07353c511b2d60c4d782631a82f1ed5e5b"): true, - common.HexToHash("0x8189f2a962438ac74d5628fa894fcd92ded03871f393c45113fdab12cf93a091"): true, - common.HexToHash("0xfc6a90e1f36a334fcdd73d53fb55d15a0e2871e2d281771db6ce1aaa7482d362"): true, - common.HexToHash("0xd4d78027cf8fa965b66655c044dec819a3f14e119d44b0aa0e13fea45b59384d"): true, - common.HexToHash("0x8aaae34a8dd33f7f1fbfff13d8e97be5e615b1fe73b1867a3e29e171e71df783"): true, - common.HexToHash("0xc78b84ba6e8054a2be5478397d699ceba5d89bc9917f759daea733dce6a36e25"): true, - common.HexToHash("0x4a97d2664dcb7808bb55e5627c539fb0448d95541054cd88e13c0f202ad08002"): true, - common.HexToHash("0x8537afb74a49b47b3f5f87d68a77400f5175c3f5362c8cdbff05b1f77128d40f"): true, - common.HexToHash("0x5b6f4defbdc180e62da2e55e4fdc42c91492d63c2bb37b63ccaab327ed24d8f6"): true, - common.HexToHash("0xdc71d24db2886fba9176f9616b685e1ddcf44e62844bd1b8408709920d17c10c"): true, - common.HexToHash("0xe5d47b01245210356a4814f7f7a4d323455a55ccc5eee6a9332d8722b33ef35c"): true, - common.HexToHash("0x1877338b2b58189616a13e83f8138ee27b5ef7a9fdb7bd7f9950407fb965e6ee"): true, - common.HexToHash("0x4bb69c6450b97d3cc850c5c988bf904a0de251cf0da77ed8ec7bcb0cb0c562a9"): true, - common.HexToHash("0xfd8a73dcde65b9e01aaaa44cd53ab18c74d8eeef00b7639f4f4b82753608c64f"): true, - common.HexToHash("0x23efb1ecc6af11440306073dfdeae65da78a626b8d5069618e639d96bd70a2d9"): true, - common.HexToHash("0xe8cf25670ba0aa7cd7399b45b0817941cbcb4fee0fab8d5f326879c42f06375b"): true, - common.HexToHash("0xca09de17a03aa1d532f19eea7eb8262cccfecec472bca9531c4f7fd7225c5769"): true, - common.HexToHash("0x95b4ff37f95f83036d15c21475e408cba3fd07e1f4c25028079ec176009cce02"): true, - common.HexToHash("0xf281788e49c9c2817457605262fdb7796a9093ca3347f6828ff56c3d3ac0c165"): true, - common.HexToHash("0x41613458aa21444df5828d066d520b56137b64736fd610339e283d3b7345c160"): true, - common.HexToHash("0xce4278838ce6853eb5c627d0a95595fbd63935e5643c12f7c773a16fc9e28ea4"): true, - common.HexToHash("0x3dd0c9433b6922cf287a0081197a642dd9c8116c9e1192335774db76ea0735e2"): true, - common.HexToHash("0xf96e77ace2c382ec9e555e7ff3c164816371ff4b9c680ec66f6c52f80a554729"): true, - common.HexToHash("0x9c5a5ac7049975efb2fff5978a695eefdeccdc7a5281ef86c223a7fc64ee486b"): true, - common.HexToHash("0x464ab6aec82cf3bcb1d13adf58f4464c9a45a7a561dcb8a41ee9c928ab3a9d9e"): true, - common.HexToHash("0xe1a65fc28a4b0d59ed470f74d9da120cacf353b8c90ac209baf5267d17be5b97"): true, - common.HexToHash("0x784110c25a63d467e98687394f49ba5a50912d09668e24fc3b360abc70063cd7"): true, - common.HexToHash("0x8cb574c36ea374d5bfd8337421b0774f4a137339db256fed80a43d32ac68fb4a"): true, - common.HexToHash("0xbceef1c9c1132cbf3441fa50128cced33ae354d0a9ae12ad3cdf4fca1941c543"): true, - common.HexToHash("0xc4470ea49aa36398c61a425d6b8cbb3bcbe0404c697d6cb3f52b0b23443826ba"): true, - common.HexToHash("0xa4b176637e995ead16acdd42171bba029b8761f568b35e6bd681f28b8f9108c7"): true, - common.HexToHash("0x8ecab0f0e59bda31921c09e68372bc0ebc119d1e4b0d62b9b458736a804a2c73"): true, - common.HexToHash("0x7bd0c815dc4019e17c29bd1371ab4709ec881bddbad6e3856dd67bcfa4bf94db"): true, - common.HexToHash("0x3fda25b4d1a44f3b459d0b9cf11daa88349bd63fda5a59234ddce2a8781ada07"): true, - common.HexToHash("0x33dd087ba62ea279ad9e90c3622b3c2a0bd1bc545115b3c2bbd43260a5306365"): true, - common.HexToHash("0x2d37b1f90d68b5078a541ec9e4f480aba289dae0a4d31d8f2787e4f140bb747c"): true, - common.HexToHash("0x7200912af494513122cdcdc9b1389c4d6ad49a8727ebd5562b577d0f6d111659"): true, - common.HexToHash("0x52ca4d7f12006c10bde06e8dd18e77d06c39047acb6052158a1f0db4baf16139"): true, - common.HexToHash("0x04d1b521c98119e3d8d5c40021d004afdb54c96e94f826beb82ad0d780ea3f97"): true, - common.HexToHash("0xe1a473ca0e57b39ce5ada9e2a9454cbacecaad2df6d8568b97a2adaacc63818e"): true, - common.HexToHash("0x21c031bac75de4089bd161d775d94ca6e496c49395c110ae7d4ba422e0d4acc0"): true, - common.HexToHash("0x38423d29f39d2a018182acb056a21c904718a050015b37bd2d436c100446e57f"): true, - common.HexToHash("0xa0b1b5ab419be58ecb68372affb9b7e61cec5c535ac1557226ef7ee52f8a1b55"): true, - common.HexToHash("0x2e469b719996f13e963a1ac655776eec8f1e4e302746f928688c9dd8abfde4b8"): true, - common.HexToHash("0xc1f2a501d51adf63e51de567bcdc3afcb29c137ac6b3254d3816f572bab80658"): true, - common.HexToHash("0x038f8ec356b4453fe3fdc27e270734c06694ad17f49fbef4db809227fd410875"): true, - common.HexToHash("0x5cfba3e4c7c866a8b3071847ba3a45e43e32b3b67a6a798955aebe933ca8528f"): true, - common.HexToHash("0x1f6ed551606113241aae6212f86bdc37364aae62c611bb75b1f4c88ff12e73bc"): true, - common.HexToHash("0x2ecce0f4c50ac42a2d4e4b98427802612099be5b8df92e9d0613ab706cb70469"): true, - common.HexToHash("0x590e49a6aee8a43317c724611f795afd5617afccb71e92c767e63425ec732047"): true, - common.HexToHash("0x8b2890c175cfe3b4e8abfb10975c96bb62cd554ce7b83d57d9130d6520db2764"): true, - common.HexToHash("0x0ff9d107645f252738ebbe62ee2e5f070e4519cdd22a4ca0ecf3933dd7756339"): true, - common.HexToHash("0x0898fe2ce7df3fe1203bcde4a21415aeac4459558d1c40313a377caa35d55960"): true, - common.HexToHash("0xf3e29089aeea08eb14d2406338f418f89c0742c234440b4168f04932e3660197"): true, - common.HexToHash("0xf31476a5861ab4b6c6e66f7d0fbb5de5428aed42b55445bfa3414a9707308d56"): true, - common.HexToHash("0x069a6138aa26d9056b311d53fdbed6630c706910e1b0c365a9a2ea6ef8972c6d"): true, - common.HexToHash("0x80d6cfdc7defe9d89f202dba6e72aec5daffb774d53c3d772bdabef3d2d2bbb6"): true, - common.HexToHash("0x73df17e823aa288fe202a0a2d15f1c6c4746dbb14440c3c2c221307abc41d449"): true, - common.HexToHash("0x62ecb6dcbf488fe7e5c0820cc486a70d966ccdd1ada29bdd6ebd416b0a029dd5"): true, - common.HexToHash("0x06a61f88f1b82b13607351e8192a0d550138c72169628da90e8217b88f949037"): true, - common.HexToHash("0x2fab2328933b82ad580534b3216d2237a96b3ca2d5bfd073f88d9eb4633cdc02"): true, - common.HexToHash("0x1d7a1f995f8fd2b02bf031842207ccd4d00d0769bce6e158ab86b9ace5cde19f"): true, - common.HexToHash("0x95efd4b5308d7893368255ecac3cda2e86fa86e7ce11d78b1d97ce5593f7fd96"): true, - common.HexToHash("0xb41c220e468c9995a0f2f4618627ac3151384d6a384c00d20cb8e8c11f39231f"): true, - common.HexToHash("0xa13366c0e8d52b586f1e6261c70fb7d1900158533684f6a06c704eb473f960bc"): true, - common.HexToHash("0x975883e08431253a64ae34802039f402a61bccf0fe9fbcdcd753484487be8b80"): true, - common.HexToHash("0xf73a04615c40a123f701f9a19a964e6eeee0406529dede32ae5ad65d3426cfa0"): true, - common.HexToHash("0x476dcfac0275c10dd08b8203df8a3792d0454cd1941441088f2f711c23156da2"): true, - common.HexToHash("0x150ff062fd8aced9b70a0f65fd84e979b38aa5b20f3c60f9b60b7fc18604fdf5"): true, - common.HexToHash("0xced8ed23825e99fe4f9f1c6402c679f0bbdc86c3e3087bb72ae1b739eeed110e"): true, - common.HexToHash("0x38d87938634df9015907096b5fb30d60b569624060ba7fd5c946ad9f30cab610"): true, - common.HexToHash("0x922a3a18f67ac773dc588a7183944fecac92f32af63025ac117fc9162c0cfb38"): true, - common.HexToHash("0x02af1a9668b34acfef0d24c782594c9fed0957863f9b5c40566ea73c4e509506"): true, - common.HexToHash("0xa6687356eb3f3ed096a88ffd5089eef6266b4cdf59af57e823e62abb0705091c"): true, - common.HexToHash("0x88a58a1a3d841c5d9586e88a52c5abef6d718cfd36fc4dee656aff02f42b943a"): true, - common.HexToHash("0xd4cfb8011758281841f71f8679f12282083a18f83502b1049cd9a711aeb5c2ec"): true, - common.HexToHash("0x096930415147e4018559a89a11870726b5cdb460b4be7a306eaefab25723746b"): true, - common.HexToHash("0x5a9a633edb95bf5e20991d87291ccfd7c619010dddba3f2258423f7d2451dacc"): true, - common.HexToHash("0xbb3f4b51d9309b3de2f274e18c3eb84e1cd100334c6292d7d8a1223906c3d036"): true, - common.HexToHash("0x257bbd879be4c17c3a4875741678588f1e81db839fbc5b98a59cca4fdd682b33"): true, - common.HexToHash("0xe3767a03c1c022d492a3bfe9d8563fe2d04cf4b3d8335130b3c1a997c45feaab"): true, - common.HexToHash("0x946ca4cb5c7aa54482c583e7c7b37e9e1bfe0d781e0a75d454cfa7c92e3f256b"): true, - common.HexToHash("0x7e56ae184227e44f41bfdd8789439d423dc3a03a52c8b43bc6d150cb3655d991"): true, - common.HexToHash("0x30484cca843d49b2b024b89f7e5bfd8fed81eab131775c5bc78860ebab8117ad"): true, - common.HexToHash("0xae872ef23c92d9fb2d4d8495c317b4cad1949f43657dbe7d2dda559e3f046160"): true, - common.HexToHash("0x64869dd5ac94a88cb922725ed10bcf52ce5a0947e5d14ae8995390048adf095f"): true, - common.HexToHash("0x8c18f768c6aff2aa9b37cf6d6c792d6b9fce17ba9566075409c9d6a7a6ba0684"): true, - common.HexToHash("0xb863a1ae9a1551cb53227164da08afc1f6dc09403cb4e334e8647fc7fb2c5368"): true, - common.HexToHash("0xc6c7a2df6959138435b8dd5085c54df23b26c5329d7f19012be997e205cbdb54"): true, - common.HexToHash("0xbf39bcff87ecacbc0c36764c54d7ca513970bb13e33d1e4b215f676ce31cd066"): true, - common.HexToHash("0xfdc1c32e6db6ec5167c0ea804e458207a59994be847be61c1d3982d234db83f0"): true, - common.HexToHash("0x24eb581624bccb395e202e4391195e0fcf9b67e42d96a274d4e294af55deea33"): true, - common.HexToHash("0x3b2788bd86e3cec86cd43dbd569aee75940d03a1bcd24d4ddf52509060a9a4fc"): true, - common.HexToHash("0x9b65abba531d195eabaf9709488e62e1090fcecf5282f648d0ff8a0dc90a4611"): true, - common.HexToHash("0x787a73fb8eb4dfe461f33f27aa6aa4530fe786f2af6b0459866fe02588d2a6b7"): true, - common.HexToHash("0x5423a8f54812fe1ce82bcd6a0d25a5a5c02a1af26b45479f3700c7d5cc75523f"): true, - common.HexToHash("0x54dfc7e0ee88b92b694e6e68c26d8c78ed3ff7134c25bbf65b973d7dbe928352"): true, - common.HexToHash("0x91d7e5266bc9db3037cd7d06d583655fba3888a3cca402e19fee82a2512a5ffa"): true, - common.HexToHash("0x3dcd1655bfe8f0c5257ae9ee978f08ce5e5a1ee80c0e044cd6b0c130766e58cc"): true, - common.HexToHash("0xcdf08f748c9298c94425e27bbec916b306e1297f8821c2203146232ecf022d9c"): true, - common.HexToHash("0x913f512a50dbecdcb64543205aede62e2a58ad405bc597dacf33bfa44b541491"): true, - common.HexToHash("0x7e8410927ed83930d092d81aced6e9dd2e0abf43ae3ca1721382239080677b01"): true, - common.HexToHash("0x2d876b1b09687a71140c4d3958ece24259cd1be14fe5a3ff5b9081effdefd61a"): true, - common.HexToHash("0xeb2ad33a1c7d24536c1e10e73d7c6a189bd4a627e4f4d80b1f89dc6b96576352"): true, - common.HexToHash("0x50a75839f9c9ae53ade8964c82dcc50de4b2539f8d8e0425fd022edbe7ef3c72"): true, - common.HexToHash("0xaf8791a4423230f10c2768a4f66058db4fe8748d2347b91b3131968b36bce57d"): true, - common.HexToHash("0x499df08f7f62f6eb3c828f6dba8e841aed54922ecd4746f5d304bbd32106c55a"): true, - common.HexToHash("0xe471fe44440cf81e4af8f2dfb7346920028917a0699d9dec93607f5f46d8d64e"): true, - common.HexToHash("0x098186f2dc9270df8144c4edfa9c219af02aea0107f5376c8f1bd83fec208b24"): true, - common.HexToHash("0xacac62a1cbcf470dba180a465b25ed4aff22cdf2f52275a0fad6cf9bea6fbc46"): true, - common.HexToHash("0xaee3c3d7d1f14044f993b57699b2edd2eb362c5920c76f5aa5eb83f3c71189e4"): true, - common.HexToHash("0x422d8e09471f1a8181366e0229e6a272a36350f0fe068d4731488a065a6ced7b"): true, - common.HexToHash("0xf28380cac9209e5f0033e4f358e72e95fd9db68bc80ac2620e7fd2d09f70ccba"): true, - common.HexToHash("0x1b382449f90c7fecf5b09483417636f382aef44da3ac1f19856d1c53ef559fa7"): true, - common.HexToHash("0x391dd8ec31fa376ec3eeeb63521a7879821a2163c04282058426e00940690af0"): true, - common.HexToHash("0x04a95eccf26093e7d329401548959e5db1d44f3e8ea15be1dd25b8791692a693"): true, - common.HexToHash("0x444b35d09f8bbcfec862e0df23886179d598915e7d5f2bd23f1809728e1e73ff"): true, - common.HexToHash("0xd4ca005451898b4db3ead9b608383d256d7a82bf3271c9ac9199efa2f21bb877"): true, - common.HexToHash("0x769cbdfdcf8b8f1ac5f745099030e641ba96092be72abbd344a27679aebdfbfd"): true, - common.HexToHash("0x2abb69a2f641bc09a2310177a6ad9eb1214a099e10e5c2d23f463e49b38c0142"): true, - common.HexToHash("0xf6725efd5e2da9e67bf68c03d2478617cea353348ffca32069580b3ea24cd221"): true, - common.HexToHash("0x98554a4712e9751b562ad8c739c41613674b2c57ba242c1864bd5c22cb27de5d"): true, - common.HexToHash("0xea28a22a7812f6bf6ddaf0d66296eef4c01cb3c5ea1c7011b9dd59d50cc06bc3"): true, - common.HexToHash("0x870f20d66e3694b0a0f0930799a968f7ed55cbd178ecc522bfc5dcc3f4508d3a"): true, - common.HexToHash("0x886413ae6f4ea53a2f05b5c17ec58a696b24effde43d94ec81f76f3f2b067c04"): true, - common.HexToHash("0x04b2a44edcf54cb952f4161fbb21f2908e7159e3c680836fbefe6ac98e4fa021"): true, - common.HexToHash("0xb2c7f3f0b51b5696a3f158c2363913e6d3042c31539ef1393fcbf2b516bc9c4f"): true, - common.HexToHash("0x9298c8b8cfda7028d182bb7d786d55463eb91bf0b001f5ef832a14857c371298"): true, - common.HexToHash("0x8ce337daa9db05a540ae6972d9f44d003c2cdaee905ef7fa6366a2253570d0d9"): true, - common.HexToHash("0x43a6c22f6376263a00783d573a555cee864d3ec6001e609a89740fad6ed33217"): true, - common.HexToHash("0xcee4665d6da082450c2bbdef745dbc36cbaac27bd3a30516c10ebc2b3d96c9cd"): true, - common.HexToHash("0x52d81c4cae9d79fe44e07e00de92ed03d11a1913bbfa3824c89011f4cc509693"): true, - common.HexToHash("0x94160317d896b3cca80d8b562614ca0198b00314dedc09746f28f8016f5021f7"): true, - common.HexToHash("0xef6760893a3867afdb71226cc2313876a65a28d09b9876ebba37521c911e8b3a"): true, - common.HexToHash("0x49050bb3ea0b6e8ea0a8146ffd597d6fa11afed5f9e0b62fa9ae438b702811e1"): true, - common.HexToHash("0x1dd129dc415ec260b01ff2e3293ca4b2064f24ed19c807e9dee6834e2d44a7fa"): true, - common.HexToHash("0x14ba6efd8c37595ea33666b8f66680e1598c2de9fe509c3c43f3a47ba2631291"): true, - common.HexToHash("0xedeaccd54145f70a1bf34355e24cc7985132f71044b8d44a0a7c5d5f7e340b31"): true, - common.HexToHash("0x19f02122c28401877d5d1b678600b28ebbdfea95be53f2f3d0263fa64ed6eab7"): true, - common.HexToHash("0x9c103e7b82ceff6109a02642bec08bb5cd33952076559b80e784d33675f0ebd5"): true, - common.HexToHash("0x13d1d3b6de8e11587c2c0774ce2143e49eb52cb5a326ee0518d35a020c5c62a1"): true, - common.HexToHash("0xee97a3a16bf84ad0df60e120b0cf7c65d902ea263141c301ec0168e71704a99c"): true, - common.HexToHash("0x820e51f62036e736ca1193efe024de1380df9f07c151f8780e4c6426e69faafc"): true, - common.HexToHash("0x46736bbe276deb34f040f691176c63bf547a0cfbebc754c5c8e075b888524f7b"): true, - common.HexToHash("0xc2df113d44eab1b1fa2ea5b9d95f929938bc4f01de5c69cfffb41f7e24856a07"): true, - common.HexToHash("0x3a1e86f9ce160fbdc9f3ebe1e2aa8ff811c1dd123cd2d9b237b103b7d00708a9"): true, - common.HexToHash("0x8502c45ef4d6c07aa05032bf7b07c2bf3d1a4978e9d43e2321305b72b1b52f25"): true, - common.HexToHash("0xad67c044a896378a4582c01f09dd604c636679ae3dabb9dfba44206478675556"): true, - common.HexToHash("0x787f6411c05bd715faf938089848d7a81f507c23290925bfe9461ab07cb0b0a7"): true, - common.HexToHash("0x3cc84fc40662173797fc86ca88c2a2b6a7ed17045ec7a09217c1d0a295af293c"): true, - common.HexToHash("0x379083d1db03660adfa1a306ca0e046aa294e7a4854a8c867c6157bfc0ed4424"): true, - common.HexToHash("0xbd6dc8210b56d0c2a9e84ba945fbfcd8dc5c50a16bb69596937d1d470ba832da"): true, - common.HexToHash("0x6ffa66e9f3b9a7115221f87ca5fa2c36ff008c7c66d00e0f8ecaa610cc2b3090"): true, - common.HexToHash("0xe1725a1af660adb6c4314efebd69a46eb0a05e8597468de88148fd8489985fb1"): true, - common.HexToHash("0xc022b903696e0ec2364eb2268eacb7b73b24bacea25c9304bb1161b4b4f78c0c"): true, - common.HexToHash("0x7dd51a32f44b54363b49adaaf949f989a13ddb319dfe80184c4ac59cbcfc16a1"): true, - common.HexToHash("0x0f7ce3d906705374d7fdb458007b80112b6ff2dde8eb30fd1ffdd140fb742666"): true, - common.HexToHash("0x2e6d36a0b852dd231b6f3f1a34190e14c63412d6073f2c7cdea4138bcc654545"): true, - common.HexToHash("0xcf009944fceb01d4e3b79d83a51a803b525a9befbea857f2a4f66f9d736f0cc7"): true, - common.HexToHash("0x3e7ca9f9c7d26eb84eb9e18ac67b0e4a37dab051436e7e6f7df31b290c43c741"): true, - common.HexToHash("0x9ea9c5333865153709100dfeb9e9a9e956d0d2453abd81104b9d78b9625eacf3"): true, - common.HexToHash("0xa7bb521ec8b7473e93c4ddaf0e27b0c73fb74b33f5c7817f2a0415d3c03253dd"): true, - common.HexToHash("0x8f0b2f9352f5c9c1feb69816e0cb07c0af76a02865d4a02e08cfc96d5a9dafdf"): true, - common.HexToHash("0x70fe3cd5bd090a9975d9985e5552bb7e79e60ab67e8ee23434759bad96bdf46f"): true, - common.HexToHash("0x85a767c494245165e6af30f9cd1f3fd7abef61234a2fec23c14c3602095053f8"): true, - common.HexToHash("0xa7bddeefddae54f9cb04b1242d009efa69bbdc646cff2f1e2879feb0e163e462"): true, - common.HexToHash("0x2202d2d21a73ae668d1493bfeb8cc7b7ac59d26b314ae9aa78c5df04c7b1a499"): true, - common.HexToHash("0xbb03ee8daec3ff855e2bae3536774c0949b17c220cd3f2ff43b9f1cdbea950ae"): true, - common.HexToHash("0x3379f0226648c7333f49b19875bff75fe5a5a1f22a0fff7bcfea3a3eea06a10f"): true, - common.HexToHash("0xbebfe5c81ae8e4195764f65a30fae2497fa8eb3e0d174dc6928e2b4207fddd42"): true, - common.HexToHash("0xbf4d2d89de605d187b0cdc3f8cdd544f841e654d4a55ac657dafcc38b6b74f81"): true, - common.HexToHash("0x00bf066c35e1f69c9074aaafcd4e19908b1ae67605943fa4d89e7167fd7a53cd"): true, - common.HexToHash("0x0303a9d2e44d2f59e6775bd823b72b9cefc4c994e99f0b560b9c0cb1d7cfb50b"): true, - common.HexToHash("0x0035111eb6b2da1499fe1e3edb1837e0125241ba31dd78ba3ce1e4f49855f5bd"): true, - common.HexToHash("0xe4381444e527c1886c20cabd058bd2e2928673344f0070a2fefc3f45b6abcc78"): true, - common.HexToHash("0x6fcc9c7430d5706ab6bda9211ecf87441889fb6be56fad09041910284d991d40"): true, - common.HexToHash("0x306873217213b20438c013c58b7af10f51a72e4216e93f454ff1fcc02efce0ea"): true, - common.HexToHash("0x334720bb0159460b1c6746231fcf50dff46380bee78460debe94c9d1b8234999"): true, - common.HexToHash("0x8ba42c90a6659c66338a74dcc8cdc6f64b7ce3987ad66b78ce85cb4227ce2c93"): true, - common.HexToHash("0xa8ed42f707cf58a5d60247f993a221dbff35a9fe75a47884cc1e39aca00eabd9"): true, - common.HexToHash("0xaac8685b4ec6d4246fb9d84810d1bb7207b43cb5dc76d39eaeca875e80a1a62f"): true, - common.HexToHash("0x474e0f55ecad234e3fa3d63ae2714eac9a1869ac3613090ca439aa4fffe997aa"): true, - common.HexToHash("0x80aff4ec107dba768d183cfa6e095d3f7c2b918d27571cd74aae437a3ab39e05"): true, - common.HexToHash("0x322f1f76d638a419da895b02f7dc570a94a27432c8f836b08af965c57ed3d805"): true, - common.HexToHash("0x8166878c70e1b91fdca4675fe7d87b0e30fce2b1017644462a7de711eab8fbbd"): true, - common.HexToHash("0x2f6642ed0af20682351570b5970313e2343a33fb126c0b8e52a2fd682a8d96ef"): true, - common.HexToHash("0x573ea3870ff740c93c9508bf7d27e16bf986c853fcca10fac386be46fb020763"): true, - common.HexToHash("0x6d614d92769d9c9cf4b030fdb9f0ee9dc98c728eab1c4454e39769295f132a86"): true, - common.HexToHash("0xdb00777932a5bfeb0287818da228fb5a92a67849e9dd39d072fe908e36ab25de"): true, - common.HexToHash("0x94004f726f210fb1cf21a7f5f45949912537ca3b382062635b65ee827f05c387"): true, - common.HexToHash("0xe56cd558b714b3da2e806022f33a0fefd86cdee2a974315a3c24a27be6d426a5"): true, - common.HexToHash("0xe6a20f8b0b8f9de073e2fc9acb6d8bacb2e368cd7d389880c02d6d50358a3d1b"): true, - common.HexToHash("0x9883cfd286fbd201314837575699a90786b7f1a76c6c76b95d4c66c9a2af07cb"): true, - common.HexToHash("0xf1bd50017c016103f2120ce278d79bc0728f0495cc9127898589d72921c9e0e1"): true, - common.HexToHash("0x81240bbe600aaa38532fa29f5c4ebe5d6948d2d5774a298a0da10c43240ce93b"): true, - common.HexToHash("0xf2f36d0677a7774e21d0605b7cc6c0dee973338533fe1564a5eb3c923783cf13"): true, - common.HexToHash("0x3eb741a8071b5b231331e940044f8249c3c819593a68fc849596684068dd9c82"): true, - common.HexToHash("0xb4b7cb9090f6c8c962b315deefc484d0e07c772e108fc22e39813b8441fea73c"): true, - common.HexToHash("0x5feb95b9f560b7fadb516f4d01602ccfa3d5edeaa433a22a70f712cbe20d0146"): true, - common.HexToHash("0xd88cd184e153bb9d7fe1fe615da09ac31e65eb1ebc0edc3aaa3c7d19f57431de"): true, - common.HexToHash("0xd7774c74eb514eda6e7d0e2ada8d90ce86dcd9aab2a2ed2f75febe18c69616a8"): true, - common.HexToHash("0xc78d4c3e8e397dbb3df426e88696ddd32b92677575a455f3af9b75b02d20ded0"): true, - common.HexToHash("0x1c450b1687e2d71e365e193b469e5a142d476fd891084ff9888d22111ed7540d"): true, - common.HexToHash("0x715d514f4e840f39ca9fd782ef0166afc4c02a8e9d74ede7a35cd7d6919fd52f"): true, - common.HexToHash("0x83b11a19953d68472017bdf9ce6e8a49a810c361d52067bb8dbf476633739fdd"): true, - common.HexToHash("0xfe9230d525830d3023673def7582c43157c351812afe49c84b92e63d1a0d05b9"): true, - common.HexToHash("0xd493c186e6b02239b5a95e9abac510c864bc3f5540fbe887ab76b8d3535c295c"): true, - common.HexToHash("0x1ea2c0143faa8fd387992f79136ca62a5edf82711dbcbb9cd917b275b84ef602"): true, - common.HexToHash("0x2cbdc73adea075af21f7afca590aaa09e5b50377fd3704c2e30e25ac8478813e"): true, - common.HexToHash("0x3c64f7cb2b8cd41abfa767b3a89b72e712483ab0d1a291ae816f74484724a023"): true, - common.HexToHash("0x1935c9762ce8c270611f9ab0a4f05790a3d0c0dc920e18f202d0ad1e74501815"): true, - common.HexToHash("0x1dc39d64142f27e09e4b36a2ae5248b570dd1a9106d850efba4d7284512bf9ad"): true, - common.HexToHash("0xb0635e3fa8a1c9810d1b8bd032c4fd249b9b45fd38985a8f599274d6a13f6627"): true, - common.HexToHash("0x71ca6396592f6dcad36d0835933ef9b0405c736bb54323dbbea2bf603192d691"): true, - common.HexToHash("0x122fe7db8d9ad7fc7964d343acb307e86d01c09ab28feba0735b57d17904163e"): true, - common.HexToHash("0x3f7950feb20c7f834f1b3df6da057de708527a7a24bfd78f60437f5303e8f34b"): true, - common.HexToHash("0x06320ba307c1bc5028d88b11f4e68ec4ed725502271680d4e85b859950e55c78"): true, - common.HexToHash("0xcc4a990a6d5e149100d2af98320c4bdd38e027e9e007d20ef030a7373ec1aa6a"): true, - common.HexToHash("0x95ad5ebb8103f38e149ed2fd8c6976297b3f938ee0e5ab46efdd1a1fbf74e1aa"): true, - common.HexToHash("0x360d5978362d368a43a2168b6033b0cb6018dea88838b3516972da32b730f47f"): true, - common.HexToHash("0x857d7b327703c4a30c8209b7ca07b85767dd38e79fe3327170608ccb0a85477f"): true, - common.HexToHash("0xea44900af7659c2103d4d07db02433389181c2828d370ed34db3a8b9dd9b599c"): true, - common.HexToHash("0x155a14206e76a174ac9828bbe17f54ed0de54202b6ffc7fe6ccc2aa0be449c0a"): true, - common.HexToHash("0x1e92b5124fb3f6f33d504c223e9f9996c486a83d22e8f66ff7210d4a60802c44"): true, - common.HexToHash("0x6df80b903489f93014c169d739a8dd6dbbeeee65fc4ee2014d7859a4ab6e43df"): true, - common.HexToHash("0x51579ab1a9b2e1377b5158c1a86bece833ed5971427f4d0a3af219f6cee16b07"): true, - common.HexToHash("0x561d7bf8111a4f4384cf0685969752c8dfd7c8cded53982a5c3365f1a981c2f3"): true, - common.HexToHash("0x2637e04975048c48bd56b15d3fea471881b47354489b1862ad329279d4f66f34"): true, - common.HexToHash("0x6797f82275850f4d8f175e6a9d04c80d48bf13f983155e7edb48d71c000d517b"): true, - common.HexToHash("0x033d9fb9b95b00de34e2f802608d0a52dfbbdc612a17ea8e20630a2902f820bc"): true, - common.HexToHash("0x80da80a5eb8d60fcbd85d58347a9a79bf36ce0fa59acca2c967debab7450b411"): true, - common.HexToHash("0x23078fcca60640027688ab62c05c0f5063aeb40c058e6a7d5d18d8a46c2aa1f2"): true, - common.HexToHash("0xdfcc138251d3639ccf7f1887ab8c220aca5fb4060284950e759b6f81207dbb4a"): true, - common.HexToHash("0x01c22f3159eb35efcd49edcb992c3c4efd9765523d5ead0006946c12787e243b"): true, - common.HexToHash("0x9526b28ede93a8fdcd31c6fdabc78aee952f42e339b33bccc148f1fe46cb5173"): true, - common.HexToHash("0xe72ff1940c28cab2089aaacb6dbe9644134ea8d4058b613c3950ee37de75382e"): true, - common.HexToHash("0xeb7683c347feaab15e2711fe375a93879d0d302a6ee0850ed6e7003a5414bd18"): true, - common.HexToHash("0xf0ec75b61d8ade7399da86b74ecf96ae8cda72f2a5768120908d7b357aba5c46"): true, - common.HexToHash("0xe6d3122ec043c801b99bf187e2302b5586b7648ec013eed412b713b18dce80b4"): true, - common.HexToHash("0x59ef5e5625255f2b1a874028178e093dcf26071917170b794b7ece52a8e02f68"): true, - common.HexToHash("0x5012532fc49813ce9b81acd3eeab69a8899225b982a2ec7d0bfe2cb64a992fb8"): true, - common.HexToHash("0x74e74ed996437304e28f6ca8597765247c8ca49c40ce61ec8b84775af026bd6d"): true, - common.HexToHash("0x1fdd69e387899479b893ae717c227d62f0f22ca4fc9bc8bc985e21c222c8173e"): true, - common.HexToHash("0x306afb51c1b907b723673a167259f3ca4343a9fd70d9f6ff65165d5f217a77a5"): true, - common.HexToHash("0x1ece253b969e1ad3d33ea59794a4d77f2c176d264a28deabba72eb7fe7df8435"): true, - common.HexToHash("0xa6bcc95c83dc9283972ff67fb316cfce049ce14935dc53d4936c39d86d226276"): true, - common.HexToHash("0xd410c332e1539124cfe7eb88a3ed27b58b0ddeeb6414a7f7b19bf488ec95a2cf"): true, - common.HexToHash("0x8cbfe5aa69096148622b37e2e70feda7bbde2674b5ddebd24394c7f9a8eb9d16"): true, - common.HexToHash("0x155417e42cce058c52a3335c39637990f779c819e000ca45c70c12afed4a09f3"): true, - common.HexToHash("0x05baa82c6698c9a767f1b0abea02b39f334f2992d34de80ae2026464007e7638"): true, - common.HexToHash("0x5b7c6ade1864ddf40c0c59cdd79dc99966ed7a9c84eba72d7820e22a22de3826"): true, - common.HexToHash("0xdb08afb70cb3a2711a3743815cc2dc377eef850f24e5fe3a6ef3fc7f606aee4f"): true, - common.HexToHash("0x168ff3fdb0401899ddfca7ac93629fa1cec61a06d5ac3d47fcc75362a30aafd7"): true, - common.HexToHash("0x3ae40b7db70eb8834f4f6086a8c4b977516509d50ae068c508fa052523a114c8"): true, - common.HexToHash("0x557696cfbeb3f885dcda85d2478b75f8cae206ba66d3fbd8e2af459155f74cad"): true, - common.HexToHash("0xeb6b0ea2f46ea41754fc1d05db36fe71eead48f2a09148604649541951857523"): true, - common.HexToHash("0x14124a7e79364df57829e00b8f7870b487302a30d2a982336f92eab359f7c5d0"): true, - common.HexToHash("0x10ba17398b449f7f2cc54d4201f5a2bb6734325a41a2cb7a3a38a61b4b98863a"): true, - common.HexToHash("0x3fffeb423871c94a159163d23e1ae8863928994951662efe62898cbd6e73a4d1"): true, - common.HexToHash("0x52a7b70a0dc72cfe89c90af3d1a2b9273c9e98fa0df3448542a9adf635392f73"): true, - common.HexToHash("0xebb9e3fe67ea8281ed28a59642d9399d329d6c40fb07ee3014fd1bfab4dd120e"): true, - common.HexToHash("0xb790549bf939087ce5cb82f0d7ee9deb970c033af1b58a572f3eb6dbefb278db"): true, - common.HexToHash("0x87fe5cda5af1d53ee72a9792ad1046c270948609df3c59b014ff335c0d4c6899"): true, - common.HexToHash("0xf59c19a7884f8a2dde690be9bc298d6bd94013f14e85705ac956af69822bb677"): true, - common.HexToHash("0x7ac429bd7cb745fb350177c974a83909794803aa754ff467ef300f1309775c1c"): true, - common.HexToHash("0x46fb8c7f8223800cf3281b69f84111d24093ac59ed531cf59c14b03f9fbe7337"): true, - common.HexToHash("0x6b6de4f2756afc28f17992bc179674ca90d5b380f476495376fb5f678a7fe96d"): true, - common.HexToHash("0x4445bba9cbe81f22df471640552fbdc84027544af82908bbce0a30bc2850295a"): true, - common.HexToHash("0xb2b457d6689c124b32e483192ecb002ff72572551743c029fe64461826dced1f"): true, - common.HexToHash("0x49ec0e85916eee7f907bd5524a82a1f851115466aa1bccbf138fb99f0d29d82d"): true, - common.HexToHash("0x4fe28e5c93efd22dd1d020cce92bcff36895d5732e8be04bd940812ff77cd8af"): true, - common.HexToHash("0x7e071ed2f4e04731dd11ed1486ace20918b3b3839eadbda0bffab76a0234768c"): true, - common.HexToHash("0x0af9fad4336460795a71f21f5588f50519cb04c825882c2b37845de0d24125b9"): true, - common.HexToHash("0xf8c68413a806bd17f9fbbe9def525c03bf2d0ca1ecd4cd64ca6787ee2e1b2fb9"): true, - common.HexToHash("0x4c25b2ded67d03a7c1b9b55b535a8cfaf670b83c1d835efa557d347a7f3ec6d6"): true, - common.HexToHash("0x5526dd2579d9f61a4a4be4613915a84cbf36ee2d004a59923746d9a9994d7623"): true, - common.HexToHash("0x7a04924323df974301fce64dd016d33149259b1226ed80e96399ccf834fb84ee"): true, - common.HexToHash("0xeb23ffe8b036fa63a645a972f2b6711b71db948136c998d2b638f73c59a8f9a5"): true, - common.HexToHash("0x306395e83d3da6be314dbcb902efc2d61a416601937982ab26ac084d8d9c662c"): true, - common.HexToHash("0x1194be4dcbcd71fbf65572ab58eb17161417034dfadb8fd333b9468926a10707"): true, - common.HexToHash("0x934ac2095f5457930d30dc4d594559b7b83f2cc74a9ffc2ce49c877ac15fdf33"): true, - common.HexToHash("0x43a7058a5ccd1388f5e8ff9c213bd0a3f250aa4a48ee7b496f7e789dd8c2ce00"): true, - common.HexToHash("0xed193a03d8557986e19fd15de46e8d65098689f58564c7141cfd0c50a251b510"): true, - common.HexToHash("0x9f3d881fe082228f217d85e6eeae658adf8f6e8d6567db3bc45cfe3ccbeb2de3"): true, - common.HexToHash("0xa83af841f0ad5782806e04aaf2563dd8a7a42473e5c00baadcfd6f7f6effb225"): true, - common.HexToHash("0x6f01f2c54c0c27a2fce9d77824ed5075d56cfd4b3d7b4ef1f0efa75fc3229ada"): true, - common.HexToHash("0xe8331f9bbcebb02e2ac6d21d10c1917a808ba66d06bf2130107c6f6ff82e7f85"): true, - common.HexToHash("0x073c290d9d4fcdc409af414985c8438f70a5b400a61b5667cc827f742dfe1fc7"): true, - common.HexToHash("0x58ad245b89ee1eb7c6184b39533e7cfb448355c35889f77341b99c242bf7b48d"): true, - common.HexToHash("0x8e45377eedbcf7a27c3d3837e32d35d16c5d026aafcb186d901773c0756750a5"): true, - common.HexToHash("0x6cc7e30986ca6ecefe680beda165ce8b00b858604feeb9763f422624f496e1cd"): true, - common.HexToHash("0xcc8aafb999fcfc6e66f20042b554ddf81be51fa0e19833b5d4b85cbb5d07ac9a"): true, - common.HexToHash("0x1bc375c927c1116df38276ed7b32df2f81e6023e5b00a1be7911632d8df1fd5d"): true, - common.HexToHash("0x5be040c9f716561f3e8b5b05ff06a52e2c768d7315b81634c2a68b3dd8bb1d4b"): true, - common.HexToHash("0x395d73cb7ba6c006d8ea7d4f302d33b48e62c1b89bad3949cb4d79ee85257dbd"): true, - common.HexToHash("0x7ec4747482b0cc9937eb75c7fc6dd0aa7d7cc0a61e934f18749f858e0a4bf6d7"): true, - common.HexToHash("0x2439957d1beb5e9b6278293c53046a328b0ec4de538dcb648c73cceb62fa4528"): true, - common.HexToHash("0xb932201ab148dbd14e9ef17ee8be2dc074057dc8193720449daed7aaf52510a0"): true, - common.HexToHash("0x79f4977f8289a084bbc001f1fc085cadff558d10b1ee928da66399bf59820778"): true, - common.HexToHash("0x99df13ab3c8d19c781c534d60dd69a85aad63f4f9359fcf134752cb86322e73b"): true, - common.HexToHash("0xc5882032220ed8c908f555fe99e80661cb934a7ef7f242118aacbd58f5461a4e"): true, - common.HexToHash("0xdc98faf4dadc02a575f7b8b6f3b8513817726ee1ded28e97d7fe6f143676e6ff"): true, - common.HexToHash("0x979194b07a39a145bee0ee5994f830cb988b3cb813917d264705a349434d00a9"): true, - common.HexToHash("0xd88a803b31da82252e4fd39c7a2961ae12166160a87da2aa1c735d60f982846c"): true, - common.HexToHash("0x82dec7a0f363e9b28e0eaf29562bb90b944fc572e7e8257731d52a7c518f6609"): true, - common.HexToHash("0xa374d138336db256866d124de4772e0195fe3d310f24f31457aa6a586fcf066e"): true, - common.HexToHash("0x79cc94d0a9fc9c3b2a5c9db0795f981ad0bf99ef43bcee2bc6f3f6c1b8ff69e5"): true, - common.HexToHash("0x499dabde7b0bad9e2040969c5dba2d488f6ba4b80e47800c490a30b7e2618178"): true, - common.HexToHash("0xb20237d2d46e1da37e345855625ebd21f99d3347a6af578f9340c4ff2f84045f"): true, - common.HexToHash("0xa77189172e9c8af65b74aa76952c83bea596504090477339c182d30640e7afd9"): true, - common.HexToHash("0x22f7966f454028e06af8fe5e8307d8f6baadc22275187521ed58d50720af25af"): true, - common.HexToHash("0xd2b41e6e616bc4efb5580d271219c3cff7bcb35bb5e77c85c9d1f6cf5d24cea7"): true, - common.HexToHash("0xd863513de9d6d9838fdc8dd540e495f2683ad6767f006a8106089cfc7c02059e"): true, - common.HexToHash("0x7876a0887f0c2071b6f48fbbf65515e8529557d8296fae09b7dceca09d1f3b25"): true, - common.HexToHash("0xa08efc8a4fb6ed99fe88fc4ae688c50667e5ee609dcdd62e48aa9d298e72f14f"): true, - common.HexToHash("0x4979c2672ecb880f61f62c465365dd9a95c4b33c5a65d83c9277f4d2e3711080"): true, - common.HexToHash("0xdd38507ea921a2d81577674cd6b8f30cfb04a8e6efe7df4783c22ff069c32701"): true, - common.HexToHash("0x380197596f265b6f114f6e4213bdf5bb29b64f373a35820f62b83fefdc2f48bb"): true, - common.HexToHash("0x2ee381a4614b8bd6bd555447375ff9043d231b460745667d40979d0cc80de036"): true, - common.HexToHash("0x44949e61a61ab3a3fb0fbea70a89bbc8ac26397358752d2f7ed8fe57be2411eb"): true, - common.HexToHash("0x1eda933f2b3042519e0c8aa58cf9bc2621342174e0c267d2728c83ef87f55dd9"): true, - common.HexToHash("0x4d4d11dd57986d953678e6275c04fa19c6305f355027f57e6441376061d76b57"): true, - common.HexToHash("0x2621c209d0672f63c34a7465973a7bc3ccdf5de33937d4e35502334dff263bb1"): true, - common.HexToHash("0x8350c49b720452dc4baf946d1b83a75aec3989c771fe71aaccdeac9ce7e41904"): true, - common.HexToHash("0x0270ca54001742698574727279f2ac544cd9cf87b977b459d7ba078261097f1d"): true, - common.HexToHash("0xde2d38ba9c77bb844fe1b6880643f7cb181ae7262bd0265c158d109d6069c9e5"): true, - common.HexToHash("0x66be9bf60f7cded87263ab26bd45549f2484446f18f69b42262bc7bd749726c0"): true, - common.HexToHash("0xe3582d2d7eef28b69d07d07bc8cb42d98adcca58c2a375a06cf510a3c94f2469"): true, - common.HexToHash("0x488259545b94b9382e2c4e834d02984443f7806e754cfff007a5a59cd6f35ad4"): true, - common.HexToHash("0x8798d5b41d3888ae5ee8e1ce72afe2e95d5ecfcfaa5767a941e18222c4cbe54a"): true, - common.HexToHash("0x8cc53dbb6bbb00dd4c0dad2854e8962b7b8286a40621be241faefd6481e62838"): true, - common.HexToHash("0x484ed41fcfd85084562fc666358aad4c6464b1c316f4af03b8a1467894043a84"): true, - common.HexToHash("0x05b4adefac187856204f9d34b2c4f633471b58b6e33a4beda6028cf8e7344d1c"): true, - common.HexToHash("0x6dd3c42de76709bf5e5b61b1e372f0a69a60c15fbf74fd614548d652d2504af5"): true, - common.HexToHash("0xfb25b436156266fbb72d66154dc69bfdcbb3e6097e7eff60cbaa66ed0a2b41b6"): true, - common.HexToHash("0x22f68a8bf1ec9b2c5ea2f9ae94a9de559655c462d9c846cfbb391779416a687a"): true, - common.HexToHash("0x553e8206cd4db003baf4237ef180d16e047cf6a77aeb8f3aa94644805fd34071"): true, - common.HexToHash("0x6bd6570c17e762006640c950885771b9de009dd093f2562c1cd51cccb5c49144"): true, - common.HexToHash("0xf7eeac9d0b642eb38e0f7d83f09183c8520db48e2f270c3e7e241d3300f84223"): true, - common.HexToHash("0x402dfad2a75066180ae0e2d93865dba6cfb18a23f4e20ef0c706169834e5b2e9"): true, - common.HexToHash("0xaa84ea0d482d4572dadb81fecfb261b1db61ca74ee32c420fdc690a9ff432419"): true, - common.HexToHash("0x7776627594ad6c52c836c2261d5c85bbb8d7cd664c1c7a37f7927e42e4b13699"): true, - common.HexToHash("0x2466efc00b88e484abb7ddd3a9cf3d4e215a88be978806de13d1c0396100c97f"): true, - common.HexToHash("0x530184ef89f6e95b631e633d821605e99a5fe9426e2706c6124d3af5de9a1271"): true, - common.HexToHash("0x015966b2cde3f30458e45c71bc8ac00fa50f24534f2ca0d859ec9c5c05583c3d"): true, - common.HexToHash("0xae2b821d169b63722bbb1dfdc9569fd415b83d6e7e1259882cb582b62ebeb08d"): true, - common.HexToHash("0x113967102c293ff478a28e66e35341d9374f842786ef640409a9b9a43e1da685"): true, - common.HexToHash("0x1aad19e9993b8ff9482d7b26acd11bd203bd67cffbb91212b2ec794c64c20fd0"): true, - common.HexToHash("0xd75d7284c32cff6af4ecbf127db143a1704f21d52f2bc51154377427adabd21c"): true, - common.HexToHash("0xe7d698bdc4094848de2bf530af63648f39326da7bc00047651248e94b105d136"): true, - common.HexToHash("0x396b231b517dde196060f7139efeac7908046c0587ff9b559175205de7d11252"): true, - common.HexToHash("0x5cca6d77c0625b7a5dcd12d17782237bc4662db74d90a21e139d055b52fd7d08"): true, - common.HexToHash("0x35c22c893788f76f3d3acf2e9fa3d8aa6fd3a3aee8c7fa68fc85b4876b6e0f8d"): true, - common.HexToHash("0xc5f1d174f3d0e7e439a6c803dc36a828c81ff9059d11d99fc2da4105f24a76bc"): true, - common.HexToHash("0x7748d9ecb5cb2a9692b26e16d0bc2c3eb1fd95fa8f21f50bb9aca9a475338b97"): true, - common.HexToHash("0xfbc2a4b7b44f64d854fa56df41be1ec1d5d7abd8042187e41ac89c94a5a326bc"): true, - common.HexToHash("0x7ae0cc9a13aa882a2300f0310c52c827bd694c0801ed18b587e68f76f129095e"): true, - common.HexToHash("0x19eae511503684ff048281058dd9c0e32f7c9761f318b11279370839f7558694"): true, - common.HexToHash("0x22834c983ba8dce2fb0c51288de2ae1859fba6d699710d746510553b90de2867"): true, - common.HexToHash("0x860d6192f665b072d6b7d0e8c6d18d430e7f3f44490dc8b0e6abcb530a7eb2a0"): true, - common.HexToHash("0x54b22f6646a3385e0112ba4d0c6617eaaab753bd29c6eb4d2623f07ad4d486d3"): true, - common.HexToHash("0x4411139d069bf441c7a4565916d6eb341cd0d7d655659ddcff5c6a9c9f24561b"): true, - common.HexToHash("0xff310c33347d6f3625ad61cd31c9a8e3dee5ceba28bfb638c49a500f11d87f0d"): true, - common.HexToHash("0x345a9b4de09b964af151cdef9ee1623fc391a0b455f9937fd619adf342b7d84e"): true, - common.HexToHash("0x7e26c3c7fdae650a87b816f3a7c1fea8313bc043be49f457318e64a70893f801"): true, - common.HexToHash("0xd59494ba9b61bf183e920fa59e7a8ee6a52c6fa443740f35801580e7f958c200"): true, - common.HexToHash("0x2fba70e8c504b2c0f5555beb79725c3b39f44f30cb42c63ccf489cdefcb9fd4c"): true, - common.HexToHash("0x97c632a1ab274340b18f41d382f0891ada606ea75fe98c645a46147eef4d5ce4"): true, - common.HexToHash("0xfc7d5f03a3dd32ef4d8997b1f8b48693637e7077ccc1f74e195698c9215230a9"): true, - common.HexToHash("0xe83a2bc1534934eca140cd271e614876d533a7ff624c8047cff7a2bd8de7c60b"): true, - common.HexToHash("0x953269a3e350822e62972b7a9ae7f3102d5586a47085f1e85239d99227ab8b94"): true, - common.HexToHash("0x5e799060e916306e5ad1111a15c1610eb49b84d9f26272b6eba5ada1c61e49eb"): true, - common.HexToHash("0x96b03f916e8d9e2d1764c2bcf8520ce668c3a7b53acd59a217a79b50df6158ee"): true, - common.HexToHash("0xb8b5b6fa97e5ab8aff5b9c4d4131eea49698c04f224cce7e7ae08e3dbcb89bf7"): true, - common.HexToHash("0x7c7f0e8683d33feea1c716f534a757527fb96e1c1d0d28d86d93e287d67eee9c"): true, - common.HexToHash("0xa8ee918baa54817b4a238209dfa5dd655b51cc6a2683ab3442c7e66f0bd9592f"): true, - common.HexToHash("0xb157ac60fb696f326c17aa2ca3d791897c2b2a4b27c64c793e92249b5d7b6a7b"): true, - common.HexToHash("0x17f9d2c4b9f88905eb7f52194d19dad8c8210aa47a3b943699c5abf0e499a57d"): true, - common.HexToHash("0x4c7d8e556bdcc360594f5697d3b5f936bb13954dac86e0a90e5796d024ac8b41"): true, - common.HexToHash("0x172558ffd4c9a390dea49a2d97e167fc58a70618c5774aa0949ac6c2a08412a9"): true, - common.HexToHash("0x4e00122a1e5c288178bb50e823042f0bbf2c87aa8cead583772def784fec4cae"): true, - common.HexToHash("0x89941b01cea97fb3dd0483e14a109c94729bd73f830a44b8807018dc93033c49"): true, - common.HexToHash("0xa30c88742159215f39fb9a3db3c9ecd721d0fdd8fd273294652334c014447e58"): true, - common.HexToHash("0xe40633b2568c19dd9c95d12885257a6e9486101a2fe54bb963ab2c4e16ad5da3"): true, - common.HexToHash("0xe82b99518f4d10ef5328b6baefc442dbc273337cc5329357fbd6516ad99208de"): true, - common.HexToHash("0x02122c289ffc6afa9e6468f984e1c14342b8cfe8a05b1c02a6ece01693f6df26"): true, - common.HexToHash("0xe5c03467c06ecc94ba32f8096ad6a351ad49481193f9153eb039fe1ad988c7ac"): true, - common.HexToHash("0x66b05f627b257c11a9347ca552b22b0cff78f9ab6de34ea09274c01467b4d5b3"): true, - common.HexToHash("0x7cb9daf904f65624552e2ff2b7227763e2f62574a84596ed00155e08fee0a357"): true, - common.HexToHash("0x94ed6e86c9984d0524e87a36addb666f009c37014c8557fe78ea05d4b2e032ad"): true, - common.HexToHash("0x8dcac351a8309f457a83b3e4c359d1f3ddaf2fe8a5d0f98db26b5bf5eb9866c2"): true, - common.HexToHash("0xa0b1e39718b37c36692dfc932a3d235783cd1a8c94f713273f7224d4df2aa826"): true, - common.HexToHash("0x7d1c84367630dbfb40876b139ae15bf295e66fff596f6b1022dabdbc8976287d"): true, - common.HexToHash("0xf2dd5bafa16b0be4b3a9c0c6d217132cdba5fd7bbce8cc37561cf6d512e3618d"): true, - common.HexToHash("0x4ee0e15e4ae7f65ac17f436d90c798d629e93e389089e0dfa64d464f020a893c"): true, - common.HexToHash("0x7f909ee9013ace141c2541662441d5d29ec6bb0505624b5a2ee1e6beac8a8543"): true, - common.HexToHash("0xabece3e0f91035c4946ff2cb56e2986e80518f0e829a6692f9c74802f282ffa8"): true, - common.HexToHash("0x9aba72d435cd5fbcdc4b03c9cb28b616345a1f763179d6d58a1c7c4351d6ec9c"): true, - common.HexToHash("0x0bc17f1ca1ea5abaa9ccb2b6441def9652e92ca6d62846073c1293a96a94a73b"): true, - common.HexToHash("0x66a8c08dd424ed5d30f72d5761c866addf352f7f424295695ece5beb5799ab16"): true, - common.HexToHash("0x2fb9ea8b6c89939f57ca70061504f7279c1012f36aad6df90b9eb3b1c58f5752"): true, - common.HexToHash("0xc1e31d1aac7e88c1566c4ac07e7c0005ab3d93870d12d93b9d1e42a900faeff2"): true, - common.HexToHash("0x2fa6f200cee9e2d0401c2c7cd2fe8e583ae1af18f6deb947d16d72685bfc76f8"): true, - common.HexToHash("0x83151d071e0157fd9d5329ae96031236a369dd9006578ae45f96aaca55c0f816"): true, - common.HexToHash("0x52f096d1d6307ed7741e7c276f2cc0ad62480026c1331fe4eea43709eefcb640"): true, - common.HexToHash("0xdd3b2d19d06bc34c0ab7610ace6c31b808e86e4881cf086c0c24df239a62d27d"): true, - common.HexToHash("0x00742455e794fce7b6f0b0357a10b0dc5fba3f0b0182a9478f8f703d6d8c482f"): true, - common.HexToHash("0x97477d413a40c27f9aadc771d517535fe9a3695174d0106e1e9a361ef2c4229a"): true, - common.HexToHash("0xf33a382a845a8d43be81b7434d5af248f4deb76c37441651e5cc99b1fdfe62b1"): true, - common.HexToHash("0xa7c86b9176a79919d8158d32370a2a21b1dcdd558a2f5d9810c0f2158d8df664"): true, - common.HexToHash("0x3580570ee8c57c17f63f3b246c4606f5d90e9f3ad0725318cb6f379ef11fdb14"): true, - common.HexToHash("0xde65f11f6bf4542b9293b08a9cc6a1b490b4cc58d630ca06f477a54067ef6b33"): true, - common.HexToHash("0x97a3e8d1e302dc021ac44584ae40b34540db52fb10e9a78c8302d767d2e06a18"): true, - common.HexToHash("0xa9fb1f48fe2f1c0e9a7322818d7f2c2ddcebc3d6b08c82b570b0495811825ab8"): true, - common.HexToHash("0x7581d118f434cb40ca66708c141ff4e07b30c1ce25ce6f0f63d2226964a85bd9"): true, - common.HexToHash("0x413e76f8713025a2e252c4f5253d6e552aece8fe677c89f265704ac40d95ec7c"): true, - common.HexToHash("0x84a8f5d8351613a1e28a7f5ced814bce08fa4719453b97e80b00964ed9a1e7b8"): true, - common.HexToHash("0x28053543d1b49d991f90fde4625f563bec59a90bccd24a6271109a34bf3ddef2"): true, - common.HexToHash("0xf889fb3588783fa07871afe57602a566694ef43edcfd2359c98d76e490d5fb82"): true, - common.HexToHash("0x63b8b62a9a1f4bb4c53dac54cf061c76a20a8170f41908c93789c81ea045740f"): true, - common.HexToHash("0xd0892fb6f8632fccc8deeb454c1ea05a4371f1196b385e5e94cc683b6ca82abc"): true, - common.HexToHash("0xfbff680c9efcfbbb8b1089a28e20c7c79412a8bb68a9257c76b6d91df6c8856e"): true, - common.HexToHash("0xca1dd02ed8a4217607c19b8c84de8d7d2655b87a0fc6e43053e45d412ddf0f64"): true, - common.HexToHash("0x0141908c09aca98d65b53c70b27f900416492927288d7bda94232f538c037cc0"): true, - common.HexToHash("0xfcc04366c543f3e8582deea09eb126bd6ba79df678831fd586bf9e4bc7fa4e90"): true, - common.HexToHash("0x162827dc7225995a9713fa4f1b23b35739227631dbd6fbb336e09106077a79e3"): true, - common.HexToHash("0xac8c651d957529f72ca5551861411d43051f9072f56a007fda614bd7fcc1dae1"): true, - common.HexToHash("0x2b492b718cc4e0cfb7420f9631ffdcb332e9f2c49c00efaf2137543eb691401a"): true, - common.HexToHash("0x9764972d2577770d201db489bf24adb6e408648976a49f66fe89258fe01b4e51"): true, - common.HexToHash("0x10c81d46d32feb60c2e3818a403ca638cd491fbd33f389581a04cec4108aeae0"): true, - common.HexToHash("0xecf25dbee8cb8ac3e935e6567337cc7380954dd5bb38c1b8e6b14678cc061781"): true, - common.HexToHash("0x3bc5463e82254c32c02e2d56e2ebc208109c7aaa2b6e949b385ff965d1bc9e68"): true, - common.HexToHash("0x8b065d5b7604878f7e43681260b49cdb7b1200faa16550c7963f3ce8e30a8a4d"): true, - common.HexToHash("0x78e93deda6c2a1cb1ac793bfd2af22e8c08b03c5866b90c2fe3c3ef62f4f834d"): true, - common.HexToHash("0xea7f953f229655ffd7fb62419536761650033965d3579ef73280adbbc1094af3"): true, - common.HexToHash("0xcac1bd8cbe4a662b365d047142fb0106bb9c99b9e740f7eed8982b1c6af61ac5"): true, - common.HexToHash("0x835bb7903d3924e00bb82b52dd164d2d22e03afaa3809c55bc352df745044691"): true, - common.HexToHash("0xc0ede4f803fff513d0c51381d5494913592e5688ad553df15a49795d6c5acc41"): true, - common.HexToHash("0x2927a3f6c9d81d8565c4764778395b30f8e05a7148fd086d09f0627a7727f0b4"): true, - common.HexToHash("0x33bc43b87b5e7c88832fc89a362ede1e3672ffd6d775c205ef5eb16e8ebce86a"): true, - common.HexToHash("0xb20658f66fe7d2f86c93c68bd16919301ebaa3837744ef0b4e9b9393417877a8"): true, - common.HexToHash("0x1e1330cbc87cb17e45b03df13e70241b143fea27d0f7cddf7f32dc41e05b65c1"): true, - common.HexToHash("0x1ccc0dd5f703bd01e17fab2fa7846a228f1e1af72cb95298aa8338ebd94bfe53"): true, - common.HexToHash("0x42d32da6bb34a311538c2d896e78bf0502892c5e948618656f37621fa4093bb6"): true, - common.HexToHash("0xa73602fb1322e4e831940696517940ef925a71defeb07ea24051cda9bc10e58b"): true, - common.HexToHash("0x048ebf50f4c5d69b76e76677a6b666ac4dd83739e0f8abe6ab9daf7bb0e519de"): true, - common.HexToHash("0x6497a252a4f309fb4211412cfefde9a849beb5984f532ba7310e825fd882bed9"): true, - common.HexToHash("0x30ce4d04fe0995851172b541fca340e5dde663a7e167f4b7463fd25e91b2ed53"): true, - common.HexToHash("0x384c32f10b202a8da6dffd8428246102f5ac45bc03eebf2ea9440966cd9daff6"): true, - common.HexToHash("0x567ae49a01aa6cb8f862af7e499ea4467e0806d3da24b2c67df58e1525e12372"): true, - common.HexToHash("0x5a4f9a406996cc36e68530137e400b89a870e7556c5d64af8d5916522f55823e"): true, - common.HexToHash("0xdef3f54147bcb18f8f0a9286754b29396b8eac54d94055088238ec1dc8050994"): true, - common.HexToHash("0x935df7753c02e43891c049896ab842262e8b9d1f18e309d9343fedceb641cdd6"): true, - common.HexToHash("0xd2b3eae478111dab4d5ca62b6265e895797c573a7c7c55f47e17a70882822efc"): true, - common.HexToHash("0xdfb40a7a40e78b89ae00232b31d7fc6cea32f35ca7b48f1d744e6b551fef9a88"): true, - common.HexToHash("0x8fd513da273144c3b09d31f36c2350b16633404e2f48433cdc80e12476e7746c"): true, - common.HexToHash("0x38dc0a12be6235a604cab0caaa9773133302fb5b9d399a13b18c50cce7b92d57"): true, - common.HexToHash("0x21dccdfe2881d6425106dedcbee99f5018d32d1cba344147e41a2d9c33677060"): true, - common.HexToHash("0x887f2478e78ec9fc8f3a97173153fada87bf1d4a8fe7395ccce7ddaddaf43a69"): true, - common.HexToHash("0x5091b34f42bf17aeda7d4a1893d9ab15bb06880a783d0e5d44e8bd77733bd4f7"): true, - common.HexToHash("0x172e3d5170f5d63a497a4d69c3310589432ddd832fb19d65654803ee4e900412"): true, - common.HexToHash("0x4ab677b29c0239f8197487ff64157e4911517613f10dce3b946a72fe8e3e7361"): true, - common.HexToHash("0xd4831ef3baff2eac83c52d769c8632263b678e60c84ad8a9e0e119e70b1a278d"): true, - common.HexToHash("0x3e7f5caa58554450559d32eacea8fb6212eac35240f440518d283cb7439d1732"): true, - common.HexToHash("0x4211713d7f233fea3f75990d4f6412610658779df59d0704d080a58447fe7de3"): true, - common.HexToHash("0xec85a57e6df0cad358e4685ed63a0c3c6de1c9d70ac6328b7167e05fb084a216"): true, - common.HexToHash("0x23787500cdb303ec77ff9a98120bd28d2d6dacb5444ae42b98e3ebc78033dd12"): true, - common.HexToHash("0x2ddf398edc963ab80d681317141b9fb9b96b48af178e72f83d6d2aa04b174986"): true, - common.HexToHash("0x85d533db41371bb1418ed71458b69029aa4e1b760133e1deeac472fc6cca0fed"): true, - common.HexToHash("0xee87c0ac4578bb67e9cea9dc74c1190cda74b1362fd19c79a2552bcb1cb81f0b"): true, - common.HexToHash("0x772d3c6b6f1d00d1a373edd3cc6c45d0783a4b41439c606279912eae42df05b1"): true, - common.HexToHash("0x8fbd910e841b3008a9acf1f16fe39572ac223b62f9b56a0b8113b57cf90d00e4"): true, - common.HexToHash("0xa2c3aa766866dfa4b748e3c154904023d2ad61fab128226707dd197445b9ff86"): true, - common.HexToHash("0xca057732d064899a2869b370248aeea6ef26ed5d2fb71338d85f875b3445535b"): true, - common.HexToHash("0xbfe5519ed57702c86962511e12e3ae5bfcd253101b4d538373c75100c897d429"): true, - common.HexToHash("0xeaa79aa5e5329d2b16177bfc8fcb1c932b15441e766c33db33277ecc6f016236"): true, - common.HexToHash("0x1b11d8a51f21adfbbdc79cb4cf3fbb718e92de4cab4b8bfe8819b0b2f86d3468"): true, - common.HexToHash("0x76de1f4e736c35fd70add1b3c6d069b81a7d31a847f767cfd39f58bc9f91bce7"): true, - common.HexToHash("0x20c7583851f3c130f2204bbf6238c6ed54e9648058b28971487e527c23f85a2b"): true, - common.HexToHash("0xd9207c691e998de901521f9e14d5f3257b1e728debb722c2e5ea0098de6f2e75"): true, - common.HexToHash("0xdcd4d8b4bd8687c5b9dfbf0c1beaed82dd551994680460c8ef08a35809b8d239"): true, - common.HexToHash("0xc7d4e50d21b8600bbcc6f58fdbea69db02b0d4133f3dc4e916c4023682a62d74"): true, - common.HexToHash("0xfb4748476f38ab66809d8ea170715fe4e747d42dc6ade7a804020904294acea9"): true, - common.HexToHash("0xb8c3f5457a547ab92ef23ac35052eca631a3f98d501b951ad1862749fb2568b7"): true, - common.HexToHash("0x83cb8f1287a7da98fabd646454673d6186deab8459a5cafb85787752881a475a"): true, - common.HexToHash("0x165a8210164d90c1a94cf8e55bde0ecb0c0528a5781ad3caf985f1f0a95d607d"): true, - common.HexToHash("0x2fa0520a724f8003be52152df100d942fcb280ba1a135eac3d6b57cfdf8c58e8"): true, - common.HexToHash("0xa55417daf7df63b87003d1edef747d5699700c3a246fc959196b906d4245f870"): true, - common.HexToHash("0x552fe3c20da36298c7554bab1a967340e358fb844a84f880d6b3db1b508af7a7"): true, - common.HexToHash("0x2a828ef0746cd7209bf2b71a396c83fb60bfc53bba2f1bf2abd9cf5ea8ba31ee"): true, - common.HexToHash("0x019f1438ec22b9cddd98ea379f1c03758fd84a1c300477f32337278cfe68d3a3"): true, - common.HexToHash("0xcb48439665591031a4e1bff571fb15775fa5072ab4dbf2351437beb5c387975b"): true, - common.HexToHash("0x4feaf1d16fa340b89dee620db76fc4c4e8ba17ed735625b96bcf02a607e153c4"): true, - common.HexToHash("0x52fb69fb0126c30a16dddb6d4acef1bc84ea5e75cf0ce42a5f6ddf3f5dafb987"): true, - common.HexToHash("0x3cbe67828ed46f5ca7576f3e59c4a8004f47227c98fbbb293f85f0565504eadc"): true, - common.HexToHash("0x33a0d8d4fec3c456525d401325febcb02f7d1ea669330800b0f56f4287cf9b24"): true, - common.HexToHash("0x95b34497be1a96b3a5be5f37f2ebf3353a98475af48a914cb0ccc10aedcfd94c"): true, - common.HexToHash("0x45b84a6c8806fe6aa76d292aaf64327add2619ec98bcf896996a797efdcb22ec"): true, - common.HexToHash("0x4dc6757ab3a8eacad6a4b0286a3c68f3d5d13c05f485f6b751339a5fdcee66ef"): true, - common.HexToHash("0x781a34e88dfeb1c4db683763dc5d979707bff5eeba0baf77d3ffca178a2f4403"): true, - common.HexToHash("0xb05b972a07344d994b39c04d99a521f94c39098be03e7be02829bc68a4c0fbfa"): true, - common.HexToHash("0x98b5cf0dde756da3bcfc8de10117e96d9f7048aa27f4e46472385b3c8d355c3e"): true, - common.HexToHash("0x6ec1ecec8d1e6ea8cdb2ae1e388f2a24db61e35ae29136b21a923bdc59bf9c5c"): true, - common.HexToHash("0x019f969356405a37efe764574073e137fe685ea269fdc1982dd925e25b7d2fd8"): true, - common.HexToHash("0x0eed219e98ad9221bbfee8fc87108afa2a266a1c75f65cfb34133e7f846f6b1a"): true, - common.HexToHash("0x42fd1addbf3d1c70d6777148e02a40378b63ac52d2a582d2df123b80b5324f04"): true, - common.HexToHash("0x3ce147d4a2f33d58dbf82eab930b256d6db8d61f93aba525d6be4d6e73e621ce"): true, - common.HexToHash("0x8197bd15fb196eb2455f16468e4a9a3270cf0569452d3bf066246c8ddfe9ebc6"): true, - common.HexToHash("0x616a891ccea35e0cc9792dce09f354da117b5063d320dc563930070220fdb55e"): true, - common.HexToHash("0x45eb69ff95c400d9883cbc32643d71aa4f23c201854e508e982019823ac37ce6"): true, - common.HexToHash("0xb594429ae2090c1a00a1d3672aa12c7310f4af5be90e9f55917205c13d421566"): true, - common.HexToHash("0x9c6b5ecf761e10e93fc4794619696aa8d9d51f79b5f6d0550aa8ec5e8655b9e5"): true, - common.HexToHash("0xdc9b61360c39988fd99bc9f165a5251b06f2c2cd7add866c5a7530d3799077d9"): true, - common.HexToHash("0x6307dc2971a9514cd2e3330ee300d3fc4b4ea0f3e4a7c3862ce740652ac4a558"): true, - common.HexToHash("0x737ac23da92d3eef0096589b266463e4a0140c99eb4ea7099d6092235bc7f012"): true, - common.HexToHash("0xed3f3f6bcb9b4ceded7c7e86f041d72bd30fcdb31d7f1b9041b1a89d366642e6"): true, - common.HexToHash("0x16d498c0253890f713288bddf7d874986ca5b6e4bc739939796fc5f80a6fb397"): true, - common.HexToHash("0x6560f8f79a73aa2b2a6f21b0b92208f99d81f19a2e2b3527de8b16feb4847268"): true, - common.HexToHash("0x514323baa1bac53a0f6cd012ee8a224daf1c6b7d47ed874ba6143ffbf7102f73"): true, - common.HexToHash("0xdf9cf814a3ed1dfb9fa905eaaface7a42fa15d5c26639394155bc9973f8e1309"): true, - common.HexToHash("0xd5b539e6b6f33ab845371410efcdccc374f1e20acafdbfee175638cf1ed7f4f9"): true, - common.HexToHash("0x6a5c1e69a344c07e834fb30fffdc385f693faf1acaaf1460d6ea822d0a89e6f4"): true, - common.HexToHash("0xf87137ae599074001abde034ffe13e2ba2bcb8ae5794a2f4ff16ab85a3b4d918"): true, - common.HexToHash("0x5f68453e26aefd0480acb7bf050877c28255a473cb187fcf75173c9d6b84db83"): true, - common.HexToHash("0x25996af27bfa134cf8929a72a8ec5e70d8e96e2c069716b97f64b49d6fbdf836"): true, - common.HexToHash("0x26891739342fd7d894c7e3698975a40ee532f4b13a56c01bdfaaf172ff47843e"): true, - common.HexToHash("0x9334739ed9fb3ca424d5a0ba5304248143d89403332c66e1fb043aa006cc17bb"): true, - common.HexToHash("0xf14fbd85e5f5481b03af805dafdafb973dfd26d68d6b306d6d43a8dcf41f230d"): true, - common.HexToHash("0xb50f002094b6af7559076f4b3fed58592c96da1e7ba16a69b81401a6af8254d7"): true, - common.HexToHash("0x43d1170565620cf8b94a3627823e6d3027100f7406f2ec111b18abf959bc3b01"): true, - common.HexToHash("0x104e78dfd9e2117325f7c1dbdf7a0029077b9ac6ca88ea4584c21da34a55402d"): true, - common.HexToHash("0xf5738a6aaa83afec3b2f06c653a9071e2af516fd1fbdbc060c38f3557d8f4333"): true, - common.HexToHash("0xe657d73f7453eb9abda324113daa30381f1b550b9387d708a032708618b20f1d"): true, - common.HexToHash("0x2c2f730da29f66187777b233d514bbb54b567eea2e7ced9a2cb49907cf6a25d9"): true, - common.HexToHash("0x2cf03f4c9300251a4fd62368d55e6144756abe4641cf65434b8304d268e0354c"): true, - common.HexToHash("0x1cbcc20af5e8e47cb8e15b9e7c31ee67847b39c0d885560a5c02f23fe82709b1"): true, - common.HexToHash("0xc1d85d56d29a70d7fcf6e4ee7ca677d9f676576bde2a998523b742cb9c9125d9"): true, - common.HexToHash("0xf2ed100144c3c4878fe3d5dcdb8c31d8f973af7681c1078ae8b009968b01f87e"): true, - common.HexToHash("0xc8b7c24ef4b25560e1d68a1e16d4e709455bcc67f6022e2a6254b6feaff0a7bb"): true, - common.HexToHash("0xff38678c761f2e54c536e2e18f88af29dcbcafb58bb7e853091cbbc07da2de62"): true, - common.HexToHash("0x1ad296ac8d8ef66588788a80a2f67da4fdcbda29f254748f4d54acd51f165e34"): true, - common.HexToHash("0x16a6db6395f4042dab6507c2d7e22eb7cc2ea0039f85bad1ca8415a20740084e"): true, - common.HexToHash("0xbed7f673490b4d6850ce64afae30388cbe1eae285a19f3997316828e6f2e2f90"): true, - common.HexToHash("0x7d9dc582e7c3ece9e32a179338073bb12b9e885496ca4661d2ad41af8474c8b8"): true, - common.HexToHash("0xe8dfbafa76f7d490bd1f52854e627cb65e0860c4431a22b93b8b1d6bb1efdb60"): true, - common.HexToHash("0xe710ac832ac530ddfa3214eb4ddd97d02bd8aa4bf756fb03d548c10773a93baf"): true, - common.HexToHash("0xc41538da5c78c67d64fea643db6c9351e70051fe278f04720ae2f60512af7f56"): true, - common.HexToHash("0x83b897bfe7ec10f45277e14b8e0c108c067f80127b7005b4d73e93f9be8462ca"): true, - common.HexToHash("0xa0b2f8ba38428b0e03049a7597c61a540057b6ef2fdcf0a8f280eace5a82e43a"): true, - common.HexToHash("0x77f50e001737b9a173526ccdfad6d9130ac89e2f8ea04c416c747c71e892653f"): true, - common.HexToHash("0x6a2725366a76563771027e0198b6f42531d25fa818d2368057a14a6289a67ba5"): true, - common.HexToHash("0x02fa63db341d5f5bb051d1b89b2aaee97fe200fc71725f6c80632dc41d77ce5f"): true, - common.HexToHash("0x4157317cc7fc873cd6c7056222524991aef9389b431c2820ecd67fea1989d08f"): true, - common.HexToHash("0x479068ca7862faecdf85a21a29320b888950418c06494b328197a0b10b0783ad"): true, - common.HexToHash("0x160b8b8d968098ef5dc41269bd0abebe64f12a738257be5fb032af9557628c28"): true, - common.HexToHash("0xbd34ab6c86492ced0e832ccd283488d5db2ccc0a29b4108c54ed1466eb7832e8"): true, - common.HexToHash("0x42b7bcaff345f87993d238085ac23b04d382b8452b38c46f4a0fa6fd4f3a87b6"): true, - common.HexToHash("0xbf49031db50ddb942ee7e1405922f6a8d3f4945d891865283e49480b9dc95a7a"): true, - common.HexToHash("0x90693283e47564d4cc74f5a7956874273fd1566510eb6fd4d28f6b26ec18d976"): true, - common.HexToHash("0xcf4eaaf19e016f5098d4684a1bb8ccee7ba11b71d77df0fe315c87ea9825c04a"): true, - common.HexToHash("0x56178663575d66388c8b21ccc80daf1a020c001cea8e3bed2da6fdffebe4b802"): true, - common.HexToHash("0x98c3ead9d23c22b1c9aef2290fd0b89d65f87cff318f558ce612428c44592971"): true, - common.HexToHash("0xa3611cb9f00fd474232b44ce5096e30d805daef512b8b6ed7005849c283aebb3"): true, - common.HexToHash("0xa1e08a7035719fa04407d6a3beb27f9a1852c5aad4662bd757e4eb5c57540e05"): true, - common.HexToHash("0x1a6b825111bdba03d99b312525177fead6e0b70a6c5652bb053007df972dd73c"): true, - common.HexToHash("0xe38dfacca850be2937b268f236eadaef59d2ab8774f347739506622f10ee7b05"): true, - common.HexToHash("0x6963e5b536399a46c3283ab674c595b741a3aa10769733c7647a56c155a371ad"): true, - common.HexToHash("0x28af56a8ca92646c87e793258a3393116f654aa3e03508f5ab901c22882851e2"): true, - common.HexToHash("0x6f60444c19ce97030494c9d4fe983486f170db436e640b42e0a92dd321e589da"): true, - common.HexToHash("0xcb224d3825a86a2d257a0d1464e285d158e0f3adff2e2d07339aa7f954d1f0c8"): true, - common.HexToHash("0x4644018c4df9b6507dcad47f1301e8e65a879616db95c1909991038bddc5bc39"): true, - common.HexToHash("0x533ddd3e3e1e2c9a50c4594d20e364ce874312a4d4ccc34c3b1eac50b1e890f7"): true, - common.HexToHash("0x7219e883f91605af2d661b513c993025b9de44cc97515e71e22e75684170d634"): true, - common.HexToHash("0x43cf170a06d7d8063a69e001976be57bbdbd58b9d604083a77448f01a2ee4a58"): true, - common.HexToHash("0x9a68521cf44bcb61879b4239bba301e00adc00cd3c846c696aa9804e2e227a8d"): true, - common.HexToHash("0xbd3b77223191a2f1b6acb6f92aecdae336ec3f689805259d4f3120115972e8e4"): true, - common.HexToHash("0x57efbf7925454885ed2907d0d9dc6a022732c3756212366442ad5d2193653810"): true, - common.HexToHash("0x89cb7afa9aafef0c3659f24d0eb5d2e7042248acf9d45633789977a78d0da0c7"): true, - common.HexToHash("0xbf3dda581c117ceb9474a3cda106a3e7460e976a8a94e83153b5f31b0ed34577"): true, - common.HexToHash("0xdb2ad1de397895c1a1bb6f4d738d95dcc194f2a5443aa8a8bcf73825d0317ad0"): true, - common.HexToHash("0x41c0e204ebb37ad75c4ac8f54220521e23588e93d3fbb19108cbcaca749dd19e"): true, - common.HexToHash("0xfe387a112a57b72d423cb295983b7f8a4e2b5fa6349dbc5f1fe7c54cf2eb8295"): true, - common.HexToHash("0x3eb1ea5be0bca4a17c4ab58d5eb7e1efb85d9c1adef710ef71a23cd63fef588f"): true, - common.HexToHash("0x0a4017b02df20d1ce4b9e37e664b7d586270990630430fe9d75c7b925aee61e4"): true, - common.HexToHash("0x2e010c92cc9b9011f508a9eafce7c2c6d34a0ccacd54bd498a7a0610deecd5a1"): true, - common.HexToHash("0x4e2464cd7b53e39d298e8456f635ad2e6d66e58f10fe7a049506dd23909f2f69"): true, - common.HexToHash("0xdada6e038baa2faf8787b83b62ebe4c05ef1a93fa54b4913d13d75b30ceac021"): true, - common.HexToHash("0x98377e5e067651ce26e5de2532e4bea7f527fbb6b1a641f71ccb29010dad383c"): true, - common.HexToHash("0x16fda65f98859f18ac81dca5c0f8d791dff79ddb65f3304bc5e391cc12cb8f3e"): true, - common.HexToHash("0x56d0cc51edd37ff5f1ca8f66925c8b17d4af31e0e39a2d727a62f420dc676c87"): true, - common.HexToHash("0xe26868d1f0935af5b8b3da8f053c75f20d2d5c4385e0dd84bc16bc8936548e3c"): true, - common.HexToHash("0x3a126acdf8f7afb16ad4febe2201be8d6dd1db3996ec2cdf59e1b9b38d654c45"): true, - common.HexToHash("0xc3f3f8853510f6470ddbd9ce2671585e12d3e1fe68024847391393ef62fe9d45"): true, - common.HexToHash("0x04f88d37cc9f7583bb1b9940c0479953d3441c2719f256ddd3798ba12c19163f"): true, - common.HexToHash("0x9ad7dfb099fecdb4580fd6d702acacda0dde082c5ee25ca9ea1b59964dee2fbc"): true, - common.HexToHash("0x0cfe1432f88e986907a3c4060b48eeafc7694caa13ff29a8087a9981b413f4f9"): true, - common.HexToHash("0xed1d546a0d480a2609e452f275f334a86d93ca15a0d595815bd76e3bb2b0af9e"): true, - common.HexToHash("0xf38e467c64df532f1ed93678c01ba996063e659c5d0d5b5c1b66de06ac2f4fe7"): true, - common.HexToHash("0x7020b3fd7bcc56b1ddd15af28bd7ef7f95432f8b3413bb69367ff03c8949d2a1"): true, - common.HexToHash("0x4bd812b41b95000d9925c4e20ee2eaaecd61721ddb75de84af3d60f1790b5dd3"): true, - common.HexToHash("0xebd62b2d6e746311ccbced3bb7051167ef7626a7cc284ec3750d0f1f549bfbb1"): true, - common.HexToHash("0x2073b7a3d6588ee22d82992b1e13a6553895f643d502d3e06e5a7f5f1cd413d1"): true, - common.HexToHash("0x4f6e6877dd4d473d7e2cbd34296aad99e4185dd6b89b6972b602658302b32a18"): true, - common.HexToHash("0xc6b1e3ca1114902b88686b860b94c1664db43bbe53da97c375935bc12f7d7566"): true, - common.HexToHash("0x13eb8f73c8414df274c90f67cc4ca5b97fa90dd52f32d7727eee7dacbe2c1f8b"): true, - common.HexToHash("0x222b0fef91052920a319344c126e5e9b1ef6babf5556d9e0b1209adce784c358"): true, - common.HexToHash("0x7f63bec9becd134e011a02fe320b4fe00507a34615f2ea1a833a519d2d21db69"): true, - common.HexToHash("0x3cd5f50ecd653d679813cf8dd8b7f30b49f12df4b8c21881b920f6860c3d6bed"): true, - common.HexToHash("0x3943f4576e1e90e79189069f9447b08680cfd0d3b4c2c3213f546866b21b1c70"): true, - common.HexToHash("0xf74cd349f5ea9b73838b7f8b408adf671523c174d8b563f38dde371be09c6ad1"): true, - common.HexToHash("0x9770bf96b2b6aac186f06ea4f76ef9f74403f06b21876a6073538f58571980da"): true, - common.HexToHash("0x657438e320dba9ad2e38879c1fb2480bae9b05b3adbbb711e54648f16cb17fcc"): true, - common.HexToHash("0x6d6f0354eca5a32ea4955e4fe48d4746aaaa44319263766323dcc1a5cae3fd56"): true, - common.HexToHash("0x36bb34125460058b4d7130125d8258edb62a5dc68290060d392dd44312b1b5b0"): true, - common.HexToHash("0x7f0eb7071af68cd2dbb780deae1964d7226e524f1e01ac22c864847339e03f9d"): true, - common.HexToHash("0x44db26b01303bc224351cd6204bdacc66b68b4ab8df64f5af7d9877c8f5ebf48"): true, - common.HexToHash("0xd286249fe89671a8bd9edf9b8cc1757cb2eff62b77b89b5e09df5434db69b965"): true, - common.HexToHash("0x505e9003143395a60b3106bcd612a27fc4f5d5155f9b55628ea572543094cf7d"): true, - common.HexToHash("0xe4257e88d3b468efd290b7b634a685575ef170dcb4d19bb9897184add6fe0303"): true, - common.HexToHash("0x3c19c59d2bdf06f6eb134d395041913b38dce58cdd26334c9cc484a2b2218fc1"): true, - common.HexToHash("0x6f21753f95cec8c981472d2b148f73293e758bc57d1c9119e8ca1d42419ea36f"): true, - common.HexToHash("0xa44a6d600284c8313a470e7d2c766f3aacbe6a07d8cab084083e28401d168196"): true, - common.HexToHash("0xe0ea506809586757b1558ef45d8b6df5edd56f27650e18709cf041bb6e190376"): true, - common.HexToHash("0xede5daf53aeacc9a17a9f24dee24c1998f43563c0ee523567bf45df63684a665"): true, - common.HexToHash("0xae02aa5cf11105855b7e3f6126ffe58961adc6ea535a208b074d8c4cca32a9cf"): true, - common.HexToHash("0xf12f41fd72dae3381409bb6f43b3cd47649a24a32966a0c4743511c4ac9c940e"): true, - common.HexToHash("0xcb5a56e95e95112c621077971ba21c09507bbaa8c34a5077722c583b747383b2"): true, - common.HexToHash("0x93b7a384c5f61efc9756f48eed188e1053a7d8f5e9a90acbdb3e821bd1f83cdc"): true, - common.HexToHash("0xfe0bb83f7c0f1e12b87ee787c0263d025a26a0d2657b594c49dd0afc6bfc1ee4"): true, - common.HexToHash("0xf91d1bfaff1e8ebd6340e17c726742c52f005f80777582b15b8e19e136b58103"): true, - common.HexToHash("0x57a4da122f2697652292fd2fd6247cd0e080590e8fa5d740f81d0b5a4f87bb47"): true, - common.HexToHash("0x0e43a901869fd76fe9a41fbdee7add69005ae89a782820a5edd6f868ecf4a27f"): true, - common.HexToHash("0xc33b3ac97c36ca154bea0761664bc1c6ff145097e5f49d445e701d212a3b0462"): true, - common.HexToHash("0x6d3c81ae9df096221b856579275c71b045263f0f81123cf1791fa76c0e236030"): true, - common.HexToHash("0xb52a5d0be8bf726dcfa474ffca9ae1c5da9f68074ae353bab5be15633f776279"): true, - common.HexToHash("0x7ceb48c320112ee615ffbe60a05401cf351b7a622b2a5b2a01cfa16b658d9e40"): true, - common.HexToHash("0x1f80c9e6caf850ca08a612ee14e4e7db3fe60a733e430f343571fe77310e6371"): true, - common.HexToHash("0xc66dfb925730aedcbc462c9df67b34abfcc2da293ffa6ef08d0e1607313fbb18"): true, - common.HexToHash("0x0e2aa7ea8e9a2e48579c21af383a2879599bb013ca09020bccf4267f00e8eedd"): true, - common.HexToHash("0x50de7bb5ca1d0b15cd687c444f0cba50a1e90aa5770288e3e41857da91111937"): true, - common.HexToHash("0x077743eac705809f595040cd62e9aa4249e1c0b438e65392d16786b6f1dcf383"): true, - common.HexToHash("0x540e7ca1b9d9c10872e20a69943943e5bd08b6cafa56ff595e0906a0e3a8a871"): true, - common.HexToHash("0x61e78a2664997be6da8995abdf984ddd4a7d7a28c751824301ea3b35e1e9d826"): true, - common.HexToHash("0x803105b517a364d4689bf4629fb0c51a58cd63c927e10a539bbbf27336f4f606"): true, - common.HexToHash("0xa174d75b45a7c7a136db3e42d42ac77f07a0ef81eb76678732e7ba6d35c9c596"): true, - common.HexToHash("0x434851dad862801da932d6297bbbf8216e536479555719803d548dfe2ae8becc"): true, - common.HexToHash("0x5e10160e98c755583727de9fda42ab7c9add66e24d2167bdf90cbf03ecdac9c7"): true, - common.HexToHash("0xab9e24c7815404523a7eb16bca76dfd5efdb4a3d8fd2110e82421ce6cf6ae2d8"): true, - common.HexToHash("0x2ab2c1733b2054dd89258a5924ef7a94936adf6a9c5b367666e7b6eb87a0ea3e"): true, - common.HexToHash("0x2625b636b133dddb85f932e7536b062543359717550160c7ec8579f5d3ad38e2"): true, - common.HexToHash("0xaacdf6d60d7d25669f8fca6986eeb39befe96eeda628a63ed7a8a858f4f2e00c"): true, - common.HexToHash("0xe7b34e2ff3d5148a274d2271d2b4d5c48de0174e26314c57fff9eca97b78f5aa"): true, - common.HexToHash("0xff0decf268fdd5b35dcfcb45f7af40a895d0b7416965adedf6de51222ef027e5"): true, - common.HexToHash("0x21296efb7e5bf7550cd75391947f131079b4ba8fc5a02e6a613c13f2b1b4ed78"): true, - common.HexToHash("0x4149fc0e8a6c8f8d03447545f0423d5d005b9384dacb1723aba93893f37a9273"): true, - common.HexToHash("0xec07a9624d1de578ba53f731e8891d1b125fa10b67ebd5b9b314577c6aa0d2ee"): true, - common.HexToHash("0xab0af09f8c7181728097a8b8f8aecefe5b04a65ae2ac05049d8d8d37088fd513"): true, - common.HexToHash("0x33d4e9c67fe43d5e3c98f005440a34c2107e536d006a82a3f3aa69faa60243ce"): true, - common.HexToHash("0x10ca839114ddddd16035f22c71b420634a54d09b372cbb495b835e0bdd571b92"): true, - common.HexToHash("0x9ecb6b5b9c47eb76e6e049b986d23ef7f48b6a4149926848f497a903b30077c7"): true, - common.HexToHash("0xf661b3b285afa0f540113efc7394821d52618565253524b3b90d64968bc8e47a"): true, - common.HexToHash("0x76254b0e22f92f70bd62825cc3d748257bad206d440f1fef5b6c3c361215bfcd"): true, - common.HexToHash("0x1495edf6746cf521f73762d131cfd814f1a718937dd84467293caba9d22120c5"): true, - common.HexToHash("0x64ebe584e91fd7839127afeca9820a53bb7f3956b322ddd67ee0b093a8c25673"): true, - common.HexToHash("0x2a65dc25faa4ee668f10e3fdf896b4da6c61aebd713a9e66b022b88829fa603d"): true, - common.HexToHash("0x6d0684c8bd2d3e59cfadbf6901bf138d5c9e43b99a070bce4554416e8c49cdb6"): true, - common.HexToHash("0x681225c7a0b25a169bbcca3e6f17f4ca7a752a68c7512757bf0cbffc2ccd7513"): true, - common.HexToHash("0x32fda2ffcf9c5aa68de2fa065a7066dfe30c3773a01da2e508b383819520e18f"): true, - common.HexToHash("0x2b196bd9b2b10f3fe43541cc5e341389f28919fadee0c6af6353ae2e17865bcc"): true, - common.HexToHash("0x243bf5304c7c92ea86b0eb1cda3ba5f26e758cc11f045c4bd7e2554507c6723d"): true, - common.HexToHash("0x6a5e7c00d9a97841352b0b86a1ce1dc93e6e7847ba69057b37d940ce5f4dceb6"): true, - common.HexToHash("0xb9fe1634ec8fb70b8b87d00fb1df63ad7a029ce3843121b3d03f902ccd0c755e"): true, - common.HexToHash("0x18699cca9fe93d7199ce2dec625bb7862a7cf49b1a8ee485753cbb0c0fa70fa7"): true, - common.HexToHash("0xd6a81479987917136f5920f9cd4b206ae7f5259ed9fb92ab1859a0da44978955"): true, - common.HexToHash("0xc889e710d33386fb54e5405dd48c9cc9566c5b07d4d9f22989086049645e89a0"): true, - common.HexToHash("0x2749cac0fec504d0e1df4e0a81cc0588d69bbeffc5b9b6a0bd514df3e5434e10"): true, - common.HexToHash("0x6bfe9ed2858749cb82f632982aead659d3fcd92278fd90780f6890f3db02f694"): true, - common.HexToHash("0x356bba35ea02b90aeabdf9f6e2b666cadf03e65c600484f9dd51ca98ac2a5dca"): true, - common.HexToHash("0x0b7e4f00f50526b44732044fd1d775c7f4b35955aef3a0ca4d88f35f52c058b4"): true, - common.HexToHash("0x8f957074511a20e90e6316699e35cf94d17110375dd038d47ae701750194fa8c"): true, - common.HexToHash("0x3ac13e4fb9927aa3c8b8a7f220407d610af00f989e68972567d171ee73633257"): true, - common.HexToHash("0x9f10826c7530525b70cb0f2006f708e9273db0ad9e4ec382ec68229f8494c98b"): true, - common.HexToHash("0xe5bf072288f466ba08eeb3a81b0862efbf1548109db20d54d0fc9a9a9e8397c4"): true, - common.HexToHash("0x1444300f3df49252155a5f0ceb2d5338dc0a8ace3160fca4b83b4f9aaa5d2467"): true, - common.HexToHash("0xf8dbb7761c705d9d4d543a2cb314fa25c1d55f33a951975156094e8e623a0a30"): true, - common.HexToHash("0xb6d94d2139504c77a81987c70879c4c0f230e444ee9b45c3d54ebb885f0baf50"): true, - common.HexToHash("0xb4d6c0be04f560d60cfd7e2d34636a7e4028343980fb40504b81e0650297d1ea"): true, - common.HexToHash("0x7e3817341fba172916c25d5a2e4568a7552cd34b85f9e34031e9373ea5763497"): true, - common.HexToHash("0x08dc5f4fd3eb445849ad6b3f4bd04372fe2a2a1d01a2f211a43b5e9f62bed9b5"): true, - common.HexToHash("0x276fa74cb03cafd0e3224abb2b5056369a10ef75b719a5c4f88fcdab2efea283"): true, - common.HexToHash("0x82d660958fce08ae28b8e63119e9bddb1f7b55d41d9c19ce719e2fd96483d442"): true, - common.HexToHash("0x55cf780da098f730260a5509b50473eb54da55ee4fb38a9bf644edecf25e76f1"): true, - common.HexToHash("0x62cb93706e0fb1501ee7bfdf4ffbb19b2e229f37afa23b85cee8a4fe5b9e59e9"): true, - common.HexToHash("0xc462996582b9ebca662da4c91f77f78cf725aacdb6dc6a0f5a8767f6fb475b33"): true, - common.HexToHash("0xc66946c9a3b65835be67a83369c464d88ffaaa0234cd43e3ef455b4bb7a0c305"): true, - common.HexToHash("0x164b5499ea8b936ae2eb16d93844bc17deff5566d064ddc624f68d161e34b972"): true, - common.HexToHash("0xede7ae1463117e450fd01c5fe695ee11ed37c21ab7df70474ad156f5d1cd130e"): true, - common.HexToHash("0xf3b7835b4ff10b5092947cee6c5af71f46b6df90c05901226d6bc140379f0e9f"): true, - common.HexToHash("0xccd41d46c507ac0d2583f651a48b2113d2116f71861afc03e2615732ae6cc74c"): true, - common.HexToHash("0x6a93c6a937fa8d0d4148fc0b06cf9f6c7bd0edae9d631363b88f7814ce9257cc"): true, - common.HexToHash("0xbfccc99ebd546b0b1aad51807f80a8c3908d861b3d9dd6b51e1387b5812e90b3"): true, - common.HexToHash("0x3ad36be4fb2319960a8e3be3ef43096f27edafe8b03494e8ae46510ffec8d84f"): true, - common.HexToHash("0x05e2b432d9160e71269863194b743aa94b1401b2cc5aa211268fe3517d111c75"): true, - common.HexToHash("0xef0aad43155194d9c10ad3ecb6a18faa731a8711d6450c9b01740fec32cb9e30"): true, - common.HexToHash("0x9647f207feab09858a264c4dee1a3cf151c9289d0ef7ae5963badac93a3faad5"): true, - common.HexToHash("0x6b09a5205a2aa95b95f9da0e58ec5d2a3c7704757edf4ea0692c330011bbc292"): true, - common.HexToHash("0xdb44a66e2aa2118925db5d34d625b0506c7974d094b9c6b2489f50c449eb22f0"): true, - common.HexToHash("0x1c5b46d77b2b2f06676a83cb31b8264c06c05f5a13e789d177dc98b6968634e1"): true, - common.HexToHash("0x5a00c01e6b95926f68dfb3daa4ff3cbb4ecad43440f7d60eb7bbaa9761e576f0"): true, - common.HexToHash("0x5f6ddbfaeb2f67163364c242d76f5c3c5b4aad98f811c8c853871b678c12abca"): true, - common.HexToHash("0x5009fa52f2586a6e030573f8b1b3bd9e64178438cabe9b5c7ab838496ed92859"): true, - common.HexToHash("0x682d901ebd0f967f83d39e8c7f34e197d900ab644f650aa9e55382f00a8b3964"): true, - common.HexToHash("0xd7d9cc1b8c1f4ed2c2024ae5918cf91e5c28120f29af1d51530bb5c39be07e83"): true, - common.HexToHash("0xb5d0b01b36be10167bb64441aeca792c6f46230e2f0b8437efcb56ab2461b46b"): true, - common.HexToHash("0x5bb873af95639846c1787278b66b9a5db19bf416bd52393e496ed9ea99a79501"): true, - common.HexToHash("0x4034de8dcad53ae0cfbaebde8c3fb845d207044148386e1d4adefa98b01efe1f"): true, - common.HexToHash("0x1e33c3d72aa874e7302526a2843ce43af0cf90d74f79b830d21063219d0883eb"): true, - common.HexToHash("0x522e3e6f26d96ef6364b16c1537b173f310ebd8ca4d6af61aaa46450e1b63230"): true, - common.HexToHash("0xd811eda05df28d9331ea2aa346a23a7feba07c64d3937b59cd3b2d41e793b5a0"): true, - common.HexToHash("0xbb01df465980ba3a4c0d2003a5a54a601c83491e9a0482b51e789c95ff2e20e9"): true, - common.HexToHash("0x9dbc226d884f14541188aa1ce7dc191ed2670b0b761b0d23453286e5ae78eca8"): true, - common.HexToHash("0xccaa3dd31494c5232c0e75abe13c8f496f3091a3caa8ba20f5be2889a1c10446"): true, - common.HexToHash("0x83d94b69a6e0c5977eee2e4ed78edce6d95db60eec5d7b017ebc30aff487ce6a"): true, - common.HexToHash("0xa27a92299da4980dacab1c5c107b16bd887dc0cc90287d31b8fa0192e193a84b"): true, - common.HexToHash("0x2086117e47131ac464339ec3b2da737d8405a977a722cddf53030410bc4f0d54"): true, - common.HexToHash("0x9c5b9b1fd7349f0819a3ca392f3de694a01f6a334495faba48368c1fd76e8e13"): true, - common.HexToHash("0x0dc8271e6ad57bf66d76de3086a61e72436cb65f9e143f6fa20b9157293fee22"): true, - common.HexToHash("0x9080e30cf52920a4686ed636adbe93db18b9ec4b12919309b41f91baf3d7cc87"): true, - common.HexToHash("0x39a0e8a224820aa40bb6c2c19c064e6d8fd04d9120a003e71164e3052523ec3a"): true, - common.HexToHash("0xab30fc63b026578d153dcef885f52da4a315305e4a6fecee7994e9d5abb27cac"): true, - common.HexToHash("0x6857a13d184c378056902e57ba99bd2a73de10fc3eec54429a3506ae4d10683b"): true, - common.HexToHash("0x14a6830bb9187a6cc2808afaa040781d18d76f83b030f844b7cf75a7e572868c"): true, - common.HexToHash("0x1952bc30f3084d19c37240e85761fd7b6e91c1225e16c21b65e67af2f942bc1d"): true, - common.HexToHash("0xa69adf754191edac000b6fc8bdf19f7091a2c9aa1ba56bafc296e3bc4b49079a"): true, - common.HexToHash("0x2951c7261f4c11fc70fe1af3f6d3d5504156365c356aeba5c8de419affaad46e"): true, - common.HexToHash("0xae5feab9fcb9b72b694553ce668c971138589e9435d58cebaac85a2cd25a0b85"): true, - common.HexToHash("0x6127425842272b48a67a8be78c2fda4e74fd71123d36ea68dfd14ca46c9c6561"): true, - common.HexToHash("0xa6d494b8b2519a9b4e79299e84f59109e10043ca187d62d5dc8db0f85e278c2f"): true, - common.HexToHash("0x37f8b1e5d731253ec4c403777d2195efbdfe6cdc1847ca2cf29a013b46b16907"): true, - common.HexToHash("0x3382930ab330692c1c9d6e8ac06c3deb46ed766cf520af2d579b609309c719d0"): true, - common.HexToHash("0x65de58f3a0d4265a3077b7a471fc866e4851d497903f009e070d826bf6a7996d"): true, - common.HexToHash("0x07d53054b9e9f587157a8dcafc4db866c6d9b61b18ba786c14376f892b5f5eb5"): true, - common.HexToHash("0xdd07ef40542d321b87ff59e62cbbd2607bdda53a7d7f477c3e226c42b9c6bcdb"): true, - common.HexToHash("0xcc2285f464e4e9a116c9af370286d55ba9a89699ca33637a442287512fdcfd66"): true, - common.HexToHash("0x9e8bb157664b9a6152a74b632296651bdf03d50048a97656c2b1f514dc54229f"): true, - common.HexToHash("0x8d215bfa85f6aaf56412421c39b87cc45819b7ac19bbccb15ba07aa7a0b79805"): true, - common.HexToHash("0x06b07d10a64094d3c81344d11bc9a2aff25a65d865c150022d632d0dea54ff5b"): true, - common.HexToHash("0x29fd9aeb7251b27f21eb40f84271a4cbb8579ba79434d19e3c41d37ca9f8d0fb"): true, - common.HexToHash("0x641a5de3fec03ae57f6013de9f874a7ca95457f057d95121eff82abda5916af7"): true, - common.HexToHash("0x5ca4a219577aad1d3e5c0f523ce4c459f66ac71568158bec8fa3c9bcf0d73e3e"): true, - common.HexToHash("0x6fb7f1bc99e40ee5df6c066635f5fbadc8c8942b7c9e8759d1cf1fedd99c0beb"): true, - common.HexToHash("0x25a95992b2a1162785292c3b2348e4fc040b5d7ae2c5b047af9a744a245f8607"): true, - common.HexToHash("0x8ea66b6aed3940ebef0b563adee4918e32850bfde879efbbdba50fc93d41f9c2"): true, - common.HexToHash("0x35f5ae62e3b5a2a0c89a221e3115bf916071b66b56624fa7d2a27f1740f703f9"): true, - common.HexToHash("0x2b63639d12999b0012ddb24aa8ed3f00884a2c9012f1f31fe00d44237e229a82"): true, - common.HexToHash("0xa552767fde50e15a240e0236cf887de7387f88e7712ea60efa2dad877517474c"): true, - common.HexToHash("0xc95eb005865f5f945084058c5546c0edf43e702b1103e45849686ac6a2d3398e"): true, - common.HexToHash("0xbf7eed0ee3f3eb57592ded3a43e244409def23c2b32bf71ce065c5d99c0506c3"): true, - common.HexToHash("0xe774c25d1c035cb208ec1ec7830b7347c4771d9236dd8cc57f7b5948e0f0d7ae"): true, - common.HexToHash("0x0f0689536f27ddab1aaff99dba0d898a4bedc8f51bb2d2958248ccc93b61f0df"): true, - common.HexToHash("0x89be1a669ba1a14d3c55eb0cc78f24a9af51ff5e689771696a314f997fcf620c"): true, - common.HexToHash("0x7ea9d805f2a8d7fac9eb944aa2e2239b4ead138c7d95812000f75f6357a82745"): true, - common.HexToHash("0x03d3302e1a4ea691942f1898b12624242159985082354f8e0c98e96d7dfe5ce6"): true, - common.HexToHash("0x5cf80ca90c62b08a90d972693633133110999706a9e4c7a94084ded33fbc6f22"): true, - common.HexToHash("0xa5ccbc97d7364965d2df89a66d6fbc8e1f960803c9473ef8c16d8a0e9e4a390f"): true, - common.HexToHash("0x1ae14a098195f1fc83016a6a60c418709e2a85a0b23a47a502bf77542ab808bf"): true, - common.HexToHash("0xd3b4ec989d68102f37f4c371688c70618f38abbe6e5685b9ecb8f63523f4bd9e"): true, - common.HexToHash("0xc8022129381f8c27e6da1bd0cda2f059dde503b90e18dbde5dbbe0053d99d801"): true, - common.HexToHash("0x566cd51da9fcf71c7bf035ed8b64aed58354a081aa3e8ce544e29e7dc97496c7"): true, - common.HexToHash("0x54c242b87a1fcb5579b0587932759c9037e3b765a6b914373fae6a7c1a7c37cc"): true, - common.HexToHash("0x5153fab51026be1cb7ef55bc7cbe8b9a937456d2b9885fb57e0e725626a6fa52"): true, - common.HexToHash("0x4e5a95eee082291ee824a6067893bc2bd7b90adbb758eb31674c1602c259d568"): true, - common.HexToHash("0xa1cab11fd38488b94b567abc5255b52c447317badd4bb9f752c726a7a65b73e9"): true, - common.HexToHash("0x71ec0844ac48c26d8f6255b0900bae97f3f2c810c70b4eec8ba46db39513a9c2"): true, - common.HexToHash("0x420ed4d807f395652e30473c965089817a84876a54d9eed2c85190862f1f60f0"): true, - common.HexToHash("0x8c099d9fecf63b980f252da271988ed8ac6a75efc244e694543e98173f08e6ce"): true, - common.HexToHash("0x7c6820afb1bf35d4c67572c1b83c9f14a205eedbabd483623a36fd86cd0d6100"): true, - common.HexToHash("0x04a7f14f8fecd66ee97f1b8a1311bc1c79a8a635a5b3d8a02a057d0fbea8728a"): true, - common.HexToHash("0xf820ea58d8cf5ecefe4dc371d6a559278f782d9b235f2e235954bb806272d9a0"): true, - common.HexToHash("0xd452f178c9c96923b0a5cdfc92108a0f14b7a3b079554ef8632177ff49115279"): true, - common.HexToHash("0x6e9a82b0901ce7566ec394579681166b1eee5d0f12fd85067106d3db288f303f"): true, - common.HexToHash("0x5eb4b56a7542d1e672b755be4099dc84eaf5bc8756c12057b08efd7706a5d7b3"): true, - common.HexToHash("0xd67a118955a1739285ba5c223ca295c5e13683a9b5551d5ee2a8637b2ee7a320"): true, - common.HexToHash("0x8d42643a107be64f7dddc3a893c643356926a1fa524ff7f1890412390ba5473f"): true, - common.HexToHash("0x6ba33dd115d1bb32283a505cb371e55a6bdde67d50eb19dfad7d3323b5750d84"): true, - common.HexToHash("0x2b89b2e3f9e71822f0de0e7b89e25fb838d352154a45e173cfd3b637664f3be1"): true, - common.HexToHash("0x59443b10af668949c0f156f081034b15cc3a0b83bb740f2830f1e8ca9df44a77"): true, - common.HexToHash("0x9a57e6a6fceab6e9eac85302536d1fd1cd79a0a2aae0e54337358090c1d08a20"): true, - common.HexToHash("0x9d9ee9aa0e8d2a9227cb531e564c626d2ad71315a2bd2d2ee420568490487bc3"): true, - common.HexToHash("0xd9995cffc9d1951a184e847322e47d11aebc141764232f6193d1d01702f3bf3b"): true, - common.HexToHash("0xcb409c327dc2b70ee7622e10c83177fd2fff2db8b8e6225d6b54f09cbb61264c"): true, - common.HexToHash("0xa247ffc39ec2e220a9d4a5a9074a91399ecc495e0f03e9f33e670e7623f153bf"): true, - common.HexToHash("0xc6dd3a017daa99e73126e75724c9bfdd1eda74a339115d20e0a9da94e9b6cd77"): true, - common.HexToHash("0xcb63c599adcfdc4554df78e497630906a41c50fd4d7cf3c444097ad51528db19"): true, - common.HexToHash("0x630b8191fec921d1a987b90c6739bab8359f8b1a337a30eb449dd696cfcd9c4e"): true, - common.HexToHash("0xd9fca3053d7e34a36b0da1c43bed371b0c6c33794d41f9414001a3cbe9165f63"): true, - common.HexToHash("0x19d0c5d1cc4fc18393db901873db99224789f13c5c6be4bcb1e3fe60102a6ef6"): true, - common.HexToHash("0xaaf9ae5a19b4752aecea568ae15e52e8672fd3232df469b0efe6ae3517dc1a9c"): true, - common.HexToHash("0x964ff1df43da6aa79e2a6499ee25d225e865f2123deb506eea43d57e373ec516"): true, - common.HexToHash("0x499600f6206d5e95f4518a59afe979d02f51fa0654f15648416d918066e6ea9e"): true, - common.HexToHash("0x3ef2659b39c593405c9d3f5046b218a05041b47fc3b6ca2090d0b57c178eb525"): true, - common.HexToHash("0xb038ce5e94c3f34542fb22d453b0243f15676f083e4b76d8ab7899c7cf9d3357"): true, - common.HexToHash("0xda13d26ad42d78330a43a9db5726e4720f61f6779948a186303630d73d543d7f"): true, - common.HexToHash("0x4b38d655ab423fe573b8337c53f875a438c1f14b236c3c33be1b2d88e1da024d"): true, - common.HexToHash("0x5b1ab9dfe2d25adda06d96e2ad6f9bee13a615a2b7007224cb6539ce889fc29e"): true, - common.HexToHash("0x007d3d07bfe5be13c863863400ab48f4eb318cbdc4242b718e9fc6962f729ad9"): true, - common.HexToHash("0x3f4254c4d14e41ba6921c020d48e50b40f1348767940851dfb5bdf40cb83b4a1"): true, - common.HexToHash("0xd02acf02d5e1c66d77022b10c9d594c12501ec213b1f58a03ceb14e1fe16d750"): true, - common.HexToHash("0x1ab63acc37ecd316a63435a4aaa7856b80c5b2769e09b6a8816b9d32aafd5f35"): true, - common.HexToHash("0xe4c2fdaf14dc0d1d433d93bb22698258c87d0c08d5861e79d438ddb59490af2d"): true, - common.HexToHash("0x06ce26923f69d8a6ee7a61683cc65ac14dc191f7dd90eb025739d0d9f4840c82"): true, - common.HexToHash("0x480d45d9d0cb6faff60d9cabd2e5ec71f81336321fd12513faa3347e5a72ae55"): true, - common.HexToHash("0xad4aa79f1b6e8349548bf6bbc93504ad2cb07cd885f95cf2a2fa5f423f9a30b5"): true, - common.HexToHash("0x5731f237f67ba994e10a4063fd5af92f0b1ed6cde096d2ffc3965f253a52ea13"): true, - common.HexToHash("0x55078a838ad72e44bf3d9af9ee6a85c5086322ec66042b443acec4e13ef94885"): true, - common.HexToHash("0x0a8cc29f9ac624e1e5196f66e47db3878d2e5dc96b06973d77ea11c55af0a830"): true, - common.HexToHash("0xd3cebb129a67e4d88c892b06bbb1b8150ae9e6333018242e17c52c6a6654596e"): true, - common.HexToHash("0x1d4232a2e3db0c3148bb8a64c2cfebe5c5c380ce9f83a80401a46afaae7c26bf"): true, - common.HexToHash("0x127f8fe1e8d9cb277bbe6026387d6246443811bf9342cbf2bbe07780b21a7442"): true, - common.HexToHash("0x093ea8fac664830c981604c38815456a053a5f38fbaa1eed399564e0b08ca91b"): true, - common.HexToHash("0xf51248daae118fe87ad035fce9ea75ad19559b4d83ff97940db1d88d5411b3fc"): true, - common.HexToHash("0xc014df97da60497073fb0835133af2413795d055423321072ae6ac190cc0a15e"): true, - common.HexToHash("0xf400f540ba901a71e427da324907b076167df7b8000afd5dd7ba94d948ac1947"): true, - common.HexToHash("0x9e3d9eb8b9b81faa7e638c791370af6b18e8fdfdb8e8ea57624f0c2297b7172d"): true, - common.HexToHash("0xc9d7bcd8094496aff4b1591ca2b0140f92e98ee48fd6b5d5fd0bf81865eb38a6"): true, - common.HexToHash("0xfd452ac3f82d595351a99e36ee5056b0e44b51c8819e0fc8d5dce7288c36b35c"): true, - common.HexToHash("0xd90851f0242ada81dc03f55421d828ba47fd0969e10b962857e19f0c8a9f4c37"): true, - common.HexToHash("0x0ad729832f336dde6d94e920850bf9342162d60e618cff800dc8ce2b81a42c0a"): true, - common.HexToHash("0xf4c5123585de956ef151775531d0b019f5deafc3c16f09db297e4c35ded17db0"): true, - common.HexToHash("0xfc736e84f02dfae27ee6b101cbb65cd2161e77d7fd33ca71f11f97a40aeb6863"): true, - common.HexToHash("0x13d05500d47b71d8f75de3e9542f9b3e5dcc50ea31c6c687d553611efcb8048a"): true, - common.HexToHash("0xd8c0df694cb077ee526e112411d39391cabf92917805e365d1c109d5627752b2"): true, - common.HexToHash("0x98dd149a3b1bb40b1b45c32b6cbdc078541bb92c2557c3485098c35668ac66c3"): true, - common.HexToHash("0x283ab9dff58e8b2b446bcb99ea6c2ea2de822cd2e1dee9d5b40ec9533a22981a"): true, - common.HexToHash("0x04fe8bed3f2b499188d89789b35627cc1a6c51f3692c94c604a19d6694f009c9"): true, - common.HexToHash("0x00971d452dbb8d14c4e931cbdfe9023778456ca936ddc948e62c17a434d58612"): true, - common.HexToHash("0xc890304b70fdfc8bad1581933952b56a98de0bd913447d2c84424d8546e63036"): true, - common.HexToHash("0xcc5d3d5b0798b62ba3f70d223baecf357ce4d0b848f8b95ccd24513abc705ba0"): true, - common.HexToHash("0xf8ad2fb11859a442933976b68c3f5969a3a0300dd63f0be17dad2f48044a95c8"): true, - common.HexToHash("0x6c679f2734e74bc6ca5d2f1916a7300b367e46b7bba5729400eace0dafbeb358"): true, - common.HexToHash("0xfbb3a7b282be832d401aa354a8e1a0be1764a234fa731d77eb1cdd6a24a36ee5"): true, - common.HexToHash("0x7c9bad7a860e783c4af9ade9ee9358aad62f7dfafa5a5cd64018a132821c6e6a"): true, - common.HexToHash("0xed53905e5b27402666a9346be4fb5998ee4a8005e64edba987a6934f1939041b"): true, - common.HexToHash("0x985706d1a2be4ec97b953024a1d2d2d62747d3421795a9f69fd7f356ebbf318b"): true, - common.HexToHash("0xf2d313bf1369e8b36e733fbc0d83f097fad19b1ea70ec672c2adc0a6382e005a"): true, - common.HexToHash("0x1b6b59ca80bd3ea2d7024dbfa1e90e0890090a32e55cbb23fca252c113f8055f"): true, - common.HexToHash("0x8e2d939195118bc5f91dd1492b3a02aacc0d5590dddd29a1b7359e358a87546e"): true, - common.HexToHash("0x85c714644ffe7d908081b09c514e60fb8492e866c2cc7438a95e9feb3738bbd5"): true, - common.HexToHash("0xa1fedd246fd07f827ab3f500e33e72086257a59e34ba4bb8b38800923c182cd8"): true, - common.HexToHash("0x17399da0505b6f5589fea888e8b0df6a69004a9e62c10faa110d01335a5e067a"): true, - common.HexToHash("0xeafcc783002ca4ecbeb3bbd57d9933038fd262fdbb0aa3f45c344bae6155919b"): true, - common.HexToHash("0xf3c3d8562cb790676cbc19e929713b44099d35acdb034aee7f16edbc2d96feaf"): true, - common.HexToHash("0x7a2821f2faec9b4c110f591e7d9e6c1910f5445e22a3c1300d5f48531ecaf97d"): true, - common.HexToHash("0xa08c27a81b33b2bba69930ab1af32de1909e66f1b632616821d0861cb2056a56"): true, - common.HexToHash("0x5f9c5c94a486e2e35e20ede3e3f80ddeb905fadf98f5e5cc937097d7db7c7c4d"): true, - common.HexToHash("0xb4b172bb9b45373edbd6ac63209d2ac0f44e517814955e65f2d48bbce6392081"): true, - common.HexToHash("0x9702e9161e586940ad83306d3c81614088c83dc84aa2514a2433dca37d309c2e"): true, - common.HexToHash("0xc9b4576f1abdf46293382838f6cb5f95fc8b7c2aa7f4bd17b5ba619a5783f776"): true, - common.HexToHash("0x2cc73585108283d07707948d5947679a7d4119679b994b69f2a01aa67893302f"): true, - common.HexToHash("0xc504edda2bd71df7d603443c69bba00722fb90ea868815102c151ceb295c3640"): true, - common.HexToHash("0x8bbd448ddb2a4640119aacf1035bec4f7f4007e3d5a130cafef3c307252988c7"): true, - common.HexToHash("0x275046f1270461177fd2d9735ff4faafca1b568c84ab86535eca099ae976931b"): true, - common.HexToHash("0x4d0ade7b4e2afc7edec1fead492b951b136efe51a81a54a63a1bd5958000fa90"): true, - common.HexToHash("0xa9b0b73562bcc8f7f947e1aac5083157d9a7dd7fc425ec8fbc2f0d9dfbf60862"): true, - common.HexToHash("0x6b5db95cc840e68213f4616fe8d69097cf4e107f5595c53f33f5719b6d8cc569"): true, - common.HexToHash("0x039450ffd5892dd1961e138845615ec8a7dc1d55afa6ac362280a8d611f0624f"): true, - common.HexToHash("0xdd33af4e6fe42d134e2608322131a78efa77e2dc5d7d4a62f73f1b70cc4412dd"): true, - common.HexToHash("0x27228f8d011e63cc1db3520c0f33a83f3b00a9a9d181841087a7beb53311c010"): true, - common.HexToHash("0x1578237eae41ff500e7ee8c0f668591f9360daddc81aa50dbea8df8f3cb11f0b"): true, - common.HexToHash("0xef7cd93c5386949910539154db1cce00d5ec07d82d40c6b59bd5c24a9b962c8a"): true, - common.HexToHash("0x04699d2a1c10b0911ed5da34e29c758c16a51dac7dd16ac8b1aa02f3b99b37f3"): true, - common.HexToHash("0x28a95e5aeaf34fa9214b9e03c9c4a90a8676cf280d84ece9b6be997753d172ed"): true, - common.HexToHash("0xe284e6ac71803cb79a3d37b612d74f36226a7c54d3a6e6f69306aa3eb963eb6a"): true, - common.HexToHash("0xc7af1ab831695b65a9adee1fa7507306f8a97618c3299e4a2529dd3e1e7bdce8"): true, - common.HexToHash("0xb102e34cbcad74a1856c7547d148c0af606d56cf7ed6eae9ea3c69ec723af465"): true, - common.HexToHash("0x04986745953dd3bc3cc5018e528d59152dc629e659ea7266665e47c56e2aa1ef"): true, - common.HexToHash("0x1ad47156c130cb457e09c05d695c11e916ef2596f9b82c510e52d55ee4479c58"): true, - common.HexToHash("0x45d89dfd4163a3eaafaae1300af66d9e812624a5bf77482cfd18e98744100719"): true, - common.HexToHash("0x1eb73ccb8829d460e4bf09924a7e6771477dc33d5cbb30a7cb3c5296f6e0e456"): true, - common.HexToHash("0x6727b8e162ece465ab5b83be9d29b6a281680dab5d2e4b6f63934a5c65e06a1f"): true, - common.HexToHash("0x235961b2929b344a14ffb89f4a3762cb7d4550fb53a82640f4fc4ff767c73b16"): true, - common.HexToHash("0xd6de63ef54c464f97838b00345890567b37bebc31cf913a222f3e4c449a5bd5b"): true, - common.HexToHash("0xd47c5180e489ab2bc6de6bc28504f0c55d469c25483c77396bb7f083401dd258"): true, - common.HexToHash("0x37b4eb32ef7a80ee88562e0277963a83832cd3cc04cdb99a0f86a175caa977a7"): true, - common.HexToHash("0xda442585290941fdb96aeb651ad1ceca9eeae5d0b0006e59d4aa800176f59e54"): true, - common.HexToHash("0x77c7caa71b1a209203667c06fd0280011deea0cb130bac750caac5fc09cfe040"): true, - common.HexToHash("0x8527776af3a16d6a9e428102dc396c32f6985863ea81c4b274fcb3743cd680aa"): true, - common.HexToHash("0xdd63054d87619d577b87f54f84080daa101a46e913e01124f4658aa0ad2ee54c"): true, - common.HexToHash("0xfd6c21718a968f0028e43bbd64b8a13b41bde762ad95174d859ad7a7fdfa5aef"): true, - common.HexToHash("0x09e9affa4d722225507b4034055d4aff881cb28875d9b8b9375ff00cd5c50201"): true, - common.HexToHash("0x0c9040f230e4d5e7bdfc0deeda0ddbae66a8c4ed5297bcb9c7689afabcdc419a"): true, - common.HexToHash("0xbf502cbe29ef5843d84bf47713eb07f0be21e39e9a3c75402666a7ccab5c7e43"): true, - common.HexToHash("0xc7a5c038229ec5b784b3974999069b67ade4eaa46e904a50021a9bcc5063f4db"): true, - common.HexToHash("0xf15180eb66c584a4821f1a92c1628123b04c31753ce49c2b1952a3b1672fdb75"): true, - common.HexToHash("0xecb191cb77a8850464962e50f9f1bd68f1d88df89164ee90887957049d718c06"): true, - common.HexToHash("0xa216d803077476f27226036164b4d166102920d07ec5d51a7f9b22627b311644"): true, - common.HexToHash("0xc38fbb8a520f6a3c13c78573c2694053909ca210783da5af86dc7923e09c9bd4"): true, - common.HexToHash("0x941a67410404b38fdcdc708f7d73265babdc633ef7d53cbfa3ed25531b471cf2"): true, - common.HexToHash("0xeb206c4548801ca806c6d52ac25774d6a8722bae9f04ec5ef8d6136f727c50a0"): true, - common.HexToHash("0xc371441eb283afc2032370d5ac97eaa082e845f6fc7ab1378381406ae6b01204"): true, - common.HexToHash("0xa056edf067dc450fe8ba1534eb96d441455a7d10a0235baf0d89b552b1b34995"): true, - common.HexToHash("0xa3ac20c93192058cdcc6925d0824f336e3e05f7431bbd5c4e1c738f853df6fff"): true, - common.HexToHash("0xf8ad1790d3b6f2ea145b423459a8b3e6c8fce85c2d97d22050eebb3f4222303f"): true, - common.HexToHash("0x273cee12d01f5a82bf7067c89693bce08ed21c8d6aeede240fcf5299d432f8fe"): true, - common.HexToHash("0x6287d02b6ddbed47d44bccfc61705cef3eccc3f3556908cc79e2df1cd2d86363"): true, - common.HexToHash("0x75428c44acc15fd58b251fdce4c122908069ac705662ee62d48865bd52922752"): true, - common.HexToHash("0x1d6b013091aebd7d8c00079033abc7c46f12ac2ecd7f9c41dd07c33d25b493e0"): true, - common.HexToHash("0x2e65ec627c3c68b68bf29ec88a91f487a473de991d1e467848ae428cf15a2939"): true, - common.HexToHash("0xa8990d542ed3685b24e2fcb03c20326ab3bcba670676d815b57dcbea52bfb89a"): true, - common.HexToHash("0x054d913c95c4d6ead035f051d5da7087cfadf5225e299e37c00145b802960b94"): true, - common.HexToHash("0x9849c36d310ecd2a052c5a93045efe66b904ec8495bddb80fbac525f2fcb84c0"): true, - common.HexToHash("0x6cdffcc64d5d155572934e35ec6b5790e168e42a40f0f8eb1df276a97c111126"): true, - common.HexToHash("0xfc64673d861d32a5b45ed98e1b15cf675e888294b0641567074a6fc63afaa27f"): true, - common.HexToHash("0x45e13e2b303ce7e5b77557c6250847921be3b1939d1b7310273940c8176045ac"): true, - common.HexToHash("0xa28a3219fba0404c367726018d5aaf9ace5ae86ee05a4fe2c2fa4b522690264b"): true, - common.HexToHash("0x7f4ec996eeffe6bbdd801dd58958f34e4336eb62a62ec78a10f43003c69a38e9"): true, - common.HexToHash("0x7d95b9dbd43ec60746a93906c9399c9e172f94af63722532070a69f80a234818"): true, - common.HexToHash("0xa91ec9a28d858b891c4c51340bc6eb1466bd816640b7879be1a24d0b77491b5b"): true, - common.HexToHash("0xefae1c774974a9715bde56ede4ad6a581f6b7eb14cab6720f855775fc853242d"): true, - common.HexToHash("0x8732c07b20adfa06864bb83f0e5971ceb4826d1d731fddcb884699f38bcc6278"): true, - common.HexToHash("0x2122254e2c6e7194b9aaea9567c9824db8cfb095d59941e7567979827c4289a2"): true, - common.HexToHash("0x84f3e7d56f664252326562fe39f9852ea1d39984c2ab9fbffeda54ee313a72b7"): true, - common.HexToHash("0x3dcac6c5305eca3ded6f84916e66f266ab253b7bfe7898fd6c79462bd3f18b5c"): true, - common.HexToHash("0x9fb65ea2696a18113e0cbaf5059da53e3b28743088e603f573db28815854474b"): true, - common.HexToHash("0x8a55ec641f945378d7660b53a09cc452c5ef9d0979060d3e1dc1a923074a803d"): true, - common.HexToHash("0xbbb7711c530d5b7b6d058a65f52b97968c7b8d2830a508526bb78fbdb3ef250f"): true, - common.HexToHash("0x7e6a24ea8f86041f75df58f00b3097a9c77abbdb6fda6ad794453ace3206075d"): true, - common.HexToHash("0xa261e637d4942fc340317f905a218f6fdaf71943e3008ea1adf41923d12f6c82"): true, - common.HexToHash("0x1789c888d9e7004133aeb0d7ea71213adfb78ebf34b6a01a9b147c99db81ab68"): true, - common.HexToHash("0x114f0d49b18104070e0f8e4b257198cde7fecb550074f33a0c222f3894b485d4"): true, - common.HexToHash("0xc7133df2199acf713d35babc815d55ac09b57f893af9163bace2289abde1a88f"): true, - common.HexToHash("0x627ea04fa1370310f3ba5abae9fdf2c8cada8d78443e153884fe67b8ae65cce5"): true, - common.HexToHash("0xb936804aeb03f1f856899a53ac2ed6ac8e2877b2a824ea38462114d6b89e311a"): true, - common.HexToHash("0xa7e08c0d3c3da17731ed4905eb5579648e3ba81f2ce36c5b2ef3b8ec3019c4f9"): true, - common.HexToHash("0xd665be9cb92d007d0ae7db0f218b138106899a5553193b4e07d64a0f3abb7655"): true, - common.HexToHash("0xa6bff052280bdc3ba6979bd071397852e58195ae6bf543eb6552cabea44b94db"): true, - common.HexToHash("0xfd2afa13d495351c1ce013827bfb96dd55498fef683477dc0be7c285f28fc509"): true, - common.HexToHash("0x5d0da4a21ec4d7519c33833b6f5ab0128b929bb767f82a3585bae0f27437ad65"): true, - common.HexToHash("0x65307729d30513f64ca69e1b7b0217bc584eee7186064a03b975ba4065944afb"): true, - common.HexToHash("0x4c64e6a9d2fa09b55af711d6834198463c701ecc4cb6deb993c5f76a34e1ce1f"): true, - common.HexToHash("0x5eb6ca251c79981d9f40779401a4f11105a02af589327e2dddecf4b044f426f5"): true, - common.HexToHash("0xbd317fb51afdaf351077c0aec39f2c5081bcb99f9addc38fa3ee048b625f57b8"): true, - common.HexToHash("0xbef2d8d0727560e96e2fb2dd32f829631c3d84cac2d11894d653f1d57a412d4f"): true, - common.HexToHash("0x5a9900e2cca6b5ccff1f590f94f6454ab44c694ccb29d05c5a2431c7e0bc1206"): true, - common.HexToHash("0x020571d505263926c3e6e5b1f558632be2e9c5d8ce1ec7d8e03e0fbbb01730dc"): true, - common.HexToHash("0x380f1869e240fcaf3a061f7c0e06bed2019cc26d4a73c0e1336c4ab96f96e66d"): true, - common.HexToHash("0x7e0d8bfa50defd380a21395cd61c75f2ca552ac32d6ab800b46dab3602fed271"): true, - common.HexToHash("0x680110a2169c94cdfe25850bae35242b98986d0a0c81af33c4bf69e6eb29081a"): true, - common.HexToHash("0x2d958d255d1a659afff16be15de4cd0b5a0fb10ad8cdc6d83ed8216644cd3482"): true, - common.HexToHash("0xea9d6425ecb68b568039c5479607a830a2e11e2ddd8811842360e40e3d20696d"): true, - common.HexToHash("0x3be402be1c48d9bcd4d1abcc1691750c8e01536723046cdfc397fcd176580945"): true, - common.HexToHash("0x4c5630caf449ca69bf7ee57b8274b2d448b4ee61a47df734feff8a96e55d044b"): true, - common.HexToHash("0x1ce7496a022421ba6e3883514d94d19788ca81b80b4241197154d21271cb14a8"): true, - common.HexToHash("0x279c96420319b26c614394b4859a2f7deb7131404d2d1f5c329becb2aa36a823"): true, - common.HexToHash("0xbc1a6236aa5185af5b73fd21cba892e2024e9290d2ef06a8613acb0d92074957"): true, - common.HexToHash("0x201a8dbc682379d983faaf076f0b2cf317b00ce17c7ba9b6378193794cee302c"): true, - common.HexToHash("0x110f83d8ac7a8d3875c8ba41bf96b3eb17e7c60a13c9dc51d5864fb291b6cb77"): true, - common.HexToHash("0x43813052094a5c4a52a3a6f41d1f43015902f69a0f11394ab957f13b6d3e08bc"): true, - common.HexToHash("0x652dbe1d6ab3c697e1f2edaeed712f876e3ce05f2cb3a86c00d8e3b16ceddb83"): true, - common.HexToHash("0x491800940b738759d3e795e904e3c4a59dc249f0995a32aba223b62a9c5c2afe"): true, - common.HexToHash("0x91e2a05f05eab3b0712e625d939bdba7d8ed30cbd5e4cb9694160a3d292ad3a4"): true, - common.HexToHash("0x0de77c7c461ec501e7b32afd0a20e712aa5768a36f2c99d4bfe506ae8533fe0f"): true, - common.HexToHash("0xdea652c7b012b8323bee57428219212dcfddae06ccd876ca2498a52bcf88d3af"): true, - common.HexToHash("0xe53472880f292a5abf29ccc4c533c24cb76de2345ed59a9b74f58d68f1305116"): true, - common.HexToHash("0xf8afe90e594ed89c27fe60f679965fe5d46a437815976242024b18f28691b9b6"): true, - common.HexToHash("0x818fb102ef7939a6180eccd8f30a13b92f9c3a9f83e160ad27b37c0265b2e1c4"): true, - common.HexToHash("0x42fcac662be53986c2c9de80470320647ef240728fea10f9d2d303329984ee31"): true, - common.HexToHash("0x0d202b48bfa6ad05fb34e9a7306e3b116cbcc1131c72b180970632105e6237d8"): true, - common.HexToHash("0x35083ad01dbcc26f0f56f77f86e32e765b64469920c7bb34a762bc0c6ca30378"): true, - common.HexToHash("0xa8063a15389739b46a0cbbbb4e6a24da958531f9bb5bce2a4ef7715a2299ec3f"): true, - common.HexToHash("0x6f6221efba74d8e4dd579047e511c8aa54850ce4a8be3c2042fc7651e7090a38"): true, - common.HexToHash("0xd5d8392ae3585ed892b795256fd4db58d5e767fa82f5532cb01bd8ebf9e61f8e"): true, - common.HexToHash("0x3a77aa5dff8c50fe75b3bb9b31224ccda807adb50545c7501c003b5c1c814f56"): true, - common.HexToHash("0x111934676135b980398aed222c6c775ff6f33e8f6999e6637449be8c191983f9"): true, - common.HexToHash("0x2d320b3fe8054f82ed1987093691c25644411b7be20e8ec4fc75f3a971787f9d"): true, - common.HexToHash("0x90cc2a247fb8a7b08533993a5e37f0f77505c14c5bf66e6b18b35e6d4b583cbd"): true, - common.HexToHash("0x9537a4db186846d63fb90555a02225becee5cdb0734c38ca6a84e4266d2f01b6"): true, - common.HexToHash("0x145eb91f9ac0e3449807e30f75dc43be16f833185b09876e36b734c7c3efd24d"): true, - common.HexToHash("0x2abedeefb0bc95d602343304e4fd30300fe3564222c8a889850791c6fe5ec2c2"): true, - common.HexToHash("0x297a6d7532aa17f0df5ce159185ab9a78309ee1f560fc556e042aaee7fcbe61c"): true, - common.HexToHash("0x210017a258793a6feddc0a487dfb526d7ec9fb6fa2d3f07d48f008a9ab29c0ae"): true, - common.HexToHash("0xd65f7753cc94712b7180322298150a30b7e7f671884e0c1f9ca5553987ece3d5"): true, - common.HexToHash("0xc02d5f8f48a8ae3103deff3c31f4e0d723decbc758ff0a07b354c175e39fa760"): true, - common.HexToHash("0x8a0d1d977ade35ff8dde2899f07b3e27d1cb0a450772feaf7ae1321caed94587"): true, - common.HexToHash("0x0e7b8ab2073b1fd3b0369b127297a38d4e544fb0913f4a423ef772551936aa87"): true, - common.HexToHash("0xd9e5bce3748d58b362e513c401d2f89710453999330a6a5fc42f2859a9923fb2"): true, - common.HexToHash("0x024c049023db527c5192477f99a47f9bdb2119fd937ca318a1169f07f3d52b8b"): true, - common.HexToHash("0x5b4a6b1a5bbc5cb5b8477bc714f1d66dbf038e5af2ef047115a54f748b2372fd"): true, - common.HexToHash("0x15527ed81cc6f9c18c81b5b2d0d9256a169d5abca7744bdd0d3a15aba69be881"): true, - common.HexToHash("0xdc11cce64a780a5e0f222b3adc7db71ae096d4ad71cb2f5ce5d383e7361b61a4"): true, - common.HexToHash("0x3de948a02fb3a65475b9824885ecac7f1a96e9f0de03991e3784798ed26bdc6d"): true, - common.HexToHash("0x7134cb5df3c033fd1b7b87a78dd6265b5aee9bfad39fc54b149581c1d4b7cfc1"): true, - common.HexToHash("0xd449a8671f5bc91cfc4cf3598a2a1560ce35ae783cc7add60221538dcb9a239f"): true, - common.HexToHash("0xaa0075e6bbc1cffa66ca4bb8f6361800cb753b11fa844d867acd0aee86e7de1e"): true, - common.HexToHash("0x0db802e86f19039266671730ada68a47736ca944ed97a60c60e82cf5ae8f2f77"): true, - common.HexToHash("0x119d9bd897c1edc6aedb3dd2d2244d482a9ffdb3f3e002e72e218ac752961a13"): true, - common.HexToHash("0x2239962d36a1cf135b6e23de2cae3fbd0af40b24c70a22c656ff17690fa5fd0b"): true, - common.HexToHash("0x7175f9f04f825f3c4ea028d4959cbdfb782e54b1f0bc73a74370d8c6b580cdfa"): true, - common.HexToHash("0xca8720f000c9fd1a7bbbd450828d5de8b7aff06b38c55ad6f89f664f88bba4b3"): true, - common.HexToHash("0xa80bb90425daaf0705d31fb98c46aa2d7ae58438f26cc1dfb6b58d4ceb2c1ac8"): true, - common.HexToHash("0xf007028e0ca438b655f949386363c589d583c9ad64e11c7677a3828ec02cbf33"): true, - common.HexToHash("0xf39e89f57250b31df0b9b8693e11ebbfb5fddaa20f657460f1686b073cebc221"): true, - common.HexToHash("0xbbe146cb980b3f6f180eede08a7a2046e890c4298ce1a6d1e9f4c4f04c29f640"): true, - common.HexToHash("0x678e39432a5a5c9fc39a2342f3c56ecabb7625d93916af781092448b1b37ba62"): true, - common.HexToHash("0xf8abffb9ac9e55f4802c90fc94313f691df6dc29974da3d13e36d448a0229c11"): true, - common.HexToHash("0xd6c6033de50bf4a40beb6d714c9f51bcb74ff505384f16a32f45153c8c013275"): true, - common.HexToHash("0x6c25397337922ca1982df39fb1edd8f568dcb081e3ebaef6e70e8d89b1c63c4e"): true, - common.HexToHash("0xaeaeafffb0eda48c9f14ff508f766ba73dbcb800bcabafef10058e4539b54d63"): true, - common.HexToHash("0xff05dff5ca845bb0fcab663cf1155f25eff04f590a5e0bca4d2a3a5e9facb10e"): true, - common.HexToHash("0xe064a44229a696c24beff253892a033d125bb0f7904b19f28bf840e29788659a"): true, - common.HexToHash("0x26ac8fd3efe6007d68db9e960551b82e1bb36ed518969376c3dc3698be64d3bf"): true, - common.HexToHash("0x02929ce7f6f48a96667edfb1a50f0772820635cfde4d0431d6b24bb64b731e90"): true, - common.HexToHash("0x037daea47ecaae67e367cdd48fb1b1e8d9e792a9a35c998e96892b3921255196"): true, - common.HexToHash("0xefcf35833d1f17ff3d237164da6633c18281b4025d937e4747f4af8d8bf4a09e"): true, - common.HexToHash("0xc1a52af429d59991261001c6f23371de60b8d16f9b97e259b331a0b10aef05bc"): true, - common.HexToHash("0xc49a7e23b19d30ad307ab89fb546c4b4fef8eb269bc7fdb613f3289c5f4508da"): true, - common.HexToHash("0x6160b31f95f06bc929b5aef2ca1fa5cd1dddecb97ae0053c992a5c7f86f995aa"): true, - common.HexToHash("0x0f370f3c76310b681addb811f656131f8c8c2b625543b623fae6154458f2ea83"): true, - common.HexToHash("0xc865999b16260e8382dee9070001a330b83f58aad7f26c6ef9bf01ebe49f3008"): true, - common.HexToHash("0x0705721f93b95248cac0a0706ee9265269037eb8908009addd1ed1036e1e7341"): true, - common.HexToHash("0x7af8af6e4fb2a7817c729b1f47e6fbd33302166376ff6884d04cf3ec2b2c7458"): true, - common.HexToHash("0x12246eb14e56bb3d6e997f06bbf825980a837184c9327bf7828a6e3d4a7e9901"): true, - common.HexToHash("0xed0d162cddef46009d338242b39f706598cf8d8d8fcb2b1a8ea5f350bfc41a41"): true, - common.HexToHash("0x119b6422b6cf18ad16ead390c91092cf4b55559391188154f9da48858412c90a"): true, - common.HexToHash("0xfd1a92fac399b9baab9c578710c77d7fb2d27559ebd916e157495ffb8d708cad"): true, - common.HexToHash("0xa5e5ab000c031aa62145a4267ea0c2e8072f1be724824bdf77196c8b8498bdc0"): true, - common.HexToHash("0x7c710bda1c8628e3a3e5d636a3b1761b6960cedb7a1d71885177d83489fd7177"): true, - common.HexToHash("0x9eb6e0bcdb8afbe50405ecdd712e0625c58018ed88389c61f33ed1c755844d92"): true, - common.HexToHash("0x35f0753adb3f754b52fc0bb6c3b33b2f1bdbe81ec550af72759efc10964cd05f"): true, - common.HexToHash("0x38215550f5d1a96a712e33dc93a414e8ef7d4fb2238b5c19f87effa1bd9767ab"): true, - common.HexToHash("0x2bac0f207ffd42c5609d003afcc7543a6a1f85b87b410a58e1e92732c7d0c980"): true, - common.HexToHash("0x01bd10ffc40353261fe9daca5bdfe60c9b4f28b39bf2cb4da6cd6e4a26aafc55"): true, - common.HexToHash("0x1176ffa098708417dbbd8c90d381633b1beb744e510a8562a5a77d658508242e"): true, - common.HexToHash("0x660fd660df132b6c0460633b57fa7e907076189b9fe3b4ef4fbe6cae828fbc9c"): true, - common.HexToHash("0x5b7fae7ee6053809e6742ec58e0d8d4d57da1911977ed4a2f5f85ad6a6f9972c"): true, - common.HexToHash("0x40acb92e1029d3c5338fdf94b296842f5a1f09133f131784c1f4511198b6eb0b"): true, - common.HexToHash("0x9dd97b4f2ea2a4ba72409410c4d06bc1fa87e73046a4ea435a84a070a4a98832"): true, - common.HexToHash("0xef6b2c1fda47ddd511fdc446c9b6881068c961c14139186f23ce3596f767bf74"): true, - common.HexToHash("0xa9b92316737853756e2fa57733e87fbfcedfde722b37efcb82dbfe2394833b97"): true, - common.HexToHash("0x44ec05cf790f92b9451d5d3bfd310e93b699d29baa8c4f66064cdd99a8a8b6bc"): true, - common.HexToHash("0x12a3e8109d9541ae2c574a4fed06a6e35bc31a8eff56711376e564bd5853525c"): true, - common.HexToHash("0xf4ce53619371ccc6f0ca3cae52d2d866eeec2dd4cafa6fa6cf34a6d81b1f8bf2"): true, - common.HexToHash("0x8fad2a5317d1896eebdeb181350a51c068c237954f31270ef58872ac11a35b8b"): true, - common.HexToHash("0x3cb230d9bb2f8ea2c4f18055bd659a4d95d31a15b5fbaf07fb8f83d9a8279a9e"): true, - common.HexToHash("0xa8b85b00620fbb0343c0ad809d7767f36ade281522961a9ffee32027ba2b7a93"): true, - common.HexToHash("0xfd30fdce3f74c4610cb1c7ce95d0c99fb11cab0e9bf2cdcb6904fb953ecf5c5b"): true, - common.HexToHash("0xbcd5a236c1cb950ae7f848269ed8567b2f314b7ed8ae71597da6076f8e24849c"): true, - common.HexToHash("0xee623dc7e66368b203de8aed9830991899d85e279e9c900b29f1f85985adf53a"): true, - common.HexToHash("0x0958df97c472fc8c5c74f3a1dddb4dc78ee89fac6541da582d98d28010a5dc00"): true, - common.HexToHash("0x43748b37489ab457df1e2a421a01b8725a5e0aa35a342fb8ba7d74fa84684565"): true, - common.HexToHash("0x4342e841111619091b8b309254194965019e29fbcd96e3cf4bd0090b6917c1ad"): true, - common.HexToHash("0x1022ad682397fb3e1c8de5b17099319a805636db105b7af1850b19af403b1ef8"): true, - common.HexToHash("0x030c4a5465b9075aaf6f870ba64630d90027f1a76581ab4a84851cbb91480466"): true, - common.HexToHash("0xac8c44ade338309fb2e6e35a410b2fc48001d92d114d644fb8c96b9da672dc0c"): true, - common.HexToHash("0x4920aa35a371fc0cfe50bbfe953e52a621d0880bb8ed20e654e8bed561beb9d5"): true, - common.HexToHash("0x78d69d3d8b97399dce9836961371d7f8b106f4b9447167f106987a46ed433fb6"): true, - common.HexToHash("0x9f5ee432fbb14437670a5005d1bd313dfbfc502762721690f8fb70e70aab7e0f"): true, - common.HexToHash("0x6dc8ead8f8ef59ce1a1ac039a5dd9607604305f885709b33f912b38b49b24c3f"): true, - common.HexToHash("0xb341010e092f66009eed1ecf6d7e3071ea1f39b1ce02c449255df0c25cf3a8cd"): true, - common.HexToHash("0x25b3f44a23692ff09cadeeeb76473f8eed8178be17039947224453d4a6e60910"): true, - common.HexToHash("0xce76180e2922fb9bbf208bb1006f1992f3afcd38fc75ad312d2719ddda807f85"): true, - common.HexToHash("0x53b6b5cf006502f0e36e15875d8cc2aca83444ff8b949f67a0fbf2d81a3d2090"): true, - common.HexToHash("0x9c91e42dc37ae42deee3d5222061b9d14dffed8fc1d2d97567b6506123c1cadb"): true, - common.HexToHash("0x105e31d70aa4b8c13fb4524ea8e682deac16c63690adeee2d13d9428c5393099"): true, - common.HexToHash("0xacf67963dfcf6ece67fa6c4f368c4d27620b14e61c1798814faa1340fcc13097"): true, - common.HexToHash("0x90f8445cc534dd986df6be2acd3f477f244b5ddc4077b4a60676f9ee765a86ec"): true, - common.HexToHash("0x49477b428067e9c8817285d943577225a3b038b34f680b0bd457c0b85df55171"): true, - common.HexToHash("0x4e7a164212f48a84d33937769dac6013a54bb6232b061defb777e148f8a21dfd"): true, - common.HexToHash("0x47c00374d4de35f31e2fa5cc06519c4514badd05b627c33b56b7c19b4e129111"): true, - common.HexToHash("0x38f98a77e81a7de5605daf2b51ea0fcb56c01644d3c368de20e3d85cbcf64d62"): true, - common.HexToHash("0xc2eda685917767a4cf50e1271953463a79b2dacde05c9ac27c5c0f03c106b713"): true, - common.HexToHash("0x2e83b84f93ec8470f734b5fc8b78f9046c29edd0a4f491952ce6218b8181bf4c"): true, - common.HexToHash("0x6959d0f109c7f68b2097e33b06da11a88440a56a5511a16256e8e323e32cdbab"): true, - common.HexToHash("0x608d21f5213a3d5d089567750a1e171f56d632f4c49f90d302fb0f508f8bf2c5"): true, - common.HexToHash("0x7a6a2013847fe5b247ce76596024015075d73d97fd731482ae4ddffe9c22f5ac"): true, - common.HexToHash("0x0d8ddcdac4887a0ecf8cc4925db350f98394f7357af43f541d19676d36183418"): true, - common.HexToHash("0x90bc2cdaa1b85ee4432860ab87c35ddb761b19d5b5063268cefef5b5d4879acc"): true, - common.HexToHash("0x81d9ad88cab11b7cca09efaef9e2db59d0520a6178d20f1c5ba9b7a297e89a01"): true, - common.HexToHash("0x89fddd5bb736c96a3e1040a8fd0503260ac5d69736044f0c08cb4714f261af8a"): true, - common.HexToHash("0x4ffbfe6d5d9cd38d28388411b7e63141c1a1ef202fe7307af739a42c9e3d1ddb"): true, - common.HexToHash("0xe2afcc7e8cee3390e0ca15109833a43b27fffc745f60de981d7043870d9b6ffc"): true, - common.HexToHash("0xf84dc609892e6f2e18ce83dc746ef5c4c4147baf82c2bbdf82635892a770e954"): true, - common.HexToHash("0x33ef91c13a2033f02fda720938cbbb09e860496ef9e914b26bd6e25a8ba8e931"): true, - common.HexToHash("0xf81fdf154559ba3e26c1731aba6f873ff95adf219c0006e49463cdfe1c2fab73"): true, - common.HexToHash("0x0bf00fa18ac27aa529af4cd749c0e0255ebe7c2516605c25cb5e99a817a2f0b3"): true, - common.HexToHash("0xf62af6a97219a9f9ccd111c76611ed5d7e4c8296de7e211420f420e3ae23aa7d"): true, - common.HexToHash("0x024b2897ac6632b9c71253267392992d703d8c6773a6a1b3e280f0f960d402a4"): true, - common.HexToHash("0x20152219adc41ccd9e11f1edeb06234e44b7a2520e2d0aa515344ed046c833ce"): true, - common.HexToHash("0x22b19139eabf24dcd7683413cacec59633aeb22e2f4df9771f25e7de7ec881b0"): true, - common.HexToHash("0xab457fcab6982f84f19a9518f5218dfce8cc8e667992f4f3062f5faf5418785a"): true, - common.HexToHash("0x97432bc0b53e6f580c3b9e6b4b3010a54f6c356b84cbe0a6bfd011ca26d677a7"): true, - common.HexToHash("0xc6d15c5405df21b97d0ea1830dc12d773a4fa17385c65da74fbfa7186d8d94ac"): true, - common.HexToHash("0xc3ce63ebe08a8d82c2999e6cc2eb39f819e30179db12a5ca61c8abff81a9e003"): true, - common.HexToHash("0x2ca21702341977f668568ae37ae44b62736447289e727c1acb1f6615a0b9e8ed"): true, - common.HexToHash("0xc02ccf1229bb8324902f32d2da16bd46c6833b4991044385682823479bcb6a96"): true, - common.HexToHash("0xb2be390203c7ba4cd19610d662b4d87778a4cd3a219917b6701c6a73796e2c65"): true, - common.HexToHash("0x4d8272192fc599ee8503f84074458202f55aa2dbc8768c591de2bd565cd5ae8c"): true, - common.HexToHash("0x0fc14371ef865461cb6b3c1d0aa3b13e301427bff5aad67a5c59bd7faf0b6a78"): true, - common.HexToHash("0xea2153f70c94461a3c1f6cca11a9a0c1678afca52fb406aa4cef98ecdbbe44f7"): true, - common.HexToHash("0x6e1a09547e3c2380f8bc8dee9b1167b75c8f421f2c5cbe8bf8bdb7e105dfd355"): true, - common.HexToHash("0xb1a419b0233b6567f2ff3afa37297a4e8a0dfe9a51d8cfe03a94eee658bc5c6c"): true, - common.HexToHash("0x24daeebbc0edbed424a4b1d64668123b32eb1c4209457efdd6ac26e654c354dc"): true, - common.HexToHash("0x03472f44a3ef95b8af64cef9305994dd8edc6029d235b9e91c5c3c92b5714af2"): true, - common.HexToHash("0x9afb023d7c9c33c2d71560b2c942d7e5e2fa7f730d90069e3dafc6654670f363"): true, - common.HexToHash("0xcc54567c058c2bc4da311eb4e233cf7f6c480b231751c4f6e2685fd6d56807a3"): true, - common.HexToHash("0xed9723d9d9de8d79ce1ddbacc6f8aad0c32b308bc1b532d855727a790c5bd0d1"): true, - common.HexToHash("0xb60109a2e3ad8d455e5a155088ae4ded0239389015d6c97d448fb62f2d889119"): true, - common.HexToHash("0xf9a7a5a045a7bff0ce9ddbed789d7a152837d92645c8db25ccaf11c10844f5e8"): true, - common.HexToHash("0xe43947e9722aa08682eba9dcf6cf7a3c06aa771cf517febe697b8e29386ed349"): true, - common.HexToHash("0x505877e3ef2e1dba45cc9b2bfd69737b7c61bc1968b1a9e99531a605de4d1f72"): true, - common.HexToHash("0xd882ea1bede4f013c2cf8a99b07b68c1f83aa25890dea4b43b99477a35a3f4ea"): true, - common.HexToHash("0xba4d5d966e90b9fed08211b5399dc6a3a2dbf0cc498481a520afc06ff4d94d40"): true, - common.HexToHash("0xa89ab75fc1ede5c38f3de90420d3c3f6e82fea219775322eef3ee6d29699dafb"): true, - common.HexToHash("0xcd765471441a6488b07cd8c71604fccd19d511180f63aa8010805d0122530ad7"): true, - common.HexToHash("0x37fb75fe670d0d101c9458da48e891dae3875b3d8c46de50c06312e96a23e742"): true, - common.HexToHash("0xd9d8b44e517f826728e424e2d68ea6be26e1f196662dead1d2e6ab306df1ba9f"): true, - common.HexToHash("0x91ef010163061be79b939bde9c9b7509baf079549797e5c082244d70a44d7829"): true, - common.HexToHash("0x14428ea71dfa0af39327b47d822b8ff7d8f76f9057510a224df1966616217c14"): true, - common.HexToHash("0x65460e53e8f12d08ee68eed9aa340a4702ca8d87b12513248e6a46dcaae3febf"): true, - common.HexToHash("0x70bf0d7554d4540e65ea7a659eeac60b731cc0a1003fd218fed03159fd2c3478"): true, - common.HexToHash("0x27ba8e5f497b17768bd8007d90a7cc4c5f13d82fc3149253de4baf9eb7996ab7"): true, - common.HexToHash("0x3867296a08840adfcb715d6aaba049d72130615e4e2bbb3a1a606c4588475fac"): true, - common.HexToHash("0x33935d311f9dd947b3f30898f2e2dcb00311b0b0de15a62f0beda1a0b14d79d2"): true, - common.HexToHash("0x3dfd7cf52cfc7eb821afb56ceb0edda7df3043bbe2ebcbd7bd0f011e08264822"): true, - common.HexToHash("0xc5552cb93d77c2df417286e1407b0006557e93077df1f93260b3bf888d2b55c7"): true, - common.HexToHash("0x621e7ba2a4b9451d2609cec4b55fa6fcaea7e6f3a4bf63db2a8cd09ca51b571c"): true, - common.HexToHash("0x997c7c4c2cc5287b86803f719a2890fd809486f16a9e3918b3d0b3a655f3575e"): true, - common.HexToHash("0xd76c2f0e92d0fbb7558779525316d171207227944a9a7ef1dbc625444b324a97"): true, - common.HexToHash("0x283125af6148d145bd7b800b12d1d8e06b7409982e54daa1adad04e12dc382e9"): true, - common.HexToHash("0xe36a8e071379af2436415c6232bacb53bf3698b43e5787f236b3b0b51c92ff14"): true, - common.HexToHash("0x8457b7f62eab14423d3dacb3fa4a16967370a81f7f7da59e1cdfe4c910f5c561"): true, - common.HexToHash("0xf17bb10124ca91ed5f1d2975805975b4dd1d2aac21d699c578be56edb4cc0a7f"): true, - common.HexToHash("0x07ea07ce7d0b37b38ea44bc5ee1dbe95b781d433be58005ef352418a10e76b62"): true, - common.HexToHash("0x3f5ded92357b0546d409427a78508cf2df81115a486897b1c48955ad9e134c67"): true, - common.HexToHash("0x7874b452826e84f3d44d47dc85ea59f3cd88ba3dd26a6f6a89dc6cd6edd0ef81"): true, - common.HexToHash("0xf457b52e1d2d35002427fdf56acd9dd8e4e64dde1e94564caa743248e58bab39"): true, - common.HexToHash("0x75b6394d96d93cbab55b28e08d648b18a76331f47c7974588dc25fb90e9428ec"): true, - common.HexToHash("0x739ad8ff8014e6b11a3752fb94f22f8fbba10616e9da2f3bd4f0d723113e1f35"): true, - common.HexToHash("0xe179e4a906623c5b0bd19047b0eb3594ac2bcc8fcec5cc394a3b387bd95ec8a5"): true, - common.HexToHash("0x3a133278ee92f7bbc1de303ec80844161fd84e6b698d8d478be423637c4aa32a"): true, - common.HexToHash("0x958e695b943dd23ea76b51433d66acb2286accd3c45df01ddd8478d0e074118a"): true, - common.HexToHash("0x7d05716bd5d4f4280940e3bc60fad902c7173c744867c74a37bcb20151179efe"): true, - common.HexToHash("0xbb2fd3b435d5d33a68c84118da01669ef16747a76c975538a78d564d5ea22d61"): true, - common.HexToHash("0x75f1530c56cb3ffc9df159fbbbcef48e784b187c2a89615f3fbd0eff050c4b37"): true, - common.HexToHash("0xc8d53954255538d08b6494c67b74e72c889bcb98e6b2c3367f49591d330217d8"): true, - common.HexToHash("0xfd25edd8ffe9cbd89c118ad76ecf18f5f6d9247d719b66fe71ef17dab3e99f53"): true, - common.HexToHash("0x23add7997f498fbd5997f0490406dbece8920e069c8dceb3c786be8e6a919dc0"): true, - common.HexToHash("0x78a424e73097195b3c5a421bd3070534157c1ded37047fef01aab29d8fcce28b"): true, - common.HexToHash("0xb722f214fd057aba3c8fba959c43b35ecdd59df99b1c82b44e038f693ed3386c"): true, - common.HexToHash("0xaba2e5de8574882b7e563633d856ce7fb733bd530455dae02a287620da8510d2"): true, - common.HexToHash("0x5f7bc802fd4e10bad5ce1b5ffe50e573f1ee266cc0d855570602e52a13c99f5d"): true, - common.HexToHash("0x891d0996e5e19ccb15a094939c5cbf77d6454a70dffe31c299a97820a0bd19f8"): true, - common.HexToHash("0x67b04d8e93e6af4db2bb1f4c4fa5ce51662ad32a4ab734b14ce800006c1b1e0a"): true, - common.HexToHash("0x1fce4231b80b8196b93094ddeb0e03d789dcc8ccb40502395905089808c0fcef"): true, - common.HexToHash("0x067720959f6d7f65bc0480bdbb005d6b57210b330b1577870f91cf83f8aa3fb6"): true, - common.HexToHash("0xf0e13d3b8ba9e7b7d8ca06471dacb14155b74006171ee569d12d5bf3cdbb413f"): true, - common.HexToHash("0x2344114bba3ca8feb7de710ed2d1a199029da7d7756921c1f40638382215b817"): true, - common.HexToHash("0x4e09ae721847744775ecfca9f9449320827abf087e62d9e12500de5344c322ca"): true, - common.HexToHash("0xd749349ba91576d5337a521c2400e2d92210531d3d011788ec33f7d539816885"): true, - common.HexToHash("0x47057440c79a7f39b90062f74311431e5e544cc2b26cc367748653c629335e72"): true, - common.HexToHash("0x4840b7a102b1c29e563ae944af35ef3262c329b895e3f997e5928c16c91e6264"): true, - common.HexToHash("0xedb679812903fa2a20acd282f6e72f637d062dcb04929a34de4a7a6b791091a4"): true, - common.HexToHash("0x9e7e8c582e263dc1bf5022d70088f78a7074b72ff2fc70802586870967549824"): true, - common.HexToHash("0x767cecd300411c98d8d610823b94a9dc4e1717b1f8712d62236adc9b2ba731d3"): true, - common.HexToHash("0x806a384b10ec948358f45f469bcc93b3d9ab05aee3759172377b930104a03028"): true, - common.HexToHash("0xb60c8a46dac7f2836a2f445dc67f95ab824effff3c62158ec9ce0130772aaf94"): true, - common.HexToHash("0xcd3b1dcbfe131a3fb27b7a64e6035ea2e0263f4c8a3a605a60a4589cb169872f"): true, - common.HexToHash("0x0baef754422233cda2536e9c55ccdce89ec62ff93a198142ca30200191540d61"): true, - common.HexToHash("0x3c16d733e42d30edb86de6018b952942e57738ed7c407dac1d0ee0511598cd02"): true, - common.HexToHash("0xbb445af6aa4fc5c5579e7ad672ff787a460978ecfe6f3cc190785fa516186efb"): true, - common.HexToHash("0x2b6d3696d4c951d2aadf2e5b5286eb0baed7e469c13b5ffc6552e313a9ef30f5"): true, - common.HexToHash("0x917799cde37f824348dbc4795198df87cc6068c8fd46f7aae137d1c29403234e"): true, - common.HexToHash("0xd59d5dd3790436c66ada9d5071e5a5bd3712f2432a3a5e677d072d0a51f4dc89"): true, - common.HexToHash("0xd0be1476be3ecd3a11c4421d897b801e32ae0ba24935946ff187848d30bdaba1"): true, - common.HexToHash("0x84c98e710f206019459e4ca0a6211f9a9fe432c3e9147aede3ba3abcd833dff8"): true, - common.HexToHash("0xfb72e363b811677abf1912fce1d458394c506c1e5a074a3ef4b5253007d7cc66"): true, - common.HexToHash("0x333819bf5c37f095c43dd28218e326f8a901f4e61f5e9357d213178e863587a1"): true, - common.HexToHash("0xc5f9bbea346673c457b5c97a55bed75797effc8e0b77bbadf429eb590a54356d"): true, - common.HexToHash("0x7cdea8f81270a5671c4c49b845d05731d1674d1fa6e92117a5053ab13fc37558"): true, - common.HexToHash("0x2f2b640b8cbb72f31c41e2fa828313810198d7c8239c0ca41228b141bf3946ce"): true, - common.HexToHash("0x37973d3be1592f9732424c08143261b5f516946b75793b70bdf90b0c468640cd"): true, - common.HexToHash("0x529f3b8e0efbadce22aa2e185c4825b5d911c25786a2e732e091f3aa5f08805b"): true, - common.HexToHash("0xbe8a077dcaa409ae129ac469d7263ffa4b062e9cfb89796eb4c9599015d06e55"): true, - common.HexToHash("0xbb9520773c1b621cb7bb68dd4ccfe469b64090be5a855b0f4a4ed276d65e8607"): true, - common.HexToHash("0xb3d15497e90e5643a42a462b01bb2e89d0adbfa83eecf2fbde0c4cea372f8023"): true, - common.HexToHash("0x1a454a5546fb07980b53d798098e4f6cd44eb354a48740490ec50d70c51260e8"): true, - common.HexToHash("0x40e923dd36aedd603d6348d513b100655bebd3ed263813533492941dc4abe47d"): true, - common.HexToHash("0x45aa7b27763be5967af32e997997694bb02bc913daba683e79c6b2f809c4a777"): true, - common.HexToHash("0x70c870fbdb9b8a879c0f6abf52e18d36bc8cea9ade3ad045bfff63a446d78e49"): true, - common.HexToHash("0x7022c81c2c3d434b84dc0cd133befbc4d07ecf0741b5ebe957a82c3675c3768e"): true, - common.HexToHash("0xeda60bfc1d9da1a6e468f82df6c36b01b484df77b10c3440bc458a40be6d2442"): true, - common.HexToHash("0x2bc12f7aee33e381da3989e35f9eeaba843ef3ae5ebd67e484d132950d0b5fe5"): true, - common.HexToHash("0x8ee6a907eaa6696b25dc4ec88c420b51092b6713be7e647a1c8fb0b714194a7e"): true, - common.HexToHash("0x43afdc77933ee5274ae10df2dff29a4ab6ced66254fc4d3d3a957b2affb991e3"): true, - common.HexToHash("0x980a3abaf14527a1cf2ade97123c9140f890fc0a009f673d2b44d6eb0be8942d"): true, - common.HexToHash("0x20b9dc6efbc6551c92d0aba2e0536fd338aca573f939fc198a35879b59fd3a09"): true, - common.HexToHash("0x4f55682fd58058df41c1818a2b912b09f7f7c3c1ebf75397559053408b388730"): true, - common.HexToHash("0x0ed34bdf1d01ea2dccab7a5c56208c2882d57a7159f06e1a0a967f8da97e4d7d"): true, - common.HexToHash("0x2461cbb150c2f51bc03971b18c1dcef8d1ea494a29386ecb7d25186bb245e04d"): true, - common.HexToHash("0x5b0d5a7d3f34bd97bfe83f83ca04ba40e471ea03d09e5ed8a499d74e9033f901"): true, - common.HexToHash("0x53748ceed2588a0deee487cf71591ffdc97df8c10f566d603c3dae275a217b6e"): true, - common.HexToHash("0x69ab757f1d2d85125d627e1f96b8e627ea0bca6d7975bb4d402dd3dd05b62eff"): true, - common.HexToHash("0x70ce9db50ae60589c042eccd94e155f4521c80503159debc84b95952589ac36c"): true, - common.HexToHash("0x43d750d577ce26598a972acec27bcc35d2398b429df9535449a6d1e2b8063afe"): true, - common.HexToHash("0xc56cb6a70d6c76a39a116c5af5f3b92707e04c65fdfe340e72e4dcb92d13cae7"): true, - common.HexToHash("0xe8dd567e690e3896bc39dea6151d1dc59233b7aaa30f4a283d7cd87c5bc9ae95"): true, - common.HexToHash("0xde977aa5b17e4a49837a6efb68588d2e74f4ce5a179c39499dbbc2f2d33308f7"): true, - common.HexToHash("0x1ac148aa6a080c39d85177c4aa9edf642bed834600dfa9ccab9a3791a5ebd4a7"): true, - common.HexToHash("0xb83cad377d828c86cc49ec5d91230009dce359a2e2c42d925c38093cb3abda18"): true, - common.HexToHash("0x6e86afdb0efa61d944893f74621368363d7792ad5763ed6391830828f535c11e"): true, - common.HexToHash("0x02daba2fc0f4982a7039fc3d186f06d86ef1b0fe5b37e05c1f8aac508c05518b"): true, - common.HexToHash("0x9347021aea441906b59aa3b735c96b583813b72aede5836ee5da4a502dbf68e4"): true, - common.HexToHash("0x25a3aa1810281254a870491408001ed1d227f808eb01d26ecd377fe3b15671af"): true, - common.HexToHash("0x241b1bd351230065034de439a9450293158f30359d64065b5081bab0953e548e"): true, - common.HexToHash("0xe1b035513aeec23287ac929a67d22cedb4fe026436597e7ed20d63906544b360"): true, - common.HexToHash("0x7771d7cfc1428db485b4541dae2f8c0424266c64a627f911e7f7403a2aaf867e"): true, - common.HexToHash("0x6a2639f4d4ade16c4363764797c9741cba7eedf1ff0dffe29c2a6973905161ee"): true, - common.HexToHash("0x377100e14b18b85aec8ee700b8add663bb1268eace23d6aa0b55801fdd0aa3db"): true, - common.HexToHash("0x9485aaf2f8c754f616f61c302518f2ba1fa9233ed685df9d9f228663a0b19a44"): true, - common.HexToHash("0xf1af576eb9b8c4b602a59773bb0e7fd55e52fc69315b837086fbb3973d9b39a4"): true, - common.HexToHash("0xa6438e53843ac1a9021c1b0c5b2fc67f3afd3342e621f1e6dcbc676d0b541b2d"): true, - common.HexToHash("0x2ba966131085cd1c92a43c9a803e35b2b229ebb447a7fa4d13058132f7420b0d"): true, - common.HexToHash("0xc30b34aed3079cbe6b2055dd04c44f3e5297e4fc797f8eac153c6833f67fe6ca"): true, - common.HexToHash("0x5dd37db7bde37fbcb68b18daa1ae6e2cedb1a455c24304c90beee27d59e99b11"): true, - common.HexToHash("0xc3c704c5097d2c16381d423b561ecf2e7334fb4912d1071dd94a4a861bf17c13"): true, - common.HexToHash("0xbc7e79f7a47ceb7a9c640d4c742a89d25becc4a92e7bffa02b69ddc68f6170ac"): true, - common.HexToHash("0x06d6c1f1769b989e1739bf80f9db2d612af2656d3958895664eec5d69daa063a"): true, - common.HexToHash("0x95793967f6554f1664f5545926391b8e2667f30544438d313425a746ab2b62c2"): true, - common.HexToHash("0xd3cab1c41e622edec3c8416e777dcecc92c6bcaadd6568c93191f005b842f297"): true, - common.HexToHash("0x767bdd1011ba8002465f5fee6c41abcc34a6125635e0851c55b6d71b437f2be9"): true, - common.HexToHash("0xac9983ce4e25ac708ee5a3de3442215cb3bbe71a17808122a057d1373e75acf5"): true, - common.HexToHash("0xd1f96bc0d85be0a6ba91201cefbff8408e300b0c89b7c03532d7f6b3675b0127"): true, - common.HexToHash("0xb06e22d298ebc1fdc7237a6725389c0bafac87b34d06922091900349d8d41568"): true, - common.HexToHash("0x9302641ec30af466418c8815ce8747ebaf1b3cb0a2a9c7ad5fd3e3cc750f4202"): true, - common.HexToHash("0x5b072d96c5d2d05c4c5984ab162a76972ea374210f0420ad0fcf336fd106527e"): true, - common.HexToHash("0x050f0a852b97663cd0912e30cc293ed21cf238261e5e2bf35a763e730dbf2494"): true, - common.HexToHash("0x9b3293719f4190132ed522ac46aea320c82625474091b3d9e3a96dbeb5e4a8ed"): true, - common.HexToHash("0x3e37515398e432350f585bf1d6163c21e26958b27d34136a745fd998bda91ad5"): true, - common.HexToHash("0x89cd6bcc7751155de2132e82e252f6cf83f14d05f64bfaff71858b55cbdd7e97"): true, - common.HexToHash("0xd8929971029d2bec0514ef85c8c3f9996a1e9a39ac39983bce2a2007bccc181a"): true, - common.HexToHash("0xeaea8f3a4fb1757aa3230097762d7263557aa6948818961bd486a437dbaedd3f"): true, - common.HexToHash("0xff7fdc1b72bc6edbff0a202df1e8818e4b1a65a45938b0ce019981b9b357f552"): true, - common.HexToHash("0x2bead9f3f27abb749aaa1ed0b984103220e21c9c8d0ada2e14f181dc8c771c95"): true, - common.HexToHash("0x24be211f50a74c8683f93bedd315bcd4736e893e088cc216ec30058a3f277230"): true, - common.HexToHash("0xec3dc1d4c92eb3d2b824429f3d191a918176ccd1457da7d14752242a0e752b15"): true, - common.HexToHash("0xbc10f9104a2dd62dfd88db8d74fa57e950d57c06df8cd5ef217494e0752a00b4"): true, - common.HexToHash("0x1fb73198e02ba1e06ed26e3297d05fa909cf115bbb52f6da598f10f255b8b2f0"): true, - common.HexToHash("0x1e5cdbc2af684dd0f6694ed74fbf18de65309d5361f128033b545411485363b9"): true, - common.HexToHash("0x5c53353e040683ab005ad15522d8fe7943e4efaf788596e995d7dffdb877825d"): true, - common.HexToHash("0x53221163f185e71f15848570ef5350ed50e4becbfff27e7110586e0a1a02e4ce"): true, - common.HexToHash("0x1008b8c75475404187cc162200a910d85049a43166ccedb860434cb10fc0b814"): true, - common.HexToHash("0x080ad06d1996cbdcfdc8e43fed036d46258bc0862471e8a1377c11a36d644792"): true, - common.HexToHash("0xd5ae52f7349ef9023e84324c9fb23b29043ec5447c8e24e5ec4a3f0dad57c5ef"): true, - common.HexToHash("0x86cc72de8d5c5c60af1901a8a7ceb339b9e0353e75f17434809c24d29fd30509"): true, - common.HexToHash("0xfb3ca6ff7be7c2068f3630d6bd0329783f7951db18107ad1fa2cda8ca49d0276"): true, - common.HexToHash("0x34863303066e6a6df19165a8076a9e9d3a3ea6163f86f13f7337ea13c43dcc9b"): true, - common.HexToHash("0x43d00552f0116be181e153835f3306e311d95680f8cdb8ffd1e9b41981f462dd"): true, - common.HexToHash("0xa473c074060bc7114c6a6f479547d779547145c4fe3b6d31ed65f71d53f47238"): true, - common.HexToHash("0x70c1a4065918704e30115fad7c43f4b6b7aee2e41febc8152e3799d24480d2e1"): true, - common.HexToHash("0x2edd80b314b61cd06814f534ebdd0f8633861b104502ee73946482ead3e80574"): true, - common.HexToHash("0xdcd8ffe8e533b38528bd6a0febc9a4a8878f4184382028d6507005ea9613ba64"): true, - common.HexToHash("0x9feafc92bcaa8d0a0f9ff9395726776ea912bc57e83810ed34c9b35994c2881d"): true, - common.HexToHash("0x1d16a1b18b6d68315f022c50fbb206abce1a06c1e6fd1a9f4f9fa49680609b6c"): true, - common.HexToHash("0x9afaa88c059b1cbc95c7e8b42417fdb0584866ac6290d3b201aeb7d1cc5966d0"): true, - common.HexToHash("0xb52a7b732dd35fa837f00278b9f1e3218e394d8bc14c62da88eae28bac84cf77"): true, - common.HexToHash("0xb339140c46c118700c8d46f4010d4c08f1882d0a2e3d6a4993722aa283416a97"): true, - common.HexToHash("0x0a98e56e15f2ce7437a0f32a12e62b34b10f84966e341f86cee40356faca3399"): true, - common.HexToHash("0xf40e383ecaf820293f8432cafd72892d667c1f016640cbfca8e7ffad350da246"): true, - common.HexToHash("0xc2d70fe9f4addee9f819a7b8dd49f5f9fc09ccf7c58921ed4ee75196e8770740"): true, - common.HexToHash("0x51ab40e122dda58ef38a0e8a1a449bf5551eee848c6318863ab24adfa2772235"): true, - common.HexToHash("0x2829cfb8cb17ebfa244c8731857f48e2242786e18ea5475dec9bb9bc6f19223f"): true, - common.HexToHash("0xc7e8d30d19cd83d45ad269011850d5e97ac73d33276a0d059b313579767e81c4"): true, - common.HexToHash("0x576b6293d1e3c40fbfb6e7a37785f787fdeeb61146ef1f5aaec096807813a92f"): true, - common.HexToHash("0x05eb568780347a0cc4daf71ecec6dc4b6706aa22dfc6fe17eb9076a8f08437b9"): true, - common.HexToHash("0x2dd1968cd64022b77d59115cd93fd4a9349f31a2435d5d165bf0e97abecc0ef6"): true, - common.HexToHash("0x7f21cd30c7ed44c82cae7ef0ba5872808b7d4dab9e6b46011680730fe62131a0"): true, - common.HexToHash("0x9629370dcc4f095b0b8398fa4bf68f42a2bcd74c10485eef93b6bf09c2c2d1f9"): true, - common.HexToHash("0x7f988bb1baad35e1b4a75bad72bea5e94a83c9afc2c09aa44ce3c34b1f624e3f"): true, - common.HexToHash("0xdd3f67be3a876e3c5b1526473b51d3585f1e941832c6e6c7dcab9340943899dd"): true, - common.HexToHash("0x81b51ad53e226cc14682effe2b97b2733f90c45c92b73a633667ef2e44ce3108"): true, - common.HexToHash("0x82ef29fcd79c9187bd0c352d682dbbb9e4b226a5a43ee59f15cca78e667ee18a"): true, - common.HexToHash("0x5ca59d302321e31afcf096de58503d465944e6c18445e9f527f78b25a66e1572"): true, - common.HexToHash("0xf95a7f55190342b79b476a2377829d3a9b50f69d0029546d5060051f678872fa"): true, - common.HexToHash("0xb276291ebf89d6b3048ce8b9f34f845fbacb16b703282ad392e8adf602fc0938"): true, - common.HexToHash("0x76305d968a17b81974259ecfe1448217cc2c98d922ace4e44120abadf2a11850"): true, - common.HexToHash("0x8072021e631401f9cbb8bc0f928ad78947d1100f5ef09298415c138c912bda9c"): true, - common.HexToHash("0xed560daae262b8912b3e0b5a5a38a0ec45a501c5398cc33fec1f6907dfb81c35"): true, - common.HexToHash("0x2719d79337df02e8459d2f6f6325708090bf35c1409fec9ed8d2facf2a782ac6"): true, - common.HexToHash("0x69faa464d1953b70b8dced245f15763ef197cfa22f9f1ec68778086b02460cbb"): true, - common.HexToHash("0x7cb714d5de884c2035ec7c97ebae58093f1af34f5f293961fa9f8115b39651d1"): true, - common.HexToHash("0xf876e4dd198ede37d00bc14ff5a8ac905f3e31db1f7a9ec1e2808b72b7fd6126"): true, - common.HexToHash("0x893c89dbe2bfbddcd4f024356bf31c69ff34cf18de1d5201bca5539fb539fe93"): true, - common.HexToHash("0x3c26adc38ec73279558ae1b4f07b4ac1c0d96e4ffbf9e53cda4bbdbf61623965"): true, - common.HexToHash("0xa9056081eabbff6336e71c93c99e708e98fd5329fd3cf04da06785ef2f5f8cb8"): true, - common.HexToHash("0x2389a94b41c86d4767768d54be95fe03a28cc4ef8f55508cfe905ba203653b7c"): true, - common.HexToHash("0x8b9f24aeae961abc8800976b0e98d81cd535c7b1896f6710bccf696f95cf2bfa"): true, - common.HexToHash("0x0efef021d4057cb3853cd269d2a03307398242f3278db8429d19cf5cf05de487"): true, - common.HexToHash("0xcce47bad5cafe9ba477c68377bce5aa8d3f5e505595a616f9eecec88816e7190"): true, - common.HexToHash("0x0791b91715b674ac779e5fc054a72f666ca486503f324c664230fd5d77506817"): true, - common.HexToHash("0xfef2d9fded1af31643d2d6ea5f67ea424d9eca1d4e34c32a47463466b8a4ded4"): true, - common.HexToHash("0x5fd3662dbf147e2f1399c47e6fd73657a522e2bf37c1cfcde8f319a9db8d639c"): true, - common.HexToHash("0xe444b15963dd51d10cfdd0f2295a68752d5f0a3642d1ab7782d556910cb484be"): true, - common.HexToHash("0xcc4044e6942615a6f4ecbb045755bae1d6552628f88d3c5dde9215f5a6835b0c"): true, - common.HexToHash("0xadfa1cdde12a58ca137698103014035f04f25e7d12ace773e21b640e31f63055"): true, - common.HexToHash("0x94b467e96c5f490454c62e6afead6e7334f927ba0601253c7ea5444c7d623668"): true, - common.HexToHash("0xf548e0fbe7f73d96c64e83bae44dd79806232b7ac33ab2863b96252ae10027fd"): true, - common.HexToHash("0x2387eec3784e151ee4561b6e760f88fa67ae86e53ae6892cba8781d63a83971d"): true, - common.HexToHash("0x8e17803f7402c87eb2ea7277c57256950784479202a6bcf9b6cee2b53794bc1f"): true, - common.HexToHash("0x1ea7182268a11015873ee378abcf3aa08dda9611013cbd55396bf85da9831156"): true, - common.HexToHash("0xca598137f4c1a0fe9f0ee4e7d6d1b72ee499343300cea1b64daae0935ffff765"): true, - common.HexToHash("0xf7a0aed8f2be52e88732404b83a86716a0ecc770f8a475ca666663467a61d41d"): true, - common.HexToHash("0xfa61180a07edda2f32f392ad8f7c10ada2af07688bbf596da522a9ca4637c1b3"): true, - common.HexToHash("0x9c318367bed85d2c1594d8ba37c4a9ffed2e763d5a4cee5f1f79a2bb775c7e36"): true, - common.HexToHash("0x9bf6f4ced6af5fed5d54ffa641e5807647689e4cc593629601e22b03dd1fcc76"): true, - common.HexToHash("0x8d5cacd117a4885b90cc73fe78613dae7d36f7534776369efe78be02b9ea7217"): true, - common.HexToHash("0x7b9a448a3a39aa75ffe10b3a568bdd222e3d585a98400b04a8e51cf870e2f138"): true, - common.HexToHash("0xe016f7dfd1dbca81e8cce2759fda21c8a08c6dcc8a0814f01a2935b9e6953bbd"): true, - common.HexToHash("0x252ee599231139ef8b329cc612aa8b09d4dab97b1b5fd028407b11d6d68efb2b"): true, - common.HexToHash("0x886c98e51e893be91f6757257b19a600c8fb827d9b31e41d5dc070a115af896e"): true, - common.HexToHash("0x5513d81852e7361e350c8b8508eafbcb5728bf8be89bbe2b82e8cdb68cf0f772"): true, - common.HexToHash("0xff5cd97eec57c87caeba403cf8594d6eaeb4ce974df5c741b63b67108bca6ef4"): true, - common.HexToHash("0x256e5e58e78f9dec17283ef22685674c8114c4102428331cf7f4d9ebede8a41e"): true, - common.HexToHash("0x70704a8b557dbffde8ae65f75f4e02f718fa07b7007d4c09fad3e7140fd0f3dd"): true, - common.HexToHash("0xb2de811709a1258effdd3a650d3b6138039e76a180da476228ca90ba8b78f489"): true, - common.HexToHash("0x8dc95c439ca82d6e8d4a807749bb18772a924a1164a35e4a1f8a4f936b0e73b1"): true, - common.HexToHash("0xc35b7660bed159d331506c05356065cd9a205f21eb1facb1e9556e702782b24c"): true, - common.HexToHash("0x98cf82fbadb59e2de558ca6c0b4f1b559924a0364ddd0f3d54e75d01b336eab3"): true, - common.HexToHash("0x1c3abc9d56b324e429624a3f009dfafb2f4de00baebd827ed85bef7d7467e33a"): true, - common.HexToHash("0x81a02d69cc9a54f6115b293440289e3a72feea177cc47fc1adaa3350b3dc59c4"): true, - common.HexToHash("0x7759ede496bd23e518d636c65ebea13a032ed9ff3a7c510bffccc9316cd35fc3"): true, - common.HexToHash("0x8fb2c682b349133761f1c680a6404263ffee97d32e67465c613ccaec9645b565"): true, - common.HexToHash("0x6f64287eafbe616991edf1a458f5c422119621b4da1cd2fa4ec2cfbe891053fa"): true, - common.HexToHash("0xbe8b0d6790fd461a68748e7e13a3380d611fd7d4c8b15594c7422eedf25b8ca2"): true, - common.HexToHash("0x7e379a9b2da42f1be6ef1ec437b0d54e114ba833cfbfb7818e065173880e0dcc"): true, - common.HexToHash("0x5a4f3eda846bc75f3776c918a5df7d84424a4335a9c5f147247b9a4902123fc5"): true, - common.HexToHash("0x9a8ab653a10122f1bc81b0b952e9a0900f63c8529e38278c744daa5362eb468f"): true, - common.HexToHash("0xd3dc7b311906b021cd09f5ba2845a3dacb01dddf63ab8a88e7db68b1dd1e562e"): true, - common.HexToHash("0xeac67c9553baf5afe70058c05954a6f14be3f31b4591a35269656c50ac9596ec"): true, - common.HexToHash("0x548fbc513552beece17ac291b0428ad3d164cc5200c44cd710e70efddb48795f"): true, - common.HexToHash("0x4ed65bc08f875bac0b1e631e7197413df9fa2d9ca1ff4ce486932c6892d9d8d5"): true, - common.HexToHash("0xdfa4304bda3c8f23e1f8180a814d1565624f818234ec7f7ab8aaa830ecd93af4"): true, - common.HexToHash("0xff4365765e86f45f4d18225c78a2ab661c2bf7cc7ff4b88f04b6e72d95c6a4cd"): true, - common.HexToHash("0x47bdc261bcaf10374e01c7df683121c1f685e5c87ac31ef4249ffe19820ca2ee"): true, - common.HexToHash("0x3ade8c4fff811d8a9e80f29632578df670709bf087c72e98fe626d24ec6575ef"): true, - common.HexToHash("0x389d84e85312e7151c405038365434914251f2a706b954cb16bd38842703d8b0"): true, - common.HexToHash("0x43ffa27a80ba3142b40a38eff636812aadf5bd7c599b3e23f4225c7e6ba02608"): true, - common.HexToHash("0xadedae2d950f9f25c0fe026907a33fe7d2f0c557bcfbc9ba5a146e3b8b9b131d"): true, - common.HexToHash("0xbf08affa34f2479ee15ae343f192ab57ff57f538b22166edfbd2c973943567cf"): true, - common.HexToHash("0xc06337409ac0b1a6caa149ba2ba470e8b2d773730584b809cfb1a33ef3810f1d"): true, - common.HexToHash("0xd23f5996bff4833c240a583e940c74b0db1e9cee7902f760e9de27b46d3dc8dd"): true, - common.HexToHash("0x829b13d65658b1e1ebc0bee404c4b1bf042c2d0b434b5c58b7986a1a16887bac"): true, - common.HexToHash("0x7f3dbb55b3f8409f99419d961bd53bb575184a7325705e4700507fc3f50f8767"): true, - common.HexToHash("0x6dff8d635ecf031b0666be861512926c8fae52ba4d1b044b2c9733d21e5f2bff"): true, - common.HexToHash("0x563b70fb3cb0c9d91358b9524b8eee47550a269659d3b874f403c288cae645d7"): true, - common.HexToHash("0x89bcf824a83b3b05f5e4a287e27f959a7e86a9439318ca9a87c1db106a65ef36"): true, - common.HexToHash("0x458f0bc30ce2855eb32e5e2a7bc2dca341be0c29dbc08c9b51ea546c53c0124f"): true, - common.HexToHash("0x53f62954d22b92c84531cccbd70f9ef8d6c2721c0ed81b05dab2e4f0f3bb2b91"): true, - common.HexToHash("0x3fed4885ce508f1bf6ff4cd7635e9151248bc667eaf5c3b9cfffdca5b3fdb767"): true, - common.HexToHash("0x6278b953708519e383f8a01eb37fc145fe29921e13121140cb3f838937236b55"): true, - common.HexToHash("0xd64e4c06f0fb72f749dc9fb3c6c3c5b926334841b6cf7e36164256c8191abe8d"): true, - common.HexToHash("0x371f1ef81eb9940bb1061f3515152a4ae14a69ab2d72f34b59071b66d96b991b"): true, - common.HexToHash("0xc06a61d61d6fbfb7109b64bbc82a3c1b8eeea515ba2718c5e8a3a5f1ab2bd5ba"): true, - common.HexToHash("0x80fc0207c1a9758afcc9b9df9cc5610a0d40e7c9ae1328becfa86ca21002baf2"): true, - common.HexToHash("0x04c35da3dcfdad401f40b2152b66e0bcfa26f566cebee663e788fb1074c914bd"): true, - common.HexToHash("0x5d67dfe5786b7fc87d59a4493d9b53d563a1420916d0b5e5a2bb4abc73270f4c"): true, - common.HexToHash("0x821d0e9cb0ab8ad3a649ac775c00214a61b210a568b76861b9bf478f5acd3dc0"): true, - common.HexToHash("0xe4c93ce741a4de0aedc64a3f08502653712d4ca6d6eb10f0731014e031c7cece"): true, - common.HexToHash("0x8da42ed11e8549ec9ce422cfdfa1e4c9d612640d8405e79ed034765fcbeaf3ae"): true, - common.HexToHash("0xea98925760b43d0452d87e6277e4b679351af44eec70950a02b3ebf99a7b2bee"): true, - common.HexToHash("0x9c68a0960b79492403eb4b3face3db0e1f13cb665d0b7df483c126ba837aa275"): true, - common.HexToHash("0xccba8479b51b3ae40f03f761c1479a6aadf244630cc6c3f35c5fba7380923281"): true, - common.HexToHash("0x883d3ec23f9b616e7b395124ed204735174fde6d0913507903f3b77f67207504"): true, - common.HexToHash("0x11d2223694074ceaf6874c22dee762b6cffdadbe5065b0eab6f0175a9fefb2c6"): true, - common.HexToHash("0x64f56f423a0e68a32c36d821b672ce7231641999d42267ae4ea5fc3e5db3a6ce"): true, - common.HexToHash("0xe7fdc045b2808e6854780d9c82f60b0e24a9d7464f9912ef10aa5ca5a27ba2c1"): true, - common.HexToHash("0xa3af8082cd877113c6a7ba46af4061273d47ebb54f23fec1de861107889e1777"): true, - common.HexToHash("0xc2eb0d41e1c4628a8c3b196022804ebfc3cc3948c9282ad7dec627e9a42e116f"): true, - common.HexToHash("0xfe4805b4d11aba6e1ba999882381e8b2991793faf815a0a15a45c174d89f7005"): true, - common.HexToHash("0x567d8800367ba43d3f275b794f7895a9e5b522d99e101cf1d3580ffbafdd7cd1"): true, - common.HexToHash("0x1c49bba7b481f7345f3fc3be2adef5c2343a8103cbe8b02b0081f70629fbe0f6"): true, - common.HexToHash("0xb41ce213d48cec526953fe0ec0900df16baa897a72da9c3c32a74cc9f75f9f51"): true, - common.HexToHash("0x5c0b24fa526122e54187e2a744f9d3a1c176f2d3cd41266787532fe5f34f1c74"): true, - common.HexToHash("0x0c6f4366b3f76109d9ce97e4e9e41320bcfcd85bc3af4b1688d9ffd405e2536a"): true, - common.HexToHash("0xfecdb44e454f85f1cac60a628df0fcd60f3fe84054f506d2cf88547c0b32ddb2"): true, - common.HexToHash("0x23aab9544b88027f3028b1313b0e3c03099a04b7305ada99ca5d44e88896a913"): true, - common.HexToHash("0xc23c2257defd7599030e9252ec2d9e16697620a72ffd65a2f68af7c9b13a9a39"): true, - common.HexToHash("0x902be7918bcbb525ad2af33977cadbbfc055fdd8ef9fb6749b86a6d261adc6e1"): true, - common.HexToHash("0x6c175882ad403fcbf197e738a4115ac0e388c485254d3da005dde344d7562acc"): true, - common.HexToHash("0x5f5806b0f6ac52aea6699ed70660d52410480b99767acadd85eb055d0294f8af"): true, - common.HexToHash("0x9139ca94f157ab6cd496d4051e11940b953a49d48262c61dd0610931f2ce60a1"): true, - common.HexToHash("0xcebe7c386fcdda66528e2c9ef7aae2e457285631bd31b5ca490d3f29306925fe"): true, - common.HexToHash("0xc7e6dae6b76b6a24e11e4545d1a3a23e848d253ac01987079a9b95522771b97e"): true, - common.HexToHash("0x44cedb44be6519b93fb62473563bc25a79941dee1e2257564b85160afe1342bf"): true, - common.HexToHash("0xff432a3bbdf926152d69b02dcb38b82925260b65d56a8cd4ee8e513686aeb92e"): true, - common.HexToHash("0xe6c09978e2ba453ff36571a43c6a6fab7ac7b31973767cf6b23348f00a1ae397"): true, - common.HexToHash("0xcd98b0007b8ef8fdea869ef8af172d52d4ab158f58c9404ca5658fa64fd31bbb"): true, - common.HexToHash("0x3a79fc173ef8759f5bc661cf0a5ce9ae574c83df7c19d83ba85acd95eee71e62"): true, - common.HexToHash("0xc64d6c8ff49277b0bc51f47e1956a2f84648eba3a17be9752247e5d53a5104ec"): true, - common.HexToHash("0x4fdb3dd87a4114bf25995b18be5587539579631413c8e04cc534d76abf840f9b"): true, - common.HexToHash("0x57ae8fc63525c4fcf2f2bfd3ba44aa66539ab9265c688717f23e0edddd29f1a4"): true, - common.HexToHash("0x4f5f9fb5fb49d4f6246eba74cc96cf715688922c9984882e57f139d9fde2b905"): true, - common.HexToHash("0xa3524c4e671860d068852375326b55c63436cf647fd5b07245ff3c4b74d41186"): true, - common.HexToHash("0x96b5c86a59765fcfebd47e34cdd9c6528bcc5c6865393b2f55b3c18a0b3e0bf2"): true, - common.HexToHash("0x6b8021f82f8eb0114beed25b5a79282e019c9bd59e01ef3dcdea0416fd92a493"): true, - common.HexToHash("0x9d9b79467b9b5c97b296d17f46cce788aeefced7be841258f360109694d54b23"): true, - common.HexToHash("0x399505f74e2794ede4971bc158f28717ea5562da01862aed983f60b15575e6ea"): true, - common.HexToHash("0x6affc03a216b904fedefda4531f9c5a64a91d41fe0d58cfd25b547cc6b6da40a"): true, - common.HexToHash("0x70d0e06db9ebc5685770d3a9648d60fa932a98fb8b22e1aa28349ef5c63b2962"): true, - common.HexToHash("0xced0976ee727e0ec6394af04a5a0a5fec476ab1c2898c378edd25a57b8c62c92"): true, - common.HexToHash("0x701e49f99b0862252b0c6c51e7c42db5a389a50fb6eb65f522ec5b726a065f3f"): true, - common.HexToHash("0xb592a5c3708c6204334c9db107f9c971c8b4e2a5e1bcebd48f6360f9cb876872"): true, - common.HexToHash("0xf00802b16f0acddf64c122d8f480a9b48ef0babf6a262a0df0bb3ee019db4398"): true, - common.HexToHash("0x9b622153c0e2b8d5a2384cebefe331d7d7fc98cb14e06cd2e3abcfdf7ae41a79"): true, - common.HexToHash("0x1fd891d0f9256e18810d08822bfddfb4e3db40a585869da156226562625c1bf4"): true, - common.HexToHash("0xa33880ddbeda9ab42b9ceb471c13eccce4bb295cf742a9360c466da93db94d99"): true, - common.HexToHash("0xfac59a22457717e47d951413070de16abb5bdb98bad7d17c4aa8e12a2b2077de"): true, - common.HexToHash("0xb25a34aec02232cf53be637126db80d83672a1c092fe62790b447b62ae6fc0ac"): true, - common.HexToHash("0x18a431b22e5565036f0c5e0153755419c96f217fc1e18102f0fb1d19779ea919"): true, - common.HexToHash("0x2edbd4237829c50763d680f68e63113e5e7e24f00d803aa14ecb1f80e6e4bd85"): true, - common.HexToHash("0x0cebaa7f2c6f17a42527e7b174ae5a5f1f34b09724b2a6b17c538317ff1ad716"): true, - common.HexToHash("0x0cbc716c14247eccaeb204c00ec20af375aab8747397eaabe92fcde952978c3d"): true, - common.HexToHash("0x30635fd80ee9db3c1096ec53e89dad304ed37f5f22cc31a37fa992a26e780a47"): true, - common.HexToHash("0xe5cbfce5d6b610270a81cc8bf0ab330b6f5dca0c727f6a5f58f661bb2889ca42"): true, - common.HexToHash("0xfd5404cdcf51e073b525c0904e4312572ab049508ca28bcedb77ca2b06981d1b"): true, - common.HexToHash("0xabcad4dd968d0258c8bdc1acc3dbb6af26f826b2f8c82e7dcd74a1aef09c50c5"): true, - common.HexToHash("0x64d7a7e0819b54074b4fb9b59b58c65aaf74f7ba31d590f605d4c5ace365883f"): true, - common.HexToHash("0xf3368178443de05881d550d5f4488bb568f615d982491d76494300682d670aca"): true, - common.HexToHash("0x00ed0e2abdc2da9163fe133a8307c954143ea7d164dd6ecc638935e6e506f4e8"): true, - common.HexToHash("0xe814515cc3b49533877c230a259fc9bfeb7e16a6fb5d38a6e66a22076c5fcf5c"): true, - common.HexToHash("0x29d9e9ac9e4e9893e496ac105ae6cc1ceb792cdf28b1802b952ecd907943269c"): true, - common.HexToHash("0x64eed66f74a9a483e81874f1ae1f818f3735553737934d09ad52c88b80bfd4ec"): true, - common.HexToHash("0x2367e6b628ec2012d459c6b84a7f3ea6e2dd4183f48c9c5a15226755f7e06532"): true, - common.HexToHash("0xe98df49e79bf3a70e564dddb7c0cdfd429357a45af062ec204d6c94f6ef631c8"): true, - common.HexToHash("0x9137906a705f3462a8b799bdaff8e649e8c0733e5c2ee5f46e90387bdd6d0554"): true, - common.HexToHash("0x53ee4bb385c0414455b99a766195503a76fa1d6af7522c65415a38d5a39c32e4"): true, - common.HexToHash("0x37ab9f581c762410b9868ec26fad1a7a84ccb74889394cb7d6a89daf318f15a4"): true, - common.HexToHash("0xb93d137d14523d626c4d61ba16fd7f0d21f9b580af83d158dcb07382f0503e53"): true, - common.HexToHash("0x8895c28cfd2dae8ca02fe14e0f376d7230fa948b8f859a67c5bfa1feaa8e7367"): true, - common.HexToHash("0xd919dfe6867d0ededf7fe3fe18afd2cdd48d8811d013e456a140caabc411fde8"): true, - common.HexToHash("0xf9b2520329cd1f8d6ce9cdff3b6acfbb43da7995a9641d61455a64c4f837b08f"): true, - common.HexToHash("0xe39a7585e76889a351539770861c4c7a695a9a392e6e1b4bfca3fa51f512b952"): true, - common.HexToHash("0xb9f5b67f63edc9b5ceaa4dc097d9a06100e9d397d918bcc8b52dc971bf2dcffc"): true, - common.HexToHash("0x6bb1bf89c554f3d51e66c1ae7bc9e0d481e43fe26f89fcf7d6353e109a3ce27a"): true, - common.HexToHash("0x4389a6eec9df1ea1effbd6d6de82c4b71281c2bee537933236210322b108e269"): true, - common.HexToHash("0x1283d5d06b50fe56ce587bdd4e13e5799b881f41aae2256e4e0ee8b1b7567843"): true, - common.HexToHash("0x5e5af92b04cbcc6e800b5c5e9062efd437e66245002b116f2ed8c09c8e95893a"): true, - common.HexToHash("0xa3e59af9ca7d84cd56e1bf7f05ad8be654782010bc747b3836400aef0dfeb157"): true, - common.HexToHash("0x472d5b66c638f1799f3b86e593d9fe8faec71249f68057c93b55635d2cbca8fc"): true, - common.HexToHash("0x72b01a481bd18a3ddd03f72ac2d50c03a53786815193b00999abd790c7f6236b"): true, - common.HexToHash("0xb4105e626b70365f8d16988e0a8ce00ab22f70112f3c3d1be2677bcab8974241"): true, - common.HexToHash("0x0641bbfc5704218b2a0f8a61405699d2d4cdb244dd49e8fef17febe7fd2275ba"): true, - common.HexToHash("0x5bf8f7657753eaac0cda1f44e9aacfd9a6d7b794977aed031b4c4be55720f706"): true, - common.HexToHash("0x26ddf60d6d84da4c064e173b64b9e7cbad1d27b5d096fe2563651a5eac2f2894"): true, - common.HexToHash("0xc111300d196947f3bf99ff4fd1c1fc367b8a887ea94112b2b70442128d432224"): true, - common.HexToHash("0xea9421903fd82665695f9c987a4e73caba1234ffe90aeabb5aeb954b6d8ba726"): true, - common.HexToHash("0xb034483479122d0d98eda0d672933c8c7d77553da90d6c444f74a1e03248f55a"): true, - common.HexToHash("0xdc421a044c2744aeddda04be82bd8eac6e8da1436359cb95b1d4f21e8c154059"): true, - common.HexToHash("0xbe7f40220164ae46139ac5ea197f1fc0f130ef937dc4d89fcf20469b8842a1b3"): true, - common.HexToHash("0x2ff0f750965ad53ea27f0da56c1480aa7ec6b523fb5ab6bb8d7c4117af362db2"): true, - common.HexToHash("0x14989823eda844bb39576b3ba23178c8e2ba7e74b839a1846c2e8b441423d71c"): true, - common.HexToHash("0x1afe13f3ed80998d3e1e82897bf8a7252f19cb826035a59c74ffd18dc6f95ac1"): true, - common.HexToHash("0xd832ecab185a28ab22b13e9056ae7fbed7973a666b24865aef008f21eb4cc7bb"): true, - common.HexToHash("0xc2a40aa2699acd4749e45b3cc203cc75168b848453ba47b311cfebf21c797bc2"): true, - common.HexToHash("0x1f4557b98bbd09026b730672364ff26af0f56bacd5fb5958ec4fef6d9b719521"): true, - common.HexToHash("0xa06d5238c06814b9ae9ef02b81e604c611947459c89205b48cdd94bb398655cc"): true, - common.HexToHash("0x1e3db54ca5f04c42219ecf774050f2f4d3386da45548e405bf2d8d766ac0e77b"): true, - common.HexToHash("0x7d3fa9da53c8cea885b646c0f5c98713643e29361821ce15bb07b27bd17f2bfd"): true, - common.HexToHash("0xc06b2f1ca0e728603cd84e7eaf5cd2e5474fbb1b571d1c93d5dd3f8c9347b500"): true, - common.HexToHash("0xe343bccd5d3412d24b9c415607bd3ce30f6176ef9ec129fac3953f0fcbb76a87"): true, - common.HexToHash("0x6c40421587e5564da7bd2aa9fc68087f3b15aeb274300a74f3245ded29752a4a"): true, - common.HexToHash("0xdd2e5abe2175ca5d8ca364eabeca31a9efa91a69e691becd58615344ca871dbf"): true, - common.HexToHash("0xe6518a37b5ebdf362327a79a1002e2dce62c50061e6ecda1d92fff1f2987cc41"): true, - common.HexToHash("0xbf559f2d918520bc955695e9cf29a16ee5e13ea8c6bd7c0b5678f5d9521418f1"): true, - common.HexToHash("0x0aa9e9239307dfcbe06196d8a3d47c062664b175754e86029c0e6b7522d7f755"): true, - common.HexToHash("0x2a17d489bded117b25e0d78a59ac3afe0808cb3eea7399cd687cdabb528a42eb"): true, - common.HexToHash("0x7c6e1518a0cab2caddef092bfa2dacb2ac0786bf171d2fa392c004e57e9ca8ff"): true, - common.HexToHash("0xeb889095b4c9e0bb34179839b974dfcddaea2ef7d5171022a2f47e4b3f97fd8a"): true, - common.HexToHash("0x62c60b279e47e062fe33f72870dfb3f909847b61261fb3376d1381432ccefbf5"): true, - common.HexToHash("0xfca3624a1138d1cae836ac7931cc884c37b844685e09aa259537a09c75b691b9"): true, - common.HexToHash("0xf6f270702595df748ee3c97233ac8635f69645f05112428b6622b68b1fe91f84"): true, - common.HexToHash("0xf8a63f592143d60056086d67b4774d34c25647aaf3e268f8a5f25ff0cbb6a000"): true, - common.HexToHash("0xd34e181d7a93238a031a46b2ab1e0f7060b75f39a2334a5d930fa7b63ab95ded"): true, - common.HexToHash("0xff35921073d9c8da37d85da1312179017dc61d314bf05fa7b02f0ad4a5f80b92"): true, - common.HexToHash("0x795790cfe150f5d2a4b4cc43657d604162b732432f9a1ce89b032ddc1fa3d118"): true, - common.HexToHash("0xd1d75317c8ee6a0d298c339db3fabf0444dc8b196ec8e3e4bae0e95dd2d16694"): true, - common.HexToHash("0x9f2955fb9a5003d2e580ade92ada4e28e424a612bc5053f97f233b1dd88fbc04"): true, - common.HexToHash("0xe46a98127430d22e3c34a8c0155bb18b264c58af8a345acb1b9b914a1eb3d4f5"): true, - common.HexToHash("0x202e0f17d0fd110f64f9414b600356ce575b8b75d76f0fa1c185c06c8c1f72aa"): true, - common.HexToHash("0x51d51fd17f84670edd1e0f82fda9559b98af0b9ba99b88f86e1436a8a668851d"): true, - common.HexToHash("0x8c48ce4e37a9746f3798210ecfcafd3aa4cebbaf887bcbef2aebabbd92b6d3e3"): true, - common.HexToHash("0xc66c391924648386e42ea114f8ff6f5acb526868d8c6e69adb220c271223027d"): true, - common.HexToHash("0xbf7e94ddc6dbeea5529f323c85fff8739ce42f70a83d8727955c46fad566f00d"): true, - common.HexToHash("0x70d6cdb3804273ea4161e14676546434566b14803a6eeb86cc7c3969618018b1"): true, - common.HexToHash("0x2dc9ff6ab1ed0670dfa9838dd0e628c3de485a2ea00edff8b69444a71e9d6e4e"): true, - common.HexToHash("0x2448e20f5bb6ebb2a04f848fb64dd53476f426b0d91de52139e061f6e2b84f67"): true, - common.HexToHash("0xc6cf325e485e98ddefedd11cd1a199b4df8a1680fcfe17d9ee0550ad9d600814"): true, - common.HexToHash("0x476926e25640f3a1add491f3d56b9f691eece0fe4219186b75c1afa47d2abd0d"): true, - common.HexToHash("0x0acc36f8de492c924f132b9edacf4479585ae0fb30c368d539e3c43d71a9db17"): true, - common.HexToHash("0x2e1c4b127f46e50a195f73a65b3d27dafbac744e99bd359ebb2c826050f387dc"): true, - common.HexToHash("0x84f9a887784a95c79d01e17f184e8c386d827302c7c15537c37f33d9eb9913c4"): true, - common.HexToHash("0x8b1af8312bc75c7f30d34ffd47e55d9d5f5f62c7a9e33246d8d379d85c2076ec"): true, - common.HexToHash("0x06baddd0e6656942ec7c5cf4a478b840709c262e45918548dd9ebca0c31ec6cd"): true, - common.HexToHash("0xa3beb67bad66e2110837d9ec913e02b086a502c7bc7f90e8a1932854ef4810a8"): true, - common.HexToHash("0x9197fa05cb87fb4faf333003a098f1371bf7606df672ee43f8a4b8b5752282ad"): true, - common.HexToHash("0x3d6abe856e1bc15ee3d69a51e2149e5e7a51fce8e2ec08b164e47983f7800aa4"): true, - common.HexToHash("0x9bd6b29149ebe0399e66bcf27d1978168a1cf401b9f4baba1ae4cacae9931a2b"): true, - common.HexToHash("0x218fd4a2b66a3c23b9935b32a084f9e5f596055a953cdd9521dd157842329b8e"): true, - common.HexToHash("0x2d51bd136ac52459bceaf1c045aef5532f81573435882d9065825838c375e347"): true, - common.HexToHash("0x6bca106e57ff178e3f62e15229455377ac912dd3ec034d0850aa6bd340c2ead9"): true, - common.HexToHash("0xb77edbfc5452d90fde01a354c1664eb216fdf933bcb1521ec9dec390d1fa2b28"): true, - common.HexToHash("0x57186e969e91071d6a2574d217f3b631b2409254db319f029a8f193d955797e1"): true, - common.HexToHash("0xbb5ba68eaef3df75b2d21d188109326442ab38453ec7b3bfd1367ae03b64cf8b"): true, - common.HexToHash("0x9648e061ec9493af091478e41ce90baae2da137b8fd259dc902154952e52c29c"): true, - common.HexToHash("0x3dde8ab78fdebb58eaf98be11c6c894fc7d5abd291fe454fbc6cd16bd7c541d1"): true, - common.HexToHash("0xab1faa3ecd1831cf672a166ac5d13d51293c3c9a0c804bc618b830da82a67ec3"): true, - common.HexToHash("0x38a569291c50077816e8d4fba7279d5e4e239041eb2113093f50a08606ae7831"): true, - common.HexToHash("0x3799483d03a64b5a3259cb788df516a90208fb5c39d79acc2484cece11f1c2ae"): true, - common.HexToHash("0x1039db07664cbbe274462cb9a432a107a18f870abcf6f2f1adf0e043e26d0eb8"): true, - common.HexToHash("0xbd28948f10d1dee320c899fb64d21d96bc418b226d7d6af82491deab6465e35b"): true, - common.HexToHash("0x6deebb671b8a3b0539dd4024e8268dfc4097789a177b7a83cb0b1e68f4fe0612"): true, - common.HexToHash("0xb21ee737fcd9f6d96615b05f576186e0d4f86725b7693050d56bbbe4c42ea394"): true, - common.HexToHash("0xfd540aba32eee627a85b6aa601551923cb4c7f1e02e6bf6f6f5bb36e3ce25c76"): true, - common.HexToHash("0x89a9794b23fcd79c8136f87be772d9647af8ccbb97f8673f2248b34419693114"): true, - common.HexToHash("0x5a9e39072f82b85d039110e998abd4ee331c794269eeeb9b888352e087163ced"): true, - common.HexToHash("0x64e084bb86977033020e59ece1139020862bf68145590baf50b6f2271a47ebf4"): true, - common.HexToHash("0x5665d08b9fbb6df2828fdeeddb7ae59fd42d5ef45da5c550cbe514c7944c084a"): true, - common.HexToHash("0xdd981791a096decb56c6ff5693bc7fb76f98939fba89d27ac26fa15dcffbbf9f"): true, - common.HexToHash("0x86e81cf32a87353e399e156e04f01decfcc30744c89f94a67b8e45178257ee83"): true, - common.HexToHash("0x833f976ecf967791c6a2dede0cdd4c1cc3dc5c46f9f8af69ad6c2a99997d121b"): true, - common.HexToHash("0xef27ff203e331b237b9b3b5d42f63fd84d6b94f382e1020cda0a4136978b527d"): true, - common.HexToHash("0x86a388555115b5fb186765f486e9d1b00089ae8ca472fedd6ad7aad036162494"): true, - common.HexToHash("0x0dc81436d0d3465fe33baf8b866da4a324cfa173cb9b4d61480ec21f19dc411f"): true, - common.HexToHash("0x4ce71d50d9f61e1e78a92555c1fc463e3dc1ae691c17dc31ada230a7c6ebd473"): true, - common.HexToHash("0xeb0ae932a704f3aca44053fc449cf7fade882f7d06605e2b3e8cb730eb1ec6e5"): true, - common.HexToHash("0x7e66c1b7ad8cafae3cfce545ed37e83b0264c842b7d1e24d04f58ab3cd4db22a"): true, - common.HexToHash("0x77e66f78aa11ea2373bc53ac6275706fdad8f751b3b1f043573975127df97bb3"): true, - common.HexToHash("0xc5831fffbe7a50936171242f643994a0c8544ad2977bdc03ac6aa9cc0a06a1bf"): true, - common.HexToHash("0x23aada2e925870931648b26111212b175f50a95646ca205897c10ac33fc02f17"): true, - common.HexToHash("0x032603dff2307df361786204d5999a49291e1780efcd34c7109b3481f32257d7"): true, - common.HexToHash("0xaab18e51e51abb24e24aeb5739a26329e1c161427646c4b9cc105fec5ab55b33"): true, - common.HexToHash("0x31e0e3b539aa3595bb757769805289262cf2bedc1a4aff662452642bf0076e84"): true, - common.HexToHash("0x0c57d0d16717e89ea366469d2c90ae5fcec0b256fead1a25850e37487e86a487"): true, - common.HexToHash("0x01c23d5d1e72e564451f5e88a8250dccc49f463d429a3a9781a98ab74928b229"): true, - common.HexToHash("0x3bb4eb008aef67e233ae0b6fd537fab01cd5bf88425fac6741ea8874d6e1112e"): true, - common.HexToHash("0x071895479e342bda9134d6019eeed71750cb03fa619d157021b72440d667e899"): true, - common.HexToHash("0xc118fd611f1f0b15c3cb1f3bec5099586dbb555ccafed44bbcb6b89be1239ffd"): true, - common.HexToHash("0x174cd8f843ad5d7ec20910ea0c7e97da1739661b7abbb9276fc45402626cd250"): true, - common.HexToHash("0x6522da2062ff56207da56b59e15e6161a428e6c0831d669062ce16481429fe23"): true, - common.HexToHash("0xa6510fe2abfc4835e17d96ed4bab929451307fe19059a6b4de0e5b6d0af76a36"): true, - common.HexToHash("0x087a7f99247a7ea90e5ef376c2d0d7b819c86c3a7f238bf6ea5e832b7edaa795"): true, - common.HexToHash("0xd445c3997a2813e2ce0487acdfdc5eaa05032165bb17a236c36cffd179001454"): true, - common.HexToHash("0xfc49dcf767ee1e8eadb950f19f15160b72e1f7fcaf0cd642bc64226c603e63cb"): true, - common.HexToHash("0xf462b603b0cf629058bbbc24891ae52e8cea0d44b8536835eeeb0ba51af15cc4"): true, - common.HexToHash("0xa334b309a20077068fc6f0cd38a076411cd88b7b9bc90cb9e5ca85127b9c9688"): true, - common.HexToHash("0x672045397e6b58c846847c665eb64aab94881da68bfdcfb5fa5e62a49360e3bd"): true, - common.HexToHash("0x3175190243ba7651b80ea47493bccf3696186fe9ee89cf9c1a54aa88ebcb74c6"): true, - common.HexToHash("0xb4b334913b83d553487f4b56eb8598734c3af051c8935566f02e2820c57acd1f"): true, - common.HexToHash("0xbf3b7bdfef91c9882351a28aa1c7eadcc0e60d6cfc5584cb734d47fa0b12c799"): true, - common.HexToHash("0xbeff4225991c5b40f9b0c098176c712830825cd97acbf10cb581414d9f4aaca2"): true, - common.HexToHash("0xfefb1858318d87c54cd68fbf41d27e84dd2116757a3a93825d54620968bc3a48"): true, - common.HexToHash("0x9bda8b8ce7a09ce8028fcb11e7a17681cb182577701622c0afc28da150cbc6c3"): true, - common.HexToHash("0x1ee39c462ef434dcc5a411808660b99d6506c2d9a4c545b622b88770fada6c41"): true, - common.HexToHash("0x0a51e75a2cf6a711be64f246d918c200c14e3643c1d8b1b75b532a121556d0e2"): true, - common.HexToHash("0xcdc83c565896b36c3c8f9746d2b9433ab0b54e87154261b7319dcec94fac6641"): true, - common.HexToHash("0x17ee8ade804bee3473516bfde6ecb275d0bc2dfa150f992a4a56c5515b469b4a"): true, - common.HexToHash("0xcc42c9d80a62c8e2e6f10489713b8a0e5f0d10ddb8643f62ba46b8b22b9e0e72"): true, - common.HexToHash("0xf9570b100f46ede5c49cf25dda500bd8879fe7e7daeea919c35fb25eab58e7f7"): true, - common.HexToHash("0x693a1e746655326213882b3a384d0f57026a35cc2b4b8357aaacf08de9e0e32b"): true, - common.HexToHash("0x68de82be3b275a59d6d68af2629cfa2648b46dbd9db7e3ffaa48437cba8ff72a"): true, - common.HexToHash("0x31f2151962150f8e42963d894f8618c62608aa981e472e7ad6fe7376bbdada89"): true, - common.HexToHash("0xa509ea710d2f24670ba557859d2e253e65412cdbe289a7533bac7f25880530ea"): true, - common.HexToHash("0x5ba4abebca7430ec18ecd44685942b5e657f82487105f055391d6c127405acf9"): true, - common.HexToHash("0x3068cc93a7ed11c974c785f9103b5c8dd8810b1f331054ddf5dc8e59fee31311"): true, - common.HexToHash("0xf087a8326e434548eb4e561fa2c7c204271664784f87912365150ebf13608da5"): true, - common.HexToHash("0x0be8e256351f68219591aa3a9239b6afb17e3bd12201ce27075cd4db899c36cc"): true, - common.HexToHash("0x248c7a65c28d3286b29accca4cc0d71dde5f6c486a2bd9cf9098596b710c4d1a"): true, - common.HexToHash("0x431fb6fc9da0277f5492ddad2d843b917321c2b9af51f56d8b0bacd633596379"): true, - common.HexToHash("0x5d8a8f475938d7ecc23d9e9c0257d0cde27b2dce7a66482e9167613a9cba4cee"): true, - common.HexToHash("0x5ca03c7ab890f9e12430638ff656ea5b9cb8fef11605ed7b09099520593a8d29"): true, - common.HexToHash("0xc659dc44d5351a6fb97184a5d6b3f4d9c8781dff85a151f1ed8f45ebba832d8f"): true, - common.HexToHash("0x8345eaa15008776bcc362149b9859d122febe0ac163844def97897a554e81d8d"): true, - common.HexToHash("0xfeb13546ae735cd01623c91cfad280b4ab9bd4e91de47d75538ea4a1071dd4f1"): true, - common.HexToHash("0x685b83e1bcb8d00c5d96fe7de9ceaabfb89b624c2acfa38c6bc8b321fed3e5c4"): true, - common.HexToHash("0x56cb45ddc59dee150e4bd0442e3a58c670b38560f7c0f319121c7b0fbd3a0db6"): true, - common.HexToHash("0xbd9f01c327cef2ac5393fa04025d7b480effaa465d351dc586195d4ca5ae544d"): true, - common.HexToHash("0x40f64597dd5f47a5e3e98a4adcb26c06073d3e7f78167ca4327b596024c0828d"): true, - common.HexToHash("0x9e575a597e3bd63c7f55402cb2336efef30c6a298d55e9a0605642326aca77d2"): true, - common.HexToHash("0x0b31a45ae4c5e73507571cd7f23fba78809f7eeb4744181f52f3e5347aa28138"): true, - common.HexToHash("0x9715dd731f00be808ff60fca103d020789410e5dc0864a0ede6cc5d3949da181"): true, - common.HexToHash("0xa60b26507e40982b245b68abbab9a201432ce01ad3bf7613d421c45cf2821f0c"): true, - common.HexToHash("0xae3d1d4e701580e01b17d4b6ba7256d322439f416d3f3f24cad7b28e737c8d06"): true, - common.HexToHash("0x85a49df99a44ce37a3a02560fc07b3574393e30e99103735ed5f5f014bbe1395"): true, - common.HexToHash("0x2c3df506a801816b8c8c8c239b7a63941bb6efa5d320ea79990c5725ed7bd77f"): true, - common.HexToHash("0x7cc29e5faedd1b57e9c8ea3795845e5665411761b43f13af548a5fa05aa9408c"): true, - common.HexToHash("0xedb4ceb21b6a03cb62ce340202f32632111ca68574910b162bc2ad4609e5d867"): true, - common.HexToHash("0xd02f37807abf2455760edd6b505b958e5cce820a4061421a3ff0626901a60d19"): true, - common.HexToHash("0x5d551cc04785ff340400337380d96ce0e6e43583c6220e5ac11a05c1c71f5b15"): true, - common.HexToHash("0xbb251ae6e48e8667e32261acccda6bd715d685bcb02b6e25ef1ba07301c4dd66"): true, - common.HexToHash("0x189b62a6530eee4aad46b1be692f45681ead406d24a9ae249decbf3ce38dfd16"): true, - common.HexToHash("0x3c98b32b744c447f1d627a81e7e6ae48d00bef4789928ad19e4536e259dff3c7"): true, - common.HexToHash("0x32f3f74f116e2f6d1f9c1f46c93b2242c5f18664ded7ef9f12e11bdf49d1c549"): true, - common.HexToHash("0x32cc0087026c764d9d8d1128a05d829c84048a2ede472da40ee697ac4b7dd0b1"): true, - common.HexToHash("0x5bbb0822fa521fb90559af63007c17ae7a525b2da4c7d2cce0beb362cada2ea3"): true, - common.HexToHash("0xd3ba08b2dd0c3b69b550e37c50bff4822e22144906b378246e3849f7a2817d99"): true, - common.HexToHash("0xc6dc2dd72d410d11dee11f324e11fb53b15b7fc7a6fc4248f1ca8a81b38c1a77"): true, - common.HexToHash("0x35226d84a81193b1d15c898e8bd50190424022f45daa76cdf57185583c6ff719"): true, - common.HexToHash("0xf0db13001783e8876f45c30c8a7b658503fffe157bdc06e0218ae92be8ec87d7"): true, - common.HexToHash("0xdf60fbf03da411587824bde37f4752ea6d3d3a074920fba8d346a13b5351ebbc"): true, - common.HexToHash("0x866c168f1fed936e4d28201736dd7b3746b7be40da7bb196469ddc307572e081"): true, - common.HexToHash("0x890314e66e5deb718bef0f86f90d5bef17f6e0d39c3d0297a35f2af81ce9e3ae"): true, - common.HexToHash("0xbb35c65abed7d8f65cbf9e2f3c8463fbc248948857fc16e1bd0223a8c80cacfb"): true, - common.HexToHash("0x713f31cd2c04d85f72ddbf09c700da3185bd681437aba64becfbb9673f962162"): true, - common.HexToHash("0xda4f577d3d8f68d8c1525893256bc06a691f2cf74731b7d184b8d306a133fc46"): true, - common.HexToHash("0x8cbb759a10455a65dc56a14d9bd0074ffaddfc56b9a605e8427a3f16c0022c3b"): true, - common.HexToHash("0xb25f0732a922db61e5adacedc0f26229927d98111f4998c5099eab12b8fb55a3"): true, - common.HexToHash("0xeacf910323ad0d8370e353846e339036f6652bb6392d9ae58c5341806e8c12c0"): true, - common.HexToHash("0x0cf9bc7cd94fae8f53e70df47db16ad98aadfd1f236401de187612733cb94513"): true, - common.HexToHash("0x4a08bcd09d7efdcc6e0c0ef9846c162e2434943f57ba9e4befa1f9cac0aac465"): true, - common.HexToHash("0xe36bc55cd9221178495cbf5d812e4d01a7b6a69dbe13a053a17006558b7706d3"): true, - common.HexToHash("0x88c5f9edb1c330a58ae6f296b8bd3338bdf64ed8e2cdbee07a1c85b38ff4d7dc"): true, - common.HexToHash("0xed2a2b6c1b3cc1ceae1db9793ff10d29df94042379cb80067fba745b8ad71841"): true, - common.HexToHash("0xfa8bb00f7071cdd95b9e28733bd7d9a0da618629f0d3ee245dc2408687283244"): true, - common.HexToHash("0xbdd0201bef0391a6e8622c1401c6b4d4ce243b289298996ff5a6530cb92e7c47"): true, - common.HexToHash("0xa0d74a06da8ff9bd605b0822fd5dce24cd78b518a6953b6a9a6292dcd936df41"): true, - common.HexToHash("0xa1615037d3e920081fcdd13906c2e547c84e22f2ff869a15f4daf89bd71b200e"): true, - common.HexToHash("0xbc0f95a8918f6d1e0bffe5e36df26ec290e3079b428d78b04197f0b896e4668f"): true, - common.HexToHash("0xc8252e625c4f7208c964fb0d9725f272b760a2e5ec2ecfe2a90de500562ae2ce"): true, - common.HexToHash("0x8760b3412060deb3bf030cfe5cfcb365d6538ac0233ce12cb01e4a9a4f287ddb"): true, - common.HexToHash("0x44ad8a93ba7208ce1eae5f8a484dce1f97bb6abc3fa025f578f238f1998b6c8a"): true, - common.HexToHash("0x973ccb6d6edbf2f453c7c9fe4a4ad88d46e724383452c48564dacdf60bd714b7"): true, - common.HexToHash("0xcc49dc3d4c554fc68103216fe29d3d8330a871d6f30f970475f3fc66666ed99e"): true, - common.HexToHash("0x63174bc2e8942831c0c7e7f5cb48469508391efdcadf5dc25f93e23566d6d329"): true, - common.HexToHash("0x065ababe1b996b35569a466b65466478a4b9b0d728b8a6ca89885194788bef12"): true, - common.HexToHash("0xfde870229b44248d858062d89ad13ac76b9798ccf6c99fd7e1f6613311d6da64"): true, - common.HexToHash("0xea85c0fa555d45d8056974d52aafc1ac179d0394b96fa94ade16e0c3b3910b63"): true, - common.HexToHash("0x714be357df05154b4c6a38db07de44edd6c6915ec038fef13ca040ee321d8901"): true, - common.HexToHash("0xe059b7ad1440c26e852a5343c101c159c69f99aad5d1f2e7daeb3c40023a0a62"): true, - common.HexToHash("0xb5c26d83bbb966388022b70e0c628f7d5b4c38ce48e42e524e887d6205d0bfc0"): true, - common.HexToHash("0x9930c3a4efd8deefcf34943cd5de66b20292de1f7b56c2aa8d53b85130b1c555"): true, - common.HexToHash("0xd1f4536becd7d9b3d580ffe209017c2c435f003f72d0673788bc90e85fad4ff8"): true, - common.HexToHash("0x44f72c8fb4dd56d546ce2b222eb9bc6722409c33bd970630f486ec0d691cd5a9"): true, - common.HexToHash("0x3d7400fda01524d20d64ed0d0324930d58d0bacf1cbb93c543fd51e4d23940e1"): true, - common.HexToHash("0x16d8fd2100805529eca1ecab09f438715988e67f6c1156c6583784605c7c4e84"): true, - common.HexToHash("0x77f1731e84bdffe76e3e763b208904f7b96fc90ba88af464bce1d57e7980c968"): true, - common.HexToHash("0x7926726d3a69e38390e51785c3142cdeb541cff1e375b35b74fe5f02760a661b"): true, - common.HexToHash("0xa9162b8332e98390a8da2346708d59a81e3cfced37e5dbeb54f1eb9b2cbefd60"): true, - common.HexToHash("0x24066bd8966be2f894361a0176f867a6d2f4438d3ce1e538ef5db77126ee04f7"): true, - common.HexToHash("0xa1b463839a1d0ef693d15c71dc229715a3745e8566a0e565ae78b2f157d2fed6"): true, - common.HexToHash("0x3fff35551c802770812550c711ff0173f805cc143b0f9d0015dc74953fcd85c1"): true, - common.HexToHash("0xb1d2d46ab58a8b044d9c940e8a472234b80d3c1e003581fc5e5d6107b552036e"): true, - common.HexToHash("0xf96869053835961058b5eb03928eca5cf3d3b6feb084c5e6e72dcc82b3e25010"): true, - common.HexToHash("0xdfe87ad82949c870edfefe95e1c32168a59ee4f7bd5cbb2131fd5d7bd57a0a84"): true, - common.HexToHash("0xf1413718a36a9849e6d9f823bdea3b0c457439a0107855bf50c8aad523a193a0"): true, - common.HexToHash("0x5890e361214cf1f19018b14659a5fb248851fa0503c6c119950401c848a96b75"): true, - common.HexToHash("0x01bd14bfd0568c4dd538116b791b5ba4fd86e4404cfff25d779baed866c5e869"): true, - common.HexToHash("0x33d68e497b1d7928f10788b0867890a4516cc484b82a129ee365aaa99df64b5e"): true, - common.HexToHash("0x6dc4257f252300c1361bcb1fc969b8084f2f4683fcce011eb7b4fc3dac2909eb"): true, - common.HexToHash("0x7845b8ce99d6baab4025d41918dfc81728fd6ef87bf5973d1c629d3b915c27ab"): true, - common.HexToHash("0x8f1537f87dc15777126eb394634a5fd9a13902eaff04de371b57be57b74eb473"): true, - common.HexToHash("0xff813fae980d7f2758376ad576d1aeeaee3c9a1304e4e10aa47f3dd45d594ab7"): true, - common.HexToHash("0xcba0b59bb99cab99e140e28882ccdf6b6ccfc0d65fe7f41790dc4eb09b89a72f"): true, - common.HexToHash("0x8cbd44967c89fec285cb49522610cc444f63785b9e22354b10f7eef59a2fed7d"): true, - common.HexToHash("0x68f6dc7b24d7a98faccc55a04e52e082b232576d63e152435d1cd1a93ff06308"): true, - common.HexToHash("0x3ee65cd39f66160546aa433958cb1a4420de8955f70127ce22eadb085c159785"): true, - common.HexToHash("0x5861fc546c0919e08897cb4c3e0d207414ccffb72f45a198ed661f41f3777678"): true, - common.HexToHash("0x70364b6890b506cb47623abb143f7afee161bf5aede583a923c0a53a2f9dd8a2"): true, - common.HexToHash("0xbfc8fa56842721994f3747eaa78e98e9d790b294ceff58bf65425700c6677518"): true, - common.HexToHash("0xa7e26a4cf860bc6a36e3489705d809ceb33dbe80903ab6ceabb87ecaf75d7b78"): true, - common.HexToHash("0x825148bf6465bb56e722084934d8032480d7e1e48d540e23f372e5f5acf99895"): true, - common.HexToHash("0x2cc0d05bac83b3dfac8ae7116db0e7ffb3d5881fbc74f8effaf8a828dd81ad30"): true, - common.HexToHash("0x8cb41be765aad88541902225ef43d4ae23551490fad8084563e24835e0fcac8d"): true, - common.HexToHash("0x60ae5455e9027d89d3f3975eafb39f2a7daf1587d0d15ad7b61410b8db5fa2e8"): true, - common.HexToHash("0x72882eb9ee1d6d32b8922bc84525a56cae19856e7dd4f1c5a5dc052016b92215"): true, - common.HexToHash("0x8864c9d1c518bb75d7c32b7c960ba01dfe373d05c64560e7ff48f621bafe7b7b"): true, - common.HexToHash("0xa678ff637927f1d076193b84f7b30c030a066ad67d7212be4e09da78062a1cbf"): true, - common.HexToHash("0xaf46e7f1c6e4f76568932407873bec9f89f693deeb781d7c062999510381322d"): true, - common.HexToHash("0x33dd44503ea313fc3127bf96678bec0dcf809f843c09fc71824d32dc49ca34ca"): true, - common.HexToHash("0xe1096a30a2c53bd98b4afb9f9aead22424d4cafcaef2ba8b0a3a8131d6ced464"): true, - common.HexToHash("0xcb399bf0ccac55bb6784b31b87cb2f3e864d15449c94eecb10ac4b1b5977edcb"): true, - common.HexToHash("0xc0628ba045994f1ff2d454b0b53af61c1b7051fbeda019dc9c8d1764a3f977ee"): true, - common.HexToHash("0x60f9cae6bac7dfa971db5246957557e33954f2047e6f505ef3dd3bdd97aa9ed8"): true, - common.HexToHash("0x9fb7e85b73c5c7e88b303e46f49186c714273764e42940b8fdde405d6d33d35f"): true, - common.HexToHash("0x5cd44c8ffb34f3dfd7febaa3d1afb7e53b2dbf66dd37b1093f612d6d50ff5e0c"): true, - common.HexToHash("0x3c65f4180c619eab1e5f0a745b72a16fade0748594c06d35bdfb0778714bb009"): true, - common.HexToHash("0x9435affff99367a67676619b9fbc68b5bf763ba700cf78e5bcf5d2115a9ac171"): true, - common.HexToHash("0x539a1eedcda3458d01b99c14a1e453ab2303068f8a36b46fbe9dfe853a57b772"): true, - common.HexToHash("0x701f1c17bbf4715fa11be2fa4d181b94aeba969b972b4f7bad9f0c10c992bb2a"): true, - common.HexToHash("0x9ed3048fa52bcb7ae2a6412921f47644c3af34179be36bc78e5dffe0c2fbf358"): true, - common.HexToHash("0x19c17d90050a5adb8078bfdd0b677af6aa9a10d3bb922ccc26e639b5cce7c362"): true, - common.HexToHash("0x4bc0c026f3c892c65d217f8d69ed588b1b02fb86603f4512e865c14aa59b758e"): true, - common.HexToHash("0xe4f63ee6dd6dbe94338d77ae6b2b2563d57a7ddbb3cbe055838b5f7479924069"): true, - common.HexToHash("0x0ec05cfa61ba97cc2998a055cbca1b6493fbea714b49db9e22dc1aaba961a2c0"): true, - common.HexToHash("0x1489483642f87405f0e7d59c23657979e6ae78da4f1164a92d132dc90e73842e"): true, - common.HexToHash("0x016f348790097d967bf7e53200703aa20c25bce8415dcf82de657a5e6a901991"): true, - common.HexToHash("0xff84f29d16a9712ded30f2838e3fc91e6c7dbcf7047bad61d61393fe2f5bf710"): true, - common.HexToHash("0xfd6c4d69450f711802ad41c48ba8e1bced5d6de7e78e1876d31c57242dff6318"): true, - common.HexToHash("0x069dd4d34ceb8fa9c8f9c129a3789bbb4dff4f0d5a1c09f31335bea573f94b60"): true, - common.HexToHash("0x9290d9cb6a09689edd8765d8f09d6807070e93b88f80b48fd62c1ae8c249e3d2"): true, - common.HexToHash("0x09cef4acadaa9c8ddc864d11342d76dc6b9e152611993f49cbf6e385f5e6bb24"): true, - common.HexToHash("0x0165d289147c5f992e75ae0fb18c96d057e57ffaed44faf20486def18a068ab6"): true, - common.HexToHash("0x8dd3201a455f94b9b6a63d2905bcd5cf2c3e9004a8fc96de1effb0c63dbcf015"): true, - common.HexToHash("0x5f30120cb81c906cc81c030b3a2d33d26cddea91e92406d6d007c59b1f5bdc2c"): true, - common.HexToHash("0xe286d533258758e20489cd8c0aeec3b93ef1f1cf5dc53dc1f584466f17681017"): true, - common.HexToHash("0xce819eed816372b4d2f66c7dd29ced7730a18482a46b11017149cbb61395009b"): true, - common.HexToHash("0xb34026526e3b026fdf0bd3aceebf8668b54d0e351a5c2924dab6e0182cca4cdd"): true, - common.HexToHash("0xfc7923dd831d1a44836ff01d58cc13fb64bf61a41c40a51707211597fb432fc5"): true, - common.HexToHash("0xa66274b85ad876e04de5eac91873f8c8fdfe3d8d7790badc9f184da30a970a19"): true, - common.HexToHash("0x17472e47bb616833bd7938af091211eaab15d0b3001d0dbdbe457bae8100d7d2"): true, - common.HexToHash("0xa4e0f283d5d870b34cea058b43545bc18ee7a9d8f30b83e5c7f985e2295421fb"): true, - common.HexToHash("0x0ef31005d5f217c181ded7af387a1defbbdfe1b4f7314ab01be3d05944b91fef"): true, - common.HexToHash("0x27615eb9e01354fae85e9f4e7d134c4c2df08f105547ac33a360ca82fdf3d511"): true, - common.HexToHash("0x9c64417e260accc6201968947c1d14b78e68a59d32a9115cf4571d69fadb3df0"): true, - common.HexToHash("0xccbd87f6c7194996a6f281c5909ac0f88976f7df75d935f6028f4b7601891d90"): true, - common.HexToHash("0x32a55fc069b2494e4ef19e49f4e7204523267d26cc2c15e81baf25cfaeaf44c8"): true, - common.HexToHash("0x485371c967b44ccedc9ca2cabae2bab3cdf6169ee8085503fc2881469425483a"): true, - common.HexToHash("0xe8203b1902d5fd6a46999abf8d51114f295961847342de655ed369c6386f9275"): true, - common.HexToHash("0xc5a8f6ea3458f7ab821dc0dfef076fe4597c427666b54981331300daccc7cd9c"): true, - common.HexToHash("0xcb5a35ce984f5af6e958490ea2edc9731998635b51893dd520de7692093f813b"): true, - common.HexToHash("0xa3741946fe2cb4eeb0589330858d759288410d149117f2e0c03b465fcc394861"): true, - common.HexToHash("0xfe6c7143230fa7fe0471e9af230f3308d2c7ca04fa128d69040d635d4b55c589"): true, - common.HexToHash("0x5048c7c404b08874e3eddab80bebd9ae1198f57ec4d81d8ac34e119b2ab4be4a"): true, - common.HexToHash("0x57ddbca8933b9dabd17ad761938ed7a5b69bfe8b98a19e82a373b27d468fb379"): true, - common.HexToHash("0x851a4ce969dee3db27923f66ec90bd3db051d5f7c308038c4587a2224d40f3fd"): true, - common.HexToHash("0xc337f523f82f12b75c3c0e4b02d47f635530b21b723060d6f4e0c9b6ba8770f3"): true, - common.HexToHash("0x8562e2faaa6c1a0f2a7056386ad48ba7155382fb97bbe04c713768e2ac4dd348"): true, - common.HexToHash("0x52cabd2073e80c87fdf9c121dd4d4aa3a8c63cb469f7b1e34f532fc253bd53ae"): true, - common.HexToHash("0xef9642d519ca561da12e9ac5084e32ca5c0ee18a00c2db22170948dee1eb55f3"): true, - common.HexToHash("0xef0b99959e2659d193fb5a8a7693a8e7eaf1882c39d9be79f9eeb4f763d78c60"): true, - common.HexToHash("0x0709ec9f6060c3e3c5128f8a11849056dfb5ba3d9efe25a38503bcb295cbcb89"): true, - common.HexToHash("0x882838bc1727012b8f56ec9bbd3297cefb879924e13cf7a51876a873acdebb31"): true, - common.HexToHash("0xc0ac776dd5e6e6b942f779121cb5edd98d9ce113837da6d36ad3ae97a8f706a0"): true, - common.HexToHash("0xdb42622847b5a83b0a34dcff316d00cd21f0a2eee9e4e2ed7aa7fb097db8fb37"): true, - common.HexToHash("0x44e948b3f4b246ef78bd5cebedd2d6241d811e11267886611303113b036d50d5"): true, - common.HexToHash("0x4124e3f954634d8039dfc13bbc6e3494d26b03a04ddd15a6f778ed1c08e250e6"): true, - common.HexToHash("0xf5aad0103f9ba8dd1a91229e46cc85b85fd1264fa1d39514cb93588042392b42"): true, - common.HexToHash("0x60b51fcfa36c7a55f59db2a6cc89bc56605012019bad40d8e4234d5474f26951"): true, - common.HexToHash("0x30aba54c4c8458301702b3e459297d4de3b659a00719ff6c699bbd647a8dbebc"): true, - common.HexToHash("0x2352ef23ba250ccbdd8cded88be9a153accb53baec4bb357a6fe6691a091cf4f"): true, - common.HexToHash("0xf7c07e98f7f2f58d09c4448799d4bce0c2fb62445145c3b55386c9e85aeb4716"): true, - common.HexToHash("0x8345e3ab546a01e10904133aa6ef516e9e574fc78f05363813668cb3bd27723e"): true, - common.HexToHash("0xa166d18c7fb171fdd857619548fecd11b41e08b8350cc89ab98c78aaf7c74089"): true, - common.HexToHash("0x7a65330dae942963934f7ae8d9849d2c780b838837b66e572f097065b18cee4c"): true, - common.HexToHash("0x1ea1fea4852e506df5e5085e67302f227980660ce3434795cb4d9190ebd980af"): true, - common.HexToHash("0x2c0b9bbacf6f19549b98e481bc9e860315c596889d20e61955829ff06bd55b73"): true, - common.HexToHash("0x1e822431c7e1810054f048f2d1d033aac77fef516b4974d122ea590f5538085e"): true, - common.HexToHash("0x11502bf955cb7da345570b97bcaa6c60ae4c0d5e3a0f24232fc23832200f7494"): true, - common.HexToHash("0xed9a91b386b5b2238f6d84bae83c3f95727316ab6f427cea6ff7fd2c68c0ea10"): true, - common.HexToHash("0x41a9e31e2388fdf44727e3fa60d3cbae4fe49529f245d5f8a4069e30db6fbdea"): true, - common.HexToHash("0xb9b8c146ae543e1ff13d34743a3d2050bb6ae226e5913fdf4ba7739012f433b9"): true, - common.HexToHash("0xae7421cc0400848c15d699daf946ec174e81dc0fa413302f4a8d6e2d92fe9948"): true, - common.HexToHash("0x7d35cab46ca5b7ea0c45583aacc1563c0acf05a2e5d849b2a06a03e5c5ed8c6c"): true, - common.HexToHash("0x56b387e217dd581385a72d62138372e241ce70093d73581ffb5de0d6a6793362"): true, - common.HexToHash("0x3cf7d79065e07fc80729498cf7f983d5c611eac04d5ff72fbbab50c75d33e313"): true, - common.HexToHash("0x321e8ff332751704863978569f670a892dfcaec8c62bb0827726707d13568035"): true, - common.HexToHash("0xbc54f11ae009da98eadcd573a06dcd506ab362e0227f94cd7a9406f0577a5cff"): true, - common.HexToHash("0x44cce24628fdb8469f01b57d5eadfef4866f1796f7fb28f9f972669f0f045696"): true, - common.HexToHash("0xc805b3629a4bc11ab59b1bb9a2b1e33052b8baae35b85d8897d52dea9d96303d"): true, - common.HexToHash("0xc716073fb838ed86fbce04a5ef583489670bf489574100ecb65a9983c44cca05"): true, - common.HexToHash("0x71b7507a561e32aacb7d707a4b7b08416577a1195e685925b2f9d8eeed3508d2"): true, - common.HexToHash("0x4f4c3c6326ed4f86a1252e9624141b65ab1ed4b6951fbb9a92ae9e8fdb88ade8"): true, - common.HexToHash("0xad43fa6cbab5b97aa800ae6819aa7d16b7baa3de35fabdbd12ebd9c1ccc9b0e7"): true, - common.HexToHash("0xf0edbf2fa2c182b7c4e625fddf76060d7e1a467b8812984bf6ea6f0e4ff5e0ab"): true, - common.HexToHash("0x0961d3999e64f70a63f00c079d9d6737fa3827d90cf08cebea514eaaae2d8c02"): true, - common.HexToHash("0xf41ac12563bf3cfbf6f1f326214dc22787fc86754ec5caa2072fe5654061d6fb"): true, - common.HexToHash("0x5bbaca16df5a4e2c304f093388f722af93267c9add52bb297a61bdeef01daae5"): true, - common.HexToHash("0x21fb7b1bea90908f7eb0fd6da53419d428f70e1451b28ed54fc16359649d9549"): true, - common.HexToHash("0x36d60dccd3255a6d7c1e3cc2af033581bad4c929c329784f106f2d4774b58cc6"): true, - common.HexToHash("0x0521c616bf6be6d14b7f07bbfdacc709711772b651e723db553ab10b86b42e8b"): true, - common.HexToHash("0xb610af4539350c98df1fdd1c25697072a6314d440f11f30ce9dd151bcb613341"): true, - common.HexToHash("0xd8bc56130ba0e9d29a4188bcc90b627af86e53e7ec79a3792bb13cfc58483d7b"): true, - common.HexToHash("0xd4e45e7847a2d8bbde6eabe01b052b48d85d75ab13a27fd6203e0e6e7bc52ee7"): true, - common.HexToHash("0x28d60bfedbfbb7d77527f164d81c70f76b95c9f8ad099088127e097ce9a7a163"): true, - common.HexToHash("0xaaabadfe05a2d86f137d4ac88ffb66a3bf45df4c348b49ba07ddfa4c98806f36"): true, - common.HexToHash("0x67f24b45346bd70cef60aa063e3a8f54a29f8c459c098599b0679ef89c85ecf5"): true, - common.HexToHash("0xe7cbc4edcc5a6ebef7e3352bf53cccc53f7a73185f91a6bf05b1a5441186f54e"): true, - common.HexToHash("0x86edb167220f7e9f6faadb2b97a249dba96f4e2d28c349bd65aa7b42d42d0b2f"): true, - common.HexToHash("0x807b7dc771f2429406d291645f0f1914039d7198e45c378ffdc4ead32da89cbb"): true, - common.HexToHash("0x09257b160d2c5dd2eca971d4a3220d67ecd8bfcc678762fbd8e8ce2ed893fb27"): true, - common.HexToHash("0x10ed277c36c49a87a86600b8d6f43f669b3baa117d0d3c517a29fd65c0041027"): true, - common.HexToHash("0x7e9e2639ac0a0a141b44fa8b9b60a210c18acde141d4153336c2fb30da8ff5f2"): true, - common.HexToHash("0x6444a2b941bd3cf23fbdc8a658d85f00069bc2e4bd30719b7409975b8bf0a55e"): true, - common.HexToHash("0x5eadf3f933c9ea6b71c05a1427eefc98c97eabd6af1cf4e5b02eeb48ba5ae653"): true, - common.HexToHash("0x4d5b282f4039ff6afd5b59a3c5658f6e088909d34cc5df8702af1c4dd4a96293"): true, - common.HexToHash("0x864e3c5c4bb04eaa3d0e8dec06542e65789f10a51bf88cbb0d1b7050471b82c1"): true, - common.HexToHash("0x8d8d52912940dec0aeb61802d49b7a89ab5d5176c831134be9135627d3ba6fd1"): true, - common.HexToHash("0x5aee4a713dde6322335ed9db17292a36afc5e2d55eb1d972d09dde9407f8da7c"): true, - common.HexToHash("0x00945ebcf70dd689cb98ca46e977f4fa4b52b1c1fcecf3793dba679d520a3047"): true, - common.HexToHash("0x6b7fcbfbaf6439ffac902f14d7964256e3ae46afb6d643d8d2b4164ef81297d2"): true, - common.HexToHash("0x516d3cca3b355fd54bceab34fb056c3313ae71cec91a63fc89ffc65ff63633a8"): true, - common.HexToHash("0x2dfc99969f81cd77f6f1a54db44c301e05de8b8dfd74880dec5379cf6f45bdb3"): true, - common.HexToHash("0xc0b134b97dea315fa08b869cb53b83a85ddbc8a09c632d6e3500c54efa6d0fc8"): true, - common.HexToHash("0xe6b5db359970abd3ec5069779a99775365ca5925448abb5377be10e07fbd972c"): true, - common.HexToHash("0x06d5ebbea1730618b595a67eb939dd3537b4e3a67dee2e2b198062b0c5af968d"): true, - common.HexToHash("0x35705874e8d173abb98ec19c28be2ed2c0e4d82e1e1993b2b3eab95e437daccf"): true, - common.HexToHash("0x46c181fbd3dbaf01c45c8ac69969a9d30c74305798dcd789f3efa5f42e6db6d7"): true, - common.HexToHash("0xc43bccdedad12e6776320b5d5bf2714828968916c55b5a918c676e1833da1c69"): true, - common.HexToHash("0x5db9f13f9339820419a661dbe815b0a96fde274d2706fca0c05f77644be34371"): true, - common.HexToHash("0xe68af631162afdd2112d791ba5ed7b60d1eb74bf57dca8fb7e151932ec904a59"): true, - common.HexToHash("0xed937a3d0949f624feb9a1d09dfcda5d94cb54cda51bf94d5bf7446bb73dfcca"): true, - common.HexToHash("0xaaf5be5c8943dfc677b766b9bae4729efd12253ff40e8f18999532ece4a94352"): true, - common.HexToHash("0xede7bfbc9073c32d8aec4a3a5fb335c6950828709c5c3a6e9ed0400fa427a9e2"): true, - common.HexToHash("0xf4ca5bfb29b5a799c6f5baca603dd21690c28fab0e4820056a7a8f3392c0df92"): true, - common.HexToHash("0x8cb59d18e0ae7fb65147589bb5bc55825cb9beafc3b1f121b940166bfb68e595"): true, - common.HexToHash("0xdbb347dee60ba27ce3e758338183111ea2bfcb1cbd5aac97731f70f331ce2b54"): true, - common.HexToHash("0xfa3f0f154b2175042a6a4665712bacbb8170d0ffe729674a203e3b1a637627e9"): true, - common.HexToHash("0x26f3040451fb7db6095ee0c1031ca1da65b4369f00f7c01344d0b6be55a82e16"): true, - common.HexToHash("0x8ec7cae4abde7effdbc1bcf98f8853b0d5f21642917add2639e9d042db277786"): true, - common.HexToHash("0x81777e7c92488432ad4a98ff6c8e2145cf21c96531ac5bd39ada695b6c383622"): true, - common.HexToHash("0x9cc8a40569bc2cd2dc5159c169ebae55eee570a59daff9f2e08597dc7ee66e35"): true, - common.HexToHash("0x2a22e6c4fcd2b1c59d3110e970acd5edfe4870fc3d0a3f540e01fbb71245bdf1"): true, - common.HexToHash("0x1ef2fc8d5cd60aa7b47aab30d54e09ce7d095eb7e741bb4ab7049317fba0a904"): true, - common.HexToHash("0x3c2ef64ae0f005c7a70bffcda0ec30f5925ebb6141076b503944145dc37ab230"): true, - common.HexToHash("0x7426a6a8295160e0cef528e4a52afc04c6772fd9217b0dbfa5a37e89a3b4b1d1"): true, - common.HexToHash("0x48bb9ee6e485981d55aebd4e07282830cbb9b2b99e12e864a563f602a3effde2"): true, - common.HexToHash("0xd7c2b50124a20029dd57e53df2b17214445b505508892b8c3c0ba012dc0618b0"): true, - common.HexToHash("0xd0bf7148c709c7e0d998121ae302ab61999746733efdf304018caa54d4493cd5"): true, - common.HexToHash("0xe038e8690cf1cf9c71e63bde04dfb79cbef33700a586296bcf10e01428aaf11a"): true, - common.HexToHash("0x241064a91d55825327bb67b49fbdeab8f5e955897910a1c8a0e25577a9b33be8"): true, - common.HexToHash("0xd2e5a347db37625692c002f0897b2c4ed6a3fc839ac9b5a407e52bc8c835af12"): true, - common.HexToHash("0x0ced97454a176f9e2faa98aba80b79bd320cc1e25d96ac4ecd14b9f8eab18552"): true, - common.HexToHash("0xa5e08e276619e8fe43a893c7b6373d57bc92be7938f4095ce21368ab1ee48167"): true, - common.HexToHash("0x9a5c8510603abec5b716bd4c03804f65c630e26e7022f7c238293e75baee826e"): true, - common.HexToHash("0x6ddcbdb3b5bf0545afb8353ed6e4758eb500d421b6e3d79e513ed55e630fa19b"): true, - common.HexToHash("0x33c43bbd4c2cb29d4b7540562b8d6c3fa820031b965844aa557be31a13026146"): true, - common.HexToHash("0x2d7f10d34b6cb9b5f14ff9c7fe886b5447755c0b3b50d53a4237907a545b798b"): true, - common.HexToHash("0x956240bc9612cdccf3ddd10b4fc2d37e1eb352c0f92a9e4e08dc73568dbcd185"): true, - common.HexToHash("0x8d42b7f675b8886b976e77e15f8e8dbef0547515e695ad2f3e7d8c95a25ac022"): true, - common.HexToHash("0x5d790d1c2974aa6d8803a5b7caa29c9fc5dd91804f6de66fef22c51b4ba35d0a"): true, - common.HexToHash("0xae9a23db3eb701d243b4d9b1a45d75e1bf7f501ea1727f13c6b4976bd5be4b72"): true, - common.HexToHash("0x74c243ebe178d42df9c1d9916209972f125f5a2ac25d3e5963bb389dfc78caf2"): true, - common.HexToHash("0xbfec8a4620d9f0ba322865f8826236f1faa428647093d69ec7b0b9308ae4ca55"): true, - common.HexToHash("0x28d2caf91d78c58aee3bbef40132c0b36d913b320e93326d75523b62c199203e"): true, - common.HexToHash("0x623a2da5cfc07e6a7345cd08692b6f4f2b15a59b7afd84a3dec3a7734fb8a8fa"): true, - common.HexToHash("0x05810fbcfdb86c94b14acb297e5ae2f7ba6b73134d28791dc53fa2542dddf326"): true, - common.HexToHash("0xbdfe182aad93124df06efd89dbb05d01b7c48a21a87964d9b71f583913117f0e"): true, - common.HexToHash("0xe2350d863fa935c182ad87fab340f8dbbe3e7540af0a643fe960d876948f6fbc"): true, - common.HexToHash("0x4a0cc768a8f62713390d5c319284cc0c32e7158669f0a63bf37107f77eccb477"): true, - common.HexToHash("0x1d678a25085792897b68aeee004f4695ae6621bbcd7d9c390cacc982f059073f"): true, - common.HexToHash("0x2f7d5d7a1a5aafa318fa442f119414f27c5f6bd93a33685c62c54a32931e0a5a"): true, - common.HexToHash("0x5b6c20fbd05760f8d1f3c0caa0cf45442c368b34ef0e309e309cf263ecb5f99a"): true, - common.HexToHash("0xa5377f8062d163930fb3daf92e2a3c4031e50bfc34230c0a0b4fe72c7466fd8c"): true, - common.HexToHash("0x46e8b3a06a6538614071ad6e2fb0f3b4619c5134dcfce1403ebca7c7fc80544d"): true, - common.HexToHash("0xf1e81d0c2b0fb154784d2ea561d691ecc9d278bc25b7dc99ae82172ff568e363"): true, - common.HexToHash("0x02e42966103f8ce8118200844accc687c6f0aa10b62d867cb24577bd8256c18b"): true, - common.HexToHash("0xbb68f53523500affe92f9b1ac8596e2cdbe7b2800335da09bd3e6c2179d48168"): true, - common.HexToHash("0x46e461c99a0ef8c94f48e0863f5e05af4a7264402b61a6ae97bcb2cefda2c9df"): true, - common.HexToHash("0xb2ffdfd03dba145029dc8af029de2e3b2240fb3238033502a2c58f396e68117a"): true, - common.HexToHash("0x5e23ab25b50828aaf5f231b5d0be840d4221f48baf017326ac43c580242953f9"): true, - common.HexToHash("0x62f71716b2711eeeb30351329fadf75fb314bd33ce7f8c03b17ff4568b416e5d"): true, - common.HexToHash("0xa71291163e5c215ec5219742871b7e429b8dcfce04e89d42844d8b968bd914e0"): true, - common.HexToHash("0xa35a0866d00bb71d689b9b42ff52a3e5f2e5ae2a67453fdf3eee3527e0944b13"): true, - common.HexToHash("0xd059193fd7aeb43f15762058e7d1452572a902d78557b4d5944c61eeaa899fa8"): true, - common.HexToHash("0xcdfcb863e78a4f8609ed428629da5c6a6ec794c77d8d9cf49d2bb2daf3b2365f"): true, - common.HexToHash("0x6b382bc4b16562ad156564211f5d7bce47c1c0e7f2f5fd73ccd60d94905327f7"): true, - common.HexToHash("0xcf15cc17a95062a7be3945a302e4623d1749c0f9b3fba2504798c2bf139b2203"): true, - common.HexToHash("0x878cd83729593ef2191c2cf13ccc12cc2b7bb5f31659959346cc7feb3be6792c"): true, - common.HexToHash("0xc5d8a1b680969e66ec85cd00ddfa6efa5e1d2be2ca0f8088f2dbb9123975c7e9"): true, - common.HexToHash("0x778aaf617b1196d160708b6b425cd91b1b4d5b8bc74f1be9ee80eb8d2c0538ad"): true, - common.HexToHash("0x1960065c878ee8c4a2b37a381ba09a2b82f6179d357ff22376235cc9439ea3db"): true, - common.HexToHash("0xd8c34c6c7c4dd211b737428d3e48a713609ed419781fb71f3fc41314be627bb7"): true, - common.HexToHash("0x660d001155ec3f0a442eb5b6d03b0b6bdca1de0f13e0636b3838639edbba159a"): true, - common.HexToHash("0x6f552e916ae896216ec08b408236a76d4cc6ae13a4baea375dc82ee2f213e183"): true, - common.HexToHash("0x0d57e0b7a88b0e768e5f97226e24450cc34b15e67ca922c1b10dc998307cb018"): true, - common.HexToHash("0xe31c3564bd51a07c7c65fe621ef50c0f3adc5f8a7ab6bf32e5ecf03e5164427d"): true, - common.HexToHash("0x27c9bb9c319e4190ede562cfb68d9e34dc7e9bd727e48b750bf6881b7b77c865"): true, - common.HexToHash("0x3307c30c51377c49fa3737387156e33d31a2c149720cbf12a8b14f8535e5c640"): true, - common.HexToHash("0xdb75896efb19d916bc753e22182f68c9a46461cf7d5ec934ec696035b51c4f90"): true, - common.HexToHash("0xaf357ed652cf38933e751ba268fe26778502e04b3d007010b7808098103c4032"): true, - common.HexToHash("0x7dcb1225e046be8d2fdfab9ec1cf068538316f0186f258fd5501e3b9298e3a7a"): true, - common.HexToHash("0xed05b512d82ab0fb15c37dd8d630cf6610fa6aca909e34a615729577cf9baf7b"): true, - common.HexToHash("0x5172a0423628096b34c5dc4bb87faa030dd79e6ac3c84b10cc46b1159d4d1fc3"): true, - common.HexToHash("0x3b1fd0afbf1787a716f5438c40d3ee85503dbb18874565307fe3090a0351dbf0"): true, - common.HexToHash("0x9e5ce75e46851253efdb0017809e8b3a03d94ce02e42c3335c018946acae6697"): true, - common.HexToHash("0x375cf2ff09ecb0894ee31b19f1ba30f57b736fa3defaeecf1e6370bd379bdc91"): true, - common.HexToHash("0x67aa81d40b23fb6f824be8785797f3e0e8402887002912f65d541e3c9e576fea"): true, - common.HexToHash("0x8597f66a9dce378153ccfd8c4f102d8a1c8e228a935b144c6c8e90a023ed9e26"): true, - common.HexToHash("0x4c54aa5213a3e496ace463d254932b1e0cbee264856c45ec02414a7baeed1207"): true, - common.HexToHash("0x35b350d32eb8c667af0adbe303707d5706a665b0b2197b46416600329248a49b"): true, - common.HexToHash("0xcd1ade2596858c32c1f06b56d4fbd5d54c38edad67fe3fbda5a5cd345d14fa8d"): true, - common.HexToHash("0x57ff68a87ca8c69989112b7c2883f34480ed699dbca433d6086255e3b881ee3b"): true, - common.HexToHash("0x4987b8506e5687007993490bc20cb4b775a6db7a2a65dc11d776a55498e9b888"): true, - common.HexToHash("0xa9e8d65bc6edbdaf8d825e42b536b0949c6a7429c7930f93ec20dd882d528768"): true, - common.HexToHash("0x9585ed83fa529962975407136b1fee6070cf3c0f74f7ef72607be8f4e8efcfde"): true, - common.HexToHash("0xc3694e1a5f924579a02549ad9c91adf13ad3cba70b3f323827bba2e28d40a855"): true, - common.HexToHash("0x2b4fcb8483ab17899c9c401ff5948afd70995045d2fb18d8d314f353aba6277a"): true, - common.HexToHash("0x59ac068eec79f8d3eb45625d2ae4103234e6ad9c26cb7453657c48cba0844bf3"): true, - common.HexToHash("0xb5234623f12a9bb059eb7394b4b346ae30f0e8d66c46eed74daaf1584a20e577"): true, - common.HexToHash("0x5877c201b683a943f5f7a25d3b0b69d85f120169c61e4167ca37ecfcabae0745"): true, - common.HexToHash("0x77282a90d6a51333820c80bfda358b3321653e63d1a229b493773b4d1b28954b"): true, - common.HexToHash("0x763b3666c25d58d785490e8f72bd4e4f79df1ba02154f0befb11ea52228fd5ec"): true, - common.HexToHash("0x02d14f7d04f85f6630f2a30bee7f5ec3b6fa232cabec0013d22f812bd661ebba"): true, - common.HexToHash("0x04bec3bc3295834130658885846ad986b972063aa40a0c346522a984bc428a0f"): true, - common.HexToHash("0xe6a736a399a24bf71a7436d73a77ba87b20efc91e2b3b6a0d9aa817159693fdf"): true, - common.HexToHash("0x62f0be412b1e45566593a974dd80e733df0257bc96cd23ecc161100b1d077ed8"): true, - common.HexToHash("0xa90bd881680550c053610da261ec5ecf6f480f8753e0f8223b7a8d5b8d53891a"): true, - common.HexToHash("0x06b1bc13a9053376b5b0b25b434f7c76c08577f9b36f707e8368c20603d82139"): true, - common.HexToHash("0x1646dc6b6a4549eeff5b55eef3052f40e3c593fd121f8927ae413cc8f1815640"): true, - common.HexToHash("0x778b8e65e659c590ee6f97eef32bfd3412c324c38c5309ae28d80823d405eab7"): true, - common.HexToHash("0x55b0d0d99f0d449e37149921d5f747ec5e5f27b729d0a45c3738cdd57b3a7a7a"): true, - common.HexToHash("0x653c77735d6ae757abcef472ab198b628c2c23789ee69a818a3383c783b4491b"): true, - common.HexToHash("0xa8132a96964c0f76a749f3afd91289afd48d39cfdcc85e598c80cf44e08ba728"): true, - common.HexToHash("0xaf0ba122ca822609b6a4c79d36403a567e3b2fc421a58e011c6a4074f275a947"): true, - common.HexToHash("0x7182bcdaf3ae22272912352c9d829f5be8fc75d2eaacdd3ab1459b55a9d3981e"): true, - common.HexToHash("0x1058152b66730c6c669d8f1dc6c66ff33e5ef9f9f19893a6215ea77704ff77b5"): true, - common.HexToHash("0xa43f05c957b5c236b5e8eaf556cb5910d408b8fc475532846ee77690034c9337"): true, - common.HexToHash("0x8c538b484bfa1d72bc846cd12a4d792aa06ef0393dc7114661d470be0bfe2563"): true, - common.HexToHash("0x11b203aa376a39bbf5c39230662491e762d6f3432adec12904bb87b019563f38"): true, - common.HexToHash("0x6a0dc907dfc39b10113c9e60920a68daf7b8f2bf53636edbeaa91de59db241a6"): true, - common.HexToHash("0x9124302cb0e0793873bbc00e4b0badf62aefe1fbb3b792a8c6290e8b4e8b9c8c"): true, - common.HexToHash("0x99301208b1548964ef1b92aa5b1fd459f101a15683a70cb6583309ea347a23d0"): true, - common.HexToHash("0xd5f3df5078e76f2e9d9526ba8a9ed05a7141d1eda11e98db0e0da7adafe8ea23"): true, - common.HexToHash("0x6005b202c5a607c611d16a0e29b2e2449dbaafd1a764f4f9df5f9de462fc235e"): true, - common.HexToHash("0xd78b5ce12869f41841ba061243a171451446b6d8808407aada52de7916834643"): true, - common.HexToHash("0xdcfb49fad0fc3b7eab3bf4d8125aa06a4d3a79615784d25aba335f9dd6e73903"): true, - common.HexToHash("0x8fa89355c9302922de9081b52f5547c43cff09f80055fd082515656a89bfa686"): true, - common.HexToHash("0x95cf358d9482f2da8e34eaf5789751142c547e2f2e76b2e0f53ba73820c71bdc"): true, - common.HexToHash("0xd66beed64b5cc96dff3cc4afb8215a071960be05de0719679823c928c2ce3d7b"): true, - common.HexToHash("0x7b20bb743eb89ea289ef14d6799d2623a5cad50c24b4a80fb8ef459b40b985b5"): true, - common.HexToHash("0xec73333cf7b326cc9b68bbeac3769ad5bafe5bfece9d12327403b4a65b6f4992"): true, - common.HexToHash("0xbca61fdba239980320dfeb74536e7d3d4e29cc4a8b1441d7d5df7b83fadc2847"): true, - common.HexToHash("0x0ae6023c9a21507c2042a686d5b9a7dce14161d7956fb1ce66cc89c57623257e"): true, - common.HexToHash("0x296441a609485b6c5dacd7e34fb44db404c259063035aad508557775da182eba"): true, - common.HexToHash("0xf01939b191106289aa9fcb8a5f169e4f9a80917e1bc3d2496e9ec645f4f80c39"): true, - common.HexToHash("0x57e2019a68b752ace95446d291f491379deec13b592fffb5d7b727b6d3f060ef"): true, - common.HexToHash("0xa16ed6c64af53327edd6e15f8496ae13c377e75cd6afc753394337db92bec350"): true, - common.HexToHash("0xd6ef2746f6537a90c4e249cb5507501aba9a789f1a263ceb52c790faf22897c9"): true, - common.HexToHash("0x82245a21bc1b638b7e875eaa193b678daa105f896f3a54500fe725375fd9a4e8"): true, - common.HexToHash("0xc8e653adddb389696f64b2a17ddfe9e589a5c4faf0a3a7a3cdb780372db0f2a8"): true, - common.HexToHash("0x0c34e3f8a181cc38187524635e2f47091f5668fe267d0ea030478dcf9ac259c0"): true, - common.HexToHash("0x4e9e5fb779e6cc41ddc9a4a5ec63ed1fe042a8249cb48ce19655842a3e8534a2"): true, - common.HexToHash("0x213046d3060cb446cf34e726531f23c6413eda8e45ab44aba1c9912305506419"): true, - common.HexToHash("0x285668b5d3c0232021dd755aef51ba79d97601f13b8ae2e470ba21e67222d996"): true, - common.HexToHash("0x412f7710621249426d3d92871818ff1835397bda2a3f10d6396b8ee7fa68b4aa"): true, - common.HexToHash("0xe21d58eb0450b41aa8b8869837d26078b09c57853fa09b8e847ff637666d9c07"): true, - common.HexToHash("0x8b957c9bcb782609f19a2dd9caaf90cdb5cdfdd0cd292515013adc97f73e6727"): true, - common.HexToHash("0xb89563f99793f6fd203cfe2ed4242f9ee30eefb6238bb804d2632f51da65e807"): true, - common.HexToHash("0x4c19a7103c55cab53b5dd828db032849b577ef92507bee18c8761160293a7e2b"): true, - common.HexToHash("0x8fd8b1c4982a5094adff253022081a54d8fb8d66929cdf73f4b5def9665cf916"): true, - common.HexToHash("0x7a99a7d94ec18f7fb10043836d515245382bfbe4699cde22739e4c1e76ef7470"): true, - common.HexToHash("0x5df159621e3b13a98da9e2749cc374abcecfc7639b89cde02563a234a6b65bb4"): true, - common.HexToHash("0x8687fb1a2a372cf04c64cf21d788c133f17f60a18c8b58546295c76d3bce916e"): true, - common.HexToHash("0x582d33e4531c0cfa8365b881b1ca4b0b5f6bb90b983e9691e50f6742bde28e45"): true, - common.HexToHash("0xae42675e8c1c2dffcd89708f658d1317efdc0df276c10396f5867b7214f7fd3c"): true, - common.HexToHash("0x30938a179ab90751b8d5a34fe09cfae09d6cb86d572519a6b78f6d2018cee29d"): true, - common.HexToHash("0xe553eddb8a5b510071d105d5510c4b1a690ee78a2f4f65150662918e818a5b1f"): true, - common.HexToHash("0xc3f67df7798dadac0d6056b6eb74fc6c69230ee858fd42aa8a3c0e5fd92458e1"): true, - common.HexToHash("0xb35a42d84b4f2d8cb4a61ad4223151c0e5d0758e08cd0d89fa94346eac5755a4"): true, - common.HexToHash("0x339f02c63f8e1356d324d9e5ce51eb22e05443a60f511f7f18c90ec0a88bbc88"): true, - common.HexToHash("0x803875bb7ba9c0a2d92c42b0c57b4626a4bd1e8369b7d5ad3e59bc6a6d6e4cf2"): true, - common.HexToHash("0xa2e4a09ac964303fb7772ec5d30c387e39a7775521e6a7725bfc46ca77dd741d"): true, - common.HexToHash("0x0a4bbfd082c046e181001fa4370dec50c064aa7baa9c1323915b55475b979d48"): true, - common.HexToHash("0x71388d8afad2ca772c5476a21c73487a6d216c7c8a01132b0c45b28a8a0a6aad"): true, - common.HexToHash("0x1b7e09165392c7ee80b507429c7f97c3ff987cae3b14462af7eebb17751ed17f"): true, - common.HexToHash("0x8c127958c4e670626ccbb879815e551538b8c189f3bf3da6895be4e8606724a4"): true, - common.HexToHash("0x598ba30b90b3f8996ef8cb4424bdc5faa704da85e9c517dd9ccf839867841a82"): true, - common.HexToHash("0x34a108ead7dc32e83e34b1cd51d53393f4cd50db9262c1150f3bc58bae9b647c"): true, - common.HexToHash("0xe94544987ed72d12ecb25a02cede401cbe0e32882fb2144245753c760ef8284d"): true, - common.HexToHash("0x8629944ab1e873e0170c87d91656c3b6f19af0c2556f683275240738c1244cea"): true, - common.HexToHash("0x6b34ed5bbea55ff7e9c06221f6dd5acc3653d5430007d256d1a287469dedd055"): true, - common.HexToHash("0x2f2ca4e594d0f834c9edf30f079bb6fd3f0bda0ce61d86163b7f2b1df8aeaad8"): true, - common.HexToHash("0xb93efbb657110e6ac64445790e9e683cd9b4e49473f4362402c5334464cdd29b"): true, - common.HexToHash("0xcb577c62fffc61057d1cc2d1d5d95f80c79bd80a3abb63ed922bb3855c67eb76"): true, - common.HexToHash("0x24b64cdb6771815089799a228303edee959c0819396b3f74c6cab5c5770f64ba"): true, - common.HexToHash("0x8b669974ac29864411302263665d5cddbd6f0ce145f63f23f876e600793b8ec0"): true, - common.HexToHash("0x3aad6beb413a74350e8502531bea7bf42e123e87ddc11eecffc8c20018b34bb7"): true, - common.HexToHash("0xd8091c9b2bc633a4b55cf10f84549d9685a701317c000a5912e4af08270988c5"): true, - common.HexToHash("0xf12853bb7c934a91e91897bf9cb1839cf8a2cf49b6ef04c09d62769af9602882"): true, - common.HexToHash("0x5c8f902e6711f5b4cda6d459540f00f3f6e0f32d5e63e7c2537068865fe52b3f"): true, - common.HexToHash("0x436d12b39cab4a71cf854a2f215f59ef103bc3f66e0867f764e7f9a6b55d693b"): true, - common.HexToHash("0x049f8c94f121ad1ac69d9cd03497ffec6ccc381a4957e4764bdfe4bed1b46794"): true, - common.HexToHash("0xd0dac6a148895c594279bf079dcb1a7f9b7909eaa77796a756466ef2c8e532fb"): true, - common.HexToHash("0xcf5fea24b84d855e8556a00c74a7e25802c07a24178a68f1c2f7613d00ecd756"): true, - common.HexToHash("0x2d4f220ef36d43c766d2259b89168a802c1c600d3965abbdbe720f0dd6a17d9a"): true, - common.HexToHash("0xdbc52c59a0472b459b39d72eeb8b8721ea8b44dc7087609a32bbc5104d171d15"): true, - common.HexToHash("0x268c9d1943a195da35c6146068f600372db80c3f15d11e4d208f51561881bc8d"): true, - common.HexToHash("0x35603980ac7cbd2eee882d8b0099f4fd24754cb129aee71f313dbae4af979f14"): true, - common.HexToHash("0x576aa81d6ab1d689697e7078b63e1acc509acd0d0cb7882c779cd2453054ae82"): true, - common.HexToHash("0x61aab7893b2fd16ae4810ed321eb1444ff706d1806769aa1ddef4e5511326e59"): true, - common.HexToHash("0xd7d643362e04b02e7cd33791b5c724692d7d7ef335378d8eb38d049aa3cf971e"): true, - common.HexToHash("0x097ea9c844e3920a16e8abf8061b185ca8067b7df86b501d9347e3d9f37b0dde"): true, - common.HexToHash("0x39b1a67f34896b0bdf6068607cbd838159fb7b1d7e78b3fc72735ca76ad86334"): true, - common.HexToHash("0x03c295d15bbb0408fc12444ab20a5e46124de66bfd7f9874bd10a8ada2ce2643"): true, - common.HexToHash("0x5c2aabd4ff210d95ec437240932f651b717898e35785fe5c16845372d7016bea"): true, - common.HexToHash("0xb152fdf265c9a0aab2cbab7b8342d021b275dea9400976e0a0f573bd06e0379c"): true, - common.HexToHash("0x7cc451cf56a0af964c826a0a0901c3253265f5f73170a832ce50783f451a4c2e"): true, - common.HexToHash("0x49043ed2a30380906a2e2d6e0a4cb19e4ecae16680ab98af520d200e47f9bbdf"): true, - common.HexToHash("0xb64a39dfc4e2b1a24a2d8f0534ed32d0d554af834770f7b45767bea135535c17"): true, - common.HexToHash("0xe398f3bc69ce6c4af7ab1d1de29f199e797402cd7cd94c79f591136f59d44c2e"): true, - common.HexToHash("0xf44b87ccc1765084e0ebee0bea518538d534786d38b996227b2590baf3a5e551"): true, - common.HexToHash("0x353912f02848f8e6a53c5f10ac1190f15c0beee66e4668d825316bd258e3a3fa"): true, - common.HexToHash("0x5a3ccf8c0715c953468cbdef0f27cea111910c1ec1c97dc4d7b647fbb16339ae"): true, - common.HexToHash("0x09cd0e1384857ff5a2cf4841b4ea736342b6c80928e812c8dfb0cd621bbbe306"): true, - common.HexToHash("0xee63b94202489aaa46262c3d7bb360221c86ae056f8743dcedd7465d4fcb3544"): true, - common.HexToHash("0x28fe2d1a88acf98d8887fba5b99b08047f0a3ac073973eeb98ae30d3d2345110"): true, - common.HexToHash("0x0d19b1de83cfe1c90d2d57037092970cb070040ff2f14a7f68f3e4705247a062"): true, - common.HexToHash("0x7e1873987f7c1a43cb3152ac39584b14ca8b0a3e0586fda4702314310db1672b"): true, - common.HexToHash("0x60add8041d699923647554ba02a29357b789f8d256914f1954d907fa3d49eb44"): true, - common.HexToHash("0x78f0aae47130458301a04a2556fd6d785ae047c9a523fcbf7a1d8d767b48ced4"): true, - common.HexToHash("0x6b7217a3786461348a64ceaeba78fb5f3ccdcfd49d6e91aad1b3ad4623fc913c"): true, - common.HexToHash("0x2d008817572a9e168f9b54ad78af38e320dd8c0db46e93d2a4b84471d03ec0ab"): true, - common.HexToHash("0xa85c011b3e988da1befa272636bd3757a3d8b4b90afae4a26397a6f891d5551b"): true, - common.HexToHash("0x9090006f0f790d86d4b6b7bd1dc61023a63e827d31409ce00f777c4596b03495"): true, - common.HexToHash("0x8924fff54d09a8f88346e7ab640cc559dd4f5455cb5fdc3a3eb24f68daca7e44"): true, - common.HexToHash("0x4987aac3e72e270c27e75885cfff6b8e325c16d2b65b76b6cfc5aadde5c9043d"): true, - common.HexToHash("0x976cedd2baa1cfd7d95e5ddb2b15465df8c2bf5a1fb794b0c9bf68cde9e83fe0"): true, - common.HexToHash("0xde65651b51ad91e75ab4b044d3fa9911b832c3c8528ef07f305e8b83ebb67671"): true, - common.HexToHash("0xa86129690e394219d26bcca756a0f20e63612672da875b81831d75cf899f12bd"): true, - common.HexToHash("0x1535172ac4ca14f972a6c1a2f86beb8888f4795f1499f7a03dc8e7fc944b4645"): true, - common.HexToHash("0x01b0ad9ecd7c10e5ce497db9d97e3019fe998af4bab8b0261718463c9ced4061"): true, - common.HexToHash("0xdb3675502ee9702a57b61fd34e24c12d988f3873ddc131762915cfb7832f0af1"): true, - common.HexToHash("0x92d01884c4b42260ad367c4edac27c60808fa70329c2a2d09902b3260eefa7fe"): true, - common.HexToHash("0xc5135d8886971edb7732f0f8f8a7c4c59c83599e54afa80b6754e1cf9abcccb7"): true, - common.HexToHash("0x559d352f789d958bf23ad23f623d794d12469404081a822031c77bc6e104828f"): true, - common.HexToHash("0x97446496ab010d137b64b7b8d3e887d6543925ffcda84987f96637b471baaca6"): true, - common.HexToHash("0x2df984affe2e30b4c06e7e1ed225d1244d92a063e3fe7c749a2903ed4e27c783"): true, - common.HexToHash("0x221be0f09cb6a76ff61abb0682bb7606e36830b64a2ba3936341359de74ce6dc"): true, - common.HexToHash("0xe3cb2bb98097f3e6f3864d8b15283b27ed3555591dc3074c81e5e9e160e8d37d"): true, - common.HexToHash("0x0129b5d141ab351b9c9e10f1d39ecf9dd7d7082b9ae5859188744b749ec982c4"): true, - common.HexToHash("0xbf2eae74c7522e0a56fa7ac29d336c3fff438b2b375d53275673b01f3c276212"): true, - common.HexToHash("0x0ad2e496c0c302cb3f613e05d70a519c37d2b3b7245c25d737c3e237eec5e8bb"): true, - common.HexToHash("0x65bae1f933ee5646dc1da953bee2358dc98c06f5995661d56cb3e982f591d6a1"): true, - common.HexToHash("0xde6ab43dd2d0dc9fef181e100fd49cbda79654561f6bf09540c1781af41e2bab"): true, - common.HexToHash("0x678f2ecd51220803e479232360c7f5875cb7a1ad5b8e698e36deb642e5a80458"): true, - common.HexToHash("0xdeb8316b76c8bfb717442195510a51212a787e293634bf74d9020d5632671226"): true, - common.HexToHash("0x140e19af7042bacf2f130cd95e9bbfd899098b04359aee345ad989a801d84a6a"): true, - common.HexToHash("0x9152789bac9624ccecfac0b4df2328e74a6e205c710095121640a65fa2c85b4a"): true, - common.HexToHash("0xaa4dbc5c774b8fd43b4d47432c5dc3938ee06f96a3fa8e9c30a4b95314144332"): true, - common.HexToHash("0x10130326d3475419d2d5e9a9d6b24bd596de32b84874c357d4eec8cb4767a110"): true, - common.HexToHash("0xdd70d41aaf8ff8b10c9c7e5580da5ec4d4adc7a6bf1ccabcecbffbb3777c79c3"): true, - common.HexToHash("0x1898ece6bd58da4237abd319202941fe4300fb0224764609cc5b5eb95149d20c"): true, - common.HexToHash("0xae3fe2311ffca22dc42244b58279e402316e99dd02c1cae1a0b92cf4b1d93c2d"): true, - common.HexToHash("0x0b562978f3b4ce9f78cbfe651f0533c254123da01fef351a5729de9095262cb2"): true, - common.HexToHash("0xe3518ff78efb1afa66c1b052abcbbcb48ea1e1386ce0b33be03e2f87f323917d"): true, - common.HexToHash("0x044e97bf74caf83013cf14190474005d28d9d9eccf902bfa6b85cf9cb1e96ac4"): true, - common.HexToHash("0xa7558b78b75ed49b33d88de0558c15eeb1c3fa2197e5bfbc7343048d3bf49cbb"): true, - common.HexToHash("0xebef9cdddffc8f359a533865f88ce7fca2c08552ced75eca5f1875607c49feb7"): true, - common.HexToHash("0x66db70dfcbffef66c11b67d11ac3536cec642f666a6d5e939e2d317d065a6ecb"): true, - common.HexToHash("0xef4825d5e5207b4478cc120054cc92334b43582860bc55307691d37121d78e55"): true, - common.HexToHash("0x3355bea255db60c49565bb4626d5009e31db63aa750d3d8d4f162e80ab8ed718"): true, - common.HexToHash("0x13fd5087439b1dfdfd6b64dac81069f17ccdcbf1e8b18684aa01ad58f5555c97"): true, - common.HexToHash("0x6309fdba087349e0c9c59b776de060172c406fa5fb7b85a4187b0ab8e0b2e423"): true, - common.HexToHash("0x3084eba593d1307a77e01510128d8755520b8688293eaba94b98d41cd3291a1f"): true, - common.HexToHash("0x909756afc03c274942d2dfc245abc6c87dd3cbe446c36c72682205e01ba0683b"): true, - common.HexToHash("0x195596e7a7c9e23bd8b915c6d5180c4756e0ba27feb0c2ee5cee9f7b1a44502f"): true, - common.HexToHash("0x7a403ac31d225419fb675ba0e0300ee6e17c79148ce3bd9abdae4dd632f2ea6d"): true, - common.HexToHash("0xfaa79ce79e2be4dbb19b89921db465cff198472a9010326f1015b5041495a60b"): true, - common.HexToHash("0x4a9799da391f77281c5742cd14f13133311aec72dffb6457096fea2db25b3636"): true, - common.HexToHash("0x985038146108f48d929ae2cd212ee9824faa388969161f9a681c923e65ce6886"): true, - common.HexToHash("0x1d07031f587f20f258b70a68507bc75ffc00ddb06298a6461d0256ea3629e40a"): true, - common.HexToHash("0x967743871dd3f736210a1b8070a9233212714a90206c2b907336196888178f82"): true, - common.HexToHash("0x1a9ce8ff1a69d551baf35afff1adc7a96aee4c0e5e114b995db8802ae5e19b95"): true, - common.HexToHash("0x3740e3914391a3e199209b770456dac73e3a584fba4048702acdf0f04af240ca"): true, - common.HexToHash("0xccdb2fa5cb051e060c0be8df1b2ea7fda46d7a6ad67e4841bfe574068e2ea4f8"): true, - common.HexToHash("0x4199fb44eac1addc3b57fe9ed82b8e9d9c92522ed5b07bd2e7022fce05d1b802"): true, - common.HexToHash("0xeb2dbc7d7264f3372f8e10bb3300efa2a9e652014788e5700ee118c505bdc7d9"): true, - common.HexToHash("0x2bf3839f2803b811f7517b545c39d4c87f1c895b3f6207ba5f8b827ca42864d3"): true, - common.HexToHash("0x1a4021532bbb6cb4076fd78e55dadef3c4dd71cd79b16032eb85f7805f0dbe47"): true, - common.HexToHash("0xe38ce98192649d5be6b8df228973c9e5f827cbcf9f440c4f2efd917f895ebfaf"): true, - common.HexToHash("0x36bf0b42f387adb00c0992c69f7a49a1ed8f1908ac0b7f9b8d8bac3c5296f8ec"): true, - common.HexToHash("0xc2239e20dc40d31e3fcc3da15edac74178e81b54684b573df132294da76d215f"): true, - common.HexToHash("0xab6f8610d1dc5dcef6bd609ba00073569739d6b5448aa446c6eb51c2226dc101"): true, - common.HexToHash("0xcd6e25bcc1899ee213f5bad24de75952ec73aad008b7be64322a1b3521a5a483"): true, - common.HexToHash("0x5907e5903d96d21d5c582627ea63b56dbbe308bc5681937f16a9798834f8f373"): true, - common.HexToHash("0x943bb34ad916c353f9ca2f94d4585ed8aa078f4a90c8529ececf293307ace026"): true, - common.HexToHash("0x3356ca2610645f232214a5d285d81fb3afa6bbc925004dadc4061271982029ee"): true, - common.HexToHash("0xe032c831a3194af81ff7faa7e4da86be501f009c2cbaf45c2ff7ebf1b3cf6322"): true, - common.HexToHash("0xd0b30cf0114140a908ce4247c7be3afa49e53c4004c65b455ffb141c1dd3fe74"): true, - common.HexToHash("0x391547307fdd13568c49c185e3e55aa42b132140ae2bcd3823eb5c58de1fe9f6"): true, - common.HexToHash("0x6ad38f5fdad23b9b4acddaf5464504520494691b7410fbd8f9a633359e2f9c21"): true, - common.HexToHash("0x2e823c83fe8a3fcc23b1fde2439c0f07f029b2562a82a141c2950c963b2507e5"): true, - common.HexToHash("0x7ef085aaee129accd9f9d3111c9cdd39290473e67bf30653a19bf86877fbe177"): true, - common.HexToHash("0x99c6e501278cf434fbc72a51f91f91779c7395529618cf3d31d837ccced9c105"): true, - common.HexToHash("0x69009040100143f292b70a6620c14468139db36d6fba6051eeae2842aafeb659"): true, - common.HexToHash("0xe8d3aede1c0f4a18d15d8ea5b1773a3aa2c1efc36d49814774776c88e2626b7a"): true, - common.HexToHash("0x92c02a71545246e69277d5dbdb1f0c6f49eec1396ca6b9aacc5c942a11cdabed"): true, - common.HexToHash("0x6df51dce97e365ea026af46a59e169d3bc199a3884129228f41a7a85a5f7f3e8"): true, - common.HexToHash("0xacf4c857e95a89722bd0325404afe848c6ac9a708bf9319575583b8e8aa50cab"): true, - common.HexToHash("0x42cea7c58c6768f6f933a2d192e16b5a6af3e05cf6397adf6c55de261ec4574e"): true, - common.HexToHash("0x369f6a226b303b6d8ed6fd99f6bc3562c5d783b8d287608dbaceb00ba9187c34"): true, - common.HexToHash("0xc1f93fbe164bfb005a504a9e36f21d0e4383e8a5f7dd47f7afa530ddd43f6c7c"): true, - common.HexToHash("0xb9992ae7c52b3a48209f98a08d507f840d04e13413c3449c36d51de931e8b516"): true, - common.HexToHash("0x3fc56f6b63db5fb98b3270a892ead813cb590da3533c0c85d64d60f3c9033269"): true, - common.HexToHash("0x19ed33375d2e7619a40ddf08f662e9a40c0ca52a7ff391fcc227d17625d4cbed"): true, - common.HexToHash("0x640a6eab5512832d23ff6c365afd2752798a8e4c91ee5ea0d8240ab8b7765169"): true, - common.HexToHash("0xec4e6e70b3b03a07c2b9c9f11e90fb073c4b0902607ed8240ccc99853e99da8d"): true, - common.HexToHash("0x0147f3ec7720976ab484e3e7a0f6d1cefb1884b9a83b719992e0525fa3d0fffe"): true, - common.HexToHash("0xbb8856e796c417d8ddd4edff8e39e1cec9987b421ff36063260030742c279e1c"): true, - common.HexToHash("0x27d644d487490278f6b9efbb6e56b26b9ebb475e022a4c7459db1085d02bce6e"): true, - common.HexToHash("0xfc853ac06616d6d39a297844e3c15a5f9de4e1ad9fcc71ff35924791afa27437"): true, - common.HexToHash("0xd5b36262593ef679125bd1a4fe20290bd8dc25194da1c70aee9fd2cc69048c67"): true, - common.HexToHash("0xfb889e9a873e0c010c69111fd34d4ecfc888ab0f458984259ec11dad04e936fc"): true, - common.HexToHash("0x11db4c4adb9fa2f81dd4b87e74266029f24e313cb5090df3112544c0643b9617"): true, - common.HexToHash("0xaa6c9b21307b33439db4dca2f61a7c8ceee1685a746c4b60adba54d9b71a5ebb"): true, - common.HexToHash("0xfa6f46d512212b875495e16654513b83a14f0f689a1e04eb968e449ec4ece4b3"): true, - common.HexToHash("0x158c672c2918c73b2ee88e2b6f76fda0aa093d9098c5cc410c3982bcd3d9b882"): true, - common.HexToHash("0x5971a63de3bebcac284542dae482ed48cdeff95b493d5d4efb26bda84fd9281c"): true, - common.HexToHash("0x28a032ac6e58bcbe8a86470af96537a2e129c397a116a2a0bc095f497e6f6c35"): true, - common.HexToHash("0x9026c4d9f8d24fd415759b25562d0b72f18fa754e759eee716adece19e3d7364"): true, - common.HexToHash("0x16cbd43a5aa9c8be6f29f68f93eb6dd22d3dac9fe5d63703d03f35f6be054f7a"): true, - common.HexToHash("0x432dea776b83e0cb4bf2509e75526f835ec36516f1ec8cecf95e882b2d8a2f3b"): true, - common.HexToHash("0xff2ab2728ed4bf2428bef39817f982048bb4d9e578dcc83b63047b6bff1818ef"): true, - common.HexToHash("0xdfc8c04d7509f3c82386b1a357ee859b2e6cae595dc6d8ace8817c3a3fa0f02b"): true, - common.HexToHash("0x14efc2eff7740c3674c5ebe62804e5a4b29cf830c686345b6a31ee755a3179ca"): true, - common.HexToHash("0x7473432d924ec22e430f04c576cf5fa34be67bd464f4841c5dac642fa2a33792"): true, - common.HexToHash("0x4470d56749e75939f8ac6b3c39511aa5ff595759a044b1430f4f9413f54268b5"): true, - common.HexToHash("0xf78c19f30752fee732a2de16afa62b14129894e0a638dbd2660add4a1fb2958f"): true, - common.HexToHash("0x3ed5ce33043fb521c13b1eb9bc08a9b110a569f085c29e000207ab138a3679ff"): true, - common.HexToHash("0x52c91a0a9b2da7624e003bf7640f3d331a50a2eaf0d23c277850cb3c59e2fd7e"): true, - common.HexToHash("0xfbe592bfa6c39df1ccca47382e170f3cf7e0fbbc1ffc9423563f9da9926a1d79"): true, - common.HexToHash("0x7a084384e2aa1f94aee617dc0345c86604e659c7cb1ae0e06f8867ca83cc0c46"): true, - common.HexToHash("0x66e0bddf0e2697ce8586878f2ee050f231b5fa704c4b8dfe0bfb42ad8aaa4de3"): true, - common.HexToHash("0x59da4d3c3bb9e537f92e2af8c65aaf57f8b7e7bb849998593e2a109b3f508910"): true, - common.HexToHash("0x7b6769893aceed9ef3c0552ac1b20a91eb3daa63246f044507999f7f0a18c96f"): true, - common.HexToHash("0x44ce324d1af807fb8d69216863429fd13eaf329080bb998c75e492a85f998f41"): true, - common.HexToHash("0x07b3d37b5df525a932564e44f3dca094beb9cdfe8d6944a058b722ef1fadc718"): true, - common.HexToHash("0x0b714890050aef413a7cd52002cacaecb7d91636ba65407a305458c231729b5f"): true, - common.HexToHash("0x5de819c5329d5348eb6bccc6aacc560173c837dd265151795e9ef5b0b5b6c8f9"): true, - common.HexToHash("0xf23ede6368d599d586368d2c1623065f0733709fdeea9cfd04b450055b6747ef"): true, - common.HexToHash("0x70134e7363aa2b546b88faee95d04ab13a2bfc5f5be5d4b66a27e1b769099dbc"): true, - common.HexToHash("0x6c0d8d66e1d530b30ac765a2c72c8b226b82302ed32182d0a2dbfc760c2f0b42"): true, - common.HexToHash("0x451bacb21d1c02d76c077c28a0f0856994a04bd77c286625eeef5ed3b6aa04bb"): true, - common.HexToHash("0x73bac124f21183b44cd324864e94e34d26f9b5d93f6efafe4b4e288b410cf090"): true, - common.HexToHash("0x4d4ba124cdd757a39807b75e3e2c2b7325234ff16d4746e2b350891e865713be"): true, - common.HexToHash("0x8c56c13bd6a02eefb7d289454d0695f40c6bb6bbfe18c585701dc161d4898cfd"): true, - common.HexToHash("0x6890b2c2f5f39c7bf1105337c167739b3d73b7e1f55ed380f2dd44e0470df043"): true, - common.HexToHash("0x8625a39451fa5c24e0d90d4494293aa204e10f8af6cf309e4945e876ff94d17e"): true, - common.HexToHash("0x00393a2eb89a12f8c530f93312c9a58ad6698cad4282b2721493629d99cc523d"): true, - common.HexToHash("0xb2940140d46954522a4556d15ae172160ce38892059540477d7973a86e7d68bb"): true, - common.HexToHash("0x28ddffee219de23bb2f663e75a27877cee2037745e5820d314aa8446c34abc1d"): true, - common.HexToHash("0x0aed7a236fcebad0cc5b419234be9ec95cdf9970dd32fdacf057be8f55f279e2"): true, - common.HexToHash("0x7156e545e549b35c0b7d12bc9d60deac990672ddacd2a3b5b64bb3e5a9f0702f"): true, - common.HexToHash("0xe4a5b1b9d1c854ca36ca7d3d6be73e81254aced490c958e598d4818a50183df5"): true, - common.HexToHash("0x3b12cfbb9c84e12d9974beb5cd7dfb441d168a0812241aa2340af0d195381601"): true, - common.HexToHash("0xfda4a1c1e5091540db7de6f34085e4079bb57b4e30d9d3e473b2585b7c95d8d0"): true, - common.HexToHash("0x9a0cd4efaeffd86a69abf4735449f05806edfce6416bea8dc219f4d68436a7a8"): true, - common.HexToHash("0x84f4b80ab5ed5a359aef1ada905d68aaeb33ddd4eb187d6bf29d7ee66c1f6102"): true, - common.HexToHash("0x03f9b4fac006f4fe2a08a546f5d44c3a53c0c2645200a1ef44f1843dc59bee3b"): true, - common.HexToHash("0x49f8649901517694aa56a92cdf98655e9aec5b0d751fa03bdcd34b924b2dfcae"): true, - common.HexToHash("0xf936bacb6c68aea4d781b9d4b2ad1c2b3851fef35fc8b1184040b248e97369d5"): true, - common.HexToHash("0x3b7479238d9e304864475fc0b6f8da8c3f00b954618bdd69318f3ad885d56f75"): true, - common.HexToHash("0x338ba2f434b26a118872974660cf9ef008f084f28e4b637072a597d89cc18b42"): true, - common.HexToHash("0x6ecca98ec5ae235c0d6de2700d1ce7d4294c43eb91129a6f0371e29509a16a62"): true, - common.HexToHash("0x6934b821dfa4653a71145e4e37a70cf1287cb06e63591d0403ed086047d76692"): true, - common.HexToHash("0x7fbf9d08109722902bffe2a4b52b877e96b6e3cbb1b688f977996be4344254ef"): true, - common.HexToHash("0x0f70508e6637aa4aee80033311dc64b53af7a911ebbc9b0f7932f4e991182077"): true, - common.HexToHash("0xc2255904cc728b9bd7e33f384ec4a8328a0a670b8eaa84d140072645cc65c801"): true, - common.HexToHash("0xad4c89a25c656d2e993f9a1debc3470add074bd067d72a2703f61f02fd3e2330"): true, - common.HexToHash("0xae57bf7abf122f3b1f59393cdba184ea90b211dc0bf2fef82cf5461f8a84eae5"): true, - common.HexToHash("0x5caf61379c38d311db1d4844cb8a69cde1426ce11d95ca4e7056eee6dc2fe21c"): true, - common.HexToHash("0x7439b6c2d0f38668856db619e0275f9df056a34507a9f4135fffd2e5d1d5cc6b"): true, - common.HexToHash("0x62b9c3222745d1872bd10e1bc0eb8876a81bdba04cdb642a181a28458b05fff2"): true, - common.HexToHash("0xfff6b0156de4ff51cc9436e262d0ee890ec6138ab8fdfc35dcbeae2244dcca4e"): true, - common.HexToHash("0x80347df03ca499e4aea89e7df6d79fdc2f564a2ffae325880cb94edbc0d4cdcd"): true, - common.HexToHash("0x5fb66a5c9e59936f0ffd4f89b4cef9679d38ae0c2fd07e48249431a2df8e331b"): true, - common.HexToHash("0xc3ee58aa8e9fe04f9b62243886bf38f7b95a5f164b6d5c96380f7a8bc19d0900"): true, - common.HexToHash("0xdd57acb500cb28a1c78981165d2e2c9b3690e43b687e8fe2f0a5f5646ab09788"): true, - common.HexToHash("0x96ade93155baac7dc88c415819ef324183b0756ecbbeecda91f2a20417939de4"): true, - common.HexToHash("0xbe7066246bc649e29a58b48300cd991a389ad91321ccc9aa970e32d896717999"): true, - common.HexToHash("0xa8c233fd8d855acad2d5cb44fc45eb77bda28e7f56a22e55ef5bba7842703d3c"): true, - common.HexToHash("0xa58bfd752f060dbbb26f8301247e1fc4586950c75ecd24e61b71de483729b106"): true, - common.HexToHash("0x9c1d135f107a7161d8448425c66f755d10d073b5efd02175fcd806ab545d7dd2"): true, - common.HexToHash("0x553ec768b2f41cbf513225e643c614fc52a482ee65f67120494fdf516b692882"): true, - common.HexToHash("0x6fe5e85dd39ebcdc1634f4f4c06fa55a80595fdab408199ef1a44f337e673d92"): true, - common.HexToHash("0xb6badd4bd47f24c7aa182c5dadbc2e058c9967fa598c52477075686f67619627"): true, - common.HexToHash("0x71a7223918acb7c96856ea93a2cef5ebc8a51b833f86a925ee62ea1bb0153711"): true, - common.HexToHash("0x04df70816e19137e306e21f807106343755a28efcfe156ed0d185015fea86989"): true, - common.HexToHash("0xaf7515eaa6b766b6dbfbb2790734888835531e8605a5d762497d7ef203bd01b0"): true, - common.HexToHash("0x37f410f46e8179224225431e8bdd42b83dfa5ea559afad6e797d0931dd8ba375"): true, - common.HexToHash("0xaa799a081ee503cbdc1a92d801b65f0a1753162ce3d69764e84b4ce5446bc4d0"): true, - common.HexToHash("0x26210621acbb309c64c89fa872771b125deba57f77e458d44b67ab8ae154a27a"): true, - common.HexToHash("0x8e3bd1f219ecf7c216ca9b614acabff251b6989ef5aa1f6cea8f7086dfe5886b"): true, - common.HexToHash("0x3c10e5e75cd95e2c08728f039d024d88f05d5e03123240dcb4cd1dcafdf9a00f"): true, - common.HexToHash("0xc6f9969cfca3fea6ce1452f4d3bdf07cbf9e5136f68cf835a4d3f50bc5c00ce6"): true, - common.HexToHash("0xa00b83b6d211298db28490623085eb3cbaa21e8d5e2916c34c0cc7e6ade36257"): true, - common.HexToHash("0xac847a7a1732b434f4d665e11f763908e2ba323328772f1d31fa4ef8fc1d7571"): true, - common.HexToHash("0x17249025c33b6e8feb9be4f0b8e48ca678eb052c1a5c96f550016788320b2784"): true, - common.HexToHash("0x1085bf9180610d9e386527e00ad3ace0db67962df4eb79b39e856c5d8dae59be"): true, - common.HexToHash("0xeb093274d3bc321cbc55f9869e30ebe2b006f9ca53e9fb8b900bc5db6815cbf8"): true, - common.HexToHash("0x299ba9044c17e79b604b82e9be6625ac5066ea42f7162bad8c1796d3011e9923"): true, - common.HexToHash("0x38804d1448d903338d5d1e74c5cfd0b21bfc73c7a876a6e9829f822c1e26355f"): true, - common.HexToHash("0xe7ab5c174e2fc3e314f0dd2dba6717eb60f2295669420d60c8533c741b8e6662"): true, - common.HexToHash("0x512ced3109a24fd0b0a005d6ae25d7f69cff987149b07c342ec253e1ef35b67a"): true, - common.HexToHash("0xec5eb4d0fd2f79ebc1d6c38385921243d7db5196d2d70a18c6c02f1a2e665ade"): true, - common.HexToHash("0xb4b71a9dac766b368c2d2414af49ec256dca244f13f62e2edb6c7ae6364a1acd"): true, - common.HexToHash("0xdbf5a5e5cf82a943ef0152518fa7d12140bf15f61899cb50a08f17e2ae5206dc"): true, - common.HexToHash("0xeeb4b8dd6074684ae8250cb3fb33a654df24eb407a5d989605989e49075456f5"): true, - common.HexToHash("0xafb70182ba4be8a48e89a17c5fd3c19706045d57dd51f3986a171bc125a2078f"): true, - common.HexToHash("0xfa02542961ddd1fd545bf06d56df1bcbc2b657af9acb2db8cef7cbd342f23a17"): true, - common.HexToHash("0x6a585be83401b018569997e8e905e2dad22b206d6058ea116ee1d3ab8b12ab1b"): true, - common.HexToHash("0x27a4edfc3a3590df5419023662f17a2f200a18c0095d8c052ab1137dde034187"): true, - common.HexToHash("0xb84cad2a56c10d9ceca328b9bdf8f5ed89aaa2f893589593915aef06b25f3688"): true, - common.HexToHash("0x7bcf06974a43b97ba187d355d97118f5b049c57516c6dfba04afe650cab98a76"): true, - common.HexToHash("0xd120f26d51714431d91b99ca59251bd89709fbcb0cfb64301918ceae5d9e3baa"): true, - common.HexToHash("0xf886d0cb9926b8461edb6cc41e62aee045744bfc46ec0b02cc17ffbbf2fe7a55"): true, - common.HexToHash("0x575a89cbdcc21058e8896ba09f7b4a965f6021f7d4f2470d379363d1f7c2f1e2"): true, - common.HexToHash("0xdccbf0c857db26ded59cf02103caeea56904c1c8d4ab97fa5dd2480904648ad4"): true, - common.HexToHash("0xee164812d6ac5619cc9dbdefca658240ee4bd3c3cd08d757f58be694706db2a9"): true, - common.HexToHash("0xb815fb3050889779bfe822b67dcaaf2ca309796272bfdda5aac460570e3d2681"): true, - common.HexToHash("0x6cc8f0e79629743593c347ac490ea38aff56515c57ab3e40742cf0fe1aadb199"): true, - common.HexToHash("0xdc860422feeea0b48df3b788063304abd9a211b760fee74d836745ace8d2f894"): true, - common.HexToHash("0x2dd209e8265dc08b91723d18939c14b00c0e9e604ca950c89127b32fbbd99e87"): true, - common.HexToHash("0x333fb6dd91ddc2dc2a67c0e5cc30dc7e4d585061f409cc7e07ff1a7afa5d0729"): true, - common.HexToHash("0xda41016164924ff7015d8017a06300eae8e1b0a026e3ccb77e0119169f77326e"): true, - common.HexToHash("0x7b9e72814f5f3a2c776acdd665c06ddb3f6f584e4afab36371266bcf4fc456c9"): true, - common.HexToHash("0xdd9bcb657347a4f7cd230393ccfb1d617a9419f3fd7f2a052280cfabf0514499"): true, - common.HexToHash("0x83831e77d1cd6f4c16464b7f001956fc312317d6af96eb952047701f7b36b503"): true, - common.HexToHash("0xa51d7f8d041f0e93f62a8799da41c82afa5d9c171f3c9a7ace36836422a05703"): true, - common.HexToHash("0x61b7c403441bfe3bc819c272a58c8aa4a699a794ac21415be9095b2fd48affdb"): true, - common.HexToHash("0xdc7792b49390d154d3e7681c8e705275d57203d6fc6668fdd48d4acfd9cfebf2"): true, - common.HexToHash("0x487bd04070d56e6a2092f56da8f254f7298233e27fb38ca215132d5f2059d161"): true, - common.HexToHash("0x1b19612a272000f3989256060c49f033fa5aded7ff5e368932f168dabda189a4"): true, - common.HexToHash("0x6572fdeb50f08d2cd51e616938cec1145be9e92c6b92e8272948f7a2022cad56"): true, - common.HexToHash("0xcc126834491dc2f656fe9a76bfdfb0692b8b27ad090ba6456fbab411cad873a6"): true, - common.HexToHash("0x922fa5c17a2b2509d616b836aa3f64b35fde6cb8702570b9c56ee42526be8e5d"): true, - common.HexToHash("0xc76723c8a156fbfaa94d7b6937be8be01071f31485fde2cac8cd454b3f8ce141"): true, - common.HexToHash("0xfeb12c23d4cbbd8e289f2e97ca79db018ac6f8ce96120759b9707fabadd70d74"): true, - common.HexToHash("0xdfeab294d007873f208d001a2618873cd8d78de6597ad4392367caeb1a988f9a"): true, - common.HexToHash("0xbeffa0ed8586fb50125f8dec2db16f5de98bed553cd348220424a0cc10ed94fd"): true, - common.HexToHash("0xa5995a7845207f5583875c0b6b65f5bdaf671490bc3bc180c46eff6cf94576f3"): true, - common.HexToHash("0x89b9dcfb31df7f62df2ca7ac9c0b50a8ddce28edfc347820efc7543299c81787"): true, - common.HexToHash("0xfd60eb99161da73dfc2f65044d5512f05b4fa33fb222f2e7d279602e1e0c5244"): true, - common.HexToHash("0x3816d8b833dc827efe1f72f927eade82d85a38637789313aad8bc7cd6046a2b5"): true, - common.HexToHash("0x0024f0f6aba2c884448f0fdac1de09f0b4ad24c1f5392663187d07fb2ead8ef1"): true, - common.HexToHash("0x4f79e5b3c82648b70b1c85dfee924ea925fdb5e91780f06564df0c2cea250881"): true, - common.HexToHash("0x7bdcde11b367c5720e309bf63e711764fcf34b04575f6999ab9abb56dcbb545d"): true, - common.HexToHash("0xb494f71b174dd79e21601d6f6d3b0a1441c38857ef016b0871e8204870761c66"): true, - common.HexToHash("0xd6b8715490d6d83e742c0e64a1f42897a1e9e4fb14e0d68ff310a9487d5f4bc4"): true, - common.HexToHash("0x23c10123790db1700cb2caf4a4959de59da38fcbb5b9939d18c6547320d08b60"): true, - common.HexToHash("0xc9ed0b5e6d952cba3b78252cf8828d502347fac7c004bb1cb05a283e8a56ea7f"): true, - common.HexToHash("0x391d431aa143fda86bbec8157a419769b6bbf472384dae6aa633d5e12f89467c"): true, - common.HexToHash("0x0d2767ae082200211524402f9fe0591b6f77dec9fd5cfe4288f83be3762de262"): true, - common.HexToHash("0x059bc8c09b1690a35ff51630c3aa0e328d22279c0e2fd7e42e2fe3d45af684d0"): true, - common.HexToHash("0xf8d64e7271a8088a7b31b54717cedcb7ccaae43f5fbf61448805bb352972b678"): true, - common.HexToHash("0x972cb7d0367d48863a9514af449fde6cd2ecd3ecfdbc4ac6d1dd56689409432b"): true, - common.HexToHash("0x1222b65603a1d8910ff41b0b38db03b01713f9042d3a51dbd73650acd568a74a"): true, - common.HexToHash("0xb8e540350eb05190aa53c1fa52aca3ebcc8b157f078fc0af5dea2e0967682a9a"): true, - common.HexToHash("0xd838ec67878d2651d87b0cb8cf04829ef28b1d6c55310b92a21103cd489c507f"): true, - common.HexToHash("0x696a1cd8fce1124c64310cdf045224a15ce7810649d1809d9edcb267ec827218"): true, - common.HexToHash("0x221c12aed660df471ab1dbb1f9ce4b072fc3896ad5cdc919e724169987fe32d5"): true, - common.HexToHash("0xb3c6281dbdbdbc86d38e8a438b257da652088199f490a06744fe0aa66d53a9bd"): true, - common.HexToHash("0xbb1b6528ceb997c01ad469d6c8c61b656bd70b9ecd10dc6d91fc630ad02782c9"): true, - common.HexToHash("0x5d2e9cbbc948a1a33f3516783054b5db6f0717d75c605a13bf399553eb391d5e"): true, - common.HexToHash("0x6afdfeac81e9a3998833a387cf7e1f29d996d1d4d421127ec1fbdf4a91c00976"): true, - common.HexToHash("0x73e3afca48e98524fe6926fb0f42b8ee7b8186b235c9a49a0726a5d52a2538c0"): true, - common.HexToHash("0xe865323118477dbf00549ecee8e0b6aca6faa5d74d4d000fcd05e715cb77697a"): true, - common.HexToHash("0x3ea9ca02389fe619d6237ab47a80742b70a845306c84d76d3fc54dc87f6af4e4"): true, - common.HexToHash("0x4f39282d7884b8da92892a0c9aa93b7cccc27231a69b6488582769ea09166e12"): true, - common.HexToHash("0x09d02e4d117aac77dae5872c9b66549229fa899989c4da63458aa7d600087a33"): true, - common.HexToHash("0x246aa3f7fca806d265330ecae35a56e9cf7d8ff9539485306169dd38f0f42bc9"): true, - common.HexToHash("0xeb79bd979e384974df2b046c0ea816bf1ad1937aaf1f3fb5a31d2322d189785e"): true, - common.HexToHash("0xba9950c0eb88bb4243cc925517250e44c74d39a746749a3f8780acdc000000ea"): true, - common.HexToHash("0x6eef2864c9bb8a92b50f711cda610d41941950e1987891a1877f60343a651986"): true, - common.HexToHash("0x5727edfb3f071878c7f3a95af56e060f9a49a04f80a30be4adf26b1b86abdad0"): true, - common.HexToHash("0x6d455594292eeb367303feeac4229d8cc0ba8c1927dc75a154f6ce44c70e2487"): true, - common.HexToHash("0x47e542e7e63783451a7a6fe7393b8ee9699b2bfbc1af1d9693c368f45c8e643c"): true, - common.HexToHash("0xaad3a6af1f6a4773e580fe59b977442eea25c35b7b87a3ffb2e1246ba0bd2135"): true, - common.HexToHash("0xf2bcd1e1e1ab69d51fdc6090ccb3526767a17a0dcc25bca997d9b6866bb46b9f"): true, - common.HexToHash("0x11142c69c85eb7851f4886d82bc87faa0f656419bf86810ec251e1f41a4cf753"): true, - common.HexToHash("0x7db8a33fd4f1da761d4c0d5bd440f4d40701b16833b0ffe1fb2b979316f46874"): true, - common.HexToHash("0x724b9db4ae30458d49d1bc00734828e9442e5e7361016e76c0acdab0a0c743d2"): true, - common.HexToHash("0xda5403b320988d57fbf961205c49769e378b1ac5e8d6d051d6b5d43babef640d"): true, - common.HexToHash("0x041c30b4f4afda8e5a17bd55b4a4d2f657121444f9dc764b7455977707ab6743"): true, - common.HexToHash("0x30fa5999c31174d937f5e347a1c3431b069880e744330a8eaf7067f9df3aee7a"): true, - common.HexToHash("0xc78a78d1fcf39d204bc5dceec3b6d580ec047c02d5ceb05b20396d8dde968f10"): true, - common.HexToHash("0x1b0641df30a7749bf83977571f4ee65543e608d89d80b86419b98e545d21c915"): true, - common.HexToHash("0xb5bbe66f4fdce980aee76418b0f7ba671532117fc70e9db1a29ac5bbef6bb606"): true, - common.HexToHash("0xa63e4190d2e3c48c064e81ed9fd0b151644ca6f50166918910df47c2fe5dcd9b"): true, - common.HexToHash("0xd891d36a0e0681c970fe0d3279e5ab6669fc933e13165f5b576a8cb8651585b1"): true, - common.HexToHash("0x9b5eea49817bf63ad0d01387514a5e8b21bbb7702e1e3965552663608bdcb1c7"): true, - common.HexToHash("0xeffab31303c1171d54428ec69c6473a23825c31ed0daddb1c24801bf02d8ae50"): true, - common.HexToHash("0xa17089a774cfa183841c63980a57f1bec3ac465d247d991cc47235410e07fd48"): true, - common.HexToHash("0x7cf14f34e53eda59f704bb8ab9f660d04b424b10e638bfac0c27642517ef5127"): true, - common.HexToHash("0x974af38809280d57adb8cdde5a8c8c5518f33b97c9dfdc028c509de28d0b972e"): true, - common.HexToHash("0x868db0499812a0427b5175f86c01f9a231d8e20051b61915d2af0cee6d021b7c"): true, - common.HexToHash("0x297c4a46a3afc23682f71dbeb227a393af111d261b5c5f576f93416e20ada070"): true, - common.HexToHash("0xa58c417048dff3ef1e00ecdb04c4c77bd74381cbceb9298af4a6d47791feb35c"): true, - common.HexToHash("0xb4d159776aaaf9c23eaaba18dac44a94575bf87516d4f90406d57ea75e62be2d"): true, - common.HexToHash("0x7d2c67a959db136f8a8d733f3bf9dd89e5acc0e40664722e565ad7d52dcedbb7"): true, - common.HexToHash("0xe2d203d9368ede8f7ffe4b5228a83cac3233662978aee2101a553583a7fac565"): true, - common.HexToHash("0xc1d196b59ef735eca769c57c8f4b9da64f309c88deb496b3b75ceb06f9db0c83"): true, - common.HexToHash("0x982974a6214d38de9f316b0be0defd9b64bb6aad6cf73aea9867dc4a2405a27e"): true, - common.HexToHash("0xeb49edf63da6d240502723048c19072a86bd62617414aeb69128a981d7ede481"): true, - common.HexToHash("0xd7007ca16431db426f59b135e0b702571f3ea5985ce2d7909ac018f839bb69f0"): true, - common.HexToHash("0x024b9c135c925c20db2a90a1ba0a63e042ba07dacec760f74930371a62ac38ee"): true, - common.HexToHash("0x8d1edc0b9370e7626912446bcfaf82c95617e996b69043199495f253f7f0d9d5"): true, - common.HexToHash("0xb84252c00be2f06a0362d756b47c1a22121592f8352d209fc9f447ba84a0ef1a"): true, - common.HexToHash("0x759a8b68724c2eedb8274991520f882cf242fc924ac873c206f88fa5c4f7b17c"): true, - common.HexToHash("0xf427aeea87a4870415fe888f76759723be2c837bbab152b55b20308aa87f5736"): true, - common.HexToHash("0x192a9249ac0a576d2765c758e5bbfcfb2e11f2b2005c3323839f399150209802"): true, - common.HexToHash("0xbee73f4a85a4e4d83ea1bd24861fec2748178aa068cbb6ecb0218d16fb0110c5"): true, - common.HexToHash("0x2dcb63cf965723bcffca31416e1d23f0e09e3d445e7f24f7d5d7bf526cd5e0e5"): true, - common.HexToHash("0x1dea15f0cdc02a12a8a5565d436ddf6d091cb635adeaafdca6ceb6a67608cb75"): true, - common.HexToHash("0x77ac5419eb5b8b7be01dfa6e801a3aa8f740a83f1c582e1a425115d0c515153e"): true, - common.HexToHash("0x6c4754396fe2f5046fab17504273f5c59e77f50237bd117eb69a7a25ecc2461e"): true, - common.HexToHash("0x711331718c057c6dcea0c831bb0b2560425dbf24a44ac758cb6043f796105aef"): true, - common.HexToHash("0x5785b16c79d32b52df6c351585c3ee1d7112af28ff016347344ae96a5a58dfdb"): true, - common.HexToHash("0xa5f48ea7aa731e4f51357806fa581529fb569293cd2dd7e7b75189551c24149a"): true, - common.HexToHash("0x6f8c4dfa0af34435210db6028dc839a723415809ece103288fef677d181f8657"): true, - common.HexToHash("0xca30cd460c6454f8870cd4a3df1de4ca5236edff21168ebc8fedec385317bade"): true, - common.HexToHash("0x45f72ab8e5fef11cc3210e39e715e6271ed453107290db978767f5615078c01a"): true, - common.HexToHash("0xe616c113557634c0114729abec7b8be66e3c298d8bfca06f74da5182efe658bd"): true, - common.HexToHash("0x1c691a6d391769a481f93546ca90ad4a166cf45fc5683c7c6786877a9b9f33a3"): true, - common.HexToHash("0xcc8f526e6fe12b4d3346766682851f2f9a88d280393df1e4c174fb339e746b27"): true, - common.HexToHash("0x1a15eb5b410420130b842618e5905ebf8c9d09ca1271b6b0be7fc93cdb073794"): true, - common.HexToHash("0x8a013d0e912edd4c605e21bd1c87e1b7bcded39355153a1300973d341351578a"): true, - common.HexToHash("0xc0bacdbe1748970442f8e34a5990d268991d51a20f6b1b73c16c209f360a74bf"): true, - common.HexToHash("0x33f1a13622a26c73a41b90d777b06f1657bcd61534962cc511bc99df7d4939b8"): true, - common.HexToHash("0x22a55900eadc7e48c1da8f8f83853897d3fad73771fdeb9e7434578551858b24"): true, - common.HexToHash("0xe723f489d3a1e6a140657ab51fcc28f5b23aff63e8ef685a05071037286bec6c"): true, - common.HexToHash("0x790aa08be9dd50203b3083affcdb0d5a354988c2f6cb4b775c62ed23d6d0072e"): true, - common.HexToHash("0x5e581cb8cd192f3b5a7b505886f7558d4e3b912171cd0835162cdd8e814493ac"): true, - common.HexToHash("0xb163fcb6d420e5933f5e4bb3ee1f35a20c6539853e848c72ed1207e1ac58d6a8"): true, - common.HexToHash("0x67c0ca7527d85d40d0c3d7c1eb32eef968db9741877d15d7a85cbf4a04105ca5"): true, - common.HexToHash("0x617d5b1c1b015c9b22bd82a5f1e8b50cfd94f7e9e4468211a5d8639d56dd0145"): true, - common.HexToHash("0xf176026487d9917949bee9d058cf759a92c56d9e398f02b37d04511d0d63d071"): true, - common.HexToHash("0x1952c52139dcb8df909791ba887953a24730dae08ab2d4148c1610ae2df02fd8"): true, - common.HexToHash("0x9c55db68a2c0da19da9288cf0a1a6c9ac38ddffa05a5ecd9494ff444d9fa339c"): true, - common.HexToHash("0xb3e49f9c4beee0d8c624a808086a70bd629b4b8340edb871938e991fbbed0eb3"): true, - common.HexToHash("0x029cde931f441324b6d4b37df3249517ab0e2e9430e49986e88146768204a509"): true, - common.HexToHash("0x9f7b0cd0f63b41d24d6e2dd6018b4e588b7364dcccd14e76cfd160c248f6fb80"): true, - common.HexToHash("0x64381ebffc3da66088552ef76de0abcaf3a224356279f4bae96313a7697be26a"): true, - common.HexToHash("0x32d91ce3108b14d6becb0d2ef396dac2623e79c3d4220d953d4bd2a7c1ac71f5"): true, - common.HexToHash("0x6198dce9ad611d847f95f09b0c01cde678104e836c7be4d0d44ca49797c787eb"): true, - common.HexToHash("0x235bb372c5b34557e719ec47bc9d56f3754b37f2c9785f19003d4168441a5520"): true, - common.HexToHash("0x2def11aeba97566f1bc097214ed8e82d82d3b673d8938e7c0e8e777f5bf2f93c"): true, - common.HexToHash("0xed71d4bdcdda392ec9bb1a5de51bf88fc5644b97179e9cad025378c8d5ee61b8"): true, - common.HexToHash("0x6f7526eb5664d360a702774e14837ab75a7020673f38242e8529dde57251edb6"): true, - common.HexToHash("0xf0d4a19e13995c5685a9559a22610c600a11c796c2673dcc536547024300b670"): true, - common.HexToHash("0x031555b26ed1142e385ee8b233e5460b943febfc30276d9b1e72a0aca7e89786"): true, - common.HexToHash("0xbf196f4cd900fe941b8283e37772cdb8c63695421ff67bb1191541cca171ed6b"): true, - common.HexToHash("0x940f4c07154e3fc9bd60a171540b16dafaf0a7271f5aaf5d3e464af66e5bee15"): true, - common.HexToHash("0xbb201bb0cfe307fc23a348f5ffab86dec9964753d066d2ff9d84ff1ce0e5bbc6"): true, - common.HexToHash("0x8d25e7ac66d9247ae3bbf8594532a7e8b476aec1ccb206fe82edb3fc77fba604"): true, - common.HexToHash("0x695e7257fe93a65f58bc4275e24d9a54d75b23ee4417dc2293697a9af052e15c"): true, - common.HexToHash("0x81d11276260040c7af1d29bde5256aef323bd027c99b23fe943439f0ef8602e8"): true, - common.HexToHash("0x09528e7c5ba2bfb3ef2a8f42681adb3fe3974d49d980b75175047a8d51bd79c7"): true, - common.HexToHash("0xbc19a5842d5142735dba44e1e604a2cc6cde6dae48ccf45041e24768e8c10d37"): true, - common.HexToHash("0x1d033fa93708122fae0d6801ed3d0676f4ac220f5de8cc5258c943da88672c7f"): true, - common.HexToHash("0x958dfbd4c5846ba919d8414a669f676dbba6f428237656b5e12d8a0d4c2a8873"): true, - common.HexToHash("0x7848886724f915dc7d0dbadb8947046b432eaee50959fea29690762dbb1af5c1"): true, - common.HexToHash("0xc5490104d53c1e87368713aafa26325609d4eaad70b4029c5d5badb8e5b90162"): true, - common.HexToHash("0x57ee37fb595da7aab7b4fd3f9974079311ef7e02b03da66965c4301afeb700c4"): true, - common.HexToHash("0xc7e05ea4bccbc7f879d0301425852e4561f5b8432246b1d97776cbe63c788a09"): true, - common.HexToHash("0x77ec19ac23a5865d437f60045ab5e0145868bf8d69f4c992d0abaae469e49ae7"): true, - common.HexToHash("0x34ae5cf65866061e7bfde5d5a1882b53ba0a8b3598988a631c8fd332894b53ec"): true, - common.HexToHash("0x9e27fbc2f14de9dd681d4f54af0d796d6b8e06657532e56f424605d30611f36b"): true, - common.HexToHash("0x56c3de609a93040970ea0f05f84b2049b8d78be289fd436cd870f639d6251ec8"): true, - common.HexToHash("0x0a6ac01ce1454c05b02a370a494e82ce6a366418a177b67610402ccd78533ba8"): true, - common.HexToHash("0x325702a48257e617a5e5ba3e2a6e3e13a0ce297a2905edf7c750bc7069e0fa66"): true, - common.HexToHash("0xfd58a15263ddf7783b81c7640ac86e720139e581f542748ee734fa55f4767331"): true, - common.HexToHash("0xc0ce7376efd893301a8717d3abcce4c17bfe50c829a308d3182bca97a3cf6b7d"): true, - common.HexToHash("0x3dae6c58d7f039ab2f41be9a06cd81516064314d5717c70bfa44026dd77daa98"): true, - common.HexToHash("0xf90cc66c2bbaa3a9581c75920b044a9a534057e57130415c144034c472128f97"): true, - common.HexToHash("0x0d37c04f572e5ffc5355e764b808494782c6860ba1195293758d352d12f01d38"): true, - common.HexToHash("0xc785313ae8023204c1c0c9ef6fcb8f45f40f6d231f299056a2e75ed025fc0688"): true, - common.HexToHash("0x6ebadc5a396522dd7bfd5b56ea64a3e42cb7fb24ee6bd53f02e7ab92b71bcc74"): true, - common.HexToHash("0xdd8e78f0eb743eb57f703578118c90c6e3195f08fa9d1915c38c5dbef5f1a781"): true, - common.HexToHash("0xa71f71b357003a8212fa518d04353cf4db4ec14e532ed7bec9ac0f7423895bc6"): true, - common.HexToHash("0x542901f14163de24de5cfb00c6ed4a1bf2d9874c79520dcdba181422e3623b24"): true, - common.HexToHash("0xcfad0e9108edc69814107992253039c7bd6506c6c5e71cb2f3504c7e8aeb5ea5"): true, - common.HexToHash("0x7873b6d252a6d0383b1d72ce7ececf9c6b202a00d75e58626b29de81559b9742"): true, - common.HexToHash("0xaa761df4b9d10a8889c97a2ea0cc2882e0537bb23e00ca86a012e4658662a211"): true, - common.HexToHash("0x2aa19582d25ffebdba7176c8bc69ffc02d37ab2c76a911623b890d6760adac2e"): true, - common.HexToHash("0xc42c8a523dc3afffecebff79f523777e58bb9945964cba1eace29c7cfa3b2ef5"): true, - common.HexToHash("0x5b3fd629e4f92ea12c949e9a14ea5dee55679094b448a6ea4b89e0e578660f3b"): true, - common.HexToHash("0x5b11020e7c4d91c8e9acb184f03f612bc8d95e5f49e9a77ad50fd3bbd6bae719"): true, - common.HexToHash("0x6c9b5f06b0c3eaf9411c9251834eced981a345dfecf6507e16aeaaa900dddf74"): true, - common.HexToHash("0x665503d454e26506f69e49c08fd09dde8515baeaa0c6bba98b41ac6dd3c0982f"): true, - common.HexToHash("0x7d56ea1d5613f5fed12adbb97723650f231ef63299c46e893b3492b707385c53"): true, - common.HexToHash("0x81bf2996d377278228f179ee9e147475a4d5655c4c7a0a48ada71b9ec0058087"): true, - common.HexToHash("0x1983bbab9761e65f3c7c1290b18085e46f1d7cf822078481fe776df26632bdd6"): true, - common.HexToHash("0x2d3d3fa7527f53a2f890ac46fd816cca70aa53f6a86617c489d45880d1e0e9f8"): true, - common.HexToHash("0x5a3ab0e3adb875e8646f8f87c924326f73921dba6f2435c7d7ed9ad0fd0e97dc"): true, - common.HexToHash("0x21c642b1b2275b2f750161e8f8b19e35e897c5d187481316bcbc6d26ce1173d8"): true, - common.HexToHash("0xad7788bdb8e477716a28de1a8b2b6197a6c1f165db7e519a27525f90b8c5a2f0"): true, - common.HexToHash("0xe33e65bdc3d05ea9aaa8d79e20766ad113c419acba57267f123bcd5c8ee91478"): true, - common.HexToHash("0xd671fc75b70a367c5c5904c9e13a5537dcd90e193fe710c44476fca2f396e534"): true, - common.HexToHash("0x75a8a5e56ba5147c0eae9736b549af50051f4340aae80e8a717a6b6821c83dbb"): true, - common.HexToHash("0x4799b1b30e7f43b99b7e5abf49a565c8610230448da5f75c3cefc917da362b35"): true, - common.HexToHash("0x5053b8087b27d598285aeedb2936fe661c593bd20223ab5adb52811ef8a87b9a"): true, - common.HexToHash("0xe94818fa05f25502cd91cf766a782e5af83ac22d550d3a00d0e2d9a2de409627"): true, - common.HexToHash("0x6acd4f5726b3bf7b38614212926e1bf7ed2b573525e2bd8187396a85b24614a8"): true, - common.HexToHash("0x449c7a555d7117f496e4c4e661b403f559ad3a1650cde0cecfb9619ed1eb5aaf"): true, - common.HexToHash("0x6f164f06cc80ff2876a99f5746d39d0bd6a76b00597e7d613cee87aa67c1e61c"): true, - common.HexToHash("0x11d6a6bd3ecf48ddd68ff9ff8167f413487c8b52e87152ed28998f228953cc38"): true, - common.HexToHash("0xb8cf907915844cc9022e58f779580e8373fc12174f257576e470b9089ac4e9da"): true, - common.HexToHash("0xe1b576d1126e5c38daf675949c7422f9b625bb5d134c66cdf3bd29049264154f"): true, - common.HexToHash("0x38c0af22a3cac54045002ac61c85324e8d5132637b0c1cc757562223a67c185d"): true, - common.HexToHash("0x3e938264194f5bf4c8a43d5d9f41f3add2508a5c7e8b22944b26f1257e78a516"): true, - common.HexToHash("0x55ab90fff0d5f869360e4d283d5fd058b7d02e4751ac8ddd45660e67cb21f3e4"): true, - common.HexToHash("0xb2d5f2d762dc240351cd63e46d91a5d3d5f180931e140d338313439e615ad77c"): true, - common.HexToHash("0xe02df8861c0a107f18fad833c66eaaa1f340d31efb1555a4351cc781889ddabc"): true, - common.HexToHash("0xa468e6d0102e92d16a653918a8e2334c8248c46eea6ee9bc32e7078a6a3e431f"): true, - common.HexToHash("0x49e3c69b16fae060d9db400df177975f0fd7bdc9b87252e79614d976ac5e74a3"): true, - common.HexToHash("0xfc6dce2e6b150d9cb63772784892f69a189813f8c3c93473dff048197614f645"): true, - common.HexToHash("0x2eedf22cc3aebcc625c97e5023069fcc8b9800f8146157f826e9df5ee83acb9d"): true, - common.HexToHash("0x1b6c74506644f5c3acb2d976370ba61032d85d6d142ebe9e931b0c8c0a0562b9"): true, - common.HexToHash("0xcac6d3a18486a3a15f25170dd04b1402ccfe3df5e3910826ee9d4f963ec68bc9"): true, - common.HexToHash("0xf65c035eefb0c63ad60e66cb6ba78110cf956a898b10ca587dc42ae8cbf2bf0c"): true, - common.HexToHash("0xa31a5bff8c86a868c46d5973069e2d270a38b630ac4193e7713f31c22c4b84f1"): true, - common.HexToHash("0xc35ea896ace8f0ef1c6dba752b24ff8ff67320b49baa86322b87d44170b92b5e"): true, - common.HexToHash("0xa1bb67b7960c5f2bf2b588b17954ba1b1b99a15209dcfd8fd3cf4e2ce00c9188"): true, - common.HexToHash("0x706d7e37fd764ba72caffabf07ddec81dcfc701064f08d5ad3f6e51a75afbe8e"): true, - common.HexToHash("0xb6a877fe8fc7fd24ddcc5fd3c327fbae7fb004731338a4f01ddc3afb6c9f9eea"): true, - common.HexToHash("0x98d079ff9332dbb1717dd6827411083af2c588b5c2a87278c2889dd7b5652c17"): true, - common.HexToHash("0x87cd8c7c89af491d93665a65d0f3183f06a7fa9cab1ff903dbee8fad776ad83f"): true, - common.HexToHash("0xd985e0ea7d79752349e125f08d26cd698da1f758027209bae80565be579a0342"): true, - common.HexToHash("0xd7c4c92a7745ffae3a2e37434f1a375f0a38e28fb01ed4bf47425aa657e1f347"): true, - common.HexToHash("0x6137b0912f4d2b670940baf01999c470aa73a3195007fb55b17d081e4e077028"): true, - common.HexToHash("0x689d1167f8ab05216e4ff02dd1f7c1ef960fd4ebe9401ca608a638d3a187718c"): true, - common.HexToHash("0x306cdd1b9bfb97dbce1a8fa1d0ab7168d711c96db01e43a3ded99a7ab663b429"): true, - common.HexToHash("0x23f09d46c79df443107e56b7a09ad6c3efded23b958617a5c1f956acb705a61e"): true, - common.HexToHash("0xcc67a6a36c2c84f8362facb887ed33f970373752b0c32a0ff04576c65746f952"): true, - common.HexToHash("0x7b52139110e90f0e324723afc669edc2f60e39126def18a98d862b674a29c2d1"): true, - common.HexToHash("0x051d81c0c2f4d7ea94966de2730b0b108001e738b657162788737df8878fe366"): true, - common.HexToHash("0x8c716ab2c6f16c2c5f7792e57e75ca0dae0213febc2440473daa9e38edf327d0"): true, - common.HexToHash("0x06b4dd5d7f3c33bac9fa3c08323cab4d87bddb1144c930834849fc45dd8703eb"): true, - common.HexToHash("0x85557978ac8981d6f548048a43f3dfc8b2fac2ccdd8bc815269614efa31372d6"): true, - common.HexToHash("0xa288a2848aa27c805a3e62421529de2566ac330a1ca476d3e2c0bdd3b0a6bd3e"): true, - common.HexToHash("0x03c5cd77bec7478b61241510e40dd88726886633d2d91ff7b251bec81c5f81f6"): true, - common.HexToHash("0x22cd03bcab832486a5c24286f64c2eba4e86b9f6437c3805742fa8cc790e5db8"): true, - common.HexToHash("0x0714bae85f73e5394781ec08b517ce632fc4e1d939b3ff2d20219e7b7354c643"): true, - common.HexToHash("0x0aaa2b3899701a97a87ecff9a77161d2f89c4f58418ea8af5f66f3f5a7e17722"): true, - common.HexToHash("0xc5fd5d43c288404ca2a6d05c50375241f0ab05feae00e8097b339f1d80c02f28"): true, - common.HexToHash("0x58e72dccfb77671b45c55f24503de3ab6604c8c388ab30a8d1e4f62a784dd5ed"): true, - common.HexToHash("0xc74eef3fcf6191dfabe1734ca59d1099de48aaf72de26efba6ef614dfaf199d5"): true, - common.HexToHash("0xb5e07f2e88078331e36f97a3d18dec2b07a8a4b1c9cb0abc3ddc64e2ffdf0111"): true, - common.HexToHash("0xf00820e3955f519adebcf60528cb5441d99967b9dad22dd73289701c97824886"): true, - common.HexToHash("0x252575a110298a9bfb678b3c3d44e2211c5fcb76ec43587ad66f7eb9efe7bb62"): true, - common.HexToHash("0x62f1e456c9f5afe36de4a607b5bfcff9e91f586d0392ced74d9566a2eef86b01"): true, - common.HexToHash("0xc43c7b83946429d55309372588fa1cf976ff2310025904b5e3085e40da411a39"): true, - common.HexToHash("0x5eee563bde59d59f33a6a91ed5d1e9d3342a68bdd940e262cd06566841321b65"): true, - common.HexToHash("0xa337d3045a83d32623de3b44c6339cbfc02a336ecae2e41ced5dfd59ee6a1462"): true, - common.HexToHash("0xfe99f23580fc5a47b48fda27b1b52438c4844581dcbc993c0b432de1cef9e321"): true, - common.HexToHash("0x053a12df7dcfbbd9489f84c61abb488ef784ab1adaeb092899631c4708b8e2ce"): true, - common.HexToHash("0xa5bb5e705cc5e15ba7f089e0ef7233c394856712eb1378280f7036b818a074a5"): true, - common.HexToHash("0xb6f6da1922267781f6acd5ad04379c36c22936117eaeb87be394f355a52c6daa"): true, - common.HexToHash("0xe1491f221f3ac191d2f26bc00f0775ff6aaa069b98d2771dffb9003c3f92f535"): true, - common.HexToHash("0xc7604ad68963b1803421ec035df479e419d8e971e85690ce01357079b9c4ee3c"): true, - common.HexToHash("0xceae7909ee5a36e09044138b12aff29a81c68eb3971e182157b0b54540c0f201"): true, - common.HexToHash("0x275ded20074f31b90d91c98962f9bc2210c13f5f89b8139868706cc1cf32e8f1"): true, - common.HexToHash("0xa89f8bee47e5be7c4e8dc7e31e4e5ff1c628056188f7c941ec1a20f0bcc3dfc0"): true, - common.HexToHash("0x4d9d07e2beccf99046857986922390782fe06cd3ff95aa3238536040a7f61cff"): true, - common.HexToHash("0xc9b6ef5b4b553183228120ed5ae6955480e45c8da857333e640275e4766d0145"): true, - common.HexToHash("0xdbb2309b78313326ada38e657229e989f4156f63eff2917dc00aad5b292be299"): true, - common.HexToHash("0xa3fed212dafa0cddde65c28cfa61cd1e6b39d5dac3dd9da58e18aa4e3aabd86c"): true, - common.HexToHash("0x5f570d16851b67a059f80bffb6af79ee44953116ac1a76e76eef5c0c1fd0a174"): true, - common.HexToHash("0x739c7c003fd87277440d26373a84ef9bc17cc6ab36385548f50646d0938cfa21"): true, - common.HexToHash("0xa87f990f7d678b4461c0ae2b18a6aee5d03c625340217f30b42d551bc296d43f"): true, - common.HexToHash("0xf71f1c4161dd401cf6532024c7ee539667154b3eb3459439d7fc5b2743fc5e8e"): true, - common.HexToHash("0xf1168a2b077be11ab55880c4b4a05b130703dbd42e9b7bd4911ba3acaa2acaf3"): true, - common.HexToHash("0x87111459cdb28c18f67ccfa0da53aa73a8e3104f1a3d391a0f17988e5182eba9"): true, - common.HexToHash("0x41e16dd05b245152585fe0c073c2cc388b3c35c638d34f62840ec115ec7fc3f9"): true, - common.HexToHash("0xd58d6c84e06472c958e487a50df5447a5e0d2101948b3498ef6f96dba3d7e488"): true, - common.HexToHash("0xef5abd63e6328e75d12c00a1ade1226af9a7839322d5d3452ae6c4e606fae3e2"): true, - common.HexToHash("0x412b84dcb5806886f93d175dd5492dc18a40cf71ce447da617200f5550308723"): true, - common.HexToHash("0x01df9aa21d17b8535b28282ccb9eaa3736616664f6f79ade568cc59741b89e8a"): true, - common.HexToHash("0x66d37773c4156a88fa0517474aa2af595b8892aa1a0c55520f19d3cc0fc4f4c2"): true, - common.HexToHash("0x16f8968934cd220704ba8bc39f60fb3df1ca0aabfaa975455734d9c21a908369"): true, - common.HexToHash("0xa92f587ba16a803d14c73e1817d8f402a4b51aff76bdb5fda256f79bf47f2535"): true, - common.HexToHash("0xfea81d9e24b4ffc4c964fa90d8bda2a85da0b4e8c32c2771be9860471dc2735e"): true, - common.HexToHash("0xd7f8d02ecd0e02bdfcb9e6d04aca51994b395740c89c8030e243ec4024f40d30"): true, - common.HexToHash("0x921d91051d8c2d2d2b5c002d18990b1cbf99150dac5f102563e444f9778739bc"): true, - common.HexToHash("0x3267e5587c0bcc93e9795abba64280a6480a6bdb25e67dd7c56ea5578f5c96fc"): true, - common.HexToHash("0x18bddd6b447748652f64836b9f91a1b1131341a534d886c8938bf34782abac0d"): true, - common.HexToHash("0x7875686a1c10647ee804115d334b0536c1f30fcf0d6699bf8aa6e5c8d8ab9491"): true, - common.HexToHash("0xcc69d806910b5199f58bcd98a2fa9464563e0093581e14148fed7602088c0629"): true, - common.HexToHash("0xf21b8e40dc006c8d1727dd07744f3d2610f235e4022e705aa1d70cf28c6c460d"): true, - common.HexToHash("0x4b357259fec36d3499d1c06ab21b7861283efa03032da34cf7c41c2d4d650fab"): true, - common.HexToHash("0x17e34ae787e3821e096b665d3a23b6d2e6e5e1a5dcc5db3b0629a056422a288d"): true, - common.HexToHash("0x40de6c98db6319443e710a234f6268e992f38aa71dc63a6901e2da12a5a6ddd5"): true, - common.HexToHash("0x57cfbc9a0ac9bb2e5e88ffe018eb3d3e04a9982244ff8ec2f9ea236e639b0e8f"): true, - common.HexToHash("0x9cc0590a5998f4ac833bbdc38fbf2d307851fd2d18c41778a64577692164a6c6"): true, - common.HexToHash("0x7d4e82b32edc95256b7ad30f6681ea9fd9e255909e71c254b124ea359de403bd"): true, - common.HexToHash("0x21b20e2797e04ac4ab93090370e0f870ef3b87eaec854d2ec6f2a99500b15a3f"): true, - common.HexToHash("0x746333ee7c7c587868c4d1027608c1bce349aa44b79519ab9636a7be235ed64e"): true, - common.HexToHash("0x9fbecc1168aff48079fbca130e1dc5fd9eeac887df6c9d9eff9fcd77f666651c"): true, - common.HexToHash("0x83ab5bb99b2b7408578bb1e73dd3208ecb8b2ff3ed7f87ad0759490efebf046b"): true, - common.HexToHash("0x145be1c5b8a436bef5e2e2e9873dd6ef9a994e8273250a87b62dfd69d14fde64"): true, - common.HexToHash("0xff8e7550e1542b15ffa02c33a288c753e16dfda2cc3ca0c34e8423b416953b89"): true, - common.HexToHash("0xfdf75cb3b2b984c31e8e515eae3e5104005903234de61d064f5f5c647a519a03"): true, - common.HexToHash("0xa31df5592bd6a431ccdba57ea5c4f1e7442babd73aa56b828461511c517d2364"): true, - common.HexToHash("0x4e3258bf453817d9af54fbaacec7e8e8ed37889974e76f2ca71b5985299ce0d1"): true, - common.HexToHash("0x6e8cbcfe2e0542497c4c59cb15f6d83772898638b55cac820d09cb670bd42863"): true, - common.HexToHash("0x8a5e2306c706526537b99ca0211b3e97e401a39d0d0567ccc4e4d10c04880861"): true, - common.HexToHash("0x78ee533767a465ec75ab46651df1c3cf214c38077e8cc651ffe64eb324de2b0d"): true, - common.HexToHash("0xb0b140896f3871f09576e60b9e089fe38783f89284c3cf1339fb1952ee809b42"): true, - common.HexToHash("0x79764d36fc999ff2873de2b5aa5f0e816bb38e59c60c2c882757cf792250f7f6"): true, - common.HexToHash("0x41fcc3d1e75ef4c1a57585006b0e02c6b61f7e52aff2972a7fdf12547b6a4d0b"): true, - common.HexToHash("0xde861724546a652822d0bb97921cb4989ac671a52c2e78bb6bc89da9bb983616"): true, - common.HexToHash("0x9a4ec344c0ffd0b0f77674447390116bc38ea1211beb647f2a13f6e4c8a05c32"): true, - common.HexToHash("0x67306ad0661487ac0ed6eb2f091f421153e118ee1fe9a05858f83cc7834eef99"): true, - common.HexToHash("0x33ee603e0dbc828061464bbca06f302e35704403d5bb506571b212f9196fc669"): true, - common.HexToHash("0x2d260447ab3fc14335594de1b6a7bde26d9c8f5cefeb5f27fd14dc29737e9d10"): true, - common.HexToHash("0xab06118d62929dc5543e3c3a1a00d87d195e7ce02ebc63731aa08a7701fe6f5f"): true, - common.HexToHash("0x8b854ac6b9a1d4f3929ff60bf615fb0cd732628496c1ab631281ecaa3634fa3d"): true, - common.HexToHash("0x1c99ac67a22072df78c360f8c991149ebb3465a483942b927d2bc1a5f1b0e5c0"): true, - common.HexToHash("0xb7a358062d6c757af6d9f8689543457026636806941da4a8566fabc0ae1df294"): true, - common.HexToHash("0x6d7fdef26e902014fdec38dad993bb48af076ebc6c75ad7cf119d04c0d805a4b"): true, - common.HexToHash("0x89fcb438e685e30d939595e2a1efa5e222b2349baf8202bcb2e3071cf75ac735"): true, - common.HexToHash("0xccf5416bea0d1b23074c093d937d49c1d54d792927f9e13d5800282b3b064e6f"): true, - common.HexToHash("0x1c47d18e70ea5be89eed7cb9fd843321e7d851a4959c1abf11304c61baf2dff6"): true, - common.HexToHash("0xc08423e5f572756a498c5b212be09e00958060e760a2c0d4ae5dffb9c1ecba8a"): true, - common.HexToHash("0x8f5ec292f1f4cf7cc157840b3309ab74366f9357dc47cb3d4bc1324d2d7e7d90"): true, - common.HexToHash("0xa8b01b4e8d04bb4efa716b208eac2d2fab624827af229b0f3ee421d2ea96f058"): true, - common.HexToHash("0x200ffcc3702f8723874ec860578850e6da09ab0d08264bb4023d85d64de06807"): true, - common.HexToHash("0x8468e88846ac8f5a2bf8450597d8df21df4ee10affa71141dc63efbbd382dd96"): true, - common.HexToHash("0x9296452e9776150ad026a08fe7e37bbe25e25f1eaa77be397cea387dd94e660e"): true, - common.HexToHash("0x6d56e13cedc695f565d1a9e2269deeccd3ea16658c90dc137cee6e583b0c77af"): true, - common.HexToHash("0x3d46b695d975fd90bc3a82e628c3d1f9591878e6dcc8ae40dcca001102875611"): true, - common.HexToHash("0x1adda0fc30386d227e354b3b271751ca9c046fb445c79f89aa7b56a090e238cb"): true, - common.HexToHash("0x16dcab5b0b5dd68793a7cc17827ecf35edace9d5bd87cd21c3defa3946ad85c3"): true, - common.HexToHash("0x0a936c14d152381f88a94ca2724d85a53b6e7a9157132b33295755d0c5b15a34"): true, - common.HexToHash("0xa1d142c32b4c507570001839cefd4296a2e1851edbb01d48e4592d38af6f7de0"): true, - common.HexToHash("0x7b50f24a816864c307d1ee6456c7b646eed9a4506ccd4e5f67a1250ee9ffb17c"): true, - common.HexToHash("0x657d458ef4f2dd59e08fd01adefc2ce8bc8f09f7b739f126418e655cc0949f85"): true, - common.HexToHash("0x67e98b1c7b8aac4b9cd0f70d21da2ce3f1da453c8d19f65f88b46ab960bbd6d5"): true, - common.HexToHash("0x08acc704be9f55b42b206a46b3a9773b7a74d482b8b044149c6ffb61f25c8391"): true, - common.HexToHash("0x2c8a86d54b3511e45956a45e099c5e041a1e5ba00b7886b97c8839eacf64b159"): true, - common.HexToHash("0x11886d691a6596236f295eb7c1b98c81a21a85fff83dd015a9234881393fd9fb"): true, - common.HexToHash("0x0489fec9dacb4bccc72011e29aecdfb646b821f4d0cd8b77dbf5d8c4e6a9e479"): true, - common.HexToHash("0x7d855fe51a3bdf3826fabf41f1bf04a659367136a4ba4b01d9074aa316ed1197"): true, - common.HexToHash("0x436ed0a3c84bdb34e705920edd2dc3b0df87800124e8ce41060085b0564d60eb"): true, - common.HexToHash("0x9718fc1d5ab133fe52084e1e408358b5ee5db213d5b9cd66eb83d88efc468e6f"): true, - common.HexToHash("0x53ef24b81aeacc80a91b1ad21491707faa0fa1e4f3089a229fb852e73dc0885b"): true, - common.HexToHash("0x05b4a07de0ae1e8e07e7a3475a0631b21e4300d9e9f87b9b24fc070bca37c6b5"): true, - common.HexToHash("0x39a8f1621a9b04b3b89d3b93ffb0c4cfec2a4da666084c63d4aa477f3fd0bdee"): true, - common.HexToHash("0x3f2beac75ab594cbabf54d557e850c77d87174229ac0f1761f25369bb230d1dc"): true, - common.HexToHash("0x5c7ea3e4cb43f5dc268eae887ada87c9c57c33b541e551b3ba5260975bee6f96"): true, - common.HexToHash("0x39b64fec9e22301f191b697327b80a0448e163f74bb0856991aede0b0626380d"): true, - common.HexToHash("0x9167fa1f49eb89f5ca127906e39226676294165daf617bee17c83f980ef2ca31"): true, - common.HexToHash("0x1ac666b1d52b5647af5c66174dd0f6a82d0ca8754c1923cd4d3606fe5f404903"): true, - common.HexToHash("0x84caaba488d149fd28002ac7c3d39cee1d3c04b71e7087bafa827a0c36e8ac77"): true, - common.HexToHash("0x4bce43a749496661e994f74569e43fc07d8ac3624f75e61b09ddef421313ccb9"): true, - common.HexToHash("0x081367daaeeae3569108b719c0389e69b30d0554a6639138211fe63079e2cd8e"): true, - common.HexToHash("0x29517dce1bd08f6e5211b44c3feb414bb12965ce9d4090c0ee91432092df947f"): true, - common.HexToHash("0x7f6db4a5420c1f5cd81589b6e56edce219aa38f09fa107afa8f0536a74616613"): true, - common.HexToHash("0x06fd8050a348c26c999c926df854e5fcb7beec9805922a4017a877d6eff8bea9"): true, - common.HexToHash("0xf92ddc32cd331816a3d5f220d588cc054c42d54d629b77b2f9749ddde4f804a7"): true, - common.HexToHash("0xfc465581d070ffdc43cd57339fb8070d9a7146d1a4668060d2964eb796acd05a"): true, - common.HexToHash("0x46df199d5662ea80062f624fb7d25bef50ddb2e4b50b0cf8fa820694a2194c55"): true, - common.HexToHash("0x5268a1d10bbfeb68e1e1aeb97a50360e369b4bc4d66b958d44d26cbecc3ad36e"): true, - common.HexToHash("0xcc49f390ec2f9d36efb6f70682c43634d9fbb56a1990e32bd315b1433cef7718"): true, - common.HexToHash("0xfb13c0f955335642d34ca444030dfa0090641ce5a7885248daf9759a6276e94f"): true, - common.HexToHash("0x92251c6d3fe070b41f83ef1e661db36d2514d93c7d16b0490d6e87acdd0a5ae6"): true, - common.HexToHash("0x43b9f1284428d63b35f091e7e080c15e8b1602946bad19b055391680baf7819f"): true, - common.HexToHash("0x8839fe30058d15094ac76a47842d0d632eb317e7e3f35df3dd7a8fb658d20452"): true, - common.HexToHash("0xb2b456c22c57b49eb9e477610e383c291f50a0cf7022e4e001bf59a01271f247"): true, - common.HexToHash("0x11c908a8d6c36f87670f8b015bde9d6a05df606811d219ded05504e9f4720736"): true, - common.HexToHash("0x3d16e8e4d9a1aa7c2dff880ab74aeff19cf3579f36b0ed7da7b91e4fd61a916f"): true, - common.HexToHash("0x7132e1225291af6c043f7d68a6051314697f43f67b560fc82e3e6169318d0147"): true, - common.HexToHash("0x58b087e54171f6e480aa7b38e288bee92d418fd4016262308570d4f2a23a7672"): true, - common.HexToHash("0xe6f1e55eac4c137536e1d09111808de22825459eb6ac84843109e652e667c246"): true, - common.HexToHash("0x072f55f6c4dbbd80b30891015d5f6595b431b52cb515e84cd441dcba2562b49e"): true, - common.HexToHash("0x6ed0919ad319f4dac574b36d06077ca7c2a1b510ea5117e2d1398d7ff18da18c"): true, - common.HexToHash("0x4846cc4bac2131ed1de074022068341d35fd5e44740054d67b296eed823eeba9"): true, - common.HexToHash("0x7e7e83b85f09c367eca758806b14ea2a67342aa50a77aa557f41d9302a6f09b4"): true, - common.HexToHash("0xaf5a4792f8d8d6b9e345cf0c19f2861058c2b04c97eb5ec0392a9639262005a1"): true, - common.HexToHash("0x279a695a60753e711acd1233cabee22e2abdfb4102baf23bf69eb05f2f990d5e"): true, - common.HexToHash("0x95d15572dde6eea9ca73d69a50a996f249463a841c197b54d20d20fcc108c30c"): true, - common.HexToHash("0x23e0074851599d1c93b69ffa5c9db6eded1c2f6f7a3ff1cc5568c0866a32711e"): true, - common.HexToHash("0x30b370a6bf917d43c27f482a10a00235b35aa1c8a3aab63732f36375deadd7b6"): true, - common.HexToHash("0x378f2152981ae1034ce20bd0a4fce631f2e634295a7c5047fdb4be6d35fc4789"): true, - common.HexToHash("0x641324f355b8638776805711b6ed09eaaa4e04de9292eba640fa922e10e3e3d8"): true, - common.HexToHash("0x782766aa34463a09eb9b562aa60c3032a0be9b902739729378f104a5a79744da"): true, - common.HexToHash("0x1c408373e6f7b2f59444216755bd4c6ca1e1c0d3dbf6c41e98a49f5bf88a7487"): true, - common.HexToHash("0x4ca03455827ee95b6f4ed869d155a7e6ac18845c4e542bad2a1c69034ad08a18"): true, - common.HexToHash("0x82438b3006ae9dfabcf060efbf29ac23a3373e8ac6ce9bcf501a26eecf13bcb1"): true, - common.HexToHash("0xb235be032999c05cbc32cc29a7b7044ef7d4e4764673a132e746e754ec18473a"): true, - common.HexToHash("0x03d26435a8fcbddc1163fc27ba1fe281b32018ac3e431b754c2cabffb5fb98dc"): true, - common.HexToHash("0xc8d2c42f1f03610cb58f07e987e197d95d90916d04df716324e7296a4def6e9d"): true, - common.HexToHash("0xfe7b09068cc6f2457f1b24a18d17cd3dea22a2b8dd0630ff87e2eb43bfe87f0c"): true, - common.HexToHash("0x908c88758bb6ef1252dda2de671d8d70fcc6e25681d7f08040e0c682e52451a6"): true, - common.HexToHash("0x0fe1cface8dd279b1dfe6f33eed5b34256863ec645b76928553310cf1f72bd63"): true, - common.HexToHash("0x0f80675ca5ce0377bf4dc87a1781dc3f7be3d676b1c7cca53ec16cd67cafbc0b"): true, - common.HexToHash("0x883546f66e1f4ca7995258593d95d151f1b74026b7fb5c67900be4639ca9e00a"): true, - common.HexToHash("0xfdd62d2434cb1af7f017f7ed9ace2bec2dcb333138a06058d45ec37dc9f6e71d"): true, - common.HexToHash("0x688181cddb90ad6321df398e86666c2eec291bff6e1445ec254d4eaabf277b3e"): true, - common.HexToHash("0x7de4b098b3c87c2a385a75a215ef5c903fc0d299381817402b067ca435322705"): true, - common.HexToHash("0xb066cb3ff898aba8f2e201352c113facfc64199dc705d0110a5e00a8cd9d27d5"): true, - common.HexToHash("0x1810c879269a518f6710b6db0152c5e3646993ffbaa0e61e3377bb81a87c09b0"): true, - common.HexToHash("0x5024b43c16d8a6281cf04273e35571e0d153023d3aa733fd190c1b235900fb41"): true, - common.HexToHash("0x6eb98e8353395abb720e89bb0ca3c08e8de4b72996b912a81c94831a74329620"): true, - common.HexToHash("0xfe784060ba63e86cd8dba1a627e145692cdd5c80bc809fd7021089c9cf3fae0b"): true, - common.HexToHash("0x5981b40a1d41e90938a5ea5040e5f33a105d3178d0234bba37d4cba938cd7257"): true, - common.HexToHash("0x2f2507ff534269e3fdaecfc692f72c54ac34ddd539572a16d59fd8e880b36e55"): true, - common.HexToHash("0xd17cef42bd7f203645fb73fa119be5c2be4a77e340721cf32eea11f5276e5a6f"): true, - common.HexToHash("0x5705fc652e742226079f7d9c91a5bf4d4753b165550f5aa0d71b1a489a039670"): true, - common.HexToHash("0xb25d8312e9f629cc2b3eafc87b414edd4868d6d14bcc8c6cde0130885d616a69"): true, - common.HexToHash("0xbb2ac2e2bb0536134e346dfaf8ee607c4834f86bb87456b278d79a61249c8e23"): true, - common.HexToHash("0xe053d1faba0c5d2ce665108644437220a81579798a31d566e5b0c1b9a0580f6b"): true, - common.HexToHash("0x28d24fe34e1a2799ac1d54f41b61781156901e1a97c4cf651e39b4b4a3a6cca8"): true, - common.HexToHash("0xb45bcd9e3eed3aac3727672544688f414530da36a4a32e802991aeaffd58ac02"): true, - common.HexToHash("0x0cd3f239eb872945e1b5c9a4159d3884f9428d3ad08c9db9a15895193b0f506c"): true, - common.HexToHash("0x3e0d1234ac58bcc58cb2add2f4ba5fdb6e870b7611946bff3fb5e7a30b97ee1e"): true, - common.HexToHash("0x10166a95e4fafbca1a37477cd99b72461f27580389bffe3bdff922b88ef07e4b"): true, - common.HexToHash("0x78b330f0e1796534fba2949fce6a6d1cd390fc50d0c5f8be77b4a1c076d33398"): true, - common.HexToHash("0x3de3dd5ee3cc378dc638cc2745e12f3983bdae79c6974bfcfbb4246b3305470c"): true, - common.HexToHash("0x865b2a6eabb7ee88d86e7528fa82a66052ea9610e9948dd4382ca4ee9f71ecc8"): true, - common.HexToHash("0xea71e14a190785041bdb312c5014c50f856acd87c3d1c32fccc840bdc67dd132"): true, - common.HexToHash("0xc3c1536be6c4be5ae2379a28f516b735fecc97e937bf4a5b607203a3007144e2"): true, - common.HexToHash("0x0e37cd1db46f8ce7a125f4c58626789cba471e2aa01381023661926e5741e102"): true, - common.HexToHash("0xa4b91236b1347a1ca126c5ff5f3bb2aa7065780262026730b884ee509f20fcfd"): true, - common.HexToHash("0xc4b91306f2f12e4543b3221e3ca288d0c89d5ff73dd24f9405cb807577c87360"): true, - common.HexToHash("0x0a8bc79e84709b45a87b9810c18632391068c0263c50b10aa8f065ae8f2c1024"): true, - common.HexToHash("0xb36fea45b0ddc3c29a4d62e1c7175786551fb4ebc0a18fc7ecec4775d13cdff3"): true, - common.HexToHash("0xdfeb048630441262ede291b379ba63a5031590ccd928441cf6b0e589606dce23"): true, - common.HexToHash("0x266a456ddf61dba26f38dd761f526c049fa9acf2370ce4833180075ff1c32989"): true, - common.HexToHash("0x37772e5f1c7d01967dad81599e6df274759ab4c0ffe059604ffde37775cf4dd7"): true, - common.HexToHash("0x0db615883fd025e5be6c46339713e4d1bbda3a807faa01755f671617752aaaad"): true, - common.HexToHash("0x81944b54e02a1534300a3681d6fe5e031112e9dcfac15735b32eb974e08d4ae2"): true, - common.HexToHash("0x9396a5e8c45dd25ce8597ad13ea5f56e42242bdf92bbef12bf9540c9a36610cc"): true, - common.HexToHash("0xe1f4eb29274dc8fbc41c1582af7eb16fa1331e8ca396d7b44db49d8fee36c4b2"): true, - common.HexToHash("0x4ccc5fc0affeba2b557f25491fcc0d4ccec3bc2dd238119754351b0f6ba577eb"): true, - common.HexToHash("0x11120099eee4ae7a19ecad75a4726fa0983f477303602204ee9d384061904593"): true, - common.HexToHash("0x6aec215247c55325f5c6ce5d242d369ef44bb557f6a9f1169a9058f64c596e13"): true, - common.HexToHash("0xbaf1e4cfc5a0d7ac235e9da8ce6c06c8ffd7dfb8033808998c0987b6506d9a4b"): true, - common.HexToHash("0x875d4cebf5362358c8b2f9547b536eb26916b475fb32cdb5e9998dda53bb735f"): true, - common.HexToHash("0xba53721b7d13275506328d4c5d63656f2d00b4142c777035b4d50431034d20c5"): true, - common.HexToHash("0x8d6a705a0e42ad5b387ddb0ad3ce4c14fca4bd1083f3f5edac92f8e8c47661dd"): true, - common.HexToHash("0xd5422a4cd4266219654af6ce313ce6b360455425c171a378186ec81999b4436a"): true, - common.HexToHash("0x49021d91727d9dead8a3d8e5e4bc15fcf4cd9f3595a3309158604079f09a16ac"): true, - common.HexToHash("0xea3ba91e1f31082d0c1244f214140662cb352a46afcee5f9b875b8013f5e9b0a"): true, - common.HexToHash("0xbe06480e62b723eac783ac6037a3e964ab25a2333d9c5570bffeda867b66abab"): true, - common.HexToHash("0x85232bcb246b3289c3c3917be44e9e9705bb3713c256ebcc0814b6cc379e749f"): true, - common.HexToHash("0x1ea53df362aa6053a4ff147deb266952d9b5853834634e0cb858573fd916aa02"): true, - common.HexToHash("0xc4d303fd3b725ee57a727380fe65fd28b5167d1d79aae50ad3a08d0ed91b2222"): true, - common.HexToHash("0xac7d64751b64502ed4e1287f04a61849bb4fafa5e3f14f6f2998be2c1fc6ccc4"): true, - common.HexToHash("0xa13930f693d96439a48ce11b2651d98e40d86995e439042b704333618d3e0d39"): true, - common.HexToHash("0xc00ae2645e4582b1698839fbb44a7203e4b60dd1161a99b1af9b7e4af9eb18d3"): true, - common.HexToHash("0x112ba43ea2935c33af85d5c756d440b83cba8e020427515d0df81846b6efe0ff"): true, - common.HexToHash("0x292ecce6cc786af4c2b1e1f4f4c45f078bc60a7e6e68506f907565b5187f2c28"): true, - common.HexToHash("0x454d6a322ae92250afa9d20784d5cc88dfe6085c93c9519b4120c76793984200"): true, - common.HexToHash("0x2c27caa33b953b8e6e972cc995b64560e124d9b8098fc4ccb65be7942b280e5b"): true, - common.HexToHash("0xc600c2f10ec1e1a24ff6fa0005f46fe355dc7cf835398a84409f1e65b9119725"): true, - common.HexToHash("0x6e06dd9f0d771c90b61b10fb8f2660ee5489a48ee646ce1f8a2829c9461472f5"): true, - common.HexToHash("0x731bf2cd46d02b9134ae05ff99c3dc441168a236cb0fc9027b84148289db5704"): true, - common.HexToHash("0x1cfa7207da62c3730a6353b7b85425dff23fbb66caa61c1aafb7c6ae62ccd34a"): true, - common.HexToHash("0x00c49c96663effafa1bd9687cf3ab04f06c7ca8490b359224ac038a7b92803fa"): true, - common.HexToHash("0x34dcb0db6f7de77f0fb7368244e3c4b99ac9d377a73116722d2da8162ffb9f3e"): true, - common.HexToHash("0xcdfa2dac9e92465732392e816ff0e8c87b9c956793b242e2753c32d239dc6277"): true, - common.HexToHash("0x3d2fd118d770f26aa4c3d4f2ddbf2b0f4e14f8f21b4bf902b07e87977e7060df"): true, - common.HexToHash("0xe0df99558d20aea3cb66f69c82018e7b643ce049eebd24eb8dbcb95e9b707b06"): true, - common.HexToHash("0x4659c1a197b1f585ce3c869fba679ce4228ec78656433816eb71cb998820885f"): true, - common.HexToHash("0xe3b6ce57f9797edb043cfa27cd6a9d661ddcd85a5e9fb589f9d9d739f0eec5e8"): true, - common.HexToHash("0xe296665fa96241069bcc65ea6fac461c802340016a4bed51888876c38e9638ae"): true, - common.HexToHash("0xb317a28530ef927c22e6df50b433371d817e76317a87ede37ee239aafbc1e793"): true, - common.HexToHash("0xfe5a300cc59de2d757296cd986e8184c1dd7ea77f286d54cb6b20ba86d6ae8ec"): true, - common.HexToHash("0xc3ae20f5307fadff0d47e19a9ea90e6ac231d2df48335a8d3f690bf3f76113a2"): true, - common.HexToHash("0xbf9833339579bb330d6a9307c10ef99c58603cc8ff18da4ef24a03e0310587e1"): true, - common.HexToHash("0x900d4b4821d04315602a77768cc7f2c2828de8e9c9c569bd5086c087b33a5441"): true, - common.HexToHash("0xddcdbb5fa10a0119c16e70ab81a5891cb390377ed1bfdcc17f8f0d32207d5e11"): true, - common.HexToHash("0x5abebe4fbd08e4d85894b07496c0a9b8ca715eabf9555358cb16ded5049ed4d9"): true, - common.HexToHash("0xcc225bcdd9e3e10cc8ec9f1be026a39227cfd4d4b4aa8333c2bc40e6b39b8c34"): true, - common.HexToHash("0x5d440b3a9a868356f1e42b4b0812e288ed6661263fe1703f09e33e49fab76362"): true, - common.HexToHash("0x8ad423feb7fdaaaf785c9ab948f2f404313fd38e5dc1a0a4e11dbc1cf71cdb6a"): true, - common.HexToHash("0x0661ecc6c7bf840a8c46373137540d6abc94fae46127e38c4dc8817861ec388b"): true, - common.HexToHash("0x82186e1ccdde041d49d2bc757a9de0ee296f6e2ef5e34e3b2c6dcfd952a9efe0"): true, - common.HexToHash("0x344f9a9f393cd2707968f6ae5e7f1d1efe32ad0d15abf03e2e5e1a11707139c5"): true, - common.HexToHash("0x14a3bb61661353524acb534fed098fdada2007947277e0763420731a7e449a44"): true, - common.HexToHash("0x07552bf5a8db2a12fa31bf4f94ab2df85d3cad921fe27af033245e3b004f24ac"): true, - common.HexToHash("0x9806a77d6c9a7c424bb5e0d3492d062c6c82b26ad4b88f3b7e09bdba3e561c58"): true, - common.HexToHash("0x9539eb54101a556ff7c946d1205d6ccd554f235e119a5b7d3801e3071cbc0edf"): true, - common.HexToHash("0x5ea6c75105779829dc3b86ad489fb01b3984f7f414b6eaa9625f6886635f3a8c"): true, - common.HexToHash("0xd902b0a0b9dfe8978a1932b08419b161a6d59f41bbbe5b0c6ce3992182ec4cd1"): true, - common.HexToHash("0x28dc7aa9c519ddf5614fe1bfab1365a14f5678c77a3bb69685e8250bda40b78d"): true, - common.HexToHash("0x2d7f3b2e59136949efe93a1447c79c2317213ebd9ae92c48f03d558dfd8eb796"): true, - common.HexToHash("0x53e8bda2209a96ac8723d561e48a4d77c432d5675a8077f7915708f7d3302624"): true, - common.HexToHash("0xb45e6e0ffb093ea1a95c4be33a39aa8489e93ed448c6dc3fd7df8f4f96d39694"): true, - common.HexToHash("0x2d8ee988f718158d10d8774f8377614dcede80756e30637210b2263a7c1a4d54"): true, - common.HexToHash("0x13c625c0ac3df59650950ed0ebbfdff8c215120d18672f53601625773b371ca4"): true, - common.HexToHash("0xf776d0f0845d3349f5b262cee4d782176043fce45a146ac9b09a0b505134247a"): true, - common.HexToHash("0x3491ed0193a9dbfd4816dc85638354b9f437667b482e5dc1fabb9eabb0c18a30"): true, - common.HexToHash("0x69eacf076dc376a855fb8dd220259478de5109632d32147632d413e6ab133751"): true, - common.HexToHash("0xe086be26b36f2652d9899c2cbf266821d2ba0129e7964e053f4783a45dd33d1b"): true, - common.HexToHash("0xb089031d132c65c17e73ca86a30a1b6d888b7f5ff26fd57cbc0fec93f62c4d9d"): true, - common.HexToHash("0x8d053313ab6467908061ab4e12e1ee25902ab8bd9da9c9c59d508af70743ba08"): true, - common.HexToHash("0xb3ce2e62d9c624513a144a7bcd44c283eeaac80d29fc2817b55f89183c6cf419"): true, - common.HexToHash("0x48e4ac9b369ca874517d34a55c70c354f1615c1d135ef6d01cb52f4b7f1c1cc6"): true, - common.HexToHash("0xa4091b2ff7632a057f9318e5aa86c261453f2ef787ae4a3f8017be3087c1c04d"): true, - common.HexToHash("0xfe5f5445370f7d0af75206d53bc8e83a7b082746a28ea1dee8119672d586c7e5"): true, - common.HexToHash("0x12e117c5403866be5e741dfaf5c3b1dacdaf1534df76f5c22fcbf2b2f5329753"): true, - common.HexToHash("0xd920f4c977011d9fe855d55bb9f5de1d3e876ea594ab388fe084f11f33c6d12e"): true, - common.HexToHash("0x88dd23a07f8a2b38f79a79f613032d2ee2592753d6d793c08bfd2d281ed45547"): true, - common.HexToHash("0x45c6d915954b865dd9d22b136f2eb182eafe283c430ada47a640d9d871654557"): true, - common.HexToHash("0xf62739835eb7dfdb4c10b66174cf80c420a4a249ea9f9aea319c2b836683fd0c"): true, - common.HexToHash("0x7de5e1b752622d68c55b2ef95fc077f049c02342e7c412ceb622c33199045264"): true, - common.HexToHash("0x04f91caebdba84167c11f6b7eb9c9d32036b56a691e9cee700e4278f40a25ed0"): true, - common.HexToHash("0x81f9c415f3a0312da98b477e1e487cd3169021d0d440360a2d1cf5a1333b3935"): true, - common.HexToHash("0x2371c7228fe40530ac68702c5cef08b7b9933d6c360b9c9a8f11f270d8771eb7"): true, - common.HexToHash("0x0619ff6d6c01a809c1e664e9dda5ab7f13e58e2dc6d8c54e1efd801680fbf202"): true, - common.HexToHash("0xff741346cbfee2194fd6429281188a5b599822213a6c1e5b8b7a169ef270c292"): true, - common.HexToHash("0xf8bcb24c57e550f81cb09f6bcf8773868dabf5b5681e04c010a76ac8d47a542f"): true, - common.HexToHash("0x17269b60261b33c27c5aca75f8efca05e118e59f012921127db5330c78b22f36"): true, - common.HexToHash("0x60f21b424d4162a1056efea4de1bbd0a4dae0dd41204eab4fb81cfb053753321"): true, - common.HexToHash("0x5eeaee4e57dd92e63f4c6bc205af95af604804f64ef9343b5b7c3e889e1acffd"): true, - common.HexToHash("0x3778b4b4af386673f6ba4362bdfb7860e82642f9c26cb86b7c114887136ce6de"): true, - common.HexToHash("0x8141aabc4f1a05fc521c8e6f308440fcb29882117e5785c651fa3f1f19d2d69e"): true, - common.HexToHash("0xbcd6f8244a61ce360f8883be5c2e85b97087ae3ac728ef5318fd0d97cc7d2245"): true, - common.HexToHash("0xf98eb81521a594b10b536108f6bcadcd39263a3237b3cb9375f6b7381ad52dfd"): true, - common.HexToHash("0x5b603e3831eccd65b75fbe41d06e9b4d4129d80437cb0d8d54d5184dc0532c51"): true, - common.HexToHash("0xabe407a4f41ec1e8f4a141517652f408d6f581cd23fbd2d712a97404f5e80a47"): true, - common.HexToHash("0xba62cbdac69be57584e6033b72036306f2149b225fb7bd2654d11ed96a0ecfad"): true, - common.HexToHash("0xffae049f3e037b06db415e37d98f835b4a50f9c94a09b0632f3aeef3db1da888"): true, - common.HexToHash("0x86f7010f6d7614201c89b3b8fb9f5f1e749ee77c6082868025652c091b841ad3"): true, - common.HexToHash("0xfdc9024d5136309b7d60cf7518f3e2adfe99f9f6207058f1145975f8f096b3c2"): true, - common.HexToHash("0xebb81ba7d0d27943d4aabcdf975fb282f27870377174d807d3f78b7e0ea97443"): true, - common.HexToHash("0x21bfc6cbd3f1dd34ac08a733da302ad7abaaa94b559d19cd2e4480852f04874f"): true, - common.HexToHash("0x859cddf5e54b1e2a846982c373af934ef0af69e9e0d4f3028384916f32b55b6d"): true, - common.HexToHash("0xaee811213ea539981330dac62d01fd50df79630be2379da0e19d5387c0b0007b"): true, - common.HexToHash("0xfc94b19b57629a7419d7bd23d620fd70947b702bf06709f18b0d7cb865b9554a"): true, - common.HexToHash("0xd11ba987c221f2fd1ffc870cfedf7c1cb1bedcc1f1ecc96e3e52a3f7f475a4dd"): true, - common.HexToHash("0x13e052dae3e53c53b0ea014114cdd5080b2eda1e2eba956da7ca4001878b5b42"): true, - common.HexToHash("0xea3db6061a0a26d974ba281658b4e8d4ad58feae8d648d8c51deccd2f6f90f5f"): true, - common.HexToHash("0xf25f0ec3e1e179ed33942f30ddf678801276cf08498d1b7b651d45688ac018ee"): true, - common.HexToHash("0x14763be2f0d9e2ee10799c7588d8b09718f253d0de182a209776998f15e8dc9d"): true, - common.HexToHash("0x0e5d0312dd1ab59470c658d76f406f17b7f88d61441c1cc9ec8c3562723fb5bb"): true, - common.HexToHash("0xf48f327d0d77cd5d77608881321f7a8d6d40b787cfbb4aa31849ba6aa3444453"): true, - common.HexToHash("0x37944fccb8af9087b21ae42f5267404f934593b0f2621e037c5aa2e5d805adff"): true, - common.HexToHash("0x305a8917cf33dac1c32888bce3a5385de40d444b0e1decab03afe88e694dc70a"): true, - common.HexToHash("0xc37a59f32c9ef2e790e96200c54306224dd907e28d3dffb342d3dee647debe31"): true, - common.HexToHash("0x89c17fae71c6530fbdcb19fa567a9507bffe4edd10e8cb9d5631e773fb26879c"): true, - common.HexToHash("0x897635bf625f736f59a1a649520100436185bd19e9acf41ee91e446f8515c224"): true, - common.HexToHash("0x1d9e69577d62fbc34fc2297107062c805bcad1e254e4c9cf060538e8f8cccfc4"): true, - common.HexToHash("0x864548ceb51d3ce3f167d2eb8acc8907df8aea4b1c35795e302e28e57e3195db"): true, - common.HexToHash("0xb0b88443c593ec17dcee14b462b5a13470f3a7d32ed577fc744330942bc7b161"): true, - common.HexToHash("0xce59f10fe2d9943f8bf5c4754009396af45b7c4e0ca4ee5ff14aed1ea304d28a"): true, - common.HexToHash("0x1106e8781a47eaf9f009b8834f89373df132f369b9976a0b89203dbcbf8da1c6"): true, - common.HexToHash("0x4c2e2c87aeef0fbaa1cae4584f3a478412f7cd6ee4c4e21fa10205f8760e3353"): true, - common.HexToHash("0x95ec187ceb23e914b8e0e1659b555a09730363a5f38bae71ce49bd3ef2614856"): true, - common.HexToHash("0xcb8da03bc8db703ddba9e7ca1099c25cee1c3bfb6c595ef8b7f5f650fd60f2d8"): true, - common.HexToHash("0xfbca65a11172ebc11c5f5c3930a389cd1b9fcd674309c2d8f066efbab32e0f3d"): true, - common.HexToHash("0x8b61b7ce32928dd9838afa792b03f40118b09182e87b7d4a1a2d65624ae3504f"): true, - common.HexToHash("0xe424b7da725152497124a19728ad855ada14cc094a5a937187c45d39d00f8b78"): true, - common.HexToHash("0x8b737e2aafb4160c7535b5bea11b770240c31740e48e4f830079293e216658af"): true, - common.HexToHash("0xb8cae2610616e3ba76767ca235ddd0bfe179c36504eda81cda6f37ca9e7cbfb5"): true, - common.HexToHash("0x05111f455be73041dd1473943188d1997821dec929110232be3cd51f6d362f70"): true, - common.HexToHash("0xe8f19bf8ac46ea64e90dbac7878a20891e752e3f8911cd24aa94d7a41716b5f3"): true, - common.HexToHash("0xf369e545f6172cfe1c813d96c8997af33574f660a0052886c3268cb86cd8eb68"): true, - common.HexToHash("0x5cf6340867ef08b4f316d4fc072b99fa143806629a14c58f7765fd75c2623a93"): true, - common.HexToHash("0x9d78c1622ac8ddb03082a7403db1aac6f23f34a2369bc431bff6e09dd41ff7f4"): true, - common.HexToHash("0x4efb46bb9db78c5e6361a7eb80c18165c4150329259ef593000ad1086b57e362"): true, - common.HexToHash("0xfad0a6bae4deb0e8f15e18125fca391dfc6c2785b5b6fd8ed34370188c4416ce"): true, - common.HexToHash("0x659391328c91c5dccd66cb3a19cc7136fae268d3972117de0d4c485a20fd99cb"): true, - common.HexToHash("0xa9894ad66e8c2a8fd7f4e82d6428150d41a673ca45da9a75fe65e5542ef96d11"): true, - common.HexToHash("0x4a4123505c9a4914eb6491cf0db9adac0d12ee6d0d2ea8d85111d8e72d0e887f"): true, - common.HexToHash("0x3a200e16055da3b84e23ac62610f6a77773b295dbfa11bd666a393ed5fabe24e"): true, - common.HexToHash("0x51435891a93a0a087f59831fca9fd2b378e30e568d27a1e346fdb255a5bb3be6"): true, - common.HexToHash("0x7b5b67313abb38f9fec5308f6d58f73d646715aceac405a6613c458e581f3c2f"): true, - common.HexToHash("0x40b17096ab41f28e85ff2f701c6c9e59da10685a74aa06e99866ffedd0d87ffc"): true, - common.HexToHash("0xaba8e5717dd35f085926d1d67f33457bfdc306ce5805d7ea934702287e42ef27"): true, - common.HexToHash("0xcfcf35f40991fa9fc9f39d9d667a5b96ae6ab1644aee0f13d4e4400db93658fc"): true, - common.HexToHash("0xd44388e1fdd4c5954fbffbc7398af75243f307ded4468d981ef1c746d58afaea"): true, - common.HexToHash("0xde455f9134b1d61d30f845bd54840b2e425066298e0b8e8ac44928394e4b7dc5"): true, - common.HexToHash("0x65cee43019287da50aed74002a848c552d2cfd8ddd71e4f91ee7ad10d8c4bf3c"): true, - common.HexToHash("0xffa3222b7139339865fceea19941c89b43f98e1dc20dbfe14e95abf61ec61bbf"): true, - common.HexToHash("0xf79d1c3ba332f91055e9b4e41abad01cbbab02140b6e623ec227a1e643b5079c"): true, - common.HexToHash("0xf0b185f36a482195ab0817c05d345f3b33014e19add263257a22007a616183f8"): true, - common.HexToHash("0x2d56f4ce8063a369e7cdf3edea1dcda56b00599073b53270ad662d35cd05a92d"): true, - common.HexToHash("0xd3e4ac7f624d0490a0a3b05567f4c7cbabff592f61f560c5d220386362fae7b4"): true, - common.HexToHash("0xc0acbf62cc561f533d11680f522afd2af59908a781ab9ef40cfc37074b9510f5"): true, - common.HexToHash("0x5d111d44c2c9eb980a742385bd1cb8c34b313109e9c7502eaa69bc75d4cc512e"): true, - common.HexToHash("0x1e789670f92121f2de8d3e5028417873a9c0185339f355a6812d0ecc24d69d30"): true, - common.HexToHash("0x93ba45c7a018ec926b2cee3540e77cf67a8c4cc042218618c0bd298a2ff4ddd9"): true, - common.HexToHash("0x23067fded6ef04bdec469d3cb5d2445077b5a9bf12e45df61345f87f3b305d89"): true, - common.HexToHash("0x6152b5155184d0dde4ba76fb17d724c31de8a5e6a04bb8033340a1aef5a12910"): true, - common.HexToHash("0x62ba90991047c316cbaacc5fa0b286c735f24e774a470f30f321940fdfa89a65"): true, - common.HexToHash("0xe31483f25c67a20ba6cbf460713ba2bb2fe2bb798e0d014408b3805ed6a1ac4f"): true, - common.HexToHash("0xd1bb3c7f53fee198a8d0979d50a56b86d7588be2ccbd01189be556ded0d570d2"): true, - common.HexToHash("0x154377096b368ecb6135e9b7330c2331add92f0720b6eb09bd1df2546a416f43"): true, - common.HexToHash("0x883d7e392e71dd42fbc504d1135d95f8508c139b75e6c79e4eb9d9d067b9aa71"): true, - common.HexToHash("0x894d9a0c73c6432c66788e20b15cb77842eda03304afab3f0b77cc51cb3e899e"): true, - common.HexToHash("0x824888e3e62f65ebbd911c9cf0a770cc6562f280eeafa9580fc6942537bf26d8"): true, - common.HexToHash("0x944594672a9f0421866cecfbb330069961f404e1a78e99115eb94d192fe252a1"): true, - common.HexToHash("0xda3fb6fa131a0145f0402ed18fce0376928ff9d73a8406655bda8b433ee938fd"): true, - common.HexToHash("0xffedbe8120f9f601f65af06d112a108eb8732cb544f0a6e9460abb8e4e0bbdea"): true, - common.HexToHash("0xc5420cadf3d1b7943cb6d6c79ffcc185a3dd16081a16adf30b0f7af866f9175a"): true, - common.HexToHash("0xe54944f949744e5f2bae13c901bdcf0fcc1c2ba69e70e44fb78e6c918df50c1a"): true, - common.HexToHash("0x6c5691b3f0604ee548c094f97e4aa00e4cbd0016e150b292bf27aadf664ef593"): true, - common.HexToHash("0x37dcd42785c8cff90dee88b4ce657ef40ac320701665e9568396e7a7b51649b2"): true, - common.HexToHash("0x35ba6508babb2b8672ab153b8c8747680cf27b912a7bdec6ec7d4974afefa80e"): true, - common.HexToHash("0xdcdefd08077d5c7105d634b496a74bff1f307622a3a66236ea8eb815e4c62ea2"): true, - common.HexToHash("0xc0126e0e0b5f7bce643cfd1621ff1833aba6419e4b9d759dc3bcd2318f7aab2e"): true, - common.HexToHash("0x0413aa5c117868671aab97ed9a5f6a94a8a5f5ca9f0815975090a5cfc2af8ce8"): true, - common.HexToHash("0x567d6ea6b06a822162ce22eeb16a1a0e59d4669316e2e78cb65bc6ca4de06c7a"): true, - common.HexToHash("0x53707c0e7814c7af4b140dce7fd3032725a78c467a890c32bc2f5c9c4795e8d6"): true, - common.HexToHash("0x9b4d46491341b6f0b0b00124139c3c96cf7623e01cc526e9919525caa77e0bee"): true, - common.HexToHash("0x728e8a28a5aaa40cc2952b34697275c55e764663c742170ab6f0a368892ff00b"): true, - common.HexToHash("0xbedc940e29dc9cd1c8a08d57cc358d116df8e735ae3da0b6ad92023f109f4bfe"): true, - common.HexToHash("0x09b2fe68b4774a773af753937fc83c434287d0c6d14e5af8816b75180cea0df5"): true, - common.HexToHash("0x00c64dcfa28ac5e249b784eb4cba4c30c1bf07974bdd72ada0e0c0687a8d66ee"): true, - common.HexToHash("0x051048d6a9376352c1496bc4b3a7b67aaa3eb33fa67c4e3273df96618cdcdd45"): true, - common.HexToHash("0x1df1568a9ed65ea1677104b1264911a1fb13b9ff94010e6bc711e50e12c9c982"): true, - common.HexToHash("0x12ed644540ea8e781b384ffda2db76fb8804ab345a7a21cbb57cf69d3ab8d291"): true, - common.HexToHash("0x9d2f1527247c40a89ed99c3b895249d1cca7837eb9863b033ff9ed1649fd9da9"): true, - common.HexToHash("0x62582b6e777b006bbfb8e47d71bea94474a4a3b3cfb6761fc10914a501663a8e"): true, - common.HexToHash("0x41763c12963585c72ef4dec631ae17d449a0f115e47aa97f3243c248242558c5"): true, - common.HexToHash("0xc9e85b21f5eaab5f0963fe4b386add9ceed117a8d21cdc27e80d4c839f77dd79"): true, - common.HexToHash("0x1666ba428cd8956f56ea1acdb5867936c919089415d14d160b7441c0bfbe151a"): true, - common.HexToHash("0x2c3aaad54147f6b795092d276d2c0fd0d6a2c87c4c3c287b8d34f05f79d81f15"): true, - common.HexToHash("0xb88c5b5140c7d39e22b0c443c197762cfbc184f6d18cc48ddd9429d9f1859ac5"): true, - common.HexToHash("0x137c51833ef2e732b8f456b2e5bf148c930f36d87cf409020dd2bbc7f4c0ace9"): true, - common.HexToHash("0xeb4b179d67679c02a1fb761765bc94f0d63df8525042f07478661de3d63c05c0"): true, - common.HexToHash("0x0c4e8d28500b20770bcfac9752bc07a3c602e2d3470e74f54f071605a481f61e"): true, - common.HexToHash("0x40e590719cccf96f59d13ae1a195f92caf58ef4ebe7a28b0f2b555e030d0df54"): true, - common.HexToHash("0xa53a2f9dba6e073d252d78fdfd96fcf53753e0f4c4761d0b37fd532f0ed2246d"): true, - common.HexToHash("0x79a080c0455f8ef1b3f6d774c96b06998743f9160d83a4eea422e90c40f3f277"): true, - common.HexToHash("0xe40194401ad5b4c2f38a445143fcf5ad53cb5e1b37fd093909d11db1be2e1a01"): true, - common.HexToHash("0xdd534b47a362adc57ad47558f7057f0f8ca601ee3f6c33aa01a28d46e7870a8b"): true, - common.HexToHash("0xfd77af253100902c7bae7edc7823dc62a237671ce785a8cd7e4ae259ca34d0ac"): true, - common.HexToHash("0x26848e3be6abb1cbb8b8a731e19efd5b549f98dcb414bcafa25225c38b23ccb0"): true, - common.HexToHash("0x7464f6e601299b95d4fd72de5e41d32de2c394244fe8669c6eee48c80e295f07"): true, - common.HexToHash("0xff9818230005e22020de87fdd98cc1196b80844694f61161146f9cbdf60e9bc2"): true, - common.HexToHash("0xab85cf516d371e512596826087b32ea2fdb05a589375664576ca2cc93122dac1"): true, - common.HexToHash("0x3df8ea01c0ff9ff68793dbcd4fd5a5165c4321537240d261a3293b1287df5763"): true, - common.HexToHash("0x8568c88d288dc325b84a122abdd29a00b544731f2cd2f000c4124cfff6ece37f"): true, - common.HexToHash("0x46a64aaa1fb1bd77d0e78e507742045705f24ca2702445f11addcf220140db24"): true, - common.HexToHash("0x076e5753c28a163d6fa343aecc71105b5b0c712e74565b70bc6fbc283d518c1b"): true, - common.HexToHash("0xf5e358d5204639a96b9fa37d237c29b0ed58156ad9b22af911bb67f77b57290b"): true, - common.HexToHash("0x2651a9c3138bc55efd21eaf9c29a434429b8b53451994eab4ba7225441831db1"): true, - common.HexToHash("0x2eff4e095e5906a836898ac409476e05428d8593cbfa5baebd970b96dd440bb0"): true, - common.HexToHash("0x4dcd58d120aa39332e47e5cce2f48793fc57ca70b0a4f1907d576fbf137c0a22"): true, - common.HexToHash("0xb0b2936cd9f9fcdb9e44f27e98a436cf1a71d8a680e2102b5babf798d215548a"): true, - common.HexToHash("0x2d628c65493c4b33c54969e84a2560c2c6b0f6bc07c0a79b1cb30eac93c0ab26"): true, - common.HexToHash("0xc4ae06439c3c7dd434cad7746ee75feca652ec6150d060d16a758610964165e7"): true, - common.HexToHash("0x15340253b133989494602f0e7094a1a84a9e2e4957fb350177300ca2921cb31f"): true, - common.HexToHash("0x9220e4a1ce9da13b2c093b380e3dc914ad3b022224146e5d24e754f5d1f1b098"): true, - common.HexToHash("0xe872699669c1817193cb7e4e31bc99dc4c270661ebe0cca7b29f11588cf58c78"): true, - common.HexToHash("0x0a0718763ec02acc7d8e5adaca5e39d6d460edd5f025c6ab7b4ef61b3c53e466"): true, - common.HexToHash("0x7aff2347ef39f35a7784c33898cb75621338e1ad3c663074bdc9fb2412fef6ca"): true, - common.HexToHash("0x23956bd0e82fa0a8e08ddc41d66ca11b44f56350b1136d1b59e727f1cb1b78a6"): true, - common.HexToHash("0xa6782fe068efe45a45db3f932db66877dec7660ee8f3f784a092a87ea89da7ef"): true, - common.HexToHash("0x3fdfae51b524c2cac5a5c2497c2552867f546dc3161b8964e756ea4442b2dafe"): true, - common.HexToHash("0x0e102e3f2060680210be9aa04ca630d53e9c70d779a5dc20e7f86dd18f955256"): true, - common.HexToHash("0xd1d584163a8566838af02b8ce0e18f6ee0a146d5f778bd303590c4053e262e78"): true, - common.HexToHash("0x615e88f532483b565df3c2991ec94de2a3ac908f8ae64b849b3ca633af0c58a3"): true, - common.HexToHash("0xab2e20efe23c28553b635f0a62a0cef83085538710dccaef2a40a4d6033d0779"): true, - common.HexToHash("0x3604c12f955428f7a7c868f371ddec64ef1b96dc65c4d73c5e0e967c5c4c23b1"): true, - common.HexToHash("0x72e56b514b240725d12766045a0c85430d76aa72186bc9300d26246cfdfcb760"): true, - common.HexToHash("0x2a307a63af6b0d9960012d8316eac525a4ac83636d9d23a87166807c3658b2d0"): true, - common.HexToHash("0xa0364caadef201c4f015d5153f5cfd8155cb3a02e49c325c55537edc361c57f9"): true, - common.HexToHash("0x29ce9b46fe87a96baac16dfe1bb19bb69fd642f8758fb7a1b089a4756883e054"): true, - common.HexToHash("0x5ef8c7c97f29509112aa63aa860ddda0361effd7842c2c61427b7039428a90a6"): true, - common.HexToHash("0x39a8460315360d29f9eac7b4b8010af05db1fd8e793369a9daad56384c879133"): true, - common.HexToHash("0x488356dbd2cae899ef356df1d36962d664d5d94e2330706a341ceaccda674eeb"): true, - common.HexToHash("0xea479312e713c09d6453905dde01ccf94e6868c90dafcdb7da4ba734ebb62321"): true, - common.HexToHash("0x5beacdd6bbc4659345853593e3487e4bbd2bb73db790ea83b0e5a7103eb04d9c"): true, - common.HexToHash("0x860c675171a49a6ee2e13797b10d3981a3b2770f61e12a20d644dd089235c913"): true, - common.HexToHash("0xaf07ff7d2ce60e79df52f3c1250a04e32f295ab0e712766ba62fb95f5370dddb"): true, - common.HexToHash("0x2731676c82e952d0d520a6d3f6e0c9ac10f2ffc146378fd97c2822708dc1d480"): true, - common.HexToHash("0x4717acc97b05b55d447022415246835ad14c926d1f38291f40956a7a2ba43738"): true, - common.HexToHash("0x503aa5e310a690d1b7049aaca7b5a65361b7d4649d08d9f38cc2edf5aa89473b"): true, - common.HexToHash("0x5db8fc54b494f4da76d1b67e469fa4067938790042d8274f978d9af4363e7a2d"): true, - common.HexToHash("0x2535f66f77265a78a41c492c26f7cee94e1f9e1137bbc1ae6594689d7966effc"): true, - common.HexToHash("0x6252b7b64492fd15eba64add48b2f4607ce3c161610caa491fea0386a9194999"): true, - common.HexToHash("0x73455387a23401bb42790356e003a2664bf2d85636f43039e2f3c7b9d4145edc"): true, - common.HexToHash("0xb2f2f4e76b40dbf01276dbb479ed9b63a625fd8946e25f7e4135fce8571be08d"): true, - common.HexToHash("0x4e2589a4d2fe10e1b5157cd91cf6d04e3df41501f827f3c6eb3e9cdfded49073"): true, - common.HexToHash("0x3ddaaf72c57b286dadd0eaa333c280722cc7542bf8234149bc85bdfff59ee2e1"): true, - common.HexToHash("0x55b55e93315334943a755097cbb1bbc854dabfef4b75dd8f534d23be5c9e8ca8"): true, - common.HexToHash("0x44d304e10d76dd49104bd695cf44bc35bdacf15cc08c3efc3001f9929257b460"): true, - common.HexToHash("0x07fa83f2845be2a91f24551d8439b484bfed9733cb0a98a5c741abacc69a0c88"): true, - common.HexToHash("0x2216a7b0f645f9968097f1c7d77d8904b6f38710d2dc32caf406898188bd497b"): true, - common.HexToHash("0x5b7c4d73cc663ad4373f146419bab0ce8f783bbb2cdeb8d68ec1be4da8f357bb"): true, - common.HexToHash("0x875d8d5c5dda3e805d5171ec5f7ccc5b4fe96b9dae945cdc1b02eccd81308b68"): true, - common.HexToHash("0xc7ffda58318d9628ee0f2d4add8894d788088de2f5d463e56c709ed41abf1cc2"): true, - common.HexToHash("0xeadc9a7eea6cc1f84dbe19cf11ee4d34f59e9e4aa5211efc8a813d76ffbc86d4"): true, - common.HexToHash("0x5c7f91c34182f67d03479babf017ab1ab72dada3234c77e5fade8b4796ad0517"): true, - common.HexToHash("0xe75e889bdee4b2e35ea1d65a96d2dfc03758a09a13f6b93c5b6bcb4f5e467e42"): true, - common.HexToHash("0x25b89ecd8f1eb28ec0da1112a66b560c32fe86911c8d146642ab009c8ce0d5b7"): true, - common.HexToHash("0x19a9dbc66afc75d571c9be894fbf557387fa59365166e9f26a4001e05182315b"): true, - common.HexToHash("0xd4ea40169ded166e6a6fecaa36515461aed0d1b90f5d1070baa67946d6ad9daf"): true, - common.HexToHash("0x49d83ce5192daa70421b25373e17235ca80ca3626055d062c2cd2c8f5d530877"): true, - common.HexToHash("0x82c1c2569749008f20bb313f3e869a74333f03526fb81792bd1b36e4416e45aa"): true, - common.HexToHash("0x6dd1b851d2118337453273871ef64cabd2ccc376efad88502ea6f518cb3f91a2"): true, - common.HexToHash("0x79535c74b19caac00521fd5884c24dca0df1864e3f38b49acdfab5756bbdda8e"): true, - common.HexToHash("0xd657dc38f4d3e2d3308f114bf0b91004f6656a716bc3e1d21d7a1d72d680b4b2"): true, - common.HexToHash("0xb16d87a03abcc7c445515221881c40d5762b419ffc7e0681220557878628c167"): true, - common.HexToHash("0x624ae3d4da008f4d5d65c5a946fb2dc134ece88cf8f0bbf957bf293e402c5125"): true, - common.HexToHash("0xf1db67e1b6f5c596b21a559946c8f7e13d6a24b5ed63594756fc4e18bfdaf323"): true, - common.HexToHash("0x4b5604e06b6f66649cd9c9e9f3a43b2608107f5aab48488b5bfe37bc5b611886"): true, - common.HexToHash("0xa3b96863da08d000398d8abab11cbc35f923d10ac47d258024b1ab02883711b6"): true, - common.HexToHash("0x48511da849590834f457e83d1b02485546544a430164cba8b1c61be8e9ac4cdd"): true, - common.HexToHash("0x45a429cc0bb6fefedd4667222450291408a8650579e95977f2f90acd48df8727"): true, - common.HexToHash("0xcd1a725146e594c61ff7aef36c857f68e51c13589a4ddde894adbef52c20b37f"): true, - common.HexToHash("0x0d97d8cb66f9fb5362ffebdfd44219a63853ad026022634369bc3e78761382cd"): true, - common.HexToHash("0x33e5a2ca7f2666e60f66fd51decd919bbe614f53ca51487f125d060bddd0120f"): true, - common.HexToHash("0x53c020baeb6b3803fad756fa83e8e6d7d15fc68fd6f8b1c96f4be8c8bb141b90"): true, - common.HexToHash("0xdedcfa116c82c55429ea428f2e4e4da6d15627b6eaf90a96a750c83bee15b073"): true, - common.HexToHash("0x89ae98ec4c520388e12611adf7a62f538b8bd2d9f0eddc5a7afe0d138ad10a75"): true, - common.HexToHash("0xc98b32d9559094c5472267a109d2124a29bbe73f498df3af4636f55fd9a965ab"): true, - common.HexToHash("0x9c5b66cacbfefd6d8b15368e2f535d7e1f126255b43d6aed619a9b271b203a70"): true, - common.HexToHash("0x1c3331f8d00c5f0234724558e672c02f8b6e37d692099fc6b3bfaf4a30c0e014"): true, - common.HexToHash("0x9ac49d45eba860b00454c5368307fe5e1888f9c78fd7d3c1f2d99e7e09ddb909"): true, - common.HexToHash("0x82aa0b8651f18331e745283707e43a72eeb93a602179219ffb39c12c93e88acc"): true, - common.HexToHash("0x29da36e6d5af3b439d34118f962ad8ba9ac11732dc1a9565d151d2621f397efe"): true, - common.HexToHash("0x729528a68fba7be4002c3cfcc6721b6cda732c9c6f0b66044a1ea4c3fed88c70"): true, - common.HexToHash("0xca8ecd4b7dcaea56ae4c84ae656e4ac292297f74f08fa41109a34df9397fa751"): true, - common.HexToHash("0x3790f64d4b57b998eb413a1b8a28eecd37a869e964a236b86866b4d35839ef38"): true, - common.HexToHash("0x59a1528ebb76765c225088004111e35bf9c741fe7c14ee27f8fb8b59db0ddaba"): true, - common.HexToHash("0x60403c3fde3c145a6f7c15ffafe12c9627ce00540cbaa27d2e3aea022af724b8"): true, - common.HexToHash("0x07e40e811d8710e65534b24332c22a0aeeda487e2484efd37cf5339734039dca"): true, - common.HexToHash("0xabd732e8f340596bb3155b577f8f9a961d30ad4a6deb368bcbc96672c1779f34"): true, - common.HexToHash("0x65e56a4c70c062000d46661dbb4e593f577deec43a9a0029a81f9ab87803d350"): true, - common.HexToHash("0x0d1d85521e469d49b37563bf47fd2ccac9a4aa02179fda136034701fd9ea887c"): true, - common.HexToHash("0xe92c7e4c40af23ffceffc04d4facdf4e6c610e16843e42a68719cbde96dbb0fb"): true, - common.HexToHash("0x4cdf85eefcebb4587ad1463774e183a2c83eebe9a98318da0339932cdf85dce4"): true, - common.HexToHash("0x0b51db903635bd88ce73e1532fa2d463a095c72a249a0d52529951b0b0a96697"): true, - common.HexToHash("0x06bfa550ee11e87782efe97831e15e7dbe6973442670b0650e196da1943d3f43"): true, - common.HexToHash("0xa65d0fae836b96d58f3a13f4895f754d71794b89b29bba219b69ecf083b44e5f"): true, - common.HexToHash("0xbd795d214ef6246698219e8e972ef1cf52002eebbb1ea38907b47bcf640b0518"): true, - common.HexToHash("0xa1961dbb210334bd99e3d6f01c4d76162883ceae9bd01b28d9c5e79dabfb835f"): true, - common.HexToHash("0x860e3bf7d993f0d1413f966297797b77fa74a01df25ef972d072b5faaacb3627"): true, - common.HexToHash("0x363f989b1ed763a74255718f192ad8fd47cc7bed2b7355730b96eab4b247b329"): true, - common.HexToHash("0xb3a4f1c3a3d97355633a380665cb9305e3a144a63b193001ef6ddcd7392b8c6e"): true, - common.HexToHash("0x9fdee3700c90d5e2763505ebbc557090f208ad92d3d513d7ece0d8ac526ead02"): true, - common.HexToHash("0x4b352601e630b211fa6db9beac955497bf3899ac39989c753f8ccbe02eff059a"): true, - common.HexToHash("0x4472e73916bc6f9de4991015f032be061f1718bf96e79d88d6ee8a1225bb3fae"): true, - common.HexToHash("0x53be955835b2e36d8a33c31985779d9fce5da711eb4dd541d0cc6a03c6c83e10"): true, - common.HexToHash("0x21dbe86ecad560dff204b4d4ac49e97a3f6b8e511f5d089d4ede7278a020e939"): true, - common.HexToHash("0xa46b38431988522aa10889bdf47b8104e67d731216d4c4edbb394aebc8cc0445"): true, - common.HexToHash("0x5e27e440efab57f6d5b0dd617186280395b1ac4b006d2f470b43af83ffc25abb"): true, - common.HexToHash("0x029af43197758c599cbedbed50b7144f574379253aaea3fbe1afc4f6aaf02c0e"): true, - common.HexToHash("0x74700ae5467765d5ce96daaa3680b9a74862fd1629fc154ace9626ba9532500a"): true, - common.HexToHash("0x46ab003a298a25d9a4e994e1b0d879d9e4f020abae408998b0eee9063315b20c"): true, - common.HexToHash("0xd67d7188ddc422000ae01644a5d3b1dfbfc884ddafff71751bc3fe225873ce2f"): true, - common.HexToHash("0xb407b136e33212a01fbeb448899948e349c9880b6626e158938243cc1f011df0"): true, - common.HexToHash("0x833c9f60276d9a1a4e28c10079dec24c6a61473d1ff27da3145b40ebef30025c"): true, - common.HexToHash("0x1f167ff3f5d4448fb63a69a04e273615438de57a561137839c0edc3e5613ed64"): true, - common.HexToHash("0x3ddf20e93bfaf7f22c209e5b4a05d4d0a470b5f5628db4ee76a8a6bc80c05dec"): true, - common.HexToHash("0x11afdc33e4b485ddb6af22af61be22ebf41493826679bf5114c92163a4332af3"): true, - common.HexToHash("0x87a58361e459e317484be38f4e8c88474ebacc7da7cc92b25a0932e4b3d8584e"): true, - common.HexToHash("0x7c9eba87867725a3988f18acd36fdd9702c07d8d41132a9b3fef55bd1605c114"): true, - common.HexToHash("0x091a9659cb1826c9bb9a8ea02599ec0934e111c74da8a0181b938ca03ea0b01b"): true, - common.HexToHash("0xbb773e602cb41fd09a47856589e930bb3ed74a11d54272b8e56b95b69e85d247"): true, - common.HexToHash("0x5d5314a8cc8ec9a691ab454184573bfdd62029b45059228111fbcbd1e30da16d"): true, - common.HexToHash("0xf75ec8fa8d6eec8997f0a4d032f9d2a57c69d65a453317d3b1177bec525df027"): true, - common.HexToHash("0x1ffee440727bb523011f17cae7fe9ca28d14976717101650568f20b4f1b2d074"): true, - common.HexToHash("0xc0a8d3ef7245d4bb4a241abe996f0ada3bd3f31501e94501b7bf9e9363becaf7"): true, - common.HexToHash("0x352353de72fc57c5740ab1b90603c92d3fc1a3f6eb932239a87a55121c1de518"): true, - common.HexToHash("0xaacd06cc8ec9d05aed899e62611decaf67d55017789410aa49698fff3cf2b0a2"): true, - common.HexToHash("0x1844af4b7d138b9b36d8c5e8136d219e8e244a67bba9928a4090b6affc1737e5"): true, - common.HexToHash("0x52a4b86193e325df6025c889135731d2673932030cb847e93b88f41eb0745341"): true, - common.HexToHash("0xcd25ef035674859db27f06b491a65b73b0c65357e0a46b0469515e86fb85c5b8"): true, - common.HexToHash("0x7b835ed274f0f9ec5637d7fdb946a099570ec81f27697846791aaa5fc94c1d39"): true, - common.HexToHash("0xf92a8407f9348573ec4ec0509030d1b15c985b5ccf6b5997bece92f252773e1e"): true, - common.HexToHash("0x425c00891a7b06fafea3c2c86f46c7064ca386215d0be6fdd89324bb62de7746"): true, - common.HexToHash("0x8dc9c32d0d6aa695ff33007e3047e48a840d015fe58b64513ab4aa2d254c3741"): true, - common.HexToHash("0x5aa92b43dcace612da5d1e9c3d3151bdeed3aa64d94bc4592d4819ddfb156c89"): true, - common.HexToHash("0x7e189010e8437eaccac5377e67fca173db423ff026bed9de2320ee74d4719151"): true, - common.HexToHash("0x2cf981be3f18d5e09c653de3f9599afbe8ed5f28cf0fd8acb55075d15e01e92d"): true, - common.HexToHash("0xbb8e8ceb703627f507471c784749b09f5d39d416e2abdcab4b07f8b142e21bea"): true, - common.HexToHash("0x92ee7c9818d6b1e8c02d93539b0593a989a2ddc1d145f86e2a72690a3f16b9e3"): true, - common.HexToHash("0x85d8d1e1d516d630504da4a448aff4eb6fe1f58d2c6695887754f95202df57a2"): true, - common.HexToHash("0x4c8709639eba670c0e3372102dd1c05f2e3a5f1d2533e265360728e21c351978"): true, - common.HexToHash("0xdaf185d386d717171ec019c60dab7e99aed4f1fdac1c77fa5dae502d6ec14dcd"): true, - common.HexToHash("0x68ce2ce2f20b401a1c782ace4d4edf1518b1765da5362a6a5727565534361ccc"): true, - common.HexToHash("0xc47ae2f87ada2af975a2e523dd275c18ab70a315e87a150deae9292f7bc741b2"): true, - common.HexToHash("0x2d5cd019bac839bbed3aee067a9bc5650c698376aacda67f91a3067088292ad6"): true, - common.HexToHash("0x814da135223e86d1da38fcdbad80b9a474629f7bdfa189a75c094ed8ab116e98"): true, - common.HexToHash("0xe0d0aa4814612dbd1211d34014d270f2e12e629c7c6ee4f4ee28e9c64586ea1f"): true, - common.HexToHash("0x49c18731ddadd15dac5e6015879828d0ed28edc1abceaba1eddd20661c2b4b20"): true, - common.HexToHash("0x1847c1322266a2b77c077f43d96bb2d055809b7f497b6812eb3b18701e97f0d7"): true, - common.HexToHash("0x7d6fe3a8322b9a0a1beac702a8492480d4230450a3c78a37c21650bdac78be2e"): true, - common.HexToHash("0x6103ff146de2723949f15d186b83e3fbab0e04e3965254a3b6d92807251b20fd"): true, - common.HexToHash("0xcb824e1656373791e72df5f6683f84fbf195b89fe3835e2d7c3d7df30a248fe4"): true, - common.HexToHash("0x61a77402a00414dccbd2422d8d91851183aa12d4d6d87a2a5be374acfb47f10f"): true, - common.HexToHash("0x230b17eec3ca6be69210cac8492615ab3d6a9ad8be8210e0877d6e68a461f66b"): true, - common.HexToHash("0x5687dd2c3089f9f9f8f797a54a82ae08f51617af44234a9676badf55d20272b4"): true, - common.HexToHash("0xa40b74c35d4d4067439d41a24a41ad738be7e5b8c2914273c1e879a7e4f3fd03"): true, - common.HexToHash("0x2ab2d76c24b1accc1d27ad1a2389a4805fb22fa13e7d27a4ff24c456bc620094"): true, - common.HexToHash("0x8c61f762e320a63906e33fd08c904134e36395954b3a604c044117fd6fca75e4"): true, - common.HexToHash("0x55b69a7d3bd49dd2b82203f5c0b12861768f689531565680ba0f33c9cf1a5d48"): true, - common.HexToHash("0xb925816cea4c0183753aeaf84c4c4ece096b61d6f05d670764a46e6fb7a4e772"): true, - common.HexToHash("0x04125e7800dfacb6beeba82a5601bf928fcdaa71dec3aba25077a1a8789af7f2"): true, - common.HexToHash("0x5cb86c5b9ad134bf87b26d6668e477c5cd9031b870afbb406c94d44875a63b41"): true, - common.HexToHash("0x947c62eaec96635c6412efb4d0ed4958329a5b5cf3d197b378253e4ebddbccd3"): true, - common.HexToHash("0xec6cc34813c651a27e82cb6ef20c698484d4d29cf8a2503db5fa620cec52b367"): true, - common.HexToHash("0x5826b1d4bcf7d2dc3875e36d5cfa7a818a353b383282c3f64b3e94614bd15303"): true, - common.HexToHash("0xf6dd665b2d7ab4a29f2e87929e3553e8a83e5fd33d7d2ff59fb3d530d2bcbf53"): true, - common.HexToHash("0xf5f55e2e043ae3885c61f35da23bedeaba11cd5de1d7fa13995c3c1b37e15a3d"): true, - common.HexToHash("0x60c5ef9969d50cd549a91d27a61f90d4d98beb6972abc0f87429dc7d74d46ba8"): true, - common.HexToHash("0x6a049758040e3f75f58470103f551e89a8a49c51917bd52487add8cbe1602dba"): true, - common.HexToHash("0x44575bbcbe2290bc1a3d8874f9895a4bcb8a0277ed9b0447fd553ba438f0b6e2"): true, - common.HexToHash("0xa78b0a382f9740cecb620924555bdc72643991d3a6214a66e694c2a91b80e75b"): true, - common.HexToHash("0x9e68afb61a2ce1f88767c12af638336d553fc37aa3dc122fa6db1f0d90f1f698"): true, - common.HexToHash("0x06a1a7675e4eb8129cdc2a5330d32dab50b04b61310817ed916e8a4d2a929a1e"): true, - common.HexToHash("0xd4cc35e491a7a15477fdddf05bd81a1485129bb0fba74085f6149cbaad97f840"): true, - common.HexToHash("0x1a49d2b25b231a90dc99be7b193b85ea26d04963bd00bdfcb9e5ceaa05873b85"): true, - common.HexToHash("0x6b2143973922204d9654dbc73d47a27cb77c029185e6d5b6a929fded8360e9a1"): true, - common.HexToHash("0x6e546149df48c5da31d640834c0c66f9ace688605ff04395ba99fcae0d944703"): true, - common.HexToHash("0x88fc59fb856187c6bb8fb67b8ece018845826ef313716eabe91890658d141436"): true, - common.HexToHash("0xcdd561c6657e279ab7e71c9851b8d7019b2aea9320c41d74bc8572db4bee934f"): true, - common.HexToHash("0x49cb4df1368b441496c578e9dc370a36aeac0dabfcb7a6fb00d2bf3655eafc03"): true, - common.HexToHash("0xe298780df0f7b099657d37e38aecc02bcd2509c98bc9682adee775dd5ebca4be"): true, - common.HexToHash("0x2c7e17357377c6a188ad688d9034c50db4593cef1e38d9ccd3e2c9348d04b6c0"): true, - common.HexToHash("0x113670b2cf17d8e7821aaf72452dd38a226f6778e876215d8c18165fe131ca6b"): true, - common.HexToHash("0xdac7201223c6ebb9399a265b1c65deea2258a63db5cdc80279c93b3d404e13c9"): true, - common.HexToHash("0x456c64215a7063a800029a019a954cd4c297ea0df99503393be238b6a1efab2b"): true, - common.HexToHash("0xe924eff0c3b3659773c4ab8b14bbf730a4031900220f22d387229311c3b231cf"): true, - common.HexToHash("0x6e8140c7253a45d38fc4e4400ddde0ea6e7a944501be5d340f7a5d431dc6e638"): true, - common.HexToHash("0xd99b03d736ab213eed1f2ce10aa4ac873fb15a1a27e9ed56b6eb0ab71f643c86"): true, - common.HexToHash("0xc6a9a8feaa2014440e4646b9f001732e67b15ad8d2ce79c57ec36e4d7fb87482"): true, - common.HexToHash("0x67a2737dbce0ab55e62bd61874901f9bcdb67d8d425e0cb540f31b6362e8074b"): true, - common.HexToHash("0x34c78febe14fdcf3f4cba00186cd0cccada3250b47ebe6a67da0641fd044e5be"): true, - common.HexToHash("0x6a064959b550df9f34bde76e7c2b74d773afe70b8bad1f5af2f19e2363e797c0"): true, - common.HexToHash("0x08402e0cf77812cb0bb40a3577d12feec5b7ceaed3455011be133633f03616f8"): true, - common.HexToHash("0x0ec057651e8978c710f9bd74ac890cac881aecae9ff3fb70cede241cd6a3db13"): true, - common.HexToHash("0x0e8ce95f5b7cc5325e14c2587d8c7c496c61979365d3feeacd483c3b7d96ed86"): true, - common.HexToHash("0xcab05566c776ebf02491ce8fb1d0f3e14ba8da123b7db5d18fb8d4e92fb45fe9"): true, - common.HexToHash("0x2d8262194b1fecdc7bdbf7cdb59da261864136503f750840520c05929d4bf260"): true, - common.HexToHash("0x68ccfffd87974ceb7d55f4146a272349e4afa3d139d44b92cd46ebe2d477010d"): true, - common.HexToHash("0x8e9e3d3f05870c84c91656f3a985f7a451cfc7a02d69d81cee317f9b2b57934d"): true, - common.HexToHash("0xfd3a6a2d43bf8c9d7bc948bbeb75be696bd3ab13b3e5e62a7935edd1643a18b2"): true, - common.HexToHash("0x0bfc3223f899686bb9b91050446c8a2a966cb074e464d92e92979e0288f0408f"): true, - common.HexToHash("0x7cb95f1e4c190602c5fd966e65c8e1ce6386fc4e85ac45095ec8ddee994ca21a"): true, - common.HexToHash("0x13670aea7703404488960e1842f59df74304ea26a6ed5c051aee966b334ff2fe"): true, - common.HexToHash("0xe28d3374d1f193c68cb3da9e9b78c508dd09126d6be50132b617cabb042ffb7b"): true, - common.HexToHash("0x327e5e75d6d612d27a4ce3a32fcf409d6d1ecd39dfabae723663d86affef7670"): true, - common.HexToHash("0x5fe9be410b4b128a8bd0f6e95dbda7c725cb846e1cb25e1d1caf100ad1a90450"): true, - common.HexToHash("0x47d466c46bfc8e7cbf70160a3cef7dcd2a577e308d2b16f3fa5d4c88aa16e40e"): true, - common.HexToHash("0x97e38332bc933716d02aacb9d924f7f9678b8f75c140814cddc22ec87570f226"): true, - common.HexToHash("0xbfd1a1e42a02d248608f3852b01a7cbdbb87a4c86db6100770c13df525ad1d05"): true, - common.HexToHash("0x2b13d3afb5a4e2a5fb400313ea77cf2e94495e0d543b3e3404f827f027be891b"): true, - common.HexToHash("0x84ec3a2420e07a7d7db771a88fc4e5013a6bfbe9fdab3a9d846bf413621da0ba"): true, - common.HexToHash("0xc5b0f2ab91a2f2dcd5fe60074fa5246a46c580eb7c05a20647619aac48355a06"): true, - common.HexToHash("0xd35148c4e6ea2ea0e057c75a92f71d5725f27623a1b163ce766a903c562360db"): true, - common.HexToHash("0xd5bd9f1ef80ac4f0e5cab4c5076860045b5a523ac33a8a6416036d04f83ee55b"): true, - common.HexToHash("0xa8a6f62eeb2b82771047339bb0b89a8cfdb160bfe645a7ec5ef2e818b35bc9d6"): true, - common.HexToHash("0xf9587feb9235d1f1c52092e6c8a67d038212ad235a7411fb0e76919ffd44a903"): true, - common.HexToHash("0x91b1fdb9191925719335648b575fbad1d303e6acd18b52b15a9dc539388afd09"): true, - common.HexToHash("0xd01d43d23983f609951159932dd926a62f183524a8f5e0947262caca4313912c"): true, - common.HexToHash("0x667c854ab53260633f761a7ccbc2f97d53dba0223db8a7667d0e11f3764dca96"): true, - common.HexToHash("0xd5541e8c7cae08791f8ff571c09eed75618a84c61c63883c8c0380fadddf2e06"): true, - common.HexToHash("0x3f9e742fec9262c5039a615991f4da42d913aec1c31763e6671a969c11fe2296"): true, - common.HexToHash("0x5506e963f41b41e2bae3b45922e98f2a139f776a1610d81f837d8230186f1853"): true, - common.HexToHash("0xb417f87e13a6b3252c6589b4f02be32fe5ce26fe1c33192402bd8e934e352639"): true, - common.HexToHash("0x659b4d596b16a85bcdc40812c191b2e652c7bf289c33d63638da88437b3cd8fd"): true, - common.HexToHash("0xe1ae464974b481593f50dba2e2a35afad47b8cd5c07da6fdea55dd5003556e7a"): true, - common.HexToHash("0x5b7302e8f92ba707f856af4520d68438fb9437460b5a15a9523272acf3f24acf"): true, - common.HexToHash("0x872b5fc3ea580baab3cec8957fd2e07295c5a34d79a77fe4ce2a262401b29947"): true, - common.HexToHash("0x99f5acb18a60a1e23f099e1fab00053e850146c34680dd57319f8581ef9a2db4"): true, - common.HexToHash("0xe9e75f9832c9d5530f2c5f8022a868b3a9b386ec2e917939c77ffb56ab1d14b4"): true, - common.HexToHash("0x36ac706f045963fc93a898c646cb6e67372533ab108f06861acee1e4e606074f"): true, - common.HexToHash("0x08877a9e930848241857958653517d71f1ae121a1fd2b59ff055d715bcceb1c9"): true, - common.HexToHash("0xa13635d1cf7a26c15198c884aedd125491ce7fa6794940b93cc85ce7c8d5e20b"): true, - common.HexToHash("0xf34410395575d0ec748c6e934d674e500721a93ec9e967bc72008a746a155f64"): true, - common.HexToHash("0x89717a8f111d50c9387a7f8ee552096fac737d650801cd8cfbf25ea13c3fc273"): true, - common.HexToHash("0x0c45bccde9a1d9c101055c597f98610f621522995b2ca986307aeb03866472c4"): true, - common.HexToHash("0x6181e521e11e5d369bd00af51d0fc9ee4ca21208555c4684d22ecfd78c27c32f"): true, - common.HexToHash("0x6914df76134c5df58f7809ee1c2afaaa4a436eafc0734991d56c87027bc33b38"): true, - common.HexToHash("0xaeafb7fe8dc1d3392d3459b508be1638b84ea5ba24957f2238337631c6709b73"): true, - common.HexToHash("0x15a11bffb51552682d3efbbd05793d40da1c3f8236d05f1fdd3ad1aa73bc4982"): true, - common.HexToHash("0xec2aa8546a598ed9607c666f7c1e3eaef1c6cff26e3fff38e0cea4014f283eac"): true, - common.HexToHash("0x30a48897f539c4a1fbf16a3240643683c1427755c7e7e5689590e8831c5c8246"): true, - common.HexToHash("0xd23a8e2bce83d3a070ba2be1e9ad2afc030f8447bbb9ee68a15b7c58e485a45d"): true, - common.HexToHash("0xa0b60ba459cbf2a49a6079514b46218ce550591daffab8924daf91865ffdc44f"): true, - common.HexToHash("0x70cd633806e01a6793c60cb163b1a4d1f8334319e9da5f89a289802ee1acefe6"): true, - common.HexToHash("0x592f267326e766d44f903a37d2711a96e0c86bd6f921405667be827e2f07daf1"): true, - common.HexToHash("0x65c22b1b7c7955c03e8a291f27d6d1bca8d9d7f61a3923cf52e6d5887670557e"): true, - common.HexToHash("0xbad2c93f6b0ea84c2e707ae1cd135e3c34ca29ffd39e4b31752f3b4883ed11ee"): true, - common.HexToHash("0x5611184e7317a4f7542d366333fe5a41a70653e8ab40997430d52416c881417e"): true, - common.HexToHash("0xa82353e065f1b1296338d7adac9c99305cf0defe7007b9fc15b4efa79d32efc8"): true, - common.HexToHash("0x15332169a9c9ed64c85ba7cbe59f0c4f67cd982eec3b987d806399eb5f084ce2"): true, - common.HexToHash("0x366d7cd9edc1b8d79aa69f22b52adffbb9e6f20f971bf7be788aeaeda88744b3"): true, - common.HexToHash("0xcd08770254d22a26d23860d7bac9505b4bd867018e87764148e12ddf1bc10bdc"): true, - common.HexToHash("0x67d60283f9410d74476b7e6e51c22e6706d14c69c0119fbcd17024ecec01d3f5"): true, - common.HexToHash("0x3ebd72275968d6f283f12ade1c83122ae546ed5ab419b86b05fbb27646f08c44"): true, - common.HexToHash("0x833b5d9b96e0191b37cf20445d7bf93b33de0f224ee2d9691afaec934a769980"): true, - common.HexToHash("0x86dd4ec15fdf4621c7b1b4b06fa3f7dd80a8aaf16babb9f20cdccff7c4d627c3"): true, - common.HexToHash("0x053ea2a73caf9a9b1f951fe164b10bc4d0f4cc37560a58467e6cf257b4beffc6"): true, - common.HexToHash("0xb3bd5a494fa445515fd28dc96d4c9a16ace99dc53243f4f282c74a1414242689"): true, - common.HexToHash("0xb4253af6ac9a630dbda8fd53594710c4028d1d4ab50961b151607130d2966dab"): true, - common.HexToHash("0x833d79b3ce1a5e22ab61b3000473c4b348cc86c4ad47701fd00aa93998c88206"): true, - common.HexToHash("0xf15c2197f6fab1157bde8491959f53bd90f5437afff4c9509d2567ffb5f95590"): true, - common.HexToHash("0x8f6efd73767dc84451c8dfa43aa54a7fea3ed30b342ff65d0eef1441fe6948e7"): true, - common.HexToHash("0x7ee89282535e13e62486f6f8449877a9411c847cd467134f3b0990c4bf462070"): true, - common.HexToHash("0x15aea7865fd290dec991e0e3aceb80cc023233dc376ebcc654c5cdbdea26bbeb"): true, - common.HexToHash("0x6c4981f2b1c317e44c6861bf7ad93312359911ee0a1a90f1055c7d719b52099c"): true, - common.HexToHash("0xc4675053ad7137cae7137605ab0ab66129ca1699fc2be6577f6d607cec343dd8"): true, - common.HexToHash("0x4dfa439943f66f9e4ad9c94bb180e606975497f813128a99780dfd4da0daf9ab"): true, - common.HexToHash("0x653332fa082b574419db1abffb25f3e516b8bfb8a4548648dfb9c053982cfa17"): true, - common.HexToHash("0xcd185482f496e949021476f9f09826393feca24ce90f3954d103078c2fdc4607"): true, - common.HexToHash("0xf126fe94d66b892a83ba8304c9111f3b0f267d7599db881db91892d185e5cce7"): true, - common.HexToHash("0xba96691d71f154cd1564b2eea3fa374cc239b6e7c587159dcc8290b774bd789f"): true, - common.HexToHash("0x2fe8f3b2c824747bc0b0ac6e7148202a877b911e210ac9caefbdd8844697f078"): true, - common.HexToHash("0xa48c8852e1eb4c57ce1bf0ccb0af04deef2fe3671e1bf8a877adc3bc3b646979"): true, - common.HexToHash("0x5ef3253244d58b496a071e94d2bec87d20dc9ae535d66636bf89fb9e6e4e3a5d"): true, - common.HexToHash("0xb20aed4b7f17222f69bbe241643ea97b399f5dceea52e144ca7bf7e2a3cb6a8a"): true, - common.HexToHash("0x3d2e314b334a3ac614838fbdc6a9dc0d3f6e14b4657c8f958b576879e3be08fe"): true, - common.HexToHash("0xef99d845a0b260c900eae51d2d23062b5d323468887b8bfeb2f810d24014860c"): true, - common.HexToHash("0xfb3e572cc96bed008b64dbe1c30756834efbabed6ec1f2e3c32cf2ba66bbf0fb"): true, - common.HexToHash("0xb0c9be3a3e2a5f1805506d7fd40619f48dd1ca82606f9514d21439c9cc6fc3e1"): true, - common.HexToHash("0x9995e2095d5e6801b6502d871f416e6dc301f2b814415d85f7e24c5d25fa09c8"): true, - common.HexToHash("0xab8b4059b65b5cfcaf4df57cf04bebee0f73965ea4e9a56a6bcaee4cec06e303"): true, - common.HexToHash("0x398320d8ecc57f11451c8f589d25dfc97e74b03b2fcdedd1c2ed953913bab3af"): true, - common.HexToHash("0x44344e656763eebff2c854168c102fb897c36e95dff727174539e834b407ee1e"): true, - common.HexToHash("0x483bdcbf02d29feb5925172a6b552828746e293a19d23493d15415daa5bb5f50"): true, - common.HexToHash("0x005f8d31141d63ba75e3ced268fc96bdc4ebe6261ad29c513c2e2a17adcd3099"): true, - common.HexToHash("0xc25c14679ae8fca4b191bc308a1364d7d5745c408fec657b773d04b8dc6bcf69"): true, - common.HexToHash("0x718f06415f030bc6b4d9c5482586448a22fc84fe52867823b24678822dff09ed"): true, - common.HexToHash("0xf02495ca72d54d8ced0e1e4c2573bb00d443e2ffa1149350e870542796f13bbe"): true, - common.HexToHash("0xec8f4f0b8540deeea913a1047a51c9585757a02d99bfb005d5b164048e0b1130"): true, - common.HexToHash("0xa0af7e22828c902892504dab7720f6fcf2cae3ecfa7c316dd63789e4950ad4b8"): true, - common.HexToHash("0x15acfe68f268205265c36feae60eb3023ab6a9f1806939cf1cca9096f5ec8b00"): true, - common.HexToHash("0x20b9c5096258fc86ae61f811a106899f6f75792cd13111ca54e31da98b3e05d8"): true, - common.HexToHash("0x1f58ab1a26052c72fdf69ca93c1fcead4e1f34869ef15e76ae3b94ba55eec643"): true, - common.HexToHash("0xbc983657435f118e164b5e59a3920fe980c1364918451066a39c7005f6189065"): true, - common.HexToHash("0x203e34a745852e630cda993556098f2aec1bcdbe3a9b18cfc7aec05d7c8adb47"): true, - common.HexToHash("0xa7af52329fb12f238c75907031f1be872b36c74b86edefbb4a140442f376a61d"): true, - common.HexToHash("0xea3a1f7c4dfaa92a9ff70546f46d198f8dc1dd44fbe962e8d6ac3f1648a0a8d1"): true, - common.HexToHash("0xb77cbc6bc1f637dc810a90965712c5ac29e305d64faa342a317ee73db627a7f2"): true, - common.HexToHash("0xad760d229686c58c97cb35c9f66027cedea954f2c80e2876aa61526c4dcbf87c"): true, - common.HexToHash("0x59e78963f11179572ff134797ab420a8538c68db8b01a147e8b0cede249ddcd7"): true, - common.HexToHash("0x31f9fe3d1419eb059c0e35690c866dc154de85547c701bf44d2d7c2c84573b23"): true, - common.HexToHash("0xd6b606dcd4e29a60416ae417dbd0fd3c9161f8adee815f707f7868f6734e9081"): true, - common.HexToHash("0x45064c301f7250330d237572fd3962b71b6ef3bf4e469b957a249df15a99a32a"): true, - common.HexToHash("0xfcff439e01c2cf2c93d5c0cb549234029a65d3c6bba27ae250a76bab60429920"): true, - common.HexToHash("0x933274456ed2be6602ca13947a99765eed2f091ff8cb238f787afd4b7e23f251"): true, - common.HexToHash("0x20a84c670dbeb11dab962c6fd48540ec149465fed6e762dc408f3eed3635b3cd"): true, - common.HexToHash("0xf00cefb5cad07d9b7f257ba89ab06c9d2001f32003b2556aec9a3ad4d95a57f6"): true, - common.HexToHash("0x2e97bbcdae73382a2c6112f5c8806f251fae25ae3ef168e350b7533cc2c35349"): true, - common.HexToHash("0x8d3b0378d2737ebb7f35001b8cad52fff7119f02d14c30657c7a6c0b0bea9e18"): true, - common.HexToHash("0xf5a799ea020e41f83e6fd247ca3f1c9eed569198eb4bdf4e55a41f8abd0828bf"): true, - common.HexToHash("0x62acb240816ff011576887ac817a4b426c14411df803660dd857fad092729493"): true, - common.HexToHash("0x305caa07f251babae55f070d8bd4e05cf2d4b562c22bcd8fd87392e198d013c5"): true, - common.HexToHash("0x00bafee82daa443033c8dacfc341f2ea22ebfc81373cab2506a5c72603db8c89"): true, - common.HexToHash("0x893964e67f862e82aa8ae4a6f9a2d1a384cbb1c6e0eeb8583d39feafd8feeda2"): true, - common.HexToHash("0xd57fe1d0288d33c6094703e466865262668cc4a77eb97002fca9d4af852bd826"): true, - common.HexToHash("0xb52431ace4be9d3e2a5a8d5647671888b61689e46ccda71fadde15558795618d"): true, - common.HexToHash("0x542e56ae6d0615e86aa3bf52ab8787b66a40e21826b391ab2e0c671d4d01da70"): true, - common.HexToHash("0x647de671eef2af259e0c7d43f5304f8b3baf6daf20e2a33db140f11bae9afbd8"): true, - common.HexToHash("0xbacf730a7d763ed63a5cd95617cc005b986b6cd1bec3f1a27247027545f74003"): true, - common.HexToHash("0x2a9a74590b968f1c55b0456eff4bc3fd4fc195eea9d461912dc48ed69424a390"): true, - common.HexToHash("0x609a9bf275d1a6783d74a7bd37888b157e81641740ccd77cdad826ac2724b8cc"): true, - common.HexToHash("0x4443ec56d1616bc4c8b74605cf2b677d3bb2ddf2a0b4e3d9c70136befa92db04"): true, - common.HexToHash("0x9224ccf0843ef458a6fe960486cf04cbce1492eb3f17c3b5ffdbb8d090353782"): true, - common.HexToHash("0xda9cd19a9e9473391abf8ca4f049a42b3d7f6813a4be863057b0480d42d99c01"): true, - common.HexToHash("0x47c6e7d67543f1dfb7eb3ac9fde6ab4af446756c841c702bb3673d96bc39a354"): true, - common.HexToHash("0xdc04f6f9efdf37860ae647b1d5096c29ab67a62e8010dd2c2603411ddc9e1821"): true, - common.HexToHash("0xae1cca9682e73ad416b5cd5bcb45fcd682ede7fb2b2c81236097b0d6f79d1802"): true, - common.HexToHash("0x8b4dfd20f85948e67c4cde5aae519dd4ce0689ee4e6be494b8c5482f77e63fa7"): true, - common.HexToHash("0x44b516e2bcffc6a0c899bd686143faaded252e80ee6b6ddeb8af804c12299e54"): true, - common.HexToHash("0x4c90eb9c887b404c6bc354386fe0feceb05edd7a249d23aac4d1953bcf0c31d8"): true, - common.HexToHash("0x4deaca93db9032737f16bdad4f3c4992f1a441d4ac78bfccdc028a875ffcae27"): true, - common.HexToHash("0x9eba1a07086362fd2776f3dd069ae8c695a806590fd175e3da01d9cb3932e59e"): true, - common.HexToHash("0x06a95f88584ad268135bd9996ccbe81dd986f42d3e97e02ad94953945db0e71c"): true, - common.HexToHash("0xe61a94b40072c9cf73fec6c93684de558e8a98a7c34deec1938f1fb6ef16170d"): true, - common.HexToHash("0x9277d1c291afdf5723c8a971eee10c008f15213e5a5153f33bb61ffc7db954f4"): true, - common.HexToHash("0x24fcee5fb59601dbb25fed1364edeeda3e43ea5fdccb6ab6c2b6d426b3da9952"): true, - common.HexToHash("0x2b608198905e3fae25444572d4f7854963bd9d5e80b825b5468947d81b484211"): true, - common.HexToHash("0x552cda670c0434531ba02efe0d54bd17ea68bd0635a5713d7c91c271567a3a42"): true, - common.HexToHash("0xcf8eb7673e40cec55b45be736532a347bce4f9869bda2706874fd8d1935b38f8"): true, - common.HexToHash("0xeabb141155fc720c526e835bc344333643291a9bbaaacca9fc6796015ddf10c5"): true, - common.HexToHash("0x02ab97ce9d6f019c9686b76a0042a6dd657eb78cf6c8a1a12293836c3d2e3178"): true, - common.HexToHash("0x106d5de1d546bcb47b7f9f59960abf466cdfec065a9c76655fc740c05c5ee2bb"): true, - common.HexToHash("0xfa597d0cdf99e20069a205b31c2eb950e8461f91973f970e32ff95d5486f9ec0"): true, - common.HexToHash("0x40d7af367be88d00edb4bb69b20599fc09f8ed4911210d0925bcb032eba772dd"): true, - common.HexToHash("0x2163315e44e5f4da87bcc287ca6180441acee57b1b31edd5350a398d429cb56b"): true, - common.HexToHash("0x44287f64d422a25139cb13eb8ffd993582dd056db84849ee9e4fd58ae0146902"): true, - common.HexToHash("0xb5595965ac81eb4a8092f41c6ca10b98cafae652f13cd0486cdaa2915ddbc662"): true, - common.HexToHash("0x1f57bcecb96ed2b413d4c7b7e8720d4d8be6add619998cba758b210b09445024"): true, - common.HexToHash("0xb24d3f388df75af286cd4d39ff8b75e44fbe1e201ccef66eabfcfef71efc0219"): true, - common.HexToHash("0x991fe55ca9e38e0f6ac01036dec8d793225edc844071874223941c3599105062"): true, - common.HexToHash("0xfd2034fed00911af6da7638de915b7268645466f3c380f7a354b3621ad5eba29"): true, - common.HexToHash("0xb9bbe714af522a6e86667db48421a1635c60b24a00ad96b9865f8bb0d40981f6"): true, - common.HexToHash("0x14223cf3471a2bb535543e048c94a80c6972fd37ff4ee71a2ec6755dd6c9c5a1"): true, - common.HexToHash("0xc7765f46f82a44f31815027b71ffe5a80fa65da31e527a0b46974c46d0992c7b"): true, - common.HexToHash("0x0fe984174f72d210fde048bbf86d3534a372b31ee3cd66cf8b73bb2780c7c6ff"): true, - common.HexToHash("0x020a73e331ecc0764d831c68a1db1180fe0d1153b67e7fae39b606685e33ce7e"): true, - common.HexToHash("0xa3329e6173016dca67125d66f022aeaf3df6a3ebd0c01da540271aad18fa1882"): true, - common.HexToHash("0xba888fa7826f0088a735ed6d37bdec774daa11dad84f7d0b8f2688d022fb5644"): true, - common.HexToHash("0xf059bd4aec4d6d53eeec75f03e2a0b16d7d931276a986d7635a8e74614b9063a"): true, - common.HexToHash("0x9fdd42803716b9e68de6ffc7c600aaebe9b21f2c211e6be816097d213d6eab98"): true, - common.HexToHash("0x52fecef881cdada9dac4223d413d78f529d641bdb19adc36f6921ad6327ee84b"): true, - common.HexToHash("0xe3175c8637c28b5d316475944d8308b0fba814e6821d18d09c80daf38b223e4a"): true, - common.HexToHash("0x0b93b4e6723396693eb92622e21ad690248519c4b2d4ab47225b7c540b0694f5"): true, - common.HexToHash("0x5b6b1a85da83bf93d2f859014d9221628993fc5494da4e426cfd45d78af0bc4b"): true, - common.HexToHash("0x84353042baf4a3ce32529a962d0e8074655f817a8fce421b50f4bc2223f65778"): true, - common.HexToHash("0xf20ecc7b3dd779a88e015ce510c16043cdc44f769bd67a93ba32b4aeea6102af"): true, - common.HexToHash("0x126730d4a785a904d49f10fd71c46d89eb36bd04bf1a439c489747a8e0537e05"): true, - common.HexToHash("0x0f0526191a812c64e5822fbe3b6896ffedaff46dab7f206928e32d42d5b991de"): true, - common.HexToHash("0x95050b7f8fb2e052347aaecbf03949b918444c35ea3c8251234516b2703d1538"): true, - common.HexToHash("0xdd267585804903cb4831b02c32b0614a2ac08716641f3c51ef6236687126047d"): true, - common.HexToHash("0x1d7bd97ab4aecc5ca9511d66e998d76a8a795ada880ca068a8c50b42176636b2"): true, - common.HexToHash("0x6517ebda072a08ff5df34d8ed393d81bce50e6e781265f0fe8226aac2cd91ce4"): true, - common.HexToHash("0x19788b85e9d35f43637a2ddb448288587e47e3ad4debc024e56e0024ec4c71cc"): true, - common.HexToHash("0xfbbddb3cb336371749f46c6a1138b8273424c04aada3c0b79fadf47f836c8113"): true, - common.HexToHash("0xde22333584cc922fbc36029e981263b54b4abadbc46bb0802f57cdd5ef5da20a"): true, - common.HexToHash("0x64275603289ff3e491fcb07450ea5f48b01e63de9f96c35063afa60a8b50666c"): true, - common.HexToHash("0xa791276c25186f63db188176b02fb0774567a2fd0fd4e75a83193eeada5e3238"): true, - common.HexToHash("0xb9d6e6d7f452a2cf3b86c3d969f5a0a8879e41b6ce9367b50be24836a70e08a6"): true, - common.HexToHash("0x31a120da41d2fc32907ad7cc975787bec1f7899e2aab713b8404113b986b507a"): true, - common.HexToHash("0x767b6015c8ef490983b2ff0f2b29f154423e856402c9697e6c83e3db4a3d2318"): true, - common.HexToHash("0x8507d4bb57569dc735f5f10205726ef7676422a3eb90eaf5db458e48f9a8b320"): true, - common.HexToHash("0xbccc17f618f3b6d5edfaf64faa64207b66fa8245e64e866080d66f95a5694273"): true, - common.HexToHash("0xbb472e461a5d58ffae5fb1405701247360eadfdf0e6844624a36db0b24309988"): true, - common.HexToHash("0x153207c1feba56c9bd492c3e14ff857962eeb1237ccbbb591910819399c8fdab"): true, - common.HexToHash("0x34a810033374dd866e2901f9c5dcfccfce96773fe0ad00bc2e7d13299aa30cf4"): true, - common.HexToHash("0xc652b62719fb3e75cff31fbfdbf3588e6eea2bbd0a755fa3f9657c68acf5aaf0"): true, - common.HexToHash("0xe0dd399c69781e0089b2da5c93328e5674b066600cece1b346818d6b2321efe3"): true, - common.HexToHash("0x67b56be70651c4ff62cdaa7660719e25eb629e8419ecedbda6eed0dcc614f6ca"): true, - common.HexToHash("0x9ba2e2d7221d0ca7b5115dda66aa7e99cec9d7bba0518702af8c2ac622cc5da0"): true, - common.HexToHash("0x05c14cd85ab2d546e3e3d29b86977fb03814c4f58dca43a12de1f7719b61bcfe"): true, - common.HexToHash("0x6f1f136ef01bc28fbb2f7ef59951590c5fe0e55bb9dcbb6ea8e70a1e53fe29a2"): true, - common.HexToHash("0x9dfdca7189b5602f0bd7d243bc386645e19ae2085f81b9a39aa5442c386c6009"): true, - common.HexToHash("0xea2a887bd9ee4437801ee6f51b8cea50fb077f3db8f7da71c234683a2e7c87dc"): true, - common.HexToHash("0x7e756f6aab3d55a49cdfffbe3e7c0f8554ffc1d4fdf8f41c2274afaa78fec5d2"): true, - common.HexToHash("0x69af633da8a01af402c8343728c50ac970a22afd67fc4070a81378d8d0fbdbed"): true, - common.HexToHash("0xb2052490ca896d1bf0467d5c739d3b2b9e5824c0804e2c081a4bf59a1fca0628"): true, - common.HexToHash("0x978df8a24af47939e5d601ea38bfd33eaf747b697754f27de0975988413fe11d"): true, - common.HexToHash("0x40fa6f2df11110f719f36cf2a8dddc25dbd58f390bfaba75d630a05484e5cc64"): true, - common.HexToHash("0x36cc84c1d4751bb2f2f528e0c751f4b8597e7fb738377594dcab05c78ea80327"): true, - common.HexToHash("0xcef8f28f0db60e7057b15150d11140f25cd37fe04da5de4037a7154ab59e4fc4"): true, - common.HexToHash("0x68593b1ebfde0cd84f8260e78b3b33fa88dfa8c1a31a0ce87ce1248f00052f62"): true, - common.HexToHash("0x0f8262404732aaa98a7bc4d3ce61de39723a740f55be51c599a35eddb6438f1e"): true, - common.HexToHash("0x31eff5c499c93f69825902bd669134c470219742a7158ba6739f8665cb3852b2"): true, - common.HexToHash("0x9dfda524338513e2a4dbcaf4ac7ca817310e50ad56ddf3867c4bdd1677ddf122"): true, - common.HexToHash("0x84f1801272c6813f15e4b8acb2eb251e8e9b39c7d7a89bc2e5d2870d261cf9f5"): true, - common.HexToHash("0xbfa790ddf8928388fa4a8847626b3c0f5305c65e00f4c8cdf1bbc58d6730cf96"): true, - common.HexToHash("0xc93dea000fc544df01280a29301cc2d9ffd0e3731b84ff76f847e5369fb827f8"): true, - common.HexToHash("0xfe57d1a2a48747608b0c240421658b93b745a6de8e4e5dedaeedff9c22ff637f"): true, - common.HexToHash("0x041497608c065bc398846409af30dd8ae6ba2f7eb3ad0514ad2e1f9378ea891a"): true, - common.HexToHash("0x417b553f4ecf1fef72f2ebc8ada29a9fb0a7ba4ee153cb5edf2b32d2e2e10144"): true, - common.HexToHash("0x1e8e6db20a677ab2f17bda1a3d44f49840e38ff3deb8dc9c270aa78702f37d3b"): true, - common.HexToHash("0xdd1786debcaa99cb635edeb49b4705f43426b8b36cd507685e661d4c647f2b27"): true, - common.HexToHash("0xfca3516029eb376bb91ba3b7c0f13f34eb6d200b75fae9b79c92d4f0df3a8aa1"): true, - common.HexToHash("0x209860d4a0ee5d1ec8b5e79d87a7f20fa9aea2214e25b5c357417d6c9d57b2e7"): true, - common.HexToHash("0x5323553968cbc636174772594c0000fa1d2e25829d500946bc2d3fdeb631a04a"): true, - common.HexToHash("0xbf68ce0efc789a3cc538afa14795c5023086bb1373dbfc4562728273a78856f6"): true, - common.HexToHash("0x7e5d720a82c67204650bc8a2702d88b30503eb2617c9fa552f3eed753d56c8ea"): true, - common.HexToHash("0x946eb84d85d167bc7fc8d48a3e8748b2e1df2cbf090b825e25817e87cd831cfb"): true, - common.HexToHash("0xf94a4f08ddfd4b86b84a9edbecd1c2c8ce7aa36605ac285c40b7620adc8212e3"): true, - common.HexToHash("0xb4932ce759c167d016ad0a65b88b75156b6a0f0d18c6e544843095af080ee222"): true, - common.HexToHash("0x40618e4540f37347b96fb7314bf446c2c9fff01384506ca1b1659ad0d8719dfc"): true, - common.HexToHash("0xc42e676a696f9138d7d42ebeb632dfe5c71413f0d83efd3d5ea11e45b5dc9242"): true, - common.HexToHash("0xcaa1a977850553c5cab444558f073787dbb6476a1165955e3c92e2929ac83001"): true, - common.HexToHash("0xa8f9e22007e415d009402836b5192a7bb928c55ae721db99b741714b7e929c49"): true, - common.HexToHash("0x50601024d81049af1036bd5544664a6ad57eb7925fbf78b71065b4b8e483360a"): true, - common.HexToHash("0x278beefe7123f25e030dc25aed1b2e982b235e03d8921babc16ad76f5260f4b5"): true, - common.HexToHash("0xb22cf5217f38ba611fab8779338792e8cc37db386b9e38fa709c2adb40533558"): true, - common.HexToHash("0x76a4c553a50d4c81fa8af40a68702b58a3861f24d05a761c38302c45f90f0446"): true, - common.HexToHash("0x5d63f2fd27a744406f66761cf526d19610fbb8480649b9f8a40f390de01a8efe"): true, - common.HexToHash("0x848c2a93d74ad3cd63d9780ec332d975927a004b9073422956cbebd8b1fb8403"): true, - common.HexToHash("0x90f3e6cc99f6d73eff93165642f2028cc8d6111b0319f36bf78f76c5662f9a30"): true, - common.HexToHash("0xa12c2304fd9fae5a49198c1677aa63961a83c84f2ce7fb57549a43804ba27e92"): true, - common.HexToHash("0x6fad07dabdc86870a32fae9d5e3f43de44631ffdd057f1b7c1732f146df16fe8"): true, - common.HexToHash("0x76789825be37a359860e5d9f08b494cb004f05ea6f01fc07b3364cd5dc4e487e"): true, - common.HexToHash("0x5c04c3a168ef070903c4629ca9d0a7527a500c76e7eca02073f11b03f90da6d8"): true, - common.HexToHash("0x52cee676470d5487ae9eeaf645a8bf2763dd5feb799608f5f478a773d3b821d1"): true, - common.HexToHash("0xd7d9370026a43c591d8f5fd7756d396339dbbca226cd5e70ac4de8df4d806103"): true, - common.HexToHash("0x00607028d4b98bda59d2b55968494f389d25a34da490d6149e0afca0ad68f098"): true, - common.HexToHash("0x2bd8442e590f3c2441a6692b748662fb190b666d119521fc5990b8f4f350b0e2"): true, - common.HexToHash("0x931439206666515bee057b9f9a57bea3da45167c0945abacb402e7cae3f19c2d"): true, - common.HexToHash("0xcdcaa44fd37956ff9746e5b784fd0c897c37dcd62b5006f78837cb41d8eeca4f"): true, - common.HexToHash("0xa9dbefc76fe2ae82e08370ff02b1b672d8e5f695d2d05a1f1552321493859891"): true, - common.HexToHash("0x74b62c970ded25c9ed8aa06bbc53dcf9dc8f9df304b8bdfa8cf5e2d88f3b798b"): true, - common.HexToHash("0x8216d5280feaf68c248280cf88f241d37ad606a74ade724f84f4998628faab8c"): true, - common.HexToHash("0xbb9b27a99aaed29231878766bfd4b58428c3de2d3a67d9088e210b1742881351"): true, - common.HexToHash("0x986355e6142b12addf3636e45123afb73ba869b08dda5343ef7223faded94d9b"): true, - common.HexToHash("0x946a23803b0fc0a47b3e303f08ce4b1fc6bcb422dd49442680d62bd14001f37d"): true, - common.HexToHash("0x159aedfe4328eb76572811451f16fa4c6586991222f1c3d51c8121c719251d86"): true, - common.HexToHash("0xc9fedf83928f69769a9c8c841e8bb8c2881b04d3b0d6443f80e1b8e75df38c97"): true, - common.HexToHash("0x2ccd3c8e6a89083a66c6e08593728e27f74a917c9876ce1fa5f3cdc92cdfdb6d"): true, - common.HexToHash("0xfce9edb97176d672dc11fa4c92e7a7ad865d5808d81287be8e63d977cd9a1ecd"): true, - common.HexToHash("0x1f5b526814ecccfc90c332453294e17670cc1f0770bb1f4150f44bb13931dc01"): true, - common.HexToHash("0x8c98a073fd69db6373aab143cf101b75502c1d335986c7e82034fcdac29884dd"): true, - common.HexToHash("0xf65bd612bfdf65ab92f70a0e195e7f497221e675482ee2d7e08295b17ed2ce79"): true, - common.HexToHash("0xf89377eb834d79207a14f6f86c7b62f5a408fbb8fba8f50454593a91a726d701"): true, - common.HexToHash("0x74a9a26d63c8bb71d4792d8ba78ac72686a6316a0429de36ceb414938332f21b"): true, - common.HexToHash("0xa8b00ab9cc2d19390fd7b078f4f941667e0215fa5351079179b29b0932bf22ec"): true, - common.HexToHash("0xb67164a526a77762a4f67e4995ac692e2a2165d7cf7ac62817997e6e9bd3c70c"): true, - common.HexToHash("0x76aea6945fa02183936fba8ede7866f4d7d3672e266aef38689550df84117527"): true, - common.HexToHash("0xa1d550fb3380d00d689a9867c8cbac81c3ee8035b015051742367989020f6ec1"): true, - common.HexToHash("0xc8a172abb3a1e43d62c98d5092e5eecf24f72126d30985593ca206f74f8dfce1"): true, - common.HexToHash("0xf2c2c2fbcd116105df3c17d5d74dd6dfa9937a932282a3d5f352e286bc609f6c"): true, - common.HexToHash("0xb695ccac12a76ca26669a67b2c7bf29eef94ca8e60130220b046e8d1569b056d"): true, - common.HexToHash("0xb158bba6da57acd1cff1dfbf3d2c109df513bd89aa9512e54e911bcafaef42bc"): true, - common.HexToHash("0xf4dd88260cdc8ca1384b988964b63b0875d79b7fd5003da30f2e8b0b5a246777"): true, - common.HexToHash("0xab9b02729cc34f1bb7af87a093c125828c68d6822062cbe4e6ac18199399fc0d"): true, - common.HexToHash("0x1f016d7f2eb35acb07ffe3cbf9c4ddb101a519e238712b040ebf2428971fde4e"): true, - common.HexToHash("0x133a94071ac096b96188bdd9dea2c9bb078a5938418a4722a7edaae990051791"): true, - common.HexToHash("0x34ec60c632e32a009ba619477b64566de7b72d9f477b35d646ec15985c4f8acd"): true, - common.HexToHash("0x37064964c7e40808f5d86de6c6480369058b9785c4db3f0cd55dbf17f0085e40"): true, - common.HexToHash("0x329cffa313ce54c3dcb00e95ac95ff812f5475a8ed213f6858c3162c89f54f97"): true, - common.HexToHash("0x62b43031825cb8ddd35ac4f1b370c8d2a9d5e24a0eb9446d7f86328405c251c2"): true, - common.HexToHash("0xa9bf880832b613f8a7240411c84745aee1b8703de7851cf6154d2bec5f7d186c"): true, - common.HexToHash("0x4fbf727b538e70c371261541e951ce9ab8ce703150078d97cfcf8bc3d75ac182"): true, - common.HexToHash("0xa0eede2a011d62c0ec6e11dbdd12167db759e5287a0876b6d264ac85eab5b485"): true, - common.HexToHash("0x0ad011ba74754d3b6d190661fc26a065ad8fc74fcd663aa98929ffab06bc2835"): true, - common.HexToHash("0x4bcc0fa913da8ee7e51499c5ef7c76969f6d52ea02660ba9762b8beb3199858b"): true, - common.HexToHash("0xf21a8ce19689eb48a2a491833a1ed246c9f1cd35495e28411a249fe739e21e14"): true, - common.HexToHash("0x1bc71a07f4e1f5d52fbb4b92bfdda2778bbf10c6833322501965142f121823b0"): true, - common.HexToHash("0x708b03cd5272cb361d6b3f6292adb91f78c0d5641a2ed3d38004d5958f761f00"): true, - common.HexToHash("0x0d82d04f1528af6510be76c74f62e594d898196a4cacfe008050fd8f238f65ec"): true, - common.HexToHash("0xae70d5b12983c8b1cd249604bcac78a0e402edc953268601df4151cef137459b"): true, - common.HexToHash("0xebd7bf1bbec513381311b133fd2dec0ad5aaba2b085b7748a8cb718beb541a1d"): true, - common.HexToHash("0xf8ee0765f726ac66678fdf584d8559e5d3e9fbe9a5b9bd8d9ab72d6bafdda969"): true, - common.HexToHash("0x70ad814e8bbd1ffc301c4eb87123fda10e93de5f61d0e3e9931bc9e4b4366ba0"): true, - common.HexToHash("0xe9ab57f84676db012f9321b0e0c6b4d1bdf6e4d7f6c2e0f096ee9ad2e5066063"): true, - common.HexToHash("0xf8754b39a02eea273d615fc392ba186bb9701be55d4acdeb0af4d8b4e2cad2ef"): true, - common.HexToHash("0x335abe5c3129e1cf46cc3277b6babbf3fbed2519a00fb42c130e3d9b1e55de76"): true, - common.HexToHash("0x7fe4909cd90e2f40614d322105ea3b4784b3ec88bf9b76bb57631eecf0346d84"): true, - common.HexToHash("0x5b4352a2b4bdb187b14a71b825f29eb1209b9571ce35fc40f762936239cbb02e"): true, - common.HexToHash("0x693f83acf6d0a1ebf9386cac94540264c477c8777d88fd54e26c865fc7d54755"): true, - common.HexToHash("0x91bdb9482d37f81f274cbc31d93ad6c16c795d796be0bf4ad259216d87133b3b"): true, - common.HexToHash("0x660d3f0028013889d55e7510e1616d96feea17631cddc69bfd22b1ac55411120"): true, - common.HexToHash("0xbc1d7b374c2a4da9faa95c24174ae8fced907938dc49d1beeebe033caa780ab7"): true, - common.HexToHash("0xa3b36a1436e69a8e2b8a8cd7078b6d1401c9b84d088796f1c1c0717bd88516ef"): true, - common.HexToHash("0x117452ad6b42354353c00047c1c78404a3b0daf99797d00f8deede51c568d9c6"): true, - common.HexToHash("0xd477e6c0731e957ceccd2527ce60c568c847cbecc57980bdb4bdd9d86e218672"): true, - common.HexToHash("0x4c3c7ca50890dd31eec04c34cfd18277f49c908a1a00284d99e7cc0d6d935478"): true, - common.HexToHash("0xbd83e467b813928927f22bbc9a35512127de4be6358bfe244c3c1db2c2582f50"): true, - common.HexToHash("0xfe531b19466b15156685695fdfc9eb2efacc73199779e6d3a892c9e4ba28df0f"): true, - common.HexToHash("0x971ddee8d10dd751a9d1a374793ea87cb1789a0d19d9b22925df23b347fb260a"): true, - common.HexToHash("0x85130f570c5791b0a2bd561de6c57c1a8fed09abc302651035b89011ac2d2cd3"): true, - common.HexToHash("0x1054c2ee7a42f53d2b335cd7f5589707aa6196aada15725f8a955b77dcdd4217"): true, - common.HexToHash("0x2504fb6f9dc774119145b2b2e3ee1000b7ab91d8f34d5bf2e4eab28760276ccd"): true, - common.HexToHash("0xd7242fe9b87683396fed370ce1660072a8a1899dd8782419c95cdfdcb064332f"): true, - common.HexToHash("0xa5479b716a9509ad81bc23b7fe6a8486abf3db53d9b879ae364696ac27afbd75"): true, - common.HexToHash("0x6266d0426c931c3e3a2fa6c75ad67b866b071ca76f1b5fbeb63e279b130251fb"): true, - common.HexToHash("0xbaf2e7d250e1a316a8bdd40e85b2f959bfeab21fddd12240528f6826704ba657"): true, - common.HexToHash("0x720cd543f8e368ec533cef879f0e3748e5a260c6ece9c7fcf48a22700937cf6c"): true, - common.HexToHash("0x522aa5365bf0af9d35ddcc2e77ac1528b8e022901c56db71d61b5297ecf81ac2"): true, - common.HexToHash("0x8e7e38017d6c8427754f4372e521972e836c748a345cf8e9c5620aaaa33a8bf0"): true, - common.HexToHash("0xd6d515da53781d123ad06ba94c34b7c97c948418a58b88800e00b15c0befafce"): true, - common.HexToHash("0x22baa42d78239b793b928eb70a40b23a1c958ee4d01cc2b5d6cd931c3c0840d3"): true, - common.HexToHash("0xf09ec35eeb39f2624b63ce0ff48da11a0c03c8f038df381addbadd2aae9c6ed6"): true, - common.HexToHash("0x19e819df073f7f19b826539cf9f9ff3d72e88707bfb3c0303567f5c99e6927a5"): true, - common.HexToHash("0x6e6ae3f7ed0fb8e793d58128076fa22940e7851c8017c3ed80f969fe89e1fd21"): true, - common.HexToHash("0xc113467d677e409af1accf9c120a7b90561915132ea17b9b4c8c59cd2122beeb"): true, - common.HexToHash("0x5730c36d99b986268947773524a8b4a9e83fdf36ef8fdfd69172faca335a6d79"): true, - common.HexToHash("0x44278e7b5efd48f99ec18adab5763907eac6da5cb020b1c870922255858e12a1"): true, - common.HexToHash("0x6b3d10302a6c27b3117399e97abe790288ecd9963c0162c61385032217f3f237"): true, - common.HexToHash("0x4ea302e5a9b9d465965a0c376caf9482e4b57d8148b1350b595e8bc7ae3c6c10"): true, - common.HexToHash("0x0f6c3c5ca2bb7da5b387508df2bce0cb65d94f504f73c17e33f9c12ee12ac1fd"): true, - common.HexToHash("0x5d74b618dc9219c03a4ec2efad0bcb26556b4b7791cb434101e6dc5fd8405a6f"): true, - common.HexToHash("0x6caf6c99fa66a87dd0824509e65a4982c2842170d52bea0f8f438be86aaa419c"): true, - common.HexToHash("0x549c8f1221cbee1db6935af397e4248ecc5e2a3627a8f2527089b0cfb7ce34e1"): true, - common.HexToHash("0x8427911e7762c68f4073c2be007b8ab3cc2c64a987b54bb88c7f4b3dc621d5d0"): true, - common.HexToHash("0xabfdd7b80fbdf11295fabaff12126aab78758034156f32095de95146630c65fc"): true, - common.HexToHash("0xc2e98e8cb81c2760d17089dedb844147ba491b542424c7a5e23a73d22966911e"): true, - common.HexToHash("0x9abc5c5da15d8e522d00ddbb595fa6ded4a750301f5f85b598fa0ae303cd5fbd"): true, - common.HexToHash("0x11541458bd653f06d9c64750b5329e8d66b7276943c6cb1816b3f1901d9e01cd"): true, - common.HexToHash("0x32de903f02ba098749baf2ccad6dba66f8de0a6777adaec2faa57d8b6c15067f"): true, - common.HexToHash("0xe4bb75e174fd1c67e45daed8bec742f89f71ffea48a213545bcd7344a411e097"): true, - common.HexToHash("0x23e08c442cc6f2f3a94b83ce1790f6973b7adeeaaef63ae72394c5798d3dc6b5"): true, - common.HexToHash("0xaf5ac5ed374f253a1550af5684e0ac4358c73c2801419b30665ec285800d8ce6"): true, - common.HexToHash("0xb4162442f056f97241a8a98d264736903d424d7f030453ceed770ba05912330f"): true, - common.HexToHash("0x87bd815a8a03cf52b3855c3dff2138ae2a2502bea115963cd7cfbfeb93be70a6"): true, - common.HexToHash("0x36ff18a69695c7e43377d3d2bd9c4191424d5cd4fffd4dd84261f0d331de55b0"): true, - common.HexToHash("0x74852b523fba58ee1a939c8af5f519c9c2bfa05045db71928eccf9a9b3678efb"): true, - common.HexToHash("0xbcbbbe691346e5a6bfbfbc0755aba877ef01cb1902d1cdb45c39c75668597233"): true, - common.HexToHash("0x54e52f12c6b52433bc786101728c57b56dc53ce31a89b76d8d3386145724b9f7"): true, - common.HexToHash("0xd5fa8aaf75bc44164859ce7ac37d3331091b9da91a53d8bcd8097ec321f66fed"): true, - common.HexToHash("0x98a91363ce7c1d8627f2a8c95b3f6a542c21a82738640a0114a2d095a6143fd0"): true, - common.HexToHash("0xec299cdd1d81f290316ebd3da217d21f8b498457938d9561df56014b5e966f73"): true, - common.HexToHash("0x2608e5f3e87e98c3a357621a4760cc02949532d3751e33722e6ac52bea2310e9"): true, - common.HexToHash("0x9028e859cf6687b99ad0c4ecda5be0a566cdff8b62d20bb25af1c4206e6901e6"): true, - common.HexToHash("0x8cce4b3011c848745e0eac3eea42b107d8d51ed191280d8e46ddde957c81a029"): true, - common.HexToHash("0xd40e65ef365ab7ad65c3c88f014196dcf2cc22b337ffba45b5450a011e463573"): true, - common.HexToHash("0x3d9171c367d80003e5b32058b8af38db5a7699b4a2a3159265973815ccffe912"): true, - common.HexToHash("0x99c49c74d96c151954b85494862c4f64626175f37a25686180c33861306110b3"): true, - common.HexToHash("0xd8c2b3fd4743c15ac5e6d3f578844d7e8e6ac615e35fca5a5963b02c8198d323"): true, - common.HexToHash("0x81c5beafa56cfa1cf9fef99a8ede814584853aa26767b31271bf304df5146d08"): true, - common.HexToHash("0x87f05a695d06c3991cdc524dac95888bf4cf218f890ca8e70dad9df7a3f811bb"): true, - common.HexToHash("0x388030e54eaea6e6d890b7a7bf289afd60ecdf834f359499ccacd24f8edd73af"): true, - common.HexToHash("0x6c03ca7d27dd6a85c0772560aad3c35db6b5374e8388931db7e6c2e8f1a739cf"): true, - common.HexToHash("0xbf14f8ad649fc22819902427f4b4c768b81756fd333c64f739f62ff1bced7deb"): true, - common.HexToHash("0xda534b43fb1d26923072f7dec225464c4fb7bc48214f42b015e66d66da86e5a4"): true, - common.HexToHash("0x718043c25a5d853f75298674bf088de495d74fef0f91734792040f6ad6463cfc"): true, - common.HexToHash("0xc25cee72ef14a238e4c3adc3451f603fb3a9368793628afee86b5ab218cbd766"): true, - common.HexToHash("0xb0cd3bc6a271d960de33ee04890280d867ae44ab09791acac26acc3441d77bee"): true, - common.HexToHash("0x6ff37521756dc2b13505af38cc1cf9063c047db10ad7abc841bc9a4833e17bbe"): true, - common.HexToHash("0xeb838cec6f8d5e1a2e2626d9650e320f1308a284c09c6652e2bcc9325a5dca15"): true, - common.HexToHash("0x698e8abb560fcc08f1c00ed1b6f7ff64396464ae40de401daeb42f7692b153b1"): true, - common.HexToHash("0xe2bb67045048a59011c4a2928107d4d034b875f973c6157e2ffa0881b2a3ee6c"): true, - common.HexToHash("0x2dd43fac8490b212a8760001548b7b54ad47861b8d30b4f0c23e260ab0f5bc1c"): true, - common.HexToHash("0xdb52d6dc839526b900339fa1209d2a11a56051e8d41549cc7008b98193ca5245"): true, - common.HexToHash("0x3cd6564dc89bc0d25e1625a637bcdab54c452f837167ce0c6bbf8901f6b9fdac"): true, - common.HexToHash("0xc925a6e3884fb917d99b5a5242abea242bf3bee2ca4e9965d8e11a1edcddcf28"): true, - common.HexToHash("0xc824c487f87a54d2a2923f41ecaf5217e971cb28a2c96c29eae43d387f5e9789"): true, - common.HexToHash("0xd6d282910be0b1ee30f33d62f3736cc7f6f55345437e007a29538a0016de1a2b"): true, - common.HexToHash("0xfdfc3f8c0c9008ec4e309c57e9090a4a0df0546c866fc83ca34d6f09965db3e2"): true, - common.HexToHash("0x4a7e17f09e048105f7c99e6da2b89d45cdeb89ef0ea7df793faa641d535c75c0"): true, - common.HexToHash("0x73dfc15b57a6d5f0bc999b612308c5700bd7ebc9c4fbf58a07145bba67e4a63d"): true, - common.HexToHash("0xdb344e109ed6ce3706b94f59c0ba9c4faa5a872494aa833338e205e6381cea7e"): true, - common.HexToHash("0xc0130183343c147d160b1d3a979394d5e7c07a8f2e16b20b4eb69ab9d0d707c1"): true, - common.HexToHash("0xea55195d8f86d790c036379c930dd872fa7bbe503b409e6f4bbd36f6e1d1a435"): true, - common.HexToHash("0x5a533615fc29dc4f5e25fa7deb4da0aa43f3560b4da423ea7d6ccbb958dcdf89"): true, - common.HexToHash("0xed4a53524ac6bc63e133ddcbf866ffb4ee4921cb7666093f830316a3e020c10e"): true, - common.HexToHash("0x852d150913cce3ed1b6045e9f798efd3ac244589ae12ff4dde28eeb7af516f1b"): true, - common.HexToHash("0x44792662c84ea0afcec400512adbe55424b9c8cfa30e3df2613e06a7a7558320"): true, - common.HexToHash("0x3fc84b62aa9a95c15ecec25447be4afb36eeca8949fb7dfa07302340b7d5d4b5"): true, - common.HexToHash("0x858f6af733d883b260ab0903223593e0a56c9239f41f77ab163f9df8935e19ed"): true, - common.HexToHash("0xffc939cd57fbd3c36b1ea0dc79e1cff9a2dcfd188be1632957b9e18f9e4d3ca2"): true, - common.HexToHash("0x53387a15344e273449d77d4173f70467e7906d9e1d30854403c605fc7db1fecd"): true, - common.HexToHash("0xc9a6cb5434fa4797682779b3fd186c139a4c3a5a6055a100c5b0d9987eaf76fe"): true, - common.HexToHash("0xd58e5b4fea3d03b6379a5dd0d990b9a77818c182e138946243790b9121519986"): true, - common.HexToHash("0x2ea2399dbda19916e87cbd55c652bdb560dd67b5c3ae60bf91a86d4cb59c3253"): true, - common.HexToHash("0x1c516ba96fcb8d766ccaa70cb17ee020e6acece246d8d0df5418bda2a0cb26ca"): true, - common.HexToHash("0x6c59fdceb385dd2c0b5d1373c81907842c53ea888a3487c35d1bc68e518c97b8"): true, - common.HexToHash("0x18a293c6c90a60371aeabfce82bdc2da852bce0fb3051d74557b67427db726d3"): true, - common.HexToHash("0xdb0265f2fe2e33593e5ed867f722b62c40d9ce040a12c7bd1c130841159a5e2a"): true, - common.HexToHash("0x106084d12c77ac42d6bb98d400cd0e9744007883379d3e6905bfb2e60f5abcf5"): true, - common.HexToHash("0x42c32c17a7c0a7f100e0223a7e6d77a93a77c3183a16f001abc0528a2219f9c0"): true, - common.HexToHash("0xf5d440526c60c5fa8b1f88dd4e4f2e47e345cb2aa80b463c35ff7ade56673c04"): true, - common.HexToHash("0x35ab05e6b89be7619bb9002171670b899c3dee28f9f9bafccf98fcc0e416aa3a"): true, - common.HexToHash("0x2e24f6138d530aff6aa62b778d018cc39987662cf7a722dafab3a6f74b249793"): true, - common.HexToHash("0x7e822c287ee750a94d7512c0affeab11d3b3c66b6fbbd543ff41fe4c07c956cd"): true, - common.HexToHash("0x83858a50a8cc36af5af5edf574082d40645aa55adeff9e4a1a411cea49ae8107"): true, - common.HexToHash("0xe4607470b9fb21893b214545e000626aab5f4debbc5605d5f3e80dedd73aeacc"): true, - common.HexToHash("0x939ee52e64e7be9b8a33c120e6fe40df66f99c43f83027b2d87027ede04ed3b7"): true, - common.HexToHash("0x040df84d91fc938a4b16e3992d0c9a1060c26933c1cf69a5b8e363b883ff1856"): true, - common.HexToHash("0x17ea0d762134074931e04de045b85812104e57b64f08e0ffe968099cd4e3e493"): true, - common.HexToHash("0x6dd3fe680cdc94ac2a14811f8554bcf78e41d3ad443a893f2bb886d41861d775"): true, - common.HexToHash("0xd8e6f8a019aa5c35cb665bc9a731e88e4f24442600de0fe7474f29b2d5f9a8f9"): true, - common.HexToHash("0x32b582853820e837568d20fbdfad7c250f9210313aa10666d4f5a66624264866"): true, - common.HexToHash("0xc59138fbb0cebdf231f833228be153ff027eac5a97e161b1c2045c4d8a7d9fcb"): true, - common.HexToHash("0xec37d891b6603f74fde316a030f374f27bb1e8e893dc47fa1811f83cc37bc0e4"): true, - common.HexToHash("0xb8b240f4d57f6f08363f147b47213a8b8ebe1167b11122eefd917ddd396eed99"): true, - common.HexToHash("0xfacd80802863f229bef30df09359f21f99183138a74aaeb10393713b0cc1317b"): true, - common.HexToHash("0x66b330f51b8b04dffba1d341b5bd1c70d976ae5ad07a0b2bf828aa923711ebaa"): true, - common.HexToHash("0xefeb0fa40ecdab1a1e086401317da10d6c906a2853a51dff9dc124c37148088c"): true, - common.HexToHash("0x04a7e127334e0b1b6a8bc519495eeff0d56fec0e9b1a4a6eadd142445a622e04"): true, - common.HexToHash("0x1ac2364bcc74b06c7e6eecdd43801133e61fa577d7c7f994a801a44cb736745d"): true, - common.HexToHash("0x8897462824c22418f950593308617e755cc95deae61767e429a1c6b02a28bcbf"): true, - common.HexToHash("0xc52e1ffcbe1cc9a83534936d7aeaadef7af7fb596bd62419ad9357794976c4d4"): true, - common.HexToHash("0xcaf175c14e29d917bde1afa1deba0b4fb5af0e495f40a5545e950017f48af7a5"): true, - common.HexToHash("0xc7e02b3ed50de95ce4d85aa913ef6e4455241a619fd92bfc42497b72da7ec706"): true, - common.HexToHash("0x2cf4a1c6c554f3d03c5b32389ec2e4e3b3e5e1202768be522cf3b4c4c50f15aa"): true, - common.HexToHash("0x3a0252cde4fdd0969dae2bead43f7f39abb57bf1557d647043e8cc4fa6908827"): true, - common.HexToHash("0x90fb8bebfdfaa590a196b20e4516b289de959628cabd143c16bbe33cc3a1b627"): true, - common.HexToHash("0x515f433d2e2ab580da2435d7d514b113a3f71a89b6dd5606ef31d9652c0bca07"): true, - common.HexToHash("0x383f089be63c10326e95d9db58bd80de501c28ce2d68b8fc4730e423c306fc24"): true, - common.HexToHash("0x05d302a7206fd6652612ec97be8fa8956db20145aa5dc53004feb693932ef29b"): true, - common.HexToHash("0x942122dd48a06671c60819b7727f27b2fa76b86600811c22787de5a9446e7104"): true, - common.HexToHash("0x3d1941a3a568118fe01b61f4b74db733cdab1574845d7dec128d6c063da82452"): true, - common.HexToHash("0xd7e83c79b2fb395b743dfe394c0ac874f38389d727afdd008b3920e7a93ceb50"): true, - common.HexToHash("0xdc1de97a91409069763e45cce23c3f0683177c08b6f5580ed7aa92f6f051b665"): true, - common.HexToHash("0xbe2ee8fc133b27b6c672c72f67842e227f3aa4b54e3104bce3bf5075a34b04cb"): true, - common.HexToHash("0x50e634725470d84c146ee6c5ae4db369fde8a1f7e3accfbe9f99d970f92b4753"): true, - common.HexToHash("0x11fb5af7f8fc59a54dbf72eb079e16d4b5de8857bcebfe50647769bdca4c48a9"): true, - common.HexToHash("0x0db5a5bf1e322cba43240f160ede0096798377c74cedc2977f7d40b859382953"): true, - common.HexToHash("0xc29b05b4f63ae3c8702475208d0e28a5bca2e8bd9f5cb786d9f9cfea6bdd5199"): true, - common.HexToHash("0x7850aafa9072979bbd56a6e95100babb78da2488debeca69f061889ee1e887e3"): true, - common.HexToHash("0x03708967d8c7829e2a849c584832476266e6fc1ef9312447b9627aafa9eed709"): true, - common.HexToHash("0x0f8a4b288e3a2c3bba5fb3cc0bce95d7ed45c55e47266aaf1f699e1e5ddb74ce"): true, - common.HexToHash("0xe73adfbb23c344bb9e8d1612539a1509a3ef8f006ba840999218206bb3db7558"): true, - common.HexToHash("0xf77b3ead43cf6232f7f7f118bcd2b24d8e2721ee4600f258e6aa3c9b674a8a13"): true, - common.HexToHash("0xe37634c710455af08604f774c58e1eab91aa38ccafd16fd6eabb1b6440928f32"): true, - common.HexToHash("0xef17bbc018715dfda8218dcae0cd77f096679675ea0b44ebc091413af431d43a"): true, - common.HexToHash("0x6268e7c6e630e295825e6e7e4fe044e4f744f8ed0f4dcb8e10df691183228e12"): true, - common.HexToHash("0x5b1f1833a0ea3f2619ddf6dfca735c027886bdee8cad507314e5ca3eb39b620d"): true, - common.HexToHash("0xa60515e3cad34c914dda67dd504742c61264b2a2e03bffd1010dfaa89c96c863"): true, - common.HexToHash("0x6c088214caea42dd79705c21db0433894a161f250022b984ae6b5d47c01d11e5"): true, - common.HexToHash("0x20439e5bf8c2644aee0f1aab35533c69fd588bd61441549a2784644b658071e8"): true, - common.HexToHash("0xddb41e0446b2f9969b08eaaed595ca73bb1ff3b761a7ef77a0dc3bc0f3f2cbc7"): true, - common.HexToHash("0xa5966cf3eabdf51dfcb27fb5752a37381f4d3d16393ff245e99b0a32a542ce04"): true, - common.HexToHash("0x4d02695882e806750f93784ae3e4e720023ae22e97e9613980876a4f73c3fcf0"): true, - common.HexToHash("0xc5d52fa4860ffcd22d26873a869c48841a579589af0cab5e85472840dbc54bdc"): true, - common.HexToHash("0x36b03f646f1c00f2cc0f66d9a01a70f9bc326fb6bd527805fb0d8a174db88605"): true, - common.HexToHash("0x8ef96146dfac00e8b77a4193196f3b07aad5f8acfc62a8b3219f56d72cd919b0"): true, - common.HexToHash("0x832f54d6c3ae9b21fc017ebc00dc390b648c9e7524354a8c6103d51e9676dbdf"): true, - common.HexToHash("0x51166f73f5bf23d89025da418b6d78f7b2e7787ccc67a38c6b2022909b419567"): true, - common.HexToHash("0x7476fef2311a62058ff16c98c6069afe95d60ce42b39a25882e8ec04d220518c"): true, - common.HexToHash("0x36ca69de325d3729c40397123527e2bede8b36deb46b3c0a3040d0c045cc5be3"): true, - common.HexToHash("0x543d82b092a3d5dcba94316e2f59003e641bb4b44f37068f93890cdb22cde7ec"): true, - common.HexToHash("0x900bbb850c96372d2170bc496bb6f1fc108e4a8d8766f9823ba99ddd775586d1"): true, - common.HexToHash("0x3e5bfeb6b1122b8741c5bbff8e7d1962a8fe58bbe1eb42ecf9c870e367d7dad9"): true, - common.HexToHash("0x8dfb28ef82e135c5f860689ea4abad0a5c2854a45e4baf4766976516ef51aada"): true, - common.HexToHash("0xc6db2435c9c34074ede1aa87a9abb5f0cf49b86f573baf29a0d5837111b29947"): true, - common.HexToHash("0xb193a2cd878aaa79ee63ad5420b8a143c61e1bf3d43237fd7b571dee1b54d1ef"): true, - common.HexToHash("0xddf68f8137718bd3da1a6de4b0c56f5eaf7d3f9bb005dc4622730bb999d554ed"): true, - common.HexToHash("0x5715cd14ddda607e6f432ce36e7dd5df87b5b8b1fba419a9052eecc12b5a3f8f"): true, - common.HexToHash("0x50ba47387e3e2f6f2e61970abd336ed7efe1cc34412d7528974dc27a605c1188"): true, - common.HexToHash("0xa50d53308858682553ef6478897fa093a303c2a3ef8e1ec1952ebf29abd80f7e"): true, - common.HexToHash("0xff1b3ba928a367a36c88775ef45e665faf20249578decfae633a5e805d115df5"): true, - common.HexToHash("0xddf6a2d6c257b33c9c8bc00e63ea691ce997cad2e33e424fbd3f8c477bfb914e"): true, - common.HexToHash("0x4ef308a4d64161cafadd61fd6719355e35c0eae8b6e4835f230cb9f6dd83a456"): true, - common.HexToHash("0x8920e2322952df8a854ac283c7d41a2c15caf47f4421800f3f5d3e624edbc78d"): true, - common.HexToHash("0x2cec36d6267740f70b69e69eafd850b104b63fbad4fbf43b649f98a069a05182"): true, - common.HexToHash("0xdcbf9c573e30da8ba1d7ebf0972b559d6cff8fd024e875ade1dbd30905642e77"): true, - common.HexToHash("0x9bb35f5d3277059fc2981534fcf848ba56006351add753496a0169c49b6cc1af"): true, - common.HexToHash("0xd7ff74182c52c5032eef115730d1156adbf4cc5acfd1f405b6d35c22085b4741"): true, - common.HexToHash("0x955c0ea62892d3d038ec3815a33ad5f8597bb95cef02ef7d32a85bc906f3d3b3"): true, - common.HexToHash("0x9ad245b19ef959659bfa0d22f60cf2d729fb4fef729bdbacbe0e2f9eb47542bc"): true, - common.HexToHash("0xb7193e0276aff1bded644ef40e34750096352aea05defb5b5c6da325e6611689"): true, - common.HexToHash("0x8f5903247be931b9ee2d2d698f009ef23c73d7ea1cd25c46538f6bc08086c257"): true, - common.HexToHash("0xc7db5b29c7d0f3cbec770ac880d40e5a96a7879ea8931282b5125916652eb087"): true, - common.HexToHash("0xc77b73b5fb14885b91160de719a9a2369c3d5ae69a1185c0d01df7a2b9e523fd"): true, - common.HexToHash("0x5c8a311334d559f85578e2adb743e4223dd76aff379fdd81b4b2eacb55c39e8b"): true, - common.HexToHash("0x14467bb89bfcb81a1cbdd0930307f6b50641d9d8fa8ca5f3efe6e2a0638c20cd"): true, - common.HexToHash("0xc8dd487accc5e52be15ec09534c938a6d577b8b5d0bce79ba06cfad756d35de0"): true, - common.HexToHash("0xf8f8b74298720994a72b4e0268e23238937942be1cbb1444053ad098a590ae5b"): true, - common.HexToHash("0xb4469959268fd1532aaefc043a394a91fee79726fa798237e9ca2b481dc2ec5e"): true, - common.HexToHash("0x6d3562430f9dbcce20de39b41b4905578d6f9496b2fcd26ca72a0dfe2354a053"): true, - common.HexToHash("0x86338be9bcbba5b5f08f46e75faadaa89c3055254882e4e5059a4fb16391a0dc"): true, - common.HexToHash("0xf49de2850cecb0bf7c9275f9c99b9afdfdc2eacdb3770f504a9d027cf5cf6752"): true, - common.HexToHash("0x58e6c78dd3565309abdd4924a4c77f64324726c75e91a9e36b9750456d93288d"): true, - common.HexToHash("0x78007631e440ca1dcff94dbb48558e4f4de19f303ae7b0aaf147269081083164"): true, - common.HexToHash("0x311bd2776d911b11b75535ac8ac50961731c8ea8f1428c329d7291654f9c88dc"): true, - common.HexToHash("0x45608b2f127a3bce98cba5d91b8e6744de7c25303a96359427a4ff73cd9485b7"): true, - common.HexToHash("0xcedb46261f976c0593daa8f29c286e42786f3c151f29df5a6f38cbbcf836e76a"): true, - common.HexToHash("0x5f196019430c98191e63129600dd702b33c94adb0e4d5f82d161d126277e32cc"): true, - common.HexToHash("0x464cbf70c90171c8756011a9269f5df7900d283f9b2995ce5d8be25454e45ddc"): true, - common.HexToHash("0xca46a3c79720efa30e32c0f80243c0afbf8d69ce7755487c6a68c95e30995704"): true, - common.HexToHash("0x6c27f9c27b03f66b1df3860ab82c1c6ed716e68a0c40e8e9147d6664e36c9b22"): true, - common.HexToHash("0x87e51906d1e0a8c2f18406cf0ba141e6b36e0c72ed39a5812b07a0a6a56f06d7"): true, - common.HexToHash("0x6506e3b4c591ec02e90fc82aa3ff370ff578537728e4d59c105f41a344a0e6f2"): true, - common.HexToHash("0xf408a13dcb149ccdbf3168f87aabf557e92d776cdfa1482a3051e33e7590e6f0"): true, - common.HexToHash("0xf51b1fe2048b639b3aa215b5c4d1ac007de54bc700ce9e432f938b1354967091"): true, - common.HexToHash("0xa6f3aa93fac989b79a2e870f40217d5f4f0d162ad6982b7f3d0a445b621825a5"): true, - common.HexToHash("0x138e89e3541908410c9a2d26266f065e8c09814c9aff1447bf159fb26a16ed09"): true, - common.HexToHash("0x695f1800aa70d4cf08f9d44dafec1f356386a83e726c4aca7637fd91fc50ee7c"): true, - common.HexToHash("0x33efe63b18316f2e7f3d6838c4c7fcb388266837f44b1688ed913a89f9d31548"): true, - common.HexToHash("0x03e3098fb3592c61cf2250b0729d02dd259ed85ce0893010a4d186f5c89cc764"): true, - common.HexToHash("0x92bfa510e7283988455f573a451b3422f0f0c7136976dc9be249f2af887c6217"): true, - common.HexToHash("0xd8cd4cc4a330f1a8874a1fcb3a3ece6c4d46d1ecf7028e997bf64efc9ef32bf2"): true, - common.HexToHash("0xf7507f8f3ccd1ac674f04c1676728a7a08876a7f97089e5564a7c2c76407cdb9"): true, - common.HexToHash("0xd5f57edf7a1c934d8f71a076acad0832ab17d72cfd95c98fccff34a9aaf052c4"): true, - common.HexToHash("0x6edd2999197b0531dce508c78840651c48e61f5610e5b92b97f7ad379493e68a"): true, - common.HexToHash("0x175696484ebbc9290f09bbf02c647eb94ce7681a48335d78724b32181fd7eb18"): true, - common.HexToHash("0xf0307603ce94a2b0adeb3b97383d0d89484281bf0ead50d878cda71c48466d16"): true, - common.HexToHash("0x9803f5696595d3c260f1f617dbe7569158103a52169ce3255db7b41db950c4b7"): true, - common.HexToHash("0x780a886d5e11fffb99c55ab3bee31d93f209e59d794178a06b39d04f7135eaa9"): true, - common.HexToHash("0x44e505c42810f1c4eba808867ced0d4703d8151ed95464154c8b15e6e56355df"): true, - common.HexToHash("0xde23dbf26347e81a73ca6a157e7cbd86a4a48048b1bc498b19c46d8824922b27"): true, - common.HexToHash("0x287643a92852cbc780eacf78a209a28b0c1976b55b887f2ddbbbdb71216414e4"): true, - common.HexToHash("0x86354ba567e784b097531901c13c6ac23671f7f4ec01fe9fff006c6e614fa7a9"): true, - common.HexToHash("0x62b763c96ca7987f5d117194dc3a2264ae8bf5f87cef15cb31c22dfc47924d57"): true, - common.HexToHash("0x9b586cbaf90b7dd792d0772542a55bca9aa217ce9ebb24abc509b38345209d36"): true, - common.HexToHash("0xf876039035641144176dda5d19ab7a131ac15b28e23e1c0e4b54f4385c832916"): true, - common.HexToHash("0xfd70793e8fdc107cbde7d77e396f5c93b4968062447dbc6d5e2c9fda3b442b00"): true, - common.HexToHash("0x6e080d41a2c2bcfab5570a6e34430817dcd384822e0f93c80b729bf63b6d5e0f"): true, - common.HexToHash("0x173ad2285015f699855e7c2280fb1f1c8039df9189f3ac8cce3aab255f28502e"): true, - common.HexToHash("0x297fa1e08fa02496b01eb836eea1b9da64b248f99d8d7708b9cb352e5b395d06"): true, - common.HexToHash("0xfb8e9a7f8c330029f9f5446b99582941ac9a575db314040e71053e23aac099b4"): true, - common.HexToHash("0x3b4025ce6815decb16709979435492f37adb41235d9e1085e6183d4629438647"): true, - common.HexToHash("0x3356b208bc1f5449de18fea9a04379e880311ccdda3a769b372c0ab326a3cfef"): true, - common.HexToHash("0x24a0f03b00cf0ead7c6a399384402ed48ae65ae51de3205ebe01e4c34fa62435"): true, - common.HexToHash("0x59af60f63f6caf5b16c2a64c5351181ff9e82c6d8bd4df9ecf6e01b1ad7bef27"): true, - common.HexToHash("0xa8a40939946e5a90fe2567653db7ed7d773776add97e53323eda7f1a62d2a3ec"): true, - common.HexToHash("0x2078580945866331a8dfe396b7496ffb34c6ed52278a3ec8c430e455c4ad604e"): true, - common.HexToHash("0x6471c866ada5e769e41c9571d9d3a22b8c1f424253a8856d84216d7cf242de3a"): true, - common.HexToHash("0xeab422092beb9c1a25748e20e70378dbe88dc891c7df29ff64385f8c48a71654"): true, - common.HexToHash("0xdb6c6ec93e544f7d61a0dd7e9b213513a045cbd7544bbcc0067e01503458d6ac"): true, - common.HexToHash("0x8ee5baedf15ede1dfabe560bc72ce0ac475aa9d7e70b3af43a071c5debfa392b"): true, - common.HexToHash("0x00f37255de599ed7750f6b810a2c662be7babb05589b0e7718de878c8cbe5638"): true, - common.HexToHash("0xef0f3796d717caeb64a5356cad60ab186582682e5535a1ec4a71ab575d31519e"): true, - common.HexToHash("0x8f0a8ce57d92ac96a7da0a5cd8e506882513156e45b07fa3d810ac80b7537a2f"): true, - common.HexToHash("0xdef0a8117f00c40a7739fe5333839c42467397d2a5a5c93d87789e934165e47d"): true, - common.HexToHash("0x70635d96090791abb0cfd0a53c09dfaa4a294cf765c9315bbf272f3b46e21527"): true, - common.HexToHash("0xadfbd856ae0c1fbbf4b9ab8d9da6438da0d0c91866dd6db62f4960f8123af50d"): true, - common.HexToHash("0x22650ad3035a263654bcd580096186f13e2cc1a80390aa69e46ec36231ed9a23"): true, - common.HexToHash("0x9e5b5f43ef59332c194a42b6988d5cc3ca3b0ef5b638a139fb4338dbbb000556"): true, - common.HexToHash("0xd845e0a9431dbe7362fd61c66338dbbf496f6a0c3f664f5462d34de9a8b0c55b"): true, - common.HexToHash("0x9bc647792b6040c5f422f93eda4d11b4a45935a2b84ea639dfb71d885471dcf0"): true, - common.HexToHash("0xb197a69d3a4b484e7e4f28a6f2d0dc47c18525b504018a639878922166886908"): true, - common.HexToHash("0x63c4aaa54af693e38260f07ff197053f41f9e46a2569c4772d72728f80feff1a"): true, - common.HexToHash("0x9d8e8769c5b14c1862b06d5189d5e0aa73968fcb420427a216f8d88bd20b2cc1"): true, - common.HexToHash("0x61c59420538a5ccf3865ea2450fa68ef34a705311d67078f855fcc232e95f140"): true, - common.HexToHash("0x9d365e1e4b0f12b30f99ad5ace8e7bb807b5d0e3d2c67c14db7df8566275d9ee"): true, - common.HexToHash("0x70b48f7fd264ff8ec72d7a5fe13db90d0989d6b5a6b39f5420f29d209dab13f4"): true, - common.HexToHash("0x3bfdd0509f5031370226bb8efb8e5646a8f104976b6127c4e98a5bf9f2643a7f"): true, - common.HexToHash("0xa8e1dd484ca787a30f7c3f5c71ad4cd7a6ba181c86a21e96ad0d12715fdb86f6"): true, - common.HexToHash("0x6c3b34504a340feb9e506f4103433d5e60bcac949cda9ea980f1c4b365c8a3f9"): true, - common.HexToHash("0x1b449bacfcb5281a58310d39788397d6b1853c63a8a1cb381a62f9ad1b3785ec"): true, - common.HexToHash("0x42ba31f761b1baa3c89bca8070e462615c496b7976fd01694b5f753bcf083e46"): true, - common.HexToHash("0x53a002eda5f5563b0412a399f7d4369f6fa968859f0deb89f2b2651609cb73c8"): true, - common.HexToHash("0x3390fdaf7cc6474d65966859fbda316364f0a13fe692b055c0821e353af05637"): true, - common.HexToHash("0xf61b8322f48193f8ac89caf9dc88c1a863a3bdbd0f6393bcb50b5a47fb6a4b49"): true, - common.HexToHash("0x4960d2e3728ade9b9a75f336e2f6296f979bf336c211e36a64b4cf83285307d7"): true, - common.HexToHash("0xe3ecab0079644e238423ba12f989071c5252e23fa8c2fbcf99eb0cbebfdf1d8b"): true, - common.HexToHash("0x4c12513cbf1aef21d946ec33b0e8614037d9cae3d5f4e6bd8ec99560548f3d2a"): true, - common.HexToHash("0x376bdcf7a16011c3b571e8f2b8d3a520404cb7541b8ee59862db877edb583ed0"): true, - common.HexToHash("0x1f8ef7d3c0cd9beca8b06b33aee27f1c6bde380fc9fe4689f70a14fd8d68248a"): true, - common.HexToHash("0x0bac50f7532752ebbf38af4faeb8b5aa75e8ab14f8818af128f6af8fb1141dc4"): true, - common.HexToHash("0x267394acd89a3ede39fff0ff70fad6174cf0c05f693b7ffa0ff41a8fb8e3247b"): true, - common.HexToHash("0xbc3ef8553fe1131bcd90d7e130884619dad416b2db6968d237c623387c13e8bf"): true, - common.HexToHash("0x4a27abfd1fc48d42dab7bd93889642928e67fe186eb1e4ec3e59f07d6c962612"): true, - common.HexToHash("0xbe40e1262112964750244360f1d6f65b8358ea7654a43eec07741733b3eae3ba"): true, - common.HexToHash("0x711d03b558aa647d448f3bba5ee0c6910aad72c472be6864da5aebfcbde68eea"): true, - common.HexToHash("0xb0d041c3fc51458c4f4b1c608d9b9e24db1430edccb9318492504e059892eb3c"): true, - common.HexToHash("0xf88ec691e78957ccfd72bb30b5d0c85b8ce4a3bb7f59e96b1a81e030ebe7ff40"): true, - common.HexToHash("0x7aff19e793da085b1ca91a84070241782954ffdff6eac923a4ccc906fbf86c07"): true, - common.HexToHash("0x5227d8c91058acf238858c2920c0049ec09fb9594af66c51f8572422adc5b269"): true, - common.HexToHash("0x4ec0875a937ab20767ec604dbb52e1b138b699cadee5f921b596bea3f42f418e"): true, - common.HexToHash("0x45aacea6ffaa150919a49b1b9c4c3aa1dfdda574c76d38b9d01bd2838ead2c11"): true, - common.HexToHash("0x0edcd30cbc57ccd87bd2a042b343abf9b68683a25244a7952a4662c131552108"): true, - common.HexToHash("0xd1c9c263331c37dfb0160d5c6fe82d66007e7d99a2f48d6e843e346b1baa2445"): true, - common.HexToHash("0x32f9e81eacfcd0f773cbb2978725dc6e8f0ca14e9dd7e11deaf686472e2252ab"): true, - common.HexToHash("0xdf014b13eb84594408579cfc084b492b4bd7dc41d586d574f71b548e2c19ea67"): true, - common.HexToHash("0x6802508030d6f50eec0e83ee81f1e7d6a151752cc99b3d9e9a8b48a0a79fed40"): true, - common.HexToHash("0x3ccdff26e2ac3e1079da519ab79f3a0a05521fc858126bf526bf94d4fb6cc179"): true, - common.HexToHash("0x1e14f192be005203cd0e3c2846c2bb35356393228f6f026fd88e0509e6534e64"): true, - common.HexToHash("0x4bbbfe287af1a656469fb8224274d49708bcf6124b25f74a8aebc237f17b9164"): true, - common.HexToHash("0xda82bd3ea3b1cb4d450bf0703c35c8126f6602407b7fed69dba79f60bfc590d7"): true, - common.HexToHash("0x51987949cb7efd99efb72680a69616d6dec73dcad1ac13469de83ac9cec77048"): true, - common.HexToHash("0x5fdb8a60c0739bd4e54161c2786d770c826c5c0a7679b3371f05d2f5cf17dc4b"): true, - common.HexToHash("0x6b506f2a4da407b271f6b974077cfb3b29b3e3b5a5d854da145eec230823cbe7"): true, - common.HexToHash("0xa8805a2644f5748ff38857a60f95efb6b424c7b13a23131648f3c101ff26a3c0"): true, - common.HexToHash("0x0ccf15139b3fe6d20dbc94171f68553428d845e1b18cf93bb157a181274b7c95"): true, - common.HexToHash("0x542733f8b192d9567582242946d1be986bf2e927fe32c494e225cc0b8a68de72"): true, - common.HexToHash("0x8d888f670fbefef0502ef2e8ea14520647a35c6ba6b22360dd87586a2c4d1ef3"): true, - common.HexToHash("0xb3c4d34faa909e2b67e462908b98f5ee2134dd2367d8dc64bb4bb8af63dbcc16"): true, - common.HexToHash("0x47551f500c632e2254cae990586055feb7ef7521bb914adfcfd827b983e7342a"): true, - common.HexToHash("0x30c0c18069e5a1bc58fb8d1a4875ca9f43984148d70a444eb50916afde5544ce"): true, - common.HexToHash("0xd74d4f167d7676e415ca7ad3dc68512ba7da1539110cca35238a73b8dcf4da2f"): true, - common.HexToHash("0x4860794979fc8aac5dd122fc2d37c14f38372a8967b73e01579e2a4185ea252d"): true, - common.HexToHash("0xf2c26d26cdd337dae1eb61590b8e99d7a4bd6f4c5aa2eb4a27349181786afad0"): true, - common.HexToHash("0xdd315a59ef40277a37edde1ded648af7093ae8cacd4ab3092dfb77c46d4ae1ae"): true, - common.HexToHash("0xc1fe1858a377b3014b1595b8a12d58cbf17b780f2daeb9188d9961c48e732d25"): true, - common.HexToHash("0x0d9ced154b5359c04173aa2164da4351b4e2cfd3e30c100c818a1f014d74b485"): true, - common.HexToHash("0xf76e30251fdbd15af8544a73a93d300fce1e06fa798f34084e0e41922652dad0"): true, - common.HexToHash("0x63bda8bce2b3cb49fe3548f420c56aa5a56e5e68ed99261a0a8077982f0a45f3"): true, - common.HexToHash("0x5494449cfef2bef91e41af13207504436ad92a693a3bdca4f46ec70bac27b044"): true, - common.HexToHash("0x29a79c5889668814c907110c5a45bb09a0c5ed46f50d919c4ebee9ce12235e7a"): true, - common.HexToHash("0xb951c4aa6e4277c8a7f4a43090e1139e3f8bb22e22dd805dd1bcd6161a587635"): true, - common.HexToHash("0xe781a1166f53c7e9e824fa35be904c91bf8d161aecc7bd1ee874ca0a6edd3d90"): true, - common.HexToHash("0x76ca09f8452477f63bf950e4b36b1dcb38a185e18228ff4bab321541d6584afd"): true, - common.HexToHash("0x5c15f32d8218d20c34a178f6eb400d2bb35a9bafae63a2e981ed30eed0b1767c"): true, - common.HexToHash("0xbe422bd388f1083e0e9b07cc2bd13aa2937e3bc534d9c099ce2bd8ac7ecd8d28"): true, - common.HexToHash("0xdff20638a2bab9b5fb46e6eb3242bd02be6b3f6694dd76b1ba835d7cfa5488f7"): true, - common.HexToHash("0x5809ca22aebaf11b31a04c4665390d56b4e1f46839244ef7d60bdd5380cc92be"): true, - common.HexToHash("0x87a93f867a0cd947bb370499bde881c4f98115de92469f07e9eb156a8b73314c"): true, - common.HexToHash("0x55cf56672c307a856d7aac612646d07c5d2877b461ec68c6161f185e188b0fc1"): true, - common.HexToHash("0xb74bcd144cc57496b646ddbfbde2be5becbd58587fe7ac6e74ab8e5dc77eb912"): true, - common.HexToHash("0x85d3502299760149719338b36c1434d925b3c4e29ef24da93e35284a81c95f5b"): true, - common.HexToHash("0xb964671da20dde2e4a033aaaab4469c7f6b66dddfdc96ed78c9ef8223edafb90"): true, - common.HexToHash("0x884585c65457b5ea0c169eca5357c9d3da4f8425e82614c6b3de8264860af089"): true, - common.HexToHash("0x3cd7d16b9740654aa2497f726ac6e52191da9693f4f9c074dea990bd4dcf05b3"): true, - common.HexToHash("0x8e4fe586cce4ceb3070fccd33dac3f344369bfdd660170e2c61965581ea4c2f9"): true, - common.HexToHash("0xff873dd7e783dfa9c9a52cfdd33cbc92f60d1a90f47f4f235046872e3a1349bd"): true, - common.HexToHash("0xb32211d924e2d8546961cbb7c336f87b6c2adefdcb1762eb61d2362f976b72fa"): true, - common.HexToHash("0xc5c5bb6f5afba43ad11dc0a5548e68f8d430e9e1b9509f88b59e827b6148838d"): true, - common.HexToHash("0x5854427d53cbaebc1d17ca0724d37cf34d7c0b6fff0e2cecd1f93a69b87c1c23"): true, - common.HexToHash("0x48a8836fbd398e9f4640305fb2b3ca01ae1df26e036ed82512b7267b6f250645"): true, - common.HexToHash("0xb8babca7ed419594d3dfaece1b68afb3dd8bbb455da10fb0997519641a38a292"): true, - common.HexToHash("0x1ea40adb0157768e74c8818671db46c2b7e85d69f313152e42c4f7bc850bc78c"): true, - common.HexToHash("0x36935245c50a422d93c009248b0ffbaee12e2418d97e86ba71ad01b5d4c6df3f"): true, - common.HexToHash("0x7831e178c3641ef16e2171028b38f9bbe9902ae105d73ee2daf34c94f2cafc74"): true, - common.HexToHash("0xa16e5a37abd180169675ba1e82aa2b38b799d31d30ceb826392ae5849bf9fd97"): true, - common.HexToHash("0x52f192b870505d0dac39ae611ccd38bc054a891bf933fcc65da113e603038dac"): true, - common.HexToHash("0xdb0dfaf2548fc317bbaaae4681100a6538746cab52c5e7e71bb459ff3cb6ea46"): true, - common.HexToHash("0x6010dea4ad42b77b27fe04057af62be8a954676601c6b05c425f979cd4dd5a3b"): true, - common.HexToHash("0xc6647820d45b9a423d7b0277f4f0045b1273bd009e8f8b6810af713d6a2b30ca"): true, - common.HexToHash("0x9c9521ae90b5522245986df891ec5ef70e66a4f1b440085bbc66b70ddf31e8d1"): true, - common.HexToHash("0xc35fa6d7f5198ed3c1c6549c854592280790a2e6333726d26e27c59a002d6e6d"): true, - common.HexToHash("0xb08a1c4a4b6e04042b4f6c0af1ad43c6a0b900812a3be2a0a62223d6e36bf0bc"): true, - common.HexToHash("0x7ad2f8140992825efb1dc8a901f8341214a50b622329748dd2d0eed6482b875f"): true, - common.HexToHash("0xe1c46864979ccc97c4711dc5c7cfc7ec189804eb0dc46d43e3d526a864f6c44b"): true, - common.HexToHash("0x58784aeb23d5a1956c593051a8ebcd45446ec3e980379bef8ebd9f428be56ae3"): true, - common.HexToHash("0x9cd7c50ad7e86abd0bbbe869980a668cce814c6ee951cd81ec5b1f36d8842ec7"): true, - common.HexToHash("0x38cdde781792f698785fcd68ca3bccb91b03521e64323f331b5bc01d4642afe0"): true, - common.HexToHash("0x7277913049c16dbca8fbd92fff721da26bcd73aadc89ebcfa760b5713e071a1c"): true, - common.HexToHash("0x1fdcc01ab096df85e7acfc7c820bb365c6fa536f5e50f9a349e374da9f3e8d9c"): true, - common.HexToHash("0xd45ba98a5bba6b12362726acd430cf11d0cc2776645c125864a99876c9b5858e"): true, - common.HexToHash("0xf24c68e6210325aa79bc1cb46b348a121e8e3afb98b4b36a06a72ce836168a1a"): true, - common.HexToHash("0xd55bbbfff6a22565073116ca6e3c7af61a700419163a66aae0d8878eded10ff0"): true, - common.HexToHash("0xd8d3d05d3e265fcb1e474c07ae41c2f8cd54976d2a9ece390c6ace8751a31754"): true, - common.HexToHash("0x5f486d5ead4562bb6942a68514b3f0a86a0c0f496722657f276991bad7edef16"): true, - common.HexToHash("0xddcb0a9da4cc228330602a1ce850cb4941cd1d8f41f206a7df8baa9a543cbdf2"): true, - common.HexToHash("0x6ef94d3c76fed69b32c13862c09d9809de279627366c8de834efd3c7987d5b6d"): true, - common.HexToHash("0x77ebda28011d3989d0433819f125541a8f84d67dd291e813c1f9f257b72a7a6d"): true, - common.HexToHash("0x9a9bd5c070535a7b9802878413e2e009df19e85a4d45aea3aec6091ae84454ed"): true, - common.HexToHash("0x35592d22de5fccc92d7a38d5c7553496c9ef1e64dccb642983ae4668670916cd"): true, - common.HexToHash("0x1ba86fcae0fa3b5f428424e131e23c5b8d1306f13af15da934a756908eaa2415"): true, - common.HexToHash("0xf72143f46ef4deac3c46ffe807dd89d4d57cc51f7ff9eb459872613f228e28aa"): true, - common.HexToHash("0xeea42ba1e8084278bc5e9b57f2ece83965b84effa24cc4eaad30e521a5c323f6"): true, - common.HexToHash("0x9b70cfa122157d8aa864e23f40d07200f8d3dc9f34270fc545f5e619befbaf43"): true, - common.HexToHash("0xbb6d0078adf7e48c9ec7c8001e6a0b4e9d2732b1c33f37f71f9bbc361677a18c"): true, - common.HexToHash("0x989faadf4d1fcd822b1200861e5d3447b04cafecc34c9a5e629808b193ab0a73"): true, - common.HexToHash("0xc7862854ff0540abdabb549c6046b5ca555eacc9a00ec3f130030c139272cb6e"): true, - common.HexToHash("0x702095f6e8ba88ca7e57cba01070ee6fbe826a1c324968383899b90de51efb65"): true, - common.HexToHash("0x2becd542156b12c9f1f961d7806e449b14db61ffea72bdd54d047c596d233602"): true, - common.HexToHash("0x9cf05a9ca086575243147621272bf7d1412ba03d2dd19ef3d35f62ded2aea08e"): true, - common.HexToHash("0xdce7b9b8d316fc600c79bad68f9030f92662eb6f023a348d5b398f6e32eb2555"): true, - common.HexToHash("0xa56c01c2161bdbe99d0be3c9beb73dbbb5392f254d01d29f1b0205271d64a3b7"): true, - common.HexToHash("0xb29c9c788effaf4cfd35ad6723c673977c305a653e7bbf8b52a0d7151077733f"): true, - common.HexToHash("0x352c03889c2e511357bc4cd565ef36b028085053ddf8fd8656712042ee442eab"): true, - common.HexToHash("0x394210f8c675ee74b6dadc365ed24bdbcc462d990f7e6950f8d14459f65d812d"): true, - common.HexToHash("0x137449c2e654f9128d5dacaed090245269e3b5fef3d64af4e2650aa25d46bc9b"): true, - common.HexToHash("0x51e5631ba39f41b934c2733194c311f09c8e89d3d05165feba708b7420b289af"): true, - common.HexToHash("0xd5301ffd62ac34aed8bd1aa2f67d72aec3870bf787eff8e20c1ea023e89f366c"): true, - common.HexToHash("0x2cf3b8cf34697e12af30efc79dc11a4c1adb830ad5b742ffaf5110bee6ad62bb"): true, - common.HexToHash("0x408ee6785df4020f3445d1731e6dbf78fceb9444cf5ee7500159f99dabcaa9ec"): true, - common.HexToHash("0xb7d3b1ab54057f2e42d204be055dbd3704ba78326cdb81bb58a42ea2b8f15cb4"): true, - common.HexToHash("0xb1a464d493c6d3a1955a365030fe9e261af1436abccfc3d9dbb4f12222cb2f08"): true, - common.HexToHash("0xb57663a63e100b80cb024f518453410b3528c14d5d8f8a59a40f4873d2c02ac7"): true, - common.HexToHash("0xadeed7aff9a0c151514e42c4930ef36d5c25d455d4ca55b7fe14b0f5cf271e3b"): true, - common.HexToHash("0xc0e2d94409d2e1094063a3671696f4a46eccb1566f3be78b0688539f2e7e739b"): true, - common.HexToHash("0x4124e4c290d805240180f107f4d41b419e00e805d3df1a05cbe3df403265b510"): true, - common.HexToHash("0xb3ebe3d8dc069c998c2ffb4b281c8f387c7ce165a327a66e4b46b785c0628dc1"): true, - common.HexToHash("0x0a0a0d32d371bdfae9621b172465ffe2bb1ab9e5bb59469fd9fc2b98d213924a"): true, - common.HexToHash("0xe93c4dc4c4e7b7db6b998285d4fd5763733f81d968ac58471545e05612a540d5"): true, - common.HexToHash("0x8ea1475fe25571d29e3f921c45caaa8e0cb47faa25b22db62594adf2d4e0e972"): true, - common.HexToHash("0xd59cf0c25219d12488f30ca3f25c4de64b56a42a386e370dd08d05d13831163a"): true, - common.HexToHash("0x01eafa2f977c1019eca314c1ca627ef0c84f6c51a8e9c340c54351a02211c3b8"): true, - common.HexToHash("0xa3d3f28c260ab3cd16499dcc15b3c019b64e17e2bf335b679dcd2bc0d4b106b8"): true, - common.HexToHash("0xc947c41fe678fd31c92cc5102f3e7918b269f34c353c6cad11585691afcfe83d"): true, - common.HexToHash("0x98a91d6431e826068f61334b1d76836f46ae9d761e13391a384963d0f71371dd"): true, - common.HexToHash("0xcf4acc18df33df0b96897b7bb0e38f4722363c9ac8d35df8605a95e5add28776"): true, - common.HexToHash("0xaeca211678859c5c06f60ed85cae13c76f20b4a86e93f2f90abc43a79e948eb6"): true, - common.HexToHash("0x688e160d2abfceab6e1e66dec629e2f187f1ba198fbed77691f7a7da9cc9c7b0"): true, - common.HexToHash("0xa0e11ad9c0e5ac3e23fc342bcad362a88d1b02adf799ac88ca5af4525a11d2bf"): true, - common.HexToHash("0xc0e4cbaa139b1599af43b0907bf8eaeb9cad035348c09bcedca13c1365689bdd"): true, - common.HexToHash("0x14328eb26b1b1164813159d11b86c57db95eb894e9777b640d0c7c960c1b6e8f"): true, - common.HexToHash("0xd249e38f22f5e7203ac0566bdc52ffb79092798736202fb54594c81a609fdf61"): true, - common.HexToHash("0x5cb18bbc69a83777cb23bc426962546892022aa2d06d962692b4f0c65e2cab45"): true, - common.HexToHash("0xd59982b15837a0bfd090f1092c65d512621f647751ce97f67401d30742d53814"): true, - common.HexToHash("0x43901c8637daceadb6fe04eae39ae8323128d1afced8ab7632498bbcf5da74bd"): true, - common.HexToHash("0xfaf918c2ba867f5cc93dee2197ee9b52aadeab43c796dedce67e125dacb36000"): true, - common.HexToHash("0xfba470d3ec99823bfc733172f155911e5d3a5b630299cf03b886e69725685943"): true, - common.HexToHash("0x032a371564f3df89242f958b97a96fbc1af6d9438800c6ef0a77bde806ec5953"): true, - common.HexToHash("0x94dfb8513fcc98ae0ac2d4bdf53b34b96026ca126b5eb25cd369787896e6b7c5"): true, - common.HexToHash("0x691f82ef4793d1a8ad2f1992942e4436161de5f80a2e865048e39b9ec9bbaccb"): true, - common.HexToHash("0x8686e468df99f8ffcd89b7a7e784dc81a8787bea7b7744272e1d746989fc656a"): true, - common.HexToHash("0x2e10093c1ea6ad1a4e67d3d1ad804c5a0655bd39697e3bde4eb27b3f241ad7e3"): true, - common.HexToHash("0x2778cf8c3293ad774672674140759914dd1e662b845f4ede47619c214a6448d1"): true, - common.HexToHash("0x52b239ce3914d78e22345245e2741cade99ea458e7e75ae5b415952673d82cf8"): true, - common.HexToHash("0xe2a08453cc124ec469cb72e80bb49b42baf5df51a2a1dc994c5d0f5554748082"): true, - common.HexToHash("0x96927837c4efd81f84a02817e1a056952608acf0f75b388d5187a091f8d46eb9"): true, - common.HexToHash("0x3904ff794622ed5792ac7d5b6d9658049bc7dadecd248469e814743cc59d7b6c"): true, - common.HexToHash("0x21a0d582c180c8b2d86bc3bbd75e67737539d67ac9aefb7f397d57a8bbb790bd"): true, - common.HexToHash("0x5837d617f4a6664b34ba9fff7def1f4b9a5de20956918bfb365b3fe447e6eb53"): true, - common.HexToHash("0x8318e4fe568e23eb40cf1c905b95c5497f9b1933029a23a1ab08a210400f81aa"): true, - common.HexToHash("0xf78fb6f8c3f350a4f69c6ac3c356454cb4a6b730c89551800a73fba6451d3571"): true, - common.HexToHash("0xbefb233f30587465e59785dbe903feae07151e5793963a4f6409376b7beeafdd"): true, - common.HexToHash("0xebab6d085551f844094bf67b940a1516eff2e92379fa0f78701f7af5e23a08d9"): true, - common.HexToHash("0x44f05a99c776f1e0a72ec90697fc4071cf193e4b6a2f22919db332834ef71267"): true, - common.HexToHash("0xc70a0a2f0dfb73ebfeba768e0d78d5e59484edb87abbc8a88a321da0ba66e8ad"): true, - common.HexToHash("0xf836bccd91591c14dcad494616c6a5d863695dd3da6a44f2f4803f1ae1f615c8"): true, - common.HexToHash("0x1f6e2aa8f6c142a787c5e7bc3644b38cd2c118dd5aee131e919a4cf24c715089"): true, - common.HexToHash("0x310568878ed12670398d9d779fc3e81f49b78f8d6be3b94b404e0da9e55b0d5d"): true, - common.HexToHash("0x4c4c2088b37f9b91107981a578a69d05512b5f387bdd31f4fd428f6a594706ed"): true, - common.HexToHash("0xb7ea65b6685afb31ae09084c090b581c0fd03521751dd7ecf7f57714a0df6eaa"): true, - common.HexToHash("0x584ca12eb6de7d28cb3d3fff371f913bff36dd7ff182599ea6021788bba618da"): true, - common.HexToHash("0xb8b221732f24dbbf9e00653c34cc57a08202471b6db498b0fe9b494276d274ef"): true, - common.HexToHash("0xe6669e2e62da0c794ac48cd69577e6406ac32ecd63dfe65b8b385e24965f18e9"): true, - common.HexToHash("0xa784dc693a059cf106b79f1e0f5f97601723adf05ae46a747b36c05cfe463ae7"): true, - common.HexToHash("0x245f3550728643b24d797b61b859e48c390885d931f97c42f12839d9606d0382"): true, - common.HexToHash("0x17de6238cef02dff4de280cd9ba07900901e378e16ae1154060a1ea42804e3b7"): true, - common.HexToHash("0xb32ea4b70b166054edbd571bbac0025b78ba5fe773c9b6d07aeac451cc9eda1d"): true, - common.HexToHash("0xf29e389f9ad9c9fb2e13b73b0b6e1b4994d6e4bb44e03120d1fb914c171ff399"): true, - common.HexToHash("0x6d7b28852a18fe1101280bab80f10fc225df3b8f0a025779a33dba2da8144230"): true, - common.HexToHash("0x7d08a6774922d88143decefca8064d2796414333cac11eecb29c86aa97616b55"): true, - common.HexToHash("0xfc00b22f37c4a33254afb7d49f3c467dcd966d654028b2b912f181c16f79d878"): true, - common.HexToHash("0x8b2017f4a1205b555428759667ce5d90fd9d9b6d4608a533a261b7fd38fc3bdc"): true, - common.HexToHash("0xd109ba2e5ace530ae92c01fa847a81814edb5a8d3685a84717a53e1a6e79c789"): true, - common.HexToHash("0x8922e1989abca06232f34f58eba64e428b64e3fad2dd849f06bcef4dd5ee86da"): true, - common.HexToHash("0x248118d7e4d316c7b5a6dd93c4a2376cef671aee2f9ae220160e14b6c04f61c4"): true, - common.HexToHash("0xdb2d166d1aaaad666ffccee0f647d7c746716967c9b47691574128864502a785"): true, - common.HexToHash("0x4f57263f15d381601f5ae7a2b3ed3488321b98c370abe212a73d7998deb5e6e9"): true, - common.HexToHash("0x687ce1c637d9ac4bd514657d8689780249660a2e793f00088a4fecf93737c233"): true, - common.HexToHash("0x09b33b71f28e87c867fee90ad2aa10d6f77e3808f8ee174e6e342f3dd8d58341"): true, - common.HexToHash("0x9e01516897daf0b0628e265daeee0ef15ec10f1b7d04eea928fbb3dbf33a3397"): true, - common.HexToHash("0x4b369194cb11b4230d76bd8b3464ff3982590f68a5b06aff312aca070c6d40ee"): true, - common.HexToHash("0x794a1b70c22e36a392e3ea34d24eae43b1ecb8b9d5f5f72961a44811fe45993b"): true, - common.HexToHash("0x585e213b3fb74d279b1dbc7a5be37d8257861fae8a39da3f3b3c956e2402f88c"): true, - common.HexToHash("0xbb478faed13dbb030447fe6f342e53fb86eb362e4d34cb7c8456e277c531d373"): true, - common.HexToHash("0xfa97733886c19ac61020e9a7aa2e71949e05ed8ac768b96c6eefc02b1a23772b"): true, - common.HexToHash("0x891a378c67b91346488210aa221fef6244a8ed56721b2919dfd29a47fd864966"): true, - common.HexToHash("0x1d7ab3ec3a8510d2b63bb1d8a2ccb0669836664220d4432ae0053fe36972e5cd"): true, - common.HexToHash("0x3cf519f67c4f2f22a1a4b92beaf5e5b8465a17a97f4252ee29dc42a20b4c688e"): true, - common.HexToHash("0x1c2e04592984f82d543805bbed53eb23bc131fd0d4b3f2b352b68b515b57e5b5"): true, - common.HexToHash("0x36ab30cde8b3ea5895bb88b913dccbb142c33fb9fab1fc8a60bc56cc9605b240"): true, - common.HexToHash("0x323471e9390d37dc320fe9fcaf5d7d4f996af8b160b83ca491eb5b1d0bbbe972"): true, - common.HexToHash("0x587899368303871d6d0109c7bc1bfa7c1a2d1bd3a22453da8621c2293a4fa53f"): true, - common.HexToHash("0xe7d7cf6ce567b4f04be6724c02f81e8f1f4c012242c84c7c32d355f15b4efb78"): true, - common.HexToHash("0x4e6cc33746ccd88de0f2496260380bfc8b2f3a0ac9ba5cb8684ed87141d68de0"): true, - common.HexToHash("0x2b5add88318977b0973c02528e39d4295b813d3371a4f80e66f6f80138203635"): true, - common.HexToHash("0x81a214053f2ef10d0cc72dc264036b09ce28c5482c1a1b80ce146f9bb7afb6b7"): true, - common.HexToHash("0x14d3240bd2faf52a45ce4ca6add00ac5e92a68e410f8dce1446489da122c8fe1"): true, - common.HexToHash("0x3f2ec6d17cf415976369fdfbca60c15e9b3f2859894ddbc354fb186fbc051366"): true, - common.HexToHash("0x2b04759a79b8bb6055b39f3ef84558c73b078b1a1983efa1337fbc00bc25dc70"): true, - common.HexToHash("0x3001347805817796373df5ea4604a31f5d232f86100cef63715cfd9e1091ce4e"): true, - common.HexToHash("0x9a6ebef3c3dc4b7c6fdbfe275f756df3dcfcfa392f018ff74f652b9755111210"): true, - common.HexToHash("0xee3574c53e26465affe9bfe7a019ad84a5b302de7a89ba14a1d7e7a61db24854"): true, - common.HexToHash("0x7557581935b007f465c1df66a0e5a4344c63072c97c0449090e27b06fc6c4621"): true, - common.HexToHash("0xa8ea9897f5964e38bb5f18982dbf1a22936cf944f7837b0273818088a1d6336c"): true, - common.HexToHash("0x68b536fa5a1d2218cdb099f3a301f7e659bc42728695645fe8b844def67810d2"): true, - common.HexToHash("0x5584ebc6dacee6d8f4a9fa563f86bde32ab6730c2aa6d4dad76bc0c14bb77915"): true, - common.HexToHash("0x7913c0429cbaf33a885906ee9e1fee650abafd4fb317482082c5f03ca852955e"): true, - common.HexToHash("0xb2cf1b1f2b83237607d7fed5c43f3b27a1df6d1ee3e45eb678689bec5f21298d"): true, - common.HexToHash("0xd261aaf0a4d066bc0aa2aefc947f2ecb9b232840b9266fba0a113023da442915"): true, - common.HexToHash("0xb360522ed91ee016dfffc6cd7a5b4a72dfc67bcab0bfbb5fa61d7338b6e1aecb"): true, - common.HexToHash("0x949823604c2ea2d9881c5627c1177d4473e6feae855f6b30a877abc1472d65ae"): true, - common.HexToHash("0x60dbbb19d432fc2c201b3c31141b657bb8ef13fc43caee24286a03f30a27c839"): true, - common.HexToHash("0x1efb2f5835afd2e85b9333a1da14226247db9e2d8c6c3a51fca4e7af0cc563bc"): true, - common.HexToHash("0x00ee479ee037648fb49741a56e52c0fe3d8e414fde83d073ce5e177cd20a8fe8"): true, - common.HexToHash("0xf73be5ca95940e4eb998a2d25214bd7c257a1f3279be708a9fe3032b4af6bf5c"): true, - common.HexToHash("0x9dd0699cd488bc8a93dbf063066ac8df23b435333d32227081a9bfa115d8ba61"): true, - common.HexToHash("0xa7c61eb620c31ef17686edb161908e9597f9d938ef9bd4644340dc3b2b17b495"): true, - common.HexToHash("0xc2beff0cf4c2b2aafd11e44bb3d187ea1ea9d0e5d2ecd486a7b1650cb71cb670"): true, - common.HexToHash("0x7bb443a127785a5b8d0d0d9d844b9fed80f185b2c3cf725beae9c79b9140f409"): true, - common.HexToHash("0x6a137f2114b3352ab7917a4e4b3305e2d0f1a339057811fdc04f36ab1f173d37"): true, - common.HexToHash("0x7b61ca455bd78448c2bc847ce7b2afaa2d56de2b83e2cf6ed4b2a218c21f91a2"): true, - common.HexToHash("0x83b69484ecd064b4c0c70754049e66394acfb953837c764fc050b9cdd69ebbf2"): true, - common.HexToHash("0x9f8f9ab2bd61157c3d3367016a5f3633d9291c4b122aa203f557cd659bb81c86"): true, - common.HexToHash("0xfdb78df24d20cc309fca77415902bcb752d5dba754c4767a8103dfba439635b6"): true, - common.HexToHash("0xb13ea1d1d49679e1ee95c405eb4a7a902ba5e17b65b65f3f129ded072f2c6c75"): true, - common.HexToHash("0x1e5abb7e5707a1e3648c7f81d928e67d5445c6fc3021e8368a6b7b65b8d2873b"): true, - common.HexToHash("0xf4bc77bbb0ded49f8003900f34d0f648485a5514aa1fc3cceae0dacb9ef3e816"): true, - common.HexToHash("0xd0bbf1fcc2ca723fb722a5dc32e9f88686e51464c1c26b37882c02fa7746dd2f"): true, - common.HexToHash("0x58c4de5ff88b42c640576a4ed0b008dd04d27a9901735613c93468236671a117"): true, - common.HexToHash("0xcab7417a34accbf54422e39241d210123094f4923fcaa363d40242c6c9530531"): true, - common.HexToHash("0x64a63c9037de06ff378be151df093fce11b6e2da7356ec08e3c921a7a79e1028"): true, - common.HexToHash("0xa0e315fe64b662c362a69d28a7f7f5472bf701e4bed8ce40f884b2c84cbe58d5"): true, - common.HexToHash("0xbfa7232411630812828135635d20d373ae254e2f000908a81cc16c83ea813144"): true, - common.HexToHash("0xa0db0c2beb52d6a3a48b5b37c9f0a55e0f4d2f20bd9af07731be75587989ed37"): true, - common.HexToHash("0x269c6737917dda5013a59cf05445d91b600f08fdbb571e9a1295a9915e369f8d"): true, - common.HexToHash("0xbc7564220fa992f3d214f781933111d242ed4bebc51f21f0030c94a7b902f7d3"): true, - common.HexToHash("0xa84dc213f2872cf988b2ed25f9e3e397c3f100ef04914f51be1efb6397490de3"): true, - common.HexToHash("0xa7045e78e21e35265f7ffe9ed40709ca8a82836a141f5ac471baf018d11a0c5b"): true, - common.HexToHash("0x20ba5c350f44e130e55911836c2303fa8d871fe44a8605be4fbe70094f56aa13"): true, - common.HexToHash("0xd560f02f2d9012490124c7cf728344def93126963007b21010f3933660973c28"): true, - common.HexToHash("0xeba4f8c51b40a86c79311bf16ad0d92fe8bf23284ec78735804a121970090cd1"): true, - common.HexToHash("0xec3f7ed9cf451d4553cb2485348589d3ab7b0684d7a1af37ac73dc88bced7b9c"): true, - common.HexToHash("0xfaafb471305d191cebd787efafe467eaea5be64c23299e83d02b0188358e6251"): true, - common.HexToHash("0x1ff7c297e6f9d4cf6a5550059bb3c342c5f46257e93fc75880359cb72dde2ab2"): true, - common.HexToHash("0xe19067f47a70311e70abac8ed394977ebed6773cf146db8895423f442cb3ae1f"): true, - common.HexToHash("0x6b88d70809490e39c250d67dbe8f55335b765a37fc0a888659b06fa8d8e7cf9c"): true, - common.HexToHash("0x03e7588895d36cd74be69b4e3521af8222ee910e8d22cf15d90da9b4e2fd87d0"): true, - common.HexToHash("0x9dc5f534c5ad1e379803809898e6b6119bc4be47c3fd2a89af0c26f43c038b0d"): true, - common.HexToHash("0x1e8f19ad4c712e75ca0d3c40b11dea1cfa88a4abb2e63a08e97637c5ba7c1b6e"): true, - common.HexToHash("0x5d5b3cc75fb153a162606f0315bb062198161d225bebe290f70133133403b9ab"): true, - common.HexToHash("0xd05fcbbd381e1c948adddd45b21e0771b7cd3a2e3a547de6f5e2cefef5dca722"): true, - common.HexToHash("0x7c821f3aff6f30077d83ab6725d1beb2a8fe7751c5af419bb93768b8012c8b7b"): true, - common.HexToHash("0xb653a43d92246ec4e8e79f09ee78a1ad9a85bd5786625e3662272086113c8f43"): true, - common.HexToHash("0x5940ff76c6b168bf036fc7ad04048cebfcba2c408c3fe4e23da7852bd13d6b92"): true, - common.HexToHash("0x65cfeb4cc4f156f2b51192f7d5c7a0b59746550ec05e530785e1bb9239c0b93a"): true, - common.HexToHash("0x1b0d75dfa0f4d7174d2a7d9bc4819c6f13b4c50d2001163d831d0e8dcc29b34a"): true, - common.HexToHash("0x560d1379d5658ebbb69f5ef38c3cc6760460fa4ab9d1ed2cc6337c8a3162f90f"): true, - common.HexToHash("0xb58a1e9cd13290e5fe38f47abc20953b0ddf1ba08cda7280e5e4d5518c73f177"): true, - common.HexToHash("0x73d7b0e12cc6c3a204f7e79dd3fd38f7128cd130e1b0976e63d3b6ee47f587a7"): true, - common.HexToHash("0xd656160c2e7b9e9a08623fcb90ca05488fb41e97ff81d55ccbc6b7eb8c55e1df"): true, - common.HexToHash("0xc1e0c1aaea56c261929e1c9cbcb6b9c6c9b314f7f17e79d392dec759a70ccd4f"): true, - common.HexToHash("0x9a589ec63e01c3d66317e09ce9b2aef3970b3773b89e3b19db6fbe367d127d04"): true, - common.HexToHash("0x0af4da2f71c9e376659627530c9910418e423252dbba1ed3a1b205754bf9ca4d"): true, - common.HexToHash("0xcbdcfbdbf567664039fd49252ee7f7cc7dae8ddf84b08bb4c44843308168fbb9"): true, - common.HexToHash("0x1796da961d09c71825eaa1a86025486232cfa13c7ac4eeae7c977529b456a6f2"): true, - common.HexToHash("0x9979a5ad14dea37ed37325246a1345cbce9eff0860b5fcafec5a9c5c6f6651ce"): true, - common.HexToHash("0x35b059fa074a9fafd796ad2593a74de06cf53ef204680b64489fcbd9766a5ec2"): true, - common.HexToHash("0xf4c5a15fa7924e3f565ffe5da3f5106d709b376754d41d6b0b40a9cf9ac9ab3c"): true, - common.HexToHash("0xe0ad563b8befda71c153ef206ba49ab6e6d8d863f1fffb2e87ca1852d51314d4"): true, - common.HexToHash("0x2a415f2b25c37492096ba9267a675aa75ff0d082e6ee0d8e469da22005b69051"): true, - common.HexToHash("0xb96e615e29981750d2366c95275068524c49be289ea3147dd138d8d14783efe9"): true, - common.HexToHash("0xaf4effca5548f44a0cdb7c39d2883ca4005c2040f74526a82abf23aa59804514"): true, - common.HexToHash("0xc12fa15564b8dee4e979e08ce021cf387a8423c3bc7cc52d5c12316ad704fd62"): true, - common.HexToHash("0x802a5bfb2af254add4d36ca5dc975071a8e2a8df3c1bff81f9e6b03667b567d2"): true, - common.HexToHash("0xb7f1c1e8686392dfb74402b6ac3c0054f8bb42643f58b1efcb7c8dbe6f2034e1"): true, - common.HexToHash("0xfebf924cf06fba5f28ac3e51badef2696cb7c87b5592c7766410fb24cf10f6ae"): true, - common.HexToHash("0xc37073c4b7ed4610ccba321a72705ebde0d4376984e5035114f7bb8e30d85134"): true, - common.HexToHash("0x858e28a76bff36c89004926a89417619f67393ecd78111df8eb4897619e334bf"): true, - common.HexToHash("0x16a18b7f98a8a5ef288650ddd36bcb858b3972d28a700759fa46ee1ab96e5e4a"): true, - common.HexToHash("0x5ce6bff3ca5c11b39843f4945308ac4466cd710b2a9539b27edc811e44534377"): true, - common.HexToHash("0xe3d2ef44500c7355d8c728759ac6a3f233f42531ecfcb3060f911d643b363caa"): true, - common.HexToHash("0xeacd87e82d9befdd295f97cb324fac7957305e8583f00d8c94cc2ecb7602fdac"): true, - common.HexToHash("0x97d518180744404d6b811e664bf7035504181838275053d416aa64296078112e"): true, - common.HexToHash("0xfc953ff61f519f4ae9490dcc026dcab53f12976d3be8b78be801b059a19a6147"): true, - common.HexToHash("0x3137b603c4abc1f78fd792b118b7c4e8df2cf020a4e3b69cc585053edc77f15a"): true, - common.HexToHash("0x5ca1912a5c20ecb7f1bfe1587de518ac354d852a7e9aaf76c7a93d9614b69018"): true, - common.HexToHash("0xb9408583968b060f87b70ff980d40afffcd40d4f471a9464fcf2501ee74f59ee"): true, - common.HexToHash("0xb650740b6530d05a01f42a97063cf427b02dd994b6372cd73bc1c3aae032be5b"): true, - common.HexToHash("0xfcb0b8c897705b797bff68dc34afc9acf95f18b11f9c94f4cd785dfce168f1bb"): true, - common.HexToHash("0x216847040a1e3b768eeea13012d707fe7cb66ec9fbe15a2d2f18d36db5c86d1c"): true, - common.HexToHash("0x8afe4833e5eb53ccd5a16257a95d02b169a742e4c465742659a54ee53c4d9602"): true, - common.HexToHash("0x9eaeb93a95cb534a3cb20928894c10edb88ed3f84fc5fdc8ade224a926d6766f"): true, - common.HexToHash("0x927064b6af6988da3486b9b44d355f9d61859d9f555d5067b3a4c7cf7f3063ea"): true, - common.HexToHash("0xa76ab03935c45132e5281782e96f60df4e44302d55976605722ef76b76cbfc55"): true, - common.HexToHash("0x2a8e73fdf3fb6da37802cbb1438fdadbf10f7d9c8a5654f1ab344360b8dfb482"): true, - common.HexToHash("0x74ee4a9bc4092f818fb1e3cd3fdcedb86fc6e285e618afb1264f3ea5a0f07d0d"): true, - common.HexToHash("0xf3cb16cec501ac6240a62047b245d63d61fd75b9d5a1bf89b455309c181cf7ee"): true, - common.HexToHash("0xde8a04fc722af93237d082544575ad0ad6bfd87207b1d64f1ac8aa0748cc6515"): true, - common.HexToHash("0xb7fd635ce2fc12951fdbf9ef7145e7f0c2f9ad120bc14f5ef80b504d94c2153c"): true, - common.HexToHash("0x25ed12fca7b4857a448b518cc7412acb4947e94e95ba9fb7364aa5821d1a5cda"): true, - common.HexToHash("0x33e7ef3011c069b6ba4e76a58c7a0d2990394e58905e4d0d9d0f672c1934e8f2"): true, - common.HexToHash("0xc390796961f1c74ce2085a6be8c52535153a160f7bed270f984ec36b1cb4f97c"): true, - common.HexToHash("0x363c5d37e9a91c8665e71efdc71848fc75a12b9b375e2c4072b3114c5d69750e"): true, - common.HexToHash("0x8c799d64022065367034d8b83827b0d5af5d1ddfb4185932a82dd3997ae85f6d"): true, - common.HexToHash("0xfee75f0608dffbd9402d0620ef4e5ee0ffbbfe95197bba038e337a583f872761"): true, - common.HexToHash("0xc8a97e35ff70ed417865ea44434a6a2469c9ece81e077c73886485b202312a23"): true, - common.HexToHash("0xe432b36bbc57c0238f825351a523926235f7187406bfe69308fa4f8e10483b03"): true, - common.HexToHash("0x81e3cac6c4877df6163a1f7049151e51b3823abd26901837131b2f8d5a864948"): true, - common.HexToHash("0x1a4eae6997dcb6dfbe127300603f83bbe7c2fc71b892df9b6f8f8b988d144d70"): true, - common.HexToHash("0x6b68973e0200bafc5712c7bfea08ab22c304b1c9c0aa480ad2524b8298e53850"): true, - common.HexToHash("0x8ae57292e09826d93ca23501efbf1028c06cd3c88521e56b7dbfe36c9c6320ff"): true, - common.HexToHash("0xc99c38bfee2cdf818f110ecbe28c75801c688b5c68cb732f45400a2fa8c90abe"): true, - common.HexToHash("0xcc148843086560dac25661b10af3b7dd85f5db228d1fed7b6eee38e76bddafef"): true, - common.HexToHash("0x488b4a431b70242964c3ac0487d9c8b31306fd91501574a87c2bbb0838bee081"): true, - common.HexToHash("0xa2cb8a3750a690b35f98dfc81ad35c6439c39aa3a2745da04718eb9236ae75b4"): true, - common.HexToHash("0x5a73053d64b668596d0e77679b1e91d68a9ff2d8ec57a241b7943d2ab6667762"): true, - common.HexToHash("0xf644be1ce0fc375ffd1c06b11c4576bbe1b6edd195dea09de861a46d8933f78f"): true, - common.HexToHash("0x59bc46476dfaad03e45522cfd26c17f8dadae9d690ab0d42e99e8e2e22dd17a9"): true, - common.HexToHash("0x7b39ff95100765fb861f5411a95f33b06e6c157d86fbb6723f9d5c2e9d77837f"): true, - common.HexToHash("0x3bb978c8b8d8d1a742494536bedf35d8078753c7a9e06962faaac444ad82a72f"): true, - common.HexToHash("0x14f53a84f1201f07ae1cf1bb5709e1835e2956df692302b759d5b26b81326884"): true, - common.HexToHash("0x2d682fbe2a766689ad67d1b5bd86ca986f7cd82471a623d85bd4dc5fbcebeb4c"): true, - common.HexToHash("0xa50e6d8bbc4dcf3f1101d7f8ea0491805251656e787c5005d53232497fed26df"): true, - common.HexToHash("0xadc8c14381fb6764cc36d72e05733326cdc300400839382c903dfbd014f848ed"): true, - common.HexToHash("0x3c4df3c5208228609a35211ce357f7b1add77c730037ed9de15a4ea9c3b662cd"): true, - common.HexToHash("0xbbbab8954050839a95ed26430fa27c957a14bc7928508beb72d461af8a7f2a77"): true, - common.HexToHash("0xa5dc5d7b5da1592c04d09b34862ecd71c907784e26c9c1ac6fd3f6b6e64e604d"): true, - common.HexToHash("0x659377f3fe9185609d61527b4d8fca0a5187fe8ae9cc8fc76efadf28bb27c810"): true, - common.HexToHash("0x634467cdc08cdd0ba8e9c39600306f7537f207b1cdb0f187b18f66b22dbe7dbb"): true, - common.HexToHash("0x46de12cfcbc9566b4ed07dacfc7d63ebe46b88e60321d9f1afd2e532597c213b"): true, - common.HexToHash("0x6ee6c0cf2f4a9189bae0f995740ec2dffe0b78f8510906de81d0d78d0cf65dc3"): true, - common.HexToHash("0xa7ce77f8ea2d1e87412a8a6c77c1351ea3ea985a7a409a398425c6a4af765b14"): true, - common.HexToHash("0x2bc8f75e417d6bdd15776c543471dfef747ea64d7880d626dfaf97614e51f5c6"): true, - common.HexToHash("0xc9124af474d12ebd45e3765120a1bdaee23ef72ac3c1cf4aa533808c90d6a4a4"): true, - common.HexToHash("0xfcd2576ada71a722b646bfbd36ec2a3089b2989b978f95f22742daea60e0051f"): true, - common.HexToHash("0x43e42639b01dafc83feb3afcc275d37213875cf9ea6a1cb08c0a6811d5318c02"): true, - common.HexToHash("0xf71f2a2f0fb56cf53930663335295fdeee16fff3b0f814cce0bf4f55cbe731ab"): true, - common.HexToHash("0x4fbf841bfcc7c432c5dd92720423e9ad45f9bc8d53edcbde218c35969f9c6a3e"): true, - common.HexToHash("0xa280e7438852c1ef21ab971f65f04e7b6de6df11de6d57156a7828ef13449801"): true, - common.HexToHash("0x325d389a56306518091607cab0568ee86b4f6bc8e5b4bfda5cf96ae14397d2f3"): true, - common.HexToHash("0x8a13610ff577758a681b825404505981b229893606122d038befd0fdb89c320a"): true, - common.HexToHash("0x129ff72923e54f0b7fecef084fdc0445e19df89aaefd8c373080f9fc897d63cb"): true, - common.HexToHash("0xb0b6ac09d5349af38e4994434c9b5d90f2a8196c0ac2ccdd4638fc9d4cd8d89d"): true, - common.HexToHash("0xf6c48b89c54a213c9547d497d5d62a70efbafdd2f23c3c2f9c9712b167a68a21"): true, - common.HexToHash("0x0ce71c5cad6d5b6b61250a3e5b4fa15564339b19169431bcac6894e17c0163ec"): true, - common.HexToHash("0x06a9ce8d8fb01491d5f21d47aa16a5266379dfe1bf32801ab4dbed3652f76c7b"): true, - common.HexToHash("0x1d32b52a44e281f20936ed128a51f57222f3d0a4f0b586ccc6efd2f090142754"): true, - common.HexToHash("0x5b45916cd82a9d3069e200afdd413d137d50b7e60f0f81d4874a12fd9b073713"): true, - common.HexToHash("0xeb518a82e24999a3ed9a02ee6a44867e8f0425a835e50945506578bc35fc32f6"): true, - common.HexToHash("0xb7cb0a1bce6e60d3910ac5571b08ac7a2fd274030a12cf5365e6b389394fd4e1"): true, - common.HexToHash("0x138dd534ac5572ed5ad90ad788d797c89db647e5b42fcf19cc07086c7223bbd2"): true, - common.HexToHash("0x35578f729ef7cea3bce68d484fb4543b43f1039cfc6a10675e1f0919fe8c7566"): true, - common.HexToHash("0x516a6abdd29d8a8b3e89875b95510d2e74b9da206ed2a05a3ad199dd1858f3db"): true, - common.HexToHash("0xd20a19e5bd8f3b3eecc576c70b9ad60558997e34131c0639c84c16f42c403800"): true, - common.HexToHash("0xc6abd2fb13752e24b7656a6936ee325be82b0c89eed00a61888ebf1456679575"): true, - common.HexToHash("0xdaddbd52f9a9353af52fb720294328e45e679d63fe99f4b4583fba417108f18d"): true, - common.HexToHash("0x4a118aa331d24254b8a64effc427571928ae43b01f689c08ce43d7dcebbe91f0"): true, - common.HexToHash("0x5ea45a3ad7968871e09bea2955888e1f72f81d7754f380dc0d43054614ab82b2"): true, - common.HexToHash("0x29efa27ee0e25f7c4c3f208dac5126e6429d232d5dec56bf06514ee349ec482f"): true, - common.HexToHash("0xe27f08ce85e7e05f391fc8321a36020f109604c8a0bdefb911bd100c35fa31cc"): true, - common.HexToHash("0xe9e27755f41f831e79e98df0fba3bd0e8e1ae0fd8d92facd3ebea47925b281d2"): true, - common.HexToHash("0x753ab1058d6697536dc1fc80c8c1aea9a2e8b34122f5e823aefb40c71aa14f7f"): true, - common.HexToHash("0x928e89c7359130d8897a9450a04941f76e5f44efcfabbc5a92144516cbae9635"): true, - common.HexToHash("0x19886220df06b8395a53a177fc01bb718f6e8970debfcd694b5f009e2e864db7"): true, - common.HexToHash("0x07f4883dfcdbce9304b2a7cd2ec95fb3cc535013792673ed7c0afcdb1545b01f"): true, - common.HexToHash("0x87e1610a489a8b52da6fb2afa18f98932fe62be67b254a139d22115c080fcf52"): true, - common.HexToHash("0xfe8b27a254fb0dfb019095ef2ce5782b5e55c18023b5c9231a0182da64b4733c"): true, - common.HexToHash("0xa0419aa1375c38bd48dbe67f1871ab96fc057a71f837fab16f7d9844f8f729ba"): true, - common.HexToHash("0xfd0ac4cc2a2889a5516273daf4289d63cadd4081ad975fe45807eade625f6ea1"): true, - common.HexToHash("0x969ac6a28035029b861efac40ef43e934097542d4aa6459cb329c1aa8c268a41"): true, - common.HexToHash("0xd6caf3058a0e6d22ea3fae1ef8816bf3f482f84531f0cc4cb055cca9a996b079"): true, - common.HexToHash("0x4bb925d4eb20d8aa4d0a8b624cb15a4c248de7d5612630456adb12f07ad7fc3c"): true, - common.HexToHash("0xdc5e27165d58e6cea61d1d663384a0a046c6d9692ce7ae6a6a79abfad55c8fed"): true, - common.HexToHash("0xb754c417782863a02135021e1492e71a47fd930990daf0dd53acaed53ab957dc"): true, - common.HexToHash("0xda35c71aaa2749d60305bf3815175d18c05c560692a093d5b2f863a0c8059318"): true, - common.HexToHash("0xbdfd60da5ef5dd74aeae4d14d352c7a1b7d5c637c2204c8d286c2e52a5909566"): true, - common.HexToHash("0x634116eb21010cc3ede96f61cb430617120484e02d0d9d0207c07193cfa4cfe4"): true, - common.HexToHash("0xa51a0797bad821113b315693e4092be2aa8533a08e9a1bd8c6c1ea4c459639ed"): true, - common.HexToHash("0x9301dfc7c43ba66c302e9b02902a367732a04c8004a81684b41498417c542986"): true, - common.HexToHash("0xc73151c3149df1bf7ab7b2ed98a26853cc4ce6c6210577ed87e7561a10e6225d"): true, - common.HexToHash("0x1be6138a5234cc0d45806f3c64c1d8d65fb786ce7d5ac9d7cdd636b8e0bbf611"): true, - common.HexToHash("0xbdb450a6fc19819fcaeee5e41f21b75a872c81c224f48ea342effec27f4bed2d"): true, - common.HexToHash("0x0fbbf9d2222365d3aab74e898155ab57967de8fe21a09a300218903539512d59"): true, - common.HexToHash("0xb95660b55be62877d6ed498b7b1e3a86d1a26df51e00999f100312f39e527bae"): true, - common.HexToHash("0x8f61bfa3224ba75b10b64341be25db09d8f7adf447c1e64f25e51bd72244eac8"): true, - common.HexToHash("0x52c07aeea0aea5fa49c934ae092d6a117b26e34753367c9eed3f7d5213de3bfb"): true, - common.HexToHash("0x6f0a8ec333da34fe57cbb23f375b4e375779e603f7d48a6c9477f5d101532a09"): true, - common.HexToHash("0xc5f2f29a5c9cba2ce1c7785d0c2a48ddaa1624dbc4d2fa2d903657218e24f32a"): true, - common.HexToHash("0x44a6d077d6ddfeb1c884b68de4d5080a7e5826fdbc7d0963075d39d65e0db73d"): true, - common.HexToHash("0xced5fefcf30e6f9b6a64d52684b6163a82d5e44b76af6580b81cdfe703bcf020"): true, - common.HexToHash("0xcc77c8ef3989e3c1afb1c519e68361988fd2bf40621dd732e23a95e4e87dfd87"): true, - common.HexToHash("0x142ed43e9eb9af4eff8a2d099bb0fc4f071fb5dac35861190e423431de00d57e"): true, - common.HexToHash("0x3186dde55b2280cf339e509fae5782dfb15a094053132e54af0db865c8b6312d"): true, - common.HexToHash("0x38df54e167b3a14fff6da7b1a944b4545c609741cc54122d7eafa0cc797b2a08"): true, - common.HexToHash("0xc729adf566932b7383a5aefee109681e03367ef0a854a4a7c7687c57e7b42c41"): true, - common.HexToHash("0xd957da451e13d85b2fcc4a31eeda9d8acdb2e667c6a28514d69744395d9c5ebc"): true, - common.HexToHash("0x6a3b58a3280a321677ce4da349c6691d8129f6932207667edcbfad911345cc60"): true, - common.HexToHash("0x9f2dda7911401a66ab4119495c931a471ceec4b7d5013efd9eb51f62cdc04bea"): true, - common.HexToHash("0x0d6837aa1e7ca02c395dcc9386bf1c66d7a2a6439d8135bf9e5f89006096271f"): true, - common.HexToHash("0x3a84fec98f27ec80175dff3c73ea33b5ec9bfa4d9a20f15cb72c0a79a2218a77"): true, - common.HexToHash("0x6080dc4c3ac9d227150fc0cf094b40b7a5393ab7c258880b93f6103acea51df5"): true, - common.HexToHash("0x160ac263637a6a346dc84245368b5ac5b5d3bc5621b8839b4d004b153f429d72"): true, - common.HexToHash("0x9a2d6c37c095eaf96e1b96b6020d7dd192c1365d8139ce1b8570636a8c1b43ba"): true, - common.HexToHash("0xa7717780dd0d3dcf51b5ac99b083d71058ddf6ea63e7f10a1886d8f20b1a9111"): true, - common.HexToHash("0x56aace619e32ac0fab4c02584ce18f36931056c0d912bedf4559150114c04d17"): true, - common.HexToHash("0x6766617e6f147aa2e12ad87e6c0d1bcb3e190e3e42ebdbc2b7e870a923ce7b9d"): true, - common.HexToHash("0x772457dce5d64c3ada972a8c564abb451f9b35889a5dfcee358fc6210209ea5b"): true, - common.HexToHash("0xdb55501d70565fc2ae665c69c061bae07d3578467f760b69bb5bd26af6b58701"): true, - common.HexToHash("0x098ffac8f01d98b1f17bdfb56c1c00e07d0d208ea58978025f39f810df3f1849"): true, - common.HexToHash("0x8ed3c47b378926bff871531baefc1c29fbbcde505e113505333aa36a509d24e1"): true, - common.HexToHash("0x4dbaa0b3b11ce7cb87d5155ca87d47103a79b0e90f12cdf08facc1e2f5118584"): true, - common.HexToHash("0x0e8c8bb18982c04ef518f57a1c2d56fce7ca7b72c1af2971e07b6717a844c105"): true, - common.HexToHash("0x251b1092146a96e3192901b3f8079e306b089c70802eb7d8f65b97335a6f8d54"): true, - common.HexToHash("0x9a9c41c8032a6b2e77e25894782f219bffec67d2d6db850dfa413489b3560cb2"): true, - common.HexToHash("0x8013550509d610d2130fb269de7563e334588ca87285ff1d4780620dd848a919"): true, - common.HexToHash("0x204dab3c63325e5e2f7f25a457faaf6de5227be6714cc984a11507612f5e233e"): true, - common.HexToHash("0x75c9fc829c23f30c28086c28aa751c364905e6647ff5ec4fdbba95669781ef7c"): true, - common.HexToHash("0x792ea8f37b715e2f2090ed32bd8c940e0976bbeca65ea6641345b3b7ff380c0d"): true, - common.HexToHash("0x855d097289f1736d9fc337778c567d7109cee40e4c24043d9f828c69cd2267ec"): true, - common.HexToHash("0xa454cff96b5e4ca57b0f9da6842505083146014a431c617e711ee83704ffc99c"): true, - common.HexToHash("0x4b29339ae4164ab744021952b329426810fd2c38b0d0d0b708065f58aa46f92e"): true, - common.HexToHash("0x967af9acec4879676be3142154c161d6088278139ddf046f3003963cbc718f87"): true, - common.HexToHash("0x24649d158f6146e1514f4ec9273858f271261f14d620f38c6b14701d4328aa11"): true, - common.HexToHash("0xf77b4c3a9a10046fc23b8bfda3a1e50f67c0e73ea4be7997f49e847249dfe41c"): true, - common.HexToHash("0xd12095ebdd673b4fce9e64f43291dd193c4794557ed0b254c438c5878af0f779"): true, - common.HexToHash("0x8d184f6c6e4d64052a61de20281a56bed3a9ab999f2fe3a105193a96a9e111b2"): true, - common.HexToHash("0xec29a74a3c1d448e99b6c21e0eebe4a4f89b0b924fe948c09975588174f56e9f"): true, - common.HexToHash("0xb8a9f4f9ec5e178f1a8ccc6fd064846502ee1293db19393158da88f326e542de"): true, - common.HexToHash("0x88a3e14b5443b8da825bed6c041f6dc1077c317308dbd380817c77b61f6d0a72"): true, - common.HexToHash("0x8774d7166058105c25e74e09fd3a4dc29fed33c3ad22d2c00b64791c5a46b827"): true, - common.HexToHash("0x6fcc8a85e1ef5fbd03258fd05125a35ff815e11089e2f7ac8a4a206c01885d7c"): true, - common.HexToHash("0x0092778fe421eeedfe95af8301f2d6f17e3724f4c196376de1d662978d02dae9"): true, - common.HexToHash("0xaebc0e0251edf2826308876cbf84a66fce4e25744d0d8ceb212551ff1e3d4885"): true, - common.HexToHash("0x04536aa81f688774be52a295ffda0267d7cbbe1d717a330bd61670f0b2d7e0e5"): true, - common.HexToHash("0xf2727c1ac965a86566ae4b71c4a5b16fab7e13a2a9720e89a7ca6437b246d17e"): true, - common.HexToHash("0x086dc5643163b3043ba64ad71fffe093231b861b4029221a6c4944eb7d4b18aa"): true, - common.HexToHash("0x6c23c40e492d82f87b18dcbe5104e4be02c9274e527e2cad59a3fcaaa05be775"): true, - common.HexToHash("0x5d6281e13b92e67c31ff0d35fca5eba8d7eee8c3d813f857dcfda7031f9656a6"): true, - common.HexToHash("0xb7bea42b49ac6401a8837c21e86d941345dd2fbb79aca881d6f38e681aa5dab4"): true, - common.HexToHash("0x267c2ab4dd2dc8c82bd248a41c08545c44d0e3f0234e25beb5e895d06dc576c5"): true, - common.HexToHash("0x0c554c3d6a3e5e7bf349db0132790ec9b131b8788ac00cd506bb1908a1e614e1"): true, - common.HexToHash("0x75b0dd11f6dbed9385b4c1d8386a22c753c4912c6badbca7ec5c4c50014fe0a4"): true, - common.HexToHash("0xc4d8e480678d97a43cb70efbdf658a9e88ae2366be048aa2c5c749239e0c2ce0"): true, - common.HexToHash("0xac692b514b7f101855e3b37be141789b031ae21fab80412c71a9a13e95cccbb8"): true, - common.HexToHash("0xed2f57ae2455c48502afbd4244f41c7f8c84f490be28250f2861d536234fa786"): true, - common.HexToHash("0xb4ea26c13ce080d7bcb888c8fce350cbefaf4ccc0a3c7577dc126519f445e394"): true, - common.HexToHash("0x894bd041da9375b2f68b51d06fdf5a1b04dcd7b82c98aa125338e80f6e6bf46e"): true, - common.HexToHash("0x20d3e6c0710ec15425255ffb22aaa9487af3632ee07a8979616ce641d62026c2"): true, - common.HexToHash("0xdfb03d66953eeed5e223e49054018420904109b74f7e1391729687483838d3ba"): true, - common.HexToHash("0x089d7bddb059b7642878f8d2e5286830214fe9329fe0c20d4863a697cf7ae67b"): true, - common.HexToHash("0x0b499287a7d1ea88d91d4a6df3e71109ae601cfa06816fb927770a7df5c945af"): true, - common.HexToHash("0xea1e828a4cc42d05f2ef63cbd7e80bca9f2ae4ccdb890046582e283313009f2d"): true, - common.HexToHash("0x822b9a46a43a7b3ec56135ce4ff5c726b461b101a3b7742f5c041527bc501216"): true, - common.HexToHash("0x89f44c188f71cdab314e247138e5c6dce00cc9c1febe41f94342e84d29a33989"): true, - common.HexToHash("0x75e058cf33d4e1b946c9376b0389d9dac79ba19e5857707b8af92dfe02e94d61"): true, - common.HexToHash("0x6eec1b675b0dec8f34f903e597e8bedf73723aaf51ab9cc19971f6ad4971a276"): true, - common.HexToHash("0xec9999dfe3829e28e94646ac679d9be878d5f6a17f19c5f9ac3c5126c9836436"): true, - common.HexToHash("0x1208b85bc0ce19c4a16a0e12f876a9e254e242340a7b7d61de53608c2e403bec"): true, - common.HexToHash("0xae26b38de5f5f180f6a5284f8ee10edde1cd180a479c916acf12d7184b25060e"): true, - common.HexToHash("0x4ba8c91d86e1e9b9b411b25f6618935dcfcc42312455c5e84cdbec99f30d89b9"): true, - common.HexToHash("0x50a34be5a1e0798645d016801510704edd6ad925999ce64faeaacbf02446fa00"): true, - common.HexToHash("0x923763d088e21348c5c024dfeef8afef8a9940a274fa0626671af913bd740903"): true, - common.HexToHash("0x77baba5d6097f24d78529704d2657ab064b587364a7a0c6934f67adfbc02a050"): true, - common.HexToHash("0x3225fc440f4dd276aff94adff01073418491ec92b5b70265cac8b66c16239ca8"): true, - common.HexToHash("0xc62c42fac3ad711ac046b44ad2659d4de7492b940992b8ef9540c74dd6c03269"): true, - common.HexToHash("0x144932d1716e62c1450298713102d7c3b882a390072de9c715e381f9e8d0ea15"): true, - common.HexToHash("0x8047330554ad89e58053cec83ab639076b69d01af9056e21bc8cd431a3bf3b56"): true, - common.HexToHash("0xfa88bcade9749c84b95c0b6a6665039d79417cecbf7c6f29503c0f26ddb10336"): true, - common.HexToHash("0x3c19c9f8f332bdb251e145fc21602a70b9a8aad993206b26abcfe76bdd9f9ff4"): true, - common.HexToHash("0x297e9384f657b4cceb7b011b241d4d895ca3547373eda962613808bce1253c6b"): true, - common.HexToHash("0xb712be3cab11d3609fbeb9a8ff5956d2a6425385674e1aa770ce55f855cd8907"): true, - common.HexToHash("0xe97fb84fcd7db4bfbfe84f1b84242fbbd0123b0058277fbd446e856d12458dda"): true, - common.HexToHash("0x88232de24380fa4fa96375a5150b37c332b89e515a4831d200574eabd00fa295"): true, - common.HexToHash("0x2f618c2c7ab31a8a450598d317da1f927813b4065de15802de7ce135d61aad6c"): true, - common.HexToHash("0x4012ef719db4bb881e0f9f522a390096e50205ca9e7fe6e22e58d41c10b97dc5"): true, - common.HexToHash("0x470f4c13e3f31b73b3761f95aefb1db2c30c721276065036e91556ba1c27d84d"): true, - common.HexToHash("0xb75ef4f549193e55055421870f1361bf48e87833543f83fc1a9042f4555ee6c9"): true, - common.HexToHash("0x1b3e7b6870de47e7fca76ad3d145bfe6cbc10d5e4a37200654a7c303c19f950e"): true, - common.HexToHash("0x1516d4b8b7d02ff4201a169dd05e37fc13793479b82ef03a461f16e3b3dd78f5"): true, - common.HexToHash("0xf432b74e961541e204c19a6c1cc837ef37d38509a49eb7aee7fff1388e7aaf35"): true, - common.HexToHash("0x49e62d32d358d684651a957874b8df85dc1f25be5b3a3a7418e772ef2a65e4ce"): true, - common.HexToHash("0xe6357a557ca864bbd07142f970b58d21d1c023b55504f94a51435f456f373f90"): true, - common.HexToHash("0x94e4bf676b03a1c8421dc35f866e2aa09882529d72e08f35c0d505616701ed5b"): true, - common.HexToHash("0x83735216e48a797a05b9fe73c075cf861cec3bb8e347a571f8f77a91ded13e8c"): true, - common.HexToHash("0x79675e8d5b3c906f9a4c93826104de138212621eeedd6c0792bf154009d05b20"): true, - common.HexToHash("0xf5d08c624572f59fef9a1f9b9e5fdcf6a8840a1ab112c383df4458a3dde2132e"): true, - common.HexToHash("0xe9b7087cb8df4a8394e365b9eba3866c6f7d9b50bf2bc065af8fc2566fd096e8"): true, - common.HexToHash("0x9a2e097a12c2f48344d28c6012f8137ac7a8c23e885a092abe918b9299447b43"): true, - common.HexToHash("0xad957cf904cd1affda9d2b4cbb03efbe5fbb87c35a01e98c9c78a676efc7473e"): true, - common.HexToHash("0x16044adc447999f6602c93c1f969b7ad88cddac232a015355f7c66ae364fd18b"): true, - common.HexToHash("0xcc0d026574cc1e0d00b53afe60d521753ab9ada10d4b2aca11a7035079d0b68e"): true, - common.HexToHash("0xe523ee477b815e6ee4e68d5e0b7c2058749934ee48d7e769e959850fffe82b38"): true, - common.HexToHash("0x6a154f1d92fe1c85ef95c4e75ce2161ad32bb3bb091fb1a96a1e4220a0fc5387"): true, - common.HexToHash("0x0ecc5d35c9ed216cebf12afa5b344556504ac4a0b5a225d752f871bda7d1f8db"): true, - common.HexToHash("0xb0b73ad0123b79c18888baa91a180e2bcb20ca3af378be1a59715705464ea5ad"): true, - common.HexToHash("0xd6afee1b47897459fff119943bf0992c57d62ab0404295722ec7e46fc01fff75"): true, - common.HexToHash("0xaabcbf1db68018ef7e4516fb7db895b461e5028e86e1e9bd24f33c62861576d6"): true, - common.HexToHash("0x8b695331bc1fa30639323016b72a51b03f81061dad1bbeb7d30827f9087eb16c"): true, - common.HexToHash("0x17a65cfe44c35561fc463a8d14fb5a584cdaad8078cd9f9083d5cfc394feb49c"): true, - common.HexToHash("0xca8c4c00996bf053f67fc8fec0f6efd023511f93503423473bddf11604983e3c"): true, - common.HexToHash("0x2babcee2073c5bef8e8d72b39aea407823ac702d047572306be02ac9d992add4"): true, - common.HexToHash("0x95c00410786b5097a94761e8c9634577283bbec3e39ef399ba4634fd805caa65"): true, - common.HexToHash("0xd46446024b61be03d595da2fc99cafd99d0eabbb380240a5d4fbec0d9b07bad0"): true, - common.HexToHash("0x14db9ea4ab585d0d3d6b8fbf5e6d3d7b7409e43a5f3546a7a6aacf61785d7e02"): true, - common.HexToHash("0x9d9bd36b98757200ab6f7c911c66ffb306e690e155a20aa911c22c67055afe0a"): true, - common.HexToHash("0x533b7dbe9a405181d5231ae39a494e50c3050dbab27a52db6572ba78b6913e9b"): true, - common.HexToHash("0x5da2dec14436dd2f252dce90a49c97bada98bbdf24f7871700434945cb73bb47"): true, - common.HexToHash("0x3672d5a879fa40a174c01390296e48af5335ff56b3cecfba05ea95a3874f6a9c"): true, - common.HexToHash("0xac7058c047028d875fdd1f2be114c8cf20c0cf5000f699b5fc254ee16c820953"): true, - common.HexToHash("0x5339881d3663c916f2bf2e7ce3603044d16ef917fd4e9c449ce9634947619042"): true, - common.HexToHash("0x83012d45246de55d6a9efa07621fd966758f4db306a6ca7a48aa4d6c332df321"): true, - common.HexToHash("0x5f10874d3ab4e81e0b9bfc1332294277a99364091384f24e8a40fc0374e9557c"): true, - common.HexToHash("0x19b246e8a4ae72ae7a8e5c8e8b33dcdae49364b421acfe6d7b332b53f6ae6f87"): true, - common.HexToHash("0x3f1bfa70334fa2eebe50ba6e44d245aa3038e3c4c07dffba06d3b956524ccc99"): true, - common.HexToHash("0x32e976cd5591755930246d322acf0a78ce6f5cee2fc25c13851c0cc2a75cf7ac"): true, - common.HexToHash("0x3cbd0dbc4e773b6eb47732967836da0de35a9ffb25486430f44be6825b5d5d97"): true, - common.HexToHash("0xdcea96ce0ea59bf9be13c67cfb6cbacaad548360b0efd29d69291df44ba0870e"): true, - common.HexToHash("0x235fc84e74b3e6471a6eaf163c79bdccc4698cc9f30f1eab23e83b70dbf435f4"): true, - common.HexToHash("0x721c91969c935b101b72e2e4d0c29135239fd4211acd51e5fb928b84f943b22f"): true, - common.HexToHash("0x9ff8700fb4479147ec6103d7b3934783089eecf5ba51b47590649af2c1668b9c"): true, - common.HexToHash("0x2eaf090b4529d7c810a0cc1bee34332a56b3448155c995f0ef4add25d0f7e54d"): true, - common.HexToHash("0x45a4b48c2e9841c8de7eb2e41b434d73552e33b5fe55ccc657eed1200c9ecc69"): true, - common.HexToHash("0x1810749c44869c326636892446a2d14b3289e37baa425696c3b4e4843fc84400"): true, - common.HexToHash("0x4bb54fc92b95ff9cf63998e6c59c824ca6aaec1db72e3ac4ed40ce905dd298a1"): true, - common.HexToHash("0x737e3be8aea49d7bb01b8fb53bf3b6bf04985936891fb9d8abb16b62d3fb1ed3"): true, - common.HexToHash("0xe224d29929657fe92ce8c2e577d1aecd7e29a2c18c64a3763d9106186183e78b"): true, - common.HexToHash("0x148e3755706a77fcc6eb6f7621ca1b2814ad3078ad77af2a3791bf0c539d34b3"): true, - common.HexToHash("0x42f1f5c5658757dd22dc2112ad602b148a9c1d42a0b21fd3ae315989919e1d4d"): true, - common.HexToHash("0xa861896376a658493716e4e532441c529e68ac425feede0da22c154af7facae7"): true, - common.HexToHash("0xb461321da2136b49a1a79034ac2eab30f1089709e4356b9502f12b697617ab88"): true, - common.HexToHash("0x245b9d1bfd49afb65f22f8cca10ea1f180d46f51f7600562c6639d7bc064b214"): true, - common.HexToHash("0x4d4631fa72f5a12943769f4b1c91654a931ebbce6c4b3dd8f259b92d0b420ad6"): true, - common.HexToHash("0x9b021967a8f640bcdf673c131aa69375f239a11f5b453fb21bd0336baccc9abb"): true, - common.HexToHash("0x94bb9371c38ea4fb0d9c90281e0ceea74b916e3f391879d41c7fb1c313a11f9b"): true, - common.HexToHash("0xe71a1b3501a2d1a1659722893beb07a0a2e8286ce2505b3292d1dea6f74d567c"): true, - common.HexToHash("0xefc27700b89e419d3806879990f25ad4cffbbdffa6b116622e2245b31a90913d"): true, - common.HexToHash("0x9aed389ae4385eb1367f3e8db9491ca8efb826f7bf7846ac6520b6579b0d5658"): true, - common.HexToHash("0xb18c44e04a6bb7988562b28ae813c841d7fd3f836a7db589af0fa5b273f554d1"): true, - common.HexToHash("0xdebf52d2ccf9efbc507986c6d94c07336de38680e3e751fe1df13b628ed10470"): true, - common.HexToHash("0x972e2a5118068a4aedb23869bd40c18aae70b9119f81fcbfcd932cdc3c5288bb"): true, - common.HexToHash("0xf27c3e3fdf116088fc9ea113216ee35dc732fa95ca3b47cb67abd2e578f94f0e"): true, - common.HexToHash("0xaa72a21ec295f04a2f5872a96caf39583503649a35e52e1865a4279facd9f5a6"): true, - common.HexToHash("0x09c70010a500a30a51ecb470382d953a17432728e05e0ae65e57cbe85f260cd7"): true, - common.HexToHash("0xd11a46f74ccf7e5d81663afa16a67ef910cba648fb53385a5491e760b7200e81"): true, - common.HexToHash("0xae57abd17efa824e4ef0b54eae586e1f3ac7ae2dbecd76b0d3a81fe39906e8c0"): true, - common.HexToHash("0x6e58e3b2dd0e657f570474794cbe0c587ee4bcee166fb4d9f97ceffd21a2767a"): true, - common.HexToHash("0x64b361231642c7e488ca287f93c4588c10aaae14990dc055a055314600ebfa8d"): true, - common.HexToHash("0xbb9d0f577e95a788549506dd691151213014b2600a1ce3d0a14da1ff88ca0e61"): true, - common.HexToHash("0x7cc538b0f6e977a095e18874a6e03a7e574f684626103d1cf0ea86cb1fd57354"): true, - common.HexToHash("0x4406653cca985b2a535c58e1e28298bf4d6ca279d64916752c1863689c9072eb"): true, - common.HexToHash("0xdda6bf02d38e91c49434de434447ba0b0ecf12eb4528d7290c033ef3346cc67f"): true, - common.HexToHash("0xc8f5973f5e643dafbfab857337ba052e121d1fecc67c6bec3fce409d22ed1901"): true, - common.HexToHash("0x4baf62623dd54fe2221294f5d990aea45d10d6c54f06b154c2adeeea3285326d"): true, - common.HexToHash("0x4555fd3fb3292fe3e08969765d5670fecaa3de0b4e4ad5bb47bff1dcba192755"): true, - common.HexToHash("0x7f7e559b9f0a1a971886940b3587826da4dc9afa76b993d32585437e84d198c7"): true, - common.HexToHash("0x115740075b0aeeccb3b7539436c85a758267e55a48ea53bd7dbb71bda730b414"): true, - common.HexToHash("0xea37c68d79fd717259b2963706b2d8e69107119a247cfb4c509200fb0f302758"): true, - common.HexToHash("0xd3dbee2d8100ef87b73b51eab37f5adb895f4370571946f6a4b20203832aced9"): true, - common.HexToHash("0x4d776029780bee92eb27d8ade285fa420e8133e9bf4c8fc525cea64161f24b0f"): true, - common.HexToHash("0x0e7354593e57c1776295aca0130166d93fca3a3e1cb23ba05c4b6daf01ea2f21"): true, - common.HexToHash("0xcac0ce65936f5d3544bd2bac5a5dea293824f540d280c71acf319d122b25d0d0"): true, - common.HexToHash("0xf820f348c9ddb20fb1d9515ac5fdfa4132f963dfaa36deb82da6f6b48f67cc2c"): true, - common.HexToHash("0x1981a3f4108a60e3a0ceb8e2ff06512203a96498538dabae79306f9411426331"): true, - common.HexToHash("0x4ca30870f2754c7ffca2ba8395f67afed59bb0577f05d5b81f36132d82cdb8c0"): true, - common.HexToHash("0x075e00e23c8de423e9dd6f72d045d447f7a48b236e34cb5cfc237c4690616d01"): true, - common.HexToHash("0xa1a6fad70559a721161ee4ea71373f73559fd4c77e27d8a8a9bf43d6ee1c74d3"): true, - common.HexToHash("0x265c50d96ab68cbcbe3c53f27ec26567102f404808d6ad8bd4c9307f75842060"): true, - common.HexToHash("0x6416eec9979bbfc447e2b05ef8a4b89e330d5e7132e6de90cd85b63ed37a560b"): true, - common.HexToHash("0x8d2d65dc9819e085c5c3825250311e0d509538364b71d08de31e564b2ac4cf23"): true, - common.HexToHash("0xbe83e5d234a32228eb4d002da2e7d63f4c4cb1a9d1b132301ee5f6ba581c18da"): true, - common.HexToHash("0xa443e5ae1bc3d100c53b21315b04a6dbc0575759cfbb6598541fdcfb105f4bf1"): true, - common.HexToHash("0x3a1f0147840e998c3c377560ba590e6c7f97d35473de4e0f3991a182baa23756"): true, - common.HexToHash("0x1735f067a02c16d3da09adc64a50bdabce3fcd245b9cbc930fb5d44a8637e5ca"): true, - common.HexToHash("0x8f23f004bd21e59d7b61b96ab7c38ef08907a1550536030a91e2e66d007ecaf6"): true, - common.HexToHash("0xecfaf3816c8c9d4df53705aba5ab604b63ff58329a0c8045020a8891e5c31f61"): true, - common.HexToHash("0x7f2fb650782272ee8f3bf14686fbf1628d996a8c2ccad693f637055a60dc4cc5"): true, - common.HexToHash("0x4fe03eb0ea5bb14aed06f7b3e84b3dc8bc928322c68cc5368df69bae07c28915"): true, - common.HexToHash("0x1d21a249cd3dc6fc7daad7c6a76701d74b288ba39127201b98dea889411e81c6"): true, - common.HexToHash("0xcff2b696296993c42f20259ad4e5f3cb34f5f0d4c8e9da6eb4faef553387879f"): true, - common.HexToHash("0x523f02ca286f1a09bfa3dd1080b3545ec726e2e5d1142f5ec0409a996cff47ee"): true, - common.HexToHash("0xc3c6c8f5b2c5588986f1603110bb9664a7fcf3f0765d842dd0f811385f584206"): true, - common.HexToHash("0x918afd8654bee4d971ef8462bebdb88038d20884769b9eb579ac22a83a7bb182"): true, - common.HexToHash("0x81f260ac25a3f8833975f94948aa0e236e8e45a690ef732146f611bba302b72b"): true, - common.HexToHash("0xb8b95255188054819c1285729546eb42aab549c4d87f6936bc9f20ff2b804bee"): true, - common.HexToHash("0x1cc2e5f06a03d879d11a3f1a1eea4c3641ca4613a66c174b7af499adb58383f6"): true, - common.HexToHash("0x69bd97961af6169e8e661fa565274b40a31a3fe22a33d03da75df76146d02285"): true, - common.HexToHash("0xe7605356c21effbf89a3ec4b57bb8a604729981f4be690ec82ed0c81ef9568fa"): true, - common.HexToHash("0xcbe1312e18ea87bdef7f64578bcb2ff0780729298167de10202d7842f479ff55"): true, - common.HexToHash("0x9f4c05a5efde94a745f4e0dd8df3707b985ac691cef716831828571c3193718e"): true, - common.HexToHash("0xc45e7d1c98fb410754e135dba05cbf0c88721349ba6ec52293a33293de0cad05"): true, - common.HexToHash("0x4cdfb6da0710d42a923b38ae8bd2e12a798f91345af8e98f6233ae953c44edce"): true, - common.HexToHash("0x06ed6af0cc8b99e926c52146d38ec6b085f641250c6dd477f0f7d4b9047c9dda"): true, - common.HexToHash("0x453eb64a827888152483d53f39af27147483412af3653814b07079149ba7877c"): true, - common.HexToHash("0x362ffbb689541a8dbc0952537f41582e2bcad89d31149f69a40823f34c101fec"): true, - common.HexToHash("0x53c8da3f8918cb10e98cf5977eb723a48044fe171269a80eed892e3856da376a"): true, - common.HexToHash("0xbde8576af087361819e0b0c1ce934791c77ec89390596e683e7f971280fa26e1"): true, - common.HexToHash("0x510f40c82c93b18e96935fb2c55798506579d6f587d1b10ed3b2e0f16baf6789"): true, - common.HexToHash("0x82c655a68878d94c49daddcbead50e5fcb729ee400e3859f232120e6dde2269d"): true, - common.HexToHash("0x09f74ce68e8039fa66d48a87faf18bcbf8b78b5b26caf550b1f3b5b50e14f9b6"): true, - common.HexToHash("0x37ffcfc27f6d753d2481e17f41fd182147505c9a58576971123786f65cef04d8"): true, - common.HexToHash("0xc2e66b0b243db41e88c58d7559b0174fe9c77f741621b7e8f34b6318f9af61b2"): true, - common.HexToHash("0xabfa5428d6d5d585b965362005bbd75594146f82b0a8df08b8db8436089695eb"): true, - common.HexToHash("0x092a8e5e03f15e949f721b043607ab2cf97a9bc8cbf2631360414a3d091594d2"): true, - common.HexToHash("0x4a27e79d5bfbaecb7014f5a13ed087f7fb2e3b30513d32a83cd27c5002e9c684"): true, - common.HexToHash("0xb7feac35b09ad8347386617c51f539e105358b8da1e56170f5ef311125eddfde"): true, - common.HexToHash("0xd81cf85a34147ee89ace37a76d6ff457f15c6ac1b4f0ea3895818a26c62b13ba"): true, - common.HexToHash("0xc877757e8fc392c0b72b7a649431c5388bad61e510e885ed81c11ab86c8c67d7"): true, - common.HexToHash("0xb27f4cdead4a4e4ca8791aa9499968e35d1da78b3000d3e062aedeb79fc6e42b"): true, - common.HexToHash("0x4ad42a9d57e7344b6686c804854b8400a40d3cfe42736d60c86d62ed10812614"): true, - common.HexToHash("0x65565970637642499fe9cf12b263db0585e78b56e18541760b5b9c058325d4c7"): true, - common.HexToHash("0xe5c3b61cc4097e2ba827d96ef99a94fa7c2d07af3fe22a77d21e82e1e1bb82de"): true, - common.HexToHash("0xb1d3887eaf6fb75a5fab527c278e8d8320b142cebb456186a1addcfa738748ae"): true, - common.HexToHash("0xf6cb6062f99d0e0153971c0f1e47bdf23cfcac007cbb1458db7d11e12b1ebafd"): true, - common.HexToHash("0xb3d75b794db28ca255f3d0fa3bce0c3cd2987746e4d49672f8455bb09d76290b"): true, - common.HexToHash("0x84ad83cce220c084ebc26b7dea8a824647b307ebd79276b145fadfb6c8ceb81f"): true, - common.HexToHash("0xa9f52cd9368aefc06160a26e5a761d653343c2b0434f236d316f682a705fb379"): true, - common.HexToHash("0xfca2843ffe811c626154ee8a9cd494c66589957371ce3eb6387ae9831e9aecaa"): true, - common.HexToHash("0x992ece33ab4e26db4782cddd53a5d48ee654f9cd39b057c64a516735a8165a56"): true, - common.HexToHash("0x2850bd587dd0267f0f590baece7bb89425b612537d724470339a8a5484eb4c28"): true, - common.HexToHash("0xf884b0fdce549490e50b531aa31c58bd0a2e1b3322fe3c13e8d38bedb7825733"): true, - common.HexToHash("0x270573077dcf1f7bc1e155823818c21d86697a0360d493b52e84dd67a1ef7cd9"): true, - common.HexToHash("0x7bcf47b0cb058512b40b69302b4d3b9f615cd28e6792172e0c09d918604b8a81"): true, - common.HexToHash("0x9361eaeef2b0bfe1764a7399cefaa1ee82c39da52cb9235162a6f5251afc59a2"): true, - common.HexToHash("0xf2c0ab72559bc38fdd21503784ed29bc851f124d2d7d1c225b757faefb037e76"): true, - common.HexToHash("0x41f76522173d9986a4c686cd795e9ed6a82723f154340373ba8679421c3754bd"): true, - common.HexToHash("0x4c3fe471e005366923c51c5d1063aebfe56beee5a0475fee84808a18fb61e88e"): true, - common.HexToHash("0xbc9bd2c7dcea7c0ae9584681664b8f9a0420aaffc6ad9817022acb8ed0179c9b"): true, - common.HexToHash("0x7944729f1f20e41855f23eb7b63ba878ac1ce8c3ee24d589a6a3edbb106aed79"): true, - common.HexToHash("0xae198f2277192dd24543ff26570d55a41d664066a40d000e96af8da2e3bc4fc7"): true, - common.HexToHash("0x6b0af8cc89c3068384f5bba5b7c60c234b9df8992ef973c61adadd2e24d1b4dd"): true, - common.HexToHash("0x85a112167a77c1908e82d94f9792c15bbfac625cffd088ecaf36bc17b3f7f5a5"): true, - common.HexToHash("0xcfe3ff0bce996d3a28cb310fc6eb2f2c568af54d1174dedc95996b663625254b"): true, - common.HexToHash("0xb3d06844c6daa8e63b86bd6bd30a36cc55ba5f579c2f28c22b5884a644eea858"): true, - common.HexToHash("0xc39b86ffe66888b8cc388fc7e197d75e18cd276bbcc613d15c1b8346bbbfe875"): true, - common.HexToHash("0x7489a750c9f208a1237a2308b453f16a21f3d1b54181e4bbff1fba6a87fc682d"): true, - common.HexToHash("0x0d98a6ff5da19c7ba25dc7cc014b329f97599376f9196b79134e73bc7b5e0a63"): true, - common.HexToHash("0x43e29ad0a418107cb9cd9cc7b914897f20bb0a5ca19eae10d1e4d0d279359ab5"): true, - common.HexToHash("0x8f70373a17ff4326c1d2b3d03a40f73288f006371369dd7edbd123dd4ccbd166"): true, - common.HexToHash("0x85e0d5cea38bef2b5495f617e890800cfee2ca1b14df1eeba1bb741079dcafd1"): true, - common.HexToHash("0x389bf45d5b694a9035f16b17ff34761126a5256fb8a29968612ee897cf9e4495"): true, - common.HexToHash("0x91b2514c0e48c6942b45ae8a8f986afefef3f23a5b04ba9a183a037be524cb7a"): true, - common.HexToHash("0x1c17fb3ff564e81dfa76928236415395c5ca377eee3bdae1f4e0af00d5b9b45e"): true, - common.HexToHash("0xb1097ec490bc20d6425b524f7a45f882df8fc757e2ec06a8bf3d73b0ee70e9d1"): true, - common.HexToHash("0x1ec08b8dbb120a5c950af39565c0dceec6bcf36cd1d4ab509356bb48ac6ef24c"): true, - common.HexToHash("0x7a74a58b5f37e917ae71ceb06a9d60d0ebd8e268de04f4e6e4dc9c733dc0bbb6"): true, - common.HexToHash("0xa8047bed8ec55762a40ba56343868f4ad760208c11e51125ff157c8389ba10f9"): true, - common.HexToHash("0x85f65cc6920b48f3e7a6fc5e44c2cfc2d557ac101658b9b8615eede6778d45aa"): true, - common.HexToHash("0xa61769977d0cc097f25f538665f55309eedb833849e22dc07c763afa34f9cb84"): true, - common.HexToHash("0x469317ec5497f27d488bb96be799da6c7a3bb30b35ae32657c568633ab1ec8a0"): true, - common.HexToHash("0xdb2618634dc8e5d22b795f39cd1ac8fddad8d964720013f357ea05e08cea2357"): true, - common.HexToHash("0xf5289a69286343cbe0b2852e2d34694b8d69918fe6d4648315ff2010056b2097"): true, - common.HexToHash("0xb7b2c66e2a2d9b51c610ed04ed69e21e55fdf0fb32cb9f0d336fd8a56112cf8d"): true, - common.HexToHash("0x85b33b43afe2661d9a47ae8bd0f4896c2d5ea0ddd90c65b50f735fd19febec55"): true, - common.HexToHash("0xe71df636265854ecf77227f9a80079072be09871807af592ce2ba54f1f109301"): true, - common.HexToHash("0xe0e087356f2bffd8c96aa34f08eb135cc86ac5bd73db553cc8ab9452c2d57bad"): true, - common.HexToHash("0x73656319d992f674b9e4305c7b245d3458077ac6c4e1c15ba8557cea6d23eb2e"): true, - common.HexToHash("0xd75352aaf43e07fecdb6530838619b7ec5aca05aea4f223153c8e05b8761aa3b"): true, - common.HexToHash("0x6e1b6627e869f42146a342a346108f4fc7cce886e866f05f8c2df8aa6683248f"): true, - common.HexToHash("0x9a65b2c13601e46af120e20ba2e6bfa9b2baf5451253530922fb52f3714ed197"): true, - common.HexToHash("0x135e7851a8444c1e2b0b69b8556ac21c4a942232eae24163972ffde51fb672e9"): true, - common.HexToHash("0xa2c26ea2d6776c5a88e5d1556dda9e0b028f24d24b19cf5a03d60a79ed626f68"): true, - common.HexToHash("0x26117195484e61d1d3c09458b0b14bbd42b29212cc4c85247410a010803c987f"): true, - common.HexToHash("0x7720822f670f3753f73b70c50e392e8a7a97535de81bd8df77748edf95018e0c"): true, - common.HexToHash("0xc3cfd880cfb906eae739766c075bd7fce2144bf2650629ab77c7c9b9cde03486"): true, - common.HexToHash("0x5decfe096e25cdc840fca23f3a88ba2055c2e9b74330f435bd311650b5c428ca"): true, - common.HexToHash("0xfdb5305238e862d3b023d67172d72e17498aca43f5f05b802765a460a02bfc05"): true, - common.HexToHash("0xc17229d0ec4e4cfadd7126c4475eb278a78d0302722c14d27ddf49ef56750b1e"): true, - common.HexToHash("0xe81bbd08d4309806fca357f95c7abebeba566e073b75a4ccb72bc55218892719"): true, - common.HexToHash("0xecaf0ba188648247549dada640d9d216f22ce86583fe5e3f585867c0a3f1da68"): true, - common.HexToHash("0xd6d42d37faad240d2e631b208459e9780bdc00501c795551c2aea7b774804baa"): true, - common.HexToHash("0x45272b469b932330b439c43060fb68c5ee54007520cf0360c450bc9d8db54bd1"): true, - common.HexToHash("0x61403542e28827a4667fe210769129735ccb6b27a35c6bd7a28e65f7ae09e7e2"): true, - common.HexToHash("0x47a2595e730df81d7b52f46284ef429138bf688214970ddcbe6ef5e1bbf3b389"): true, - common.HexToHash("0x37b7c9d67477919ed0e1284970ff4be8a517ac71a543e04da8d2d4740959550e"): true, - common.HexToHash("0x9568c1b3d324a766f7445077b82019bc5ed0d794cba7b3a072da9def77e6b51d"): true, - common.HexToHash("0x56976c59ea237922f05e0eaf3cf92bd6f79aa77927438bac597c9a51a6361252"): true, - common.HexToHash("0x4de283e10e26aa0d33287857c634691360c8d48e2dfa25677f53c6da64a5fa42"): true, - common.HexToHash("0x74b1325862bcdfa56e37c422366fcd4c493fb6095a1d2208c54e82441a64d59e"): true, - common.HexToHash("0xba30c20ef966c6fbc99cf818c6b9462edefb96079adc896e82f5dbdd81676f02"): true, - common.HexToHash("0x3af898333edf38f9c4205e98da8015ddbbb89698fcbd34b461521b70427196aa"): true, - common.HexToHash("0x8230a01f3a52a206dd3e40663e2d2be7d10d7041e246b9431dec2c99c5080431"): true, - common.HexToHash("0x6bff8faf2490e6c7c966a2c1dc2854a2f91a3bfab4d27bd59c080c7673ea4710"): true, - common.HexToHash("0xa8f0149dec0113207a9d4cfc4a226e0f6428721f655e69d25de34933510ae500"): true, - common.HexToHash("0x754e150aa240f1427cf17d2494d8f84543ea3ad896dd09c3f812f3607f33aa49"): true, - common.HexToHash("0x5dd041d9ee016d6c3745b98807a4e3ca4a41aa0ad46c68cb43d46f8c8411ca70"): true, - common.HexToHash("0x4a80ba90ba1314214bd307a4a66e7c41b92592372dec92bb607eb504fe8eccbd"): true, - common.HexToHash("0x1d2c374cae0a5f442f7b5705642227a656ab4eb7af968c7cb7c7a3bba8291404"): true, - common.HexToHash("0xb39841d402bda0dc730c2e873b93a74d0869ba008c92843a22222b6a5483ebc0"): true, - common.HexToHash("0x86a5eb4ee4570d307f452baf4509cf441ddbb139520b65b11912faea94b613bf"): true, - common.HexToHash("0x1c0e638988a2f79a6f76b0a161e3e3f68092882703ba7e214ad6c64b6f585501"): true, - common.HexToHash("0x4d0ba215964dbbdced79bb13e74c57b6a6af32d3315501a8177221f1889fad4e"): true, - common.HexToHash("0x3311ea8029617399a367a2c23320308a1e88c3f0e56ed53cd3286070f30e2a51"): true, - common.HexToHash("0x6f130f13e7b892741b610d713ff58b6868348770bdf981f9028654e4e1984d14"): true, - common.HexToHash("0xc8b3b9a5026c796ddd919059cff45d430efdaf2252463dcd55ab3368ab333ea7"): true, - common.HexToHash("0xfd4a93281fe0e2a7988991a07d5b0bfb468ce06a78ef54eb90db7b5a829783df"): true, - common.HexToHash("0x004e2e34b2146304d97f79d4338ca010df73d89f7d032fa865d7e52d1981ce0a"): true, - common.HexToHash("0x747ebd39008a6bb9b07f7b63aaf127353641e8b1ae00f80090d7c5c4e928dd57"): true, - common.HexToHash("0x33e1f84d64fc5cb1e7205abd2ef74320f28a49225cead3d105650352bb4bb5f0"): true, - common.HexToHash("0xb6c415dfb794a4fc18abb1f30749fc5516658dac953098c0d5d268e9f6df30cc"): true, - common.HexToHash("0x57d9c333fd9cc066998610bdfa7dfc35d01f5df8be717e7efa1502a455781be9"): true, - common.HexToHash("0x0dd7302159861b43eb69f83a4081c05ddf4ee35fc1522184d35e43a65bf17dbe"): true, - common.HexToHash("0x2d1c5c9b14caa535eb86d91a55f2af2e1a8263f32db628d0614e86156254480e"): true, - common.HexToHash("0xa69bac8f73cfba3fa252f3353dbded8e8d86ea7eece6f9e00613fe366aec76ae"): true, - common.HexToHash("0xc03ca9ded3477d51db07535e3e1123bcfd54d41e2568aed445e4763f6651fa55"): true, - common.HexToHash("0x09a2871eca35a6c5997c457e2b170ee1bd40c0aadd8c1d4e7c5de99b7b0dd853"): true, - common.HexToHash("0xceb988d910266e49debfca652fd858cde9680dfc6e11a82b793b4b9cbf4c6945"): true, - common.HexToHash("0x0c584b1d7003cd9a24bf2144caf2145665402b6b9586468afb2a5219fac4c2a8"): true, - common.HexToHash("0xf6bc85e077c5ac57438b1542a37d98a13bfcb583a66ff22febb6d5dc3da18cdf"): true, - common.HexToHash("0x0175443e4a62738eefec8520bb6be672f8980769759e8fc310e72c8f48ae46dc"): true, - common.HexToHash("0x9ec68b659a85d0442856165310725d69cdc956dac5b0c2e7b5bb79bec239a037"): true, - common.HexToHash("0x57b5cf5d52d9c9f6d777f65646f13f08a106fbe6bf66648f08b170d2e1f720d9"): true, - common.HexToHash("0x8cd995440509bc6a0a7791b671164741c9450aca814e71c380574eb954bd7f2e"): true, - common.HexToHash("0x1c130e95df1e026db15175b85ebf01755a72a5ed7f35edee9c5916d8e27ae1bc"): true, - common.HexToHash("0xd9fba5ed218445493f5f6b9ac3503ee7313a764e10e832326b5c5681456b5765"): true, - common.HexToHash("0x1500fb0752f4bed7a6be1fc2149d4ca219eb1ac52832e998cc0efc28272ab5d0"): true, - common.HexToHash("0xa6f4f625ed0305be28f40181abaae9540cc2c4b3102e0767ed946af1b69fc0ca"): true, - common.HexToHash("0xb6630815302cacbb91f12aefdc017f503144b3f56d0dd9b0d9d51a6b891745d3"): true, - common.HexToHash("0x90b42cf08d01c6191057ba45910830837e55f1f59a1687d288a14603b5aef238"): true, - common.HexToHash("0xe37d6ecdf60bf00ed7c30d9b97a3ba43a38876147b7d47f6c753eaaa4dc11413"): true, - common.HexToHash("0x2b345534d2d2ba71d2525f11eff148e9293a4807e3d3427fa078ca09e209cd63"): true, - common.HexToHash("0xfbdcec9d1c4d7851809317da57e7ff1456d7baff4fc6a99001b7560d061e1574"): true, - common.HexToHash("0x9708a361806e3e1cb38d4165c5293d525c98bafaffcd0b76bee04b5f48cf1c14"): true, - common.HexToHash("0x43d96e69f39fa8af4309a5bca582fc2409fcb8140104b02439eab23e3a08875d"): true, - common.HexToHash("0x32f200bf95455ed29dc4b9ff27d04957d3c5faa3a75601740bf75e11388ffb03"): true, - common.HexToHash("0xcce03a5c703fec6a4719e9eccdeb4a6ba66a5e71f928c5f6842f0b099fa906b0"): true, - common.HexToHash("0xf7295f5c3a27b6c5e1e40a0ff6e7264e073c929b4fdf5fd9f135247a77de2031"): true, - common.HexToHash("0x569e2d35712c05709b32e043279e9f0ff76bcfbfaaef16ae45944a90d0383ed9"): true, - common.HexToHash("0x17b622b863b13c9c07a646ba9e7389505c9d68d597118a295681ae73fc8c894f"): true, - common.HexToHash("0x12a8ae11126a68afc056cbabadc80273057e4190dc41e915febc88e7f488f451"): true, - common.HexToHash("0x5df3f7f6f04e7d1253e54c84b9b04cb31786d9715e350361c032b85d0f140fd3"): true, - common.HexToHash("0x513005de98835d60fdd55aa60d66752dcfe4b2607ce70e2564e97829f3ebc06a"): true, - common.HexToHash("0xb49d82cf8573f155868893464f415797712f927c602748f5f52ff179c218cbee"): true, - common.HexToHash("0xc43a4ba8ea4bb122f028b3a1be6ce0881d1302e701723bcb5876b3650144a32d"): true, - common.HexToHash("0x9c0aee77443f2a662cc9adcc740e22e582ff4e835e494877f86b9e6d4066f980"): true, - common.HexToHash("0x981e250209bcef5383103a7422954a9bf4053363c1f066457113ab45783ca667"): true, - common.HexToHash("0x8a55b28cff2654fdb99b263f75a591db566f0e5e7ede818f3e83b0df64a6b776"): true, - common.HexToHash("0xc8146bad90561b4fa743382aa3479ac1b743bc4c62153eba8a939efcc8ca4af8"): true, - common.HexToHash("0xcdceeba27d90d3a9c731bed783c39eb7e99fd38da223d274e2778465ed14864b"): true, - common.HexToHash("0xaf113d357b9247a78f5a3ee5715dc21c7cbca5f386076458f123a19c0c2839a8"): true, - common.HexToHash("0x9776cf3718d8c972e5509b8d5524ec67706b5fc01759edc529f7fbe1455bec45"): true, - common.HexToHash("0x9b1e3c8dce03af8b1cb1037b5ceea4c498f3ec43b9029a047057305f58970690"): true, - common.HexToHash("0xb6a82a23d43c909d4fee24fbf948b1930382f13f4e7e851809e1f5549f8947f0"): true, - common.HexToHash("0xaa8443e012cadfab190150e7ce059dee7a1ad6c2a1b0a44c89f762856147692d"): true, - common.HexToHash("0x93f956fea4305a2e69c02406111d7f5d1f5bb82332f1e7608f9dfc379d6d7892"): true, - common.HexToHash("0xad359645e86301053cfe7ff9472b82b517530cd4900847f10cd8c5c312a74742"): true, - common.HexToHash("0x0990314503384473aa568cf2ac90d79006d6b417534e6dc9b5e0dcfca82fffa8"): true, - common.HexToHash("0x5ee9be518a130193322b92cdc39096f7006892df5afc619d2258c9f4ad83df3c"): true, - common.HexToHash("0x73ab73fb14078b4c7aae9d81e609c837956c3bdfd5e3649c47df32d7903b4647"): true, - common.HexToHash("0xe64602bd6979d50a9ed9bddc54cb44141df3bb69aec0c2398882e0f8a7677b86"): true, - common.HexToHash("0x92d5c0b8e47b10cd9d8420fa6cbcb2c4e064f64d15074aaec678c04661864396"): true, - common.HexToHash("0x16e206432aaa90f67ef81d0edfd63022fe602b2e63a20032d9a21c4d5b1a1531"): true, - common.HexToHash("0xcc081cb6ef4333c37f90a286e51be342b40fabf52668c5bb4933c53ece10136e"): true, - common.HexToHash("0x18dfa978eff65ddd4e2eb7da6075bc4d53d6cab395e5bb0ed69be9f1a8cdf885"): true, - common.HexToHash("0x8fce1866dd5cf92ad2647d03843c7591490e765d8f2355a2faa229f113c99887"): true, - common.HexToHash("0x94b819859035de6192715c24443baa1ec33566d245c5ad4aea554e36cf391307"): true, - common.HexToHash("0x6edef1666d728b2156062d7c2a35cb1002683b6d53c29b60a111983273835d05"): true, - common.HexToHash("0xc9dfb5798cfd0232a90266985e44703cab6a2936274d018a8c932cc804ccf7bd"): true, - common.HexToHash("0x4dbcd86f67a84b3307a6f16e350a58ef53a92c3054ab225ae630e00bd0ed57cf"): true, - common.HexToHash("0xe563e1b39aad9b3ac05566fbe43f66220fccf09fb88f1cf9e4c790195b7e7fbd"): true, - common.HexToHash("0x76ee1692c5050a0ee8eb27217b001eb50f6b9b412fbf2d4777e8e4a2f3b9cdc0"): true, - common.HexToHash("0x376c335dabf11481455e715c571f6b344cd15df2297ca2e479a92dff8e83e680"): true, - common.HexToHash("0xfbae8f8804053f9e18bb8d5328dd7b06916817f8d22a910b22bfb05432a66be1"): true, - common.HexToHash("0x908597683ed2e55ac2dcfa3f3a68dc9d0b1717cf4bfb98dc9c450b2ea91a02d9"): true, - common.HexToHash("0x18649986fdc59d495b703f88c3fd38dbf819169a1d3f87959039edc290dd4050"): true, - common.HexToHash("0x44d7b1d1fe17abe55c6bb906367186418127e77a05c310407e2293e9968571d1"): true, - common.HexToHash("0x0d257df3aa3efc9f5015abb6015ee042b67d5449c008bad79aed0a4031a97b0e"): true, - common.HexToHash("0x583beb32a6ed231f23edf3ab17530cddb1da7c05976f60dd8ea34a1f73c49da6"): true, - common.HexToHash("0xd77fa795a3cd09b8131f192636639921df6a629d03a0432107a46c6e2d47e2af"): true, - common.HexToHash("0xcb1301bf38a6a956710aa2a8c1a6482a96701a7432a36c07a8a59c21d6783594"): true, - common.HexToHash("0xc1bbf20b6c1b544abb33b41f5972f06760359b55f73438cfc9999513d6b2d618"): true, - common.HexToHash("0x34a7bdadc7e83fc7c47c7448779c0191df9b5c65bc8b4f8021859643091cf6e7"): true, - common.HexToHash("0x7911995f3f635d43356eb6842fc00f51bc703ff2278f607d13d405db404d09c7"): true, - common.HexToHash("0x199efe80f908c0b2deb6542c8ad351e6384802349d4e257564627f261aa1467c"): true, - common.HexToHash("0x77670d09186aa0ffb92dd118d0cf5b33e0f695b4fea02fcd035e7ba982436eca"): true, - common.HexToHash("0xa38151c711ee7d97e90b5b8ab811e309133627e4fb740faec9e79aa4cc59cd8d"): true, - common.HexToHash("0xcd52a8353e6e292b267209036f87f23b22d42ca8daf030427b1b9aa8ba7bbeb5"): true, - common.HexToHash("0x9cc114aac3e4082fb7cd1fa12d8bd2e247cf9fb5853537c1a52eebabcc496caa"): true, - common.HexToHash("0xef5dbf6d22773d84b2d71a255b34200d25fa8d49c98bd7270d637e07a25bae68"): true, - common.HexToHash("0xa13c1a654f73f7c29db60b192447d6caa31961846b2fcdeeaab6b403fe705dfb"): true, - common.HexToHash("0x1d062315a997b0bbe2647545ef7611cc567ca3390e08a9a600110fcb2a01ae25"): true, - common.HexToHash("0xdf9fe3c2476cf05cea57d1e8990315f83aa36e079bb4bebb8180c685346eb4da"): true, - common.HexToHash("0x3d95b54b820a13f684497754b8d95be1684bc2d3f7e8acec9c2a60a3fb9b970e"): true, - common.HexToHash("0xe26fcee2f1a6369f2486168a05c7f9dde2d262c697bf840fd40439f63f8b140f"): true, - common.HexToHash("0x934cc38493964a170ff3a28313e87fb670d139e49fe9d5242326b9e5e7d7966e"): true, - common.HexToHash("0xa7254da83314f06ccc3a9d5adf0170e96672da3af5e1a1b38a8b67ced0a4f398"): true, - common.HexToHash("0xebcf68797b1a1631d837636f827da5ed3edaa8b76e531fb467a0c50ec4832a96"): true, - common.HexToHash("0xfcbb94c253fe83a98b7e34c505e398fe3fde4e155946190240a6fb4903f7b48f"): true, - common.HexToHash("0x23ed18dfadd9b6afa7480ed409fe882554d3e04f02e1ec0838d663865f164ae3"): true, - common.HexToHash("0xe12864e28eaacd8f20afabe81ad436aa38e4f32a07d35c445e793f590b8f4266"): true, - common.HexToHash("0x11ebbc30241a79a7cc2ec5c203af6b1b9d100b2e739e00d3ab96505b13b823cf"): true, - common.HexToHash("0x58c0ddf9710b8bd26dbd532edf41e56c9cd787b32ffe33c430c35501efec012b"): true, - common.HexToHash("0x9199b63053532475d94c71b5c1a9d0a49ac797f4ef5825a28dd576accd2686fe"): true, - common.HexToHash("0x9bf52106588fdcaa69e325e4445716a6de5cc3476bb964d56979003a75b883dc"): true, - common.HexToHash("0xe1a1687ccb00a977309aa04befc0253db09feefec07ab9be4b63f80ac787b144"): true, - common.HexToHash("0xcf10e29cf4b4d0a3d76128a500889fe4096fc5cf29c38ef6c552e87b6cf74669"): true, - common.HexToHash("0x0f3be221b3355f48f5eec0e6a120861495416af47e61f6e82aeb918e24af95b8"): true, - common.HexToHash("0x7b6f94c4aefc31ade63eb2dcd020a51936adf99296efcbac745292454dbfa017"): true, - common.HexToHash("0xd732e775a3b7c78d200946138c5036c1f644dfd72de54a4d5f44c53bf2eba9fd"): true, - common.HexToHash("0x5f12226951a72135d7d86cdde37f2d0802bdf1148c31ab56000e300e96d02cd6"): true, - common.HexToHash("0x663e51fd3159c21919388ef7695f316034cbf2a1e6aaff3e6078d240c512b9fa"): true, - common.HexToHash("0x7180592f04e2e07bf22c18ccafab34ed4138c898052c8d1552103d9ff35ad8e0"): true, - common.HexToHash("0x78d3d53ef19cadcb78004e1daf48abb027cf717dcb952f8cef31e53eaea09e73"): true, - common.HexToHash("0x8ad61f6ce70accb8cc2d8890a8fe1388806790d73e35e937374b619e6effeb1a"): true, - common.HexToHash("0xcaf1e20f730b069cc1d4607ce6cfc73bf2adf6b79e85574dd247e674caceeecd"): true, - common.HexToHash("0x5a84501460d3de3331cdf80df9eadca9063e8b95eacadfcdbd4005d37bfa7bbe"): true, - common.HexToHash("0xdfc47d0d1ed761a3b069033fcc58bf76d852bdfcda39cb867d31406083f3c78d"): true, - common.HexToHash("0x5c433537f9743cb1f186c8d6c493888b3c2a58b9a1d0a2d121642a4590d7459e"): true, - common.HexToHash("0x62316a3d883bfcf73ed11d2dfa41bec15cdfc14011505d83d115402eeac8c583"): true, - common.HexToHash("0xd948fca863cede02bfc3a3648e1fed6afd08068d0375132ec6db3809b3b6d170"): true, - common.HexToHash("0x0768c4bf7a59b92d85235fef0b4d293795c1f0c5656ec07354d06e03fec4df86"): true, - common.HexToHash("0xe6da8518befb1d33f1f6d8b72e30228f8d1f321c117ab28b84c23a2b847e52c1"): true, - common.HexToHash("0x9084e236c45736fd2f4eb1e8aa2fc3c8a5903fc7f6460b993c475ec73a429879"): true, - common.HexToHash("0xd6128e0b6914382c045752c818e89ad33234d82a5c2be16730fd241d1563583a"): true, - common.HexToHash("0x371edf49a8a7b7be33da8b9aefaee59cc53b6a2484f1380edc825904de0f0d8a"): true, - common.HexToHash("0x244af6124aabc6cfca03edb37e22097b87cdcf1fea9c8d0de3c326230ef7f3aa"): true, - common.HexToHash("0x353046dd2ea54934dc4bdcdb332bfc4bffd89350cebf2eee53a2836c253be8e6"): true, - common.HexToHash("0x4dff198008dda8d08553794ebe14fe5888aa9d4bc937897cd271bfbd7950fe80"): true, - common.HexToHash("0xfe2987df0e3c20ae34dc509e0f390e7ee74a6dd9258c41d8c68957e03a84702d"): true, - common.HexToHash("0x46c05861fa3d2c0d57aa885cd1d397203c58cedb85719c34e4c61a8fd5ebe4e4"): true, - common.HexToHash("0x744d8819f4a8f252eaa820ecf45c8fd1ed6f72c30cfdf3aa673129e178f3787b"): true, - common.HexToHash("0x85a3c99f566c676721307f4cfaad782c91a67ee6680ae9b39e2ea4c56101a262"): true, - common.HexToHash("0xd396068f4a6fc868f9c20440bc28cb01a063a4458acdcd7e6d16612405829ba9"): true, - common.HexToHash("0x5271a7bfbe74b96b44941244c34bb8c691469644da621270462bdc97a6a7cac4"): true, - common.HexToHash("0xaf737f488844732905d3c57b668c21c67482db55b7b1eb4b8e7642b678369519"): true, - common.HexToHash("0x56731cf609d77b6e046730dac2bac51eeaf0c4ee8f459713f64db692046b8a4a"): true, - common.HexToHash("0x7821532169b19681982360948adab7e2d7eaed226d0fcd2e007ebfe2e4ddb1c0"): true, - common.HexToHash("0x7b945445c7470215ac6a365c8ca586bce4525d670914ad61f26c98073db9481c"): true, - common.HexToHash("0x054e8e397e9e6019220ae69d505cb0f3103adc0605ae8050d08fd0b46961c6d7"): true, - common.HexToHash("0xa6db64197841f343b4415d92e80de37340145cc86d808fc797d54e360ea3db90"): true, - common.HexToHash("0x894b39c351ef27e9cc5d2ff12fa68d07814d00ca8b7a41bf37053423d054955b"): true, - common.HexToHash("0x9e1e4678623f3b612df5c7fb67e078b10fccba9c62729ca8a8ac931397d4e337"): true, - common.HexToHash("0xf59d37775ec35b6cdbdc35dd063b34df820015798e2da38267625402754316f3"): true, - common.HexToHash("0x1f40fc40204fa105860686550be8a78cf590dfe7898b489a81a0589e02b65180"): true, - common.HexToHash("0x0790a14f5a8df320f3e28bc204ab53d6ffe1149caeeaf377494c07a6c9e677ef"): true, - common.HexToHash("0xcfc3941b1bf438a7e5d559e442771239dce5b16b163f27a10afe95ffdeca3cf0"): true, - common.HexToHash("0x2fc8bb00d795fe7140ced7b518ef17a10198edf453b515e51d76186d762bd520"): true, - common.HexToHash("0xc3a51bc3642e7ecfb905c383e828b8abb7a8c469addeb514573c9b4e4c32d871"): true, - common.HexToHash("0xcfb3d3ddc6660f36c6929433c2cdaf208dc1dc696195a01ddb00ec9c94b172d3"): true, - common.HexToHash("0xa1f2bcaf780f1e3a4d507b088690e673cb6a9eb091166c81d5780322a1136f99"): true, - common.HexToHash("0x327d52b9acde7528efc245d676896515499c67dae772b37647aae93e85fdae94"): true, - common.HexToHash("0xde32b02bf72d7525e7467685db48be1db38252678f4551bdf20f5ce136737945"): true, - common.HexToHash("0x136e188f4e4888657da2100d5b82c2241a2435e67a0fef89d9cb92b3b45970e0"): true, - common.HexToHash("0xed4e1c4ddb134b0c543fea241b1ed15f23d75073d79d3a4d432bd2a790bf06a8"): true, - common.HexToHash("0x0ad954729743f2167fecdb45e2c6f145054303379eb00614d4242ad884f7a8b6"): true, - common.HexToHash("0xc78d6b2f736f9848942f2bc7d88aa9f3113f7ba978708dca7d35ba5e1bdc91b7"): true, - common.HexToHash("0xcf3c14bed1cac9a116dffb5ec23e2bff1a9fb53289bf0bc3c0157efca284273d"): true, - common.HexToHash("0x0c9701737a76e13240b9c78e72366b9a52e55dd58bd9512951c80f8b944b2371"): true, - common.HexToHash("0xed1b8ec1863d46465786099004e46f3e8fddf37eb5c6607fabf07dec5804f968"): true, - common.HexToHash("0x6dc72c349abc0ae869e937065fa91fac09c5909d8b46a58f00a6bc23b3e7afda"): true, - common.HexToHash("0x7cf8d06df6a69b8778677c45eb4557733290f6c67ad1d63d3668db6fb90cc71e"): true, - common.HexToHash("0x577fafd6ce00206640772c8f92002bf1ae4ab9639b8a30b10ff4a2ee5c08cd15"): true, - common.HexToHash("0xe9c571fedf0c6f0a16f6e26e8e96e1beebe9410d4d0934834fab7686674a38a9"): true, - common.HexToHash("0x51abd5265d19fc9967cccdb788844dbd4aa99d354b53668ee9476bf2846920e3"): true, - common.HexToHash("0xafe6e0dc9ccebf8451a5eaf862447f13a0ff1db7c3d13d4d3a07161db4a5f5f8"): true, - common.HexToHash("0x23a9b219bfd06590eeffbc4c88ae3725442d71141f3bc592d18a6d2a21c1a948"): true, - common.HexToHash("0xae7677da1acf6fbae42a50bee8378873b7b31faeb521444487fe3ce8803edf2f"): true, - common.HexToHash("0x9e355e44da19a84cfccdabfb6bc4305295ae1ebef7647ab637f6ed826f4d49d5"): true, - common.HexToHash("0xa1362638039493983a6181baff57399813d25f6522d28e54565fe5be47d11a16"): true, - common.HexToHash("0xa3549b3bea8ade7ce1c3551de197303dc1d468a6603b6c227610d71545a95582"): true, - common.HexToHash("0x2575d08357d079089ecd8c29ea8814e5d3b0e47ae8d0deb69f377ce6f9873886"): true, - common.HexToHash("0x248f434be52b3117917d0d3273e10ca08d05cd7da72153c4ba760fa96b5d89e8"): true, - common.HexToHash("0x6d997612221933494189959c8b4fd450d733ee2ba4003451aec082f0110b44bb"): true, - common.HexToHash("0xa8410d2b9728c26cc6107cf485b90d9cac9c18982f4a224fb519b3406882d8e4"): true, - common.HexToHash("0xf34975e8080b48cc7a834395ae11703862743fe5255e5b62dbd3885f2c792a9a"): true, - common.HexToHash("0x4977bcbc9bea5495975e9553b8d3a2d28e229911fa898c57301e00942a76fad5"): true, - common.HexToHash("0x1e45150a651aa031c080f87389a7f2d1786051cad623773cce32185280359da5"): true, - common.HexToHash("0xbfe52b9393ce1d1fdefbe6567ec8a9223f13a8e4e3196d5cfba1262e24f63e1e"): true, - common.HexToHash("0x7f4651b120f8f46aa9c63c2cb2028c49403039f207228e21a654e9c79c2ecbf3"): true, - common.HexToHash("0x586719bc23d40a7ec43eeb81266ec784d2dc4df9151a154f88836ff285c8ebce"): true, - common.HexToHash("0xe60469631203b2e17662e5709fccaf08b927b6a3515b109de362fd97ffdb3637"): true, - common.HexToHash("0x4135dc76c2612d150b72a20d24a3e0b0982ec955fef1f68116f021cfbb027b2c"): true, - common.HexToHash("0xac040ec018a93858145792d7bc03bf0b9f78403409fe633ec337f096d92b94c4"): true, - common.HexToHash("0x40f152c95318efe4549ff51588976f9b8c6030b23a67172899a19b16e1fac972"): true, - common.HexToHash("0x979b1c2e39d5afecee20e0e0c49a9d2e2e993359ad07ef28cc9529972968af69"): true, - common.HexToHash("0x0f721ae468fb24bd13fd11f980ebe0b9c24a0d019eb210277fef0dd6e98a3e05"): true, - common.HexToHash("0x7d88dfc784185dbfeb11da4e8693aa0a6090f1d129bf472c48abda960de3c2c0"): true, - common.HexToHash("0x914eea684492b9c5692f47ade58836f7fa5bcca541afdb02f113b2a3ceb55b12"): true, - common.HexToHash("0xcaac9c9b58fcc0e0baffe7c4104228c1f74e086d630df7a25e236399c470634f"): true, - common.HexToHash("0x8a62033985ceb18b6f4c33d0e76444187df0c9bf96756854fd96883a5aa31370"): true, - common.HexToHash("0x79b0584f3fa349171714f5a34c8a886e15fee44f537e4075c6fc116a29c2e97c"): true, - common.HexToHash("0x5321a8948ae26ea99b559fe4f29a381e4962e50916db16de235e310333838275"): true, - common.HexToHash("0xac37676bfa3d0165bee708ed76efa5b20aa5f4546ae22a5f6a5a3bc940e1adb7"): true, - common.HexToHash("0x6dfbcfd913a4460e64395a492ec86ec5407009ed7b1a71371c3fc6c7e9effb9f"): true, - common.HexToHash("0x17c2b879f8b69c0f2bb34a59ed3fcfc0ea8d1a7e853bc142b3cb9b84166969e9"): true, - common.HexToHash("0x02f5602119f6e436c49dd40c42915692cd2a319774281cbe80e9ccb03e39ec95"): true, - common.HexToHash("0xd1749ce893a51a5cb654c67c58a0bd247e9dcf4b2bbe745291e1e3c941c6468d"): true, - common.HexToHash("0xfbc582fe11451001ae4ed85269cf2072179babfd348d030cf81b9000c8b67c22"): true, - common.HexToHash("0xcf05a4cad7c29eb082655f5b1209a74bbabfcc66fe1878c94824a36689beab6a"): true, - common.HexToHash("0x228e12c331f648c95db6c80c96080a7c399009da8670f286601d1a5f7f284bb6"): true, - common.HexToHash("0xfd097d1048606b836968d2f8b84c253411422efa69958314b33bc504601f6609"): true, - common.HexToHash("0xb0b7829d9eff00ba90533703eadd6114815a13b91029a562451475fd29d701c5"): true, - common.HexToHash("0x686a1bc62b2b6ba7cd17f6a304fe5816493f5b6bf1693c84c3aad166ce33199d"): true, - common.HexToHash("0x36734754be4f622033749997a51695ffacb47c65c5b35273f573ab296b5427f3"): true, - common.HexToHash("0xa04a55e3df329620abc504e151760dfc6a5f70f121d034023ad9af234d68a24d"): true, - common.HexToHash("0xf35984a8b7332bfc3b3c2ce0437f30453ad5167d90233c5390c0d43a97e28ae6"): true, - common.HexToHash("0x0c4a5b0302da018df6dbf50c59c2d7ce4e403da01caa73618a49cb587e3d7528"): true, - common.HexToHash("0x22389f32eda1c327e87ac7bd24630b2d686393094711b7b928eaece209e28e1b"): true, - common.HexToHash("0x6111db646a09809ac151762fd78b3e94d5e5ccbc5a14231c119d98154ca68fad"): true, - common.HexToHash("0x1e842bc8a20e02dde7183ecc95a378668da306d0d459bb3c0c8d02fac6b9baaa"): true, - common.HexToHash("0x0668c3b9e6a4eefe4988e213caad1e4bd9539f11e07b0cc24a62ded0b67c4f54"): true, - common.HexToHash("0x4fc985437b7e6cfc7bffa54d2c2d91f0250474ed2ceb4c8a64a44c79e5c52a55"): true, - common.HexToHash("0x7535427a6f33d7aa12492dec9a3e1ab0adad55521c83572f976bb4d506f97b7e"): true, - common.HexToHash("0xbc5d03de047d159605de5ca712de6fdad4179ef3a0bdb48a648b822bcef66cd8"): true, - common.HexToHash("0x634f9f9812b4b8bf6cc9a607af969c30853cdf243df8315f2a5be498a27b683d"): true, - common.HexToHash("0x2f0cc566fd5d28387890815863c0eeb8b1da3a18bb73b520dd390beda2466730"): true, - common.HexToHash("0x43464104216619be9cef32550ca15f495615202209bb29f595439446f479c441"): true, - common.HexToHash("0xd1068dff171dc9be6dff401e22d106f6feaad050892ee4b0975dd804d792757e"): true, - common.HexToHash("0xcb93eb09e9e092426d9e217884326c441ebe2c9407c636f62fc2cb26c1437fa9"): true, - common.HexToHash("0x41b33f12958dcab5f2267e29f3b50e605fe9f6d5e7ee1d6496cbcd60394f0508"): true, - common.HexToHash("0xc5e34c722673a25b3da252de4924a78744f2afc70f158a4fc31673d2b534b272"): true, - common.HexToHash("0x1b9b4e46a00bbd5b29d3b5d5c659e27c701e693e6f9f028225f2e87792d83369"): true, - common.HexToHash("0xfdd5eefd074ec3d9744a403ccc61343eeff515a8c5d72f9599b78d3f191f7f5a"): true, - common.HexToHash("0x608f3394aa8f821273baaa680276a2ff7c05dfdd5ed60cb2d3ac876c6b60c920"): true, - common.HexToHash("0xd9d836296fc6245850fdb3f798db7868fc2adc07b99c6f0692854cb164d64629"): true, - common.HexToHash("0x572ba0aed1a3cc167fc6bfe4cfcc16a2e50017d58295592e06ea25fc345ec448"): true, - common.HexToHash("0x093024cabe583aeda32fc83eefef8972bb87a36d4f17e0297c4e6ada510115e7"): true, - common.HexToHash("0x35c5fc4e61f3fdf78abe173d668b7a108c075fb313b43ff5b461d4438fe1b2b1"): true, - common.HexToHash("0xf67bcb6f464fb9d7d735deb1e32b002aa13d22784c944327929cf90c48a7166f"): true, - common.HexToHash("0x93aa1f89d74e87241a6b171cf062faed91014a59763d4e878359abf3b540b0d0"): true, - common.HexToHash("0xf9a1e384a7608fcbae2f1db796b8783f388f23492e1bc4d0665317afb8253c6b"): true, - common.HexToHash("0x9c1a9768148644bb21d0ecbd077106aef984fb24684cdf171479b9bdda8f64e5"): true, - common.HexToHash("0x074e9bfee542d27488377ecea662a02f339c480255e58c8c2033dce77ef36afe"): true, - common.HexToHash("0x0d2611f5601113232a2788f3ab78eeb400f8a18d2c52ef6ab449f15b9a06fa3b"): true, - common.HexToHash("0xed45cac776eda1fccad548df5f6b1675d01a8083d5add3b2f44039831eb2c9c7"): true, - common.HexToHash("0x3f5af6389cf76dbaf31c79742724f339f86e8481cf57b2d00e29c558189e59f1"): true, - common.HexToHash("0x2987d12dc028898fbff0f5a67c014cc8800961d49a67cce6fe71c27a43d3c0a1"): true, - common.HexToHash("0x68e7ebda8b297808cdefaa9cb2a358736175198259610c1bed8cddb741902a73"): true, - common.HexToHash("0xad5c8d02b8fe1bebdcc3a726e656db71e99e236fe140cc623350b847f0ac6d19"): true, - common.HexToHash("0x3d5b98e1e1fc3a0ca50b0b5bdee561edcf084e2dca7f236170ad890baccade65"): true, - common.HexToHash("0xa768871b5e283902805a358e780288e8bf0ef7c84bdef395ed26838820b25bb7"): true, - common.HexToHash("0x624751ade74d051fb8c07d1b9dffe64daa46c26efa80d739c46892da6c123ed9"): true, - common.HexToHash("0xb305f5af137703c12d3d4e0a60a54199423729bc5be61f8a62605dbb355de9f9"): true, - common.HexToHash("0x2e1620d81120e6c0d18c1b28738cbee7636eacd70a2d24fe584bede7a69dab01"): true, - common.HexToHash("0xbe609767009edae5ec1ff86625d45920d43740376fad925ab3a50af483c15239"): true, - common.HexToHash("0x8a1965d9ec2831d77adffbc0484ba86021b340dcae25bf37a689c3039f9b3482"): true, - common.HexToHash("0x356fb3b98a30f069a20cf5b5ad3f11f1b4652a81cc98db867d9ddf6aeecdd574"): true, - common.HexToHash("0xfa2ac9507eb0ad2ae5acad6ec7bebc77967b1724d99a25a54e7506e440217ffe"): true, - common.HexToHash("0x1093716d1791a3e8c7f874b7e1d089108f47e180f01d83d595cd89adfc04a17d"): true, - common.HexToHash("0x448cd82427662f3e0dc06677858dc37b4e46a658227fb017309e666244bbdf0f"): true, - common.HexToHash("0x03ed97a056b7c0556bb41885a0490b2e9310b93e18eff28c1d9be33082a6fa05"): true, - common.HexToHash("0xcdc1a45a8e2ee414dd5e72b3236fa46dbd04eda98a055cc01cc0c88a2ae05c06"): true, - common.HexToHash("0x101f977c056ae1396516d4af396860f51c1a14ec3a6658efe8dc02aafa572d09"): true, - common.HexToHash("0xfe7e355d31a8eb30782c25c52cd1829751a2aeeb024691f4807f1d87c2606c1b"): true, - common.HexToHash("0x7fc111b12643b4d87ccb8ce256c51ede4a7dd0ff0c244d2e35c97d17dca44f32"): true, - common.HexToHash("0x9d4b14233e2c001d018c948ab0b12df376d21a32a35cb9b5b8b5d000acd2d12d"): true, - common.HexToHash("0x430ef8fa062746f41e7f6804f0fb908c9451f9bcd53aaa414ed73a39e1be2a3f"): true, - common.HexToHash("0x021d5f2ee1bcccb8d93e3b2ffb1361d7187ab554561393467241d3bae7c86e5d"): true, - common.HexToHash("0xc9606522bb4f4beddf0fc9fbcdb274dfeae9c688fc804ada1fa75e777e79609a"): true, - common.HexToHash("0x5102acdf28f2d843bf93c8f10e1bcb75bf98094b8bf9ce305bc5dd28a185304c"): true, - common.HexToHash("0xbac1f6cd5c6cb605a7e5a8cf7cf76d38d24536b637ae11a9c4b40d830563c76c"): true, - common.HexToHash("0x4185b8602e57e6f6cc146e88b67a303753867b0c3b2953e72575b24db5e112f9"): true, - common.HexToHash("0x09ac6c716125d3081acf71cf36dd97852a237740a91ece5b3c769a579cac43a6"): true, - common.HexToHash("0x0ca37c89eca46ef1ab5661404e674a7b83025de68b6c57e7fd725ad73da1fede"): true, - common.HexToHash("0x13044680396cefeec88853cf74cd4dd05579aff33c2d091d502cc7fbf0404d12"): true, - common.HexToHash("0xeeb19d4df0b859b0dcf5873ce0133ebf0c91574ff802833acdf11723747861b3"): true, - common.HexToHash("0x39cd810d5c793c97f6d726224ddf4bfcd7868431aff51b09051b09678c0a382d"): true, - common.HexToHash("0x0df5d74c6ef919b2c7341f08b0c80182695ffcd64b59435f514e0fca0c4a4621"): true, - common.HexToHash("0xcb7534e98699f885c791da533704b9e8360cbe3b182dde2f57f25dad0e531e61"): true, - common.HexToHash("0xc739a0e4d03d334f4d03228bd03afe4948aaa4b5c41999e7eec70f645de451b3"): true, - common.HexToHash("0x6cc0d1566fca669c27186c923fd07657f47e2715889028db6ef9ed2f920b790c"): true, - common.HexToHash("0xdef610f83a1876061a529694b0081e412141c0d1af4013d2ee699f636bf20a06"): true, - common.HexToHash("0x33f0964e0642ae09debf680f21811fa4ad7bfcab30ab80ad8ce32c5fb1c6906c"): true, - common.HexToHash("0xd8df45e6c01c40dbcf2c14e222ec233d633ada541a2ffac1c186be5acdf29cff"): true, - common.HexToHash("0xd73d95118954bee55d68fecf99cc089089f1d39e8158be3b5170f8184e885bcc"): true, - common.HexToHash("0x89fa4985606a37888eb2bcf56679e5722912d62ea895e2b2dbc930ad25680372"): true, - common.HexToHash("0x0f848d62eee251737ca688299c37c32c60c029db26bf53b81e29b4f8e9d0142e"): true, - common.HexToHash("0x820b95c71af1f6166ee335c59936118850b16e80618f70737999f6bb9d276282"): true, - common.HexToHash("0xa1a4a75c8e11116369b9a92bf9fecf38dbd8772287ce85e1a6d4d172898696b3"): true, - common.HexToHash("0x6f7a7ff45713c5956b8f7075026f0f1bc1c8726125b54ca6ae4c6bc33652ba23"): true, - common.HexToHash("0x4309ad4c115f0ec8073ef52a36ec1195b26ab082b8a53a0cfbee6540be3c02e3"): true, - common.HexToHash("0x26e1c4a48271ce8321f051e0d5eb9122d956e8be378765017da96922b3ae1410"): true, - common.HexToHash("0x24f647b1d03edeaac86a50939190bc0224eeac36f7f74f6f4d8b2501b6ea222c"): true, - common.HexToHash("0x2d33096225884c72536dfd5056b1945b29079f9462ca0ac15e5770fd7ffbe55e"): true, - common.HexToHash("0x79bfb23542490baa41d069876b11ba93ec1edc2187891057a8b0799dfd874441"): true, - common.HexToHash("0xc83624773e1071288072ad590abfaf219ee173a3b4110ee2230f95948cd24442"): true, - common.HexToHash("0xfc2bd0d940736165c49b6e7c2eeac14b1b5599a86683beb4a17dfb1c7b104789"): true, - common.HexToHash("0xad9e2217e6fdf3c0fb9003556f6e02ad9105ff6a6a94bba3e22c85dd4863a051"): true, - common.HexToHash("0x314715400f358b3d50405a1bcda348a057809613d3ef3d5a2ba9831a135f8065"): true, - common.HexToHash("0xf8add3ca2e953b7ff39dd96602119fbacfe1f095c2e4d05f39c233ca883bd0a4"): true, - common.HexToHash("0x86bcccb4b8863e3be0e60a862600a81468181974254a0071d733f5ea38c3c3a2"): true, - common.HexToHash("0xb6c9748c1b779d4dda75b2600d06e4bab8bbe8322f0cecb0e2e881b4beb4468b"): true, - common.HexToHash("0xe209b7b37eb0ef6624ef8b96d0637e08f33edf3a2bd5811ee490af5222468e6f"): true, - common.HexToHash("0x2388ad71715ce97052606e6a1a43bab78737dd2b7a1f9fa4bd8340b406db278c"): true, - common.HexToHash("0xc99348201e7100587406e8d439a5f929cf5e8895128ba0646d8c821502f6b5f6"): true, - common.HexToHash("0x6bb4b3fbd785017c657375c055b446ef6de6f60fa881ec387fe00f691663a0c0"): true, - common.HexToHash("0xd10e49e21f7ab66e4d3bbeabfa4c2abb8b4bd8137b084cc1f84c3f9896c0223e"): true, - common.HexToHash("0xd7a8a534150191c7d031028f31d6da512bc7c30822c0696632a2bfa195f7fb92"): true, - common.HexToHash("0xaec4c035b225d96df41339815580681773e0942d6a88a9ec889605035b52fec2"): true, - common.HexToHash("0xd89f0e8b40f9a2a0f047e548b10c40f5815696e3124e59dce1c82bdc3fcea4c0"): true, - common.HexToHash("0x6f1f0089202563824ef0e6e359348a6e121267b386170e8b93b484a4b7cd14d7"): true, - common.HexToHash("0x27bee997e5f31f9c66c90545127318bb0f98f4fa24b619b251e6d70d05d01755"): true, - common.HexToHash("0x7591570ef3203f7227df10594cc537b9a0ad9ad71529e90caad18244d0368937"): true, - common.HexToHash("0xe4366bd925f4952a926d49bc3a80c7e7fa67d481c36215272f480b13dfacd3d1"): true, - common.HexToHash("0x5765f6f3b8470daa14b868d99fd1c83c6c4a2d8a35165ac847a1c942b181f970"): true, - common.HexToHash("0x59d3d2ab3644a99e8d29ad01b2992f11b8df02efa8077bd4779148942dfbf659"): true, - common.HexToHash("0x1ddca1d1f0eb8bebbdf51adf97b84c8ecc6d70ee86422637a091bd3ba926b92e"): true, - common.HexToHash("0xcdbe49c7c1d31bfd96675022352052280b9e1299c2b74a8594955903381aa43a"): true, - common.HexToHash("0xeb2c0c443f4de44e7d386aa5ceaece19d329506411e260b2f8e03ee37e3e40e5"): true, - common.HexToHash("0x19d9fbdaa4c49186e571f19aaa27a97890a26861d030500110d7f36dd45b8c87"): true, - common.HexToHash("0xbf654ed28a84173c48a8124e8c4b9d4fe0b47079e8dc53306edee14e085327ef"): true, - common.HexToHash("0x508c37561cadc78db6076f8d7cf1973143e12d156855771b48798ee869724a97"): true, - common.HexToHash("0x27d9aa18cb476d4b53294e730037fdfd7580d43b762d9488ad65042e360f4a81"): true, - common.HexToHash("0xba6be72c04000f935a86ef5815817da1e9d79b6e1de0facb187291d52fdc5edf"): true, - common.HexToHash("0xcd4a557823dc15e419d154301e6fddb5e24481cddd3b429c54404e65a5ca5e7a"): true, - common.HexToHash("0xb71646a31ec385d0373c0117633a3a5f8920eab4f664684188f04460cc0c9d4d"): true, - common.HexToHash("0xc61f0acd67369f44dc7133e0746bcba992048c153b5a6318d79e56142fd4efe9"): true, - common.HexToHash("0x2881039d20a40ede7cbbe61dc74416da3e9889713339adc031f4d435cf85bdde"): true, - common.HexToHash("0x6842347fc5898d9f716d53ce9b063beb33b394f731fbebc946a395d795f7c28f"): true, - common.HexToHash("0xc2fd1474813d5931c915c61d5051111fc4832effb7ac8fff03206e64cdaad9d3"): true, - common.HexToHash("0x1f8614a9a4e780f748201e5ea70b0ff0c11eeee46e0eff58ca10e1e09cce83ec"): true, - common.HexToHash("0x98f8e59077e01517dedc6d9ed8627517748e3f1079fee68a18f7907214f8414c"): true, - common.HexToHash("0x2663c4009905a4c163a1e8d4bdada2fd6b2a45b0cb0369b9fb46b7c4f1a5412c"): true, - common.HexToHash("0x075401dd2da20369f89f8c91d2050447e78a50dca211ec269fe3b8be973ca1f9"): true, - common.HexToHash("0xb7ff0ff04f42b0f43c1210b6465c0fdbe0bbb354c776be589c063a55d6ca88c3"): true, - common.HexToHash("0xd4db8166f12c69959cf0f745c7ff528c60ef6c5a754b1cf511f289568aed1d24"): true, - common.HexToHash("0x07884556f2c4d9a17f4f36cfec21877904f0f3b7b745777165f772dec1def4fd"): true, - common.HexToHash("0xf1c40c38d2a32a4ace26ef01f7c3683dccd08b1c1ea10be8970a339b49aab544"): true, - common.HexToHash("0x108801190d3af71d68480bce4ec11f383678f84c6fed8b81ab61d7f94e5f4057"): true, - common.HexToHash("0x20665f0a9e4f11585ca3d8afc16c185589e6c1b8ec77068ad738600136e13d8e"): true, - common.HexToHash("0xbd3df993b6dcd0bc00a382c72278beb76ff95832bdd40c7dbe021c17aabadf25"): true, - common.HexToHash("0xe8468d7119d03195546c09e79c0088c3a95fdca64e8353bc095d283724d47ab2"): true, - common.HexToHash("0x09a3fe952eafae34421d25c1e73e662a4866d7af8aed3c7e2cec31574d49ac63"): true, - common.HexToHash("0xaf450baa632a455c1f70d785b89aa017fa92b7d1decb40103be54e6cc3d60884"): true, - common.HexToHash("0xd53edc787caf31742211a2c593b2f1e78668b807dd63c2a56094aa8ea81f5160"): true, - common.HexToHash("0xcc1c9642360acbd56b03e29ebe3a26fac7a1560ea2bc5a9380358bc015ccb3c2"): true, - common.HexToHash("0x8c3d7facdb4217208041ffcb234563de68cf549af8bde366d4e07c4e46bb10ab"): true, - common.HexToHash("0x5f585b114aa50264e1a9d1b581978e4960bf2b0726bfba052b38c71800f31b53"): true, - common.HexToHash("0xa50c281b2cd0b3f81954731d91fc10e47e84b5bf7e48650cf9a47ede91e8f1de"): true, - common.HexToHash("0x45b6960f3e3c2106f46538e357c2a6ef73067bf5f4d84244722af352f21035f2"): true, - common.HexToHash("0x0e9782c0c5ab02cd7c4f6d2b86451908928ba861fedd62964ed0a46eaf301d43"): true, - common.HexToHash("0xb5db62e2d67e85135a84b3d774e473ceeac3fd87e51a11275e43ce977b038335"): true, - common.HexToHash("0x11134151fa754db722a4434f2fa46aea591c28abc6a2c2dad68e79b40cae5df3"): true, - common.HexToHash("0x0f42b189eb1503fdf31ab601d52ddd8fea0089fb899d7da61b9ae51b0dbbd84b"): true, - common.HexToHash("0x745b5a241a91e83542769d80373604d407506259c68666852fcf8d6577298058"): true, - common.HexToHash("0xc602c49b42408976b7055ca119b95539c36497fe02d4197094ac8c0edb1f27a3"): true, - common.HexToHash("0x99ff3773df68f6fb3b033ab2760877d0aba3c9e45f145faa2e908d5e6632c1f0"): true, - common.HexToHash("0x7e0ad5e916a0da7f2882fcf3528d5adece9f827cb619323012abc0eb4622ed26"): true, - common.HexToHash("0x023f2922a3f0585bfa97d25a105607d64b6b8224d1c200075a3411268b514656"): true, - common.HexToHash("0xa04658d8d7ee063c4d146ec10f7d8a9c9431c32e402c5872d163e24d53b72362"): true, - common.HexToHash("0x30846addd34de9151c84cfb53753f5d782a136e0d6f1ce4dac04bf01b690e56f"): true, - common.HexToHash("0x83965f5daf07fc4d833324069afbef9db3f450ef1f7b02d46846be7deaa758af"): true, - common.HexToHash("0x0567b7a753ba1c6e8c232c0a62d269457d12c11835d75847d66dd2af68871bdb"): true, - common.HexToHash("0xf0c5d5ba117727760c50b55b2b33294813e1bd029098b61ca72366626e34c208"): true, - common.HexToHash("0xad6973bd996d8bbfffe95ae879b13e191392be5428b49204eb89dde4d7c505d9"): true, - common.HexToHash("0x58e18d23758862f79c27035fa4e7dcf6b7cfc32f555072966073f4aed562b952"): true, - common.HexToHash("0x6682a0bcb1bea9973271a97153979d3174781024239f579c1ccd74cb40d40510"): true, - common.HexToHash("0xb939bac596bc16e4986ab80e931ee941e097ac018352fd938f39d322bff8d26d"): true, - common.HexToHash("0x650fef356dfea9ad88253b77195144194a26de364cfd0f1e76522b492ce53ce5"): true, - common.HexToHash("0xd6d327bbebe5f2aee3bc83b12f1502c34a764a1172095a417907baf26e6bcc59"): true, - common.HexToHash("0x49f39162d6a6c2df78aef54c433f035703e2876b7af782a819ec8662db240abc"): true, - common.HexToHash("0xdab616851a9c5e6132bfff7d4db6cdd77104156b70b2b261583b71837d9a5128"): true, - common.HexToHash("0x35fc40165b72bcd491420ad148e3c38a38ea7d9f43ff1aa071ed35a33496c6f1"): true, - common.HexToHash("0x0ae5bd5c88cd78487936793b100fdcef081948fc969db64ac7303b4cecf60a71"): true, - common.HexToHash("0xe59fa6f8477abeaa87a9903f4acca270fb9395ae01689033039ed5a2a56f8d4a"): true, - common.HexToHash("0x8b346cbb6c4436f5137c68a39bf39e0b19478e75eeb3ab6b0ca5a9ecdf255660"): true, - common.HexToHash("0x4950cd31cd585768de2e795a10e8c7b2fd58da95ead15a0ddf8e29cc5f68c10f"): true, - common.HexToHash("0x2e62c47e71fb62254e98fb64da4408000137f966463ab2e0cfc9448c26388dcb"): true, - common.HexToHash("0x9a808b7e03542cd70992e10da287ab20d64c59212782bfefe0567e4733f3ac1a"): true, - common.HexToHash("0xaadc8a67bc20931a449e9a7e6207c71724898ad7862ce8026630f216a1172107"): true, - common.HexToHash("0x93100eccbf684c2fbfec824dfea57cd75b1aed284c90bfc944f7827243385eb1"): true, - common.HexToHash("0xef5c34fd35c9e28fbc5827eaaa24a267c815c633620f32dcc61195ce4cb5f4c2"): true, - common.HexToHash("0xdc29cbc3774acddad351431b7f3d5ea07af9f109b3295a331d9482c45e2703e2"): true, - common.HexToHash("0x7a1c6eb0699812fe7cf6c404b395b6a4f4e65328c981eccde40ab61744829e87"): true, - common.HexToHash("0xc048550af52149ccf73cbe71c8144af1aac6604fde9e197f8e83a9c4ffcf967b"): true, - common.HexToHash("0x65153a828e4ea6d5d3378c8fb75f4c03c4acd10d48b98d144a343aafa51e018e"): true, - common.HexToHash("0xb8aefe13e6ae54958b5891cf665a2f29a098ebdec25efdee38026d39c351be1f"): true, - common.HexToHash("0x821f9000aac3d9301549ba08eebdf8132be434fa322130b3856260b7e7306bba"): true, - common.HexToHash("0x9b6f56821e7b33a247766cfc9b7a61acc38f04969c3e986fe30b26f1f5e1f8c2"): true, - common.HexToHash("0x851cf63d313e38c5f7bc9c8745ded272e588beed9591b0fca1bbfe63258c1918"): true, - common.HexToHash("0x4a5bd4719ba5d39a42ca70f9f8c53dec3e5009b3157117cd9b4c52c3c45eed8d"): true, - common.HexToHash("0x935bc78c24aa4ad915e00dc670a2ae3bcdabb38425f0fd7c9725c03b70db25e9"): true, - common.HexToHash("0xdc8cafe2bf52378a18036c6f8e80d3c3dad9f92192781d8cd385d6661040126b"): true, - common.HexToHash("0x913525c0ae1002b69341c8bb20f9857cd63fce9210ddfca8616f8e6c2edc2172"): true, - common.HexToHash("0xd5914c7d07303e84f17a07196a86b81370927b13d3324ab8db66bbe9afa01a47"): true, - common.HexToHash("0x548630c8ab6219121faa2ecf24f00e33984ed02c1a9223f09744487b4b898383"): true, - common.HexToHash("0x9973dc40d52b0e432a58fa4e415eeea69a8a1dc90fd28d17aee80e9acd04f4e4"): true, - common.HexToHash("0x270ef2399d09cbb2f6282220990a46b08c3faa9e2f3bb7d0f4d06ff3cec9ac2a"): true, - common.HexToHash("0x22c0998e202a68e6d896e2a9a1f5ffef9c1c4783db22153135d49852b4a8043f"): true, - common.HexToHash("0x46a0018af0b989b41ca09e2827140d614be61d699f75757856f58029431e3e57"): true, - common.HexToHash("0x2d36ce6ee8a52347f26778c6e6c71c764b8d2ba7aa7baa9c00bd9b2aa824ccfc"): true, - common.HexToHash("0xf1b95fece8f8cd569ca6c2b18fdaa46d62d24bdbefedbc0e09e7f15d6b2f4e25"): true, - common.HexToHash("0x78291332ff996e0e063f515dfff2a3002d8f9be102ac43500535bce8df4f89c5"): true, - common.HexToHash("0x8b1f336d89750fe052250e160f635dae7046bc17d75739c19f9a5651a838f384"): true, - common.HexToHash("0x831d61c3c5a8cc5764ce8ba1063b6b294582cafb74c5e67b95efa096e0e2515b"): true, - common.HexToHash("0x15360a44db0faa2f447eef7d9df3fc0e12c0d5d1fd65b0289445f6bad424194f"): true, - common.HexToHash("0x8ae3524a3fe69d23ea1307286d70f1e0de8641f1eb448f1ac3dedd9b188ef596"): true, - common.HexToHash("0x01255107ddb8be7699d4b9fba38d89cb580d085e71328c954995252889b8971c"): true, - common.HexToHash("0x1522ea1a1052e3a96ed8640975008d8253f1f2f6ffb818cc8532359d3435c386"): true, - common.HexToHash("0x6d57a9104707eb7017e720835ac5363a45a063cb334f70b21ca2463e4952838e"): true, - common.HexToHash("0x21a08eb53e03b21f2294a9c08ff3c5d03a68fd8439306f70cb37c5a6becb8d2f"): true, - common.HexToHash("0xfa632e9c0d13e1e5b4c784781a96153188983173f2e5278a6138e3d0c6df2ba9"): true, - common.HexToHash("0x66d6adb2525546eab3c9d6f19cae8899a7dc35d7e47d0946ff52bf0877ebb5f1"): true, - common.HexToHash("0x1589ea3d7c54183c8c2c6fee4242ac26f226e931e27544fc2d06b24d9b7d18a8"): true, - common.HexToHash("0x5901172ed4f4fe41cc76be64e509313f3dc05c53fd3407cf0ed5f61530506091"): true, - common.HexToHash("0x7a69407f985802a657327e91a19b30cd1f187558f985e7e445912270fb8e7c14"): true, - common.HexToHash("0xc8346e19e871506750c09a9bf9be881c0cb4591207c3bbddfdeddedf71b0b03e"): true, - common.HexToHash("0x0a7ff5f70c3c00af521768a499a69cf28e3995bc611ee82c7a41777fe40208e7"): true, - common.HexToHash("0xef9d2f53998abcdce539ddfea41e69f9e7ad795556c214637bed72a81b079346"): true, - common.HexToHash("0x95b2df40d57332e4f95a02644be181ad716b9864e97b35ef6a3ea29154f6e0e4"): true, - common.HexToHash("0xc467e68e4baed1e56cb34a3499b784e2895c8afc6862d9b6f142fceffb230c55"): true, - common.HexToHash("0x77807c58d9e27ff22d00a181900bf98020164b07ef1d27b3c355071fb21fa91d"): true, - common.HexToHash("0x3adc43f921c1f4e56f04bce2a19a6c9b5c29e1c95d6eb0e830b4859ca59eeb2d"): true, - common.HexToHash("0xdd3936fa5d37ef459921d4275550c76a9418ff96efff231788ddd891073b7762"): true, - common.HexToHash("0x221e2db7b0fdb16c4ba79640fc37350dbb2f83eda56922bc6dcb1af3f3e15b22"): true, - common.HexToHash("0x7a4ddefc73c07d337311f83ee8c60d98d9a65d94c7432e49cd98008fa96b531c"): true, - common.HexToHash("0xa79bc599e389757764b16a262a9ad9d4b2e4fb476996a5d9d272c42ceba53593"): true, - common.HexToHash("0x0ece6f6491f5c97e515d32391a9a4fc195baed1d4fcc938e4653451bc783c607"): true, - common.HexToHash("0x6378a0bb25e9da659305e4ef036513c8294dcbc81176dacbf4b0aaa28697321f"): true, - common.HexToHash("0x9d0ba5f5afe50c7210b357df866ca8ff6bb223024fa0b042520f0d9bd0f49774"): true, - common.HexToHash("0xff4f7174f66b07fb832509744b31a6b61d0f8ad22d527607f0ff63dd5f111fe3"): true, - common.HexToHash("0x72f0b0e572e41ee6913748b90c67ea8321d68202d87c561b38044f57ca972c85"): true, - common.HexToHash("0xc0a26160dc88f6f8398d455f7a5512526f3dc7f1ee6663e35b063172a2c10f16"): true, - common.HexToHash("0x479dcf950b9999c6e885b43aed02497091145f7a5819d658d456b75342455f13"): true, - common.HexToHash("0xec432223f7d8622bd249d3497c29e16149f6865633b0cfc68c7ab22101bf5bb3"): true, - common.HexToHash("0x96e76993de2d2600df273278159290648c6aa3ee79d1e31ebe9abb91ae9f0e08"): true, - common.HexToHash("0xb54c5ed2a06c0e18a182f1d1c16ce6bbcf01c05c2be56737fbee76827aa2996c"): true, - common.HexToHash("0xbdbf6301f9d59c2632287a93fc46cf5de38a43f54bb27d35eca064df2a508a96"): true, - common.HexToHash("0x17135a2f3eba9b2d3ee48971dcf2cb6e9a406779a46273e1b29a016d6f66a3e9"): true, - common.HexToHash("0xdf60968d885934d77647e93d1a4a6048b1ce58fd63921a05161e41184f9aa17f"): true, - common.HexToHash("0x621ae0d85256944b7e6bc320c7ab5fc08c942d56f7a4328a41eab2ad56ed7b95"): true, - common.HexToHash("0xb2bc841d554acdf57445471fbb9b5793b75d71421978f6b9a1fbe8f4b6f4e179"): true, - common.HexToHash("0x1e0ad5c6bbc5d406fdd98eff05e96a64a3869ee9b4729b36a7a1f2b8b842ddf9"): true, - common.HexToHash("0xd9169b41e9a614eb1b6dea163ad113b67096a3bcb695b1e869137c2bd36bcf4a"): true, - common.HexToHash("0x420812eeaf9bcd78c0d3d00938c2dfc61ff6f5523b159ed7e9202951d2d1d8fc"): true, - common.HexToHash("0xbbc99a4e3ea8ed416c9774fc196724afd233879d6c4db18f6f17394bc5a2587f"): true, - common.HexToHash("0xd6d20599784a8271e93dfd7b3ffcbb32f3ea156355177a8b9faf26579138ff3c"): true, - common.HexToHash("0xaf21832b1f3580f337a0f69249f91fd7cacd32b95ea0187da9566c0c0101c60a"): true, - common.HexToHash("0x3b1da42f13e301dd0d997109166e4fbb7cd37a7429031d5f2be6e13047c9e7ba"): true, - common.HexToHash("0x9017c5f83e503901a9c65967551d4cf7eb36b95a9c46c76c396fb2807e9576ac"): true, - common.HexToHash("0x46b9347b13ee900c3b24f2f5b9b74d5a77256ecf8575cb6fb9a8e6317740720d"): true, - common.HexToHash("0x681037bfc23a9aa4eaac483e4629ddf95bcffe84d77e15c3ca2a11540bf4d222"): true, - common.HexToHash("0x1888ec569bcce62a8fa6d7438403ac1135a8feec9697e54abe2fd353d912d849"): true, - common.HexToHash("0xee5c4301093f259e5136850eafd29737db04845d4f653f3bc156beb9de3bfd44"): true, - common.HexToHash("0x2805e956f220700002b3b199325ba7c45eab59594a18132b2c9e91bfac2e1cbf"): true, - common.HexToHash("0x5947c333cb3ca1d60ffc30b944af362476b86e354bf24d6b1277771eea48e4b0"): true, - common.HexToHash("0x71bc44d87ad718803a142e6b950b8fc693b22df05ddff5891c1c89f4d54ca8db"): true, - common.HexToHash("0x0fdf7494b7dd146f5332781599540f5310db51fc0bc9e9f36720cd276afd55b1"): true, - common.HexToHash("0xa7289c110537c80073f36c4146837dfd3dd9160862cd54aba2261f8c004be106"): true, - common.HexToHash("0xfe9535d908f2f31dd0081aab1f80c2538e1a03e00b1c9775c28287d8cee7a24f"): true, - common.HexToHash("0x059dfa84ecd9cbbc1f5fa8212233b5da25865448e13053e3f029068db45d6711"): true, - common.HexToHash("0x644752c043c277c03538f90b46b1b5438724f93a490b4b337607891ffb707b2d"): true, - common.HexToHash("0x7da06b41b433f568fce22adf8a2f597491bc7b7a6676ecd7ae36e43faae5aefb"): true, - common.HexToHash("0x25e917a1a7945e9c12434a393dddccb0add238af16296d21956c537553bbe36e"): true, - common.HexToHash("0xcd04b26d4f0b67a05b27e2dd5e6487ec2bbc3a434032709c60023c461fd0f47a"): true, - common.HexToHash("0x1655f4b9cec8626aff578b324756e416e96e48a9d4c5061851f669ab2d377ad8"): true, - common.HexToHash("0xa3680f7a814c1f5f7ed5fd07e1ed5e19fb1f536d91548a81519a0e5ca177cfa6"): true, - common.HexToHash("0xecd1c3194063e0a62be8ec3185f4a98c3bc3c98ef441e855bb4406a278fb811f"): true, - common.HexToHash("0x03f6dc8f027fc524303a326b1c7b159ceab871edb02ea31a888660feb54ffaf3"): true, - common.HexToHash("0x8132e4900b7afbc860cb93f855e36e830bf2d8040a7bcdac148ee7d35b8ed891"): true, - common.HexToHash("0x5421d1a854aab4fc39a9971a0ffc4aba202c37cfd5ff757a0c7a2d5ab38e83ed"): true, - common.HexToHash("0xaf630b3f7e81c7805eec40d6085447a16332553092cee030f424fa4c88fab99f"): true, - common.HexToHash("0x7ae31e842566f35242996f15295731411197981f58abe770b507e968b1fa290a"): true, - common.HexToHash("0xf821503a2bdc98101904d3cdfef67e5138f65958473523d701ab2aabe6860b48"): true, - common.HexToHash("0x6c7a05ec81750c8c5ab1f4db22812c5c8613bf7c5849ed57c0ed224d5e9493a0"): true, - common.HexToHash("0x91f47fc96edab1abd974181321570eed97331bab3711f5769c176c3aa7d58ffa"): true, - common.HexToHash("0x534cd5a2bbb817d87aa8b1d601f914503ae4bf24dc01459612d87a7d06e2024a"): true, - common.HexToHash("0x94955f1219aa05b1f9855dd1f265542ae738755e14770d864dff61219df9c072"): true, - common.HexToHash("0x7fbc2fc373551f900466dec6925021cdf81789d3911da2b3f0e847416f4f930a"): true, - common.HexToHash("0x7c71addc826d59cd4c919806b05d97f793d5ae34d69112cd9ec7a92df24d8b1f"): true, - common.HexToHash("0x300e5d9064fbd2843e65d24bf8051dacdbeb59845d019bae69b13502e060452e"): true, - common.HexToHash("0xe145b8538945cab3af830e3bb080923882f4f69f97fbcdad65a089331cb9e87c"): true, - common.HexToHash("0x682b1340553d31e418d9b80fb9eb2225a5332b2a358e3e34bb69c1b525297f25"): true, - common.HexToHash("0x8d6909cb7f59251c157581de99a9faffc974ee6f8b5eb1d3c108005456181625"): true, - common.HexToHash("0xabc5424d02013583ec06c3b83fce1d1df82a6d49f9de17448bcfebdead83119a"): true, - common.HexToHash("0x83a112dc792fa95eb2854d2a4094fdf77da8ea50491708764e243eea1ae1c042"): true, - common.HexToHash("0x4a20b8a341783604f20f8505ba7bb923ff7f382c43fc4b72846fbe045a6ad7bc"): true, - common.HexToHash("0x727893c136f0d3cecb52194f00c0cc663802ce3de05fb491414328e0627b4508"): true, - common.HexToHash("0x54a50e828854c87dd80f20ef492446ecb669e6ed497bb8c076dbac616bfbab85"): true, - common.HexToHash("0x9f3361201f5bb49f17d9aefbe81f9099c8f9ff84d9614032a15dcf6490ee6285"): true, - common.HexToHash("0xa33c36d542a33ceacf5d2ca11fbd3d9f6e6fb570d1ee020a519dac495d2e8b6f"): true, - common.HexToHash("0x47c487b19de3047605927dee21512cc02e254d1bdd1b0bf80b75ef8d1eb54012"): true, - common.HexToHash("0xf221f5e6a0a518fcaf1249c44e5a42aa4758c1cfc1ab626bf8e985ba396941e3"): true, - common.HexToHash("0x26b032e0d667dba076e7c948870b246f1177c7cd161946bae4846e5ed227e1fe"): true, - common.HexToHash("0x95937bdc81b6c87ee6073f56288be5bb5f2ded21948ea4f825a0eceb95bdfd3b"): true, - common.HexToHash("0xed77ea455f4e70f38b042e69717bab8c40642dd2902290b61d138deb9fee09bf"): true, - common.HexToHash("0x8a4b4e46c9672688a81c241c574268a0e6aa91f33c874c06451dc7075758e722"): true, - common.HexToHash("0x8efa4d46408d20b3f6184cc97231e1d670c72687609a06a7862bff58ba0bd8b3"): true, - common.HexToHash("0x381848f6e4264c989112b19ac7eb306cb3e0ed5df144c7118f7bc4f8caf13ec5"): true, - common.HexToHash("0xc052a62ec7508682a8aacc5e217b0f85d508fbbc4644c23f1a82a7dadb98b830"): true, - common.HexToHash("0xaf4e34a0bb5bc38345a571ef9ea61aee784bd38825fc11af80b3a41dd2d6da2a"): true, - common.HexToHash("0xa28d88193f478781de4b942ccb2800fd511a445b6aa3d4aab9caa7005fcf9d0a"): true, - common.HexToHash("0x84c7ee70b5e1c0239f953543bbf98e39074b3e7999d110d040edbb7d9e83dcb3"): true, - common.HexToHash("0x0ee3a772f5e8bb36dcbfb3fe3193dc7e03aab37434262f95b9bbc4b875830929"): true, - common.HexToHash("0x0b0f7426a0ebb92ccffd6c77ba010af61f41f63e0803c287d02f43ce1d3491d7"): true, - common.HexToHash("0xb1d72a2f4663778cdf3198904ffd816c731e6e7ebe338f085c479548d1ec0e54"): true, - common.HexToHash("0xb9d78c93342263de4914b3d1ac4eadfbcac28565f8723da24c0e0c4726a4107b"): true, - common.HexToHash("0x4484ad1bff1f235d90724e118cb7e8913ce6bbcb37ac0666a077a3025fdea624"): true, - common.HexToHash("0x5bdd6e925d47cd7e1cceae04928aedec6a42ba7e9e6dea1262d27be4119af71f"): true, - common.HexToHash("0x0ea568c1314265537c7465625fd6ad1c966d6cc93e88cfca8c94028af3a4cabe"): true, - common.HexToHash("0x7242c630f61cc83212061428aa709a10703efcd6f1eb99773cdb9bb74a6a365b"): true, - common.HexToHash("0xce8cf34fa4946aa37b881f16caf1573cc8918981c7cab4c77685639bf6ffb44e"): true, - common.HexToHash("0x01a91b017c4fe4834108813fa769b45f1522fbf441b78caa9128392b54141187"): true, - common.HexToHash("0xb7e145278a65be3e19e4995660dba9bfbd23c14f2e8402ef27a38b3cd2a35cd4"): true, - common.HexToHash("0xcda11023e47e2e97224e521f24447321b75260c433503e4cb75ecc81da94305e"): true, - common.HexToHash("0x838416619698a84bf9c4490b1451c57405d87127e5a27c7cd4d516fd1033eb7e"): true, - common.HexToHash("0x64eb2d2e8257e49875998dec389bd59bd1e92a4fc0be11098528efd9278a7e8a"): true, - common.HexToHash("0xf7f49e751ca290f046d4cdd7b02896dbc9f6f67d3fed5da0c6644330f58585fb"): true, - common.HexToHash("0x35c60642d4ba3f4f7c1ecc998aa5c0c6b4506e03c3ed48f06c4ba1ea0afaf8d5"): true, - common.HexToHash("0x4643c7aaed226794e36aed85eef8f5a7ff361257a2e5d8a45ec5362d203e2dd2"): true, - common.HexToHash("0xbcfd6c933a1f89ed2c5f168ae0769db0bc06f79ffe313ef1909438b4ca6c603f"): true, - common.HexToHash("0x94f8906b4f154260bd8a670d54b3fbea239023ad91492b18e18e1c8c0ae43232"): true, - common.HexToHash("0x93aef02179a165ea24b7eb10a90179af0df4eecb6cb2b80ec5a503830368be99"): true, - common.HexToHash("0xc4334af3762945bd8a57b278dbea32e351ec28ead0332f223e5799c4c67f1a3a"): true, - common.HexToHash("0x545ff008ad65f7a0669ede6cf4cc06ece3bff104edec6893a4c97355892addde"): true, - common.HexToHash("0x2df0300c96197f79bd9fe16d06021fb10865d445b97c90099d495816f58b357a"): true, - common.HexToHash("0x086d8e44d5567cb88e1c8b45aad19dbfab5843b9818c5ccc897a91049e1cf060"): true, - common.HexToHash("0xffa43b4940b0bde4462825a49ce247a45630c6562396ed129c801f63b9e87194"): true, - common.HexToHash("0x5a54a643e022df123afcf3b4564ac9c8b107d468a7b9e3a84d101305410e9026"): true, - common.HexToHash("0x02c9dcd9ccbae0df134f1693553ff74eb790cf245f1fe0286e8f77171be6449f"): true, - common.HexToHash("0x5b02bd195dfee95907c948b3158e6a9e414123a6343a98d2071d94a8d01f8329"): true, - common.HexToHash("0xdce706227ba225da9e5bbeff49b4ad39afa85ad03872dccedb53b5ddcb10231d"): true, - common.HexToHash("0x04d4ce9aaa4b0fb9f1844922e50d5071e1bcbd44b0a4d98e12804c7e53acc026"): true, - common.HexToHash("0xe5c170a65528a9e931795b5a4575669197c55e400d8450d0cd1eae096d0761c6"): true, - common.HexToHash("0xefac924040b53d538eea49db1b8402989c7d3bff4ccb1ddf02254c580ec9e3eb"): true, - common.HexToHash("0x12becb5bb66b899526f6d3c42d4af4ae87e6124c1e9c4b531bccb10deb2c3d36"): true, - common.HexToHash("0xc7551e1ea50f6ff22a9d162e8cd48a5cef8b672ca9b79faaaaa05cdff1a8b092"): true, - common.HexToHash("0xb5e80858bb5f9cbee4c3d58b50d05d0afd07429111f169e0bf431bb402743016"): true, - common.HexToHash("0xd6a2ec942c20bbdf6cba822060596f4d6728f8c186cfcaca90eb30c4b9ab6e4a"): true, - common.HexToHash("0x0826c8b3829ad9dc58de25502b3bbb7324366449baefc75980801fa344b7ea39"): true, - common.HexToHash("0x1a1a360b124632c2d6b16bef9efcae7aeef7c37fd8b4abbd28f0a305cd4f7d5c"): true, - common.HexToHash("0x6824a02de199092be7d9c229c92d167dd455172c2f6c712d56d0fbe84c5cc697"): true, - common.HexToHash("0x7b34a09adcae28c15052b72fdbcac674374911e07399735d3789f4178b15a68c"): true, - common.HexToHash("0xd9a13a3934a77ada5c4c3ff44fc495994782ad90b2524eda75d48213e1e659f1"): true, - common.HexToHash("0x10d0c06f5e59633082f7ddb8b33c245ab06d54baac23f430b9758e5f95bfa9c8"): true, - common.HexToHash("0x23c269150b5b603d1228398e68e26460385c8b7cf2fdd7c1937a3851bbef9dac"): true, - common.HexToHash("0x11c3609581d349e1f2368b24333db7550eeb2855f8a35d74de87b6117da2e370"): true, - common.HexToHash("0xf2fd6479ce8361cbd410961dc60d1f9cec2ea923a128b3b45e02df65c1174a46"): true, - common.HexToHash("0x6d791b73dce6d3429f3a8f2007b4bff02daa18315a593313b6cc55506b06c39c"): true, - common.HexToHash("0xbb3b409635339d9d532bd25aa62658a439ffdfdeab1b5f3f3c93c472be584f78"): true, - common.HexToHash("0x84ac71810db4a3eb68275450885769572216b7f2945957b08774656420aed982"): true, - common.HexToHash("0xed24077d878987bd8fa6c9c3ccbbf0d96880a8014f41a99ad92e227eadccd02d"): true, - common.HexToHash("0xe5f0244535435de21403c8d284c42a792dd340d0c2def77f9820c1aa5979a2b8"): true, - common.HexToHash("0x189bdfbc3d77573df93949bc3ff1b0edd2331b8bc0f193a1f3ff565efd1b1721"): true, - common.HexToHash("0xed4bc1c0b2a64de194821ae8d3d2a8e936d8b5fc22578b584ab76003958fc495"): true, - common.HexToHash("0x7670e54b48fec2cd5256c46610e98ecba8b385c64612ce6309c37e3fa2e788d0"): true, - common.HexToHash("0xd305513a8d04c968308b9d831e9f3d03e92979751af4420cd2450142d3ffeddd"): true, - common.HexToHash("0x2ccd1d4cd6a69e6b2b6d1752d1ae1454dedd7fed9679038782f0b8c1c2dd2a16"): true, - common.HexToHash("0x77a0eb2d147b1fc3631d9e0f11229512606a101bbf61b6e22da4f06850b7ff6c"): true, - common.HexToHash("0x6c595a5d21469220da1de3176297c05390f017c4455ea18c49123573f8f9a3a4"): true, - common.HexToHash("0x571d19614a3a7817461febf984aab1785c0cabacbcf6dc25b83568fa1af98990"): true, - common.HexToHash("0x1781bb9f2bc5213bbcd5b53d1ae9d131fb1eba11d92d5f7f55f0e30ecd52eeb8"): true, - common.HexToHash("0xa121d533de6cf5e7b44b1d50f1fc1ea60fbfb4d01eb36da76e3802c857389466"): true, - common.HexToHash("0xa47397e25f24548326ed1ba02ff4b4e759b94295a1c6242c52ddd9ea5190143e"): true, - common.HexToHash("0xf3cd6acc474f6a1b3d436243b4b6f63f2ee9b002aa23af3024a5b08bfcb3acd0"): true, - common.HexToHash("0x70c342873c1aa60b067b13f8019a14841be8eea5d27f98cc5a0dcca609fce3c6"): true, - common.HexToHash("0xc14cc34a9e0b0a1444362e30593eb099bef14becc4f5fe25b4e0f42b60d0f611"): true, - common.HexToHash("0xaac044e7d11fb1e8518d0fa80fc7024620848e43fe48986ee53edb99bd0763ef"): true, - common.HexToHash("0x146a442d2f637fce7e9da3071900bc345349091fb7c3e5cfee5139caeda784ce"): true, - common.HexToHash("0xe59e1dff5046bb98fcd3f500feddbfc14e4e4fa5325db340caae6ae31322e324"): true, - common.HexToHash("0x760431dddf4ee8333a9729d57a9ec3575539b697138466e3225a61811aa7a109"): true, - common.HexToHash("0xdab8a06aa581750cf3bb82bc7553e881253408b88a68fa722d3f6ec32e3e268b"): true, - common.HexToHash("0xdbc9abc2658bc57bf2c192d11e28010d24b72acb9c8976a8117a0cef01cc9c57"): true, - common.HexToHash("0xb9df3f5e3fa74749b1cf9e851bb482afc256bc74c9bfaf72a3edee94b72b144c"): true, - common.HexToHash("0x00dcf44449a821db89d33342d9715d811beb9cb16b014139a3df82333f0b5eae"): true, - common.HexToHash("0xa7d76d8d6b33d96f232034736567bdbbf11f91635a99f45e239fb19adf1d5a39"): true, - common.HexToHash("0xd69064ad7cdecb9708e5ae3bd5d89b5c90e7de31d9f7f71b5a7b248149e76ab9"): true, - common.HexToHash("0x95090d7a4b00c79a3b13f4bb4f22117a152e73e7048217f7cbaafeacd3516d00"): true, - common.HexToHash("0x95d5848cc6874b89a0de3b60cb20be49833d066eb5451a77d4453f6fb0beee6b"): true, - common.HexToHash("0x7dfaed7fa4b36b813819440cade70a7122cabd6eb0dcfba6bcf4304ee7ea1d19"): true, - common.HexToHash("0x1e494c35c9195463ba4448e17b197099070fd36c9215a25ab556f06e4445d8a2"): true, - common.HexToHash("0x7d90e2745ee1599b9420f0fc8a81246370e4949889d934169d21977ba637a1c9"): true, - common.HexToHash("0xefee0c16ce0c1c6defe0f4a573deb4f149e9a63eb757a5ece17dd05e0daba060"): true, - common.HexToHash("0xd3b02a54d724ee3d2f6c9e232e619ddeee7a8b55d735d69e3cc06f9122842ff9"): true, - common.HexToHash("0x06deb91fef1975972de40b9731bf837d2c1e6e922536c3688b085a5ccd0d5b01"): true, - common.HexToHash("0xae3256e54c3aead997b955b24abc89ebbbabe21083614a27270d4ccc8651bfa0"): true, - common.HexToHash("0xbd85b250a3bf23033d96f864ae2192f57dcfb6563d3e21c80bf6fe626104945d"): true, - common.HexToHash("0x57221148757b0c0f929877f0d294887439d55289fad3f16755f6b8f49af9280d"): true, - common.HexToHash("0xd283c745ab2190d2f515a031ca9f29a0cc99cfcd19d63956cf901c6f2d07afeb"): true, - common.HexToHash("0xd777cb06aa1d2542e9a7e3800d0c6d19487bff23c2ddd03088425e38355f8a0e"): true, - common.HexToHash("0xc7b20704def6480c1461d6577a5f751c5e42755cc7a52f3fc56c5d70bf545a6e"): true, - common.HexToHash("0x2643f8d748ffda1cfec373cbf9b2f0dc4c8d52dce0b5945c35e00d85cf779051"): true, - common.HexToHash("0x5ddd23347903fb46b95e2d38a060fe5bc5a2f4645ee47830b93979bbbe3e4db2"): true, - common.HexToHash("0x68bcd6122e002860e82ad5514408cd2d051e2df3e5d8545e3cfec3c3c1daeca4"): true, - common.HexToHash("0x98b20c47955cc4a153c06a779429511049b19773a5c01e0626ebc592805657b9"): true, - common.HexToHash("0xa2ad0b1c55b4e62389076c4ac340bff7c28291743fa67901d456e0afb14bc4dc"): true, - common.HexToHash("0x0fb9ad81a08c9a6b80b83d46b87df6d6823646ce67d41a64c9bad00d32d5b427"): true, - common.HexToHash("0xbb043eee257368f84b79d1d7b4c028e31e53b5b0ec607c8902e115185ac04758"): true, - common.HexToHash("0x044dfd560773e25442bd1bef27084a9dbd9abf3df8a490a62988fb98f89721ed"): true, - common.HexToHash("0x23fe01a90771591cb848d2506635d62e2a67fbb423ab96ab01a431544a513278"): true, - common.HexToHash("0xa08d19a7e46be60aaf7433cbaafd04e8e6ed18ff14abc058f70dc1d6e9ec7cc9"): true, - common.HexToHash("0xc15ad4573eeaa7220527f790d195f5726131e09798d574dd5dd1ab59e8771d3d"): true, - common.HexToHash("0x941bdb34d0de2985e3b2bbe2ba9e170a8421a42067a1725c89f17b5b7a3cd69a"): true, - common.HexToHash("0xec3d356902227c3813e7de1cdfbee09e7f75172dfa1449aa903671c96be433d3"): true, - common.HexToHash("0x850b3dec21d3d897927012b36821330035674b06ca733fddb1f0cc9d95af8610"): true, - common.HexToHash("0xe4defbf48ed98a310d0a5d8c03d9f9544944beeef04fc75ad497253facde61c2"): true, - common.HexToHash("0x9c20d498d8e0d548a5f16239cd301b7bda9ede6be3f08f635d0e07e283319ccf"): true, - common.HexToHash("0x6577e52f074745a21a41d5839c14258bd752b791b4bc37b459bc84deee2c51bf"): true, - common.HexToHash("0x56768f0cfee23515c068abf4dd9a6654fac6829c53d4f116d5df51bf018d5c5b"): true, - common.HexToHash("0x92bfd2d732b6fd275875e7c115770a9d82fdc0fe13f183325a24596ca861baf5"): true, - common.HexToHash("0xf63368c579f29d381b06420900d6f88a2d6f1ca0b95533e6f65812031bc593d3"): true, - common.HexToHash("0x116ce56823f70b7dbfbc6c7b12f7d318e8a22e05712233d6c4b2525ca8603f45"): true, - common.HexToHash("0x276dbcd8cdce2ea433a9d0e37c037cb1e10b2eba1e2a600db8d6f7b43710f9cb"): true, - common.HexToHash("0xb2c7134e1fdb6b6f21f96c18ff41cbe3d799591393145ed3fdedbd643bae4294"): true, - common.HexToHash("0x0e6128eb1d3d133c1c8ca40903a84d04aca94480916c07763e0eafb7c13301f4"): true, - common.HexToHash("0x15dec2878e96611417d2259c2091f45320038d957f0eb5bf4837f70e68ebec07"): true, - common.HexToHash("0x582173a9a1fde2b1e49394cfcf6d77b52120a4218b00fea7e92524b25489b643"): true, - common.HexToHash("0x388411923cde1a61cfc93c38591cdc05179ad40b95833a4c49dfd8a1c55eb933"): true, - common.HexToHash("0xe8398532b1dbe545a3d66f14f0dcbc7d20d1084541cf0fd0eb4dfae61068cbfc"): true, - common.HexToHash("0xa6d4170db06e38396ab30b4ef99e64a4ea315c9723db482405abf61a916aef9d"): true, - common.HexToHash("0x141b68a5263e6760aa9bf6ccf48cb8d290305f74ec6c97affbf9375559b49070"): true, - common.HexToHash("0xa7b3075a62f5e6537762583bf2af6e1e63d4b6cb7acbd50d3ec63b68da48ebf2"): true, - common.HexToHash("0xf770f3bdb7fa450c24a5307206df029a4e1cfe234f3f1f45e9b14818d02209f8"): true, - common.HexToHash("0xa5791bba7077589b92c5f2cd6dff7ef08d4fe770f23a2cfd224389fea167dc30"): true, - common.HexToHash("0x469c579916899b436fba0dba36ef054725d29420e209695d62f21f91eb073fe8"): true, - common.HexToHash("0xc9f235b5f6f89fb27ba1eb72f9bb245bb13168442e41c4607ccefe2289cf0e35"): true, - common.HexToHash("0x56b43606bb58881e93952a3f8a7488be526a0009b45ccf7875fde8b61f37a3c0"): true, - common.HexToHash("0x9760c4b4b3a693b7505aa91b1c42499cbb5092a838f32492a3c017afa5cb24fc"): true, - common.HexToHash("0xd7f5d225a88eb213e6d26c29c6b8cd4b8bec04d782fe5ca69d770eaa59d7503e"): true, - common.HexToHash("0xb7afd5c1bf912061b126bc0f3f7e610fa7bc451588a669fc388d8710d74365a2"): true, - common.HexToHash("0x9fb54e973303d9b1bd79f7e4526c8935ba86c4536804eec6c6fe64d8dd4dfe0a"): true, - common.HexToHash("0x7b3199fd65e4c1862914ee5205471216d96bd6428ec675cc84f8d0cdf481d791"): true, - common.HexToHash("0x84aee519a05aafcceee2040ca9da6f3f5600af3bb13e4af203451775e0622fb3"): true, - common.HexToHash("0x3c74e6063f556c2e14c03fd3b931a33580dc85028089052f8f902b388e349af6"): true, - common.HexToHash("0x620b8dc5623d1ab41a74c3adb974a3a7e67135e2a53143d75d7779a8d77efb24"): true, - common.HexToHash("0x5d3fb0b963da0a33c0dafcd12d2f87f60ba1c363e14550f42541e52a66b75fc2"): true, - common.HexToHash("0x9809e649ddcc7cdb12f11ef5d962cf0e5f4c198af0a358c735873193d726996e"): true, - common.HexToHash("0x6770309b4826952ff326fa2f7447d9a787a094d231cb538e851c13ab13e536b7"): true, - common.HexToHash("0x477f6e659dec91fbe5359932b79840df5638d48d627bb6dacf0cb7374e4926ba"): true, - common.HexToHash("0x32e884d0aaceeaaa40c8c764e176e5f8b38b836f1e1a78f02906d50ea60116da"): true, - common.HexToHash("0xd1357f46ec15034ada3e42cc2fb495960e2ffa97cb2491cdbaf80b206adcec04"): true, - common.HexToHash("0xf209d73fddb9b6d7b1d63eb6997e099bf88df72c8a7ea2265561bad65acd5f40"): true, - common.HexToHash("0x3b31db777c2ac41fffe618f18fd7678a779dfe25e9bd575d776b8467164d07a5"): true, - common.HexToHash("0x8f719f28ce94709d317c3c3b8e2006c05c84154a9bff5c1acd80ea7bac5e6add"): true, - common.HexToHash("0x2c3d72a36beaade24c99cdeb09086f25cc785d7fc87e34f23183f6cdcf538381"): true, - common.HexToHash("0x49c8c7535b5550138754c345c8347dbd9124b7a216e16241afeab71c2d5d3d8b"): true, - common.HexToHash("0x7eb7abd3e20680c2ca31ce0c76faeff30ef733ac7d992e88751b7ae886ccd5bf"): true, - common.HexToHash("0xfdd84cdc22c154ecb8337d20d6b3cad96585743c8c425a0dbebcdecd4a0f6855"): true, - common.HexToHash("0x5f8c3c84f665cdc1facdc4770c492c36b1f50ebdc8ba1fb1c02e70e854013c64"): true, - common.HexToHash("0xce954d7f6efc89daf8128b6bc1591dca837694e3abe841bbbb870a36797b8c34"): true, - common.HexToHash("0xce344d40000714b001a38d884d6d2694a55dbf4c945d50b456238f6d178587e6"): true, - common.HexToHash("0xccd212b4fd8e4f85cd687854925ff835e966c2689609ae00293be306f9e8c149"): true, - common.HexToHash("0x33c83baa5a98566a8ee9ab83133fab35d8a8f8dd0373903f6dbbe95deddf3642"): true, - common.HexToHash("0x02f19e4db983e83471e6c77a7b2c1c54b7b20199b4746d35756559957dd90117"): true, - common.HexToHash("0xa643f407b530cfef0c59ece2d5cf07189c5f6aeb754afc2e3f0ef4708f02aaac"): true, - common.HexToHash("0x0bd4f656ab2f3ad6c0435fe12cd3aba9346212c9f32ced37cb66b6f030b02d3f"): true, - common.HexToHash("0x7dc8fc45fed9ad35c551c6ec3258e378c83c20f2dacd46494ec3150a9cff03d1"): true, - common.HexToHash("0x6825e1c5cee45e3a33f76139edef0861dba890c2988c6350918eda37e3838db9"): true, - common.HexToHash("0xa0ec2daa0f8edf7f5cce24156370c320e0db03ac6084d5a814d31788bf9c0a68"): true, - common.HexToHash("0x53ea9df663012029c2f3f99e7b341d3e276e1f8d1de6c5b006571f88bac28bdd"): true, - common.HexToHash("0xbc76043c7ad270a2a582d287594f4c96a11f18a9fffe7e9cad44c84bad96fa99"): true, - common.HexToHash("0x8dbd33862741b6aaf467ef55a8fad1ab98b58576eeae779cc75173ded1a1494c"): true, - common.HexToHash("0xc968cff4da4b2630b3f1bbf4db3157abdc84b9ae83bd94c0f0d1c1593490bb7a"): true, - common.HexToHash("0xc01919073e08da6abe3a46f7b39c5289cab98a139b9f19dcde9d8626e9b537c0"): true, - common.HexToHash("0x4ff546ca65aae0afe4af744c516338189b2075048127905526ca69837f5dafc2"): true, - common.HexToHash("0xf72c2edee2e0938f18274264e5460b520f9517adc33ce0d8e26a7a3f1a0dec47"): true, - common.HexToHash("0x050c9fd3a11c5d4094c32f2268a7fd2e67e551bbd122a4da863c06d50e0da86e"): true, - common.HexToHash("0x9e49abe74c43c12925f7ce14dc353a283f64bc971a9d353f7eb64e4e3be47b7f"): true, - common.HexToHash("0xe7dad56b8bb42805c5457ff4d880fdc9a10abf3cb5d6acfa99ab62b6df22e3f8"): true, - common.HexToHash("0x232bc1dc06d254f99fce746cc3ddf85a574073dec78652213027e52a7b34f706"): true, - common.HexToHash("0x6162499270fd6d1e95a0e30ac2e0bca690d7606671c697e24446783e37c0f214"): true, - common.HexToHash("0x0328d9a86f6bb13609aea9bc5cb873c3394546b05a83e6ffb24c594a77980f34"): true, - common.HexToHash("0xa8d568bd0b4bdd8aec8ff09e9d5a3c4e58381b02bb97f50badd7487e249c6c51"): true, - common.HexToHash("0x52a152cc871a08dc140ee281be300c4b7af06ef34a03b104a7c49cb878aff017"): true, - common.HexToHash("0x3deb85998b04b14d9de20fc8dbad7cc167dc4a16b148818f9b0de37f01bcca57"): true, - common.HexToHash("0x2939c0195d624ddca272455c59052916c0c40b43e337452bb20d706fb8dba8d8"): true, - common.HexToHash("0x25a5592b567c5515f01fcb4bf47a0428cbbbc679713e4b0b24c40ba7cf462dca"): true, - common.HexToHash("0xdf44a903dbc591a83e9d35ffb4f8160a03e17c00b948c1574bcfc00c872313f9"): true, - common.HexToHash("0x1a4906116e4e88f87534ab97c4d6d07ce572cce6cd57116a68dc17508a39b066"): true, - common.HexToHash("0x20203a119f1bd46e0ecc30e3b4f042823b0f7db6b367b9a6cd6f05cdb26f073c"): true, - common.HexToHash("0x96b7954f6638adc85b1a306eb1f6c346fc44d015685ad674b8f9b803d2a4e87a"): true, - common.HexToHash("0x9a8b07da5ce685dc9d71ed37c808ff43b21a560f4b056e7602c81f5a12aa7794"): true, - common.HexToHash("0x3226a878e6c71bb5f0c008a038cbedb46b5dd705b06070b016d7c5ab20e0a299"): true, - common.HexToHash("0x58e1b36b1007076e6d7f3d0dc7c8c6dc333b2d2441a628d73e4beab0a0f60a75"): true, - common.HexToHash("0x95c333665dcb3e7f8c9beda22b9e96f6b12786ca7cb841d27f840bf1829803f7"): true, - common.HexToHash("0x219e25391c5742d062300f7872b28f237e54f45ac9ebdeb550334924d39723ab"): true, - common.HexToHash("0x7eac5f5e2c4ccdb5a0cdec178f70871860458297f08d94a812c8131fa3100000"): true, - common.HexToHash("0xf785731d0c27ce181516cff244bb08c4f8595b92d13b2d8304fa4e0f64150fb2"): true, - common.HexToHash("0x92666ab58d4587876da3b58567b6724bce797fa8814acea921b51ce13a3c9f4a"): true, - common.HexToHash("0x331587f900f24f8dd8a98a86f18e8ec6694b6aae01b13093c0e80de75f0af7be"): true, - common.HexToHash("0xda8f7798910a4093ee85ba8b8cfa7801b20ee5d75e26729abe3900ba4c0a6cdf"): true, - common.HexToHash("0xed9b4d15a71ce1ec0d27b4753610f8e97ce70ef0e7525e23c89c5b7b2b666ae5"): true, - common.HexToHash("0x1fbbc5254ce4b89be1b920eadc1811d6fbeb2b7cafd21bb316cb0aadc96a2113"): true, - common.HexToHash("0xb4c9553b2ed671eddd4ccb9fb616f3741bfe18370c7b024c6ca9b888dbbc7e6c"): true, - common.HexToHash("0x9f99fac4fb3f010aa3ea8427fa639d5ea2445e21b7780abd1626d1d59bad1b32"): true, - common.HexToHash("0xbe24d6e3160959b0641d77cab6b64d60ff6b207b35c4c58c1cab4b5376fd051f"): true, - common.HexToHash("0x3e73bdd2a71fdbc72d71e67f1255ea69720acaa4c4e69ba5c87ee641dad72532"): true, - common.HexToHash("0x9237ba16d134c1debaa0f20afe5d8d9a77a32d276af2531a509c679b2671ea35"): true, - common.HexToHash("0xa965c6999f4689e0022ad48494545ac3aaca0ccc8553ef8f90ca6d291e572791"): true, - common.HexToHash("0xe018759f58ab3916703bde7311a1fc7699a6691b7ffcde594a6d6e1ad8c15527"): true, - common.HexToHash("0x3e4c47896ca3df14075b69a806c1a6793b308d7e6d3dd91a228377a4b494bde0"): true, - common.HexToHash("0xbfd742c3952c3b13789eb13016d9c1a9f9cda6e4dc917a7fc903ac9e744afe6b"): true, - common.HexToHash("0xaa4200a9ec183684b5007f0aff0b5cff88d68dc5bfbb75dab04a9621f9553252"): true, - common.HexToHash("0xa31ce348adef03420f9be75fd67c66ddaad8a75aa17f25e3ad0f543bc2ac6a0d"): true, - common.HexToHash("0x200c172921b5093fe45852ebee026c16a7e6dbb51ecb32c39530d4c99bc4c959"): true, - common.HexToHash("0x8e6b3d0f7db9f55f779eee7070bfc36e287916ccf53809c60bd6cd0c10c19bb7"): true, - common.HexToHash("0x726107ecdd7cb39bb36cf92381473fffeab6c58a283892651b945103e736c271"): true, - common.HexToHash("0x9028b9dca10be4efdc6471e428e70ded8784ef18b4429659165ad630ec53e689"): true, - common.HexToHash("0x2ec64e33f129bcbff1231da4ccb059e6f9864d2d8461cb15a306e5f018620fa5"): true, - common.HexToHash("0xabb2f35c2cdb700c083f6524ee2aca84b9218dbf9e18c5563cbbed3523d37bc6"): true, - common.HexToHash("0xb7dbf27e033c62df67201bc65f167d055bce2e31a33e974ee4f57b49b0c1eb7b"): true, - common.HexToHash("0x6352252c3e02f7d370bf7a4e2aef92376991cf125e5fe13dccc0d4a62f782121"): true, - common.HexToHash("0xcd9506352f2e7b5026172c54321e231a829b48ced1aba7daff02580b31b6ec89"): true, - common.HexToHash("0x806fe5b45837427f86a0c1859cd3b86cf70d4696e97eeafd068de91b7a9493b7"): true, - common.HexToHash("0x76566bf1e7a72f3ac872ba0262c6e842c1d8288ac5e9f9e4f2ff0bf0323544e4"): true, - common.HexToHash("0x37aa1b69b36ce3159f284e92de597c7a09f4c5b2e7f876c9e18d395447c8c9d3"): true, - common.HexToHash("0x244849a69a2cd9427fa170b3b4f26dce998bca0c4075497a7b5b8aebf29b7d77"): true, - common.HexToHash("0x863beafacaac7e87bbae35d65ba4048562088f8a2f2ed5fa07aef9aa622dc05c"): true, - common.HexToHash("0xf357b02dd69d013ca9c9fc6d5eec8e3bdb3c324c094e0d3e73946c32153a1472"): true, - common.HexToHash("0xa6bd708d407d560c61761f3e7a9c67e58ddb251616d92cf51277282ddf453b28"): true, - common.HexToHash("0xc9e9e1549d5b358f8b8ffb30047fa79a2572ed5953f3c0416dde60c167814749"): true, - common.HexToHash("0xe06bed9258383b7fbf7712dad9dfea86803e776bcf2e73b6609a3f5f977bd1c7"): true, - common.HexToHash("0xdb294d3394bfbc0ea5715b06b36e706464bfaf3b072d4dc0b8602bef6c4f7ab3"): true, - common.HexToHash("0x47b34fe04d7fcfd648151b30478f7598a3cb0d0f9a19b429f6b7606aa21c7848"): true, - common.HexToHash("0x32dfe2f981b26073dfb90ef2b2722d64be253895055d2828631dfcd761ceb885"): true, - common.HexToHash("0x0986f10e912df70b1660b12d04ea3c96468ebdc159e2cb659a959d7bc4b6a8ba"): true, - common.HexToHash("0xda47642caf763ed5d96a80fd447b702c380bb0e9eaba5a1d7edb53bd748971f7"): true, - common.HexToHash("0x73f1071af70152d89ade311fdd9e3c0d11972d828196bcf975590ae29f7fd65b"): true, - common.HexToHash("0x9e09c1e886251a2d1898cf4f8ae8facd55e7b9b0304d7849381b81abf2649f77"): true, - common.HexToHash("0x5802935924d8ccba1ef1459b6015e702d2de31a47457fb4915893fa3b575db76"): true, - common.HexToHash("0xa2b6fb0fcd7fa47f37e30129151fe5af643bafd0986209db5fc4c74c5348adde"): true, - common.HexToHash("0x2cf4ec7576359c6d3f506ab5d8d738a7d334481642f6cc0d722d6dafc7576f27"): true, - common.HexToHash("0x70fcaec40a1c954e88f7bba1d4f76feee032c5891f3f5ed439a29c7931e414f2"): true, - common.HexToHash("0x1f9a7c5093e497e4d121d96e5abfb750fdf6a45955e1f729998ca9d90f72d109"): true, - common.HexToHash("0x0347225c6e7b933fce84274b29175ab007b5a0bbf29852bbb86bcd0d39fdeb3d"): true, - common.HexToHash("0x96373dc439c434b4f8ddb8edaacf0ce22c3ec2e06cbb111ec699dc80d56b1af8"): true, - common.HexToHash("0x8b99dd2d78bc1bda6d858e39bee52dd90fbf1e219bcd076d9983332bbc577957"): true, - common.HexToHash("0x5597bf971ed420763e74c1baaafeec60616b94d36796cb0fd82769181e69b0be"): true, - common.HexToHash("0xddae7858200892bfcdc1814dd26061d4278ffdd3ee39110d68de5b9241d22c4d"): true, - common.HexToHash("0xe189e0884feaf93ef8b7d66977aaa006e127c13d87d05066019d15dc503784a9"): true, - common.HexToHash("0x66cdc9984dee4d0f57b9a2d41bd30eefbea6bab4758b4832a146757e8422f7fe"): true, - common.HexToHash("0x0bb3996a1e734ae3fe3f56657a8887583c22ce37b15a5339894a296367186cb0"): true, - common.HexToHash("0x87ec088a2b63e61d632c00bdb4e3a474cde96a93545a589205ac661033acb18c"): true, - common.HexToHash("0x7f49af48ccb1e379ab9f1c236fb3de416c34b7b6b4a8d2492d79286027e0779d"): true, - common.HexToHash("0x9d81822c8796bd08ac3b4188668fe34efec031f25a4edc6b9e0cf7b2c7b2048e"): true, - common.HexToHash("0x5446c5b10a33d95a30131956b97cd009da74e50f38c379d2a1e2784e8fa93fcd"): true, - common.HexToHash("0x12aafe76d9a3e9495f8504c9c6c3efedac1a51b59513c52779fb60fe62d888e5"): true, - common.HexToHash("0xe9f59aeb429940d4d8209f19f93d643d6906ed7e49189c376fdc2ae5576f257e"): true, - common.HexToHash("0xb9f8c1461078b48a805b446d3e9ed46e1d8ea7f2a0ad21c03d529bfbb6fe2d52"): true, - common.HexToHash("0xea6d98faf7d84138c421f9dddb2142c10c05dd636edb567e5c7dd6cb46947e2a"): true, - common.HexToHash("0x62a9af03898dcaf8cbadfcb38b46d9698147f32917b4f4e8afe03e6dc908c5c8"): true, - common.HexToHash("0xffe59d4ada1a4f8f2bc8b2795e85bcc65dd2c07f9aab2e26fea35b49e8888ea3"): true, - common.HexToHash("0x89946c502bffd1e4191614a85f00bf8c61c3bf2e36d6db651ca3d07a85c8e931"): true, - common.HexToHash("0x7fb63e8acf62699bdc7784b5ddd6f6fb19e99e21de350b9583342276315dd746"): true, - common.HexToHash("0xa816997c83a8d11075f2e4642e620724d44516346aabc7d6495b2c47fc020f17"): true, - common.HexToHash("0xe372c4d3dc170e2d29f27ab150bece46560958910fd4db24498211414dde4a29"): true, - common.HexToHash("0x559499a6da9285026309fe73430783f0543ca97eb5e6a4c7790edca36c419886"): true, - common.HexToHash("0xf4801a941a6b32d64c19aa5c3c7e4e83dda0dda533b93e341a9ab50eacea0c6e"): true, - common.HexToHash("0x241c493662a8f74cbbc35c68b02e1902ec5446038aca9acf09873ccf02c86543"): true, - common.HexToHash("0xb8cc30d618b5e7c4de0d5c0e14b28c2c92efe98ff7cee37dd44d7b3397a88117"): true, - common.HexToHash("0x1b728b8fa0252d2fc581c9b11aab615420c1a956fcddeb0ceeaeaa44d4578ff1"): true, - common.HexToHash("0xf1f173677e465ab8b8d508b4b6feb02144ab9ddabc16c121359dafa77f35e640"): true, - common.HexToHash("0x6b74209c1009af5fba6f6b26b9c8ca7794aba3b9f103c3f0120dcc7637fe878c"): true, - common.HexToHash("0x44539d472128d052ecdfb1b9a9c595343be3325147dff18ba9c3b8ae13672b8a"): true, - common.HexToHash("0x886778dac8b76d8b59fcf4ce122266bda427f3ed8627aeb441360d25b17b5c58"): true, - common.HexToHash("0x8d7be1c2f7ce80d689c90202786acf267eb6f7e2c8b54ad47277026aa2c01c80"): true, - common.HexToHash("0x7b08bae17fd59f3c462e72f06e4d76de5e33b114b84659656d1667189bbf74bf"): true, - common.HexToHash("0x85f750fce2be408ffc5ca762e47f29367a2210b45f10ab21e5589a3cef0c05f4"): true, - common.HexToHash("0xf96796b862f0d70b719a1f64659c7e476eda4369ea3eaeeb448c8600d0664ece"): true, - common.HexToHash("0x5cb7aaf532b563789a61f34bf11f3fcbb843d2f8183907e38f4afb1d8f3f2951"): true, - common.HexToHash("0xd38ae6031c5a2c53ab7e9fc210205cda07ca9222fb82b2c5aba7db191abf9945"): true, - common.HexToHash("0x8da36a256d7123ada1356ca077b0cb94ebf7c9a59830e4266e8a2309167cb892"): true, - common.HexToHash("0x4db79cb147961dd03a5258f5e174c3345b6a4fc11740c6dd591f2064c0dd4da9"): true, - common.HexToHash("0xfb018c863588236ba96ecb6b65252378e60f7aeb4002a40b3528d448773deb02"): true, - common.HexToHash("0x2560ca2a8c44c951797ddbeb64080b67dca75a14f299262917497482f416cc44"): true, - common.HexToHash("0x042366ddff7d1614444564b1f327dcb07efdfd95fd9904099947e916a9a23300"): true, - common.HexToHash("0x886f61f95893402bfeeff08c253c8ccc31170933db94ae27812473c16e566e8a"): true, - common.HexToHash("0x357847f01be226b7e2d07283f0a4a167f20fb23c01709b6a32ae3813b603154b"): true, - common.HexToHash("0xaea9de6fe0bcb9894aef4957b2389e1fe6b030619c66f1dcf344fd4de3598eb4"): true, - common.HexToHash("0x49299492642bf40731738ceb26ab98cc8108fbda671c2777edb4211f847946aa"): true, - common.HexToHash("0x5b878ec43c3a67109d5d6a87a0c97bc65d451ee7e86a791044031135c02e6918"): true, - common.HexToHash("0x28dee1b9ed41a721ff35c338648a1f640f3d70451e879c50d5654e2da8a17c77"): true, - common.HexToHash("0x1b7e7084646bd8f6018005ed5390c8b5751406b1a8fe85dc6b100e60cc6de19b"): true, - common.HexToHash("0xe53b35125f87aa5241b481a484c201cc225d29b11eb095e5023f8ffba95b7393"): true, - common.HexToHash("0x21764ba4176a6616f502f2060e1d7b3ad48e534a073cc0607f97f5b1e05c94fe"): true, - common.HexToHash("0x1d792e2be48c4f7bbb96f9d9fe3d6b85f02141eb684f1afd6d87284c7a8d8e96"): true, - common.HexToHash("0xc9780f514770caf59acef153d8f61bd6725645395ed85d5feab26f74394ec04b"): true, - common.HexToHash("0x5ff3fce2e046f522623e1332ecae2c670401d59392acab74798e63f59cf0fafd"): true, - common.HexToHash("0x78c80a3c747cf413e9369cdeface857d1c5936654231cfbf3d36b6a7215a9598"): true, - common.HexToHash("0xc49f68aaf42dcab0d1cd8150ce92eb37ba77914f225628045cc532525cb9a91f"): true, - common.HexToHash("0x3a6abbb2c57102197fd6af4de605f45e6f46e2db1b8652ad0f230b2067ccb687"): true, - common.HexToHash("0xe0794ab2ae7d694dfce8950c85e429459a1be428c8583d6743946eb8247877e1"): true, - common.HexToHash("0xa2e96ce8209458d4e028e002ef494b8772282673806ce38616ba92c4096e0eb7"): true, - common.HexToHash("0x1c235ef0ed61c0f2d15913746ea08b4a76b4b4aae8fed859a296cb6d075e30da"): true, - common.HexToHash("0x51a24434fc6d2e5a052964d47e30cf738290ecc7e526ef5c301b62d54a6b67d6"): true, - common.HexToHash("0xaccc9b11ead907e19fb168f0d1d4adf7b59f375b1b7519d207e7eda3bfd164fc"): true, - common.HexToHash("0x15353b48cd895a63258e54a0ae74e5752bbf73a820b887c6dc0d729c87c4a9bf"): true, - common.HexToHash("0x7465d3c26cfe986534f7118a89542cc21bf606ea8f9efc0e7a84d1f0546c6e28"): true, - common.HexToHash("0x4697f98acf123951c31296d32c0639774d4bf1fcef24709b13bffa60344807f2"): true, - common.HexToHash("0x4f98583985c7803128bfd3241e696fd8a2b047701c56bf8776efe2ae3e1635e0"): true, - common.HexToHash("0x88bca7bfcf9d1fbf080b81cea9ca46c1def0a7702e418e2323e7e83e0d768b48"): true, - common.HexToHash("0x9de2c7a157c31965586030a85bcb8735c80a8daa256f450ac5fe190c3aa1bdb2"): true, - common.HexToHash("0x3ece6b59b7e9c5154204e77d3a464e3a1c8f5476867af52655798ba9ee36631c"): true, - common.HexToHash("0xc42655d7d24fe01c8930b27fdc5dd323f4ca7ad6e06a5f33f1de0f5c2fccfa26"): true, - common.HexToHash("0xf313543dafdb0a7694441fa3fe74edff6adfb8f224899964b445192b2dac86e9"): true, - common.HexToHash("0xaa226442f24140c4e09c1d180955f6685dfcae5dfbada255965e761805cecab8"): true, - common.HexToHash("0x875e8db848af7b6a05d22c13176f29d6c8862a64da9df8eb1e48225a65f43d3d"): true, - common.HexToHash("0x2d4eb50499394dceb3fb3f8b08897f6604bed65414fb59102ae67cab9b275a94"): true, - common.HexToHash("0xc7dfafecf93a254a9d49439f91e5c8d53e5fc6052b319175eac4e6f8d6e94115"): true, - common.HexToHash("0x26e1377a32efcbd538719174843a1c22fd88f3454e25bc72b4666ee449974262"): true, - common.HexToHash("0xc58b4ffd53dd86c908adb58210a5420c33af0aa6c28f37c045ee2c70919e450c"): true, - common.HexToHash("0x2ea4ead79f638e717e8e2f2f06925e735f7a9f09db95f441ebd567f9b2579c4e"): true, - common.HexToHash("0x0f066384cb016a2a548ff934df2f2aff45e4ff23afe32fd1291162be917547cf"): true, - common.HexToHash("0x18bd2ae0561a3411660fef4087f3324118578df11c5f0dbe4546abce37f10865"): true, - common.HexToHash("0x0baac09b1c7193e7c90c6ef6553f92aa755b49302879c183f7edce21d4039d0c"): true, - common.HexToHash("0x04a632f211d73bfa013fb5eef912a6ac70cf6438374caeadc8f61fb7b8bfb1a3"): true, - common.HexToHash("0x10a0b69248bfe8daa59ab3fba5bd74f46a29552989199557b98793b81199415c"): true, - common.HexToHash("0x1139732d13c75babbb0d9b178d54a5da7fb64879de0ec504386c456aa36c3617"): true, - common.HexToHash("0xf60104b0dd2f3505ab8d502d2848013e83edf403dc617dac09e7c9c367b72d17"): true, - common.HexToHash("0xbd1fe8d6da71b8d5d8368c29470db4b747a92c5dbd9524ffa6395d9d7d807dc6"): true, - common.HexToHash("0xf1f51849e656453c36395806d945ff8eef2786a6e09aff6d8b00c71bb733d732"): true, - common.HexToHash("0x1f3bc9b06e1d6b7573ec76dec4b3b351264a7b674a7b832d10e9ec3e797e4c07"): true, - common.HexToHash("0x8963ecca93a06ddf4f58518b1ad1e984d07c9bed08227dacfa2ceb2664d2335d"): true, - common.HexToHash("0x96ec872759934ae2162d41290a76f1d81a0035bd9e27d8b0ef2e76884ad0c253"): true, - common.HexToHash("0x0d9437b22c4efb03362f1e3815acbe33e4bf941406bf0e2ef79759b08309d934"): true, - common.HexToHash("0x1eb4acf9deebded26de94b17ede285cbd5a0a0e5dba4f2f13ca94a3ef2608598"): true, - common.HexToHash("0x93aa683cdf0da08387227f0eda5e0a0f87e0bbe912e2afc218c89854e3be108c"): true, - common.HexToHash("0xa283f2dbf8dc7c70ca436da1b9764795996d7853d1a87f23df05564e16ef6e2d"): true, - common.HexToHash("0xb915c938779a8baf37b7ad90c295a68eb1d1706eece45798e75a2d9985e6d0bc"): true, - common.HexToHash("0x02dab0b2364da882312f0b9458cd8cfba9d74f54b14b8b3d43f901bfdd72d81c"): true, - common.HexToHash("0x2bde4edb26d6ab52c51c144fa7726ab469ef820505a0ef6c466499e759aa75d9"): true, - common.HexToHash("0x0dc4163788646b39bf8204c3acb2198305e151836fc96519ab435e0e82f3e172"): true, - common.HexToHash("0x1b3d5332bacca5380a1cac1fb8b3eb81e8a09065dbaa1df2e14c484e75946c6f"): true, - common.HexToHash("0x81c979ad3fe7557fdc7968f5fb2b578ed901f7663bf003b75d45ed0098de3c3a"): true, - common.HexToHash("0x7dada2b150610e1c51f54b5a28846d02569ae058c320c032c009cef32f8904ea"): true, - common.HexToHash("0x23cc9650b3b588a106deb611913d472b36e87460f846f516d7f55f3c62e41695"): true, - common.HexToHash("0x541aaa5f0741d14e10e65643676e293c7c014f14a008a03207f20b929c71e81d"): true, - common.HexToHash("0x820447db9ba661dd230ddac2b532919759ad17f99e41d89e40efaa4dc0cdd6a2"): true, - common.HexToHash("0x7c6872be09481e707cc57ccedd9ce3abd0cf63bd2224214ef9f0c3a4bf2c0a8d"): true, - common.HexToHash("0x7e464cac45f6412d6b470e77fc1995fc1cc79451918c7fd920de7431c34bd221"): true, - common.HexToHash("0x6bff8e2d3962f263f64fc218de5cd414649671df1b0fff074caf2d8ba3066b88"): true, - common.HexToHash("0xdac07bb308f2739967082c436b5d879910b6f1951f48553e69b5e8af3f0797ad"): true, - common.HexToHash("0xbeed61f3dc426c7d0e480b91adb27e81d62e9667ab390a22cf1215d60864ab45"): true, - common.HexToHash("0xb7f61be8b8876d55fe74d224436a1d4e04133540543711ef3cc1e795d997c394"): true, - common.HexToHash("0xfaecfc53405465984b8865ec7674a7f57b1b582575b3e31fdaaa7e344235f5bc"): true, - common.HexToHash("0x56a6e59283e9bea6d794a4fe24caaa0bdd0a099cf43852cb14ce005e3a632f6d"): true, - common.HexToHash("0xbaaa8d02bc81bd62fb83c8dfc493418284e8a5b45029d2764ae709e336cae5db"): true, - common.HexToHash("0x3b7b206a366d5d3ba8d6838ede001b0bdb2d5e7d1365c3afd35939cf472a3486"): true, - common.HexToHash("0x9e6198bff45a4943bbfcc16e2902f3a0f7e2cd005b1cd99321ba9220630e275e"): true, - common.HexToHash("0xb788eb70c99238adea02ec8c4cf0b9d984f4e6c6df4038983ad3716ea64ce793"): true, - common.HexToHash("0xb51b0b5c747ba34b9ab9552e57475b6afb9db3ef002419b27873f1c6218d0af5"): true, - common.HexToHash("0xb8ca3d57971f0b95091a09ac00650c4807dfade1e189786d389d0a2bf2fc2990"): true, - common.HexToHash("0xf491034ce86325a5a1fccd2d92833ff08bdfa97cd184ae42c496bc11c058fa2b"): true, - common.HexToHash("0x1c19d95682bd740d8bbd3fa1dace3289e1839d0cad977686a32dcea397fe772d"): true, - common.HexToHash("0xf896ddce3242cc1a30e9ace9a0ea91fa04e0497fb4b6b54735fe50ef780bab08"): true, - common.HexToHash("0xe46e78940220a56819b9dee1822ae91c1299ef07c801d0b8af2d912e7de112d9"): true, - common.HexToHash("0x0cb0e214e225d32606f44acd6e2d9ccc34e0eed8b19fb56188bcfe32bc0a9191"): true, - common.HexToHash("0x4aa27ea70f692736369afa4a4837e29a7ec87512dd554388b8e7e86272fb6f80"): true, - common.HexToHash("0x0ca211ccfa8caa23ad17b107b6120cea78092e2388e759e11abbf4c1f3be507f"): true, - common.HexToHash("0xf00ca444c751fbce2fe552486de11170cc0c908ba2db3fa30e5508fd67411cdb"): true, - common.HexToHash("0xa239c0b23cf219b700843a77f26e4db2ef78679dda03e42b20d3e507f7cb8fed"): true, - common.HexToHash("0x709df30085afb2c5ed6ee396dc12e6fc01100a5d478dfda9b13f69d58793c702"): true, - common.HexToHash("0x324d4dc45a69741796745dac2c1fcd73ab7562147c15d2fb41ed192acd890729"): true, - common.HexToHash("0x7695c61224dedce27e51f6d2af0aa4b775758a0674dd64512805ea09bbc10b5c"): true, - common.HexToHash("0x5a4580abb2a47717a2198871fcd0ae639f0af16b5157cdf235440181626b077a"): true, - common.HexToHash("0x23e1377979cf91be36db935ff85ee206c268dd287eceb8aaab9afe125731be54"): true, - common.HexToHash("0x2eb8c86a155a000e29488ebccc5cfafd3e6289fff0806d1fad581eb8e477c3dc"): true, - common.HexToHash("0xcd8dfec9a10411b495fecbbd15748a4b55351b72671a7ce61a7b67759eafdd46"): true, - common.HexToHash("0xff4eab1458bbc774183082237e668d1c0406fe147caf9a54698e92220bf4de34"): true, - common.HexToHash("0xe2d1c6747f2e98bfe09d213f2032ee61f57ec6d1208aaeddb1570689a771047b"): true, - common.HexToHash("0xcf4474d465538d73840d94a2a70df7204e942e4ddf7d0c0ef4c836321b0e6d39"): true, - common.HexToHash("0xaf670c8aba387f4a15c8333bea04dc337bb9fb2a70415752197cb1051af69a4a"): true, - common.HexToHash("0x0055877e3a3b63fb2f5981991305714c740253dd6735df91f66fb54ed88bc7b7"): true, - common.HexToHash("0x0bd863e94918a3681b0d6c22da865241bc2f004876ecd545bc46db84eac52e4c"): true, - common.HexToHash("0x1d86ab895be70f7b804a7ce6e63cc2453984887f703e914152590a2c99cd3dd7"): true, - common.HexToHash("0x0e3ea0cc262ca864ee9bca0634c6ce0394ac0d0fef78185a4214bc4a50845289"): true, - common.HexToHash("0x0c0a1dc0658ab905eec1e92a3e8495d3b551f32761a5cfdfce3e5b64b05885c0"): true, - common.HexToHash("0x2130e29f2b16ee0803f38f2e97f278ae63d4f2b071ef3614cf2b137b1e68e2b3"): true, - common.HexToHash("0xa35792c1bd02098729999279503984046acf8e75d6d8b64bfef66696368cc9b4"): true, - common.HexToHash("0xfcae3d8a9760eaf1a78d47333a68812a1303ccc6728949c99f7c5d1b01009782"): true, - common.HexToHash("0xc979abae2fb24d14db5bdaeca333dbe5884a20fb6bdeab85f8eefe99ae1f6f5f"): true, - common.HexToHash("0xff72c74e6e2ebb695cf0b815183136180f0088171e4a6d57482f380bde29fb34"): true, - common.HexToHash("0x549d2f7705424a62c755112c08ea070a98591d84d819f143827a764171ddb57f"): true, - common.HexToHash("0x08ef9a942b80a2fdf8bca060df2686b3706ad78be1da7bd60304f32df1aac1ff"): true, - common.HexToHash("0xac219324ca29c767317cfea9de2b55195ad4a720fbbf2befcf9aa674a40fb3f6"): true, - common.HexToHash("0x04495b9c4c145e7aa4aab9908be2b7931a0d8beb91265ff2e7df8393c3acfdbf"): true, - common.HexToHash("0xe21d2adf90e2bfcc6a32ba60b582fa5bd1b46cb0567360a03cf25be3c9ca9e32"): true, - common.HexToHash("0x019999dc1491b0bea7afa454065c773159fcd8045d57f095cbeb18d87bfecf33"): true, - common.HexToHash("0x552e368418c18e3bb173fa7b9d8d27adc9ffa8d02f98d525d0b96c8f6ffcb3f2"): true, - common.HexToHash("0x96bba0118dc7587ca0be5109801210a37b74f89a27243828661a7f0b129cbca9"): true, - common.HexToHash("0x02728b9cca6ff0fd28d60464c5334d93b5b604713bcc25713de41b48cd606b96"): true, - common.HexToHash("0x047b1406fdd79197b28ca1d0764b7acf3938515efe52a5b860a4573067474360"): true, - common.HexToHash("0x6f2dfd7d82e67ea743fb57a07175bff7c307e2d548be91282a3e89d42e0ff16a"): true, - common.HexToHash("0x3ce9eb66c50cec7170ebc5e2a260f6bbf59d98fc5c3107d9c650dd2cc843e66d"): true, - common.HexToHash("0x865d38d3a0ae2b2678e41ce19d5ce4378fcc8d57c1c5be3ef5c6d1b883635b9b"): true, - common.HexToHash("0x435754d523158fbdf4cf025f0d36315f4e2041718cf0aabc916135a96a40b79b"): true, - common.HexToHash("0x483d9bc3d1311cca8975ec09a6b8a9738b0e70977322f4a6342ffbdcea076fdb"): true, - common.HexToHash("0x0faea770bbacf84d9513d57cb9166a9bf1a1ffe7f9ed8640ba38eb20bc243856"): true, - common.HexToHash("0xe2424a4c02769d961e332a89557151c6709f4aa2692349adc06cf192a1fe7eed"): true, - common.HexToHash("0xef9c6f7842c7db05dcf4e318a479cc2200f37d1ed505bda935dd692118e9d980"): true, - common.HexToHash("0xc77e463bc09f718c79fec3aa8edf0af6bc33cb7d617d82aa95647402fc87fec6"): true, - common.HexToHash("0x5fe979a29cb561a8fbb07d0bf726d8ce436b55958b536b372ba266b1f7831114"): true, - common.HexToHash("0x0d404f68ff280153cc696a38bc4ddc9e821b4277927b4f18c644cc7f7bbd7446"): true, - common.HexToHash("0xc6095e5b6bf2532a197ba494179eb53016178a4bcee2f650f68604799376f03b"): true, - common.HexToHash("0xfe847789286755183ffa352ad5bf9fe62639ef4e15f99163658500a88f99e609"): true, - common.HexToHash("0x9f513e2bb6552494dd85c8ce855b86192efbff101c0b88e5789b79b606f6ea74"): true, - common.HexToHash("0x30eec58bdff4c746f67358c11a59c8590fd840220329a5e2dea03551e121d037"): true, - common.HexToHash("0x6c5215d896f2ea47985de79a8dbb29820112ea1c8f7cb27ed8c4883929aef1b2"): true, - common.HexToHash("0xb370a580f3c79bcfe18722896ceccedc091c446478ae7c4930096bec0e4a1048"): true, - common.HexToHash("0x92aff6ea0f687de696a75c4b77e2029860e5c5f1ea4633af8fea9f9d6eee046f"): true, - common.HexToHash("0x464424378775721089f0eb6a21f52ffb90fa1c1d933b5f78ab662dc52b2d9415"): true, - common.HexToHash("0x84ece4840113dc399a60220e5e74e27188d85401cb470d166774e5acb7857c8e"): true, - common.HexToHash("0x611c744c429c3cd8f3ac63e5345c1ed40bab341a179ad470e5c52732fc7f969f"): true, - common.HexToHash("0x645e16b7988308a790aaceb2eeb71f9081a98e9038b8981740f61312cef28b78"): true, - common.HexToHash("0x60659ffd3013bec44d6d18ccf3b3740288b1de098df656a1cacc8a35bc526eea"): true, - common.HexToHash("0x739fb3c773af366bb5dde8a6cf46b1b32025d4f5fa18f185d6342788a53c303f"): true, - common.HexToHash("0xf4e82ce05482f870fe51bf6d8aa2b69c0d02a5e58f136baf49dfb834ea21b3e0"): true, - common.HexToHash("0x56b91c2a101ca8cca720a37121b319a65608a54d8680445e547bc84bcb932d74"): true, - common.HexToHash("0xe0cd9ed2e7be59508e6752c7089bbf6ad300943db647517f3e7b387171b6c464"): true, - common.HexToHash("0x96aa2619918cc639feadd9d1e3d39260ea94171c3322115ec0d490392867df58"): true, - common.HexToHash("0x15081b80c4f7b0165051d1aeb8fce38acb65060cb40cb18c5bbeedda3b9f4a69"): true, - common.HexToHash("0x1784d16964f05f0617b11d50c20c187410fddc22b6fe608ddc097a42bf4c6433"): true, - common.HexToHash("0x91b06a8fb35aa8817bb20fdfd43cc135486ec3e3a42124b0ccc14f1c2b338af1"): true, - common.HexToHash("0x0e26d9c045a3e8b16a70ccffdab6b5815217b5a1d301877cf01bdccc42da9691"): true, - common.HexToHash("0x58179ca5d70caf29d9d6c473e4d0265547e926850cbdfe6be51a7748d7551098"): true, - common.HexToHash("0x56c1ecd5fdb9ce622afc962e182915d73fced88eca5b58f3293bdcd29a8c736b"): true, - common.HexToHash("0x99da6b54dd12143d0f6998e140b7c276ddc287909a4edc60c8f7f7b9606751d6"): true, - common.HexToHash("0x3fd3271921961d5d75d70232cbcdf058e21ac0554c6eaa86e5898cf395fc4ff7"): true, - common.HexToHash("0xe62ed5d7bc79b84122f928535bbd2e56e92e952db13aaf7d4bade7291e56201a"): true, - common.HexToHash("0x918896296820cd42d0e3a03187df159da4d9a5e0e05c5232f3eb7b34ca1b286a"): true, - common.HexToHash("0xb00deab537e7f14fc9cbcf1f35ac446c7b29d9e89072201c8fd38b34585e5f64"): true, - common.HexToHash("0x96c971e06ce04ddb60a5a075ae9162301e38cc1371c05942217c6cdde7e828a0"): true, - common.HexToHash("0x25ac963f0fc24cc0a07965a9383908ac180db5dc085ec12cf3943538afc7e178"): true, - common.HexToHash("0x5e235705a1528f2f88f0a3e972b920e934fd9a015b1419ee89e8958ab0f979f3"): true, - common.HexToHash("0xbc076a2c39d8c382e7560ea56af79f339a0d51ef4df42a45cf71ced0755fb82c"): true, - common.HexToHash("0x7eb83924468e2777b597efe71559cd9877d29992851b96ecc19712596c421f96"): true, - common.HexToHash("0x505ca2d0c56f04cc6382faff58e014f7d551cbea16080c8026121487eaa1eaa9"): true, - common.HexToHash("0x9923f82f546073d94185f564eb261f654ea38c8b04f58274d19e86c19306a43b"): true, - common.HexToHash("0xd8b7e039af70f053dc30480ad4e36409700311fe784ec6721ab4dca8d9741688"): true, - common.HexToHash("0x80c7051783b616dd2c24c9655c861258bd6bef4808d70dc3dff3f29c04cd47ae"): true, - common.HexToHash("0xc4a39cb28b1f23f72be99ae105b3c185241b43d1fcbdd0f3e597fa4f3387fdae"): true, - common.HexToHash("0xea49902ea93178f95d4a4cdd704f7af3005e5faad15aa5e60c3733e20f714004"): true, - common.HexToHash("0x0573a2aa8fdfbde2e33d4c95d938c6ae56c578e15c02ab82083532c1c235ee83"): true, - common.HexToHash("0x2c9f4b28da0830632510a6a19681425ee64f54061f5869dee7d3b946662dc5c4"): true, - common.HexToHash("0x33cbe2a048e4b3cf3c95b625c17aa41e3a0703820b6ee50b14abb7a2dc9d3ea1"): true, - common.HexToHash("0xa615ba38e3b3b60d2629d8990f769dee43fe6cccbdda4e0ab1afe140d67e3f47"): true, - common.HexToHash("0xdc2f70d54e609d0725e68c63355e01a0c099725d2bcb2a093fe296aced7a9278"): true, - common.HexToHash("0x4d682d94e5796705baac56041352bf38ecfe854469d36650e7c488ae8dfaf0fa"): true, - common.HexToHash("0x1fa79fd5a0e1112788fe77512463abbb7c1a9388a3a598467009b7bb1f9c0b62"): true, - common.HexToHash("0x3cb430a22aadf29832fc550df277fc6b471092430903d3a3e01e5cc636ee939e"): true, - common.HexToHash("0x3ee86d00e85953303ac85fc52be39587ba04066184b199c44d21636568dece90"): true, - common.HexToHash("0x938453947092f76a622b862d5261203208dfad12000d6973bf3e3a89e419b38a"): true, - common.HexToHash("0x2a5e5f9fc61d1b2c2a8ac8b247c7b7feb29dd17897034706d9dc05266927bbbc"): true, - common.HexToHash("0x742702625e384274d7c0c6c11ae30a5e6d6e29a21eca61bd9e7f4642f486f3bf"): true, - common.HexToHash("0x0da02c5f969acf80aa66faab8ca7539ecf3ce43bc58d9fe068576b4fd2cede98"): true, - common.HexToHash("0xb5a1b68ba061092ca4cac938e0dc3deae9d753798d09744957707fc384fb26e5"): true, - common.HexToHash("0x97cfbb0af7bb7b7898d56056ccfcd0b5202facc3430e6b767d58ddd913f0722b"): true, - common.HexToHash("0xc42e1930c274c7f7035021076acff9625fcafbbd2962e3af38a72eac1dcec23d"): true, - common.HexToHash("0xb19efd0bcb67da214e0935980312a3aeb0c0c54590feb82613790785c3593103"): true, - common.HexToHash("0xd5c9d8e233e2c4d11ea4e365f83ba8addd0700543aea412e4ab0d729c8ff304c"): true, - common.HexToHash("0x026007954e9bd54e467dfe770d608a5a44874cfc4728d09cf2ca45504b49cdcd"): true, - common.HexToHash("0x81f3fe3ff1a2bc99dce62bbe97e45b44e69d90b15592e3669aefd309eaa8fece"): true, - common.HexToHash("0x75f7ddbd3dd02fe8bb4d7a9faa40231128b5edf4063fd710b63c39c83583fe8a"): true, - common.HexToHash("0x26ae5348ee9b425d3417aa8808aec1f8f51213b5f52c7ac0b43e98125cca565d"): true, - common.HexToHash("0x38e4d1b920ccdcb61b6305856848d576b6d42e92fe1d839e38153317105abed1"): true, - common.HexToHash("0xe4593ca7e82276fdef9885bd0484acd4080e16d9ee67091a34b8b4cc1bb9dafb"): true, - common.HexToHash("0x6ea5be2bce41c0bab9c0c0bade8607a3d95a8c86421a9695f699017aa7f32655"): true, - common.HexToHash("0x22579b858bc32edb5fe18314a58a692f613d1411596dc672ef9879e1d005c16b"): true, - common.HexToHash("0x97ec30529c86260847d0196abeea42be01fa3993e5932f72aa036869c335b37c"): true, - common.HexToHash("0x3c8739bae40b0c775e738b99ec67a23339905ad1dfdc8ef81fc619c1c4c7380f"): true, - common.HexToHash("0x755de4c804c2c989bee01464f45fbb99610f4705d33fe7c59aae4d975d1eeb8a"): true, - common.HexToHash("0x580a1d1d2d90503a9f2bf7bcee44d9fe375182fa84797e568a172c082e502531"): true, - common.HexToHash("0xdc621294913359d6a170315172635f2169cf175fc47dd6940db69c36380a61b6"): true, - common.HexToHash("0x0674b7ace1fdc6fd865065b371d7d10874cc3e6f8b0345e2d6daa767d4766165"): true, - common.HexToHash("0x5c98934acae651f6fa2826ff1cb61404323c697e5b7e6912e2644f8ef000a082"): true, - common.HexToHash("0x20eec612ba9a8cdbcffa49a33769219449172cd022f09f1eade7f73757a84799"): true, - common.HexToHash("0x413bd060330c87a098a5ec52fbe6f2213abcd24905cc5e0bf348179eb42807d5"): true, - common.HexToHash("0x52222dbddb0ffaee6139915a673c44ac613726202a697b2eb80d4913b2389bbe"): true, - common.HexToHash("0x44983ae29fdf62297e60b2bf04caa3d88893e352cafd656a6f590f4a9866b5e1"): true, - common.HexToHash("0x35e1b14d95b9085302ca37b9a5e47e4fd5f0e859518728019099175929dabef0"): true, - common.HexToHash("0xd022f603fed9efadd94a30f9126107c6605a3484c9aab884ca33cc4e756ad1f0"): true, - common.HexToHash("0x33a379cb4096a6aeb3dc0362f23bdcd07340eb49c32089497501c156a4e74057"): true, - common.HexToHash("0xdeaf711b86ee8b0575e929f015598f3dc2ba6b29827058cd2eccc5fb6e633fe9"): true, - common.HexToHash("0x5cc25630afe87d2b4483381f77ea455881edbd5b648254f323ba70e8c0516413"): true, - common.HexToHash("0x40ad59c5b41c3efcb803489d10215f4c498325a299f5646957e6ad5a360f5f85"): true, - common.HexToHash("0x6f323cdc09c48b535709fa04a1f7ea17e56ea4872e916b90d951a8cceb109cba"): true, - common.HexToHash("0x327037ee96740496d4df247ef36890020ee54ecaced201525d535dbbadf8567a"): true, - common.HexToHash("0x6fbb496d4965430cab5b7495f761930ac41fb54237bc9e486f1fd01caa784a6d"): true, - common.HexToHash("0xd9e79493d139e478c0b52f2afccf5fd9a35da3540cc7a29581d8740346a75914"): true, - common.HexToHash("0xa5d615a980918931947276dee43c514da179006326072c457eb75e3aed2bb2ca"): true, - common.HexToHash("0xe97621f8d88fa54a7350463e780a0006007828b78a37b7921c5a4db99729ef67"): true, - common.HexToHash("0x9cb02b0fde3ffb78d7ebf75b0a5296f96ca602f52f1f5faa17ac29bb201f02b3"): true, - common.HexToHash("0xb07663b057613d088472a722a7ba63ead754a93d1882f1b185594df08e4fd361"): true, - common.HexToHash("0xf93a7f6a91afcfab97cd8750866903dc1302c15fbebacb01e5c844545c42f782"): true, - common.HexToHash("0x0f3b76a6cb475c2401fc84b1102d84f3728bc8ba5d9b009276f78e2c98896e7b"): true, - common.HexToHash("0x3d353715f4fdaa660403ddad1ef66ec6b1d493ba66d1ad18490e94c90f322a80"): true, - common.HexToHash("0x5a11b307bd7c335c54a23175f7af54e09d1be376074be235b771701a14fedb72"): true, - common.HexToHash("0x3e99746b16c7353cbc980f183a5a3402be5f2224c5f9d9bdfc84947a75445e34"): true, - common.HexToHash("0xca67b80aee1a8b6dfcbc3579316b740f62ca0d802ada39e998b26216a6e1a3ee"): true, - common.HexToHash("0x7949c6e44f721c550d67628e0ef8eacaf93d2b705f8717af8003aa4005d58d3a"): true, - common.HexToHash("0x3f6647969e093de150d80b6cf664ff46b6ee0032dedc1d19d276f1ff62819af8"): true, - common.HexToHash("0xf95ce940e94f1270f7ed6906e94bb0f261af7244abe4b72182187de4f8f1e7a2"): true, - common.HexToHash("0x698d0d9229e60e6e4029be22b5ec0f5a9d5753c2dd0deb48e3ee66e4471a5b65"): true, - common.HexToHash("0x5e1c6ec0cdcc0ee877086ddf809d5196d719ddf7e4e2a43dc67870577cf72de3"): true, - common.HexToHash("0x3f13378daa32c03ebbc469916f0c65b0e6b8552bb0f19c3a4bccc4c9cc5d3661"): true, - common.HexToHash("0xb24e82ac95db6544d6c14c7d17d80d456b7f9b899644e8a2427fd418fb3452ff"): true, - common.HexToHash("0x6dca6cb03572cc4f983c63a1efdfc64458c8dd9fe0e18b9b7d4182c8e047fff4"): true, - common.HexToHash("0x12275055c71387720c06c61c6deda779d37b0866a43a134716314f5ad7307d7d"): true, - common.HexToHash("0xa1107c869d8371caaf64bb2eb6624167a9b5cbc2ec396ddafb820d82d065a373"): true, - common.HexToHash("0x5f55c961040280ea98c1a927b17d1d77de611c0931f11dbea3bc1ee96bb1d2e9"): true, - common.HexToHash("0xfe904a988f5c26e6553b99319c70dbda4020da34e917a17de6ce3697a522c2c4"): true, - common.HexToHash("0xb76334065cf84ecc6cd987be87e40307826e8a612fa09f3e4072055e920cb3ac"): true, - common.HexToHash("0x18e583b11d5ca29b61430e64406eea10f2686035e0e7242124dcda374761859e"): true, - common.HexToHash("0xf14a156b63ca3ae3383a94996d546efcedd4b756126c4d90590584de087ec859"): true, - common.HexToHash("0x70b4e5a232ed41fe7265e005c4e98910f4520fd0a629b3940a79a2750bbd782b"): true, - common.HexToHash("0xf3d7ad54746f697ffcec6c4bc66e23b2c5865f83757267a88b895d3b7705f944"): true, - common.HexToHash("0x195d0f173e9d5929ab377825725868e815c335bd9fa26e31d0e4045e971b5b61"): true, - common.HexToHash("0x20f85f112af0b0ea07e287f97659a1ad053f874a0103b69b2b2159a29e401fb8"): true, - common.HexToHash("0xf2c544ee602f25a850b854d3f3a1e5129ceba41c173ddf34a1441f33d4c762fd"): true, - common.HexToHash("0x1033243b02018a702e724a434eed260d94688d702ea6ca817cb87b02d6174355"): true, - common.HexToHash("0x5a972f51e35cc09667a266ce72ed24d5e80a0c01097d67b0a1a3d89745a19a48"): true, - common.HexToHash("0x5ba5a86ba7370c6e394f1b7261f7819812ee3ece774c48a915161724bf5ca2ea"): true, - common.HexToHash("0x9afa9baa5fa7ae7c94243321534a5603dbc173bf0cb4f416313054eca84eb5e9"): true, - common.HexToHash("0x2493c36934be32892f694f65544b1665e646655aec00bd37649904c454c8542d"): true, - common.HexToHash("0xcc59021919c53ef1ca9d6065737122dbd5af77c39f045ed49a936f08165c7b64"): true, - common.HexToHash("0x9d0a0aebce6b80c83773aa6beef7fc53ae0c1056fbb1777add238ec051ddde14"): true, - common.HexToHash("0xeea86fe869c13721298eb91eca92e689bc0151af9a6d44bef77f1cf1157267ac"): true, - common.HexToHash("0xecef6f4f8787c0c64717695347c28ea54b268a12bf1a0f0dd832469f2d59e12c"): true, - common.HexToHash("0x89fe90772890dfda41273fc8ea04155367832e721af90ad42e0cd5ac9f34ced7"): true, - common.HexToHash("0xe180fee49a7b2a83b5a2ea936da09a96f42d76aa31bd7b119d8721da79ec175a"): true, - common.HexToHash("0x7fd28592032657a4e834a6946158d22516feae0fee6df69fc91ab314120c1707"): true, - common.HexToHash("0x3900d5a0c573a52ed9fc717f2e711380a3af926a4c156b3a10403085811c8c21"): true, - common.HexToHash("0xa69dde5a590fdb618a56a919da9d9fa34d9a82473a783af83f1ac2d95fbf111a"): true, - common.HexToHash("0xa0c6cbec0876e6e98430543e47b2512a5ecb680cc329dd37ea6fac4bf700b24f"): true, - common.HexToHash("0xb091c1d89d54360fdf6b9a68f8414df89965e20819d58c0f743ce8e5e7d94741"): true, - common.HexToHash("0x0a6a108143c586dfdd2f5deaf986e641c2a0a51ac7b59d6aa4e0765d23a83660"): true, - common.HexToHash("0x3765adf6d8ce9710c512e555b03e5a42a61ac8250e3727742223505a1828ebf5"): true, - common.HexToHash("0x123973699df17b0acccf5bae545ca5714527069f94d2ad40c65fccbec58b8752"): true, - common.HexToHash("0xcab3f976dca019e29813d8734a8eac06f1da778eb0b8e47c087bf4567d23e81a"): true, - common.HexToHash("0xeb06ba6c1831ba98ca4a8a756879f8fa643fe12f5922a1917f1f899348c7fd86"): true, - common.HexToHash("0xb7e9de366bf6ef470b282c67660b70b04b945f0608ce90f22480209e74ad844e"): true, - common.HexToHash("0x05237000b1003cb3144048345dbe48a7b8d533150e34b02cdf70858eb88fb526"): true, - common.HexToHash("0xf6ee3a6a3a5158e2273a5e0ce2cd0b687c045b8e49fe97b9c0b420cff4a9124e"): true, - common.HexToHash("0x744516296a42f8dd02b970844d467e21ef483fffa19d13c4909a83232f94f633"): true, - common.HexToHash("0xd13d9cae4a241b49716cfeb432dcd926e1e63cd582e8a8a376d1d582af4a1b1a"): true, - common.HexToHash("0x1e3da0715a16365b867819080dc3ecc7bec6386268e56054019766dcd50c9934"): true, - common.HexToHash("0xe69eab2dd7e27f5fbc288a1c44e4a4116a56e5f827a48d39e860bb8d3482494c"): true, - common.HexToHash("0x87302915f05b15c5d658a05021fd328e34389431e55095250ccc3b5fc87b7d95"): true, - common.HexToHash("0x532d31f2a6ebab47a37280ffc60aa05f4dfdaa389fce65834e325b8d574a7637"): true, - common.HexToHash("0xc511d02bcb3fbef977142fbf617bc0ee7de27a7f409ad3a0919e340feb21c6ec"): true, - common.HexToHash("0xe6c3c8925a496a0fac0f55519eab02069d313c71767cc9dfbacc5fe87bae0d28"): true, - common.HexToHash("0xa2abc364c0436bb71fa78be4dc3f2e38a985eb0b6513fa6712acbdd59e2b9c62"): true, - common.HexToHash("0x680494494cb13797f2067a8a2c8214c14c8ce251f0780707be93cf25740505ce"): true, - common.HexToHash("0xb7233bb929bee3e73aed59a3e9f88c55f99764cb11408510566b8a29e2307746"): true, - common.HexToHash("0x6fdd1fb069f0c587a75254f23c7485cdf2a3a90d7f9b8b4cc9e8c705e2f8affe"): true, - common.HexToHash("0x6bfb734ded373378e7adbeb0166330d541041a2a2120b40d0eda1ceda188a649"): true, - common.HexToHash("0xb8ef7670acbac972ab7f1c95252afdb97fa9b8a64af83f056c8c430a2bf56aa5"): true, - common.HexToHash("0x947418e6e91cbda802b119b2e0b6f1c4b1de8ae2f9eee0947112a7a4ce976291"): true, - common.HexToHash("0xc8a27d88873c95ebc3036979cc495cd1159beb0df1c4caf5bb0318cf91c25c06"): true, - common.HexToHash("0x304c7c47cafa49966f0895c04e36fc8cd0cd37df28d1320e58b568d5c2004dc2"): true, - common.HexToHash("0x79f97ad9bc910509bf6d034a892c428ffa00387accdcf0f42974768312c0d499"): true, - common.HexToHash("0xbdb7d40e45542927d1f2b312b82d553df9f6f4d82f12a824cba9644c9c605e5d"): true, - common.HexToHash("0x00a6b31e73e873a18f67e8a0ca262b9fa43f40a98aaefc91a8c84e89f74f2cac"): true, - common.HexToHash("0x3ca7f055b4b46f76910bea0dab680b44ea5e0a40887b06d5cf38d80e6a364076"): true, - common.HexToHash("0x3870595a885e6ca8976fe19742c3668421b9e0ce86369046074b1c19fd37d6f8"): true, - common.HexToHash("0x6706baa70839a3c566653ebfd1513798f191a77a350f25589c550b0e1cdaac4b"): true, - common.HexToHash("0x2684d70a1fa0a2f184c1f407f93ad9eb7dbe19f251267885129ec7776f46775f"): true, - common.HexToHash("0x7fec6b3d21d0adc9585a0c4ddd04a27bf3c63b96ed23a36dd25ce05c5534269d"): true, - common.HexToHash("0x240bb43e37f99529f300444e1c28578bd91c767d2f41c4f86bccf1ebd4b66f49"): true, - common.HexToHash("0x700acd62172122e896ea4bde8de7662195a79bf006391ec206cb948b3f64f761"): true, - common.HexToHash("0x4e9ec1726b70d5f7a292b0d109109ac9e535f1c9ce44334011eb804803dccc5e"): true, - common.HexToHash("0x02acf4711162881e6e3839e6bf8e51df25f8bb6537816352efb5b19529218b9b"): true, - common.HexToHash("0xfe6728d971c56f74fa022ec7e94bde324df7d2c6a979e714089a35c67e850c3a"): true, - common.HexToHash("0x804345cf9498a692ed2a16dc1483a1a29a5e04c9965de8a88ca6e653de54603b"): true, - common.HexToHash("0x65b6cdb8b99b217d80f43db41b134b0877337ffd9b709a60c36938c67088ca20"): true, - common.HexToHash("0x1f3f6434718cc86a763a13143c36d3cdb13e22ce49124ad58c11fc01e343f55f"): true, - common.HexToHash("0x5b978ba28abba37b91589bd0e076748c650182658eca98b26a8b1e00e9a3ab41"): true, - common.HexToHash("0x8fe57dee2f60474c1ff82943ed6c524c11a49c007c99cb04b46f00d7d9bf1242"): true, - common.HexToHash("0x786e16ea4d146e39979169012a7c3bf1a128d53f0851e5bf6062786cea5675ca"): true, - common.HexToHash("0xc67654a5cd316bb8d3418771b7cb1f828002c2029c4e187a2dd995d80dadeb94"): true, - common.HexToHash("0xb716310022d10daf032a950dc5145caf3aa7153aa38cc8332daff381f0bb016d"): true, - common.HexToHash("0xa3dd51a9a055ca14ae30d887fdc6ba9515d9493ce81a97cb39292d3e7c2bec90"): true, - common.HexToHash("0xbfb8799fae7f407cc23a68525ddcc6bbe2ace7a4dea49479ef97b25ae1bc8c43"): true, - common.HexToHash("0xcd403bf4f023eb603b377c04153ef45e03d4cb88e42905bd4690993dd9710fe0"): true, - common.HexToHash("0x9f43d8c093f22030c42cdd173d54e14900b42244892d1a318be94f11438a4287"): true, - common.HexToHash("0xf85426c76c4197ca01d499c5e86cea05d94a5acae464f5823fd6dfec4c2c84c6"): true, - common.HexToHash("0x995b86f039979b1eef94fe4359003b8706fcd6eaaf97afc8269ab920c0329769"): true, - common.HexToHash("0x9e1cbbeeabc1f9e70b48dd6481b9cfa666ca0c439ed6e6769ab844ddae721f69"): true, - common.HexToHash("0x110649b37d7ee690c114a3ff1fc146ca02bac03e145abe27681a215313477af1"): true, - common.HexToHash("0xaf644b507381d4f570e10df98beb499f59b3d39ce9ab415d5c4001e436d77347"): true, - common.HexToHash("0xdd6a264ea2e81dcd6019e344e535de6deb44130b25f4d985313b7d5f1719d07a"): true, - common.HexToHash("0x38fb82c58927029f22eb59869b7bcc3630a684695c2ab97e4a5c3d9bf12fe0c2"): true, - common.HexToHash("0x04f976beef19c734eda2a4006bbcf2075afb58a59afd12f1b4181c3f9c240016"): true, - common.HexToHash("0xd8363a13cd24f71476c9a30fab8be316a111397473d91af54b47bc48f0743cf0"): true, - common.HexToHash("0xabe510d1aa958b3a45f7fbcce3f35876c7fb87cf8c2e5465dc44d1c9bd869f7e"): true, - common.HexToHash("0xb67ea86a983c2e9f416b79ceeb998324ae9f72fc673e59ceb85e81bd39add1e9"): true, - common.HexToHash("0x69504f7783db7ba392948d738131d3b9b6c8f9f873baea318399d7ecda83db6d"): true, - common.HexToHash("0x7d93f634115ff1815dab6b5f595b2533bbd1d0aa0ae7fb63c5778b6c8b3e7174"): true, - common.HexToHash("0x6482951b0fafc7bbb21f9516e46f53b3a80ffe5a3003bab548cc5c982a9b3dd5"): true, - common.HexToHash("0x9cb5ad0daabf4d6a7c77021cb6c35a227a9f89ee34753eb8ff801e56f98de30b"): true, - common.HexToHash("0x6cfdf5bf322fc8ab472225321ccc35c3dd692f2b15603b0516254f7397639fa8"): true, - common.HexToHash("0xd18fe97e69b6f21b15246d674dd3acf5e2f47e6a2d657b35ec4de5a51607fc8b"): true, - common.HexToHash("0xbcb8f368db258915630d4f04d333f2c4288637a7680327f303defe4e146c3861"): true, - common.HexToHash("0x6ebec2459e3673ce588a35e8e927df5eb21efa0a9225e2f912f72a24f24fc844"): true, - common.HexToHash("0x11d137a1ab5f6e7ec2eeb07d1ba97f825077b45d7701a256e1738a9b9c7c9b24"): true, - common.HexToHash("0xefbfa6e5c18b3ef041d034e75bf09bcef3b5b78a0a9c121a382f230267b8a869"): true, - common.HexToHash("0xc2b1b5a136ea9906c57f2caf492895c03739bc4c0a4e951cc45b0b1409714ecb"): true, - common.HexToHash("0xb3475b434e4e2fc8bbdc0efde714bd50e7382a576783fd965eabe8014c2071ca"): true, - common.HexToHash("0x0a8e7303f7463307e63927fe4f737dfd3ab9e463b4e838a58bbd1dce3594d56c"): true, - common.HexToHash("0x115bc0c71b4283b18dbb2d17fb53cefd1da33f060d05666239583443e2465dba"): true, - common.HexToHash("0xf73edfa43649d949cec59ce1269ef877f6beff671bbbac6823691444d6b7f347"): true, - common.HexToHash("0x6414c18610bd048752527bc1a7ece22b1715f2dcd479c6d0535840abc839707d"): true, - common.HexToHash("0x140a8fdc62d70f8f520716b9f791380e6b45ed8b38bf6578d277da596f753e8a"): true, - common.HexToHash("0x36a0006fddc88609e83c4680b312f740c03fa3ed118095f0454f39e658deaac5"): true, - common.HexToHash("0x8ed426d39d258ba45dd373f4dc3cda31bb7ed62d829535a2855567d2b6314375"): true, - common.HexToHash("0x1558648237f96d968fb540756149435022bdcbe0c34c1faaac184b8e3abd6a0a"): true, - common.HexToHash("0xca2ad7f6eea909d6d5dd6dc92959fad0288ba4b1941c23adc82f2debb2811a80"): true, - common.HexToHash("0xe87cb7720c9d016b91bd75572933a32b5e57bdbefaa01cb26716b10592bbab67"): true, - common.HexToHash("0xcb42fa52924b9ec38916a0acc7a56d58c41a0fa8e2aa38a5b370615482a63fb4"): true, - common.HexToHash("0xda9e61ea7b0288b8a0e6f0bf7857aad463c9a1402b5df23572afd5781b919ef6"): true, - common.HexToHash("0xb4e828837fbee42966e4961fb6a7c42aeedd2f628d4a53be78c773265fe9dff5"): true, - common.HexToHash("0x211e53083e5b16d9c7899173bda69048f5f198dfc621d89a50cfd298a7fb40b7"): true, - common.HexToHash("0x6b91fbfc6f7bc2e3256a0cdd865620243dccff4754f5854fd3f32bcd2ace56f3"): true, - common.HexToHash("0xd5ae60e3072363ef7a10580ddc68a5556bc775f3b8acd11b9f29c42304f94ff7"): true, - common.HexToHash("0xc8fb9c160f72a369bdc9c20f545a5934518d935e9306ff083a9ebc69f712a585"): true, - common.HexToHash("0xd96d4d54f12275dcd3ee9db5f24c184a2826f1f2b0272ba2f5efcbc46d4ad94b"): true, - common.HexToHash("0xeba0ceb7089e1ca394f85951fb91f72f372d0e3a6a60bbefb514cabb84da4ac2"): true, - common.HexToHash("0xdeac4deaf24a4bc03e3734c94fe3ede2d19210f6d402d93189270ab93c57772e"): true, - common.HexToHash("0x880e18c4f53f767a2c5944a08b482a424e410c9a2a1aa5a9903d89f9ec34c926"): true, - common.HexToHash("0xb478982d977862239db82a80fb16bcc17e4ac631ab669859c9e8f97f116334b0"): true, - common.HexToHash("0x1ff5ed208280a58ccf67e84a055b820f669098787c6d2877dc788111e1d43b06"): true, - common.HexToHash("0xed33df41753b61128e27789734e2756e237c4215760f0b05d5b4d87a6bee3682"): true, - common.HexToHash("0xf1ad1757ca62e1ede5262502958db3fd647c1550237c9f3de1fa4ade2d0915ea"): true, - common.HexToHash("0xcb4509977305c6299f964bb41c97e5fb5ee347b06d2b0e4eccfa33a6147f1db6"): true, - common.HexToHash("0x1b7d121eee8c52da258c4fa143e3054ea60c10d59b40996aa668787305a061e4"): true, - common.HexToHash("0x92890fde9a4729535608997a2922a7d32e3240ad237ad5ea3671bc6580413c6d"): true, - common.HexToHash("0xe1baffe39a371ac39b561583491335a3fce588b5ebd1560b8103a7138ec26bbf"): true, - common.HexToHash("0x0d709b536ade47061a83fd006808f55261241ee1ec16ca3e4d4b25bb126bb322"): true, - common.HexToHash("0x76ee4eeffc386d653120d2c1e89f22bbaef4873351cf1433cdaaa8a174b7d05e"): true, - common.HexToHash("0xceec2dee498c5b25bab094fb0a5835f4a4cdfcda20b8b1e709643034d36ddca9"): true, - common.HexToHash("0xe3cb7ff9c6b463d666b155229d6a54af6f5b6523ba552a9f1b4b77e4283d92ba"): true, - common.HexToHash("0x646415e02481519c358e7b9c55159348e4b4b940347337e34e844fb4c0fb2ae6"): true, - common.HexToHash("0xd79f13d8b48390b7da8597321bc3112bed34e53a3641572e760d99dbe8a8bb09"): true, - common.HexToHash("0x420305daeb40ed3a052356fd33f4b9467485f324defbe9e05446ccc9d0047578"): true, - common.HexToHash("0x3dd47f07a3361e937ce64f49325910dc7991559391329ea31cc5400da5c05543"): true, - common.HexToHash("0x016b8f8eaa99d83a8c81e28f10495376ccf89c02cc64efe9498eeced8d3db833"): true, - common.HexToHash("0xeb59967516cf84c8a8a94ecdb7233f8d414cfc4229d368012508afd03460f87e"): true, - common.HexToHash("0x121a66e62d9f996e372f7ca91cb074878c13cd4373f4ddfd592b25b162f24515"): true, - common.HexToHash("0x59384b63f44ba35f180353a30b366d47f0bf93200873f937eb6ada47379880fa"): true, - common.HexToHash("0xe53bca31edf4093e3b69a34daa0a327b09f3fcc1b033f908c6b3904885a8e0af"): true, - common.HexToHash("0x0d4b2316d0026e95bb3a98702bff08258f898b1c5591905a485774e86ad8fe36"): true, - common.HexToHash("0xfeacc6fdd721a80bbd977274bc098d76a948f1d3213321bc7b54945d9f2e61dd"): true, - common.HexToHash("0xcae1a585068e9a28f70cb7cec634521e21f2fb0a22d933a2cd4ad3f9c5e379ce"): true, - common.HexToHash("0x378b9939d8770b8423628baa76e521b3127d8cbed4a5b52b7e404dbdc747b5c0"): true, - common.HexToHash("0x4702e81c0354973e6ba2c6a50ec2935aa95b9e098f84699a173aecea47326a78"): true, - common.HexToHash("0x7089d9eaf58b52019e4cd9194802bee1aee583db5afc2f151847faaa9c2283c4"): true, - common.HexToHash("0xb6103b9b95bd7ce045bc42a8f82d9a8a92ed2ff77af4a80eb178c4c01da4adb4"): true, - common.HexToHash("0x648bb51997ac4515172205b2bdd95c20823d2cb1ce9ebe11d266414875fe3909"): true, - common.HexToHash("0xd37c5f21a78fedf447bf6efdfa69029f491599e454815101f78eabf4b86efecd"): true, - common.HexToHash("0xa9c2b3c84b7e389250e2f41d003c8adc36175e166726333ee3dd580356fc9d8c"): true, - common.HexToHash("0x47e3b6b2c001b52732369df324b911daa384add3fd2e9b1f4efdd07a042da01c"): true, - common.HexToHash("0x59317f4ccb4c5a36b6bfb5006b2c73667428fddd6c05f832b325f602893f43a6"): true, - common.HexToHash("0x22b1cede5e3430ac6b570a018e6658a362e7e59c258e0203941a0330cbc81827"): true, - common.HexToHash("0xef4d232bf06f7e1b3f94d3d73191fffd0900881cae29e4af9b72c6d371d18c03"): true, - common.HexToHash("0x680531c9790c0b24fa9d424d7aeaabcf6a08ccdbb3bdd48300b7c8ff7a4f8139"): true, - common.HexToHash("0xee30cec176ca42fb5d615cfcc0cf360a5e05ec57002ec348bd06ea5b718bf63d"): true, - common.HexToHash("0xea6c1d41b399cb40ff9f0087ef4b32a905ac12520b539847cc25eabd4854680e"): true, - common.HexToHash("0x96f3b2c2a54fac99e7f235060d9876c0290e2fdbf3413c14df97312916046243"): true, - common.HexToHash("0x02866444aff9b00face6a74ac8b24d3f59f6a54aa844f9ad43a3323a3a729625"): true, - common.HexToHash("0x195187a6825fd84ce7bd49f1c97faee217c39ba75aff3514e995ded9d465fcd4"): true, - common.HexToHash("0xcbb36ce0ebe861740bd1f5c5ff8801a3d464778d652873f3f6aafa9867b7fa4b"): true, - common.HexToHash("0xd35f5b960e95ff95d78f7240d5df2d834996782d68c935edc501f0aae894ac5f"): true, - common.HexToHash("0xe86b4801b2c86c39746b76c6f618434926b7b134e6895561f2c1822605a2e8fd"): true, - common.HexToHash("0x6baf349632ca3110c90ee368aad786cbf97445a820f168ec9b9f863ba3b67d11"): true, - common.HexToHash("0x594a833917b6618f59de78ec48bdf7a155c9f87949fb772e16a966e83e924994"): true, - common.HexToHash("0x555176e5b9f2738788b34838b529c18cf59a1bc6f84ac00f68a06defdae12e21"): true, - common.HexToHash("0x11506011c5eb6a271671d2483858837d652e39beae8caf2d9901afa9e6fcdf17"): true, - common.HexToHash("0xfda6a0accbbd14992507f636c7c5c2e49ec38c9a3c532c456b9130e1ebd26853"): true, - common.HexToHash("0x7118bbb04c31b92d701a1bfb00ff1695aadabea5117af102bb502440cb9f136f"): true, - common.HexToHash("0xf4f356c47940c72dff2b06836989720ceeb0e9ee22d4f36871b3c675f11a1cea"): true, - common.HexToHash("0x25844fe586cb590f72b7ec22a088775197112c9bfc3691f16bbc58e775c4f112"): true, - common.HexToHash("0xc1369437d583399947993809753ffa6ef6d146787917841327dda326e16eb110"): true, - common.HexToHash("0x83a6a6fbdd019fd62758ad73b369433cfd99f9f4adf54be5261bfc3b09d3c9a4"): true, - common.HexToHash("0x588a222a875795b5a3e53e406412fc59ee461ad569db89791fb8e96c26f750c9"): true, - common.HexToHash("0x5459af1e45d8e37d7b50a2785733080a67b150a57b7cf8ab5f9ddf321030f9ec"): true, - common.HexToHash("0xc126fcff8fbb858c88d6514b5663e9938e23d7ba320d22be88cb365d87430dc5"): true, - common.HexToHash("0x367350b53fa60266e9b1694c6a21aad61aaedab5e6caa664797d71ab21b301cd"): true, - common.HexToHash("0x0c9a8658001a6641e5bf14786a10e4eb1d3f0a3d32a73f2ddc1096af1666b361"): true, - common.HexToHash("0xb4f464aff4f17bf520117e002f782b2491f4ee901031dfa51e45020274f80056"): true, - common.HexToHash("0xde02f9022b52bb692df3c33a76772c2371f2dd8b1aa16b5f37d98863e8629078"): true, - common.HexToHash("0xd19627200bba23c0938a4c560f0b2d3884fa0dd4ac35f665d0e162a43588fc66"): true, - common.HexToHash("0xdc959f3ea579b847abbd0a76fce0b180f2af8b3b6c42e6ba22a8c5e76395f5ee"): true, - common.HexToHash("0x5d3c2643b28898fae9725da31ebd7453c6e9c22fea5de4334fc57246193a984e"): true, - common.HexToHash("0x0426949179539b8c0b2a69c28aed51f77d91735630f992ed9a328114570be963"): true, - common.HexToHash("0x1471fe520d3218c1c2126fa46d981c1567ee3b23c001b2170549007bdf67483e"): true, - common.HexToHash("0x1caefad0ed6fc0400276e26a0bbb76524ecd6dda0bf73672bed3216fbb448875"): true, - common.HexToHash("0xacc7e305239e58337b6aaed007c26e911660e73c5d35cef65afdeb5e8686e9cd"): true, - common.HexToHash("0x336de8e132b9369e06e79f8c6383c51580bfbb78fa702023b292046bc3465d07"): true, - common.HexToHash("0x2806b7bc2efd4e93b97ec34e7771a3fe8831c22680cd4a3adb72d11758ca1a1d"): true, - common.HexToHash("0xd72c69f04fdb7e67a0622b66ef01e53f137ad20462e49ef8a1f13e1d247ce764"): true, - common.HexToHash("0x9144c0f3ccdea396215d5634c756707bde90b3eb04ae313f324de169cc8793ae"): true, - common.HexToHash("0xe7f7ffd63725628d5d07a726996023e7fe0a407bc204f456d5a1d207e1492654"): true, - common.HexToHash("0x2b6bf222d81b31f21506f551b34d080a4e73dcc640608991050feb05b4554d05"): true, - common.HexToHash("0xcf26a5ccecf9d1cba9377f7a010766042752b7a17cc6744f5095234e911a5fc8"): true, - common.HexToHash("0xfc86e666e25ad91f1b3db9bfafc473f335058a5117f275caf7045e00e48d882e"): true, - common.HexToHash("0x84d8fb0ea395e5e13b79c213536f00b6b89e406b7569b6240e39ae0ef2f555a6"): true, - common.HexToHash("0xd0c2f7a7bca65bb08d75b03c8918ea6678e39516ded52a1a5cbf7976679b6266"): true, - common.HexToHash("0x557b67b0aab4270657d4b06e6fc4573c21b60097629c3e84f40a4b73f16b1ea3"): true, - common.HexToHash("0xc3a4bf988cca22d096aa073b513e5c1b2c13d544f96908613ee0b446f5271b05"): true, - common.HexToHash("0x0c79995b22b200aa5be4f3a38197b99b376a5f5cc3c6403df540bc49c9e8c131"): true, - common.HexToHash("0x2d1f9b56bc3f4aa5ba35fd4239687040364e8664390d6824a433e897a7dae3d0"): true, - common.HexToHash("0xe08a63ea0245a17ccd3b86fab72a71a7696a7fc1ec7081f5a90326e700e7af79"): true, - common.HexToHash("0xb9773324a9c2b430fa691af6aa17867e753791a245adf326d4b2dbab42ae3209"): true, - common.HexToHash("0xaba1dca51d2501487860b4c297091ba22aace0aa557d9e74d9f3d5d73fd63fc7"): true, - common.HexToHash("0x8d08148f1cc761d6be4bafdc92a3e24b31762b7996f8b99439b77c099b020406"): true, - common.HexToHash("0x49c51936b1047d5fd0362c8918b95e30f870cf77d647c961d2f89c7a75a2f081"): true, - common.HexToHash("0x5a2acb86924ab2b6903dc87904c8b7bd7a1bebf07478c3b7b7f6aa9d058c6be0"): true, - common.HexToHash("0x8ef2c4c19b7643e425293dc4fc3a5cf69f24ba342a0f121885195b9e7dc34b83"): true, - common.HexToHash("0x2a3cdcd5435162fc7174b7225caae03bae19a65d77bbf56832b7b7cf3cae4de3"): true, - common.HexToHash("0x2dc4463abbbc2b6a6a861264bca2d1899585c252e30be4a73a82a21fdd6cd2f1"): true, - common.HexToHash("0x243e8b593d9a1214d8c1dbef2afde70c80337b593b187e672b3c35d7204af7af"): true, - common.HexToHash("0x54ca37ac35ced21e60fbfe161083da1c5a988e5fed0d282ea850b4fa93fb9947"): true, - common.HexToHash("0xc07021a5bd5135945abe3e758c1a3985863b1da7d65043faa8f36151288202e2"): true, - common.HexToHash("0x92efa2bdf737e35fb33a9006b1ef8cf97d77ef6ab2beffb10cbf81dbbedd7678"): true, - common.HexToHash("0xb23455cc24b681205b09cf6a9252716943088f656508781632bdfc4afb4ed2ea"): true, - common.HexToHash("0x51637072758cc4c05ecbf729c30202db1695b5fbdbf6362ef0d0dde0e30c77a4"): true, - common.HexToHash("0x6ea3f914350d25f50d6b940125f748d894222c1d3351483957bec8e7b6c87e87"): true, - common.HexToHash("0x21c93bf337aab449ad5b58a8b010c0c174794dce1aaa4c6ae4628c915fae9d36"): true, - common.HexToHash("0xd708e032eb136fc675b8097da414adced4eea40d1568c7668aa8543df20c7398"): true, - common.HexToHash("0x8edd88b61e46cc92c709517a33c9fc16f202b0beec0c880b0a209391184333b6"): true, - common.HexToHash("0xa6c547a5dac9666251c14c77fb4d9ab4591506cbc4404ae17daa9d8b2f880fb8"): true, - common.HexToHash("0x748e079135807648c3225b5091c91a21896364e46b5124f7f83d905005addac2"): true, - common.HexToHash("0xd35d746e79e77e602d595a4aaebcca464f53e7661e4744706031e35be24bda5e"): true, - common.HexToHash("0x2da8b2413314d2a12fced3ff31f2ee59426c493130db5145d1c8427f1c0dd7fc"): true, - common.HexToHash("0x243c0e996db012869eb6e7c1abc99114b5742bae5fe76ad3ccea212de4cf1d1a"): true, - common.HexToHash("0x4a311946c6c3d5765538155e39169a1f04ff717c84e18d8f83582d4fcf0ab10c"): true, - common.HexToHash("0xb7cf9a8203c3c1d2f21c905b545937b0093f1c9b6005af7a39b8d70ff0e16727"): true, - common.HexToHash("0x4b03c6ededa56cbdf87ee852a23ead23957c889c6144b160d2099d3d0b4353f2"): true, - common.HexToHash("0x4c8ef26e8f1fc2ea72d37d3facebb5af9b5017f1bb176f14787d88ec411b0adc"): true, - common.HexToHash("0xc11f070380de3f5d038dfbb1e3dde1ff585ebb065ed7fc9d6fa712a7e28df7b6"): true, - common.HexToHash("0x6a841149c078721bcfdcc8a0edc1fa593145605543c4bcee7aaa80caf3ff305f"): true, - common.HexToHash("0x5c378d72225879b489f78c6bb4edf33d41ccc176eb5a61d4873214519593f854"): true, - common.HexToHash("0xf323bdbc6e2a86a0dc6f4e6d4011839d3b52f110ee34310aeae8a9949e2a562d"): true, - common.HexToHash("0x20efd7b6845ef3793accd400a42595dd3f0ac178e30508a435daf2656872542b"): true, - common.HexToHash("0xfe4e5795b316eb8046f23af65f28a05ca8a4759ac8306376ff02a23da86c32a9"): true, - common.HexToHash("0x0ffaba3ffe6d4daac6361b55605114b76e2c3e19de76f95be36e125cbc342c03"): true, - common.HexToHash("0xf914aad46ce1630468ea7bfba4f46282833ff514830a0bec3c9f7e8a5e56b7c7"): true, - common.HexToHash("0xf070b884f19e50573fa388e399b5045abd5dadf00d0b68714505e2365e16a158"): true, - common.HexToHash("0x307b4d6888506e5c20149d9f54dbea47094d6c1a49a933e06d8a988c7a705240"): true, - common.HexToHash("0xcd58cd2d9da4693414cf084990f683a687728c26bf522a2a238d8a0b2afefbe5"): true, - common.HexToHash("0x66bc6bcbc07dd47de57a68b97837967e356f5dc4cc0a3866700f0cb8981894ce"): true, - common.HexToHash("0x0d5297344f29c3cb804865710d20de8d406c5eac8537332992427163b2fed750"): true, - common.HexToHash("0xa7d487519df690889995578a65fb80ddf02731a587ec619a81638fd44dc1cc88"): true, - common.HexToHash("0x46ca5c2fca51b914198844e29761eae00698079c4fd223d17c8008d725dc5d24"): true, - common.HexToHash("0x3f4d25b4e2114acac92d4bd1ca6dad03a1384ea977b3d5e76106e2d269cc2a07"): true, - common.HexToHash("0x9259d7457b2683414f253ef0a4990a454f250829362c60258e39c7860476e57b"): true, - common.HexToHash("0x56624b550c6ed0826e98c5615bb71a990827d625fe3e82bbc1b2f71b59c50644"): true, - common.HexToHash("0x67b5faf425b034169dcab0ceed16cb54d17b32691fd235d3035ee785d54e0b25"): true, - common.HexToHash("0x4abc3e0be240ee7d0e23698ea1f054b8e716f9d91351889ea7abd4721faa1ac6"): true, - common.HexToHash("0xbc8e0ede13ffc68402b21b148df5433c8ab095a2675fb5e3c04a8aa8640b65f9"): true, - common.HexToHash("0x5cc4e39679fc238adca4846f284e3258f93690d530615932ae6f9b7471e27de3"): true, - common.HexToHash("0xd4c46b1e03f58a035ce4ff29554dad0512ae0e60e9c98b2ed4044f2b94dd2935"): true, - common.HexToHash("0xb0a34cd71e24c34aaff16d0d544b34ca508284cc0611c3506234945ce39f950b"): true, - common.HexToHash("0x7e9e774950440f2ac048823444272739d54cae4a8588c1979b12cf457bc31c76"): true, - common.HexToHash("0x12fc061a240074bcca555b154bf71db6a1c4f54e2a89ee2b672e096dc45397bb"): true, - common.HexToHash("0x12973c447532130e58201d08a8fb1c393d1835828f6ec06dd1febf37cf56bfa4"): true, - common.HexToHash("0x87b12294d72b569716d887f4981551bc93069d0ec2c62939d0a03cbfbff15c98"): true, - common.HexToHash("0x67ce8ad593cce09b96bf656ca4fe29ce8dc3a2bcea36b05c8dff46fe7add1d74"): true, - common.HexToHash("0xf04edb7eae158ca9c580cfffb0b282f4882334e044e8aea096c06d4eb6a2337f"): true, - common.HexToHash("0x34b5bc0c92defff28190208cf3ac6f5c4496a5e996e40c0d26341c8a562abaa9"): true, - common.HexToHash("0x6f585f28b363daa9250499c64d2fb56b524f39e0657c1e8a6999b1d1894b7996"): true, - common.HexToHash("0xa321c80c483c9982ab3345708437af819792394a7f8201b6e22f079b1e7f7c77"): true, - common.HexToHash("0x57520957f76ababf6b1ef7606ee8f4315c3c7baf0bd82350a606ebe8c55bacc0"): true, - common.HexToHash("0x4c7e90175a180ade39765cc078c0bc813a8cff4f1060a1d0b520edaea3657065"): true, - common.HexToHash("0x96c0761536c65ce72bc986c703c1f0c28de9f19ffa4239c90f9543d465cf47c2"): true, - common.HexToHash("0x8d53e482c008687f5748eb6b8fb37285f56aa9555076d3e416ea071b4f3f5219"): true, - common.HexToHash("0x016522eef40ca3c86e7db1b166452e10e915bac9d9abd79f7dd39f5e364292ec"): true, - common.HexToHash("0x75406513d2d451bb24c5face5836f72b60666ec855f85e9cabd360c5884d4adf"): true, - common.HexToHash("0x20b70cf75871198be2a90e9bdbbe326da91dcf6a6ed207496f4143a659d52934"): true, - common.HexToHash("0x5c91ef7c9dfdb020dd390f54d181dab1f01a4a7466635714a20371abf3768a68"): true, - common.HexToHash("0x1e547f4e4826a841d713dd739794b774c2afe7abf1be20f87510c2fd65c0f40d"): true, - common.HexToHash("0x747bdd9c257c84f9efe3584da885819cdd8a2d626802f28ceac81bb10513749b"): true, - common.HexToHash("0x9601f93d12185679233aeb641ffe40099653f23229f7094a62634481639763ce"): true, - common.HexToHash("0xa93f8f6bed2e520f4002e5ef162d3f665f32b547ac569aa4b7681570e9ecbd0c"): true, - common.HexToHash("0x17231d5babb5cc23e70120100a4b4f3dceba4e3804d5b3f98dec98a151a2e027"): true, - common.HexToHash("0x8b607a07f4b41c4a4aa0fc99e8cd15f758bfa608dd23a40f16eccf30f17808ee"): true, - common.HexToHash("0x60fc78dff2b2eaa39ccd01055c7ddad2a916e54c8789580c72ee09cfa4fdc8d2"): true, - common.HexToHash("0x26769b7bb3c7eb37f523fc73b4ed512eedc522ece34c5711f080363b5568f683"): true, - common.HexToHash("0x91bd4b2d62fc4503cf00c4e0e5e5fa7fbf0d6e1a3ea20ec8e150a043fcb6f8d2"): true, - common.HexToHash("0x6ed7cec2cf9c422c66efe7129d6a11f89b22cfb2d6c53bfba2c8afb2d2496cab"): true, - common.HexToHash("0xebd03a5b79dda05301af3a5e2450f9a61fd02fadd9b0dae8449c04657da777cd"): true, - common.HexToHash("0xd330ecdf437d7a57cb2eb8c184978b5214c7d89c317649e02fee518ef7693685"): true, - common.HexToHash("0xbc4167d7c8a7dda5aa1b370ca778e8f0397c6ff6e361d0eed91d0e25fcf78dd5"): true, - common.HexToHash("0x1c6305578646bf35f74dca17e34537b67941f30dcf4259dc9792d1baee7cd4e4"): true, - common.HexToHash("0x6aaf514d38245416f8c75b380e24778e2b0f0a8f6152515ac43ed56a82f527aa"): true, - common.HexToHash("0x6d66c3ae44781d3b9f9013da76965cae98889b1dd6a408bcfabe17296fd5e152"): true, - common.HexToHash("0xee9f80348916164653384a38dc6a2787495fca54ba90851b28b4d6a835a8b0a7"): true, - common.HexToHash("0x41796f6d045be27c84dc3dbf2dd509fda4bf08c0203cd3cae5dc3d3460cde44c"): true, - common.HexToHash("0xa12b917468d28a806b42018cb8eccd133e1e1c4ae573b1d1aa190e599fe607e9"): true, - common.HexToHash("0xe5ea977ce3b7b0c7a5258606b43748a8f00fca91ca741afb00215b66a5265dc5"): true, - common.HexToHash("0x0410ffe2436d9e833d026e9f1f0418044236fea987253b857465c03860630ece"): true, - common.HexToHash("0x0da8e7f667d9d5a96de0ad5a05cf8d7dabf6687ae5843dfdd5eeb1f8aeaa98ae"): true, - common.HexToHash("0x9d3be9be38ad499ec2212cfd4d6cb2c9728c5abd1c0621dead0aee3ad98125d6"): true, - common.HexToHash("0xd22f618cee012264bc82535d537ca877a3491e1ab8a7e894648bd0e4198da746"): true, - common.HexToHash("0x27010febabd463ca7f97ab3483a43bfae80934a156732052c8bf669c5aa6ad94"): true, - common.HexToHash("0xdea555f173f55b02dc4a73a7c363cd75066374090db58a5c26d2015b06e49393"): true, - common.HexToHash("0x4198cfd9e16ee2b147b9b3a71f58a9af4c3691f6ccda8421cb5baf49fe17b309"): true, - common.HexToHash("0xbe732f3807b0ec6f35375c4f4bf8f8b15c1f85a2d1c54c7948293d4935d49c43"): true, - common.HexToHash("0x93b1e8d2d484475bc36b835983456b4357e08c608449249deb114329b0a392d7"): true, - common.HexToHash("0xf074c5e55dbce28355e94087fc375b45fb8870d8b7086bd281dffa4ef68262f0"): true, - common.HexToHash("0x9db172fa6bd5a85315f0cbd10fd2671e9269818790246dfef01df396e6d85d83"): true, - common.HexToHash("0x5b5a0639c01d9b514b957a02ad69b0edf0c204a543133d796d83e8bc2e2ec16f"): true, - common.HexToHash("0x129193c8b1df5757f54e4bb4aa3bf3b929de9df1763c878385a1d5c636d1d839"): true, - common.HexToHash("0xd48985e5ea0444b9376fb42871204accf41705917848d4fbabadb16c7ebfc040"): true, - common.HexToHash("0x5f75a1fbc5eda6e5f9dfadfb181ce3510a281212ab4b448dcfb40be5d9afe9d4"): true, - common.HexToHash("0x00ca59ecdaa7493dd9528aeced1585373fb6eb2c401cdb281ec16fe8392a1e88"): true, - common.HexToHash("0x8039e0e17df229f9c3f4516f7e62ce2961966d4f06ff5047b4a9e1d85b0a1522"): true, - common.HexToHash("0x7e7e44ff628dd66f611a16fdac599ed5201f52cef6423c0333b077bd2e66d5df"): true, - common.HexToHash("0xa92caa7d8f6fdcb525e7aaf3a83bd2ff5496565c4cf3f8f6a0e4475f1e16f5ef"): true, - common.HexToHash("0x212fd2ad9a26ba82160367462c5c77f615073f8284909f228e4a7fb96de8b3b1"): true, - common.HexToHash("0x94692e6034ba474da82841eac83152d9e11d310a9ada42b9d7d2505e8c332a43"): true, - common.HexToHash("0x1d9b0bdb4a8b5392553a98190d2a790e739fc31b32b58851623d272e8da73834"): true, - common.HexToHash("0x5ec7bfb04a599ee50f2ce7e7a8db75aa84468744b74ed3875edcf7fcc44208c8"): true, - common.HexToHash("0xc47430c563fd0c9926ae1ae44519c153d8e3b5117d8c0c93cb5631795a9e3986"): true, - common.HexToHash("0x53f64288cd9de8a3eaa810d1e7fba70f37fb30bb46e832a7e2ea60df83034aa2"): true, - common.HexToHash("0xd4e080535fc0165742030a56cd92e5f3ae8f305da7c4b10c784930738410eb96"): true, - common.HexToHash("0x2228fcedd831eda47cfc5edaf0bbc9c70308451130671da902247339001c8233"): true, - common.HexToHash("0x396f1d1404b0ba4cbc99b402666bbcfa3b3eeb25f62e556b7d5102cb99559a75"): true, - common.HexToHash("0xce7de092415a0381bc912e8a30d2b2e9a5ce52c8176efdace974c68505e9cabe"): true, - common.HexToHash("0x5f890663b042eae0c46b660547d241450b5f5d2be59865382ff669785942945b"): true, - common.HexToHash("0x2e713fd2b40ecef0394ab25a135c20596da5c9c073642ddc04b88d01953a3d14"): true, - common.HexToHash("0x8eef13505da3dadae48b55a3dc2d81f05995599e845d14651539c88a1649d01e"): true, - common.HexToHash("0x32a9903ed1bf30a6a98b7fc5a5401a868cfc365447394c41382db290000af725"): true, - common.HexToHash("0xaa6b24739c1497cf5f640d4d3f4d73a52db77f02addaf82f79c288619acbe43a"): true, - common.HexToHash("0x4b8db1c558b97303f1bf0c25030ddffd95464d4bf2e339b3d386ce89852e07f8"): true, - common.HexToHash("0xf3f562d270868f148ad279de53b32e7a21203e837f13d59dede56afb428bf1f9"): true, - common.HexToHash("0x5e725d81bfa8ac79ca6e16ea8dc29f59587b52730ab877b174a1beecca8549f2"): true, - common.HexToHash("0x8768077e4591bcfc11459fdb073855ecf774c45268ee77c891a02095c830a88b"): true, - common.HexToHash("0xcb31ebe467d934659d5929e96a1d876ebeb52fca44294d7a2395e7f56c52da4c"): true, - common.HexToHash("0x53acd2feffcc39bb76d7c70d792b848d4fd14abf9cb283a4524187a87aaaf242"): true, - common.HexToHash("0x46bce98cd88bbb4970104dc8653d1fec9bb5a775d5b3797be38cf93b5e9243fc"): true, - common.HexToHash("0xc397106b72fb76f3549026b960a0caa88279850af040715ba1fd5a2b32a8d7bb"): true, - common.HexToHash("0x0c580374a57b163d2d700f782fc2fe64cbe33200fba40ad9dd396daf91839f47"): true, - common.HexToHash("0xb0be2cf2164401b931aa8601713487d9bf44b68a98397c423709a22c7d1760e3"): true, - common.HexToHash("0xf1a6abe82fdff47cd8c61c6a7491319e82c23d02513e45615340ee0277da3f42"): true, - common.HexToHash("0x6a35e94cf5b1cd360261f3ae91a075c4c002662e4e0ab3d3e5732d5a52fed635"): true, - common.HexToHash("0xcea4b937097b8091b5b71bdf03fba18fe63f6bb8345381ff5d4c6ff851cda8a0"): true, - common.HexToHash("0xc0f83793c5bd6c2d17862fcd5846985c4226e90b349d17f7f5eae1f86de93bd9"): true, - common.HexToHash("0xcfdeef7a85f4945aea40dc46c8e6b1fbc6c922de96b9bbf8ade6c769e469d262"): true, - common.HexToHash("0x36e36a8e73a1d791106e91f95cfb33984c526da49ed272569ec7879a57fc77e8"): true, - common.HexToHash("0xc84df0870c849bbfa85b4f53de10eedf675c3130ea0c86143a2a683f192e7985"): true, - common.HexToHash("0xb9c2f620e22e87d8b8192219ce428caa1ef28fb95cc2e375aa0187c2ab060b69"): true, - common.HexToHash("0xfee796a40c4b26dd951bc8df75f1e6b963e9e9e4d950ad1a60ed98d8a6ceaa16"): true, - common.HexToHash("0x88e616cff6b5fa4652e48d52124afc9549b7a0fc797371ec8517abcdebeb0025"): true, - common.HexToHash("0x3ddbb9cb392cd8ebbd2d7d37542f164385c28cbcab8d982389cf64bd9309ee4d"): true, - common.HexToHash("0xd30ea5de62c464ddd8ac3d56230b327f0f731339f33e1ef9cd6b1170de614b17"): true, - common.HexToHash("0xbb610421d8b34019916622198436e5899b0eb8bbea23fda178db73009b16fb04"): true, - common.HexToHash("0x478cbcd3d5654be497df8da2100c0eafc3de48813746a8cac3b62ef8deb77141"): true, - common.HexToHash("0xe1db54d224e6411403362cb8a85e54a46593bb99f993928f362105604a2af082"): true, - common.HexToHash("0x95db2df5e3ffa2fb9629b55bf80f52287af64badc324175d10c07fea277b2f3d"): true, - common.HexToHash("0x806b8455d8bd138792380df81f0c7bf5c1a82ab0e339bb088dce04784c92dc77"): true, - common.HexToHash("0x88ac8091ad80f49d9292647e0bda61df9303e1bef1366b4a03649f691ebeb582"): true, - common.HexToHash("0x92d5a5bed1669468964cf952837c538cb4e7ed3c36b486443ceafcbe63262a37"): true, - common.HexToHash("0x83b9c83c51bbb67e16682402efa60ce45245720559df607c870d5c3202411d15"): true, - common.HexToHash("0x7b09a1ae4f27a796b4a65c683b9167159e46c05670ed7f88c76b9edf570a5628"): true, - common.HexToHash("0x0edafd58c5192554de2e4d83a42e8310a14e5fc805ae0c7a7a81c624e7187d74"): true, - common.HexToHash("0xa6f7a564df04b50acc59ded1e816ab015041fb476ea47baf90fcaf8915076661"): true, - common.HexToHash("0xfe96bbbb8c1afa7fd2f5c0cb8d8ba8508fcb80a761e8e1eba8396c688361eb80"): true, - common.HexToHash("0x70cc6936d9ec581dc68ba8f8a59467ccc1e52842c4f987e084272ad2d382e41f"): true, - common.HexToHash("0x223ef36fdd77c9c5a9bca36124fe7439b8249af148632c65dfda13f85b19d627"): true, - common.HexToHash("0x14ddda1aeddba78d7d87999532100f2e3e8bc309b5a33dfda415ce595186b7e4"): true, - common.HexToHash("0x72e1d276cddc99fb349dd99eef2de4bec6a61a546c37a037004478d65e3c4fb3"): true, - common.HexToHash("0x187003ae55e9bf94a2e9cd007e0a309140249e1c1a715d32dcc05f016ce68eb7"): true, - common.HexToHash("0x9c6c8b81b1705db5176ed9c1962e0a92efb34511f9df20a973c33766bc5b16b6"): true, - common.HexToHash("0x286a42970b3468b35cdfc4c038b1c14f1b63de90907fb1f6d5d2a1e1d4c3b584"): true, - common.HexToHash("0x769267fd5ca281f60b5109aabc4069418fc9a7d9af04ff6bb01b6efec717e820"): true, - common.HexToHash("0x126b8467e6a42cd642d2a5e12ebcad28577429e223cfe02edcb3d9ef94bc88a6"): true, - common.HexToHash("0x79ab6091c6058653f38b21bfce010cabbac2e7055db559f4202f28029b466468"): true, - common.HexToHash("0x6d088d876d4e79c7b7739851a5b94a86ef2a6b1b8563c8bcfd4db086f79cc3e9"): true, - common.HexToHash("0x76a93228ac954ae3ee7d3d0eec32d6a6ad086c156bee7d76fd6a36dfebe27935"): true, - common.HexToHash("0xd99e4a169acc5d47e19e99a097378ba3c9285641a89e09ed05a86fe371c2034e"): true, - common.HexToHash("0xbc89541bbeb89f7b4fea08a8b0f8a8217610a47b94329155223d3fa4ec618f5f"): true, - common.HexToHash("0x50220fcec94e19430e7dd9c924a774acd53f8f6886737402253e3bad7bee920f"): true, - common.HexToHash("0x74195329610ecb37da90a4b2a8bb3cb1568043a9fd5e0a00cadf44b8a4f013b4"): true, - common.HexToHash("0xa047558c287d7cf8cf149fdc302bf8874f93670e8f5674311e813933d0958940"): true, - common.HexToHash("0x90fc3326289a18e7a63731753ce0ef4d430e2283cc4913512dff9659d9564b51"): true, - common.HexToHash("0x97425100b3782547fa3cb8b0215f6dd307cde2167720a05ef41e52e68aacd5a0"): true, - common.HexToHash("0x54616d0b2fd393b97a7f85191eeeab5c0f0e1a78bca971cbb00cdf471de3614d"): true, - common.HexToHash("0x0e034fdb3e7934688930e57d2f152fab193da939e1a68bfc1cde3c6be5667dcb"): true, - common.HexToHash("0x8fcf65dd6af01de393fccc6caa677487b3092718393c6e401cbdcff3300d64e2"): true, - common.HexToHash("0xb7d4ab26013f562a5b2c961defc684e3a8ac13fb837d55dd60d314bf29a60c41"): true, - common.HexToHash("0x28e8602f614a5de429fcd518bf1fe3d824d840ecde061075582f692b4d000422"): true, - common.HexToHash("0x7355c8e089d7d19bd3b61d863a32c1a671e016f17e270d36ebd20ae04322f10e"): true, - common.HexToHash("0xe976b0204d66ee6cf8b4d347b8f03c32082fce91a5728448f8af07a79501ef8e"): true, - common.HexToHash("0x821e597878c328a8a5adf80606541712d0f43d4edc2b78b50dc9190b57cea2f2"): true, - common.HexToHash("0x1bb716a48e5b0ba15620f2aed14755d5f6cad6b93a42e4414698291de0eec3a2"): true, - common.HexToHash("0x6ee1bc7c667d14d3f6fb25c6f30bfc631659ef80b1d730afddc5695662654773"): true, - common.HexToHash("0xf3f73dee4699d80eda4032a303ff5effd3cae248ff2946a42ebd586519ab0db1"): true, - common.HexToHash("0x20981b7709fad3fe431b3aa21331676c8ab8766ebae4d441a7b0d7a5b2eea185"): true, - common.HexToHash("0x3a9a41d1da507ecd4a59a96607c1b653117f39d7e2a70ea201a2b0e625909dc6"): true, - common.HexToHash("0xcfee56c19bd1bc12f8e3e9a68784137c93d01f7c1e33632446eb4058765a45c0"): true, - common.HexToHash("0x4a4611c60ec6d7bbf20bd34a5472d5b1b1d86e1ff314f45dad9bcf10a70b4615"): true, - common.HexToHash("0x31439520f7a7d3a632b4533b6eb7d31859654f2dfa2ca6016208064592b7c0ef"): true, - common.HexToHash("0xed28fc559d0638cab96f9e8d8b2047ad5c313d203e864aebe7adcf0f7c992a7d"): true, - common.HexToHash("0xba3159cb361dbdccfc78a660f97a5334c9b80b6c191c46c359925ef9e0c6f85c"): true, - common.HexToHash("0x51014ae4a33554b8caf4989ed035a55953a4e6e37da5dd2f894e6439def2ec88"): true, - common.HexToHash("0x8f302611e57058b79d5c990c1ec058b5cdebbedc11053611e045b12d30bca2a0"): true, - common.HexToHash("0x4c6998bb3fdc729dd357d7491ced0598208492e829514eaef56810d0dec8f16e"): true, - common.HexToHash("0xa51a3f6448f22dd80f78b2d1c12873142c6a6fcfebf7b2776b505772772711ed"): true, - common.HexToHash("0x891c71f682c482da924ea9d155b2e7eef8bccad21a95c4da5b24e3f99d36a438"): true, - common.HexToHash("0x9ed3e507dd5ce614186ec3f472450957a85195120cbd8a52506e9ca9d2560530"): true, - common.HexToHash("0xb8e900430f824e82bd5c5bc2a91b73dd348264301dd7d496bd13a8336c9e43a9"): true, - common.HexToHash("0x6adc155ecc3b68173f44ad108e95d57a6008c5a0689603888caf159990d434e9"): true, - common.HexToHash("0xd488d8add01fe898b4855ed20113a2dac7025d975feb2b7c5b1cab1deed35daa"): true, - common.HexToHash("0x0fe9e2841fdd33a6dd8b1758877cdda131b69e0b391ce11adab359ddef8e9349"): true, - common.HexToHash("0x9c7b32c82efd2bd88590bce7e42c8d0ac2de6b00db91bc7a3f612bf0df71b403"): true, - common.HexToHash("0x3402b47781c5570b766c661fe8e8235695b70dd577216a6408eb464ac72899ec"): true, - common.HexToHash("0xc11cf782f696409ade056a44c1ab7da0347891c222facd3d8d5a414babc0b913"): true, - common.HexToHash("0x9009a8310232c6f8fe7fedf3c1a1aab080c3e2429be16078aaaaacc4cb87fe46"): true, - common.HexToHash("0xab737808bb5eb9e5278e2ed038dea7f738a5b7add4006f2d3883a9a66b70ced3"): true, - common.HexToHash("0xc7b3f6bc90ea1bda310523ab4bdba7705cdd34bcf6b141df8ceb014bc65a9e3f"): true, - common.HexToHash("0x90a64441d71c7dcd34422d65faf1c0c910ce17a945270e950eab1c3429e035b7"): true, - common.HexToHash("0xc5d63034a7f83484c24f7a6768ed2a242007525bdb640ddf89f6e0868e11ebc0"): true, - common.HexToHash("0xf8ab75575f27af50ffc102be34c3df0ff8bb0c08ddb2e0505cef96f38279fe4e"): true, - common.HexToHash("0x9adc899245f8d08f83a278083fe635ed120b94f8a078f319c93df9435cc981b3"): true, - common.HexToHash("0x9fe304c55bd5376dddac312bd5ef5b9bff6e7f40cd36c271239308e1f541e3b8"): true, - common.HexToHash("0xb23d35c1f09a2aadfb3f02dca87f07d57028038e8e336c71d259e48aceaae091"): true, - common.HexToHash("0x460eab7ced85b08928f12d79164f47b38d40255a7095a81ef966dbaf6298a9b1"): true, - common.HexToHash("0xcd20f1a159f46fffb76057e7e5e42bb2aabe9b6cdaadf304ff29bea7bd1f24cd"): true, - common.HexToHash("0x4e60f2c8e29121fc12cffe1a3867eeab2b0cb1a70388fd42e4b157ff5192dad1"): true, - common.HexToHash("0xa542068a3e4f3bd58c814dc9309dfe98e52c730e030c4fddf2b9104b1c713777"): true, - common.HexToHash("0x2896b3b4cd9922480550b02af7727ef17c444f904d35ddf4e504a061788684af"): true, - common.HexToHash("0x2a8bb1164daaaa6de1ef6b66e0196327704b4389f7138fc2e74e0bc680b1a6f8"): true, - common.HexToHash("0x57a339463e23f82a3d89ffbb544c6275d68d3b48e5ab8b5e89d1e63547900875"): true, - common.HexToHash("0x7b3a3635acbdbb3ad3f10ec7d2dc5c25e613616aa7a7e3fe4acc214557c6c6ae"): true, - common.HexToHash("0xca9097a84c429ba2f8c5ac58ef58d884a7aae06c115509d9f0449fdb74dbbbbd"): true, - common.HexToHash("0x0850802a1255789d6c11b87a2303d2f57674a16fb2af3d0a293f2e18669eb664"): true, - common.HexToHash("0x3e39e0c943d6e6588d4c604d0b902df65c62ab6fa2b8d4982808080a739cbc77"): true, - common.HexToHash("0xf40cd696e41b78d11780d77caeb5a8f4483c3fc330d042c453e74d339ad0f57d"): true, - common.HexToHash("0xa2348ab942fc67075dbb807ba2d1fd1d870dc948f5407c275970dbf30fd62121"): true, - common.HexToHash("0xbfa557097edf85763290872f8af2418683badcad6cee9ab62de6597d4a450b99"): true, - common.HexToHash("0x8c15d422e5ae7763d6cd7207d665dd75a4d87b73bbc6726f628211594d362716"): true, - common.HexToHash("0xad2c118af257cd22e15a5501c40fc61a278ee27ff1db01acbf2b56c81a8bc727"): true, - common.HexToHash("0x73b011c142f2969dfb26cd397b425df6b9c86d988bd5c6cb2111965e311d42d0"): true, - common.HexToHash("0x96313ddc6ff237bfd4f144a8801b0543839d03736b631f33d1ffd50a75a50f2c"): true, - common.HexToHash("0xa629e77500df9af71280f054f2169a60368c206ad9685e781dbfc0e3fe18b64f"): true, - common.HexToHash("0x872431e2d163a93abd4513e9acbb2a921c70fe6a9e5cca1921fafa185c50dfad"): true, - common.HexToHash("0x8aac358e4f24fc6ec04bae55d2bd2b297f4d1d755d698d25342c10ba5d87f4ae"): true, - common.HexToHash("0xf66edd792da92d43b13b6be991bae2f65d96bfa3f849eae9708ca50754acd840"): true, - common.HexToHash("0x31896e9a57a6234a63b6132c36199789dfc7138a4f49378192e6e466929b6e44"): true, - common.HexToHash("0x7f75a12ae77a20de456b9ee0a163d20fd87b92a2696141e834ebcbe2ffe4d7e6"): true, - common.HexToHash("0x23cc8be2b6a0cfb3ced6b2937371be727b3230860137ed097ee6218773193180"): true, - common.HexToHash("0x041a955d56650f945c52e3a9b166182d3b420a39784e2ad1c30d3f15de3e8ace"): true, - common.HexToHash("0x6d6d29d534481bb927fbcf9abb9206685a56a28abf10eef410976cfca0b50ea3"): true, - common.HexToHash("0xc546c7a60558058e763910d009cd7d9368c67eb58214b6172c01657e182e4ad9"): true, - common.HexToHash("0x128c30bf6be94389d217145cdac77d717b58931d79e670fe6447957d6e8d1237"): true, - common.HexToHash("0xebca697f7254fa57a0c77bc1a0f2e76857e099327a8798c6371e9a5ffc2eb9cc"): true, - common.HexToHash("0x19654b89756b499f2f9691e0739fa03e6569b6597b068237e2fc1b6855821a99"): true, - common.HexToHash("0x524d32db70a62a6f5e93af4cd6297236ec0bdc5d707128be0c368d7036d4e218"): true, - common.HexToHash("0xe94ac9e371c98e7c7ee9796e0be1da7df46130c5eed0dec19945b68abd23cc6b"): true, - common.HexToHash("0xa86a29954624d608d9423a38e1c645b320da7b122da6bf814579cba254257c46"): true, - common.HexToHash("0xca441e41e32238c21b01c1f1dbe54cadf6b062342b0abb36a2d98e96123c2e33"): true, - common.HexToHash("0x675484b54f02296c13ea8af7e2d7553532f9172e8e5e09823f65b757e4af885d"): true, - common.HexToHash("0x1e73240459a3c4e80e36f867a9f76ae5f770863c495ce6e6b0e79f76131c0c13"): true, - common.HexToHash("0x2e533fa59482cb21ae87b56e25bb002fefe54f1936cc001d8a9b7b29f8214949"): true, - common.HexToHash("0xcde665a44de4723a6f9bb40150dc7ca20d21733fdda9c57d780b94e177806bde"): true, - common.HexToHash("0x822f14526c7c9710376787bb5e5cab0a1cb477280606065729f3c273cd6e1d5b"): true, - common.HexToHash("0x889f071de5c91f031902e64123b74ea6e90f94ee833e3712d709309749d21f18"): true, - common.HexToHash("0x156a33c5b36292751bc34819a12120bf8e5a2d1d34118eeed0e0fce0b374d04e"): true, - common.HexToHash("0x963077489ec72eddf747827e0bb70c8eb9c2a2bd10a310b16ed995b6ea72274d"): true, - common.HexToHash("0x71ecbc48052b2389f7cd686e46fc713362c03a1344f9da2a380980e87a4e1383"): true, - common.HexToHash("0xae3706ebfd839e7d3bc9a4dec1d12342e9921c129a88032eeb6b0084b7664145"): true, - common.HexToHash("0x0b86a364ac9cac32c676146ec12f195cedce8c7c11a804e18b25ff4e5b97cdb9"): true, - common.HexToHash("0xcf14af1c61a53798783ef549dc9d80b59986f49db0e57718bad5aaffe4b0097f"): true, - common.HexToHash("0x09f0dd02af6e6f526884fdfb7c8ecedd87b31e008b638d6e8812b2596e26da53"): true, - common.HexToHash("0xfaf099e86ea0f37b37f857d506c2b779eb3437d8ddde22ab609631ffe4b6b13a"): true, - common.HexToHash("0x4e8a2cc719c47fd6a07bdca3e698b109fa4c9a5b10808a743e715af159c9f321"): true, - common.HexToHash("0xc67aacd0e9aa10545b58affa5b33b304d96d1a21c27a4c45d1867380e051bded"): true, - common.HexToHash("0x722121823bbf56e14104724c40aac6baeb0478d6ba153409eccb4445fafbb532"): true, - common.HexToHash("0x2fdf7a87991b5c47e9f16ef78ee8dab529bf9efef230357e7e346b96e5aa4db4"): true, - common.HexToHash("0x4eb22621835e985655a403f4a0ccc976ff03905505efda707fcdbe0c9892a00e"): true, - common.HexToHash("0x06091c8ab8a6d1030dbd55103334116c927997d6ac4c5fe2d869d5eab5ffb8e7"): true, - common.HexToHash("0x0ae63c594506c847ca2bc4da1633aafc38471bc72f0783e95791a16811ddfb81"): true, - common.HexToHash("0xdab84d00ad691ca10d35c0e1e4b288737c8be2c95e2eeb40c4103534d584d198"): true, - common.HexToHash("0xc8cbd2aeff706fe77fbb9441f9e01e6d5b87b881e04bc85ebf46710c95912dfe"): true, - common.HexToHash("0x98caa7bb29c69df62d94d3d80760948d1d9b44fb64e4e0bcb0d14a0d23d3a2b1"): true, - common.HexToHash("0x1b479d0b195fec9ba2401ae3e22fe9de8fe1cc07f1481c18c9b83de9f18bd237"): true, - common.HexToHash("0xb8648a220fe447c4e0b1c2ac7388cae70cb7c08e0d38b39595931feee86fa738"): true, - common.HexToHash("0xa46ae0986c2e232c32403a9a684ec94133b7c7a29198d2391d6e31754303edf0"): true, - common.HexToHash("0x3192e9b277f707797cb98c1e89e2ef06f3e63429b48218ec969ff64891b89f33"): true, - common.HexToHash("0x6d248399503ff0228ef1dd553dd7e111fafa79f4fd233715b72fa48df1bfd777"): true, - common.HexToHash("0x5b620933c0c83a6276967c7f2bddf4772a7f67d31d97e2925f2c009e6b474894"): true, - common.HexToHash("0xa4465319e24db26d6e35cd8948f85e1953b7a1e7d667ca3509f2976b1c9acff6"): true, - common.HexToHash("0x703caccd574fa5d82f023cef71174a45ca6d8aa1b35f7583787c59adaba8a157"): true, - common.HexToHash("0x042b03d5b64a66204f7190721bf4a23f08614b6e772e0c8f786a6d27f545841b"): true, - common.HexToHash("0xdeea17b41f0cf3d6f8215117a196b54ac8dcd3501081fb3508c0c3e098844ee9"): true, - common.HexToHash("0xbabdcca24e8abb0537a88edf0af7b2157ab733dc79d194e6ad8c7ac2f5050a76"): true, - common.HexToHash("0x29393b0eaa35f01754f7b1b75c299bda23651b08776d97a5deba2cd656ef3525"): true, - common.HexToHash("0x280cfddeefc8bfc3f4de6350017cb2abb467e835115a9c02ca2e0dfed78f1d8a"): true, - common.HexToHash("0x02ac71a9dce50e8639b75e4bf2d9dc701c60edc18e6079f1e09092fdc72bf758"): true, - common.HexToHash("0x87d7eed68c03a9fd5b37625d894cdafec31e5d0429c62ba389a1114b1213b33f"): true, - common.HexToHash("0xd845218a62b331538966289213f15fdf4e6f44812c422c0bf523163b7835c4d4"): true, - common.HexToHash("0xeff26c0d60098ae9dc2b6dd14332219fdd11816560cacd4bb6d5c823048ee7b1"): true, - common.HexToHash("0xd8b8e0e238b5e456b3a5b4f046d5306cba4aa149c858d70cf6877e777e67fe50"): true, - common.HexToHash("0x73ff7849f4cae30759ec926425159d7d66df32356b79e3955ae20cfd27166f20"): true, - common.HexToHash("0x713a5f84a1bab733a7e8eeb9368822776f4ef583fe4a0e292720bf50580f1bf8"): true, - common.HexToHash("0x6db38d61733124bfa6b2003bc81ff16f00548da0a1ffdd46ef95557337ef4364"): true, - common.HexToHash("0x82a7960a463415f0a11e91593620904d901233064c89eb32d05c9997bfd2c3c2"): true, - common.HexToHash("0xbb0708967897c9e6d6cfef187c8a845f5fab0290c0b70eff9b4bedb29f506a78"): true, - common.HexToHash("0x516f4ab1b0ac1adcd30acc83a5589f808af1ea8510f29704ca183b7b3531f583"): true, - common.HexToHash("0xfaabfe52672f6adb3d706bb9cebb0c6000e55e2f43ae90ca1d19955eefdac98d"): true, - common.HexToHash("0x3d73faee86c20571f3c30f35fad59d25bf6e84e4a87cc085f5330466d640422a"): true, - common.HexToHash("0x0c75729f7dc5df557a17c1fbb7cc8a8396f46eb67d995c77d5eadef49d461414"): true, - common.HexToHash("0xdcee7debeb2a5a88bc5cf94aa306b619789314731033b07271f1584929be1f86"): true, - common.HexToHash("0x50519af0b6436d125d525fb5408eb1c0a22965e406e623251963a6d0a89406ff"): true, - common.HexToHash("0xcf989a9042f77c9052510c19cc39d947b662127c07ed4056c403b6de1148b998"): true, - common.HexToHash("0x97b18f532f28aac94d56c023dc790bf1469e32375e661e22e4427045a11688d8"): true, - common.HexToHash("0xd4392a357317a9fe2a2b1e1351317aa0a3585dc5d8e1eac3afd24c653766e006"): true, - common.HexToHash("0x61d2f981fa935a869c9082ad3ec5cad09a757e39226c28fc112045e2f8f8d7e4"): true, - common.HexToHash("0xf8d405be855fec405dca9d527bf41baf3b12a7ae5c0c940f34246dd2d76a1ab7"): true, - common.HexToHash("0xf1cc73911afcdf4c0c4a4b2e8cd0144d8e480a9762192e29417f66ce4ff991f7"): true, - common.HexToHash("0x921069a27cb16fa2ec6ca236fee0614ab8ab2d8e85a14e7525f73d1204275424"): true, - common.HexToHash("0xbd1dade6793523292656aa31afd71afdf205b6b81ede6d512cb5ae62fe089082"): true, - common.HexToHash("0x4f946066b72e4a93c4499683c2e94791d1463bf61d63a51142cb29fb2065daab"): true, - common.HexToHash("0x786e5e4b494499d4b8992de77002509a39f683b28cb589fc055d21400e6d4b13"): true, - common.HexToHash("0x6e292233f50c56dd904bff5c6f8bc3396dfe32510a5b969068710a7cab658649"): true, - common.HexToHash("0x406e13262d9b8d5cd3d5efbd02e01c1957e99abd4fb960cf696ef187af2183ae"): true, - common.HexToHash("0xbbc9d7032a1a19811f94f925ce67635411a112f680a0fbebe9a2b06abdb582d3"): true, - common.HexToHash("0x6524cf96e5dc557b5d354442724ebc23ea61c7ac2720c2f9b25aad245dfe4c94"): true, - common.HexToHash("0x18ec710c1fdb0a54851dbda7dc817e36db59b5b92aa5a571ef89952dd6c6b5da"): true, - common.HexToHash("0x02f1503085137dd387b9cbbbb50ba7a78ff4c53c1a4ebfe78a4d7855012e4ca1"): true, - common.HexToHash("0x3a5d1885cad7052f66e69aa7f41e92f63077b759af72428c00200f477828f3d4"): true, - common.HexToHash("0xad18b1ccc31c17632b977c759e369369601edd4c4111241de481a2a423b1416f"): true, - common.HexToHash("0xe28d829f72da22eff401d536361ef1df2d385c6a7f1bfdccb9402e045d4fabe0"): true, - common.HexToHash("0x768852d1a0a0b0cd9582c879c5cf137a5ba49a21d8ce709409d0be9ba33c6602"): true, - common.HexToHash("0x5a34768f9f1642b60e4884261bf85d4fae0dd139441fbb371f686f87c73d0d55"): true, - common.HexToHash("0x1de6d4a1cb36523be48214ac588498a937cf6f1d7bac125fec4fe6b79b273ba9"): true, - common.HexToHash("0xd19aabfaf14cb0c92d01e80698ac3bab3ca832b7bcfc2ea44130da422a9a6522"): true, - common.HexToHash("0xc2c305bce1a88b47d233cfa3f67a4704ed2aa0cb3eccb6c7c3765d1762cb4baa"): true, - common.HexToHash("0x907b680a61a4d46ebf0b20597b8415de0135fd9ee3bc5780b9fc6ca4bce6839f"): true, - common.HexToHash("0x634ae21fa92f322f3833fc2a656377b144937f572948faa0ea94ec59ddb555c6"): true, - common.HexToHash("0x6b319aec254c6314c93612410fbd8b3e5ea1a6b193ef372435631faf6486e4ad"): true, - common.HexToHash("0xe32e25521b56707a62e388a18fb04021c5bec34dff4f3db40169954e76dbdef1"): true, - common.HexToHash("0x7021a73a1389a2e4b3a7875bb8d49a95312a1cb22d7c1615c615ee8db4266ea1"): true, - common.HexToHash("0xe665294d812c0b8ef77e5e465606b79b25f5206b21796e35a4c4c6fa9b81a766"): true, - common.HexToHash("0xbdba5da145d6e1d927f925089b9c646a2798023fd75af14f0ad6580dfa3b2b6c"): true, - common.HexToHash("0xb515afcd2752b99bc667f647384cdb43f8a2db63fbaae0c62d021466a3f2fbec"): true, - common.HexToHash("0xc700fd153de986dd56ad0bc5c382c1935249f3a22bb7f96a43cdd31af361cfe0"): true, - common.HexToHash("0x4168a0e12b8a8ff19c95a30f3a2c6630c352bc11860588f7a476d92136bf3ecb"): true, - common.HexToHash("0xc97619fb04ee2fc53530e72df24c8ea2664eb36c8fe8bbcbf8b96771d596d29c"): true, - common.HexToHash("0x156a39769d281c42f0d803e536f32bdd482da6cd251a5f829feb8d65a3a20ecd"): true, - common.HexToHash("0x811b37fa1c2ecb3a6964e4ad88d149a662d1f18ffcddca704989356c8b413a02"): true, - common.HexToHash("0x784a83ea88d3c1177b9f1657a2fdbf4c30f4ae0167cd22f524c7faae6d394ffa"): true, - common.HexToHash("0xcd2a03224f4c4670fdcd4274a6f59657a84fd0472c454ba82df920c68dae9265"): true, - common.HexToHash("0x893feeff55fbf9ef8da9f415c1cfe7891f7e882877ad98fd8e32b1ccf9939e5e"): true, - common.HexToHash("0x79f9c80d4859bfa0a9d52a4aade77f695576163026d2ef5bdb150e7cd0ccb888"): true, - common.HexToHash("0xf1eb1f711d8ad99801dd463906f42739cb4728bfea73c13e65b0dc36d4c149e3"): true, - common.HexToHash("0xd5099a26aa58f6a4703c36b9ba487c249851119fb820be0d778f1da6e42dca84"): true, - common.HexToHash("0x2c2cf4f3671531f5ada25d3945b694d2ca369b0be8b9f7c52f8a589e35d5d81e"): true, - common.HexToHash("0x725ba293a1c23725838c1340e1eba2acbdcdae0a03b432234612899958c2fcc6"): true, - common.HexToHash("0x9dfc13f52bbd6a1f0ae6fea0b859f2fcee4727eeedb9fc5df1d5c9e821154aef"): true, - common.HexToHash("0x1a1d2b25641a43b710024aea761c635dcfad6e961edc54b4b71de9d7d8759b1f"): true, - common.HexToHash("0x0bd4369dac27c2dadbded2b03793d1e6f1201139cd355509c40a76b13212a321"): true, - common.HexToHash("0x7e8d09f03f2c67f6c6a57e9790cebb3f0dbf0e0ba33c61f7d120d068ba202c83"): true, - common.HexToHash("0x7dfd4fc6f6c8626090c6d35eb3edb741897a2814c085493a634ccf47c6b6ca60"): true, - common.HexToHash("0xb9f0a5afab78741d4db7c165a5d469bc1ce287917e8ab1f7e83a71b595074f1e"): true, - common.HexToHash("0x0304f81e14337421061384fa2634489099b745b443e947fedcae80ce0e877a9c"): true, - common.HexToHash("0x98b48e25db87d1e906e56505c60d6290ea37bcca41c4241ff342eb415d755814"): true, - common.HexToHash("0x8997798347ffa5c750a067133e9e4b76ffe6dd227f5ca33f4018527bc833c158"): true, - common.HexToHash("0x45f2698e37f93d287fadc2e3c5c13272a4f41276cd7b6ae3028c902e69c8dffb"): true, - common.HexToHash("0x44ec8a510162c727775bea1a54b2dbc5da4be9aa5ab448cc9b8531b6c5cd0b24"): true, - common.HexToHash("0x22a943e157c07a5084f13ef5a0db3709be0275e652947f8329f517fb21ab58f7"): true, - common.HexToHash("0x4cb4d847519f80ff5e2a567cabb5add300f95c2bcb6c614ff96cd038a6e7a6ad"): true, - common.HexToHash("0x312e0cf86bed4e032b3076e7d17633792015647c6116197a2ddba0381f0f3173"): true, - common.HexToHash("0xa7256f63b482a7c24bf7dc11040c88d9031e5ab4205c533d0587455dfecd3e0d"): true, - common.HexToHash("0x5adc6f351c9515ef5bf998dbbaf6d47598d5846eb322f1b2787904ae52f3f04a"): true, - common.HexToHash("0x1570af73341dd8d608d05e1fca3536844a0d4fa49fe3f9c1840e4d28c1ceee70"): true, - common.HexToHash("0xf1ca88e3a74e4aa6aec358b06c86cc8d36f1cabd8d3714da3b90183d8b7d62a8"): true, - common.HexToHash("0x84db4c62082867014a58920b42e48836ccfff9674d0315e935c12a13d9a19241"): true, - common.HexToHash("0x3b6c900e696f09afd0e85fbe4316782a8bf23ed4e2e6a1169b256c27a333b126"): true, - common.HexToHash("0x62795933d1005c63c96fbcf3c2f33838dee4261f9504fbc2ca47efbc1aec23f8"): true, - common.HexToHash("0x49dc7e614c39e6805b49195760ec08dc83a4f3907db289bf936d76284b57c4f8"): true, - common.HexToHash("0xdab8127bc7bde0af7214a57e63bde8ef388ac143f63f4e7116614833b75d7a35"): true, - common.HexToHash("0x338c586f1734fa269bb41911767abf70d160b00864248a08b32ee975570dcc33"): true, - common.HexToHash("0xd4ddf71f8ba5558fb7946eebb7520b4ed0f22fa2db540003d2260e183242c969"): true, - common.HexToHash("0x4d2db5eea9839a2b5d4ae752cb7432b97cbda3457d4bc3fcd96d3965f118e7d8"): true, - common.HexToHash("0xbe1fe5722a34cf32086fd62a45e466634bf5ce677d892b9b0e10e85e6b1230d7"): true, - common.HexToHash("0xee1101a789096a2f35092606ec9a73538512217ad5ac22055899b1a7be1c07d7"): true, - common.HexToHash("0xe27b44efb96d2e0bd640d8116e7be3cbf2b9256ca571546d5f68d50b8bbad8aa"): true, - common.HexToHash("0xfc8ea507980851a078ec1fd69789582f21804efa71623029fd8f548a8eaebc6c"): true, - common.HexToHash("0x9d383384a15816af40665d5b4ad8d750d9606aaee9b706d79aa9b998d564372a"): true, - common.HexToHash("0xb5f35871d85312834ce5008af176e53b0ba692a6c1d459005fe929f78ca95ddc"): true, - common.HexToHash("0xda6b6e187f96386cd04cc15bb2bf0c140a220775d92408f755c0f8a9b8de38ae"): true, - common.HexToHash("0xc05a68fbb9db8f9d4d56849bf159b694fe145ee3f52ffbc05aa119b7b90270a9"): true, - common.HexToHash("0xe5b2572916cf241adafe8965d380528417bb401fdf2387b2ea1682498e715329"): true, - common.HexToHash("0x2a487ca7563800e1c74f7a379d868ec8c48dcf3a949e7cab553f73efc650a94d"): true, - common.HexToHash("0x319234735d50a10511c55ea8cfbacd38b4d49108b3683126a48e1cd67b384c27"): true, - common.HexToHash("0x41bf535fdbf088ef4375917be8d1f4a43768c259114d3ef0e62a07ce7cb67124"): true, - common.HexToHash("0x158d6bf11a53c797d0fc3badaa316faa406acfc86f272cae20a2a549270e5e25"): true, - common.HexToHash("0x0f3b938cc6f186c34fcf9e289638d533766e5a6f141841dfebdeff1fb7010537"): true, - common.HexToHash("0xf6da0a8e47703617122044a016d3c67d1e3aed4ffab00352040cf885dfd37703"): true, - common.HexToHash("0xecb54e404a5df6f0de5fd4b5b3d61a83f316dbd89f83fa38128a5aba61524289"): true, - common.HexToHash("0x5831cccd4729b6779f51e494e840b733d277aa0f387ebc3d84fa94856a7b88c1"): true, - common.HexToHash("0x5e72786a28bf3c4cbb2b54be879d106c6dd6ebb082305b32f754a4d2d847c07b"): true, - common.HexToHash("0x3ce0b803c5e928e93bab2bd926e1be8b3b402d0999e793fa53308e999befb66a"): true, - common.HexToHash("0xc27bed6e8836a54906aa4128beb477bc646611632677f86555215c8fb2c2ff0a"): true, - common.HexToHash("0xd6138363a22edd7a2da5f2844c856dbb93698f47345657e4beb66a3710884644"): true, - common.HexToHash("0x77c9e4ca5566ba474d8e2b7d1cb4d1949a63824f9fa5da839e5cafdaa1cc126a"): true, - common.HexToHash("0x10dbfb4c94e333cd82e60b0b7e8837f19054dc40dfb5d77eae0427782f50d0fe"): true, - common.HexToHash("0xa4380d5c3f552f3ee1edf88fd768c7f53e97c82f172d124cadd8d37f2eff227d"): true, - common.HexToHash("0x66a9d2a68d4765db2b36c7ed9b93e106918d822840998233261ba5c28c053c9c"): true, - common.HexToHash("0x09d2577034486ba0baa3f0c80d28760ee743b015cb93f380b9269ac28a5070fa"): true, - common.HexToHash("0xf73e10d75a9aa9d91e741346180644e12600a0752d14502c8764b7e5e3f2662c"): true, - common.HexToHash("0xfc7fb2661f7af334989e999ba872b3ea17b0807e24fc9a6492a3e03854be997e"): true, - common.HexToHash("0x5e9a8919b3bb45421503942f306cda7f3a43e94a9c4565dab1c239172e5edfd9"): true, - common.HexToHash("0x27f8e08a1ec99e3b2de414b0d3c165c01402c4359e59b21c3f2d7d8f0c07941e"): true, - common.HexToHash("0x89ffb5fa5daba4d11cf53c0f65a9f0d95d87250913a2cb159c2cb0e09688bd3a"): true, - common.HexToHash("0x8eb8689423748853442a494a4544f0f1300c54e41669e037814f0b151c921035"): true, - common.HexToHash("0xc783f50936a1f8299b75ab3a21faeac2552298b7d707d9ee1045402ffd28702b"): true, - common.HexToHash("0x555f6c72dcffa24be8c2be35c0c10a01227fbc50cf89cd768a1b8d09b98e2a0c"): true, - common.HexToHash("0x41e91328043b4f0ce7bcbfb85299f605c95973c60aba4881f51560d584a9edc5"): true, - common.HexToHash("0x919c38aa69e35ed214f3cddb800891e37d23e827609fc50be3724e75ad7e8d7e"): true, - common.HexToHash("0x06635b03949f669aea0abdf9d47a21e9824130017de76c4209a63fd8a07c43d3"): true, - common.HexToHash("0x8e7e671cf034b1e611d6295f25c042ae0c132c483be5eee449153e5653830179"): true, - common.HexToHash("0x4de231cf6a9d4165049e86244c40423fe5cbdd38e3c3e729804f7a03f868b3f0"): true, - common.HexToHash("0x05763b197d9659d406575ca96b1ec87c07d641eddff17647fc5ab55a8fef3a4c"): true, - common.HexToHash("0xa70b65066c97ed87f409c81df2ffd01b16a698a15490218dd9bd954fdab7286d"): true, - common.HexToHash("0xfc975300d4f2a52c5397f9f16b2bb3b072654801a0d33450c70690a002fda04f"): true, - common.HexToHash("0x489abcc25bcd85b3581bce078970b67ba68359a9f8b619d190c8f5827f778486"): true, - common.HexToHash("0x05d791e89991634e64eaeb676208ea35f9a73e65823d25e6ec8d2f7ab8709806"): true, - common.HexToHash("0xfdae37e4661f1e3ddca369fd5e38805e986abea591e304dd67e8f9af620aeb52"): true, - common.HexToHash("0x57ef4dd8f4b6cbaeb89824b56a4ddb4bd5ab56ad8bf2ee4d8ae09389c68c762e"): true, - common.HexToHash("0xeb71dbbcdbf257d75e3155069a18d72873c0bf0dc0c2bf10574f20341e6a3717"): true, - common.HexToHash("0x51f61c9ad3358aef07ad726ef90accd997044232dbfe246d8adec33b3be0d6d6"): true, - common.HexToHash("0x4cc562819110912e18b559edc6d28b9ef2e002203d5cf47cd45dd8a53de45d00"): true, - common.HexToHash("0x6680a219a93e20f0998782eba7b531b9111abd6c00eaed3d3da27d464f9d4279"): true, - common.HexToHash("0xb568e8db1e2d72c12729d6ce3a55ea9bcb42118e1eaddcd634eaa47d53e24f95"): true, - common.HexToHash("0xdb02d39d5a6eab5a5fbc076070738311ffd0f31590ac2565aaa269a6d052119c"): true, - common.HexToHash("0x74939f564978bbe4d175ef0bb4e075e0b6c463c0ca046ccaa68b901a237a6948"): true, - common.HexToHash("0x82d4f69e57d78f619fa9ed6f03d164ecba88ab4071a0d900f04a757d1b4541cd"): true, - common.HexToHash("0xa30ba1c1f3096a6f118e8ce4ae494b4c9a2013da85818a6d38f313e77a1d9fc8"): true, - common.HexToHash("0x965329c9c9ff2c28fbf8db97a56acc0fb3f3a44978d1f746dce7c127ffe1331b"): true, - common.HexToHash("0x2f182594e12e078ff44df98483f43122894d82918628f29ac1209d351353a7ee"): true, - common.HexToHash("0x37b2062e016aa0878bd502550dfad93dfc57b00f1e8550783d03dbeaafe3aecd"): true, - common.HexToHash("0x4ed865211711dc0b4d7884059046be1fb3d87c703694067edb71d029314b043d"): true, - common.HexToHash("0x41d320f76ed724c9fac0d1810f478d88fd845d4b02f0d22a97dfad6b64fc4f69"): true, - common.HexToHash("0x3af24e057da6d4b3c8df04aec2957d7d8868871b0c88d8c36b76852d00c2f02c"): true, - common.HexToHash("0x8acbaef3ef7204f2c707d3133bb3c5fd5e1d188e8b0fa665d63256fdd6119b2b"): true, - common.HexToHash("0xc998faa19fd049985f3ea8f837563f9ec20b07f25af42a026809a2c778d96599"): true, - common.HexToHash("0xaca52811b29d00683bd2d06faae3e984456ef452e18b964e2e1168c2647f5e9f"): true, - common.HexToHash("0x357f39f083f40828d315359165e88f674f82cab0ae7b821f5a52e1f63987168e"): true, - common.HexToHash("0x3677b73fbd038a61efba68aed01a9fdb2eaf17aba697e0d9aaab26440b8565fc"): true, - common.HexToHash("0x07a012a6ef48db600305bb14b0480c462dcf91530c55835e050ca01fe7c4e194"): true, - common.HexToHash("0x00a787cba3a25d06f3b0f562895e5ca8c6fc3dec15a613f450a54800ef3995cf"): true, - common.HexToHash("0x86eed7bd085b9163a97c017a6e1b1e9398a9dc7a421b1fa3682a406ed7d3d007"): true, - common.HexToHash("0x85327357ecf0bddcc3dfb81e1b20fecb8f989441a1b35facb0419dc00179f817"): true, - common.HexToHash("0xba4266ae1bc464d19a59559507400ae09ccdc9bd425d80f89e55e6e62a15e696"): true, - common.HexToHash("0xb6bfbab3a03775823c778e02f2516e004059bca485fedae580b15315855238ee"): true, - common.HexToHash("0x4385f31f2f423b3c28de244042fcc973450e956d291cda225cfb49fd42b6a01d"): true, - common.HexToHash("0x383d2b718b5d5a8ce9f02982180d0ce33d73d71662747afadd3d87719e0a97ff"): true, - common.HexToHash("0xd86834f5631db0df6eacee15e6084be55e5c3cd328f5e29fdc66c72c8700b70f"): true, - common.HexToHash("0x619f6735cbe0727a34b7de2ca178441a0a671db7ab922faf3e654c52aed399d5"): true, - common.HexToHash("0xa8187048afbaec376a9a4c50237349d9e80066db35293dbbd1bf6c5221ec0995"): true, - common.HexToHash("0x38c5586e2ca1bae44c185a709f335ccb93db7717dcc9a2cb73520a00ec16a7d0"): true, - common.HexToHash("0x38aeff39def9101f42230b283f890b129b2cd24c24bf59f7626d55e34e3b0416"): true, - common.HexToHash("0x90601f42d76804c5826ed4d3d55793695c727151fa774bd0746b8e975ad3be65"): true, - common.HexToHash("0x101174a9a6c6a8fc36f5c42415a15f85a762f1a737ed41fad7b22c0dc8d5ad40"): true, - common.HexToHash("0xf5db6be27d1e92ba0cec3a9f1a7eeea0dd35b0624623ef6fc803cfad48c24924"): true, - common.HexToHash("0x1eea70dc801eb62780d82da84ff3d8900a218c936c347f88f784359133fe8c42"): true, - common.HexToHash("0x25ecb0285b5a64772a5fcfe8bd9a082fad6d220820a938802074d44b766bea64"): true, - common.HexToHash("0x49d9c1f5775c0f8f64e9dd9ce3c5e16f014ee653d8477de91b1f4f7962e45888"): true, - common.HexToHash("0xee0b0176edd39b9f3d7d831bfb457d4bdcf207b5fd4e9b72d02d5a1409221f2a"): true, - common.HexToHash("0x6ae4e9e03252033e12ea1acdf456b1881ec5985807c391c9dcee74ea57e10aaf"): true, - common.HexToHash("0xb08a0be4db6cce4199ec36a5d02a5895ef0936eb155b718aaef3e3570dee6cb8"): true, - common.HexToHash("0x73fd661e7a8ca075259d5fb0105d051aef015f419178d0f31ba50d396892d815"): true, - common.HexToHash("0x6f0474cf5c074717e08d70c5e0386688ef2fcc697c5002923cfb6d6c5f391601"): true, - common.HexToHash("0xd7d68bc37c5f4bab9f8efdff81d39e8a16d83d91efaace66e6bfec6aab5bd95c"): true, - common.HexToHash("0xc61b5bf555528b5aced413bdf17ff9b122bd681e619c49052efdc81106131f91"): true, - common.HexToHash("0xf5ef310f117c215225c93081388f5b7b8382949f36437effc7d6a2cb251f8005"): true, - common.HexToHash("0xcb988e61b26edc7b9582c8277a2004f39eaca7dfee5e132f96ea1436b95c15b8"): true, - common.HexToHash("0xbe3203f8d167588ac4851dba4e54780a06b26127d4b46107be0073f38cf2906a"): true, - common.HexToHash("0x06145d9f5d30dfca0e02ed20fb5206c161c4e57550c0c026d509c9786c4f57bf"): true, - common.HexToHash("0x7ba6c475a5a3018889649fe2b6fd387d91885c3ffca5e11e62a1308952b08ebe"): true, - common.HexToHash("0x3ca7fc61238fa6d6439781f77276e2ab7ab7102d3fbcbe408734075e93f27f80"): true, - common.HexToHash("0xdbca617b23c91c4598c26034a06f72c2b73c30c22d2f1aca0ab488e72f6d9d54"): true, - common.HexToHash("0x0d9d5669b6bb06ae49e44166ce4b69498eacf1137dab6adc7a7dd3a650e11bb9"): true, - common.HexToHash("0xf5ce5202532b63ebd17b997b1bcd357376922463a002d09b236d3a18ea48e259"): true, - common.HexToHash("0x3cfacdd0a788f03713bd58a3ce876c5e6db3c84bf1b5205fe17223239923832f"): true, - common.HexToHash("0x8a5e7659d10fc2a59c06a5010bf41947bc3c8e34c65a40ab1a82bc0d5abf09f9"): true, - common.HexToHash("0x081fe4697b8cc3f616c5b70e82f2c67a3ac4f70cea5e1ec1c2baf22a4103a215"): true, - common.HexToHash("0x6385eb5f3d3a84e89d57150a42f47d26d0b3e6bde0bbdf79e373f0ed9d06b564"): true, - common.HexToHash("0xed348dbd99d42e57ed9b051172fd07eb6d7f9bc13432d9f34aa2c190b460c23a"): true, - common.HexToHash("0x27056d17be2230f114c54cff9b6c0e0ffbaa5f3b60887732c8201cace145d4a1"): true, - common.HexToHash("0x14d7ad63d53f62a1356f77b8ff2ff3b60122d8bed46f0726f7e2d3956bb9748e"): true, - common.HexToHash("0x3de1bdae2ec41ca4beb5cc6403d08e23197228fe155538a0ff49a0ee67c60d5d"): true, - common.HexToHash("0x1b75f133ccb808d0ac6ca9f8c13fc36c4797f4516f7661b9cabd16455b6f4b2f"): true, - common.HexToHash("0x6f68e93539aa52d761cc17d38f254a70668f3dd592d33b22cb0a453bd58129ab"): true, - common.HexToHash("0x94133db621e446636b88d8cfe4b3d5b32e674eb73bdb367f508ec1fa3d9a0641"): true, - common.HexToHash("0x975b18da0085073a966f1eaa5871d9717a85d4317c545bf547092277441a44f3"): true, - common.HexToHash("0x2f753478d5efa8f9adbacaa12aa8095fe9bf05945eac358922e2f874c170cb13"): true, - common.HexToHash("0x6f2867ded768b51b8f571fbe8efc11a9a5f24014e7e78a3f33fcaa590676e623"): true, - common.HexToHash("0x7a769e31d64a05d38ddeea364dbed70fb1e78d7e46c0b8695b63e1a9c8433cf6"): true, - common.HexToHash("0x9f959d5925c363d07ecc8e25ee396447624d3a0d5e1d8c08efffff72021962ff"): true, - common.HexToHash("0xbf61566b2258772d2536b6f6b9aed6036a59ade97eb52a3e44314566086fb824"): true, - common.HexToHash("0x9f62513d3889d95aba00085bd8f22db6a38106307c2b232ffe7e0272ca25dc7e"): true, - common.HexToHash("0x85f7adca9e0372399cf67cfff088012999790133d1d3f66081fd4bca85fd2d13"): true, - common.HexToHash("0xedc8a14bbdcb5d412856bd3c5c1ac76691e57c3190674d04451d6e12a1eabd69"): true, - common.HexToHash("0x68d207b7021aa8e1d3b488c4caaa33b7b1a29603216b29b158b3d58c0941de3c"): true, - common.HexToHash("0x87b1549365f56299ae5321b7ce469d788c65cbd51599720b0576d7fa5cb716b0"): true, - common.HexToHash("0x2b1cde010d1336c2a6884a823f5c1e33f326e2c499a75ac50b6f3d1f9929d7b3"): true, - common.HexToHash("0x9757531e576a8a784ab9e820ea7e928b0b11a7adb97b161f2e993874029e9663"): true, - common.HexToHash("0x8eedefa05b954da090c02fb515e5b07a429e3d3e97cd3472be582e66bb4a1acd"): true, - common.HexToHash("0x30a6033e53557c093886b521e5e4508f2835752ba1f694123f3855eeb2531bbc"): true, - common.HexToHash("0x95e4b7ef42ad25c5f23362e657afcec135f89ab93c993df054e62fff41e48d55"): true, - common.HexToHash("0xe303c0173512252dc2004e9a6a5f9cb5f59bb5855e89ca64769df18ec4f63089"): true, - common.HexToHash("0xac42b19bf8913600f5df5c95363ae2487049d390c95ea91aa1d09609de45b384"): true, - common.HexToHash("0xb3571027c253d182e45353ca6c7519e9b9a72225d3f64c81f77d5530fc966735"): true, - common.HexToHash("0x0a6a0e2536fe33510cc1446907fb7b9d425735ad1f99a044e5d3aa6c60bede38"): true, - common.HexToHash("0xa662812bfbe4d7ca89e235f58e1f145b7eaecff75f21092530c62a4a81832272"): true, - common.HexToHash("0xf613a5babfef7a176b4d355993e8a787aa0666182dd823241429a70fd9fa272b"): true, - common.HexToHash("0xdbbaf3a995fbccc7586a471a9e540669d737603fd67670295183368e88832c4b"): true, - common.HexToHash("0x9a5ddc3f60739b36b6c13a5714fa3f68539b839bdef4512f70320b99c4309f44"): true, - common.HexToHash("0x9d78342d8dee0b16a5628005bbed9554a04f5f9447b6e04a013ef99d8aaf0dc2"): true, - common.HexToHash("0x66c2b08527c2bf88db8beb14f45a6ab5ed9060dd169bce41ca715bcbf0869d75"): true, - common.HexToHash("0x846344d861497907c2458384f9c8f130290e858582f144557991428dfec44331"): true, - common.HexToHash("0x2a0f2960eede6ffc5b334ebe463035c18cf017488390fae0c657c3f858fd786e"): true, - common.HexToHash("0x9e486ea81f54b8a46ddb00c2a79b147d453c95ed1265047ce32dd0975087a7e3"): true, - common.HexToHash("0x46271634821b7f512d12268c7b472487bee0d7f655bafacd2f438e4994ee0ad3"): true, - common.HexToHash("0xda8e2e5d4e8eafe9d5ebbedf5176fd1ba99ce3d110a83f38dd995196d43d1f86"): true, - common.HexToHash("0x9172aa92b0381ffc1737e5eda6785bd123951f1680c474b9a78080ca745a7137"): true, - common.HexToHash("0x65e8e0f69a6b381e6885141f06f755edaaf773ad5947b9b93035217b68f02ace"): true, - common.HexToHash("0xa7b4389cf5787ef08b724bce2e46d85b2ffef3c87516563b322636543edf05c6"): true, - common.HexToHash("0x42dc633900c73c2c499e1b6b78271ab372a3da1363a22c3ebc9e05b38f548c3e"): true, - common.HexToHash("0xbaa12dd76660652a5669a0d5466cb94c398af26321887e227d89fa54b7ca6ed2"): true, - common.HexToHash("0x60157b57e0feff662220c1ce21e4c3d9505d152cff36f07a9a64b34ae23db7f7"): true, - common.HexToHash("0x6572ddf085e774bf538f2f96802956d4201abbe4b5ed1bfee1dbc02d8f248361"): true, - common.HexToHash("0x2a65c0b40bcc92f34dd632be6e84175836792c0eae9c515971ce6cddf53447f8"): true, - common.HexToHash("0x158d09a0682da518fd88ff2e7d0a04f43062dfadeb2cacb68a0c66c86f541688"): true, - common.HexToHash("0x858cfb5ecc87aa8f7bd6622bfb8deeb1d97743f1bb9f4fd7728e756a10d473f2"): true, - common.HexToHash("0x7db87cf8ef1e6219be17fce895ec033150cc140371cec47fb47c2f6b23aec20f"): true, - common.HexToHash("0xa0a700e84fc596adc5ed4315391ce943170c6c12d2a1a4c822067a067e3828ae"): true, - common.HexToHash("0xb73da0413468e394e1f0bcc36f81031faf5a8b664fa6a7d3bbb77e55b0e94c23"): true, - common.HexToHash("0x8a3fdb8c0ba0a4a3f3307fb379aa55a57aaa45ae0ec6201f8e0058a13eb819ce"): true, - common.HexToHash("0x500e44ce79e78452c4509bc481e5e64968f6fdfc9b2c389cb1f76c13dd38b921"): true, - common.HexToHash("0xf2a3796c09a2b82cc370fa5b3f866725ef9e72b02fd278c44ba82a961fb1b5f3"): true, - common.HexToHash("0x315a2873d67f8166382e8abaa83c3329c89db0e7d8ae27af570ebb73a53b92a0"): true, - common.HexToHash("0x12ef64a2f5c2a6afec910eaee75c0d4c5a482fe9d1d28043c4d921ab9b2de390"): true, - common.HexToHash("0x87c8693501364c646e492d910dc9c7e6a4fe8310bfd9ab8b54a0fe0a7010bacf"): true, - common.HexToHash("0x0dd2ed8391466ef61db84dcd8a466181461a4db1806cbb667207b252eaae8b9d"): true, - common.HexToHash("0x4640f454b0cc84bc79559e409da0ab927db26c704c708a5095b692b5f8caa1cd"): true, - common.HexToHash("0x459a6afd5867cb72a704a5aa31784685cd06f41dbfed0ed154e9c57aab3291da"): true, - common.HexToHash("0xf5b4b03d684b502529973839b912cd890d36ad405d7ee1ea20a9539d9a1c2679"): true, - common.HexToHash("0x2d00fde3120e8c273d25ad2c770a8f51c4f61776aa2c06329b3ccf67f2c82db8"): true, - common.HexToHash("0x885d9a51170b4a51e2e3495cd285fb66f3ac5e5fb8fe12c26e64a4b38a4b0d70"): true, - common.HexToHash("0x17c0be05c5b1159fd2f54366e71de6be4b740a10441ed94eb2ae7ecc873bf087"): true, - common.HexToHash("0x3fd969c9ac44d7ea32d16a54359563eaa42dabf5faba9961fa00ecca16626ec6"): true, - common.HexToHash("0xc0043a987388e69e8b7cf617c98cae77be448e51b4998332a83dd86ab1af282d"): true, - common.HexToHash("0x16b03f2e073fc12f16ddb7aa3bb0c2a3258aa04807875381edd19ba0733f5027"): true, - common.HexToHash("0x4912fd6c6d0ba5b81b266b27cb819281d3c6eea2c8f0cac09dde67befa3e1379"): true, - common.HexToHash("0xbd83d691729b086b185bd75760477789f2eb9806a9b8b6ccc50c8b20d97ce269"): true, - common.HexToHash("0x81f74d0915f2d186ae51ad307829fe79dc3199d4131f6ce5c59c3c4b12bb81d8"): true, - common.HexToHash("0x93adbef57c024b1341d23eda5e8eb2535114fec7a2bedf4fbd231250258695f3"): true, - common.HexToHash("0x23053a33aa3385bf59a99d3558cc3e671b2041b723091719a22163acb0599a25"): true, - common.HexToHash("0xf68e88aab3bb67e24d0d17388bac49c9d6cbb6867a8054cb881e5050ed707b2d"): true, - common.HexToHash("0xbf1840bec044af22e64cb61a50b4042690574357f7258e55e850a6c555e24755"): true, - common.HexToHash("0x449a22fa516a322f0df4d0ce1db8b16d25d8285fb763b9aaa82755715901ac4a"): true, - common.HexToHash("0xc6c2091b79f1b60b30ecd89799c98c9dbc0ed1fd686275729a1259ff82a836ac"): true, - common.HexToHash("0xe0f3ca4697ed441b8c2e05b0587711b5d929684df5ab1ae8147ff97e31c15b3f"): true, - common.HexToHash("0xdfac656be12fd56678bc01168e4e49a1694839f7f1490f28971a89d7cbbac56e"): true, - common.HexToHash("0x55d58f4adeba864fe19482260b8ff20bc31c9874b7c90f28652d88a65bca7db9"): true, - common.HexToHash("0xa35bdfcaf34d24563fd81ebdd7ab199433f45a8abd5a3fc824a29c9c7cffc49b"): true, - common.HexToHash("0x9d713c84940ec201711ac0f2d77edef6009547da82ecd95154e0cb6549b7c34e"): true, - common.HexToHash("0xbc01906d4962195a5587977edf1313acd7891967c37ee3e75d2ebb2fcbffe332"): true, - common.HexToHash("0x9c1dea6cd0cf2fccdb58bd6abb57b4e39194091ddf7ca51423bc7a73a6015a6e"): true, - common.HexToHash("0xda0d680bbdb36e097072cc301f6ed4da88e5a98d822e09d0394e4df3d1ed02d9"): true, - common.HexToHash("0xa504ecffa2f2c84a57b69ba839282e73e8a40165cec54aca9e498fb21a3e9acf"): true, - common.HexToHash("0xd594b77de7290f66385905957982857ceba29e615501ab59b28c35690b869976"): true, - common.HexToHash("0xca3de49cf1a50b562b700091fbb26baaf8051e7c39ddfa38a9783483e835c065"): true, - common.HexToHash("0x2fface469782c21e4513a55928ac600bf1cc33537f250ed1618f58911193aa6f"): true, - common.HexToHash("0x763769fd2842895dcf9ad496602e855140c827f0e96afc7e25113e365b777950"): true, - common.HexToHash("0x184f2040b02293ded69b9667cef4d0a50574d9983510d7cf9e5837a803e934ec"): true, - common.HexToHash("0x435e5bc828727f42884cdc1b55fa9e3c7e0a502414a1003ce3bbcf46e1eb9e52"): true, - common.HexToHash("0x0259f48e2a21d4acabed543421e283ba0d06c62beac2f3bb13da892e338e8585"): true, - common.HexToHash("0x7dd46812b9500e3e841f642b90f677dd0f1e7595474356a7c48dcfe91650cd89"): true, - common.HexToHash("0x691a8c7d5dc80e889a33ccba5a3eb0ce3a3bd4548fd7367f3acb5c4de7646097"): true, - common.HexToHash("0x9b0703ab75ed8d165219a56349902d4938661c2ac714588fae6ee651681223fc"): true, - common.HexToHash("0x802b59179b7f16bbb7a90bb22987f4a15c26487c21f9dc26b65d43c8e84d14e1"): true, - common.HexToHash("0x074e7feee8bc521646c196db2634ce5d0c1597cb9daeb99309bf2cc6151635f3"): true, - common.HexToHash("0x240c95bb4f62619b0fd09dc652090284b104054040ce8028e0b83273bcce1af0"): true, - common.HexToHash("0x70461996116b36bd0bf6e75859d6ff47a4a4a42a618636264e119b08de41484d"): true, - common.HexToHash("0xaf245b6b5eb6c0ab921e3681c9817b0d10de009552b4ddf31bfe72ca51bc8eb2"): true, - common.HexToHash("0x8af3b4b6fcc805d9146cb9b9b6cdd042514d434f84625ef4af8f50948fcdd157"): true, - common.HexToHash("0x219c28a212788f0b406162636ca7f75f5744f7e58272673182cd6fa432f30b32"): true, - common.HexToHash("0x4e8098eadd5bd003e80484d9b643a2f995eee0a8388df56ffa8be74bedf750d7"): true, - common.HexToHash("0x9763796cf20c82fcab58672709d9b62ed07baaedd0dcd68e0f5154955d9458fb"): true, - common.HexToHash("0x59affb49eeb1658e0f3149a15efcdc2e76764c5bb4b253bac0a40aabb63c220e"): true, - common.HexToHash("0xf2c658cb8fb90de56644e29a118fb4386174b2262bd7aa2d75f1d52413fce8ac"): true, - common.HexToHash("0x29cd7d58ea07d7f189d5a57b71c7253893490cc3eefb72afb50c1dcf66819fcc"): true, - common.HexToHash("0x206d179939ecd2dc57b290d848dad5d1ca92daebac0f949637398fd9c9ddbb86"): true, - common.HexToHash("0xa8f599324bae28a344ad9d5ac5f7b80ca155c0576700346f93678884a9f9b0b3"): true, - common.HexToHash("0xdfb43004a2cb02d6ab3494e1e18f8355acd48a54e2cf00a47837d34f24b3956e"): true, - common.HexToHash("0xa75e9fdabf6b98823e0baefbf8d5cba83830461b547cf5cfae8e8860d1f49db2"): true, - common.HexToHash("0x992d775a6be1b17cb6a199edbc782deab931797d84482a5ea4b15c8d7e386545"): true, - common.HexToHash("0xaf6ea5ff7b49ec03a8cd9c48eab500e21bf97887b2253ea4abc8c169d653c4aa"): true, - common.HexToHash("0x022a973e1f524f90e75adb3717ef0f0e250332501dd3262379f2b883c1ebec54"): true, - common.HexToHash("0x725400986d50e7eb1847f36bdebc33d703c7e2fa229452bbaf7936991b0c27ec"): true, - common.HexToHash("0xe342737429b1af731e4e9b11a12b5ed9867ae7a8c577cc75c60a4cd1ff40dbf7"): true, - common.HexToHash("0x9fabe27619036a87d7087bee03034d4464f50bc0ba588d70c20359c6910e39a7"): true, - common.HexToHash("0x4424beca014937a6c14a269446ccaf142c90ebd046d840e0d1878811ce5752bf"): true, - common.HexToHash("0x334db4d2d7231828c4b2b0c8902d219b5fe8d98ee4976fcb27453dacc66a8884"): true, - common.HexToHash("0x2f556fa67f639d2421f0d27f24fc8189637e86bfe5e1ecc814a871caf0f2c7e1"): true, - common.HexToHash("0xabb582072f0a908be4fefec0ed3b2984eeb3ad8e55a1b4e9c051b252ffc26229"): true, - common.HexToHash("0xec0ef68d99cd03e3cba044a8785b3f586fb2dfbf280e1b62309ea53292e17dea"): true, - common.HexToHash("0xb1cb9c1de6a6594ec9e949f10705385ee42aec871650ff2d09f3aa590ee70b6e"): true, - common.HexToHash("0x6271431576a1e4b821ccce20755631b0ff63d3917357340d7a36771cc17c7078"): true, - common.HexToHash("0x2fcf99325ff7cc2f7d62b722922e62ba93b1db8a8f1a238c2e130b1e2e509d09"): true, - common.HexToHash("0x999fcbe2ec56e2a62420669b9697450eecedde50b4433c43a3e4155c8b1c9852"): true, - common.HexToHash("0xa2f8122c1015b1b19dd8013c40731831ecd5923e7b1914a35e7803fcb4886cb4"): true, - common.HexToHash("0x5dd193af17fdab6999932ce6163ddd2bc217479948ebdd516710610b1e61b6c8"): true, - common.HexToHash("0x56ecedf095775a21608cc8ea392bf564c67f97849f9646e98f17f3f368bc82ad"): true, - common.HexToHash("0x3a4e136edd66a2f29245fe201a65990b478925dc82dc6f6bab98e26fc1d04cea"): true, - common.HexToHash("0x1a6ae54a6595ee087f5a3c970077a51c4fa48b967f592485b80e2a077ff18fee"): true, - common.HexToHash("0x30edbf8f4ec6168d00f934223ccb8a9ea12ad0e810d4bee0ecbd7c2511ebffad"): true, - common.HexToHash("0xd46c164ee03a5c37774030c1f380a8348547b4de741dca55d0821d2889b7d692"): true, - common.HexToHash("0xa3ab6ffaa73c20b53508da94a7ab6ff8a323bd8c165e198a38256e90a6251c1e"): true, - common.HexToHash("0x0cb2af05d3b45d1aa4340cf32bf787cf57525d10a3bd2741b3468711d149456e"): true, - common.HexToHash("0x6ac1f1024b81dd605b21e0687e8b97d0e01013042d491a4b14b69ce9a86c8289"): true, - common.HexToHash("0x23d2bbfd6727b76f5e9b36870c21fcfcc3567fb60936f5bf07af788dc275ce94"): true, - common.HexToHash("0xb15c6973dce233cba0da383ca49b1e1e60b4c3d065a4cee89a0b4ff6a141fb69"): true, - common.HexToHash("0x66ce4acdde669ad4af29440d07feb7cce97d9261f90564bd66adbabc68948749"): true, - common.HexToHash("0x5e192e6374908be16cef4b69b0583694b319aeb90d79d68de1065c07271f1af3"): true, - common.HexToHash("0x1b5388943300dcdf7cbbc2d4cd40e411e238cea461a4fbc9fb0c8f1775d09a7e"): true, - common.HexToHash("0x8fb39fb7bc92304ca3b75d061f61fd2002a91d2527e9791f72cd680a864087be"): true, - common.HexToHash("0x09d4cb6cd53c3e5a9f85cf6e4e78cfc43adcdc4e7af7817e5bbcc049f442f8df"): true, - common.HexToHash("0x32fb9225f06cbed8a7477664c3279cd22de688e71bf2575cdfdc0daf900a1017"): true, - common.HexToHash("0x83fac89163e1e9319b8f015f2c8c17b69969df5d8dabb7a668d09bbd101b760a"): true, - common.HexToHash("0x557fda6d458441ec13c3def4f0091f514303c7f6f020320f7c6f53a24543207b"): true, - common.HexToHash("0xe814c5a97251fc8e5bc68b350bf293b6012f331e785404f7763ea6bdac82e9b0"): true, - common.HexToHash("0xd08f05df9b4ff889976a7beb5cc19f6311b16ab4fbe3d875d5ccb4bd5c0bd054"): true, - common.HexToHash("0xa900025aec1986ae30b58b321b5f3cbc0ee10cb6fc3eb18ce941da6711d9b018"): true, - common.HexToHash("0x7d927c12dabfddf51cc6c83f6290ba5ed03a3baab14e55471f932a963f7f1bff"): true, - common.HexToHash("0x1f6c203cbc64f7ba1f729f19c2c03d54f109ae7ce9ead6da0a8fbbf8482fc27c"): true, - common.HexToHash("0xedc78593924e3c6173b7f3851d0fa339a2d51db6bc4a99f40e5a58827bd970fc"): true, - common.HexToHash("0x9f3ddf09e73da8d4b5a4b4388a9f04a2449b8c09cbfe845a4bc4c6a663486f05"): true, - common.HexToHash("0xc12d96064255482567ec04cd8326972d9fe017d2055c480694f121f61079c889"): true, - common.HexToHash("0x8848f34351b61e017679d291983cfbb3dab4d937bcb34c3f60da3f9779ae63fc"): true, - common.HexToHash("0x36f97cc279f85d298ee85c80b64b6c697f90a9b971ad0b8706406ed8b9aab767"): true, - common.HexToHash("0xe2e70f7cbeff425c2fc298395e3921913d11a762d4fa8be4431755540a8f6aa5"): true, - common.HexToHash("0x285023c546c0f675f9396da2f2a2d1a540d31a9c9433790fd8872a342828785f"): true, - common.HexToHash("0xa0aa27cab3f6da948d466ac5f87153a372c574e1c400c8d992782b2270be4787"): true, - common.HexToHash("0x83ec835c21209553d79250a7715298110c1666007211290d699669acc4490ab4"): true, - common.HexToHash("0xe19a058196f3a3cc0905b5a1325324db3af6658de7ac7700d644027cf57d2900"): true, - common.HexToHash("0x536a53df103c5ad8ae071f7275c88219e303714a994465cc73403c7e852c1329"): true, - common.HexToHash("0xbb1acbfa93de3b7f07437caf5a66777644c26aefff88c1750e907874ac69be6e"): true, - common.HexToHash("0x785d3ba659b67f866a86b7b8c9036e2868a84f055084f84d190b5117adbbf53b"): true, - common.HexToHash("0xc06254e58037223a565574104d0840c5ed1981b33e339d1aa13e3b380076482b"): true, - common.HexToHash("0x3317dfc10ab01d3f8dbc424ef8b5fb5c52a7642c1dd390687214b4656ba5d3bd"): true, - common.HexToHash("0x7a478450e751e7ef4897af48b40ab53ed3626a9f0a145df6576d68fadebcb702"): true, - common.HexToHash("0xd974b50cfb2acefe5be729a46dd87dfe438f9ea3d39e30f5d81630c90e7c11f2"): true, - common.HexToHash("0xa55bc5e6ec71ff5af549226ab75560ab74d83114546f5ba227277162f58f3e02"): true, - common.HexToHash("0x223d80a0cfcd466c751963357224280505ad7d672bf3697ed365d095439851b3"): true, - common.HexToHash("0x6c8d7e6920bf506108c4842f2c44852bb7cafc822b6f9a0e06da5668a2aec363"): true, - common.HexToHash("0x60a2136d6ecd44a4856fbac3cd2996815df227fc752ee716be33f7ac557377c3"): true, - common.HexToHash("0xcdd961dc7423487ce436260381b21c06f7941594da720404e95686256671ccec"): true, - common.HexToHash("0x53c38ece8d55882840ea0a64048bf0e21b27c7e4c9596a61bb936792de9bfd16"): true, - common.HexToHash("0x37bf0d668c9cfb51554717bad73f93de883dd6963cc30fb283b137a23544607e"): true, - common.HexToHash("0xb2a9492b89ffbfeaf5dee31080d80281cc15a7287a418b049385a6bb2a8a419f"): true, - common.HexToHash("0x3cdc56ceb503a1749bb87a4ecb8a361958f549b987cf7d399b916f171d6cb69b"): true, - common.HexToHash("0x3801b6f70b7592b50590a503acea100bcf0f2ddb3f97795e3fab1dc911bf9e1c"): true, - common.HexToHash("0x7480e990e89f974baf1c89cedc471f9c257098546480093431f3eca825f856ce"): true, - common.HexToHash("0x950615d9bef4301a6ecc98467c2ceee8f2601db698b48d27749f6bd4e46ab238"): true, - common.HexToHash("0x27d34ce49c64ecb25624e571b0f5db99ea45006e50dd412f13519ad9d61a7e41"): true, - common.HexToHash("0x37116b48ec2cefc5f0448e0d73547f158fcb3d289cac2d68d730fc86419ed0eb"): true, - common.HexToHash("0x2cda5662b94960ef37b340ca1b92d4d604529a7403fc57434cf9957cfb0d319e"): true, - common.HexToHash("0xecc9a0286c972f1d86682182728f70c46438b5a3297de5d9152bd7ab4c5fdb43"): true, - common.HexToHash("0x903ba6d8d93a95fc60a5064573aa06296796edb24c620caa7c4f1a3db41be5ed"): true, - common.HexToHash("0x8df79b28400f9c6eff755b015199cf5eda266e210116ed90c33728b65c5b6a8a"): true, - common.HexToHash("0xa41c571362bcbe8bb1f50b3259ed1b4ae1ea09265e36f73fbf30a340ce4d582e"): true, - common.HexToHash("0xdd14170370e63931be1859e627d95244984609fbf684016986ec039b26b1e63b"): true, - common.HexToHash("0x0cac2c0409bfed659248daa21a9d5c1008691a818b16f16e6c89821f06f8968c"): true, - common.HexToHash("0xf5b29d27921a4e07cfe7d5511d1b386cd663aa64a53f3033aceddae3725399f3"): true, - common.HexToHash("0x00ba58333478cef883b48dd9737279a041fc02863b56e048ed0e50cb12769729"): true, - common.HexToHash("0xe9e3474632344997ea0b8698b85dd6f7131ebc28c243e03837e04a42796cc99f"): true, - common.HexToHash("0xd9b21c13386fa0ad7f921c091c845da4ded270a63dc80c0051fa285923042c55"): true, - common.HexToHash("0x84b334a0118ae35aefcb35138452fee5e842c34b7d253a8e39acceb5ba408752"): true, - common.HexToHash("0xe977c5b5c1eeb92c3cf350e11ed40a3788f26e642264e84447df94fc03c60ac8"): true, - common.HexToHash("0x24f9fd0c552297e5c042f22209f68b20992f93ca2efd61d8385ee7e80b69fba8"): true, - common.HexToHash("0x556fcd90d8b661fe67ee3ac65cdef4a76bd979b69b5d13a2fd24393c93494079"): true, - common.HexToHash("0x10c4c9b8392f44f7823155a18aab51cf23b5b4b0ec099350e96743879edf0998"): true, - common.HexToHash("0xd03e35fb490f29d9f31b5c70bee823827473e0b2b36f7c807bd631b35e0eecdc"): true, - common.HexToHash("0xc66909d0578af6ef16855136a0ad9b6d1b162e254e6bb8db34fc6db0facd8387"): true, - common.HexToHash("0x2970f34995bb500e1dcfeb0586013a073fab33bcad9b6d564a643e55fca1d425"): true, - common.HexToHash("0x8e76b080bfbe8ce8a508ef0a77342e6b721b89a2eebe687e793a068495e9e8e1"): true, - common.HexToHash("0x72c8de56056136f0ac11050c2027b442c197968fb478d4811dadfb4f0696fa50"): true, - common.HexToHash("0x334a7bc05d99cd14280780fc668fa54e14201d359dc5e916fa91f153d4f49c03"): true, - common.HexToHash("0xa42e1201bd1cd7895d6fc363d334287f0d7e033d671b8efbce4617de5bc795e7"): true, - common.HexToHash("0x3f09ea0415b5db3836673e4e24284506a03e6fbe901360836736febcd269a7cd"): true, - common.HexToHash("0xf3cc28d956be68dc298747f44a9b0e52b884817fe37078d379011c211e1b3ee8"): true, - common.HexToHash("0xaa866baf1d7956b3bdba9f0345cf862ee73cb27d31b734512db53b72e2e36236"): true, - common.HexToHash("0x9589986b22c2b5694c76b29b7863a018378afb40ea951c41f966a195212d1579"): true, - common.HexToHash("0xb51d96401286e92590ad5b181db9890bcf0d9720213d89553e075b14d464513e"): true, - common.HexToHash("0x373b7acc999eeae784d50911550e5107e5d1dbaf1cfa8d195ee5ffc214a28fb6"): true, - common.HexToHash("0xd725aa21e5d29adf65cf8a60bdcb493f2588080f0cfad654b268a85da8c1782d"): true, - common.HexToHash("0x5eca8fec5d75616571afea638b6ca031a6108753a6541c7a5cbd63d16aa8f81a"): true, - common.HexToHash("0x4ae0b3c0870cf2dbe34c33ff9155d3f231d509cd00e4f0c92bcce8e05ca9e4f1"): true, - common.HexToHash("0x5f269e85734774160b9ef17142e2ea22dfc516a9dd9fa730faf750767e8ea896"): true, - common.HexToHash("0x39e6a17db6050c5fbb39f8f70e4ae059bda9196dc88d33d9c15662a66eede507"): true, - common.HexToHash("0x5f599c2336bd9f157ab66f13e472ed28dbd32edc105e6226fea8d8ebe96864a6"): true, - common.HexToHash("0x0f3ff2e5cb17719d2e2241a33c2f53548735ef4c229df52100089f87c65a01f8"): true, - common.HexToHash("0xc67bf502d5a0292c63ddd01ccb77dfa2254ea4e82cf8cd474a7c451c0df0b5cb"): true, - common.HexToHash("0xf7e655bf9fd50899539e225a318df833403f6bfa23f685c8037475b2de330517"): true, - common.HexToHash("0x12842fa71c116a4739eda95ce7d9af689e08b97f0327e7b37c20e319772aed02"): true, - common.HexToHash("0x7da551e8d63d788b5df95675cefbaee1295bfb5dbd5b673e162e26dbfbd371fd"): true, - common.HexToHash("0x417c60633ddcc09603124aee9f99391a4ff620e5e47ec78bbf0b73993a7096e1"): true, - common.HexToHash("0x537e93415e0b141685f9459dc437b67719aaf4baffccd19bd60fdea18b1207b6"): true, - common.HexToHash("0x8d306eee409cff3e3f17b13f0df0570f0044a9beb804fe88d0efe653592dbbe8"): true, - common.HexToHash("0x2c77540c18581c46a86941a63caaadeeb1a774ac18bed407fa506a04320ec1b3"): true, - common.HexToHash("0x61f674b711a7d784143958586754ae21f31850750137cbfc5506cbc1df69d54e"): true, - common.HexToHash("0x1161a2dc246f7f4294184837385effbffed5a2969ef578fe3a9c0a2e38ad1e91"): true, - common.HexToHash("0x18a2ea69c47ff8d12b206d7694f8c8b7ebf5b269cf0a089bc593a5b8d8f8d2df"): true, - common.HexToHash("0x06456732ff3692a68b2ef0fd3efea785c866f8954e92dbbe4e25f7106b75972f"): true, - common.HexToHash("0x80e6213be930acf257cc7464fcdc931b7c4e87523c2b312b7e4b4b9a81088432"): true, - common.HexToHash("0xe9e7bc1e318b195f201872b6ce1cd92e2fa2706dee3931fd62a628f6aedd9671"): true, - common.HexToHash("0x7b4144a32ac88ada47a5e521745c41f7420c4422d721262051e6facc43a5f5d6"): true, - common.HexToHash("0xfa9db496759bef95ba5df7195dc6b75bfc082324e83ebbd3a69d7f07f91710cb"): true, - common.HexToHash("0x77fd2d37bd4befe9b7270457e01464dd6ade4afb25b55489193577729d60905c"): true, - common.HexToHash("0x84fb14ecfb502236c39bc8b325e5095595d9a5d6c3b6256ba40c98386adfc6ea"): true, - common.HexToHash("0xaf112c0eca792508dbb66b138c69e7c7d6139c33f21a5d862a027144d3ed6158"): true, - common.HexToHash("0x0caff1c32dcc67c4181d68a1c3ab49f22cd8ffb894f32036065ecd608fc4cc49"): true, - common.HexToHash("0x649036e860783cd35ca40adfe833b88e177bacb8e73c1d2154f653d52aa11eed"): true, - common.HexToHash("0x31683a1663d713be976732c78761744b5da850e99089d7f9d51d90894ca65e0a"): true, - common.HexToHash("0x43388ba66b143470e3ebc42443d72cf53b50509b704286d3b80e0146fd324eca"): true, - common.HexToHash("0x9f42ffada9d7f5d253a27e2cf45cd21dcc4c74efff10a9b3e86edee7fe0be7f1"): true, - common.HexToHash("0x4675f9af627930449492a2530ef6dc11a6135d48137dbc3b477f02a22d85a943"): true, - common.HexToHash("0x0fdeae1c6d3deb7b40b9cdedac3202436093e36257ad861ec2d31cfa1f90bed3"): true, - common.HexToHash("0x3a4bc06f31a43206d24b9441d5b6bdbb0e8bab5fd4894124b6e1ad98f536d7ad"): true, - common.HexToHash("0x11ac2c62c154c10649ece939ae08968d8dc3f6b82d9130a36252711fa2f22294"): true, - common.HexToHash("0x0a88d346cea3a30ea1103db0492e74b759eeb416f2dd3cdee131d8b50275399d"): true, - common.HexToHash("0xc8b11fb3aa99bec0fcb38e9592159d6cb8213b0ad42b3d24960d739619e24bf6"): true, - common.HexToHash("0xa2620d68ad838ebb48c155ccc52e53f0af03e5384658377fcd1a3fc558e517f0"): true, - common.HexToHash("0x1bd9821087969cf3d47ebb080b4036acbb696b090dc3c0aee5504c8c5690d06f"): true, - common.HexToHash("0x5113c7aa57da34e5ee151f87d03788ec225a12a82d21a297650ed3b6d568b9a8"): true, - common.HexToHash("0xd0723e48ebe4c61133816e40b40d8c8635aa16a4a59ca37599e175d3e9db8669"): true, - common.HexToHash("0xc416cb6f3257d88a08eaa4d386c256a04e2f0166cc2564961675efdfc2af47a2"): true, - common.HexToHash("0x94cfb995ad8d3ebaa75b068c2715c4ca3a72f9b449767856e012c78696f440b0"): true, - common.HexToHash("0x9632c04f0ca1d3d598c6eacfa7d7066668928b83c71579c0e161151076bd84d5"): true, - common.HexToHash("0x91d6d740b99cd444e76aecbb30bfbca136c51f48e767a68aa9e769e47eac986e"): true, - common.HexToHash("0x9efac6606d8bc153816a442e9d79067bf3310d17be6a42a8b933d027aea2c13c"): true, - common.HexToHash("0x8434394eb0a11ac63bc434c8d5ae1018a0db875c47af2ea469912dc244300bb4"): true, - common.HexToHash("0xa71ad5f76ae3bd88371af9876bced44efcbc14fa944e01f519c1a6eac005e335"): true, - common.HexToHash("0x19991e160b8340902e37ab05be457d7f54baf5e18d73c0fb682ad5a0aab39705"): true, - common.HexToHash("0xfbd8b7cb90798660b705ce62c7d825ca34cbc59d5ac5f55b90d47620a6fd2119"): true, - common.HexToHash("0x9ba6b6a520c702f767433a94fa68bd200503cff0344280e574e7bdfa6207be64"): true, - common.HexToHash("0x1e65f2000c405050fc80d00e0a4f835c3baa0405dc68087ce8e13506a6e139fc"): true, - common.HexToHash("0xf4d4f5d3c582c634448a08a868baa6e48dffcfae1245611166ede12359b4b831"): true, - common.HexToHash("0xc6e74d4fa00cbe0a1c259eab6522b9aed6008b465ab6b66e98aaeb2e50e6cf24"): true, - common.HexToHash("0xb5a9b42f355e13c1ed36dca1c806c331e50a53ec896045dc94460c655fec870e"): true, - common.HexToHash("0xf01ac805232bf99f699187b5189dab5ae066242bf2f3568122ca579781be9340"): true, - common.HexToHash("0xb5bcaad884100e55d9d0165060fe8b59249c92e03c354300df25bfeea46c735b"): true, - common.HexToHash("0xfe2b7a9db1d234d0b97eca6f1800d42aa5ec8db03274c7d999bbfabb4ce18ce3"): true, - common.HexToHash("0xca83d0d609f24c7dd5e4dde364f9bd7e3b30c909531344aa7bab20e3723c5f88"): true, - common.HexToHash("0xd581131d99997b635b11fcf6b86b2afa35273550f6e870d70dc00d79be3b5c77"): true, - common.HexToHash("0xb417da01483c7dab0018ea84935fb831332f76f6bdaa3cf660a4c418c6b7de7b"): true, - common.HexToHash("0x8f9da3b545877c8d849197b8b884af857f51f27313669dbcfbb84da78a7f6fba"): true, - common.HexToHash("0xa285c8670abccfc390c78618b9c65aa061c303d038d1f9a26cc2d48ad2d1d23e"): true, - common.HexToHash("0x9823ffe090922b15e2c3b6221edcd4cb7cf7cf000d8b059127929d93b92a6dbb"): true, - common.HexToHash("0x4abf96f139f75cdaffa749b696b87ecd1f458304f64cfe194641429144976c5c"): true, - common.HexToHash("0xd285a32ff1fc8abce72ff4a7071e21048e218e0c5570d60e7134b8f25175e2de"): true, - common.HexToHash("0xa188d0423d3e5ac59690219ba50e5497dd172eed55f2bcfd5ae24e51cf632c83"): true, - common.HexToHash("0x018765884f07be666791749b6569dfd08440d5883bde2d8ada6a62ca072062e6"): true, - common.HexToHash("0xb5539925e129f9ff22d34f979da98827aaf6e5af015c7b227058fc22b3c8e251"): true, - common.HexToHash("0x5f7795216a094c3c09104f2efd839bbeb426454807b28515a7afb959898d7784"): true, - common.HexToHash("0xf7eaffb3873c9574359fae089c963ca5d60b7d527e5ed427b977fd00afc68be2"): true, - common.HexToHash("0xc91118a888d0b20c4472be0171251537d3460d8994a00b83dc4fb0e4ce81e8cb"): true, - common.HexToHash("0xd5ea85a036f75e844c036c7393280c22d229af75e003907d88aecec53221df2a"): true, - common.HexToHash("0x7607a2120ee050fe1b7a8f54243319c7ae1ddda58c71dc1a4b14a4d43395ec42"): true, - common.HexToHash("0xd92624bb04a30f8be5c49d48f5154d7876173037e9cbc373311422680426adf9"): true, - common.HexToHash("0xb7d8eecf46112b7be45efd760036033531f72df59126b96db7cd6796c6c8fa8f"): true, - common.HexToHash("0x4272a0a1b462d44fc5cd955f7b5d65cc86aa47aceed9e90ed14eac58abbe3ea9"): true, - common.HexToHash("0x87e6f24e52c4e03f5a0eea9cfe6e45476b56131ae815f742b8422db5880d0f7c"): true, - common.HexToHash("0x9994e3be2fecdfc3b3ddb099c9e60e6416e15eaae7f1cfc540cb5c7d02f79655"): true, - common.HexToHash("0x4b7a9384c6630e9feca04ce78791fce3240ff2789c0cfa2b727b0d53edeb9a0a"): true, - common.HexToHash("0xe98faea4294811b16b6006dfe1bc8452fc503a9333dbf96bfdd26938c1314e81"): true, - common.HexToHash("0x131df18bf101a6a66fbe6ee9bf02032a7b73ed871d3e0b5b4e5337d0c7247728"): true, - common.HexToHash("0x4b3dbc8b3ada37f947047e5c7d0aac3b53e0da5c864c73b34a2de5b486234489"): true, - common.HexToHash("0x4eb1abbc0aa213eabe7a2df5e200d383e78fe4cf6b8453bc59f71559bf57bc1a"): true, - common.HexToHash("0x083b61259cfc92f7d111b75ec9dcfdfd1437a5844cc8fe689187ad070736a73c"): true, - common.HexToHash("0xa1be9c0a0556a97c5e926e2ec53f2527c9f9b1a7079355f0c867693ec8edb4f0"): true, - common.HexToHash("0xe3d68b0ff2b9890982e7aafd8462987cd17804d30f23c2bff5b81ccdbfb9c333"): true, - common.HexToHash("0xfd430818e02cbee8f5e5aefb9b9e6b4376e589ca36708898c669267c26eda6b9"): true, - common.HexToHash("0xc5db1eabfab6fa471fa161b99cf9319ee9ff8e2b3cfec1842ac1d3880d203b8b"): true, - common.HexToHash("0x3c60ef0ee53bcc53aa2fd69ed32fb21376aa753342bf981330bb16d8b1b0df5f"): true, - common.HexToHash("0x620b5e0787d813601a878ff49199e61aa801a9b8d5e7cdc9d031c45ed091080c"): true, - common.HexToHash("0x103111f4048ed8df4191795b3c7d3716e14408eb0a9fcbd994473d678914cdcf"): true, - common.HexToHash("0x7f3f0999dd631adbc605f50a5ffe61b9c41c0a117f3cdfdfa79082675d3989a1"): true, - common.HexToHash("0x33c0f93cff75d3014cb98c201430674b36e56337f135298c6ef51cc14ef6177e"): true, - common.HexToHash("0x45bd5fd97c9a99340205aa83b33e72e45e97872fd6c91bddf7bb8f9efef6e6b6"): true, - common.HexToHash("0xb81d5325f14d156ba987521752ce1c812f80a6992a746d9ca9757822bddc166c"): true, - common.HexToHash("0x599f5a4c2223c8efcb3dfd929cb30d840857db8a9dba63e0f18e207f5b1cf6e1"): true, - common.HexToHash("0xb83b2cb6dd053fb353665e63fd3607850e9f61ad01ac9a9ae631e2218ae2aeb5"): true, - common.HexToHash("0x564f1ea738f1c6fca0cdae1daa934af54eecb9812ebd0532481c74c8d9829903"): true, - common.HexToHash("0xfad622a9cc5eb451c15e64ade9ea57f9b55f7121a138b97055ed238ea1f7639a"): true, - common.HexToHash("0xce8a019b177a3b390cac9f2dd3dbb2aef7b54a4890d3f95af280285f469cda38"): true, - common.HexToHash("0x8855407ae3a9c50e1de94f1ad688cea483cf3f6a58fa1b85386e83fd87a366d9"): true, - common.HexToHash("0xc2011c516a026922389017ac341bac29ac555a15863b763b002160af0e5f2712"): true, - common.HexToHash("0xe65c6963e78e0273bea39237c9d30f6c0348ca30a5e78a10e131b40defef3879"): true, - common.HexToHash("0x4eeb4ed0abe32024462b804a68b11b282fee19c438ed32e43c2399de6f24dfb0"): true, - common.HexToHash("0x85db36a0e7fae5d4b18e0c851c3792c1f70ec310b4bd92f9ff13b633318dda46"): true, - common.HexToHash("0x4b34c88df7908540befaa48d424bb3de0bdd634bfb8099aae376247a42aaf63e"): true, - common.HexToHash("0xafa65f0565e3225ebff3e2edf563ddfc55b64f736cf86d66de42df543d88b66e"): true, - common.HexToHash("0x5a97a7e513deb6c8bb24786ab1576c8fe13492234c8ab23e134baa364c90371e"): true, - common.HexToHash("0xe9d67ef48b30f7a2c9806b8f73a8ebeeccc15698c454b531f9eff62755b91bcb"): true, - common.HexToHash("0xa791c5deeb418f05b3ad870dda7a20719d279c19e81842f4ca083af9861a1bdb"): true, - common.HexToHash("0x01a10c888c486f7f953c95db5b37cc3c150a16dac15e1d75d3ab9c61c7c4d24d"): true, - common.HexToHash("0x1c5f4f02985a858b872eee41b84788e54a71815daa62abdc378967e55679f257"): true, - common.HexToHash("0x53bea36a8b85e6923dfc99186a14a921829fa010930198a049d82a33c2794d30"): true, - common.HexToHash("0x16a8a95b0c38402df1f9a0fb720e599914d0aeab323da35f4741f0d36d7ba45a"): true, - common.HexToHash("0x624b2f325a6d00b28ab547321ea88d472f910f1304e1f8a5b52af9e6299978a1"): true, - common.HexToHash("0x2d81394ef682cbd7c01a5f81e731a54ac1722277d1a51eddd46328d3553b6fae"): true, - common.HexToHash("0x8a9777b5d618524d047eae527f10def9d393586a008775561b4f8658eafe03aa"): true, - common.HexToHash("0x84d1cab45e22f205d9c52a7afff8cc80c8aeb76a62899ffde667dd11fb92053a"): true, - common.HexToHash("0x730f3a11dc1b4b7d219a08a5f212a1a04e64e7a3e90b4f3ef24da185b876021f"): true, - common.HexToHash("0x1d865f3915293aeb2bf2b402c4fe9c69cbe970e054578da489d0ae20d8e6b39b"): true, - common.HexToHash("0x4e1da06486f164ef3fbd7b4fda7f621fba2132ed330450739f87cfbe43b61065"): true, - common.HexToHash("0x18e5bcd04292bbbbc638e7959fb15c439514a6c47657ddcd9860865f96c4e0df"): true, - common.HexToHash("0x5cb888c820b939c51a2d5cf0ce57b3891557a78b39d720ca425769e4b02ee6c2"): true, - common.HexToHash("0xbcbb07e464490e57a98ce6653c6bc9e36837ec957f227a739666e7c6bd6e032b"): true, - common.HexToHash("0xee076af06df5c681b5b8ca31d356290975130d76b02066255f3b1e65572b1e2b"): true, - common.HexToHash("0x35dc89add630115da3d18b1f40ef3287bf10aaac68d346bef168093307f24e6c"): true, - common.HexToHash("0xaa7be7fde2b4108609a7b6e91195a7cb6f8e6f4c548dfe8169b7400f5c61c960"): true, - common.HexToHash("0x165659163296702ff66726d35b917d9906724e09413185b0b8e3efc4ea864a19"): true, - common.HexToHash("0x6b181013a9813cd9459f57033230d52430a9a81e999617f0c67ec2dc6a51ea29"): true, - common.HexToHash("0x4c25f8bb98fab21a37742a9da20d377d506c36123e6f78bd1c91b724687a4d85"): true, - common.HexToHash("0xd6827d997da01675ab810a8d442bff3b551ad09c7413ecfb01daaceb8d5e4655"): true, - common.HexToHash("0x2ded121f38fb4c6da173dfb2a60f99d27e282806b2cbfac47ca3cef6077d1ca9"): true, - common.HexToHash("0x96029aaa47163be1f7b3b607c81edb2dd767fb338b25d82efdfdf5e08110ff2a"): true, - common.HexToHash("0xd21729ff790d5b4722116ed3e89a684a2a57ddbe70b1646c397304bb8c3c70d7"): true, - common.HexToHash("0xfcc9eb190cadeb977284fd6426bf4fd9c09ce3d4f44c7271b2443ba76ee3fa5b"): true, - common.HexToHash("0xfa1535ef48d3d9b72b3ad3059a4042e20f9d8515f93dd68f43f2ee110a537c2d"): true, - common.HexToHash("0xacf2369512bfa76093473a41520ba5368228e6823df7813d59ff53431aa26fbc"): true, - common.HexToHash("0x3e03413bb2e2708a411d130712b9b94c622f6c7e2a72b62c87966cda29c6a00e"): true, - common.HexToHash("0x1a415d4de4715742885c3fe84d49e703add1638ac860fd64d24ccb18577964bc"): true, - common.HexToHash("0x4aae0013ff2198d4f1011b0f200661358db6fea5f9a9cb0268b196448bcccea6"): true, - common.HexToHash("0x976175d8f8900ee7f9d2305e081ad268065172addbd12ca716c790cea15c01e9"): true, - common.HexToHash("0x93480d3b11e4cdf9c05dc4f32ed44acffda3cc9a21b5c6fd3168fd5731c8462f"): true, - common.HexToHash("0x1ced0e5c336e08e669e3feeae10e81e0fa7e909ae9ce222bc46216a057ed7e5c"): true, - common.HexToHash("0x73b3d5f9c4bc10ab8e1d4d629689f8c03c88bc319bd9a66d35dc3a53c6f48f6f"): true, - common.HexToHash("0xaee434f076a637adc4fd5cc83a8de2e6fb3cfcc4ab00d1b5fab5f1a1efd797ec"): true, - common.HexToHash("0xee7cfe5d3e98225c9321147ac86d2d7c100bad8413ec6e67f179d4eb11234696"): true, - common.HexToHash("0x7a0e485e6754a69ec6434b7dcb0d54273ad9c1481b3c7835de4c435a418eda33"): true, - common.HexToHash("0x8b1e4c95c04ddf30f34647052176fabe3b68112f3b7020e2d279040321599724"): true, - common.HexToHash("0x5224b303ba2e506974bb2f95adbc8164635c6012126bd99d6d4f41f172b38db7"): true, - common.HexToHash("0xf7ab6f24efb68f4b41a76e658c623385426185e24244612c259346231e359bfe"): true, - common.HexToHash("0xaffdc9f3732992492cd7340b7b02251265747539185d1fa9aed069b81ce0b212"): true, - common.HexToHash("0x340236f0bcd69ad68b671c234ccc7745014a23e8838fbf44df1a81580de19443"): true, - common.HexToHash("0xa67f4a3c9236a1c03a0618b0b0797daab67dc5d5391805792da01b3547bea193"): true, - common.HexToHash("0x05500beacb71e1c16a8485c5bcb68945bfaef845cbb1452a6274a35aab901151"): true, - common.HexToHash("0xb2d5aabd51e0a62ba9ad2fe8d9fce5973b02ddba58984e59aeb6cd1c9072d95f"): true, - common.HexToHash("0x50d8a8ec3c715947defe052866ece9acb7d74252d55d25cc0f2c1eef2727e9cc"): true, - common.HexToHash("0xacbef6a08b933e54c5a3f835f1bae0290817c819f71b92c8d43b2bfaf3b3ad3c"): true, - common.HexToHash("0x892a7b11ab73792906e62e7d6b7bdadf9be9fa45e9445e15b7c7220e18b8ab4e"): true, - common.HexToHash("0x777f33e124da040e6cb47154f2769dc966980d93747c15899c32367c6bf4eede"): true, - common.HexToHash("0x4b2ff0fb1981fad2a07dcce83e8df9c3492d37da7d493e81f9b0cb6b3d30dd5c"): true, - common.HexToHash("0xa4795ef7efa7e1e9441b19d2cc52dfbffef6eba467d53bf5e9aaa860d4a30633"): true, - common.HexToHash("0x38ec2227cec02c24871e285fb8ead6ed38751ab9e34e92daa9318e95edb3691e"): true, - common.HexToHash("0x05d5d07e8fdfcd1320867c8a170509f017a0e70537a4017f88028755eec49484"): true, - common.HexToHash("0x633ee5b7d0611f27d1992ba881e20cdb62ec0a633651a97a37c26a2cc67f1711"): true, - common.HexToHash("0xd7d5065dfaf1a2594930e62d58cb8194f13cadaefebf25a2fa1a0860a374f550"): true, - common.HexToHash("0x9e2ed445d13d275c66e523f83939c0b76bcb94242d1b42360e3b8f2961bd7616"): true, - common.HexToHash("0x73df154d7f189559a98d2b30102d1f005d3bc2ad56fe44a0514bca54213f307b"): true, - common.HexToHash("0x5f08e944c0c76813ffbdc7974a735c5c300869e401c5f9aee2fa2134befe011f"): true, - common.HexToHash("0x99c4357e355c5de1be71d0650f50147f570d2f98641905226cfa9bd501c04c79"): true, - common.HexToHash("0x17a7f106435359e4142da2cd2dbfb554f62e68d3c77f790ed16774e7c5dc8aee"): true, - common.HexToHash("0x928a606a50f190be1a3910b22d0f1b4bf15ef4726719455dd084461c6687fcfc"): true, - common.HexToHash("0xdaf4d06b04e890efde2740d10003536f4a977e53693ee19e6d3d4bd3a9642743"): true, - common.HexToHash("0xdf5f37ac0d597bf550bbf9babdd6c22e9bf57b25e2d3ebc8e5572b155ef1673d"): true, - common.HexToHash("0xe9e95fb42953d63811757c33972ef7195a6afcbb54d8e7b06e97263beab87d4e"): true, - common.HexToHash("0xd1ecb7b37f9bf145e8565ace3ba4b2494f1e8fedf5ddac992e54706fda7bc289"): true, - common.HexToHash("0xdf0fcfbe97747579e888063c8da12c3097be0c11b9f085ca119186651d5f029c"): true, - common.HexToHash("0xca7330b0c85f9b80048aca5fb37fe1d99de39b610ea529117175428de66b32fa"): true, - common.HexToHash("0xb56d56ebbdd258b0b06c83fb7679df5bf48c82ae6978359c109b405ae61ee7b9"): true, - common.HexToHash("0x8440bd77eb9ccabeaa2026020f5a16b3eb4ea342a99854f572a4f878d774b3e8"): true, - common.HexToHash("0x7606b756409f965c520150a100f8e0926997d2acae5df7c7f57f5a8f354674e7"): true, - common.HexToHash("0x72ca2a33d342c0615307b4e0450738c1f01f36bf9912ca6da9b01b8ca3b5c566"): true, - common.HexToHash("0x8de311e22ee665bbe13bd2be62654b55d34b43ebbdfa368965b4fed7316ee099"): true, - common.HexToHash("0x99a2ef8800ccb1ab970c38baee7c5bd3465b26e9baeac1d6cd47318d3799da16"): true, - common.HexToHash("0xe5e742d9bbfbb60a34c5f4c0c67b3d397ac99b0557b390b44398af7c54610813"): true, - common.HexToHash("0xf74c335bcd280647921c0d3e293f85b8c6fac771915fc6f9393e732cb1d7a208"): true, - common.HexToHash("0xd8014ff1db70186f50c75cadafcb3f03ccbcf9adf480b1c891a3f06cfd5c22ba"): true, - common.HexToHash("0xfc66c529938fbf9c6fa54b2a6c15abd6b7c6e16726982edd29700a771cc6a64d"): true, - common.HexToHash("0x88fc38fcbcad0d9e149ac9b9728aae8ffb0cd30c0d3f102bc67b255c96899204"): true, - common.HexToHash("0x14e4badf5e7c0640a2733381ef6f857406655ae765e8475113cbd0314002dc00"): true, - common.HexToHash("0x7845e2a9715ed0b7978006a00067d55788fcb89e511893b6cd6974297ec30e65"): true, - common.HexToHash("0x3450e934c198f1be9053e39079f8128f31e06a47f595d52788a62e9434afd8ef"): true, - common.HexToHash("0xdd02476a59d0a7ba6bc40e637c0768ce155dc90b2c7a7ed8a94b1015e06b2184"): true, - common.HexToHash("0x68f9a369810341323ce033d742342275b9446a3a80d2afbd1e595d77ad203304"): true, - common.HexToHash("0xf7348289f8faff050ce9f8b197218b18c96cee4222d60d66edb3a5e39cceedb0"): true, - common.HexToHash("0xf1678dd2775c3c32c9b1a1e5d8f99a05c51eb9a9d484b265665d073cc607995c"): true, - common.HexToHash("0x26ad8891804efe9f073945fd34f96f669579a18368b355015873deb2dc21e578"): true, - common.HexToHash("0x8c8408bf618aa68b1cc6166d45f8166d1db3d282f33c82994f22c50e8bebcc56"): true, - common.HexToHash("0x5970364e8ed733849994791caf2cbddc84205969b1895f5d17add81822bd3bf0"): true, - common.HexToHash("0x50fc1710f6d413f2bb527abb39f3c4d434c4f80537d581fd21858f0968573492"): true, - common.HexToHash("0x66e7dc6fac0b54109fdf696c633741931a8f310181aedc534135a0fbd32dc4c8"): true, - common.HexToHash("0x945a26ed98d603368d4528594dc71ca26ff2eb0823d7b523865b1ecc10182298"): true, - common.HexToHash("0x9c9965328d65a9310d5fa84ddd8a9db4eaa65562a8b6c2d18c6225c3db53230c"): true, - common.HexToHash("0x66f18d4d5f8d80fb458093fd7967160a4c80241bac8f4177246b3466ace50826"): true, - common.HexToHash("0xc051f0925d956dcf992e43520523c67abc1919d4a67db29d8a566d9bd3a0d8cf"): true, - common.HexToHash("0x1aed5799cd5655f8b3bd09ef4cef4d8820cfbe2e2c2fbbb37a27929cef8637d0"): true, - common.HexToHash("0xd40f14c13c113d241b727f3cc2ad7f4b2ebcf46ea3f9bee0721dc29ce488d167"): true, - common.HexToHash("0x9e180b58c67a189d4bef850184df8a19311ceb29937803f90fb0452e983d7cf5"): true, - common.HexToHash("0xb4633d697c4c51cab4446a47383102205b2b31ca4993108ed7658ed34710034b"): true, - common.HexToHash("0x919b1f4e0ca0b38f8f4450b955f29c0e60908965ab3df7fb3399300917ac8be1"): true, - common.HexToHash("0xc15f66c091a2ee0318e89e25a2323676a9f8504d31c65e6df8c64ce1a7d51197"): true, - common.HexToHash("0xfbd97a0b3e949630d6e885e7bf7f0c21a1f45753c3ed9bd594d6c782ce39c7db"): true, - common.HexToHash("0x8a14da08f2b2ce0b8cdc2604f395a6295cab0495d938cf033ebd5969a1fde7a7"): true, - common.HexToHash("0x4ad85e32cf7acd812611c8e00ed4565637190f7edfd3753b0c6123c7b41d613c"): true, - common.HexToHash("0xb30bc1662a24e740c87d0573ab3e1d4ce82246274116f6555a0da71a34e15c1c"): true, - common.HexToHash("0xd8875d19ee3543143d1b54b395d64c721d881ae5b37c3395fa3fe43c888ef042"): true, - common.HexToHash("0x7a0123066a901538f11dbef795abc559225f499e9acf25fa7600016c32af1233"): true, - common.HexToHash("0xe26bfb18d27274a020fe484d888dcc5868527fd67f1e251fc08e9fd5a9598f34"): true, - common.HexToHash("0x5c9f9f0daa4d71fff2b23d8fc630818bd5c00f5a17dc1fead7076b0167295505"): true, - common.HexToHash("0x11f4aa63c457f0f71537193c9ef4f7bbaf29315717b6bbf808d4c5d5c7f1ddbe"): true, - common.HexToHash("0x1461d5474919e00382457badb02ab6860b1f2c97346e413479c326506bf68c44"): true, - common.HexToHash("0x33277a2da07ad4530388e7279b449e2bc7adec9b3ac19c058795af289430fa05"): true, - common.HexToHash("0xdb9f14197112ec93b371f5765424e0f67dde09d259211fca759b2f4a5a06d09b"): true, - common.HexToHash("0x8f8e7513ceb682785597d94133dd149e726387089b97609746350eee71633943"): true, - common.HexToHash("0xca4e1dd63d929bcfe1e3894ec23432f0aff9f1aaa7be4af84bf1a26ff629283a"): true, - common.HexToHash("0xbc9383f2fb013f11e25158ee1bcc95cf670173fb7036afee0c0e4edd5bcfbb83"): true, - common.HexToHash("0xc011cb9f4d36e9787dceccfea80b514f68e9f59731e68dedd681395194527b87"): true, - common.HexToHash("0x0fbcb76091d0b1567860444aa00a4b1c650228dea86f6985ad47ad0cdfe401ad"): true, - common.HexToHash("0xa20ac10d7338c14bdcede685dab04c37129601146a2da6e60051cd2b1ccac819"): true, - common.HexToHash("0xa7772921c9c6c1ed9647ec5be4a49b07cd332a5070e3b815a5e913384fb7baae"): true, - common.HexToHash("0x3321c5bb52007146f2ebd9d1af7b8ecf09d4566f629908b15017ed3d526f2e98"): true, - common.HexToHash("0xb3f27bab79de5eb5ac9d2d73005b530fdaa15321c0851532bfc2779dfe2aac8b"): true, - common.HexToHash("0x45fa9cd52896e0e710c50c6bf609471341f932b01d97686d57ca6464a70395b2"): true, - common.HexToHash("0x5aa42f46f4b1358673be4328ce37587b59d18f7a66c0f55da6046ba7282a56c4"): true, - common.HexToHash("0xf22c46d8186ab6fab3d03a986419f287807ad10110abb9214db9d14c2167808c"): true, - common.HexToHash("0x7aedd09880e94ee287bfc9399dac048af289423d89137e4c68b427ea110bf0db"): true, - common.HexToHash("0x4b71f238a01a7961c9ccb9613377d15461a15faeb158745620518e9295bfd5e0"): true, - common.HexToHash("0x256894c21988e9c425a8998df76ea0393007ca0580e2c5d266682f74a43c5439"): true, - common.HexToHash("0x6ed10363a8ec5b03376f14b86249e7087d07fc1297371f3f63f4a2813d3e130f"): true, - common.HexToHash("0xbc84d86ca8815c05699998437ae3346b4eab36fd798db209d125a838f36e87b8"): true, - common.HexToHash("0x35ec10906d5de47aef9ed2345a497ab66b43f6cde66143b096d8a4742d0b0a82"): true, - common.HexToHash("0xf59a075118cd2bd3656fca2e09fc9a3bfdeb77c2a163bc38e19e6d4899ea1645"): true, - common.HexToHash("0x7956924e700f2b222dd7ac37a62072f28f63fcaa1e1013eb52858269c1d79430"): true, - common.HexToHash("0xc78da3f3078737aaba7e9334dc2467a37ba0451018f79b70f92679a19b1e7b1c"): true, - common.HexToHash("0x10e40c9a35f3bdd96490eade4fda07629811be44437cb06c01b0c50cd22d3a8e"): true, - common.HexToHash("0x76c9081590bddec4317a89bba9278af1a07da00e8cd10c3e09868beb670d5f57"): true, - common.HexToHash("0x5d3981dd24efe1b0374635f169fa104962070762d12b9833a6138fb6437cd22b"): true, - common.HexToHash("0x7eef7e1b5e70e6fba8a030292bc5df805637697d9c5165fe06460c56df71a175"): true, - common.HexToHash("0x9fc30fed7868b1420fb5a919e5146cd758dc403c0fb462f1f538e47e783fd71b"): true, - common.HexToHash("0xe7849ca65cd9b7155bc105c22ab9ca94485ecb844f84e21ef152556233cea0a1"): true, - common.HexToHash("0xc8df6b759d22523488191aedb3c07b1dda510db76c7b872e597b40670921f056"): true, - common.HexToHash("0x72eada5715a98a38482c8ccff83bde1cfd6e2422162b14484185b6a4e09a9648"): true, - common.HexToHash("0xd6f87ffae7cc4fe201a7b25e8811ab8e7d9bc6ca9a48a7d6a041f7070b28f7ca"): true, - common.HexToHash("0x11a39686952d49c12a667516585f3fb353b62ad89801b11f75d777107083185b"): true, - common.HexToHash("0xe3175811dbf3d6af124d8a4b9a68bfe4f7fffdaddc69938f2d034aa94db01490"): true, - common.HexToHash("0xd84c8f3dd0f0d313cee68bb498fd918cea569089995f4b3dd3b2a727bbaf6ca6"): true, - common.HexToHash("0x44e34e7eccda2cf06adb6d2681e2ef35510cd8f0e47341513cc3e2037ada4137"): true, - common.HexToHash("0xc18167aebef5e6e266e202a37ce11cc5c09597f1ebba71a38d84c6ed1ef311af"): true, - common.HexToHash("0x36ff3b2c45180ad547131d20112c72817354706d8536bd02767c30b1e10a7ca5"): true, - common.HexToHash("0x287ae693225c0a8a3162a1e96ad50ffcc149617448c13e65774cbaef1338edaf"): true, - common.HexToHash("0x3749e0f141b2a9bd8fcfe76ea5a115f160e20aaf008f01ea33cc0fbc1bdfa616"): true, - common.HexToHash("0xf46f8a184ea64733e4d475bbe245e64bc9cf91394e3fa433d6339b2804df82c2"): true, - common.HexToHash("0xe167f11f769c3aaac525c5410d308f79aa0e36d9f56e153dc352d4aed7709037"): true, - common.HexToHash("0x730240a108529b4b6895d3af36e2fc17aa11bdfca60374d20be1f0968508c852"): true, - common.HexToHash("0xa503f833a06554f030d25b3511554446f57fef0f8c92e0dcb5d95cd979e2b63f"): true, - common.HexToHash("0xd7979d4ec9cf37783cdb2ae264615fff1c241cc845a36fc4e4a82521beec1473"): true, - common.HexToHash("0x44b5c06b5301ddb2a93d2625a000faa2b306be7e399dbcb29aee39320c45e8a4"): true, - common.HexToHash("0xfd49e333d82c3a3a085a7204a18339695f50ad9fee16505eb5eb1904c1778e8e"): true, - common.HexToHash("0xeb2f493685127a7000418c06b6ab447f974c6ef93e62f63a0cea12814355fe66"): true, - common.HexToHash("0x905ea371a151c6d2ea12cbb5f27b5caf5f753d4aa968d67465d9b51aa027f8f1"): true, - common.HexToHash("0x9cb51927d3c99146786c6c97671bd9f663bf0262d8507aa721fa1ff275fdb924"): true, - common.HexToHash("0xad63ec31210aa1259a0ab6b38741aa8dcff4b6a2295f2c2fd9777b25fdc73c50"): true, - common.HexToHash("0x197854b1fef93c37859b07a4671a10456d8c9837fea9ffef618c2a251d686335"): true, - common.HexToHash("0xe2996484ac284909050dab5eaa7371fb62213641c86a3768af347f7e38d09106"): true, - common.HexToHash("0xbc2507532688e378320f04a54048d77d0eb929b2e07113964c5a7d63b69d9cab"): true, - common.HexToHash("0x31d6a76aa9afe3addbc11313d1343ab31ba652690c2cf30cf9067c08eaf01b4c"): true, - common.HexToHash("0x7985c6d1d368b7b667ddbf7b265c66c72b5ab2c3d209900e58c8516f007c4860"): true, - common.HexToHash("0x14d623ab73f1bceed5447f15a210bdfd012b75fde0bf0d8ccbf648af86309f43"): true, - common.HexToHash("0x80fb5304577c641094bdafbb8574a4a2a1a36c343d9e504515289a81b349aa85"): true, - common.HexToHash("0x7e67f14c7cfc7cfc6436ce6c22e89f6ea3284a2e3df1c07a221450cb0d880977"): true, - common.HexToHash("0x120cad8bfd9469cd150392571e51989b3c7a6f33d0c5e45ae0f4d6ffee664473"): true, - common.HexToHash("0x5755c47bf15ab83f05889dedc9a0df69af47d3dcb9415fc20c4add2e38712153"): true, - common.HexToHash("0xf491f7ed1ac2786694a93cac2b3c6f5f9d472a6f0ff9a5724281f3107f21a74d"): true, - common.HexToHash("0x34640a5042d37c08f86164475ce21dbf8c25b3de6132f2e43ebe422346919867"): true, - common.HexToHash("0x2d11dd936e081cdff73aca8a34b921f342384189379066b515b3e92837f3f3fa"): true, - common.HexToHash("0xe4e014963a8c4c331a907c226d9f8cd0f342457a457c824bf301d7c2ea0b36fb"): true, - common.HexToHash("0x0cac4c1ae829f3da7f3765bc52ca61d560df9df6dafe2d524cdb073ff63b1422"): true, - common.HexToHash("0xd21d8333a05e2f2f762afe66576cdff323a6fd5e96637f0df9d731e82533d7e1"): true, - common.HexToHash("0x00188eed7a5cae18ef4015d514d69aa8c29aad714d3f067ac72abe1deafd29b9"): true, - common.HexToHash("0x2861269d57210a74e5041e3f241dbf212ec1f503ead44f4ce2f32e0c00e2def8"): true, - common.HexToHash("0xd0e599f21b227f654c5108dbc5d930a388aa92f952e31bfaee8dc6c1ef8a038e"): true, - common.HexToHash("0x9f1bbee5ae1647cce935707343a4103b5d6d8b137913bad6820490309fbf88fe"): true, - common.HexToHash("0xfe91e9a13ae436d83a6b2e135b22711b7be880174c8bd10d465bdcc0b71e6e79"): true, - common.HexToHash("0x6f012006a8e1ffe2dafff62a053212163e6bc37765d75e6656c99e2ead8886aa"): true, - common.HexToHash("0x13ffbeb8de67e279e131b6a790dbc7060cb5555b59807e12f0ccfc211ea8f2af"): true, - common.HexToHash("0xa9adde41ca86ad269a2ef68cd84a674e77ec6e1a1bf463273005d405da13bd9b"): true, - common.HexToHash("0x3e4bdf5dcbae51468c606ca7195a644973383ceb33504fa202d448eb19abd684"): true, - common.HexToHash("0x0e5ebf7e6cc4a9eed1b8e7ed1db19f362824ffad59be472c99c58d6f33c4c581"): true, - common.HexToHash("0x3eac61058f737daacd496e7b88305737742e2ff25f8bfe44f0a6325332c77de0"): true, - common.HexToHash("0xb73cbbf659a9d9ef41cc8753012f9783aa14a952011456dcf8883b5a3e1bb14a"): true, - common.HexToHash("0x959b435245aa1be945e0cdf6a1ade8e5b839fefbdaf101d2d1318f5728ad6914"): true, - common.HexToHash("0x5daed8f71863c883ece03fc67628917ee3bfdcd22c9c42b93191214c0ad24549"): true, - common.HexToHash("0x8f24daf66c7ee64842e866c43b5844a491d8365856dd1f36b3dee4a08111a4a6"): true, - common.HexToHash("0x4faf4c1a513a93017d60814f25959dfdd0a09b38045c259449eadfdc9e21845d"): true, - common.HexToHash("0x5c7f177faed3f7c33f3307242eeb5669c966100ce007256ac21dc8d6f08ac7f7"): true, - common.HexToHash("0xb3df66512aff63ac7d2f510c2da6d24f3b9ea0e3d827156710f792e74705a82e"): true, - common.HexToHash("0x8c3dc3de6bf7285b17e380b804dffbaff9aa96f787640a256959c4be70c59f29"): true, - common.HexToHash("0xa46ad9aef315319019856474e1acffadf5086c52eb2687d57f0d40e1796eeed1"): true, - common.HexToHash("0x9ebbc5138703550e959980257a8878bb89557108cd78b458425b3ce12c36aaf1"): true, - common.HexToHash("0xa36d2ce67333b376b3a16eb03e093159004ecf71408a5e974fc132c010465ce1"): true, - common.HexToHash("0x94559ec0b58885c1c44630e3e93e26da8109345468311125c2342a3441451d56"): true, - common.HexToHash("0xed57a2a8cd51af66fabd75c217e44411c5abd6d1903de7e7846399d13c911661"): true, - common.HexToHash("0x86c2446c6dbd7ed0abd285aa0b877d87400518b05ab3f452033d9d435fa99614"): true, - common.HexToHash("0x5418c794493e8b859cb0d536b829ab960de7d67a383f9013ced7f6f85569f451"): true, - common.HexToHash("0x9a3f8a48d159f883d04555a1ce1b79c106c59d3e4bf15c21753c3d3325f49c17"): true, - common.HexToHash("0xe82e0a86aff33b4a646b158e0df3aadfa8a103cda835d74c481a2317aa0f8ff3"): true, - common.HexToHash("0xd325839b6c822341bc373c5c5ec31d90fb35e1cbaf4dad9a53885a4c0669818a"): true, - common.HexToHash("0x4ea8498f51a12f6fa3e19498e80d90c0dadbe9bbfa7d9c9decafdfca56be4bf4"): true, - common.HexToHash("0x55cb3efc402b849757679c771b673fd5c1c425e01e411ca9c69e3357d7c7adc2"): true, - common.HexToHash("0x04098aa6f9034290e49d017c2a4649a38fcee8c1cf143fead3f4764472a0d7f4"): true, - common.HexToHash("0xbb25c507aef3946d4d95f94e5c60c7ce20276e9747c2ed27ebb4ca9aed4b583c"): true, - common.HexToHash("0x1577624f78d55e24cccce5bf444ee0fe08c67c0d3277321b3c827d3ecb23c32f"): true, - common.HexToHash("0x73fa499491119300d239c6675d93729bcd750a7963bd98e006082f6ba1c4312a"): true, - common.HexToHash("0x3fec66ee3b795a7c760d721617b5934f0c5909a497c3489a95ace6c8c5790334"): true, - common.HexToHash("0x47e4a67bb9abce6e440afb5a472cfa343adab5700f0bfeb20ec0f99e19e86c42"): true, - common.HexToHash("0x5148e8081cb25a8f449724ba0efea33addf5abb62498552d72874bf4e3c30af0"): true, - common.HexToHash("0xe2b9b0502795a5326ef6dff545e4aab2df4ac22fbf3628540891fd5aba77de08"): true, - common.HexToHash("0xb531ab6d8798c36e668ca5e207bb4d972f7b3e14616b60d9836950e7354c9389"): true, - common.HexToHash("0x4af8ad8cc3b7693cc825b51441a8d11cc397c389eac3c6afe66e826a237f3d29"): true, - common.HexToHash("0xb49b1e9274aaf750b4857a398f805776d660a0203a739156e5754670f188438d"): true, - common.HexToHash("0xa4ce4ad062c95df815d15a89a22970252fbef142107535fa1f957a371f1dac5e"): true, - common.HexToHash("0x5a237ddac3ad5b2523f5488b994385b186f49696e5450c9cbd10509ced53e46a"): true, - common.HexToHash("0xbb74bdfa8cdd1431dff2116c236a58e262ca5755a1ee8e809a26072bf1c30051"): true, - common.HexToHash("0x8779ce21fe3ba998d647c0d167d669ad83e4105ec0066ac96f8ae68cef3ad60c"): true, - common.HexToHash("0xcaa1c67cc4fdddf73f71d0562ed43a1a74a57f60df4db37e10e8a493e3d38c42"): true, - common.HexToHash("0xf7b64ae9c49fef79c1bd9b3987c68b976add47e0f6f0a9f0626cf6f9f7fe2425"): true, - common.HexToHash("0xb9e805c7615e0b843ce925e87733113e73da1e78f6c28253c0dde3873e998345"): true, - common.HexToHash("0x5c7dd3b1fbaea9a8d697b47d8760b87bc174b9195afc326e46ba0032ee14c709"): true, - common.HexToHash("0xc7bbd4cb6f49e3deb51a05431af052ad337cafd7610cbd53e116aaad44757eb7"): true, - common.HexToHash("0x364e44011a029246491ac830fed04b4d37b5b4edb11f0289be27bf32d4d1cce3"): true, - common.HexToHash("0xa6f492972a2bd45232165534aa9536a80f5c530b9413182ad617c156060b1df6"): true, - common.HexToHash("0xdc7b30b23f6eed9d4c13aa1a38b260ab5c883948c89ab2dbce23b01bc810f9f9"): true, - common.HexToHash("0xc5dd7306738ce96009aadf520932a4586145002e99c0e48bcf30d245cb880df4"): true, - common.HexToHash("0x8de2d6d868da6a10daca368159c3cebb2e552d125086be069bd63cb2ad5ed143"): true, - common.HexToHash("0xa679e84f365ee8152b14ec6f3f07f25e4f3795dc5d2159d70a4b9a78c871520e"): true, - common.HexToHash("0x135016eaa6878fc208ba301717a954620fa2c1f320ec0ea345dd0a4c96359c1e"): true, - common.HexToHash("0x8f789d4d9778c2b25c58d0514fd5c9f7b220cd801bf961f01716b24959bd5319"): true, - common.HexToHash("0xf79dbac601ad6f0e726ac18412e096196dc9e354781d8a48de61353b6b33d2e2"): true, - common.HexToHash("0x116d7f29421078dcd94868612eb75a42210b2a290667b2c8c778378e0c28a597"): true, - common.HexToHash("0x6c88500a58cb3aa9b83a17734b9aa24f845fda1a2c019004057ec579e9bc0bba"): true, - common.HexToHash("0xf434a986eeff3fa95f5907edb10351dc48a1d1d4d3768dcf12a85daad861675e"): true, - common.HexToHash("0x96d564f77ff085c60b5e9c0c7764792cb3a3a4bb4cf6504b61f3a019402aebaf"): true, - common.HexToHash("0xc74b10f6419efc8d58821358b81f580a77a4bda6ede13e356156aea6acde2b93"): true, - common.HexToHash("0x558d31ca9bf9c8877f1eed5e11b9a992cfb24b99c238b4425a94e3835de4193a"): true, - common.HexToHash("0x0921b7083179c9ae436004370a2365a029c19346ad5c5024cff3c944543010d9"): true, - common.HexToHash("0xc2c166a2c018c39f7f7d1409e082f866f601128af1fdb7b87139a9e5cb1c5e81"): true, - common.HexToHash("0xf60c10f80618f77a81b21dc7a327f03c1ba7f91ed36191c3079de23d5363c79e"): true, - common.HexToHash("0x22fe04999a0d6d9715015f7e18c67bbac970bcf35900d39e615d5adf55266c3a"): true, - common.HexToHash("0x8323f82f008b432b8118fcdc21c8754ec73417862153f83a7c1777d528f331cb"): true, - common.HexToHash("0x403628e60ed693977f97e8d5d1c14a60be3a246485a9b170f5f9a2cca432a29e"): true, - common.HexToHash("0xe13b1796d2f396aec33eac5a854b2f694eb9e8687b1be4ce5ad5c652aa334681"): true, - common.HexToHash("0x29390095decdb37960596df6747e08339ee8c809656702d153152f5858feed71"): true, - common.HexToHash("0xf48feebadf94da5ad08d45b92a13fd986295738378f2dbb27c9fb9df930a5162"): true, - common.HexToHash("0xa7e6892f75013028ef80bf1b91900249cd4fc46afefbee7159618136b1dd900e"): true, - common.HexToHash("0x32a5a1b9634d5d8d2a16f9b5613769280a49b3aea46a669df5b265db8af53fa7"): true, - common.HexToHash("0x87caee3e8283494d3db50aac1e2d6429b1e7c1428baa7174ddc9af44deb1e578"): true, - common.HexToHash("0x9c2cc59aefef78dc8e6a62ae74d324a3e25eba42fe020c383fd7fdf48455995c"): true, - common.HexToHash("0xa3e5a36c48d7b2a1377d66c934d27aeb618c0d853273fcb9c08971c081ebf766"): true, - common.HexToHash("0x9f226089aef74432623450a265e230b0d4beca6b55b9870227e66e34ec235283"): true, - common.HexToHash("0x0b158d9d13bc26b19aef473c935a37b72105d19aa878a43194f6cfd0f40194f9"): true, - common.HexToHash("0x27b585d30df4b9d67eddfa9424a7a1969a02b94cb7f234b97537dcaaf407dba5"): true, - common.HexToHash("0xcc3bd14905665fe3a048e92feb210077f57d431ee044e8b4e24a5bd3a2db6ca2"): true, - common.HexToHash("0x1ca9c73ea0d816b048d7d0364c5b5ba02fa6ebeb3e9e5e4fdf9debbe2457cb4e"): true, - common.HexToHash("0xa3098ceeb25e42bc828e7813a75655f6502334edf1c1396430d7cce90467765e"): true, - common.HexToHash("0xdb1c1c8415da6a53715dbeca302e52d326775753e2d48950dd44d3c176bb2053"): true, - common.HexToHash("0xab22a9f0e4a13fff66d4be4a78fcf02833bbc75decca7534402b12a1bedc6588"): true, - common.HexToHash("0xddb0859995dd1d51d7bd41fcad6cc15dc2f0fcad4a7c9ab3c5356d307ed4d1d6"): true, - common.HexToHash("0xcb597e1b3d8cee8745c984d75e2d20af5aa7324700426b4aa46f53ef8f455725"): true, - common.HexToHash("0x2cc249c41395f2b91c451e87871fab94cf33f4077d235b0f56f3bb9aefb346d0"): true, - common.HexToHash("0x4b9afabb30bb650e3e165f785d1cabc38f3f68dc442b62b5934143f711ea7155"): true, - common.HexToHash("0x5ae04878ce079d976216604547f8a8e6c96d5c321a5516dd703bc93d6aa6ddf7"): true, - common.HexToHash("0x54a97ff2ea37a1632a0b04e70c77c50f20c3a0fe18d8ec32a9f22747f635cfa5"): true, - common.HexToHash("0x664658c0a3adceb545183d44e89bfcc904f4f2308be596eff2b07c0ee99c1137"): true, - common.HexToHash("0x7be325731b76197abe22d8f4738f2763f334744158e9037f67887dab9bfb070e"): true, - common.HexToHash("0x644809888157d878754794d9fa7b8a27578ac9b68077a9380c90646465b45946"): true, - common.HexToHash("0x24f766e44d3c0f0a323595836c3a6268a262d9918da7d0588a33c517c0afbf5e"): true, - common.HexToHash("0xbb8096a0a5e858decb45c3f512a5232b0360d5a1170fdc3c4801c29ad86cdcbf"): true, - common.HexToHash("0x0307d2c94d42dfa74d95c3039cb49d1bd85b93cf26476d1201ad344dffcbfe01"): true, - common.HexToHash("0x58fee32c81d5ec37d200b0a43ade28f8cf0c94a69765195f7a2bdacff9eb43d4"): true, - common.HexToHash("0x7c13e6b17e186f737681cb008f3c171c2e4fcde00475ecdb11138666fa80946e"): true, - common.HexToHash("0x019d30292b864eb0dae9b828424bc1ce5f2a869886e5b85d6d293d16de52ed3b"): true, - common.HexToHash("0x74d8f953841d55829b9bcc80a4adab4c86d0f50b26e756ed6f41a8a46f7584ff"): true, - common.HexToHash("0x9322af3a7e40a11015c05178bf550a09844770cf497ed6d184f5b1be65c4f563"): true, - common.HexToHash("0xf225a84da6f7dcb125e3444d2f804f75b1e19ef438636a55c4b99a87334524ab"): true, - common.HexToHash("0x3b32b55627b2a707b72483f3cda2c99d67f2f87e5cb792c3617e5c731965c68f"): true, - common.HexToHash("0x3d984d678e350372987b45794302c35660b2608ff4e92a614bca627143f4063a"): true, - common.HexToHash("0x1ea48685bd838b6d59a63a7471daa5639edb69a5f46a221f9fdb1c5e8c4ed577"): true, - common.HexToHash("0x68e829bd08f7add5503157a8b4038887ab9dd7484c4ba50e2d93b1eb80a621db"): true, - common.HexToHash("0x0c9add4cf3c10b45025de160a9d086367325142ac9e5c753ece8f0f600db372c"): true, - common.HexToHash("0xf3558027453c4cb20bce11b0b8a4de9c768ede0c9173dbbe77662384b31c2aac"): true, - common.HexToHash("0x43817ef2a6a094a56bd7adcc4b375993792b5ae351eacaa015a2ff10a6f97911"): true, - common.HexToHash("0xaa4e621b5068a7c2f44f0bd8dd0dabed71bfa032e27a2115319bda977d90ae66"): true, - common.HexToHash("0x4591abce59c6d798c0c732c7724c50ddaae403e98128c253a571bc9e4fa010ac"): true, - common.HexToHash("0x4045a6aee00730b321ff296d4716300b1382c7274ea9046b757157c42fc22b62"): true, - common.HexToHash("0x98aa924414121ba1cda33e694c6a03ebf8ca0d2fd9563dcf15fe0a631d392f75"): true, - common.HexToHash("0xaecb23bcef41da6c0b2fccdb01a4dae992bbe34847997258dc21ccdf0604325b"): true, - common.HexToHash("0xf10ec1850bb750ab09b8a650c0b72105329f778a08db6d9b8a957290ea3dbcf2"): true, - common.HexToHash("0xb89c2ce69cc6ff0be43bbcf48c70f57521311936f64d7f343eb0b09e940e5941"): true, - common.HexToHash("0x679b6c1aaeb1d38ffa9c83f36e80c9ef3297c84ccdfe9267dacefc0636389e11"): true, - common.HexToHash("0xa4b400a8ad13334b109db6efebb8342cdb321e85c7388a708cd361e996b9ee30"): true, - common.HexToHash("0x2da1d9125b1001f0ce4dc2b070552f99c7cf8a2a686cf2ae1a67aa4dff746a61"): true, - common.HexToHash("0x2651fdeb80c9591d4877cb5c0c5d3e0259e3c5c32475cb7d8b5f6235bc9f02da"): true, - common.HexToHash("0x580ca2b4f2e848052f3c85a28ba265621a92066e08557aaa1c78be58cb6e182e"): true, - common.HexToHash("0xb96f3c286f755780d6104c8e8bd98d976c7d1aeacf46b16b90c9ff691d092504"): true, - common.HexToHash("0x2dc6856c8bd27abb560529d7bcef98c98012dffbb1f55a06fc634d07b5b180de"): true, - common.HexToHash("0xd6928904a59a055a657f7acdcbde4673764e0cfbaad4a30e4d517c7ebbd951d2"): true, - common.HexToHash("0xa088533f71cc59d05fb9cce09880518a0ea2a7f330784cf5bbdafaa8f9afaab5"): true, - common.HexToHash("0x7fdffb81898938133e6a305ffd71aeef90c4885f180f04d1ae5d4c6161c9aaf7"): true, - common.HexToHash("0xec8b7e75a569072d8f8c6a805595a8f5370e724159bf57f0863cf252d83a4a14"): true, - common.HexToHash("0x7774168918bb42147ef08981a7df827784293c616e95967d31db685c6900dcfe"): true, - common.HexToHash("0xb8f775bbfe881bc96102d61a95453aea29fec7d1214996b14496d11a5225ada3"): true, - common.HexToHash("0xe1b8b988bdb5507634c362d95831b8d0270a98062668bab2e96d5af4e303763e"): true, - common.HexToHash("0x64447ab904426d6e390bbe2fd164a380df5136216c128248d16e06be02aaf450"): true, - common.HexToHash("0x4e4578299b654e80242bdf759e023b5ac2ae0977059ea8473d453ed09858d74f"): true, - common.HexToHash("0x992dd4d430f62382a90f4984ec6511bf6df67fe8004c5e22356eeb47aa55e16c"): true, - common.HexToHash("0xf961e5bc9d6ba88718b8635d0df92ed3671fb178de30cacad475be59ca003f53"): true, - common.HexToHash("0x2ba2dec5ce91965da2a6caafc8a5684a1ce0df2e65e87e935041c7c7f19222db"): true, - common.HexToHash("0x2e015ab0d44a1c190c54cc7bf34a29b5d539dbee9bfda4d199c4cfad57808b66"): true, - common.HexToHash("0x17b2336d75b78dd71837bf5ba5d676104895cbd5f40bd504842d7fee80016522"): true, - common.HexToHash("0x33acdc429a67222fcc4894093b49e5365f63fc37801c9a64c634048b0df4a90a"): true, - common.HexToHash("0xae833798ee78830b7d3f84fa16fa3abdaf7a41a90dd409e5ddc109fa1f0ea860"): true, - common.HexToHash("0x35904fbc4a16b127d89945aedd593a0bf9adf93c4a045624b7ec5f55c67f1da0"): true, - common.HexToHash("0x4b19166a54e22db46b71227a4ab279f4542c4f70b22e69352f10fd0081b94b2a"): true, - common.HexToHash("0xa32eb02e282160f2bc1a5a2f33139557d752192bfd190a2c174c62c0982910a1"): true, - common.HexToHash("0x9261755bf0a8dd7dc7e6556aaa80f261608797e8a6b627db1c5b5114a4448744"): true, - common.HexToHash("0xabcac8ccd3068316d81bb10f77c5be28bbec5a1fdbe436ad54d4318079ebb32f"): true, - common.HexToHash("0xdefa69ffdf9f0d3489d00f6fe4306027a5bc170c7ef847317a8d2a31966f685e"): true, - common.HexToHash("0x0174c0efa366c77d5792804bf7b8dc5d638d7e0dcc4a7967be6f4f0ae8d35d2c"): true, - common.HexToHash("0x79e1c4e99578ee69bbe4aa85ac0644712c56fc94c9fc14c49a98cf9982b8505c"): true, - common.HexToHash("0x13d24118a21908a2306bbae26a9f4f4aa144c45faa297b9c3344855e38b0f70b"): true, - common.HexToHash("0x466c7cb102eecaaada5a9819f42ec3c9dc06680dc8e8d1a1da0c199592ae91e9"): true, - common.HexToHash("0x9b3fc7b674e243d6e54efc524692be1835319410e3fdcde232bf0bec4d8f6dc6"): true, - common.HexToHash("0xfa45aed7b12c102058c8377c2c0a9255054d1919e798b0130249bc36fe58bf1a"): true, - common.HexToHash("0xc73b06f4b84e1b0a8dca5a115e811a44656124dbd7336871c1447887ee726c08"): true, - common.HexToHash("0xec38073ee5801225505a3827e3e2f7bf006384b1a92ebb2376e37d92e800d74c"): true, - common.HexToHash("0x3736d7044abbf290365e01ffafe11cdf2fcc41d45e419a47e212c706c5e477d4"): true, - common.HexToHash("0xacda8d7a57f98dfab41783a6a34eea5c6afbb6d99700c1969fe75ea731698cb4"): true, - common.HexToHash("0x7f7aa348e82b01acfb6ba40466b076cf916b3809769c5efde65fc7092fb3739c"): true, - common.HexToHash("0x6a77df91f75c3eceb339e79673da046212bd877d2bae6474ecae0f9e5c45eee2"): true, - common.HexToHash("0xd108777b4670f99f7016a7608868d7d21fbe4cab148f172a0430f51bf685fe07"): true, - common.HexToHash("0xe3bf74b6214f59aee5131682206c7926f689accaa5b77547da667d4e13d9d1ad"): true, - common.HexToHash("0x41436d990f69217de9e98b33bd04d0e743ed8772e4b59cfefa46e3e763e029e1"): true, - common.HexToHash("0x9d73179fc13e229dcaaa44d859a26d82ea29108d1f586bdbc46a99f1276cf27c"): true, - common.HexToHash("0x40494b9b8c1af4adda88cebef5649c366ae9cd143280dbcfe86a9000acabd50d"): true, - common.HexToHash("0xca101006d02f6b0c9c2a80249f8550ca3e2b26ae779275c78ddafa0112f58c00"): true, - common.HexToHash("0x492dd41d8cb7d0fbc4190c984fe4c82f6ab4c1354fa7044bb4cf84aefe52cc8b"): true, - common.HexToHash("0xbf3e4777e0db66ce35df005983f8292fc44b7c99f13649641b6defa77152cced"): true, - common.HexToHash("0x7610e9de9a2cbcc908b9309c8d1a01704af10951f25e5aff62b2048799f730dd"): true, - common.HexToHash("0xd15c50dbfbdbb75310eb975237dd55874e1f300474f1f4ea71632d248280547c"): true, - common.HexToHash("0xd1dbd8ba5c88a80b8c89bcc9a1da619d17fdb79b85031739bea09da198ec3ca3"): true, - common.HexToHash("0x59ea85a9f876daee9b51b78a790fa0ff8f34edf321e0325db8b4be2415f5c5c8"): true, - common.HexToHash("0x682ff0313b13e8ad25d3dd0c1a5be010c0471ccd0b62ce4d14b6dcf7a4a5fd56"): true, - common.HexToHash("0x1c2eb8a331f714e1aa6efe49113062a29bcb7fb559d262a893b614c07ac4d61b"): true, - common.HexToHash("0x137a8e6d3c071a8e288fbf4130c9bd86d1730efb6a9eb728c2addafe9b56985e"): true, - common.HexToHash("0x1a513c4936c6fcb84f70c16f5e602163af9743c7d4d40da579b8ebfe5852806d"): true, - common.HexToHash("0x0c2a25df72dab56915a0ad9c06de60a367990f740eb05b657d8a354a11a77e1d"): true, - common.HexToHash("0x40c480e83db0786f8cebeeeaca21fee8ea49117f5d443d89b38171db51846b93"): true, - common.HexToHash("0x9d931cf2c993e0fd8b44c30dd9cc769a83e2fb927d15412da05756b457bcfc98"): true, - common.HexToHash("0xebad9d2137b55bd665b368cb4a23e81a1f9dc6bcd3e0b84a52a33e9b6b6e356e"): true, - common.HexToHash("0x6fc219c0ad2f1d08851140aed96b09de38fda461b51190726876b821887b29c9"): true, - common.HexToHash("0xbceb384ac4449cbc8cb33bd2b9c507550dfb570ae6fbbb82a73e152ef0221aef"): true, - common.HexToHash("0x30a55fede68984355bed18ff06850ac61e849b8e24f30fc95af25a3d9958b421"): true, - common.HexToHash("0x18366000b11f9fd3abb83d1e830de34478894dda619b3f8bd9f6796d49ded005"): true, - common.HexToHash("0x673f07c909811f596d87e7a747a3dac46abb04ad1d878e37e615e603d0b0befd"): true, - common.HexToHash("0x12374667ebf3ae9d57175dd8dac2224367b3fc0bf66431ed25bd9065eb12a79f"): true, - common.HexToHash("0x274c6dac3e86a5780ce280a7b634877fdfa98c165a289796c428947708776273"): true, - common.HexToHash("0x18838f979670d8277226e7329125c2d1d183b89280f89715150389aceb627904"): true, - common.HexToHash("0x75d308a8a1eee71154b59f91fe7a101a57c87e7d3c449a409660f3f1742d3832"): true, - common.HexToHash("0x1ad457dad409fe2c58ad0d46169e406a9105961a2fed2e44076e36a5b5566424"): true, - common.HexToHash("0x93637510b94f57bf57f7012d9adb5faaf263bdf2e62275d8bd0409ab2681ade4"): true, - common.HexToHash("0x51748a64a2d370847630a453f70f681c884c6fe8f031d44e44b0054742955797"): true, - common.HexToHash("0x88ddfee90d3fedb92238b650cfb2d4104ed0ac7fb29ba9617cfd1d696054206f"): true, - common.HexToHash("0xe085e4386d6957a54fbb3f3d91375376b91e380e716750b83d008690187fe277"): true, - common.HexToHash("0xe184e77ad4fa633fd0c956f9155a49ffd142613dee1edd063007d5b16cd857da"): true, - common.HexToHash("0xc8b1c649704b6386456250d488389bf9585134336a86d300b5005115a0bc1af0"): true, - common.HexToHash("0xb9554ac0896e61b11056471e38638b2311d302e621b27866bb4925186562a8bd"): true, - common.HexToHash("0x0caf059eba43e9d66475ca20e48ff0ee626df61916355883be8dba1eb1424cd9"): true, - common.HexToHash("0x9aa4cc9a40454a900172cc04ef64a0ee4ceb63a5aa3130e66a61a19ea0bb632f"): true, - common.HexToHash("0x88ca029580fefad40a2d66ff9e7212d6f4dfece41725e6ce584a7fccbf3a6373"): true, - common.HexToHash("0xb1eb5ec13bcf3ef29c07bdf3d3c8bb2ba2c486e5f6b140093d919693ed09d1c0"): true, - common.HexToHash("0xb85334016c3d7ae006d6b1f9a2eb1f2736294aee09d074154c5f77e6da27312b"): true, - common.HexToHash("0x7f261e2c185c41b31836ff5a0643713b2fd9573a19110d70cdc4fbf1b2b68ff4"): true, - common.HexToHash("0x24e9a9a79ca8469f1b044ee5ff37df9972d9ecea0974527ff3aab9ceb3ed8250"): true, - common.HexToHash("0xc85d5617c1f22a732a403a426fceb3d24d025c057d72cc78a68a7cf85e9708ff"): true, - common.HexToHash("0xbbc3a64e3d077e784e95cafcefbc4c291bc05f3dbc49d546e42f767555dd29c4"): true, - common.HexToHash("0x24b38ce7a2216bcb417f4b8488f6c9d560b469a25b7f704f86142eed098ee2a5"): true, - common.HexToHash("0x669dbbb16979137d68e4c73407c7394f122de75726de3531b014a1ff5a0ccd6f"): true, - common.HexToHash("0x8865855bff7d9a45ac2426d79f1ac2410a5b6151e6576c8628d2d1e4b6aacb49"): true, - common.HexToHash("0x6e011a01761084e1d4a33a6bd620d5c6f91f301bd013eabbce6e97cb2a10a8d7"): true, - common.HexToHash("0x935f3549df487235fb47f011caf2b3cfe99a6b8b077fcb58f5d786c962e9bc57"): true, - common.HexToHash("0xa11501ea0e5dc389db2c35f774b23eeebf9af50de2122d6e47273c292ecfabeb"): true, - common.HexToHash("0xf346a17955aaa507413ee621d48d9b21048354961e6941db9f8e6f537e33c99c"): true, - common.HexToHash("0xaa08ad8679a428fdca5883158394d9f7796d1689b94e3185e50f62cde1e7b34f"): true, - common.HexToHash("0x37dc8d2451d0722a85e129e647a4d0217df529d566f04c2dd15997f2dbbbbf2e"): true, - common.HexToHash("0xf019b8bef96efe249e072c1cbb47b42a6a0659462af617fdedd66b365cf0f959"): true, - common.HexToHash("0x1644d860df7a14fb2c1d2656c6dd5c562333127cbcbbaee8dca77f0ea485a34b"): true, - common.HexToHash("0xfd437cd9b3edfbe49c5dde39f6bd05cf78bb5756a208f43211d39414f5c837b3"): true, - common.HexToHash("0x80b162b84231d409cc6f3b88f3a211b1f1cbc9fef35b7139bcb2769b753c354e"): true, - common.HexToHash("0xee12387f4bdaeb4cc816a4012b315e501ea8f4797f2a6f2c8227c6e6d79d039c"): true, - common.HexToHash("0x02f99036ce286e90d720def1a6680ab89abb6abb6f6d94bb73d427643ad6a353"): true, - common.HexToHash("0x9d652628d11d620196515e1c2e857c3124b6ca7a570331998ccd747d9d9a131e"): true, - common.HexToHash("0x662f9dcdd312ddac36a8217ed6cd742de2e525f7c99c269f17b12cc5d53bc446"): true, - common.HexToHash("0x49459a81f33f5947f1b52b958fc04a132eec7af5391a98ba15aa3d86711fdfa2"): true, - common.HexToHash("0x450d162d15418279ed2dedc6909ea55446e7e9a10d20c94a9961436f4cf09592"): true, - common.HexToHash("0x89a38dc0f68914a242a044f95f8d421f1b20e2e2299d3ae171fb1e2aecaf9006"): true, - common.HexToHash("0xf75c78540bdd2541fb8f028d3e04cde6d84201f48c8ada0ed783c15ff7ab1157"): true, - common.HexToHash("0x6196db3a74c50a86db8913f433e246bdcc2423e6d378a2a8e85a3a9ce6af54bd"): true, - common.HexToHash("0xfecc689ea45a5e4a693cdc431e510fefab9ece8c97d8806c81a316d0a64ed10d"): true, - common.HexToHash("0xebfc53937476d7ce62768bb9307f01730896858bddd48510a21510d951b2a472"): true, - common.HexToHash("0xe5e07e0d87adba8c5991a869d0653232c347509ac129cd943d51d89d915e3a9f"): true, - common.HexToHash("0xee25646265b580fa83b07722733cb70ef103a1e4d34fca97d03454dbdbbe3d55"): true, - common.HexToHash("0xfa8e587f146d3f4e16467022d34125b9616466ac920dc4389ad5c8a1d84ea2f2"): true, - common.HexToHash("0xca475ba4ddd3a6a8dd6dcea96d59a1f2981f4d281362d18f93ad4c5928dc7d16"): true, - common.HexToHash("0x272de2f53d4911dbcdbcc3d978464cc6bd4e151966dc678efd9a52ac98096218"): true, - common.HexToHash("0x6ebf770d61ea66b9e81c4edc7624fed096625ffdf2577fdafe133666c5d85672"): true, - common.HexToHash("0x3a2d8be92b85706332713b9278c8741c5707abc853a5c88136dd090365ac5ec4"): true, - common.HexToHash("0x0362027bf0328b91d644fc6da020f405ff8eb8008efeb7f06a390704d00504df"): true, - common.HexToHash("0x2ed4b1ad97f73e921e39e56ed4fdc4ad6c6b1851b535b12eec03d6b7002f34bf"): true, - common.HexToHash("0x62e492d9891491c42b3ad48b2f42d3b40708b0229b59d853e59bd2e80348878d"): true, - common.HexToHash("0x35983bcb1b5583bac9f9afc6ef729f595a21b0c7b619627f44b6b2436759794a"): true, - common.HexToHash("0xccacad508a79ac31c8899486d47fad96bd62dbfd26f0a1ae500cb0daed077b47"): true, - common.HexToHash("0x02ad02d5090dbc6717cab5510f9cd2935211d9ba1f203ad893d05f3198f7d850"): true, - common.HexToHash("0x5727a710605e72602b457c8ccff360396c3d6c0e7d965cbb114f88b394f45dc0"): true, - common.HexToHash("0xa5db2da0709cbb044213c13beda8872d39489afb1eda4f658cfa1de8f1e51026"): true, - common.HexToHash("0x53a65fc73e4e71e1795eacaefc1627f37565642dba2302f4bde47fb376e8a15c"): true, - common.HexToHash("0x80bbcad0a1eb0574cebcb91ed1bcb6da462775c76b9ed3eaca536d0f20c5ad0d"): true, - common.HexToHash("0xd73953ff37a916eba5a4e91953a3121fd9fd0c537e9fb32a8c9ae5a03aa08868"): true, - common.HexToHash("0xe0029bc05e2bf4b568c80ba3d3ba035dee458f510506e0e61265ee2b9616cdb8"): true, - common.HexToHash("0x776fcc370d1d81feff43a1328f55ea12c7f710af4e63256b0747fde0c1bec0a8"): true, - common.HexToHash("0xe010fdc6f78c87aa9e1042e0923b6bd5ce29b9295b945c360e54b0a654c3e85e"): true, - common.HexToHash("0x8cf7aa3e00a8e4f3d5e8282129d35ef1c63c02cbbed5d96140e110768fa768e3"): true, - common.HexToHash("0x47a055774e93a2cec3e721d312fa6204c9708e678b177c18e7063e388e48b573"): true, - common.HexToHash("0x257f5cec2b78d3252f19ead7839463ff23cf7e00ba522b0ab6b6656dd240185b"): true, - common.HexToHash("0xa8bb24ce4ddde075904c012c235e19abdaf3edb44809b3df0a396b984ed0e1a5"): true, - common.HexToHash("0x50d758cdf4fd6052f09fc45e9ac255344af0887f82c169eec37a48647860fcd0"): true, - common.HexToHash("0xeb2ac1fc4a4eae109bead0f834f5afa6f305252a94704ec596d158b152c50515"): true, - common.HexToHash("0xa68eed2ea1ac7b5e8d34502e6fb2f17d4343cf12ceeb76264997d61b76fb183c"): true, - common.HexToHash("0x4c7e998c8242a3a9d262ad3f64b15f471c9e5811d817b383c5f158bd8e17d879"): true, - common.HexToHash("0x053648f06374927b8a7376977682dcee47139597a697bf143eb024b551a4e53b"): true, - common.HexToHash("0x461bf3cd22b1b8699071461dd1558275560e14e6cfac383c27d56e019524bbbf"): true, - common.HexToHash("0x2ec5de9d644144e406226b941c8426b7f2e6621006d2e356dabaa1dd09f10b69"): true, - common.HexToHash("0x49484c7351991de35289526648e1b06e0cd1b51d0eb98a09006d5353ed6901bf"): true, - common.HexToHash("0x1bbe480eabd19758acf28797c144264ef76755ecdf259d35fee025009b525104"): true, - common.HexToHash("0xb812c6823746b86196fa3bd0636542ec2f94c36a010a5dbb001fb6a05e9b44dc"): true, - common.HexToHash("0x5e121242b106f51e15ba3cd2e980c57f459b3a5f45ad10d72033e9a224faaf44"): true, - common.HexToHash("0x92d357f86738b4533b225274b4b6fffce621337c6536802c2c079efcaffae5e8"): true, - common.HexToHash("0x35f1ad7ed12629a217b3ca68e4ba806dbcd502a1cf7373915f36b61e9a984085"): true, - common.HexToHash("0x4431e670d8bcb3bb65d3df436f1bd0ad54cfde220bcfb912eb04f4366e107324"): true, - common.HexToHash("0x4bd99c628b3fcbbc55ca1fd5be5af4e7c4b52e42c974b0a1a7b2e65408cb570f"): true, - common.HexToHash("0xb1d749d3b815fb24dff14c45832df10789a89d1f13cfff8056b0331be92aea91"): true, - common.HexToHash("0xc4674021d84d854748115a7b54fad4367c41b6210ecbec1421a7646fdcaff133"): true, - common.HexToHash("0x411dbc03c30b63c656654e178c90e61355cda13928f11d26775ca276d643065e"): true, - common.HexToHash("0x79e8bfec6b18ce9fea97fe6eb4e8496857b97314c86248b731bc0b6b62335674"): true, - common.HexToHash("0x60442c129708a0f8ea4e28f18847e5cd018b0ebd749cadc0d14601894910fff6"): true, - common.HexToHash("0xe12b9c16fe509b7900d429e01cb43548fbfbc85e9534fabcd8947812e8fcb990"): true, - common.HexToHash("0x2c04147530633f87b997e4225c9165daf991473400aaf1b4e3d53e533fc9563c"): true, - common.HexToHash("0x11f5d3b6daf9b2a09963d72e0943be9cdeb8f69a5aec70cad2d7a5825950e688"): true, - common.HexToHash("0xac0711c68acb066b2638a921891f1fea0e31202def15e69a6f1d1c05a0be3141"): true, - common.HexToHash("0xce1a0772f43c2ca83e4a5fe8f03960dc7a7be60cf558cd5e8970f050b1879df2"): true, - common.HexToHash("0x5155083378cd5d9aa5ba0440589d74a9c37260d86706a0a02d93b209690562da"): true, - common.HexToHash("0xf0a79d8ee5e566edf0ec81e3970cf09f481491b35d0ea0810ff94f81a26b1f91"): true, - common.HexToHash("0xe0b34d695b791f31a6479ef3841284fc9d6e4acb03e86ef4efa821258a760da0"): true, - common.HexToHash("0x5c81962e46fb903d2f2ac3f61b7fad6ca2659e96251932c27b328ed74527817f"): true, - common.HexToHash("0xa5f036e86b6c5d8e5808919f1c0a5b7d1e27b042732c1116a0da9d72282ba6bf"): true, - common.HexToHash("0xedd1d538664b2cf5fb2379f2dd2a51c11ae39b6c0929284ec3a8c12f37c660e2"): true, - common.HexToHash("0xa8faa348ae43c8f9e393b91e6ed666301bbb56bb176f4ce4df178325545dd779"): true, - common.HexToHash("0x30dd97d4946827a22c8dd35cfeb1234a46e2deb0531acfd0cf8a9dfc6c7ba52f"): true, - common.HexToHash("0xf73f9eb3ddb31df5eda6a8cd921ba13346bf10aec720a51f6e67978c89a84e27"): true, - common.HexToHash("0xe467c2766b7e63fca4f231848d9d809815db6c008cc2183a6317e32fc79b3546"): true, - common.HexToHash("0x923638c4b60ec8c22479464e98c87edcc9ea90f2665812e7dd247f154105cc03"): true, - common.HexToHash("0xeebfd036dc2698411bca6daaa6f5f924bb8de48cc6622238dcbf1c14e2c36f30"): true, - common.HexToHash("0x96436842303bf488a17aafc0dd7d4ef730a36973b4316d88f3b3b41788597fe6"): true, - common.HexToHash("0x0e7f6a80c2e34e2eb2af987e10cc8283fc4e4c0ef0e46a65ef73fd6b622db405"): true, - common.HexToHash("0xca7cd4cc52fd7b2eec27e925ad974197686c691f0b354fe686e03aa75f70755b"): true, - common.HexToHash("0xe4b6880c9afef3a795d77d8bc8a1f00baddcc207a2e0314e34b98b71fdcbcdf1"): true, - common.HexToHash("0xe086e1ff190e8b861d174409d30cce1575a5a67ddd6caf795e65188d2ca7e284"): true, - common.HexToHash("0xc7a438a6b00b0f503c1c193dc30b32095159302991ddad2e0d7b4f485f70a560"): true, - common.HexToHash("0x67c4d3573afa51d5922200cd9bb1611fb861db6cf0afc961dc31ebbf0ba11508"): true, - common.HexToHash("0x7d4ac5a49b6c0a6d35ee93f61458ee907c7a00c5d76140af92d7501d0ccabe1b"): true, - common.HexToHash("0x3ab4704c4f2fa7e613e054407c8efb359457a747e771501fc041f961ea21740b"): true, - common.HexToHash("0xdd2c9934a338812cbdd9c30015acd45c7b04d836a6d64bf443ab81f0432526de"): true, - common.HexToHash("0xbc8bd5d5e4e6b78b204ea99fdbf08dc4130abb2de0e9e4a014d14491a919b2aa"): true, - common.HexToHash("0x946ee7202078c7fbff5e7fba245aff144bcf06050191970b905758ea63e27509"): true, - common.HexToHash("0xd829e38fb890ac7ae5cf11f2fe2d09a244ff95c120bb3ee206f7d33ec7ba991f"): true, - common.HexToHash("0xd3946c50d2ae1980aaec0ffa9d63a1657671b0c7cec65d064be296ffbf40cf89"): true, - common.HexToHash("0xefa9dd053a39f8b29ebe1167e14751858c739c8c0158745b0000ed4a34de6296"): true, - common.HexToHash("0xaa224e93922384301555ac9dad3dcfc523e5dedc3eb697e3c49a3e21f539d17b"): true, - common.HexToHash("0xa5c45aba259e25b3d7bf9eed67970edf986999e9705529338bc2c7e0426b7418"): true, - common.HexToHash("0x98d6111e90fa0ac8da016f1804f15cb8a2f7309341811f676e76eaa8fc0a6a00"): true, - common.HexToHash("0x6a9cb5fd84ad327d2f0fefb3703eacce1e4ab1309333af1aeeaf9186b2d37479"): true, - common.HexToHash("0x9f74db9f73e1c3f14bf0baac76a884c8f091671fcaf4512a13d7f8517c09f16c"): true, - common.HexToHash("0x94402db84da5ad0730fe0844ebe62ea39fa00d057847725e8998781272daec53"): true, - common.HexToHash("0x621f0819af062d02d2d6a83507d7833e9e61d88b9b133fda9f8217af79563d1e"): true, - common.HexToHash("0x1a391a2e027d111b9e7126736d53485b26ea4e20150e2885616df4f789fbdf82"): true, - common.HexToHash("0x3ebd785fcbd60629f6b693b3a3e64cefda87fe2881362a0bafc5e505bcd54d6b"): true, - common.HexToHash("0xd9179d9a0dfc466884cd598da97c40186739b4e3f367156c137dcffaab68d09f"): true, - common.HexToHash("0xf4abebb5dd36943b5cdbff98b86dbfd86a65bf8bfeabd9f33adc689f2e4e3aa2"): true, - common.HexToHash("0x977e95ebfc408f17b2da60b4eba07314a7907b668b9be85997f43f3737f629e7"): true, - common.HexToHash("0xc01a05c016abe2f99c9dd44493123b857ee32993a57c91e71b67b0238d576abb"): true, - common.HexToHash("0x5ca81a7688da349ef1da7e0d571d9c068f7d372f1155ada5fc5f10c0e2d656fc"): true, - common.HexToHash("0x9c3fe5d72f6d7f9559aca0bb7d6b3bcf4b1544bf19cda59810bda91ea05f0b56"): true, - common.HexToHash("0x18d4c98bbacf0e0b0a3c159e67ff94ff95a545a4893668f46facac2cd41b315c"): true, - common.HexToHash("0x8b56a0687a2aaeaec5490af49721aa8fd33c45081da6238481eecf9cbcfbaff5"): true, - common.HexToHash("0x8645676a58d3ebc856acaf1c520aab1d5425f407d1a06f16920cc3ace1c80122"): true, - common.HexToHash("0xb36cea1d1efdb720e71feb75c33fb0c561d769e9c65db94e2d097ecff990dcf4"): true, - common.HexToHash("0x31f075e6f0123b86af5e7a9710e1aeb8faa696e37a634240729ffd79a80d51a6"): true, - common.HexToHash("0xc85b764083ec8998c2acf7e66ab1bae9b3c3d2b9fa9275540445bc9eb50592cc"): true, - common.HexToHash("0xbc650c1e2b7469f2f97c12a3ee30271a0fc1dadb37a630ff183b523559020abc"): true, - common.HexToHash("0xb3d8f9e494c7b3c7967a2e92dbd860768cba33dab2b7fc2fccae89fb305ecb5a"): true, - common.HexToHash("0x31665ae02eb30698139f75362bb73ed8435615d082befa18b156970f87ab2715"): true, - common.HexToHash("0xf3586b1ea5867f8b9581f967c550ce647f6dc8ad66692454718acf7d2882011b"): true, - common.HexToHash("0x1915ca90fb8e9048c709c6a17dba7d7ffc36a0d6a1d8652a54209c2a7cd0f2ed"): true, - common.HexToHash("0xbe2ff59c003b9048e6d34b8cf0ee57c097fb06c293396bd9e0fec672d48c6271"): true, - common.HexToHash("0xda8b36fdf128268c3fc458c81e7ba1384be4e942550553b40e0c715a5f51d85d"): true, - common.HexToHash("0x67af6f46b11d4e6db9e128885390e944770f278744963e909080a4d596253cd6"): true, - common.HexToHash("0x289e1943d1bbd18eec37cf219492dd0a657815778f19e76b4640506df78b3cfe"): true, - common.HexToHash("0xc3134ae92c67bc4e0b113a6331f46a3a86e7de79d7503d904c02689146efb142"): true, - common.HexToHash("0x3170991f8eda9e6b7364278f41e3cec2dc731a5a370da8c3e89f016abff95b19"): true, - common.HexToHash("0xc1daadd6d0aa0268440335822b6a040fc64d6e39cfde6f301af77af72d2e8aea"): true, - common.HexToHash("0x60c0c94d9ef45305cbd9d9151b86d28675a7b190a408ceda98f741cb1c7157a3"): true, - common.HexToHash("0x556f194b9ab824f9641110d530ce1efb4adb8d3fca7b13b482fd3a2685127839"): true, - common.HexToHash("0xb018c482f8d724054744363fbca4a93cc29e7200577a93431819375b23f81dfa"): true, - common.HexToHash("0xd37c4cd0fd80095dc7029a1e3c85d57a872599ab83843350a03b6f578097dd40"): true, - common.HexToHash("0x9ed579fdc603fc5e5cbee24682d4a3821d9beb0738a564be9198b65418712d88"): true, - common.HexToHash("0x443102f53e2e40b827edce24838bfec3a337537f59d81bd1da12f094daf549d7"): true, - common.HexToHash("0xc5e17f376e627d682d49eb1eff7f69f94e6d545317e4b743600bc9705da957ca"): true, - common.HexToHash("0x31b73cf7500a979aa85ce67427495e8361c99b95e74dd985cff116fb124c3e22"): true, - common.HexToHash("0x5237e7a7a28c212f63eb25f2fc96fb4b3473f9014c767520c53849d975ff8408"): true, - common.HexToHash("0x29b91d06fde7fe55975b19b61c493f5b6812915f895ec1ccef913fd5f4328754"): true, - common.HexToHash("0xb8c8f9d54069b5dd73864449965305b353c34e214f15a27899a5d9b8503c114b"): true, - common.HexToHash("0xbda1a815ed5b9fa90d17e8748a9ee8046828bd3ba7d16427e20fe609d28adf23"): true, - common.HexToHash("0x1dbb2c3ce68825c89cff2ffe7e4d1fee5a129555ac3a66292632149519591475"): true, - common.HexToHash("0x6338adfa710a587fc342fe9d8f5650de4f272a857cd853c0876d89c0a088a590"): true, - common.HexToHash("0x8bad6c53e7ad42ad4560d421a2016019c12e0e2167d69b6edf054d022b1950fd"): true, - common.HexToHash("0x296cfd3101fbd71bd29a67a79e3264d63aaab9aac2d0ac9bfb58e8f4aa64e264"): true, - common.HexToHash("0x592c5d48c6b070d098354337d145dc1483e68b65602af77bb7f7735140e6c7a7"): true, - common.HexToHash("0x0e867e456f3c18480576eb7518f998388c6238579f33d653c690c1ad497aeaaa"): true, - common.HexToHash("0x6b128dbdd3c6c7f6cf710b2c6d1c0a73c12f8a4679a6507089bb999a9e21c1ed"): true, - common.HexToHash("0xbd900329ac45ad001b4f6e8da5954d8265bebb63f5fb1b194b4c8bb0e659a374"): true, - common.HexToHash("0x57ea89ace950cca35b1ba47b0522b1fe392045035e579c283d3ceac7bb2a4289"): true, - common.HexToHash("0x8e69da1056362bf82f573b7e5965b2a48999896ddc2c6eb8ac9b49e513b94567"): true, - common.HexToHash("0x8c56e885eaa9f637026af71dddadef8f91400201e25610de286482df647497d7"): true, - common.HexToHash("0x0bd35a2b0042e37202cb010d496f6faa0fd1d05a823cfb95adb121cd94f67837"): true, - common.HexToHash("0x1a97783a0fb1dc49eea2bf9855cee7b6b0094e761e1ef404369d66a9f2a0e2ef"): true, - common.HexToHash("0x87d9ed5dbc4d233d5049b914ddba0661065515c6edac10322c6992679b42f304"): true, - common.HexToHash("0x34897ac8c1ccf7146339bdd9feafb5b53067d87da2d5bc11561c8dae5f6bdbac"): true, - common.HexToHash("0xa1ae0b4af5ed3221fdce3f70f1cee03e3cf07ae27ceabc6c8b2866f25bb954cb"): true, - common.HexToHash("0x925c5baa94ac1fdf112860e2aa7a98cb51d5b6b003b640308fdbd3a750373577"): true, - common.HexToHash("0xc3c1890477de680aee79c782f93786fb0c04a6b27bafbd3a3754509398af2930"): true, - common.HexToHash("0xf0db018238930edd63e97509454113a1a982d87cfc5ecbb4ae5892cb32d68058"): true, - common.HexToHash("0x8982ef24ceb833589ac6a2029053f750e6ce644efc82e0beb6c9a0cf47de7582"): true, - common.HexToHash("0x4ddba336c77a822471bde0e1fd5d4a4ee8eebcb45ad102d34c57ff9447d695d4"): true, - common.HexToHash("0x9b98621ebca966f7687a7c7eb7db5ef611fc58a6eedb48b540c76b7f15c5c45e"): true, - common.HexToHash("0xdf280f239f4e129ef5600c9c9f126dc0f47f396a5b6920d33c2f302e8b7b502a"): true, - common.HexToHash("0x4e31be0c67fe3bdb3ccaba6d765ae9bc2770ba56e911e69999df38724461d3c0"): true, - common.HexToHash("0xb53ca42fa4732a18ed988778d158dc8ec40779b9d21f7dbab7e4a68ade794364"): true, - common.HexToHash("0xed968eca1a42d9db71a0876815ddee49850713b683c94f9bba759c7982063359"): true, - common.HexToHash("0xb24c093f60abcb45b59252457a2b5913d31f95fe0a6910ac9b0bbb174f0c9a58"): true, - common.HexToHash("0xa038a5179114d1a84b8ef8e00692eef33b3d580ec8cf525fc934ea0416aa776b"): true, - common.HexToHash("0x699365680458a7d0edaf9ec16f9c5bcc69c6351cac2dacbda6df59ca6f631ceb"): true, - common.HexToHash("0xa954967d3be54cf3560c2937c71f876c89f2a5bb1824c8c613ce13ee769703e6"): true, - common.HexToHash("0x2fd15f229404d3bd8b3d08b923a1dca52f27ae793c7a5eb51d8f597682bc9564"): true, - common.HexToHash("0xf8515f8357f7de9075b215645dca16dc4aad5be808a59bf92e6c131d0787e5ee"): true, - common.HexToHash("0x9422579aca9c62c82b7c65d2e38088fa3f6a4c926ccbfdddb7f5681cdb1b31a9"): true, - common.HexToHash("0xad308e3bff7f2e7750a8f406ffd1d94154af8f1d8237f41c5a0949280a478f67"): true, - common.HexToHash("0x1edbb3438a5dc7bda7a264df44338422044ec05eebbc7d84fb064115f324af53"): true, - common.HexToHash("0xc6102722b91e31652bacfa12b68f07067956f076f52d4df6d8bea6ea4c862b5a"): true, - common.HexToHash("0xf1394fe1adeb68759f5aeaa0cc08a34e1e28a56e247d3088687afc80d87e65e6"): true, - common.HexToHash("0xa72049795d18f14a18887f70af47a8d8478ff17d94dc82a70bb3be0c8be524aa"): true, - common.HexToHash("0x50082c07637ec5fcde968e6c7e3ee86f1ef9dcbd5e2584a1f275c50082cf9f85"): true, - common.HexToHash("0xbff3f757ac2e8b8f767671c7ff54af2a8ea3e8695d8148b0a2ee9fefb339ba9b"): true, - common.HexToHash("0xdb89a0fc00a66130c901ff6f2a04d70687e11ed5221e1f94201467ea171d3451"): true, - common.HexToHash("0x45bc02c28e19b87499ca812e0ed7e28039ff1cffd1a27f77ee229b33cdbba1ac"): true, - common.HexToHash("0x9cb9672d8c10ccb11a99bd63383ef7065a6b8d3c04b088e38912756cd398541b"): true, - common.HexToHash("0x87a236c452e00257e127df2dca7504d96f02583fd196bc79b8f0ccfed69dc1c6"): true, - common.HexToHash("0x1ffa4cf512d7670c576040e3438bf32002d178e1c1ea34695701c2016a8fa1c1"): true, - common.HexToHash("0xab1ee2daa8a93c5e427bad65bc56c73f21831bf5a3ae681449e71355f63899be"): true, - common.HexToHash("0x2628a734efb54186306e587a299e5b9cc14466eb388bd08bfb786ba1a272e549"): true, - common.HexToHash("0xa6d236b74031bcba00ec46ed24c772206f608d4d36573d925d7c1df4cc0306a3"): true, - common.HexToHash("0xdd5f64746e3460cfafc044f38ec6dcbad95e7468911884f9baec4b26544b17d1"): true, - common.HexToHash("0xbcb9db0fbbb9f6cb404f7ec387e43b7a7bc224e31019f8704c08e992edc94260"): true, - common.HexToHash("0xd5b252c5dfc587d66f3c5f258a7e7742c71edf5037c0344f590812e9749c2283"): true, - common.HexToHash("0x3494be77d67e8789909d76bd241a88973f31842bc59dc7c2282d34a228849135"): true, - common.HexToHash("0x12094b0d3a3a13eaeabac622972229ebaedda2a7fa0db11e95a26f1e2f9d395a"): true, - common.HexToHash("0x1c8fedfd390a46bbfc61cbe866726cf4c08265473dd9f1642bcd493f2e1b0d9c"): true, - common.HexToHash("0x42f19c0559e76a0ab8c361a64367230244be63991345c01d8db4971ac52d4921"): true, - common.HexToHash("0x3da92c830b12c8ed955aab0e6dd81175e8c48150d85e44ce0acb287c387adfc6"): true, - common.HexToHash("0x2c91f2310235ced0ea84cf224fafa3515d7ee309313808dcb399a4b546c0135b"): true, - common.HexToHash("0x13ff58a797e34ab4db1431a43962fde2323f74ffb05cf0cd0f300519e48b3511"): true, - common.HexToHash("0x1b256719af5491e13dd2ca55b1bc30cc33415865d222bfe79d714c4a080bf17b"): true, - common.HexToHash("0x6c4e1cc91400de874786c6aeeeb5d9f88a923b970c45db4a244d4ef35d51c435"): true, - common.HexToHash("0x9d5a4e00b4da31937967c14c9c2cc20a347289f970275a85a6aca7df7c46689d"): true, - common.HexToHash("0xd92648e8fe7d0a64288fd71f2b10954cf52106569a8ab913dd2fda56970ecaed"): true, - common.HexToHash("0x2da577bb2cb5c7f0a418934eb9d4bdff2bd321bcc17a671e4099a5ec3007fa1a"): true, - common.HexToHash("0x91c47668c1df5376c59e753f61c2cc06124a95c4dbd5939d2c94d5b173e83203"): true, - common.HexToHash("0x63984af27259107edf2120a86b1e1f8fab40d1d0471337277b60af3449239f83"): true, - common.HexToHash("0x45e6d5841ec5c0de80afc9afcc7f7cbb150acc31b41f59eb51481833d92f9181"): true, - common.HexToHash("0x32d54a615a082a3d2478059a84ef48f1dbddc03038fba59f8e219babe8b4afe4"): true, - common.HexToHash("0xacdc893bbf7c977dbb3d2216e3e91d0bb647effe368e944c179c760340564d39"): true, - common.HexToHash("0x990040fbb516bcd2c542c9d1b626fbaab4e5270bd3804e8da1fc0d97949aab50"): true, - common.HexToHash("0xcc2d5145fb0425339af19450dacd55d507435a86625675fbbd15bc5594949979"): true, - common.HexToHash("0x7e3ebeb4acb6ef5591faa6bcb123ff91bc4cb7ab8f155bc9a8aa77f2d9c335af"): true, - common.HexToHash("0xf03a4f323324db413fadd7e5139828fca4fcb614ddfa4821f2848cdf958c92a7"): true, - common.HexToHash("0x4d7d3ccf9696e81436f1851d6e12f1bd8f999c5e44a182a6170a7a0227d35140"): true, - common.HexToHash("0x165af69b38d18725b27960ee7888e93024d4b8ec47c06fc6cb1316a5c0f87b70"): true, - common.HexToHash("0xa7fbc9a8b39d7a0dfab42497e76cc0ba5a1b445e77ba9ae433b40d456bbc0d01"): true, - common.HexToHash("0x6559e8156bdac3b1ae74e2d608d8e0ff301462eabfb0203b68f2710523b623c0"): true, - common.HexToHash("0xd60e2a9447395e5e3278f3e518380f97cfe47a991f41df3ff99eabdc6b11bb67"): true, - common.HexToHash("0x69731933bd261b262808265075e2a363261aac12d25466c812427ba5f5ccf26a"): true, - common.HexToHash("0xe51a662c25fcfe20ae697dbee1e765f856ec73ab274667cee9ededf3baa34f34"): true, - common.HexToHash("0xa4b439930e19caa30a66dc38bf74a9b8811962b0748a85ccece57f893aa65dbd"): true, - common.HexToHash("0x65a2f1f331c4c61ee4c71cc186a0464eaf0587ccee4ffa72b462a68ba8e4d26b"): true, - common.HexToHash("0x79d4e51822f01ebbb0699b7912b34ad2ec24e09e5eea20da0f5250b14adc6517"): true, - common.HexToHash("0x4e273f47a1896c0d6200fae748a66a87f08cd0416192d6d18096520f643409b0"): true, - common.HexToHash("0x48855881ed4146d3c8d3b95aa11085ec1149f74b003f3303dd36abb007baa60a"): true, - common.HexToHash("0x8e73fe5004bd48d4e9d8c033f0c7a508113db6e489d9562975ac1b298f419799"): true, - common.HexToHash("0x5894c873065c4e33a6d697ebc04886e40a0e7cd78e564163c29871223e32bb5a"): true, - common.HexToHash("0xfee7591e03cf813c381fb860897eb335eb442b9ac381eab79b4c7cdd71e4dffa"): true, - common.HexToHash("0x3f613e6ef0c014a3f44bbe135d9829be1115bcc5a7ffd8cf1caf095cd06da088"): true, - common.HexToHash("0xcb89e77cfc5a5ef8ac994851a1a682f195416c95f1defcb2788e19f6511fb719"): true, - common.HexToHash("0xd16e0dfa5125e4e140d177660a1e66a984bfcc66f9e242be22cf88cf0c1f1d00"): true, - common.HexToHash("0x9659e680f284aae1ccf1e75cf8d32b08b290b9c2d846e3bea9cdd292a534e4bb"): true, - common.HexToHash("0x973bdbc384b4847657116a681a75585e60246ceea6e6bc1c753c8a7ad01c824f"): true, - common.HexToHash("0x02999e5c0bc8d4f00273fc973e535c5968b9d1c07820251f68042f071eebb8e2"): true, - common.HexToHash("0x59586b2c8cf2596d89bf87af860c84c27129a76ded5b3f2ef5c47a10ab06a8df"): true, - common.HexToHash("0x2daf34e8552aedf9140fd66d74f1833a9922d0f908f453eb2822119ff4625125"): true, - common.HexToHash("0x912e971fd051f117bcc14f9318b652ac8126c28b803a2ea6f05d33605b8030d7"): true, - common.HexToHash("0x4ee367ec208b64b0c5e19bcb321d337c776c253f26887ad471f2b99beb086643"): true, - common.HexToHash("0xee18f1e7d17e2a45591d6ba17d265680a0c074ec7b478ae784287ca91640fb82"): true, - common.HexToHash("0x5b03c6134b43eedfa283475a7e6cc49941c667edfab8acf9a283863f3b71d950"): true, - common.HexToHash("0x0163ddeb2b26dc3828b3e27ffe31f233980c97b63c4d057e965581b717a7af76"): true, - common.HexToHash("0x102588f8b7010e2bdf7a29f7fa7d1f65a6e0af3717c53376bb4f773c19c45b11"): true, - common.HexToHash("0x441c3999b4db1bc293d18708e86304360d2e7a68dfab427c426aa07e0fc6eaf6"): true, - common.HexToHash("0x9df26a44d5c1d569ceba6bbeeb5692cf66a2d558ebcad53c3b21c7db90fdf6df"): true, - common.HexToHash("0x67814878199def00c11900460e93da16e40ac7c71004c20a99dc4259764b9911"): true, - common.HexToHash("0x697bdcb89292b1c063d5b5ef394bb936c2a0100115c08c4be5a6c0131421d330"): true, - common.HexToHash("0xf1a25dd830f72059aa8320c1b690fcf55b6b6819769d475e15dae9b9da89670a"): true, - common.HexToHash("0x60c9e8992cb135f7970575202e0ae61cb632ea4e0db132f82c1b1ebcf2077894"): true, - common.HexToHash("0x7e47b3deffa1a96276ec5f8c1f552af6849dc63491d31682febfd5199990f7af"): true, - common.HexToHash("0x9147d68a34c46884b00cea8d978ee07b038ad9acbbe32c5751ccf56a6a23b2ba"): true, - common.HexToHash("0x3822c005a009f0a0e77ed30fd2b755e36bb9172db140c634d80b5a90585feb3b"): true, - common.HexToHash("0x6c49c530afd706501b50b0d143a801097567ba8d78487c24e038f12ed3ba8f60"): true, - common.HexToHash("0xb7b0068b93a9f6abf6e7addaa6d250a9afb127bd56284d6da12601494a987a61"): true, - common.HexToHash("0xd998743eb256193c3bee94c0ad1fa484ebfdbb5b92804083c0318a3dd007f8af"): true, - common.HexToHash("0xcd62f99b191011edd6bb6d6cb24501e6ae1b59916fee266a080ca46eb19684ac"): true, - common.HexToHash("0x0494b44c5aceeccc0bf2ac422575d9c5e0f080cef9a49bab10574039f14d9202"): true, - common.HexToHash("0x4c6d30325b47e26817723348c87fa0a53866ef44bdd2921619b739e5c93bf691"): true, - common.HexToHash("0xee8fb70483373faccbe058f85bf597a456ce19eeb2a533bb65390ad4fd8c82c1"): true, - common.HexToHash("0x4eb6bce5ad34cc4abc948c158ff3d7147a4ca607fd2c630613a8ee4f2ebdebd3"): true, - common.HexToHash("0x0a13186f3ab5193cdf3bdf9f667a38257bd55fd0df516c1de6b09fbd5340db97"): true, - common.HexToHash("0x25f7edf2758bb2d4111b3d38801b5ed7ebe78d4599795cc68f0ebd9ce1b359f4"): true, - common.HexToHash("0x77e2e50251ed30d568ee469a7a0e5c88c84ef3fcb8d94ed65ead4e0a9e903436"): true, - common.HexToHash("0xfaf3e42ce322d423c47d8c08da57fecb7b08cfa91ca3950da607618d85a4a121"): true, - common.HexToHash("0xb37e9a493c757cb4fdcd3e987c0e36554c8250930782b483c15293ee963e330d"): true, - common.HexToHash("0xaeb7908299061e8540354ed5d471ae00daef058b80ce95fcc50927c63161d6de"): true, - common.HexToHash("0xf3b6783ae8b57e66bb5943f6f5693f7dd91075a77113284b058d0560d2dbead2"): true, - common.HexToHash("0x730727702509745c8a35311cdaee49e2054690ee2aa0bdb95dfd4f488e63dbd3"): true, - common.HexToHash("0x14577f126252598ae4a318921f60b7eaceacec72c5ce8566eb020ce45a524231"): true, - common.HexToHash("0xd0293e2eaf88fad355edbd876fe70b80e43b3a1683b12a191a8108fd809546be"): true, - common.HexToHash("0x6c7363dee1b5a25171f98e95e79b692b6895c60ea8fb15e17843ef61e2bc5430"): true, - common.HexToHash("0x56fafea4526d08ac68077c2571cd95390b9ff5c8b77ae6d1ebb3c2e7b3a6b569"): true, - common.HexToHash("0x87bc824d4c9c9ce45379f87bb30a67796109ad0a6b6976d284bd3ec23bb0ae01"): true, - common.HexToHash("0x7e12d1bfa74c62cb5543d065ef668f175b5cfb98e1cfb4b37bfc77c5c4eb193d"): true, - common.HexToHash("0x909b5945857b555407c94d71aadf9c7ce69f29992f59a7ce0846acb1fc4cbe79"): true, - common.HexToHash("0x8386132f3110e6af6ed75303841cb60077e3e2693fb61c776eb2e9664cc3d289"): true, - common.HexToHash("0xad9d8620714ed0e6858bc67f2280dc6b42fee9901aad4b643617928f89f9fdc2"): true, - common.HexToHash("0x5d548f2dac52fd343e3e6cd17b7d7e29edae37a1cf3351773e4beee152e6e908"): true, - common.HexToHash("0xced3fdb36ad0ecc4dc58edc07ded38ceb74e19b60c8fafb802c9a69f1ec9bc53"): true, - common.HexToHash("0x5626b945a2fb2e82cb72517e0990b3ea7b1ec9ed7938f561d551c7eb2d46302b"): true, - common.HexToHash("0xeacca450416a1f7b2fb81f10175c9046aded8739eb907934b96c0106cd5adc74"): true, - common.HexToHash("0x00884e8b372de993d55b66b3e5d8a33b00918504141679fd6ce67abb839ee168"): true, - common.HexToHash("0x70d396a4903642783adb4c704bd9aeb9a02ee33e631b1c7a5bc0821c475423db"): true, - common.HexToHash("0xa5a9533deb012c048d5c42803062af3f162d6c318b510f6b40f903334a05245f"): true, - common.HexToHash("0xf090f118a02773f5cca93cbecbdca5272fd4b9e5e889134e05fd80f292d27879"): true, - common.HexToHash("0xbb5de1a59a16f25a0b6a8393c250d2b1a4020307d6f9b5e08d988b76501d9d23"): true, - common.HexToHash("0x0986d4c98d40ce61093fd3516b61e48072ace53b89e622b45bf1b6db7c7639f7"): true, - common.HexToHash("0x0aceb9182961fca510f5a724a5f92faa56c3c0999d210c6c0a04d8ab9b5a96be"): true, - common.HexToHash("0xa618950ae496c47ed202fa3014f35964a99e4a7d6e881b169b4db8aa41023f0f"): true, - common.HexToHash("0x7b5086c02b1ca3fbfedd48a503ba269027c49de8cf11ba4edf3882629d02e787"): true, - common.HexToHash("0xdf8b1c9c7ebd860a5109e99e16e925499fb8f51a21c3ae391988be7f473a2e98"): true, - common.HexToHash("0x91c2d819812e09fdf2db8d8e157fbbb9bdc2a292819bbc66bbec151b3d08e8fe"): true, - common.HexToHash("0x4c499d87e38921f58016e32e0bf4b5dc87e3df74cdde71e0eb288eb2db053256"): true, - common.HexToHash("0x044d5a348899896fffa73bfb31539c1a9c33462bddfa7de9a513639b17dc056d"): true, - common.HexToHash("0xdd678bb47030f6fc484f204dd91746d27cb87fe30dc6bd6d3bb436d4ee4ee2a8"): true, - common.HexToHash("0xc67097f67dc21bc2fbb4c8218f4e57a5aa5c194b8ba4e833e4b968bc7560362e"): true, - common.HexToHash("0x830f42e7afe71ac1949b234495b56afa8784505eee8e646eebf336f974bf0b2d"): true, - common.HexToHash("0x17186b91aa7f8b8f5935f9d15599598f677cac876230e772e04de1ec3bc693b5"): true, - common.HexToHash("0xeccae326242bec7fe985a2a80818caeab3484da043e892a7ad82a87879c7f223"): true, - common.HexToHash("0x137948f3481f0b9eb311dc209bd4ace1cd3f35a35f5e0c29ccc024c72c1b5e6e"): true, - common.HexToHash("0xcc7b8431e25b110bae56f8d9966a761d1dcfc13b24b551fc15ce981aae365817"): true, - common.HexToHash("0x5313f3125eb9a4a12dad20af63453ddf70bfbacb638f8264ffe021e39b9df1a1"): true, - common.HexToHash("0x07925e3bd7003ea6201b1a0cd5fba85d8de0d3a5824ad3c75e2f7fa9c8ac8598"): true, - common.HexToHash("0x1972d9ae72a9b1b2f4be9c2f7f3c030e02dcc76ab539bb6f290a3178f9a76c01"): true, - common.HexToHash("0xeaa3a44b98be1d7c69761a8b14908455944daa2d85e909a03d2cad9afa299d3b"): true, - common.HexToHash("0xce7615b987cd213f3c0799bff066f5368f7b0702cb80e06e85f7ee1b7d8b0f21"): true, - common.HexToHash("0x4132142b23134c2a128ea2745eb6094af74d0a1509c51ce823039cafdb5e079c"): true, - common.HexToHash("0x1189233d0700f175035afc2ab9c0f93a5e0bf911a83707fff5c86732c0196154"): true, - common.HexToHash("0xa1926e4a2a16601cdbb0d3918ca24ecef1e42e706d88964d66c67e829ea9ed5e"): true, - common.HexToHash("0x201e534370e49c53f7135bc230ed095d7ae0a097f6614c77f5609da6aa45fe5d"): true, - common.HexToHash("0x581a6d3b5fd089e764830d83b4385f9955aa5ded8ce1a26399f71f8fcb78b4da"): true, - common.HexToHash("0x0d012d65365dfecb1ed59d8f1c8d3aee80a1ce7020e4b68c005db2ee90b09f89"): true, - common.HexToHash("0x2520228e5e1f32566b497dd3fbefa644e8469582a20b6e5f30f03c19b152c78e"): true, - common.HexToHash("0x1cf972dce74b5c72bcb8ddbff80147f191c4708290e35fec8c6bbbfed4225649"): true, - common.HexToHash("0x36eb359bf4fbb0a4eae7a28e929ce951148ec5197fb0275a3fe2accb42e4a52c"): true, - common.HexToHash("0xfd0c0e7efafe6cc87682199a6c12979b66ac33bc22530051379d68178d82685e"): true, - common.HexToHash("0xf1c00572123429fbb0a583dacd5f64c7ddab57f522c5bb91b69067401a938c57"): true, - common.HexToHash("0x103f63cc776817513d4a4ba61b74529b14a7033bb11545d831b90db49db651b1"): true, - common.HexToHash("0x963322acdac9b8a9023f24a246d252bc0e6fb0274c55dd680d400b93701f9ff7"): true, - common.HexToHash("0x551906ffe9d94efb316d7ac52800e62948ecb84a7c2331ebbec1f7410b4b2e82"): true, - common.HexToHash("0x8fba2d1d3bec1bfd7997182d98e61aeea878890600f0ee832291bb42a238ca5d"): true, - common.HexToHash("0xe435db532d7843984b6bc9d7a55bb89864df6500fe3a5596e4e6549d948bbca3"): true, - common.HexToHash("0x06a135d129abc710e7819bf8903e116563d897d06485ba73d3f2587e7c70083c"): true, - common.HexToHash("0x87b19c3687ede6213b7ffe46754919da1682d7b05646e527287363c8df88f3bf"): true, - common.HexToHash("0x2942a2a66d691996d7c85ce8cdf2a1d44e7e7ec61fcf476420e6784e7f2af29e"): true, - common.HexToHash("0x35dd9ceba3e27bee2cfb43c255b872db85cbae8dab0c4bd4b7e03ed525424d77"): true, - common.HexToHash("0x28aa7b1d1ea0ffa2a8d9c46f86514e6480593e9556b55d806bab952905254cff"): true, - common.HexToHash("0xdf40d3e99944f1ab25097ac1a990aa2647075d663bfaa480355926e784af1fb9"): true, - common.HexToHash("0x4fa324bf00b67fdf1cd3c92b7be346fbf303b6fb361facd3d5bad3ec89ea708f"): true, - common.HexToHash("0xf3f8c5033a3409447e6c1e258cf8cfdaf1d0db761aa82a49c21a8b8c697f7666"): true, - common.HexToHash("0x2a91fb8777e85d0cac1e7d1367acbc495cb802e6ff631a0b418ee415f81c5df5"): true, - common.HexToHash("0x18b64e0f7a14da313c26924c208b12aa5a9cc4bca07f3aaf3d62f53703c5440a"): true, - common.HexToHash("0x18deb854f9cbbd0b92e32d4ecd139e9c640b453601afe52716c1b1dc7227ad54"): true, - common.HexToHash("0xcbc36a8a0f28d097eded5702540f8c7801561c8693ca133abe7b8937217538de"): true, - common.HexToHash("0xd285785ebcf8cf1340d2c1d1c9f960afdb438dc3cda53a7c657140369cfeba33"): true, - common.HexToHash("0x0b404935874ad1fc10223034f91c20031a5016a155369f7167fff185cb10b98b"): true, - common.HexToHash("0xc5627a9c8a6c98ce834e3e0b37a147af17fdf6b3e46f20a0894ee4381e449c61"): true, - common.HexToHash("0x55dfa8422a3e63456255128ef5cf634ecc49390b5ef2d21092756f5c94756d23"): true, - common.HexToHash("0x178829a719a6903e633b0030de6cdbaa9bd18ed56ee9f8b56f79984ae1419ff4"): true, - common.HexToHash("0x8b16b3671c515bb0df48fcd2487a6bed90aa140048138ac5d934b246eee0ac8f"): true, - common.HexToHash("0x8d34010a12b0675c1ac91f0978b83095fe103f84df6ebcf75acf6ab6c18cd8d9"): true, - common.HexToHash("0x78cd3301e130f79c514aa76ea0005666e3021ddea5ee7432d3643d9fb373757d"): true, - common.HexToHash("0x2b2d9bd1da9f2f9dd05b05c8bff8041622a8ebd13c74a34c289a8b7f7278d073"): true, - common.HexToHash("0x8547e2e4f7388345a881b85068af6cb56fca728d1077f3d20598765b4fbfb7ce"): true, - common.HexToHash("0xc57b279ad0048d7f7225b8196f37e43c3a6059917ed45e758c9ffa4f48691520"): true, - common.HexToHash("0x2e5ba213073cf4b2c16426a777089c55adf81a4add39e0213081da8818af40a8"): true, - common.HexToHash("0x5714c5516ec05bc62dde7ccdb8cd33ce60b4a44eb19aaacea62dcaf60c262852"): true, - common.HexToHash("0x136956bd47aadfc10340208a06aecca10a38fd9d9b0f3faa2fd738bc1e67440a"): true, - common.HexToHash("0x58d06cfc4df135c9914f2bc1e69e0fa4163d74b5a618f21c63fa116bc23bd61a"): true, - common.HexToHash("0x0ccc2b47358951fa097fc65c9ac27d97148c005bc633ae6c564b980ffcadba0d"): true, - common.HexToHash("0x7bdf515a116c172dae7a8d62eccd8de9f090d1b77bd5f39419640d4c8d3b7f7d"): true, - common.HexToHash("0x957bc6f841734a1cd52b8aa6d8cd6440364a03d3ca2e7cfe7f8dc479bd9ed5cf"): true, - common.HexToHash("0xa25ffb78610ee5a744c0605e6bfb5180def794d863307601fd5e93362cbcf883"): true, - common.HexToHash("0x73e2358a6bcaa15bb65a0f96d47ccc1a15711d1b8a95e4cdf5ce102dab613ebe"): true, - common.HexToHash("0x52330a9af41355ba443f5bab5415e2460923978ff70e7d505807d41a774339c5"): true, - common.HexToHash("0x6cf799cc5fcb79f0ad291538360d219a2db057fb18ca2e37051f790ebf1548e7"): true, - common.HexToHash("0xca3f4dc1b40ed862cf701fe6fab13688a85926bf3018213c3992acc58d613635"): true, - common.HexToHash("0x0b471f1ec1ce05a9cedd0178a77f72147839fe585758b3def30482298e5ef3d8"): true, - common.HexToHash("0x58a4f0031754c701a759ed33ba8a7349cfdd5a5e9be31fbd192841b41a80f2ed"): true, - common.HexToHash("0x82dd7ab5937db3b4ffd9eee71905fbf678cc20191c2d8adba694da0d1df60e8c"): true, - common.HexToHash("0xf7ea1eaabdd0a999f9bd24d16eb362be644a3b40e4d946b8596e0108e7f90872"): true, - common.HexToHash("0x8c3e9833dfc5898aeeca3d3499ee8a511c9850e1366e9b67a082a7489bbd8058"): true, - common.HexToHash("0x53c34d0a317143ae8994ab4b91ba632a2ed75564dba842340aeda1cab66d88b5"): true, - common.HexToHash("0x3e23f3612d051601b2096c54057305a96fbf2cb339d71eb28aaccca5189e8ef6"): true, - common.HexToHash("0x3f0c508b59d58d83dbeb931567cd68cadc9f73cf92292c1e5e1ee10e3d23161a"): true, - common.HexToHash("0xb08ace1201292bc97a40c26a1905a7dd098beea8b35462838177898f07d0d8ea"): true, - common.HexToHash("0xc1ef02f5015f02ea3f9afc82c6dbb86b9b2337014f12beb948ef10d2346fc4d3"): true, - common.HexToHash("0x885f2cca46b03aee2cab36600f4c08cf327e2d7b9922d0aeef2567ca6b158a98"): true, - common.HexToHash("0x7c96413b2bcf551346b30e67b499fd9205a57a3ed0a6a6ee10bc3a2898ceb301"): true, - common.HexToHash("0x211585c94ebb350755b3fce8ed206aad66fc85333434a44ebc7ada8e8e04087a"): true, - common.HexToHash("0xee6c6ce2524631a4a4ee0d79c5ef68a8604056b50ae2eea875fa6dafa1bb26ab"): true, - common.HexToHash("0xb075d4ed22ceabdbeed5596337b2d3895256bf6516a0cb762fdf304f72d1299c"): true, - common.HexToHash("0x06e923072a3bf4087a7bda876b534d561f6b264b04148ea269d81d987ceddf6e"): true, - common.HexToHash("0x97cdd1e1c5f8744f0593403d284e6795a79b8f34a625aedeca01bc3ef154a19a"): true, - common.HexToHash("0xcb328c8460305ce81640fb71a643a535b112ac3ecd39f0fc45bafe239627962a"): true, - common.HexToHash("0x23c02fb00e078d8d3def6eb2c0a9d04841ebb144771db5a6a81060771e0b658d"): true, - common.HexToHash("0xcee4e3540160574f2c9df0ef2245f3bcdd9b04d11f561639152c99f8e5920149"): true, - common.HexToHash("0xaeb5513828084a7f289958ca185b9410fe394037a6b4583e2447a80f5ca6a692"): true, - common.HexToHash("0xc6df2c1dc07e365e1abb4ade0f9cc3ace02edf226822437e59768ab7e6fa6be5"): true, - common.HexToHash("0x64e45aac901fe8b6bd59c7d28d7e7253d6a0d5d082b825c7bfc7cccdcda00bdc"): true, - common.HexToHash("0x1509e2dca30eea4ff81deba5d29ce0c6cf0f5eafdf72e2795a3c13122611a038"): true, - common.HexToHash("0x8bbbf30111f47047ce467853cc03d2f4987571a919b27a6a79dd03242931f11f"): true, - common.HexToHash("0x9698da8da6008ccff5f3464b5b97002c95eccd8d87b57070d19eac6d16e7b910"): true, - common.HexToHash("0xfb4812df8ce38d5aa87d27b4d7f77af4f10b65cbaf3576ad8798a4ff29378db6"): true, - common.HexToHash("0x0758c5c2e9fb2efb1ba675ffdf60ff64a545a6cfccbc58e60221f5fec502786f"): true, - common.HexToHash("0x192860fd129add7e340fb162e52eeea93755c9a857fc8319545739be680a2196"): true, - common.HexToHash("0xdf714daf49ca51eb2f6b235fbd09d0895b683dee9ac778f3b0a1c1865b1c7151"): true, - common.HexToHash("0x928d41600fd408a5a6939c3d05d92006d02888f8fc5d0c3c84a780db6b5dd6c6"): true, - common.HexToHash("0xb6e2de6f6d3c19101aea5459983bc3006647550ad6f58e26e534ef3a628a3604"): true, - common.HexToHash("0xe26dfe1694bd5d5d840a6f051049d016fe506e648b89f72fef460025b534010b"): true, - common.HexToHash("0xdea1ff563a938c03bef3a4603cf3be5879b0722f8744aff99c6d0db4f8942d2e"): true, - common.HexToHash("0x931ee50e5b71fecb0b432b4344195b5fc5fa8f4b398c848111a132da0e806396"): true, - common.HexToHash("0x50a67340d32b6f9c014f230230ead0c6d190812aa2cfe296e0a6bbb215836ecc"): true, - common.HexToHash("0xcc9b5bbb63d71f338557864eb465bb857a363b4eec7bec44a01e4418ec6748f8"): true, - common.HexToHash("0xfa55a0799daba5fbfe3832da22a824182e510326f87cc1775d222c06733c81a9"): true, - common.HexToHash("0x2341d858d261b0ada3d89520d83201760ee23aa32075d5e44afbe6bae20dee11"): true, - common.HexToHash("0xc4a182171b8b0509cfb02fe3f605608da67c58e904b1d0eb9c56078b1f12678d"): true, - common.HexToHash("0xd523e56f58ca4dcd9791eadaf4a0c9b4a3f4c32adf2ed225b8e36176a2348923"): true, - common.HexToHash("0x8ba45e0e7dcf91e02e8ad407612a5ca8994304579302495afd089dc84222e640"): true, - common.HexToHash("0x9668a202a78152b4c3bc5da3f4d738961065e49163359f2274f1c76d8045f342"): true, - common.HexToHash("0x6c19740dcca335ce19c214a4e975b7d432856a0a0320d95b7d39ed905a61f07f"): true, - common.HexToHash("0x58a40df256429e74315cf61cffeb21ccc3d49597b9e34fe9d1bd751d00d7a6b6"): true, - common.HexToHash("0x1bdacc1cec185fe2ae4819dac631c96679c80981b904f7993a2eb495520496cd"): true, - common.HexToHash("0x46e61515139dca760bf24aec530d1b5f13ed9034cfd123d07fd4f86cad4419ad"): true, - common.HexToHash("0x424eeb08028bdb9588584227c76816c0d74b0f7d783257f36492ccca256f3e7c"): true, - common.HexToHash("0x9d461f85952f95be1758c916700d19ce1ac9153db96e3d0a65c583ac19869a86"): true, - common.HexToHash("0xdacc54bb226f3e0424e89f401b43d24c6e08ea7d788456c9b40d619cf22b9e7b"): true, - common.HexToHash("0xbeda077ebadfaaaa32e3110ffed33f82f36b8238df4c9111be9900867b842146"): true, - common.HexToHash("0x6a42a1fdc64e46ec9e748cafb41cc407744d9c3ae6131d5d81baa3738c402eb4"): true, - common.HexToHash("0xfa931f9278d8607a4d118aad692db8b47b13380ca5a19151f111cd0d401533b3"): true, - common.HexToHash("0xdcc8752c4a55d2a39d020b978313527bc8504d5e77aa8f6d4cdcc3d2c9fdd525"): true, - common.HexToHash("0xe59da24ae377a07ad72e89cdb3d31a963f0a4deab470fe45feb29069fe35900c"): true, - common.HexToHash("0x41677486c66c99d8b7284b41ef880c29df7ced872eda1c969f658e8ef0ea1255"): true, - common.HexToHash("0x8dac33e2585f24cd22002119f7c62f3d8db0935330636b8cb6e6ff9bbeb3d2b8"): true, - common.HexToHash("0x1293dd08aaf3e54f9e92b806b745e4fe1d4695ccc99d4de18f1d5c814f1fecdc"): true, - common.HexToHash("0x103f6f591d46238afeb331ec4640da72a4a076055d0fb4758f0892f192e0458b"): true, - common.HexToHash("0x7d1487f68c98d7673e0be75149c0bde0d868fbcf446d9758e8fb2f2d1be4f652"): true, - common.HexToHash("0x5decfb9b3ec380a8f85663074e1794e6994b7bf800ea8d5333c24c099a357f07"): true, - common.HexToHash("0xe34b1175033aab1348a5aae186632f103e12d467f1f692ef867328790ae1cba8"): true, - common.HexToHash("0x243143301ab81dcc4325a11b7ecd4f7b9104a6fca0fda6e8a6259a196ad8cb7d"): true, - common.HexToHash("0x73fbb90e33f739bc95a1f323edb0a3d58b5db05c4bb0df6ae73303bd4b732052"): true, - common.HexToHash("0x755234e3c1a8a1ba9d34316a84877a3055eea14c62c7f72a3871108596cdbdce"): true, - common.HexToHash("0x601e85c1b67b46ca7bbc914a7b0208749912b217df983c346a6c439869c07021"): true, - common.HexToHash("0x3ae8df448d3e36c24877cc6e8a6b8f7c4a94a938d26e744a17293ea72a5af0e8"): true, - common.HexToHash("0xc2a28ddd8a32982bc13c837683fd1e1ec6301801d6f419143db4827c714bb9eb"): true, - common.HexToHash("0x9b98d36ff83b4825caf6a8a380d2c1613fe423f9695c1f509dfbed7238284353"): true, - common.HexToHash("0x4d5086de73d1ec2e4b2ec62e5dbfc89cc400c8697d4bd6cbfe26fbe61bbe125e"): true, - common.HexToHash("0x5178d40079d51b03d66eb0f6cd75e1bf8cadcb791cc82ac75b10d88428b2fac0"): true, - common.HexToHash("0xea4a82bbdab4661f4036ada42a73eae31efe2db8f6d2e2f4c2f8da832f4cebb2"): true, - common.HexToHash("0x6252830321c788d2ee4bc5ec331c3070471d13d0b3ebe3c4c27024081e7c1806"): true, - common.HexToHash("0x0a2c68e056d4c4177e3f9bf3bb6657d4e9ea8acf3275160a82a852d53d1cfafb"): true, - common.HexToHash("0xed11fbd17ccb9f906265b14ae28b2eea00ebfe2103e4e0d26fb64e2ea594da6d"): true, - common.HexToHash("0x3fe73501dd1e5dca40cf3c2a7a078db652deb1c669d39b19db3a72fa56258c34"): true, - common.HexToHash("0xa4c7b8d461a4b62404b3bb3cf0ca197de1fc0d71cbde1dc75622cdc6342185cb"): true, - common.HexToHash("0x86f7991e69c0799b5642f3593994b7bfe2b303a123d66978187e65204d6d6fb4"): true, - common.HexToHash("0x2eb84df8785d9e4bbbcbcaa6d00b27c26db62deedab810266cd11e42335434ab"): true, - common.HexToHash("0xb567458650717fa8be85e0b575286eeabd7ccbdaf69dd69f209a20f86ac0f8b5"): true, - common.HexToHash("0xd899caf22de6d91be5c90a4db4b5ff44f3453f7be8cef756be16163f0dfbdfc1"): true, - common.HexToHash("0xae306bb2ccba36193fe045a532268e755603bf2d85644fc1293dfdbc305dd4e8"): true, - common.HexToHash("0xab56efc67822c1daa6f964e4e1bdb99b047e7e5e3e1b92402a55e67b296d84a0"): true, - common.HexToHash("0xd4bb4a663c1c6a570c699f6ce6facd213cc9a36a5fb90bcdca9dff01ea1e20a8"): true, - common.HexToHash("0x3529a8e39addc2e2551b571e097db794194adb12a151f60015bdcf612724b7c2"): true, - common.HexToHash("0x18606ef06f0c738f42fd8ab6f3e4193f32dc3d829ab242256041ebead94a8dfc"): true, - common.HexToHash("0x236352a66c6d5018dc7ee851399fdaf3e5648f09969baf87821d854818035972"): true, - common.HexToHash("0x2d4e0bc45fa94ce542b481e055c90242f5a99db14b97e054fcbb9f05181ea913"): true, - common.HexToHash("0xc9991da4789834a56bd0683c5bb983ab4b5912614934c2e5fc8f68cc1feeddea"): true, - common.HexToHash("0xbbe1b54c3636c277ddbe0caa4db5f4ff94e63e78af77503208d586d8b1471b7d"): true, - common.HexToHash("0xde2770e7eeb0e555b5ac17c96a721c317d6dd3c1bb7366bc142dfc11d6df3179"): true, - common.HexToHash("0x468afd1d322e29e46a2b81674e1fee37d32fea34821d9589de650a80942c7a4f"): true, - common.HexToHash("0xb22e48ede2d5bc78282694609799aa9c83676af9f4c74ce3579a24b935d5e278"): true, - common.HexToHash("0x83633fb4ca93551608aa516869c58deb06cd4f7c1e675d4bf85ae1d86aeae4da"): true, - common.HexToHash("0xf0bf1c796b89e05e645261e88b46708671a0950b3402a07f7db6f0333cc631a6"): true, - common.HexToHash("0x3a9984c0d7165702dcb71643b17496cdd087bd723066908060dc2005bca56536"): true, - common.HexToHash("0x5d8778b31afb8167d2b18e87fff327e521cf4e2e8681880a9f361c6aab2538b6"): true, - common.HexToHash("0x5153f26a5c252c01ab4a5b60ba8e674269178e0f98d2fcef3250ef5786e93fc8"): true, - common.HexToHash("0x2dc50729cc67f9ce83e77ddd5cfb5255191b2d217c293ce9ab13b9242f22be59"): true, - common.HexToHash("0xe1002c59e400bdd92c1958a1742a15a9ec7fe1790089f397294cfe5c54804a06"): true, - common.HexToHash("0xabf54dd1dc55c3441ec06045fed070f69722f5efb8dc5d9eae2dd54c7fe01a05"): true, - common.HexToHash("0xa69a91c6b6010a21660cd18ccfa047ea68d770ec976bc7ceffd27496869d3bcd"): true, - common.HexToHash("0x5531cf349270aed0c7dbc002176ee62b24176f0f6020226430012c7d2106f535"): true, - common.HexToHash("0xc80cb6e3adc96e330a82197da622bac609f089e3226e290ac39fbde5527645e7"): true, - common.HexToHash("0xcb8ded37b5030d9a20f3c345da2b70a49db8dbf5093b4c1b13a0d01f4c5cbcbb"): true, - common.HexToHash("0xcfd5dae484cf9a1fe1165acb5ac0e5b1ee9c3ca77d27f53782e704ac2b24987d"): true, - common.HexToHash("0x52a19fe047e32d55bc09eea25546d23fe65a6ac628d07e6afff3ce38fe0b4980"): true, - common.HexToHash("0x1fbd7f610d8a99f66a096a25a2ebf009d6073959839e35a7c8da895e5376a083"): true, - common.HexToHash("0x61ffc433769ef9d38cf870f94d2eaf26591818085581be8e2f1b95566c540e9d"): true, - common.HexToHash("0x10a97511f33dd140424957348852fa5c4e7738e1b2c971ef7394e246794ce3a3"): true, - common.HexToHash("0xd3e38dba8e931cc5e0ed8373fd651fc6302c9d394545aa20e33dca4bfa7d3034"): true, - common.HexToHash("0x7c51f687a1096541719625f245866bb604b72ac3b0a764bc4a7562e6f107a57a"): true, - common.HexToHash("0x09305eac19e3b8faa32be8c517aa7cc53ee2cc61e0965c928ed75c6bfe3c4c57"): true, - common.HexToHash("0x0b6579a4e240e27fba2eba812bca06eda9cae054916b7a7032ba7ac5eaaa1a46"): true, - common.HexToHash("0xa1c1f378205377d38a2b7822e1315be1b90a12be1e783c36f7333e056a687777"): true, - common.HexToHash("0x805d858207bd53ac553f298f6ce43ad644bbdd7832bb6048f2a0562edacf6286"): true, - common.HexToHash("0x56317264c17d89371ed3539025988581f04dc30526c71a82898f817761dd7740"): true, - common.HexToHash("0x17f16300d278b2b3538b4ef236c80994e260f9544db13d8dc2799ffea380e2d9"): true, - common.HexToHash("0xb70d07cd849b2cefebd1a2272fd6c7f4d469ac16ee5d2d85d2fc08e5fab35592"): true, - common.HexToHash("0x1954f504d39f1ac9bd55678c3f7561d53f98c9d49d68d0f29a2ef4922e182c26"): true, - common.HexToHash("0xbe7f06f81ef18ce65df86fc054e6e2af90ea587865b403ac0fc95bef5a034540"): true, - common.HexToHash("0x3ea604416f7f73280501e7600417883912037e576828f2b7b05a8e323d7470e6"): true, - common.HexToHash("0x512bd4e807631a60474189f11d955b63566dd82f89df00baaecad9fedae759f3"): true, - common.HexToHash("0x99570b4e073e5afd513220a84ca75fe8b01b572c482eecef7971828acd632906"): true, - common.HexToHash("0x86dc242e7470036eac6934b6c95e89cd64cb168b7e85497a84999b6b976648f2"): true, - common.HexToHash("0x42f5fd3317ae1345a91b8b83df395a81e93ec1a1c7d409562eedbd3e73b0de7b"): true, - common.HexToHash("0xc053fd15391805afcd7a512de781f2a435e94c939ac2ef4fb71ca71b874663b9"): true, - common.HexToHash("0x8c5fe540323ebfc71c094d50116d6d56cbfdce135369871acf22f5c5d9b8f17c"): true, - common.HexToHash("0x7603f5291f9257a77322338dc06cc350c24d2d8f8633116e8442385981c20d16"): true, - common.HexToHash("0x07b7b1b51fb7b2435f9787a7525c3daf7187ce8dc8ffe6b047e2d09669e7a5c1"): true, - common.HexToHash("0x103a0f5da2bd39e6de9854f1798d79c7a98b6622144faa0d3de6615fd168610a"): true, - common.HexToHash("0xdeaadcab6c46822942454d4b1d4b3835dcb5cd01ef68d864b9d67f8e8c5d3d46"): true, - common.HexToHash("0x714b30678c0e3187504d7f473f76ad17741c4c94f4ef001d096b89655eb335c1"): true, - common.HexToHash("0xd7eb07eb1fa022c5461f2288a416276ab977dd532e0fbfb0d816daa7e4cb5344"): true, - common.HexToHash("0xe6f860774eda6b5d855f6f889ed0d6dd8be83ae80e10fcc986d19d4897f4ec86"): true, - common.HexToHash("0xbda93d998bfe6c68d2d29d1c9529ee6e82bcd446ec47661e5ccb74b16a507be0"): true, - common.HexToHash("0xde272a22e3f06c118a188d868d1613e56d5447b7c2505c709069d1c9ae4cd149"): true, - common.HexToHash("0x9e70ff2bf867d19330b06b73e094a76ab0be43f16bc3c7d3f67f8bf747aa80b2"): true, - common.HexToHash("0x9291fb545b6833ca2e5014e267ffcbec61b67503449300ed5705e8aeb16f9cfd"): true, - common.HexToHash("0x6e2b66f46ae200fdfa84e9794e0231386834d91ad3cba7a5e53143aa62dca9b4"): true, - common.HexToHash("0x05d0871f6c9642ed3be45a44521c9a1337d37260ef5f55eba060d55ce0445077"): true, - common.HexToHash("0x567821dafc9e69d9c4e86292d027c1c3f7bc5d2cd5c53b50858053f2a37bc468"): true, - common.HexToHash("0xdf58ece6edb2e15fd89f3f8b1781ecd3ce89e24d9cb8bc0b014d0155a8455bb8"): true, - common.HexToHash("0xe70372d5b9fbda59f948b65b8bbd27191edd3d11b9b39086d141ac143dedd0d8"): true, - common.HexToHash("0xf8420abe629f2b49590fb1f6e47da2948fd5eae94bfd64ca9ae37c703772230f"): true, - common.HexToHash("0xd62bece2bad21359ff7f3401f23effa85887941d04f746e2b08d920c75e2fe4b"): true, - common.HexToHash("0xea35bea6266f04b9d81dae60c4d7aae44f058469d2ce35670e107799c1e86fca"): true, - common.HexToHash("0x167314f5aae1116dd178256a7717d2fa07b118fbef5319dc57489785f54f609f"): true, - common.HexToHash("0xc96d1f43bcc61ecf1a7b42c58839d82247c470f04c4cbebd86d0fdbcec38daca"): true, - common.HexToHash("0xb1ade113724c958c2916d5961d34eb7586a1b8aa67cbb7394b116ccde1486427"): true, - common.HexToHash("0x54d365d861417d22dfcab20dcd641d510eeb3f58da2ab7b1088eeb98f1001b0f"): true, - common.HexToHash("0x90aa2a807657308c7641d5b5eecb21530e86c63e5d12ba33fdc3ab469148a91c"): true, - common.HexToHash("0xae21f428305d93c3e9f6e78d713f7e89cfd37685c73959ee7261fc4284718cc0"): true, - common.HexToHash("0xcca0f480c26cd18b0ba97364dae78fc76c2a0a5e4879836e3a112df89f626c4b"): true, - common.HexToHash("0x46eaa11dc8531e7a5a0e56035207ec7e35029f1f2ebc567c1bdba404be117501"): true, - common.HexToHash("0xc95f9e6376afc88021a6a657d70af066e1ea3ed58f869aeb33265ae333655e84"): true, - common.HexToHash("0x87880eb35fd2b711fcd9338e1c189efbbaafbc1998bd004771add452b0c42269"): true, - common.HexToHash("0x5195f0687cc638aef74f555da1fed9b2da6e6d3d3e5ab6e765dfd93470994886"): true, - common.HexToHash("0x80811e3efb6b32739d1400180539fbfaf8c2437267472a460644b10c08c39bfe"): true, - common.HexToHash("0x94a7d08b7fd180efa21a70445dc5313ce83c185c3359260313046696e683d0b0"): true, - common.HexToHash("0x832d0274aa6d5a922a9c37b35aea6d64df330a9d0fd46fb80c21e003c8a81c1f"): true, - common.HexToHash("0x9f5310806f65b032bdd6695bf98f46f04b19fd5715f52037b112ac0967f57dca"): true, - common.HexToHash("0xf45c8e4b2716605b3806f7da6356057c13ce02f87491cde85cc2c43a45925527"): true, - common.HexToHash("0x80e68ca5abd3c1d40d3a0d5b3a711ac4266cc45aee85131efacff8535a1efcd1"): true, - common.HexToHash("0xe07d5165267093c0962004fca4717d7115c3c2ce55598286a1f4e7b95fd4f10c"): true, - common.HexToHash("0x63116b0096c21a780cad2d015838bf1fafdf95b87de51ff032694343abc7f17f"): true, - common.HexToHash("0xf01b207c3b3bf5e858a1fba79f5f630671a647846368640c374caf962921195a"): true, - common.HexToHash("0xfbdf87ef499ca933fe80ba507f18668410d3c72617bded8bab30243c2b5c9fda"): true, - common.HexToHash("0x01c4cc8f116b6fd891f021d45c358c8b2486627b4c473e71d1a5eba12eaa0d21"): true, - common.HexToHash("0xd1888dcfb6abf68f1299a62b6fcd6bda86b3281a49de41ff95ac0230913bfe69"): true, - common.HexToHash("0x1da3aa97fa3569d4772039ca5a3e440451fb7812f26eb17e258029d25f80faf7"): true, - common.HexToHash("0xcec416324fc085227dc8f42f69442a9821cfd1ea8f7846846ae4af282c5d1859"): true, - common.HexToHash("0xf2c554bd5b67accf815c540c37ba77af879f8e35965460b9491b6a456ee73b3c"): true, - common.HexToHash("0x970d7e94de908476f440d9412ea2a7c63ae3511e198f571ad909c32b90dcfab4"): true, - common.HexToHash("0x2ed09cffe2ac10504638b93a4562df28cff7bb3bb1b6b2ebe3220d917b661450"): true, - common.HexToHash("0x20672c8419ac6d6e6dd8cda33a20cf5354a3e617327f0ac73955fa8c191fc4bc"): true, - common.HexToHash("0xb9ffa0040150ef04a0e8222d3efcf0e35a2582a490ec5d68cdb3ed13db02da35"): true, - common.HexToHash("0x134b070897703f34489322c2e68b2c0e850eb002d80eecf7688c1f502b819751"): true, - common.HexToHash("0x95abd0240a404e85a5f0b26dd666762f319c5acf01591eef9adfe279b789b82d"): true, - common.HexToHash("0x1de24f6e21d71baa230d055613791ba9f755abe2b30fc95a93f58b2c2037118a"): true, - common.HexToHash("0x2b02e97c61bd87ac0341152cbe44d5e89214184c9d89eb3c895406afe7ec8c9d"): true, - common.HexToHash("0x7cb8db721ac7845d1cfa84fa86266cb817ffe52c0d45877c02271448dc33c817"): true, - common.HexToHash("0x2ce60436d4c2ad4cbd88a1253fcdd3284028198eac2e9587323d044486d536aa"): true, - common.HexToHash("0x883d1149357d3c1c992bf544ff8f6f8240e2470593eea486c3eb5297356f7195"): true, - common.HexToHash("0x29991826ccc1d78af5dacc2e515d15a7ab59a1c6e5bed9147197d2578271a3e6"): true, - common.HexToHash("0xb24f4709a82496e0a0bd478c01fbae7e585e66bbbb01969984b3af24fc07d2fe"): true, - common.HexToHash("0x7ada67b8494305f2be7200840db9f8539cf26668b7cb0375f81ab102864429d3"): true, - common.HexToHash("0xa018aaf2c1e7ec59bed8a12c9a7a8ff496be8abce1194ff8ee798945439d87e6"): true, - common.HexToHash("0xc7975a137c230c442209561623521764deef68e25ed745c0b785935b1342ed4b"): true, - common.HexToHash("0xd308303aa6f0930d3f67bb1097f5fd140af99ae76d19b01716b24c82ae7feac6"): true, - common.HexToHash("0x4a00b5a7083869853ee7285d6548fefd8f5f67d7630b223b847e2f626fc36d69"): true, - common.HexToHash("0x79ab7d16e5fd01cd6ed8cf9d6cf483f915bca95c9957e695cee33fa3b45f95b1"): true, - common.HexToHash("0x6eac2acc64916951432efd14ec9899af27d84ae4a120cb0e22524389f6e42693"): true, - common.HexToHash("0x672ddf6ce0528b0391b9a2331f105efb3b2982b300485c42a4d4cebb6114578c"): true, - common.HexToHash("0x4089e72d9259834c9e599de96f06a25baa43cbb462c1d46df94129b15989d28a"): true, - common.HexToHash("0x116cc32c2e0ad7ad0814f4ad8045593ce75a6a078e12002cdb9242db6b1ee753"): true, - common.HexToHash("0xed4a3261f7c5424c767e8e943961fb8642406c1798af0a13e09e58ca99457f1c"): true, - common.HexToHash("0xcc775e19455999c2d4019aaafb0ddb740e2c1dfcd62338854f7afab579cdac15"): true, - common.HexToHash("0xe51d09addb63e2a0e88aba12924fc2ee0ceee2b63ed21f2d47821ca2b6ee4d48"): true, - common.HexToHash("0x923d0870252f5921c1c8477c1d62bdf5cc1d27c14df2d2b36c5a621f10f8b8b9"): true, - common.HexToHash("0xdab8ca96b4decbb735d1eb07100cda7051c72ad1e2203be3a3d00451ba58de32"): true, - common.HexToHash("0x54e441bc16e7a82c92a64e2e11f914107bbfb8e22ecbe2e29c80ede3eb599936"): true, - common.HexToHash("0x684071776c0b47f6b81e3ec1eebcdef8fb6fe03d25acf8b035b3411e6e68bbbc"): true, - common.HexToHash("0x427e906eea6e111640ea110cef6a07155c3fb851a390dea4199bc0a068f0c989"): true, - common.HexToHash("0x4851c5fd76748a84af602043b14485922f229f423e41e4829f4455f3f90d8b2a"): true, - common.HexToHash("0xa0ce3f07335fdb070318d16aef492356c290c717306a5787e9f086079ce131b8"): true, - common.HexToHash("0x5dd3a30c547a4036add1085da7e284894214e2f5d3e5ad33dfe7c87a5fb8a9e2"): true, - common.HexToHash("0xfee8b92bbf30bd93299fe208cefd4f635a945a56f0e24c26088d2898138feb36"): true, - common.HexToHash("0x44a23b5e2b0847d7031db2b6f5427a2c40efc91d33132256dee2db11786efa27"): true, - common.HexToHash("0xce23d630dc554e4b9f02eae3db6674ab895b0cdf36cee3e8e46191cf2bcad080"): true, - common.HexToHash("0xe6f59e3f4a3b264c905e4812127770432a8f6f1b1b442b678404363527266aa6"): true, - common.HexToHash("0xd74a7d7c702eb97b1e10a15f97a19e6e5d0eebf223ecb383aceb504055349237"): true, - common.HexToHash("0xb6ec5d91c7836b88d0652d9da13690f80fe343148a22ff3ec118e2c6d9e7d474"): true, - common.HexToHash("0xd1f51e4b144e82579d2e1c96fe2601c21a311faf81db2aae4c878ff7eb3fbbe4"): true, - common.HexToHash("0x5c37d24e991a97c16496103ce0266b2012b9d56767a3246364ffbffa90300435"): true, - common.HexToHash("0xc31df009f313e0fe879c163fcc4d9e7f26428e83399da10ab87b7b28aaff1124"): true, - common.HexToHash("0x56ae1a7135661ca41ac83c37b9222541c197f27d06feda56614d4473bbaf79b3"): true, - common.HexToHash("0x6c20d39c5c3297b9b68fb1c25f467c87711f944d5728c64d7231cdbd3d5b0de0"): true, - common.HexToHash("0xc96c0bff2155a010d2767685cb1647963f2913124d173408b54cfe0fe0f4e31e"): true, - common.HexToHash("0x1e54013a80476ff06e0871e04149d7daa31b41cb80a6436dba99d3e13b84f773"): true, - common.HexToHash("0x8b0d5baff90cc8f4c641c5548ba25ab32e6648e21f5875ac9c732ea5d22f9a18"): true, - common.HexToHash("0x0f31ec0347d6f0e569906330d14f00db2abfd66b9417e0d09658f9578d674bfc"): true, - common.HexToHash("0x1639cc3bb9b996cc922ab8ac3ddd1413ed386d3fafe03e2a0e6077a171d319cf"): true, - common.HexToHash("0x846fe0f25325655fbefbc6c4ae645ae61bad013b7e323be6102ad3bcd81f6f69"): true, - common.HexToHash("0x44dcfbf20e872a0290e2ae7f7801850d81506c41578b40af3129de604ec81017"): true, - common.HexToHash("0xb6a9dc3cf2f4ee991bcc2a424adea81b43e32e72621ce1481975b1a9d515e89f"): true, - common.HexToHash("0xb94aac07289ac8db40593f9949d0b3c1621cade7c3da815177c4c926bbe89b3b"): true, - common.HexToHash("0x69556e2cc7eb22b1acd33c65bfcbfaecd45312f481b848da46d21a14f8e5963c"): true, - common.HexToHash("0x3f1cb83b34006442a7c004e8e8c882c77baa84073130bdc0ca3a1361d614778f"): true, - common.HexToHash("0xd37e4f5409d0d6ac7c399b8bccee7f84fd650aa5a7c29c8244fd7adea7d9d8e5"): true, - common.HexToHash("0xdea32bc8241f06a8373e400351dbdb6ef88ccde4ca0ddaef3e5e40bcb6af27c5"): true, - common.HexToHash("0xf006bc2e2537e2c37085e3a73b4074db3bb2db4a09a95fc50941978f1dc877b3"): true, - common.HexToHash("0x2088242effe64601105fac96b16b90dfca55b4228d8574a1dfd39d5e130c0f60"): true, - common.HexToHash("0xdf5685ca88a0fafc127e25d74c7a94e9e7146b00a0de0679af75f1f44305dcbc"): true, - common.HexToHash("0x66acefe8fff7fc804848be484d99d5b153285ccbaae09642b07a4bd8d693f14d"): true, - common.HexToHash("0x7947fab11099057407f91d60d393b220d49512ffda05c522b0687c053db7ac25"): true, - common.HexToHash("0x3bbb4591268f04b8c95271a6e59ee63e4aca9530f4e80d5c94108d31a91d2251"): true, - common.HexToHash("0x6bc426d9f3c6c3c6b76f2cc1c55957be9eb982a8afc31a2456d8b0e2164b33ff"): true, - common.HexToHash("0x32dfb9329bfd0723498368433a10550359bf6f5c7b0497d9a8641154d245d28d"): true, - common.HexToHash("0xc2cc6dfa5bedfa02d389c32105da0d8d41863884dbc431196954a64bc5e0ab78"): true, - common.HexToHash("0x525b49bae9ff79597199b91afd255f4cd1347c74b44815e9a919c2b8525e52b2"): true, - common.HexToHash("0x13f363ee5c0e504b429e006fc8ee7abbb5cbf57cfe1c5230c7a5f4506ce30dbe"): true, - common.HexToHash("0xc62b913b130c1d0aa94b75c022ae253f381d47e2ea228fd86cb32c92c24f9f50"): true, - common.HexToHash("0xc12becac6845fcf048d0824a3ca37c78029809d5b6cd047689cb61ede95137e2"): true, - common.HexToHash("0xbc3a81b1045705471c1007df4291a4b34d58668477ca2e082d1304c40a46601f"): true, - common.HexToHash("0xa09c7cc36fb418821674eaface2a82b66d73c180faf8799f39f6f394dc4b8e7c"): true, - common.HexToHash("0xf438fa473d9ec4f62aa9234182f2803ed5b8d8c1564cac2730d7ba921033237b"): true, - common.HexToHash("0x1244a1926c98600a9a36912422f0e6e4e14fbabd549255ac7e3e9fab7394a9fe"): true, - common.HexToHash("0x42db51a28981610206b3fd2b4281abacf10f6990ce16e4d3555ffe5285a9d8b8"): true, - common.HexToHash("0xb30d0ce4cfcd704533d0098d2c6a446418469792c506f35e50aedf62d2adc3ab"): true, - common.HexToHash("0x03a72c320cebb392c6d3f979bd8b0f5ac6cbc9d051ddeb0f69f0b993f4bd7bad"): true, - common.HexToHash("0xbc22d350abf25349741c944f5bce3bafe251385e67087863e447ff56abdd3c3f"): true, - common.HexToHash("0x17d7ae643e912930e2de09dc45280e0035cb9c89b369da56891da3f4a1c94883"): true, - common.HexToHash("0x0def6b029629b785bfd7c3be4cc472ad95e23fddb71191023915ae83ae488351"): true, - common.HexToHash("0x4f46e97e7e1ca210643808280d776883557bff5fffdd7e60707e9160165d5e0f"): true, - common.HexToHash("0xf210b314e441c6d8f5a7c24bbea9a8cb8016af32b4f47812256ff9213fd80e06"): true, - common.HexToHash("0x53b9534b87138b3bd54341d3c31dc359271db482cc1418b35e1132b70dcb2cdd"): true, - common.HexToHash("0x3f39fc6197ac3f30d4540b6d9dfb85dd28fb1de54a3e00e5b965589297dddfa0"): true, - common.HexToHash("0x95dfcba7e67824a413520200da3dbcbb948ac0ad09907699a146877f6326faf5"): true, - common.HexToHash("0x8b29bc3136e138f91246e79bf3d049153849fdd021d374aa7778751f2f215406"): true, - common.HexToHash("0xcbffef93fb9bd13e7b682cb5be03d6f269155c8c44a1a1a5e3520986ce5868f5"): true, - common.HexToHash("0x32ad07e373cb97844d5d825e38636e7c29e0264a367d2eed65b530a1efc2f415"): true, - common.HexToHash("0x973a10b52913f3c62109a39340b4db4a141a582d6714a08d674f066238ee967a"): true, - common.HexToHash("0x9882790b03f49279d31e847e108f20477c807e4ed4f0e376f646aa2510d2999e"): true, - common.HexToHash("0x3b64b24d26d0a92e3b1f3a7bbd259984438a383aa9e77ae1dae635bf30705938"): true, - common.HexToHash("0xa2b73b02e713eefd44d9e2079b5c6584bd5d7414be40c5bcef454fb691c04939"): true, - common.HexToHash("0x3c9568691188721fd07ca4c6c37f2b67a1cfd753edf26bd8374154409957ed03"): true, - common.HexToHash("0x2e6d5f944b310f49e35580689d6df4703334ede0052f4f2b493dda2dd8220654"): true, - common.HexToHash("0x209cad37f8f54df01311daec5d3d86231c2568f8e4f2c666f00e033e6e8845e2"): true, - common.HexToHash("0x014a72e73c05a6ee0e22b6b52d1e0de9004c7c642faa4d596af14cb4b23884d6"): true, - common.HexToHash("0xb431bb9ea28ea143b5493da72baad1e6da7e2f6b713b7bede856e1737b352384"): true, - common.HexToHash("0x666a5b2963a21ff1cc73e0903c097f8cb895fd6a912eef89597ef147320607cf"): true, - common.HexToHash("0x1e6d2137b2c816993343e5e5a7ce0423cc11d6452fd85933a2662376a66790b4"): true, - common.HexToHash("0xa93a7713e0efd98544ae2a8fbd3322277f9ba282e1be2a3680deb18f6329a742"): true, - common.HexToHash("0x4309a4b949343dab725d71c201130cc16f52c825cf9181407d64e9c5612b9048"): true, - common.HexToHash("0xc69d6b0e9d5509b4f3dfa4921caf7456a1a9e9e35ce47f82cd4aa41f47d19531"): true, - common.HexToHash("0x265984c1ec353b013c9d9b73e3bd1f6cf725a3e0d63e258947143d408fb3c7f0"): true, - common.HexToHash("0x07dd24042c9d522fcef47ba5ea99d93360d02eb91a3fb516eb20fe3d003bfa56"): true, - common.HexToHash("0xe4eac1fc3874b4b45429e2ea2be35102a18c6327c6feae83ca6868630e021022"): true, - common.HexToHash("0x4a326cefae1df7e9a79ee2827b59388324113bbbb86b77f30c91cc8b2359e745"): true, - common.HexToHash("0xb0f05ceb482eaf5a67431bdd1e6b3cb8a04dffd773229309ba2dbd73ad5c6746"): true, - common.HexToHash("0x1199a00d58131e940968bb1aba4a11475d045f6403d101b6d6f5baff471c3a5f"): true, - common.HexToHash("0xbb46c5ab59858971dbe0e7e06f79756336bae90afbe076d18615a91e9826a742"): true, - common.HexToHash("0x0320efb787e3680fc8f007e32d0b582ecc1c0bfd73bfc8aef47b8c75d8b8276f"): true, - common.HexToHash("0x298eda0cc6580e85c61b15736925607c96a621cc772c91f742d86552f1dde776"): true, - common.HexToHash("0x39bce8eb56ec09c7859e5176b436de537ff8736c632ab0836586aa9da4e39d94"): true, - common.HexToHash("0x92fec70924fe504c82693790769737c1a73c40c873a078050c040f8bf6217ad2"): true, - common.HexToHash("0xe2416a9ac7db59459e73dff20b3ce313475070812d4a9d50451a20436a66073d"): true, - common.HexToHash("0xde8c215b6cf4aa474937d4456bfb1bdf1db18d7976a4cdf994759425ad519cba"): true, - common.HexToHash("0x847b5e4719a36aa1a859dd9946f320106d772d5b955cd9ad536d65280413d80f"): true, - common.HexToHash("0x35752f8e4a2e2c6ca0cec9f33e36b5025f259b0fc0fd43fc92ea877e56dd4205"): true, - common.HexToHash("0x680db918cc1a3612646846d0745fe6bc9fe145e07a574660cfc6fd1df3974ac8"): true, - common.HexToHash("0x6057faf4320bb7a8685a492dc0f7e4344c55cecc1284d6a7e7bc92a3f1c96f53"): true, - common.HexToHash("0x88aa956518df43ccd69a90533a3bb631d014bc69ec6c9a47c9d295f5fa1549ee"): true, - common.HexToHash("0x9f262ae6c2e8996c960c8c4f781873b268a2a57cb4f2d81434f884039274dc99"): true, - common.HexToHash("0xdd6cf02c52bc25caaf57d3d31a83b4dbe5656078474eec949bcd8e1a51def041"): true, - common.HexToHash("0x37066e8f2ea0637e473d39907410e8f7ae25a844202ab4ef4da1debc3647f002"): true, - common.HexToHash("0xe07901c8ada6adb503a77a33e327a70e994ffaa91fa3ebb75b35586d0504acd0"): true, - common.HexToHash("0x0dcef4b8e64d7cf47e3606d5fe0bf473d603891f82f256db6e283e51e53677d9"): true, - common.HexToHash("0x6f61caad9ecd2cba2a75aa5e56f9bd36c5e282ef6e34f6fea366c1692f6ee07a"): true, - common.HexToHash("0xdda67656bec695dfa558339daa1a1841541abe6b256857c24ba5875e242082b9"): true, - common.HexToHash("0x755275b78a2b43f1f8f721a7091e761b88047946e8f77f70066fc85a0cab9e85"): true, - common.HexToHash("0xe7da87d3a387e6053b2c08b2cbef29ff4eee2abda7af23c898336bf362f6a471"): true, - common.HexToHash("0xc07ae78c0f8c232a0eb3525186f6302c960725a3a79f10c126f6965e82ad866c"): true, - common.HexToHash("0x45164e9423a735eaeeb317a87e0a440bda2d6e03e8ee34860ebabceedb904d55"): true, - common.HexToHash("0x24c84aaa66a5681f996d8225a1b7832dd9fd02544bb4541cf023d1d5b4abdddb"): true, - common.HexToHash("0xa92f1fcb9503b745484b46f8fa29aa23407cbdee138e14dd60886b166a2a9e96"): true, - common.HexToHash("0x0ee6e934654f0fe8a39d66dd0c0dd36b6927f58d58d31e84d446b9c90e94a5d9"): true, - common.HexToHash("0xe4654835ff9055e842d235d96a1b56de31ed901afe6928e84748cca4c0f2d274"): true, - common.HexToHash("0xd111d3d2e68b96a1e34f767bff47c81d54b3a559bb650f58d82150d40c1e6f99"): true, - common.HexToHash("0x9a499492b7dd4f556f2677415f2c0b737437bcaaa09219be91d97fb961895cd7"): true, - common.HexToHash("0x8f86457d64313ba74ec9e7bcf63739d93359f8ba4eb395d83086d38a1787ed46"): true, - common.HexToHash("0x699745a107bc6a9432d8ae3f4442219008344c611d9e06062d4201e043094e5c"): true, - common.HexToHash("0xff4a1bb18a9717b3cc6014e4d0071793d2c0a84d634da17036cec08780c559f9"): true, - common.HexToHash("0xb6dd08d7c7e1ef34fffd705c637a9fbbb0774b2d18435a4c32915893a484f4b3"): true, - common.HexToHash("0xd5d0a27a757df57e91c97213e21101c43f1d7c1e95960c6fcd25241454720664"): true, - common.HexToHash("0xc44f6e248be89d3380f820c9f3dfddd02c76a145e69cd20d127e9d2367669163"): true, - common.HexToHash("0xb2b811fd7579f7d4f89e7ef622efac3234bea23d4ca69526c7db21fddff0e867"): true, - common.HexToHash("0x051cb3d15fbda4d2e4c724a66cf48788b192f97ae90cc5291a1d34f90d5591dc"): true, - common.HexToHash("0x28afee82cfc260c5ab4ef2b450c61fb2d57eacd01451f61dfde6582a8ccc5e5e"): true, - common.HexToHash("0xdd60883edbf6e0e73ef84dbf273cd9a88403f0a44362977a72e8cce88b0840f8"): true, - common.HexToHash("0xe10047463d3bdb9da4585338cc7ce06a970f8d4cd84884f0a8545fd84c2ae598"): true, - common.HexToHash("0x5cc8fbd5600deedb2f08f9d5ad6ae40b1a1751f3ab1c58d2e18faaf7c82139dc"): true, - common.HexToHash("0x9e71f0fd097afaa4210a82ee7980c993f906050a0b85eba93f8a4d6530894b97"): true, - common.HexToHash("0x9434604b45cd588153949b3df50832b1092a4f5e4b7a5d57af8b1b616cc6550d"): true, - common.HexToHash("0xcfd5c37f6b05227d11afb620439564f3c4c8b01db7387006c49a1289e8509953"): true, - common.HexToHash("0x149a887d9646bea218af8e17dc5c09086207b9b4208b189ae74b669f8d05df5d"): true, - common.HexToHash("0x484c55f303cd4f3fa06ca8897d81fae41bfb992412533414c7a107b16bd7e51e"): true, - common.HexToHash("0xf74e38505bc93b43c81be1766d8ac183ca6ecff7b6a7d68119e70817811c0d76"): true, - common.HexToHash("0x4c013c6fccea1b9894bd7d3160a704411d1c18006b6625d7d9cd093de68f3fe7"): true, - common.HexToHash("0x581203f055797a41161435c28edf5acf42615e95f6c2cce8ccaa2f2eda108488"): true, - common.HexToHash("0xc94ca904267ed84d0975ee5409f724ccf2e927976dfd82902760594dc1e0ce26"): true, - common.HexToHash("0x10866420f7b62ab8a5ff083b559ee5427838c64fd4d320c0ec5f8621fe1ddc58"): true, - common.HexToHash("0x263abf8b830964349467b9ada8ec9650c4170d6ad12dd75a33206738226bc9eb"): true, - common.HexToHash("0xa3a5a003fa0b7d73b0ca4beb27315714b9a15edcdeeca6eb99ca63746686a6a4"): true, - common.HexToHash("0x030bf5622001f53dd1f826eaee8c43a9a952c00d8d5bcaeab2d09df5c129d94a"): true, - common.HexToHash("0x7c8448100c2c8fde15a0eea0fb11a04d997a696b03b916dba92663e17ce7aa27"): true, - common.HexToHash("0x79a89c7417298879c18ba78b5fcbf424455f29d99153e9e996c37b09e7233ed9"): true, - common.HexToHash("0x437383fc89c04f96f1de85f838f0a34c3495a4bbbcfd95c3a2e10ceaca3f752a"): true, - common.HexToHash("0xee19470012b7890abc519d7b9b9351557388abbcd0a132d50d8f7774b30076ce"): true, - common.HexToHash("0xaf8dcec896e9c7d32f7892e9f26fb7c8f26dcb95c4c0007fcc7837f8f39660c3"): true, - common.HexToHash("0x7c53977b78f33d78e7d0317fbe42219b1d43d58237547bc55701a8d508a536e9"): true, - common.HexToHash("0xbe44f66ceea068c96f30bca5b17ac0dbd3811aed294c164568d582884ae187cf"): true, - common.HexToHash("0x736edd758b635e77b5d8a358a30695565dd80e547b6bef270f4717fb5d67c8af"): true, - common.HexToHash("0x0bff7c182c3df7921a64eeb032c9b90be80fb0c1ccfe4a8850741ce1e6e532de"): true, - common.HexToHash("0xcd8f74f70db25ee865f6d0714713de3e16be0300ad3208b01d5ae872ef3202aa"): true, - common.HexToHash("0x793fbaa19822ee0b21b0aa73f4f1fb3a1077928da401745b627f4b6ed1df646c"): true, - common.HexToHash("0xddd5325c2b5050d239eb660048b6937b19951019703246f3c84b4655ec34a21c"): true, - common.HexToHash("0xf7faad54740015d74b8dca5a357d411f75c5e3061fe90e547239f2de13037edf"): true, - common.HexToHash("0x038f2375cd971018422131f74061a776820bb00f1472ddd76301d345c407c19c"): true, - common.HexToHash("0x1a438e3fa593cb105a98d831a968ad072ab7a68f3117dbbadc6f0f2fd230a097"): true, - common.HexToHash("0xab847d0de5d866c3946b4b0340c64bcebbc1cb96528fd89a9b713b4a9e07eefb"): true, - common.HexToHash("0xe980aff25ef53a9447e7e9cded1932d74996b1c194f3756266d83ec11fa4b8df"): true, - common.HexToHash("0x0836ab2da7f2fdd79cacb744922023ec7b3d2c7c6d1b1be0562d8a2d651be53d"): true, - common.HexToHash("0xf3591d1e6cf16a8121a86b3f30f81f452fb5d0790c3f3b197abf6d8bb754bb89"): true, - common.HexToHash("0xa52a3f7d4a8107616f93e1eca2fd2fae069e54866fa3d78eb9c5db21deef1faa"): true, - common.HexToHash("0xf8ea402d8625894db2fd3980b1989ba3be01794f713e0a95eedf005c6c25a69a"): true, - common.HexToHash("0xeb132a150172ef420fb043f0b2ea296e276efc897bf83cd36ddac8be6937ece4"): true, - common.HexToHash("0xca6c49093fec53463ef62487733060b5ed68fb7dcf54e5bf1c5737da9ad09ccd"): true, - common.HexToHash("0x566daffd55401002a7d85cb176f28273df661e0b7fe61328ba44cd3fb30e01d8"): true, - common.HexToHash("0xe9bd3553375e4604a8fe3511e09a824ebfed7ecad2d42d59c6134e45f5b83130"): true, - common.HexToHash("0x117fccfdcb98160bd8f5edfef51a155b9d43b6bfda070461dc8b4dec17fe928b"): true, - common.HexToHash("0xfd559ee683496a0e15a26d2f6ad69de902c04c5b88b32448397321a463145f92"): true, - common.HexToHash("0x32b6a76917d0cd13e64a2b74f45df87bec5f0fbba9a83371d3e04093a310931a"): true, - common.HexToHash("0x563ce028233fc8837227ede889e0f0764fc76a7881a9c350e77222c16e741991"): true, - common.HexToHash("0x02cea56b990d5e321484ccf587472725ff8996a149a81bab8c447ceb7cf21d9f"): true, - common.HexToHash("0x3f31f4924744ad77852eee0219d55f0fa7adf4bdd7683a82817c32da4c6e095b"): true, - common.HexToHash("0x9ed6a0f1d88f1b4dfb912befa43ea9d6b7b1713e813b049c238f8821c76f2370"): true, - common.HexToHash("0x3008a40de3b2a323f993414f7226c0e85d1050e9abb78442cf2aaba205b92ab6"): true, - common.HexToHash("0x433092414f0c6cc989e5e2723e6ba039e0bc9b71046adf408e0e6d8f26377853"): true, - common.HexToHash("0x6d9a7c36d41fe290bd4474f1f4d73d36a71f96cf6bae049c7f91c498ff5ea3b7"): true, - common.HexToHash("0xb731b2e80ef95d33a22d28f7a182dbf7f7a470a627b235c2d47938a15f1d7b78"): true, - common.HexToHash("0x02ca3349b81aa63da0dac9f190cb405d67593600c661ae1e8ea6371ae90b6327"): true, - common.HexToHash("0x777afc6688d3ed8e80de00dd1bd03bddb68a29e511aa645ab8728fcba3fbf322"): true, - common.HexToHash("0x45ee04ce585d7ac622adf39e148c997864358a11ea58e027957aa43ed27a3688"): true, - common.HexToHash("0x92404f68c56ec9ffa69a4d4375102d073fe775eb481f686349d6bb96c4c7e390"): true, - common.HexToHash("0xa0b797e50b7250f66b962de1f7f21a21625fb8ba5f8e61b997e28c22ab53ce37"): true, - common.HexToHash("0x13550dcf297a3b29b828738c38cfb1c925924d03f887dff09b1777e860d834a7"): true, - common.HexToHash("0x492d2feefd537abc29c47e8b3bfb3b8184dd6044320e21353e8a57260ad016b7"): true, - common.HexToHash("0x639bca5e52bbd649376eff22b76f50058f1c543fb041637d764d175dbdaa4bae"): true, - common.HexToHash("0x9fe217565287bbb56c7fc223605fa65f6763b32cf861d4e76cf4a2d5545d1649"): true, - common.HexToHash("0x8f27a766b67dd0f12ccb12c15d1c5ee643068b6bd33387bc67a518de7c856f3a"): true, - common.HexToHash("0xe378d15870a4fcd5e8c3c37838c753c1d753888d1c8b87362df83e2bcaa273d0"): true, - common.HexToHash("0x461308079c91e6ab0a567e215dc4c62e3d9b4f97a06a41ac7b410a807f7b4a08"): true, - common.HexToHash("0x96f54eb76117ba7ead3e33cb5ff0751aebc7aeaa251af0e9dcdc38b8e5068a75"): true, - common.HexToHash("0x327aeb2e4024a5831b2fc0e021033e1ee36b6aa80a948272b2b205afbf47982c"): true, - common.HexToHash("0x8b3ad9bdef576b916516c7f7e9477fc72d67b659694118ceff2fc22d5345d427"): true, - common.HexToHash("0xd7b17dc25af0b65a2f638d4ab1e070005b59ed2ee863b70ea29252271486025b"): true, - common.HexToHash("0x56195e570c3aedebe2c88fd99e73ccdee3c1bf2201f5e91de7c8604d7c148691"): true, - common.HexToHash("0x629834705bddfcae699defcfd23e09eac6a90123caf7025a766552771bf6321b"): true, - common.HexToHash("0x566fcf355fbdcd908c25ed630fff68efa686861093c618a22ff125d41f068b22"): true, - common.HexToHash("0x2b1f6097c14aa302a31eee47977bf25d503d5429a4cfc71702ee66041f439a94"): true, - common.HexToHash("0x5a8058423e57b4a1170f0f208ed7ea52c5e396452baaccd564f13581c831389f"): true, - common.HexToHash("0x0083618aa0382e445cd4aac55ff37c42de9c8e08e5c9d1ac18084ee08e869916"): true, - common.HexToHash("0x5389311a4cc61899165eefeee4f16c9b1dbef5bff97e964accf40b34a7fb934f"): true, - common.HexToHash("0xfd87b8fe79b79fd27eb03ada4de3eac0ddf1e645e8e4230d20c31db048cb3604"): true, - common.HexToHash("0x853d26e63ca2d762b38ce33f76558b6d7f425b74f840b33163042bcb7d70db49"): true, - common.HexToHash("0xbe7245b323ed213c9f19c686549fea683afb971011984b2679b49512c5001ece"): true, - common.HexToHash("0x133b9844dd3cba9811d5630f088e92797c9fb800bc978f7d9258f887fcdf1b1c"): true, - common.HexToHash("0x9d6a069f2180238c7c39257b2e50a90805bf6255a7157a90191a6364e2a40e18"): true, - common.HexToHash("0x82af2b9c4c085f3e1984748618669e0d7c43888a4ab9be7150142ce3900d8ed3"): true, - common.HexToHash("0x85da051da407fb417d6b83e67ba45afad408016644e585e89825997975f9b49f"): true, - common.HexToHash("0x01049a6490dcbda4726f7460d46e6b42ac6e54ff73ecd5021310c6167dbb5b67"): true, - common.HexToHash("0x1975803a06a6ec19a81f65f1299ae2ca7f200a92c7539ddef548cbf0b0eb6684"): true, - common.HexToHash("0x335a753bfbff39a61f1ffd114fe546de44b999cb4db96ae44d870a53ff9e32e6"): true, - common.HexToHash("0x5571c656810ba4107987fe16004c13b479816287e1fdfd9cff0e1f2a4cd6f357"): true, - common.HexToHash("0x05f12bffbd02619d106edb36815590207777523050f4905c4ada0198bbf5f636"): true, - common.HexToHash("0x68e88f15d5cf1c1b045b6d2c1dbcbe834262e26ff0472476e53b1f8cf0ad7ea2"): true, - common.HexToHash("0x879c726c1a0f8283895a25099c3eb353e11b1f2771e50dcb9652c95004644a4e"): true, - common.HexToHash("0xfaa7b04ae07fc743fd56f4dacd2d1b0610576b138bbcd291d5523eb3dd87f5e6"): true, - common.HexToHash("0xd1a5fb0ac113c0487d1d293c790df66358a3b028c8d615003ffcc79ce734067a"): true, - common.HexToHash("0xec142b6b076669e971c46dc6c507379b9dcdba022d2d64a72e1c7c43c7439c83"): true, - common.HexToHash("0x0969915f17bcb6db53e9ee21c5c88d85037a0838490c767e8ba219d9be41e6da"): true, - common.HexToHash("0x40d21c37c0813ae2d15d4ccde7cab6603befc8e80ba4b8ad2f44a3bb8e6e2368"): true, - common.HexToHash("0xf1640ae1ff1262e475ad22e5779b76a44306dc3fe753e48059bccb502dbed157"): true, - common.HexToHash("0xa15b9e5ce74578d6cf19174763c01463d34f489245f4408db128c5c6bd1a5d30"): true, - common.HexToHash("0xa1b2ea48f13e837247292cf188fb1547112bd35b4dbd8b5bc5ce4ffd9a0e55d1"): true, - common.HexToHash("0x8307af65eb86517d5f0cfdd824e9b013e863ed380e709d7ac78c2fd055b6ccf9"): true, - common.HexToHash("0x4f13bc51ca32e65778a2a8fd13b47e18cc5de792f66604ec8f36fb674fd08f2a"): true, - common.HexToHash("0x6ff8ccdfcfad0593edaa01fa4af937e854e384648632602e6504dc6b0a5817ae"): true, - common.HexToHash("0x599cd48ee0f9490b87848b53253699e2a22b59105d28c6e15b8a88452fad3db9"): true, - common.HexToHash("0xd79406371a3af3490a74bf91f39305066ca54b1f0af72fc2e4c0d9f42ab80032"): true, - common.HexToHash("0x81c35c89eb263945d946cd800f160be7ca87509eb08ea7fa101a298ee9250ffb"): true, - common.HexToHash("0x9f4bfe8cce2cd1ff058bec27a9fe1d6d3d524b71a3e9855d1aeb4b76c2dc761e"): true, - common.HexToHash("0x2de7098750d5e68dddf456b28c77fe81f4ce352751499618c242d13507c6d81c"): true, - common.HexToHash("0xe9141bc238028e01070cede1c289914853c4efe807aafdda582e1f05182f58cc"): true, - common.HexToHash("0xd93c0a7708c682610cbd31c6adce911f1f1fee542a1b1c45f6e54bb9546468fd"): true, - common.HexToHash("0xac976aef7a31e39a3f6b3225e181e79ea19a98a81464804f1a2d79672e25c9ee"): true, - common.HexToHash("0xb8fb017c8640c3efd329786de14334e5603a5e243ef7eaa452f7fb8aa62e2df5"): true, - common.HexToHash("0xbc8450fec1e069166cc2c07ec3f9facb55576b30b680887d9a4b2f12ad6b2c7d"): true, - common.HexToHash("0xdd14ff5344a0a5cb0d94942359a9531dc2dc3e976f86aa490ae3a0ff9b788b62"): true, - common.HexToHash("0xd5988fac07c59e23dfc8ae083aa82415125f244cae6e73ea0895ba07564d7b77"): true, - common.HexToHash("0xa2819419a04322f645a839b759d8da62aa37e0f31727031b44b5436ca899e330"): true, - common.HexToHash("0x5549c6d90a684d3684ac287c95b0126e865f54d20707ddaba951f72133a785b1"): true, - common.HexToHash("0x29fa2c4752ff57eef7cce72324159fef963f21c016486cccaa4c8ec952569f51"): true, - common.HexToHash("0xe4d5d7467172bd3d94112dbde20f8ebd0636da490fbb1c5bcca851a59cf1fc4d"): true, - common.HexToHash("0x449665d8c7355f491b9585e45728bf1a9e6e3af9b38d2b6665be41a1d51c320b"): true, - common.HexToHash("0xa6d6408e27e0df31ba618706417384352b4df4bfa8d16ea3d491306cd877ecd6"): true, - common.HexToHash("0xaaa02609e08623639b395f47845d7841267347cd811f160a8135a97218b1e423"): true, - common.HexToHash("0xf1c9872eb167722c5595adbf2243290fd050300e17b01d4dece2670f56a05603"): true, - common.HexToHash("0x35beab3fedd5afbc73d3b206caf47c5808b3f5dc1db8f33df51eceffd0fe1a2d"): true, - common.HexToHash("0xe185791a8c58ff88ef7c1c490b3d6f2561cd3b6b2516236797fedd7084041a16"): true, - common.HexToHash("0xb1caabc6fa200ac0c7efe397b743f191e5914688acb8e6c133ea75dda9f28d97"): true, - common.HexToHash("0xaf53562f96c07a2765783511c75bb4966fded812c0c1c962087f2b60c3ae9489"): true, - common.HexToHash("0xc14421f0ce0d2b16f37fba43dc08454833fbe5d090ba6cf8bb33cea7eef84445"): true, - common.HexToHash("0xa83693cd2467d76aa861f02055a680b36a585bf25f673b95710f0f7202faf76a"): true, - common.HexToHash("0xa41260e2f28d8562a3ded3a60f3d404440c94e666d2745fb8d6ac7df00ca5773"): true, - common.HexToHash("0x20e3764b9b1efa39663657dd436bc4989ac723374b926e55342881b28cb770ab"): true, - common.HexToHash("0x17cacf4b3091a125eb6a26b4131c1db7ba96f1bc66418b3eb9eb123aad8b62f8"): true, - common.HexToHash("0x65125d5fbdb278187dd507668a62c749f331fa2e208d539b8db0d09af23f1caa"): true, - common.HexToHash("0x18869916adf8a0440732ca1a2a1ae7f037c922633328918c21557574c9b4bc3f"): true, - common.HexToHash("0x0161b484ac21988219da40e0468bf5b8cfcd6890a5eea2b15163d3c752a68d73"): true, - common.HexToHash("0x01ea23585f6a99d04740c9c4d18a0d64209b59f5b47e52382f7b7b8981a6f5f1"): true, - common.HexToHash("0xae26b49adebe48a95f2ff29993eba4b3bd3c4cf1886d8fa6efdc07c375ec5ac2"): true, - common.HexToHash("0x288f29fd63266e3d9309a645b0ddbbb04933cee5e1b645177d534dc628e3bc34"): true, - common.HexToHash("0x8f0f136b8eec7e6a661e16fbfc1a21b88a65c36f833354eeca079781497f0ac5"): true, - common.HexToHash("0x3177f4a53abe5ddffea60c4b296772368776fd3fa08c520b02b5c9b3a2a88366"): true, - common.HexToHash("0xd01a0341b5206762a5bc732eed5ac462849cb98da682b08ee43e976cf927fe80"): true, - common.HexToHash("0xefc4aa743f4c9d4faa38e7d3eb499107497b9635ec5427d1165bc8b8e40dcd55"): true, - common.HexToHash("0x5975cd087358978876a80b70cc45b70c0c1df033fe180725fb830116b13c88c0"): true, - common.HexToHash("0xfb6fb708c7ad7d3a3438a6385bb86e0712abf9da7e2fa0aab9519a2705bd843c"): true, - common.HexToHash("0x00ff9273f8e4785138d83b1ca0b6b7e20f35965c8754b42cfc98dea57396d9a5"): true, - common.HexToHash("0x6438a7e521c640e4c4cd600e4934f7069678bc38a9eaaa2cda605c4281207265"): true, - common.HexToHash("0x7c1c0d23c9113380c7e440e5c8a12854b1006903f7ff47c09e7636a784877fc5"): true, - common.HexToHash("0xc6811b751f7e3237399f07b72e6d762539ac3c25e6067ddb0bab177ab712fd6b"): true, - common.HexToHash("0x32eb35ce313662bba0688b322acdaaa5551f59a068ffc0f4dcfc8a6f5afe63ec"): true, - common.HexToHash("0x241d966577ff9b8ed85f4d1a897ed8ea7df31cb601405684e05757b78b0cca48"): true, - common.HexToHash("0xfb868f0f15b4f7c26f9b0c6d29ed42adeb1da9778f5d37f59fbbac7414aabae5"): true, - common.HexToHash("0x4d257c9f76dd7d72091bd0ded9e16039dbbf8f33f95de960332e1defd7579b53"): true, - common.HexToHash("0xb2eb882795ff4d5118a8a4bb7e151dddd912bea6687b15e35952545744b916d5"): true, - common.HexToHash("0xa1bd761580d2a629136789d1ccefb33a77d2b53bb36a147a7b613c4a6d3ec6e4"): true, - common.HexToHash("0xd508e231521c4b7dc3d066d88708f0c8e82dce2da2c6cd8c488916bacd69b42c"): true, - common.HexToHash("0x7c2b24c26bb8da984a8c9ed509c461fb3da0579be5701cee9315f78e8dd1cf1e"): true, - common.HexToHash("0xe978ad5718d88a4d7ec858b7f7a411697bccd99e8c73d505864f15d2132516ff"): true, - common.HexToHash("0x048a2d29a350a1d6ebc1be07d4e940b6a737eaa2574aa5260c21ffec54df0b23"): true, - common.HexToHash("0x0bcae4772e9cab25b257376f434ee694c0582b9dfc59e52e5f77a23aef47dfd1"): true, - common.HexToHash("0xd15b096e2479237fcb124f370163f0222393d1af072f0cb9d7bdf22e2db5e137"): true, - common.HexToHash("0x0c7da14157da6eadeadc53203a11ae668ddf4667483f3a458faa5ddd561cffc4"): true, - common.HexToHash("0x25a22b8d552da9a46221b0a62695491ce9c5e67c98f4a6acefbba7e931c46402"): true, - common.HexToHash("0x76b73a5b8b40e3021e82fd1dfe008d8742d18be296b42e8cd8068888231842cf"): true, - common.HexToHash("0xc9496e1248b2c709b0f13c67c17e4c7c2f3ed2e6c922a80ef3478637f7fcf8ff"): true, - common.HexToHash("0xaa7d3f023a831db1230bbeeed43d695e817a80e6775464ac6be17b40eb0008f9"): true, - common.HexToHash("0xf357d0bc3bd16260e4739a45a18580be247bdaaa78deff4eebeac3b08e323781"): true, - common.HexToHash("0x01a51ae4012bb7a306c0b4eec3cf7047209919d9fb048f59bc0810d1a6f5bba7"): true, - common.HexToHash("0x497c186f7356097d644435d30d941ce9f5ac8df06b27c8a866c3e8a9b66a0438"): true, - common.HexToHash("0xee83cb37efa7507d45a5ea916c34a9df7551755751980701974fd73b5174c59c"): true, - common.HexToHash("0xf91eec7f682d437a1196d7e54e4a76485c0dfd94a16af49cd7633ee7432278bc"): true, - common.HexToHash("0x5cbe04177616f91ac85dd9f8b9d219f594e21d1f180486d29d6c0b7691a388f7"): true, - common.HexToHash("0x74d84bd79f7b82e4d1d84a00d0d9b2c2e2ec0ad94e833613587a1eafbc6c87ec"): true, - common.HexToHash("0x8e6965d50c964e6cef5cac053b3a933e1209bbd43b47b9c1b5387c7032e0f89f"): true, - common.HexToHash("0xf8da5e4f73f88e06f3dcbee768f217217a28938f67e0aff2395820ff867fd523"): true, - common.HexToHash("0x00b799c2e15047173afab10c57b30fe5b4997ae6381dfbb49b4c14b84cdf97e5"): true, - common.HexToHash("0x20e4bab6b32760cff4216d551879ef827cd4bb9f87a53d382cbac8b3cb8df1b7"): true, - common.HexToHash("0x84f148ffb11f0e8e06ff6368272cf01ee6fc5d42a1f3720f6f2421840fa97353"): true, - common.HexToHash("0xda084343d3e4279be7e455e3902331a12133b8eea08b94a9daf332fbfd5ec66e"): true, - common.HexToHash("0xa8a67697e5bdd12010c16d14c047026d61c4bc41b3ad2785f7d0212d05f10756"): true, - common.HexToHash("0xf8ca0e50647e5ae63b491dce8cca5be9ecf308d43074ca020f733d6667009a20"): true, - common.HexToHash("0xe9ceb8abafbbc42ed1e9cb83a193d41429c34d5d9f238911aaab61ca01c5e122"): true, - common.HexToHash("0x6449f8cfb52dfc4747989d147fab745fc97d0616913379e8f84f63e93cf4a314"): true, - common.HexToHash("0x4e51217aa1b5f76c59303a68c2fd2f3db8bc6e7bf3373096cbbd6f3345ad4b07"): true, - common.HexToHash("0xe42d74aabe14afea3221672a4ff9c7216c15ad7c35cc96ad409990460120e518"): true, - common.HexToHash("0xde11728284c5b589a49f77ff2a13e54ec51113955ba8a8a9a94fcac06091705f"): true, - common.HexToHash("0x46bd4e8f6e3cf471853152e27118cb6dc874a064b7623561528d067aaa565199"): true, - common.HexToHash("0x2223e9883685bbf69790170ed94014bccd456d081db04ce2f5583e93f6e78139"): true, - common.HexToHash("0x94ed7e1afef10ac0cb5ac8fd548fe5dbe014590c5f073e4b169f57584495e026"): true, - common.HexToHash("0xbeb3cb05f771f0112e8167f9db996465c5b99817dad8f4df1de4326178a24f96"): true, - common.HexToHash("0x225ed703d723e1c1903bca8787417125594991f801114e8dab699ec862b0d1fb"): true, - common.HexToHash("0xf8e268fddc5c55c1e436e5a4fc4e295757c84b74b953d217a05baadf12011c46"): true, - common.HexToHash("0xe53ae12954425bc8fd1364279e2d17fed2d5a674ce466baf44ae33931bf0a67c"): true, - common.HexToHash("0x6d72da9f5a07ed5b0768b0eb86052919735746a7a0f7445848f470435d2c6bf5"): true, - common.HexToHash("0x7e5cacfad0fd08125a75ae002d86289ea65895a7f5f863656ef70c3b5dd6329b"): true, - common.HexToHash("0xd0bd24f1f45f702fca509bdeb4b0867c9051f75e0cd594ae36de4dca071e9489"): true, - common.HexToHash("0xfd8efbb69d27b29876cf5cbaffed3e2eccf2ad94f9b897cc5d7ed3f86700f20e"): true, - common.HexToHash("0x1374008b7f979ffdeef9697f11339b75d27dc16a4e2622b2dc51fece2065e869"): true, - common.HexToHash("0x1815a298fca8e83484a5875e9b162f413f264834d9b26c7396e13d25ef82c453"): true, - common.HexToHash("0x040cb987adce206e98d70ff503996497ad019c7a74408b8708bdc02c768dd906"): true, - common.HexToHash("0x3027ab0259109b6bcd4a598beca35fb9000588a7991c12b0e4066cf2c9401c27"): true, - common.HexToHash("0x98bff82cbbde07a61689c86c98e72e755785caf8a1df457ec7717555a9c32c77"): true, - common.HexToHash("0x655a5940a2d48495d83b30a4ef0a21ca772b7aaad27762487a3cd0dea5b6044e"): true, - common.HexToHash("0xa83c157ddb59b86c9dbfaae6dd2d8c7bafddb132250e61fb70406615f3736ac3"): true, - common.HexToHash("0x60fad3882cab845d5e8d22f0d718a98c79aeba7933d12d3583044330d6120f38"): true, - common.HexToHash("0x2db2970b82a1c20aaecd44c9f6d116c66b91730eaab4841732e0a4b610d655cd"): true, - common.HexToHash("0x7b7ee6ee2c05547c9b5c9b041c9b1bd2df1ffb4aa1079a87faca71ccabae291f"): true, - common.HexToHash("0x07408d5e6300435f37f6810e785a641b7752ac84460fed08fb524d6955687bf1"): true, - common.HexToHash("0xa25a9f1a4c86322bff972f9cd3f1f4b6e5fd1394f11263ea59da5d4c1ddffc7c"): true, - common.HexToHash("0x8380979281976e598d97ed38cb5aaf37728424feb3fe50b652498eb4358e98fc"): true, - common.HexToHash("0x13f123c65a5ca9d20e08a123b94da728b4bab3bb159b4b019e3f88e5a73f990d"): true, - common.HexToHash("0x970cba4f07a5562d82cb0cfeaedd5ba9afa66442814267fbc569a3f954e0ebaa"): true, - common.HexToHash("0x8feb863c06ed0f340811b006e457f508cc91ce3ea9106704de7dd36619871cad"): true, - common.HexToHash("0x6ed9d02a9192f9574172b6c6ca37f3cf0e09e9d0d300e3a0af4d02988de5fbc7"): true, - common.HexToHash("0x05e2ad96d844bb1c88d470005b8ad28ce974d42fc5d2247c19b46fd7ad269c4b"): true, - common.HexToHash("0x2f14143ac539e66cf60b68e5b76051e9f7a59a9fd7049712774a7b86467540f9"): true, - common.HexToHash("0x4e4163c94cefc2dae5d408c42e36a0fbafcf8df69028cedf6c465063eeae8f84"): true, - common.HexToHash("0x37964973e3f1527b1d5b51ea7218ae0d0bc9512094bbf12a9ac48fac400f2cab"): true, - common.HexToHash("0x2b9ed5a49c2e127504c2bc96d35f241d0cfd04cb7afbaca44d144a7bcb7d1155"): true, - common.HexToHash("0x8518ccc77171df03cd2e2772d41e555adbaa7379296b59321ddb6affce976a3c"): true, - common.HexToHash("0x2fcb42536425cb940a4d19b3556ae6310a5f56a9658ed54b27f61d4df5648384"): true, - common.HexToHash("0x2696acd672b6a589323963a10952304bd2e7b53819ddbb073f158b03004f5384"): true, - common.HexToHash("0xfb5ef3b4a417115a5af2827dd401eef848898bd93abc4b2a7ebd7835aa9af922"): true, - common.HexToHash("0x1f4cb23ca499fb1dac0b56f657688953a8ffc77c59f6c6ba4387e1030cce2d13"): true, - common.HexToHash("0x6d45ed4ab2506d01d847f4874e5e6886c4510022e46764159b5613e146667bab"): true, - common.HexToHash("0x9c9dfd50acf375048d36b6fa7f56d3639012feb7eba910ab0ce98844932db5da"): true, - common.HexToHash("0x81f64ba040fd453ac8f45fe8d880e834a2a4aea7a1f51e19a8a4dd72fc559fe4"): true, - common.HexToHash("0x5e2ac859b62dace72fe31ec64134b9aea68567ef2cbfaab5fef844c8ab24b665"): true, - common.HexToHash("0xa63fc0be485a9327e7038cd67698d122373f4d8d586f8cd041df2f7e0b120e92"): true, - common.HexToHash("0x602a300d7fb3965355f1a7afcaf7e9d811a350005ec4657b3403b9df3a5e9ed8"): true, - common.HexToHash("0x48feea529eb2c5b5b5f1270811bca550fd54eb462798a2eeee44a45c29025cd8"): true, - common.HexToHash("0x5f69e530c56e515c6cb65176411b9d760fa8d775a573cb9cbdb3843a5ea92bd2"): true, - common.HexToHash("0xe178dc6361b031d07d7a33e350a4a3b38519d52a554a5c69a8182e7595d11f72"): true, - common.HexToHash("0xb705c0ebc661fc1bcaa7a06df0c978263fe5c76632ad1a3e790402ff21290791"): true, - common.HexToHash("0xbdef188ecf024e2831f4130f4613f63041e736ae3042489234a44a460b8f4ae5"): true, - common.HexToHash("0xcbc9a9704ed8283ebee997952e7f021460ed1106c98a7aae97f0bb7c7fbaddfd"): true, - common.HexToHash("0xc588e801ebe2e2f6074f221750208eb6871ecc91b6beaa7b6deeeefb135e579e"): true, - common.HexToHash("0x4218ec35eebdacc6476c4cbadecd7f4af9dd72d9164c4830903af9078864f8f3"): true, - common.HexToHash("0x12f298ba0023b83665d85c1471cac60203d84489407bd45723bd9c30ac549954"): true, - common.HexToHash("0xaec20bb9d8f39328e005c75c97f2e5ecaec67e32aa50e1b3efbb83e4df195685"): true, - common.HexToHash("0x4b1c486137b4c31cca2258fc96ad02250419ab73d67e4de6fb36be0e63dde409"): true, - common.HexToHash("0xd18e2f7173f1a05a5e2c1476dfa5449f26d0280f024009bfc93b37585164fe6f"): true, - common.HexToHash("0x9c6eb58fbc99d2376f831da37cb48b59b631c609cbd014615854c842cee29aa5"): true, - common.HexToHash("0x7a35754e42c243f64d30a1848ab868e9db227c4a17caee6540cbc58cec4bfb20"): true, - common.HexToHash("0xd9fe639ddf7c86e4e382c6eab27b5ddf47001a4496413a010f40c4121034f849"): true, - common.HexToHash("0x860f90745f0061e78bf1d2673376e4541b3f27e240ef966a159517987abcf664"): true, - common.HexToHash("0xa09343270df781aaca6174588dbacf08f20d9d1bb85864edc5dc31e347f185c3"): true, - common.HexToHash("0xa30cc9acc6f2866d140566d99c7c492589e4978a258642947a17bea47a756160"): true, - common.HexToHash("0x8990600c7a3bb35ba47ad14c6b54d1f48a366de9f9d2d80b7e8777307410bde0"): true, - common.HexToHash("0xbeb21028cc60a5e68185c5d81de37325560fac2c4e0d714b575d704515dd5da8"): true, - common.HexToHash("0x759d165c88b28f0301cac42e06ddfaf3c56819e7821d62db1583d5463d9949e0"): true, - common.HexToHash("0x779c95f954af8779a42065054e2e17a0239507489016b388ded8da1f92db0907"): true, - common.HexToHash("0x1e172fb3c6689fec2ee07a927933ea04966c0805e83a85d533156855e4a5ac17"): true, - common.HexToHash("0x35ed683a33a70ceb2a7da36d3df0f595b122e6ab2169ce734dbd77dfc228dc8e"): true, - common.HexToHash("0x75ea80ba6d2a7cb3fbd7f6ceea1d278630b392cf4c86c7f53661c81d534bf0c0"): true, - common.HexToHash("0x508b46a36654a953d31bba2d9f7c9d81b428f29d1ba1c546422e6622a65077b4"): true, - common.HexToHash("0xc39c3ce79b45c5f4daccfd3e58b10dd4a4707d7ad53b4e1a0ff55eab711b5b8e"): true, - common.HexToHash("0x63d692c4173ccd7b8cc9913d7cb3e811f430e297bfb4502ea32cdf49d880dbd0"): true, - common.HexToHash("0x1218decb6f57f38f1efcf656e246ef6f06c9635786f9b50352e785623217b891"): true, - common.HexToHash("0x2302566879a4ee87288a593bd26e23fac7a3b97f2206a6013f6e1203ecbd3052"): true, - common.HexToHash("0x3d733153102ed003dec1a5681b10312e16dc6008518ce0fb6c0f92c2cebd2d5d"): true, - common.HexToHash("0x748049f840a5edfd765e91af7e16a45025c0a662f87533183ed021775d1688f9"): true, - common.HexToHash("0xe4832d381cac2b3a8c72641cfc5cb71dfd57cac01c15aebd7f17d0101a086aec"): true, - common.HexToHash("0x67be40207d01e43b6af0ddb3fdb7a4949a343309673700e3ffb6fb822608ca2a"): true, - common.HexToHash("0x9c08806a85a67d19c0b3b108d5d247b5477bf40c492d457ff00aee544c55bb0c"): true, - common.HexToHash("0xf81a1444379006a28bcb142f089e57ab431e4f956f1fa625f5bc367d1388d204"): true, - common.HexToHash("0xa915e05a5207c73f767f7bb4dd03c3121ce476519806703c272381c97fcfe1d9"): true, - common.HexToHash("0x8ef64f8a325c1e355c2c464efb221d991b81bbfdf1a8a72d1c14ef3e24a6cdfa"): true, - common.HexToHash("0x59efe1baeaf43c157a580a5b9c0290f637a669db1ec21174da4e15933500ef6e"): true, - common.HexToHash("0x9531a1f5513d3f681d0b0aa0e6cc02ed94a83cbba7e029dfbae0bfd62bdcaa98"): true, - common.HexToHash("0x821fd118000649cd80e5dcf7cd2922c4ef9a3f32021fa1854d4fe83c60c026e0"): true, - common.HexToHash("0x82f631abfe5912d00af96dffa8e26f18b224fdd92437e1a62fe1a5d174822813"): true, - common.HexToHash("0x215c28cfac2b43d0781b8ec3f74219b8f8b1dd52258e1ee092a15c7cf217ec26"): true, - common.HexToHash("0xaeb6b9321ad8d1f6f3f8fe816623e168be6f68a02759137666728bc71d9c5366"): true, - common.HexToHash("0xbd3540f6d53cc26b1d10478ab933c91f1df734d336b099e1f817bb64d54994e5"): true, - common.HexToHash("0x0c5fa4e7bdecf589847b6fba1e9936639f3e42a5a978279a31b7edda9e11531a"): true, - common.HexToHash("0x081c535e59f399dd0b0097de4673870878a569d079c16e19ceb4841394568a30"): true, - common.HexToHash("0xb09f15a20763bc171d8d501f2674f9dd3b9fc69699ded5ccbae99cde6c234017"): true, - common.HexToHash("0x0abbf8412e013eccaa9c4e42b270bff980845c56d96b210f22003225adc16617"): true, - common.HexToHash("0xfa6d7cd9d95d1a44a1b83035726d28a96e7d3579c8fc4f2c01eb633bea9bdb88"): true, - common.HexToHash("0x3a289003ed833bca3e38451ac1bcde5821d4107d800ceea499bfe356fd61efcb"): true, - common.HexToHash("0x8b367e6d5704675982ebce8b83bb122171ab789a0bb00bd80b6d1c566357bf0c"): true, - common.HexToHash("0x4ea61e6848d058e23e8411445167e7268180a82999ba97e7280bfdcebb909534"): true, - common.HexToHash("0x26a24aedb55db524106e711d9d48b1b1fa8cf002d066baf6ca8b2801b6e45e52"): true, - common.HexToHash("0xd5174689eb78ed27325dc71dddfb4d08c4e4be2aa1426d7dd8fcf1b3cceb4ba3"): true, - common.HexToHash("0xa1e1baa3c1cc918949bb8f5e18882b6b2f376b0ae8acaca025365038f0e81c9c"): true, - common.HexToHash("0xcc45106d7cdb530b1908817e1275c56ec584131bf83486973ffd4ada7f71fe6b"): true, - common.HexToHash("0x2014975d5e4b1a365ab49ffb24f644c64181c4ceeec656e1e43b7c1e1a9a44fd"): true, - common.HexToHash("0x07ee87a443c9204e269ed981ea681e84963195f1085a2d9f00c8caf151af5c64"): true, - common.HexToHash("0x51723207e59ea9bf2649c912e837b84d1ed7fc89c1c0b0e403348005d34dbb63"): true, - common.HexToHash("0xf998a7c7fcd99b972ad7856a300970e6bd62bfc640cb7ee00bf8314c3bf359dc"): true, - common.HexToHash("0x29b94bdf85e90028921b86dd243a0905c69d36a84fe0a2dae1c186679a9fae9e"): true, - common.HexToHash("0x7cf3e76cf5c3dd6c77ea36d5a3a780c1bd28ceee03c6313c5f4913aa1cf8689a"): true, - common.HexToHash("0x31fd6839cf457a363ac17d7a887c0b556a4dcc825246f058c3b83e98a7d9b2cb"): true, - common.HexToHash("0x60bf22126c5c02d20a8c3c2e73b4985f6e2083ee88b0a8d96980803b39f099c3"): true, - common.HexToHash("0xc04e800a84618ad53ba78e8f6c0473be1cce4e47f69e55dbaa4f031478aa6eef"): true, - common.HexToHash("0x875113fefa5504fe15a89132078c5bf8885b450c0bf99d2552f515ccbe43751f"): true, - common.HexToHash("0xa226f86b12ef8dcf133e911bdf5e54bcf2c932f991f1ddc64bb212c784db861f"): true, - common.HexToHash("0x15fb16b939b90ed7c3684449a23c0d9c2728ade55b278b65aa539cd570b93215"): true, - common.HexToHash("0xb5d5a987ac09d9cf95056be9aed89e7034c3047803f3976c90f74200ea206d60"): true, - common.HexToHash("0x38a1cee11557d419ade029f4ef9d0866e1b123494561453ea5464d8646f966da"): true, - common.HexToHash("0x17162da179ee4c1e7a9219be74bfcc5049b39d2dc0ee0a3e9cb757fa5f0e4cd4"): true, - common.HexToHash("0xb258a931bf096fe72c57ede08b8635503d631f3fafdd1c95e69aecfe8d144378"): true, - common.HexToHash("0x06facaf5228dcf9b314433efb3b4b5649f3e5b4d1287336d6bb1a449b49e7f02"): true, - common.HexToHash("0xd4adbc59b602951c62d339348dbeea78dd796a926218c7b33754d3565b8e0e0f"): true, - common.HexToHash("0x78e24228a7c5582413190431f4004fa05cc1648fe767b5c6f24969388525b6ee"): true, - common.HexToHash("0x6af7dbfd59ead51000a98adee99a87203569748b39d3bfcdae797651d836b006"): true, - common.HexToHash("0x3e84f2bbe9faf4fe1177cf8ff6e80a50b107971e6f73a547fb04f519249bbf28"): true, - common.HexToHash("0x8d98d2899e8a99c7ade6553cd92dd7ccf26b7d38a1d3223e5fcf642de801ba7f"): true, - common.HexToHash("0xd237dc693a309304b3d04f3cfd4323689b4a2c90cc01f2eb69145f1b4c8d2bd4"): true, - common.HexToHash("0xf7345049a258728e007108061289de30fdaa497e2059c9b665a6bc687cdcaecd"): true, - common.HexToHash("0x6db7165117ebab2aa5753fbb3d98bde3bbe56cbc419c699cb3316c1b758dff09"): true, - common.HexToHash("0x384801c1d96a7d1d8cc2d7566d0d4b464bd29638c1fd3080c6942b6fb678110f"): true, - common.HexToHash("0x74573e27aa0a13de993fb3f7f6d861129b41a9bbc107650c7f749e7ee68b8c1a"): true, - common.HexToHash("0x25b82245283981be3d60ca6d4e78c27bd95a43ccde3683af640ae639069b4387"): true, - common.HexToHash("0x4ce02dd0bafb3a6ac486d0ea1a8b556768e69e06d262c18d732388fd30fd1fda"): true, - common.HexToHash("0xe84785a49475e39692a600b0435d4a4b4e7cce27a98fab12f912233e0561d54d"): true, - common.HexToHash("0xa79b14ca11ffe1795e451c6f2c8bd1c9e1e59b16052c12d40bee964ba0622ca9"): true, - common.HexToHash("0x1b73aa8c05f3af5e8b0b2f4c1106580d68bdef6dbfe9b2a19c69a0e69bf6f8e7"): true, - common.HexToHash("0x6242a315b4316ccebd3c77cdd3984f4d0ec0269e43fd7737081dc8e769469c59"): true, - common.HexToHash("0x1b4f77e142c9ae76757ae51d13c728879aa8f9ea2d1b7ec646f9c881fc0351fb"): true, - common.HexToHash("0x65f15b775fe38e175fe0ed713f8c378924da857a62e26df5316cbb7c78ebc153"): true, - common.HexToHash("0x28f87e6c0c4acb195b28886b39d0bc35df6bee0c1f7289140bd9ea77c99ac529"): true, - common.HexToHash("0x221a4371b566005fde62fb98366a54e2fe2de7be1f4a2523c3f2a82048811ee0"): true, - common.HexToHash("0xe3e15da7e8ff0f788d0ea65777aabc855dadbc287db2e097baeb8c27b355a0f2"): true, - common.HexToHash("0x9f990e2a0448760c91397d5739c0522e505fd03541fb97c633bc38d04d0a9ba9"): true, - common.HexToHash("0xe72ddd493f3538ecbae9c848c3a451a2c37b09fe46875e87d418a21ca0bea9d6"): true, - common.HexToHash("0x049ef49227adbde5e52ee923395d257bb37e66d2e201689005fdce5329ded400"): true, - common.HexToHash("0x05d2dd6a451a4112a89f0d150a931f3005d90843c9d65ced46fba6047c959220"): true, - common.HexToHash("0xadef27a478b2ae7756a7013aed88d6fb4b0915fd2d41e54c6cc81f5113935758"): true, - common.HexToHash("0x4f404e6ed0c986f7dd75bcb85dedfe2e0fa7cab9032bcb0f3ae99967b8cd4417"): true, - common.HexToHash("0x332f99ac27acf376ac37d8e8bd606d49126ce77cfa360cedbb5e468c84b36535"): true, - common.HexToHash("0x45e0866af41108217163ac39c93a8b60b16cf714546d240ca63a8cf6abe422e7"): true, - common.HexToHash("0x1e155e6cde25e82be13f763400f421837bb7b5d867710779d94a115ce29ef4d4"): true, - common.HexToHash("0x6823d049faa7db07f7f65aae5af78d9dcc5e1d66a8871af976c8e254f8a1f327"): true, - common.HexToHash("0xfc9c344a9ed49b0ff30e6e3eeebe58859f8fba76666baab234642138335ad56e"): true, - common.HexToHash("0x5b3d506b5eb2029854e50887ca062c0900f723217d9c0002d5a594aeea58be83"): true, - common.HexToHash("0xe072128e417d2077b6566c526da393ac5bec638750b3b8c6bbb183fba76a6c1f"): true, - common.HexToHash("0x07ae27135de30b6b4788b5c2c52148023bcca1ec80efad8f7f6b3144fef26724"): true, - common.HexToHash("0xa6dfe664f62cfae5a61587dac111d43641d829c4a89119b9ba9cd4cdbf792578"): true, - common.HexToHash("0x03924ef9bb13e1340f6a66079ac23b79247479eb7920a0988d362fc1413b7a97"): true, - common.HexToHash("0xd57937c72069ea8452e71105a0fa6e3abfe2182d8e20f722a1cd695db11f9a6e"): true, - common.HexToHash("0xb2e911ca5cfa2806f4600f31bd7e599a75ef54c5ae062d960a76b006636a3c89"): true, - common.HexToHash("0xdf869ccd963e5badb9f08632fb53a19fcc1f0db8dae56b03966d3e730881d6f5"): true, - common.HexToHash("0xf2304a2eeda93f986351b9b948beecc55d8f8315be955f9ac35e8098a47d2576"): true, - common.HexToHash("0x8473152afb905cddcf5837c3ed9e22a7dd9cab9942e22c916419e05df8316974"): true, - common.HexToHash("0xbb2138fa75e7a15df031dc3dac40774403a8e9e4162d4d45612433e13b81b82a"): true, - common.HexToHash("0x3c7fc02fdbed1767d8ae26f46c511cd8ddecd43a9ccb7f91d11b5e2c30b3445f"): true, - common.HexToHash("0x9700e9fb02ddee907b188ff85a6b1e948a315085502875c98926710f10f40446"): true, - common.HexToHash("0xe7b7cb1fd2ee66d0f837d994bb2fc8ad9fda5e9902455bbbb78d70c633c9e1b3"): true, - common.HexToHash("0x3f8c795ce4300c1d4c87d258a9389f094db79d003cc22ddf7e73f9310bc720b5"): true, - common.HexToHash("0xc0a20fa77d1bff325a3766e3e209478d2ff424a80e20fc48b1d45c5615c2c390"): true, - common.HexToHash("0x72f4baae35f6eaab071b4332701aed9f6d68c065ca35377deb1ccf552ae300f9"): true, - common.HexToHash("0x6b38b5c333594d02eac97404b4ed650772b639e827e5ffe090b9002cd6ec8531"): true, - common.HexToHash("0xad7525e471a0b086a61bb3608fb7a07252671eb300ae9714702056421f0115e2"): true, - common.HexToHash("0xc617186a00a5d07d64a3f30e6faa939c07a71088001dbc4cf3f97ea5a3dc7d23"): true, - common.HexToHash("0xa28db6e22ddc5a1288fa07fc9ad60eb3864d782b70d19754cbe48d96d1b9777a"): true, - common.HexToHash("0x83a40beed40922bfe4ffafb68864294e891a7fa953f6822d4d35c7812c4df8b5"): true, - common.HexToHash("0x22363d075b32aa287d48a82c590ac81e239a08f472aec177939252f812f015ce"): true, - common.HexToHash("0xf31a2cf7a0f4d29e73963101a3b9ef21f7f8d6ee3b7fac7313a56bf2b473151b"): true, - common.HexToHash("0xacf678b287810756b44a59b94f66f39d2510bf74124fa5415bf14d75452bb3df"): true, - common.HexToHash("0xd811640f30cd48e4f897ae3db6708411ed1ed0728ff38368017cca80755f557a"): true, - common.HexToHash("0x6eaf9ef23c276af56c7482a844957fb16f6f66e3dd8d108c41959ca556c4bf4b"): true, - common.HexToHash("0xc0ab1767f0bfb6c452ee4de46690cab75fd593ad7f22aeefe1b5177d6a6f5d84"): true, - common.HexToHash("0x80ca7d8f2484eb8839cb58978606e3c9cf29a9ae7cbdded930954cd2cbd498b9"): true, - common.HexToHash("0x7a6d2f874316fc32868e2b4c45d4ffa31a71f8fb397ea980635cc4cc579f6460"): true, - common.HexToHash("0x2f2f723948ee6880cec7e5c6d891aa422ddda926f0c4be121eaf77092a08cb5d"): true, - common.HexToHash("0xf92fd1251409604410550bb3977da550052b7788e51d54efd8812c9dcd2e720b"): true, - common.HexToHash("0x3e5960ccd908981ce35209a7493a91c0820627c0b21cd0cf5e75ed1049f9f880"): true, - common.HexToHash("0x01f6f6cfcb857123c461d0cbad02030abe779432a49b269f48672f1198bb324b"): true, - common.HexToHash("0x665a76716351b8fae493f8c366d4b0dfeedd0e1bea724db290fd7ba34ab1b06f"): true, - common.HexToHash("0x1be1119cf0d85c2d0a32cbbaae5d62736866609586be60709fe6db6da9750fd1"): true, - common.HexToHash("0x4b1a13e7b5f6226bf8c41fbe370f2511b20ba865297f385461d6deb2dc4f0023"): true, - common.HexToHash("0x18fcc84aa9ddef07986554108412dfd85dc3059625bcb05679d6b6901218198a"): true, - common.HexToHash("0x0f40f650d2a2a514eecea81cc897ebdf36220d57d1062ef84f71ed4c179545c4"): true, - common.HexToHash("0x2fc766abe2e4e833646437e27d375edac6c5213d10b8f865f6d798e9c2528f10"): true, - common.HexToHash("0x98ee520a1b52c490ac1afb81ea52d88770126ef26de7d58337fa017c3b1d5c9a"): true, - common.HexToHash("0x5a7845f46100f57987a7fc297e6e5b89a9a8dfe062fbf276d2d8f1201ea9f996"): true, - common.HexToHash("0x6a6799f1ce21830888178b7e1d9b291aa7086305a08aba3211a197eab5258f80"): true, - common.HexToHash("0x7ce2f060afc922c7257f6f97151882be5ba1464fb33dc7266cb1d9353075aaec"): true, - common.HexToHash("0xb10786a3e9232877486fca108624b073539b1159d990d0a73eb61dcd9d40d652"): true, - common.HexToHash("0x2f2d6d5d4f965d053bca5c815fa556af0b17586d1a7f375c633d618887a8b6d8"): true, - common.HexToHash("0x13c668a6dbcad77f53569e225f3f253f86100d5d4e325cf38c977b1f03df6d13"): true, - common.HexToHash("0x7546f544d4b9ec103e68aed527ea5ce79033ea38efd5b17e2be8b92db76e5bf9"): true, - common.HexToHash("0xdc68ec18a1176f9321fbc973281d3b5082a204656205a5a80ace9d5f30ce86ab"): true, - common.HexToHash("0x48f131bb1087821735fb718da58ae76da47815da2b164dc100e2f96d7b7503fb"): true, - common.HexToHash("0x1fa10df83be6b4163b810a7523a97aab85cbb23e35bf2cfdeba5eca0ec35af27"): true, - common.HexToHash("0x6403af1afde143b27f7b5101383dfe39474f1d999936bc08093e2adb35bb4b32"): true, - common.HexToHash("0xc5bb3274e96d6f460cbc704944594ca4c6fa3c7c3883f74588db6d8c1487c836"): true, - common.HexToHash("0x1f3437b2d81190d0223cde403512282a9c59feebee68717edf46881a74313032"): true, - common.HexToHash("0x4bb3e185277ab65b399ae837946575b22efed510d98afa1a5954b6d2d8c677f3"): true, - common.HexToHash("0xb685c25d29a36d5a2f1d77b68bd3611b76e2a78a0dde7ffea9d9dee1861c4cf0"): true, - common.HexToHash("0x03c7573047f5abe69a6e5aff608a6e287e68f0f126265546bfdebf68b7b72e1e"): true, - common.HexToHash("0xd49a7736d53cce667e229e7ecdfbf4c187a665202c4e6caff0cc1e006b48b8d5"): true, - common.HexToHash("0xb7b31f2598db58077ed9f97fe63bd0f4cc901f7c849eb5cc3767fbfbd7d77fb5"): true, - common.HexToHash("0xf4d37e1db9b1f3090ccc16479612c9295564c771c7d16d89f3eced9772227666"): true, - common.HexToHash("0x8b18384dc532902f4fb771792a87f2d2f9fd89db9783d8df5a0f9b2d7206a1fa"): true, - common.HexToHash("0xac752561cad40e3fa7c40c76a8150fa66fd40748d04c13ea034a992939e227be"): true, - common.HexToHash("0xa81e7ac4c7b2dbfce547be1638ad475e4cc4cc8be462a7c701c77ba6abaf2fe3"): true, - common.HexToHash("0xfb4acbb803251fb9457e077e2d81b9d450890e3d38d5399946b6c36ed86da82c"): true, - common.HexToHash("0x0a2d1bb46210d19992bd48e05950211672cd5286b060f4a9a7bdb482497f354f"): true, - common.HexToHash("0x95704fbb2cb7b202882b3aad04f242ed32c2dfb10bcc5b1d6fd9ee124f6487e0"): true, - common.HexToHash("0x7bdda4cc2fcd78dc2de80c0337e3a37733613f5bf5237d9002d047a73cc1730f"): true, - common.HexToHash("0x60a1f3906549c51011e232dc161072a6a39699b612190b9d5aed22154868904f"): true, - common.HexToHash("0x11e2f25233ed7344ddd6fd0db1aca060ceb669b08cee6214d4e6a94864499ca7"): true, - common.HexToHash("0x3846902e156fb5be913676707beae4492040f6fb2ed278ba23790b74a118c5a8"): true, - common.HexToHash("0xc061aabc2517f08c0453f0797895b8d57c0cce93345506e800cd94e782593e74"): true, - common.HexToHash("0x6347a019be4adc25683f7d4a4e9e92b1f0cd3116a4e56f2e12caf91645318335"): true, - common.HexToHash("0x17d199ad419a43273f08af395b818d43a93441d1e96e79c01b57746fc4739c12"): true, - common.HexToHash("0x84ed7b047ed036d964d0137f41623421d35ebd9ef50dbfecb079a44234ed865a"): true, - common.HexToHash("0xa2cf1213aee457084788270a5c398d235944eb501e6848f61d422708cc2c5262"): true, - common.HexToHash("0x049844b18802ebd7b57aac385e00c27e8d8ef86b4eb16b89f74b8ec8ef7c64da"): true, - common.HexToHash("0x3b6cfde05f85cb53da565bc719cb921f33f0053a548c4cd6c0e73ec396d96c46"): true, - common.HexToHash("0x36aa8cd1822c2a1b879dbbec0946bda0f5205c204bf6625f1dd10633482cde62"): true, - common.HexToHash("0x9e0df3d519143c54062f0049c245f8f1ade433a35930e80e76106984004e91a4"): true, - common.HexToHash("0x66368bd0e09b0a7b595e47733a44ade32e2f8cbd6203548c143d116eed39261e"): true, - common.HexToHash("0xa674dc515dbd427ee00ecef4093d698af590178b356e1ebe0b6d0d696d64ae19"): true, - common.HexToHash("0xa9c162bac4dc80763e880a13cb61bb5c2bfcb727a6807ba92d5c84a0536c1c21"): true, - common.HexToHash("0xead9d611a91cbc56b770dc84325445024d32bd4bc89931e5671e09b1db0fd71f"): true, - common.HexToHash("0x8b45ee663c704c08eef8b52c430a91666eaa9924ef27db324e6cc67bfaa9b7ab"): true, - common.HexToHash("0xf86c3f8889df59b4510cd7634cfcf23f1dda3170a83c1b2ac25fe1a664d6a638"): true, - common.HexToHash("0xc38c19697375438adf98348c761eb547460084ddcc2d0314d1686c05e828a2f9"): true, - common.HexToHash("0x983550da9435836812f6d842e789e2e0687df8153342c62c9c4b77b8fe51d4ce"): true, - common.HexToHash("0x6245b40a442bc00647363e8bdd829074336a52ac1f6170aa776c3763b984f493"): true, - common.HexToHash("0x035ede25a335e373a85cd4731bb4efe7a30dba7fb374379cf06e2bfe46478aa1"): true, - common.HexToHash("0x583041edb5576a40ed3002b93143571804deb5b4c28b58d4843820a07ce6c80b"): true, - common.HexToHash("0x2c752611efb74edd230fa78b548fc9203ddccd50a1afbfcf2460ef610844bbd2"): true, - common.HexToHash("0x062d8245474d6fcd1d4670a4d7fe3951de40cb67dc2a0b59c4ddf94e035f11b0"): true, - common.HexToHash("0x611d10fa4fcfeac29d817bcc5330149907490c55fde782da36438f7ac571404d"): true, - common.HexToHash("0x368a86e9e91bd433a325da75e9079b0c595feb4a5365b8046f623ab430d66c26"): true, - common.HexToHash("0xadd7078f48ab0cde3b4a50f69576c508e153747937ad827e2881f28da633c737"): true, - common.HexToHash("0x947e3e1aa61ff1b30c4992e680ad639beee9a6058834c95e2fd4743373563ed5"): true, - common.HexToHash("0x2d23d3daef697276fe00fa8b48dc4a57767346442b86452fb4cbd6123b9b518d"): true, - common.HexToHash("0x1b870bcb68ae250bfdd5acca09f1657e15ffcd5ef7e6c40f09d8352c0e1f44d7"): true, - common.HexToHash("0x8805179ded760532deb7da8326b58550ef0489247d7b611bf1d51996cdad59ae"): true, - common.HexToHash("0x106111392450abdd25c661df90d04c20374ca362bf1be172db202a1fe19b2fcb"): true, - common.HexToHash("0xbfae6474103255c121422760fed5f5a228c68e1d91250b9b0cffb6af87b4f10b"): true, - common.HexToHash("0xd6b3188fe69efb59066ad0158ce74bc09573b201b9fb1ce0d9f59f4865e29dc5"): true, - common.HexToHash("0x56cff9b5f70f53b401a8d8c1eb3541b1e4db54ecb3dc2fe901279a676b4f3497"): true, - common.HexToHash("0x6c450523b8df3ebb176b26eb634fdb25098963a13e8e58c65d820b664174ce2d"): true, - common.HexToHash("0x51e66edee5d9243746e25f28ea8e23bcbda6364323d0eeea1e8035c030a19475"): true, - common.HexToHash("0x355817f2bd5c219b0c1086838476f530943a2e24c6e3dd86ccd687d9ceaa5acc"): true, - common.HexToHash("0x47a0b1dfde5d71e53785b917080f1e5bff7c29693e2ddfedf9bea5e475be7469"): true, - common.HexToHash("0xa89077e9238451cdb03a0491ca483db5b4cb2c2ee7a419c262c87a0d2db54e07"): true, - common.HexToHash("0x97f3d7998219aee4bf4469dc620b366845c4312c928a505141e57563c6570415"): true, - common.HexToHash("0x15748a9d6ba0ca76c2f1a05ec6d19cfe927351737e06cf8e7f32e7fee762a451"): true, - common.HexToHash("0x8e184532a124336a036926ace6e9efa92ab0b23066790f6eeca80cde17916497"): true, - common.HexToHash("0xf666c9284b7189033ce02c48b6f16b34f185330246a8376b52101e31c3bd725e"): true, - common.HexToHash("0xba83ebc542bb9d69da50f0205ad568d9ca3dbd22f7f07c0928c9d1b82abd2be3"): true, - common.HexToHash("0x5d39cecb85ad797ce0dac7a80d76488e2a1e6223b732060613d65541b9f75a0d"): true, - common.HexToHash("0xb2c60357f7323cf76517334b3db90306e3d00a3cd85a5b4f86cc76d0181b92d7"): true, - common.HexToHash("0x8493c5f60ce2e0b442015cfcb99838d6a32d71d683752ae5eb195fea5f87a394"): true, - common.HexToHash("0x67c7a8addb080577803882dca413e27ddd8cda31162124efb228905ed5c4e892"): true, - common.HexToHash("0xa5c0471e8da5b54a2589425c9111bb4891ef27b2784172d4bac95f93c1eebdde"): true, - common.HexToHash("0xda2f5bc33d7d81741cdfa92d2b05d0052549474b92d2ea5c85ed23fcd9181cbd"): true, - common.HexToHash("0x3e84d1eaa7c76b29d913f06cc96a1a5ec7fa1f9d4610f58ba4749421f4d93a25"): true, - common.HexToHash("0x0b7f9f486d8b528bd260067654647731e86ddd21f4a56b96d5a6845ccc04db48"): true, - common.HexToHash("0x1e93481d09c85cdb7f7cfcf56cf12785e3fff42237fc7053fa7f678773409e1d"): true, - common.HexToHash("0x744fba82f983ed6eb5ce3a3e15767523988a60baf04a64ed00325728cd20f553"): true, - common.HexToHash("0x9cc1f0a8c18bec9711817cccf77fe5889600c70dcea93196286d3951b3669a02"): true, - common.HexToHash("0xd1a066ed89dffb7b85ae0d5cc1e744b1cd132a366bac107f0265804419a847b8"): true, - common.HexToHash("0x052241c3752f7c80d09d2701c90608e97807ceb8dfa2248cb27de054aabf11ad"): true, - common.HexToHash("0xf979310be5327f162991fc41b9fb945b73a248337cfe5ff67e20df4077e41297"): true, - common.HexToHash("0xc0793f0827a0df9f0b2b3cc3d3b9dc8ee39d50e1923a5a9664ede998e202b839"): true, - common.HexToHash("0xf513f8514a54941779d4da6d211d2c19462d07649c2cf2fee35532d407b1265b"): true, - common.HexToHash("0x319b1f4659792465e593a823a24a9b23a838c8b0aba06dfc951051851462610f"): true, - common.HexToHash("0x917d7da423f596e49478359902e9e5151ba36c678915d9b232c6d18ec39ba3e6"): true, - common.HexToHash("0x2011fa8c6b574e43a930018f25eb6a3da69a61c5ad8a70bc8aebb715e13dc007"): true, - common.HexToHash("0xc608ead620b10883df6fe6794d77dd9698b70b9f6d54d7cf9d1b43d9afc98395"): true, - common.HexToHash("0xd1059fcafb157d4ef74d8e5639d0afa72a6e65235e3a2de05a4a989ae2b5eca6"): true, - common.HexToHash("0xd1e3e37533b2f81f7699db37a11707abdcfca8524164e21c20a15799baa14ad0"): true, - common.HexToHash("0xe47ad283bf19a22a760de282e9424266d09a3b12e8ee16502e3f347ce25e35f4"): true, - common.HexToHash("0xd47ec94f82a764adc59235ab2d0c5ecd7de00d742908679277e2a0c566d52bc1"): true, - common.HexToHash("0x7e4e702cf5b3c79f068e3c2e112578d153a4b5c4e447eefe809dec125ca79a85"): true, - common.HexToHash("0x24a18b3018aee97d89d0dab10d9685430917ab866cdf31bfec1453dd4e4d2afc"): true, - common.HexToHash("0xb66d684026828a6de760a508058afd54ad4e1f35f2d38745454548990069aef7"): true, - common.HexToHash("0x6081f6401864dd1d4559309eb1f376c784950dc16c758f0b17c2285fa3d50ae0"): true, - common.HexToHash("0x8d6a68396ea4c772ea0988d8c00980f87fc5088942d006083c50cb21f7ad3b54"): true, - common.HexToHash("0x3e547be9472d8ff9a42e40a9f08f39f64029c25509d5f40ba11e1c3de1d831d6"): true, - common.HexToHash("0x9499e99fa09dbc618035f7a8ed7cc854fd692b193b62cb7e516bbc12fe97ff3b"): true, - common.HexToHash("0xb4df5eb0d2750d1894b672b69bc8a4bbca4e54c6340bd1e0fcf4dbbe9bb6e99b"): true, - common.HexToHash("0x5e0fc0b6fa7bfab06134aa40c92dd4347c62e8809a452089fa77831c8350fd05"): true, - common.HexToHash("0xe98894e7e6be657ef39bfc3d1e933d80417f84dc876df2304ec32b92ed910dfb"): true, - common.HexToHash("0x4463d8582699f1c51950a4bef7dee9bb55c417a150fdfc6b16507393d3fd5537"): true, - common.HexToHash("0xbdaaa06dc690062843e21ee28070d32b20a4126a0c4cff4e9574d670c17ecd69"): true, - common.HexToHash("0x825206500e06a77e9f87597fda29f6f1ac0229bc7f4bc4913d7fd9848f760daa"): true, - common.HexToHash("0x484b6c49a11f01325065ca57256487e608addce93da5f92b141846ce58f7df3d"): true, - common.HexToHash("0xcb62887ad6f43b55e127736cc3b88924bbedf584592221a54e5bf3a89f319a24"): true, - common.HexToHash("0x1dd5f5b3a9c65a02ffd4dc3b4743427e8f1535a38541f5d8146c762d50c69891"): true, - common.HexToHash("0xade2da269b5c1f1ddb21c1aa4899801bf79daf19b33f94fb1706206b8726a032"): true, - common.HexToHash("0x43ae1959b1f3b0752357a3041eb0b80753d7576ba6f270e8b26260464051df71"): true, - common.HexToHash("0x2f839b36247a5c44907b186ac5dcc2eb47ad45aea13aa061e5271d89f2fdcc85"): true, - common.HexToHash("0x46957e83c62de6fb38f1201de369f1d08d1dfb92ce3c0d42ba4cd5e15f0cb62b"): true, - common.HexToHash("0x18f54e691514f72be5edc34f24ec8aa5bd0a5b5a674c47c0dd5d291c3939d424"): true, - common.HexToHash("0x6e3bec1c43cf44f49dc0ed6dbf0f48f1d16dffda5d33aceacb2096eec1c3105a"): true, - common.HexToHash("0x6322e191d1198ef87c0c1657c84323a11024bf34f1dfc221a7fde00ac0c0766d"): true, - common.HexToHash("0x1a941e5fc8b5743bfef022197bfe3eb35cf402042300be9f9f8ac35068776333"): true, - common.HexToHash("0xe4bf6e167af9dfdceeb80be62c13e884003dea5092f1daf2104883242acd2773"): true, - common.HexToHash("0x55e3b6be87d9ec75f46d40cbb2d6a842820fd91f3241782a2dd6c17b3df756c4"): true, - common.HexToHash("0x1d50d83b04a8dfde87c5b73e6c9b6e59d3d9af9e3b22a8c887af4d0bfe5e3f32"): true, - common.HexToHash("0xc970f72fdad7f3927b0d4fe843c7e20600d6b31581d96c1fc68ff989ad9e2825"): true, - common.HexToHash("0x1abbbe2f766e2db67b9e0701e4d21f260509f9129461ceb0568bdf4795855f61"): true, - common.HexToHash("0xc0fed8edd27649e4710e0023ab16206885fbec24f09e9a012e95637de9e76d54"): true, - common.HexToHash("0x80d527585ec0bd1128d29f56ba3d580b109be47b2567da01d7d3f090c1adcb8d"): true, - common.HexToHash("0xbaf4cf337f52de0dfffb4cf74949d4d3fc6c4b64ce61fbd2651df7295d12056e"): true, - common.HexToHash("0x52dfbc968306cda2951493fc9cd1cd3ec9f0a454fc8ede0aa81b70b221d1f506"): true, - common.HexToHash("0x99f7257af590ad6c6e5cde58e1fae41ca66a66aa8eebffce9660cf5d2a5ff85b"): true, - common.HexToHash("0x7a657b9af7bc1478681a185f2cc5940011f1fbbad386961ee6aee1e558f35ce1"): true, - common.HexToHash("0x32a2ee7c8309459ce71a72aa2f2e306bfe67bb44fb7526572531298af739fec0"): true, - common.HexToHash("0x2fb395d61c481ad655aaa66b49ed482bdc700e09124e87dc3d34dfcb4baf3c3a"): true, - common.HexToHash("0xdf587ead143e20701d8b580fbf53e33d4a332c7671b41375fce9194cb3f5a868"): true, - common.HexToHash("0x10c79490f30a3c76542fdfd338f1958d9d95be3ae54a58f024865213dacf3a81"): true, - common.HexToHash("0xc88907c7edc804047de5ca06b359ce0456c53b2f4c353a71207504b22b83b6a5"): true, - common.HexToHash("0x8062c557af9cab2a87f41370a61794206c953cd119970f07805a8d8cabe4caf7"): true, - common.HexToHash("0xe6be804fa765971be0ee09b64d22eed8a2a28d0a91bfb3edd1228ce0337d35de"): true, - common.HexToHash("0xf80593373186a8ae14ea8bc573cd342d5322f6f2eb0c65a39daa6697cc70c9b2"): true, - common.HexToHash("0xcf32045628380d8087096506f8a038b16f8e63bf6b01bd64c0f27a5690164e42"): true, - common.HexToHash("0x07bd7b1ca6e04cab3857bc824200c666ec442d336348bebbe3409a26438dc514"): true, - common.HexToHash("0x3b585094633a947c80b113ecd92bea03b37d47bd938feacf62fe5f6982216561"): true, - common.HexToHash("0xddcb4841c5ac0f38056b732e6ece73b6a925090d098b69b3807835659c90f2d7"): true, - common.HexToHash("0x2e99d34e6869a3be8149dfee3e77f29df5755f514961864068f89e2219147a59"): true, - common.HexToHash("0x42ae450f29b90d42ba64972c11e4e7978575ee4f2ccd681cc9803e56fab0c56e"): true, - common.HexToHash("0x28244a333bd5aca16512b4858cf73a13ba82e27f5f04f41993f5cc822374789e"): true, - common.HexToHash("0x58185bb3c3a21237aa03da9f67195ddfaa7440b63564831cf89d5c3ff614bd50"): true, - common.HexToHash("0x8bfaaa5bef006d06c7f6462d0c223ea189fdd1beab8001a20620846386a6494e"): true, - common.HexToHash("0xffe907fb192c60a367c2d3044dbabfedc343a2bb1477ecac7642795e0a31c02f"): true, - common.HexToHash("0xb10ff27be26f8af4ab64b9b6a5bfb8de71e21a0294d2984075175c5c1de71415"): true, - common.HexToHash("0xa63d7bfb8076d00cbc2fa38c9ef8a6d1991abfb383baf7fe638714af34b3687a"): true, - common.HexToHash("0xc19c0714b6ec0b2883b0b0c7b26ccb07ffc5f6a22fb3bd974f5f204fdf469436"): true, - common.HexToHash("0x853dcc36b39675e798737db50696c4c4bc6c3954504aef2f725f187e00d3d04b"): true, - common.HexToHash("0xeaf066cc6d843ab4a62800cea3c74c9c6577dcc9e64a75525d1ae0acaa5ec5e4"): true, - common.HexToHash("0x037a14acf87c3d3f5160e28966fb223f018b4fa311b035a219ef4b32bc9ca2be"): true, - common.HexToHash("0x46b082d0e8977b30b37fbaef572eb652e399e7024f3fed9f616497f3c5d2a755"): true, - common.HexToHash("0xc071299fc6c42425a93c0f0fe90b837df3a9b396faad5a317ff91c7e802c3a1e"): true, - common.HexToHash("0x90ba923ca85a441200c08833b9f86aef31b17f7fa6442e5b9b778c177314e68b"): true, - common.HexToHash("0xc42f7e9b8bc5ff795ba71a305c82ddbf92b56ea4da837896a1fd4818e965037a"): true, - common.HexToHash("0x60f918dade1bd7c5bd214ca9a3d46313d8122c034c61e65bd7e767a7d0a7e72d"): true, - common.HexToHash("0x02fad160494a118ac99c82cc88da4810373c3cdc88402f3776f370224ccf4591"): true, - common.HexToHash("0xb152cc9113ce4f76ac10a1d35ca696c4cfc3aa634e47df481067ce26b4c0aa99"): true, - common.HexToHash("0x6250f721e634df31236d4825217582dc33105afa04167463d8423ad052248968"): true, - common.HexToHash("0x5bf97d8779483e8a940e4571f614ac95e951010053df02869881bc0a39115c9c"): true, - common.HexToHash("0xabccb023b1b48f7fe94e5931b55a7b3f980ab1fee4916aba97dc81468ad99299"): true, - common.HexToHash("0x05ed5be3f8322ffdd920d3b3eca67335200627223cdf65d595884f1605f449c2"): true, - common.HexToHash("0x85c0f21864f8b1b68abf4f22db3ad46496e52174c9a8123b654336591094d70c"): true, - common.HexToHash("0x9a4ffd2832346bc9e65bc26ff349575e4824dcb1dabb98df539a6fcb406c4f99"): true, - common.HexToHash("0xd06c4d9c0592e6a3b3a35c8eb13f1ea1222330f5893fc40e6316421448974c69"): true, - common.HexToHash("0xe2960eb44d83946ccd20358564d4bdeb8dc6fc29ae9f555e5f5c94580de0ce43"): true, - common.HexToHash("0xf3b98329dd8e5b4090b7cbda80d9b78e6af07991d78bdf90afacfe5a46dd8f70"): true, - common.HexToHash("0xad3f459532840caa8aacf82195daf9164c6b12dd22d817277e197738753ebff1"): true, - common.HexToHash("0x732beb7cbf5d7661ce19375977bdbffb112b45c2114b612117f32fc0d0d0679c"): true, - common.HexToHash("0x3deb87bbff42acaaa4357b3bce9e5987d5410088bbf9b673198c6c98c9a81e5b"): true, - common.HexToHash("0x1e1df82d2634c015f57bc928872f6aef64c74b74261050c1efcba1999fb1911d"): true, - common.HexToHash("0xc975c66f763efbab1bf5b8c5f2e5c07bfbea02a18315459c15633198d3ea7ddc"): true, - common.HexToHash("0x0a97db4f86f1672e829f543e63c5a097097e7395abe3b438f0fd59405ca7d040"): true, - common.HexToHash("0x0b405345f11599e8bc8276ac064be82ff2156c025d96850b20be7bbcd6663aa3"): true, - common.HexToHash("0x06e62b5509c44df9fc89370ee01fde4c71c48695c49ff48a41da943a1e3d0408"): true, - common.HexToHash("0xb486eff69914c7a087989764e36360a588ac265d9bf0bd47e576587bf12bec51"): true, - common.HexToHash("0xceca0b1ee2161f9b1541c92bf312285d0a2d4d6112b29bb23f36d18c8b205fe4"): true, - common.HexToHash("0xd27dc186c064651d235cdf6a36b695fad578ccc71801a972e10d9cd5868c7e69"): true, - common.HexToHash("0x0079d3ffd5aa39265c13ab27d0b53af15a91fdad45ee037897383daff477a0e0"): true, - common.HexToHash("0x0bffbdf8566ba5616bc44dbce766d2e0482147a86c0622c25b4bbb6d53b1cfc9"): true, - common.HexToHash("0x9a84525f9153d333dbcb1ea47bce5d88e8f9d463463000b64a72c333534c3825"): true, - common.HexToHash("0x26a72f1298b39181b9fb708e4ca284c08a4a2e434cd14a570ab159b568c23d82"): true, - common.HexToHash("0xfe4bb3b83e2089c3224b79bf4ea2135a4f498b13744e620cb8f1692bf77699a7"): true, - common.HexToHash("0x0aa71d5e56f880ea397e460f9138b943c2f42dafa8b132aaf348e0db8b7721c4"): true, - common.HexToHash("0xc23c96481ce478544bf29fb1a240f6d1507476fb20a552253c5ab67d1b07aaa4"): true, - common.HexToHash("0xfec9e227b98d0b25ffa0d2515a706eef8db160454c9353a57fc74d71d532ea1c"): true, - common.HexToHash("0xb30767c64b880c19a4c190f277c6cbc553da31508ea2278b13808dcdc14f09a5"): true, - common.HexToHash("0xbf8309b20c2279ebeb3ba208ea6657a9dcf1f78ea15c4a8bc956df2e7fb8a42b"): true, - common.HexToHash("0x6bd6eabd9b5757d6ddba2f41d1ab00ff234362e5df077acda45a17bab38a3c28"): true, - common.HexToHash("0x3693ab56c233f571a7e83374286d02d7295db7ad6a733cfbb799194311e49fd2"): true, - common.HexToHash("0x012bb68fd7f0db8c07beb62848d25b9c04ed139d31b07c7edf2941039810b777"): true, - common.HexToHash("0x8d14fae6967a845d4a53a19bd3c78b5de21044f63c675e903584a1619dcf2c2d"): true, - common.HexToHash("0xb00610a045fb82b92f1242fff82d9abc53828b3c1897fe80289d4fe1bf6c15e9"): true, - common.HexToHash("0x12b93218df06fc9b8c4d10f5ebafa64a64a1a5078725b523ee222989370b6ad5"): true, - common.HexToHash("0xf19bedab39dea878941f35b7a0765e22a36f6632e81c92fff448b750d94cd548"): true, - common.HexToHash("0xa7849498bbba8f5f7a3cbafcc77c738a0c1bb7009a92a19d6a8ea73882dad121"): true, - common.HexToHash("0x18f4648aec6152eb33a910c65c707243bf4bce0963e2a34d57c8986b8244747f"): true, - common.HexToHash("0xc1decc89cbe1cc20d5e62b5a15b57476b296b9122631fd28dcf24b4d43b6cf21"): true, - common.HexToHash("0x5f40bfadcae43580c3ed23d245e0d39b3098f37125689d24aff72559726740a8"): true, - common.HexToHash("0x102e3382115a0709f6f7b0acea5e82af65289e5c488aa1fe1ba90fdc55c408bf"): true, - common.HexToHash("0xd957e7c702a053a08067310688f939cec5980c675912e29c9d582ff2e3aad747"): true, - common.HexToHash("0x90838d3fd9a9a49977881f332434e17ac1a43e2ec697439a4afc19c13a71737e"): true, - common.HexToHash("0x2b37729e7ffff97a74be89dce709e3bb6c589d8ff88c7055f222fca87fc81759"): true, - common.HexToHash("0xc7055ff6946630b969dc3246e0f4aee0623aa00fb168da893c38ad0ccc0ef0bb"): true, - common.HexToHash("0xbd0a31dc7e173aca6b11129926d9e47e62a66d7d0e9a43fe64309f88620d51bb"): true, - common.HexToHash("0x5ac856eb52d72ae9c7ec187305cac12b28c7a462bf61737d19615eedb59e76cf"): true, - common.HexToHash("0x66c763cd51121c21e51d21a1d5add0f40a7c05826ce97f0f1366d32c46380c3e"): true, - common.HexToHash("0xa3b2f68ac49f236fcac4d38b5071cff272ea160a7d48de931c5ae71ab0911dc5"): true, - common.HexToHash("0x943dd2d0a70bc063b196c078133b35329fa528877cef2d4d20ad40331d7c5637"): true, - common.HexToHash("0x602850db0cc3370333a594ee5d061cd54988dd5372c04a527613055f2f88001f"): true, - common.HexToHash("0xf43709079331d02d5370680c23970b6f60e04a3799e71920117026c2a14fdabc"): true, - common.HexToHash("0xb71ff0859deed7a1dc9f3debd7a9d081ea2f7070f1a180488acda5ec0b5ea9a8"): true, - common.HexToHash("0xc91e301117bf50a9f5ebe8fdd14101fc1f58972702bafc2f4ba10f996db3c6c3"): true, - common.HexToHash("0xf9414adf03b9df0678ba2f9434ee5e771baa8eafad66ec7b879e168fb51027c8"): true, - common.HexToHash("0xed86a6264facfbd7fb9bb8598fd9d3a58a3608f3eae4377de91f3512de489ae1"): true, - common.HexToHash("0xdf80e3343b91700c754478bee91fd2921e4a749606b69ef567d6dd98afb20984"): true, - common.HexToHash("0xcade8b1ecf38024e948e4c364de9080043b9ec38a0c5cb8da36dd45512692201"): true, - common.HexToHash("0x773cc9ac32ae6145840fe37442db87d62e608b12ab28bea92ac83a2f00bc14ab"): true, - common.HexToHash("0x442f94d932e1e4734a71b387f3ffc90764c823c9e9774269cc67869dc21916e3"): true, - common.HexToHash("0x91128443b8dfe5868f5a6c4b8042d5a2193576bf101a301d50558eba56fb5fc3"): true, - common.HexToHash("0x4e14185b34b45eaa44b993a12265a20036ca2bcdbb39bdf9e8cb4ac984f97eea"): true, - common.HexToHash("0xa016c270044b6fb5a840a8dc353d52b452ef761ec91fc76421e3cb0a13f30d3c"): true, - common.HexToHash("0xb414c5843c0dd1bb922cb4a0abda74d69cfa77efac3a3bae6af2f0ba90b57e1f"): true, - common.HexToHash("0x7046a14db80485b3d77074bcb0ecede7696ca8cc6f56eb69bab6948450583679"): true, - common.HexToHash("0x2c0a8cf3ae10fc25540dbef4391d3e9250eb7eb69a352f6668b81f82896caa51"): true, - common.HexToHash("0xb4b93a867dfbd1bd979120a87a368b55335e88712d808b369d73a791e699a0d8"): true, - common.HexToHash("0x81fdaa0afbfc907d941316bc5bc47797c80559df9d890348f68634bc9cda3091"): true, - common.HexToHash("0xd861ab0afa4305af383e0f7773e445fdbd6179c98accf4dfc4424e7a438a02b1"): true, - common.HexToHash("0x098230976413d41cec87be1d2529c84ff53fa0a83e9f04d8baf034ec77bef02b"): true, - common.HexToHash("0xcc3f6eed7c457d9d727860896337dff4011190851797ed5b9ee4ac0036bae707"): true, - common.HexToHash("0x85c0e8d3b1d3555135183e77356dca7d3acf64840734470fe1fad8cfceec8189"): true, - common.HexToHash("0xe9f34adb69a9b432722b197bf31b398638815f021ff82537c68f3aa9eb449594"): true, - common.HexToHash("0xc806d720b3c795d0382da8365fc636b7d25067fc8948c8a08cc7aa9e46cff5da"): true, - common.HexToHash("0xbed1ae64248570034df31414cc48df345d8a2c1d5b57f22314fdfee2f81541b6"): true, - common.HexToHash("0x7d7ce8b8597f177f709fd3852c3a02830dbcbfde3a4cc41f5781859bd20fc360"): true, - common.HexToHash("0x1f98fe0e07fb255f403b6e20b33d957ede77e4417f8ff455d1dac1002ebd2e29"): true, - common.HexToHash("0x9fe313c11e7d30569fc1955272a9c4016b4fe391b020cc8ed79ffa203af84319"): true, - common.HexToHash("0x6a4b1e0a1b178be02253acf03085f18f1810a675c2d1db17e5c7ffcb0304e0b1"): true, - common.HexToHash("0xed4f1ffc7afbe66d4912b8f600536c29fd9d2801aa48029e327f33023b51a83a"): true, - common.HexToHash("0xbb31866d5b7afee3ccedf50aab3e4fa893cba77df52ac7080654b2090875b937"): true, - common.HexToHash("0xe3075ff688195e4e4f855b986643730fd95e2e6f36442a3f7447a81ef72b580f"): true, - common.HexToHash("0x6b700fb02ea5f619902e3c104c750869345126f6b00a36d37789d3bd92a68f86"): true, - common.HexToHash("0x4a311f9b2b4c82b818635f33c74da05ede58eeab07403a067d8e58fb472df0f3"): true, - common.HexToHash("0xcd971e803787f364f773157a765e7d6ff0cdf91f85c0212b3ba19a5b079314b8"): true, - common.HexToHash("0x3e7be9ac94607e9e91250fd161a00f25fbcdede81d72793716cd801075c885dc"): true, - common.HexToHash("0xfe4b2d6aa6c095bde300c20add4f6e39427c88b163a76885b20639722c5256e1"): true, - common.HexToHash("0x6512b1932d9eea9dd62c0b86b195941b0cb1acf0271853ca16387dc48c478868"): true, - common.HexToHash("0xfce2190cbd1fa28b4051aba426c2cdfe49a16ba38b69eee22aa5fcb1f8098a84"): true, - common.HexToHash("0x5ad6e6c6b230e62c588e42f969834f28558236037e2331d88a2e5f316d2aa848"): true, - common.HexToHash("0x260f6f660dd02012bbd1d599a8ffab4203de44fb8147ba0a5c0f122cb501b095"): true, - common.HexToHash("0x0dabcfbffd69bcb9020a258e26f3a81cc85fe768e3566205d7f2965f857ab89d"): true, - common.HexToHash("0x49045511a8cd7ce81b9f9485e21ef2112fc29d0d6b2085f195f045f72bf9536f"): true, - common.HexToHash("0xbe76a67b75c04368cf4761646e32789ce73c5ef323bfd7b220b8c7c659e2aea9"): true, - common.HexToHash("0x90703a23ba454b3d3a698452f5e3b9f5a7dfa3790ab34f119e1515a867c734ec"): true, - common.HexToHash("0x8e3b5e0169dd6fd1a30e5023bcfbb43a5dd2cedaf04732e68732018c0c41b874"): true, - common.HexToHash("0xdcf2c0e31a09de54e35cde68e3865c8dfa1fc5d1381a608bfa3661180836e77d"): true, - common.HexToHash("0x1b0a55a201e36e40bbdf3b2eedf538a55d7e95587d3e1796dfa447a400dca4da"): true, - common.HexToHash("0x3e8e4056167dcd78668042e1d8dd792872d94aabc08501d3c9cb29ae75b727e7"): true, - common.HexToHash("0xf7797481a92e462604556d3468f9e8413a6094b838d76e7b966fb5f5f898ebd1"): true, - common.HexToHash("0xf606acd282eb15d70da3daf791a793f5ab254cad9ba070946d2d373ee60e512c"): true, - common.HexToHash("0x4089f2c2e21ab0824af40ce15461aa065b05569140832d13a3e3698af6d6d86b"): true, - common.HexToHash("0x91dbd6d84905463a2e75caa9d665d5ce6c4bd0489820f636240d50afeabdadb0"): true, - common.HexToHash("0x6882b7e93e5b0b898768ed0a5115b9e7ac1f8b74ae8688fb0b3c115a8062f2c2"): true, - common.HexToHash("0x18a4a724f87945c817020d3672acd0fd518e4758cb1c5c6c6924d6fb47bcd1c2"): true, - common.HexToHash("0x67f1cba2ed9dffb2c4967a2ce581af6c98f296637e110de8d26b361f9fa44791"): true, - common.HexToHash("0x3b66730b5d3de9422e53b521d67b1c479a40bf169b2435c288aa5c1af63f34fb"): true, - common.HexToHash("0xa3358eeedd11201d2f05fbed47b81059f66e447141bd6f5de6d85b5f2e48c0ef"): true, - common.HexToHash("0x7f2dafecc7103eaf711ffc8cc48deb3c486e503709af7f0e9136b9fd4fd1c3bb"): true, - common.HexToHash("0x3ada4ef9b7dd2569e926b4bf35e7ffa637de7ff5a1558e3f1dbe15640d7c09ab"): true, - common.HexToHash("0xe7f79fabdd3b60b859e10789533352d196843008ebb6dba03f50c2a3904a3f12"): true, - common.HexToHash("0x493d2584eccab12eaf430322fa5ba5f42f4c1f720ba39df098469a50a6c9b35e"): true, - common.HexToHash("0x1ca7b67ac4f26b3e70d6898fa5b2941a2f5736ec84a1dc58cf3ac3782179febf"): true, - common.HexToHash("0x1d8b87f45e7815a24ec862a1e16bd92d46bb5b84a8a4e27dc9eeb63dfbd98cb7"): true, - common.HexToHash("0xf610297d5ca5cc6ade53a5cbaa43350893120c492958fd7755c9649acb97d672"): true, - common.HexToHash("0xd6b334692ce9c1571a06a7e1f90b958796d0779934491be48b35f11cd50d779f"): true, - common.HexToHash("0x0feba223d57e3566f0803ab91a50f925f1ac06064a51a9a1e5ed5e29ae9ca839"): true, - common.HexToHash("0x4625985b62dd6fec2d8faa0a4cb7bb37ad28e41ce668c95a84149ca246d8541d"): true, - common.HexToHash("0xb9f7666076d7b21dc9638bda8682ce9684a610a2a6c49773bc87cdb3e7fb315a"): true, - common.HexToHash("0xe87fe77d6f505462be8b4191e1a334a8e5294f4331c7783bf43e98fd95fa3cee"): true, - common.HexToHash("0x9a6f5bb25c50567d168956303faaaeeed776965acafca5599ed306d873199673"): true, - common.HexToHash("0x1e9c0776de4c0c72dc17d038ca9750d571ca9fa6d99335afcd56c52d8fbe87f8"): true, - common.HexToHash("0xe5e54adbfeef5e9ff1a2849f130376a51efa8aca63e5c54f0e972d15a00fa700"): true, - common.HexToHash("0x92acc51767e925a9cc5d6fed43fe5c5c18e6813fbe5950743ac8d3a81a40b774"): true, - common.HexToHash("0xf47195565bab31e559261ef2ceeb9078acaddb7457709b426b92424908148700"): true, - common.HexToHash("0x0fad2de84d4aeb9ebb30027fa5e924ba84d6b3ee6401518f42978bd3d07a4df8"): true, - common.HexToHash("0x1672b02ed756d67898ca3043efcad1e8cbcb52dced0707bc4adde4cb32d2daad"): true, - common.HexToHash("0x01c722837e51a53636c594d25030e94fd3c533f2abd267c8dd1cda587e598d31"): true, - common.HexToHash("0x68e9b32274b30e1d2cd8480d9ee1b75c57d81b9982674d2088328de283fbeb26"): true, - common.HexToHash("0xbfc039ab17c9b0e3264c8e067c3b85098a7090942ff3c14b97eee3b04fbfeca6"): true, - common.HexToHash("0x11a855760a243ba597d45ed7d8e807f84cd48eca495fade505875170781b62f4"): true, - common.HexToHash("0xc870be7bcfb8d6692acbe5546e852fb7856f0c2dabfb32c6b000f2f7f3b96006"): true, - common.HexToHash("0x5bdf8df356fdd9e4029618b7ceea39b000a01e1d4008a73ebfdccb3f3a8bde32"): true, - common.HexToHash("0x2249a9475148a2bc5fc4f439350a9039321b13e13e03fa632dc36194721e4d56"): true, - common.HexToHash("0xfc0937881d096aa30610bdf9c3063360d727494da9221dad81f6c0677f99c322"): true, - common.HexToHash("0x7123aa1b3db83aaf6ac029ed37fe4649d2ec08bf96c14d217a821224e9d1d4df"): true, - common.HexToHash("0x7dbc7090be652dcdf93c9aac553700c03c3602e690d7b4c4ed726fe6a45dc1e0"): true, - common.HexToHash("0x870ef6a08814d6588fd2fee17fea5303ea43f54d611207de72b8d875debb5a79"): true, - common.HexToHash("0x67def45ac716e72843ff3d3ca1e6a505774ce97f264b9b27932f6bce4288a2cb"): true, - common.HexToHash("0xb2130b025033a08039b24111a28913f1b784ce18702ee161b96d06946bfaa870"): true, - common.HexToHash("0xd110783ab58e1154d561fc9bcfa01633f2f5b3b85090f0a7313d9280768c5f36"): true, - common.HexToHash("0x86721af56b15dc5a2d90816c60df810d84453684c19c9dd45d65c4be8dc71c6c"): true, - common.HexToHash("0xf9bdd860be9eaa63c0f11c26daa5cedbd91a937501527c7ee00b11308c71ed88"): true, - common.HexToHash("0x9a1ebebb24f8188def63fed7a480afb0014da0687ce799de3fa3c7143d22bd9c"): true, - common.HexToHash("0x65153b420840f521088919b9bded8f8f169f30da2df48edc1074f74153733298"): true, - common.HexToHash("0x410511e66a15a395cf2729aad5f7dd3fceefe015b77b33f5d803a923f7fe532b"): true, - common.HexToHash("0xeb688aba2a4fddc005554b727231f94c3e31d233120fe097f3d720730b351109"): true, - common.HexToHash("0xf30d482c334950e90eb758494ac2a71c3848589cf38a2c1489c9a5d8b9ec3c37"): true, - common.HexToHash("0x989b9f0ce4f5c81842440cdd426139cd7570fd2ebcc67097da6d4e31e2534b7e"): true, - common.HexToHash("0xcffc550c42d26a194979864b947785732dee48b21fc4de06e2bf04efe3c68a84"): true, - common.HexToHash("0x4fa11719371a5cbb799f0688524204e054d35685632cfccca15dbe57d62b933a"): true, - common.HexToHash("0xd8d904ae0efb0987c5a048c9914257e61cb3f3675c7d31eac6bd62b2e4c288d5"): true, - common.HexToHash("0x6876b46aff202c71efd9306edf480732790f28e4e3099f7511f32492792e46ce"): true, - common.HexToHash("0xa5ab837c1fda725eaf5518c6bb814ba6a03eeb39cc72c67450365194a732be8a"): true, - common.HexToHash("0x992d4f7dab7e37f9de12256bd8cacf3f84d635eb29883fdd95bd346d18adaaf2"): true, - common.HexToHash("0xb0eb083700863d8925003ca7b650c5733e0333a2c7e6594beddbacdc0ba5f948"): true, - common.HexToHash("0x40df9b56bc4081c25eb1a49fcc23de20baae2db1d82d312b238d2fdda8f6e766"): true, - common.HexToHash("0x0e125d233ac6c12c772f1029d66032be0a45b34f7771f3e3b2a2333c660adca0"): true, - common.HexToHash("0x53c002d80e4f168cf7a7d9af00f60b4b464880e286545c1a5cb81be391845543"): true, - common.HexToHash("0xb3609bc2fd3aac2ad3d70780c64e6b59e310185942a56a2c38c4e446e58434f2"): true, - common.HexToHash("0x2ca92d3ce8573f80a9418286dfcb53e7890483a5bfa6530af84875a9ba502485"): true, - common.HexToHash("0xcf9248d718d5acb27ed2c8fe77ff4ff74438492a3587e8f2791e5c6bd656991c"): true, - common.HexToHash("0x60b2907071214f19bb3c5f9ca9e46eb5e127ded7df16b083cde780c5d45786b3"): true, - common.HexToHash("0xddf99011112d40922d6bed12f716e8fe83fe1349116127ca39f28f425b39bcb6"): true, - common.HexToHash("0x90fd2de39e37c9e86ef0695fd211e7eeeb4554ea65b49b913ae6a552278fa731"): true, - common.HexToHash("0xa3d477b3f98b211a04ff7c53779c23a784d34922362367126da406a66bee888f"): true, - common.HexToHash("0x9b1ed0feda68b634bd5c28b179324ca4d5357b9397da60fe6d5aa5853e976627"): true, - common.HexToHash("0x1fe72f06f356de5b7aabb9fef8bee3915a4895e97ad394a8546c40ffe4735896"): true, - common.HexToHash("0x399707275e97ba2153ddfdfd7662bf5572badef91f4d3ab9fd1df3f671ec4f00"): true, - common.HexToHash("0xa448b9ed6ec25b8dbcbc57de086c9efdfe10ea88681cc3492e39590bc0c8a208"): true, - common.HexToHash("0x1acb69effa3ceb117f13c74ca893a96e7d4265f5a5b0b5925f3f34bf21864b54"): true, - common.HexToHash("0xe92685af3e80d3b73384763b033e8cbc08c3ba6bf89bd9f3a94d4cf2843af4ad"): true, - common.HexToHash("0x8928183886c0d9508f3af21f4e0089dd63aee554f637e050a8894d7a1d322e38"): true, - common.HexToHash("0x28728d4070bcefda5f8e861b85b5a084e2ece3b5ada831b65ebfff63031d67c8"): true, - common.HexToHash("0x468cc3595a72e9678e71ecdd2bc94e4b0c20c35818f32fc38843f9d03311a93d"): true, - common.HexToHash("0xea926ee320df23c8720e068916fe9680ca75864fbf377ca5dea40b68583d62c8"): true, - common.HexToHash("0x453c77a4365104fbffd269da557d9296f6a8a5ce50006ff3e529836bf98502c9"): true, - common.HexToHash("0x0f52714258b1496e067efe3622912c54634a60339816a018b1739c31669ed8f8"): true, - common.HexToHash("0xc16982e01e890cb1dfc0eeb0084b9b87b77479a2d46fa07f5d320af2500d5d6a"): true, - common.HexToHash("0x2537742c658387288f34c60617bea39c6d4ecb740bf9d7436fa47c52d1fb713b"): true, - common.HexToHash("0x677f7901f2113b26a7e0db9237c6e46b533f8a8327988a2c6e77d66dec1d4bd1"): true, - common.HexToHash("0x41abe19921b473cda20b4a915acddfedfb756da2ff8e7d6e8c1ad8095bac6d41"): true, - common.HexToHash("0xbba491a1b89cc1701d0e254f2e611efed77039f481716ef90fbb9726ee57811d"): true, - common.HexToHash("0x56124c4615d4ad7791504aaa3f9fb6d1f4696d7d9b74c948675dc286551dd8f3"): true, - common.HexToHash("0xf452dfcf1fd910cf7aa6ac423492e7ab1ef218567500b1d68a540cb01057e1b2"): true, - common.HexToHash("0x3ead5e08e994346a1b82b4d10f463970bb704fe93d371ad890b96d82dcfa0882"): true, - common.HexToHash("0x6b24eeadd90d18704e0f83f7db5b4a9a5bf2f619505bda91a8e18ae4d0fa2700"): true, - common.HexToHash("0x4dab77d3d02818ca74b54266eeb6af721928e384d2395c80a676942cfbc4cb25"): true, - common.HexToHash("0x4cd3b4d9aba39b7b4efea9c5e0f3e07e723c2388447d5d2ab1c8afc1fd9ac14a"): true, - common.HexToHash("0xc0010b158b4fd0af66008a5f84c267ce027104fc64f928973511344ca71dd595"): true, - common.HexToHash("0x07ef969c5280b17a1d00f98368519c0f9d4b75b6ca139258a5ad453cd617b884"): true, - common.HexToHash("0x5034fc7000d6a684bdcabdd1995c87b36e3bfa68b51c61c80426a957dcff585c"): true, - common.HexToHash("0xe370cc294ce48451dbb4262d98875e43830a479e4b91038921ba062c5d42ac89"): true, - common.HexToHash("0x4181e024f339b9dae0909042a0ee209123ebc37b01551937cafe5b9866d341fb"): true, - common.HexToHash("0x73f2ecb554a4bf64ce1a8009eab16f03b14a13cc71d0908ad8b1632f5ad2b21e"): true, - common.HexToHash("0x69047c62ec3850af4d4515a8660e5e64d65e3d451088ed6b096ada42527d3024"): true, - common.HexToHash("0xa446e3a81ddeaf3b33fa816a5d939aed079ddf1d8f01cda87ff4f207514da5cf"): true, - common.HexToHash("0x4cdc6c2025f739919e4ad7820defc7a141806cf430031527569c6edf3005692e"): true, - common.HexToHash("0xe45341ac776355397d5c9fd438d795c007c6f10d4dceff4cfcb3651221fdced1"): true, - common.HexToHash("0x8754ed0c8442afbeb2bb2127d0f2b30a938bec60dde74cdb2ac51cf11f4cbd30"): true, - common.HexToHash("0x64234f8298dcacc9641f5d985cd017130ba154a8f6a035ac7ac8d361cdaef980"): true, - common.HexToHash("0x33dfa8984b962bac5e4a17f065389f2eba65f0b1434273d2edc20287d5860241"): true, - common.HexToHash("0x01d1954c120d611d7edd1088e65ff8f43050cead04d4976b50bdc983565389a5"): true, - common.HexToHash("0xddea45ca90b955fba9a46aff66689b7b853fbd8fcf648798c1f4054612ea9964"): true, - common.HexToHash("0xc04db740c1738198ce30fe57d375bc7a5b6ddca6db2e9875837e14483aabf6b5"): true, - common.HexToHash("0x1fef17080bcea396c9d3d366b2151c5d3571950107c7b931cbf99affa809fc34"): true, - common.HexToHash("0x3938e8cb0f0ae9cc81e93c05682e11d169e75682f34dea7dca27c1a4b07d519e"): true, - common.HexToHash("0xcd90c9e6eb6940d31f15732dd4ab9c038ed631813ee0cc470cfb5f6989e1bfbe"): true, - common.HexToHash("0x9381dd8ccdb25b59a1d5ca18471c9abbd624feeaa654eb5f65494dbdb1cc73d1"): true, - common.HexToHash("0x0da761c369598f1b2771fb41e8862332ad641592949d779386e63f0bdb6985fc"): true, - common.HexToHash("0xd8d63f59afef3fba94732e0914c50e5ba7c51e11c49be9c8770b2780b57e42a4"): true, - common.HexToHash("0xc19dae29d17d2ed42cc4545517264c46567df2e9e02c9b027630939b6be13c28"): true, - common.HexToHash("0x369fb18be9cf44d6ba929634ab1e23a950fe9fe09955711ded0a12c943d5c75e"): true, - common.HexToHash("0x7179f84ac71dee934f3f7765e1a6a6640c08869fb3efc4ba29cf28fb4fc1b1a0"): true, - common.HexToHash("0x941e7fd5ddedebf5933358f6a7d15861c3f24ca45bc13decc6599b38d46082fa"): true, - common.HexToHash("0x0649026cea10128770d236c9ca4d6f353a4b99d7ff37995b14d51d8199e82785"): true, - common.HexToHash("0x3b75e4d6efb05fd9ec4c92adc96dde4a9483419c0418a83d42ef865b1c4d9014"): true, - common.HexToHash("0x597dec1af7c6b1d4b40858ee1cdc90f56e7fa1cf0dd21058ecc5220f33d852da"): true, - common.HexToHash("0x7d4c3b1b140172a51c4c5ccc7d27debc7e57bc98e29196600e62d5e6b71e111a"): true, - common.HexToHash("0x818d754b5b30ff442f2be2c554080f39ecd696c8c6e269310854ccc56ebda843"): true, - common.HexToHash("0x5749852cd6b578cb6af85c357aa95a642ff5fa29ef71fdece0a3718062476091"): true, - common.HexToHash("0xe0d4d9708385621ff3a252b74e0615025cd66267f2d4c00737ba359faf4e27a3"): true, - common.HexToHash("0xb1b68bc91a9cbf19e3c1f9e01c3f8df362e682f92d96bce80b022c3b84830827"): true, - common.HexToHash("0x2d8183591b99da420801ab7f1c202422bd8a924ebb853eb0d40ea2900909accd"): true, - common.HexToHash("0xd1338b21e76500b5d49dbd2a59c9273cfc9b835a4426ffefe7d80b3c2ed06b64"): true, - common.HexToHash("0x77db20acf557890ae53ca3ba5cecf274b5cc1cb2ab2711a7460bdf181c18c437"): true, - common.HexToHash("0x1595ad2467ec4fde165c83fdbdcee1a3b8b9491ff389a98b91a32caa4d08d5f0"): true, - common.HexToHash("0x507205925a4e2c7f72dee7a082ba0f0e47b9d67b97025c4acffd574500056c3d"): true, - common.HexToHash("0x13a11d812f92fdfe8c0c7c93ef5c3da544d0179c66fc21039086f6c96802531e"): true, - common.HexToHash("0x1c9a07eb22240ff863d36b28220c23560742c0d228b3fac0e991167ad3ae7070"): true, - common.HexToHash("0x7f8dd1412f30a119b7d60de190c59ff5b4d65e9e785d93039ee2ddbeb2870062"): true, - common.HexToHash("0x538170924790403657d8feafd148c4bd2546b1f8d08bef378e3b98ab61337bb2"): true, - common.HexToHash("0x882c0003cd9133ae405ff21a5dc479d753f89a0acdf6412b9ba1fa992f28d075"): true, - common.HexToHash("0xa8a13314d9ee7403ff4ccff8ff98480f166c48ec5807cd6cc1c1bfdfdd91b4ac"): true, - common.HexToHash("0xe9ead699fc4723c5718804bb8ed87a9dea221663cc27a52535c83c7e1d505342"): true, - common.HexToHash("0x41bc72e934bac32aa9f28cf865a9ae5f1dfbe591ac281e430b1003eb05d207fb"): true, - common.HexToHash("0xe3de77f8e105dda325d59e21964e4a32edfbc163e495e2ce1096a89d514e79d2"): true, - common.HexToHash("0xd03265cda3034668d4bcb5a0c0eed824002d515b5d414806489189fb8f99a879"): true, - common.HexToHash("0xeeb9c89803acefddb806f74167b0e3c57cd1d3bc4a58153a4bb296888f412369"): true, - common.HexToHash("0x44d7d8b68d83ad478029da24b4eb69b3edb213e4994538227e94ad18cf11398a"): true, - common.HexToHash("0x48adac52a80c447730d71274002d522c4aeaf4ee50ee608e330a867eebb3f189"): true, - common.HexToHash("0x5f1b221016ec8227ffdd64e84a00c7b281fca13c2ba6a6eb072ce483de2073df"): true, - common.HexToHash("0x911d12b86c06625ee631599f4e8558844b36a0a6d4c46e977f41d6d62a5a5e80"): true, - common.HexToHash("0x79ce41b9359c82c24d0f3e79c15309c8f0c8ca6d48c6ff82a5bb137b1bb82354"): true, - common.HexToHash("0xd6c51c3403a05860506d390b6cb59eab5e6000da5211e87acbe4062b259aead3"): true, - common.HexToHash("0xb4c1b637bacad4e6f3ff186b57ee262d1d508f1570e7262c6e2d508eaa369e54"): true, - common.HexToHash("0x73555567f764992d258ab1cfa3c74279adea842927d6f45383ac48960ae266d6"): true, - common.HexToHash("0x795918c208f9a27d08a71d9a4d3a29a3445e92394725a5344fff0b74158aaa13"): true, - common.HexToHash("0x37c8d6250bc625a38a96da764f56ed5533b4c5cfbae7e99937471bacaed0d8ab"): true, - common.HexToHash("0xa21066beecdf6623e58e2f8d71dc66bfd050b5847354a28e20ffdab2314f1c93"): true, - common.HexToHash("0x5bb113e87b0f66f6db3a62cb3d74ff8ed2797176760c3c2c5b491a81a1152062"): true, - common.HexToHash("0x30e726208f3a8266f768ed86109b04a22ff8b390e508315822cc4e1e939e5e02"): true, - common.HexToHash("0x5037c92c5b6ff295be2d83a8a7f05ef1e7d40b3d0fbcafad749529d2dd2e5fa8"): true, - common.HexToHash("0x6675c5b8c160dedfb6439a20bf74a532a7cdd6c2befe766f7d11dfe8bd84a0f2"): true, - common.HexToHash("0xf6d02c8daebd183b11fd58e9df28c9c04b2419f1e88f81b877a132668361c6a8"): true, - common.HexToHash("0x24c4587fb9a5a8ec66cb112e1162ebe483ff7d44f84c7461252f8eda7165ca74"): true, - common.HexToHash("0x8fcee3dbf3076880c49d916fab2b9aba43a0401d59b1c274384d29277fe33e04"): true, - common.HexToHash("0x2d13e8ee71d88bd0fb237e67c4754648fd3c01e49cba5cac83f530b7c54333a0"): true, - common.HexToHash("0xfb772291809fd35690d42dc813ef73b934bac6825da05f63e74f28211ddc34d9"): true, - common.HexToHash("0x741313b3f5aa05930fef726a5902ccd79af59a65bfcb8e47e424960e39cc6fb3"): true, - common.HexToHash("0xb7e384b2ecf372b2870d23859eef5b808528d8460f2b83c24b64f85d6a413162"): true, - common.HexToHash("0x38a6f57844b716ed5fae2571014d1b35c08a04a7b175524b53b348e60f3739b8"): true, - common.HexToHash("0x220aaae8bf020a3ac963e944f3c5d4684aedab74f782a8bb2181fd060de4ef5b"): true, - common.HexToHash("0xb3b9817a7352cb3d6fbcee8453c99c3aae3c4cd9721a13810514efa570fde9fa"): true, - common.HexToHash("0x41d95f539c505ae2769bc05593023d7d9c44760b6a5185fc56768791041e430f"): true, - common.HexToHash("0xbaa817fb822569dc8cd5851cf87f85a45f82119509053b9c0558d08f29306647"): true, - common.HexToHash("0xb8a57691cdf5c6cb7b27ac033d88e1368bfe9dad784e1335838266b14294d1d5"): true, - common.HexToHash("0x524329d11ddc6fa43a66fc55ec2602d6d123de0c9a99b4c9c756db86be3a5a6b"): true, - common.HexToHash("0xc6b704efc499a92e32aad191957bc35d66295b43b33c6af26500c554f42e0b06"): true, - common.HexToHash("0x2441b3a0b4a38ff20566bc6a980fc1ba4e5335e268f21637361649cce5ece21b"): true, - common.HexToHash("0xcafeaa73edd48b53c3b5c632e3763f305c8a584eddd0b38fd26e18c87b148290"): true, - common.HexToHash("0x21b635d79a078dd3c9d0b66746370f221666f44dcf3a49a96e31147d96fcb294"): true, - common.HexToHash("0xc48c5ed1ef272617f74be838e1f779b93bca6be1883ca5ab9c87acef31995df6"): true, - common.HexToHash("0xb443a87801ec8dc3e8c1ae9202cb2ed96ddd36d15ba178a245a42667ad4cf67d"): true, - common.HexToHash("0xd0fd62b9bc3776e3584c3c8978e5d3541951aa2410842a018741882ed0f91530"): true, - common.HexToHash("0x39c8fd919fe95b4979165719dac34ef9a591db248b711b6d27c1b50f4aa52679"): true, - common.HexToHash("0x95c861b60e29061e46134b9ec5718fcd79470f59b5e0981100e174450dab6b4d"): true, - common.HexToHash("0xfbb8957fb8e9b9b796ae1c7660eddb262b6f971cea8d272c9e4c4ada9dc59de0"): true, - common.HexToHash("0x963d43a706ecff40ab4322430b45bfb36efe160ceb12a453146e0c5e582c133c"): true, - common.HexToHash("0x057e6022d0aa28e838a4a9bb3941b5ec7373c73f4718ab1fb25fdf30bffeb2c5"): true, - common.HexToHash("0xe124a22b94e826a7c72e551b2550507730dd07b772def8bb42524391d3ec63c7"): true, - common.HexToHash("0xff1d5f0a4a323153d3a7230cf63811e8f89102824078c9cc61e2b05d482c1a4b"): true, - common.HexToHash("0x088921e91238b6d721ac4d7afc15ae21511add87b69f7e98e29f1f142c8248e1"): true, - common.HexToHash("0xe14500a282f58d6f62f2f6086b765240389d4c58b7d350c46f7e21ed9d516866"): true, - common.HexToHash("0x73619e3c4c5ab113a52cb8bc12c1059b3611dbd5d407ae68418bfb6581ed1908"): true, - common.HexToHash("0x0b497ffe6f863941bea54002206b9a10185455738ec71eb12857294dca3b5e4c"): true, - common.HexToHash("0xebacef6cf07663400a0a597ebc2ad2b404affb2799e55df8e1f88711dc5cd9ff"): true, - common.HexToHash("0x010696d4dead58e2870fa5b09ed517ea99d3753fe8afe4594467a6a9c206b172"): true, - common.HexToHash("0xa10914122865d7a64c723fd611f9547687fcbd8234269f4e51e2ae65fd0d27a8"): true, - common.HexToHash("0xdab6f3d8f2a3f3cdc5d7ccd12b6a7d6c9523b1bff108c86c197f28513fe9cd49"): true, - common.HexToHash("0x3bcab219cff77796d0a4016c08a285d045092bbc6f6ac7ec9792a9c86696fdbc"): true, - common.HexToHash("0x2c91d4f367764c54b76fbef3a0408f033b3ebb18cbdd15d200fd6ce3448cf021"): true, - common.HexToHash("0xf236b867a5d12a9548c9d869198cab832b84a2e5102e4110889ceea1ccce51e0"): true, - common.HexToHash("0x96b0298d0e3daaad4a0c0ab878d7908cff71033b56b9dd22d9cb931f5715a190"): true, - common.HexToHash("0x68e4c667b0efbd36857ddab98c8401f76f595ffcc2b5198dae8eedde26db400e"): true, - common.HexToHash("0xd72658fde6c0f01a375440510ef704ab1854b61b162ce0f39fa1342e23deb48d"): true, - common.HexToHash("0xa91f1374d94424b1af7c67b36ffe509c88d0b3cc3cec3ace8e3d5d2e5f069802"): true, - common.HexToHash("0x9a1874ea29fd6f109aa80b2c77a744727948b05b02402de7da5de860fed4b4a3"): true, - common.HexToHash("0xe87a1b809532fdb74306952d4509d17ffc6acb75219c9acb38097f1e3a2b0da7"): true, - common.HexToHash("0x5ff1c76a28f53a5bb34d8decec4219e39c4631e7aea6ebde55d4331cf0cd6741"): true, - common.HexToHash("0xf341c38a0e9eb1e9a98bc45269af0aea0e9202eb221cf1885fc6dfc812a0666b"): true, - common.HexToHash("0xa1a9bea545e348554505eabbb31deee1c78316fd0e1be5164309b54f291ffcfd"): true, - common.HexToHash("0xcc14ff2a268bbeda96b3ec5cf4f24efe57368128ba440ddf390bc22d85ce31ff"): true, - common.HexToHash("0x14d9c15c024fcf06ceec23d3c7af22706e3e9bf211324934a922e8ed5eeea7ac"): true, - common.HexToHash("0xd66a018b80aed70ff7fe9db064f71c9bbed7b564442685f4e603f84b52c0b64f"): true, - common.HexToHash("0xe791793191914a7e684a74c7f16f14b82e4a85382e4c46d8989b2aa4cedf4b36"): true, - common.HexToHash("0xeadb6a65bfd14c106fa8fc6887a7013e1a4f7f7aa2bcbeae356c02ec5039a43e"): true, - common.HexToHash("0x3cf056c536c054d8031392e7472dcc545ec98c700fa453364ba77589403d9a30"): true, - common.HexToHash("0xf2d92285b3eae95506c05f6fcfffdd9adda0cb4b8336651e76b4c3d87f8cac48"): true, - common.HexToHash("0xa9f648d9e193a37e56d8f6a72c2634d9ae11baa1b8c910c2e19bb1acac5fb1d9"): true, - common.HexToHash("0x91ecb2aade2c602839f8a845279b0394695eb203c7f0945560e1c6a81c685473"): true, - common.HexToHash("0x49db3b9354af7a1aa20e3a238c63310f05e032cf4684eb000a926d909e4d5653"): true, - common.HexToHash("0x409f61ca9c890ba3c7f5210d4c874111d9fabde218dcb03be5480a16ff66e4d4"): true, - common.HexToHash("0x0bbb90ee763eeb46dacb0bb06b8a9bcb3ed12827f8345ccd19b83098d43c996c"): true, - common.HexToHash("0xd118d27fbea0abab81c0f929c6f228c789a3be0972fe1cf2124c3fbcefaeec24"): true, - common.HexToHash("0x5bd81b8bbfe0d9d47ee036947db017cb16b3f765eb8acfb287ee298263aa1754"): true, - common.HexToHash("0x88bd2b561e277e367f19b9a1f26cd1e23b6bfb84a4c6cad817173ecc206236c3"): true, - common.HexToHash("0xfb906d0bb5f4a39700eb95f88c0ee4b5425e5e5df5fd110594e7a8bb3d448cd4"): true, - common.HexToHash("0x6260f695b3cfa2405c5b38b56bc90824fb32582ef64dadb5b01d847815fdc2c7"): true, - common.HexToHash("0x127cb6532e67c4a81cdb41fb53d525b5308617863db69c70cbcd3ec4a1363043"): true, - common.HexToHash("0xfa6993b37dd7c4704914e36ce8d972181dbca16b3ea17cca359c43010be3f51f"): true, - common.HexToHash("0x9f240fb321f8ab9ca2d927e5dc441f73ec96976f5b5096390b969a52825c2bc2"): true, - common.HexToHash("0x3561a1cd66629fe2afb06a4980dfd9c89956880a32af88e4d5881ba0c3725b00"): true, - common.HexToHash("0xa66fd92cf33b850920a99c4eece5fe9a6da3854c839b60eac828e82e96a2acc4"): true, - common.HexToHash("0x96dd9268322fca6132c6ba4cc3055835f08f8be27982a96aab754fa1b0065f3f"): true, - common.HexToHash("0x9fdc48513292379234bc9c24a59efeb0dabc729d73242b8bb282b6789b3c14e9"): true, - common.HexToHash("0x245427c21ff288a8d315e6d89ed6dca4a68f0cd33b885afacc890be67f902e05"): true, - common.HexToHash("0x625a9278bba0d2888d09da9541a42d9651ae77abfd15f5bfba3e5f42e158948c"): true, - common.HexToHash("0x23440f913c8db17ddabff4cf9135da6e17d611de6bfdabc84ba93265fca36927"): true, - common.HexToHash("0x5ef40dcb910b3f0e1de989edbefcbe3da56efb350e3beca0a2ec54ff1e2797ef"): true, - common.HexToHash("0x515c71578c50a4690a3bd7e89cda0fafb6b94ca10becdfc0f34e65140d888d8e"): true, - common.HexToHash("0xe0809c58013c425565e9183d030e982124e90b7fab2783e0ce6b1e9da271791d"): true, - common.HexToHash("0xa93ed73776be6f4598947634e490e3aa6e79d16ac35050bf21d6c56a36bc8aa1"): true, - common.HexToHash("0x3557a1de959d5d4629929632ef83c5d7099d7c776220a0928e73d3b6c57d5c61"): true, - common.HexToHash("0x3ea7a83719eb1db686f5afad381b1e6dd4cc79e51315f1561171e0330158f4d9"): true, - common.HexToHash("0xd055ebc5231fed90b8e037acf846805bafb723bf124882c4406553a41c7968b9"): true, - common.HexToHash("0x21167756e5e0c6c3c5edb0d1552058f0124dab4223ea0937264213a500fbd4cb"): true, - common.HexToHash("0xf9db56e513204f147414c67484a1e7bd2e00813d5f8b7290b9dad4f31f779156"): true, - common.HexToHash("0xd10d52060f83992776c5dadad1ccd081903d155d6530a064b7f93a1ffae49771"): true, - common.HexToHash("0x4787cd4ae73072558b6110253619adaa6dadd5b6ec99b2674a85f2a2ae8db7e3"): true, - common.HexToHash("0xb75c8283ee92455017c26be8ed174b937ca0ac638e4d2a370f12c50fe31275ac"): true, - common.HexToHash("0x85c5254e6887e7391800894dd5f24c9e9fecd2c66bba7bb58320d75f1555dfe3"): true, - common.HexToHash("0xa874cee9b60ca4d1ed2da909a48e8513803be780c8e97b733e1a007c83a33d11"): true, - common.HexToHash("0xd003ceac886500db13428356fe005f267fb1b6891d2b48f4b90938d043fdc9e3"): true, - common.HexToHash("0x4cf1e0511a80eb3dd6f68a59aab9ac8629e55a38a3cff57df96305a665520f6d"): true, - common.HexToHash("0x12963e19647be0d316fc1e3730e4c29d12c8d3a4aeaf9d7db17d39255e6b8eb9"): true, - common.HexToHash("0x6613dc65fd673e05eeb7e82afeaf1e30927156a34d56a996921745e01073d0bd"): true, - common.HexToHash("0x3d2e752aea441594a5b2b32b54ab88cb45ffb15a2b7c36d9c0e762ca4adca7ef"): true, - common.HexToHash("0xef61dda40bbe42230b7cf4e69ae6dd9778d6174fe60795d109bed1339f9a2276"): true, - common.HexToHash("0xc9901161190a0f72b074a92d7f07f3072deed809507b885d795b8a6978f8fec6"): true, - common.HexToHash("0x8c352be6ccf2e784c7727fe8d954bcb136d405bf9ab5ed64c3359b723b4c45f5"): true, - common.HexToHash("0x3561f6463cae6eabf0b0ce68b35a25646c4b83a067959854718f7a2ea5ae9497"): true, - common.HexToHash("0x47c7a3f1b99c7885127f43c0b20f342688c03f632b21d8c86cb3f1103e12d854"): true, - common.HexToHash("0x62cf0a480175428ad8eb436ffbcd053b088dbb4f1e3af97232bc71185586b485"): true, - common.HexToHash("0x8145b15e5c91c3d34a193cbcae0dedc528b4524d7bd63b27582295f94c5f84be"): true, - common.HexToHash("0x4c6d8b52a16e12404966f6c6275c87fa5a65097c362977bfa1022d0dc0105c0f"): true, - common.HexToHash("0x67944ff309d29734f09ad39afb09556dbdc6d05385ae615b85b16ad2978f0723"): true, - common.HexToHash("0x4fa47abd37f5259e385b7745b80c64427bec162df0983c8fce19a24a6baa317b"): true, - common.HexToHash("0x22f023a8168e9f6384d7b1bbacab1d68c6eeed927e417a731999d1f63347281a"): true, - common.HexToHash("0x11b73ce67295edc8f1f3464177cd8f64b867d552075933ec47ed11000311aaab"): true, - common.HexToHash("0x928f26bc66eb4122a660ff63b2403ce962cf3a7c24750594cf4f6df99b69fae2"): true, - common.HexToHash("0x1c44cc20665f7d6d09db16a505bbbfd22401802465e006b68bd480b3444af3f7"): true, - common.HexToHash("0x0b8421ef049ffcda73ba8dafc818a5f72fecc93bb5843d33bd65b3bd3e3bce93"): true, - common.HexToHash("0x9c1cda9ddde09548449b2c256ab407e48d64485d4537cbbf74a3fdc09846cb8f"): true, - common.HexToHash("0x7124b49cd3100a81ca69a50f2f9c7c306a7c30b75d7bbbda3f87f9c14bc185ed"): true, - common.HexToHash("0x86b051393f94201c13bd91810587d38357965b35e408d0812dd3fbbf8a348649"): true, - common.HexToHash("0xee2dc6bd362c873567faa413ecbf1d6548c7a807dd20a438ab680af079803934"): true, - common.HexToHash("0xbcb35c8d40d51eff7d5d4b085a3948b1e60075891b2bede437b54524a6b48b68"): true, - common.HexToHash("0x97bc541c6d3f0f752ff5cfb16486bb2f1c86567629926806708a4605b361ff66"): true, - common.HexToHash("0x2e0ed54dfbc23ba9239fae57bcb9caea1323c8c91df63f8437ba3cdcdf00ef96"): true, - common.HexToHash("0xd89e4f8b10165082ece792eb6894535b841922ac1aba445e5e8a409ada6e73eb"): true, - common.HexToHash("0xc5ae5e31e3c46a61c0ed9a01b8c28810631f390c587f7afb7558d02360a95bed"): true, - common.HexToHash("0x5859a6698fbaf85e9eebbcc3ae6d4a9ea37df4e8bf14ab0fa4ad89d4eb82b701"): true, - common.HexToHash("0x404160bdeba678b90f232497ad7f1307b610e008a80485a4dabdde6f6ea678b0"): true, - common.HexToHash("0x2528b0e144e2ee2ef84d0b6492066396dc3d52b949a5412b23b5a885f5e7cc4b"): true, - common.HexToHash("0x7a10a296e31522feea6618ef28adfc972d53a5955746216a19b6b53d64868b52"): true, - common.HexToHash("0xe998dc49239622672ef4163912ffef8bf6849d7b7ddc5410557f4155879d5cdc"): true, - common.HexToHash("0x2b5a5747f4e8de7b1391bca3d8c36f880db7f3f10ef45617ac34badf1c54aa9f"): true, - common.HexToHash("0xcf3949d2d6aed5da6a232233691c43287835dd95caa62aba1d242b7d49c3e00e"): true, - common.HexToHash("0x74f6bece4f1afe4ca7e9a02755f00a1c0b58ad97ad1f824fc6f90c34fb72caa8"): true, - common.HexToHash("0x5fcde60c93ddd4139f76c6b38e87f6039bbd2816d4ede17f61742016c9f3d062"): true, - common.HexToHash("0x0f0aba3344e8c4742efa5e5b94afdcccc62fcc6c909a977605f4d9e523ad86de"): true, - common.HexToHash("0xf10bee5a921b0e46813d8cc68deaebcb3b6972fbc8ab35561c680f53c2ea5992"): true, - common.HexToHash("0xdc3131c5df2d1af6519b2ec4878bb8acd245620e124afaabcabe793293721c36"): true, - common.HexToHash("0xc7afa045db50eee45d0f7eda19842e9170e4befba9ac703e4f02d46c89932500"): true, - common.HexToHash("0x787a9bb0565f294aee26b4fa6814d4affc72060583d4f72baaf70ef997ea014e"): true, - common.HexToHash("0x92b7cc72c231f33ba57877c31533dba7445feae807dd41735417eb95bda5fd19"): true, - common.HexToHash("0xd2f8f5f4f0cb9e51040a56f60fb65b8520e26e47ade3f7c2509f00f92257bae5"): true, - common.HexToHash("0x8aec3ecc2ca4fb80a21ef9fe9392c104fcedcee0159a714ba238948e14cc6f1c"): true, - common.HexToHash("0x1e5d34388d7f7d285bdda913e92e7606188175179d85bde0be98faf46706f216"): true, - common.HexToHash("0xcdb39b8aeb903df8b7b183bb7036dbc44b4fbf6f5512b332e067974ba135f918"): true, - common.HexToHash("0x930ab7a48a8d98f4f7f9c04b1eeae43cf9b5f118c939eb6720e8cdf5f89c2bd5"): true, - common.HexToHash("0x38c36c9050e977569d3e3d79e78d285a094043eb5560b5c36e6cd6c70d4708e6"): true, - common.HexToHash("0x696516d218cc36e875886ccd2e3af5686ac0725349955f1b0c8b06ea5d5ea5c9"): true, - common.HexToHash("0x11f1e7b96b93f3723b41eb978db0e277fc94c95caf255b35a09bd1f8d3b481cc"): true, - common.HexToHash("0x8092d17967356f1213062cfcfe041203782f2787006571e872727f1fc3f387c1"): true, - common.HexToHash("0xa06f0819d0312dbb1c7159d603bf79cdce5d7780bcbd75f1cf596407c0f1b588"): true, - common.HexToHash("0xf80b75ea527d6e0781434a0d7b7c297160a04faa8d3f1f9754cda415fffa2022"): true, - common.HexToHash("0x45ba6f9e100ae94d7270472f23f2361838fe01900c6a09119c72313bd060a642"): true, - common.HexToHash("0x99728456a328639a902a70934fc07cd214ccfbadd7c392ef7f271ee0747195a7"): true, - common.HexToHash("0xd8876763cf14bf5e7ed86f892f841f452ef1a7ed809e333e837340930488e97a"): true, - common.HexToHash("0xdbc6674afb1531e7f8eebc24e3c1990e71a55d8bcf49465e1d431b58670584cb"): true, - common.HexToHash("0x530a29ea6bfba4a3547dbc152dfa2a6b6db6e51d0bf577a4babd169eafc5b44b"): true, - common.HexToHash("0xebb339131d70a6ee8e202e90028a4bf638182f7bb2368e21ee714fb7d9956ba4"): true, - common.HexToHash("0xe42240f4e898bdc5b6dd518eddb864293c00510bd4ae06cabebd413ee72f0d9a"): true, - common.HexToHash("0xee98d1d0e126a07e13e7ed2a527c7e757c0a99d1a283e0c9f9e3805906a226d4"): true, - common.HexToHash("0xea0de62990609bf35c8dc52a6dd71c4598f8987148ae9d56e41cf59d84b27210"): true, - common.HexToHash("0xc593e952975c3ceae0724f2c47aab7f62147a50bfe9599334b0b90e0bbd9f6c6"): true, - common.HexToHash("0x7b74fb48397a01bc29094b8da41c6e6bf5dc2d1be47a257972f2b1e177f9270b"): true, - common.HexToHash("0x7d354c781d61dda9f5ab1afbecc6b31c4d27378696f0aefe50312c281ad8f031"): true, - common.HexToHash("0x339385c0852056d5b3d04455ec1497fd1a3140532dbed8d7c13b777dd092e933"): true, - common.HexToHash("0x745b305723162aeec5e41038abd51286a069dfe41951ce303fe8a5697e6965b1"): true, - common.HexToHash("0x5b53bbbe7b69703c0a70c148bb6fa3b0dda74fce5efe1e64106deab1d8749055"): true, - common.HexToHash("0x3320066c63059a2f9d9a9a81ccb36fb84e7a687c7bbd66042b348f078a8ec8ab"): true, - common.HexToHash("0xbf7e57b188af6c0cca4debaccb85bff3fa1dc6152e51be142b74d2feeff3c5f9"): true, - common.HexToHash("0x2188c644c3f090a2a724dd20fa7d904aab59cf616953f05a0fda9b7f3099d9d6"): true, - common.HexToHash("0xc2a9d7abe9d884f5e982a91d65e5bc1c36ccfba52f936a30fbcce03ef44f052a"): true, - common.HexToHash("0x89542b52928e849c29ab6998facc50df634e1b9e81ce21a4352c28df48631a5e"): true, - common.HexToHash("0x9525736bd0c8c9ecd00f6819c4a3fe73f957ed64975c9e46e924525d8bfac66b"): true, - common.HexToHash("0xf0b13f4d4afb4a58badaf2b29c9c2e503eee99e1f6b9872004d3fa66e7e9ff0a"): true, - common.HexToHash("0xc4ba7391e12f2526305c35a7bd9fd1a4997193a522c7f0f06dbb983b77e50e8c"): true, - common.HexToHash("0xeb63e43dbb4f4a6f9399486ef0b407d8ffbf1626e5d47b05fb0cd069af59c36a"): true, - common.HexToHash("0x3705f6eb80c7445905addd15b875268ebe15278b53e58c9e3410732e85e96711"): true, - common.HexToHash("0x92a27df6d4d678fbedd03e75e73da0dd1a2493ae3c35948e3eccb77541fe8495"): true, - common.HexToHash("0xdac9096da9950b774ee6ab08ceaa549121f0106ecad5eaeae3a73db4ac136cdf"): true, - common.HexToHash("0x288ff0bc05b3be7f9128a5cf1de6e6b775723e568b7ee73b500936bf3f12388f"): true, - common.HexToHash("0x7593ae0f90b32f0b41507ea18635dc35c0c40f059a97016aede91ef78f253bb4"): true, - common.HexToHash("0x6ac60dec2f2a73935c9c52992fd8b24c2ba079a5db41009b71bbd03e9449e9c7"): true, - common.HexToHash("0xf93d5dc591435ed081d53bf9ad323569404c863f12736b8fe359dd2c1ede46bb"): true, - common.HexToHash("0xabc695898277d359316b239e8a7e0b59371de49b10ff41c8ea5158e653292352"): true, - common.HexToHash("0x2ebc89e0bde9b0b25eddaf489f3c805ca1d06ff2446e8d3e2c407157f7d46a52"): true, - common.HexToHash("0xd332277330c35ed0fee1577c2550abc06e2d72c7da6afe765cdd8941f2512f92"): true, - common.HexToHash("0x1b089a21765cc705f12b5d35957556906de663f5e710fd185a4fdbad432b3d45"): true, - common.HexToHash("0x69a28638667b471ec621964ef31a3dd1c5e5f4a80ad170c28d152b9151a52548"): true, - common.HexToHash("0x7c2a466d6ba30a24491236a982ee2122474eb241858a3a12f37452aa1589cbbd"): true, - common.HexToHash("0x90b5b461d324a49dc6e5b776fdcfa0d141d2056f3c44f241f6706e4e3208ecbd"): true, - common.HexToHash("0x67ede0249fae95544aa3d3bf7b77569b714e559b6701ea39db3b88925eec492b"): true, - common.HexToHash("0x2370f6782f60d7a9f3abf869b57b2a7efa4f42e2065cb7bfb0cd09d99bfd3ff3"): true, - common.HexToHash("0xf67e02d4fca435e35765574f120e30f8d3efdcdaf755e6127d97fc1e84f04f91"): true, - common.HexToHash("0x8878df70f23bf8fb61a1bb6753745ad6fbb407ab1320c2224017d531792a9715"): true, - common.HexToHash("0xfad5a37f1f6742044791e02d1b6edac984005903f665a68b7e95fdfe0ddf2226"): true, - common.HexToHash("0x701f5b2f0afc7150e4709ae809a7c5231639a8bc4c76d696db22c146d9113c68"): true, - common.HexToHash("0x07f33700615180ca178e07de11a3d61e60f6b3db6a7d9cf536047589aa97d649"): true, - common.HexToHash("0xb6ad246dd7d66eb45b8a003f6be218520c15105b6ae060a629c830c29cccd218"): true, - common.HexToHash("0xc9dfc9a196cea717bf96680f0a15f670d844a5d5a0759110c6cb7bda2f9eb8fc"): true, - common.HexToHash("0x1d913925323b053ea5b21720a398254c09fdadf28ce8b8ba691ef962943f5408"): true, - common.HexToHash("0xbe7e87a1e0bd0e1eefa1f5b17200f6e59e05e506d1df43fe96ac6d550d96893a"): true, - common.HexToHash("0x6af7a5eebb34facc25a974f558e485c2b887dde8f8b9ec5aaf91e2efdd9252dd"): true, - common.HexToHash("0x1fe7a137f675b1c3b88b990aa4532575a84553e2689a60be83cd2d369f007f23"): true, - common.HexToHash("0x67f65c81e7031d97e9c3ff4b296c0ca4fc8c1c63f10d16cffe5d8940f43c544f"): true, - common.HexToHash("0x5912b4c838c94292d93a756a6e9ea706a89995c3859bc324a64d5514bffd59cd"): true, - common.HexToHash("0x7ee96e3e206c317ea898667262bd95a24df349208d67c064ada94286e6683e18"): true, - common.HexToHash("0x134420480ba4aa3d87652d89f0863f618e86870c2bca36dccdab128edcd4793d"): true, - common.HexToHash("0x21129cc924a2cd34ced1cdbf76296b5310e46609ccba03e108fe0e3b2c99aab3"): true, - common.HexToHash("0x86dff65647a2b2fc0632a3e0eb0e6bf30dde093e09130c3eb4dc4c58db1f8d35"): true, - common.HexToHash("0x1b586dcbab9f6216a5d3bba39e1a517859b020f4d0fc34d0d1fd4ae5c09929b3"): true, - common.HexToHash("0x31dc1533cba4c5f7409a09877438aefc77f3fdfe7d2d26286393f66ed144a6e2"): true, - common.HexToHash("0xf9de8d9231dfb2d9945eede8df16df6f87e4c014733c5a73a2f5fa5317d98739"): true, - common.HexToHash("0xe7dc4ed031fedfdf97f4d42d7c7ffbaeff9b934ce74cee177ff30e7b7c7a3364"): true, - common.HexToHash("0xf7f1b416341ecc46aba65311a2f03b4fb7e5714c06d94cec89556a9994cd040a"): true, - common.HexToHash("0x60d50b6a302b9a98bd599927762d066ad3d3cc683faa717179899f1db49e70ab"): true, - common.HexToHash("0xce4f2673418c8330955d46e15f23aeb210fc24e7cd80133830759f9944bfc830"): true, - common.HexToHash("0xfb947422ff1bd8c96dc600aed1d6f16e6ea553c76baa2f6ff378ba7b732787c5"): true, - common.HexToHash("0x3787aa301ddbf1dc0368ad8aa25149214edb9cbaeac84c04bbc4d1170e78bbeb"): true, - common.HexToHash("0x345145e2882277ae07cde6799e89d36a773c75cbcdcaa90114f7b31d503d11a6"): true, - common.HexToHash("0x276d9c9da18c12dc1a45c819c849ad8d082b08c1ee3b43d8beb5eccabebd26bf"): true, - common.HexToHash("0x303417dd8a6453f5d4c259e287a34beeb274c16ec1339867a224a0dedce8d747"): true, - common.HexToHash("0x72da04f4f83ee5a37b5c6dc7c50f7b185dce6027a275261c6d6b09a273685cd1"): true, - common.HexToHash("0x1d3aaf896669908bb1e9419c44a0d050fd09e5e158752f8a84db04ccd42a6eb6"): true, - common.HexToHash("0xf2f7948f85a9ae278b32eedbe6230de7bd92b2a3faffbfd3c8a9806a6a208681"): true, - common.HexToHash("0x4de59890e8be5563c9678dbcb8068b51bfda3463915f6028c35403f6528928e1"): true, - common.HexToHash("0xf22be3eae78a9e0ed9508e316c6cd0883aacc9b8df24155e5b0f2097ab38e148"): true, - common.HexToHash("0xe2a948d685367eeef6979269bddb82adb271d82e625bf08d27ecbfb85e9b731a"): true, - common.HexToHash("0xdf5cb6756ded57313c21b65dd35008c3ab73fb15e942facee32b53593868d3e0"): true, - common.HexToHash("0x35c2e023b326a1dd3fba076c96d6ffc01ffcc98b3c7a03f1005da39560ee049a"): true, - common.HexToHash("0x6935706cafcf9ee4d2489404b81a6f8425f789743046d16c8706f0884827ba23"): true, - common.HexToHash("0xc0876cff2cdb69cad3ae4327df4f16ae41e14cd9627aa4188c9dc22d393b514d"): true, - common.HexToHash("0xaa26238ae309e3eecf45873ff335c07ea1ffddd127869f6b6e9cd6e4d3cd1407"): true, - common.HexToHash("0xa0bc8eea70938ad4d4ef9fdea2582d09e1172c9e4ad876cd855e6ffce8547e96"): true, - common.HexToHash("0x37508b3fd586e2a6727efd86abe28c94c31bac692fab84525f2ebf82470396f5"): true, - common.HexToHash("0x07ef4a3bd63999064b15720fe1a8d1a5b46059923425d4f9ed199d15ce263640"): true, - common.HexToHash("0xd9cac77c638529a7c78e2b1c252c180736698cb65a4f4caeabf6be49b1d18601"): true, - common.HexToHash("0x8277113e753f6d3703eb707053286b4c2b8818e39c8eb6b8472c0051c19b95dd"): true, - common.HexToHash("0xc99c0b57484a767142fcc37d488d24ba54e0fc9bd6bf6e6a806e4010d8567fe8"): true, - common.HexToHash("0x69a691ba67592e1852c7db684f957649ed3f2e96670ac527f9003d1cef0b96c8"): true, - common.HexToHash("0x30cbb4a9f2af2e5972d7ea21199dfc77f704f968cc01561ba579a9d6fe346bf9"): true, - common.HexToHash("0xac4ff68a21ddd4772a29003266142e78c9124ca143ad2e47ebbe36ecba923c5e"): true, - common.HexToHash("0x48f498095b81b3b072b583950d28e4bd08be1dc1f525704e28f900e8222f6dc5"): true, - common.HexToHash("0xd8f2bf9905f7c6151d29f7502a2580c4e439279a2d5ae418c2cbc0eb09415910"): true, - common.HexToHash("0x37e3d185c4045d67a6c8acda62698cb0ae82e7a46f366cfbdcc8131c80a436aa"): true, - common.HexToHash("0x56ef679286d9a296f6a54266175576e482af2999d0d812cccdc3df55da26ec29"): true, - common.HexToHash("0x515b96701e4281445e81f4fdd84748d9e5a498ffcb8ef04a4a539df062169efb"): true, - common.HexToHash("0x0ad7d79e8c98f1ec6f23e1f3ffd5f48ab4f364c69adcf127d27931345db8fe54"): true, - common.HexToHash("0x55d0d3903b0a8586026adc8241bfabd73dfe683c0a7ad2a31abb5b289b37ceed"): true, - common.HexToHash("0x64f981c54be9484148627328cd4997f816c56a8ee4d5ac4bf9bd4ebb9f41d6ca"): true, - common.HexToHash("0x8bba746ba8d52a42ef54458d5353e98cafcd0bb1a893b0cc5b95a2840b14f0fe"): true, - common.HexToHash("0xe573536eb9218919d7bd783ffcd6b4dce42e1cb3023ea024a01eaff1c8991a0a"): true, - common.HexToHash("0x70099d9b658891b682de2c2c6030c531ec5b12b29798069b143023a432c2cf1d"): true, - common.HexToHash("0x87883e05ddafb66765717e4b943f4920e1d0c1c7733061075ab8af63085452c1"): true, - common.HexToHash("0x5822f838ad49b57779320dec459ccda6e5bde872a99e88f892160727f340459a"): true, - common.HexToHash("0xde0a14f71468eeb567e0f782c8001683bfdbb7c84451f53fcb0bd59b00d8fc28"): true, - common.HexToHash("0x916d39fc66427a29aaa89847f192f0360fe7dbcaa94265dad6f2a6f7f95b4df7"): true, - common.HexToHash("0x22befe65287e888b76cbd5c4bb3cb24ac124cb47da7f9929c88162d17125ffeb"): true, - common.HexToHash("0xac5deb642ba8446c83d748e09712137a60a5f075f91350bb9b4010182373d4e6"): true, - common.HexToHash("0x3270cde72d445a5c31aae96bb8e431dc6a1bc15214522e1ba286e25f3d287c5e"): true, - common.HexToHash("0xc12995fe287383d43db11fb276e47733028f8913fb6b6fec1ea10491ac8737f5"): true, - common.HexToHash("0x12ed23cb7aa8fbe4ff46929a999a74b33eb095c7218a0cf53e601c1bce11d701"): true, - common.HexToHash("0x1ed6eb53a46ffcf40f12f9bcc672075c498fbf61bb90c5a17cb9a023b3baa6a4"): true, - common.HexToHash("0xcc63963ecc4981c08e8c25ce6d61394ea15fed27564ec71a6cf134119078537e"): true, - common.HexToHash("0x9f52d165c942fc0415b2f0afc6e32065c15920588b5b5faab69ae3aabb348426"): true, - common.HexToHash("0x6a5da50b1f9054bf31cd77de1c345f6392e9b687413551c03f8ee2584ad48d44"): true, - common.HexToHash("0xecd7e819696044c641814036d70fb7b86dec26d92d1bd2e13f65268c30473338"): true, - common.HexToHash("0xbfa3f765fa247ea7860ee2595c07743d1501700fc3372a58d7c087062c2dc691"): true, - common.HexToHash("0x567ed9e8540ebcc088b133daeec3891d837ed2567b18f2db7020d715c4765e4e"): true, - common.HexToHash("0x4ef27be2a9d0ed3979b40ecf93851eeb2dd18c504746e5a91c048dd982218338"): true, - common.HexToHash("0xa41ba180d85869330eed6497f010bb83b143d6daf19960de6c824e9392dc6179"): true, - common.HexToHash("0x6ae329e94b2f5b101ce92705a195171f5f0409121d1463e57127f9e3a43cb152"): true, - common.HexToHash("0xa041b7b1848409d7c9644b038986cf21873b19293552ba0e8b62555e1d48775c"): true, - common.HexToHash("0xd78c59f43b54aadc6a18ce59c9c96b0211e24a49d394b28866a4ecffc715cce4"): true, - common.HexToHash("0x685a84eebae8ca9ee4e018138a5f66430e97c131c0af68caa8505a77971d22c9"): true, - common.HexToHash("0x1d2d212422f41426dd28a913606793b647627bbb75d7581e4c6ea4ded8db37df"): true, - common.HexToHash("0x21a846d3e22e729a3849bfcd2dff73a9449c5fbb766bcad4d60409dce5569144"): true, - common.HexToHash("0x267d8e02a1b8c25907eacfdd40a3bb246aa58b175085f08eb1a9dfb256643a50"): true, - common.HexToHash("0xe5cc2ffa8887fc7da1c0a0c80a09a770a5076d4f68557eccb0221673c0f836e2"): true, - common.HexToHash("0x7ec31300f3bfe60b5ea5c2c6b9f23ecfe7dc9971ffd6ca3b612a918b5f4c7162"): true, - common.HexToHash("0x97bb6eba5c300a995fcbce3aa1553f7bcbe80eea30ba5ae1885db2728068741e"): true, - common.HexToHash("0x0ad55de2e3beb31d563c366fd2f35da4d11c221df0c9ef965668254fc96db4aa"): true, - common.HexToHash("0x0d124530448e20d87c777234eba9a10df9b74e765ffc66fd1c8c663e0f975947"): true, - common.HexToHash("0xf7078c6c9546573e6158f38f0ae37704bfa55f650f3a98c59fbd929d6ac88092"): true, - common.HexToHash("0x0fd74777c3288c8537bf777143bd66287c2eea79af2faa1fe8767f239cf5b178"): true, - common.HexToHash("0x0ca5e07adb511f7560495ac7f58f31be8ddf8eeb38c82e2484d6e33059166369"): true, - common.HexToHash("0xdb5ed6ae78c046b2b0530cfb066b85b2241ef4c63e5815f0974bf3fc29fe84af"): true, - common.HexToHash("0x2ee7a20875e41e05f8b5f223f99047b2023d0b9d2002fe6fb0afab99f2202203"): true, - common.HexToHash("0xb8dab575ae67894953f5611093940f5b245e4ba674b5625c3170cc48f125954e"): true, - common.HexToHash("0x488a03c9088013299019938f9bc7aea58d35b74adb6c096d864f818a287a6280"): true, - common.HexToHash("0x817548805c24fbab7ca709bd0417394dd9449920716a794257f5ac433341d179"): true, - common.HexToHash("0x30ad42a9a68cdc97c07cba18db1182ae0de16d425fe21599d01ffb0f132c1136"): true, - common.HexToHash("0x8fdc4b44b25555e7e274556283c77d7c3d5f16ac73b0caf75bd503dc501c14d4"): true, - common.HexToHash("0x9ca028380742f817605341d3acb6c20e899ee83506568a4e5e7581e3b1d08506"): true, - common.HexToHash("0xb39fcf85789417d9e30e7a3b5345ee540d276061f445be17bc82c8d7fd6c5985"): true, - common.HexToHash("0x84b122dbba941438959e5aab9b4a5d561cc3ef8f8e52c347ee2b5972eac918c7"): true, - common.HexToHash("0xb2ca5c339f471ab3cb1efc16b3ced941ba8dd79896901f7c59225a1c311764bf"): true, - common.HexToHash("0x9dcbfe0011cd04b74d37f5ff5154067de194c90dfc86b364d1f6a52d3f503127"): true, - common.HexToHash("0x7326c5ef1dfdbd10654b5379b74431854dab0a42cf95df603f5ddab8ed8532df"): true, - common.HexToHash("0x75c75ec13cdfb932d27d8fe0a54298030e79ec7932cf12ead0cc55efcb6586fa"): true, - common.HexToHash("0x81a75653a2af2dd8bd99cfc05b4417a53fa201cb5a6cdbed38e34b44db7a851b"): true, - common.HexToHash("0x39759248d84a30389122fc51ae2835b53fdcc3c732a586a1c8cab43c3768f459"): true, - common.HexToHash("0x6148218e4c4c08764dc8c284ce75e54685ae3faaabbbd94487fb85a29bef4b0a"): true, - common.HexToHash("0x3fdc5fa52378a5857ac117052f01e617623802bab84d7339a2f2df937f033be4"): true, - common.HexToHash("0x2e310441a6b4b2da40403284fbde7bc2d32368d32f2ea658ba1ad7936cc8751c"): true, - common.HexToHash("0x756a70046f56a00d485a6cdf48cfd16949579d6e6e55c6e1ce5adcc0b81487e7"): true, - common.HexToHash("0x541fde4506addf3226813ae99fa4eb34b3bf4a9f4642156cbb7bc8bbed0bf9d9"): true, - common.HexToHash("0xc16102d611a7d65de39642fe3f771ba19ac6559d21b478676c355d5eb9c62863"): true, - common.HexToHash("0xc99da59ca55a38e4edb06125dbd465f47612e9a112cefee30f8309853e17e4d4"): true, - common.HexToHash("0x8edd8066abe55ad68efc07f35c2ef2ed86b9506f504704d7dee6fcd368b57cdc"): true, - common.HexToHash("0x9c8772d0210f363a3c1b5ccbdd0fb0d1beee93259306a382c7a556c62cc0592a"): true, - common.HexToHash("0x0bd9c4a3b0b8ca4f8f903904bc33c53aaedd90a5778ac97036210588e3cf4cfc"): true, - common.HexToHash("0x9bfd8d5de567291c0b5ac0ca7539ad45b16085234a10df09212638d7994d88a0"): true, - common.HexToHash("0x5705d1e0459cd5cedfc64cd8e780ef9db507f584a9ac1bd07b3960c49793aa12"): true, - common.HexToHash("0x76a32babc5988b1f5ce69e1edde1e379cc7cf589402aaa138f34960fa77c5f2c"): true, - common.HexToHash("0xc43078604517d24d9aff964c2b9a49b84de063f84128b544955d6b5584065f90"): true, - common.HexToHash("0x5753f01805528c11e67ef68e542ab34c30746346fc955472d8312588a1ed3fe8"): true, - common.HexToHash("0x96ea78d3cefd2e1aee1b7912e89ec02ad67c30588fa64e261e8390c9fd657977"): true, - common.HexToHash("0x0ac99eeab1ece3bc4ed2d3335eeea63c4a88b4af1e7e29d4761ff9c5bfee192c"): true, - common.HexToHash("0xa681ea9bf92504150f37aa99e50af73ed4927f228cb361c4123465c25b73835f"): true, - common.HexToHash("0xbf1064e6f0e95973b70693833b00a1a7d9111c36fedec10aeb529ed453ae08a7"): true, - common.HexToHash("0xed029590ea2092e524c90f1fbc1f3c28ba8c5b171ca4b8349935e62a652defb8"): true, - common.HexToHash("0x8aad4cf3550056f33b5ca6559020304a20e12c2c05bbaccccdba22084a2cebc5"): true, - common.HexToHash("0x307ae23560cf59d4ccc6f87d4f1d7a72af19f95a438b90aaac26e0dbeb6f8004"): true, - common.HexToHash("0xda1101ff0da010145c565ebb57f1da82af6d3627dbe0ac1d2240d276b0a26e6f"): true, - common.HexToHash("0x4a2533924896e9974a18b87be5a0a49f58bfd7aa5a5088bdbaecd65431f83822"): true, - common.HexToHash("0x870e77a7868cd7c5e2167d28c751a5e1c1f7cdbf0b08e4f4138fd4bb7efc104a"): true, - common.HexToHash("0x0c62ee8b17be9487d1956c517520f0733176869513b23d67cea31642fc68e5da"): true, - common.HexToHash("0x24c53525fae27a79d069ac53f3fb062b2ff41eb0570ffa5a7e4109d5f58c8051"): true, - common.HexToHash("0x2495422ee2930307f15bbae63bbb6d93298ea85980d1a1fc7e5e29b9c7e78d4c"): true, - common.HexToHash("0xadd9cdf43cd6874338f2b88488f97e8de60c67735793a7f0e201417f928b43d6"): true, - common.HexToHash("0x6c5857b6f92a3b9750503f9534be5ee913000f93d78b8056a62903fe861b1161"): true, - common.HexToHash("0xa1abb872f83de8e4dee0b70f1bc910d0b7581630ee4e2b8b50585ce2a8938a67"): true, - common.HexToHash("0xf0e643cebbeb91b694dad12f7ebcb95c5bd2ce4aa17e0cd3059c5679a5c6ef60"): true, - common.HexToHash("0xd211ad87a799028996dfef0023c8fc32aecb443fdc57bbe8cd8dcfc76bc3a742"): true, - common.HexToHash("0xe932b77cdfdf22387369076e8c65255447b5526608cf1e07329780f083eabc61"): true, - common.HexToHash("0xb68924b7b5bdf7ac8090bc2d05b27d4034ee0501021140f355f11214e78af9f7"): true, - common.HexToHash("0x5ebf68e99690cf102e3f68275719b9287887a8a9d2b70f9b04ec96b1ee657bff"): true, - common.HexToHash("0x0ad566076d522198011ed8652963dd583ff59d60072e5d8b8d64a979c1c6c5b4"): true, - common.HexToHash("0xcfbb23d1d4e0caab215897bffe40908a49fa1fbb1df13d647ea3abe09bdb3133"): true, - common.HexToHash("0x179b027bbc2e75494b8fe6edcdcdf58a2721b0adb69e0b6557cb5e559d5eadac"): true, - common.HexToHash("0xbaeb3e8416e0141a1f6465af292a742ffe2baaa046491e7a35795b5b7d034dd0"): true, - common.HexToHash("0xdf22f2c23499315f5f116b013e7c48a0b2eb10d6c6ec291ddb2a3145ca2517b9"): true, - common.HexToHash("0xf01edf3e05ee488517a62381e095dc87b2d47ac3f84915bfa3575c978837206b"): true, - common.HexToHash("0xc5a692f7b4f8dcc1ee5f617973365ec2ec2c8bcdc7c307a52d00862c85d9add1"): true, - common.HexToHash("0x69640e8c47946a2456d7a367437a0d320bbd2c004d2e69cd1445e02b11fa3a5f"): true, - common.HexToHash("0x55bb8300052d1dc0790499ae983fa22d2a44e4d6376527344e953fa659354d8f"): true, - common.HexToHash("0x3c7c43db452c3c32014ceb1f583f1aea6ee71ad54cf001585d049df93f5f93e7"): true, - common.HexToHash("0x9730970917905e5c7392b98b75e1a66f1d7f4dff31aef66ec63530450241e959"): true, - common.HexToHash("0xf94220315e286241e7ea59112ffe087d79e33642c9890c8297fdfd7a34532887"): true, - common.HexToHash("0x5bef60a72c53d8d264d00e2145dd7321ab5b1d8608261ce7aa91ba44ee854399"): true, - common.HexToHash("0x925e73ed7a3b6c2291fa266c71913ea8d98660a465261cd9092caaa3a44ae841"): true, - common.HexToHash("0x0408eb4cd85d7b2d1ea19cbdb7dddc740d1f96619cb6cdb453c627288e513738"): true, - common.HexToHash("0x59efea46bd367fca38f6cb2cb590dc66481c1e4e37b4e33aa18faf2cbb7a1f7e"): true, - common.HexToHash("0x0ea5bd6ad380a1ab4dfd607a7e84c656b2b62bfed3fed28d262b7380342a3144"): true, - common.HexToHash("0x3a96f9b2b1c59ce0802ef7f49140a78fbc1f222d6541996c9b15ebe60ea2b854"): true, - common.HexToHash("0xe1b1c259ce0d68399c7917ccad436a15dc7f77e77bd57bd44edc37841ff67c2e"): true, - common.HexToHash("0xa160a0f5433fd145339bd2dc5fdfb118ad0a054ab24b5bf12350b5459a90e626"): true, - common.HexToHash("0x9c14245b621f7b163f23c358b9b350b09f6a874b0add5e224dcc526a5cbfe02c"): true, - common.HexToHash("0xa4265e3f24fdfac6d9fdea71c46dcde5ce2d1cf042d824f84e6570cee6e44364"): true, - common.HexToHash("0xaf6cd9ef0733ba26cb5522479e3bc2bf688485f76a078eae864bdcbe5a38c9cc"): true, - common.HexToHash("0x1dd98418416d26cc95f0eb25d0370f79f44a56b5381d98bbf9d75a0dfc81df9c"): true, - common.HexToHash("0x89ff370686fec1c7ce7e02b11d780e22928c3aaaec87acd44e0555613d954b3a"): true, - common.HexToHash("0x67c8a096a3abd9a4775703c566685f166b032352ef556d9a150f97b00a3c15a5"): true, - common.HexToHash("0x914e83dfa8a140414c4331350d192e458edea9e2c8cc63b9a1edc745b2c621ad"): true, - common.HexToHash("0x4334583b6a30f034fc7b9bb777f739c2b76821de06eeb1664f6d5e20c06a0075"): true, - common.HexToHash("0xa989045cdff00045523e22244f955b474a4a61f715dafb7fa8cfc60a98bf6a02"): true, - common.HexToHash("0x66b3e288e23642fc168612a44400ac79219850bc286ae5483204c091fd470036"): true, - common.HexToHash("0x6d82e1406cb48b94adb2be943d26e9f72b93314a1e97c1d81a89d01a9a4aac26"): true, - common.HexToHash("0x7b473973e7a2c2e90511bbb3c008178beeca569b8e677c6946075c018612a345"): true, - common.HexToHash("0xcecb731e917930fa85615dd639896213c30b8630b4735e5eeef545b5af0abea3"): true, - common.HexToHash("0x6aad6cab4f8bced4e597c3e3f0c3b2085447ee91b68f5662be455cb3670f9720"): true, - common.HexToHash("0x9656c242e32bf89ab91d411d41c2f3ca05a4b2205a2063d4dcf6c565c3a61904"): true, - common.HexToHash("0x9e2303b15df61d54cc5229e88bbf482a30d351b5f8baeb39115d65fe85b147e2"): true, - common.HexToHash("0xb42a446d0a6567f7314e638c2767dab4fe6c7b86445f4474c2479ea96c83b432"): true, - common.HexToHash("0x22077c926c6e785f8bcacc5d9fd42ee688662c0bfe640e564a641149e99190b6"): true, - common.HexToHash("0xa7c177164c62aa7fd328309799bb60d6ff3720e27fed1897ff12912b596bb731"): true, - common.HexToHash("0xbff0c643aec3a656cda6c2777473928573a67e4705155192f40b7b6687820266"): true, - common.HexToHash("0xb9ddf988be4e8f51a9c92334abccd06a8593b98fd56565b695541fdb70f277de"): true, - common.HexToHash("0x3d4dba73de57f45d6dc256f2e617bc8ae4d4219eb1e50a7ae0bde54dee1ae842"): true, - common.HexToHash("0x689f85b29e738044362cceb5d5b57687f4ce7015a87343b9b77b54c4b9452bab"): true, - common.HexToHash("0xb4fd1123ca0de71ef47945b5ce30b3a6d7a68579ae4002858c9f2d616e812a47"): true, - common.HexToHash("0x31486396c1088dc52507a17b33c08fe1fbef5e99df0d3672a4d19a183dcbe8e0"): true, - common.HexToHash("0x0416a59668673fd0d58c514992549644b77d5922ec4d629577756370751291a5"): true, - common.HexToHash("0xd0e665b6af39865b543dae614725a01c2a0b6be19897e98f154ce6eb7b86cc7b"): true, - common.HexToHash("0x75aa91fe427bd5c6559510b9246c299663f6dd7841972e00da873ce13629ce21"): true, - common.HexToHash("0x78f13bcf45cf158fa2b6c47339b369046fb61461b74a1d7cd4f6f713fb09542f"): true, - common.HexToHash("0x719b947d1ef3b97d407c0c9a43e14565ad248939e956562e2873b280258d0dae"): true, - common.HexToHash("0x578bc2a7b4b238488047e72de7c9b4ba4a4d2eff383066d470a9dbfdf2ea53d6"): true, - common.HexToHash("0xb0637be533d502f6f455db1cb8016fb5fa45d511d3fd85b69c486131361a87c9"): true, - common.HexToHash("0x0c8db999a8a2858a3c7d5bbab2cf2a942114fd1fdd738d5c1dc69bf4465e3e7e"): true, - common.HexToHash("0xbf399d8768c5186dfc181836b9600bccb9719fb69a9891f3a560f0d37d833a6c"): true, - common.HexToHash("0x47c9a9696cb8618c5e61963c34729334e0783269218735761ec2089e5bf46052"): true, - common.HexToHash("0x7cfd5e05b8def3960f8df5517b977a3f6dd41a8546bc0b3148881b16f21ca927"): true, - common.HexToHash("0x52e2abef0658f2f95c3f86c06aca1d1d0175666ec142da6a610c9c22a1b7820e"): true, - common.HexToHash("0xa46d5f53f5aae5b562309879c1af56aaafa2c3216a0f6ee41c7e85071d6beb03"): true, - common.HexToHash("0x65b51c0bbe52c8b04f9cd3151b0e24c09fd03f7b47345bf622ab7ee707ed7755"): true, - common.HexToHash("0x6e683d36ce9c085a60ac3f44369907de625510d854940cec6793b7bfc87e7c41"): true, - common.HexToHash("0x11b18b8416687c9f8d18395e0270ef7bfaa1b8d538f9b1029aa90a4f351df442"): true, - common.HexToHash("0x81fd4edc941f4975136faf6ae5530c521af334a36b99b4d2998b35fd3f411401"): true, - common.HexToHash("0xf8743628c64366b2bb35fd60caa548757cfe3c52cfe507aeec7dc28845a32f83"): true, - common.HexToHash("0xe879abc25ee0e3a1e6cc814322d8c1115f8b18e88275130158940f902d71339d"): true, - common.HexToHash("0xf821694a0fa29231e4872b5ecddb74eadd50751e54f7c774f9771c7761a3a314"): true, - common.HexToHash("0x50892b0b091f4d086eefc2416b91f3ae82114cb5584e94b944ce60d9e75662b7"): true, - common.HexToHash("0x2693895267af657359b7b4dc09f577d45fd9e6c1db3d5d62fdda9b71686065ea"): true, - common.HexToHash("0xd87728f8497aa80037f5ac0b1a4c06ffc526177fd851c658ab332884f48b35d5"): true, - common.HexToHash("0x2b9c79eb9b75ca282769247a255c9aa57c93cb5b35f796f0d4a9a3f9e9c571c9"): true, - common.HexToHash("0x323d2378e29fe4a2a6443d763aa53877894bbc5b39fc462fa417f38b7bbfb696"): true, - common.HexToHash("0x57a1e0d5ed83132e27462560fa8b113411604a46c2bda7aa3a5dc1fd30305e89"): true, - common.HexToHash("0x4cbe7fd06b117acce460972d025e16d6e7f551324db6d180af0e9a2e69532467"): true, - common.HexToHash("0xabd3193af98f31f0378c40212956aa27271a674586137b5b4fe750900d65c31f"): true, - common.HexToHash("0x0820d0d01270bb1fbddae5a46e8a31cc719b2e9be14c11dfcef9e7536058cda5"): true, - common.HexToHash("0xeaf2a9738ddcd2b22a3a59e2b2ea891ce32de8bcb7ca2b5980ef9beef05494a9"): true, - common.HexToHash("0x929baaec53f60c4d97c809d09ba720b439118ba59ea44156ec19c5fb2596710e"): true, - common.HexToHash("0x14b4133b123efe08a458f78be6afbbb30802711fb541b3370618f7723ecc55c9"): true, - common.HexToHash("0x92297da9135f73e2269b9fb7cf15f4bfb732de30f4c6a552fcfc4206acca8987"): true, - common.HexToHash("0xb09b0e03f759bca8ef0b03d369e7522a3bd051e404d1ebfb3d8798f27b41e8f9"): true, - common.HexToHash("0x5fb1a8670be3483a7c0ab76aabb10b72d181df8a3e52d84a42903c99aada3849"): true, - common.HexToHash("0xfe08e4b1688e0024841aa49f865a3003a7c7854a41844c9f1ebcff3ab6e3cf8a"): true, - common.HexToHash("0x8dc1928936ed197156c5a254e6e44f0fa407febb23eb919ee3d608a301da036b"): true, - common.HexToHash("0x1ea5646a403f485a0535fdf61e27443a86e6547abf13a4f230fa64a4e652da10"): true, - common.HexToHash("0xf53dbc21288ba29edfe9994fad9578392f8725ca636b7f7a2384d95e82caaccf"): true, - common.HexToHash("0xd40e5888a5bf41ffa421ddde06fd1dc637a44960e44e8168b5688b1e1031a8f1"): true, - common.HexToHash("0x772b8c11a76f41de9652b514484bff754656ded099ad5be57ff5251d6a50a3da"): true, - common.HexToHash("0xafc034a027dfdb9b400a4f90cbbb087e54ceb6a4d9015ce0e971db8c66fc2800"): true, - common.HexToHash("0x50274de83816652920ed038e02c3a7fd9af7eac0086fbb1a034057de8a55f87c"): true, - common.HexToHash("0xb7fe14973371ef1ccc39422260d2b13ce984aebcf05d0a3d91b07b0de9b1231f"): true, - common.HexToHash("0x2c30e258f06058cc88960bf0bc55e2733c2817a5cd0804fd686fc975e9ffc90a"): true, - common.HexToHash("0x716020fbb56fed4479207f517825a6d79fdae481c881e4bcba11dafa6dea8756"): true, - common.HexToHash("0xe455ecef267c68a53ddb2ba51bbc947e3735afae2fa0a46c22b038bbd77bcc0a"): true, - common.HexToHash("0x4a53aed7ed0ae8c774fc68d405ab995e54e9fb63a609b124215e21b245bd951a"): true, - common.HexToHash("0x2de8e7170aa292a205e2c15d8781a4075788b09932c00aa557be12897481f756"): true, - common.HexToHash("0x323da0c7e61e48a660ef4305c1c8f180ff9b6489f2492254d368643e581d1d09"): true, - common.HexToHash("0xc8249583dccb539cf4d5552586f62fa439e347c77ff01848397ea5e325ed7213"): true, - common.HexToHash("0x56f578f7662243098b0420aee1b677af9abafa23f1a529e838104e7a2528ca47"): true, - common.HexToHash("0x797fd01a4ec624c7e9aa4f9a1c11e6f5ef4269e426dd7b6a70a191e04cabe609"): true, - common.HexToHash("0xe0c9d0bba63668c58f6acb30d5b19719ca816b6cb4991a5ff411cfc45e50df42"): true, - common.HexToHash("0x66328f613ff1aa58a8d9c32d80ceeed63425103311507ec52a4964a4e7fa121c"): true, - common.HexToHash("0x59a6f2c2f05bfee04e61ac598b4ca27e14ff979cc6d1187248155fdf68d97706"): true, - common.HexToHash("0xb1069dffdb5782fdc5d550ebd36e0a59773bbaf2057c7a51d5c5b5eed6d8c790"): true, - common.HexToHash("0x804dfc47731847327726468b25391d1875b0c684287a8e1b9314e9f0b7de8f51"): true, - common.HexToHash("0x5a64e4c787de3bf1e16883d15b019f84e15f498c1416dcae24cf39188cf93348"): true, - common.HexToHash("0x126f12e36ff6431b99a44a6efe7c85640975b6f7dee00f6ba3067c5c665f3578"): true, - common.HexToHash("0xeb318236b1bc2a9dbbaf5047fb2f024ee8712342f20d7ac113480e23911e4667"): true, - common.HexToHash("0x9cb4bbbca341a0971e159c491f9909623076472051cde30844d70c9f24f6f4b0"): true, - common.HexToHash("0xa7796a5af689e5a8e3fbfd416065918330cf6a2035fff5f2c502bd27e9480789"): true, - common.HexToHash("0x2b3cb763c797736d4e822d0a57e455d730d32b1d7ba2d281df02587067052568"): true, - common.HexToHash("0x675e022d2591e6436e4012b7675462d570812e282055e91bdbea7668f9f32165"): true, - common.HexToHash("0xc7b6a9d0041d06ead7165d42306531579fca5f8dccde5a868fae12e48a32954e"): true, - common.HexToHash("0x5995f2fbebe2d5931650de13ef428d6edd38aafe5e6c34e8ab79b82471d0b950"): true, - common.HexToHash("0x3d654d9eb7e54084b026064b461796c47b4a20327c81a066d4639f81acd2aa84"): true, - common.HexToHash("0xce321537a3a9d1a26cbc4a367c040807b536fb64610aa31e6581e34bff32d81e"): true, - common.HexToHash("0x01ce383cb28613dc65464caf5c0f698d9589de86573ed7fe39abc6268c2b9590"): true, - common.HexToHash("0x6112b438d8f950cf2176586491abc4808823fd98438e27f753edc917570093c0"): true, - common.HexToHash("0x073779fd44a3a85c8f2aa9894709a9f1174bd73e6e546821056899b9435f2d1a"): true, - common.HexToHash("0x39bd8f183ee4b80369d4bcd56e3b2c2bac7e8ebd878a91316c34e41ffdee4bd8"): true, - common.HexToHash("0xc8ecc21f69b6e4c749040d3511d3b252e93f9fd01aa88915324965ead7132860"): true, - common.HexToHash("0xdf56dc52e9508e78435073033dc3657e5f5e3981d9edd48ac736adbf3c222998"): true, - common.HexToHash("0xfa3312148c80c1fe408f8b7d37459dd222b4c726aa173b8f80f2792de73b0a58"): true, - common.HexToHash("0xa8e6bee8f9db2ae22faeadb899ea43d1dd0e5fda66ef71c375122586512e9d0c"): true, - common.HexToHash("0x942c0645bfb110392c2d55c5241eca6dc96736d238255cd20fa6b874eed8b01f"): true, - common.HexToHash("0xcdef84a3643e06a4ad858f1ce6ef69f21fc5d6e08f2d98c091ba759c3db60968"): true, - common.HexToHash("0x60cff7bb549044b962a8e38dbb66765b96adf2549a857cc06069e58a6f027655"): true, - common.HexToHash("0xf8b80f44a3a1db62f4f0997ada4af04e4c7980ea2d1186facc9b502ce4a723a2"): true, - common.HexToHash("0x74a5b562172f889cfdf4521ba8f855ae7695ebb3424452b55f6979457ec1544e"): true, - common.HexToHash("0x9ee538b07312dd60fb13b47cb5d8e677ef5d3f0b54960f76445662b32961d2a2"): true, - common.HexToHash("0x57efd2ebf1b6b37636472d107c4eb0aa2821f4f215cfb2a224e5ff4619fe69ec"): true, - common.HexToHash("0x53c6d4fb43ef633826f10999f9da31a7ccd6d08c18c47e6a898ca9313ac0a1a0"): true, - common.HexToHash("0x99db3b2555f3cbbcd1862e41e6c828ff58a08c42c47d5e15f3846c9703930a0d"): true, - common.HexToHash("0x98e6125f3a2a5204a6a11a3651cf760e5a6c67fd7b24341476cc690327ffd2b1"): true, - common.HexToHash("0x5a5d2cb01bf371452c51283376980e91d64ea1ba98fc63fd63298acc48c5bbd0"): true, - common.HexToHash("0x0d355b3873ca7695e3405a615201de9cb7b5d40d5793f78399df26bf6506d229"): true, - common.HexToHash("0x58e67728773daaf4948b944fcf8757efd11b13efd86bda6d8568aace75e02230"): true, - common.HexToHash("0xf71478f0bb112d126b09f4977e4cfb2d00710aacd297263b0abffefad9420920"): true, - common.HexToHash("0xe769640f2e77095fa3abcd42031caa9094c29cd0530d7eb406f3ecdbc7c15ef5"): true, - common.HexToHash("0xa2ba4ef76c986b90529e61f47ecc409d596b0c35a29813042a612608337901a3"): true, - common.HexToHash("0x07b73802b3699f8a51ee5401bdf07bfb75f25b375b889f309bf7cd41c8d2d502"): true, - common.HexToHash("0x16e6d23d1b27320678240e8fb08820e9b86812e88afa8a71b4ff7a412817e81a"): true, - common.HexToHash("0xcc1d4a4c356123938c11cb0dd8752ff7f5856ca8016f7770e170b80aadb45487"): true, - common.HexToHash("0x30c3d9a05c7e67ea13a03e85ff42d8b17522a9154d06bd3ac293c4dffa97422e"): true, - common.HexToHash("0x6c2b2fbc2150dbde4ec55166f41c5861ad3b0c933d4f111113ddc0544f4e5af7"): true, - common.HexToHash("0x753890460d731427a93a69c0eb3df56730ecd073ab38e8e5e400fa08e096c2e3"): true, - common.HexToHash("0x50f50c8848cf867dd741ade8e011ede9589b35661c37e2f157bf9971d4d02de2"): true, - common.HexToHash("0xe6dfc38207cf94eaad68959982859c864d7b520ef8e4da70d83223d63b77cf53"): true, - common.HexToHash("0xad8e47924f2a7ce9700d66276c6ea10fdae233b62c7ccafc53007e9aa7d595ad"): true, - common.HexToHash("0x651dc397846cfe28dede9ef48323800be720c740acaf61c3f2667977fc016722"): true, - common.HexToHash("0xcb969d37556722231479c113a0c1e45433a5b8eb4aa17e7760810c97df74a17b"): true, - common.HexToHash("0x881a20293fe08ef7aabfec7464cfe20fe7f230d02bb046002d148e5d9efe6362"): true, - common.HexToHash("0x28d072f8d32b61cc4425c867a1dc7bb5b4f6212dda4e9890ff4d06c59e02be75"): true, - common.HexToHash("0x41b7286da46fb1d44368986f862822c3af986e4e0093d61946c9e428662fafe5"): true, - common.HexToHash("0xc13068a73b9c7896b8daf4829fd2a6acb25423f26e7de5e62813445dd267f7d5"): true, - common.HexToHash("0x21596588edec0186cb2ac7b28e5abf5d902551d11e98081162f7c45b1ef9dbc2"): true, - common.HexToHash("0xfff99ae49492974a371c9f1ec705e28515e1c2d7ca65072bac06e9fc8d416a0e"): true, - common.HexToHash("0x98d74d13e4fa6b77134aa232d812aac3ff6c1583035c7b2117b7b063b6c7ea17"): true, - common.HexToHash("0x09ab1ecc97a5743040bc5157e34a2076a64d4d9e6c4b0130de130ce20251b4b1"): true, - common.HexToHash("0xc0648df912a02056d694e6892c8f53bfaf92b966edaf00cb499c61fb0aa24b48"): true, - common.HexToHash("0xea092a3c0070cc93d82706be3b908d6c02f5c8677b110b8d1b249e1678cc8461"): true, - common.HexToHash("0xd4e70333fe2c26c4017486bb8cacb874be2040a656282715a492cf17758865c1"): true, - common.HexToHash("0xaa3f1fb15e34e574fa907eb6b69d92a22c9af17154a9484dc5141138bdb1858a"): true, - common.HexToHash("0x61939a311385456e0005ca90c72ae64cefffea9934cd753a5e5b7bb243e14518"): true, - common.HexToHash("0xb380774e6fc10f516359448ccd2c29ec517ad2c39abc8c044533baa6e12db4a6"): true, - common.HexToHash("0x87c7c6a19f79c8f498faa0448d92a641830b3775f57761a9eed4c3c073a421a3"): true, - common.HexToHash("0x7110d06cdbece8dd6bf431248eb28e1f8c553c81c0cf1efa31999de33e167e93"): true, - common.HexToHash("0x6591ea7bf330fb87e81291c0d33c4680caf9f501e1fc0406d1b832c00420bd7f"): true, - common.HexToHash("0x6ce5a523cfa8092f96a80a63c3bc43a20bc1cf4b3f83b63baf97e47517c8587a"): true, - common.HexToHash("0x94a04dc1007bf88f9a314d05beffb0f0ba6444a2491ff6812c8ff4dce0ea2a1e"): true, - common.HexToHash("0x743081fd0f5c4c66bb87d625d516a70ef3f5c875a632345d1c5b397fa6d9127b"): true, - common.HexToHash("0x0d1e38513c89f374052ea61f0138efc403b236728e8c139de4ef89ccb43acbe8"): true, - common.HexToHash("0xc7283c6a922c8a5f03d858655062d4e47276de63e639ea9bd110bbee04c19ee7"): true, - common.HexToHash("0x2cdce99c3bc50b913bda33670b4c11ca3563d52e3334e5c5ae20db25be1871af"): true, - common.HexToHash("0x5b48dfcd483197a7eab8d9939a22f80438aa46312aab3cf95de1f5565f9f88f3"): true, - common.HexToHash("0x9a6935174469e1d86f74cea938735c5182ca04fa41f2f52b0e7ca99e5b02bdc5"): true, - common.HexToHash("0x2ce0f06d139e14e7b878792c74f2371caefd3fd23a81d050ea81e75944d9bdd4"): true, - common.HexToHash("0x82404c724865bda698a2f0d6e4e7f3e64ae7e5b48ab4b3607d9518349cf7b9c4"): true, - common.HexToHash("0x4024d499eff72d27ff72359e0303c66333e247a3ed0c129518457b7924e7e91b"): true, - common.HexToHash("0x41ac27f98ed76aa9798228364401bf5719bdba6c85d611c614fb4b5fbc1e9018"): true, - common.HexToHash("0x0bc59be559ae3c56fd742b6229602dc71d01dad8a781260f3e6cdaa1857f54bf"): true, - common.HexToHash("0x037a2d94a6fc103bfa2f06d122980d8e2dcb55124ae7c34224c98f8146040db6"): true, - common.HexToHash("0xabc18158e261e195365a18dce450ffe91ca0696c942d942f92407b02dfae164b"): true, - common.HexToHash("0xcfc0e953f037d65795372a4527cb1d8fd9530bdae05274bcc9093fb53bb85058"): true, - common.HexToHash("0xe100c4c9537e334361c5d5b04e03b37d74bbccf98836308c83bf4af572787a6f"): true, - common.HexToHash("0x0de7914076cd70f212778bf4204630263e6e052c0f7fbbae38efc64b6a9450bb"): true, - common.HexToHash("0x91af26fc72cd6ca3facbfcac79589c9ae9a90de3d46017bdd5ebfef11def0e72"): true, - common.HexToHash("0x5a198d726deaf0a6bcc447cd2c8910aa95545177b254c23d4c3b63686f6ef3ee"): true, - common.HexToHash("0xec2fa25ca33cd4e5d363cabcc64a14d14786cfa08c932d979eed3a3ca1eb0afe"): true, - common.HexToHash("0xb34f9a93b21aa5922469b5322dda19898bb713e986e5435dfd4147dcedf61cb6"): true, - common.HexToHash("0x8cf54e92eebc99d2dc90efc8de137d5e3d28991fe8e481e6a10cd90956fd04bb"): true, - common.HexToHash("0xf425441254206e1ba337f63f1d966c159d8d9fda77284cf88e1d040de7b8cb8c"): true, - common.HexToHash("0xe3e5fa41610ba3bfdfd8e4a465081060bcb312d4b75245b23e8c07322935db69"): true, - common.HexToHash("0x8ad7173b874e268837d3a38a3c172313497275d1260c6bebe9b825266dabc6b7"): true, - common.HexToHash("0x06d6488a1e7e0d5e4b136c62b9c4b54c1eabbcd5fa9db2dbbe6fb9ef3e2158c5"): true, - common.HexToHash("0xa1d798f5e38ee380a5f426830c264abd19e2b0e62e2b807dc36f8cb1274c6d0d"): true, - common.HexToHash("0x74e4c82e25f059b859837f29748d8bb5788e27a02df4ea660acab13cfc670b3f"): true, - common.HexToHash("0xd277513f2f2c60e92c847550ee746b1a91fe6b364d9d5a9dbbb010219388efe0"): true, - common.HexToHash("0x1d778b09d153ccec450b9cc07abd891eb4af8197799ceb47c536fee4ab7a53cf"): true, - common.HexToHash("0xf99ade2081fbc037831ddf02eeb50cbe0a71017703a1d006c0d2babc2651684f"): true, - common.HexToHash("0xb270cd1d9fc0af4def5140d6f04786ad2d4351d28b671ff8ecae25c3b6df6cfc"): true, - common.HexToHash("0xa87be1bf9f88c593402912491c44f48e40eb4a47ab463eb057d0aeb993ac1abd"): true, - common.HexToHash("0x2630554f2c3671e73022e8bdeffb0db2d77d529bbb69e676484992ee37cc672d"): true, - common.HexToHash("0x4b223032ff5dbcbd90c30c553421a2313092dc55956eb36a6e622da2dc1f2796"): true, - common.HexToHash("0x22228c3ea897fcb6a56942a79450868e5dc769e3f00ad159c10d78ca04952eca"): true, - common.HexToHash("0x656398f85e7bda79434f221f49022812d51db51897046377c203c03f9a1beee1"): true, - common.HexToHash("0x37d8b6365e32536fcde04e281b668074904b02e50f6cdcab874c4c896cdeb684"): true, - common.HexToHash("0xf4aec0c30d2adb81fb191320531b5f8fe28f84bcb36c52ed2c8bf69f65cda016"): true, - common.HexToHash("0xbcf1dbc862208cb39040aaac2ea07ecfdb9df9464946af0cb7884b082cf7cfd1"): true, - common.HexToHash("0x1e2d41cc46de96de6aefc99ea6fba89e860239c59fc4bf6c7530af3e2404736f"): true, - common.HexToHash("0xd78f8d05934de8a8b9e28573f0f5776a795321bbf09732143aa3dd9fd5083d6c"): true, - common.HexToHash("0x431be637c326993f8455c6ca91698d7ff84ee7554cc5b303578a66f957be0360"): true, - common.HexToHash("0x368384050e0384c754720542c039ba553cb5076529d6d8b4f260c9aca6edc6e9"): true, - common.HexToHash("0x4d2a6d3b5e1ad7dc2482b050e828a1bc5344856abbab95428ca2a2957b6b273e"): true, - common.HexToHash("0xefac7ea19864d172fea320f270bdd99ef198ac5aea68687d2054f61d4a6641e7"): true, - common.HexToHash("0xfb5decd915a57ae32c43d50df8d839bd854bca44b1cf587ff543006d1473328c"): true, - common.HexToHash("0x838e7d464a6339897e35f6d2464f6249a729c3629d85cc630ef561d09cde3fd4"): true, - common.HexToHash("0x98025b35ce2b2faa5b8c733cac46f61715ea9af5f3b1858707c13e4842dbd908"): true, - common.HexToHash("0xd7ececef3f02deb59bc2ad012cd58c4083a5026deeada4726c6fede079b191b6"): true, - common.HexToHash("0xc909195126262fda0e7988c37bc1263dc29815e373af768dce14c21784f9daf1"): true, - common.HexToHash("0x2d15ee7131e282374270814d8f751efe341078b66e6a75a1270329979e024687"): true, - common.HexToHash("0x54b4d5221db5e8e87bbf04270a2ab2da7a0d6ee75534b9f5da64b88d7ed2b59a"): true, - common.HexToHash("0x0abb09008a95216e7c5c15058e629a8f15568fd8dfc0460a3298da6c0fdd8c3e"): true, - common.HexToHash("0x499d04587f8522d167d2d30e94bfc8fca84d58981825db2c893025969b74cefa"): true, - common.HexToHash("0x1ee1f9b10e2f6920ff2439fd9eb1353299bab11583e9e0528267c665b0550683"): true, - common.HexToHash("0x129da334518c0391e95e0ce0368045798a8031f3b31c7a8a2df114ba0fe9b54a"): true, - common.HexToHash("0x4eb731ac36614c53e08da44df12357e3ed89facf15cc2a434e3a2d341250f593"): true, - common.HexToHash("0x3a347eff17ae269a2c4443eb8e1e82aec0921c3569407d2efcb6c28db5daed5e"): true, - common.HexToHash("0x5a2554b200e4a20d3d3789c82e7908d37b27fb6bbafdf2b50ebd63ee69d7e116"): true, - common.HexToHash("0x2adfa3b0d88e966f30b4c4725e2b280f40df79fe639e7a4cd48d59556d73d1e1"): true, - common.HexToHash("0xb346ccd5d50e1097f1ff7fbc88a6ac86ff753e2ea241b6f1c9030036d649a42e"): true, - common.HexToHash("0x8c23f6bea506b8082b80f6773088b95e0d7f7e461a630f2798a949b475b5b9db"): true, - common.HexToHash("0x47e516b1fe7a552444fdb85457a5d91bfc528af2dc4ad02175638ec72a2960bb"): true, - common.HexToHash("0x18d3700ccef129ad7e0f2c145949537a4c7003b90b94c215c1ca82e7529c2b7b"): true, - common.HexToHash("0xa87fb30b0656299578080224127708ec2a555c7dda1bcc9210804ccb69daaa1e"): true, - common.HexToHash("0x7ea2f48ae3c968268f47d444c0cdbeb1eb8013d942effc6341ff5d4f8a4816f2"): true, - common.HexToHash("0x3c47ee42a1457321d73e116a781fd8ab50453cbd2760788cb18d13d1748805d5"): true, - common.HexToHash("0xdd91898d48fa01b59a04a4ff4085a56a8a26145dd1153c6abed35a628b971744"): true, - common.HexToHash("0x87efde8ee487ffc46ecd7fd2100dc4b0021fb68cd63b27f2e25810dd62a58628"): true, - common.HexToHash("0xfa3e05bba28ee292e6784636fb4256c36dfbcc1e32f5a0316e34fd8de2470c9a"): true, - common.HexToHash("0x14f8e10a4ac1ecc45f32ae89b4c4f502f362c4da80d70b16c3ee1d06dbe944a5"): true, - common.HexToHash("0x636eb165726e64480bf58773bd7a7d48aeeb96c70b4bd8bfdc0aeaaf4a5b36eb"): true, - common.HexToHash("0x1489c4b0d5b52eb7df998b6a14e64213f5ebfd91ac96b52c6833a75937113e6b"): true, - common.HexToHash("0x8e6bee03e54170e30615f752a71e7a4f229e333cd6ed8c998753e4398d7a3b52"): true, - common.HexToHash("0xcf03c3bfd866c47ed6e28748706a2f9203ffe89a2bd8b80a08c477b464e9b365"): true, - common.HexToHash("0xa790a978f75527c7abcaa4cb039d137bdb1793f3e5e02eb9993a51815c89bbd2"): true, - common.HexToHash("0xef9cc2cd9d3f89f0ab727d178a15e79c0eeb8b12a3ace762c93fdf796e2ca5e2"): true, - common.HexToHash("0xafdbc5dc6fb86641210181b761121884053fcf6d06744627a2ff82b42637f8b2"): true, - common.HexToHash("0x2771f67e2c61592c833056e578b17cb9f7c37132f2b234ef5a660ff9ebb34d57"): true, - common.HexToHash("0x5db35097e2318e906706f2aa25dff6228deaff3ba92c7aa1c34cd81d386a2ad3"): true, - common.HexToHash("0x5574b2410ac467a9600b936eedcd8b243428102ad0927b53b631acd4250df0ac"): true, - common.HexToHash("0x49126f9d1f2d0ae56dea2b679f38fc4ddc3775966a46a4b1d50a0cbc63c21c90"): true, - common.HexToHash("0x24332bd7d1dbc4276003fd339ba4ea2684d63853fde4e70f20388372d579596e"): true, - common.HexToHash("0x5eeb9e6d1a99fa9f55a61726a3a5481fddd835a256ee3891b3d755cdc826c09e"): true, - common.HexToHash("0x55a5bd94cd9e2009816adc5dd582e502eee3d78e992b18df8804dda4b9d9bf5a"): true, - common.HexToHash("0x7e4031ab4f33bdb0b175306959e8eb589af7918fb050addca1976b78c36ad1ee"): true, - common.HexToHash("0x9d67baa3ee3a0a57000723575683513930254668f84163f261e852bf1be48e58"): true, - common.HexToHash("0xbc2ff246d6eb39bcc6006d1b780a508060723253d165e008c7d43ad5fce6aad9"): true, - common.HexToHash("0x23004ca7eafa66e911fa17dafdb919c7dc77cab7e15d79748eee327da3591310"): true, - common.HexToHash("0x8c9854b1b032512ce030364c3dd69d390281cd5b0b3c334b1828875e671ec1ce"): true, - common.HexToHash("0x21b11ed6840f02b6d0473a84f2f658eb7141d256bec157e2559a3ca0159f6bb5"): true, - common.HexToHash("0x4544b07a2458649d4b539a210cc83b848d8a0d99e9913819041f57c6ee99cef9"): true, - common.HexToHash("0x67fe0a1e6e8d95643e90e15450912530d584478c7a316144a5396361d51a6338"): true, - common.HexToHash("0x86528743fb0b0c8613c31a9b491b5e6a44c7bfd8ea3ebed3457b5ab0167a5d41"): true, - common.HexToHash("0x9af7b41d49c90c1e299db9d2eb04ca5dfa643e0f8e9a85dcd81f366175fed7d3"): true, - common.HexToHash("0x0f0c2154ee7e115c14efedd93650f3e729214d780e5b5f9a9b77627bbde681d3"): true, - common.HexToHash("0x872cd21a2e102fd4837228b8b196bb5048eb07cf948504a52f35cc2267d0d311"): true, - common.HexToHash("0x9d3307f2b549eb5972072c391774411356b1799c4ea4a9b729f567f77c5731cc"): true, - common.HexToHash("0xde67ddd8f5b6565a015e2ed889f62be8b543a6f772a8046ab18473ea66f7022d"): true, - common.HexToHash("0xe3a997639743400d856374c0e38976c39545d890a332443bfaf3fb025c6aac75"): true, - common.HexToHash("0x77cbe3a63299dd9eafd45b6085d7f7b655058e40e651fe7c72fa35d0d04676ac"): true, - common.HexToHash("0x53102633d07968a1c87d925bf40d9458d9b3f5a39479e870a09577f2aa792608"): true, - common.HexToHash("0x9d73c0ca6e8106dcee3c91e228db1aaafab5d8ebdd61ecb50dac8628fb50cf97"): true, - common.HexToHash("0x9c2cb716a98748fb9bdcbe9c3816760ef02fb83408b54e278ae29b0e0f117465"): true, - common.HexToHash("0x730779cb988335cbae0b43972d4df2bab92f125c83449ba401db669fbce9520d"): true, - common.HexToHash("0xacfb0290831cac7329d6a5a357b076431f9b0b6093ba270441bc25c4122a77d9"): true, - common.HexToHash("0x3bf1f6eed08dad95fd9a176852148816ae93372b41235d21715fb4a003227b33"): true, - common.HexToHash("0xdb062bdf1b8a3b87864e861ec75af1d149eecb8a710e7b64dc86db675700ec89"): true, - common.HexToHash("0xb8c0b33a874348f3c1635d1666f2f5ca09b1c94e3a7fa4f6f4255765457bfbdc"): true, - common.HexToHash("0x6c5b0f4ed35f9874bab89d00141f43187eed606a847f1c5ce1b9d39789e7e213"): true, - common.HexToHash("0xca5aa6cc3cb25f26c062676c9d23a76e0ab1eeb80a511b32873d8162a7139aab"): true, - common.HexToHash("0x1d390c3d4ed75d13fb61659d376b84249f5162b5cae821092c2156f19f204777"): true, - common.HexToHash("0xf45d6a9a39d9668ea7cd83f12fc4b46b40d6b3a60f91239bf7d65a96b0da2b85"): true, - common.HexToHash("0x2d0a017f35ac1593fb86505b27d662c111f0cb1e5dd0a9de881fa7f80f6fc230"): true, - common.HexToHash("0xb1620be1a63742a1affe7a2ff6dc1705a16c4865db45382a35c8ec5eac71e4ee"): true, - common.HexToHash("0xfda14fc35b3538eb46469fd305ca3c006f7a61f5d7d96db78d405ac0d1408d16"): true, - common.HexToHash("0x30a611cdecc60757c7514489fac707dc7e3065939c84ece30e1f29ddcc5f3d08"): true, - common.HexToHash("0xea36c3ce3b8eff5ac5dbf1bdaaff25d5a7f89bf4f73968c1b9751799279e9d34"): true, - common.HexToHash("0x77d83571a4e27e7a6160e5f49dab52c0949f4e5b1490e1fc192d4de195dae0c9"): true, - common.HexToHash("0xa792e49e43ee23fce2faf6b375c482ecce6d3fc63ed90b136b78c813d6bd74fd"): true, - common.HexToHash("0x9905004f8285ad3e352270cb272b63b3739d8d6daf8f46c7a7a5a1166f4db7e0"): true, - common.HexToHash("0xea5e5a74ac931f58de0f424a26cf6b530041729e06f375cee6347c34e50dced0"): true, - common.HexToHash("0xb9f67393d22606b35678f09e9ad9a718e9e20151bfa0b8b0a7b0b059865f4b5c"): true, - common.HexToHash("0x11da9bad7a13de3778b6c20ecf6e2ca62fde90e29f249efde7a9300d33020f61"): true, - common.HexToHash("0x97fb2ff84add02d5973d0c84bf3fc31c55fe5a6cf073fbe13d6ed596909f4f04"): true, - common.HexToHash("0x8f129e8a9b72b58fbdbc8e4a1695e42b26aa733f0a6f23cedbac9b5e2a24f096"): true, - common.HexToHash("0xea7c580a0d6295e906456475574acd031f14a2c77fcaa3edfc7374fa6e8cea91"): true, - common.HexToHash("0x47c469deae283fedcfbb6827d7cbf874ef24c01e4e7e31a7422ec65b9f1a21ee"): true, - common.HexToHash("0x1ab702839c3646eb71ffa6b5fbcb8972d6c73e6fadd5faa656289e74d15b9ddf"): true, - common.HexToHash("0x21fb27550cbead03d807438728ff5dae2e3dbd2256bce8f9fd324dc50dbc15ff"): true, - common.HexToHash("0x0026d04ff1b5b1d5b050bfb7e027ad83bdddbec08a31d7e2319102d85ef2657c"): true, - common.HexToHash("0xa528514d0daa22c469a7717f911020ffd609ccad5b3c45b7ac3ef362e468f84b"): true, - common.HexToHash("0x6f97b4f68d6ffdd9008a7d979f7a36536e42960ba4cfacb90c30eb45c9429ae5"): true, - common.HexToHash("0x889d28c5b7bffd1aa9b83eeb7ce84a8098923f176f4e15089253f81a2dbbb4b8"): true, - common.HexToHash("0xc22c0f78c0667e84589aa28170c262c340ac00fe708806054ac8c08baf9be3b5"): true, - common.HexToHash("0x9837dc4abb2d5bdf467e35d2e59ce0d4a53312900addf4384f5c122b8c85e314"): true, - common.HexToHash("0x1b7351163dbcfd2a0dd6844eb1c21606164f7c5cca74dde7f57236d23bec1704"): true, - common.HexToHash("0xda07e620a44ffa32dec4b1a7ad8b9c2dff8c2bb64a125de7c4637b3480d36810"): true, - common.HexToHash("0xe92209298f451d0902ae7b3841aaea14b3b559735a8ccd4bf706af61a714333a"): true, - common.HexToHash("0x3f5b935a1e536b2be5027494b04145bc0d7645f42e4884234b5823c95450368d"): true, - common.HexToHash("0xa50ff8879ce29ea6979688626956d77aff8cf2a811478c2c693fc69e0f164a55"): true, - common.HexToHash("0xe44c0197ad878a0dadb88aa673b929d37666518edec85b3b19a15acdfb669c70"): true, - common.HexToHash("0x7bf9c5ec30168079940c7220721535493ef7abeac6f8426be150412db244cdbb"): true, - common.HexToHash("0xbeaede97f340df1928799d999b0e9f757ec2762ba1a4c27cebf4176c9d9677ec"): true, - common.HexToHash("0x576b785d3cf581d534a0507ef70b62d39446d1ed5f99bec1f10117cb4cfffe2a"): true, - common.HexToHash("0x91c1e81f750057578f8468fc53a436cc3c69a81db50d504f9e9f4aad9d7afe4d"): true, - common.HexToHash("0xb667501f328cc15d940f1572dd164301e300baa66c6c4adcca38238fb19201d5"): true, - common.HexToHash("0x5cc9525fff6416b0d3f4ba5fdf2edd8288db631b95faeda808281a4f23ad2f2b"): true, - common.HexToHash("0xd2a1ff6e351a7a65a921aa98ef62519930c458f81a9f9206d9f49377e23a0d84"): true, - common.HexToHash("0x16e3eeac6cc46a4b706426019762ddfdb2ffc9181cec40f8c93ed300f31ab70c"): true, - common.HexToHash("0xe1c93e8b2b808a81d613e2aaf4b2a081687e88884e22f867466f021e0500b0c3"): true, - common.HexToHash("0xfa55f9e9ca131e82c5829ab467093e0b742797d52539eddc4372d203d524737d"): true, - common.HexToHash("0xfe50cd1c1f220dbab4fa84105a75b71dd7e88ccdac4b79d324e4a5470919ca19"): true, - common.HexToHash("0x8fc33db8c4866de31b62fba8962399a9690fb743fe246e23b93175950be23157"): true, - common.HexToHash("0x202a5e62fd0343d68c752f80b21922234f13727d5d461be7f7dcda27edd8fc9c"): true, - common.HexToHash("0x72964c9737bb39a8fa2d677cf2d2368b70858224b48530c14440f874909ab23c"): true, - common.HexToHash("0x925c4fa54932818da9564fc28a06529e94560b9ac15c34931b95d5fee4352271"): true, - common.HexToHash("0x8762865681f20c68b9fb0d1ef23d89491f357d77f77fbffd7eaef186e9e1a4bd"): true, - common.HexToHash("0x78e8508626a40773ec58bfb55e2ac5fb2e66bf2a4cf15d537fa6ad30a6dae32d"): true, - common.HexToHash("0x6eeb7f3607c60433c5c99d98c574cf8f77b1fd93f647f0c08a7a6a47f110961c"): true, - common.HexToHash("0xff07ca95b7a48f3879f3155ba2b8956661f5001117630110a6921c08f8212f19"): true, - common.HexToHash("0x529d84c8a1dc1df589e5a15f0ab0e55dd100ca1f88498ada25ae171701a81ab9"): true, - common.HexToHash("0x0cc52154825329e2b1e325f94d19dcd1b4947c8d67b31d0dbebf3fcd2c1c3996"): true, - common.HexToHash("0xb1c5194f5f71285571f604eea45ad09dcf5ecf9c34761500f99500a2c63c4f6d"): true, - common.HexToHash("0x91c6d99a3e214a97cfada5e26b55c1dc1f9fc49ed8d5eb4e1cc875ecfc23a621"): true, - common.HexToHash("0x1f6409ee0a2341cdfe8c8b69546d2f2710b677879f1f23168c0532c2805f33a4"): true, - common.HexToHash("0xea4562e358d832783f7d1151950fc7abdbfa9da891d5bb1c686a4cc27d7a386a"): true, - common.HexToHash("0x50e7b90d03c30917111b891729346957759c8a204ca2bee367498da80439eb46"): true, - common.HexToHash("0xb61aa4e2f82e2889c0a2867a69aaae4199462d160e12a5ccc5b571d08128e2e3"): true, - common.HexToHash("0xbf65d54877721b8829830fd3eb7c6d09895421a8f3b9e7567782a30949691924"): true, - common.HexToHash("0x4456d6169fcdd29a829fa0ff23650a968ae18d619c8a73bc6d2fd29b0eb0ea4c"): true, - common.HexToHash("0xd64e7ad91c48c9ca0f53b22cce4bbca604ce612399d0e7f3b3c115d3808a1707"): true, - common.HexToHash("0x67bd6ff3abdbde4aad2a427ca0f17a8660b36a7a1c0cd078815c59c12b1bda9c"): true, - common.HexToHash("0x0d2ddde17873de37fd1da5de447f654151b84c451c610a15cf5d076f504031c9"): true, - common.HexToHash("0xca20c9d934f205bafd37347eb387cfd5266c3a4757ca6d2384b8f37d43016eb9"): true, - common.HexToHash("0x53ec2ca7697271e230ff0e6adec0948d567b7053f349dc2359b48f935689c2ed"): true, - common.HexToHash("0x125c2448221d4ef1159d4a5539d6f5f6ef218174521bc0bfdd8b5f82d9eb0b00"): true, - common.HexToHash("0x544f9575f26b0e830a43c99456bf892a0e33d5f00e26835d515e2edc3b88aa7d"): true, - common.HexToHash("0x974d6d563c5a0cd732e8743998cba92ccfbe03374828a453489d4076f46bab03"): true, - common.HexToHash("0xb5aa3bccd13998ff0dd14b7f6504fc1b6753816688995af466f2e0256e0db331"): true, - common.HexToHash("0x66d8671a4c5aa8ca6d2a005555abb1479b2aef0720fbc64a2040bcb501ac7fbf"): true, - common.HexToHash("0x21a1baa77fa7d017441826047f6bf02adac35f0f9678b55f701b9d075453e1e5"): true, - common.HexToHash("0x32f09b96b94ff707e21c9e7452e02f7f3d33a740601c822da64b8f249a0f1382"): true, - common.HexToHash("0x1fe789d8f0e05fc84af1207321558c91b7be6d31556a178b4a9eb7d94bca97cb"): true, - common.HexToHash("0x59f5284d2ddaf5d7078baabfce0f06c0c9ac1518d3231e3b9fa9dbae1b4f56ec"): true, - common.HexToHash("0xa84ed52f97d392086315475ea289b9224bb414c6f51971e89ea988a5f756e7e5"): true, - common.HexToHash("0xa9412a334a0e5ef54da9459cbe5e374f90205f4cc48656fd256b96170106dc42"): true, - common.HexToHash("0xea0621dfc90853f030ab29e4358470605f426d33b03c187ae6326a8a217f27ab"): true, - common.HexToHash("0x9328bcb1b5ddb26fb0fd1bb6e668db8642968298097b787a28c6ec311522b187"): true, - common.HexToHash("0x62f7ac4d29400b9ca5e46027ac9c963836274c3c62ba057f1bc0ce4bda8b9142"): true, - common.HexToHash("0xc4cc3b5d2e2249457b5677f6105b791431d075e426d9df5666334ed648864107"): true, - common.HexToHash("0x4952b206e3da6d12622517c3a121a523996941e43a1d7803d35841b8661d304b"): true, - common.HexToHash("0xcaf6f1bc0e8e0291241906a088dff3a1e6bd6bb0b96b1db2d71d7e5234f6d933"): true, - common.HexToHash("0xcc7122b9e533c6abc8501826ee71dee7f7501c5780a8163d1d7e13fb20879956"): true, - common.HexToHash("0xeea25f84ef5d10b2740d7698af4c72447617f7a4504e907fdd8ae0baa2c0a2fa"): true, - common.HexToHash("0xcbc3a1b31b6c6ce1b7eb08e322aafb32c78adb602fc711476816b730f1eb59b8"): true, - common.HexToHash("0x99727ed23435a7e3ee977132a79c235d6ffdcf79868b70951b1fc321dd1f1797"): true, - common.HexToHash("0x70759a5150a5ce3d63d1102f4b43629bf062cbd5ac30c60d2729ab1cb52d2cb1"): true, - common.HexToHash("0x2426b4229248acba13455bf2c940af0112a1091ee4ae4c87599037d2bb5b62af"): true, - common.HexToHash("0x687ad3ef03286ec8f9f86cb4ecf11abf185ce69e67d8be4e12648d83b5b0f1c3"): true, - common.HexToHash("0xa25c93fe2ee59c757cef0a7192bee208042569e588196ff023d9dd854e926e09"): true, - common.HexToHash("0xbab90dc28378b1dc5cc1ed0678a5e1799cd9b721e7d409ef1fd4ce88a81794b7"): true, - common.HexToHash("0xadafb1512fb386151edc281f98285388763a70318437fcab2a8dab274f325dc4"): true, - common.HexToHash("0x02e9160fab0d73a7d7df024e640c3785d0dcf72621f9d3560165a365ee01b2f6"): true, - common.HexToHash("0xf5b4a48a4af99fc887d559c0c0cc090c8c43a5417cd975d25de95e04b5f0d696"): true, - common.HexToHash("0x3d51c814a5be2afbb7675c3d6955db1b0a6645d5fabe0355b15d601b4db0cbfc"): true, - common.HexToHash("0xab73cffe4d4f226de31f2b761eb8f47d66513f84a72a811b51601d8501b052cf"): true, - common.HexToHash("0x5f8e271e6d340a6c08c851e2e9bc106613792aea4ec8c1f3788542c4f3d1144e"): true, - common.HexToHash("0x2fc2ccd4fc2f1cf88658397a869f501224ed93945864677334aae39dcd09b26e"): true, - common.HexToHash("0x43d3fa83dfb3e0b95a3378f88ba6910b65bfa8d20db852aba8d4cd167f35a18d"): true, - common.HexToHash("0x8cb8e0accd6371684c41d05a1f40991e8bb4682e9e1ce044c4d7b6993b7baf95"): true, - common.HexToHash("0x44a22ed50c6ce8e535e1e0e5dc3aa2b2f1820c685a124885d6b80b70607e8ea9"): true, - common.HexToHash("0x49ee17f8bf2bf9a70c79ac12574b8a0f14738fa57aa58b86b08df490af7a8c4d"): true, - common.HexToHash("0x741740b656ea5bf385fad93cac9d6ba02b6eb2292ac829c23f7438c4f8c6cc11"): true, - common.HexToHash("0xb1065d8016aca632fd7265ddbbfd82b95293808552a26ae703b2bcf236663665"): true, - common.HexToHash("0x46a1f68f8da872f1b9167866ff93e70461e3edee792a9b52362ec83335811aa6"): true, - common.HexToHash("0x32705ab6b251cd0ec32adc5d1a8c4a85759389ddb7ea78f5e96125d631b943a1"): true, - common.HexToHash("0xebc488762f0998dab2b686c9ac35bc32aa1f69951e5689946c19c3414b594987"): true, - common.HexToHash("0x6b53ef923a483ffdfd188eaaba4b2c79d7d6a2f35b5c999b992b8afa76c86cd6"): true, - common.HexToHash("0x399f8d2ba94c5fdc3ca800b87c11c96002fc4a9dd569c5c5eaa5daacb8a30499"): true, - common.HexToHash("0x94316fe1639d5b123d9759fa633ad6a01514a25371deb903f0d681c1bc657444"): true, - common.HexToHash("0x421e7def7302b60bc3f4a8c53ea422dcd5aca1a7ed013069fe9e787570318723"): true, - common.HexToHash("0xdabd3917c6b67bb28e434726a2c70df9f117b478f8a7cc3038ad8c3cda4568c3"): true, - common.HexToHash("0xa3aed060b325f5045eb23d0c5989c572e06bf042df163f8f0b10e77fb547c99a"): true, - common.HexToHash("0xd6ab484bfd0e61181561f452a4b3bad2f016a1d65d05c385a6b8ce4bd221467b"): true, - common.HexToHash("0x18b4662bda5540bc1fec7bb6097127af7e32b260d55f29ece3f12680517a9199"): true, - common.HexToHash("0xce09b0579b99af8b1ef7443c062c07ff7c4f6fb8114fc5eaa6b3bbb2d1cf6391"): true, - common.HexToHash("0x4b747027f9b63bfd0add785264d9372bc9760e407ccce97c51c81a894af1cd8e"): true, - common.HexToHash("0xd5a0f9534ae92f1ab0cec700b071b95661e4702e852828b2817d76bef18bee9b"): true, - common.HexToHash("0x09e54d0ec064ace14c7d62ccb9199104265494c59616a95ba17f165490ea2a60"): true, - common.HexToHash("0xf8533e3c0e90d797ebaed0bdb2071f51c507b386c3f504c1c2e8f166dfc6680f"): true, - common.HexToHash("0xf6744ab6657c5aeac277406da0142f72d3a8b1aff293dac81a423960fb66e6e9"): true, - common.HexToHash("0xbe5978fdc94c165f9717c2ba0bf5c898a6dfd25d7819fe11bfb596b72c83e9ec"): true, - common.HexToHash("0xb98d4562f11f5b62fffb1178b6e9a00ac9477c2b994673c1ae8a7e2a2bf686fb"): true, - common.HexToHash("0x86e275bef5d7c0079399d9f62594ad30401355d4c6d220a8e3e5c62bfabd5f9f"): true, - common.HexToHash("0x3c47b6517dcd7975c3382942fbd7e39c9506f8223c0111b115916a6b071e50fe"): true, - common.HexToHash("0x2ab7a9c6fe09dd5a4ea9c5d279f98933568a8cbc7ba0962f5556f5f0a0b5feac"): true, - common.HexToHash("0x3460a8df03dee771f5ac0f7b3e0ad05cf78a6fa43263e72998d139f1909367cd"): true, - common.HexToHash("0x8757f7f1715d6842f396b9382db02f5ef853b483373f2e81e4021463169b088a"): true, - common.HexToHash("0x1358c96c08bd798603dba608b9fbd461182062d58cc4457194a61cdd61b1b672"): true, - common.HexToHash("0x70d888679c56c1f418354f3a12c656032026443355d642b21e4a2510b1ca9a4b"): true, - common.HexToHash("0x957499ecb00bb90013f0f0e48b0a090135d191f2eb2c7359eeefb0c826b54137"): true, - common.HexToHash("0x2212993aa3be217c2063fdd847d48c9de22e8d6be1f1b103d8d1e0dcf547c598"): true, - common.HexToHash("0x0ef767b5857a6d0aabdcefe925a07de4b6732f402c12d220837562a998d93506"): true, - common.HexToHash("0xb9f0a1a75e41dd193e84c0538645e97b00ec32948945606881786d31337f8266"): true, - common.HexToHash("0x929f616f2a7e725cc18a401ba3ad0df7586c1035773bc3da92b86d8b93ed7041"): true, - common.HexToHash("0x2218b2df6bbb10198388539d55e00f611be1454676a34a754598246cfc3156e2"): true, - common.HexToHash("0x149af9d53fd907e1533249b1100e3df6362ee801c0ea3a98a744ab885516a290"): true, - common.HexToHash("0x92ec0d079f7fde09423f4243d122cef4c41107c4dea97cf73b8ab2a7be061690"): true, - common.HexToHash("0xd8ca8e0d539ed2547ebe7b562333032d3fd765c4d0b5ca52a49c0232a0a4e999"): true, - common.HexToHash("0x20e40f174faef1babc276acd60096e02646f6600bdd1ef16fdd65f20a2970bf5"): true, - common.HexToHash("0xde5cf87e999e9dfb8c163d516148ff4c121871b2c775f4082d47e2d07d0190df"): true, - common.HexToHash("0xaf518d3aae4a55f7015255a61cf52f07d0965c04b549f2065619fade0f2f0ac0"): true, - common.HexToHash("0x6cf3d83b3315e390f2c57d61153148f8b733ea7c4cb30390f40b5e1baf106e90"): true, - common.HexToHash("0x167a7f3c8959daabc97de4ae1e8e10fd51acdeb46726d3c4ca495cd5ea1de68c"): true, - common.HexToHash("0x384310b8c23047724a62c871789fc409c41b2375d3f954b6a5d7479ce197a367"): true, - common.HexToHash("0xb7847b77664be800fda52a04a58126ab70efe8c6e5f0d6da3848e987840cd1b0"): true, - common.HexToHash("0xa7c5f1c7451949db60973c4b665a4f8f2d614c572bd2f7700169c675b36f284a"): true, - common.HexToHash("0xc417b1adbbf3bf8bbe5a9e07e4a402ae413ca02fe13c8209bbf2703fafd49206"): true, - common.HexToHash("0x1cd5700f7b8d7eeb5885e39afb9a558c4a90b6315e9ec0d1cb3e0d49b7c22816"): true, - common.HexToHash("0xe101457bfcab8da2b6659da560d6c064719019943e8b33f523ef2b48c02dce3a"): true, - common.HexToHash("0x06652e0f1cae19148e997034d0a1efb58c6e2f3cbde1be5259af51a2a0d8bdfb"): true, - common.HexToHash("0xaa8cf49251a503af0b15553f1f220aef8bfd007b064d7c20fe3bec1e210955a0"): true, - common.HexToHash("0x33b479ae8834495bf08dedf3749fb0fd6608f6bbdce139c69094a277b652b0ab"): true, - common.HexToHash("0x2bfac542e9b9fbdce1806adec945e37339564287bc49fe2e4771991fff8f11bf"): true, - common.HexToHash("0x693591e674543f2ff6a4edb03705383c7f111fda75c223154e6e1b757c67851b"): true, - common.HexToHash("0x294722e16d94f3abb746ef776699c656f0dedf34452dbf9dfe5d838d33df5600"): true, - common.HexToHash("0x17fd910aa322f00838b163f8cecc1808d3df406b11569cca7d83f720fd6635bc"): true, - common.HexToHash("0x680695999be4472de06e2c4d53e4f242bdb508a112d3008d6798cea68e6fee3d"): true, - common.HexToHash("0xdfefaf210609290cfc30cb7d9f2d1540443384f5ef8ee561e017bb7dfb147b94"): true, - common.HexToHash("0x78909329b599366d4b1d4a8c4f63508491e4430eade131a770363f78d79277ab"): true, - common.HexToHash("0xcc394c3279d25e0b6ddda5f733e84f5617337b69d59903e5ca819712da944225"): true, - common.HexToHash("0xbabb0453426647e7f0a557958559079471732f1cd0c34f01e5b1a1d5eb5b826f"): true, - common.HexToHash("0x9c02a599fa73b0c6554cb902f644c2e809f03bb2442d4102d718627e13fe58d6"): true, - common.HexToHash("0xd3c283e130df65d386a865cce695473f25e2fff42805e00f0f9f6f7f332bf800"): true, - common.HexToHash("0xffb7f2ebbc85415b3e53b3291375932bffd9a4893223bc9cb5027a10e6da0ed9"): true, - common.HexToHash("0x3ccbc96583cae682761d31ee4046e887f17b07c9dca37a2f8cd72f450d76b1a3"): true, - common.HexToHash("0x3422f7f4ad8c20d555005f0d76fd45dc6b882e493eff988622a04ad931dbfbda"): true, - common.HexToHash("0xbe1126bbc12f8257154f953f5ce77c8a59d2b07f736bcf9bcea5c1abc495b1c8"): true, - common.HexToHash("0x9917c646915e4f18d6c09dc3a825ff98d0826a165f8a2ebb9edd5eceec9dc7da"): true, - common.HexToHash("0x45bd79d212beaf95b390bc9a8cef5c078a126b0195e59d56749cf88165b508da"): true, - common.HexToHash("0xeb043420e88b9f0f25cc6eea4c7ca56d241c7fe763bd4521548f62350f750f2e"): true, - common.HexToHash("0xee75861010f7d78b06fcd765171be76a34d96433b67e81b615c9c454dccd77b2"): true, - common.HexToHash("0xc1400e9f20fc2084504de96603b7b03053f704e702c2e92202bacfd1eba098da"): true, - common.HexToHash("0xd20f88dbdaf20bc629da08a1edbb96caea7f8044b8fb4f4f1051049938617642"): true, - common.HexToHash("0xe1557874f1669c9e607c2fcb062615dbd5046e075d4069e1645d75f5fdd353b3"): true, - common.HexToHash("0xda0b9a2135e71a9851f22dc3bba9b9a1e28f46b46c7d70a0c6c75ea8a0f440ad"): true, - common.HexToHash("0xed82cad522780888ee3b227f7467209397330427741f1d1e01fb2fda5e4f84ea"): true, - common.HexToHash("0x15ce699ce456125914c257ee2191fefa82c22af0cbf6ad4ab87b6f1274ce15e1"): true, - common.HexToHash("0x4fa69efd1fe8cfbec6f73d6445204e8994576593b174a0283fd6c03e114157d4"): true, - common.HexToHash("0x5da748e143c3189504aa89e6c8d9e1c8ce0c85e39ce871d7c6b553a1af48dedb"): true, - common.HexToHash("0x96ce1d6c743e29f9cb73624cf7a0561f27ecb1ef6399ce12044ebc9a09e2db21"): true, - common.HexToHash("0x2cab3e6bc51fea5daa4732e63add548f22dd97979d28f6067a924a24bc5029de"): true, - common.HexToHash("0x7386c58587c9fc09edd81f5c90024b2dd7babfb52a848ad01ec489695044dace"): true, - common.HexToHash("0xc3a1cfe80af7da5441e5126e8d18e709c28aae825b6e291b7eb68d8cff473693"): true, - common.HexToHash("0x1af14025a2fb7547821b88169a7609d953579bcfa378d9264832e6d3e2b78219"): true, - common.HexToHash("0x26fd559aca183c70f76cd59c5fd2d137e846347b63bf12abcf66cedcc5c4f051"): true, - common.HexToHash("0x2407e0b257aa481a8c5744143d3ab74e69d767a809fd5d28efe31e0d5234d9b8"): true, - common.HexToHash("0xd2a80c8ce099337bf390abf3a925c4c76bdce8c6e5efcbcb8874070f64b42d75"): true, - common.HexToHash("0x5cb53fc763df72668f838fd01d38770348da5461b4093ebbfc70fc39538626bc"): true, - common.HexToHash("0x7a6e0cc8ca5ee9f482f97b89d96b6dedfe040c017b9a1aeda8576f004c186d99"): true, - common.HexToHash("0x0baca4b4e53cb45381e1db46995226e63268616180a460e9cf09c31261509d92"): true, - common.HexToHash("0xfb7a652bc83f1fa98e2e3c323d45ef1c510f4a890806dbd2d3582c28e06f6863"): true, - common.HexToHash("0xb1a874b01dbcff905a679d657bf080cd8af78a25cb55d961836a97febcee0278"): true, - common.HexToHash("0xebecbf7142c766cbc7433e42fbe08a58f30bc3d6ca1ccc34d4f1733dee1f2c4a"): true, - common.HexToHash("0x24f187eecd01d248683cbefe1503432b03622b47944bc8d24a7209be19462a57"): true, - common.HexToHash("0x408f93e793d666e74edd3a20f846d64a7324954ea9d10197da0c7532be8961ef"): true, - common.HexToHash("0xf6798fd85ad2b91d97683727ab1375fc57accc157bc49736ea7812ad7b30acf4"): true, - common.HexToHash("0x0290d7ad1f07de29ad3e0986bd33bc8a15b06150145419e3838343de2cf35956"): true, - common.HexToHash("0x9928a33ca4ddbafbff4e582221b41fac8ba3c684ad19ef2c587904d016519fbc"): true, - common.HexToHash("0x92dc8ea4afdb731adde2f389af2b1f0218c68256f4e64fc7375ddb2b474ddc98"): true, - common.HexToHash("0xd1a57fedf082149c5de55f8d0b1a3e2870a0db2f078af55a05d00a945df320eb"): true, - common.HexToHash("0xff7ae6c1cf3a51adfaa954dd7d47375307bc27f55816907cea002c9bf741cba7"): true, - common.HexToHash("0x70d8b0fa33b152f337475ae09ec98701f569dc05e9143865f329c9079f09b9f1"): true, - common.HexToHash("0x800df45db86cdf6a3da55f6e4edfe9b8de208d6c318ac1851fcdb2dd79163103"): true, - common.HexToHash("0xf267db8e38e8439c5a3e330e0e81e3652831a5c3989c451ab3bf07529b590677"): true, - common.HexToHash("0x9208c7a8b9522097d93f4bed6e1f19c660ec4525ad49a792efe0e12361303aee"): true, - common.HexToHash("0xbc8b7aba78ff8b0b97c0f7d79d690995c2334b99a79b6f1963603f132637f008"): true, - common.HexToHash("0x924c6b922dc0dc0df3ce43db552ab1fa618f24b49569f82e6e0856e98c2acf1a"): true, - common.HexToHash("0x323251e5bf0d566d706cb393f831dd66792740636b9f71f432a846ffaf54337c"): true, - common.HexToHash("0x45e7e0c0bc83d0e558e6b0fe46259c62d52e024ecb680ab006f848353fa14260"): true, - common.HexToHash("0xae0364d2eb4eadb8fdcba1c322dec6515965c47ce97836febdad6a565bc89d1d"): true, - common.HexToHash("0x5700851ca0a7e82ed1a68054edd8379f46a7b87f2e11515a1f51284954067864"): true, - common.HexToHash("0xe9a7e15845348b0cc892728a8c937f1e40e62473617f6191a7a7a08ad2e3f878"): true, - common.HexToHash("0xbe9a71e8fb5e1376637a29792623c35bdee05aa5f765174b4f310962b33adcdd"): true, - common.HexToHash("0xc6279ac2c7b60bddca184b2d02584021c064bbdceb7acd83d0485e0cb66964b8"): true, - common.HexToHash("0x2f9e5dc81749e79f7c1d3cd5f2401f62bf08f008a112f28056f228425ee891c0"): true, - common.HexToHash("0x7305b20f68049cefa74a07b880e4014afe8478c9a2aeda3c860cb4a0ae08edf2"): true, - common.HexToHash("0x9fb6beecb0c04126df1b4f33dfd668a9e196a9b5f6187f3229fed04d80421cd3"): true, - common.HexToHash("0xa17faee2ae5bdb733ba4930af53439bc2d05cbc9efa370ade01a15074df45377"): true, - common.HexToHash("0x8f3e0b9bd45a1cefb197dd782a692b5b76755e0d50d3f2928028daf9525b4730"): true, - common.HexToHash("0x1badff38b17570f88008414e946f5d17528999d48c3abd3977afa9c9ddc312d0"): true, - common.HexToHash("0x1a4698d4ecf65e3f0ed8c587135ab0ff22162dd481952aed3770272e2e8780f7"): true, - common.HexToHash("0x7a75ed3781b886b1af10aa94c1702320560c5e95f673b483272632664265689e"): true, - common.HexToHash("0xe2fd9af6ed063a38a8f93ecca36bb96698b132801d00f4183fa2271e03d9088d"): true, - common.HexToHash("0x5fe5aebc465b8db27c946701bce91d6eda0a273e9031b19d8fe2394a1c894271"): true, - common.HexToHash("0xc91a44b776461ba656a7c6e618adadd29592f5a2e46ad13406fb1888c799a8ef"): true, - common.HexToHash("0xc3bcaa37edb0c5a64f4dd5fe1a0585c0c45acd46728bf1f7f8c54edb1a9a2e50"): true, - common.HexToHash("0xfa82adbcb2d680c0790939d2132af44f2f28fab795ff69146b54dabaeb378d30"): true, - common.HexToHash("0xada4aa168dd02ec050c8a2e5cca0198db918f46f6a2e8e3d4d57f43386830a27"): true, - common.HexToHash("0x0907a7816fd1d11dab193fa3dd5d7c0888790a7b3a0e8f0a5d6a7ac8ab249e6a"): true, - common.HexToHash("0xf422204816e4202120ddac4a09786d7047fd05ffddf96078f70056476d414f4d"): true, - common.HexToHash("0x120f0244cce8400611b10d5a2cb59f113734e91c9bfa01a0d418611474f15ac6"): true, - common.HexToHash("0x98d3d7ceb55651671404c435e0d2aa428d659a39e8a87ec8d8972bea706e1fb8"): true, - common.HexToHash("0x9be9cdf7b6e21ecdb1f5c85087435a88a3b618a8625bf1ca53499ee23de8cc93"): true, - common.HexToHash("0xa24a3dda929992de5a20b5d29cb275b8f1be5e2f1e0a85634a79d2bb352222af"): true, - common.HexToHash("0x835b10698925d0a5473b7c18600c79d245c4a1e3f28136decb2ab88ed892108c"): true, - common.HexToHash("0xe5182278231081c6ac7c95c1b154e667a41f5af7453d735a11cb37cb01d286f6"): true, - common.HexToHash("0x79a364542f9d9713ef6475dc10105d30d35d488ee2d71677802b60f45970c134"): true, - common.HexToHash("0x5331b9316b0b3f22da68e6f0c4343a62febd74143b2401a1182b91252b1c818c"): true, - common.HexToHash("0xf4ce13d5aa186cfb736a485f430e99f5954d5246ec81231654a8760485054055"): true, - common.HexToHash("0x9a798c8125dc5494f1a73f8957396934edb883ead19d1eae3a55b2e7b0df6660"): true, - common.HexToHash("0xdb45414e2f0f2ee1d7b8089c74e9aadbf10401dd91ff50574ba2dd6f52ffd507"): true, - common.HexToHash("0x57f57efef0e12f84de34d3f33ea9115e0993075beee367234a649b73bf9d115d"): true, - common.HexToHash("0x6b856af5068e15d54b0a65c6610e760ea872f20c9dc64b97e9d7ed2306b0dced"): true, - common.HexToHash("0x1c3e6571e5e2e85cf3ba50c971f5540ebe4cba18d4be1bd5393be4a57cc43d31"): true, - common.HexToHash("0x2383445031a652fb9de7f656256674d1650f0d76ea937883af6131614e1fa2ec"): true, - common.HexToHash("0x3e228255fc888b7c1b5f5d2c882a66de92d1bd77e12617fc5a7256f973f851ce"): true, - common.HexToHash("0xc13780ce7041295c856a1a01ec8a9b86c362ae1d929e537df5cd19ed859c0961"): true, - common.HexToHash("0x5bd1e49fa7755597b6aab43a86f3a6a2fa4c7597f7ed1c405b93f4436797976c"): true, - common.HexToHash("0x8e8530329df9da3c19b613be1883e5c6db7444db3d38f3b5a174507492c2a74f"): true, - common.HexToHash("0x5a61af54d84eaae46babc23b1d5cc4b4489635923652ca60da5b99d41ef8a515"): true, - common.HexToHash("0x1de72e6955e60567d48b200258f4c52e522bbc6abfe801af5cb68e6c8ecd0c4c"): true, - common.HexToHash("0xd76f499d3aaca60109415b7d0614942136ed1eb4a34ebe315c97f774e352b162"): true, - common.HexToHash("0xf6d7c06c6b93251375aacc7cb6522776ac3f13719e34fdf1e6a52de89eb498d7"): true, - common.HexToHash("0x77931cd6eca3e7cae94683cd8560fcc3f8046fe0a81cbea79ad62019836c80d6"): true, - common.HexToHash("0x571e8946823f2b7de0746f0e9de46a9745c00a8099946d800318f9ca5a97ec36"): true, - common.HexToHash("0x6a60eae2cce628c568c963f1df54520755b2c02765eb4d305ed88918b1554858"): true, - common.HexToHash("0xbf221a16be6d3aabedfa9cd970ac86f62be2f33827400c272a54ceb49fe21dc0"): true, - common.HexToHash("0x509105fcbebd89603c1d70bcb35df157f7843d8f83ebaccc6ae4015f0c6728d6"): true, - common.HexToHash("0x9473dfe95c29a5e8150e4c7bad32a9b6520f0345eb2c0858bf2bc6c578554a86"): true, - common.HexToHash("0x7a2c700c9b0fb019d8c5b086b950ee22d656f75e9544624c102b53ae9f536b29"): true, - common.HexToHash("0xce158ada44c2fafe3badc5c433e2ff837627217e9eb8c5fe48c2559398c618a7"): true, - common.HexToHash("0x67877b9d0625d30aa515307e76e42f9f26014cf3ccc08dd5520eecc7d3f7a428"): true, - common.HexToHash("0x3f0a40bae5ac14d8c1fb9e37a223557fae9bf8d94908daa829cfd7077a676fd5"): true, - common.HexToHash("0x410ec8d74f35371e826db5d0477ea9cd24487604462c7dc59bc87529806ef5b8"): true, - common.HexToHash("0x3c580003a457cd3bfdb1fc42b23fa85ae2ecc4cfd4b91644f742faa267e349b6"): true, - common.HexToHash("0xb95da8cb652216d7520c325a20d5ee2b9a805a91b4b7a7ee634d5588efe9cd4d"): true, - common.HexToHash("0xe8cf50ca87d93d534fa485d93355c98fb2afa99c4578813005f0e611d8619ee2"): true, - common.HexToHash("0x28ec01f3c938e20f1707f01228fc2fe143bac2886bb9e395bae92c3d240fef40"): true, - common.HexToHash("0xa93b2c554d011da6b1045dfc38e2778ebed45994e705cc0d407499e04e1303f3"): true, - common.HexToHash("0x8a94d3f11710595a9d316d1dad616ee192dd243a79e5390811b4199a6e53e565"): true, - common.HexToHash("0xf2ea318c9e7361358f8688d6a3109029aa9a05729fb5c44a6196623506182fc0"): true, - common.HexToHash("0x1d1cae40814a931f1220d337851d43667f3b9a9368a89e5fa7618f84241c48b8"): true, - common.HexToHash("0x2c8162448f880d76ff7a877bb1357c4cd3309db7bd5e371c4115a9775de382ab"): true, - common.HexToHash("0x2f6bf59dbde590fa0d2a59ab38aa84e073a6570cf8818fbfac93567e56b1a7e8"): true, - common.HexToHash("0x32f9aaa240cccb4de64d9d00dc5d2460381504747fd5e578e7e4486b71376701"): true, - common.HexToHash("0xf8ad6bbc81c79ee3124264f27d01287ee6988d17ba12cc6ca3b5cf7c43ae72df"): true, - common.HexToHash("0xe65bc05fea1203f586e4932ebf762d7b56fa36b8a4441fd822e82d9941218e19"): true, - common.HexToHash("0xdc87e1e24aad5c7807e3ef4a11e5e55454d92e14e60681bb58a011d0552e97b8"): true, - common.HexToHash("0xe76354a54e5110cf0bab1d2e05f3fff04b550680c0fd1ccc89308b8c871d7b1f"): true, - common.HexToHash("0xa133a9a66c11879887684789d52fa835ab43d195ff5db198d902ec4b88d207cc"): true, - common.HexToHash("0x4a21863bc4f1b1b5d5098e9d11aca412c124bf79d33a06b9593175685869efd7"): true, - common.HexToHash("0x3f547181c1c328cebd4387c2c95e4717116875eb1bce4d54804af8587def59d2"): true, - common.HexToHash("0x09408a524ab6bdfa7de033a8325ddd799bef48be3f37731440457256c8ce3985"): true, - common.HexToHash("0x038dca969c5d76947bea40ee7b32abff8ad87737662e8f36cc73947aad989e12"): true, - common.HexToHash("0x77d726ffd6531463eeaec52681e8fe84fbeab6a115e610412ba93f528cf43f62"): true, - common.HexToHash("0x8343508aca497a8eb2d7a236ea24d8e2a6ca80f536413d0c1745abd17c465954"): true, - common.HexToHash("0xa1258e9696247cec2849ebe5c6c18396000cc4720aef2970966ec947e3736528"): true, - common.HexToHash("0x4fa9bd4ba3a39c0b560b9fff692e7ef4b03c8d388e0f1096b65a611b4e267566"): true, - common.HexToHash("0xb5c691c8f676a7ccef8dc3e3eaa9fe65299b6b227b1b1e7815c4988888e3b939"): true, - common.HexToHash("0xf1179e8c04b8402f99acb2b0d63678f759e90155881a55364ddca4cd6ac72fc4"): true, - common.HexToHash("0xb7e765449247d764633db1286c7bfc1af9a2f49f8ddf63a52c9aa3196a28225d"): true, - common.HexToHash("0x7fa2140a5002d9cd1687a605c41d8d85ccd6942c509271bdae96ef0b33d3d571"): true, - common.HexToHash("0xfef1796abc0a1cfe7b5868b5dfc78e3a023df277e1978f0b7678f8e4870d0be3"): true, - common.HexToHash("0x6b0160a7825c884d60bbc048d4d479ad229086c862678250d28653dcad4507a2"): true, - common.HexToHash("0x520f43bcf1715a0a40f118d3fc493795abc4c8146eb26ca7bc36ff439dbd029a"): true, - common.HexToHash("0x7b652b1b76a953e9ca30f1ae617905bd8eb2363973981bd24800243ec6c9cf2a"): true, - common.HexToHash("0x147b493834798c086d5922ade15f9df9b8cb86aa3ab8c92edd59e9b9c49b765c"): true, - common.HexToHash("0x3ddb03868963564b6433cec490c853ea95efdcea6da2d938373e7199b682ef4a"): true, - common.HexToHash("0x270f76c69681083335e61d800f3ce0e193b155b8a7749bbb45337221c8333a01"): true, - common.HexToHash("0xbc5b3e8891994629c53494e0a0d7c4f6286afee9ac5e1748c7424cc9a89feba7"): true, - common.HexToHash("0x9f569d6b3e721391a14cb30a5632f5eca6cb51e444791839a025d42ba486722f"): true, - common.HexToHash("0x2344764b48fd63a0caa9807e4db5c65f9d84855ff817c3c5488bee3914a11b39"): true, - common.HexToHash("0x34b4bba29823eeea24a4a162a44bdde86ff10fce492d4d6a8b9239e2564b10c0"): true, - common.HexToHash("0xb9816e268a1114088ecfe01bc4e5ead47d7a2c5432cb03b9ff1eaf80e92d6e69"): true, - common.HexToHash("0xfb29c5ca5df49a6d537c2918e156edc730b98dc08386442a074933811ccfcc0a"): true, - common.HexToHash("0x541932a76f607227a6692f039133207a24b6aa8e2cae4559977fe13768340e1e"): true, - common.HexToHash("0xc8b7665d748ee4fd873b1c89f435592497670485d000a1f407244c458379c1b0"): true, - common.HexToHash("0x4c00349836ea9c1e6387367761bc333f94919a9a8ed27caeb481d18a01068a39"): true, - common.HexToHash("0x3f86bb9372674ccc5cf13669f9ad1165bdb8c77fb34085a4dc276b7cbf527c46"): true, - common.HexToHash("0x26b9f2f747af656e729e170816848a9eab803a30cdbba0fd1f18b62628120912"): true, - common.HexToHash("0x4a7782213641ac422002ac8924e249dd03b54ab022af7b49a1c1031f421bfe8b"): true, - common.HexToHash("0x6404a9f92e51a41c41c3aa6084298e08e1b448f099af26fab558dc9ee0de5af0"): true, - common.HexToHash("0xedea1189d696997e61a9795f06feb507c8b8c798e3926fc64bd6ff212540dfc0"): true, - common.HexToHash("0x70febddc6e956e2faabff09f08f23405c9efbe958e31bb7864533bbb918c4eb4"): true, - common.HexToHash("0x5d28aacb1d65757ffab86bbfb1ef91b43d16f2314126d9bbabdfd7f3a63ee2e5"): true, - common.HexToHash("0x1606fcdc09079630162ee909dc479f8ebd7e4719b82fcab24f53f36c25cd1de0"): true, - common.HexToHash("0x1d9e656bd52325aa474190baeaecdd920d59f9aafdb8b676e0cfd304ba7b878a"): true, - common.HexToHash("0x53bc5eda5953275d869bf298aa32aaa9a778fd84672bfcedf30ced2544ad2ddc"): true, - common.HexToHash("0x6c7fd6ea3b3233f883ba012150ab0bef693b61317e07f2375006c568021d25da"): true, - common.HexToHash("0xd733471db32590968f79dfa49970b314a327b872b1ded9a1a8c8726e676d58ab"): true, - common.HexToHash("0xf9edcf7a0448e9dd510b99ac7a56a503898661273eb76b549dc63d378fe0ee00"): true, - common.HexToHash("0xf63798bc22dbb0788116f1db3b7e31c0ef3fe8995bfd2c3b139eb7be367a8f07"): true, - common.HexToHash("0x9204125cf631349668954526753e2056a536991a9d4a99358e77e55ff515b447"): true, - common.HexToHash("0xbf3daf382a5585b9596bcd0d7663fe76e3f5a843fbe7cecf1c6dcb50823c954b"): true, - common.HexToHash("0x0628adfbbc85c1212b77b4af07223b8af297f5f2ae54601c3e51c7df6bac32ed"): true, - common.HexToHash("0x4ac27a375754f7ed283cf2628190e5dec5efebf6f9f85d9aaa3e9ac529b469e2"): true, - common.HexToHash("0x9b9a1d220b37b1521d8a3942b4a52c44dc5a4758ec4a605ecd7c0679d4bee516"): true, - common.HexToHash("0x846cf4fa72f3e3a71faf7e5a514088641da766426318a53f24abd8609f5383d5"): true, - common.HexToHash("0x66ce5839548a816abe06823830a23b44ab30765462356f6ee34e1d47d56e15ac"): true, - common.HexToHash("0xf46838cda004155001da6fb87eb85eb6710c326617983139dd379a809c496c8e"): true, - common.HexToHash("0x3e0b72131cf81a9d076b8dff68e89061dd653ba360a372120833b7da9b5f87c7"): true, - common.HexToHash("0x081b03158f0f52a22b28c4f7dad9fb6d9e7aa211a6ff91b710f3cc23666ca98c"): true, - common.HexToHash("0x6a0521ca3765cf112bada89960e108b87c40ddb3fff413f97d946fe97239b3f3"): true, - common.HexToHash("0x53692668c56afcca4e8794261854225adb3a00f1c994518bf92a8db0e80b83e6"): true, - common.HexToHash("0x63ff400f70e2a61d9ebd719ca8b184cfad923135dfd2b0a61bcd01e037c59a53"): true, - common.HexToHash("0x3da55fc2c13789563bf95f9b599cdea2cad4ea5ce46ab5071c0bfeae51e19044"): true, - common.HexToHash("0xe016f35ee5f8ac5e7215da68d59ff1abe959a7f23ebddef3a00485067c065585"): true, - common.HexToHash("0x5515dbdd43589a73cd326a1c80856512e0a23d6bac7aef06af6c259c18bd0fb7"): true, - common.HexToHash("0x283d937d8cb8623b5513691cef02776695963d97278310f8c22bd36341b490fe"): true, - common.HexToHash("0x16e2a69dec6c2a5ff2197611169f76c09162b48d297767b0b8683aaaa8af4d19"): true, - common.HexToHash("0x8de4b68f1506b2131a09dac4e2846ef0b31a58b8e02c9ace613431483814bb80"): true, - common.HexToHash("0x10d5d897520477af195c36dbed120771ffa557eb260bf2b0f2a81c2151f15d87"): true, - common.HexToHash("0xdddc1ecda1dd5aca9d0ed825811474e214e3893710cb40212500d5c797fde191"): true, - common.HexToHash("0x08bbea0c7781be6df59026ab3b97734f3bb9b39e63e2bd4ebc09ac122c1bc3fc"): true, - common.HexToHash("0xc7aa8fdb42c3e5fa9dff0bcad2cbe946e669b9ca8379ff6262fc8bccdd18cf70"): true, - common.HexToHash("0xef9ddcdd97d1d82893e2aaa7736722bcf8cd63232f1cef8a223594da21a888f9"): true, - common.HexToHash("0x824ec7ff5d45a1a0e3d407807a0dd458387075f7a5184896d704cbd83cf1846c"): true, - common.HexToHash("0x32e1ec8604cac27a8ebc15ac8d1c4b7cc572ca5032521de4e13d044372967937"): true, - common.HexToHash("0xbbf2fc5a667524327268835226a79d3ce85ee53d9341023ac1a5a0929fd60a53"): true, - common.HexToHash("0x7a8b935d77ee0988143be9e150ad64e5666dfafaa602818b4956d2327924e86e"): true, - common.HexToHash("0xd5c2cd6e4f7f9763da7c3e2aec3c2ae71369298e7fb6a83dfa98f32056c389f9"): true, - common.HexToHash("0x86a7ccef11cd34b880e6e92c9ebac7ca1e98a56a46372f1621308846a6ea4476"): true, - common.HexToHash("0xa5705d5db032bc5e8d995b65afe8a610e39c8f8a3900fc256e087b58c3bbc18d"): true, - common.HexToHash("0xcb8f1669c7b23371aef3a479197bdf73255d73b8258645b0c117fe9875bc25e3"): true, - common.HexToHash("0x8d36a45740d745e2bfd8655aa46685771a2e0eca03c2547b28ad01356fa22a75"): true, - common.HexToHash("0x2fb3a7d32c323c267bf1150aa1d0292efc67c272441953e6187d394dca891887"): true, - common.HexToHash("0x967e3ad8cb692e04a1e02a692c371478a53e4598af89af3dead3fcd3a6b0092d"): true, - common.HexToHash("0xdae6da10345a3db5c558e9c47661ef25b922fd7e5dde73873e78fd583b8a1698"): true, - common.HexToHash("0x50ce24a8200d0df1869b842a2ad140b526ad59d983188c7a9d01b3db6120b164"): true, - common.HexToHash("0x75f834d289eb1588e8d88c46374ab757a825efcacbb98cdb7b035383ce90039e"): true, - common.HexToHash("0xbc0a4445118fd3c908b711e66f95b63b355b7aa52995ce9565d2f58de1fa7d32"): true, - common.HexToHash("0x334a666ebc2774f3a66b3b958a99805472039cd298624aeb3d67a7d0cbe3520b"): true, - common.HexToHash("0x2fba637f662df9387552d65b052d607f8be8ef323dea1d0f9ac0f776f3471c72"): true, - common.HexToHash("0x10cd86bf177c917e00d6b5105a2befd52518ef7992978b87397626e45c1a0a21"): true, - common.HexToHash("0x11fdc3582f094512953e9f25a27fbd5efa00b2ce4d8bbbecaa5a40f79d032e61"): true, - common.HexToHash("0xd03f615468ca10e1fadc05cc91b04a4f6c9ae462d24b8188bb9b2dbcfbea51d3"): true, - common.HexToHash("0x546d72a11937bdbe1d7ed5c0331e671d92c5572b38d605935f26f42a6276ac9c"): true, - common.HexToHash("0x9de14a965eb7d3e33dbef82f8982e38544a30f30deb88c30da29761b62f422a3"): true, - common.HexToHash("0x33ec984c05fccbfb8f70aa225d8a333c35a8c89d242f3a3143669ec9489b73f8"): true, - common.HexToHash("0xfdcbc1a26b008ef366beecaa32d62d3e147500c9f77e5f132917dc39d2d82d17"): true, - common.HexToHash("0x7284a683b9ff457053aa902ed1a79e618e570662acade8c162409b3879ce692c"): true, - common.HexToHash("0x1599a8a0f847690f9fb58d742c19fcffb381321d4d1333ae295cfd200200150a"): true, - common.HexToHash("0x69be8ac8d9436c77514e76b3b93c3ba5334ba76a16d3210b4abf96420d5c3b41"): true, - common.HexToHash("0x67a8218ad67e2f0df72620100c6ce86f48ddb055cb8f253d927dfab0a290a611"): true, - common.HexToHash("0x774dd0f5dbaf4c2aeb35b899a715ab599dc87150aa65392b3e9d4d690be6637a"): true, - common.HexToHash("0x732a46c1b4d3ee01aa49cedd83a154e1a022d73a410f0704525df19ce0a65430"): true, - common.HexToHash("0x0ca1f82f0ec041081f73d96c5e026242cbf117f14f12bec97661d87c5c791100"): true, - common.HexToHash("0x6c4b2f2878be32653fae84fd8953419ec46106231b384688e9afd97a8dbda69e"): true, - common.HexToHash("0x817305544aeb51babbf9a484908d097f13e9163559e83fa75d5d78c2c8f20265"): true, - common.HexToHash("0x683fdcaa4e37fc7fe2bd16c487f71e88bf7e2849014ee1f9bd7729cb081a732b"): true, - common.HexToHash("0xea31afec73e00c8f781e4ce0cf840b634879debca9e2adaa67950e6d219ca9bc"): true, - common.HexToHash("0x7b2623a83bb8d328fbe345eb0232cc21c68fcaa561873b1dc3cf20de59483f8e"): true, - common.HexToHash("0x58d0bc5daccfea0715132d8459041cf9ee01aca4d718b567315645043d8d0422"): true, - common.HexToHash("0x8d76db673e48fa27ad714b342b6e6d30628819affac4bfa632ae42b6e175ce82"): true, - common.HexToHash("0x579811ff7adde3136f571a75f70eaa0d1d8d7b425cd6b0826ce70a31610b76b0"): true, - common.HexToHash("0xaae3e650ef23b3c0ba5bad973e3c39a60add4fd73841d417e1d80dac44bc239e"): true, - common.HexToHash("0x834d034a2f584e3006e739db0c632c9bbe77433b2b45c5e41ec40874ce9db3b7"): true, - common.HexToHash("0x66ca74e0b0b5f8cbae712fa3ed4e52105ce88688f3100c3c539906d328919e1f"): true, - common.HexToHash("0xd7fbf46fb23970dd3b04386b93fc1d0c1645fdc8b30c67344a86816a49438079"): true, - common.HexToHash("0xffd083aa95f907bab28594fb850edd81c41a9ba7cd27d2fab16e69bb33d8312d"): true, - common.HexToHash("0xaed049046200c2f715dcf884a6022f3d1904990bbb689481846426f1b2611239"): true, - common.HexToHash("0xfb858ac8ebbebbcb39631d3af0b863d9f7f2a26b6cd211c2301e7e20ce817dbe"): true, - common.HexToHash("0x258960ede3e17d69becf186db938467836f3e756ab07b5e03231ed07f9002432"): true, - common.HexToHash("0x5d9abe83ba8479308533271219784e2f98af9ec88fab9845be8a8f37e8b640c0"): true, - common.HexToHash("0xc6121576a64aa93009d3426b6584d6b6a0a5e235ed4702e9b974756f110ac227"): true, - common.HexToHash("0xf746a8074ec7938b033d98df3438ea4ef817d288ab1b8997704f252e64bedecd"): true, - common.HexToHash("0xeae2522bfc0dedb30942e2ce02dd8a7aaf730f4f9c83257a538deb5b60905db1"): true, - common.HexToHash("0xf7a1b48e6b81622062c394e4eec0404c84449e6ea7099947e9949e80173f44d4"): true, - common.HexToHash("0xd404d82906356fdfc1ba261a428b7036eb9dd4a0e87b11dbe579645743c5fb4b"): true, - common.HexToHash("0xa2287f1acc61c742d27c7fbe2da77a28127391c202bb4a298b9a32c0e3ec08f2"): true, - common.HexToHash("0xbc529d2f57ae41cc61cb538c6726b74492c6262610f41f788bf0e56369efe875"): true, - common.HexToHash("0x1417f0840df6c9c8bb7d8981a56ea349613a0bf1b475c55b4dece69e9bf99a77"): true, - common.HexToHash("0x2582fe1610ddca5856ccf6f11eca11342beafafb3fea6d5c051d38a577413bc3"): true, - common.HexToHash("0x90e66a0b0538084d69cf9e3a2142a92f155449672f3b27a2ffd1bf98c17292fa"): true, - common.HexToHash("0x2cc11f2dc1fb7a7940f2d7af237c81b34a689c3655a483ac8a796009cfb7ee88"): true, - common.HexToHash("0xd68d406b26ca5f649b9f6157bdb5d6004c76ec7929f9372a83e08091a8fa6f98"): true, - common.HexToHash("0x524ddbb6c0c21723bb38afe37aedc5ef57227b85becbcc88ebd7017a747883fe"): true, - common.HexToHash("0x736ac59abad6b81a453e28a46f9b3741983895fbea09fc88ab59920d71ee295a"): true, - common.HexToHash("0x318a7474da5879823bda79d75d6e1b985ffdd438b6de47b387b3643268dcd58a"): true, - common.HexToHash("0x566c58449e6c2943206fc649d62d917d2c3ebdacae2861e31f0aaabc0e0cd99b"): true, - common.HexToHash("0x893dbbe60364705e9d510acbf2e6742f53e4e6c45661b9bb1a7c6a2f35a01d30"): true, - common.HexToHash("0xf39255913f3008eb769115ea35ee2df28fd2110491943e0e1810cb9c8634f221"): true, - common.HexToHash("0xf565a1fe10ffbc5afac51c2c17c201b0a70dd777653a042c70336e3fe9577f89"): true, - common.HexToHash("0x56b92c8b788266505f07b4dd927afaa2c6ebd5f36584c10e809fcfd6e354b31b"): true, - common.HexToHash("0x00617b3f9417c8c26ac011a8d27599d5af16293457540f390d418e8cb3ed5f40"): true, - common.HexToHash("0xa70eb3b104d813a2a53abaaa386ab2d9e977dc49d939f4cb00c14cc87e5a983c"): true, - common.HexToHash("0x66932f3b7092ef958f4f1a50f87d456444cec1c8f6c060f4b4cb033146e8dba9"): true, - common.HexToHash("0x5e85ae3a4f3d4700c163f4abe2e1294ba350915d2a3379039ea5842e370279c1"): true, - common.HexToHash("0x494203b63ec21f4d5df9a111ff158baf4ca91d57bbea12eebdb7e898b125da82"): true, - common.HexToHash("0x3f77ce15feacbdd3d00ce2bcc1929fb4d3302ee0f14392a78d6a6d72babf8831"): true, - common.HexToHash("0x745709379ef80a7ccba5850b48196e3f9b94b415b890a3854812653629eb413c"): true, - common.HexToHash("0x350835896d625732d6ba3c8ff83582527bbe5c6997ba1a4e9d87793f086908f4"): true, - common.HexToHash("0x6c499af6abd643bd4b56d2f18c82b44344b58d22b91861d20db750676a5c54eb"): true, - common.HexToHash("0x8a1ee019bc4db355190acdcd1269cd8b27748f181b6f1b891ca8e3a6b51bb7a0"): true, - common.HexToHash("0x79cb42a45d4ed174fdbb0b9cf105be1cf322619e751c1b01d393a8627abaf519"): true, - common.HexToHash("0x378a486e415627c8d05d8e2ac2dc32b654c73aa6f331040118e47e3d418c66a8"): true, - common.HexToHash("0xebc0365c4a85aac5e794a9f5ae32a5fe96dfe9a6dfe3fe581859accaaa865c3d"): true, - common.HexToHash("0x90eb1377e0a0e6cbec092df9d3e5c8cf4fe1b55cf0106d0890b65e4e484de147"): true, - common.HexToHash("0x6361b9c313d0e3ce87efe8b6763dc84453278bf091741e88f3ada2637c9cb754"): true, - common.HexToHash("0x190014c0e0381a49c011da7535cd2bd4845e333a3c41ae34a4ab8d7e1a9e9be8"): true, - common.HexToHash("0x8016af4bbde2693e5b30d27ff32dce59dc3bcf1b977b8249310eba83c3cfeb44"): true, - common.HexToHash("0x9a6e42878f9e805194fd2f4c997e9a360e1bc389182ba4f75aa8422c24fcf8a2"): true, - common.HexToHash("0x87c2b839ee8e5263dc8cf1bc074fcc4d822d170f1aa36d6e1bbab2a521e0466a"): true, - common.HexToHash("0x1e2a88affb213e1cd58356c87d2a8f09d4834f3b8f9b9aeca8288f94aebb8517"): true, - common.HexToHash("0x60c651d228a646086602f51c8e538b41e46841114e10f3e23d1f985f8c671542"): true, - common.HexToHash("0x038298187e6c22231901b54393cbcae7fab840ef1e896b0b2196dbedb259a9bc"): true, - common.HexToHash("0x6a5247c4d12065a9a3631b952d2d028f8991122e9453ed098142ce44e0254029"): true, - common.HexToHash("0x2dbea1bb0f52d64ce71624762bd7c1481057394d2ccda800f0df84bc7f359cd4"): true, - common.HexToHash("0x68db2d9294a3e1827888c646786ff046ba8b17fe2c6ff968c6a3188ddfcd1772"): true, - common.HexToHash("0xa1009195f5dd3541d89bdf399bc8dcea16fb267ea0cef3c1e20ba58c5209a636"): true, - common.HexToHash("0xbded9e89de51ac7885ac0c0075f0898d9c0925a6ff3a26477d050ebcd89117bc"): true, - common.HexToHash("0xad8e3f3d027c3b77d8382380e349e73a110a08cf1b8935f1044f55b86e80a1fd"): true, - common.HexToHash("0x812feff4c30238d662ed13410cc7ed85acddeecdefac168809234c52fcd8beb9"): true, - common.HexToHash("0xceee99ee42f533e1e11fbbb9d8dc0662deeb8de35288f9c92893f86d59456b2c"): true, - common.HexToHash("0xb439f142f6e9eccd15a083e68589248e58b97d844d24241f5226cef0d73539a4"): true, - common.HexToHash("0xfa9150a99ce1e81e2862209fe3e1e3ec017840d02a493f6291473f13b486e5b5"): true, - common.HexToHash("0x4662f37eb06885be7e5539ca25e7f10e51fd4b895f80536d69330557aa54d6e6"): true, - common.HexToHash("0x302e4a2ad2595f3894b7f0b7ae84723d7a3b46c36592ee8111e334562ff45243"): true, - common.HexToHash("0xda49ffa166be0215813310ab5419943e6ac59f672073ae6e3fd4651e580e6a0f"): true, - common.HexToHash("0x5c7ed8d04255e29d790fbc0c789198b6638467012e85794630ffec7ed0b1ce06"): true, - common.HexToHash("0xbc2a57ba2074c13b6b3e1c96cf555d7bfac21bb6c1edc3d18c3d9da71ca56a15"): true, - common.HexToHash("0x51e67c970d82f4e308b0134308a548024417a99e2f57dc35613981c3b76b0966"): true, - common.HexToHash("0xe11c0ac75a6c404fa77eb9cf8169e3d3f66d314c5127ae4b8f76c3f819fd3907"): true, - common.HexToHash("0xa1d8df10fdcc46ae7e698ac8c88083fb0aa682a92162b001ede9664eef4622ed"): true, - common.HexToHash("0xb97091f2ff9eada509bd40fd8fa09bb5fadf1ce3501ed052ba3d260426f347e6"): true, - common.HexToHash("0xa55e8a6209d8ac518c4d4c141a504e0c7e7f9ee54b30786d8a6fb706d17aea64"): true, - common.HexToHash("0x6fe6cff22678c593bf8d802732335768dd6a8cca2ce2c7e7c5e7fda5cd6f9772"): true, - common.HexToHash("0x6e91593a240b81861d3ef92e92db651cd79a84e63bbfef8c4dfd6411eaafd5ec"): true, - common.HexToHash("0x9606cfd6956b7c02e7572e5a6618e9c84772a956d51b2e7b16a8e3360f8a514d"): true, - common.HexToHash("0x5f0c1029490a71cf280e621228456650963fcba55e5e51458366bc8bb3ce38b1"): true, - common.HexToHash("0x1677973dd7eb890cec3af018e7f6e029bb8c437ef83166a56217cae048ce4901"): true, - common.HexToHash("0xfd180db3add7355e5861fd103e0c7cfb2af45833ac6d307633b886136eb7f3de"): true, - common.HexToHash("0xa7c920c73249df89e9931dc5160339259cea5032dfbbb12d87b39a544c97a151"): true, - common.HexToHash("0x3926986ff4efd6ab9aef8ee8e0157d2b271561b57c95e16f0926bd5a117c9e73"): true, - common.HexToHash("0x71dda1a573ea743a8bef8456b27b25132bf74e09e67442f57d12a5bc759e5fa4"): true, - common.HexToHash("0x1b34a4c3b08a141ab40eb9841c6223dd8a3feb8405fd33fbb146018b02b0f5fa"): true, - common.HexToHash("0x33f1b59d9edddbd24dd9fe39ebea7df68d7d6f722d32827bef5fcac4fe84acca"): true, - common.HexToHash("0x0583b939fe81e5ea3041ebe0bc78d628b020ddc3ca06be24d59e3ce1fb06aeb8"): true, - common.HexToHash("0x918b916415cb257914bc8aca7b8aaa27625bb6035467f051825b83ad6e3ea049"): true, - common.HexToHash("0x45c339376fc2a02d95fd755bdb112fc07fd4817bdeeafc95520501809c092996"): true, - common.HexToHash("0x1382338adeee56a7be98479c3b5d8d81af8b23f2462f564c56c5dbc9df4acaf0"): true, - common.HexToHash("0xab0f3cb375fe0a337aba6ae925a2e4dd8d1ba71451979cda9fb97ffeba92fe44"): true, - common.HexToHash("0xed00bcf13c78912c1c32ba18b22aff526f24af8da0aad44e9a44ce4d28b6f53d"): true, - common.HexToHash("0xfe6e606765b6d22f54c7200fa458a7d20943e3b6b7c426a5bc210463a2ecf5cb"): true, - common.HexToHash("0xb6c99afb3cc25756877e27ee4b4b79d1d798a36ec25b5e642151050e26581611"): true, - common.HexToHash("0xe559776a2ef71acc2e9fe2c0ea12273f3a89527e702d5f57351df61c5de194b1"): true, - common.HexToHash("0xe48d80e2c28733b35b65cf16054dfbbb78c34174f02742f1447bea823dc6f31c"): true, - common.HexToHash("0xdc73bac538c8a2b2bc4f06768abb683ea19c74df1a39e8dd750d53d490c5b440"): true, - common.HexToHash("0xf81eaee541a19dd5aba88d9a0d8d76a8f0e9ee0afe09a350f28bc53c2f7163b3"): true, - common.HexToHash("0x6c902ad6e0603e67ba83f459011852ec5e45bb37d048729a43ce72c2e70f1d49"): true, - common.HexToHash("0xfb95885bcffc3798abcdbb235d34b157058f50c792a4ae6dfbfc396ca2458320"): true, - common.HexToHash("0x3645eedb686fa13d73dbdd3e953dc4126e8d4ee151d7f8ca30c5c89a3f9a9187"): true, - common.HexToHash("0x5a3e6e62c21dfa39e6ee7b472390bad505d6bce46833e4ad698e41cadcc83c74"): true, - common.HexToHash("0x3c55ed19c731833199db3b5eeda55429fb632af8713bd74230d5a6b0ee4f3596"): true, - common.HexToHash("0x9d24c8ec367481ed11009d1d58131229203d33941699595a551e681e0d1bc2eb"): true, - common.HexToHash("0xcd4a79a151c3daa9f4ae5fd68824bd6f8dad130b6f23bc1afe71e92d133de9f7"): true, - common.HexToHash("0x34287870b16da1bc8b27bd451499b7a682c8ea359ea93dc666007e3baae7c2d2"): true, - common.HexToHash("0x0c27800f5b86b04061b6e7946b2540d90df2f97b03af7ab631341b73c5d286b0"): true, - common.HexToHash("0x7ce2c550735a8919749d22973da38ef776b490bc4783ea7ecc3230632ff72f64"): true, - common.HexToHash("0x86f7088c58074c0bb9aab9637c01f67c231b34df474a461eb66039bfe86872e3"): true, - common.HexToHash("0x5cb664433f2d843414a1c4d8fda976a8fcffc534ab40ce7f9bbff1810944391d"): true, - common.HexToHash("0xefc7dbf44ce9799c88f49b1c8b3c35796a15c995db0e8b6ca05dda0975d446a1"): true, - common.HexToHash("0xa6abc43c4e785a5a4e8a5dbb49a8365303b218ad5be3b72ec0075c1d20d33960"): true, - common.HexToHash("0x8a1667b939ae713a72ef0c730b3781c8b22480e0334cd8563cff23e05c55274f"): true, - common.HexToHash("0xef6da354a8ff6a524344be928bb31d58d464b8755d4815ff457f1c3465bd7c8b"): true, - common.HexToHash("0x8c21128965aac98d3db5a84cafbccf2c1f714063e4f69e91bca5ffcc09f33250"): true, - common.HexToHash("0x96a189b7ef67112f05b9e513f088f09985ef149c86b81848ebfa665f59813854"): true, - common.HexToHash("0x20713b348f5bbf5c770424ae6717c9a774b3441954c22e3ec45b05ad57feb412"): true, - common.HexToHash("0x689a6172c3571800742a4953406fac4c5fe62dfb6ac656b3ab739f55cc18508d"): true, - common.HexToHash("0x59bb349dfc131f44559ed41a0b0f876395efb2d9755e4c85f6bc6d6d1cda2751"): true, - common.HexToHash("0xc04aa9cc33f86c8fa035014b61eeb4f33e7b67098dafed06aebad08aa917dde0"): true, - common.HexToHash("0xe609ce08944fe5c238e438a488f2dfb3a63915e9cd4af84825119f95c71915f8"): true, - common.HexToHash("0x916fe55035005fa2d1629ff26bd4ecbec16257585ff5c4dc1510716bfcc03200"): true, - common.HexToHash("0x4bc1e0b4dfae80dbe797616b3ab3404c1e7906c7bf5fbe821c7f6302b5736e39"): true, - common.HexToHash("0x01a4dcc5bf28f5c666a126393ae150d1b67f76965d1e42402f8b387699d01745"): true, - common.HexToHash("0x340a6312989da5e3ec2c9057c285efd762b6ff76dcbbda237f57f023244af03a"): true, - common.HexToHash("0xdc09935d5208383f5b3ba311fec31670cf21d582e8c69866156f64189492a10f"): true, - common.HexToHash("0xad4294d6e5aae992a8cf543bb0b600190bd4d30d50cb2b7618c53be82a997bed"): true, - common.HexToHash("0x2bb21893becacd4d1f9fa092d450946dbb6d0c37ea58331c79596378fbcf1585"): true, - common.HexToHash("0xf469ec963d8adfe41b7443dade93ca937e8f84e08074bff71d7dfcfcf7e69660"): true, - common.HexToHash("0x81b3485998f72c8239244006a654648d6b67e7b083c3e4d55599eea015e94c1e"): true, - common.HexToHash("0x178b3f87bb5bf19e59ca445c2a456b440cc51adb5cbae3724fc91c34da9c8412"): true, - common.HexToHash("0x6c45eca2443a660ff6855446703e6cae45308cc6696d5c0ee519a8865e1a60d5"): true, - common.HexToHash("0x3a3034cca0aef062199ac7ab4e429a43b73b45e5c02d9cc5dc9241279a10958a"): true, - common.HexToHash("0xeff293812a6e60700016f31222780b9ae08f6ef16c339c3d8c302e19cba7eb61"): true, - common.HexToHash("0x37edd720ef5fce879116e83ee4ca84118381bd6d5a15102ea6aab251b4090b98"): true, - common.HexToHash("0x4e19aec2a14264dd95e06cca7d584226141758b271c8518c66e953b59b2aa289"): true, - common.HexToHash("0x976c8dd4a22b862104e07ce91520a1a00c8beed368997f7920bf698ede1a0ec1"): true, - common.HexToHash("0xd114bc37c66fe6b52edb1e81171d9a709f23489051d287fcf808c8ca87a7d670"): true, - common.HexToHash("0x1898dde719bc349a22e6d0f2aa5d7872bc0156b1e221280ca00c96efbc6ce1c0"): true, - common.HexToHash("0xb60127d6e17bb3ee87fae88f88c213204281de4e00e88fc5d54d5e83d7756f99"): true, - common.HexToHash("0x34e7f9dcf9d97ba73f9b4d384e7bb3bcacf6255c7b7c1185e1ece0e109f29ed0"): true, - common.HexToHash("0xba4c4dd76af3a1db6d691eeb345c8eaf5a005e9263fda52a87fe16c6df0056cd"): true, - common.HexToHash("0x3d2a8dc3f0627b3f8eadc476cb483a0111042443bb18aff9278cc3b9f641f933"): true, - common.HexToHash("0xe4eda5bdc852ec734b0eda8b851438beb51af85d70be776db616caaf5c5a661d"): true, - common.HexToHash("0xe1c6b9286328e7ad464e07a87579f6638e3722184e8ca9d79632b59e629ed33b"): true, - common.HexToHash("0xfacef02fb6a1d10c6ca6bb65e32d16f527efaa010f61d29cd1b4bfc26d59ebc1"): true, - common.HexToHash("0xe52f3b0212c03354833df77ee962c37d19b17eb96414cec3c131bec84a8fcfb2"): true, - common.HexToHash("0x6648952c89bdd4914f08006afaf78f155da87a19b0d01794b68c08749cbcc950"): true, - common.HexToHash("0x69976887e5c9046e2b49955c5a9722397df33b8934ea76ab055122342460263e"): true, - common.HexToHash("0x63926c19300dd4049d2262f56ba4b73d7835caeeb4e20b19c4abbb439d3d4945"): true, - common.HexToHash("0xf45682b60a04942f31ca493159ba5e0f69717d3b4ef3538d3a8688fbfbbc044a"): true, - common.HexToHash("0x60a0677eae19c24d5c621836c3ff85f18f342dde1ba4e790d2e4648c1706183f"): true, - common.HexToHash("0xda21119599611d86f13552371c6914faa992c4c26e9c05a2593a59d6d4db3d93"): true, - common.HexToHash("0x78cc2893cb2b7951e38fe3fe24b9a76394bec58c9b74442962111d16bcbfa4c8"): true, - common.HexToHash("0xbc00bb87dc5258312513be35202050cdfcd33b911b40b4596679b216f6452bcb"): true, - common.HexToHash("0x56dfc929488171d58f7d57fa85e972e5e0e89dcb824d090fe12634529bbe963d"): true, - common.HexToHash("0xdb0a522d7f2a4a727a5a141303cd2c5ec25a3fc1287da2e8800e16f887404dc3"): true, - common.HexToHash("0xe1108838a6c8c50bfa3c227e2b11a24d40b32b2374beb01394b2cd8e27292500"): true, - common.HexToHash("0xa18380207dcf4123f4bd17d073a3cf154fc492d78d9f7ce3a46f41f02c436e06"): true, - common.HexToHash("0x0a103daa199c3b0f29647e015c8cb6f74d51319454f0243d94c1f1eb67755e56"): true, - common.HexToHash("0xf0434397323833fc0122a33e2e0902977ba7099ab271aca412614f25da850ebc"): true, - common.HexToHash("0x0c1e78273d175bac325badefff94c6b1f4f42c575490657ac1bb2ae13e609561"): true, - common.HexToHash("0x62e21296cc98c5645fe54b4341b7de183a63bd127115099ab0cc0a2486e2cb05"): true, - common.HexToHash("0xaf4f190f525f1d7098cfa3c77b12794f75d4493eae4a53dc446c235be6801cb8"): true, - common.HexToHash("0x416713c23712a833bea96a1e318a1d6290d067139ef27f89b661a3916aeafe7b"): true, - common.HexToHash("0xc0f88f31ad105448b8e81796ca5391d351f4819f7b08eee6e7557f08ec68d51c"): true, - common.HexToHash("0xc0f95b5787894814b9fce0eec952ae92eb12ea1aecc1652b8cbaa65358a19820"): true, - common.HexToHash("0x5a01eef4acf087cd9e950ddaffe42e4c402dce2f33207646a11e4e49233d7d27"): true, - common.HexToHash("0x75c8874af3d218ce162ff7dedbfc5444e5f8f19e4b1dd8096f19c28817294d12"): true, - common.HexToHash("0xfaf4a06b1e9c36b9e1fb87f3e03d09a28a32da74666b165c672081f6ca106407"): true, - common.HexToHash("0x7a0fcbaa2b11df7d0cbe042e5c63dce6fa081315e110cdfe465879075bc762fa"): true, - common.HexToHash("0x78f99e389d3214cfce262355ae43c0a969af62c91632cc80b516293e81ff68dc"): true, - common.HexToHash("0x2417b10fe5bccbecd7c9e238fe3d26c558058adbb74c0c465e754173cccbcc10"): true, - common.HexToHash("0xccc40181e9e47bf6ba11da910f32903646ab28f89e060e89b6c2eefb891a23e8"): true, - common.HexToHash("0xc8d6756442cac1d5d9627904e495ffc7f60e67cbe0a081d2625077d35f8b6e10"): true, - common.HexToHash("0xd13fa533df8015562f5b426cd8b2712bb262cde0318c1b10f38f1d2478db5963"): true, - common.HexToHash("0x9a5be9e16cba849df5922e6ba385ed15fdf6870e628eb281786a6a46193dc5a2"): true, - common.HexToHash("0xa526322cfb263847cd76569cdc4eac7927f6224fa0bccee485e3fad12507f898"): true, - common.HexToHash("0x92d946f6bbaf0e144d4080221e9165e04ac11247a679de2c0299f132538b6d9a"): true, - common.HexToHash("0x3245321ef3544b68e8a633038561b03bedd5afb0fa1667f7815875bbad3d5a2e"): true, - common.HexToHash("0xdb7e83010d41b7d2bbba2592d9af355a2ca1d04b7173249c27e0f52b6f924bca"): true, - common.HexToHash("0x53b790b16bf652d8118c1b2a0b22ba462151729502a12093c821655d67bc28bb"): true, - common.HexToHash("0x29833dfde11a5361b4a07795842a5a92262302c3d30b3f336ac92d755e3b9e7c"): true, - common.HexToHash("0x231780d450f5237b5af96e6ac430c32895b7207a6df7ad8ca49a9fd2e88fa5e0"): true, - common.HexToHash("0x53c1259e791082c2a1af57489adeaeb9b16c0ae1b642d14aae5a6bf68cbaf56b"): true, - common.HexToHash("0xac783400241b0f815bd01769b973504c6ba34bc123ada2ed9e84ebb1f8a0014d"): true, - common.HexToHash("0x08d7f54430e734a7033f3e96d4e2ba93420275f3f0cc0bf953b8a8e9c07eaaa8"): true, - common.HexToHash("0xb43506668e7fd5282ed1a4436ff606504efa7d52939bfca6ff8188fe61fc88d9"): true, - common.HexToHash("0xa691e9c3f9a9d9a55b2052c37b35c4209d9b3a48b6150e59a67763c5fdeeabf7"): true, - common.HexToHash("0xf3cdf9e6ed32d3302098d6049fa5d2648ad30dc734b237ed977c17afbda281ef"): true, - common.HexToHash("0xa837757cebf358fbbaee000a7bf90debe2db9e567d14bd5b208a35ec81b514be"): true, - common.HexToHash("0x34cd6d92af76eac28a11c785e01dc6e587838c2780e8b54aa6920f9654d6aa09"): true, - common.HexToHash("0x47ea684aad1e98d6f82efd2897cdbc0870652acd57ab8b6d6a53443d73aa511a"): true, - common.HexToHash("0xb4361099182a57633294c67879dc14140fc12291027de721f17ee49f1ac41061"): true, - common.HexToHash("0x140467e092d85e0c77e9079dc80f2590f7969ad7fb59faa88dad32a26d659b02"): true, - common.HexToHash("0x5a944b5164d0b5f5b25a410a83674c0ad0ebf6ea3051eec43afa5594a4967711"): true, - common.HexToHash("0x7c7497651d1e6ee2aa350dbd090a377a726ff9632e98cadf1f9ca0e284a647a5"): true, - common.HexToHash("0xb345f3716dc2edc14dadaba74604694da44d0c42cb2a701191147185a9a982f4"): true, - common.HexToHash("0x2a93234b8c0bfad049b95d52dc121a1b32e659056c1d2b2f2f53c30533312661"): true, - common.HexToHash("0x8345f4ff8b9a77182b2ec8b440ee38175670ee51fdbadae40fba0d091afe33f9"): true, - common.HexToHash("0xb6f9c42c87228ef31880c3968aa3b4b899db3eaa76f16777f7d6e6eca9cf2fdf"): true, - common.HexToHash("0xf35619a1f0172f7c6e9f7e055becd2e63647ae9521d4fb751bfd8528d86b0641"): true, - common.HexToHash("0xaa2f890657229f590888f5a1b9a866e02ebb194ae6155c4a907e6ac1a1c4f93a"): true, - common.HexToHash("0x75445fe130488cbc929efbdc8b52c5301adf493e57af716331eb216a97f17742"): true, - common.HexToHash("0xe71088a96a1eb665481d95a0a5a697432dba07358022641324d8da623cd30547"): true, - common.HexToHash("0x15741357107ebca7e3ee157d53addbd2d08765eff3b1c2fc7dccd324bf8e1b1a"): true, - common.HexToHash("0xab08c68f6b490bb328940a797aa6fa3aabdcee6889b5e17942f0481202249858"): true, - common.HexToHash("0x5f37901f00bfa25fde4d1ab02df6f816f642bfa4ef258aea80643c2694de6108"): true, - common.HexToHash("0x566cea3c9255586c57c937da90438f970aebc9a17652ed710e7b3bc3835f1d67"): true, - common.HexToHash("0x5f6029e97fb95fe48f866948b719048c15bd6992cb6f0a8a2a3f0026312b3e2c"): true, - common.HexToHash("0x27ea8853242707ee1f815ec90b3990c0a87ca0fdc041b994deaeec702ab6503b"): true, - common.HexToHash("0x4bc212280c7bc1e18c1cf4bb6a26b36f3541a91f8977217fc4be72d96ce836e2"): true, - common.HexToHash("0x000f83a3c9e2e679274b6b91f2bcec62c5dc208d8cec7260bc75d790e8b64905"): true, - common.HexToHash("0xadfb984e8494638c4abb541be4938640b42c95e6090ed328f18111e0d09c69ba"): true, - common.HexToHash("0xa1805053f25a451e930ded984091e6eca9231483c50654655efa45774159d1a2"): true, - common.HexToHash("0x30e23857f2e73f13f82de901266fe81bb5ee9738cb19828ffd41e6fa38f87d95"): true, - common.HexToHash("0x9c97b45d1fc62a00defa99c877e2bc2ebd10b4e57bff27f1331082d6b98de664"): true, - common.HexToHash("0xeb0b1687cb19388e0d3e79fd26c575b64734c519e166cf5c6811ee1599d79146"): true, - common.HexToHash("0xdfb8bd06a1950f132a992737c57c3e3c9b8419a084a275110962923253d404cb"): true, - common.HexToHash("0x04cdc3d66a76dc334acdcc128cee163ce003d4d5336b7f74b63f24d70fe8adfe"): true, - common.HexToHash("0xd57404dca873209bbf38097b0178f3d69f2b2c18268533cce88d472ed2a3beb0"): true, - common.HexToHash("0x2438ffab8c5b527af3bd8cca0da6e0bcb3b3add30680d03b35b98c9b61b062de"): true, - common.HexToHash("0xf3cd1678c116955ccc0ec4667193bf56fec226938a7bbe71d9a52ba779b5e62c"): true, - common.HexToHash("0xa98af8b4df1423c790659a0500ab548c7d494de5cc8116b8e6ee0a45fb8bcf0f"): true, - common.HexToHash("0x434e89f8e77cc59e6f192630c1f0a2aa8f201de46cc60d1ae2bbd1f0fab639d6"): true, - common.HexToHash("0xa1bfeb4326737d7fca5e2f218a9c4facf957479652fcb0bb22d7983acaf666c8"): true, - common.HexToHash("0x13a2ea93c901dbe598bcbeb33db42eedbdce65b9f5313555fe271416aa7e501e"): true, - common.HexToHash("0x2932405aa0fd2fe0a657de2fbe889f836c7996507d43192d34757adcdb7d0920"): true, - common.HexToHash("0x25f8a5f9bcaddc09c10025cba719243c3ddfc732577c1e682695c77c865b9bf1"): true, - common.HexToHash("0xbbec8222e0f8b17c5569bd192329b987f21c04ce0b2d755ecedc8dba5158c620"): true, - common.HexToHash("0x6d822cf3af3e7f918fc5713285cd114db0106164444a8f920436a8779dd88750"): true, - common.HexToHash("0xc030cb32ea01fe3eb6e8f516854e356035789cdcf804b9e18192728f76a81210"): true, - common.HexToHash("0x5cfeb78e073a7b3a8b01daeb86e7fea264a28891738cc4ed3c33c8058e2e60a4"): true, - common.HexToHash("0x91f9d7d24708c98d6406bb7abe2e47495df6d56db366561c302b730a3507be7e"): true, - common.HexToHash("0x0db7eed85f9595e59dd6cf0752a1563e7297d745b19f1d8265cb0cf4f416e4f0"): true, - common.HexToHash("0x93d1cb3db82d9ff974848b016305de5101270204c98bf4b976c4f0acabd18502"): true, - common.HexToHash("0x01c13fce47792024149585f8007585eb91a0a94f44c730177309fc73a698e427"): true, - common.HexToHash("0x4a3cefb63bceb91af291f84e94e92f28e2e61a7c55269a7774361ff9fcf837bf"): true, - common.HexToHash("0xe71ab3e8dbd02079dccb8e5adc65e5336974b487691c4a6e58fd03ce554ee0f1"): true, - common.HexToHash("0x296a66c27b950da0f8024fb910be6d20ce5d8fd1ad9e3f3af870708e05783522"): true, - common.HexToHash("0x9916b8664fe5d3b38f80a49434ec8c65fedc4eb42c33b6a230fc8e298e651c65"): true, - common.HexToHash("0x7a340ab714da798f66d66cd53d4e85627cbcf3065f4d014d1e224d969e3c2f63"): true, - common.HexToHash("0x613f1832348e09e4155dc5ee3e84e77643877e02275915883f14ba129bbb2b91"): true, - common.HexToHash("0x721477870e4e6ad9eadc0ef90928bad480370eb756caf83e151f504b29f772ee"): true, - common.HexToHash("0xc7a9a037f89779f705921960de15db30553782651fff558b6a2872a8ecc5f6a1"): true, - common.HexToHash("0xd7345c1818be156126e8570e5634b1019c66b9a86f4264ff2050d3cb1f664b53"): true, - common.HexToHash("0x6d224087457c7887379d43e680bd7befd7ccab57c44085de010a58286d9e8cc9"): true, - common.HexToHash("0x3d777e085411ebea84c716277ad3f1fdcb0afb63f84ca7023a5845ada4598336"): true, - common.HexToHash("0x10161a9e7f966fb966dc001f3680c2786c4b281fc3596485081436b4830db7ad"): true, - common.HexToHash("0x584d9a672ec4a0709979ff6dd932179b458943dc81a4419251c5fd4a2bdcf051"): true, - common.HexToHash("0x52beb58338ce5131645f713c30c157f29196e91b039d373fbcce9dbd54120395"): true, - common.HexToHash("0x1e8909f2a2f5d9b6dc3bd9e97a836b7d705353cf49732d4998a472a1fa65fd8b"): true, - common.HexToHash("0x3e7a9fe50978b89a8dfdd075e83bfecee82d95cb8df625a9880441a12616a9ef"): true, - common.HexToHash("0xbc8ab6fcb1657a96ece83722fad4e5bf20ebc2648d3938a7492d94c4f47eb257"): true, - common.HexToHash("0xa5a7a87153b1d7af3cb6ea6063d4c2d8d9c3992d02927bf2749e6db02a81e6fe"): true, - common.HexToHash("0x76017c75abcf0543a3e905a0cb7d6c2e6c91d108edbf9446115eea98a40b03e8"): true, - common.HexToHash("0x5978b634c8d7d4f232689d55547b2a0aa7a91f2de61082ad6d0fa1755a84a330"): true, - common.HexToHash("0xf1683f936bed7fa16cb54aa54d1daa34fced9092a06c9bddc596b7ca51b979f8"): true, - common.HexToHash("0x89b23575b6689abee67033ab59a50a2796b9bfe2d07061e0a9f7e25b319c2655"): true, - common.HexToHash("0x791d096c3523307629b2495cfffed0798bd0c395747f311c0141c0534751e443"): true, - common.HexToHash("0x0f174f906ec9834bef32a9816a4ee4e44f5b7a92c30b9e33a4564770a9dede45"): true, - common.HexToHash("0xe5c54b870ef05ebba7079e62e6a287c6a073dc813b2ceb452b6b6eb31e9262bc"): true, - common.HexToHash("0x6873e5fc934149a813778c0fdcb5767e27e696e2f309c080079329fafed555b3"): true, - common.HexToHash("0x8d8f32533ce85b1e9afe10e19ae23abd5dddcf7c17ae1f4ed0bccf0d678539d3"): true, - common.HexToHash("0xd27c4e5a62402100728ccaa09c1f9f8904687993d0b4763de0969c4b8881be72"): true, - common.HexToHash("0xf36db3edba06715b2bb7eee7991cf3589ff352150df46531429f37cf460e1686"): true, - common.HexToHash("0x21f15f5a572d196bbee6b159403089ff1a4bfbd3a3c57b0f81105d939460ee0c"): true, - common.HexToHash("0xdfaa5a038deac2a08fa38deb1fb9b9b5b3b8a162521efae0a5bd31243263b9ac"): true, - common.HexToHash("0x94a5f13a97e78fb7a713d019bfab4b9c69f21326ccd2aa45f46563f242b896a8"): true, - common.HexToHash("0x7df91b39332d9c241b3af4a995edfae6d90f0b077b9f07749b80250f2a499079"): true, - common.HexToHash("0xfe63a0002755ea4c699d704c09898f0a01fc3e357c808844a5b353363783dd66"): true, - common.HexToHash("0xb7be53e0cdeea33c196df9e4689700da9581eff0bfdece4c41fe1830893abeb0"): true, - common.HexToHash("0x2bd50c07a0be9cdb75402822cd3ed9308189ff402d0e1c032cacf1df829fe9f6"): true, - common.HexToHash("0xe8e6d410ac8840485ecdba1d41133cfb4af47542abc0b31906ca0c4ccbdb11f3"): true, - common.HexToHash("0x63318b0823c6e1290bdd18fe9773a4d8b28556f86a2db92101e1bb87374a70de"): true, - common.HexToHash("0xba488f79efde94e0f6d0533d8a29b9c0addf99c0d394f2ba329fc517eed2a64b"): true, - common.HexToHash("0x2d575c93f3c548136441bbee805b4f1dddc4b5aa534465c83fa55528f71bae82"): true, - common.HexToHash("0x4ff20ffde6b1a91bb8ef3bac4e0a2fddb26c9d5ff9fa30bf6f022baff15fc27b"): true, - common.HexToHash("0xc5fdc7af8395b4c5831c46add9cccb88a4906f5c4816a9dcff09b7a81c432502"): true, - common.HexToHash("0xa46b66836ba7daaae8006fc06484b6d8eafe39a739f42886e37e7a54f3f40898"): true, - common.HexToHash("0x114259116f79cabcab932a722688ab33f64f0baf826aa09e1211effc71c4e297"): true, - common.HexToHash("0x5519cde20c47366ae62a5feb381f2467437f8c5f8e24f672dfdec5ff53448c4f"): true, - common.HexToHash("0xb0b0718da00b801413e4bc168cec45d42874e34cc89e3e10c23b6e8008c49628"): true, - common.HexToHash("0x52e14fd4fd75deb0fbabf4e74a9b9a423ab6d24ddadd495c9edb14f8f7406e9e"): true, - common.HexToHash("0xd11ad9d7bc1249f65a5acea6d299381f44a29ad302a096ca6db42a984f611490"): true, - common.HexToHash("0x4702ca0c8bd180ae75216e016d67022c540a52d291dd99e22fcae1be9a74ee10"): true, - common.HexToHash("0xb91ab30cdd49ddf1a62c83458fe20ae66e9e6f2f6adb0149866da966ae09bd4d"): true, - common.HexToHash("0x90e27c148ae3cf3538e4a4550050ae6a3c63e7ed0123d8096e2922bb78b60011"): true, - common.HexToHash("0x35c8b0a3cc00ccdccc5d4693d443432f14b3dfb1a732a6a0ba0c0f0b8c65929b"): true, - common.HexToHash("0x1674d263f8932215e0959bc2fd034d3d1c8002004e88356b1401416608e71577"): true, - common.HexToHash("0xaaf473f7f05f090239a344afae211fc7b0e62930b83aa8a61036f3dca488315e"): true, - common.HexToHash("0xd6c9b115a9f888632d551e566b435f5164ee87ed3cc969de3dc98fc6ddc3d6bf"): true, - common.HexToHash("0x5d1a31220159e8ef91711612037825ffe5489f544d46ec1e05fec11712a14525"): true, - common.HexToHash("0x56c0ad208047ecedf5edec7477acd9ae255014aeda4d7f08b263b90e5b5ee5eb"): true, - common.HexToHash("0x2514c7dd44ca649d8fe41831364fa5d591bb2946f8fbc7186de2ff07a24abc3b"): true, - common.HexToHash("0x34c8b0f6e9fcd3b63a980e4b4601a6f4a59a9f93111f8d19b500ccd1f0ce93ed"): true, - common.HexToHash("0xc3bb6183eecd02b4b6e369f9961b2fb7820bbb62bcd4b6ed4de71036d4b38257"): true, - common.HexToHash("0x837ddc48b0e78462fc527eae891c8b503f21c274ed89236ff13382f03aa241ee"): true, -} - -var L1RelayedMessages = map[common.Hash]bool{ - common.HexToHash("0xde6a3c949709d252d23d940fefc976373acb2de4ed2de64bf1f8430ec2cc222a"): true, - common.HexToHash("0xe6c4417da24449cbd3b65bb145834307a3293271843546e5e8d457b0ad13f025"): true, - common.HexToHash("0x9aef302327aade2fc4442c927d54f424453c072fd327cc0ba95968d42c94f7f6"): true, - common.HexToHash("0x1e48b76301e322f342476be21fe84ac3b339ad16a061299c8ad193dd06cf64d0"): true, - common.HexToHash("0x50fb4703ba2a7f8f788dd057f4508b98659f1cc17ffb397b73c03d783cae80f6"): true, - common.HexToHash("0x01d5f14626d5f1b986f5ce7efc99d402e476ef7227b47af55a44021a455022ce"): true, - common.HexToHash("0xc349c7ed9e1a0283e04315c44713fb6864d3f4db20ea21760e6ff1173623c785"): true, - common.HexToHash("0xfffb272f44276e9dca31d0a34cfdeecde1fd3daa497348e049fc43a6cdc6297b"): true, - common.HexToHash("0x526bb4dd97a7f64bdb34d6cdd1f7bcd5323d245f9fa7695f27864725f970bca8"): true, - common.HexToHash("0xcd0b7755757727fdd9a3bb00ed2f8d37d6cf4878e2b893c2da90a56d2837b038"): true, - common.HexToHash("0x122e4df2144762086814619c63d9b1ca3bbdc958148d11de8d1eb7b9bc158121"): true, - common.HexToHash("0xf00a9bd715b15cf854b593aa280b462cb12441bc587bc507dd9b5572f7eee819"): true, - common.HexToHash("0xfec902255769b1f37cd3650cc5bd79a2db47f9e57a87271294f14cc269d97979"): true, - common.HexToHash("0x7cbb6a4230c73511d7255ece623dce57fed2057f711ed4e669bcf10611854d96"): true, - common.HexToHash("0x8459345e61e3e17cd09984d6be6dc4d552d32fd4d2d0beeb5eee676053f99152"): true, - common.HexToHash("0xfea17bd65cd499f6a5415c57002bf5221ba0f8ecc1fb67c0adafacd5c639a0b7"): true, - common.HexToHash("0xcb3561a469edb8b95d938ee7e7bbe87992f014e97e83c7a9bfd2893a67bfe728"): true, - common.HexToHash("0x35d720218271c347ca9e63d104a72f5ea6ca1402cd2564bff06741e26f22678e"): true, - common.HexToHash("0x845c15bf1159a4ed95ace57bdf324c30a848fee83fcbeb8e685b0d905f4a0cd1"): true, - common.HexToHash("0xed459a6d21e45f3f01b4bf65dc8e459b9af8420e00acd65490e7ab508af83b58"): true, - common.HexToHash("0xcdf51eeea22373176380782891fc9ed707be6e63d6efa828a57d607934327c32"): true, - common.HexToHash("0x001f84fe533076e10e5df74ec76bb851e2e5e66ad96b06dc9d575a94c61dee7e"): true, - common.HexToHash("0x4b8b05278215519958f9eb2bd85fc97c8ec72781b0bc4fcd9867e55dd2414f5e"): true, - common.HexToHash("0x7123049b7c8ca2546ea900e20842d9b558b917004a2c29374c8b6214663357ab"): true, - common.HexToHash("0x96ad9876f213911f462c2de004e22bba1be6938b0ac43ba24e2a520efbd6ff9e"): true, - common.HexToHash("0x4b83a3528961906af57e6551976c155cc622724fafac13a61accee750d37a1ac"): true, - common.HexToHash("0x6b0dfcea0f4cf28f6df10aafc8a4db3b1e86c8ffe586ea878b6fe375d4a0b666"): true, - common.HexToHash("0xd16f181eee50f57cbe474de76cf8388a21b91e53d9ec8bf127f568b267804d18"): true, - common.HexToHash("0x10fced87b3973c4555a9f5de852e20e8a96d0bda66985ca8ead563b90b07e6d9"): true, - common.HexToHash("0x2b326792e5100b1f9083406b57eaafdc547100450a814a44a84882abab763e9c"): true, - common.HexToHash("0x9ee83e5b781c25e0baa7a1c1df9cf48acd876126740b57a99b5c6004369d4d07"): true, - common.HexToHash("0xde61b0a624303b1b2c1c804bbafee66072cf01e5c84c38b53c617be1d3a6c12b"): true, - common.HexToHash("0x36aaa8618e834e385e35417f0fcae97d8b25dfa95f6ed0d251f31b5e016f4aa7"): true, - common.HexToHash("0xa05d338a6115ccacaa95490a83231c3dc94186b188d8a119c4fb4ae27b928e34"): true, - common.HexToHash("0xb3a60115002be2b079d2fd99bb6f297811b2f88d4543ccd5d937ce408005f051"): true, - common.HexToHash("0xd8d4c2d5329fbbe0c9ff6f872431a6d7266ea189c7124614df3f8506ff6cdfbc"): true, - common.HexToHash("0xa5c8b136cbfda9f3bfdc7cc39c56d7ca61e8f9fff13d3828d67e9b32cf8473a9"): true, - common.HexToHash("0xb7c5e112a7a3667bcce43c2d14b3d74a52fb1166374359e868c0dfdf86e79a20"): true, - common.HexToHash("0x1e6048736e3ce4b95dd30087aaf39f54d6a4e5a6da9f27637de977a2c0cb20dd"): true, - common.HexToHash("0xe8d5b597cd766a7793bddeb98e41df262c1e0c318f1a974c355371974b2c37cd"): true, - common.HexToHash("0x9baea56db3c7d0d8634ccc44966db1362c1b06da11b2de3d12cd315d2141aeb8"): true, - common.HexToHash("0xa541fc47fd6a331347173245001c078658b94cb1bc440c0f6cfe5e2a34564683"): true, - common.HexToHash("0xfc7515dc0b5950ded466f786869b7902ed68212ec03359ecea22dd9a65eb7434"): true, - common.HexToHash("0xc55be4198a543b5b4e3912a25acbb34f180d52b34cac9881a38b4487ced8b332"): true, - common.HexToHash("0x914e8b5f88989a1c1017757d390143a5daf075f74388f60d9d511ed8a33e43b2"): true, - common.HexToHash("0xe418d2969aff06f45edea0c676a1d396413e33ff12cd215f0bede10d2749e1d3"): true, - common.HexToHash("0x9b9672091f9ab8e229031f9005095f62a27bad680f3db919f480903d3b884f33"): true, - common.HexToHash("0xa22b78a59da8c43050209c2a8118d43fb3394cd41688af20a03eb76a7ca00f4b"): true, - common.HexToHash("0xb0c1e114cb6b3185ed7da1b552313327436c9849a32140aa1482ba396eb24992"): true, - common.HexToHash("0xe1916294a2c3efa61aecdbbe580e4cc3ea7aafedae6dc13d2604304b7ae89fcd"): true, - common.HexToHash("0x86ddb1e5edc35769a301fa526341a126085a45b2777a57b0800c445c604ad15f"): true, - common.HexToHash("0xeed386aa4e8dc784c3e08e55b68f60f729515cf257b46fd00eba8aed3598da8c"): true, - common.HexToHash("0xa667dc1656bd4aad1de271a7b2c203a8e92f786c215fa6911adc007185e66a7c"): true, - common.HexToHash("0x81a26c96d4f5957d6a2618dc5fb578196f4424dc9171865d2bb6f90fdc4d2398"): true, - common.HexToHash("0x8c2af0c2094a4b2f69579161b932005c1c296aff4037a3d7a7fd4f3438739b09"): true, - common.HexToHash("0xddfa67731c8379ace27fd38f85209ba2bb727a351217e3c260c4ae2194f1e598"): true, - common.HexToHash("0x874bbca7608847563eb8ec8c6367ebf466a25392645009793697bd9314e5767b"): true, - common.HexToHash("0x686c65a8e352b0e0b62a46746ee037f12d6fccd457bb9691aaacb8745945981f"): true, - common.HexToHash("0x29d78f8a230f5b5c5762667256af5408556340ca5d86d0d710a64f5e6ae4a953"): true, - common.HexToHash("0x968b39c3115a0b54778180978d63d2189e6a2bb3a9ff3a065d3bcd7997e327bc"): true, - common.HexToHash("0x1fd7f9e95ace5db7b30b6153b7e9e4ef808f4ad5e70858ef4be4e79903b7feb2"): true, - common.HexToHash("0x497dff70f7eb3eb5d6b93e1b77eb5b02fb8478d0c109b65707551a451c811d14"): true, - common.HexToHash("0xaf2a0e4e20b2d520e91a10921e689f4b15eae8f6a8d74cb0d0c2b633b35d00e3"): true, - common.HexToHash("0x313d6b6b0f133344e43aca2ebedd71d9e6a7e7cd04b47b560d84b98a6fcde78f"): true, - common.HexToHash("0x2daa3175e45770eebcc685db392739bebc7452aef2fb2dce6db9a8e10434f3fd"): true, - common.HexToHash("0x2ecd1fb5a4dcc649b9e72b1ca216248b69538761b7635b5e612c5a2ea20ea7db"): true, - common.HexToHash("0xa0f22fe0d39df6b6a2ac87a362946be7588b4830a8854bd22933f14e1d814aeb"): true, - common.HexToHash("0x420098ad5e00eab75f9f14e858c2e9c65f0035c39e85746242681a295b53c503"): true, - common.HexToHash("0x2039fdf7f8929216a8ff4546e0103585b47d1aefad7f0bb271201d1b5b740b27"): true, - common.HexToHash("0xc93fe286eb06b292138f9bb1278634bd53a0d1b76142286b99fb8b3386d70957"): true, - common.HexToHash("0x8a9c22252bbbf413e84c60d0794c3bfb716715375899b81b5fe4b78081feb64e"): true, - common.HexToHash("0x1695385ad347c6fba93830e4aa0c4e17362a47784739e7acedcdba564ea17ef3"): true, - common.HexToHash("0x524f8c81e6be67cde77a89292cbac8fff4213e4999865e45828fc12f108495d0"): true, - common.HexToHash("0xd460ebe14560e59fa7ab4cee98dc88230a412287cba258c0533339bfc1206f97"): true, - common.HexToHash("0xc995efe9a2057f36ebc74063d41fae40720f28e7e98ad8656dab3599e3cb01ee"): true, - common.HexToHash("0x57b080fbdabbc8096e5732f59ac9ca17c89c4892459580ce92d45f1760939edd"): true, - common.HexToHash("0xe32c9d630dd7cc53d691e88843d6dcf704362f70c9dfdd2e2c2ef77860584ec1"): true, - common.HexToHash("0xbf9116f244d79d286d1b0e4ef9b2e8d098f6e9fe885fc1825d6134d58c738234"): true, - common.HexToHash("0x671afb2667a2ba43c71ef2582e404c8ceff682731231e59ed3f136b53c1b432d"): true, - common.HexToHash("0x2915ff008f20c9a7d4ac2be8a114da23c402812e0f1ff0f8ae0dcd6c71ee7ab6"): true, - common.HexToHash("0x1b48e081f4622f106e26bdfd0bc345b6d459e3da253c7738846ed2e0800ebd11"): true, - common.HexToHash("0x523b9a712f352171de6580bc9070cd56b0bfe3f0e904614b0805ca4e89e259ba"): true, - common.HexToHash("0x0cdb5b80d2ec130ebe42644b4d578d5b42e71ba3598f858aa21efd879f19f852"): true, - common.HexToHash("0xbe005e0fc46a0fc9bb7d1b6f6c6b94937699f873bfc9ce945fa4daa63d328b89"): true, - common.HexToHash("0x640b2a5e74fde3357b13f9e3bb078b71e2193967a9458b0a08af81e663687b56"): true, - common.HexToHash("0x97dcee77c5c7192dd8306ba0a0c9b1720b4ce30b018163ca7f4ccb751629cab5"): true, - common.HexToHash("0x6ede6eb5318ef834ce44047894f86a78dccc989533db3f175f2567cbdacfe6f3"): true, - common.HexToHash("0xa74579ed5a8fd3046c5b73b3f07fe31e30b1bbe354337cec42aaf8e1ee53dd0f"): true, - common.HexToHash("0xd9c230fa0a26c195cc814984bf3d0ebb9e510e7c9564f8b62aa1fd785ae6b43a"): true, - common.HexToHash("0xd03d36bcc141e45c9dd9bf1debd19ff932c4f5e521cf582eb5d72f8e33df1dd7"): true, - common.HexToHash("0xef3a0645f4dc3daef2ac53dad7006871909f8862c4c41f4ac990fa76e5a4ead8"): true, - common.HexToHash("0xb98a8a3d2a6928fc6a2111d3dec18f97e016d159b417b2dcee454cdf7f4e4628"): true, - common.HexToHash("0xe9ef195f7b9c120fbe95c61da007c6a95e9938cf30c5d6f8a5afc3867af830c1"): true, - common.HexToHash("0xe4a77711f4bd179b301f07c1b04700a8e0b9018600c36e379de2e233a44c169b"): true, - common.HexToHash("0xceed50a03fb5da4ecbf29215ca410244f042c324dbe1ce266682a26a56c3242a"): true, - common.HexToHash("0x07676fd50bd8a2476dcba8f81f02031cc241f5288648726ceed9e58b1ceffd39"): true, - common.HexToHash("0x395a224a9dc3b924845fb2d35c30a7e390eb5aabd01918bf25cfffbf533952f8"): true, - common.HexToHash("0x6d867e206d876c9bc396324bdf7debf74089472deffb8275663cd06afe3ae7d3"): true, - common.HexToHash("0x6da4a6a200ffc64b0665a3865e93caeb35aac47258e24e3ddc9c438f62d8201d"): true, - common.HexToHash("0x740f301f84be28dc359d7c767aa8e5a2d8883a684f3056b440fb1fd05ed074f8"): true, - common.HexToHash("0xfbfa95a70e1f2d00cbe86172b1e58b004d47838f23fba7b8c534c333b4130889"): true, - common.HexToHash("0xc0f5fea30f7f78386197bd820146782544312bbd6200f7728ad30efa430f43d0"): true, - common.HexToHash("0x924790d71561e2427dbe625e494ff1735fe1277f8154fb3ad530c5edb8bcd712"): true, - common.HexToHash("0x96de893a6a262cdcc65fce1b3d5e7c598eecde29f1aa60ccde03e3058f48880e"): true, - common.HexToHash("0x561626d79be9bb0f72be2b7e5dab488b23ec7c0b14f414c72bf59b250d3d1888"): true, - common.HexToHash("0xb4731594c5a1ee5aaedf7ec0e5f7402a45ea2b99d1c462fa202175720a00e97f"): true, - common.HexToHash("0xe86dd3de01e3968c2434c9f324c93b3129e2a188675f814b27a110455f426109"): true, - common.HexToHash("0x7fcc20cfcd9bfcb7d4600cf860423fa45d05450e9c0ece4efc70c929aa9884ab"): true, - common.HexToHash("0x5057226052d5c39b663c0e0ea1c4650aa8e66cce4357a760e661ac2a21f594a0"): true, - common.HexToHash("0xcf0e7b581e7bf62f6ab6d07d2bf39641df1ef835d74d739920b3346110211367"): true, - common.HexToHash("0xb25d26dedcb8c5c23c26ecf2ee4db6e3560313af0cd754665d5c3c831352caf6"): true, - common.HexToHash("0x28f106418285bf6809a606cf7d67b804b731e10140fa831916b4cd1f4cf58c10"): true, - common.HexToHash("0x359b64fddf2ef31a1a5cee9cfaff4b2510ef96631b4de91a225f9328d3633825"): true, - common.HexToHash("0xd42c191b80094c420dd74468f173ab1d90910ff881ab95f92a7abcb98aef5674"): true, - common.HexToHash("0xfb400d36f487849baa2588d5c45106ddc5cb51f92de4c607473afe11d3e18806"): true, - common.HexToHash("0x786b3c5ea538062fa3300efcb7730c092b38c216db6906f616c3974d1fa5a2ae"): true, - common.HexToHash("0x0ae1ca8258f2b393e09a13e12bc4bdb81c86dd65dce49f538d0c95e9588b9b81"): true, - common.HexToHash("0x666d52eba38936351c238955d6a3f69b6e960b05f9d227ae67859a1cd27f5e73"): true, - common.HexToHash("0x63c27b5f48dd69bb96dd18d39f7fecbf0a4ef7ad468c8155b377f4b669d565f9"): true, - common.HexToHash("0xc42862488730870826160250ce85b3ad5115e21fb186e5d7a65994ad7cd0e1c4"): true, - common.HexToHash("0x9b7e2782db71e2546eb12437c67345b7c0e3113fb216dbbd3b94925a20538fb2"): true, - common.HexToHash("0x0c0f8f97a318a2e12e723a17f650226a69e1c802e7c0bc809a4e1495d1496165"): true, - common.HexToHash("0xed1d5744a84cbe3dc168d013b8baa4014a5f2ecddbad3f9eccb01e62b7f67c09"): true, - common.HexToHash("0x9ba6c56bb343bb793c5c004e6fe879a858c4285f0335d3bf0ff7c17f6b1c1234"): true, - common.HexToHash("0x0d179bb0a0bd11afc5f373a3c755521f0cf3aea3c1799397be722d9ce7f1e2cf"): true, - common.HexToHash("0x2bdae770f82539cb5e190a46f3f4485be7349251e6ac97d655c21c8dcca9be7c"): true, - common.HexToHash("0xbc72d6d465ead85fefff2efcf981bfca3442e05d06762c647af9d9fc5732aaf5"): true, - common.HexToHash("0xaf1edf943c05f5558c1ddf0196b998b028824077e7332289d8508196958cd591"): true, - common.HexToHash("0x4c17761eb32c76595c2c9f213fda12428208e0cc4004de65f42e519e634a7c63"): true, - common.HexToHash("0xc76db4b60924bae2b5fce7b3df25df65089862cab41766e7243a810267c82c9d"): true, - common.HexToHash("0xd9fd389f04b68d6f2382854ab7204ddc918ba63fb4d451166c81065faef47df0"): true, - common.HexToHash("0x4095914d2aaf365f103a807aaeaa34947fa7b6cd645cd8819b5cd00e77166005"): true, - common.HexToHash("0x24a47de0a2557784236f76abb9fecacc932be8e065f9333b75922380dae3bda1"): true, - common.HexToHash("0xa66ae0264d6b6e26003cdfba1b45000004c8c6c907bcc29b8c37d33eaa3dc414"): true, - common.HexToHash("0x23bba356d17e608ed45b156ce413bf7af3a5bc35db3ea8fcef82b3afd90a256c"): true, - common.HexToHash("0xdeaff6fa06bf91ce956631470d903b42e6ed61ac36dfcd11810216fe4617a63d"): true, - common.HexToHash("0xa3298e9b280749daf92560f5e7a4505bec50dceff676de36adbff33b0d78f8b6"): true, - common.HexToHash("0x40ecdd36a847d6800f6377954ffa4638c0d105da5b1aea735682e29c97839ea8"): true, - common.HexToHash("0xcdbd7738c6108472f6c8aad7ebe81636d73471bb58646835ff006342803faeee"): true, - common.HexToHash("0xa9ca415b7b9e50b1c294872a2332e24ce8062611475244e7780f0dcff5a2afc6"): true, - common.HexToHash("0x6291733abfedfbd2833fc729d416a991e990e725f3ba9438f7ed3ce9ada6b3ac"): true, - common.HexToHash("0x5a2f448152460d02ad0fbbcfbe3e729619e81d14b0e7e0458184e6168b6ff318"): true, - common.HexToHash("0x2070db4e1785ae9365a2ff0beccb5b8c78e4ec407e759562585518499da6627e"): true, - common.HexToHash("0x8b30c95deceaa8b74d4b590c26deaf58d895c62ae706e6877bbcbb8b958f72bf"): true, - common.HexToHash("0x65a93546001b08c5c892b9c32830abf7485c6c079656810b273eee2cc5ac17fa"): true, - common.HexToHash("0x1a2b9309ff5215267b384857033d9031cc693179de256235512fe94baa671a61"): true, - common.HexToHash("0x5aea27ccf417f897751e827917551cdce70a375cd77b37e5fb603ccf2b84e049"): true, - common.HexToHash("0xbcd684ac888655a9f5dadfd10b76ff968c7488414ac9e5055b6f92bf8806cd35"): true, - common.HexToHash("0x2b2876fa3f297861edf23342af7c1adc772e7eba2695225e79bbf928b848b6a8"): true, - common.HexToHash("0xee55e19a2760a9ff19910b90f2b25e694b8465144ffbeddd101cff98611addb3"): true, - common.HexToHash("0x4852fab21475e01a623f347224004c3eeb30e2a65bf16df30a9f48f86afd4ee2"): true, - common.HexToHash("0x8ff4206f776cb8068d1f0c32db43e820e4d8ffcda0bc9e2bafe2420f88caa5de"): true, - common.HexToHash("0xbde62da29bf1651d5c15192ed3d213e2ff061d390852c2976fc213b4c8452276"): true, - common.HexToHash("0xdd33665372f58f74499a88a3bb81b673f79a45b40e82ea1c7602263cc86d9e40"): true, - common.HexToHash("0xaf1da6436b550baa9f2e439b6835173806f304c61140e1ec41ab4c9d6bf5552e"): true, - common.HexToHash("0x06d1674a2b6767cc8fd4654cfdaf6e4844a0df6f1453fd379d71b74c5f85d197"): true, - common.HexToHash("0x6f313c71b7254c31a75c18147dfbf322eff47aabbb557410f4397312b877db16"): true, - common.HexToHash("0x619e6bc966bf5285b169b25e6c7b884b4d2837b1dd90ede7f0752204a03eaf73"): true, - common.HexToHash("0xd3cdaea61df1283028b8fd5109030497c9bd40a4b99a637c44af1aa5d8baa94b"): true, - common.HexToHash("0xbcde687ecc01c6afe1ccbfe20d9a976fdaf1e2c6ea1c9384a3f3915abd266811"): true, - common.HexToHash("0x01309a0a29fdea7fb3307bd621a6e7a64e2d9570881fe9ee7b2a275298f56fc2"): true, - common.HexToHash("0xa4eee232f8102f07f743a85bfedbaeda80e56fbe512b9deaa3b137387a0c7438"): true, - common.HexToHash("0x58a760928460b8a744c8d1830b900d5e5f82ee8aee079005c064c6f4d2652e60"): true, - common.HexToHash("0x83ecd72088f11fd7572958e1d84935075f89c720ebccbbdea6c321cd4feaf6cf"): true, - common.HexToHash("0x1ae98d358ffff19dc8a901b3583c237470a6025aabe74d4e5b25f798e44c2f38"): true, - common.HexToHash("0xd1266bfd364a20c553dc0a1f2340246cc214a1a87cd45651ab1962512a89dfc3"): true, - common.HexToHash("0x263682cf1115cd062b8b8422d1fd79d1b24f28d9c843778e6896c2f82a388f9c"): true, - common.HexToHash("0x076600b0ac3e737e0c3f565be0522af42a40291a47fe5612592ede3c9b56bf17"): true, - common.HexToHash("0x4ec13b8bcc64f89413b4bbc3e0ba66e187bc218b7682ca3109f8f37cbf368b2d"): true, - common.HexToHash("0xf23b73197e0d9065ed5c551a7aa2ec1dc7be73cf0839642c0e1380afac9f7d7a"): true, - common.HexToHash("0x32e0e37fd58dc228b08a0fad6e3e1714b4bbea995928ea00a002956c501b6ebc"): true, - common.HexToHash("0x7d43f5b6fac58627ee0413e8110bee39bc42177cbd00130c4172d9d14f79a6a5"): true, - common.HexToHash("0x52207bc555b41186c868d993e94f17697a961d5915a43938ffd34162f23b17e4"): true, - common.HexToHash("0x5e0bc199799d4192d7fcef52538d0bad31b4514387a57877f40b6521d06826d1"): true, - common.HexToHash("0xd9f8a0640f83b84ec6ead5bda1bdf0cf4b32c200145e1cb380525e4e28f7f17c"): true, - common.HexToHash("0x78467ef812e267e961a50bac86276ccf990bb5ba58c20f5a8d83b5039961891a"): true, - common.HexToHash("0xccf17c198fe920897de03f992be8253ac9aa9b13aec7c669c4c3f0cb9348dfb5"): true, - common.HexToHash("0x1107ed7cc62234b6c8b17354001f2cc7e358e945e38fcb2c1127280a7e286fb4"): true, - common.HexToHash("0xeca1354cb40cedd003d4857073c5e8f590787c7a390ba05abd1ecd9bfc75520d"): true, - common.HexToHash("0x813545cc928ccd2c212cc5773624317a69aa495dde06ee99a35df2edda1e60e1"): true, - common.HexToHash("0x6a944004b6a5da74bd2582dac3a7d9eeef995debf09e23afc17c2126874aa7b7"): true, - common.HexToHash("0x373e721d2ed21e58d730f86270eb222c83d5f8eee713835293a0ab84ad016781"): true, - common.HexToHash("0xa0f3a9b6c89066223cfc3240d081c8d61ca2ec94c5c1b9ecf5a222a0e2defe6c"): true, - common.HexToHash("0xf4c43fa306f38041a99511a5e8e39767f42d0366031a407a5c03e69bd66af030"): true, - common.HexToHash("0x484feb1b2505b2c0fb9bfe72f0c446258bc26ac1f17adfad0cd7edd9524a3da4"): true, - common.HexToHash("0x7392bb704172b2cb3f75db214186ffcda4c674f5cc632701ae272812e19be05a"): true, - common.HexToHash("0xe0d6d3c76b5a0574c2f120c5d420831a7840c97cd6719dc708dcc0cfb4fd3338"): true, - common.HexToHash("0x78e746f8734d9bef0817a8f519ffd1307bcca0916eb89f99321e2ba09c1a5036"): true, - common.HexToHash("0x06783226eb4208a069134aa9a7d7f850d9689653f74263c925d77317dc15968f"): true, - common.HexToHash("0xd9769f073b07ecd4fdef2694e28a8731221e278a3bef1298af3951e9e3ad1e8e"): true, - common.HexToHash("0xd23c0720563c6fb9b847f97ba1ecad4a9a7ac53f714c5d3787c9449f905f4951"): true, - common.HexToHash("0x9b2fcbe63eb319304e3ff10bacacf41266810a977edceee2b81359dac407dcbc"): true, - common.HexToHash("0x9e4dcde9d47479e401ee50f326ced649278bb5209a507b2f4076c977f9a32440"): true, - common.HexToHash("0x67b13b5ae715b8e720f52dccd75995a3fad7bea21ff9e47c91a0829adcf4915a"): true, - common.HexToHash("0x079983f148701a0135cdf74171cddc322fd528fa88d3f09c0b591c719ab0c7ec"): true, - common.HexToHash("0xce5a53b9d6b23ae2e57525a2e8e737d3f5e949b1c1e471a03129288a70d51a88"): true, - common.HexToHash("0x4cb29498c722c6fead6e290dfdade1c6d7d6b2c1e7a6bace03957be07b9bd208"): true, - common.HexToHash("0x825634deaab3ea71350722cb9eff0ad53a167b60bd6f0c2f89be7f32f1167753"): true, - common.HexToHash("0xce73d2e07d635eb52c2fd34a19f4d671ced8d753a3b6f0272c2984e68a3b32e1"): true, - common.HexToHash("0x66867baa80799662ba4c7659a0f52f0ed77278060239b588a3a2baeaece0635c"): true, - common.HexToHash("0xa3dc1e2a05605a4e70dae014217e0d7e2964d9bc1a0b7e8233b510c3ab07e260"): true, - common.HexToHash("0x7720f39527a6b69895938fde2a726194a7f6499e7e4bf1d6a3df244557c09243"): true, - common.HexToHash("0x1d5bc016bfd305b7e167395b0b1b50c78e7ae9e22bf7966d680a75344a01687f"): true, - common.HexToHash("0xb260e505d1fc72c621a1e3d5c26b1f765260c97c02e46bb78a8799dc895e6346"): true, - common.HexToHash("0xe6a1dd0edda0ee5e22f287a13e7c3db785a3f0c7db4a5f3a73dfd57ef6784010"): true, - common.HexToHash("0x7da448a546802d1805417de1f7eb2fb473266cc199143f645568962902c448c2"): true, - common.HexToHash("0xb75c3ed5064206ba522b6a46523fba6d3a83d0820a0be860d63117e1321f1dbb"): true, - common.HexToHash("0xf06736529e16031387f1a5e865eb2ef65cc606ce6c9c265d305e642533d9f3c1"): true, - common.HexToHash("0xb80646754566de0fd159935e7ac6db708297db2fa8772fef6cd42e8c776cf21b"): true, - common.HexToHash("0x9160c1db814f1fd7a02f0bd76505b359f21b95d70629bf8a335ffe08b02928f0"): true, - common.HexToHash("0xeccefb106f8d1882e44b2552dd919e2939e3a505216027ec97d548f99fc3051f"): true, - common.HexToHash("0x09e7aaee3d238ebb194a11319a34359cb3f5e598706f5a162fdfc615dc2c02fb"): true, - common.HexToHash("0x8636089e29e80b110f8288ea79da0f2768b7e8bef2c169c207b256be10b49d6c"): true, - common.HexToHash("0x51a417998d8c86432c413c300dc7085842c2b5ad834198f711b3f66c8e972876"): true, - common.HexToHash("0x2710044b0197586142b1c77dff571b03840fe0e7998d96847b129c141df9f85f"): true, - common.HexToHash("0xc1992e9cfe1cc61ef605a88b96d81f13f9719c7f0e9b689e257148b597b3cf11"): true, - common.HexToHash("0xf784e1fb7fbc0c5d86a75971a56c0abeb64b981b84607792c87b5730ca485669"): true, - common.HexToHash("0x44399cf438b68d0391997c63017899dac423a246ebdf5568da728a053006224c"): true, - common.HexToHash("0xe604409880c62def003fb80ca397ac27216831e75bc3186e5880c10feb480182"): true, - common.HexToHash("0x7f600c507168215c79be86861238376e75f2a0b72ab7b68ac0abfe720615c460"): true, - common.HexToHash("0x7aa227cba5b19f10bde233a48dfa1b17099a3139d6befe488775ac12e0927354"): true, - common.HexToHash("0x3d538c878bcfdf9b998780f8004a678bd6698c6003cb56e24286d7259bd1fb2c"): true, - common.HexToHash("0x3a512ce604ad7e2770c95d9e4355afc65bf0985f2718a03cb4a0bb4aa69ade48"): true, - common.HexToHash("0x2afaf827908e5e965f1fb410bf1a023edf436cd053714e5591f62df938490c36"): true, - common.HexToHash("0x0798987ee8d62077c6059ffc27137ae3b8487b1f784472121d28f6274cc41c72"): true, - common.HexToHash("0x2980d5acbfa6e155a533c56b97815e6b50272a26dbc25682f5080a0c72cd82c9"): true, - common.HexToHash("0xdbe09e19c1d40f4799fa94dfe8202bd3043ea559564a951a9ad555fc3083850d"): true, - common.HexToHash("0xbf38e9c7dfdf0b778ff5026673a006855f62b1e3a3b074a1c390319d62be36e0"): true, - common.HexToHash("0xc7056f68483b3677c524b5c8d1ffadc6ea349d1dc61200c5fbb49631311dcf55"): true, - common.HexToHash("0x226cde166e800d0a089b13af1267251cc01832fb8520beef476ad0982d68f8af"): true, - common.HexToHash("0x2791a49275974c8d97cebd5386eabf7f1c9872ffcc620ede02a641fafea353ea"): true, - common.HexToHash("0xcd0b1321cdebe319755d4fd940ee781000daece465b480baf0305cae01817f25"): true, - common.HexToHash("0xc260ccb1b03e53070de5317bd5234cbafae9a8d33c678da6cf2eec0a963422b6"): true, - common.HexToHash("0x755218249731d9e26ab454d9e0d4dc39a925e0b8bf5c8eda9c1e18c8429a2c90"): true, - common.HexToHash("0xc4bde28be40e90aa25a45c36b3e2add416718573aad6a065a7e26879a21bd162"): true, - common.HexToHash("0x90d029d4e2d67123bea7f578a1649d1a4e3b6716b1e7d4491f180b01027217f6"): true, - common.HexToHash("0xf9c0d2380e840d51a3657f2e651800e60906d8fee2ba07d4d47d9b65725b511d"): true, - common.HexToHash("0xe5336923b08acce1d29f8f8e47360cd61b0eabf52f4e69fea9fab4ccc0117d56"): true, - common.HexToHash("0x0fe596ae3c94f3baa27b409ccfb11c444f0e3074188009d2633d1f24d42e0fb6"): true, - common.HexToHash("0x74b5e1a5d48acd5283648256584d7e882ca399e1b211bf641aa81f6abe1b44bd"): true, - common.HexToHash("0xfc0b846c7d2acd2a8247aa45e3203be358be68c821d011d8608e952d74cd73c1"): true, - common.HexToHash("0x5b889befaaf6723d5cb8cb2569aba14e4080406096ed632a0402a037630b5494"): true, - common.HexToHash("0x22e7f61827e812c37bba1701f99bbf0158044a8d8954e14c811dd9528b5d8d66"): true, - common.HexToHash("0x6d4ec62ec69fe9db6a5a80b895016ca76194ae748cbe17d3aed1c00082f17397"): true, - common.HexToHash("0x8bd3b8f0ac50df51d40ad65567fca61703802a4836b991e81a5d48b375158c69"): true, - common.HexToHash("0x23a6b9cc7d47ca8e09a0811c9154c97ead1954b83f370e98b7842e9fdc078b72"): true, - common.HexToHash("0xaa77912c3c8d9560673b16cddccbf46828df191f223a70d99d07817920a689b7"): true, - common.HexToHash("0x7024b9e813abbb786914fd6849811cd52289aaab9da1090115594669a4492c69"): true, - common.HexToHash("0x0ea8f0780d3482a378f2b4fce1461dfe2124b1f595dea253ccd5d823d15529ff"): true, - common.HexToHash("0x5076e9e9f5dab50e00ddfbd636a23cfeee15cdef145930bc5c573666df1333c0"): true, - common.HexToHash("0x43ef79c5d0b9c8718986a3e3bd003654ce31f22d1761d318465db4d3b0a5a645"): true, - common.HexToHash("0xa44774beca66c5ec71966db2bcae4d4039f9b8eac22ac18e74c936780a4b1c6a"): true, - common.HexToHash("0x85447f629bb17a6fa8fb26ac41605ee87b64a502ed433036fd3ca9f51cd09d49"): true, - common.HexToHash("0x1bd5f9f5144d2535d67a69a21337cc2db81d9f1a41d66142b3a39c501089873c"): true, - common.HexToHash("0xd80c5f20f70eb90640eebf03717efc38c672ccc1f9d8378d277d4a7cf5d18edb"): true, - common.HexToHash("0xaddab81d6309fe6824566cfbbbb32c52a0ddf8f5d7989e914d1f5f26bd783aef"): true, - common.HexToHash("0x41ce06addc1e15735e66603540a1634716628dd93a1598280f1a2e9c34804db0"): true, - common.HexToHash("0x8fe08c77043743f5fafd37dff53242f984ca4b2bdf1f2c89826bf16b8e8a3fe6"): true, - common.HexToHash("0xfee4064c890c2a71e91a45e7f90bba23a6997a27ce0406608169a480fdcc1f1d"): true, - common.HexToHash("0xb6f8629951ad3dc8aaa67e94ecfb16fc9b03058ecea56aff79eefbf25cf0c727"): true, - common.HexToHash("0x986a1f0152118ea5adc15016ad5ddff49bbe9a91b8f95529b9870e645ee28ab4"): true, - common.HexToHash("0x33d3d7c272b30c65a46ab8df9db600cece064784eaf7f0d1212ea9bcf1c67a79"): true, - common.HexToHash("0x7ec31957775088456be5293f2317b5227e4b25315ef212be9b7ce24d6f52bdcf"): true, - common.HexToHash("0x4313bd670adaef74f13209be344cd136bfb2d115d1d1b6d6ec229994918f8299"): true, - common.HexToHash("0x26204511e490175dca26a2659a6994ae92ca8d123c9bf49e654478dfba0a962e"): true, - common.HexToHash("0xb36a5da4ce1ec816a89a2f92d7f320ad06fdbd3038226b8de61c4e5f092e5b54"): true, - common.HexToHash("0xdf1ee6e3abfe16f43b47b86659cd0d1d61c85234cf50feb912a501cdb61b362c"): true, - common.HexToHash("0xb4aeece9d190a37079206de87a57481e62449b281f3dcc998dd280b293489638"): true, - common.HexToHash("0xbb2f522334aa40f6fe2d9e45e4f382978bb4613f794979b83ad56b7faae39419"): true, - common.HexToHash("0xc9e751b636e04568f1521adbe63141bc2069b5b9177179365607017443139841"): true, - common.HexToHash("0xc213a234e72fa0d6d5b482e0c349838cf267989c42a8656c5c03a2b420d19247"): true, - common.HexToHash("0x4ee568f5eabeef62a9134079ba823a17f9d08c7fc0501f0c2f1c11d789ef0f41"): true, - common.HexToHash("0x46a607d9f8fa3ba80f6cae193058a285617e112caa1766f65b22817e60c6572c"): true, - common.HexToHash("0x2c5403e92663ff298a4f033cb0e505f53a879744c7f2dd637d1de26b7fb7d9a5"): true, - common.HexToHash("0xd0cf6a64fba03412980be39273493069ef6838373b5eb0da68cb7f64bcf42403"): true, - common.HexToHash("0xa012d0b70742a3a4660813bacbaea38de46ead66bf9427d1734a3f81a02d61f9"): true, - common.HexToHash("0x354b6ad9456f53999c95d7f6b451c09047b432d7094cdc3ecb117565e9d0ecc7"): true, - common.HexToHash("0x2e9a0493e858b8222a5a50de5ced229ebc5c93b6e760204a1edab580aa2f9800"): true, - common.HexToHash("0x72e2f17d9ecb527d2c38f55dc98fcadb428b10c6a0518affa116f702a39ad9b4"): true, - common.HexToHash("0x30aa88b593aeec56da6efa5fdeec9320f0fd4ede6938fcdc37360bd8cdafb445"): true, - common.HexToHash("0x94dd8427b0cbc5088314f07c47bbfc9ffda9e8507f51d1d38cb9872369280e09"): true, - common.HexToHash("0xba716aeff5f36a49e626b22aa7a57488f753e27da8f7caa9fbee3e70ca1c79d6"): true, - common.HexToHash("0xecc76e6ef9f013735e1fa9e1a5ca408076bdfae9401fbfe3339846eec4e0dc62"): true, - common.HexToHash("0x867aeb6188e86fcfca0b3dda71e1e953cbc4298b12cf2300e5d771805894d9db"): true, - common.HexToHash("0x03d0d0ea8ffcabce110256578f3c07e1dfbe106e2160e805312189459af3e828"): true, - common.HexToHash("0xa8d7ae672b36124166826b36e7f5ef36be3ee08647047021788c26956915ba9c"): true, - common.HexToHash("0x70e2d0c8b5e4805ec2bc4b2a97a587a7f715836b4b2cf759cdb7d001e6b7f801"): true, - common.HexToHash("0x13882704805ea1aeffdedccfa2fb8ef01d3f6120f9fcc9f211baa0657a496c6b"): true, - common.HexToHash("0xaa564582c50105a16aaff3c3496280968fe1d6486680dc062ae49abd855e2416"): true, - common.HexToHash("0x3d329fa4eda63febe38e3910c146d3cfaae5ff440c7d6d7ee529473095e6a180"): true, - common.HexToHash("0x5413a5f8467eaa3be78f490209c9fe82a17771050aee7da7b63a01dfbcacb069"): true, - common.HexToHash("0xe643cdc9e6c087efe244f37abb783b83474057b23b5a1a2a57b56facded43c6a"): true, - common.HexToHash("0x1a6c97f09c2f3c57ab2f2aba3c0aa209a719ef8f840a07aab98444dfb3d8f18b"): true, - common.HexToHash("0x82737bc7d72e09fbdb8ec3818c598e92371f76e7fb8adf7382df206613949f16"): true, - common.HexToHash("0x29e875a3bd9ff43f7996d08f961d5e53683c685b542187b6c20d032bd5f36af1"): true, - common.HexToHash("0xc378e57f9b0e8fe97e7e67f2a289bc4372ffc5de145643236a6097bcb4b623d7"): true, - common.HexToHash("0xfd68ae6e81be7e72765c92c3734e5121de64508c2f6add5dce3167e5d79f1a68"): true, - common.HexToHash("0xa42b5ee3441c4fce0d3838b6b9f989f2f345bff82a33a62f3b01b6c9f1aba0be"): true, - common.HexToHash("0x7a4685fdd92f8844174e4b571095faedded9f810f5d6765833bfa07201b28c5c"): true, - common.HexToHash("0x722da74e52afe6acce5ea5f2d30e2621e873cf6801044f9c0eaa41bb25e17314"): true, - common.HexToHash("0xb83063b07b1f62fcf548e8e2dea76f7f3d934214cc7876ccb0538635b587f558"): true, - common.HexToHash("0x15e1a47a0ca58929d4b29e28f270b88ba8446733a51f4f6a9f61717ced63a20d"): true, - common.HexToHash("0x54e4ebac6a8d648117a0996de46732325827bad42f8d076a597aa41cf275a259"): true, - common.HexToHash("0x3637fcd14570e2baad010d0a0f535a90a5492f6f525ccd9ed492e0b5bfc26a2d"): true, - common.HexToHash("0x56f819dd3b2b5b716f474dd140819714fa6fbb8daa34ba5ef20cc7be887d9d00"): true, - common.HexToHash("0x01aebedabc732bd82991e75ef6b20fce103dfd09f64477e637fa8c22dcf4bd22"): true, - common.HexToHash("0xe91f9037815cb95ebf04e0a0ed07ab8adaaff1ab97236e280ea397770136a21d"): true, - common.HexToHash("0xbf9788392966afd059f4a19ff5fdea34e421b33e8f4acf5697f5ff63e71d2e43"): true, - common.HexToHash("0x2232aa9afa619507179a9e540b15564a3069808fa7677bae5a40243497ac018c"): true, - common.HexToHash("0xf936da7baa800d2befc6ae7d71168e8a7f640af4d20bd600ff0c3bd624eb4b6a"): true, - common.HexToHash("0x75a5a3aa1c29aa4ff15ad2afa37aa9b20b8a1a1d798cfaf5c16e12957df40563"): true, - common.HexToHash("0x0e3b22ed9ff18ea850bf7d1c6e771393362e70bc75c34c61397c68ba264b1e53"): true, - common.HexToHash("0x276867bbdf7651ee11e56660d11cb2fa24f95d62bc933e80fc7ec42303c24f98"): true, - common.HexToHash("0x53613a564cccf7d3cbe99f255028efb60e38d09bfe7f3a4ec50df2d8e414bb82"): true, - common.HexToHash("0xd51d0891af1170c97a0fb53ca81ece91814b53572661bc32a185c5892ff363c3"): true, - common.HexToHash("0x3e90f22776f8970b2e48fe3085559d721dc4b2080994f806e1f313988f3d4ce1"): true, - common.HexToHash("0x86a41c1f1ade006f1e5a74bd319bdf9bbdbb6dea42cee79a91dcb127cc988344"): true, - common.HexToHash("0x355be97f54ac8b65e54a0ef6bde8aa3668523ec5bad72cf5b1e90896a70315ac"): true, - common.HexToHash("0x69eb209876811b6a0730bcf753c218f91fa2080bc8bc8b771aaf8e72b7b87254"): true, - common.HexToHash("0x0a090c74812e2e1d60eda38f9cb911f686dbd32d80b0e056a063305dc38965ce"): true, - common.HexToHash("0x482f9b896a59e9dbb115f3b300c81608f8eac641af06676fc0a866b016dc3b24"): true, - common.HexToHash("0x442615744e3545c086bf7331ca39830b013dc167b83f2d896dbd05d995ef6d46"): true, - common.HexToHash("0x97cfefc507b3708f4c777a29484ad23644834e3936ccf9f5d2b67a0dd3ec3e9b"): true, - common.HexToHash("0xa344d5c48674c02f8faeb91386987d623fc41db0470c3dd54b6334cd13bec3ab"): true, - common.HexToHash("0x61c5e33b01f5498a8d95efbb7871fb0acfbf2aed144dc36c0a1d952d12bca243"): true, - common.HexToHash("0xf0f0182891029dc3e8a5e5dde31d0492e9233e596d53af293a3c6aae8472c0f3"): true, - common.HexToHash("0x366b6891cf6aa7170611398ad2ff9113055c486bc556bf6c8591d2b8224f902b"): true, - common.HexToHash("0x5d47d35e0dfcf4540d8c67ff956912a7334eb5cf0a5283ab783cc93875778818"): true, - common.HexToHash("0xb117b5021288f5e798f992119ad19ce2c7474383513d4e0346141c5227c58d34"): true, - common.HexToHash("0xfd2679926a161118713db56c145616d041bbf542b231fcd196061e6e15a73d66"): true, - common.HexToHash("0x018883e069c9e0765c04afd5dbdc8e4252515ba1488b0602b421017259262185"): true, - common.HexToHash("0x242d676c672af6ef316c1aa53f0456f1a339d13394113de3eb289724d14fe7f1"): true, - common.HexToHash("0xa385a438611b0f122ac7eec49206e7ca06393cfb70c1eda43a2958814ba4e887"): true, - common.HexToHash("0xd931c618d9f5eb6ee63e26f9465c56751ba7223dc4b1783a91ff7cf82ef3622f"): true, - common.HexToHash("0xb881cf89721b9f7a9d52d3a25a552a20f83a92c310c6a3bd91424eac180b3514"): true, - common.HexToHash("0xd66e74dbc08d946c2e64ba916fa0d26d85c0749f1932b90f06b41e658c054564"): true, - common.HexToHash("0x930200ba3e0079e11628fed46e10f615c35ef5d0ac1ac58b4eaeae894797f497"): true, - common.HexToHash("0x757631f405f2c8679cbf6b1ca7966cf9385421538605cf8d95240680755c21a3"): true, - common.HexToHash("0x24e653163cb078b8ce09c67d4849b400b30128cda264371a6494c8ccdb7c8868"): true, - common.HexToHash("0xfbf71bc2ecf8b82beb51297a94465bf3eecb1bee5df685049cb5fc2ecdc76935"): true, - common.HexToHash("0x5925c7f8b4c3c2866e43258bf2e6ecdcd3fe8c1e7979c36985e7c8f7baeee1d6"): true, - common.HexToHash("0xdfad26f8cc75a87213c467f4bde23902761bdc1a7f620a2066b04e9b92735671"): true, - common.HexToHash("0x8f076de441ca6ce3a3c58fd6f2afa562251301f2b0bbe774bb59a99827d3907c"): true, - common.HexToHash("0x349928aa86ddac0c0c774963f869f4952af571a8210914e39d17d0430a2427d7"): true, - common.HexToHash("0xfa31bca9762b8f38788683ffc2445ea579f28ca630d1da8222b84ae82c258738"): true, - common.HexToHash("0xf1c8f530f3fc8a09b14ca2b82c2a0ae4dbdb7ca87258f5af4c3612cfdcedb7a4"): true, - common.HexToHash("0xdc8bb3329747a7ae63f114d8487460318cf06e6db21d29301db63ed4c53335ec"): true, - common.HexToHash("0xc6cbacf78e302a64d647032d799326f2595a8a48a1e3729eb045662b3e8bd7d8"): true, - common.HexToHash("0x4726cbc792f8dad662aa59e5f826ecb72741b560ab2b420bd3aca907f079ae9a"): true, - common.HexToHash("0x41f405fc6b92930de002e9fb3a8813a1457560015e93aae58fbe2bc32fba4cb4"): true, - common.HexToHash("0x57676595f7fb6cccb7dfec47112c67944ff0eef28eb58d1ce26a4c8f16835704"): true, - common.HexToHash("0x95ead7e0a47bc01ba91966a15c7dc0c71c553f1bce69d5501aaa4ce546db5782"): true, - common.HexToHash("0x15fbd9afdaa2e3c8bd5f27b2f5810c20069cf7dd6da9398b2582060216a74f83"): true, - common.HexToHash("0x378535abaa8bf2d6012a4bba59453833ef84d216f8bd4f8a921f1b38412e517e"): true, - common.HexToHash("0xaa7e90441fccfaf091e4324254b2826e98240051ec1e430ad5da397a435c174f"): true, - common.HexToHash("0x17b2bd88241cd8fa7ab092ff97d6b06f297613c4cc32c0c8472588f3d25a2c5e"): true, - common.HexToHash("0x68a8bc4056e030388c1b31239a2540692448ea161f84c7f6f3d935fed82ada01"): true, - common.HexToHash("0x679c8b35e84f0fe2f9c94b8d1cc019b8f457e738ceddf6fdddca37d92758e40a"): true, - common.HexToHash("0x2643421d96744d4419eb24d9a3f81cb63867c0d3547fecba2aea48d4baa5ce16"): true, - common.HexToHash("0xaf3469e2f6b1b713aa6b79bca2f968d336e2d961afefaeaa750198b82649fab3"): true, - common.HexToHash("0x59da2fee0c0189cf6533e1fd84c247ddfa59f7c3e170bc4263c2bd06528e6029"): true, - common.HexToHash("0xd52fd09062cb9b1b4d6672aa1b61478f988273ca65e728a54f6beb171341e425"): true, - common.HexToHash("0x9d40f2e24d8b68cd5194ddb6d730fdf3c2e05ff9849b2c4a6e4e1d11ee60aa06"): true, - common.HexToHash("0xd83e0de482bf601e4404aa888137e9a64e0880d5a582131fba96265df347c7bf"): true, - common.HexToHash("0x57acf431344aa65a46e49ac6ce08002cc34a4348cccf7240df6c8bc42f324446"): true, - common.HexToHash("0xf212e273a1f474c78384826c73b9eb04950c4a6c1a7d398a2ed738c2d105dcdd"): true, - common.HexToHash("0xaf6f80275564bf0d987e4215b43745a52e1bcd152ff4e6c348b5e3a1df656e56"): true, - common.HexToHash("0x122061d0b25eb571108271c40f4d060514bfad66f57c3106cf3e932a2b143e71"): true, - common.HexToHash("0x560eb7789abf38a0e72b44d0c89fd0f07b0f65390b4118886be350226a0433bc"): true, - common.HexToHash("0xf9ba9bf0a93f13611101cb701842e2f803c07b0f1f17a04e2e14fd5606958d12"): true, - common.HexToHash("0x2fa12b4bea2d6fa64c0a1336dcf810c126d1234e539329afd88eb37ffc1563eb"): true, - common.HexToHash("0x4bb25d0f6675fbe00436248cb130c25044ef7995b57f0067fccf38b8167abbb1"): true, - common.HexToHash("0xd9c0a4317a8167df23fb6dae39383e60f85a9dc693875bbb510dda6a3a8c55fe"): true, - common.HexToHash("0xe87cb132aae852d2d2fff549d49731aa709f8d82a7960c6c833e91c9cea53fe5"): true, - common.HexToHash("0xecc55d677815d5ba009c33bd8f83caa95f2aded33c29602840fd828fa12121b9"): true, - common.HexToHash("0x665faebc6d33c47c4e2c7e87dcd848401c0ee71ec9e3161aec5e9662d0632170"): true, - common.HexToHash("0xe32e4990d3fc66c4fdd86d8a0ae49577be2edc50cd3f45961d07af8382efe49e"): true, - common.HexToHash("0xcb23021c51d430098ad76689c0b7d58198deaad85fbea1891a05e9903e5630fd"): true, - common.HexToHash("0x751de7830fa31381165054e97a5e3bc6cc8959c3cd83c3ff8a3014d468e2270a"): true, - common.HexToHash("0xbe5de8a895a9a5d43efb61d1955000d44e05db0ddf8b0f1fdfc2e05b94a7e59e"): true, - common.HexToHash("0x60d082f4d3a5516e54c078afabdf32fad588c87a8d7d684704c4bd622a5a153d"): true, - common.HexToHash("0xb79e410c8ea9cfc33eba43b7177e87f0beba1fef6b9c362d2ca56b9a75cfce98"): true, - common.HexToHash("0x7a4f3fae7610940f7ac2830f7404ca5849d2242bc7c5984ea42b0d9cd8316188"): true, - common.HexToHash("0x0a1e4a112ac6ed58da58378dba156a22c55cd23eb2ec8587d8bbd91d2c542c40"): true, - common.HexToHash("0x3c05d0b3ee8d16b2e7c1ebb55281bb17a662598666d3f06a760d8b27f77d16de"): true, - common.HexToHash("0x188f08ea1214041af1c63e64cf563a19d9d6b03d9e1b1f9176fa8e55b387cee1"): true, - common.HexToHash("0x5a2ed3a1703817e3d37fd94e8bea0c0b3c116a83d281b1b87e114812b169a56a"): true, - common.HexToHash("0x841db7ffcd00acf0f5e075b95eda6907e0594456a741305939dccab6652f7502"): true, - common.HexToHash("0x330396a842568c2b827d63996a276c80224c4f6092f132272f1c86eb021ebe16"): true, - common.HexToHash("0xb239255914aabf3ea2befe180597df96366ecf499d596089d82da274be576b6a"): true, - common.HexToHash("0x841a9a6d6a446cf2ace15c0d5a780f374093ea6a5292d1d8f83f5a77afaf817f"): true, - common.HexToHash("0xe3850c58e198f3a50192410ccdaf66b939b1602d670e761584dbcec6779db7ed"): true, - common.HexToHash("0x22a9bfabc4dd469c33d4b41bc4ae852bb0738a769ef4a52fc52f1ee90077fc62"): true, - common.HexToHash("0x1a849ca0ae1235e89256bfed3947db7c6630a69ae7f94b06bac564ba5486a088"): true, - common.HexToHash("0xb29b8848a33bd90a0881885a8f51d07c3f8a28f396f19b58e04acd38c6f1d0a5"): true, - common.HexToHash("0x362a18e6313c38a132f50ff6961fc1cadad0fe8f39aa50a8c20ab27087c30a57"): true, - common.HexToHash("0xa3cf75cf7de7238f13717718034fccd3ede32c84866ee465e0c304323ec02d70"): true, - common.HexToHash("0x9571134be51a014b73664de407f62ceb6677ca7172e13e77ce5e64e585c5e5cb"): true, - common.HexToHash("0xcc1107b26bf17615de9e1c49207654765f5b2a37a39cd9d7763b97356cbefab9"): true, - common.HexToHash("0x527471468488cdf4114ec465c36ffa094cd611c06e4a9e7bf149fc13aa1f05b2"): true, - common.HexToHash("0x1f06ee257f715d3d137fa3d8b16f788126a1210dd46d4aa9b406f28ea91b65dd"): true, - common.HexToHash("0xe3a1e498355d310df24ba714ab2a3fa1ffeefee48e2accbf450bf2f2d718f6c5"): true, - common.HexToHash("0x996f1b915ca4e51673e48a93c44d2fb9407fa7ab9c034da76aedf50fe406761a"): true, - common.HexToHash("0x6df7d4f5037136c610a093552c44b4bc9de8a96894dcd67ad94694fec3f08d7f"): true, - common.HexToHash("0x55f575f86b750218002084622b3bcba39cf1ae4987958db8c5318c42d3778ecf"): true, - common.HexToHash("0x2172b602ecb1550cd2d5816c5da8f5e1cec962f9c3f7fa7582bc0e9f348ce465"): true, - common.HexToHash("0xdc745a1f5fb5461bb1120c52e93c76cb7321fe92f5addf2d0d84dd2b21e32e4b"): true, - common.HexToHash("0x915477b0c2141975ef5b7550d82247f0989d25c1c0d02c061a13ed2ff95d8b4d"): true, - common.HexToHash("0x7d412331501be99be0fd2039e83052c97304f007a7fc7280b963e98a90e50c34"): true, - common.HexToHash("0x984b6148891b14636087a248383334edc3ee8c0ed9da7d6ee17bb6c869a0784a"): true, - common.HexToHash("0x315c82cf7aedf0fe2b1ac2841fce91b2f21558ad6456d1d8d2836a57a5cfd230"): true, - common.HexToHash("0x26f0d739ca477e077e4522d5adde9901734a2dffcb86893bdec112081fed56a1"): true, - common.HexToHash("0xd26cfa6c063dfa5c7a6f4f0228d113829594afc01ecfcc97ed7f6d97e6c0f899"): true, - common.HexToHash("0x709760dfa2639939472484953b28c098cfb6691c5df425c8b26eebf3c43f26fb"): true, - common.HexToHash("0x84de4150d3a2a26920f45af8d9fb41f94633dbbec9a6c26c8824537c8761730c"): true, - common.HexToHash("0x01c2278637f606a74b138af70f4585b6ca4590fda36ad1103addf8d68246185a"): true, - common.HexToHash("0x951276cb2d2532c14fec89a8ea030da13a8ee9ed77039080f6f4f193d857d472"): true, - common.HexToHash("0xd13fe0e344eaa4f1193a99200e2d18a6ef92aa8b3c975e2b5279b9c2a7ff9579"): true, - common.HexToHash("0x04ec0e0b916a05f8f444a43d4710ed63b4a714c76653ad976998a50dc48dfcac"): true, - common.HexToHash("0x9bb3ea37108308cb7c5eeb797ab1abc2c5c1f1ca09c878176d7789edfe9b95e4"): true, - common.HexToHash("0xdb26e9c3618064752c1bdd2ffc6a2fc76ebabbb047dc02df1f10e9ac983a3337"): true, - common.HexToHash("0x3bdec2ae0758dcb0d7429c7fb635e8fd7087b4ea91d8617f23f955485684ee0d"): true, - common.HexToHash("0x7359facde0f245a8c2003acde673fb1069dd2296870da13b2454ccd1abb8f68e"): true, - common.HexToHash("0xf807184c7b0a4297ce09360d12acb7e637e1d3dcb74fd023ca7fbd4ae9c9f48d"): true, - common.HexToHash("0x0941e5557c3f2608c689de9f034e89089b70a8b0dd51b2d1a67944a6deef81bb"): true, - common.HexToHash("0x476f363d9e92c13b223c04c17dd753280330159d951581cf9ae1bfc2f70c1bb1"): true, - common.HexToHash("0xf4959cce54965d1f6a8dc77aa4d47a1c3d2c4e0dab43688e262145bfb264179c"): true, - common.HexToHash("0x12cf06495111e300c2b6903b0cfb970e531d84c6b37aad1ecdc4f57b21d539fe"): true, - common.HexToHash("0xa9c345a62c65c3e79d49380900d8d4c82af5ab8e587daef911a72639f6412e95"): true, - common.HexToHash("0x985196c1c6712d31bcf5555cf86f8243cf4158f29b8b8f7d1efdffb9a41322f2"): true, - common.HexToHash("0xd0f7a95737f583d7f15a19c85b51adeb1a7ab162db87d612fe7af76c44469924"): true, - common.HexToHash("0x78883e5b2acb91cf03d1c154c3119479d6ca3412de5945fa3cf26f67cb02d334"): true, - common.HexToHash("0xb0aa884cfd153ce6bdf27c4ad767cff287772dd7ee48cbe254f3430888396c91"): true, - common.HexToHash("0xd91deacff2f8e6be50c0498f970701e507f2bbd9e0facbb63543a323b872e88e"): true, - common.HexToHash("0x1413bc931b885ea9efa4f2c47eb2d76a41c9593f0774a355a4b949aacb01a66f"): true, - common.HexToHash("0xd2618945071a9a091c730841bb269ce1bf3a8cbe5a49e0bcf1d4cdfb4f0367f6"): true, - common.HexToHash("0x53d4891dfa874794eb7bfdd02b389a9f02cdaacea014ef5c67c41f1fc49ecb96"): true, - common.HexToHash("0x9891205972fcbe9425d3289a38bde370759c58ad9c2c4625f72d5ec25729c0d5"): true, - common.HexToHash("0x8fb3f1c32ddd0e7489686cef2cd91c616b57420b47b45761a5671e9a612838b8"): true, - common.HexToHash("0x1759edfb22df37d62186a835915f88173584fc8d7f7cfbd156919489ca4e0ab8"): true, - common.HexToHash("0x73fee87b6717fc30450a2994359ed4b5609ab0fe8b96b6483d539d100c6873ba"): true, - common.HexToHash("0xa01b1d19e9acb9e369d41c22eefd7a382acae5fe960c411305935caadf08065b"): true, - common.HexToHash("0x4730004d034fd329f61ace9ffad9abd7cfc86d028934c2038f6305105fbb0091"): true, - common.HexToHash("0xfd899af3dfb4d0c86ef1a3a8f05cb5441b12976b9fc53f1e3584ef57df6d8828"): true, - common.HexToHash("0x543bc322279299e15ca4f17aeb600c628d90c41ff913a0b92eae5af82f32ede7"): true, - common.HexToHash("0x387cb323c2e6058bf76555e350a24728ce07d2f96364f374d0d670a9619081f7"): true, - common.HexToHash("0xa6cdd1ad7374ade4c7bd8e7d1d12d8e26e0fccef95bb18577b462e552a05680a"): true, - common.HexToHash("0x4ff7b1e89f28610aef635abaff3a4a7ed0e37990f1c39d8a31ea0046308f1e5b"): true, - common.HexToHash("0x095f9f3595e81a7bb66e99b338560696a9301da2986f3ed48e0ad0ca6dd09609"): true, - common.HexToHash("0x9ed0781853f1159e8bd93d948b326fefd8de2a89baa545b96b50ab6521e38b18"): true, - common.HexToHash("0xedee5d7b53cf8816ce689f52447e8d5387b3f244fd4802178cd3de8918f052bc"): true, - common.HexToHash("0xdaf6d02a78c15bfb72274afe0f4077e4ad91cf1e619805364577286ca40433d7"): true, - common.HexToHash("0x86b68d0d4d3216442ffc831665e6426be37400b6b73198f475831c7cb4413517"): true, - common.HexToHash("0x5397f0b85bc19dacab3c24367e96f6f5cabc6034b2c53eced6ea88ba3048cff7"): true, - common.HexToHash("0x941fbc50e57edc0b032876a70f88e9c00e35e82115b5457db5f9f68924cbadef"): true, - common.HexToHash("0x81f5b4a487465e097bde1ffe03b48dc3df3a6506c8019e4e9ca98d3355615267"): true, - common.HexToHash("0xa80dbb5f1eccb0c3111b1ced4ec28795c81f41bb23e70499100fb4fc6ac36332"): true, - common.HexToHash("0x47fb6da4e4d5625002ae6c477cb4ee363446eba63e56aa35396cb7c235ff373c"): true, - common.HexToHash("0xd983ff95cc96df1ab26bcb2242dd8db63fa8de20e4dbbf6d83872eddff67cb57"): true, - common.HexToHash("0xadc45830be98ad6cb8f1ff26e7ee69b556f914919b8ba30c7f767da4d9b517c5"): true, - common.HexToHash("0xe9807ca2a03014f678ce561462d8c41e8411e8ae205d9851ba00d07a3d459c7a"): true, - common.HexToHash("0xf3569691bdee3e7db53ce1702fcd80c78e4f15421fbcba1aa0308c78f156f4d8"): true, - common.HexToHash("0xfdaa657ec58814ded71afccab5ea923432315bd84cfc20e22b6301949eb54a69"): true, - common.HexToHash("0xae58b3e6eb9589449cd145568c807645f217a0bbc3d49f087c08603e2898d185"): true, - common.HexToHash("0xf8291d09d4d423b52fe8d7ab09df5af8d59255f3575e4f6ee6744337d63d84bf"): true, - common.HexToHash("0x4301e6acce4433f10da768e3b6233f75816c501141713fe0bb33390a212bd047"): true, - common.HexToHash("0x7781aaa02dc9e9a636ff4a3ad345f401b9a3cdcb109b68fe6929f82fb980abb9"): true, - common.HexToHash("0xe5bb4d91d918a38cfd74e2145265475c71e9d0a166031bb9cbccf5720a7680ea"): true, - common.HexToHash("0xc5d0a0ca0e158999cab8ccd939c88df1848e836453759dc1cf52fa3f500bd3e5"): true, - common.HexToHash("0x0695cbc8ad05206a17712db0116dc46ff28514f5c5c35b90a2c64e728854ba3a"): true, - common.HexToHash("0x9b8d7a6b1df67590d3283d10f36f6036a9b9b0c246b0f927681b22d44917e1a0"): true, - common.HexToHash("0xcf2731cf5b927260d6d882f040eef64f4ac5b18da266b0a5efe4563fba76764f"): true, - common.HexToHash("0x67e5756641d8f313c07e81205b430b20e4c5abb81e71745871928cbd77874a63"): true, - common.HexToHash("0x79776477e34cf851752bd50dffd3e29611561072703e2f3e08c8d1c233356e54"): true, - common.HexToHash("0x9f809e1a0c5a3f0cc77b8d0ff3d3a205c088a4ee119d093b25a3388542a8ee66"): true, - common.HexToHash("0x8709d34a36022edea5d5477fbdd057e8714d76d2994ecbf7f9646eda14fe8773"): true, - common.HexToHash("0x7a1b253fa850d4d95f204430152ae96f716a92378e1a5bbb2219b13d6a11ae56"): true, - common.HexToHash("0xdbfc76fc3bc8f81d20127c8afde6e14a8e8aee14a953181948cf22736de5675b"): true, - common.HexToHash("0xa397e7eb0136a535510021d1fe5892b0b34a63cf470de390b5c18cc47feeff44"): true, - common.HexToHash("0xb4b593069fc772a3dce810513a04418682d1a3a66af159afac851a3efd490c12"): true, - common.HexToHash("0xc84e90842e4bfbd7d56cc4b8c73413911601648f04c74acbd34ad1b7f9053286"): true, - common.HexToHash("0x86f2fb1d790a909d3514b2d9e0a2dc55777944eaf998dd15aa2c12c755881bb0"): true, - common.HexToHash("0x462317c59094975253fe953847cb2cc8a5c936007ea1d04697cd6904e0023baa"): true, - common.HexToHash("0x953fe9ea654ae982f021fe205a6cbe4abee88d5d1c557d032506d08a1167766c"): true, - common.HexToHash("0xa388540f3aabf598ce76bc02d9764b327dac78ccd0f5b6d6119a8d4348c48f59"): true, - common.HexToHash("0x0caed4489628cfef0bb348acb92bbde5ec150b0bf7118b7d59c35d7c7762587e"): true, - common.HexToHash("0x97c7d77ae16fcb3c47b3510393596ecab6d5858b78e8b9a0b17aedcda9ad3629"): true, - common.HexToHash("0xfcca55489a4ebedb7de9ea15ab202687a5980bce5e13c58d8521aa237dd8548d"): true, - common.HexToHash("0x3a12a9ce41df360d4ed7ed0054330ba52fd9bd2724a0ec8674f4e53ea08d0da3"): true, - common.HexToHash("0x806e3c12c56d5291516633d1304e988e97c143b6b52555f989dfbdf060d9cb8b"): true, - common.HexToHash("0xa87e70a182ff09611c1815d350cd757257cf926d26aefb00975cce91e208d3e9"): true, - common.HexToHash("0x2df0dc1578f7014d0935ac0c9fc14120af3c7ab6974b0bad440eb5fa42047769"): true, - common.HexToHash("0xcbd9d9bd34e01e3108e7c7c40f11b813d335a9f00a2be9b8cc8f476718ca61a4"): true, - common.HexToHash("0xd95e034bc09528e731eca6b53401eda03a93ca6be76c1d886f7cb3eb74b7dc2f"): true, - common.HexToHash("0x8f3102b6bd3f3503de6bf213e3c2ac7dddda13064aaa4ca2ddd33c895912b411"): true, - common.HexToHash("0x809c248b7e06b20750291ec6848eb2b0bd6813ac44c9fbf129fbfd7ba676eb50"): true, - common.HexToHash("0xeb561531530017cd6ef26ce9d36e78c6483b6f0f5bf386ef04beaa6b45cb54e1"): true, - common.HexToHash("0x65475202c15391bddff3a8415f6cd272d76b793765839db95cbbef641efff756"): true, - common.HexToHash("0x2e29addd2f94cf5b72f773b939742146818f5049c09151b962f58277b0425b07"): true, - common.HexToHash("0x507f797a5a0241aae79efa3c75f66b027f8259c44bb40054f461fe8b35d2aff9"): true, - common.HexToHash("0x88b618eb78cd297dea3d1841a7c54422b6e985a3a3906d5ada83229bc3db1c28"): true, - common.HexToHash("0x07c21ac0ba4dfb48aad9e245d18d2fb8196e8114e5ba820d891048c7d7f5a04d"): true, - common.HexToHash("0xc164edbc9dce3f96ec511d0a0cc3625533941140067d805d1f4dbe9b590ad90e"): true, - common.HexToHash("0x0b01480b483b1f84e72b1aa0e278abc6fa6dfc8515bcf2b82dbbed3432d3b887"): true, - common.HexToHash("0xf04f934fb60aa619f28af790b67edf0c957a17d95a6bd85c2c3cbdecc887af74"): true, - common.HexToHash("0x023477b55f2221e54549676797a52450d28981bdd821e0e9988a90832ffb148f"): true, - common.HexToHash("0x680a8bfee228865c25976c033424cba1ff658159e7e2c3d4ba95d044e40c07d6"): true, - common.HexToHash("0xf8580e0cbf970313c6f878b015a7f68bb3a191ed4679f31c96707a778764b29a"): true, - common.HexToHash("0xc63131ecdb6d20e497c89ad2a8dacd73845718436d5c3e1482432a3601e686db"): true, - common.HexToHash("0xfdfa11a1e35c6d6d851f922a3d471db45bd6b0d300de11d0467843905ce8e6ea"): true, - common.HexToHash("0xe63376237e76e93332a60e913359f87b4980505a8dd8f7eb6e17a7080a22ce51"): true, - common.HexToHash("0xb424ae2ea1752d8dd01bd67d0ab592bc4b357100accd9cc5ea776d778a014801"): true, - common.HexToHash("0x9e01e32ef6d65e18cb67c4e0cdbf006dacf9d8a09bb6f29ee7b0ac42379b6541"): true, - common.HexToHash("0x85a81be0261c8649c8c8c95a93f9750af10de59688f2e92746881449a4476458"): true, - common.HexToHash("0x1b2e51ba61f6963daa8f6676310dc02aadf3bb61a7dfe17dd5a834b184097349"): true, - common.HexToHash("0xc32f81e09adfb6466e67d412f8bc6efde6c3e2934ed219027a4aea6a58d6d3b2"): true, - common.HexToHash("0xbd998f21616aa2292e0755d0e39d460b00353b54e875a35025fd82db2151a2e3"): true, - common.HexToHash("0xd7827725ce17738a9dfa88a70d5b36273a0625cb497e8b9270225d2c0456284c"): true, - common.HexToHash("0x0e956dc9a74b595256220bbca0449887dc9065f097ed365f60e5cf4893ab9374"): true, - common.HexToHash("0x3471b0bf1c6b14741766b8a6b0fc60ade6d8b2d3003284525749f9cda250abce"): true, - common.HexToHash("0x004282d6f25f00033f2574a7a6c9d010ffeeb9b4d2f31468fcf40969bd328501"): true, - common.HexToHash("0x5632b1e8adf1a9425db6d9e2eda0b56b4e882920f1c26a0d2557d6ac911bf3c4"): true, - common.HexToHash("0xadfc3645ed8f97bf72907f3a534be5668e0a71ea22c5b1539230d3817856c878"): true, - common.HexToHash("0x7d1838da0326c08e1c158febcc781634658790ff2f32939b84653eb09c24977b"): true, - common.HexToHash("0x755b17b1a6108106ff84a47055d7932d5aa8646e208b32fd1c9995d2e478a4a4"): true, - common.HexToHash("0x2b1b4b323d88c370f7ef0269851f564d2b5efc8265e0b4ee6719a5f60f6fa549"): true, - common.HexToHash("0xcd26ff3943c0adf6f2c47cb1bb5065bcead643af201275459d49ae47dac9b161"): true, - common.HexToHash("0xc7305d529707cca4870f13e6aa51c2a352ff1625f77825e2a034532776d1aa02"): true, - common.HexToHash("0xd2cdc58715d2e088f14265682dc5db3ba42c34f6f6ed1d75bceeed81f7c735cd"): true, - common.HexToHash("0xdfce24730ce78960c693222e4f4e7a400a901a3cd5533c279a24a33e7feb704e"): true, - common.HexToHash("0xa67020205de4d5c31d0bd5caf6f316572479050f5936804d566d2c345f849d58"): true, - common.HexToHash("0x84f073e589c6a68cd7fd9bc49c1c609a54ecf034eec06fedb74ef192653b50b5"): true, - common.HexToHash("0x35805954189d6dab6a7926f69d2c8a4238f9e34d25a5b7014ede771b088146d0"): true, - common.HexToHash("0x859375ae7d2c64e624e895e8950ed6074a1989b73c0d49ad25276fd26eeeafb6"): true, - common.HexToHash("0x29db63b3cd6881f9c2cf30582d7d7e06be48e071b10a13607abd25316f96b6a3"): true, - common.HexToHash("0x406afcb86da414d56a216344a1809af19b64fe712ea9300b99ba317e5701bf0c"): true, - common.HexToHash("0x77866f561647be2e06dd5a10dabe4871d7e173f880d7e8267a7264c398e99dca"): true, - common.HexToHash("0xc1b79da5e3fbd33cca2dd10e087c2b15989aaa9a0657d143b12141e4e30f0f00"): true, - common.HexToHash("0x3217d05e53712662ef9fcd4adab9d2f7556d63a1b2c303585eebf94187ce27d3"): true, - common.HexToHash("0xb6d69cfae2c524defffa23b2a732f095195a366e3a74b039830582b1ae44a63b"): true, - common.HexToHash("0x1b4a37ceb090099e1830d172eefa55d3b92da5d3a761f3e7b32a814560e59fea"): true, - common.HexToHash("0xda4be59fe85feace1d880b1b8cfaa67416e13eaa6c12d07653bbb9a6cf34b4c0"): true, - common.HexToHash("0x2f648046d56969e02d1af40aec0be0785f4ffd6ad28a3f234e59436dcccc7b36"): true, - common.HexToHash("0x4f5fd5310197c296a4d2394ba852cc3eae288e5e5f382a65db01e5e7aadc6d46"): true, - common.HexToHash("0x6539e25a6a6270437dd5764f42c122575c3c35c2ea89ead2b749933f8fba47f2"): true, - common.HexToHash("0xc8bdf93808fc0abba56e2188b57e80fbce71e5f18b1e051ac70fe43d7769ac6e"): true, - common.HexToHash("0xa02fb0efaf89990aef17671f5afe5e742144789da041321eb7dec16d07b88f57"): true, - common.HexToHash("0x72e6dc054cd1d1a5f5e6dcb5a13a93cdcfc5c536ae8278733d5d515215ae826d"): true, - common.HexToHash("0xd37fcbc456a9806f349562267fc7b42fc1118e4b349b679a77890dfdaa620a8a"): true, - common.HexToHash("0xc7237b98a0e986f0dd90ee4761f6b14d80323015fadc725c3478faa4d4ce2acc"): true, - common.HexToHash("0xb60d605bab398d7f0299d425cd8883a0d0f6ace6881959eca1d08c15b1176cf2"): true, - common.HexToHash("0x05d7a1b8f7e3d48a53a810d9bc1bd1803149bf0bbec3c0dd1f1a7cf54f89b712"): true, - common.HexToHash("0x2f2c3e7dd45a8d78b3cded15dbc369e2ce99244ba2887476524c4b1495b271a1"): true, - common.HexToHash("0xd91510427b33f2e0ddd4b72b9278cd8dabfd8ed29398f745d70d6b2c8abe16b7"): true, - common.HexToHash("0xe573a4f968a2ba23e5dd9b5a40a6fee5f74831f4874a35fb0a0e519f40c64cc7"): true, - common.HexToHash("0xace7fb403b3769a497cc26bf8856b7dcbb7fc757382681458acc386a463047c3"): true, - common.HexToHash("0x9980084decfc8fe450b84fd43c31fbd5a367cb208bb215f66cb15462a877af44"): true, - common.HexToHash("0x473e57e8babbf3bc4ab7f543f16ea34fe69ca75ae267602516ce07cda4d65bea"): true, - common.HexToHash("0xbc013c91e89024e52fe9e9104bb1a31ddf186b8397745745f5ab250d0986a4e7"): true, - common.HexToHash("0x577180d28127d6c8e123cc5829525a70d18afda977ab6181fb1f9178dc57f21b"): true, - common.HexToHash("0x000cf7d6585ad32a8db02ef2869dc67914f745a3061a3c40cac6e604f6eee9dc"): true, - common.HexToHash("0x9c5ac60da61b31bebb5307223006214297fe6ad5a8eb7744e3ee31b5f974aa3b"): true, - common.HexToHash("0xd511db9b964583dec6cc46f8f6166a2764113f008f0d70e67a50427928398c90"): true, - common.HexToHash("0xc06b9f2f7f2298dc878f914a22861346053802979d4f37b20e0f7f8a369ff87a"): true, - common.HexToHash("0xff26dc697b6bf976960cedfe1d013512532a73254a498ada7eda5bb483d874d4"): true, - common.HexToHash("0x96ca1773d3d7ad6a1843a0ff73711b3d78167ead405a3395f20f600e6c1d4533"): true, - common.HexToHash("0x8e9ab710f4e5a22db424fcf59b1a3fcd3a678b739834ee2c9408df638cdedd06"): true, - common.HexToHash("0x29bd4d9fc48a142bb1832cbf0a0fcdf445d0f602e442235fb925159dee92b446"): true, - common.HexToHash("0xd2e687bd670a9c78fc7541bc901c71f8ff9d54c0f79e8adb8adea42d812ea69c"): true, - common.HexToHash("0x7dbf7a8d5352e2ff9230833df214d3e61257b19c9e7402f8e5ae44afbc026daf"): true, - common.HexToHash("0x100d1827eb16346dff4479f04038e04d2ddbeae7c75835e92a522f3b238789be"): true, - common.HexToHash("0x1c99b305447fc4a8e85a10566ad0071b88c6086b1eb45322c2124d2fb690a50b"): true, - common.HexToHash("0xfd4ddd4544af3801ea2739601aadbea08018fecc678c7a704c0316b5b3d60672"): true, - common.HexToHash("0x1e9c72a81952933892b4b3e3ac8f43c4d645e7caf7c31f14815187600d39c9a2"): true, - common.HexToHash("0x35bd95d8a39416bf1e8fb42b9c10e38d38c46c8fadc5075f8d2c6d9c17551078"): true, - common.HexToHash("0xfecc0b072dd4ceb2afb35dec752e4f72445cb0b848038230b4020514b3124259"): true, - common.HexToHash("0x6db747ee8905c9493b983a744f60b5fcaaca16223cf0cfbc07642262fd43a509"): true, - common.HexToHash("0x0eb790b6eb8cc2cf7a25bd04b6d05a0f22c780f5981efb5f077d096ba1d41894"): true, - common.HexToHash("0x03c5284021433b36444a95f4118e0a8d49a898004dd1b41409ec14ea4cb7f89b"): true, - common.HexToHash("0x523b13ef04e2f7889e42b2d3b22bd102404d6dee2f52928158d7990b9d92dda6"): true, - common.HexToHash("0x24b32b14998f2446bcaff305da38f667266a7f30e2ebb4b562bb57f954c20ff0"): true, - common.HexToHash("0xa9bdd3e1d6dc54a3132f35b9ed69d3cbf84895086ef6d6f44867da3bbfd35ff0"): true, - common.HexToHash("0x5010229ec3bd2e4eef8562a75ae0d5673e80e0e80d192f8e7d5d54faa9d6915f"): true, - common.HexToHash("0xa741bfa9b2743242847c53a96a6baa65bc9161ec9da9c4afa3070a07db020941"): true, - common.HexToHash("0xc3b282d6a18d8e9d7ff72abafda4c8d2ba8664e17c322a7efd293d12e2b39b06"): true, - common.HexToHash("0x5234ac098c08c641629ca3edf91d42a8c4ebd60952c25844004599f48476f041"): true, - common.HexToHash("0x5690d6ce3a3e198048638c65719ea3012cb8caa85d3532030228e6ff78abc5ec"): true, - common.HexToHash("0x2f043cac0a6924dc142ef2d9fd7d3cbf6e71f28cf861af67d08aada0335700d4"): true, - common.HexToHash("0x8eb2ed6d0e9991da91d2e3d844602efeeb0c11faabd0a7d20af97a44bc6c6d3a"): true, - common.HexToHash("0xaf6042fc391064bc34e59b352f526ac0db86592893367a823e51f319e2c6d090"): true, - common.HexToHash("0x802ab4c771ee677cdf23fc6544d4239d97eee9fcf8b939c10b20b33b8a78883c"): true, - common.HexToHash("0xa26b67c68c5727f2747995cc4b16055d442a9375d58a4094df9b9b48f8485e80"): true, - common.HexToHash("0x09f6d6280372bdd8796c135dd5d74fd3002cdfb56da8ed4bbc70e911b8130186"): true, - common.HexToHash("0x4a288470b30ba9e851d9d9ae347eaff996eee7209f3e6db6b042be501c3af5bf"): true, - common.HexToHash("0x8ef8e709b18a84b550da15423a78dc43eb4f5a12c2722b61f5f38ed1c7b0a3e2"): true, - common.HexToHash("0xea399e9981698d1c76738ed4fb74e16f022908719a55d89bd50a4bc0cb4c08b8"): true, - common.HexToHash("0xb05e6e0f900bebfc4c292ca13b12b4840cd2a54008a2e569650a667571623d81"): true, - common.HexToHash("0x26dc7cb035cf36a5a5f6edfe91a26706b15d794f646a5e5abe9c2b7761b6b620"): true, - common.HexToHash("0x652cac6900f2a4855131c4ad6d93355bed8f08745c7401ce9536c7a616a17d2d"): true, - common.HexToHash("0x2edf511075bd8152ecec09612927d90e5e8f88b9794f279dcc0ec5e492d73abd"): true, - common.HexToHash("0x05217168554130bfafd3ca86e8d22450bf7b769d59c2f17effaaf29b00826d0a"): true, - common.HexToHash("0x627097a07f5cfdaa9062d211d9a095648eb583c79cf8f707575a9c7315559d8f"): true, - common.HexToHash("0xe153c3851a435f405fe43ae255a7e9ebd4c25503c0c9f65b45019c2be24bc624"): true, - common.HexToHash("0x7e9dec971726b5c00d6a1b7bd122dd61c473fcc0f9b132e84833afb97655f7ea"): true, - common.HexToHash("0xbb1425b1b1697b248cb32cee757108a43261e4d06d5ac81b0e1e4f445947f314"): true, - common.HexToHash("0xf93323c2db911337465226088ae52e74bd1c2b90bccb27466f29f96fe99f445a"): true, - common.HexToHash("0xdc6c51e3923b385176e255a88e2eb3c0b95b2ecc59224a99e67cd055d6861122"): true, - common.HexToHash("0x056e84811a377be51fbea98faf3938ab74f3deb6e4ddaa01344dbb90fe632fde"): true, - common.HexToHash("0xa90587720a9f44923e4aa24bd0b29086e9ba0ba58aea1bb060feb0322bb87b08"): true, - common.HexToHash("0xd6ff15c842bde6e21505276edd9b9c2e66b63a6d26ae267ced1a07a6148a7c33"): true, - common.HexToHash("0xaaeb275147e64f8a4963f41f6223bad488ef89e8895fd82471ad54a9ed5088d8"): true, - common.HexToHash("0xac0ada9250bec445cfe082cc6bc0159f4572f5b4d388a508e1dda9d175151d5c"): true, - common.HexToHash("0x8d4767bb154199a6dfc610a558f86a3a5d82fa11caeac9903b445d87e9a94558"): true, - common.HexToHash("0x2e40322fd5d17ab15b53e7ca9f7ca3fb2640213a99bde680ae9fd5e7c8490e22"): true, - common.HexToHash("0xda4b0eb3e9571970477fc98620549cafde1fd9e3c8b01420702b279ec2c4f3d7"): true, - common.HexToHash("0x09b425a912d5f1273ce6aef4c0161b11eb17c524a290e9196fc6dc00723b3a6b"): true, - common.HexToHash("0x603c96761d16c1b2dd8dc5d7c3caa103c8ff07cd692e2df95f5be9cabc7e3b61"): true, - common.HexToHash("0x989633f533f764f772f6f49c29487a542ee7a84240b6099c1768d30c5565946c"): true, - common.HexToHash("0x1dd62903786360a68b5868f187fa2f48780c94ed00d9e80989bdacbc8a55291f"): true, - common.HexToHash("0xcef8ec18539b3d9c5b9db925f54d06e01d99e3d139c0615bade3db7eada86976"): true, - common.HexToHash("0xb385beb2c5882094efad817bfdb291af378a16366a249b2ffb17ee2c82f8224c"): true, - common.HexToHash("0x000cc1623e8a91f5925c5f0cd1525e75dd803a749760574e843db11d97d566d1"): true, - common.HexToHash("0x9ea89f98029e5913c7a947d29509ff20c915636b0e6f260df4ba32f213604f81"): true, - common.HexToHash("0xaf9bcb77c196cd477b7587868cce1b880e9ec2500df39ed583a992dc28bab29d"): true, - common.HexToHash("0xd2cf6b8d7dd91a12a34a7e604e1e0ce189ae144e7324750e6c4f12c23944dfe8"): true, - common.HexToHash("0x1916a21ec56640121c665acac138b0e44c4fdb60f022e005fe74ae1ec23d2639"): true, - common.HexToHash("0x087e85bb9d85f05e5c657f71f99e75c4c1f544ab8f3f6d40015dea8c8f3bffb8"): true, - common.HexToHash("0x45115a131ded66db3b665315d11f5f092df958676a903a263113be189ac5693c"): true, - common.HexToHash("0x83605785e2bef6ff716d09ac77b6fa02aefa336ec1e025ef6845684cd6f36091"): true, - common.HexToHash("0x175ee005165152af2e7e4cc4c8e1f41ed74d960416c4467e8646d11c0a914d8e"): true, - common.HexToHash("0xdaea97bc42fb2d8f6b232eed49cf75ed903f0ff34f9a09327cb3e76d84eca212"): true, - common.HexToHash("0x3bfe9bb22272752470f6a5b05c993a608c0f38bc335e7ee89a638d11ef976c2a"): true, - common.HexToHash("0xd254ab28f38431cec740105678310ad75f31193d18e79b699f8c68ab187254b3"): true, - common.HexToHash("0x1e477894f56bcc6a7ae12b097f0e0d470d237af87bcbb742a8ce40d0e7c510a9"): true, - common.HexToHash("0x3006d54eec05354125d06c4c102386ec330ef88cbd38183010e75f30a02659c5"): true, - common.HexToHash("0x531cb33b4592c8f4a752943b527070139f4b3c753f32a523fba12ee11b11bcde"): true, - common.HexToHash("0x08fd42c3160e5fabf1ec6c6162cbcdcbda193527f3e91a0fd01bf93e188cde9d"): true, - common.HexToHash("0xd235f09c355b979beb85b392d8a37fb745f7f8d68270c9ed40dfe516410a9131"): true, - common.HexToHash("0xaf102a4204a6f556c0bf2b940f245c26b27a71ebd00eec7bf2ddbba2dc730442"): true, - common.HexToHash("0x015d1eedc6bbaee82bd9715ae96d00ec1f71efaa45ba74c4c55f1d99715539d2"): true, - common.HexToHash("0xec5df676f2054d8532dca88cd3a4af7b553c23c6704cc2f93bc289cdf54ebbc5"): true, - common.HexToHash("0x2645e43ff48f3efea2fb7d3aef159798d56b243639ee99ff53fad0da44865def"): true, - common.HexToHash("0x354a493b8a4c9fed18f2c99ee836ba881eb327d16d07b28dc24adca4d364e366"): true, - common.HexToHash("0xc4464d30a3705110435b3fad73c9abb4233cf34f240d5022719e0d5b818cdd24"): true, - common.HexToHash("0xca9f1235614e37a14fe168cbf6dfc4fc24740a4b45f164c342600b51c126f1e3"): true, - common.HexToHash("0xf3f6038882906fa48af23b28b8b150f51d2443ff338fabe99304d5e6b9aa0b5b"): true, - common.HexToHash("0xd35b9a534b221e7f066448b2712cd8bc448b55f33528c150ea1eec9ed89c8fcc"): true, - common.HexToHash("0x16f4b59f995541ad3d21cabd9f2a8bbcf95a2963df5838e0b58c3b7b013645ed"): true, - common.HexToHash("0xa80114500a7718b29a4bdc7281a90f5a5189442daaba0bb657e773293c47ee63"): true, - common.HexToHash("0x3fbaadabccf2c86537b57dc7b0247b8790778d9342147ac9c1537360d4c6244f"): true, - common.HexToHash("0x059496d56846ff6e84d1277431992d97f9a2aaf8088064005275a198fc90b12d"): true, - common.HexToHash("0xc8f63b292108bf195eeec139c9bb88f7237db73e8b16a5d0618b0a18657bbdab"): true, - common.HexToHash("0xb995a615cfa39d423f0fc218a90da045dbbceebe8ac0deb0ebe59f409d9870f5"): true, - common.HexToHash("0x3de63ce158811de64850d2b92f02637fa17962a9d0d43d3b210a645d15736b2f"): true, - common.HexToHash("0x156fa1784d955d2e1e2214f3d4deef8ff17e6ab4792cc9593813fd1abcffbcb3"): true, - common.HexToHash("0xa6838b9f4115fd6d64024f6ecde2ae20bbbe6ce18b6bde54d7598dfd7b10b4d7"): true, - common.HexToHash("0x045c2a96c3dce12447f17562d0a5fe38b336a19109d83d6dc2af2d63c8c29803"): true, - common.HexToHash("0x5f9c50ca28a4c1d9bc1236c4b94675ad11b1469415c575b4b17527e7ff8a7684"): true, - common.HexToHash("0xd088ba1921b16a45224552973f9fb455e7f66e838b50261c8aa051db5f40359d"): true, - common.HexToHash("0x68cdeee78557d68a5567625e92939d6adfe43d3cb70245fb680561a18b5d0b08"): true, - common.HexToHash("0x4d1d6162a08a50b61bfc826d6ddeb530382c56435a237e4a2025acf43869e286"): true, - common.HexToHash("0x8647f190987b2ff97980dd90452dc8174d666d635756fd41abf1d1aec639bb2d"): true, - common.HexToHash("0x92ee69c01906454b00c40309a6b094197e7e759aec3628c51eca810901ea7256"): true, - common.HexToHash("0x20506e7e8ede9ac89d847ad3935abf1f5bf2a21f792e34a14f96ee24bc0cf731"): true, - common.HexToHash("0x3df8fe2a4300872cb811b798012c4a2ca61e7f77c5f13bd8333244e8cd0f6eff"): true, - common.HexToHash("0x2d84d2550cdcb8042cfe69ce27167543269ce65f1d56f0cb71d36d23341eb3d2"): true, - common.HexToHash("0x44f17dd10c610a7cda82110ce3cb255514c87de8c29f13396c50cdeeea99f431"): true, - common.HexToHash("0x15613cfbbbe4efdf9f0ce61a67f81142461dc63055e4fd4ebe587497c2cced00"): true, - common.HexToHash("0x35734a33443d44c3203ab39d5ced86c6ce513e71e8a7c493a6b928e1d122b184"): true, - common.HexToHash("0x37005438ef2f3d088521dce78636468c3970e31ec07cb738efbde0e91305c048"): true, - common.HexToHash("0x4ac6e6752fc9fe5b22146eb3396bb2aa288a509e709f2cdfa5bd7c9968ae9aee"): true, - common.HexToHash("0x0f6c95e26c77a876c52cc5260807623d8bbc1f686c74fce73f1154e1a14a959a"): true, - common.HexToHash("0xd3bf6a3d5848180caaa9ee4ed9a93f8b00bf40e2401be80137f3c7e916218243"): true, - common.HexToHash("0x9c3ae06776a232e3fabf6069a66c0907b1c7627a4bbc5ee6a23074c3a842c6b7"): true, - common.HexToHash("0x96015b113da43173066bd5e742d1a27dd1e24aef33eacac165b0c96d6086f4f2"): true, - common.HexToHash("0x5f3dac93a1aba8d961b3d01a7ac5b13fee1b8044b05a9a61dc5631d648aa02b8"): true, - common.HexToHash("0x9c483129e965b084593b48436c89d2318abe7b718e9e6842c831b3426521f9c4"): true, - common.HexToHash("0xaaf725ef83335d7a72d9337c92119fca83cf3654c01f58c85a07dff30d66f7fc"): true, - common.HexToHash("0xe00c5758f221de0c9beadafe7abb74ae8e8f55a166506ef468bbc668449fbdcf"): true, - common.HexToHash("0x32088e03218ff68c99ba9f731f889aadc044a17b930136b4110c3f1a49d78ade"): true, - common.HexToHash("0xc427f2a980029b951a967ad0a5b3d1372b7f01bf18e34e659469dab58e4ce069"): true, - common.HexToHash("0x8963d73988720fc60aea6b1b296076643016ff20f61df4cf0324a14bd48b1cbc"): true, - common.HexToHash("0xb18ab77d59e7c5bc2d46f4331b9e95a5b940b0a4a0fe32b50846e7d502d0986b"): true, - common.HexToHash("0x2ac0a7c76bfd4c900180ae116930879ce2ba3f9817a72371aa01618e389f7a1e"): true, - common.HexToHash("0x4e2ca069439cd565b37e8fb58fd6af516eb50d7ae540e047c6588422d98cef1f"): true, - common.HexToHash("0xf5d77a4fc418ab249a4cd61183e14c08e2425fa9adabe6a87439b53972a2908d"): true, - common.HexToHash("0x5e63044dd430018524ce2ca0208815294bc3cff0d12088b6acd9ece4725e2ee9"): true, - common.HexToHash("0x1135415e815d3dec34022883d6f8e7f836d9e77945121432fd4e67cca82e7ca8"): true, - common.HexToHash("0x382901b061cd662e240faddcfb4abbff19b6f54819adfc9344d9aca758cfa7b9"): true, - common.HexToHash("0x3404b3d2c98b4ed69f2b98b3d73c8e9765b323068ce355c0aa73adb975c1c49b"): true, - common.HexToHash("0x678be222c165e2b672e91000c4cc50cac1c555a14aaada630b9134e64a7a768d"): true, - common.HexToHash("0x198a6c7e09aa03f498f68b5750e1e8dcf6565f640b2bfeed91424857a70ab805"): true, - common.HexToHash("0x1b18c2abd53dfbdea6696513363ce26adda3c06cf7f0a27870933ea8b0e7fb78"): true, - common.HexToHash("0xab182cbd7db8d3496a75ad91d7b025253f48941b54e31097ab0af5b8e65915fa"): true, - common.HexToHash("0x96a2a20ac2eef3b135d9ab90086ce017956cc00413c567dd46a68ad363470132"): true, - common.HexToHash("0xa899686dd158f4950ece28ac7ac405d6399c1e8cda3d5572d52767ef133853ed"): true, - common.HexToHash("0x994e8c716a041bfc88bb71c92b16acd1ddf3ec5683f0db614313f5a93068e6da"): true, - common.HexToHash("0x3a0a93e9ed3b128911d28f20fecd372c733d9e0ee1547b3c5d3b3ca1a797bafe"): true, - common.HexToHash("0xf709f0d297d1cff10c47b3a3c9a298ac14c12b8ca47de736845e524a93c9e318"): true, - common.HexToHash("0x2b168c2e7a7eaf03fab8c4d689c0d18ccd617b3cca8689e4533826cc1e1d5ba4"): true, - common.HexToHash("0xe8b43d98733b7faac6e52651ca0d9eb0e663705640d513c59cbdd77cd5abd417"): true, - common.HexToHash("0x0889553a67016ba2463783e13577e440f3e33be65f6dd4ed5379a46e517be7c6"): true, - common.HexToHash("0x78e370c4e49f28c4da626ef03ed561f3fa677ad9392b24226a1795b73dfd45c9"): true, - common.HexToHash("0xca8740225db897dd06d4e2c95b5c2fc7c332052df44d5371035d548764b02aac"): true, - common.HexToHash("0x9a0cf515316dc9b6f41afc971e49b5aa45054c9f23abb7f7a4f0e6e8b57c28d1"): true, - common.HexToHash("0x66582f180039151029030e85088d31c5efa2bde1688834083daca97b38bb3665"): true, - common.HexToHash("0x18482d5486e56a0079699e38eeba2c2919bf6ed0e4b22776b26f621b403ebace"): true, - common.HexToHash("0x090cc58ba9e86353fa378383d4658dbb9dc661100acd5ad7579bc24fb4626c33"): true, - common.HexToHash("0x182136ec59f8a6a325fc87cb53e1f9abfc2de407e69d7054cf0bc4ba6747a67b"): true, - common.HexToHash("0x5faf4ddc240f3413c05abb361647d9ffc1f53bdd777f550b7caf6dc3a9e17852"): true, - common.HexToHash("0x5d9fe438d967ff6794d31d3ace55a22aec548cdc4fe1d1840e30412b0012d970"): true, - common.HexToHash("0xdec1888f593af9799c2848f9e8e0b32fb5adfc9e65b4e8f0a76c027864d512b1"): true, - common.HexToHash("0xc3578b2adba479fa38d3dbbb547f84081816a95a96882061e4c882906ab6b228"): true, - common.HexToHash("0x9e3b65710f178dbdb1a12c65a40e8df3a4579917526cefe6910e67f946a18417"): true, - common.HexToHash("0xefdc6f4192273e3d784965fc4a3881bdac2885049252451868376b27ea503b9a"): true, - common.HexToHash("0x99888f37d21feee8dec61a5954873fece1f59824eb2e07cc01f1b55ffcf0cad6"): true, - common.HexToHash("0x227f7d7208c3a3f48ff24a2da46ae321c68b67879aa23ea14ac5fe1df767e5a3"): true, - common.HexToHash("0x57d7d568e2b47e9fcfa1a16c02dd644168d5ca01e04e935d0037c873071ba08f"): true, - common.HexToHash("0x03fc9c7923ecba72877828b8d65da5a4758725f3c17cb819c9b009ce11a6884e"): true, - common.HexToHash("0x2e7fdd85c41d99e7702f675c769c0656864ae2003a3dc561ec1dfaa9f3448cb8"): true, - common.HexToHash("0x8432034e8dcbb8fee446eb865253b97d2e201191a2283a0bb29cae85ad127ee3"): true, - common.HexToHash("0xbd12802983d465293a28b2484f8fd17f516e3258ad7acd4c2e58109870419781"): true, - common.HexToHash("0xe71818c1737d53c0ff762461a0d4a11fbbdbbd681e11ec36473e05cb8e22faa3"): true, - common.HexToHash("0x0fddb9c73c21b1ed0f3f54b4fc2a0c6cd4c2704285824556cc4615fa75ad18a5"): true, - common.HexToHash("0xf501117b6e660da6b7813903dd2c3e64b73e80bcbeb6561df9cff1a96562fcba"): true, - common.HexToHash("0xde32477eebff0aa143140ad3078bba4bf0475aec3f1338b6b048a0c9690239c2"): true, - common.HexToHash("0x697943fb3b0d485450f2f005e5cce1df3fe95522bacc9de41fb5a1474411861c"): true, - common.HexToHash("0x622d03bbb11559fc1cb4ff96ba8e044832949b4641c2062df72c1d6354f869e1"): true, - common.HexToHash("0xdc302ebaeed46aee16674b717c6d8316df47840d6e5c9eadeb0427b83ca053cc"): true, - common.HexToHash("0x8c51db96b29fc68ba6d203a01bcb3f3c6285797fb08dd10262919437116ea5c9"): true, - common.HexToHash("0xda219d8139b7c4faf4ce29dbd398abc1b5015d86f3f8194c4f635ce232c2625a"): true, - common.HexToHash("0x6108d2f822cab1f0a39425322b646dd05c46d0d1b9f2ffb4b766945209b0d15b"): true, - common.HexToHash("0x53cc637748834d2dfabac8f6fca982b612a9a7d4501110d02527b7aceadd1446"): true, - common.HexToHash("0xf2384bbc9e2043432cc9756453f4b4f2d53b7bcb458228391d1fcb28f4867566"): true, - common.HexToHash("0x92c5b28e878ac275b35ce41d77412e117ec38004939296ff5b0e285a91fe2d5a"): true, - common.HexToHash("0x26f94640f7cda7ee88fb1925652452f54b54e3ed430c4894f288f8663cb399c1"): true, - common.HexToHash("0x9bca36b48973e747cd4fabf60020bfc032be9f3eae68d19cdb112febff7c78b9"): true, - common.HexToHash("0xa442f6b24dda5e7b0583e9ad8d9efd4826171a4522bfd471a68e2e72081b3092"): true, - common.HexToHash("0x2533c6fa107a41596452f64094b6d795181856d2b68928c712cf3b4390477fef"): true, - common.HexToHash("0xd0a3f18c1d9940fc0b728521b3d22dd33ead99845471723120171a95c3b325a5"): true, - common.HexToHash("0xac83bf70881a062c7a83ad500a37e28f73739c043d55d31b0668e452a8bd5f62"): true, - common.HexToHash("0x34825ad0e03070a6f7023c5ef71a86b1fd53d9f2febb9fb5ce31deae58da5765"): true, - common.HexToHash("0x05763eb0f902226e9c9155b8c9a09d14a71b270e068b942241d2272c6272a429"): true, - common.HexToHash("0x0fe2060a70a05e6e22d6bdd02fbc7ce5a8cfb37f4e43a4e54bd8f0a93ea979d9"): true, - common.HexToHash("0x90be79f1d4184559173e002b348bdcb0ed2bd9a3034ce675fb683d8941a898ac"): true, - common.HexToHash("0xfdb74ef62d717b4cab72be4202bffbb4bcfd90c53f30b317626d6a61dd104530"): true, - common.HexToHash("0x3677657b4effb5f4908269d6dced31a08817bb48725e3212f04d3223e480b39e"): true, - common.HexToHash("0x0e9600816bd16599ae9dfcf75329057f0d9a06f72f152bdf3185d82d49a4647d"): true, - common.HexToHash("0x3878f9399561e39dc27decbd50fcfbff9ea08f4eb512025604b8c006b9afbade"): true, - common.HexToHash("0x3bbb3562c32954e5ff952e0749c202aaa581b8d1f21c532e654ff73f91b49088"): true, - common.HexToHash("0xd09b28727f40a6421ecc0a798cf3d54379220768e5d242961288b220619e2e60"): true, - common.HexToHash("0xcc6387c279f055c331cf3aaa0483a6090669e3270d0985d2ff9dcf2035f25d41"): true, - common.HexToHash("0x0ef272d6cd98e2bbf4e6a5a3270568ca880f4c33b8055bfc828441dfe71b16b5"): true, - common.HexToHash("0x653c2ad2ba7b3c58770e8a5a37847d7794698de031541218b2c9151bcda35e98"): true, - common.HexToHash("0x9903d9d3f91c2adaf703264fe7caeaffc2394660a5eaf597599a41ad76bca37a"): true, - common.HexToHash("0x92a9b61b773c71f0d634cc141eaf0a757be7fb4e749ec91a7b1b062cb2e695b1"): true, - common.HexToHash("0x2f211613a523a7282a04195ebb3a3b57b29fda8d8562e48bb7e912bc309226b3"): true, - common.HexToHash("0x9f1d669fe741240a58bbe6229d0aef46c62e8a57acbefd009ed70067681829c5"): true, - common.HexToHash("0x1fce2b7b376d61ca2e7b20472d07048211ace43b82b232e58d34f1e530d4911c"): true, - common.HexToHash("0xb37b2b1c5b0f5257813e0c1ca9783284ca186689e6ae27b7d5b9e111d05c8bfe"): true, - common.HexToHash("0xa12ba898662ded14f5693897f485ab03c96443a1b0d2da9f5de061e1c2e5124f"): true, - common.HexToHash("0x104bf97f79f6ecef64deb9b81db4456ba73f2f828656df95a6eba09b90ae0a45"): true, - common.HexToHash("0x43c8e876b9b1919ae8bb8e897d60fc202d127cb953a3a055e80e9ef396472a40"): true, - common.HexToHash("0x9892ccf455f7ac167d3eee8aa34de3b91641899992a0157e369217f90d691861"): true, - common.HexToHash("0x76ecb5c98ca2d03335e3fca7ba4671fd0b8a15093356cdb4e45ca16f2bff95c0"): true, - common.HexToHash("0xfc4c3f4e5ecb9be463c01dbc1752ffedc3a356159a624590e8156472fd9615aa"): true, - common.HexToHash("0x273ada0a6045a2c3eb33cf7c6a27532f2dbaea1dbc146c359d58dba7c5029f07"): true, - common.HexToHash("0x36387e01aed171853f6cd93b7849083e89c0cbfc016872432aff05f0dcbd3483"): true, - common.HexToHash("0x650443706212d93cb0e5d33b4dcc1c98fe10ec530a0dce13bf215e5bb9c0c506"): true, - common.HexToHash("0x544b184b4b4ea1dd2a31dec5a786ea3afe0dafde07cb2b06ccb7e182b18bbe99"): true, - common.HexToHash("0x0651a42a30ecbd52aed6813e5a7dd5825f5e23ca7c2b4be705c7ed17229343ac"): true, - common.HexToHash("0x5768b4b5c6e27ec04836ae7914f3827ad788dc0276eb2c33875335e8dd51cf7d"): true, - common.HexToHash("0x995ffb16ea75519f88da1fb0bc5d83d369c14c82f5187bf4800f8373b5770c30"): true, - common.HexToHash("0xef42ccffb402b4b6bd3bacbcc8a5fe9488aa2181c9cef3e29e0cb0476d50068e"): true, - common.HexToHash("0xbf9eac593140f0d9f2d99380ea3f03e62d61a5791f0d826e2c43c7249d7ebab2"): true, - common.HexToHash("0xdd5eef457c02d8365024c4ec48d90b36d729abc591229d0538cda7946f7da181"): true, - common.HexToHash("0xded053c002f3a12f01397b389177aa318f3e489fea3f138fce58e18c22646bdd"): true, - common.HexToHash("0xa7aac1fffb6a123cf46d95306efd430e539e4e8653e7f9b625a4ded50a1ceee8"): true, - common.HexToHash("0xe12760aa460ead6a42dd622a7996900249bd893785648e536a332a33a48f1703"): true, - common.HexToHash("0x52e32cabc5cee2660871c73e767c549781908ccbf52fa20a0a4bbe2efc97eead"): true, - common.HexToHash("0x6992145b5337b00e28974974bbe3687690eca5a4d17c66b334938b5ddc47f1c2"): true, - common.HexToHash("0xc6a15c04f6d01c00e14a8f3e6ec62853c19b57900de23c332105afb6a227fbc9"): true, - common.HexToHash("0x1df3b9581fb521aa84a1007b4a0c29821af0d82ccd6eee633b027241680bbc8e"): true, - common.HexToHash("0x2f37d13c81a49e9cfa751f149eac6f82e8651ade86ef4b1d8e87e2a62fb5291b"): true, - common.HexToHash("0x43ad4aaaf5e176d488ded0915c03460788b558010f0fd6e83219c1860b5c9e60"): true, - common.HexToHash("0x1340f2480f4038c63b10d1543980d4d950a5ffb499ec603d9c020ce02a812d6f"): true, - common.HexToHash("0xa6108530395e61c8a4d30a172292fc516f5251eedca91e9f4bc3c89e0e5b8c64"): true, - common.HexToHash("0xc0f402f2d0ab531b4160cf28722e45ecfa4a8ceb627701d6ed540234f00e42b6"): true, - common.HexToHash("0x879bfa30c0a40df0d7cc77952a920f3512d0ca51d0f17fe2e06eb622a78b6c8d"): true, - common.HexToHash("0x644cb542c4cb5800142007e8711a5ae89a6defd0f849b4ef261329065e485007"): true, - common.HexToHash("0xd06fa776b618d7b15f410b307122797dc44abd3b9a65f5997cb2825e09945547"): true, - common.HexToHash("0x245031efacda95254f74dfec15d150218e5e7b38148d0660e26dc6ca87bf6bd5"): true, - common.HexToHash("0xd72e0404ff965e63e1fecd3d974759c520aff4e3f27d64426167afa74d11b1c9"): true, - common.HexToHash("0x77ca60130ec9418a3881d16bf2b2b89de7216c4ea60787206f848b66a08a89ff"): true, - common.HexToHash("0xcfdc57320cfd8addef7d9124d59197be31a993c09ace8214067d2ec7d376d0fb"): true, - common.HexToHash("0xba072a8056346e2d7f8b5a3910267c0bcd4b39497f9b44c7db025285dbdeb510"): true, - common.HexToHash("0x889a74160f49e2720e96c4283a201483e54c0ab368c6da4238c027ae375e4421"): true, - common.HexToHash("0x1bc9c65af348a42f60c42a39b9251c0d75b3aae0efe3af3541da92e74a5f0713"): true, - common.HexToHash("0x72e49b3e9933f1e57454cb4cff75c37949145d9bfd14449b4a44fd5d215a7710"): true, - common.HexToHash("0xc012da74aef8d97e40a763f3a678412cced4527e6c8e9c992f88abce3e91eff0"): true, - common.HexToHash("0x198f002813f33ce8f9a236ea0eee6ce53be799ef44d4218e95d617ab4e676b0d"): true, - common.HexToHash("0xdcc6f24c756ae0e4473b01017d4dd38d5f99367921877f45d33fe0c17252bf42"): true, - common.HexToHash("0xdfddc60337796a867c15a3a9518915c5259305fa477a2499b3884eedab413450"): true, - common.HexToHash("0x3cbad129ab09dabca715f4d5802896e17adbfa46681d34b6f90913cf814254ee"): true, - common.HexToHash("0x44e3e3ee9386305f5669177df7d49f276aecea939253026fb803cb144da47582"): true, - common.HexToHash("0x1e414c2a1087f936a22c68cbce38fefdbfbd74e39cfb72624f0913ac0c5b37ef"): true, - common.HexToHash("0xafcce68f5cccc97e9fac886fba10a165411f02a0f16ce2909951c9394f46c1a9"): true, - common.HexToHash("0x0f2b42e92af0ae4b5a6a6f7d2f09ea7210ba334b11fcafcc1ea52c32766e9d22"): true, - common.HexToHash("0xc5f1249b4148961b7c5c8268ef30e2eb96ee0ef586857783bb779d635cbefee2"): true, - common.HexToHash("0x8804afa76ca66972d80cf1a7e87a81df61250e21a62e9d7b9bf37f258020cd39"): true, - common.HexToHash("0x4798b35521947383e56d01503e309771a199bc5b052d0a5d9ce691d46d292ab4"): true, - common.HexToHash("0xf2d6ccaf5de3170375a2203fd4b23bca066e80137e292019a9f44b7cb8fe23fc"): true, - common.HexToHash("0x09006ed5321e245f2e9135b334abe7270831bc98047e2ce2b82745f315545762"): true, - common.HexToHash("0x16f9518b1adbc885fdfcf20d5754961eac39c66044fdc7f0623fce16bbb08366"): true, - common.HexToHash("0x5f453ab8750c76648ce56b7d7d2ab3ead821bca846b0a6b94fa07876a6f40b01"): true, - common.HexToHash("0xaaf8a9321a510bd0fe0ea78c016337ed70db5866f346dcd8dd0da9d87a32aa26"): true, - common.HexToHash("0x23e4de8f375b67ec3d1a028770f375c9c5ab7ec7c196a907e20ca6adae5b23dd"): true, - common.HexToHash("0xaf6af5b95ec795c30da5c004ffe4cd29944e043054ae314323e52dc147639749"): true, - common.HexToHash("0x6602fb639b34b4badd2b45263cabb1350a936a339e4fd3ddbff5e526154bfa95"): true, - common.HexToHash("0xbf2ba9e42e69e46881f02b5c337901b568f1c46d98e21cdc040dd4e948927ef0"): true, - common.HexToHash("0xcb49f97f4cc53bb86819f2b535a17f63d1d539bb7b33e9a2d13dadfc74b186c2"): true, - common.HexToHash("0xc0da6d6f96e70e01f5c4d4ce4773a3dcbdae6489be5e2ed09ca5a0b7de5c8273"): true, - common.HexToHash("0x4cbd9cb60df8e8eff71a6302587f47f613fe7f71999c2ab156cf6b0e1e74466a"): true, - common.HexToHash("0x7cfb24456747dc3f1652894f1564093fe03ad3f8f58174ff0f86c08645ee8985"): true, - common.HexToHash("0xfc2be95cd9bef61b212b526388e750fdf1d020bd50cc60391520f26c8f21e841"): true, - common.HexToHash("0xa6d8260d3899af937c7c0ec479353cbae0b32bdabe7b62391610982e56a423f9"): true, - common.HexToHash("0x4d0492e552938615b0bf77fe6c6c8e3f23e0e40218234909213d2d1add62d251"): true, - common.HexToHash("0xbc1a053aded0b8c44f38f06a6fec6f80ebf6e459a62c4b39058c6015782591dd"): true, - common.HexToHash("0xabf54dd40202dc750f1eb1145e0de92be8e528333554b299f9423960b6dbc9c6"): true, - common.HexToHash("0x2d44e824c0bd85827a60c5b8b6c08a412e58d97305540bec135662d9b86c8e63"): true, - common.HexToHash("0xc00b882bd29518d2baadf07869c100db7e57aaf54f3053130154278d8c2bd202"): true, - common.HexToHash("0xa62d8a4e9386e2097a4467b351d07936017dbc8679c58acaead886e552a23ea8"): true, - common.HexToHash("0xdedd0445bddce4acc944c16522eca13af4c800a9bb70cbb7722a8c0d0d9b0172"): true, - common.HexToHash("0x5a62a727605f49e3cc685dccbfa99751d87bd164e36c29738881e52c3fea2e01"): true, - common.HexToHash("0xa7a9dbaa4efbc94acd34386451c8862af0a4b1c18e768372710ec2b95017f2a3"): true, - common.HexToHash("0x8c39a2d3314251edc71b18a731637b888d94b051d18a28b427efdc57e3ab2041"): true, - common.HexToHash("0xf28567ea001aa8a9da1410d2f71bca19d178b91f1cbe68363ef2c17c8ba753d7"): true, - common.HexToHash("0x5629ad57a56683b17018f5fe823d32f821ea96a055e0aaec867835cd54c1069f"): true, - common.HexToHash("0x92eca5346699397a3bb5cd4dafb6652f6d3bb1e1d8069b508394771df2b64bb7"): true, - common.HexToHash("0xd1e4c72facbf18dc7cd209133cbb56b4d35e8e1b202058ef8d48005b502137da"): true, - common.HexToHash("0x539f8a72947296d69c394c677284fd283646401c343eda3772b2813f4baf6083"): true, - common.HexToHash("0x2841509985f03d3d1a60d66aeaa26f3139b3cc7e0ce4dfe6a4ed5f1f1882d9ad"): true, - common.HexToHash("0x4b1ba07f38f926b3ce86e557e825d95bbcaa0725a9eb5be5fee0759e057d72b7"): true, - common.HexToHash("0xd872bd7b1d6e0741009b35680325762368c843f4c19699eaca9393b2a45f7b89"): true, - common.HexToHash("0x75ae0fb4be4b4149b531b2ac50ce3b6d381f06a6f53f1a27dc1dbe42cce79ed5"): true, - common.HexToHash("0x750303e591f76029006c3a658ba8690e0da80327bcd593f87b3c5690669bcd91"): true, - common.HexToHash("0x9dae87cb452e95d22d128e1af9d9bdae608c31201b7fcdecd9a2a47ac86b85ec"): true, - common.HexToHash("0xca3f7429508c123c4a105c148b64f51890debe671ba4c082c5b47a6883695d5f"): true, - common.HexToHash("0x26920a7ded8c05b3cef00501a4bd98f29a3109c295013caec11da04f8018ecdf"): true, - common.HexToHash("0xbdf56b4147bc6555a1c28199405c03e7d7a61a877efb9d72748c488063dfacba"): true, - common.HexToHash("0x9652eeb06d1a45d6805b8b37b58a80f82b3a760d7efa064f7747dcb024d20a38"): true, - common.HexToHash("0xafe42edcfad11a80d3fccdb1e839ec68a2d2c50c8ce6c5d76b1aa48605fdc000"): true, - common.HexToHash("0x76b69878b4dc0c6e115fc93527a457516c88d9a0e2949d7daa014686a68211ce"): true, - common.HexToHash("0xc21cb6aff45ef4fb7a731f77dcae72c466113669a8ce09863a6709376566c916"): true, - common.HexToHash("0x0fde3383c61f1c0345a48f70ed35dab9426b66fdd440635130ac82eec07fbf67"): true, - common.HexToHash("0x3fec6708d980636ff573f3e2320ba7f3006ce086a4c1d2ef9678caa91f7add3a"): true, - common.HexToHash("0x4fa06a131ef28331a3907e1212eb0cd64f0f5f75870b694b6ccfc783ad5951b0"): true, - common.HexToHash("0x972d075e0c3e9507b97395bd60b1da569655f454941d8ab5864ac98f3bbcbe9a"): true, - common.HexToHash("0x68827877a2dfc9b43d7c41c9d9c0b8c336e00ecd8056d61cf115f71539c687f2"): true, - common.HexToHash("0xb8d47bfd48b22f39cd05b2f8393039d3f533dc74a4a5eae63206535d3c4a12bb"): true, - common.HexToHash("0x67efb964c0127ad896f3348b4991dd21fafd07ee82026b7adf1c8be432ed94e2"): true, - common.HexToHash("0xbd2ec1981c13ec90632f6aab8e9c7b72d02b3ba5e14c11e8df4506cbab83eba7"): true, - common.HexToHash("0xa034695917a0d51a8aa275ec34e22aa57fb98f4c3a1e9169d96304e7167fc11b"): true, - common.HexToHash("0xc8da01841612357eae941afe2daee2b1da9b3cd134317047b8317aab253a1ee5"): true, - common.HexToHash("0x659dea8aa18dcc1517c645af6ec89a9a97cc5445636bfe649802675ca46c8938"): true, - common.HexToHash("0x5ad7c585fc70f31c303dc1a2054462e9c21cdb349034c371f6b55399175269a5"): true, - common.HexToHash("0x41e000fb5ca648e89c31ebb8adae604c769029c6b1f078eead5162d4dc89c49d"): true, - common.HexToHash("0x9d52facb666951a734e1bc2034b071608d3f1b25900e74a3241e39dff13b2632"): true, - common.HexToHash("0xaa1f570af9c3cc4f7696b126c85119386b60c6656e07ebbef1a18e7e1a658c46"): true, - common.HexToHash("0x3b9829ffc4bdf9af252c1a539456c22d7763dbf1ead7ff316281c5d67857b7bf"): true, - common.HexToHash("0xc048ef4eb48295ed1b0c79e58c02bf72de59b3d75c5ea876465d2943a00eb25d"): true, - common.HexToHash("0xfc55665cc0f0f841ad3598ce88e832e4c5672d8355fe3efab3297393cc34b59d"): true, - common.HexToHash("0xfdd9eb9d765c6f7228bda97894f93d6b8fdd3163372fdce3d387cc23c01cb594"): true, - common.HexToHash("0xba8bd7e716f7565bc517d06456a1cabcd8da9714524bb8691aed276efedc3884"): true, - common.HexToHash("0x7458413f8c63fc62e0258d52d3710aa9cc972b6ad812ca88ecc1211221389d59"): true, - common.HexToHash("0x08b65275503fad5a52eda2b5a0d9a326f060cef507461a92fb757f23b059f913"): true, - common.HexToHash("0x5d22646dbe793305077ba0339675acf7b135294e02f3b28d95940492aea0de8e"): true, - common.HexToHash("0x231d43dea11485a24fa8e3a1e28eb44906774432abe62703669ff67aa54340e5"): true, - common.HexToHash("0xc5c046101d1fa160d0cab1e1ac40576d9273434dd429f2d5ae5be2d552fb405c"): true, - common.HexToHash("0xa9886a15f5970b6873adecbf20a85d8fd9e55c7ca97b0dbb554f0ca33f34036d"): true, - common.HexToHash("0x7d3e03233dc371202de9613ed94d36067e758abd1ddc48af53356826bbc2d069"): true, - common.HexToHash("0x9ca7c095c96c7af7f1293caeaf099027f136df00b4b8e30709121a861b3cecd4"): true, - common.HexToHash("0xb313eb7267da402b2847fccab58c16460686e8d13f4918ca3639c1bb32eed079"): true, - common.HexToHash("0x50ac923a9ec0ffe2bd3595b6c384b2687b8a426d99033d18180663f290548b21"): true, - common.HexToHash("0x846c78cc08abc35c5069ae05e3e939b73e3e610fe17042c4938a31be4a6083fd"): true, - common.HexToHash("0xca64623d4ccb753b198fa78a7cffa00937d23c65c7d82c91da3a3ac6a9eb143b"): true, - common.HexToHash("0x41deed3b657c5b92e6da7b1557c10f0e2bdce23af98a2049bce176d6bbd3ff41"): true, - common.HexToHash("0xbbcf1c8fe350e2bc5cf91fe3b1fa4138c3855ef865ab06a5a49194fd766c8932"): true, - common.HexToHash("0x2f0fd42c664fc9c5ac6e5d8ba8a5912e5eab5621a7728c37fa46f90e90e25c88"): true, - common.HexToHash("0x993537044ddefdfd7b6460fbc6fb4f12a8501398f3696708c1e68def24ce7bff"): true, - common.HexToHash("0x29e5dea2d5adebfe8657f69d66c45d08f1b3023c978397ae48ffb9f11356e793"): true, - common.HexToHash("0x8fd729150f669bf1847456bfa94798929f7c3c487d7ff875242a0df9233db154"): true, - common.HexToHash("0x346a35e7ddbe28a276621ab7c9ab7c530d7035c6f2e62da6c46b2f45a99e7073"): true, - common.HexToHash("0x90a8ac4e78da5daed5696f7efa40cd66a3d601e8bbc641d84c743adba74781de"): true, - common.HexToHash("0x84d80b6b070be4d20763e65bd61c2f45a07d1953781d2a06ce7f34dcc9955337"): true, - common.HexToHash("0x39b7a72275a4396d7296253df5f677eb6b5a5efd55a089f2a5cd74e03b599719"): true, - common.HexToHash("0x76bfd80c4c7999b178ff2fef9879e6b884f1d75f8c20397d73a830b7bfb7fb59"): true, - common.HexToHash("0xa88aebc9f9dbd4ef94f37201341d9a0c8de5706b910569c64292bd5ba876dca6"): true, - common.HexToHash("0xf68833bd2a00ae84998f1d0769ecf7edb607304783c1175e36d65b88395d1749"): true, - common.HexToHash("0xc8505a57aac98b31fc0b0734e52a8e0b4200e9e7bb5c6ec52adbae9793ce3348"): true, - common.HexToHash("0x9f636c540f4ebf8b6a6e55ce6787b400c30a1b21c63ac5f6065def6fb7d22836"): true, - common.HexToHash("0x83c02e96807e12c202d109707c44b023d32db0ef2a271946ac683dc182ee391d"): true, - common.HexToHash("0xec7801e93eec232cb0153e6754c0c454fb269212c69948254691d9e2c0fd2b6b"): true, - common.HexToHash("0xb58829e012abdd5eb1b981a19bc81221e80e9f7793fd1d3877b766801ef83ffe"): true, - common.HexToHash("0x0eaacf3ee63ef4b2cdbcbb2b913a20678ca6402a6aaa9dda5fbe617ec37e630c"): true, - common.HexToHash("0xa20cf9a747b8a10aeef34c06ac5fb218dcb052dc93f9820804a22e8150511ecb"): true, - common.HexToHash("0x6d10a7dacce9625464e5b7d78aa0695738bfa8df2e5c261f8f1e9a53557b6a1c"): true, - common.HexToHash("0x7ec744c82f53b475fbf4f68db0079221f39136eeaf8d44023034abf59bc48362"): true, - common.HexToHash("0x7241332a2b1c02879ddf42e50072e337e1e40e76d40e1db5202f397406d7c4a8"): true, - common.HexToHash("0x04401ccdfa041fa7e078210e62aa09cd2d56c0aa0f7916f59774dee931999b0b"): true, - common.HexToHash("0x3a7ab42be0fa3c2c52f3fece5f7173c1ba94b30eb75a59c115be6c11740c45a7"): true, - common.HexToHash("0xe255a450b02c945f58fa1d653dbbccffb4851a982970ec4844277808f294873c"): true, - common.HexToHash("0x568ce45965dc600c6ac5be29e7f31b826c83a9fb51258c14ca7e150b7c17f8a3"): true, - common.HexToHash("0x29994a335eed01a160cd838787cdd403b889ae5ab92fdbe91132819a5cb5e56a"): true, - common.HexToHash("0xd131f3e125f52e80917d24c536084f33425c1cdaacad9c0e5179dec934aa6d2a"): true, - common.HexToHash("0x0e0dd620c0f8351eac09bea8701b68c7523f53c3412ddd0b8cc3d419034a29c1"): true, - common.HexToHash("0x68d919c78709ac5420a6181964c089859d4802f17d18004d9b8709ed84b9bd2c"): true, - common.HexToHash("0x51812a7d0f437a8889f9488cf929612d5861c9cce178db1901dac6f3df04d7e3"): true, - common.HexToHash("0x4bd6fe15bfda88e4afe6369b3734468e98eab95713197bd1d4c23d6153c04bb3"): true, - common.HexToHash("0xbd9ae9ae4f506f764469362b07048d58af2b7092a0c37fa02eccb97bfbdd17e1"): true, - common.HexToHash("0x352be401f4024d99741556783ed9052faa21bb0382df7f0773588f37f316abc7"): true, - common.HexToHash("0xd29d9b3158f4629c56ee06bb9796af93716c4b1256c706b0c6025cb3721447c3"): true, - common.HexToHash("0x60b8b572a5a555b3db6fbe9c67a65788a4a35bb8e1fc5b8ad9802dd22f5cc2d0"): true, - common.HexToHash("0x1ed3e006bc1c05c8ebce4624063e524ca0d23bd41a520169f80778dbb9261f4c"): true, - common.HexToHash("0x8a38c9891d7f54260e4dd6eceac8ac1b9c8cf9eab00b8c86cb6488c232468df2"): true, - common.HexToHash("0x9ec06ff630bf418eab96fb3160e4a42dc442e9a10c0c1763ecd63cf970420af9"): true, - common.HexToHash("0x69703a4e0723876973de938ee97b5de24c4d5d4193e5d77b1cfe31755a40f7c6"): true, - common.HexToHash("0x49a16f87a719de349851a256c02c700cfd5616a5600c5e8cb80f17b9dcf3a4c0"): true, - common.HexToHash("0x8f3703237cf77ac50fac5b5e3bdfe468bf21703cefa7e2719b2416fc0a0a9997"): true, - common.HexToHash("0xad04879888a4fe632de2a4fc22284a055e138ec4e0b6e735a75ac72ec2f0ddc7"): true, - common.HexToHash("0xf82379e72bf05585e8e0153fcfa796bfd08d513a6f9d7464894c713aa226f798"): true, - common.HexToHash("0x03adee21ac8e809959f3424e985b9e6b656590a66374ec90025c65adf5146acc"): true, - common.HexToHash("0x6fee1428ee743fb0300c66c105b16db6ec0b81b612b55850c45f8ec9c88d36bf"): true, - common.HexToHash("0x3225f1bf2eb97dd5c0825024340ef7cf09b560f0b4dc249bb298f3f14a594d2d"): true, - common.HexToHash("0xf42a71202a3fd81b2c9d3239042e7298f9a969d0247c423513c6d915333f8d19"): true, - common.HexToHash("0x2c92fc290e7b81a1efb807a86ce5939fc04ff228fb54e2d5cf19759536464e10"): true, - common.HexToHash("0x3425d3e248b895a526e0b12f422c1c2818967649d985d1558674e65e0ee73b64"): true, - common.HexToHash("0xbdcad3ea07bf0e1479a6c793ea4304fa0dad613687159f809cc9382ef7ca4814"): true, - common.HexToHash("0xec9b3c1477b60a6931e02e746aab86d0fa12ccecb2c1843a12d5b1956d89fe72"): true, - common.HexToHash("0xc9aad5c3b3f50589fb930b6c6641d014fb5d1cf534da0031bdfc6bc9e439eec5"): true, - common.HexToHash("0x003d5251aaeebdae8d19d037a400dcbba0b5d5d4a1f35c09b7718d91557f9e58"): true, - common.HexToHash("0xda6da700fbe09afb82f93370cb137ade6a0919bf585081c0cac871e4a1c0dbe6"): true, - common.HexToHash("0xb2b198d1a9102f77f00b93223a192cc951ef783f023d24805381022cc5943bd7"): true, - common.HexToHash("0xe9fb8bf7aec5e5e9dd23078e8c09eeeaa9cd2980c66f11285d7fd9ef0d36e547"): true, - common.HexToHash("0x4db04983324baa0472bfe9522383f4e3ae4a327cbf2dc040ba14101fe739d0fb"): true, - common.HexToHash("0xe245ae4be9423305b96f938fb72a87555f86c6aa427e68ab12db1c8735de00f2"): true, - common.HexToHash("0x38eb0015ab5d877fdeca0bb4e3989649d6a6d4a1c4da089c9cd93d65e8fdcddb"): true, - common.HexToHash("0x77cd070b5c38b53de767ab16a2f6859087d762f5f93b0e3627290e278dbe0962"): true, - common.HexToHash("0x398351f46266e1741cd9909b47499f6984d64873d59153edd506447aaa720b38"): true, - common.HexToHash("0x4e3c573125494657c75c7fb2dd9237026807f5a9c9e71bb676cd78379cc068da"): true, - common.HexToHash("0x413e08641650f5c79848c25cc4e2fd99ab49ea88b32fdfcd9176dfb9152d5335"): true, - common.HexToHash("0x8e1d0efb7e6e093ac07dbcea3c4256d553f5ac4086fb416346454b9be40c0d64"): true, - common.HexToHash("0x22ef4e2e5baa6700ca33718d0bf2004e2d58a5839cefc7dcfa77ee512a70d140"): true, - common.HexToHash("0xa85bcf6cf49520f9550913b6f70530f63b0866cb11dd34684ed2141cf757eebb"): true, - common.HexToHash("0xfe6b6b9512a3fb1b8fe602908b5e4a3bb3b1928ffdc622b4d9405cb495540224"): true, - common.HexToHash("0xcec9496d46216b91f2e5c25721f0d40b4b2a19ef16aec3d46a4d25b6f9fc1fb1"): true, - common.HexToHash("0x20b007f6298c6ee935f4a9fd70626e580fbb7124e05677f3217782d2ad061a03"): true, - common.HexToHash("0x02af7cdb7498c4e1f36e0d5d75bd19dde0b647eff33afafa89c50dea6fe0c8a2"): true, - common.HexToHash("0x9ce9cbd617a436c60ed6f175cf5be63a39d81a376b736d26203d889196ae55d5"): true, - common.HexToHash("0x7d703637209ff1deb3ef1a2edace9d10551219cb848f6ade23710f285be6babc"): true, - common.HexToHash("0xe68740d385b24e3212127e9b24dd22867adfcaaa14798f07b0bcfe5ed84fa9de"): true, - common.HexToHash("0x949c019db4493efcde59ecec4c870c8aa95dcc7162a2a41a3dbebd538702dc68"): true, - common.HexToHash("0xcf1e4ef75651f2d6d672802842acf1e48c61e0c17fe4821a84e150c1737af736"): true, - common.HexToHash("0x22a96dda7edbf51099dcf8c91bec18b46feab40fa52e0f02ba37667f8be613ba"): true, - common.HexToHash("0xdf105dfc50280023f7ecdc0bb5e59a385095048989acba41d86ea7fff7fe3877"): true, - common.HexToHash("0x9c065d167328776ab79b8a063f063c7e7c942a52de099b2ec6a618029d489795"): true, - common.HexToHash("0xffd8cfe7f0ec77094a7eba0964ba720feb0b3910b670bc65bb07f7d44138f3af"): true, - common.HexToHash("0x65b563e5eb08add1c2c8c0e582910d3a417ab1e587994152b0c7edb493f2ed0b"): true, - common.HexToHash("0x747123348d373223e613424ec532058d05d5caad01a78e53f68641092e88e1b7"): true, - common.HexToHash("0x62f15e8c1cba16fce5ea8b88fb610ff0e8185eaeb40938c049851489f9cb845d"): true, - common.HexToHash("0xab9b1e05552d1312fc8a63475d2a3b0445a717d3d8f33ca118d1be87f7f377ca"): true, - common.HexToHash("0x1539ee51383ce0b0ca827636943eedfb648d0d466d5e92bf7739571fc3afc433"): true, - common.HexToHash("0x117f714128693c93aef29e3608f84606707f75c28ec7c07368391dd0f06b526b"): true, - common.HexToHash("0xed7a795eb480a66f4f7dc3236c817c7b067f9f8ebb48989dc54c38d7b622911d"): true, - common.HexToHash("0x0a6dda76dfc4043883480f66db438ff2428d5a609a117e45f1a38f2eb67dca1e"): true, - common.HexToHash("0x3bd8c9f6d9ea18159b40a2eebf7b0debc05cecf24c2d1a879ee162d8ab389c4f"): true, - common.HexToHash("0x4dccb29aab172899dc8f4102e0ca3e8f92b4fa8ac365b106cd7ce57e39195499"): true, - common.HexToHash("0xfd0deace6d6a21f57e72fdefb4be79d00a71fdd3845879fb4b8db285bd3d9823"): true, - common.HexToHash("0xe4cd1ac65fb2667277a33dd954d7d390bb50d9310aa0e8c2a099ad60d74936da"): true, - common.HexToHash("0xc387cf727dd718bebb7cde6451c28fab44b3acaa97450fabe1430bb5ed144558"): true, - common.HexToHash("0x482f3e72d2db576851c8ada2e784ad8d1d3dfbec373bd064b5bc9266922acb49"): true, - common.HexToHash("0xcd597525e020d67831e10144d3270133d4a1decab3d6b7cbaf06d5de3d5a45f7"): true, - common.HexToHash("0x041de2fbb5062a92981cd3608b699795a1563982e3aebef3f77aeac699314797"): true, - common.HexToHash("0x9b1d8f88a0611df24ae1fd3712547c6dc663cf190e74fb3a91a72900a022b506"): true, - common.HexToHash("0x2d81bd1173c15931a582eb371fb458464492b19d3c1b85e6f5eaa9df04507b64"): true, - common.HexToHash("0x4d8214ef95b7680ca54382539b9e67d2de3fd1d7b6ebc6d998a3c146d914a528"): true, - common.HexToHash("0x6dd159ab05198d30d699db224502ecfcf0ef2d2761183cea16b302bbdc7f815e"): true, - common.HexToHash("0xa9f32d5d8c3a592f3d54a649de53907b7dc5ba071d4701a06580cfcf18bcc5f5"): true, - common.HexToHash("0x9081bb382ebd3be0969eef99d98a603242125b6feb25ccc4643fb0beff3890e6"): true, - common.HexToHash("0xe8dd24c51238726d995b88ec4fa7137eec90fcaaa4d56f762858c16f10cf1525"): true, - common.HexToHash("0xc526fb6b16566f0b7d1302592144245cebed7ca2bfcdbb6961b5831cf47d762d"): true, - common.HexToHash("0xaf11b656e0f3d4d1131c28a18f26c0fd9c9326734b6410c5afd2d900937a8fb1"): true, - common.HexToHash("0x8da17bf5806047c488ea1f91a6f0b93a628a375764b3210d56a7ffb40b712826"): true, - common.HexToHash("0x1e7e15fa8b813c3b8e3bccc3aea817cee3c1be25fe2d7a0a66ccccaa93ad4345"): true, - common.HexToHash("0x7a4142bdbdf51dcdb2652d7ee7b41b2094ed8919437ff871d1ef31a5c2170978"): true, - common.HexToHash("0x520edb442b440995a9baa0b599566c5ef9040ecad1f5327930a71d6f8d2c543e"): true, - common.HexToHash("0x924da5a0ec69898a6f171ebf522968c8a0ec5625725aff1661e9da13e3214968"): true, - common.HexToHash("0xd444662a1cebc0f8647b4087ca1b33ea3b6ea5303f745a0280afd960faea8d80"): true, - common.HexToHash("0x2f8d81f2cb64a1f1bdf4f6086ef5a6b4f403d12b8b691868c9fc0c7747ea9835"): true, - common.HexToHash("0xba8bcf9b692d197654f5a84b3e30680b22b41b315b69c9e88e92e041e6ba7096"): true, - common.HexToHash("0xcf7a3dce5d2c5a25c1c593b23825fa6bedd3c2ca99b0ba3fc19eb2b3baa2d7e2"): true, - common.HexToHash("0x6d89073629f6572b45e4c110ff88551184f586cb7631e56602fe7495effca378"): true, - common.HexToHash("0x4cd997fc53dc87834c1c450caa713fd68560fb5e1220983391a188d2449b5371"): true, - common.HexToHash("0x1db0eccf49d56033f91e956774187ff19762f41e57493a24b8d721fb0ccc0b76"): true, - common.HexToHash("0xaa9903327700ed432b6bb40a91e086cf6edf531d8572844ae074febf7de77b86"): true, - common.HexToHash("0xd22d320e627e112186bd7d8a1ad65d8aebe4fb9abd969d38e2341ab5ee4e9155"): true, - common.HexToHash("0x39fffcb4041b659342c67f8dbbfe78fbff77a9025fa1d6cd2b87db16dfb8a94f"): true, - common.HexToHash("0x03c91a04d21914177bbde519158f199f4425709885e75d296a4415de092f08d2"): true, - common.HexToHash("0xf3f057edf7b2754b0baf172418fd7775fdc6727aa9a4385c6514057844de496c"): true, - common.HexToHash("0x3d72077911a5d8007bbe9570cbac017fba661f4e73eb1fbbb9ce41a32251883e"): true, - common.HexToHash("0x55e56977208fd69396c3f19bfbd5bb0a97d183b0ca6068cb63b505863977888e"): true, - common.HexToHash("0xab7c823dad43818a52648a5e99c07425014644756cd446fbec17604033e9abc5"): true, - common.HexToHash("0x26a9d39b94e84fd97feb8a3c153160d30e85cf92547017e6fc00401781821009"): true, - common.HexToHash("0x1882b0fd1ab3c7a361e505b76a5efff1caa9f483a129329ee2981cdb8990ba74"): true, - common.HexToHash("0x05ae735284b649fbcd9fe39b29b765e3b1495bb631404a1ff40ab39abfa68bfa"): true, - common.HexToHash("0x03544129445cf90b65aa21b28a16bf0b798db88b3241fc8f074341c13df1c4d0"): true, - common.HexToHash("0x74a4f570e2cb0c5173d3a0c2cc22e7f1af58eef8188038114055356c4ef1fb48"): true, - common.HexToHash("0xa6b43aa7bf724fc1179f37e9988cb386e89a90e213fe8c0423fc4c3c8becc914"): true, - common.HexToHash("0x20af7b215a240ed4bdf57af27145a9d85e4c379449ccddbdf16c6472e160ebc9"): true, - common.HexToHash("0x2b18c2a4e9f52e2b7ee6a3e79308a7ff3183fa5efd7a85d1ee8e51bfffea7396"): true, - common.HexToHash("0xb000f8ee1489997757c6cb4469fc094b021bcf3c201ae1c265de8b6f44b20c1d"): true, - common.HexToHash("0xb8788f0d6726a6b7ab192084bc999b396babe4ae4b07dff355b431cf788c8520"): true, - common.HexToHash("0xd195093f1ce7962896cfc9e4fa69a5aa0a83b5ee278e72b85c9b476a1b494d16"): true, - common.HexToHash("0x59c78b5049a612042fc83ffc87a9193dfc4a99de7cdb39c241b95cd1a39e209e"): true, - common.HexToHash("0xb116a405518718de1bbba7f66db865e8a23057e7fd0e66feae52cc390fe054a2"): true, - common.HexToHash("0x102c38eb12c3647b46f83a668c3131e395ee56ccba8689e67e15283b1b4094fd"): true, - common.HexToHash("0x345b3ee946fde9e7b56ef4db7364f4c5c596569a70e5da2c0fd0dca0c5014452"): true, - common.HexToHash("0xd8cced29310aa1fca902b002b7e9fede959b37f5c7ec32dd9077c13e1e0823a4"): true, - common.HexToHash("0x75cad00b6c53a3fa2abbff5da6adcaab64a0188a4cb22cf9916ca8a9f062c31a"): true, - common.HexToHash("0xab713f69a1a81a8adef4167200298eb497ed73be7e3fa031047668ff9675b53e"): true, - common.HexToHash("0x3cf687f729c3dadf58d56e5e140b493fef342b47de78be3e7b835fc07e42eaf3"): true, - common.HexToHash("0x01e249f2d967185fd095d135ec26141a50f0738a8291873b7c4d7846389ea14e"): true, - common.HexToHash("0x938f9c01046764b4f76d6bcfafb3f25f8d210370902ca6a6159776efaeb48f77"): true, - common.HexToHash("0x60b21064d4dfaff04dd8140a863ea1f8b71483086e75eb9c35bef0e8abb637e3"): true, - common.HexToHash("0xa631a57cf2e4317e29b1077c9678f901cbad5db0920b62059d5fc3bc46a88a7b"): true, - common.HexToHash("0x05dc5945bbf5c4ae491d89478266c111d9465acbf1e3e5044e1da3bed2d63005"): true, - common.HexToHash("0x9a995873dc7126c2503088cd5ab8c47542611d099065bea407373670dbb63cf4"): true, - common.HexToHash("0x15910f426062dec3b92979b527861640ef2e4d62813984de7b7cc10e9f8da99c"): true, - common.HexToHash("0xf77e6b0c5830a8c425e725c615ecf507c8227dc8224f0e0da41254242af0140a"): true, - common.HexToHash("0x3afc8346ea4ca50b82745af9613e0c340baebe1844f073d89f7f89f84359428c"): true, - common.HexToHash("0xa81ae3952cd72b96eee2d6da447079f79a29be1ba0e23f32d104c2c76342466b"): true, - common.HexToHash("0x7ee256dd547119abebacbede5f6f2e7b47788fc4a34ebd03b604acd7de198c60"): true, - common.HexToHash("0x58f8a187d0d0cef75a2a5f1a3c4a394e138715229a5b43ee62af7e721c3ebeeb"): true, - common.HexToHash("0xeae91c8c48a41f208d29374787566550b81c8e281fcb54fdbcdd74cab5706169"): true, - common.HexToHash("0x11def55109a39db91acb4a01a99098b8de198a682f40bd585cdcbb704a2483a3"): true, - common.HexToHash("0x4de05c093dc710da1104aac40fd7fc15d020281b5f064db70112296cee58d734"): true, - common.HexToHash("0x8de28d3f0681985e656f7d9b524e3bf0028b19f357bc461cd774b202ab0a32cc"): true, - common.HexToHash("0x2fe9f165e1e9b27202d4dc485a5ee2b04db5caa3bd7dd5194b136aec45e17466"): true, - common.HexToHash("0x5d0bbb06277b7e9483b27598453f437afbee49e2fb80542ce8263d755aa9e0e3"): true, - common.HexToHash("0xb114ccce15d039fea41f5292f6a87b8812a7ffdf23d2ffc320001e9316a33b2c"): true, - common.HexToHash("0xbeab07f3d33d9cde4f976c44e2382e769e00c47d112484c2cfba63da0d565936"): true, - common.HexToHash("0xfc894a93443ee5c4d71673f4abab84ea670e8a6366d6e5c6bbe8c39176dc0b63"): true, - common.HexToHash("0xe883488a4874a4c28ce5cb3bce2f95147d2b28486529c7d837da4f9cbf918450"): true, - common.HexToHash("0x4a78f72352f53440d8e4df5c753119e78eb3d53713c4ae28e2ff7d4f1b1bfd95"): true, - common.HexToHash("0x507420f07e120ec2d5d0479d220d72fd8af39766d35d20ecb0373f37b110daaa"): true, - common.HexToHash("0x8dae9bb8e1e1b2880fbad6d82fd874b69ba9c2d5e99e0fbd66f833623fe17d09"): true, - common.HexToHash("0xa97315c6b35ab9dfb9d4338471eb311cdf0e24bc61e4994a14835682f43731d1"): true, - common.HexToHash("0xf7f6ebc6d98aef4ea0f9ca360c47ce51053c89e1ecc9bb6e3242fe9216429fd8"): true, - common.HexToHash("0xc7339699cd73b9777138b42d948ce2dbc3eb6dfd9ed15158c3fd75027fbd1dd7"): true, - common.HexToHash("0xf59bca46398b8c5b220737cb12e802ca496c81d047fa1d51b883e9601b45abdc"): true, - common.HexToHash("0x094d3e756e26e3488b36b92a0b5c19e9515afe3dc3613c88ad43a28995d22b81"): true, - common.HexToHash("0xe273050b58560bd8e4fbd8931ce7f80f80ca0f5574095d7397a872f37c059d94"): true, - common.HexToHash("0x8e4b66376d0690b0a1c030e4b97dbb71bb91d6538d92d891a666760e78414b8a"): true, - common.HexToHash("0x86b2785519ea5882dcf8caac6ac445c0bedd976afb8a53a5681a3fede51d22ae"): true, - common.HexToHash("0xb01d0c89de23199ea488411e3a4047acae6cf6ccd64bd02069af926ce2b3f419"): true, - common.HexToHash("0x365d5449a6b635a6ded3965eaa9baa53b51d9cf64d1c5feb5549597b84acd663"): true, - common.HexToHash("0x47b1f0d07f0ab64588fee58a82265795ef023f9c3d1e774089f9351dc401129e"): true, - common.HexToHash("0x60cbe69b0e4b646ba7da071302586e0f33c579b78b0a4ee82f97170a0a370c30"): true, - common.HexToHash("0x548a9e5516bd5e3a5e90ff0e6c2e214f9754c5e64e287b89261df95860ed6a09"): true, - common.HexToHash("0xd734cbc802d60739a8e580071928f928c50d20af6ed763cd4e5b82a55777f358"): true, - common.HexToHash("0x2258e5026c45f69127de73e2112e519f93aadff91ab93338b01f4262b09326d4"): true, - common.HexToHash("0x616281a1e9aea18448e23b89439e2d19c4c266fe152b9df1f75731df0caa8829"): true, - common.HexToHash("0xcd10bfe572f054e4782fd2cb70602a26e5e55fd17cf625db6d30753b8b4300dd"): true, - common.HexToHash("0xd25518667d708b3f2e3049c97af43803279614e0305e510747b367dbc0ed46bb"): true, - common.HexToHash("0x5fa7d36fe30f1ba6fa523091eede410e6c04307788ab279c083417a86b0f2652"): true, - common.HexToHash("0xf1949b995c4ff5e7af11b077e5cfdfcfbe09ad2b1a5e953324d07e983f2becb7"): true, - common.HexToHash("0xb744724e312e0f078e3b2f414091507278ce17c0d62243b721db56970de7a827"): true, - common.HexToHash("0x823965dcfd656826216588ec7a4ea7e4cc82a21e1e9acf214e27dd1b383102fb"): true, - common.HexToHash("0x729a30c730211ef12741dbdbbd1f40a36a9cd88470f2a53289d410088fe1ea66"): true, - common.HexToHash("0x64c925279cf78da92d279d072818dc7b2a72eec32782902d7c7dc620cd494379"): true, - common.HexToHash("0xd0d90447c35c79f77fbc07368f38ccc9bbf481e503e13afe8698896443075a20"): true, - common.HexToHash("0x3fa2e7416f2ec4d9f18e27dc51e012c2ddd504070e771f5c814a8cf481376441"): true, - common.HexToHash("0xbbc32bb541efee54b4954933a723c495ac455734232c7de3e57d8d1e701b908d"): true, - common.HexToHash("0xf5de61c11d4e5662d5101124f522e548770f8ae3311edb0c54ec4124f0bc4188"): true, - common.HexToHash("0xa05e38592206710c4e89966a699631fff65761454240c5a450849b29187ace93"): true, - common.HexToHash("0x5dbdc72de20cc785a829dde9b834e99f8b0d9fa12faeaa4ae6b2a404f29e68da"): true, - common.HexToHash("0x43e72b8b135646b7db69450b4e35af4b60a8369a55805f70035e1a406887ad98"): true, - common.HexToHash("0xbd26a1f6bc007ce091a936587d6d64663a03733232b30a5ce4672ad2635fd4fe"): true, - common.HexToHash("0xd0db32276c6e2184342dd4024d6df568f3fd9b1caa74cc0d5ed9cd2803d912a1"): true, - common.HexToHash("0x898284bfbae08739a42a66431a40192eb74f7412db1db76102a237f199a51706"): true, - common.HexToHash("0x6bc28b8a795a8dcbfde21297cd5a83f186a67b0096e7106f79385030efb0fa97"): true, - common.HexToHash("0x1577f3116efcffe265970f3ce73cc4099b8c1820039f8da43c1d80d3ab769312"): true, - common.HexToHash("0x2c17fb323669a122384ad60bd0ec227dc8ca512e0ceb5a32e7183f88f8a95c13"): true, - common.HexToHash("0x1b45e544cc227a2861f6bed89049cdf38c6ab987ed86a35d0e63e34cfab10bb5"): true, - common.HexToHash("0x018725906c72d4f81d91de77786572edce59c770063494f049cd608bc6527921"): true, - common.HexToHash("0x70a9e00423ed6bfe09b0534c8dd69cb9f642daff16f3b823ba66a8f55d44be30"): true, - common.HexToHash("0xd7e4e7aa96857c20328ce8711188ef28c219690ce52c76a28b61210d9ef3769b"): true, - common.HexToHash("0xb9e8db05ff18e2bc9b36021191216cbb5cbef52335246c843312302f0ef3e17b"): true, - common.HexToHash("0xf8e1f38e87792c734e9541e1d99fdf065ca4ceae93e3f83bf425020ea54a6c8f"): true, - common.HexToHash("0xa7d1e48a6d0cfd2af21f69a2eaea3611caeefa04cebee65b9847784123d56318"): true, - common.HexToHash("0xfa973a015304316c8321789e5c0bc252a9092cd8094b9ff1a129b2e1e4cf43ba"): true, - common.HexToHash("0x35fc339e6dd0793338f06fc11637b499f99672d9b96fbd3f75046a94b531f9c0"): true, - common.HexToHash("0x2ae776c28cb645a5575b3f645264ac23f52d7b77a055e927859a9e3479ff7299"): true, - common.HexToHash("0x797aae626d425c145804eb3a9ed974b2584fe70ea7086b92c927589265b9288b"): true, - common.HexToHash("0xa7eecaa0e2edcebd2cd2f5df716c7311c521ce10a8dd2a79f07266df56bf8b29"): true, - common.HexToHash("0x3f462ae5ddd8746798c2e959ae4e52dde7880d23a73f7fc888c476719277a615"): true, - common.HexToHash("0x29da7e567b7e5728d7f49283ecd0a1523901df6a6d3a462a1b82fad3797d16cd"): true, - common.HexToHash("0x286a1145e207283c8dffafd290d7366e59ed9a790acbfd57a41e850341b9f54c"): true, - common.HexToHash("0x84b1d4816aedc3e1976504c9078af5248394a34bd9ada63a51375ed308cb9355"): true, - common.HexToHash("0xf809bddd0488cffe57f1a2cc2233c8eb5b16a1ac019f66dc317c59ef724d161c"): true, - common.HexToHash("0x9605eb6141cc01357800dc45e1c094653de88db888fe0c8197d3b7a1364bd0f5"): true, - common.HexToHash("0x89038f49211be5eb67408173d6970ad33104a0740cae0bbfeaf03b637c5c3ced"): true, - common.HexToHash("0x76586b51569ea0c0d9cdb27689d1e3bc37676c23c19a605b734a70b2a953be3a"): true, - common.HexToHash("0x28779863cf8998c6bea8d147d24ec517636cc28f8123adb832daf1f481f44544"): true, - common.HexToHash("0xc2dfa547dfb5c9f267477098835ffa73b061f9035ddd1a0e9b9df720791670ca"): true, - common.HexToHash("0x130088097ef96d76ba92c99d8ccb23e014ed2ae0b4ae5d11575707d62d0664ad"): true, - common.HexToHash("0xce98cf3109e95aed6ed9af84cc3c755d4cc3b1f75f1080b5a9ba682959abf5b6"): true, - common.HexToHash("0xdda6e31df673f5aed609a51d879b63568b4211a5d5b54dad4013499ad119aacb"): true, - common.HexToHash("0x04109cc3e57670ec2f7a97a71c3b4c927745103077c66d34b614073d657df5b5"): true, - common.HexToHash("0x6c6332501a832c7e168da87d2f20baae0827dc722e11db95c9c766e486e8215c"): true, - common.HexToHash("0x88e8dc14dde85f6b1325dd75bec6149678ba44c35b58504d550ca3e2a0bc4d6c"): true, - common.HexToHash("0x5e805ee1d5296e14b292a1e8cca635125920891beba4a3990117e2a8b91dfc9b"): true, - common.HexToHash("0xacf14919cecbd3d7e9dfc7636ffe38164e0d5440d074b9dadfa3c2aa69772164"): true, - common.HexToHash("0x81022add7cf5bca21f9f40d70722f8981e2e858dd706d47bde4081129abf06b0"): true, - common.HexToHash("0xb4cd68d262fe1b32817ea2f73c56e1c780f898893d229fea5f2b3877cb89a62d"): true, - common.HexToHash("0x7513b43210d2b663048216b43a762f285d58bd00dc918c3ad335c0a90d3055f3"): true, - common.HexToHash("0xa076a659c34951b1b6d7e23c44703cd4fe2aa669211a8e79851087822b8f438c"): true, - common.HexToHash("0x1d14ac9d5806f21aef29269d5156cabf2a76faf457d8d48c7d9ed002fcd80cab"): true, - common.HexToHash("0xd029b6898d21257cf83df74913d7eecc3cd7d5932515663be6e1f1f6d02d4e84"): true, - common.HexToHash("0xf25f9741b8b016a990f4c87e96c3a0c6af505e17d3c0b7472b984b59cee61953"): true, - common.HexToHash("0x4f56acf99a6af583b88b4cabe83f933a6da57bdb2a5f96b0e8617e80b6f22fd7"): true, - common.HexToHash("0x6b36543b62115e62ad5b137140f5f8ad276532a3eb5011762e2e7984a8d4bde4"): true, - common.HexToHash("0x14afcc08a88bae8156a8b98316450eb8cfe2756fcc6909ff80d9d79a3f3c6d79"): true, - common.HexToHash("0x5f1f138c6dc027044a5c34a3d8a2b557d2ec8c340e4b26802fce8921759ba10f"): true, - common.HexToHash("0x9b067dd0292b0df88d556db393c667c63dddb8ca560267cf3f67763aa8653bca"): true, - common.HexToHash("0xfb8f0cb3ae6ee199ab374d361ddb34f2e64408ba9619e5617bca1ba71919b111"): true, - common.HexToHash("0x9a41aabb2b9e44d7007d0a28e94144b0cbda63cbb334db71e876544d5361df17"): true, - common.HexToHash("0x1efd35760c4c2955607ff842f1a486c09f29c709bfb2a2b232e591712b8fa5a8"): true, - common.HexToHash("0xcb08174c40c548e49279ff73aebb6253ee5a21ecfd94463def88d814a43a975a"): true, - common.HexToHash("0xe8a39a4963348d59420f9b6a338b7a03dfaf7d082f8fc5481a0010bf6a146557"): true, - common.HexToHash("0xd6214f92eb48ee78b3f2cc3ad73467d7f0bd0c70a582d174f00e85d03142ff17"): true, - common.HexToHash("0xd6a43ecd553bca6a358e5221a962382fb90de026650cd9fba4db721f9ed22a62"): true, - common.HexToHash("0x77a3de256a126218a72128d8aa897b79b7db11975534df81f175d2d5b8136535"): true, - common.HexToHash("0xdaf8d27246e1ef793016d458475317ec87ca93eb738a40657f5052b9c88a5b13"): true, - common.HexToHash("0x1c239ead45e66a83ac93c2dfb9d0e7e0ad54690c1a494bbaa08066cc8c01f4d7"): true, - common.HexToHash("0xc505b55865c4d20f4aeb200a6878ef1686fe7a4fc84e35d894ca0e7655acb4c1"): true, - common.HexToHash("0xba7965873f8423a9328e92b02ac2b54435e69456d3969a6d8d254a91fdcfe1bb"): true, - common.HexToHash("0xc1435c609a9bb555ce68b5559bea91ef823ad1f3211bc79a369e99f87045a436"): true, - common.HexToHash("0x4121719d160d4b90c96a03043a616cb615b0b095f02c0a7f02be650057cfd905"): true, - common.HexToHash("0xc93a45e25f002bc58aca03b97412134d516c249a9c445b206ffaf5e6060573e2"): true, - common.HexToHash("0x2303eec208c3147165d5454486ed05067a7c4a697dcab4da5bb1f4ddbb9c68d7"): true, - common.HexToHash("0xc000780f3a1e63e11b84e13a7deef1e07c3322edd661d1a27ff28ed2ffc137a3"): true, - common.HexToHash("0xfd7adbc7b87579d9dc4bc568023dcd6e6562849c0bcf81fb2671f1a2347962bd"): true, - common.HexToHash("0xd10a690cacbc106dcff103b664c8878af501d5c0eaf62a9bc0b21e4c4b5b5cfc"): true, - common.HexToHash("0x9f870078576de5c17175ac363fb82809082c0c607078b45f792cb33a8c727cdd"): true, - common.HexToHash("0xcfb5798469ca47625c6da60af0864dd5ea298a09ea773c1fecfe0d7a3ee0e63a"): true, - common.HexToHash("0x2e21cb009ddbcc97f74b2f76371e9a42f7d3f6bad14da550399c376ac944d7de"): true, - common.HexToHash("0x7a0f8c201be46b8b1ad1c4333940d11024ff1275c7831c13d7eceb34040b26d8"): true, - common.HexToHash("0xdf97b270057de2f7a10e23026d4f50cfe465ee3b42553269d30b0e26ccaea9ab"): true, - common.HexToHash("0xa35964e12b5c5f4516c33d42136ad7d2e2facc075535b696256b94fefae1cc7d"): true, - common.HexToHash("0x6b0a9fb9dcd0e4164ee0f1008046430e5d1d825319e6897aac2d13ac4c76c1d0"): true, - common.HexToHash("0xe26a9147717e3f73d3883621921a285f44bad735d67626de2f7d8909e65a84af"): true, - common.HexToHash("0x85f082165778f4ea3bb146b62d0ecaae1c4971b8b4c7d4ef853f77a5d6ec7939"): true, - common.HexToHash("0x8cb175b09147a705a69a1dbd75b6ac4cf93c9b638a54dedee9b43b11a6c88934"): true, - common.HexToHash("0x644c0e7e55945ea7771530ac697cf5ce6c9115b5d1dda3560b4fc46a5b3eb9fb"): true, - common.HexToHash("0xee1793314e4e3438f2772b528a75ca34fc5ff0a162e39d2182710b3e6ed44261"): true, - common.HexToHash("0x5fe5217811f6f0296435583a1dd5ef74991e84eedffe92964a7caac5afd239f4"): true, - common.HexToHash("0x3c1c6c27c26ec06de6b937b6e8ad7bc031243e4ba4e3ec3bc77b774b5edb8d0d"): true, - common.HexToHash("0x822de514307e981fbd1fbb50070fdac5c34d640a7cc94297f6cc2f43b832f2e1"): true, - common.HexToHash("0xa5510c3a0773fd2409e5e090a036146702b0cb2fb731c1aaba42b2465799d7a9"): true, - common.HexToHash("0xf2c1ddf85ca6f164686e9d38578533c6d9c674d8c2772011db07934dd6ed8407"): true, - common.HexToHash("0xe594b3da17bec71b2ed657a958a2c116c56f4a78896702a47ae00f85362a231e"): true, - common.HexToHash("0xf55c8bbc416dd443ae45317db022c42f0884b9b2358b454f0405819484bc1a67"): true, - common.HexToHash("0xdf8502791ed031a169470a5ac0a7a937eaec8ba0b68f2685d188639e26f6898a"): true, - common.HexToHash("0xc011cf30f3eaf5ab8d6e1d8ee08d3b6f839a3956d5ac0296ff4d2da0bd0464c6"): true, - common.HexToHash("0x67d352c083a572c67e44127a68eaef621c7f59cba5f49eac73ba09f42b6d12a1"): true, - common.HexToHash("0xc18571243ef70f49ef3bb8f18ddaa37e0902ce534e530536b3b6e28a3930611d"): true, - common.HexToHash("0x4162e1bfdf805109ab94a9da36d2197ec827c92f4e3c23b363ba40d604eaa2b8"): true, - common.HexToHash("0x87c28cde99c4a54d25d30bb7e6e74726e477009d06de324571b0c9b10d883f3b"): true, - common.HexToHash("0x17d1312ec71905a2306e2e21c9a664bda325ac997c27b08af8cef57fefbbdefe"): true, - common.HexToHash("0x3d4e2e788e2e3f2bcf7fdaac55d634ec1a0f036713f531107ddcb8ac400e77e4"): true, - common.HexToHash("0x0b85a0ea4649ecb7c7e00da6269c6d2113184fd96c3d3da42dd373fe2eb5adcc"): true, - common.HexToHash("0x1bb8a5466fe2ce980823d83a3c42c09d4908bb93864e1e88f96b7f052e33dc11"): true, - common.HexToHash("0x1e553c3c949230351bbca3bf8c9509b718d312075657cd57e390b3071f36c1aa"): true, - common.HexToHash("0x3e39dd1bd4f5eadcd44c7d4058e03303830efdd5243d94f7f3cbfff5cc387b47"): true, - common.HexToHash("0xe29d0d868948ca1c5f421c8ffb6c378e61d01c355645a4af421e0f82653c449a"): true, - common.HexToHash("0x071f3be13650fcf4a3c3b63cc94d3da4dd43caf121e90ce48788e79ff11c3ca0"): true, - common.HexToHash("0x8ef4e5138cc32afc54f886e7a6c4da2950e3ee9e17d7135229f8a1e6c154f331"): true, - common.HexToHash("0x3dfec7150fea3e851b6f980359f58430f8d299bde083cddeb36b155562ae81ae"): true, - common.HexToHash("0xb3bafd3397764c23c35ad4964b7d1e1c01355de99a73684fbf83838d7e33b15e"): true, - common.HexToHash("0xabc52ef48b3e24f453b8eada3c98dfe99c95eeed2c9ba18c7ce432c6295a11e7"): true, - common.HexToHash("0xc1cdcea201d98346cdbd6eb49e3b1ce169d25e1cf92e7cc7c4f283a4055e0da3"): true, - common.HexToHash("0xc9f6463c116ca8898d3c460f36d9e3461d40900d51ed58c3961613dedb64ccfe"): true, - common.HexToHash("0xa003d2da1bbd4f1540a08faca3a31c14e276ec40d5f813f1375ca58581befce5"): true, - common.HexToHash("0x4be5493eaaa43314dd8da723f817f89165a8bdd363b7bd7d0707ec37cbceaa81"): true, - common.HexToHash("0x171999ab3770e03c8a61de01274b734f686ee5211bea873ac1508885d9e2d419"): true, - common.HexToHash("0x1e88a4a25e8f5ac671d1115a2e798532dc79820556a69ed8c85704ecad2858fb"): true, - common.HexToHash("0xc1a148601038f7f53d329380bd44a793b6b907dbfe53b41729cacdf36a8d3dcf"): true, - common.HexToHash("0xb324fddcbf8c79e72f10c3cc68a3eec84eeb1878d2d54fc42b8ab7b5a0e42d57"): true, - common.HexToHash("0x41abd419b82d33448cc47cead86c4aa0a82bf564fc1bca181f5692cbe6e35926"): true, - common.HexToHash("0x7c5bbe0dfab63632edc8fa1f4bd5efd46e8c4fabd0355fd38729342b030ad85b"): true, - common.HexToHash("0xdc3d7bcebfc6bdaeb772e5d8464c430662cb849983758c324ac40b5cf63cb66f"): true, - common.HexToHash("0xa2eb2393bed04af00dab83ed389b5e383880fbd2d996fc04fd945bd12970abcf"): true, - common.HexToHash("0xa58b40cdeb46001b663b390ea7c839f818e3706b7fb462e9c91cb20a0d38aa7e"): true, - common.HexToHash("0x99a3162c963dd45f59f437b5094b3c6f3a5df2ca8683e4057caa7089ad6bdab6"): true, - common.HexToHash("0xbb657509e49c8926940eebc1847d83460d4f684c212ef96ef84705964c6d5bec"): true, - common.HexToHash("0xef9846ab6a27cc3f5f13719456f47cb322fb128b1ca8166d8a1b2358edf378b7"): true, - common.HexToHash("0xfe310d77703ebcef1d3f4d430216d4d415c063e4f543ca30797c1398b54e533f"): true, - common.HexToHash("0x66d0082557b3949f7858d6ae806efef27736011d9d64880123613c9ddc29bc28"): true, - common.HexToHash("0x5ee85aaf026c2c9235ce3c39c473ff1719f23a5d2862bfeb482e08596dec306c"): true, - common.HexToHash("0xbc4693267683acd34ef9d3fb2c0ecb37c11734ef4749177bc44f121cfd83ee86"): true, - common.HexToHash("0x0d7d5ade0e5fa82defd927050055afd7b10c46e615ef1b03818d710040058939"): true, - common.HexToHash("0xc5937645dc669ef1eaf287f429116a87056804ba395ca9df13f64e58067a3299"): true, - common.HexToHash("0xc4e4a56905f3cd9c3654f8726158dfa885f86e1d0c523653d94f0975d2f6153b"): true, - common.HexToHash("0xdb4557eadc006ea247140769e3a1a277c9d2acb79f2b5590f10c0bdbe768b739"): true, - common.HexToHash("0x9831f726a7d40b62fea80fcab2a2c8a86235fbad5f6ccfe67f26e9e310c015d7"): true, - common.HexToHash("0xb73dd213246f01d75e209d9ab3d7e3720de6dc99a017a3221976df4b46c448d3"): true, - common.HexToHash("0x7cb07a8ceae857f2abec633f0c3ac2b5384b4551d91b54104ad286b05efc89ad"): true, - common.HexToHash("0x4871b2c464f8815a8594e183f3a4041daa77cff9177740d1b2aca3a93afdada9"): true, - common.HexToHash("0xbd469f9a8935167d1b05bd911a5e0bb01adfbce1f97ba327049cdf3730cfb32f"): true, - common.HexToHash("0x68ea9c18d0376de17e02826079aee993dbef4fd981c379f47c83884e464abb57"): true, - common.HexToHash("0x5261e75d0d8f6a49fa53eb94c4573951ee248ffe49456fab287210d9ad81dca8"): true, - common.HexToHash("0x5e25e94942128443eb20bca3080eddb888a94a5a1721d8c115a79ce8b9f3b408"): true, - common.HexToHash("0x839973d8312338bc9dd624dc16f219f542e915a414f8a86b3776046fcbf9d3bc"): true, - common.HexToHash("0x9e4ea739d1f50aa7b6b84534d33752990a062e19bea4202a630d82da646f88ad"): true, - common.HexToHash("0x2074bfd66e7ecdeb944a9ab91a3aab9224e8e6e3fbc34cc3714613f7d3a25939"): true, - common.HexToHash("0xa13fb4ff5678a73f44bb97124f6b0129f33b35277f5e9f8f20f3419232a897da"): true, - common.HexToHash("0x4dbd5dc68899a0767b11a02f87fdcb1fb8620160a7074894f76abc987de337e3"): true, - common.HexToHash("0xaebec93ac9b74af95ba24cf3091d2769b4b892acd6a7eac4863d7f94b197ea75"): true, - common.HexToHash("0x419eb6ff4c6df089b64d6e0bdac16a20584424c1c7aeb675850cfe9ec117e72a"): true, - common.HexToHash("0xdf75a1944f681a26d2f20d7c88f33572f5b66fbba51d814b4bd2b72ed17af740"): true, - common.HexToHash("0x33b3b8b979e2e19c1ec8b83d908c32809a93e86bcbf5272ada2607160c1653a7"): true, - common.HexToHash("0xa9b0846ae017bb607329590a3d658e7eef879b02dde69c6b39235f62d15b91dd"): true, - common.HexToHash("0xa78760525ec56562f401dc06d8a67a7c5ebea99023f87f670e290c70a7ddcb48"): true, - common.HexToHash("0x8fe5d51752863a71fbbfe12fdf6f5167f5274a0f18e8681ad976186c34ce3e00"): true, - common.HexToHash("0xe0efc41d2c07070544c5291fca128fc4be47947ba91b6bf81027641f20b7ba96"): true, - common.HexToHash("0x054d1ab59f0078c04aa91ae6ebf86c350e37da8eddafa0f03addb8e5d3e33ebb"): true, - common.HexToHash("0xb10828fc1f42672d1f4dcc3c1b58554a6fb888d69f3a97a679bcd27441609c20"): true, - common.HexToHash("0x4c48b79e386085deb50982bc93ffbd83b4a4bcbdb6b2cb87bf005e74337d569f"): true, - common.HexToHash("0xe1e3caeb6e2f6c535d59731095fed0d065dab5d05493e46c79af3ff776f38554"): true, - common.HexToHash("0xc1ed913d3ba008f6773c9ee11b4e4dd366a647305a8a55acba1bff97b6614a03"): true, - common.HexToHash("0xee815a60ac6df7c48f96beaee205e9e9f8891bde24255425f5967cefb90dc913"): true, - common.HexToHash("0xdd25b7971dcd5f1e25fce8997e62f5793ba6fdc2abea680f3099a53792c6f1dd"): true, - common.HexToHash("0x8b633590b92ee06e64eb2a094638fc1eb41030fadf57f1045e3c4b8e7c5cd861"): true, - common.HexToHash("0x510694ef55ee0844082fbc1dac802256d44cac7c4c78877d10d5be33d1196df6"): true, - common.HexToHash("0xf66d36a56b085721265afe24b71708bde2163936008fd2dbbe5471b1da222f3d"): true, - common.HexToHash("0x69a04070722cb3313f031a6228c8dabf13410d0d38d7ce54e06d57504d4730d6"): true, - common.HexToHash("0x396975532e4e9881038da54bcfa964d3539ad8c6b2c54ada6c181d9675018f26"): true, - common.HexToHash("0x11e703ee4750430eb8b608f6a83405c8e44434c104a53a5d37c8867f17395bc2"): true, - common.HexToHash("0x3e4741a396b3d797f533fd584a7b510bcb9473fd895df089979801327ae89eea"): true, - common.HexToHash("0xfc5e74571b33ff73eb55e0d50d7fdaa523de49ad8f1ade7736b39d15b063afbb"): true, - common.HexToHash("0x70997b3ec9f1c9d8346880f3062e8beb3e0b96f40e24fbe33a09a54fd5f7cc9d"): true, - common.HexToHash("0x6322b008465efada47545344f7e578b5b5cfef331f1ddb432bd56869cc599fbd"): true, - common.HexToHash("0xbc52e0d9f8187854526da66fdc19595af5f552ac309a39c3da5cd7d182e5e681"): true, - common.HexToHash("0x734e0360ffc3229c07050c1423390cf0ebbce3b1311f00f80a1743ef86170077"): true, - common.HexToHash("0xbb61de71ede3c7b1faf7d45118b6d47549fa4a6032694f352abcfdd8deed8af5"): true, - common.HexToHash("0xdba31a0e1ff63ba4d194a13d11e17005856e1bf9ad9f60df56c5b1a13665dd81"): true, - common.HexToHash("0x45a4a7ac39f3e9f70f6d606a8ec5599d76c198c95c563349c8ef951bafbc4a52"): true, - common.HexToHash("0x783a4cb7e7cebd95651e797fd5a960f8a49e1cc53d39d2b49d9cfd47f2330bb7"): true, - common.HexToHash("0x2c2af0ee212c011b342718bd6658ab2216c4d6acb1928ad6abc46672103ffdab"): true, - common.HexToHash("0x277bc3ad45b521ff7704b882a2e36d30f7084319031e6336b61ce9a773546d83"): true, - common.HexToHash("0xcbd9e94246fb4adb9cd4ec5f706e7a1b36844b45902e3a1dbb5c27c70f48fc86"): true, - common.HexToHash("0x7fdb911cca7139bf1a3195eccc83850d26379a5d90b7ef629b0357c7adb40602"): true, - common.HexToHash("0xeaf7ba4015c4ead595627fd8d9f2893dbcbac9c3dc28f69553d6e06adc6e84c7"): true, - common.HexToHash("0xd1af9b69c903636f8b92e7e620f7340e27d9a63c8869198bf71da9a83d9d5d83"): true, - common.HexToHash("0x2ddbe84b50e8eba49c55c19810ee07ab3dcd385dd6bbd9fd3cc610cec768b115"): true, - common.HexToHash("0x8a0fcc603a22d3c1483d7ef435d314d18247b9bcba4b151597ebab25ad5c4596"): true, - common.HexToHash("0xc9674427c5f3ccdc0fc80845940cd46f62bb98e0812a186ea6d213160bcdf87a"): true, - common.HexToHash("0xf39a09db47122e46ccde07cf6e0cda124e3f099640640de515d51c4cbae6532e"): true, - common.HexToHash("0xee44ff6078a92c51ef8e6fc62861071cbd19937c986af1de35c645774ab9ea6e"): true, - common.HexToHash("0x7a6b110a5fed00dbcbf9204e16186604eb1cea7627388fea484304b69d208760"): true, - common.HexToHash("0x6d80b0868ed39790a1e8ce533f920bf4431c5efb463283fb1e6e3db483aa3a5b"): true, - common.HexToHash("0x898728adfeb635b1b2c228829fad94f9d08e14ded11fa52e6c5f0279155e80ae"): true, - common.HexToHash("0xa720e1edad89cf97c4b96f92cb9385ee89ccac600f541e608c34eca7ef21ffe6"): true, - common.HexToHash("0x1c3549cfb4d6e261511cd33c5897b782d3e7b9d4fe8246bb5cb3bfe20bf7ad87"): true, - common.HexToHash("0x7d30066f67cd062e479eb6dc0daef05f3bc2b4ff39cc141ec6360c29a129b249"): true, - common.HexToHash("0x4f0a75936032da1e560bc6502f0d908e9e97a093396c8d8fe06a21fffe1169ad"): true, - common.HexToHash("0x1371b38e04ed3b73d736cd42540f4a6544d48ab1166e8a23bf2ebbb35176f3fb"): true, - common.HexToHash("0x6796e6d6235b1d01994379f07045f3f67c3a768ef3082e8c719a5027b4ccb546"): true, - common.HexToHash("0x660c61f3313daae83cc46d7f781faee2ff02ca230f4b8900583517e9675eed05"): true, - common.HexToHash("0x2e04a4d6dc7e78d5914d474065274b43b0a3ed9c540edf157b8310713c08999f"): true, - common.HexToHash("0xb8cc6aa7b230df1f910b2fbb0f2699223a81d536f9c6de8dc43297ed26e7c7ae"): true, - common.HexToHash("0x262727f692405ca9d440ed747a8da4e5923b7bc13df36da87d785f8b0e4d89c5"): true, - common.HexToHash("0x7da2b3c27b527882f2ee65d300268178c61611f2c20dcdf5b504b6d8a577a6a7"): true, - common.HexToHash("0x1a4848207f0805ba3b040aa94352881bfdcf783f42d5230b11c8ee616191cf62"): true, - common.HexToHash("0x8815956417c912c0a9e8ab90a8df58f79aeb3de23c3534c43864b75ae2c109fe"): true, - common.HexToHash("0xff2804fa04a6032eebc5b3800d7a08a743d9bf2b2a6716e255c3efaea1248a65"): true, - common.HexToHash("0xa75e47050eedab570f7c9538a8b581a8056ed393f5b1ee29e038fa9749a835f9"): true, - common.HexToHash("0x15dff80109db19f12a92afc6c1e9b85156c910e35c20f49f1e181aecc8cc8dd6"): true, - common.HexToHash("0x8ffc6c3d8bfecc14bdab28639d005f2895f6720a400d992611f85ab88bfb3508"): true, - common.HexToHash("0x0928a96bb167d3f54af596dec6b9f67231749d20fdbbf322c8afda46b3ed36de"): true, - common.HexToHash("0x68180b1c90cade6b28554f3acd60b05b10c84c62f5faab6098343d8e85ef4949"): true, - common.HexToHash("0xd3461143aa7ec0152c78788bbdd06ea845e9aaa520ab07343c7478db7b6baab2"): true, - common.HexToHash("0x49b8e8e2e4110fc38070997f774703792a03010a7ce07ef211b1b1ac0c38e0ab"): true, - common.HexToHash("0x8cc23eb198ee1cb8d2ae27be4ffeed3ff60158ba33b7ca93a0fbcdf9fdd0c415"): true, - common.HexToHash("0xbbbbc06bb3f608434cc11538deebd78754aba8068ad37edf4d0cd7325380693a"): true, - common.HexToHash("0x22fccab8457bb65b214e4ba6054309eace3bbd01981275f5dcbd6409bdffc8ec"): true, - common.HexToHash("0x7d2c7d1363beee70babdb92f4b6c1779bdaf34bff0297bc54af198e4f2f09f01"): true, - common.HexToHash("0x50195d3318b2aef28fb432df450c990d33fa15918a9918260df9a1c5de3d6f19"): true, - common.HexToHash("0xbed833c958482d9ab4a2afd4100c2b33b407b110ec0e123e2c14f08146365d78"): true, - common.HexToHash("0x3a73c03322fa02cf33095157246b5cda427b8cb54f3eb221b886f2980e3d7917"): true, - common.HexToHash("0xf974be5b2e2c493a0e8a57a156a19b99e652f8d15c981d4a2b9e2a9a6b5f4b27"): true, - common.HexToHash("0x88f6c0a720b6ee4f9489ab30bb28a94624485372bf8798fb3eb5798320699e05"): true, - common.HexToHash("0xeeaf84da422b7456666cc60b63c21e3a592dcc14bfd28d8136aa26f23a4749f3"): true, - common.HexToHash("0x2b9d3d965e8f3bd0db272a420ff9a70a19ab883576bf6a406869a9dae8d4b18d"): true, - common.HexToHash("0x2bdde15702114648c9f7fbbe3a316bdda46eb652f94e0c9bf34bb93c22480044"): true, - common.HexToHash("0xdb3df111aa232067562faab8c8c5b88b08a6391419442a3f6056dcf129955f93"): true, - common.HexToHash("0x82f1100488a731f251efc7d281ff1a7ff44a8971a85ed930d9ecb863ce4520eb"): true, - common.HexToHash("0x48abc4a53cd740bf79fefc62f9eb0e54fcefeba17fd61f80f1f443cdbb2263f8"): true, - common.HexToHash("0x4327780c516940ee1e2b03db13a534e6fbeabc4c14de977adbda4e61364e7a14"): true, - common.HexToHash("0xc6931a86254b1226a1af0368959c59d1346b81b243c14687370374253dfb8dd7"): true, - common.HexToHash("0xf05d2579c3fe8fd2b6bc563cd6ec6c882d373c6edf48f03f857e15c8a2b5f4ff"): true, - common.HexToHash("0x3d2f1079227ee57217d9ff2459866a9b7ebbd585fe68eccb5e0d35427bcb6d22"): true, - common.HexToHash("0x2ef025900adfbe5e571875fb8d9c68e7282a697afa317002579e63429cf7b4bb"): true, - common.HexToHash("0xab73a5bdab85fcd1c5a0ef55e1bfb8a0a1f7e9462ddc960f5bb42a4abe564e6f"): true, - common.HexToHash("0x55c1552f8c6c3a7219b61975d9d3f3cdd1f62f8f9e96058edd22816e7c87d555"): true, - common.HexToHash("0x8bf30177801ea6e41120ccbe9735872067738bc492866430c9a65d85f389a16f"): true, - common.HexToHash("0x78a8ab819a392083e9680c33fabf3ccef2dee174c534455ff59050192861d487"): true, - common.HexToHash("0x2ba904799d897512afaaadcd85c2e11b3675b8dcf6e6414733e3a3378167f2ce"): true, - common.HexToHash("0x6fabe802d290ef68e711caa00018a228b9587191966489a1f3ab9b1e6d67d7f0"): true, - common.HexToHash("0x79436fed2fe0373eee9b2795893e7f1e68144dcb381413ca561b2cc7efda15e0"): true, - common.HexToHash("0xd29f95616da2586ba3e9e4988fc7e341dad67b4a0398a8750b25ea32cbb93234"): true, - common.HexToHash("0x61508f6efe648f4faf57b05bb82b041cbb6389b06f480cb203571288b690c002"): true, - common.HexToHash("0xfbc5d879d69b83bec8e287c0f78048c5e7c015cda6f4011f4f5e024a1aef7c8a"): true, - common.HexToHash("0x4e1d026d7475ec79bc2933c73027bfaac0eb082fa43586247b6feb180a2a4f23"): true, - common.HexToHash("0x23bea8b608b66268b1140a6fce1bee3e54abee55128365b4988e73feaf9ba71a"): true, - common.HexToHash("0xee6a2e30441f26b6c5e9c7cf2fb9b7b56da9794acc2fd8caef346f36b7552052"): true, - common.HexToHash("0x1b0e4c7d5cfbc876828e4bf007966f32e69cc6369ede75dbeebc914cbf96d164"): true, - common.HexToHash("0xed31a6bd1fe765e4f6324c29b2e310a237537eb7d7bbdc6d2e10fa3119e44732"): true, - common.HexToHash("0x77f51e859611835ff2ca4adfe4b945924ff4d3b20884135e2c4ddb282fcb7029"): true, - common.HexToHash("0x7e7d78fa3c75cd4b1a9e267c01a3c04bd3b99c09f237ff85fee28e4c6c1a7f42"): true, - common.HexToHash("0xaf4e302af74f190c81f188e184d1347ceaff52b01a91b634c81ab596e733bb17"): true, - common.HexToHash("0x3a14c10d07bd3480685e4d0c186571ce8553a317ff1978d406122aa6992c19e1"): true, - common.HexToHash("0xc02cfaa823e41b2e0f0186c0eae9f15726b0aa8c66dcb862cc6ca597895c64fd"): true, - common.HexToHash("0xa2904a3b8b1f45f5a99315fcd47bef304beeec4af439010b702beaac0cfcab64"): true, - common.HexToHash("0xffc034e56c3f0eab661a113df6c8ffd61101c9c9b165998cd6992191d3df88e1"): true, - common.HexToHash("0x1714d60762bcf2f29fe1cfc2acc7979aa704cfd3aab910ff14444f1d7203ef82"): true, - common.HexToHash("0x2b3316589a474f2e1421c0206a7bb262aaa20db56dc4c23ff78ae7755569257b"): true, - common.HexToHash("0xac78aa3a765d1e066917eb2690abcff01a89c5e0f726b59c6fa382f57907b26b"): true, - common.HexToHash("0x415b3e3e83f082d0107c29c9651d71bf8df9447121eac5447f2e516a043c80ab"): true, - common.HexToHash("0x067bda44d850ac6fbcc8d1edd0605010ef44046cce00bf019d830e19a82b31a0"): true, - common.HexToHash("0xdc30cc93286884b92f493b253b85e2342f5e335483eb9e8b59d1b6924d0bea01"): true, - common.HexToHash("0xaa4e995922f19cad662eae466ba8b3ef0d817c5058b018c9b349b66156a9070c"): true, - common.HexToHash("0x84376ce4bb38b7f37816b0c6e4574b581c685872d163e3d2bd298b14282113b3"): true, - common.HexToHash("0xd65320145fc56afef8e4066bf9d20ad1586b359666ef690f06594912e4be4ffd"): true, - common.HexToHash("0x61a085cc482fc9bbf11eff935f25b8b190eb82fbeae46d04a1d61430e1ce4aaa"): true, - common.HexToHash("0xdf33497e25ee86b0da5bcfd324a22c6fca70d94b7f99ae569c21509dfc5e9874"): true, - common.HexToHash("0x837b4633fae98e8efd308c579a7a35d9926a66e51eb9e58daa12edb8998bd434"): true, - common.HexToHash("0x2448742e41ddb9b0cd9e3ea2472f08c64074f47696ed94e749d6029c3b450d12"): true, - common.HexToHash("0x2540f12c2b0b73d920c5a1b0df5f0b26791e06eb6e2687fb095b03ad320fc25a"): true, - common.HexToHash("0xb6b5be6873607e1eb05d377d3e03d5074a9f93a375be729c09f414c08be65f63"): true, - common.HexToHash("0x30852cd085b355d18d4bdf61a4aa20a6c9d2af5018d9c095a694cd9382155ee7"): true, - common.HexToHash("0x764ce52459c57d95160ffbc802c0346f4a7fc6a206f4ffd6709669bf99e34c1f"): true, - common.HexToHash("0xb08666a203a127e10019bf3a58ca6442274543b4f81be1c790fd47c870ec10a4"): true, - common.HexToHash("0xa625a1f5386504315a3833f1d4a45e3b968aa62122190144911152bb25a16af1"): true, - common.HexToHash("0x82c4a4cb71eac2b6fa4251a63ec4daff1e31ce0763fe34e22a67bbf66bececcd"): true, - common.HexToHash("0xa5e19ccfc7232ff8ef331ba9e5711e04395657764e861d71868656c2f47dba4b"): true, - common.HexToHash("0x713e4a420202037bbb11b5fbb7178a996618b7898032db58e935399fe7c8c858"): true, - common.HexToHash("0x95f8a370c2bb219c8196fc4567df62e64e3045f9b40aedbab7e3861b30f4b9df"): true, - common.HexToHash("0x28c0b39e3665b2108ab7cdaa0dde73642ff353e7384e99204853ec3ead54153c"): true, - common.HexToHash("0x66b158dd3a3337009231cf23ad3c41d119b0cb5092ab2f5ae21f81b82bc74501"): true, - common.HexToHash("0xc7f518911474b247f970a7625b427d625f989e0ab80ea3fe1a1d4f89ea1aa5e7"): true, - common.HexToHash("0x397e1250137333554c8a6974883b214b2c4531caf5d8163255aaf5f819281d4c"): true, - common.HexToHash("0x3784163652b1c2f11549956cab648365c9242dc7f72d20c20bef76de13ebfdc3"): true, - common.HexToHash("0x91d9817013a0950ad2c5f35932753d4eeb109f3bc578dde6959a0d1f6f07d07d"): true, - common.HexToHash("0x306e25f3fae8174d9ca1a46c87d38bd15a71a42f701ca1bd154372dfa48a23fc"): true, - common.HexToHash("0x637338f23673f35b4c1b365a8bb182c36dfe1fde1007ded58d3b26bf160c5e28"): true, - common.HexToHash("0x04aa70d07a397b0c7b316caf994c9759bfc47666752337a89bbfcc5c7b83e9ab"): true, - common.HexToHash("0x6c5b198c62d6a9374305321dedff55de448f5891cb9611ccd643ca40f87a1323"): true, - common.HexToHash("0x0abf92a4ef432f51701b92855bdc12932714be1360bbbac59d7eb9dbb8db3a45"): true, - common.HexToHash("0x5cf2beac534164333a73af7ea538d55a2a16e48a6bef139bbb55ef20b07aa4c4"): true, - common.HexToHash("0xb74cbc037987a006c25cd8eeb8a5eccd2a75e7dd25644d733b6d673bdee747e3"): true, - common.HexToHash("0xb75b5db95833619c04c3251ac3b0574b5fff89b1d98b96cda41e54100d477d35"): true, - common.HexToHash("0x4f936c8325f2a2cc5be6ecb1b3fa230911a5e4b334ea0175beb20bc93ab2f862"): true, - common.HexToHash("0xe52a456afad03383b171a490a33cfd254ab8442bccd83baaa775c1972b54269e"): true, - common.HexToHash("0xda214b18bb413953aaa47081ccc4f5e1ce34fe6f82aba18e2101d4ac5d64d09b"): true, - common.HexToHash("0x965782117b08c697fd0ba299a0385212656f34ba4759de1100291b5781f8b80d"): true, - common.HexToHash("0x4b97856306798f94d0a999177f65e9146d10009449981b28b071e038e6ff32a7"): true, - common.HexToHash("0x3700d8f3404b041df56c84d7257477b422c3ab497df8e34a0c3bfda2ec047ac8"): true, - common.HexToHash("0x9fd64313366b3cecfdaa2b45bd2072ca0698d68ed9c471f20e87b57db19f3824"): true, - common.HexToHash("0x411f7810b14f95aa05d40da1de28d1c5d71a56a35c8b0324368a04c20da50b87"): true, - common.HexToHash("0xba6942a4a735d57826326885571d72f47d18544051cc8c1c4a0ddee6add94266"): true, - common.HexToHash("0x0c814de4549761fc5b479583287a6179ef7199c3b5ece045caae21623b22e7d7"): true, - common.HexToHash("0xc7003b287606dd2f57ebc652a3654a16fa26783b1d99b7a7642c87f28b1b22a8"): true, - common.HexToHash("0x85bc9b56151983ef16d3409c09b8ca61fdfd6c26f1e3f0bb6d285cb0120cbc23"): true, - common.HexToHash("0xffa7d3e16c3a3983bd221384e8a772f4ceb9b5cb284164e5d1c0b418e1b58d3b"): true, - common.HexToHash("0xe78a9e1f8e368e35616fe9ffdc8517a9120b7c5c8582ea6b8bda2c7fa79307f5"): true, - common.HexToHash("0xfe4cb25bf3a58f7bd8dc1a8817baad3923f12c7fd1075c6b4eaea2fd922981d6"): true, - common.HexToHash("0x3d0b76d3972c530bbf9d71d72ed33197bf5154531c7d94bef779b5d3b9ca84fc"): true, - common.HexToHash("0x011d3b49fe83eeae1bca3247679bf3ca9e811ca03296c9ecd1696497172bf578"): true, - common.HexToHash("0x10af6c7f89e5bfc24deb697e090751aaf489a1b37d7c7d9a0fabd01f59baacde"): true, - common.HexToHash("0xa87b9d4be651cb16f2703640cae8e8ae979c0f0afd6898c7ef5a2223960ce794"): true, - common.HexToHash("0x8d25c2031e8f3ff51548bd0fdb88f81a0d3436d11751f4dcfce776574d4ffe3e"): true, - common.HexToHash("0x096f7c5ef28fa8f2606b9460a067f8af43fbe2a2b59634355a950b4f894ee967"): true, - common.HexToHash("0x91d6adb439ea2fbf863939ca2c5547c1e0e5cab7e2743648ee57082d3b6a4930"): true, - common.HexToHash("0x17c17dcce06abec883930ec81e13c342291dea37f881a6e2ee653945e3443d83"): true, - common.HexToHash("0x57cd0e29e42cba892c5131c360468d057a7b1ed14a961b7a1a929783e1478d49"): true, - common.HexToHash("0xfc6ebf8eacd35e91acc4e75fd80d386d05a6cd54226c547b1d69047ef8b114e7"): true, - common.HexToHash("0xb87d48762101425130e72a16e749eba52d90746fa6d6690cf69c672d41de627f"): true, - common.HexToHash("0xa5a98884d55abbe99bcfd4f6d6b0610dc871f50cd9d235854979c026973ea7b9"): true, - common.HexToHash("0xfe7203d54a214ad9eb67b869e3f3f011f391b53f8e423d5312f29c32bf7fc3a6"): true, - common.HexToHash("0xd57e7d69314344bb74337db1fee6bf4ce517fe1b3aa4dc58e5a925bfcf2e9bc1"): true, - common.HexToHash("0x5fd6ed365dcbdba9539afaa0279262850486ddae72fa5d4e35788a4a823f9cad"): true, - common.HexToHash("0x97e3bc578802ea8991010551af8ef084d3d25fbecf51741469c399758ed0d6b4"): true, - common.HexToHash("0x23638a8e07213f8cd85f31ffc591623fb223a03a4958d8d3f97814d632cb6f64"): true, - common.HexToHash("0x560c0646ccd436b6544ba30dddb2437296e9021740ebb51501c27caf3f765628"): true, - common.HexToHash("0x8016cccf7c1445398b70cff74ffde1865433927f5e576b0a971a5b8518f4bf48"): true, - common.HexToHash("0x9375e7f5bd53513362eea3e2d3be54f79df31213a8bdd05be9bb545b7df34fec"): true, - common.HexToHash("0x2437406686fda2e0f43c08dbe3ac139aebbce281da17023fe6dde759763c6243"): true, - common.HexToHash("0x55ee0cf82fba56d686c9d6934474ef5d667d236467e9202ce5d3b71271a47e79"): true, - common.HexToHash("0x8b08df4cf4b74000bc2c86c5178fa37b7def874a41e2c3de973c53501bafce61"): true, - common.HexToHash("0x479110e811004c158fae8b35e856cb3745191fa065d262eb3958ef8c2684c1f5"): true, - common.HexToHash("0x13fa44072c313465670ca7e188229e844f1fb64b1cb80b2b1072d8d3508dfcce"): true, - common.HexToHash("0x98136db79faeac93bc9c13d7b4b0ebb0cb95e2854ec3096911d921ed4f0d6c62"): true, - common.HexToHash("0x6f2d062c324b7919b46bfdf9e1b48e73ef50ba91e0283acd1a74cf895b228d99"): true, - common.HexToHash("0x6c9ba57b8ec04b773babbb5f212823efbacd6a987e9a8c8fd99a08abc8e5c47b"): true, - common.HexToHash("0x79f45bb907b325497d2ef07e08751594c036416d5cd546972c012aeae1148c0d"): true, - common.HexToHash("0x47b9200af3b3e1b2d985cf70be81d64fd473e215ff4f919ca6c1a5f8a9a565c5"): true, - common.HexToHash("0x5ead621c4f6052d7e05f66df8faef9db9baaa1140873f78d3574c58875d151b2"): true, - common.HexToHash("0x374a9f7b4dfe5f7cafecee73cfdbdd8b494adbd35e266bccdaaf8032cf4ad7d7"): true, - common.HexToHash("0xa973fa2fc0172aae14d498902b330e596886cfcade5abeac99c41318e2e0dd3c"): true, - common.HexToHash("0x5e6c5ac1396d7da45ab9257f872c6b5be8cbb1a3b4288b6350ce21efc6a83e0a"): true, - common.HexToHash("0x65ac37b153126e62f20d48f13f66c2e43436d7df1e692cdcf1625b61557e5af2"): true, - common.HexToHash("0xadfc8460d61591b2794c0034099fea0d1951eac43d31e504ccdc0d56faef38bc"): true, - common.HexToHash("0xa2edefde6ffc578f647787b2765612965ebc7f2e7f5ffbe32fe0829d535af902"): true, - common.HexToHash("0x6959bedc577eee28a84436cd86853c122d16dd7ed02e7e3e87967e4f6533425f"): true, - common.HexToHash("0xc49ff9685864c39b73448b18ce020a5a0df499a8e0243687f6b841feab25c776"): true, - common.HexToHash("0x53397119b4d98cc7d877dd6e5575ecf725fc15de21cd68e52bc524b88ea60b56"): true, - common.HexToHash("0xb6c80d673d36825d6553ac92118d10a720b7125f9782d485357d00faae86e121"): true, - common.HexToHash("0xf93e3ad7f66f822e15379aa025791cd30e79e78ffb5eeb30e89f9398971eb886"): true, - common.HexToHash("0xafee3f37cb5c7a5cf8493538ad4dd4484c6d66eac3a2caa035c4b01421055302"): true, - common.HexToHash("0xe70e21d3b89bbac62ab7a35c128bfd953019f2c797c696ef7788401137cab07e"): true, - common.HexToHash("0x7757d19b39ab8e0c9c1c04089d9a189151e52885d88bb477f1d1ca705de2aced"): true, - common.HexToHash("0x222f675fca2605791a3ee5c0bb4d51336d38fca1abd3ee0fa451e9522ad087f5"): true, - common.HexToHash("0x3e487a7a0cfe19f471a30101a3ca25dc116a057466f400aa54418db8ebabd062"): true, - common.HexToHash("0xaaa046b7755351ee3ce4a8174b888ceb66e18e5603275c76df550a016c631c6f"): true, - common.HexToHash("0x94565b298c39009b9581798332b170d5f453d837386aef53c0a6e257e9f6397e"): true, - common.HexToHash("0x89e6e938eed64568f01649929b3a23bee5e420d3c6f188c2e886815f77cbe8c3"): true, - common.HexToHash("0xfbcc734f47c87527ceb2fe823f25f25fd5c475881ff1dc145f1cd058295b026e"): true, - common.HexToHash("0xfe23733578302ec746d59d7c414228706804346b80ff472fbb38495178544645"): true, - common.HexToHash("0xde067cf611d8052abe7a3576d3717cf4acd60e07d82bb40ca2da4f611466d1ee"): true, - common.HexToHash("0xc16f9e6ff6ade909b6bc7fa53275d27d57068ebac8caade9ab09fa98bf4f033a"): true, - common.HexToHash("0x5bb73b8a6a829bf678ecbca6efb9eda3bf20a3290e5574877231528ae1e4fc6b"): true, - common.HexToHash("0x4acb8174dfcbc25082b288bb77fb9d1c27ae472df67115aa9823959eeda0aee2"): true, - common.HexToHash("0xbd22699f33b083919658b0257a71d8624137410e6c572abf7b1d8b4f92ae573f"): true, - common.HexToHash("0xf673e3a1999d5c7b4dedb743117ef5f2e3f08b2651e09c3ae1a1dcee4a0cd388"): true, - common.HexToHash("0x73dc0f1728cded570940b8adb2c223b6dd6b409a36b83a24c5bc799dffd67eab"): true, - common.HexToHash("0x196396ca948d2c2ebc8ee185de26dcb9bcffff840bd321efa7bf9f7de23a634a"): true, - common.HexToHash("0x72b31b1ef325d903b6ad77e1a4065843fa180f6b1bcac5b987dd835afa54e27e"): true, - common.HexToHash("0xbdc9affe19441b6477482768877a33a283a1315e4e2a44f9f68bad1a181d0f3d"): true, - common.HexToHash("0x9a09518fd1fb88178f09778670abc99b657d97f1d58185e19bc2f6f61c37c041"): true, - common.HexToHash("0xebfd94b7a8962ff1f782f5aa0a479a7d90301a7e9d775763af8e803458fefde3"): true, - common.HexToHash("0x63f8c7d8cb3ff85512012d79b82c7dd02bfe8631c901d29a400302bf74d64a1d"): true, - common.HexToHash("0x015711d6237032fc6d57a85f080da630077eb50c779399ca1795aef7df50d954"): true, - common.HexToHash("0x6b27dfdc0dc8879f9d020dd2aaf436d5d33b7517fe7400c0451c4d2eea953e0f"): true, - common.HexToHash("0xbb2f6ef6e7ef9120ff93d6cd7ed00ac3de5ad4ea982f44b131ec0b043b9ec38c"): true, - common.HexToHash("0x9dbaa0f60c5641acfebe91d3308fd17d9519fce78e50663837937e2a058de347"): true, - common.HexToHash("0xf18c0712b9b0deed0c482111961d0e22953a513e47ab2c2336e6004e071dc430"): true, - common.HexToHash("0x7b4913fe846f00f551480ec579eaa7889e9940a9e86b2b54a05bfa1ade35239b"): true, - common.HexToHash("0x3e81bd7e60800d987330a2901634c032ad74a32607ab1c7c86a9131934e7c5de"): true, - common.HexToHash("0x4d19b1cc282a1989b0f7754f1919c5de6b646937958b820159d09e04b2ec3715"): true, - common.HexToHash("0x2b4c453cf4006390f0e627498b2ec2136f82940da5fee624efb3b328d06f3b92"): true, - common.HexToHash("0x3684212c333f58d6cc227a4d844b8fc105328de2dc52e7f74dc99b341cce64ab"): true, - common.HexToHash("0x4dea4d61bd325cb9460bafa791b3902816719b4dd1d8c34ee16c0a6a280258ab"): true, - common.HexToHash("0x24e2af3cf8e97165e34c8be12280dfbed00b939627dc6f921c54c0a61154eff9"): true, - common.HexToHash("0xda60df90faca51101462d3f2c1762b9cf3bdd859cb175725871bf9c37c34e0b3"): true, - common.HexToHash("0xc9cbc5eb2bd8fb61bc63c6b437ab28ac20b3d45c566b2219f6c241eb98283c06"): true, - common.HexToHash("0xe073508d2f6f89dc49208d2200d0a5c0cc8990e95e34d43fb234829cacdc789b"): true, - common.HexToHash("0xe992d3826ad40828dc92345aea6bfdeeb19dd7f63106884c4e7a15b764ffef80"): true, - common.HexToHash("0xd3e3789b5fec0263577772ecd5c7d85138cb06dd049328ec3df9dd59815ae545"): true, - common.HexToHash("0x3dbe2ad0468603096f2448a4fadfe792c03ad04321fd66b7a95e7be631f36815"): true, - common.HexToHash("0x79cf3a8cfeb37dfc69cb6c04243cc2ba75008bc621b3438555bb1d035202bf0b"): true, - common.HexToHash("0x2cefef9f44feef5cf289751bf8f95a573b1ce88b652da6f00dd996e8212dde0b"): true, - common.HexToHash("0xf7d307a1e6876bf26aedb03d1e289cf4a1d463fb4ffc102c5e268be345e30e21"): true, - common.HexToHash("0xf6f23588c4abf07d896d24c15c7e438faed126c9304fe3ded48ed8dac573ca2a"): true, - common.HexToHash("0xcc56f7e9341c80c00da272d4ad7ed0f25349f273b635bdee9e93acd57a3ed1bd"): true, - common.HexToHash("0xbb6bab2008851a7b465b2d293c6810c4a6f345863d5f15fee7baca78b91299b2"): true, - common.HexToHash("0xc4e33496cbab3adcaa7f6fb997cd60d0d5d4e362c6c8f59b460f57aa56d358dc"): true, - common.HexToHash("0xe15295a53d6653f1f39aaa2640851f513512f5f8c8be26cdcbc126d1e54c78dc"): true, - common.HexToHash("0xf34f434afe1dfe623af8aef3f02f572121d46d902934f2f1be26ddb2425584e5"): true, - common.HexToHash("0x53c51474d9346ac8235771d2c76840e9dff9f4bbea9ecd1b16808d5436e31fe6"): true, - common.HexToHash("0xdab8c8a3299623825ecde97dcbce841c7a545e5d109dccfd56bbb0d540dffa44"): true, - common.HexToHash("0xf46c94255db2eec3e7155511600b646d967b5f959feec9fcfcdc7ddc6e0c8fc9"): true, - common.HexToHash("0xd5ce592422584e205215ac29d3db9dffef3e39e3e54ecb83b7496484f8743085"): true, - common.HexToHash("0x4af26d830ed7745669cfb1dd785b45cfd49ac363f0c8d829798b5cd713e8c33b"): true, - common.HexToHash("0xc6104c706c66697ffe82801ca9ddc3c4e9aedf3da1a20e6952f864a97d84b599"): true, - common.HexToHash("0x5422378c3268bdd46894dd04419715391689d62e4c6ae6052cfd4de4e0b4d83e"): true, - common.HexToHash("0xe7428f6b680d999e0b4d65282a4103519a067dca8651d575898a1b975d5ba45e"): true, - common.HexToHash("0x80f36a4c4b1a9addb2a3b20c9a10de77579ae1d09ef13eb8fa37ee9db34ffb43"): true, - common.HexToHash("0x9740ec382b3775c259c3e35e7f6f31383baddf36b5dae94c9f74a714308a0473"): true, - common.HexToHash("0xc0f11dc8b6afbd5129cb01a31f6dd06050bf0aae5660644be2c7e7ed24f88918"): true, - common.HexToHash("0x9839aa47aac33f1478052ad9acac4f4be8f3a75860fdade78a59114e281e0a32"): true, - common.HexToHash("0x70d74500fa202644511e572d8b040b23988e16c846333d88d3796f39754c6511"): true, - common.HexToHash("0x0d9138afd7df810b002b55e2609a34334759e89fdea55af42b2ac4c6a258574b"): true, - common.HexToHash("0xc287c48ae2bdc21995febd84e9bb90d641e36528091eb1d46fa92d35138e220b"): true, - common.HexToHash("0x0c8c813038449f50c5000f1a7e2426c66e689a8cec03b1e723ed992f542b7cb9"): true, - common.HexToHash("0x6817020df8b49708edb8299501b4e21efeec88dc50d59ba43df40d041bb8c2f0"): true, - common.HexToHash("0x34c58961b0ec0b537713736b83af3de06f92239997b868cbce0a44a6b0bb22a6"): true, - common.HexToHash("0xbd6171572d7e2ca338e2dd67e48f7932cdb1482dda2920c5c7b011e7f3592e9f"): true, - common.HexToHash("0x56368e2df1d1e875bc6cddb15b1fbb1e534bdfdb1ab0738dbf2837dfaaa3cd62"): true, - common.HexToHash("0x9040df7c0dc98f6d4f92891ff66812b24ad2788e80801f4ad85457eaa54ac280"): true, - common.HexToHash("0xb41eecbf5f15aab217e04c268473e5448c72f59a997714195638dc7982c45bc2"): true, - common.HexToHash("0x6293ce4275d1956481f451dfe9a91529a343ad8cc5c436bede1b8d8179fed22e"): true, - common.HexToHash("0x6b7f695184961341eb61f758e5b8b0fbba960f4ae3b9d301e731c435d6e8e597"): true, - common.HexToHash("0x99bbb53d74e970d8da6c8deb74ebb1f6922eedd81eec293ce857ee699c06d201"): true, - common.HexToHash("0xae94468bc57ef3fb18e31943687d6240a66cba016b2f42698202fb90cb4fabc9"): true, - common.HexToHash("0x037ea1ab177555d0a17ca152b8d633d621e73a1da3b1a01f1e8ddef813cfa52e"): true, - common.HexToHash("0x70fc68f1d4fcf6091458f7cf821b496012cd6f135236db2fc2985687430cc4d3"): true, - common.HexToHash("0xa1a87b2f2152f7a063e49c9ca3a54f40f6dcc59ad03e651d59ac97d72692ea4e"): true, - common.HexToHash("0xf7ca7cbbf00baa8ed6bab4f6969fc9b598588555120fbeb658d1a48e7213604c"): true, - common.HexToHash("0xb5c65a68da4ddaf9ecf7cf8da2a8876cd5476baa3fc5dfbc8947c656da4f9eac"): true, - common.HexToHash("0xed3975555575afc2bd90f19f276c033d3e12e8d9a54239ba1fb4fc7afefcc2ac"): true, - common.HexToHash("0x75051c3278d67bcf1a6104432200fa926e3027ba0487a4cde6562becc7cd248e"): true, - common.HexToHash("0xccb28dc6fa01fb970277279aa3e4ec7f77ba56552183245353a6ac3d85972ea9"): true, - common.HexToHash("0xf1ec13bd54f7964ef24000647efceee3add2622b7a711bf48c31bd66df0dc0d3"): true, - common.HexToHash("0xacf70b1bfdbe45410bd9ed9a08d4e00c07bca299163ce6ae697748e50774296f"): true, - common.HexToHash("0x72e02662fdeec517e4683c103cefd84090c92928b58405106069ac486178c2ad"): true, - common.HexToHash("0xe58ee418cb0cd4aab862f429bac34985ec3f3374d686cbe5476b4426fd081cbd"): true, - common.HexToHash("0x30555e8641263fab2e0cf9416c9b1a3e01b7fb90a33ff3d79a55673402c58804"): true, - common.HexToHash("0xaba4e0578d3f7c4affe811f7e39d7cd556ba0d2dabbfa7ba2a61e813cb0f1afa"): true, - common.HexToHash("0x01cb3b289623a7de7a57a7db2c39278f8610ed3c5c74469f84081c78b2844677"): true, - common.HexToHash("0xe80a2285a925751203d4151871e300850509162e09a6815d7feb2597e6ddbd3e"): true, - common.HexToHash("0xde043c6b7a505d572b1ae990a095d58aa41e34e07c8d885eba2d37568dd116a4"): true, - common.HexToHash("0xbc814d7b79a41f18d6fdf0447154fc19262fa7c1d8af12b6c228abe26f37adbf"): true, - common.HexToHash("0x23001c3091e8cf410fb6151bd6bae7fb4945698a34fb3dfb672e903221d1e9af"): true, - common.HexToHash("0xad1db7cbfb8d9421eec3358ac4e1be1d5c0663cb1f41581b19cbf391cdaebc8a"): true, - common.HexToHash("0x7142e2643a496eac6b326049d9671702e3989050ecd6620c99259d9c8199d776"): true, - common.HexToHash("0xb2ee78716ee08a7a79ad1ccdcfe41f1bdc9c5d986e4c35aeddf87ca12405104d"): true, - common.HexToHash("0x3ac7259b284d0a705420112dea4512827585404e612c91800388f148286914ed"): true, - common.HexToHash("0x7de9e50266c9c701f36a758cc2178d6882a2018654862a78e3b01e04fdb83604"): true, - common.HexToHash("0x45ede993d127c5ff7fb1574b7821914c2fa210ad27511478eeca78a664b44477"): true, - common.HexToHash("0x9291dfc9fb1b0f53b256a2e16af586c1257a0e22de8587c8f9854289b99f5923"): true, - common.HexToHash("0xd70080134b65850e8c7b940c91b32370d8e4c6614f8f9a3847fea767fe53190d"): true, - common.HexToHash("0x2c22a096d4349ed7c42feba2625915767d9a2f4f2454631011d767c00492c24e"): true, - common.HexToHash("0xae14db947c57864dca03b5d809b3b3ee83f66836775aa74f10e33b148d5868d7"): true, - common.HexToHash("0x61d276032e30679c0fc68b47240aabc915de4f482644ead6b70b5e24ff1bea0e"): true, - common.HexToHash("0x47e968ad7c55eccd344a227f84e2c99b1419c9b731797f3e4e5d86df5da1e64c"): true, - common.HexToHash("0x18b7ad286b49210b0b233554fdfbc0858f402967ff73fd1cd5e0b6fe72ea9e27"): true, - common.HexToHash("0x3ae27678a02dd0369d7aad6de6f0d0d517bf935faf73f1a3d99dbada2c8fbd77"): true, - common.HexToHash("0xc818b302cb8f447f7c996759fe5422845e24915f8313bf187326fe15d32b228b"): true, - common.HexToHash("0xe169b03d637734de82d9ffc2612bcfbc39ce91b281ce68739f52ce8632688cc4"): true, - common.HexToHash("0x61eeb67c978367386141810b649ca7ae3af5c3cfebe3d6237aa31d68b68be1f4"): true, - common.HexToHash("0x4fd79f807b56dbc73c3c3bd011942d585f345efebb0cac4764801ae9040001cc"): true, - common.HexToHash("0x86f7b7e2d1cef7cb964622af5fc198316328ef7cad4b59e17cbccb074b47537b"): true, - common.HexToHash("0x3c52079d804a2eb68452f4d9817d119ff83b52efd1021a6dc96da1346ae5f995"): true, - common.HexToHash("0xd3cd8a3412a7bb0ec759aa3725ff3da32d20bc121a7fab765762776a3b6f7b93"): true, - common.HexToHash("0x52c63c8f8d33d9e413119d4eb5ea45f43cb09e8a17aec8106663668b07064ff7"): true, - common.HexToHash("0x1a8bbe7724978b1fbaa5479bb1908875a07c8491081f6dff0efae9a4d6a51e6f"): true, - common.HexToHash("0xddeadc024aa385432cf06717cc5dcf08d6bfeebfefec06d3309736ec1cbbc31b"): true, - common.HexToHash("0xb37b608b57a27721566267fadbf2fa00e3f1b0f487c8cc7ba27a354d8a356aaf"): true, - common.HexToHash("0x0d2db844f65cf6b258d8fa871361985320da553898e535a0d329d554aa1a67b1"): true, - common.HexToHash("0x256311fa181dabee50512b68d61dea6d76fe2e989955f315ebde9e33d985cbba"): true, - common.HexToHash("0x8cd4844739205f2f0f9662f2cb2e95b19f214bedcf496ec9bf5d4ee29d7a6425"): true, - common.HexToHash("0xe645e8ed1443496a02a58dc967aec2b87437cf20c18b8a1799a456c64ec0912d"): true, - common.HexToHash("0xb7d5ccae7939901d3ce7852794e7eb1564b8ae5c3455383540fc81746321ef86"): true, - common.HexToHash("0x3b18845b9349a6a5629fb7f64dd4ccdf01b8f239c65cde103b932c5167b4c6df"): true, - common.HexToHash("0xaeddc995a64427df2b5aa2848d1809dacfc8af9be510512a6d86964df7b54e4b"): true, - common.HexToHash("0x2626fe494a78ed5fcc52954b8a4714f76b30d28874fa96426c3b0ad4165bfdc6"): true, - common.HexToHash("0x2e11c6eb58adf56518af390ae20fc240a48f9a2ece2deb5ac521d2ee4f2f6146"): true, - common.HexToHash("0x09ca36d5a4658c3b7fdab8d0bb5486b575c0809861671fa6b0e297b7e3cac607"): true, - common.HexToHash("0x3ae694a1011e835284ac580de7b95fd8d4724f87fd6ae92d8255d45b9d3d8872"): true, - common.HexToHash("0x5c66e2cd2b3632e56ddd201c692b1c2ea40322e9f66183bcd0f3c820236ad410"): true, - common.HexToHash("0xed9867a95f52d15c95cb9554a5aff858f5ee8f52793525a5fc3c424d15418105"): true, - common.HexToHash("0xd620b5cc48aa241f4ea9948b1d504a6b128525fecc9718ad09354ffbd57a9785"): true, - common.HexToHash("0xd8c463135f7b4fd7ebc21093f4629e714b85fec07a117dce66b0adb9145fff4a"): true, - common.HexToHash("0x21675e1aa4cd50b8300bcbef964ff6511d2de1adcf666f6225f7f8fbfff65e16"): true, - common.HexToHash("0x9d7bfaed292f95cfb03f6dc034de5e75d5ce5f068f7f6c70b9d0663821efe9af"): true, - common.HexToHash("0x8a4d876a17011263c77d838c0c55caea9dcb7fece14a1f3c26b720a536721226"): true, - common.HexToHash("0xce510cdf32bb7ca3f2f93244fbbce260d2ec8ad14a957902b195430197932e8c"): true, - common.HexToHash("0xfc9ca226cb0dbdb121431e15ebe23a887e70811014fca5811eaab4669efe9dc1"): true, - common.HexToHash("0xfd752e016b1cca39da990ba5345da3153de0fc88870aa8fab340363065b90d85"): true, - common.HexToHash("0xac61f87114d15a34dfdd339b1fd3c42209a94191fa0c8b6fe8015ab99e750743"): true, - common.HexToHash("0xd0c5ce0edea16500c18c096d4ec1801e2ef77818d4e1952be54e8036f3a1b0c0"): true, - common.HexToHash("0x87793261ecfa3d797ee8163147ed36a38dd481c33ca1a5485266f34405c7d376"): true, - common.HexToHash("0x135d7dfb1fa281463f1a00717e85013a174c4b2d391219da1778c2dee22dc62c"): true, - common.HexToHash("0x21f0d166df908a7fe0ec1b31f7f0aadcaa16db1b18ed040c59843eded799033e"): true, - common.HexToHash("0xdf0977e92d851089e1d50e4db05e227a3dd923974fb2c1b07a1e74e3a9e0cee5"): true, - common.HexToHash("0xf963d805f71dd671424b53b497daebae583ba149d6ce33b9937a449551f34ce9"): true, - common.HexToHash("0x1f65d40f55da432b877dd1a781ae0165143b8efd2570bb7afb48850cd11ba4ef"): true, - common.HexToHash("0xce116ba3b476928836cbfd72f6a42b4ddc492451d01695bea055b6d3e501d377"): true, - common.HexToHash("0xf73f5a9140f76259acba5a9055edd29bf3aa5f28c842f81ef344db53ed5b11a6"): true, - common.HexToHash("0x0184d70380170ebb54e79d324a8f60e52ba2fa55a07a3fa040c077ffb5d2804d"): true, - common.HexToHash("0x295a3071a7408d53a0079ca9607c5f081b595787b6ccc408cb46480bcc509af6"): true, - common.HexToHash("0xdd10c02246e49d13bfcdcfdf62d9c0928693f4d233d7883c58869ee0d9811900"): true, - common.HexToHash("0x6118db0d7ddcb165ea8c16cb389f07ef27e26a90cfe68c8e0c84cf08518b7ca8"): true, - common.HexToHash("0x4e553e04de7c93f09c0e338518f880b45561cd2e948e305f0e244d2fa8d27736"): true, - common.HexToHash("0x962667e25199317f6600d09b1614361fd789cdffb415bfd14a9f248ea80404f6"): true, - common.HexToHash("0x3a25db8e1341a3b2edccdd1be5cb69d709c8149c3621d65fee3172b71274dd9b"): true, - common.HexToHash("0x5f4f88ebf082c55b66696d870968e1a85cd8cc7def8d62564ae4a38fcd8c2a66"): true, - common.HexToHash("0xea79592ad35e8b6a269ee7dfd1e2e50e2a08a2f784ca606237cd50809583d2d3"): true, - common.HexToHash("0x0e79756cd41a150c0bfe614289c3231f9496c22ec07181a5fb5426e05d81a068"): true, - common.HexToHash("0x736c00eb2697b7aad560124479a9e0efa50b8fec6e93690cbcd209f0369d18d9"): true, - common.HexToHash("0x9402549c35021dfe2ec686312331e290c3dbed1d63e5c43ff71ad9168119686b"): true, - common.HexToHash("0x1a7b81f8f962704955d6b7fb9fe0fb7b0b50eea42db84ff69e92ee7d60688d7b"): true, - common.HexToHash("0x25f12dc3caebfe7b75847a27729ec1cc6d6a389d2d52dbc396733492e1cd43b6"): true, - common.HexToHash("0x36b1b69a2c1a92738cdd712548263ea5e08fc5e5c26a6502988ea8823b54df41"): true, - common.HexToHash("0xd215eedeb8f74a0d30736ccf573824e35cd6a20654b359784649b52b30edfe51"): true, - common.HexToHash("0x2afe5c8606f805eb2316180ac701343fe03821925ff98530d9d199e0d03a6c08"): true, - common.HexToHash("0x7b6c4383738bf874c7c4f24aca2ab40b40f125eef432b5a83ce144d4dbf1ffac"): true, - common.HexToHash("0x29a9febed6006507b24042c31a88c3be16f779d661f2d8d9d75c655b55525d70"): true, - common.HexToHash("0xba7af688c88cdc41e499a56a5439d1a3d8c11704aeb5e17753c550f7370a3eb6"): true, - common.HexToHash("0xbbc3965413f8b2be346a11b8dac5fff4221a47c09f703bec61187b5ea03903ab"): true, - common.HexToHash("0x0a2669a6b7ca1876b987bcc8d2e6e8e997d1afe288ae891643ce86d0c3e86928"): true, - common.HexToHash("0x35f67fd3ee14c9823d2be6453d9c18d721830d3601c9d54a0a9f75e2fc4cdd64"): true, - common.HexToHash("0xe340da82c20f6936182efdb9fc208d3b3afc74faa4bd4214ea5dd7cfb6fbb879"): true, - common.HexToHash("0x92c5b4545a4437155a50936fa9c589d3563690183980038ab0b1361a591e5113"): true, - common.HexToHash("0x17d350f9f185bdf55151209da9b0f85912d101951814afe094b40b9aecc0b51b"): true, - common.HexToHash("0x05985c61186733e9fda2924a7a59a0350e6fbccdc7126d87b4219aa7f72200b5"): true, - common.HexToHash("0x75397c90092912ae11400d4cc23e1551a3529bf2eb4f1463d335f8922bce319d"): true, - common.HexToHash("0x20f6fd298b09a422daebb6df5f1660093d40e431d08f5bbc1357ee9733925182"): true, - common.HexToHash("0xbc9ab8da59436c3b0fa17244c144120e89558d213ff02fb6e7df840b7b11b350"): true, - common.HexToHash("0x09807bbb54eda123a774a0b4b120743d6b1332e2ad3ad21bb00fa84fdb4b4eae"): true, - common.HexToHash("0xb08da634d0b32853d3aab70a03a19f8168656205916af2a6b370b2e043ae4941"): true, - common.HexToHash("0x8f6039c1ea778bb092c21ed7230b06e5d3b3692336e2a44e19e7ab2d7f93fd0c"): true, - common.HexToHash("0x2af4aadb4171644d68652ceb9b22685efc4e7c72537b5d8fc1cd7b89994056c2"): true, - common.HexToHash("0x6953b8149a6a221d9da50909ca80080a58c8b04535d11eaef13fc3874cbd5654"): true, - common.HexToHash("0xac7ca7db89c9466aea21f26f142663d883589652b21147cd0caac5ea8fc69eb2"): true, - common.HexToHash("0x4d2f71a4c521bfbe90d45037dd6e34228a0b5358c7eef112f30ccef60099b8a0"): true, - common.HexToHash("0xbd53ec9d828e221cf9f617cc5aca4b6e33d8d1c87807acc9a596854964429342"): true, - common.HexToHash("0x51b2a238e7283ae52cca469fe6a24320a87e90b2587ca882372992e45279e9e7"): true, - common.HexToHash("0x3813e0ee55dc7c1a9d5b63762f623e79cb86f2327c118344f14cb13ee8bd8b2e"): true, - common.HexToHash("0xefbe528a68a49817da00840f996fc3ec4c98d5aa450701f9e8466435a1ce488a"): true, - common.HexToHash("0xd5be1d1fdc75ac9e714a6f2f1dfcaf0707004d1d538a7def51ab7e6e21285ab2"): true, - common.HexToHash("0xbeee1c79bfea811aaa344c8a8e48e7c316073db049c03bb0bd03139d52dc1323"): true, - common.HexToHash("0xc87bd845d11461f4cbb5e8946927f06bcbbad0d04592770cf17feb6a230bf965"): true, - common.HexToHash("0x21ce248ca06bed29b5d9c23e6bf3e621e436e6c0f51a130696d7410450495700"): true, - common.HexToHash("0xd3018869cf553e7143ebaa05b0b6e595ec3fce09309a3c6aa7ef569bab926b0b"): true, - common.HexToHash("0x3c3be31f83a2c9d4a364c6a13ca899c72afe2ae1289ab412031aa6d9f376b696"): true, - common.HexToHash("0x78be7ce90a5681fa038ba064a298aaad6a88b084596d3ebb3eccec36cf72a0e5"): true, - common.HexToHash("0xff848eba8c6180a3fe207b41c878faec6ac539e9298c19749eed737867564af6"): true, - common.HexToHash("0x35170018b47693a1e91f3ee146c09aca974306e94cfd77a353256d8ad5a1854d"): true, - common.HexToHash("0xf1339bc6f89f71d5c1d5711c7c5b2c53081122bb1dc16eefdaa33071bb519bfa"): true, - common.HexToHash("0x90c00570cf2c7fbb31595420dc524ed57f94c2a8d2cf7b4b6a440fcb1752bf1a"): true, - common.HexToHash("0xc70c9d394239c92a72f5862b745f48c53e56d762dab7c8113d46cd68406c6fbf"): true, - common.HexToHash("0x3ecf119fbc05857b4f84990730d88d84146f717d31377e8e18e0255987c96e56"): true, - common.HexToHash("0xa20c2f30622025e947a902a9afd53b18aaba37297c63b519d6073bddf1feba85"): true, - common.HexToHash("0x135e8e6e421f6c28b4bd2cb1c030bac3b6723b91bb1d770f3cea9f33e73eb688"): true, - common.HexToHash("0xc221f192490d244cea426a2ad7d34f84618b883aa3d2c59554a48eefb205b77b"): true, - common.HexToHash("0xa4999bcb694641afa349fed40ac5df0af2544e8d2b3d8f86f24dbbfea696ef4b"): true, - common.HexToHash("0x6af8eae3fb993dfa84db39aee5436f950e75f2c06f72e8c17ddfeab7f9025629"): true, - common.HexToHash("0x4f91145738ad08332c292f8f7c4465237e5bb2eb567758f961d8ef9597992eef"): true, - common.HexToHash("0x9ec2deb4263d80ad83704ffa0f8ffb3c23a54fd9c4a42063a84f27260cca858d"): true, - common.HexToHash("0xf5bd3529350f576ec1b8f19a5bf6df2207e2cde3e34d3bc5b071096a66486f72"): true, - common.HexToHash("0x04563b93ebdb50e6630ee108e5726faa36b4e674c819e689dfe020fce8dc3dcd"): true, - common.HexToHash("0xe884442d2496616df395b0b41c7f3623e073b134d5c6c6e7972270f2b124845f"): true, - common.HexToHash("0xb888e8ff7394649bea8e4fe1c1756db172ef748ee21cbb662a9b00addad78aa1"): true, - common.HexToHash("0x67a5ad8afd3bca9c1458b491e610ffa9782b5f143e1eec2f09d2e893913c4aa9"): true, - common.HexToHash("0xda85ab0f298845430891365e241e553c4a53790eedeadad12aee7045a4027df9"): true, - common.HexToHash("0x845294f18c12eeac733d9d53115b2c84c6d425ffabd2c26cd87d8b6635feb31f"): true, - common.HexToHash("0x1066806a076d84f8b20a8852f50b8e2b14c02e43fd5e9ce7247a0971e6f58959"): true, - common.HexToHash("0xa34416e8640f0d54169ba3684bf2d6a5844152bccd2230cb45a44bb2803dda58"): true, - common.HexToHash("0x5d5441de837c4a8be41ffe46fb204181cb9a4a8bee9cb491329f0044d708720c"): true, - common.HexToHash("0xce587efe529df2c40fbefad0e9683034ccf7473ca8f5a660a22140baf9fd0a78"): true, - common.HexToHash("0xb55bacabd4233616819d94220113e0136ab9374e2069e9e729d3844d2c04c154"): true, - common.HexToHash("0x45a5abea58cab6ae39e9989d1e36f1c2f3480c76c52f2ea890887193d512ba69"): true, - common.HexToHash("0xdcab222e3db757bd59995f76aa1641eed224408335878909afdab606b4f3bb6d"): true, - common.HexToHash("0xc36d5d92add7998b3e5af5299b7933c0aa7c69f743ae985a315fd142487e27d4"): true, - common.HexToHash("0x07ce4b8dee995c5013599b85eff27acc37ad6cbe74d5f280d8b84e25c11b9113"): true, - common.HexToHash("0xbbfe93c7cdb0d0edf8e7be7d17005090a969d418b1792b4e7710815d104f8b20"): true, - common.HexToHash("0xc8a1fdbc3fe79b6257eaa5d3471e7ad23ddd755b66cea0b281157196c92795b9"): true, - common.HexToHash("0xb6bb6869a7394b3e67cabe5034f98f4895a1d0b1f0deabb791cb8c82a2a12513"): true, - common.HexToHash("0xf64b1a7b2cb14aa5094e9f97ddd5f4c83b7e045d4c68b048470ad0423180eb54"): true, - common.HexToHash("0xbf3330119140120d98531f16677c751fc9d900793f0e89b813c23c73ad65ccc2"): true, - common.HexToHash("0x13a73c7e88ddcd4279796912f3837555e859ee2ab2dad9f0d57bdeb9162662c4"): true, - common.HexToHash("0x409247afdbcf2ab587bbcba5ed42efddf7ba906328f9be58ee4052d555680349"): true, - common.HexToHash("0x7c53b81d7fb5c4e787f1902b9702d0881d992a1f3a369e9fe05fc2c95d73e153"): true, - common.HexToHash("0x96b22cfb503c818e9bc648c1f891b97ff46548d20f382bea7d962b05de13de10"): true, - common.HexToHash("0x99b1c472d4d2cdeb008e6ba804f15690d24de94dbe8c16f62e0c894946693cac"): true, - common.HexToHash("0x29478405a54ebf3d1e30bad7f3c913b19f3cfe42ee0b18dd6bc741ff44e53fdd"): true, - common.HexToHash("0x783d4b81ae4d515c5e77af7b544e2958e6f4c2f88c344984e13bd74c5c990cd0"): true, - common.HexToHash("0x5c3701eeef06d45325961da639677da63c8a2b2f36033e7a14e0fbadfa02d3a4"): true, - common.HexToHash("0x6f3d3499013c65dd2411dc8aabc1f913efd30cc12b40ff4005cf039d14671037"): true, - common.HexToHash("0x9772a1f29dc7d6f20c1d31565995ad5370c3ca072a8eec1b6facd44539bdcbb6"): true, - common.HexToHash("0xdae68fc2726d7969720ded8f994d60093d4b7ac77456a9ba4c8dce47c861cb49"): true, - common.HexToHash("0xc9815f2da210419cd0d857cbca57733aaa29760e3033f5bf257abfbca27c142a"): true, - common.HexToHash("0x4aee6495a8f4076b95270f2895fffb521e3580cd48d402340604c9d0934e5898"): true, - common.HexToHash("0x5dff0f445af100b700220057606d25a6cf7e5211ae5a65878fda64600539114e"): true, - common.HexToHash("0xd568d0274f515c5da6a3e68549c149269f29745b81f7bcb41cd9984390fe7da8"): true, - common.HexToHash("0x7604db968d2f83686e0636d5f41e3e8faffd6ac1d90c81a80c9dd33202f2af51"): true, - common.HexToHash("0xe7c7c51f47a3401c33fb7e7d901ab469a362e4b6a87efaa4d1f2be934e9d2c45"): true, - common.HexToHash("0x5c80bf560bd61c6eb9858857d9a60eb0b5f90bbe9cf1822e3a37aa7b2f1fbe23"): true, - common.HexToHash("0xec43e0481eced99a6fda151eb111cec09d0e802f7850d90b182e511629b4e183"): true, - common.HexToHash("0xdd6fc7bc39b261f47583ad95a6658771373407f8d357928c4a73fe5546a19fa3"): true, - common.HexToHash("0x0b62ede11064c1b48b6695fd854ba6e2890bf6dbfc7b63e874ddb181360f886e"): true, - common.HexToHash("0x53a5bb9fccdfe7f8597cde291e49616112fbf92b09d9d4c441ea51231f28b0da"): true, - common.HexToHash("0x8f8048d3057c78809d65e7082a83a2c11f0ab1e0779000a039477a3e43041d37"): true, - common.HexToHash("0xd470f837171296e9b3c94a78286881d9566a59f793829207afc084e0564041e4"): true, - common.HexToHash("0xd52eef957eabae07e798c356cf920eb6114cabeb76a4d214a209593212d9d9bc"): true, - common.HexToHash("0x92668830e74e14c2479be505325a31dc906d3ca252eeee1b0a2a89c9d7facf74"): true, - common.HexToHash("0xc361f0001bda4068339f1f2fca9c5dc83ba06f8d83efe3f8e562722b966f66b7"): true, - common.HexToHash("0xf9987c22f323b120e9d2b3605c530e9f10ffa67d1aaaced5d7defaa59eaac991"): true, - common.HexToHash("0x2dfaa8ce915f31720df3b26fb31e35367ae718f693415f1c74b510c996079bfa"): true, - common.HexToHash("0x262b9929089f5982a484f9ae7209153febfb1675637f883af12ba93f6d52afc0"): true, - common.HexToHash("0x6b5d92222e2a3fb80a7ff0e2db3ee8d30545f395c98621d4101ffa7115185305"): true, - common.HexToHash("0x8f9e7541cc7de70c21bd9d60cc566683a03ab33ac76c36769ab750fa12fbe143"): true, - common.HexToHash("0xc7fb033248734e9954d3931dd30ae3e41aba4d847fd83ed27d922ead60c4623c"): true, - common.HexToHash("0xc0853d66b7b7584c5e7042c65b4f8f5174ad0d79b05b83cb2c32609e7fb28945"): true, - common.HexToHash("0x6e28548233f1ce3c9de662a9ba5fe675c6174393599f791d13bf3d94774187d9"): true, - common.HexToHash("0xf6b136e56398694545cadd59ebae7542acc9795d3f8de6e4ebb3d1cfb59713e1"): true, - common.HexToHash("0x0fed83f076a522888df9221351117a4d6e0639ef2268edc295fd80b7580fc1bd"): true, - common.HexToHash("0xf1e94513cfcf13851f6c56f82a3fa93150ace1a13e4e00eb6803cc7c51d64b5d"): true, - common.HexToHash("0xe3049dfb449f32f480054540bf1a3162ac76c3d87b39129b3be76341da44ad6c"): true, - common.HexToHash("0x727623eb2064f63ac7a24284674dc2d584edf48405b04b1486e4cc0fe4a3475c"): true, - common.HexToHash("0xf1937d8e3ddff00e3b98b36a0b5f6ad392c1ab25b78b21b62d29e9b9ba60b62f"): true, - common.HexToHash("0x05f5fbce54030d3f4215bcae304b9ed578c7168deed9ecb7e858b49ebc94cadd"): true, - common.HexToHash("0xf8e946bad5936cc5dafbd13fe322f253518362e747e730540b079359f5b0fe73"): true, - common.HexToHash("0x5eb166e4e304603cbddcc4301906600ef952284b6ef382c47ce73756a2b0014b"): true, - common.HexToHash("0x8e36c10d6ab09b1eb43cc0053c8df4118e8311ad1cf9f3a79576ce710fdc4022"): true, - common.HexToHash("0x4e0f9691962234ff7326acadecc2b99464e3b9387ea988058a0630b1f076a026"): true, - common.HexToHash("0xace777d21c2dc91385d2b1f3a0d30908fc1c16e13287669638d2983182433912"): true, - common.HexToHash("0xc28bc19379d8e8a878fd95ee95cbac26c2f5c69a6ac549ea8f23ac4786551b7f"): true, - common.HexToHash("0x0cc7abc58e237dddd861e887a06adf4e7aa4d4ff6c0d0ff212d6c088267f2250"): true, - common.HexToHash("0x248c8b372d84a3dfb4ff04b1748fd87541267b3ebcd71b2f5ecc9d3fd9c480eb"): true, - common.HexToHash("0xda5c82ce06244a552a67a3b10e849156f78837b3cc0083dacca866766767a3e5"): true, - common.HexToHash("0x16a86e1f68930da9860d993d5e5ee43f5e9466710afcffcbc35e1aa5879dc63a"): true, - common.HexToHash("0x171372a24aecda70c7c2b29bcca8f368f051b7cf65a8cc37d16e0d1797086e63"): true, - common.HexToHash("0xc7e603da861d4c702b9d18df00403e274410bcb027e7d72e4a954c0c2679b373"): true, - common.HexToHash("0x235ee83c0699d935b9b686cfd1c820b93251cc2a2f0f61f3395f6ecd1dc7abcb"): true, - common.HexToHash("0xf3a7415571f265222fe2a727f010f4d806ba429328db7cbab966b34271bd2c6d"): true, - common.HexToHash("0x2295a9f9260c719c9ba20e9f0883644b6561951bc0486e1eb7252dc3e58e6da4"): true, - common.HexToHash("0x171948f68971870dce4c06a143bef9efb9260b69102e556c6a92463ae04c4a39"): true, - common.HexToHash("0xe157e9f8129ffd17ce172eda31e6ab669f122cc82ed10ef6f9b268b7f2601c17"): true, - common.HexToHash("0xe25f1207ff100b82e27001a0e7a45e5b083c95bb6b376c3549308a9a0eed4666"): true, - common.HexToHash("0x9327a97baa5ee63858cb16eac6b88159f4840698bed5a0c84ef8fbe64a167ffb"): true, - common.HexToHash("0x989fc137af8176ed043af82005d9c2c422eba150447fe7d8f771482ec87b9d29"): true, - common.HexToHash("0xa1377a81aa01d02f81ad5f6721f5b845e8f5545b306a599963060dbac0d73734"): true, - common.HexToHash("0x7cb2dba8711745da4d986a896278359fee2a971e14ab1f7dcabb8a76e69a4250"): true, - common.HexToHash("0x68dd5c01b769c3c21f385bd89f8be0f7fc181f548c82ba7b0bfcb35b7de5d92d"): true, - common.HexToHash("0x88a8381a38053ed9923ab270bacae17191e2cbde14ec6d8174a421136f767415"): true, - common.HexToHash("0x040635b42f3c94338b143a5909287bb43212a3a7049d6208850755918bf3db8d"): true, - common.HexToHash("0x8cd2c6c14a075baad89512bafabeb63d9cd1bd5ba997e94e980378e158ad0efc"): true, - common.HexToHash("0x308b6a2a5a5ee415de99f451578e5e563e6e10c33db20ead2a4c6ca97eff6439"): true, - common.HexToHash("0xa9cd0021ddb5405df31f9bc7465880e106bc4e051812a5673b1ab99f45972b6a"): true, - common.HexToHash("0xb389f5e6aef69e25ba91e36cfa287b199cda8f1b698befadceb0c598ef1ccf4c"): true, - common.HexToHash("0xe8d8b4c973967185fb9c139327b4c9dbc04e84b11be07c37e7c6290b1519f652"): true, - common.HexToHash("0x73043a71b61657d281e02c7146d8e65493e9c28d8b7ce271412acb4bce59c358"): true, - common.HexToHash("0x3a9f6ea09fdbcbd762f4451b2b398bd2445404996f215ff4cb57a62f5f15d25c"): true, - common.HexToHash("0x28c3a0964968393f7cabef8f15a44c18ed8c87f15b07334bffde530397e4c418"): true, - common.HexToHash("0x7efa0e3ddae6631046a8e64aadcc627bc02fd09e03f8862450b475fa98d084be"): true, - common.HexToHash("0xd834eb4504558639d3933f78f4aeafab357046313fd1bf265d6998b2c7ded922"): true, - common.HexToHash("0xe26c39561d317deaf67f1d87ed143e33f3719dda6643752d0768b411fefe2c01"): true, - common.HexToHash("0xa3cd29546066bb4d9c5ffef47c99cfdb4af481a6a46f7686ef5621b0a88b5dec"): true, - common.HexToHash("0xb0d6a84284fb3dfb68105be0f1b929793d547fc40257af6d78f1deaf0b570c01"): true, - common.HexToHash("0x13fd6da405bac4ac98af83cd3580320083ea1b0175303380904d4c4b0d460de3"): true, - common.HexToHash("0x2e92c77f61fe2c245dd25aa6e0ebd87cb63d9c8486d7c8f8904a43b9efe237eb"): true, - common.HexToHash("0x08c5aeb3d0f6b85940e7af30a5c6d2fbb812a7a9db0499a50b8708a72775881d"): true, - common.HexToHash("0x426e0730d4e80ef4293adc332c78bcaa2d45308356969193629d087455bfb587"): true, - common.HexToHash("0x464f6de43d116fde05d8c8b36946060182a12ae0bbaa0b67f4bd6ebe8e5593d8"): true, - common.HexToHash("0x9e47d5ace28137a6ea77a8e8ef9e5ba0eba4fc13ae70168cd6f3b3a240ee929d"): true, - common.HexToHash("0x764ed053dc71f217294c26b65337b0c43134a86d86a571e843088ffca94ba697"): true, - common.HexToHash("0x89d3ae872f4b7b40695f4d626d5ae86f81dfbda6b7cbc7c26b04eef9900c2a25"): true, - common.HexToHash("0xa1f056858469f1857013f572cd9544634553267051940a0498221f6afe4a235e"): true, - common.HexToHash("0x360d4c78c1c53b845d43d4be3b0533e7ec08aba5c3a88fe20542be312bb4281f"): true, - common.HexToHash("0x50ad919e7b5937b558f8f8628279fb0fd5740ab2762eb415869643e0c8b79727"): true, - common.HexToHash("0xc4915714af08ec50e9024a0e64039043fbb6a5f80b86e9e6fff1b8d1f8a67531"): true, - common.HexToHash("0x2630976d60a181493b8018dc6e462fcc276f0de02c03e58b66208ec4c4e8135b"): true, - common.HexToHash("0xf9b707d3d5915f08a953a9c5f22b1922fd06989db481167ddeb9f42d987bfb67"): true, - common.HexToHash("0x2b50f787d683591edbe5cd723f64cc446f4d449077b0989fef4b8e5ca890d09d"): true, - common.HexToHash("0x9af741d3deddfaab75f8838512de9e3d94727341ba6bd72b10fb41424d56de05"): true, - common.HexToHash("0x76918d3e36bc220c2c3adb9efc726fa8eb743ec68e0bf17e2c7e72cd672670c0"): true, - common.HexToHash("0x2c5a15430c33e65290f2a4830e57ce52858671630bfd8a75f8b22f1cd654fb01"): true, - common.HexToHash("0x9a8d581aba6794abb6fc7cf53121293f296d37ce70f9f974bce35d0c3c6c07e1"): true, - common.HexToHash("0xf7c14e0496ff07a72efc6732eb32a002bdcfffbbd2ce731426b33dfb55bbee0c"): true, - common.HexToHash("0xf78ab2e079d2a50dcdceb4a9d52c9b32de0bf480b9c1c1f03c2f3c732ce517a7"): true, - common.HexToHash("0x8798f17a0dd9f40d8bf5a67181f8d6ee023c0c6172bde3b8f9ece60203da800b"): true, - common.HexToHash("0xdae99797c4f34f5008a58ccfa3dcf2bb1ebaa77996a941e0614466f724d35560"): true, - common.HexToHash("0x942894b744d4e48dd57e572fee8529b57f353faced96e701f8ca7a191b620d53"): true, - common.HexToHash("0xff8696721dcd185a24708f96b9510912f2c97d6626c26fe41583860b8fae6fa7"): true, - common.HexToHash("0xcbf0a59a06017eb769a1a9de2eb3418a226b37b5a1750e8225a961cf1b3848cc"): true, - common.HexToHash("0x0a4e73741e5897fbbcedea134faa36ac9365e4f2779b9acde7ca410890c8d5df"): true, - common.HexToHash("0xdb40bbf3643030391865d1dbc530337e81a106d7a2d5a6a5757dfef37a810d03"): true, - common.HexToHash("0x45f7ef7dcae3bc664af96c1caf40a2998cddcb090019b083917bf9f18102d222"): true, - common.HexToHash("0x4f59d7d421250626b0cf813ef519f3a939d6c27ea4751cf5810d7f3e60b84c74"): true, - common.HexToHash("0x7ee0f58524c848050ddeaf98c1063271a7939aa3c68f51463580358406daca91"): true, - common.HexToHash("0x3e23df18a755d43ea30ebe114c94e00c8b33fa1d8e367aa8bf42d50ba022c565"): true, - common.HexToHash("0x500685b112dffe2944a0ed1e9363a36bbb3877f45085b51f5a096130781ff407"): true, - common.HexToHash("0x4a92612a83100c9cfdf5b9545d15e65a31fb6fc891033991f0cccb984d926538"): true, - common.HexToHash("0x497dddd609605109106c7d930bd53f8ff0325fcf3fcd339afab9ce09f962dfd8"): true, - common.HexToHash("0x43ff230817659c9d1161a3cc08c9d5b2f2987076272b95c60a4119e97a026efb"): true, - common.HexToHash("0xd10453dcaabdcf6d13660fd2a04c7cf281dad7837596e31e9390c2543ea8bf9c"): true, - common.HexToHash("0xcfa8279c213b2eff3a29341422fd7d39fb4183d0990cb434b65784660809223f"): true, - common.HexToHash("0xdea0c3247c17caccca3cce5560733c6dc92f4092a78fc148a1e87998f2582984"): true, - common.HexToHash("0x4b5deee3ff3de99f9ced825878e672e7fe9203ceb45530f3ee32157d5fca4d36"): true, - common.HexToHash("0x68f924d383e60fc25968772594b14512f1e01caba1fad02f45a60b818ba51b51"): true, - common.HexToHash("0x0dfaf9756b5c1b7e90b1c93d27a9e6e6ca207a53ee47adedcbd8f230f38b5aa0"): true, - common.HexToHash("0x5abc2667bfcdb782ceddd26fe2c19e2b9339842eb5f79af9b7dd1cedb2249def"): true, - common.HexToHash("0x22ca1c9131a7af6a7563edb5aa4ebf033a78c8f966e492e29d64d28633061162"): true, - common.HexToHash("0x2a118109ecac7e9f662896218e748283c9b85c7a780213f5db603f838a8f89bb"): true, - common.HexToHash("0x8ad3c2faa0a3d03db49c49f11b8de174f6dcbb470b2385b8be143ac20020dce2"): true, - common.HexToHash("0xde5993b75a54c8380f3d687aa0ded9c47544694fa179b6fd877afd81665b8bb7"): true, - common.HexToHash("0x2e7364addcc5e0228af281ed8fc8393f6e7f11fa9aeb6a82bd998d38d5501eec"): true, - common.HexToHash("0x03a4a384efca64924e087404e1a3a1bcda0959161c7672bf61be5adbda14c8ee"): true, - common.HexToHash("0x703b7030922356cbd8d2c2fb4259bf8424c000ecfff7c26bfa6944eabb8c5995"): true, - common.HexToHash("0x1d280501233344dfcce587a24f0b882a39d5b58deb0e73052438c94301356859"): true, - common.HexToHash("0xd20fc728bc083fa551d6d6bdc82c892e82042593900931c3208888f637e93409"): true, - common.HexToHash("0x9c07030144e33be7e4c3c846940d41b9726cc86d79dcd4c89d06c5cc13770adf"): true, - common.HexToHash("0xaa92bedb246372831befda8de8ff662cf5b426302b1d4c42d9e71074721ee28c"): true, - common.HexToHash("0x377cfea9201b3340a297e7d41a2b3119a2ce9911871384822d4dad0700ec1955"): true, - common.HexToHash("0x852cee3697a918bfb62f1c4219e38514110aa91211ded95fd007bf449bf9b6d9"): true, - common.HexToHash("0x525d581cf6ca994ea2a540662adb2e2284a3ffda46669564f7888ad095e9a08d"): true, - common.HexToHash("0x02a7a83cbfea5fc012ce3549d213eb30336d98c59e5ac4ccd9fdc01ab21f9e36"): true, - common.HexToHash("0x516d2e039322905b4a13aec8f034d4ae2c504c4b47739cce31cb402caf6e1025"): true, - common.HexToHash("0x73b4d85b9ff0a35fbb97337ab8800e4fd825f4bc59bd12bc6ea6aef5a2a4e94d"): true, - common.HexToHash("0x96a1464885d45c21953eb8f1a3cad3533b713ce9c8cdf1f599240f8ad3f17f55"): true, - common.HexToHash("0x2e02bb8b634d98944318c6fa82cf2598dc44c2258754dd0008fc3a785b004334"): true, - common.HexToHash("0x331a59df548e42300a664eb1c6251ff7aaa432e37be5d3dd4bb24d601ade8a7f"): true, - common.HexToHash("0x0f3a24ce8f05c1631eefa83a0b9622cbd40e404c736e01a21c2e97a844c724f0"): true, - common.HexToHash("0x50546b714692b0625eaa51535e8e3bd88d48e1fcac4fd23dbfcbfe6fbce8cd05"): true, - common.HexToHash("0x8bbb3df23ff79ff707ace0fc34fa45e84e4c55755cadb0e17e4a6a38252e2c95"): true, - common.HexToHash("0x5efd0e8f73ca343a07cd9ffe53d762ebceb83130563e3d5b7c09c01e79104f64"): true, - common.HexToHash("0xee93f5c42fd08b5baf8f09eb07c637654ca1dd4e17f76598b2e3c8ee8bbc0f2d"): true, - common.HexToHash("0x6795f8ef899abcaffdf19e60386baf5fde124fb5ebc2c98b822adb4221651236"): true, - common.HexToHash("0xd145fb0cdf2ea5a62fe8e709813e4bf7a62fd20d027e1abbc138a1eae1ab53e5"): true, - common.HexToHash("0x0528c30a132396aa7985a9961d769d4a46a7b5be1c0dbede9cf046fdd0e95863"): true, - common.HexToHash("0x1e9fac1cb1e07a17ed8255b85da87204f1d73816925a43ddf00155632029204e"): true, - common.HexToHash("0xd64698b61a3cad67d5fc0ba3545767388d5c4f4a450a5574981edb63f5fd8ff8"): true, - common.HexToHash("0xbca17bc99696c2a24e50deed64a35040136f2973d6cd3849ef87844ebdee559d"): true, - common.HexToHash("0xe044e73ee452f21860903ba0d0d7d0ed2b1707a2da766f136f5d8c7508374dc0"): true, - common.HexToHash("0xbadfd9421da84ac41865079fcb54ecb6583d984a9a7640ed20132110a0b1827e"): true, - common.HexToHash("0xd92af254f202cd9bebc91ba411e5da33d0a4e0598dc22383b4bb546f5050c330"): true, - common.HexToHash("0x42e401ba211eb1fb4d6c90a2ae0e4e4c04bdc537e3caf380619a4f8639f37b5c"): true, - common.HexToHash("0x4884e42e23ed507c6dda8355db280e00b873c744101b882092d98f2e838e85c4"): true, - common.HexToHash("0xe489c252e634421ed2a2c3a1f392da562587f3a1d2aaf7446ea0adc8634ef248"): true, - common.HexToHash("0x7639df24ec6ccfd1112edd79e9a2b29a43bbb9ac71dded1d979561350ea70cbc"): true, - common.HexToHash("0x175f62df83df5a8d13f89dce62f3b342a96b2a77ef4c25c99adf37e4ca28585d"): true, - common.HexToHash("0x187b484966d7b6a689037e22deedd859d6fa0943aff3e6a21c9aeaae87d3aadc"): true, - common.HexToHash("0x0091014e32207fe4ba7d2858440cbb63e065d1dc254c7c1cd839043e3c6ec9f5"): true, - common.HexToHash("0xa572483904b82f32554be8fb681f216ea01a12d3c8481eb95e0dd95b37ff28a7"): true, - common.HexToHash("0xe8c330477bca48f64e389b85fefde5a621ae6a51233160aa33f2920aa5315352"): true, - common.HexToHash("0x2c8aa23f440b2cf140b6f54891558e1a23cf2d29c3ba524a675b1285a0f8fb54"): true, - common.HexToHash("0x93bbc144049e140df20853ea0182e6942c357935e2975af76610c2121b4c4c82"): true, - common.HexToHash("0x4d996e4dd5d1a7d4fb4c6e1507e7ea1a40444acd968e08a5e97186c1b028ee62"): true, - common.HexToHash("0x5f28b0c17bff6daa3bdf6c185929f5140c24548978ed537a792fc2b70437addd"): true, - common.HexToHash("0xd66672cea86c3b63d10585549df03c0e3676b06bd628d25c2d31f66a2926c327"): true, - common.HexToHash("0xa5a06327cd9544a11c8195ea55216184223be6adf57bedc59b9c0d0f48262ad1"): true, - common.HexToHash("0xec7f3d084a94a3be04ed1da599eb66cad98161c995dca06abc71249c7619d4f4"): true, - common.HexToHash("0x4b2b79d4c001e538e9cf1a474c537259c25140c73eba3291c0b21830559a1cb7"): true, - common.HexToHash("0xb434d7f63322aa616c75bbbe5e37e3be0354fe5a1b1d2d25db9caa8e1724da27"): true, - common.HexToHash("0x66655ee1f47f1a7d1dce1184f103f355d2062f8ea37a451583b21d9ec69328eb"): true, - common.HexToHash("0x9543a1a4a0ae0abd65e47629c1b37eafe31d7a93a174fee192c7106d71ed8d9d"): true, - common.HexToHash("0x933da4fb495637d83646bca18a8edba5514b26888d0c825ff98238875abaa377"): true, - common.HexToHash("0x2ed962422328930662ead3f4db9f4d39e78cf17791bbf53bfe78091d6319adcb"): true, - common.HexToHash("0xf8b6dc6db84691dbccd9c6d67a880e40096c937cb465088aa5c69e60208d040d"): true, - common.HexToHash("0x33bb90acc55fa1f25078a443b4533b1be8a8c5662f9a079d31eb9cdb2bee03db"): true, - common.HexToHash("0x4846c40809fa5ff73ce742d1963f9a6f5294e537bdb1dacade511952e1b3b93b"): true, - common.HexToHash("0xfab15eac4bc4cfbb90c357b472dd75dc93d2d0eae73f46c41468e6b68118c7f3"): true, - common.HexToHash("0x3241342cce171eaefd2155bcd0b29382951a7b121e7f0956a5d713dfa05ff401"): true, - common.HexToHash("0x34719e074c069b4dff169a1a72e69dbb3eb9ebbec7758dec8f63de2608c781ae"): true, - common.HexToHash("0xe11fdd2491e70e012531fbda2dfe0d2f50d138262d38f4cc57addf78566d6ed9"): true, - common.HexToHash("0x16ef666e54260d33edb1a1f7ef6b0d9920555f66649374dbcc7d820b6641c81f"): true, - common.HexToHash("0x27416d4930a66651235759acfd8b22b9ef375fdf2e34fdb618f55b903a39202e"): true, - common.HexToHash("0x01c2280683a6fcd17bee4e9649d5392a1b80906bd9c51b8bfb5bc2c680ae3ace"): true, - common.HexToHash("0x83e9b5e70456cf54d966cde62dfda49f4de2fa24ae12a397ddc62405345ca3da"): true, - common.HexToHash("0x25a7af8ec69a5e1b5330a87600815eaa76210a13a156ccb8b22ca67e92da2634"): true, - common.HexToHash("0x1e4b94909fd75a75d5e656b4eb11c251554a234a66edde87a95075b74fa5a7de"): true, - common.HexToHash("0x0564fb3191ea7a9b6e68b6846d2c29d68d5ce111af8591a5a687dd16fd51c40e"): true, - common.HexToHash("0x2c74333d7b801b6239d191768eb4717ddb9b5504018eb1cdfb8dd86d951a2c99"): true, - common.HexToHash("0xe9ca25f682a8c1cd66862b8123e4ed2b210bc3dd465f2691ca1f25530a89b7fb"): true, - common.HexToHash("0x77deef114ef85fea2421f20395d636069885bac4c929b398ff4cd4f3b2e32144"): true, - common.HexToHash("0xec36280f8d14d3b71682f75a068f5d24876616cd97e647d7678d426822f0a650"): true, - common.HexToHash("0xd9464cba242b8b40381d3e7c2309b897c42a9142d0e9ce1e81aa8a182f698454"): true, - common.HexToHash("0xdd57d7c600ac38f513012a745098cc20968caf8beb476bc9e0f42918577f08ac"): true, - common.HexToHash("0x161ddd19da01f175a5341c5d2db01aa1c4be6742df43455a32e7bcc0e7d070f0"): true, - common.HexToHash("0xac72cea3de6836285a5719378756c32ce299aed9196414fe8cd2cf0081b9a831"): true, - common.HexToHash("0xe09466c72e6a58fbe252d7827baa43c4c1fcb4518b702c81e81b05f909706942"): true, - common.HexToHash("0x3460403078638875dbefb0bf5695d96bf9939530b7fcce3f06e5ce1276af22f3"): true, - common.HexToHash("0xfb5d6cdd8c3d6733295196676dbf1e91c84f05a5c6dff596077671027fa97d2d"): true, - common.HexToHash("0xc70392db51a2c93e9fdf133f6fcbfc68df2ed5a6fccb748c8d1ccc400cddba47"): true, - common.HexToHash("0x3f8b45430e2f724b01e0dd2a46df72e68411bd6114508622e84b077aa7e51f72"): true, - common.HexToHash("0x1f11d5f4a99529efbc2959239b326c6bd0a6f6b63c373c076c1d9f51a37df4a9"): true, - common.HexToHash("0x6e94c656e5d640b88fd7e1220bccf77231a02fc33093e3db51965a71a6ead329"): true, - common.HexToHash("0xac4801219a92fb006f1af52816ceeb70424d2f56147640817688a360712a6b19"): true, - common.HexToHash("0x6a455c71bee69c95764d0b039fb92d92c2266c4d16cbd522c22d9ece2d7c9072"): true, - common.HexToHash("0x105328654067d51bb25e0c8cd6e53baea0b0ec413b35c6288b3eccbfbff56148"): true, - common.HexToHash("0x5d1f3e8c0c4f3abbc5a4a3673c2b8d611c2478a4132591aea8a1f9f665eba234"): true, - common.HexToHash("0xb2f9d310dfb414005fe455911e9aedf2f1ee40c0f381e03ecd71ccdc92edafd5"): true, - common.HexToHash("0xf10c3a1c5cee6e1e37df059129cc5fbde35923221b73eee34862d4c2a5833c39"): true, - common.HexToHash("0xa06f24e4a41a9d1876ef1744bfcf9945ed1528f7532f39e0d683a86984a5f140"): true, - common.HexToHash("0x78765441eee391ce5417832c104b4733c25f59457be51a6c2552127ace8e5d96"): true, - common.HexToHash("0x23e96f25c1a94d11184a7655003960f6bd1ccc05bbc43c6c4084386007146c4b"): true, - common.HexToHash("0xc41c05a99d7e25778c16e2dce8ae1a415709ba63e46e01697288a37fc49b4c10"): true, - common.HexToHash("0xe92e9fcfed252eaafb51b98c7ff156478c2376a0d3eeeb7307868f6bfb3c40d3"): true, - common.HexToHash("0x5ab61601e91717f6b21a00a75e9af5b0c4a5d0d7412a1aa63c0aa94a2e9edbd8"): true, - common.HexToHash("0x290eeb347264ba1162463de0bd54cac13cf93a0ef613218947565c93a5359c34"): true, - common.HexToHash("0x6e35146bd8c318d59c3d6ea2ae817012f620a7b44b3104a760956b65ad8ae664"): true, - common.HexToHash("0x9c3795c3ef9b31ce0289eda49f858f8a47c4815b85ce13cc6952bf3a3ddf66d0"): true, - common.HexToHash("0x40b203257641f9367b85c765947721f16b1e226daaf0fc0108fa5f7273b5b482"): true, - common.HexToHash("0x598489a0ec69e48db312862103a98335099772dbcf7c1b23a2f7a00807f2c3e6"): true, - common.HexToHash("0x640e66cb7d6040093d72d5d391d5d58cea9d5009903129db9b45363434e94d94"): true, - common.HexToHash("0x19b2084ef8c93ca75b4cdb7854096c324e2a0bfd644fdf73211a76f2a95d4b7a"): true, - common.HexToHash("0xaa2e90152684ae4bec09b0f910b8a3509a4774bfcf0990ae977cfebfdc61cdad"): true, - common.HexToHash("0x77dfc6e4846cb6f3ffef67d54396cb811d840b2ef13814fe0caed4ae39a9d93c"): true, - common.HexToHash("0x6ba58626851c081e0967c34a309e070e18274cc9f2005736e1984afed8381fd5"): true, - common.HexToHash("0x8637d472d77d6de93a651a03b48e580ac0374cf53371367341ee4935a1879ee3"): true, - common.HexToHash("0xc05496392920a48a8168ff9792e65cb09bc913af95e73b26af4384cbc3550173"): true, - common.HexToHash("0xec71c4e55e3908555f7d1510693d149d4a0b25f51bdf1b5602c9ac00ab3f04e8"): true, - common.HexToHash("0x4106487ae7188df15535e3fbe9f6a354d079ab42c90fe0b841d18ab2cbd9ff01"): true, - common.HexToHash("0x89f7de47a43afb7b19d664d25070acba15ec887c3c1c4f45e3f555b57d03ec2f"): true, - common.HexToHash("0x743639e355cd7f337486075cf782eeb7add07bd5974d06cda945ae34e84a4b5e"): true, - common.HexToHash("0x7feadc416a72b30ae9e432a1970f7aa39b8b90d384155bc8d38966f215e4d0e3"): true, - common.HexToHash("0x05c40b44d619f776d5c759263b57c01ac1a817df9c4d0cdd214afe95c9e4484a"): true, - common.HexToHash("0x2be715c140d1a7d3c7a25494ff22f12b80e049162e592dad51b6b808c1194f80"): true, - common.HexToHash("0x472cfa1b45c21619dfa22fe2d3ff70f694aca5cced32ccd869d6d5c64a666254"): true, - common.HexToHash("0x41bf8a6f2edee0de996db540283ec84677efa5f6aaa90db3622d62debaee6e3b"): true, - common.HexToHash("0x87c91c16cc148bde4e31b6c4f434c7ed1f91fbe9f21437be0569479366ea9b9a"): true, - common.HexToHash("0x18490c7748f13b22348fe1de699a84a9e34f494ad88ccfdb0e1ac0f2547348ae"): true, - common.HexToHash("0x726c62c84bfdefa21c65f91a043eebc2746dee5642fe8ab1884ce3a8fe396445"): true, - common.HexToHash("0x1e77d821421f2ba3b68756fec7d058a9eccd56cee8a4a52b8f3c06c9213d95aa"): true, - common.HexToHash("0xe1dbac772b1e05210f484a8bfa72da74e03995f8be087f80ca30f23bdd2ab0d8"): true, - common.HexToHash("0x49fe5d91644a536220d72e28e206e8e974935a3ca3667e22c32ee460d22b0933"): true, - common.HexToHash("0x6b1dbe1fe555496de9ee14601df93426485fc8675050b2e6f4c6ba57e74fd692"): true, - common.HexToHash("0x4dde07dc8ad2dc83205c07c6b0648353f19fd6b4578c9bf5df52c6480a76df98"): true, - common.HexToHash("0xf0ccdf2adbe27b8db303d3ab52652fdcce7b6ce9fc89f789036c3043e990d3e0"): true, - common.HexToHash("0xba731e314ae80bf92361802954c17441112c4356cdab2019f19e8048ede1d695"): true, - common.HexToHash("0x0440011c3512e5f2cae5f188bf5d43ffc1768c6b5263f7ced5ed38722e73bbbd"): true, - common.HexToHash("0x8ab7c38df77859b10f63538d0964cc4d6d2bc1b64a0bbeec28760405d48af883"): true, - common.HexToHash("0xe93654361e3bda0d9346e8b7d91ea148e24dd0fa4bd59fedee20a2e2f4e3074a"): true, - common.HexToHash("0x527bb714dda246324bbc494c6a26167d717114bda75be7b458e7b1aec18566f8"): true, - common.HexToHash("0xb548bb4189bcae7cbf4b342c9d7614d6670793243b049fc5af8004e39b23c6b5"): true, - common.HexToHash("0x5a3cf7e6e4a9dc8fd1870b6d37e490774947708571f8a112394e36f9999cd35a"): true, - common.HexToHash("0x03c4215cca4f116dc012ae2043938592768bc44c273ac76d4efb5273a62de72f"): true, - common.HexToHash("0xb3eb517213e9b4cd75935a3d5cc4b1c07fc7d2bc5c54ea421416f8eedea77cfd"): true, - common.HexToHash("0xa3e7b70fb550f23514fdcc817d8e3af1839102f5386b89de65469dae15e9f558"): true, - common.HexToHash("0x1fdf4a477c3aaf8b46241493876cf4f9583d381b30b8e98cf799bf52ef3e8b9c"): true, - common.HexToHash("0x9d9e15e02c2bb0d6b3f505e6ba457464fd8a2a41c1d16c89d38e8e0998d5e489"): true, - common.HexToHash("0x70e326b061e45c9593203342950d1f4e5421674ca0cf16f798035351da67cba1"): true, - common.HexToHash("0x804291fd3a893c74da323d9a5aac7e35458d3907b50597aa100f4c3387767f27"): true, - common.HexToHash("0x36c79527e465281ea3978a1ab679a5c5f718d7b56e0399bc20f47f5d2b4a88a7"): true, - common.HexToHash("0xe16399d2906cdc0ef53f8d62a8bbb376cba9cb3e8f724c56f230eef3871f82ca"): true, - common.HexToHash("0xd5d41f660b5f063fef01285da43020f67235534fb73847464820328ce5adb744"): true, - common.HexToHash("0xdff42a332bf5c049900bd81c5e9cdfa7b435781d2f1d657fcaad27d5f8e4a40f"): true, - common.HexToHash("0x5d0c79e961b40d2cc0a70b00a15fb2d85409f02d241a3fea3e86ef3c852ddcc4"): true, - common.HexToHash("0x41022a25f0613b714b258244cb041f3476e62cb4aa94f9aaee2dd0cef44d3134"): true, - common.HexToHash("0x9bc1b0bf8cd1aed4b85f4ba3b506036c997bc139469052f0c1017cb188b1a253"): true, - common.HexToHash("0xb74d5442cb4ede890165c4a66198afdbc6d8e7b3fb80c2ad68091cc4fd93f45f"): true, - common.HexToHash("0x1c5e10ac124167c7dc3bc8ab11799d297ea88c28cfc0bc972c8d9dc0ded2727f"): true, - common.HexToHash("0xd3edda3a17d8ed962af80a3bc5c7a1af78fddea83f2e55bb49a4c6d772d5c512"): true, - common.HexToHash("0x95020f5e57119ddd2f83c396746f1a627adebe5cf959eab4bc1288c9930ce758"): true, - common.HexToHash("0xeba64a0ac9a4e5c0cd01ce2c67b4038f2272dbb9d9a959d2401c2e4eb087f43a"): true, - common.HexToHash("0x3ad623f3454f788d3f24dbc30bd63d01ef9d73af190a8194a8dc39ee29ddb636"): true, - common.HexToHash("0x65362543443760dc9e9aa1234fbbc9fbe14e6526100f4557502d255e74345ffd"): true, - common.HexToHash("0xabfd0bc2c7c1dfbe0bddc8c17d628cb26832fccdde6fa02a9d14b00eca24d9ac"): true, - common.HexToHash("0xb45a81499a585cf8857d213cd4e9e55a91a990c126d2b97a88e84ca669e6dffe"): true, - common.HexToHash("0x2d3746c2721cd7ebe0e2fd0ce8107e288f1accd0b907ca27a101a78f8f325ea4"): true, - common.HexToHash("0x6acb1259adcf522a6a2d53f3f8bc5e73eefbd9d6824ed26622cf3062e0d03def"): true, - common.HexToHash("0x6ea2f483a6580c301c52976e2cea19acaea258d54af20482e26fd3bd92f7dffe"): true, - common.HexToHash("0x99c7885b5bb63c6aa8cbe5c3b6058f2d572081a4c4d94734acee7fc745f9c079"): true, - common.HexToHash("0xd2b836b92579c90b0e52f641336422646717a53b47e202b47830e5aa4929eb00"): true, - common.HexToHash("0x4c8508103d16fb0f37eade503819c6f9146130c60091edeb9c87e4defbe5eaf7"): true, - common.HexToHash("0x59e531e8ab01fb338fb95e39b2cb552411aadc395986b2c6139d772951314f56"): true, - common.HexToHash("0x1408f9137420b7ec8cff71f2ba285b629403d32399e2d7dc1aff9547bdbd194f"): true, - common.HexToHash("0xf3ea55d581e0dd3f5710e0d42a61724569a0567335cf253327f1cd899e70c090"): true, - common.HexToHash("0x7d67addca069079b1b53400199494442a9ad8caf5cd0c8f264fdbaf3e66e4c6f"): true, - common.HexToHash("0x64146c74ed97bf245771688ab62fa4bc64588d38c988cb0897d1676b20ca9086"): true, - common.HexToHash("0x54c7ef64faae72fa685d22dcf973facb69f3a0998a7608c83bfb61446ce96be8"): true, - common.HexToHash("0x38f962aeb4dc8358b9dfbf1e93541f549bb4a9c8765df107e1876173d9850395"): true, - common.HexToHash("0xcd7990635d3a7f8398e268c2b7fb8fb82ae97563242dcd640c7ced1d1bb023dd"): true, - common.HexToHash("0x8f1862bdaddd88f4f4bcdca0aa1614177a654d465a8b59c538b70af36e182122"): true, - common.HexToHash("0x47598d36df15d6a5f2338aab3c594271b07bd1c0b67ffce4689b0ac2cdee997c"): true, - common.HexToHash("0x10894720efcd37944c10474aa1d2a608be4afa96b580fdf363c5f4d4fa7c869d"): true, - common.HexToHash("0xfbb1dc514a27e520a2429ab0e5bb7ff9012841b817d547853fb2d0ad1cd8312f"): true, - common.HexToHash("0x513dda216d2cfcb0e443556cd11972ee61801f81aa056948f706f6235810b88c"): true, - common.HexToHash("0x42fb52b11ffed1f4eaf8d0c07384492f776f0db43e0bfa8a6e41f918b1b9f4e3"): true, - common.HexToHash("0x54a62c9babf098a8e546ea3e9693114b397730198cf745b4c59e63815db23dd2"): true, - common.HexToHash("0xc5c3502a7dd44c9496005349c9b94274df91ccaa02a3263592dff00a9c28137d"): true, - common.HexToHash("0x2f610d4137066e6763f156cddad0cdf86b5b453f34ed327ca57f2c138451b679"): true, - common.HexToHash("0xa7ecbf297f834994dcebcc4eb483b5361cef5e25eb0473d6c883c5667f28483b"): true, - common.HexToHash("0x8414efdd5f1569ce5c6d2ce2a659c4f107fad4a31d65880ea45b0ebba398448f"): true, - common.HexToHash("0x534618a354e7e6d7454260bf507491c227051f44e5f473d8ec98788875dcce8d"): true, - common.HexToHash("0xb8aa6d4fb0a1a501f4a6202150d54af6e403df52bc1bf9a26dceb305af8123b7"): true, - common.HexToHash("0x3fa351f134926d3fa869cce3c56ec0c14720267b2a47d1a47cfed162500e321a"): true, - common.HexToHash("0x91abdc64372c9d7f63d83a438b7d4c9a7277b95903b09eaae11ecc41c063121f"): true, - common.HexToHash("0x553d1961e32cf24b85020c5f2ba0280dc5967433ef6d5b94ace238a87b93cb75"): true, - common.HexToHash("0x4c6216f436ae7fc75536cd75ed6e5dbb45f9f25ae937dfec343cd579037510d5"): true, - common.HexToHash("0xc9ade3951446a27bf8dbd8aa786ea34ff0d5f78902bd6850e0dc813b1b87f6f5"): true, - common.HexToHash("0xf7e2a30603751962cdba2252a2d7298e8ad14f9cbeab35e7b68d3b253b75de6d"): true, - common.HexToHash("0x645c2c948994086966bd45ebc4da76bb47a3aa30685cceb6046ebe5245be9318"): true, - common.HexToHash("0xceadbb06db4c2726ec1405403fb5506482d1b6f1c4c9fef646000a325be74841"): true, - common.HexToHash("0xd66d37ce6531d097f2304c63ffe7141abdd90117e69ab67c9d83d3af293010cd"): true, - common.HexToHash("0x0d633a9572269a43bc65dd5496d549fc0819316bf11f84492e51d5aa7604ab7d"): true, - common.HexToHash("0x97f54af2689b30184d2cfef7017adacafd0a3f0c9536c9e5ff7a8f1031dbf705"): true, - common.HexToHash("0x9b12d8eaf6d2c722551c53b3fc0730dff747ab17835a25de859d4c0259632aae"): true, - common.HexToHash("0x2b1e70bd773ba6aa5d98bcb1e504094310985080d422114b2a14da6e1fdd7931"): true, - common.HexToHash("0x9180eb9da2a1c389b1bb244aa4c5683c53672a39608aac067899cca7f0ac6ea8"): true, - common.HexToHash("0x7a4e3f6ae6ecea88ae450bdbb2aeb9415acfca24849137f0ceabd2d7ad414b5c"): true, - common.HexToHash("0x84f7dd5fada1c4667944c5cc3148ad977cf5d4a450c9064ba8309133f211f515"): true, - common.HexToHash("0x18d09d2f390552fa74536d152eba61666b582f4270637457c4b1a4704690fbf5"): true, - common.HexToHash("0xf02e090ca8a38f868bdae03ba16705dfe13f59f9a093c26247d8eef845f4d668"): true, - common.HexToHash("0x71adea9626887a061390028ba9d8e743d1daebf5275049cb98cb7e442788a2f6"): true, - common.HexToHash("0xf9d02c50c8afbeefc32133109f24acc28269ec4e5959fe874d47190f472ba3bb"): true, - common.HexToHash("0x9896b9b3170abd86c5ef2d253d5513dc874bf05fa04427eee79ef2812a54c60f"): true, - common.HexToHash("0xd67d517bf8251162c83da6d8754a23c13f888bf94d86178aba204619199f6fe2"): true, - common.HexToHash("0x772ff5b45ff9d6ba8126e8990e4e0ce20e755ca596bda7aa42e56e4d2adfaf5d"): true, - common.HexToHash("0x4dff4e6a045a035a55656980195c34521ebaa25902cae32ab8bbe04beb5bf7bb"): true, - common.HexToHash("0xf63a5e2fd7ae40868ef6dfa5fa60d3c85cad282e2c59496afe6d5319c5537921"): true, - common.HexToHash("0xc941f8bc55f123b511b6cbc96b26ad064eea877b2c1cd2485f9fc8e068f68892"): true, - common.HexToHash("0x83d5661d492e2bc8e0efc6e85a608afda466203504b0c709e7872965c9a2d647"): true, - common.HexToHash("0x6469325538a81c8db9d6e8b758fad074602e0d40790260f1b51b2aa167e61f3c"): true, - common.HexToHash("0x9853c05a1e7db92565b773dbbbd9dec15c985cb4a68c6cbbb33b316ea8a49abf"): true, - common.HexToHash("0x3d133c48636032101aef5c27cd77acf7b4449f044e4640452d95347bc8611481"): true, - common.HexToHash("0xd45924b501e65ebc74bceddc0382effd76055885aec62d704e1b81a34efa66fe"): true, - common.HexToHash("0x0d89bc67cc4d416378acccf19531e7da9424c820d2c1667b196508a903264e0b"): true, - common.HexToHash("0x7da98a0fff863c0dac633435e29683ed2e61d8dd5f4be0e5e8acb65b506b7071"): true, - common.HexToHash("0xe251416e837d556865b6cece05dac515948600774e052176704effdbc3f7b1dc"): true, - common.HexToHash("0xc2b543e8b9cbf619af05f659ba0ba7c65cf20ccd40fac3d76722931ab7d98168"): true, - common.HexToHash("0x5465d66f1738653cd7b4406f7a078b9998f69fe912fac81079703dcb1ddaa546"): true, - common.HexToHash("0xb41daabe0667f3ba303b93d319a2437e088398e36f60346ac7bcba0b1b0ce6b3"): true, - common.HexToHash("0x3e3ae000f4dc205cd9ad3fd9f9d38565d271ba20e4bb3ed1c3f94bd9a982b665"): true, - common.HexToHash("0x1b65c3d2a383f90d494131b338243ec698d4bbd7c664e59247e4ed03bc35ab94"): true, - common.HexToHash("0xf80f028261b3ef4293b45d4dda3cadfde0f7444d235e897208601fe86239d6b7"): true, - common.HexToHash("0xb1ecde30c6e3b3cd698bb1b446dd5421009ded49be36ce0e9bf402407dbec4ee"): true, - common.HexToHash("0xc47712e40750b4f86e1490a0c8497739f7703fd390b78614d12bf12f3de262fc"): true, - common.HexToHash("0x87da30f5e594f08abf6a37a4ce3b719f500f4e9ebe4d1e0114152c16df2a3c17"): true, - common.HexToHash("0x0a01a4c755fe6d1c2f85d7b824273d63e7a21087f26bc88cf7e2958fb11a6d1f"): true, - common.HexToHash("0x2be7979f7290b4a344d56dac559013bd2ac9f38d1ba86b33dbeb54f1bb1b3665"): true, - common.HexToHash("0xbddea4c156b2b7316ea00dc5e34de4f700b3b2cfb033299b046c24862a81af5f"): true, - common.HexToHash("0xfd8e34e01dd070a1cee3530c4f3313aa33671ad34b188ab13614d8f51c2fb340"): true, - common.HexToHash("0xb23e74a18e9c997c87a6ac53fe2e9cfb97c57260e4ef915d2f86aa830163eed4"): true, - common.HexToHash("0x03a5c062df64ba29b7f7168990ce7418dd24aed5edcbf05712d643d545c95090"): true, - common.HexToHash("0x9624df3261f13e4960630fb36c96e80d5b9dd4e1c5d38835a81dba259b913eb5"): true, - common.HexToHash("0x71e8c513c05da38ffc21f4fa27b443734dfd7aae100ef0d94122d87487c6e363"): true, - common.HexToHash("0x3d790e4cd1782e5df73eb1212bc9c989fba6cb013c18cdfc9c4fb50661d0edf1"): true, - common.HexToHash("0x509a04fe66c8821a153331d79a1715b614e120a819bde99e3f092eb73d81e3df"): true, - common.HexToHash("0x7740aa08ca2f83ec68b151218e2848fd75db08df819bce87af8017be63025467"): true, - common.HexToHash("0x9b26f3f51f676178e845cf2c501701d8e9ce46dd728697ef75719b330c846b7b"): true, - common.HexToHash("0x9d47c20ad664c70559cae1ee1286bd7905b2a1fcc6d26cfa145856c17fb75789"): true, - common.HexToHash("0xc9c86164b1dbc9b198d812819f51c063714977cc657db14b83abbbbf2aa6b0d8"): true, - common.HexToHash("0x215334dffc3bbf7ff4e1a8d6946622b68a636a6f3666c6c28faf7b55be61c9e2"): true, - common.HexToHash("0xe948529e1df07c31273a0d7d52a0610e400f24b2e7725270dc5b2e9418d8242d"): true, - common.HexToHash("0x7e5fbbfa5e2b9f9d89fe5b7964b0d66fdc69e71871dc49b4cb7adf853e4d8673"): true, - common.HexToHash("0x1be5f9149ffda4bdffb20dffb3587142a16481205586cd0cd8c1cffe41106410"): true, - common.HexToHash("0x2deaf93597cc6ca71e0b8f0cfe1dcb7d9725bbf4d54fd47a17ade18abf33cd4e"): true, - common.HexToHash("0x6389e281b2b2f0a1d998bbea6e2a5cb3930b64c2b2153aaa8a00404f20e44f53"): true, - common.HexToHash("0x5f223a29575aaa2d348275479f108d47e86a1dc813a9a0cb96feb545d3144e5a"): true, - common.HexToHash("0x0428d75cb1e769ff2c975aac72ae604df5bcae351f57d77dcc905b68b161f858"): true, - common.HexToHash("0x82e07ff98b711371c3e065ae63db73244cb8fcc68e2a1162db3a770b913258fa"): true, - common.HexToHash("0xe2d7e2d8db64467fd7fa54361ae056d81d185c1118f758e1aeeda595d3177009"): true, - common.HexToHash("0x8fdf3f57efb1eef51255bc2bddc6accaf246c0482a0104c0307b10fabd20bd5d"): true, - common.HexToHash("0x4a236741b76306798c68ec43ea2d7c01615a183a91797f466cdd55a8f2895bc2"): true, - common.HexToHash("0x3e5319b185954d73ce1df7f3ffd9fb640fa70fe75f7e9032a95e2b1f3e402af5"): true, - common.HexToHash("0x1465e5093bccd8c51838b0fcf3bc7e6c4b2e8c7f7be911ba5f57980b385046f9"): true, - common.HexToHash("0x30a6bce401a2390b2e71431ba7fff18f0c0553ec74cf40d9e35e84763927527d"): true, - common.HexToHash("0xe9e6507412e80d99cd3302e627cb11c200806c242c7861b959914874c4fd806b"): true, - common.HexToHash("0x87b51c479a007c9601510918efee47c376741e6436a00512249c82de712ddc86"): true, - common.HexToHash("0x0036964b0ecacc7af96a4a27e9acfb49d0b31969dd7d602996e5d2f5f5880b89"): true, - common.HexToHash("0x7c3ea8b1b54063dc17812dc1a56398c1157da325ab3b12c0a1af32ae24d877f5"): true, - common.HexToHash("0x3eba7740c17bdc6cd941a4b3ec2a2a3abe230ca6069c37907d76e4ff07d6cdf3"): true, - common.HexToHash("0x54ea3d14e44eee30dc42b990fdff1ed05559f726e94559c57fe66a53c5d6e095"): true, - common.HexToHash("0x8b4654130e23849970999a0620c1a973570688ed3bc6ce37e0dcc633a08a3292"): true, - common.HexToHash("0xa977bc9beacb464c83d813ec8022a5e5ce7750c36c1a37d7a59cf3146e3f8268"): true, - common.HexToHash("0x5f9e28e8335595c82051caa1fd15642466b4caf4326d3db2335f4c25b75ba19f"): true, - common.HexToHash("0x50f4d190e77f1754cc711969a92b363957bf5d350d255133317df3068e06e218"): true, - common.HexToHash("0x3054ef690212d320a4a5fa49eea1d7a8abfe2f7930535ea148f6b96004ce2b80"): true, - common.HexToHash("0xe62401a44330cb611885f29c6e522bd131a8e0b6b4797d8372d23136a33bbf19"): true, - common.HexToHash("0xc85e6c93756c3cd01e0aa6a12172763fa7229c4f005f1d67f22808ac0f267fd1"): true, - common.HexToHash("0x44b37809d6c1a0eb13754b87346539f6034030c38bfe75b96f44d9f4094af720"): true, - common.HexToHash("0x7d8c3295cd631272148d448a3be674437a6a042fed1b22609d7538697d837757"): true, - common.HexToHash("0x765c160b84ac34c85a612443803f9160168babcda4b1f0042b4b2395b869013f"): true, - common.HexToHash("0x9eddb21ba87ca7822750e4f30efc3a94e6fd687c0dd25cdd164d24bfb73c61b2"): true, - common.HexToHash("0x5e319b7ddadbb898bc15ebab4928e8815106d0208a44cba3a59897d3eb14a4e6"): true, - common.HexToHash("0x09e595e9ff3e263587513509df7f9de4ca635bc3b9eb85ba02d2af2ee28b0e31"): true, - common.HexToHash("0x52c4ab5725415c438a6b5279cea89a58c2bd3e692d59cebfe547c6b7330d85da"): true, - common.HexToHash("0x4218c0663d8a33fdcd94f407e9ac0ffcfb597a42f5a3d27e2f85f908e150367e"): true, - common.HexToHash("0x4a92ddb8ea23094d1819b08287e5f469b9b5d83ae23e1a0545d955e18364b622"): true, - common.HexToHash("0xa85490ffe08b1249b762b2e78d1381b98cf78f6b54d207d153e22949b228c12d"): true, - common.HexToHash("0x0cd4aaeb3c51b0d48f5bdf0b93d5d7a5afbea3defaf0d56ba061d0bc7a9f893c"): true, - common.HexToHash("0x0a37b9367cf042f80a13b9ab035aeb338738b29810da81c9da11a48cdb1e0e14"): true, - common.HexToHash("0xa2a467c6bdc72c377ddb3dbbb11dfc7e1fa386df011bf44299adddff308d8154"): true, - common.HexToHash("0x3e78630e7b84e3084a6c035b47db05848960cba1357c2c6e114410f23842f437"): true, - common.HexToHash("0x2480d1d25a34d67bc5efe8ded4ef939a58e19d515cc264239c54880151a98697"): true, - common.HexToHash("0x5e44336fefb010fbe49940864484fb203c1c1ffb473bed492776d9c5ec1f5016"): true, - common.HexToHash("0xca764660595d8f2f6c391aa7cf37d192b8cc1bd4d523ed7880aab07956f0af26"): true, - common.HexToHash("0x195ee74a054df30b628b124c4ba28e415200ccc53d247315ffc0b8da009c54db"): true, - common.HexToHash("0xba8d7a7c27071da17723f44f64d6806617b2ec60a666a1caee6478ea6621e1ad"): true, - common.HexToHash("0x404859eb461c6b8f29e21009b62263e60a285196d267708b0c7bc82bdda04147"): true, - common.HexToHash("0xc2636bf9a2ff4cf89f16bdb4418e9521b53695f8ae6cb080a2ff38d6279810b9"): true, - common.HexToHash("0x5d17b147508ce27a00abe687f348db0fd18a97c7737f225e0d7d4446b584623e"): true, - common.HexToHash("0x162b55096dc0b22e89112ad6433bc7879df14078eba0a680e9f3b6a56ecc8720"): true, - common.HexToHash("0x708f44d4b51b4c2498ee83b73b4ea29ae27df1850c8e7a2a7a9acc569b2e0939"): true, - common.HexToHash("0x93125a778679666b2bd96961c2ddaafc62aaa8342b0d6e83d1195ca07d047e65"): true, - common.HexToHash("0xc7501e542d7edbb54af0f69a2e9268f6870a579570bc6ea18a1645a1be8d8a22"): true, - common.HexToHash("0x79c3264f253e787f3d4a69aa6d8074faef3f334635d02f117316e7c3aaf5594a"): true, - common.HexToHash("0x46f2e92a0c95082b4f24d006d919c23663f44b90033a28b0272dfcd201655b36"): true, - common.HexToHash("0x206b82506fccab9bea77d19d357593d01300e51b0862f5ed95a50e9c6a864b9e"): true, - common.HexToHash("0xb42901c082242e06664f60594b06f68c39ba1711d66ddc725f45a6090a954f3f"): true, - common.HexToHash("0xc943f029e87d465355d2c256e6788291034eb05f929eeacd500fce8e775724f9"): true, - common.HexToHash("0x579a2736735173bd1c4e380be8cb2c8197d0c1e43515e3e20d434febe7abd98f"): true, - common.HexToHash("0x210c78c6894c90e1eb10675a74702f71e1250af109a17b42e68231d401e1c6a3"): true, - common.HexToHash("0x05d92904f5520aa6e9aec9c257c724fa037a4bc2aa37cd4ecde16f0eee79195e"): true, - common.HexToHash("0xb535953ef4715f4822df09339e58fa1dbb7a45cc7dc44664e23fb75e6ed5a71b"): true, - common.HexToHash("0x976ebfbed1d3f68cd4bc4840ae2d6f7f1b6420eb8bfff6f2eb7af0b484dcbf32"): true, - common.HexToHash("0x44d325f6dc308c5af708eaf2700061945a158d0c9d055ef7940ace8a758158ea"): true, - common.HexToHash("0x31583ace39e01555e9f64e34914d1e0a720483a81927be08763b03143a31d9ca"): true, - common.HexToHash("0xd7c96d64c66672b2b19529ca88b3e1ffcb30ada6ab0355eea7366fe572a01431"): true, - common.HexToHash("0x9b938f1c5c14515e719dd65f28014914bb3131e6fc505b6e893778f46a642b92"): true, - common.HexToHash("0x89963406892afbbdb6d705ca86c24e86632ea421ad260f68192c6c312400a55b"): true, - common.HexToHash("0xe4bcc07db4fc614b8f40d1bb8c1a1c63ed85cf1f6f39995c856fce4e1364182f"): true, - common.HexToHash("0x3b924e7ce7ff2f6879a9b2814bc3b42fa3ebdb851c885bb2de3fc590badd56d7"): true, - common.HexToHash("0xcb24b90d5b3b40453bd9bb435efd1b6e849128e7b81ce86e7887689348fd80de"): true, - common.HexToHash("0xf041ff9479f9bbce8d9962e72cd526aa5179c1c8b66207167adf2aa51b8c5798"): true, - common.HexToHash("0x1e640d3bee955ac0a8c3768368795da1de202c0487312da1df465e6e3816f5d7"): true, - common.HexToHash("0xd779c2a3e944a9d3122622dfc7e1e21dcd1082c6296d33290d7de86fd87b380b"): true, - common.HexToHash("0x3c045420499c664fab5d863a4a3e29fd8821a46599271727a80b926f5e958c46"): true, - common.HexToHash("0xb7db538afeb768c87cdf70c18e83fed71470cc1860b38ec6304919fbf3d5f403"): true, - common.HexToHash("0xc7bb0b93b54b533b35a9c59c2fb15fc83b9e9cf2abbd825923ceeb80f84c0f9c"): true, - common.HexToHash("0x8dec80dea20e6fe8feffc63059506400cd221d1498ad698ec6ff0932a68d7211"): true, - common.HexToHash("0x3dcc5664204b88e8fcc615a3fe9ceb13f6efc546584e939cd7499e073ce1d380"): true, - common.HexToHash("0x93b600c85f1e55f258df1ccd6547636d05300f832bd6dd4ba7d7e8e395e69ea0"): true, - common.HexToHash("0x3b9d574f4c33b9cc49a783fc81ca38ea2459af51da7c6bbbd8a5ba5cce770174"): true, - common.HexToHash("0x694e3d9ee557d17831b9a34cbcf684791e5f569359b75b900429c99721bbd1ba"): true, - common.HexToHash("0xad500b84e3accbb4a4643ff68fb8cae8f4a89ae6c15017b3a4b6a5bd30024a30"): true, - common.HexToHash("0x063bd6ab6f0cda757b96779d3e0db48a555543a3777d98ab9c9d4c86c9b236a0"): true, - common.HexToHash("0xcd29e93560dd8b367f699ab9de1f514b435c8e40cd6cdf4213c790d56eeb43b1"): true, - common.HexToHash("0x4be5470bdb2a74f7482ff2ab3cc343ee58d0636d1a2ccd65945f7f14234ab661"): true, - common.HexToHash("0x3fd9f036b3c2aa9a75900fbd00702b4fcade86bdf5b7c518fdbf3ca7b300f216"): true, - common.HexToHash("0xf01853f0419b47884a4fb292247425247f90e6b6da7aee18bccc8d183cfa051c"): true, - common.HexToHash("0x9967f9aa627aa49be1dd1a55121a2e180292191216fd46887ab3c7358c61dad4"): true, - common.HexToHash("0x30eddb22f21061a25326900c48ae15bc8c4843451959c25041e1c18531e11915"): true, - common.HexToHash("0x14265511daa1056858414db9090c5242dfa952db7d0a90045661cdf5e9dbba07"): true, - common.HexToHash("0xd6e396d4e9527141a0719bd306ef43a9dc5a7b9560c5569787bf58af8818b3a0"): true, - common.HexToHash("0xdaf25a3409a36c641a5e50f25c39a889f95a95fed4ec447c1c930f050a7c528b"): true, - common.HexToHash("0x6ba35c8f3305199cf952a70b90c35891e7d7e3946dcbb772d22b46cc451834c8"): true, - common.HexToHash("0x108637f3c73b90f25c7105d96eacbe3d1a11eefe1f26e5854d207b40d644d8e5"): true, - common.HexToHash("0xdc8e77601ab7763582cbcf90beaa96a583e68efacef071f2da2fe0fcdfe945d5"): true, - common.HexToHash("0x77555f6437b640ecd5ee3e4aca5cf4acebf998cea0fb44b2134dcb8a719d220f"): true, - common.HexToHash("0xfc0a21bcbde0f4fab13df58c1877ed84d623e218b40ccc97e739578d747594f5"): true, - common.HexToHash("0x4e482d98ce3177b479f87697cd581d63cfd4bb7959bf9dd969b6ee1cbba805f7"): true, - common.HexToHash("0xe657a147e776528a86c9db8c72169e836c8c699a0048dbe012cb133a815ed399"): true, - common.HexToHash("0x32f5ba0cd2a82d7e5c44b1017d178fbe96795cc641e7797ac3d32010d457d293"): true, - common.HexToHash("0xba4a7d9f0f3b344fda156ce70fca543f61f6bcfa0cb56a5f27c9386b983f9edd"): true, - common.HexToHash("0x3cea68118690441853e87f43657a7dc78d2ab9ee6dbc014b9b8cd38cd238baed"): true, - common.HexToHash("0x5b46906f54509ae17757209c39223cdd667f0081420c7949b5d62c7f0ff1512e"): true, - common.HexToHash("0x0c40393fdcbb9afbdad4cc633608093e4c072c5531beb79c60a7a97f2b0e9987"): true, - common.HexToHash("0x5c11c96196bb12a26606b61c68cb5e6851dd5a65dfe635fa56412f07c58a2465"): true, - common.HexToHash("0xe298960d32d1f32f1d0b97411be8861cc50a2c3ccdc52b5a4ff1eaaa8ce98481"): true, - common.HexToHash("0x799b938dc5017c7519f09960de03605d3ad703cd3016acbf0ad4da44767fe16b"): true, - common.HexToHash("0xa4c5254d074f2bea83e7f8838c2d1086b1901b1ef3c5e098c501d374d93e6a80"): true, - common.HexToHash("0xdbf54c300b2b63f1fb84574f6b284df4e10ab0375e7290a206e81fdc57e5a2f8"): true, - common.HexToHash("0xec3af94389362f345325e4cf35d8fe14177c47ff99f62103cc3c1b1136891b9d"): true, - common.HexToHash("0x4e2f404664554b82e0f9ff71bc1dfb6da22f8a04d0680eeee18c4e25a9a6fa08"): true, - common.HexToHash("0x222e41a740fc401ea9e6e3741e694d82a9a09419a3a2bd8139eea3984b564123"): true, - common.HexToHash("0x768d52a7b36606af07ce06246c91063d09c2c0a7719c7c000bdb9abaa9883e5c"): true, - common.HexToHash("0x91d688522822d9d4817c3ed783e50e91e3e2d671d050fcaef432077a6db5db8c"): true, - common.HexToHash("0xac086dcebacfdc84f0d4fbcc20b3a341f6ec07061a62766381f479269a432d9f"): true, - common.HexToHash("0x7cad79ac86728b4d8a683d1703d8695598a80ef4b2a7f3b2832f7336b1037fbe"): true, - common.HexToHash("0x72fcbd896b05772dd4bdf56de84e7459c38f2141a2409e6195814323e87141b6"): true, - common.HexToHash("0x6488c942c043fb9e6fe4731f6e157582e2bbd19da1de8d7a8363db8a3802ad22"): true, - common.HexToHash("0xc4de4ea66225e4a78443cac21f6f8b4ed3bedb958cd3a1237ba940afa6d740fb"): true, - common.HexToHash("0x392f86074c21da509975bc09f900042431b323dd111b494ba2ea1ef73d753827"): true, - common.HexToHash("0x1f95b7313ec61af9142ec4798e9bd73b6135fb9d0a013574d5e126cfdb52241d"): true, - common.HexToHash("0x4645f93fd0da90b8e7c01145fe40e0cef749711388495dc6748e0a4f7709e45d"): true, - common.HexToHash("0xd83c1bd00019095cc553aa84b782645340c219412e06e7b5f769fa325950b5d5"): true, - common.HexToHash("0x08db6a1e451421d9b08e1e8ef5750327a30ff5ce583a404201f230232e13704c"): true, - common.HexToHash("0xc03570606acc857cca7a5cbf6746c538e0e11740b3dc9c82e47a3690db6856cd"): true, - common.HexToHash("0x0ea69988610d34d6a18e8fc1eb73d234247d77606cb89042a387c3923d5fd701"): true, - common.HexToHash("0xf54109270def4e22b9df5bf06a8da8c7fc2efc2faa409973a3d57d64204e7d20"): true, - common.HexToHash("0x8877930a5b174cab5257753c550b1e4854ce1ae2d593e1eacf0509ad2b6ae425"): true, - common.HexToHash("0xe381144cb3f60e49b64fa8f98564dcd0296fc445321ce747a7860ca655c82653"): true, - common.HexToHash("0x523327fd54b649976c3514f13ff0d141652a86aba4e37a4f08834aa9901b0b9d"): true, - common.HexToHash("0x9453f3b07d06b4708d6795a915f911a184fcad508c651c6ef786d44629748b37"): true, - common.HexToHash("0x99efaf839a2529de4da7ab3c8df4e8bc22c4bcfb169877d22068de6ef86b28e5"): true, - common.HexToHash("0x6af0d7bbc55e60835ffefac77eef5f0eddf1a942bc373ca1cecbd22cd2d276b4"): true, - common.HexToHash("0xa596e85fbdd4562af313fd4f4f15f3ee4af34f581f1a78e171818182dbe0dabe"): true, - common.HexToHash("0x893998e10bf40e6706e2a6b4aac595ce202bdde3092b547a928d2054eb58c56f"): true, - common.HexToHash("0x74177b3b261f230f5310a6dfb8cef2c1ab44308e6ab381f18b86850f48062115"): true, - common.HexToHash("0x5544c5c01a1c119f6d8dc449bad459af040ed2c11ae279b162e9b46df4140837"): true, - common.HexToHash("0x244524fdc2f12bf19e9554bb7682b61705b69bf08d294ab1a04389da1ef86933"): true, - common.HexToHash("0x4b9def16c06ba4c2e02f234c0fffeaf1289282b326c5a5fe86d75473cd45a9e9"): true, - common.HexToHash("0x6cb68da11c5178889b18f4c373812698698ee78154a27a09c2d33da24e6e1df5"): true, - common.HexToHash("0xdd166542c3b56449c4578d2cf85c9e04f91a935b3890edb50cf8141f66ed0c01"): true, - common.HexToHash("0x1d37217901e5745a0337293f42c43e6029d98752d01a946e8393d3cfb54cd9ec"): true, - common.HexToHash("0x7adc5f2b9e9952805d6246556c863765e865080f1fb48107e692bbb369305f93"): true, - common.HexToHash("0x170d595ceb3cc89f68bfcb4816230261f98b60a8f16cea8937a56e96b20a8ac1"): true, - common.HexToHash("0xff203e0ceb03bbd9b502f2c3a974bdca71a550e9ab9e65712c918d0c482e8d94"): true, - common.HexToHash("0xc09cde40ce196bdd861b42ecbc76ae85db41c6fd1ba3847f1829c9a98cffa29d"): true, - common.HexToHash("0xa1f4cf9a05bdd878c0d447cd36ce531bd6b423e94c85ed34aea3a9846f553e87"): true, - common.HexToHash("0x609a80215a39f2cdccbb53c44281f6e43b609c9ae99194ef47438e482cf81312"): true, - common.HexToHash("0x80126465f4a8c9885df9492549a10ba5e064d2b19f9555474b9b555a9722b128"): true, - common.HexToHash("0xdc996fa59b74b5ccf9164d94f851c2c5adf76a771923b3cabadcf9c706a6eec6"): true, - common.HexToHash("0xe8fb9615b9a16169db5d115235dfd9cad94b660e042949b9c60a920668243b74"): true, - common.HexToHash("0x61c93ec0e7deefbc60e6b48955e6887310503034f052643a7cc56240b5788c18"): true, - common.HexToHash("0x9f5307996929cc8e3e676a0c58e971771a5c9c2535ca6e002e5ea009544e5f51"): true, - common.HexToHash("0x7f3257c8343fb58bb3857284a25a264bdf30653d1c8003131bb4d04da7b12e00"): true, - common.HexToHash("0x9b1c52b82d94614bdadc06c3b0f3e779bd4f90d14a33d52b0cfef4e91226a8e9"): true, - common.HexToHash("0xf341f6ff192c99b2dc9cb015f6c83c1d82838831219a13936b71484f77ff45ff"): true, - common.HexToHash("0xfca7377979fb93b48ebc57e9c2d2d177b563fa51c44cc2ee307b2dc4618304ef"): true, - common.HexToHash("0x15711686f29e512fbe857bddf9cdcd1a200be5bd5ed07415be0e49ed589c28c1"): true, - common.HexToHash("0x3e53cb26d841f678aa4242d8d1aa5ffd63bd9be379a81059af9b13447bca3616"): true, - common.HexToHash("0xf0cca9363c1d5e5f11a40e8f627331db085eadfb1d5e3f360fdda04f7719bbcc"): true, - common.HexToHash("0x1a41bbd9c5b8bda907ce24aea530136111deaaf60966129f57d51a8c06b2d82c"): true, - common.HexToHash("0x61f8e0d0e55c6855c88f158f4f70e579d40be90742e8bf6665ad5e57e1ca7fa9"): true, - common.HexToHash("0x4b68894bf716e317379ed402df681b31b638a065ba4bc1f47ae1f0ef2fcc74d7"): true, - common.HexToHash("0x009968032fc0c152aece3c214a3652d5301366e376e5b33b64e3f737f5b2964c"): true, - common.HexToHash("0xf63e308da6f4afc3a22f48edfd5383f91e0cf81abed2d2776da1c46b08a2aa4a"): true, - common.HexToHash("0x803d2cc2a039ac2cd8e8defffc74dfb79f4777fef3c00886032ff6529bc41797"): true, - common.HexToHash("0x806eed59e3a213d653bccc793f19c561219dfc467eab597ea82a81e5ae833540"): true, - common.HexToHash("0xab5c9a72d778b855f66a0772d260ced2a651834a07ffd780309c2fd51afef79d"): true, - common.HexToHash("0x3fb9dc6c0f48b670c182e4b580bc7964939830ff828503905204e5ae832cca0d"): true, - common.HexToHash("0x035b63ddab0b046863949a0c8b11a371975218bf4fa6a4498f9f0986e898ca53"): true, - common.HexToHash("0x97763d6fe550a378f97898c446e5cbc4712d95cb6ce858a8419a51851340f5ff"): true, - common.HexToHash("0x99acc0407d11524636df976c23c2905a6f579b25e8dc0eb17eaa5bc363e6b523"): true, - common.HexToHash("0xe63b2fd8b355c35f16ccac14a52d5b18b8b6852801ee6e3b2050f918e4a75b45"): true, - common.HexToHash("0x8acbe4819ffa3933bd5ecb1c91e1042cf407d5f6d585a73f3e25da9cd7dc54bd"): true, - common.HexToHash("0x04cce7956f1a057583ecb6b11c88dcf03a8b0d535000a668a90962d8e0ec8d10"): true, - common.HexToHash("0x6553b131271ee80c3301d14a38f982b807ab5eb3f8918ff19c5e836d7fd33c4d"): true, - common.HexToHash("0x5b4940da2f174fa57ede7d7080125bac6ea00d6f1d96b4e45765e6d4c0f01b0b"): true, - common.HexToHash("0x12d108a0781530fb8d86c77e52e0316fbcaf03840e33e08c8c664bd5e96c5592"): true, - common.HexToHash("0x0905c4eb4b2582e2708e6156e0d6b4ae7d3f131e0fca409d29e47610400937be"): true, - common.HexToHash("0x154f6368a3d8aee09446be601cc666c04807b4ce3413018345e36d3fbcbf6e98"): true, - common.HexToHash("0xa74691b2675e0b2dec919bc6b6ff127255adc39ddc802a07e8aba781d930099f"): true, - common.HexToHash("0xf05ae914e802734311299e584f8ae3b7dd2116cd1d1b2e969ba9a03ccba220b4"): true, - common.HexToHash("0x7e88c1253d4a22d1574424c2caec302852e1b4b1bc5386b07ab23edacc27cc15"): true, - common.HexToHash("0xae67f0e20869f74285bd77ef56eb0f0a01e7f11abac0b31597e7f95341902a21"): true, - common.HexToHash("0x756f474238ad33fd95008d2a0d0b0da40e8a604bd3cdba52c5d1ac26a45bf6ac"): true, - common.HexToHash("0xd2c64fd034ef8dbc4794436cd4769208ce190fe63b60c885f25b45b3d87ac326"): true, - common.HexToHash("0x5693527aa98925ca4d75dc212a582c79aedcc847ddba3607ffdeb85f61bcf6fc"): true, - common.HexToHash("0x7ef3725e6a96d8c1499033b8a9a49f32bb133942c432ee5fa438b52c5f491b91"): true, - common.HexToHash("0xc28a5788cac1b94dafdc9460881ea73b9df0b8de3ddf0b60b7f330dcb5ac7612"): true, - common.HexToHash("0x6306399b9fa10923e2788aed42ced59298bc0bb6dc04a7406cbc96917519e689"): true, - common.HexToHash("0xb26a104665a10c3d7b81aa0012069c2b4b99f5b72ad9d1502ab72a8846a974aa"): true, - common.HexToHash("0x6cd73ce215d8e7887007e3cc0795ce3135f8abcbd4a5419f85c144953d1ef7a7"): true, - common.HexToHash("0xd39cb9bae0d7460ef86ba2d88bd650d91fabee13f4cd4ae79d6d9e6c00af513d"): true, - common.HexToHash("0xb624e5a289b62925f2dc733623ee8d02b44b15b439135a4699344f8c3a98b1c1"): true, - common.HexToHash("0xe12f214552ab434415678a794bd8dd5c28b4861f064a4e712b2037465ce9e845"): true, - common.HexToHash("0x33f41b53842d6065e08a78caefb0a60eea7e8dac97107422b11bc778f1f6b606"): true, - common.HexToHash("0xa4b74bb55bead760dc6eebf8ded5916aa4ac52199c3b59753f0e9aa8d9a2ecec"): true, - common.HexToHash("0xe529bda216bf52aeb3ad3473c310214b44fde42cd0e7bc1837c63b3e74cbbf02"): true, - common.HexToHash("0x28ff7cc19ecd3f925ff53dc6264944b8763198388cfa4ab0f34f3874524577a3"): true, - common.HexToHash("0xa87688762399870bc273ac2325b0fd65ca61a5ee0363eab24c64f93452ed75bf"): true, - common.HexToHash("0xa4c7c37dd97459eaa1a97dde5660e8a0649f82f48866ed5ec06341e4ec3021bb"): true, - common.HexToHash("0xaafdfe6cae8a0e21ac8895334a36327a3257d7616359f76cb92a705036456f6f"): true, - common.HexToHash("0xec32908cedb80b5815986a42b9c849ed136f8fd7da89409ba7428659e905b7cb"): true, - common.HexToHash("0x6d2d7d6967983799330c094bf0157c5f8f2098ceec312dde14a66bb23003e347"): true, - common.HexToHash("0xeb3b6877cc8a6466aa230dc05c820468c3fbc4b21ac69febeeaf1e654109ca37"): true, - common.HexToHash("0x9332d9ecc1861ba2ec36b6f28729260a2c5979a969c21e4067a6dd0376a416b1"): true, - common.HexToHash("0x038bc61d2bb3607f582ec827e28966727a13bd5d479c34cdcf0394fab3fbb038"): true, - common.HexToHash("0xc6c0b5702efd95949bea4c2ad328fba159f4e147e66fee3a9715dc808b1227db"): true, - common.HexToHash("0x8e4be683efd4bb386e069d2573bca3a70a451e768dd2ca398ff1495f0fa9cd1e"): true, - common.HexToHash("0x2bfd7b8032f940daa4e3154c9f8dc52c21fe06dbd4fe04cd0c00fb5faa00d44c"): true, - common.HexToHash("0x5a3360a2a1ac7a85558032585f7d4a914f46c30617a7dc0f5257e9c0d1e034a1"): true, - common.HexToHash("0x82affd0a09ce20078e5c56d3faae5f67e23351439c25cddcd6af6caf6f45dfdb"): true, - common.HexToHash("0x1e879e7438fce2e7fda120f05deb6abcfc38c8f70591b7f5282b3e3100a8f187"): true, - common.HexToHash("0x78105d1b7685e2475888cc256e3895ecf6ec8f29930a3d17376066495677eff8"): true, - common.HexToHash("0xcd6275b5a31520dd0fb36f215d0aa5e6c29256276500e3464634f69c600ba401"): true, - common.HexToHash("0x3b1c697b116da48f2f3e633a3f2a1779a55a1b468f8dff38f50f62b58a0871a7"): true, - common.HexToHash("0x8171a7982be0fe80d5c133e28f23e11ae5ee66a2bb34261b34670642f8920867"): true, - common.HexToHash("0x9cfeae741a80b83a058f679398660c43eb4134ccbfdd3fb42dd3fc5414faf51b"): true, - common.HexToHash("0xca3b60b2a771e7dd2dd345ffd91a1d69ede9c7eda214e057d04c64fc633544f5"): true, - common.HexToHash("0x29eacb03f471569328a5f4435f81a4c8fb08b1e28020dad6ec82367a2ce995d7"): true, - common.HexToHash("0x22f682992e9a59c689af2dfc69784ae972fb0f0b3eb5d3ee651889509433c68e"): true, - common.HexToHash("0x9ca33eb50f2fc6ef4182ce5fd179bc94c24e9cc02a24a7914635d7ecafbbb8af"): true, - common.HexToHash("0x3e7cdcf250c20a9c9fdcca2e9fc09829bd1bcc01054802042eeb200c31d43d5e"): true, - common.HexToHash("0xeed266d701db6a5c40aa6c2e993de8d5ab6aaf0ff028cded8117dca758b8ac27"): true, - common.HexToHash("0xcea855b1d37ed6b370b70426961f0516dadb63c01d7d1bf546b93765f30d7019"): true, - common.HexToHash("0x913a1c1b3d88d13b0dda377ec0c965f4c9adcc9476d38dec7bef476def74df2d"): true, - common.HexToHash("0xf6481924f53933f128e2d058f40a064cbc3d2f08b54fd9564b21e94132ea59ba"): true, - common.HexToHash("0xf1c10be67c165a47f89f19a25bd4bd64741b5887151c8bab332c930eec3f3478"): true, - common.HexToHash("0xd1cc831381d86c8acd6b510c70ac68d8fd9d082aad053f8c352f68a8a56e402e"): true, - common.HexToHash("0xe55ba7df258d2905b9517b0af46adce462819beb99edc8ff93398e7c1482b7a8"): true, - common.HexToHash("0x1e56e6a56b6b636f15cdd32eb41d97dfa43812f51d341c9eabdb67ab3bfb4e1d"): true, - common.HexToHash("0x7514db6a019a3b559ddcc34663f81b17886d016e76028c68e2c4952c277f2e7e"): true, - common.HexToHash("0xbc0e94093a65059486082672d0db6b00b2cc4b72f9a676ee42d7344524cd6786"): true, - common.HexToHash("0xdacccd98649ed5cec03709830802934222ad3136b4cee16e45a1e1e18596150c"): true, - common.HexToHash("0x4c61649c3c87ed1c6b82f8c6c1664a0cc820cce995d5ba5722621c9b80068806"): true, - common.HexToHash("0x912fce5633f694938985e601fac5a9d27a6749ee87b5e5d0b3618ffe2e1cdeb1"): true, - common.HexToHash("0x4da658a049ffcfbd427d828f5d4613fbf6dfa2eaae1bbacc4b8b03568f5d182c"): true, - common.HexToHash("0x32574a222410b42c4bb175726772203d716a6a2b7ea5d6c737a089688a3ae488"): true, - common.HexToHash("0x3f3ce176432401a7f5a679d4cb9379947e891827d35fc2e991136d3ffbce8b61"): true, - common.HexToHash("0x4120743bf3cc44c118b3af7b70f6f4b2562e9a61222dacb30abe04cd26476e78"): true, - common.HexToHash("0xdaf1a85e8add1637a2b656e33532eeac5a32376a050fd9f6e03ae9d8b21fdaab"): true, - common.HexToHash("0x0d164524c2a2166f4c4a96157e7550d6eb8f721d8ba48f35ea1328af211e85db"): true, - common.HexToHash("0xbc94744f6f38aaf6474c9817ca286db8faf82da2496aea5add812dc6907aa7c6"): true, - common.HexToHash("0xd26b7857623bba8d2d682b56b6740f4407276629a746f2f4577cc24f9e3367d8"): true, - common.HexToHash("0x259b1169e74797eb8dfb67df446075e8560404a3e2028e1b7e0866431b9a2217"): true, - common.HexToHash("0xae8cc4aafdfad7328b0d184f13d39ac61c179c3c9a6bcd1a056b4072b8327049"): true, - common.HexToHash("0x265b08d98d9a6c1d70c0bcf3d8a96924b2484ba309dff10276d48261acf654d2"): true, - common.HexToHash("0xe3e41948094dbd1e114355a3f12793b2ccb3dd50e250c4aa0f48f6de54cda22d"): true, - common.HexToHash("0x21a56df86a1d7a290584046948abe3547c33041e1911ef01fb16c50cf02cf507"): true, - common.HexToHash("0x82dcad6a8f6967376c5da96417b6b890eaab18b4dfa3a207803f0037e2b207e6"): true, - common.HexToHash("0x933407f590d968f14be33bae1c0baad7d6a038f567fff3e11b33ecc78e44dfa0"): true, - common.HexToHash("0xc220d49c7b6369ca1aafb4e463f483ebdb0e92440106a5d4d1240b56e4b15fd5"): true, - common.HexToHash("0x58eb4af1a521635eba8562b679d4aa5016a6c7cf425d2c1802530724347f2a6f"): true, - common.HexToHash("0x09d20b6a469182c808e76a10ce0ab0b143af3ecb2356612ca461466f988dc2b1"): true, - common.HexToHash("0xaba89e3fb9bfd143176e0b6b44b272070067b04779ee8407ec5c5145bb63c055"): true, - common.HexToHash("0x9b69399f37bcb0b45388fec74c7f3288f6e9e88bb55da13f9e876873d3e5ebbb"): true, - common.HexToHash("0xd50bc38c55ebeae94d02beff43ff0d5d499878c0f2fe25d4f27d50bebc715ddd"): true, - common.HexToHash("0x933a20689e1bab2b578d3292c6e483121657088c98ccec33649455d9540ae1fd"): true, - common.HexToHash("0x35ae988df0da5b5614a92bdfc8b18db3933a3d39857be04322f51cf5cba999c1"): true, - common.HexToHash("0xe3404f861ebcf43335ffb57fef1a8b1d19691f850ebdcd75aae26ef8e7192ed2"): true, - common.HexToHash("0x0dbd55192a971e611da5fd6ef6460944487761401bdd37d3340e14947477d385"): true, - common.HexToHash("0x641354d398c4709d5ec3f1ba503700cd31bd6f8f36ad41ac4770229073b8aa8e"): true, - common.HexToHash("0xc5b7dc0bc488ab7e5fd7963f5767a6e5857cf3960320e9f37126b3f6de2d444a"): true, - common.HexToHash("0xd6e8eb026eb85743eac886cf2963d6a006668cf9e7223a24c44631e0c9163c9b"): true, - common.HexToHash("0xa0e5910c42fa45b3cd9b7d985ce9db9befe87ed9fecf080edab6fe78f0c0defc"): true, - common.HexToHash("0x617afda45d31c2a59b3765cc4b2a580b965951aaa909eb4201a5aec35c5b2e61"): true, - common.HexToHash("0x19218b9cb9a4c32087d0d8f2e8ed6962e19369c271638107c136d1d3889b5c27"): true, - common.HexToHash("0x6a36850e60582d7eabc6c8eabdae0f4270d81e964e61dde40c0f029cc09a1d05"): true, - common.HexToHash("0xcd734e5d0bfff216a3772ccf42fc7a9fe3004c8c567235b67464deba4b28e74f"): true, - common.HexToHash("0x36f1214b705e9879929848da7ffe49e90959576aad6a0d354bcab96bc49f1077"): true, - common.HexToHash("0xc49ecc83a31e3c050f1a443f89a7f81ef4c9979b813604ee5f1306dd2b97f383"): true, - common.HexToHash("0xb921dfaac4cb35f065bd874e707104c80a7070113b4d6b22a7bfd0bf87edec9d"): true, - common.HexToHash("0x0713a6ec9bbc0268123d19ce1196ac669c819e17452503caa3b00b51b6fd116c"): true, - common.HexToHash("0xce37aa60579b4b790940f88dcf05d5eb58e4b84b956e6c5e176a3ca5a35fffe4"): true, - common.HexToHash("0x2dca233781324744deb7eea3099b2417d4c1330210af553867d7846e01a230c9"): true, - common.HexToHash("0x2ed0f0fe557e2b4445dc12ecccfb8c81acbb2b691cb767f51b056c42e6078537"): true, - common.HexToHash("0x658c9ff26e4179a57621fda683ceea033468fa1d4c8639c6511791688663240d"): true, - common.HexToHash("0x5305870febbc22974bccb2d754de393831ffce2e37ea209d1c2e90716a5a85ec"): true, - common.HexToHash("0x24cb6531a896c33ef58fc04ac53e4b192fb20b34e7837db01a7b0ea7c970321c"): true, - common.HexToHash("0x3b88fdfa1d0c7d41d150137f2cf2ad8161554f584a8cec2feaa282d79566f9d6"): true, - common.HexToHash("0xf0fab855b5904781d7382550bc9ad394d3c6dcb0be5070b7906d49a7a562a957"): true, - common.HexToHash("0x9d5a03fd19938ee20d523d7e7454a7d54224bcd682a3c3f64a8e60b88ea3bca6"): true, - common.HexToHash("0x59fcd72d40c208fc3e59e5b8722244f1936ff7523516fa918c537ec5d7dd79ac"): true, - common.HexToHash("0xd2b4bca689835dd8438b2fafac6db5a247511ea8b45cecf1bc83128798f1d0e5"): true, - common.HexToHash("0x134780860c9bc0696babdadad73b42997ef6e6d7e8ef61b9f71177474fc39c7c"): true, - common.HexToHash("0x82b11d0c545c2fbaa847ab7bbcd33d93439cfd055cad19c618337b42a7530fb2"): true, - common.HexToHash("0x1fa69b5cd0983806f684c75a30c0aaba132b583d969290074dcd49e9d05f8229"): true, - common.HexToHash("0xf0c81dedceef612808c0d41a9ad57c677090c7e3794d3e2c85cc1fd6e467e90a"): true, - common.HexToHash("0x9934c3602672ca262160dd2ae0e964df4a3e034a468a3a4001b7d02d20c3cfff"): true, - common.HexToHash("0xaafa97369c386d9e52a6a98e3669c5bbd2bd4c7db0e3297ddc967d657bd4b4ea"): true, - common.HexToHash("0xdb122fc58ddfc30dc04422d2ee7f8b041a628f5f4ef572e7518eb4951b8230a8"): true, - common.HexToHash("0x05c0438172ad17053810fdbf94bb20c247d0653a43f8c0127310eb8f35e1e720"): true, - common.HexToHash("0xec24265590d7a01fea6dd178b1ef06bd6065d2de38725dae98330f85572f8450"): true, - common.HexToHash("0xc72bf449ff3fedf9d54ee675a3d5736ce887463b43bcbbca5cad55fa33a7dd44"): true, - common.HexToHash("0x90eec7dbfee98a0130cea04baa9715d8ed722698a3a2b5f4e818713a42e39784"): true, - common.HexToHash("0x1cd88e053a08d10d81889da4a7d780d7d0a8baa1020852547e66ef45dae7f975"): true, - common.HexToHash("0x437745bf7258c9c2dbfd342b96756daaf36e795366ce283c912eb0b7850ef913"): true, - common.HexToHash("0xd3c4b832e06b864e9165a1ea995a64a14f56849edbcb156eeb9be92a574912d3"): true, - common.HexToHash("0x38f7ee1baaef3654f539bbaebbf447d913a87c26f7a211d92c315a9e6350f48e"): true, - common.HexToHash("0x5e025ad261ec5cbce8180e9651929918f800c5b37173972a2234c5dd227d22e1"): true, - common.HexToHash("0x2123ca872704278b4b08ead560876e294d82ee0332947f02ddfeb61f76f14dca"): true, - common.HexToHash("0x689675b2faee9ab4e116b1115f1f241adf21a05e13049dfaa6c5e066c8f36914"): true, - common.HexToHash("0xec409a8f2ed4c1c1779fdb434185b937b022e2c981c64f60b63cd41e4f9e7186"): true, - common.HexToHash("0x29db9b4f5ed2d467efbe6c244df44b6e9ab3a1e0d343f5a02c11253ac0ba2cde"): true, - common.HexToHash("0x2bcc3ecf798efdf86c9451adf16700807a9bb1066ffad77845e9e7623ae4f9ff"): true, - common.HexToHash("0x99d5a72229d5eeb3183f50685fdd438e855ce9b43d3abedd06efce85ee7332f2"): true, - common.HexToHash("0x275883cc76c6a875071bf603b128af454fa9b85ab461ae6168908268bb506c1e"): true, - common.HexToHash("0x8f83beac78647def8bc71c83daf201a800b24b0c0dc4c85c151d5fe1532982f1"): true, - common.HexToHash("0xca454cdb66dddf1a88f330716ead654aee0e423e7f467ff9975c5ceb81463605"): true, - common.HexToHash("0x1425a51e6c32f4ac04765998e737e441a2be260b1d208afa538c459e3229c708"): true, - common.HexToHash("0x953f74d53d928aca9ae24f4ef1aa537b87c22c94db3f62e40796c5d22c5243cf"): true, - common.HexToHash("0x1cbc8508fc076aad7743c811b5e04903389eda161da9e0a83940147dfd6a425d"): true, - common.HexToHash("0x16022191259999e56a25af78c2b51ebb7d5744c4333a6cb5187fedb16928fd04"): true, - common.HexToHash("0x7162d13c13c2fdbe2c4caeee80737a9a139139397e224278b8aa4af916faa214"): true, - common.HexToHash("0xd195d89e9ffa989e7b708cc386dff9d8d25b5173b281de6c7fd9dba93895c970"): true, - common.HexToHash("0xcd0e50f7bdccac1a7dba9a84b24932c6d3a1ce0015f9bd69f13bf769d69df627"): true, - common.HexToHash("0x8895a12c9b4c96199d1e13d6a486bb8e84b163afdb7cffb85112c70ed54784a0"): true, - common.HexToHash("0x371fedf903ede123bb9d7bf9c159c561cbf2db35f68c8fa1f98ebb311148ae8a"): true, - common.HexToHash("0x5a91f3c4aec03657e0866f1ada7fdfba1aba5cf0bfcaf52b49f3957f27a818c1"): true, - common.HexToHash("0xf437eef0c694e18bd07600d8f7fb65ff6a350d908644c2f084143356728846a8"): true, - common.HexToHash("0xb8e0bc736e907c06aef9c00253a32f4529049db581a9dafe0dde2821fbb51e45"): true, - common.HexToHash("0x8754f223eae202ac9816dbc24a9c77016e26623e5cdf101a5a8b8b6cc687976f"): true, - common.HexToHash("0x7478ef31e2ab2b94841aa432bd3043c3855ee667c06e7a30d62182a323539127"): true, - common.HexToHash("0x2c732e4bcef4283ac021b91f3d0726f5bbb472f189d09235b8cc7ef737c075c3"): true, - common.HexToHash("0xd70761cd55090b6fd8d80bfc0e9543f0f3ce21da4e91d91d75dbfae1ce77fb34"): true, - common.HexToHash("0xbcc27b0af0de9c58fdd238be64740c07622c167f4a1aadb6ebc8f7b25b04023d"): true, - common.HexToHash("0x8987b81c3b67397f903a14211ef2cc32f512fe43e9b2e5d3145e6008586b9759"): true, - common.HexToHash("0xe01e5b381e5b73e73a4aeffb56af2f6fddaad4855992e38c564976b44a97ed4d"): true, - common.HexToHash("0xcfb13c569db66ccfa7a7308b5e6f333d23f0313853e5200b997fa4222dd1f76c"): true, - common.HexToHash("0xacc1a20b1d26b2bd5de3dead295b1da5d6350523b7a73fef50a50d168734b2d5"): true, - common.HexToHash("0x8f8f40daa5564962059e3debeab61469f8d966bab49eba05174610f3f72e9b6c"): true, - common.HexToHash("0x785a6c77881ac804e9386fbff1c85ac081fae6b7324454c43160c051926d0d9c"): true, - common.HexToHash("0xdb7422b9b92ba0e39c0f09d6c154ae488597586f6f2c6bbd7b50144bc1359966"): true, - common.HexToHash("0xdbf65aa5106d6aebe81af57f47bf46f582c2421425cfc066103a20131005e18d"): true, - common.HexToHash("0x1c39522893670be78139bb1cca6f27a2eca25f8dcd187b437c7476e0cd8a39cb"): true, - common.HexToHash("0x84ce809baddde21b63f676e76a36b2f9fe9164c9f31cb25c7421ac6825462512"): true, - common.HexToHash("0xd172787c645d00d101bc5103f43ce327159ee744579acaeb816e9f26374cde7c"): true, - common.HexToHash("0x9ae190ba48e7dca56d04e4ca038150f92946834345312c45dbc174622ee8b1aa"): true, - common.HexToHash("0x5a3da3cb27b3709766e3201d0b5c1271a6c9ad9180ae56763e7912dd6814efcd"): true, - common.HexToHash("0x56bac7dcbb55c5e5ae8aa0df5966b1ed797019f33e7f95bcf0d087b658197ace"): true, - common.HexToHash("0xc8654fa1ba2728170afbc9d9b0d3a10114885b7a70e132fcdf76c207408de60f"): true, - common.HexToHash("0x735314b36d38674320c5e9eeac95211b142f4eb052f15de62489b16fd3f58b7b"): true, - common.HexToHash("0x606d05aa218a3a4eade06ecb3e2b23d6d0a35d51aa8781c9cdb09febbc8fa938"): true, - common.HexToHash("0xc31cb63218bf059cee47fac6f30ab6ed8a547d4c686f4297266da8972c2379e2"): true, - common.HexToHash("0x7d8cc03c0d9c65d179a80300cf8b7e9ff8b9dd2a1fc34137ee4353189de24372"): true, - common.HexToHash("0x8b84bdcf0e4956b2a458a31c3547a0b4b42f30077e1ce16f3b9b32fd5959bf52"): true, - common.HexToHash("0xdb22530ddd87fb453011dc1aad3e9a929fcce156d2d0be696e09b216a0cb58c8"): true, - common.HexToHash("0x0e128d97369b36d16058ee36f7a0a6045f8d4a05181098b777716c2731ba6edf"): true, - common.HexToHash("0xce465461721e91a263d250d0bbcdd57138b31866f6a00784bba93df8846ecdc0"): true, - common.HexToHash("0x5dead4612e24cb1d48e2787c92ea859e2948d40d185758d66ceb0f17a175f037"): true, - common.HexToHash("0x5d41bfc9aeb16a993d882142a1b4b0a9ce9090a9c843ded08c59df9ad88d5fd6"): true, - common.HexToHash("0x82449705a363a5d57f5c9ad36e31f4d8f7a0dc7a81e5bd911af375d7a4b5eefa"): true, - common.HexToHash("0x252bd9c01d3dad645a5533fb8f272a39d0bcc05b5255962924497ca0f0b038d2"): true, - common.HexToHash("0x91ed9b098f26ac74018e506dc722f6783cee62745c9a4d8bb810c68b7fff6f20"): true, - common.HexToHash("0x64b6290747858793fe6fdf52caf58a4535cdf885d340ab404efef4bb752e9c67"): true, - common.HexToHash("0x1cff9fdd15f99c1224d50633d1a7c6d5329803e19c05788de655b2ec9413289c"): true, - common.HexToHash("0x9e76f6562992812a301d4126860f04d2c7c8d0e3b1d4808880ceff00544072db"): true, - common.HexToHash("0x212c318716b45b2f4604b7646c5bc9078d6455d0f2df4a32ff4ba8b78a5bac4a"): true, - common.HexToHash("0x54ea6d99373c2b899dbc8a38fc09b3b90218ce056350000c4aa691254b5dc8f4"): true, - common.HexToHash("0xe6a89c4b67c147534ed6899645aed97e5d2dee1babdcb0af6a84391998314df4"): true, - common.HexToHash("0x9180c4be04d64740ccbd9b471446226c3ffa3ef6e7f35032af927e0579874c1e"): true, - common.HexToHash("0xf96e64c46ae849fb0a065399425073d8309d83b8a3a9626581ec1da647c03c12"): true, - common.HexToHash("0x3b21e334a93c707136b9957bedbc71191131b86cf516ee9e1944844d2370f0dc"): true, - common.HexToHash("0xfbe464df55b1304eb5e97fba463d85363c2b413544566cde7fded5a2b1f47ab7"): true, - common.HexToHash("0x9a4782c99eb1635e6286c757958e2bc2c8896dbbc8e637d8d46e9017a7e1f3d2"): true, - common.HexToHash("0x452b19abb1f3c004860637cd0706de5200decab97902893a7ea6043a02cac365"): true, - common.HexToHash("0x07bb85b6c830c4e8f8a1f0ffc5253a5e42e91e6ca2f1bbcf8ee61c1268eab72f"): true, - common.HexToHash("0xea4d6648ba45a1062862f4956a9c34f3bab5f4c09af701708e4afdc9de5dec38"): true, - common.HexToHash("0x2472e9a14a165a140df820e44ce4aa79d7de72b0a191646efce313569eb6e281"): true, - common.HexToHash("0xe8468330dcd661b24841869c072f01d4b82ea224fe6ce27e81a67b814b7212ab"): true, - common.HexToHash("0x89876ed74645ce5c762a64e8ca2ef77560f769f58d25decc968aabd58edbbdc0"): true, - common.HexToHash("0xec958a8e4fa973b2b3efb5187436538ad6becc14d6b472331a63e5524c29706a"): true, - common.HexToHash("0x572a2c37e74af273c161243383c4ef85179939b7e0d1afca4108826217611bf9"): true, - common.HexToHash("0xdd53491be2b5e120b26a2d63fa3487c5ab8f4057d547ca72f7e69fb59044ccb5"): true, - common.HexToHash("0xb7e2608746f213b84efd551844df81439dea385fa10174d9fe547d9414e7e206"): true, - common.HexToHash("0xab26fb81c6d11ca84aee9bb264df389a3e537f37ad427a06144288c82e6e1080"): true, - common.HexToHash("0x7e908af301e44d76383a2f6ec8ae77c3e7a18b1c6117391c3679624a516677d0"): true, - common.HexToHash("0x7cd6043eb8377ba76e5d1f0174d854d5a9d06361bc2fcee449d1f1acdf01b9a8"): true, - common.HexToHash("0x0c83b0d5b7b2f7ec95f11119bf9d54ce7a08cc7bed8e52e46549d639f01f5748"): true, - common.HexToHash("0x2cc024656802593ad7721ca4f381581906d358602a64ce7f1d0c42cec2aec873"): true, - common.HexToHash("0x3b2f43ba0afa9b961ce0fff21bd142d214f0d4f1bc24645ea18d2a4c57b7ac3c"): true, - common.HexToHash("0x06d05b674d02a9935240b2b15883be74a8f58453f0f363f50aaac478034114b0"): true, - common.HexToHash("0x76430b0e4dc5e57683556b1ad1af11a37d6307632359a4351993e9e4f75ca572"): true, - common.HexToHash("0x99468052aadb7e9d0a4105635dc86313ea9db412156ff9cf62057367da58b65c"): true, - common.HexToHash("0xfd1f5e076f7dff42458344ec17db1a2c2484bcff16e16d54f1ae3b43f449a4f6"): true, - common.HexToHash("0xd7a64577923d48dbeaa4011b425ca157cbd4fff6ae20fe91de9dea56245382c1"): true, - common.HexToHash("0x9f7dc94ec23e3655d0ac2a5915f7a0e9a071f1d3d65923bc938cd8cce055639b"): true, - common.HexToHash("0xf8e5c507c693c9c5eed719964f25cff818d30ecc51c0f6e46ab40226be402173"): true, - common.HexToHash("0x7334bce119448f20ab5b158f393f88759557bedf14f56f0e73381cdabe86ce00"): true, - common.HexToHash("0x10980dd50e11e2afc18d8a5d590216f696becfbabf35e2f4315463eadf5566cf"): true, - common.HexToHash("0x7f7814618d46968d598e44a1db07e1ba9afb6f60b78c1c5735338e1c1752064f"): true, - common.HexToHash("0x2405f0390e768b3baffeb305df4cc4b588245b2b30e02a39d122f8ae7054988d"): true, - common.HexToHash("0xa4385bb8cde172f588ff8707c1cfeeb6d09a824c1a6919fe1d6b41ee3edfc5bf"): true, - common.HexToHash("0xe4eda79abac61c9dc300bb37d5ed61d127dff02626bfdea5b96b42ed57adf0f3"): true, - common.HexToHash("0xccd2614f95a607e0fe2cd7ebd5ae0933559dac463d723f46f34635444d4e0c95"): true, - common.HexToHash("0x479eed95c89a80c914b02b65bb73926e1d501b5bed829559a2890fa2eae7f745"): true, - common.HexToHash("0x674729b10e97a371b3e2000a673405a063d49b3d3848de0b7c3622f0ae28d1e4"): true, - common.HexToHash("0x8ea0aa200da9e90adb96d904160ff9737d4d186593553a84a1013959a03c43c8"): true, - common.HexToHash("0x41b9289565070028a7ce3e118910160685a98a9f034c6e55122d9fe177a96c76"): true, - common.HexToHash("0xcb09cb2e60ec19dce2270d4a2a1df16323850e2813dad9da1d75d7f72d5a4dfd"): true, - common.HexToHash("0x3a5cb598b78aedb4268bc5c19e45733253d2166bd0f499e6ba7e4c973b1b90fd"): true, - common.HexToHash("0x55ee6e584326cac4f7749edaf2a76e6ce4d205aa6e048a7e6efc446a382f2396"): true, - common.HexToHash("0xdf76eff6323f1142a9a261e8bd35f2f357f67850363762ec69181398337eb2e2"): true, - common.HexToHash("0x27994c4c284fcaba892b49c31bc6540ff40dcd27b36431003c9f1d4fc1d3e22c"): true, - common.HexToHash("0xd0070300ace36dec7cff86d40eac5658c4c895d7ab3e8c03f3a54be4e5f635b2"): true, - common.HexToHash("0xf5684444fcd9c803cf0898a71cba740a1728f966fa561e913d6e7e6b32ebdbf9"): true, - common.HexToHash("0xf8879ef0d3c962054df4023c3155a89d46d448fdaafbac032c8d26cce7a15ff2"): true, - common.HexToHash("0xed319db44f23bb2d2b76b03127308f81b51cc0c2f4174e84edbddc8b3211df55"): true, - common.HexToHash("0x0e97223869be768e5568af002021b5ca6ec1507d48c28e17e9e6c84437432fe7"): true, - common.HexToHash("0xdec37ea426348704145a655a4edc713bee47e85d1ea4545d5e85b1983b7ca3b8"): true, - common.HexToHash("0xc61b41e5fb6e6bf2e6014fdea1ee6159b7e5aa5dad4b1d377975b536b34de9a0"): true, - common.HexToHash("0xa35a79da6a9376eb452dcccff91fabd4d833cc4a76d4f44e2b480dc3cb6fe299"): true, - common.HexToHash("0x7f91c8eb4bd99971825cf7862e0ba95b6e8989bf0dfd59c9c3bd08d97d5a3619"): true, - common.HexToHash("0x8da369c416decf5f85be8b50d157ba2ca77c8094921cab8629cac07f97e32e81"): true, - common.HexToHash("0x631c9df5da582062ef97cd800adfb4b359747579c8edff5894359bbd3c00dcf2"): true, - common.HexToHash("0x9571e49ba3306ef56ba7f9feac9c12c10add62e81356b7f6dd08fd8446b18e79"): true, - common.HexToHash("0xbdd12f3c636c981f9f547bbf5db1dc5686a9fef06bfe42986406fce758f89377"): true, - common.HexToHash("0x12782fe69787a906170f7923a8e3d7aaf8fe6f17290590eee00425528f5017ec"): true, - common.HexToHash("0xfd74c30e0a4f8f369dce6e2597f188fecf2cd6ac4087427ac0dcfb2fd3cf9707"): true, - common.HexToHash("0xecf0acebf4beafaa4b12901e739e81542a253b16b8baac9cda69c4de22009fa9"): true, - common.HexToHash("0x7f1699ace106cf3fcf2121628c1b0636846fd992c80b139438130a54312a577f"): true, - common.HexToHash("0xd944fd63365bd8be6e02b75c0602b10168d727374cd9655f0cc5726181f7bac5"): true, - common.HexToHash("0x813e427b94b28deaa6343d50a31182faad1649a1fb41e406daf23bc5e05cae2e"): true, - common.HexToHash("0xded93ba0cf958abd2305a9af9f24e21b3e665e562d604bfd7626fcfc068d8343"): true, - common.HexToHash("0x42e678754696cc92b4c966f981096cc3e6270ccf547a381433a684c5c8a8a70a"): true, - common.HexToHash("0x4fc1c3301e38f837f5a51150015b08c2318ab4778538d49474cffb4ab57b1142"): true, - common.HexToHash("0x37a733e3bd56bbd45fe6535c275499223d03b089294f0b7584bf6e0113aa7577"): true, - common.HexToHash("0xdd5a23b79d6ae71e2cf86a46e13afb5c4ef4d2e02f2fbf8325a95a43bd8ac957"): true, - common.HexToHash("0xf0f616697866a2d32a46eee44112ef74b5bd8bfc581588cb0e37aa4a6aa783d6"): true, - common.HexToHash("0xd040362426575a8580bf4205887a053c7b44865bc6cecdb8c7dbeefe8251cad1"): true, - common.HexToHash("0x8881b2cbcdf2c0a943476ed687afb8f0c37a00be2f78ca12dc55d5493ffbd354"): true, - common.HexToHash("0xc2ca96c7006f12fb09aeac35834f3290fce3c2eda8dcba5ccf20c9990a818e8d"): true, - common.HexToHash("0x3d60b1fd092f3d80f3d5295cc9b61d2a5e2a3d565a0d819f8d6222cae8c49981"): true, - common.HexToHash("0x1bf7147bdfc9aedf24237df0eee93d8bdacd1ea1304cac8c12e1f12a7d4a796e"): true, - common.HexToHash("0xd676861652f7551c5c97ec333109ea0cfc57498024ee4aa83dfe909801620607"): true, - common.HexToHash("0xfb708cf6304906cf2e8786b274d60687e1816c1425d66ac3e701201e21bc9927"): true, - common.HexToHash("0x2364e058cf069f55d99e4035cdc34065f4bcc5379b2bdda02caa322738b05873"): true, - common.HexToHash("0x3353e4581030f66d506477a988735854abca3badd49d4a363dc87b78362df0c0"): true, - common.HexToHash("0xbfe0bc2703e652d5ea857f6679c77572f09c9ef6a1c4caf4bf9e8e04d4738433"): true, - common.HexToHash("0xfac3ec3c9d0b399471b52c1dd4695d753201f5c1d8f00be55d00e2c16acb7940"): true, - common.HexToHash("0x49e9269da6ac7e3ba546c3e679cca77e5afa311751397dfc4e6d8b68ebce563c"): true, - common.HexToHash("0xf8e0178135d185e923d62bc619d83068ef160f1d18dce1dc48134045e2695353"): true, - common.HexToHash("0xf33b47ba85c60ce0a13cb3952192cfdcdcda4a4c8d11b74fc65b908efe9233f5"): true, - common.HexToHash("0x9fc6055c6cc0869dc64c56987b2d59eca10217c8b378fda4b55d6aa3619dcce2"): true, - common.HexToHash("0x60d84613bbdc484d0306326cbccd8492951b27fd5e761c4b29f76640fb730154"): true, - common.HexToHash("0xa5b04d6e1e7f7c37c75d4987c04602188d1c93b58e578fec366b102a6491aa12"): true, - common.HexToHash("0x7e9c965e830c615a21dd183cbafd555af842c97d10c5c75b2901aaaed2ea21a7"): true, - common.HexToHash("0x25a4a4dfac6326d93b63911c44a9b17dc5bd85dfa34e8af8a807733ae54e6765"): true, - common.HexToHash("0xe3a6b4bb70a7a6aed6260e46dee8ea557932ac55cd8fd13c2a27391176a7c50b"): true, - common.HexToHash("0x15b0688e079f7645d167b958da3c033c8b13b7a0609adbd6d368ed6545598168"): true, - common.HexToHash("0x50ea56acc5f84b9770dbda66a0d1e858ff7ba3cc0bb148f36c460afec97fc6c6"): true, - common.HexToHash("0xfb414c67e8f7872c08150653602fb54d39fb52a677040625a8cd941bf6da5135"): true, - common.HexToHash("0xb44b48d8e4d2c30abb39613039fe1eb706c46f746d01abdfbfe20b8c55ee5aef"): true, - common.HexToHash("0xd6b6b6a23e9b8dd83119d49a0e2553de82a63b292fa544360eea2310b8bf0c2a"): true, - common.HexToHash("0xc63aba8fe690c69bf2bb1590c003cb7d7c90507478a8a2c2d09663b6c6b15f4d"): true, - common.HexToHash("0xb7cd4ce2bd5e84db595c08930e40057eac03fa8efd82d75117b2b2c982cbe1f3"): true, - common.HexToHash("0xa855cea9791161af16f2c70ffc7751a12ddb87fad3355e5d9aeacbcbade31e30"): true, - common.HexToHash("0x714f9af8763b4ffe55de83615841630b35543d7c89aad46131fd503f877aa226"): true, - common.HexToHash("0x050cba9c161fa40c1bc24e81cbcd7f7e3a7274802aa7958ff8834180f2dbec5c"): true, - common.HexToHash("0x2cf0a91c3fbea37180c2a0d29c947b0a2aea86a60890b40ccb8b4f82ec317443"): true, - common.HexToHash("0x6f3662af04c5cdbbff62e71ec82a6ed174d3a7b84fb9d4ed76ee28456d0d3ef0"): true, - common.HexToHash("0xdd791284e88676a54a42488560c5de35cb1bfc7b83778d469df374a20113483b"): true, - common.HexToHash("0x6bf0d257f212b513e0a153ae5a8e2162522b616a7a82a934fc82ac37d14515d0"): true, - common.HexToHash("0xd36d21c4826f08dd0f9205e3c64f7088522e55a662f5a5cb19ed40d1043253d7"): true, - common.HexToHash("0x1c865bf0dcf426e7d4d44e9a77abae545e720d94b3aa498e2e0bab9ecce4617c"): true, - common.HexToHash("0xa7101550eeca33c17a9b692f3e20b9e0daf6ebfc9c7c545e3c746752be1f99b1"): true, - common.HexToHash("0x7c401687de64c560a60659c96955734b86697fb97e5be2557123cbb43b9344e7"): true, - common.HexToHash("0x0b44796bee891a66044eee8064e3e801129c039e8213e65276f4374ac81c3fc8"): true, - common.HexToHash("0x4560dc3bf6406a0e836477a81f94b5f59a4319619c6a28c018e8cd0827ccf4b6"): true, - common.HexToHash("0x9c9599a3170385ebf98d9bdc2329fc1b7cf8f794a14b1c2ff709d4fb1c0b09c9"): true, - common.HexToHash("0x561f8f9e331c3654e17907aa3b898cb2c626418b2c59c934c7164e5da5001ee1"): true, - common.HexToHash("0xfcb1bd83620a3a97c19ef126a2c5a28baa071b7f159f8e33a23b5f737726a082"): true, - common.HexToHash("0xdafee1b804b8a943ae014802d3cfda3b514119776024d3ad44ec169660679cc7"): true, - common.HexToHash("0x7f8e5a3db5e69e6d1966e24401ac56382427a4cadbcd6be4201db72971c59270"): true, - common.HexToHash("0xeddd5c36a328e487d49c1c87656155a35252e48e94da0f4a81d0e2f76a79fcd8"): true, - common.HexToHash("0xdd365ce6de86fdcf2f2d0c934ff806e4b6813c05d1317920b7c690ae4c2eb883"): true, - common.HexToHash("0x7014f0a7518dc9aaf1c5eb464401877e41d4095e87aed41561e20c3531b3fe70"): true, - common.HexToHash("0x251f5b3c5ba68f44064de88361c13c3eae8ba633604d6fc31245adaa856df8ce"): true, - common.HexToHash("0x21a18e94d402eadac39ed717f5cccfbe5df3a25324c4edd880917f8ca6c35fa8"): true, - common.HexToHash("0x1944953fa60bef7874e1a94414f6b6b39425f20df285f65b999bf1aab5ae3d23"): true, - common.HexToHash("0x551590420c6240f66458e502e49666bb63c40cf9127ce28662d730fd9d176447"): true, - common.HexToHash("0x0d5c64f2e0fd6216f54c5aa7282e0f08b2236977a4d06dbf8992848a815768ec"): true, - common.HexToHash("0xd569d9472a84eb39809c4daf9ca43cddfdc08077b8775ffc727dd110108c503b"): true, - common.HexToHash("0x228c93b2f1de9a45f109e323cdf2a5864d4967e21700fa02feb34c6a9b6adb96"): true, - common.HexToHash("0x1713e6ad0eb91b2ed8690e6784968f9e9938b5f80ca6ffd0225fb54c4c53a0e9"): true, - common.HexToHash("0xcf3881da579dfd0156484d6c11b72b2ecfe698601b1f1cdba37b442ca9e4010e"): true, - common.HexToHash("0x0a4a4ee81a26278a8b5d114766aba2ec8c9cd935a3b1d1665bfd6e8e187f9383"): true, - common.HexToHash("0x28a4611c78dcd0e0670b15a4ba7a2607addf06d69ee0baedb2b0362bf30af42d"): true, - common.HexToHash("0x1076eabf88204be8d6e751225326ce8cf3aa57fb3d73da3eb39e25f59891f90f"): true, - common.HexToHash("0x5d3ca4d17157e379f5893d0f81c99a9268cef833b911a9ed83dad80e74be2fff"): true, - common.HexToHash("0xda04af8433f21e728134277e43a1d915a2c002091396d4d802bf3b75c1f63ef0"): true, - common.HexToHash("0xb4ce451d3448c237f37ecf19c0e56a9cf9be65a5226022ea504aca38c7dc5c57"): true, - common.HexToHash("0xdf393aeb955872e8f7546a73e60a8a82aa1524ff0164cccf39c9c485550456e0"): true, - common.HexToHash("0xdbe8273bcc62a4f15a4ca2f606ad50b32f03318b892103b31bba18f227c91c97"): true, - common.HexToHash("0xde7c4500bddeddbd936dbce3cceb4ae425aa582c755af53c466438ce1873697d"): true, - common.HexToHash("0x2e7d43b3b0a6e0a07888614396f35d0a9749ab15649d282d87f78598eed9c70c"): true, - common.HexToHash("0x1a2fd7720e92678b63f92bb8ab400540f4dc85b127226868edf359c60f9cca4a"): true, - common.HexToHash("0xb653d83b6df8551efe41077d8092a8a3b7c6aa496a7026a27cd60c644fc54222"): true, - common.HexToHash("0x6f24ae55644d137cf757aa7c887e6f64237e8d9e9c32df35087d42b3d0d82ff6"): true, - common.HexToHash("0x364008b90dcd6d1ac3786a616e2bcff321c174d7a9a95c93d9b3e940dd2eeb16"): true, - common.HexToHash("0xcec9e2ecba446dd42d626495eabadbcbe2bb4fe611db0ade3f5bb677b951b3c4"): true, - common.HexToHash("0xfc665cd13dcffa213db168dd7fc60e5af057c9ed4b52440b091d547d7fc40031"): true, - common.HexToHash("0xd08852f2a8477b5ef7fa2d81badfd7df9661b53fe2fcf17db16d31e1b27cc587"): true, - common.HexToHash("0xa3390fbf7b2acb0af641c9809388a30b2bac5a04939b8876109418ed8c3562de"): true, - common.HexToHash("0xe40ec778c27f44802ab100cc1e17698f4dfe1cd421a7bd55dc691e5270193fb2"): true, - common.HexToHash("0x71f2a449254dd233db3242f093303e8e69e5322e1e4917e38a79cffc7259400b"): true, - common.HexToHash("0x1196acaf86d0e358899d842b524c9b5b50f9d4ddd3f8a3fc84c7442ea36f8134"): true, - common.HexToHash("0xf2111628c9307b33d1942a1360dac769091ad1ffc9ad9ffc1abcac3c369d4d41"): true, - common.HexToHash("0xfc486f163d375a8d3791424b41398f1a50a221fddad4711ad6278807ef728df6"): true, - common.HexToHash("0xfae525d74b79e0cf4e5dc539b338ce19d6608119f3691dc0bbeef23d90e2c2f5"): true, - common.HexToHash("0x0b52da5a1be4fc2b721e492e45052d7a5ef590225b8dbae57e1ecba6890a33dc"): true, - common.HexToHash("0x54ab76d182eb39b8a0020afba8c50e48f97b6a564875d608f1604a87e36cb29a"): true, - common.HexToHash("0xa8dd1e56e4c3d801ae06ecb1fa8b57a41c6cf6ff6406464bd2e3b89fd43e8e20"): true, - common.HexToHash("0x8ab6f73790d0434623e7a084edb566b04d3da2e0d669ef475ff4ad04ac9fae68"): true, - common.HexToHash("0xad67be369c2398c73e7a8be436e20d95076033d548e1c0b19a07695f60776d4f"): true, - common.HexToHash("0x1b0a0debfb24ad8687e461b79a47cb37cbf1ecc1748ec5d48957e847e73c142c"): true, - common.HexToHash("0xf34c9be605c4113794c863445ca44ec350c29b87d90c54b80af66a84d390d442"): true, - common.HexToHash("0xf27b961f3b3ca46a1f8ee6df28c09def8b95bc44a7e99bc5402d6b8123a791b4"): true, - common.HexToHash("0x441f53b38fd74060573540de5bb036d3041a843c75af3c6eb94522aadd92e177"): true, - common.HexToHash("0xdfa790b856e906c85c010ea52c98946feb199dd78b5459db733f766a59d66fa3"): true, - common.HexToHash("0x680d53c6e61e48f7224ac26ef220a25cc530ce03acd02f1aeee9c60c89a7eeb4"): true, - common.HexToHash("0xb4f458aab610ebcba07243a3f32303579e12b422ad53f2a7e30e02f28a3e7c3c"): true, - common.HexToHash("0xc4770dcf409ecfff2ad2e2f19cd5e44f71b479c161b732d0206b3a27fc555536"): true, - common.HexToHash("0x6ff8bfca9739d6e6226d71e2e7410d91f074331ae127fd7491467b03a9e40967"): true, - common.HexToHash("0xcaf812ea4aa963d02ef04159dd5953b44aa506637cfdfe4f18703028a862e037"): true, - common.HexToHash("0xedf8ca74dc4c2a6d68d918b5e78be0b2b01b407441207ea32a39bd4ab8aa9bb4"): true, - common.HexToHash("0x48f53329415c02a57c9a7299ba16864d028bc57890b22e3166404abb6dee36af"): true, - common.HexToHash("0xb2497f985370f44ea97e4e716d69d2fb16282ee38497b6874742c73eeaed91a6"): true, - common.HexToHash("0x4a932880f82112b0fc13d8b7961b3839a5037b9154635ec810d6eb8953498af2"): true, - common.HexToHash("0x1424db46bd2cd1b56c3f5a7d394ab9ed507b8237982ecf9cf2adc190a49032bf"): true, - common.HexToHash("0x6e0896c81548ed522908037e90a17d3292ebb2beedbe629a106d7b6c4b5b98e7"): true, - common.HexToHash("0xf772fc373708591d7a9f3387ae381b42dfbf319c436d98aea1273e693a17e3f5"): true, - common.HexToHash("0x6ba17eed249c7e90577b5648373c0ea455f43a674f7d3c861a30c503df1d8c2d"): true, - common.HexToHash("0x35e9a51e3d2c78884b214ad31f2cc32678a3c83ef5bd540e86d0c6618bb5b448"): true, - common.HexToHash("0x0b732bcf8279d14c12c98eb7e575222ca9310dbeca221016636b5255d2065096"): true, - common.HexToHash("0x79d6779edabcd21442e02110994a8f0e1cd0567e0d8b76f4614688c956acc3e2"): true, - common.HexToHash("0x7af48bfff7f18590c5806726fda8e9471929bd36ff39885e94250b888b1fcac0"): true, - common.HexToHash("0xe63518bc0417c7ad991c6748ee26fca0b0d854f3712779985b9f7fdd34a7c74c"): true, - common.HexToHash("0x9410e69c392decb526d8bdcbf9780a493621e107a058a384995285c2feceea9a"): true, - common.HexToHash("0x04e4dea03f3a9f7d04b606c5169968deef955c609176a7910a8ce4a6a9db60b7"): true, - common.HexToHash("0x0ab188651e3a97bc112f62d2f753a3fc9bdf5514376000882efc780f5a22b709"): true, - common.HexToHash("0xe263eddb6c5d33a7c3c1f227d03fdde6b24d66fc37b4db9221a07a2bc2c3670e"): true, - common.HexToHash("0x85348548cdcbf130479755658669f9624fa51098137b7764174cc8db9b531934"): true, - common.HexToHash("0x5521c4eaf1d234302e9005fc8143553a50b0fdc10e4c8362770fa666ab1fdf25"): true, - common.HexToHash("0x0b14a5035fed90e08312ac897dfd6ddaeaa5136cd55ef000c30fedd95d48f8f2"): true, - common.HexToHash("0x1ce2ecf9bebec8551e01c86dc8693f6fa8f1f9abceb4f6d4f711f955e09a4b27"): true, - common.HexToHash("0x5f139b30b33e4810ff43850c3b7d3102a32011d1b6f01dea6dce2063a869b3e0"): true, - common.HexToHash("0x995f489ee8a3407846ea43c6526e958e61431bbae818c4477530e61f2b2479dd"): true, - common.HexToHash("0x000bb252c64b0eb425282ae98869b2b7b16c5b3946af831ee4e59f0a2eb510f3"): true, - common.HexToHash("0xe2d1279ab58c140c0d8a9a255e60f5338940699a512a3bc43faf0a2fdfc328e7"): true, - common.HexToHash("0x6a28961c7ff8c30b8e936b26dfbf87c31a6701d95bd60162e068674f12be2d68"): true, - common.HexToHash("0x165a07af3e083c1c4eb664667420eba1eb854739e9fc04252123952bdee39d09"): true, - common.HexToHash("0x4169ba16a517de90940276ace656eb6d5139d11e09c0254c308a1c1c85de04fa"): true, - common.HexToHash("0x562f00dbe96e159a7596b395deb4aaf14128f8fba91322ead77271374b9602b2"): true, - common.HexToHash("0xabdbd293ffed707e552cf877b147d96f94a416811483cbff4e00adc0dbcb4fa3"): true, - common.HexToHash("0xe744e1eba80627ff3a74c95bed74bf9515d55eab2ba3de5e0d8d89c2b6ad2907"): true, - common.HexToHash("0x9ed315b6659a86f0954cd7a970bac1ec92129919744ef3b7584e673ed3cf8232"): true, - common.HexToHash("0xc0e696ccd02de24fc9ccf8ecee3e48ce16143c27d4d504bbcf0a6f53dd316551"): true, - common.HexToHash("0xada7b81b63c0ba6ff73b2ca37bdb9de723cb9633ad107deaf45f2a6d2ce9d8be"): true, - common.HexToHash("0xce3f2975fea79987ee951fad156628c4c6d7b20b2792f79dbfecd7959a8c6198"): true, - common.HexToHash("0x6eb5ec1a604b2b2faace03dd889b2b7cc6bc580611a1afb8b72a2cec4ab04751"): true, - common.HexToHash("0xd020212e5b2685af635e1bc827c0f9e45e7a900011b1d7f84dc2506baf11811f"): true, - common.HexToHash("0xe0686312b2efeed70f6d33facce4fb41c1240b75b1d983ca74d12e1fd072a870"): true, - common.HexToHash("0xe6c26e3827635233ff876e3fd777fa77aeb0895a3360f83d7ed2b51060bc7874"): true, - common.HexToHash("0xec6b95c6ca0b33e3376b334722bd4d8f7afa3899d01fd2821d9eee79557380d5"): true, - common.HexToHash("0x8be0b63e85a745c1cb341b1dd451d4e24bcfb68849d27d6a39d9a7feb7979523"): true, - common.HexToHash("0x06b73c05cab076fd2cacfff5cba726227abb5eb607a3235c27aabbcd9fa536a7"): true, - common.HexToHash("0x051c5e849c797a835fbe4c81e24367be116fd4c9e41a30e5883a429e965afea0"): true, - common.HexToHash("0xeb8d876797dead5f48afc4a897cc2a9dede5b859d26881d933edf08e89b552b8"): true, - common.HexToHash("0xbe50371ed809ad0156095619a1c03391cd19f804a36b27becd23ffdb1ffc1255"): true, - common.HexToHash("0x7ab9cfca237c6cf8d39294d96dc7d46edf8f5990a73dbb8ca3c6323fa3f9d5d1"): true, - common.HexToHash("0x4246e22a2d2062a92a48893e9532bb1eeed20c206b3fc15af16a3aa68dd9b447"): true, - common.HexToHash("0xbce43e3bcfe79082d9202f363a0cc35257dbfcae1ba0dd674263dcb9a70fdd40"): true, - common.HexToHash("0x5f8a10f62f96ad999f495d0f3a97346f7b5f6643531bbcf906acde8e045ae469"): true, - common.HexToHash("0xb79c7c8d09ddf5c438271e2e8dd44e21575ac3e59da55bb54c28ca595c2247a6"): true, - common.HexToHash("0x3c8ec95f4877ca7326863ca4f6102510838b1ca460de197f3c60d06ce5521698"): true, - common.HexToHash("0x35acb3b869ba7bfa2dcb3f3e94840f3062cb87f86b7e607dfb6e141162625d17"): true, - common.HexToHash("0xb8c02393785e6a60a1bdf170e66bab44d067a875c2273bb23425187afb0f62b8"): true, - common.HexToHash("0x08a85c3300bbf0c7a3d077946e8c1967190567a90e4eae57af594e638945c460"): true, - common.HexToHash("0x3fc80e38e40b952a4f0830a1eea25338919a007089bb89c129ae1074ef832b8b"): true, - common.HexToHash("0x895ddfb73aa9d567dfbbe22daae08e9ba9eaa3968370a901cea1bb5e4342e595"): true, - common.HexToHash("0x91257cf9932f7b9d653ec5ef03b7a61e1745b219cd647149f75aff7938364103"): true, - common.HexToHash("0xe07182cbe32779f1948557d827b58b38de5f35c1854cff066549287f4c11acb0"): true, - common.HexToHash("0x75f29c2429d89dce37be5e1b090557cbea25e8c6678a2701080a36adb41f1bd2"): true, - common.HexToHash("0x215989b4164155a08ebfb33bfe6d8646dc6886cea4aa8ee6c69ca8eeca5c58f7"): true, - common.HexToHash("0x5b43d3913395d8bec6558bdd90f1eb78b4ce7a1b4233c6f327589068312bba64"): true, - common.HexToHash("0x61a2c5faf0e3a88f02be44f2bc40b5f4d5fc522c754ce7619de041ba6095579e"): true, - common.HexToHash("0x07ed8f78c3df10d4f5f96c6c4e01e556355401ec0660b2c86a805e5ac453a25c"): true, - common.HexToHash("0x1d42ada0068e7d20cfabecdb3b2fa7da2ff0ae780f9c26899845022dc07ec728"): true, - common.HexToHash("0xc71d692560dcb16e652c2d949c6bce903b44490f815d5202d4192578c0a7518b"): true, - common.HexToHash("0xf1532a1944db7351c94b6d57d98e5d53ddc89c66e08a9370f1b16e90c147639b"): true, - common.HexToHash("0x14f5dd50aa30ebc6b453fc5a8d23090bd242b8a2f2a173758e4e0d1e0358bd1c"): true, - common.HexToHash("0xa40e4e9ffa1e1c0d51cc6a716654e6c18a1c606629d14bf2e254ed16f464e317"): true, - common.HexToHash("0x0a708cae0d19d8fae60e17f6757e9bb7900247f4824ec76ad096dc30d3360def"): true, - common.HexToHash("0xa6f0679b1c4b38f114ba55ac0a5ad0fb99db60a9effd4931b420f264ad20534e"): true, - common.HexToHash("0x3540449cb9bddab9f3e6b4d1d511f9c24ea952ed8ee6ab8450459d938fa50510"): true, - common.HexToHash("0x343418128e04b53be7bfb50614189310cb52d4b14d57720d99e1ea2148cfac6c"): true, - common.HexToHash("0x1991ec88a270b22a0f231eb2cf9a423a5a8f91cb0bfb909cfffe553dfc37254d"): true, - common.HexToHash("0xa032558872632aa884c6b9d1a0b5a3714190a969716b38ca8da2fdfdd66620d9"): true, - common.HexToHash("0x535f2eb56470c2553b7c2fd5fe996ef4c62d99b48706b55c8c60f22e9f6ba81c"): true, - common.HexToHash("0x4cf70b817d8f9784fa654aa4e8b9d6aff62c2d9a6ce2486b493669bda8563861"): true, - common.HexToHash("0x1d970925befe85d3625a35fd7ede2ad88123c0fecaff576cf9d6101355aaa299"): true, - common.HexToHash("0xea3ea3b23a8dc3bb6bb8837d2501858f2d4aa455b0a1b6835a28e646f0c7d272"): true, - common.HexToHash("0x0b4402f52eed0ee9f5a36839be0bccb9dc4c69a7338c8957ddcd4704bcfcc63a"): true, - common.HexToHash("0xa773492772ed2d76717e6d21e9cc91cdc966bc264f694adb0a678d67957f9d56"): true, - common.HexToHash("0x4d885b69a7e25a1817c6479a2fb4882d12ab9af0e3c0b610609aaafcab22c27d"): true, - common.HexToHash("0xcffc86905f42a08a13dacee8445b0e2fd01fdd1b9bc027e7275d8b675722fba8"): true, - common.HexToHash("0x2f6b5538eafb95b557ebd9c84ca5f83cba364aacc960525cc02052572cb51bc1"): true, - common.HexToHash("0x4049f0e9123e804601941f5042301a9c4e8307da8a2b08c8fd5e002fdea48937"): true, - common.HexToHash("0xe0c856771d01b38d590d445c3b6b900d87bdc6e1bc74a0c028fe53ccce0e70e4"): true, - common.HexToHash("0x61d3333fb30816d6d66bc7b7efc1bb46be6b192a6ceffa5555827f411a3a8be7"): true, - common.HexToHash("0x6b39d9b9488a6239bf5b521aba33eeff8eba00f505381659722ca1bf23314894"): true, - common.HexToHash("0x0f501a470a1f37a15ec4b39b2883aaa182e7dfa840c7505620a5326a82425b7c"): true, - common.HexToHash("0x033942433632ab1c7c5c3b03526fed4107743855bcfb6ee0a0f265ab6d5d94ce"): true, - common.HexToHash("0x26c2d33349bac1f2ee74505d5801bca997ef0e3f5e2093b33c7f226924dfa540"): true, - common.HexToHash("0x81c868a0270f702908a83d424322f905c5559501fb126572fb21d01051762371"): true, - common.HexToHash("0xf0a910ae2724f82d6850aee9057655d6bcb0efa7c2822467941172d8ddbeac68"): true, - common.HexToHash("0x6227ec2b4ee7f6582e2d8b5731cc47436b7faeefb424245b50f29114ba6a2893"): true, - common.HexToHash("0x84cfe05ef58f5ecc3665072ca077883e724661bf0c8c483719b31dee175e6c7d"): true, - common.HexToHash("0xf645d83262d7d5251bb4e5034759942de8769e0b09d28da22fd60b5da2097a06"): true, - common.HexToHash("0x32d6742ce648b38a0f901747ef84a3cffa5997164c4450368c51de47d6991f3a"): true, - common.HexToHash("0x891f1d9b3cfc7e20aba9c54a5e4bc102c6961b56b8b052ac52943c2c104ecadf"): true, - common.HexToHash("0xc64e20a7253cc737e11f5676c006e5d573e160e3e147db4ef7b8aaefb5c850db"): true, - common.HexToHash("0x21172019c46fb9c0d544223f67f2315feb9d2c248fc417eea8e74bf85609c2b1"): true, - common.HexToHash("0xc2797106883c488b4dcd5e7799a7498833cf6a09c4a836e3e40c63b80cb5d485"): true, - common.HexToHash("0x04acf79bd61e9b6e65931164a7c01d260603f5724a1b5a032e91878e22ed7ac3"): true, - common.HexToHash("0x35d27fe6d1e5b5c6a4020423872484fec30fec0e9362ceb507f6fc7c47a9f2ce"): true, - common.HexToHash("0x0eab957cb6bf2f07012984b4316754773e7dd87c8679f4d3f48a7d702d43f40b"): true, - common.HexToHash("0x96b7c64d03330e5bbec09384ecb8e8d6e7f14c9c6dc5d836e561c26b1526f08f"): true, - common.HexToHash("0x2a4a1d5ec7d0d38184747f857a3c7cf7defa9ee45b1546c19dd7e48432479c7a"): true, - common.HexToHash("0xf64f673dd68292975b66ab2d408f011dc2695f358d79a090dfe3f044170ecf07"): true, - common.HexToHash("0xd83525639a348b553bd80ee1c898d2f84c704700524c7f9a05ab9d9c3cb85d7a"): true, - common.HexToHash("0xdb716cac61247861d6c1583c01bba852d765598a6b176312544cfaf2d9739f0c"): true, - common.HexToHash("0x1561cf8e61d7538abe23f6462fe0a69435c749123a40d24c92ce60b877835009"): true, - common.HexToHash("0x4ada6426773f818304486e34a4bb6a1c8f65cdfd70277aa136c7188ea6442148"): true, - common.HexToHash("0xfaa74d8897c72fc6746dcf93e274eaa05b46039c84fa512c0bba15e1f410c77f"): true, - common.HexToHash("0xb0baf56dc4b3b92e69fb173c5329c0f337a5be1958cd22c69c07cd3b663a2efa"): true, - common.HexToHash("0x746644b505ba1372911c713f82bb2d8b3e71c28d1253ae6194b56b051d2389f8"): true, - common.HexToHash("0x3364bb420892cbcbebece0d04523f18fe1b7e83e3432529232bec1af64bc0df8"): true, - common.HexToHash("0x855868a75cf4961d6a2f4e0afaad7cd7b12c80bc2b6d26c5ad09b3bad13a80e8"): true, - common.HexToHash("0x1ccf8fcdfc4d91525b4160b5172c37c264e43d711f264685e27d6b589f2b96ba"): true, - common.HexToHash("0x0701654b82365f72301a88cc98104a58ed9d883c2c04a97dcfe6b0cab16e33be"): true, - common.HexToHash("0x80b8510916a78545e0f1b317d61fc6986e7dce3660eb0f9ebd9deb0628c07880"): true, - common.HexToHash("0x280f61907a8152a0f6a73143e1670fb4af0fbcbd6c3d8361bc95c15217a8ee69"): true, - common.HexToHash("0xc4ad0f271399a659e40edad4c81c4ed3e4a93011179348481451f1b1c7ffde8f"): true, - common.HexToHash("0xefce5bc16d08cb48bc56061b6495215d0871bf25579bccdce3ca4a1f2cffb33f"): true, - common.HexToHash("0xac207e4b285724dade94995a295dd0e1746dfde3551daefe75c449466ec7c1d6"): true, - common.HexToHash("0x522a8c1d9f67e8b28bdf7722f655b2fb1f1ae9e9975084c524d49be1a4501894"): true, - common.HexToHash("0x0555231939f8bf453415fb01d1c69f6193e9f6040166c4e10974694d732c979f"): true, - common.HexToHash("0x6e91078176f47046b726094067f3ab70a342079a02d84d67bb90ae285568403c"): true, - common.HexToHash("0x538181e3807f694ce92f1a98f70cf04846db16c705abc5336de01d878e803d51"): true, - common.HexToHash("0xbf8f7ecf25381d3654e915277c042d13dbe0e6e44a9004bee93e47a09094ccbc"): true, - common.HexToHash("0xe9c5d0ed04bc74b3b0c1e99b58dde881424dc37948e2dd42840265e5c78d49fd"): true, - common.HexToHash("0xaf70881d8b30462f5c428d2be6a63b98b2a21ce4cbfcdf87b9e8680cd31d8103"): true, - common.HexToHash("0x9a6fda0851da57bde01aa0a03dc849329a1c2f9e5c596f5795f00a3b54b5aa28"): true, - common.HexToHash("0x1d74f3c71c0001dbbee8d7bbc2019eec31b936c97383520066103720e6ce302a"): true, - common.HexToHash("0xc5138b41ae0f45855b0c236ccb8ba014ab7fb26f1f75d66d886a4f988c1c7fb4"): true, - common.HexToHash("0xaf297900a58f8e862cfb3109f4cc8d32cb775ff62ddfd7ad84964f3cd94cdb7c"): true, - common.HexToHash("0x1b2cf02c63eba801029b656f55f06e10f76a2c1ba6b60420582758f83b22357c"): true, - common.HexToHash("0x6ec37383c332276bf3dc52f7a963e48bd044aca3a49ae06b3e6c0493d3904154"): true, - common.HexToHash("0x4fa7fddcefc63e48388f6b5ecfb1b04b7b0760bf8381ab73e44fca9d9294e813"): true, - common.HexToHash("0x8c5eeb7bbfbc07614a8d0982b5eefd9a100735b1c9c7120e17583a2a0340f192"): true, - common.HexToHash("0xf0d4716f6458a6f7f481285d9850b20a70d1461ed413ee59fc65f6e58aa3b70b"): true, - common.HexToHash("0x544fd4a585fde110ce8171ba07ebfdb009d7c75d4578775ee343a29e260e0715"): true, - common.HexToHash("0x005c6d80930703c73ae5ba9b28a748ae6c7f795cf2a17c8031966481ad017b49"): true, - common.HexToHash("0x99f29f77c3a125b4f93f3ab4caa0fb40924ed06e73935b5dde6edc7eb1934f47"): true, - common.HexToHash("0x45929f133e8dc56c978f336691d2c36351b3d557f99a9a75e4487b165effc583"): true, - common.HexToHash("0x3367938263fdd904fe6de3eee12feefe36a568590330dffc5e940e14a84e4fba"): true, - common.HexToHash("0x3969e1ff21307c158b2b6193db47fa4501a7cb690459b77fdefbe246a80672c5"): true, - common.HexToHash("0x5f4835036ce12695f022d6406e90d6f3d7f53a7ca74dca41131296312835c597"): true, - common.HexToHash("0xb542a7bf8a6eaafedb775625b61f94a6514a16851d69fc5ba6da1d03c25f65d6"): true, - common.HexToHash("0x4be62c0ee40be10a9d84d4dc6ca94b405fcbfb34291663feb242944700c74ba7"): true, - common.HexToHash("0x8fbf522360e283379fc9c9b51c5bdcc0f33b8ae1fb1a74664b6831260fa03d9b"): true, - common.HexToHash("0x4be4fad44933f1175d018ce4a14a9f974b5748e3fc615e545d7517dcfd587b8c"): true, - common.HexToHash("0x3e0abefaf3116875136a650b6681084c4316885e6f4f77709155b4cf42714544"): true, - common.HexToHash("0xfc328853785f58b6149725527647179f148bbe4789226c33ce105deef17f4d59"): true, - common.HexToHash("0x8f879896b3ef71f19af9a69e84c81fffe6ff3c0ab7b04caa698df0e1f3c9695c"): true, - common.HexToHash("0xdd2509c19c350afa35e112829c1319ab08b18387fa9188c75b10bdb94023347c"): true, - common.HexToHash("0x4577ef160a8a504a66c6c05d45a7f47301e35a32e858ddab8e27e649db8b44b4"): true, - common.HexToHash("0xc7795ba60ad8c67ff8fbe08612e8b22db13fa10e531872d1b8bc0b566d119b04"): true, - common.HexToHash("0x9fe36608bf2a2d88665bd72c5948a3243f7ba8f488daa341717a320fafc664de"): true, - common.HexToHash("0xa691e15fd92b911993b9e1712e91d41b43e323f2ab3cc9a0d2776f60a9eaf75b"): true, - common.HexToHash("0x5bcc88d3d984416a589894b78be0b357b0e8d6aa2c4603b4adee09f6e1cf2886"): true, - common.HexToHash("0x9c2aa2a5bdc76be72136ad86019e688e23db6cc28fec83752a982a99cee02e64"): true, - common.HexToHash("0x5347e13b73fba8c1e1298ce60cb47c5b0de178a446cbc001a6ca47d073dd75a8"): true, - common.HexToHash("0xffd0e74260feb95f0e9cfe618a7b27b5087958ecc527c61635e72de19d51b197"): true, - common.HexToHash("0xc58d592b44b7d0bb3a777073a040573700814a8130ef0028cacebbb90338aaf0"): true, - common.HexToHash("0x532354b37e274bef7ca1b456d9866593a755d1afcc667c917d0509f1e71cb21b"): true, - common.HexToHash("0xd7606e6e6605d21c2e8a427c396a095673e0b5631745b72d6e0290a0ad4eaec1"): true, - common.HexToHash("0x00f0a8742fde7f04af91255440c34b259d54d4e81012bd880c1b8d777c5a7436"): true, - common.HexToHash("0x90a53cd75315d1a9aa409fba0d3b2228374655d2618f093dd16d0b259f00e56a"): true, - common.HexToHash("0xa9d1e7b0d6b46ccf57dfba12cc82fb5a87cda77f0a07e1210aaf42fa48a8312a"): true, - common.HexToHash("0xbf4ef280cc8b10326b57a91d362daf04e970ea21cd1c93850e661a969f71f66b"): true, - common.HexToHash("0xfac876a85a9d83ab77e4dc8364d9864c2f8283a90baf24af1ca485d41bffaebf"): true, - common.HexToHash("0xef2757f758a9545c9853e71f30ca15ac51e738a01507a1a43a03410e620f423d"): true, - common.HexToHash("0x8ab988c7da937142bbf31103692ee564c98b5f0cc4828213ac54b5d8ca10b062"): true, - common.HexToHash("0x9496ef5340340b1fcf7a192e8619d4eb119b5631f3d72eceae764fefc6535383"): true, - common.HexToHash("0x34e1ae3d7bb6defb29569af4c2a59cfd0a770fb21de814aedb0b0f4baaa3e929"): true, - common.HexToHash("0x2990a1ec314b9d79d5f339244747d57571c68e429407b940d664e35c9de850ff"): true, - common.HexToHash("0x2bbfabb2732d8fac7e1b4a69a8542a287159434a1d0f51417978db3af77af7b4"): true, - common.HexToHash("0x9ff7de488619a54ea30b510f2d5e77171d0d5d23a26a37690d05a064c6c072f6"): true, - common.HexToHash("0x57bd59ebeb32a9294b7124a8c8b89d225391925da6a0928b638a75cd508b007b"): true, - common.HexToHash("0xa05efc4c455254e0ed6a8e6e0ae57d67ddba8c5d5aa34bdcefb3cbc3ec770d27"): true, - common.HexToHash("0x97f1928d5330533f2024d65b2a482f0472199edf1cdb8b4aa2f401bbda6aa84e"): true, - common.HexToHash("0x58b19939c2a17ce8e62c6aceda03827156db94eae39ae321c2ee6a5de7896f8d"): true, - common.HexToHash("0xa0f7f3825d07922ad3a17eb9781dae84ace401d6f32d8976906ee6d7d33587d1"): true, - common.HexToHash("0x5ef4b2119e790e397bbcea4ef612c37e75178d5544441c1de98781bf08a44397"): true, - common.HexToHash("0xbe867cd167158c5ec3d2de17fea61ad62b53d4dfde77c2e820ff54342ced5252"): true, - common.HexToHash("0x1fef4cfacaefe4a5813473e2cf2786b76601833c0b44dc8bc729ab150e920ea8"): true, - common.HexToHash("0x8661490dee1fe3752c2725416ce1b6852a36fd5e4a75413042a4a8ed910aa9de"): true, - common.HexToHash("0x38679fe1d5fe8f881289035cc073da09e41bb370b0d1ee2a1515fce2a30bd76e"): true, - common.HexToHash("0x78dc8a72a0dc591813c4ca85d58e1b0e18b4b5eebb994eb29ab311e4f79f1cc9"): true, - common.HexToHash("0x83380958423c3075f95a0d81db0f727233059242fded6aec3772ef62d32fecdb"): true, - common.HexToHash("0x7d654e8978960ec3b08f70f0e837f1882f622d8a696adadf7e51e24fd2379d0a"): true, - common.HexToHash("0xb58caa16f8eeb4b822943268c4adff50e3fde1a609cc9cf473807ba3c36215ca"): true, - common.HexToHash("0xadfb90c3154dc7e7a5adc5d92220368c3724d0f310b98d7f3e7d16fcd9a3609c"): true, - common.HexToHash("0xb406e7e0d748499bec05e68c0b2b17cd421cafcbffe2d3609a9a1f2414a3f317"): true, - common.HexToHash("0x5a11c486cbd6176087a128b1dc1d0659ecae2915d2bb701a7b63d82739159386"): true, - common.HexToHash("0xfe4149e1aadfe6517d131bcc38ddc7ba459ae56e1d88e1beac6388594241fab6"): true, - common.HexToHash("0xa71759459621e870a6fcc2f96926987a03f1e07855d2afc72ab1f90737071ebc"): true, - common.HexToHash("0x110d6d78cbd0558909f43ff9753b4321e626e1620357dc998b818b11ba0dcff8"): true, - common.HexToHash("0x906a36f3dbb098acab9c550453a4f14be2407fda0a156dc6362282453d545b82"): true, - common.HexToHash("0x59a5896d5f0e4077288b8b11987f5b30fcae09004bf1afe35ed099064cfc9d81"): true, - common.HexToHash("0x5da4d5f8b2d6bccfc591c3bf1a7217c96efcfdd71958068ba134aa9cf5aa1fea"): true, - common.HexToHash("0x6ec29bc9a84f09a38fb055efd7b7ca151b57b2f470b3f7640b478d847164134f"): true, - common.HexToHash("0x98027c2f7fc3b4798ce76d9c886ab3078201d11038316ed1d14b4c07ecd84ed9"): true, - common.HexToHash("0xe253ae30bc264053ad5a32548e635c3f7137f65448ff16359972558455138b42"): true, - common.HexToHash("0x83febf7a4c153c4d694c8b88927c2b818d401ecd2a6c4dd77e9906186be3aa28"): true, - common.HexToHash("0xc64c2466186f1fbd5b798f3d099f9f5627eae2a226fd669d92577c850e70bda1"): true, - common.HexToHash("0x7bdc75e72fba6f5a2093d4fc99ca6d3854ec9a704fb28f372b5b628eec83f662"): true, - common.HexToHash("0x3cf78833cf3be59ae13ab49ffe0be4e8ff70c40675929f714350232c4c41d6f4"): true, - common.HexToHash("0x7978ebc8bb66123bfeca03ee3af0d680adea76a115ea425f38c8b05ee6fbfed8"): true, - common.HexToHash("0x54093864ed0caccf6bcb8be82943cff40b781593de4fad9df56f47747edb04f7"): true, - common.HexToHash("0xd8e0abedc64a47c62bc4c52e083ecba437a58e8084c25d78dd45feb23fb2315c"): true, - common.HexToHash("0x89a70078dbbc4ecc86b975e36c5ef6fec1c380958460746727da01422f880543"): true, - common.HexToHash("0xce2c295b95294b987736023ceb9db4d6b3b7207b998d614594a3b16e1aa183ba"): true, - common.HexToHash("0x8499c9a2412d596b19f0f53c7de8b704f3c2316ff22fabaab5ed0c42256a135d"): true, - common.HexToHash("0x0a980953fdffa98ae732ecb022af4767a5a8c54132e3557b7c784f871e186150"): true, - common.HexToHash("0x7397305ec93fe6608d9395d88f13a38045274ec848c432d7f07a5ac0388cc65f"): true, - common.HexToHash("0x46f498661dfaa36aaa941c82392c4fcbbf6787736dd27b9a281879a305640945"): true, - common.HexToHash("0x56c124892b368cff87d5c4028d356c79290f5ce10c819503ff9b89efc4ea836d"): true, - common.HexToHash("0x5c93cb6d937fcdd53a96f0e822f37cb2d20de70950f1d6ffcd7706ffd20c196a"): true, - common.HexToHash("0x6edc6b2054e0ab6fde60219b291cd725619edf9666a75af3511d17c8652ffe37"): true, - common.HexToHash("0xb2f09ee93fc820c1462c1d838c6ab9346e23ab6b6379e33128a851d605643a0a"): true, - common.HexToHash("0x03c016425401ca4c5dcf6687c397dc156a8e6e87ed2702c6c0624533ae173a96"): true, - common.HexToHash("0x6dc4e9cf4c4592eb9d9fe9a24c474777c41bf0bd21b057e052386453ad06f771"): true, - common.HexToHash("0x73560f7f15ea6c63f0b7afc2517b23cc0a49c56e9b836d46b44b6185bf9d76d3"): true, - common.HexToHash("0x80b9750a1c7898e1adb54c1355f956b8a5c2fc959ee69fd8a2b930b184089a15"): true, - common.HexToHash("0x1cdc2ed8823c26eebd4e8eb4fa973829ae4b1706c0cd97f725bfede476c4bad8"): true, - common.HexToHash("0x6cefaaca5c1a6659ddafe27201951e8214f33dba4e0ae1dfbf212b996547957f"): true, - common.HexToHash("0x6312d6baae979561ee948565203fa627c07599c6aa27f7793e7d9a889389d629"): true, - common.HexToHash("0x930e55156bac74415ae9327bb13718072690fb0780431bc2b8955d02ead58046"): true, - common.HexToHash("0x889b0f75587b32e9eb06df79da420592ccf32de8a53d44eeaf144b4dfec9cff4"): true, - common.HexToHash("0x56f94396d423a815abf7d93de6018103fb3969d2ba218326e105011fc83cf04e"): true, - common.HexToHash("0x589911b7d2a604c368aea7542a37d5cf6f071f505071c82da6ef734a2c549472"): true, - common.HexToHash("0x07ced94d914e73d85a921a87a0716cab2da23c40007f9471b1e9305c50a7fd31"): true, - common.HexToHash("0xa595bd73ea9a93b67d8cdbeb947858b38eea3f6a646febc1d6ff04b042997da6"): true, - common.HexToHash("0xb9ad10ac666dd5e7f3d37c0c607e1539ce4b839ac50683429aef08b95b2e35ff"): true, - common.HexToHash("0x0a6aa021b61cb7f670f746cc748cc9aa1cea4c25892ae2c003c05a7a7d4b1494"): true, - common.HexToHash("0x548c088d8e182335e0c510c7a9d4bd304a00baca5e333bbd35d2d449bd0e282a"): true, - common.HexToHash("0x0a9a9a1472c45adb38738d771a687cdfa8382d1d1ef6228ee5014bb8d333e058"): true, - common.HexToHash("0x733a3186e45e8c5d129a663597ceaf0b4c2e1497138a2dcaaf354abe0ea66a41"): true, - common.HexToHash("0x06850af8aca3b799e6cc0f883da99afb9302797ef69215811a25f909c5d52f17"): true, - common.HexToHash("0x0bc23271ff14358318a3b260b43544a396304f40ae7cc79f633e6585e2bb8c40"): true, - common.HexToHash("0x1b2820e60afe923c5f5e35b440948dd4c4bc306a1e20c7053498aeb7452d2ada"): true, - common.HexToHash("0x8dcb6a3c2c092e52664542f8f76c9dba28a91c864f07ca87ed2d39fd5818c66d"): true, - common.HexToHash("0xe2027ccf2e19521d7eb9ba95f1ba4371513980dda1259a4f91c8f72070db9169"): true, - common.HexToHash("0xbbea698bb4b1c18f92482b3ff7f17518b581ce4efe76e45a5ec294336268af5e"): true, - common.HexToHash("0x9c552df4aa00e6fd3c1a425bb29f7d9f7b08d02f391835f389343f999e4f0f4f"): true, - common.HexToHash("0x7e5628d1d90ab36ff98c7002fb093b182b6c93d52f7c1fcd3ad464a8ec0b4dbf"): true, - common.HexToHash("0x55d7ae7d1d9a693133b40eaf65288d183508709c20e9236af1a4f1ddd40546b9"): true, - common.HexToHash("0x12ac2564917ffce75f6b107656e7db01b58d00758868a4d3db5c6f14a2643850"): true, - common.HexToHash("0x4989bc849d3bd394a0d70d45f8b7268f06831970299d84fddeada651d626b25d"): true, - common.HexToHash("0x5c0d5835d7b803b21c11c1ae5f2a0d7cedfd42e4be38b15515924d24ab929e58"): true, - common.HexToHash("0x6eef29b16590450527e9b205c2b7b0ccb826d796d8a043b53a24cabce597fa30"): true, - common.HexToHash("0xba0f8e6c932edf7655f5880e0d10075675648d9c1758a9f096a41b06df0d812c"): true, - common.HexToHash("0xd54bcc1dd73a56e5cdfb295c6666a098c50d8d77619569bc8ac0ce83b1330025"): true, - common.HexToHash("0x46d68a4537e9d5689011a0c8c89abd823c48cb96b4afff95b6aa18fc83e985bc"): true, - common.HexToHash("0xd07fdf6e48ca60dd6dec8a76132b5e07be4be01b6e520cdaa90be554e03aecd9"): true, - common.HexToHash("0x0ca5665eb8537783b69fd545c01785c7e0f8381268cd68ca8953f6fe31e4fd0d"): true, - common.HexToHash("0x0f7b6dffae2fe74031a9b4130116f8aadf9a0660ca2bd8092068f706a8ffe64d"): true, - common.HexToHash("0xaa4370279428724b18d6bfec945742b5db3f2880f303f461c0c298beb58bc69a"): true, - common.HexToHash("0x4bc29ff88660d4ef453e6876fa4e32698112d76652186aec42336b03d9fe122c"): true, - common.HexToHash("0xd587ff893cfa938b7880e3042a122784b94e5c5ed7188afbabdc8a3823c3d66b"): true, - common.HexToHash("0x42e89b519bdee8e87f92c213d9eb2d3ea6cf8aec80ddacf8b7ddab0e0521d027"): true, - common.HexToHash("0xa2e5c3ccdeaf83d0c64655554353bb7b413b805733989cba9e62758fb58541d3"): true, - common.HexToHash("0xb8f3e7c7f84508b05160bd60c7128a219a81fb3b9e55d944bf565401ed720a20"): true, - common.HexToHash("0xf9e4122d153cebd613cb4d2aa868b0c3c4b64db4b30bfacf530838af98e96d62"): true, - common.HexToHash("0x8a3938f2da09da3f592f36ae815f2f15b6d6e55201e21817584619c452f920b7"): true, - common.HexToHash("0x38ce484c338e2af7d0e35e52618724b3e29cc25e48896fc59edc4f3a8a88ddb2"): true, - common.HexToHash("0xedb0dbe117dbb2b6257ad580b3c2ae145f4406dba2289f0491f71c6742d4add6"): true, - common.HexToHash("0xba9182700c2ffeda1f8b9bcaa1a0e8e2285c457950d980fe7a55b48596261db2"): true, - common.HexToHash("0xafad40ae55d4488cf04611db93bb131f13638aeaad58ea7f3a343b5572032082"): true, - common.HexToHash("0xb5ae2df4645fe2c7ddcddc8a87ceff8aa488baf32a51dace30dd02d2544a0795"): true, - common.HexToHash("0xade1265fa6facc582f0701b7c56a231aa414cf9fd215eeefc8a946e9c041bda5"): true, - common.HexToHash("0xc21a86eb151aa4a01423397c413f2929bd4998b6805e79e14f6623ff13c8e702"): true, - common.HexToHash("0xb61e59496d7cbadc7e29c735084c9634099dbef9006745af52aae863ba5afe24"): true, - common.HexToHash("0xcfdeea460cb19ac27118cc742f549134924a08fe72c06b17cde3c448d790a9b2"): true, - common.HexToHash("0x1a91411af1a30012f78b2e84b63cdff6046da917a4250dc602988b1f431e2c48"): true, - common.HexToHash("0x5a4896dbab4e71a8f785bbfdeb6a5acbf2560d9db373e74942377aa2397eccec"): true, - common.HexToHash("0xd4819d0bb567897e76bc0a30ef35ccedcd0a4a6ce622a43b92e5e67479e902a6"): true, - common.HexToHash("0x910a7f507760c614515c0c0df7c5954069c03ae921b374c0caedfd906df6d360"): true, - common.HexToHash("0x76943990f5279e92ba6aac772d684b1510100d3aa8e5dd1a3a598edc8af0b762"): true, - common.HexToHash("0x6da4c536e90f9bf2a1d8aa7585ef233ecf30fe675d04feac6d81fdd4eb4a35e4"): true, - common.HexToHash("0xc3d6c51a80e8f8769768e79aae80d3eba136bdb08834e6f8249a0129dff775d9"): true, - common.HexToHash("0x480d72464fdcc0b725bcec8e1c80766f43e648301918241fa095c2b46e730819"): true, - common.HexToHash("0x7f78081004afa151e4e5268ad70fc35b94e84af3744c2333be1455648ddb3a00"): true, - common.HexToHash("0x401aae70e70c561f89c6c2877fa86c733c80031a42ca8ac512b9c929330ef60e"): true, - common.HexToHash("0xbc2f8c0c2305e6ecd82655838d7d0dc120619febee09a552de9f6de549e9ca39"): true, - common.HexToHash("0xc3edfc2105624d46cfb5d8fea4e6d70d09477a11f8ca993e796a4cf9e220b1ce"): true, - common.HexToHash("0xc4517151627a75687cc06bb76e5c85b8f713671f6b30db44b1dd83393c10ec84"): true, - common.HexToHash("0x57bea4bb1c168002225e95b3c2399ebd3d66d29e36ff584de7578c6849ec76ec"): true, - common.HexToHash("0xaf034c3f432e4ba17bb1e57070fbe8c9788511b5e97b2c7d5637d6e3edbb75d6"): true, - common.HexToHash("0xd2f487c01579512fefc5d66fb98e49a4c09d2a41680536133865c9085a01144f"): true, - common.HexToHash("0x8353b016db9e34e0372d3b0cd34542a04c934a7f13ac398f935b9d19cfe49593"): true, - common.HexToHash("0x53fe6b3e69b4c97fa5841bc6e512a4ba4525b9b3df090ce12daf506c7ef63b26"): true, - common.HexToHash("0xddc074f901903ce5fb660c152df7872440f2f8f9ffb9f29ae7f1bdabb822a116"): true, - common.HexToHash("0x1debea07693b29b1fb231f4c9bc7032ed08011ca3e46da9657482c0c30ff8a71"): true, - common.HexToHash("0xf7f88f01d85911d75ed1521b00c219763e00714882eb105c924bd805eb3569e9"): true, - common.HexToHash("0x4cfdfbd2504c307704bc1222b7175e15539bffc3adc0627d483b8cbf21a28bfa"): true, - common.HexToHash("0x632bab8b24992f90001855efbd04dc66b02d069d2ff87f310d91a65fcb53e6b2"): true, - common.HexToHash("0x012c5eaff2de4842ca4cb455a6c157fb0f15aa07e42d2d3c66c496fb9be9dcc4"): true, - common.HexToHash("0x8a9e2bf9fa48450567875c21723b077bccc080f83d4d40eac93fc1558c5d0277"): true, - common.HexToHash("0xe8cc41dba8d2aad7d9aa4ca0f0e62ae182f533f0c76da56333490a4c0e98dccb"): true, - common.HexToHash("0x7ae4cfbd4d8b067880464adb6bf4a086bd6b290ef19e28c5781f9d314970f2b1"): true, - common.HexToHash("0x8e35fb4113a9cd468acb0fba2e70c58e82417bb2865e2e6a243fb75c36120729"): true, - common.HexToHash("0xe9314f1f95d4d163ace94078c48b9e1c231691212bdbc5376865d981252f663a"): true, - common.HexToHash("0x1295229c1b8008f4d12e928b283b8266238ef5742a99997d2a26cfed33677b2d"): true, - common.HexToHash("0x46e5f111eb336269a694cb2d1dbef2ff9778c768d4c3806ae99a5f556a01efac"): true, - common.HexToHash("0xa88d9a4fae60a53f8b2d04c301779a70b25aafedff877ff1eaade526102dd43c"): true, - common.HexToHash("0x3bbeab74cfd8ada953c96dc53552a131252e31585cb039310c73d01f39fc54a4"): true, - common.HexToHash("0x4ac98114882d2460cb1030a764c5d152379e8f647cf0cadb9f563e77c55a4d37"): true, - common.HexToHash("0xdc327d5d7e37896cf18230e0eadb4b5572e20b9a75ef3b33df7c25cb8a159c93"): true, - common.HexToHash("0xc5e961bb6ed4649270d9f2e0139651d0d836270738e89198f5281af631be11f0"): true, - common.HexToHash("0x5397c06ce0eabd78d25d36df1634799e9232f8891f0528894bf2dec537f81371"): true, - common.HexToHash("0x505ca78b79e189705faddda61372c535857a57c1f12625810d310b974a483ecc"): true, - common.HexToHash("0xd7babeb9a97f575194eec77d8316b68bd006ff1298ebc3df1535e1f5340281ba"): true, - common.HexToHash("0x3a80fe07d2f910be763fe80e58cd22121cba80f748cc4814ef486e9a2351c28b"): true, - common.HexToHash("0x2c7143c5a6dd987e4b7dab860471e29d595194467e0a7caa128bc301eae3f8b9"): true, - common.HexToHash("0x884010ff19a72bee2f3b3027bb883b721dbe71589f063080bf96457fc6ce815e"): true, - common.HexToHash("0xefdb0cab544662dc39e2c94c17c4f51ef994b83f33320d744b92cdc476c2af40"): true, - common.HexToHash("0xd64aa1e9640ce2fcfeaa22046ab2846eec6662a876514873a252cf41e1b7aa26"): true, - common.HexToHash("0x5840822700cea4925d568d7941b6549b91775c1fd586025e80f57ae8cf69d1e8"): true, - common.HexToHash("0xcd94a2fe5c5aff6f41cef8d256e47270bc1a1ebfd3439a2608bacb9289ab133b"): true, - common.HexToHash("0x261484d88761c43157696e3e9df12bec7035ecdf395243943f5e7ea94cc814b5"): true, - common.HexToHash("0x0f00b564942e85dcc0259a04a493329dcd175d1734e04d5bcc335eb4d7b19f76"): true, - common.HexToHash("0xde7d24de3b2adb41b5a0ab1771f26ab39639dec1ab5117e4102baa170da71ea0"): true, - common.HexToHash("0xcb50b76f5b4f5ad43c6938831f108f213ebb0f9b5a547515b119f5e17cb5dc99"): true, - common.HexToHash("0x703e431262594622cea535dd297d3c4e3afdab505c8f5f323aeb4572d7a4f308"): true, - common.HexToHash("0x98537265df01cfd92a89a4aa90751fbd2e6e66a43f79aed791c0817bce8061fb"): true, - common.HexToHash("0xa1e2e25c0afe1de3fce94e768e37a1a68285be08f6cdd9eda001ca60b418569a"): true, - common.HexToHash("0x2d98c93b7724db44cc4f32194872bf25179a2be1cbf4e2f29e132f5b9819a8d0"): true, - common.HexToHash("0x57b3fc591953300da6692f1c36d9424fc8f640308cd3f66a0b93abc4913cf1ca"): true, - common.HexToHash("0xb0454535afdd6ce15d085b553d0223a1e5b7eb927dd074dfd7a37df43558a814"): true, - common.HexToHash("0xe31b7478da298ce59f15e3e271f5056332ed3ef6f8595d2b30a1bdfabb784ab2"): true, - common.HexToHash("0xe72583cebdcf0e13830496c5523291784c185766137d47abc10747893cd98d3e"): true, - common.HexToHash("0xcda0e689e44fd18f16a98f3a572f9ef9ed11a0b20e231e68b5c31c9e07ae4b3c"): true, - common.HexToHash("0xe873185c7625df2082ab18bee344190fef96748b0b518a8a6319312daac7240d"): true, - common.HexToHash("0x1a842bc35cc6633894dfdce37fe9372c10a298d60b2a43828ce302673d404c27"): true, - common.HexToHash("0xe6b24c4ebb5592a7bc65f28b3bb05bb72114c44149716f07712ab504ea6a1a8e"): true, - common.HexToHash("0x10552218b64a437e9d725356dea28cc863cdf9443c7ab378f65e9ba521e492ec"): true, - common.HexToHash("0x15655c01d3f0d12b39ecdbc5ed0803eb4f145a4c3dd9e855f7c45bc1c546cd54"): true, - common.HexToHash("0x74fb887f08f3152ede7a28a06e496bd0a0fdcb7087a02c78a80a1112627e79ed"): true, - common.HexToHash("0x4e65402b7270bf30596f2b8c52a3bcc52c0f96268bb6e04f9c0fc9bc0a5bd302"): true, - common.HexToHash("0xfee44dd5c10d75f5bdf60f31742c5bb0aa8c095f5bdea6208c08871763bb705c"): true, - common.HexToHash("0xc4bf6b2ce66d5da5e619edc97aa90b8b71c6ca49808032cdb4b1ad8cfe203b05"): true, - common.HexToHash("0x9f60ba7881aaf4d28e414a7d30c6bb6c702bd161901902e4a53657c92bcdca6d"): true, - common.HexToHash("0x30cd3e7db050394689dd58c2842ae14b27daf15e68a54f84f9f97d1314a88d8f"): true, - common.HexToHash("0x13b94d4451ad9a76a4b9b0866bd4d88017891f99c746c802fc78c42bf57a6a2b"): true, - common.HexToHash("0x55b63b46fcaebd72fd0e3c4d37607183f15508f4213edd22d19a740131735c3e"): true, - common.HexToHash("0x36fb418cb467b364f705963373063770533b3928de4d05ac79969e58ed168458"): true, - common.HexToHash("0xb571ca9271ecd7f0db96c07b7a3c4ffde257338551baa9f375f5a54769470ac0"): true, - common.HexToHash("0x50d31f0551a517b3d20be208b661a70c9f182956c806657759d46c5c41134dc8"): true, - common.HexToHash("0x42fcea4cfb8c89e03e009e974c97587e0748f5b81377c3f0adf9b2047b27ef46"): true, - common.HexToHash("0xe0e63de5d4ad0c24159d5ff126b55a1287dc65b906db33af4dad5b5ec56c6692"): true, - common.HexToHash("0x2a23af1211fe2d366c446ab3e15e6ff864849905be32363589cf6263b128a2a1"): true, - common.HexToHash("0xd0fa0ba5f63c6147f17c5ca5118b21978ff6e7816de9d0631a0479ffc5135785"): true, - common.HexToHash("0x739279c35a763c15b65e48ec43a92e1e0e8a9fa665684023ab47ac56377cd980"): true, - common.HexToHash("0x66f7ca3d9f08c48c2707ebc688f90d39e72763882dcccd33719f76680c86fd48"): true, - common.HexToHash("0x9791c32332e18da3707950a79fe6dadb86a3ac0cb29dde2dd41b25212cdefac5"): true, - common.HexToHash("0x80c8077fe31cfb067e5897e2d3054cb51e495d8ea9d81890438a62db7d639258"): true, - common.HexToHash("0xc144caacce59496907a8829cbca89b949e27c44bae80405751a84ba162eb4271"): true, - common.HexToHash("0xadf48776fc21cabe15183b2d9d491dd67fddad9c5c2a33d5b9e6bc5e67abb9da"): true, - common.HexToHash("0xebcec098465d5e3e1ea1719c49c598b371ea7f7ef604a0bdb2d28008ecfb5a0c"): true, - common.HexToHash("0x8fa7994434ddc5e64b13ead39d8b13807d8b7224209e838e4b156e76fe8b38b7"): true, - common.HexToHash("0xb95b10221978ced25af2ac44ab81e3831eb7a3a9ad5bee9732fabd5080ffeeef"): true, - common.HexToHash("0x4c89b91f224a656f141e4106f6609a565c98a29d0daac275d543c312afbce198"): true, - common.HexToHash("0x2d17141734c4aeb910743d70522348517d2cf2c8aabd2e59c39843c503d6c2f3"): true, - common.HexToHash("0x39bbf97108d9b2d68388f8c844d7ecad60816aac85ca02b23958487aa025df02"): true, - common.HexToHash("0xc252a81c23f15df5734d494b35cc8614231a6e3acefd02be0c65a4159de551a2"): true, - common.HexToHash("0xfc556a04a85308199bd51dd83f0bba9bdc7e9634c72efb3bc77d613df405463a"): true, - common.HexToHash("0xdf78714ccd39c0dfd289c05af585ed25043e704d8eead939551df83dc964641b"): true, - common.HexToHash("0x3cdf691f80495562dee8d9b5cf13e1117b0013777cb722755364078077c4f249"): true, - common.HexToHash("0xf5d4889498470e685d06174e42711a2086467bab82ecd3f20ddf58c180c30496"): true, - common.HexToHash("0x356bc81164c2f3063640604ed2e4057820bccbd9d8e97eca73416404d7adc480"): true, - common.HexToHash("0xcfbe98637dc5a8e0f893fb01d9459fd42fc854b692cf10e56803780540753d0e"): true, - common.HexToHash("0x6ccda450d8d21ac18364966649b5fc7196a95bb4a6924dea6843a2b7e530cf23"): true, - common.HexToHash("0x54aacc363be26146b8ab5f8411e8dca7f77c921682bc256f5203f016d69b9389"): true, - common.HexToHash("0x7de39e52b599a0ff3bebc081af807f9f83b06d0e2f88c44afe6c08de3857418c"): true, - common.HexToHash("0x017c8f62e98e082cdeaadd96fda7431d7cf2c8b392e23276a4b412e9ceac456a"): true, - common.HexToHash("0x7c204b78c81936e2d2687ecc5d2c1da14f006c3caed80f8eec2a485c746f317c"): true, - common.HexToHash("0x12b42f0e99010e1f87e9e65f8809c77b0de17193aa11ef1d2850e51f1ef01aef"): true, - common.HexToHash("0x0b112122a84ae51b189dbe1c2cc75417db22dccfc2592a00cb68f0c7e11edb2a"): true, - common.HexToHash("0x410bb0c4c65f4a267b8313b0f2e4b83fbb68c098558c7edda1f8a1355ba9623c"): true, - common.HexToHash("0xd7dddaa497db616a1747caad15504b5c6000b8b4d03bb53304435563f0dc6b9d"): true, - common.HexToHash("0x2b9ec784f510d47fb3072823ee26359b2e79612160f97d62881d797228ba72cf"): true, - common.HexToHash("0x0142eae747721fe4e2f3a552d039e678f477fb0b23026a01c2e8cf1e0d177f81"): true, - common.HexToHash("0x3583177b88c0afe77219f8febe4a544a3a1ba0fc08ae9a15ae5140fc3b11faf5"): true, - common.HexToHash("0x54ac5d773b2dc19d7521657234f60f28747322c73a0f1f8bf73531d84e53b400"): true, - common.HexToHash("0xb45a9d2d418089b63b8db1bb05c7dcf786102fe7d6e0728501c94ff09351fbf0"): true, - common.HexToHash("0x703e1879b5d619ce3f8e8069bd2c2dd801cb7e621aab51b4a18ba8361e50f8d0"): true, - common.HexToHash("0xbbe57b25855dbc6c9f9f8fec018d4ead7b1134fb713eb29d642f72d8dd241a5f"): true, - common.HexToHash("0x202cd684eda5b274b8c10ed112bf7cad81cf457fae735f9490b077acd442ce6b"): true, - common.HexToHash("0x06e7e17467cb95fb6fc8652a12ad6e6bdafffb4432b087e2d20dd15fc9473ffd"): true, - common.HexToHash("0xe9effe93de0675d52d53bf559a9a443f015aa0a4e1ec5c793892af203bd829b8"): true, - common.HexToHash("0xafc7e072b4fcd7f3fdc1777b9ad5266e198cfafb82a2c4929b31698551c51d4d"): true, - common.HexToHash("0xf34fb184be0049afd1ed39725e069c89d47460c2895dc61990e0f173c99b1403"): true, - common.HexToHash("0xf39f7dcc790092fe20262381997be51d60831641cb30caac5e3809f85422c1ef"): true, - common.HexToHash("0xb31e8ac5dc0b1aba8dd110e80cfccf2712490baeb68bac49edc4f68af762e390"): true, - common.HexToHash("0xb9045b40df0979fe5b0a261f6cee637b6fb224d3ea2be15b36193eb82f3d3736"): true, - common.HexToHash("0x8f019885842acda7f89923be88a86791e920eb8fa71d865da928f3dafd6b2197"): true, - common.HexToHash("0xdeb2df415511a3cd6db5d3adf578d4adcbd6345c23768206cfdb286e4cc9137c"): true, - common.HexToHash("0xbaa51b85b2ad51d935d6e1ac4a82ac6cc4210f821d188e6d8cfdbafd2d28cb8f"): true, - common.HexToHash("0x7a1e60d6bb4fa0d34c8511d9efae1e57447ee8cb2ae288a3cb26405e8f955fc8"): true, - common.HexToHash("0x9d2047251e3c0f73d0719cfb34c57cea2fa75f957f181d530e6fd4c9223f022c"): true, - common.HexToHash("0xe552a4fbc701dc990addca81b7e232f329a700105ad9c8e27b591d98a697ab78"): true, - common.HexToHash("0xcad66848287076517c2138c1fe477022fb121248b12a11523f8c0ad812fb2ac7"): true, - common.HexToHash("0x88498d50ebf3a9ded99cf6db8d5f32f3dd7ffb9bca9bebab6cce95ff63ed7c0b"): true, - common.HexToHash("0x8770a040b6f3105ffcb4bf99ea6b9d207810447f3580a0a8d4bf2ec1316ae4bf"): true, - common.HexToHash("0x2911df05e30c2cee4a42e29841c65022f02631b88ac22b63539527d2d2d64829"): true, - common.HexToHash("0xccf9823db6e35a2d412b6495765d9c32af97748e5102f570031bb7981bef6115"): true, - common.HexToHash("0xf86524757de7fe576c1288f4525dcff381fe29b46c383050922adec66d2ac337"): true, - common.HexToHash("0x65fdbbf69167dd07074daed34898f4d3d1c79a59b075b2fff7ae1c54551e21af"): true, - common.HexToHash("0x77ebd1af0d8258842122225f13b0c222d8f47ada6e1e6cba0f92f8c15d0eb17b"): true, - common.HexToHash("0x0196b1cffddee536d8b91898e0788abf85800a860262fc154a4e4b2efb809dab"): true, - common.HexToHash("0x3cdb47e2462260fbd4f701e06d8b1f5b52b5f553424ad7047ba4357442190424"): true, - common.HexToHash("0x4ccd4a91559f8b0441210458a833e1bcb790e81afa0f153b2924a0b4b5a79d9a"): true, - common.HexToHash("0xfed452dc6c038ff4b1e633dbf994fa44fe16a6eb2eeaa2d0fe82fe5ff51e04a1"): true, - common.HexToHash("0xad34d33b61092f5f8239b942c1d4bd8e5a6d2e4fdf6f00e1540ac4185bc94315"): true, - common.HexToHash("0x62627124254ee2cca0fc073a6ce0de503cc293fcb5df841c0ef15f415ec9b7f6"): true, - common.HexToHash("0x128646617c50c883d0287de72cee06511a9a78f23c292112017c47b758743ca0"): true, - common.HexToHash("0xa31d5ab3f6251176b08d75daacd0dcd6b6aa1d7a311de5b744f4b1d0cda5531a"): true, - common.HexToHash("0x01be612969afcd9836eccb4c15e1c40b50d5d22c7d091281098abb84991d2f00"): true, - common.HexToHash("0xa54ee9054140ebcea0a8af4c88247b4b6cdecac5c4e1229b694c96530a5da52b"): true, - common.HexToHash("0xf9dab2c90fc97811e9939876bce66ac1b5fce467d1683c32f41e2ec79463ad3c"): true, - common.HexToHash("0x8c40cc9e2df037ab9bcac206c9b698bb8c5504307bba89ec2ff3c982d3aaf5d7"): true, - common.HexToHash("0xa42444bac7656a8efae6efdf9ff357adef021d79403a9b7324dd324771da24af"): true, - common.HexToHash("0x94e741c793df310086ffd92eaf319a4218b67e31f781eaccf28a025548b8ba02"): true, - common.HexToHash("0xf61f94dead97e1fca1bb5cdcb074571a08ab55557379334ea8726a4e77ed7c0a"): true, - common.HexToHash("0x510496ad2fd81e60bbcfc246f92c345d25a0b32e255d7b36424235ec5e9c4139"): true, - common.HexToHash("0x84e3b6161942edeb416fcb77a84b316b065ead44b891393e2c535f2e34df49be"): true, - common.HexToHash("0x781060b5c5bf56b3cbf06e19754c5997a497f5a41d599b4ff0ab75af3ff52de4"): true, - common.HexToHash("0x6a4023d31d2b7f3cb6ff34b906973a280a187e768977b951b4b327a7c07f60ef"): true, - common.HexToHash("0x4c0f1f8b1587109acce3833541321eadfc98524d91259ee2b60b20b0967cf3cd"): true, - common.HexToHash("0xfd884da8c5d83e263f0029d56b379f93a8f7c44bff094dab2dc14e7b2fa24c8b"): true, - common.HexToHash("0x1439583a1325e1dd4adadedc6b9f15dadb35b9d07d07d3752262193b8234b3be"): true, - common.HexToHash("0x976a8ac358fc0c4c780978c3197ecba24df22a1a75bf69b23e024fd29c6ceffd"): true, - common.HexToHash("0xd1c4f6e2a6fac598ce12a3889f02c3daae49a06cec9ae306ffe79d00b1e18913"): true, - common.HexToHash("0x04ac2b916b12ad1087b167079486945d94c0cf4610f1d179aa22649c83dc559a"): true, - common.HexToHash("0x89e2489c7537c9abab008c035fac5ccd5201dc879d902099f42866fd0986f947"): true, - common.HexToHash("0x54fe91fdd2dd27bb59a93da120e06f8e4af0b1350fda75aa4fd24acfa9a09654"): true, - common.HexToHash("0x5653f2d443f33e2c4147a62331d94a767f648dbbe299fbacad203fce53eaf35a"): true, - common.HexToHash("0x7cc36a32bf98602be3eecf53c5c7e2925672034467821f5deb62b28f7505db14"): true, - common.HexToHash("0x568135a1ab86d08402fe83924bb4ca3d57f53e4e18b9681ce1816e9d1774b328"): true, - common.HexToHash("0x7f2dffe4fec604da4b46650a43a24272ccc264a2daf996d5272f20594246575f"): true, - common.HexToHash("0x428c6a74d85ff518614c8ffcf2bac830c2c037bfe819b6330ee9c2f272960400"): true, - common.HexToHash("0x90937d4d91e5074d90b772d2ed0a7834f127f201151de29f56a9b34764732c10"): true, - common.HexToHash("0xe805fe4282156401bf743d5263ac0d2caab042b0f654f3c86592cf40648b828d"): true, - common.HexToHash("0xd952ff87fb48379b89f9c2946a39eadfa04b7a7d538be765b4d139e9a62c6d0f"): true, - common.HexToHash("0x2ff8d809b206bc6133bac6861eb32ec509c635a57161a6e44ebca92e41b8e105"): true, - common.HexToHash("0x3653056173e56d53aa3fb61228e1e701ef7fd77f640aeae08b6c27300301c7f1"): true, - common.HexToHash("0xeca0d0bcca1f775a3d70cbda66c4dd911206a5c4ab12b28098d9db2d654ea486"): true, - common.HexToHash("0xda963eeb1b5a269ca99ad751d71c03061391b33d5719e3d8dc73a3ab2bf8898c"): true, - common.HexToHash("0x49950861f1f184307fa19d2a0f5864da2792e33f2c15b3a3174f8107ca10d4f0"): true, - common.HexToHash("0xb9a4c65edb2525b637e3b3a26811db3870d1816bb8eafd9dc3afc58527ba2b07"): true, - common.HexToHash("0x75507fcefa8f22bc09752007527fc11ee014a9898f911ae7201131f09069b8d7"): true, - common.HexToHash("0xf7fa40f25996218dd7d1344d92856c155e57765d6c720d337a32ecab94b10fd4"): true, - common.HexToHash("0x940bc44828f60e84b28c0e2f85fa85a8c0081d5aae25e13eb2ada89eea829838"): true, - common.HexToHash("0xcaf17a7d9af6cf339097f7dc41d09d4c93ec8d22458aeb5c012ea512e1840f26"): true, - common.HexToHash("0x166dbf8e5711a0778b623240bc9cb2261fdd4e96adaf23b4c3ad262a0cca2cb5"): true, - common.HexToHash("0xcf270ebeb2cde2f52292f1c6c7bce9c34b0f2aa5b7776dc87bb022d125bded9e"): true, - common.HexToHash("0x18740041b7e42c030538d47a668481e7cd6739c11a451aba6684872a279fcb3c"): true, - common.HexToHash("0x044729b0255119af8c60ab269482061954de54ed2aaf008d5a4068849df8e0ce"): true, - common.HexToHash("0x00cd3b6d0ea37acc805987d56ba2a83827fe7f88ee03b07382045b45776c78b4"): true, - common.HexToHash("0xd31aaabdd4bfa01d982721e0d6efda0cd8c7ac6230bc79effbb07de1ec90ad00"): true, - common.HexToHash("0x73e40ed7a042bdc1914caaa5dcd6ba6e1863c02857b023a33a1b3c1d6692bf43"): true, - common.HexToHash("0xe827d5e720299335b97bccf41d5c77282bfa7ad864f5268c12ae742de9c0add6"): true, - common.HexToHash("0x669b4a2e8e60aa54255749494c1d9909223192ff2654f0a0bd4b6e665f587714"): true, - common.HexToHash("0xc4452fccfa970e6c92627eac1ee31b0442cd61bdf9a7b71e3ebe0826234b25d2"): true, - common.HexToHash("0xf63c63473fdcddf5868305dfe0cc091f880daeb99f4bf457f9766ca62fa9029f"): true, - common.HexToHash("0x99f062c575cbf90b891d8e06f24d59515c9fb3de6777f6dafe136016162fc68f"): true, - common.HexToHash("0x49b433a5ab2b8895053fb87714fb00758c9f9c713087347a30d02e6a7f602d93"): true, - common.HexToHash("0xe35f6da644982afde336224626011d711399b30c27973bc43151ec4f2647a884"): true, - common.HexToHash("0x2f20e78a8821d2132e9a28a7051fcb160dfd33193d8dd35a170871577f02a1c2"): true, - common.HexToHash("0xc2959bc997b594bc8622c37d359264676a022f3aed049580f262fb3f1635649e"): true, - common.HexToHash("0x304434a4165a47143dd1e12c8971409e101a1bc48d18af8ee916e2d9020c3ad6"): true, - common.HexToHash("0x5387535f9b0aa8722c1b63a9e911a29485a49bb995f70b4a0814ebef366a86d6"): true, - common.HexToHash("0xa0d738e4d394cf1bc3b9654fd2984f0547191070d2cd1ca3b841e875eb56bcff"): true, - common.HexToHash("0xc1118613fcc684513ceb0f8245255f8a71a439da2b2cbea1fc6b7367bbc693ca"): true, - common.HexToHash("0x2a6ebc47d02a72695866ea34ca3f741d596b324b4b2269fa435c6e3b79e11200"): true, - common.HexToHash("0x3042dc3332ef97493abe91305aab6127f7217f7eeb07e6bfed946f7da3cbffcf"): true, - common.HexToHash("0x4effd83c32880536bef1b7b6853bf8cdcc1124b43593932b85c9a123f545dd5b"): true, - common.HexToHash("0xd1fa49d5856c7472e6e740ef16f77385a4df293306edf3e80945be1bf609d5ee"): true, - common.HexToHash("0xbbd6a9a8b7a1cf9271b7612af6a739027a391d7e507696b4ea1d207f3f8ddfdd"): true, - common.HexToHash("0x17ca1970755411759faf051d3f4be3a5a51fdd6a4ff2d9a98a34d4dba3d2b79b"): true, - common.HexToHash("0x23978794b3204faa990fa93fea56e319f0ff9152c9236dfa5b6638022d7884a7"): true, - common.HexToHash("0x99364747d4ff2f9b6fce61998c1423676765c81b99e2a9d8fdd2246a444e5c65"): true, - common.HexToHash("0xfaa793f4b0c8c065e61d4cc19aaced9c6917cbd50bbbdb3d1cfeabed22c026c5"): true, - common.HexToHash("0x404b2d922d0006cbacfafa11aca5e0236f2d338a120028204ab7ad8ec0701b28"): true, - common.HexToHash("0xc96b2d3cd3294afa2eaaf3f82e372fd1b2a170cc8f04760e0ac3d57eff2ef462"): true, - common.HexToHash("0x662777969a1412b11a6400e930d28a0c01b87ef83e1b2c3b588f0b190bbee257"): true, - common.HexToHash("0x449fbd969188b332076b350a3d89e686b0cd3588b3a7e14ca9767275f5d76ede"): true, - common.HexToHash("0x73368bdf6149ed47512fd6acbfc6c4b0b9af32d3ac6ffbfbec45974a9adabf7b"): true, - common.HexToHash("0x0a71171448f8960702a768d5f95295ce7fc632eb169196345643c1eb5a787d47"): true, - common.HexToHash("0x4e64c6e3a52e1b57a325a14835ec534d0c1f29822740d30c335524a38c7fa982"): true, - common.HexToHash("0x67c96ef9d09c56c5ce7f1e6402952f81a87ba4546c0716da8e83108e5038f7ca"): true, - common.HexToHash("0x9f339abe564e034079b53d4cc2bfe5314ba5b7b809e15308fd7217eb987cfb8d"): true, - common.HexToHash("0xf1e33eecd402ecc68d30e0fb3b52a6bb5f3d7fee6f3f54d4b97fa2e16eb3c356"): true, - common.HexToHash("0x00c4105dffb47d04760a4332da77f72fbcbfb9587858aecbfdc147c83c59d94e"): true, - common.HexToHash("0x98731dc3c7dc06fb26c6d98b96b73001dc9607cbf86fa166b33e7221ed9276db"): true, - common.HexToHash("0xfa993b6615e5ef3f8b783d55a05efa1814e405d410956929a3f84b0f333b35e4"): true, - common.HexToHash("0xdbf2ab6e168d27ab8f3842ded623b638db754416e510d7cdcd6b66d216d9117c"): true, - common.HexToHash("0xac3bc087c0d17b4371bc094f24b6bda6334886c6b218b3d45982265aaf6193c5"): true, - common.HexToHash("0xeeeca9d15c62eab302bf2ffc814f8f27d22fd0221c43e5af3ee84eb5c3576dfd"): true, - common.HexToHash("0x61aa32ff47b0b5743f9545e723ee518a4c7426c06d4ead61f42f5d19398e3188"): true, - common.HexToHash("0x7ebeaead204b36989d8999d61c3fbcd723db0898c9a24694e28a9dfe1cbacb77"): true, - common.HexToHash("0x8c9ac0295aabf8301ed4c61333027814d5ff4e0d71b6174fcf7c7166d19c471e"): true, - common.HexToHash("0x9d4c4645d34cd65804066642f811251afec4f5fc333d3037d108fcbfa682537c"): true, - common.HexToHash("0x97f522537320441f593ad31580dac65b5e62b651f82ded694a94a4ad74ee59ba"): true, - common.HexToHash("0xc3e8675fa36cbf668f7ab326299aafe877458144e3b41e9a3f60b319c510d901"): true, - common.HexToHash("0xcab08b1ea5d8cbf103ebbb1208755dc6d96356e7a42ab2d3ffe19e4efd26455e"): true, - common.HexToHash("0xd14fdfc4c528820a47adafd902f51b46f94dfa8587d1cc5d1089b064f25ca852"): true, - common.HexToHash("0x5862b08ffd50d4156ffc852088a5d82bff61a4136e46f4504becd7141da9b940"): true, - common.HexToHash("0x6cec2859c09304d72fb2aecc578c05985203b83c2d05e544311b96cf5e769762"): true, - common.HexToHash("0x88425bf0b96399a8fc505ef6fe95406da215c822f180a363d4ee8c463caf5414"): true, - common.HexToHash("0x8b7b8834a2d1507d04fdf4f9d95a14a766f218b6a4fa7bdf6c0124163ccee22d"): true, - common.HexToHash("0x52950014ef4c0dd46c6927b743be029a02714bd3d3fa7062357a4e9024fefab2"): true, - common.HexToHash("0xf2408e658f4b9d397a1935cbdf380a2c2dfdf4971e243fd1de48530b9e005a1c"): true, - common.HexToHash("0x650506e32fd3d7ac1c7c7ffc1e331f69f570db12965e100536f713beafa5bd8e"): true, - common.HexToHash("0xb8caee470be5bb335ca80aae8aedc8a9d0232def68f205f111b5becb6276883c"): true, - common.HexToHash("0x32a8085c1376a56f2430e2fff3b6b4a92211ee29f70b3e5d76f9d9db17426872"): true, - common.HexToHash("0xdbdc1b2aac7191f4c47a8cef061210ceb23ad599451d6bfe4fcf5013171b138c"): true, - common.HexToHash("0xad10427bd27fb32026a638b715f0fb95b321c1594255ca9660c168813484d67a"): true, - common.HexToHash("0x2cb8cc387cf3fd10c87689f4a71fb5e15e3b9a8e6c210de8eb236fce51c1d5ae"): true, - common.HexToHash("0xd661d0f8b8535e449d5037b9869c25eac266815863373be4e970fd4f1fec17eb"): true, - common.HexToHash("0xc4591946db61050f61655d7ac87912e7369bcebdff28f857f72140a3a9c5a4f8"): true, - common.HexToHash("0x3968b69833adcab43e486824f709db93ecf01c9e561bf911afe867857b617975"): true, - common.HexToHash("0xa84f0ad10d0e8da91a3f9230114b60f643119bbdd99b5265c694839c9f7c64f5"): true, - common.HexToHash("0xd4738e3efc0592f87c855d2359158ae9366ff4afb8915e4c62f40a229e6a6a1f"): true, - common.HexToHash("0x26735e9897abeef6378a5e685ef4226fff58fe2bacdbbd5cddd99f19357c1f7c"): true, - common.HexToHash("0xa64291c62ded0ecd8c87fe0b831854dd9629442e89a93f1f13f42f6c8850daef"): true, - common.HexToHash("0x147c5e14fda41051a2c3114fe72789305c13631528a57524a61958a67482826b"): true, - common.HexToHash("0x63eeb4b690d928906ffa538adba5d10d09a0495a374654a9dbf30fb93e8481c0"): true, - common.HexToHash("0xe7c50a6454337a7cffd5ebbd2cc8f1d84c54855b292ccf9418316fd0e44d1e47"): true, - common.HexToHash("0xed9dcfe663f0a69128ba5572dc4a6dc72ae4f52cc2ec46be2be4951186941251"): true, - common.HexToHash("0xfc9f1414fc5c69ed421057dbf381dcda712f05aa48c65dce6d7042af73bdeef0"): true, - common.HexToHash("0x52c049c24ba5397b910ea0dd9e657bc1f4ba1e6a0d87881eb7dc55dc54cfed0c"): true, - common.HexToHash("0xce3c5690885972ceadc690495514c106d9c3d7bba8b6582b6b3e6660de8eccd6"): true, - common.HexToHash("0x58c065cd3e5f05da7e4fe3704b9d8a41a92aecdefce478334cb7f186e7be8988"): true, - common.HexToHash("0x695d794cb1d1aee553d92e0a0de011bf371a523d0270337d8d1e7dd2577178be"): true, - common.HexToHash("0xae8f03b380c666954358d5d1618089f97c4e96b934ea2af52cc06dcb835b030d"): true, - common.HexToHash("0xb4487cbe4ecdff79b15d80c8f5780460664ea7fa06e4178c47c7f15cfe7cd698"): true, - common.HexToHash("0xd5c2eb022ecc6b51740938001f3b1ca24aa3bda4c41e63e303b5150d9fcd675b"): true, - common.HexToHash("0x02a5128039eb2750327ddbe8e345c1b293ac92ba4190de22bdd7591a8dd42cec"): true, - common.HexToHash("0x911e2bb5709c60cab453004063154847ae02a293963b41e1195a1e558c1acdef"): true, - common.HexToHash("0x7bf1231180657d3a60c583aaa9d13c8989d5200ad425fb25b4b86ed417d4d280"): true, - common.HexToHash("0x637c2ec97a05dae3131b5b7a7400f30f00a01affd136178f28f8a3dd956270e4"): true, - common.HexToHash("0x0d373ddd1558ac3ffa07cd6d11001e425ea302c2e23c5dca3356852e11fca62b"): true, - common.HexToHash("0xb20ed36ca1d9293bbaafd961f286eb134c8a23c288ec1fccbc5ac83d32c9ac48"): true, - common.HexToHash("0x6463386b3ef6c1b65058b08217d01dea179d528023d93953535658582192701d"): true, - common.HexToHash("0x8c45a3ce5ad04b1f97302007983742777e9352d64281a4c1d2b6bcfa2fb8d032"): true, - common.HexToHash("0x880a5f73e8fa3ea1c74b59e502e0352f280020e66d599a3da674261fad031f9d"): true, - common.HexToHash("0x5014d5584e254b7a52cc12db022e12661fa1deb7e283b5d8d47490ee26e1eddf"): true, - common.HexToHash("0xc3503c153fc1875e94df0184b59799310a1d699cf304a838cbfae877b2000e21"): true, - common.HexToHash("0x604dfc1da930232f46d35c851d098272f8af75af69a9d9c0fb08d07b2fc41181"): true, - common.HexToHash("0x32ba8f3f27a8c6a051e20162a183bdd6a49c7f4a5f5cc98d4e40cd3e83652313"): true, - common.HexToHash("0x5cba7ed9bcd80a12016463e41e2504984b4fceee0c6fdf034902967dc4b46152"): true, - common.HexToHash("0x19a3a716e792d5e93f89c8d5212d13904c41cfd28feb534d5364141d76483412"): true, - common.HexToHash("0xb43d5d3067eb14632771f2ce9ba1ac03f37191599f7df0f28e24d5588dbc977c"): true, - common.HexToHash("0xeba7a0fb18f72da6503681f32e361b842249c002c437ae93c82e5672e4835503"): true, - common.HexToHash("0x259c2dcb221c6f21fa7b43c731ffe9a6e8e89cfd876076b5832ea0dba0e1e3f8"): true, - common.HexToHash("0x31e5b2b428e90efc1c29eab69825ff75a7556055f2c0346e0005313bd1627bf7"): true, - common.HexToHash("0xb06a15fee5387917c50cbfe22d6d267d82d3d6670ca72738a7e11c965098f831"): true, - common.HexToHash("0xeda3edeea780cb081eb2edad3c3219d3fc4d2aec03a7445d1e384b7b4f19224b"): true, - common.HexToHash("0xa0aa371e4cc71440cde096c79c94189e81d05d8fb1ab0244dafbcd8559273945"): true, - common.HexToHash("0x9cae880658b74882d8fa99f554fc8e8a177c5fa2c5280a3d2fa1c1bd26bff56f"): true, - common.HexToHash("0xd01a45a7603504e7bdf2e1729efc556a4b5a7d7d4bebbb683276b9e8ff0d9000"): true, - common.HexToHash("0x64faf9a8645213ce284aecd3b7fbbf433586b03e4f5856f885a9bfa8d0cf9773"): true, - common.HexToHash("0xc39d702f9ac0afe2ba461ffd6415c58caa7c2121658cd1d7a8fcd161dbe29d99"): true, - common.HexToHash("0x8fdea1d602cad6ca3c2fb76d8e398365ba4a1e680b53904951295bd20afe38a7"): true, - common.HexToHash("0x29265ad6b92d15b86eb28962a2d40225232abc474b252a8f2b39105e79683c03"): true, - common.HexToHash("0xc2c81d6649969601c12a44bddeaad78ef2961cb1283ec56a94bb06afdeef37da"): true, - common.HexToHash("0xc8cd0d9f8666e0d96bc4b3d2675d8d92749a6fb8050475d475c68ca1d822181d"): true, - common.HexToHash("0x3e2c03ff17dccca6ec606123cc4bc941fd559f121460f8eed81370e8fcafeba6"): true, - common.HexToHash("0xfb4796344ea013d2a279af72a6a5db255d10eca3221fb46ebe6bf7b453286b3f"): true, - common.HexToHash("0x32becc7e3b0d9b2a6ea374f72d7b60f8f85758d014ce5ff417e8b20880b9815d"): true, - common.HexToHash("0xc7eadd98b3bddbf680693449fbb1a139fb591bfb34b801aafd7ed479098ff1ea"): true, - common.HexToHash("0x82651d67960e6021c317256d52dccf96346ec244b8e45cfa5608c2448f71eaa5"): true, - common.HexToHash("0xa96abf37e28ddf5dfe3fea2c132b250bfa174534d61414c66e9ff106686f99fb"): true, - common.HexToHash("0x4285d3fff5b8f24c2b2bb157b964ac73fe149b20b61f86aea84a7fb9d49efd38"): true, - common.HexToHash("0x3d0c2a6ed92e6b877b110ae87383abd8c5b916447ac96457282bab20f7128852"): true, - common.HexToHash("0x5bfc7d057413a41b631d9cac5b807e8031ff94129f66294f08bc4119c60c40a4"): true, - common.HexToHash("0x90eef15a0cef33ea6caeb6fe567f3f6ea300f9cdd321925afce20a802b97f647"): true, - common.HexToHash("0x47ecc548cf215d81b732df4d3f0fd2c629019288c4dd9c5e24806c043c50d6f2"): true, - common.HexToHash("0x61db92e51fbc87f3570b6724c34f2f0535008dd413842a7f45d426ec6fa3ca77"): true, - common.HexToHash("0x4911800c4bf0deda0e368ff601cde187784127edbc18f8a5768e3e6e56468668"): true, - common.HexToHash("0xd8d3802d6f2ee12aad8c42230d946bfecbc889aec69abf1982010a2545b32f74"): true, - common.HexToHash("0x3ffb667e750010297a8903fa21deffad167eb9dc804a2c6c39ab0fe978170207"): true, - common.HexToHash("0xe0a3cfa15f53e3d922aef213c85a2a4f46cd6f900ab938bd1cab22d00caa3a6d"): true, - common.HexToHash("0x9b530317663f81332bc9841861a8e788afe9b31fd1d664332ebadbd0023139e3"): true, - common.HexToHash("0x601c84ad42763c87b0ddcbfdf8f1b3b46de36f715a18a5790a652a96a7839abd"): true, - common.HexToHash("0xd1ec1a9ed4961a5c8a1caf0950cab4804f569078e7b75fe52633d30e2819d94d"): true, - common.HexToHash("0xee8dab435cf64d8daada1d5284fc599556e6083d07719988bb69c6642991a803"): true, - common.HexToHash("0x39ec8ab0d1c01abf5641f85902107da16c982a84e132812891efe7335afe984e"): true, - common.HexToHash("0x292b857b6f49e1134c80777c996ce343d053377beafc61bfc99b74de66370977"): true, - common.HexToHash("0x9a0939d35c093b375ef54d9422cbd6ae609cbba9e7216cc635db38814dff0c30"): true, - common.HexToHash("0x3d885f559f085359703b8236d29b83ca199a072e240107affa52cfbbd137456c"): true, - common.HexToHash("0x6161dabf4b3b507455200fd6ef78efac50a167873c90564e097faa2aca87c260"): true, - common.HexToHash("0x5ce33ca45fca1a676b2076fce0cafcfd50a4c4854ae9e54c0ddef321d89f4441"): true, - common.HexToHash("0x99f88eaf1a16178f58b500607b583802120447fde09ce5cd2e944caa6cf511af"): true, - common.HexToHash("0xcd4faf2a3feb5e99b45bbb60e5fe6663ea005a525b0a4b2599e545d4b864291e"): true, - common.HexToHash("0x70763f797b482bf6744e5a3a3d72cdfdf7a2ca8823be0ade40f836c9c2dca012"): true, - common.HexToHash("0x8f5a6223696cfb48a375caabff0ffb4cd622eaae7ce9c62e43b074ec478b4239"): true, - common.HexToHash("0xa0ff94c71a1e5cd8411e6d0c460c99667ed84bff51f2d7f51677a2d6a661bae3"): true, - common.HexToHash("0x10d8b7263987d58f2d87faff1e0d84360abaccc3f12a715e5432cbd84970f35c"): true, - common.HexToHash("0x1eea797c779b7f5307ea7e1c32c64d8c2d1b807fa2ccbcd4be95aeb9daf1605f"): true, - common.HexToHash("0x4c967ef2c45d7c29a5183eb8467afce0af763b3291e987239be99d31f0cfaebd"): true, - common.HexToHash("0xc22cbf9257c6c4584c6fd546bbdfb7fd3d1819e17e65dafcdb3ddd118a14a322"): true, - common.HexToHash("0xd7154c4d5b587818e1c87e1fc850676b2b9c233deb70a6f59a845d94e7caf04e"): true, - common.HexToHash("0x0241ec8ea24dac82bfa64b85637fc812c127f035d61662a30f65ae10e85c6f58"): true, - common.HexToHash("0x81554c43d4ddc153965cb721a8a98fa77b45733b820bf6778abf6b599d36ee46"): true, - common.HexToHash("0x7f58436fd367db95900ebc0de62888cb99d8e43730cae25a191083d80c22a124"): true, - common.HexToHash("0x06b036b84ccefd78f540a803c18b6872e6cc2ad8e2ea17f67d0ad16529170da8"): true, - common.HexToHash("0x4541b9dbe97ded20ca5ad17dfe562681d327478488da6e841d7fa27ee5484510"): true, - common.HexToHash("0x58f7be37155d91eb95dabf4117cff1c4d53d4b1caaf0205dc0b270132c16b657"): true, - common.HexToHash("0xf1179927611535cab311b16feeed6ee294a82ead715ff1586e29538de708a28e"): true, - common.HexToHash("0xfb0e59bfa1bd05e08b2578c7f8eeab026151f00b891b710912bb85edc93318eb"): true, - common.HexToHash("0x48a9e0d0449626e8e0b9274f56cae12f42cf445c60978fa5f554865275d977e1"): true, - common.HexToHash("0xc1ff0ce10380bd12631abab9c25e91bbb0fad728a39384874077411d2260ca0d"): true, - common.HexToHash("0x6b2d4b5562323444e141b7bfc689a547587e0c708d58372ad81a0ccadf61adf4"): true, - common.HexToHash("0x7093ddd3ba4d39126d0ac845e1167314e1f6ec4b8fd973ca86698ce401fb529f"): true, - common.HexToHash("0x52662afceb2a8e39d4363421ba8d63671a9988da81bf2b0aa6ecc8e8f7d82e87"): true, - common.HexToHash("0xcf762678bdc947361d3f0d847149c0409b8d91136caf60eb6a15bab2a59c716a"): true, - common.HexToHash("0x11c0d39fb8222ff85c4f106f2f37c59d5b08c5bd88d6b6c1d0d44052d29b6b96"): true, - common.HexToHash("0x2d8058a084aadaa6027d12e260380769e89fdab8afa5e25ceaa79f73720e8f4b"): true, - common.HexToHash("0x0a87b4412df29c26e0f244b398f8831183753271b73a604e9d843a297f73d878"): true, - common.HexToHash("0x02bf8f387beb248054d3582ac7fc37cc23f5b2d340553d92405babb95b5bf55f"): true, - common.HexToHash("0x2a8b3a5066e1003737d4c59c832d7f6c0c424c1beed02be79c96b69c50dd9563"): true, - common.HexToHash("0x6d442b1f27ccce8cf069c3d68df22991d5b683eb75e430d7e73647079f66e204"): true, - common.HexToHash("0x8e837124c15ae846fd00a8e4242a60293b68f6da7f177a31f98dba8746c3a547"): true, - common.HexToHash("0xbfead2308ac1c3c994ab6dc20dc98ed084f775a34bc3da846c5afcab1c69ba75"): true, - common.HexToHash("0xcad83c26fe971b650208c4fe1af1776771583a878767dcfb58905a8bedbbc6f2"): true, - common.HexToHash("0x8aa564b5cdb5f132b11bac2a3132218e77bc916f335a8b2ef5f48dfe84c3af74"): true, - common.HexToHash("0x35f7dba6254373c48fe34aa43bcac1ab0bb55830b888e01f945cdd268d4af370"): true, - common.HexToHash("0x05d7f1054628541e18524d0fd17d3ee38a29bc9f9db6449532c82d1bc70829e2"): true, - common.HexToHash("0x27fb289bff8db89289bc1122b3fd0a841ed07f4133189cd18bf81a05a7a29b7b"): true, - common.HexToHash("0x1ff58d0bb407ddef7c2ca7d463e5bd208de2b84b7d28d780b846ffe865d42b1e"): true, - common.HexToHash("0xb38f5c904e90864fd06af7e0b7e8c2d54362ba4f445d1e125a9f7f14e27ec72f"): true, - common.HexToHash("0xead28d4f22b5c26793bc4c6dc3a98f3307fca4ddf9d8705e49b4cf1a816f468e"): true, - common.HexToHash("0xeb45d934d1c64b7af5afdad4d5823d7a2d3d41ef8f1a69357faeadaa3b26269d"): true, - common.HexToHash("0x56243e6e7358b3f13cdb43dbd39425ee3f2c454c77127ada67ff9047e379fa09"): true, - common.HexToHash("0x8f555638279bcf186e9944d4e44cfe642dcc3c69e3985398f2c9d5b9a12749ff"): true, - common.HexToHash("0xec609411d5ddaca195ce3d34c249c12490fc8f682c57290642b0cdaf4989dc31"): true, - common.HexToHash("0xaa0808d62714902c14042c9624cb058dd783edc2bf0b4fe64289cd9520da29ec"): true, - common.HexToHash("0x40c1ff02fc06e486d58ba8270c7ffaaaf7549a4201920327eb6f01c04f1d41c1"): true, - common.HexToHash("0x5db10e60445eb92ca767ff3b415b7f414ad2c95625c7ac64e6d79c7d38605658"): true, - common.HexToHash("0x857fadcc0244a6dea5e46dfc193d2877103b57f1d5569df9b9ee2421b9939d4a"): true, - common.HexToHash("0x383670f02056871943d5922149075156fd85cb262729dcc86e75ae359274a515"): true, - common.HexToHash("0x8518e7308ab04546282e55138ce54fe89592fe771cf572438a3582f70493549a"): true, - common.HexToHash("0x7e5c860a3df0fc8c5909a025fe2a2672c57e66cb046acf717d434f7f42a81ca9"): true, - common.HexToHash("0x991b22f53d8fc576dfb2e042658dd765ba282cd716b95af6717a210340561e17"): true, - common.HexToHash("0x5a799fa4f9aa9e8be5f0fd4b66f9fadd77f8548f4affaf1921091c75a414a238"): true, - common.HexToHash("0x26a5eebc5d98b250df4116c7239a204956b2df03f7a537806c3a2cdc56e86df2"): true, - common.HexToHash("0xb96c9d124c956de8e1ac2b70061332fb33da72eca0edc42a5f71625c3e0e527b"): true, - common.HexToHash("0x0a82040287124bef0c06019d483bc230f0a0b01dd24aa0539bfa3021e251e3dd"): true, - common.HexToHash("0x3b318fb40720df6fea874422c0e997d26acac0c03b57f800111d529dfb82c680"): true, - common.HexToHash("0xb3242441654493ee1b9e12e6db2f732f8821b2baeebb8686d4b63716b1d022de"): true, - common.HexToHash("0xaf32f3be52bb739b857fb5ff2153bbd7a486de92ed20a9457374b68aa574221d"): true, - common.HexToHash("0x475474fc9b23ed5a97e8fddfc99c48487efcc340f0810ab3201fbbdb7b15b528"): true, - common.HexToHash("0x26148a1b154132abae3db812f505e41a60fd46fc068750f756976e31d760a533"): true, - common.HexToHash("0x06bf41398e90ecc971f2bcb9bc41a3f8440195c1ee4afb91a0a16f0d5ac27ebf"): true, - common.HexToHash("0x03e1ba11bf3e8efef3830789a7ed9ff1ee2c58775bfbf116eb6b1dd55fdf3f05"): true, - common.HexToHash("0x7a245acd437c973290cbe4baffa3cc81dcc505d00f96240bae2b4ff8f0861c9e"): true, - common.HexToHash("0x7c432e075f28c4601ef0ede1e925886fe008063bdf23bcf2b9180eada225291b"): true, - common.HexToHash("0xb08d8bf252cd0164030326a0bd6b9775120e4dc9b340640e2ce2fd5b03815965"): true, - common.HexToHash("0x96166cb3c710c5e412b0fbea0496ee24549d770bce2f62d05bec03610d594363"): true, - common.HexToHash("0xe42da0b3d857797c161166b39ffb3cb88985ad48c9b6b01e0aca0510b396798a"): true, - common.HexToHash("0x1e44c5aa80db3a96789a5e3ff735d8c3e9371eadfb4175e15c98f55b3d2897ed"): true, - common.HexToHash("0xd275cdce43f9a88712ed38b1f7cd39f4e383a42b93b19ef7fd8309ffe5cc1230"): true, - common.HexToHash("0x4195b76dac98988ecee5b57dc3edcbe15759f567944b97b7b3c04d31f78f6618"): true, - common.HexToHash("0x14de970de4a7e25584917c2747bc9018bed9cb4f1c331c3bb8af3bb745739aa5"): true, - common.HexToHash("0x4a29304d36e266ff242c5185448eb8f2c7e46ebcae06ab4355168620440c0969"): true, - common.HexToHash("0x540d0bdcbee11756c4ddc9af87733516b6bcfa68aeaa2be3af1a7710e3db621a"): true, - common.HexToHash("0x318b434364f6c9915d1f23b271704adb61c86f55735ea3b9c09d6dd08d52ec13"): true, - common.HexToHash("0x857529a33b8bf1a2e5ec2a49425ac852403837c3a0a1cdca6b8c84768126f40b"): true, - common.HexToHash("0xba17c0fc6239717c68751e6888a55fd15788d4ebae4a854b8809a1cfcadd69b2"): true, - common.HexToHash("0x78e43225b4639e9540339ca90eac2a16807b2a0eecbd39a8847fb6e688ff4641"): true, - common.HexToHash("0x6a3fcf59aaf9c7e80167685790a1a7989a1a3ee8d99ac0c69d5af434619cb8c2"): true, - common.HexToHash("0xb47ffa8fca10c1d1b16fcdb96a2ffff5abc08f1e292e8cce9555b8ec2ecc3c8c"): true, - common.HexToHash("0x90703831d2cd100534266882fae8726923f4d60feaf16f7e9c835b8e7f699798"): true, - common.HexToHash("0x8275b7190d15c9c27dd7da8a0f07c4aa9c1028204a00750505586ab1556a4fd0"): true, - common.HexToHash("0xa4f8cf32b4c0b6528db55cf41dddbc6b129cb77cd357cd0e446fc98d5b22fcbb"): true, - common.HexToHash("0xbd3dd0ae7fee8984b70b543de9f76f79edc0e9faf3f0c8e88332ffe1a0e8df1c"): true, - common.HexToHash("0x508ade0e6adcde460b617e7ccb2415dedd34b98f9df07147fdceb59878a2635b"): true, - common.HexToHash("0x25cb35991f791f3189f5f1ae7ea77ce9bf92d7c69d141262ad049c4fd1916131"): true, - common.HexToHash("0x867e19627ff74610d98aa467956d562ca5c224ceea3d47c7a2b29906bbfc384f"): true, - common.HexToHash("0x0939fe1ae8cb16202fbf93153d560b6b32bafe7e7d7777287efdcc6bc7f1d67f"): true, - common.HexToHash("0x9369ef326a101de308986ed50867bc63f8b75c3fa6480ea5bce231d125418043"): true, - common.HexToHash("0x686a045208d3eb84cb7ca46a50dc4fed31e15b4d4ccf502fedb1a8be4f8c4634"): true, - common.HexToHash("0xa1826899dc5757648785da5df34fc9bff1b1390784f5d779988a0782fd494df5"): true, - common.HexToHash("0x8b4249df5619839361fe1891ad43c1f22148b4e0fcefdeefb6e5f89b13b8d8af"): true, - common.HexToHash("0x4bfa1c744a8f94085920bebc2feec2f7353bf0b5ef7d19ee72cf6284629165ec"): true, - common.HexToHash("0x344f5b77d76c9b45348006453f8acb23dc43d0771d4fb45bd198c35d4d6fce96"): true, - common.HexToHash("0x55989f581fc2944ae317d07c7945f83c1a0dde33e2d176145c54aa0cb3707ff1"): true, - common.HexToHash("0xe3002c0fe766465574e50dc6834e4d5c0eb3474e51cb7e7ab58946038ad44324"): true, - common.HexToHash("0x4a70f2a76d728f921ad33cb261f595d3006aa66c57eeca101676f51bf743767e"): true, - common.HexToHash("0x8b6730cbfe63d5e4a3de6a7c7b0b2705b9787c5c3b8d68bc7a98b92e486b4336"): true, - common.HexToHash("0x1014fb46ee9d9d33a369ec4238874fa2bf08f53c440647a2db8c17336cfa20a0"): true, - common.HexToHash("0x32fb06e23c360ebfce0d9faedcfcac10d3cfede97f64c9d5817dc54246ff7e68"): true, - common.HexToHash("0xa9f8612f4fdf09433fbe149d5afbea26285f819a131c67f3189d1b64103d7010"): true, - common.HexToHash("0xa637bc81fbcde2811f0e69fa1cefba207e42b388d8a7cd29f19744da17d36f75"): true, - common.HexToHash("0x50a86ba8c02bad00ed983650fa00b73d898d14faffbc00341051c792d4edcf73"): true, - common.HexToHash("0x133dbcdd1d4872c1f1604a8af757054110bcf589a1acc5376a37d54fa1338911"): true, - common.HexToHash("0x5b11427a76b8a2de0e8de83c81f267aca53b3e16d875c4ae0875559d906eb9b9"): true, - common.HexToHash("0xfc127a1044c4a6c169bb718586e91f9874d067727c38c6d3155a510c044af919"): true, - common.HexToHash("0x3485d17190166a38e777932bcfa30514aab05314eddcd05b32071a5260c4e7e7"): true, - common.HexToHash("0x3990e5087a9dc434d603f76fa8b4061e17da217892886afd55c94eef73b1b5f7"): true, - common.HexToHash("0xc5a1f298fec8cff41668127df38360cddb6c84acb4374fc9feb7ef085130b708"): true, - common.HexToHash("0x080012b9d2a620749fca3c4b3567c2373ba0f3c23113f85d36c968481ffce467"): true, - common.HexToHash("0x5d87434e05003d20d518b2f6815c018224595df1f6a60d2120a6cc524bfeca85"): true, - common.HexToHash("0x23702ec5f3c525143a5b81ab0509bf79e8a18a1d9f42a6fe17cc2b3fcaa38be8"): true, - common.HexToHash("0x6dbd40e57d3e4ecc77ac0f9323c703e3f5d083a59e8ddf83a66a0243dd369883"): true, - common.HexToHash("0xad0a6e7d61944d4ffb74455f1bd7a042c4ddf01ceba482563bbf9fb7240dcc99"): true, - common.HexToHash("0x157e97cd04ca19d1a1624bccc9c0cddda48c63ee61cc981f601617c81e3b660b"): true, - common.HexToHash("0x33d1acab51a3dddb4b704e9b24bc4d744327c0b12417e7d764649a7320c1e92f"): true, - common.HexToHash("0x4f8f768e3c8eb6ef7cdd4784b8ea6e2a54bba664316b34a829fca5afa5726ac0"): true, - common.HexToHash("0x803b0b60c68fb9eb003ddf6893f9d475b0480c542be3aa61040e4c50b4051212"): true, - common.HexToHash("0x7f21039846847bd8fb89d5655ed40c63f80854fbb7c64369974d00dfe2fdcbfa"): true, - common.HexToHash("0x8bd0f1dc12c67fb2b6144b392223da4b2290489d2f57b0c684af708093dfba81"): true, - common.HexToHash("0xf9ac3b69651a87311d19c5528f638c4fd9ab762b0428f64c1db3b214da1b2c62"): true, - common.HexToHash("0x383ebf351305f5603b227e03920bfb072c2685149dd927bc58768d8b39dfdea4"): true, - common.HexToHash("0x9cc380d997b9f990d4c7d4f8cd203cf77dbc3d3d480a42b7dbeedf0dc7fce97b"): true, - common.HexToHash("0x53989ae4f77be6d2c8c5881950b6e0357521b7e329f0a3562e88a1db480206ad"): true, - common.HexToHash("0xed9ff761f11a6321d97855f82748da10ceff9cff22068fe2ce5ee6897937e5f8"): true, - common.HexToHash("0xb0b413b93f8adf9fe2c7e5e8915f55f87b6bc6087c61107f2b8573eaaa12cd33"): true, - common.HexToHash("0xa86c8c9ac34bc9c819c7fd574128e1ca0c64fcb38b530161e77c7729177e94a7"): true, - common.HexToHash("0xa7d0c12ca96bb3050bcecb579814b01c1486bbdc282cd456da0303513fd0ff15"): true, - common.HexToHash("0xc41756b7b8f20b399e8cb711eb96d1f6511283a48e6bbfec09a64b08c894b2da"): true, - common.HexToHash("0x1283e846593931cd17ee60f6c16c7bf6bf64931a2dc3a865711f19c6f8a3c238"): true, - common.HexToHash("0x65f35a8f8cee28aa3d98828bf7f8e79fbe872335bc40bfd4ef54e7d1ab441d64"): true, - common.HexToHash("0x6fff5cb5fb81dd5e3494ee77f9206c6666d6542a0342c32cbb67a40907162569"): true, - common.HexToHash("0x95a4216b8112ef5fbc3d3bdb156f73b6507e7c865550d67c8e525e07695f0369"): true, - common.HexToHash("0x1b373e68e3abcedf35d131a49e52355a293f05d6f0723fbea8338a8a1ffa47e3"): true, - common.HexToHash("0x0f772a9abb09cada77cb41d1c30396aca7041b652b4280a87cdf8b7d4bd1065b"): true, - common.HexToHash("0xdc33bbd6136df8f6b89588159ee5f19a5b5f8498c3808ab767cfa0f3675767c7"): true, - common.HexToHash("0xae0f429679d9c981bf49b1b05177bbd08ae3c76f7f397abc949ee5a0b1acd665"): true, - common.HexToHash("0xc60edd06fc67d9218d43b97f0c9ab1f376a45b16d7387d937bbfbe5f4c7ddfac"): true, - common.HexToHash("0x978fe4b49b01ec86be752da869d6c7dff617409f3f330e23af2e77760005d81a"): true, - common.HexToHash("0x4d5ce7dbc1ff48906d07375f4ff08c32ebb9ce46784aff38a74d9d18d4903955"): true, - common.HexToHash("0xed1b6a5446c5f5933ca1a74a9e7c1265946c7e038836074ec877cf5e248a7f81"): true, - common.HexToHash("0xe5c995c5a6bd34c7e352e1684a447be97dc9a02b1cf05b2373ee1326a824486d"): true, - common.HexToHash("0xc2d3526953ca4ba8bfdaca5567aaffe82ad2a9a9a89c14dc8e5e62dec8b158b6"): true, - common.HexToHash("0x75d74f36db0eada34fe553043745bbe949baf2a6719b84190d9f1ff9c2788af7"): true, - common.HexToHash("0x3fdbaa4d9f096dd009137e224791f49525b52f4f0913ac5f184240b3d5ad7359"): true, - common.HexToHash("0xa1f397b51692f82f2e983b430c89bb0e19b9547b066132eb4dbd54dc3a4edb0b"): true, - common.HexToHash("0x422b8bc448d5abb4a91eef423a3a784ba5798f7a3f047ffb554b8bd7ddea6543"): true, - common.HexToHash("0x88423380af869d8937c7f074ec962866eddcf5c5fa410905a38630a172824a8f"): true, - common.HexToHash("0xf99e45cff3ac14cdf1c07ba485b842895ac69cae9e92d3b900bfba0e28ecd7cb"): true, - common.HexToHash("0xc3d6942582871583f9deeb106d7f33c5d11ca105143f67ef9a5bbafeed7573a3"): true, - common.HexToHash("0x1ea9ab3dfd35acada1340f532b1a14b0aad161e650a1c421379e9e7178b36208"): true, - common.HexToHash("0x486a82358ff15549c95571e2a1acd5bc3992c6be8bf3928c97e363d4148ec9e3"): true, - common.HexToHash("0x71a336bc6627fe7668a4b4df58019e816899751b578f19ef17cfd33b57143018"): true, - common.HexToHash("0xbb6f6b780c6f672d285001feacc53d7860bc3065c9d07b13088caafc9498b993"): true, - common.HexToHash("0x9eae3fbd9ff1c65d80896271e9f1a6f15449e25934171e7e04b48473ef35ab53"): true, - common.HexToHash("0x617d506b8e371bda582c14b9473709d1c61048521c779123f155e221dbb36d4e"): true, - common.HexToHash("0x7b1934f1eefc99b08ca0de98a31eb6fa0d759061969855b8593794c5106c4fd0"): true, - common.HexToHash("0x5b305748c028a1fdb33e92d35da68e70b1982f9b3658013e29e2b22c1bd5f6c9"): true, - common.HexToHash("0xe5962f468988ebeb62d2edeabc19e82dfa32010ef7226c1ca0e55f5b9e1aeb91"): true, - common.HexToHash("0xa3bc74bb0a8922551c1f05fae08b97882ec024c1d38c108d29b38678058f8506"): true, - common.HexToHash("0x6dd50e7a1486e6e03336350fa79dda92440f0a55275a340ae5d8bce632505206"): true, - common.HexToHash("0x526b8fd610133b1c2968d59c8103641b635cf03d31dbe41b51381432a12703e2"): true, - common.HexToHash("0xd769ed3fbeb167878f4921e4b3a36afd5e52b5a4897954d1ae18733950463d70"): true, - common.HexToHash("0xd60150eeaa53ba4c8413027dcd7a0be379020fbe5b191cb8fab2b0a8c1b98db6"): true, - common.HexToHash("0xcf50067c6d7ef237b95f200f7ec1d24c623ba90b93e86e7aa9b8d5726a80ba81"): true, - common.HexToHash("0x57d59a041ae76c7252f5e88456ffe68d3ecca1435c98d6222b0554adaa115fbe"): true, - common.HexToHash("0xdb11b34bc0cce98bedfec926b2a71ab24677eb885e1bb33cf030d8524727efa0"): true, - common.HexToHash("0x388476b62e02e1543327bd660ad2f6085796b46e158a7269694c44852037701c"): true, - common.HexToHash("0xd0de015c1175bb11166974a53f3de5e0cc63fc73485691f9e972cd4a0840a11e"): true, - common.HexToHash("0x64e40463454b63cbb9636100b0b2f36fdca42ea1621ffe0c89a818f92667dffb"): true, - common.HexToHash("0x76d9c285092a8440a6f29a9de7f58463a71f7d414e03858010657c6bd02f22c2"): true, - common.HexToHash("0xfef541c35a9daeff7fe910fcf5ca3f1de39d583380aeb4032b72d032b283fd91"): true, - common.HexToHash("0xc1567131bf5369a991acc112a7a608a506dce55081989877b32fe0b0770b62be"): true, - common.HexToHash("0xbc4343a911a8c28e9237471ff899924ea7c6d50d5df5d5fc97feb911ebb0e851"): true, - common.HexToHash("0x42f558727fd5d45c2c08d8d56fa8e0cc8aa965b310ab8040438b6fc5f985483d"): true, - common.HexToHash("0x5e59b96476f704c20a02fa1bcb71d8c5a9128c971e18cdcfe68359f1f8aacac1"): true, - common.HexToHash("0x1c6012da45fdf19c1a0365d24dcf0e14151f45dfb1b78356ade9cebc37f9017f"): true, - common.HexToHash("0x7a48784e332e0517b96241cbd6bf6a55711e6289b96371bc8e16d7624252d608"): true, - common.HexToHash("0x1785d74357552698f53d324856ea54e7bf0845e2fb1bae55b728bce7431e362c"): true, - common.HexToHash("0x3a572198120be8e09508a1265862e5426e4c16659fb56abfcbe5933855f189f1"): true, - common.HexToHash("0x54f5cda9c38e271abd3e83ddb78daa19a965ee560bd397a2720a302c1fd52d18"): true, - common.HexToHash("0xdbdb4b86cdaac7ddf74569c6c6fba86435eb61b432873f95448bf9c0f8f13bc5"): true, - common.HexToHash("0xe88fc014d0f6035b5549799e052e6a9b556d6a11668c977811d27d874d71d700"): true, - common.HexToHash("0xca319e0a25d9090533bc71f993748cd9e0503fa3c2680a68987147cffe37d0f5"): true, - common.HexToHash("0xf4cb4d83dd0fc71da7e00da1e1fda234c53c0c40bd44d228ee5164e6ba750895"): true, - common.HexToHash("0x5bb540a216f9fa04f2c96a1706d741ea0d23d12f316f230aded361a46443d2eb"): true, - common.HexToHash("0xf0d6e981dbf9bae5eec10e742dd8c52c60cccbffd61e7d71cdd89989a031f387"): true, - common.HexToHash("0xbe3b973249cd25987eedc3720d71744fcf2025b921215a72c3e4ac8f571640db"): true, - common.HexToHash("0x1ec8f29ad8b30120d8a40098f8ef0ccf12137b5c329ccf5b2eac4e3e9aa5a5d1"): true, - common.HexToHash("0xdced0f570e99fbe6699d14ab6ade5440f4b401b960181a970f39e2490e97b8fc"): true, - common.HexToHash("0xb475f6d34feabe3a6ebebf2a4dcdb835f636391baf053d70b084a8658139113d"): true, - common.HexToHash("0x207ca1b2c97631cac07d0d365534013ce34f3f1df4b4f7868e56410940872246"): true, - common.HexToHash("0x0e2605f21404a084f518914fbb10da58da0d2b026a0d4694cdbb9e90f2af0613"): true, - common.HexToHash("0xa22b959a24e2bf0f1c853e92ff6e3433d0faf7b909e81844ba3a6a3f97a20d3a"): true, - common.HexToHash("0x9b526c39ed9ef256e78e9484dd6f3b288b6944c6210862dd8121833887a0a551"): true, - common.HexToHash("0xab0333c08b000177f9d029bd637008bcfee281e56a07608bc3af78de60177ab2"): true, - common.HexToHash("0x10f2e8f1dbaf2c85debafe326b391c8e0b726e7fbc27cb3075deac8f5f3d0e09"): true, - common.HexToHash("0xbaa63927f3b87909f3135d3d2c6b6e406018dcf7bb77495a7441d5ff770a98b6"): true, - common.HexToHash("0x636817126754ee89d4a6c333139a6d10d79cfd3b8145931aa3f53e0ea42590a5"): true, - common.HexToHash("0x32a27323073b8e9ae80378551a79f0301be0c04ae4e85827adca2b73478bd5d8"): true, - common.HexToHash("0xbf55e807a83d6a9f34711d8983318cc8ac8ffd91507c14be364ccc02fad01f47"): true, - common.HexToHash("0x25fd4d654248a1a539ec0c6db82299e0cd235e55add8332573782f89bd0c0938"): true, - common.HexToHash("0xeb42961108201f7477e19dcea6bcbfe1ebed49035298272e9a6a2a7b2c69d25e"): true, - common.HexToHash("0x17c7ed7a327f8bf29f6c3949ac8883a9d07bfe6477d1c19f69c944f080856c97"): true, - common.HexToHash("0xb2bfc6eb084d8d2c716b538bb1d80c190577c73e73da7f03d79226fa01d26f16"): true, - common.HexToHash("0xa01ee7e12d9fcddfc486f5a04b7dbf39c06e0c13163e2bc923493f4f90982009"): true, - common.HexToHash("0x8921683b18eac51f8bb5278b847eb5005c02b3ae0000736c211f0402f841b05d"): true, - common.HexToHash("0xc38b345ce2c746e657fd6d4747651cc214d5d02c8a2cf836acbaf1b130c36a15"): true, - common.HexToHash("0x7cf294188d99f7781b49880bced5e48b27669b9c5e19cfface598414b2ab0951"): true, - common.HexToHash("0x754b1fce8cf2f382b37ff626f7aac376814fa23f13750084d84a0ec014113dd1"): true, - common.HexToHash("0x86318c6ab971136011301a53a2a5c96eba824608c5eb06f553f07fc9b9cb7c11"): true, - common.HexToHash("0x7b05badd8dfba4402d1eafd19ff5e26bdd33b74c174a1dbf0b4d453bc4d3be5f"): true, - common.HexToHash("0xbf1c002f86d8f59623c1f896c2f5f9ff7d32c3f852c841c3fa4ff7d63b07b7ca"): true, - common.HexToHash("0xf7d197dd99b16858d832ce7c56387be7efd0176fb067cd94636b78d96b4096c9"): true, - common.HexToHash("0xd06893bda1289e976e690797259902dce7c23952a099680500b0413025e36911"): true, - common.HexToHash("0xf066da998b3d70825fde3bb497a1415f20ce1cd78a725410d633fa142d68439d"): true, - common.HexToHash("0x2326a823ec3b307613a51ccf6702770b4fe6b00b0df0a394328805aa62c8c7b6"): true, - common.HexToHash("0x205fcaeeff4fa72809561c6413061c6dc5b4ef4e1a13e4742b75f37221477b76"): true, - common.HexToHash("0xc956ca7c00ba6020811e7a1f37469ae36e1a5366d6c8405f9bfec9b95ed6b8dc"): true, - common.HexToHash("0xb6c9871b30ecac9b0eb75ab1626bf166990a24066c39f4493694dd1b3bc51329"): true, - common.HexToHash("0x8139185b832e602689db92980d0ddf9e625a08cc232a76739f2a6b73bfd268bd"): true, - common.HexToHash("0x4e49ca4486276c1bc16f97cda5dd3b020bf3f3c2f9e6c1502f9511792f67e9ec"): true, - common.HexToHash("0x2396894dcd2bc2004c8e15d79e81fe70a6d6bf7e49110eab71b7a05bd5933621"): true, - common.HexToHash("0xd567181f6020123ba0adc0d4b184fe09b19efac94029cf44ba62628cd5867cc2"): true, - common.HexToHash("0x70c85ba7c05412c7f3652356aacee4da0e7d0952ee99843dca6ef3db7ad35fa2"): true, - common.HexToHash("0x7a590eff66e77e4deb4625286c18d8f3c2381da4ecee9d84d928c93c4454eb53"): true, - common.HexToHash("0xe72fa03338bf4227a58e6a461e3e70e21416faad032c277dd54a53c82d473508"): true, - common.HexToHash("0xf31e7df5021347532db9fec9829ce43d244c2127ef748de2834ac36fb6ef096f"): true, - common.HexToHash("0xc34ac0111cb88bec0ac878645cdbc650191e8deaae1ba1b2e1fb9137342e7b95"): true, - common.HexToHash("0xbdbf0cc9e1461d4638e6ed3b376ce900c0856aab3f5bf5734510c237ae8aed04"): true, - common.HexToHash("0x799863b50ae2c3f2145dc079317fc193b547b6f18a2b7a9a2c9de4955ec6a61e"): true, - common.HexToHash("0x02057f0fa5dc5bed1d8bf07edbf6bd8ea26ba57d1efcd1182a5e1826cec99e29"): true, - common.HexToHash("0x4b231534a48ba6a39ad9838b6779099db98dfec40ec266c20b9eaad97ebbcab7"): true, - common.HexToHash("0x767ae3f9a1a31718b6967fcd5fa3b4bbd94292ff53535719961347b37f0a372a"): true, - common.HexToHash("0x75fd053c54b00d03ccd0b2ad8624eb59d8088da0b3c91921f63e403834ab7575"): true, - common.HexToHash("0x619f0d2d5ec214b47f5fa4ed261bfb6dd00f7b003b08795b3280b9b329dfd939"): true, - common.HexToHash("0x5c8895a333107c63c674b1ec9f5af9fc4f0d012c1e510a0fd91a004f5e594b42"): true, - common.HexToHash("0x911af6d3493c46d3b4029ac5141bcae927927604653fa7ace2f7366c19d4e38f"): true, - common.HexToHash("0x8d8e6e0d64770611078b7f09f2f7957fec416da3992defff196ba88021a05bcd"): true, - common.HexToHash("0x7250651532e42ac0e49e761f4669342a3f63d31a52e7b55afead9385a09256f8"): true, - common.HexToHash("0xf2b5713243cd8fcfa71b14683a4f73e4a3fd3b21b4d7f7bad5da5373411b1140"): true, - common.HexToHash("0x01f055a206bc876ab1c4389f25cc5e6c3ed41307b1433ffa7784fdbd1c550b22"): true, - common.HexToHash("0x403b98a94989ea1f9e1f23e7537490d2f18db826bd420689727ec3f121265986"): true, - common.HexToHash("0x2e0700002301aa64667dd0296043253ab68ae83a4260487258cabb71400b21da"): true, - common.HexToHash("0x967414f7612415b80a5ab57d54daf738d5e97c70ccceb7fe8b4120130fb0a61d"): true, - common.HexToHash("0x4adca33d4f5f6525e91830b1ae38f5870c980e1e286e2899694eee0d0527804f"): true, - common.HexToHash("0x968b9df6791c4440a5cf5986849f2c5c479673ba9c1449e3a849a38ef23d7686"): true, - common.HexToHash("0xb1ccb09e13db0e1ba93706671c1c9a7eea5f05616009618873aa1b8ce21604c0"): true, - common.HexToHash("0x01130903f03eaa85e0778dc46a49be5d910ac4cf934e7acda5c19f52ea32df64"): true, - common.HexToHash("0x30739c0138dd1cf862c83c80127927cf4ef61a0eff58ce629126645c0738efb8"): true, - common.HexToHash("0x073b2078288b76fff861969f0e1d77ecd4f146dab5f30865220f313ef0a6871c"): true, - common.HexToHash("0xd6dc6dec1b0800bc919d715eb39bb2ed51afdd2d5ecb4db9d61482f0c855d330"): true, - common.HexToHash("0xe3bf451ff9aaf7121d782f458c6d7216c013dd0ad42347a75a3dc491bded9bcd"): true, - common.HexToHash("0xa656d80756cf073402b7fd31a80e5b056bca740e05931e4ec057310f53955e3f"): true, - common.HexToHash("0xfd7be745cf651e4f8ce0d3dc9b12f0f215a5a71ef489da36cd310f318c2aba63"): true, - common.HexToHash("0x175bed8657a8e97123ebfcccfb6f314f70d947fc9cc0c61622d9a3b8245f591f"): true, - common.HexToHash("0xec1c77a0d793b81c01e25ff7545fe63c751afd4d78e705d0f749913c188c1f8b"): true, - common.HexToHash("0xc4bd8927d6cd5529863215333af6a93388ac3e5c18b919a12b072c294e913b12"): true, - common.HexToHash("0xf98f89c85c4ab9acb513239e7feced1f9f7abc03f0ce072808b86a1c261e5695"): true, - common.HexToHash("0x8a01dba3512834b4678d67d30ed1f60bd345289f184b847cc4b9d4a9dbbd858b"): true, - common.HexToHash("0xe7bdef843136438bfc035644702873d073985c0e905237a44859372e70be6c96"): true, - common.HexToHash("0x60ab06a8b0162fd6deb0b70cd8915e77f7c1a5e09e2a443464b6d0c8e7cf119c"): true, - common.HexToHash("0xe436ae26f4f6c5feadf3a96d31948c799589705dcf6958a02ee82241fb11367f"): true, - common.HexToHash("0xcdd18b49d00fac017e80f9d78fc7259e71e47196c35e1e7b65051a7a65224496"): true, - common.HexToHash("0x462bc6f4922a586b4cd6097b89ea34ef48253564a8ca2eaede353304aaab04a6"): true, - common.HexToHash("0x21b2e145e575ae1e13ec02b2809324c2ee78df01cecb5109447be2649e6a23d3"): true, - common.HexToHash("0x489b8c96b8de0c53b07cacb77022481b0e66efaf17d3fe8b367f9798dbf4c978"): true, - common.HexToHash("0xe19f112c4c45f53870afe9b04f5931a9fd59873b02c1a6c12ead4ab8010390d5"): true, - common.HexToHash("0x020835716a220aee6987147373946b02592508732c28252d881039087af9c17c"): true, - common.HexToHash("0x133d6af3f1156819f0ba6eb84ee0ec3d0c6371e03708f8606ea7071c6993ca45"): true, - common.HexToHash("0xe3ea2c81052cf37d7be70c4c6f383433eee2a081ef4d4647dd8a2af189c0731f"): true, - common.HexToHash("0x434a26f103e1cd7e5e8b13316fb4e08508f8cb9f0d1df5e5b78408cbbe60a406"): true, - common.HexToHash("0x30928254951e10f2841e54dbe15132377596438228bbd519364e5cc0cbf487c1"): true, - common.HexToHash("0x2e80c0597d81a50f54201d6a0de7464d5ff16a63d1b548c296923ae2a883ccbf"): true, - common.HexToHash("0x468c69aac390c23e0d602cd8e700aeeeb9e8bc76767c6c576af4186f21bab53a"): true, - common.HexToHash("0xc340d25e3e88a00747f71c717aa217e40b5bd415f524c5aa477646996f338d8a"): true, - common.HexToHash("0x2bdada3c10dac704ef7686aba5de4c4fb7386541e102da7eee06a750c10dcf1e"): true, - common.HexToHash("0xf44d15e922bdf71648a7f9ecbee3ec027c74b20d046ced2d6675ee56ed027ad6"): true, - common.HexToHash("0x091fd7584d9c16c786dbf3fd29cdbbc1bc0cddf87864c66977685acaab6f3eb3"): true, - common.HexToHash("0x18f3f65527ed99164ec0b02f24603060d00690c0ecdf2219657402d62ad418ad"): true, - common.HexToHash("0x46423f3c1d63147d8b294fdf0f1a6ecba90d33d84979044581d92eab55be4196"): true, - common.HexToHash("0xa1fd93aafbdabe0f4024b126de0be684e14c4aa517cea40fa36f59b00d073ff8"): true, - common.HexToHash("0x8e5d5f2978787cc0cff7e6e0fb303613ef7398c660e1bba10fdf7bde7a8fb03f"): true, - common.HexToHash("0x193c7c4481a754f885b9772cde8a8d1a7b7ca5ba5656c563a54d4fc1e79686ed"): true, - common.HexToHash("0x5dd4f45acb203fe7faa0cb95c08d78ef9fd41bf4a7516aa98c54fa5459a9911b"): true, - common.HexToHash("0x5aed609db6913a1d92fedcc2216acb11c69ca14bc84437d801a3e6b2e21edca7"): true, - common.HexToHash("0xf058636cfae00be33ee37919b1c0f331ef31d18952adada1d50eda6d2302c2f0"): true, - common.HexToHash("0x16c1c074a1a1063e4fab24f2c4c643a95b1d950219cca9a7c831a9c060a973d6"): true, - common.HexToHash("0xd73754f0a0b243a046c4a0fa068693333e8dbea4f7569361cc54429d205adebe"): true, - common.HexToHash("0x78e5422eaaa27cd7723b8703efa89690b9122f021ae054a44c6d78a0431438a4"): true, - common.HexToHash("0x3976f37364124d985576aeda566ae3d1fe267ec7fa28fda17fdc45ef75164b5a"): true, - common.HexToHash("0x50b4e0de3648dccd31735d2ac7bbcbe0f8608bed6db60f54c7bb28a34a71f6f1"): true, - common.HexToHash("0x46bff5244d06d3bbcfda5f2f593672d1f4949eefd2c5d06ea2192ec31dbee738"): true, - common.HexToHash("0xa971a50c26f75eb8a3ef52f7d34438379b0118764dc4ff259c5da4d68a625f8f"): true, - common.HexToHash("0xb039ee1cc8e2504028cc417b40584a88d6f41ed3a0fa24b4553d95633a8cece5"): true, - common.HexToHash("0xda604ba77bdec92aba8bf5b5f75203e749a7e81c2af7f34a5ae8a90699f58e2d"): true, - common.HexToHash("0xff3753645b1b01395d32bb336b5ec56ff278e9a5dfb0eb99777508cb1384b3c2"): true, - common.HexToHash("0xd07d8d6e6294611ce40104107bdd1997337dfec7b78ee79bd45ece84f7bec8b1"): true, - common.HexToHash("0xddf380972a10ba74a7dac3f1e44656100a0bd0d8aad0e3bf25842008068e83c6"): true, - common.HexToHash("0xa5b5bffdf774de28bf64902aa204ca5e42cf669e5dc2426f0a90fdab8b8a0f87"): true, - common.HexToHash("0xa3a8cca2cabfc381a703ac63eb683f94aabf9bb0329da537766fee3907dfae63"): true, - common.HexToHash("0x876485e4229d6328b3f5cfb11f9750c48fcb661ded3d0189d6470f0aedf37ad7"): true, - common.HexToHash("0x55c1080e0665e52ef4919af2133d50b568e267b38f3df991be89c7db4aa0fdcf"): true, - common.HexToHash("0xa064efb032d9a30001f9cf1aa04863a537624b0b61b41d17c0cc270eda58eb8f"): true, - common.HexToHash("0x817d37fe9c5b05d5e645c4f5d42dbfa0606df310e3fc8d175707d4058f68938d"): true, - common.HexToHash("0x49c73c37ebbdb0b8046049faefbf55c88c469d6c7a840dd7ac898170eff19f27"): true, - common.HexToHash("0xfb2aee1cc6ab2932aabcdafe3f138192e20452b96df2cceee722fca1e1b26350"): true, - common.HexToHash("0x67041bd5603f301fa5e5f1cb0a173858ba1ab3ff302afecb9e4e59b95d465805"): true, - common.HexToHash("0x8eb7021a7e6461ceb86d68ca33f71044c1e981b3a3dcce4e825f09ed07e8ce4c"): true, - common.HexToHash("0x2e3e10bf4b501bbf7bff59136113c237e8222988ea5493394f3c4fe9929f12bc"): true, - common.HexToHash("0xed83669a3e9ab362ddb0f555c34345dd1ede01003a51b588b62547119ac00bc5"): true, - common.HexToHash("0x5fd806c26b94bc3fe4d2ac20dbaeebed9d64a1f6811973f35bb43812fd6a5903"): true, - common.HexToHash("0xfae81102f6da4cd87b48043a3ede9e2aded9d26c0fcd121d2f217472c11d25b9"): true, - common.HexToHash("0x162e2b3164c546356f5b7a004a59af57e69ccef3325c12e21ec6a124afa888ea"): true, - common.HexToHash("0x64eecbc5a8404a59468140f0315480ed5734f454f5b31d2a7bccb9a2ba461acd"): true, - common.HexToHash("0x1aae6a021f7c2f5a6b771c1f9f0f8d1eeb893490784ce0c19110d48208a18052"): true, - common.HexToHash("0xa6e47128c81946d1759651aceb2226954ec1f7961e20d73ae2d71aa54b96f44a"): true, - common.HexToHash("0x767e5a0fe4d6223d5eb70912474027228320bf022271f9dc5656b97c24daf558"): true, - common.HexToHash("0x8004b23033cddf7254e1fa9a8d153a2378e4d5b46bade9ab8795e8b84b804fef"): true, - common.HexToHash("0x37f3fec6083f6d3bfce2dc27c38df57386580552bb5e53f6ddd2dc115be56f48"): true, - common.HexToHash("0x0a658d63b39f0d12b86a7cf3faf211143eab8812bc9489431ef7f093904da0c7"): true, - common.HexToHash("0xa2bd889872426c3f3fe0c639dbf12354b46aecabbafc3cb39574da7b0c02f61b"): true, - common.HexToHash("0x5d3f4ddc66acb9d6bf428c967933de7e3daebb36059b45a1070ad87ade5f6731"): true, - common.HexToHash("0x176af05900fedfde1efda4cf9595ba8898cc2a0dc361a3a97d01256dc4e97a75"): true, - common.HexToHash("0xe824f2cfc208a19f875a59e14f335513e466649ef70318e83f0466b2d39541f5"): true, - common.HexToHash("0x577745c5b6f000f9abaa59f415bca3f27f01f99186e3316721319c5c8c7693fd"): true, - common.HexToHash("0x1774b72b524a45265c05e1f3c33fee692eabc2e6b3dc11049dbfc2eabd1ead3e"): true, - common.HexToHash("0x035bee9e3d323fb74503ec8b136e071dc06cd1cbb2e11513b195de629a3a882d"): true, - common.HexToHash("0x993a3a5a457bbe548e0b3bc33c0b492ca2f7dd354c3a6180fff8fd599b6aa3e9"): true, - common.HexToHash("0x87e5a0664a7d486b55af7776b6f4ff06d160101a0085b47055f5c80cd4f09980"): true, - common.HexToHash("0xb954e45071acb2a82fa11dd49c206d23d78dc035b2dc222a59d308e55a9da497"): true, - common.HexToHash("0x5a2c46b6ed1c2281b2f85d8915c1696045990008c5b6415107365958803a87ca"): true, - common.HexToHash("0xb2cc23ed6a8c911c0bb18648988fbe0e8fe1a38f48ff5a99579582b537e85b2e"): true, - common.HexToHash("0xe00caa3ed9d9b5e979a10b0cd6268dc7b1bc8c7c75a9a4abe614b1e6b704df39"): true, - common.HexToHash("0xfa5037bdfbd3de91c1dbd141b4a70a15b8927e11e73e10b42be8b1f1283ede27"): true, - common.HexToHash("0x086341677f8cdc5afe261243d6edf9368b1d8f48ded7fc19a84772ca30bc5e3f"): true, - common.HexToHash("0x98be7dcce811f89f6a26cac68eb522416b1f6e5c7358c3f625a02205f8d23d5a"): true, - common.HexToHash("0xbfd5ddd70c20580588df19c4dcca3ad26264d600c4be555b22463d8e89927477"): true, - common.HexToHash("0x7d5087f53b947efd5409f8c9acbf15625ebd027d363281ac8ffbab5e2259c81c"): true, - common.HexToHash("0x6ef189789a2049ae7a1972c3bdafc16c938a523d221c8c970d0ec7143ea4ce45"): true, - common.HexToHash("0xd48542a90399198e6295c7697672bbc535f763e718de6ce43ba940f61d2cae86"): true, - common.HexToHash("0xfdb7666e7d063587d035598a5fd86978bb1067751c956c402866901c5cee1333"): true, - common.HexToHash("0x0178a8241c0e2e9a99f2cfef0c57d332fbacbd7149ea6579ea4c1b883cacd403"): true, - common.HexToHash("0xc417325f5d7d675832eb9b52bbef995e3484434fefa738c6cddac0a9c75efc80"): true, - common.HexToHash("0x3663e1497179e035d3446a04c5f12ae321c0be9c4583cebc2f9b3d306495eb0e"): true, - common.HexToHash("0x43dd079e941f30dfef41adac5d0eabcbb40c1088c2cc74a7e6f18a22085775d5"): true, - common.HexToHash("0x79873d6bd1cd3f6062f414aa4e3dd0c6b76763f0736ee7f77f84a643ab399d25"): true, - common.HexToHash("0x24047ddcb6b885623d7ce92ffe93566101620086650bcbac4e025967ee1ea8f2"): true, - common.HexToHash("0x9129026100318fa78d1a03c5f2c2abe598e4baef3f4c6959124962914f263fd0"): true, - common.HexToHash("0x7e64e8e4c85c0fdc8f765b28ad527b4daeb23348e3a38c7669acf5871276e03b"): true, - common.HexToHash("0x11f71f6213ff1a51157441e9bf2d259df7ad7032850c890cb4503bd845889032"): true, - common.HexToHash("0x458316af381e4e3e76419ae6d1664138103de7c98c02b266345452c204d3e2b5"): true, - common.HexToHash("0xa4379521d31427a343706e76b6da4322852e3a208d6285931eb72ebb5e82e1d2"): true, - common.HexToHash("0x7975a997728ac0f1727852bf71f060b3f8f4113694c48bbbf4dbfd7b741a3a01"): true, - common.HexToHash("0x065c62f885bae226f7a01338c553b90f87244cc84447718e676cb65e6ba9d868"): true, - common.HexToHash("0xc0825c9b7f509e7888da866afe95cf79752fb05878ef5e5c9ca0f6c2790c4e7c"): true, - common.HexToHash("0x9d48f36534123022f9c04b6a793b400b11077b943f51651528f2381df7359ca0"): true, - common.HexToHash("0x4bf013e0d999a6635c1d1af9ed253c3b5e66205d59df275018a9052e35f559d8"): true, - common.HexToHash("0xa11c9fa2b45b3b794bdc523582cc36408e80a9e993dbf05a1b5383dfd54d0dd4"): true, - common.HexToHash("0x3f035f74bf11415438c3bfd8b8fb8b9341522e345d7d21f3c9ff0a87ad6ee63b"): true, - common.HexToHash("0x0663414d548a8df3985c456e865ed9a72c1c1e88c9e494416a4ef8aabfc71084"): true, - common.HexToHash("0x615be065ac9f566f7706ce7917b6bb8f7b103e0f008598ed4f2a0c15002c5357"): true, - common.HexToHash("0x5248b5cfdc186d742892385b0c65941822de6f8cbe546c41b9e981e5b83970f2"): true, - common.HexToHash("0x536a9ddf7fab760d4b3233ecf8adb729667196e5681d938c104e863abbcc7027"): true, - common.HexToHash("0x7bf4d980bcc988eab4bc6d201108cc9f21568f8308064e5bcb1a6cd9f289a1d0"): true, - common.HexToHash("0x7aa84dfcee70eb1caeec4782088dc672bf4dcc60383b0f799e05a28189621130"): true, - common.HexToHash("0x6ad5dee078f4796ac4bf90e100fcd964fe81059b1a6d7e326dab96604558e381"): true, - common.HexToHash("0xe00fbeeb765fe94af62e11c11a527210d180217624ebb50de7da75ac1873018d"): true, - common.HexToHash("0x039a00e2e5f16001ddfa283c14c263870431dadea8cccc8e0d31aa4593fe8f7e"): true, - common.HexToHash("0x569a838302a56ca194e55b6d60b349f4a932f7884c979dfdeefae86aac124721"): true, - common.HexToHash("0x65debd3124fed8b9f026a97ddbf89e4364f076cbfe3b3fd4ba1af7275a5f33fc"): true, - common.HexToHash("0x4d7fb691ec8dcf7e57ac8b759a6ff725526ea9ecefdd35841d7a972be637dbd4"): true, - common.HexToHash("0x5eedbee549781aa97447a52ac6143e69f5ae90047d8c801a0ecee8f95360856a"): true, - common.HexToHash("0x5a40bc47b0384762690c36b59a131a41f3a1cdbd1763462b6bb1c677689504aa"): true, - common.HexToHash("0x544ecd0fb4b05d39310c085f33e203c29f9daf34c719e60d6b2b79fbb6e79f7d"): true, - common.HexToHash("0x2cfa018170316b9221b352115452ea219fe34f209ed417012aca1525159015b3"): true, - common.HexToHash("0x386e7c8b8e6d493f7bd57cca5a80e6ff6f45f1c97144299ec29c8887715cd556"): true, - common.HexToHash("0x8379aeafa686cc29f0b47a52af1387b973334facc393689d84d630ad54edcc14"): true, - common.HexToHash("0x898bfd93e0ce54d237c0b0d20e162fabd95e6d42135b653fa2d9b4ee5b08b630"): true, - common.HexToHash("0x12d0ef99efa0c91ad63d4950c4830d380871f0a35b947dfd7ea47ea28b3ef305"): true, - common.HexToHash("0x80d2b717ebcb2dd0ea48466bfbf0bae447f12b854ffb142b37e7ee6541dbb988"): true, - common.HexToHash("0xa7fe01ca65d781f58b32384bb350a47e0a96f9f53d0012ccea13a5b420ef20b3"): true, - common.HexToHash("0x7463da264f777d02e6b99a39873fe235aa730eda14f65cac0345db3e412a910e"): true, - common.HexToHash("0xb70161efe0e7ae4c14a119a9b5180e6c43c001e9c80e8d6836dc44d5d899364d"): true, - common.HexToHash("0xfb0511c975e24c7ab982157fc9795ca69c738b0900c7350123c05c358fcf8102"): true, - common.HexToHash("0xdaaaa1dde4afcacbd234cf4db90425ec1473f505a5c8d229fb75eb1ac4769038"): true, - common.HexToHash("0xbaca0351de443b0c7d034ddecdbe245bf86d1dc1973cbab7d5146eaa4361e07d"): true, - common.HexToHash("0x177b6bd64419bf70a4c5bc4f553d27b203c50d2d47ddf9b4cd25f12f066e18e9"): true, - common.HexToHash("0xd0469479894677d8470f9fc404449118742d242d26004597609dddd8f3103a8b"): true, - common.HexToHash("0xf465b95a1298b1c6c1f1554b8abdca33af0ba688cb16c45cdce79aaef61d0f3f"): true, - common.HexToHash("0xbf5d01a4c955d74b0fcdf200510441d468afce4b63e61ee029e9a741c959c126"): true, - common.HexToHash("0x00d2e7705dbb5a833995ddd291428a01197569d7caabbee047f83ce0dfd2c2cc"): true, - common.HexToHash("0x007103241838eb0ba1d6a12f86e015ae3897f10ddc63493f701a9fa8b27c096f"): true, - common.HexToHash("0xb275908bdc5655c501b598573cde852aba0810cc19f9d81cca02f30a82eb9dfc"): true, - common.HexToHash("0xe54ec9641d3f9e24ca8f9d0341da504a28dd87c63e5cde38f80a96e1c76fce84"): true, - common.HexToHash("0x957b623f8675db99a56e6c9c812e1a78fc1ffc63c99c2c345effd8175ac8ee70"): true, - common.HexToHash("0xb3e2bc50d128f71e200f1f28df414ebc6a0857c5eb3b09d910ff2a07cff57b47"): true, - common.HexToHash("0x512250cde8e57acaf8ed1279e4dc8062ccb4ad426f4f8a7ebcf553cd98c082ea"): true, - common.HexToHash("0x0d5033d901caae32af386a07e8ed5f5e947f182329f9d4f668fa999e9bb3ff28"): true, - common.HexToHash("0x1b52b5eab7b8708e85f8a5200970b09a8faf54622d32aa424341895572815a51"): true, - common.HexToHash("0x270f1f560082ae1a7eb2cdadcb0765be268b7ccebdeefe80e65bf2b0233a0d63"): true, - common.HexToHash("0x26be10513dda84e4f97a9a1097fa5c739a527d6e822880310da48480b9a4b2d3"): true, - common.HexToHash("0xcc668d5a8fc7adaa99d60deee01c342d5130c709202c8a2e1df55a6fb3015c2e"): true, - common.HexToHash("0xb19ff73c8c4f2e6ab05dfcad0253c6a36b6a61533c013dfa5665d8ad00c6ce70"): true, - common.HexToHash("0x7189d3bb49ffb0cbdcd3c7d06c8d1b772e024b3a1ccdcfc5a3bb851c3155fbb5"): true, - common.HexToHash("0x908556120b21a878854e390b6495133c2f13b3de60896ca7d6a48dc9038f053b"): true, - common.HexToHash("0x85f67b270cb60cef812359e7280bbc5c41588d26bcdb70d1ab25da89bd454cb3"): true, - common.HexToHash("0x585a840e21cf894880debee8d35d274d325e123e2f9ee7036e111a0085bafca2"): true, - common.HexToHash("0x3d13fcee31bd266ca21a23366b0407cc59f0726790beafbea677f4398f3daf05"): true, - common.HexToHash("0xf4d27837fbec9b455a4ad4e9e5bb0a467b80c4eedee0483e10e001dc7c759e46"): true, - common.HexToHash("0xe2855192bd0656f92e5052b87960eebc0e5592437a2a80e837de1071873bc8dd"): true, - common.HexToHash("0x6c102e6d8a636267569fd4460bd9e7d106610b6de56b22a5c498564afe6b0514"): true, - common.HexToHash("0x3691ab0b9ff0412bd63d93229ff86f03cef9c7aca560d473d6899baa58be3d75"): true, - common.HexToHash("0x15d5e49abb53e07b4b040b9f4665908d32036fe8b2e19ebef9d768f5cbb14f54"): true, - common.HexToHash("0x95f2d896615504a27364bc026e2c0a59ae2081f389c651d35c9c61bf6d459170"): true, - common.HexToHash("0x4f42ad24e48c4e0d5a4ad2c25347530331114a253e342f938fb2c11ca3c242d9"): true, - common.HexToHash("0x37a11a800649fa61a751167c4f783019c46e388d99402e6c1626672b959771ce"): true, - common.HexToHash("0x8f5a704c7f0d5ec3d98e63c506ea6ce9375a48aac0493aeaeadec7a1c1fc2527"): true, - common.HexToHash("0x6b560a6cd6abdd9c46904d51aa82ddf58e3c39b55ac7da817220082ee3943488"): true, - common.HexToHash("0x69c4734878d416fa3d5b36570425ee05bdbab545fcfefcf164c0e5f74a146911"): true, - common.HexToHash("0xe43d384e0121645cfc8609cf31d9ce12dcb0647a33aa81c0c6f828a2dcab4317"): true, - common.HexToHash("0x0de7b76ec069d2e3285e734b5c9b9b3658ae00d131f1e6b069201ef073bfc101"): true, - common.HexToHash("0xccbf226248e733d258c1d9f9ce930365bee04feb60e71923595881fef0806c1f"): true, - common.HexToHash("0xa1333d67c8930cc2bd53663e865e74dcf913b6196e8df6d4415c1fe934cfb6b5"): true, - common.HexToHash("0x3e9938c49aa4dafb3d118e6e42c561b1d532640464136ee20da148c332e794d9"): true, - common.HexToHash("0xa6bc45161b69dbff9818d8297754071dcc60be19ba2b88de64a122956ea865cf"): true, - common.HexToHash("0x1cb117f8c91c92a53b46dad26250ffe23335fc02e2fbccba8f22e912d556030a"): true, - common.HexToHash("0xf170888fde9368adc39903eb25b61f912b3742dfcb5476d97d479901bcd1332b"): true, - common.HexToHash("0x18856cfbc7dfae939341c576d835aae66475a94e42134aeca37d4639216b8fb1"): true, - common.HexToHash("0xa03f3cdcc35ae06b58bdb48d7d4b67dd53770d4bb6f121a77a5bc381330813c0"): true, - common.HexToHash("0x8f37eef323ebfb7d655c29266ef8549a4872946b5cef97dec4366ac615bad71a"): true, - common.HexToHash("0x99cff7890cc9a0cef60b9c7d3fb4b4c1008a596b1b647dbf918c05dd6050ee13"): true, - common.HexToHash("0x93ce840b2c6e8ad34da7767dec8ea4b34842f682b4e6de79e250402ff8ee140e"): true, - common.HexToHash("0x78dcc206683dd14bcf83dfab96afe3815c03a8cc55534b74c0a5f9b7c8aa7523"): true, - common.HexToHash("0x45f5c5f5786807f806d6e5b80a3d7b7b23d0030025f829d1172ed8ee5be0de46"): true, - common.HexToHash("0xe571623cdc2fce74718f9badb5a80e86e21c26bbca4f659944589f4bf0ef1036"): true, - common.HexToHash("0xf8107903ff65d5cdc61e86aa700afa565c1cb8bf0b0f3d5800fbed4624223c81"): true, - common.HexToHash("0x37cab687b8e59c3e4917e526c49d1f07e79bfca00816718e3759074987825f6f"): true, - common.HexToHash("0x82a6be8ab16c411c43519d5ab1d657c976af0fc278d8a2f271247fb46b5807c6"): true, - common.HexToHash("0x1514acbf43b2bd3530b67984c1cbccc5944899c5c6e22be01dd7127e2c89b8aa"): true, - common.HexToHash("0xee7f416b5c4fae5fdb01cbfe34770bd4c6f1cf140d5566d3be993922fd27eb6c"): true, - common.HexToHash("0xcf8efcabdc5ef95f9bba28bdf20cfa1d4e72085256ffaa9e24330706299211ae"): true, - common.HexToHash("0x349a47ae2ef1cb356dbe73dff0895ceac9f1f4ec54c29c3424f4d7725ff5299a"): true, - common.HexToHash("0x2b119f52ed033290c995323ed76427c43c7dcddadf55e7f8772bb91c24ecb0f6"): true, - common.HexToHash("0x64a1eaa56099de17a99ef3b35f5971ed07a0363c669040d4f7515ccdc9137a10"): true, - common.HexToHash("0x45ca20b2e87f34b27e75011d3fe4ce8c10c419b08f7b8d4b0566fb68256a6e2a"): true, - common.HexToHash("0x4321c7a98fa3476221497445581f4c00491fe124d0fe416cf668f7c1d827a8f2"): true, - common.HexToHash("0x664b218ad6eb1c39bd5608bfd0a3a0a6adfde682adda21a18fe730ea89d35c07"): true, - common.HexToHash("0x65e229cab15f449e73df52e09fad5789499f97fffbb26583e9b0bb0d64166c8c"): true, - common.HexToHash("0xcc63d2429d7f7c1aeb703f82447f786c8d8f4f4636e749cb07e39fc53ff19743"): true, - common.HexToHash("0x1a0c098a792793baf8add45e4abb84f6284306f21fa38a8fc3e07ec73c1d7481"): true, - common.HexToHash("0x21778f6f8fb86e4a2720113f1da618a3174c397b8fec05f1f0c12dae6b14b81d"): true, - common.HexToHash("0x6a368d67eb95f457776b66e2018e29ebb99ca938b4a9db288fa9af02c9b610f6"): true, - common.HexToHash("0x98ee0cc7a19cf3e9f83ad4d595fc1279e79ad0a65e153f682e9360aaae663a51"): true, - common.HexToHash("0xa060a2c1d72598074a6afaaea37f8bbf096485f7d8da47cca1bffee8e75b0112"): true, - common.HexToHash("0xab9a1c6bc3223aec9defcfe9c23fc20d7a2a2be55944903b87ebb934ef524e66"): true, - common.HexToHash("0x4064d1943675b36cb40b6665a3895ff94e9b3c1afd7a2ece29a2ddd9cb3bb97e"): true, - common.HexToHash("0x7681fbe61f9e9c600ad92c128325fb925d0dcb815c2d5b188de1d83fb6539193"): true, - common.HexToHash("0x7c3f9a5e196bfa72edc154b817ded6822fa0b77e1aacfdece8c09ef2dbed9c9f"): true, - common.HexToHash("0x69eb811daf044ac2175d9b90d6ef2a5fc4f39d4396ab814fff450a3928ad336c"): true, - common.HexToHash("0x73cad4f945d9c4ff9a409e23ebfc6617b2697ecc5cafb0fe5451659a6fd7f1c2"): true, - common.HexToHash("0x7c365244ae8aa5f4e63a4cd7935e833b88de7c93336b296511c4e99cb9a0403b"): true, - common.HexToHash("0xca584a54d88900add7093edba8aa5ab9b4308e0f5d0c39e5c524912b500f73d8"): true, - common.HexToHash("0xd023908e904102c3de7e8614ef20f64d601b83b185f25da80ba0106d9904a42b"): true, - common.HexToHash("0xdc0243048b0e81d25d04d4b360f6350d7faff48563af8b2e7f051bdcda3ff0c2"): true, - common.HexToHash("0x106df18ccdcf8fcda56de6525ef2c3d0255eb55500079931cc9dfb270b002f95"): true, - common.HexToHash("0x3422fe1995c181a83847cd4ee35f433fbf714a245d6f78f8f6576a62011e6cdf"): true, - common.HexToHash("0xd4d9d810f31b58df3da2dd599d355a79fb1a2204ac218aab9ee4ae5ed5017bf6"): true, - common.HexToHash("0xb53355987e6b01651e656fcdfdf32aede6e7fb1245d243abe1430ea247115e2d"): true, - common.HexToHash("0xf785b637b32be35a279980b9ba569e87809746367759c63c69bcc900a64f1e85"): true, - common.HexToHash("0x5bd1bf44e93ee2051fe2e751c5cd165d1176584308f5906ca28c7cf010b8c05d"): true, - common.HexToHash("0x1a2ddcd8e732f46980ff1907ec637f393059d27b5ccddd6b0c07b8341e297c5e"): true, - common.HexToHash("0x180ca038df73360a8c0c92ee051d2e65e45957b59abdd0f31abf51ef94487dc6"): true, - common.HexToHash("0xb995596826a3ea61cdfeeb2d856f3834eabc1783afd7f1ae8081cf46916b1868"): true, - common.HexToHash("0xa7d927d8b68ccd30686be605fc310f42f5329ca2d2471f68ca86033eb8cbc0d7"): true, - common.HexToHash("0x75a16e06a9fa0e781011d295bab3c2055d1975141be323ddf7adeea0b051c1e6"): true, - common.HexToHash("0xa6e2c97aec738106f16a712f51078fd88f6705bfa1495e49b659fc6f88a74eef"): true, - common.HexToHash("0x3728dcb752bc9b12ef2d71141a5e71084c3d831499e5c2594b08f7b0d1b93053"): true, - common.HexToHash("0x2041408b3f98106f8261aad5b44a3eb874ab3885af732f5ec40a9cc51eb19161"): true, - common.HexToHash("0x396d9c55eae5686665c8f6291f62f37188187caaeed6b5f6882894af8f16822f"): true, - common.HexToHash("0xdfc663a2f1d605da8e592663fa71ed9e43b4a6bf823f6d2ae80473474533103d"): true, - common.HexToHash("0xccf5bec8212f9414488a8bad3a0600da21b47faf372ff7af6ba3dcdb399be84c"): true, - common.HexToHash("0x6316b28d7f586c05d517a6634d6df508d55ae44d2691a5dbeb7805e74548f4a8"): true, - common.HexToHash("0x65128f0981e030d35dcc998eacaa9e05b369074d953d5f30b3512c2f4ce74d3a"): true, - common.HexToHash("0x3d5618749a9cc28484ffd594000b583e74f6908caf8e0f6494880e34d9e19d07"): true, - common.HexToHash("0x20d30d8ea7558f5c890fb1ddc9522c066a474158f82d968e1449d779fb0e4dd1"): true, - common.HexToHash("0xbc301cd260bd468c6ca1498a682a9121357ece9cc353a6527af376774a7f33d6"): true, - common.HexToHash("0xc2fe8e1417882cd7b5935e1ee0c3c15192a0fcf4cfa9556a7734f4f2634821a7"): true, - common.HexToHash("0x6bca6f5f2acf5c00fde7ac7237d5a481e026eb94dd3b0d3e0c4ed808d55a0c6c"): true, - common.HexToHash("0xa7bc40082d98142626565dd077f2d63e6da5e9cf1dba0c66213b5dda87a7a28d"): true, - common.HexToHash("0x820745f2f93c8ea18b97ab0a1cf318de35f636672066b1644dc4a92fe4bf5d30"): true, - common.HexToHash("0xd96ea4e8eb988c7fcbc7b19aa889ebb83ce363b227fda6aa4ae934a038512a30"): true, - common.HexToHash("0x98670769c37b91d16815bc9f10ed73e167921ccd05180bc64955fa856c6f1578"): true, - common.HexToHash("0x9f261063ad865d2b23a31f9837ac8ae85122546638d13ed1e5ba4e820b5b9a8d"): true, - common.HexToHash("0x731b771e3fcbcdceea31ddbf5a993131ad8b5ea32496e8e5ae23570ee42f2917"): true, - common.HexToHash("0x4522d6e360d138bdc2bb2cdfa96977a16b2d893393c8b92bda8ea72b8d24d8a6"): true, - common.HexToHash("0xe0fad8903b534b88f3374de327d057340fe2eb0e3b7c63f77660e8f99f099357"): true, - common.HexToHash("0x5b4766c68dc94eec83e16a39c577bea364d6fe9ddb5baeecbbe6eb30f76ef697"): true, - common.HexToHash("0x5856c8936b016ff20b68ee37ca5ae29c282a73bb783c63c308847e4248291e54"): true, - common.HexToHash("0x63e64979d9bafde246701fc47d0ecb53288f6b80f1e8fd8036a3cbfd5cbaca1f"): true, - common.HexToHash("0x7c697ec896b960d0c54b2fbf8abad8fcaa94070e4b6898703622d3f7543b0bc7"): true, - common.HexToHash("0xca29b2fe1915e9826dde675fc87705133c3141f6b733fd78f93e7678f1d7326c"): true, - common.HexToHash("0xf1ef683ebdde47ed71af89f380447f66890551574a0177344c12b6b0b1998336"): true, - common.HexToHash("0x64df756d95da9281dd3fb28f015e5d1b09fee73d242872b7a0cb2b95c53e5e8d"): true, - common.HexToHash("0xf50537fac2d04baf21b794e530f73a9efc7babaa80af8e583177344427532a92"): true, - common.HexToHash("0xcbca2dcbbb0ce425a7130d25c830d72f8e21a0042a2828b2f4ec191dd8d97bac"): true, - common.HexToHash("0x39b86dae8045adf30168d21be8df3a9d4b2f6bafb9475a7c3451f511d501a63d"): true, - common.HexToHash("0x2d1ea45234e1e858cfafd6670f83da6649b868f9f9fc457c5ad9358324e79998"): true, - common.HexToHash("0xe1667067aed2cd18642037f77d9de506dc9bb5d0b446e5cf915aca77576c72a6"): true, - common.HexToHash("0xd4d7ad0f542de3bef080477385f0271e89b544b4ff9207c0a50bae4a9684f88b"): true, - common.HexToHash("0x70d7006340c6b61aed735dffb81d7ff68cfc4a6b926ceb6127c06a5faf14c9f5"): true, - common.HexToHash("0xa518bdeea9762d50b1bc6cc82b0ebbbcb2cf3480bac26348e153a6e5f904416e"): true, - common.HexToHash("0xc0145eeb581fc1f1369c33f9b9dde1c17209a4c7a0e10b4161d00e995ba4bd91"): true, - common.HexToHash("0x2c51bdb25d8f0ec3312df90d230c34749edf89c9f534acb6c7a0015edd0efc21"): true, - common.HexToHash("0x7264181e3787705f1614d1049849c00bbbac8582227d680b29d439e41b46abda"): true, - common.HexToHash("0x7108249b9143bb9509ee11c301f443af099ce98b243fcbf5dd6ee3880b0392c0"): true, - common.HexToHash("0x9f7de3757166a418f8e8929faa5919075f2d32432707c7681122427d627f1910"): true, - common.HexToHash("0xd8fb24a8a9b12bbfa8bf19149f50c3a304855fac4f3bfc3881617c58a8660f6e"): true, - common.HexToHash("0x625e55d69a846322720e7afcd37161af02156c89cba3b45ad6ea4f97bc391c19"): true, - common.HexToHash("0x7f3353cfe81e41de45fa452b35d9f0007d2dc1d3fe5516df5befb43c1d266bdd"): true, - common.HexToHash("0xfdbecbe1ac89c671ea671aff764320cdf068b669a15b5c0b954bc44ddc2e750b"): true, - common.HexToHash("0xa76c396a7478cda6475a55a2fc95deedb6e35046259724599bfae7c1febfc882"): true, - common.HexToHash("0x0a7eb1ba0b37ac8af144e91a48cc65a3b6c5a73b49bb3face9a9fde2bc890600"): true, - common.HexToHash("0x395d1e65a25211816cdd6b34e25d6ad8b15ee490462e3b55afd42f507b2eed16"): true, - common.HexToHash("0x72628e17a79ffdb169012332d5105def79406ddb9e0ee8e46617099498efe183"): true, - common.HexToHash("0x21ffd071b304756d2b367232a7c946cee246e0c2d432be061def6bc23138eb98"): true, - common.HexToHash("0xa7ac84fb9165e8a1a3b9f7f8b0725af1e1ddbb3faf614daaf1996135d3a8495c"): true, - common.HexToHash("0xce9e9ac98fb851ae582caf49e23752cf04bae77c96b47a5eb76db7cda23c81b8"): true, - common.HexToHash("0x8a2aa5d413b6915440f0654a7dcc14a5b433340d67ec2dce8fe41a510e34a6ca"): true, - common.HexToHash("0xd35eb9125b689737b769ee5b2d00e54bc1ded7385a563631a3e4f29f5162b362"): true, - common.HexToHash("0x259b58aafcbd179605fb12de63401e13eb5c8605b6cde66098f09871f337f223"): true, - common.HexToHash("0xf3e32f669c0e5114bb8c4f2235fe6ac7469702b44ccc7654d480c1aceb499421"): true, - common.HexToHash("0x380e3461bcc89d072ebe672e406d2acf937332482896b5fbd4ce12a803d1e1c4"): true, - common.HexToHash("0x40488588c148075b60d1628848bb03da96eeafdb2e156bc06a6caa7619905c83"): true, - common.HexToHash("0xf050e125a30f3c89e5563e522bd592bc97265105fead4617abefa232db576f8a"): true, - common.HexToHash("0xac126441ece73216e0a62a0c9457e524886eace7bfc26043ec3989ecee59435d"): true, - common.HexToHash("0x0088d819e27d6d77475a1f8744ea34b01605ee40df09ce1a81088e706ebbdbcb"): true, - common.HexToHash("0x2c1722521e2dbf8cd13d5efb1979efb87be0a8ecda59abef64dd27e5e3a281ed"): true, - common.HexToHash("0x724b4178945c48163b466de276bdf72871864fac10b85b20eca98001d9f308f0"): true, - common.HexToHash("0xd42ec32e0c9a45d0eb39ad44eafd9ec6f703d5ea3c3aafcc681aa8fc79c74f13"): true, - common.HexToHash("0x82c74d5b47b2c96263b9861539583f9f1073c86b97ac18da4745b3c90d588a27"): true, - common.HexToHash("0xf6b30e78506e7a7730968c2c845d0c72f188ba9b956ea5e9ad8875d0c6dbbdd5"): true, - common.HexToHash("0xddcdb24d23eb2e1f8624ad0c03c11c91b2a9f61d420b95375b3a85a6b046d414"): true, - common.HexToHash("0xc890e736eac516853d3a17bb153f5fce7df6405d8863ee7b8ea7809a20d422b3"): true, - common.HexToHash("0x65a61b4de9a3b755530c57028670fd9fb3aa4404215745add7080b13feafcc1a"): true, - common.HexToHash("0x86b4a3df89561f530f6db9f8f8b3e76476b4216981dde0906162418c0abc9008"): true, - common.HexToHash("0x131d8be33dee3dc8c9029b9025ca3235342d24542b4a3b9b0ccf0653cca8545d"): true, - common.HexToHash("0x76b00be6d8366e5f288ecef35872751f3aa59756aaabb6869bd223efd9b05897"): true, - common.HexToHash("0x247ff8b5a4adab7c7a9b728f0c15fcee5c2d3b722edcf46efc3c649c679c1e9f"): true, - common.HexToHash("0xfc6213395bab6afd2208a276daf633db0406616717cfd65c9ceae790c00b7f52"): true, - common.HexToHash("0x638c826ef6c19f4a66ee76e3da297459b6a0dfaceab64432d030c02c4fd806fc"): true, - common.HexToHash("0x33cd9affa1fc36ad69ad631a36b7c77bd2251367c04c4d24335bbbbd368ceea1"): true, - common.HexToHash("0xb0c80bbf48cc4242949beaf22b6d71200c9f7dede847f33e1deab8be700be412"): true, - common.HexToHash("0xa2476cc89ce036af0c24a2a847d1d3b203ec47b7d3fe9891f684d4dde1d227fa"): true, - common.HexToHash("0x872ada01d7fe0c183dcd4dadc35480e6bff6f3c3da072f41f95846bc852a4e9a"): true, - common.HexToHash("0x11fa257cc3d9cad312ec33efaf81e87b34d9e95c2197255284290c4a90e632cf"): true, - common.HexToHash("0xeceb21b9e0d8c9832afdb1fbda16f2d6e4c800aca354ece73ddb951715b42753"): true, - common.HexToHash("0x2ba9736b3433865bf056af1f5a93c069366cc0f68fbedd9fa5813acce1dddfb0"): true, - common.HexToHash("0x6aedc5d60eaa4d309d555a2d05293e8f3cb21ceadb9a1dbd98c20629e12369ed"): true, - common.HexToHash("0xb8558c822dc87091e046629ff3ac08438547ebbeb57c38df2cafc54cc9892aa2"): true, - common.HexToHash("0x95df447709b62f0d95e8816e8ae189234480608f43dd3e7f6de47994a9f8d92b"): true, - common.HexToHash("0xc3444a751f3df2c4542bb5b81031ceadf7ade1629839ef9d158942710a51670d"): true, - common.HexToHash("0x8f49ddebfb1b621d4ed8d00b9f3b4f859080e2b5e7c5e6ee5b1d9cb986a01215"): true, - common.HexToHash("0x27be7fe4dd018f12b247bd8c8074f84ebd7c1b0217e1fd63d76fc84b25ebe4a9"): true, - common.HexToHash("0x3e309cabaaa116c3dabadb5e0a866fc101fa471ccb0eba6cf6b32697a1d6a3dd"): true, - common.HexToHash("0x6ebfc26912ae1e19a8b0aa6fcf1e3324096a98bd1321ae52549d908f1d644e9d"): true, - common.HexToHash("0x81dd7a93f053c1a78fbbb8062370aa20c1ac9be319e4992c9a64809ee91cb68d"): true, - common.HexToHash("0xcd80e4dd4ae974ed3e0a010a53c62702d54613ea9493c22233682c8d2222e043"): true, - common.HexToHash("0x36dae9a361823e6a30723cc969fb216e8ae23d48326e2989b864acf2bc3e376f"): true, - common.HexToHash("0x1890dd7091534191ffc8a65fde62d820022041522aec35ec566f77ece2b4f2b1"): true, - common.HexToHash("0x352df026f1643784ff12be8782f47fe54a1512e234dff3e8eafcc70279aec521"): true, - common.HexToHash("0x376bbc5fffabf36ac71e31e309c265f77873a62d704d5ddfb1de1f872fc98aee"): true, - common.HexToHash("0xc30e0ba0b6f7542fbab44ca59bc6c59a8329a5c3a3091f0bda065e53abfbb2fc"): true, - common.HexToHash("0xb6cfd610a9e4fb5eed50c8af27d53d2ef4f7c266111c5d9e8dc96445235d4d3c"): true, - common.HexToHash("0x4df230e0df961ad9f910af982966bd1ce22bee8db3ba4b5b59a255411459903a"): true, - common.HexToHash("0xb588098105fb3c08982a9df100f8783b3f9c966c3258fc34346186ace6c76382"): true, - common.HexToHash("0x0321a10494b710264c36659ba20ccae33b789e2853ccbd9d702998fc07f415a2"): true, - common.HexToHash("0xddae4187523e11858e96afa94f57cc9d799dde3dc98a4d29a29b40bf813829f4"): true, - common.HexToHash("0x3b928f33f4ec64914a0293a38bca81db501d7aae2f7968f12e084bbbcf941c4d"): true, - common.HexToHash("0x9b05b29740cd8b5febc24f39b7863f33ae18a4bd3a494b41cefa9bef9fc47fb5"): true, - common.HexToHash("0x0bfa773920ae3d57d9a751c3700e185b936d5055c9ed55d1027261eb93656f51"): true, - common.HexToHash("0xcbe9a8e37915f94002db5e039ce3c9604bb9e087bf05d94e8299d8ec07647ba8"): true, - common.HexToHash("0xbfcc37bbf3102c316b5b2dbff5be4cc3856245560bf0f43ce31f9097e7eb58b8"): true, - common.HexToHash("0xbfc126a136eadfd49c0c09c2fd2905953826fdb23141e786feae1753ae0aa910"): true, - common.HexToHash("0x507ae13073e00f5a7ff6ec4663c1838b2c47f14a31f3654b6eaae86ddd474479"): true, - common.HexToHash("0x72415ccc3a1ee0850443b216e045bbaac56a4d6f12130e2f2d3559bbd4d1079f"): true, - common.HexToHash("0x6f28c86b6175343e6a12da1b250d14000ca619f151a5658895c3e6ce1de5aa00"): true, - common.HexToHash("0x465999e6d7a8e26c383fe62b490e583ea8d361f7761452024222cf9429c72239"): true, - common.HexToHash("0xd061f9f1a43fc24875452b8706d7df6acd2533dc43612bc3e0b1c9be79f44bbe"): true, - common.HexToHash("0xb08275cc47d313ee192d1dc00c2f3feb22a66b8fb7141b49d640bf4550387c4e"): true, - common.HexToHash("0x9d0a9099deb69a5f26a348a00081864a53c5616daffa378488e930fe225732d8"): true, - common.HexToHash("0x0b821beb96f2d499e3632a2d3a43152e615a2eb38eacd6fdfd5701c35c3fbd3e"): true, - common.HexToHash("0x7880a81a457a3c491d167677dbaa4465f318c8a1cafee6aa36522769e8f1ca25"): true, - common.HexToHash("0xd6b15289c04d7b6ae7b3a8276b0b304fb0c2e9324ee13c555710a723cef24b6e"): true, - common.HexToHash("0xb10e78fe74c946281c4929b50fa13fd26558a53d287c091b2878a35ea0d8d256"): true, - common.HexToHash("0xcf384edeca86769bbcd68152f47e6fcdde7a569030dc6812267434b6b99a716f"): true, - common.HexToHash("0x953d6701c8b282d21ac9c2a38be11933ca1f8edd83bb5e7438397229d83540d8"): true, - common.HexToHash("0x5bf900f6979f6b9bfa5277fba4892655755c5f5e44866f08000d97c7f310c8f9"): true, - common.HexToHash("0x93769944a9e30949e2250f9f54a4ba8fc53a177b77b93a4200f7788d3182f0dd"): true, - common.HexToHash("0x9d2789b9bbe7784040352343776a8d028ec350d45cd9da5a8b0aac93aecc5cf0"): true, - common.HexToHash("0x78f7d9a01736426414aab795cf14211c31b588de97dc2e502a67d853c4904d97"): true, - common.HexToHash("0x9c5f32a5993a61468989bb785d2897f142003aa3c959c4b6517433e0fc6a008a"): true, - common.HexToHash("0xba2ef60d2f94c8cd1302ede940040b9bef3e7af358f86490390d0fdda78ac92d"): true, - common.HexToHash("0x2c8cceadd2d748485adf0f6d9bead93829274cd8e26c6b4d1dc3b73edb9f7bc3"): true, - common.HexToHash("0xd65b2c66e53ad6830b7e883f1fc5476c3ebb2f7b976b0ab973a92b97f0de6217"): true, - common.HexToHash("0x09dc895ad6d4dbe5b2d4aaf8d0189cd86d18bc0129c6132a9a9d669ae69a38d9"): true, - common.HexToHash("0x3786696cf0ceec516f4d58dd6bebf90bdf0e19c82391b70a4b36b7428390ac7f"): true, - common.HexToHash("0x5f5ae41a6e6af60bd5fff45aa57b01fe5feb1ab29204e5c760740f3e1788c607"): true, - common.HexToHash("0xc5d96589ae7d8746020fd504db0bc8dc7df62594e42343d5daf77e3eaf68d3cd"): true, - common.HexToHash("0x5f2e7a602cddb30593dd3e447db70e5589212b6136c3b1cb99ebed8710923dbb"): true, - common.HexToHash("0x75b5fcaa2ee9c45748057963d9aac67a0b27c6c336aee4193b9175d006e491c3"): true, - common.HexToHash("0x46d5304f6cfbe60f184a4dc39ebfb01782fefa84f243480fc52107d88a2a04c3"): true, - common.HexToHash("0xc23dee2f413187e4fb5612064139a5ef4332c03a3303ce4e0596ed0334590bda"): true, - common.HexToHash("0x46bd228275015aa4bef7cf0ef902675a0607184819e18ac2403a243c1403a086"): true, - common.HexToHash("0x5f2db78a35b49cbe9b1bad23d3e47903a1aec48dd21fb2853d979023335735ae"): true, - common.HexToHash("0x90a8aed16cdf06598ee419f58601c2dc1bf3fdde0cb36108543c3222e34cd33c"): true, - common.HexToHash("0xc54498d2cd1e4a0044f8bb699f795e931e07b3ad1cde5b861634bf7e3c8df15a"): true, - common.HexToHash("0xd4e3dcf80c9955cca7bd426003dd974d38de1d19b5a981c997ed0877d415d05c"): true, - common.HexToHash("0xc617e2bd7e43d5c4b7c77b8e4f2274f99a3de6607ab9ad9446931d440dd2c485"): true, - common.HexToHash("0x9bcafc5fc99c180113683d6ad0ab361c6c748d21d29a712a8fb03150b9bb5d34"): true, - common.HexToHash("0xe225af597dcf790d364732679b69309e21f0828ba0f745a312b8fda2fc611610"): true, - common.HexToHash("0x3f6b64f71cf34fd32f5476fc1fad12ed9ee6568c268cd0c41211eacd6bf453b8"): true, - common.HexToHash("0xa26c35e4c0006fe9b65021b6b40bcb514f1f7cf4d5da5899f97a2fe9f336eba4"): true, - common.HexToHash("0xb699f2206cd7a872501053fde1a4ce67bd6fabd6ea610b2c66cf745882c5b687"): true, - common.HexToHash("0xa40743a37e6f6540525d663ee72f17b234391ce7149bef3ef4de5e1bdbf06006"): true, - common.HexToHash("0xc222e0e826e8b6606288a7caf13c2e4b87d6807baf443e3dcf6d5ef2aad468e5"): true, - common.HexToHash("0xe96e894a817a3c5287dfeaf886364d295c14f7ec948c08a701a46f319a01516a"): true, - common.HexToHash("0x753c3842c53abb4d109024e8c5438f6ca5f1d99a3c0c2f0fff0c5c3b15d7743d"): true, - common.HexToHash("0xf07ef4071f9c1a370c512d42157c54662a917eee0de702fdd21a39a64689bf68"): true, - common.HexToHash("0xba15b40def398d28c8756b489ed46f0ba521d0d5d78bffb7e575f8fc7ae0120c"): true, - common.HexToHash("0x76d6287b736ae155d1b87a59b94def820435014773eae526018aec9b95eeca2d"): true, - common.HexToHash("0x0e4dca7e666f31e45b37d8cd09af3bb9e197925cfe4049c794f129381def3490"): true, - common.HexToHash("0x5085a90f031cf3f37b553c8332192e018f1be5c1a9d7f82c803ff237aec49d30"): true, - common.HexToHash("0xe4edfb025a22a437ff8ad82cfa7d5256a0f4d8ecef37315fb08e7e0f7b48b392"): true, - common.HexToHash("0x6109bfbd4b9b23b91bebeec7a55568b288442ae4afe3b2a30b3d0e5941355b1c"): true, - common.HexToHash("0x734bc4a6d86234dddb7530f16f5a1aaaab46bb172b8ca045852f7b9974463568"): true, - common.HexToHash("0x307ba7b07ba145922195d4464e484248e09fd7243c9f673886b027c603ab598c"): true, - common.HexToHash("0x4fd23bd8b83ccd109703c719a05d41f53365ed4402115d7a25df9783cd68ffcc"): true, - common.HexToHash("0x5edc83438bed44670189e287e9cfd680508e33084437f14ee2ea56667fa68602"): true, - common.HexToHash("0x26ac5297c47b6279f7006e2cb7b5b4563ae26410b6a38cf0133c4c4e2141ec0d"): true, - common.HexToHash("0x2de4927fca57fffc648264809dafe8d9e1ced62a1d25c2012d0001650c9d14aa"): true, - common.HexToHash("0x62324b4aba471c3a1d821ac85fe844159c02a45dda983572928836d502ba4449"): true, - common.HexToHash("0x63acaff2c2fa47e59e6c614f6842028ae2657aafd484ec661fbe528df9f78971"): true, - common.HexToHash("0x78d797a86f0eeacd474ffda0039003088649e7cc60a54e12243dbbe59c52d942"): true, - common.HexToHash("0x75237feaf54cd961a85e33972e021e51e8919eb0d5742479757f02b2aef3772a"): true, - common.HexToHash("0xb09ce7c1e56365f22d6e65825c0b1a58ebba5db9a6d941a00e1e8dc9f4b41264"): true, - common.HexToHash("0x14f74f482a44dd2407f5500e84a69e75a786eab31a5bb3b769fe3189bfdc56cd"): true, - common.HexToHash("0x1d303fb95717d2a7a575222611f8aa5130d89759181f87c492dbaf4c43d9d521"): true, - common.HexToHash("0x0cd596d1e3a9d2f897a0cdab2f9e8743bbcbbf3493391d1d9bc01f05e89912cb"): true, - common.HexToHash("0x2f515189cb9b923a0d1c073a25a558ebdd4197f18c723e2fc1104a1ba425c71f"): true, - common.HexToHash("0x6ea75b779b9a82fe9d6747b602f5424c6a9c7a899294d762599229ebdb2a9675"): true, - common.HexToHash("0x8991f6ee826d6e1289794631ec8a8f07814828500263c916dc82e5178dc179ab"): true, - common.HexToHash("0x303a70d87846e955a954d19d0e4cd0daa860256a92ceb5bb8051d0594a14469d"): true, - common.HexToHash("0x8e182ce59c48521cdb39c1ede0d721d9a471edbe86c2a2962800ee6170322a61"): true, - common.HexToHash("0xd8afa8d4a53f46d7dcbe40d3f88c61e4ddc37793d7a23391f157d4b62fad453b"): true, - common.HexToHash("0xc3e115a5eb81d12067aa91d25ec6e1d29f801d49273c9bf97518d5b492a4b134"): true, - common.HexToHash("0xe7eaf296643c01a8be5761faa3e9fdc93cc0661ef1c960001a0b3ba893e6539d"): true, - common.HexToHash("0xf38b555f16c260e9656c3d165549b37040b9aef1db07312c67c4a9b81a88b15a"): true, - common.HexToHash("0x79d47715510cee9a6ef7b94ea3af2e5599e195f858945840093dd5df717ff71e"): true, - common.HexToHash("0xfb540f852f6e0bbd42ac39df2a4308de1c5267dfc9b0c1aab04cb09e5a023051"): true, - common.HexToHash("0xe63227aa8482fd5fe02282718581726b3bdfa6b453adce6c0ae39a2c7e141377"): true, - common.HexToHash("0x0ccc402b3c16d4b4be0ee9e4af78a5aa8410d1a0f97a5375699f73f930a6e41a"): true, - common.HexToHash("0xcfca4fdffbb027d99bdbdc6671bcf5694cc667d397a59d54d03736f0668eb252"): true, - common.HexToHash("0x389d2c786dbcd2c3f6d95e2715ac6f155828055935f2393c03208613e3f5f1e2"): true, - common.HexToHash("0xe64b763a5c0bc00949e6b6f898a466128b70208ca3a44c2d672ad23da8c1c7e1"): true, - common.HexToHash("0x544375af7018d3dc5db9046804a7cbabaf97212ab68ce1536dbae763e2d900f9"): true, - common.HexToHash("0xd3a8897b9b920141be0355f130c5df7fb52f34aaedc6ff5c6dce995a4d49d6c4"): true, - common.HexToHash("0xb5154d4cfb20183277d062be0c4cd34a1ac8096968aafb3e7f42a7e3c23a0dad"): true, - common.HexToHash("0x0ae5219a105e250c755b5dde6bffa28d18fc6ae01265224791b9b9e56a9383f0"): true, - common.HexToHash("0x5f33fa836cb29737c74effbcb706f18c1f87501222af852b9df23620994238b0"): true, - common.HexToHash("0xd885b792d274ce9f8fbc8af57735811403ff7fae79e2355063f57e60da023477"): true, - common.HexToHash("0xebd38ff03d3c81ea7a27f7b90c951f80ab359ce5ad36faaf0c3c76a750d242f4"): true, - common.HexToHash("0x09730d33fc9e024249344be642b3b1c3177b4266499dab0f9a2beb0344049a98"): true, - common.HexToHash("0xf2e7cb6e554b21e9197a591f0f8c7d2fc1fab1f30439d3f225cb43c9b6282aed"): true, - common.HexToHash("0x12bdd652dd001a2ff76ce15efe5f4415ec0a998e163b0e62c3b72729c8ed3ef1"): true, - common.HexToHash("0x21cd04f391d61dad2164dbd96d7e1b181dcc2fbe006f263b181c0156cc1ca8c2"): true, - common.HexToHash("0x3ba373bb3814da1c850eaccf0a09f9494374c3d84b7c3ad7fb33a162a8358b7b"): true, - common.HexToHash("0x5ead5569220facd3fd76803077c955516e8fec37c672e44cb587ca672d9f5cc8"): true, - common.HexToHash("0xb849ee70f1495f8f0658f39be3058b5218f24c5310410813fadb722a2d48b1d5"): true, - common.HexToHash("0xdbfc03b2b4f9d9d33773534c2362ea14f6a3c89910f06c3bf77284017b072c70"): true, - common.HexToHash("0xddc3cb335cea941697cb4e083e5aa809dd15ae073bad5a6ac6de3d0311b189b4"): true, - common.HexToHash("0xc28a9e1d1cde9f2772d27b354154cde16d5161762bea811714b012a68fd60618"): true, - common.HexToHash("0xc6671ddb3722076215a544f7be5eb83ba355966b9b6f45741555d0071dfffe43"): true, - common.HexToHash("0xe96d660add5a750fa9ac18bb27a7a00d95671e971e0faad4603c77d0686e1ce6"): true, - common.HexToHash("0x863309ef607e741c221997cf50c2aab3bba4092d5aedd8a63a7e8a653678c672"): true, - common.HexToHash("0xc24c04241dc6c69476a2ef77354c5bf148807001cae0b952a2c0753e90fcc099"): true, - common.HexToHash("0x2c54fdf6ec6f4d350807409554bba646b929ca5d625fbc32118c2e01df297638"): true, - common.HexToHash("0xb5fb1d02d6f26fe70e6d31955a4a50d26b470a7a8ca74bc52fff4161d3ef41b9"): true, - common.HexToHash("0xb4e5c4c5d021f7066e3d4227c456576e0cd94017d19c07eed699a118272030a9"): true, - common.HexToHash("0xaf269768a49e75770b6bddb51c3aa07a7a34aa6c0cbbaaf62047453f0879c68a"): true, - common.HexToHash("0x21561fa640890dbb6a7e70c46aec9c16bac738d4adac6bd99116298d5c666307"): true, - common.HexToHash("0xc7e486b4eac673d026753a0729123678db909ee67a76aa742522d96f72ce9377"): true, - common.HexToHash("0x779b3efa7cdf6720690726515a776c7780651808a4ae227aecd2d0fdf8f58fe6"): true, - common.HexToHash("0x8e1af8bc1438d23bfbaa2e552aaa3ec97051803d32a7593ca98e6945a5539bda"): true, - common.HexToHash("0xfb2d83d9c752c2de4e0c11c56d04802d79a4be58e97346332a53b8454663618e"): true, - common.HexToHash("0x33425a749fecd6709265c90f5ef6073767cabf316ef12f09981ff8ac3e0fef4c"): true, - common.HexToHash("0xae75dcbdd4f87499afa92069965be9d8699f699ce41784bff2f60773a91178ac"): true, - common.HexToHash("0x12eac9543d605bc1b6a917bef99cb6eb52c998a49399a5381e7f0c3dabd02909"): true, - common.HexToHash("0x794299a0768bf5b083758b9ea2e51755dca60854cd64e9aa30dcf85caf07ce90"): true, - common.HexToHash("0xb96df833218c1a98898c631b8f0349a8fb25f35c868d9781f648d3e7ae812ff5"): true, - common.HexToHash("0xb96718b4e0bc770cc2e4b63c5d27f7984d37f28965a35abcb68c3e14f55a0a70"): true, - common.HexToHash("0x11d9c74f8498ec4975a2553faec13b02594b99c1bef06914c3530428e7cb2af7"): true, - common.HexToHash("0xa5cb9e5a8ad18e94f19b61a29ed58040bdc7c5cecaae9c7bf2f6971d38f64afb"): true, - common.HexToHash("0x6918bf755770377156186d224add7b56b84253d4228d98be8e4793b79f1387cb"): true, - common.HexToHash("0x5ab42a71647862efb0ac3ebdf191fe16e563c23a316c1d2bd32b8beddfaf8904"): true, - common.HexToHash("0x613f01e7c9424fe1e01217e80bbe67fc0f5284049faa29e4b24797b1a5a58c50"): true, - common.HexToHash("0x71831b458b40c501581fb2f9565c89d64652ff80111fd27588b621ad454484a9"): true, - common.HexToHash("0x1f497726939f5e6485cd28719f820581b1b75b7016b3098b4b1e6627cd30a4a1"): true, - common.HexToHash("0x0d7c775164d284fb02a3e9314a9bbfc3c752bed348e37b386a74982096a7c4c0"): true, - common.HexToHash("0x266c0535c02422012f436f818baac6c3fcd1e7891df3bf2b58c37fa32bbdc94e"): true, - common.HexToHash("0xf2d3e140ead9c2140356fd604fc52da2bede85fbf39f93c4403307ff679ae70d"): true, - common.HexToHash("0xb37a8efcfddbc8afa0788bca7c4b1b2178fcd8645bc8527dd3cbf77e69c313f9"): true, - common.HexToHash("0xf4246f6e9688cbe1ded1f4fa184618b5eff09466c6e430f8d78b6e91f73493d3"): true, - common.HexToHash("0xdce83b65d6796454ea4f2f2b1fb7cf9b3a893b115b332607a7b476f193d3f5c7"): true, - common.HexToHash("0xe509e8ed3e6b3bda821f863b3a7d4c8088aa588abdd63b9bcc678ce57e6a50f7"): true, - common.HexToHash("0x417551cbefb7cbcfa3a93498986741ceea245d3b754174d368cf9d993fb6b4ca"): true, - common.HexToHash("0x2c6046f312a2380162ee15681e4c2a2a0857b3c5f1e27b0cee54a0acee605dad"): true, - common.HexToHash("0x938cf4f47bfded97bd5c531b04d69f3544dbdcacd0f0baa0f16be75a5e18a608"): true, - common.HexToHash("0x483957fb461e765b0fc0aeb6e0aa4ecf851a721575300230e6fabe5628ab0d93"): true, - common.HexToHash("0xb8c99d0d3dde85f1dbbcc498face81c1c8880bdd573301b74125e06ff11ca88f"): true, - common.HexToHash("0xe56e3a21bc3f01e6fec1c1aedc0f557e18035aa2c2a419d630ed2e52c192f0de"): true, - common.HexToHash("0xd087a80dd2ae0c57edc8998d0a8265dae14b1f3e0bf2ab3466dc46ceb5940d83"): true, - common.HexToHash("0xde0a69969328cfa54b98722cacc3482271078c2336e48551e34dd9c8c9f851a4"): true, - common.HexToHash("0xc48871c772c655d365f2f84fb74a9c20eade3840c9c37294f242def237521d35"): true, - common.HexToHash("0x0f5fd66aaf04b1287309ac81b7e3862c3b4e135a6e9f9915450c937c63bdfe15"): true, - common.HexToHash("0x65288e81e75d7fdff9b4ce79a6eb73f5e3158bab8ad9eae489538bceb140b4fa"): true, - common.HexToHash("0x8b1538c4b488e776c12af7236b61dc1a6e4d8146536320c4b1e3993aecc52350"): true, - common.HexToHash("0x91b973e913f4099448749be8008250b5aab8ed1f8a56c6faad8eb81522a88b72"): true, - common.HexToHash("0x7075c8587304ffe1d2896d635f1f608e7c8c16e77dba328c879adabaf8840fbf"): true, - common.HexToHash("0x70421de38ae597e83777e7a5ab5341d5981f40baab5de3d4bc3f24e5f62aa9f1"): true, - common.HexToHash("0x1058d31ab3b6d4d383407f33efbb33456ee516ef9708896070e5703711b793b4"): true, - common.HexToHash("0xf55888c3dba59fd63ba7ea0070b7a2f187281972f9e5188334d9fc4bcaf538ab"): true, - common.HexToHash("0xfdecbd8ec52bb60a71d56d0e6cc64d1aeaa8209ed67fcd138521a84179e08d6f"): true, - common.HexToHash("0xb69fa2211d4f7ec905a880bedb2b2d73920a235f9f248fa8c9ec739a128b2476"): true, - common.HexToHash("0xe15d1279956d3b1e8095125b9708ee000bf3dd520f2626b99db600a9c04c9c13"): true, - common.HexToHash("0x8037e431ff9da374658a6279a4e09bbc07bc20ecb5ae9861cb109f385c40d864"): true, - common.HexToHash("0x2bab03e2fb5aa9744f49948803eb6e3d74faf46cbb655eab82a6943636ddde22"): true, - common.HexToHash("0xe953825484aed0bf0e3e493d1e71ff70f3ee08e293fca6b6589c567d9fe7c6b6"): true, - common.HexToHash("0x294581934b60729c1150e27ada73c1096d97feae86236c8e3e1a0e1f75794d26"): true, - common.HexToHash("0xaf447283a38a929decdd1b9f18b6aff8151f5fd943398d45f3dd496902af56e0"): true, - common.HexToHash("0x55104fdc6e3303c8403b3fd2e3f5959323642a724c9a37e7205359ebe74d381b"): true, - common.HexToHash("0xa855ab73d57c7db817571c8d376d2c044cf4acb1de30df1c54db5e29ffc76e85"): true, - common.HexToHash("0x8774fe7d765a715cf9cae69868adc8bf8ce2a951a555af39a8b2272096507019"): true, - common.HexToHash("0x08ff5458045a3a78bfd4357f4922f8b3b1025b856d53de60ae931e43fab0f7a4"): true, - common.HexToHash("0xce76afa486d7e117dfb2b9dfe76081963b94027475ecce9d974283f4c12734d4"): true, - common.HexToHash("0xc97aeca590188f1f0fedf068e3316bb5ca09561a5c2bee0688056c094d8bfdfb"): true, - common.HexToHash("0x11e2a3c3fb17a0c620c5f7785ce465147061aaa3589c4a1d39b9781cea1217c2"): true, - common.HexToHash("0xce59c9cefcf16fd7f60e40179f5f4ef5f2ce9012ab3b7323525d42fc312c86a7"): true, - common.HexToHash("0xbf04b5fa559a5633be30bd702cb7220c99bdcf67c7112adb2582795e3645f2e6"): true, - common.HexToHash("0xc7ee849a24ed719abc9db698c9d9aa91eb7404032c8b11756cad67b26fd0a886"): true, - common.HexToHash("0xbe0571ace1ee23d679bf6f5d0740b60daac278d07caa22d21c992e368131f9b5"): true, - common.HexToHash("0xa0b555e534dfd6c874ddb7431b5886b64f5916bceebe9acab2fafd1ed7fc362d"): true, - common.HexToHash("0x2c82dd88342aa61416bd589a7422ca8457bb642a68f2eabb886db4030c92314d"): true, - common.HexToHash("0xba72cf3aff9940608c3a3ee2363b0756082128066806263f9acc6d13c83c6549"): true, - common.HexToHash("0xedb1ab7e97cd6510b9eee7339da503a01fe95da44fe4ed50cfe01d39b131e3d7"): true, - common.HexToHash("0xea512a6f9bdc588b0c6478f6f431dd5a47207b53736c24f23a9993177dd78d08"): true, - common.HexToHash("0x85f977a700dfeef5c38ecfc79881859ce466c596f868de28be96d083cc74f734"): true, - common.HexToHash("0x20a21b31435a4b80ed2ef3e921755f93f1f2754978c2436b68fa8314b8a17dc9"): true, - common.HexToHash("0xf245ea6fa2c7792c1491c5546cc9021a88ee9896d26a87d2acdbb19c64d52513"): true, - common.HexToHash("0x5827b7cd8e8fd99fb45814d7374dbaff2484a9427d931b17a5d24f0004d74d7d"): true, - common.HexToHash("0x579813d77ad4b123d7942306aa262016c7b040177be631d0a9ed00e140e40536"): true, - common.HexToHash("0xfe432dd8b5e91cc40d69684fdaa10f2cb77930de6602d4ff023c26c538888414"): true, - common.HexToHash("0xf4bca9703f09c6c7f3197106f6526f75d5051e281bc511a9b7039e0bad4fcdb0"): true, - common.HexToHash("0x618d873a93aa835b1cd7337e28b8f2df4b34c5b74228fbae9ab733ddcfe55557"): true, - common.HexToHash("0x86f5bdcdaf99fd82e265ba2e6354ad46a27d959c9273eef005bf76b5de0638e4"): true, - common.HexToHash("0x526bbcece49f10e52fb329d7150dd4827a33f04c90da92765fcdc11bc0375ba3"): true, - common.HexToHash("0x8b812b641b23f463e8144c0aa4bae25ed636292cb7ffeeaa7cb6d12edceaea2e"): true, - common.HexToHash("0x6937997631cf3c812ff38e40e6d9a5be8b99cd0e1efd690b5e2d38c7849b1928"): true, - common.HexToHash("0x228e9a8b2d4c827c78a7a82b3d440261d4953ecaf0f639e0c693f85a57b53fb4"): true, - common.HexToHash("0x2ac495ec5c698daf23b263bf2c8d7dc203d859b2d0dee76c02a2c34088b31be9"): true, - common.HexToHash("0x7be62196fcdb04e94735bed6e1fb9453f1e79dcfc9d5393db381af8ae817f318"): true, - common.HexToHash("0x33e83563685a7497923c2df92758c2c8a6cc6dfb69c3479048b4f03b09d56819"): true, - common.HexToHash("0x2148255deac06e28cab360c4db2beb9b3fd326d8167c44abf7d9e1deb49b34b9"): true, - common.HexToHash("0x1b2e09d778a4c2646816149cb523eae838b969f7ab5d53913fb05269e5a1d67f"): true, - common.HexToHash("0x2f45cd21a9e7bc96b98e7f53bff80ebec3bf80c53566b71a4eec499c6d9d70b6"): true, - common.HexToHash("0x613bbab3eda38be385b7665d2d029ea7b0ffab76e8ef44bf865c7aadbb011345"): true, - common.HexToHash("0x2b199353b6001201a2d207f498a11ec6212d746498d826abc7c8e0fc20448570"): true, - common.HexToHash("0xf958bdfea9f6aed03925acd791e298d563606069f0b5988f28a7525fb0d7a898"): true, - common.HexToHash("0x24999e9b3dc48555c09fe7ba42f4cc8291ec8e779a3a98213c13ff48d6aebee0"): true, - common.HexToHash("0xa42abe82ef313f6e6655f8f04a5a617417043db118a1b04b50fe77f3808ef193"): true, - common.HexToHash("0xa3081c5e08f8975179a72f81f7e8ad65cf79ee287fa7b30f8367b6b037c295cf"): true, - common.HexToHash("0xb3811e99bf5c3e54d80bd7323cb8b5cebc42188cd967ff9c51bfa2359dd7a0b9"): true, - common.HexToHash("0x56980a071d64f461c42dc95d20ac264d6a578355654a732dd5098fda0b2697ff"): true, - common.HexToHash("0x7ec7963c7a1b8b004d08f63671a6278872cd2a68efcf9fee79f3df5046e7fc31"): true, - common.HexToHash("0x16b390ad75ee25cd3ced13f6ef6de14cad999e4d13b29e3819afec29b0afce09"): true, - common.HexToHash("0xf9934e39687bc48c6048735bb9801fb185ea9e6480f3b1f2f7a15cb1293ff253"): true, - common.HexToHash("0x5ca0f8d47eea7fa7aad5b2b36ebf8b4d349c038d128b46c7f5194f1007db5c86"): true, - common.HexToHash("0xb7baaeaf9b0d23589e00d37792b87df9d1e22f5a5fc4da79ad556e76803466b9"): true, - common.HexToHash("0x69e78faa9acb0fef47a05423438f015ad8c306ac871ab040d78723bf219f0526"): true, - common.HexToHash("0xcbc66f752e08eb66cddab9301f6b34aa7281df3045960f44e8ccaf9e8373808f"): true, - common.HexToHash("0xb6812f8209ce8c25aa1edb0582aad3b84ecb88dade651a1bf0c3716810c0e9f8"): true, - common.HexToHash("0xc97d17afa0281e8eeec9a1307fecb245f2356f5d92e9b74daf67690fc73c32bb"): true, - common.HexToHash("0x2412cf18e2f426a4e7fa1a3a370f4b981870e90447296518fdcdee144862ead3"): true, - common.HexToHash("0x65b66e2db362b2607e9b79afd2b4b58ea18de91768226d8f9ef3fd3a8bcd437a"): true, - common.HexToHash("0xb411432b15ef5ade38eb9f5e49070c3f436e34265e8de159e2ad20cb198ad26a"): true, - common.HexToHash("0x8dfdb6e8f8411eca383b5575211c17e3fbefefed9ff83bc5f5b39cb540241938"): true, - common.HexToHash("0xaea98cbc67103f6aba019cab7c1e597cee4b581517f35da4b23c802cbe001a10"): true, - common.HexToHash("0x79f179964ad55b5efe1b98c0c0a97c05eb82b9cfef1d7ede7d08377ee8d4771b"): true, - common.HexToHash("0xc3261d67c7dc3ea621a2f1ed73011d1329818aa9eb99e962894e584421438516"): true, - common.HexToHash("0x2bad1aa7540abf9e5c81a0e3d2912272741e6f56002c01552a2f23905d9ec887"): true, - common.HexToHash("0x048951eadbc2b6c631ecd93fe82f6ef5bb4cf380731d2faa32dfbbc332ea7cd3"): true, - common.HexToHash("0xbbf7463696eec03d6bfda16cbadf7447c6a0d8e0310c0b50dd26491a990dc6a6"): true, - common.HexToHash("0x73518808e388dcb3a645b561e9d344a53d31d38838a141f359c24cbdca542e37"): true, - common.HexToHash("0x18b9ecc1616222f17d7fd1055998723aeb268fe06240029e8cc2a5de5d3811ee"): true, - common.HexToHash("0xfed4c3eb63ee6160514a5ea05131207bae677d7b287f401d9ac6e0ce78a85862"): true, - common.HexToHash("0x81c6313c7cd794210830533254314d19943623fbd5083cf51f1d35f49cc3e008"): true, - common.HexToHash("0x3408feafc49ac63fad0b217326f6ac81ab4bf08ef24c079acb909468b736417f"): true, - common.HexToHash("0x9a579b4ad69da19f98b9fee4517935b16e524ec3b1b7d06d962ce461da7e3139"): true, - common.HexToHash("0x35a5b097ddf76fa306d069ea79f6112f3d192e0ceb0eab13805f718a25d79407"): true, - common.HexToHash("0xe9e11175a31dd72ce31053d54b7c78957f44c25df6c9117d1311b402c2a5ad34"): true, - common.HexToHash("0x23fabb5e877ba2b211cffe378082b730fd21ee54d397f32716c2f8c3a54741df"): true, - common.HexToHash("0xa2502fc3620dbe7203d71e0b5ea6dd39342af61ac536811c011d8ad832cfd2df"): true, - common.HexToHash("0xaa8960c0e598b73f216daed750370f2e1760050207bd8d2f45197099e2195ff0"): true, - common.HexToHash("0x9f8a2f50b0fad0c5976e6f06d7ea6631db1c30ed9fa336e84cd20227225d955d"): true, - common.HexToHash("0x9654e7cbd7d12536618fe359b6602a011bde9d603cd3c5615874887ff60650c7"): true, - common.HexToHash("0x27cfa000610ae3a8ec1659d07add7aa041615569369b6a6b923c2741f3afc2b5"): true, - common.HexToHash("0xf57aa62d65dcdc1888806432a50f774e77f9cc53921e77d5056adee6919634b7"): true, - common.HexToHash("0xb67027bf962417ffd33ad04ca3da8188920d4fe6a8d57fe73de9df0ce3ebee5f"): true, - common.HexToHash("0x7191725256e826a07f5c3395cbb192adfcd0a799b5777582edd8c1eee83d904b"): true, - common.HexToHash("0xd7f6a47f397dfbe6f973e2056a2deba7004b6f54c4a7e6acf08c8b7d23d3fcb8"): true, - common.HexToHash("0xd2ce6c56757d79e84a0fd2d56deeb02567695aa54bfa316fccb4e50141124f10"): true, - common.HexToHash("0xa884f7228f65affe02abc0d38f99d00904bf84aea49459c3106741c54def27fd"): true, - common.HexToHash("0x7d66b8d7b945b9fcf2a3e77fedbfb6306001e1abebc608a95636e1e83b60ddba"): true, - common.HexToHash("0x21883c4a9f4398db4763c864d110b02d7e121977f60e628e9421eb9c43f673ec"): true, - common.HexToHash("0x82b618eb3770ccb8b6e5dad2b92262714b3c15b62d31041df2dffdf1246b613a"): true, - common.HexToHash("0x70354f3c8a7e87ae0a099e5a671f546b94fa26a7249f6ca92e1dc4a552cf8658"): true, - common.HexToHash("0x8c569df83f3f05cd0a5a89435c2fd0280b838002daa0a8f0a714d21bd41b406e"): true, - common.HexToHash("0x1fc7572b6bad2c63068e42a719f26e1a869efcf4e73d8bb91f1b30052d0e9314"): true, - common.HexToHash("0x5836e08b859468458086b5a9c0aa17798c90342b421afef1a012362168925a4e"): true, - common.HexToHash("0xe8265ac727741c83b5f4acf6fedb26e319e7a94a50bc05f2538b1ea45efb7411"): true, - common.HexToHash("0xfd50d18d526226991415cbd6d96548f0f649b720f9cd9abed73c5a05c12cda98"): true, - common.HexToHash("0xb140eb4953e3b4c64b72a9cf8e2b8e100b55d8aaf334823e15112d1653cc211a"): true, - common.HexToHash("0xf99ba1b22d2aa0e3c4ab362c4de4cc308cefba788bc70d9656347f4ba5bad128"): true, - common.HexToHash("0x2cea0e07a3ee12d914c92d1d744ada01bbd9952ce04914854152a244ae14c242"): true, - common.HexToHash("0xaa7d67c7df79387bbd2b9bf36ef25edbf6809782f46e9ad0e4157074edf39e1c"): true, - common.HexToHash("0x911346747c36bbb349a0aed841f08b2c3c353b0f3db4d11d7066a1792038e84d"): true, - common.HexToHash("0xe46771c2c164636a969518f766487846068db042d7d53d4db4c4496e89168ab4"): true, - common.HexToHash("0x935c15b0c60363a730eee098e3a22e49b77868ecdd1c8dd8ce565317005c8fa9"): true, - common.HexToHash("0x858ca920088516b9c8a5203c90bded1634511495df19c09672c2a33360d109a7"): true, - common.HexToHash("0xc913c4fa512b4fd18b4e5f79108e941114630dfcdfa33f93cb08fc0158f07e7f"): true, - common.HexToHash("0xe7111e3affe91b5ab50b87d72dfa83e79f5ef0a0db3d25c877e7cdc14fbf2da0"): true, - common.HexToHash("0x62933ac4554cb3f2e68b3d8aaf602fc1c750e02cbfc8b205c7e39e3d0a13b3a6"): true, - common.HexToHash("0x52a295cccfa665bfba52ee349fccd3cce59c4462cc1aa8ef5f11c4b7bdab2d72"): true, - common.HexToHash("0x2c08cb47e65704abb8b29ca108bfb169c7f84d8880b0f62c3a2a678bfb5ac7ed"): true, - common.HexToHash("0x6ae545c033a7901a7dad5acbd0c6481c6bb34bfed65dae83a8d698256edeb62f"): true, - common.HexToHash("0x29f16eb1d9d5ea2a2e70c1d0b18db593aa4e5260aa5a95144a97003e5e16f8f4"): true, - common.HexToHash("0x7a6ace53ce4e14331ebeeccbce15e4ec0331e19b62356e3d482a1c293981e05e"): true, - common.HexToHash("0xd381692b52cc75a236ae7d9f2e2154860ad7e7e70fff4c402a28644680befa22"): true, - common.HexToHash("0x8f7b1be9aa67d498e51f504dc9a430093ef8ec201900ba7ef3aefdf024bb6f24"): true, - common.HexToHash("0x35b9d3a1e14ac59ce9fd358d72b34da5dfefba9bc471a15ba25b1c2c895c8491"): true, - common.HexToHash("0xfef843e0edc410144d517c16c88424fbb4aa7c7ec7be666e93785b8fc76700eb"): true, - common.HexToHash("0x23034171e5ef4d0ad05c784ba34c252c5508e480223f1d019a1b6b5a3a2cabfd"): true, - common.HexToHash("0x36ae50563f7e7615366871c22ceee8d8c654376a977d9a723a3a7becf1a7f22e"): true, - common.HexToHash("0x336a2512fe72ad12de5bd65cab0903d4b4035e002f08abf45ae3a8100e6debbf"): true, - common.HexToHash("0x920bf4b44f90594a652a606fca87bea73dbd47bc5c0e48b05b26d68163495200"): true, - common.HexToHash("0x87cf346c5232a00f976138ed14f69a1a25580e7e5dbb8314648e27fcd6bbecfe"): true, - common.HexToHash("0x03bee1a2e1804d230bab03f07e2c2551cbdd878fafd215e54137cf28995ba303"): true, - common.HexToHash("0x17763143c7cff81d31eb77559b0db4aa72446afa012b8edd14fabee3339dd39e"): true, - common.HexToHash("0xc44a8d69f802e42d39601c4192c0ff2ebafbdc940f820623751df610cf1d0c72"): true, - common.HexToHash("0xa66413b978c5a115b07a54efc774e3f979e343d05d063011bbbf154b370033da"): true, - common.HexToHash("0xcc99cd522b9404167580ca33502b8a2a871a935f7e9cfc0dbfc449d8921a7935"): true, - common.HexToHash("0xd52d79fc590f0c1189ba7937ee63b217ef117b5e7d198a2ab0a5867606f10dad"): true, - common.HexToHash("0x8eb34be17e341aac6cb173d86aa9c0402082a97ae32787f7cf477e9e8631b328"): true, - common.HexToHash("0x446b6c58854f3fed9eb79369e749bd31631a4a0c863d75d62ea8b6fdd9d58da6"): true, - common.HexToHash("0x143fa17127e238f82e1f889aafecff8ea99317f4e89d05df3b5f82a399b24e60"): true, - common.HexToHash("0xc598274034da6198a51904c89ee5608f840dc33ec030fcdf43439346686ad0bb"): true, - common.HexToHash("0xd3d0c89a37bba08633cb26f447c4ca9b4787bb486c708af9af3b927a232b0d16"): true, - common.HexToHash("0x3ae950f02b9dced6e735153383f224d7d09d08f9137d110b766b44b899a290be"): true, - common.HexToHash("0x987bef480c56abeefd6f4b15b0d8fa0d255c6151aa3414b8f9e385f0bf400b26"): true, - common.HexToHash("0xb2b77f8c80dd47ba9a989a6b455a59812458e15fa10d1ed59748f8ed8acf5732"): true, - common.HexToHash("0xd1ec119463c1619ef855c046360e225e6a1f7d7ebb2ae30919d4ec471dd5b9a2"): true, - common.HexToHash("0x85ec43f70960ca169ee3b0946ac757d3059e99025907af58378d24521f655247"): true, - common.HexToHash("0x3faf4a8c6cf77b95f397907d6948d3e0efb41e76281620be1522739da04beae4"): true, - common.HexToHash("0xa6e0fadfc5e97a094aaeac6d3377220175ca092f8bcfa559315dd4a48eb1b8d2"): true, - common.HexToHash("0xb20fdb7f91333616063878908a8decadc188bc314489d15fca699b0386f7d69d"): true, - common.HexToHash("0xf6860b8a8cf05ef0c6a7a85b46120be1ad1cc0dba92778a3af3b184446eec827"): true, - common.HexToHash("0x045800d3ddb9a62dfc26842eab962dc3b3e91df088432608518bfda9557e9414"): true, - common.HexToHash("0x5a4017ec3f4cff3fa6cbf10a8d24152b941a855b96ba178d0e237dc90ca3ca81"): true, - common.HexToHash("0x77016e7b073ea74d066ad632876e43086ffe4e7485f99e8ad94b6688a631a83d"): true, - common.HexToHash("0xb8a8da358f521ea3ecdb1c4266cb180b4328582c68ccdae818520d91e73d609d"): true, - common.HexToHash("0xaf39760ba17a42694197a47b61a20833bcbaf95cd0fafe4e700599296599b2b6"): true, - common.HexToHash("0x458c20903fe33a92db2876e091021b226bb41aecfbb3db132d29cae28da293d3"): true, - common.HexToHash("0xc633038c2a22f521fc1caa91725270c8547c035a1d71c7237a8b9053a3b13075"): true, - common.HexToHash("0x3603969cc144ec192cba6a37299e76e2e62e2958b269ad612e425ad49df576f5"): true, - common.HexToHash("0xc93fc4d13ba41fa00f01c74581ae5d901949edb4f381e872d6258973408e7bab"): true, - common.HexToHash("0x925d0c607281d2e40c05492241388e1e808243e7849b53e9ab10256be6acdc19"): true, - common.HexToHash("0x752c7fd1f257e8df08ab96cd8a30b9ef9069582afb5db8536ab0c96ebbde1422"): true, - common.HexToHash("0x464fe95171434c7ad5e483f22f934117a1d1fe9a2c720aebf6ba0968c19e7490"): true, - common.HexToHash("0xdee860a922362f546f5fbeef45584349a1168242767fa198b24f370fae4cdd05"): true, - common.HexToHash("0xd8e28dca4315b50a499f8c0689aabffe49d86fb894da14d69bbf99943d7ca6f0"): true, - common.HexToHash("0x3fb648788b403edf2df0fbde93a142d522ecca05178399a1a5d175d69b7c3b01"): true, - common.HexToHash("0x3a15b6059cb833e1deda500ec69cdeecd218eb5d440265866758b39d69d8dfb3"): true, - common.HexToHash("0xf796c23b30745d960b69193b27028f04d5e60d2a1dc3672187f49270ca4fba55"): true, - common.HexToHash("0x5385fbe30703cdcea895a8b5a9676d6b5f54933d746dd9928f4399c488180914"): true, - common.HexToHash("0x87a10a1cb0c248fc4ade30b2b6a6c4c0cb533cc9638d5d43997224c48adee9a4"): true, - common.HexToHash("0xce83b02aba5fca96d0403a157dd2b48b43295e1bec0b5302c6c79f923fac43c8"): true, - common.HexToHash("0x7a207cf44540fb2de13c1c8469a65666deff1be9b9d991a68a5f4e34bed8ffa8"): true, - common.HexToHash("0x3a44f21533dfd4d61330abb7cea9ddc721a7eb781cf1fb6e6f0aa8444e6184c4"): true, - common.HexToHash("0x314fbc4afb13c898ff823de9e47968cb0312b5dfe39750d082911a4e7450a72a"): true, - common.HexToHash("0xd616cbeb7cf7fc39865ecd3af41d20d56ea21352b128797e4a05f064ce2d5c27"): true, - common.HexToHash("0xa1219709aa4e203f63d87954d6b150340228bde5e23d8072af4a909236e01bbf"): true, - common.HexToHash("0x3a5d8e308b89171cb58fc179dd981fa8961b9ff5fc0e3ef91a6b98f0263f6760"): true, - common.HexToHash("0xc36b29abcd83274d8a9f00d579156e96c7b7efe15231430ed86815eac00b1cae"): true, - common.HexToHash("0xd571f92d53083c8463d14cf6ae3467e7ffdb53d652570e48dc2808b4682cbcfe"): true, - common.HexToHash("0xa09bfed5b20ccde6de88a60b83fae67923ecf4149f0451ffb5b84ea74ed3695d"): true, - common.HexToHash("0x6c3e79d820f57d3bed96f2f547da00887533828db7ef400300cc57f9d7a7f072"): true, - common.HexToHash("0xf3d2701b1d7a28bb840072952c2fffb625b8c0fe225e9bf6995c44f2b0b253f7"): true, - common.HexToHash("0x600cb67560a922e3f83ba6060bc097a16194eb2f6696c1f7ba8ec6d729500d67"): true, - common.HexToHash("0xc1881e0188e9a093b2fe25638558dc43a3e997dfac7ea39993d10b755bac1c30"): true, - common.HexToHash("0x3c835c9403b9662c24d641feb0324c941422e4a20d645b9070e817ed1fcf9cf8"): true, - common.HexToHash("0xcc98278a3b686dea00bad677ae30be24979ae4616ea1bd3a22b30772d94b4122"): true, - common.HexToHash("0xca655ac16d45ea429eda731fa478d6466d104028dfe4d06c007525f59e526f9d"): true, - common.HexToHash("0x43c570745739cb1b457129c0596ed242460e80da3efac0c26ca14829af5f085f"): true, - common.HexToHash("0xcdda6000481559cb7bf55acfa8fa5889318cbec6cda8639a96ff9f21b1688976"): true, - common.HexToHash("0x321342d15a3231a67494471b6c2605ade5b91c0c9d8ac6a1263d854ea5498537"): true, - common.HexToHash("0xa287bc37051e75463af15d640bebd38234beafb8fc6fc37e4a66e2f4b9152aa8"): true, - common.HexToHash("0x821ef7183d650b3bede12830106250f4bab5043c58f0112a11032429678edee3"): true, - common.HexToHash("0x28904e951856f67d6921240781344af30946fdb15baf8da2baee1930eeb48fcf"): true, - common.HexToHash("0x8201f49444517d99baa2c9201f4f2ef6ba4c5aa0b5de38372c4667474ca27fc5"): true, - common.HexToHash("0xc6c979c1a6d83bae038d19a3a05201833ad1c5ec54d0b6708a32d6397319fcd2"): true, - common.HexToHash("0x1523b56c5353846b51a414725111f1b88c0b795dbfdb2e94b2d46ee0cb852a00"): true, - common.HexToHash("0x55a087f00ef9dd0312ab3ce416e63d777c2b88a9e43e74250b05c59448631f71"): true, - common.HexToHash("0x5000bb6f5e5af38ee85c1688d2ee060a17f3f28617c48dc2cde4378d42b59e1a"): true, - common.HexToHash("0x45be2702d70aa7239a61f0e47130fca87ba0bb5d4605165c38a6a51a6c7d21c4"): true, - common.HexToHash("0x7c6f03d67b241a1636bc66774ce34d01cde1395928236cc504592918c6b28ec9"): true, - common.HexToHash("0x1ed08ec31757f49169d5f64c6815d9f4f917293013a74f229c302c30d9121210"): true, - common.HexToHash("0x353dcb1e4ced4416b648f55012ac58684b20c9186f22afbf9adc18b027aaffb2"): true, - common.HexToHash("0x6ccbbca280719b04a8817dbb4820b1d7900b085e3cab802305c5f5da6afdda3e"): true, - common.HexToHash("0x45fba40d49656871065da7161c04595b2329db9a446bf3c1a90dcb6801f393be"): true, - common.HexToHash("0xe36c19d2f7fd76c5fce106569cd828405958abca75f54642c788b1e9726fecee"): true, - common.HexToHash("0x6c2c82c0223074e405bea53669c1e6000c590edb3af88ba22c9626f553c1cc05"): true, - common.HexToHash("0xc91911a3911e8ccc74781f14f01f4062e769c5c96587057d5d097110f4fc5a1a"): true, - common.HexToHash("0x35b0bfbc0b39fa00b653168f1b99a90dfc45df1bb370196b769496ee6fe18f87"): true, - common.HexToHash("0x83f000821962d5c263ded9b4bbd1c8649de364565ae9121c3888718b554dfefc"): true, - common.HexToHash("0x6027b94f77d0ec6ddf01a58982c106b7536eb5808646cbbcc8e4dd77677cd97b"): true, - common.HexToHash("0x851151d536115acea21d2f89dff04cc94a9ba4208d389d96679d2cd3fe78d631"): true, - common.HexToHash("0xcbef618a2b6ca76229f74352a9489a85518e8fb906d40f1e3daf086db9f00f94"): true, - common.HexToHash("0x35614b2f8d6e1aac7dcf2a85295b72dbb289d82ca87953c626d73401fda3b127"): true, - common.HexToHash("0xf75ab2a007a4021715dea90090f74935031975a8f9ea3b8fb36f3e51b976ffcf"): true, - common.HexToHash("0x398ae46ecdb42d4b2dcf26376d3497f373be702648aec949f6f3b92c1910d680"): true, - common.HexToHash("0x0a9be97d6a1a32b3e017687bab3964a7bcd515344e3aae4a6ddf6c2756afe169"): true, - common.HexToHash("0x39a0261089a8e0832b352a6b9272bf8d2ae1f32fdcef974e9134b82dc7d46687"): true, - common.HexToHash("0x1c535ae154669080b6d51e646acb23f823531319f6e51ffe0aa334046eed7b00"): true, - common.HexToHash("0xe85189227589b931b89fa7268ddfc1eb6f69332bafd75494e7a4217603786a0a"): true, - common.HexToHash("0x1979af58b0ce6b2516df5066667065d5b2bacc1bd18e17c48a817f519fd53164"): true, - common.HexToHash("0x76a680ed0a1ad6292a01b4a6a41a0d51b060769ae58e55af14a128765c32a141"): true, - common.HexToHash("0x8f18bf5c6af8be9953da0fea34d4bf684615108198466edd65afe8fd69601a8b"): true, - common.HexToHash("0x42fd7ec209b15d8f94ac877d4ef0301bef565cced8193e539b67f56e68eedfc4"): true, - common.HexToHash("0x4551581dfa38adf94e40df7aa02e5b97306dd52c75724ea9ec47a56d1bd3df3d"): true, - common.HexToHash("0x6b2536b5beb617b9e94dce681fe6b718af1a41a6d2cb84934437d300ac4990e4"): true, - common.HexToHash("0x57a6a3a14ee77bbce9074ddd937d701f3d55d9b01a469f9674d4804fb2000a3b"): true, - common.HexToHash("0xe1d8c22819beeeec93ac2b7d1d6fcf43a743590268bbf3fb4180d3ae70fa6495"): true, - common.HexToHash("0xa8fdb1f6ee027d3e97db1dfb08539d18a6ded652d6e3344e107ce21043744c7f"): true, - common.HexToHash("0x21c19bc2d94b5de798186b7550e33ddbe9404ca9e9905ea3b0002fe2d3e3afdb"): true, - common.HexToHash("0x748ed1834fc28196502e29293e7f99adbf6bbfba2426c5fed91d84cfcf42ce42"): true, - common.HexToHash("0xd237751b28fa90217addf54ccb1c896fa4d47f4d344b7ef7c5eae5c4f36c5c40"): true, - common.HexToHash("0xc829f67caa27f4892d0e1f80d65198f1b54c105fbfc04b8485850894e8cef400"): true, - common.HexToHash("0x683cbc84fb4f81deeb59e10c5d3b9d473b66423ca8f0b874a0ea74ac5faaaef0"): true, - common.HexToHash("0x25e722194f0bced3ec53a757d20d8cc1896991a26d0c7864bd313467dc3754a1"): true, - common.HexToHash("0x944654c991cb7d75d29b6e28ae4f90ecdeec660f8e33dced052fdea567d26ebd"): true, - common.HexToHash("0x52c4ab46c172f98f31ff1b31929f8a6ffd4d87c58b936d9f76984e8776e0c810"): true, - common.HexToHash("0x9ce5073401eeaa92174384c5288c1509b540409c27b26f07a4e6def8be5b7ab2"): true, - common.HexToHash("0xceea69e4aa47ef15cd005d8a44399f2a14a48a1c9a27bbafb27c1454978b7c6d"): true, - common.HexToHash("0x75975c9e5697b2a3011a1d004aabe8735a51bd368b9daeba080a3b743ca57d75"): true, - common.HexToHash("0x27ee9e4df2189915f32345d2e1ef180d82a149a3a0990aafc85c776fe0fcb64e"): true, - common.HexToHash("0xffe4fa932393b7044fc2ca875b5dbaee9bf902b86a32774b0031c17c8bc67ae9"): true, - common.HexToHash("0x23c6fb9822e70c73e3aa8e986263ffcef20a3abcbbb5d52173a7a37aae1d40b9"): true, - common.HexToHash("0xc8bf79941a4df25026b2606a3150c36200972f3e9d078dffaa698d690a6d94d4"): true, - common.HexToHash("0x2539db0eb01feca2737d5ea519f663b5600b95be50d2587bf503c2771af54c4f"): true, - common.HexToHash("0x42c6a18acfa538ab0a43823db2533fbf2e31c18e6d0027ba8467646a832516a1"): true, - common.HexToHash("0x461f46fa4294ed220c48abec60222fae4fadb4e0c285cb74808d5813906708bf"): true, - common.HexToHash("0xe8c81b72b9db6b1972bd482c223ffbce0fef009b8f1f716dfb5225a8f0fe09d8"): true, - common.HexToHash("0x65914f5a298dc668e9355974f9555c9b3f1b345889157b51dc8a515490eb07e5"): true, - common.HexToHash("0x378cad6abf2dcbe6ffe7a24b2434d05ce6dfdd68d8d60ed785d3431a005d5e16"): true, - common.HexToHash("0xbe12cc3af031bd3dc9a370b5ec756f56d8edb81d8d5233a334cd9cc88bce253a"): true, - common.HexToHash("0x6c905cedeaf9fc68ed3818f049318d0c6ae1daa2d26acf7937c6d03ba00048b4"): true, - common.HexToHash("0x93fb1889fe2db67f76af85185e4739f9e5845e32b2840ce3a439e0e1dd701a38"): true, - common.HexToHash("0xfba30daa4769086d2c0e92a2c34dabca2fc2551eeda8f32fa66497abd194a913"): true, - common.HexToHash("0xbb4cf22b89acb1c2968c9f1f88e11c078d1ffb178b2795caec0f50fc7f5424f0"): true, - common.HexToHash("0xf71650d9160af958a9f46e50148872fe5f6c88717276e5e8912f6ead5ffb71e3"): true, - common.HexToHash("0xeb12acc09750f6367366979efdae14d685774da5906bf56f23d99c053877c024"): true, - common.HexToHash("0x34d679cc3f5637708b451794c95adbb30e8da61a17c2a25f88829ac5e9530780"): true, - common.HexToHash("0x1222e96c850a2151c23d9c62046406556a2fb00f28893135a69dedd9fbf5217d"): true, - common.HexToHash("0x7f25e318fffba67b8f2ef7e79bd49bdab36b966b9478568e8e9bfdbb62cf22ec"): true, - common.HexToHash("0x5169393268a486e4827df583786321f2888276a0039a01d47bc1bb92735453cd"): true, - common.HexToHash("0x12606bb02012dc9138ae76067c019c2c11c029d02844a2dad2de3cd6cd813097"): true, - common.HexToHash("0xc3ce2436dff2f65a96e4eaa0eb5cffd45f1a4b6caf204176b3bc6a6635f67537"): true, - common.HexToHash("0xd46929e640a1794422b42008f89bbf3ca1c87d589c5a01f6e470119f1d25d3a3"): true, - common.HexToHash("0x4e48eba5597f00e30609727064b32018f14ba404e99cf8faa81613226be357f1"): true, - common.HexToHash("0x69945b1b8eea94fa08488018234409ae030ea0faf04205caa6dc3536b06e2de1"): true, - common.HexToHash("0xf6d5b02e0f3d86528d1f7dad59dbef0dc873d3b4db8fbb86da61b29fd22e947c"): true, - common.HexToHash("0x54c3fb99999ec649584546d065a4e7647521eaa05eba0279d607bbcd150c9e8c"): true, - common.HexToHash("0x0796d53379f8fbdf454af2ae698048163fec162d7e9e6e67934ad23bd8d7a92b"): true, - common.HexToHash("0x0ba627ee17e7b051772b8d1e7d8a2f3ce2309fb3c470accf416da4be5fd97959"): true, - common.HexToHash("0xf65dfc22c791f0ba3cd06f1814c2cfa6612dde169736cd6b166d729170d55814"): true, - common.HexToHash("0xda7975b67204ea511a594764eb23de53e3fd5ba82ebdafaf09b96d293d71ea42"): true, - common.HexToHash("0x376f47022769ed538322ced4fdaf215acd2905a46006f549985404f92800e305"): true, - common.HexToHash("0xae478e62bf63a165be3907694324717f372a61003be829ee0ba81d5be07f4ccf"): true, - common.HexToHash("0xf268d0172febca4aadbe533bc44d810e85068068edb7322afc7d56d5ae66f332"): true, - common.HexToHash("0x87b86840e04c9b147f943c67c034f34131294d982682defb5d9b0d2bd6dbb43e"): true, - common.HexToHash("0xed4ac62ee2d3347f839bec9c8f357bfa79d65f028a74888f4895a8cacbfd1300"): true, - common.HexToHash("0xcb7ed25a2d5553f4f9f96b7201dec739ea325618be1b1ff73cfb8b259301ffc5"): true, - common.HexToHash("0x018496c1115235a8a7f9f4ed4abe8322a550de8ffe872bbcaf3b0392d39b341e"): true, - common.HexToHash("0x67bbc04307a755f554726f785d634fa6f128d05d579a3c445005b585864ff11d"): true, - common.HexToHash("0x1a5bd38f81b44723f34198d3a111e6ca09bde2a51ab6facd6708d74e26086abe"): true, - common.HexToHash("0xec3e08fa24f8c3025376f54a12f219d8d8ad2c0c6a53137bfc6ebd560488a9cf"): true, - common.HexToHash("0xbd7edf30a3dcbb380a72c28ac5049fbe0df437cd12016524835d712369480847"): true, - common.HexToHash("0x53c820910ea2d043e9564a9e545e26cd02231b3a34dad7948fadbd6847c1c9f1"): true, - common.HexToHash("0x6bea1f4c0bf607af53b1cc25bcb9c590f52c7eadd44c49490ff8c53e75c28ed1"): true, - common.HexToHash("0x9af420c608fcb0688a97b9f20fd0776970f9eaab35965a2cbd695f994109550f"): true, - common.HexToHash("0xf0adf5c824579f1429f21276bdcdb1ee267a3c9d6ae43260c243f65634c0adaf"): true, - common.HexToHash("0xb0d55248e103c96fc55e9bb8a96843ae7f8fde7a7a955e5adccb39a35580dc6e"): true, - common.HexToHash("0xc17504d967f91e4a99e72bcb5c008a120a11c81aa56652624d2d137c395ef0e3"): true, - common.HexToHash("0xe038f855df4b54f3d27c51028c023a41719b37f1aeb11ffe2b0be508ab272abe"): true, - common.HexToHash("0x90edc372ae83ca28e7b1ef01b8d730c415a0829c5787881984cb35b3f0d7005d"): true, - common.HexToHash("0xf94ae2753032c2b2afb023c6472fc1f333ae87b1a5677e22812a69bfb0472b83"): true, - common.HexToHash("0x53f24971327c9e5618ee603b15140f1d9d4608db343cbd1072953fbdcbb91b65"): true, - common.HexToHash("0x7ea8d7be9b14473f46a6eeca4f30a3f7a3648306be625c57510d09704cfc518c"): true, - common.HexToHash("0x50334ae2eae53a6a7879c056e197a9b617eccbd4fc03bf6c6c306ef40241cbc9"): true, - common.HexToHash("0x1d7d1e0ec5c1d56f4be8be0298a4354b0eceaf79419bc2cfc60d72a49af52194"): true, - common.HexToHash("0x965cebe0fe75c5d4343465586c80b15d4c7558c3d3fcda09c4471318a4f8dba3"): true, - common.HexToHash("0x68e320a2ee406dd1c71f5371924681d2d99fc12717b3c70170e194eff789be0e"): true, - common.HexToHash("0x2777afe08732371a74d9144d3e7efdbc374f7a8202a6653ce6927e38a0e9b4f8"): true, - common.HexToHash("0x2e17ce45672ced98c931cd0ec6bda9cae3390d4e6ba804818e6338009b7b9f6b"): true, - common.HexToHash("0x7113ddb0a8dcfd0158c51ddd9228fa82ce40aed6190070a99f0de7a2a8c1fd81"): true, - common.HexToHash("0x30fa309985d9e5929f8a509c4a81ae7b213f0ae75bcb17b8933778d42d95e670"): true, - common.HexToHash("0x98996e962639ba7ffbc9a77c959c3ce00e824253326ce84ea6fc45cd7c1017db"): true, - common.HexToHash("0xd676b2a8db52ff40288909795fc0635a776ab0777a48f80b4f844adfc461277c"): true, - common.HexToHash("0x44f4abf2ca516308de59ec451cbe04c1ef34c1afb9f741265606d7f288e16256"): true, - common.HexToHash("0x0314901dd99e2dd061b97d607d04a13a9703166ed42fe26ad23523187b74fbca"): true, - common.HexToHash("0x12aab91ce257159b451a95c084690d978d2133c97ee3797626cb532cdb1f21e1"): true, - common.HexToHash("0xc6c9bd5fd157cca2c74a3265561e3d295856913634f0dfef87176ca3aab0c753"): true, - common.HexToHash("0x1b0a20f1e0a7c805268c56b24eda6745082a7950b987285632c8de491940b69e"): true, - common.HexToHash("0xadee7f580f476a4fcf1f04a1288975423ee126ced0ad62c5ab5efc16b0e900dc"): true, - common.HexToHash("0x4cc759eb635e61bf8f1c2d7712a10b124228ff18a7d4370a4b3aa797adb15513"): true, - common.HexToHash("0x2f51b8d730245d88a860dd286e9118b93edcaaa4b4be4373c66268d9a509469a"): true, - common.HexToHash("0x8aa9ea4229eaddc3ebec9ff302a400014cbfec4cfce036f7c3e03ac4767b9c65"): true, - common.HexToHash("0x32a1dede9b67ca23631e6816217167c456f5b8bff368fb7488a5ff0f5022e4a2"): true, - common.HexToHash("0x6259401204e3ea1144ef69a8a4271b588fc35af96a32b8d394927d36c663fb85"): true, - common.HexToHash("0x436bdefe76419da0a69b32ea9428bd103d3e10efdf6686b68e0d62009b81ccd2"): true, - common.HexToHash("0xd9557e339a4db8b86573434f0636758c4b7ea441d2bdba617d0be730555fd397"): true, - common.HexToHash("0x36e833d8374874325d1b28298bd0bceea6faaacac1ee28cedf345edaff84cd21"): true, - common.HexToHash("0x69072034d65e783232cd0ca2d629a386c0fd767e261212aa1369967c938585b4"): true, - common.HexToHash("0x01925a3667df38a604c77db5c9e0f601c2c0258370199a2adc13598721d5fdd5"): true, - common.HexToHash("0xc10a0db8dcf55fe1068fad5629587306900438af3828507192e749303c216938"): true, - common.HexToHash("0x29a6201751c28923acc8e0a68bf8027314c6c7b1f4a4c3ce24400e9afa5e55bf"): true, - common.HexToHash("0x877f74c45065e9aa6300d3ffa4cb1164b48857b329904e53463f4d6536b4e135"): true, - common.HexToHash("0x0d183e4a6a29d5067b1fc5e6a855c536f3ed52ad15f4362cf0b198a428b4cee5"): true, - common.HexToHash("0xb2e718ec2e32c75a0170c62d22fe6d6909409ac46a7d582779538d3bec5ceea6"): true, - common.HexToHash("0x3791259cb91415a505de9091a18d46530e44fabc205683a4d9272ac49ea904a1"): true, - common.HexToHash("0x895d71ac59d7cda1806a839193f38b4e4849b27978643e25ce879251d8790231"): true, - common.HexToHash("0xfec1dd9ffad7d1c97782996e46ab3d3ae589828257b252437b259450e25355db"): true, - common.HexToHash("0x5044a125bb365ae01714d5d735848dc292e958b080da30f947d00dae384e8ccb"): true, - common.HexToHash("0xc67faf391fda3c26b6474ea39141adde047376d564fb1402295b692f2fa7750b"): true, - common.HexToHash("0x2457ddbfe8cf62ba7826729bb9aad110191945de150bd6e9f6fbffb753cee986"): true, - common.HexToHash("0x837237b1e3e72f47b4f456dae63c069e57577a3a5ab65806409f7f0677f3bbdd"): true, - common.HexToHash("0x1315f83bbfc753b1165bc71defa28cefbcf750476d7c23b627a0193ce8651bc7"): true, - common.HexToHash("0xdbf2379a8524bf74834c858895feae3e2ec2acd0f971010d285e30365083eb9a"): true, - common.HexToHash("0xe15f266dfc14d34267c1773133262c9232695b64e8b0986c97dca2fb738762ef"): true, - common.HexToHash("0x153dedfc435ee846b84662cef98ebccb2e4a0721a4bc373b2cc953ec6b9c8d3c"): true, - common.HexToHash("0xd1b54f71d828300b3417db44e6d47661abc201636da0e537bc04e84236ebe65d"): true, - common.HexToHash("0xc7e291f3627da656b190cfd2c5a8d70146632d7e9100f87aaac804cc82b5df94"): true, - common.HexToHash("0x48070fc159f9885554229b8585951d7dc8f586bc3a6c3a24d43508310bc7f082"): true, - common.HexToHash("0x04cc3cb4763b223c0cb18dfd6316de61134f2654db83883dd9fb100dd140d3aa"): true, - common.HexToHash("0x8a3e841fb3d42b60aaa528f27143920389bdd3e52a010c4869dc13660cf89b02"): true, - common.HexToHash("0x6cf4be000c8b71bb66c923544a298ae9b698db4f1531781244447e77ebadec86"): true, - common.HexToHash("0xc11ff2f7dfe8f54f93a26e08f42c23f7ecc1471c8d2827cd3a3499dd4bf58fa3"): true, - common.HexToHash("0x6872e150412eb28600b15086d51659c21b230b4abbc61b7718eba6c2100dace0"): true, - common.HexToHash("0x15282b64b11c32233bebd1e290e9904b3eb376726b5350529620f4d88f26d4e9"): true, - common.HexToHash("0xf6bbf6518cbe88fdfb6bb0ed8ffa369f012cdd5abc3ee0ca2d68579c8a9520cf"): true, - common.HexToHash("0x74ff73dbe85da36f5836ab832e0697c6e8d5eda3074ee5da1e940d9e402c5288"): true, - common.HexToHash("0x81cde83485aa7f70832c063e13deddee13a8f7ecb622160a69efab69bb7317f1"): true, - common.HexToHash("0xdf4d515b622ff4a293cbd8f135ea522beb5a9d27767c8a038905ab5c4648d837"): true, - common.HexToHash("0x5b973dabc9ff65ef5315fabd783dbd38a9666af14c9e6301b85873f4bde2c02a"): true, - common.HexToHash("0x14a533c199dc356fc156fab532bc1fb972fdd9cb2d58b638aa8f1f9f9d4d8e3e"): true, - common.HexToHash("0x1082436f4e1741652d3d05729243a5b3d9f5d0eeaddd8006edbf1ed44826dbc2"): true, - common.HexToHash("0xa91df6ebb704ab8aa0040ef64cabcf47322e639f55cb32896bd86bf34a15bb30"): true, - common.HexToHash("0xc4aea7afa89ca5ef95c6bf57a139eb4ea370a77e56383036451a0e1b1646731b"): true, - common.HexToHash("0x4184f6d73444a828403510958b5dfeb0e8a72c5ed5994e38bad1bae9827fe5b6"): true, - common.HexToHash("0xd50d8b6edd6e0b7fd5fe89f40b5b77e55112dc8619cd82fc16ec53f36dfbc10a"): true, - common.HexToHash("0xa170cbcc54ef6195f41ce50c3de77517ce8bcbccf1e8b9a2a66118cecfacd26a"): true, - common.HexToHash("0x71f30e68469a80750051cefe5fcf31de830ad9e0c47a8707342ae11874253604"): true, - common.HexToHash("0xe5751e9e6a26f1c8473321825730803e7105819a64630fc89bb03d4af7e4e173"): true, - common.HexToHash("0x889d8db4d234531f54bd560921c72328a402c010408b8f033de413e0b619fe5a"): true, - common.HexToHash("0x5f4b4d17d680cbc8a793375b67ad7a21b0bf3a181a1337a7df41cfb1c697571d"): true, - common.HexToHash("0x9e01dac810bdfb9a6537206ce7718fec6b605df1c25f0b329a75d3ed532fd096"): true, - common.HexToHash("0x9ec0ab4eb8ee23ac047efffe22c8093f1bf44938f4c860609278aa55be3d91cc"): true, - common.HexToHash("0xbf3b054d6434dd4fe41d06b84cfd9e2542ba06ef61e8485e5a3cef9190136de3"): true, - common.HexToHash("0x13918300cb9dbfff15ce9776aee6046b07af3aceee621b26f92a6a7d595beadf"): true, - common.HexToHash("0x445535c7823a7736ad8bd56bd86df2bba342f74b16dc3936a28cc411243a2d4c"): true, - common.HexToHash("0x086cc9aceae87b465118f6af2130799027977b577ca46cade0a448a1e146b6c7"): true, - common.HexToHash("0x28609484aebfaf9250733ea4ce4873eaa7537600772addc753f7d9884dc0172a"): true, - common.HexToHash("0x0e56e1c0b8ac04366257686f4078f68e556d39d1f26f06747cde31e9faf066fd"): true, - common.HexToHash("0x06911c951fdeb5ff9c955cb74badc557020922e4b1dec0ecd27a1a91c0c03cf6"): true, - common.HexToHash("0x3f4761aa44e240e91bb4439575b458a4662336ae0e5c3610d1b163652dc62829"): true, - common.HexToHash("0x191bc75c34f57eb4549ba57dbaa044828a29c852cd6a876d6a3761fe161cd8d4"): true, - common.HexToHash("0xc22646184869ec7c512388b56ebd314d688bf5f5d62fd45a2320807444191c15"): true, - common.HexToHash("0x9310b653ab90e404ad4aef6f1a5a0711135a551cf49255868719377b347add1d"): true, - common.HexToHash("0x7a604e63b8b7df4876f46bd48539e17fdca5edc38b50a0af8094efe3fab2b982"): true, - common.HexToHash("0x56c9f618cd84746387acf0f87780702d0a35be25ac1a1405cc5e8eff912434a5"): true, - common.HexToHash("0x29fb5d5a4193097fddcb16b0ebe2dfcc16c654ccafcc194a06eef33a9d39613a"): true, - common.HexToHash("0xd488a9cedc46d787b28efc99163335507f0765decfeda3cbd6ce4dd8deee4162"): true, - common.HexToHash("0x4aebe555f6f610c4e465bc8e814a774d66e59b55d4df127eacf241c2ba0f4cf2"): true, - common.HexToHash("0x274e1dc84979d7a43a5903fa9db6f004d390bc587b2e861a43e4d487b904c4ae"): true, - common.HexToHash("0x0417959a73e9d102d4d1a80a0fec402713bd7ab803645923b3493757a6583ebc"): true, - common.HexToHash("0x2c7c1686dc260503faf110cc82b3756a3b49f3ba9a14a1bdef1b9784364353cf"): true, - common.HexToHash("0xd0d50f55b794afba859919f102ef28e2b05bb8cd9a6729647a918abd421abadb"): true, - common.HexToHash("0x91fdca58d5a9466029fe0f396e7711dc2c0b497d13b99e7eb7eb52ba51f278c0"): true, - common.HexToHash("0xbc0c0eac4d2917f02c3b1a48d9889796646a79d5a9febb433825e1549d60b993"): true, - common.HexToHash("0x2e5d5daa740b245ef51b997805dcf54285db8a9c5c947db5c231d8f81361e745"): true, - common.HexToHash("0xcc2f476181e1f66c81fc29057c74adc30b3f45b43a3a46efbf2057e092543322"): true, - common.HexToHash("0x9e1291b5045b08736e192ec449c971dbd2a164a748f0dfb1c6035bca7992afe3"): true, - common.HexToHash("0x114903f833232c363643f53d9852c879bf482a452229d41b5ff96b340fa25ee9"): true, - common.HexToHash("0x24265540ec4dfd78b0ff3a6c6453b31dc193efe790c075c71c39818dfc4d5ee2"): true, - common.HexToHash("0x76990a2a51e4cca8b177af313a4d8910f0a86c99127ed2fe90c927bae9402659"): true, - common.HexToHash("0x950f23032ca8a5f6a3e86e6f87c5c225e517f11aab6a5db856f7b933e119ea9d"): true, - common.HexToHash("0xa8ea8c132d519a98ab881df20bc3e72b47cfbe230f0f6d329f10e5bef8adeb91"): true, - common.HexToHash("0x1c56d4786df900855b08d14970a4f0bbf2ad16fcb00f18538cdd865ccc9fd096"): true, - common.HexToHash("0x83e8e55ec2f4caf201e8e2f1cc3faa98795568c9fe1c54024fdcbbfb10a9afbd"): true, - common.HexToHash("0xc6dd4738c99dbe8522d1284336f42147bdf70e4678bed6fefe0c6d02d62d856e"): true, - common.HexToHash("0xf285b51264dc4abc72cf119c239a937a7c033cb7b2d12adb9e943626f689d756"): true, - common.HexToHash("0xe9686966fee2e374870ad6d4f570d647da1308e56e23959c03bab73b6e8616a8"): true, - common.HexToHash("0x2a1e91bb0c127c1f3a5e12da4c2d71a30a252b373a5d596e6fbab6df5345990c"): true, - common.HexToHash("0x5bc2f707d98d5e94ef187d0fb9643806ec58a22d447db162b3a114b177dc8ceb"): true, - common.HexToHash("0x000a7e2eb1bcf30a112223a7ecb148c4603728c65de6ab0fbd39aa6f77a689bd"): true, - common.HexToHash("0x454f3ca147c7b404984a417ed2b74d0d64bcba48e3dd64e149a3eb149ee54b1f"): true, - common.HexToHash("0xcb35879b72a5901ae834e785cd1f5312f168f29a9b607056936f4c4c319395ce"): true, - common.HexToHash("0x91c946a8654551fda098cee82c316cac583d325cd7c5f6d6d4d0d4ca4df45a51"): true, - common.HexToHash("0x4c75f3529e9b8cd31f65b7e233c1755e71429bdb17dc01f4ae64978f51296496"): true, - common.HexToHash("0xc9aace4e902f288a890c57075946ff8a531e68b404b0114542dfe31398268452"): true, - common.HexToHash("0x98a98975dae653c959469170550249e4d85d23bcb92ea0554d278e54b328d800"): true, - common.HexToHash("0xe1dafb997121cfca17bba7a6d51d57bf3b55f1b3ce0c735714bea645c51a51b7"): true, - common.HexToHash("0x5601284d84d9249ee2bbbaf447185d31b7233fced2581e755e97a70e7222b959"): true, - common.HexToHash("0x500d618d56beea9782e8cfdb0e00704ee565cb4587c0b05d42e71660adaa7d6e"): true, - common.HexToHash("0x122d5777031a1306c2c7870fc1ddf6d1f4ec797c1d4ef1abbb809964b2b8c503"): true, - common.HexToHash("0x7666ae534faad39d61b5b1e0478da3a8859ee49d1ec161856a096ff51083abd7"): true, - common.HexToHash("0x6a50d6e4555de7537a8fd438b76eba7b994841d989609eee1810857b5a74634e"): true, - common.HexToHash("0x53b6c77397d3dac9d6bca3f5c45f3dc89a2d749021af0d83b88675e7c60b661d"): true, - common.HexToHash("0xabf112e6b450455150337c729a60838e65d473628caef5cc817a80ba29b09ccb"): true, - common.HexToHash("0x5756f1ec9761a86b39bfa0fdc429ae257e701fc6feced54d156ef549bbfc3b23"): true, - common.HexToHash("0x387d05694dcc915ec998aa4671b6201658d51520a11c2432b77a4706069d380d"): true, - common.HexToHash("0x78adc6c7877b253e917ca761a61c1dc87f8715343806a29d1ccbd5c851042cee"): true, - common.HexToHash("0x71989ce1bb1ee1534825a7753c372b016fca9194c542f8f32ed65bafca46510a"): true, - common.HexToHash("0xb07567ed9b03d3bdf61ea5a6b6dd000f87b8b952f85f0fbe19cb3914be04c7f5"): true, - common.HexToHash("0x7ec9b71912a064a0ccc4ecb158d8ee04c1eb905ec5a192f03fa2401dcd983eb3"): true, - common.HexToHash("0x68974403a77b78be9246526fbcec27c6577451cb2b22fbe5517924ebfd84e5d4"): true, - common.HexToHash("0xc8d0717d3131c2c72c3a2bc3665d6c026e9dbd43f7cfd9566571114da4a54d78"): true, - common.HexToHash("0xf89c70c980c5b2544718bd3d035b103489c654b879c098bb0bdf1283cd97f7ec"): true, - common.HexToHash("0x9c2ff3378e543ea2ef796ce81dfad563bcfd2e37c45aad6a38f0ee4696e04bfc"): true, - common.HexToHash("0x942ef0d9ca7dea0ea1cf14c4a8ddd627a90586fdd804e70e9085dcc356849384"): true, - common.HexToHash("0xcdbabfdea7b9458ab201085cd37f1f25d66e267dd7d9fadfd34ab3460d5a5205"): true, - common.HexToHash("0x2a50b2dfdcf8046a815cb16091722e0cf7d7c14e7786d5762ab8a63065e1f880"): true, - common.HexToHash("0x3a41c8554ab2a227134beecc420b164cd3e2170e3222e5e9b541c6a5832f1655"): true, - common.HexToHash("0x408b1971730dc55ae35990877aa12fa21ff59f89c29d266f94dea1a14d6a87f5"): true, - common.HexToHash("0x631914138438a866b8bca13d6cbd3ea2a5d9eb2abea540d73d5e92e78fa768d8"): true, - common.HexToHash("0xf334460a15a29ad604d654ac1b31649d46162be4f806be079393e8d730481f4c"): true, - common.HexToHash("0xf4b8c04cee2cc3a2e91b4c033e1269af64895ff282dc1303d4a1e0fd09cb24e7"): true, - common.HexToHash("0x2f028a53eb335d768af5c119d60a2bf6d39c200c8562ebe671ed3355adc746ac"): true, - common.HexToHash("0xdc1ae1002376ebd2807264c26b8e17f5c4afbd578ce990e67ce2ea465eae89a6"): true, - common.HexToHash("0xdf7f9d44be68622ebe4d65b3ce3ada01603e2c237b342c8893d5fb04dc490f8e"): true, - common.HexToHash("0x49e44b33eac39864b12b6b1fd8d3dd52dafa4a4fef2dd473cec112935d40166b"): true, - common.HexToHash("0x4ca75923f0bb772c5a30a6ba763767d4fb96e88daf3b19090f557df2ce275883"): true, - common.HexToHash("0x295d79106b9e3d92cde4f144680b5747171bfda78af5a65e41206b0468f30558"): true, - common.HexToHash("0x7fc3657976e866b6ba8508ad8faa3586ba3ad1dd1d5d06c15cbde7ec90442906"): true, - common.HexToHash("0xbf97e559c8766f8d9d38baa0de6af87594b0610313fea46373459aa664c41a1c"): true, - common.HexToHash("0x0dc4e25b29580c609f4dbe10869012be24a17d34e09b3a673e16f4df34bbd4ed"): true, - common.HexToHash("0x04859bb1ff836cce952de1d01a4d2363e3c6d0b3997a8dfe269fbf87a8cbf0ee"): true, - common.HexToHash("0x8694c1d2898e07e34c15c5ad6652866ae4ca4d88f4337bbbe855857502908009"): true, - common.HexToHash("0x4f09472a8c93d9de6d450df0fac45a68860c79bb76b91d56e94464f32df0b0a0"): true, - common.HexToHash("0x2caf3ff90dd89b5cf138d78f21b04f8f76b98cd10859c03c3bde11364ffb2882"): true, - common.HexToHash("0x2f24cc23ceb9bd22517bb02e761099c157c8f3b7a5f9a84d501a67e7f747a1da"): true, - common.HexToHash("0x710a78672353a69499709859a289e06b3a1be462e1155b8e7d0e75847d53db47"): true, - common.HexToHash("0xc7f572274c1798b0911f7927cb45c160e1b60ae9cd79fb3ab2646e1b6af23ef2"): true, - common.HexToHash("0xc60e7e0415d37e5a2dae135592f8efef9410a0cd674832dd4a4d31ab5ba1a0ac"): true, - common.HexToHash("0xbe42ff382a1e718ab350e96ac10588b347da0bff8d806a0c14b72a4fea497a36"): true, - common.HexToHash("0x6a13f42fd55bbb5f53d92c145d2a501cc8e2361ffabeabf68161ca4c4cb90f01"): true, - common.HexToHash("0x82dfa97685b5725003cbbf12a4f1f35503fd39460eab2ddcc2ef47868fbf0722"): true, - common.HexToHash("0x236e95fbb21f353e51d97438fb92d71067148595bfc56911a3784d22754fbd0f"): true, - common.HexToHash("0x9a7539b43d1dc2f86fb6917a915f29cd99589be406ceaed2e74be8a3780c13b6"): true, - common.HexToHash("0xaacad0380c878227b8466e2918440451f5b5aacf2fe77113493dc161faf276b2"): true, - common.HexToHash("0xb8fe5928ec9bfe507b74678bf9ccb31189095a527d09512dca1baa341eadec91"): true, - common.HexToHash("0xc47f539a2e3903d2ede6e060f926b9d3c881b0db753f8548e932963595c8ac28"): true, - common.HexToHash("0x44a29cc25194c30b94ca01e9fedbc6fe6cd96c56d9fe880c21ea59542fa72135"): true, - common.HexToHash("0xe5873bcdfebdd32544c46e753a6074df7c80822355d9e78aafee0b50c86e5f67"): true, - common.HexToHash("0x6125ce32efbe1222eb088a0594e2282e34a579c0aa8ec90d3da2e3e102d0565d"): true, - common.HexToHash("0xf73913b2102404613730971c9dbe94b13677e507d940d9ec3fc177bd4c4da27a"): true, - common.HexToHash("0x492e43da738dca5acdd32ae545ea10b72c523068d812cc7fdf99ed4e253be15e"): true, - common.HexToHash("0x517cfa00d20e7a21fb140adb36344110731fe20d6eed786b43df0926a3580062"): true, - common.HexToHash("0x2d0f1cfdcb0b516be618029f26be83db788b23dacdb6a2dcf7d862c64845116a"): true, - common.HexToHash("0x1ce8b77dc0b064c1b5a3c64a50f5067cf5cac6c6338b0ce81d13958bbe105907"): true, - common.HexToHash("0xb8fe0a90db1ad6cea9528dbfb7d52220c6207391f853a51e6c9826d8639e7987"): true, - common.HexToHash("0x33c34a1068c5d132e3e2c6767243b7cffaeabd256cfdccf86f8bfa03d280775f"): true, - common.HexToHash("0xca04ab416fb048eca1d019b3330d13faf363706cf7839d751dab0df91d09698b"): true, - common.HexToHash("0xaec9c3b6a72f600681e31559c9c825d3015893a920c216b5e834316f35e2ee98"): true, - common.HexToHash("0x582b3d0efea3544b77047f58d3f39c1d98848362b591a8c1b9ec7e70c6e117a6"): true, - common.HexToHash("0x1b2f4eb4b015af2ff17869c7cb4318ab1f5530e575c288e7ce46b16e984beeef"): true, - common.HexToHash("0xbf8c9485d18017960650809da0e1aeb1d0cbc16b6f9175b511fb588b2b062e38"): true, - common.HexToHash("0xce4115cbc712ceb7ded69dc89b4cebc229bac3e151b342f6a130467b7c167f1c"): true, - common.HexToHash("0xf0b2f7689d840e20b1f5f9102593f1dca44972ba77cabae6a74c2ddc455ad982"): true, - common.HexToHash("0xfca9b5d63bbe9d2a2c2ffed62afd56bff020263cadc946b7f577bcca4ed7d210"): true, - common.HexToHash("0x8b42539500207b1d5c5a68afa4df961a232280b81a386bc95ee824fe4fdfce71"): true, - common.HexToHash("0x0191cd056468a90e9b4d108e5108490ac260b3a3228c2721ad32d1200c2004cf"): true, - common.HexToHash("0x09aaf899f93a2df6e3c0c95d68d0206445718057a3ad35fb80cafc24a4f284ac"): true, - common.HexToHash("0x5c022679e284e5ad1fc856b9be52bab9990e7c26c7f33073824497fc3a3f845e"): true, - common.HexToHash("0x3c930265fd1dc92d2a3a207cddee529bfd560cf1187f747c452e3a9e33d41022"): true, - common.HexToHash("0x49831e7d90573379adcadf04b922daa677df4736ce0d53a313c8ed920470f619"): true, - common.HexToHash("0xe04840fe03030b79ea653447f76508cd33214f6afba9b3f9079c66e399acf7c4"): true, - common.HexToHash("0x537adf77905a762b14dd12dc264e0bc6ebdec615354d2611a9352071926bce00"): true, - common.HexToHash("0xd97da920a62c11a7ab1ed861d394e336507c94d48fa85ab45081af4dbac772b2"): true, - common.HexToHash("0xd7e5bac87f80b8e038123dfe9cb53f0473813e9c78c2194084f2f0fcc5e4a3d8"): true, - common.HexToHash("0x3cda1b5bf8dc9d2fac140486d0d57a1b031f7ea9f3096b64573cb89b2997977f"): true, - common.HexToHash("0x2c4d959ada0bdbc71c5c34db11f6247138ddd8ec4669188338f7b3919f1d95a8"): true, - common.HexToHash("0xeb424c1a0bf2f67a8b430b1758964bfb5f0eda73a03c3cfa05e4a1450f8a3839"): true, - common.HexToHash("0xf620beec1d4bc2c67f32676a4dc87144e59e424bb540457d7fb0a256aa2b06a2"): true, - common.HexToHash("0x7f019b5c465a9bca10b086972a4b2494dabd97c5c87b4acf52c2c21d6be87312"): true, - common.HexToHash("0x623ee9f2f444c9bd6e2492cc85187b4ba6aeef56d9b7e32d4945fac6a31a56c2"): true, - common.HexToHash("0xf9e8fa237518f0ff6ea66ea64bc3467c6822f20309e5efd9814ba209f8624d1b"): true, - common.HexToHash("0x80d1e9587768163a3ce90e6a1fce4c8fe67cdf2c12875734f31c28b6b0afa053"): true, - common.HexToHash("0x4eb244259648408cd7c3a85b425296e0401ea5bedc2d2e42593577e781e497a4"): true, - common.HexToHash("0x2577fd45d7982effd08a0f8f89c8e0e059650ee3c3c895d2f61d8be7fc1c121c"): true, - common.HexToHash("0x03c3ec1b249e16d921a99a032019a5acb13c82a7e5a675e3c573883f6f210867"): true, - common.HexToHash("0x6ac867bff5ae269465e7c0c7231e32c25301b178b2b92b5f2c946dd8e7378c3d"): true, - common.HexToHash("0x004bc3f219e62da1ef8bae0746e530aa31374ff131cdf053026a8dde56053b9c"): true, - common.HexToHash("0x9a3d2677d16ffbea382bf6a181d9f607a3a23424da4f39a089d89356b17cdd95"): true, - common.HexToHash("0x00624a6e95901def3278fcbbd3370e5e9d8fb2a4ea8c5f8c3ac795ee3ccee2f5"): true, - common.HexToHash("0x65c386f6dcf69fbd3ee7a95abf5b420a2f9d3f35fb78d24bc1a7e6a36bf92e30"): true, - common.HexToHash("0xf4850a15394dc1be40d869850931403057580fdeaf83ecd92bf01c1b510e73a6"): true, - common.HexToHash("0x3630ea17f8e892a2aa5d13e2961638eaefb8bad1782b16e5fda4aa0c79b8894a"): true, - common.HexToHash("0x2c7e59e1b20a622c8b481b88a8ecfbd9ded67d6c26f128ea087260065183d75c"): true, - common.HexToHash("0xdc0c0c6191f9a07625d788441e28f0ca0ac400ed92e816c1e1ed09cc7aee095b"): true, - common.HexToHash("0x1ebbaead84b4a5c147d8084d6ad8ae52fb4d2aa9c61cf7c3f6e2af4b6b028963"): true, - common.HexToHash("0x196738387fa8e92c33987a4a249c9a029e7697295f56b9a77da0e60595f476cb"): true, - common.HexToHash("0x486dab92ab08433602bd0ae9037d90b084dff768d953dc667818d9f16f2f4c08"): true, - common.HexToHash("0xb3efbbcdfb28f88a242931de34af12846c5494fc1772e943250375bb2dd699b5"): true, - common.HexToHash("0x5ee6d58da239991b184b61ef65daa9ca26e84d5a716bd60bd0bfd5c3c71d73dd"): true, - common.HexToHash("0x087de2b8a2fb08ade122942322487ca16dfcc620f2ffd4edfbd4798f261d941c"): true, - common.HexToHash("0x9abbd70da48188ef00c8846f3c4cf0d9ee638868c23a61fbf24f47f552ad45d9"): true, - common.HexToHash("0x4c2d9eb2c8c1db2f55dbf5e55d3f165f04448e548b83020cf4fd2689ab071fef"): true, - common.HexToHash("0x5c5c4749cce1654025d23abda8f21a8207455e456c734b211caf6294d289e88d"): true, - common.HexToHash("0x89d6a1803088f51edc3ef88d0712b0d766178c0c743a716865a5fef798fcfabc"): true, - common.HexToHash("0x4461ce18d461008cb7a0166f595529099c61e47add28d96282852dcf677b6e4d"): true, - common.HexToHash("0xe8f02c5535ead2c6cfa3130d0df7424d1c348c4f4d84ffa9b72e51d91c17f076"): true, - common.HexToHash("0xd196ff097ba7acef8276ed66d2f5fc1e04892edd1850a69a2700779e09a9625a"): true, - common.HexToHash("0x190b4c0b573587bd24a0bf5645284b0f797739b4c1ebf5d292e09eed07164d54"): true, - common.HexToHash("0x9074216fe2b7969b1bea9605136ab2bd0eeb7e8a1996af7813245b8a8b24317a"): true, - common.HexToHash("0x1fdcaa08ba2315c516d2ed2ed8e44612862b31f7ec5fbdf51c9e1f24873654a2"): true, - common.HexToHash("0xf7e39f05d5a2801fb8e7612f3042dde6e4223cc2f16a474b0bb3edb97facb5d2"): true, - common.HexToHash("0x39ce22498f3ebcb242b881b491e6834fa91b90b1a9ec266678386bdef8a2b22a"): true, - common.HexToHash("0xb297f291e11c6bc44209584e30de80140b5446efc9bfc88c2e7d78b0530b11eb"): true, - common.HexToHash("0x9ba1570940349ebabad3106d56ba84edd760588c507ebbf4d7c8fa17ba8e853f"): true, - common.HexToHash("0x60f9948b41f8fe6e942014209fb50ac85d73786d52e16761c20be9f730f04bcc"): true, - common.HexToHash("0x0535b1198131a17501710ba027e113bf106eb1f2036a48a5c551f1efdb9a9e97"): true, - common.HexToHash("0xe7f3826aadb8cf7ff7b9c26f2dcfc8eacd72f429c6b27c1bbeec2b007e2fd19f"): true, - common.HexToHash("0x1a40f2757a4d86450d9602c121baedc2ad5f77d91155e7bf8bc15fe1525d0a1b"): true, - common.HexToHash("0x5a12685bbed25aee317948a3f37b9e68e1a42aedfb1bf39bdbf1bbb81544a771"): true, - common.HexToHash("0xf98713b4a8e74858b28e9aaad48a423717a81be02884fc8bf8025e75d9803509"): true, - common.HexToHash("0x4536938604c1d864190b9d81b38b47c27f8672c6f8a4ef7307dbda762f37ba8f"): true, - common.HexToHash("0xc573bcaa21236fd094ee51846e5c088a59c7421f915ad7f3716690570dcf2065"): true, - common.HexToHash("0x46cec227197d92df065f291ffb9eadb05639902910128341ea0c1c5586b146a2"): true, - common.HexToHash("0x0605c9513c755394f4d0a4a6300a9df6628211fc5243284bd143a825712328da"): true, - common.HexToHash("0xb098d2c3ab9799c7688d457f62fede45b25b3a00981883ba0efca06b7d014dc2"): true, - common.HexToHash("0x3aaba64f3329bcf760bc9230c23c3f84b3da0d7bd2a85e84e1628fb425ef17c8"): true, - common.HexToHash("0xebdfbfe234bffb9a34a3e1623c8ffcde42793fdb5a009b47e80ba3e5d3efd6d3"): true, - common.HexToHash("0x0f51cf4e9d8125bc8e9d09d0d73c8a8f4fad540d86d387cec0a821539be876f2"): true, - common.HexToHash("0x6967df6a49fba32138744c7f4de3ff8141208ab6ab821c35f7d091f4898dcdaf"): true, - common.HexToHash("0x875a289706da4d647a60ef357e0e208a29b34b95ff12720dd5af22818d7560db"): true, - common.HexToHash("0x8f555392bfe149808234f60813e0c376817c6d96652a63431353557a66a25105"): true, - common.HexToHash("0xf09d6539f41015e5dab6aac4c3554364e014838132931869c97b0f31e2c44cca"): true, - common.HexToHash("0xc9df225d2c54e677e25d7d55c1cbbc72166c46e29fd96c44e63a6fb5f7a0e916"): true, - common.HexToHash("0x0083829b53470f4e3fb8d11f15c211f43637b81ef9cc13bbf8fdeedb1110a7e2"): true, - common.HexToHash("0x1639841e07b993ec284a4a2d866243512cc050e001f8f3765349b328df783fc1"): true, - common.HexToHash("0x584fd053c85f56837c893f080b07776f2e667d26c5e067af5d7404c8046adec6"): true, - common.HexToHash("0xbd618b836a45ae043dded69fccc0046aebbe64da9d7d574064317e978a989252"): true, - common.HexToHash("0x457497388a66322c6a06f255e7c2f86dcc3d4f80eec18dd1b5c95772b487374f"): true, - common.HexToHash("0x945c7b2a490d0ff7bcbc17977a9665a8ecf537a19099456c857757cc1f86fac2"): true, - common.HexToHash("0xe61077744555b2ee6e9e723a63a57e124881affc09ca23ba598033f42a697c80"): true, - common.HexToHash("0xc4512d93810c343d2ca68c739d94b259b5deb22be9d52edee01671ba9a68f9d0"): true, - common.HexToHash("0x00fdd302663d2556cfed7437f43b6fcb3cf850972e2e49c7fe3183fa4a5d4097"): true, - common.HexToHash("0xeda60fdf79d32e2ef1c1cb9feaf363a32e5242fa589d9e2a97935077536b213d"): true, - common.HexToHash("0x3b244509219cbe5eddafe8b5ef5b51530477010e0a5647c29ec02e0c91cbcf8b"): true, - common.HexToHash("0xbb14c4a3f46d2639f9240d496ba5941750fc5e6f3eb9295eda4d7b1a0c9f4437"): true, - common.HexToHash("0x028a5a074bf932bfef95890b37b440fdc10c14429930cc321b8408fcf665e5be"): true, - common.HexToHash("0xab079f060e7e08e34904b1218b4dbbb38045eba4688fe16a2e2cc17cb2292e6c"): true, - common.HexToHash("0xbba2d58b933215985fa34cc97ac2e60bb0a4d95429c664e728a2a65d3f6e68db"): true, - common.HexToHash("0x3cd96737675329994b381588eec6cf42d92d2b1d1a1d394f1bd6dc8138256ca4"): true, - common.HexToHash("0x4354e30096c938342a5c577de98c3dd2db86af60d5c314d7af9f331239ee96ff"): true, - common.HexToHash("0x9dff119192690c8578e35de233f566a1c3cd7b97272e8225e9f7b12d11a05cf3"): true, - common.HexToHash("0x3347f673ec1261a818213ab438bc0f53e64d74d8f33833e2e6c4b87f86657c26"): true, - common.HexToHash("0x1846514b2eac9a87e79163b107dc36cb69c4e8b8969d6f8c8ff5456893406b14"): true, - common.HexToHash("0x7d486caa096677934df109ec5b2874a127e6c55b5b2e56cfc4990487e45ca712"): true, - common.HexToHash("0xf523fd1974f7a02c3d775f9bcdeb4169416e63025337f8633c5aac448e7020f3"): true, - common.HexToHash("0x89053e940952b53451834fc15a2bd1c876ab536c01a0fd3f49408ee5dcd486ac"): true, - common.HexToHash("0xeadafba6d98d43fc77033d454e0c4e5f97d54780d6fa93592d0f51ee33224762"): true, - common.HexToHash("0x2ffe83fdf178bbf3dfdac99eca9b8b8f140ec8ffa04255a04df924dff723b820"): true, - common.HexToHash("0x25e110ded5dd9141559f893532670cb7c8ddca1c0880919adcceb45566fc5299"): true, - common.HexToHash("0x704ec94e0c94942a2826546fdc0d2e1c292ed3db272b2bde842003d87084db79"): true, - common.HexToHash("0x0505c452105b1b9fd6f1c95543a3e99332f36bc0f42a46b86e000aab42ada02d"): true, - common.HexToHash("0xe5fa19e36600d53e7d7e432a40a18fbcf841722aa5dc24beecfb1232b12785a2"): true, - common.HexToHash("0xdca6aa515d1a1ca869862b07db9361a38656ef4a01f58d076f4294cd1717ae54"): true, - common.HexToHash("0x5c09eb2436068d88bbc5242887e162ee666513a8af2075ba8dacbf9b4471b995"): true, - common.HexToHash("0xead0f614a00915c0948bc627d96b532e12a6a0a6adabf5cab5074e654b14d886"): true, - common.HexToHash("0x2a806eb47ebd6c99b95d2c56b8e77d8789979548c3b0bc95e6b623f28c9a669e"): true, - common.HexToHash("0x51635af9edf7feb9c1885ee5ff3d1219af1ceec438f4e23fa3b5a6f943c7a7b4"): true, - common.HexToHash("0x7dc744e3e11dcba3906471a8ba1fcc3947342b543d338143098fde500a0fdd01"): true, - common.HexToHash("0xda119a3d06feb50212898ea9791c68bd865b3a783c175456f1b5487257470882"): true, - common.HexToHash("0x8c146e3002f454ab8a10425d9a8fffdb4453cd21a940909cacc5ad75c72e007e"): true, - common.HexToHash("0x567886de7b1cf9d013669ae65ff5a9d67484fe44265a2292dcd83b851a237fc4"): true, - common.HexToHash("0xeebe3eac53fdd8fc9e588d89530ebb90514ee42d6059ed770494e67bc9f8226f"): true, - common.HexToHash("0x0e26c2d6a15b948cd6b5a258892570f68dcb546407cd82f0fd4c3ec6d79c190e"): true, - common.HexToHash("0x286f834fbe3edb6dd94ab2e3161df790a610ed765daa4286109c49f7efe72852"): true, - common.HexToHash("0x7613c909e676fc3ce99b18f98f214652a9c6191aa49d327be0eb8fc644026f6c"): true, - common.HexToHash("0x1ea7c2e1d4aace3432ac703e94ed47d04b6f97d44d6b0dbd91ce07726e7b276e"): true, - common.HexToHash("0x3b9cac2436b2d2b632b549b4e8dad8cc2e697d4c8da8e6bb91f3f3603a380d0c"): true, - common.HexToHash("0x9556d24cae361e90545d56039a510e31dd21e63ed3b000a82b6d9c7d11b9a643"): true, - common.HexToHash("0x6638c6a2f389e7a6cb608ff1a6ce8107222c5c7310c7537f2f46a5618ce6d47f"): true, - common.HexToHash("0x5ab2c72a3685b4811b581a064cc9f048fe8dc9bfee9655f988b1a56471632c3d"): true, - common.HexToHash("0x85b44bc494926ab08ed0a5615cc3c22ac726396e453bdeee8f86003fd35110e0"): true, - common.HexToHash("0x7f43c7a99f9ea7535ee6b33b923e7ec0f5a31bd899045820e5f2d06ddce2e022"): true, - common.HexToHash("0x61057ef078f703f852aec4e2f030bd856b45086594892c1c66430059cf675cb5"): true, - common.HexToHash("0xa5b43550f51246341afb329b6b828b2b719f7b9e4af11b6fa20fccc0b4b946a9"): true, - common.HexToHash("0x7797449e679fb435b46c73b6ba74cb12c06eeaf1be2fadb32cdc817261770d92"): true, - common.HexToHash("0x4465909c2c294ba3380bdfa1e997660585bce175b019dd0dc273a420af164006"): true, - common.HexToHash("0x1dc53f747c5425e01cfa3f6a201c1c2f1b9c3254cb559e690b0b2670ccbd1934"): true, - common.HexToHash("0xd4c5db77d6ac2e9baa322a5994e4d361c33cc7a7644b3c8c92196a4e8fb261e8"): true, - common.HexToHash("0xa8914dbf6a5ea3dc0ac0dd728f6e7ce06f7ba837f84ea7b10b2bfe9fb9fc6ba4"): true, - common.HexToHash("0x839b8d7e5aa0c7078dd4469b5e7d6f74ab4710017a0f2f287db87d7a1f7dea0f"): true, - common.HexToHash("0x1923879e9fccb2727d724d61f872ce7298b99e3dea0cd8d3552408abdf693520"): true, - common.HexToHash("0xae459932f37a0ed66023e50720eb3ff6022e29b5f14de50285604a2402d417c0"): true, - common.HexToHash("0x86b8244933ccde87ac7091c43e3af5f2f7db6a581e7fd87a84ad74430e7595c5"): true, - common.HexToHash("0x991bfe95b82e5af89c554c1974e034e965c48ea142039e337d147bbcbcebf7e2"): true, - common.HexToHash("0xb3a418d98e409af53b89a24b00260efa6e56900e37f3767760d37ec39597589f"): true, - common.HexToHash("0x7feadd7ec9f4df78627d5a0b085a1f6606e5a0fb0f504e87bb65a34eaf841226"): true, - common.HexToHash("0x8f37bf7728aef2408a8180a3d5bdd57c690df0db98df039b3225a894ea63efa1"): true, - common.HexToHash("0x39f0477116fd7f003c8c7818e9ec372f8908b7029233112cca5a21a340be56fd"): true, - common.HexToHash("0x42d170983509af58567afa3b0fe7ef7ae1162b911afa530ae130c0da3062b37f"): true, - common.HexToHash("0xbdd9d4f3f7ed8e354fd9f61c075eafecf08e1a345d069c9d735213aeda3a14f4"): true, - common.HexToHash("0x56a8653afb07f8fc9d112770d2a5faf51380d23a3be07a1ff253183480d39361"): true, - common.HexToHash("0x7a66c8cbe6433ec869a14f77773e2ae3068d4481d65b412e0bffd71fcbd25fd0"): true, - common.HexToHash("0x042d750f0cc7d51c40cd408e5107530af0aa0a3c270e46b12a235b8d72b7b249"): true, - common.HexToHash("0xb3cdee4736a10ab8fa938e3eab006e39b717b8e83020eabe0821867cf0893d7d"): true, - common.HexToHash("0xdc28df60c5fb4d75b04bd9c2d2e73967f25be88e771f80d3d6906f9ea8accd87"): true, - common.HexToHash("0x7ea064a75fddf3a07f973c46ffb74ef319d44736a9543f6419597df4b51fb097"): true, - common.HexToHash("0x935117a40aef6d8f6917c7611c8930da07e19998d6e9c357bdc3981fbf9b5bc8"): true, - common.HexToHash("0x74c8889c894f9ff382e977dd6b4044dd159af12ecc51c28b61aa0fbda2d62709"): true, - common.HexToHash("0xc6fe2e22aac8eebf6b7876d6acb07b2ffdc274000c05c9829fa4b2f8ad0d1451"): true, - common.HexToHash("0xe0a58b5e19fd0d2d7664b38d63f36f72bf9cd7a69ccbf776c91e1c6af847d101"): true, - common.HexToHash("0x7063fe302745018f4d028eeef5876dd956d0eaf1f1406b964b1a79f908c2b400"): true, - common.HexToHash("0xb405e70b1bf46a51e85f8407153e79ef47c269bf2e6e251b6ec5a32071f4f551"): true, - common.HexToHash("0xb54923a22ebccc0f9348e7dd23581f19bba6b4873f9f1a19e2174f14500e1efe"): true, - common.HexToHash("0xb52a083055aee0b7f453403629285589e7d226e8d0edbe14762505be376c2e64"): true, - common.HexToHash("0x40428a598667b036adbaf81e7066c182b1fa3792ee3943fc0401d0ca172c1663"): true, - common.HexToHash("0xd065f9a08c1899af3f4a29df1ffd0d2e8fbe1416fe9c9f4ce7df506c63aa7a5f"): true, - common.HexToHash("0xeef0d88f92c5105a7e5cf0de62ee095ae50ba73aef0530bb587f12ee66010778"): true, - common.HexToHash("0xb8fb49dd052ae920638425982813f1def34f7c53c9a0d43f1ecd10607dad62a5"): true, - common.HexToHash("0xeec3dcc3bb64c9ea982bb71bfb1c90cbaf5fbef602c0e99f4cf107401109f6c9"): true, - common.HexToHash("0x044f83ce132073cc9cbe4ce5a889441c38948a44e20fd818ce7492947ebfaf8c"): true, - common.HexToHash("0xff9c56cf9b9b6f332e627eae4f318a1e90c1533343725620c139e892a686e70a"): true, - common.HexToHash("0x6c4e26bd5c13206c2eadf93bef3e47a643ab93849ee7f356f1b5cfae624f3e49"): true, - common.HexToHash("0x272d55000f5f24fef890a421eb5f91862205e5f1b5bc289b22a7290aaf96458b"): true, - common.HexToHash("0x95da70df08067e382a9b85c8c65e4675ed2e8ccb26316ab6bf983a5d93c350d9"): true, - common.HexToHash("0xf80e56de1ebe75d3988937337bdfd0f6582d59d7c1ca00cb3b15ef8a187b1a31"): true, - common.HexToHash("0x9908652a5164daf377baee69d1301a2baf08cedabb4e058daa8397d30e021d76"): true, - common.HexToHash("0x6296361faa7a6c01226f3b2f172a3b3f0d7a3db84ebf8e5d9524cf8ede3652d8"): true, - common.HexToHash("0xc3d345d3f8e5e76f6507661c8130f5011e72f6d0739dbf6a83fa118d6d2c3b0b"): true, - common.HexToHash("0x52b0eda2b6598aa86085c3999c2facb6c8258c8f58476b0827e205d399fd5073"): true, - common.HexToHash("0x7049cfc167eaecf5cfecdbf9c2ed2a0daa6825a694a692c138819628e702c65a"): true, - common.HexToHash("0xab2ee5a4bc9ca1c4abe482035624a9f02158d7626ffbcf4bc1d35e745fb1d84f"): true, - common.HexToHash("0x73a3c59eba1841e087e1860080653ffa7cbc9e4b911a685851a2bbacd8e715a3"): true, - common.HexToHash("0x057bca477099015c26d464d87ee7f48d82b1414d726b7ce8a189fee5af870d20"): true, - common.HexToHash("0x914dad27714b594d564f72569efdfc30bc4e8982242f19f4d1c5011cfdebceef"): true, - common.HexToHash("0xc58cc229b7131d07fbc05c879bba8f19a57484b58be5a09aa7a18b61ff6dfccc"): true, - common.HexToHash("0x309116d2ed2f9eb441fdf32929f6f9030e106ec51d9f3c6807b42a47198a5e79"): true, - common.HexToHash("0x3a054c00c5a8012cd0d111d19a1c49cad8e9095c471c5617c8e30ed5bf28a6ee"): true, - common.HexToHash("0xee8d1fec2781e4950331b75418ce5cdfb054277a2d7e603c4062eee3966ffe62"): true, - common.HexToHash("0xf08a8b3e2f88436a43162561e5d5d9b9d702680380d196d4eb867816c2d60d97"): true, - common.HexToHash("0xabefdb29d256942b188b1eecbd5353f0e8e876ed7a9df26f41c027e376736875"): true, - common.HexToHash("0x6ccaa739ba870181b0a6438c9bb7c7ae4c336e48e4771765f46d5b31ce6340d2"): true, - common.HexToHash("0xede4133355bc6092726467e98db423874d8096b0636456f834ba835f0c031790"): true, - common.HexToHash("0x6ed42723d3366faa1e97a52ea8e40ce64bc94fe8a3bd6a0baf3244c90a929552"): true, - common.HexToHash("0x963187b29a4ba19613cb203287a065079afc03fd90f4fec71c9cd89159453e2d"): true, - common.HexToHash("0xef0053b4e594fbf81909cfacf582fd86f95a15a626663e75236130c09caa4c28"): true, - common.HexToHash("0x7f7c85a71113f9177c59bf8ac650232bed2a41dd0ef3990ab2fe03779c51338e"): true, - common.HexToHash("0xa018d1f408436b66fa8136263777523db276058b8736cbbaebdc8242f3111021"): true, - common.HexToHash("0x30dc0f1f172de1e81f6d333b43db506db9eaddbc4ca8453408fb77ed223a6678"): true, - common.HexToHash("0xc83adb406304d72d56d690e7e91c2cf4d959909e71c5b08652b901fe1acacb2a"): true, - common.HexToHash("0x85f9ebf0840f0689ae549a18c66fd041566419e78cf0ebbed3183f1e6a86de27"): true, - common.HexToHash("0xbb4ac8aec243801bc9fda76e32e4d09d2d93c719b3dc7b30060a26ba97b05d26"): true, - common.HexToHash("0xddff9ebbcb059b871f93eeb2bff28ce7bd5382cdfda3db7c6aefb6d2a5127fde"): true, - common.HexToHash("0xd22826c10d57ef84dbecb6898c4a94db6738348e9ac75d817de1bc1391499c83"): true, - common.HexToHash("0x29d3cf0354b1a0e6eb352523b0a1ce9a9e86e1e8cfba1b49f2c816c8c8b35a96"): true, - common.HexToHash("0x3ce80b5542e8370cd341957a1b73b7dc10b246922a59edeb99ba266d3da4b531"): true, - common.HexToHash("0x6360de86a1eb8e5e8d9edd1e6e69a4bdd067ae7c8eba426c24bf28242b459a75"): true, - common.HexToHash("0x2429abc6bdb4d39c015a0edde4666a2bb1d50fdcc761b843d9d6f89fbde7e97b"): true, - common.HexToHash("0xd425eb5d072eb71024ce2f890564fa09f1af2a6402dd09c05fb9e32023fb1d10"): true, - common.HexToHash("0x39607bc82d45d08505a5b12ad796f6b404ea4b169f21fd3c73a240a3f2cdcd0c"): true, - common.HexToHash("0xf6d020dde38e3c87166ba7f6eb05347f0c401a67c6bd6d4eadd4f4749e86b5a0"): true, - common.HexToHash("0x92f20e76fddfaeccfd21672b2f811f87a748f62bd5f3fde912ca939cd7f27adc"): true, - common.HexToHash("0x5b50e3fb7248f7975a77fa0f0b0cf62b89286053cd749dfda0b4d403dff31a82"): true, - common.HexToHash("0x221006b5bcd01e9eb79242fba179b006ab101f6494f164a0e3d48e39871c17c6"): true, - common.HexToHash("0xd2a76d3ff65894a44d87704c1f82735f3572223ab9341549837c33649a8d6d00"): true, - common.HexToHash("0x5376d56934db101b6f9df02d47ecac5098d84b4a25dac1ef03234b1c752bb82c"): true, - common.HexToHash("0xc14a9723b5f35088f0925820be59f7bf1ae8e393a0a6b8228ed14b0188f1afd1"): true, - common.HexToHash("0x6737139b6e882d14490ff4c81d08b1adafca0e3c6405d834db2c48c384a25391"): true, - common.HexToHash("0xb970867db13217450b6fa790c62c4f2259f61eb91ac74fcff2db97b4d875a679"): true, - common.HexToHash("0x814abae8149da6c1186661d0f061c94167a8ba3c390f5b67d8e2085181d6a7c7"): true, - common.HexToHash("0x7c6bf888146327edfd775ec578420cff9d57db07272590fd6267047da986b69a"): true, - common.HexToHash("0x3ca1cf6d5df1b60c07e78934044272055c11f3068ec2c157ef659d42de7f144b"): true, - common.HexToHash("0xaab8fda84c2e2fcd86fb3f7d5e7d8be9da0a5e6b5bd50eeadba3322bde0db052"): true, - common.HexToHash("0xacb326174b08f26956b8e4c8354fa96f70a80a00aa4439689c45703a8b560a68"): true, - common.HexToHash("0xdf7f87458a8686ed2a6634fca85eb43bbd18194b3edb64f9dfc5ee9015404169"): true, - common.HexToHash("0xe2327324dbcad26f611ec40d531d19251101baefbdbfc3e74d5d9c55855c93a9"): true, - common.HexToHash("0x81b31b61a3ae4323544241fdf98d8062f616e2ca72d6d5fd4b29d97765d144de"): true, - common.HexToHash("0xc5bd34c715067582e8d0c9794c37aa1e21403424ab795fb41d735a25ce1fc657"): true, - common.HexToHash("0x3207e1d7896b91dcc6e10b5afbb11134fc22ba49db627e1c72dae83201f30d10"): true, - common.HexToHash("0xc36e740a10bb5c373e544ebc91b0a7a258c846f858247d6d9551eb4613a0f341"): true, - common.HexToHash("0x923d819ebf615b9a870654c0aad7c44c46ec21806986751a9e62b490297b8138"): true, - common.HexToHash("0x048e942ca74e802e496a7e14550b0cbb2a6cdb64b9a9c30d7b02e31270569d00"): true, - common.HexToHash("0x0d71144bab1c0d36940cb31931b350aa39156994e78e505af07a7c8f59f3ec9b"): true, - common.HexToHash("0x5ccaca52749467bc70c743cf56f5b9b327fca7694d53f3141cb32f75ebbadbb2"): true, - common.HexToHash("0xee851881b496b05ffca87f07f5b0c8b90a4c33fc660ec04d3fc001626e9be2f8"): true, - common.HexToHash("0xcadcd0981ee9eb1598d0d37576ebb67985d4f5d25b8852db7751d3ed73687ab1"): true, - common.HexToHash("0x861f3557f6cbb2e48ee51c3cf8ecd16615185369eb2bbb313d52d1a6b52e804c"): true, - common.HexToHash("0xadfc16c8c7b4d76baa8f96498a0e7769a69565bbb596a173179230aee593c149"): true, - common.HexToHash("0x05cbef6f94db167530b672e2782e74d88e478847f4aa15958206a0a8ad82018f"): true, - common.HexToHash("0x7185c78332bc60faf3d861472011c948c81ff38e91ef3f541ec9bdae2ab914cc"): true, - common.HexToHash("0xcf5031bfe16e8e9dea2c0c9abd91459af981c2dd9a4290523e80ad0a1f7ea514"): true, - common.HexToHash("0xbf38eeac111658019938d99f8fef1590b022a46df3d6f1b86b2046452cc92829"): true, - common.HexToHash("0xdfffec2bdf3ad51a77535a7413e2107b9844741d5916181fbd3076a1f61f460b"): true, - common.HexToHash("0xd58aec8d07d5c1076936ce97aeb63417549f88584b73e9d16bad4cc9042c004e"): true, - common.HexToHash("0xa6c45f9ceef533411098a28fd2dfa5692d5349213913980287cbcf7e0bff2af1"): true, - common.HexToHash("0x94acd4d8a110f172a3af189f41f5112fff49a638c64f95708590493856f38075"): true, - common.HexToHash("0x0604d4872a2f1ef7d3bbf707cf6ccbb6490ff23aab5aa92741491d7268046265"): true, - common.HexToHash("0x6bdde4c713c5aeadf3ea4bd1337859b29d39061417bbf1ce4e25a59e32bff4aa"): true, - common.HexToHash("0x85a21052bcb9c90bdb181d5e39ee24a4e131dd3eeacef3a60efda28b4dc6e072"): true, - common.HexToHash("0xab9c63c2e88bab58ca1fb7c15f293574baec10a9ff937b1cb4bc2d25140714fc"): true, - common.HexToHash("0x8f035c2d14c172d0a341efabde0b2b36c1f079d933f664c2c4b69543c83bf37c"): true, - common.HexToHash("0x51be56ac61e044002a4340ccfc0036dbd3ba6bcba705070750e880f2710b787e"): true, - common.HexToHash("0xe20bf4ea15e50e5fbec6369484d5d253a9b882e461f639d8760d9158a7d8cb13"): true, - common.HexToHash("0xcdf2eba193d719893f6929cfcd3a8259f14fb3d7e38d9532b0246a4c5299c43a"): true, - common.HexToHash("0x748c0d68f8c81ea4261fe8717fdf30d51c6e54d73985132b4374c5ebba5c41c7"): true, - common.HexToHash("0x6d6f5206f7d8e3c29d4a6f43c9dc049f40bfd1d171abc1e6d8a3d6522b357f95"): true, - common.HexToHash("0xcecfa8fc1159f5d4e503f1c948cf32d6cd196561c9fb962273a05b331350e54c"): true, - common.HexToHash("0x009231bc52a49104005a9ff4da595f60c145eb6065f7c429e08f0e0ed2a94c31"): true, - common.HexToHash("0xada60bd4eb147bd54ef0a01eb6828cfdf9d26cf18ec12b516fd3988752eaf28b"): true, - common.HexToHash("0x5495db03e766f2671f78222687bcd4088597bac27b83f685aee00013ea5f06d8"): true, - common.HexToHash("0x73021a88c14ebcb4e94fac2c18a81a51c707ca85dbd9ba6e05c028e5e4cadf94"): true, - common.HexToHash("0x0abd5e1bd58f8706ecf41957821b596dfd13e5d6d8f25eb0b16a4e19e6e833c1"): true, - common.HexToHash("0x01ff9728c0b82b8f241e64f2654079fb50f021810b09647b4c94f3b5765c4de8"): true, - common.HexToHash("0xcd7bb90d0c4e24d76ab45cda061d18932e980956572e40b8fa8ccd5a36177022"): true, - common.HexToHash("0x20f99f403c9bcb3361ecfb0092d46fbf1b2f27189c662a52e73b8ad7affe6a8c"): true, - common.HexToHash("0x6ff45a70c27224598fb246a4d58951d2d837d12baea8583dda685d7e3927edd2"): true, - common.HexToHash("0xc429e6ed03ff6063aea94122b4867677ea8c2fa8ea6c1df73091b94ee90e49e4"): true, - common.HexToHash("0x4f831c5ba2e34f5097eeb8fafb5b470a125c64cae5d8f43c399a5b336a989b86"): true, - common.HexToHash("0x9c306c5d4adca08c84ab295956d613c2cd3fc2adb151897c64d6f5eaf64941ec"): true, - common.HexToHash("0x4cff9399f79d91e3f3e7672099d43fc37848dbd3f66403abfb2ece27e360c843"): true, - common.HexToHash("0x6b6e1150f6a75eb18c5e21a15c33614464b596cbdb061d9392f5db971dda4b03"): true, - common.HexToHash("0x278cf1103647011471906f7f40264c5d31000e42da510877c8d79bcee1dfd6d6"): true, - common.HexToHash("0xc250dd45366e30e73859ec5f720cffc3b7a54991e2d8124ae4f978b14f708143"): true, - common.HexToHash("0xa1d203f3e1157b7292ecf5b01b7350fbc550f11074c8a89b2e0ed749333e3dea"): true, - common.HexToHash("0xf392769b3fc1fea354ed10b35b6a764e834b4bc2bec782725e24039daa32dca2"): true, - common.HexToHash("0x36e8399787003e3301ecca2e0f46ea9869e06bf91ec8fd333074d16eadbc8435"): true, - common.HexToHash("0xd96039fd398f31f5d5617bf5ba28e036120a8efb114073a3f2bb9e323c9c3635"): true, - common.HexToHash("0x9adcd963b2b030e91177c7256b23ba2488f38aecb871005323388c4499600fca"): true, - common.HexToHash("0x18bcd20b10a9fa9f0dd590fe40f64c6ef354f3d045a8db733bc4132738563050"): true, - common.HexToHash("0x4c32b36a6d0dbf011c3eff9098e9222647aacc3b1015508de8989d66858907f5"): true, - common.HexToHash("0x06f7256e0fce940a4a060f22f7290df6395df2414d8ab072dfa5be9bdafcd122"): true, - common.HexToHash("0x9a152c8bdc7526e2f20f877a291bc3f2cb76e8c1d7cd476c365bdd635f980208"): true, - common.HexToHash("0x91d4a10eb24691ff3e6ce2bacd964baf2106cbe6c21a9336ee2ea3b377467f6a"): true, - common.HexToHash("0xab21c1cbc0dcf76b8b35573ca5432f2ce71bc62cfcc5c7279c46d7c50a240eb7"): true, - common.HexToHash("0xde812551c32d35f56f21369175d2f8f23fe2d5648fb64fb76b87c0156de96f0e"): true, - common.HexToHash("0x07b6e25c4d8e32c0d8d9ff2149ace8c2e00ff78017a113a12fb583de56665ca0"): true, - common.HexToHash("0x6a226b9cd43ad82b4586ebaac6e08b55077049a5ed81da0c4836a9d54cf124dd"): true, - common.HexToHash("0x38461785b930dfc128bb9d4a57ba4f376da68014fb6debec9f062245470fe99d"): true, - common.HexToHash("0x70fdd7f21eec520eb0d8ea34c168b5cf1d294e0d72ba3b8e596c617baa93f43c"): true, - common.HexToHash("0x6868c69206f36dc448f871ed663a2190ee0808c701a0d2408fac05fc28929fff"): true, - common.HexToHash("0x42b4dee2d8480e41a7b7971e929675a853b6485e76d38b7f82937495f769e949"): true, - common.HexToHash("0x348a07319773bb266cc875da1802aa12200ffa3ab78b37b25f8f14768e14cb78"): true, - common.HexToHash("0xaaf616b5b808a12a351d998c5e74264355dedc9ffdedc3e9729fa9e241356353"): true, - common.HexToHash("0xa547dd93f2895a17567b32cc01df21c00fc1f911f1aae523462d9ac5a1c562bd"): true, - common.HexToHash("0x41ba8d7d0cfe54f785d13e808140250057d6429250eb34bee4c0f77b5839944f"): true, - common.HexToHash("0x5a6f6c8424fa4fc3f329f9b6f0343a470acf51233bec8c2e79c1fef200f449b4"): true, - common.HexToHash("0x0517691c2c8796ce4c20e4ac50a4cfc4cce8f4a9ccb95f4a27740c24abb460e8"): true, - common.HexToHash("0x452f267df576c018923962ea85858cd3ab0f4e281c034f31ba6432ecde141de6"): true, - common.HexToHash("0x553e6c7f93b604013b9db825235af1af73e791ee60bf312093f8fa2959e1ef69"): true, - common.HexToHash("0x670754543af905583ccf1851aea6c25e1f0f2240dadbe6a97dfcaa432d3e946c"): true, - common.HexToHash("0x6f74f818bbc870cdfdf6f166fa4107ea456d3515c1f5c0cf214de4ab8d8b1906"): true, - common.HexToHash("0x27fc9f03ae370109226a4411e7f2336b26ccac6ea0dd867a6319232640b8c5b9"): true, - common.HexToHash("0x4e0cf7bb3564a0b1761948d9850284521cc7fad89c596e8e5e53168d0eca2214"): true, - common.HexToHash("0x001f75d2baae4c8a4f689e97e9e4d7a287c407424e147bdcf09edc0dd8b542cf"): true, - common.HexToHash("0x1ffabca521d99637141452b9bb1c90edf7d231af89bf0b4229e66a99b42ce832"): true, - common.HexToHash("0x568b548b9f44b4824f2717a9b17acdfc15fac3ad64529f8ff0c6dfc029400093"): true, - common.HexToHash("0x660cddcd8c7ce62c2a6d2a4e02bb570899fb54f2762ff0ac025b8cef7cd89c4d"): true, - common.HexToHash("0x2d2909ed7da8b76f360769dd9b88e78168d493e127e0a90704203481ade8c816"): true, - common.HexToHash("0x1322da3e1463f6e258c5f4c0285f2c587d5e428686349bd5243b77e468ea97fc"): true, - common.HexToHash("0x5e1ea63a4d3de6605de53172af0b5a82ce172a83f4d8357e06c1f22e8b9baaf0"): true, - common.HexToHash("0xd357dea2db3e60f57991161f165f8fa972cb6c7f98b53ea92bb778b1189ba75c"): true, - common.HexToHash("0x35cb8d64a35d770d52956720c728b239a69653baf8867a60eb4bfc7de9734b34"): true, - common.HexToHash("0x18c902aa05d29bb34939724253709817a5078e03689404a19ba7d33fc9934779"): true, - common.HexToHash("0x9283a69279863dcce9a391578640736820aee15efbfb8bfc8f09cb5a103f53f1"): true, - common.HexToHash("0x35e9413efa71916bfb8cd5ee67afb192d2c01e7e2152a04d4e7d1436cf9cb366"): true, - common.HexToHash("0xdd21fe9697331f388fe63a46e2fc76a22fb7dfc30a2bac7e9b838be655804a22"): true, - common.HexToHash("0x81268c9831630655e9bd718d0fa60ef8da9f605e2ed3b7aa1eb511dfe3acfd96"): true, - common.HexToHash("0x657a6feadbf46bc8d7d957e7744ef149f29690facf46e6e1f5be2a6c82e70b39"): true, - common.HexToHash("0x854b6e3dbc0caa8ef5b71ab45e410b735b292db7413fe6bbbf847d68cf93036c"): true, - common.HexToHash("0x2299a499bf9e83451c6b277adc135f93fbb634e97120f9e80c4ea9a0c192da02"): true, - common.HexToHash("0xf1e91ec20d7e1c026a6164329bbd243b760952d2066dc42f8123790c2435ad95"): true, - common.HexToHash("0x1749365486208bd527d3d3455bf539d067e674ca269c30ed14dd5ba89ce2937d"): true, - common.HexToHash("0xd4ce26e49a5d8da3e825161e2e4fa8599b6b4e142f3af3f720464f2188838d3d"): true, - common.HexToHash("0xd93dcac8388d3ecde809dec8984eaf547f631a573853f5b23ae13051ba4b59e5"): true, - common.HexToHash("0x580e764f19b1bbb656f7a21125e050cae4524118c2059fe7407d2357136d644f"): true, - common.HexToHash("0x662e9d3335da8fba22b1eddbf638ed1f9d02a7a71452668c83e6724990124676"): true, - common.HexToHash("0x55037dbde6b37c733fe3f00af0fcc8922417b09ecfeef2a536a409008c4081c6"): true, - common.HexToHash("0x1c8f46639f25aefdbd291b156c24a32f06ae21c5bdabd4159c6f5838b52534da"): true, - common.HexToHash("0x452a56397f7a9001be651ae731fd827977e1e61c49f04eec5b9eb84bc27118b9"): true, - common.HexToHash("0x18222640f4e0c943fbd3dee1a550b132280f9f05c3d8c58c067ea5df80ef9194"): true, - common.HexToHash("0xf290ad1c0ea3d1f0b0d2def1765f3ca0671b06bcfe12d82185514230507afed2"): true, - common.HexToHash("0xe008429dc32d7213fa5af8c18162d9fd060cc705d391da0c137c2d0d6b45481a"): true, - common.HexToHash("0x12938040e27acf40759b68a5292c5cf15251654132d3f41408381b6d2d5c25ba"): true, - common.HexToHash("0xd76131c02bd1bc5aa944e339bbe913131448ce0b5f19273d535405ac6dae8c99"): true, - common.HexToHash("0x781c31e262a99a55fb7970256347fd1f112a6c1dd0207f50b85973c83c469958"): true, - common.HexToHash("0x7e1a1c72470e17b953ebd03824b30d1701ffc384ce06bc7c8ef97840ba19d956"): true, - common.HexToHash("0x4896466c97e5ab1242d671dd3bfada9b4bde77a8a0502c81953ee66771c6efbd"): true, - common.HexToHash("0xc9d5ab1d200da542e57a8392c8accabd7c7ec902fc734ec314dab23f93aab30c"): true, - common.HexToHash("0x21ef1db10b1b4b4ceed10049347ef9b577d05944be58f489b90a313efc230d5b"): true, - common.HexToHash("0xb97ca415ee8d96e2e4ac17d3e73bce7cb04a7e9fa173f4718a78b5e01093846c"): true, - common.HexToHash("0x924bee3cff6d517fcc2c869c02f92e0a0544408d1dd5850fa271583f528ef37e"): true, - common.HexToHash("0xaf5d67064b6b81f970da45e9322f783472fb7b2d672492440c3692b4acfd80b1"): true, - common.HexToHash("0x9e647a0b9c0e59418eec9e5bdb0a0a9cfa567d5353fe00b2476c305dd4343209"): true, - common.HexToHash("0xa010df5328399664988c4cf5124b0202d893afce21808a7ee4e0734902cf9dcd"): true, - common.HexToHash("0x66a66ed6ca594b6dc8618080fd8fc90cefd0aa89f2f56a5a6078e9ad90a300fd"): true, - common.HexToHash("0xffdb97c92d3273c0fd0be23b9142b49ed830c5453935b230e736aaed973a2c0b"): true, - common.HexToHash("0xc8a95e9f34a3c5bc3cb47f3b3c5ce9d3591827024db28b0cdaff71fabc6706fa"): true, - common.HexToHash("0xffe61486462f1a84894eb55014debf71a965aa24303d45cbb0cd63136a54f384"): true, - common.HexToHash("0x68339d1244ba9fd79a351772d0a07587777f55286f21abe7b5ddbb7d5098301b"): true, - common.HexToHash("0xc74d7e1f14b1e238e533e8864c9e108aac1d44307ced953bd562a36dd7bbdc73"): true, - common.HexToHash("0x549a8d12ba4e7a7e782f1ac76684ba23c30cfb793cb2a90dbb2a38d9904bda92"): true, - common.HexToHash("0x22143d01e057f39e27725bd3c912866a8b462d7ecd806913660ea5e582a6083b"): true, - common.HexToHash("0xc28707a45f3fc6c322a2882b1870f01a6a07fce60ad257d8ab27f3d3056d0c70"): true, - common.HexToHash("0x6bc1b7f327f8909f14d777e2ea2f80fc10eaf4090684f478486e535105d39345"): true, - common.HexToHash("0xeb089d06e5710d39379bdd6bd11313df4d94342286d9243534dd22fcb12f21c9"): true, - common.HexToHash("0x02329f9443c033566882959cd1ff8f6ae82c0b6f6c5c3f72300989117726bd8b"): true, - common.HexToHash("0x8749e0a29793e36e41542716250c6553f31f2bd453f6aab8154a260e19c7a5f6"): true, - common.HexToHash("0xdecadc4427887206adc363657fe1022b0c59f7809271867f5d0a3afa6f754109"): true, - common.HexToHash("0xcbb7d1efff2400ab04e6f64954fd312a2f19df162b0d1a1decc2c9bc8966880e"): true, - common.HexToHash("0xb65f4a1b452ef31a1d610ff2cf5dda4d92f12237cdc195a092b4c14bbcc7a3ca"): true, - common.HexToHash("0x7a335dd6f37050df220287a9dc20cb47bc660b11a14e50dba22ca4e5a464c568"): true, - common.HexToHash("0xef938910f752fdf1883fd879adbe1050355d593fd2ef424efd9cc58c5b49ac89"): true, - common.HexToHash("0x8f7cd7c2405de596a967449f3cadfcf672f57d7f2b2e24e8537ab92000e75631"): true, - common.HexToHash("0x9bec4731dab1cb2b3571d959ed8fc07fa3fbd87ac111684b00878f1537b0ddad"): true, - common.HexToHash("0x730a2f6ef9b6b8a4f703c57a2c04069abc5875ef5a2a36262a7ffba5d70ce2cd"): true, - common.HexToHash("0xe0420afb6fd94b3a008c8561d2853d4b542a6ebfcbaadacf629655d6c7d93479"): true, - common.HexToHash("0x8f4a14bb0484b71e9ea16347d995aea337e865ed3d799224eefd20608ef62a4d"): true, - common.HexToHash("0xac30f0d156ff7eb6ff40a268d7799cc2490ea8003cc5590bf6e5dcc2ce5d0526"): true, - common.HexToHash("0xc9e639d695e60ea8e7365ae8b47062f358e2f3796a12410b7b7ab968e27a27d7"): true, - common.HexToHash("0x55f519f93539f4da2143683749954f853561036723efabc43bef33ee3c115083"): true, - common.HexToHash("0xb90fcb41bbbf2e814aea54052bc1e4aa7d918cf208287aac145b5821c1c59bad"): true, - common.HexToHash("0x48af4489c5b21103ac398036b1492d3fd36967a1958bcb1c658f9d2fc26f88e1"): true, - common.HexToHash("0x0e51093ba10a891a0e3f40dffabd001ba2afd8e15cea21598c667a7a1a84bab5"): true, - common.HexToHash("0x33ab14ee21728a7d4919ec924f086f84ca3e2eac0894e289990bdad0cb5a1d18"): true, - common.HexToHash("0x75a6ddc64eeacb083a8c894e4f28b9cc7a0eab6c215e603c61b70ae7497b07e6"): true, - common.HexToHash("0x853eda193f5d67541efbc436daf396b389d6cb466f9d449fcd39bdffd990008b"): true, - common.HexToHash("0xa42bc676731d7484948a82370f0e92c937949a0b7c5d1a68f3a76a415e539e85"): true, - common.HexToHash("0x8b088a1f3f61c3e878df877ed8691823bcc4d7a12fe6ca0ad3d499622ad0090b"): true, - common.HexToHash("0x944529e7669eec534a09b83e238ab7840ef9b8bd142c7274a66fa9fc0a19240f"): true, - common.HexToHash("0x66fe5a827f7b36673baa976ff490632c9cb84159684137cb8aa9b6d222ce97ab"): true, - common.HexToHash("0x1b4689f550a41415f2e69f105494b85e4a8283cebe2adc7f3267c833c0559481"): true, - common.HexToHash("0x90ab2a2f994a7039a97d970d15619e7a9a4d06fe2af36b31dd7d439b5b0cd225"): true, - common.HexToHash("0x691ab2507b0095a0457f69b37bd7108c96c7a6385cc666ac9f16d5c151904ed7"): true, - common.HexToHash("0x6f104772e9919080759a563416419af372f48a7d02d5aa1a3af47b989f5cd230"): true, - common.HexToHash("0x84c7d246a99cf1e380a27df6a1ddd6352e2177a1d55a3a260c962c6ec741363c"): true, - common.HexToHash("0xd3f8c22bfcec9e4aee84cdd4aa6155587e907413a0a314faa9950efcec2640eb"): true, - common.HexToHash("0xe4d61f5993f752c401d068413a5bbdadcb05035757b561cd2027a453b3f1d1db"): true, - common.HexToHash("0x325911b7dc2a995f9303c9e120d8b5452e656b802be452a4a1a35c44ea4dc05e"): true, - common.HexToHash("0x999da7eba9bc5f25293d29b070264bc680d6cbbd26202c08248a13a617914b82"): true, - common.HexToHash("0xc3361405881971cb25dafdc10582e659f184f2f5a0434dae3b92b950cb7bda08"): true, - common.HexToHash("0x6adcc81d8d0d55513a1b2b2bde5dc557f3a1b40782ec0228981bc9a2755550c2"): true, - common.HexToHash("0x1e8e1560f32199b4748eaf9ca5949014c1faf229b66f71b366eec0c3a7cbf6db"): true, - common.HexToHash("0xe558cd8bccf35a212d0c7d3a2f8a2e35bf6881488ba723f4da40bd87aba58924"): true, - common.HexToHash("0x5b1761fd464fa676799d3cfe9f2a204faa08f60a6bfef5b5df09897cd8b72c6b"): true, - common.HexToHash("0xcfb87b50a7730bab265880ec48af75dd77628c91f2b33ef30d2fbdccbba9ec70"): true, - common.HexToHash("0x005efedd50703ed3252b5b742896f20e27255d1b35cd60bc9c132dc36ad5a37d"): true, - common.HexToHash("0x4e8333b74ab9d0a1750918cb6f8c250482c6a8614afc4ee760b3cc72bd680f65"): true, - common.HexToHash("0x334a5572ce87263d45587b9367a8533b8a64eae8814b4566074dcfb237940dbe"): true, - common.HexToHash("0xf0345044aa81e4e1a23c7061a3b0baf690e16673fb1d0d123555f4309b4c506f"): true, - common.HexToHash("0xb2d58e67a871cc2fbf9cb81c55b3ae8a5854ecd86230ae219f0613bcc1954ddf"): true, - common.HexToHash("0xa850b275f9b1e94043cb3321f27afe26ae446c9df2db46ab37d2e5e594476453"): true, - common.HexToHash("0xe578b2d54eff0ea272b992b62d1b78236cfb52067d1859bf9641e9e4673db708"): true, - common.HexToHash("0xd63cee2eca6e0536b4d87ee0d32f0ee42920f31adde850e92b2dbe69760efc4c"): true, - common.HexToHash("0x0af8dd4bf4710b0970b883ffbc1aa9dca2e4f09b9ad827c6e5befb4434efd6d4"): true, - common.HexToHash("0xde986fed7238065ffbe04ab5737723b4ae67d1e050f82ffa4376894301e9f085"): true, - common.HexToHash("0x81ba884fff5db3e1e2c2547d0d489679a7afe24b5d5cc407f4b24e2f100753fe"): true, - common.HexToHash("0xd0c9786bb057afc057c42a63036c7a6425933df3f38b843a11709d9e37cb0a9a"): true, - common.HexToHash("0x0388fc130e843d1413750160933764855347e7712ecebad6b17b657624541950"): true, - common.HexToHash("0x6c6b83c73789ab071d2d4c35735568d1eec094ccf9c54d3455b40c4b3084f3bf"): true, - common.HexToHash("0x2606a1a80ca9a4876d13c8caad651f19730110d673865001f03f3e24274da738"): true, - common.HexToHash("0x687792d2cab7adf400fa2d6ebcef7de067931d52dae717aa2b0c01d1e89c50f1"): true, - common.HexToHash("0x75125d8835c08e41eec32e0b6420bcbd107ed9cd52eec4b302aef936843c82b2"): true, - common.HexToHash("0xfc93a4613fef894febf09a8f2b8262a659744e0df0a626c0a6bfb2e01bbe8e1e"): true, - common.HexToHash("0x8dbca4929a1625fe2161a9060a2d7e77f8991c86f50e39e77007b7009ff80fd2"): true, - common.HexToHash("0x3b24b80bb03776a138de2febf62e7f2dce723d4e3003997f7b245138e044076c"): true, - common.HexToHash("0xdca3a33a4517aa80eba5bf9c37f8ae7a478cb44a6df9bd2ef0ea70d7340e05aa"): true, - common.HexToHash("0x05140c5c7a5a048c549e2c03a43974fa508175190f70a40b34c5e318fcd50502"): true, - common.HexToHash("0x30828afaecee7cc0af583a0307f005c2eb6d27b1364c038880070e02e74b4d1a"): true, - common.HexToHash("0x3de1778f37679b42edb0e67ee65364d7fca9bdfa7b59a905b1eac66c03cdf851"): true, - common.HexToHash("0x7e63a75fc88c07e10fd2390168786d78709fb163d6bf8ece79be0b0be3b8e49d"): true, - common.HexToHash("0xb0621a14b69e8c9cbf55b1a65bd5fee653692a9d4df69a975aae1de77378b533"): true, - common.HexToHash("0xc68bd3981d4e43a2f7a83dd55ebb5a54595f3ca51899cab24a2097a7e5aeb0fa"): true, - common.HexToHash("0x92ebf9f8007b3df5374572ba49c7445f41f94bd14830f86886c7df1e34b6ddb6"): true, - common.HexToHash("0x544370a0934da5536bebdb5ac0ce89a688489777ad12e79514179a8c6f209e6b"): true, - common.HexToHash("0x2d615edbc619167cc87938069748f02f0174cbc0a9462812d25e9e1643316448"): true, - common.HexToHash("0xcb5e6c087ed4105cd77221e48e199307691bdb7aa51275bd3db7be8d120e4dc2"): true, - common.HexToHash("0x2f18f629f58bac44c2e3997dbddfd683295c3380b127e09a67a967b17ba0e445"): true, - common.HexToHash("0x1f940a37feba62cbd0fa2bfcc3f6b0426d274c069ae85d743bda955f0681f434"): true, - common.HexToHash("0x3103e73ac2bd65aa68795779602126b520e0d36df9c4748032dcc58330ec1b47"): true, - common.HexToHash("0xae16dc55f4c7d605bb2facdb16e9c2c80bec51f1513cf6bdc0234ac4cd972e88"): true, - common.HexToHash("0x1f4ccd1086641d3d0a40ee198717bfc12bf6322e323c2173ca7ec2c21e46dc06"): true, - common.HexToHash("0x2f623530fe41907305fb5738abd6f6d6462f2bc520fac169988266262a48ce9f"): true, - common.HexToHash("0xbe3c7a4227b390d8479d07716fc69f12f0f9ac40adc108f4ef6d715d5b71bb40"): true, - common.HexToHash("0xe91145baed4c108ebda0959263b994efd856e7b805fc981beb29bf828ec8b061"): true, - common.HexToHash("0x0f4bf07d35d887813352e32c29b8fd0f8a36947303f74a1291a688f24318e57c"): true, - common.HexToHash("0xebb3ac94f8c691f3bb6db49a0a7b38da2cbf16592aacfd6f4cabd5db20d7c7ca"): true, - common.HexToHash("0xcb7966cc4fbc768d88d51f411e0aba353773daebff5900e84773a04ebb204e34"): true, - common.HexToHash("0x1eb7f95c821072e6ba31cdfbbc7a2007902df87c809f3e169ae5bc7cf65d8407"): true, - common.HexToHash("0x09446d49fa203875c14e681d33bd9f39e020efcac054f1b980fcbe556f581f76"): true, - common.HexToHash("0x72795ee9577ed0875befde47ccba74e4dec4ae85ddd988c35402be675b42bc3f"): true, - common.HexToHash("0xb9dcbbbdf9c5ac58afe14cc7a71bb70afbf37a0b216a7e69c579b4b535b9a45c"): true, - common.HexToHash("0x38b947e883b2cc5139d1f9375ea8a065aca59ee086ba54fc2eca58c7c2538a82"): true, - common.HexToHash("0xac6bd289ba038a4165200fb498e8750e5b679e1be9464b475a1bd67e8b59924a"): true, - common.HexToHash("0xfeb54023f47074ff3803485226df87a5c0e50f3f2c0eb2817f68c3739401bdc2"): true, - common.HexToHash("0x37d7d4822388a0d69e509dd2276c51f2a0e26e5fd0a3d357597917e4e98d9f57"): true, - common.HexToHash("0x126abba68607aae9ad56a10eae9a107004266dcc5092acca193d8d5e3d97e4a9"): true, - common.HexToHash("0x80ddb3601f9a9f71673ca72119e216bde7324b0239aefeec3e84f9967e94453c"): true, - common.HexToHash("0xa01f543207b5e79ee5deb0628e26e545fabdbc7e83bc5f83d407bb3a9430cda7"): true, - common.HexToHash("0xc5078b0f4b40c4d2a74bd97aba25559c49456a653c99782dec8cccd38f9e635b"): true, - common.HexToHash("0xc7d1c668631bbddda8d64d4dd04068fe2bbcd99d9ac2ea94860bbd5dee21fa46"): true, - common.HexToHash("0x9e5e5e82c0b72816dbf2fb3da9921354a66a89cc272d20fb7729faacc337043c"): true, - common.HexToHash("0x6b9a2bc7b273e934e40fd85c0de41e0237e5ec9afda1caf91867b606cbde4615"): true, - common.HexToHash("0x109b2453018485e563f689fc6e68af55d27a5886b68b9deaf819339975547114"): true, - common.HexToHash("0x4d2bff29493c5074d0f5b3cf276525b9ea629647164a250afeb4fbe6b020a88d"): true, - common.HexToHash("0x114556a39b8a33df8c1bcd257b36bc9eed72d14d50d588586bdef16e8867780a"): true, - common.HexToHash("0xd62c1307e3856bdcd0c10db8f67b5b8352fa3931bdc95a7d7d400d2dc46d2d30"): true, - common.HexToHash("0x0119c7688fcc3a631bfe81932b4171e9e226cc611c85a012a8218aa569398704"): true, - common.HexToHash("0xc869495e92b9b3a4d5df8bf27730d0f6a03c677013d28e32467cb76a19e61577"): true, - common.HexToHash("0x997969b2c70143b2418757b86a6fcf002a83a52c4ab58c0758a4f1f5b6744d83"): true, - common.HexToHash("0x7fc58255a4d823d10c3097b970b001b455fa25e29ae47bd6df561b6d160f013b"): true, - common.HexToHash("0x9a1cc157f165f7a353afa95ab726a515004e26ef907d736d695838c0ef6669aa"): true, - common.HexToHash("0x6e27dc907a5e41fb6016267d59b6302885c7062bed5fd0e78d4c93afb99726b9"): true, - common.HexToHash("0xc0f001e83ba290ddd10f26402d4372d5ed6411a242f4cc6db45d3be2d44f0338"): true, - common.HexToHash("0x307ef23e56f3caf70399826722f99cc10c5cde411c4d068c6699bbfb4b022e7f"): true, - common.HexToHash("0x179fd1a7b71860d8b5c90b81641cd6554ded4ba8fe6bd2da3543cc78501266b6"): true, - common.HexToHash("0xa929e563ae689fe6cb44d1b8fcf4599fa02927f39789b3ede2ca0614005a684c"): true, - common.HexToHash("0x6e1bf20751923b45538e051406f4205a1e3d672ff89e500e6814a4c6ac9fd855"): true, - common.HexToHash("0x7f304ab18812aa98ed10a1c9255f7d699abd5cb9431f2cf860ec74e5b36b7718"): true, - common.HexToHash("0x005328f84870dc1ab7c0e59ca65248d5ed8cb0fc9b82711c5cc5a124543fbf59"): true, - common.HexToHash("0x1d8daad76af3ac1ca1300d1138e74661e0d3a8e7313632174e6362e377e2ffa7"): true, - common.HexToHash("0xf380e8259bd30d4dd4a6cb01c824b4b980d8d8d1f57304cb9843981570a316e9"): true, - common.HexToHash("0x22f6f8e1cfad60b13cf399ca29679a287ec240f9a710da4e124d3e42727c844e"): true, - common.HexToHash("0x1bbad858ebd511e74a30ca37707547d43f72fe987ff167f8004fbed2118a8a81"): true, - common.HexToHash("0x2e4e671ae15a11a33826107255431401f82b25e30152dd7abd2c30df8a01746a"): true, - common.HexToHash("0x07ddc1f6b581ed537b072d842dba1c0f0ab6c34e3cab32b596938856a540fa1b"): true, - common.HexToHash("0x3dbcdf16ad75aa7166227cb5bbafa68a1a8b657ad83c8f447a92d568aa873981"): true, - common.HexToHash("0x45f55bac1ea33c3dd287f69c1d7d25464891b593cbafd569544d293d93ff09ae"): true, - common.HexToHash("0xd5e33a7f615bde64e4bf23800149adf8cc3c08be50815c69df2d26f4b4ac7dd3"): true, - common.HexToHash("0x6db8b65bd0cd04a9bbcb09851d207bfb880cf447e3541ea2cb94f55bf550086f"): true, - common.HexToHash("0xb1e77ccf11840bb626cd5bba5bf3671da24c33ff304da3a7bfcaf247538df20e"): true, - common.HexToHash("0xc25fa2d07afe60fb2e6eadd9e6d473fd5a0b8790852e14c421cbf675aec35a93"): true, - common.HexToHash("0x3ba975c6ae44c0eca522cc79e20b38590bdca3c988a62ef0010d2090674f261d"): true, - common.HexToHash("0x99e0e0dee65835036ce7eede5f405e52fb220649f751883079dd78404c5256a1"): true, - common.HexToHash("0xc35b247352c7eaeaaee9148640ca7719baf735f427e690a92577d57eb5762811"): true, - common.HexToHash("0xf6151d9c0bbf57e519f8a9188b060d800d9f9454d8c9d170be125ba090c5876d"): true, - common.HexToHash("0xe250021dffa2991f7d86195fecb877da92d9f5ee9100a18baffa047f703ff6ad"): true, - common.HexToHash("0x203c77ae7b82e07c44e60335003ec4fcf7d972c514a85158dde0bd7d02882223"): true, - common.HexToHash("0x35f8477dc39b15359417f02e1076a924135fc41c64247b05d1cd8a2120a29012"): true, - common.HexToHash("0xc399e3c53408b1d079677b361b19c8b5426eda7b4a74aeeaafe40e580a1a6ea8"): true, - common.HexToHash("0x39c854c8a2e376c12e55ec1bd723a6429cabf5d61695d3b062253672e8326687"): true, - common.HexToHash("0xc2f0e2254e48154560342cdcd2a11ae487e4d5d565b27ddd55d164f381f92933"): true, - common.HexToHash("0xf0a20c0bb3da44c9fbb18f85730da0c31e7077c4ddc0d6e2a417d108d9ef228b"): true, - common.HexToHash("0x5ddde5b59fffc17b692f772d074c619b25a4455f6bee8fcafc2a4137493a8284"): true, - common.HexToHash("0xfa31f070ba5ee6e90c94f59fd2b53a7663e91b9c4d6cfdde8c52747a10229797"): true, - common.HexToHash("0x35826109e33193608ef9c0e94878e398202ce3d7e651269992f82ad8273fd77b"): true, - common.HexToHash("0xd340c04a53c88a59be1d90d4b1208c68d12ad84b99584905c8457fa694900c2c"): true, - common.HexToHash("0x3bb95f2f565caf364da81e5b78ccc96b5704a8e804523d348e42f1335647cec7"): true, - common.HexToHash("0xf767f15d66f683ad2c51305da77b0080f0bbaff9c4e3940c925261080df543ca"): true, - common.HexToHash("0x71ce829bc4adb8b94b06acdca9f760ee701bf17080df0f1e40fbcd6c34373c77"): true, - common.HexToHash("0x1d871205aedc16b3202d4d2378b45a069b28a861cb7b1fdeddcd0613646fedb1"): true, - common.HexToHash("0x2dfbee282487cf15ab60760c185cadc9a0ce0875b8c9563096b4eb34293e7d1a"): true, - common.HexToHash("0x16e0615ee92232f799aac90674bd8898f56420aea16b86f6c6796c5636a35bd2"): true, - common.HexToHash("0x76a2c250c253c6379c3d7db4bc8b4cf8116eab0823277cc6801445afbe311723"): true, - common.HexToHash("0xf01a3c2ce7158fa09eba86e60b4453d85402a6d95fad4fc72ed7c4e091d36bee"): true, - common.HexToHash("0x64fe5526bd473ae730d589cc39e303d9d33c96fa240844240205a09cf7ecd7e2"): true, - common.HexToHash("0x83e9cd8e83a7d9d598804c95bd0ff836224a48a972e42d8ba1e8dd9f8917d90c"): true, - common.HexToHash("0x57d30981668192e73aa4b0f1be18b8a93d31f5b10e4a9aefa2b74dbe4e03e826"): true, - common.HexToHash("0x77217b58d712492da1a4cb4ca805e6b7e8900f29953cd397585f18868b495cb9"): true, - common.HexToHash("0x4b3931dcf52b828e3a0e92f36e678b006a9ab74f5e970b1069866a688b45076b"): true, - common.HexToHash("0xee5783814443e5070ddd0fd3d2cd2b1e60a7e05ce764d8d199100d79fb6c669f"): true, - common.HexToHash("0x7f0aa6ecdd3ee4d42cc895cf25397c02fe9eeb28db62c5d52fe8328f874f2ed5"): true, - common.HexToHash("0x8eef149eddfe80d3f8a63ee5c2fcd33db9f45b10ad03e2daed7991e30f3a24aa"): true, - common.HexToHash("0xbd3d264fff52cc23be949e0118abbfb73ead81cb8c99b1b2dc1b92f551132984"): true, - common.HexToHash("0x52054ec0263e344a07c5c4ad4ffebcd1f76885792bee361012adcccc93e4c789"): true, - common.HexToHash("0x03d596fa7fefa826a1eb8924d425c37fd8393b54f35d91d3b9618d37be0ec3b6"): true, - common.HexToHash("0xfdbd705b99e86cdc6c5dd09ec3b1696e50ae329a3600b19668d7fc56e986dc6b"): true, - common.HexToHash("0xfe9c968f456a0d3089d8264abe46f5ea271cc2e9f964d52725fa809bf36a708f"): true, - common.HexToHash("0x69732af1e33cb737ad0c4dfb6f75aceca32199441c21c30641c39d6b29056cc6"): true, - common.HexToHash("0x6436082f5c2789facae67662ced451e51f4100eb7fe4e17165b3a15dffa4da0d"): true, - common.HexToHash("0x6397981a1bdf06d85a897bcd10fc463e4b9db2ce1d41dcdf8a8aadc11c937ad4"): true, - common.HexToHash("0x33962ce4a6d8617a9513bae389d4b9e38cf0f574105db5df6c507c341bf19858"): true, - common.HexToHash("0x6d1faffc720fee5a58a2baa7036368a034344f26ce27fe022c7a273592f99384"): true, - common.HexToHash("0x234db445382fc98fc99f6360ac642e5ab70787d1b0f44abeb92698ea8cf518dc"): true, - common.HexToHash("0x6b359d09cd92e01f7e158f46795594f4febda4509326c3dbd4a42010947a74b6"): true, - common.HexToHash("0x718148c6330d03adbbb9051b3b0e450ea2f76c56b0487be5a510598e2403234a"): true, - common.HexToHash("0xf2e6103fce0141269eeb71c1c77fc46253ea7f904818e0335afe6bf993f4a6fa"): true, - common.HexToHash("0xc3a02acef0d89e56eee4cb30846640c6b8b3f5f63ded43923bec056589c0fb63"): true, - common.HexToHash("0x6c42071bf4e0f827147a42fc76efb26b5ecc68920db13137cade5cfbc025c3eb"): true, - common.HexToHash("0x3910bd554ca0fd4966cc6e87dbbd0c27b1fc4243a2966ea4703b753bc1edc626"): true, - common.HexToHash("0x64a7e9b5848280318e30bbfcc35a93dc7c7d2b52307de6d162b2106b0b6823d6"): true, - common.HexToHash("0x012a20676dc98d29b0c77fb6b26b76b9249412611790d399ceb4ceb5d764b713"): true, - common.HexToHash("0x28b51433cec864ddd7a41e380205ba83e608451596cc1c9ed0c304fe1c491593"): true, - common.HexToHash("0xd49836d2f8a04e8ebe9a78ab4cdb460292cc71e0cbc93e26d8f107a865bd3202"): true, - common.HexToHash("0x2698839b17e503de50cd89617e48ae17223d7846ff37431e719787a5a56d9691"): true, - common.HexToHash("0x33b7bd22fd32d343a1a4c06dcf07d62139de6e4c16ceb597fc5140c24bc5d40b"): true, - common.HexToHash("0x73fff7db87ed5215af2efa4ab4e84cbcb1a3c44fdf78fd57d4fda20b81a3be46"): true, - common.HexToHash("0x6af873743fbe4cbea7ba7ac2c800e84aa1593ae574bba717245bcf8f3682eb33"): true, - common.HexToHash("0x32af5aa24a6be9770be78f7239e0f2197ecb7be3251eccae4d25d110d6f889f3"): true, - common.HexToHash("0xa7aa7003c3a8896aeee97cd93c24d6254c1344e377a71d822a2a7252df255d8f"): true, - common.HexToHash("0xfae9537ef56dbb4d38f997aaaf8bcb0741597496ea5d85ae58492b670936691f"): true, - common.HexToHash("0x2b1165a438623c9a25f129b6f8d978ff26729cc90223a19038c7f6746939202b"): true, - common.HexToHash("0xc641aa88a0fe8a2d36d29ce23fcd87bf5a0473c338f6d0f75b2646efb722727e"): true, - common.HexToHash("0x65729195e212730b8aa77ae92f588a746d9a1486798e04bf1ce7cca1147c3941"): true, - common.HexToHash("0xb9b669233fb2c8741f65e90fd50e313d214be4939f09dfef275c57228bcaab99"): true, - common.HexToHash("0xe8a2b3372452c58b5aeb7ce9cc5adaea97f5067cbe8d0406ce45b1384d0bb1cd"): true, - common.HexToHash("0xcdef088cb30908954d3c910a46fbc173d522efc4f0075518ce8c9b66265340f7"): true, - common.HexToHash("0xa33489e091cfe44b55af6a5d4f18996c664bdd4876a6464a699a560f8afb85ef"): true, - common.HexToHash("0x732d730e061931d8eb18f5158a28692b6d062a7cd59fc33ae00c639b6a7b6f48"): true, - common.HexToHash("0x99efdfc3d9c9f0773a15fe70a8ab52dca5981d82a393e411a29709d832be87b9"): true, - common.HexToHash("0x20450820c0ebff9edce7584a5bd38602ea41171ba7e5446d406fea0cae30d95e"): true, - common.HexToHash("0x02a1ab8efe76fbb67bc56610503c359be801062f87757934002e1e0a5a76fe08"): true, - common.HexToHash("0x565a385ced3c863b127ba4a5152acea4a37a1951cf0e99795addea7310920d32"): true, - common.HexToHash("0x578eada9dae6d74155ba865561772c888b3a207e39d126759886f2563591cc32"): true, - common.HexToHash("0x12cafeda0c138c491d4a120c3607cc52e5a74149faafeec384cdc1774aa9f4cc"): true, - common.HexToHash("0x5a4dfada60a0924278d436159ff70b20847c5fa9dc0c91c217c514e57e276323"): true, - common.HexToHash("0x021c2c990f21482ab4b313fcfa1b894905bc64ff3cf00a3daf928fde83877c0a"): true, - common.HexToHash("0x0318637ff57300c1f6bde2b719799f0071d40017c039be407e65366952b33344"): true, - common.HexToHash("0xf90c365ec8f843445065128e87d28994fbec47cc51311424bb3604991a2838b3"): true, - common.HexToHash("0x12e30bfc2457c43fdeaa91e0e7e39253c29aef04c1eecaa83091a38bb680931f"): true, - common.HexToHash("0x41e2fa3e49f174bff3c82a309130f365c23ff0f89a6f7ea4d42a4f7c5fcedf4c"): true, - common.HexToHash("0x7ed1b91fb0cc3b2f3b850e820d205d15e5a8205ddca8cde4e4f3a627032b3b7b"): true, - common.HexToHash("0x18d332be57ca270532976906a239d2dc2f8c4c0f01ed9de8df4ddee3a7ebf86d"): true, - common.HexToHash("0xaeb71cf69312a0f8aa1abda616b8c9824c2a1843cdde5ddaac1264a020ad128d"): true, - common.HexToHash("0xcf813fc30771c0849e8cec0c1197fd901e79becbcd85d7ccc2fdbcc3916f7070"): true, - common.HexToHash("0x664ef0a175e267f48a6e45311640f3227f38bb80c18da15778d993b975c3e40c"): true, - common.HexToHash("0xf3b9194c6ec8d666e20ebcc525355a9bdbb212dbc0fac7c3edc09d464a0eb3a7"): true, - common.HexToHash("0xcfdf32abc166ba0769eb4de84d76de79f537394e646fd480ce9c6209431bf3e3"): true, - common.HexToHash("0xed3f93b80c2bfbed36d8ba188299abbe19e1ca5cffd067f4c0d9ec6aaff1d470"): true, - common.HexToHash("0xff9e44bb49f94f87b46b12e048555ca4ef3e99b42ad2a873a1d0238cf2f28d5e"): true, - common.HexToHash("0x8e098b0c68302cda657ac0c54af0b827cc8ea74b942da18a4614b3d94284036a"): true, - common.HexToHash("0xafe83c3e423a4c33413a663c1c30949cd5d3dbd3d5b053e8b83a2457f08d9b6b"): true, - common.HexToHash("0xb7968dd0fd57cf3a444f7cb2ee5d8e3d2eb60ba6396ad342bbd126b7fb020305"): true, - common.HexToHash("0x3a8452993661adc45ca9b02be417d756b7c1ea12a29f2ce1c5be9789f94bf43f"): true, - common.HexToHash("0xa949d17fba5c36ddb724c8028afd19e488c69f1ebccab1f11b4a662dacd61dc0"): true, - common.HexToHash("0xbf8a9cca50acb2f7eb68fb0bcedf855438bed62a243f61cccdee5825eab8fdf6"): true, - common.HexToHash("0x1225d7132e48e7cb4b0b587956d446e9dea7c57c7cd14d506ed7bd30f4f0ddf3"): true, - common.HexToHash("0xf3e3e80f339d493962730fdec1f46e2b7f150c0a8eb88f0dd1ebc127c2cf538c"): true, - common.HexToHash("0x779410602c6c394802f6e65d3238c749d39aecdb0480cf34f8260b1a622c06e9"): true, - common.HexToHash("0x7687f18df2b4b669336d6bc09361b4b429f63bad1011d815cb3b4ceca493ba41"): true, - common.HexToHash("0x108531c31a6f1cd3ff4aa17c69f1096f3d81c3bc233bd5195c63c0f6d698c6ab"): true, - common.HexToHash("0xc7a97f5d66921c22c5fef7a5b8cf6c0117987ee34c39fc82cdfa043c0fac0495"): true, - common.HexToHash("0x9932cfb74e71ee161c5ebc9508945653445e8a35e9dab15f4e5e511249cd4ed2"): true, - common.HexToHash("0x243be295c6f70c37203bf7e9908565599798e873f6f80f6a9dedb59dade27b94"): true, - common.HexToHash("0x85218959b79b29f3ef21469690cdf365511899b0b07064563eb514c0af3e498a"): true, - common.HexToHash("0xed16d70708d3135438a964015087f1421d71ff5b5c6e261e71424896a8d20e65"): true, - common.HexToHash("0x1a92c3074b87df0e2c72e9aff300bbdc8a6bfed885805df028d08c27e2e93710"): true, - common.HexToHash("0xabdda767d77ec28d030def04912f0330b63bc6306f40207d63ef709d83d19346"): true, - common.HexToHash("0xa94f815665cc2648ac2f0562cb0c8597921f32b2b2adc0328e29e36703ee1d6e"): true, - common.HexToHash("0x227eec59b6923c335431ccbdb78ad1adc08062da32299947a400dc88cd22c923"): true, - common.HexToHash("0x48331a6bc8fe5a0fac1213f809e1e9c3b0ef909632dd8fabb74e35aa7f4b36ef"): true, - common.HexToHash("0x44b980f57960e7a014cd956482ddddac3e50cff3bb8a00cb0cea4996546b3a6a"): true, - common.HexToHash("0x5b515c41fc1d2d5015ed096fc62edc497126acc7e58da7e3611fb8ab4d9039bd"): true, - common.HexToHash("0xc2f3f9c53a7431656fd2fd6c428762566221fc31752e024939a5b1559bc20632"): true, - common.HexToHash("0x1d18b4951686540e5bed764aaf44e0066eb608bd8c9180cb181cb437abcc7002"): true, - common.HexToHash("0x97fb8d8df304cfb9e14183e0220f073236df3ca55e532e338acb237b5a73162e"): true, - common.HexToHash("0x0d06048e477e2d750fb0fd0077ce27d4191107c787ad08dd8607e854ca55c0d3"): true, - common.HexToHash("0x24d05f3e90a7b3ea33352033291834332bff42fda3134e294c15fefc226776b3"): true, - common.HexToHash("0x8949b7a232be1557726c28daa8275d95958f1cf68886d1e3ebd192d99f470f59"): true, - common.HexToHash("0x2bc8228bbb020657a991b6b7cb7546e93c164e711048dc7208d36721c512612f"): true, - common.HexToHash("0x6c13f500504cbd9466b4b7e75aa3c611c7ae1dc2718f1ab6be13c35ae10d854b"): true, - common.HexToHash("0xde40684ab2fc18727f7a749721bf4c83f494fe356fdbaf44d91639c83c000c6a"): true, - common.HexToHash("0x4d0e054bbd4fc4439395b8d79c2bf3dd499b39d99d9033a5bbee57daefb2e7fc"): true, - common.HexToHash("0xc7d11248851152bc83f1216a3393bab10996a123831ace5da482c880a63e64d9"): true, - common.HexToHash("0x1877b77a5073f1260efebc199c60210660350d05f6119067a1079fb49ba349f6"): true, - common.HexToHash("0x79caf0a9d7c3d10cc6d2f3736ef69d875ab6e8eca8a9223f136ff7078c9ea701"): true, - common.HexToHash("0xbc41518dbb90484a6595c9cb58d0c7b0dfa3d5b88bed52f5184b37f5c9c6f851"): true, - common.HexToHash("0x89eb33b2e667728015c698f54d8a107b2f720e10c7074e477e177dbc45ad1661"): true, - common.HexToHash("0xcb95725be3dae543e1bddc4029332714ca904656c8548b72d21b0eb950423b52"): true, - common.HexToHash("0x3ac374ea4379bc276324c98b6d0ee5aa064edcc30c5156a6a944a16ad9b4b1a0"): true, - common.HexToHash("0x0a404fc3c975e1241efdf23c81721364622496747331eae3eba6040e0cf98c9c"): true, - common.HexToHash("0xb2da7e7a7b17ddda1f98ece95da6a5c2208449fe547cb30edd82ffebcd5fc248"): true, - common.HexToHash("0x9426b4eb4631c6845107b7a4816f740d9a05c1501f463ba6baf264118cff03a0"): true, - common.HexToHash("0x3b3e23b8db6264ea8d752b6ebca90053b08f94c5d8e1b84627bdc1f4c170f374"): true, - common.HexToHash("0xcd4bafe6043837999c5708ccb88cb329f51d6eefe4516e8f39bb92bb1383850a"): true, - common.HexToHash("0x15c962cc73837566a1e411e6f42e4506956171e89d03cee17666bc7ceb8b9ec7"): true, - common.HexToHash("0xd4e4a0b0dc18873758e2fd758d8736d44834378f66b0257a38bc8fb9a7a0fad5"): true, - common.HexToHash("0xf5a7aba0c25064e030571b15ad9b782322f06cfd21cebcb9e5786dfdfa6618de"): true, - common.HexToHash("0xd66034fa5433acc4164139b4c4d4a1f2fe33ac9cb84d30465cb98f4ab7f803e2"): true, - common.HexToHash("0x18aba8ea883d1534ae69f2a46e45933d793fd84c6168ab7655fafa9dd9fbb117"): true, - common.HexToHash("0x619470ec53acd9d28950dddf7e2b6196a6fa4b8661eb31ffa16d49a9ef987f65"): true, - common.HexToHash("0x74cfa12ef674d147c975231099b32dd9074812e6ec9981ee010dccd618c54a36"): true, - common.HexToHash("0xf0ef4b83a23d987d22dd47ee9e24f9a22e92f19839da7fbf5c1b3059b318b20c"): true, - common.HexToHash("0x2c052919ddc23c5d1ea6a10ea122961f18e2bced05636c8e9eaf7ad07838949c"): true, - common.HexToHash("0xaff0894c1b2c675849d75ab682f4f03add5a4e4cc36a5fe5bb802faf29f275d1"): true, - common.HexToHash("0x911cde1fdf3ab2ddff7f49972bd2ffd6fd0b188469a4c6dcab6fe3f90f95046a"): true, - common.HexToHash("0x6cc3a29c96b59265a35d4909ef936bbf62cb227b6a537e33bb2fc236665738c3"): true, - common.HexToHash("0x614950f1b55df7dba5ab69bc6252e7ffdc7ca7dc66cabb5b3d8b75c1c42c212e"): true, - common.HexToHash("0xe983e2378e4af8e4af219e299d3b1e2f6f78b51e79cfba3b06f2ae3a27d1800c"): true, - common.HexToHash("0xed3ee18213773477f594770d6369a4124c675ddf7b1e1a1c3559b58420840ba4"): true, - common.HexToHash("0x0993c1852eec64b60ca2313216b35c739af793a40e767feb772f5924d0ca819f"): true, - common.HexToHash("0x1e55dee63fe4a6efe186eaf7e3f81e94eb0e396063265a9c4409fd92b39e0a3e"): true, - common.HexToHash("0x0920aa87afaac2566f3ab8d970b75e439780802450342329bc66e820b23e7bab"): true, - common.HexToHash("0xc4b5ccb985bca9c68eb1bc535c714286ae40b95c6ca0af06ca6b56fbbff74cef"): true, - common.HexToHash("0x7f25a79d2a871df49b1e7f1262e397cfd8292f9adb5639d218209c3e0c792510"): true, - common.HexToHash("0x6a5a7aee02a18a0763e4688838b41c118489aace4461909ef453e9dedb8bf6d1"): true, - common.HexToHash("0x666914bc4a74942cb3008db667cb5248cb3c0bea88f7196b8c0bbe928118ff18"): true, - common.HexToHash("0x9d3ae1dd4066357f0c66e8803a9bd88a2b40aff7c6268df8ea9717499a930d43"): true, - common.HexToHash("0x0d37db727e031fe15d0bd50b1a36e7708c5d07ca76c5747688c754022fed26a3"): true, - common.HexToHash("0x493af02747d08bb132b577612e86456dc8dac888998d59f6e1f1a9ed7ddaf507"): true, - common.HexToHash("0xbafb619733ce295f3debc6ceea9e0b7121307392e955b5423cbcf640f027bc14"): true, - common.HexToHash("0xdef8ed988db37fe1665f23c394abe53254611e91474d3f91279715eeafa6acbc"): true, - common.HexToHash("0xdd6fa1e4bf71d10286bda1306c7571ba918ef2c15c2d31f09cf6292cebbf6d46"): true, - common.HexToHash("0xb6d9e3a39b9a6dfeafcdc3ed374b1dfd640ee3f0aea7527801c971e560d32bd8"): true, - common.HexToHash("0x38bda22aa04392be9b1233e9372be3a2b4be4488cd18bb6f575943e30bb2bb0f"): true, - common.HexToHash("0xea0da17e89e808e1d0e0488f8971c1eb7f284fa2adf62902ea834fae7a5ef7de"): true, - common.HexToHash("0x4523fa34371511388fecf7c37ad96d19bc67e79728e99b4ad9f575699398844c"): true, - common.HexToHash("0xfc44947c422abb57811e9f1a385576fdc5ed891ebf65d3567d6f8440b3410abf"): true, - common.HexToHash("0xc2aa27ca77e17a82db65abbd3c30d1d641879841c8e92dcdef529dbef2073880"): true, - common.HexToHash("0xe68e14175a4c9a820ca76d0b3723ad796c4f39f2b985a19ba36167a11c41b4d7"): true, - common.HexToHash("0xaba4086963a5b0250a291cab2f0ad52ad346e691c9ec4107de4f88c62f7acebf"): true, - common.HexToHash("0xb90f36ac404625becfaa348cbc312b143aaeca4b8d2c073f9081f751a653e368"): true, - common.HexToHash("0xeca79a74c84f99bcf8345d11c50a333a5d306580f8e2d6ae6853a5a7df2c394d"): true, - common.HexToHash("0x45ecda6542124ffad68b393346871a6eafbb241d665ae69d539a37e4c92c654b"): true, - common.HexToHash("0x764c333e212c8d8e2984a3523355c11b6d0e0ad7d627e26dfafb6c76b9ab18d4"): true, - common.HexToHash("0x5d9e11e5fe4c3399145ef5defbf779ae749228568fc06a9ce187176b0870dd1c"): true, - common.HexToHash("0x60a6cbb18cf982a15ca8891e85391d26872288c752f9b32b5922f7c1b953c873"): true, - common.HexToHash("0xefc78199710b8ece59e59d5c9b494e6e460a7a30803a2c1d63b06783e75e64ba"): true, - common.HexToHash("0xc21479a6dedea4d09cf6f7324301cc7d7e1c586ab1a8a395a5da110155b28477"): true, - common.HexToHash("0x5eaa9969f29befef4872264d1e6e7270d0451f35078f15b7ff5e6de7427a1a66"): true, - common.HexToHash("0x57eeabc9ee0225b8691594e627545f1abebc9acef02fef7a56bcae7c44d8cc0a"): true, - common.HexToHash("0x14b50fb1b69a53754f529ac20daac3b360b9daec4ad36934327e4fd073919b02"): true, - common.HexToHash("0x9655c0462f2ce9c1949afcd6c65828e64dbcbe7396280771c5b3a2bdf76dc01d"): true, - common.HexToHash("0xe2da17665e5e7b4e4575e7201271d16b2010d6730b18ec4e8845a6cb74805c55"): true, - common.HexToHash("0x34fd7fed9991a55258b68d746014a98cca3b7f9e53dc8ee434776529d9235972"): true, - common.HexToHash("0xe84c18dbac22b2dc650a08f21a03cc05ee2cfc25996e208270840b65024c515e"): true, - common.HexToHash("0x78e68a0d1fa43b3c6a935270cbf526b4b9809acbf7ffd3e7f223832a3e715985"): true, - common.HexToHash("0xc9b94a44eed0da78a8a8d97f8fc53da9db6ddcbf6fc479f1631450ac961b7513"): true, - common.HexToHash("0x0afa536eea54a2772cdce9ac15746e1b34721ce63d084fcf79e88215dfc2ab7f"): true, - common.HexToHash("0x709297f84fd0451db48df9fc40653749c45bc2bb499eb983a875f2a17b9fce08"): true, - common.HexToHash("0x9f818991134709b75232b9b1cd583c7933f53a3626f53a8e1915ffa25bc0a25f"): true, - common.HexToHash("0x16586b1615e1f7fde6bba04f6c293eb17d59f23f49ab2419730b6d154728aafe"): true, - common.HexToHash("0xb1b75ca3a1bf2e5334690dca8d5eebecdc32c563e5d166bf02daee1ee0d6c4dd"): true, - common.HexToHash("0xf004c8b6518f488ec98bf28436854f6749376002368fc1e5763f7c088abd859f"): true, - common.HexToHash("0xe7861649d9b814d8a726fcde18ad7223947f02e3421ad73d082532486648ebe8"): true, - common.HexToHash("0x81241d726bc8c3b6dfc7b750e71699690bb3479eb3db1eb5806401bbd11df271"): true, - common.HexToHash("0x4b2b56b58067d1288f99aa2a0c688f2c7ae59bf5fd564badaa6dacc80441bd96"): true, - common.HexToHash("0xc2f54f3a3449011648a484cc218d738f623ff181ee2c15c48c39cc063830e293"): true, - common.HexToHash("0x47156e079bec23a76c712e87ae102bb127e6f4ef466e90f7e3d4b007c961696b"): true, - common.HexToHash("0xa5098e98d6fb703829cd516825cbfbea157578d2f41018a0100cd506a1770028"): true, - common.HexToHash("0xd54c9b30c766a3012bbf8b0fc9ad839a2a240470dee59485ea11fe27bb7a0e70"): true, - common.HexToHash("0xc1382b97374b39f3504797de3f54c79272da0a474d9f3d996505b04a1315145f"): true, - common.HexToHash("0x032503a962e9dea6190b2157f14c9d49482cdc94d5bdb5dde32bc2d5cebfe097"): true, - common.HexToHash("0x8eabec651677ca856aa5e320ecd3eaaf1691e58769656f343664e9336bb6eda1"): true, - common.HexToHash("0xe46f257fb378bf3c36afd656cca4a95e0237a6df0e5226d886617670fba2b372"): true, - common.HexToHash("0x59cd6277301b72f2b9b18056207c6b4d9d752228eb79b08d1856fcd36e22c45a"): true, - common.HexToHash("0x1ede0cfe342353f755b32112eddb17e72452d9f50702b09d5f88bbe754fa2ab0"): true, - common.HexToHash("0x18014fb548f53781015b20f5ee7eca62e6f25a9c735da729454aeea1f67a001b"): true, - common.HexToHash("0x1cfc4b514909a2ccbd4ab72ab3e0b8cea80ee5c5c019d447c65bb79568ca3f01"): true, - common.HexToHash("0x48a6d0f5c57c0ea067cd6896fa31638bfbfa25c2c47daeaab3cb821a6db32781"): true, - common.HexToHash("0x6213cefdf183a31736e80196fc6901d4474f451403f86e95d2a23c5f02e52a75"): true, - common.HexToHash("0x86e179587b1b486324f205b9f5af2cac70e6ce3cab20e08199ed77a045201323"): true, - common.HexToHash("0xcf2cba4343f36c0e1c78eb742bcdc6413f66143a311f0788b4e2c3d1e20f5532"): true, - common.HexToHash("0x372578485bbdd5b205ec44f56186b29f3dd40c8c80c8879ed36b5fd34d23a16f"): true, - common.HexToHash("0x0b7d882d82c14bed89142cb153d1b3892d2ac7c05a303c6dd3caef39a9bd53a9"): true, - common.HexToHash("0xbaebf559c6a8be210138f31fc592fe93d3931595979682f12666287244ee3cd7"): true, - common.HexToHash("0xebbab81c78201615e746f577efa08ecc4f52bc0f77a367cd522ed37867612a59"): true, - common.HexToHash("0x0fe3f47a3921bb4f39a95ef3ad15a5f61f50402fb26b6e6cb86e944eff2252b5"): true, - common.HexToHash("0xad935ab6ed92141256add48a73261f9a59267db8f7c6ecdf8a668575f0e7a5fa"): true, - common.HexToHash("0xb0cf173924caac78eacaab8cde4a39dd5dcdefbdd3ceb184f7c831b309337635"): true, - common.HexToHash("0x782cdbb06fb9db35cd09db20253a9e26f930ca8a311449b7f7fa6c7b83c2deb3"): true, - common.HexToHash("0x67540e630c0df14fec4f558d77a90f95155f46f8222fe9f6e6866ead75ec6d89"): true, - common.HexToHash("0xd59f8ba75bbca5fb351bb3f99ff1d7ad40432b8de544d0dc6464ef14b0bff9ec"): true, - common.HexToHash("0x59febde7eefcf06aa6d0d430bc4c803581f0422ef27220ef3be615bb04f7f1d3"): true, - common.HexToHash("0x90babf5ebf2724e49fa40d047d50b25a6c2803e266d71288bc69c4e9fa2992cb"): true, - common.HexToHash("0xbe0a69fa3246da420fa9c4bfd06af8832e69034879eae6fce516626899b1078a"): true, - common.HexToHash("0x36629f8455d93d54d0941d92c5d5023c4582dc32c110cf5d6cfe1744022897a6"): true, - common.HexToHash("0x79806f357ad3d825ff71ab9b4f66cc27b725d0c74aeb62e071faaa5564bd3f88"): true, - common.HexToHash("0x050d55e9a3cea124bc30fa816c285bf4baedec9c0dcea6aefcd8cb6489afea8a"): true, - common.HexToHash("0x66080f124ed80000357fdbfc58d1b470a914af15bd2b6a2b9dc8b2fafd7efaf5"): true, - common.HexToHash("0x645118c201cef30959537eed8918a4ee138ca640939f6545c8a77b76729665cc"): true, - common.HexToHash("0xbbb4ae746aeafa01901de4e19c7779471e655d68a4ca2d50cb95f7dec0a64277"): true, - common.HexToHash("0x5a9bf88cf30c0a694ccca0e5fef92793cdc10e82a2250fc2fdb3687c37c380b2"): true, - common.HexToHash("0x0175c205d8b4820da07a2c58186ac1479593ac8c76b56828e82cc66aeaeedf94"): true, - common.HexToHash("0x5fed84a9c1ff8c1647fa4e30e424422459bf80d088abefcf221db61dfcfc757c"): true, - common.HexToHash("0xd07da4e5c30581e5848f08be986fdbffb7cea1b23d9b94277f682223cc3e9dd5"): true, - common.HexToHash("0x056e61745c741c78093bd0096e121a6db7df65a7e2ecbc18f2550015d347f41a"): true, - common.HexToHash("0x5ad074ef3f03da48789c9d9cf89500e0ace9e74f3812be86598b8d9ac677104a"): true, - common.HexToHash("0xc296b6e4daa170747d4960f57120a90106625610e7cdfaa167ca7aa97996a1a6"): true, - common.HexToHash("0x807669c5f6cb90dc7a3e55c7e8e9e763cb29ba853f60119579018c417735073c"): true, - common.HexToHash("0x2f88da7c6250e0dfbb4ea59361a9d5d6c4728f3855d5b52477db82f96fe33823"): true, - common.HexToHash("0xb266a82d4d48276c344f713f20efe6f289ea06bea90db45ac1c676e461290a7d"): true, - common.HexToHash("0xcaa9bbb9aa4d68f6ac0bcbe84dd02017c21e790b194d5869f0484173b0a4956f"): true, - common.HexToHash("0xb52c1bba3e1f9b4b270d3f98d43ae5f0bb340f4cd4edf950426c13cdde5ae57a"): true, - common.HexToHash("0x1a2ef8d0c5f79fe07e2fb54ff6b005a92ff07c88cd5f65b4ea3b4b68b877e4ee"): true, - common.HexToHash("0xcfb97b067721b91b5bf6e8f95157ba1257da22c81bfc5c1ba0260dbdb1a11d41"): true, - common.HexToHash("0xb588eb437f51f684d91739d7861f01e71b24a58025b19567ea69654dab040c15"): true, - common.HexToHash("0xacff2f8c69a6c29a05cc522bc43884c99e35a88384913ed0c0497915dac715fb"): true, - common.HexToHash("0x3d1864984f50b91bc2b7c4e1855a7f51a598231b525a0c7551b3af57e2b4c288"): true, - common.HexToHash("0x585f4bf3503ef6c94f12552e8e4e443e3ed7f795e759687e3526693a56949879"): true, - common.HexToHash("0x8cb4e95aafa29e62b2fce0682125352709aaff4aac735ac8f2b22bf8ac2b80d6"): true, - common.HexToHash("0xeae8c46ce17450ed1253aa4ea33d36b95ece81f06d85e6e0919ea94a216ab524"): true, - common.HexToHash("0x7973132698c9ff25f2b7f54309dfe9451a0f59ffb6bf5c4481f017ac0629eca5"): true, - common.HexToHash("0xffd776d4ce1b830f0ed0b9e3add4b71aef2c08a86690fc760017d72b0f97a38c"): true, - common.HexToHash("0xc97c6beb84a6145ea34e52f370a750df29d55280949d4ddd620000aeffa75153"): true, - common.HexToHash("0x9b8e65b62358445cac203b866c528013194b2cadcc41e79f461df2e3557c669e"): true, - common.HexToHash("0x1e22e3d8a415ab0461981946e0b8bf7d69b4f7684091d3dd07cc5f837f191238"): true, - common.HexToHash("0x1adb914e555d90e3e7c70ca0a43b0f44ccda628f4bfd1e54a7e7db291048775f"): true, - common.HexToHash("0xc01d378cae8f92dae71cc80043e891562172465002177e3b13ca2d205206357f"): true, - common.HexToHash("0x4ec5c2cd300da62b9246cb4ab6747e799d0e8829e87a602244ca74f372116cd4"): true, - common.HexToHash("0x6bc7949c40e5ef1e9cc51e20f710e582e5174fb19a739c24602722a0a6c1396d"): true, - common.HexToHash("0x407c7c04756dea4190de855de5e14fc9dfe0c6de9643077202cb3771dee4dae2"): true, - common.HexToHash("0x9070bf57afd58027c91f5f02206440f7363594dc0d00082e0032ec416dfa210c"): true, - common.HexToHash("0x6c4bc4a6f6e291d6148eabf473d0dbb8435f64cd5b2739fde119072e49e7ba45"): true, - common.HexToHash("0x4ee5ec8fd25aa00bb11e1346c71986c8ee9b71cf0a46ba6266a4a93a2e767047"): true, - common.HexToHash("0x1b4023781d3e1f571b29ddb9bb84ba080ed17b5d921fce7fda066e78808305f5"): true, - common.HexToHash("0x7e64dfef3233adf95406468d48508bad1eefa2c85cf989f353c1c187b42ea19a"): true, - common.HexToHash("0x5bf830ea0d6f8af169db304a252db03ad6e573d922cc063d03d2a8a6b646ec04"): true, - common.HexToHash("0xb67bfea845392e0fc2b1e9cb908536edd007cf98f83ddb1f5b5e6b416ab7f6c4"): true, - common.HexToHash("0x1f0339b3a239c9d52cebb75785d57dabfc375138005e3fe339e968c6e16f5cf3"): true, - common.HexToHash("0xafd215ba4e33ce63130d429c9281885f81f2794cc6d8509cc3f9053db3ff9932"): true, - common.HexToHash("0xd901e6130bdb2991f6d5fb0a6bde0ca3aea40edf45b29979d81254594b694de4"): true, - common.HexToHash("0xf7f31f41f70119836347a226d3e3996463ca9f48379bb8456aca7013ff94987c"): true, - common.HexToHash("0x880f4743cb8ab4894f795ed6a796495bdd52ba21eab374c8728d10d598da359c"): true, - common.HexToHash("0xf3a926996547f278d5d86c414c00e0ed2d536f01c5f124eee5bc32e40831e124"): true, - common.HexToHash("0x3873c12aebf53284db4f70731cc9f7b7e852f793b27f3f7b301ffacc93364493"): true, - common.HexToHash("0x8cc48dd1480ba3a2380738064fef4490fead2c2fa50ef42d0cd5ed64cb7515ee"): true, - common.HexToHash("0xedf32bd84d00153b0c8073b6bebd25e08ca6b1d3b71fa7d03236261a81f32d58"): true, - common.HexToHash("0x3280671688e39363957ba70bfcd180047d2e48834275b22d72f9c661e3e90550"): true, - common.HexToHash("0xac6923b20ba37e5e99178654f2fadfe15d896a09fc028e0c500ea5b2561c4992"): true, - common.HexToHash("0xd6fcb37d33afe4a355672763b0fd0b45a94f805c94bcb3fb22ec8a38ef1c415b"): true, - common.HexToHash("0xc3aceb0f918725a5185ce17df75c9295bf4eef8b4d25d9d52d1806f87c9ce1de"): true, - common.HexToHash("0xadbca754d72535bf0b9c8874898136170e3a68fb3fc78286bac4124438f6ccb2"): true, - common.HexToHash("0x4aa35333503b8777bae7f93f3e28893a284f3c70e8d5a1fecb2e615db3b50ebe"): true, - common.HexToHash("0x6aa8f2e145ada0eed958ad2a2a13aff017d3374964385465f5052cbe4ba4887d"): true, - common.HexToHash("0xa0f69f7722d88cf8cd4e3b945b66e4ec7af292e2aa42f1a938250e17724a225f"): true, - common.HexToHash("0x5702553c7d31e3b4e3bf4640b22b51020eccc2602f852cfd77c3d51682fc3777"): true, - common.HexToHash("0x5ac146e0b238f948ddc24683646c3e33fe15f1686c257e5043133db46b304b92"): true, - common.HexToHash("0xe23dcff36e4cc8c7846273a8e6f168fee4d0a96cc0c9de42d1a389d402fdb1ec"): true, - common.HexToHash("0xd6e663ef35e0354a8d5a7e0fd58660accb42e2af8f34d3082871c0a017b0cffa"): true, - common.HexToHash("0x319a1b37c4726a2667dc39482b8121f1f54166bd9d38b825ebefeffffadcde6c"): true, - common.HexToHash("0xbe4fe6a861ccf46871cf9e67ca62f7b75a84710631504d8a3fd53af31774acba"): true, - common.HexToHash("0x4ce3136788c655f298be91459efa852e3af110f2f9c6624d354128c6ab42d440"): true, - common.HexToHash("0x6aca4e17ff711d4427e50fb6142a63d1a863cf7676ef2a5551aa7a2c85b63605"): true, - common.HexToHash("0x4d732fc63838cec2bb6bb4fc9dbfda11bca68d17cbb9ac7d3f90acecc4470b4b"): true, - common.HexToHash("0xd83c1744f50ee4c63f6065997703d92bf6e4552ecd862437ff8f843a8f593a83"): true, - common.HexToHash("0x0ecb31398518bba6e07011d1e814cd71f6fbd8dbeaf7b38955e5c861d987b226"): true, - common.HexToHash("0x2176110bc4667c8a132e4fb44732e3795fb89f3806f64eda6a2a593af95bf564"): true, - common.HexToHash("0x7070a7d1eda8f17b6cab865fec08af8a14167d17bc2497c0d12e4ac4350ddaf3"): true, - common.HexToHash("0x4faf4253645de9a199e42a8324e3159494f264b44f5f7583ea09a8ff4aa33599"): true, - common.HexToHash("0x5992404c91010a57c65553a6a58a83e1f966b5c73fa5900a004c3556b8b6911f"): true, - common.HexToHash("0xd7c3093cc406470a4c45e6c8161f2455b15a5f247e68b4c3add4f42b7ac4403e"): true, - common.HexToHash("0xfcc37cd7e6533aa8e62e6ca113a6a72d229708e18fab189f066396d5df1ffa2d"): true, - common.HexToHash("0x98d9192326d8dfb0b7f3ef0c13a603b1301c5d228220a7ee7ba4eceed68287b3"): true, - common.HexToHash("0x96a581090517d649d7598ae62b868c1e61d2a29e370f987214a77728d58ea739"): true, - common.HexToHash("0x066f04a9526d0a4af71b87dfa51d65959964ca44a40b051f0847ae88516a630e"): true, - common.HexToHash("0x4922144729ffe48657d2e716430ee41f6d3e8095705a60996c469007b560e0b3"): true, - common.HexToHash("0x7ebc7f2d018dbd0a1f4e32aaa7c8451cd82a7ef07ede3a2637bf37bfc6e0e244"): true, - common.HexToHash("0x434fe668c59804920e01e40445efbc60c200167da75c947b8042950eeda64422"): true, - common.HexToHash("0x41cd4dc0703e6e386f7cc378242aed44036a4d831ff960a8c47766ad92b289c5"): true, - common.HexToHash("0x174493871ffc28f361293ea83b372058e3938ce5250dee35ab9d852967e255b4"): true, - common.HexToHash("0x4bd68c57a79ef23562d8979c4467c525dcba3eaee1cd8044eb664027ba72f997"): true, - common.HexToHash("0xee8c84ad9fd34399c0850281ed50e6ad3fadeee69ff956e3cfc4d64287c35435"): true, - common.HexToHash("0x228aed0d85343d7347b9c34a14c6e77431a17404209b73a2473e1df86a8990a5"): true, - common.HexToHash("0x79cf509d7e31e920b70dbdd46734eb9a16b4be5aeabb186a00f3d0b1133d22fc"): true, - common.HexToHash("0xbed0993d51e70d54c286d361ba02e0f5c58eefed144aea783dc27c428fa74e2d"): true, - common.HexToHash("0x347165cbd39356a779522c79c961d90e1ba8edbaca050f5f8b22d7d2e35b9d0d"): true, - common.HexToHash("0xfac3ac33750b8dcb42a87a2af0de123a0101aec1aae57e333516328bc4083f98"): true, - common.HexToHash("0x88a0de0ba0cb38bf54368a92c0f46abd7140d43ef0c180a38fdcc5e59703f8f9"): true, - common.HexToHash("0x70616bf86559556e5041cba65b81e2b5f19b28a91da6883a8a1d21d3e91a4b80"): true, - common.HexToHash("0xc6d8bb9dbd3e808fd5755762d18dda11118b002d1357a0dec26e375202ca1841"): true, - common.HexToHash("0x05f74adbfd5fcf515b42e2d14481ad724fa28bd67621e2755ad33043cf4891e7"): true, - common.HexToHash("0x5dd5f86d143cdd6e6ddd63502abfa7c1348d255edcf47ff72b294075d2bd4ae2"): true, - common.HexToHash("0xdca9518a95fdb45d69fa3752b53a0945ec9cedb46eb332ca449cb3b264661d34"): true, - common.HexToHash("0x65c3ae0f0d60639b6810e5ea0612e2015e73e6d08318c29c8e02a6b2a43d5d2a"): true, - common.HexToHash("0xb1f603dec0393a64058dbe282b0489798f593a8c0f309050dc8589b085889849"): true, - common.HexToHash("0x01deb1e4b8c8440a17667006ed18e44475dba3c83c9a8a98a78a6d759196ebf0"): true, - common.HexToHash("0xe08870362cd8bbf28a2af534a43db186090b6eac86f77054f5c2cbb74aba3e46"): true, - common.HexToHash("0xc25f1bf94906e7ea95a5b807a928dc65608496d453eb738e6471422191557835"): true, - common.HexToHash("0x69dfa85c46f7e92f5427eb416229b8c36548d2e52753b03ed275593f654e561f"): true, - common.HexToHash("0x7119cffcedcc2b672938d7d7d57c06d582345edcd0877a1fafe46463a1323dd4"): true, - common.HexToHash("0x5748cdb427edef0d6babc87efb19585ec15e4af7f490195606af1b0182b7ae3e"): true, - common.HexToHash("0x31a9f47438649e3bbb5d6cd0183613032149b149c5e4e56c4c9785d04494e6a9"): true, - common.HexToHash("0xc982b849f39c7cc92560b74b099e4763bfb2493cf926bcecc6c50de641edb90e"): true, - common.HexToHash("0xb6cde7fc0f6ffce24c5548fbede40bcc15cbc9b7585fbedb17e3055aec9d7d7d"): true, - common.HexToHash("0x8c3d1bfb182d5e284e6699e87683cfa73b1b22a6f71fc53d9ea16b91e710e4de"): true, - common.HexToHash("0x6e836afaaa2305e41cb9ec638b625bf1786e1215d09f3bf89fffd2b0ff3a0645"): true, - common.HexToHash("0xef832f0a7ded94aa482e71a8337960db9d74f9448d2bfc6d088a6004fb01d925"): true, - common.HexToHash("0xc5ee55932b54cdc147f454e877188158d1e33cac113eac1c814d8d562b1186a5"): true, - common.HexToHash("0x9d51086543a5af15c32dcea52f10f26a11e1554db6985e04cc6ec751fae9c5bb"): true, - common.HexToHash("0xdeea30c19f1c77c66ebb9a9601057c349f218e50871d2d18afa4c307738eddcf"): true, - common.HexToHash("0x96fc8de45f17cc6d29848a4ed708f29d1f604adf3944865970f94c47d806d282"): true, - common.HexToHash("0x62f39c06d266e796586a4bfc76bdf5b7abe18f64012e9992684b86062ce46056"): true, - common.HexToHash("0x35d76024a98f54bf06cd3f21175c30bba0b6228a50a8345a087b92eea120d68d"): true, - common.HexToHash("0x181562a5d4bb8708cb52987b75a1e3d3d73d5dd1430e7af3e152c0fbeb1cfdeb"): true, - common.HexToHash("0xa0775b302819b9e001c3a7b7ffc2f1b5b42b31e86a1dfdc1d03cd267f7cfd5f5"): true, - common.HexToHash("0xf6ab35b07be91a61dbf56bcda1e01e3699d02259bae1b53b36cf5e44239211f8"): true, - common.HexToHash("0x935dd6286be18e46bd8b103ca9be0f533c8784d5824a554db6fc4a670268d310"): true, - common.HexToHash("0x52454be892bef545b1f80d5c34e06cfe9c6df7256ba41ad75b7beaccb72038d9"): true, - common.HexToHash("0xe6c327ed5d319064dad887747bc521f042b6aad6b126520dc2853036746f8580"): true, - common.HexToHash("0xa6e8570ddd779620a85822fc09a25a14e7b6151ad5fba4c7561493febcb449a8"): true, - common.HexToHash("0x701826a84a575687b8ea3c6f63e4af226e43ec3780c2d6320eb5bd70a9636809"): true, - common.HexToHash("0x04389f61da7d44280b5972b02985d3447cf1ad53978cd2b27446c1251df63890"): true, - common.HexToHash("0xf083c315a584e410a0aa9e0229e1e5d94b2481b155e5d68f1f0f4fdae41b11ea"): true, - common.HexToHash("0xb7e60fd9da5b3cab100031c6d82ea481a26d451d0a56279e2bb3020951733d1c"): true, - common.HexToHash("0x52ac1fcdc45ec40416309e463a5741ab3b4871e8339d3f7a024ddcafbe74a61e"): true, - common.HexToHash("0xc9d75e0fcf165be94cce98bc6da92c4840e5c9c90821fb749e9b80c3a92d5d63"): true, - common.HexToHash("0xa4b8829c455a1d46b94e2d0941b66fd59a4801622e46615212acc2e94e28c836"): true, - common.HexToHash("0xa865d425ab3346885c0418cb5d5d6f6621a36e997c204e2f78ed589faca08d73"): true, - common.HexToHash("0x0a738948f0d6610491762ac5a8b9c784707a1e6e3ead6e288e90f655ca51ea98"): true, - common.HexToHash("0x696fc0855dda5f6e30d77cc8b2d48c98858753d4d03383c76ff3336700b91132"): true, - common.HexToHash("0x2dcc3d3a49cd1db565ebce10d907141f3b5d400100598ea64436991198852a23"): true, - common.HexToHash("0x973066ae4e72ffd24afcd30c6703c0cc8f9f86cc8337668982432b60936c963d"): true, - common.HexToHash("0xfffd923399740411703071683dfdd9ffa13b22373671398bb0c08e96d0ee7a47"): true, - common.HexToHash("0xe008faf422486ae1b59f5dab261f20cb05e9c86fdc232647446d6239697533ae"): true, - common.HexToHash("0x37b0d0767c894f739a54fcf550d8fad7b98c6cdc365b0d3b364628ce9a0184da"): true, - common.HexToHash("0xd0e6d03804188ee1a8ba7bf895fd61f0d5ef2e17cdc64f2ecd16fa2a0e00b6c9"): true, - common.HexToHash("0xc45cf9c40e5130aab8294f8796edad868a4137246227dfc21dcaa5bc02c21ba2"): true, - common.HexToHash("0x6c8e9893474218aed23617b167f711f18006727bc6769aacbb727d28f6bfa135"): true, - common.HexToHash("0x6c826f858a42314e7d9fee4679a58a952d8e92ca3d5b57c2f4b1cc93616daa74"): true, - common.HexToHash("0x187d98cfddfd6c28575c68c1ffdd4f8f7f0ddd65c22d10145600fa6796896f11"): true, - common.HexToHash("0x54f8c72435e0dea6e0a553913ca40a1c0909621bf126e132355a78eca51402bc"): true, - common.HexToHash("0x18a5b0af4f18524c73485eca778a62291d80bacba0714efc5ba38f9eed3f0c70"): true, - common.HexToHash("0x2dd66e4126ea3d25941fbffe1d43d53d9fae0723928349c4c3e8208a3ae5a546"): true, - common.HexToHash("0x3395d73c03f9677ce1258484f515a3959b6c19885099a61a714ba25ed904ea5e"): true, - common.HexToHash("0x4bb187c2cc4352e80f38177d4b2693dce62a4cbd5fcbe314df58dafdc51884b1"): true, - common.HexToHash("0xc4a9408a2d6f696b99d11cd9cccf109f18d894456dc8b63515be56a722ec6c7f"): true, - common.HexToHash("0xf348b1cad639fab819196b6636984d9af2cc3fe5fc705e17ae4aa1a730820570"): true, - common.HexToHash("0x29a85fd9352fa6b342e2dbf6791ac2312d186ff3acd1707bbbaabe0a4b629bb4"): true, - common.HexToHash("0x466571258cce54acf87092dd1da1e0038f3d9c97ff72c4b079c8c783d4596c39"): true, - common.HexToHash("0x55febfb076e61653adff45b6a2cbc8492af26926e91709c6017772c59e41458a"): true, - common.HexToHash("0x712022c3f04dd61c8055d931e7100f1d92439af96707d7640304c1d8d424c5c5"): true, - common.HexToHash("0x86e2279632d26f44ae547278935afd7faba2f2b52891454e0d42483763197ab3"): true, - common.HexToHash("0x370ec4df8442c5d9985c9e424a56e8d5dbbc89cd06f6e8721cb88cba90bc878c"): true, - common.HexToHash("0x18f7a7e35b14e5cfc29a4ba1b3ed8d16367e23dfaedef93f62274bf9e6b0a724"): true, - common.HexToHash("0x0aaad8188cf03bcdce4f3eb9bd6ed21f4dd22c193e949244cdd3efa7e8cea5d7"): true, - common.HexToHash("0x5fddd391dd41409e86e7ab6cbdd909a93ae9e6c3a8726fd1bfb4634087b6aac5"): true, - common.HexToHash("0xd3b71840eb2dee83b32581c43a59196f21e5c02ad0ea17e61ae7a9ce932f3401"): true, - common.HexToHash("0xde68e7137d86ca27717791d71ec13a5c3ec1be39eb5f3e814f753e35854d61e0"): true, - common.HexToHash("0xcccb3c3c7227702aca6326013955ebf2a50ae9eef6b9f3db40418840de87364f"): true, - common.HexToHash("0x5c9c225b59f2a9a6d0404a073a27528b1d1d2d7fb0da2762cdd65aeb848205e9"): true, - common.HexToHash("0x31699dd37f278ed3437a11fcc829da5ca033ddd67f5c6a486ad9c4cbbb235c90"): true, - common.HexToHash("0xba93298007625f1ec55eccbbef6f859912c2d8c015856b9b6a967a88a12032c0"): true, - common.HexToHash("0x1a43b5d76384794a8782530cdade3aa9bb731addc2e838c4cd308910a2f783ee"): true, - common.HexToHash("0x85db8aab7ba342c712c404c9a3458fc9d453373261cd28a84e0bfb9d6f94643b"): true, - common.HexToHash("0xb6a747a677b75bb6bcec5be408896c27abadcf20f262727b53c54b5d797a42d8"): true, - common.HexToHash("0xdb8ad802802dec72240d95a65fb8c93a2b2f059af7757e2bf3cb8035afe5bf5a"): true, - common.HexToHash("0x6be8402452d56c9f832812ba2c196c1e9d9960f49250ed98221ee45723e6b3f6"): true, - common.HexToHash("0xb03495081976ca4556a7fa13b9beb6a691fbf4f91586225c4e5a3a73e855260d"): true, - common.HexToHash("0xad153acb0ae76a8b1d28fe3874e1cc4bb02e664d0cc4069cfe820e142030d7ed"): true, - common.HexToHash("0x3e8e4f30fc1368aa0eece4e86b1b987184d55375768143b1a9f82156dbbd4095"): true, - common.HexToHash("0x9f98795bd7f0247ed35f18dda0506fe9fa450858f706cb9d9d3233418ff63570"): true, - common.HexToHash("0x93c86cb599f5c5f132c5e252d7dea6f08a9ce4a99b75a962873782013a965d62"): true, - common.HexToHash("0x99db8d643ce02a4091dcaf6113e8c5e2c880a0ebb0fee61c3ea2ac80fbfe0b12"): true, - common.HexToHash("0x5b025f4624369c17632e024eddcd7dd8b024166673d21f3d874574d15aa72b21"): true, - common.HexToHash("0xa513b14174aa6f383abe06380f70c182be36a3e31d9d2d98261a5b7f7cba2fba"): true, - common.HexToHash("0x80a1a666436eb846538cc6fd3745f0ff9c16abccaf55d2faec613de871a333ca"): true, - common.HexToHash("0xa6f0c26933a7caef75fa21239ecd90be70fe87b4f8da235b87c409e66b662e27"): true, - common.HexToHash("0xceb86e1833503e9df8e8f4ceeaf679b3cd289d59e8fb60cdb70b3032a7b10acc"): true, - common.HexToHash("0x0aea0b7614ee3ff5f38258f2baf5f37c0a0c94e00f4837dd93d8444830a922cc"): true, - common.HexToHash("0xc7c3ca2da780a14a596a21d02ee9cb11e7071fb94fc6487009cae4b151035349"): true, - common.HexToHash("0xce84b9b598cbf0e2d6150c4c202e5ed45c5ee59560eba840de5bd0e0cfeeb80e"): true, - common.HexToHash("0x06ca08e690c6ea6bd25e9e830f8bc7fa539f292d746602365687249096f8e7ea"): true, - common.HexToHash("0x473ec878482ac3de685d9adfcc99d2b38252c93311a9c50fc73f0f7fdb71eba4"): true, - common.HexToHash("0xe90d68c171ed7c72b0aaa9750698d9441183e24e42d7f38cf44ff6c886644db0"): true, - common.HexToHash("0x0553040b6a66b48955c42f9dae7012b59cc0c632f4a0defe0ae3f4339989c3e3"): true, - common.HexToHash("0x179e5f0ea0fcc4846a1be2fa64dfe105ef12f91d4e047bc20f4de2491e802902"): true, - common.HexToHash("0xbbe7891d46972f4e17b86cf24ab112856ca34c5882edc61b4ba446fcbf8d4256"): true, - common.HexToHash("0xf91eae5a3568b1fa9c3db325a3bff5572e16c2a94143266c982367203530443d"): true, - common.HexToHash("0x8c15b4351e6717a437ae94d68b016cd5560060a82a5c5753111d0359f11e43dc"): true, - common.HexToHash("0x40ef850a27d16eb700e22b7218b55043c0f32114f66efe8b8e141b0831d38e96"): true, - common.HexToHash("0x6f88679cd91cc1bebd0281930725dcb54787d106cc193e38653a49dd0137e055"): true, - common.HexToHash("0xce366494f2fb4625b043cdc473d86cc62094e78e36ed41de9b197b9014326d45"): true, - common.HexToHash("0x81325040dc80b349543557ac9f3cce2234b58f50e7f62c5fae0c689d2cebe471"): true, - common.HexToHash("0xeb951f0c31c529f0ad5e4ae831af7534fc53fd7d71fb453b374fb1d695635a7a"): true, - common.HexToHash("0x63832143bb7795e29603bc93d76dfa2e488777ce68dbf7312e8ad776f7c08c93"): true, - common.HexToHash("0xf2f465179834b54b5b17550ff89e0f4253eea84538f22444bd63f94591cb8783"): true, - common.HexToHash("0x7e6eee161081d996d0b012f27770b247e432d62f307230392ceb61509cd3c730"): true, - common.HexToHash("0x25714e526156f0ca14a162bbadd93f28e2eb8bf5d0b8033d5555fe5bf234f930"): true, - common.HexToHash("0xa780fffcd439617aa5a8ad3b0da49e919a88434ab80a8133849b3e549cfef988"): true, - common.HexToHash("0xc17c4cf4844c337d0a3c0f50a049e4193cc1c592b09841d0fd7bb8286029b684"): true, - common.HexToHash("0x9bd7a97c61dc241c83559919e509a5a80882aa32a63e9b58ed4ab674288d05de"): true, - common.HexToHash("0x6936a5b2d52a4a1e2ccab0da8b52f2da788028702e648b70bf9e35ff0e5dc57b"): true, - common.HexToHash("0x817b60369d1bd8bb7fd29c1ef2de6a0865334eb0244d703841f66a88ff46503f"): true, - common.HexToHash("0x204fb7cc75e86ea55f095a6744a72a2bf531de1f0450da472cd0e0444c30fa14"): true, - common.HexToHash("0x9a70ba998be3c601dd3cfc9e57cbed12526d3cc015857e3c6242c31df904ca9b"): true, - common.HexToHash("0xd95a35edf970820f25a8568e591b7c4b588b3bb428858c621f56bfa77853e97d"): true, - common.HexToHash("0xf492d19eec561e1536db0a080e93366c63447eb7002ae0d69534e04c15634c57"): true, - common.HexToHash("0xdb844e4036537048255bb9bf12413981f6b568c6190b245b4172836efba6a3ec"): true, - common.HexToHash("0xf97ffc5d5de214dc25fcde7fe931f487246e72b5af12622da012b57dc7850bee"): true, - common.HexToHash("0xb7ad3f03e2c91bf6ad420c92aeb1e4485991021560d5e876a0ba24565935b43d"): true, - common.HexToHash("0xcbfa72e11d1377526db7d0b6dbb154ce7d163f5e4069da9bbcf03fe2022bb2a9"): true, - common.HexToHash("0x7f9f9db550513553ed372c5d2ccbd5dc09e72bb3519a7c1ac3667c5bde9edfb7"): true, - common.HexToHash("0x817d20fb94bce9fe77eea2ce7756de60f64d62f84191e7d347e93825b2418e60"): true, - common.HexToHash("0x8ed1abbbfb209330955998b2b4b7bfbba7bbe5a693beb9497d6ee1a662f4227a"): true, - common.HexToHash("0xca5c490cedb74806fa9dd7a8bee730a27e4b14d63c34806c3c3a4c85ea2b6bf7"): true, - common.HexToHash("0xfc13201d34858bea64008116119ebe4b98c7b7f0bb59252dceeee52739990b9e"): true, - common.HexToHash("0x17cdee24c81274ca9fe68c5b43a55d7969108aba7dc8dd51795d09df4485ae10"): true, - common.HexToHash("0x30808173209ca319485ef84216e1fb93fbe29a4d8effe353d5c273e2ec39b3ba"): true, - common.HexToHash("0x0ced1ef89c1e7e9b57c4d9554e16c5dd6e1942e572be02fff63da927540ae342"): true, - common.HexToHash("0xfa402d1f544876c15cf61e08fc76ea4b7514219f362a0552d0ec1975b916dfcf"): true, - common.HexToHash("0x242cd1b97eda5ca585457ff62d9dc133b20884fcce7f1ba944f186506205e595"): true, - common.HexToHash("0xc43d3b03eafacc7748cbc979f21b0f70a142d3119dad347f4f2b53679a2aa128"): true, - common.HexToHash("0x63a97f129993ec8f496bc5c48d898c2e4100f3d317ad2bb7817a28cbb255a8a9"): true, - common.HexToHash("0x2a49a175646d7ec7630a2c96305fc8f0874a5920f66e171a991e53a737593c79"): true, - common.HexToHash("0xad82e63c8dc7386d424a4d9b07ea8134e722ff38275ba8203a83093d3b95733d"): true, - common.HexToHash("0xc48efc7d7c12745da6dab0d1029626123de14b66a5e618bcfdfc3955d267f33b"): true, - common.HexToHash("0x938032fbbb2149cdd7d06ea2c897dc9831a43d7b4f77fb91aadf1f6dfd2d7827"): true, - common.HexToHash("0x3fdd0b463f38c316eef88586865d706ff8445a57245122767a15c7d981801232"): true, - common.HexToHash("0xc992b9f68e3b8d2d71302c5f01b821892d085edf91ce6016eedaf81521a71c52"): true, - common.HexToHash("0x5ffc492792784d16d1706951a3dd6d035993de0835dcee593ce8c3c6f8c1d768"): true, - common.HexToHash("0x796200c9d6b9b2ba1623bc9cd7a2041a793889d861289486b04e9b0daf574b23"): true, - common.HexToHash("0xa96d4c41ff71c85bd06a0edaa0e5a2e5e9fc2adee854b7ea38407be4cede444a"): true, - common.HexToHash("0x1ad7dc04111437f2cdae140f8b8b0a07f09b9f9cb02514f5f1c0168a306268e2"): true, - common.HexToHash("0xa5fa3e565dcfcdf0e1399798001e369f8425097fa88dd8259990fd310d74bba8"): true, - common.HexToHash("0x293f1d25e6a51a4cc2ff388bb609cb63d031f7bac1a2b269fcea73600e5b9b9a"): true, - common.HexToHash("0xe63cddbfae94c9a715095938b5ee290fc4d7dfd2cc3ae2cbb4165e2d017aa8ba"): true, - common.HexToHash("0x0f28285324448b62533a4ca23133b8f3337426e248fc40dd699e636ad8903ccf"): true, - common.HexToHash("0x3efd444431cd57c918fda0743beb7024fa72583ea23ceb843c959d1449c5b88a"): true, - common.HexToHash("0x4d0af07f9aae79a01816e1b2410c76918b82e947094e549b57014be5b18fe17b"): true, - common.HexToHash("0xbbe5d13d1c433cbb06d64559f71c5799989635168da55d2e42e53bad479a5cab"): true, - common.HexToHash("0xfaed507417b05173fc400c91b0ef4c860942c41be8c5f1449c4c802f1d7b849a"): true, - common.HexToHash("0x706400cfca1507e96797e25a514cb319c55f31482c19a437baede326b5d0b22e"): true, - common.HexToHash("0x424ec0992d2dda6e215e9564d9b0a40b643537e615d3833f15f7807fc637d127"): true, - common.HexToHash("0x49ee2231789037efed94dff9213d19e077c9def4c51e4fce4e0a7b1ef0194d51"): true, - common.HexToHash("0x98b5c8b25aac21ee6bbd4ade2ac393dd5b1178f74a89bdf51c1ffd9f2e6d579c"): true, - common.HexToHash("0x808dda52a9755fbdb12e4b97227300482c69eb506dbd5ccbfeb7e203f78965da"): true, - common.HexToHash("0x95922cbf09a5c121204aa34107735e8da7b2c62dfb58d21c29716708ab42c7ff"): true, - common.HexToHash("0x1808429b3458bf7ac2572ad3f8c45c003c5d13126f3c5e179efd37b02e3e324d"): true, - common.HexToHash("0x8391f5714db5a41b6e779e39ef79d28f956572120ee5f61ff5533c6ba0763db4"): true, - common.HexToHash("0xcc7de28f6251a4c7d24a58300cd11527cb4b77db5514671895434d1b9fb720eb"): true, - common.HexToHash("0x0197e1866c3e80f5eb6cbe5328f8451524f732793e3572742194355eaf3ae744"): true, - common.HexToHash("0x3a3b1c67c9820156e5e7728ce0aaffb8f3281e5201fac25c6828926ceaa27ea0"): true, - common.HexToHash("0xaa76414d7d42d2a63d8ed47c01e642e19fc2341cbb704098f0828403e6e94467"): true, - common.HexToHash("0x48dbec1814fd35a4911a446cce0f43ad6c3a96f26f26e75bb4cb8fe36a66eba0"): true, - common.HexToHash("0xdc464e1791d4c8a16d5775827555a5ca451b617ea91a2d1644475057d4dd574c"): true, - common.HexToHash("0xdf939a3b77f2347def8b5415f4f14204639f739e21aad24f8f7ebaecc0a84dbf"): true, - common.HexToHash("0x333f4c1ffce18ec4c6d06850f96304f59d27e06916b60babfd8bd88def041045"): true, - common.HexToHash("0xf3ea7b3f4ea48b2ad97b839b6eb23872b94a344140a3a277b2901c97820dd2ea"): true, - common.HexToHash("0xd5a6d0bf0cbe1844f19d95e622b1871cb5522087b4b07304fa9a4f1b965ee612"): true, - common.HexToHash("0xbcf84abb4c833f6685556aa81d5aaba48a443dacb469e1c968df15f2b651510f"): true, - common.HexToHash("0xa6d93dca1718e315edc4a13305a5ea828a7c9670dc12d424d7b549e60c910724"): true, - common.HexToHash("0xe8cc837580455d85444ab955f190f7523067a1823df15f3fd45f69f97880af3c"): true, - common.HexToHash("0x808f04f859305c735983fde702620bb7ebf7ca3d76446390ba9769a6b7273b13"): true, - common.HexToHash("0x840791c6365e0fb255147331291e3288f0c6b835c1a2644537397132d54909b3"): true, - common.HexToHash("0x44f9893ed97a2bac9249883577ad524a48007add65db9512f51474d55c4dcdd5"): true, - common.HexToHash("0x741e82bedee617e10749c01dd3581ed5f3163c6e75a9a5c31609a5799b7a15df"): true, - common.HexToHash("0xf44b3fe0001e687a067382826386c32843bf382ddc76fd32401d42798265072a"): true, - common.HexToHash("0x4994776da0ee55cb6ed68f0245595136d819528085173f9818b7a1d3e2279380"): true, - common.HexToHash("0x620da8073e31dcaef266107e8b6291e84a5417716ad8b697ab80a8e122376d98"): true, - common.HexToHash("0x8f82e3c17adafaf716fc46c056047c903002a83d00d02f6ab5c9adb36c9c6ddc"): true, - common.HexToHash("0x6492f26e10a340b33ae58a728a1812049ebf76ba9ee96d667986437be86de554"): true, - common.HexToHash("0x58d050ffb429340db6e1d73823c284f56519cb9766be5d4d158de886a506ed09"): true, - common.HexToHash("0xa9ff3613811cfcf8cb8825561dfbae050822f5a255b39ddccc426d773b6c5df7"): true, - common.HexToHash("0x784cc31812ac9bd95de9af0fc59611147cdec5d7fb5d88a46e20c73cb05adbe2"): true, - common.HexToHash("0x154ad13503315d50fefe95d4e37fdc8abb3a922f6f8b1d571a2aa8be594c8502"): true, - common.HexToHash("0x6cd8631c2b2b4474b8bca7200b5766a60d5c2be6fac1480988d62146c17e35c1"): true, - common.HexToHash("0xbe09026e810a07d4837b2eecdef575df02c685b2a7a15a18416c80cc7f5d77ce"): true, - common.HexToHash("0xe40e3562742fbb05e2a26ee50e02c15454d1f9ffb6f9af7e08b1bd1c6d3bcb3a"): true, - common.HexToHash("0xf3ed260a580b74e5e5ec5719d14edbf55325cbea0f35efdded72b78fbef20041"): true, - common.HexToHash("0xae14ae11f6d613aa0f898454401a989773db292413ec8de5ee2e49f3f22b6d4b"): true, - common.HexToHash("0x163ef18259651d9e61062f3ec12bb5515f09b25d00ab77114c850b46a15b7372"): true, - common.HexToHash("0x50aecb321d91e5c9f3ec5ca1a0a3ccf23423b38209d208504133005b6a165176"): true, - common.HexToHash("0x5e4f1b330a069e70cf61418a28d2efc069db11f4d0f3be396a9ecf2827855b70"): true, - common.HexToHash("0x1c039679828f193bb9a6f97bd35a8d4c3cf45a006c027edf01cb871bee252ece"): true, - common.HexToHash("0x31034e4713d516b98f5619e7de9f35b5d4e1e27a2e3284166cff10d2499fb811"): true, - common.HexToHash("0x417f4dd2cbaa962cc37a5479a34df6f6240fb22138154fba52555ba28b388e43"): true, - common.HexToHash("0x8aa1ecc821b58d94e6a99b7366092d6fa74f84e600dac68b9e7e591c809aa3d1"): true, - common.HexToHash("0x845cedd2806330b49da857033e2ad7de47058e0da8aebcfdf1578c74ad57f5a5"): true, - common.HexToHash("0x31c03fd7783333c79dfea353836ccc0154d09b81a5098764fa0547fd44060a64"): true, - common.HexToHash("0x20c028e67b2b87084750e9eea4263a682de232c85eca595e7f6238225fb1ff20"): true, - common.HexToHash("0xe7926b7b91cfd109bdbcf8b397363548b4ac044749bca738d69950a945a0bff4"): true, - common.HexToHash("0xf0897e234d74cedab03c8bef978b962462e995457e69a7d0d1746689723afcb2"): true, - common.HexToHash("0x874d82f47fb329e00eb4faed70f386f3ba8ddd037d0588c2476efa9faf2a2f76"): true, - common.HexToHash("0x676f7fe49ea1216ca771af159d7325f6c0545911909669c9d3857e4f7aef74f1"): true, - common.HexToHash("0x7b06e0a4bb84e6c09792eb5d0a35507d5ed3f059623a82fa164b8cc977b87b71"): true, - common.HexToHash("0x2dabf55ea833208b85ec48077ffcb4840797fbb00940fd16842a1f631abe6125"): true, - common.HexToHash("0x1f3cdc6878c9c5ff5ab6bbd552c03559cedd1fceaa59e192539abef996d70251"): true, - common.HexToHash("0x49e0818eb0ce0b05d4f7dfc6b78d584f1fc0be63ec350a3d807ed7972e9ac681"): true, - common.HexToHash("0x033126bdef31eac5c53d4826912659cfcabb165d66f675a6bfeb30989e68e19f"): true, - common.HexToHash("0x32719b9d294871585f3a06022c137060644f295918ff22670b0eb64b8818c150"): true, - common.HexToHash("0xcd411becc55f7b44fb3c671fdc1de1b50e75257ae202f267e125562836e7c07b"): true, - common.HexToHash("0x4520425ffdc06ffd236344fdf0f4910bc525d469318578dc43719bb674e321e2"): true, - common.HexToHash("0xc0d70a00a2034d4a1be7d99c3847616da252fcffbf1bf50e8d7127d3b7d37183"): true, - common.HexToHash("0xa761002daefb84a394df5f20b984b0427584e7c5663e0388d4e622545dc853c4"): true, - common.HexToHash("0x14ad61c8fde34f94c6d66334361edf07adc6bfef59b848966b4c63a1b1126659"): true, - common.HexToHash("0x91f02e5acd8768ddee6cf3d8e673de103cce8319c12549bd35f0936bfe24e286"): true, - common.HexToHash("0x8ff1a3bb0dda7bcc11cda5c2d171c70978d2052dc385532c7dffac05a1499991"): true, - common.HexToHash("0xb78fccd05bcc77ff582af360a32dc4ffbcf23bb1afd7f47e4afc2656d4a761d7"): true, - common.HexToHash("0x18f1ffc80b66f6b9ef04710c93718691053ccd355ca1f62ed039a43667d40302"): true, - common.HexToHash("0x14bac0223a199fe4f2f47937047b3117fb8963693c25572d94c617bb56d6e9b2"): true, - common.HexToHash("0x675f0e1e9a0405468e1c09d8485337dd619fbdf2fc86983e8cbc8fffc25678a4"): true, - common.HexToHash("0xd3bc486909abadf2f858812c19f48f01c1cd1f8168309b25773659d95d5e4810"): true, - common.HexToHash("0x7ec54dacface28f0c6082db44bcff76aade541a1b84f663720bb9349d67d8734"): true, - common.HexToHash("0xaabbef04d7b7bfbf813c55b8c8be4bea0ad5a53df67bba939a395d6b121f13e5"): true, - common.HexToHash("0xcc5b5fb39e3523ddd30e02d187b022352660000d6b0e9d3f6f539db870710fa6"): true, - common.HexToHash("0x500a04f856edfebfc4c8462633d31f1b3cd167ddb9a25f29254cb74f3fe35e83"): true, - common.HexToHash("0x02585c194b85d9e61d9f0ddba54c3c63825a8ab244f70dd709551a4c7d487c92"): true, - common.HexToHash("0xbd0cb598b63e07a3a8c51003de165eef2f962d53b43e4950bcdecbfbd1aeb144"): true, - common.HexToHash("0x54efd363d4f3513236a69ee518419ccadd730a6dd206ee97c784f0579139128d"): true, - common.HexToHash("0x38920726de40e794f092d331f32253867009227f4cdad66fc51fe921cbe6c18e"): true, - common.HexToHash("0xced0e2e1c8bbe6144ea63b55147a8d87814e2089edcb7dde77c05a9926bc7df6"): true, - common.HexToHash("0x29a4d4cd5d7458e06b8f8518c8d093c6fdf5487de347c8c5f14707e1f308e18b"): true, - common.HexToHash("0xf7df6393fffe00a4b15c65d35625323ea7ec9d3e93eda3aca3e11e98005d58da"): true, - common.HexToHash("0x14489eda4f319bf552589caf26bafea1445a8dc4a9401e6df7430a4cc08c05e4"): true, - common.HexToHash("0xf905e769fcdd6d48c9b7a84be0d40d7472cd7c9f4d13543d4110b703e53495b8"): true, - common.HexToHash("0x5dcd9e01b8b5d5432afc99957d3fb7ef8dc591f964ec85045df24351dca53a67"): true, - common.HexToHash("0xa899bad67726f4b0596f36755c50d2ddaad6ca80c530135e53558a02384212bf"): true, - common.HexToHash("0xf04ace508ed62a49e81300bdfcb4d9e75d4ac5adc736d864291ed9baefb9f2ce"): true, - common.HexToHash("0xcf06ad1d8b409ea92f4dcc3bf70f39b752775018b790473e9be086e42b43d9eb"): true, - common.HexToHash("0xac48c29b53866e764809716f58836d9e6cd2ad06f6473efb5850f583e6d3bf61"): true, - common.HexToHash("0xee0b769d61721a470a8c7eace0fb28f606c9429192640d9ca776895a0bb67b74"): true, - common.HexToHash("0x2b13a184bc30ec5a6751bf7162cbc00bce0cbc4f4a71d68dc40822b919af73fd"): true, - common.HexToHash("0xc2c4168242eb7fe0696eda5966acb8c8975679a8deefec927b2acdccf6b912ec"): true, - common.HexToHash("0x6dc2463edbf56200c17283eac1b5ee4bc2c634dc2698e00c855d8fe5f702d4e6"): true, - common.HexToHash("0x78b711b2241e23f0e170fa50c3743f04faa32333ceaa439f6767e3d50aae77a1"): true, - common.HexToHash("0x2f59c17687201abbe7a4f9015c2cc1c5d78ec96ac5524e801243346b395a2bc0"): true, - common.HexToHash("0x4c7db5229eff438e0ae2b72fe60942a7fdfa0c6ef8fc67b6562c90b486781aae"): true, - common.HexToHash("0x788d200ec8b6f89f4a24cf22a7b93c3cd8b52568c79aa6dae7993b0344e191dd"): true, - common.HexToHash("0x6864046345b7a9249938ff99e6cf758b06e7dcaf72e506223587abf9c136d27e"): true, - common.HexToHash("0xd6a98c1e9c559eb50e01f979b5bc69d31a56527f3ebae6f61f6b5d60f4e8b54b"): true, - common.HexToHash("0x048b3f792465024216d185ea408e2e743839132e45486837333d2d2a3eed2b5a"): true, - common.HexToHash("0x7d5867d01d655c5a9cdc4e2137a9a23c0f759786ad613e39f0c034a5ca3a8f37"): true, - common.HexToHash("0xb575314f3a46509486d1758e37852bca5a3fc5c3793b7db34928481ce51fa574"): true, - common.HexToHash("0xa2bef8c9091dd4d0940a6e6262db4860bde5014cb1087b1eb3992a092314ebfd"): true, - common.HexToHash("0x9be56611c6e58d68f957f124fcc232169448fe6f36aa65e66ed7414233802f72"): true, - common.HexToHash("0x65554dfbf801073eba3c450c8bc9a4c6ffcb13953876bac9428a970912f47767"): true, - common.HexToHash("0xb6521c2f63ae2b17753992a535328eed3c9de1b861595cbafee46d6b74fa2194"): true, - common.HexToHash("0x1d5b3fc7bf953260f5ebafee86c43083b68a0761941267cdad6a01acd2da7466"): true, - common.HexToHash("0xbcc371984bfd19781a42025c5a7689a3af7f210448ddf4e1f45cfd689d39139c"): true, - common.HexToHash("0xcabca6b8d2a63440e8411a28134c44bca755605890bdd12c26919f2fe0751a83"): true, - common.HexToHash("0xb1b10879fa868ee35104b2c3b5df360c38b201466680180420314ce5684473fa"): true, - common.HexToHash("0xb89f62cbfb050808c4f3df6aecd8bddfe16a1009a0a0bd0c1e52e85f0f393112"): true, - common.HexToHash("0x28efb5c98eeb0ba3e692218d5f87e8703daf459e7342d51a13a689c08aec68ef"): true, - common.HexToHash("0x927c987b5b715e3e703a4aecc436d011938359ba6d5be22348e120212923e3af"): true, - common.HexToHash("0xf8187edd4c0db6af79f00bb9ca34f78077c94234dd590fe2b13c44e1d0e76d5d"): true, - common.HexToHash("0xbb69909e3b6db1d1b2b90c3b320fb65cf435a020a6d488b6135714f37c33169d"): true, - common.HexToHash("0x13e2ac43f22da72cebc94f78223714308fce9b9ce6c4d42ee7cbedb1d1901c08"): true, - common.HexToHash("0xd9d438fc8721a77626ade7c0b28f4f9c8d4bcdc57a8cfc16225409c158a2ecd7"): true, - common.HexToHash("0xd5d1497485ea7d86c30f2a01b173c8a17acbd1b3f15318125b7e965af8ac0458"): true, - common.HexToHash("0x9d251ab462ea30705977fe8922ed6b03fd062c7a848241a22c3e4aebd6c8dd14"): true, - common.HexToHash("0x8fbdf2efa509177ebd876d4ff80d4d64c78c593812329717c1b10ee3b95280df"): true, - common.HexToHash("0x4d75f1af7b20db58afd9f4b2acd1329c54446e13c60260ba221e2666d341e148"): true, - common.HexToHash("0x9511ee65d4554abbf5b30319efc985d07e2dc057c2d30198b33089a8b7244790"): true, - common.HexToHash("0xe69a1a6d1e2c8c9c6d87df6159d599702298ccb27e6c22595a46bc02fe4a54bf"): true, - common.HexToHash("0x0315f611fe9691e11465724dc0b3df3dd726d4de576f667205a8de7287c6e453"): true, - common.HexToHash("0xc4a3478757a9d9f4d277f412851213cf58a41b55e45e1e94a0dad45bd372e032"): true, - common.HexToHash("0xf444bc7b8cd97c00ed301db35753efde426bd618de14be5b6cde4bdf43174ea1"): true, - common.HexToHash("0x7891004e673589de8eeeb6b4a3cd9f0960a5781b013a76a95db121dbda1c21a5"): true, - common.HexToHash("0x50d41a0cc65587c17b6c79b42ca41d11fa5302dc0a962c96e85538bcb1935e54"): true, - common.HexToHash("0xe4b7226a210298a6cbe5ae67f7e529d4a3cc2a0d6455d6c8e11e8f88b895061e"): true, - common.HexToHash("0x1ea1a4744bf73a15a2028f7b6a5edb8d5e7a1b6260b92e3ff233cfac2ecbb46a"): true, - common.HexToHash("0x45f4ab83e29986952eed0eca8f9cd0f83d75857ad26dbbdca3b4da26782fba93"): true, - common.HexToHash("0x11f4ed9a6d09dbfb65c12af9c44eea31289d8986ca194e4660770b6ba412e5ef"): true, - common.HexToHash("0xdd8267a2f88168030f0aaa913a1e0e0aadc1f690f2211a4051e18239dc92674a"): true, - common.HexToHash("0xe45894a244dab320965a20b562c1eb536712d8779e1496c1d42afbd4ca4f5bd3"): true, - common.HexToHash("0xde0eaaed1b6c5649a279d0ea257fc443f997042ad7497d929337e99468338459"): true, - common.HexToHash("0xaf589885426ea60cae8cdfbfb585d02c5275e0d52c0a6ba31d0febd65cac0a0a"): true, - common.HexToHash("0xfc02dbbcb446c5e7792e77c6d5e366d3fbc87305ef6c5cd6c090ab9e631fc0b8"): true, - common.HexToHash("0x56a51fc3aaa67cf3e0bab2d19d8da9f2a8f1699ace5f08592c6c7ccc6acc465b"): true, - common.HexToHash("0xd5cd9d7f7830cb09c1d5b07078828ac0a4379add727ce036b9d1310d1193bb8a"): true, - common.HexToHash("0xf8814b6924928a1d071d843128918344b94096f59f13cc6a5796ba0ea85ff591"): true, - common.HexToHash("0xee278d3fa7bd12a65ac1ad4910ac05a22b2408001bf9944318a4d834926c3400"): true, - common.HexToHash("0x7f7915d0bcd4fac0cadb4c07104e6d821af89715f2833f8ce45df0d08f235731"): true, - common.HexToHash("0x2dab014d4db0b3ea63cf7e54eaa329466a14211a4cd2c98b24a6a6b012665bbd"): true, - common.HexToHash("0x65c6339dcb6fa21a2e925ab6d28a41d2cf485e2125b9ea561032ca8d7b5cd65b"): true, - common.HexToHash("0x8d75bd530059d0fca87e1af0ea721ccccc0c4cf65741da2eaac99b574ccc3a80"): true, - common.HexToHash("0x3f4b468f910924d263d1ffd48bc873d57f169370838b4b84f0fb09fdf6a6ff3c"): true, - common.HexToHash("0x26b1ce1e9391ba78f6ccf2fd0d024b2625bdc90273b22def1ecd8d390a214bc2"): true, - common.HexToHash("0xaa5cef13d3e6b9e3fb98e949b19b0c8e8cb7689f52bf132f15137f8a5ba80e33"): true, - common.HexToHash("0x731990a97d19e816f386196b979a60105fef3f11a3e6787ed4285146598a6822"): true, - common.HexToHash("0x14f910db139f06d9a6557de80bb114fbc292345485168f2ce2d5edde3b0e438d"): true, - common.HexToHash("0x46ee5127c2cd219d388e4c9c35b9b8da4e748ae7185dfd9aeeaaa9c815f2bc77"): true, - common.HexToHash("0x99b3a531c090369bd038f218f30d00f9ba2eb4efe330b3836be2457163951955"): true, - common.HexToHash("0x8d93be9f4f52ab67f2e108f0bbf0a086e717525ce647d0a8a8299dd5ac55518a"): true, - common.HexToHash("0xb85d26f33cce59c6e8493482e128545451aff0e5b3d486f613290b14cf67a668"): true, - common.HexToHash("0x4aec8e76dabfe1cc67d7740eb227bee6ffece898fd3fc2b5aaddfcea8a6d00ea"): true, - common.HexToHash("0x0bd3074bfe69336d03beb9aecf639c28d37f2ac5a598ad460437e8e439d9de41"): true, - common.HexToHash("0xb09d928c13f38326d9a156bc0dec458c89aa9ae4bbb7adf10b5828ed8c6f5dac"): true, - common.HexToHash("0x927c3e6596239263bf6e22bbecd458b476321a6c9013047436c26507b9167d83"): true, - common.HexToHash("0x979c7c1da3d628d528567512ae7607bf3e7c5a29eafecb4461c073a12104312d"): true, - common.HexToHash("0xda522ebbde44b98e385a06146683550df92a7fc7c337b014dd6f2f46f1850efe"): true, - common.HexToHash("0xccf494c197da1d83c3ba350a4bdd0e296d83ebbcb5fc5ae25f0fed33c9c5805f"): true, - common.HexToHash("0x177746c7e815a1956b431b84a6b21cf6a6cd4b4140f6708a79fffab53b07425f"): true, - common.HexToHash("0x3a7482bf04e4e29efcfdb217c638ffa7dc604421677f7264c237941d5d73da51"): true, - common.HexToHash("0xdbae32943cc4f0c3c2df162301eb018d2af194a010eb10d5dfa6ef82ab4e4b82"): true, - common.HexToHash("0x270ec04254fd2f3a683ec67c2f81146b3e4c56ac70553c49edaff0ea81a66361"): true, - common.HexToHash("0xaf190cb37fa4fcde131010b2640f7f57bb98d714f6793130aba9d81761326408"): true, - common.HexToHash("0x116ad0a00f97848d81c722806aa40e5317d4f83db9dd7b70cb5a82577bb502f5"): true, - common.HexToHash("0xf340b4ed116497d3d9e168ea3cc16920f94f8a1d2a63695bc9f022c8bfe6b5b4"): true, - common.HexToHash("0x5e1b14ba95b5f8b6a86b4c4ed8f43585cba2db857719014995099558d5a09507"): true, - common.HexToHash("0xbf44922423457dee7e11cc7ced6a8f978b2d7ba72fd3b258818b2cb19225c8ea"): true, - common.HexToHash("0x9c2dbf905d7efb9b6702ca5ae6c73b1a4e1c83f32f4ef23d320354b06e03413c"): true, - common.HexToHash("0x1003b01e178de66878cca4ecde9fda70ac7f1c3b89022605bc2ccb216ce1f158"): true, - common.HexToHash("0x2ad2f616ab21b598a6682dd6ef112c7e36073450ac3cf196d3c4ff5ac61a9302"): true, - common.HexToHash("0x407bc05f1a9afb3e4246c249aa93f3a0ae996d571dead28e6531513e63b37345"): true, - common.HexToHash("0x1924ca79e0a82517596ce11974bf38b497adf811b1e139d77d25f8bd29877647"): true, - common.HexToHash("0x2f9e0e206bcb1d4db3cae0d74f5dc51163aba36a851dc4bbd5f90ac41550dcff"): true, - common.HexToHash("0x783f251374ea4af4e3495ebd1532ffafd2d82f4f0e371b030b235850ea5201f2"): true, - common.HexToHash("0x9f8e9b8f68c058cfa1edb5b3b36e37e6313ca801194b5be2b2efd2d0b5919330"): true, - common.HexToHash("0x0bad023395e60797334a1c7927687fa7b65f8a94fb013ef11133006174d9655e"): true, - common.HexToHash("0xf4369bbb6e72470cffe7d0e3a56d5999a104e70d0f9174e367b31c157ecbfc46"): true, - common.HexToHash("0x70f50ceea1ca909a740d4d018dff27564bb23700443a3597d5857865775fb9f5"): true, - common.HexToHash("0x2a11357ef2db9847a02d6cedf49bc69b39d5997a490c19b978b72a100d8862b8"): true, - common.HexToHash("0xd347a0e40f9e9db5da49d23883f4b152c5d1181e729173a77afce22469555129"): true, - common.HexToHash("0x309174e9e133a50a9451748d25de7694fae86160f3e297ea41eb640481ae9dcd"): true, - common.HexToHash("0x8e3eb3a16c78ce069001470227edc15258c4e88dce6b6bf10f0d76ecd8dc06b2"): true, - common.HexToHash("0x6a52c8e4bd012315361d35ef9e5048e5297f32c98207830b2d5734b3ac618a8f"): true, - common.HexToHash("0x04591074c0a1332348b705e3e2e888d8c8f05a197d334754b2048671ed05e811"): true, - common.HexToHash("0x107d2c3f49ec64aa1417b718c523ba2b7f26c0b50937c23db1cba1bcf5591b98"): true, - common.HexToHash("0xc79663a1fce1e22b590895ba3ad65fb285d88ab53456bb8b635b7795ad7efb2c"): true, - common.HexToHash("0xcd0d53fa43cb67cd7d7186ab6d1fd663d59ab9e76897946cef8f3fee47a3c605"): true, - common.HexToHash("0x0c3a4a89043a2c3d81b9f493fcf86f32a44891342f44b88436d935c882adf4f1"): true, - common.HexToHash("0x42657c16c0ec77b82d83fdbe5d552a023d0a65abcc32c9a4ec72c3cd9b183c71"): true, - common.HexToHash("0x9a444a2679fbfa6ad61676d24b5f842236d2110815c5b8b4669874860218998e"): true, - common.HexToHash("0x6510bc34ec5e85208050e0f7b0d39aa271ac8f083c71eb7225943fa3957dc8e5"): true, - common.HexToHash("0x885ccca67770c8b403c51827cccf3022c4dd2dc2af7889a4e2f5296184dbb414"): true, - common.HexToHash("0xd1233f32f1bcfc49e7f3e17e9c50e79fab9e52412e2fcd7b8f8756af96ca1bfa"): true, - common.HexToHash("0x65e05abc033cdc4de39d9cace0e5687338d543e38c3990277463652559121ba4"): true, - common.HexToHash("0x8ee69572e7eee823321862cef61d33b140730a39d09c25be102417232b9ff845"): true, - common.HexToHash("0x528911ba5bc0ad380ce80737c30d7417902d9618bb2fee9cecdc18e9b17e12ed"): true, - common.HexToHash("0x4043d678e0146ec7b7f072b69b1567512b0b01f9e06c4fac38a78545f55ac198"): true, - common.HexToHash("0x68f1decf8ddb996c619069d9cef3815963f3668705ef487eae1b5902d6f34b49"): true, - common.HexToHash("0xb2bcdfaeca1c41cc043e579b18eb1160deec1cc7bb02a1f239e0bedc5c6405e0"): true, - common.HexToHash("0x257b4dc98aaf0710a89b0d7466363eac820c85204325504ea47ef5d17b17fdd9"): true, - common.HexToHash("0xb363d6b71e903a65cfb03a1a68368333d4448326f5d585cd9b95d17ec21fb575"): true, - common.HexToHash("0x05615f0f4b250d6d870132f065b5eb920740536c0196ca553c54125c58e885ba"): true, - common.HexToHash("0xf2695ad75dbee2d772c536e3ccdc4e2e8991e5d51e10cade4e67f250b337c765"): true, - common.HexToHash("0x8af414f6b15c47f306b353d86dd7cb7f1d17e62bd3b9dc89033f9c7dcce302b8"): true, - common.HexToHash("0x86e89ede27e3fd127c5a7df42241673c822fdcf1e23c804ee92fdd33de8104a5"): true, - common.HexToHash("0x0c5948ab50ce32376d1b7deaf39c4630ecbf511856aa4aaca751309f486bf66f"): true, - common.HexToHash("0x6de6c3cee854cf085c1c898f425692c6da791bf67632f2a4792250b62337c597"): true, - common.HexToHash("0x39375a88ef48fa5b9c8cffa96f7ceb95c51857cbfbcf9930d3f9810c198e25ee"): true, - common.HexToHash("0xa53ba5a6329799c579f42db4e55f5e3fb45a2c7166114a25d06fa116a6c16f99"): true, - common.HexToHash("0xb0066663447fe2da3c7afa1e04420fcb74c1104c1b4052a5ba3771feb3c4b1df"): true, - common.HexToHash("0xd52c14acb9dac0c54df1105709ac278dec98908babd92e0f5097fc1f5ffec332"): true, - common.HexToHash("0x89845e3a835190e77eb58ee3254e890ecda5950721a4ab4ad1e143685ba477e0"): true, - common.HexToHash("0xe582cd3eb64eff5edd0efe276e0081fd7ba372c04a08f24cd814292be7576a88"): true, - common.HexToHash("0x8b14cd7eeec1594e4dfec06e2f18207e4c7cfeaf66e1c180d498b769accafe31"): true, - common.HexToHash("0xb1b2ed5b129f926930e27b35c1170be9077a010ceca827502d8619b79d038d23"): true, - common.HexToHash("0xaf68bacb8fc42e0e2f553d90d0ae60537d18069eced235393634d86fa0333e8c"): true, - common.HexToHash("0xae941845eb561d9605f16b6c7f49924dbbb10d8116fb721c7de475428b0c308e"): true, - common.HexToHash("0xf9d88a28770f0dd86cdd2145db9a4ddb5faddd3e63909dd518078b50cafe4e0c"): true, - common.HexToHash("0x70e50e85c834755dc79f86fc390e7e735bf02b95f4444f27b668a1f26f1c42a0"): true, - common.HexToHash("0xe91be3aec073b45335bf30411c6c5dac614c6502ba333b5f949249b4717f1290"): true, - common.HexToHash("0xf9e0e417e8da4f2f4cca27ca57f53d8045bac3f54f6a364930fe4d2e52108c95"): true, - common.HexToHash("0xd7429b24ec8a66e35f0e176216007a702689778f8d8957a77fbaaf7789c7efdd"): true, - common.HexToHash("0xa30608563ef071882b44578df6c718ae2a93961abef93bfb1ded44cf688df54a"): true, - common.HexToHash("0x95704ef8e11248b409b15cbfd040d98ff06c714a1e676763a703b65cd00442c2"): true, - common.HexToHash("0x1def542f025dbd0cef93efe77e9967af24eac884dce5be3fb9c617c270b31c04"): true, - common.HexToHash("0x830891a8ef7781eab69b7b1bcef96003fd99762c7f64711dbb7b659d9495c289"): true, - common.HexToHash("0x086484d75ff8c0857024df6c44ff7eb299b1960867e12cd86c53ae9795bb213b"): true, - common.HexToHash("0x3fa3fc5c7dcbcf86f01b1a3d79e6a6d6d205f42ebbf8c3cfde2fd73fdbc78ca8"): true, - common.HexToHash("0x2f2cc2c91d40f97c09a0ea29b077140fe9571ad57c54e3f830fec67f2f4d11ab"): true, - common.HexToHash("0x275108b7c082443826c0c43e73327505051ca052b8927b86323a1bebc67d5f0f"): true, - common.HexToHash("0xbf704530ecab8a64a55754ccb9d88e68cbc162039fa7dca3ff2000a60e679411"): true, - common.HexToHash("0x1c65076f4fb7006136272a213787a8c751085402098575ad35aa96a66bf0754e"): true, - common.HexToHash("0xfd1ac45f1485d5de08f833eae38ed2dbdc576d09f38093ca88da9335cc985ea1"): true, - common.HexToHash("0x9fbdd036abb6015d89efd1dd26c1ff6228d37ccaa08cc43d645b0016dd4b5d28"): true, - common.HexToHash("0x925997fbbee307c40037427e1b99d9ea5396c28e0c5913eca7cdb118bfbad4ed"): true, - common.HexToHash("0x422157b20e0e83f5a9cd7a1d3760ff3635a24c5b67e3251408ed0247929f6346"): true, - common.HexToHash("0xa8c0d272323eb91b66df7a282aa64175d829d9a21e5904067ac14b1a70438889"): true, - common.HexToHash("0x3f32d1049f12844e5573a761b6762c5bab99f15de73a9f3dc77080d1fb210263"): true, - common.HexToHash("0xd64677cc9ac92d66304ffbae16a38a917dbd5a6a49945898edd7b73c392a29ec"): true, - common.HexToHash("0x30a3a12272b1e0a710e7e07e2df4db5108d69b1fc1cb9c71ca0ad4ccc419f59a"): true, - common.HexToHash("0x7702d5204b0ea2ea0cbd5561121dad81644557a0b858fb609719e0deece2a64d"): true, - common.HexToHash("0x98b56e15c0755f796f9e4239b6992e2576ca84f18dfca0af6de958226d6b931b"): true, - common.HexToHash("0x0284ee83a0d54929369c4d394525ba605d481c2a53e7e474a09c593d30f77880"): true, - common.HexToHash("0xd79ad8e601664b1b3947d965c49f356262d1094c9d2ea419afbde56153f72144"): true, - common.HexToHash("0xf1408c25260803f56d1a87165e9674170878beb68d3223c49cc60814878c53f0"): true, - common.HexToHash("0xb757f74b165b9a310298396c0c3b8137a41c59d6db306109d0a8eb3ce5dde1c7"): true, - common.HexToHash("0x5ae0904a9b7ba3ecc50a7142dfdd511112bc09746a361a132258dd714c3b6df3"): true, - common.HexToHash("0x0a33aad288923ca2ea47c3873108989173427ac9424ed0bf0a3b8be7b847e862"): true, - common.HexToHash("0x7a40059d3179b0c6bd9f82e55c016243b0e16cd76d272e374c872f634f17ddf4"): true, - common.HexToHash("0x6e7084f8f50d96365f9a678cc5e022811bc8b92238deddf0fdaa855b04ce15a2"): true, - common.HexToHash("0x8cdc25ce8ad5839bc7289a5a967ff52d5055f8ee3403743583e28e24f87ce7fb"): true, - common.HexToHash("0xda657ab51f9287f817c21c843b60ed26ebeae2a94e848d1e582a51903aa8ed95"): true, - common.HexToHash("0x3bb07cd66579989e3a4cb692ca4d1f00c53b728ed35550f7dd587e159e32e696"): true, - common.HexToHash("0xa42017b6553119a60901c0b03425f0157d1e83715ccfe2d230db48bd838d8670"): true, - common.HexToHash("0xb037c934a79f96574d2e15d552154d3431b4838e99c670794b1e37d71f385736"): true, - common.HexToHash("0x93bed2778fc7885291dd52de659a5e8a0c9c6b8f6d0daac9f0baa71d91a86af5"): true, - common.HexToHash("0x4846daa95be2fb1025b382903afdf67bef9734b47b8f8d083eb4e2611a7452c4"): true, - common.HexToHash("0xa8f660857df07be9f346c9a69fe1d27268e79ce56847620ae3bd24198d7e8222"): true, - common.HexToHash("0x5a11d62ecc71e9cc764e75ef31415ba1cafb9c5ebfbb14a5bc5bc3c5f188b288"): true, - common.HexToHash("0xd931dd4af02b533b23f6e9f712241e61cc7eab964ce4954777be84c802b3724f"): true, - common.HexToHash("0x0242a79393941c69210df482da365eeabb8343bb53935d908371a0a6452d25ed"): true, - common.HexToHash("0xc77dfcd110b622a973ad0ad3954bdfab37371abc816addf434c83bac26032406"): true, - common.HexToHash("0x4287b46a99e3bec14684e18efefd45fbbd28bf3e90e715fe9d389f08e18e3c7e"): true, - common.HexToHash("0x5123edf8b7f76f60fb541c97d3de25373a9dcf0e8f64b1d949e20e1247e3b052"): true, - common.HexToHash("0xd221abd482f6c63dc2f90357c22da28767a204d6e5b814d39170d2fef5006ac1"): true, - common.HexToHash("0x952fbdbff52a265dc28c2b35e449d7a559c5969bee16c471090c9cc134e6dffd"): true, - common.HexToHash("0xcde27c09b22ea859a20baea41461746dd09c9150ec078a51827f17c64dc3edf8"): true, - common.HexToHash("0x2c34d63e3d498deed65e0a474abd2c73796ba0b0fb8b51b0b31bc633272dc756"): true, - common.HexToHash("0xff1dbb4ecf6d7dc9f049daa25f43abfb114e2998bae3f1a81f1108c0009791cf"): true, - common.HexToHash("0xfac3efd74ed3f250b1e546f274ac6a41dbb31ce9bf0a253ba752b7131f99e816"): true, - common.HexToHash("0x022983ed7350621a3009fb0cf531224e85dc581ffb02a778c61b951101cc3b56"): true, - common.HexToHash("0x1b5832d8da96176484e811c26a32ff910067deb9e9313cfd448f3330ca662350"): true, - common.HexToHash("0x8871a3161c56adda03e0be1a44f245f962628bdc7cdafa959e493b5ba1b8c3ab"): true, - common.HexToHash("0xa92c6e7b8f550d0d82f1c20434ae8e137aebe0360defb5602ff4d47ceba7d8b7"): true, - common.HexToHash("0x7b20b960eae02f707cfa32581880459381061af600aa6e38e6aa35fcdae6b068"): true, - common.HexToHash("0xc6b5c36d04089dd870aa73509fc6edbe0b4af72893d9d36cfb9f29bc5a34080a"): true, - common.HexToHash("0xea853b01d8bd9d63987291a68dec0627b9d164cd4446e5b1fba1394a816a323b"): true, - common.HexToHash("0x964f8d80f4d4090b702d55805e6a9b5bf036d5cf3deaa42b80f13ba6f9d7cf8f"): true, - common.HexToHash("0xa542282f391418155303e724b486257763f8843b44227a6129c858aa08f1bfe1"): true, - common.HexToHash("0x1ed9947501572bf45d38b1332124413116298f17b2ec360befb955b6daeba73c"): true, - common.HexToHash("0x30f6c14efa856cdba459b3f8252450b1cd5025b314800d75a629ac9d824b5c48"): true, - common.HexToHash("0xd2189037a8ab31b7e3106fd733d523f8fcbfc6246fae407ad65b22550b8f62a0"): true, - common.HexToHash("0x35c776c73a53c212b3a06325779d7fd77cf95e454d927bce9b2d004381fec858"): true, - common.HexToHash("0x4122cf010141fc35e7db3b4af46c1724903a8397fe3ea8811d5a88bbedb9072d"): true, - common.HexToHash("0x7c3f7c22bf9bfa250d456470278051c84c8a6a1996ec8ee7d7cb331596cdda53"): true, - common.HexToHash("0x3f1c62b30619535724567c74f4f83161676aedced76dbec566930abd4348573d"): true, - common.HexToHash("0x1e957251ec7e61407c0abeb5d7f290179640b0ee2bf9c69551a08be907715f66"): true, - common.HexToHash("0xd0df9d084bd019ab0a98f18b245a172c5b803e380b886f6ef821e15a1d4102fd"): true, - common.HexToHash("0xbd4238d256d1c3dc760e34a720a105330fad06b8c051a117ae7b16a0adac8c58"): true, - common.HexToHash("0x4530ecf03e101da3c2a536da20d18ee820f220ce5ed1c3eb54ac0257c4f098cd"): true, - common.HexToHash("0x96509c35ebd51ebb32a387ec04549f6297b6c1d15d40689c9d7c10d593418992"): true, - common.HexToHash("0x304246e20a33d32fa6ca68962e98d160196a7ec9419f6060ca34da9c9087da1b"): true, - common.HexToHash("0x1ec304aa2b98dccf46bb2624d8288499dd4284cc9c17513896ba33b60b8ca206"): true, - common.HexToHash("0x99e32e536089f9c5def5a22d8b0d0411417a277526929b8a363e2532988c146e"): true, - common.HexToHash("0x35ced9db086dd3a05c2747724abdaf3e70e9fd288a07042635cb2433432c93c7"): true, - common.HexToHash("0xad9b361053bccafb604820e9b1f2707c4c77dcb77071116456edcfff5efa10c2"): true, - common.HexToHash("0x694b60af4be575b7969b10eed523b954fb2fd49dc0581a5db74b1b428bf49a35"): true, - common.HexToHash("0x47b1432f11e155669265ecc9d2b16e1121604632f15d062e790e9141900eb926"): true, - common.HexToHash("0x6c6f1ef21e422427d737c261adbb162c4d4b3d1467c55302c2751a14e38f391d"): true, - common.HexToHash("0x8ceecb00bba12f4f4bb4e4913e069652c9dab4fa693e81f42ed921860500305c"): true, - common.HexToHash("0x63f0421f9a30a54ea223e7cacd60053e54479d1eac54767cc70cba8deee8c77b"): true, - common.HexToHash("0xd6998651602f21500e4000722245547f911e7b8167e572edf2fb2297de25bb2f"): true, - common.HexToHash("0x7a91de10d8dce24ba7439e88dfa4928af2a770800eee1d200b4a436d4c85edbe"): true, - common.HexToHash("0x8c154059cba0c5a2de12d32f868783e67d3cf0b794e95b8ad624a510b1222335"): true, - common.HexToHash("0x336d9f4f5b21c5ae02a978f3cf992b41450ce815255b984e80a868186529da02"): true, - common.HexToHash("0x9a037446fe9f3273284ac7eab9d2551db776d19d857941ebe2532659ddf019e6"): true, - common.HexToHash("0x4260151dcc9120b113d2e38f9b0b30804237c744920b6146ec9e06cd5d46fc4f"): true, - common.HexToHash("0x90d4538246dca53f1594e4b76a8a676a68f69b77c445723eb51b8aa98cc3ba10"): true, - common.HexToHash("0x412fa8362cc7c6e8ab33b66be8f891adf7469f6d71bee152257b5a0e348c101a"): true, - common.HexToHash("0x1275438572918f872d1fcf8dd0113bb0a8c6de46ddafe17cf096aaa8bc3f6477"): true, - common.HexToHash("0x5f3f07c7d1884409369e466568310eeef04bb8c4c10b1aaa4cedf7f4aa35a83c"): true, - common.HexToHash("0xbb261f66e6333d27b891a7683bf26befc625b2855032f19de3a2de761e0d9ba8"): true, - common.HexToHash("0x6bf377a5f31a54b1251190ae9a498b7e3e325b106d76c935a8aa026d8702aa77"): true, - common.HexToHash("0xc457d03349a94f93b6b0bcf24dd74d056904b19d53a209a4aaeaad5185b53c32"): true, - common.HexToHash("0xefb27539840775b41a011d892e358c9e84e42012965f27e3c8d1d5ee6982365d"): true, - common.HexToHash("0xccb4e3a2095294c0df0ceea3f3a9c7618952935b2003ce82f1997c4dcd15b0ea"): true, - common.HexToHash("0x01557b0ae2c37579068263a2cf2b70b15be3aa814c93308cb510743d903123e7"): true, - common.HexToHash("0x9627a8cc1fcbabcc746779a75cd8a09cee78353038f0ed890d4688505b2e239f"): true, - common.HexToHash("0xe3f861e11138cf92ebbd418b6731767c64e757d474f99233fd6e0c77125263d9"): true, - common.HexToHash("0xb3e7623a31cb7ee8e7847134e92e853d2ecf0673608fa62018464bfdb2d2df67"): true, - common.HexToHash("0x457dded3f3800240473873aa646e20903e6fc2ac8da74f18d426aea5ebc654d0"): true, - common.HexToHash("0x8e0e3b345576950449545ef345b661afe02d7f8066f4792368b826a5501de2ed"): true, - common.HexToHash("0xe848844eca7acf4922e01b3ab9313ce70befc753cb9439cb6d19009f350d7245"): true, - common.HexToHash("0x048b6fddc3b36bde07408c0804ea7e2592c58563b59b59a711dda51a462ceab7"): true, - common.HexToHash("0x21baafb7bc2a72bed1e982251f1a937f4f3ae1fdc2160f2571b4c8dda60280b8"): true, - common.HexToHash("0x00d39ae4403c002bef4e31841910ded360623d5b6f76ec838215e7095d3aa001"): true, - common.HexToHash("0x4a7602f51712057cec6f097f41b19add01b1e1350639d8f763d90b749006c63e"): true, - common.HexToHash("0x855f495f32e6d37346f767e1f8bbc4e9112fa3a508a9e31319eb91cac0cdb899"): true, - common.HexToHash("0xde5f661d9d73d7055e18b9f98026b341d3e412db6af0f425b118bea62e8a4a28"): true, - common.HexToHash("0x255a0f8f7bc707d3efbf9dc3e5e67105e24d7b5de6fb0711777e77afc8c6e13c"): true, - common.HexToHash("0x675aed220dd66b85411afe1c2af62c2f2057b73ddfa96209dafef0319734da0b"): true, - common.HexToHash("0x4cf707dd5f9c365718d1823cbc1a893343ff216748cbac25a2cce1d4e6fdc766"): true, - common.HexToHash("0x7104af8e9431a62f570af29c4c2f5c64a42379cad408b6fe06a065e48848fc90"): true, - common.HexToHash("0xd2b56bc453c3ef187b76dc12c30f06fb93188008faa755f8512d2c32fcd186b4"): true, - common.HexToHash("0x2f17f208ab3ad3e0d8d18287869f9f60140cca9751bdf06e5ab30662511bcf0b"): true, - common.HexToHash("0x32ccbe12883eba01cde8c371602a78e4dff7b33d4fb4b4299bbc2e0ee94a8414"): true, - common.HexToHash("0x350ebf7977a80b6ddbbff343818c8fd34a94651e5dcb367e4dcdecdf1ef7cc32"): true, - common.HexToHash("0xaa84faa88f103930f11ca9f257a60b4ea3eb6ee4f2bda76819fd838643910b0d"): true, - common.HexToHash("0xe8ac1469cc4d77dd1824a805b07c4d995ad29f03d9f1a74ff4a929d0193ffddf"): true, - common.HexToHash("0x12e0b76058b08ad20538c3ec1e97c4f1c5155241bef20e8cd8f34a5c40f038f9"): true, - common.HexToHash("0xea607eadb3d3b7f30e6fcb62b67d6a99f040c5b0f95310a57363b16daad62262"): true, - common.HexToHash("0xffac8d9d87159c62a8ef26640aef7b89afb2c9d2f110479f60fbf6e71e4d65df"): true, - common.HexToHash("0x050570d14354f56cf7bde0e449fce34311d3b093565ea48929e928678395bab9"): true, - common.HexToHash("0x5af8264eaa7a41de1d9d1df8d81b5d1c85f5ce7bc9b5429bb76efa3f73e8ee67"): true, - common.HexToHash("0x399f90f8027ce6dcb8da9f9726e2def702f95f062be9a6671024718029976444"): true, - common.HexToHash("0x2f756af78ac3997b2bec8a7d22bdb458e3af4a169ac88524b1eb050880e05b0e"): true, - common.HexToHash("0x222c3cc7cd49d2bded88ef53f9752d021f3766687d0b9869974a91339a1fdb23"): true, - common.HexToHash("0x6a035ac00eb0ecfa0e35b3ecb3348f6b5bdb624764ae037f4208c3b7c37187b3"): true, - common.HexToHash("0x177ab4f09e06727de2bf27d1943c7d031355324836b9344748c7d97160206f15"): true, - common.HexToHash("0x42c340d2accdb95dabe153917ccfd9294f2bb99ae2ed24c377780cca27d4822a"): true, - common.HexToHash("0x4d5baf352e5a9f35a92b295371754373073f2f8d2cfa6a10c842ee00e787c0f2"): true, - common.HexToHash("0x5881d4874144f1df0cccb35a4203e7ab19eeba98604706618efdd6aad073b201"): true, - common.HexToHash("0xcabe29abc1a7fcec68f4338aa71ee4d07c24ed12bcbff949ac25c75e2c3ea7c3"): true, - common.HexToHash("0x4dc09800bad13cbc115a264863aa8a72aaddbb89b366e05aa0800c63d946578d"): true, - common.HexToHash("0xbc1df678a9ad0255691249bc499ac01b628d1a39953ca109540f1d174e3ccdba"): true, - common.HexToHash("0xf870c9419833b1a2916e96baf79384eb29d0f82c09e3bd2e27aa96ce7b0da601"): true, - common.HexToHash("0x0ac088bd182132e2494ee65e3f5753bb4c57aec44ddcd89068178bc6d3ef4d00"): true, - common.HexToHash("0x6a0987cc63d26f3004116b52dbc264e84e0f58080f4ff560d963bfb78ad592cc"): true, - common.HexToHash("0x550d3ee274cf0fbffba1b8ae4abf9e164c63bba42ec74985d6f577b00a91daee"): true, - common.HexToHash("0xc33f99b63094dde8ad5d33659daf0cad122be69487e83bffcfe587445b1c9472"): true, - common.HexToHash("0x58be4c8f3c37341309f0d408178e45e64129896dceedfc2dc3fe34948c398f10"): true, - common.HexToHash("0x7a799f6e5318e38248df754c4cf362bec4a411c7113f3115daf4993a67c5edbd"): true, - common.HexToHash("0x79c287e4af23fed58c53aa8b2180758fa74837b66fc8a3c03e4bcd1ff135b529"): true, - common.HexToHash("0xba2a2d7095cd3d6e80f7cd33a7e38177fc9a3adff3b0c1c01f88f22746ef204b"): true, - common.HexToHash("0x8f08405cd120f56571d8ab0740de369fc566318f756cd5670c7a8396c6464db3"): true, - common.HexToHash("0x3c28f247109036eb3f9fcff2f8c9959cc0ed881bfe3554e57a2d0d987dc07800"): true, - common.HexToHash("0x1306cbf4423d6bdf89ed8a7817c03ffc6cf5e13919c5fbf803f288da3d3e7925"): true, - common.HexToHash("0x3a910c9ae2321a3a9103cac7d9d19e04d234d4e758bca3c0ef928f47e6d15896"): true, - common.HexToHash("0xc1426406007cfd281eb5eca1e4875d0c4e28255763ae4a35ac04dcc021ed65ed"): true, - common.HexToHash("0xea1f030435b5aa37e746b232c020e9f9a603557d3ebf95fe1c99515d8d308033"): true, - common.HexToHash("0x2a6a9a3381a09599c232ff969774cd2b9b39a050e42ed68c419dc70f5941fb04"): true, - common.HexToHash("0xd1834a0fe16a195946e834319f76d4382100149166f225252b491a892d0ff59d"): true, - common.HexToHash("0x1e3760632869669c408b39c89c549e3f9e63a24d750cf3e2fcc720a8d220c219"): true, - common.HexToHash("0x288eb45f334a360ada3811dd776e7a46dbaf545c93f52d35a4caec81fbb0eb0f"): true, - common.HexToHash("0xd40d05b714fd8f6e16cb27e18745d2acb26700f8d75c852d219b4b987af5f45c"): true, - common.HexToHash("0x5560aa37e4678123eecd56d1f2098835fb3891a2cd6aab2ffe881cbb316db59e"): true, - common.HexToHash("0xb548151d7303a4f8a66e45a5c6f5a6be8d273a9a8a10e85c29dd892bda17ef76"): true, - common.HexToHash("0x973e09929330386e0a1bf5eabe903bc3e2f165b538eb1d61196787902de98ca1"): true, - common.HexToHash("0x7881dff9ab062fb9341e94291c3f66c141d8404922d41ab5dfa606402115e384"): true, - common.HexToHash("0xb855a070ed273a8c44e7b0118892ed4e2f8dc9b020150f3fb331f779bec2e741"): true, - common.HexToHash("0xa16af3e2f0e77f869bac8f3e5eaa17686612e150495d1571220479a5ea32cde5"): true, - common.HexToHash("0xb019045e448d13754563c20a2105a41991b1bf4c6f8778825c24736f436a8ff0"): true, - common.HexToHash("0xeb37bffa9c54578fdcf70740b039249bab9813bb808f9b979f25106ef34d7043"): true, - common.HexToHash("0xe4643e118e59f67171e0b8689616043e670a9acbf4b3e3e93d757ada7a1383b9"): true, - common.HexToHash("0x0b6e6abbfc60e5eb9f734d5b0a4f914434913af09b650974f3ecd3ba406fdddd"): true, - common.HexToHash("0x1557a22ad02b642fc7e942c63ec60130010b85783e9c936d8861b1cd35ad9261"): true, - common.HexToHash("0xc7a2542a5efa06f7d5475f94c9a251876e5e65acb8f13854644e8f03266b6c62"): true, - common.HexToHash("0x1a6cd45d326992ab9147335a24b822d913aee7f458a1154cb16a1a480f986390"): true, - common.HexToHash("0x0892bcb51dbfdff1bcae2243753a16edb219314d426086fa22267e7d3bcecb39"): true, - common.HexToHash("0x9928ffbab398139fceba6b43b25cec86b07a025bb177a9d770e92a22a4530f8d"): true, - common.HexToHash("0xa1728737fed245d991369b1a3f28d8db841b5d6600bf9476e7a2c8d774ce73e6"): true, - common.HexToHash("0xf117c577155a57ee6a909180c6c44f63b80e80504b0b6999a10af928c360ce82"): true, - common.HexToHash("0x8ae61ab75341dbbd4c63357d83cdb83e67aed3d9c35dc48a684aafd645b7373a"): true, - common.HexToHash("0x1fbfc44c633181852af2bfeddd16a020a452ef64df478cd56f18a12b51c55f73"): true, - common.HexToHash("0x9c139d3a16622ba994abd5958c9b6ea9352e03b8c00a881c61e75eb9f6e29451"): true, - common.HexToHash("0xfd2d35b9796f49d5aa490ad5210aa7a2cccabeb6d9a96eab0c5cf72144201d59"): true, - common.HexToHash("0x4ebc7b7c598b6fd37dbd14a1da92bb8506c8d88a315293c46f72cd2023df91a7"): true, - common.HexToHash("0x34e028fd72d269ea29131c6cd8ce0ff6d0af2c98f4af5595f0c2cf3a38da4fab"): true, - common.HexToHash("0x0c3bd31dc3d81a51b095b0cf29ecd96cdf97bf454007ab6c2e8c5a2ac62fb6cf"): true, - common.HexToHash("0x4aecb34a4ba83d842300983ed5f27439c7f27c4d17b1be109a1c14726e66e4f9"): true, - common.HexToHash("0xad66401c77e543577682fb96f749b1fd8f474c629312c4ca086a50249a937bef"): true, - common.HexToHash("0x9d192f69197611fe7b56f0f87911e38b72aeacd6b9af07bd29b59e61b351fcc0"): true, - common.HexToHash("0xe8113b46a94599da40391ee85f37adaddf8c301dfab20d5df0101bda95ee0e9c"): true, - common.HexToHash("0x15edb2e9ec759c6325c1c38e9587938f2731d7b58b81e0740a95a566271323b8"): true, - common.HexToHash("0xdd93f1c24e3000d123a846f6657ddc21ffaf13630344deecb7668382bd268465"): true, - common.HexToHash("0xab2e5df3cd65249401bf4686c5c43f80a4fb381ac09b5b0be2664a00dd979ad9"): true, - common.HexToHash("0x8cce7656412df17b59e02d6caf3eafcd619cb593c9ed5a1c240af99ce37fa4ce"): true, - common.HexToHash("0xb98806fb7cd6e8a5adb3365029973f8462db9419d7d64ebfe1fc74485b236c19"): true, - common.HexToHash("0xed6e2b0795b909370688241905765bff748407485d885a3f43fe02a22143e63c"): true, - common.HexToHash("0xa365c24cbe62fada35f807513ff5ce9315e7587182fed82c7835544aea23ca14"): true, - common.HexToHash("0xfe4777c9d392f93f03e3eda3b297a478254fed7a88e25193ac05f0e16163b6cf"): true, - common.HexToHash("0x5e666339b2d5c5928438df8ad1f12d85e3cbe6dc5da4b9cd5d7de85aab8d5d88"): true, - common.HexToHash("0xb20d6a343c823603216ecb8df0033d6f42be6e055ae15d2abb315585ba4790fc"): true, - common.HexToHash("0x22d4a813714d193bcd6ece99e2f3d8b1f5db8fa3a54b52b7a463c050e622cac3"): true, - common.HexToHash("0xd5b9c652167c2349b10740d5ba9f7e5095a427630473af6f42e68128fa142034"): true, - common.HexToHash("0x1b8037fcea856cbed93b6916da35b3d3589f4e1792399e9fc40091295dae5073"): true, - common.HexToHash("0x9eaeaf2448789f254a1392145097553a6236b75989de5ddc6262cd50bb91f2c0"): true, - common.HexToHash("0x60bbdc07af2e5c5f51f55bfde0594ec55d5bef74282155524813e22ef519f002"): true, - common.HexToHash("0x3b9adad1fcf45dc71f9f357539796dfa8715459ad247c5feeb6559f1ef717095"): true, - common.HexToHash("0x976a8b2995c947041f6be7bb08e50f864340fada4be02eff701b6f2cbe0c8037"): true, - common.HexToHash("0xd1a40a047915bbcced79e3c3e7af7de78246cce369241f70a2f17d6dcfd99b0b"): true, - common.HexToHash("0x2078c29b1d8183cf3799136c23b997a0e44a9e09f1dc5051ac695426ec810d8a"): true, - common.HexToHash("0x8bd1c98df81a2af507a23ae073b0ec0fadce072e1951273051dd03afd872758e"): true, - common.HexToHash("0xe329020a18057a8cf68aa3a4a8f2533f2f4a7e2c4bd2400044b933cc60280dd5"): true, - common.HexToHash("0xaee8abdd8871c481edfe4b77f604c2157d9488f29b128d31b7807cb678b04303"): true, - common.HexToHash("0x7d1fa7c5fe5c90f0e85756cb4f61af198cebb597d87870d75de17b9e357709b7"): true, - common.HexToHash("0x88622c0428ad3d9efbe28df3d21f4eb5bb893b475a827e056b6735b9f3937c17"): true, - common.HexToHash("0x7d56620a1c743c146d385ae7ea29b6dabc7b42ece6502357a0f3701c0a37c068"): true, - common.HexToHash("0xa5586d169f1cae588ebab0b41d5a655ce3ab265aeb15f8726d97b42751a0506a"): true, - common.HexToHash("0x9ad02381381d886ee7e0ee4c6945e45365b04e59cb42c77f89875e1359d81e40"): true, - common.HexToHash("0x30468631f00f39e9363286c77d284197074f30e7ec7d3dedf5c6c750004ae8cd"): true, - common.HexToHash("0x63dd76525456ef4fd1a15cfd61f9a0f038aeff24765006a3be3c44775381afbf"): true, - common.HexToHash("0x99a0f2af744228016c531ef2ea36fd813ec07c57c512c08c59776bb8e9e07a81"): true, - common.HexToHash("0x494ada7d831331c71a7eefd59ae7cff9fa8e2487ad6d679cff231368339a3c55"): true, - common.HexToHash("0x19fdff97ca257471afcf1180ece7793dd053b6d11db50407edd8f2da6cac39e6"): true, - common.HexToHash("0x633023e7c17b4404bd0e8585f7a1ea899ab70eba8c0acd4ff32e30ebf7b8a115"): true, - common.HexToHash("0xc9e31484f1a1170df05eb2b71dcf110c46cdf2f91a104fc9021c5bf5d0e85dfd"): true, - common.HexToHash("0xe25dc38fa7a7a365a19db47bbf97ae7e71b91f58df397d09fa3a5a138381d91a"): true, - common.HexToHash("0x802605f4da19ee8dc2b812273b4f3b41ba3799c578527f89f8a314fbbc4ec724"): true, - common.HexToHash("0x2c60b16d4c036b7aee3d17d851493c1682569a99942aa8a252d48a4e3dab539a"): true, - common.HexToHash("0x914c7b180c996df3b7b96f495f5decc9bd2793ec492a385121a7dcbde7678ce2"): true, - common.HexToHash("0x8367a3b9243b75c4100cd7d66dc19014729a80a338429b97d4ad2efdf60f2e09"): true, - common.HexToHash("0x9b388e88deaed0b1b30c1c387b3861f95febd629193569516b56d9a40b0df6e9"): true, - common.HexToHash("0xc9f886e8ced76f7b3d89c676e346e7fd0cc6ddd2b66b74e0d0bdce47a175cc17"): true, - common.HexToHash("0x636cdb15139be6fabacb881c77a55c146d477d74971a97cbf9c88f7808969a18"): true, - common.HexToHash("0x323e1c538f1df202c2928f9e9279b7733e2b5e18ecd5c49d5aca53fb0241dbdd"): true, - common.HexToHash("0x67ea149edaed68d38176a496f84d8fcb014eaebaa2a9af300d3c02d74352ea20"): true, - common.HexToHash("0xd6bce857bb24d4efb51c2d78b7249a0dd5801d08db275a1a14ae44a76eaf0c37"): true, - common.HexToHash("0x72bb5a6693eba95a57fbec528cadfd5570d07772ee5c3abc3f5f9a21339722b9"): true, - common.HexToHash("0x6fbee03468f144e98ffd07d9af4eccfe517a16f07e384a54f0b5e8fe97c6c3d3"): true, - common.HexToHash("0x0cb66a89736996888280d5860b1f62fbc133b1cf7501e14675109e733111e2ca"): true, - common.HexToHash("0xd97025b4efe6e0607b038d7176e02929bff2db9e66bb58390e607911638c5a54"): true, - common.HexToHash("0x227fd9f5f2c814e033e7380205761d2470a384ca36faf4c4da8a11d75b22c070"): true, - common.HexToHash("0x8e017065ad8b4ae2a25a7a88943113aaea8b2dff9257f89c8ed2035ebb149858"): true, - common.HexToHash("0x8fb2770c9470a529a263cb1055dd174c208245976de48e0431a8748732239e2e"): true, - common.HexToHash("0x2cd3a002d1c33df5b6eb8833f6c2c294805b961f44aa6a9868e1300b9caef0ab"): true, - common.HexToHash("0xaf13fb49eeaa06a9154df6992ec7c0c7114838858801fe9f8b4edc1cf406e422"): true, - common.HexToHash("0xfdbf5c8f17a258d44cea13ad6cd4d9239057d7eda3af9b3d4e95fd22a7562aab"): true, - common.HexToHash("0xe0b6df5e22e6d263c64287ec5e4b64d3d61fae0c860800d0f72ce055d9773921"): true, - common.HexToHash("0x98dd8ce9df13dd763b493a748359cef821b6e50daded2181ba14abab998b80da"): true, - common.HexToHash("0x5ef79687d0565fd72f32a7bf0f311cfe026bf5a6ef0e3aad500c7e80f6da8b87"): true, - common.HexToHash("0x28ed9df1a4decdf0475fe2343a558d4e015f9c4efe9839c440fd03f6b9c7ee9b"): true, - common.HexToHash("0x019e43152b04ea999e0f85c7618d431cdf6cc9d1ecf8dc71c89c20fa3c78d3c9"): true, - common.HexToHash("0xbb66e2a2554188bdbed5ffe5fcff58e0678ff73164bd71e2f75ff865ff64262e"): true, - common.HexToHash("0x01d690583e3de2f59e1c75dc6136d3cbe7d6677b4d274ff31aa20f0fd6fa62b6"): true, - common.HexToHash("0xd76fcd1cf4fc95325eb1b6b86bd4f2c74ef2c2f384923b1ee2f1c507542e37b4"): true, - common.HexToHash("0x0b376c294c6992d104af00dd93309eca05e058c341197f7ff3c256e1923e59c4"): true, - common.HexToHash("0xe58e2cdd68e2881a23f1c84b19b300f61e38091dd99c034c9dd2d400526fc25a"): true, - common.HexToHash("0xe74c14994fa2581c9bbb17c586481e17690a4259fbb2425a7b8409ef717b369e"): true, - common.HexToHash("0x1f2b97b1f27e7e3aa809e86f996b6b6227da5bb50ceee0315e393eb913f6a9d9"): true, - common.HexToHash("0x09554dbc65d50a120d95384cd04665cf85ecf2909d7d4ce9abdb3dfea3d6409c"): true, - common.HexToHash("0x6e3f357ccb062373de43a266d0cddf290414ee7edaf90e6bfcc1613dcaf28272"): true, - common.HexToHash("0x845e11c597d474e8ed77e105bcc4c250662ac53adc47389cf8b5912d6e72e695"): true, - common.HexToHash("0x2898f62845aa2abe6af16df17e2e065d77f09b23854361b7628b9a2a02b67bdc"): true, - common.HexToHash("0x76d63eba9de8ef572a42849408168fe7dac41241503e511c5cbd258abf6343ed"): true, - common.HexToHash("0x18443599f26a066bed3f10d8b779385c2d38cb47e6071d578189f7bb41464cdb"): true, - common.HexToHash("0x19edefa786ed9f1bd4cb6c2c02dc3a23939bbe79c0d891bdd5249dae43626273"): true, - common.HexToHash("0xb1cc159bdab2e5df2d2e8e9851327cb4e134866de20ab6acdb5af9586996ea95"): true, - common.HexToHash("0xd9353122f91e8a85aae3d946316385bc2b352838e4ecfc1fc8ecdb4cbc7e06a2"): true, - common.HexToHash("0xa0de135251ff4de5d1feaf1bc88fde0d69dc992bfc5e926b4a3010ade3774add"): true, - common.HexToHash("0x535bb236a12768612403bb0ccc0f5633aba18ee00c698906e1480bf90b1c101c"): true, - common.HexToHash("0xbbb6a75f6d96e2155f6037b49441511b2e6cd2be905c297ac9694dc949ea56d5"): true, - common.HexToHash("0x06a75cb47c7de6a464424582e55163727a6985c5d7129170630e984362a096c7"): true, - common.HexToHash("0x5962dd40b1b038b208745dc9fc8d77859cb12b7249f5500c90bace2c81eeed18"): true, - common.HexToHash("0xd4b090bf741a3ddb8b9947b1297d33132498fac93431b25d0ae48b75fe47159b"): true, - common.HexToHash("0x29732e7b55aff9564a5e027da8ef64e4cbae975d6c74964416570a8bf03a2e69"): true, - common.HexToHash("0x6c1b67338f8a6c29629a3042b0292abb51ffa5f507484271ac8b9bc2b4973e1c"): true, - common.HexToHash("0xa46a5609faa9c857aefd1daad3efedd44dbe9a3d75abe3daaec286db1cd904f1"): true, - common.HexToHash("0xe18fd9f4a11afdddc4dd943d238e39c4a65e0981192be8e516d7770885038605"): true, - common.HexToHash("0xfe7417b36e55b6106944ab60e9cb2f6874854600f4a3f14de771ae499e33123f"): true, - common.HexToHash("0xcb9ddd1a47c778aec18a4e55cd6b2445c839eda3a65b9a7599ed692a891a10eb"): true, - common.HexToHash("0x1cc001e25622b992d5b44b872f8fe72d8040dd3db520909a2a52c9ed1a75f784"): true, - common.HexToHash("0x83d331ab3a3e59ade0ed07a99c6c38b0ef57aecb775097289c0e1ab1466c40dd"): true, - common.HexToHash("0x1288be02d3be0235b2e43135e5c572c8ed25c2188244851e994501274acc56ed"): true, - common.HexToHash("0x18a6141426bc89d482669fe6d8fcec1882a208ecb735ea0da221e7bfbfef7193"): true, - common.HexToHash("0x90c1306a4f31999bf63e031551ff5dca6a5de19301e1ced1ea828930e411b35c"): true, - common.HexToHash("0x2f9a53db7787372edd8625643ede618de71e9cb7ed2629339ebdd4f2d7f4e95d"): true, - common.HexToHash("0xe756dbb5e3c59762930013f46d57ded35e7ad85745ec11cb8f1e726789d471cc"): true, - common.HexToHash("0xd1f29676cbe907ebe1f4645a6d9cfa429465797b7a42f5eed393e5b2af3154ab"): true, - common.HexToHash("0xa75872271fb9018bfd4dd42a6caf682e5cb9777e62a244bef39f0665d5ab49f8"): true, - common.HexToHash("0x069c328a84cea9ccedea5893c782097c6dbab4ab24efd3951c2337ec6a12a3a5"): true, - common.HexToHash("0xfcc1c1c8f3b2ac8ce1608a3821e95e082279d176c48f436fb3a687ed250bd979"): true, - common.HexToHash("0x450d6dac79bf89cbd9ac2b18c18d1759409e19cd0a2b6d4a5cc6e7068b2a0a4f"): true, - common.HexToHash("0xa561493b737141e90a45c01b9d78256a5740e9f5d0645b615ab265af137e5dee"): true, - common.HexToHash("0x92663b79b6e533d755ea0d80c0c25e8c1af44be79f0e6ea3dd71ab6fa1c0cc15"): true, - common.HexToHash("0x30419c470f07cea782ef2a94c14e8dcf220d799c23d17c84bd001ad1c7bc36f7"): true, - common.HexToHash("0xdb41b50dc770097f3e7fd14a627477a4ecd31ea27298f2cd6a15ea5ce7299fa2"): true, - common.HexToHash("0x4fcf896baa2dd9f4ecf62e66e6552342cac354d6000581301b96e9d65986f90e"): true, - common.HexToHash("0xbe4695308b8859b14a55ec534f3e9f57cf998b37df8b66a5baebba4c396379a7"): true, - common.HexToHash("0x91c554b5460faddb1da01340142dea1ea777e180340d87c528a685a447ad2377"): true, - common.HexToHash("0xe133808315686de252cf3cbf1581a8f879d5061a4b6442d9162b3131f662f0e7"): true, - common.HexToHash("0x4c343fe1cf3f17d73bf80c52a20f71039dd9182a80c5acb148863a9d12965eff"): true, - common.HexToHash("0x79491621f33374e656220dda9fd18f02a5de1d160f65918e973e7f5cf9c09458"): true, - common.HexToHash("0xafa8a1401a7d49202101e51cafd0373b07522ca4f3ec4f4b56ced1f395bf7beb"): true, - common.HexToHash("0x27c764a0c8acf69c9ea8432821963f73a4c693fc4fcfb93b9699a5b227cc33dd"): true, - common.HexToHash("0xbbf59d28731f20e87b61608ad3b7198bc38fdfea2624afd411db1946aec5d4a6"): true, - common.HexToHash("0x608d2061e0938b06b57c1ff98dea0f00a581efded407aa715792795a49a438e5"): true, - common.HexToHash("0x60d8f3b8215c8948d84d3d38027aca506fa93ededa61b8683253b3bb8735e6e7"): true, - common.HexToHash("0x4696ce1663a72c75fd1bb7dfc4b0becd5fd847914d743e3669c4ab0b51835ff1"): true, - common.HexToHash("0x892e740076824515c87255319806f80887d0220109f52ae4741862dabe6cd0d8"): true, - common.HexToHash("0x136b9a5be2bcc12ddc0c8c8ddb7cec9374149d09b8a0d90078f572f8089bcddf"): true, - common.HexToHash("0xd7445b982559e92f9aef8b685d1c72eb1dd2a0cc292d68910a4807f9d518ff4e"): true, - common.HexToHash("0x7c8f0e685040671678018b5071b266852a320f2e6cab82cf7757cb1e1ec387ac"): true, - common.HexToHash("0x7f7a798a922dc9d066ac7082cb7d315aa9bda8b908684a1a0387c2368e7703d7"): true, - common.HexToHash("0x28be9908cc38e201b0006b69d0fc41bd0fdac3d7d0af943629bdbcb5e75d1a7d"): true, - common.HexToHash("0x9901697e7fdd24129a512d68bc5dd02e4e1dfe7607626ee2c3599bc89e3fdb85"): true, - common.HexToHash("0xc38327a68d06c66af2a67b45c73e410fc13c681fbdd3534f192c70c6560c6595"): true, - common.HexToHash("0xb2c3c05f96a03d29902da201c1f074184d1ae31b51963c4e38850a5ad9119f4b"): true, - common.HexToHash("0x597a2c19cff082aaa79f3e199afdcb25a0a879a86d43189f05f42fb1cd999992"): true, - common.HexToHash("0x0ffe5bcdd20730b448a546020870529b309cdda7cf7632fb421c9f21384ca471"): true, - common.HexToHash("0x290d8d9784f9c93200d72279e24b48eb6095167d25ce231bf7f457e21cd02724"): true, - common.HexToHash("0x6fce4223af87998a9144c3f7786c6b9172848af4295e81845676cb7f20446ee7"): true, - common.HexToHash("0xb334ad3c659cdd18d3bcf4cd9f800645b05e574f7bd3dea9efb18ed5526e8141"): true, - common.HexToHash("0x5bc33256358a447daa226c032077aa0b4c691f4a3c1b66cc0d5900406e79ad2e"): true, - common.HexToHash("0xe6256b9f6e06fd89057850a95804fafc407f8607d67f25be7062a3009091a335"): true, - common.HexToHash("0xf92950e5b00d6a9c9d73d6a86d62612a62a5a1c3575785eec960e3ad1f2db968"): true, - common.HexToHash("0x3bb168efcd48038f527009c027e6cdd451290c0a7fa3a6a3b1a8ebd4d3b97c4b"): true, - common.HexToHash("0xa57aa63522a26978552e654b2b75aad510d729ddf51145fd48d4556db3b7faf8"): true, - common.HexToHash("0xede38e42dd0305f0df1abede704d3c6b3c46de2924f94fd0f4b5da5b85331105"): true, - common.HexToHash("0x97fc883fd0bc519f11911e861c7789c30923cc703bb6f4e0d4faec71d58d3b65"): true, - common.HexToHash("0x93a45c51f19f3cebac8f2ed892602ffa80956ab932ca422d09a76f6f9f9e178e"): true, - common.HexToHash("0xda7f4fd106a848593f60c1fe4e149dee59c9f972071cead3773cfc338ae8155c"): true, - common.HexToHash("0x4d5d119aeef305221e2cfc5f8c27c787fcea4c9b4c17987cf258aabd03356adc"): true, - common.HexToHash("0x1e41bd12c4cf5b91fcb3ebbe9ab374c985ea9e7e8b022bcdf12614e7a0d619bd"): true, - common.HexToHash("0xaa5920dcc4ddce4fc4c2284d70352a42e707eda624cd83c61f2896e8c6ee73b1"): true, - common.HexToHash("0xf7b6386f31169fe846808732217f66077d8c497d333791bbb3a80c2a6ee0fcb5"): true, - common.HexToHash("0x02ca198de2843119a1832a7befd2109e94ff794bef94c5c2ec1841426e02e89f"): true, - common.HexToHash("0xa9d0ed56b49da83dbd3734f9fbd55666c46e2d1ab7478b4fa7fdc87370b3825d"): true, - common.HexToHash("0x768d69667fd4c683ff25b805aa6da22f9f1d3cbf52df15655d44eaa0ce04b7f8"): true, - common.HexToHash("0xcc7a6fe20739950f1efbd77295d08e0d009dc08503f498e44729c556d009ca66"): true, - common.HexToHash("0x06aef0a77ed72ec956546ae67741c21bed08fc78295bca1388a5b6f9eb6ec209"): true, - common.HexToHash("0x0526b56a9fd566a6a38aea4df8ab247e537e88675237ea5859c3f42d4f991122"): true, - common.HexToHash("0xfa316ca1cdcc82088f6d7d5a2532b8c12336a8d89373d34f95bacec4acf28597"): true, - common.HexToHash("0x6de109e61eeab09153a2c4792f4148790d18da0c74446f56d4719b224620b90b"): true, - common.HexToHash("0x71076413384858e4c25e8eaf79e68d5b9e4ed1ce8e3ff5f90e69ddb9425613ed"): true, - common.HexToHash("0x3762545899c470ada2668c9b159ee92a544955b0532f6c8f8e0b82844735e191"): true, - common.HexToHash("0x93f3dfdb12733bbb11ea5264aeeb2d4c8339a0d777eca217c260c97c8c601ce8"): true, - common.HexToHash("0x2a2f1766c0dcf976a1ba5c6d0f8b5bc2e56b1f65e4e9da621b3cc1d3adb12b3d"): true, - common.HexToHash("0x85fd5fcdcdcfd51f2801cf782809942d90a344bc801e378b3b37dd601f097c7b"): true, - common.HexToHash("0x23d0c4b3d9e581507c1cd5d34c7e51ab05b458f0a9fffffa31d57da0a3d305db"): true, - common.HexToHash("0xd5741ce19a99675d156d60ae914f64789fbe4694b39b67a3ffeadb3d34435a70"): true, - common.HexToHash("0x39e9096c984eaa91a2f592c238c9072f5d1907d970689b5ec3e2559b4f44728a"): true, - common.HexToHash("0x42fe934bed9217b21b99e9e251437fd5dcb7d6f76fa070edd6bd47f1d324d842"): true, - common.HexToHash("0xc8e05bc0553ebe45346ab8f3619284dc80cdc4814b655638ba53b6051f237439"): true, - common.HexToHash("0x8417e5aa5ff12f366e9397dadeb029c5df2da33eeb8e925143127396ca41cf6b"): true, - common.HexToHash("0xe3570cf54410e4a0f10efb07cbdc170c1ad3f72e861bdafae5041d9b06661df0"): true, - common.HexToHash("0xf6e3edd89abbce995fccdce4d985817bd4c11f3a1c3a978604339cde5219d29c"): true, - common.HexToHash("0x6ab664ed3be6ac229ddd5dd59ca9ffb530a6bc49e8f43d49bc1ad0521f6495e8"): true, - common.HexToHash("0x1ecf718533328db45123719dd29acfbcd38d91746f7fae2e5a50f5d073482653"): true, - common.HexToHash("0xe40cf2eaa819d618629e51e77c794e932e4f65403711ff65a00029f3801b5eb7"): true, - common.HexToHash("0x35e25cb589caeb18cb7f0bb706145d273672b8b2cb6776e265292ba1974310f9"): true, - common.HexToHash("0xeabd282284dba45c4765a6d80e5dcb81d05a8221b819f4561b6e86cd6d08a624"): true, - common.HexToHash("0xfb28619b924789550afac132c872934c47fbb5a65a038aaadc0e16fb9df9b94e"): true, - common.HexToHash("0xb682055f4040534137729631de137634fa33dafef8aed7fd3872f89ca9aa815c"): true, - common.HexToHash("0xaa7d944e9e4144cfe0cc9a8ecd25f12a38544ca80074e6bbacacb52a16440ae1"): true, - common.HexToHash("0x7495476f8e83ab3759ce2e644dfe87769de3ac147e340338053a10480c691131"): true, - common.HexToHash("0xa3bb4a3e08bd56030d3faf5aaf91fbcb0a01ad6ed8e22fb08ce901da444f1b1a"): true, - common.HexToHash("0xb11397b2983bbefb1aec59b21bf31d312d774c0739b727d45d72eff5789b8818"): true, - common.HexToHash("0x3147779a3a7af04f666281630f63506bf5120ca91bcdfae5dc1ff4eb43653ab7"): true, - common.HexToHash("0x2aeb3c39013b2e81a07414d06b7a99bf1d7430a5865f09ac7b7ee3a6692685f2"): true, - common.HexToHash("0x8e96fbfb8984f4e8099c88b1be9635625eb87f54d2bbea2649cd3f566988cbc3"): true, - common.HexToHash("0xc336634f8a7ce9049c27b2f96cc064202413dcb06d4602b444ea5ce41042b40d"): true, - common.HexToHash("0xdd2e54e00d1c1acb9e80040a050bb98e41a264343a8220565af80c273f038257"): true, - common.HexToHash("0xa30554611c9a285072f5dc83bcee47afd303538e26940d719cfcbad7962ec939"): true, - common.HexToHash("0x4c98464b498fa91b69e86d03a6f787d62e21e77a54be8a0ba06d1b30e92edaf0"): true, - common.HexToHash("0xf698e7de5c705aa9081259c0a46d269675344bd29385539bb77e7822207c184d"): true, - common.HexToHash("0x95e3c7d5b84b757cd6e591a0f2026a8d0365dcc3f9bbd0d0ba38c8f1bac833b4"): true, - common.HexToHash("0x9ea4f7590afa6c3fb239ff0346451a674c43428cf72826ec2b94c3e3419915c5"): true, - common.HexToHash("0xa71c6c5daf24bbfad5f772f39b601cca23ca8ae909df311457a1231256817193"): true, - common.HexToHash("0xbf5d8d5d09115b63760db24a7e201e93b94981a4ab9deba1018f27ca87819d4e"): true, - common.HexToHash("0x785be52c79100a918f881298adb335a02a2f494ad9e2dd0c28da2701a22bc058"): true, - common.HexToHash("0xaf8d5e5b8b16d790c79d1b1bc3e1b1934c3c38439f20a516846ad75946df6b20"): true, - common.HexToHash("0xccd2e83fdabba5f4812c68516ea1c767635d604102fe978b31241fd2f6123df8"): true, - common.HexToHash("0x61f7652b169402c8399b6ec62e54caef2dafe88427325d4d2f4a8bc1d4be50f6"): true, - common.HexToHash("0xba62d4ee4fd5e1ed0c630040db8f1a4979e98de156dbff49a1d9e9a285f37422"): true, - common.HexToHash("0xf9c36174b33856b1da2a50a43a2624c55672c999d78e8a00268bdcd34eacb9a7"): true, - common.HexToHash("0xd307cddafbbcfd8d140b95e1cdef0d4735609e723d1b8aa7cc792dfd77b01f55"): true, - common.HexToHash("0xa9238d1d12a0eb059445ecefe73d33b32b1b6749664c5bd748ac08fafbc3695f"): true, - common.HexToHash("0x850204c9336707fb6e21f7bbcdf1c76fdb8d88ca0a90243650707c81659dd889"): true, - common.HexToHash("0xbf6e2361afade5790528f74a22b2a61238b8b4efe44593877e785423d161be09"): true, - common.HexToHash("0x72f96c828db323e88651ff3d48ec30d3f88c0721555cf9c92a9ce0da364e2b31"): true, - common.HexToHash("0x39877e371be1adef25acebfc2155af9a8f41fa50bf0e468bb98068d7cc22d622"): true, - common.HexToHash("0x852dc0f5380f9b5ac012336a309ca8aedbd443f72e5716bfb75cf002dbd64b80"): true, - common.HexToHash("0xdd4bf50083d311bab8cd37aa1993fe546f2a5077349d3157b4f2e401bf55aec9"): true, - common.HexToHash("0x21b4edcb4ce3c144de5497c6325f72b5b3efc71ed131ed477d40f6ae7c91aa1e"): true, - common.HexToHash("0x412fc86f4d67567788c7fdc8a84f31f07854566a39e9df66a24d04047ccb08a3"): true, - common.HexToHash("0xcd37f3c1518caa7f23abd4a1ea2a2e9988471dc4183a62535c2596af7a5f562e"): true, - common.HexToHash("0x24ceea4254063c40281c876367e3d34233428b30a2414c39e89d018441b7e617"): true, - common.HexToHash("0x0a062af44e845d230def9c9ae8b3ca9568e99a34f52440b1a3433c92a1ba1ed6"): true, - common.HexToHash("0x4a5e9819bfa910e6ac79a76392f75fc49dd72f362c616a4fa430c78ad7dd2210"): true, - common.HexToHash("0x21159527533e7c9c530d529ba12b14ca685f8a91bdbff3ee24bb61adde0c7c9a"): true, - common.HexToHash("0x799b9f0dbf0d9aaa7b8a0f93ce3b4ff756fd4bd934171397685d0e8b16a5f1d5"): true, - common.HexToHash("0xdfdccb2c56cea754cd893388909258c517483480b71c23aaad3537f4664973eb"): true, - common.HexToHash("0x53e5f6dc2e5fd5a2b66d19a7f883ef2cea90c731a13ccafc10960dd7ff2e02ec"): true, - common.HexToHash("0x4ea607fbeaeb35a6a606b5b5ec55e84c7d1e7c43d7837e149596a9644db45f4d"): true, - common.HexToHash("0x0de4196aaad81aae400fbdf1005fc3173a65904890f9e31659e51b896f9c8581"): true, - common.HexToHash("0xe826ce0e37fb4aaa72adb54782cc22fde9af5ab757d5a5d6a73f6e40a3a3c8df"): true, - common.HexToHash("0x768d69b49110cd14c06912c2d4d2101d4278b3c901978631519f704810be40cd"): true, - common.HexToHash("0xb4f3613ce792473fab44ad51b6ce9768e6ec6f5ab6970d3a0695f8130a11b5f1"): true, - common.HexToHash("0xa9407aa0059957f0e6f4368c83bdb59522abfb3d54a8554b6d3266c728ccb8e7"): true, - common.HexToHash("0x7253c380282a01a3dbcd96076b82bd7a7716c7b62f1ed04caca2da316cf407b3"): true, - common.HexToHash("0x1c8fe520359f185ec3c96a533d8319abd1f17ea495725da87b27aa612a6c0d78"): true, - common.HexToHash("0x75de2f8ee3f79da53f3f548033f2110870ba543922997d3059b5a313a20b1a8c"): true, - common.HexToHash("0x5c0779ecd7b4eba7a4eb7778d7baea47348e691dec8ef812abc53585677fac64"): true, - common.HexToHash("0x33d1aca9fa9920d18bdbf4dcd46d87754828760ce02c2e551aa474ac6de8683d"): true, - common.HexToHash("0xe2d4c92dbe7399fddd9a38b040c72f654a3111757fb19a7e17c4e45678bd25fb"): true, - common.HexToHash("0xdcda175d430f409ed7a36afe36a301ce1c1dda92e90f17e012cda47741abb755"): true, - common.HexToHash("0xdddbfe4fcb9deb48cc6f6b3f708e09b5baf871427754b57894cdd3301ea3a526"): true, - common.HexToHash("0x142ab313f6769eacce2d8ab7818f7e7e515316dd9321da506377ba41d38687a8"): true, - common.HexToHash("0xd20d4d5def362883e8da90769ebed8c827d75e637e937f75eff3deb42fa31827"): true, - common.HexToHash("0x1db084c93818b3c3fa550ae35f7f3615a52a04cea1a0c5825150b889f3a65d59"): true, - common.HexToHash("0xef5022d37b3452b8dce1e3e47abd9917eb422d3fad9b86270bb9477460b88ff1"): true, - common.HexToHash("0xd65afdc0ef590a94d1484ac0526b2a9406bfa72a7a4b25207fd09efbbc072249"): true, - common.HexToHash("0x5b7950f5138dc09e4e684035ac61716d67475b9d0fbfe3c40e8d14f4675183c3"): true, - common.HexToHash("0xf4175059557e3ee97c9aebcde047b7d36f1cfa7629fc59694db54b98d76c635d"): true, - common.HexToHash("0x882711d3430b11dfeb4d3452d6c4298ac7a93105737ae16953714df3d2e76cf5"): true, - common.HexToHash("0x7767045c16eb4a8995ec494a7a2928133c73ef329dbcdda45fa4c6c639c03885"): true, - common.HexToHash("0x08d775f66d12345f90ea0a6f7747799c9beb3faf9ee376ccf59e6ebfc6dec7cf"): true, - common.HexToHash("0x52e2378cd772346b5b6c1a31ebaac17ebe36a4023ab31fb8f31b83a275f5460b"): true, - common.HexToHash("0xbbc4aa56f6838b865ffd813f450adfcc15626dfe4b7317be1b984db77ef9d806"): true, - common.HexToHash("0xb2f19755de4d2ba1d420d30475d683311a42ab0dcde94f111f33f3360075d13b"): true, - common.HexToHash("0x49a23477b597f6986934b1a08fc00e3702893220a2f6f4de136804f71f26356a"): true, - common.HexToHash("0xc7cdd6b59cde8472351ddb218688d2e49010e0a92a58943ff4eb5a976e159287"): true, - common.HexToHash("0x0088848af3c3d2ef987ac1c2bbea51479637290b592e48bc7b2957834f4b2f40"): true, - common.HexToHash("0xf0e5deb476b9ec5b7c5237fda7719fabf905716f85ddb2fdaf91ad2ded020b41"): true, - common.HexToHash("0xc1b0882ef612834fb240c9183bb6ec706fc12388126c50f73765501c7f223076"): true, - common.HexToHash("0x688d3073fe62fba51dae7706c9d100d2968f05a4f503f643f0b833905e683364"): true, - common.HexToHash("0x08345d0c4fae7b3f15509cf21bf30d8ab76051b4c843f5d7007b211929677aa1"): true, - common.HexToHash("0x0aac3e0e4261e3afa9b215337ba47e65f2f801a824027fbac0f5299ac4a21a1a"): true, - common.HexToHash("0xcf1ff92bace91a6171432263b432e2b69af9bea4fb8355c9612d52311cd3b86b"): true, - common.HexToHash("0xea9ec03b2f11ecef251c6ce5a6bb4e534cff436f466e0f29ea9cb410285b845b"): true, - common.HexToHash("0xad3290cf1485e511c7c6e39d9bdc5f52a6de01d3a5ebac3e159ab973778892c2"): true, - common.HexToHash("0x6aec64fd7bba4f4693ef572d960edce0adef0fb82b5949fdbb2ca5f9ffd372cd"): true, - common.HexToHash("0x1cd8fb4c0cf2fdf17efbdc515c3c3c138032908566eb892c8404a4a8f18b56c3"): true, - common.HexToHash("0x55bbf2c507f45883869c44591d1bff8053711d604700e7621d4c18989fd11a4e"): true, - common.HexToHash("0x4eba59d7079fa117e0ea9a9af5533680f05b0c90257a6c98ef83e18b730d49dd"): true, - common.HexToHash("0x5efbd5f39a26e7c8b6f3965b1865c72ec5fda918f9e2b8c2bf760d3dd3dd023d"): true, - common.HexToHash("0xff9e339aef06dde546aeb49f5adc335b677a6c860ebb492df853aa95aefcf70d"): true, - common.HexToHash("0xa33691dabcffc719794581aacb7897e3f5a4b034c60ac1a67870f5e144a1b482"): true, - common.HexToHash("0xa15f00d968ebf5aff6f054b55dcbe43f671002abef7734a7d57a1bb3ddae8ba8"): true, - common.HexToHash("0x8c2422c44a65e95196a0d28a2b4e057a53fc36d5ede9e1947821b4a92fa4a1e5"): true, - common.HexToHash("0x8c52a15bce2da506727267b759f5f8d6a3323ccbc7dfd37f05ed774595c84c9d"): true, - common.HexToHash("0xc5739c8943bba977e21fdbbfdee1012c682839d9fc05812916d4be9f098a0df8"): true, - common.HexToHash("0xf92531220c23ffaf1669bfcba6ff2899f928d9e2697c175b45b578dd91425da8"): true, - common.HexToHash("0xab8b0f44644ec1e2ffeb31c2cfd640db752fb5b6efe1c281e4a46458ecafc3c6"): true, - common.HexToHash("0xce69efd2a1db8295d387ea45979411ca2da3e4822c1df558e1d9410c045f884f"): true, - common.HexToHash("0x3d5f0a8e897e28e879056cc684935cb1dbb773460ddfe547b921d56fc7e503b8"): true, - common.HexToHash("0x95a21cee98240ac5139866a0a4e481069fc6555d914a4ca9d9eca7b43e5d81d1"): true, - common.HexToHash("0x6a25619a8b11b13367864ee0545f1d42439e4abbc80baa8dfe81276ca78490ab"): true, - common.HexToHash("0xedd42414d5da5ec4b2b40ba5b3d3b44af79de6414d2c64deb0d26d9f2b021d6e"): true, - common.HexToHash("0xff8733984166c70c8e6bc78b3e3eb52e6f484b359fd1dc884a80093ef900a59f"): true, - common.HexToHash("0xf3bd2b83a75319f74f25ddb111854877eec606199081ec17a28db541775353c8"): true, - common.HexToHash("0x81a17623f9b2ef39d1d8ed036d8ea65d71470870fc18d58500c8d627074af704"): true, - common.HexToHash("0x85f315254bdf973cbf827776549e6aef5e6a87dc1a911892a9ecb7c070ee40aa"): true, - common.HexToHash("0x4f8d1eb2dbf277f1a8c9b1fc780ab5d98e88b2b1b5ee3b5f68fdf25a2d3a8190"): true, - common.HexToHash("0x022dd0a37c497404f001011c7d734df189b3b684bbae3b902f168d9fd7915765"): true, - common.HexToHash("0x167494f9b5b44a0c48f47e75bdfec22f9e2fa20d9e3933bce994bdfa5f191275"): true, - common.HexToHash("0xdadda15192c3b63eacd5015349f18fdc003f3e9b5b6f51d721207f8c33806c10"): true, - common.HexToHash("0x36beeb5f737d60ea8b871e707294eabe263a40b56ff0cc657456e1e38784b438"): true, - common.HexToHash("0x1c72acc53d966826e174e653b604d5241d8f9cba525db3c3b5669e3cbb7310d9"): true, - common.HexToHash("0x5a57b4b51130cf28100643761a0227b9ea63272739d8994dcaf4c78ba35b0ac2"): true, - common.HexToHash("0xc7fce87242e5e0cfb305be8de1bc3a68d1c33ee677027c1c8189d0cebbc8e97d"): true, - common.HexToHash("0x4febea90cc856b391e7b4e98d5e9782ea8f016c4f5e539e70d0a0ecd4cb266a2"): true, - common.HexToHash("0xfd2ef33cf79070aec97e3fbfbca96fce5e3b1ad3f1d4fae9e01e80cbfeace01a"): true, - common.HexToHash("0x406a59f724b1a4a41a234b4ae142d21c574b9050f2818e23f0a0e215ad4d8925"): true, - common.HexToHash("0xe996cf028797c384a9aca6feda292e997e5bee4f6013a724e39fd11810ce36b2"): true, - common.HexToHash("0xa781b49d25066beb0bc308dba18237598db084ed4762cc0097c3c2d64e5e8bf6"): true, - common.HexToHash("0xf94580b105837393d4912c202eaf8caa9e9f7279251622ee594717c21c9671c6"): true, - common.HexToHash("0x701ce0bc44587307776434742601ffb395c5484c7725e443e0df02665b8da35c"): true, - common.HexToHash("0x55c6e2e7971d0ad9d5f37a644b182d0b624731f0ffde352201b523810b0afcc0"): true, - common.HexToHash("0xa1547b2dbcb81bec01677d7fa1ff23fb66b8d5c761eca58f0747b95960e18f55"): true, - common.HexToHash("0x80cb7a4f743ad9d79230fa324e771ff29a9a2b1b9eca1c93e1036e057350a1ce"): true, - common.HexToHash("0x9a3fad8920283d41fe52e640be1a844d0e2d2493a276a1bb5fb84f5f33c613a6"): true, - common.HexToHash("0x5578c3d64c1769e6593ee9d76a3564e6733be978489181d520ed99fc67ef3cdc"): true, - common.HexToHash("0xd37d88c9e60cac21ad66c31080b483d647bf0fb263dabff7854b04eec95f54a0"): true, - common.HexToHash("0x625bf2c4aa23c207024c9a2f8281067efbebe2c624925427760894ca9581b7b5"): true, - common.HexToHash("0xbc7f1bf592ebe13efc2f593fe7ac8eb35bc98478fede5e536bcb946411ac0d63"): true, - common.HexToHash("0xd8c48533574cd3e79bcc0995c553692e2451c8a218f60739cdce3f8304683a4c"): true, - common.HexToHash("0x9b8fb47bb991a55e703ec67235d01ceab86b66f0d83e4a7626d0c1c4712bb9cd"): true, - common.HexToHash("0x21efd596c7435b02fead509e79685fc1dfc71a60f2109d2ade694739061fe738"): true, - common.HexToHash("0x5486e39fb8499289bf5526f1a318adda7a845e51415c641c0edfef54d8b55639"): true, - common.HexToHash("0x15bbef131cfd4299d6e77d3cd4cbc180319ffed6b322166239c6285e742f681c"): true, - common.HexToHash("0x5d3c4c085dcde3e115ffb8118e13d4b3a9f88f1de57d210c390a2abef5a45f29"): true, - common.HexToHash("0x40480369ac928f5a8c3e7a95adcbd57e84c6d45fca865fa920ded463e41c6212"): true, - common.HexToHash("0x69593ce164b98c51c21ea2a22d9787be5596b6267c5dff31275ea246cfa0c17a"): true, - common.HexToHash("0x5beaa0f589cc4ef909cbbcbd657ff92ec30fa8f7693196850f9866fe55076c9a"): true, - common.HexToHash("0xc0596761765657f806def9fbea2533dbca9c75cdb0e7ae7cbf62ad232413fc8e"): true, - common.HexToHash("0x546b16609fdc70ac3948f8c40bc572026c1071a86549f54104436267cafa6c83"): true, - common.HexToHash("0xeb6acba573bb5199e60b79a313c7c54d6592da45e8414815da2483919d9841d0"): true, - common.HexToHash("0xde5ae06b60da5800a349f47e17a40ed73a662e6dc0375b0590a9b4f7d606c29e"): true, - common.HexToHash("0x56ce8f4a88cb455adb5ed661208b29a85e7284119046bed251de2f210531c104"): true, - common.HexToHash("0xc4b2dcd4f7b3fefe2573f337e3077590a1fa9b6de57c9df24cf25d2415e34d98"): true, - common.HexToHash("0x4e34495d7cbbcd166a4bda79f65a964ec5c1a6647af97f35df4265b13e43ef92"): true, - common.HexToHash("0x50430441db328e1c425c47c917249ca30cbe8de9ed0a4af3d4fd47165fed25c0"): true, - common.HexToHash("0x72271caa00440def6b84a76d006d663e299b98f763d7e04e6b59615a73c82a35"): true, - common.HexToHash("0x0eeb4e16a4893cf51786fbe8fe8075208ca0c2a91d42606241a5d5f1e2645fe3"): true, - common.HexToHash("0xacc25d09422c3d6d5659a756f1b9ae5a1897b5d928c5da53ec5575e67be813c1"): true, - common.HexToHash("0x0217175c27491589e19382723f7b0bfa4db5b662a673611b550ee071c0c3725c"): true, - common.HexToHash("0xf37209b4065e67651cc48f6d085999657b2264d001764c37b3650e4a6665c4b8"): true, - common.HexToHash("0x5fab478fe20f2cd28f958e6335c70d905d22dea462a04eeddb2eb28647f70e48"): true, - common.HexToHash("0xafb1a68843c5fd858967a3e7169a1472ebca9e8fd51d251b6ecb456203e1c0a6"): true, - common.HexToHash("0x9f46880a689de83d93b41dfb53ce235737124c17ba74beb6b6aeb5c4c8f45d56"): true, - common.HexToHash("0x19f1981c0b3ebd02f5c57b084846aa379c7965cc9e17726943d036c6c06d83f9"): true, - common.HexToHash("0xf178d6530e9a15083fc2c0fae62c483be6658b130f3928c6d35218389557b68e"): true, - common.HexToHash("0x55f9480083de41b31f48ff1ffc5f055b2eda214b509793eb0688f2491883517a"): true, - common.HexToHash("0x62830b4ef2f92d0ef14c464965e10dafd8999419ed1c3cf1bfa8f75bc08922a1"): true, - common.HexToHash("0x385a2f80940e68e0208a5deabce3152211e7bfbed3a6acbd3c5b037fca1b04bd"): true, - common.HexToHash("0xdb6d48f21d77e1a1c122b5dc45c1aaaa60020f4e8c0dfd90d69f126f85f4bec3"): true, - common.HexToHash("0x1c9c8d6b48cc7e10be82547101586625ba888f5e20c540ba67f59685c433a9ed"): true, - common.HexToHash("0x7c22e267267f70cb951a2b23b136a2dde0e3372e7f606dc363263734238a75d3"): true, - common.HexToHash("0x924753de21ef1f47e36fe85ac2aacdcf669b3381759d1579bd85ba71ced0f6a8"): true, - common.HexToHash("0x0fc8c9aeea8f05e5c5967903a0b045025838bea10aa2a69825af76ecda43568e"): true, - common.HexToHash("0x45e44ad69e067adcef6100ca8f4b2fc9bd65197360eb74dd4c276dd4036878f7"): true, - common.HexToHash("0x2f83a0a4d970bc4748669d3891f9913ba4b70c53466672cb4093a8013e40f998"): true, - common.HexToHash("0x613447bcf7f04cbad5596b48621dfd6d5d41f5c5b859b3e82403dce45b714368"): true, - common.HexToHash("0xf11d05b06b19faeec115b5fad430479dedd90eb4e43ebce7a5191aba4239973d"): true, - common.HexToHash("0x03776c305d01457a60ad30f967d20db247559f53b3ea84d2cd4228c66af413fc"): true, - common.HexToHash("0xbc7fc72eb894e7720d0ca4c1367f6fee9a581649960f8d0c5199928b5da4d48c"): true, - common.HexToHash("0xf289968de7cd33cccf5b3f8c9d0373ce5bebfa2c4766530b6d6bf9c0ef8ba73e"): true, - common.HexToHash("0x0c376c0b5d98bed7863f2e49a7919704a608d59d0d9afb9f8a67e8c79378d517"): true, - common.HexToHash("0xd2b332c38e52ab07f3444f55a265a6f13ed33fa5427446bf4ba93ceea26e5035"): true, - common.HexToHash("0x63329e2c5aa965a972001a0ace18f8ec10918690ef278adb36cbeb4675e2ebf0"): true, - common.HexToHash("0xa5e404035c508eb6f5439294f202ae17dc9023a52e7cc878b135ad8a4cf4b8b3"): true, - common.HexToHash("0x68f74003fafefdd07dcaf338d282ab4604b9be6a61cee548df575d14c3b43e2f"): true, - common.HexToHash("0x9e340e44c2980140d726da53f376a606ed8076cc77111e376587f802d3c7d644"): true, - common.HexToHash("0x07bc9e463bb5bf4943e5f53d0875a7c25308c89beb8faa35deb7b9cd04d7a964"): true, - common.HexToHash("0x8281e106f38d6835c12c6fb8ef472b2e54f2dcc3acb56cbabffd62b2ebf3c9b8"): true, - common.HexToHash("0x3dcbb836909f38fe0a1f4d7a3c9a3180fd40bce87629353c82ec1a96c2fc1544"): true, - common.HexToHash("0x6d34b078b645b61b527ce39d5cbd82912563788d7be108b3072b0f8f060fecaf"): true, - common.HexToHash("0x952074a4328948a18e8e3e33881d95d06f14fa77578ec853255cf8506ed8a709"): true, - common.HexToHash("0xa1d658a2b9f39c259a6dadf19c4d8f5c2510c6e2e8507b62a223c6e3af510348"): true, - common.HexToHash("0xf2fec98f1bf19fe654ffa8946d66eec381c819f270c98e77357dfa3b01a541d0"): true, - common.HexToHash("0x0dff56ac9d0ad17dbeb7a5c14de9cfceb246d1b7d050d33c4164d672fb67597d"): true, - common.HexToHash("0x11020773b77a1beb5cee39fa63df88ae6c30dcafb00a378d3b903876b9d53fd3"): true, - common.HexToHash("0xba02f2706c4f17b73b190c808aab857c8afad23d58f104cae9d6ab4777cd85d1"): true, - common.HexToHash("0xfc1f7c0d7771dbb944d676f8b36ffbe03448a83850a290c7483e1beeae4411c0"): true, - common.HexToHash("0x3944f6ee9291775b37c0b07be5b77a428c89f59db23d9d38b25cad63136f7874"): true, - common.HexToHash("0x2530c8d881b249fb051f6623d750524979d7a59f057a071fcad6a529f7cb0d47"): true, - common.HexToHash("0x2b57d98a8368ef6e154a219eb51deda37a9fced34859d9f81f2ce7fbc4d9fedd"): true, - common.HexToHash("0x039eab63557d7cc49e9e415eb4efc45a905243cf69e9782d5913c81ef48e2a28"): true, - common.HexToHash("0xef152ee6f987e36ab9578eb5e6fa6f79c7c6098d5ddf76e36af826aeff50edd6"): true, - common.HexToHash("0xcf1d5c68999350567c9f1f742c7f6b04776a414ccea14d70cfb8b09fa68e4e6c"): true, - common.HexToHash("0x1f21123fc4aef2a2cc7b1a7606d721076e065b9d4ebb13b92cfbdefa123b2414"): true, - common.HexToHash("0x3bb803fbee4763d3aa618b49e087dde49ab44e52aa0e6369a7feb9e730d5cfd6"): true, - common.HexToHash("0xea38440405f98b17d68d5ad00b2095df2733303dab24ee799c6997cc5ffc918e"): true, - common.HexToHash("0x27a75cabf6430ef067afb5124354b4913496d4335244608a9f63b4f52c2c95f5"): true, - common.HexToHash("0xd85355bbfe4ee36133f5c8d5f59c75f8b9a425f21b3d21dc7db3bfb3c4b5a38e"): true, - common.HexToHash("0x2c793a0e8c6fa00ff6bccb377d3434c483e0b86981615afde671b3d54433edbf"): true, - common.HexToHash("0x6fa70b26bc112610f431f02d9a445c37f6b80451a786ced31c4e2ba399fa2dd8"): true, - common.HexToHash("0x98354fd84d1b457c6190250c5d6d26d046185da9bf7f7664255ad56d97a19016"): true, - common.HexToHash("0xe1c037ab5c920bc226f86cefb44a4ebcbc222849bade966f291b0309e8faba0a"): true, - common.HexToHash("0xaeb710c6b5c1a5ab882f96def3aad42646bc96e0d07379ee1d2bea6ee06a7094"): true, - common.HexToHash("0x2fa40c933575f880ce854a5e04c8223717f52de9bc22e15ee4e0ff52b3cc28cd"): true, - common.HexToHash("0x63759037a9d70fc601548269d0cff4531024e8a95dbebb91f5aa002e2dd197f0"): true, - common.HexToHash("0xb1fc8a25e61b8cd1af09418d2285e50228993210a0a8610c04bf0d89cb018f33"): true, - common.HexToHash("0xce1c3ce658024a9b47e00a52c4293e2a838c3b685c5726daa567466a5165923a"): true, - common.HexToHash("0xfaf38081f10b896713c0ed2809f1a8f967431eb2744df2c743cf09f667a623b9"): true, - common.HexToHash("0xc49cc352d3720b9748a4d817b60f29b41de14ff5abbeb7f349474a81d0f6ad71"): true, - common.HexToHash("0x76edd86b9ec78c9f31b588def6a8709d76f99bf9ae45eebe4f3d7d39c73a58f1"): true, - common.HexToHash("0x56c7765498cfac12060665a348075c2d4e0577934be57ce60c4a74592378a710"): true, - common.HexToHash("0x044b78376809ece878b277e3a5405cc82f37e0e4e9ce773af3d48e2f61fd1256"): true, - common.HexToHash("0x9ff35921de87ea3fd25ff3c2bdae0c65b1d747ed71fca7f7f2a64c3eb95d0519"): true, - common.HexToHash("0x4f133c1ec46c34244f3cb6e1c6978a9029c2fe9075f2192fab0acd80132c7ac3"): true, - common.HexToHash("0xa881597bac3e534325ae862fe6d32131498e9abbfd53aa1de11e802ffc350337"): true, - common.HexToHash("0xe8705ab7f8b12350cd53c5587d327ad67b6b8cf3bf37455721278795cac3b7ec"): true, - common.HexToHash("0xa4c7a297a36b834665090c889762ac33b58c2c70667b4f0440d0401116e83f57"): true, - common.HexToHash("0x14f2a466a61aab8ee9c00f3158726a9b6f7676416a2b0bf6ed0eacbe450b566f"): true, - common.HexToHash("0x253ce3fb8c99a3ea770d5bc2d6498a3f90f6d3f78adef1a74d3da1b3f236571a"): true, - common.HexToHash("0xfad74857333b0a4c4e53bc4f3788fbace1b53232753e1b60ab3a2aad90388bb8"): true, - common.HexToHash("0x408da69028c741e695ba0328bc4ac338e531bd2ceab659f6fd39f914f41aed48"): true, - common.HexToHash("0xb8b593d38d2c8cbdc256facbf38ff842e7522c29121fffc9d0f2683e85f271fd"): true, - common.HexToHash("0xe101a8a6427e8930381ae5d5aad5d25c4210987175f49354cd95ff7fbc74c06d"): true, - common.HexToHash("0x4977aa1cdc2b946d3e2c20f33678b949218ec18287cd22ac23606deeec016e86"): true, - common.HexToHash("0x68043095c822560ebaba6b529f45c1614957a70b3eceb705a5f7759cedc8bd33"): true, - common.HexToHash("0xc9fbce31bb1c62f43b8f4210e12d16b351961ccb30c693dd7ef2bfd7eaf817b2"): true, - common.HexToHash("0x08337e8453b28ee696403d3674aa5d6a0e8949fc36a3ae382578e9ac70d21901"): true, - common.HexToHash("0xa399da95cb39c509f535465e863033f860332c77dd6f8c1933e5d4e355147f77"): true, - common.HexToHash("0x8f92758561b1e51ae430e82241cb143cf9c83cbca7d1ffb968dad544d9c51fb8"): true, - common.HexToHash("0x848ddd8df276aaf430b6b0e03f7d1bd0bdadd062d823889adf1c257afcb93eb3"): true, - common.HexToHash("0x709f8de205e120df97e755de68c4ca98fe09ca80c1ef8748f543460ecd4027d1"): true, - common.HexToHash("0x678e031586cb9442eff48a3d1cb53050e2956b7a4887f83f66357b8003bef653"): true, - common.HexToHash("0x6c68b37ab47c7fe2a4083bd08670a0413fafb35805814bb3294324848f4f3f0e"): true, - common.HexToHash("0x1ecc4a5d9f139646b0da7b8a3df477b787c69997442567871e2fdaecd1fb66ee"): true, - common.HexToHash("0x66816ae5fa5554e65e7380411c776011d6189e08f860ba51958ed04fa852f4c5"): true, - common.HexToHash("0x9bc5f215c2dc826c5f858224925ba2a84f224ea0fda249e8cb5bc9750e996e57"): true, - common.HexToHash("0x9b3e742d1aad7860dfce0b5c0cf499520452539e57e2a577f2503ad8f1f26063"): true, - common.HexToHash("0x02d3026bc2c5cd8bf3f30703ccc7bd64e3a43191a418e85e45ab8715bc200dd0"): true, - common.HexToHash("0x9170ee79b2a6f05a80e41f2978a262fe90e6b3b779608b1b8500a7834df940f6"): true, - common.HexToHash("0x883f5ca70537cc211803136f4488e984b8a4f6c1b19240a3d074292b92092733"): true, - common.HexToHash("0x6e94440300207e69ed823dd77cd63c9b076e22fb81ca2b7947f98ad55f2cf372"): true, - common.HexToHash("0xec549888c176234c577b3795d39f4c9c40ad819ba0a774d2a76b851df842fee4"): true, - common.HexToHash("0x1e8d70cb41bb8032e473556abf60bdb5705a10268faa239a01249cb774f304ea"): true, - common.HexToHash("0xb05a5b80b754802e381ee0b0476831b08dd8d0f10ea52045404e64e0d9ba9ab9"): true, - common.HexToHash("0x7875442a10d9e74060f4189d9f581a9157eb1140f061bd2c436f332ea78a501a"): true, - common.HexToHash("0x7b4afb4c1151fe72c15be62496ee4c6ec2ed41eff03796298669dccf534777d7"): true, - common.HexToHash("0xd11d4e55b0f0aa6e4e86f3db9a165e16bf54e552c412355615127434563ecdb6"): true, - common.HexToHash("0xa9519e68034d51346f84cb6e6a48839d864e34b35a31c2d83ae5334d41bc4365"): true, - common.HexToHash("0xd49d42c6872c721d717acfe772080cedf9b2a7bfda2175fdaa7a32dc1ca042e0"): true, - common.HexToHash("0x53bfabb8abbf6a9636b899c91ef5098c46c351651b6a03104d531ec83c291c5d"): true, - common.HexToHash("0x9600c2010d1a6d53d0f9e113d180f648259e2c0a4d843d3721ddc0ddebfbee00"): true, - common.HexToHash("0x9f88ccdb92dc7fd5c83c0cfdf958b36301b4ed824fce4a7d34fd51235d03a44d"): true, - common.HexToHash("0x1795b86d8d3aaf3c021e3aca79fe67a7742e70f8664e8f22a16196039a701180"): true, - common.HexToHash("0x46227ac9591203c2a26e697770c048cdb871d4957fea49e90b554f2263c051b0"): true, - common.HexToHash("0x69566095187998f41232f968acdb71993d2619fe5bfb0e447c79358e55fbb003"): true, - common.HexToHash("0x9e410e65689e88c74dda6a905ff1d80c1de75456e658c437f14c4ac39ddc387a"): true, - common.HexToHash("0xcd5ceda90e1931419f2a93817bba7cab80e610b297cc1f5af16e0ca28316b441"): true, - common.HexToHash("0x721e01afcc7516c729706634a3df34a49ac8e5b20077f9ae7ea229575774a4c5"): true, - common.HexToHash("0xed36f17e95133547d9aa1b4240fc6bf4735e021bebe42ab098894ccf1e20bd4c"): true, - common.HexToHash("0xe4ac212abe20b0325f18f9a5a078fe4a2b65c8ce9d8082ca25493b45b6ef947e"): true, - common.HexToHash("0x844b5241cbb1c569634de871f1af6cb43a56c5cb18f8ea406b931128624da69e"): true, - common.HexToHash("0x4d0682fe173a921968db87ed06a6f55121230672137600dd6b03be5c0b19ccf3"): true, - common.HexToHash("0x08abad329b65844923bf900c4dff7ab5f2325dc9ffe423c0ed136ad71a81c7fb"): true, - common.HexToHash("0x2a02af514097b384b5184160ccc1e602b4e179b5b89fb8daf746546ca8a6594f"): true, - common.HexToHash("0xb55627ccc0d01a21f56addc9ff440eb52d391560f608e19aca6b75e4fc7b2e44"): true, - common.HexToHash("0xe3f8dd14f9f6f5f39711abee4f3f8f70eba2fe28022b823ec1065c7c01cd3679"): true, - common.HexToHash("0xc12f19426a3473551e797e31b155268986c63dc47a66aa49405b7b80136c0a9f"): true, - common.HexToHash("0xb2568d585d26233e17a493e65ef098a6fac95eacb0648dbc2e43fbdde49a7e77"): true, - common.HexToHash("0xe1d1beade130c748750a244c4b227fd97720918afe6c389bfbe8f15767894d7a"): true, - common.HexToHash("0x99a1606232edf2d297dad9fb2e7b670a03ad28a8d3016eb2a8105441941ba575"): true, - common.HexToHash("0x814224bbbe5c701fe7cb0b6073b422fb57d66db0fd3f8908e1c49e4b6e564e89"): true, - common.HexToHash("0x2facbad55b007a216bc3190a627b1c3cf729d22a2f3e836055a59a4704448242"): true, - common.HexToHash("0x88595dfca685a5a328864b4b693d33a0ddd86bb57d8dca843d9748aea787d2da"): true, - common.HexToHash("0xf74c3a97828c381fa3f1cfac98f321476cde42c3f1c63231db7d67c177c466a5"): true, - common.HexToHash("0xd4118f9f4eb0f288c42db99b471a35d64f987d0a29a08f2b909732b84d1cc35e"): true, - common.HexToHash("0x9bd30e47b915ef80f01bd2b1fad595c5339c7d7b8ea0ebe1d6b0bc2678710fe8"): true, - common.HexToHash("0x861d856ad0a1ce01a19fc5d482b29990d86ef42042d799421b5540c6228c9339"): true, - common.HexToHash("0x0c0a74325567c5fefa049e93e9ebdbfd2b8e63169a9be55e9ee626bcc0e44a9a"): true, - common.HexToHash("0x5ece1054026654912f0deadd93f19b7bbf07c37dc0d5c2746ec0aad92a8bf3d6"): true, - common.HexToHash("0x92a062461008aca17cad0b3bfdeeb32c53dfa3ef914b4fe5f220142da12102ab"): true, - common.HexToHash("0x8f8e3b9c491612cc1d222055bf55778acc63d38193260e5d81e512c6998cf184"): true, - common.HexToHash("0x49265f491d6606c858108eb3911bdbfa2ff0c5a3b357ec98e876668f7e8652e8"): true, - common.HexToHash("0x1ba4076544da73b2c7e75416adf2f2c098a29a8df51a8c8cea7fd3195df4ee2d"): true, - common.HexToHash("0x55181b5848050e38e6615cab0e40afe9353447aceacc13466b8b77f22204d3e4"): true, - common.HexToHash("0xe1697cec4c1b86778de6f8572546a0fbb27da9eb7de58f1c480190b9636bef47"): true, - common.HexToHash("0x18c952f154662ed397e4ac66629d23c2e03409bfd7cb41f880d25107681f78f2"): true, - common.HexToHash("0x747c353f6da2c2b7880662791c89296ba93c8aa6b3289badccfd9e73478f481b"): true, - common.HexToHash("0x38b8e2c1f8b7af8c0588452a17787f93162edd58ca5a058650f53edf2c41684d"): true, - common.HexToHash("0xd3aae507847c720c1a90948f3f20dc4599af9e19f6b365c15e9e5f5a5328d917"): true, - common.HexToHash("0x70d99383fc6b8f317f28f0b8d5013bd8c37fc81a4cf9d2a1e8ebdbe40b8b55fb"): true, - common.HexToHash("0xaedec4441ad22602b802e619fe93e6bfa54a9147425b474396bc09d76c96d36c"): true, - common.HexToHash("0x6946093df94636a0dd0df1d7a25210e88d38a96cd266c63223c5903bded501d9"): true, - common.HexToHash("0x70d982fc9d5e28540f9fd455a3b40903a7594edb1a5963e19d8d1693c3f9418f"): true, - common.HexToHash("0xe802e1b8bd0d5715f810e83afc12dd418b41966a3df5dc6cb720f9f8beebc4dc"): true, - common.HexToHash("0x23f77b0d5c28c3f131118567bb4aa64c3769aa61f39e2f3b84acacda9e0c3348"): true, - common.HexToHash("0xa90f75c28a3fdb737168a1d13e08539ecf280f9fc793b82b133914ad335cb37b"): true, - common.HexToHash("0xfef2ea777ec11bebec7b72ccd14acea0521edac1360d718dad1e4f62104f895e"): true, - common.HexToHash("0x0c6f3f44b5ab00e23b5a29d150cd58a58523d25cd92aec036b04f631ad413076"): true, - common.HexToHash("0xd546dd27a09741d2c0f6ea85fb3a3c6397ad8ded8c497a3a9db37a3d6dbd9a7f"): true, - common.HexToHash("0xb7bfff183e7c9cf123e910e63ac4aac24cbbe18182b4dd78bb62845317600761"): true, - common.HexToHash("0x3c3e11139d8be72e31c028393cf48c8e5f1ada08dfd2d5bca093bcfcbb53fd18"): true, - common.HexToHash("0x8a2c2ace61635a74abeade80ca6ee69500b8c10077d10f99db3163f06bca69b5"): true, - common.HexToHash("0x9d924d88237e17915acc2fd9abf11d373b4d8a245e5dffa294f18d71a99e51cf"): true, - common.HexToHash("0x945b3d0b4a9f5bd3e053a0cbc4f344b0669860109c6c80a2045781f87ba82584"): true, - common.HexToHash("0xbd86643cbac68c2fbe5f1e34747b611d3b7bd84602ce6ae15e0483c5fb9d168a"): true, - common.HexToHash("0xec272e9112bda510bb6f7d769300e1346797ac6cf67eba5d1fd1e7483879b01b"): true, - common.HexToHash("0x039c221a3f552295192e225098e0a997c505cdb0078ce669523ff2e572e61ab5"): true, - common.HexToHash("0x9c1c4c80f4204fbe95bfbfc80b5e02cef6c08552d86bd67d624e29d5e46b60ec"): true, - common.HexToHash("0xfe30a89ea63b0a18a989dd0ff11b46ae202c9a1ea8eb9b7cb45b7496989658dc"): true, - common.HexToHash("0x8985d2680ae2234bf64accbd12260f11f6abc9047a720f8e5ccc251f730e9ab3"): true, - common.HexToHash("0xdc55013f668b09e833ef62f3439f961ac9680e87993766a2b43a42b176aa506f"): true, - common.HexToHash("0x01b1df4192e22870e93afd2aeb895afa65cf92b025a7d63c19c4e233a5c2296d"): true, - common.HexToHash("0xc332533219f6a6ca619c0ece640d46ff1b47cb96179bd1efb0ed6477efe03747"): true, - common.HexToHash("0xe3050885c9ab888cd24ac8acf47f99d79d9cecc5689f3771efc64fedd5e5f325"): true, - common.HexToHash("0x80aed73b3ba58c9dedd56730475c17b58bc2e1edebdbd2ab20c4cc5240def073"): true, - common.HexToHash("0xfbd9b8d3d9876de73a8f2de7f663debc237985264f863daed1d6211827beb134"): true, - common.HexToHash("0xad7aa9e2821623048d2a1fcc66d31d7fb6d956199b7e7c3ebf32299a8746528c"): true, - common.HexToHash("0x53e89c59d813c81da778c75a8b6079315e018640cde5aeaa5e5b1e4e7b63ae09"): true, - common.HexToHash("0x1437372d0f70f05f96aba349a7976ac2b840b3ee7511c2292aa8366e83f788aa"): true, - common.HexToHash("0x9fe8d8049fd0e874809a9c97b3b8a427470bec27825be9f23338a8bf6bf7034f"): true, - common.HexToHash("0x728a5a52b26aa4133728c190a51d926eac6d68e2a59de697b3f8f538d2cfbd9d"): true, - common.HexToHash("0x04028413d38a278b785f410cc4e4269351b44221399d3a0bbb76b9e643c556cc"): true, - common.HexToHash("0x4e657dc9d35750124cf71fb77d881fdc652fc5fbcc9cfebbaba942a1c73693a8"): true, - common.HexToHash("0xb23a72efb6cb15d3776020540393b9abaa2d077cfac4b1dffc63101eb816433c"): true, - common.HexToHash("0xee908f10bb33fe87bd5b594bee78bccd249ace73631921a13f2834cddccda3ed"): true, - common.HexToHash("0x9a4a3b03ab3ed0b547593b9e92db952e8f07b84837d5fd32a8d5f9a02283542c"): true, - common.HexToHash("0xad64a77ad1fad20b1e17aee964c92c02b76fe608cddb17580b04f114c9753cf1"): true, - common.HexToHash("0x620f951079ac5a845226c8000782e09687fcbf19699ae4e823631b54d222a9f2"): true, - common.HexToHash("0x495456796ce91b79c5e2e6e2c59ab241b8203e227b48b8412fb354a89049d892"): true, - common.HexToHash("0x4ad61ede7058bfe90f40ed8fee47aebbb1d9710b55318689622e7beba6f43c33"): true, - common.HexToHash("0x2d3a6c710e36302b6117c4b555182fd0391b3436ef863b89c0121c7f016f490c"): true, - common.HexToHash("0x10444df63586341e11d6e722e89b48e8c7afd83656a00876af25145736ffa906"): true, - common.HexToHash("0x512e8bf8d7e5688418481b64bad6ad692bfd5276456898b31195ec3918fc2cfd"): true, - common.HexToHash("0x5fa71ebe1751a0cc5fd1860a8b3d2a3598156f895d9f55cd8622614ee0fea16e"): true, - common.HexToHash("0x0f394ef0b9da09f37c265b8d9ade1858ee3cf662953964e9026c6cfc94af49e0"): true, - common.HexToHash("0x36c093adc463d9c8b7723c64ec10c98f4a5b6ba35aa611d42400b02009194e8f"): true, - common.HexToHash("0x1a31231d1902306b9b8bbace0918c17a62a6efb1f71fbdc3385ce46a878a7811"): true, - common.HexToHash("0x31c8b3303aa4b22bdf46b6d967b31dfd70f62b2199c12ef776ffffd84b7fe579"): true, - common.HexToHash("0x5ae463aa69131c33b5c9bb341a4614ae9a19bdfb7b76cc789d12556b84d91610"): true, - common.HexToHash("0x1dfb4c7f891289a257325fd24cb054b39a6ae60e39f10885c220e4ecc1339338"): true, - common.HexToHash("0xd57f0e0ae22ec818a8f0ae24caf742f3b710944185888b1894c63274091d09fa"): true, - common.HexToHash("0xd721293581784198b4a215467147636ba830b02317f9e72ee0cc251e6b2fc1a0"): true, - common.HexToHash("0x5223b24bc619edba25671f40e32b3c0ea1ab0643b949414941453ac9f8951b63"): true, - common.HexToHash("0xdf411c0bd970450fa3f67e598717699f057fed3b56a6cc168a2d026097dc9b14"): true, - common.HexToHash("0xb4969e8f80fc3a82d440444c09ea8bfbdd585ea8ee5aaa52b09fb274674fa0bb"): true, - common.HexToHash("0x97fd8ddae8a0652b86cfabe5b2bb9edda37235f03357ba8e09a20b0b28035a87"): true, - common.HexToHash("0x5c3fa6618bcb8ede27db6e1a26fd1f9faa93679a941169f0f21778c79ac2a3e4"): true, - common.HexToHash("0x336c4dd37118fe3cd90a7187efefdb90260355dffb8b5a22fed41fa39a94addf"): true, - common.HexToHash("0x2ee4ff53b9f0330f57470fe887d676d0c6f12e1b071a0e5e80e7f5cc79f4cc7e"): true, - common.HexToHash("0xa7adbf54b54b49338b11f52912ff15569963460d6b5c23635219bb9dc77c0964"): true, - common.HexToHash("0xfdfc81a133fc0a985f6b5e5e1c08c6d2719f337b7ae9849a183c5fec27e767f2"): true, - common.HexToHash("0x7ee2de87b80e60b26cfa8534ec59b868d81eb622e7132fd67af95a55c4d283f6"): true, - common.HexToHash("0xf728b6a4e69edd3c9fdcd41066dc49f44ba5e17c6a1488b33c4926c990ad7db9"): true, - common.HexToHash("0x2544ff908ebe85c5daef62b1a03436cc05b43db475b0db48839ccfb03fc829d0"): true, - common.HexToHash("0x9c9cce45c45293018735d7ecae30d800c522609b0eada12d2686bab9b311a3b3"): true, - common.HexToHash("0x79edb9ae4e19abdc67557bb9baa0ef5d036ec20a57d2ccaf54d6873d3baace87"): true, - common.HexToHash("0xc295615b39b3756d941ad1d24ecac2d24ce3235d350ad10ad1bb5bfb0c0a63b2"): true, - common.HexToHash("0x330169a56d79e7d4ac65da7a351baa0a3d0f7a935bb1d79fb6a4998d6526ebea"): true, - common.HexToHash("0x446b0ef22ec7902a0f9776c44846a9f0ab4e19db239da146ae817c70b47f80c7"): true, - common.HexToHash("0x7466da9bd56f68b86ec23fb3043146701884888c42d75365d8357fcfcace8b4b"): true, - common.HexToHash("0xf44bcee65473fae1f51fc08fd8ba67efde2aea7c19ef79fa7c0de916e581a084"): true, - common.HexToHash("0x30623ef33258726b4aae0fa1f9890f3e0c23309a0f7d2b3270548fee643b0844"): true, - common.HexToHash("0x13e26b3b3a0eca98eb75b3cd010f400bfb8105b3d4ed9236332e4c57642ff793"): true, - common.HexToHash("0x9e263628872415ff8e8834f13e5ce620140a8c3d1fcfcd80b60ea719e0b3b9cd"): true, - common.HexToHash("0x0ea4e0967efa1addba96d3cbc722fdf2175b78c39ffd7176e03f41427be18b5f"): true, - common.HexToHash("0xa4ad206df2b00d74bc9bf88c5726309e2e825807e8e89894eb9c54e232010c9b"): true, - common.HexToHash("0x858ae75a6ff48229c0ac257cc241bfaf091cee3e93192bfe6827b59a24a71524"): true, - common.HexToHash("0x87fb385b5eb67556ee7721f74f435e559d940fb9cf8558d57af0e1d43df96d39"): true, - common.HexToHash("0xee422ead09c48f48d3c673c90f0c1ac7b711056ff25447973b14372828a1f5fa"): true, - common.HexToHash("0x964d804e2c10f44734c5d6ba5fb39ae6f3e3ca90db3e8ac09feadd2ddaed61f7"): true, - common.HexToHash("0x65f90b4a963f6f41681917ad2bf8c67977053059bfb6d4dd3184129ab4b5acee"): true, - common.HexToHash("0x12574b72142da793f7cd5ab9c76f995393a097d9e940ae81a589f770702a9634"): true, - common.HexToHash("0x581182e4c2a929ba4c8ee16b2c05a3bc4e46c3568bef3ef6db937778769c4659"): true, - common.HexToHash("0x012bdb6f5056b286d49650e5f97428d632c498cdc511d0b8d465b41bac8b2f58"): true, - common.HexToHash("0x298c5f3d3a9766a4a56a905c04e808a92fd56baea3e996deaa89af64c1e5816c"): true, - common.HexToHash("0xbe419f0c73963e32da6da3b7e0e85458a0b30b18ea9ad6a07af6ac775ee5cb9d"): true, - common.HexToHash("0x878e6c015f30f4a764e60cf43b70d5edf3e01f1f0e30b5d6836d6389dd4e2f87"): true, - common.HexToHash("0xe07a3779aec268854e28b30864be293d4d5dc277366447b226be6d9ec7f74e90"): true, - common.HexToHash("0x8ff6a9c61ffc156f14fa386c545139ad185619e2f8667ad2e729d37d21ffc85e"): true, - common.HexToHash("0xc8282956ffd9761e4fef18ffc4a3dadda3de28d6b294d73cc3798fc7fabc5414"): true, - common.HexToHash("0xb4cb14c17045223b8fd24572a8f0ee247c77c5aade44f007d14fa2fd3186accc"): true, - common.HexToHash("0x18746f718add650eb742d8e5bceb2533ae259df641a92aed3e10a12c7f91533d"): true, - common.HexToHash("0xbb22183d68d88a1248f63cc7fe99dc894452a23f9539aa40b0a1a74259bf25e4"): true, - common.HexToHash("0xb547621f3713049e7583706afb8c11aab5df96254ca6daa6a583eeacb3159a0f"): true, - common.HexToHash("0xd394982f228c816b2a7b19d9c3137f92825cc5ef5f2876b920e47db5bb95ebdf"): true, - common.HexToHash("0x9711bdb16a0b7a63d27becad24d2e4828af9b22757ea706f025b1d15d8fcffc5"): true, - common.HexToHash("0xfccaaa3f9ae5f4f7fc3834733f37c8763ec877f62a1f912d357491c2aa9e5ae0"): true, - common.HexToHash("0xdca8f304df435d048bab0793e5ba494032286616541e00199fd226fa2b2ed9ab"): true, - common.HexToHash("0x8506414c55572e36bf3781e8aa00eaa496cbda73ea0f048324607a48fb96edb7"): true, - common.HexToHash("0xf4d78456136a7f309fba620a3775e70d6ee6aaf08ac30cd19b4d6c834616307c"): true, - common.HexToHash("0xe5687fdac128abbe8c8d8ae19477b63c49e577f29b79e3bcb077717d6415e3a6"): true, - common.HexToHash("0xe0931575b92f03673309d892bcfbf50050b613af30a38dc196b31c18d7646249"): true, - common.HexToHash("0xc8277445df6e7e6bbe0afc5de9acf49ebbaf80dc323d8445739fc08299de6734"): true, - common.HexToHash("0x500adabbc88107fed8738a8e4f68e20d548bd384680cc9b7d0b0d883b4ed9ba2"): true, - common.HexToHash("0x7d0561c3bbdd8620e13ca38eb02f07b1f8def4a61ca347a244b0c2c5c4fc6d0d"): true, - common.HexToHash("0x704e2856509e409020c307537cf78d6cc65e694832d1c8158c351a1920c4d992"): true, - common.HexToHash("0x65d8eed87e3bf09f4571e4c0d62212a338159545e577e1339f4c12db4b8b575d"): true, - common.HexToHash("0xa2ab9df936ce3e2f1dff638197581e18cf25174143ef5617ac83544eb4273cce"): true, - common.HexToHash("0x479565b62a4f3dd4a9dd607929f622552155f17202ddab17796f85808245778b"): true, - common.HexToHash("0xa0d912e3570d4e2b2bd5c77f6a7bae86a78731e405115daccc4fb499b75af564"): true, - common.HexToHash("0xb9805c71d747e3c86583fbee17d83273ef393d59fbe6045765f1cd77c25362ed"): true, - common.HexToHash("0x451010c0609204720f55a1aae54f230ac8a19edaf6866bb61ee2fdc3b5c09147"): true, - common.HexToHash("0x8864e29ca16151ebf37abf55b31fa45122963fa8fd0c56183f8f7667b2574f51"): true, - common.HexToHash("0xc860056f5044b04698998abd7eddf398df0ddcea361e6ce7e32f0e7d0afa142b"): true, - common.HexToHash("0xe0426a2e4f50ed36c7ae0bf9ab28d5fdf8dae5248c77bc09a332af1d99a81f0a"): true, - common.HexToHash("0x767d73190f0f4243f686752d457ff963f9fdbf562b6a61f60d7c5a16c1125f2e"): true, - common.HexToHash("0x67b448a29052a4383a5b1a7829e1f560519b6bfdcd367b60425a9c70106b9abd"): true, - common.HexToHash("0x6c38f3e0be46a350561b6647cf2ed607f152e2a133dab59c02460a76f66fc7c0"): true, - common.HexToHash("0x40ca985a64d56f66822ad9357d52e2cfc233d6a6447dea45367659c116054b6b"): true, - common.HexToHash("0xf85d3277b02bf9827e6616723814795998cff6cf4abf8bb8bf5fdc1cfbae1a1b"): true, - common.HexToHash("0x421ca394388af0875916f40fa938c2b0bc460d52a37282458cf232ed67d3ccc2"): true, - common.HexToHash("0xe0a5b7b5cc345cb34482b70d6651d640e03b3a3195cb8e38cd6bcfd0562832ef"): true, - common.HexToHash("0x462c3da39d67ef5154d7b2f81c77eeb9339e956804db6556c60b0e29f89b09d6"): true, - common.HexToHash("0x5d0d7a99d14a982d6194605ff83ea702fa3d8155ea507561d5bee3bdc69bdef2"): true, - common.HexToHash("0x52570a9db2393197f4e7496dbb514870c910e25a5125bdf8848fe6d62945c02d"): true, - common.HexToHash("0x32e7563675498e3039e1546c685c2e3df2c455383b1f4cdd4ada37cacf5ad6e3"): true, - common.HexToHash("0xc648d35706d2ab17ecd9a4da38540af0f57bcb12985569f25f93ff79ef0bb308"): true, - common.HexToHash("0x467d0f3b239a71095eac9301ef371ca0a7e7dd811c4e73b7f2f6aba66252489d"): true, - common.HexToHash("0x7e18d65e59ffb5b2774aa97739c182c554ad0d1dfc5ced7a9f816caf1358cb02"): true, - common.HexToHash("0x698ac219ea73ead1e1c702195a2b3041ad79cb7a7f05948362d8cc672b627eaf"): true, - common.HexToHash("0x931eb1749c302383de6acec2dd83642da74cf70aac0175b9aa6e00cf8d2aac10"): true, - common.HexToHash("0x015759962fc2857010a43f837ebe9bc9d305ba6786bf257d9c6ab3c535343202"): true, - common.HexToHash("0x7e9a72f76e05cbcdf7acccd46aaac49eee4b8cc6fe2be38ac54d1548e47a6573"): true, - common.HexToHash("0x5d7206b89593ae143ae61b0f23d21ab26e40356a0072d9f465795918b90a8290"): true, - common.HexToHash("0x539f8775626a860ac3be9f7b0be1a9e1ba070b4507b693324204d4cefe131574"): true, - common.HexToHash("0xd69829b73707d6ddcded1080d6c7a97b0ca5883e58bc68ee98a3ef5aa809637c"): true, - common.HexToHash("0xb25852e7dee9e4040600d21359930ce57f7094c0a8c18e92b9fabc7553585c7f"): true, - common.HexToHash("0x557cf17146abb40b50ff9721b7045cc22009cca580926fdbe7e9ada6d5292b1a"): true, - common.HexToHash("0xebc39a64a8354d6fe31c86828470f91442f93340163648ac19948079bc71dceb"): true, - common.HexToHash("0xb63d5e17316d8ff12f32a00896ba3bda23016c29f5128453eda564ad481070ba"): true, - common.HexToHash("0x084c2a941d8185679191413de10407690f3131de906c05cbe86fd2792b99eded"): true, - common.HexToHash("0x081f0d81c0941700aa408bf291700ddd8a925af0eab7ca01257364fa5955eb5b"): true, - common.HexToHash("0xa9bd82a9c8e6af68e03ae29d2c9f31de80ba5cab88c5edda5c9404e96443c9c2"): true, - common.HexToHash("0x59357c9a466cea8d8f07e90591a4dd2e7ee1cdd5e28c26544306e060a87faf1c"): true, - common.HexToHash("0x4bd47fa6b3708cea7aaea2848549a2aaaa38c0a37990979ab9cc843f2a87c2ff"): true, - common.HexToHash("0x0329f21972f27517d09e134aecd27393c8444df399e9cb0034d5f68ec39158ba"): true, - common.HexToHash("0xfdc230836e1bf5bdb5c89910cd43e8269a824bb1db7ff3dcb183a929a1172cda"): true, - common.HexToHash("0x11d38c2a6baa52f8b0f9cc3d13d0424dd6300e30985e738acb33cab4da8c0cdd"): true, - common.HexToHash("0x7bdf0e09d592d0934c5efdaaaecf21dd0cd36a7d1cb58c095403244143ae9aa6"): true, - common.HexToHash("0xfd253a70681b0aea9f76b83dd9c1850b925e0170dab1570c287d0e9b08ca8225"): true, - common.HexToHash("0x629a702c33da2b97275321cb6de58c991f8e3f3a947aa84230e4bf71f0f7385a"): true, - common.HexToHash("0x5fb06afef814af52abefff37e39958bca1e6df885d75b9d80cb32916b8ed7139"): true, - common.HexToHash("0xabbcbaee7fec5d556446ef73c1d0454d14316b461412c14fb96a9056179552a0"): true, - common.HexToHash("0xf8fb185714a190e5e064755a66f001830c6404f204f1df1e6ffad473c0c47f6c"): true, - common.HexToHash("0x28ce87d927a9472aa91100814e7da720a190b8fe605abb6d91f5cdaaf67a1550"): true, - common.HexToHash("0xf81be499651bbe97e7e2f9c0c3230d5f1eee8f2f05bb19f347b893db7aa77c13"): true, - common.HexToHash("0xb75b9bcc7cffae0a27360b56755c460d6f56fe04ccea96c2b23c8d525283dd84"): true, - common.HexToHash("0xd747f9f9d6903a3878e2d40674edf04352b6a45b922260880186d7992c552f5a"): true, - common.HexToHash("0x5e6366cdddacb7d1e2d4c90e63d636f02aaefd88dc626a7346a5460a4c9360f3"): true, - common.HexToHash("0x0f4b1d9ccc26c259bf7875593d4392102b4ce4fa63fc7fa8487a18c20b37ed73"): true, - common.HexToHash("0x41f879bd699d4bd43a02cba1550b896028711670376055a18b4b515b84076cdc"): true, - common.HexToHash("0x9be0a854a7363534aea6f7b5c21197d4f5f2ad051270e1fdd62e39d6139d359a"): true, - common.HexToHash("0x65bc03b26f6190d31eb32857ba2d26b1e761a89b9d44dc5fdef35da7a4cd42ee"): true, - common.HexToHash("0x99c04c4dc93ef2e51bb9512391868ba8f7b117bf09cef7ac6aef9e1b92da9178"): true, - common.HexToHash("0x4ff497afb8c9f20d502e3805bceeb091d5b88a8c7409b264691b897fe95b85f5"): true, - common.HexToHash("0xa71fdb27652fb71ed9b6f5a69ff3ae68a497c3cb21a80fc2a240a056f97bd49e"): true, - common.HexToHash("0xb9eb32d11526cfeafe53fd48d14baca00bcdceb774f9bc6534af34a0f4812cad"): true, - common.HexToHash("0x85e3e969f870420b7f253429b4ce551d16ffe59b03c719910082251b7c46be12"): true, - common.HexToHash("0xcfea0ff83a05fa2932d864b88c48cbd3b97f527932cc1a108258bcf487c76720"): true, - common.HexToHash("0xf6e78ec0a1a62c4746f1d20ea45b288b9c07ccde0ce58e5a0f156989d1fdc4ed"): true, - common.HexToHash("0x07c874ba7951aee815d0fb04354fdf4543736ba56b0807da9e8b1be7d684ff51"): true, - common.HexToHash("0x8895a416aae75ff8318ebeb75d8a5cfcad37b0c718078ec9e86114080364b207"): true, - common.HexToHash("0x447d725a3cb2e93ae12f1c9ec6098a4493e714c13302a7a5f3f577a7ff0d4990"): true, - common.HexToHash("0xbdfb709b64271dce662da0bc361791f388625e60d4967e292e4d28bb82e72e6d"): true, - common.HexToHash("0x01e274521973b033ae67693c9e03fcc028f5fee4491ff9d9ab448c7205e48fe4"): true, - common.HexToHash("0x603e8a3394a29df567fc749cf0c523cd0de9683bbcbefe580a15fd6e6263d86c"): true, - common.HexToHash("0xc057bcfe688d5dfc5e3d97b6ef6523d251e4bc68c82d75e33abe54c8caf47630"): true, - common.HexToHash("0x04c6d4a544bb404f364c247993280fb5712c50400409e2a85e903eb421778b70"): true, - common.HexToHash("0x10bd1e2bc71f900b9858f5c7b3645576463d671eacfac6d48968a040085f6a4a"): true, - common.HexToHash("0x20966b254b47fe4cbf577f5cad2036606ec7f6ed5cdff66bd859ca8e6a9ce0a8"): true, - common.HexToHash("0xc1533e1be01255d4a07547e25bd904d3a28596b077d5cdd52aa153581cf5515c"): true, - common.HexToHash("0xae2bce197c08d828d7c6c183f64be32dd9f3b406f93ab3b4d88aeb3037d979d4"): true, - common.HexToHash("0xba718cb1b25439a4469644bb6fee58c2721d3747f8fd766928e36d52ad829428"): true, - common.HexToHash("0x248fb97d37fb21f5f595ffc7ad19fab084c18f080ae5ddabdd231110bcdd1602"): true, - common.HexToHash("0x0e308c0d87e273949298c6bd775e5cf7ac7676205cedbff7f3f345d34f861dcf"): true, - common.HexToHash("0x069247cf0145b020cc738238b9857160aafa9fd8eaaa4c23e0db4dc939c9a6fd"): true, - common.HexToHash("0x365b9f6cb7584815c0b982f13622c4375a8b808f51de323d10fddf63fe7d24f1"): true, - common.HexToHash("0x91ae70713c7e64ec45a9e92ecf461f3dd378b9ee6ea9a1d4f1d0f516bc1b7f2c"): true, - common.HexToHash("0x3e513180109883f83f035540b9b77de67a19c09e7f6b75c572175c6e5695077b"): true, - common.HexToHash("0x598acb238ddc60fae578be94e40e2811fdf4df45304e32aee5d1cbdba964144c"): true, - common.HexToHash("0x0981dd6b23418edb4c9b531eeaf24137d2251212f55670753c60ea1426818969"): true, - common.HexToHash("0xdc5ff36ad662e778b4758e4f9c81dc8ceff68f11e44389a0ed8f9f9dfd4fdd1c"): true, - common.HexToHash("0xed720e25149ecf75c80c27a51a9fc5c28aa286c762b4271c35f10a59d1440ab1"): true, - common.HexToHash("0x2ff3abf5e1522ea32a041615232aaa6c32aca234afaf3c99324ed329384fa89c"): true, - common.HexToHash("0x608feee4187d3d188403e7c380d17e8c3622ed37bf8ec77e5f536d4c0e7bb649"): true, - common.HexToHash("0x1f11a41726d9ed0612fc3103b4f510a9d8ad3ad8b48e0d6e36731720d1958ca2"): true, - common.HexToHash("0xf022139743223f23f15bfedaa4532d441c905ec0eee06c1888f54e102c065422"): true, - common.HexToHash("0x3fc31af1b3882613ddb4c3cca7b00f2c1b934f76315b0b3f6c2e7e0e37029ff2"): true, - common.HexToHash("0xb746596360b0e3536c249aabc66d0ff9f7d1d23c7ff42dfadfcf9b491c9227a8"): true, - common.HexToHash("0xec6325a87aff068ad57d8a3d13f1b7af1eb2fec0d71e9e5501f4e47cf779bd39"): true, - common.HexToHash("0x1e1f66ec3b55b93ae9957c5889ff9d7006f9f22633f40c05d4b6da0b9c8cf6d3"): true, - common.HexToHash("0x2d27d6f07086b03cba93fd0a25353e36f5a5c65a2f91739415d8e44b1d15d7de"): true, - common.HexToHash("0x76e991bdf63f1d54c3dc2da60ad9e5042af88d4f94f2727868b046c26b4f2e5f"): true, - common.HexToHash("0x79f91cbca139d8e7e41d05202e34f0721f78d89e0b37581f2ae0ca9c4a6a7fca"): true, - common.HexToHash("0x4533dea0392022040daace542b8be22879a9701415a80c28d8baa307494ab239"): true, - common.HexToHash("0x925e6f6fb6fc2bada2b7638333fa6c067356f9e2436d1a026c3fd7000d60861a"): true, - common.HexToHash("0x27e5fe0ea1e05bd93a1bdf445ff341699bb1b468388585e6722c4327b22e9c0e"): true, - common.HexToHash("0xe07446818e5f193b564df2c3722e0c2484de25d2f365e0f1262e9dccfd34f73b"): true, - common.HexToHash("0xd1df2ad6c3c4fed7cf74bc974cd327cca6f12d26cfc2a2f5666c93c33c2dadbd"): true, - common.HexToHash("0xe7a599134dfa7e13fb720f0c45beeb78404dd1e491e14abb03b2c84d0b2f961a"): true, - common.HexToHash("0x08fc1b1d4b9823cb4cfd705ec770d3d5931de5c867dd3adfe0f409f732ae4d33"): true, - common.HexToHash("0xb7e6903437d0ccdd2b66d6d7c63f6f71d44d7f9aab00079c1ae6dc0d50e1d768"): true, - common.HexToHash("0x333ffa25239544cf212362e3d0bf5c3cf91be7aeef183961958306d341c9ba59"): true, - common.HexToHash("0x80659f03afe647402213815ef91ac69e03f30c1a84fdb366a11d821b51a984b6"): true, - common.HexToHash("0xe9f5755ae070c3d81d0b2f254e8985e3522cca573b992a6de75454b7d66afc98"): true, - common.HexToHash("0xeb079a12dab50368f52725df02e4cdef7754d57f46a59c0a3c1d2270b3c8991e"): true, - common.HexToHash("0x59402fa0bff338ca8b80e715696d82384da282b974609b815b5db27a29651986"): true, - common.HexToHash("0x27f39497af16865fbcee69f4ce178facc0b8ce8bb5033bcb2de786816807789b"): true, - common.HexToHash("0x15bed83553662fb45dd0a8c25a8e0f001450574a74e1f38a55eaaa85ec26a763"): true, - common.HexToHash("0xa8460a74a167c739b23c28f0475784dd5250d835a2e4f281627a0ce4cda2e242"): true, - common.HexToHash("0x7e0562b2401e94bf8cd7eb4c5159f84737002cf8db622bfe2853ef0aae22cb1f"): true, - common.HexToHash("0x4e017ddd34e9b78494932efdf08b890f746cf07c3883c7607fe69fc4aa633182"): true, - common.HexToHash("0x85b50d6258f54809b6427c35ebaf6fdd5023546c886e5f9bf5a6e7ae40fd4444"): true, - common.HexToHash("0x22660fc763650566ce872dd1c7f88ba575bce78f2192b3d6b1c4de3d438d38bc"): true, - common.HexToHash("0xf9822cce10466503d17466770250be7c9bd73522a878fe34a039ef865acbb53c"): true, - common.HexToHash("0xebc9fb62f89f8053aaa13665a39d8b68096a62c1293c3bdcff7ad6f6fd4f4beb"): true, - common.HexToHash("0x3bc25bb7d217059078914613160f620522b910d58cc6f61401ab21eef1fdb791"): true, - common.HexToHash("0xe724f60441d7d836d13a2c061a26bc0dbede12157ab9896bceadedc83809f5a7"): true, - common.HexToHash("0x014aaf1328d86a8c7119469bffc0efc71cb9d22c808bb0ad20cc02da7df36725"): true, - common.HexToHash("0xa5487716af7fbb10634fbf2fb65b375f67299ef089804c11f79e757f046f0c99"): true, - common.HexToHash("0x50f0a533fe935a8a2611907500fa412f39f1f4b2aba552acc25bab5f91b48969"): true, - common.HexToHash("0x25b66e78e0430c60c73d8ec7d8902eb4fbcb106d990e1183f1930c7516f38d86"): true, - common.HexToHash("0xf11009913f5d9320363f4dbb5b072327ffd656daab2d67ff8b42770b098b8dbf"): true, - common.HexToHash("0xcee86dff14f745baa1d7a714887ebedad3858ff652d495950612be504ed28590"): true, - common.HexToHash("0xa07d69903392964d6ad9f95456aa2798a1ae8206cb1232d2a1fc7c6f35692738"): true, - common.HexToHash("0xbed1478484d1e0d3e92bc0effa0c94b4a4ffca2cc0a63edac477ba63b0afc585"): true, - common.HexToHash("0x4d59828dc1b57f59b577a0c4cdf7c641b8ef1ad76d90b14fc140814123b3a58b"): true, - common.HexToHash("0x03c586f69e6c31e26a81e9d2a5a578b2138cd3deca20216e797d80cf0197029c"): true, - common.HexToHash("0xf1d2fa46202a592bab811ac851080c773283794e31ad488f9c0bd9c69a1af0b2"): true, - common.HexToHash("0xc874abccc945f0d1aa293fec33d5299a24b2dace5f158cf1b2a3a2edd4dc9b9a"): true, - common.HexToHash("0xfe47a8da89e85886d581169c1923448b2fdcb0db448fb430924a944648e753c1"): true, - common.HexToHash("0xe15b3636d35e08c68d4ea1607e6f23dd683e3bfac2a7aac7317c9737b00541ca"): true, - common.HexToHash("0xfa74f14d6b6498118bcb160740c16a22c51ac31efa00dd42576ea70d6ff2e52e"): true, - common.HexToHash("0x431e134119cd05fb2818168a21a44e4145228cbc72dee6301e1351eb00698b3b"): true, - common.HexToHash("0x83c43ed604f10dacbd9d27848136b4e9b371f4ebd156cb268fcc0a764b7f0b68"): true, - common.HexToHash("0xab3efc58042b11b3649011e51c3ce381ea4f283a32ee8c2b64925e0c892d184b"): true, - common.HexToHash("0x1f287956db57ed2b87f36bc35b37d4ff780eef821c8d40bbecdd5d844648843a"): true, - common.HexToHash("0x618e0de1fb0068da99a689c9d23d5898b2cb714b29b11908fb7db80f290a4f62"): true, - common.HexToHash("0x5bfaf8d3ffdde36ed6648e9598596edca8f9d5449400ea68786f07c454c72460"): true, - common.HexToHash("0xc42ed2a92f2ab1a68262e2c06f1223037a1ac0af242ec77a0459eca056b18ab2"): true, - common.HexToHash("0x47653c834dc5a932eb608d0780dd49007cd589668dc70b4c3f1f2ebdf0f0a464"): true, - common.HexToHash("0xd258378970a4a87ec19d492f8835be66e90ab168751e32fc3f13f8b6bd61165b"): true, - common.HexToHash("0x96b4ba9fe4a529542af5fab044aef504ffacc538444f97f43bbcc24167a1ddd9"): true, - common.HexToHash("0x1b84f58ffc8e43ab5ee382405b27697e985695d62fdce026b22445c88e36d8ca"): true, - common.HexToHash("0x6a0e812d82f3207e6932a8e65f6c2059e44c24421cd5f2fc518a2e428458d582"): true, - common.HexToHash("0xecb6174bcbefb25a7b6dc4575bffad362ab289fcefa4a05fe4a1d8e15c6281bc"): true, - common.HexToHash("0xdfc0884af131d1ee583c513a0dc26d2b72f2a5e3e0fc955dfdbd1b22c364fb66"): true, - common.HexToHash("0xd13535e40d801f789926ba2f27097feeb637939846d1b1aa67b349f2e7180b73"): true, - common.HexToHash("0x901eff599ac1680192438e5e73941078ecbe5560fe60dda22556719167dce0ad"): true, - common.HexToHash("0xbfc653f7670ad09310a34a9b9e4e4ac4e03d471042ea44174a49f96a538dafd1"): true, - common.HexToHash("0xd1da98503e402c4588596a02b6ef36fa9346cadfbee37280cd5f8a695f34d593"): true, - common.HexToHash("0x4b37539b8689249cb28f22795bd0687dce9fe85ec8d3d80617de2316fbe3fcc7"): true, - common.HexToHash("0x8a3da87b263cd0289d5db812b05b0fdb11b0c89f049df89c25c02abd0d971589"): true, - common.HexToHash("0x29c0d3610fc7acc6de56354a4e0d75bf8c7e4ab1e4ef08d21949470aa2e26d81"): true, - common.HexToHash("0xe870ba8e15418bac50eab15f9f30251927a017d0dc3980d769e97d20f0d802ac"): true, - common.HexToHash("0xf7e9f62ef921ae17ca550ea2805637fce2365ed8e6f6580bb9769dd7deb57d36"): true, - common.HexToHash("0x3543c77979cedc26a504b0dfe9cd5f72ca27f97be4c2ca8246bcd79cca71993f"): true, - common.HexToHash("0x5459a7153f4ca28d70547f181d87a70a97f72e468598e3bfb06db57c05392688"): true, - common.HexToHash("0x68a83e16083b034b44825b8b971a6f6ea9c47f3ef85500eb70d2043ba85181ad"): true, - common.HexToHash("0xf26e1262bf8f313a317d88bb1811fbda5a60fd892dc25916e355d20092248f50"): true, - common.HexToHash("0x5b817624ab3f2702fb5c0f604f11f9c42e0b96137e51afec57030d7726ea2b94"): true, - common.HexToHash("0x5d970a98fdd00a77019f044eba6f2f446fc31d124bc41d1083b28271d3e9be06"): true, - common.HexToHash("0x77bf9ae1a62ec7abe61c184c03b8803fa2a74362bba81d15e5839d984ebdb47f"): true, - common.HexToHash("0xa611640bbc70ea368c59df6adb71a7362bdfdcb76a935f9bd2fa921c43db1704"): true, - common.HexToHash("0x7db91eae5ca0ff705faa7fb766120cc9d3b935fb79b25876cb395125578878ae"): true, - common.HexToHash("0x6b9eeb00bf2a467951eb28d3bae0622b86eac97b2fc715fa1c9d2b7016cd6d0d"): true, - common.HexToHash("0x629d3e42e22fbb3eb21351cc8b9f8002da7d47da459d4902e0454f26f7a2c917"): true, - common.HexToHash("0xc7140a7face9a607264c0bd42b19eb10b6bc106d4d61578ad796e4b3f821c623"): true, - common.HexToHash("0x78321500d532b2aa0fa425a0f2ea7971d34bc556f2ed1691fba150eda606baae"): true, - common.HexToHash("0xae5956a3a0c070f568c6afcf047ef4a90cd922280cb60c1ca756b836ce0acf3d"): true, - common.HexToHash("0x80a9203be7bd7ba5eba2df8cd4dc30fe5e98e594e59225be4e23ce0631522d5f"): true, - common.HexToHash("0x2620db377ab3f507bbee25a913b9d1128db92ce75ec91c0ae5800545a9742bd2"): true, - common.HexToHash("0xae654b882e027db118af5d50f8abd917c12aeefe5a41e230b766a4785c452170"): true, - common.HexToHash("0x9e0d6a396a5dcc04afb5981d186d8a8938863678ae8978daddd521d351fef1f7"): true, - common.HexToHash("0xb144d21a766ef37b1b12acec7813255b17cc1c120438a205e51c3fff59d795fa"): true, - common.HexToHash("0xb38fc2cf102be3bc9ed6d89271a68b6790492fbff40d15213666fbdc51f26afb"): true, - common.HexToHash("0x110d4c47d6cc9013e0fbfb99265bcc444fd0fa6d6799680b093c5b8373afb2f1"): true, - common.HexToHash("0xd827b7f89455ea50915c8f71074cc45117e2c003c428f668178223e568d43195"): true, - common.HexToHash("0x6bc832d5e43cdea5cb3c41dd9485d119f29c2ae0cc871bc7399f8f9f3a512be9"): true, - common.HexToHash("0x9efd6981fc28fdd02104ed8ec7fbae6bbdbab3fd4140124117e3b3580555da21"): true, - common.HexToHash("0x67fb47fbcc10623705a7a0fcb7735276c232270f43cb1af142f75b2b0f63ff6d"): true, - common.HexToHash("0x306b7f21e0e971beeccf3a1ba2569eb5a495d9956677330a0c4921234fa1d6c1"): true, - common.HexToHash("0xb52e37dc4ca95be90d405b59395a78ea0c72b4cfd5e24ca6dfe90bdad7a0916d"): true, - common.HexToHash("0xdb2b48708ea218c4f469be2846b0e15bfda5f565c8d6dda13c8296daa9d5de2f"): true, - common.HexToHash("0x13b748313e1859d624a318ac9ce1fe999b43936e0097b3911315d5b6c1eb1a61"): true, - common.HexToHash("0x81614cdf300302d51eedf84c3a7475ef20a6d0ab5c8796c149cd98acff0b2edf"): true, - common.HexToHash("0x6186756aea973006bdd5793cb0154e1330d0550557d4a52cd9f590738b90719a"): true, - common.HexToHash("0x4f7326192aa666af2a83d8c9bd1187df65ff625515f3ee9946d023e4a4415601"): true, - common.HexToHash("0xecde14ed5967993e22b1b1907401d983a1bc95fc5873740c8d3838b6dcbf8914"): true, - common.HexToHash("0x5f7876bdbd7871ac21d668315d433784336686bc75e58d46b2cae0abc89466b8"): true, - common.HexToHash("0xd43df2fb91ae7927897079da9318a0dc4946ef4d0f9d92f49701e76451d8bb63"): true, - common.HexToHash("0xa7800a146242a3be9615a328aa63f5ed9b45c937a3b346f9b6d9d7b453efff09"): true, - common.HexToHash("0x9811d377087eb9cfebaebc3b05f1a0201c6d664ca2a716d5acf8b4135dd020dc"): true, - common.HexToHash("0x449aeb7a83b353d24fce840bfb4097bc4f89ae54bccacee41f26d734398e5ec3"): true, - common.HexToHash("0x9fc0f69f2f49b5cf5763cae8c7194aaa55dc14bb44359cb61006f925b67165cf"): true, - common.HexToHash("0xb2ccc3cd0cac0054eadcbac0a968ad238f0e47f4aad231c12d1347a786170e93"): true, - common.HexToHash("0xdb54a89c106022b8c43f58a037395ca8953fb4eaec8544d42096e0eb74b54875"): true, - common.HexToHash("0x10c3ab290bbe75c68a15f7181d7287700f8633b318442f00fed5659cb75d50a2"): true, - common.HexToHash("0x8bd4f4549a1f81caf22c60d52724a1bcdc9132297531c796680c40bd491cf20b"): true, - common.HexToHash("0xc9076d7fb1ad1104664f30bd8f8fd2d2a97b5b3a8934cbb36be385dbc3399a08"): true, - common.HexToHash("0xbe558f2e3de013e95b056b2f02a59ff194fef45c5cca40221b35bb0a74c74b5d"): true, - common.HexToHash("0xb3617a3260ec10058cc25b50f628ccabf95c2706c522e9249f6cc678c5c880cb"): true, - common.HexToHash("0xa6ff56e3fb8daecd7557a72821095151de621def135d8ca2aeb2a6e377b049e4"): true, - common.HexToHash("0x5c9a745569809c14e40118c80f36c6858431225d1f4250d6b1e500138b7d39b4"): true, - common.HexToHash("0x170cc057ae144698513f4940d92154416e551ad2b15bf301e76aee6c2bd88fb8"): true, - common.HexToHash("0x5fdfb3f90db2e212e81077b620b861d702891a9afbfb272f7ab425f6430afd24"): true, - common.HexToHash("0x89b41b19f37ac3923f93f434a30a9240bdbcbbc997edf49c214a25d5d1c7800f"): true, - common.HexToHash("0x1a53074eb5f0e2bac118b92c791d89b7dc649861deb9b033f717e52bb8936c87"): true, - common.HexToHash("0xd63ef31cd78eae104fa56c830157ea3c2408fa7357e96fcf764ecd5aa26c4dd0"): true, - common.HexToHash("0xf717d26b3a510f5de4258b3c95655adbe49cdf0219c1977a37b8bcaeb60b3672"): true, - common.HexToHash("0x1e478ca5c55c40a6caf75f5b062f14e1ca7cdfb6b6213aba764e84b431ba0028"): true, - common.HexToHash("0xb8facaef281f0ed2ff4c72cb2916d5c783fd694dc9689d132e76596b2129b7b1"): true, - common.HexToHash("0xccd00d403a562323e864b432ddef3545c9095c59a45ba62cac0bcfad4d0ec937"): true, - common.HexToHash("0x306dc65872e72bb8134419ef49bc9a0afda37a90adfc81d86b89cddd95af57bf"): true, - common.HexToHash("0xe08689e057f615b8fc8e74c94f8e1945f136a0bba2eb7e0c8e090eac05083d6b"): true, - common.HexToHash("0xef639001b1d34ab26600443c81c81eb7c394404cb40524e40488346746ffc854"): true, - common.HexToHash("0x842e86a6b516e9bc59a71a7512327c1139aabcab3f729db8bf7db3d8d1d41719"): true, - common.HexToHash("0x30202a04472ace4a37aa67118cf602d9907f3680d8f9ecd012566d3bf8052023"): true, - common.HexToHash("0x93e7608f0a71a3b09b30d5299103060db625ec824c1e0df6003148a4a42d3c5e"): true, - common.HexToHash("0x9a0da147dd9b48f7f59133e54fd42dde3d62f8c098a0938ce74a1eb65bf99ab6"): true, - common.HexToHash("0x3fffdb4d3faa289ccedad1a0037741107cf23cbccfc18cf9dc9fa27b265a6c4a"): true, - common.HexToHash("0x150ffeafd5dbc92c36098fca2259dae6751abcd7dd658fc1090a2d291568c818"): true, - common.HexToHash("0x92ac87084cbce9c20c1d09f929f5d71adcc53fe027ab0bdeb962a904d17a7074"): true, - common.HexToHash("0xe61339a8f06da279138607065d77031a11975b32688866726e9617e847421638"): true, - common.HexToHash("0x151f85464099f9d14f205554b61ef98090fd194e25272d47231c83d11df14a9d"): true, - common.HexToHash("0xc7de416e9d5b9f1c8e9cf22c5771653f9e18b281b1af71787ae9986a26f33540"): true, - common.HexToHash("0x2648da0bb76db713ad7086520b1eb61cbc9e79405c12b8819c04c51c3a796f6e"): true, - common.HexToHash("0xb6c8100ede0c4cbdcbe52ebfa312931c8da3c92e81e91bbe86f70c62edc84133"): true, - common.HexToHash("0x44b6272573515401d4f076b9524fedaa89835e518e7742492fca988112456745"): true, - common.HexToHash("0xf69a7983fe9915f4874566e313c454c61594882af7a9173ea78949bd24d72622"): true, - common.HexToHash("0xc4e6c74989cf430a0f4e076fa785b9ecbe833fbd4b422dfc838f86b759bf08d4"): true, - common.HexToHash("0x7077003691ef65d436f6feb3dd6c934890b3b1b73e16a6d4faadfe22ddb22820"): true, - common.HexToHash("0xc946ee015438b1895afa507fc50557f71d762cd6326d639fc08cf3fc53d46f47"): true, - common.HexToHash("0x9f66854d5a743b416ee4760d8301ee778702f983964c541a0a724cdfcd87732e"): true, - common.HexToHash("0xd3d3f00f5e1f7f961d47b20d5f068835f8da04be1cbac281a41b166247c10034"): true, - common.HexToHash("0xc65d6daeece779db49aa82c99ca6e60042b10c187a2ca1fb5fd194c7a5d29149"): true, - common.HexToHash("0xd91be64ac2eb69ba9e4c90658e02a200b4f03197a4e66436a3a3e08973f779b2"): true, - common.HexToHash("0x92bb0b370302aa25f886e99829e6fc33e5ede1b62b71a3ae41c341063adec83d"): true, - common.HexToHash("0x073bb8e6102048135e2754be927f2a8401e9f3ffbdec53aad9e3677c52e46cfc"): true, - common.HexToHash("0x5764e8883e9f52fc956cc54dc4146debbdf7d63099c53ca7d977a8bb5370ddd6"): true, - common.HexToHash("0xef2e939983f498047c97c8d0bff870903f7713004a8a6d6a40cd8ff50056feaf"): true, - common.HexToHash("0x58794efc861ec80afb294abb9193891be032d9b7496f22ea4c8b5b3e039ad599"): true, - common.HexToHash("0x0b3334da0ecdec3fd1a77e31ebe5bac21f3fbe21442f99de16f74ea3c7ba5cf7"): true, - common.HexToHash("0x3dd44a678d4e046c150a8a731ea0d304cd6684f7e8c4addc337811c3a0a8cfe8"): true, - common.HexToHash("0x03db02ec6fd4d484005230d68e30aea803aedb403c34e2470b4092bcea4e5313"): true, - common.HexToHash("0x4e578a12abe34e3e3661175c4e2e514109bfd8034ee86ace361b48257c41e5c3"): true, - common.HexToHash("0xf1ac04338c935de3355b24ff0b1dbf93e477e03faa7072d76318357c06f37941"): true, - common.HexToHash("0xe04a7e38206b2b6ff18dd06a42ba741e1e3634fa68db1becb9e48fcc6c9b9b33"): true, - common.HexToHash("0x6eb0c11629c5bcd158af318b5f35acd2eaca52b66dbbc99b138b86befa8c8c0c"): true, - common.HexToHash("0xe4f0fd808ea9139ed06bfcc24332c53e64a9425c16c8b73e5dc7b3a11fd12a65"): true, - common.HexToHash("0x1b48d3ce97a9d0b780d8d7a7648020906e7e10424f43a2072d83504bdb744b90"): true, - common.HexToHash("0x17fab8ef549e7b060bb504e00748a9ced28c22dea71ee0db67b6f304b0b2c689"): true, - common.HexToHash("0xf6bc04dc4dbf1440a6751e33cd52cdb1ca210991f731cabd826970ee48a264f8"): true, - common.HexToHash("0xb88e48627fc28c701fcfbee5f6fcda1ef89d9a80080d88a4d59959f18887a7c7"): true, - common.HexToHash("0x7b80e52b92508b5cf1d13a2637c0a5d982622183f985b2a8fdfa8e0f010a07b6"): true, - common.HexToHash("0x2969c9046da80af58cc8965a952dcf04ab5e4ddab997381215c9f7a9594fc047"): true, - common.HexToHash("0x2a056f66f98eef5884dc2a470764eed8d86d2b0582149b2eb2f1a6541d1e8780"): true, - common.HexToHash("0x1d272b62b65364c3a3fbad0ba49c1caec0f31fe1f3630d1b80193e6532ed5661"): true, - common.HexToHash("0x796c68c8aba3e78137917ac64438f0cc54fc3c0b89a3c81327857cb5a5f4c7ba"): true, - common.HexToHash("0xd6b23667a2856527edfe518f63a16cd8bd8709604f3ed0523dfed3853158c828"): true, - common.HexToHash("0xf17b49b984b537c109392d43ba7faef73baa6b0bcedf45c8d1795fa9d3fe07d5"): true, - common.HexToHash("0x39444ec8daf4af5b4c7f0b18c83396acff8fb8711cac1d49e5006c07de39fd51"): true, - common.HexToHash("0x02c65cc36f6e323baf4528b00448bec32956f8d9c3ce51465962067b81040d33"): true, - common.HexToHash("0x92951d1db7bcfee4668cc08a6ae61c9b516c1b8f782e547df6d61b04fc0c6d83"): true, - common.HexToHash("0x34e600b73b906bc8b6087394fe268e35633c0e08f3f095f399d06eeae84c28ec"): true, - common.HexToHash("0xd2beaa67e368e0f3f1727e664cf74274ef9fa30bedf2cc3c38f965628f632ef0"): true, - common.HexToHash("0x28a7d439c37a7873d7385536344fc8cd839f3f14dad59c1bf32a1387dd32e35b"): true, - common.HexToHash("0x957c9f8e0e6feb2cf6dbee17cc6b95cde167f721d057f74574c2522163c21fa7"): true, - common.HexToHash("0xca162174d03b35bb8898bea38fba99eaf63658cb92fa4c045ae78c8d2f7d33db"): true, - common.HexToHash("0x8a59d3c41c7a85aa8641e9e014989fbe240800269055ed096dfa1098bf7ac1f2"): true, - common.HexToHash("0x21d6b19c3bf77065197d609fdf34ae7800deeabc4293d69052f074ee9a8bd6a9"): true, - common.HexToHash("0x04548da69e70b60df023e0644f0ca13021718de14359e9a8d4ca451c6d39fd98"): true, - common.HexToHash("0x0878fa0c5f7823183bc0ea30baeab1a096291dde2820870cabbe6a1fef1e379c"): true, - common.HexToHash("0x0ca99e8645a6e51eaf9aab9ef2bb4291de94e66c15023d7ba039318b1e2213d9"): true, - common.HexToHash("0xa291efe01977313a4a70ce50cb831f5b57f370681dd575b15213d0e93fae9738"): true, - common.HexToHash("0x5c24694c35c553aea6f7d7ebe071c789f22f634058ba5ea3db205a0c0f1932bd"): true, - common.HexToHash("0x8683b2ac286e3e962b63864fc807cf2e6f8eb6c0ed5d7b97bf15cf5d70d2afae"): true, - common.HexToHash("0xf89b66d4c8410ec907c9f558e821333780747f7f03581329c6c5ee2214a42c03"): true, - common.HexToHash("0xd1bf38b63028544e2444b837936a61605ced02ac6f147cb265724aa8560bab19"): true, - common.HexToHash("0xe99ef416b3afc4093bbbc5d12f56cce2f7a2af823c17784a0e550520dff2e0c5"): true, - common.HexToHash("0xe703a92dd44f70140dbabb19e623f75ce62ccbb6ba0a7846d3d40046727b3c1e"): true, - common.HexToHash("0x44905f9f856212bf6dad4060a6d9d081ebdd4911c207a0cc74626ea66bdfe186"): true, - common.HexToHash("0x1a11213fffbcec1701f867f2ab52833628ba2601216e7bca755d4296e9b7ccec"): true, - common.HexToHash("0x4c6c1cb38559b82c4a898fd3524ae7baa53d0f5eb9fb5f59ea94f8fb044a886b"): true, - common.HexToHash("0xb1d209bb9b739a9748744c10f3532735365864c139d74cbf10ddcaee6c15b8fe"): true, - common.HexToHash("0x798e72a48653cb6907577bc9b812f8a88655fbb640106d7217e0372a22afa5a2"): true, - common.HexToHash("0xdc421fda5b73239b44d59091244e47876d448110e43bc152b53a80460e63861c"): true, - common.HexToHash("0x788e96a90fd0f3d2b83345903bf896b2fe4536516965da43a350254107189c30"): true, - common.HexToHash("0xff9193e448f8fc6ddd4029ce13d100237ea337d01a223beb2fabff65596ae83b"): true, - common.HexToHash("0x4cec7dcc6137fccd01fa5426e3ed14aa72b822ce6d9244b6226174d2c33b9810"): true, - common.HexToHash("0x54b9a2cd49e6adc6e6a93e7010d320778e5e5297b2f244054b45f326bb8bd780"): true, - common.HexToHash("0x085faaaf102818381b5bfe357d6e606326a112045fda627935df16dadaacdc6d"): true, - common.HexToHash("0x7431d9681e585733287bf0c1a86d75381a7112221fb37b365d46b6068619fbe2"): true, - common.HexToHash("0x22b186e450ec1b67b43d5a45b310327ce7cb24921617b36755426ffd26afc9a7"): true, - common.HexToHash("0xe50a18fbdcc7a143a8410162132b0a3ad9b5b9c2648e013c5f9f003f0b8e5023"): true, - common.HexToHash("0x436709e9a90f43ec0cff7e400177614b0eb59c52bcd9a2deb38e7bd958b0e0a6"): true, - common.HexToHash("0xdbfa65aaf9166af249adf7d6d55017483e24167f27cc2182006aff45f91701c3"): true, - common.HexToHash("0x0ca34c59ef2476943a37ec2d20df5bbafa7160787eef063462acfe4a04e513fb"): true, - common.HexToHash("0xe16f5ef6313b02e6fe25d9b3dbadc46470193442f2cf4e6a195ed6035d8b7623"): true, - common.HexToHash("0x5c96014758c3cda6a615ae8221cd83653f75695da22e0d2ed455b8f2e6eb9228"): true, - common.HexToHash("0xc45974d35421281b21cd36cbe1e451da7a5a224a05448c1c6dc28c84ab37e73b"): true, - common.HexToHash("0x2adc4390061c8dd4712d54d00923ba7ccad8b39fb384ade8847b732a4081357b"): true, - common.HexToHash("0xc3cbe095cdb43d46255920f68699080f5feb3fcdcb4d1311ea7c33439f713968"): true, - common.HexToHash("0x91d812199790398cd05c23d38bb7e2e766346e40f3ad159845c3b7591e3e2089"): true, - common.HexToHash("0xd1bc6d731966ee26d98482340fd0b2ea86e1b9816a2599c788e13fdf2d041b05"): true, - common.HexToHash("0x454dea0c7bad58d390b06583e5db000bc384ec7c27254c865375db4907d1aa47"): true, - common.HexToHash("0xe90065d0cfdb7901de728aa1bee51e7dd7ec69f8d06a1f5f1633b376b2c1cfdf"): true, - common.HexToHash("0xb176ea1c0b2d4c810686a82f30428730c4952350ed2f73bb7cb9c5aa61779f06"): true, - common.HexToHash("0x1db88b6e45f734955345c6a9cd8f19af27ec1ffd9ebeeadd18664ee429c0e56e"): true, - common.HexToHash("0xa15334234c741d908ea17e628a196acf06eb08a5491d81572c01fb8432e5c74c"): true, - common.HexToHash("0x6d781cc4eada367c089ebeed7a1b7a05d4684eb17c333724bfe63732cf02270e"): true, - common.HexToHash("0xba076f04a9f499d73abb3674d61b51261d541751c296269a2f25c7c7b3193f83"): true, - common.HexToHash("0x00a623160da81992cffca530defcb27887f78022aae9aca70552197c2698499b"): true, - common.HexToHash("0xc36d506cb3b8089506ae181f73b884ff3f65c0fdd53948f6bebd1f39ee10c476"): true, - common.HexToHash("0x98454db71ebc723d10cbfbe78d14edea5e797833e3c0613b6a8f02721cd519f0"): true, - common.HexToHash("0xe5dc1ff71c54630b680719e8b8b328049b8820bb99758e23a9a91b70ad27cb95"): true, - common.HexToHash("0xa8d0fe8bbbae33d830fec7ecbbb4841e36d4a2ce992549b58decc38f4f22abb3"): true, - common.HexToHash("0xb8a0d8275296cf8c3c79fd093d6bef813e6fa7ba6333308a2c19582ae9121f9b"): true, - common.HexToHash("0x0ccb478ad69766e54ed2c704b58dc7a204db269288ae8fabf21a3f65581375c4"): true, - common.HexToHash("0x3b9f54fbe660b232671fce7412b7cb89e6bedb50ec0c81c54338e43503c4c445"): true, - common.HexToHash("0x3a5d91cfaddc722e33a64cacb95d958b942aa88fb7c8ef4631c07c20efaf461a"): true, - common.HexToHash("0xfb31246c205ba747ca804992a9cab3587c2bb406ca34b3c0279f46f9a9487d4a"): true, - common.HexToHash("0x0c7cd1aab4bdc1e5bc770bbf3ac5208cc19e40bf83fa84d3b392baf06a7fd4a8"): true, - common.HexToHash("0x7e330ef9599521f0faa6d7363aea6515bebc25a473031d414ce4f17c4e1a4c53"): true, - common.HexToHash("0x2d719d50d914c379dcc1881897ea8097114cfb83588968307635b6234edb7b89"): true, - common.HexToHash("0x076ec78d03babac8270d1527f757ac7531504f726e435de48616598a38932473"): true, - common.HexToHash("0xf0bb8d4032102b02f79fcf90f0746093396d21584a38901f6ed3bf638f256fc0"): true, - common.HexToHash("0x967d8dbde99f15e1c34146688de3b982624d7a8729b3dd34c5e38bcf79cf94ce"): true, - common.HexToHash("0x96802bca9127c3a8385dc8925390933611cb541654e8a2234c0ac92a4c21cba6"): true, - common.HexToHash("0xc88e4078ef3833c13eef2703da3559182d4ae37496678b1dd4ad6f1d142ae900"): true, - common.HexToHash("0xbbc215bca5aaf024c6d103e34ad6046e0dcb95773fe3ccc95a030cc36615d997"): true, - common.HexToHash("0x095d7bd5caa38b56188c54ab33765e7240b974251610ccdefe583152a230652b"): true, - common.HexToHash("0x11e874a454e44beed3f9a8786658ec18358087a517978f4ef51879a0d413c5bd"): true, - common.HexToHash("0xd1c68d4e5728edaed9fac474b327f161685712c820132ce165fa5caea8682cd6"): true, - common.HexToHash("0xbd0bd7a2bfebece679b250e293ff7f4131b22c6385534ba1220dcb0f270369c8"): true, - common.HexToHash("0xabb88c573864c27e812859dd7b63bcfd5891d33a526f330fb60727bc744430e9"): true, - common.HexToHash("0xedc315d2461644de97188e9b9ecd56a7d20aa087faaf43322f02fb1059c7de64"): true, - common.HexToHash("0xf45c4c1b768fe1b85c926e255402dd3335a2c617e1bd8d86f138422826231715"): true, - common.HexToHash("0xd1a07b4be618951d139d1a0d96d6a44e1b51653470a5b6ed20a263af7632a31f"): true, - common.HexToHash("0xe682b93e5c4bb548fdcd0eddf9c06dab9a96f9f3db473b382f5448bd4fa3e775"): true, - common.HexToHash("0x0dfb1b2e157940ac241376877134762ab5eb686d9a1456ac8dee119be88530a1"): true, - common.HexToHash("0x0833a53974081905ee29e0f7095a14552f0092f9e054eaf5b06c7545d8894e28"): true, - common.HexToHash("0x43831a6537186c07cbd7ec47ed9b95d0207ad179fc7dcaf9997b952f8dd0fd8d"): true, - common.HexToHash("0x79b77e526136d46388a0d4b8cd91ee09d4ef4f0907c6ea9abdd7d5c5c46d3d74"): true, - common.HexToHash("0xd212801e265dc8e262fbd6aed30bcdb4b59a82fffc655e6243395419272df02f"): true, - common.HexToHash("0x25f95f03b420176e32699d6f6a7d872b3b8f470eaead9649e630fae173cb8a03"): true, - common.HexToHash("0x8cffded8bcca5cf9950f37049b5cb4b072be0cc25d7ad947f11fc38cbd014919"): true, - common.HexToHash("0x72ca87b0499fcb24b51052fc473c3c76521a0d3148c6f306000a6cf51758f6f2"): true, - common.HexToHash("0xc2434b698e1e4f5ac10dcded2a6834388aeb0eba13bb61ac2b19ce6c51e83a75"): true, - common.HexToHash("0xdc6bc29d28eb263d1fb156dcc2080a8462c53bf522a06aa8032e02458b45b118"): true, - common.HexToHash("0x62cc4324483a5434014649c4d1f4559231e0a718eca71e04ee0db9073d5ffa53"): true, - common.HexToHash("0xb10cc3bcbd5310442d58622c68c27845e1992df05538a612e11e07f73edc4c9b"): true, - common.HexToHash("0xd5fbbcf8c7c9d039bcdde194afe9d59caa4e7283d641f65e266c2432f7b5cdf7"): true, - common.HexToHash("0x47e9cb92bf636f53faa003a3cb0764f51600fd97d84119ceff608b6fac8aa5be"): true, - common.HexToHash("0xbf89c4871af333dc19aba880258c0a64786d41e0466c4aef31f92214760d3ee2"): true, - common.HexToHash("0x6e3a701632a58b04d21119f4be6d50d1548b903ef2d63f84efb66dcb8b140f4b"): true, - common.HexToHash("0x21fd0a8d2c5a2959840a9ae4b73158943fe30579d2e5ad3290b86b623a7ffff1"): true, - common.HexToHash("0xdc4dc26deddee03116dff2e9ef4fb07f6371a27df7163a731be75b91a4c84806"): true, - common.HexToHash("0x1c5aefa23d22aa128157f3fbbbe8b7b73c59dcd8636e5f7c2bfc59e02b357bf9"): true, - common.HexToHash("0xae68bfc66fbad1bbeaaf08f179ab889a95fdafc40a230fa5489fb9ef2ccd3cdb"): true, - common.HexToHash("0x25fa3bb603c792d3cc48ce2c70560d1e90e1a527253f170672140ae7909f358f"): true, - common.HexToHash("0xcb4f8d58ae74e684568cdddadfdccac68a854274210bc212349514755abefb74"): true, - common.HexToHash("0xa0695bf540872bb0c8c007ef5da7acd6032637964435005518565a0c9dd07bab"): true, - common.HexToHash("0xeb1f24c10d3d6cd324472c1e56b6b28bc17e781cd419a0f3162a6f84d4be77d3"): true, - common.HexToHash("0x060945291571bc074e6f4efc1b1fddd16e0d8d812fd3cded59bc91073f51a3f8"): true, - common.HexToHash("0x5ef4920e76e25a67784e9e2600164c5ff44edb91a0eacae13455c795b8f74d71"): true, - common.HexToHash("0x00122f6f5341104d896bd660aef65d6337b325483bd706c15e4207126cb82485"): true, - common.HexToHash("0x3915b3d8e790bd088d67125d4cb23024b806a7867b9f55b7ccaa67886cfd803b"): true, - common.HexToHash("0x73721e18fbab5860f00020c5f680663bbf9f778885e13c19acb21e5bd3952473"): true, - common.HexToHash("0x39558c83b3f5c66279d849836c666d5d089dd0b37100ca6aeef17f4d5542abe9"): true, - common.HexToHash("0x2af18ef6c44b158d14b560b63cc310da3a674289bd6debd05398d41644e6eb86"): true, - common.HexToHash("0xafd797a5b0e3a5b5608240a29506eb3ea6b3146441fc8539ac81c5b8753a3505"): true, - common.HexToHash("0xf65c44d2f6f09a5f5841be6b8e64dc6e1492224474868058031931929d41636d"): true, - common.HexToHash("0x70b5f8c4f101ee617beecd945911ac87379636a9b2427a2ac3723d67370297a9"): true, - common.HexToHash("0x200254a13c497ddb3b89e86ad4827711d8ccd7c71d548794aab927ae49197ab4"): true, - common.HexToHash("0xdfd39e681fc87d6458ff05336c4be5a0e10b90be9a971a2629b118fc20d5bacf"): true, - common.HexToHash("0xcc3c6441154c414ecbde42c252e4d9afc09a14b463640feb9adbd2bc6815f445"): true, - common.HexToHash("0x46b6f7451de09b82bf04a21c3f0996c4142612ae27817e44af775edd6a253f06"): true, - common.HexToHash("0x9a93641192e10971f8d3fabf3ac73e0d95630f92b84b1b31b7fc57585133d15c"): true, - common.HexToHash("0x33d411707316d2a619531b1e45ce63a337ed320c69d5807158066cd69ff9dc32"): true, - common.HexToHash("0xf65b22453e86b525d2612c61396690a65e43ee5dbd253307cb819c6f4fdb71ad"): true, - common.HexToHash("0x40119de6b12f8227ca26127859710370959812188f1207ea37faf42fa508cdd7"): true, - common.HexToHash("0xc0ed6353138adccf1b81cb81d43f4a0fb523d6b17a755f295b7837a6be479aaf"): true, - common.HexToHash("0x70e60ceb5e5825461e7eaa5440c35c78a9e53d8d4ad15fe0c2cd002577a7376e"): true, - common.HexToHash("0xe57677e83f725bab2f03410e6bc0583e0c0c7a4fae0d7b813e38d625f1f1e0be"): true, - common.HexToHash("0x3e4d7598f9f95df38747062b58bd4c81f9726d5c1294cfffcc684c51091b8e47"): true, - common.HexToHash("0xad9f8c3025cbb3399c359ce102b4607539932488369273a816c26fe68f9955ca"): true, - common.HexToHash("0x8e530cb1eedd7b88b74c649692e5c7a6fcd0e0ad378a3234b4552479f08ab7b0"): true, - common.HexToHash("0x30191b654f7f29389d913e212ff90da6d10a93ab4da105827c1fc868ff3f5f7a"): true, - common.HexToHash("0xd5b6c141477bd10999d9888c046f3ee9589bccb06e4411af794ea65a21685f58"): true, - common.HexToHash("0x393705edd64b2ccfa7b7f2265325a944a8030a25f7a6fa4418daf13a529862f3"): true, - common.HexToHash("0x093e7feb79b54f883ef4dc89d935c621dd2a79335492bf2bc48eb12addbd66e1"): true, - common.HexToHash("0x21fe15393dde06204d1c3f3f32073c8a6321237e9f9d8b80fc094bddd7a2f94b"): true, - common.HexToHash("0x9fd7f7c6518763722eef5e7dd0c0af51a3fbab9484a86a526f6345cfe75de3f6"): true, - common.HexToHash("0xd163cc145cfc4d38582b48a13951b67ff1a1b7752f4bd3a5bb21862ce5b10b7f"): true, - common.HexToHash("0xb95136ff709f07afb2b11bfb1ff1f427b82188970b94dad8d8f2dbcb3c8f3eb2"): true, - common.HexToHash("0xdb3ffdabeab40bc3c7b41669a834e0cb04ea0d052795d57a28628f5ead96cd24"): true, - common.HexToHash("0x4580f596ec525362103e1d62869740cf971dfcb38f0a3954d4aae87fc3a6d28e"): true, - common.HexToHash("0x1e4e0478e1faa2d28a98775eb8bd1b20a3d38fb19d3bf5519ed39ce6228ebb7c"): true, - common.HexToHash("0xa24336196467c0f45583b107f4a0fe7719d8b433d593fa428671bc2199318401"): true, - common.HexToHash("0xe713e8138728ed45de3cd54c0498067123ae48a84da7efe4001cd486f843e3d6"): true, - common.HexToHash("0xce6d8e487cafcc53e49bbf2f60e0c24c5ac2f408a9df17ddd08fb8483fecce55"): true, - common.HexToHash("0x6f2870851eeb6fff3ef486b803bec6241894ba594b22296655780f41dedd2a58"): true, - common.HexToHash("0x97a1f1030abec15b4761c7bd7db282426d7ca0d150558a16ee310f168d75c3fd"): true, - common.HexToHash("0x9fc8e65a769e94ae43d3aeb56775ce99a2923c8be273582c5429a26754e6825e"): true, - common.HexToHash("0xcb9f6b35dbc3be113c348842a9ecf4269a04b949a54a5db3512197ce7c831b1e"): true, - common.HexToHash("0x49393f4c29660e6a49093851c08fb1b6394279687108642b56a186feb5629360"): true, - common.HexToHash("0x14833f87df25c9c13c1e817dd4c895b3746518a0f4aba0e12b108c2990084591"): true, - common.HexToHash("0xbc7e93c4d4e988b7f88ace69046f9b0666009c40fc5fcfea023b25e0dd79daab"): true, - common.HexToHash("0x483f5e206ca3db0a5e7eb39ec03687c05c6ab4b18d2e8a5fe63c6c680903c824"): true, - common.HexToHash("0x04c18ac3f2594ebedbc8869b6e5c824555055f15685274921e364f73ed9c8b23"): true, - common.HexToHash("0xe3ec9ba7dddc48a992cd1736f3005ab407406dcb265bfcd72f1d5c6e5e4972b7"): true, - common.HexToHash("0xd8d9009becf45caad0ed5a790f8e04f6a0469f0323d703a3e3af342975d904b7"): true, - common.HexToHash("0x51ff3bc6c5d19ed3906d57a8f61f25b438fff10188f2212610b90e5cbb544f3e"): true, - common.HexToHash("0x1d8b84f9df785f912ec77430a89c998b570a7388450f3889afeb8d7760daa746"): true, - common.HexToHash("0x6bc7b1d740fb294f76aa31381462236736863d4dddfb96407f02aceb8b843b55"): true, - common.HexToHash("0xe01a4db92dff886c73aae6cca2334a7f9cc96ab26347733c358d5cd70ea3305d"): true, - common.HexToHash("0xb331bfb66be35da9f602a3dc89e9c81529f4b246173fc45bb86864b2ef7bc268"): true, - common.HexToHash("0x40cfeb1f30119fe93dfce03a4c0476745a54858c0f9a527a3baec8cd5cb27593"): true, - common.HexToHash("0xd81a740d65e36f2cc93f9e1afd9c7a6021cf99eb6fbf63305e7c62abcf75b768"): true, - common.HexToHash("0xb02dfbcaa95bd4b6957c6b9910e33b93a92c868d7318e113513fc29714c3c5ba"): true, - common.HexToHash("0x6c6a7add24b3d64f4f04b74ac23aebe618652ee8227110aad3aaa2bf5945588a"): true, - common.HexToHash("0xc1c2e8a0d7ed6b1eca3eda0a8d373aff825a5e1497e46f1cc750b1bee41a49b5"): true, - common.HexToHash("0x5b4a69369aeba7f36aa59bac6f03824f1c162184f8e94668314892592d861d0d"): true, - common.HexToHash("0x8c0b8b1b2d3444ef76a0a1d333148b2af7a42adec2b8a306b4be73efdc33d0ba"): true, - common.HexToHash("0x1fd5368890b9856a80a6e657aa4b09cbc58fe2a354d97dfb086fb5fb943765e7"): true, - common.HexToHash("0x8563e6afc8441ba7bdd1af0ad28318cba214612398de77d9e71afa6799fabe99"): true, - common.HexToHash("0x44f578e495905447ec97caf00f3d930eb85ea2336e29dda0d8a50b84bbcaf6e9"): true, - common.HexToHash("0x199684f636b961519d8397861553fdc9afc94495f932a84b6066006346b854f0"): true, - common.HexToHash("0x518b06991c42872d29c7e32732577ee868b041d4e1b0f5897781f95ef51c3662"): true, - common.HexToHash("0x62024a16ab85f5f34a6e2fc700175c29bd653983e466d2a4bdb59a22c4fc6d14"): true, - common.HexToHash("0xb1eb04bea9ed0a461572e129cf58affe3787109279053f2b996cfd4f3a8a3f1d"): true, - common.HexToHash("0xccbdb5949a8f007582cf1e90f5b6597215dc3180b13b7e9848c8bf7993c29a73"): true, - common.HexToHash("0x8c7c6e7732abc68763d4e6f8bc7c5643679f775e66d05b9b0174af2930dc9e30"): true, - common.HexToHash("0x6f58979ddcb923773314b9b00c90927e096901847e87c935a567ff7af205bb7f"): true, - common.HexToHash("0xa613192d74b5ef38cd9ab813ecdb1cbedd777d94caeb5c4400a7d3544db9ce60"): true, - common.HexToHash("0xd300c5d8d2c958f765ce622147ca1ad4382874606369687b34fed9f09a515511"): true, - common.HexToHash("0xce7dbdc9c33025112e733b710d10600090f9803bfd97f291bd77bec9754f399c"): true, - common.HexToHash("0xad1193fab31774fa55720edd6430cb16dd2c4daacdf3d32ff7e24edc86620217"): true, - common.HexToHash("0x5f5b702eb7e85ff2cfa1ca5e02c11b265870f666e7454d701b3b945e6d929830"): true, - common.HexToHash("0xf629e85d25ebb98b51a23b43c19d96c14953bc2454d8fdaceb25d3061a452080"): true, - common.HexToHash("0x2795447e4d3b085272ea6111075129ba3b87d45bb07620ffbdda22d46ffa6024"): true, - common.HexToHash("0x1b3bd186bebaa04fb9b0cc262697f8fd442f57f843b7af8390e3403ca10b9aa6"): true, - common.HexToHash("0x0006b9598bfa0c251323729ed2bbf61402441ab7762424a5f2be56d426ee613d"): true, - common.HexToHash("0x526e3f53bf140d56f38aad9c1187627525b470573a4535b7972ecc7487c7a60b"): true, - common.HexToHash("0xed58734462e45745bceb11c71ca1db8782f7cb8ce137a0a076e7a68bcf5f2c19"): true, - common.HexToHash("0x7f24dc67f5a9ab97d5758e54c98df1e62d6871ee72370755fd226314998c0f22"): true, - common.HexToHash("0xa7b23400be5de26ad8662ab50b6f51b77558d7c90e3fbbfaf94f611ac33a71dc"): true, - common.HexToHash("0x63e7323e2458c5058133502ea8a152272326f8aff0efcfa8316020147896c966"): true, - common.HexToHash("0x3eef9bae260c040574cf31c396130b22ae00582273daedd4c8989c0287d493ed"): true, - common.HexToHash("0x6b4d42dab550e28a4741260a39b6ae1e9f751d82d53f4ce4deba9ae2230a8bd1"): true, - common.HexToHash("0x71fa668821b2ac5f95181612620e71cb9f78b4402b24abbb1fe758e740fb6e5a"): true, - common.HexToHash("0x4af60a5d5e6f457c3cbbb4001c4f37fc91978e1f7c3f1a579740cb9f6d6f7f43"): true, - common.HexToHash("0x09dff8f373483c66564910dca210ae36e2ef04ff381a433a8dfd2e6655696626"): true, - common.HexToHash("0xc4f0f2cd977e3bfe441854e2c927f1db6d2b918bb3002e49d8e5908272da9a2f"): true, - common.HexToHash("0x011df9fd961f0aa8c81e840eb9f1c2b96bc3fb3fca93b31e4e13dd39f8ecc340"): true, - common.HexToHash("0xe01ab0e286f1afc5527b62e7e37b0f9fe88a6fbb16b5282e9424bbdc3373ece8"): true, - common.HexToHash("0xed6863e185b46f18793321718c0df2538110b8663bb39edb02d07daca61ee94d"): true, - common.HexToHash("0x2a076a1721d45c07f9487f6d59bf0dd2beff941673cefd9ecf1fd6a54e058751"): true, - common.HexToHash("0xafa443f37d3bc8624c60d241d5b447070ad3a161597a5cb6309c41408722b719"): true, - common.HexToHash("0xebc11e229be5734d0426ef487ff466a540af38ef077436f4149354d6068048ae"): true, - common.HexToHash("0xb19043b2fefe9d9a4d1cda83d3e3945a2dd57d2bc757a969acddb2449120755c"): true, - common.HexToHash("0x6fe910139fe9737ded2bed64a8d8ad1427e3a6d53351bd2c68ce40cc0110a531"): true, - common.HexToHash("0xf32d73a5a07f6c40373b3dd0fdf1d7625c514fe5f54f43f40970d6b71228d233"): true, - common.HexToHash("0x6a906dda6d1a2b59d89f128f200015bb2fa4ca9f49686bb98fb31f3ce21121f5"): true, - common.HexToHash("0xacb9e33e6dbf67848ac674125321552616c6b542b3d7d15b3f3f62aacd0c24de"): true, - common.HexToHash("0x25f17bd45d5ba1c6c36aec502590fe2dbdbf16325ab22581ed62c8f62a6d1ffd"): true, - common.HexToHash("0x1024ea7e77f59e6b0687ad8ac3fac3763a5e7c53df74dbe278b9f84f5c30fc03"): true, - common.HexToHash("0xaab29f86565bcb4a5d9f770990d05d26363af6fe3497cfe6fe426745dd34926d"): true, - common.HexToHash("0xefbe805a36e86e632321161e63f7150ac4e32b08a667ecda089579607f33b4fc"): true, - common.HexToHash("0x734a8edfe7470b4b62fcab3cc95496b0ce0d5c0d7565ece45a565a214681a052"): true, - common.HexToHash("0x4d05ac3560d01953a16d790f71d33091b55f0330f449a3e8f2dd00abbd6c441b"): true, - common.HexToHash("0x2c5f3206049500fae6f0022217255ee956051ad3cfe627cf4fae643278fb4306"): true, - common.HexToHash("0xcb638a4be5ecf4179aa1cc3544b65b7b93af684b825ec0099d86631790df1930"): true, - common.HexToHash("0xfac77d74419eaed639ab283f3e700c6392582c50d8c66a87632b5c4542f31eee"): true, - common.HexToHash("0xad7178bfe5d0020af9c5fa0d8cb714d53dde74c3fd60a69193b684940ddf25f0"): true, - common.HexToHash("0x0b3c93fbb4b81e749f057ae648734e38a779f5c576055960b5c9844b86ec60eb"): true, - common.HexToHash("0x63afcb1400561125bcd7fff3904c451b0c33f555a9fef47332768b1adb23ac0a"): true, - common.HexToHash("0x7322a70056904102cbaf83cc2094eb900de14ec2db0e9a3988c6b2e22f82cc78"): true, - common.HexToHash("0x7bd27a5debdea0a622a967cf5388a927ab6eac6258829d0469da8625a119aa97"): true, - common.HexToHash("0xf44bfe2d869f6f47cfc3369333688124787131cc7e7e8c8fde1ca784914583b8"): true, - common.HexToHash("0x680b0cfde5b67686507d4d6d4dc7a1a3bcafa5cbecc5ac8ee15d4ab14dc2b247"): true, - common.HexToHash("0x6caf37fddc5d7d7479bbb9d12762fa6b18d45aed3c0ba569778f4549c2165cdf"): true, - common.HexToHash("0x688155b8af79cd592a8fab9d8db79eea1b93c673920c3c6b31b6930b7dd63ce3"): true, - common.HexToHash("0x0212bec5087fb4ed5c861631eb528f5cd9f452bc9e14e946d8534a8d2e727cc6"): true, - common.HexToHash("0x4d3ef9bb6faee4b805434161419e7e410f5f1d0de10775093ebc681cb7085082"): true, - common.HexToHash("0xc3466a9c3e181c0e213ffd04fe8fb3a14615e4777890b9e38ebbc6a2bb16d4c2"): true, - common.HexToHash("0xa48f96d1c962e0f5edda672812293521bbcc0ffdb5d2d36dd351080ad616a9d6"): true, - common.HexToHash("0x96380782c0f47854d67fa10278d32c3c4d9f6855cadd7106553e60ba5b6ff6bb"): true, - common.HexToHash("0xf86cc099c4e7a1d61b36372eeb4ac04e74a80773ae15e55833716e27e35383fd"): true, - common.HexToHash("0xb4c4ae557ac06f42f7ce8ae1f7998bc3c7db4b08d1e7661b624a7e3b0fff0533"): true, - common.HexToHash("0x5dfb8b5dc466ffc8f0aaca74647c8166914a5459d872c3db6a80a77627820b2c"): true, - common.HexToHash("0xcc142c10670be24096b13a699de0d914e1a3c0c515ccc49f9f37816e455a4033"): true, - common.HexToHash("0x14cb9d3f699ad39a937f46a5c7b1fcbddb4e09fd1452e6701389fc3dd91f3828"): true, - common.HexToHash("0x5e664599d4f1859205c5cd7486e15455dfabf774445e2b47b87ea7f6fa38827f"): true, - common.HexToHash("0x5538fb4a4690b01064063f69b532b3a59913a891b5a6643ad373b7b8e34faca6"): true, - common.HexToHash("0x5d33427f81166cdebb8c2ed4bd4f934b05a069454167e0b5623c9676810dd2f9"): true, - common.HexToHash("0x1ca3ade542b05360ee6659a0992fc2903ac1ccdee28c8c262c636d1f81816787"): true, - common.HexToHash("0xd0fe1f276a23d8878b2bc2ab76235f53f7c2c1b1c0e2c0a09a756615b65074b1"): true, - common.HexToHash("0x24abea18b8b6ab32a3463772952c34f908d5289af54190084c415b58d74e1697"): true, - common.HexToHash("0x07e533c5cb847e3cea11f0a3b7a0da8431b4e2768d822cf2d4d6dee79e05f79d"): true, - common.HexToHash("0x6809e0fdc42c79c56939247a5b8b2905de28d33b7a99e83e177c9ee471b528f2"): true, - common.HexToHash("0x9dda1948fb6c210ad6d61b4e6bd79cd87592fb11d035ab55f144742cc15c6173"): true, - common.HexToHash("0x988192b6d9f43261a55bad1a1d49b419817fa08d757601a0c8e2d42995eddaf1"): true, - common.HexToHash("0x56968b20ed7711bff34222b755c8c125ade7c4f6437d01928a426e364e57cc8f"): true, - common.HexToHash("0xd0b4a2a51194a40dbe41c7aeeb730eb19bc4d0183862a8c2197a7f277bb4f69f"): true, - common.HexToHash("0x457701312e7c92143f4699f98641a3756dcb599415ddd14f2a86054be4865c11"): true, - common.HexToHash("0x2a1ff68720a6909f54f3457750777b2446cbd4bce7e1e8545e89a2e11296a90f"): true, - common.HexToHash("0x6eabde49032b9adf24b862c14076521618a4cc89a928d113bb910b88cf20a11d"): true, - common.HexToHash("0x2c0b8db406a504271097f26681a3930355104a071e4b603b59607242548811dc"): true, - common.HexToHash("0x52cf5b5cb0113d94ef47670a92fb079051dd573311bae7af7147d52bceb3b0c5"): true, - common.HexToHash("0x65cbef246124076951e64cc5e4052c65fc7c77576da3074e34ff0ebd7acb37b1"): true, - common.HexToHash("0xaf5f8b307fc7127cf0cbbcbff49b63ae59a324b58a89f67a910c75b2d3435ee8"): true, - common.HexToHash("0xd2a9dc42856a5672147626dd27dd19fcd8e0ba5fe72b564b8bbc5326d5fc2a2c"): true, - common.HexToHash("0x9460720efc37120c8de2ea80933d0fc71872a61861bd85bff050d586cf54a9ed"): true, - common.HexToHash("0xcfecc6b7b97f6b4bd460cdfccb59e4b7b6b58b193772dff9e85625554ab201be"): true, - common.HexToHash("0xad455ed8558af13f7a499648f01a387211429899eae15dd104a905145f9d1a1f"): true, - common.HexToHash("0x3535d6b32aef9169dbe51742b5d9017f47db85ae432f9e6e4e41f4517634d736"): true, - common.HexToHash("0x63a02025a6a6fcef72b66d3318ef2d7079a8b5635d5a2fe14dfe8b903cf65b5e"): true, - common.HexToHash("0x2fa3746c1147125b42e1a25a0496065eac097efc4bdb27edcbc3e1bccdac8462"): true, - common.HexToHash("0x7172400c519ac808cc689651d5b1fe77d30243987694fba9843ba08f85d6ad11"): true, - common.HexToHash("0xea64ff90d2b1e5dbb57787c6fab1c0b594e5e32ea27339da006585c75c2b4357"): true, - common.HexToHash("0xec723c77adc6ad8f13a77ee48646ac311550ded28b2c4ce6cba15b839d798ee6"): true, - common.HexToHash("0x4a71e7bdd45f6de7686f707f4e7e296e63c46e62cd660ee77c6684b69dbf803e"): true, - common.HexToHash("0x031c424bb1fabfeefd346d4968d340385fe91dff07dd77e595f5f762a195ab71"): true, - common.HexToHash("0x0977d11dc34626eaedd0424a0a0c186a04b3453e4bbc3e5aac81e9d3ea363d9c"): true, - common.HexToHash("0xa173b9e9bdd010d280da197f2aaa71604e8c9fe0ed02481f9c11b3cee6a22e9b"): true, - common.HexToHash("0x3b65a8df3d7f0ff287ebc531180975eea5cbc90b46229eb1e266d21fd207b27b"): true, - common.HexToHash("0x526e9fbd11ca1605d58164ecba1aff69b1419e6dc31297b12aaa00555c725772"): true, - common.HexToHash("0x4123eb9d0c826ac9e9d6de01a665be1f39d0885904d2554adf8cea8149394d42"): true, - common.HexToHash("0x02d4c7298afb1633cf3f30523374711385fc08541e9d1c7f6e8d049f25659d99"): true, - common.HexToHash("0xe9ea49ebc994be9ef11aad1d72e9899793818d963fdfc96363f9598db2a3a9e5"): true, - common.HexToHash("0xba8e276dede014519b6f4addcb0f9a6dcf5bfc8781ce59bd1b4c7facaab291e8"): true, - common.HexToHash("0xb50debf849b9932c304cecc0eed1d13dba6a55497ba5c7c81e1669d5995dc33b"): true, - common.HexToHash("0x52e7ec30ad36f9b59a1508eb38b1c5525b3ad1f93f9b1746b9b81354e9285a46"): true, - common.HexToHash("0x7c5aa1028fbf3dde52dea1b719777e6fff911fb65e1375e5dfbe2372b61297d9"): true, - common.HexToHash("0xa4e10c97e62419ae83d212cfd907261e077471835a305d5a026e2efd729197fb"): true, - common.HexToHash("0x77758e7f3587f884a988a9e845c224bd2b95f7f076e54c081505dc1874baf255"): true, - common.HexToHash("0x4d215bd36418dd5327789aa214f7accecd9b37f7f753c138649590e72fceb528"): true, - common.HexToHash("0x25ef61ccbf45f3e6da6d39518fc7a4869f688cafa37c310feab8a1babfd00a27"): true, - common.HexToHash("0x3919ccd0be7d68f05bcc48db6246d5acce85510e241554ed87ed046df93c55f7"): true, - common.HexToHash("0x337ab096bcd012cf5d8e0804e49c5a11cc0863a052ac341d7914c8f1821c4d31"): true, - common.HexToHash("0xc6c9e77fb4af50772a061f6095bcaf77ee9a362e35147e322b532b2d246c2a33"): true, - common.HexToHash("0xd1233a98aab494b019b703b4a040115784980999fa39d8663fa55673a5ab0f32"): true, - common.HexToHash("0xa6470da5da6f5e1bd43c778893e1d0844460766c93c0329a6baa24e736f62d24"): true, - common.HexToHash("0xbd7a7fa7876dff99b1fc8b0235201ca81f7b48ff7c0a85acd3dc8e54ebbc4f9d"): true, - common.HexToHash("0xf0654ff47a50f34d37d5c51c75dd217e2164b8ac403727692b65acf4b584688e"): true, - common.HexToHash("0xc57c33768d364696df06cc8d35913fac428c5c4ad44937fe210bb06f083e92ed"): true, - common.HexToHash("0x427e7593a7ec8b328fe5140ede3fcd8ff00219d2a26f93fc741674345b5043bd"): true, - common.HexToHash("0x06b9ba1ddf6b6170971b8d31da81831aecf3c9de4451c0d643096fb4a07d2c91"): true, - common.HexToHash("0x6280f6ad07ccb000464daa55acd02f77fbc53aa1e1600d816c15f9263b9689da"): true, - common.HexToHash("0x7c2f2bdd71ca78db0bd17d4629f05dc20ac6a40b42cda6e2d348b0310f61e3df"): true, - common.HexToHash("0x59ef1b508e71bcb5548c90d0c70492cc7504a919081141974f02a9177511dc23"): true, - common.HexToHash("0x97c1c20dc98241e7e191e556702ebc93e325348c58db3d96d28186697fe9de87"): true, - common.HexToHash("0x6906d2d29ceedabb60aaabd91579184935977cf0b8f88e71f99a15a98510a8b2"): true, - common.HexToHash("0x6a79132d69e4f0ade488db33007ef26031b8cb3c0570502b794d4617b0633ce8"): true, - common.HexToHash("0x12b19bb589153df21da0c9978e2ef03765ee22844a9cb7af32d9cb888df5c560"): true, - common.HexToHash("0x7386169cbb0b949e0d3eb1266f3b40ab418d6f6957ccd6f1ff5abcf4d1b13ec3"): true, - common.HexToHash("0x0f9fda80ff4519fd288d590351e3b9baf1f799ca48f3117751958853f42d0a0b"): true, - common.HexToHash("0x794661104bff9bad8961044db0d9b18da641c51851898ce53944213fb69df607"): true, - common.HexToHash("0x8067ee87fd0a26cb8db9c38a214022f9fe6c043a4308138e690886d3baad96d0"): true, - common.HexToHash("0x1d2e8f4e7f802403fb15f1431e168d5b64bd93e9597b8e3863e8c4f134e66c9f"): true, - common.HexToHash("0x05e3bcd5f5ea3212b112c5b10f873004268cc9ee2bab63c5b253d590782829c4"): true, - common.HexToHash("0x0344bb630d31bb89b57c90ee079f930333f63cc984f69e2f1136b39325ae54ea"): true, - common.HexToHash("0xc0bb2e89bf5c98b96129402ae06f9b529670c221d93264c57f3eec7571f17387"): true, - common.HexToHash("0x84b6a03fdb02b2064a1f611417575a19bfc656d826a41498d6cfce0ca47613d9"): true, - common.HexToHash("0x03d46f46b78d889e6d29b8ade4fa4d062af22d81d35010b653aa2e040625aa1b"): true, - common.HexToHash("0x0df7d75d00ac951d4e3da5de42934c8db39134bab4c692cde438a60b3d79164a"): true, - common.HexToHash("0x7a4552e0563749a380aebc32be369f1b15c0f0d9991c6e4eda21d941675d727c"): true, - common.HexToHash("0x799da67cf9dd599c500eb6c42cffa96046c9605663daf9060a92c4570ca009aa"): true, - common.HexToHash("0xa2095db62bd1fde792484c23f39e0d3b26b6a39b42eee1d7d40f2e33b2b28e61"): true, - common.HexToHash("0xd20c025e069faf0a1f2a3a4103e64dd2f5ae7d2734003482eb1aca9b6f6d9a59"): true, - common.HexToHash("0xc2261c3ae84e3e35b391fcb1c6d8ff6632e950c6b14e6f011e600b6b48050093"): true, - common.HexToHash("0x1c21bce5054a7b43b4183ff183053594dba48969306ef4956ed952de29758d99"): true, - common.HexToHash("0x1b647c2f40ea4656ba55f34b029ab805753dc874d953a1bd5aafb9fa1fd058f5"): true, - common.HexToHash("0xc7234ec4ec8eea000364e61c99492e33905bb4f3f71004347eb25196dc7d01ba"): true, - common.HexToHash("0xc487637bdf7a6dbc56ae9f8a4cc3fe90c3b32ad04f7a66454656d5e7c16812fa"): true, - common.HexToHash("0x70cf0c46fa305d67d0a1cfa3b69143b02f32e9124658555b4f741b1aaaf424e9"): true, - common.HexToHash("0xab7750051b107d3de6447fd92a213c30ff2f219a2412a46b54becd514d61a012"): true, - common.HexToHash("0x70c731c9ebe8f61d41836ba05c7c9bb98fe7092cdf5e79e455d5ed27f3d70b02"): true, - common.HexToHash("0x8808519f2d406bb5c80ff02786f37cecdbade514cd65b6f311f9e38b6799e555"): true, - common.HexToHash("0x5edf8170a87dc3c328fc8ee87c1a214748e2947d1d507197467bb4c6913577df"): true, - common.HexToHash("0x8a8700de460daa8e11429c520232e884bc1f662fbae23b9bd051e35682349b16"): true, - common.HexToHash("0x3ebc93e6bd77e92a2ac4240f9d0bae39538103661e1db0b6c2d69af543132820"): true, - common.HexToHash("0x33cedd76a375007ec49bc9ee2d63227f6375a5c13259b79206dc92b0565a8b49"): true, - common.HexToHash("0xbd76868e84f8ae1f6de005045d315247f8d99c523cdc6d8bfe8b74b6e090f3fe"): true, - common.HexToHash("0x4139a5575f02b4b998492b6fee50a9d5f8e7167d8656d524a403b8083d1a5766"): true, - common.HexToHash("0x4dd313fcd7b07fe0ae1b5b6ad3a2758f2aa8efeb580fcae1fe5ce325cf9abee7"): true, - common.HexToHash("0x8171e6197bb259f7c3fa812b5e3d85fd3bc9e1622d3bd634df8278cd93594be8"): true, - common.HexToHash("0xea72fc3b9179c80ac06b587f8a1f01a7692e66a05accc9df4d64c1dbcd921b09"): true, - common.HexToHash("0x4792a772c283d6d6212568ab72a05fc0e9bd362a3d3e83f536afc084d31759ae"): true, - common.HexToHash("0xce097d7774828ddce71811ced710817eecac0d110a4909691e179536f8344dfe"): true, - common.HexToHash("0x7503b9b08fb129038f331960fae03544ab83618a1fc6d8177b0e3867745d73d2"): true, - common.HexToHash("0xdc1cd465a3c64ef08f94bc0bda9b79f7c16370ecee7268210a09cf86bf50affa"): true, - common.HexToHash("0x4222ba54623302c11f3bcf1cc05295c2bc27920575078888eb70c73e741b48ac"): true, - common.HexToHash("0xd1f6d8a6a1b6501e6abccef945e2244bc8f63860ff55cbf61ef6188ea1057b4b"): true, - common.HexToHash("0x175330c05839e40eb2f4632c9a335164cb17d9ed7ab44048e671003e09446afc"): true, - common.HexToHash("0x10b60e7c7b4e5e82dec87168ed4b6546b168ea22aac8d7ce7c7f4dc65b7393b2"): true, - common.HexToHash("0x417aadf05e4d2dabdcc2a80fda119f864bfdb1a6d4facc8cd73b6246f0d380df"): true, - common.HexToHash("0x1462e7d51cd7403bceb0d9c8766699e01e528aa88b33045435f9a0f0e7f2c922"): true, - common.HexToHash("0x59665a7c0e82972dc195115f735dca7d5ddb4beceea857050fd8b0c909fad71f"): true, - common.HexToHash("0x53566815bd16a541946d04297d4c6e573dde3e4dd273eb1fe48825f1dbe5a3f0"): true, - common.HexToHash("0x444025b8a162ef3934e19587e8c9d707c8c4f2983714fbc12ba408f4459d14b7"): true, - common.HexToHash("0xdf963a6ccbb0be77f756c7b731fcd54568e5f77f297f9a17d8a0cacd60df922d"): true, - common.HexToHash("0x4453fdc82841cd9f8a287d98ab6d1a746eefae0ebb2fce04cbdda81effd55f68"): true, - common.HexToHash("0x106fb26e0a018d4522c565358ddc79395c82c4d65b50965283227782d2391c15"): true, - common.HexToHash("0x59564cf9eba5c4a667228008aecd00c2d55b7e3c12afdcc32313aa5c2ffd635a"): true, - common.HexToHash("0x6f7834e53aae2990682a68f8cf7b0b4d536c526ece376ad20e2433dd8e1c0b01"): true, - common.HexToHash("0x8f08750b26d51102c2857a150ff05bf419df59d7712b0ddfb56ba74fc8b23bb8"): true, - common.HexToHash("0x08e510cd464d354febcffacc3ab1c103962ec10104a6c4e802fb49b93eeeeb77"): true, - common.HexToHash("0x25921e4df9936259ca9064360821d6977f647e412b67c7a37910b6cde1690912"): true, - common.HexToHash("0x6debfef74adb54fa47dd5bfbba1b20af27fb85dc8803b0eb30d5aee0fe417805"): true, - common.HexToHash("0x6f81d789f5a9f462e0a84bf43b16063d0407df06a9ff624062ebe73cda59445b"): true, - common.HexToHash("0xcc0e2d2484b51f178cade23b8ce5d32085ff02fd6678c64cbdcc44a2f76a5442"): true, - common.HexToHash("0x173a3e32ca4a2b9c9c9950cb7f48040253a14c62711175d65191fca0c244590e"): true, - common.HexToHash("0x399581c245603ebdb262c0e5ae67114b6b0240d1f6511bc79975427b7745e3b4"): true, - common.HexToHash("0x4d77c52c1aabba8e57489c935f85ff771bc79c50daf1916d1c5348f4e89ed978"): true, - common.HexToHash("0xca82290bda03509b12a5a6a92ef28ad8c0d0219bb5c8db78834036c99143c7b8"): true, - common.HexToHash("0x222016b2ccba4838a43b348653c6d0f808003491b8644c99f0f5bd35b5e565df"): true, - common.HexToHash("0x86245c02a2415d337dbbb40dd77102bbe0f1d560c31a578aba54712a90e5dae5"): true, - common.HexToHash("0xee8424475b58f4688b8d761219683b69e3d0e06a2b13de529d135218cb97daea"): true, - common.HexToHash("0xb00b353c92c9e460b7b1163a6147b0cca9d8f42baf38952322d433e1e531a4d6"): true, - common.HexToHash("0xaa78e5d5aae244e826206bacb7cf2935d56d57684336f54069c2980e3e1c095a"): true, - common.HexToHash("0x69447c8291d61e0327f9765535d27d2eb43d33a538afca80490e7e3895261139"): true, - common.HexToHash("0x2534dbcc4ced9a9763145797eef60057c6e4ea196b99a3c652ccdf2d3c548512"): true, - common.HexToHash("0x9b67e206e2cc875e6a169e20e234cdbbd661412e7c4937defa64905343ef4ea4"): true, - common.HexToHash("0x931471d4f717e62a40e8552fe78552f4cb1414b1c615ec0bdbdb8d4292d864c2"): true, - common.HexToHash("0x2d728e0b09fa61a7553c5173aa3a6a1ecd05d02d57d188adfd160a8a48beb5d3"): true, - common.HexToHash("0x43acb3f0e487f24973c8d3edeec8b9aa3db8b42f07613c906dae3cb3e4fd73ce"): true, - common.HexToHash("0x7d3a7517f61af4249a2b2cbccaf5b55dad361a7065dbadafeb11e0a557211dd7"): true, - common.HexToHash("0xbf6a104d09fcb47a885c5f32a3dd9bb577d4d8a1fa4ee2d96048fd99f95cded9"): true, - common.HexToHash("0xddfdb49c09f7bd842d4dc35c94ba9d55a57f2cdce626ac51230894797bb59b53"): true, - common.HexToHash("0x4d3320b600b50132106c4a7ed988e1762f8f88dca4e5204f246ff775a14f18c1"): true, - common.HexToHash("0x92cbfa5c76666a3ff1eae937220c860abd062f0d498f1b56d0fa7cfb06ea452e"): true, - common.HexToHash("0x12e527a583c92131dc4e535e3675369abe90fe6a33011a022b0713bcbf55941f"): true, - common.HexToHash("0xd7e873500b68a20701d4dec17dd345b587331c31d85a0839518db65f3cfb540b"): true, - common.HexToHash("0x4bd6c34c5ca7c1a50012cbe999d6a05557da48020feebe49050c484750453c83"): true, - common.HexToHash("0x291ae91dc8ff77e857747905199672c60ea9785a67fc3ecc80d60996cf7302a2"): true, - common.HexToHash("0x32491885ffcc4a0a4416251dfbe56571844324b98bc4249280f50c0388721982"): true, - common.HexToHash("0x97a2f88940a0095fd902d17d6e2adc88193ad9333df7115a0926c7172d818e8c"): true, - common.HexToHash("0xb05957eafa3b426de80b9ea312b478209a7ab12f52a844c257b46442f9253c4a"): true, - common.HexToHash("0xd752f7d5acdee1ec56f17b95458e6459d4218c67a25807a7d62175a1c018f622"): true, - common.HexToHash("0x81ced39a1f6b0ae37d28dee7101bd94a0d9dcadbc7fb3fc3027d288769ed4806"): true, - common.HexToHash("0x944e59e19f7c39881e9a72c5ec97f4f352468f02ba6e08803a3870663eb6f551"): true, - common.HexToHash("0x3322819dac967947cf5f3e8cca02a5e065a15d74dddc13441b5875ee260f69ee"): true, - common.HexToHash("0x3a4e5dff0d5256287f1370123b29bb051729387d06d79383ad3adcb90497ce2e"): true, - common.HexToHash("0x83d18c06340b26843306f7c812894fa325a8e01fa4ba20404a789ac3399fc4c2"): true, - common.HexToHash("0xcd1740603cc47467c97b51afe10ba5b22c9aab9d5d68b287b19b7a560d6e4b5e"): true, - common.HexToHash("0x3ee6e39525c49775f02a3ddb1bddb2c3c6b742ccd17a8310305deb13b87b77b4"): true, - common.HexToHash("0x095ff47dcce55712b86318a059babd2a0c4d3d3ead07f485d9873673581d5ac3"): true, - common.HexToHash("0x75800090733521ae6dbfcae7ed2694eef59f3ef8c29a9f7fb2bc66730384a8f0"): true, - common.HexToHash("0x493fd2c3093494e195163ec6d7bea1bcaea8ddb4e934747d4ba6a629be658bd4"): true, - common.HexToHash("0xd8560d4dd08b17e65b8d5468394710172b758db3ee511fe99011bb03686eaa17"): true, - common.HexToHash("0xc2aea2451b6872f8948c8fa1250fb314e3e4d39abf0b52e50fc1c7faaae47065"): true, - common.HexToHash("0x4f01d5a0fb7d2651d82ad919e997c9340169db358043f4009b3a08047881e6ca"): true, - common.HexToHash("0x695985b49899132b2b4797615f02b80dcbbfd4533925ffe0d1f45de02cb1100a"): true, - common.HexToHash("0x51dd70b9d109a9bd5f3a8845d83b3b4e2a8236a4fb291dc072b098590962c02f"): true, - common.HexToHash("0x167b3e0ef2ec606db6a7f450399d75cfcb7a7866c3072e359a220c91f8437c9b"): true, - common.HexToHash("0x6b6736b2aecc22856ab8941df8207c116150e6694e346ce612b1c4981e893d87"): true, - common.HexToHash("0xd43cf99a8d62ed60f2c97def54ce76f39d34019a0349e65244f39e451209ada2"): true, - common.HexToHash("0x79942fd7a4627922ac02a9a86b9a236121a318389195db256efaae83f3a36a9a"): true, - common.HexToHash("0x008f5c32bbf1446bf991fdf1979043d753c8a24a6eb66c4549b0cc9557e90e17"): true, - common.HexToHash("0xe848a0a19f6c8013e4b55d733d46f282d471f759176b23a34431c579bd27dd46"): true, - common.HexToHash("0x3873d380c9e6f923cc1a48c916ead578b67af6897fa9e15be51274a58142b0b0"): true, - common.HexToHash("0xabdbd63f438d662a1e66135897ea4cd7030d3dfada97f269ce869f561dada395"): true, - common.HexToHash("0x0a3c005ff33a28d129fc30c4dec4540de2c75ab70d1c0abc3e6f84483d83271d"): true, - common.HexToHash("0xa68ed153ee773a457153a25d113614910135ba83db062ff5b6949f854e98e05f"): true, - common.HexToHash("0xf70c3ad7912e68ef0c3ab184ba0264ad2c886259c189cc9ca7af62d5100af99c"): true, - common.HexToHash("0xd8419188496388b62142a7c82564b99869933e021d8f299e726ca737650e26f7"): true, - common.HexToHash("0x95fb4455420320b3749900e82727cc92adf9b50583114ac2bec1673357473148"): true, - common.HexToHash("0x8e59f33f957fdfaeaf4e5a94cc50f8bdd1d6d52ee6ac72a882e49b95a9a01263"): true, - common.HexToHash("0x44af3ff5029bfa9e52b6002d1dd01ce6a3e81ca897973afeb1b5753f612f1b0b"): true, - common.HexToHash("0xfe691557d105e3445a46971f53c2b3577a440be92bf6c2bb4ab978e5ff1cf33e"): true, - common.HexToHash("0x1834dc1b4c2784e03ea392af4e299607afd8753a54816402ecd45701e173c83f"): true, - common.HexToHash("0x373c7ff83e30c9ca5d735198e84a2cf3afd74d784f17e24396993f7ca668c1be"): true, - common.HexToHash("0x5dd1c3a74e9902b2d951e045533fb472649851842bfbe49f4c10d32e831a77b9"): true, - common.HexToHash("0x85e521ebe708818eebdef5677b0ec78d3cac0c894d43f49cfd5ef97509b8d128"): true, - common.HexToHash("0x5db8faefacc7f1dc00736d4961712ae147cacab2ec64bbd659f6f18bb7787383"): true, - common.HexToHash("0x7ef9ed94cda9afee8c8a13aa7be6ce122fa40d93f5d65b53490d8e6d95f0bdb2"): true, - common.HexToHash("0xafb716b9cae46d88e2cadf298287fd33316366a55d41edddcdceb594ec492e0e"): true, - common.HexToHash("0xb21fd774bc941d95b47af2e6fdefea6d21486e4e1dae6845539ed9c46284c9c5"): true, - common.HexToHash("0x8c8aa612281263b3b6c7a1763939961d55120d6a8cbca7f8d0cfd7a0e046cfe9"): true, - common.HexToHash("0xd2169818b3ebb849da1af529667bbc5ed1627ba5fd0990e8ae2dd6f423578a38"): true, - common.HexToHash("0x95ce0bbfbe582565ef13ea0b9bf662ead4685df021cfa15104548abeb001d7bd"): true, - common.HexToHash("0x4dce0fc8ba19c6b407e34ae9d8830cf24be10ccfdac2c91224f2729a9a82987d"): true, - common.HexToHash("0xa703763d0f82a3b641f41d75f07305e15265589bf23649352ba7409cdec0042c"): true, - common.HexToHash("0x805c65653f2a1287e0135968d5ffe13b7b93942a2d8263e0a638e23c7d4a2ac2"): true, - common.HexToHash("0xd534cbc4ee1d59719d3b017088c95c2474ba80a8ecaf1f945ae3102940f1f74d"): true, - common.HexToHash("0xd9f1a6f8033e8b55aac55e79c1bd6c3e6bafb577eebd4fa529481182d56ab3f1"): true, - common.HexToHash("0xfee7ee4e9a6c0bd9c1fa341f5a53e0e75b7b29121c1fe5ebfe27a52bdcd2f6d2"): true, - common.HexToHash("0x8cf429cdfff40346519e6c716c4bf6419313dd581f712e41d7a707de1df72525"): true, - common.HexToHash("0x54f620f04bb98c0268b5bc4bfab90dc1b8bc06411a58ffbf5dd7fceb2355f7eb"): true, - common.HexToHash("0x9f95c9508653f9f51239b866f30fc7af9f61042353c4f0032f0cadeee522a62e"): true, - common.HexToHash("0xbe7cc8e252e9a60b44140c95526d7e4335f8df13236a6399e61366a0f264aa23"): true, - common.HexToHash("0xd98b5aac80c3fe352a59172ae152e3595934a50ef2e47c700f5a777fced07a8b"): true, - common.HexToHash("0x1a2803cbf4f9b8c773a572c12e36dc06250f19da07bd39288bc53893c7343a19"): true, - common.HexToHash("0xc38cb403ad5f564adba09633e773651703c2c3a9f677aa4aaaf2dd71cfe9394d"): true, - common.HexToHash("0x9f9ea07021dc29388b02a109085f33c38c6d6c7769f991f4747dd14081cdea1f"): true, - common.HexToHash("0xa60a748ff8d995d67152fb5c0c2be768beb8b94308aa718c3d6172720cae8952"): true, - common.HexToHash("0x4e9d7f3ded5fd053cae29a673c8f8f4c38b370ed10ffd6da5405fb7731f17cd5"): true, - common.HexToHash("0x127e696a9071937e675a29a04777d6a8aaab8d48ef59fe5e9aa94fd3a99dfe18"): true, - common.HexToHash("0xd9f3c72b5878ec0bfcfff14790349f00c4deb99924b6714f48d51115a7554499"): true, - common.HexToHash("0xed1207f40f127ca0c867ae2499c081201c3b0ffe13755687d18f572906a90df2"): true, - common.HexToHash("0x1b85d5cdf641252f2d66ed1181cdcf01b9c98713bb245ac0b722d4a7bfca8dcf"): true, - common.HexToHash("0xa3a728eb4e0f732c832f978beebe0b676a82c51c2d8896bd75e1a0b75c14db25"): true, - common.HexToHash("0x7c67db40bbc611a361f32f6b2d4d3f11881098003b3d815ef9766c2d3648c960"): true, - common.HexToHash("0x101423659a8b493f715a924bd6e502d7014bc4bc2e84f14f0ff62c9494f7d4ff"): true, - common.HexToHash("0x26e1e791abc618494ee094f91249afc4afcae83afa8e362e850ac06ac6b3516d"): true, - common.HexToHash("0x3df1814c6928721fb18d73cbc16b1864e0af90d109b1b3776550e83f72c54e89"): true, - common.HexToHash("0xe61eb1d25fc184081b9e05ecc23f94397d8254f1dbd6f4c893d6c5881f8bcb26"): true, - common.HexToHash("0xfc9e8268041fa3ef1e190bf2c5470bed88797d5d240e20a8103d9543ac78c05d"): true, - common.HexToHash("0x3ec7a63148bfcfdb8b54dde91cacfd1e0adacad108a059c82fa6924bf1486bea"): true, - common.HexToHash("0x931a885a3f6f9aeb759b7ddfca43f23c52b64ea1c6929d98e8af9c65f8c6f9c1"): true, - common.HexToHash("0xf431567bf3b0afedcde5c8fbc8369497209046cb572076a10cd2e5151c23d198"): true, - common.HexToHash("0xe96544618cc405d08c35994b735c616f438663e2430a898b925eb7a32ce260b1"): true, - common.HexToHash("0xd3fea1d9ad2a9283cc25a6c3b6c8a9ed4792b6db88ba12998bb7f42f326751fe"): true, - common.HexToHash("0xaf37f33cab79707c0cf55f68b51712c609e38c9baaf3e37c0c780b05f4dd9f61"): true, - common.HexToHash("0xa6983e6096457c6c30975b8267e7073fb8e28b7162cfa4f57b35647657c12594"): true, - common.HexToHash("0x108a88f18c6863f0992b6e2b39c7d0818056bb7597d0138cb8a47578feb505b2"): true, - common.HexToHash("0x6e1e2cb269372b6506c76cc932c8f83fea7a9c4d84823dceb8c56e38f18bd258"): true, - common.HexToHash("0x54521fc6e165e28e81cfd9f83c62b845354511675805dde659f0299028ca7eb4"): true, - common.HexToHash("0x295a9e624003ab1626fb4c4f6f756c6f27b7c5ee0ff1257f16ad1d50289fd97b"): true, - common.HexToHash("0x10259e5ca4286ba1ea59fc26ebe2118cbf80f4c3ae28024650298a0352488736"): true, - common.HexToHash("0xd01893b317ff6a591dbee156fa944d9137b607ef12023810fc2ac6373ddfb715"): true, - common.HexToHash("0x0bc9ee26b045cc2804d396839d3ab8821d58572c1b51c07f5cbda04f5b62a6a4"): true, - common.HexToHash("0x2a8af2421d347e9f61fee5cdf43fd039dd4464ff2e4ba03595ee4b92a55081f4"): true, - common.HexToHash("0x5b29f7e0124076623b9979718c9b912807115c1a9e23e06b8e1ce40da34e1ee2"): true, - common.HexToHash("0x16717abd9e21858e9220faa6f0d9e7ea5e71c5174bae2e7a2b738e55a2cc04c8"): true, - common.HexToHash("0x74c3f2b2bcc8b6f2fc0a7bb8d148544db585d3bb760d5a6d8d3abda6d019c421"): true, - common.HexToHash("0x748a8f094d848e23670287b33363e0663f5fe7f3be32821077292b965c46173a"): true, - common.HexToHash("0x6cb958d87211109655f606bc95b8cf6be143979cc6225c85a6d4572551007bd4"): true, - common.HexToHash("0xba21b1325c0528b9ae6ba274ba171202a157818e22e9ecdab2ad4169766b0349"): true, - common.HexToHash("0x22f384b57f6ead9371c66d6a8535fb3534ca1bdcefa841404dbc7279f5ea5af8"): true, - common.HexToHash("0x6ead917f378e2986f5055db0161cbbe4a61a8dff58e61256db097199dc8b9550"): true, - common.HexToHash("0x6093256ba19d3eb2cedb40040a19236efe47a400ef9de31e9fabbb7eb303e7cc"): true, - common.HexToHash("0x7ced5d2ceeadefba821d9a530a12776d7a90eb7ebf2116f404ef59b2102201e0"): true, - common.HexToHash("0x3ccc021ad8c7b88c734da31f0d7511784c5e73701aaa5573e69e0239be8c1d55"): true, - common.HexToHash("0x0426627792ccc9c925d1ce5f8b5712bf01e5614f193914fa4f5e12d330f58e54"): true, - common.HexToHash("0x765d7bbc4b5e10d42803a6047f660eb3f072e1be906ae46f5b9c26db4ed59aa6"): true, - common.HexToHash("0xa99203a7d1b6f6b55dedfe4eb4a73e7903597477359901795ecae04cdf40fbc2"): true, - common.HexToHash("0x6e8b484a9915f7b22f5698674d262089a479fc7a7b2d5b6128f55229331c2196"): true, - common.HexToHash("0x811764b49bfcb3060d16437215ec4b1415a91ffdf706f8ad83c414ce2c3a00b8"): true, - common.HexToHash("0xde3eb8482240dfb4633df56f15b2acbabf179e05d36d8dcc22693a84d6b5d00a"): true, - common.HexToHash("0x96dcf6a479f06194a06afb247ad493bf3c9d07a48145aa5e97d2d9d8a24b3954"): true, - common.HexToHash("0x23e468ceef78375b03d12d74f470e82254c06291f95b606e9a919aa504d97252"): true, - common.HexToHash("0x64120a05f20faee68840158b817fc2225fb2a437dd185569dd9844f48b0f312b"): true, - common.HexToHash("0x621afbc0442ca2a6d59d43d217a1aaf62336314455a9b2837135d63cbb43e883"): true, - common.HexToHash("0x89ddaa416d2469b344e2491c2eae68563b30337e3224e95ccfd3ade2065efeda"): true, - common.HexToHash("0xf39ae63be38e74a6d5873d181dfa452e0ce0ed758bfcb96898e8e53bba4a3c49"): true, - common.HexToHash("0x7aa904fc6ca5a46425fc413039fa52b739f7c6788dcb198620217d5d6949ace6"): true, - common.HexToHash("0xc01f15299871d58794ab18585a4b51482338be3468fd87bad02ceb72e00082fc"): true, - common.HexToHash("0x39b8138a5de70de640b840aa41c7bf850f9bf9bc39e5d76c8fbadfc1bd7edc99"): true, - common.HexToHash("0x1b45484fa668f7858bbf3e222982ab4f58c9c8ee54198d14b533d7272177047c"): true, - common.HexToHash("0x2430fff4c9bb262272bdf32fd7fb307cbf21f496861e017881ff9aac1310f09e"): true, - common.HexToHash("0x92eea9958fb099bda7f4fa3df9071e60cf52f79e143854134ae7c2f28662a339"): true, - common.HexToHash("0xfeb274b2dc0336a623b0fe51b7851c0cf08a57ef284093bcef0a9dbdb04d6d74"): true, - common.HexToHash("0xdaaac7a601f2556c56fb798aa4f7ddb3c37ddb6a5fbe797a69781091c2d4cbc7"): true, - common.HexToHash("0xf18e80389b883f564fef064c2a320f8fa1073adaa40c3604797bcc83dc6fe5a7"): true, - common.HexToHash("0x5fd5adad9448a9b91877c813b737815b7866133a9673a6e66cf31a61f095625f"): true, - common.HexToHash("0xe9c0508882ed7515d5cd1ca518290cd3ba1d254405c9b5378e24b1208fe0ae58"): true, - common.HexToHash("0x8901a36356c812114acbd476bcd80d7b22db11bd80f40f2ce35ea76178bbe418"): true, - common.HexToHash("0xac35453c171ffe92a61c94ade510360ba0cd6b2516ffa54cc26643d81dde19fc"): true, - common.HexToHash("0xd8e8c1ec07c5a029a46c3cb660a842748773f2c315c6bab63edbd50aafc3c7d1"): true, - common.HexToHash("0x56ed3bb534ecb0e17ccca740a98d91ee53ec3f6fd5ab8364d66052f1b4a3c10a"): true, - common.HexToHash("0x877ca58c200e5a61587135f020210c355531a56db9a344948fd27c312b7497bc"): true, - common.HexToHash("0x1618b497d53f56e56a01c58a3ac25313c5a7f654e7446dedd2dfdcd58cb24748"): true, - common.HexToHash("0x7fbb2af81df9e7311bf75bbee400c26c601f0d59a5241b65fcbcc6307db05834"): true, - common.HexToHash("0x285217e5b58d73ac003757293622a7a07380c0f1101ecdb9925633354c8da98f"): true, - common.HexToHash("0x8a63458e8d2510aa4e3445234c33f322190d9c1edf4f82047dc739e177798260"): true, - common.HexToHash("0x84416ab5eb3f88086ec6af9d786127c0053fe177a2a697732f5b3e6059a5c8c6"): true, - common.HexToHash("0xfd9fa3abdae7bcd4db35be08c6c0aff9128d47b199a8ed13c4fff147e3840e53"): true, - common.HexToHash("0xf97b2e85d8902179704f7e778fb30663916e2808b7f0e4634e4ce3d569e10c88"): true, - common.HexToHash("0x979da308c1ca4780008bc2af30ff48e2912085e6f8e8eb878cbb1721a3d95290"): true, - common.HexToHash("0xd30a7bc713072445a26114fa21a740b76fdecf11d8fa9c13b63badd099521844"): true, - common.HexToHash("0xc8e9e58370a6df128e9a631f1a9de337372cebc7a9597ee45a9d18523555e3df"): true, - common.HexToHash("0xaae0e97abaf5a8909603599e7e27601a55ae80f0a77e29bbd48b2fcb53943927"): true, - common.HexToHash("0x9b657eeb1bfe91aaf8abf55b5f9d919f07001f65da464d066e6747f957cc4f7e"): true, - common.HexToHash("0xcde6999f13db23dbb309b4b8f57ffe4cddbed382843a758bdd55181c988e586c"): true, - common.HexToHash("0x874a830dc43bed80fc4b63bb90fc3fc9aba99b5e5acc2121d73ed1549400e30e"): true, - common.HexToHash("0xacbcad122ffe9cf22ac7cd63792158719d8808317dd66b7d5dd57be3ddbd6954"): true, - common.HexToHash("0x18c2e4c62ca1740ae8d8a5c7416de0c9f9aee4236c272af8b66173aeff3de732"): true, - common.HexToHash("0xf319dc893ac5e5f75f3200a179dac66f8ab5470f60a39b25dfab56d24e11785d"): true, - common.HexToHash("0xf128e3ab4c7b0cbda9612eb5dc393bf484c7f69b1257aae1cca5e79418dbd103"): true, - common.HexToHash("0x7322338d370b5ec203ab7a594bb7eb644b35beeb07f2b315bba0daabefe4491a"): true, - common.HexToHash("0x31dc2d62c898dfd947f4f8e087189b7a1e1af2f101f5c4d8436278375c3ec22e"): true, - common.HexToHash("0x286d4917919d8c8b74dab8b93b40b582e67e49c37de16bceb17d2248ed80cf30"): true, - common.HexToHash("0x4382044db628a173d56fb582b5246ba197ae6b88f41def5ae343407dbac06df1"): true, - common.HexToHash("0xed91058a882d1f65cd5fb073e332a2a4fd96f64b874e1afe27903be1a828b195"): true, - common.HexToHash("0xe440ddb6122584048cec6650339cf57e0efffe39deb7f3f4eeb55e771a21be3b"): true, - common.HexToHash("0x9025b8140c5055ccb7d83fd6d38c58cc636257c5763b3d7f3941275ef9c5d4a6"): true, - common.HexToHash("0xa7a690deea9a8e234f7b5ab23d41362d4a4979da5fc635a95bc7ac3897fa1d15"): true, - common.HexToHash("0x2790b14b0c052767b68a5abb8df9811a5041415b6eecfb533e1cfa9569fd73ad"): true, - common.HexToHash("0x20b9650c9b3fb805e38f9c9e76fee1b6398f1d94f8b8b91d7f8928e1ed937142"): true, - common.HexToHash("0x5f5919c556b8a50fdb5bb577f190c91848826d78f2cdb265898e7f5a67fa33a1"): true, - common.HexToHash("0x23fccf7c455fa69c027637189343b2f24e7911ab8c7cb1e5eed59af8fb52e51e"): true, - common.HexToHash("0xd766df0c974db530df16cf375d08e93d4314bf72b20ba5fa97698e726ccc1450"): true, - common.HexToHash("0xd4d91340452e45f73ac7729733cbf0461bdd93851ca056ed6ca1e852e029a66f"): true, - common.HexToHash("0x1736b50958aa36410214302870d2e57888814aa1bcf50a691c2f566f96f7b1bc"): true, - common.HexToHash("0x4d555c1cf2c69882853ed94d213d0d5ea25ba65dd1278bb84d50374a94c34ec8"): true, - common.HexToHash("0xa9b8ee65c24a1aaa939356066a13446d9a1cd8d6b0a43e3891efa18d360ead81"): true, - common.HexToHash("0xb5a02acb4ae8e8df402d6fda7bb4d661ac0072d1c4d76e84bb21a01824b36d63"): true, - common.HexToHash("0x27387ff83328a37bcab0f7227c297aa56246061ff3eebd356894823c6e3a2f69"): true, - common.HexToHash("0x196c29ca53e78d1ea213885040e9acb5f0b7eff0bb6ebe58934c313ced548496"): true, - common.HexToHash("0x0873fc5b10acb469946007bdd5e36f45efc18bd00188c8cf803fff2c0fa24cd1"): true, - common.HexToHash("0x705a7f6898c6da47f2193f7af296625c1122b8271eafe8e64cedc626665e4227"): true, - common.HexToHash("0x2005d7a31293e9573d648a0f393280b1e26b27be4aa84573395ba030464791b7"): true, - common.HexToHash("0xd999d10596d8611a8cc0003ab511d688960d4766d40671e53b43a4e901beeca6"): true, - common.HexToHash("0x4c304c9f6a5cd8420590fd645d95f0967d88ef4d2ed82b63e2692c0127607bf4"): true, - common.HexToHash("0xcdee659d3f349847532d5f52c4b537d3c537b52b25cbed1e3a69ef60ce6d90e4"): true, - common.HexToHash("0x7681062cee1d5f13dc0b99ccfd2a5119adcc3e3874168d3a82d385b245ed3914"): true, - common.HexToHash("0x9f4d08d0fd7af634d1b5c589323a527a4b5eecf2a23433e45b1382b3fadb9a10"): true, - common.HexToHash("0xb2cad1af9beada006ed45adc31bd2ea092d04e56d7c25ea88ff0d5ab89316dc8"): true, - common.HexToHash("0x650419f0779141f6ea1b773d28dbfb19ba3ffa736ba2e7b1303dc9e25fc74c75"): true, - common.HexToHash("0xb574a4d466128ee62cf28ff1b5f7f8a145fa0ff1d08ca87eaadef231a24f6565"): true, - common.HexToHash("0x7a5dbe34a949c694e239674e6608570d23efa206fa45f8aba34cb84291b748c8"): true, - common.HexToHash("0x1a10da30f0b7098a8eb895630e07f797c104e363a373a9875b557bf2838740fa"): true, - common.HexToHash("0xe705c9833b00bb8f7ad98e9105aa86afb9f8ef7d93d970c9dfe8afb0c2a45a11"): true, - common.HexToHash("0x2724c994bd01090396716f8649f5d95c7f9b658749b96fb565bc0aba86245900"): true, - common.HexToHash("0x13ce9626298bb7d9314422ed9abeb57982d64ed852a455e7636e046905e362eb"): true, - common.HexToHash("0x10414976b576fc707ae03ed4fe553b3bb50caa7c56bb494245ce764faa9bacc6"): true, - common.HexToHash("0x9d41d97e99ef0ca97a1ec78087695c3b2ea0c53ee69ab625c71ab9c5fd22229f"): true, - common.HexToHash("0x0ec4e8570166bd4bfe64ab297b1eb7a682fd1c376334ea38da59b33e3eb5f17d"): true, - common.HexToHash("0x64e97d4b45d5d578062a38de86309256371639286c54266d972f851cf14264b2"): true, - common.HexToHash("0x0aae96090af64ada99ebad0fef347f610cfeb0b3f6fb76f3d7cf2e214ffda5b7"): true, - common.HexToHash("0xe0dc8c8750c164b6d5e842e588e61653ad2c1b1f98fb413fca0485a731084698"): true, - common.HexToHash("0xa36f8e8f830a3529eecff2bbda68e8165aa4c3e4de05b8e2347fa17c83e29b3c"): true, - common.HexToHash("0x40bd5d9d6c1f47a2ca5f1c864507a214d545b9ea9cfdbcfa3654a1248f309414"): true, - common.HexToHash("0xbd7aeef9a6b24e8f37d888a22c3402c628a8d3a7dd2906f0511f7a4d57d66f9e"): true, - common.HexToHash("0x6b5a57c0faa65802c22ce209e7f30fc00054a4d97b5c3dd2f5c5c4b6021601f6"): true, - common.HexToHash("0x586a4197792311a4532df4ebaaa4bb26a3c4c71f9159b970d99e89bf8c8db9d9"): true, - common.HexToHash("0x75aa6980476d95a6558f1431789adf897a41bbe7aee5fdac5496d1a9fdf67a53"): true, - common.HexToHash("0x494284034e01c7e5602b9be797c23f01cfb4f1f7ac24c720362d9fec850cc94b"): true, - common.HexToHash("0x4adc2857bb8b0d58d677d4c063ba21d99d2997ea4a8e36b4057fc35b9b5bac0f"): true, - common.HexToHash("0x596a8832b1296f0cc5f7d8bb81afeaea9063c6e7a9aa10cb56ec17e50ad92c19"): true, - common.HexToHash("0x531b8f9f47a3de75c4564f30a58124af3fae62a0c88dd2b44c15e008484670de"): true, - common.HexToHash("0x851295ec3117734c0b3bb216906ed418c49b062333f1e8660e0b27ac21179cb9"): true, - common.HexToHash("0x9e018b94569a9790f930d98b2fd4a3ae254147d355864a56095719ad68721756"): true, - common.HexToHash("0x29d716947503259154cde46dcf1c5702c77283ec7ce918426d66e75c2df59f91"): true, - common.HexToHash("0x1bb6233b9971b5855a6c33b2f27830245a189e24265637bd5d4214f2086b907a"): true, - common.HexToHash("0x7a70f443a467dc3c3d5a4b33c2ef1a12e6983ea7e87cf0fee9e4d4159ac95e29"): true, - common.HexToHash("0x9b19a112ff6144ae6d6048f4add177a0442edb8aee58067f7c3a1feada9ba681"): true, - common.HexToHash("0xe48ae24f38f95cf36f09dcf3c81a3a9c8caa65767d28828a1e4804242099abf0"): true, - common.HexToHash("0xe60fa89734bcab3e72cf2a2a5d00d20a5e4b44655b698aff3b60079ee7e86ae9"): true, - common.HexToHash("0x563b83e1ef215f552f04d8f263ac26a2edc9dcc337c9cbfb89e0320dc0ddbd4c"): true, - common.HexToHash("0x3007e78b29d9f5c0450c7b65827590089a13bd0549b48f4e21200a4f74519913"): true, - common.HexToHash("0xd6b7bd95527ef36ac6b13fb3bd7eff3dd205a0dcb87d03e6bc36c432aec28184"): true, - common.HexToHash("0x9423b5aacdf830f369535eaea7522feaaf7296340c050a253b612d05a3960523"): true, - common.HexToHash("0x54ab13ecd373fdfbbc734768862eefc392b5aaa18f4310b5f5605db1ad9853df"): true, - common.HexToHash("0x344ff3b2e8c4c4e37b2e82286b572aea8dcab198d98a0bf024a90ca5fcc15d64"): true, - common.HexToHash("0xb685bc6743bf552252acc0f65720027da10f03a04b6ad3053efb0c03c3dd30aa"): true, - common.HexToHash("0xb675ab49f756ba22dc9cc82db66028886d70bf405b6494e0cba42f6d92f80ec5"): true, - common.HexToHash("0xa8965876b21fcaf2365a1f7cd00c97442ccc2ad7bda950742a6b92cc43f923ae"): true, - common.HexToHash("0xb0c0c6494fb7e22abd69ad1cc20f4e71a8eeef6861a683a8a1733419be606637"): true, - common.HexToHash("0x6126dc3bbebb653d1c4af23d83d218e98c862d7309c62521febf3e77ad5442f2"): true, - common.HexToHash("0x3eebd1ce58de79ed71c3eda42734082acf50c19c283234b0277610e5f744cd33"): true, - common.HexToHash("0x441d9c6726104b965ffa87f61cf5a474e9d037082c117fbf19ca3b494a8eb571"): true, - common.HexToHash("0xbd8d30ca7456fcb09adebc47a931ba3b73c7de931bbc810e1e881d5ece561422"): true, - common.HexToHash("0x0ddc57989e4268ea15e5572d92f68ff10c0450bd54ea77e069ca6d31bd4b79ce"): true, - common.HexToHash("0x28540d34a72a8d901e2e531c845ade4f9030b088bfdc7bad07f41c6bfa56f982"): true, - common.HexToHash("0xa0047fada1933dcd382d0f2b1687b836aa80ec533f4e10f96a11a174b8882956"): true, - common.HexToHash("0xe60eabe81b61f860d97cfd536b8dbbc66aa98e7e5c4c04f47f84e14821ef3299"): true, - common.HexToHash("0x7d0a7f1079f6b2dfa5a9cc5a3345704d183a7b755ddb670bd1d5bd881c500d89"): true, - common.HexToHash("0x6a35903be36a1fa83ca588ba4a5e60abf85f7456ba9c940b648ebdbd33bfbe64"): true, - common.HexToHash("0x0d57f4c4b2869e162a80f21e8aa8c38d13b7f96eb1bdff599f7954e452ee71fe"): true, - common.HexToHash("0x009d56111d3a68e3a6be1023908fdee997da78214a603dbfd158286ca333a141"): true, - common.HexToHash("0xe8cfeea6641ffba377561c53b8e6ba80339e4bd116fc7a75caed8fb0029c7f5b"): true, - common.HexToHash("0x0956955929ed5b849fd33ed354d481cd1c9432bfe810434a0f8d38f673540818"): true, - common.HexToHash("0x8fd592e3a5ba7a63eccaf914e778018c4fbcfe8e51351ba2acdf179a5007ba47"): true, - common.HexToHash("0x664e053d92c5ee7d44f6a0e51d89b9a340d8775535f68fe6f5e59a9eedfc48a3"): true, - common.HexToHash("0xbf0a564171852ebf698f257de75c34b20f84ad624115b2b08002ac24846286f7"): true, - common.HexToHash("0xa8d6b02439eaf736b038b29074987ef3dc62e7145793cf0d231e0901064b63f7"): true, - common.HexToHash("0xab67f4b806d7cbdc44f41faa0df778316387e512dee13da60028b128afe59885"): true, - common.HexToHash("0x7aeeec4e2455651a08d575586517d83a0dd6e992ccdb59de6876e1d508308792"): true, - common.HexToHash("0x287d5bb67dc6efca02de427e27b6ac581833d4f77362fc6abaf11172a9d7332a"): true, - common.HexToHash("0x7953828d7d4acd7fe2eaf183172a1b8bc30cc57a1a8291e275a8a59729f5188f"): true, - common.HexToHash("0x08e75e4304524b7c4136830090bf804673d55c7374e23f0560aa7d9bb97b3666"): true, - common.HexToHash("0x18588a0197fc8b4fb4dc62d7e5e4066bfd6cfdf8e8fa6ed9af8902f071994b86"): true, - common.HexToHash("0xf0cdded7c91ad6480637a526076356387359d43527b1f7579df80e36b206e271"): true, - common.HexToHash("0x83b5af7f5acb2528039b23dd24526c941f4a09fdfcd4cdd82288d86527d13b87"): true, - common.HexToHash("0x3ad800fe651afc0b4b9c14ff6ab86845194d0e3555ec9c345117fb940dd595c8"): true, - common.HexToHash("0xad5af55efbe776cf5efd6150dbb517f3e50025e8ea0106642190e1157bc57d2f"): true, - common.HexToHash("0x2a1c093db878eda506115b2cdade17c9931962a39d936d22ee0d367ce8d2ecee"): true, - common.HexToHash("0x4b01187657df5f7b94e928036705123dd7d070b40002e8fe068960b6026f3089"): true, - common.HexToHash("0xbe25a0c2a9b7e8404d0d8b3a972b10fc6840213ac71cfb5a42d87d03cad42478"): true, - common.HexToHash("0x6cd3ad1105e9d1cd6daee2d577a5a8774bfdd24a64e82d8072b2e6348a3f3127"): true, - common.HexToHash("0x06f6a9c1c11a169dedbfc8691348ceb6cefde9bdc557e704da9348e0be80fc1f"): true, - common.HexToHash("0x9399e1e98b77638ef352683f930ddbbb019b10c6f0c49766e43a27ee21c84f0b"): true, - common.HexToHash("0x579fc71005ff8f98dec74042a3ffaa6a466e91bd342cbd036cf8a64532d7268d"): true, - common.HexToHash("0xb81d560ad7cc4ba649452022542ea6c5f8c34a11210ef1849a3c609e3550ec19"): true, - common.HexToHash("0x21e1f6ca5d83cc7be69dd1289e3c7f6da6abccd97db9eb721c0b15f63e3840d4"): true, - common.HexToHash("0xb59ff7df0b55ffc27225c8b48b47cf4ee015d32e1b181dbd915d9a7c9d9374e0"): true, - common.HexToHash("0x6860dae97db5fa6d17aa3948fdfdd0f86ea792fbd8ed95927bebd0893a6f37be"): true, - common.HexToHash("0x8bf6ebccbf128f7899591f1fa57228c5e19f6a0776badf9fb0ca2977335e4852"): true, - common.HexToHash("0x22ecb853b66375952e57967b8e3381fb50b7b63f7e3354c7fc12039c84d0c263"): true, - common.HexToHash("0x2de07d7efcab9b7858a1574d9a2776b29a023dcd85d12e362e4ba8ba7cd5efaf"): true, - common.HexToHash("0xecefe8aa54635fda4b939bd28c78378417d64f8f8ef35912aef40bdbcfa74480"): true, - common.HexToHash("0xe623b49453a79604d26dee786e3635a0885cf538c1ff89b61fdcfd04bbe7be0c"): true, - common.HexToHash("0xb32cfbbc344535d70186145c7d8ff0f7d4e8f8b0ea71d47235a13d6488742692"): true, - common.HexToHash("0xf06c61d8e0c8189fa912b7a6809e92b89a09fdf788f120855c6bb9fda11d1af0"): true, - common.HexToHash("0xb1c42eba4d1649efc9446fcc5fcc3639265e67097afd42c8713442a8c6591150"): true, - common.HexToHash("0xe3da81e55487bbe61e1e7065b8644d95e1c83ad9e8f15fe3fa8a02747f46136c"): true, - common.HexToHash("0xa3c4608b4453a7ad28437cc2afd6380267808922024f93865f89c994ad473290"): true, - common.HexToHash("0x5e91e2c31f36ef4cc8188262c438cc840a3d148e138580888e9ec0683b237134"): true, - common.HexToHash("0x5d62baf89b7f831e8da4b03ffd0d3d57d8efe8b74a437b380c4785f1251d88e2"): true, - common.HexToHash("0x427c794a201a0e303e930d5d85e791982aefb070d8d4a08d181bd99fd6a8cead"): true, - common.HexToHash("0xb68f83e4c87c622f8f62cff5c13d8ca25344c5ad64f3cad80287e06f2738f2cb"): true, - common.HexToHash("0x1f38bc8bb8a3552214420f1078078f5a03088b19a0ce65f356a61abf38d5bb96"): true, - common.HexToHash("0xe36120f6e8e228e79ef5d5e55d807260022fc0ed7e9f390060d5cb0d22bbc5cd"): true, - common.HexToHash("0xed79ad5636ed7769718086f76504644b44a6a51afd4d0e9cac09e6ea10046558"): true, - common.HexToHash("0xc78acb6a408b10c1de8ebf25f8cfa5440a364dbcdb263794543f69f464155070"): true, - common.HexToHash("0x49cd5ecb74eec4dfc2c202c8eb7e7336e98d95e39a148f4e860babb731ae087d"): true, - common.HexToHash("0xdcc06dbb484c70afa647fb212d6e483ebc8ffb6d268ad6210fd106df50fca248"): true, - common.HexToHash("0x83e8b851d6b6cd7ad32b26ac6398669a3e8d3b8e4454eb9dfc8843d2df94649c"): true, - common.HexToHash("0x025c3c5fd7fe3e5e95b7a4c0b595b402f168f14fd95a74a9948ec04f5bd83594"): true, - common.HexToHash("0x7457f833be5648138f90611c2b8ba72b36d0a8430c278a16dacc59ffebb16fbe"): true, - common.HexToHash("0x4e44b22a6a9598b2daee04780bdcdb89f92e073c97b479c1978537cf6e89c7c4"): true, - common.HexToHash("0x631e8e7c8fd40f22ae46c2ac459c292ffd3241ae7b54f4188a086427bca3cdb0"): true, - common.HexToHash("0x77985e946c9747f06aae402156499ad6328e202e279ca6ccec5110c2c106208d"): true, - common.HexToHash("0xe7078cd046553da43f395cf4479b26f759e0dcda1108f5a9e6d321eb1f9b8ee8"): true, - common.HexToHash("0x6ba88e951dcb8d941d6c6f4a6fe026249841413dcb147ec9aebd661bcac0bc91"): true, - common.HexToHash("0x06f66df9026423dc4823e6f34b586ef42837ad3f7b3cb3fec0a0717717840765"): true, - common.HexToHash("0x99e42cce01e0b0cfc6452c1a82d58e2f0ad56f677e0d964fd7ed2467f3e4c162"): true, - common.HexToHash("0xac0dba631716e9f2b3d623711ea99cfbc2535c006f5020ef4892f16d00ca0a0d"): true, - common.HexToHash("0xd3b426f0e88508e6e40ffb7bf1143546bec37e1b3f2d35e4ba923a25e43dc393"): true, - common.HexToHash("0x0e1fb03723850628e012a963fe1e46d984f0f814ff5eb53e5390cc89696fe742"): true, - common.HexToHash("0xa328a1a258944b46685bf8e4d1709bdd15b57628502530ecf635317f042b7a26"): true, - common.HexToHash("0x74fa128c7e28db13c9ad5e3c674e1c9d88e8d2a18c99ed12b1989eea79d3a499"): true, - common.HexToHash("0x2b7cc6511861aec00ceb75c5f565e795b0ebbccfe8c276494f35f3d4b19ee291"): true, - common.HexToHash("0xf77dde529f6d0ac7ceaeed3d585407808d0ad0e9bbf72bbf83bc62edc57716d5"): true, - common.HexToHash("0x922e9bbba10140708a3385c0f8280e96ecb274decef59a914ff7a1766eae6f39"): true, - common.HexToHash("0x12a1824350ba6407666b67b2dbb7151c1f27c02532049b7a3c80230b03bec523"): true, - common.HexToHash("0x0e5a35a7489dcf10bc366e4727d36f8496488bd352cb0987714f870bc66d34c3"): true, - common.HexToHash("0x965a0c8fec1371747a2e0e8303fcb55fb99217c406427b84b94b701e614a0624"): true, - common.HexToHash("0x69d77ec50804d19cc178e266297c14cbc108b0b81256bd4d4abf199d806823fa"): true, - common.HexToHash("0x3af5722ce30fb7eb0635a84fab7abf21c7af565eefdf0da4982f95ee34fe5abc"): true, - common.HexToHash("0xbf774819faf227ecc68edd4c5568bb47826d2bcb465924ade51b451405030dd3"): true, - common.HexToHash("0xc034025db9b7c6f6188432d5d63f9afa018c65eceac42ce1da5cc6a198f65d96"): true, - common.HexToHash("0x874bbfe6e3ca25a55c143b5db447285132164288978e32b71883e02e755c60da"): true, - common.HexToHash("0xf655d3ed87af5ad64abe5078bd85cee55df78b5244aaadeb2fff13116479f9a9"): true, - common.HexToHash("0x14e6b15f782c74f08bb3b3e00d6e295472ef3d4e38a8612439f8dfccd8a9ac07"): true, - common.HexToHash("0xe622606cf4138476848d9eca0fbf00ca6c930babacf4954a10d5b15da684ff16"): true, - common.HexToHash("0xc511c4424d70839d7ad6d4a0c50f26b8c207e1ac4a23ed519ac77facd6a5b401"): true, - common.HexToHash("0xd27bcb50128957e8145b79279433a7f76d8fc531ff8f0101c816261d7b215ec4"): true, - common.HexToHash("0x16d3e87decb322af21670a654b0700e94e15c39bd2e3b55c2b8163e074acc75e"): true, - common.HexToHash("0x2237931bed5572262bf6dbd027d2e84cd63d19610c941d8571be4c3b86d7744e"): true, - common.HexToHash("0x35ccabc3068d40676d7464c1938ee9f2f2c2183ebc76547139aa9c515fe5ac96"): true, - common.HexToHash("0xcc821708f9830d61a4d2baac94c4ed030ee95e52ccbc774805c0133dc3addcf8"): true, - common.HexToHash("0xaf65398db3c9737b76099d4ad2281b0a145af7c445bab0ac4fbdf9bdbb874f40"): true, - common.HexToHash("0x544ad9e5b7b1687944a01ea843dc9b90d6c79926f468e19478f6f2ef65096a7f"): true, - common.HexToHash("0x62e2ef9e281edf9412811968bc4d8171f1e47f7e62a221b395d63385cc0b1ab0"): true, - common.HexToHash("0x4f672fdd65d5d96c3bc9c7e21b9f30437fd8413c64fa9875d648a53a9ba36755"): true, - common.HexToHash("0x26340d81e838be0f417e774cbcd24ba3bcbc538015e2ed31fed87eb20ba8ae08"): true, - common.HexToHash("0x07f85ded7edef6529123ea2f22ab27e555f0b86aa11d0ef941963a1d8866b5aa"): true, - common.HexToHash("0x8c46bef9be18e4f86ead92623deaa4597c98c7680ee83aec3b1e6dd0a2c313ab"): true, - common.HexToHash("0x58ab8cdef113745ef721a9263352475a6b0e641b1daac814bcfea992bdce7351"): true, - common.HexToHash("0x40d7eb534f02d3b4d0084d8c6e409114a2043a584a376a502f2c6b46e03f6b0d"): true, - common.HexToHash("0x7e4980bbdf20d696311d5066e1592ffa065dbad113cf8f27d664b92a5e0bdd0f"): true, - common.HexToHash("0x3b79ab359ccd98ae8ed05d924e312a59f6d15bf0e0a2c8eac0cf67d0e4ba2403"): true, - common.HexToHash("0xbffc16ccd35ccc29370b6c3bf5caccf28767d45df16d8b5f65d14fad7919a2da"): true, - common.HexToHash("0x81b76831ffce400598185715a5d76a55201f57c4ae2d43c766bd20ae579cfd7e"): true, - common.HexToHash("0x4e80264221ae63ff349851dbf274375df49261d1272589f339ff353142400a47"): true, - common.HexToHash("0x2f6a42e35d67531713c6a2ce336c5670985020003747aa60a090c54db642b751"): true, - common.HexToHash("0x113d34f88edc795cbd3d99b096848154ba468a3a6d1dd730b897cd74205522c5"): true, - common.HexToHash("0x5097412e1764f9520148ea90ccab01967d14a64ea387a3b378e60a1d25f5f00e"): true, - common.HexToHash("0xa51f65f03fef7990ce2bf068ea5135ae0b3699a654d4bf0e05a0e55280454237"): true, - common.HexToHash("0xba3f8f15f17aa1ae0d293d217e82aabab63cef64aa135545a534dc969ee2c3bc"): true, - common.HexToHash("0xca9ce34ca50a4bb8263889f514c09e33eff046bcfd1fb261585892b861f6c2c4"): true, - common.HexToHash("0xd303f778b4ad5d4af75f4dd7e7100647ed43ad7e85934c8b8253a0f82ea0f51b"): true, - common.HexToHash("0x63bc4980be36326b0549fb26eacafeb0bca462a0843169cf78605e3cea94c7df"): true, - common.HexToHash("0xc1f8112975cbee9a8684c6d142f8da35e475d2a027b2c5a1864b3eda664f1be7"): true, - common.HexToHash("0xcd92a1d8505fc28de325a9128ac61941d67a744bfe23233e24b0a911f5f6a2ec"): true, - common.HexToHash("0xcf4a6128b2ff03c732e5cdb60b98c07de7b13581eb3de63ce8f60ab8dddad1f8"): true, - common.HexToHash("0xa17c7f14000864003939452420d90e3b3d4eb5e2a1819b7eb6e010776ee61a96"): true, - common.HexToHash("0x15792f0a7cf9dbf96b4dab362a8477693485cc6e866cbef76e08150978d01d2c"): true, - common.HexToHash("0xe5bd58e68b0edc19d924addb8d0c940816560eaa512a2b43a2df7fbf838cea66"): true, - common.HexToHash("0x3bd236c5ed092b18905420619d74564f91f6323aa7a343cfdd98ec476194038e"): true, - common.HexToHash("0x63dbe5394631bb54648e363dcefc542e945bd5e508778c30aa5f79cfa9498f5d"): true, - common.HexToHash("0x907ed45a93b4c50ba268cc8d19237b35caece7558b46831b0e85e901c92cecd0"): true, - common.HexToHash("0x4248314f8d58c3ea088ad6d5693a888a87637a66e43cd57eeb03ac4140182cf6"): true, - common.HexToHash("0xde19bed8f0bcfc40500dbc722cfb9dad231e5a7f80d1546534f452f1e9837541"): true, - common.HexToHash("0x8dd397c2a5b9ff45151438cdaca2d56418a9ebadd82f9e639fa6e48c6e104cee"): true, - common.HexToHash("0x7b5dda7dd375a1eb1618e828e199e2043ee80c7ca5a753f2ef092f03b755a5c1"): true, - common.HexToHash("0xcde8317794a16d5b4844c8c3c4383075f000f58cf328ef83c125d3336a450d69"): true, - common.HexToHash("0xd4fe0f28e50b2b4c5cdcfb84dc653edc9568408c37172614afd07619fe6deb4e"): true, - common.HexToHash("0x3a75890c9fe4da303a8defbfe541809ac86d2e79b35d6aec4e25d3359713b41c"): true, - common.HexToHash("0xdbc3e803be08a643e262acebbc9b24e6f9e566b4666cbd87b43c9cb6743488ef"): true, - common.HexToHash("0xe1f9ba117d1d843e0333e74210922d928ad0d4c89fb5ab83688b9acd5f51159e"): true, - common.HexToHash("0xeb975e544be097bb475b461587150fdaf99c2542b29b0bae01115541b13a2646"): true, - common.HexToHash("0x062066a2781566fb5c762ccf36f60e7c27fb4f39e5828783422b7dc92ec7e62c"): true, - common.HexToHash("0xaf6a2eec6bc3bf97cc08274ba4f30f6b4a014fe1ec073cda0e139cafd396b126"): true, - common.HexToHash("0xa23d8a94f394b1ce5f5ac6b136094d02def56086bd29ccf4951541e2642dd2e1"): true, - common.HexToHash("0xc721af984b77579516f1daef48957000cb90fff68b9cfb2ae45d4f674078ce97"): true, - common.HexToHash("0x5c6b5204d215d4f910a0b30b5d38c5a89b5f2a7b185ef4967a0cd21d14e4b11a"): true, - common.HexToHash("0xa32fafb1091b94bf4870fdbde762062cf55fbfc9ed449066548f8a2599f6e492"): true, - common.HexToHash("0x8870b7789afe95a771208da89a43d0d2566722fc6547b8aaa7ae8ef867994620"): true, - common.HexToHash("0x91b80a62c60944145fa233fa4612748a35ad3628a5d39746b51ae6ba507cb54a"): true, - common.HexToHash("0x30fa0b8e9c6c996942ec3f38c7f1c31e47240bb1f6fb83e80d8ddd49ecbc6ce9"): true, - common.HexToHash("0x1a349e8c1b06f5f48150da9e21de5a82cc60e7cb6a1737625ce2a7326813ca87"): true, - common.HexToHash("0x36099e4838c387be7a4bb53d47019b38eb5598638091b650cfb1e1d2e8d0ae63"): true, - common.HexToHash("0xa148f4cb0fad79b82651d7f56909d4c3625ee955a22ce3c2c3047c568b7bd678"): true, - common.HexToHash("0xfca063233059aae74d1f5d7970e588f2d56bd211fe21a4e3b6abe1f97819abcf"): true, - common.HexToHash("0x1081b2d7a76cf033129f50d45abc94d0f5bf235984ec9351f733f3424262892a"): true, - common.HexToHash("0x9f1b7ac30b4a4468c6c7a248d44f84cd64da012218d64d7e51c3c3b317893765"): true, - common.HexToHash("0xe1e086556c866f93e0b073c589a7b1d39e46c7c4d5163e5e39dbece5d868f4da"): true, - common.HexToHash("0x0e8c2222df3d60aa20140a6a04ea4111c408af994e2a6132de6f8f57f77e99f4"): true, - common.HexToHash("0x366fb4a6a02dd642a7f55900fd477e7a0c75818c5f599133d544abbd8bac301c"): true, - common.HexToHash("0x9fdf436aa283ff970cdf8ef1755acbda3cc5104700457b2a426d02dc44a76534"): true, - common.HexToHash("0xccd3d879e7767b2b5c35d134747beb0655f16e97e460e5c853838d70f1493f1b"): true, - common.HexToHash("0xd32dcabff30e9b847fe1503b491ef6997198233efc488e4889300c87c5e70e35"): true, - common.HexToHash("0x113f88fcd616ef04c6d442bf4cd8afe6c4aa48abcad963d8b8c8c64252343904"): true, - common.HexToHash("0x17c01617a5420d3924f9e3a336a643dc8ac274cd749e2301fe1ca204b80f2ab8"): true, - common.HexToHash("0xc99ffb737f74c1784f7f701ee4b289eeecf5b65a0742db4a9d969b181771e446"): true, - common.HexToHash("0x0336714632727f8bfe908b4095b8cd120b224efaa644712a4249baf1d384c97c"): true, - common.HexToHash("0x4d60a0fc28fbb3ebc77be56a338f7e205065a3aa46021e7a2c8e3086a8a550a9"): true, - common.HexToHash("0x808ca8473c2de785a207848ad747f4c03d750157a4a7755871903f7fbdd453fb"): true, - common.HexToHash("0x37cd9eb12fe1060520f270ff02231a017b2cd7fe81eec718c21ae08677c8906b"): true, - common.HexToHash("0x7fd872fec255d247137024ab026a2fd652611fc3677258fd7f292b6f228846db"): true, - common.HexToHash("0x7ee7a7b39aa50dc8e1fa5ad8e0a57c0a856e81fb86f11d621b1ec80ff9b6c954"): true, - common.HexToHash("0xef20403328518bfafa317398a0de02bb75b92a491afb44a1aaacf4617e4ac371"): true, - common.HexToHash("0x9d7d71b1c220beba23fd4db589aedea133fa3f2c363a90aeeae689a5150b9720"): true, - common.HexToHash("0x38e14ad2a755e8aebccec14dbfb53a9c79bd1c1aa42db1c08ac4670b558d993e"): true, - common.HexToHash("0x338a5bfb8d0ca33373ad90a13b081330c4b9fb5117c160bc14977dac612610ca"): true, - common.HexToHash("0x80468b46c0f2d3af4f416009f0413284f60a477a0a4889da72d599a1ab42c378"): true, - common.HexToHash("0x6779d1b99ebd3a5d1a7adce9fe1efc7424dfaabb5a0c9ce5f55c29c1cc0d1d91"): true, - common.HexToHash("0xa795e49408d01a6dc54a09e7607e3a4618a0a96a9692dd4cb47225ee9b98451b"): true, - common.HexToHash("0xdb2fbbf03d0d3c1d7072c86d80efa3ef75e0b29f540a08e3facf2027ef0aa6e5"): true, - common.HexToHash("0x20c615a565d47992e4b57d2ce379f5ff11bee7b0d92c4890d7bccfe35e4018e4"): true, - common.HexToHash("0xada4e01f6dc252205484bd1050f16ecef45c54d046185315df8b3af1b3bc953b"): true, - common.HexToHash("0x6cea27ebdd9fb82140cdca5cdb9f0c4da1cfe51452986a0334a940b19a773fa0"): true, - common.HexToHash("0xcd822075bd52fbf2de236db94b1ea06d31046119b4b74ce5e8f0444c4f586b0a"): true, - common.HexToHash("0xa23e34ef4cce0633ba890f2c5ebed609fbc6c029f88890869670528e79fd69a2"): true, - common.HexToHash("0x71b04ac8db2410c337c1f04b33f6dc55c0db3aa2600134a047ab8ab4c1da05a4"): true, - common.HexToHash("0x374f5447d76e2dd9ed4063d84da9aa5311dfd97fa3e970483f0b98f04ef1494d"): true, - common.HexToHash("0xbad260dd15f17afc29809891057601b375bba605cb2a115449101179f31df0a8"): true, - common.HexToHash("0x5245ca655de784893ed3974e53654a55834d2363393092ad57aee3412d787ab6"): true, - common.HexToHash("0x1de474944901fdd110931747e43f2c0d33967ea1f5cb7e4f53707db1cedf50a9"): true, - common.HexToHash("0x7c531563695c1dc7592310819def633ebfdd393429ba1aa3e27b91e519d27c42"): true, - common.HexToHash("0xeb0b14233661bbb3ae8d2c06b322b7635234f83d947cff486d3d298beca3e955"): true, - common.HexToHash("0x673aec2fa3ba29d46fba44386ff80dc292b8a561a6c5f10d61f82ebbf261a17f"): true, - common.HexToHash("0x8b4edeb853425a01e9228bdd78c7e558a5ab4594258cee3a8b39142071f1eeb5"): true, - common.HexToHash("0x2a35f254f32a44a563dd29910210466b2c76d458a713c0046dcec702b327b887"): true, - common.HexToHash("0x94fa61f2b03181234b01f2bc69ed1e07d5013f3dd2964c742329aac9b8060c59"): true, - common.HexToHash("0x3c579472fa31477c54a5904072fa44bc003f0c8cdb289805494b340bcbee3f29"): true, - common.HexToHash("0xd35c346beb155765f09e56cff919e57c574fe918307dd81903ee844cc6b6aa3f"): true, - common.HexToHash("0x9bfa128850d21fc162008c2c1df31e1900caf9017350e6acba973a76c2452a26"): true, - common.HexToHash("0xcef611fb31a52965f821cc7778781461016bf1c4602c18421f964bf65120f3fd"): true, - common.HexToHash("0x2b8ff5160a7758d76d1ea1bd2abc8399266820e61a843750e45dd54639b4736f"): true, - common.HexToHash("0x075978ba2a8f41709ac803d2715799550ed7340212afb480846d4d239610e895"): true, - common.HexToHash("0x989186eec6ce15454a4d38623edcecd90680b8ee55992cf3cd1e1ee92d404de5"): true, - common.HexToHash("0x01b7b93d279c2e90871717f604bce032ed6371f70a25319fa5597e8900a6a15a"): true, - common.HexToHash("0x6c59e2494644b39ff2977116349d8eeba672076b0de0315991d5bca27fb2f762"): true, - common.HexToHash("0xed43f213c46b825693733b36cc924cd9c21d048e26855a7114803ede3c8f7f11"): true, - common.HexToHash("0x568618ba480d37cf8cfcd6a0290a67cef4c6b4b1d605178de22fda36ce67406f"): true, - common.HexToHash("0x3c10918e160f95ac2ca442a3809dc2ed82f5205517db3a08240bc520932504cf"): true, - common.HexToHash("0xa83965251569b7d6083be5d20198f7ca8dbae857f277a774dc65d666fd5c66c1"): true, - common.HexToHash("0xd272e8d1ee400cf020dd8e5271c72ba10f0fa40d62687315df4114bfa7682d75"): true, - common.HexToHash("0xc36b2afe391f962a9d0b7085e7695480d95cf797f0cd441c1e39b5c508b88604"): true, - common.HexToHash("0xe7e1889f19c23bbe253b424a437004e8d7c4651100154fc8f3d50121dcd82ce0"): true, - common.HexToHash("0x8d982edb99dbe3605073e69a492941ff44fa5d3c763eba61c20817e6dce1072f"): true, - common.HexToHash("0xe2af84411c6bef607d2a60c49795f7ed1509bd96709b9fb208c52575702044fb"): true, - common.HexToHash("0x00e70a319ac973ffb443da94e9285f0d7d0fd970f383938c270fe0b97779bb75"): true, - common.HexToHash("0x138c0f228a1893a3a57faf5d9900b6b0a8d40d17e3598833b34502499fc8086d"): true, - common.HexToHash("0x90de5aa1e07b1cb238a381d82f4bdfd6f82d662177f63ae03177a017a217c12c"): true, - common.HexToHash("0x03092d446e1923b004855c529dbd64767f185733ecafdb814ff06d39fef7f3ea"): true, - common.HexToHash("0xb75407203ce65d19b5815e0fc0f1f003f6b1f09b1968a718d96b1945b8187f46"): true, - common.HexToHash("0x69c132c4c94c97ed0cef5b19403ca495315903cb61b529bd8309212634bb60f2"): true, - common.HexToHash("0xee3f598a88b4d1558c75998b9a235e06d0a9149a144d66c92bee3ddcecad6e37"): true, - common.HexToHash("0x98530ce36f269e0677b05bf1793eaf04d0a555cf639a325a8b946c387fcaf6aa"): true, - common.HexToHash("0xab9c179f66b42d3630a42b6526a34dfac03266d2f5962b2a4518a81ee7b6d5be"): true, - common.HexToHash("0x8f123395ed5a796052b05dfd5eb0758e9f62c2673bfedaf1de680bad06ad3f01"): true, - common.HexToHash("0x062c1173c09ee485e8449520ed87b68f13de35c4b1261f724b8eb754c6bad4fa"): true, - common.HexToHash("0x6882c8c7115e7db0dc89e6b725dc932f06660f4cd2480adc8c8e414ea135005e"): true, - common.HexToHash("0xd4180d2de0075cfe55a51e7cc7938b80eb469c4d897ebdee32e06b9a37f38213"): true, - common.HexToHash("0xdce79d0de94e50fd598f75a62e34c72c36b46ee2fc7d23fe2fc814f5537e4c61"): true, - common.HexToHash("0x90175bc8b40a7dfb62fd7ec84cdb899efce3c7df7ab68c5db1414b2a7e514272"): true, - common.HexToHash("0x88dc12ab489a070f0cd20bad5f627fc07e3e1096b32a287d5439ed4460f7d6ed"): true, - common.HexToHash("0x6af9d44bf5b84ac80b13fd54d4c2ecbbb31a900cac25696cb7c185cda5100b86"): true, - common.HexToHash("0xcb16c0b0f3b01a7f75e35a76ea6a981fe94d08f3ac4686ccbdc9de5916bfd085"): true, - common.HexToHash("0x08dff0deaa594dec518cfca8540d8000473429493c405aaaa790bc772f29fd43"): true, - common.HexToHash("0x106f949742d0f1b6bb7b8763853f2931f704cbae3df35faaba42c8ef4eb770a9"): true, - common.HexToHash("0x85e7d209d844158eb3464b177cd1a362f650165eaa6afb826d0467fbb436b7c1"): true, - common.HexToHash("0x99323177e778eb65f0620f6e62b9d560d6ccd7ebf6536baf03783f47c1fc063f"): true, - common.HexToHash("0x72c6648baf9ac7aa8f8d2523bd16f8dab2df5fd6080be9c91ba2f83ff1401959"): true, - common.HexToHash("0x923388232cf032ebf91cc9880a892164f2497c971a1448490c39dd686dc7faec"): true, - common.HexToHash("0xdfd7461ed9b0f88c496807b5ab9b01991426f5d76aefa0c3a055d59541b2afa1"): true, - common.HexToHash("0xc3e4562e0d423b93f24cc364ee00bcbc69e08e447a32da710d29958418817a34"): true, - common.HexToHash("0x375602010b61a449e9032e3768b35d45fb157399fed2d7b18115445bd553c9c1"): true, - common.HexToHash("0xb21696ef24a7fda4352a1c7a0e4d7990a1aac36d37486b1a9947f42ca056180a"): true, - common.HexToHash("0x98129d765bd335b640056884f35264578ce2c17389c8b5597ccd2a6ca33cb4bc"): true, - common.HexToHash("0x67b9cb1feb33319a08799b3e53d6a2a61548687bc310841763283046131b69d3"): true, - common.HexToHash("0x25352339598ac1a71ad7bda76267d508af9021d954add582320b69baace9fd38"): true, - common.HexToHash("0x57784f7d8dfac1330ab1875cbf33f9fe3a873088f18dfcda5168e7cd95d0509d"): true, - common.HexToHash("0xb8dc608b3736c0e7113ea472137bc866f5d29f773d04f0b14234b97ab4d5b046"): true, - common.HexToHash("0xb1dc75fb7c797b3a99b8cb1be61e4f5226dbe91172402868fe22017f1dac4011"): true, - common.HexToHash("0xc61e35eb8dae1e505c0a9d921445729a62c2ad748e3fd0a1cd437df06a1b9c33"): true, - common.HexToHash("0x2badb1cf58a6e65874de5a87aec0338255a806a3a31b665ef985fb5429f5b55d"): true, - common.HexToHash("0x8d2163197beff8e7b6169f625ebd28faa6dd7758ad90c1950fd1e942c68ebf36"): true, - common.HexToHash("0xc34e771a9482249afefdec3b8d45eaf15c3beb7803593be31bec7311ee0c7821"): true, - common.HexToHash("0xd0e35fe3caa16864ad7d77579278ad847783d4bffde39844ad2fa16535b71fbe"): true, - common.HexToHash("0x3f2202b5305f38d8d3b6acb4e95e2b1a70115299b1c569890630dd28a553d424"): true, - common.HexToHash("0x4f670cdef83c023a76600aa591b4c9ac8c830c4671a307670f20666df17243f6"): true, - common.HexToHash("0x989b42b4c4da98724a09c8189002f4628c7da49d3a485bebae0e100f5de46d66"): true, - common.HexToHash("0xd4e9bd0ad6b23b39797680fe0cd67357c409b7da29d799c211110c7a79a15909"): true, - common.HexToHash("0xa6a3ddcc10b09b09b789ad07125f9ec52272d9baa51535d41add241d08f78c8e"): true, - common.HexToHash("0xbf7db62ca729ac56bfbc931a1627b924b741dd91e583700a050346c4dd3048fe"): true, - common.HexToHash("0x4267a8c16956a61e368bdbf3cd5b624882227b537dd767a66501c733e5842c77"): true, - common.HexToHash("0x78e5469866e21c441349c2975be4b02650e8afa84439592367b4af0f11a7a1fa"): true, - common.HexToHash("0xcdadb528829ec1966ca9878932092cd267dc9c1f5285520758cfa4008b4d9608"): true, - common.HexToHash("0x459df1f31d6e2881e3221ca545533f022fbfbab31345e97f1e9ff0a09a299fc5"): true, - common.HexToHash("0xf5fbac5588507e8514fd6bc5cc4f8e6e95cac11779ebb35a2955e553e393e55f"): true, - common.HexToHash("0xbb257332389e9585d498feaa55dba222e8f97e9b6569708cc4487c25e29f6bcd"): true, - common.HexToHash("0xf75e0c1b6b535fdd903b4ee50220ad54ed090827ab3ec4476831ba3daa487dba"): true, - common.HexToHash("0xb95ec2452d8c4422f9486a6426e6580676bfc1d027d78fe6eed029ffcb5c26b3"): true, - common.HexToHash("0x6f3f1f80e982a2a229d2463b0d5ea5d3949874f1a9b2add6db6cb0116448da97"): true, - common.HexToHash("0x94678def27619c6ce4362558df6c9a41283db1361620135003476adf6c6fdd77"): true, - common.HexToHash("0x221ede47b76a059fcb6e288e7237940b423941b4e984b5cfd58c36e119f3bc4e"): true, - common.HexToHash("0xb63530b9605747d789cc81b8dd866d4cd23873e6b4694f4782c0e74301a83f71"): true, - common.HexToHash("0x1ba283130ee401226e8a2cdedf9f2a5552465a784c76bfc8faaf22856fe051f8"): true, - common.HexToHash("0xdbe9f030cf69715c7292e3fde99019c32ad9007f9638d56f87c545fb32864e74"): true, - common.HexToHash("0xbfb743040870f487ce68211cfca91f5c4c8ffd11d41d3827f5d00797bdf6e15c"): true, - common.HexToHash("0x0aabfce7a4b116da43e79b2bc4e683bce855f4030924a9aa3fb8d09bd53b3944"): true, - common.HexToHash("0x7bbb5eaeb623174b52204c386441ddc86ff87c622d8bb66190df8e791754ff36"): true, - common.HexToHash("0x7d7fcad66938329d961892351482bcba29202a49f75093c61b33b21262cffc86"): true, - common.HexToHash("0x85c0580fc585c02e7c4399801dabe1ee7d5a52d1e629cb4c0b2bbdecb3e50d5b"): true, - common.HexToHash("0xe610aa8d62fe0b116673dfc165e3f6f693b14126661e2b6315e5ff009c26fb92"): true, - common.HexToHash("0x5c35b3508cd1dc50ebcb213e0e259713d945358449200a227673600b18e919cf"): true, - common.HexToHash("0x1f6f2f632de416b346a2b3ec16f583f35ec67805a85b9f2f4db6f0d1a42b2995"): true, - common.HexToHash("0xa58503775de01626934b51eaf74765088a7884471a3a1aab93d26298efed6dcd"): true, - common.HexToHash("0xf877eabdf74c63f21d1f5b1f0dcc17ae2d8493b1ba996e7b3cbbdaac6f7ec65b"): true, - common.HexToHash("0xca169bf75843f4f482e5440cd0be2f6fcfff7be440f9f379d2aeac951edc4fd0"): true, - common.HexToHash("0x05d0f6902b307d8f0c79fbf98f4591685ba7939f32960cebaadfe8a2499a4581"): true, - common.HexToHash("0xf09fe18d5b5c9a9854e55d536c99eef55e93db9df180424c49fc50c7842c78a2"): true, - common.HexToHash("0x2a3c1f8f836cd3944654b20b2c30ca8934f3e0ff224f57200128660e03d8dfb0"): true, - common.HexToHash("0xeceeb78cbf777312e2f832b065602cd813ed984553271c87f6d8fc98bba23f8b"): true, - common.HexToHash("0x1ccb766b477729bf59235bf000a95aa8cc99fec6a53473dea8cfb0a717b31b7b"): true, - common.HexToHash("0xebed20880411ad070e920556a232fa374145e389aab3ac4cd768821e1611dd4a"): true, - common.HexToHash("0x868e5f76d7652319444531749f83db75c3afe6a525ccf854a110afbe9438208a"): true, - common.HexToHash("0x365f30d5cfeab548cf167fdc3c74f46f184c1697bdb6d41689a0a1c75a9d966d"): true, - common.HexToHash("0xbdaedf02decbeef77a9e9d81820bcf3d46c8add635002f752f668c0be45b03c8"): true, - common.HexToHash("0x27bd9f7e76717a5505c3f45befd3746d595fa20e0d797874497435fd2b41f2fb"): true, - common.HexToHash("0xdda07d673b5727e46affbf23e3bf7c4418c66c6d8a63e3e6cb0c30763c8bac5b"): true, - common.HexToHash("0x1ea4ed72896c75185aee0c767ef917233c6e297a60955abd7e1744e179b0486f"): true, - common.HexToHash("0x10c0c1f877514072092b5cb8f90770113e5b0e74750bfc79024a4ba244cd20da"): true, - common.HexToHash("0xed80cf2f24615042c295b05768f7e5f2532fb14be54dad0ea5ee0499bbfa798b"): true, - common.HexToHash("0x193f4cbba182055a262bdcfd607db1539ffdbbd69ed907e5db13a4f5883cfbcb"): true, - common.HexToHash("0xea9dc01f5d8e0fdba5344e85bdc9913b0099751b7ba2f3b8c9eaa25175345ccf"): true, - common.HexToHash("0x6a8db659921dad617066e67d668523e29e1a8308b65744e7ff70d4b7555adb6c"): true, - common.HexToHash("0xd0becc49b7cab73775996c328294e95024b9c587783b53fa42e91a5f6fd87984"): true, - common.HexToHash("0x9bf10206f289f02d81bd3fdc228e3548dedb0e656e45f32ff273b7dc5a5c6270"): true, - common.HexToHash("0xb6b5254dc96f610769b305f1a1ba8180c189d787ef0de2d90241c35904136858"): true, - common.HexToHash("0xc6a544f1bf1d81af35c3d4f3fefb7470984dcaef2e8c857257066b3cc6598b9b"): true, - common.HexToHash("0xfa86f71df3235724973fbc9129d415a83749d6b32f8721afc531407e1eea84fb"): true, - common.HexToHash("0xe98da4bf8c45672e1050733e5074ff0256cdfd5ae883af309ebbc221ac85eb96"): true, - common.HexToHash("0x4e8d1b4bcf3134ee7f088b51a679582da9e18afa4a6bc8c4d59a6a45709a2c6d"): true, - common.HexToHash("0xbc8c80d8a845a5a7c119783359737274989cfe1aab90c5dbd06de8cda50fe021"): true, - common.HexToHash("0x42174add1493577c1bedcea7b941129d45eac3d7bdda758ffcfea5db349c0e2e"): true, - common.HexToHash("0xf5de3650453f068ea57cafd4558866ee06ac5f7fbd19eff4aacff89782b17bd7"): true, - common.HexToHash("0xb5d7784e6749615d915cea8cbf370a5fef6648aa67af4381eddb65e42276675e"): true, - common.HexToHash("0x62750ee057dcfa440f1db7efe24ccf2b2072581a8bda9dec0eab9fc65486b1bc"): true, - common.HexToHash("0xe2ae590e6a18d63cd6e7cb265bcd66338881c1d7f8102a5467b352dbe09d8c48"): true, - common.HexToHash("0x4a54a905088d5260641937414195f5534fe5ba3ade2a272949521cf38b514b23"): true, - common.HexToHash("0x5e569053ebaae83a94d3ebb16b5167fc559ec1963cbb23ff446c72657cb3032a"): true, - common.HexToHash("0x9a1322c2b105d3843fbf287c02fb7dabb8f8975f058737f5a6edb7673eea5b6c"): true, - common.HexToHash("0xfc53d1c5ef66f938def4a97505177b4c8f0b4a1cbbdc39bc1d430420ec305707"): true, - common.HexToHash("0x891c103c399f3573054b84527c0917913b8562a00deeabde702b9f3f1359474e"): true, - common.HexToHash("0x83a4eb98d61a4937a60cf809b9471f83beacf20c7ea6b5a5e70dce4b28697bed"): true, - common.HexToHash("0xb0502dbe268f81c3bec066276b1a034cfc693a448ad172520f989b0d277e7d37"): true, - common.HexToHash("0x6f4363f81d18c3d4e5c75e3495a04ef318ee24edbf16d80597f79ea287082d06"): true, - common.HexToHash("0x43eed3370ff7358f43a5de0dc8e6060b97a514513978e2f4a82cee6a40283f78"): true, - common.HexToHash("0x21ed0cd2b0417942d1a7752c0e15e78da406f7956038105862d986d175f3f948"): true, - common.HexToHash("0x2a90b0029468dd978babc8eb27854903367af7a64dcef9a95bad49296a20040d"): true, - common.HexToHash("0x4faee88d9e37cdfba6f61e1f46b838519db2a13c2afd8653d5a98b6f43dd351b"): true, - common.HexToHash("0x8424c200b0fd25bc3b3406e764ce3cf0e298cc4f0e44fb949c1536a728991fb3"): true, - common.HexToHash("0x1a136c93bbba6da920d0590c5ae725fbbf298481eac647ebfd9a81edcab7d7a6"): true, - common.HexToHash("0xb4f2a23a3e0fea1b2a3f29f1328caaf4991c342f615e18800412f2b665659bde"): true, - common.HexToHash("0x30cdd7e73d3e6f145f4eada50fe05b41c0d9afb1da096b8d9f710d408a7929d6"): true, - common.HexToHash("0x9f4cb25aacdbedd3de2a236ccb05765d7ff99ba65338ac9017232783576a83a6"): true, - common.HexToHash("0x4ed004e342452bebe08d2c84406fa85402bfb9f4e98aa3f8c8f932ea74777708"): true, - common.HexToHash("0xe1e122c952e50478dc1dbd431801e7e2b2399bd6a2f8a4051b77cffe91960561"): true, - common.HexToHash("0x234b4c3fd67bf99dcea338f388386cedf8748759c19a7995c9942f6b70072514"): true, - common.HexToHash("0x504fd9f9ab0812930033a3294c07155b126d082e2ed23adcb2aee90cf3e6aeba"): true, - common.HexToHash("0xe4bf6bedf099ceee1f8197321a5358feffdc7a57c90d758cf57acb1e7774b53f"): true, - common.HexToHash("0x1d34e1b003e8795859829269abd4851e476662e89d1e100199c183cde7f6ad73"): true, - common.HexToHash("0x5cb63d1b9a23e7aaee181132827be7772f1f55512f9f01f51c515b517cca29ea"): true, - common.HexToHash("0x4704e71794d7b96c379f5b1de24643c4459bac0262b177c08afa1c9270dffe07"): true, - common.HexToHash("0x7cbbc01f0605380815eae5f57b27abbcfd8968bf666e9ca23bd0550db6905340"): true, - common.HexToHash("0x6d3bb91aa227cd2aba7987588443a182dcefc7eac643fa95f7f4ea0f6d2bac5b"): true, - common.HexToHash("0x20b5eb48125a45fe70f247294eec465a7d912f5c0d1e87a546bbe16236abca59"): true, - common.HexToHash("0xd275a784dd79dbf6dacf71a48f1ee1794d9f6d9abec9abc6744bef33fb74ce9f"): true, - common.HexToHash("0x6ec519dfa34a500badc54b86e2015d60e89f7df0533d1e53c191ac6853584661"): true, - common.HexToHash("0x2a162d28a6f8d3cee44bee6d900280b5d679f08c9bc342f2dc775eef2f7e1bae"): true, - common.HexToHash("0x587ae57f57c13578a478050fba77f45de0ce4551814f0eff9539aacaf7c96e29"): true, - common.HexToHash("0x9a285aab859364d7dd7d708c34259fce8e5ccf35081d891a33895d822b95e02c"): true, - common.HexToHash("0x3cf10d5eef6cf5bb649aa0385f033d2dd95061e826f328abf1992a36923413da"): true, - common.HexToHash("0x8c6e3a80c5039f5d92597fd180ed3735493fdbf3fddca94472c87133d91be60d"): true, - common.HexToHash("0x9ccc01363bdbaf1f7c5d5ac1e70927e83dfca7d2736ebd420a7a8309bf563ee6"): true, - common.HexToHash("0x97886879de60d208c3e6f7a7eeef44ee3710f1cfa453c92fa8487a7f7c0d5b95"): true, - common.HexToHash("0x51a846ee978b222662d7846026f9671433ac84a30e3ce8035e16e002c9429ebb"): true, - common.HexToHash("0x9aec9ba0e14775b3d569aeb5283fc38f6fb181e5f5eb1537333dd258b373b854"): true, - common.HexToHash("0x5ac4021b077fbcb7998fdd445e23d7d81e7693b328dad89ed050d166fa931f76"): true, - common.HexToHash("0xba14a7db6a0bcc9eb9a5a0c917a406110f16a0c8ddfbe2c3958f14d6d77f9edd"): true, - common.HexToHash("0xbf760305b523897733d0dd74cfaf785d54c43a1b4496b1ff76de60283c764c30"): true, - common.HexToHash("0x74b430af08e8ffe6bbf14080ce399c038b0ba6c2a5473597f6ebc5c545d68723"): true, - common.HexToHash("0x5f8f07b207996f8156e89b4f620d0faf42df909354a210d9b39f4eb4de970ff3"): true, - common.HexToHash("0x0c7aee9ee16e91a9c120d3492f7a2735de2c2d06c684a8a2b0f1d4415e48ed9d"): true, - common.HexToHash("0x8f944192b743dfdb1b0d40735ae0debf26fb05383558668bf3fad9a83fba52dd"): true, - common.HexToHash("0x95ae5e104de2c0e499c87ccd328fc441d4848e0cbb8729bf1a6eff2049aca968"): true, - common.HexToHash("0x0570950987d9ed8a8a8c092e72488774fd8e21fa2aa7a7912c4a39e825c73e8e"): true, - common.HexToHash("0x914cbd98f25f73f62e83bcdfe97fe4f22a024d49c00525a0662819c7a8f7a0b4"): true, - common.HexToHash("0x3050fa5b66fe18379e98b4f6a4d0c668b267e325ac7784125859140a8d1c73d8"): true, - common.HexToHash("0x8bf269edd06a13c03c25cdd16d02ea9b8494c38241b13e33e540ff6bbd96225d"): true, - common.HexToHash("0x8ceb85a3173bddb46b6807cc99a1c3ec9b9c0e08962b2be20aa5a04d53f703dc"): true, - common.HexToHash("0xde9305338feba8a8a041874d7422fe87677ce350e629351a5b37499cbcec5962"): true, - common.HexToHash("0x70f2a4dae864ffa7b8c5090b5c49f964e31e36a2900b89a982a484d42722c34a"): true, - common.HexToHash("0x81a4b3aaaf44879cf9e930db8e75c43be668051b6d66a0e684928941cfe88a26"): true, - common.HexToHash("0x73141835b94b2360edfa739a171f79e54fd6721b92d6d223194d8042a7457b09"): true, - common.HexToHash("0x5558148744956dd602a6eba1cc466eb759cfc6318e7503c4c64f1f62e8796889"): true, - common.HexToHash("0xaf9a3cf966393d6e91ec411ac6ca78b3335c6f6c505bcc5302d2688c93b8fd04"): true, - common.HexToHash("0x10dbac9c82e8b8ec5761c4c3569961bb351f8b8ab44425a251590323a8966269"): true, - common.HexToHash("0xd25d7400fee1570c0677ea329c582d02aa23eded1b1670804313a4dc252c7c60"): true, - common.HexToHash("0xb625d5a0b483d754370baa11a7f26b1a3c9bb319d52acfa7f13525bd30d1bb4f"): true, - common.HexToHash("0x7047c423e87bbd0ca3e13727e77e67e7a00605db00d8ffb10d113e78530733a1"): true, - common.HexToHash("0xdf93d82a9522d22d7815eac8d7696728c37ecf156db05595e36b62c5fa5679cb"): true, - common.HexToHash("0x7fbfc1bdaa3a1418c6ab41436fdae2cb905ac382de9fb83cd83e0f1584d51f37"): true, - common.HexToHash("0xeabbe8be7590f300174848ea66bd6918776536b6befdd83110010f394a62ce54"): true, - common.HexToHash("0x44bf29c4183057038d9513eaff51c6d533af3bb7239451cb0ec0be16c5b9de66"): true, - common.HexToHash("0xa2fedd66e398ad2238ef89b82e67a691de496592a86d4e9f7d35b9bf4c68ac4e"): true, - common.HexToHash("0xe197f4988d8953e3ea59be311f02f83d1eeb8a6d91c3eb59dc3aeeaf3a1f76ca"): true, - common.HexToHash("0xf134442431b38d2cd904804ed4ec8186488d775b47ebf28153ade23d8e96df06"): true, - common.HexToHash("0x8bf61b407e0ec573e3c2b0b321c40e10493b2a39333727edf7b7492942fcd104"): true, - common.HexToHash("0xc65c986a2397facd06e014cad2691c1e6c050f7645436b4cec180ccb932f8661"): true, - common.HexToHash("0x25cabe7254a7a23db244dbb31c053df88cf609379923bb9de23dbbd9337216e7"): true, - common.HexToHash("0x3ea42e5d8ebaaf9a315f36c691aae5a7b1d989d5b1e5155add3642aaf8e19859"): true, - common.HexToHash("0xc97090de6c788eaaf174ec9f54433e609090bfed030eb7da808e70a3afaf3e03"): true, - common.HexToHash("0x92334dd6aa4d5c409354391e3a5be5cb858ad10e02922733eb20f4bd19a46f12"): true, - common.HexToHash("0xda3b3fc1205eaa544bcd0df5d9b3cb48e92fc86b75b673b16ebf0afb1a508da0"): true, - common.HexToHash("0xde43adb13a337d7b12d15029594762b55bf9180f9c4d0573a352d9689f0e67a2"): true, - common.HexToHash("0x443f30616f0edfbc5d5192bc523a89ea81e10eff4ae00629a3c4b7489785aba0"): true, - common.HexToHash("0x23d61781abe9ff955fc7c8b353eb7688c84aea9cff0ed703ac2caea44995d488"): true, - common.HexToHash("0xa42611351c2126092bd68b45b6b8ea035df9842bba4d63caa9bab6a446248fad"): true, - common.HexToHash("0x38d2d095ce84fb83b30bfbb805a201f5073bccca9b195a8b16cb022f63db79a7"): true, - common.HexToHash("0xb011e5d3f7cd648a115d8eba61cf19bed48e0f1f2ed53f1221656e985009053f"): true, - common.HexToHash("0x3f991f335e92eec83124636ca0bcdf3ed34358a4a49dae3c31698b51c58fa11d"): true, - common.HexToHash("0x8ca74ab8cf2d7d0eac268bd6b9aca8ab5552caaefe7f981bd3427461f0d7aa97"): true, - common.HexToHash("0x72c7c382e1c02375f19ac80d20d46769edbf54a2230c64b8a822fdcae07fc745"): true, - common.HexToHash("0xc5e11e3a231b387402640bd8210108ed835f234bf72e2bd079efd45ae5762fcf"): true, - common.HexToHash("0x52854d212d8e7b1f948aa7082d38409519249a1cd389954bb9efc64f85402c14"): true, - common.HexToHash("0x5b9a0a76c77121fef2cd4ddca998da120951db30d4edb64d559556aaaecc978a"): true, - common.HexToHash("0x56b39810346606d59585ece5edfa5af64c51d689a1d665944d18eb8180582112"): true, - common.HexToHash("0x33fdd2476b5d79ab1e50bc184aec5e29cf55245161cf0c2d54be2b02381b85dd"): true, - common.HexToHash("0x1c7b6019dd4268cb2f6655a4c366f409e10726fc86d31a40aa08b5e6e5e63320"): true, - common.HexToHash("0x3013c3be640d9323728ac07224efe55b141d6eff7aa0676a0119047f498bfa8a"): true, - common.HexToHash("0x0fb40463164229148901d112cf31ef4f3d61284b7308740d0a8641e2aa3f4345"): true, - common.HexToHash("0x7dbe13662d807bc5fd10e0124521736a009d1089dbab3723b66da48eff02aa76"): true, - common.HexToHash("0x4be49eeeeef9013789762324741b35301815077f88eddcf4c032076b2ef6df4f"): true, - common.HexToHash("0xd9143b195f1c23f8a461818ac38c2b4c36c20f8d1efd5fc3b8d815a8e40338dd"): true, - common.HexToHash("0x62d3cd9648d6760320b411c0b2b61192c7c8b2c63386ee69b3f8347de4514caa"): true, - common.HexToHash("0x2c68ffe4c76e9d7aae9c31652224aefcbf387757319ccafaeb4a86123a527143"): true, - common.HexToHash("0xdd2706eb8bf54151b7fd51d823b0c4602c096506c9861e04e7f7d54f376d78a5"): true, - common.HexToHash("0x6e82cf13be3758d6b4283cbb5a2e8fdd306c5936982ed35520ada8704edab3a5"): true, - common.HexToHash("0x567e0ef200abdf9a9ca85ccf147621ead1acb320ed6fc32155f39b0f792e1c68"): true, - common.HexToHash("0x44de004819e3570418a335357352d7439c81563df22c4e3e3e47d2875fade931"): true, - common.HexToHash("0xc95850df938e21a7bf64e808d517fd6df3c908d77d36d14278d1208bcfdf1b10"): true, - common.HexToHash("0x959642f518dbdbc51ca2e3aaa7d56b055959289b9099e60f59922369447514b3"): true, - common.HexToHash("0x3b5d2ae8abcf4dc3a8123476746e154cf056a9720ee7a76582a5a3e9fc96d864"): true, - common.HexToHash("0x61d2310f7fb3d2a173ab15262e036c726db6cf9f08d271e54e75564836e1be74"): true, - common.HexToHash("0xf2af8573eb7000559395e5e2ee242233cfb5dd151a300aab848a76e1357c949f"): true, - common.HexToHash("0x8e5ab6706539a1387ed90c7c8dc8eb8d899945bec2e28a51c7ec2a2d5aee3f5f"): true, - common.HexToHash("0x9a5f23d522e28c630a56efba199f63c400d394fb7af4d2d55428c4bc8776fc8c"): true, - common.HexToHash("0x6fd73941d72819594b9787e58d59a2ddfb67bb31fddbb9c0af76f083fd3cb7b0"): true, - common.HexToHash("0xf236ccecdc5e401581ea1e6ad45e8e6a7adac59de0a9ad1e7085f7fe3d49ff5c"): true, - common.HexToHash("0xba59d55f5c290604fb847c2cd591cbdfa9e156faeffd53946143308a1c45d7b2"): true, - common.HexToHash("0x4bf1528c062e1a9e3311dd6f975606a2f55f8eb4b76d4d9b5de1145fb9e1fb58"): true, - common.HexToHash("0x57566a381ee8a3df4799980b4d8131371bcada38831dc116078d5cc59fbcc298"): true, - common.HexToHash("0x224e44bb2cc8a6889f3dfbc42eb71147521f9675502ef3a6883a5219b7a81457"): true, - common.HexToHash("0x620e24e173755d1c5e03e632af7c99faa75e18283336a03a92ed3ac89301b1be"): true, - common.HexToHash("0x039ef8f09eab3dcb8eea9604c629441e7c524f319e300956695ff92b37393df8"): true, - common.HexToHash("0x32dd7fdca1bf738ad16304ddb191365d2677b528a50890bf5d85c5d0312d7a4c"): true, - common.HexToHash("0xdc34f848eeb41149f522cdee91f63e4ca2fd300d9af1eec0cbd5f7d14d034f34"): true, - common.HexToHash("0xb54321023270ed309ff94812c5b4ca5ce10c0d77d58d1399ed22373a96644a0f"): true, - common.HexToHash("0x3334efccec1729964458aa1f275b46b6a95d683e180d31d8e4067174173c2efa"): true, - common.HexToHash("0xabe302cd86beb188071130242be7745a60d6ea1bc6cf031db8ba51d3da0945a0"): true, - common.HexToHash("0xefbaca27266dd829dee84b1ffb9925768907071f525ff445c07eb53a4c72ec7a"): true, - common.HexToHash("0x6f753ff134cb96a4f5758ca90476c240677139ca0c78d84bf19a2901137763ab"): true, - common.HexToHash("0xd0e1aed32ec8debb9219eb47c4972f44154ead12ab2fa7488873f8e4ef5b0cb6"): true, - common.HexToHash("0x111051da78d01a3906ac26b46736602faeba6ed2edf211316e2c85f9723cf07b"): true, - common.HexToHash("0xc749738d1e28007305e461770a159804fd931ab5da035942d0c18e5bd2466ec2"): true, - common.HexToHash("0xc3b8fb78c1d03ad21eab4f04b6be0f9a28e7771685dcdf41d6df0ee8d6c2a71f"): true, - common.HexToHash("0xa0e6339c8dee5bfd68be368fa2be06425bcd3a34f98d720044601711d208989e"): true, - common.HexToHash("0x60e3ee14237cc265e4354c5a6df42d6b8617d81560e502b5ed41898cfeeddf43"): true, - common.HexToHash("0xff9b554983085272cf71fce8fb58fb71eaa1856df704a4903911e11d3aca6ab7"): true, - common.HexToHash("0xfda5db544abceb602ba3e7e4e607cc9f95feb5d03f357adcfb59e4c208c64119"): true, - common.HexToHash("0x9d80aebdd0fd19d6c8292b8141f16c2714bd65aa16decb7acd1d87d530b341ae"): true, - common.HexToHash("0xfcbad15b52cd62007e702cf658f37d8375e6f4fdcfefd4c07fe3af5c617ad142"): true, - common.HexToHash("0xb9562b6a5e23c5ac147cbbf3fc623eeb863b780f4eace900a836871c3d8e5da7"): true, - common.HexToHash("0x80917f38c978c95f9b3b6b9029e86a9e788fc6615312969b7eb4bb0a7255b355"): true, - common.HexToHash("0x3d14606ac505b07534d9292e9239c3b3ddfe8f4236b95d8221a2c8ce7a483fe4"): true, - common.HexToHash("0x7e92b22f320edde005451e1ba8afb8fb34ad50487f6acd3eb851d11a8afaf811"): true, - common.HexToHash("0x187352e8d550c7a827155326923d3cfebc1085db704756415fa1a712cffc25eb"): true, - common.HexToHash("0xc9e553449cb9bea0fa62e3df9b68b37fb9e606ebe1e083e8afb3e0e2232d1b23"): true, - common.HexToHash("0x469ffc266ef6ef9ccaa971700a552abe0d82e6a2c12334da1bd6d932b8dea357"): true, - common.HexToHash("0x67ed0f4f5829b4a19fa7c3ff43eac5e2fc5bfc28306c3df852c2ef0cf47c3dcc"): true, - common.HexToHash("0x404efae210d0db82caeaeeffcaaa0a1572790045335acc944b07b6acf256b04f"): true, - common.HexToHash("0xb1a19665bc852a5b0f4b447e9dde0938b0358162b44a5362a49d80f4a57e82c2"): true, - common.HexToHash("0xd19a289c5a9375f7ade975ae4ae5f3c1dfe8d641f7750c180e4c83f388565297"): true, - common.HexToHash("0x96288e3fc3b649aa026d2dc1f8f16c9ac315123cb72b0f6244bb3291730db98f"): true, - common.HexToHash("0xa003f686bb37610443bb7d7c11bbc092e76b23b01c4d2f95b546d2a15d242db6"): true, - common.HexToHash("0x788518ac4c44902f88694526607aff4a35345d027f1bd11acbb90350b7b327b5"): true, - common.HexToHash("0xd80823e0c4a7708476611d9910abd1d8cc8e8282f4834affb05fc1ccb174cde1"): true, - common.HexToHash("0x4657eb7e113baf05f82dd80c0638f0ee3fe06ddc19971cc771ed5ea7dada4120"): true, - common.HexToHash("0x33692e574dcaea8f965d80e940a1373c8381249659981ee8420d6558e98523e5"): true, - common.HexToHash("0x884521c943b7c6c09fd5b32741dc6dc9ea09d377a0a8f3553569d75608aabd1a"): true, - common.HexToHash("0xfe277e5ce5a5559b4da872176a2cd16f960645bb01a224e2cd6defc66fa3a2bd"): true, - common.HexToHash("0xb7d306d209417b32cdc10a83bc7df980c2df2b2069e6688fce2c2f0ba26ab302"): true, - common.HexToHash("0xfd33e24397dc5b7b9b17df0e640ed79891f2206af777028c6c3b446834747f56"): true, - common.HexToHash("0x259b3a9626b7970f80354f9af71530a7bea946162d6b4a007d9c930016f5a030"): true, - common.HexToHash("0x6c8b4fc41c2c1c51d8f17fc366418cd1d802a9b8380a5f1dde8289bac177217e"): true, - common.HexToHash("0x2d6970dc6c95f4eb896a49cb9c51cb99d8bcc8c56823b49edf3d0ba22dc2951e"): true, - common.HexToHash("0x662f34508cb98a906176f99d5b055723f605599d66f64676f8c353cb76d13fca"): true, - common.HexToHash("0x9e73ed4625077150b03bf3aa56f4eef3afc6bd91224115c49767f31b4cd847a8"): true, - common.HexToHash("0x94ffbd207d325facb236f2228fed6842099cd50465f90b36dee641fd1338edfe"): true, - common.HexToHash("0xf7159c576a902462c6c473c7d90c6dfca25317fe50263f36c83590b2881d6613"): true, - common.HexToHash("0xc07f82b364d381b7e6617c71eddbf1d79a4a1c1637efd84ee793a2313db44277"): true, - common.HexToHash("0x932917fedf5995b9bc5744937ac5b2f78a1e8c18b23d8ac9e91a8d58939e3183"): true, - common.HexToHash("0x8501040ebb19829991bd1d4f48561e898f176b687e1abc5eaafac91359fb1b58"): true, - common.HexToHash("0x1cf9124208af5ac73d96305795b0033cf6ff3a7960a0228670842c6d77e2d86f"): true, - common.HexToHash("0xbcbbad0fc029299251c955808c174e403e7f2a3d01a93e2368c69b3ff38b9c64"): true, - common.HexToHash("0x9704a099832c26933cfcf7899663fdc4c08fec87446a5154a19838f57b0891cd"): true, - common.HexToHash("0x51a872560878d3dc999010b951863fff0bd1847705fade8145e4f6601981fd94"): true, - common.HexToHash("0xda12f7e1710e1c52e70ce8c4f2fe1c2a4bfba395cb907a7b5cbcfe3a9d485654"): true, - common.HexToHash("0x0d7860b357018697322b17c10d7a3ccd3fbb9357422706cd7bd1a917ead94ae0"): true, - common.HexToHash("0xf76763b7d250301cdffa3459e407098b57c20904213df96f59e38291231437d1"): true, - common.HexToHash("0x7f58393c6ee9cb9051c600289a81946e3d8674ba24612f583fde53ae33cb0f91"): true, - common.HexToHash("0x720494cac0754545e62a93d03be1a4aeb49e50e6f71ad4f329d452efe15563ed"): true, - common.HexToHash("0x52c51c70dd974ca6130ddf849b90507b826834598696f6691a65ef407e3b42e0"): true, - common.HexToHash("0xe71e3ed25abc1c8908a0d4dab877396c41f833a2f216fb9a2320eb7986bcb763"): true, - common.HexToHash("0xf42119ad092f05805ff955885d8918018c421d11ec17fc9c004edf9254eba6a1"): true, - common.HexToHash("0x49e2341ea0510a0101999725522202a784d2178cfc8fc41cce5a33641d8b3872"): true, - common.HexToHash("0xd183adb7218213d7dab5b59676ff28e899b621b1002a6a0cd0ab9907635c114f"): true, - common.HexToHash("0x67c08bf8fe8bb6121b361cba0690375913361bed6eff27e7f2680f7efb76ad87"): true, - common.HexToHash("0xbfd8af5a40251824b10e69955090bae54a547ff4808085f653ebc92d3d370366"): true, - common.HexToHash("0xc41c5d8627f1d449e9d4982c388d572666ac729862145721794b777365897f91"): true, - common.HexToHash("0x555a0f7065702ba8b34b7eac2b3a33e9a51565bd7d95da7be51e0a9a6a1577be"): true, - common.HexToHash("0x16c94f6cec128820a3f88db5fef68e74fa4d50bb2d67f23afbe9f8b9a2bb21e3"): true, - common.HexToHash("0x14eb62a5175f930ca5b9fb9b62d5dcb16475784453395a12c302a836e865a3e0"): true, - common.HexToHash("0x164943f5c33f991b84d94a7450943917143dd9b53c2ef624d02b13813ddd2a0a"): true, - common.HexToHash("0x83249539aad2c317cfc48b96d7c1159b2dd3b9cad75c25e6cc2e23adb8e3156d"): true, - common.HexToHash("0xf1f6d54e5a255da7bcf2f1f6f024838aaea89a8c6987d41d19ef33e80cf4357b"): true, - common.HexToHash("0x35335e7acd9af7290ec00d930cb3fe9a569a831d91ac471d1f6b5c8d88ee8406"): true, - common.HexToHash("0x5a0a22185d767950a881fe28e46ee414d0c8c482dbc459210a74af4b3037b5ee"): true, - common.HexToHash("0xa31000057ea9d1fa917312c2f68fb6803f662e93717ccac45c4442e3a87b3508"): true, - common.HexToHash("0xcd7958406501e488475728f6168da5d19c24378e7e5f65a0a59f1411a70b9fcd"): true, - common.HexToHash("0x9ddca6651ca94912c73b45de2cbc40ee5d1f3e2cece964eb4f26a8e39fc86b18"): true, - common.HexToHash("0x91309aaa6e7ec5692d4968686f15a3d286416cce2f444cbb8ef6c43556c7b7e3"): true, - common.HexToHash("0x2515f1b694184dbdea3ad14f10617cabb5345b4e48fc0c1ae9e5bf7a9fdaa519"): true, - common.HexToHash("0xbcb9000399c3250b88c7c2e50158274a85915b3f8adb4f98043a8083e22e4ec4"): true, - common.HexToHash("0xd7cae49867ea80f04687b6a38fe6f0698e65f24cc5307041769a1c678c2eb28d"): true, - common.HexToHash("0x106df31ae4e175bb41bf0615efbcde4cdffbca008c97c40378b1bd944e2c8e14"): true, - common.HexToHash("0xa995cc76bfa9d651b1c269de91cc98f51f6f3d48b49c94181c1f37f69b62ea11"): true, - common.HexToHash("0x4b5bdf24f1de69dfe1ab79dc78f7406ec19d79e94bdca0cabf7f2d2453034904"): true, - common.HexToHash("0x3f15c2fcaf2242a7dcb54a0cb4609afc6b1aa29db5512ae388c04ef342515786"): true, - common.HexToHash("0x09a7a0e00c1ee23529b0cb7739ae454426756e3151bc471d8179b8123eac52f6"): true, - common.HexToHash("0x321c04eb8aec5e3de6a0d1ccf41cb490badc21931d951c0366c0e11820eea81f"): true, - common.HexToHash("0xb34ced8d310e51f9601fdcdb98259777e9b340f817d6a3484069f83cc712f3a2"): true, - common.HexToHash("0xedddec1602b9ab7d15fde2329c6712a9fdc364211acb9b221d35955f34e805a7"): true, - common.HexToHash("0x7293b2c408f4cf089530d908ef3f0dd4ad590630e99502b5aab0e2abce72e3d3"): true, - common.HexToHash("0x83874636e82088616e39eb7164b2324dfc6a6e03b150221a57a65ca988440433"): true, - common.HexToHash("0x83100cfbbb828ae9cd7ee820e0b1be744524482de545f0d9e93c1f61a90153c7"): true, - common.HexToHash("0x88afa3b39afb7bb275deb4e860860feaf639e9498afb70632d5277c7da7782fb"): true, - common.HexToHash("0x37f5bb627216de64400b3c9a1a72c718da6bbe7b5da56b082ab7fc0139dc7635"): true, - common.HexToHash("0xec2fe14edbeab6a8f8ade1d2802d0997ea8b75756cbcab1cd2fce490f53b9378"): true, - common.HexToHash("0x9a6a4c664df08f141091a0bfbd75eb714147aec524fa57f5e604ee9ee205e1c0"): true, - common.HexToHash("0x9b84364ac92924740e4298d69e6c3f6d58a7de9c57eb7ba700da706cc0cde3dd"): true, - common.HexToHash("0xfbe0dee28712fb8fcc7f9d50d7436dfe0037ce953459e2ccafe83cf289e3e201"): true, - common.HexToHash("0xbe4cb7a0ccbf0b1fbfd566a512e1d70c702cb616a10cc65f5b383d9c3a800d55"): true, - common.HexToHash("0xce3bfe58b2fcb85fd150ebc36b0be81778a4f08b13014a650f43b165aa9a61f8"): true, - common.HexToHash("0xa832662ccd538a5eb00f45cef93d5d57d036b93822076ce91863ce357353a3a3"): true, - common.HexToHash("0x286a0db0f171c2187586435b1e07be6d34911078362d78a50a184abfd5b6b0a0"): true, - common.HexToHash("0x3cd5db0e2f7218832a1c8bac060e383d34314716fe6a681d0e7d6c74d583bdef"): true, - common.HexToHash("0xbc9b15652aa324cd45d6de4ee4304c3e2b14d5938b026891f070f18f98d7d298"): true, - common.HexToHash("0xb921a57c6635903a0c4281b0ffeba49ac5ecb85e3a7c6b4556ef4741081fd0d1"): true, - common.HexToHash("0x8a1cc500707d005d0454201db6f5194b2c458534946a5aff9f63f7e0edafe71f"): true, - common.HexToHash("0x80af323924f8c581aa92453bc5d83884d3147e685214f2cbb881102f627fa2c8"): true, - common.HexToHash("0xe3c8f702183bf419756135593390b0c2d4225787054b7d6862c390de69f6cfed"): true, - common.HexToHash("0xc11cef72ef2da5b1584f0d7f4ee093d42c7139684c88870ffff6dd6ac30bdcde"): true, - common.HexToHash("0x711e92e794466cbef275167b96f0e505458756485f1e53daba4fa7bf897019ac"): true, - common.HexToHash("0xee514070dc328eac7e5db3d73221ebde4f6924cf9ca89e8838cfe651c2bdd984"): true, - common.HexToHash("0x9b67a82aa6e4bcafc03ba4511898a652a0ee56101a7f300f639231d6f66550d1"): true, - common.HexToHash("0xdcfab19ae5b3243e5534b4195d0b83db01179f8b3521c37b0c91e9ffc09697eb"): true, - common.HexToHash("0x4c222752dec9638d57d6a44c9da0dfe9581783111d01a105d1ae09dfd1f3211e"): true, - common.HexToHash("0x2dafc9caaf5675352b117b344d972a37b4496d4b7d6cbdf247e04a83f6c803ec"): true, - common.HexToHash("0x89034847e4a8ca9160e8386abf5d1d0773be76527bb8cc057b5f7460df2c3dbe"): true, - common.HexToHash("0xb700a81c67e8e3b4ab0cb1d2b783b3008edc5a1cf0206b0b4ba5de5dca97eb32"): true, - common.HexToHash("0xa2ba96b88ec5d6d17d2bf0c4b12f5444ecb29ad43ad28e6417879a123f4e7bd4"): true, - common.HexToHash("0x1339593eb97d6d4724b25ae996131b4dcd8b8ec4111c277e3ffb06cad871aa73"): true, - common.HexToHash("0xa2f14dc72ddcea6099328f5c4f8c446509f6b5b6dc112edd4bef80955252a1ce"): true, - common.HexToHash("0x341eca98bef7b6488eaff86e610530e8270fa4e95b819d28686d0d5e4227da46"): true, - common.HexToHash("0x7034a0cce3599d88c507962bb11e6aa002f25c7b1c4ca1a0939d073ecc68ed90"): true, - common.HexToHash("0xda7c8270fb15be173819099f933156fef05d289d3a70103663071bb3ad6ff4fc"): true, - common.HexToHash("0x55c7d5ea33ef19ed0b2c8040cc57ecdde6670489d3d714c099744053278cbc67"): true, - common.HexToHash("0x6ddaa8dd46b588d49392c99f87bc8b94f4ad23121ae1fd3c3ad4c8873908e65a"): true, - common.HexToHash("0x20cc7790f3c6ade7f4ac7269cfa33cc379a6d334733f331d4d309234e8800356"): true, - common.HexToHash("0x8b014ab865bf62c95413647e723850c0973ed0e0f82d36475483a4b11aa2e5af"): true, - common.HexToHash("0xb1021832b9bb783dd857f04145a69988c98c091cdf1f68cf109c206371b74edd"): true, - common.HexToHash("0x791be6e51266acde14e912ec396537d8316b65ffd504b0bdd44f125d6d9db693"): true, - common.HexToHash("0xc116169fcab472bad3ba7259689677503208506343ec638f289c02bb5e905b41"): true, - common.HexToHash("0x43822e13f317623e35d534f12da8a954002a068a951d4bef5e9ad0dd0368c49e"): true, - common.HexToHash("0xe0bccdd9777781b07ada55216095fd60075d799612dedbba6ca0b222d7047b10"): true, - common.HexToHash("0x8bf3fb675998860126f4714dfcac337d138afd3d9ea64f8ae554d66a3bd4ba05"): true, - common.HexToHash("0xacb4e259206ce705da48258b2cb2f749dcf254bc2d103a9818af305526bc21a4"): true, - common.HexToHash("0x99adfcab66fc28787775e3a8b4947aa7e6b687ca328fb92c1705851a5eb51f22"): true, - common.HexToHash("0xf36b2bdc5badac1ee2705ef3d7ab779c0bc1eac77e0bb9bca61789cab5b07887"): true, - common.HexToHash("0xfc7cdaa59f77b0757aaf07f4fc13511255d9c432ec18a3461876da1ea462c49b"): true, - common.HexToHash("0x22405646094523b95f39172ff15acc00eb42bfab1fbeeb3f8a220503e461f25e"): true, - common.HexToHash("0xc513d1b3812633b36e0805de82d24d72dfe7072ec4784247433072030a94ce96"): true, - common.HexToHash("0xabb9cb5ccf0e8e8e686f98458ac7496394cb224365af6dafd94782f069a6686a"): true, - common.HexToHash("0x71b2aeb78eee0ec9ed2481295213a8e925b59a1dea64ed46616305c738e76f4e"): true, - common.HexToHash("0x2f7136e8b4f4eb693f99ab8656b2208891eb25fd16b7e67fe03b1cb9d1e012dc"): true, - common.HexToHash("0xa67606a294df641121c07513753e91c118653cb11bd1086f7d6e917e350c52f6"): true, - common.HexToHash("0x839c2dc31ea97422acaacd85ef5534da0a68f9715087c0484a8fb594ee54d33e"): true, - common.HexToHash("0xed2bc8e61bdab0fe68b23ab8ee39e8e5ed9a22a0b63b662a7fd1cb0f0110a514"): true, - common.HexToHash("0x3c25eceb25bcfc6f74f4e277459ab6f82572ddc162359c87df12b084864aa573"): true, - common.HexToHash("0x500396ef6ea9bff27588458fda9bd7751307c67194d803f78a8ae46b13703250"): true, - common.HexToHash("0xa10bce3a240c689e213bb72d84d70b885b089b71bf0160e727d982f55bbe037f"): true, - common.HexToHash("0x75c72adda82b9efe40ce307f9fe56a075b91a79eb269dc92d839e0fc32ef7f8f"): true, - common.HexToHash("0x671f20f80a9f680a2e33a6648c5c6e607d90e6b59548341fb8d11601b158928a"): true, - common.HexToHash("0x8dcbb11652a9ff3cd918876e500e438f7a415ce9b3e76f575378ef621e48920b"): true, - common.HexToHash("0x33350c9dee80576f1822b6f404637bafb5514fa41a0cb30e2f038cbd0253cdd5"): true, - common.HexToHash("0x65cee10584ff80c79c86938f91e5801b0273bf0f403e5160d9a7046f96fb6669"): true, - common.HexToHash("0xfc58a0e71716ef88b69fe9fc215518cf44dd325544fe8b78926f70290abf4d60"): true, - common.HexToHash("0x5fc99f5b33fea99185f4ee137cc9ab019aa90a33f9bae61c6c1b1bd694dcdea2"): true, - common.HexToHash("0x7388d2a182d061b8f75df700e3840c653f6930a506242b6f31d80d8a7366eca1"): true, - common.HexToHash("0x905a595ed6e3a921d8eef5468dc82469ca8731e63834615fe25718a62e51b6da"): true, - common.HexToHash("0x4b748ce099d23888fb1d2761ec1c69a5154e537cb62df7b297de674bc289be52"): true, - common.HexToHash("0xc0c12c86bfad27d386cbd6c69ef2364bad66e3fcc66c2e97e720f322eb6d42c4"): true, - common.HexToHash("0xd5fabb4965ab7e88a4f51f021fd9c94f766e9a92991d6788d9486623defa286e"): true, - common.HexToHash("0xaea0dcf4b115aedc767a2a1a01eaadbfa861a97b6f673351a07c51ee0cb0d9f4"): true, - common.HexToHash("0x2dc0dc5fd66341011038f9d050d0c7235dd92b2e8694745cb1d126fa403cc7dc"): true, - common.HexToHash("0x5bc85354025d0d7427c5912bec348053c774ab0dd6c0c995dcbc9f51455e9659"): true, - common.HexToHash("0x76e327ba09c42f3c5d6c0e2904eecbc06f651bbe6860fe3ca81226bdf41ec380"): true, - common.HexToHash("0xba9955178a576f4b19c4bda347c4be50eeb1128d211e20840b501652e1f235e6"): true, - common.HexToHash("0x0ab1f9425099cd4db700b400cf20979e8d8d0114e5d6162591e50a5029dc9330"): true, - common.HexToHash("0x8401da56ab5626f401e0be187e69ce3bfbe51b7bc7a5a97579d0dcb4a8a685dd"): true, - common.HexToHash("0xf23e63884e3f4e8877c56987dcd98e586bc02d5eafa61fe69db3c22b43b52715"): true, - common.HexToHash("0x98f3eeb99cfb6aad270720d7eb66f99804c8e672eeb587a971affb17d9bb5f58"): true, - common.HexToHash("0x452567dcb7fb29dfc5fdbaa13cd82a3ee31243faa8947a261176acbb7c51fe17"): true, - common.HexToHash("0x1a588d0284b7f08d4339b05dd75ec48547465d895aa609ded1078da979b2ccd8"): true, - common.HexToHash("0xfaa2e31efca2b6de8589da9fdce676d0438b4237bf28ca8e98c27ff37a3cdc00"): true, - common.HexToHash("0xe8d4b0a7b65b6f5665a2f9a6e4670b36abfa82def06b4b81107e346d0c86ebd2"): true, - common.HexToHash("0x138d7846f653bd5df6e13ad48ec543d7e18dc50b457b4f8259b71b8966375c41"): true, - common.HexToHash("0x5439a65a5c0083311934b60cfd2e3abb7f229e87a6b17a7b24a601545b421972"): true, - common.HexToHash("0x4da33a31e621995f9fd4e24abe1d4323f2902df9364800985f5832f2fd1f2630"): true, - common.HexToHash("0x0d0640a61264ca142a13723ba302075a62c1543ab5a76b21d1af3229098d9e33"): true, - common.HexToHash("0xf87831470044731e001adb4c7552050bd49ed44eecec7e782410d99ba2fb5152"): true, - common.HexToHash("0x7c0c3319c51999397b978f3c36d376060252e1562ae20cea7c4a7e2ab91e1b42"): true, - common.HexToHash("0x6df6f3edf3308ca558a4f09a184fc47eaff26bdd10de42de4e6e67877c0e7453"): true, - common.HexToHash("0xdfe58fd1ab8d02a76dd39dfeddb00b935c08137d2b70c160d1ad535c7a0d8897"): true, - common.HexToHash("0x90d5d6a446e17139ae64202ad4cda65f5ae4fc8a011c01342a5e7bdd37cf7ba2"): true, - common.HexToHash("0x49c247808605d2b1bc3ac77f6ef21c008e318d230da47565a20c324547f7312a"): true, - common.HexToHash("0x09e84a97322edcb893957dbd4e0dbd95108cd0c8cabf6cf29148fb7756d57a05"): true, - common.HexToHash("0xe2c10ed3c46b46e41ddae76169e4445dfaddd9f2f636103256c3d6647e040ece"): true, - common.HexToHash("0x96dfe19ce78290efb8425746ed67d7b3780c8e71a3251935932478c60214ed28"): true, - common.HexToHash("0xe6c82c374999215a8abf1f9daf67278c0b0cd4d3ffee2a99453ff4f638c26c82"): true, - common.HexToHash("0x276605e9cbb8ede894b016f678a47c2371fcb7b3b795042456f30ff19a71e84a"): true, - common.HexToHash("0xa053d73b1f47c0c89b85639ec96ee196131c404a38cd49cc4446026eea47b14b"): true, - common.HexToHash("0x4e4f83e99fbc2befb35f01b55b6d66ab0a5a0dbb8d528e3deeb9e9f19e68e6e5"): true, - common.HexToHash("0xd560e4283453290f44cc5172abc9e1f2aa9dfc23472531dc0374553148fec401"): true, - common.HexToHash("0xfc42aebdf0c74170416e095df9310f72b7a1d852fb5e8ee08aefd110b59de7ea"): true, - common.HexToHash("0xe5a604705853452a458e2d4b734ceb07913e36361c9efa60e16ad18e1d2dcda6"): true, - common.HexToHash("0xd51eaa775b34a7e4e2bc0afee1c0e6220faccc7d8b3e3acf530694f2fa4b862d"): true, - common.HexToHash("0xdf421805d03128eca627fe5d7f56648f14a944783c1af73f45cb775a7d27ba48"): true, - common.HexToHash("0xbc031efa05e33abc0d5b25c0ba867a00bf05346385418d764fdeb64322717e9d"): true, - common.HexToHash("0xa68e76612ec793923448374bcf8043c8d10b0dafa0738629a7906bd07ae32139"): true, - common.HexToHash("0x777c8453d3c59364fb78e57f4cfe9471a682d6089533d6104d44209f6f492002"): true, - common.HexToHash("0x8e12eb1c7d368078e03876ae76a52f6cf92bf3f6d58c174496c80d6939004567"): true, - common.HexToHash("0xc6f049ec455afa8c3ace23594885f6c0f4fdfba2db603ac01901978770768847"): true, - common.HexToHash("0x60b8d392b5800c7ef839141673383eb15e99b872c40d11efaca84240a25a0045"): true, - common.HexToHash("0x0a34196ff701a58467362fb3e462d89ee0e1a5805dd171b6b70dd7a3e08873e7"): true, - common.HexToHash("0x8d482f2b2d079e267ff0d102530d7a9cbd23763cfec5d31d4cbb5aab91face59"): true, - common.HexToHash("0x3ff17d6832a022f3dfd741fe03fb474911f0c33b6375979c3e05e03e769782e0"): true, - common.HexToHash("0x1af13e8f3bfaea8468c8e824e0cad14d72a7558583a766b0c055437fe7f6f858"): true, - common.HexToHash("0x17d5188dd7defcbcb1b187f84145b29a85b8b8f7253b3c8f6d102175497c9785"): true, - common.HexToHash("0x183e50a974f010394f020a49b90f94619bb3edd9e72b0b1d5d24015e1777471b"): true, - common.HexToHash("0xe782f7813fd956f5ced7fdb6174257e14c9a1d62d984afd7bb07c31166153a23"): true, - common.HexToHash("0x4a94db52dc7920fbce166b60f3377bc7842ecaac8aba5e72852ad4ba93b0ab95"): true, - common.HexToHash("0xc04fb55d2109640b4f4c8a45c9b9a651f6860129debf77d416c675f4b7f20080"): true, - common.HexToHash("0xa433807245543c9996d4490285ac91048dd0b0e7c10dcf1459212ca02b9cf209"): true, - common.HexToHash("0x511b23dbdd537f7d89cccc76d663f75ca44873fe4116ffc245f2e09ec0cd7dae"): true, - common.HexToHash("0x09fa20bfd1d637dfed699847fb491d07d31cd87550412ba17d2e24835eeb9ebe"): true, - common.HexToHash("0x2920993cdbd7d84ef7773ef526cc38bc4f083652c342c652b7832d4f35a411aa"): true, - common.HexToHash("0x03e4b30be2b722e818bc5291a1e53d84fe62e6d1b64429ed52ebd172b845a24c"): true, - common.HexToHash("0x6dcf1d1e075592a5f7870d26a576791b5330fba3f0b49c8d11f91b32770f64f8"): true, - common.HexToHash("0x0ea90f62dfbdbed0e7d639143eb0d1bd7cd2a25922a7717fa6f42e9f8d9c56f7"): true, - common.HexToHash("0x65e76a3376c77b2685c22fa9091f763480a7cd4d60a3438a9435c5a5a15d60e3"): true, - common.HexToHash("0x6f5c06acbcbeebf6f54dc24aafdea454fb0704eb2d3445ec4fb411fed5db6643"): true, - common.HexToHash("0x5a01a6d5537d8839f3dfba38fb75f540dba4a44d16c15bb06abab9b8cfa5bc5f"): true, - common.HexToHash("0xfe2c8415090b4e151ac5e261cefd8bc95f438b18a564bc33155216835ba1fac0"): true, - common.HexToHash("0xc583f10dfa99ddf80aea54105e021b581a6380dc0e28b2ec1dd3ca9232d5003a"): true, - common.HexToHash("0x212945ebde4b2d8e0875208ca943a84fc499381fa536aea565d7df192a437aca"): true, - common.HexToHash("0x51452407a098f216cc9b2cf49e8a87e9b1d11edac5c388a30d892679a5ba07aa"): true, - common.HexToHash("0xf2bd9e55ed8a35ba8391c571feaa70e6c195b5c27d373f7093f29719be31b1ee"): true, - common.HexToHash("0xabb162effd1ce63a814e62383112ab3b47feb9b124c117974cdc6472af2d4400"): true, - common.HexToHash("0x85de01b7ab44f54fe036ed22b9018762f06f1148028cbd91b6092e2950c9cef0"): true, - common.HexToHash("0xa46a8d1beefe543c4c9a11274f7ec099359eddb6ca32d553645c650581e1f51a"): true, - common.HexToHash("0xae3d2d0eea6fbb2fb6587f68e89252729db9b26eaa558abfa0343727f3460637"): true, - common.HexToHash("0x8ea4c34b3eec148438653be298321525619f2f1902b38c2b4e27cefdeb923510"): true, - common.HexToHash("0xa24d3e85f936e89e3065ed0ff938aa78acf66711046d0be28d2401ef52479ed6"): true, - common.HexToHash("0xd1a15f0a6a7ad7373104433db49157291d995005a54caee445af56ebaf67adfd"): true, - common.HexToHash("0x42144c05194f739423f93f559f83540c9013ba64d500a63edaaaa881a79f5073"): true, - common.HexToHash("0x67c6725c08ff647e24f4a9d09fa05ea5c88c17ccf9959160ed256383735b37e4"): true, - common.HexToHash("0x5fcf9c6c166c895b63f69e48a6883e554257b9ccd8e32284f28aaee344c58647"): true, - common.HexToHash("0xf8d7d550d2905cc942b1caa61e161cd99ae37c94857e2a1d29211f77792a11d2"): true, - common.HexToHash("0xea354f716d3fddd7fa014985b3366b91157e6e52950f913ff793476b75016d8b"): true, - common.HexToHash("0x0ebd94ab0327e2ff327ed87e9d624489da9c3d2dadd430429934dd4385caf0a1"): true, - common.HexToHash("0x65dd0579ae88a5fed5c8642898d8f86d99200d08b0aabb43b7c6d41d72cc5c67"): true, - common.HexToHash("0xfc59aeb215d49a7d7e157eadf00b470f4861e9e3936ae457645e27757fd145a4"): true, - common.HexToHash("0xcb19004ef8a72811b87530ecc354a58390bda2c1f3217d04c0478d76d2ea722a"): true, - common.HexToHash("0xd7f009a3060438d06620c13f5007a167c8020c113efcf59ef42dc511d3eb096c"): true, - common.HexToHash("0x3ed07f5d65c9fbf8ff2d142fafa3033bb26f65b6a2eceb9ac93d589ba46360d5"): true, - common.HexToHash("0x05cae351fe8038c7c76b8900c4ba24278c6fdf7654cf5871c53cf97707355f50"): true, - common.HexToHash("0x28ac8fbf41ffdf9504e384cf452d17bec3c62d7b4b21e0aa0cd175205ce155c2"): true, - common.HexToHash("0x3164ac0c70c0d7436e816cbe9aeb83456f1c17825479718a598fca3096df25e9"): true, - common.HexToHash("0x80ce5cc70b32d842f486d2c787f6cb9eecfe2c72f2e5297d0918050005c82e05"): true, - common.HexToHash("0xf1ffd5ba14a8e5deb2531872480855d5d4527a291503035e540ae18c3631f452"): true, - common.HexToHash("0xfd7de7be49a1f566a97ea0e033ff38a119228a4fcf061a6d37e91e794dfd57b0"): true, - common.HexToHash("0xf31a2a65c385dcb93b4d83fdad399372fdd2cff5352df97386cb91e41c98d352"): true, - common.HexToHash("0x4f7bdbe294d2a36f3c23bbf762f031ea65a999d30881dbb73e8b682b51c93a18"): true, - common.HexToHash("0x2d55895368cbd8c9c276e82c29aa50c85c002141cbd02bd879a2735a70213553"): true, - common.HexToHash("0x01493599bed67798ea27be5aa24f1116589361bf1a51bfa71f3f16a7191681d6"): true, - common.HexToHash("0x44ab0cf5c265c78d7f67a2d24a649e4a9a3a56793b328bd2b90bdd9e83596b9a"): true, - common.HexToHash("0x1742592c743c2fba6a7b1973e5c87d5c1dc1852dab89c72f18e1246673b62fd2"): true, - common.HexToHash("0x0e49ef939ccfc571c40d2c4f795997955053e63e4c11e44459e2aa23d810ec4e"): true, - common.HexToHash("0xf40c8ed8483030f77b72cf9592e792ba1f7db07e40f4da34fad7a51ec64c21a2"): true, - common.HexToHash("0xce5dead7ce1f123f866bb5cf040807ce3dc273a7eb0c0c71bbcb6ee0ee334348"): true, - common.HexToHash("0xd17740b7945eb70559226fd03db5c464b281f7772359b631cf0fa9f11b96e44f"): true, - common.HexToHash("0xcd35c93932ff0975fb129bb3d7832555afccb27d9f58576adb772c9e72a16dc0"): true, - common.HexToHash("0x6da9f21412aac27fb08e57089072471db3cb0324d2cdb6047a6c30388a5b6f3a"): true, - common.HexToHash("0xd4506c202bea6ff7694c40aa86f5a2c401ca2cafee554ec3cf9a0d906b65a71c"): true, - common.HexToHash("0xed61af2af94d11023d95c602cb90da63d256cf6f5c15bc06cd620e48fa80703f"): true, - common.HexToHash("0x1ba975c0d2c8abff2eb5cd80f36fa7c8db331c7dfe2a39e1023ff37b5dc8c6a4"): true, - common.HexToHash("0xe0eef72d1ef27cdc6671e126f24d3c26bfc5dfe50306f46cd3cc7fc9a2179169"): true, - common.HexToHash("0xb614b2848389c429a334a3a19e38c18b7d55fba24978d949c7fe8cfdf2e7d932"): true, - common.HexToHash("0x99e97d4abf299e7fd3ed470d8c66d61df134a8799a6a8cf422d47dc564e95c97"): true, - common.HexToHash("0x79cda9c803ca63d49040477da69ccc094c82c4a79ddc1dd66e45549ba007120b"): true, - common.HexToHash("0x51a877374c4ad5f1c92a9c437691439859d08e002970b3147dd875ac274f1048"): true, - common.HexToHash("0xdbcb96c4dd428f6ec5fa9d8af2095104f249b5d2f5378246701c9a0011b4a988"): true, - common.HexToHash("0xc8a705055a74a7c015d7ba31801ac5bca519481585b6215f143c000d7856af2f"): true, - common.HexToHash("0xb05bec2401b88ee8b7b0a100c5f256cb0d039d51633697374abf96f7ac76db30"): true, - common.HexToHash("0x570b93d2b665bbf02893c1b777ed73edcf76b436be0e387aa7ec9be1a431d83d"): true, - common.HexToHash("0x44cc01411cf825e3d26ddec50738120976c08247a2f46be384e8653707132b32"): true, - common.HexToHash("0xdeb1c36e832b2fa9a41b1434117e5f680e2efd9b99d24d8dd125804152ea844f"): true, - common.HexToHash("0x8fee033e24560cfe5aa492e5edfc3b7a7d2348ad92e3cda19f2ff9606625433d"): true, - common.HexToHash("0x895b5dcffdea36bde1f8e10da059e543579f21fd5f03cd5c75b63a38892db162"): true, - common.HexToHash("0x1c85e5b81d3459b21cace757fa0b1e5da125f2123e10951118fea00fe47be4a2"): true, - common.HexToHash("0xc3cb9529858ff8e6f8957e11389164a43ac3949f260c81633f0c81b103498cca"): true, - common.HexToHash("0x402663946ef87682c80895be6da64f4288524c696a52311f1893a19ed85a9a9d"): true, - common.HexToHash("0x917f00f262fbc480c1f097d812993194ff79cc63d55fc0c64476a9dccf13f5e5"): true, - common.HexToHash("0xc440e9fda75e9ea4985d9e72cb066469ce9ee706f561a32abc94e4b987a0dfa4"): true, - common.HexToHash("0x09d2ad70d894e3d6c364242900e901ff0d19d48bccda9983679fa9f8a9b3cea5"): true, - common.HexToHash("0x1ec6f3fb06f30117b2b714f8b9577dd369f20a5dcf17bd3ae73e59381b2b0fd9"): true, - common.HexToHash("0xa628eed1675345ce4ebbf4831cd8aefa03864fd4f3581590c68cfd1f0d62c83e"): true, - common.HexToHash("0x42d219f0f5882a6064d9d0d6d6db5e1ae5c9c38554b9cb061806386659daeb24"): true, - common.HexToHash("0xed9edfd2b2284d122f2dba2a5030795ddbbe3a424350fd3da89285372606bc7f"): true, - common.HexToHash("0xd1595cde50678679bc49d0ea3a43def6ea6465d3dfb57b30e431fd3faeac7de8"): true, - common.HexToHash("0xae7ce046d7c9402f42ed25d06e9df9958a015a6f5a0a614c11fdaf2dad390b57"): true, - common.HexToHash("0x09f251ff59a1650e2b59e3a6474c10371e0cc3bc32fefb6b9b24732c54b280ef"): true, - common.HexToHash("0x80b5d979ced91b103a3f87a6cd21550c413265803e4530932e51a3c3a67f50e1"): true, - common.HexToHash("0x83e3fba42de7e5e697ade59a35d0d55ff029eb4c71ad28b2a4f55030e34a421c"): true, - common.HexToHash("0x9b81c2c2602b926e5371042b6b7246f649c6ba66b85b90f1ac91443926433f6e"): true, - common.HexToHash("0x6e958d295346ceaf796ed08d25e5d86805ffab5183037f94faa806d413f1fb58"): true, - common.HexToHash("0x61bb5ddca8c9a692db81b26fb2e67263442cb1b7c2f90179a7f14f46f3d16dfe"): true, - common.HexToHash("0x071880af1e15df951c9d117140f60aa9f16651f7264cfaf6b0935ae7a7ea2199"): true, - common.HexToHash("0x637148d53722e4fb27160253b6365f910784c28cb523598ff0b5c2c9c5a4201f"): true, - common.HexToHash("0x42813ffb0b9bd9ad1deaddd774a8227c628f21a78259864fe37dea53fb8fcebb"): true, - common.HexToHash("0x34fa040647cc4f816b6a0d6b2d6ae49df915df2331fad4ae517cc4af31e9ab8a"): true, - common.HexToHash("0x88b65099aa6ca9d73cbdc73cdf4f851ad47f4ae6bcfb13811b35e1fa043012f3"): true, - common.HexToHash("0x04a69eb11566565601ae3a17eebcfd8d19970e593110bc48b2a421cd20b41c6b"): true, - common.HexToHash("0x29ff64901625e85eee8a827cb8ec31be89ab9c39e0bdcd14d24f09b5cf6fa1b1"): true, - common.HexToHash("0x01e6f0ed5b4aed11cfeb71b555f9ae3356766af1ffa170aaf4ba1c44eb154dbc"): true, - common.HexToHash("0x5413a37fe1a0a7dc488aaf517d0288c7e64fb79e660f3c4819ee42b6dc0942c0"): true, - common.HexToHash("0xac0dada257cab949b08bccb1bbde0e7cb1dae5989827c548b4e78bac44b8bac1"): true, - common.HexToHash("0x6ffb5cf321ca8383d72bc94e31190e15c2a7f7268019754c466cea0fb38c165d"): true, - common.HexToHash("0x6d31bf0bc368916a898d6080c51e00460647de9fdb3251dca03a68096f17d2cc"): true, - common.HexToHash("0x8ce56a53c10248687e26780c69f39447249327341071f7c2a31173d4cab9a527"): true, - common.HexToHash("0x165c53c50b38ec828bb6ff768eea943f7c277d1f9a4b7578ce99bd57a080f0f8"): true, - common.HexToHash("0x328ce7c90e1baa74821e6d03e44cd26e635e77d1601170f0b02a8690d29f13e3"): true, - common.HexToHash("0x18a4cd8723d430d3e105f61afe9ede60452cd10a38550516728e17f0a61bdecd"): true, - common.HexToHash("0x9431d50c1504cdc344a64b3903124ddeac1ae806f00784a70399b193f065f881"): true, - common.HexToHash("0xad94f0dc295ffd161d1c20aa8b883e7c2f753a366823f2676c3121b0ce9812ca"): true, - common.HexToHash("0x478b1c67d6cb7c2e9fb7c0386e9f704871d30384e3d0f15cbf0bedeebaa04ff2"): true, - common.HexToHash("0x6eaab60ab4970f3957e0e8fd7439eff77de007926c9930561e9a132783590f88"): true, - common.HexToHash("0x76ecda923163b338e8164f597d8e567c369f5901f17711a16f236932523f6b85"): true, - common.HexToHash("0xca81c6cbae5d5e569b9f86c6d9213feb02606a73af23db51494ea7a2752b6fb1"): true, - common.HexToHash("0x09be10d16c736723f8fb81a71a261d6940037e68ea66c0b094acf807e4d1842b"): true, - common.HexToHash("0x5c52e3aa3af17e1578571aa952b4904f0270de41f9e6066c9f81ea8deff1a8e7"): true, - common.HexToHash("0x9199354fa54e7bfd0051bb40bb8deddc7f62bd0707f33a74075a14af6563c276"): true, - common.HexToHash("0x026c45fe0f7a1160d699e9c78128e1b914623ef3263f58cc45c5420afcba53dc"): true, - common.HexToHash("0x03d958e285269020429f1c783bac7558adcb9f99a4b8de0ec40ca18bda410c7a"): true, - common.HexToHash("0xcc9f284d03523dd26ab799f50c4336c090e7bad30abf801914a7fdaf90c2acee"): true, - common.HexToHash("0xf4ef2544ec2baf824d17aeda5c4f7c7faba82f7a4c5d8187e6dd0cb9447b9969"): true, - common.HexToHash("0x39564dfd9e83ef9ad999ca08560fb4260c72ec3c0bcabdd2f7ba43f79a0c7d38"): true, - common.HexToHash("0x64cab010cb93353b70ae548aa85dc33f062ddc51c52b43a97d497f3fe3379ccd"): true, - common.HexToHash("0x7592d13b03fb2ff0f0953a97aa718844cfb226edab1c56191ce10e67a3b63e44"): true, - common.HexToHash("0xebfb913f929cc2375f34edfa7737eaafda03fd505ca5c3b1c2bd443600650904"): true, - common.HexToHash("0xcaf7567249c257bf7695e452ce57ffde981f1e6fa8838f8475b7f7628767e1f5"): true, - common.HexToHash("0x624318b94a10db23c9b71badf022c142614fd646a6383637f29cb731e170edf9"): true, - common.HexToHash("0x51ba020f17e75792ac12c560759987be6fd786a1df7fdc3830a56719ae9e4edf"): true, - common.HexToHash("0x694a4b3c151bd8c3bb99bf9f2444240b6f771459bfa3ab80b11461fa857ac685"): true, - common.HexToHash("0x722d36c99246bf503a97a57fafd799c5f826c8d8623ae1de3f6c9f3504a53d4e"): true, - common.HexToHash("0xd79cbb80ea776e1705f0fe30840daa6288ec91f28b711059983ce6399a2b46c5"): true, - common.HexToHash("0x7978bc1dfddd89183f8f5ec323e41e76f03afdb88ee61616093752c04caa2037"): true, - common.HexToHash("0xb67f8b033b3cdbb334c607812923dc8b2650ac8cf41ed8cfc4e157f4ae704494"): true, - common.HexToHash("0xcfa83ade5f13237de7cf2ae5a541b13854c93ac86e02d78ab292ff9a2e00c7d3"): true, - common.HexToHash("0xc22df45b666387f9a19a1a5ae4c6a00f25c09e4a1c730a210370146858ef2394"): true, - common.HexToHash("0x6be2664168f9f3c9a9a72d332dd10f175384300826d000e206d93978e34190bf"): true, - common.HexToHash("0xb087fc8989356254b717467e1335f07ca952a7ddb933ca20194c31f7cc7ba340"): true, - common.HexToHash("0xb31e868ded7658e34572c5ebf6749c78c39bfa8dc0df70f5fdbfd11a542f3040"): true, - common.HexToHash("0xeb0bbbf58ec184ad6d2e115f37b4ba6432744d32ad1c9e0d4a7fac2530dca6d4"): true, - common.HexToHash("0xd9c7850c674f4698a32c23d5d31efa7e84c7f5aff3f34d365590b344ea08084a"): true, - common.HexToHash("0xcfe1c130359ad83a93194f17b60e9778b3d867717239228cc5b3aeab680c99d6"): true, - common.HexToHash("0xad04e6187acedc6d9f896c5e9b1213eaf741efce305ab02d867d9b0ca31bdd44"): true, - common.HexToHash("0x6df227c7254e3bed1a814a958f50c20f14b008095fa2f72a3f0fbd53f2fc0363"): true, - common.HexToHash("0xe997e76cfc068a5bfddbc62952d33b0c75135e96ac9fce547b29c4c8bc73aff1"): true, - common.HexToHash("0x989ca363f8e69854c459562811cecf21afad350fb2a89aecc3281f545af127f3"): true, - common.HexToHash("0x0426e0c691d2502850410fff231d714d35831b53cef0d64c3f73a7fcbc722b65"): true, - common.HexToHash("0xb24a439698d44ab44b3749ce38df0d690f0ea8507d2104d32c40db99ff67f24e"): true, - common.HexToHash("0x27abd6e71a186f1b284b0751d67b4802d576e61ad0d20a85fc49f30eeba7652d"): true, - common.HexToHash("0x52a0b7ad9ba787b9e18c642f36b3d4594d858a3ceb3c86a465c9858a7618440f"): true, - common.HexToHash("0x7b6b79414078c35a4af9941516b691e712195d1783e4c3df2c6f8b47dc4cad2d"): true, - common.HexToHash("0x7212721123fc5b9557eb7f6cc7c920bfeceb80aef068d49ac558cc1d093a5fd1"): true, - common.HexToHash("0x65722ad0aa8eed03d848a30da86865a1cf69c748d9f2e7db715b4aac095d00b8"): true, - common.HexToHash("0xea266a572a059db96c5ef654783ad85d77d16300762c7f772556e6496877c2d9"): true, - common.HexToHash("0x883b19749e376960d12fbf57603092acb22b8f2248fdffd22ef8ac2b007a5245"): true, - common.HexToHash("0x85685481109cd03bfbf38d17485565ea6b05630b82fb8d686d5570b6d3663b4a"): true, - common.HexToHash("0xd9d355c884315b86946a0576239749c48a60097b956ff65b451fd54b5a68da9c"): true, - common.HexToHash("0x24299e57a359607fcb8674ae4f7f9d1469cbe9fc0f1e7b661a7214f6d0ba3a4a"): true, - common.HexToHash("0xe8de9ae390ac20a00aa87cbcbbb1a17f7d9a9121093772964e3e22e10793bd37"): true, - common.HexToHash("0xe24e4e86b633ce49cd7c7b490cd66f266022d4accfde77e366fa5db7cb4ac482"): true, - common.HexToHash("0x1240e8c091cff33f13c5c37812a73c59c7349974ccf8658035c389b180aba834"): true, - common.HexToHash("0x2579bf99d1d952f60e0b02bcaba6a06b10c1df5eccd331c0d53fddcf1cd3d5f2"): true, - common.HexToHash("0x6864398ac94558b129c0b302d39183c009e27c7d89cbaeb817e8db716861f2c8"): true, - common.HexToHash("0x48102dc3d83ff7c157693620f73517699af956d7d50c37a9c2d31125fb92d49b"): true, - common.HexToHash("0x3fb9e9ab7f6e50420109a69d6e6db724233564d9c6318fd1a8a4b0ed5e6cf36b"): true, - common.HexToHash("0x098b7ba1d530bd3440bde6ee2a137ceb86b349aaa44c18809b2f71e622372d5e"): true, - common.HexToHash("0xf5930c61c153a24d905c8a3b800463795fc8a93f57fc7ea95d1afb87f1a38d1d"): true, - common.HexToHash("0xfa53e2501eae245127ddae41c5408bc2260f3a4fedde082527012e60f41e7dc3"): true, - common.HexToHash("0xc0877120d0b7795fff6778daec4423574abf4fc55237423921be12c7383b53d0"): true, - common.HexToHash("0x0a846392a2c4b0051e51a32f653fcde6604da7a535332f43c15f8cd3a4f88962"): true, - common.HexToHash("0x22050eebb2c4084a75e651d0523880ecd56fd7d7b08ec94e4db9c7cc25eb22f1"): true, - common.HexToHash("0xb727b89eaf8073a9b48ca663138902a28d6b6d79307709a64d4c615d3fdc21b8"): true, - common.HexToHash("0xc7f3f2a81be146c8325fc4067c1fea0de704a58e2a946c314406b287d26737b5"): true, - common.HexToHash("0x4f8717d6c24e023ca6b8362d0a6177acb94d671fc541c0c632cd5d6f11e27f36"): true, - common.HexToHash("0x13fbef774dfdd0c1f9bdc0cc1e5e64c0ececb9c6c87658fa10e09a378ffa3c7e"): true, - common.HexToHash("0xb420b98f31b1e0aa0262165a6876144227fdbb608e0b3eb925afb14fac0197c7"): true, - common.HexToHash("0xfe0e5677f8ded28cbe19eb533b14d702db0bcd203025ce522b0b8aada524112b"): true, - common.HexToHash("0x4a70b9fb780af13692ca1c21fbca50f359aa0927ef0edc143d988bfca3e1891f"): true, - common.HexToHash("0x1a19de8c18b478d6fedef03ee55f67cbc20aff7abc7637989fda98101f00bb43"): true, - common.HexToHash("0x95e9a2cdd580930e303cb0ca3ca2861359f25b0424fcd7f9556aa1df977bfc0d"): true, - common.HexToHash("0xc38bc7794b56507d34756d95385a0eda72d679089c26d239b98dcae15b25d69b"): true, - common.HexToHash("0x43eabe03e1ddd0f5a42aeedbea6d003222fc9cfcca5ce4c7ec2c325e773a8d9c"): true, - common.HexToHash("0xb152acbfe6e6874448e4ce17944befa130c1999c5a6f99918c2da558453827c5"): true, - common.HexToHash("0x7eb183e47f617f5d8c356a8e1591733f6d2ae1e59a799beb6a1ec51a6ebccd8a"): true, - common.HexToHash("0xcad0d51414ba6ea5697e2330a98f5abb00e78151dbcba0b6d3f16bdd8bd209aa"): true, - common.HexToHash("0xab3f2d8fd920c158098174eb7955626f4b78f1260ed78de82139715d7b97ccc2"): true, - common.HexToHash("0x4a5266c2c776a58b8e02d59e1731d5e8f6c308f58f5fa25c4e2130a416443c3d"): true, - common.HexToHash("0xd47bcd3628175c3c55aeea6312c5c53ddaff083313249ada8dc27a91f9bbf5b0"): true, - common.HexToHash("0xaa4de85574a8122e2393de3becb0af4286f1d935066924248421ad8644733bfc"): true, - common.HexToHash("0x1a7bc1b07fd3a30f5112946f51a35524b5075f4b9b76ee316ffe5f792b8c89bc"): true, - common.HexToHash("0xc3cbe44c8ff0ae045024953d623c95d7c528dc4be4cb7db9fd83f727d05add5d"): true, - common.HexToHash("0x220af3a05900d4f6c61cc0b35496a5800d21977f3c5a3bfb475145e9ac12b00d"): true, - common.HexToHash("0x527f96dfcda17bcbc06b4199cff3d69792461ec1782a1af98fcfb2fbf2b15bae"): true, - common.HexToHash("0xfbb1ddf8f96c1ca51301c3bf5529faa7f0966acf88717b026c4e5b1720c58aad"): true, - common.HexToHash("0xf6dde4d259914c44f9e2effe153b67b9b59645cc12411e092a4cc40a550c6646"): true, - common.HexToHash("0x07445cfb7415ad177f0c736036521893102478ea4c3216f85d0fc4f75ecd11b3"): true, - common.HexToHash("0x2812d35332eeef6a164f432ff0bc039597aff676872f98ff7bdbf081addd4394"): true, - common.HexToHash("0x246b0504b560463a516f142b9e8b58d6766372c173168a55d10551f08a480531"): true, - common.HexToHash("0xa11a3ca01d1265d03a79f6765b3ecd977a41898767e996475d7a2e8c44828933"): true, - common.HexToHash("0x51dbec6c25bef037cfb6bd4fd837ce4f7fe137cf10b472a99ddbb0f56eebdcf7"): true, - common.HexToHash("0x24ca9b42cb154176a39b6f4402f3d4e7e4f7f0cdb4f9818f958ad683c6848541"): true, - common.HexToHash("0x471d59836f3835f71f92382b6c77da874467b134b4d8ec37afb41e3e14430684"): true, - common.HexToHash("0x5ea2335112d87f0bf73d998345027f020383a5647caa6690886129cc6b000be2"): true, - common.HexToHash("0x2e5557822a0f1cb6cb81ddfd0b3badfeeb1b89746a72df945a84c32b83caa463"): true, - common.HexToHash("0xe86c6db4727dcdae801205b75a82e59591a85ece6ddaedef31f3d13953d98ffa"): true, - common.HexToHash("0x1affd2a2de017d49f80cc94337c88dc63f69aec25232ffd5f3f8574285fa7364"): true, - common.HexToHash("0x2e7eaec9c50bf00f0d71a8221f4a7ad676b55a748e6c5ec059eefff0e4e8a1da"): true, - common.HexToHash("0xd884f208bc91a535e1878d7ba0937a2edbe69a7c7b0f6f2332aec443a942b157"): true, - common.HexToHash("0x9ff6470f64bfa107f08b5770d7772da486f6c09509c36989222c76a72d326996"): true, - common.HexToHash("0x44e39e48361ec58e277b45e99992e6fcfca84599617e62dec43110a6ca165d00"): true, - common.HexToHash("0x181e428ecac3f150b9bf40868e5628a5ffaa693a6e9a0a5ed947923c319bda3f"): true, - common.HexToHash("0x91eb10b4ab7ac09404c5fdad746d170d5d4325403bc05982b4b1934b9c17f2c4"): true, - common.HexToHash("0x761208912ffda5649efd4bf14afdd4f5bec83efbb54efc7e2d318f845b9c598f"): true, - common.HexToHash("0xdcd6857f8725c054cfdce166fa4030c943dfec89621b57ea95e25f4dd77844f3"): true, - common.HexToHash("0xf51edfea9276a1cb398e3bfa2e681b195f61f69594fd3cc361ce00fe514100de"): true, - common.HexToHash("0x0686573c3887087c7cb02e2113f6d9f3f10d9a2fc737dbd055f2a1b4d435b517"): true, - common.HexToHash("0xc8ab231b89f77cdc041cf276d1fc4df73777db10c540a8617556c60a54507268"): true, - common.HexToHash("0x18b155a2f25af9f00404927e04ef7b30f3d3b8c247ccb59d02a1108d751869bd"): true, - common.HexToHash("0xb040095c27641842acda67e6f93338bbfbdeafb3ead3b324f2964c057846b3ec"): true, - common.HexToHash("0x98ef10fcf45d09858329c5967e1648789df581e301b2a32cf2acaf8d8a49b630"): true, - common.HexToHash("0x088fbe98e436195ecfc030bdc3ada2422f27ea50e5f6fc2a7caae7f82438952e"): true, - common.HexToHash("0xa62c089fe081c67d322132059ca7aecb014449465357cf01d00d602643f5dcad"): true, - common.HexToHash("0x7dd7fde99b2eb25373b45d882c12dfa40249632530d608935e27ec4667142cb2"): true, - common.HexToHash("0xb0698a3414dec49a65e01ae1f7b71be46eac0eb0c342375e82f5396f1d1a3124"): true, - common.HexToHash("0xcbd5d911ae6606c57f7d104fff097460e4d173656c3ffd2d4ce3c5d153742215"): true, - common.HexToHash("0xf8634290272f78d253f706eaa311eaa6d11f32518d69be589f2f530d6a94f66a"): true, - common.HexToHash("0x4faecc2402b864f3366dad4bac14b46b75e3f42c7d83779f7f55195f67ffe57a"): true, - common.HexToHash("0xe74b0cf70356575c073be43fb0bac5a6c40700724e7411ce6abd3578fe7faeae"): true, - common.HexToHash("0x5dba605709150e0eb912e45e0bee61b83a04b6696d159f46ad2f66276d31c26c"): true, - common.HexToHash("0xe430ad1a5914efc902a20b95bb70a638143a4527c89fd26cf84bc23dd3149f37"): true, - common.HexToHash("0xc1bd5e101f0e20db681145d7698c73bc248c7cf36af4842da79d978d4b7fbeed"): true, - common.HexToHash("0xce56e03f39f31eeff36b8e71f44a7cbe4e2a076890bf61f19679172f878a0ae4"): true, - common.HexToHash("0xfa91be61fc980610f12007ae570f03c581057658ed04e9a4361299017a95bfff"): true, - common.HexToHash("0x3c63ea125192852c9c9d14d2ea576d9b552833490d7c5368641ff4d191375cc6"): true, - common.HexToHash("0x833cf8a41307be28997b8d669253e32af4714175ce0ff49089ea5e9120094470"): true, - common.HexToHash("0x9c1f9c08a6501281283606ef9e0b0987141e3edf30d387f3beff0c975693e4ad"): true, - common.HexToHash("0xe6dfd784a2e46ab83b312c884fb100fec3193409f63e1297cd050d186c0e154e"): true, - common.HexToHash("0xd1c83f0b72b6f9a280860aad4c61c2a91bed6a94bb7a43921d3e32d47c67f690"): true, - common.HexToHash("0xd52207b250298466a4ea936a28df340a579d859f541fee5121ec147e61ff7bc7"): true, - common.HexToHash("0x3bd9647ad0f14b438daa8e77ef9e172d383f38feaec61ffb24ca50ee6aaa8b03"): true, - common.HexToHash("0x35ea8c2a21cd9cbd5cdc8bf5a25278e6279b75e3e1863d0ebc33ed3b8a36b695"): true, - common.HexToHash("0x2e33df1fff58ad99151473a74d7f2d188acb3624e411d9f701e87519bac4de7d"): true, - common.HexToHash("0x359a05bbc3f50bc51a76519abdb4f68424f4e577670b9e43655f8b1533c468c6"): true, - common.HexToHash("0xcb398fd38a3813763a48ab6d4f3730137e6114a9fad6f2a44b2c9cda11657385"): true, - common.HexToHash("0x47c51b13ae740739b1916af5231b86961aaf284b1842a1c735798c450eedae54"): true, - common.HexToHash("0xecc0d7ebb306f3e54fc25351c64a8ec114dfeaf86ba85ccb890ce7b599c850a0"): true, - common.HexToHash("0xa8e27d5d417c2541af57442b65491678432e852a55c30c8ee1d92cf5b268aca1"): true, - common.HexToHash("0xcdb9e94332c20b6f1e9db91ed42d7f21cb2725588d51606759260f1bd89966f3"): true, - common.HexToHash("0x70b1e29288b0a3f3c2d0fe1d589814d1480ee29663a65f154ae68ea77826d7e6"): true, - common.HexToHash("0x3ec41e912bad0a9ff54b0909a3b833974c1574c073209e36f22d439d7a7c5653"): true, - common.HexToHash("0x42283e1ed2a9154b79430e7b89ee77697fc665e456f7fd6e1e85cab87777b94f"): true, - common.HexToHash("0xbfeeaa9ca1ccbb4331ff8675651b652faa50969f11ad0d153d9265bdae75f9bc"): true, - common.HexToHash("0xdd54f995126b12532d9f8d9d56f6e8761d6f4367b9bdc5816eff8aa88dd4f626"): true, - common.HexToHash("0x1856ed832a1f7f2cec808ecfb0e3bb18ba888625f378571ee6625ceb48f451c6"): true, - common.HexToHash("0xc2621bb6b1930e5f3d4cf36a88f6a22aad7bb193bda60f5642bf7186bc2a2da7"): true, - common.HexToHash("0x69c9eb44983e59e9f189907da4223e3f99afac47a6166bad492ced5ace61636e"): true, - common.HexToHash("0x615cffa18d521d8aed25ea994dd2b8ccb1a967dfceaf6b3741fa7aaf951b18c8"): true, - common.HexToHash("0x9bc9051360148286a8469c4121ff4b9c49d5092cba1fde56e88bafd21275114a"): true, - common.HexToHash("0x0d431bf3254e009974cc70bf62e30df5f3fdb99723ccd769b8c99e3bfba9932d"): true, - common.HexToHash("0xfe4bf8c2dba9cc1c9566133da03479e85bf4bcd28d5503cf2caf6ca0c23cc880"): true, - common.HexToHash("0xaba2728a901f26112d60981511d6d957f6ddc53844965cfa4df45dbf0b97eac7"): true, - common.HexToHash("0x09c38edd90923dbdc21eae7db1267f19b8f8e7a2c71059c4218a597493eca44e"): true, - common.HexToHash("0xd3bb90e4bf039519dc18a59cc5351b8cf76f250d017af0935aea204e38282f0f"): true, - common.HexToHash("0x88b702a005a0f388e3e9012e3d0d8496d9e3398f81a36ccc4c880ab3fdef86a4"): true, - common.HexToHash("0x08c41a4862e873b83b8252bca8e3e3027315873743dec6a9a0de68c39dad867c"): true, - common.HexToHash("0xdb2e310bfc3179df228f2df5e50d8744d0a8d6c93df4bdbbc4b6d4147b310e8e"): true, - common.HexToHash("0x1db00a1abea755d0ba483b27fc254b7886ff737d02047020e6a4edb5dcf59edd"): true, - common.HexToHash("0xba32e8716377451c711127c7d92ef8154399431e8eba19707415ca47da148a82"): true, - common.HexToHash("0xb5907ec5fba8222397ef80d174499303a2b55e4e43947d06b9ed1a6a1e0a7aa3"): true, - common.HexToHash("0x7d7a05bd482da8fa8dd0e6ef4704696153809257a76efb3ac6a54e36d77e5526"): true, - common.HexToHash("0x3c42612710e322cdf7b5ea7e5e3daf2d605128cfe30ed08833ccc594dde4c761"): true, - common.HexToHash("0xb69534aa36e118409f7920729b7b6ea52b276c48f1d09e01b4f079c56ddd5de7"): true, - common.HexToHash("0xc485e57b42aa0314d1053fc78cbf2faf5fe38d696d12582af4f21c355cb91597"): true, - common.HexToHash("0x8b2fe73a9e3e02bdfe257061106834c1d1522ba9b9e11071f415895b1b4dab67"): true, - common.HexToHash("0x2b2a815152d93fd408da7dad7b2cd480551483dda333c232c11c035909244c00"): true, - common.HexToHash("0xaf62bb6ae9425f39900f18c505b8b7a811ca20aff24ea3a3584fa89ca3917fcf"): true, - common.HexToHash("0x033ade0db0f7e3dc07bef496b3acc08630185c1e302c04a141e753ebfa27764e"): true, - common.HexToHash("0xa282672af291c84094223469aada0888ab8ea0023222472f2754eda7026401ad"): true, - common.HexToHash("0x817c23a40a0ee0141660bc6cf513e38576d9b7126ae7de2b5e8c2149d83846e8"): true, - common.HexToHash("0x733b4bfea2f8dc00984e1dd9519046fb6d2fa3879dfb17d8a7a412ea34b0bb40"): true, - common.HexToHash("0x2d2cf6c97836c46f41f4e7a44629c431e6b68a402d809c663d78ab3e8b76de9b"): true, - common.HexToHash("0xae02babfafceafc23f78ca7afd2fc2958adb0be474016290ef3b5b051647fbff"): true, - common.HexToHash("0x7683fe21c5354ffd6b7de4ed4ff802cb3920869e23657d7f9bff7473b930b460"): true, - common.HexToHash("0xd3f7d0e5349f9c54275a5440dbe29cc8473b6a838840b6338c16c4673e681b76"): true, - common.HexToHash("0x9a84ac34bf5b2447d2099c53d7c84b5fcd7f288863965bbb4a544c01ece1e1ab"): true, - common.HexToHash("0xdf2a4b32de374f561ab5286df8bc2492d42911175c5fb155b7c4c382d97845a7"): true, - common.HexToHash("0xd0d737e8b7b28162cfcce86c0058e3f8f0562f63260b0299a003424e32f25e98"): true, - common.HexToHash("0x19e2624bfe370fb8453f446e7c091ac1fd5b5526c8ceecf2cd9c79c076ae3315"): true, - common.HexToHash("0x2b6fcc1206129db2f582d1b90c0ca0128a952557cd1bdde8f6551f7d3d2330ac"): true, - common.HexToHash("0xa4ac6c9d0ddf3314a7c8a6062bd1c222a252fe8df8a17fe9938a0bdcaf6c523c"): true, - common.HexToHash("0x85ecbba7a79beac66b61d9bcab98b92b0260ad425c77af813e110b9ca1797a74"): true, - common.HexToHash("0x0b9ca26a08653b42bdb9a0a8ab99b100848b03acb046db40e19d7cf4c8a90133"): true, - common.HexToHash("0x24d326dc9f0c02c156d52da1ed4c7df7f10d8b3a07d288b43ff4268c3bc4f358"): true, - common.HexToHash("0xd5fcb1e7aad92477af1c924fb4bede0dc45e2d40db2c9867ed7168c0cc28c5cf"): true, - common.HexToHash("0x2361b3e4c792e85e2265c8465392de3ccd3e673fbde8699e3cc47bad90a14c39"): true, - common.HexToHash("0xa73877b599dacc8b9c1b1a9425044525b93b953c0b788c8e195b3fab788ab5a0"): true, - common.HexToHash("0x6afc9bf5e0a6c746f7ddda0e8e74330c08a6aff06c5d2fd97741ecd933225f26"): true, - common.HexToHash("0x47e628cfbafbbd53d6b1d7a5325ace4371045f0123fa381bfb48b7e616353618"): true, - common.HexToHash("0x5092cf5a493e4d98303e7ad4d6d0c91cae636926f4e5c9adcb6aa289ce19ad51"): true, - common.HexToHash("0x1a3826aaf4448e77c8b6556245c2ae3e209c6fc9e11c6e9c21e5e65d843ebe09"): true, - common.HexToHash("0xd42c619552c8da5afa2bb53b38302c22c4fe8969252145c838a2b7d735462da9"): true, - common.HexToHash("0x6eaf3d1cd31d186f25ada7e66f58735b96bdb50800483bfb23a954aa78a9c4a9"): true, - common.HexToHash("0x047cadc8dac5bed09c80667201c2382241aa6294dc281675a952c34320163f21"): true, - common.HexToHash("0x54e9264dd0a4a184bd5c4c2d9885ce9def87febbee5c6ae47335da6c98571e5f"): true, - common.HexToHash("0x6ba020d3899ca2028d737fa132421790203b2a3ca1378e9daf6d11fb49c8e900"): true, - common.HexToHash("0x427ccb60613f4b7e358089b16e56d21fbfbd711bff35521c7f4a18d33cc77e31"): true, - common.HexToHash("0x493301b352a8b32b67dd19f017fec0e6a243034f57803774a7f60a2a673d28dc"): true, - common.HexToHash("0xa78e96cb54abd34bf2187a45597fa857f40a025c99e58773f36a447235293a01"): true, - common.HexToHash("0xac8c356dbb2ac4e8d0ad99e6b7fee04ab0aa7f1db3c63d84804652f9d8d614c6"): true, - common.HexToHash("0xcc52b12fccfaafdb13b9944c9d644b91aa01dc003784987a82730e54f33d0cb6"): true, - common.HexToHash("0x20e3744cce20bce7eb8f7f731b4967ee4b44a97336d43b9e2227ce3014004e61"): true, - common.HexToHash("0x9aa7c6bf671abbd3024f78886f73d6cecfba4e91ddfbeb311e796ed5020ce5ac"): true, - common.HexToHash("0xa3d9d0106a646704d63168e913ac77ce8af7a290db7879997f03cc2b7a96867d"): true, - common.HexToHash("0xc65a750022be43fdf387b450cf7b36dbd3410028f063faa863a5bb81404834a1"): true, - common.HexToHash("0xd7b0dd31a1e48de9d5a47c229a8aaa467fd8001c9e3ffbfeb9d0e5711fd568b2"): true, - common.HexToHash("0x695df89ab9f27f53d778f88dc2166c1a948e7ab93c3c1bf510871e102b90c973"): true, - common.HexToHash("0xd9185fb278a181278b6e19c3ef9dad649f78cd3a36d1d404ff0de7e76cc4b40b"): true, - common.HexToHash("0xda551441cdf6f0e34b6e68732889e58d83bba7a3248bc36fe9fc2d7301510cb3"): true, - common.HexToHash("0xa7f8aeb866edc77dfbe727cb1dfab870e27907bb81efa970024c7127bd7d6a0c"): true, - common.HexToHash("0x3a1545d4fc744b909e2db1aac501efd5733a16d922d6757938748ec8a47d544d"): true, - common.HexToHash("0x0a85cce37de4ebc0b0e91989c311c7929d1e617a241395da231068045ae928d3"): true, - common.HexToHash("0x43f4d22a676b74d0c39882e7b6c8b7a4b34dedaf195be9752bc379629868929f"): true, - common.HexToHash("0xb8ddc7700a1997b8ca480633fd5063beacad5467c0753035e97904d3df61e068"): true, - common.HexToHash("0x7069b8dc328d9760bfe1ce6a7c16b8a8256be7dc81efb0a81f91035502d5ec38"): true, - common.HexToHash("0x03d17e528db3d32debb424cfaddd478873968d69cc1594f2a970aefd6274d472"): true, - common.HexToHash("0x9ad5a6a0f722fbf841164da2e46ec07d56eaaea251819fb789233c7098fe0445"): true, - common.HexToHash("0x211a6680c9ad1b20df75d9888fa7203831ff0674a3f1f25d81ce5c4ef003ea6b"): true, - common.HexToHash("0x0f1af5ab0e99be3637b9a8b23e653c888cd58ec0c921e9d6ca4db6c6c3d126ad"): true, - common.HexToHash("0x642f98be5e7ca2386e2635437ebf81b37a35a54af644eb374222c772a5658917"): true, - common.HexToHash("0x3eda6a4a43524494919cdb2ef7ea8954947c5b7d86924d1cbe015e9682f175e6"): true, - common.HexToHash("0x0248d42fa85b357d63ef847c61cb8d0b31618216d17b56e236234793de123ff4"): true, - common.HexToHash("0x326379b25c04674532f77ba91f59b42faf0112814bcdfbd8145c4c1046e08908"): true, - common.HexToHash("0x13be693491434b21b9df4fb58fdcc503c0e8067b0a1d448ad88d38876a9b1951"): true, - common.HexToHash("0x03f430b086740848c8123ae44ee3b4b5c734ce0791eeca43b69e24f703b10a81"): true, - common.HexToHash("0x2c54bd240bfa661a684d08a77d968ae53c917384bd8d86029cc871b6db757121"): true, - common.HexToHash("0x6914cf340c12ae743e15b8df9fd77c4681559e5c5b19e405608ad23fed113da7"): true, - common.HexToHash("0xb8f47bf4e0662b6f98d5faf5507e93e18c5d3566751c7d131ff7d59cb9cd63f7"): true, - common.HexToHash("0xfab1d73516c2b8831faab46e60005f0b41cccfcfad85b222fcd980a4965f13b0"): true, - common.HexToHash("0x8f2fbfaa02a4acf38c0dc7f3681d7fa3888bfc24ccf52bc1d838835269bc12a6"): true, - common.HexToHash("0xe404f1175b92f51237a2011b7661fa6c72120f4ef3ffd3fb399b14bed8fa5c79"): true, - common.HexToHash("0x4766be621fa730fa0518eddcd72a953d6f879d920af759847f6cc71045adf0d8"): true, - common.HexToHash("0xe47be20419fc0dd79556972eeff3588362bac2a9220d55cfc9f0575ac72987f6"): true, - common.HexToHash("0xbfb656e9865103738c4256150e4e4d62919921355a8f73b81aacfe0bf906cb47"): true, - common.HexToHash("0xb31052469abcce844dff4432dcdab30991ecac67474aabab52ed8cdd57481854"): true, - common.HexToHash("0xf8bb27dc1df4f524ddc5d209bc523398af6ff0517b8f5a746779eefb47dfabdd"): true, - common.HexToHash("0x76db08fef6072a01367df7ec9aa7775388b370e704b97b83c6a4881d15432a6c"): true, - common.HexToHash("0xd9de9164d86fcd28871a7fb78e85b2deb193af1cb1313b45988bfd6eee31fc6b"): true, - common.HexToHash("0xc47e55a178623a347c2545118b34449129768898989c3a58a4ff15286cf2bfa4"): true, - common.HexToHash("0xe681343145daca9e8359b18db9fa6f47bc78c78eac26ce6ebad9d3ad197b4615"): true, - common.HexToHash("0xf25b63c038f23ec1d748231cdd2b4be8f37b4a03c8e00eef3714bc795fe3a246"): true, - common.HexToHash("0xf5266ee7cac2a0f7714cd34a2dbae43ff4b62829959993b7c2ab97aad7ceec19"): true, - common.HexToHash("0xe0cebd56193fa9b7465a413f246953a9ec84cb75b4270357882c7c026dae2ceb"): true, - common.HexToHash("0xa4ff58e80b1e3e38b5c74597d650d90406ab24d5fb6504e7c5b7a4ce172fb9ca"): true, - common.HexToHash("0x07e70e6aacdf1591266f83a645bd3897b64997da2a75d518b37827d3aa7785a6"): true, - common.HexToHash("0x227cb2d99096301af905f3074ec308d39bb71f07edd5a4875d0c6ed178d26f79"): true, - common.HexToHash("0xa4194a5ad34e8d54350a14b4cacf5380be000140897f4981b9fa975efb4dc96c"): true, - common.HexToHash("0xf96aec960603731116bb02018a1679c2411571c171f367ffec28fcbb0d20f294"): true, - common.HexToHash("0xf250fd4d2887b25b2a7383b29c5f457e4d5f9cf3f06693db111aa2c38325a8fd"): true, - common.HexToHash("0x49047d501458da560a3efa8166dd29d18639c2ee03d7f218e7ff4d6dadf2ca13"): true, - common.HexToHash("0xcbf46f1dae6160e5ee0e7fa013b328dbbfdaaab102fc0fba61573855edade355"): true, - common.HexToHash("0xe555d5f8bd56106a32f428213f2439f2327eda0ee39f2bcf7d90a094fd9cdcaa"): true, - common.HexToHash("0x585a1bdfa84866e8004e8861e1127e7326ee195141bc406cdc690a77d5267080"): true, - common.HexToHash("0xcbc56bf0c5150231930aad486582feb499c49220d8669d3c32259cfb9226849b"): true, - common.HexToHash("0x5fc45fd72628b5c76a5f7449147d570d2e6ccdff801cc70ee54bca050587acf5"): true, - common.HexToHash("0xa7c0cb72fa86eb8daa533db2930c789e43b7933c3baa86020e77260c56ee3e63"): true, - common.HexToHash("0xae19c4d40d1a1d5e9f3f6bfa3f0a38c1bb42f577190ce811dcff843ffae9160c"): true, - common.HexToHash("0xe22399326bd95ef28d3693fa15eaafb2f082118c8fe7c2dfa788c86eb079a16c"): true, - common.HexToHash("0x8f16d6ae36d5cd720824ec90e06b98b6c2a0f460721f3b31e6a5e4596eb73b2c"): true, - common.HexToHash("0x1d8262dbe0acf3056a262c14e757d44d42c713456e8d2f3b0c5b79a8483d522f"): true, - common.HexToHash("0xae94c0239050ffdc02da3d3c303b8693e3fae988e7d6eaec0708963b0ed70a49"): true, - common.HexToHash("0x67704365fe0a34047d1dc33eeb4671d831da650f6183b4cd5eff5139aca20f55"): true, - common.HexToHash("0x65476688bd20a532ab70894920fa55892268b2d65b2cf8191d06643f878404c4"): true, - common.HexToHash("0x527b5006a86062cc67e3f6c9e4b39dd33f924b374098c24e9afe7f6cc5c44a2e"): true, - common.HexToHash("0x516dce66801d42baa3d463fd9eec1e32fb31148216b7827c4900c81e7753f06e"): true, - common.HexToHash("0x3e66a16cdadec53c6a0884a67d993a941d73c55a91b06615e0b0951646e02a62"): true, - common.HexToHash("0x80a7ef330219fe55c4e184f93034912b298e9bc1f93209015f8372bd0815dfb9"): true, - common.HexToHash("0xe250fe2a97c6fa693b1686118c8124aa321e5bc52312cd4fa24c8dd463dd7081"): true, - common.HexToHash("0x170a68fc1545d0ee8ff713167fcb6703949619f5f0f018e03e41ccf4bb1c36b3"): true, - common.HexToHash("0xcfd7ff18d00ab0f0dae434c70e5ec7f39fa8f32003627b1924f6034a21adb458"): true, - common.HexToHash("0x17907d507ba34793525cec8f80b7278d11618b014bb7951005349b2abbc8014e"): true, - common.HexToHash("0x83e6f439c752068697b4013ea1e74aaa5a9c0a42548bf7f2b11bc07b65815478"): true, - common.HexToHash("0x5d856cc73d2c8e66130e688fb0334b5bac232ba165986f1289880f595229c674"): true, - common.HexToHash("0xb7f8d163cb125d7ccecd7714be9faf6c09abd8ae2985c5bc53cbfc771e5440d0"): true, - common.HexToHash("0x23569b3349d622b8a913f0b8731edba0c2abc6665026c17e807a3c861b9ef983"): true, - common.HexToHash("0x2193d2d6ad463328bd3132e31f95f1d5c9418bd00e6e85c1372b56f0e3192a8a"): true, - common.HexToHash("0xbdcea5dc7f845be6876e8a75e303e86136acf7c039125d48f31d5dff2579367d"): true, - common.HexToHash("0xa7f2512d28898f265ccf129aa16acbf85af86457bfe272d208260e443b50e84a"): true, - common.HexToHash("0xcd40eb21b39a6847917bbf520b7f0c12d8b1dd15c29dd90adf32a3676e6f3a45"): true, - common.HexToHash("0x9b783d1c47565a71cdff3d76790b4591585ce90581bfdd532fb3016536a3beba"): true, - common.HexToHash("0xa8e907966fc908fe4a96ac252c472bbfbe0777275ad3b58a2230774b0d738a09"): true, - common.HexToHash("0x0504da16c3586ed37aa17aed8ec566b76d3b3a5e9423d765e1c1ea54c9318f67"): true, - common.HexToHash("0x1f2577c320a3c017f6b3dcab4f4c60e3c36a8fa99717ec0797cd3a39b206f5f4"): true, - common.HexToHash("0xb36371d53d9e64ee041a49f80c26d54671b9f8d49061ed1dd5aa7dc69d1f0986"): true, - common.HexToHash("0x871d1c1118fe1cd9b772a2c09d692ba79606ce40cedd19611c888fcd093da880"): true, - common.HexToHash("0xf58d492a4639eb79ab7d99d51976a9150ed59e7bdf597db7e070d11e52184ed1"): true, - common.HexToHash("0x52222146980e501bbcd02cd40d08af70973cedfdcfc12d407411277116c4fcc7"): true, - common.HexToHash("0x26bae03ba33b31ca39d23021ef7fa5cbb9a02e39e8bd8130ff147f368ea0016c"): true, - common.HexToHash("0xaa9c1dccdb4e0faebfe35b0c0f12274a0309d0d8bfa55e5a214afedf1259a59f"): true, - common.HexToHash("0xba29ac70482f32e4d8b228d7b88556424a19f64ec651ed67196880efb759fea2"): true, - common.HexToHash("0xfc0db100ed614ba903ddb745a274cfda1118dbf27b65ebc0e1891066030b2caf"): true, - common.HexToHash("0x1ecbc43eb07fd11c2e28e32e520852182eb1412675097a9a536ca32c967f135b"): true, - common.HexToHash("0x3cc64d93714357249cdc83d5f4d8d3747efc0fc1a4c8df62fe6078b3b67b3745"): true, - common.HexToHash("0x4b03f230a327c7cc2bf17e096b630eadaf06be28498f8d44e288e43eb3ad1781"): true, - common.HexToHash("0x032a0709d31d5767ef6aa9bb9eaab2313ef75e50ca299fc587464fbf49f21556"): true, - common.HexToHash("0x918d7a6cbc860adc11dded68bab435f3fabac6e3e2369e251b8f42f89086e04f"): true, - common.HexToHash("0xca9b06e61da4a30823d4d6ef9ec0c28329c5d4fe5d093a07729167945eb667ee"): true, - common.HexToHash("0x6021955f1300835454822aa603ed9f5346af4fd59e812c555c772f9ed4f98d89"): true, - common.HexToHash("0xabf13c511ad1b74b5d0f979f9fdc25fa300f93ee8904c166e327ec8271580a62"): true, - common.HexToHash("0xb66eb229183df9b7c73747f5e4f8408dd40fc4b8d4340f450c8d12e8e00ea96a"): true, - common.HexToHash("0xce312dcaecb83062b06fea4d022cc6050d992ff7c44296df36f6aa0e66d0f068"): true, - common.HexToHash("0x4b232971970d87549a26a98e417d62229f0ef1eda48c76d2db5e83e7e1c22e03"): true, - common.HexToHash("0x9e7a3e489989885b9d44987e57745a6ac940ea9af87aaef57cfe554fef035c59"): true, - common.HexToHash("0x70a91628bb64254fcd9f8c616be55ed54f33a42fc81439b4ebe88e647a4fa31b"): true, - common.HexToHash("0xb3b3997a697ca76612e5bc2c603d0b9f8ec48135856c31e7342d80073ef8dc89"): true, - common.HexToHash("0x9d16be18cf3ee549ee2218af536d964a60a6b595f1660f3c2d71d8486f7be85e"): true, - common.HexToHash("0xc40b92fd03aa4d2ad330332606e615b26618600762d544b49ae97d1d5933ed92"): true, - common.HexToHash("0x270ec91267cae02b75c1b738ceabcf4b6c7b53075872fe97665b1cb816f3b621"): true, - common.HexToHash("0x0d0ea3ece3ada99e9264e1aeb4f96c6843aabf3e190e3cc9485a4bc57b78a14b"): true, - common.HexToHash("0x7ab06a229f6dcb989643c507ccc787416ca1f88d5d6bf750551097f752c857b2"): true, - common.HexToHash("0x2553be735af16ba947d0ed837cb2d39e761011eea1426a2c17add209b84d5833"): true, - common.HexToHash("0x2da944254b4f3409bdfcec0696e814655c95ea84b90a2a6ef0d47e7365556816"): true, - common.HexToHash("0x320ac862829f418456769a5a68864b32ecfeff49dd12c05e7ba08f6a40444f58"): true, - common.HexToHash("0xd7af3a7b2e973834327eebc11cdfd8a091d2f513b9fccead64b8082ed897c7e1"): true, - common.HexToHash("0x52f8761a54b1f1b66fbed6b93e6d0df1d84611af41e092a1e74638f360da6730"): true, - common.HexToHash("0xd340cd653eb571b3364fb43ffa2cf32a9ca29f04e5c37bc21c2d4d66c9b7561d"): true, - common.HexToHash("0x54cea93f4a27ca23f255c8343269a7906bacfe534fd5c6f68990064b68ec084c"): true, - common.HexToHash("0x6e3a29011993451f7ddde854affde0e108d98e004c0de831b7c615ec1eabc4e7"): true, - common.HexToHash("0xb656c698b673e3090c6117c943fd3d39eee7f5003f9b3a68c53b673e1f98edc2"): true, - common.HexToHash("0xee490048e481fa6741b3c7b5fad48fa64ff3c1a7af251930244ae6b3ffa5d282"): true, - common.HexToHash("0x3027da6b1284b4ae5df0845ec1b0e9af7945341ca879ae7e04f4dd04f01fe65c"): true, - common.HexToHash("0xa1da8f46f58c66d1a7b164472b72e4a933c475741ac4651dad369518bcb52c97"): true, - common.HexToHash("0xbb760b39ecbb0ccc19164bcec5483da239b644215bcf0eace29fdb9893a0a204"): true, - common.HexToHash("0xea620cceac827e785cdb97b493ed974e235bbdbabc145482f9c00a72103c19e1"): true, - common.HexToHash("0x7d44791b5f573881a717dc6421bed9d7e4fdcce63a3a92d17a199160d50e6bd3"): true, - common.HexToHash("0xa44bb6c90cf744a950e5c8643ebb011d9e00a2be2f3bfd330199a6470eeafac5"): true, - common.HexToHash("0x6a2115f22ab21d200e98c89921ec532abcd829af20664de738c74971fa7bb1df"): true, - common.HexToHash("0xb0237875b31f26c2e0f772e3ea5adce3f4d6f643a1b13b14269f46837f94af46"): true, - common.HexToHash("0x68a75429873f782821ad2e007ceedf1a51fe0e7da9a99e0a4451cc29b720d756"): true, - common.HexToHash("0xc98d8cff57e5986dcbc6751bc27f3df33af8aa2fb93c48ef2e95ac5463bbbf4a"): true, - common.HexToHash("0x1c9f7260e0194399532ece830b5cc756005ab87b68dc94cfc68029c4c9a24461"): true, - common.HexToHash("0x0c63c75e201636f729598c43b81e02c0a131c9af48ee1306f10d582fb31dc913"): true, - common.HexToHash("0x07c3ac7a3e6e39d62e9e91a5868a4d6dc9a7d44702cba79cc9e1dfe1b99ef5a5"): true, - common.HexToHash("0x1f674dfcd526fe141bd16bbf446d55681330665747345f6abb509e51bcc88a9c"): true, - common.HexToHash("0xf06548adc1139e903421c7b85e2e4b74364683baffdf68414ac3ab8dfb04eaef"): true, - common.HexToHash("0x5b55b2b96f81477d2ecb178dbeba20cc7b898ba5ad94df9dae4b5124cb5fd2d4"): true, - common.HexToHash("0xcede8afe508525988e3b1fcb9347df0dd1a16bf2ff3295b53bef7f48e515ed93"): true, - common.HexToHash("0xc812f99647be7b11e18f249989667b4930814502ae7bf3548d6948616b23d67b"): true, - common.HexToHash("0x2d6e7ab7f1688292630d47ca5ac80b2be46d6790db0480f036b4855ce3b51b3d"): true, - common.HexToHash("0x44b4dd5838eb3e9d3ff7d3296be1d0f79464dea026a9a81b10ce5dd77988c624"): true, - common.HexToHash("0xec88e3528ae0a3fe2753d78c7cab4f0350ce42c353550bdbec5f3e16454598dd"): true, - common.HexToHash("0xeb986bd982c217be54a6f043a2581f3b7368348e19450ab0711e428f3b47be54"): true, - common.HexToHash("0x6a0a15d1f291f6e939eb54567c324fc2d79c5c820a3e684761bf1dd40f2c97d0"): true, - common.HexToHash("0xb028b01604f5df99a6fe66c0c9b023e8cda718c54475ba0db179d67b6df5be78"): true, - common.HexToHash("0x5311f67e507524de561f29952fdae7478ebf2af9ff79084aae1f7e51f77eba42"): true, - common.HexToHash("0xa0eb8390abfe2f074f1044585a4516c8536451dc08bf852651079aa2c1902524"): true, - common.HexToHash("0x5c2904c90259403ab27a05b5f2d722d91133959ae373e2de77fe4e688e88dcee"): true, - common.HexToHash("0xdf98a9dc3cf8a247806a66748533b55a844596da1c2adeae2c725a49d25e7d42"): true, - common.HexToHash("0x13d5529edf34133ad4799567a67deb71ffed3b1dff14a8c77e9ec7fe727de166"): true, - common.HexToHash("0x387dd69b3549d93b42058897101484c90ce7d7a3511baada86d032c8fa75d905"): true, - common.HexToHash("0xc53c4b364ad00e130313538b61075e355337466b6c1a7c713371add4e79ff76c"): true, - common.HexToHash("0x79a7d7127cd5eb426c6ab230618de3ac648591412680fd7e11052382c3632f34"): true, - common.HexToHash("0x565f323e0f7e2004b7f0d8e9c25b33623b007205d1354f7d746e107b76d9277f"): true, - common.HexToHash("0xddce93f59535544b51581db22bcaf22b274c009cb45e2b245a53822b4bb229e0"): true, - common.HexToHash("0xa601445a2321a8e1e54887bdd08cf0a0d648990225c36f1fdd9679fb84ebaf7b"): true, - common.HexToHash("0xac6d9b2548ec2971cb84c4ca7ede2978e7b33d77d999cddc90b8364399c4f766"): true, - common.HexToHash("0x8164670f5383dd651fc85106ffcdce1e6556bd04ce078f7e4667f7e9e8c6eff8"): true, - common.HexToHash("0xb1689853d15099c15521255c276259e299eb53e4254f5231837cb33b5b36ee5f"): true, - common.HexToHash("0x4f1e8ecd1b9d8a5ff23b00a1d7ef1b3a842c64101df0db0bec9b9547421ea370"): true, - common.HexToHash("0x9f3b4bc3c23bc07e16cca80a416c988615e21f4be1ee22052fc9e425db3d99c3"): true, - common.HexToHash("0x512a10c93c678be2bd2efeddb6d7b7dad24498489612b5dd5030d518cb843e5f"): true, - common.HexToHash("0x9304fafcb43c572005627a8f76a89fc28aaeb36768a8249641a722d9f3d61057"): true, - common.HexToHash("0xe669fd3cb5cdda1a7e9a4ff06372e302c4246f77a8a13cd456eaec026a36a360"): true, - common.HexToHash("0x73191da0ba0585ed58cbf77eb4c8d3c4be167642a1fc6497f6c47167b13cd600"): true, - common.HexToHash("0xa98e65d270acce38c6a61aeeeeb421927792dab87cc7c48336919665c6fe23fd"): true, - common.HexToHash("0x7e2a097a72e10dbf067c15369e599b5fc29dce88475b79304658c27026c0311e"): true, - common.HexToHash("0x0e7806d5a32ec8df4a36685f0a16d44adcd990eaf4c340e8c17f4dbfa0b327e7"): true, - common.HexToHash("0xf811cf94c64e6b1b9b3712488ffb6ed8aec53afee437d5bee2257a73e58957e2"): true, - common.HexToHash("0xbdcd5ae438d37895705c878265f42791e4c592c97cbacad3b4917d408ca4f4b5"): true, - common.HexToHash("0xd39e393f468aff64dbaf88960ce7ce19fe7788d2de24c86241744436a6638feb"): true, - common.HexToHash("0x678e2e9ea3ffc2a1a56e406dced3cfeee97bf260f610daff80f111959ff895ce"): true, - common.HexToHash("0x41f4afc92cd640b1e8e3df7ec53cb03de917a216314526ed989caea6e269c6a9"): true, - common.HexToHash("0xe44a2f86ee92e6249d6dd34be238692d80826d10b795a5fd1e11ac3c33598e18"): true, - common.HexToHash("0xb235f3c0ad4b1d477b43a4728472bc6d9bc1cca72aad3b0f8698256a56a6c463"): true, - common.HexToHash("0x015e61a3cc1f85566e9c038ddbdeb0aa3fc13b558436b80a48482bece3759128"): true, - common.HexToHash("0x0262085a6c16d412c4609b0a3e77d18ff709d961070831219dddf983a1c75b81"): true, - common.HexToHash("0x1b5e00cb094be562e493abf434a934330219f46cf6ec498728c581cf04dc7111"): true, - common.HexToHash("0xb0eb2ce6c2bed2067b1e7d621d9d07675cbe53e5a9b93ec6d3042e1f23447412"): true, - common.HexToHash("0x8a8c45dc9acea82f2834e5a11647bac52c841460a4f3c316c709d95c5bba5758"): true, - common.HexToHash("0xf438a9f9efff80528bada491ce6cfa1adb48bdc9b29c9fda96741c41593eee79"): true, - common.HexToHash("0xefe711f28bb1413925d6625fb1826507983e3b15437c22e6743ea2224653eaaf"): true, - common.HexToHash("0x05ce7602a9b29064779f37cd8ed70a25910a2b3475ccd00f1ccc8237e78e2808"): true, - common.HexToHash("0x20587520b27f3f2b4a3b95ff302d7ff97a9d84aaad3a475dbf0ec55a8698b1ad"): true, - common.HexToHash("0x5f77ddb672d58bd94db3954001fc77316c58665fe45151b044e43625be6ee656"): true, - common.HexToHash("0x51093802b659a2ca0d7ce100bfee7e95a610ee201ffd81b4122cf1d3e5772037"): true, - common.HexToHash("0x0d8f9e36cabac26a4853e54506c1a255676ccddcf29d8be9cab00f70c45a1516"): true, - common.HexToHash("0x7a2f4babe47e0cad2eab4b061b9e295e8a177a7987d527c0233a7f272f15f405"): true, - common.HexToHash("0x88d553623f58b9371e79b0e0aee845c229670e3b73d1e8984fae6a7b076ee64e"): true, - common.HexToHash("0x99317dbcfb57f5cc71b881ad0236f953ad8d003d1f1e4cbdc3ea41b707ff9bd8"): true, - common.HexToHash("0xd4444b07f3b3f0482e000cfb139b7e83178d84e0a32907c17d8ba7543ac780ab"): true, - common.HexToHash("0x21ec18f667ca5a1375e23499da9c6b2bda07134316762b765bc291122b8c0cfb"): true, - common.HexToHash("0xd31b45a1e1cf3571e2821b80e7fb913ce04c98051dd60c1a2c69bfbe0bb6ab90"): true, - common.HexToHash("0x35a124d0f522ac1b0564c5afe2138d4c9b5d4aed6f7209d56db8ae01b644cbff"): true, - common.HexToHash("0x35526bd44c1f6fff0ab7a6f8cb6f417c96e6da410d254b878865b92d1520dff8"): true, - common.HexToHash("0x4ddda98fa604769e5aa8f409de426b958881c8ccbf57e63b747dc0ba80697fec"): true, - common.HexToHash("0xfc982021499539c765a8bff688f3a6c24ce91fa24c033eeb8da52cd1369ebc20"): true, - common.HexToHash("0x09ef437aa9bf54cd9b74fa4779626a698696868656d8a920f5977280adf76f85"): true, - common.HexToHash("0x9f0b47d7840104f7f7cabaebb7e5fdd8edf696ef198083ea3bba34d25fcf4d51"): true, - common.HexToHash("0xe6806e36b9d81b4711c2b352dd71f4140c4df004044463e866cf9ba7fb051e2d"): true, - common.HexToHash("0x10f7118f2cb7c13afa9af2aa92c4ff9e876bd679e9f0559d628fa4ca22b3b8ab"): true, - common.HexToHash("0x5098422f3c870ee234be286f33d83b8cc1d791cff6db6d432f84af3d1b463088"): true, - common.HexToHash("0x99b9fc36a47c3a07a1fd5c211378f014be48b3bb53e2b4a50b5e51085b9dd8ae"): true, - common.HexToHash("0x3483f22e57682b9e077f04fe5317986afbf72c6ed12864bb7da3018e6d6632f8"): true, - common.HexToHash("0xa82d34795bc98ac911323e88e3dd2fe8ca206229aa689992f3f11379388c1cf3"): true, - common.HexToHash("0x870b54a21e270b2e3fe79360df0fbe21d456098c35adf11794ae4f5fea5953eb"): true, - common.HexToHash("0xe5b2f42fb70c2ffb4a4ecd4f51feaa5895001b92e580b0076b878f0d5c19c4e1"): true, - common.HexToHash("0x610d8975021149adbf5a46748303fe8a9ce08e17e607267a66798693fe08a85d"): true, - common.HexToHash("0x5f86fcd013d1630b27b31ecd8eb024946585fea8d8fa6710c8ec0c75014f6527"): true, - common.HexToHash("0x848b6f76053f90941b9d947313ea652497be2fabf4c93ec2b1d330d14b9daf4c"): true, - common.HexToHash("0x25a40e894140f49afc08d03c9676cfb54e5300671d19f538c8c3e62ac6d91c43"): true, - common.HexToHash("0x39198fb12e07bbaa2569d134beab8bac0d951cd8a3788acbd6bba21e08c7f3b1"): true, - common.HexToHash("0xb915b477b929059a331edbd5aec4a84df74c305e74ead400aac85fbaf34c84ce"): true, - common.HexToHash("0x4aae474dca928ae799442df48dc6c93e4457dd098fa02a8185c9c8bed3559ade"): true, - common.HexToHash("0xecda4ef5d1f12a0e31a7ab8d5bb319b0efecef3db16698672b9a6191311edfca"): true, - common.HexToHash("0x8ede416ba67a081bd7cc6240a7a8b6844f8b0a60e1c5ecad293e5988cc491b4b"): true, - common.HexToHash("0xbabeb5c2998effac23de5bfe89469a22e615bef3e0f3713794e20b98bb1e52b0"): true, - common.HexToHash("0x4149b26db2d1e2bef9014b3a34dfad707f8ab91e46da30a61095b6993b19cd9c"): true, - common.HexToHash("0xdacf1acaeb999326153f75adecd41fdead947d6696f4f9ab4d75bf119ed727b7"): true, - common.HexToHash("0xcc954e021677e8387e57454f833b58c70d76be583c2c99e8cddee9902e4d90ce"): true, - common.HexToHash("0x60c517141066a1653fddfb55b75245f3c10b185519edce6bd4fd88e1bfc62a17"): true, - common.HexToHash("0xfc19d15087a124ac1bfdb446ef46942840b7139ad3667e714d6967e162d379fc"): true, - common.HexToHash("0x0234589fb7aa22edf0578d5c01e3e8237b5a1dee9d55b6001a41280a68770de5"): true, - common.HexToHash("0x385909592a6f53a479f70e2160c89aaeff337558f7c77d24c95bd660c488bd14"): true, - common.HexToHash("0xf41644b522550e3566df8df668a15b0077744019bcb36a9b278157284fedd8d7"): true, - common.HexToHash("0x12e8b071f50adb52c5cb698d1f9f8e4dc79b9f0633554d46eeafc4caf69fcb38"): true, - common.HexToHash("0xd77c17e6e62eb6a86b24296f0bee507ffcdc53018cd13cf071e61908fc525daa"): true, - common.HexToHash("0x5788220d6110d83d4ab6d85c418b52fc288338155736a31aa7d5e7e0c3564e00"): true, - common.HexToHash("0x5130637aa64ffe49ec19efc5f0e8bdbaeec83d390f7cd4989300ae360a07fab6"): true, - common.HexToHash("0x060cd620e9058225d5cf81fe90bc1926972dde6aaecb31c95bf90b26dbb87e34"): true, - common.HexToHash("0xaf73d119ccc70b0c6203b39893df72d046f516f02e66d9159f616a2eee9d3e44"): true, - common.HexToHash("0xdf916906f393e95cdbe24a15ea694344940514adde5718764a3de13a5edf412b"): true, - common.HexToHash("0x65d00569ffdb6cd3f3f0e7740add66757515d3037f6aac6a5d9afcae76cd348b"): true, - common.HexToHash("0x34b47193cccbdae0372ee2fce70997d76b204506d53ec6a67d78935927c2fb59"): true, - common.HexToHash("0x98ae5632c7401212c5020b0b05ce83c61b03033425c3b759b43d36a958ed284f"): true, - common.HexToHash("0x108bace2b7b5efbdf89908e608681653e488fe3d31578640bfa460af6ae18e9c"): true, - common.HexToHash("0xd39039a57239ca606ed17e97529fb913ce3ae2adaead091e5440f90ff4ea1426"): true, - common.HexToHash("0xdaaf1874e1e138047760ce62f957c2c1e49eafcba45d509de6356c790177ed27"): true, - common.HexToHash("0x403fb0cdda7faa92ebc2a13b9e565d2650a179a21e6987a28353429393bc3f0c"): true, - common.HexToHash("0xc97125eac471a6377b2c03a82bd1b740b88019c254546a24c50fcdfcdf7c00e0"): true, - common.HexToHash("0xd3478e920c57ca3cf7b81023f9d23910088c25a53fead7eb6b083676b4bb468f"): true, - common.HexToHash("0xa79aee9d62ff4cbcdd7a4a9cd860f3f0ea5d957c8c7fdabd3cc822b38577ddb8"): true, - common.HexToHash("0x9f5cc7ec280cc96d46fe35fcfc345ba087cf2251866b5b00a2ca5456af29ef12"): true, - common.HexToHash("0x5e3535bea51973084eb43eeac3007fdb3224fb29a06520ccf6a37d3cabfc5dc9"): true, - common.HexToHash("0xd139023cbab698b29f453510e75f4d6d2cc58a9b0803697c7efd78666bcecbd8"): true, - common.HexToHash("0xc2283754e5a1e75e9afc2f8656aa731a5ad781d4a5b7ea00600b5b7175e8a8f8"): true, - common.HexToHash("0xbac258feea96d55e7a1bd48e020141e443aabe65de31f79276b9dac5b61814c0"): true, - common.HexToHash("0xcfd5fdf4324ad3feb36f9784b7489438898e28e6ed12a61976c5e8d89589797e"): true, - common.HexToHash("0x3a2c08a708fa410cfe84f0e0f0fbd06743cff9999ba5da537522a9e1cd14122a"): true, - common.HexToHash("0xb87c3c87742597202794025014200f5dd6e03a2f23caf435d6f2ee6b64df6c83"): true, - common.HexToHash("0x647682dc5c548411c5f394df4fa353064567129953b137ac2115126a1c29df9c"): true, - common.HexToHash("0x6a1fbf5a2a1c441d00f0ab1c2e3cae2cf611ea996215b49ad817dd60e4ad6c1f"): true, - common.HexToHash("0x9a6a8526b7a8c9bcdd2d2fccb678ca144daefac4f9208ff3bd18670e0518bdd5"): true, - common.HexToHash("0x9338c5bf96be42b163165132a41d13a11deced3e695e2aad89949ef3c264f1cf"): true, - common.HexToHash("0xd343b55f3e4df4e69e72019ab704cbed84d18faf3c335c992262634c990085be"): true, - common.HexToHash("0x1e373f22b539506e47ec345ede62ce7f5e2a555965f42a6b9fb0bffc064f0c5b"): true, - common.HexToHash("0x5da1b0ef017da1f06a6693e00aa85096010f74df85c01aebf31ee2d3d3d8018f"): true, - common.HexToHash("0x4a7d7bc98cd65bdc21ffdbeee5e1526bcc10d425da41ae174e1f795c148ea5b5"): true, - common.HexToHash("0x6b2fff7dc34f37c8f991653e981867ef31fc885a5aeaf31e5dc93b7a5969c1f3"): true, - common.HexToHash("0x35172c908646b16e9e7f065266a4b03b91a5043b3cdea3c0447c82b748106b2a"): true, - common.HexToHash("0x087eb07043f1dd67e16e57a76b769f5cb2f7160a271e1809bbf907499c7042bf"): true, - common.HexToHash("0xc5ff9f439336ad7b3ec477df8bf43cae81a2cc475dc62b30b00456a6bf433f61"): true, - common.HexToHash("0xc970c094bd7085a951c0ffdad58a42252b06eb22a43311be7909daa872b0d2f5"): true, - common.HexToHash("0x1e3e8d0fa2fecedc23eb96e3312dac42ef237f5a4fd397d44d76f9fda9a92049"): true, - common.HexToHash("0x6271ae7b81cda2a079886d77e76e48d1acb4fa0af770a081efc5b3ddef387556"): true, - common.HexToHash("0x387910b737b3984b8c81acac2dfe56a1274e4ccd45898ede5663944295231c9a"): true, - common.HexToHash("0x370c713dc8cb251021427e528fd2f68e51f3301fb02c59e0f1ba210fba5ae411"): true, - common.HexToHash("0xb5e3742594fe6e18ccfcaec45129f153216a3c011282e50273f8dc6cb6efe79d"): true, - common.HexToHash("0x2f79d1577db6d22b419ef302db36f40ed78e5657b50f3eb801827eadbc65c81f"): true, - common.HexToHash("0xa671375fb20f850125e452480440b58a7e10bd63a894c1bd528af0e91cffce6c"): true, - common.HexToHash("0x00c2d1b541645580b0b36c5e71003934ebe75f00a2ad3ed25b8411c92e77c2dd"): true, - common.HexToHash("0x68ce34ffa24210afb9692f5b656ad287177faf31411be2ed4e5f4335792c3334"): true, - common.HexToHash("0xe9f83631579850c8dbe9e80041a7c9b4e16de2a6c6046c24562c542d0cad5487"): true, - common.HexToHash("0x9a66ffc9be00ad76c30cf9f6b4b27b5a4d7c3e49bb1730b270e17491e337f4e8"): true, - common.HexToHash("0xda8cc5d4384829c3bf1c9ede255c3fd3356af7aab5ebf6cd8e6b1be7cd6450d3"): true, - common.HexToHash("0x1797edac4f2b4218fab4976040f83f69fd106a98434e19db0efc765f4f5312c6"): true, - common.HexToHash("0xa79cd1351dfcdbbabbb2b3aa78204b0acf993b7e077e1ed75123c98cb25881d9"): true, - common.HexToHash("0x30b13618a92e756093c2a8c0826046340e1d12c0b8865b398cd59edba502355f"): true, - common.HexToHash("0x7846f31f5d9a888583dd82c2e7fd784d1d7be57c7cfacfb3d7828f5f4a093b7a"): true, - common.HexToHash("0x79bc9f1b31b1dccc2b4a586969cd04c04f59808e3582f8c6b908fa4ffba8f090"): true, - common.HexToHash("0x6854ff8f20b3b7402bbd3178f2cf5320bc4f1c7f81d82c6aff5a0264fa91be5c"): true, - common.HexToHash("0x01661d9cff0b7e2175e5a3cc5f5ecfb4f621f846ed327260cca935dc42257068"): true, - common.HexToHash("0x79754942fd7ae619e70c83bab438276c145946bde1d552068e9ddd2f08ef9b9d"): true, - common.HexToHash("0x8023acdf497f81943d63778b786e14bd97afe3ae14f20c3ae1778f050235feb3"): true, - common.HexToHash("0xbb63f143c0747ba3f3a22c5198d77866829401e08856f7b65a8fa7b81bad8ba1"): true, - common.HexToHash("0xd3a2b8dc90b200c9b116f6caaf77d7275cd551e500346a16d422935deaab6aa3"): true, - common.HexToHash("0xee73b6e175e7a1a8462fad6230c4cad8063b577739ecfa12c514a0009e5f0519"): true, - common.HexToHash("0x5b77edac694cfc7225bef2c24727d44a0e801d9d196bcbc7633a2a8139c2e928"): true, - common.HexToHash("0x581837d7a13aec7f2f85ce77e550ac3cbc425735e831d7b9ef2bcb2f6b5571f3"): true, - common.HexToHash("0x0de62dcf166ba4f690b716396ea8e88c6a7c4b300efc944bf9a510eb2740eeae"): true, - common.HexToHash("0x845f5a0a593b23ce5dc97a17236c5d230d0d687fa039b7da997ded12086b3fa4"): true, - common.HexToHash("0xa5edd7c303d2e28e4746d4e0c67bcb1ab18e119b1b75d679fe908e4e341b6438"): true, - common.HexToHash("0xbb03a6246491750cdb844cc88121f9472c29aba6717fa4535851df4711b55b72"): true, - common.HexToHash("0xb51280fb3384ce404dcdf894da5b7d25c089895e6dbbd60ea268317ca3ea72fc"): true, - common.HexToHash("0x062e80dc34810548a0ecc6201a2da026248740100acb4d070af978549192edc5"): true, - common.HexToHash("0xf29dbc7fd08bef5c60c869c5cae2d4016021e1528d1ad1ed5851f6155c87d925"): true, - common.HexToHash("0x702d9f1b4caeb7070ecf3284cc14291acd972ef7717fc8d02dfeeb073bbd415a"): true, - common.HexToHash("0x3de11e5ad0857d134d53e23e90b1cf25fe999e11f95dcdcd86c3a309099aa270"): true, - common.HexToHash("0x12f03e74e2c64ad0018c64001911dae03f894de7d71da1c18a2c3935035597bd"): true, - common.HexToHash("0xdb10750e7d6b7361c7d223496df0278ed30d2a51ef9a84647c19f73dcbe77dfc"): true, - common.HexToHash("0x1502518dd184248e805f665b3a8418576f91e7e06da88b98e27165e2117a2917"): true, - common.HexToHash("0x1d50671d1c0218fdc0a5991df946fedfe285e0c89bf5a70aa2307077c3b0688e"): true, - common.HexToHash("0x687baecded2c6706f60cfa5e4e22ff53234fd3119f10383a42245bc0be2017cd"): true, - common.HexToHash("0x7f0092be06358a2331564b8a2759e38a6fba1f677b8de72243ab5fd846021c63"): true, - common.HexToHash("0x28795876258f6581f71fe212b833b680a770965db5a2a2aaa8f66446c642c828"): true, - common.HexToHash("0x54ebbf0e5ed689277b01bafb2b24c2b2ee5e70ab2f5198fd7603923f5d5888ab"): true, - common.HexToHash("0xbbb783b21700b48a082497329b0493ba8dcbe0b5f4bcb4ff6847a3ab098679d3"): true, - common.HexToHash("0x1d19b03636508ff3fbba1c277661607d874d75a1114cdb0427db80198f924d7e"): true, - common.HexToHash("0x89b080d9654076834f103e211e474986d645bf08c5c614d3c93cd73a15625460"): true, - common.HexToHash("0x9c977f8d0f2d2b5ade8c98b00b50f5d53d02f0a007e4d998d99abe204a8ef3f1"): true, - common.HexToHash("0x826fac1ccbaacf9ae423e1255b5b5bf5e20f37ccbd6bea3cb19da3d5345601e3"): true, - common.HexToHash("0x424028b9a8a25745013b3fbb1b3b5c72a49bb8aa6c2db44632e4a9d0de755bc9"): true, - common.HexToHash("0xae5618b0fdc63bc3e79cc8819e82d4d84bb62edaee8de3f5ce0e73be2bb079b0"): true, - common.HexToHash("0x73e9e6b76e9bcb1e2c25cb925a256c1525543814443e5584645fcd0b2fd5dc69"): true, - common.HexToHash("0x65cfa5845a8b76a8beb6a5868acba645111a450d9bfca1fb04fc8b89e6b74d24"): true, - common.HexToHash("0xe7149c0934d1fe64c50a977cbc4e116e6e05be820a1bdd4e2985df16e32bf333"): true, - common.HexToHash("0x57c999c02496531914b6417deb7139bf71efa044296abc2934caa87f4d7d0b0c"): true, - common.HexToHash("0x3a349f3026f8aea1ead8cefb9564b81a0ce12c8232299cc33f2d1ae292dce081"): true, - common.HexToHash("0x5afaf4048f58ed285bb793984e92987954f76c14a88f6e046a0ce98952c5f46b"): true, - common.HexToHash("0x93790c1c48dfd540b8393a9d36ac9f5474283bfea5171f2dd1dd5f9137b49524"): true, - common.HexToHash("0x15d39f1274846d450cbc83605c1f9f96ba2629d04a063e2f0ef5ae41ee665591"): true, - common.HexToHash("0xa7e3abdfa5853d81f4943f73e36b3798f32a2fc7f9d3cd507f4909d68036b59a"): true, - common.HexToHash("0xb9cbcbeca220aa04d115a80150e3c598949119a33434710a63e9a5c03dad3b4a"): true, - common.HexToHash("0xa4f6074724110f19e69b9a07c34432568ab420645c4c9e9f6526df083f0652b1"): true, - common.HexToHash("0x504561ebb22a8c171ef65827be51dbdae0f800165575f552b2c1f32b59e2f323"): true, - common.HexToHash("0x541c59dd8a16896a338677122646cf088e49d86143f55ebf358e6ae227fafb29"): true, - common.HexToHash("0x8b60400bdd673a66b352ecc3e4ebf1489000571fade40db50f32d146343297b0"): true, - common.HexToHash("0x2d331606d2823c35e689b6f74af4b2c1270eddf336787487054bf75317184d2c"): true, - common.HexToHash("0x2bb4bdc84a9f81799c33983451003afb5c33221dbad2605138fb3f8de270cb60"): true, - common.HexToHash("0x1200b33d1b7221c520771536d70f762692dc0316a17bdda15afe66ba6cc6e8a0"): true, - common.HexToHash("0xa01ae15affd3212e84002dda8f22e16bc6f03e11f40a780f4c2c0d118479a351"): true, - common.HexToHash("0xf7b4e26376a647b7703ca2d97cd04e4b3c8f7865ae4f17f3b5bd30ebaa96713a"): true, - common.HexToHash("0x82cf7b89909f9ad0008c99be1ae46663963905f9367edac4f15266ccc4f94977"): true, - common.HexToHash("0xe2d882cbb27d50792b02a139c064ffaaa1eec21ff24fc9cc6d020e015c3e5ca8"): true, - common.HexToHash("0x10a378591b8945998fb905db571831db5cf31dcbce948307481e08e5fcac17ea"): true, - common.HexToHash("0x2e6cd61838ccc112fd18b35f70c92236eb0012b586fbc493cb583944efac7495"): true, - common.HexToHash("0x15867a5ece065c62e195a9b766976384d1a2135c4cef3cef325567f9798e2a3c"): true, - common.HexToHash("0xc01208235c82b74b92ebbeabf1cea7b2306d0b7bb4c68df1ca0c9f42fb95f1a5"): true, - common.HexToHash("0x12747f481c0cf6762a6e906e91b71aa1727bc79bf26776422e95e1c9e7652d51"): true, - common.HexToHash("0x0d7570fd47ac53d21acbf663b3a6fa254807fba5e5e934d4d1d4cffa37154a74"): true, - common.HexToHash("0xd0192e54df3b9b8c8eefbd101b942beff1b15367353c2cbfc282569699d8c4bb"): true, - common.HexToHash("0x017b32c39fe3ead135641ba964bd53b08410616c13047ac404ac70217b5a366d"): true, - common.HexToHash("0x311b6091389e406ecdaa2059f45c1fbfcdb47ed826fe99b88eb4f78525d8968e"): true, - common.HexToHash("0x7cd1385b70b6dfa86dfb0b7340d74389ade7201fccf2c642c553166d3d2332f2"): true, - common.HexToHash("0x11e6b49fa9a293068e5eb9b676a1ca8bb742d23502c03d8900de960a28ea84c2"): true, - common.HexToHash("0xce5cee33d863594ee4e7b316cd3d259f51e68c1e29e3088d6a46e89e67b05587"): true, - common.HexToHash("0xc7c67e83f947c642ea9fac274c5c500e83f6b71dec2f1a9e853febc090819d19"): true, - common.HexToHash("0x12916fab25390e345a2fcd8b904d6c4a3ac53092b59b6a5cba89930c4c55c425"): true, - common.HexToHash("0xaa6debcf5e72665ac287aa061b7f9b1710e4c4d8b24d80789c172ef7e5af0c87"): true, - common.HexToHash("0xf1b3b648925beab4b6fdb63f8abe3f43005c95bd09c43d9fd12801eca7ac0292"): true, - common.HexToHash("0x08ff7ad57553cf6e299b796d496be6d51d4dcf2fc40bd61014cdd001ee558aa4"): true, - common.HexToHash("0x5cfdc9d98fc82c61403268a91688955d5e13239c4ca23463265b4b6dbbfca4bb"): true, - common.HexToHash("0x8c13012b1fae2ff950024b1bf707bc59b068846156cdbf0805813056b5f12dff"): true, - common.HexToHash("0xd19442f7752fa57e72c56f6b6b940ddfd2620d0ad45eed476eb9c2472e28808f"): true, - common.HexToHash("0x2f4bc0fa58f3a78eee8a88da21cb3dfc38202c5b9b98097206f875ca31756c40"): true, - common.HexToHash("0x7e44608f656ecff896f901eafb900bfd5f653ccb48244d6a8c40c86f709f5489"): true, - common.HexToHash("0xe36910835f9434f8ca7be9cf65289142380bfa888938d330df431890ca9e5f5b"): true, - common.HexToHash("0x909a5f2a9c015ea36d193339d89b9e621a7d70330d1cb40e4293649d5257bacd"): true, - common.HexToHash("0x26d664ef654281398f8551dd47217237312648b52a82037bcd2461b916ade997"): true, - common.HexToHash("0x911069e3098665879e2963c40836ebbe353d31065b9cc4331e83feaf4cc79dad"): true, - common.HexToHash("0xf5d088259c1619b719ee742c668055a2b29579cef73104390226c8e17ac9da35"): true, - common.HexToHash("0x5622518619c1df375127f511d70a96d7731baf1f1180c2728ab8883f2ee19f1f"): true, - common.HexToHash("0x0b83468252ce9a857fc5fef9f29c948aecafd85f2e5d763bec1bed4098c37e86"): true, - common.HexToHash("0xf6298b56e392582c5f8e1a16e684d6b0b7636d414ecb8b7cac3bc7b113dec058"): true, - common.HexToHash("0x60ee38b4024a787c8995aed21a29d730f95b9615ddeca7b176400182b6239269"): true, - common.HexToHash("0xced3ced3d2150c51477d5246812601390b002029180b6895892e9f0a76a4943a"): true, - common.HexToHash("0x2a0850a4a3d0edd01338798cd183e320f31e781bd64abb9725cc54311525b41d"): true, - common.HexToHash("0x78cfabc43a01b3128489367e5a3547092d191665cce34ae0c703ab4d7e83b912"): true, - common.HexToHash("0x2d0274bc0a397ecaf1b994efff429d864ac8c8c383f9b8340e751484f0ffd5a6"): true, - common.HexToHash("0x06599ca4ba42c83a86810a710cced2813427e0d84f779b71f5cea0c34a35ccde"): true, - common.HexToHash("0x61b6bbdc196f2625d959107ceca3d414a2f18f50750fd5b4e304325b5a6b13b0"): true, - common.HexToHash("0x0c3fe9c32505659ae9ddc658ef91027e454f8ea4dc74c15b30cc49de6e9ca909"): true, - common.HexToHash("0xdf2d9fb92d910597680947aafa4e4a1800852f570c0cf1dfbec6397556116160"): true, - common.HexToHash("0x30af6aac8c634e3f911951f1ae9628379968acd8775b3e49ecfefc33d3c04c58"): true, - common.HexToHash("0xfcfb9deabaf9cac005db35132735de4991608856372e302ae991c37a71f03ca1"): true, - common.HexToHash("0x21076ad4926f49a95e1cf2a5d1ee3a7c609003fb8525f997126a2f93b6d28a49"): true, - common.HexToHash("0xb98e2a6e97c26a7862e27eda367246ef8bee1ae42caa151b7ff8893690b68cb8"): true, - common.HexToHash("0x98ca46cba9616fc099477847817ba191514806e8110ed8a8b1e1fe2b3afa5d7e"): true, - common.HexToHash("0xfc1a2f4f3b401af817cf660c32fd0534e2707e14f050f58ae417104c7b620013"): true, - common.HexToHash("0x2d71a2e48acf8f28c576069c1009f68a8a27664dec4896d309d65587b293498c"): true, - common.HexToHash("0x7958d08cb29af4140160d339d063302a503155b67020ce3f347283525cb76ccf"): true, - common.HexToHash("0xaf9fd6aa18e47c9a719cdaa43825276712ce40cd3cc34085497cd0bcd47362a0"): true, - common.HexToHash("0xf95abdac52d1306ed43256aaca781eef6f4856c1b0635a168cf0f468a2d902fa"): true, - common.HexToHash("0xa4fe8fe7fcf1128d6b962179d043b84d678e1ebf324c02bebcd122f47d87e42a"): true, - common.HexToHash("0x80e1e8e165f9a45200563c9a9d1b727a266dca12a59dab0a511cfccc6bd6a86d"): true, - common.HexToHash("0x1e38476a67cf0d76fd2d63cc159ada1a6d63c45e7385e6a60da15d3115e5242f"): true, - common.HexToHash("0xde1203ba7d7d028836be56b2c3292417a0ddb99cc953dc1c6651f3831136a35b"): true, - common.HexToHash("0x4b4bde1e6829699bdbc2f9612c486247ec2b9c797235ffee64938a5b756baf1d"): true, - common.HexToHash("0xffe44e15ccb9bc37f697d17ba1dd88dc3821651b8e6caf528bc675ccc9f7c782"): true, - common.HexToHash("0x617929e002610ed20b043eb353f48f009784eddbcb924edb27df02c0e6ab6803"): true, - common.HexToHash("0xd626cb657039e849f083eb4a767bbfa11f5e6418f58fbead5845d9df0153bd88"): true, - common.HexToHash("0xde409266696e6c54c4c22c4e81bbe97a113c859855c4511a2bdf36142003e717"): true, - common.HexToHash("0x5bfab0bb5d473484e6b2f029fc929f8a930453fd11c4fb0a9eda76dd245817a1"): true, - common.HexToHash("0x81c80f9351f8a5597cc4dd90bfc79d6ff8501680d7d2f4e7c6d69010ca14255d"): true, - common.HexToHash("0x2131be5aa8bd9b05f67c570e01c8aadc857ee5ff36b0d23ac03ed75a0bd64537"): true, - common.HexToHash("0x6eaab3ace8556079d591e50c9abd4c95f520dd177d86bbc9eebee3473695fda0"): true, - common.HexToHash("0x305031ad001b7f383fee352c86b93a840a441b40a8ef9df54582705be7f8961c"): true, - common.HexToHash("0x1fbc593476878a5af057150147c8652901c4889b745ce46f608ab501b790073f"): true, - common.HexToHash("0xa2f5d1e230febaa37d4fcc8f17a0c1af95c002672ff93c4dbb645f04eadc8359"): true, - common.HexToHash("0x610d8f88a4992279b967d9543a8fec996b4ee42830ac0120c5ee35edb71f8aef"): true, - common.HexToHash("0x3f630b87bf0259f0ded37241723475a0fc722afc2a860ab52cfa5393ccaefba0"): true, - common.HexToHash("0x6ab3e0b85862aeab2c5238f41ec717ff639e900441fcd51a713e37924ec34fcb"): true, - common.HexToHash("0x5c809d859806fb7392e96c863d670180fd93b68b33db5c2fa4128705356aa1f5"): true, - common.HexToHash("0x1b6ae59b9487788b9385ed741aa17e32afda53a376254fb3030f0b5b403f9e36"): true, - common.HexToHash("0xecf9e8f1c383c114610686a7b971eca74d459fc310c6036dbf92ec194fae00d3"): true, - common.HexToHash("0x13cc36215aeedde62af0df94c744c33705eab000d940c447ff6db60dbe4c352f"): true, - common.HexToHash("0x2f288654f1f4747c0b26c5121d15ec2b9d7f8cffdc1b6fbe69f46033abfd1b4d"): true, - common.HexToHash("0xb2f2ef3a43f6353410600a8f77e0113cafe83f42a9d10a29ccdc665c2f17ac8b"): true, - common.HexToHash("0x3d05b08e5db4f3a25b7b106899d2ae095caf6520e634a932f3381092e064219e"): true, - common.HexToHash("0x0f1225b943348a76bdc29a88e5e1811227dc28005c67edf07c6f1838b6295161"): true, - common.HexToHash("0xc8dd80bd0313643ba55013f14100aded9b9d1778fda286dd3d4dd5bc82445fee"): true, - common.HexToHash("0x5b2cbc3bcd2016ec70672e971e8acbceeae2a42190f28f0bc7039e32e9a1ea34"): true, - common.HexToHash("0xf21e4d05bbe599f4a76c7f0148a47981307051b3070334a3a99b523f3a5368ed"): true, - common.HexToHash("0x815b1eb5c6b94a88a4c9144018bd476da19f5f6b60921c880faba8c520a78ac6"): true, - common.HexToHash("0x5d1fd58e3beabe22615f6d6fa0b1f3e9dba1bd44bcaaf2fedbfc2b6fbd89da60"): true, - common.HexToHash("0xd59e31f0707184af329ff057c65eaf2223454495bfc3f00c31653a1753abcd93"): true, - common.HexToHash("0x644b87d7a3ee8b5f4696d6d5a9861232eef6ef07504a7745199892df90a789d5"): true, - common.HexToHash("0x0123164ef51729af8afc7078fcd6786d23da11bd985a6311dffa922453f337cb"): true, - common.HexToHash("0x1edb8c3edc37b1839bd78a915a3c40d766e3d25a46aec49c01972596e66c4651"): true, - common.HexToHash("0xe751cd1b1f4fa676bbbbccd50f0742173ba124808574c4272ee35d751a2d2858"): true, - common.HexToHash("0x0135bf71b4058992e548cca4b3a4a121579271573eda52c789411ceb9a72c8b8"): true, - common.HexToHash("0xe126f71d5b4e5db1d7b31d1ed2707558bc86bdd1c4feb16bd04afd74b4f261e0"): true, - common.HexToHash("0x69314ae8ee1045d64b6168072550e6515053e55a8d4da1c3d9ad8c7ebd7f2470"): true, - common.HexToHash("0xf07e7b0c8eda59d27b2ea8353218e6027c351e16bcbf524fbcb1a10ba04d66d7"): true, - common.HexToHash("0x6084b75e38e36cb674aea245eb1df61281f748241b0dde3dd8118b557f583446"): true, - common.HexToHash("0x679d1ed615b06a31ed7fd87f016e42b51a057c2a40cd28c1df713688b05418a9"): true, - common.HexToHash("0xe067727b3928446e56492f74b3e11f82e0724500936036668947ad8032ae3609"): true, - common.HexToHash("0x8ec4e81ce98b875c622a39f2ec26e4c7b09f874799fe52cdaf32610e4171ea7e"): true, - common.HexToHash("0xd541d18f5079c5a798439eba658707f2701f03226bc2394b594c412ffacd6585"): true, - common.HexToHash("0xbfcb39608550ed1b35a36ecddd23d94e7dbcdc2a62e71387dca6fb1ab6aeb757"): true, - common.HexToHash("0x60f5806beb424075c745d67eda1627da2a121ff5d6ed5eceee7126b6847f17c7"): true, - common.HexToHash("0xda3d9a1a065c40c1ff17bfa4bde51a978a84fc54e1efa1e4165d4b40b5cea487"): true, - common.HexToHash("0x89eab70051953f0f6b98a3927c6af748ec257859876c328c4d7c4187dfcc4d7e"): true, - common.HexToHash("0x931f863d3f9b41e192687edba3901ee6bb5eee7d532d53981d9776a1351253b5"): true, - common.HexToHash("0xde218ddd32b95801cca9b1cea4a068a568c9a197b548e82a861600bf59ed80af"): true, - common.HexToHash("0xa1ce7e6881db1eb8330de3595484650a965e5087d15ce85d135813a184584714"): true, - common.HexToHash("0xfaf8242b0d424dad4efe49728a759bbc985d89fb51cde257609d74f548ad6c2e"): true, - common.HexToHash("0x226eeae142b332ad9772662e469b9a8569b3cebb56cd45edb996db56e6996e26"): true, - common.HexToHash("0x5f171c5d98dfba7bbd0dcf33b2bd5e5262879614ffb0653cdbd87fc789f4220f"): true, - common.HexToHash("0x7b1317bc827bb2327fc7a7d8113af9d7d83099d933c82cfe112b6e9bd8806be2"): true, - common.HexToHash("0x30836bf1d25539ed5610722e52101c3fbae3125de23733a387ff3854d572ec05"): true, - common.HexToHash("0x6955e49ead21f7c1e254b6a6164d0cd8486f5474d6140dac6beb7208f030d557"): true, - common.HexToHash("0x9cde067fc48f77157f43cd7adf0885a99f54286739e9e005b78e1655aa178a97"): true, - common.HexToHash("0xf8fd960002ae56754bb4bb1189bbf6dff9aebe9ca87c1cac5eecf07dabd57a23"): true, - common.HexToHash("0xde4c87089e58549456621b84c10e58324fe260e1ffdf6cbc0d47e4d0c8b96559"): true, - common.HexToHash("0x6e31a7db3528da27d5418d93f66c5da8ab0bd5817e9d3444311a87091784049e"): true, - common.HexToHash("0x7c5b6a46cdf23acce611d4619cfbea3c25ba3343caab156a9d84314409205a0a"): true, - common.HexToHash("0xa9924698c01122d5b66a679a445c7524af831b2246b3294048ae7d18d570e011"): true, - common.HexToHash("0xd7d062c34e0dcb93712d50ae5804c46bd759e0602727c4525c06325d0818db72"): true, - common.HexToHash("0x36656bb0f85b9a51b36339efdbd2d7874b4052441e8f13ef65fff8c98f95f323"): true, - common.HexToHash("0xc741c7f434053ca4a99c0b8d5285d34fb78d8ab42d3ea8dd07432b0a0a11bd43"): true, - common.HexToHash("0xe043b025efc9d4c6bf81cfc8da0487672bea494f404a63ee4d403c49974fca43"): true, - common.HexToHash("0x1345f69c226c3c0441579ffb0f32b2bb34cd86dbd74648d9d3a7c5a7651e678d"): true, - common.HexToHash("0x2ea51c2016d8f71956ebb3294d75c3534208648eeaa97a8944e10b3a340bef54"): true, - common.HexToHash("0x410f1441b895b142f7b89c9d367c131259aa733de19a2f3ca70699c2ae279581"): true, - common.HexToHash("0x0ad25a0e6a98cafb37ea5962c76264e12626af4658f800f268a9437f99cf3580"): true, - common.HexToHash("0x6e652e6ab4de147562675697153d26e5298f179459ec551b9385c4e705216267"): true, - common.HexToHash("0x90875bc109fc1cd904046e1f22c4502d27521a34f8f6405161e0067a4c31cabc"): true, - common.HexToHash("0x9d9f11766205680a6dc069ded6586bf9ba47eacf3f81206378c444da26d83121"): true, - common.HexToHash("0xa5b697a8015e901b13977d7be37f67a64a2deb88a0741197a29600ec44ee733a"): true, - common.HexToHash("0x7a4694c44a85b792ba989ccc61cbaeef1e3a49d00e65544f4b921011b509aea0"): true, - common.HexToHash("0x7bf2fff19cfcfa6f52ae8546b22f3221afd95efe20defe2d488dad085eb9488a"): true, - common.HexToHash("0xc37cc9d0982f9406483261e1b9a53b072f2f3d63ab91ffcafe956b4a2725768f"): true, - common.HexToHash("0x1bec53f7298bc272cb7d937f2c663221c44e424cd4bb5e12fb02785db31ed106"): true, - common.HexToHash("0x1c18727eae4c519b813b0ef9e1a4e45470c24abe931707ed162ea79eae658a49"): true, - common.HexToHash("0x1e5f68d3f80e7ef84ce647bd582e0d44378a832d168f8315c2268ff04fec81c7"): true, - common.HexToHash("0xce58afa19df98bfbd2531883cce8fbc64880fd50ac0057d91777cfd2a050a6de"): true, - common.HexToHash("0x959b6330355c8ad50c685b5eca727ac951b575ec745594ff3044ec934385783e"): true, - common.HexToHash("0xdc4b628e6c3cdeeebc136e069e6da6533e8c9b8db82d2a1b70fcad34a9cf0ad0"): true, - common.HexToHash("0x5209ce7ed07f9b032658d3385f3ce11590f1fe12b0eff8e7f58c10a1d6b1dbf9"): true, - common.HexToHash("0x190a38190243dd713cc00f4936772296657f18174174a66399e55231c726353b"): true, - common.HexToHash("0xaac7adfbd193e4e2043a0921d8f81b8ec0185755e9c29676c9395f8cc09656c2"): true, - common.HexToHash("0xe7b23ac268e0be11ac5296f71e018a5cbbf9eed907ee4ee3d9f5d5bbef09e056"): true, - common.HexToHash("0x51d2110a66c630b97d7b2345e81b504304938af0b44124e93cd4e4962c40e9a0"): true, - common.HexToHash("0x3b5da26902961a01c8989999256eddd0b7c275ff323b830de16114091d763e2d"): true, - common.HexToHash("0x349ac9ca17accc5132733e32e8c130ac4b09c3038540565ff2006bd6dfc17dc0"): true, - common.HexToHash("0xe5541796d20749f6f746408e8de91c68e770e4277beb0b2153b84eedc269c3b9"): true, - common.HexToHash("0xe4961105037ef886b15468c95726d3d09b0902976583dc2589918dcb6f31587f"): true, - common.HexToHash("0xbadf5b4e8b3e68c00f24749bbaf2ac57cea84c2ee00c5b8b7402900707ab6193"): true, - common.HexToHash("0x10b913a1366d3ffe29f3bc5e537da1f30dcf293cfbf68f942405cac3abb0577a"): true, - common.HexToHash("0x86b18373779b94e1c95d18e789a716eea6882e7e69e0a82975a0eea88bf68fd6"): true, - common.HexToHash("0x5465d04e76e1c7077a93f1978fdcffc6f41ecad26c151590166c60e94f05aba2"): true, - common.HexToHash("0x0af09fe9d5c6fd707c034a4aebd83168554381d20b23f5f82003c4f24552136b"): true, - common.HexToHash("0xe3db55a96a34f7a246ee4854e191172896a002112296558d859d1efe272f9ef6"): true, - common.HexToHash("0xd42720b8be6023a0248d0715db6b6dd36ecd1de61d09fec955e0eae65c42a617"): true, - common.HexToHash("0xba8b5d4b80df1e2268548e292921a344519a2bda0f1ff7e29cc616c58a89a1f9"): true, - common.HexToHash("0xe9fb10ece9933488c07077867dc8fce933991440ed5237ed4b60a3687ff9841d"): true, - common.HexToHash("0x378b90f402fd09cf8d8df4f2d951c4c6a5f872374af934d2803ce481f1bdd431"): true, - common.HexToHash("0x6ea211dbd57872dbced0fab5fc233e95c7302df00520bc5717fe981aa19bce25"): true, - common.HexToHash("0x20a59230339568a4e446ce91baef18893132d819f578d3ee93c5816f179fbe7b"): true, - common.HexToHash("0xf3d0223480f013347f1bca8c113455fd6afdbfdf8e4921fbda0b746f9996f66f"): true, - common.HexToHash("0xc3601489920b8294b084030aa43af6f06164341a5646695d696d0366c26a9424"): true, - common.HexToHash("0x270b33e0901807bc8584c7dc000605b3054aa7034d24d406e2327077f7ff3a83"): true, - common.HexToHash("0x9bacb6bf779bb852f88b4930f7047b83a73def47399a6b4e1039253a791f746c"): true, - common.HexToHash("0xb3eb82e80283a5150d355caada2950b232ef8f9e04231603d32ff69b71ee9098"): true, - common.HexToHash("0x8bf2b5c4e3a9b68d98f0b6e8b60eed53e0ae303b44d9be60e9817fd7f335e280"): true, - common.HexToHash("0xeca5bbfb03c4c16a2ec448198f7c233d87ada5e1dcc510cc5d197cc588f96301"): true, - common.HexToHash("0x98881578972295ce46161dadb256472c3b550dfe5c9e801d94943a4ad39e10b7"): true, - common.HexToHash("0x94fde01f4f61e2e6310428f25f6dbeaa0c8e4a0e4870df23dec12408847e60f6"): true, - common.HexToHash("0x569a9bf7a2dbd59b15974254052e104c79120ef7e964f853765c26c8a11e8a17"): true, - common.HexToHash("0x95384031160cc74842a6923e28e0589b792f56d3cfbe1608b2c53637c254e772"): true, - common.HexToHash("0x27b388ebd7fb919fe94113d90d4e63f2875aae67ba39c2ca65adbfac55f40cb9"): true, - common.HexToHash("0xcbc437db63acddd20f8fe79c942f4fece51cfa05a184d81fa6be4a463082c92a"): true, - common.HexToHash("0x9fd9d0f7593d132c6ed023ebe00f11e98036c8a0b5ec60c40defebef64d02b37"): true, - common.HexToHash("0xb9d5b4427829c81001d89f81e47ed9091b230a16fe5217c98b0d20c5ceffb24f"): true, - common.HexToHash("0xc23b7e3c8475f6448705ce3b27d63ed51392918aae0a2f12b48c843a933e6e0f"): true, - common.HexToHash("0x4e372d98a49ae5a95c92bab1b75bff1dd96c6ad6af6e9c4dc97f819a36ae1062"): true, - common.HexToHash("0xc3757a4b1b478168403db69d391c49809c8408cb6cc60e33687c856c6111f65c"): true, - common.HexToHash("0x755c9f4205f6119b5001d45140a90464f998d3efbde3882d951c2dbd0f5a781e"): true, - common.HexToHash("0x408dff60312f99e2e7dc89f667666ff94a4b73179a6f449b570911507530a4d9"): true, - common.HexToHash("0x5de2d73b3e5a6a5f057d7f6c27c3b62e2ad90082166f393378404ad7741ba13d"): true, - common.HexToHash("0x3a3443bafbc93f2f818ac54728229a6c9a8a3e5ba0a4617a97b194d673014299"): true, - common.HexToHash("0xd495618e7a89ef70984bb8f4e272cbc37ae49c8cfa9d5b9c9416c518272b9f59"): true, - common.HexToHash("0x4fe900f819d68b8f2471b2be7feb4f0c61af89dff59c078d0dde6a4f0cee4686"): true, - common.HexToHash("0xf276288e8846829975cfe5030ee7ff2020997021278527ec59475a0e55bf2aaf"): true, - common.HexToHash("0x5fa9137ddce705f8dd9de3e8857d30393f820e812cf4602c03315e6422514fdc"): true, - common.HexToHash("0x455389d683765ac6ba36834ed943c8b76691c18485ab27e75dc454846029fc55"): true, - common.HexToHash("0x7ab1d165cd77939cb0a69866f6482de47783a15a1e5c3ca2d95bbf85014b2d58"): true, - common.HexToHash("0xba0264668fd8800ee6796cd703a8480d91f03a3a3b8e6dfadc2454fee81cc82f"): true, - common.HexToHash("0xe959b48cce40022338bd5ddc1d7cda2fa616d346042f0819af1043ae2525882e"): true, - common.HexToHash("0x71fa4bd990581904844a539dba484d8db3ba7bf9e6db6d6f961960c66a72ef9f"): true, - common.HexToHash("0x54ce434380b684a34dfdc5e87e86d18adce6d95ea2b40795469e5be661a102c1"): true, - common.HexToHash("0xcea9f55f7d3582e17bf8e67954a714257db0282b4245b051a99ebbb2dd5f0fa3"): true, - common.HexToHash("0x69202baa30f63e29cfb80d37569d45d4848a041e58f3bae283f53a2a585568d1"): true, - common.HexToHash("0x11e5b6e5af57629926374ac8a6a9bf8aeb197367f14e17e1426becb3d1388278"): true, - common.HexToHash("0xd46d4b6d04fcf37008834c278a54c0569619089561eaf515891d4216740d1ae9"): true, - common.HexToHash("0x129889b60d3f4426fb51b504c6d7aab3600056fa72adc05e3b425a317e029db0"): true, - common.HexToHash("0x963c62ef60e593e2c1e24f622e38d2a568e70b7e2a24f8a01bfc801e1db806df"): true, - common.HexToHash("0x8a9c7219fb2170ed67b734fe7a975a0de5a80c08e745c5d75b98b0b80c7ab23b"): true, - common.HexToHash("0x7b9ac1d32d3c8b68ec8045b12d3186f803b910a611c0e696da0c1fd45075a5f3"): true, - common.HexToHash("0x4264919d38480979157d174e05b8642709611c702341349d5e34b9e13358c682"): true, - common.HexToHash("0x1bba0c52e55367cbe90f46dc9612fd26841965d2689c4eed31246dc433d6a5c7"): true, - common.HexToHash("0x0ab7e9fd786fe02ce082a208f3b397addf9c55c13094075291092b64a66daf82"): true, - common.HexToHash("0x160aaec2d2acf260b39fc042973275b406227fd7bfb9516f11a5c017011d70d8"): true, - common.HexToHash("0x08d1461e0fb1b4996fc0ea0390a5aaff3606780a222fbc56b82d07b55d842e79"): true, - common.HexToHash("0xcab042d23149bbe0fef497c6626d9ad4de61366aa294c75f7863b3b8d5f541bd"): true, - common.HexToHash("0x382db47dc3db8ea6a2f63b98df1f1e806ac627b3ad27774ec196b2496d30a8b3"): true, - common.HexToHash("0xe1d146a3012b4916875c8ddd92c573368cb631bc195ca1e505b44155f51e486a"): true, - common.HexToHash("0x12a60aa43eaf55f37cb6ab35ce79ccbf3c5298cfbed02f491ef547ebd6061536"): true, - common.HexToHash("0x588fb1584f259e22bace01a8cd9088665f5def5f5131766993d585fff2e2d8f8"): true, - common.HexToHash("0x62711722cd1c128301474d66ae84b0b213d095de02d4fff08858570b120e7f69"): true, - common.HexToHash("0x0352b07cfcf4dcf1f6d41a2a2903155f3d7806b8914ed6c866591216ab44c69c"): true, - common.HexToHash("0xfe4d54ab826c8ab2cbba0cd1e5342d4461ad159064278b91f672166789839bcd"): true, - common.HexToHash("0x9de1bd3bde1eb51a32b4b7303224f9284e5c5eff3dee00cc0e9bad585cae5c2c"): true, - common.HexToHash("0x779262e30423037d6a895acfd4623c65672e21c8dc3cb3239117623e7d72e85c"): true, - common.HexToHash("0xd2b0e126304d295484c0a206a0f02b5c2844d7ac760cd44a7ddfc9308069984e"): true, - common.HexToHash("0x05088af008186e466a2fa1fa11d705e3891c7ba7541be57ff1c198f3ee3c15f0"): true, - common.HexToHash("0xa7495bdb77a1c4ab6b020886d5fc50e76777a79057717511f85f44529f6859fb"): true, - common.HexToHash("0x1602d0ea7b7856a9c7aefe97ca24113655447a8d840b9789eda09e574e93dde0"): true, - common.HexToHash("0x64c9d4e8294b6d905cd3f828f679877b3545289dcadfed57bca4f7e3652df3eb"): true, - common.HexToHash("0xbfd953aca5930bfcd3e15fec1bc740e1cafa6579e7385a3844f9e460a9eadc50"): true, - common.HexToHash("0x836cbcbb93c8454614491018633f2cebfa4a8650e6db940865b17683cb7d1b1b"): true, - common.HexToHash("0x7a33cc67ad32b0026abb0735792ac2c7c1ef72c7ecf61d95b551222dbba58e1a"): true, - common.HexToHash("0x62ea18557b95ca75d7116e69ac33179a76384ab3738fe514913832df6b3dbbfa"): true, - common.HexToHash("0xa2bfd157d3709602b2205b8eb10be14db925a5b2162789fc9f6c0f21ae9cef8e"): true, - common.HexToHash("0x2cd39294a1b0221f0097d038d18d7a6ba4314599cba4134bb369fe62a552b944"): true, - common.HexToHash("0xcbccad833a691db627bbf8b26fa171d08335dbd2dd011ca53fbee19864c28512"): true, - common.HexToHash("0x5c1362646f681987f0ef3e540633663ceeb8d581dd0a9df89cddd17cd018d0aa"): true, - common.HexToHash("0x364d2d5a01933170b793aefde0d845efbdb72141987cb91aae3fdcbfecf722ef"): true, - common.HexToHash("0x0278cf54217de01e6ae8c6bb44706d62cd563e778c65dd4c10c1964dad6fa0d1"): true, - common.HexToHash("0xcc8012cc940ecee791ec76b755358c11e89b423c247fed6a27356c8401aacde6"): true, - common.HexToHash("0xad1a36fb6e3c2518b20fd377f10743a94d6506a366dd6a755206ef9cd6313422"): true, - common.HexToHash("0x35027ad60d9d405246cadb086d2247fbdad526c5a277a2db05da6c1036c64844"): true, - common.HexToHash("0x22d5b542167334a4b8a3096198861ebee80edf1e8de46d7b690fc59b73f0462a"): true, - common.HexToHash("0x0d108a5ec643ef954ef1dc09ed8b21061294f5192e952d487e3724ce5c87e74a"): true, - common.HexToHash("0x74c1fdc28941363e38d8edb7ac15edfe5cc667dde1692310b46954bec951dc10"): true, - common.HexToHash("0x46185995631732dd6cdddab4a0410e6724684568eed89a861d6afa3cb38252df"): true, - common.HexToHash("0xe9f6bde7411beb74e5034fd6ba9c6a6d1844307f324f1e7bfd3eb8be56ad23d9"): true, - common.HexToHash("0xe97e0b961099bb1cf7987aa4e707253753b02ebb006cf8d1963de19ce688c160"): true, - common.HexToHash("0xb5d7b6013db671ba5f044572b88e143fa0ad6ad7dfe3da1428713cd6503c7855"): true, - common.HexToHash("0x3ea031bc7caaebb05f4c0006c150344cd5887d6131e5acbbfbf740bb8b4d82ce"): true, - common.HexToHash("0xc78a5340d9ad8a83a753f2176f0b8c215f0468ef5632f11d7172128a5fec800a"): true, - common.HexToHash("0xf01cd6249fff3d4f2eb4d8e74530cfcc257a6983322f453dd74c16d85f9e8a91"): true, - common.HexToHash("0x6a1644b259a165d671ed0439dcad06d478896fba80fa3cffe30062fbb285ca45"): true, - common.HexToHash("0xbc82945316c41a062da8f21f39d6870dab7de980f93c1703e1994c05ed2fb763"): true, - common.HexToHash("0x328cf7372c0409f0446c3d94c70e25af9a7baaa6d796ba51c78607ebeb13c99d"): true, - common.HexToHash("0x4d7fdbb7f7783db03a122bc9f5ec2c532630420b33d426b08362c3715bd2f335"): true, - common.HexToHash("0x33433e6bfa84f11c471321a4da6b0bbff9475ad745473776711feed8b7d7ed8c"): true, - common.HexToHash("0x1ae626681c7327064e66fe23642c6e62acf4021e106fed6dc7a0b903cd022c10"): true, - common.HexToHash("0xda8c53d3c912a6a36d61ee0cda948c1dde55d5eddb92643c5481fd574e641cf9"): true, - common.HexToHash("0x6cfe48008f1e4cf298d94733e6e0c4386d4174f7b3d4f86f669b562c1be641e8"): true, - common.HexToHash("0x81e21754565cfa8bad43f37eb1f709b4da7ef8c36ac15ef09eeb650a46d826f3"): true, - common.HexToHash("0xa5f98c7b2f3843aa27d206b03869bfdc3cbceae25d60a917422544348d93be50"): true, - common.HexToHash("0xbc41de6c179d25e8a1eca4418e683cc73d003b612d089aac78c195ef38b618a1"): true, - common.HexToHash("0xb7d1c9ebafa4ab10e6faec0227fff1d74f846ae16cf85641ecb1197339ed506d"): true, - common.HexToHash("0x3f4e731de1d248c290281b26bbaf4cf9ba34112a5406ebbf7c97f21dccf35dc6"): true, - common.HexToHash("0x71e97fd2e71fef7956e509b2b9774d363464a5ec91622dcf6a0b5afb7f4b0496"): true, - common.HexToHash("0x54c126c248e23b8ddf7b7637024d7e41c4ae6a33c6149a0ed36f979730ea19ca"): true, - common.HexToHash("0x53c1186910cd5ee846d3f8fad74e6275b2dad2242287bef354b1e703e2abbf25"): true, - common.HexToHash("0x815ce4202e212440a5c78cf9db0c6733e366c289f5ad2ccecf86d44a86c9b0c8"): true, - common.HexToHash("0x75e63338557ab18b09816218c3d93d6a90bffc886936e824089e5c8863395410"): true, - common.HexToHash("0x3326e20750d8347d1e4b0876dc655817fd75e5df67045ff4010a763d56ecbef6"): true, - common.HexToHash("0xf653a96ebf7ef71ecfe512f0a59bcea1143a96c140cc93cfa1aaad82b3d6adcb"): true, - common.HexToHash("0xc1d24b02bf3bb5ed7c979e3c8b700b465b0e2f4ce68dd8103ba48db81d0ba744"): true, - common.HexToHash("0x3213cae1f90e2e901d9054da5192fba8052e444d86a60c31fab64ec8619b8c5c"): true, - common.HexToHash("0xafe006138aaf6484b8266be2d27e000f6614d03943ae8de263ee99363ffb1abe"): true, - common.HexToHash("0x2318e1e3ee335c707df7c1dcb9ee3c31f0b5c128c99a2055fd1cfb77bc63fa60"): true, - common.HexToHash("0x84ef61b9c2d6a951c8afb10755dade3b920ee2f17dba1adc83a1991ab0cb4a40"): true, - common.HexToHash("0x0e1d207577127ab13c089e26e31f79fa9b997e7e33413c05627564fa9e82f6e0"): true, - common.HexToHash("0x2feb68d3ba64929a067f9320e7543662aac2c915ec19dfa66d1b04cf0a27a6c4"): true, - common.HexToHash("0xab61317f53daf330756cb376ab8045d66fedabeea3583da2e5134a4e2e2c3eae"): true, - common.HexToHash("0x4dc12af8e286a73cd9fd4b1674118940ea992db7c1ba3011b9553940571940f7"): true, - common.HexToHash("0xed3909f1a1f78567a9f1f55d0d4db39bcf18940820ad2bf133bdbd2083b81a1d"): true, - common.HexToHash("0x5587385b63eb7ae2956fd8c4031bc1fc1e9e40f4d6affea631ce74e93c4e55a5"): true, - common.HexToHash("0x3be3a9fcfbe8b7da40a90f7ad0703c4aa0729cfd988a8ea786dcb83e3416385e"): true, - common.HexToHash("0x36eb132c8535b9546b9f956a47b40a8726c81c389464394622e9288acb88bbd2"): true, - common.HexToHash("0xe35516ae9520f20632bbfa6542c09b3c7bd26aaae3880ad9b55cfbc50da652c3"): true, - common.HexToHash("0x2e06082c40e9788980ff905241322a9b641e6d47bb231d8ee658afa2e04d905e"): true, - common.HexToHash("0x98a903a9f643875ae08aa5e8fd4bc3e11776d65a721b80af1638a5a1688e006a"): true, - common.HexToHash("0x3eadeef7bd2b75854fa907a7c2c7287fb62bd175ff63df4bd4c1d0126cacbbdd"): true, - common.HexToHash("0x4cd6ac7915132973a2234419f50d10f9fe970a79139f149f20ef2e302700561a"): true, - common.HexToHash("0x52d03fbe5b635e37b6d614bd18601966224d2d2b60dbcfa83700f195d215b1ed"): true, - common.HexToHash("0xb9ab7c35c8c12699077eca3a1e14f2588af34b8ca00306764b5063f5ea9b4863"): true, - common.HexToHash("0x7a6dd0661a2f423720b4ab58832386247427f278f1fef303e3f48af702140856"): true, - common.HexToHash("0x6db628ff22204bac4640cc17e3352856711521b30b1e0d2e078a05775680e98c"): true, - common.HexToHash("0x064ae254a253d04032fc6a548ec368a82020fbdd11b1cc96ea50cd0e9396d795"): true, - common.HexToHash("0x49015c4e61ca11136f587a82acabc297f4c14179dfa88b693a7e30242f80d155"): true, - common.HexToHash("0x486e4be8fc0f38bab98b9a77018fad4ed90a0aff92a99c6fa80c2f35e2449d11"): true, - common.HexToHash("0x64312e375c2a630d35f0f26100c411e667bc0f05083e7deb47bf29d4ce9a9fad"): true, - common.HexToHash("0x5348ad8bc5ba82351855974cff0d22afe25b2a0e8c0fc34b54d388c5cd84a71e"): true, - common.HexToHash("0xa069da0cee723b112f83c89523be942ff6fecaac89c054d0b416d5c98e6057c4"): true, - common.HexToHash("0x312b779f4872f0ac19c105130008a61cc29b66fc1b1a664d200d0ba5e2609afa"): true, - common.HexToHash("0x579ab93434b29518e55f41a5aabff9536be05628b9057b843c2ff95e3b17d759"): true, - common.HexToHash("0x21348fcd05e666d04ff962c68efbda0f13df0a9ef1737a917bd1d26130d2ab08"): true, - common.HexToHash("0x31e6e7fa0cbe4a12cb8741a273edea2d2b56660c103f47a8af229116c3f64823"): true, - common.HexToHash("0x18ef76aa1cfc538fa69c14569f9478c88d27ab232c44471c82edbcb95862e8ff"): true, - common.HexToHash("0xa50c945cf9c380ea8a3a12b6b8fc5706b8c5eab2f8580015e0e0ae179762f157"): true, - common.HexToHash("0xc6f0266fc89412f6eae2d7f5e9cc0564e4b1e02e23fd8cde68d9da0bd6295776"): true, - common.HexToHash("0xba516873d01a7a30e9b6e82b0de5f352648df225f413db875764d1487c0bd697"): true, - common.HexToHash("0xe2ba08036643c3b60a8ff7b19887af3e1abf7c3884a50f195f5a1bd189fe99ae"): true, - common.HexToHash("0x076736791b02df70b3d77ea11e466719e32501654a5982ce480c083c950e4873"): true, - common.HexToHash("0x8016e1a1aadac51b1babb8fbfb53ff73f6e75db9d017ce521629ad43881f542a"): true, - common.HexToHash("0x3cb777a151ed7f91baee954391bfeee48b410570b7a2f495157397015b77eddd"): true, - common.HexToHash("0x512a95def70da5144312d683d1e12e20a9c34098e9a4851a45cce5efd2d3f1b8"): true, - common.HexToHash("0xdd462107a25a2437ed25246fb271417e329b9a4009514c33512915931cabb3c4"): true, - common.HexToHash("0x05f35a02fa5a3d7ff25f39212ddeeee767bc09d111149c980869c0e7fbaf52a5"): true, - common.HexToHash("0x58ef7f92b7ab762830a1b90e1f4fce3b24d94a9f9162d789641f02635dbb14a8"): true, - common.HexToHash("0xf0c4945d842bc2c6bdfab8cbcd9d338faf2c8046a230c57e8a27df763ae81ef3"): true, - common.HexToHash("0x0afd33fe4f81e41efb5f4aa7860e90b381a272be652933715682dbf17f7c67f4"): true, - common.HexToHash("0x2c12e7f9e63fa634e062608048be01e44694cb118146f97f4d03e71a10b9ac34"): true, - common.HexToHash("0xb94417c6fcfb9df5e6640bd8e90a5433b86671829d0d4235a861c413125946f2"): true, - common.HexToHash("0x641b70176b7ea15f30459b9bb3e8e48c33a2bba478c0dc3232a538f84e30355f"): true, - common.HexToHash("0x98016653b95ccea286e5b4ec2d984487ca68e28697d166dd4b4da60d2208dac8"): true, - common.HexToHash("0x2016911c560b3a0d74a5675a5707b0af31c763c5eefcce6598a455db496bbb2f"): true, - common.HexToHash("0x73f65f21648c0aa53bf6214d7c0251eab1f50b495e476407b93b34edaa0b62fe"): true, - common.HexToHash("0xcbd697f389352f931307ef19077adc14f319b456e8fd20626c66ede338da0493"): true, - common.HexToHash("0xe82774292cbc49962faecd937950e84d8a38da39eecd080d0463b9386c794ec8"): true, - common.HexToHash("0x3b9a25f2b464b962dc1d1237102d51c71b9a5c3e941ec2a73c5d78321d69ff98"): true, - common.HexToHash("0xca8af4e704ffcf960a16f9a1e0f12cf1429a14d128c3cb2477d73a02c7e6c62c"): true, - common.HexToHash("0x51b6a910391c0a1982324c45205d5581cff69da29c5a53a6b4195462118daa15"): true, - common.HexToHash("0x1f4fdc5ca15434fa8fc90e663f473c23deb0861023b2565c1784835fce1cb3a8"): true, - common.HexToHash("0x28ae9795ac8f58eee2194628c1aa85bda5af073ea8f9674453d47bf27c721b04"): true, - common.HexToHash("0xa547d56f808829ea08ddd2551d24ee7f3d7e2d433e4bfd2448341c073d780039"): true, - common.HexToHash("0x30df0b99c7fb03ab7751c60b3327d1c41c0fb169d1c79e92a006a7e925839fd0"): true, - common.HexToHash("0xa474544c7ab52ab90b3840add10c74c9a8b42e8d66067c8e2bf3dc3325f5f9d3"): true, - common.HexToHash("0xca033307b518935673587c80485d10dc80fc515350ff97e71cf4f16ce507ad38"): true, - common.HexToHash("0x002698ce1da241705b8a32151a15d7ba23ff0c1df52c1d10630854783dd83e13"): true, - common.HexToHash("0x63850a38b2a0f0dc40be46a0494fa44c30652c52d4bb2cf1f0179c1e07dfe28e"): true, - common.HexToHash("0x785fe6a000180a799a6371be12fe419ca2d0680eb9f477bae133870378e4579a"): true, - common.HexToHash("0xbab0971e496543a6b7afa698b96600d0aec9c9cb6a3f6cde0c892d89440da91b"): true, - common.HexToHash("0x51c1e63baf80166175fd04bedc059393b95c6bc414888790a805a8977b88da97"): true, - common.HexToHash("0x2e67ed5bebba4e723f1d5589d559004d8fef023ace48820c691357e5d70322c4"): true, - common.HexToHash("0xa942bc892315c7ca941f3e24a30955901a80506aa964221000976ceaf555e33d"): true, - common.HexToHash("0x340f1bce99b585df86f5f96ac2cce0ceb59159fe4d57065d4e5ca5b9576d47f5"): true, - common.HexToHash("0xec8a68909854dae4e3c1b3ace70ff5ffdaa962e6a24e29f36968d0500b48c086"): true, - common.HexToHash("0x79174109747b1152b559123b1e6f7a7493e8dca36106058a241d021cab8ad93f"): true, - common.HexToHash("0x1e270fdb91bdf433213612159fd78c152b9b34991f83f384da9e53dd4e08c783"): true, - common.HexToHash("0x0af5899981ae5abfce65f2bfbfe1c4ee83bce17960c30e8b345a5d6baa843078"): true, - common.HexToHash("0x56649338c64761c4ef07f2849d1f266164d2d9f6219bbfed9fba9835c62b584a"): true, - common.HexToHash("0x8d5855b2f2308158f1e0bb6f4d07f23dc69df514f448f1ab34d9b180fcba33c7"): true, - common.HexToHash("0x4033f29068e62477a2aa5be5773b476f999f78a725fddffe3a623fe9faeec025"): true, - common.HexToHash("0xfe294ae34b4ba232149c6296287bc4f51764a7eb890e692ebfa5cffe0c9758ac"): true, - common.HexToHash("0xb55c32519f46c7ade998c9531a0568e19aa32e110f8f6f16be2fa2be2a628ea0"): true, - common.HexToHash("0x1a5ebfc746620a9430d4925723400e2fc4d47c431582dcc897d49552d4389cdd"): true, - common.HexToHash("0xa5fb2eb590729179858c56e28ff4828b0fb31f0561277dc645bd121e029227c3"): true, - common.HexToHash("0x7c31d6d1f34387fef9c7e84939c0d47f96be2e991b7526d3d795897ecee97303"): true, - common.HexToHash("0xa39c407312d25a4c2194fd32b3c89ddd0e51e4a658df8663d5a4c7969fb28c59"): true, - common.HexToHash("0xbd87acb207c0014192af40cd43ab91f7d2537f59d91a22382b15849d4ff65004"): true, - common.HexToHash("0x8a0fc43264a409b6865a9f308c78a943813e8b52462356f38ec057aa2309ca10"): true, - common.HexToHash("0xfe2bbdbb02e6d7d07c8740934442414cbcd3c0fbcab00222d88e8ba5ee0d7d79"): true, - common.HexToHash("0x1b0d61c889dec69916c8cb488fbca40289a9fadad89a0bb272e4ae483321dad7"): true, - common.HexToHash("0xf95e97b15976e40fe5fa0f6a035a804656e19fb9adb8e58cd809039cb37cf7e3"): true, - common.HexToHash("0xf1d9d86b996bfa9a837ec8c550f779db59218a952e2eec8d84e08e7fce5ddaf3"): true, - common.HexToHash("0x67673e1900c68ba2e5d4b86b4eec6d01eae619c91e79ac258259df71ec308399"): true, - common.HexToHash("0xc5ed94f5c28c35afb0d44c3f3a0e931a68fa782e3eab951d8d4b286b81040770"): true, - common.HexToHash("0x257e7bac09ef8a7698c1ecded2383db6b8ebdeb3526fc1977510db0cc79958c7"): true, - common.HexToHash("0x70cfb2c12476675b24ef206d9a32a3f9d5f97d3844d54120cfb823bcb6e7c74f"): true, - common.HexToHash("0xfd53f4396f0f1c8314471674bb2faaa5859b8bacffb65684d22f146c1ffe9363"): true, - common.HexToHash("0xf0d400a26d49ecdf08afba29b49509a390b86f9804f772816af8eccbbd19c991"): true, - common.HexToHash("0x964acdfd4e5f5e3129cc50ed462396cecb2431531fbe0a82a9302fac5948e1cc"): true, - common.HexToHash("0xa0f5a7b613429b5390b134f78774ca88dd3287247aef2f8dc3f3f0424806645a"): true, - common.HexToHash("0x2a7840b39929a79867582e0088f7d4dbce209c798eedeecb7e3ccd9d4a5f486e"): true, - common.HexToHash("0xb6ee61ca998ecb1e49400790589cbd4716dd822d9516b4f2383c2034a4e0cc38"): true, - common.HexToHash("0x9d77f114fb86b36f2de5707109ef67c0c996fde88c4f5473f629b8a0875d7ff7"): true, - common.HexToHash("0x4d632f77a5fae5dd8e0149dff8ec724d1592b099b75c530f42a5c6883d4556dd"): true, - common.HexToHash("0xadf64c70d651494d2776f9dfc354e0523218e73350c121e84057b2d3c33f2825"): true, - common.HexToHash("0x345dc8c17ade6210c082695170dfcb721e8ee675754fadc073814e7954cc62d0"): true, - common.HexToHash("0xb005a3f98034145f8f32fc21988be58ccb54825a03ac756c2fab03f106db863e"): true, - common.HexToHash("0x231d66c9c2cae49a101e4e81515cbb75b2285e6ca0059105648389d79557c56e"): true, - common.HexToHash("0x773e919d83e852e864699c912009e057479b200413a5b7aca0822164c075d1b3"): true, - common.HexToHash("0x7aa445f46cfc9ebe6f3753f22034b585b425eb38ec4adec69adff98410d6b9de"): true, - common.HexToHash("0xcf5b26b780a0041f865691da5b33d3bcd8761a9f7be7b497b6ed907ea5e84169"): true, - common.HexToHash("0x66f7de4b28bad2802652700d7657dfca962d9c3dcb3857349540f686e2f01b59"): true, - common.HexToHash("0x0c12d3a267e3c49feb3f395e18be11bf8bcda997b45e0d0e26522b40a2c61b2b"): true, - common.HexToHash("0x6112ef8c1ad1d8174a2f4e670711de5b7056673749a9f0eb11c627ffc45e2c8d"): true, - common.HexToHash("0x09cc9249fc907b7f3ee96550c6298e5280aaa09c72195c935a2a42fb025281b8"): true, - common.HexToHash("0x28cfd4b985514fdfb8e8ef6d9ed2740e60b818b49155d2b5c14c857434cbb438"): true, - common.HexToHash("0x5f8c6c1a67f48b843ca3ec78d4f68b29a26ef676d7ce6557547c57f02414601d"): true, - common.HexToHash("0x72c63367653d9d00fc3a3229f64b19afb025de0c1bf5ea2d3dab0d3cf7c2f426"): true, - common.HexToHash("0x4684e7d2c2943079953091031eb4c7921819fc5f9085d3473f4f858d93826fe8"): true, - common.HexToHash("0xae6dbf0f83d75e9abbcbfb132fc3230198f919be05250c13d8802865dfcca08c"): true, - common.HexToHash("0x609ebf00e5c90c3d7215ca5b8589437348c6be9a35bb1960ad337573e0d3d3cc"): true, - common.HexToHash("0xf93024ae0a42b3e292c388ac619e6afb264caae287149c7a6ed57b5ed2d3e96f"): true, - common.HexToHash("0x12d1c6e2d1e869379fc225eeadff7e6a5e5e26adac63369e38712273d9c40bfa"): true, - common.HexToHash("0xd6fdd5e1e952e3425b4b90b92db058b2eb16fb5ad586cc19cce8f7bb2589a171"): true, - common.HexToHash("0x28d401d7ee139a966f29cbc79001de11f33cef83bcac330d3d07614095dc832d"): true, - common.HexToHash("0x844e3f0646856c8f9a15186ffb12f9e99194ac36fa72fffbf63a9b92a835608b"): true, - common.HexToHash("0x699cff1474e80c5b6c93a4082d3ab886aed6c1cd5d0a537e83478a29e7a39326"): true, - common.HexToHash("0x4142cfc567d5059ce1352f2574fde47c73caa729d82fdd715a8e50887f042dbd"): true, - common.HexToHash("0xed25b65d21e8d3bda44c94bb42a24cd4fb5bbb1cdd6fca634dd83a4a78c2dacc"): true, - common.HexToHash("0xde66756fa74270860e2db45eeeee44b25ece07204a8a367371767961fd4ebd58"): true, - common.HexToHash("0x887d2aa34aee1c620c326729d86b36e57ffb120ce302fdd821134b386f081b7f"): true, - common.HexToHash("0x0e5d76cf88d12d62a35a5308a30593e7df68b8a163834bb4b5a38ab568292ae9"): true, - common.HexToHash("0xc325083927cd2058dd53c0929ba0ce0cfd66f2a30f87d2e776524d7c470bbcb8"): true, - common.HexToHash("0x55b94314a5aed593a0f11470871a2ce6610c1ffd8a33c4543ae80561e2a00a7a"): true, - common.HexToHash("0xb0ee0e7834762a0595a07d7258f2c001ef867a0d908920a3876df48a25fe3b4e"): true, - common.HexToHash("0xff480f8c4722db2e154ee0f366cf3341b3c1faf60235245cae2a02307a2023a7"): true, - common.HexToHash("0x44d9d7b5a70d74bc3e49c0e9771e8d3b809507b2ecd9b23253ea287b58ca7eda"): true, - common.HexToHash("0xe9125896969396b124b8d7531cda42f7f8dc2439ceb3f317b78b1290ef38c2ba"): true, - common.HexToHash("0x4904616ec8dcfc2456ca4f5516cb1d0d7ed19a82e76bcd6d2883d302e542835e"): true, - common.HexToHash("0x873422bd785e56500af20027b95e5821aafaed8efa1016464ab086a13ce54422"): true, - common.HexToHash("0xda0f5e913e8d56599b958f1833e573193222308212ac96f4e3531a353567d1ba"): true, - common.HexToHash("0x039eb704999935c5720c01578cfd07fec91cbf9b9d18aea8fc64e0e1b977724e"): true, - common.HexToHash("0x0611b617c74eafd96760a9e72601e3acf22f30fc239786226dcad0cb1da85af2"): true, - common.HexToHash("0x4f7052d2320603d9e761f65ad31fa0d3f88bf57e1d18a5a8c732e66849ae6238"): true, - common.HexToHash("0x1e25b9686df142f724b7d2adcd9aa1f01d42ddbebe231df0989abed1a1fd6f65"): true, - common.HexToHash("0x3f299deefed3972fd862c8eb57ec3fdf308fba9d210b9dcf3611c2709ac2194f"): true, - common.HexToHash("0xd350aaf328e3e243ec7623af9bdfb4235c0c7c7d7dad2fed31293f99e7d8093f"): true, - common.HexToHash("0xc677954dd47b4470b5d74d8765272a8bc8fdee7a6c3fe28bb6b946c063d7a376"): true, - common.HexToHash("0x70288b40d0d8c81ead1f239aaba0395fbb967a14225440f747b536250f87c100"): true, - common.HexToHash("0xfa0ab4fdb55f751d83218f9d41059fb30fd972b81a7cc0b376567581718f0cc8"): true, - common.HexToHash("0xa801d1d7a4e1f4c5f107c9734579fc494eedc661340bc2577b6bc0ca79e8db4d"): true, - common.HexToHash("0x20303986ae8b02c1258dc5599ab2962d774741d4dc5fb49536b43d8ce7c68d33"): true, - common.HexToHash("0xc152181c053b23092bf2a5e313a040d0e24d0026f21d20694b4eb1193323c210"): true, - common.HexToHash("0x0217bc80d9e942f469d3b83e8fedbaeeaafb1a91b160be14b1c2adc3353198da"): true, - common.HexToHash("0x3725796fdd6b10898ecd5237f170491bfb063aeab310056ae953897e7b355a4e"): true, - common.HexToHash("0xabdfcd21b23f6457a6f0da0f992223bacb19fc605d0a7e4cca4c61a1a1d75ef5"): true, - common.HexToHash("0x414aabd9a203355d2f1b2d693d56a59b40119f9214d32fba746f297bd280cb4b"): true, - common.HexToHash("0x8416dd62f7def884812f737967b76251282af4df638294fca14334292b0b3820"): true, - common.HexToHash("0x743bd0166766b276489300b8cdc635d7595e213e42df4117b6650b444c276524"): true, - common.HexToHash("0x656fa2686ce0de2525d2a9996d7467f78e3f0051947cbb27e10b1b968a748ced"): true, - common.HexToHash("0x39c3a88a51306e9f2e6ebb7c2978f06d55a4d73743f48144b7851c7bd534c9b0"): true, - common.HexToHash("0xa7eb3db7c3a2f9fbacf544226c3511f9af3baa2b6c4d77276b12e873e86a0e56"): true, - common.HexToHash("0x9c279e17954b00780a8a3722a748b37066b3e50b3616dacc557e85c99d45e670"): true, - common.HexToHash("0x9226acc6017575d61413a5b16326e5e801d7672ddee7b90bb8b9ff3af8b63471"): true, - common.HexToHash("0xfdd53c94463091b78d385684f5e4f41b2a5a5fe47df33d20df601e0ff12aed48"): true, - common.HexToHash("0xb09b9a2dd007cd568e78f23812ca36b68c552054491b875445b6e0d812952434"): true, - common.HexToHash("0x4f8f4a49967ddd846cec6468b871d98f3c6ae6a42f9a21d115a2f130756fca71"): true, - common.HexToHash("0x11495d91185a600b0964e0e8657d9b0da0519f63f7fe6928579ed64dbab02411"): true, - common.HexToHash("0xf57e632dd306c7ffa7a6c01900122d4153e48e5a2f66bf5f1aae21a4ab49e74b"): true, - common.HexToHash("0xc57a23daf7a31009899c00924af7723abd5e5ec505a483c2e899b1b4e1370e49"): true, - common.HexToHash("0xf9b147c13e85e10b31efe7ad403af4c2d7bda452fcd768ba313a6565bdcb0564"): true, - common.HexToHash("0x290e9420c7df5b58c88584e20bd92f6db7236e5d41fe25bae0e690984288b2b3"): true, - common.HexToHash("0x60aae339abb0eae92504970dcc2308bb3e3756e4608e6ec386624e0e9e1707e8"): true, - common.HexToHash("0x2a09868bfbd6e991ba4c41b9f9d62e87439d826692207601ed75e1c8b28a81f4"): true, - common.HexToHash("0x732e254eb3fb5aa295a6037527e386dd0f8e3565d00324833a78dd2d325f70e0"): true, - common.HexToHash("0xb9962f14ecb898f9eb512cb80381dad06cd9765e18b0afd9b1bf6518bb626282"): true, - common.HexToHash("0x635c45eca2fdbf89fed4e1a88466af5b534e104e10aeea3139213bbbaaa39e82"): true, - common.HexToHash("0x8c081d752df7b6801d51a6db981aef312df0e18e8c95024306ef0e775a24c592"): true, - common.HexToHash("0x648e36d7b83ea535ba036549ad224662df9a1a57f0abaa6c1ccf9c4f41fe35fb"): true, - common.HexToHash("0xd8f77d4b9de339a24749f6d31ae5ea449c4c52d45e00251f2394f1424f416b5e"): true, - common.HexToHash("0x8815bec4f9e6d7d703a948ea1b0c9a10ed0d83b6df234eb9ff6f177ace815f39"): true, - common.HexToHash("0xd23f3735e538c6cd80930f74c6cd9d4c77c479d67cd099d8a043c4cb9b964ddf"): true, - common.HexToHash("0xb4df1c973c1d227e35cd0ce625aed1ef349727c47738e432087ff106a6ebb34b"): true, - common.HexToHash("0x608241a344fd5d9198053929f6dc3b0d53d674c19bbfbb656c75e62c44bae814"): true, - common.HexToHash("0xfb4729569055ea64160bdc8cb33d01805734b97505b7c74ec99af7dfa05edb3a"): true, - common.HexToHash("0xee68ee9a57b9d90a706011b85821c666171cc31b87a497ba30b933f45b357324"): true, - common.HexToHash("0x61ea86c6bc4f20e27a6679956768f4f2ee0c7c62772dff4fce442c4b849102f2"): true, - common.HexToHash("0x0f07ef7f7ae2bd04328366d05986c82f3cf91dd19f6d2ed812c94ccb38b35e96"): true, - common.HexToHash("0x5405915ffe0630eefcd88914b095f95073d07fe687e7cc700a8381415b550924"): true, - common.HexToHash("0x613d9a89e66c87e7eca88ad3152ed58038c3d81345bb7a3309189c63dee8012d"): true, - common.HexToHash("0x99c5305cdc46fa74c57f244f9fc035a43a880cc5ca1c987b037f70923d8f5f81"): true, - common.HexToHash("0xdd33d6172041d2ab567872103b090ac46982e306302f96f7aab2c727dcac80f9"): true, - common.HexToHash("0x0823f0474aa02e9f3921659cedc14ee3f6b78f35938a00b10f63eb61f87a6380"): true, - common.HexToHash("0x3da48ff1a431b471bf8751b3e40116e80cbcb730ef7e86d7756d7990fcfa661a"): true, - common.HexToHash("0xe1da71eef4a1c010116e3f36d5e58a1c44c08db321880bd558793bba67dd7ea0"): true, - common.HexToHash("0x01e4d648af6774536779839839d95828a75da3835351b2929000bfbcf6546267"): true, - common.HexToHash("0xa9f5a76329fb993cd098d3d3d31b73fc26ff13ca92540abcbf04fe0d1188dc8f"): true, - common.HexToHash("0x303530c0b26a64895ee37e989f425eb3f27d464e0fa64de0e1612b4939c8f7f4"): true, - common.HexToHash("0xfeaf901740b91fedfa2843e1d8a6d3111247ad3225e7b0b695c8acc40a967aa5"): true, - common.HexToHash("0x5987d3e2a8ceeddd3b9aca7dac9fba3b56591204fb5d4b0b16dc205a3d5f2ee8"): true, - common.HexToHash("0x9b820e9435abd45b4221f04a0a51d2402c3f361c6a1dfa54e9af27c8bec82b2f"): true, - common.HexToHash("0x24a89f9e9eb0524f33be5e65d1b201348231f9b1ec12d90416dad2d5c65805d8"): true, - common.HexToHash("0xe69122559fd9543f38f4a4b725d694e18cab08e48f0be227404030278d2f3f61"): true, - common.HexToHash("0xc3782fe15e109da03d12c55d19ea1076be53182d082620ff8d5d5ff76da0f807"): true, - common.HexToHash("0xf6988dc3c4f779cd492f50dbcd26e2e9042cc48b4821d80bc1a0bd1937223fe3"): true, - common.HexToHash("0xa68e94691fe01dc927c405b87a9167d80817127a654c24dddceaa9e7d8020afb"): true, - common.HexToHash("0xd82a22d729d58f1aed5951c2b7f4fbf46d6c35f72c7459e5574593af95a44bc4"): true, - common.HexToHash("0xb2e0e36413087c8f8d3a8c8ac9f39787d8f94102c2516093dd6c02e46c844706"): true, - common.HexToHash("0xad34804af9038ad2b9b4707bea7418b3b8973bcf83d5cfdd749e91c32103c8a0"): true, - common.HexToHash("0x0b37209cdbe20f2f60ffbece1c1e2bb194553faf1b0ec9b46aa558c617d4f0cd"): true, - common.HexToHash("0xd07987dc39615734a9687d8dbb33186641edfbdd8e158a1ba5430c01c362c448"): true, - common.HexToHash("0xecbee6959b14d0c7746ec71243c01e774573ffe362ee6cbb03dd71252d5cb67d"): true, - common.HexToHash("0x48f6b6cb2f492d38fe82989f23c4d86d2a5fee415a6d1321cc64e29db5481d6c"): true, - common.HexToHash("0x2c63cebb56b2b8dd0f60a3462a1c479ae2c420252e95ee0b3371b383abc51c65"): true, - common.HexToHash("0x248b000a9329af44de8563d96895edd012800d76121c769aac500d09ea65d385"): true, - common.HexToHash("0x1d75c9d1774305d62f8f51e65c06547623a7c2afdfcfab5cabe032186dfba75a"): true, - common.HexToHash("0x361c0866dff92a705cbdec7c1babeae586470662f82b3ad0bdb666f8986fc408"): true, - common.HexToHash("0xa12ee8d9baa8985ee7c69fcbcb1e942dbea7b7ad1e2c0f2a5dc0846021ee1b1b"): true, - common.HexToHash("0x6b340ae790fbdcd4d9df9f0be27f20c560145b54bf305f702f92822e50e1ad1f"): true, - common.HexToHash("0xc48e8598b958bd485a5efc8a19be23f3006d912cc11b882c65e5d61d8023438f"): true, - common.HexToHash("0x5f0cc81d95cccae6b690188c1b58f583fa6754bba0cf93d9452c0b4e3b997c31"): true, - common.HexToHash("0x4650000304429b031a2c56debd844f20fb9b393749eeaa3c5cda1c277b3b66ef"): true, - common.HexToHash("0xf4f91947ce3b4c683681d80e9eef4a25bbbeb22050b3562da2a9c39436c4228d"): true, - common.HexToHash("0x036d4995cd62007ec69a8a22aa4849a504241951c24a0d5fef8c848ef1fbaf15"): true, - common.HexToHash("0x0e225cef3316c8bdde687997cf7f02ed41b35dc105f82e917b8d1a08186352ad"): true, - common.HexToHash("0xbdb623d24d4298b20d3078d1801642a6c47ba3d014904e2daa306f9dc15ceac5"): true, - common.HexToHash("0xd132ac96c452cb462bd28074825b488c7d52410d4f9c1bbb512e22b06a56b8ef"): true, - common.HexToHash("0x30770a68ece8d64f0ed94dcfe6097d3187dfb1459d1f99d0fa915c5c0d774fc9"): true, - common.HexToHash("0x043d6a2c88a366acc849fc05e5629fc257371fc5578aac3c810a90ff117bfc54"): true, - common.HexToHash("0x87b9f7a447ad9b1a772f0d48404bbe0b4aa751de50d157833132db528c42ca40"): true, - common.HexToHash("0x312a6b487c2288f1ef954c11e6d5ae7a3ce0086c96b6d1e1904ce2e630f371b4"): true, - common.HexToHash("0xa3c948b8b929e0b7c73df42aa5b6e6e1a31e2095115e1d66ff8b9dc4a567fb23"): true, - common.HexToHash("0xab0c5fa9ef7a455f4db07af92584d67abda785e9e41b95a7b77f151fd264ce58"): true, - common.HexToHash("0xe03229a89c7d75844c31ba18f3f2183da728a26744f959f742025ea557bba9c5"): true, - common.HexToHash("0x82f5a847ed268c51ae6890e185cde448772a4a371c5b96fee05a23e134fcf445"): true, - common.HexToHash("0x47d5f7a04e7d18e24ff60755c9f84e534d2753f6f7f7d31bea6e9d6e9d9807a7"): true, - common.HexToHash("0xc89ddaabf2b8eafc75355963615540aafb05e532438e27b9f7e46817c1dd60b9"): true, - common.HexToHash("0xb24e73394f8e5ded6132c421bf02e147666ccbe490a1b064fe0370a7c855259f"): true, - common.HexToHash("0x72e573f06ee53d1656b769bb84186d7c3732543f1df21392b23f0aec236f23d8"): true, - common.HexToHash("0xb488f5d874d5db96cfdb830153146a19e00164545a5a151b5b22f0fa6c2fa764"): true, - common.HexToHash("0xf62679cf3226ce71e9e47efe720c455004978fcc3d8185437c292c66c9f605c7"): true, - common.HexToHash("0xc1489f804a0da8ca7ee7da2ed94cc5524755b09ef1d5c01055adf7d8e70e11a7"): true, - common.HexToHash("0x41a00c5b859dffc16d63f5ce474ec7d88689bc3c615b1d8c826829e65122d2d1"): true, - common.HexToHash("0x498d238f1e09a6f7c8aff1ed2987f99ed0272e0ad8cb4117caaa98af1d3bb943"): true, - common.HexToHash("0xf12da2b7a0201106b2ef7af5b9cc4601711640ef8fb3ddfd793e874f4fa7193a"): true, - common.HexToHash("0xc18d99d0140b0c64415af780397e7c5ca3d72337ceccfe27623bba3e4760a7f6"): true, - common.HexToHash("0xebe3ac2276d8cb04f54b4802611a395b0246fa972fd556aeb88f5665d9f02ea0"): true, - common.HexToHash("0xb45253aa48237d7d436bf123a9953b196b2a97dc6489d4592fbeba7552881c62"): true, - common.HexToHash("0x3ff7e504053d0b817023664ad84737ac5cc201f3b9c82592f518d9d59f6d1c78"): true, - common.HexToHash("0x834ee42f208ea8657bc0369c088c3af32ad11b655c09be12d9978f74004c6d15"): true, - common.HexToHash("0x831c203027a19edf673c42046d8120806f08b136303337e4a189bd0de2e57c17"): true, - common.HexToHash("0x0d866c341056617482675085e12266156b212f70af9420a1f77c163e51b92742"): true, - common.HexToHash("0xc17892b38e4691d44028a47fa9c139a6cac73ac4287cdfad206384af647d809f"): true, - common.HexToHash("0x8cd3cab7bd6d6697bb8654f988fe480fdc86b7c4177c3e7ce3477183e9ee1296"): true, - common.HexToHash("0xaca57133f25d666a11974d1396feae3e87b69f9c407c6c51bcc707c0a4dd8da0"): true, - common.HexToHash("0xdc55dffaff55651f40371d35acef612c4d73309044ed4243a50ba4a0bbb34eae"): true, - common.HexToHash("0xeb090111bc96ca89a485219b9c19252e5b70c24814dd104974c3234f52200f67"): true, - common.HexToHash("0x6c90ada60e305e43e6e5b3fb74fac321a5eb777034c99e30856efd94d979187e"): true, - common.HexToHash("0x3f79f7a8f9e2362550b26fc14fe3a6867809f76c65390a20bd5af68ccd8c03a3"): true, - common.HexToHash("0x9108782f3de8dd09f961cc61546092778a4ea5346d93cf610ff493279b393fe3"): true, - common.HexToHash("0xa05feb348d658af7c26ea24e7bee0fbf84a4c03424c3737182cc2f301ed7006a"): true, - common.HexToHash("0x8bc823c5f9cf9d0a47546c67a20ed94ee746c788b84337a63f98ca1647d299f8"): true, - common.HexToHash("0x6bb8889158f67f92fb8bba33de7ed9eb190348bcc0072e6e8ece14db8f9788f7"): true, - common.HexToHash("0xca19d4f78bf7d199de4173dec82a32e6aec0ac01720378ab04e5e501317a7cb8"): true, - common.HexToHash("0x00873d0d9a6aef5750a5d7427f911e600d54e7fe1ff60ec2af1c0a1ca79fac53"): true, - common.HexToHash("0x9f06cc4ead09869f00aac6e2dc1af53eeb9773c14ced2072e66b2c813b928e1e"): true, - common.HexToHash("0x2a350b43ceee7f046659fc8d7d4fc724726e4a4bfb7fe4445b47113e887dca95"): true, - common.HexToHash("0xf05cbb8c96c12470542a34e6d19d58ca5c7de7c001016ff6e299fdac3819a865"): true, - common.HexToHash("0xc36ffc39e4e280389f219211ceae8f17d00edc782f7078968d52ffe9a46c09ec"): true, - common.HexToHash("0xdfa1a959a688d2d207cada47b571a6d391678f07775ed96e8fdbc59cbae647a4"): true, - common.HexToHash("0x32e330fcbe601e2d0572c6ed502271b837e9e0daf9989d22e3e617da1b4a00d1"): true, - common.HexToHash("0xf66d9c4ff47cb85dc99febbf93f1e8ce34c9c8d097ad9d15175ca9b16444f9ea"): true, - common.HexToHash("0x7d7ea3f1cdb5add6224eec1486d0d95a0c78e02542e7a12c9404da8a2733ceed"): true, - common.HexToHash("0x219808602b84e5626b3c633c9aedfde52a9e2f9608e41a7093f468db8ba47578"): true, - common.HexToHash("0x1467fa9027f6643d60f24fb6446efa6a59782c49998580dee5422b64b14194c8"): true, - common.HexToHash("0x88376e890733504a269a4a7c7872811ebad3f7586db98254a9ba128049ab89d6"): true, - common.HexToHash("0x21495e0741dcf4c5a59f8027c121cd347ced13988fa2d5baf053e4081cc7bb62"): true, - common.HexToHash("0x6032782d97ae588165a7653fcd5a46bdf436d92f90ec6231e20651f3d0e84c1e"): true, - common.HexToHash("0x82629e0055e03e1b62c9a4cd9e8e9b7247bde661a2e03575ca856a36079f9e9c"): true, - common.HexToHash("0x8c4f90215106e97d48090bb4864f5bd084a3e05a90834c92d4a2a7cbf37611a6"): true, - common.HexToHash("0x0f44370832a0f5d4c52c05dbcd427a81703b6582cee822c256c746cf0386e3ce"): true, - common.HexToHash("0xef0619dd61d69ee49ac5eef98f367378b256a78340fa6d679389688430e2b230"): true, - common.HexToHash("0xd9e7c581b0fd708a51cdfe9375bfc9a566dcfdfbba65585e353d050fdd1f77b2"): true, - common.HexToHash("0x22a9bc9d1e73506d756a3e1306ed51e0009d2cbf8c0a19f5ebdbc16216548f10"): true, - common.HexToHash("0x69eb9a80b7bd62da0a70b1f9a58c286ef9534f0f215e9781184701805c53ace1"): true, - common.HexToHash("0x96edad056b26f06737a4e22b2921bf8fd65d8bb2ab9c0c98a6d4f8f731d00ecc"): true, - common.HexToHash("0x49f7b8b506373de81a9a99333180204bbc58665a7dc1f13cfff3c17bebc7ca2c"): true, - common.HexToHash("0x2c20d1e5e5e836478774b4b7f4a30d285a97c21aac0ca70d4b6c908a03fbcb06"): true, - common.HexToHash("0xd7eda3c4237efa830f1d69d6fb84ae7a38592cb2d7653e82b1e2d29f06a821c2"): true, - common.HexToHash("0x20416d3dccd725e42018974674e23d420cbb23a54a174a590f8c2668d2e52e67"): true, - common.HexToHash("0x2ad0879206b0bde1ce2eaf8dc7b146a302484e9c566bb524210dad5a3f06f1aa"): true, - common.HexToHash("0x80d19bcd1b8c70aed40916f4f27f0017b8c60987f71401bc69fe9fc6da2c6812"): true, - common.HexToHash("0x9eb9a3919cbb7ab03de5c4e7771e1fae4b5d5307fa89498a4706a24108422687"): true, - common.HexToHash("0xaa62b5a385e24b4341bfb2ffccd4fd300147610c0ead0fa8e9c6cc1c61bede1f"): true, - common.HexToHash("0xba34d380bbd7f688d4f0c13b6f3cb16be1ec9e6b3b9f4f853487715e78369694"): true, - common.HexToHash("0x1548346ca1475eea1be210946a7ab70b29c3ed67bd93b39823d0087f389d9967"): true, - common.HexToHash("0xf39f6d8551e53504ef56e273a15633e08510f51ac73231fa29b101c5b7b8a26a"): true, - common.HexToHash("0x6bab8ffc1ae1f340726e0dea950ad40593deda31988b7c1f6a9b5c34f2999cf1"): true, - common.HexToHash("0x31c24184bf2a79be4985587db3394c379be37fd5040070730ae4178b5f6fc7b5"): true, - common.HexToHash("0x98425d2c19e85fb96ea3c6fa8eb88acc5a87595f7b6d209851995ff320ae923a"): true, - common.HexToHash("0x96b4b5236680f12f927710146595b9799615b1786d27e53d6df2b6dfeac2ba38"): true, - common.HexToHash("0xbfecfe0a7b7870299806c9aea7f638816fec766397a047cc08eef2206c40dbb7"): true, - common.HexToHash("0xf36e329132c3d24802a6635fa77e0efe9b70269c196ac88fb336ea255079b9df"): true, - common.HexToHash("0x6d640cb11e6e5e1d07c13ad4c5a49f23bf1935911d1a7909b6086324860ecb13"): true, - common.HexToHash("0x21446d98a9de73fc6c1dc525e9a2e584f527c9e6dd83ec5a9a0b6f6586446c33"): true, - common.HexToHash("0xe59cb637415618fc3c5a65dc0ded4dfc6a5447772818014eb560e2236e03d2c6"): true, - common.HexToHash("0xf104b56e4d6be07948c684f9fe2ab01c103a46f5903af7132cd9ede58b2ba6f0"): true, - common.HexToHash("0x69416a6eeb5e8006fcf747fffa18483a32404521826b3ca2991714b40df5e7b5"): true, - common.HexToHash("0x123cce5c152bfaafdde852d0b49b451df19ddd3201bd92fa5f806bfdf424bf65"): true, - common.HexToHash("0x78eefb4b5f2e33e173342cc450ba27fa3a0b0fd8e19c2326712ea235aaac8e5a"): true, - common.HexToHash("0x0c459100118f87f80ce34bdab8ec58a9815bed37c14d5f073d9f12265dada249"): true, - common.HexToHash("0xaa3ca5ae3b00b14b4b14a6d35200a532cb3c036b6d3a405ea822a3ee9dee1ddd"): true, - common.HexToHash("0xfac95cdf471d590c995d71f2fe431a6c55eb2afb14515f5e9108ae18d900cac0"): true, - common.HexToHash("0x72bc01b2a6682f9ccd5c87f4b0bfb7c1cae0ace1dbda315ea69272c75991ff9f"): true, - common.HexToHash("0x09e28e5506e373879400ccc81d3834ef84e7ec9e6df9575676b42d0061ade919"): true, - common.HexToHash("0x280edf28a7dca28ea98eeb361308568d1df67816c72ae9ac8c3811a3f77218ef"): true, - common.HexToHash("0x103a81c490c15dc6d4b946279683a42f14675e71bf188f9e69c6e828146c319c"): true, - common.HexToHash("0xe055c1a84d6a7e62a34d84853b962b18269fc6e7a2f10dea8182f9598adab63a"): true, - common.HexToHash("0xc7d51af2a8ed99843c94f12679608c2ef86118901f4c1355fd1b8b66e28609cb"): true, - common.HexToHash("0xceec554607bd4b9e3701b590b7d9db6f5441d3c65e76bfd3352d4d5965300544"): true, - common.HexToHash("0xc27b87b2261f3b6d1580ef43723702c50dab7fe856444d4f913f077bcf6fa50b"): true, - common.HexToHash("0xf3c592e1d97ef8f78a7efbf619f39e1d21a20b6e326abbbd5ec85ae5798711d4"): true, - common.HexToHash("0x2446fdd4357a5f1165977c2a5ea5d9849b0446598e78114846d70645a5c78975"): true, - common.HexToHash("0xb2866d51ab30dfb998dbd3a7055a6527fdbac9a147fb17fcf7e6d9bbc3be0168"): true, - common.HexToHash("0x4c7ee274bbefa644eba60710c1eb4168543cda75b3e8605883e7d3acce045291"): true, - common.HexToHash("0x1475f231e0e93f8cbfd87a69497677af26d5123315a447d0106020abbb4b0dd6"): true, - common.HexToHash("0x5c0ea43b64415169c5cea328c92e3c24824d16154a5c0ef9c276e375cfebebf6"): true, - common.HexToHash("0xc0bd5f6752084a3a86510542864b7cf7c0101c1d2cb11193246aca81e4e47302"): true, - common.HexToHash("0xbf9f56871a55fab83dc769403bd9b5e5e059b7d7f83718992953dbfcee570603"): true, - common.HexToHash("0x5c7a62f8a515eaa55c39053c19ec426155f51c1a5e4c2d2795df0d9cc9722e3e"): true, - common.HexToHash("0x63ae9b657a49ba4ee382f0ff477e030c19247d79949028e5858f4f2c2794df58"): true, - common.HexToHash("0xbcd520449d04e99c296f4cde04470127436f22f46574087aba463872b4bbf4d9"): true, - common.HexToHash("0x5f687c7f3f46ebb7dbb4d8c61605be0fe1d40651aa5e696b05f45ad8075d066f"): true, - common.HexToHash("0x9d9d544cd37890e5971e5f29c1d630059166125b70fd04059e6b6ac99d4685a7"): true, - common.HexToHash("0x542836bd3c0791e93db8f268e6f72d2e56a7d5c2fe05f1fa0bcfad1bf4ffc6d6"): true, - common.HexToHash("0x41dc115eac25fc12591c927cb045b70df4025a288ebf0df3cb99427226c0a12d"): true, - common.HexToHash("0xf36b1ff9e641c1473cac4c56340161a3d7915bd251f05365c0540d714eee9d28"): true, - common.HexToHash("0x73c314e38937c4a5682c3c95ceab04c0260909bd7d64788885a9afffa52444b5"): true, - common.HexToHash("0x6c02480a8ff00eb8336cf7c1bc0262a5970ae472b370638ca15e514627a8bec8"): true, - common.HexToHash("0x4291d1cfbdc4d3361385f4d80ee177b0b11864bc734a2feee0ea3fbd24eb10cb"): true, - common.HexToHash("0xac145f0a4a4303906fdf639344d7807e0e086d6e5f9d78ca032217bb0e2d6b3d"): true, - common.HexToHash("0x351fdff29db94f8895cb08068da49b07280ac69a76e12b05d81b7663c3493652"): true, - common.HexToHash("0x2c26050bb2541af454637281d460b8a5be214e654a7595e569160d489606913e"): true, - common.HexToHash("0x62361e0594ad9e13eb357edb612fba811c26d470c5c4a3d9138b82274778a13f"): true, - common.HexToHash("0x21e6fbe2c7d18d0aa0d2a44eacf973d739226b885d7cb2eb3bf563078112754f"): true, - common.HexToHash("0x4ef27efa794965d5de2881c484b6fe0380d897f8cd3520ad0ee40454d4e8f3ab"): true, - common.HexToHash("0x429aaaf65c24539804a1ae95389d227dbbdffc95630a9f2eb6a478eb2e0e549b"): true, - common.HexToHash("0x883ec7e325c172f59435175cb4e692a1d3f76b570629bc1ab25d0de3e4547a75"): true, - common.HexToHash("0x477c209e37894e8e826094cca3e4020e37f1a9cb096b65ac8608cae6a20477cc"): true, - common.HexToHash("0x4cbe2f6a25d5985cdf5f008e58d0ec7eceaab05c0b2ea946e9d3e256d7ecec2d"): true, - common.HexToHash("0xd484e09b531d9cdb32e9271e8cc35c0ee5a2574baa11572ab66413f17e160d9a"): true, - common.HexToHash("0xb7ee3325f71919b5efe23178c92b9059d854831ad8fa1dfe59d4300f06c0b03c"): true, - common.HexToHash("0x5af96a0c41ad8ab613695081f60aae53a3bba7e305bda61b18281c9ecff42f98"): true, - common.HexToHash("0xbca423ba99bfd20eb8b97c4b1e47c1fb94933abcd6941cc2cf8d1fa8aae72d09"): true, - common.HexToHash("0x3b4eb09bd03204c15b138127f97156d1f9af5eccca842a745256aeb6f5f52cac"): true, - common.HexToHash("0x97ae7aae824d15b60992bda9bb7e4594493d6d725fbfbc715590be0684223b8b"): true, - common.HexToHash("0x3c903ea0d270ad5214df3d6d585f215c78b4e658b38751e5009008e1d60069c0"): true, - common.HexToHash("0x3fec95d4117d87efbe1ae9f2acd833809d74d09b7fbd31b090981832a3279c70"): true, - common.HexToHash("0xd21c5915230e9c7878822fb5a3ce0d70a971b4f91b76ccc7b24572e72a378d2a"): true, - common.HexToHash("0xb52f6211f06c696c35265b134aa7aae63377eb6d93310e5d025db69386cea8d7"): true, - common.HexToHash("0x3df0d331133938da7798af0c63101d4d65dc4de3499b8467254ba1cc8dc8c2f9"): true, - common.HexToHash("0xce6aec090dff6527efcad5fb422aa7445c35e92729dc63b706ecd0ba48e7c929"): true, - common.HexToHash("0x5a473880cff2ff8ee112992b462df2f3e202ee0808d6ca13732f990dfc40554c"): true, - common.HexToHash("0x15f14ec4fe404648b0d311c393505789a3710137ae3fb960dd96824c2bc14646"): true, - common.HexToHash("0xc9be2a77b0f1368242ab9908fa5cf22fab90c40745b2b083aa898b582b2c3ba0"): true, - common.HexToHash("0xa0131858b591c2aaaef4124b3341969db247a31f8c8fc5e54cdda83a12cb0a3f"): true, - common.HexToHash("0x0ba4d4d0ec54c14d692bd4c9ef6731d8d2f6b19b11c8867cfc1dc6f78d958217"): true, - common.HexToHash("0xffe690130ad9aa479f8f916e94bf03865901c14c6408393a741e458c946681f6"): true, - common.HexToHash("0x13309d1d5207ea191a5e3eace881644c30772d1f79e5e267abc115b488edc9d3"): true, - common.HexToHash("0x33804b0ab86e35d010bb60b66ac3f5b0cc8600251cbcffed64b0ece57c004519"): true, - common.HexToHash("0x7a903fe9888269044418192e98aaeca885118a890ea6d7e593022adccda4ee7e"): true, - common.HexToHash("0x11790409e85fbec2ef8e8f46de769e6721c1710dcebf2f8cf2e0422422f86e80"): true, - common.HexToHash("0x0e88ab3ee483aac088436a55611faae66170f50b18829b9e5a099995fade1d6b"): true, - common.HexToHash("0x241d5c7720ea2c2fa3663041ed929a72f4ae41d271de627036f31df8c517ea58"): true, - common.HexToHash("0xd097724448ffea21204afd9ffdf46056fb755061202c13ecac7683412dc18236"): true, - common.HexToHash("0x05574b166511c549d3677b4196b6f4fd8478f3705848813d8768fe283ae235f4"): true, - common.HexToHash("0x2bb56957e535068727971384688002891951ab827eba817debe32b1c705aea1f"): true, - common.HexToHash("0x09cb0ce0eef208f4c244b6add256c49d038d4ae647f4461860644ac70aff46be"): true, - common.HexToHash("0x6d737e35559cd46e36ca35a6e1d78e0d411a9bb75bd15419e99971d1e9f421f9"): true, - common.HexToHash("0x4b694dbdad45655708c7d61e9d5c18d2827434257d6e90ce52120d5139bf23e6"): true, - common.HexToHash("0x836542b88d1eee95b6f402b5d2eaae55be5d5b2e636f1641eea5371c2d40d245"): true, - common.HexToHash("0x7a82580c935bbf698ae6e078dd350dd6aea0e33552f8fe10f89e32c2ae73b258"): true, - common.HexToHash("0xb317b50232aa014caa0d910015837b7b809411fc2c7df2e6409c4d7726cd8123"): true, - common.HexToHash("0xa5a2aec3205aec03dd43a24adecd620a1d530a965aff612682932d2c3ee52d1d"): true, - common.HexToHash("0x7974cb480b6a1cddafd4bf6ca71abbd1ba3b72c277fcad0a3cb69e52c475c34b"): true, - common.HexToHash("0x963acda76ac17c25494aa32a6f226ad0f7ebdce18bad0c118f89b8237110c085"): true, - common.HexToHash("0xeb3ca8f26e022905044e238b19bd8631c825f0cd6c9e7f78c13ead0d889ca93f"): true, - common.HexToHash("0x112b1cba4ac0f2652db16e22518294fb00c7a8442549140a924829027439ca03"): true, - common.HexToHash("0x4e9598e54fefa2ff4006c956fecfb237f4fc8498d3f201f29d9c996503e1b690"): true, - common.HexToHash("0x78e36cf0ce4af8b2d3d11d01abe36788c0adb24ac26c375bca282e45d5b88ef7"): true, - common.HexToHash("0x7776845cb822640ccd1e97bafdd7175407b7cc6b6ea81bd022be6ded0dc6e715"): true, - common.HexToHash("0x70f1c8fe6e3fec95b9a36f6cae34c86e068ad45063aadc5c2bce52b2e3f8f2c1"): true, - common.HexToHash("0x3de8a46c5f3747de92ce05c5bbfdbdcedc8e57af864665708b2b966ba71efb79"): true, - common.HexToHash("0x4b07bf7726e86b7fc2233c4fb744ce0fe82e6e153accdf49a570d43574290dff"): true, - common.HexToHash("0x2282a4ec0040f4e2e4732afdd0862bc6d02fbdf65ff92038e5d459122a36ff76"): true, - common.HexToHash("0x07555018531da894617b8b942f282d04530f2f0622cfedf831fcb8ea2950612c"): true, - common.HexToHash("0x4e4b98d5be6fc65fc9ae4986a9e86bc21db05041a5b6df6e133327cb9685d2cb"): true, - common.HexToHash("0x3d17d835ffaf50b3e55e091735180ec48033c5b90b5c61f5b8d6eb897d6a7351"): true, - common.HexToHash("0xe09478df2a3bf49d69f5fe04ae9d5ddc9bf24373fc3adda96d269e5c26842bcb"): true, - common.HexToHash("0x35e8a716280e03b83126b1527c5b2bcdac72e84e914a2911073975fa2b3199c7"): true, - common.HexToHash("0x3fd24aa35bffa38f0ee6f030b660ba64ec85ebf0ba4ee99a7864b79c761096bb"): true, - common.HexToHash("0x32fd6e68cf91b89b6c58a1b3ec21259e1f0559c552d70236aa3f9b2c0d422092"): true, - common.HexToHash("0xa00de8b00a582f1037c453ebe85278139a54e74f030a4a840dd2715af7a2f903"): true, - common.HexToHash("0x495e978a0ffa7660684d7047ae164354ea54bae97f502f1bc306dd5c4fc7ee0a"): true, - common.HexToHash("0x2ace053148aba036c2f7da15248b760ee16c8b4f2ef1f34b45ec36d56fba8549"): true, - common.HexToHash("0xd0a445cc9e95efe83574f62b6db78166f1e9f4d876188ec59114995bf0b136af"): true, - common.HexToHash("0x275a4bb1a5e59c0993e998d38e95d8bbe253de81b9202f6a9a59f7d775930acd"): true, - common.HexToHash("0x57802fbc1804ea6618b2e355ae3e2aafe9d3871a762afd741cb18561a4521d77"): true, - common.HexToHash("0xab16c364a4fe4d61501d1a40266ba2875fc51bbcac827e25524dcd75ecfe525a"): true, - common.HexToHash("0xadffcf18c978e1abe65f7c7e3c5b9f6645bbd5c505dc674afb342d9fa563ec5b"): true, - common.HexToHash("0x30ee5df34615cebd862af8e4ca3d1e0feae338a131af839b72a119515e4b925d"): true, - common.HexToHash("0xcf61c93bd81121a9204507df11b180c70ff65e49f437b0bc1f5fb910f026609c"): true, - common.HexToHash("0xd4b47211921b02692e081ee9fc1a87bbc6482c6ae49a2b03e58bf39f21b5b2fd"): true, - common.HexToHash("0xc58b5208577870c56026a36d57d12e804d42197b9b3cf54f855c2798bd80af0a"): true, - common.HexToHash("0x82fbe8fc949d582d3ae2b19e3d8ec9cca9c84483b7203445eee531674af7fd3f"): true, - common.HexToHash("0xe4322f12206df42b847042ec57eef3a3c6d8b49b66e679fc49b9bafbd7c48f84"): true, - common.HexToHash("0xdb078721c45027345991f19400819df143c09fbfad54cefdf2dfb34cfa604f51"): true, - common.HexToHash("0xd0799340f5987f6850ac48fea9fc225c60c39b0d2e58c6c9c79447d1e38a9882"): true, - common.HexToHash("0x0ee025e772cb24b97a03dbb9f6c7e23a86529bd4b0b192944705e605c36dfb52"): true, - common.HexToHash("0x9d700e904ff584b82755c7acbb055ff71ad4434f9b680dcad8688d038dff9697"): true, - common.HexToHash("0xe12ec5c34cf26482e520efebfb719c75121436f23d5e35edbff26ed5d29ace54"): true, - common.HexToHash("0x239d3db68a72a5227fc5522b7f0c9ff61c0f70339942dd5f7e58f88cc98a857f"): true, - common.HexToHash("0x8b64b95b5033d22e746ed8eabb41d80f1031ba1529a07ac3fb6e80c6ad948b4f"): true, - common.HexToHash("0x73c09ac4bb2e83b94ad09cbdc7418de3679c73b97cccb9a0eef702c6dce79b95"): true, - common.HexToHash("0x809097039a175d96f990c2a016ece8b9f46069d5d1bb404119af985f921c2e80"): true, - common.HexToHash("0x75be507a4637437631cee85eaafbfd054cc07497d0e2e0b196daccbfc868fdd6"): true, - common.HexToHash("0x1fbd6f83ef51425739e26550d5ffee5c57a0a5caa3cdcb596dc09b69b4cf7749"): true, - common.HexToHash("0x10753d32e6fea36d2ec7a96db3a8f69b13cb178f6c4416b5f11976f1f740af15"): true, - common.HexToHash("0x7624920a711800e2161fc7249a98aa32de667856ea9f403696a5ced3628c177d"): true, - common.HexToHash("0x1fdd12d173e887d032fefddf732f2b4db10a2cc49b24973fd382bda4f2cddfbe"): true, - common.HexToHash("0xa9d13a1803e736980d0c87f0840b530143befa0f68c2db3e543dee6f9c2ea35f"): true, - common.HexToHash("0x38597d532f483494ba23dee981e29a6eb4f97bb45385a2893e835bb2a77991e0"): true, - common.HexToHash("0xc6f62e3e725938f7d7bc52ba67f6b704a0903684df6dfe3dc3ba3ca416133890"): true, - common.HexToHash("0x8676d58d1eca216243d8224015bb1269a2f4c88657d2f0851de7bca887b0fd75"): true, - common.HexToHash("0x212a068846160aadd254c02bf21760ce10198cb434032c7abc5df253d687cf53"): true, - common.HexToHash("0x2d295806a22161e86de0a2987e33fc32f1476460ccb5248b0a13e250ed5d772b"): true, - common.HexToHash("0xaf8d9ecd3f157e64a50095cece9fc3541e35936cd9b4813c5abbc684d2cbb050"): true, - common.HexToHash("0x18f9ef66e5f8f17f0509e314d68474a48d36810e923c78769799e2df123e1712"): true, - common.HexToHash("0xc37255da7edc4f41d051ea20a2038b8f69cc76c38fc17d6d2f3841bf736ab86a"): true, - common.HexToHash("0x7bd6fb9af24b2a4741054627e588eab08e84bc2c70b22c0f077f89979849ad49"): true, - common.HexToHash("0x22bb6afa4da620a73c9dc86d49d198ff7ceb3b765a3ff1f8cdbafdb9d215caee"): true, - common.HexToHash("0x1e1fcfaad94859f2a5c5d83837e86e9c91de30252aaf95a6241b7e39c00a5c46"): true, - common.HexToHash("0xa46ae845e281d11195f60ac4071d6ebfbc03a45ad1a03a1952e35ddb36bcee28"): true, - common.HexToHash("0xf51458b147754d2a2b649f070e89616993b09121c155e3164881ec50f0b0b412"): true, - common.HexToHash("0xb9a512e3849683d4cd49730e1cb528f8ae845f9968d7fad574f06aa4fe3cca3e"): true, - common.HexToHash("0x21d6b4cb20696758f5f58b5fe018cc37f7748a593aa0a757b93b97237f70d780"): true, - common.HexToHash("0x312b25d12300deeb06c4ab54ef2da5aa30e53d0510bb6abd25eaa3c78bdca771"): true, - common.HexToHash("0x85446d248909b85211714e3c4547ccb80fa18e46dca2d46303ca87b26ef93d51"): true, - common.HexToHash("0xf8df96c57c6b659e86628b49c8d7e180788e804845f6f86c1ab9fab50b4a3be0"): true, - common.HexToHash("0x3ddfd8779bf4c61306e8f550c522d74fa5a67e13de2845aae942c2a67c28a132"): true, - common.HexToHash("0x48071e37c0ca1916e6533a3be461590a5542808dd7fbc4936ef4792decdeb58a"): true, - common.HexToHash("0x85cff247a48d5a78c261f62526cccc093e198314036d0d8840d7d02cbb9b2484"): true, - common.HexToHash("0x640e2a93170d08544e9b2e6e3157ee7f28c34ffa40526fdfb81e6ba29b4d0614"): true, - common.HexToHash("0x71a12f7cfb67177e9d2bc8d8f88f0412151e0bd20dbafa2bfacde72ca17304c2"): true, - common.HexToHash("0x173a44a72e3ccd40063a433b42f871c7d15dfe063641898916371307f9fbc18e"): true, - common.HexToHash("0x9b57d88a5800a8eb4dd26c535273a067a3a6c664f6bb4106a1f55cad89bfded4"): true, - common.HexToHash("0x0ba10a4bfcbaaad3c1533bc0836cdd139fa29888ef6b3461e4f5304b283a2f85"): true, - common.HexToHash("0x712d9b2a1354dd4fd0093ea12110166dd3a66c2150d3ddc1d00c4d07323f61b6"): true, - common.HexToHash("0xc694d59ef6f421bfe12aa9af2c0b2bbc5429eecc842bced5a2833c542e262a17"): true, - common.HexToHash("0xa68b0e764a44c6297cda0992489da69d1de46acd9f6c5972916a886c1df96fcf"): true, - common.HexToHash("0xc78de3329a170387d2efa2cf51728523ef09ddae1066908c606da355ebc134c5"): true, - common.HexToHash("0x3c7ab9f2d70e30a0870366024d09679060542f0f4d985eab417313bcd4c7dc86"): true, - common.HexToHash("0x260899df4e4cadf2d7cd41cf39eaafe88d1ee5f7df1e1e98ab24afb43edae8d4"): true, - common.HexToHash("0x0d3bc2bef2b8d69bd8b117375c0411c5d770e469d45b81642bdfba3144fa612e"): true, - common.HexToHash("0xd525fcdec2edc7162c839ce7b73a0c19fb5647d4337739e6cd8b48b8c2094007"): true, - common.HexToHash("0xcd6fdc9246465bed35a071a9834465f13dd5673bbd842d4f358313b53c1076f2"): true, - common.HexToHash("0x740161ad0a19088ec847bdbff4b0420b9db95285ca1a2b3e416d768ea8301a9d"): true, - common.HexToHash("0x3ea42258aaba72ce186bdcc5a0aaf27c6c6a6eaffffc8dda605b90150acf87db"): true, - common.HexToHash("0x8978e04d898bfa2b8b9c29fbdca635f1a2b2a91cc15a0d8bbd477375683f52ec"): true, - common.HexToHash("0xfe00267333e3eb375dcf1c1a6a964d844735a8610b4b0bf966313523b9951c1d"): true, - common.HexToHash("0xe3e764d3c4b9d32136e6562df5632601d64bda7111a2bcdab246cb1d15d2ed8b"): true, - common.HexToHash("0xe8eafd8859f2e8bb42d952dddec0828ce1e89e9c6748064f3f2f2a9afc3fcc5e"): true, - common.HexToHash("0xb1f235e62c1a26412a483ced72e87d77dce330ac471837db1195b1e50861ddf0"): true, - common.HexToHash("0x851d749c759b1f9c0845cd8998f9b4ab4cdcca9d507026c0366107d2e4d7cd9a"): true, - common.HexToHash("0x8c07cf9f3e42850f3792c7d023caf5194bab4ab1c2183b76be0f2636d2e63026"): true, - common.HexToHash("0xcb3f8826ee1a847eae24bb5e67115e41e169a00d7aa40b5f63d2a2b72d754e8e"): true, - common.HexToHash("0xeb0d0d7b3246199b5c89203118d249e098a5614d5937b5fe95744b993bfe2105"): true, - common.HexToHash("0x3435b3fb3ba6f16832d7098be3c8ff1759a122f6799dbb5e999963323e51cfad"): true, - common.HexToHash("0x35cb61bb9bb490a50650b92c78101f16d8623a0f1eecef86e4bedf292c75caa5"): true, - common.HexToHash("0x5ffdba2c8e19fadc7a37e58b31e86fe49e107d1f6f10e0d2c19d91caab696ffe"): true, - common.HexToHash("0x5acaac7738e9cc2382dcd81cc932b92d7eef9a09b39d1126129aeee69a6d59d9"): true, - common.HexToHash("0x8377d3b49f4a7a4e7c8187feb2512acadae5d289a09690a89c986206b0763777"): true, - common.HexToHash("0x7192a1d3e518e94ffd44569e3714ac7bcc506c49cfb2f3eef9734f39037e7842"): true, - common.HexToHash("0x125ffd89a1b42673e8be04edd4770930ff3857ba2a849817f70efc93c81079b0"): true, - common.HexToHash("0x12c8564fda631843492284a5d5eb2320cecd32340e0ea1ce8e34ab7d8370afc0"): true, - common.HexToHash("0x6fd2bb39e5d69a2e2a09b04e9fcfcfee4d5cd94d662299bca6710ad2d028558f"): true, - common.HexToHash("0x2f3cb6975707f206e94129451b0ff136dbd6db7bb959bfcd4d6bfc3da1582399"): true, - common.HexToHash("0x712f6d6b88fd353ae4da4c5fd7c960de3b231699cc5e8ae7577d1b688a8edca3"): true, - common.HexToHash("0xd4f33c26eb94c4bb9e661e5e6b385e565880487adbd1eabd45699ae8a392b30b"): true, - common.HexToHash("0xafb1f3df43776253d427699bd08cefe2eb097cb6825c5a0cc8fce79df44278c6"): true, - common.HexToHash("0x484f849ab582f477e45a088477cb150a5183b803307933c903c00b85da92b3bb"): true, - common.HexToHash("0x9501c2c0fc764d30faed6dbf79a4c8bb3eaa15c357893f0f02103c26736384c0"): true, - common.HexToHash("0xf2f8613e3d2eef51a56542c96b88abcd7bb43fa9220216938ac1c36c6af61aa9"): true, - common.HexToHash("0x908ed43e4660de2f0e8a13ec52fe248b969a74fb6074ec45e5397b73bbc730ce"): true, - common.HexToHash("0x5b2a68a23f68ecb8125d06e6e196b736baa96e8341b4ca80c304506c79bf9045"): true, - common.HexToHash("0x49a171350a209b3116573ba17cc1905b63b345ad3d48d1c5c2897017ba7909f3"): true, - common.HexToHash("0x7b433847166348e5f8487293c29007c784f762f7db3c75d5a99a2d7fd8ef6948"): true, - common.HexToHash("0xca8dbf0b3d7182fe57b06c318bb06d6bf4c1e281a319fc8581edeee849c955c7"): true, - common.HexToHash("0xed476b90dd6c6b383aeec7bb943a079bbad76d344ced6311346ce2b5409acbd0"): true, - common.HexToHash("0x02c1b5b68f0561d3c4c01dd6abb313d3ee02366263b71805c2a031344720b380"): true, - common.HexToHash("0xaccd41c6f7f2a6cd6da129eef9b0cffc299fe6f6c7913d2ac96ac63e8ef256ea"): true, - common.HexToHash("0xae06aff4ec67d4a60a115172c4002c46bb1b4c956cbefd865678f9d5b651f4d5"): true, - common.HexToHash("0xd17426b6dc51893c80b3a59d2f2b0f0a0de41ea64b8dee49284de286d1c38296"): true, - common.HexToHash("0x8d2d83b23ce7ef31e8a179e0b85bd8c49602d21e335f4dbcca1548f524340a44"): true, - common.HexToHash("0xb1a83e62d03013f910ea48456e4b9e438adade5aa90f2d29b1d821f8be5ea216"): true, - common.HexToHash("0xe8f7868e896a5407c56b0c6ff31eaf93a9bed8d9baaddb1ca9a2882296909495"): true, - common.HexToHash("0xc4d11175b232c3928f7e538272ae05e1aacc41ef358fe06bdbddbae73623f428"): true, - common.HexToHash("0xe872cdd8f04997ae04c6b86cc1a67b992219cb00be37811539fd43b38618a7e2"): true, - common.HexToHash("0xb4671882cd261ae1b83a8185a3869d8014792506f16edc0200679a555c416094"): true, - common.HexToHash("0x965855fcc98de8fa8b59fa5913f5a3d17f1f491d3a1bdd1efe075ef09293d57e"): true, - common.HexToHash("0xa687a571b90d7aa1f3903b9a6675462d148ee55b599612a865fed8292bc8e62a"): true, - common.HexToHash("0x611bd04c7dffd28900f3b797a86e1592c0c6659dd2bd3a79d9ac47917807ce65"): true, - common.HexToHash("0x89c782e05447b540bf5d2ee38c66bb35a7afa6d8aa1493bf83e4df3253ab286d"): true, - common.HexToHash("0x7dc1c0e874dc3a14870e52362d7ef60a0f43cf87aac225f6c99a8b4390be65ae"): true, - common.HexToHash("0x3be0867a9d49d0062ba090c6c0dc4a45b2662fe9e8c47815f93e2deb730a521c"): true, - common.HexToHash("0xa2196cf95a31554f551dc39370b948adb6fcc07d4fe521d996196278ccdb919c"): true, - common.HexToHash("0xe943d42dc6f1ebca9bd718b3964c0bdffd1e12137be82e06d7e516e8282fe3e8"): true, - common.HexToHash("0x5c6347d2057871e8f2d1bae8f17c2f8b01b3c86ccc963cc33500ed87f07511f4"): true, - common.HexToHash("0x23215b8a7c288baa538255203ac06f164c348bf8bb062fc64b04f9de754bf6d2"): true, - common.HexToHash("0xd76670c76ed36dbb4153ec1c18d3c3f9d5f0108a914f66a96e1d9ab8683b3089"): true, - common.HexToHash("0x4d5900f3cde4d2cfec373be18838c7482c589e5af9557a468448813658f7af51"): true, - common.HexToHash("0x77617efa708361f9b3e01152226489bff21c11e44208f8ce6d911ed2b40c90ba"): true, - common.HexToHash("0x53803e1b395683cf92c7c41362a587e7a3eab2f8ce5ef430e4257599a034a13a"): true, - common.HexToHash("0xf14cd0e0a1a6989c9c9e7757c108c1f3af8d2e4aa46a3a2f8ea5b80956dd10f1"): true, - common.HexToHash("0x4d52952a6e74eb1f168ec568dfbfea0b089c7113f790e1fd03032a8ea56d56de"): true, - common.HexToHash("0x43024d72f5244b1f24b7dc05f6fdcd1e541fa19a548f30e225e6f4f4307e0386"): true, - common.HexToHash("0xf5b7f8e13ffd26b97edafb90d293f1802f6a269695c7879898c83070d3de8769"): true, - common.HexToHash("0x26869bd6fe870a2c457f94214c149fdf65529984f7ddbda59aca49151e8d6c6d"): true, - common.HexToHash("0xa2dfd64e23f0ec042f9bf5c9a61ec2ec4dbd6ca2e4e73b4cf6c324cf36cb2971"): true, - common.HexToHash("0xde9bc4471d9233d7f467029d3df145a7d351d151285bbda27dc6bf9c09c9cba1"): true, - common.HexToHash("0x300f2607b9275c2fd3b399b5114f1adf3d8b76fd85001de9b9cd9ccf87fcec59"): true, - common.HexToHash("0x51f3d27ecfccb28bd83bafd07f1248aa1fb3f22c2974279dae5088d95f4d302a"): true, - common.HexToHash("0x0144254b94f19b19bc9d33644a71ff33726602bd30485aebfeb6a506f27ee976"): true, - common.HexToHash("0xdbb4f29519513f38b8d81ecf663510d7fc9011e70fdb865c19657d286420785a"): true, - common.HexToHash("0xef506b34519f2e89dcf3d9d685f912c342f04baa2c17cae9816b14915c8a625d"): true, - common.HexToHash("0x7bfd877f680b8034e1ba9ed80fef819769d13b0c5c2059ee614f0681cbf639c3"): true, - common.HexToHash("0xc092b753b3ebfa32486265841c85c79bb4ed74965e5fc5bc31d1164d8e80b5d4"): true, - common.HexToHash("0x2986398d6d291ff85d66ce03345ebaa91472c003b2b18ea431746a297644b7c6"): true, - common.HexToHash("0xb006e27bf722a2cdbd5d90ca9996929dc2545a45f926788191a2052aabe91652"): true, - common.HexToHash("0xdcb4d626559312eaff0c652e523156149271a4f407ca44dda335f77091bd3552"): true, - common.HexToHash("0x4fb91f39c1f273ff5ddde828787564ab36c153a9917947e567565dd17e2339d4"): true, - common.HexToHash("0xb399f616686e35ce02919dae5420acd8351f699c0d261689e0847105b5483b54"): true, - common.HexToHash("0xe7e7e6ea4762a8782fa8b938499d55117dc58302826d33a3245cb8ab982b1957"): true, - common.HexToHash("0x18b55093e9c84a869620b5eb414f3196bdc9213eb98759ba1c60ede39be319e5"): true, - common.HexToHash("0x8e937a8316d47af79e6a2908e86014282cd95014f1abb9e644c4afcfd28c0644"): true, - common.HexToHash("0x8da16d67d31b2850a636b70f4db6ba93044fd98f4164bcef4952e8d28014787f"): true, - common.HexToHash("0x2a0a107e01d6cbf717197013573a284ad5ff94b4ccccb3d5255ab749402a90ea"): true, - common.HexToHash("0x44030cc0e1952db1ab94c78ceb6ada0186de861807c22045635fcf0d0c5d0edf"): true, - common.HexToHash("0x0b9ea3661f008369e1afad4ebcf3824f6ea0bf8ac8a771f163f915d312afabc2"): true, - common.HexToHash("0x3e1f697e34f00d306449f2206b6f7e364e76761f1683110dec1ae517e619dd95"): true, - common.HexToHash("0xcfb6a3a98e373a2d1d1f038252961119fc900397523a8b1442158c77777328db"): true, - common.HexToHash("0xc0198ec0ce92d7d9342f301a524ab98ba73e9fe0f462c9315223804af6ca6642"): true, - common.HexToHash("0xa252b712cce9bde2cf998c3d6f805ce1c392f448b2e04b9ba05ae0c73210c821"): true, - common.HexToHash("0x52d1ff62e42d8f13d239ce9362459e2afd2d068e52d7ecae41682845e5b34fc7"): true, - common.HexToHash("0x377352dbdb60aff526b2a6915e99add57e80b40b55e8343eefafe56d58b5ebba"): true, - common.HexToHash("0x5418a3eecce75c88031b30fcc2f798bbe8c46cee55903e46ae3dabf6c38666ad"): true, - common.HexToHash("0x8f3576eb423b6be4eb2d014d0e06db71982f6a4cdee60598d33b962f26dcd3cc"): true, - common.HexToHash("0x67f558710720266948125dc6551d0996d05ac3cfc23fc4ae993f5cded9826d00"): true, - common.HexToHash("0xbf3cd7f67ed9ee58a81ad49c3d5ab4c5d1b4a6efe439f16cad7fe0310942fad5"): true, - common.HexToHash("0xfbd18e659efac229cdc79962b10a6ba1937fb4f58d3811b4c4dba043073cd268"): true, - common.HexToHash("0x8ac48336f20bfc2df916c417caadd975bb45c8929f76a17dafeacefa2ecea95d"): true, - common.HexToHash("0xe068a5c3228dedd61af7c24c3acf336f078162e5b86f8fa1f6fdf9a769e2121c"): true, - common.HexToHash("0xfa93939ccd4a7c206e4069f64ab5986a0d3089d12063c9aef47583010f9a862e"): true, - common.HexToHash("0x64b188a0084e143d65554a62f551b5b615f87ce4f4bcfef4dbce62abaef441b4"): true, - common.HexToHash("0xbb334d4ec6d5ab18ae62ec1c64c8836282e8c7102546a37d3307b9373e5a5347"): true, - common.HexToHash("0xee8d206387f8b243da53963b469fc761bfa45372c8faf5e57420b44da4924d66"): true, - common.HexToHash("0xe4103fb8cddb7d86e8ab987996648f5cd486142455971dc4f292c2eb929427c4"): true, - common.HexToHash("0x18ba7179750b8a11d88d23309fa052ec3485c7445914f95f056d6667e8db3664"): true, - common.HexToHash("0xc965fc943f2def44d0e946491ac6661d2a274f0b2f7cc023e40e42a3e6a9bdf5"): true, - common.HexToHash("0xf6d55d653ceb41ba4c16010d47cee49a2a8ed34051c4f8dc265153e784bcb550"): true, - common.HexToHash("0x922bd057b9cfd0d493102304c6e107acc58f3b1f1f75c6ab5477d4f12a081486"): true, - common.HexToHash("0xeab35800c0b7e5b50765dc185096502ec69d8ad4e204017f5c73307a493b10c3"): true, - common.HexToHash("0xfbbca375d45aeb0c06ff9f45c9e83e2ba661ed398041f037cbfc1c7acddcf009"): true, - common.HexToHash("0x7fc626db76f2190c85d506c711ae4b7a07e2ab7926dd1cb8432c5a4886d6eee8"): true, - common.HexToHash("0x1a09d36f32e44cc5b5bb50fd7d0747f5bef012ac3dfa8e7539caaa9d47cd61f2"): true, - common.HexToHash("0xae97b99d689282deaa4e80dd16002c7f40b463521813625a6d93705d1699365f"): true, - common.HexToHash("0xc40b4edb71399dcb7eebed2035e69d60f9ba369150d1db243bf431837254e231"): true, - common.HexToHash("0xd473f277aa9bde66dc7edf788a2e7b8a0404fe0b085493de42e903cf6b8521e1"): true, - common.HexToHash("0x1ac98f13fb0fd1e59241698d64d611ec965ce02d1ac754ed9f73c2c2ec911db7"): true, - common.HexToHash("0xddf0fc792f173262c67be0e28bd5c95c3626828f52f56fdd3c8efcc5c289e993"): true, - common.HexToHash("0x13de01ff6aa03c889d4afe1cd215bf79dd2d8e122976ddfcab547c95b82e08df"): true, - common.HexToHash("0xe1ef8252b2a45bee21adf13a808c0614849d43a1313fda6e6350db14491e38f5"): true, - common.HexToHash("0x292875c3424cda66eb8727378fcb0f78f6816193d04d621fd8c7966b5bbf5256"): true, - common.HexToHash("0x3bdf8377c6e03a77252a9d31d9a8932acf41ac79cd17e88feaecdd17159af349"): true, - common.HexToHash("0x2fef475f077ba0401d638617da64fc6f0c2f8cda25a1cb43199236c49cbaecb3"): true, - common.HexToHash("0xcc6383f05305ddb59b469bbb94bf9de9c67ab9c8679375a8eb6f77c7ee22e815"): true, - common.HexToHash("0xe027b24784584454a652e1656df6fabda2f921d408d69ada7dd19dfd0b388f94"): true, - common.HexToHash("0x172d140946108dd78b67cf1e3b57c3c2e718764242acc93a1d3127748e968e30"): true, - common.HexToHash("0x286b4795daeef797aab6dcf972b7c7b293912c95d594842eaf7caa63fbd10ad5"): true, - common.HexToHash("0x13cfc2f6b0e37e7ce9e706fc1a818f4bb2f41309bdfefa6879854d6e1b436538"): true, - common.HexToHash("0xcdcc696ccfeb86e07dd0274c4e35d021b6d38b497db7554269d89fbf9ccaf4e1"): true, - common.HexToHash("0x126d97bf742933ab17d72a1fd56cdcc5b82e509ee3edbee219af399c743b00c0"): true, - common.HexToHash("0x1029967463514986023eeb214f6b6ddfbceaa0ea34af2d74d4831f51c131c9fc"): true, - common.HexToHash("0x7e67dd87f4576580eac6662d7788b03484b8767518c02066cad4cce8e4cb6efb"): true, - common.HexToHash("0xe17530f25d34095881e24298257542d3cc19174bfcfd461b35555d6fadb854cc"): true, - common.HexToHash("0x034627ea13d5ae6f854ec3e195dcad7936c374a9e8488168ce85cf726638fece"): true, - common.HexToHash("0xdc72db86d5d0bdb79bbf74bd1b79df06ba95b8cfe27e3d68cf9383edd56ce0e8"): true, - common.HexToHash("0xd7576c0b236a48f13aa29b46ec64867b865203315483659b2fd9f60f82c77813"): true, - common.HexToHash("0xbb2b5db37a162d2115351bbee7f443b6e3ace397a6cf90fb195fe5b6444bf732"): true, - common.HexToHash("0xc8405bdb6296520d15ebde9c4444a0bdb04b6ff32ec3b6bccd03ef2ab950b480"): true, - common.HexToHash("0x2108e106044088a7722c16817df6e18c1ed63ae3fe05b96fe4f33f1641e05693"): true, - common.HexToHash("0xd9a53a3811ccdf4b37203a81d536e232a6bf3bf1ce708f6c4e5f044d1dee87a5"): true, - common.HexToHash("0xba09b32bcc0022a3fcca8cbae8f7124c4df8d2ace3ecb14cc043b8712ce82aed"): true, - common.HexToHash("0xf601f7915bd392b072f8eb503b23e67c91073c263db8ee84ce82e35727950a8b"): true, - common.HexToHash("0x80c6dc6f89f5ddb749c18b7733e36917f2eddc607e7ef53ea6607a691dd52e19"): true, - common.HexToHash("0x122bbfa355176fd4eb90dcf4b9beacc6e0fccb7a3df3780a5c8f4bff8aa87c0a"): true, - common.HexToHash("0x2c33803551863b7f4378af3c3802808f764adc2d8b4139a3052514be5b27a4a6"): true, - common.HexToHash("0x9f92130dec85455041c4a39265c41983bb457c60671218696f4179ff70058756"): true, - common.HexToHash("0xe6a08499bd5b7cd5558ee1e5f73842d012dd8d73fe9c17510a8861a9fd6437a1"): true, - common.HexToHash("0x6ecb138e574fbd04b743971b7bb768d2b6c7adf9e6c8ad043a30d9bb0e942313"): true, - common.HexToHash("0x3bd0613cdad486df4ebfcb67bda3669f09bd402e6596713cb6205bafd27854ab"): true, - common.HexToHash("0xa74f9f23b1233603c40d0890152b746755fbd445412cfe193463b9993b4dcef8"): true, - common.HexToHash("0x872088698fd4fe39ec037ef862ba757f63235f514cb337031a8bb10703e10c51"): true, - common.HexToHash("0xd7518e0356b994fc3d804f882bffc37822c334f4cc38e2c1af0a099239b5aab5"): true, - common.HexToHash("0x7bbb049d439292d6317243bcf5f1ecd09e05c2abaa2ef412447c75162179065f"): true, - common.HexToHash("0x8c977dbf7fa9d248fe4881ab3dff88c0d4f0e64798d29634b469b4e08e088418"): true, - common.HexToHash("0x30eb12504e2003580f02a2d81901b7ac09bfc04fae6783d0a287458a9766057d"): true, - common.HexToHash("0x3828668735f5718ae7939714e5c45bf2ad03709195c9b01dbdf37d4ea3332330"): true, - common.HexToHash("0x934cfd04adb3b38725e4f5863a691bc303221cf0ce1f59c2d812195e2b4819e2"): true, - common.HexToHash("0x299d7ed7180c1c4863b4f61bd6b193f36962d8bf36d1282f041c5082682eaec9"): true, - common.HexToHash("0x533856f95964fc04b7b15b204ac724dd53ad5156ba60a09a0a7bfe5f7f4ad835"): true, - common.HexToHash("0x75570ff0c0ecb3549dc135de76cfa56a26ace0a553e5dd2197fd95b4dfd04331"): true, - common.HexToHash("0xc2f135ecb591a3df13edb9da5cff1389dea6b745c14382b2329ef8a78aaaf7bf"): true, - common.HexToHash("0x33344544306285b5b03848fd6e27107ce833b830b4401f8db555501bf6ef50f6"): true, - common.HexToHash("0x7ab4a4ff0bf3d90d9b75c3e5406e2332f333b17e62538423540a7dda4e8774cd"): true, - common.HexToHash("0x028f3fa87b486f1fb8d7c743a03ef43f5677a24f4e0dd4ab42e0db5ad505456f"): true, - common.HexToHash("0xef9c472be09077cc1553c1be23470d41ebd88e3b94c570e9c4904a73f3fa06d9"): true, - common.HexToHash("0xdbca07f400ffcf041cf0047dfd055ed38d138943de27f611e09cea5c6d096f4c"): true, - common.HexToHash("0x6a1c60d47a421da92d3f50e122a30d0bbf8541413ef0588d9588bd6c05c22c7d"): true, - common.HexToHash("0x3e169d472d466b68a66cbef70c9389b40866cea4c25b6e69d111ac4bff537d0e"): true, - common.HexToHash("0x2dd876d480e16dc76d473f768e45fad7b1a1584c08259818478cae07ebe01609"): true, - common.HexToHash("0xe36eec0530636793354dfdbd55799d266e9e3c7f8bbe6c0649e03295a6e64fa6"): true, - common.HexToHash("0xc44101233db98528830387bdf15d064002f58f9cf2fc984c69ac73fda3bdfa2f"): true, - common.HexToHash("0x1c8bc39be8945f363dfdbcf70cd8479d2dccd08ade0bed32d6a6638cd92b4d3d"): true, - common.HexToHash("0xeb6a1e12149e1b5b822bcec703f475fc0e19d0bbcafbd8699e17486f502ef24f"): true, - common.HexToHash("0x22ab3048dbdbdd3f5278bc6c511639dd010ebb07ace60d60c146d6044e639397"): true, - common.HexToHash("0xbda73ba256d8c66e2223a9995c99610e1098096ece94d8698cfa2dfca6bed491"): true, - common.HexToHash("0xa125d12a349847587c9b6381afc5fa970a227006795f77ee0153722221e804d0"): true, - common.HexToHash("0xa330056d9c88e5f19206d90cc8fa403074cd02dd8cac4f62bb306a45fb359b7c"): true, - common.HexToHash("0x38bbe56dd27bca5e5aaf3a38911fdb958f21a72a2644bb817ac54c2897595af1"): true, - common.HexToHash("0x52cd1512023dcbdf14ef56ce0f1189bfdae29eb411fcf2b8d191e5d8b8116da3"): true, - common.HexToHash("0xd28a7456c6515e5da434c8e85ca39b85b27dc2179a6d542f8ed830b06dda61fc"): true, - common.HexToHash("0x8e784b6287f75ff2484580c9c568ddf7d12d76d6965002c5fb1db525ba753589"): true, - common.HexToHash("0xeb257b4344c9a3d607179cd5618447e50010c54a056cc4c9ea6e81459359c36d"): true, - common.HexToHash("0x1020925e95425583552e59b3390623b50985d3fd6676c96d3b9d0c7f1015d27d"): true, - common.HexToHash("0xf2cfbd83718664ce0ccf189aced3a64013a466ccd4fca175d323f840b1733d4b"): true, - common.HexToHash("0xfd048e5652487adf2d971ef17d44e292434ef94fc4a8df43db96b78a7205f18e"): true, - common.HexToHash("0x02cad3b63e2e3097c42a6798d9332c92ed0e2f03a7498d5dd9bf75e81bee5b46"): true, - common.HexToHash("0xf6558ec6b46e92acbfd39f580be16308da17206c432ea8933e06ded86f5a06f7"): true, - common.HexToHash("0x1cae70048830d0895b81fb726a51e2cb26f4bb8cffc010d3e2907a76e1d74939"): true, - common.HexToHash("0xb875a6e243c602525ee49c862d73316a848b3e0c266eb230aae6a556798195f8"): true, - common.HexToHash("0x9e439e3ba9318ddd62db03d9fbbde756268b778c87177fbb623e14649783b83b"): true, - common.HexToHash("0x5781098699097e74535ee14610c6f4f09922a064611fddea8cb43a2da0deab93"): true, - common.HexToHash("0x5d5bbf7440624a9c74975f28d070eba759848e7d2533c5440f656695fa368348"): true, - common.HexToHash("0x40b978e03bb23cd0e79a228d39947b6a623cbdf09308bd30affdf7c4194b43d3"): true, - common.HexToHash("0xad60688428c596396b05d31ffbc449cf1be49efd31384805b0c6cb5d8fa1e233"): true, - common.HexToHash("0x786cff6f605070e6e54757cef896c27d94e71244d7319c642f9f7dd131eebc47"): true, - common.HexToHash("0x0053f85df9d53cfc5f0a59f8763090349c54b420a808ef4b57d034747d355b21"): true, - common.HexToHash("0x768c72ad2bf55337728cdfc49c8b7a352862b62dc7de2f9dc98ee9654e4492da"): true, - common.HexToHash("0xdbc28cb6502902f37f3796dbad16b10fdefd567d9a4fcf8d17e6c3052acf38ea"): true, - common.HexToHash("0x28c6a944507221aac1dd1e87c125ac3e89e16278b3a9aef94d79aa4a6c2f88f7"): true, - common.HexToHash("0xf35c76b816f67c058f2132c9ac11b07ba82e70a24e287b399cd3c498f95c32d3"): true, - common.HexToHash("0x829c1b5f7b180e11dd0848d75be7adc83cd44452a9237f880733f395d71ef73a"): true, - common.HexToHash("0xd44d785251d9e05500ec9d46cae810b39a8e0c012c2fdc64afb8839f5ef07b59"): true, - common.HexToHash("0xbbda71eb244805658e101411838c3bf16f4783c3f2008928628f9ef7963a1926"): true, - common.HexToHash("0x3128b851dd5506472e273cf1d201e2e1d28b0948e7ede841d05d1b1201b9bb5f"): true, - common.HexToHash("0xf3eced4675fbf517493ce52588a8aef4692cafec957659f60fbe8642ab7a052d"): true, - common.HexToHash("0xd92c8075de456c11793a6e1cf51a3288cfe705dd73e0a1dc20994aa506f87a22"): true, - common.HexToHash("0xf940fdaae983fc57c8337415efcf0b77b91e21798e1e6d30344f9af3bb2f6ef3"): true, - common.HexToHash("0x160106afbb5adc6d29dc3017a2f1942aa3c02859b61b1f72a0c63725f3dab05f"): true, - common.HexToHash("0xe784e1a63212a3e8c7e0aab6e5baafe68dd11d0eeb62dbfd1f9e28d5509acbe3"): true, - common.HexToHash("0x7710d361d215a064c94ef59c4c89ebbcf9af087bc714c373436cf38bbdcc03f4"): true, - common.HexToHash("0xd0b23067ad9d8555594988125842187392db5ee8c60776e8ff8a47aeed2aa679"): true, - common.HexToHash("0x8b0c9310d8887916d42d55de23152fadf050fba9ebe963a70d001dbfe6ecda31"): true, - common.HexToHash("0x07f747786c025a76eca5efb9144b5b33de5ee2c0fdeecf957bc6fdabbc02fea1"): true, - common.HexToHash("0x5b55a434eaf1124cbd2fae23e713c15b6c8d44f28ab17ae1e1537677d764246a"): true, - common.HexToHash("0x6558e5ff27309d7e8327ef75af8bac426615f81d69b10f83b72c292b1c4541ec"): true, - common.HexToHash("0x49601d7b36efaa3e7e3e93985b3ce5781491d6b605432ee1acd5aa6a25452c39"): true, - common.HexToHash("0xcfc123cc708dca853258b0c10f61ca40e739a284eb5932cd142b2d60e117dcd7"): true, - common.HexToHash("0xf8fdb7c1c6f461fa7b3a6e7a15a61fc0489b678a81f418b311b9c22ef9e65f71"): true, - common.HexToHash("0x17a9ca8e2d333fae0b8318aa93dcf159a9d358d6987044f7aa757e2a0b742613"): true, - common.HexToHash("0x4fc68cdd3a3d8b1d616d2f2869a7337650e53a45da8042a715a8c77d792879f0"): true, - common.HexToHash("0xf61b096ac1b0a0a43270cf98fce8282a5fc2de10dad34d5830af11b10d93430e"): true, - common.HexToHash("0x684b713fa7b6bfc7ed4522d70ddd0d038c0cbf5aec9a7bc8d4747769c63b941e"): true, - common.HexToHash("0x6e4ffecafbf425c652c87702440428d9f1d00104174e2adf27f7209fe03868a5"): true, - common.HexToHash("0xe53ebc3129fb009222a4062cf21c6cb4c1768036ce303fdb005b4b073fd8b866"): true, - common.HexToHash("0xdffc0d9db0ba205d43a998ed687e7454d710690b7df52c8fa10c0b891e4e631c"): true, - common.HexToHash("0x82aef69cb8e404afb0a8b85b51ec96c470bdd4668bc544b76b47bf69a1df2441"): true, - common.HexToHash("0x714a474edffa752cca4eb26b64e1d210361b1ff33999bc92459e70928055cb35"): true, - common.HexToHash("0xe080883addb541adb50f80466b32ce5034769396ae8e137758e971c9074db53a"): true, - common.HexToHash("0xb012da67c8c0e30cb8172ce7b0846beebe75b4b4671f8cd770387e5059e60d95"): true, - common.HexToHash("0x2215943a94dce03639e9cfa345dfeb80258b95628a9a2d6c805605746fb21284"): true, - common.HexToHash("0x4706bbd33bfedcfcee8770615977c7043a607f1a6708b4b34d7241356a50fa97"): true, - common.HexToHash("0x849b32eae449645aecb62cd61d69e3945fdfd3d73ab813e257ab9bba36853c04"): true, - common.HexToHash("0xef1afedfa9f2af2a2fd88ff439daa2e8bcf3d3b36de01b1919454020b096307c"): true, - common.HexToHash("0x6a6465190e8ff72ccdb8fc46d1dfbcb0acf94ebc4b5db9da832994a68b9a95e9"): true, - common.HexToHash("0x590de006c27a8560705bc196b615a4231a6078e1c254ac48e82c52fa36154f72"): true, - common.HexToHash("0xb755833102c106de904d9a681b92f3b4fe6f834aae1d565ee2c5de3dbfc445d5"): true, - common.HexToHash("0xc54cf57d6578e931e62c2b41db9a0cb065b538e116b74d9b424ffc9f662c9c01"): true, - common.HexToHash("0xd10ed1c47a66bef5da52f5a137375e3d2c235805cacbdf12bb8ba6278b671404"): true, - common.HexToHash("0xd491040b2e68e8da81e2e4b815235f8bbe77e1473a15804a84ecb513add326ef"): true, - common.HexToHash("0x16693db7e63d2f40eee743099937cbb6c612d832912c19ac35e1d50039bd4ffd"): true, - common.HexToHash("0xc907ae4f292ffd98e5cdfd4f503a1e703e4ba3c39dda40f2b6b518513f35da3d"): true, - common.HexToHash("0x9b453b78f017d61c55aa80e51a2d56dde5b17cdaedbaa79b526f85c9db4b4350"): true, - common.HexToHash("0x8c746235edf3c67652353f1e9f4380cfad548f03ce9e796a28c32afcf227edd5"): true, - common.HexToHash("0xf9aee42b836c609d28c724e42931d28e09c24b6054e39195eac705f9377a241a"): true, - common.HexToHash("0xe679d281b912024e4b69320ded67ff69e234850206215518159aed13ef1aafd7"): true, - common.HexToHash("0x876f5fdfca06bc7d7e9471b07b035ce6556c13e5077d4366e1b704fa9366341e"): true, - common.HexToHash("0xac463a714c493b195112722b24673836fe6e99dc0dfc063e0cbb9bf7fedd56b9"): true, - common.HexToHash("0x0ea138137865dc1e45845df9cbe9e634d080fa4640d183113b43f204db4d1f37"): true, - common.HexToHash("0x3bb1ace19790e53f8dc754534684af25b1afd54faa4b0329f5b9d42743b7a6aa"): true, - common.HexToHash("0x327673f2dc0c4765bb3ea2e24aa455ac45e46fa42e32acdc0c0cd1db548201e0"): true, - common.HexToHash("0x97a49c4802fbfdaf128708722169130562a9e4cabc158b9610e6d33ee94e83c4"): true, - common.HexToHash("0x64af0b81703691b0dc27047ebc961f351c258d5f544e7f0f807338d7e1649cc0"): true, - common.HexToHash("0xbb9bdc331513867d5a17634f0a2e51891d7498063b185bf4c0cad91caf2234e7"): true, - common.HexToHash("0xe48d836b3b0bfaa5063bfca2566ad02f9e5e38468e5de5ca30e8f411026b2898"): true, - common.HexToHash("0xe9108eac88bab79bc299cd6bfabef3d0a0d378c0d2f7a147d85a9a7c1671b125"): true, - common.HexToHash("0xf0b5fea55d74a76c0984df6f630d68490f3372688b5334233419e21277612719"): true, - common.HexToHash("0x6076abf602ed6dfa4c89c5e0f98c20cc8ce1a027cf7bc1227ae764e7eb49d75d"): true, - common.HexToHash("0xf5a17efcbb01a5557cb1131d6453498c696b70f2ba46f12ac30017b50cc9529d"): true, - common.HexToHash("0xdf22d04931d259fee6d762485a81ae4713aba3c574f374b9604d9129a7a73e70"): true, - common.HexToHash("0x61631d946892e3ff9a1103be0effd72904c276b232d800cea1aab11c20fe3691"): true, - common.HexToHash("0xf8a5cff64e5dfaa0b66511e70e4050e00e47b7dcef217b0a6909ea571a6b7bf4"): true, - common.HexToHash("0x7a6f45ef12343e4d160bb0d9112b712daac4de1b25b85be2d2bdbf918690da32"): true, - common.HexToHash("0x920eee1990ea228fd94a9cc88c994856132565c66e8c1503a9ee987e5bf12473"): true, - common.HexToHash("0xb86049f4513552bae2433173421b519f512b89fbfd2f24fe9de8832dcca7a939"): true, - common.HexToHash("0xcd9c5d307dc50dfaaaa8a2780fb56df567331d80e4209d63129302efcdce3250"): true, - common.HexToHash("0xde2ab1d3c3864e8acbee59fa07e5df029459b596c06c5ab734707e019d805993"): true, - common.HexToHash("0xe1fc308af2387d7014adb55759ba9ce5b3c4fc2682bb80f3fd4182d00df05ac0"): true, - common.HexToHash("0xa6d8b553b8d431510f3a9d3a6198d25fb7b8747792d51b96dbea248c731a8292"): true, - common.HexToHash("0x83fae404ee81342b380d5da9289fa256fb4897e0b3aa235e87771802c1d88f44"): true, - common.HexToHash("0x9cbba5ac1278c71fe6174be71da455922366b575128ffb562629e3fc7a4e370b"): true, - common.HexToHash("0x225fecd126fd60ce1c83f573849775666378bd6903398d0ab300e2f02d05a436"): true, - common.HexToHash("0x926fe12200e0d7dca0685f6e91e8cbfb24b58226de613d1fc79e73def52effe3"): true, - common.HexToHash("0x37f0ca9c84aff3225ff66c703e669b4ab4038c88d3d15682966a091957fc366d"): true, - common.HexToHash("0xc14d0804e17a45f42e55c786a19d0c07fb84b1735c907c239104ce8ae712905e"): true, - common.HexToHash("0x3d9c09533ea7de9517b98fc7345564b29954f0c35a783489005fbe5274cfb4bc"): true, - common.HexToHash("0x095e26ebea83462c6e673d3d0a9fdf4341d57c1631d34df781d2753b84b1911d"): true, - common.HexToHash("0x8fe3d0f57b3ae2780a9f14000ee4d922997c01b8596456b409e2fbae00a872a4"): true, - common.HexToHash("0x02ce0b6662a04e9d28dea84ab18b5326cd84f5a22ca9f34eb90fb493e9458ada"): true, - common.HexToHash("0x55e2b7dd5d135c3383bac1f5c399cc48f5dcced87193bb0f0d24326936debd66"): true, - common.HexToHash("0x21852e918fd9881ff0fd3a5c09b3ae1aa08de7d9ade9a8939d6024e91b97f780"): true, - common.HexToHash("0x33035b2238d9077caa219959d0ce122218197dd07c54c6fc90490f3bb6143828"): true, - common.HexToHash("0x85b36905c3b2bdf18d52ce67d75a6468f027f569302c1f12b62bc92384a58ece"): true, - common.HexToHash("0x0f6a61c9532730ed044ec33600650c5f7545605e52ecaa029f66d1bd168ca44e"): true, - common.HexToHash("0x5348397cd816d8e5a8a521937c0f567a19c4547662e3bf6b378e534dd5323ad1"): true, - common.HexToHash("0x0ba479d7d95d99dd27d9717a83587f6e4c24e827d591c8e1de431d2d3e07d02e"): true, - common.HexToHash("0x54de461ebabe6716784e00a263bc9a6faadbc4946a11b8e5862eba2c478302c0"): true, - common.HexToHash("0x5c73b0d81e0f274ac60f8a2a8bcecdfdbf14b5f1acfd5d73782913014c4e2053"): true, - common.HexToHash("0x220ee38a62f4bf280ceef30fcacf302126e4f29e65af3ee292b528bce5a74e98"): true, - common.HexToHash("0x4da8c39c6dd820e9228b161a7813cb6c0e89feffe8b8905044a48e6df213d420"): true, - common.HexToHash("0x7104a2dcc3400686bd8d3d452802f3c351fe355d045f9cd7ec159c74ef490852"): true, - common.HexToHash("0x8404ace5da8e9be0dae99b509161ca7fcaae7ca18a544ed8015612023e6d8ef3"): true, - common.HexToHash("0x413b8863964ecbc13639fa25c5122baa792a03b52315d0203035d2a3c4c4cb86"): true, - common.HexToHash("0xb098af50e64c550b6273bcfd2adccc76e892772134ace327ab373c98be5de40b"): true, - common.HexToHash("0xcfe3a5c0bca721aa32085adf2184cab18188237a5762d0ba49dbd7ca8d969d15"): true, - common.HexToHash("0x061ed458d96cbcbc12c4644a2cc9b979889047f5ca28709dde14f977e6dea4f2"): true, - common.HexToHash("0xfa3a441d56892b3c69523f4372628e4ea0849a4971914df1911c0544ba9f423f"): true, - common.HexToHash("0xc015dbd9de24cac3e8aca963f6ce5b7640427a56d23fbd582e6e8c86e0bc11ca"): true, - common.HexToHash("0x89d6e9cff8783f4ead8d6c1a5c76833f36d416cf032fe788c544a36c8c4543e8"): true, - common.HexToHash("0x69c14976090d04ca8bb0dfe605ebd29c4f67a28025eba00a319e530a9d9ec971"): true, - common.HexToHash("0x706505c8ae4597970b601a539fb622021a29fb01ce5aaae32b57da8f1b00e1b8"): true, - common.HexToHash("0x6624209c20837d3149d923a9b93b391e762ffee0dbc15d08b9fac8be4c1ce38a"): true, - common.HexToHash("0x968859397b819cd637da66fc1e9324d0e3beefcda367b2301dd6e1c2177e6c82"): true, - common.HexToHash("0x5b9498d685c4ef372db140ba2a72d6c8a87fce6c3cd427608a5d29d20960e90c"): true, - common.HexToHash("0x3865cb74df32f04b47c45460b3152053e9e3956b51a5df4ea1eccd1e7d17cf79"): true, - common.HexToHash("0x55f3ae17c91f0977e5f8246451d5ff31e5e7f9670244837b46e1c5ad68033ab1"): true, - common.HexToHash("0x19d3f1bc6517d0c6de6a218eaad17f079c6faa72c0736640bdb82755ded10446"): true, - common.HexToHash("0xbbb641c0485853ac1832e0a282ed6dddb798deac1325a484ea303f7cc3e0ae88"): true, - common.HexToHash("0x81dd85157c40bf77692b4706b940f23113790c52d5d55f373593335eb736c578"): true, - common.HexToHash("0x36aa99f22feb3f12c7ce0b50cc3cb2acc8659314eee0615e946cffc7e308cbec"): true, - common.HexToHash("0xfb756941d04adad1b03f4bd476b505257add2ef112dfaaada4b1718e171f392c"): true, - common.HexToHash("0x85fa6135f41e8180a536afb6157990c9415144780a071b60465713bcf350daeb"): true, - common.HexToHash("0xf38ab1c0feb7cd807322b2a56381eae526cb2452d492c8bd49ae1163b928a74f"): true, - common.HexToHash("0x50a3b8ffac5fb5227c517b0f2225c5020c0df8cd8bcb8b5434d68ead72d69bf9"): true, - common.HexToHash("0x0c493f7e29280101396fb5cfdaea5e75407ca0b81078287c13b7ab8f2fb1a512"): true, - common.HexToHash("0xff1656d0d758dc28c2bfe46e42b56f4cf03684900cf1bebc0cc3fa2e2b881d91"): true, - common.HexToHash("0xdd41bc92628b673e47c402811083d5dd286dd7751d870713d5f271b235aa67c0"): true, - common.HexToHash("0x8751e9ea611d0cac2cf0a67c1bc282cd0174493cc72aae1ff7935a7b8d23752a"): true, - common.HexToHash("0x36dee5147615f66b77a5c62066abe8139ad1fe87348a3dc8ce75523db2bef3e6"): true, - common.HexToHash("0x11b8486fd4d31e7662a93acd997f3426bfe240b44ca6f0cf043df18a076ef5e7"): true, - common.HexToHash("0x00bc82aa74fe201a94219766a863e9604c86067e450c93a831f5ced73ff6fbe8"): true, - common.HexToHash("0x973e3618a2db3579ae56662708bed4b03bbdddd9ccd8cb8ca985dc11628ff36c"): true, - common.HexToHash("0xece004df3c1cc89258b909415cf9fea96a29605960a89e4d1f68e376519b81e2"): true, - common.HexToHash("0xc48249770a7b833fa4c6819604bafac5edf6d5aa59ce58524514efe8971d8b5b"): true, - common.HexToHash("0xa4080fc79ac8bfcf24bf21a540bec97d119a4a9f42c1054af95ff5cd20f3fbed"): true, - common.HexToHash("0x3a21d2a077107f470ac0d4010edc7c2614dc944839301e5b7b7b752b024db139"): true, - common.HexToHash("0x76012afbabc681c37075f606397f08796db005414e984b5c9f39cf2de7b81186"): true, - common.HexToHash("0xac525927f3bd6b25cef92636e84681adc67f7bf5fa0d309c446dbe9c47964ee9"): true, - common.HexToHash("0x2b8b27efa56750039adc723d9487f1d467b08860b3774fcbd0e7be53fe7a901e"): true, - common.HexToHash("0xc656f18e6aa177839dd8a9fe76059198ee0723fbbbb8239382f6c0693e620ba6"): true, - common.HexToHash("0x484e95537f0b84a4ab9ebf93c3f03aa4425ba5542b83cfb8687d3dc375d2fbc8"): true, - common.HexToHash("0x583e6ae584d90af03815ce362c7c93339eb525ac2e9764541f45a0b80bc5cf30"): true, - common.HexToHash("0xea8830ad0665518bab243cd0c17b5a0311fdd3a31113812b5abf9bca2394c104"): true, - common.HexToHash("0x62aecc5b34331f817c59715cf41d88e9d4f17c41757da2c53262448bc50c57e6"): true, - common.HexToHash("0xdf9bbf6f7cdb85f6b95f17da43830074036cddbb6402c69752193dd8ca3e7eb2"): true, - common.HexToHash("0x5f62c81093e0be62bfc7ed30accac2f16379d5db978f67346735aa7e1446d256"): true, - common.HexToHash("0xe1226f32016b0be70aa338622680bb7e2357938999cb4fffe8a57e0fa3e87fd8"): true, - common.HexToHash("0xb38970494ae07e577601229adc3520d7dea2a050094607e2932d2b7bb005e119"): true, - common.HexToHash("0x5254c48e10d99bf188340d126abd14899e2a90c96dd803faf0b529d92f47cd66"): true, - common.HexToHash("0x861c7f12a4ad39353e8ee086fb58a70544f4da286adaa8285b42a3f392a7ba28"): true, - common.HexToHash("0x03fa226ef65ef2e3604959cf3e2dc035b26e1e9cfd0a31053ca2601b03f7dbe5"): true, - common.HexToHash("0xbf767e90c46809a02c00db0e5b09d8712a194ce1f78c80a86822666d8f18a99f"): true, - common.HexToHash("0x0400daa2ff8820f2191bdc5de00a34248815e1375d4367934d7ec33fe5f2e53d"): true, - common.HexToHash("0x1effa7c0ccef56f2aef3d0feb1f5e61dc66b548e65c3fc4b20ea77bba7385d48"): true, - common.HexToHash("0x9b6af0ea3cc176ec02dd01a61286f6f31e5186708b63a4c42b02ea9117f007c4"): true, - common.HexToHash("0xe56e69f270920e6cc4bc93d5f00762b64c0ec3e172c5b1485df48426cf5f7ca6"): true, - common.HexToHash("0xa22d0bd506a530a624134b472473ed9f56e0616fc9949d6feb202fd92e487480"): true, - common.HexToHash("0xf351524815093c3fad60862e0f0678428a1d0c76c812e142959ed7466b555659"): true, - common.HexToHash("0x45573f5ce1156dd59a732af37d27635488d659092ba749a5bc5b84540d1ad5c6"): true, - common.HexToHash("0xc73d59e3848c6678c4b46ba172cfd8b2354be2e2829815c979712c5bcf9a2aeb"): true, - common.HexToHash("0xad7fbc483f0540a25d2fff1d064dbc9c62056c4c4d5853a26243376a747c8ff2"): true, - common.HexToHash("0x61c64343e89c0a3e50fd6391295bca7792116d1070dbadbbd93b093ea9f4a00d"): true, - common.HexToHash("0xb03d00b19439850ab8c547d0b550a5a1723d2bddd34d6315d5d0f14123e52888"): true, - common.HexToHash("0x42ef0e41aa24ed58ce276f4070a5802ce0a405f326c9969d5c066a3258341b7d"): true, - common.HexToHash("0x81d18facd34a9b6b05fee4ee69fa4f377618ab44c5fa84d09cb607dce7bf65e3"): true, - common.HexToHash("0xcee8618e6ecb9e39e189379f3bf6f1835121e65534b863c7cf4d2391c8e770ed"): true, - common.HexToHash("0x4f21f04f19db0f90deb537533a0c12b1e47cc928d23e5ecfe801847d1fbb15dd"): true, - common.HexToHash("0xb43fffaa6837faa5dfc87488c49a592345d520ae420575653e39fea740d15f15"): true, - common.HexToHash("0x2e74486b43248b673a0c87eb443c475759be8b70327b41e83a121c722d25d995"): true, - common.HexToHash("0x579c3672396600c5a3a2dc0878d3d6b0587dcfd8abcdc2f7bdf9ff9ba887e545"): true, - common.HexToHash("0xc23fbc331122a09e89ffa7e0a0461a91ad5edd6223fcfdba3fd24e624688a28d"): true, - common.HexToHash("0x28637d527629b0f9a9dd3fab962a9fd2d347e2687579004153512742e47c19dd"): true, - common.HexToHash("0xd456a8e3546c5d1ff2cd715aaacc44c74eaf740ee5086bbce74194ec92fd52fd"): true, - common.HexToHash("0x34b84ab8b4ff32a78807e0e6a9c77f092b25c801aa8eed3798c38e5fc6db66ff"): true, - common.HexToHash("0x84c867f6ea8f138fb0d7e3025a375a397f446b0fb3b91754cbe4ff311d0564bb"): true, - common.HexToHash("0x33f8323ba69a4eca9d6dde083486fdd37cf19180fbda0bee843c54c903510c9b"): true, - common.HexToHash("0x6d59ce565d40fbd7dbd8db3a4332f9bbb266f370b89d6d0b749bb2d47222fc4f"): true, - common.HexToHash("0x44e4ee931a96270d522dd2da09e93ef92132efc65e52ce4883c23c0a1e339c4e"): true, - common.HexToHash("0x64a75c636d624e9e56f15beb7a50ab55648d0f0a3258c1c34bdd4226ef168292"): true, - common.HexToHash("0x8a2d7c3468c8b8363eb4aca764e12ecdb0e8f84bed5ba5ad3d242b929f7caa9b"): true, - common.HexToHash("0xaf17eb247fe260a2aa3a03a9d99167f7ecfecd6a4be73cc0708a7b32e3e31024"): true, - common.HexToHash("0x5e3ed931e77f735d2491ec26ea1053e9c0e0d07dcba5507174da927155ff8af5"): true, - common.HexToHash("0xd482587cd677552b00bd7a366ff427cd82455eae431521ec646e070d4f40b9ae"): true, - common.HexToHash("0xb98d6ab37028d126d28b1db37b6efbc85480d4e2ce932802867a981c0dfab9fc"): true, - common.HexToHash("0x52f327e4cc48f67df38777820a71ee0bfd1d9dc208b15a86b3f83cfafa750eed"): true, - common.HexToHash("0x2fd9c3eb7c7f661c4b2c606d3bf19c521355512a9fd0196d466f19b72bd97731"): true, - common.HexToHash("0x6f0cc5fc0ce7b519f30770f26e2ddc74c22a06fe7b47e6ebe6bd991cde25096d"): true, - common.HexToHash("0x91f8f3c39ecdd2e5382d0d3248b91b42919a0e81a9e75aaeb5c68a42417fbe0d"): true, - common.HexToHash("0x5435bba9d1d359d1a0d9564c8b7b06582f16f5b0c0e0b5fe2d1be7b43a1180bb"): true, - common.HexToHash("0xa94658325f1e107fb9c743b159ff14542cb39582a8ac0eff0d5f2dde5e607cee"): true, - common.HexToHash("0xfabd51475efdaaaae5b49ee0fe0c16e20a8795d456206b270e0dd2fed4a33023"): true, - common.HexToHash("0xb11d4f73812f6439cdaf0945f979b04fce6969225e299e98aba63fbfe03f0f5c"): true, - common.HexToHash("0x99e3937e65d6ad5e24020fbee502629c44c3e71b8f29736495426d6fdbf22bbe"): true, - common.HexToHash("0x7cab00e0417b2d1d96512f9aec0fb3ec7babf6e0d7354213d8e9be582d7f1358"): true, - common.HexToHash("0x29e60e6239f4b39d0b6dfd386309582c4faa5b48bf2aa240954938fea1409c4b"): true, - common.HexToHash("0x58fb695c3ae06fdf161290b447b7724b754c0fca1258673086279327a8675f67"): true, - common.HexToHash("0x91bbccb7a8337ed6c0c27515b8e4c38318d25b3e2bef55afebbd37fe50c0e45b"): true, - common.HexToHash("0x4c347788306f85cff4c6d6530c9c632e1047a967c1855fe0d0812b4978ab9f96"): true, - common.HexToHash("0x5f785193fe03e9b6b8ffd470335ea6854a2c1325a517a52ce57bbdc3490a0ed1"): true, - common.HexToHash("0x3387ba8e98d2c28752f439f1d90b71b2302e268b9964982704b2a7826d74981d"): true, - common.HexToHash("0x253d4815b58943cd438553f708829a49b454decc787b73590a634a1aff2b4950"): true, - common.HexToHash("0x3c3d05cf119c4252f280e57815de2f649113927416cee0a350a91e33c92bb577"): true, - common.HexToHash("0x7969b36cfc185ef305206dee7f450a50220d9f5b3194f4ea493b9b266848664c"): true, - common.HexToHash("0xdeffa2d21ff96477ccc0f3957227730f86df81f9fa838023151bab40d040faab"): true, - common.HexToHash("0x997918520dfbf126e69cfffd26b89c84217c607f393392d258c014060c52f46a"): true, - common.HexToHash("0x3f54c687eb9517d4e7e831de2aa9d8d6b808b7b64f69498eb5205da717645452"): true, - common.HexToHash("0x5db55793e7a5fd334fc364b3aadf4aff28520e03aa41c1f84c498a2a4ba19390"): true, - common.HexToHash("0xfb2f455a73b5a65aa8bce881730dd79e43e9ac95cfc586a58a2dfa33f1bbce0c"): true, - common.HexToHash("0xec364991112d47227e2a1d47bbc4d3ac36ee397517e6e7e7ab4b289636047283"): true, - common.HexToHash("0x06aad3ddd9b93e456f7b066522580aed44f22d351d415c08a0514631ad34ef74"): true, - common.HexToHash("0x37b4b33060b1dbf703defc079ca1fc22795f9c865019be0a40b3e978409d0902"): true, - common.HexToHash("0x718db9b97a30c5cda22fe4a2767808a373a861f748c0bae93b18da45112f5e8e"): true, - common.HexToHash("0x8626f838bbb31932106b801972a4b71f14487f9b28cf653e16f1e66fe2464051"): true, - common.HexToHash("0x2114a824278b545fc703797b4cada217427082e34e10c21b551803aa17288306"): true, - common.HexToHash("0xb885205ab9176081272dc57fb25ad132f1c39c3c67fe34572ba38f24a4eed077"): true, - common.HexToHash("0xfc05937a2d2f137ac8323a7a85c3f8f176e1543d49b96c5d2d0917a784ecb084"): true, - common.HexToHash("0x7117cd4e2fd3eb954cc037dc7b49605dfcf16f4dbba483d76b854964eab16d94"): true, - common.HexToHash("0x472e30274f2964943ea4eaf82d0ac59c8c0abff31de7c171a74d6f1bdeaef79a"): true, - common.HexToHash("0xdc5c7067c5ab194a4d64d9acae190f22701f6582787bb7c39158b53815711828"): true, - common.HexToHash("0x641eef73c279d23e5946c30e62b2531c1fa9f2dcd06397f4d2e5e4b24cfb59ef"): true, - common.HexToHash("0x6e7f7f290201bdb2de052e51462b462e88eab95ce5b155b5a4958d1bf4837bab"): true, - common.HexToHash("0x0d8bf04eec2ef95a65d5e06b653571d1ee6e1875fc1a1e02d98560e4ec576363"): true, - common.HexToHash("0x56ba02c77504b7b5fc68b089b0fb0140b67c452679b7ab45b1860dc84b44ec99"): true, - common.HexToHash("0x4fdd33252d847c5bd98824c49d47d31cf756d3c9df3b55b28a20c335a624e63b"): true, - common.HexToHash("0x85ee0d444573259a4973f434fb8ef446f3508e8e1e207581b3c044d563ad97f2"): true, - common.HexToHash("0x3dd7224900ec1c83ebf6926e7690a50cabf1472fd5a722ddfba6a47b4a5b386d"): true, - common.HexToHash("0x3f339bf5b30e78166bdd67280d474d5fe44f85f63d4efdbbaae02d53e914f6aa"): true, - common.HexToHash("0xb10160890f18052535e74b2e4733aba35cbdb3119c7053c0307dc70175bb2ef0"): true, - common.HexToHash("0xa3802117bccbd0b2077d65d1d500063fe8a28303da05ee93da996e36cc762b0b"): true, - common.HexToHash("0xcf2592e21627f1625409e23fcbb9697411e4f5f7696b8982e18d4baec09cbc74"): true, - common.HexToHash("0x996ff04213e96f65173c918cd463c5e405503e15482f79519ee0ee31cf40f53b"): true, - common.HexToHash("0x78df2a781181cdf77d68fea9b3788b0202bfe8fa066c7fe5c5a714d5444708dc"): true, - common.HexToHash("0x5b393f00f94476bda4e261c4b984ffb8fa04df99c70c8c75f39391f40c01ffc9"): true, - common.HexToHash("0x484278c6b020cacf8dfdec4796b5cfbfe41a20e8a5c9493c77f6c20b4ebe891d"): true, - common.HexToHash("0xd700bc7a549467ccb38bf7254fff688dd30a30f693b1ab1e2b772d858efc9da7"): true, - common.HexToHash("0x75936fb8224977d399ab7e99e589cc42c518e599428371be1b264cb5d3de11ad"): true, - common.HexToHash("0xcb6e0955e92b730fa21dc75281cf4a400c97508da7af08b491705d8747195e83"): true, - common.HexToHash("0xd54cb1b5cc52bfbce92c03cc7c5c2c53055808898c2f48ab2dbd3100def32883"): true, - common.HexToHash("0x31dfa72356f53ea7cbc8df1bd122e1dfdc8e091bd0ad101841af7623bb7541af"): true, - common.HexToHash("0xdddffb1758c88709f564bcc7c0d95ffe5b0a646e2beca6b6fd6f33887113cb8b"): true, - common.HexToHash("0xecaf3a9a4c2a0c19a6b2fcb8c339168c64959c8c60fb9160b0c9c90da6e7a54f"): true, - common.HexToHash("0x85f4044b5ba4ef8326e7be2ad559b91f5490f05855265954fbf28cc1403200e1"): true, - common.HexToHash("0x812fdadd7df1817477b886c355efa7080e5071aec943e1d0c2f96380d61a9514"): true, - common.HexToHash("0x583de89859e177bba09bf6549ff1894ee6e0d883134fee4da02d33247c10799b"): true, - common.HexToHash("0x2d7e377e5ad05a39046d2cdef3e639eb9b3f03cc9f2614e5dfcf0a79614f37a4"): true, - common.HexToHash("0x7c8935cea73fb305bd94d333e725dd6b7448ffb214b8a10982ca0049f2f3692c"): true, - common.HexToHash("0x4ef4699068755efb6e89d66e5f0db3370c22dacb505612d46e6e89e5a7711f6b"): true, - common.HexToHash("0x4d46ef23760ed76e195a25882a17369432a013b058bb8186585ad2c5cbcf0158"): true, - common.HexToHash("0xa13c895cb1cfca9df4a95532e9bbb305b47e938b43a8a17f474c7334071958c0"): true, - common.HexToHash("0x387988ae7206523689c2698bd071bbbb1dc2ac36e13c63543767e10f647a0524"): true, - common.HexToHash("0xa0f9abc9f5d8f44d0a75ece4e191e9cd931667adbb1b4fd4a47670b31c3ea186"): true, - common.HexToHash("0x798726c2e362dbc44f5b0a00322f87832b4a071a3607de6405c184036affbb8f"): true, - common.HexToHash("0xaeca6d5eec11e616a952b6bf18807d5109950488dfe9d1f8b1a81935d1a830ef"): true, - common.HexToHash("0x9b800a770a1eae5d3d729152555ad135eb621fc65c8a87568d848e0eba315d4c"): true, - common.HexToHash("0xd849901cac304a55cdadbd318f21a4e2789a54da7e18ffd495f74b1bb8f1cedd"): true, - common.HexToHash("0xbc759f89ca9a4e1058f608aa3a280011539feb438e371152b3887264a42f72a7"): true, - common.HexToHash("0x8c687a5b9de903d8b8daa4790c3baa431d92a3a832b7786c191d9a839a24d1a1"): true, - common.HexToHash("0x8d6d58666f5b303c10b8a8db30b192340d27025d90018aec9a8eae675a0ca47d"): true, - common.HexToHash("0xe302470d4045256489d498fa9e46247d52bcfee6823d99ad8dbd7b0b697fd334"): true, - common.HexToHash("0xf2c4b9c6f42e21aaeb88172904d0bc99329bc1487bb3ba1e99578bd101e6ac5f"): true, - common.HexToHash("0x7e58b8a09d3c799e54ba9d5cfc9cbc3bb05b40c6f843d5d0c41fd49ffee0305e"): true, - common.HexToHash("0x855f38969eddc363d6bc5df543df7c2935640bb9204ef70004e06f8975c768bd"): true, - common.HexToHash("0xb0d30a2db77c1c7220f094f80e7a81b1e706c4de58a7d08464c0ad106c3729a9"): true, - common.HexToHash("0x9c20e24e07b4b36aaf1045e6f714908be686beac93410c4536d16d64ee5c8f39"): true, - common.HexToHash("0xe1bfb7a902ab990c612f5ca8a1ed679361193627620ca5a47f701c0763a32963"): true, - common.HexToHash("0xfad6da7c94a27c3121e16baf26b031aa4b826648c014ab8b0fd573f6163d258b"): true, - common.HexToHash("0xda48ca192faca0a2beaea14d389fdbbfd555f02d4fd7156284212ad578e723c8"): true, - common.HexToHash("0xb25667393cc7e32b42f6d79fa0d8ebf0ba75a5d34911cc75f3af7ba34079ed08"): true, - common.HexToHash("0x875b3fe393a16b642b5d81e664f7402cd46a1faf0ab22330d18dc244ee6751b3"): true, - common.HexToHash("0xa526c94cbcf4617e3e0ed678aa98342763ec63b69e6ad83eef2ef43137a4e6da"): true, - common.HexToHash("0x52d2b3ea1411623c16aa4fc082b4c61aecbd918d49a08f71abdfa1f20bb58251"): true, - common.HexToHash("0x265ce7118a2b27d96f5121ab12ace2cba3e71d050e244a339ea90c323e2ff23c"): true, - common.HexToHash("0xc5b98117ac5eee875263913409e74f3cb69b13aa1313c3e0bb425edfd7cc5401"): true, - common.HexToHash("0x04bd5d1c033a1f8b0bbcd0f226154de16cead3ba1c66eba13f78314fc8537e20"): true, - common.HexToHash("0x3c5b8b440e24a10daf09c706458d1be8dca7d519388630b54529c27264f092be"): true, - common.HexToHash("0x9a5565c3b19d398fe3ad1f6b9b394a5bfa8e0fb85678812debf9b5b2353f2bde"): true, - common.HexToHash("0x359c018d9f3ed1e7b539cdea48a278fcc5b3a45d5b8f747f992fae13f5e7a0c8"): true, - common.HexToHash("0xde136f4b9b87588ec07f779e6ca1f0ef6f2ac9e6c1951cc9e1529ff8bc7707b7"): true, - common.HexToHash("0xadd6b33daa2acffb92656a680733f9c17111afcaf3dee596f9a554a2dabc087c"): true, - common.HexToHash("0xb2b2b929deb837286328113f74e6402d122b634a4c6ec4cb266d62b8011c6f4c"): true, - common.HexToHash("0x932b555fc6a125318b5706706cf3d14a29996ed7e67dd1fa52d64a5de3d3098a"): true, - common.HexToHash("0x4314c1c32d1ff52faeb4a95ab1366e710212197a69ee1a22606fd51cea040b0e"): true, - common.HexToHash("0x12c21adedce209c13b5a5bc3075ed774bfba341538dee2d6b045b0db11d9d3c6"): true, - common.HexToHash("0x2efab1e44c0fb64db029376f6252c3a9bb11e2bfa9c7c534767f3ad740b69bc4"): true, - common.HexToHash("0x137ca702d10effd8ffbaa43f864b5c27eeb362a88b3a77333c323db8e04eb74b"): true, - common.HexToHash("0xaae6604d43405d7663cd182540e35a925308195dbf480408169a954bcde91d72"): true, - common.HexToHash("0xc2d9dbf1f52a8da25357bed8ba89a95832916b8187fea3c8d5241d632226f9b6"): true, - common.HexToHash("0x418af742372d2916d447b6e3433281e269700a6bc6a4a1448ffa1e61e51c45d3"): true, - common.HexToHash("0x9ac66ab8f6b1fea74710a992101423bc84ef3e5d18fdd661a5cec57a131803de"): true, - common.HexToHash("0xb442db66977d3b0564174a54d893d406f90da0bfa283c64d970fb7df0731ed76"): true, - common.HexToHash("0x53b9155b32968438062ed4e40f22c06d33067f8b8a3516f811de2b9a6ac12616"): true, - common.HexToHash("0x67d85994762b712b2d06543ab7531ea39c47f318245eb297e85f5c11420c0a58"): true, - common.HexToHash("0xb0e83651e11cd13ea4df8a77aa795eb05027ce3a31448f3b685b9ae617273d47"): true, - common.HexToHash("0xf699d0b72db0f5a522b0408fa5f9dcedea62b7630d911bc31530219f37f71e4b"): true, - common.HexToHash("0x4e62e2ee3324d45cedba71fb576d51b9b82068dc1a8da2c53ef0250b5715430b"): true, - common.HexToHash("0xf787ba279d80be3756985ade19d7d4c748ab1ecba80ba5ecd6edf4ca27a03cf8"): true, - common.HexToHash("0x86b1ac482630c0ca4ed57976159de4cbec85933e707815c242af3efa122e13dc"): true, - common.HexToHash("0x780366002ec83c29c64841c753986ef67cd234e8359ad1c5113dd82aaa517aa7"): true, - common.HexToHash("0x550ea23779ae60a19f390548b67ba126b882402ea88835b53140af4c29d502b0"): true, - common.HexToHash("0x3dce8491854a074d2715f7f8faba6f5e39d3af6ba273e4bd2d049280bb0056fe"): true, - common.HexToHash("0x6558445725bd0ce92ae73a1069f836a65170291e66cdb14167bfef67fab5a167"): true, - common.HexToHash("0xf17ee2106f527eae01d3588498837f6b1ee8a65bfa267fec157efc52c4ad9e7b"): true, - common.HexToHash("0x0e08cabc9c61ff8f3be128f306c08c68b13fe72e47dd19d8063709dbff663e82"): true, - common.HexToHash("0x8154e996474e93910f09f0a0aa59ec5ef08c5eb7befab447d07d5ce8b54ccc92"): true, - common.HexToHash("0x01bdcdf5d5e087e9143b1d6b3729b81017ccb84a52e1011a6dcfc592bf72fa15"): true, - common.HexToHash("0x17d2a04b2da79177883527dd25c4a4d701af8320dd9cf54597a268e5048bdd3c"): true, - common.HexToHash("0x805888adb44790a8dcdcdd89b054269285def112e60cc9037b4684c6b3a00c47"): true, - common.HexToHash("0x4371a4b1300d7c68b5085239e9451bd10cc5500bd7aaeb94a007ca5c4952bcc7"): true, - common.HexToHash("0x92fa1211e003a7e7ad98408c49f1348ab6e12d308665ee3b28d2494d21ab584d"): true, - common.HexToHash("0xaf9b41e92fd5ba32f5d6031a080379cfc35e5f016ed98015e211efb1984c3058"): true, - common.HexToHash("0xbcccb632f392adae43095e30ed2c17fd99ccb53198c122e9471029f35f305f9d"): true, - common.HexToHash("0xd27822f4c866ac5b3bba2d30d1cf73149d9de4922670f4417cc46a2a02c08c6e"): true, - common.HexToHash("0xabb0ba038b57cb91411bc40cd9e1498b4bd6f36bcfe94fa35d6d52b63a561317"): true, - common.HexToHash("0xb80070505574b0b77d87332a0a8ab3c637928493023a2ad3b4b1c39d4d04e599"): true, - common.HexToHash("0x7a804a45f83cbd4a0093695b58083669aab2bee150d3b1c664609f989175cfe7"): true, - common.HexToHash("0xe15346e6fa2c1d40aaec0ed758f5b12313e707c59158fd96fd282d87aaff5b1a"): true, - common.HexToHash("0x8c49f52e99ac9d8a7f0a349a5acec4ccfdb7b88f3ab794d9f535b4364d912220"): true, - common.HexToHash("0x993c1030e5be7de5d22162e587700c61cd29b2dd75116347f422a4d99a41b091"): true, - common.HexToHash("0xcb08804badbd8df592d3e40031da4078ba667ca912d4e1c92c4c8a6682e32385"): true, - common.HexToHash("0xec424301fbc70eb10a49f3b618a988f73f3a9999da008ff03fb769e4ccc749a4"): true, - common.HexToHash("0x1312a431afbaabb8bd7fc5fbb8bef90646291e5c5788fe3ebe79ca4fcfd25dc7"): true, - common.HexToHash("0xf43f9d53d6c5de209fe08af62ebdc64e8c0700e9c8859710a66ec6b741b1df4f"): true, - common.HexToHash("0xc2c2f2a40e53c6ec53a0892b10d4ed48d2650cf6f998aa4305369e8ba7a1a2b6"): true, - common.HexToHash("0x4628e2f32050240ef86fae0093f09bd83dc112e947229efa159fc0be23c5f06a"): true, - common.HexToHash("0x225e3d44e6ea78d600c36261fa1ec2ab845d4a221783172a5f6f7531af2fb501"): true, - common.HexToHash("0x981a1cd7bf86c72dd4f0dec044e242104711faeae41c182be70ae9d9e27ef865"): true, - common.HexToHash("0x75ca5b37a1a1016bc73915fbe04675aa777a8b1a477190d0764822cb168bd622"): true, - common.HexToHash("0x3d602766875c0f000f951003f7a6d4884bd87056741aeb1b0b68d7cc217012d0"): true, - common.HexToHash("0x609e1b9d9a7b7ef8cf0e6c760e423d1eb48591591b1c72e8c7e1664e325b1927"): true, - common.HexToHash("0xe0b76e56630c5863ca66c11f910627a8779ff89294396645f95c0eecaaba79d0"): true, - common.HexToHash("0x3b077cd652dd887638e9b8ad1c9466a1f99fde63b88f986297b16ee235633665"): true, - common.HexToHash("0x788e87e56e7453b5709ad885f4eaa50578f3c5efb14ca2d26e090919a4007cb2"): true, - common.HexToHash("0xb73f0d7a23ba1ef137913a72d097c6d0f9801660fa41595b718bb2ebb46010d0"): true, - common.HexToHash("0x7133463cd3f384a8238413361ca66e4c2bc8bea43cdf55462a41240497f0b4ba"): true, - common.HexToHash("0x33703c48c3fe565b759914c408dba695219827c37367c9cec456280240bceb68"): true, - common.HexToHash("0x8f644440bb09bfb0c922c8088463cb3cc2bf2c2386336e440e91a10b22a3bf96"): true, - common.HexToHash("0xa711b4b800d2b602abbae53e3c546f3abbf8b643b9c925ee49a55781e9c6665a"): true, - common.HexToHash("0xde12f552fa393a4808929c238f8343b03bbbbc170df9fe65898b55a71cf40542"): true, - common.HexToHash("0xcc997b0f5d7d80c8fdd66d061b56640b43d8837380b69e3a9c7984993c96aaea"): true, - common.HexToHash("0x5dc997d0767d26710489c5b0b9fe7ba89277fa80a5159dd304d0cbd22da23534"): true, - common.HexToHash("0xa9b110368a6052c04b8b429eb2583ffd4f1225db02268bd721a988a771cbf828"): true, - common.HexToHash("0x9400f0960b7dbbc0ef0cc2a9db4e8b1f2344d38b116ded1d59da11021d365cf5"): true, - common.HexToHash("0x1de212913d6a04a07264575ec4a549064b4655048dcc128da74e5f3a2831ed87"): true, - common.HexToHash("0xfd2eedc401efaa73614b8ef7919dcbaa9c5c5528cf865f00216bd551c7c37399"): true, - common.HexToHash("0xa7d47effb340f88da8e4aad8d3fdbaaa94395fbf2924a948627af790d44ca68b"): true, - common.HexToHash("0xaf9fa8870bbdd1d7256895c77fa48b7cc0cda9f9acce2bd8c885feabc26d845d"): true, - common.HexToHash("0xafb790ce67678de09e862a397c44968462ec71eaecdaa60507b85b72a8185366"): true, - common.HexToHash("0xde810c0ae8640a33662a61a065dfc5d09324ac303e82188f18f832af409bb1a0"): true, - common.HexToHash("0x6cac32d5bd46bea1947da0e083b34df2e399dc8020570fd753562b93973c4f53"): true, - common.HexToHash("0x336fd29101a80b0ab1c1acaec7915280f2077a6d01f5ee733047cc26378f1d9e"): true, - common.HexToHash("0xa2a957586e17c4270359d052016eaaa16cb502d5b8be5313ba3e9897406a9fff"): true, - common.HexToHash("0x50ef3c613040e75c8308ee71babcfb3357a701a33c7fc12e69077fd0988769d6"): true, - common.HexToHash("0xd827fd0964908d9f22b502a25f56c72e232cc1afa4dc24ef8763cc0e743d9a16"): true, - common.HexToHash("0xe95f2cc79f03165faa4f689e5fac8a90a1529646459d4df0f4876b40c8621240"): true, - common.HexToHash("0xb16f500a65cfc1f59f58028319ed7b8c3cb6111cf7637e4429bdbcc9b2e470fd"): true, - common.HexToHash("0x0d4fc1bfa7ee5ddb45337a947f3a2300a96e4e2cbfe6f6f7dec1eadce929c1da"): true, - common.HexToHash("0xa27e2b1d2a88f5b7354a1b8ff1a55a7099449a3b97cd3c955f5bd640feb2b9c7"): true, - common.HexToHash("0xb008cd27b4c447318084a658cd7e08ba60d2388d8c3c36f2d1f3f36a9fde5621"): true, - common.HexToHash("0xaa10e17298d63ba4d35b3c6a9e3fed7c1a71b5e30049cc640b78d756144da1bf"): true, - common.HexToHash("0x93b1d2967ce69d8bdcd038df2a5837b3fe3e198a3f2e8d0138f3cd425c135ee1"): true, - common.HexToHash("0xc40ff663f9814581a4dc6fa87ced19f649db3eb9920669964814422c8d955ea7"): true, - common.HexToHash("0x88c993532b8ed99b462d1d8d89717ed0b7f8836d0e9f7615c3ec2f88644b336a"): true, - common.HexToHash("0x17207e874c61c4708fdbdc6063aca3d6e68534dfdf6ca0265c41cd2e1d21ad6a"): true, - common.HexToHash("0x51273de9b8f190452010e71003348241a9d136defe8db4b082a7af5f281b9f64"): true, - common.HexToHash("0x39a3279819ecf6b0baa858bca82379dfa8c797321f6bb2fc026291fd18de3acb"): true, - common.HexToHash("0x564cd54e54a5ea8c9bc63024f1da2f60bc4c5603ed9da6d69251c1b358f5a7e2"): true, - common.HexToHash("0xa64e4870c539859674b5e628ce31edc0c9f28d250eb0eba5b5dc8c1587bd292d"): true, - common.HexToHash("0x7a6e8c5f34cd54745dd759910a590808604f410cd5f07b209a22abd0c6850a6e"): true, - common.HexToHash("0x494e45de5f2fd519813aa76f690e234e1eab27e4657278930af8ba2f37761679"): true, - common.HexToHash("0xa508292da14311d1756be7d27fda6f880edca40f30baa805ec1599711baab9a0"): true, - common.HexToHash("0x8a2eeb423480120d7fd36e7963f7cc2a2d1da1b5262c1227c776cc47c318b553"): true, - common.HexToHash("0x35950f2f6f9c5320f46bbc428b85a2c12b0712038ebdfc7318acd6dead4b7dae"): true, - common.HexToHash("0xb574272734a269c39cfbcecd293fbbb80a33e1974230204333c351c34728c6cc"): true, - common.HexToHash("0xf5dd250306bd9b47cb513a15187e5dd21760fe35b46b041e6427e14f83b81719"): true, - common.HexToHash("0x67d33d1e992a35d0f536d74070b26cfeb0b633a38e86c42bb2b16aaf27023754"): true, - common.HexToHash("0x89d4761e918d71df80105d364e1e8ee48729dd863a5851175be8f0de2bb7b8a0"): true, - common.HexToHash("0x956028f3b193952421b0fb32a1e0b1658a0080b990ab6856668d3b4978c83dbc"): true, - common.HexToHash("0x1fe6b1958915082849ae1363045c7c6806ccda2ab7dd8861a1ea4e9f89a48cbe"): true, - common.HexToHash("0x3df71b7de73a11ba9437173fe67e2625039a77be86f2d4d880f9ec3055b9313a"): true, - common.HexToHash("0xdbceb909fa21bc802a7870e0b1ece3c67ab7bae4ba760f4d6438531f6b51aea5"): true, - common.HexToHash("0xc43568e5ba1b12d33fdedc133894e8fbb655d215866d821fd0825e9a3cfb18a1"): true, - common.HexToHash("0x9f522e4f1d80506f549e9a9510f986a18621d7df7ce35fad5da9b7652630fd6b"): true, - common.HexToHash("0x90d9ca7916e0a96ca59afd31f5abf79802daa943bb5836cb64b16fafc001c946"): true, - common.HexToHash("0xac54a1e6ea578f673594d589c3772fe2e787314aa2a38dafc95bc9ac722aded3"): true, - common.HexToHash("0x730f60f864eb5fc7d95224a42b6043a8f3aad83d8afe28260e4be85cd0f9697a"): true, - common.HexToHash("0xf73ca6122b49fe52c64e8477648874fcf9ad209da95d6e8d02cafe1e832ff6c5"): true, - common.HexToHash("0xb940f9b7c62de81195f82fe6de8bd4c8a3f5a5ec3c482a26f00d4f3a27727656"): true, - common.HexToHash("0x4bed1fb76b369da8ba9c8fd0cee800b456f6663f08f2c6d458332a2ee9888da7"): true, - common.HexToHash("0xa52fa7413f3ca1aa7212032d8b9cb84ae2543e8a17c11899ae5c4c709cf4c570"): true, - common.HexToHash("0xc8ec096615fd073e9bdd0a57899e30daa2e8b3f99e0c23626da3cdb21788eeba"): true, - common.HexToHash("0xc278c39a2ab6b9d76627dcffa46c7b46b26eebded322c0f119de0e959de21156"): true, - common.HexToHash("0xcecd205167a6805925b2f5fad84d282a8ad981162d0fb8e21621b1f9ccf3dbd9"): true, - common.HexToHash("0x176aa6799a6640b3e9280570342fb5263019e8b5f88386e1051630dfaedfeb4f"): true, - common.HexToHash("0x3ab844cb0d91ba427c758576140a858ab921325bdb81144f40692fb0f92254f3"): true, - common.HexToHash("0x9af57d120b37df882a1208570d0dfcdb8d3b60056492251fad3dfbe94674c747"): true, - common.HexToHash("0x4fb7490fd36af7baf0a9250257ebe18a5702e7fff2f1c3bd6d6b2e54e381cafc"): true, - common.HexToHash("0x3c91b7dfcd085795ebe6fcd9ecce7e0ff2ae30a765cea58add21d6e350bdd9ec"): true, - common.HexToHash("0x6eab8f2803966b795636e76ec9a624201e96ca95b51a601dfd574e75e984de89"): true, - common.HexToHash("0x3b2b420978ed8134aac1baabd6c0122efaa87c33dc504e7ceba5c5d252c238ba"): true, - common.HexToHash("0xef66a97c0a640a2a75af35ba5797d5cc313f8b6f0b4d029fe41ec215c3b02bad"): true, - common.HexToHash("0xdfe318a3cc94737eeb60f1f5cda3bc7d69552f255d7570cb6fedd5643bf1b390"): true, - common.HexToHash("0x8cb2faa3071068c280b7e14371fdd733843d6067270424e031d187bb5e380c6b"): true, - common.HexToHash("0x74ea7082e28b195b0ee3f7b7fc2ee07b77accd179df3300245ab4d89aa953f71"): true, - common.HexToHash("0x34e8f3deff0bc344a9491b45856f2a0bdabadc9ea53c3ee2115691c12419ba5c"): true, - common.HexToHash("0xf7a4bdec0186a7564fa95b9d934bbee542b7f993cfef8d690dc05566ea078b28"): true, - common.HexToHash("0x69b8b04a7523926b4e31532f68f1c738e4133577a80d48e4bd1f05ea810ec07e"): true, - common.HexToHash("0x996335c76551274ed7335b428642e596a0c1a59a9ee189035d2f7d5664456e8a"): true, - common.HexToHash("0x729cde297672d3fc4145bef05c8c7707ca322e98d5158e87f4240af1dc815493"): true, - common.HexToHash("0xbde41f6ab11a9fd10ca0a87ba494a203675899c178f679b575a42dbf1ec726cd"): true, - common.HexToHash("0x9e6ae8cdd1628efc7b17ead5cd4901d54ffc946d651da6cbee84eaa6a872c08a"): true, - common.HexToHash("0xb868b54ed8d38840c49eee055d3659f7ce534108883b903255a49c3834738150"): true, - common.HexToHash("0xa1ce05cd3dbe972c321e3a1de1533b75134ecd40ffd69201320fbf31c2712c94"): true, - common.HexToHash("0xc35b2a206cf5d13c85fb1ea35e0627543981a89a6aa432b0043fe25ca9d566b0"): true, - common.HexToHash("0x9950664a7d8d2e4b5d772722e1337ea9758cac77fed61cfc37bea54deb79cb89"): true, - common.HexToHash("0xe98b23684a2947393c5b4f0e47cabe4ec764e31ee5d6bbee2130cae1105e68bd"): true, - common.HexToHash("0xee4e673b99c705127ac712d6cc6a24017b6c57b4ce5ffdb52044dd5e476ce808"): true, - common.HexToHash("0x3d4deb69769b0550120e3663c9a6dbbdccc4b0ba4b6c73f1dc4ba2768a44ceed"): true, - common.HexToHash("0x6f8f3157368b6b301632cde269e8d426659385b0385d2c028316d7da87380f64"): true, - common.HexToHash("0x0ed37d143edfdfaec8b926bb3451147268ad9179ce9fb069b9118ed4afd79c2a"): true, - common.HexToHash("0x37e8340d3d080143836fb81339bb62deea555a60236bfaefc3a2a0911b861ebc"): true, - common.HexToHash("0xee45ffdabe94f547ab6d28b0817d66e494e5b79942286896cc71881bc19f8db4"): true, - common.HexToHash("0x3355d8c3116a27c645670c449ec515243adb0356cf39571bb6d6512d02fe0623"): true, - common.HexToHash("0x03aad1d07e6b84c9efe856d213d4ef5c66a6a0e085bb8df749ca7f12b6a0c3c1"): true, - common.HexToHash("0x044c6de1fc909016a3384cce8e29dcbdcb70a92bab6cf32d63b025e91e84ec81"): true, - common.HexToHash("0x313dd2d843fffafcf3eaea2b321f1b6e0c00805217fc58309fca05a8dd65f87d"): true, - common.HexToHash("0x22158c9d5b390ce262edb16badf2fc552c088c16b2b43e06e6a38c33c9a9b01b"): true, - common.HexToHash("0x8dabb31b4239a83cb2579da7c9fe3aa1c2574afd97e66c90660218c31a7d4dd4"): true, - common.HexToHash("0x480846cf6c2c467efd23c1409f952eff4c9d3f44e8530a9075209c62b430843c"): true, - common.HexToHash("0xd83874ca0a80ad522d04e45344ac949d2b4371a9baa917300f33f8984c805382"): true, - common.HexToHash("0x2a8af6a267bbf17532d43ee313724f152bded55b2a1b01999029669e12cc3960"): true, - common.HexToHash("0x6e6f5c9782296a7e2fde6c16dd882bd882793ece18d73e5deb52f48969ab781d"): true, - common.HexToHash("0xf683be203b495d689ea69b36185ff1f6aed870d346afdb3ae302ca398843b622"): true, - common.HexToHash("0xccdd36a21a55d71117f88e47850e56d127ef869835530d783883af97c9401979"): true, - common.HexToHash("0x741889aeab54579b3abd4ebaee049615580e31871f21fdc30c6af8c5e3974e61"): true, - common.HexToHash("0xd04cfc8ae4cd3ef1ba0d00ad7f38706114ba6bae79ba379977ee286d785bf818"): true, - common.HexToHash("0x7470804ce546c4a8ad6f3be00b5532b6107fd53bf0e90d0d5a70fc1e3454e454"): true, - common.HexToHash("0xc420cb614c3f8238fab279ddf86e825a1f876ac014d5309b531a839ba700fa0a"): true, - common.HexToHash("0xc874f0025deae829b2007637f1c7911da30261e7342a518a3fc2a706e5ed0893"): true, - common.HexToHash("0x2a536b42a9f981eb1b162cbf64586a23947ff4daacb5f3d8da63637f3d7d1be1"): true, - common.HexToHash("0xc596ae561dce986cbeb936df984bcfbffc504872165bb23d444f615490123768"): true, - common.HexToHash("0x22b6dfc71a6f269cac754cbc492159ff1cab6f716bfc4d97abe89b9d5433439a"): true, - common.HexToHash("0xa36517f20b74f531bba0f96ab5373dbf4bd67cfd9156b13d0f8b2d102b3610c8"): true, - common.HexToHash("0x0a090c6c88bc524ad3bb6f85fb42bcb1754811a623a900ff07eed35a987af239"): true, - common.HexToHash("0xdb1af1d9ef01faf66ec3fa1d402253221648106580bb1ab2ef507639054b3a19"): true, - common.HexToHash("0x383b4cb963e94cb0c869f0f30f905370941b502e6fc30858f56129a2bde9c1fb"): true, - common.HexToHash("0x1b35e898cf794dbdab5e73f2e3c2649e462bf6abf6be3dc4dcf9aba5591d52b4"): true, - common.HexToHash("0x2168343fde5a543af36835d52308b915ddc37663531b94f772060f3725a66253"): true, - common.HexToHash("0xe99bec7b6bc61d89d127aea75360f6384b312969c3f979aee3bafb0e3978f638"): true, - common.HexToHash("0x9a2107328ec5538261f81d869a4f50258d314bcef153b13adb101dc5e68351ba"): true, - common.HexToHash("0xff195b75524cbe2ad24ea8b107cddfb3ec6d179447ff4e87c9d0149ccb509c7e"): true, - common.HexToHash("0x0cb9d74d57793b242f0ae8fafdd354f8ce0f4681da3eacb486a5b4f0101b71d9"): true, - common.HexToHash("0x8883469aef1f21e4477a439c12cb6ef720f678653bb2abb3f8a352dfea799e6f"): true, - common.HexToHash("0xa767988cd7206b8c9f04fc17cc3339df4081d21ee527308c4025140b18219c5b"): true, - common.HexToHash("0x528f9dcf838aac71e8801327486ba65e0e9aa361030a232961fe19e382f32ad6"): true, - common.HexToHash("0x1baff0272a4bbcfbf2440335a3584ac7d0f6c702cca0aa79c2fba27f366847c4"): true, - common.HexToHash("0x783c78761856f99e38344c04525972d41d29df86a4e27f777141e807ac8682eb"): true, - common.HexToHash("0x16d53d7e9abcb7f3d07af3ef6ccbfbe27beae5a467a1113d7115275dc2c46f03"): true, - common.HexToHash("0x60ebbf9097951e6f50468ee55083342896521a7d6f69866cade961352fa3fa37"): true, - common.HexToHash("0xa2c6aaacb1ff32005d56a9f9fb58bbc0ea829303abfc13393cf5e0007b675550"): true, - common.HexToHash("0x430350f3d6334c6a662abfba8f6aa211fbc15ee0d7ab7e15c2b7fa6e1dd6863f"): true, - common.HexToHash("0xf49d9e2b4231ef0362cc8586a54bae12144ce04e17ff3dac356fe416da6da38a"): true, - common.HexToHash("0x230c7179abf0634d17ae8cb88ff2b12700c405a0a8ffdd321c5a7eda6470592d"): true, - common.HexToHash("0x059b6bb1787067b17a6da143adc5772d838bcaf4c6511235ea991fcbdecd108a"): true, - common.HexToHash("0xbbbe40eb05f8ca1f2aa470ec4fbed3345c724a26188c50bc380fffef94539f1f"): true, - common.HexToHash("0xfd3e9522e21972584a8d1955f482ab812321e2185c774053ec94ed9f49e2d6d9"): true, - common.HexToHash("0xa8a19a48e3f78e512411d3fb3ae09ddaaa9fe62c5cff6a42370d39acda82f232"): true, - common.HexToHash("0xb12ff480def6d0cdecf81ef32b5c72fb5940f6d81fcd456426fdada147760c4b"): true, - common.HexToHash("0x02628e88c7604c5ca9dd56410459bdce55849fbb6205b7c0ac6f0d639ae1d8dc"): true, - common.HexToHash("0xb7ce36d8ea324cc7e476493e88a76ae1d871b3036b5d2d33267c93b8ea0358ab"): true, - common.HexToHash("0x9136053f3a85acb9f80354c4e1416c53aa781d97e6d7e3ef8d0f629c26c8c939"): true, - common.HexToHash("0x2950188390257fd5f117a1b6e60190f1a780d2c230371c94221b9a774226249c"): true, - common.HexToHash("0xf042589b7be7bcdf12c0b3b56170a4d9052890c8ffb6dcd88fe7e2eb9dfd3aaf"): true, - common.HexToHash("0xdf87f43f1252f8698d3f5b4816a03047c933c417d6ce5c0bff4f1a3e6a724301"): true, - common.HexToHash("0xc5450968e55ddefb450e19a14529a7849f5ad66cde61ab4c036e7e0f60efd854"): true, - common.HexToHash("0xf4d0ea7a96dc36e143fbb9f82d0af09a3879d46197e93fd354ddfa37738560bd"): true, - common.HexToHash("0xa1fcd7e3fb77aceb5c24d0d1fd2deb5d12df24350ea2c416112aa1c5e4c1ed41"): true, - common.HexToHash("0x9eb97c0658f41280e7d778d1324c7c4738af51e4d5d57210ac921ee3e583fd49"): true, - common.HexToHash("0xefe59eaecb0e7f5e494ec881b80c3ed55543c09e9b24ad69ad46e38c68c70396"): true, - common.HexToHash("0x78d61a668a154158a5516efa0b76e6aa3b92dbd3f61864bc8c63c15d0e8b7e7f"): true, - common.HexToHash("0x3b636be19bad075a294f8de8ab5cfbaa7a492473452eaf5daafbabec4970533f"): true, - common.HexToHash("0x4b8625fcb932bb68b16ae7c99db9ccc3371de240b9b8ce6b9d4dbc2e263f6b7b"): true, - common.HexToHash("0xb0b8cc7a28eb47ad1c290ac580ab0093f65acf68d4e501c8d8a6627488edb443"): true, - common.HexToHash("0xe663ea80db358141472af5f5ff9e88272c6151258c21b57d5475e4dc80b34208"): true, - common.HexToHash("0x63fb0699915e55e5dc503f5e06394caf35cf00f6135b1fd6fa48673aba3a8e00"): true, - common.HexToHash("0x78356f6b164c24821cfb69ff3e39ae419acc4145e14d632e5d2dcac7bd5dbbda"): true, - common.HexToHash("0xd2aab4e6cedcaf53fb38fcc75532bbf2410a42344b61a6439e39a99165653d6d"): true, - common.HexToHash("0x01cbb6ce92e395eaae4ad7335ec5c79d650b9689d5cbb2f1f0bf9c6f0badf280"): true, - common.HexToHash("0xe840be30b82dc140db09315fca9fde352b4b857d5052c45321d70c81e7c62430"): true, - common.HexToHash("0xfc0dd4be2c21b2fe60cd1ccbcf902307b822a8706de0487c2be39a460c5315bc"): true, - common.HexToHash("0x3808e6b4955c72b0a990e1a12e80e145febf7cb3237116d848abf41590bb47dc"): true, - common.HexToHash("0x1ec54fe898d9c9e9ea0bdce980749e8173b5cde067e91ca1e19724be9d724f2d"): true, - common.HexToHash("0x14519611a01a828fae649422c0cd45251416e6ec60544005bc4f936706f78b02"): true, - common.HexToHash("0x521ffceba3e9da2ddf2bd88cfee827ce326ca636722e023f9158387980a25c45"): true, - common.HexToHash("0xf9a424cb058b08ac1103fb9784831e61526d238c420b1966d96889c40ebf97dc"): true, - common.HexToHash("0xfcdc21e663dd3e271aa0e513b7c9805ad3739192ecf767eeedb74a381a7d718a"): true, - common.HexToHash("0xce5a45e3106c3a994ea0ae270c322cd75ebcd6d63a494c285491f64f53437798"): true, - common.HexToHash("0xe393b8a0ac6154c5bec6da9faa2edd98cf1864c18be75bb50f490f0945ee3d6a"): true, - common.HexToHash("0x6607a64596183ec9f9774aee089ebe7a87959346e8bd9c2ffd3277ddd81b2606"): true, - common.HexToHash("0xb852732751e03d69175ed7bcfcf97ed0d4d47113b6d8c3f7623474c41db8f5a0"): true, - common.HexToHash("0x8dfb8d4c0a15160d1081babaa33ce384b23c48e00c7e7e97a8651cb091d848e7"): true, - common.HexToHash("0x56dbc59cf8de56a9aa404f3ae85683b369ee4340690e26ae36774db136e5e74e"): true, - common.HexToHash("0xda02a8ecb200f126f08d2d67945c2a8ba02e9d1c6271147b2e9b093ac968630f"): true, - common.HexToHash("0x27e30603da3064202d618f5f2af5fa76a61ef3a80c39a922338f8ec40fb101bc"): true, - common.HexToHash("0xfaba0b5295fda5e2badfc68ed08751d40b225d6abd5e0e5b7dd4c07dc7a7569c"): true, - common.HexToHash("0xda4504302a3663662899b5c5a48821e4455da250f068cd8d02f12a82c4e098c2"): true, - common.HexToHash("0xd721b0bfa7768b58601292463a2345a1ed945880f4e0bfa388fe1c6ddcb6e429"): true, - common.HexToHash("0x048b8698ebc1c20bb424150aa62ad9a380dc58b828b512c49976297aadf9954a"): true, - common.HexToHash("0xe91533cfb01f1a0bb1303c25b91d4ffc17ef740f105000f1c9215a72afd56f5a"): true, - common.HexToHash("0x6bf0b0085ecb5266dbe36cef98e5526160b15f77c3c8c17e15906359ad53e7e0"): true, - common.HexToHash("0x51beb5eb624da75176c41f71fa6e46b0bd1c2b9bf68da822fadecb033ff2942c"): true, - common.HexToHash("0xe2a91e378c9445da68ccfae49b39ac956bd598daa5fc47d20e41fe55cba1edfc"): true, - common.HexToHash("0x4f05baa15846dc545a1e4a9414044f9505062ede35f62486a073c26ad8b17f0f"): true, - common.HexToHash("0xde0bfb83654f7c37ff1513f4619572d00c611a76b35c9a21e2d04373360bca6b"): true, - common.HexToHash("0xc09b3427ce3604768de6928b87e5520d91bd8f3fb8268d1c31ec212133716d52"): true, - common.HexToHash("0x2384a51f0c9716bd091c4713582621eb3f70df2577f1ee6eb2033027c31affb9"): true, - common.HexToHash("0x18ed7298ac14bc880bfab216b545179cb5d3cb20393df0e6f1fcef544a34e682"): true, - common.HexToHash("0xe0c5c369cf74914904962e22b6297919e54c52ce4b3ca337829174d6ccfec932"): true, - common.HexToHash("0x061bab760924d0ca83725acf9d08314e36f16a17f22c440431b62dfce931e0c8"): true, - common.HexToHash("0x80fe6c3d5fb3d8d01fb1127e07505701b8f3ffe6cf205acead2076e618f3d165"): true, - common.HexToHash("0xe9bce6c6109e3af1118ab032c60a22c29ce6a735d1aca71daa9de441b77ece65"): true, - common.HexToHash("0x63b451fd73fd25c4f77ecd8625f493b4651369aca0961c025c146204bf6fc2f6"): true, - common.HexToHash("0x3d773d71d1a0a948c81edfb4b3841cf760924ce2d3d98fe117a1487b13bac596"): true, - common.HexToHash("0x44f9a19bd0ddec1efaf63b4e671155d20b0846c11f7eaf9ecff7914e05528a74"): true, - common.HexToHash("0x4e3409ee9e3f168c65a85d89fd5d5054eca1f8b8bff051abd5b3013f91f68007"): true, - common.HexToHash("0x589bfca8f9ba7ec05a1d109da040a916a3e361d4389f385b9c5f949fdfab9f1e"): true, - common.HexToHash("0x809a983d4e5bc61dacfe32253a4b4d54626b3f3243120fa0a39f69428c33cb3a"): true, - common.HexToHash("0x67d1564122c0dd095dc9c2c47c64f3022d88e18e7eb1b1dee780e62625aadf81"): true, - common.HexToHash("0x994426b95056d94c172d771b3122873fbeefeda1e6e17051794aa82516e80068"): true, - common.HexToHash("0xd13cb78badef94f60a28bb7b868bf4872ee981a5683909c5e0d30b11dc621337"): true, - common.HexToHash("0x6ae227985c6cfa09d8a271cd416af964983f858cbb87a0a3740fabfd36b82b3b"): true, - common.HexToHash("0xf7bbe671afbd378e3e89e0f0e9c637c9080b6154ee9138b8e2b021d4eb1ebbc6"): true, - common.HexToHash("0xe9b36e669d8e7dec88f3badd86e7bb445316f0c58d3246ac3bfaa1e257d218dc"): true, - common.HexToHash("0xfa98f745d067827cc3364955d7ecdad8380f732a1a9e5a54af174afde1d805c3"): true, - common.HexToHash("0xf9fed6412bd435842bb1dfb0e759d7d62c3fdc43205c4c82f1747f6395035952"): true, - common.HexToHash("0x77099b626ac15d8f9f31a25d59fcd62b8bcff742af37110b385b872d456b9a19"): true, - common.HexToHash("0x3825756f2f2bff0c304bd826556889dc5755e81d348ef530840e2dcb2a0fdf9f"): true, - common.HexToHash("0xad49a2bda1989129a92761df302f0544724bd12d04a599519a8d1c903725c837"): true, - common.HexToHash("0xbe22105c225dd1bbc3d6abd721ffb4796c610a3b9a1ef23da534af688949ec56"): true, - common.HexToHash("0xdbfa6953c6cff0f3b7962af6d192716a159664b27fcc176cfd26ed327a76b3b2"): true, - common.HexToHash("0x83013046d2a40f087b65a6d158e845175b27c6093a9ecb1835db4f248a54bd45"): true, - common.HexToHash("0x2edb51f53e8da5ee89c48e6f20cc81d5462ec50cc3ac4cc262812ae530b663e3"): true, - common.HexToHash("0x736e02aea8fdf736a9c5aadfa6628cfe812b632b2e149f0f591e3c935725e514"): true, - common.HexToHash("0xd6fab21b56eec4fe09550990193b021048c14ea67880493048d040baa9a39391"): true, - common.HexToHash("0x7d9cc6959d99741c7b89d30b5893521de619910c707117f91f78c17069ec2072"): true, - common.HexToHash("0x8ae2e235d869b09a3be3ad17ba07dc08bcc1ca6fed881721eade400fc37deabd"): true, - common.HexToHash("0xe3b3936a3b1758befc72b62c973db346ebda27c4f5a7b5b47b6022433bac733b"): true, - common.HexToHash("0x8c3bdeff8dffddb31f6f8a38d181d0b2eba229193b6c2e47c240025b413f5a59"): true, - common.HexToHash("0xf090a410188eb29a0d10cf2449ff137a4aaa53f4eaf20bff96f2d87ee703a16f"): true, - common.HexToHash("0x1e7a967bdca12e15cb5c28cb994ad0a7c05a4d354e00d85bed169218f0b2251f"): true, - common.HexToHash("0xefd41ce1fe5cfd2a5bcc2f4616460a6baf92577b72307791bebdd71f63f21fd2"): true, - common.HexToHash("0xb21792b03fce3e2c39dd9b4acd545836e96897d8132eb5881f724538c779ed07"): true, - common.HexToHash("0xd27b5d491d0a8aa7b1955b8e534b8582906a89892be1ba1c1198fea4139d7540"): true, - common.HexToHash("0x3088604fdc5cfde5edc9b70e951f5be68d0a8dc7c7c9077852314ea1dd178bec"): true, - common.HexToHash("0xc7fac985dfd1854d1696f6bfb22892bdb8d093ee0d67b1a7d56497daa27a44c9"): true, - common.HexToHash("0x387d7d5343079b4bb9bc344e26f72fd812a6b18ead7636c1080e0db262fe66ab"): true, - common.HexToHash("0x6e17c91acbb756db47dae903c47f85b0a32efd72548b76cc4787befb187487fc"): true, - common.HexToHash("0x83543ad4f57c7f07b3cff32257c4b50bc74800e4a27c99a795866f466335f2b6"): true, - common.HexToHash("0x1c71f4637780e2bb471c7a0ec8fca834a2d8ebe537cb0123fb31d6b021eff6f6"): true, - common.HexToHash("0x0e6c5767b73272ccc6ea4b59faebbc6941000962494ccd956481bb87f6a7116d"): true, - common.HexToHash("0xf7631f0da3b7ce6deb899a686ff2d2caa580be3b4f718908ab8f67df99f8f06f"): true, - common.HexToHash("0xaec89191f357e97e6f6a7745a2f6d63401a49823390cb533942456458e7c65be"): true, - common.HexToHash("0x38b497fee3ddf4cebb0c83549381d4c0c0c16d2dd16b5339b1581523c6914e2f"): true, - common.HexToHash("0x894947463203a2d86a76af8752042c183dfa30659488e6d788b7a1e8fcbfd3ba"): true, - common.HexToHash("0xfd736c8edf95eb39bf8df96f9981bd03c12742559b51fb18221ef925616f7479"): true, - common.HexToHash("0x627a93f1a31ed45fe87a614665eeeff695a47c9a70663423bc803488598d19c5"): true, - common.HexToHash("0x38ff6f53462dbf70ef3256d5eee70c855bcc0f1deb36500519af0f3c9776eaf2"): true, - common.HexToHash("0xc71a9fef662200602e5b91977b023900e83b2ce6ce49b11b361d8302fbc9b37b"): true, - common.HexToHash("0x334874ed7fc5a8a01e21332fe44d03126c8871f3ae7e2098f5453f50b8fb4677"): true, - common.HexToHash("0x4956c642f68e8127fd6eaa27a173dd24d357f7a288d192af99cd139a51292798"): true, - common.HexToHash("0x02f6029c2c75f3c8fd5593d18968232b798ba73d2575f0403eaeee1bbf0eba9f"): true, - common.HexToHash("0x9cb2bdd61ea2c7440bdbaceb94d2999d642b444ae09a6cf94b9ce6df28e18e97"): true, - common.HexToHash("0xedb5540557fdc3a21d7e92cdba1cbb09d12c913ed724ef2aad0239fd2c111bdf"): true, - common.HexToHash("0xd0e855c20abc3a9a4235585467b700019ca1437921181b9baf7b519d3d7c2987"): true, - common.HexToHash("0x36e3c71b92237850d7199905f4b1e1cc6bed6c863a2ba59ecc921c321c396643"): true, - common.HexToHash("0xc5a6c33c357b742ac979ea0fbf8729318c1a1a20ae201494672147080d477e5b"): true, - common.HexToHash("0x2c460870b9df431f654d0f87589ec85622529bf2228584d05f7c732bf8656d3f"): true, - common.HexToHash("0xe586e9487444af3a2cbff84e81f5f41fa901e57aff507ad41d2cbffb2ef37e95"): true, - common.HexToHash("0x36155aa4108132b88700b68535cb7accf23a40c9cc90fe2a3858baf4debe5edf"): true, - common.HexToHash("0xa6494896b8a17acf3febe215b1e5e10a30e92521f15ed7a5062b30405ebfb2e3"): true, - common.HexToHash("0x28bcba7ecb5152d488bbcf8d88537c6bd99f069a7aba07353d58db0890f9fe09"): true, - common.HexToHash("0x43ad1f0cb448d43a23de8563d0be42737a1fb214ab154db22965135a012020a1"): true, - common.HexToHash("0xfa5654a55bc5283378a89d9b2a9efeb09bff0b1680ebebcaaa04cea5a1d8b088"): true, - common.HexToHash("0x59e19c2f078285cd76795e14d6c02bdc0c165ddc6ecbb41f7b33d723dcc3157d"): true, - common.HexToHash("0x74dba729015383c19b180abfabd803d19a9bdd70b4de1101db499d91a36cf5bf"): true, - common.HexToHash("0x873d585c6d59e90f32265d6529cc9210016421390e28d2789cd2584405514dc5"): true, - common.HexToHash("0x48acaaa7efc1608da7f64dcfc133621d2c7aa7980ca325925f7be28ab017f57c"): true, - common.HexToHash("0x019aa3ecf0e97f05af753236cd122fe617b82ad735a9f0089fd5668aa581fe8b"): true, - common.HexToHash("0x92cd9da09a2d17ebfbd15f01308500b3d2cce236e52f900a5b6da61ed2536432"): true, - common.HexToHash("0xe8a5f27894dec7122e89c188cb7e949df45a6586775ed2545607584f9fe54e4f"): true, - common.HexToHash("0xce406a1426740d7369d71a0737d79e4a8b1be64252f02b216893a56a65af14ed"): true, - common.HexToHash("0x4bc45eb8dc1e6b4773e2c5ee2e66dedaa1c518e264bd080721f6024a4a7f1b94"): true, - common.HexToHash("0xc8339587170bc2ac8fc2441104f402e3a46f7001340d3922fe34904b6afe0eaf"): true, - common.HexToHash("0x08ab0cb154c1c526d587be76861bb2b6a17cac60a98de37b7ce820c2f84ea999"): true, - common.HexToHash("0xf085f7a9d72f6eca9f43465c529a1ea33791dae0eebc1f847f825c1b629caf18"): true, - common.HexToHash("0x1ec63ba4329e38b099f01e131265c8b4aed42f7a040f5f0889296c2b3a4e1d85"): true, - common.HexToHash("0xdc4a4c03fbbab7fc58ecee9c6e26173e11f65d7ff86ec353b1436bba69e4a971"): true, - common.HexToHash("0xaa2059ad99f570dec13ac837926276af2af496664b8075df02298403f0192b93"): true, - common.HexToHash("0x136dc3054634cc86e676b73b9ee75e1beec07760529dafd705a11754683b3480"): true, - common.HexToHash("0x01c6a635fbd6e78590e1cfff62aa148d7a2d05029ac0b4f00ad42abae9cc92a7"): true, - common.HexToHash("0x0eae0228aea706ee9141209e7948c288ef60e1ae4f940c624db4975e66290430"): true, - common.HexToHash("0x742abdc14bed51eb1cb35523844e33c7c42535fe7809b5bd7525f98c57ad1dfe"): true, - common.HexToHash("0x09d48813616375f0686e6900db85096dcef0d3fa1474286e476893649636c60c"): true, - common.HexToHash("0x6b33536a8c057b6db6f2b5f3aa70fa9d2e7b3347214218625d15f73b1b60b4b2"): true, - common.HexToHash("0xd349761e3af2cd65dd63d6d647e13a7634d7838112dede33cf72b01b0cb4bc25"): true, - common.HexToHash("0x698201f1cbf8011fad01b76eca69154daf1c2d1608056ff9c553be2a3820d7fa"): true, - common.HexToHash("0x65323e1931e37d44c9037b989d8adceb3711a43561e644729b2e996d41caea0a"): true, - common.HexToHash("0x496139c641a85cf8fd3e39a8cdc5388826c300152a349e8648143d8a3cb4917d"): true, - common.HexToHash("0x65920bd9e064d1198d38fd49a30f0e9ce2b9791ba81ce1246f955ac113086d85"): true, - common.HexToHash("0x3cc53e85daf7b71f3a2baef37fe718e3a951b30c7d5e8a3317d674a678b469e5"): true, - common.HexToHash("0xb0552349a090f79549ef0a0afd36f9ace116d59b7504d2f77e10fd671f1a7ea3"): true, - common.HexToHash("0x0c355cf6db9d8c10d93c0eac99b923d51f81a442e7e004176091d5e5dfd4a5c6"): true, - common.HexToHash("0x4523f8d92d1d4a2b82e6fa57484dfce6af2713cabd8da8942d059e4dad46952f"): true, - common.HexToHash("0x8ab5deed52549529ec94f54b141023009b320ee844a28673fe6efc48afcc18bb"): true, - common.HexToHash("0x5a0a0709f62dc5a02670cf29d9fa074ed9f58f291d17992b2c5618b031608ec8"): true, - common.HexToHash("0xc595543ca31b414f1b5acd65d62bfd105d22e99f503a3d1581358c78a57595ca"): true, - common.HexToHash("0xcee7524f41c7ca607c3519b17c740266af72dc10f50b3cd1335ec7d56560d80e"): true, - common.HexToHash("0x977f31f7ddbe60e3b288df08eb88da957713aac5438cffa53628b9136733e413"): true, - common.HexToHash("0xa376f3426147778a5446c7d52d9159724a0bacbb40e97483fb2d1cb52b56daf9"): true, - common.HexToHash("0xf04dc93275d14f2312de75cdc1bb38676a6a334a4c2c59700934e85d9d9b6ae8"): true, - common.HexToHash("0xc67394782cfaee0057fbfc38df1c712ed7b4b1218d292e5fdd973a57c6c5a705"): true, - common.HexToHash("0xaa1ee71c2cba59396dbb1386f839e92befdbf2863c800b5bd5fa9d50dfe8ffcd"): true, - common.HexToHash("0x091ebfe924ee81644dac8ef9220b5b0ede5bc43d0692f7d1057c6d54793b1bf4"): true, - common.HexToHash("0x2824305cf20f85f3c5e10f0ec3ba19ad0f288e7cbbb3d44228b89b1145f3341f"): true, - common.HexToHash("0x9618735742b9d1aebf452afcadf35d058b0bb4e116609a0b1f50d124bd898749"): true, - common.HexToHash("0x9708c30a1eb52a97593aa1d9159c5c5e01a70b394782a0a1c39512543cb7e1aa"): true, - common.HexToHash("0x3ad1a7fcc307300c99016682b36468694dd6a8ad9b63f379479da50dce062c1e"): true, - common.HexToHash("0x4d6b2e7ac60d5d990a0fa12f104779e821a1b1b453604899adaed9763c4992d8"): true, - common.HexToHash("0x7cae338278eb6c54042ed118036d017a0f55a68c3df60a0efa0be73b0cc7010f"): true, - common.HexToHash("0xc93f0227d6281c5b2dcb87ae9f947be0c20468be0d991d56726f43fdf5fa8a43"): true, - common.HexToHash("0xc9ae46e1fb92310ea39dde38a9b455cbd2b7e9c0f6703d9b8ea0464bcfb5c955"): true, - common.HexToHash("0x05af18ec2907ba818bd5713f4f8582f6c7edd61fd425ea46fa9c202453c1844f"): true, - common.HexToHash("0xfee56e358adbf912c8404caada6121aef23527a3a85a0e3ef5104e855ea999de"): true, - common.HexToHash("0xe1c8e5a247d014f2121ed32235c50c43a9d01afd4df45dad7d478afbd03f68a5"): true, - common.HexToHash("0x2b7b96d91a4510cbbb0004236c4c06a061b6fa9779ecc2acb4dee46bc9cf37aa"): true, - common.HexToHash("0xd9d7a55783fc4cf005b173df706178a6d79e9221c0883d92747548c38d8ac0e8"): true, - common.HexToHash("0x3a3da492e4d42c234a5e436345e94ae7d1196ca739f620c0db38f2167862be75"): true, - common.HexToHash("0x03fa8fbd22c0194f8ed480f2da5034a996e2c7c7068391e264acf2581e44e4a0"): true, - common.HexToHash("0x5db1b9bb57f72c63f1c1f3477ac2601f697e1d5a54addcd2e3d6715e1d75b17d"): true, - common.HexToHash("0x73326bc3884c843009911f7a1af794ef703d756afd53393dca9237270482ce73"): true, - common.HexToHash("0x67c3252ae6baad76a47f472ddeb304a0c5ee63dd2f430df15a26f436589bb0ce"): true, - common.HexToHash("0xb6811fe6fb8c94b5c0107b1d1b2d6c4f6fa15869e596e0b3590987c8b5ae582f"): true, - common.HexToHash("0x005869f2e1f233f5056d384a347a62e7a891da478e6a6b5ce76a096dec6b5604"): true, - common.HexToHash("0x79c165a512cc9d57b4f9c83b0f1de8ba239f2c34521f6688ff936d8fd3dd0fa1"): true, - common.HexToHash("0xc7690e0953187ed8c2935667e8310bc9f0884ceae97891a4dfe1e51c085fcfbd"): true, - common.HexToHash("0xb31f211c265de235569aa8a9309f0d533be88d4c42a49db231374c5adb36445d"): true, - common.HexToHash("0xaeb756d6920342fab0417ab2864b99dce49c9510971e7ae74fb849dfd21ca55b"): true, - common.HexToHash("0x16fbda0365a0d3e9271d87587a5e7210a92cc461539c10107c19c1f60a31e033"): true, - common.HexToHash("0x294bd77e45dd16b2f8b7fcf864198b6c82f0a009773d19d441ee9d9e842632b9"): true, - common.HexToHash("0xb782f94c0ef21a7f73d28c23822a6dc79cc9ec8f476a2c900def1e0e2b09bf40"): true, - common.HexToHash("0xd4e017be8f5bdb2229f3557200408ca4fb335e564d40c576ba75b4141d83bdbb"): true, - common.HexToHash("0x2952b8d6a8dd517b7986549a5b430209b31904113a03c6a75acc6ba4f3cfcd9d"): true, - common.HexToHash("0xd7c5755974811ef92dba4e8d144e5599a623092e8ed97fbc1d135f12d9d6e6da"): true, - common.HexToHash("0x2f124157e6e7268889b6f8c196da169bc47760157abacf46012d1f0a75c9a98f"): true, - common.HexToHash("0xf5cdf09300f42d1f637c90d739064a3fb5c8e18602859a4052a8a02463fbd1e5"): true, - common.HexToHash("0x567b9e6b3e39f5b7642903c20cb1505d1607af0f61a4759ad7374d7259cdf0b9"): true, - common.HexToHash("0x314eab38dccca3e557650f572f3bd25af505f8d4dda893e1415b7219e846b545"): true, - common.HexToHash("0x8b65d38a950d2adf50bd3337daa1fd8edb16e4114b4863b9be871ea358dfeb61"): true, - common.HexToHash("0xd90bd581182afae822464444073be54e3fcf61d43060ad73c6ab353617a658c2"): true, - common.HexToHash("0x78f759914bed8b1a9c8c0a0500249bcd477dbc9dd8f29934ec69552707ae3f13"): true, - common.HexToHash("0x41ff211444c7495a58b2dcfb3f9e68a6df22d3f85985f064da173b115952417b"): true, - common.HexToHash("0xe23122bc9a41a12fed594592095b74a3740c906f9367647c809b557fe53670e4"): true, - common.HexToHash("0x19c5789adc50ed84198e672818545aa0503e07405fdebc078d158cc1d731c779"): true, - common.HexToHash("0xd4ce299240a10f48fe7a18f9a01054126b7c7981aa98c2c4d87f9e63dae7c39c"): true, - common.HexToHash("0xbc23937033b757749b560e051d557f14e8fd64fea2450c9bd3de8ad41dcf9a85"): true, - common.HexToHash("0x39443776d098c0208223ac8fc1f201cb3fb4896fb7883425c4d4f9b3712117ae"): true, - common.HexToHash("0xccecc310d4032d5a13cfcb303ca2f2ee0fc5643866378474e90f8b255d3d00eb"): true, - common.HexToHash("0x0bb1a88a3a68cc74ed0ec166f46978d72827efb979ab8f550f612e2347b38873"): true, - common.HexToHash("0x42ccd0c30a9444f61960b2c08c25e4ef465eb7218ad3c126fee3bcccbae7c56a"): true, - common.HexToHash("0x9c19964638f6620115592a4096c8e529a408d270832d61f63bd2e6194daab3e2"): true, - common.HexToHash("0x7554c0a1d736456c04a28b58d23668e646df51b84623f97ffc9aa049ac2348c2"): true, - common.HexToHash("0xe8447d6c9059070e57b802f1130f01d70a32856b94ecbc0c2e5f321a7ef43fd0"): true, - common.HexToHash("0xb41ab35e334699060b28927cc30ad96a269d4abbd37357d71ef38f2cc2c083bd"): true, - common.HexToHash("0x82fa6b41bfa1e1dd750c62e7dc27050ab136dc95c04cf955edac4e9265983efe"): true, - common.HexToHash("0x264f9aa4af110535ebfef3296fbe55c05e2f7f9054f67381fccec403d3711b60"): true, - common.HexToHash("0xd2e71f3fe9d65eaf0d69a47e7f0a69ab4c37ab1a779218b14f2bcb8dc739b0de"): true, - common.HexToHash("0xe1340d5ed14d73dbe8aa51b4978135db504e687d213892979ef2487f4ffbc3d7"): true, - common.HexToHash("0x8eb7d93f26f7db6e95bf8e1b95777fc0827a22ddc40ece1a1dfa157ebe4f3e13"): true, - common.HexToHash("0xf1da1df66f482e73a9eccfbdc642335e0e58562e9cadb3dbb70b200ba0f53846"): true, - common.HexToHash("0x48c8d6b9d8c396490aa521b78cd60f75c500383b99d961233195af8ad37b4f8a"): true, - common.HexToHash("0x7859c2be5bfb19956ff2921951d55e3ee936cc5755c36396c20f06f98175a2ac"): true, - common.HexToHash("0xe7e5cbbfda5b3499c9305b2dace7af425c43ab329b7cb9a9bdfbd56a58054a04"): true, - common.HexToHash("0x1a7ce3153d5ff9ec531bb997a2d54e533ccfc0c993c7edc073f4915bb9323bea"): true, - common.HexToHash("0x5b6f65814e1d95ab376079c1fe8c32a3d8b48c48b058a18c3940e1ad628470eb"): true, - common.HexToHash("0x02a899a48be368a3bd3f8a04c30d9299a41fa6049aa11271ac5a59fe7b1c81f7"): true, - common.HexToHash("0xdab6c4cf091f7c5cea9a455d5645aae4195ef305999cb66941a8feea5b0310fb"): true, - common.HexToHash("0x69ab785eb2873212fe5fb96188ec7ff253d32aad71169b804cb2aef3da11a106"): true, - common.HexToHash("0x8397aa3aad14bf3f0547885055ca0cb059cfa8e431df877b859d4b64e215330d"): true, - common.HexToHash("0x9824689037757b7cf75f8db7bff272614e6dc95f8f15b38577215f0330b29b39"): true, - common.HexToHash("0x4dbd3a162f470350d67b48fbc9e6d221c4f545f8646855fdc2803526de508e6a"): true, - common.HexToHash("0xdb9aa15f0417ab28ce3019b8ea5f7c1f634fa773681880d6a38d811fd084dfd0"): true, - common.HexToHash("0x8d48e1a0686762e462f9024f96f3870de1ec7ea8708d94b31985586f2d265d54"): true, - common.HexToHash("0x51e17068f8544aca4a75013efb1e5516456078632f55cbb627e600e2212e68e4"): true, - common.HexToHash("0x480a70732b479cb0775308e0d649ae5b3595c8beff091c763d5f8cc9cb8d5e87"): true, - common.HexToHash("0xd69bf654ad86cdfa9a4daa04999aace3adb4a24362fa7c9a60e1b274ffd0715f"): true, - common.HexToHash("0xbbfa2547c009c0c2eb348ac05ed629ad77a685ef0d947f63b71994e2a1e18a2b"): true, - common.HexToHash("0x622fac41fd2c53e4080da2e66ab4b5a53b44e98a6c1fd4c482ecc95b00b9bf25"): true, - common.HexToHash("0x59932e96964b00f15f625b4060b31fd0e4c0f35fa05bd25e0cf94f83645bb59d"): true, - common.HexToHash("0x76dc3d977d2dd666768a42016128c186310704cbe44956f29f7ea60e227c2599"): true, - common.HexToHash("0x22d69361fc32c55f78094ac9f50cf030452e0f99e090175ef853a67914a3a2c7"): true, - common.HexToHash("0x55b3c0f244d040757a84dfd05b09f22fef5706db19a7473afbd83a7c672ddb9f"): true, - common.HexToHash("0xc5dd69b41d74a463288244559451d457f877f5fac84d7d257122bc2f27baa2bb"): true, - common.HexToHash("0xa9cf1b47fd07604b96555b5f9c650720ebad7fe731d69935988647f763f4e18f"): true, - common.HexToHash("0x35d2d4cd072fbd7b296a8979d75997613aeee8cfe5d6edd23ce10b45f1aae456"): true, - common.HexToHash("0x5a12e35b501b99bcf3ad40831f252a86786e8e12b1843abce6f98ce5b316fc3e"): true, - common.HexToHash("0xc5e162851fef6ddd549240269f7fa46d1e4cbfbf92ca84f6b84db9943f4d4637"): true, - common.HexToHash("0x5fe4cacf83434f06b3154f64df1fc6c0d8ccd3cf6cfea908790c13cfde34be27"): true, - common.HexToHash("0xb6701e49c3e1a660568f0301b60fc483a149bbfb6442d3336dbb38bcedb569ec"): true, - common.HexToHash("0x2651bee6ef46e05c33e4bb77eb25516acd9cecc378f25c7b2505edaf60f2fba3"): true, - common.HexToHash("0xfad635eb6f20d15f169c342589b9efe3149f0a57894c7b0e33884829d5a16a7c"): true, - common.HexToHash("0x7ebd76550e6dee08475c43fefae2aae5338b155798094d749ee114fb77743187"): true, - common.HexToHash("0x16fe71842883ab23e82d82dca856b7c84cc546573c966ad02f331826ae44e739"): true, - common.HexToHash("0x51969776ff798c451ac7089c8ea4c147493685474f6568a5596ead2bccf81164"): true, - common.HexToHash("0x6fc2f9ac4c5dbabfe9fd3fe699d12611766509a44bdbbdc13524a1bd513393b0"): true, - common.HexToHash("0xc83fa314e6a5e819205a1dbf472f56ee103964bb12bee006310bb04a4f85eaa8"): true, - common.HexToHash("0xed40c486d509fee468515791753cad2b174fa75bc67bddca1999a92e9c0d89bc"): true, - common.HexToHash("0x2f51795b22f8a3eaf6f155b9c60ecdf506175a909f2cdc3ab8be8971fc307e99"): true, - common.HexToHash("0x2d0beca36f9310fdede63c5ce6888f14e0f1dc7d9eb11db08b7874f34607ca77"): true, - common.HexToHash("0x426a146fcc7a161db36d8fd201f38d0f861a07a57c2e78df8d0b39275f391c46"): true, - common.HexToHash("0x0cf1fb3c3b5f5c7e564c3f95129b6c7980f76cf5dbc5e196132bf3af10dd672c"): true, - common.HexToHash("0xb430c0604c1dcd2fff0af138871198bc4861e239a713844e63512c330a3a2e0c"): true, - common.HexToHash("0x429b561b5d836430c62e947066197f1cda0d0cb9f0e95f5f66d10123ba8215e3"): true, - common.HexToHash("0x67133e95576438d35641a83c1a7bc96de895b53d7296f69e8bd16e52e2c0def4"): true, - common.HexToHash("0x0f8de33b58f5dc0a957dcbbb0a82feefba8e829b4424827dd5c0cca8917a36cc"): true, - common.HexToHash("0x7eba291173839457d1ec2754f5e3b142e79986ff029056309de5f581bc7c91b4"): true, - common.HexToHash("0xaf909bfce37de71892d1b4c006f575866fb600be6c739d7a7800370723d12fa1"): true, - common.HexToHash("0xe1d8476f9ec08a1e608e942aba38a31e51d30163718b1978bbef128c295d4ccc"): true, - common.HexToHash("0x33510d65d02f46c46febebf44f80f4bbef2cc37495345fbfa4444c6f6dd842f7"): true, - common.HexToHash("0x69e55223ef2ceb84eccf2986c73501916dff89394bb9ec15e29871e138973f9d"): true, - common.HexToHash("0x3e90549882b14a081202f872bfff4330f74b6bcf4aaf1a6ed6853352046e3b00"): true, - common.HexToHash("0xa494b301e1c76c44f9eac061e86329281d3d210e73567d926c5ed8696e2419f1"): true, - common.HexToHash("0x41cd4c010195d51e73e1735a42a38984db87ef14ab544a9de502685d41fdc9a1"): true, - common.HexToHash("0x26eb0b575456ece88ddc05d4f0d76173f9da813dcb8dcb823a4b510ba7778f87"): true, - common.HexToHash("0xc9f548078635447864802b450cfb9047349987e8b1353e51f3fcaf186ba28b1d"): true, - common.HexToHash("0x4c5176956a7c243d7ca82873efa00bd51124801044e0db86f9dea2ce448bd0ad"): true, - common.HexToHash("0x60980ec2e41456d6fa5c4a19aac8ee0d551e56b444f65c3bde7888f71bcb1fb8"): true, - common.HexToHash("0x587f4cfb3b663a02c295a487171dc1dbd73f8c30cad0c17a4c240671240496ad"): true, - common.HexToHash("0x325ec645aea44975c20a4f72d9836950c94bbd1d28ac70970fca157ae18ca30b"): true, - common.HexToHash("0x48151219d12178defdce47a10d472592c583f7e1b964b40f02d175a1cd4e3686"): true, - common.HexToHash("0x6535a981de74f4ef4f2401db1c9c8470e5c40297229aed4574ad632a64c45344"): true, - common.HexToHash("0x084a9f1010c6f25c3846249fb28f698695fbb12bdf8ac9503af3a9028073d923"): true, - common.HexToHash("0xa2205e64d0f5924a7f9fbfd5f957118eb98e131e3ca9a8439a4fc089a3d5605f"): true, - common.HexToHash("0xcd3a2a545738c0034ef89f055bb6b6acfeee3341f8fbc5fabed0941793b84628"): true, - common.HexToHash("0xe5ad85c4b6d938771fe14be447b214247fb7bf147be5f026f3e37f5b7df8d03c"): true, - common.HexToHash("0xa1736446e7911bae396519523e8747bfb80acf93ee8a3ca4662655a0273b310f"): true, - common.HexToHash("0x097f8889430dd46c829f8a15f04fdaec04e5581ff90b8999263f3dcb63a6955e"): true, - common.HexToHash("0xe7ca5888cd1dc842966f9a3c6a2d54d13fd264ff0a57bd9ad409b5feac928f27"): true, - common.HexToHash("0x1c2f5cc537e0bc11c3121b390b8efaee14ca02c37331dc8999eb4fa47e986b66"): true, - common.HexToHash("0x890baba0c18763fcf77220a410aa793a6ae2c93e8200bec3c657d0ed93fbb18d"): true, - common.HexToHash("0x9ff5717ac1989690dde13218225f198816cf60114e0485ad9ca1e81644b716ff"): true, - common.HexToHash("0x7699251026a09b5f2b21aae48a075a349991c9fc86464d31bd909c98f165b8f2"): true, - common.HexToHash("0xd3e5de0b59b6d6ba63aa6fd90547cd9c06abeab622f3735bd6168f8edf7cdeb8"): true, - common.HexToHash("0x478b996bc3d88aa0ac868a5d72f6a4a0b0ecd6e1c6cf241b91590dac28048622"): true, - common.HexToHash("0xc4ba9fb2bbe714126e104ccf9a9bf386fdbe383b26db1d898a73c14134f90631"): true, - common.HexToHash("0x5394242b38c05556233c1361523777f87c67c62b8f78246d3dd6c45bde646eed"): true, - common.HexToHash("0x320abd92245d255c48a6e1887624a6ffb1fb019d2358905c45fb0436366c10af"): true, - common.HexToHash("0x2122bbd188e5bbf2e11c5b1f53e478ea026aa006fb903c9d9a671c704180b617"): true, - common.HexToHash("0xa753a19b7f895e3ded34820437244716bdeafe4c399099f82e2645a1cd0012b9"): true, - common.HexToHash("0xed02ecfc681d3e2623cda190cb4a5a0dc125e99e59e6d32198435d13019ddeb6"): true, - common.HexToHash("0xb9b005fcf4dba3d183b8ffcd0e296a0341d07fdef8f93fe0166eed9d9e4cdb86"): true, - common.HexToHash("0xefc7aa37ca049f97e91f93fda30461509dc85ac4b63cf08971b7ba71468b657d"): true, - common.HexToHash("0x3f317e330afdc67b7952734326cbc765d0bb486c79f6750eba642abbf1591825"): true, - common.HexToHash("0x41e03a42bafd0a975eda6e24c741d19d6e22200ea4aa25bb3ca17602daaecc40"): true, - common.HexToHash("0x7e60d5b2657b3ccf2adbe5841e984f1896408cbc0b2ee683ca5902a4ca020212"): true, - common.HexToHash("0xe86ab648e4be6128163f121890dd2987cd0f92d9745e0ee346bb42880f9b97c5"): true, - common.HexToHash("0x45ff59ac3c435a87e971f72b6bf223befb1c150848420453fd2f85cd5a6c120f"): true, - common.HexToHash("0xab1a773cfae1f0c1d40969beae6ec57506501519cd97e74c1b28de31ed453bda"): true, - common.HexToHash("0x451b8a5f0e769b8623062c9eebe698541e2ce3b5900d371996bb11c6c888c617"): true, - common.HexToHash("0x8136740b3ab4f8a7e0e6a5e3b4fabd5209dc20eaa373d942830dee891c426017"): true, - common.HexToHash("0x28eb6c004aab4e0be0bc477efe61ed728d44bb5e23edb0cb69d0155d5454396a"): true, - common.HexToHash("0x3647416ab5c88b79ca639496dd6329f978cfb0be1d5b05660054cf78a16c354e"): true, - common.HexToHash("0x2dea54ea45ef4a2e47295625e35b2972dda607c61c51d40929ca85748c663820"): true, - common.HexToHash("0xda9326456945b50aa0e8ac595d2c1f152d9da4cec89e200a0a3207290d10e1d4"): true, - common.HexToHash("0x1b035630e57fbc4a05a23171d54747c00f04a2fe65ca2fea782eeaf28a3f6672"): true, - common.HexToHash("0x64a4fcb5c591002cb113bad8afa123b1e99d46bd7b72163e1e561440e57f3180"): true, - common.HexToHash("0x1df4d1d28c90e2d646560dfff0f2586bed1c65eb94e980c9ce14368173a12feb"): true, - common.HexToHash("0xb48e43f4e8f3d563db2fccfe4f9208a617b1af5ab976ee63ad4d15304d0f2cd6"): true, - common.HexToHash("0x9c42a4ac83c85f7fc6a5924aeaea36009d6345ce3221025d0d00bcd688290cf3"): true, - common.HexToHash("0x39818fb0abea48eab917d024b9db7fa5d2c01d7008a7aed515c950366ec6672a"): true, - common.HexToHash("0xf5d40f8ddac4054c5e605f5f9f4aac024787022800f478258f282685c762eb5f"): true, - common.HexToHash("0x1592bcf2a4a2af6c065c4dc25b1bc24ce093fcc62720f28210ccf2a009f35ae2"): true, - common.HexToHash("0xb8e62dd5247ecc5f3936553d4e72963de2409feca94e2fe8910949d265e27d08"): true, - common.HexToHash("0xea4873f7633f4abe2b2c40127c351868c5f3427b304617ccee956da9c1d87a08"): true, - common.HexToHash("0x4001e6158a72928b0306b4c0d044cd6e665cfb62a4376609bf4f1ca5fd4cab84"): true, - common.HexToHash("0xa147e892221cbc159d1a351989770b9a500add802905962220b7e6dbc4171f4a"): true, - common.HexToHash("0xb1a7e5787dd2749f8699d1a20bf1a7a629e9cc56b4a1c5aa53a515246df38c14"): true, - common.HexToHash("0x61e7d347e00d98e6d6148393833497f1b776a36ce0ac89a97e5349aa39c1ff39"): true, - common.HexToHash("0x8428e53b05ccf22e79455f290fea44ef282d7c19f9f8dd969bc39e1ca9bc4d67"): true, - common.HexToHash("0x8a7940fbd9a696cbed9233a4f0e683865d2ef948e7f5d399fabfbb61a5f8eb22"): true, - common.HexToHash("0x70eaa5027c0d97045722ba76b9faf3147e8a84d120e005d0173ec6f0d6db0fcf"): true, - common.HexToHash("0x80a17293ae97a46c72a9e9b38ce3d5fc471cb5e55d4ab8facfbaaca5dad8856c"): true, - common.HexToHash("0x5021bd6eebd046c9990d008d42af82f72811294d5e081701e17c00f948317b48"): true, - common.HexToHash("0x639c7884661a6f40026e524d2f80740ec45d157e9a90410b293194d41731ce4b"): true, - common.HexToHash("0x2345d4ec9f3f562beb154035d5dade40f5c96a7c4376128cfc7705116fe01efb"): true, - common.HexToHash("0xc00d499a78279479a19f447ac3f331d5f838193f8d311d470c3fb1571df34105"): true, - common.HexToHash("0xc3920ef98d68c2826943a04da13a780e9d2be2dbc31cb3bd44db3fd3de0bc055"): true, - common.HexToHash("0xc07203be6e5305ba4f10af8bdf93ec03b883100c095dd49bc9e0d9b467977996"): true, - common.HexToHash("0xfb87372c460b7ea139bb697cf8a04d2aa892b8e815199e8aae53277c5960a1d0"): true, - common.HexToHash("0x14d158ac1fbf92b2a0db1a531beefb8b2395cc614f9fc53aa942bdc0b1873022"): true, - common.HexToHash("0xc7fa3bdbf85e5b80b2d5a594b6371b7f4bd6eff5486ce7ed8d4492734adda37f"): true, - common.HexToHash("0x7fde76c1552f117f714e2052cdadb819a0ba90e5c05d0bee47e2cae6186b1c7d"): true, - common.HexToHash("0x4640c560956c483853b4b2500d58513a36c26061f227a690e283a89681b42c57"): true, - common.HexToHash("0xbef9167f85463641f67ecf39120e45705b2e3df9164a15cfa33e08f6bda75f3b"): true, - common.HexToHash("0x398d4a283546b0468db663345cbb87540816d316a93ae7d701a0322a7783e2ff"): true, - common.HexToHash("0x5c863bf9c17d45c2b71e0b009e620808868fe2b2bfbb58ea8cc2dd4d1a80d940"): true, - common.HexToHash("0x1286758346c50277368065b1a4b8be62ec9d542384703b63e29943afef9f8165"): true, - common.HexToHash("0x215ac97d2243a980862e1b7bf9232203fa23b8078971a72794e593965d1f6ac7"): true, - common.HexToHash("0x1156c2ea52f456e126964d7974a8749657c6573a55284b2d8764582f2f5a5756"): true, - common.HexToHash("0xc02b0576e251e254134bc247cf5f065102dcee9864579dd83039d4c42d937e00"): true, - common.HexToHash("0x57787068a7ded5454b4a8fda9c37a77bf5a30937e7284d6b5b8dfaaec957eb1c"): true, - common.HexToHash("0xa0ac653d8b7b4a8c0c7bac5afa9d563961fac3dab2f899ec27c76adc325ab956"): true, - common.HexToHash("0xff40b1c2c58d2eb9f62f92728c0ad843656a7bbec9ab418cb9e68b639ffc78a4"): true, - common.HexToHash("0x8d56937e96d39b825876f70d6b74c9bbf53503ab4bef4d5898e05b6c6cf093c2"): true, - common.HexToHash("0x1a01e2fe12be68a15695ab0b3704cabfe88b1d48471cc68d0149e387bbd913ab"): true, - common.HexToHash("0xd592f67b5d3128d39b7b4fdc27b700c62d8d80f19709c1277c371308da59c4a8"): true, - common.HexToHash("0x3973abc43b177031d860ea27e3717d0120261a5aa8ceb7896f027704864781f3"): true, - common.HexToHash("0x729f3abc1eadbca979b44e276c70006248256d623daeb08254ecfb5e9b8b7294"): true, - common.HexToHash("0xaeccc5120a3ffd326b1366853c8f28f619c8d928b5e19ea44e27f412814c61f7"): true, - common.HexToHash("0xf7cbdf93723a9c4539790a65df641af0242d46e1e1f9ea5c80ffb673902f6ff3"): true, - common.HexToHash("0x8de876f26b4645ca6c782813ceb7b594b95baa8c856b61a1628610e90c106617"): true, - common.HexToHash("0xd864a82e52431066d1ce21931a6628d2060d40abad14077f6ab01a50beb61895"): true, - common.HexToHash("0x718d3f9fb54acdc006fae5ea37ed4917f389e1ab8c0e96621995a3d1d72b802c"): true, - common.HexToHash("0xc3a211b1c396c13ad0c5418df64a4755385f77d30e805062fe747e79b93f20cb"): true, - common.HexToHash("0xfef93fec936ad8d0c38cf49370a9e73add6c1c308bd6c10f3b1389d389ec274b"): true, - common.HexToHash("0xb6f466e1212f7abb95aba852f12c1133c2dc8a22d2008fea3d4d51f7253578c3"): true, - common.HexToHash("0x550009c94f70498549551554bc3dd522f707447d3c59dcd102e666de961d63f3"): true, - common.HexToHash("0xefa94ce544b44a0d594f01743a260f9e39686a2757d90d8b222cde512aa42038"): true, - common.HexToHash("0x998b1f850ffbd71989ccf6e67e1ba78388b4b4bf852cee8b8a8ccff6fb9ddaed"): true, - common.HexToHash("0x68e9d70c276e0c1b1838fa324f8376845d57073e080b0e49e549c18d2322abda"): true, - common.HexToHash("0x07082abd1fd686025087c8747698582c5c09794e23dbdd24e786866a7a00d5cc"): true, - common.HexToHash("0xefee4b8ce0ff24e79de268d6d4e2ca60bfc340ae4e3fbd63069bd0a08cad273b"): true, - common.HexToHash("0xce41a56c9943958fe4b0f118f3f510f592c6c7e4a9378dafb13019644fc1723b"): true, - common.HexToHash("0xd3835d8e384b0857046bcc464ffe77c1311ae08d5d4920fa82d324034e8fe5e9"): true, - common.HexToHash("0xe840817be0e558fffc28dbe7ccbd617afb170916c9371947a4ce1078b23656e0"): true, - common.HexToHash("0x202f2854f915410abd97b3819cd2574f885505f5871374eac284ad30faf778de"): true, - common.HexToHash("0x480b045b3e52e16fc15123644479f498cb320fcbb17e30ced0d8248bbf2db332"): true, - common.HexToHash("0xc7c0d4864bb2549646eee0bbf6effc3ed18c9e2b651dfc93fcd3ddbfa2f00a72"): true, - common.HexToHash("0x0164c2231312a024a5fa31c53198d6a4268f7fad64bb2d4b940da2d09cf99f3b"): true, - common.HexToHash("0x6ffd881bfea0151ce51360a707efdff12443638cc72735df90cbb73983943b4f"): true, - common.HexToHash("0xf5d4af92db25dd6f6ba06e8e9ae82ad048be6ac945dac4a9fb6a154c27516f0f"): true, - common.HexToHash("0x9741eaff16e1580e303fe0d58dbd99aa3673750277fb10989e37cbf96b83f13c"): true, - common.HexToHash("0xfe9541774260ba07621f09a0cb9cdf5cf0c736b5dc6eafccc704a2ff30e0af22"): true, - common.HexToHash("0x4e7282b1f7bd9347c6392d9f9500d2e35474d6ea6aaf34618179d3f261a297be"): true, - common.HexToHash("0x238c997d511c275567949889cffece4467b2f74c61728da55b84b8b2efa6554b"): true, - common.HexToHash("0xfb22ca0069fac62548734de3e196e7094b8118feffeb86276ed4736e6ef24f2a"): true, - common.HexToHash("0x4f5f6314c73d562e355cc86572d47ff7c7484476afb08732da9060f808372e4c"): true, - common.HexToHash("0x2716b0ef1518c18c197fe35f5b2933760b0731b71295f369fa09e95d5cfdf127"): true, - common.HexToHash("0x853beac1c1272e0e53ffca57a9cba7ee96a3afaceb171f05aa054faba1acf623"): true, - common.HexToHash("0xd5c71158c0ead7f7b95ed4b4f799a76ef4782cc734856f6fbc20f0602792da16"): true, - common.HexToHash("0xe387f3a98299c968f00c9f88cc5841bfb4c9dfc59efb2f6874164de28536b52f"): true, - common.HexToHash("0x1444c88e8c9f67ee0690d0f94d75304546b594070915655e43e1c91dbbccb741"): true, - common.HexToHash("0x216f731920a77db10c10ac35891a2199abee3b1a663b33c1ffff8419315811fc"): true, - common.HexToHash("0x4f2ca5af4a683ed489ddef5a7f34a35a07dec32e33bf6287abf1f3b01ca91893"): true, - common.HexToHash("0x7f9def093b064b46d2633518a1b10bfb6da72d487637130d9edd9b1a8e56b501"): true, - common.HexToHash("0x8f122ffe8727300074f6299eebdd3fcccdadafbf872e9265768b85911e39e66c"): true, - common.HexToHash("0xac0878717f9e9b3863c5c6072020fbe5ac4589afd5aa8df919dd4a463bb35ba7"): true, - common.HexToHash("0x8c2cbedede5cd93497ebfae436ace89cf47050a993fb27d44bc21dcc9c1564a5"): true, - common.HexToHash("0x391ea233ac77085d53d167b8712a8e9f8c18069a9e7082380a159f0ab841d40e"): true, - common.HexToHash("0xe15ea3c5c0931f8e8bb01aafd2d0f29886f6dc284c2662e21be485a6340b7ff9"): true, - common.HexToHash("0x0d27662706aacc31dbb6900678aa17ecf6f2847abc9005578197a73c51d464ec"): true, - common.HexToHash("0x673c0b3eb95deb3eecefff01b03fba918f304d28a1c8cca7b819ebd842e349e2"): true, - common.HexToHash("0xe614534807d74523d09673ffb6a6635ee5f2120e1a34ca084afcd34cf6446d69"): true, - common.HexToHash("0x1a764fa85a7f416f922fd9990b12dce15f8ddc3704d2ab24b0820badd0519cf1"): true, - common.HexToHash("0x1f6d4a03cdad8d80b1d24d9391da1ac12065cb06c24a052a461094f44ec0b8c7"): true, - common.HexToHash("0xec078aad71726e4dff97bb8f57b23887c56b1f6bbffae2a86d21f4497d166b8b"): true, - common.HexToHash("0x1d6c6deaf847277a67adc2a984b3631be113816dce1e3a20a9c8320564850abc"): true, - common.HexToHash("0x4d75bb07397415d19084334c7a8ad7ee6490c524d57932f553f88366fdecab10"): true, - common.HexToHash("0x64a4a7abd0f9db032104ca8a6f87cc63b24fbb3a94ec5379f5e6a375afb5a495"): true, - common.HexToHash("0x2f8f241bbb7df8ab07e0d937f7ac7e4d04ce010bbe08fa8c72474352a36db3b4"): true, - common.HexToHash("0x07ddbf7bbc813fb3f4f8bd3feb0d7640c8e13fc722552e6678a411015771d063"): true, - common.HexToHash("0xbbd3daeeb96255f4a3aedee8a6f5ba6d30853ff5552b0ac2c9577701849aec99"): true, - common.HexToHash("0xd9bc25309a8828f320b86b0d24367fb1c6b35c2ea533c9823e0f858e3abeba63"): true, - common.HexToHash("0x9cb832ae83afa58e4681e394075b0af34bb063b9c5417bf1ae5359257a026db5"): true, - common.HexToHash("0x61ef71f8dc7fcfea38ec61ddd4b8ac492d42f3bec1859d3287a5f9fd6dabd6fb"): true, - common.HexToHash("0xa23a3360bb65c3e6a153d35678afe2b20f551bc1d7a763ef27082c434682670d"): true, - common.HexToHash("0x672fb77da0fd076668da708b22e6e1c7ab750bc47e3df78d5ad143d0576f21fe"): true, - common.HexToHash("0x439ba36a0c6ec1a1d3f0ceb42212ace719b28015f66a467989c1e7bc2dc8aa48"): true, - common.HexToHash("0x627bcc833c84abcc1e29db3098f3e6dbbcc83727003c10748318765b25143105"): true, - common.HexToHash("0x8dcb3abae76856463d978d0e074af61e970cceef744600a705c6cfcbc97e5851"): true, - common.HexToHash("0x6aa9622936ef1a32bdfe49db894eaa922ccfb44fe0755a0293b178a7bedeb3d1"): true, - common.HexToHash("0x7698e1e3a6321dafe0d67acba305661ab3728ba913f61d11cfa0e64cafa4f30f"): true, - common.HexToHash("0x21a4f12485321acb7ba29221f1df1b58fd1c4b348e4a61d03c4832389f8c687a"): true, - common.HexToHash("0x7c1f51e700fdbb9feb611b29d1bb01988d7cf9d860f93e97e89ed4bea50fc389"): true, - common.HexToHash("0x527efb77deb59ed7a90f82604553efb8a2c38ddcf2f594c0f0c5242e63a52711"): true, - common.HexToHash("0x93e020f5c458758acb846aedb2cc0db39a197ceb8cdd8fdb8806f6aaf1b639f5"): true, - common.HexToHash("0xb48712a81d27d1c012df34a422017ad33a9bb0badc3983c8be3b7eeb875ac3d9"): true, - common.HexToHash("0x06dd66e64b1262d474472b7b2b25e4b7ec87713922643146e5086c043fe0e52c"): true, - common.HexToHash("0xa6f407249bb67ca5743b3b75412c6c47729d6677020b22a2330a1f38ad7da1cb"): true, - common.HexToHash("0x358f37fe82c2ccb8aefacdd26d1b63309bf755986825bad91afd796ea06a8199"): true, - common.HexToHash("0x6ceebad9474cc61b82d72e2a77e0d489b6503cf43ca6ef91649069eb28010ebc"): true, - common.HexToHash("0x550d54e1e918219013adc28c4db84748e8d265a9f5c3b9e60c8c6f8961dcc298"): true, - common.HexToHash("0x7a862b6b42136b3137a2ecc5a69ba4d86395a42337c364412ae26f247db176b4"): true, - common.HexToHash("0xe4001d7ee2b117e3b29d3bfdb9e8d609afd62e5c442780af0a2c3ab87bd09e9d"): true, - common.HexToHash("0x496e367ecfce310d6b0501bc1e7b23bca99fedacdf664e0e4a7e8deff0e04431"): true, - common.HexToHash("0xbdda87c37ad880f9015cc107bab66dbbfb435a74f719c729e5275dbb189d76bf"): true, - common.HexToHash("0x241701f0b6b80a5e2f65b62a49f97cbd8dd552eec037ab1b52adf134eb7269a3"): true, - common.HexToHash("0xe565a5784bd5da650b01320d9687e834ea542e024f23b1d8084d3f735c421601"): true, - common.HexToHash("0x441e0062edac01e48e85d09bd7c99288900cacd3276d3968f261aec886ebc895"): true, - common.HexToHash("0x22099fab06a49138621fe0747084d628e84d2331070a1e1fa5b7eee0cd8a5ff2"): true, - common.HexToHash("0x03c2f6fdb72b89aa4db14bf8f8a46ff2a122966c51cbc17339a573de3ed4deeb"): true, - common.HexToHash("0x4fb5b54dc2952513b7f75016fe4cdb9b265bf97952727ed6e52e5d9619557370"): true, - common.HexToHash("0xad20071855d758e9b766f0fa27ffd5d430b71d4dd32bf30a6212995a2916af1d"): true, - common.HexToHash("0x36a70f8d618c729dcf855352fdb3b9981fe7863d91fbef1973c4243f965b57d6"): true, - common.HexToHash("0xb102af2a6af90e82100b773b5962f84c9188088b9d5fa7e98c50e6560cc147a1"): true, - common.HexToHash("0xfffa7a8a33f2852d77b5101a8fbb15350fcbdb84fa06a790e64a576f917d8729"): true, - common.HexToHash("0xc656d11e3273921dd348e3bc418a076c7f25cd656bd435aef9a463e53c78ce6c"): true, - common.HexToHash("0x052d34fb0e64a4de6975f2de61689be332b33db00e8060d0599e0ae9a57f1d52"): true, - common.HexToHash("0x7bc954b7f437a21d9a34ee07fab41ebd60bbcae44752c561f5e05a9b7164ba52"): true, - common.HexToHash("0xd0a39d5325a74bc144500f8001806b68993350355e4484ca1bba89c227bbbb92"): true, - common.HexToHash("0xb7c171cc07f12d6a2f451254fed35fd1805844f874553e0fc559ead3092bcd5a"): true, - common.HexToHash("0x37ac91e8c48403d6128a931679058a9201e70f6ca17f776abdf2dafd9643356f"): true, - common.HexToHash("0x218a1d1c5100e8f1fd4ebfb45b6aa2ada98cb676a420862e1dbbcc3916bdd680"): true, - common.HexToHash("0xad46a4f9ce6b07ec83a73f3680faa9cb9250fe2dfc3bbbb6017ece56fc4b05e0"): true, - common.HexToHash("0x843e64bbd6d209fa0e308bcb6269dc7c0e3c20bb09839510666bdc222352be33"): true, - common.HexToHash("0xed0756841aef3850853a9d86a504191f9c3cda3f0dfbe5b6f2a5fe325806a41b"): true, - common.HexToHash("0x89f2d89a0fa68263b47506ac7c8b51267b1ccbccd12cc318abeeaba8bd40a7b9"): true, - common.HexToHash("0x5123ff2d7adbaa1518974a7bcb9099841bfb402552503534f2f7f7bf6a968ff3"): true, - common.HexToHash("0xfaa05533b48595c8360ae944826106fe0aa414903a9f18637b153aeda1b2381f"): true, - common.HexToHash("0x5007ba4af329a8161629443a110274a177a9653d676eb4dc501f2cfba36bec17"): true, - common.HexToHash("0xf120cce07b80b4e562dc4e8869338f73a95e6c31775f4a79e3086781456a1e12"): true, - common.HexToHash("0x1109b93a201caab4724a21c9010b082d04f032f7a37f5d560704f4911e32c047"): true, - common.HexToHash("0x41432dc3ef33c78bcfa05bdfdc12f05c131d25ac8210ac1d21454d77f6ca3e27"): true, - common.HexToHash("0xbcab2cdf507117e29dae0500c6d97b567661cccd3b1e968c48fb962d6b212072"): true, - common.HexToHash("0x75cf65a43082c31155cb203d8b78fef9f397cc601e3ce9c715668a0f7a634528"): true, - common.HexToHash("0xf4abb48b68a6f974693b419ecc436a41c6596625493ecbb2520d98f63053e5a4"): true, - common.HexToHash("0xafbb23448be00eadd409e867161174db81dee4c30e6faf40ace26ee3b046538b"): true, - common.HexToHash("0xdabd2b967703987955685adf893f98b3da5f116bf58b524f86d2af2740f040dc"): true, - common.HexToHash("0x98a629405cf85acfafe9f167ac36419fd32f292a8e24864ec118933f4090695f"): true, - common.HexToHash("0xb9fd486bbc709826b5c1383d3aa5fdab278be6262f4fd4fc7ade5c1fa5144d63"): true, - common.HexToHash("0x65a8ab383a2482c0fd958b13e7a3587c1a07c911a723834ce5d044240059e3d0"): true, - common.HexToHash("0xe2fc06044a31d13e1dc72dfd10eed8e020daa66b495bf87a68c377e5d8975ca8"): true, - common.HexToHash("0x0a1346c2cacfc677a1de3dc173284e200b40541c244f8c7c6beafc7c24603034"): true, - common.HexToHash("0x872cc193296e226a9d63a0463dcd720914d7f5b654a8cab414b1102084cac5c4"): true, - common.HexToHash("0xcd3725dc892c1aa01cb9dd9ffec6f810895b23b0f1df360d747b81de0362cc0b"): true, - common.HexToHash("0x87cdbb89691d2093fdc784aa83b816bf70365e8066b03cecefc8c7f3b5568c0e"): true, - common.HexToHash("0x6ae4406f6a57579991def8b42fbba09942d9607df7e4629dff4b68f684d76774"): true, - common.HexToHash("0x964e821d967afe29b7fcceebb76fa0f89a08f29af170ddf73e0019f9b239f89f"): true, - common.HexToHash("0x080f32f7fbe030f8d1416fc06a78387e8a64d6e1b80577a622837c65cd62b167"): true, - common.HexToHash("0x7969abb0d2e685c45a182c6729dfee26a3dedd9af283a863cfc5303e0a3602f2"): true, - common.HexToHash("0x7ae50fe40e932a8833c262b1d8aca8e9384da3d33dd46e74abd1abf196d31d2a"): true, - common.HexToHash("0x2d91cb42864234fe27f7a3633ca7c2863c4b6769a9a19a466b564e96b17fda3a"): true, - common.HexToHash("0x6697dff7fbdf96816c2b251ed1bccdb4b95606efbef94a7d5ef7fb941a7b518f"): true, - common.HexToHash("0x32a72916b6cbadfe33df977130f5e51c72892d1dced2c2da54b274387eb02dc9"): true, - common.HexToHash("0x7bf9d7269e0ee1c041b8d358b40188e504310c0217d5d6b372dbf8532a136ae9"): true, - common.HexToHash("0x635e1ece7e47c2c418604ece16b44ea7e78eb3382aa4c73046d8b69807a5b925"): true, - common.HexToHash("0x3f5c7787dc6144c4276a2d1eadf0ad96aa8cd626596563a7d27ba98f0b39ca68"): true, - common.HexToHash("0x1c417da95174e3acd0ffaef95a22d7f330818a2e509c51d5f3b309b05e579944"): true, - common.HexToHash("0x2fce8d265d0682920b892373ba06667eaafbcdd300908c284e9f68b3758a3765"): true, - common.HexToHash("0xaa824bd89057494ddb011a0a86ce7c13d4eb693206b4057b8a219d41d4cca7ed"): true, - common.HexToHash("0x92208cb90f141c63cc586a72b4ae24e32471737fba2d6d7711c8facff592c44a"): true, - common.HexToHash("0x80049859c831539ca8d367463cd078374da666fe25555aacc35e8f524d770994"): true, - common.HexToHash("0x187185a70c2094a13e3a23b1c3fd9fca76785859a8e409faa3b6924994945c80"): true, - common.HexToHash("0x9b32ab2b6c27ca4250daf53a7a610d947c5a88034942168b7581cbf403820f02"): true, - common.HexToHash("0x0ac291a24477a8e665c8eab4aafd6c26fdd51fce06911511a41bbeee28d6f96d"): true, - common.HexToHash("0x4ad503cadd170be00884c0e0e435e4e52983095231714334a7d7d63ba47fc96a"): true, - common.HexToHash("0xabc7b65a6af1f5d7422ceaa635c6a0d98c0251edc9f65b0a9796005d4beb9f27"): true, - common.HexToHash("0xfb278f6844ef89d99968bb3fa9cd6a31b8d445f56b235aeea476e7fb6b741085"): true, - common.HexToHash("0x65a490df79d6f04ed3d1b9aba6fda35950927a1420c84182a9333a65df8303ba"): true, - common.HexToHash("0xb776942b9bbef3afe2044efc9a9ac01c82cd190f8c0fa3f2527011bd18847d22"): true, - common.HexToHash("0x44208cb9b62ac71c7275cb24150be1389d4acaf94d96bc8c401a0d4e611065b1"): true, - common.HexToHash("0xad94cec8c7098d5c571ef5acd813ef2dae0340218daf76416db6fd46a5cf9c73"): true, - common.HexToHash("0x6fa95229d61139d06c9fd8bde2e051fdb3d9ff4e214f13e00e1283cb802ce1fb"): true, - common.HexToHash("0xfb012d9b0f89fcaac5be1b8041fbabbd50917dff8f1dd0de5ec6e5c155ac33ea"): true, - common.HexToHash("0xe77aec41041672f9a4eaf05b02106df2be5b5565371ad84ac6380e4946ef5832"): true, - common.HexToHash("0x0a85b23c5fc790672667206752ed3372913f3f049315db81e0e77e0a5364881e"): true, - common.HexToHash("0x0778f8b967016dde46030836fbb3c96ab4321cf3447278bff55981ff8ecc4f50"): true, - common.HexToHash("0xbaba7480574764d1b3c344e12999d3071ba96b483c3d0011f5bcd168c2c43468"): true, - common.HexToHash("0x47034cf0c5dc2e6043d518fdaddb715d04f5da4c2320314ef2d31d3ad1024aa5"): true, - common.HexToHash("0x7c2d49a63e606ad32cf711f484e97f28424f3f687390d762387030da48b46f82"): true, - common.HexToHash("0x67a613bb50f485cef1930dca3f59f3e51b367290ebe0700a30d80367a2bcc1da"): true, - common.HexToHash("0x338714105f45c06abdcfaa5815e2fbb03b28c3040d411edb278959698503db19"): true, - common.HexToHash("0xd577c7d8ae69805495c132132b1f7d71e69be7cbfe978dc0ce793de30622a5fe"): true, - common.HexToHash("0xee4e2f2e332feba6fd2be00b27ab52a16f442de3f28c50cb5d9f5fa9182cef7b"): true, - common.HexToHash("0xc4b836efb903a20fa320bc7dd9a74b40631686717b28c1cde9148d31c2c6966a"): true, - common.HexToHash("0x57720494fd0188157f3ac8efdb9cd3fa3065a2f1668f4388a422704a3e1d210b"): true, - common.HexToHash("0xd165e6703af6ae172671209f602acf58545d150e3931da8f4b6829e377d6fc38"): true, - common.HexToHash("0x68f74acd1e90bee096cd064881dfaa52fb3d6c45b6752b15e21484ea4f7ba188"): true, - common.HexToHash("0x40e32032cc7f358509d52c90c3fba1da73623b822f6adb98bbf38cc143ba6e61"): true, - common.HexToHash("0x12ee728c3db1748ffb18396802f8995c997d30cb20c3d27924ae07ed24018be8"): true, - common.HexToHash("0x01852fcb5c2ef1ca1862710c3c508a27a8c2dc05cc02f6d0c4c3ce9139cc73d8"): true, - common.HexToHash("0x2138ca970b9d6478e064f8cbd7adaae31487a806b011c244b4cc2f1c5a9a2546"): true, - common.HexToHash("0xeaee525ee63b33bd50441526bfc3f65c1132ac434b3571e3684e6f97430b7803"): true, - common.HexToHash("0xbef6c14af3b741f4fbf325a7c927fafb6065d687a9a0ece19c90956038db848b"): true, - common.HexToHash("0x621cfade0ec6051af144918e1c18208670b721de1126ce8626f5913ccd54e637"): true, - common.HexToHash("0x776bdd6d8a03eb52f082f2cca127fab37b7a1d985a61283d5299584cebbba9af"): true, - common.HexToHash("0x2ea0ec2782a3eb4000af0cc6c59e64ae7ebbfae0cfc1444db571016b91afcfd0"): true, - common.HexToHash("0x13d3ebb1acbd8bb966f8580acde8654d1213c9dfd498168f3618d85675a65c7e"): true, - common.HexToHash("0xd2dd0e182b793a5826484ed787df73c3d427749721e4163525c8370adf32aa21"): true, - common.HexToHash("0x111eaa23ede75a632f659e825cde91bee4a1d7263b44e53ec1c73a5de52902a1"): true, - common.HexToHash("0x4db800a4a42f745df1f82ecb68b26f264af77f7813ce7158d24efd88abf5d53b"): true, - common.HexToHash("0xeb5ca553b5d6296154e1b3207399ef774a51835f5fd1ca94a7328eeb2144a5aa"): true, - common.HexToHash("0x935868e214a10759587fb140a8bd4e68f73a7028a55ee1fbc90a3240b57a6597"): true, - common.HexToHash("0x6db7ad19abbc84c5583127f99757eeb2f1ccfb7311cde29d1383f872635f6689"): true, - common.HexToHash("0x2aa7befec3525a138fc19ad5a2769d318c794b7e5d30ebaba87bc9725d237ff1"): true, - common.HexToHash("0x9dca456add3092da4a33d9150236ef3c98638c90fcdbb268408decd2ba3f9e2a"): true, - common.HexToHash("0xb5ae6f21c6b06e0bb46db6b024d63431beda204758fda10ef0ba044edff34b72"): true, - common.HexToHash("0xda39c5933da8243d6033ffa37b9f421a759c0bf3e5c5af02ba99d53ce6b7779c"): true, - common.HexToHash("0x73c4ae88b4b754499afa94e79b433ce4d3d9bc746febd90350554484c9c9959b"): true, - common.HexToHash("0xb9bf6f61eb87170efcd2c7a6903cb36b233b6ec9f49b9ed8fc33afe2244d5e50"): true, - common.HexToHash("0x3d361a22efb83629c17e5039cb61bf95248e8b6f23ff3edcc5cb418780fc2390"): true, - common.HexToHash("0x1ef5db2d815bedd6993e37f64e5d4430c7ccbf5f69b3b35c35646ca6b177a257"): true, - common.HexToHash("0xa8320858275e0ff2f77494b5f64b6ff2c8e767815534b96f7cbf148f43efc5ce"): true, - common.HexToHash("0x2a6c707500f2e922106853710e3e63755b75bddcf7328aeba6118d1fd6dd72f0"): true, - common.HexToHash("0xc2e19b3c585619a74116c8600addc1c38e65770a64c8c16b8b83f19545964fda"): true, - common.HexToHash("0xc61b97cf1b2faef84bd8e033abe03ee28d4c9a022db20f9ad91b0c344efc9673"): true, - common.HexToHash("0x2aa83ca94b1a2aa75d01be528eebd6fc5c651c99c2ac4ebfab7a840319e29dd3"): true, - common.HexToHash("0x38e4cb6e5d3b9543529756a7692805e4bbca407d29412d122b8b5d1176cef14e"): true, - common.HexToHash("0x375a6796700b3350d2eb25047a57c9b404fd33fbb7c2868d2bfcebae2783d8ad"): true, - common.HexToHash("0x65a6adae51fbb0f09d83273f48cb3a078fa666bfa348304f448139273b3c27b6"): true, - common.HexToHash("0x3319974dc0bc4ae39dc7bd212c610ee188ef73d25cc56d78423a7f3a31881538"): true, - common.HexToHash("0x1d0eb00e0bb95e101a137c85c6674119a6eecae0396309a841c6b6e149c95011"): true, - common.HexToHash("0x5dea1e052b448597d393cf81f0736fe6fa7f05ea296c1c7690f0c552e2c8a1fc"): true, - common.HexToHash("0xccc20eb1107cfcdba0434813a06d9b36caa42df885718fdb901040b9c9458bf0"): true, - common.HexToHash("0x39339174027dcce2e1c4dca60ed3ac69710716923130749dd45f5c2ded85c3c3"): true, - common.HexToHash("0x2fc7d5b254f1ca15d8bb9e8a77f56191621a7b12235e7f50ec08a802d0278ae4"): true, - common.HexToHash("0x33af0d05823ebb0065d4bfeb155c9fe2591d82fefd7c566289db63b0ddf94ef1"): true, - common.HexToHash("0xde4e31b04914b5852c1d015a33c6ac81c0d79ad97f058e9854b8c9657830c143"): true, - common.HexToHash("0x92519a655b4b8a93d91ede1b592c06cd033454018f1df4c954423acdb0afe758"): true, - common.HexToHash("0x263b822ecaafabe71a780f15ed38e23f62cb97b700b41f0f2d0c0d8bc2668d77"): true, - common.HexToHash("0x4def05da417295df7e8d792d4864bd1cd63dfdccfb3f3a2c23b25291b7248542"): true, - common.HexToHash("0x3fe01c1fa8545c1577a6da7eb8fe60f5a8877caf5701317852e34cfc8ea8514f"): true, - common.HexToHash("0x05c4b7a1bcd804f5ff103aee90bafc61bd66435d2764d50d93b2cd84637407f8"): true, - common.HexToHash("0x52582b8e5e2cd3b22ad7c59c1e40e6da5b1ef284a722f81eeea6ba123b75fc94"): true, - common.HexToHash("0x908186e1d9b4ac9a1c4eeccb43e59d7c49b0f18a290e08284dc663b20b4bd00f"): true, - common.HexToHash("0x36f55f73bb6581e129b1c30f8980d0e9eebf33f570bb03918d8ddca125a9ef9d"): true, - common.HexToHash("0x6b82a524b04d7c0976536cd6a70fd195e72a28ef9d5bcc3ded305714f828255c"): true, - common.HexToHash("0x5da6f21acb855f7498fca77ed948574aa07f7c29234971606efefaaea41ffd36"): true, - common.HexToHash("0x2f46e85a1c13bf6faf470cdab29353f5589b4de3e212cf551c4ececfc2b6019d"): true, - common.HexToHash("0xc065696f94bfb502ae12346cc51acb1c1d2761034a5ec507772270d5d6d0d754"): true, - common.HexToHash("0x71b02011090fd02f15a88fdf4bba0a5316218f3d1785a4eb39269ca46598500c"): true, - common.HexToHash("0x683cc80151407eb815730116076c22a735cb5498c578ecd029391512f8afde8f"): true, - common.HexToHash("0xcdbf1bc7ccdce30e028ddfe6b792692431c0efc9bcaa48fe208bc01452c75ded"): true, - common.HexToHash("0x2161a2fda3c176ff5a670a362c0d8f53c689ed0f79e22ba4b3456575dc9c12e8"): true, - common.HexToHash("0x379ef8846cb03d224f074f3791e1da7dffb04df6b7856db979a6147a33815993"): true, - common.HexToHash("0xcb299bd55304af3ec14fb4b5c9c012823393766db4435fc1788765798fe4db91"): true, - common.HexToHash("0x519868f47aa99dd7c054521330e9476bbf39fa0c5f431e75815aebb7f722dc19"): true, - common.HexToHash("0xf906366dc4d92d2651db3e3a243d3d377dd2c0b180551644af2eaf44bec4d4b9"): true, - common.HexToHash("0x0d32c4b438224e50a6baa1bd78631a52168354966aba0c8d03ec682edb2b7b92"): true, - common.HexToHash("0xeff64cd55a8c72a69850fe915cc9715ad1e9047fce72ae2b40e4e6d27bfd6fb7"): true, - common.HexToHash("0x4fd84ac9681ae5582a2868420be968da36214350e91ed49b778b90412fbf0f15"): true, - common.HexToHash("0x6b6fdd41b6d1bdd0ce748a3603ea23f5a100357a6a4e7a3254db84793052bc1e"): true, - common.HexToHash("0x76594ba712a4de2c2aa110aadc5db5bbfeac2b9e77d66e7e7d80a94070d5b484"): true, - common.HexToHash("0x920e48e4bcc0c5aa5025809fd24fe99544d70d00f499c0f0d577e517cf60e919"): true, - common.HexToHash("0xaf7327ee08f551e56724f0013a5408c1a3a212be2bf1308ce11a5d8dd2d5dfbf"): true, - common.HexToHash("0x324e6909f1e59e5c84b987841e3254f5eafac50ddfec58dc6ae62f09890af974"): true, - common.HexToHash("0x94ef3424f97d7e7a72dda9aca8c3bbb4080e4937e971145325ce29b98cf41ae3"): true, - common.HexToHash("0xf97c70fec3f992b27112ce2ad5e40805cc8dd11c86d2d620c3f92f819918e9d1"): true, - common.HexToHash("0x73010a65be4e723276d652a6ec453f20ab7d2593193a10a255901fde00c3ccf1"): true, - common.HexToHash("0x132876c968259dcc36f7f70998bef3215c1badb6cd1cbe129bb96340929a30f5"): true, - common.HexToHash("0xa63b7fd0cbb87c1eb1716fc50d2e82256940b52ac8245db76cdf264aaba3adff"): true, - common.HexToHash("0x8db8f37585ac19718603e6a1c3076d7f902ece0bfecd57dfde17ebac46c5c08f"): true, - common.HexToHash("0xace176047826d43a0710960755b60dc465848004c950b34346b26a259421a04a"): true, - common.HexToHash("0x4af21138e1f44a89e624dffd8f32cf001317ef297bc3cefca63c998bd30c319c"): true, - common.HexToHash("0xe7cc773c1f2102bfb12d716cd834e2ac6a57daa418ed970b8e50475e2d09ca77"): true, - common.HexToHash("0x20a3cc9423ac468bee18723b0a45c6bf303573723da65d00f5340840bff620a1"): true, - common.HexToHash("0x6660954b7329dac9a49eb92f99f96a5a9087bf6b167f23b5677373b648eed4f5"): true, - common.HexToHash("0x04d796d4d27555b752a1ea381c9f7fb43bfc31b9e679f8cabfef34a2b1e83cb1"): true, - common.HexToHash("0xfdd26065efc5839bac7450c3c48f596206eb82a565cd7da9e9b037d263b2b3c9"): true, - common.HexToHash("0x329a50d9e709b020f6f9ae1621534e048bab50198be4cd954a0a914a04ba7776"): true, - common.HexToHash("0x9540ea7bae114e554641f035d3d2c2ee54757d284191b2a2007c9f5b3ca8b59d"): true, - common.HexToHash("0x6579bd8f0ad39273dd12f62fb6659790f805f920f7713f091739066313d53218"): true, - common.HexToHash("0x1f0572ce90f6b231e132b39d933bc5e680e898956fde0d9e7d14b0d58aff4f6a"): true, - common.HexToHash("0x90afc7be38e46f3f474bfcaf24eb17f5796f6db04c6256e74dd872f10549eeba"): true, - common.HexToHash("0xdda82a3dd81dcc89878c87c14f4fdc6d898f66e135dcf20417db584cd0e55fb3"): true, - common.HexToHash("0x9bdbb329615a2b58624bacae75f749bf7893412b4939d5319e7591402fc6732a"): true, - common.HexToHash("0x4bd3b4c2b323d783927712d9ceccb547f942278877caa6d812f989e70393db5f"): true, - common.HexToHash("0x41476508e488f18d2a6d3d79e582d6122be9d3ecc0e10e64249f4d384f558f19"): true, - common.HexToHash("0x0819d8be3305bfeb07adeb6871a10afd1b9779c965f4b9cccd98527f04047b0e"): true, - common.HexToHash("0x378a36b8220067d8e63b7c3dcdb19d13d8075f75f0df096a6d6d292db45bc465"): true, - common.HexToHash("0xc007268ea20758d8000a0e8b6a38be244335768dcfef1a51c2bb65cbf5744fd1"): true, - common.HexToHash("0xf897056feaff27f7ce5329954d2e7c7b5e088d9ac9d07f84f85de67ed49b911c"): true, - common.HexToHash("0x8a79b48c45dbfbb7c75b151a1779c4f5d794f0d8c0e1402f167efeb8d3e09dbb"): true, - common.HexToHash("0xdf139305edca840d4ecb8665ad8d24d8ed9b5d4aa67d1b4292fd444bcde2c1d9"): true, - common.HexToHash("0x5c494ad150f21387522ab3880476304c8b812800113515dc05c7bc43e1a11588"): true, - common.HexToHash("0xd270f52626ebe648b713d24252ef896fb6db7a8e32e068a8393556b9dec96a63"): true, - common.HexToHash("0x0a80955559db7ea006eecbc1ec39d1ca04111aeed4542e1e5fa522ce215b5658"): true, - common.HexToHash("0x7c1ba3743811cf39e3cac961d4811f020cab2aa07abb81de7a783ee693cc8491"): true, - common.HexToHash("0xe9c71cbb4398bbe6cf9e5b6bf245391c9ae65a4d25a23b7119212e5dd105fa86"): true, - common.HexToHash("0xc67e88a4a0273032e55f771aa0248d93c6aedda5c8def19a2b9c5cab6286985c"): true, - common.HexToHash("0x99021a841e43bd599e87c089cf851bc295823a8772dd7f1e18558c0ce4b6908f"): true, - common.HexToHash("0x04e8fe6a14792d756b8ae98cb23a458171c55fc28b3d02e7f7dd14dbe467b672"): true, - common.HexToHash("0x02e687972e19ac17120806b5feb2be8e6b8a5e626c65ae6a902efd09123cf7d6"): true, - common.HexToHash("0x2d84e956eee66f5fcff860784233e9780a1a30b600c49130a29539cd3cb1bb4f"): true, - common.HexToHash("0x9ecbb0cc5e4e51b8374397d7e3d294956fc23913e02ce21f0c002806df90e283"): true, - common.HexToHash("0xfa1519a44d341db8144b8e9c583b716c094e88a0cc6cf2ec13af2624a5572f68"): true, - common.HexToHash("0x0709de6541474ec7db7c16beccf0eb92692777551dc54f83a6db7292d29546f2"): true, - common.HexToHash("0x8f48009730988649fb94e911a52ed28b37162231e51800cf450b6e45c415a453"): true, - common.HexToHash("0xa475fa1b2301d3197e2da0b6c4a81a6b230bb4e92b2be5e5873a785be09fe87f"): true, - common.HexToHash("0xaf9250d6e2025051aadb4c510b2cde7e2955bd4330f16bfcec8326d174efd023"): true, - common.HexToHash("0xd5c4e2fa7bf356f2ca2b73b712876274d4593dbf47bd96cd3f7ecdc6f91a3ac4"): true, - common.HexToHash("0x18437cd35835103739374625cfd99708d309c27b4904caf81868354bbf3082e1"): true, - common.HexToHash("0x44f7d61b1d14c9d4d467ffb6c6d72951f8fa930d8fd0051d1acef46827ae428c"): true, - common.HexToHash("0xaf88ac115e2465dcd317bd4e7e509c149d2dae8c86af4915d6bf2cd99fbe18b6"): true, - common.HexToHash("0xaa0149c513fcc624a29c945a71bbe8ae3490ff22b9aa3f0b27e281f70aaa71c4"): true, - common.HexToHash("0x70bb736ffd200bde946596f973fc833abc61cd306d66130785fb3951bfc11183"): true, - common.HexToHash("0x0f50bc870aa4d15893dcd125d9e4e89d5b5a8dbe7bb59ae18eb6eba264ee7035"): true, - common.HexToHash("0x714eba00868dbbcbc78d1a96968b167fecfe32b1e3924aa66c83d3a44e318a60"): true, - common.HexToHash("0x0ec019e31c02c02174f43c7053036cea48aa89d59c2c1dbe47afb0c3deb421b5"): true, - common.HexToHash("0x8fa03767c27d3bddb71eb6cc3bdbd256554dc03f304c49cdd6427b3d7812a0f1"): true, - common.HexToHash("0x7f904a09ab23e33facf8f3f9aa1dcfaed65611cec480b15545854b6fb18d3702"): true, - common.HexToHash("0x0e96bbdc348d2c75e5248d97869f3a2eb44ab4f56096c935e3dc0746dcb13e70"): true, - common.HexToHash("0x1b0e95b92dd39529ad18c0291c1d9be01d5e50a407b8a18ac20ad51acfa387dc"): true, - common.HexToHash("0xa2a114be1b1f19252292d4a7650e31a3bf8e24be55989920c2ca221979d2b9fc"): true, - common.HexToHash("0x8f49ce7f567022a43d967681680aa7dbbafb0abbcdf69e112cede4f410e6d2c2"): true, - common.HexToHash("0xb42c559a5d79d2374fad671384c7fb5ed199b0fdff558e14452557accac82c1c"): true, - common.HexToHash("0x4e0597c25a4cccc60c5a95d87e62b88c55ddc234cadf809a04f56456754c4c9b"): true, - common.HexToHash("0xf455c71926a3be85785243c2e095381dcf4b5435dd60737b2bfd39725d3ddc66"): true, - common.HexToHash("0xc1087267dfad1097624c905b655e24bcb1dd1d5b673629655725f6caccd4a9d9"): true, - common.HexToHash("0x5d88d4cb02913d8ecf17a64689bf2bd97fd68b8f23a584fa9454fd1a2fd50f53"): true, - common.HexToHash("0x141d03aef998d9ab58ad25b6d5efa0e8571acf072eb61684cce755c7d0b153a2"): true, - common.HexToHash("0x2dc94b86dbe0e528f299fe352ef72d154b2c6b0be08276c27bc590ed6347e438"): true, - common.HexToHash("0x152104d93b457021d914b269daab2f7b6e6ad57509ad3de2365c006bca323428"): true, - common.HexToHash("0xb2170f35864653a894a086b2695fcec4915065422dc651d5e9025cbd9002fef6"): true, - common.HexToHash("0xfe17a92ddbf8eccb10b4320d07f294b4d102545f6e8122f1ca69c136b2ff572d"): true, - common.HexToHash("0x9c22053e87afbe1c686371e16226ee989b20bfa40edf87e0bc302e25c653e2cd"): true, - common.HexToHash("0x2dabf625db9184b5443ddb3afa8360b588f70489d6d3ecb605bffdf9ba7587b0"): true, - common.HexToHash("0xa7dba7c9866fbd0f8ccdc2ac0e4ae64a05fc9ef9ba68be592934573629c6b94c"): true, - common.HexToHash("0x4be51d69813b2f10a754927c43980745324b85455422b37ed20adc7e6d589873"): true, - common.HexToHash("0xa38f3ad40c9091c13aa39a0f5d17838950346d6db7b3739167aeb97b5b21f787"): true, - common.HexToHash("0x4a7a81eb58918b51b1ee751eac855fb6592061e74f5c5e8bb80d0a28ad08bbf1"): true, - common.HexToHash("0xbf18c671c3017fe2564b40cf9aacc8fb1f9a3b577b6bb29e7cbfe28caa50363d"): true, - common.HexToHash("0x8c0b3b6e9f4e6b7560757c6221e40fc08fd5df6319bd23f38035fee0b57a2bcb"): true, - common.HexToHash("0x1941ef6e0184f399febe5f5c27f96b7b44b949e15a944434c56966e86cae6997"): true, - common.HexToHash("0xbcac44d1767e8378f0c7dce850520a9e8b9e7b1c4c42b12d5431f841e8d3707f"): true, - common.HexToHash("0x6f56441d16799792d08f774e8f13e225c98c008a0fa6b6f1a601dd0e3d12ab11"): true, - common.HexToHash("0xd7f8e9f49675642e8265b45fdf12b18f473fa8cb2613088723b7b0342c9ad6de"): true, - common.HexToHash("0x6c78d0c61b7c5595594bd95264114b6d75931668459fbfdbfaa2bee36951cd69"): true, - common.HexToHash("0xf72a1ef487217354ce3ed6763d47a70db1ccf39606ddbaea84b94723dd68937d"): true, - common.HexToHash("0x2f9d31affa2b62c4e145aa7914f120e7a730b4f7226d048f364751dff794a1ca"): true, - common.HexToHash("0xf63be13b50eb711bcea5356e78e0658472c1e0ba4bc1070dbbbb4ec39f42d8e3"): true, - common.HexToHash("0xd0252dc75cc0f87e7bb8ef4a792f80c7fdfffcd356e9bd00a5ecf6c7d89f3f4b"): true, - common.HexToHash("0x767f5276b3e65a742c26b2db14d8daf34b50ef5f73b8f3b22702b787573fea94"): true, - common.HexToHash("0x8fed9a4e8c4f511794fad61c0d4d6bd192e1e1236aad2f9a9f5ad5612f053339"): true, - common.HexToHash("0xf496e1d9a75a73ed59c992cc7fb02a7391552dfb37328976b3b65404a57b1f0e"): true, - common.HexToHash("0xc9d4a422e5615219de9625f6c93bb02d761311d3f6b902bbfbc50d4fe9008d95"): true, - common.HexToHash("0x95f0637fbfd1ebc33358803b7ceb31dbfae79e9fb42f7b79126e535a99ad0864"): true, - common.HexToHash("0x0ca41561b475fe1489ef5bf4f4c1ce41f83fcb846ae89ed091abca444efbdd3c"): true, - common.HexToHash("0xa8a175486f5473cdf71b3062cdf2392c8056346ac108d8ddf17cccfadce90171"): true, - common.HexToHash("0xbf4d15bd2be946337580081046294f2ec0d5b7f7742ae110b48560772932007e"): true, - common.HexToHash("0x7ae7dc3146e3e5ac5b738c2cc23a0fcdb272857ec98990138f631d429bd1c10d"): true, - common.HexToHash("0xa37071c292580a29b841673e5c7ae17d70325f46e189123575d7d61ed46f1530"): true, - common.HexToHash("0xb66f2700ec1a633b63b1e73916b7a9d636737958dadbe05cac8ee6b534f1c2f7"): true, - common.HexToHash("0xf645964ef20d3ef805cbebecc5ba93a783f68c27bbde2e67e4da4357e452a0d4"): true, - common.HexToHash("0x2237bd81f9e417ee2acbcc511fa8c7bafeb796f8678287cf6433517782722f56"): true, - common.HexToHash("0xb6aeacaf6ce291dd2236b57110e61eddaf917bfba17fadd0b6f042b110592a9e"): true, - common.HexToHash("0xc8a2fe36186333753b09e9d673bc95ece9da81cf3877c4063967388d1626a537"): true, - common.HexToHash("0x236c2233f20d3e3b329ee048e077c94aa935bcacbd70f66182e3aad782c6f3dc"): true, - common.HexToHash("0xf21d46f2bbba64ea47dbea8fa145098360e0982013522c5ded753a412dd340bc"): true, - common.HexToHash("0x76ea80caa75f500ffd48e07925f470f62610d7d48e138736c12a3e430471a5b6"): true, - common.HexToHash("0x99260222f48cb3bd556d5d46fae19e486be1cc371eb2c909e63e931311d3567a"): true, - common.HexToHash("0x73b6f18fcc4bfe6930965396035a8201bc9c350b0f9fd5e13b016823c21e2f63"): true, - common.HexToHash("0x0720f1b621bd0af931169b9fe6b816e7d1f92b3d9ff72fc66251d163ec7acaa5"): true, - common.HexToHash("0x0a0239449da56134e61f578fa0e75f017ffee3802780915d9d8b0a146fbe3aed"): true, - common.HexToHash("0xb18ebbfc0cb685744c96934ee013880126b4123a591ff17b51f25b16cc731ec2"): true, - common.HexToHash("0x69cb1f04cf70b8168b81ea35617bb52f960eb9cffee8616cf5c87a46b83f05fe"): true, - common.HexToHash("0xab1cae5752ebbcd1ccd9d50bbfe573ad2d4cee2f5677f72a3a6c26e411bdab29"): true, - common.HexToHash("0xc98101b31bb6318efb5e259eecd9efb5d46a65b64ed8ad02684b46a5d169fe14"): true, - common.HexToHash("0xfe45e582ebf56fc0fb9a30b866f7821f6dc2c0f3809610424919ed477469dce5"): true, - common.HexToHash("0x850fb4fcb1c4eb1751bf8bae419732c8c7ac4272718c094af181a7b748419401"): true, - common.HexToHash("0x72b46a829e420d358faeef57f73e4986aa36e244bf33e1a766392ec838786392"): true, - common.HexToHash("0xb8408e13e11f4a4c02fc9fbfde65123cc19149e29b70713968ab6ce116cba653"): true, - common.HexToHash("0x4c2d7b44e997732c71296b87125044eae2bad3cd09f0ef7e8bb9eef87f779637"): true, - common.HexToHash("0x1ace21d7a3f7b3060261ed75f7d234d3fd66171411b6fecb05d6f4373857adce"): true, - common.HexToHash("0x9457e350ffd0ac8ea148089b37c9586ccd63284897795bbfc10efc381e416371"): true, - common.HexToHash("0x367fea4c7067e37dea3c5d27406872dd17e4e63040b12ef24ea1e9af866c17da"): true, - common.HexToHash("0xc6539dff3fa8e2fab045b538a9ca5b6b0cb1023ca58c7218a8852cc20ee67c46"): true, - common.HexToHash("0xbbab7d38146306af1e1b1f7a8e6c9368e75f9133a6ac7b88d02a296f90cd865e"): true, - common.HexToHash("0x54fe9336e2ba28b482aa3b78d2a9deedac82f1b25e4af5f5a8b769dc13693aba"): true, - common.HexToHash("0xd0d1777885ee8b011c7c942353efc5cf7bc02e0a42f63c4257e0e8fac63396b5"): true, - common.HexToHash("0x77fcb73a880654dd68b91af8b24dff9e7c28be7a19e7ff82de34f6de2f2a93b5"): true, - common.HexToHash("0xbe6a4feece860acd4bab390d2accb58fec2c03b37a798220017182e81a903f67"): true, - common.HexToHash("0xb5118e79d4775200c60de48978f20266f97fdcbb33c3234d08458d2e2e724813"): true, - common.HexToHash("0xab575b85d3f0716b3fde4e4277ff5244ae245dfd07e05622735e7486a5c61e61"): true, - common.HexToHash("0x0d531f7ed4af9c55edf38af1e7429514a45b5f16e8235829bce2ea65131673b9"): true, - common.HexToHash("0x6e76f60befb34caeabd5566751e93e46874d3694f9bc33b4df815b889c0297c2"): true, - common.HexToHash("0xffdda7dbd2f5807112f8b3988c0b00c747050d31660920886f39bae1ea5677ba"): true, - common.HexToHash("0x113b641a382cf80ca9b3dc2b072a8056d376b46d833589925531fd4e9f100b25"): true, - common.HexToHash("0x2ac59016a2937b12a8547f9ff0c02fc4a0d8f205dbb708ccb0f8e5d4745b7c34"): true, - common.HexToHash("0x19828b0320cc981ecdec521b0c7c72e6730046aaa6226e0e83128d3c51f1881f"): true, - common.HexToHash("0x8e6afeb54901d4349724a43eef7f2f20ea785ecd1b44d125a5ec14936ca276e1"): true, - common.HexToHash("0xe5d8a43a4e62c17d1571028813f301e093e79c857bce0fadb0ab52997bd1af60"): true, - common.HexToHash("0x798751d90ff2b90c29ce30757ffcb6ff11fe3acef5bb580cf71750edc90be2ff"): true, - common.HexToHash("0x33bf9bca4c6dcff9b17e35f9c8222870cb8e9da1219d2df8363ff7ef258c6b93"): true, - common.HexToHash("0x55a7c1c776cd43cd7e0a87a63ad575bc357323686b334a3852ca4a2761b36665"): true, - common.HexToHash("0x0acf57138ce7c71d026d6e476cdccb230060f846be59c2ee323ff076582d2a3d"): true, - common.HexToHash("0x0c8d1f7da83ca5bc0abe1199fadab638008301debe142a27d14cdc1f54d2a3e2"): true, - common.HexToHash("0xffd209bd5681e7e74b99e47b73953b19154db764714bfa4df9590e8875e07175"): true, - common.HexToHash("0x21c70f56a2bea486b26d8565285e8b8a6e85d2a16cb5a0e57c95dfaee048e5b3"): true, - common.HexToHash("0xade1bb9ffa5d52d1e12d9ddf003235e8983809639d2462dc373c0d920efe634b"): true, - common.HexToHash("0x7da2f3e0697b60d693366f882806d32ec35af84f8c2c8bc89ece7774557202df"): true, - common.HexToHash("0xa5650fb960e886879216da22eb9ea63177aa43aa4d20e198ca472da8f5e4a32e"): true, - common.HexToHash("0x7e6f46506189270c2530347adfe2456491cb07cb07bc4ac511f5c545ad6724fa"): true, - common.HexToHash("0x05eaebf5429604bf2f0b92a0d7d0636a8173611988ef75129d6de22ce583a8ad"): true, - common.HexToHash("0x18403c144f4380bb832711050d53bb9d0b43b830946bf2cf074174ea122c1fd6"): true, - common.HexToHash("0x6f762831d67932f41005194bfff0b49ffa4839f27d9e55d2f68a6bebb4148be1"): true, - common.HexToHash("0x24fa2624b6a73fbbd3269f609084e11f02a9a0565ea1cfc955dd08bbf4e93e8f"): true, - common.HexToHash("0xfacb2c4eaca0e6b6bdf46bc2fb5a30941b24261539f6d1aaad6af48e7e32eb99"): true, - common.HexToHash("0x3e80095383eab9070b2da41bc76958c859cf886ca2cef3b69b38634ef60e643c"): true, - common.HexToHash("0x477967803c32f9d8810416166a0d0c70ac96f29baf249538c833d1e15530ae34"): true, - common.HexToHash("0x0927b06be7294189397752bfdd19d7fdca7d9fc50bae4a7dc4acf0aa0d7230f2"): true, - common.HexToHash("0xa0dd365ef949e23081af76677063b44fe10525e5212c7bbe7e263f3b7603a615"): true, - common.HexToHash("0xa8c5693a8d9c5c32d9fd133ee29fd9436cc21febce8f7883d3f5a403cdf5a521"): true, - common.HexToHash("0xed20dc09ee1b78f068d2fb2fd007a42886dec930677ec4bd31bc02e827cab788"): true, - common.HexToHash("0x45eee8aa5889c70fc20621b016d4ea186cd59c3b683a6a47cf5de4f455436cea"): true, - common.HexToHash("0x92c379415f9d010ba059b36ac210ead9dc42f3dda5f890bcfbc4e3714f93af3e"): true, - common.HexToHash("0xa3e2ce9ac33f84cc78c640ce960bb62b7fe1b885013d0ae634c8012842ce7423"): true, - common.HexToHash("0x35d8be25d67b833356e6db1c3e33487129e10a12635db5bf13373c875e4cd9b3"): true, - common.HexToHash("0x19b10401c0e9dbf8ad02031358150815f02be90f3083c67b604d9df9aca03085"): true, - common.HexToHash("0x88cbcabd5b65606416e048856b8d7feb997bb93f525e474d3cceeb300d74c303"): true, - common.HexToHash("0x7d866fbf1ac745d16bd8431993d2c8bbcd32fd7bf3a01459f621fd2d49470cc9"): true, - common.HexToHash("0xb2ab4152f2bb2d4dc7af2fc11b89583b2c5667030e576b6497a2320ec035e5ea"): true, - common.HexToHash("0xb5d8a759c194eade592e518191a65272de336c84f7828815b2009f430aa0d83c"): true, - common.HexToHash("0x5bf47b95ceb2890240f5e9727f220fffdca54bd3c74a70309d08e30840fc8294"): true, - common.HexToHash("0x2cc20eeeeb24da41fb117a737c9f9e0d9de5c31174d92ceb7bd5edc3f42929c9"): true, - common.HexToHash("0x18e1d36315a8c6eb112fffe382dbc80c8cafb6a89151bfec0b3b917ca5c9946a"): true, - common.HexToHash("0x3aa2ff15a88fcb3dac4533be81cf47c72c92848333af211906afe50abeb460f6"): true, - common.HexToHash("0x7c5e81c71b1c246f8965450aa566ae08871e8c2c01d2eee3ed5dd41ee5e8a212"): true, - common.HexToHash("0xa5ad4b5b823393d95b2912834ad1a0a9d0cf1ba6df916fe86a749f6140e7546c"): true, - common.HexToHash("0x350e68fdbe02ff6673db3b27fb7463031de915dd4456f7e0539bde3a0afa1057"): true, - common.HexToHash("0x5b059f7a093d7e9d09e98919313c0cf006e7ed6322d7f9a4aed53825ade18351"): true, - common.HexToHash("0xb89ce69a3565a7437ea9d6f2ece9abbfaf5dae45a6c131190d82925c6ccdadb4"): true, - common.HexToHash("0x03537fdb3a1f18dfa1296378ea0971a223cfd3a0fdba7c2521d9f6ef8d9e3e34"): true, - common.HexToHash("0xd2c6aa5333ea92b90bfdfb861fa9cfe7aa5bb6e332394a018cad4117f4aff8c0"): true, - common.HexToHash("0x883c926c333ba672a5abe2da472dcd07ee8e020a309028381d5788439f106852"): true, - common.HexToHash("0x2579d36234e157edeb3a942eb34439875b300bbc926d5ec8e6daeca9a9ee1fed"): true, - common.HexToHash("0x68d43eae0b1d199ad4ea7b15441e0d3cad35e486783929c087f4fa7ba2d8981c"): true, - common.HexToHash("0x59726a2de2a2fca17762035a9c9d24676632d491789daffd54c60362f658a5e7"): true, - common.HexToHash("0x744b586ad046af154e03b5cae4d987b291b57e19f73fcfa64f68e5481439047c"): true, - common.HexToHash("0x37170b687acfd1c4ee47bf7bd2643a21ae115adf464b153b379f01b9bc4b7209"): true, - common.HexToHash("0xf4fb8482b1327786894464857010110b3443f531c92f91060ca0094b7dc14295"): true, - common.HexToHash("0x3e5aa87cbf3b4f6e52a235435ab02c9f7899854da1a5fbbd7c221241dee004c0"): true, - common.HexToHash("0x61146c1ffcf32786ddfbc9575db6724978775d572ac664a789ebbeaaed6ae07e"): true, - common.HexToHash("0x2d82a5e6fc9e6592db788b8edaa8fab90cbda6bc0e0194144c4ace0ab6b6a77c"): true, - common.HexToHash("0x6b76b008c36a54d4ed1b739289d22650b3857899aef883eb65126a4d4caa201e"): true, - common.HexToHash("0xbcef001ec8894855d90c6d22d22aea1c97cb491d4dedabdb8448242d53b26185"): true, - common.HexToHash("0xa3dbcdb22bf72a038dd3998ade312aa6a8a7d541e37bc5b1f4c484afcb3aea2a"): true, - common.HexToHash("0x1e24d23fa9fec24e99d193f528a42d7e666fd6254ba72f663b1bf60ed4990c8f"): true, - common.HexToHash("0xd050817e5ad5b99126c3b84762143e5169c93cb56b744d372ba4f464c532673f"): true, - common.HexToHash("0xa989f5f2bdb3d4d492910586fb9c8c754934d4dc5074c6d84466ee51cb5b9cde"): true, - common.HexToHash("0x82a36b9f388405119c1bc8fb6d014599dcc833ce1d37892399a98ac0d70fb783"): true, - common.HexToHash("0x67b8413e376298ff3ab5defd8eaaec3b66d78b5b41022ff2748516bf97b7c70d"): true, - common.HexToHash("0xa634c929b55bd9b7d726d25c31c824d75abb183359e456665b9ba0ab50edb725"): true, - common.HexToHash("0x3253da4e2ac5a133c7834439b20702f44ad2b58de9e39fb50275a5a5a007296e"): true, - common.HexToHash("0x73f3d07a57dc2e3baf13bfa7c4b5b1dc6dfbb0d79ff5d13ac797482a2bd65b0e"): true, - common.HexToHash("0x8e3780116d48096466891db19b5a24973de96a723d5754b095df049bcdf562a1"): true, - common.HexToHash("0x3f2ccfe2ccd8989c241620e4bed556e8b6dff0ebe312f4d25311aae3e0e61ea0"): true, - common.HexToHash("0x713af0f6b9922898656ecbf49daf5f79d72a6bb5e3b078eeaff4ce54cb8fd81f"): true, - common.HexToHash("0x46dedcb7ec4def9956487a2d7cf8bd30b74cdabf585b00e6efc37c38e84b5154"): true, - common.HexToHash("0xf68ccd0cc1bf07a545d0200c77fcb06b504cffa187bb5c375b535c8f8c9305e9"): true, - common.HexToHash("0x639535f1a7d80bb0003748589e71c0c050702526cdbf243a6432c6a6ad734aea"): true, - common.HexToHash("0x7fedad28ef88756f9c80e5aea990c430e6a4c614b24ae125ff253eac1577147f"): true, - common.HexToHash("0xfac2a4b7001bb409c664e3e4e4f89f248831525ad16c5b6369eb860885635ed8"): true, - common.HexToHash("0xc3d8a64a1eb3e10c21525a7990e464fb76d94dd76c052daa0207c566f5e4d6ca"): true, - common.HexToHash("0x16e5d2287e000e04f0c95829a0ceae4d368e65c4d17dc07b409eb61273fd5af9"): true, - common.HexToHash("0xa8fb1e0f911e8db0748b1ae7d1d31d59033f310972f8b1201bdff8a22830c960"): true, - common.HexToHash("0x5dab9dceeba3c2f5952c50cb9ecaae771fbdb0e6fc5a5ecf70cc82a4c8725e5a"): true, - common.HexToHash("0x3910f2d251028604054b11859f3592f29b66f88a301d31654c53eaa66fa37723"): true, - common.HexToHash("0x9fa0f1f2e6932d52451b3acbd1e057786c3bf9550b5e6cf37f556a8f79eb4474"): true, - common.HexToHash("0x148af6c278250b7c97deeaa1289fb191eb29de28ee42051f9c969f7342e8ed56"): true, - common.HexToHash("0xdb3a596e80218e6d142b52cdf61851e43899fbe89117f2414056da3568a0ea5f"): true, - common.HexToHash("0x244a347bda56bd37fe5b8933730e0ee84ff15446d79a0b793410749628c457d3"): true, - common.HexToHash("0xaea404f865288054dddddcbbbb31fd9090a601b116e0ac120ab4c892fb47b65e"): true, - common.HexToHash("0x78bf89ee09ad288c8ec2e87d1bebe5ce9b58eb5af4d58c1a856ce43f97fcba25"): true, - common.HexToHash("0x3572859acce625f32d70d77bb17535fd972eb30394eadb19806f02998baf141e"): true, - common.HexToHash("0x64a1a22bf403286db4b39644247061b7f5c6781e5c8816d803cac6081b55e446"): true, - common.HexToHash("0xd9b6ce7d25426f881cf1cbb1514a2ebd8119dd78ddb0191154d5abd76cdbac15"): true, - common.HexToHash("0xffcc72ae29d918b6c9f1e58fc46330d34d45cfedbe44f86852939cb3304115c8"): true, - common.HexToHash("0xb9f1cd17e97472d860ccec788d277601b941a9485722a8fa3aac64a0da99b3c2"): true, - common.HexToHash("0xd86f39ccb91129489184c847a46e762920d686a8e9ba9ef42a74c386de5c28bb"): true, - common.HexToHash("0x0bc931fc592408190e47c2c2fed8331cef1499b1a81a292b970711928f2b9d4b"): true, - common.HexToHash("0x0bd27ec62641913813a6b650fdfbafaa2d8f2fc6d2059cbfcf5868eafc0eb997"): true, - common.HexToHash("0x8c81af7da6a9a68fd6d34e9f88fdb523134af357d683815bf0c576176b6f5cf0"): true, - common.HexToHash("0x179a4181fa1871a7e211cd94b4f754d577ad53aa0b15ee822cc5e0532f243fdf"): true, - common.HexToHash("0x6da114df55e8a7a95830aa39a4b28da2dacedc1020aaf23d846032dd83f84f50"): true, - common.HexToHash("0x1d1ef79cd1901d56838161136df871c5c96b2a9841683da30b7f37b2331e6a15"): true, - common.HexToHash("0xeaf11a62980effe9b1622168870b005a52695ddfd0c6d52d0ad7cde2158be9b3"): true, - common.HexToHash("0x80bbb4db938a157ec217a9eadf384671eaca03fcd57e62871b9af213afd9f059"): true, - common.HexToHash("0x590e02b4e4c6f8e1338733b36837a80e33144ade856e8b27d4cd4616b5fcbf49"): true, - common.HexToHash("0x9415e7b9cf88d8bb72f8608fae85f3021d595dcb36acc4881d1941baf6ea2e3d"): true, - common.HexToHash("0xb44d176b038f9059da5b4a62ed328365fa5b98cc687cbc28f2a5e9737368f4ef"): true, - common.HexToHash("0xb5c1608cecf71433cb507f0e7d66ae582d3f8056a820764ab764ad5fd3e1fda2"): true, - common.HexToHash("0xa9e97299b7698f3ae23458ca69a5ff267c57f5628f495513066138b6c8306293"): true, - common.HexToHash("0xd70daf2f5162b4880da9b2be3827c56a372ad4d258bc5060444acbeb31c2b878"): true, - common.HexToHash("0x7f86869a6e581aaa8332249b962c260a0f29bb172dd99cf64ed0c3b641f82e43"): true, - common.HexToHash("0xfae47919914e93aa3e3b8e7fd36daf145e3a41ea7b76dec1c61a1b5f41afd809"): true, - common.HexToHash("0xd7ca1770071adbd2acbc02a2290732f2b024ac80cc01583475583746f71974f4"): true, - common.HexToHash("0x32e2c95c405acb39554da71c254a44c373e5d1018acc21ef0bf1eeff3906d814"): true, - common.HexToHash("0x7716be1a7bd4863d93eadd513e40f9dcd40352d9734d0b5d66a5c588e8997e77"): true, - common.HexToHash("0x34bc2ea7095b4b8d5d7cbb81eaac04e21bffd0af7ddf52327894254f53ab342e"): true, - common.HexToHash("0xa43d1d21ef4b48de0ca5924d8d7bd0811bd4bac6861976c9429e478d24c21a3a"): true, - common.HexToHash("0x780ab503c57887c5558c5083911379013a8407e7818617ca2e87177a21c8a689"): true, - common.HexToHash("0x3f6970d898c5761786e1b708367c0f3fa2a64c3eaf234ceb29d18252ffdeb378"): true, - common.HexToHash("0xd7f98a68d4d7d2bb32d546cd0a11001db2b6f341f92f72ca34a98fab7ddfbc13"): true, - common.HexToHash("0xc36cf2765c80cecdd1010b849a8f94e2f8c23335a43cd9a3a11f62369171421f"): true, - common.HexToHash("0x904830500f9c9ff58f57873346e210be4049af508fa539b3476835c8cc0dd879"): true, - common.HexToHash("0xeafcaae7452a683274851a5aca546c0421b3911d0648f0b67b027d22c2dc2fc0"): true, - common.HexToHash("0x7d874487fc41abb071233f3851e87fc5530153a49bad6b9c3d84bbdcab710f72"): true, - common.HexToHash("0xcaa4ea936ae48fcab50e6ffda0e8702db8de92ac57ac6391bde4a96ac4b117f5"): true, - common.HexToHash("0xc36c5e73eaafc50c5fc43a0bb32e95b938fa287e7d43e741ef5e88e79dfc78b3"): true, - common.HexToHash("0x74370c278f002286fd4541460074a858be253c852424904b99f30f1c0742aa9a"): true, - common.HexToHash("0x73db54b08251674638447d6d145674bf6e39b892151380f6a176320eaa1ef655"): true, - common.HexToHash("0xee6ec48b7b7808dba0fcbc791289eca0a84382c6e5ae35353f8b2bc2b7d0f428"): true, - common.HexToHash("0x5bfb047788e6961119207ea10473640322f28c88dc16f9b2f9c2a2483cf60f3f"): true, - common.HexToHash("0xe286941284748b10ad4f3f51c3b0cb869b4b7be51bd87ca9d64dff56063827ba"): true, - common.HexToHash("0x5567745614cb17cc97e688d8f0b15c1936931b7c9c1937f1011ba8bb4e61d830"): true, - common.HexToHash("0x87ba74bdf5dd6ae6d45d1d6ae4aa31af364e98a1059b0e75cca441402bb4efa0"): true, - common.HexToHash("0xf9dc6df532fa6bb7790a794590e1d40f566e254f0219464e4a730b48009195e0"): true, - common.HexToHash("0x8159dab08d71d8b479a4cbdd4c2c6b369df9a131e5c74b9c14c2adcec2744c39"): true, - common.HexToHash("0xd12edb645fa6aa71902fbc415fa2db39f1602735a7bc425d8548212128793bba"): true, - common.HexToHash("0xe5203ed06219bcb934751ae0a9e4744a914b04248c460853f6b99b16142a9720"): true, - common.HexToHash("0x4c34932ead183717ee227516f256b40bd73ecad4819c60406805d0420377f0f0"): true, - common.HexToHash("0xb282b3217dce3723d6a982f8ded91e59ca335fc27610523390afb345d11baaf1"): true, - common.HexToHash("0x67b6db72f7ca9d7695af6e4aceaad3f693505e5702f6e1b42a9f8065868bc6f4"): true, - common.HexToHash("0x71aab0060f3ae3c8439de215641af042760a6d624c6502b033f2d59c6281a736"): true, - common.HexToHash("0x3e95c467e590cdfafc7a5adbbd1487004b0dc18260387f2f5af15c1e011ad668"): true, - common.HexToHash("0x753fc926864f08226f028c08c8dc748e0340431e64745328a7c1e06e65eafdb9"): true, - common.HexToHash("0x2d49d765c829f249c6b629dbf54ca1d54376144bd4c488b1edd30ca84200c368"): true, - common.HexToHash("0x530712c7e6a9f970fa0d83c3b22ad6628aa109f4928f5460870a9f9aaff01dc3"): true, - common.HexToHash("0xa8c4d71003d470b9536f17c11e8336554e7a8706adc6d8681370bfdf36fff70c"): true, - common.HexToHash("0x4a2e9e00fc6bfc6fed3da6410d0856998d57d10261cee22cd4427ff91dc29eb8"): true, - common.HexToHash("0xabec3bb820126376b052aee6f343063a4293c53abcbc232586fd2bb1417b3b28"): true, - common.HexToHash("0xba818d15e0843d0a74f3297a396338c86b8c12c9e087107cc686c3b5a4f8840e"): true, - common.HexToHash("0x272559357d7cd41256f125dd4aa728ecd28772783946b31d2b2224101ed999e2"): true, - common.HexToHash("0xa1bcb8240496986ed64f22d7590c67e95be7a63c27acc51ab89684f7b5e0713f"): true, - common.HexToHash("0x423872f6692c6405821ea768503e0b6923231e4b9ef6699451334a4e3e4d0d07"): true, - common.HexToHash("0x2e8b8d10d77b44430f574d139858ada53290a07bc6a6f5d9508bc7a652ce515d"): true, - common.HexToHash("0x9c593aa7430e8ac3b44e8e68a90a8a6df48b5b30427f97f54ec1d563f0209564"): true, - common.HexToHash("0x6efb3bfecfd8d61f402f59f796bc85ad18c9147c08e4b059975e63614656838f"): true, - common.HexToHash("0x4dd40515bcf97067419544de7c2a51b3d5448edc0cf33c9ef9e16edd8ad81c40"): true, - common.HexToHash("0x127881f7194a24df7cd33729dcd11947e16564b3cb43826e0cbcccb6edc64797"): true, - common.HexToHash("0x9fcbd5808133ec75924608286a25102769b4ae8a6b10612ad129508ad816a412"): true, - common.HexToHash("0x837782653e7f39e0562326df35b4a8bd27bbc2484d2280e2a150f694fa4cecae"): true, - common.HexToHash("0x4a4aae2db561b4469ac9bd09d1ef6faff0850928b007119ad9dedc61c6f96da5"): true, - common.HexToHash("0xd98b7842c6c80cf02a7bec2f236a33647cd3d3f741b38479955f6a474286c570"): true, - common.HexToHash("0x52a3ec60b44fdce888d98190521a7be54d2687452c55e34ed4a3853f241a18db"): true, - common.HexToHash("0xb38737b99a6a62b78737b99077f7bd97f4398133f8fc1a45c1eb7a3b6bf41870"): true, - common.HexToHash("0x9e5840113b4e33f2344c316317c7ce5074edb2f32de3f210f9292db3d08878c3"): true, - common.HexToHash("0x9bef2e9a474fc1c9bf4ccbd404086fa45297e79565f8c8489abc2f83aec8f919"): true, - common.HexToHash("0x8591daff901a9af8c159cb7ac2cd09d510acaadd862ba736a55c2975eb7f311a"): true, - common.HexToHash("0x7bd9d9cae7e4a8898a91cd529f363ef747b94971e4c2aff877be519f8da060d5"): true, - common.HexToHash("0xdef544ef68a49bfbb7028b21bf08236e17da6ec0aea77a1b0c41128e8b199548"): true, - common.HexToHash("0x5e8045220c20d39ad642f1808efa9278d9ba97a10b08b494ffb09091bce51f4a"): true, - common.HexToHash("0x772aa4690924530d44f79e338126f05a76366fc47b804d82f1f534755fae5797"): true, - common.HexToHash("0xd0adb4f7165515e1e9df62ca36f9f214b3822eec5f703d25f8c4058b1f35b2ea"): true, - common.HexToHash("0x990748ad0f88c0866da150b4575777ac213e0d2f4345729adb0febd095f51a84"): true, - common.HexToHash("0xb6c38371b38c930c04e02a97c77d6013db12843e9c4c2b88465c49079f77d3df"): true, - common.HexToHash("0x5f9e9afa92c4c1d42c6dab7538d77254049138a9c765a28fe8d1fba724101dea"): true, - common.HexToHash("0xdbc3e3724d496986eec72f360caa8c3ae83279117d8efd049712d613e5724a92"): true, - common.HexToHash("0xbb381f4c47a3326a013fc4a757c6e8fecf9adbcf38a221ca1ee562526a41b024"): true, - common.HexToHash("0xf6078258d7485fee6db07eb2f5d20d5157c02bc8dddba69f1ec8c661ad9bd66f"): true, - common.HexToHash("0x98e9bb0dad1bdb04128f0265b410d71b58f16404017d5502ea4f412bc65db81a"): true, - common.HexToHash("0x1108bf5b6a4b339d16d3b252b087929fef0087ea915183a1db476fb4607d1c02"): true, - common.HexToHash("0x3ed0352e4bedf7f836188bcd2abcae561961d607a220f9d07cc57bbf6960e188"): true, - common.HexToHash("0xcb62f7a81c38ba42387ce7e6c1a56b6a0072d0697df3c065cf87e1dba4ed6c33"): true, - common.HexToHash("0x093b18b83fea7cbc5569e42836a51237bc8ed6e0da3f9435562945d5a49ff110"): true, - common.HexToHash("0x2be347241106f1754bb7af1b18799ca74b884d9b6c42e5135b55585f98a380da"): true, - common.HexToHash("0x194eb7f98f040092a1b8b68864a41aa2439d224d087fc5128275279b3f336665"): true, - common.HexToHash("0xf6714d74ccc43f265477cb0fadbc73b9ce51d9f8323270a819e1687da4c55f99"): true, - common.HexToHash("0x004f5e3dff0d0e2645d3b2e81eec5b50e8560475959d7b993147f36a25ef0f95"): true, - common.HexToHash("0xca076462162e9cb8c016c1258e26438827fb7ede2e6c9dec56f989dc01a783f7"): true, - common.HexToHash("0x28a02799c47aab7c109cd50321a6d3617058bbbe536311f99c21c11fff2970c7"): true, - common.HexToHash("0x1388edfc94fb2d11302b5fc31ab83f5d796778133968cc6a2950928a252085a3"): true, - common.HexToHash("0x581ad570b8d0f5f1345705437ef680a18091e6771cc42c294d6c171ca7fefdb7"): true, - common.HexToHash("0x00be6b0c4155e469655492d01672ffec714f00f395888cc69d53a13940fb91b3"): true, - common.HexToHash("0x5516f998321e79877864ab7f317fe1270c5fcb5099d3fe2cf3c825fcfabb24de"): true, - common.HexToHash("0xb61bb321f0ef4a564fe75e80385e8e830059a754aab3f395cf5bfb8dd5b4b9db"): true, - common.HexToHash("0xbcc7e468a0600dff7afb549cfc9d9202eca8815980fbd428328c91590c1fd356"): true, - common.HexToHash("0x05f5049d9ea71535626b77067fbd6568629745f1ced245ac8d409de5babe5513"): true, - common.HexToHash("0xe78a7364011ca1f388c8eca7ba8c6e5fad08ce9149185cfd8111c152fa934d1d"): true, - common.HexToHash("0xcb75e880f94dce56ea1ea2f6f741a29203895743743036f5da6e44d2b02654c2"): true, - common.HexToHash("0x1bab795349231658eef76bc654ca2aa73a517abd08ada0942f837594e69e3014"): true, - common.HexToHash("0x4264e2a70f1c37c5c26f346b92bf4d1aa5ece8578211fda4b549569a17fbad12"): true, - common.HexToHash("0x833f8e8f29567f0dc34bc925cbe1fd7eac10fa77a1c5413cbf42b63c6790bc8c"): true, - common.HexToHash("0x28f3b4abb6439c1b97c09905f6909b32a2ba79a6857581d3906d303a747619e1"): true, - common.HexToHash("0x2f6a4453760f871f3cff672f6da04163a2e9a4d7580cbcb494479a21fdd3dd43"): true, - common.HexToHash("0xeb177c04987744013ca52be2a2cbf24376724d4efb4039ea96edaf6e2bbd8978"): true, - common.HexToHash("0x992864aa379aaed1ef33fc87871488f0b183621aaf8f28198c295358f3394d34"): true, - common.HexToHash("0x9a31cdb824fced6aa40f699fcd1e3c856d11b525e211f98de90fbb4eca0faa88"): true, - common.HexToHash("0x146213a9606972deadea418103725bb0b14079ce0f1adcdec3aa413e531e1749"): true, - common.HexToHash("0xbaedcd710b2a468bdae1eee1e4775fbd2b3badae318e416c7716a4f2f90eb001"): true, - common.HexToHash("0xb57491da3d4e81282adb0112fc83cb307a59a712153053ab2a1e697189ba4734"): true, - common.HexToHash("0xb483cca2377e9d193bb8da09ffe1be4e36241caa1008489bc37ed41ce2557dae"): true, - common.HexToHash("0xd7f9a02a26d2ab4c936ed6f14ba6abd71e47255627bcf942db57672958928966"): true, - common.HexToHash("0xc9f3d8eb3e4c339e40c53d30a902a50a733353488d13ab606be6cdf6c772527b"): true, - common.HexToHash("0xf85ace1f4bb51e6dcbb6285d46f29970ea618fc550acaeea744b962b37f966de"): true, - common.HexToHash("0xd6193dc625a14956ebc8e996c570e6e2e01d5a5792e50b6b466569c76b021c21"): true, - common.HexToHash("0x35a877141fe3cd092db4c72955863442b7c9e61839a995020fb194c901f545a0"): true, - common.HexToHash("0x2e829757dd1034090c0d71d0367baa6b097e0ecd23c53a61f049d84641bd7be6"): true, - common.HexToHash("0xde63a480c9d5fc1c6e2adf3a8a685acd8cd57c2710cb2576839510454a9851e8"): true, - common.HexToHash("0x327fd05aa511196181b8f2743dd6d3a22e409c043a7d8977737ece5087152ebf"): true, - common.HexToHash("0x3082a3f45e20753d8d1148376797bfd9732828d3f0b740fce3c7a2666dad4eca"): true, - common.HexToHash("0x69854dfd05d67e9c80e9b3e49e721360b7befe462dc40825355a0d9cc99e9d32"): true, - common.HexToHash("0xd3cfb856d3c835a8fac53cb3cad4fe200440890a7a2f687b6d6d4b666046db76"): true, - common.HexToHash("0xd4bb8d25891454f2dbe492198fa6549239809b8b5a3137a9ef637bfda3f5efef"): true, - common.HexToHash("0x476054604ca96a843fa91314df7b1856f723e84c9498189aaede56a4d2c7f5d4"): true, - common.HexToHash("0xcc7591cb9cd6269bd83e550351295e4d7e3066c8f5a33258ab8dae00d7ddfec4"): true, - common.HexToHash("0x2e14b6d8ee42ee54f4d373c11a68e66dbece9d9dfc6633753a4a5056f35b5952"): true, - common.HexToHash("0x7f5a26afdf79b7ddb4c5e4a356effe071d739b84379a81e672baf8a78673fb72"): true, - common.HexToHash("0x89c416e52ee67dc53b45f4a7f1fc03cc976cc257328ac7c048884ef2ca6c99e6"): true, - common.HexToHash("0xf1f695d201a7496563427767b27c9f3bbf4f8291b01c297903acb37f84be7bc9"): true, - common.HexToHash("0x20a60d18085b78f2163a2b7d4d08d5410573c2ebc01b30f8bf029d985812f6f4"): true, - common.HexToHash("0x9c35e2ffc563222ecfe27935d6c7c4c325cbde95bebbab8d18fdf135fbfb46b4"): true, - common.HexToHash("0xb0b2bf26e60a213f0a378182596e36f3041fb42c1ee3d7fe7468b5250b76ba34"): true, - common.HexToHash("0x0d024f20d75b7c81af62434680a45ade1a01719eb862260d6e791bc3a1b8b762"): true, - common.HexToHash("0xa374559df771d978845969d85f02180afe3b80812c589b6a6dc580e6baab81f4"): true, - common.HexToHash("0x7a4a5a93f63a821e8aa3cf2d0b22f9b02f2e195aac6b6b08a29ccb8116c874f3"): true, - common.HexToHash("0x7300ebd92b171660aaf00edde9cb1afdb39767d662642d1391f156eb5bbe7ff9"): true, - common.HexToHash("0xfd19dda835ad91cd03e065e93257fcebbf9b122c5bf7e9820228d4d1e5544cc2"): true, - common.HexToHash("0xed0c2a4969dfd20ce9199648a3e77ef573e889038710bf00e75bc9c68bf476f0"): true, - common.HexToHash("0x9b10cc81aff67cbf57bf5c307007fbdc6bfd915bc120e4c594e42a63db6afa6d"): true, - common.HexToHash("0x1a1b2c49cd6536577a6cc02d15cd385645dcbc643ac5a300a8981e6471457fdb"): true, - common.HexToHash("0x6e1938701494545f10f674a095d577768144e13a81b32753a74abc8f46be4ec6"): true, - common.HexToHash("0x78bfd2df5503ebd52f84f4886e5373fe8a7c6b1f46a0f4381bfba24c6efe3899"): true, - common.HexToHash("0x882214d78a59d043ea3ab71abcdb262f3a7d762e38fbeba6669ea4fbbebe5a10"): true, - common.HexToHash("0x93df4ba5f5d570897a5a433dda2da358d0ccb79fa15ee41a45b99612d829633f"): true, - common.HexToHash("0x2a640b8c9390b0c5f4c6cb4196ad209ef2c63a46c52315b1e2d4953d59198d65"): true, - common.HexToHash("0xc59eae025a9eeca2f9f2b87cec8b41720e6eb47e0cef6e52c56212baefc36618"): true, - common.HexToHash("0x5f154a20951e1ef895d1cc486002318075d72d1fb9f7f1607cfeb242091d31db"): true, - common.HexToHash("0x3e5a23e2eb389964528c2293bbf08a685c2e9f26e1611e187d2a52d002a04762"): true, - common.HexToHash("0x2e8db1c353571d8c11a05ff9e7f7a24d48893db4ff299ea3602998ab97893f83"): true, - common.HexToHash("0xb4a32c0eb55c502f3c637e1e6cdc0e3b094173ffa40faca697b5b66515e68f0b"): true, - common.HexToHash("0xe8fd82bd5d6a886476a38507c13fd162eba008fe2d3873a81b949302bf3e308b"): true, - common.HexToHash("0x269ec6624facff0a4a547aaaf0b49037ae1f2bf311fae4ef787a36e9a13af86f"): true, - common.HexToHash("0x1048b184ed8969a506e9fdecbb4fdfafaedb44b0429a9dcbec9d991b82927056"): true, - common.HexToHash("0xc9e3b6614f421a1b37c626257830aebbbb9cd0c7618dc156308d1ca1efa7973b"): true, - common.HexToHash("0xea9cc67a110e5c1a6244fcb8e4ba63178d0a3cc5687dca01ed2675178751f94b"): true, - common.HexToHash("0xdff8fbe6f5d625dabe5b4fffd6a145e4b3ae5763d3a0be0a1eedc9c20fe6fb11"): true, - common.HexToHash("0x26fd8461dec36e624a375174d872916f2b9b23d1f23866007a1e1c3f943d28ff"): true, - common.HexToHash("0xab1fc2ac93d6df48899054bd7d8da313feea30d91aef542509d0dfa45c22ceb0"): true, - common.HexToHash("0xafe98ade27da80cecff46e5b641deee1779901ef0178541f235d9c577d98d255"): true, - common.HexToHash("0x0d00bf257e05d604491c4773e1e725b866b48e62f24bb4cb4be799dc962fdd49"): true, - common.HexToHash("0x37671711cdb9accc144bd742e5558a4e9fc5dc2baae6b15a560c0cbbe4130393"): true, - common.HexToHash("0xa67a3accf2c5b54b88a1d07c75c5b4c2eea1b0f52acdda3d97d9bae26f865582"): true, - common.HexToHash("0x8c5cb67d3782197e42329772e8990545fdcb58bfd488f454ac254e90ba30c50a"): true, - common.HexToHash("0xb36ed550e87e15d1aa8bb59439be6d635fc9d779e2ced7d73da79177842707d4"): true, - common.HexToHash("0xeb1752d9422fc15496ee6d92caec3065ead3f381e6296c0fbc55fd52ac93bf1e"): true, - common.HexToHash("0x87f8b2c0ae039e2eafe10c04aab0ebec34263fdb73052cfa282396b93153ae14"): true, - common.HexToHash("0x489c379bd5d0044a76efb7691713e66476b82c1c55de968aeeb49d0eb8854f38"): true, - common.HexToHash("0x4bed8f739faa4a4c507bfce715b6137e4554428660da48ab527fbab3996cc149"): true, - common.HexToHash("0xfaf7976507ae217b6ec164acab20170d29a8dce7d2121173765f50553b01a218"): true, - common.HexToHash("0xdc076528dd1db684c4e20558870543bab10ea3c4a9847df0403e060dee98f676"): true, - common.HexToHash("0xc098c41ca5cce94687ab8f89059b49e7df564737b753e033d120817955ec7b06"): true, - common.HexToHash("0xf1013ce99cbb1c7e96a410ebf4e54ccadc6a44efd36d3de10f3444f135ae8c74"): true, - common.HexToHash("0x9dec4be2bc7d18d6126cba51a6bc37a0fb6f2ae7aff93367665f49672097c55b"): true, - common.HexToHash("0x9884d4030dbc8f58d18da8267dec0cf11d10f415134b144e845245f8132f52d5"): true, - common.HexToHash("0xbb6ea9b7b426c372215a425e8f1ca1c1550c3c94367e77354daaffa06b8878fd"): true, - common.HexToHash("0x0c2819752c4f4107aea2ebe6b6daf90d222a19d6f94166ce08c1559f599f706b"): true, - common.HexToHash("0xbca81d7e2ca19c797e21c74ec019e8ce355f8403e81ca19c6a3479658aaa307e"): true, - common.HexToHash("0x542ee52fd50a62ddf1106cf210a7b6655292b9acdc0edafdf06d89803de2b6f0"): true, - common.HexToHash("0x1d048a0bf1e66e06f161baa7701e31d5db89312496793511f57ef9bfd4b1c6a3"): true, - common.HexToHash("0xfc7c666be19e0aa9ac5f8ad05a5d90e0b3231c62b9e6009fa757576d0781892c"): true, - common.HexToHash("0xb500bdd7466cd1d9ecc8be61e7a5b75daff16b450954171f98aaeda88e1eb871"): true, - common.HexToHash("0x98569b231a5a1e2dd7ca4d6fb65d8042c8d920bb93425caa6e8116c660de6dab"): true, - common.HexToHash("0x97e2de25c05b8b1dbebc5fe4c75c1e339d9ad7b80ff4761a826a22a3bb8365ac"): true, - common.HexToHash("0xf5fec74ac5774079edc42d88b6c9136d928f026226e07ec753d63cd12541197b"): true, - common.HexToHash("0xbbf14fcc917afc815811d50b79ba70867ca2e5a3dbf8bffb4c5a6b3ced2646fd"): true, - common.HexToHash("0xc77526b370fd0a30f532e4b092151cd5e1f50d4d97ff79249569e2b4106aa52a"): true, - common.HexToHash("0x9f431d2e2d3f82e02106768cb7045a4f4fdf098ea166ff9773377e3c438bb88f"): true, - common.HexToHash("0xa407af5e865619b5a59a52c123c8850945b8eb4b8da1585e903fe68f65933f93"): true, - common.HexToHash("0x9f25b2ab3fad6bb8a68ed301d00a133c90e258d53492569329ac8c114f4b9ba5"): true, - common.HexToHash("0x69ab098f5c69137a07b4f51c1d2dfe07c3f1d782c925f3593dcf83b02bc25d87"): true, - common.HexToHash("0xca71c1c1865d462b24bc0bddf8ac551de6144314f17f20329c1e436e916a52ae"): true, - common.HexToHash("0xba476c04d6abc10bffd972f436bbaa7299bd6012360973c6dc9a060f7bd56c6b"): true, - common.HexToHash("0x812a6c8641bf19de37ac53af81fe6fb0090825e934a8f27fc5cc9f230a2345ed"): true, - common.HexToHash("0xf3ab0c97f17dbccdb4ca26e839f31af727a8a927b1f098f233d863046e05116a"): true, - common.HexToHash("0x02fa7597cf47bd72c48888ed779111a0e4848bc175c066d23384e63c5e96676f"): true, - common.HexToHash("0xd1c2f6648d43b440449fb97847d1d4e13074ff24832a020cf1ccb99c7ffa49a2"): true, - common.HexToHash("0xf1979cc7d417ba22a587f5f02c18b802c0b6073e72f8e031d66a27be53094b15"): true, - common.HexToHash("0x1aa3bb430e28b9a08389660af677561dc26f94e70260a219c894ed22caec9758"): true, - common.HexToHash("0x7fc8db186fa13a7d058d3b6b7e3eaa27e0b9da978f08a883bc5ec3105f12dc08"): true, - common.HexToHash("0xc2c3b5f87f62398d5d68afa44ee44f283bbd5df7cc0c03b75129ee513c7dc3e5"): true, - common.HexToHash("0x2de0f6be6a697686f17c676bbcb688f40def9aa59fa3f0964f3f0a5ff67d231e"): true, - common.HexToHash("0x16fa491040de78d3d18ff1f409d9c6a4dcabd879739679b4688e4f92aa73e431"): true, - common.HexToHash("0xe8d5a0eaa2fb83caae8bfe95a06b8cd93b94dc15ad1fba8a7eeecf13e27e501a"): true, - common.HexToHash("0x898fbe9ddca24da6847fa2874cef5dd6e146b29f71b95328d77272e30c259a06"): true, - common.HexToHash("0x2ae3737123bb91b6ef3d9586b2acf67edf4fe9fdc49ff6d5594eaea3212310b1"): true, - common.HexToHash("0xebd90b1246b2993c5384ccaaeb2bd2db4cc77b53deb3e09d15660b7026b29be3"): true, - common.HexToHash("0xa6ba70fb38ca155802e31feaece03ad18d1c0cf0713564290fc1a5cf3eedfaf6"): true, - common.HexToHash("0x74b4404e5bebe97ac23723b62095ffaff1743bdb6436ca3676bd8d4546a5f2af"): true, - common.HexToHash("0x79a1aa1e24216330efe88dc7421cc85f8a14c5857354c6d6a9abf68cf193c2c7"): true, - common.HexToHash("0x78f98b44004b42dc96e071570bb507d47b3ce7bbd6c4a60bc3add1f6f5243594"): true, - common.HexToHash("0x6272dcf1af876b11633ea569b84f171c5b32bf779aa6641855ad796598d463f6"): true, - common.HexToHash("0x96adeedea8102b959e2332284c6599291b876b9a261a8ec7d6aaa83a1b7d5da9"): true, - common.HexToHash("0x8bdee0abc563d3e049e335301c7d96017e53ec3ad70d6616c5900fb1bc7f0b5b"): true, - common.HexToHash("0x201a2773599a3803cf8441165bee8ed1ce134eba54ebe4818c45b3e7adaa4adc"): true, - common.HexToHash("0xfd2c3b2770b085ca1fca61378d7a970aa25d4868515e32b2335977bfa893b641"): true, - common.HexToHash("0xba932e37d51da0bf4856e2564f06519307a9b2b0eabf43631ceb4ef6c8dbb791"): true, - common.HexToHash("0xce43fd475064dd5f057f423ebf271f420e7904ee01c57672cac0924ff8f550ee"): true, - common.HexToHash("0x27854e00cded18f9cbd435ca985ef5a66d2e817348d034c915bc7db160a53134"): true, - common.HexToHash("0xfc4d9fe5f866055926155a636dd6dc593e4518fd169af659deb889c70f1b2548"): true, - common.HexToHash("0xa0209d36eb3bcbd3bd49ab45d8e947b90ff667e2409376a4350265144662f770"): true, - common.HexToHash("0x3ad5a0e15214585bd6313b35f9881960d554c68ed2a9a12578a23113a85f293d"): true, - common.HexToHash("0xa3288961e6a73143043961d19d4bcbd8f53e95ba55bd0f6e9c56dacb1c3d3d24"): true, - common.HexToHash("0x8ddb81df78f3c5b66a5a485f813d5aeaa17de78308663504a491e6da707b6fc4"): true, - common.HexToHash("0xa050bffb91333830241383431a900633fa3185daebc5efd4ecc22d7b611debd9"): true, - common.HexToHash("0xc87e677e4a418c0729dcff249eacc3a0181df2db16753d76e54050c93cc502bc"): true, - common.HexToHash("0xc4ffa7a69cee3e6fd280404fe22f87375301042085c5f43ba466da41a7f05b3f"): true, - common.HexToHash("0x0aa2477f0c6842d1c6b6cd22c5746ce5dc2000dd374d912be03ed8e5d1b9b71a"): true, - common.HexToHash("0x8b650053d269e9d5fbe1fc195dde1e8adf5ba19bce82ad83ea9cde0bd29dc62f"): true, - common.HexToHash("0x80726b95ac7825549f2292dfd40bb01b13ba7e3014a307a13a4ff38a4ce0c6b0"): true, - common.HexToHash("0xc02155aaa71d5b863e3b77e47191308719698b785a7707c1273da01d29a37bdf"): true, - common.HexToHash("0xccf048c8ef030a995ccb3ee13158bdd21c75f73a60f90b26d5ca62b8a6e6c1b6"): true, - common.HexToHash("0xd5b7be24d0c6d418ae1d69b1a7162dad1658dad336b9163f829d75d1a26c6a62"): true, - common.HexToHash("0x40b0efe86092feefc837c094898cf7eb2a48358a2be2596ac1c200492907a2ff"): true, - common.HexToHash("0x6fa6fdf28a99e02b864f65712c342090323ec37f97eb3a8a20ff4ae54423fe01"): true, - common.HexToHash("0xe6a8ffbab5f92a449e015dd6a04bf1742ba7baee4f39dff20b928e87846e8fee"): true, - common.HexToHash("0x1b75b46cbae4465dadb9f61fe9a770a8086f7b64363d171c46acd1263997d8af"): true, - common.HexToHash("0x1a9c72efafa1a46e665c0f0bcb5c7cc41f573c170ae53a39ac8f481845a3138f"): true, - common.HexToHash("0x8ce68a559f8f8a2f8a941a3c34d556315624fd8e5633ccdf4b1fa16af7cabb20"): true, - common.HexToHash("0x777eadfc2ea41a965c258e252fa6e21a3d456c085c3ffb74418e77580ca5a5e8"): true, - common.HexToHash("0xc12cfd65fc82420fc6327130ea63bc357e9cb6893d03febbfb239b5a363518ae"): true, - common.HexToHash("0x0d80ee9063bb32c8bda85470511c818b3d80c1503a6182048b5d1047c88e743b"): true, - common.HexToHash("0xcae26d31da685b862b0eb510251317d1452239039a3595420cc0e97f0489ffc0"): true, - common.HexToHash("0x3f447751b9e35174f016612762832fdad6931c16f19f0b3903fdc8f7d9e4b608"): true, - common.HexToHash("0x73de5c470d90c2284fdd3f1007c9f1f348dd68fd25835b3cec97bf2c6d7d0602"): true, - common.HexToHash("0x08065aec5004bca006c7ba3077dddfb8aa6dff1a212f3f76b56ddf11ca47d4b8"): true, - common.HexToHash("0x51e5bade17986e6a5af43a3569cda039206bd539524132ceacff9c7365c029e2"): true, - common.HexToHash("0xc42ec1d0b959066a8af0ab09261521d521ee56220c13725062c87275222108f6"): true, - common.HexToHash("0x8a716271fe07f29aa131dd4a6d2ac626c2f23908be35a4ae9eff598653d18588"): true, - common.HexToHash("0xd091e770f2ddb4efc005d4f4290a161d3276ec2ca1e064802ed4273bf9c9b594"): true, - common.HexToHash("0xeaa239ce2db213735564adceb2e05c2eb60de2d09db2334add11c79fcb5ccb79"): true, - common.HexToHash("0x0bf142d521b9c359073a838deed0cf80c8ccafcf1f9888eb2dd127806da62e9c"): true, - common.HexToHash("0x9fa2ca7a5aaabcb394f233faf854e685265fe5a1bb33e8f28510712ece414217"): true, - common.HexToHash("0x56e9b732839c6f21ea937193ee07e5c90238385638be1d099142a4be67524f68"): true, - common.HexToHash("0x828f434e6f6dc95ba21f7a0edf68cae63c2140f4b135215c44e26178aa07f3a2"): true, - common.HexToHash("0xee9dc07b2dd9b41f77b7e0dfd0fb6d54c263955d91a4cd1c3da435855f363942"): true, - common.HexToHash("0xe7369febd26140ea769f9988fea198dd9273e8b81e6319ce2d7eb6f3e62d74cc"): true, - common.HexToHash("0x8eafd59da7be61fec24b59082c5092bb28a9b1471a8445f1eef7d1ad3d3deaad"): true, - common.HexToHash("0x900a06415ededbb1a2a30f5677d24418982d59f12238ea07b3855b9207a70fb2"): true, - common.HexToHash("0x5f9020fe8daaba8712ac02019cf51184bd27eacb523477433cc414be56f00ee0"): true, - common.HexToHash("0x315c20f9da6e10168449da5ecb8689b56da5bc12e98fd1a3e9ced5b4026fb638"): true, - common.HexToHash("0x99a0767fa26ead5e6cfd8fa95673cb728b6d74412e082513d5beeeaceb9f6ab0"): true, - common.HexToHash("0x1432ed21e246dcabf21be129b8c58b949a5826815e3c4e5539e034ddef54fc78"): true, - common.HexToHash("0x74a8849d26e60bd7de479eac66250e58654b18ed6e2a0770faa5c4dbe13cc549"): true, - common.HexToHash("0x2f436a3359fa5b2d7c2c77fbe45005d6f2e77bf8c7de3f3e0997d9335dd9e8b1"): true, - common.HexToHash("0x48a0bd62e92178d958b1f59ea7cf50c9556f794ce5fdd763d0bd7434ebefa078"): true, - common.HexToHash("0x142e58f091f2333110d634427ee399455bbb7473225e275f4d7ba8ecb0b4a4e3"): true, - common.HexToHash("0x601c688e86f1e3d6a8558b93142ba84a944e2a068ccce2f223a8854713b4e55b"): true, - common.HexToHash("0xe26b28080313d140226e278499b1b2eae7044021c680ff4c24a3d70c1ccc791b"): true, - common.HexToHash("0xe527f79257434017ba99688fbbfecacaf971e603eb0954abcdd3e7a3de4999be"): true, - common.HexToHash("0xacb979a3514afa662dfd9a4d585c1cf35c4d57d5b7c2c49d9fe812423ef901ee"): true, - common.HexToHash("0x18e58c653eaa5ac90c78a8ff7df2126e18bd009eb37fa750a0dd3a0eea3b43f6"): true, - common.HexToHash("0xc9d2979b7b632599387e7a0d2c6f8961a2f541838e30370fde7c3b32f8b8d39b"): true, - common.HexToHash("0x8361de1ebcbde486daf94c98f081efa8b0f71a224867dca7866aabe0766f866c"): true, - common.HexToHash("0x7ea41d2bd279f92838b2042e837b65be6fb797009c1c61e99eb9158856bb3edc"): true, - common.HexToHash("0xed937d4fc3cdad0ba5cde27ed71bd0f8c43e250d04d083c6d2f9baa5eca9ee71"): true, - common.HexToHash("0x55326ab5e6879668d3edddfaa77ca8d72f389bcbb5288123a65de95cca663ec3"): true, - common.HexToHash("0x931b72352ea41d5416afb4e5e2ea837ded8827eaa66c97379f9dc61767ffda7c"): true, - common.HexToHash("0xa8f823114883d156eaba37a134f5889f19030646bdf147ddb3636f5809974ccd"): true, - common.HexToHash("0xb83b5b7b23258e80c57eb6f6b239777bef63575e4fa154097887bf85c0674ea3"): true, - common.HexToHash("0xeb488a9daed3220ce6765fedffd1ee06a75d28e5f132801987c212ce5e7ed99f"): true, - common.HexToHash("0x4e1f38b029da9dbc08f18ada82e31dafc6b7020d30f9980833460f4fd4bf1f34"): true, - common.HexToHash("0x2b7ef70ee13cc8fe0eca4ab31a92025f29a418a6087d61bc1fd8374209ec69c2"): true, - common.HexToHash("0x047ef5d698108ae4e76cda43770a432f43af5f767c6a117f4be0a85e28e55353"): true, - common.HexToHash("0x575ab16d567924c3e726d907ac551503c418eca327609e399bee62f2f9edff1b"): true, - common.HexToHash("0xb26d5f3ce414af18e672b816bd8f42833b39290b1e90d4f342254e0b3bfcc525"): true, - common.HexToHash("0xca2109ff2cc4279fc4d271732d3f974a33069be213672a54802fb9fd93ab61e5"): true, - common.HexToHash("0x330fcba5c97aa63bbed3a8745891e301c7cd682f1ab339fe01660f1c3c4b3184"): true, - common.HexToHash("0x90af1209910dc3e2bf6df357b9b175dae02cf43c7e3251a5e094872c777f9266"): true, - common.HexToHash("0x311ed791ce7ea14bb93d7b0d54dddf00c8072ceb9bda1ccb905789c959e7e15c"): true, - common.HexToHash("0x7224ad442bcacb3813650fb505a1540d2209888d2e28dba1b0b7530dd866ebff"): true, - common.HexToHash("0xc112a8b2c0c87c0f0c8b21fbaf7bbcce4206bae805cf7f71ca6a3a35b5f746d4"): true, - common.HexToHash("0xa04bb7536768e1d7f11cb3e4ada47d5cf4ff72c1a3984e011c30d5dface230b3"): true, - common.HexToHash("0x7adaed7eccd4432dc89fb8b7d02a447a1a4c7e1d628309bdd4a4187a291b9cc0"): true, - common.HexToHash("0xb9db60a119e00eaf5f2f67665c1688bf0dd41d81da31477353780714b3660343"): true, - common.HexToHash("0x72ba0a6e7eff1b6683ef3b981587c9b061f3a3ce8c8d687b4dc8e70819f0e82b"): true, - common.HexToHash("0x7ef90df27fa50ac666ab2fb2c2a12a1e7094e484570ce4c6d175d3d465a34d53"): true, - common.HexToHash("0x1d8803abebb0e75c597d4bd40a3158f62bf953814cc87bfacb070cc5760b5650"): true, - common.HexToHash("0x80c5aa3322db9df3b3344efb6fbec4d3099749f2eee46295237d7e5af9ab507a"): true, - common.HexToHash("0x686df01e5c0e6046e7fa99086f169405597c1a93784866f2b68cb95aeef8806f"): true, - common.HexToHash("0xa68996bac63609020e754e5777a426b5a108d1b9769c53a0fd98a049a65e79f5"): true, - common.HexToHash("0x58ba618a2239e4bdf9cf9f2f5845584088a97bbe6d8d8d7de944d1a11a2ff7f2"): true, - common.HexToHash("0x6b671ea3016802e4682eafee55925806adbe8dd09159d64dbc7a2ae1c6f53d22"): true, - common.HexToHash("0x83ef3186493d503d64cbc3337c8e5c65e1be914225f923e5bbcfa7d84f8c91d7"): true, - common.HexToHash("0xe2fdb6fe42765a5c5d3a3d8d323a8beb29744b278815658f4dcabd90cc91b477"): true, - common.HexToHash("0x026291eb74331bca3a3319f82dd7d9fe7855795ffe270e6e079f492a94af5b42"): true, - common.HexToHash("0xee7d0822e0f172d8dc72317200897aa23b684e0cdbdec3ccfbe73ddc2cbdcaf7"): true, - common.HexToHash("0x10322207e6688f4258b0a525c806efde4cca09fec45d90330f863fe60c4a165a"): true, - common.HexToHash("0x8a1422a1cf5f89bb9468a4cd96753ec0b301d7ba45e8b6efd6264a6aa3d325ef"): true, - common.HexToHash("0x47265fd3fe5a5172eaf2c1116bef11a7cc820903a04a02ef95b3ec1bc16887a3"): true, - common.HexToHash("0xf652f1d6b11be26ac6c0880797e486ead38b165d45bc983f3117c5c497c19b53"): true, - common.HexToHash("0x23ff460ad23481e7af446675137e07fc09d2351d8656a050ebfe5c92224b06f6"): true, - common.HexToHash("0x9738bd8b332285f620df78a6c45ea97fc356989f3e2fa703fa1159930ee96aba"): true, - common.HexToHash("0x9e2c9552d360e1f93644baafe169294d2b5a110919f3ccaa882606e59465a0e8"): true, - common.HexToHash("0x8c99a05b1848a90a6d51d0225a14621ced15608b6ebbe27c040e2857f53c737c"): true, - common.HexToHash("0xe03db51969fbfb027c08ee1062de523f89292c63b4329b686f64f965be75c1c8"): true, - common.HexToHash("0x0a2ee9af6a3d7a3aa44ed855f1edda7420cb748f9b011eb3b024e70c7fa763de"): true, - common.HexToHash("0xf19984c6c97d4432564f6df94acd7c700ab847670f137da043446f3092b9545e"): true, - common.HexToHash("0x2a08af795e37f243ca12cbde6e2237e16b554871404248bec6ab3be36798a3cb"): true, - common.HexToHash("0x0b6817b9e907502f31f4d61ce5afbe947a6afa7ff30b86604938233747247ab9"): true, - common.HexToHash("0x24f36315011f6dab87fa725896778b499941aa5508df470d0843d65a96f02644"): true, - common.HexToHash("0x55fa79958e72eb8142b693cef90cd2a05050ad7f0b83869758b4e1534352f2eb"): true, - common.HexToHash("0x4e41131551e173b4e74941c72949006b9aaab22abb5b7330338f9ce759b01cde"): true, - common.HexToHash("0x69185bae98bb8a24246269b6c9b2de69a59c966ff7934cfea3e13cf83504d58d"): true, - common.HexToHash("0x8a9943f10f017e94cf23451c3aa8b004aa369016c0a3af06f7baf99b1a45eb8b"): true, - common.HexToHash("0xcafdba764e2a4f4273f8b544d662ced1706de28d3c2c960f1af4f0f01be4ed94"): true, - common.HexToHash("0x8ad7f28495ebbd04b986c23d10936ee85730bcd03b7f99c60ad9c3d3de3a5cbe"): true, - common.HexToHash("0xe20de2918e584326721752e08af25472d4c8ca4f7a0a3e3fbfbc1282274f6ca0"): true, - common.HexToHash("0x1a19434cf9753f751e2d4f1bf8fb264b963209dad4abf87e3dd113353bbc2dd8"): true, - common.HexToHash("0xfd116fffbc0a146320e85df433679c4b45cb09401669cfa74a2515c8215471ce"): true, - common.HexToHash("0x4b7f7def1b51ab35cbaf63e92b48de043670eae7308d4f5372f6608809f55e9f"): true, - common.HexToHash("0x4151f721678652537ff1375c7b0b1ec7a5076cffee0d95c02d1fef2062cb5dab"): true, - common.HexToHash("0x63a9f1030eac9b0565ea77125f99adf7e5c4521057673b3463cd13fe27cfd5ab"): true, - common.HexToHash("0xd07836f7fe824b76dadbaedbc4f782e4170c62f784c457db759ef368785291c3"): true, - common.HexToHash("0x30030ba1f059554ff1073fc7f534d1d6522e936143db059fcf270cd7976cb5d0"): true, - common.HexToHash("0x53b21798011f4092b57f3f19824bdcf309b3438caee55191c8e4a9b58f4e5445"): true, - common.HexToHash("0x6b3e78e4c57f7e5a01ecf7be9fac30de35290328d205708168c3adb3c945384b"): true, - common.HexToHash("0x8e1660ab17d771c5b2d5c630f3a661c955f56c447edfd61345a663a8fe42f53a"): true, - common.HexToHash("0x4aadc9b2c599b8ef3c699c14e6537e244195b3269dd0b21eb8c9b6053421deb8"): true, - common.HexToHash("0x74fca5068a88f9ebdff4d02f0dac34adc4d0882b50c6feea791a658df9fcf8c2"): true, - common.HexToHash("0xed36029edacdb4ecd3528bd3081910e23954601fb9404ca5b4af27aedf9b7f3d"): true, - common.HexToHash("0x58a5baae0ab358c19b8e38ba4d6265d9ecb54d872488d59ba923015c470c58b0"): true, - common.HexToHash("0x70c41d863a7bd0aed0c67a45bf7ca17f7a26602b306d6aa01209361c5987d068"): true, - common.HexToHash("0xc04b065f06a3673074a45c60e14e84dbd11d9333e3adc5cd311c42c4b010b156"): true, - common.HexToHash("0x6fb74dcc736a981e4d1d034382a92b2181b376d4d806422dddb78337a5d022aa"): true, - common.HexToHash("0xa930a7c2bf5791edd38abaabcb59ff6e763d59939b7057ee954b631b53f6f7fa"): true, - common.HexToHash("0xd575b906f3c6274d389f1b1e17fb6619a49baca40ca4b89add4a9f2932281cdf"): true, - common.HexToHash("0x4f3d5886362effe8929ab18bdb53c2a8e507fb45dcbc122667c80e1a65b487f1"): true, - common.HexToHash("0x67b7e1d8407fd9e6ebd9a1001320bc68b6bf1f68ffa91c0180ab1427ec8d47d3"): true, - common.HexToHash("0x0bc04ae6646ddc1a9c876263e1f1d598e54b0f145b9fe8fcaae6c75a5edf675d"): true, - common.HexToHash("0xf2bd1caff5ebb69bdf64050ced3ff8e1912cebf98cb2df721e83a386efd8eb3b"): true, - common.HexToHash("0xbc894d51ad3559090ab9fda56ce1e38e536ebc894d0bf5afc57fe47fb7ba72d6"): true, - common.HexToHash("0xce2063fba02937870a98726b4ac416954ab03992842434292fdbc29efb428f12"): true, - common.HexToHash("0xf20961c5509166a8476697d9e28f38b828d79782f3dbd974d6185b46e5690796"): true, - common.HexToHash("0xf70a3c801f960dcc33ea98171fa0b8cff68b6c6ca39851296b3e0dd3d4db90a3"): true, - common.HexToHash("0x10714ce2dcf5ac1b70d549b2d42c3076b36e4a098db50b64e5947ceda41aa027"): true, - common.HexToHash("0x25c666a1e7f965c17c4a13f0ed660deb761626fe74c5c8cadb36cb8222bed434"): true, - common.HexToHash("0xfa42754f0eba34dfb5f05c36d6382937a1d7d5acafaa72ad471691843b6904f7"): true, - common.HexToHash("0x5df35c39b3afd4deb200afe07634c8c1b180e4651a0d8b01420c505e19912677"): true, - common.HexToHash("0x07558df14b5de3dc224be1340781fe04238eea48909efc8cb9ebbf42e97107c2"): true, - common.HexToHash("0xe52006517ecf8038da44e23ee41a27babb5ce9d2ed1e2d302bfa65eeb52bc287"): true, - common.HexToHash("0xb952b6cb4acf5597f201121604fd9919cbf22fb329aa239eb3c97eacfe4cbe10"): true, - common.HexToHash("0xcedee877927849c0de6427ecb18d5adf87d10bb616a749905a72a84d6cec4bdf"): true, - common.HexToHash("0x4a39a3bbb6ccd9295ad26053afc9bac883ccf780505fdee5d49d1419454244dd"): true, - common.HexToHash("0xf86fd11bbf968f5e9178f85e0c65ad7e62a13cceda17934dcaaad7aa7c931326"): true, - common.HexToHash("0x7d22ce3c5a0828e38fd8ad3f7c76e5f497f1efd8d12b4276589a851bcabc9138"): true, - common.HexToHash("0xcc00d63e2576b28648fed93f52adbbf6168f0caecb83cf5b0f87b0c8c0a2169b"): true, - common.HexToHash("0x313a1f28ee2cd550f732ac1c0e5137e3c31b37c0015128e3c184637fdf054e45"): true, - common.HexToHash("0x8d9c534a790341d13a07c81bd5ddbcce2b02f86b024ac6f78a77bdbb6be7ddf9"): true, - common.HexToHash("0x0b027a3e179ed2cd4ac36b089bf42c49d69141bac07ad21114521f76af2f8b80"): true, - common.HexToHash("0x3be0e15e5a4c46438f88b04cf25e5631e2cc2a7ff0d9d0438b1843a245189bab"): true, - common.HexToHash("0xb69867ae90be205a445f59ad7211e61c70d7836b807a6961898611b9391aa1e7"): true, - common.HexToHash("0x10deae902babfd3f800ca4cc5e6576683736f755464cae9d0f753e00365e13d4"): true, - common.HexToHash("0xf421e0b6c8f5c2ec08075a8fc67558af8d8d0a05517c57da8365aad8a7b0e69f"): true, - common.HexToHash("0x4004bff3c5ef93edcb3e6823fc5a02608f67df903574c17d7c0be0ede853bb66"): true, - common.HexToHash("0xcdc12c2de51c9b8d451c19dcaa41f0438fae6badb199e7495b23c983a83c68a3"): true, - common.HexToHash("0x4d69d838eedfd0df842bd2fd097aeb0e52b5d666f23cebdf7bc224f109a0787c"): true, - common.HexToHash("0x12077ba64fddaccd91fd2af9320f31953702717fc6a35e5c0dc5cd5c2037ea42"): true, - common.HexToHash("0x5705946a64f6bec6f465f5e6e51590fd87fe38fa6fcedb37cab7b1825d97c71e"): true, - common.HexToHash("0x75c71d58e065772bbbd71377d5060e15c026468e95968c33ce261e8913686e8e"): true, - common.HexToHash("0x5e797fc26e505ce8b973e29ef4dba9b8540606b3550ed61dc02354348406ce57"): true, - common.HexToHash("0x8bc45b443d17859aee43c20c432cc8afb60c34bae15529e7596da4f410adb81d"): true, - common.HexToHash("0x55220b204012a19722ae7e795b2b723c0a57d8189c76a4d0f75f37ad1b5f8c55"): true, - common.HexToHash("0xfc53c82ed604abe7a5a47dd4c1d0c99259c77039960122756d6f4d7ce576aaf0"): true, - common.HexToHash("0x74a08d15ae277b6567bf184bed953983948548e12f0ab220017371cef5a0f1bd"): true, - common.HexToHash("0x78f46f2ef9cac5dac4af3be8b434a2923b99d1e232a7ab0a4f7da743fbecc3da"): true, - common.HexToHash("0xcb6613a7ae6451955f561405033e533466b98e1a1d0af4e4bedff8635021543a"): true, - common.HexToHash("0xe46ceba4c0c587960946d77b3c8f6ec24d800ccd313d1efbab501916be9ead48"): true, - common.HexToHash("0x337bf1b85567b507635bff0af35c53ce50b155e94079977ccd0dade292a429a2"): true, - common.HexToHash("0x29302faaac0942fb9b003938d0d75f3c80872eb017226ddc4e23cf22caab582e"): true, - common.HexToHash("0x9db5b856feda13810db241325aaa956bffa560a2678c62ce67c41f70fdd77cd7"): true, - common.HexToHash("0xf7ffcc08aa1f97892f3c2c130453845103e8cc9c61dcd9d9d96e91000886f677"): true, - common.HexToHash("0x53c4e8f89c53ba7e5c2a01dee3770638cf5988603851c4d247c05162d9ad1cba"): true, - common.HexToHash("0x78ac0d8ca3154fec48172feb62fba268db8e0f6fc2049db7c03a106c1d1b6a81"): true, - common.HexToHash("0x5e9240af2d103ae5b1d8469582f65c758ef5f5808a9b43a7bb0ccee8c074eebd"): true, - common.HexToHash("0xa8c6aad48a9a85ad0f8ac21f945ab848dd26bd623ec750f5a611a18c9235da00"): true, - common.HexToHash("0x02f33212cff551d83d891c0d82294c3f95c0baed4d8bde73a0a2ec995c150207"): true, - common.HexToHash("0x794c0c63f77e34428323406e9f5a61efb39fc14eba8d1b11b6ce8f6e66a9410a"): true, - common.HexToHash("0x9d37b92d449471b6dc684c6cd04e9f95bd44c6a8fd1996b33af5133eaac4c771"): true, - common.HexToHash("0xbda8a8a523356d9c991f0093875ad30590279df395343c1df6bcbd9e3e9e1f8a"): true, - common.HexToHash("0xb16f3434b0fff89bd3fe1c26d16d22240946de50ca8126c95c293e97066b7f7d"): true, - common.HexToHash("0x8a45d2a8ccc71893ddb2e63b0614819ab13f9c604dff997f8bc47fd3b5622712"): true, - common.HexToHash("0xaf8d9fad0ba9d4180d87ddfffbcaceba289ff9bd99eb7cde91a51bc7a351984a"): true, - common.HexToHash("0xdfe12ceb012865f0147e91f2727d5488d9629a7e7f5e0db31d7e57e2713f1a33"): true, - common.HexToHash("0x52ccb3d86884700b308ae9170c47f7e85207f9ce6ce605fd659c1c3d285dd0d7"): true, - common.HexToHash("0xc7d04bfd53056da3b366127819c21ccd48bd47ddf76eff005436ab53c0f29be3"): true, - common.HexToHash("0x665235eaf4ccaf2acb34960cf262c8ca04d22ebce8716a16a6c472c182e522e7"): true, - common.HexToHash("0xb4a504432261ef1111aa2667e56746a6212d9ebb03c0116f176bf55acb4af571"): true, - common.HexToHash("0x2424a942129d9924e9f51d88de56c0e2302ed2c0c1ea9a780eb89320a9229e35"): true, - common.HexToHash("0xcfaad8ea264499ffde50fc1eb4ae4d0923b9844ed2346dab5f0af8c7e7fa8cf6"): true, - common.HexToHash("0x767cb57c039615e820b6326c784243111492ec7e629ea176b7824997f08d7f34"): true, - common.HexToHash("0x1d0b1fb491b88e0f656cc0e23c3201ed46f80fbe093d9b3b75430c5af85a7063"): true, - common.HexToHash("0x62c845bdc8817127190a48ee90d370d1d489267648a34b703f689b4b92b165f6"): true, - common.HexToHash("0x2dccac61d07046ad4b817d343a8f0541eb458d41f05f641a4e5f308ce5e6bd43"): true, - common.HexToHash("0x18d9390f31e4937525e0f14bc92f260217ba26e728518fdc8c8dc499f42eedc8"): true, - common.HexToHash("0x6135e79f067ce8bcfb0dad68958a57106bbd5b9291455c0ebcc94d5cbb4919a5"): true, - common.HexToHash("0xfb7e67df61d4256e2ec26e4b8617b6c2b3db5a58a143fc23e282033d5ba99ef1"): true, - common.HexToHash("0xce8be5e626001a6c441481612536e4befd7ac0f01fd69cdbdf56645856f3a817"): true, - common.HexToHash("0x5dc634df18490b843f8f16343bce99578c608dcc34592ac49bfc7ff3ac9ee09c"): true, - common.HexToHash("0x7a67f0a279dc9176de1f288501f216f7e79ce40d8f58020aa44c93b896703c2d"): true, - common.HexToHash("0x02ff221b7566778f3fb24d6950937470075d1699d82b101f610fbf3994e5de38"): true, - common.HexToHash("0x18145dbb25a3491d29938f6a5ab07e0111f2cb2d2927b20d8f4939466aabafa7"): true, - common.HexToHash("0xd35aee46b8f3682e99c2c150fd113988faf3688c82944cd8e1283731820a59d3"): true, - common.HexToHash("0xd2ed13ea3bb5fb9865bc9dee643eeeb382ea93663c0bf18cebebe73c68489020"): true, - common.HexToHash("0xbcaeb4d813c8f9cef2aa4f9d30d1ac570c03800d2f6a0fc78fdea9814dca76e3"): true, - common.HexToHash("0x1ad5e426ae51416faf3d41a54ebdc570d00e8c67c5f140b76233ee944557e2c3"): true, - common.HexToHash("0xde4072e31492e7e629054632a3e0f1a7392f6c907180dcbd56980f725687633e"): true, - common.HexToHash("0x4ab465ff8163f1573daaec5b2b2dfbf7200cdb21f71de33e824b717c6ee5b1a0"): true, - common.HexToHash("0x152fa8890ef118aabc410678232f18bbd46521b302d07e357025f1ee401fc46d"): true, - common.HexToHash("0x737e951c6d812681d80088ca249eb1bfcdbed7a51da8a966ebe277d27a6bf48d"): true, - common.HexToHash("0xd2cfe05d0f69ba59c31c23502527bfb237ee0ad4c65113150f7b07fa0214a673"): true, - common.HexToHash("0x95d8a901b26618ece3ae8193c5b760d1641c3bd85866d9a280561c94c69e95c0"): true, - common.HexToHash("0x831c7233c7d094cb88d70eadb0c7246b5c09ece3209edde28d725fa17ff408d0"): true, - common.HexToHash("0x3731f8ee5f3828f598536c4ef024922ab2eb1578d4bedd02e09482a47d402f8d"): true, - common.HexToHash("0xf9855d24a74932b78a9addc5dc5fa873ec296b19888c00dfc73b761e27ce8fc5"): true, - common.HexToHash("0xc26f8f340e77723b28e412105a247de52fae615cde10d216802f08f86299e04a"): true, - common.HexToHash("0x1abfabb20928cb784057b51e2e8a1468100265e9d85896b6f52d5ccc29d286c3"): true, - common.HexToHash("0x7277855aea36d88da5c335b68e9ee188ea75c47c2e9cff979baa2e6c65c24f58"): true, - common.HexToHash("0x5a610e1141ddb184e23f0c536ae403082c71081dc5afd88ce43f6d85202dea26"): true, - common.HexToHash("0x8034b5f7888fcb0e05342a6e044e334fa372eee70349c9dd06b561b5553b8586"): true, - common.HexToHash("0x7f33091b5b23a9a98619e2d33ba75332aa81a832a8f15cd751198e5fca64d62f"): true, - common.HexToHash("0x651a006742f6fad0c1cd82a13bb7879c42c163879b149f62a7ce594ca5030131"): true, - common.HexToHash("0x48cd60c91cbb30f8cc6d2e7dc5431cce4e0738bd4b14b1aa959d508994a09ad2"): true, - common.HexToHash("0x3dccf3b08f8387a53a59e7d0ed3b0c926a4ecb01a2b93c8dd18f971ea5f011ee"): true, - common.HexToHash("0x70d3ad94a09fb82397686f53d24853b9a3b0e9eda0ec774143cc2a2a616ccbff"): true, - common.HexToHash("0xd74121a07e746cafaf12b3576e700198c3e1781d941fb998364ae6ea551c6614"): true, - common.HexToHash("0x2b4bce80c80119637491d8971101b7cfee45ebe54eb8f280c8bae5bbadd4969d"): true, - common.HexToHash("0x67337446ebcc8e966e34c4c290bf5cb670259dcd49b1cc64c13b35765b4d7427"): true, - common.HexToHash("0x71b6d8ea89b2a02fbb41de0441e3d483c2384f7351968a25d76097e85dcd94ad"): true, - common.HexToHash("0xa836bcd0e4aa5630a3ec72d5e62c23c2fcb89f88fb52db386ac2b2f803a2135e"): true, - common.HexToHash("0x624abc5f417ed0581f374634039be58fcf5f03ffa305465d17620e90740e6ce9"): true, - common.HexToHash("0xa6f5039d0873cfced1a48b2b0447620ece196ad77e7ed7d8c0ea1990b71a13b9"): true, - common.HexToHash("0xe5576a4461753e2b69a7b26bdb07932c81d7728cc65705fa88ae296513933bd1"): true, - common.HexToHash("0x9c15dde0a63cf157233605c8928796515b5135095b4c2e721439c007a3c88849"): true, - common.HexToHash("0x8bd6cb25f9fbb89086f90a93608287ba0d0980aa1765f94e1ed92e7d7e8a7d46"): true, - common.HexToHash("0x5f84ebd1094c00a6781c54e0241cd1e737a12797eeb01824669af6726929782d"): true, - common.HexToHash("0xa76cccd9a6d93104a6373f4e5f3766905015756b8deb6ce8e64593c8baac09f0"): true, - common.HexToHash("0xb49bf2d635e84ff70ce798cf5f28af0b154e5946c4a0eec06a43c95e873b1635"): true, - common.HexToHash("0xb91e3551fa4c85a2bcbfe4dea33a654fee2cd34ba7bdd3e9c37d59e7dc461ea4"): true, - common.HexToHash("0x8d51dbc6b79c7a0a90b339a6d07ec9d7768688a4c5eab20b292e22d78f1e6f85"): true, - common.HexToHash("0x3e4780548393ca3df0be28d5910910756651776d23befe0ebba8a617337040bb"): true, - common.HexToHash("0xe5cf5dbd7a9006f6e4c85f3f2930e3de4d293914ed19786211da1b0402f4d177"): true, - common.HexToHash("0x318606d2d42c9691cad1d614d26dae101b5f9d4c3f3de0daae476fe62aad68b6"): true, - common.HexToHash("0x6f40075e1ac836303634dc8253121059a3e589c76f27cae441eba41c5c329120"): true, - common.HexToHash("0xb710566f0331abf4a087429b73cb325bd2603c00ea6da340e60cd2256797aa95"): true, - common.HexToHash("0x68f21838901ff46f91694e19bbef6d2d505ea1ab45777724acc129971c85efc5"): true, - common.HexToHash("0x264bc83af80cb5978d35486f5ada091b0f7c4d5328f4e33abacecf003a523c37"): true, - common.HexToHash("0x604f409ddeb3eaddaa1ae3faa73767ca0d58036a44f7fbb32a7ea37051ab52d3"): true, - common.HexToHash("0x6d6dd182d6ee36a0d2893c52628a923f8150b9115673fb226716c5bf69543ade"): true, - common.HexToHash("0xf671ec485fa978106bc33f8317f7cf25d5478c414aab53f13555609ddd83208b"): true, - common.HexToHash("0xffee52f411fe928fae73ae305bbc98c2444d16df7b841cf61be1af491226cfea"): true, - common.HexToHash("0xcdb00a09fdc2512a9784d9d52a1a377ac9e762ca5f7dacff370dcdca5c2cb406"): true, - common.HexToHash("0xc7e48ca9538b6daecd0cdd99d314a795d47413d7fe412cdf46df54378b9d21d0"): true, - common.HexToHash("0x4266a117a46cd44e3a2b9c8987413513158e1852213c461b5af094781225f9b1"): true, - common.HexToHash("0x4e458895e1a7de4711f2b59530696e159d8864ea105ec31139d9bcbcf80957f0"): true, - common.HexToHash("0xb98b462a3dfe8ecd75db4e816cd45cdec75eb8e4ebb9b0f7c65932e881ca56ab"): true, - common.HexToHash("0x238aeaea45b2e978d9f8fb7ec376ce255885f321ccd163c9ab68af9eef92f948"): true, - common.HexToHash("0xe0bcb3accd99ca4037c2e3abd8b54c9decb6d943310588fb5441e2fef16c3171"): true, - common.HexToHash("0x19388e17a1998ad82aca922bf492c1e1eb8fa5f9220b2519f53e09fc917e528d"): true, - common.HexToHash("0x39d2f34b1b8540f4308a93edf8d093167cc344330850acc13e3a6a58c7ada80f"): true, - common.HexToHash("0x4408b83090b29b64af8e1dc6384d8962e481a7d7f63192a31ca08604b480036a"): true, - common.HexToHash("0x6d886ecb6ee7eb370511d55777c30bbef653ba8c65d903c2b7037f854788abcf"): true, - common.HexToHash("0x5f0a92f882c8b31f41066a817040ec7e10e5f37521f0af1b62ce733ff55f657c"): true, - common.HexToHash("0xbf894bdc9075b89a5820207f5fde893936a956612f7bdca1a909899a5bcc4f26"): true, - common.HexToHash("0xccc42ac2ceae9771bbacabaa246fa528f69fb5ac285b96beed2a0902c7b1a490"): true, - common.HexToHash("0x4ff66b7f1bb67f9fe79b9baa0ed0065fb26939d5ace9a6c2cc39db25168b879e"): true, - common.HexToHash("0xf12c7bfcc23c7ade920922165eb243655b41e7b301edb3ddb8df7ba0ce03b6ab"): true, - common.HexToHash("0xe5332fda30389c1c6dc1fa9549b44800fb260954c22cb2fa5fe0cadb47b86682"): true, - common.HexToHash("0xaaa4abfd1366aad128e82eeb3913b4f3755095168c6f1c28f5c8650c1c0a74b6"): true, - common.HexToHash("0x5ec146c10d7245b0ca3a4c222c0cd3028a1651f240e7fd7bb6339c624c1e3558"): true, - common.HexToHash("0x1eccc1eb34d5099abd8099f6294173d8cd294817117c2753645afc195f11f517"): true, - common.HexToHash("0x9c9216d4f532209b02dd2780e8c415bcd5f542e27a3844f799e441f9cf31f821"): true, - common.HexToHash("0xaa7d9a445397c1020fcfef7e39fe2e754ecd2b1740be00124641a4dd1f90d843"): true, - common.HexToHash("0xb411dc11d466256144588833d125dbd4150d39a5f237a7473aadb4574b3d1e82"): true, - common.HexToHash("0x72433a53e6d0f9227dbc4a27361b5fedb2985257bf3a9c1bb499d31ff4927535"): true, - common.HexToHash("0x4ad848a31413405fe187cbeefd4fd350030a12973fecb01b8606bec95bbd707b"): true, - common.HexToHash("0xa67656e79cffb6ac1461dc6ebc54bf8cb0d3ce3dbd7848fb0f8268a688ee4c87"): true, - common.HexToHash("0x21446d624a891953d32fe0b8ee800d9b50efa4dfc1e6821762f032ef68d77eaa"): true, - common.HexToHash("0xda2fe59b584852f0cb2ffc36065e7f3554f1f0116fd14be4fa4ea95912663fe2"): true, - common.HexToHash("0x9856346aa90a4a06b29167ad821e7eb289e2e0b6de6c301b7992e65eedf152e0"): true, - common.HexToHash("0xc6cb2003600bdc43703abe34357cb91501152907abba21f79f9b53b3ac3a0af6"): true, - common.HexToHash("0xa585c877802efba10b717631795fa506b49ed552597a37386e08087146120f58"): true, - common.HexToHash("0x6675b88381d3959ec4ef693fde196ad5e507a77de5eca4c5fedb5b1067799b05"): true, - common.HexToHash("0x9f92f1cd1a83b8f2c87d0d339292365e3fc92b05e70b3d4578a83b5d634feb27"): true, - common.HexToHash("0x8d57f6eb62e2eeabcf38a72e2d39db4952134760c8d0189628b382c3758bed35"): true, - common.HexToHash("0xee1041d2e72ffe8df085e7477c64ceeda6ccfa645b226e9be7eca69972fab3d5"): true, - common.HexToHash("0x57ff0f6a74ceb5e5fab59fe7b5df263fbe2ac5d55e3992752308a491195d0b92"): true, - common.HexToHash("0x3d5ec468102927b37a1bc9824ca8353bab20f44374de6e3c6ad2a235818060d0"): true, - common.HexToHash("0x0583526e3207227a76aeed52f70f43b9bcfbc54b47384dc9daf646f5cb4de1c1"): true, - common.HexToHash("0x503fc82bc2024e617870985e9e6baeb9e7bf93fa7da15e9fba465994be092b3a"): true, - common.HexToHash("0x7f028632a0feb6a115f991f081d0663a72ccbbf95c48315f804188f26225c333"): true, - common.HexToHash("0xaaeb3e515dd0267a3184169210aa18626c23e31c6038537e46f45596c0f067d6"): true, - common.HexToHash("0x0924cf1dc0fcbc56bf290abf4e9187a744948f9dbe98ae2ee031683c91d59af2"): true, - common.HexToHash("0x443626418963b18c013c4d1964a6ef964040af647b1d71cba478d204f2bbcbff"): true, - common.HexToHash("0xd1b749e492eca49e10b0c0f0d61a2eec0a89fdbffe122007c6dd919fb427a65b"): true, - common.HexToHash("0x80f3b46b233670625549922a00a2cd3d1e5ce08298cdf81e79375360533991fc"): true, - common.HexToHash("0x7d85d78f7cbdbd86a8b4fca04c54c7a7fc60350e2a6d363ffaa44819ae4f7f14"): true, - common.HexToHash("0x64a813ee188c39a0a8cfbf6ae02db17c3304a5d6802cdfd74980f0a8a0b11679"): true, - common.HexToHash("0x80fe3c9474415b3c694c50e02d73829f9f6970ebdcff75e6c6b2207e15a897fb"): true, - common.HexToHash("0x41c02eb238a75843975b6cd4f4b389f80cdef77b43e3f86d314e0d07d4a96b3e"): true, - common.HexToHash("0x6c62abb07a3905d17866caf6cdb9e04ab53a5358e1e310d2cf10004c1f2a1770"): true, - common.HexToHash("0x724e5b0f28119bac269012aaccf6ef7a965877b1ab15a09a159ef9275179fe07"): true, - common.HexToHash("0x7944a6b382665f5aa5bda187c6b1d137220af05239dae7c6f89be3b59b72a712"): true, - common.HexToHash("0x8fa19fe3404d30e631d00f305afe38ad6d9c2b8106d8a2ad2ee2d53af153d4b2"): true, - common.HexToHash("0x38f892312ff7b8fb38ef9481f405b468a86125316cb005f21a2b6c1ed4b2cf45"): true, - common.HexToHash("0x4aa360527fdeb920d15ee37365e3c92332eec06a70d92ae060b6092c5d859bd8"): true, - common.HexToHash("0x60de79b01dfc2bc1c8e67e5240b01db13352d4318217c03951fe182650c94b4b"): true, - common.HexToHash("0xd39d868e5133a3971c803cd8d87362f2bbd49075f844d97082e874f804e373a1"): true, - common.HexToHash("0xb5091172417bfc15b878ac9a40bae281603a109a9f907638ee3b256044bf9c9e"): true, - common.HexToHash("0xc47b4e8f13c3810b844196983be3869189bfeb300636cbb8d6ab931ced0f6d1c"): true, - common.HexToHash("0xc7c6591f8caf8cf5e695bb40b042dc498bc1b391410730614eecd01976b5591a"): true, - common.HexToHash("0x9fe917898fa3ee56ff5e8a54bb0e0c175462c9af3858f497c77eb677751a049d"): true, - common.HexToHash("0xe82f06e6470c2ed139d4ebf2b15d6b8a07510e71550533ddfe1861620620bd37"): true, - common.HexToHash("0xe33a07c87418c5e39a56d5a1b1e2be71265fad308b8d600c8570b9fe5990ffa6"): true, - common.HexToHash("0xaf4bfde3a6bbc8052363ea7944e2655047d7f562898028de81cdee5000d94120"): true, - common.HexToHash("0xcbbc609af5a26f75a2cbb4fa330d91e31484bfa00d8e72c05bec24c4346df19e"): true, - common.HexToHash("0x0af3232485be4f654e02e6f86c13c20c4255f400b3b671f4618d541963d57b8b"): true, - common.HexToHash("0xdffee8e2325f6043ba34f9f633547a5f3f5068acfb4232240f8bfe8ff01306e9"): true, - common.HexToHash("0xd9b48107c455a4f5221c10c075df4b0192fbf9543393266a443b361aa84e2c17"): true, - common.HexToHash("0xf34cede5899fc570c29d38c10a4e6d4dabf208f805d3f1fa1a9fc1a7ce968f25"): true, - common.HexToHash("0x1fafef2819035f2b65ff99700b6c427692364b1bbd8acf3aa5c2ba0dc0fd08bb"): true, - common.HexToHash("0x8a63772f7b9abdb49b504b9898bc56177ad3a67628716f9a1a47ab4a63ecffb7"): true, - common.HexToHash("0x29f47baa451c6a79a9e00cad613de36886398fbbd4dfe548d90476f2df9b11b4"): true, - common.HexToHash("0x0d34ba009ef811c8df320e7e46a48940f84e59c4748ef6b634c5c5e205016ae8"): true, - common.HexToHash("0x5d0054fae7f48b77b2cb5ec5318b06f9a1368b1d113826d15ccc334123c6e956"): true, - common.HexToHash("0xebb2f3f527b84054fd9811e8ceb2c3fca0abe8bb722e678997aca30d77415f8a"): true, - common.HexToHash("0x3fb130e05f825357961d3f670019d8b161c914a164dfc5057edb709099d0137a"): true, - common.HexToHash("0x33716060a655c6ce19647a6218961eb8e0577e70e0484e877417836ea224d932"): true, - common.HexToHash("0xea8f64092e2854495239bc84cead1a811fbc5907d1a06363fd2e0e5ba80cc791"): true, - common.HexToHash("0xede5aa40c02a3c385d2d013714ff0790f7dfbd1361fc65710ecd2ecdc4ce95ee"): true, - common.HexToHash("0x5b8fd05a28d0304583f28d34693ab5254445f9f2ff90512aab7351b28070d7fe"): true, - common.HexToHash("0x56636b0fee3594ad4cfe31a2a86f84618b98f60a33c08da36e36de172ce2517d"): true, - common.HexToHash("0x99ed28ead02b11087f5df8ff89ee17e88e152172fee1400d692b845db93334be"): true, - common.HexToHash("0x2bf4ff3f0866677390d3c288ced2a701c864ffb9e96ec136ea32dac42fb95f95"): true, - common.HexToHash("0x9f34a7669bc48cba0eaf057f56aa0a3b6e93909eef57cfe4f66546d8d461b427"): true, - common.HexToHash("0x5510cfec8dd2d51bf27f8c8d1b7e68af56e18783715310ec5b297bbb674d1860"): true, - common.HexToHash("0x4738fd72bbb0f5496d95e5abdebb775463f832c2eede29e61f99ab4a987248ff"): true, - common.HexToHash("0xa1896b18267798037c29332389345583d876266fdfa74ab7a803c2a7d442f03c"): true, - common.HexToHash("0x605ddc19b3ce7be5bbaeebee98409e913a197b803ea8185755122025156d9d77"): true, - common.HexToHash("0xf1376e7988c88c8fae5ef2a6ef3b2801169af671c4cd8132a58c955aefb17177"): true, - common.HexToHash("0x77197ec7550a84a016f75156920ee0d74c772e7c89db81a071e9a396b2af73f2"): true, - common.HexToHash("0xb80d3a547a15350380d8561b61adff6ade7da36da7d56ce947531180c8cbd5aa"): true, - common.HexToHash("0x52a70bca4688bbc3d04e2f930bfc50ed8fbbc8f404844eef6b31b96b40374b05"): true, - common.HexToHash("0xfa1ee4def89f184353f044c03ee422fa2102150babd0ea7083b9baccfbe48509"): true, - common.HexToHash("0xc899cc9f0355b665d9234cea902c9e7257e548d24084fc5b1b7c14216e129b85"): true, - common.HexToHash("0x4314af325b4bc11baaadc94277999a1a372b572ccee30db8bb0adabd7a7140dd"): true, - common.HexToHash("0x7e4d56c1576c919281b768e3ca1bfb85b676443b2026c333c723e4bf8b702ff8"): true, - common.HexToHash("0xe2303b90dea65ccc1a9fe8da18e326fa71ccb377812a88eeb52032b8781f9138"): true, - common.HexToHash("0x18f57dcae844b5cb2741c88eb0b663a7796475a3a69c04a50ed32a4e81e9a149"): true, - common.HexToHash("0x5834eeeebe537d599ffb3d36810254332d00e5bd7bd3847ac5e88be739ed380f"): true, - common.HexToHash("0x917a5046effe5d62e94256ea10913cfb85e72b2af92193999ae84b9e94d610f7"): true, - common.HexToHash("0x57ae6ff53bc4b3e5d9e56e5b0ecf488a6b109c19755b7780078921286ad90434"): true, - common.HexToHash("0x66d155f16ad5b8b0e29e2c6a6c820382a41335df9e6a21b02c50ee5a841a0fff"): true, - common.HexToHash("0x2c36e16e4acbd26a9a75c397e606a18dfd44a8ae3de5b5844e24224bca9e3bf5"): true, - common.HexToHash("0x9d43895ac5e603186a886da7f5302ec71106e13362adf634673b2191925d8118"): true, - common.HexToHash("0xd5bdd7771d3b021f428ecca8f75a81504fb2523b89621a2f5f573e590e790996"): true, - common.HexToHash("0xf3c16b8f0b4be3156769943c92a156d8d60f07b68ce25ad6a30b33e7d3de76e9"): true, - common.HexToHash("0xd410e2cf7272aad93eba35781797a7cb4b26b5a1cca35ace865e2ec3238f2ecc"): true, - common.HexToHash("0x27c41ff582fa40319a89511beb5f30ca7d22f41b0d33321be58a2b8072437eb9"): true, - common.HexToHash("0x54ef09f9919932d9edae268fb558ad8d732e116e2ce16408c5cdaf206b84da1a"): true, - common.HexToHash("0x6187aa01ea087da574dbd823f5ddb55b9cf81f1f08057e801ed96192d125690f"): true, - common.HexToHash("0xd4328251c5ee28ed4bfc8680d9d2efe716a9a415108b8af343a4fb58dff88605"): true, - common.HexToHash("0x6a0b079de1e6164dd071d63b69e14431278173c58412358f81435011dcf9937d"): true, - common.HexToHash("0xd62b2753f4ff54d33d6f02c2cb853132994ddfd2944b845598ff9ad035eef2f2"): true, - common.HexToHash("0xb06cf999c6d861a205ed88a1c0ae76f2d81f7584fe5416e91af67186774e2590"): true, - common.HexToHash("0x552316ae8a4372574045c1a8a2edb51b2d3ff8f6cc07151627505bcaf9f1c06d"): true, - common.HexToHash("0xa9cfe5313bc4f618395e483a51ab36256277dc67fa9ce4246cdc6c8fbd89fed0"): true, - common.HexToHash("0x7a2fa87947512ee78dd99d4bf4fbe8c7e4ea135c0b950d6d0d0bff27e70f7bfe"): true, - common.HexToHash("0x39de5e5ba315f3786fe13e1ebddb4a068b9d06953b039f674e4fb02ea3b99311"): true, - common.HexToHash("0xd1663701b0148978890e787533240f69ccc31738947ea2f3c5e9270aa1ab17c4"): true, - common.HexToHash("0x718aedbc1bd16f90bd2019483fffe3027ff4df90cdd59eb691e70cfd54266f6d"): true, - common.HexToHash("0xd93cbb04ebd5752641a36dbe18b8705947a56ec765e01c47f0d872cb7daf4abb"): true, - common.HexToHash("0xcee320903216fa89618047e9cd2af9653f62c261f3bfdd837d70e80496df8d17"): true, - common.HexToHash("0x7d1affe74a8dca38ab56c433e165af9c5c75e4be90f5425eb18dc25c7e1da074"): true, - common.HexToHash("0x5bf9d5b53f31682e927f9b2193daec44e09506b867a7c815bd06283a8db0a584"): true, - common.HexToHash("0xfdf4b6c184b26cc910db96fc95760a7eb39a0d141a64ce9ed99f5aafcf4e01f6"): true, - common.HexToHash("0xad091e9928c493e6bb92753889b50a003787e81266d93376b20ef5dae94e5a51"): true, - common.HexToHash("0xb9ab3712efd0e5c767a1289650d5c7bfa8b9f91ce589d4f9b19fc3ad2db4f285"): true, - common.HexToHash("0x67b2f235af22d5be0bafc0f74779547cd0b4c5208ef09e40805ada4914ce9d3f"): true, - common.HexToHash("0xe9bd070e555193d3e033e0e5800cb5ee7c8b8cd8fda033760f54a63c1eb9d614"): true, - common.HexToHash("0x45b42b5fda64da7fdf5c9901312481baec2f3fd1e0a183c72e7615d31cde7ddd"): true, - common.HexToHash("0x54297d1ec78c5235967057f10bb5325499f95f7eefefdac9244076c62a58c3b1"): true, - common.HexToHash("0x5d525c4b30df13e22190b78c6aabe8409f8dc11f990f57cf06f4b8248e1ef324"): true, - common.HexToHash("0x7bd5bbea138853f7ab136b977d74db83985af085852fac1da7e7874af35ba65e"): true, - common.HexToHash("0x3155109b6ad841e75ce5399bc603fac7507ab18a693f3a9c616f6e17b5017ed7"): true, - common.HexToHash("0xaa9d9e114bf4063c15954b01dfc1a889dbc8e8159d9ef0a3651660bddad0446c"): true, - common.HexToHash("0x9f9dfd479983345a85a43acd680efdbec969067c1e6885851608d467a2d98fe1"): true, - common.HexToHash("0x304a356ae99121a9540babc9707c62b4c41f2f581a5e372ca04a374987c1566c"): true, - common.HexToHash("0xad1222c85393d0a32efcc152fe1e2df707b9b28289fc4af889a5e905c0863ca1"): true, - common.HexToHash("0x3752f3fc92b7d717c99869198e6a04bfb4a603b09426b6cdcf56d35981ec794f"): true, - common.HexToHash("0xc29624aa720f53e2834c316c2453ada58e8099f4cea46ad555a08b9088cd309b"): true, - common.HexToHash("0xd0993399d602aabb6e5ad3175e829ae99067aef9f125c8fb5b6060d01f4dcf6d"): true, - common.HexToHash("0x980640461434ef986262b59609edac0ded911dba84e27c2ef7e2d3eab72ae58f"): true, - common.HexToHash("0x7ed3ea59226f9e0fa647a72d03906269b4adf6473f3128490c05b4b32dc787cc"): true, - common.HexToHash("0x0b1f47516e5a8b6d19755d8166c607bbbc13e6465f1da8d118b6a26663bc5c3b"): true, - common.HexToHash("0x1d2d3831390f449ecac4415f433bd784c32a6421f76236896b5791683d163552"): true, - common.HexToHash("0xf5142d5cc6b171e24d85746fe40ed1c982e3e1dc6b8d4a5290a02ceebf9c71b9"): true, - common.HexToHash("0x9866e7f58aea3841719d2f96cb4118d2efa078fd84f709009ed579c33c89c82a"): true, - common.HexToHash("0x4192de0810d0cdeca111ec20dddf72fe693e7779e9909ca44470043fac11f2df"): true, - common.HexToHash("0xfeca51ea53cd94bd7d5b535290d7b712707e0e1fddcf790840586bfe1fe22c0e"): true, - common.HexToHash("0x0bc2c5704d60c8c0f2232e4b97c6a0a92528d9b16484c74aad4db9559052d7b9"): true, - common.HexToHash("0x4d453b0fb2ac05829616d16d154745dc46e619509ad8a89e54fff2c2d06c443d"): true, - common.HexToHash("0x624894b3ede185b16645f147a10238c74b192ffd89cb5c90f6433ed268ff1df7"): true, - common.HexToHash("0x84c7e5b7eb80edb9cf35923971277cf5c53a984d383845292a38bc704251916e"): true, - common.HexToHash("0x7ff681ba115e39f18c6200f5770b389a8a4a22f45d81a51acbaa36aa4010be8b"): true, - common.HexToHash("0xe3b5656d8643f42edfca8a86d4a0724c0473ecce1132e811ae3740320a5d87f4"): true, - common.HexToHash("0xcf9a6e62301deff138455b3b21f468024363384a7b9d747a8b51f634cf78bd80"): true, - common.HexToHash("0x486744320db74b4c17b5163ac2b3dceb20ff320932fc7e197335c640605d2e1d"): true, - common.HexToHash("0x60bd77c934d9885fb53b7e6b2fe166a654c8d4331e3aff8d84ee306c6599971a"): true, - common.HexToHash("0x512cace2a3e5c326e543606c5c39eef9bba17c6c1c812e29a808c117d27e8743"): true, - common.HexToHash("0xb046612a0048ee5602a0a9d73b091061142b9433fe98f4f95e4abdfbaf3585b2"): true, - common.HexToHash("0x3f33d0a01d14b9f5ef58cce6449f9ef011f19836ce055f84ad84103aafe02211"): true, - common.HexToHash("0x6abe8b77b0cbe0bbbeaee7bca24979adc702ff81e350fd745608e129dae4043a"): true, - common.HexToHash("0xacdba686bf9aa57d466d785552921e1a425e7877b1a33009ee851c01e66cea49"): true, - common.HexToHash("0xac2459ccb3156d56d24790358c8bb995427a8d2d768d65dca94a1e283c905f62"): true, - common.HexToHash("0x4fbb34164b7d330b345a9ee65e80860188e80d7dd41a998ca835dd6853eec733"): true, - common.HexToHash("0x05c550bdeb532c6aff332a1a455aa03fbc0d7666139a8d12feb5eaaec2cb4380"): true, - common.HexToHash("0xa484505835ee9b234f2b9a18bb28beaf4b2b5c2bd618149acf8cb810f86f61bc"): true, - common.HexToHash("0xfad6eae71404839ec86ccf3cc8d2f67e1ab3549aff5222355d3b8978240b5289"): true, - common.HexToHash("0x434813f871ba32cdfb9b2cc242e3c3c9e7383ad27bbab261dc4ade1f8ab0417b"): true, - common.HexToHash("0xe73a8e83b4ad5d77e35145dc67d71f0426f2cb844ed851163adfbc1d7214638e"): true, - common.HexToHash("0x66b44dc872b92daeb7c56336c868a501232b4bbd3ede237605cbbc0addd7dd01"): true, - common.HexToHash("0x4c7be533d3cf79a4e0ab4f6941a94dac5b2b18cd5c62f342ddf5341736f3a4ae"): true, - common.HexToHash("0xd721b8afdb1b4644c0d21ff2ab1a9c95d849d34ef6d695147f4d77a4ab4e3b26"): true, - common.HexToHash("0x10779e99cf64d6f5834d6b7be01479f2085b7ec1aba583295ccf03882b1a4b9b"): true, - common.HexToHash("0x4b23e5b16d2e4e9237d9b20f231d5a6d7c2c1c3c25f420575056d7e9239542cd"): true, - common.HexToHash("0x64b4fb5ca16096cf2c472cd3501e211bf78f24a5bbdfb0a63484161bb7904523"): true, - common.HexToHash("0xb2c62a6ceeff1483fb9b53aae2e0a4181753390187d13d901d87b82c8189ace7"): true, - common.HexToHash("0x72c36d2cf9cfeb4291272be4d827b982b4c22d6bce87e623c60d0d2fa8912f78"): true, - common.HexToHash("0xdf4f6177eb117407751efd5e39cd47101e1a7a3298b1f3e62c586e0332f6bb14"): true, - common.HexToHash("0x091083c84b1047b550b5d626eef78360067354a44c9c1f17ab3da32d4a0ab675"): true, - common.HexToHash("0x2f2624ff1a3df966b58933585be4a23e634d8787432fa6507dbe31055a59e088"): true, - common.HexToHash("0xc7c2c477223b2fe9dceb421874e7fe21b5dac7d8f160040002bcd362f1a3c56e"): true, - common.HexToHash("0x43db96cd1f16d7eb4969153b2ab77f6adf294e2b25d37d6083f49c39597fd997"): true, - common.HexToHash("0x3cfeff570bd97c42e2b3957d33e5fd86f3f73154572b33c67291d863ddf861bd"): true, - common.HexToHash("0x3157970fbd37968c8cd5efb415e7bda9a24f872412ae5313af9894d8f0c53eaf"): true, - common.HexToHash("0x2e2668c22277a70dd9523342e9ee04019b04a3d3a68167b843856c01914c8301"): true, - common.HexToHash("0xa1f71bf222062dd08500761277a94a68870987fd6f5f63c0c05999024260839e"): true, - common.HexToHash("0x180b40bc702633cd72fe347e199e9a3be7874999d7b01c83bfbcec786bdd6796"): true, - common.HexToHash("0x85bd8abdaaf501880d432d43f44ad63784503439575c20db28f1e59dc4dc5225"): true, - common.HexToHash("0xf633cc2e962562b547f9803ec4fb70b9f71d2e1750f9bfe093b4408acce7bbf8"): true, - common.HexToHash("0xf0eb1d0fab2987951f695085f1add99b3195d0ca3e0ed9b60ffbaca04dc7b518"): true, - common.HexToHash("0x859b060e103c7b13befe7ae18d47a874bb091d54d24961fffdd5896020d317eb"): true, - common.HexToHash("0x02fd36f32483b2219fddf3d23c9755b50effa968cb43a0b6d9ef00daaa14510b"): true, - common.HexToHash("0x6e9b6c4ae7844869c1cc7b1ebe7aa7cc27633054ee007e7e5bcbb1786a04ff69"): true, - common.HexToHash("0x2bff36dd7f64aa5af4a03a68ca2e85bedd5d2d00ef131dda94d13b1db4723c9b"): true, - common.HexToHash("0xdaafc62841134d6b40e9c64ce7bf64bf98e3fda994407ca33a04d6c6ee0c5103"): true, - common.HexToHash("0x18996e055aac3438d477b83f9c1d3a1e8d807e75b022a2955877aa89935f826e"): true, - common.HexToHash("0xba8df1fb8a4e7402251aa4232209c905ae76ae70e3593a6a1bc211495b53b267"): true, - common.HexToHash("0xaeefc2634406cfef34189907c5b05583522082dd1f693df240545a15f76a99b2"): true, - common.HexToHash("0x5da4daf74c0db5f8a550e55bf301890e72ba09b027f6c6f691f7a987f894405d"): true, - common.HexToHash("0x9402d3915e204596b62820e0e40d738a703d1c13dda9bb8ae016218aba462abd"): true, - common.HexToHash("0x5fcaca79be2fa7ac6572b6ed62e8579ce533799edcbf1c2956e77c0e81ed9151"): true, - common.HexToHash("0xfedc90f490c0a9122e0ad71b756c3fb14ab2f086603013272ebaba3ba256eea9"): true, - common.HexToHash("0x1ffae809539978877aa20ff5da9fd6269444e57026b151d8d069360d971a8df2"): true, - common.HexToHash("0x6eea2d50f4ebcfb2d9710b87a5876a29f0de17dc88d028e010221cf7e00e81eb"): true, - common.HexToHash("0xf8bfca9e8084c8f0629bdc3b5b5f2553a7f1e6f70c7a3c24c9a4a04117e78bc3"): true, - common.HexToHash("0x9bed94bd79a7488aecfb1fda41067b07859d8c09b8cb767adbdac5b00804161f"): true, - common.HexToHash("0x65f2b5f8af9082c9fb27d80f219be35ca990df354a756379f976bf91f2251883"): true, - common.HexToHash("0xcfeab12d7a8e472250e219637011459b99f4062ba4f6ee6ecd3a2a46d99ead9f"): true, - common.HexToHash("0x5bafaeed11b6feb6ab1b805091b59331ac54df08e1c7c7c2431b34ea8668e3e6"): true, - common.HexToHash("0x79b181167c4e0280eacd9adbdf957845097e6cb01c598905ba37dca3ec16ac66"): true, - common.HexToHash("0xd5b9c767834214a68376b260d825624a3c4ba917ebe28bcf1b06c525471a65cb"): true, - common.HexToHash("0xc1f9b00cf17f96f3d06fcb2f62675bd9b2303bbbbf208b7d74176681cf8d4777"): true, - common.HexToHash("0x09a31e73689c9339855ffe22542ea4a417288fb276130b4de99eb833528540af"): true, - common.HexToHash("0x8e946ac3e56e99759ee4357f06c9070b5fd742551d85041b7c6320ee9f82fc93"): true, - common.HexToHash("0x20af83bb67730f90355ec2b13536cf05eaf9e3da14a2096e56096f38f90c3f15"): true, - common.HexToHash("0x5598dc7312dcf943776625047bff1f7f287fcb8ba78de41343b9a1aa1748010e"): true, - common.HexToHash("0xcfa58d74b8f0de548d01ba5cea44af0e02b68579b0d2bf146aa3883ca2d5707b"): true, - common.HexToHash("0x3dd0efbf33321d079d6c5eb5f4a0892d0e3acf1a5a858e149eeb6fc809477d3e"): true, - common.HexToHash("0x1ae3ba422e13be8ce2dfbdc427b7f9565c8cf0c64318a51a7711838a8b04b9e7"): true, - common.HexToHash("0xc5228e0b9e49eeeb3fc923a563103339de9527e7547e203517668ea64db198a7"): true, - common.HexToHash("0x67ce79d626f1925fd196db430525d0ba0c2e41837cde00b175f4d1cb90c3c84c"): true, - common.HexToHash("0xc384cc216342b9fb529efbed00bc9a5fd0fb3f2eb7f396b3e90cfda151103860"): true, - common.HexToHash("0xdf341a135466eac1326d5596f9c6aa6e066a908258a4ec94918a73e84f155f0d"): true, - common.HexToHash("0x2d4ecce29c53b761352c332e582eb3683175d49ee95c2f1ddc64f6b8af8927cc"): true, - common.HexToHash("0xcc5381a0447254ca4d6042b6c85917300202409ccae83e6357b942cce1b0c240"): true, - common.HexToHash("0xca6393519a7ded861467ecfc467764a453ef7d26bcb08ae168fd21f7322226b6"): true, - common.HexToHash("0xf6a8221ccae907afb1567cad14acad68604af0e742497c3667a1864c1ae38c49"): true, - common.HexToHash("0x839127e9bb0d4bf6f29a90d1bbed8159647f8f943eb5c6ee2503dc5d6067af10"): true, - common.HexToHash("0x6bfb641277f5d218abfb55a5a1eba517be3069f1be545f6bc6832af8916a0f49"): true, - common.HexToHash("0x3967f9c16ef06e02e4496e95169a396463c68ce5985695f1523289ac635d450c"): true, - common.HexToHash("0x3e63bfebff8be233e2352ac5a784bae34c9c481038b8607c1b2cf7db47fc77e7"): true, - common.HexToHash("0xc945ce775895fa3de520d11b64ce63956e76a02326cf1b06421d742c51a91c35"): true, - common.HexToHash("0x35fa312e8ee4b87f51a71c2cbf23fde64e48a078795fac3a410c4c777c2324c1"): true, - common.HexToHash("0xc2011db5db6eecdf5b9e25ecdde215939024cff0cc325516e9231454548edd11"): true, - common.HexToHash("0xbf350f2aa20fe179e3aff0e4ce7f7e971817d7578efc3b78706019aea370fd7b"): true, - common.HexToHash("0x54b466c8abf10d8166e2a5392b0f25f082d65c51d8e4a9d26f26a83ce4ade1b6"): true, - common.HexToHash("0x7891cd6b12117e7a1aecccbbdf6723462e8064b25355d6ccb945684ed6d4b424"): true, - common.HexToHash("0x2f8c2305fd8ebf1e59dc328ef50163b554a3b58c08aea3437d88003f9b2e77a7"): true, - common.HexToHash("0xf617dd94df9a49cc6eb438f5fb5019244c92721d9769b017d3535bca5b0ae69a"): true, - common.HexToHash("0x8a8311025c3ff614fc7439d9d1cf705029db2ccb89f780d2c2ff0eac62617820"): true, - common.HexToHash("0xbd7db4429d0d3da187d72dc2e20c694b4da5d5e068204cd33cd62e5128dc3341"): true, - common.HexToHash("0xe3be2584ba9a1f19cc03d9447a848f4e767b6cbd17d5702a71ccf9223eb9d2b7"): true, - common.HexToHash("0xcea45d58d3b7ec48f55b1e557be12ab55979dd1963927b5062634602a8fe60bd"): true, - common.HexToHash("0x281c17c00aff9d53e19a74e7c4656a522af337e09ae4eae7b8799e8770728026"): true, - common.HexToHash("0xecd679d95f9e3c25e42ab1d1c3c52ecf2c5af1b8f745da67e0ca17d25460b0e8"): true, - common.HexToHash("0x1fec4948023fa9b5bbc6906b9d9e7b0609c520276af80d7b150c15563860f935"): true, - common.HexToHash("0xffcb2405d1e53131c36d5c0fe19e983862f28181604688ce6049d1f95b7ac0de"): true, - common.HexToHash("0x807756d59481ccc5933ddd1f6dbdbc453e02e796f53e8f98219f74b39f9a6d8a"): true, - common.HexToHash("0xebcd9acee77a1938d94b520fd5fbd14286f0c24e4b6e39c4c7ff3254201f128d"): true, - common.HexToHash("0x4b65a07cb34534a1cf3d42876b7e3fec0857c2db6c394cc8d9edb8a56f5c603b"): true, - common.HexToHash("0xd5d218821f840e7c482edb833ddfe83d91ea98ddf85870cadafaaba5cc265e70"): true, - common.HexToHash("0xd10041cb4db026a7dd62abc407cf38ae4d626de0d2bd1aea009aaf62d61874fa"): true, - common.HexToHash("0x98c13e2b19a57948ff28601e02eb0c86d2a2717719a55aef23f688bf57f65eef"): true, - common.HexToHash("0x77bcb91bb115172de82286b40f9d8b653bf4499a754af12c260557d156d2846c"): true, - common.HexToHash("0x993abd321fab7b5806621b800a61eb09a64c8371446a54bb336d2214aab564e6"): true, - common.HexToHash("0xea8d8c1a7e90f15d845b57e0875d95e5a56bb3fa919b813f5dcd53ee18a5dfb0"): true, - common.HexToHash("0x97a76bb7de8d018dc97f51b04de375368fba59c6a481c0ecff36c34c3c69755c"): true, - common.HexToHash("0xde6ba823df53acd77cafab7b8bcb192f57bfb1b7a0e0ac0885ed7dd06408eba1"): true, - common.HexToHash("0x4d8eb77a10603a6a1092f222e53192d3ea04bfcf6b2535252ee9d025eda6e035"): true, - common.HexToHash("0x974dab0aca5b511cd879220f864f5d00e206b19cc31517353376d74588dc6584"): true, - common.HexToHash("0xbd996c7f4e81dd6c7e40a3b2f77e18c9d81da59cf9c051b12455467d5a4daba1"): true, - common.HexToHash("0xf3165b999b2a1583267784d514523019d225ad589686e6b277aaa550f1fdca57"): true, - common.HexToHash("0xe0e6c1e2f65dfbdafba21257b33ba1cdbdc5e73ef604a26b7670814ab27f79a1"): true, - common.HexToHash("0x7fb1a5ee9c8e803446ab30f7f15085afe49e0ed5b24368b0663c4ca722c7a56f"): true, - common.HexToHash("0x9519657d4bd8c6d20fcb5044d253e8199b78fd984fe817207acb71c898131447"): true, - common.HexToHash("0x5f6d8d20803104321f8dc27836e11c1b5e968acd1a68a20d5b5f689a4d620e31"): true, - common.HexToHash("0x67ea4e3578a302dcd02f36fde192c57bc4d61de453e739242d58adeccd0001f9"): true, - common.HexToHash("0x7b7ef12edb54edc40875263728248b4b642da6afcc5e01636c26fc124e234578"): true, - common.HexToHash("0x3187b8a4e6d288e5ca512fa9c3fddfa80091c8008c36e24ce825ac0df856b001"): true, - common.HexToHash("0x69255c34cf9effc9db84fc8b4a774c1fce9e46a4320125f3028e6f4b0243eca8"): true, - common.HexToHash("0x60fcbbaaa0823b4c658e2dafcac20c0ef21d21072269fa406b8c20fcc1819bd7"): true, - common.HexToHash("0x560ab268ff09cdf42ebf05862f2100675d11791b793d17ab4dc128cd2091a746"): true, - common.HexToHash("0x91212b534fde3f21d8dd45db995424eb6cd8ae0652c46da063ceef016c673a23"): true, - common.HexToHash("0xa2975d0cca0146ce79165fbf8537728b8766d92c83acad5a54c1158b0ceaf85c"): true, - common.HexToHash("0xbc8e444ee8df63f2ce650ce2873d390a48365e1d50d89a795a1f923716c1b56a"): true, - common.HexToHash("0xa4f802e99df917e41bad00c83ee5dbaa861ff950a70fb7608051be1b0944ae59"): true, - common.HexToHash("0x34154fc87b6d28b3d2690ca88001f7438b6885e97239cd9b8128b6be154d830c"): true, - common.HexToHash("0x2a0c86c34374f211ab3973584227984719f0b87f77a8afa31fdcf3c467acacfa"): true, - common.HexToHash("0xfb992b5803e8dc1f2dbfb8c604e2ba7cb2b1488c8d7ccf6f4805e308d5350f3a"): true, - common.HexToHash("0x1a2514fd01e697c12f129cfb2bc2a81780a3e2a08aade45ebcc390e79995abf5"): true, - common.HexToHash("0x1419fdafb1ee3ea6cc608bb6faebd789dae0cf77d01cab7eb13471bc8797a022"): true, - common.HexToHash("0xda7c8fc5586c657a200c9cf7d3d58a66e0a2f85fe7e35f4fa79e0c76c30bc0b0"): true, - common.HexToHash("0xf09b480278faeba7bede5bcdb54c8aedd1035a7505e3c32f19890c482f5f0c7c"): true, - common.HexToHash("0x11057f1141f797ba816b4a256b13c60f2d2a446ab197b0e41df6976c9779befe"): true, - common.HexToHash("0x047e7dd4d9aedd436ebfd33b1481273d982dcbc0214e9524e52b3455ab1dad77"): true, -} - -/* Sample Go script used to parse through the list of OVM1 withdrawals to generate and -dump the hashes that need to get skipped as L1 finalization events are processed. - - Dune Query used to generate CSV: https://dune.com/queries/3231132/5404047 - -func GenerateOVM1Hashes() error { - file, err := os.Open("OVM1Withdrawals.csv") - if err != nil { - return err - } - - r := csv.NewReader(file) - records, err := r.ReadAll() - if err != nil { - return err - } - fmt.Printf("First Nonce: %s, Last Nonce: %s", records[1][0], records[len(records)-1][0]) - - withdrawals, messages := "", "" - for _, record := range records[1:] { - nonce, ok := new(big.Int).SetString(record[0], 10) - if !ok { - return fmt.Errorf("bad nonce: %s", record[0]) - } - - target := common.HexToAddress(record[1]) - sender := common.HexToAddress(record[2]) - data := common.FromHex(record[3]) - - legacyWithdrawal := crossdomain.NewLegacyWithdrawal(predeploys.L2CrossDomainMessengerAddr, target, sender, data, nonce) - - relayMsgVersion := record[6] - switch relayMsgVersion { - case "0": - messageHash, err := crossdomain.HashCrossDomainMessageV0(target, sender, data, nonce) - if err != nil { - return err - } - - messages = fmt.Sprintf("%s\ncommon.HexToHash(\"%s\"): true,", messages, messageHash) - case "1": - l1CdmAddr := config.Presets[10].ChainConfig.L1Contracts.L1CrossDomainMessengerProxy - value, err := legacyWithdrawal.Value() - if err != nil { - return err - } - - migratedWithdrawal, err := crossdomain.MigrateWithdrawal(legacyWithdrawal, &l1CdmAddr, big.NewInt(int64(10))) - if err != nil { - return err - } - - withdrawalHash, err := migratedWithdrawal.Hash() - if err != nil { - return err - } - - messageHash, err := crossdomain.HashCrossDomainMessageV1(nonce, sender, target, value, new(big.Int), data) - if err != nil { - return err - } - - withdrawals = fmt.Sprintf("%s\ncommon.HexToHash(\"%s\"): true,", withdrawals, withdrawalHash) - messages = fmt.Sprintf("%s\ncommon.HexToHash(\"%s\"): true,", messages, messageHash) - } - } - - withdrawalsFile, err := os.Create("skipped_withdrawal_hashes.txt") - if err != nil { - return err - } - - messagesFile, err := os.Create("skipped_message_hashes.txt") - if err != nil { - return err - } - - withdrawalsFile.WriteString(withdrawals) - messagesFile.WriteString(messages) - return nil -} - -*/ diff --git a/indexer/processors/bridge/types.go b/indexer/processors/bridge/types.go deleted file mode 100644 index 95e7d7ebf616..000000000000 --- a/indexer/processors/bridge/types.go +++ /dev/null @@ -1,8 +0,0 @@ -package bridge - -import "github.com/ethereum/go-ethereum/common" - -type logKey struct { - BlockHash common.Hash - LogIndex uint64 -} diff --git a/indexer/processors/contracts/cross_domain_messenger.go b/indexer/processors/contracts/cross_domain_messenger.go deleted file mode 100644 index 628822f54d55..000000000000 --- a/indexer/processors/contracts/cross_domain_messenger.go +++ /dev/null @@ -1,149 +0,0 @@ -package contracts - -import ( - "fmt" - "math/big" - - "github.com/ethereum/go-ethereum/common" - - "github.com/ethereum-optimism/optimism/indexer/bigint" - "github.com/ethereum-optimism/optimism/indexer/bindings" - "github.com/ethereum-optimism/optimism/indexer/database" - "github.com/ethereum-optimism/optimism/op-chain-ops/crossdomain" -) - -type CrossDomainMessengerSentMessageEvent struct { - Event *database.ContractEvent - BridgeMessage database.BridgeMessage - Version uint16 -} - -type CrossDomainMessengerRelayedMessageEvent struct { - Event *database.ContractEvent - MessageHash common.Hash -} - -func CrossDomainMessengerSentMessageEvents(chainSelector string, contractAddress common.Address, db *database.DB, fromHeight, toHeight *big.Int) ([]CrossDomainMessengerSentMessageEvent, error) { - crossDomainMessengerAbi, err := bindings.CrossDomainMessengerMetaData.GetAbi() - if err != nil { - return nil, err - } - - sentMessageEventAbi := crossDomainMessengerAbi.Events["SentMessage"] - contractEventFilter := database.ContractEvent{ContractAddress: contractAddress, EventSignature: sentMessageEventAbi.ID} - sentMessageEvents, err := db.ContractEvents.ContractEventsWithFilter(contractEventFilter, chainSelector, fromHeight, toHeight) - if err != nil { - return nil, err - } - if len(sentMessageEvents) == 0 { - return nil, nil - } - - sentMessageExtensionEventAbi := crossDomainMessengerAbi.Events["SentMessageExtension1"] - contractEventFilter = database.ContractEvent{ContractAddress: contractAddress, EventSignature: sentMessageExtensionEventAbi.ID} - sentMessageExtensionEvents, err := db.ContractEvents.ContractEventsWithFilter(contractEventFilter, chainSelector, fromHeight, toHeight) - if err != nil { - return nil, err - } - if len(sentMessageExtensionEvents) > len(sentMessageEvents) { - return nil, fmt.Errorf("mismatch. %d sent messages & %d sent message extensions", len(sentMessageEvents), len(sentMessageExtensionEvents)) - } - - // We handle version zero messages uniquely since the first version of cross domain messages - // do not have the SentMessageExtension1 event emitted, introduced in version 1. - numVersionZeroMessages := len(sentMessageEvents) - len(sentMessageExtensionEvents) - crossDomainSentMessages := make([]CrossDomainMessengerSentMessageEvent, len(sentMessageEvents)) - for i := range sentMessageEvents { - sentMessage := bindings.CrossDomainMessengerSentMessage{Raw: *sentMessageEvents[i].RLPLog} - err = UnpackLog(&sentMessage, sentMessageEvents[i].RLPLog, sentMessageEventAbi.Name, crossDomainMessengerAbi) - if err != nil { - return nil, err - } - - _, versionBig := crossdomain.DecodeVersionedNonce(sentMessage.MessageNonce) - version := uint16(versionBig.Uint64()) - if i < numVersionZeroMessages && version != 0 { - return nil, fmt.Errorf("expected version zero nonce: nonce %d, tx_hash %s", sentMessage.MessageNonce, sentMessage.Raw.TxHash) - } - - value := bigint.Zero - var messageHash common.Hash - switch version { - case 0: - messageHash, err = crossdomain.HashCrossDomainMessageV0(sentMessage.Target, sentMessage.Sender, sentMessage.Message, sentMessage.MessageNonce) - if err != nil { - return nil, err - } - - case 1: - sentMessageExtension := bindings.CrossDomainMessengerSentMessageExtension1{Raw: *sentMessageExtensionEvents[i].RLPLog} - err = UnpackLog(&sentMessageExtension, sentMessageExtensionEvents[i].RLPLog, sentMessageExtensionEventAbi.Name, crossDomainMessengerAbi) - if err != nil { - return nil, err - } - - value = sentMessageExtension.Value - messageHash, err = crossdomain.HashCrossDomainMessageV1(sentMessage.MessageNonce, sentMessage.Sender, sentMessage.Target, value, sentMessage.GasLimit, sentMessage.Message) - if err != nil { - return nil, err - } - - default: - // NOTE: We explicitly fail here since the presence of a new version means finalization - // logic needs to be updated to ensure L1 finalization can run from genesis and handle - // the changing version formats. Any unrelayed OVM1 messages that have been hardcoded with - // the v1 hash format also need to be updated. This failure is a serving indicator - return nil, fmt.Errorf("expected cross domain version 0 or version 1: %d", version) - } - - crossDomainSentMessages[i] = CrossDomainMessengerSentMessageEvent{ - Event: &sentMessageEvents[i], - Version: version, - BridgeMessage: database.BridgeMessage{ - MessageHash: messageHash, - Nonce: sentMessage.MessageNonce, - SentMessageEventGUID: sentMessageEvents[i].GUID, - GasLimit: sentMessage.GasLimit, - Tx: database.Transaction{ - FromAddress: sentMessage.Sender, - ToAddress: sentMessage.Target, - Amount: value, - Data: sentMessage.Message, - Timestamp: sentMessageEvents[i].Timestamp, - }, - }, - } - } - - return crossDomainSentMessages, nil -} - -func CrossDomainMessengerRelayedMessageEvents(chainSelector string, contractAddress common.Address, db *database.DB, fromHeight, toHeight *big.Int) ([]CrossDomainMessengerRelayedMessageEvent, error) { - crossDomainMessengerAbi, err := bindings.CrossDomainMessengerMetaData.GetAbi() - if err != nil { - return nil, err - } - - relayedMessageEventAbi := crossDomainMessengerAbi.Events["RelayedMessage"] - contractEventFilter := database.ContractEvent{ContractAddress: contractAddress, EventSignature: relayedMessageEventAbi.ID} - relayedMessageEvents, err := db.ContractEvents.ContractEventsWithFilter(contractEventFilter, chainSelector, fromHeight, toHeight) - if err != nil { - return nil, err - } - - crossDomainRelayedMessages := make([]CrossDomainMessengerRelayedMessageEvent, len(relayedMessageEvents)) - for i := range relayedMessageEvents { - relayedMessage := bindings.CrossDomainMessengerRelayedMessage{Raw: *relayedMessageEvents[i].RLPLog} - err = UnpackLog(&relayedMessage, relayedMessageEvents[i].RLPLog, relayedMessageEventAbi.Name, crossDomainMessengerAbi) - if err != nil { - return nil, err - } - - crossDomainRelayedMessages[i] = CrossDomainMessengerRelayedMessageEvent{ - Event: &relayedMessageEvents[i], - MessageHash: relayedMessage.MsgHash, - } - } - - return crossDomainRelayedMessages, nil -} diff --git a/indexer/processors/contracts/l2_to_l1_message_passer.go b/indexer/processors/contracts/l2_to_l1_message_passer.go deleted file mode 100644 index a33e7860bd1a..000000000000 --- a/indexer/processors/contracts/l2_to_l1_message_passer.go +++ /dev/null @@ -1,56 +0,0 @@ -package contracts - -import ( - "math/big" - - "github.com/ethereum-optimism/optimism/indexer/bindings" - "github.com/ethereum-optimism/optimism/indexer/database" - "github.com/ethereum/go-ethereum/common" -) - -type L2ToL1MessagePasserMessagePassed struct { - Event *database.ContractEvent - WithdrawalHash common.Hash - GasLimit *big.Int - Nonce *big.Int - Tx database.Transaction -} - -func L2ToL1MessagePasserMessagePassedEvents(contractAddress common.Address, db *database.DB, fromHeight, toHeight *big.Int) ([]L2ToL1MessagePasserMessagePassed, error) { - l2ToL1MessagePasserAbi, err := bindings.L2ToL1MessagePasserMetaData.GetAbi() - if err != nil { - return nil, err - } - - messagePassedAbi := l2ToL1MessagePasserAbi.Events["MessagePassed"] - contractEventFilter := database.ContractEvent{ContractAddress: contractAddress, EventSignature: messagePassedAbi.ID} - messagePassedEvents, err := db.ContractEvents.L2ContractEventsWithFilter(contractEventFilter, fromHeight, toHeight) - if err != nil { - return nil, err - } - - messagesPassed := make([]L2ToL1MessagePasserMessagePassed, len(messagePassedEvents)) - for i := range messagePassedEvents { - messagePassed := bindings.L2ToL1MessagePasserMessagePassed{Raw: *messagePassedEvents[i].RLPLog} - err := UnpackLog(&messagePassed, messagePassedEvents[i].RLPLog, messagePassedAbi.Name, l2ToL1MessagePasserAbi) - if err != nil { - return nil, err - } - - messagesPassed[i] = L2ToL1MessagePasserMessagePassed{ - Event: &messagePassedEvents[i].ContractEvent, - WithdrawalHash: messagePassed.WithdrawalHash, - Nonce: messagePassed.Nonce, - GasLimit: messagePassed.GasLimit, - Tx: database.Transaction{ - FromAddress: messagePassed.Sender, - ToAddress: messagePassed.Target, - Amount: messagePassed.Value, - Data: messagePassed.Data, - Timestamp: messagePassedEvents[i].Timestamp, - }, - } - } - - return messagesPassed, nil -} diff --git a/indexer/processors/contracts/legacy_ctc.go b/indexer/processors/contracts/legacy_ctc.go deleted file mode 100644 index 130947f1a252..000000000000 --- a/indexer/processors/contracts/legacy_ctc.go +++ /dev/null @@ -1,58 +0,0 @@ -package contracts - -import ( - "math/big" - - "github.com/ethereum-optimism/optimism/indexer/bigint" - "github.com/ethereum-optimism/optimism/indexer/bindings" - "github.com/ethereum-optimism/optimism/indexer/database" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" -) - -type LegacyCTCDepositEvent struct { - Event *database.ContractEvent - Tx database.Transaction - TxHash common.Hash - GasLimit *big.Int -} - -func LegacyCTCDepositEvents(contractAddress common.Address, db *database.DB, fromHeight, toHeight *big.Int) ([]LegacyCTCDepositEvent, error) { - ctcAbi, err := bindings.CanonicalTransactionChainMetaData.GetAbi() - if err != nil { - return nil, err - } - - transactionEnqueuedEventAbi := ctcAbi.Events["TransactionEnqueued"] - contractEventFilter := database.ContractEvent{ContractAddress: contractAddress, EventSignature: transactionEnqueuedEventAbi.ID} - events, err := db.ContractEvents.L1ContractEventsWithFilter(contractEventFilter, fromHeight, toHeight) - if err != nil { - return nil, err - } - - ctcTxDeposits := make([]LegacyCTCDepositEvent, len(events)) - for i := range events { - txEnqueued := bindings.CanonicalTransactionChainTransactionEnqueued{Raw: *events[i].RLPLog} - err = UnpackLog(&txEnqueued, events[i].RLPLog, transactionEnqueuedEventAbi.Name, ctcAbi) - if err != nil { - return nil, err - } - - // Enqueued Deposits do not carry a `msg.value` amount. ETH is only minted on L2 via the L1StandardBridge - ctcTxDeposits[i] = LegacyCTCDepositEvent{ - Event: &events[i].ContractEvent, - GasLimit: txEnqueued.GasLimit, - TxHash: types.NewTransaction(0, txEnqueued.Target, bigint.Zero, txEnqueued.GasLimit.Uint64(), nil, txEnqueued.Data).Hash(), - Tx: database.Transaction{ - FromAddress: txEnqueued.L1TxOrigin, - ToAddress: txEnqueued.Target, - Amount: bigint.Zero, - Data: txEnqueued.Data, - Timestamp: events[i].Timestamp, - }, - } - } - - return ctcTxDeposits, nil -} diff --git a/indexer/processors/contracts/legacy_standard_bridge.go b/indexer/processors/contracts/legacy_standard_bridge.go deleted file mode 100644 index 723aa17d748b..000000000000 --- a/indexer/processors/contracts/legacy_standard_bridge.go +++ /dev/null @@ -1,123 +0,0 @@ -package contracts - -import ( - "math/big" - - "github.com/ethereum-optimism/optimism/indexer/bindings" - "github.com/ethereum-optimism/optimism/indexer/database" - - "github.com/ethereum/go-ethereum/common" -) - -type LegacyBridgeEvent struct { - Event *database.ContractEvent - BridgeTransfer database.BridgeTransfer -} - -func L1StandardBridgeLegacyDepositInitiatedEvents(contractAddress common.Address, db *database.DB, fromHeight, toHeight *big.Int) ([]LegacyBridgeEvent, error) { - // The L1StandardBridge ABI contains the legacy events - l1StandardBridgeAbi, err := bindings.L1StandardBridgeMetaData.GetAbi() - if err != nil { - return nil, err - } - - ethDepositEventAbi := l1StandardBridgeAbi.Events["ETHDepositInitiated"] - erc20DepositEventAbi := l1StandardBridgeAbi.Events["ERC20DepositInitiated"] - - // Grab both ETH & ERC20 Events - contractEventFilter := database.ContractEvent{ContractAddress: contractAddress, EventSignature: ethDepositEventAbi.ID} - ethDepositEvents, err := db.ContractEvents.L1ContractEventsWithFilter(contractEventFilter, fromHeight, toHeight) - if err != nil { - return nil, err - } - contractEventFilter.EventSignature = erc20DepositEventAbi.ID - erc20DepositEvents, err := db.ContractEvents.L1ContractEventsWithFilter(contractEventFilter, fromHeight, toHeight) - if err != nil { - return nil, err - } - - // Represent the ETH deposits via the ETH ERC20 predeploy address - deposits := make([]LegacyBridgeEvent, len(ethDepositEvents)+len(erc20DepositEvents)) - for i := range ethDepositEvents { - bridgeEvent := bindings.L1StandardBridgeETHDepositInitiated{Raw: *ethDepositEvents[i].RLPLog} - err := UnpackLog(&bridgeEvent, &bridgeEvent.Raw, ethDepositEventAbi.Name, l1StandardBridgeAbi) - if err != nil { - return nil, err - } - deposits[i] = LegacyBridgeEvent{ - Event: ðDepositEvents[i].ContractEvent, - BridgeTransfer: database.BridgeTransfer{ - TokenPair: database.ETHTokenPair, - Tx: database.Transaction{ - FromAddress: bridgeEvent.From, - ToAddress: bridgeEvent.To, - Amount: bridgeEvent.Amount, - Data: bridgeEvent.ExtraData, - Timestamp: ethDepositEvents[i].Timestamp, - }, - }, - } - } - for i := range erc20DepositEvents { - bridgeEvent := bindings.L1StandardBridgeERC20DepositInitiated{Raw: *erc20DepositEvents[i].RLPLog} - err := UnpackLog(&bridgeEvent, &bridgeEvent.Raw, erc20DepositEventAbi.Name, l1StandardBridgeAbi) - if err != nil { - return nil, err - } - deposits[len(ethDepositEvents)+i] = LegacyBridgeEvent{ - Event: &erc20DepositEvents[i].ContractEvent, - BridgeTransfer: database.BridgeTransfer{ - TokenPair: database.TokenPair{LocalTokenAddress: bridgeEvent.L1Token, RemoteTokenAddress: bridgeEvent.L2Token}, - Tx: database.Transaction{ - FromAddress: bridgeEvent.From, - ToAddress: bridgeEvent.To, - Amount: bridgeEvent.Amount, - Data: bridgeEvent.ExtraData, - Timestamp: erc20DepositEvents[i].Timestamp, - }, - }, - } - } - - return deposits, nil -} - -func L2StandardBridgeLegacyWithdrawalInitiatedEvents(contractAddress common.Address, db *database.DB, fromHeight, toHeight *big.Int) ([]LegacyBridgeEvent, error) { - // The L2StandardBridge ABI contains the legacy events - l2StandardBridgeAbi, err := bindings.L2StandardBridgeMetaData.GetAbi() - if err != nil { - return nil, err - } - - withdrawalInitiatedEventAbi := l2StandardBridgeAbi.Events["WithdrawalInitiated"] - contractEventFilter := database.ContractEvent{ContractAddress: contractAddress, EventSignature: withdrawalInitiatedEventAbi.ID} - withdrawalEvents, err := db.ContractEvents.L2ContractEventsWithFilter(contractEventFilter, fromHeight, toHeight) - if err != nil { - return nil, err - } - - withdrawals := make([]LegacyBridgeEvent, len(withdrawalEvents)) - for i := range withdrawalEvents { - bridgeEvent := bindings.L2StandardBridgeWithdrawalInitiated{Raw: *withdrawalEvents[i].RLPLog} - err := UnpackLog(&bridgeEvent, &bridgeEvent.Raw, withdrawalInitiatedEventAbi.Name, l2StandardBridgeAbi) - if err != nil { - return nil, err - } - - withdrawals[i] = LegacyBridgeEvent{ - Event: &withdrawalEvents[i].ContractEvent, - BridgeTransfer: database.BridgeTransfer{ - TokenPair: database.ETHTokenPair, - Tx: database.Transaction{ - FromAddress: bridgeEvent.From, - ToAddress: bridgeEvent.To, - Amount: bridgeEvent.Amount, - Data: bridgeEvent.ExtraData, - Timestamp: withdrawalEvents[i].Timestamp, - }, - }, - } - } - - return withdrawals, nil -} diff --git a/indexer/processors/contracts/optimism_portal.go b/indexer/processors/contracts/optimism_portal.go deleted file mode 100644 index 025b2d59bc7e..000000000000 --- a/indexer/processors/contracts/optimism_portal.go +++ /dev/null @@ -1,142 +0,0 @@ -package contracts - -import ( - "errors" - "math/big" - - "github.com/ethereum-optimism/optimism/indexer/bigint" - "github.com/ethereum-optimism/optimism/indexer/bindings" - "github.com/ethereum-optimism/optimism/indexer/database" - "github.com/ethereum-optimism/optimism/op-node/rollup/derive" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" -) - -type OptimismPortalTransactionDepositEvent struct { - Event *database.ContractEvent - DepositTx *types.DepositTx - Tx database.Transaction - GasLimit *big.Int -} - -type OptimismPortalWithdrawalProvenEvent struct { - *bindings.OptimismPortalWithdrawalProven - Event *database.ContractEvent -} - -type OptimismPortalWithdrawalFinalizedEvent struct { - *bindings.OptimismPortalWithdrawalFinalized - Event *database.ContractEvent -} - -func OptimismPortalTransactionDepositEvents(contractAddress common.Address, db *database.DB, fromHeight, toHeight *big.Int) ([]OptimismPortalTransactionDepositEvent, error) { - optimismPortalAbi, err := bindings.OptimismPortalMetaData.GetAbi() - if err != nil { - return nil, err - } - transactionDepositedEventAbi := optimismPortalAbi.Events["TransactionDeposited"] - if transactionDepositedEventAbi.ID != derive.DepositEventABIHash { - return nil, errors.New("op-node DepositEventABIHash & optimism portal TransactionDeposited ID mismatch") - } - - contractEventFilter := database.ContractEvent{ContractAddress: contractAddress, EventSignature: transactionDepositedEventAbi.ID} - transactionDepositEvents, err := db.ContractEvents.L1ContractEventsWithFilter(contractEventFilter, fromHeight, toHeight) - if err != nil { - return nil, err - } - - optimismPortalTxDeposits := make([]OptimismPortalTransactionDepositEvent, len(transactionDepositEvents)) - for i := range transactionDepositEvents { - depositTx, err := derive.UnmarshalDepositLogEvent(transactionDepositEvents[i].RLPLog) - if err != nil { - return nil, err - } - - txDeposit := bindings.OptimismPortalTransactionDeposited{Raw: *transactionDepositEvents[i].RLPLog} - err = UnpackLog(&txDeposit, transactionDepositEvents[i].RLPLog, transactionDepositedEventAbi.Name, optimismPortalAbi) - if err != nil { - return nil, err - } - - mint := depositTx.Mint - if mint == nil { - mint = bigint.Zero - } - - optimismPortalTxDeposits[i] = OptimismPortalTransactionDepositEvent{ - Event: &transactionDepositEvents[i].ContractEvent, - DepositTx: depositTx, - GasLimit: new(big.Int).SetUint64(depositTx.Gas), - Tx: database.Transaction{ - FromAddress: txDeposit.From, - ToAddress: txDeposit.To, - Amount: mint, - Data: depositTx.Data, - Timestamp: transactionDepositEvents[i].Timestamp, - }, - } - } - - return optimismPortalTxDeposits, nil -} - -func OptimismPortalWithdrawalProvenEvents(contractAddress common.Address, db *database.DB, fromHeight, toHeight *big.Int) ([]OptimismPortalWithdrawalProvenEvent, error) { - optimismPortalAbi, err := bindings.OptimismPortalMetaData.GetAbi() - if err != nil { - return nil, err - } - - withdrawalProvenEventAbi := optimismPortalAbi.Events["WithdrawalProven"] - contractEventFilter := database.ContractEvent{ContractAddress: contractAddress, EventSignature: withdrawalProvenEventAbi.ID} - withdrawalProvenEvents, err := db.ContractEvents.L1ContractEventsWithFilter(contractEventFilter, fromHeight, toHeight) - if err != nil { - return nil, err - } - - provenWithdrawals := make([]OptimismPortalWithdrawalProvenEvent, len(withdrawalProvenEvents)) - for i := range withdrawalProvenEvents { - withdrawalProven := bindings.OptimismPortalWithdrawalProven{Raw: *withdrawalProvenEvents[i].RLPLog} - err := UnpackLog(&withdrawalProven, withdrawalProvenEvents[i].RLPLog, withdrawalProvenEventAbi.Name, optimismPortalAbi) - if err != nil { - return nil, err - } - - provenWithdrawals[i] = OptimismPortalWithdrawalProvenEvent{ - OptimismPortalWithdrawalProven: &withdrawalProven, - Event: &withdrawalProvenEvents[i].ContractEvent, - } - } - - return provenWithdrawals, nil -} - -func OptimismPortalWithdrawalFinalizedEvents(contractAddress common.Address, db *database.DB, fromHeight, toHeight *big.Int) ([]OptimismPortalWithdrawalFinalizedEvent, error) { - optimismPortalAbi, err := bindings.OptimismPortalMetaData.GetAbi() - if err != nil { - return nil, err - } - - withdrawalFinalizedEventAbi := optimismPortalAbi.Events["WithdrawalFinalized"] - contractEventFilter := database.ContractEvent{ContractAddress: contractAddress, EventSignature: withdrawalFinalizedEventAbi.ID} - withdrawalFinalizedEvents, err := db.ContractEvents.L1ContractEventsWithFilter(contractEventFilter, fromHeight, toHeight) - if err != nil { - return nil, err - } - - finalizedWithdrawals := make([]OptimismPortalWithdrawalFinalizedEvent, len(withdrawalFinalizedEvents)) - for i := range withdrawalFinalizedEvents { - withdrawalFinalized := bindings.OptimismPortalWithdrawalFinalized{Raw: *withdrawalFinalizedEvents[i].RLPLog} - err := UnpackLog(&withdrawalFinalized, withdrawalFinalizedEvents[i].RLPLog, withdrawalFinalizedEventAbi.Name, optimismPortalAbi) - if err != nil { - return nil, err - } - - finalizedWithdrawals[i] = OptimismPortalWithdrawalFinalizedEvent{ - OptimismPortalWithdrawalFinalized: &withdrawalFinalized, - Event: &withdrawalFinalizedEvents[i].ContractEvent, - } - } - - return finalizedWithdrawals, nil -} diff --git a/indexer/processors/contracts/standard_bridge.go b/indexer/processors/contracts/standard_bridge.go deleted file mode 100644 index 34f0eff7088f..000000000000 --- a/indexer/processors/contracts/standard_bridge.go +++ /dev/null @@ -1,173 +0,0 @@ -package contracts - -import ( - "math/big" - - "github.com/ethereum-optimism/optimism/indexer/bindings" - "github.com/ethereum-optimism/optimism/indexer/database" - "github.com/ethereum-optimism/optimism/op-service/predeploys" - - "github.com/ethereum/go-ethereum/common" -) - -type StandardBridgeInitiatedEvent struct { - Event *database.ContractEvent - BridgeTransfer database.BridgeTransfer -} - -type StandardBridgeFinalizedEvent struct { - Event *database.ContractEvent - BridgeTransfer database.BridgeTransfer -} - -// StandardBridgeInitiatedEvents extracts all initiated bridge events from the contracts that follow the StandardBridge ABI. The -// correlated CrossDomainMessenger nonce is also parsed from the associated messenger events. -func StandardBridgeInitiatedEvents(chainSelector string, contractAddress common.Address, db *database.DB, fromHeight, toHeight *big.Int) ([]StandardBridgeInitiatedEvent, error) { - ethBridgeInitiatedEvents, err := _standardBridgeInitiatedEvents[bindings.StandardBridgeETHBridgeInitiated](contractAddress, chainSelector, db, fromHeight, toHeight) - if err != nil { - return nil, err - } - - erc20BridgeInitiatedEvents, err := _standardBridgeInitiatedEvents[bindings.StandardBridgeERC20BridgeInitiated](contractAddress, chainSelector, db, fromHeight, toHeight) - if err != nil { - return nil, err - } - - return append(ethBridgeInitiatedEvents, erc20BridgeInitiatedEvents...), nil -} - -// StandardBridgeFinalizedEvents extracts all finalization bridge events from the contracts that follow the StandardBridge ABI. The -// correlated CrossDomainMessenger nonce is also parsed by looking at the parameters of the corresponding relayMessage transaction data. -func StandardBridgeFinalizedEvents(chainSelector string, contractAddress common.Address, db *database.DB, fromHeight, toHeight *big.Int) ([]StandardBridgeFinalizedEvent, error) { - ethBridgeFinalizedEvents, err := _standardBridgeFinalizedEvents[bindings.StandardBridgeETHBridgeFinalized](contractAddress, chainSelector, db, fromHeight, toHeight) - if err != nil { - return nil, err - } - - erc20BridgeFinalizedEvents, err := _standardBridgeFinalizedEvents[bindings.StandardBridgeERC20BridgeFinalized](contractAddress, chainSelector, db, fromHeight, toHeight) - if err != nil { - return nil, err - } - - return append(ethBridgeFinalizedEvents, erc20BridgeFinalizedEvents...), nil -} - -// parse out eth or erc20 bridge initiated events -func _standardBridgeInitiatedEvents[BridgeEventType bindings.StandardBridgeETHBridgeInitiated | bindings.StandardBridgeERC20BridgeInitiated]( - contractAddress common.Address, chainSelector string, db *database.DB, fromHeight, toHeight *big.Int, -) ([]StandardBridgeInitiatedEvent, error) { - standardBridgeAbi, err := bindings.StandardBridgeMetaData.GetAbi() - if err != nil { - return nil, err - } - - var eventType BridgeEventType - var eventName string - switch any(eventType).(type) { - case bindings.StandardBridgeETHBridgeInitiated: - eventName = "ETHBridgeInitiated" - case bindings.StandardBridgeERC20BridgeInitiated: - eventName = "ERC20BridgeInitiated" - default: - panic("should not be here") - } - - initiatedBridgeEventAbi := standardBridgeAbi.Events[eventName] - contractEventFilter := database.ContractEvent{ContractAddress: contractAddress, EventSignature: initiatedBridgeEventAbi.ID} - initiatedBridgeEvents, err := db.ContractEvents.ContractEventsWithFilter(contractEventFilter, chainSelector, fromHeight, toHeight) - if err != nil { - return nil, err - } - - standardBridgeInitiatedEvents := make([]StandardBridgeInitiatedEvent, len(initiatedBridgeEvents)) - for i := range initiatedBridgeEvents { - erc20Bridge := bindings.StandardBridgeERC20BridgeInitiated{Raw: *initiatedBridgeEvents[i].RLPLog} - err := UnpackLog(&erc20Bridge, initiatedBridgeEvents[i].RLPLog, eventName, standardBridgeAbi) - if err != nil { - return nil, err - } - - // If an ETH bridge, lets fill in the needed fields - switch any(eventType).(type) { - case bindings.StandardBridgeETHBridgeInitiated: - erc20Bridge.LocalToken = predeploys.LegacyERC20ETHAddr - erc20Bridge.RemoteToken = predeploys.LegacyERC20ETHAddr - } - - standardBridgeInitiatedEvents[i] = StandardBridgeInitiatedEvent{ - Event: &initiatedBridgeEvents[i], - BridgeTransfer: database.BridgeTransfer{ - TokenPair: database.TokenPair{LocalTokenAddress: erc20Bridge.LocalToken, RemoteTokenAddress: erc20Bridge.RemoteToken}, - Tx: database.Transaction{ - FromAddress: erc20Bridge.From, - ToAddress: erc20Bridge.To, - Amount: erc20Bridge.Amount, - Data: erc20Bridge.ExtraData, - Timestamp: initiatedBridgeEvents[i].Timestamp, - }, - }, - } - } - - return standardBridgeInitiatedEvents, nil -} - -// parse out eth or erc20 bridge finalization events -func _standardBridgeFinalizedEvents[BridgeEventType bindings.StandardBridgeETHBridgeFinalized | bindings.StandardBridgeERC20BridgeFinalized]( - contractAddress common.Address, chainSelector string, db *database.DB, fromHeight, toHeight *big.Int, -) ([]StandardBridgeFinalizedEvent, error) { - standardBridgeAbi, err := bindings.StandardBridgeMetaData.GetAbi() - if err != nil { - return nil, err - } - - var eventType BridgeEventType - var eventName string - switch any(eventType).(type) { - case bindings.StandardBridgeETHBridgeFinalized: - eventName = "ETHBridgeFinalized" - case bindings.StandardBridgeERC20BridgeFinalized: - eventName = "ERC20BridgeFinalized" - default: - panic("should not be here") - } - - bridgeFinalizedEventAbi := standardBridgeAbi.Events[eventName] - contractEventFilter := database.ContractEvent{ContractAddress: contractAddress, EventSignature: bridgeFinalizedEventAbi.ID} - bridgeFinalizedEvents, err := db.ContractEvents.ContractEventsWithFilter(contractEventFilter, chainSelector, fromHeight, toHeight) - if err != nil { - return nil, err - } - - standardBridgeFinalizedEvents := make([]StandardBridgeFinalizedEvent, len(bridgeFinalizedEvents)) - for i := range bridgeFinalizedEvents { - erc20Bridge := bindings.StandardBridgeERC20BridgeFinalized{Raw: *bridgeFinalizedEvents[i].RLPLog} - err := UnpackLog(&erc20Bridge, bridgeFinalizedEvents[i].RLPLog, eventName, standardBridgeAbi) - if err != nil { - return nil, err - } - - // If an ETH bridge, lets fill in the needed fields - switch any(eventType).(type) { - case bindings.StandardBridgeETHBridgeFinalized: - erc20Bridge.LocalToken = predeploys.LegacyERC20ETHAddr - erc20Bridge.RemoteToken = predeploys.LegacyERC20ETHAddr - } - - standardBridgeFinalizedEvents[i] = StandardBridgeFinalizedEvent{ - Event: &bridgeFinalizedEvents[i], - BridgeTransfer: database.BridgeTransfer{ - TokenPair: database.TokenPair{LocalTokenAddress: erc20Bridge.LocalToken, RemoteTokenAddress: erc20Bridge.RemoteToken}, - Tx: database.Transaction{ - FromAddress: erc20Bridge.From, - ToAddress: erc20Bridge.To, - Amount: erc20Bridge.Amount, - Data: erc20Bridge.ExtraData, - Timestamp: bridgeFinalizedEvents[i].Timestamp, - }, - }, - } - } - - return standardBridgeFinalizedEvents, nil -} diff --git a/indexer/processors/contracts/utils.go b/indexer/processors/contracts/utils.go deleted file mode 100644 index 1c249d4b9765..000000000000 --- a/indexer/processors/contracts/utils.go +++ /dev/null @@ -1,43 +0,0 @@ -package contracts - -import ( - "errors" - "fmt" - - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/core/types" -) - -func UnpackLog(out interface{}, log *types.Log, name string, contractAbi *abi.ABI) error { - eventAbi, ok := contractAbi.Events[name] - if !ok { - return fmt.Errorf("event %s not present in supplied ABI", name) - } else if len(log.Topics) == 0 { - return errors.New("anonymous events are not supported") - } else if log.Topics[0] != eventAbi.ID { - return errors.New("event signature mismatch") - } - - err := contractAbi.UnpackIntoInterface(out, name, log.Data) - if err != nil { - return err - } - - // handle topics if present - if len(log.Topics) > 1 { - var indexedArgs abi.Arguments - for _, arg := range eventAbi.Inputs { - if arg.Indexed { - indexedArgs = append(indexedArgs, arg) - } - } - - // The first topic (event signature) is omitted - err := abi.ParseTopics(out, indexedArgs, log.Topics[1:]) - if err != nil { - return err - } - } - - return nil -} diff --git a/ops/scripts/ci-docker-tag-op-stack-release.sh b/ops/scripts/ci-docker-tag-op-stack-release.sh index b6c3cb6eb412..a8d7e9522c0e 100755 --- a/ops/scripts/ci-docker-tag-op-stack-release.sh +++ b/ops/scripts/ci-docker-tag-op-stack-release.sh @@ -6,7 +6,7 @@ DOCKER_REPO=$1 GIT_TAG=$2 GIT_SHA=$3 -IMAGE_NAME=$(echo "$GIT_TAG" | grep -Eow '^(ci-builder(-rust)?|chain-mon|proxyd|da-server|indexer|ufm-[a-z0-9\-]*|op-[a-z0-9\-]*)' || true) +IMAGE_NAME=$(echo "$GIT_TAG" | grep -Eow '^(ci-builder(-rust)?|chain-mon|proxyd|da-server|ufm-[a-z0-9\-]*|op-[a-z0-9\-]*)' || true) if [ -z "$IMAGE_NAME" ]; then echo "image name could not be parsed from git tag '$GIT_TAG'" exit 1 diff --git a/ops/scripts/update-op-geth.py b/ops/scripts/update-op-geth.py index 3747b5852546..77478d46c34f 100755 --- a/ops/scripts/update-op-geth.py +++ b/ops/scripts/update-op-geth.py @@ -10,7 +10,7 @@ def main(): - for project in ('.', 'indexer'): + for project in ('.',): print(f'Updating {project}...') update_mod(project) diff --git a/ops/tag-service/tag-service.py b/ops/tag-service/tag-service.py index ba227210a434..2db9e36c53b5 100755 --- a/ops/tag-service/tag-service.py +++ b/ops/tag-service/tag-service.py @@ -13,7 +13,6 @@ 'ci-builder': '0.6.0', 'ci-builder-rust': '0.1.0', 'chain-mon': '0.2.2', - 'indexer': '0.5.0', 'op-node': '0.10.14', 'op-batcher': '0.10.14', 'op-challenger': '0.0.4', diff --git a/ops/tag-service/tag-tool.py b/ops/tag-service/tag-tool.py index 4e8b56481524..f3fd847ce069 100644 --- a/ops/tag-service/tag-tool.py +++ b/ops/tag-service/tag-tool.py @@ -7,7 +7,6 @@ 'ci-builder', 'ci-builder-rust', 'chain-mon', - 'indexer', 'op-node', 'op-batcher', 'op-challenger', From cd11938adf40d6c9a2955da4143ce7f0497f4522 Mon Sep 17 00:00:00 2001 From: Francis Li Date: Mon, 10 Jun 2024 08:33:05 -0700 Subject: [PATCH 011/141] Queue an action after conductor start (#10772) --- op-conductor/conductor/service.go | 5 ++++- op-conductor/conductor/service_test.go | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/op-conductor/conductor/service.go b/op-conductor/conductor/service.go index 569b4ffa4584..02c46a468bc7 100644 --- a/op-conductor/conductor/service.go +++ b/op-conductor/conductor/service.go @@ -96,7 +96,6 @@ func NewOpConductor( } return nil, err } - oc.prevState = NewState(oc.leader.Load(), oc.healthy.Load(), oc.seqActive.Load()) return oc, nil } @@ -341,6 +340,10 @@ func (oc *OpConductor) Start(ctx context.Context) error { oc.metrics.RecordUp() oc.log.Info("OpConductor started") + // queue an action in case sequencer is not in the desired state. + oc.prevState = NewState(oc.leader.Load(), oc.healthy.Load(), oc.seqActive.Load()) + oc.queueAction() + return nil } diff --git a/op-conductor/conductor/service_test.go b/op-conductor/conductor/service_test.go index a736dc608dc0..f6d84d6db5fc 100644 --- a/op-conductor/conductor/service_test.go +++ b/op-conductor/conductor/service_test.go @@ -160,6 +160,7 @@ func (s *OpConductorTestSuite) enableSynchronization() { s.wg.Done() } s.startConductor() + s.executeAction() } func (s *OpConductorTestSuite) disableSynchronization() { @@ -850,6 +851,22 @@ func (s *OpConductorTestSuite) TestFailureAndRetry4() { }, 2*time.Second, 100*time.Millisecond) } +func (s *OpConductorTestSuite) TestConductorRestart() { + // set initial state + s.conductor.leader.Store(false) + s.conductor.healthy.Store(true) + s.conductor.seqActive.Store(true) + s.ctrl.EXPECT().StopSequencer(mock.Anything).Return(common.Hash{}, nil).Times(1) + + s.enableSynchronization() + + // expect to stay as follower, go to [follower, healthy, not sequencing] + s.False(s.conductor.leader.Load()) + s.True(s.conductor.healthy.Load()) + s.False(s.conductor.seqActive.Load()) + s.ctrl.AssertCalled(s.T(), "StopSequencer", mock.Anything) +} + func (s *OpConductorTestSuite) TestHandleInitError() { // This will cause an error in the init function, which should cause the conductor to stop successfully without issues. _, err := New(s.ctx, &s.cfg, s.log, s.version) From 3dae2f583083a9699c50796eb1517f2a1bdfcf80 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Mon, 10 Jun 2024 18:42:18 +0300 Subject: [PATCH 012/141] codeowners: update (#10786) Remove trianglesphere --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 97d13e277a2d..0091e460380e 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -15,7 +15,7 @@ /op-e2e @ethereum-optimism/go-reviewers /op-heartbeat @ethereum-optimism/go-reviewers /op-node @ethereum-optimism/go-reviewers -/op-node/rollup @protolambda @trianglesphere @ajsutton +/op-node/rollup @protolambda @ajsutton /op-plasma @ethereum-optimism/go-reviewers /op-preimage @ethereum-optimism/go-reviewers /op-program @ethereum-optimism/go-reviewers From 363c5d7f4fb14180a0e2a28cc948fe2146f03dce Mon Sep 17 00:00:00 2001 From: Raffaele <151576068+raffaele-oplabs@users.noreply.github.com> Date: Mon, 10 Jun 2024 17:45:34 +0200 Subject: [PATCH 013/141] =?UTF-8?q?adding=20timestamp=20for=20blocks=20che?= =?UTF-8?q?cked=20and=20highest,=20so=20we=20can=20monitor=20ho=E2=80=A6?= =?UTF-8?q?=20(#10691)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * adding timestamp for blocks checked and highest, so we can monitor how long ago the block we are using was produced * adding logs for connecting disputeGame with withdrawalHash * imporved logs * adding details on logs for wd-mon and faultproof-wd-mon * adding extra information for wd-mon also for valid withdrawal * Update packages/chain-mon/src/wd-mon/service.ts Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update packages/chain-mon/src/faultproof-wd-mon/service.ts Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * fixing object * improved logs and metrics for wd mon * added extra logging information and fixing bugs on initial block number --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- .../src/faultproof-wd-mon/service.ts | 125 ++++++++++++++++-- packages/chain-mon/src/wd-mon/service.ts | 46 +++++-- 2 files changed, 149 insertions(+), 22 deletions(-) diff --git a/packages/chain-mon/src/faultproof-wd-mon/service.ts b/packages/chain-mon/src/faultproof-wd-mon/service.ts index d4590f805d4b..92e96e9a2e3d 100644 --- a/packages/chain-mon/src/faultproof-wd-mon/service.ts +++ b/packages/chain-mon/src/faultproof-wd-mon/service.ts @@ -33,6 +33,8 @@ type Options = { type Metrics = { highestCheckedBlockNumber: Gauge highestKnownBlockNumber: Gauge + highestCheckedBlockTimestamp: Gauge + highestKnownBlockTimestamp: Gauge withdrawalsValidated: Gauge invalidProposalWithdrawals: Gauge invalidProofWithdrawals: Gauge @@ -50,11 +52,13 @@ type State = { withdrawalHash: string senderAddress: string disputeGame: ethers.Contract + event: ethers.Event }> invalidProofWithdrawals: Array<{ withdrawalHash: string senderAddress: string disputeGame: ethers.Contract + event: ethers.Event }> } @@ -133,11 +137,22 @@ export class FaultProofWithdrawalMonitor extends BaseServiceV2< desc: 'Highest L1 block number that we have searched.', labels: ['type'], }, + highestCheckedBlockTimestamp: { + type: Gauge, + desc: 'Timestamp of the highest L1 block number that we have searched.', + labels: ['type'], + }, highestKnownBlockNumber: { type: Gauge, desc: 'Highest L1 block number that we have seen.', labels: ['type'], }, + highestKnownBlockTimestamp: { + type: Gauge, + desc: 'Timestamp of the highest L1 block number that we have seen.', + labels: ['type'], + }, + invalidProposalWithdrawals: { type: Gauge, desc: 'Number of withdrawals against invalid proposals.', @@ -212,6 +227,22 @@ export class FaultProofWithdrawalMonitor extends BaseServiceV2< this.state.highestUncheckedBlockNumber = DEFAULT_STARTING_BLOCK_NUMBERS[l2ChainId] || 0 } + this.logger.info( + `initialized starting at block number ${this.state.highestUncheckedBlockNumber}` + ) + + //make sure the highestUncheckedBlockNumber is not higher than the latest block number on chain + const latestL1BlockNumber = + await this.options.l1RpcProvider.getBlockNumber() + + this.state.highestUncheckedBlockNumber = Math.min( + this.state.highestUncheckedBlockNumber, + latestL1BlockNumber + ) + + this.logger.info( + `starting at block number ${this.state.highestUncheckedBlockNumber}` + ) // Default state is that forgeries have not been detected. this.state.forgeryDetected = false @@ -247,6 +278,14 @@ export class FaultProofWithdrawalMonitor extends BaseServiceV2< const disputeGameAddress = disputeGame.address const isGameBlacklisted = this.state.portal.disputeGameBlacklist(disputeGameAddress) + const event = disputeGameData.event + const block = await event.getBlock() + const ts = + dateformat( + new Date(block.timestamp * 1000), + 'mmmm dS, yyyy, h:MM:ss TT', + true + ) + ' UTC' if (isGameBlacklisted) { this.state.invalidProposalWithdrawals.splice(i, 1) @@ -254,18 +293,57 @@ export class FaultProofWithdrawalMonitor extends BaseServiceV2< const status = await disputeGame.status() if (status === GameStatus.CHALLENGER_WINS) { this.state.invalidProposalWithdrawals.splice(i, 1) + this.logger.info( + `withdrawalHash not seen on L2 - game correctly resolved`, + { + withdrawalHash: event.args.withdrawalHash, + provenAt: ts, + disputeGameAddress: disputeGame.address, + blockNumber: block.number, + transaction: event.transactionHash, + } + ) } else if (status === GameStatus.DEFENDER_WINS) { + this.logger.error( + `withdrawalHash not seen on L2 - forgery detected`, + { + withdrawalHash: event.args.withdrawalHash, + provenAt: ts, + disputeGameAddress: disputeGame.address, + blockNumber: block.number, + transaction: event.transactionHash, + } + ) this.state.forgeryDetected = true this.metrics.isDetectingForgeries.set( Number(this.state.forgeryDetected) ) + } else { + this.logger.warn( + `withdrawalHash not seen on L2 - game still IN_PROGRESS`, + { + withdrawalHash: event.args.withdrawalHash, + provenAt: ts, + disputeGameAddress: disputeGame.address, + blockNumber: block.number, + transaction: event.transactionHash, + } + ) } } } - // Get the latest L1 block number. let latestL1BlockNumber: number + let latestL1Block: ethers.providers.Block + let highestUncheckedBlock: ethers.providers.Block try { + // Get the latest L1 block number. latestL1BlockNumber = await this.options.l1RpcProvider.getBlockNumber() + latestL1Block = await this.options.l1RpcProvider.getBlock( + latestL1BlockNumber + ) + highestUncheckedBlock = await this.options.l1RpcProvider.getBlock( + this.state.highestUncheckedBlockNumber + ) } catch (err) { // Log the issue so we can debug it. this.logger.error(`got error when connecting to node`, { @@ -285,10 +363,22 @@ export class FaultProofWithdrawalMonitor extends BaseServiceV2< } // Update highest block number metrics so we can keep track of how the service is doing. - this.metrics.highestKnownBlockNumber.set(latestL1BlockNumber) this.metrics.highestCheckedBlockNumber.set( + { type: 'L1' }, this.state.highestUncheckedBlockNumber ) + this.metrics.highestKnownBlockNumber.set( + { type: 'L1' }, + latestL1BlockNumber + ) + this.metrics.highestCheckedBlockTimestamp.set( + { type: 'L1' }, + highestUncheckedBlock.timestamp + ) + this.metrics.highestKnownBlockTimestamp.set( + { type: 'L1' }, + latestL1Block.timestamp + ) // Check if the RPC provider is behind us for some reason. Can happen occasionally, // particularly if connected to an RPC provider that load balances over multiple nodes that @@ -310,6 +400,9 @@ export class FaultProofWithdrawalMonitor extends BaseServiceV2< this.logger.info(`checking recent blocks`, { fromBlockNumber: this.state.highestUncheckedBlockNumber, toBlockNumber, + latestL1BlockNumber, + percentageDone: + Math.floor((toBlockNumber / latestL1BlockNumber) * 100) + '% done', }) // Query for WithdrawalProven events within the specified block range. @@ -371,6 +464,10 @@ export class FaultProofWithdrawalMonitor extends BaseServiceV2< // Unlike below we don't grab the timestamp here because it adds an unnecessary request. this.logger.info(`valid withdrawal`, { withdrawalHash: event.args.withdrawalHash, + provenAt: ts, + disputeGameAddress: disputeGame.address, + blockNumber: block.number, + transaction: event.transactionHash, }) // Bump the withdrawals metric so we can keep track. @@ -379,10 +476,16 @@ export class FaultProofWithdrawalMonitor extends BaseServiceV2< this.state.invalidProofWithdrawals.push(disputeGameData) // Uh oh! - this.logger.error(`withdrawalHash not seen on L2`, { - withdrawalHash: event.args.withdrawalHash, - provenAt: ts, - }) + this.logger.error( + `withdrawalHash not seen on L2 - forgery detected`, + { + withdrawalHash: event.args.withdrawalHash, + provenAt: ts, + disputeGameAddress: disputeGame.address, + blockNumber: block.number, + transaction: event.transactionHash, + } + ) // Change to forgery state. this.state.forgeryDetected = true @@ -392,9 +495,10 @@ export class FaultProofWithdrawalMonitor extends BaseServiceV2< } } else { this.state.invalidProposalWithdrawals.push(disputeGameData) - this.logger.info(`invalid proposal`, { + this.logger.warn(`invalid proposal`, { withdrawalHash: event.args.withdrawalHash, provenAt: ts, + disputeGameAddress: disputeGame.address, }) } } @@ -410,18 +514,20 @@ export class FaultProofWithdrawalMonitor extends BaseServiceV2< * @param event The event containing the withdrawal hash. * @returns An array of objects containing the withdrawal hash, sender address, and dispute game address. */ - async getWithdrawalDisputeGames(event: ethers.Event): Promise< + async getWithdrawalDisputeGames(event_in: ethers.Event): Promise< Array<{ withdrawalHash: string senderAddress: string disputeGame: ethers.Contract + event: ethers.Event }> > { - const withdrawalHash = event.args.withdrawalHash + const withdrawalHash = event_in.args.withdrawalHash const disputeGameMap: Array<{ withdrawalHash: string senderAddress: string disputeGame: ethers.Contract + event: ethers.Event }> = [] const numProofSubmitter = await this.state.portal.numProofSubmitters( @@ -450,6 +556,7 @@ export class FaultProofWithdrawalMonitor extends BaseServiceV2< withdrawalHash, senderAddress: proofSubmitter, disputeGame: disputeGame_, + event: event_in, }) }) ) diff --git a/packages/chain-mon/src/wd-mon/service.ts b/packages/chain-mon/src/wd-mon/service.ts index 86e56e12562a..2a71ca222bc6 100644 --- a/packages/chain-mon/src/wd-mon/service.ts +++ b/packages/chain-mon/src/wd-mon/service.ts @@ -30,6 +30,7 @@ type Metrics = { withdrawalsValidated: Gauge isDetectingForgeries: Gauge nodeConnectionFailures: Gauge + detectedForgeries: Gauge } type State = { @@ -110,6 +111,11 @@ export class WithdrawalMonitor extends BaseServiceV2 { desc: 'Number of times node connection has failed', labels: ['layer', 'section'], }, + detectedForgeries: { + type: Gauge, + desc: 'detected forged withdrawals', + labels: ['withdrawalHash', 'provenAt', 'blockNumber', 'transaction'], + }, }, }) } @@ -223,6 +229,9 @@ export class WithdrawalMonitor extends BaseServiceV2 { this.logger.info(`checking recent blocks`, { fromBlockNumber: this.state.highestUncheckedBlockNumber, toBlockNumber, + latestL1BlockNumber, + percentageDone: + Math.floor((toBlockNumber / latestL1BlockNumber) * 100) + '% done', }) // Query for WithdrawalProven events within the specified block range. @@ -257,39 +266,50 @@ export class WithdrawalMonitor extends BaseServiceV2 { const hash = event.args.withdrawalHash const exists = await this.state.messenger.sentMessages(hash) + const block = await event.getBlock() + const ts = `${dateformat( + new Date(block.timestamp * 1000), + 'mmmm dS, yyyy, h:MM:ss TT', + true + )} UTC` + // Hopefully the withdrawal exists! if (exists) { // Unlike below we don't grab the timestamp here because it adds an unnecessary request. this.logger.info(`valid withdrawal`, { withdrawalHash: event.args.withdrawalHash, + provenAt: ts, + blockNumber: block.number, + transaction: event.transactionHash, }) // Bump the withdrawals metric so we can keep track. this.metrics.withdrawalsValidated.inc() } else { // Grab and format the timestamp so it's clear how much time is left. - const block = await event.getBlock() - const ts = `${dateformat( - new Date(block.timestamp * 1000), - 'mmmm dS, yyyy, h:MM:ss TT', - true - )} UTC` // Uh oh! this.logger.error(`withdrawalHash not seen on L2`, { withdrawalHash: event.args.withdrawalHash, - provenAt: ts, + provenAt: + dateformat( + new Date(block.timestamp * 1000), + 'mmmm dS, yyyy, h:MM:ss TT', + true + ) + ' UTC', + blockNumber: block.number.toString(), + transaction: event.transactionHash, }) // Change to forgery state. this.state.forgeryDetected = true this.metrics.isDetectingForgeries.set(1) - - // Return early so that we never increment the highest unchecked block number and therefore - // will continue to loop on this forgery indefinitely. We probably want to change this - // behavior at some point so that we keep scanning for additional forgeries since the - // existence of one forgery likely implies the existence of many others. - return sleep(this.options.sleepTimeMs) + this.metrics.detectedForgeries.inc({ + withdrawalHash: hash, + provenAt: ts, + blockNumber: block.number.toString(), + transaction: event.transactionHash, + }) } } From ec19e5909bd78272603881b4801d8c638460343a Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Mon, 10 Jun 2024 14:15:44 -0400 Subject: [PATCH 014/141] Pull in latest superchain-registry with op-mainnet dispute game factory address (#10789) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 7696c277a6bb..7740b77fb721 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/crate-crypto/go-kzg-4844 v0.7.0 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3 - github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240603085035-9c8f6081266e + github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240610174713-583ceb57407d github.com/ethereum/go-ethereum v1.13.15 github.com/fsnotify/fsnotify v1.7.0 github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb diff --git a/go.sum b/go.sum index 7daf2b1086ce..53f340efaac5 100644 --- a/go.sum +++ b/go.sum @@ -172,8 +172,8 @@ github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3 h1:RWHKLhCrQThMfch+QJ1Z github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3/go.mod h1:QziizLAiF0KqyLdNJYD7O5cpDlaFMNZzlxYNcWsJUxs= github.com/ethereum-optimism/op-geth v1.101315.2-rc.1 h1:9sNukA27AqReNkBEaus2kf+DLNXgkksRj+NbJHYgqxc= github.com/ethereum-optimism/op-geth v1.101315.2-rc.1/go.mod h1:vObZmT4rKd8hjSblIktsJHtLX8SXbCoaIXEd42HMDB0= -github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240603085035-9c8f6081266e h1:PJWaF/45dMhO7xdzSwuZmwIIBwnqnPr84oFNmmnpGNs= -github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240603085035-9c8f6081266e/go.mod h1:7xh2awFQqsiZxFrHKTgEd+InVfDRrkKVUIuK8SAFHp0= +github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240610174713-583ceb57407d h1:lGvrOam2IOoszfxqrpXeIFIT58/e6N1VuOLVaai9GOg= +github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240610174713-583ceb57407d/go.mod h1:7xh2awFQqsiZxFrHKTgEd+InVfDRrkKVUIuK8SAFHp0= github.com/ethereum/c-kzg-4844 v0.4.0 h1:3MS1s4JtA868KpJxroZoepdV0ZKBp3u/O5HcZ7R3nlY= github.com/ethereum/c-kzg-4844 v0.4.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= From 0c4e305da22a74b01dca0c2467a695caee08c52d Mon Sep 17 00:00:00 2001 From: Axel Kingsley Date: Mon, 10 Jun 2024 13:17:01 -0500 Subject: [PATCH 015/141] Add Disclaimers at Config, and on Enable (#10709) --- op-batcher/batcher/service.go | 3 +++ op-node/node/config.go | 3 +++ op-plasma/cli.go | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/op-batcher/batcher/service.go b/op-batcher/batcher/service.go index 1969b2acf5fb..8ef40b346a0b 100644 --- a/op-batcher/batcher/service.go +++ b/op-batcher/batcher/service.go @@ -247,6 +247,9 @@ func (bs *BatcherService) initChannelConfig(cfg *CLIConfig) error { "max_channel_duration", cc.MaxChannelDuration, "channel_timeout", cc.ChannelTimeout, "sub_safety_margin", cc.SubSafetyMargin) + if bs.UsePlasma { + bs.Log.Warn("Plasma Mode is a Beta feature of the MIT licensed OP Stack. While it has received initial review from core contributors, it is still undergoing testing, and may have bugs or other issues.") + } bs.ChannelConfig = cc return nil } diff --git a/op-node/node/config.go b/op-node/node/config.go index 88bba5ff85f7..223afaccf0f9 100644 --- a/op-node/node/config.go +++ b/op-node/node/config.go @@ -174,5 +174,8 @@ func (cfg *Config) Check() error { if err := cfg.Plasma.Check(); err != nil { return fmt.Errorf("plasma config error: %w", err) } + if cfg.Plasma.Enabled { + log.Warn("Plasma Mode is a Beta feature of the MIT licensed OP Stack. While it has received initial review from core contributors, it is still undergoing testing, and may have bugs or other issues.") + } return nil } diff --git a/op-plasma/cli.go b/op-plasma/cli.go index 64b1dc33af92..2664a19c7996 100644 --- a/op-plasma/cli.go +++ b/op-plasma/cli.go @@ -22,7 +22,7 @@ func CLIFlags(envPrefix string, category string) []cli.Flag { return []cli.Flag{ &cli.BoolFlag{ Name: EnabledFlagName, - Usage: "Enable plasma mode", + Usage: "Enable plasma mode\nPlasma Mode is a Beta feature of the MIT licensed OP Stack. While it has received initial review from core contributors, it is still undergoing testing, and may have bugs or other issues.", Value: false, EnvVars: plasmaEnv(envPrefix, "ENABLED"), Category: category, From 058f39811490ec10fd9de5abdde0f6c5fadae478 Mon Sep 17 00:00:00 2001 From: Park Changwan Date: Tue, 11 Jun 2024 03:47:52 +0900 Subject: [PATCH 016/141] op-challenger: Fix args for asterisc trace provider test (#10774) --- op-challenger/game/fault/trace/asterisc/provider.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op-challenger/game/fault/trace/asterisc/provider.go b/op-challenger/game/fault/trace/asterisc/provider.go index cc64ff654719..cbf7b6241ae2 100644 --- a/op-challenger/game/fault/trace/asterisc/provider.go +++ b/op-challenger/game/fault/trace/asterisc/provider.go @@ -185,7 +185,7 @@ func NewTraceProviderForTest(logger log.Logger, m AsteriscMetricer, cfg *config. logger: logger, dir: dir, prestate: cfg.AsteriscAbsolutePreState, - generator: NewExecutor(logger, m, cfg, cfg.AsteriscNetwork, localInputs), + generator: NewExecutor(logger, m, cfg, cfg.AsteriscAbsolutePreState, localInputs), gameDepth: gameDepth, preimageLoader: utils.NewPreimageLoader(kvstore.NewDiskKV(utils.PreimageDir(dir)).Get), } From 6e9dca3d12ed3fc1958a797465bf4af19e8b2304 Mon Sep 17 00:00:00 2001 From: Jacob Elias Date: Mon, 10 Jun 2024 15:04:47 -0500 Subject: [PATCH 017/141] feat: misc logging improvements for fallback mode (#10775) --- proxyd/consensus_poller.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/proxyd/consensus_poller.go b/proxyd/consensus_poller.go index 64ac026a89a4..90af41db7067 100644 --- a/proxyd/consensus_poller.go +++ b/proxyd/consensus_poller.go @@ -150,7 +150,7 @@ func (ah *PollerAsyncHandler) Init() { log.Info("number of healthy primary candidates", "healthy_candidates", len(healthyCandidates)) if len(healthyCandidates) == 0 { - log.Info("zero healthy candidates, querying fallback backend", + log.Debug("zero healthy candidates, querying fallback backend", "backend_name", be.Name) ah.cp.UpdateBackend(ah.ctx, be) } @@ -703,6 +703,11 @@ func (cp *ConsensusPoller) FilterCandidates(backends []*Backend) map[*Backend]*b continue } if !be.skipPeerCountCheck && bs.peerCount < cp.minPeerCount { + log.Debug("backend peer count too low for inclusion in consensus", + "backend_name", be.Name, + "peer_count", bs.peerCount, + "min_peer_count", cp.minPeerCount, + ) continue } if !bs.inSync { From 146758479ef10af8d802cdc1f654cd32456ba57f Mon Sep 17 00:00:00 2001 From: Roberto Bayardo Date: Mon, 10 Jun 2024 13:53:23 -0700 Subject: [PATCH 018/141] log txhash with tx publishing log messages (#10771) --- op-service/txmgr/txmgr.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/op-service/txmgr/txmgr.go b/op-service/txmgr/txmgr.go index b3d2e4e70e15..015d6edc767f 100644 --- a/op-service/txmgr/txmgr.go +++ b/op-service/txmgr/txmgr.go @@ -459,7 +459,7 @@ func (m *SimpleTxManager) sendTx(ctx context.Context, tx *types.Transaction) (*t func (m *SimpleTxManager) publishTx(ctx context.Context, tx *types.Transaction, sendState *SendState, bumpFeesImmediately bool) (*types.Transaction, bool) { l := m.txLogger(tx, true) - l.Info("Publishing transaction") + l.Info("Publishing transaction", "tx", tx.Hash()) for { // if the tx manager closed, give up without bumping fees or retrying @@ -493,7 +493,7 @@ func (m *SimpleTxManager) publishTx(ctx context.Context, tx *types.Transaction, if err == nil { m.metr.TxPublished("") - l.Info("Transaction successfully published") + l.Info("Transaction successfully published", "tx", tx.Hash()) return tx, true } From bee1ecbb3b922fe07e5335605ddbd304e162449b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Jun 2024 20:55:27 -0600 Subject: [PATCH 019/141] dependabot(gomod): bump github.com/minio/minio-go/v7 (#10790) Bumps [github.com/minio/minio-go/v7](https://github.com/minio/minio-go) from 7.0.70 to 7.0.71. - [Release notes](https://github.com/minio/minio-go/releases) - [Commits](https://github.com/minio/minio-go/compare/v7.0.70...v7.0.71) --- updated-dependencies: - dependency-name: github.com/minio/minio-go/v7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 7740b77fb721..16a06c909f72 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,7 @@ require ( github.com/libp2p/go-libp2p-pubsub v0.11.0 github.com/libp2p/go-libp2p-testing v0.12.0 github.com/mattn/go-isatty v0.0.20 - github.com/minio/minio-go/v7 v7.0.70 + github.com/minio/minio-go/v7 v7.0.71 github.com/multiformats/go-base32 v0.1.0 github.com/multiformats/go-multiaddr v0.12.4 github.com/multiformats/go-multiaddr-dns v0.3.1 diff --git a/go.sum b/go.sum index 53f340efaac5..7315cfcd8c31 100644 --- a/go.sum +++ b/go.sum @@ -480,8 +480,8 @@ github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4S github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= -github.com/minio/minio-go/v7 v7.0.70 h1:1u9NtMgfK1U42kUxcsl5v0yj6TEOPR497OAQxpJnn2g= -github.com/minio/minio-go/v7 v7.0.70/go.mod h1:4yBA8v80xGA30cfM3fz0DKYMXunWl/AV/6tWEs9ryzo= +github.com/minio/minio-go/v7 v7.0.71 h1:No9XfOKTYi6i0GnBj+WZwD8WP5GZfL7n7GOjRqCdAjA= +github.com/minio/minio-go/v7 v7.0.71/go.mod h1:4yBA8v80xGA30cfM3fz0DKYMXunWl/AV/6tWEs9ryzo= github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= From c71b87de0280832821cf81c1bca383ae2027c0d3 Mon Sep 17 00:00:00 2001 From: smartcontracts Date: Tue, 11 Jun 2024 12:56:31 -0400 Subject: [PATCH 020/141] maint: remove sdk and add temporary tasks package (#10794) Removes the SDK and adds a small temporary package that houses the two Hardhat tasks that the bedrock-devnet relies on. It's generally much nicer to have a dedicated place for the SDK in the ecosystem repository rather than having it exist in two places awkwardly simply because of these two tasks. --- .circleci/config.yml | 20 - bedrock-devnet/devnet/__init__.py | 8 +- packages/{sdk => devnet-tasks}/.depcheckrc | 0 packages/devnet-tasks/.eslintrc.js | 4 + packages/{sdk => devnet-tasks}/.gitignore | 0 .../{sdk => devnet-tasks}/.lintstagedrc.yml | 0 packages/{sdk => devnet-tasks}/.prettierrc.js | 0 packages/{sdk => devnet-tasks}/LICENSE | 2 +- packages/devnet-tasks/README.md | 4 + .../{sdk => devnet-tasks}/hardhat.config.ts | 2 +- packages/{sdk => devnet-tasks}/package.json | 32 +- .../src}/tasks/deposit-erc20.ts | 23 +- .../src}/tasks/deposit-eth.ts | 19 +- .../{sdk => devnet-tasks/src}/tasks/index.ts | 1 - packages/{sdk => devnet-tasks}/tsconfig.json | 0 packages/sdk/.eslintrc.js | 46 - packages/sdk/CHANGELOG.md | 799 ----- packages/sdk/README.md | 60 - packages/sdk/example.env | 4 - packages/sdk/setupVitest.ts | 4 - packages/sdk/src/adapters/dai-bridge.ts | 63 - packages/sdk/src/adapters/eco-bridge.ts | 73 - packages/sdk/src/adapters/eth-bridge.ts | 201 -- packages/sdk/src/adapters/index.ts | 4 - packages/sdk/src/adapters/standard-bridge.ts | 390 --- packages/sdk/src/cross-chain-messenger.ts | 2801 ----------------- .../forge-artifacts/DisputeGameFactory.json | 1 - .../src/forge-artifacts/FaultDisputeGame.json | 1 - .../src/forge-artifacts/GasPriceOracle.json | 1 - packages/sdk/src/forge-artifacts/L1Block.json | 1 - .../L1CrossDomainMessenger.json | 1 - .../src/forge-artifacts/L1ERC721Bridge.json | 1 - .../src/forge-artifacts/L1StandardBridge.json | 1 - .../L2CrossDomainMessenger.json | 1 - .../src/forge-artifacts/L2ERC721Bridge.json | 1 - .../src/forge-artifacts/L2OutputOracle.json | 1 - .../src/forge-artifacts/L2StandardBridge.json | 1 - .../forge-artifacts/L2ToL1MessagePasser.json | 1 - .../OptimismMintableERC20.json | 1 - .../OptimismMintableERC20Factory.json | 1 - .../src/forge-artifacts/OptimismPortal.json | 1 - .../src/forge-artifacts/OptimismPortal2.json | 1 - .../sdk/src/forge-artifacts/ProxyAdmin.json | 1 - packages/sdk/src/forge-artifacts/WETH9.json | 1 - packages/sdk/src/index.ts | 5 - packages/sdk/src/interfaces/bridge-adapter.ts | 308 -- packages/sdk/src/interfaces/index.ts | 3 - packages/sdk/src/interfaces/l2-provider.ts | 92 - packages/sdk/src/interfaces/types.ts | 374 --- packages/sdk/src/l2-provider.ts | 277 -- packages/sdk/src/utils/assert.ts | 5 - packages/sdk/src/utils/chain-constants.ts | 385 --- packages/sdk/src/utils/coercion.ts | 132 - packages/sdk/src/utils/contracts.ts | 291 -- packages/sdk/src/utils/index.ts | 7 - packages/sdk/src/utils/merkle-utils.ts | 121 - packages/sdk/src/utils/message-utils.ts | 92 - packages/sdk/src/utils/misc-utils.ts | 20 - packages/sdk/src/utils/type-utils.ts | 6 - packages/sdk/tasks/finalize-withdrawal.ts | 130 - packages/sdk/test-next/README.md | 5 - packages/sdk/test-next/bridgeEcoToken.spec.ts | 125 - packages/sdk/test-next/failedMessages.spec.ts | 95 - packages/sdk/test-next/messageStatus.spec.ts | 50 - packages/sdk/test-next/proveMessage.spec.ts | 88 - .../test-next/testUtils/ethersProviders.ts | 58 - .../sdk/test-next/testUtils/viemClients.ts | 111 - .../sdk/test/contracts/AbsolutelyNothing.sol | 7 - .../test/contracts/ICrossDomainMessenger.sol | 45 - .../test/contracts/MessageEncodingHelper.sol | 42 - packages/sdk/test/contracts/MockBridge.sol | 156 - packages/sdk/test/contracts/MockMessenger.sol | 98 - packages/sdk/test/contracts/MockSCC.sol | 48 - .../sdk/test/cross-chain-messenger.spec.ts | 1664 ---------- packages/sdk/test/helpers/constants.ts | 17 - packages/sdk/test/helpers/index.ts | 1 - packages/sdk/test/l2-provider.spec.ts | 24 - packages/sdk/test/setup.ts | 10 - packages/sdk/test/utils/coercion.spec.ts | 79 - packages/sdk/test/utils/contracts.spec.ts | 372 --- packages/sdk/test/utils/merkle-utils.spec.ts | 60 - packages/sdk/test/utils/message-utils.spec.ts | 78 - packages/sdk/vitest.config.ts | 9 - pnpm-lock.yaml | 1458 +-------- 84 files changed, 51 insertions(+), 11475 deletions(-) rename packages/{sdk => devnet-tasks}/.depcheckrc (100%) create mode 100644 packages/devnet-tasks/.eslintrc.js rename packages/{sdk => devnet-tasks}/.gitignore (100%) rename packages/{sdk => devnet-tasks}/.lintstagedrc.yml (100%) rename packages/{sdk => devnet-tasks}/.prettierrc.js (100%) rename packages/{sdk => devnet-tasks}/LICENSE (97%) create mode 100644 packages/devnet-tasks/README.md rename packages/{sdk => devnet-tasks}/hardhat.config.ts (99%) rename packages/{sdk => devnet-tasks}/package.json (62%) rename packages/{sdk => devnet-tasks/src}/tasks/deposit-erc20.ts (92%) rename packages/{sdk => devnet-tasks/src}/tasks/deposit-eth.ts (94%) rename packages/{sdk => devnet-tasks/src}/tasks/index.ts (60%) rename packages/{sdk => devnet-tasks}/tsconfig.json (100%) delete mode 100644 packages/sdk/.eslintrc.js delete mode 100644 packages/sdk/CHANGELOG.md delete mode 100644 packages/sdk/README.md delete mode 100644 packages/sdk/example.env delete mode 100644 packages/sdk/setupVitest.ts delete mode 100644 packages/sdk/src/adapters/dai-bridge.ts delete mode 100644 packages/sdk/src/adapters/eco-bridge.ts delete mode 100644 packages/sdk/src/adapters/eth-bridge.ts delete mode 100644 packages/sdk/src/adapters/index.ts delete mode 100644 packages/sdk/src/adapters/standard-bridge.ts delete mode 100644 packages/sdk/src/cross-chain-messenger.ts delete mode 100644 packages/sdk/src/forge-artifacts/DisputeGameFactory.json delete mode 100644 packages/sdk/src/forge-artifacts/FaultDisputeGame.json delete mode 100644 packages/sdk/src/forge-artifacts/GasPriceOracle.json delete mode 100644 packages/sdk/src/forge-artifacts/L1Block.json delete mode 100644 packages/sdk/src/forge-artifacts/L1CrossDomainMessenger.json delete mode 100644 packages/sdk/src/forge-artifacts/L1ERC721Bridge.json delete mode 100644 packages/sdk/src/forge-artifacts/L1StandardBridge.json delete mode 100644 packages/sdk/src/forge-artifacts/L2CrossDomainMessenger.json delete mode 100644 packages/sdk/src/forge-artifacts/L2ERC721Bridge.json delete mode 100644 packages/sdk/src/forge-artifacts/L2OutputOracle.json delete mode 100644 packages/sdk/src/forge-artifacts/L2StandardBridge.json delete mode 100644 packages/sdk/src/forge-artifacts/L2ToL1MessagePasser.json delete mode 100644 packages/sdk/src/forge-artifacts/OptimismMintableERC20.json delete mode 100644 packages/sdk/src/forge-artifacts/OptimismMintableERC20Factory.json delete mode 100644 packages/sdk/src/forge-artifacts/OptimismPortal.json delete mode 100644 packages/sdk/src/forge-artifacts/OptimismPortal2.json delete mode 100644 packages/sdk/src/forge-artifacts/ProxyAdmin.json delete mode 100644 packages/sdk/src/forge-artifacts/WETH9.json delete mode 100644 packages/sdk/src/index.ts delete mode 100644 packages/sdk/src/interfaces/bridge-adapter.ts delete mode 100644 packages/sdk/src/interfaces/index.ts delete mode 100644 packages/sdk/src/interfaces/l2-provider.ts delete mode 100644 packages/sdk/src/interfaces/types.ts delete mode 100644 packages/sdk/src/l2-provider.ts delete mode 100644 packages/sdk/src/utils/assert.ts delete mode 100644 packages/sdk/src/utils/chain-constants.ts delete mode 100644 packages/sdk/src/utils/coercion.ts delete mode 100644 packages/sdk/src/utils/contracts.ts delete mode 100644 packages/sdk/src/utils/index.ts delete mode 100644 packages/sdk/src/utils/merkle-utils.ts delete mode 100644 packages/sdk/src/utils/message-utils.ts delete mode 100644 packages/sdk/src/utils/misc-utils.ts delete mode 100644 packages/sdk/src/utils/type-utils.ts delete mode 100644 packages/sdk/tasks/finalize-withdrawal.ts delete mode 100644 packages/sdk/test-next/README.md delete mode 100644 packages/sdk/test-next/bridgeEcoToken.spec.ts delete mode 100644 packages/sdk/test-next/failedMessages.spec.ts delete mode 100644 packages/sdk/test-next/messageStatus.spec.ts delete mode 100644 packages/sdk/test-next/proveMessage.spec.ts delete mode 100644 packages/sdk/test-next/testUtils/ethersProviders.ts delete mode 100644 packages/sdk/test-next/testUtils/viemClients.ts delete mode 100644 packages/sdk/test/contracts/AbsolutelyNothing.sol delete mode 100644 packages/sdk/test/contracts/ICrossDomainMessenger.sol delete mode 100644 packages/sdk/test/contracts/MessageEncodingHelper.sol delete mode 100644 packages/sdk/test/contracts/MockBridge.sol delete mode 100644 packages/sdk/test/contracts/MockMessenger.sol delete mode 100644 packages/sdk/test/contracts/MockSCC.sol delete mode 100644 packages/sdk/test/cross-chain-messenger.spec.ts delete mode 100644 packages/sdk/test/helpers/constants.ts delete mode 100644 packages/sdk/test/helpers/index.ts delete mode 100644 packages/sdk/test/l2-provider.spec.ts delete mode 100644 packages/sdk/test/setup.ts delete mode 100644 packages/sdk/test/utils/coercion.spec.ts delete mode 100644 packages/sdk/test/utils/contracts.spec.ts delete mode 100644 packages/sdk/test/utils/merkle-utils.spec.ts delete mode 100644 packages/sdk/test/utils/message-utils.spec.ts delete mode 100644 packages/sdk/vitest.config.ts diff --git a/.circleci/config.yml b/.circleci/config.yml index b5fee66b65b4..fa69f393b67a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -840,23 +840,6 @@ jobs: paths: - "/root/.cache/go-build" - depcheck: - docker: - - image: <> - steps: - - checkout - - attach_workspace: { at: "." } - - restore_cache: - name: Restore PNPM Package Cache - keys: - - pnpm-packages-v2-{{ checksum "pnpm-lock.yaml" }} - - check-changed: - patterns: packages - - run: - name: Check sdk - command: npx depcheck - working_directory: packages/sdk - l1-geth-version-check: docker: - image: <> @@ -1632,9 +1615,6 @@ workflows: dependencies: "contracts-bedrock" requires: - pnpm-monorepo - - depcheck: - requires: - - pnpm-monorepo - go-lint-test-build: name: proxyd-tests binary_name: proxyd diff --git a/bedrock-devnet/devnet/__init__.py b/bedrock-devnet/devnet/__init__.py index 29dfc57d3d0d..f034efee128e 100644 --- a/bedrock-devnet/devnet/__init__.py +++ b/bedrock-devnet/devnet/__init__.py @@ -71,7 +71,7 @@ def main(): devnet_config_path = pjoin(deploy_config_dir, 'devnetL1.json') devnet_config_template_path = pjoin(deploy_config_dir, 'devnetL1-template.json') ops_chain_ops = pjoin(monorepo_dir, 'op-chain-ops') - sdk_dir = pjoin(monorepo_dir, 'packages', 'sdk') + tasks_dir = pjoin(monorepo_dir, 'packages', 'devnet-tasks') paths = Bunch( mono_repo_dir=monorepo_dir, @@ -86,7 +86,7 @@ def main(): op_node_dir=op_node_dir, ops_bedrock_dir=ops_bedrock_dir, ops_chain_ops=ops_chain_ops, - sdk_dir=sdk_dir, + tasks_dir=tasks_dir, genesis_l1_path=pjoin(devnet_dir, 'genesis-l1.json'), genesis_l2_path=pjoin(devnet_dir, 'genesis-l2.json'), allocs_l1_path=pjoin(devnet_dir, 'allocs-l1.json'), @@ -334,11 +334,11 @@ def devnet_test(paths): CommandPreset('erc20-test', ['npx', 'hardhat', 'deposit-erc20', '--network', 'devnetL1', '--l1-contracts-json-path', paths.addresses_json_path, '--signer-index', '14'], - cwd=paths.sdk_dir, timeout=8*60), + cwd=paths.tasks_dir, timeout=8*60), CommandPreset('eth-test', ['npx', 'hardhat', 'deposit-eth', '--network', 'devnetL1', '--l1-contracts-json-path', paths.addresses_json_path, '--signer-index', '15'], - cwd=paths.sdk_dir, timeout=8*60) + cwd=paths.tasks_dir, timeout=8*60) ], max_workers=1) diff --git a/packages/sdk/.depcheckrc b/packages/devnet-tasks/.depcheckrc similarity index 100% rename from packages/sdk/.depcheckrc rename to packages/devnet-tasks/.depcheckrc diff --git a/packages/devnet-tasks/.eslintrc.js b/packages/devnet-tasks/.eslintrc.js new file mode 100644 index 000000000000..6af12d746d9c --- /dev/null +++ b/packages/devnet-tasks/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + extends: '../../.eslintrc.js', + overrides: [], +} diff --git a/packages/sdk/.gitignore b/packages/devnet-tasks/.gitignore similarity index 100% rename from packages/sdk/.gitignore rename to packages/devnet-tasks/.gitignore diff --git a/packages/sdk/.lintstagedrc.yml b/packages/devnet-tasks/.lintstagedrc.yml similarity index 100% rename from packages/sdk/.lintstagedrc.yml rename to packages/devnet-tasks/.lintstagedrc.yml diff --git a/packages/sdk/.prettierrc.js b/packages/devnet-tasks/.prettierrc.js similarity index 100% rename from packages/sdk/.prettierrc.js rename to packages/devnet-tasks/.prettierrc.js diff --git a/packages/sdk/LICENSE b/packages/devnet-tasks/LICENSE similarity index 97% rename from packages/sdk/LICENSE rename to packages/devnet-tasks/LICENSE index 6a7da5218bb2..2633f89b4e2e 100644 --- a/packages/sdk/LICENSE +++ b/packages/devnet-tasks/LICENSE @@ -1,6 +1,6 @@ (The MIT License) -Copyright 2020-2021 Optimism +Copyright 2020-2024 Optimism Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/packages/devnet-tasks/README.md b/packages/devnet-tasks/README.md new file mode 100644 index 000000000000..8560a5c8242e --- /dev/null +++ b/packages/devnet-tasks/README.md @@ -0,0 +1,4 @@ +# @eth-optimism/devnet-tasks + +`@eth-optimism/devnet-tasks` is a temporary package that hosts two [Hardhat](https://hardhat.org/) tasks used within the [`bedrock-devnet`](/bedrock-devnet/README.md) and is not meant to be published to NPM. +You can generally disregard this package unless you are working on the `bedrock-devnet`. diff --git a/packages/sdk/hardhat.config.ts b/packages/devnet-tasks/hardhat.config.ts similarity index 99% rename from packages/sdk/hardhat.config.ts rename to packages/devnet-tasks/hardhat.config.ts index 717317b8a933..5498b75a932d 100644 --- a/packages/sdk/hardhat.config.ts +++ b/packages/devnet-tasks/hardhat.config.ts @@ -5,7 +5,7 @@ import '@nomiclabs/hardhat-ethers' import '@nomiclabs/hardhat-waffle' import 'hardhat-deploy' -import './tasks' +import './src/tasks' const config: HardhatUserConfig = { solidity: { diff --git a/packages/sdk/package.json b/packages/devnet-tasks/package.json similarity index 62% rename from packages/sdk/package.json rename to packages/devnet-tasks/package.json index 3560cff4bbbd..17a0461c06d8 100644 --- a/packages/sdk/package.json +++ b/packages/devnet-tasks/package.json @@ -1,7 +1,8 @@ { - "name": "@eth-optimism/sdk", + "private": true, + "name": "@eth-optimism/devnet-tasks", "version": "3.3.1", - "description": "[Optimism] Tools for working with Optimism", + "description": "[Optimism] Hardhat devnet testing tasks", "main": "dist/index", "types": "dist/index", "files": [ @@ -17,17 +18,15 @@ "lint:fix": "pnpm lint:check --fix", "pre-commit": "lint-staged", "test": "hardhat test", - "test:next": "vitest", - "test:next:run": "vitest run", "test:coverage": "nyc hardhat test && nyc merge .nyc_output coverage.json", "autogen:docs": "typedoc --out docs src/index.ts" }, "keywords": [ "optimism", "ethereum", - "sdk" + "devnet" ], - "homepage": "https://github.com/ethereum-optimism/optimism/tree/develop/packages/sdk#readme", + "homepage": "https://github.com/ethereum-optimism/optimism/tree/develop/packages/devnet-tasks#readme", "license": "MIT", "author": "Optimism PBC", "repository": { @@ -35,38 +34,21 @@ "url": "https://github.com/ethereum-optimism/optimism.git" }, "devDependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", "@nomiclabs/hardhat-ethers": "^2.2.3", "@nomiclabs/hardhat-waffle": "^2.0.1", - "@types/chai": "^4.3.11", - "@types/chai-as-promised": "^7.1.8", - "@types/mocha": "^10.0.6", "@types/node": "^20.11.17", - "@types/semver": "^7.5.7", - "chai-as-promised": "^7.1.1", "ethereum-waffle": "^4.0.10", "ethers": "^5.7.2", "hardhat": "^2.20.1", "hardhat-deploy": "^0.12.2", - "isomorphic-fetch": "^3.0.0", - "mocha": "^10.2.0", "nyc": "^15.1.0", "ts-node": "^10.9.2", "typedoc": "^0.25.7", - "typescript": "^5.4.5", - "viem": "^2.8.13", - "vitest": "^1.2.2", - "zod": "^3.22.4" + "typescript": "^5.4.5" }, "dependencies": { - "@eth-optimism/contracts": "0.6.0", "@eth-optimism/core-utils": "^0.13.2", - "lodash": "^4.17.21", - "merkletreejs": "^0.3.11", - "rlp": "^2.2.7", - "semver": "^7.6.0" + "@eth-optimism/sdk": "^3.3.1" }, "peerDependencies": { "ethers": "^5" diff --git a/packages/sdk/tasks/deposit-erc20.ts b/packages/devnet-tasks/src/tasks/deposit-erc20.ts similarity index 92% rename from packages/sdk/tasks/deposit-erc20.ts rename to packages/devnet-tasks/src/tasks/deposit-erc20.ts index e98f2b2398a5..368b400f5257 100644 --- a/packages/sdk/tasks/deposit-erc20.ts +++ b/packages/devnet-tasks/src/tasks/deposit-erc20.ts @@ -7,24 +7,23 @@ import '@nomiclabs/hardhat-ethers' import 'hardhat-deploy' import { Event, Contract, Wallet, providers, utils, ethers } from 'ethers' import { predeploys, sleep } from '@eth-optimism/core-utils' - -import Artifact__WETH9 from '../src/forge-artifacts/WETH9.json' -import Artifact__OptimismMintableERC20TokenFactory from '../src/forge-artifacts/OptimismMintableERC20Factory.json' -import Artifact__OptimismMintableERC20Token from '../src/forge-artifacts/OptimismMintableERC20.json' -import Artifact__L2ToL1MessagePasser from '../src/forge-artifacts/L2ToL1MessagePasser.json' -import Artifact__L2CrossDomainMessenger from '../src/forge-artifacts/L2CrossDomainMessenger.json' -import Artifact__L2StandardBridge from '../src/forge-artifacts/L2StandardBridge.json' -import Artifact__OptimismPortal from '../src/forge-artifacts/OptimismPortal.json' -import Artifact__L1CrossDomainMessenger from '../src/forge-artifacts/L1CrossDomainMessenger.json' -import Artifact__L1StandardBridge from '../src/forge-artifacts/L1StandardBridge.json' -import Artifact__L2OutputOracle from '../src/forge-artifacts/L2OutputOracle.json' +import Artifact__WETH9 from '@eth-optimism/sdk/dist/forge-artifacts/WETH9.json' +import Artifact__OptimismMintableERC20TokenFactory from '@eth-optimism/sdk/dist/forge-artifacts/OptimismMintableERC20Factory.json' +import Artifact__OptimismMintableERC20Token from '@eth-optimism/sdk/dist/forge-artifacts/OptimismMintableERC20.json' +import Artifact__L2ToL1MessagePasser from '@eth-optimism/sdk/dist/forge-artifacts/L2ToL1MessagePasser.json' +import Artifact__L2CrossDomainMessenger from '@eth-optimism/sdk/dist/forge-artifacts/L2CrossDomainMessenger.json' +import Artifact__L2StandardBridge from '@eth-optimism/sdk/dist/forge-artifacts/L2StandardBridge.json' +import Artifact__OptimismPortal from '@eth-optimism/sdk/dist/forge-artifacts/OptimismPortal.json' +import Artifact__L1CrossDomainMessenger from '@eth-optimism/sdk/dist/forge-artifacts/L1CrossDomainMessenger.json' +import Artifact__L1StandardBridge from '@eth-optimism/sdk/dist/forge-artifacts/L1StandardBridge.json' +import Artifact__L2OutputOracle from '@eth-optimism/sdk/dist/forge-artifacts/L2OutputOracle.json' import { CrossChainMessenger, MessageStatus, CONTRACT_ADDRESSES, OEContractsLike, DEFAULT_L2_CONTRACT_ADDRESSES, -} from '../src' +} from '@eth-optimism/sdk/dist' const deployWETH9 = async ( hre: HardhatRuntimeEnvironment, diff --git a/packages/sdk/tasks/deposit-eth.ts b/packages/devnet-tasks/src/tasks/deposit-eth.ts similarity index 94% rename from packages/sdk/tasks/deposit-eth.ts rename to packages/devnet-tasks/src/tasks/deposit-eth.ts index 8e145a246a02..a438f1830bc6 100644 --- a/packages/sdk/tasks/deposit-eth.ts +++ b/packages/devnet-tasks/src/tasks/deposit-eth.ts @@ -1,26 +1,25 @@ import { promises as fs } from 'fs' import { task, types } from 'hardhat/config' +import { Deployment } from 'hardhat-deploy/types' import '@nomiclabs/hardhat-ethers' import 'hardhat-deploy' -import { Deployment } from 'hardhat-deploy/types' import { predeploys } from '@eth-optimism/core-utils' import { providers, utils, ethers } from 'ethers' - -import Artifact__L2ToL1MessagePasser from '../src/forge-artifacts/L2ToL1MessagePasser.json' -import Artifact__L2CrossDomainMessenger from '../src/forge-artifacts/L2CrossDomainMessenger.json' -import Artifact__L2StandardBridge from '../src/forge-artifacts/L2StandardBridge.json' -import Artifact__OptimismPortal from '../src/forge-artifacts/OptimismPortal.json' -import Artifact__L1CrossDomainMessenger from '../src/forge-artifacts/L1CrossDomainMessenger.json' -import Artifact__L1StandardBridge from '../src/forge-artifacts/L1StandardBridge.json' -import Artifact__L2OutputOracle from '../src/forge-artifacts/L2OutputOracle.json' +import Artifact__L2ToL1MessagePasser from '@eth-optimism/sdk/dist/forge-artifacts/L2ToL1MessagePasser.json' +import Artifact__L2CrossDomainMessenger from '@eth-optimism/sdk/dist/forge-artifacts/L2CrossDomainMessenger.json' +import Artifact__L2StandardBridge from '@eth-optimism/sdk/dist/forge-artifacts/L2StandardBridge.json' +import Artifact__OptimismPortal from '@eth-optimism/sdk/dist/forge-artifacts/OptimismPortal.json' +import Artifact__L1CrossDomainMessenger from '@eth-optimism/sdk/dist/forge-artifacts/L1CrossDomainMessenger.json' +import Artifact__L1StandardBridge from '@eth-optimism/sdk/dist/forge-artifacts/L1StandardBridge.json' +import Artifact__L2OutputOracle from '@eth-optimism/sdk/dist/forge-artifacts/L2OutputOracle.json' import { CrossChainMessenger, MessageStatus, CONTRACT_ADDRESSES, OEContractsLike, DEFAULT_L2_CONTRACT_ADDRESSES, -} from '../src' +} from '@eth-optimism/sdk' const { formatEther } = utils diff --git a/packages/sdk/tasks/index.ts b/packages/devnet-tasks/src/tasks/index.ts similarity index 60% rename from packages/sdk/tasks/index.ts rename to packages/devnet-tasks/src/tasks/index.ts index 270e886b314c..c1167380ec60 100644 --- a/packages/sdk/tasks/index.ts +++ b/packages/devnet-tasks/src/tasks/index.ts @@ -1,3 +1,2 @@ import './deposit-eth' import './deposit-erc20' -import './finalize-withdrawal' diff --git a/packages/sdk/tsconfig.json b/packages/devnet-tasks/tsconfig.json similarity index 100% rename from packages/sdk/tsconfig.json rename to packages/devnet-tasks/tsconfig.json diff --git a/packages/sdk/.eslintrc.js b/packages/sdk/.eslintrc.js deleted file mode 100644 index c7b0cb5de718..000000000000 --- a/packages/sdk/.eslintrc.js +++ /dev/null @@ -1,46 +0,0 @@ -module.exports = { - extends: '../../.eslintrc.js', - overrides: [ - { - files: ['src/**/*.ts'], - rules: { - 'no-restricted-imports': [ - 'error', - 'assert', - 'buffer', - 'child_process', - 'cluster', - 'crypto', - 'dgram', - 'dns', - 'domain', - 'events', - 'freelist', - 'fs', - 'http', - 'https', - 'module', - 'net', - 'os', - 'path', - 'punycode', - 'querystring', - 'readline', - 'repl', - 'smalloc', - 'stream', - 'string_decoder', - 'sys', - 'timers', - 'tls', - 'tracing', - 'tty', - 'url', - 'util', - 'vm', - 'zlib', - ], - }, - }, - ], -} diff --git a/packages/sdk/CHANGELOG.md b/packages/sdk/CHANGELOG.md deleted file mode 100644 index 872be3d6bc62..000000000000 --- a/packages/sdk/CHANGELOG.md +++ /dev/null @@ -1,799 +0,0 @@ -# @eth-optimism/sdk - -## 3.3.1 - -### Patch Changes - -- [#10593](https://github.com/ethereum-optimism/optimism/pull/10593) [`799bc898bfb207e2ccd4b2027e3fb4db4372292b`](https://github.com/ethereum-optimism/optimism/commit/799bc898bfb207e2ccd4b2027e3fb4db4372292b) Thanks [@nitaliano](https://github.com/nitaliano)! - expose FaultDisputeGame in getOEContract - -## 3.3.0 - -### Minor Changes - -- [#9951](https://github.com/ethereum-optimism/optimism/pull/9951) [`ac5b061dfce6a9817b928a8703be9252daaeeca7`](https://github.com/ethereum-optimism/optimism/commit/ac5b061dfce6a9817b928a8703be9252daaeeca7) Thanks [@smartcontracts](https://github.com/smartcontracts)! - Updates SDK for FPAC proven withdrawals mapping. - -### Patch Changes - -- [#9964](https://github.com/ethereum-optimism/optimism/pull/9964) [`8241220898128e1f61064f22dcb6fdd0a5f043c3`](https://github.com/ethereum-optimism/optimism/commit/8241220898128e1f61064f22dcb6fdd0a5f043c3) Thanks [@roninjin10](https://github.com/roninjin10)! - Removed only-allow command from package.json - -- [#9973](https://github.com/ethereum-optimism/optimism/pull/9973) [`87093b0e9144a4709f11c7fbd631828847d891f9`](https://github.com/ethereum-optimism/optimism/commit/87093b0e9144a4709f11c7fbd631828847d891f9) Thanks [@raffaele-oplabs](https://github.com/raffaele-oplabs)! - Added support for MODE sepolia and MODE mainnet - -- [#9969](https://github.com/ethereum-optimism/optimism/pull/9969) [`372bca2257764be33797d67ddca9b53c3dd3c295`](https://github.com/ethereum-optimism/optimism/commit/372bca2257764be33797d67ddca9b53c3dd3c295) Thanks [@roninjin10](https://github.com/roninjin10)! - Fixed bug where replayable transactions would fail `finalize` if they previously were marked as errors but replayable. - -- Updated dependencies [[`8241220898128e1f61064f22dcb6fdd0a5f043c3`](https://github.com/ethereum-optimism/optimism/commit/8241220898128e1f61064f22dcb6fdd0a5f043c3)]: - - @eth-optimism/contracts-bedrock@0.17.2 - - @eth-optimism/core-utils@0.13.2 - -## 3.2.3 - -### Patch Changes - -- [#9907](https://github.com/ethereum-optimism/optimism/pull/9907) [`5fe797f183e502c1c7e91fc1e74dd3cc664ba22e`](https://github.com/ethereum-optimism/optimism/commit/5fe797f183e502c1c7e91fc1e74dd3cc664ba22e) Thanks [@smartcontracts](https://github.com/smartcontracts)! - Minor optimizations and improvements to FPAC functions. - -- [#9919](https://github.com/ethereum-optimism/optimism/pull/9919) [`3dc129fade77ddf9d45bb4c2ecd34360d1aa838a`](https://github.com/ethereum-optimism/optimism/commit/3dc129fade77ddf9d45bb4c2ecd34360d1aa838a) Thanks [@smartcontracts](https://github.com/smartcontracts)! - Sets the address of the DisputeGameFactory contract for OP Sepolia. - -## 3.2.2 - -### Patch Changes - -- [#9805](https://github.com/ethereum-optimism/optimism/pull/9805) [`3ccd12fe5c8c4c5a6acbf370d474ffa8db816562`](https://github.com/ethereum-optimism/optimism/commit/3ccd12fe5c8c4c5a6acbf370d474ffa8db816562) Thanks [@alecananian](https://github.com/alecananian)! - Fixed an issue where Vercel builds were failing due to the `preinstall` command. - -## 3.2.1 - -### Patch Changes - -- [#9663](https://github.com/ethereum-optimism/optimism/pull/9663) [`a1329f21f33ecafe409990964d3af7bf05a8a756`](https://github.com/ethereum-optimism/optimism/commit/a1329f21f33ecafe409990964d3af7bf05a8a756) Thanks [@smartcontracts](https://github.com/smartcontracts)! - Fixes a bug in the SDK that would sometimes cause proof submission reverts. - -## 3.2.0 - -### Minor Changes - -- [#9325](https://github.com/ethereum-optimism/optimism/pull/9325) [`44a2d9cec5f3b309b723b3e4dd8d29b5b70f1cc8`](https://github.com/ethereum-optimism/optimism/commit/44a2d9cec5f3b309b723b3e4dd8d29b5b70f1cc8) Thanks [@smartcontracts](https://github.com/smartcontracts)! - Updates the SDK to support FPAC in a backwards compatible way. - -### Patch Changes - -- [#9367](https://github.com/ethereum-optimism/optimism/pull/9367) [`d99d425a4f73fba19ffcf180deb0ef48ff3b9a6a`](https://github.com/ethereum-optimism/optimism/commit/d99d425a4f73fba19ffcf180deb0ef48ff3b9a6a) Thanks [@smartcontracts](https://github.com/smartcontracts)! - Fixes a bug in the SDK for finalizing fpac withdrawals. - -- [#9244](https://github.com/ethereum-optimism/optimism/pull/9244) [`73a748575e7c3d67c293814a12bf41eee216163c`](https://github.com/ethereum-optimism/optimism/commit/73a748575e7c3d67c293814a12bf41eee216163c) Thanks [@roninjin10](https://github.com/roninjin10)! - Added maintence mode warning to sdk - -- Updated dependencies [[`79effc52e8b82d15b5eda43acf540ac6c5f8d5d7`](https://github.com/ethereum-optimism/optimism/commit/79effc52e8b82d15b5eda43acf540ac6c5f8d5d7)]: - - @eth-optimism/contracts-bedrock@0.17.1 - -## 3.1.8 - -### Patch Changes - -- [#8902](https://github.com/ethereum-optimism/optimism/pull/8902) [`18becd7e4`](https://github.com/ethereum-optimism/optimism/commit/18becd7e457577c105f6bc03597e069334cb7433) Thanks [@smartcontracts](https://github.com/smartcontracts)! - Fixes a bug in the SDK that would fail if unsupported fields were provided. - -## 3.1.7 - -### Patch Changes - -- [#8836](https://github.com/ethereum-optimism/optimism/pull/8836) [`6ec80fd19`](https://github.com/ethereum-optimism/optimism/commit/6ec80fd19d9155b17a0873672fb095d323f6e8fb) Thanks [@smartcontracts](https://github.com/smartcontracts)! - Fixes a bug in l1 gas cost estimation. - -## 3.1.6 - -### Patch Changes - -- [#8212](https://github.com/ethereum-optimism/optimism/pull/8212) [`dd0e46986`](https://github.com/ethereum-optimism/optimism/commit/dd0e46986f19dcceb304fc48f2bd410685ecd179) Thanks [@smartcontracts](https://github.com/smartcontracts)! - Simplifies getMessageStatus to use an O(1) lookup instead of an event query - -## 3.1.5 - -### Patch Changes - -- [#8155](https://github.com/ethereum-optimism/optimism/pull/8155) [`2534eabb5`](https://github.com/ethereum-optimism/optimism/commit/2534eabb50afe76f176407f83cc1f1c606e6de69) Thanks [@smartcontracts](https://github.com/smartcontracts)! - Fixed bug with tokenBridge checks throwing - -## 3.1.4 - -### Patch Changes - -- [#7450](https://github.com/ethereum-optimism/optimism/pull/7450) [`ac90e16a7`](https://github.com/ethereum-optimism/optimism/commit/ac90e16a7f85c4f73661ae6023135c3d00421c1e) Thanks [@roninjin10](https://github.com/roninjin10)! - Updated dev dependencies related to testing that is causing audit tooling to report failures - -- Updated dependencies [[`ac90e16a7`](https://github.com/ethereum-optimism/optimism/commit/ac90e16a7f85c4f73661ae6023135c3d00421c1e)]: - - @eth-optimism/contracts-bedrock@0.16.2 - - @eth-optimism/core-utils@0.13.1 - -## 3.1.3 - -### Patch Changes - -- [#7244](https://github.com/ethereum-optimism/optimism/pull/7244) [`679207751`](https://github.com/ethereum-optimism/optimism/commit/6792077510fd76553c179d8b8d068262cda18db6) Thanks [@nitaliano](https://github.com/nitaliano)! - Adds Sepolia & OP Sepolia support to SDK - -- Updated dependencies [[`210b2c81d`](https://github.com/ethereum-optimism/optimism/commit/210b2c81dd383bad93480aa876b283d9a0c991c2), [`2440f5e7a`](https://github.com/ethereum-optimism/optimism/commit/2440f5e7ab6577f2d2e9c8b0c78c014290dde8e7)]: - - @eth-optimism/core-utils@0.13.0 - - @eth-optimism/contracts-bedrock@0.16.1 - -## 3.1.2 - -### Patch Changes - -- [#6886](https://github.com/ethereum-optimism/optimism/pull/6886) [`9c3a03855`](https://github.com/ethereum-optimism/optimism/commit/9c3a03855dc982f0b4e1d664e83271883536632b) Thanks [@roninjin10](https://github.com/roninjin10)! - Updated npm dependencies to latest - -## 3.1.1 - -### Patch Changes - -- Updated dependencies [[`dfa309e34`](https://github.com/ethereum-optimism/optimism/commit/dfa309e3430ebc8790b932554dde120aafc4161e)]: - - @eth-optimism/core-utils@0.12.3 - -## 3.1.0 - -### Minor Changes - -- [#6053](https://github.com/ethereum-optimism/optimism/pull/6053) [`ff577455f`](https://github.com/ethereum-optimism/optimism/commit/ff577455f196b5f5b8a889339b845561ca6c538a) Thanks [@roninjin10](https://github.com/roninjin10)! - Add support for claiming multicall3 withdrawals - -- [#6042](https://github.com/ethereum-optimism/optimism/pull/6042) [`89ca741a6`](https://github.com/ethereum-optimism/optimism/commit/89ca741a63c5e07f9d691bb6f7a89f7718fc49ca) Thanks [@roninjin10](https://github.com/roninjin10)! - Fixes issue with legacy withdrawal message status detection - -- [#6332](https://github.com/ethereum-optimism/optimism/pull/6332) [`639163253`](https://github.com/ethereum-optimism/optimism/commit/639163253a5e2128f1c21c446b68d358d38cbd30) Thanks [@wilsoncusack](https://github.com/wilsoncusack)! - Added to and from block filters to several methods in CrossChainMessenger - -### Patch Changes - -- [#6254](https://github.com/ethereum-optimism/optimism/pull/6254) [`a666c4f20`](https://github.com/ethereum-optimism/optimism/commit/a666c4f2082253abbb68c0678e5a0a1ed0c00f4b) Thanks [@roninjin10](https://github.com/roninjin10)! - Fixed missing indexes for multicall support - -- [#6164](https://github.com/ethereum-optimism/optimism/pull/6164) [`c11039060`](https://github.com/ethereum-optimism/optimism/commit/c11039060bc037a88916c2cba602687b6d69ad1a) Thanks [@pengin7384](https://github.com/pengin7384)! - fix typo - -- [#6198](https://github.com/ethereum-optimism/optimism/pull/6198) [`77da6edc6`](https://github.com/ethereum-optimism/optimism/commit/77da6edc643e0b5e39f7b6bb41c3c7ead418a876) Thanks [@tremarkley](https://github.com/tremarkley)! - Delete dead typescript https://github.com/ethereum-optimism/optimism/pull/6148. - -- [#6182](https://github.com/ethereum-optimism/optimism/pull/6182) [`3f13fd0bb`](https://github.com/ethereum-optimism/optimism/commit/3f13fd0bbea051a4550f1df6def1a53a616aa6f6) Thanks [@tremarkley](https://github.com/tremarkley)! - Update the addresses of the bridges on optimism and optimism goerli for the ECO bridge adapter - -- Updated dependencies [[`c11039060`](https://github.com/ethereum-optimism/optimism/commit/c11039060bc037a88916c2cba602687b6d69ad1a), [`72d184854`](https://github.com/ethereum-optimism/optimism/commit/72d184854ebad8b2025641f126ed76573b1f0ac3), [`77da6edc6`](https://github.com/ethereum-optimism/optimism/commit/77da6edc643e0b5e39f7b6bb41c3c7ead418a876)]: - - @eth-optimism/contracts-bedrock@0.16.0 - - @eth-optimism/core-utils@0.12.2 - -## 3.0.0 - -### Major Changes - -- 119754c2f: Make optimism/sdk default to bedrock mode - -### Patch Changes - -- Updated dependencies [8d7dcc70c] -- Updated dependencies [d6388be4a] -- Updated dependencies [af292562f] - - @eth-optimism/core-utils@0.12.1 - - @eth-optimism/contracts-bedrock@0.15.0 - -## 2.1.0 - -### Minor Changes - -- 5063a69fb: Update sdk contract addresses for bedrock - -### Patch Changes - -- a1b7ff9e3: add eco bridge adapter -- 8133872ed: Fix firefox bug with getTokenPair -- afc2ab8c9: Update the migrated withdrawal gas limit for non goerli networks -- aa854bdd8: Add warning if bedrock is not turned on -- Updated dependencies [f1e867177] -- Updated dependencies [197884eae] -- Updated dependencies [6eb05430d] -- Updated dependencies [5063a69fb] - - @eth-optimism/contracts-bedrock@0.14.0 - - @eth-optimism/contracts@0.6.0 - -## 2.0.2 - -### Patch Changes - -- be3315689: Have SDK automatically create Standard and ETH bridges when L1StandardBridge is provided. -- Updated dependencies [b16067a9f] -- Updated dependencies [9a02079eb] -- Updated dependencies [98fbe9d22] - - @eth-optimism/contracts-bedrock@0.13.2 - -## 2.0.1 - -### Patch Changes - -- 66cafc00a: Update migrated withdrawal gaslimit calculation -- Updated dependencies [22c3885f5] -- Updated dependencies [f52c07529] - - @eth-optimism/contracts-bedrock@0.13.1 - -## 2.0.0 - -### Major Changes - -- cb19e2f9c: Moves `FINALIZATION_PERIOD_SECONDS` from the `OptimismPortal` to the `L2OutputOracle` & ensures the `CHALLENGER` key cannot delete finalized outputs. - -### Patch Changes - -- Updated dependencies [cb19e2f9c] - - @eth-optimism/contracts-bedrock@0.13.0 - -## 1.10.4 - -### Patch Changes - -- Updated dependencies [80f2271f5] - - @eth-optimism/contracts-bedrock@0.12.1 - -## 1.10.3 - -### Patch Changes - -- Updated dependencies [7c0a2cc37] -- Updated dependencies [2865dd9b4] -- Updated dependencies [efc98d261] -- Updated dependencies [388f2c25a] - - @eth-optimism/contracts-bedrock@0.12.0 - -## 1.10.2 - -### Patch Changes - -- 5372c9f5b: Remove assert node builtin from sdk -- Updated dependencies [3c22333b8] - - @eth-optimism/contracts-bedrock@0.11.4 - -## 1.10.1 - -### Patch Changes - -- Updated dependencies [4964be480] - - @eth-optimism/contracts-bedrock@0.11.3 - -## 1.10.0 - -### Minor Changes - -- 3f4b3c328: Add in goerli bedrock addresses - -## 1.9.1 - -### Patch Changes - -- Updated dependencies [8784bc0bc] - - @eth-optimism/contracts-bedrock@0.11.2 - -## 1.9.0 - -### Minor Changes - -- d1f9098f9: Removes support for Kovan - -### Patch Changes - -- ba8b94a60: Don't pass 0 gasLimit for migrated withdrawals -- Updated dependencies [fe80a9488] -- Updated dependencies [827fc7b04] -- Updated dependencies [a2166dcad] -- Updated dependencies [ff09ec22d] -- Updated dependencies [85dfa9fe2] -- Updated dependencies [d1f9098f9] -- Updated dependencies [0f8fc58ad] -- Updated dependencies [89f70c591] -- Updated dependencies [03940c3cb] - - @eth-optimism/contracts-bedrock@0.11.1 - - @eth-optimism/contracts@0.5.40 - -## 1.8.0 - -### Minor Changes - -- c975c9620: Add suppory for finalizing legacy withdrawals after the Bedrock migration - -### Patch Changes - -- 767585b07: Removes an unused variable from the SDK -- 136ea1785: Refactors the L2OutputOracle to key the l2Outputs mapping by index instead of by L2 block number. -- Updated dependencies [43f33f39f] -- Updated dependencies [237a351f1] -- Updated dependencies [1d3c749a2] -- Updated dependencies [c975c9620] -- Updated dependencies [1594678e0] -- Updated dependencies [1d3c749a2] -- Updated dependencies [136ea1785] -- Updated dependencies [4d13f0afe] -- Updated dependencies [7300a7ca7] - - @eth-optimism/contracts-bedrock@0.11.0 - - @eth-optimism/contracts@0.5.39 - - @eth-optimism/core-utils@0.12.0 - -## 1.7.0 - -### Minor Changes - -- 1bfe79f20: Adds an implementation of the Two Step Withdrawals V2 proposal - -### Patch Changes - -- Updated dependencies [c025a1153] -- Updated dependencies [f8697a607] -- Updated dependencies [59adcaa09] -- Updated dependencies [c71500a7e] -- Updated dependencies [f49b71d50] -- Updated dependencies [1bfe79f20] -- Updated dependencies [ccaf5bc83] - - @eth-optimism/contracts-bedrock@0.10.0 - -## 1.6.11 - -### Patch Changes - -- Updated dependencies [52079cc12] -- Updated dependencies [13bfafb21] -- Updated dependencies [eeae96941] -- Updated dependencies [427831d86] - - @eth-optimism/contracts-bedrock@0.9.1 - -## 1.6.10 - -### Patch Changes - -- Updated dependencies [1e76cdb86] -- Updated dependencies [c02831144] -- Updated dependencies [d58b0a397] -- Updated dependencies [ff860ecf3] -- Updated dependencies [cc5adbc61] -- Updated dependencies [31c91ea74] -- Updated dependencies [87702c741] - - @eth-optimism/core-utils@0.11.0 - - @eth-optimism/contracts-bedrock@0.9.0 - - @eth-optimism/contracts@0.5.38 - -## 1.6.9 - -### Patch Changes - -- Updated dependencies [db84317b] -- Updated dependencies [9b90c732] - - @eth-optimism/contracts-bedrock@0.8.3 - -## 1.6.8 - -### Patch Changes - -- Updated dependencies [7d7d9ba8] - - @eth-optimism/contracts-bedrock@0.8.2 - -## 1.6.7 - -### Patch Changes - -- b40913b1: Adds contract addresses for the Bedrock Alpha testnet -- a5e715c3: Rename the event emitted in the L2ToL1MessagePasser -- Updated dependencies [35a7bb5e] -- Updated dependencies [a5e715c3] -- Updated dependencies [d18b8aa3] - - @eth-optimism/contracts-bedrock@0.8.1 - -## 1.6.6 - -### Patch Changes - -- Updated dependencies [6ed68fa3] -- Updated dependencies [628affc7] -- Updated dependencies [3d4e8529] -- Updated dependencies [caf5dd3e] -- Updated dependencies [740e1bcc] -- Updated dependencies [a6cbfee2] -- Updated dependencies [394a26ec] - - @eth-optimism/contracts-bedrock@0.8.0 - - @eth-optimism/contracts@0.5.37 - -## 1.6.5 - -### Patch Changes - -- e2faaa8b: Update for new BedrockMessagePasser contract -- Updated dependencies [cb5fed67] -- Updated dependencies [c427f0c0] -- Updated dependencies [e2faaa8b] -- Updated dependencies [d28ad592] -- Updated dependencies [76c8ee2d] - - @eth-optimism/contracts-bedrock@0.7.0 - -## 1.6.4 - -### Patch Changes - -- 7215f4ce: Bump ethers to 5.7.0 globally -- 206f6033: Fix outdated references to 'withdrawal contract' -- d7679ca4: Add source maps -- Updated dependencies [88dde7c8] -- Updated dependencies [7215f4ce] -- Updated dependencies [249a8ed6] -- Updated dependencies [7d7c4fdf] -- Updated dependencies [e164e22e] -- Updated dependencies [0bc1be45] -- Updated dependencies [af3e56b1] -- Updated dependencies [206f6033] -- Updated dependencies [88dde7c8] -- Updated dependencies [8790156c] -- Updated dependencies [515685f4] - - @eth-optimism/contracts-bedrock@0.6.3 - - @eth-optimism/contracts@0.5.36 - - @eth-optimism/core-utils@0.10.1 - -## 1.6.3 - -### Patch Changes - -- Updated dependencies [651a2883] - - @eth-optimism/contracts-bedrock@0.6.2 - -## 1.6.2 - -### Patch Changes - -- cfa81f88: Add DAI bridge support to Goerli -- Updated dependencies [85232179] -- Updated dependencies [593f1cfb] -- Updated dependencies [334a3eb0] -- Updated dependencies [f78eb056] - - @eth-optimism/contracts-bedrock@0.6.1 - - @eth-optimism/contracts@0.5.35 - -## 1.6.1 - -### Patch Changes - -- b27d0fa7: Add wsteth support for DAI bridge to sdk -- Updated dependencies [7fdc490c] -- Updated dependencies [3d228a0e] -- Updated dependencies [dbfea116] -- Updated dependencies [63ef1949] -- Updated dependencies [299157e7] - - @eth-optimism/contracts-bedrock@0.6.0 - - @eth-optimism/core-utils@0.10.0 - - @eth-optimism/contracts@0.5.34 - -## 1.6.0 - -### Minor Changes - -- 3af9c7a9: Removes the ICrossChainMessenger interface to speed up SDK development. - -### Patch Changes - -- 3df66a9a: Fix eth withdrawal bug -- 8323407f: Fixes a bug in the SDK for certain bridge withdrawals. -- aa2949ef: Add eth withdrawal support -- a1a73e64: Updates the SDK to pull contract addresses from the deployments of the contracts package. Updates the Contracts package to export a function that makes it possible to pull deployed addresses. -- f53c30b9: Minor refactor to variables within the SDK package. -- Updated dependencies [a095d544] -- Updated dependencies [cdf2163e] -- Updated dependencies [791f30bc] -- Updated dependencies [193befed] -- Updated dependencies [0c2719f8] -- Updated dependencies [02420db0] -- Updated dependencies [94a8f287] -- Updated dependencies [7d03c5c0] -- Updated dependencies [fec22bfe] -- Updated dependencies [9272253e] -- Updated dependencies [a1a73e64] -- Updated dependencies [c025f418] -- Updated dependencies [329d21b6] -- Updated dependencies [35eafed0] -- Updated dependencies [3cde9205] - - @eth-optimism/contracts-bedrock@0.5.4 - - @eth-optimism/contracts@0.5.33 - -## 1.5.0 - -### Minor Changes - -- dcd715a6: Update wsteth bridge address - -## 1.4.0 - -### Minor Changes - -- f05ab6b6: Add wstETH to sdk -- dac4a9f0: Updates the SDK to be compatible with Bedrock (via the "bedrock: true" constructor param). Updates the build pipeline for contracts-bedrock to export a properly formatted dist folder that matches our other packages. - -### Patch Changes - -- Updated dependencies [056cb982] -- Updated dependencies [a32e68ac] -- Updated dependencies [c648d55c] -- Updated dependencies [d544f804] -- Updated dependencies [ccbfe545] -- Updated dependencies [c97ad241] -- Updated dependencies [0df744f6] -- Updated dependencies [45541553] -- Updated dependencies [3dd296e8] -- Updated dependencies [fe94b864] -- Updated dependencies [28649d64] -- Updated dependencies [898c7ac5] -- Updated dependencies [51a1595b] -- Updated dependencies [8ae39154] -- Updated dependencies [af96563a] -- Updated dependencies [dac4a9f0] - - @eth-optimism/contracts-bedrock@0.5.3 - - @eth-optimism/core-utils@0.9.3 - - @eth-optimism/contracts@0.5.32 - -## 1.3.1 - -### Patch Changes - -- 680714c1: Updates the CCM to throw a better error for missing or invalid chain IDs -- 29830750: Update the Goerli SCC's address -- Updated dependencies [0bf3b9b4] -- Updated dependencies [8d26459b] -- Updated dependencies [4477fe9f] -- Updated dependencies [1de4f48e] - - @eth-optimism/core-utils@0.9.2 - - @eth-optimism/contracts@0.5.31 - -## 1.3.0 - -### Minor Changes - -- 032f7214: Update Goerli SDK addresses for new Goerli testnet - -## 1.2.1 - -### Patch Changes - -- Updated dependencies [6e3449ba] -- Updated dependencies [f9fee446] - - @eth-optimism/contracts@0.5.30 - - @eth-optimism/core-utils@0.9.1 - -## 1.2.0 - -### Minor Changes - -- 977493bc: Have SDK use L2 chain ID as the source of truth. - -### Patch Changes - -- Updated dependencies [700dcbb0] - - @eth-optimism/core-utils@0.9.0 - - @eth-optimism/contracts@0.5.29 - -## 1.1.9 - -### Patch Changes - -- 29ff7462: Revert es target back to 2017 -- Updated dependencies [27234f68] -- Updated dependencies [29ff7462] - - @eth-optimism/contracts@0.5.28 - - @eth-optimism/core-utils@0.8.7 - -## 1.1.8 - -### Patch Changes - -- Updated dependencies [7c5ac36f] -- Updated dependencies [3d4d988c] - - @eth-optimism/contracts@0.5.27 - -## 1.1.7 - -### Patch Changes - -- Updated dependencies [17962ca9] - - @eth-optimism/core-utils@0.8.6 - - @eth-optimism/contracts@0.5.26 - -## 1.1.6 - -### Patch Changes - -- d18ae135: Updates all ethers versions in response to BN.js bug -- Updated dependencies [d18ae135] - - @eth-optimism/contracts@0.5.25 - - @eth-optimism/core-utils@0.8.5 - -## 1.1.5 - -### Patch Changes - -- 86901552: Fixes a bug in the SDK which would cause the SDK to throw if no tx nonce is provided - -## 1.1.4 - -### Patch Changes - -- Updated dependencies [b7a04acf] - - @eth-optimism/contracts@0.5.24 - -## 1.1.3 - -### Patch Changes - -- Updated dependencies [412688d5] - - @eth-optimism/contracts@0.5.23 - -## 1.1.2 - -### Patch Changes - -- Updated dependencies [51adb389] -- Updated dependencies [5cb3a5f7] -- Updated dependencies [6b9fc055] - - @eth-optimism/contracts@0.5.22 - - @eth-optimism/core-utils@0.8.4 - -## 1.1.1 - -### Patch Changes - -- 1338135c: Fixes a bug where the wrong Overrides type was being used for gas estimation functions - -## 1.1.0 - -### Minor Changes - -- a9f8e577: New isL2Provider helper function. Internal cleanups. - -### Patch Changes - -- Updated dependencies [5818decb] - - @eth-optimism/contracts@0.5.21 - -## 1.0.4 - -### Patch Changes - -- b57014d1: Update to typescript@4.6.2 -- Updated dependencies [d040a8d9] -- Updated dependencies [b57014d1] - - @eth-optimism/contracts@0.5.20 - - @eth-optimism/core-utils@0.8.3 - -## 1.0.3 - -### Patch Changes - -- c1957126: Update Dockerfile to use Alpine -- d9a51154: Bump to hardhat@2.9.1 -- Updated dependencies [c1957126] -- Updated dependencies [d9a51154] - - @eth-optimism/contracts@0.5.19 - - @eth-optimism/core-utils@0.8.2 - -## 1.0.2 - -### Patch Changes - -- d49feca1: Comment out non-functional getMessagesByAddress function -- Updated dependencies [88601cb7] - - @eth-optimism/contracts@0.5.18 - -## 1.0.1 - -### Patch Changes - -- 7ae1c67f: Update package json to include correct repo link -- 47e5d118: Tighten type restriction on ProviderLike -- Updated dependencies [175ae0bf] - - @eth-optimism/contracts@0.5.17 - -## 1.0.0 - -### Major Changes - -- 84f63c49: Update README and bump SDK to 1.0.0 - -### Patch Changes - -- 42227d69: Fix typo in constructor docstring - -## 0.2.5 - -### Patch Changes - -- b66e3131: Add a function for waiting for a particular message status -- Updated dependencies [962f36e4] -- Updated dependencies [f2179e37] -- Updated dependencies [b6a4fa4b] -- Updated dependencies [b7c0a5ca] -- Updated dependencies [5a6f539c] -- Updated dependencies [27d8942e] - - @eth-optimism/contracts@0.5.16 - - @eth-optimism/core-utils@0.8.1 - -## 0.2.4 - -### Patch Changes - -- 44420939: 1. Fix a bug in `L2Provider.getL1GasPrice()` 2. Make it easier to get correct estimates from `L2Provider.estimateL1Gas()` and `L2.estimateL2GasCost`. - -## 0.2.3 - -### Patch Changes - -- f37c283c: Have SDK properly handle case when no batches are submitted yet -- 3f4d3c13: Have SDK wait for transactions in getMessagesByTransaction -- 0c54e60e: Add approval functions to the SDK -- Updated dependencies [0b4453f7] -- Updated dependencies [78298782] - - @eth-optimism/core-utils@0.8.0 - - @eth-optimism/contracts@0.5.15 - -## 0.2.2 - -### Patch Changes - -- fd6ea3ee: Adds support for depositing or withdrawing to a target address -- 5ffb5fcf: Removes the getTokenBridgeMessagesByAddress function -- dd4b2055: This update implements the asL2Provider function -- f08c06a8: Updates the SDK to include default bridges for the local Optimism network (31337) -- da53dc64: Have SDK sort deposits/withdrawals descending by block number -- Updated dependencies [b4165299] -- Updated dependencies [3c2acd91] - - @eth-optimism/core-utils@0.7.7 - - @eth-optimism/contracts@0.5.14 - -## 0.2.1 - -### Patch Changes - -- Updated dependencies [438bc78a] - - @eth-optimism/contracts@0.5.13 - -## 0.2.0 - -### Minor Changes - -- dd9683bb: Correctly export SDK contents - -## 0.1.0 - -### Minor Changes - -- cb65f3d8: Beta release of the Optimism SDK - -### Patch Changes - -- ba14c59d: Updates various ethers dependencies to their latest versions -- 64e746b6: Have SDK include ethers as a peer dependency -- Updated dependencies [ba14c59d] - - @eth-optimism/contracts@0.5.12 - - @eth-optimism/core-utils@0.7.6 - -## 0.0.7 - -### Patch Changes - -- Updated dependencies [e631c39c] - - @eth-optimism/contracts@0.5.11 - -## 0.0.6 - -### Patch Changes - -- Updated dependencies [ad94b9d1] - - @eth-optimism/core-utils@0.7.5 - - @eth-optimism/contracts@0.5.10 - -## 0.0.5 - -### Patch Changes - -- Updated dependencies [ba96a455] -- Updated dependencies [c3e85fef] - - @eth-optimism/core-utils@0.7.4 - - @eth-optimism/contracts@0.5.9 - -## 0.0.4 - -### Patch Changes - -- Updated dependencies [b3efb8b7] -- Updated dependencies [279603e5] -- Updated dependencies [b6040bb3] - - @eth-optimism/contracts@0.5.8 - -## 0.0.3 - -### Patch Changes - -- Updated dependencies [b6f89fad] - - @eth-optimism/contracts@0.5.7 - -## 0.0.2 - -### Patch Changes - -- Updated dependencies [bbd42e03] -- Updated dependencies [453f0774] - - @eth-optimism/contracts@0.5.6 diff --git a/packages/sdk/README.md b/packages/sdk/README.md deleted file mode 100644 index 3c1ac04157c1..000000000000 --- a/packages/sdk/README.md +++ /dev/null @@ -1,60 +0,0 @@ - -# @eth-optimism/sdk - -[![codecov](https://codecov.io/gh/ethereum-optimism/optimism/branch/master/graph/badge.svg?token=0VTG7PG7YR&flag=sdk-tests)](https://codecov.io/gh/ethereum-optimism/optimism) - -The `@eth-optimism/sdk` package provides a set of tools for interacting with Optimism. - -## Warning!!! - -`@eth-optimism/sdk` has been superseded by `op-viem`. For most developers we suggest you migrate to [viem](https://viem.sh/op-stack) which has native built in op-stack support built in. It also has additional benefits. - -**The OP Labs team has no plans to add new features @eth-optimism/sdk and it is in maintenance mode** - -If you are already using the sdk you are safe as it will continue to be maintained. - -- an intuitive API that learned from this package and is now revamped -- great treeshaking with a 10x+ improvement to bundlesize -- Better performance -- Updated to use the latest op stack contracts. At times it will save you gas compared to using viem. - -If viem does not have what you need please let us know by opening an issue in the viem repo or here. Letting us know helps us advocate to upstream more functionality to viem. Viem is missing the following functionality: - -- ERC20 support - -If viem doesn't have what you need, the extensions for viem, [op-viem extensions](https://github.com/base-org/op-viem), likely have it too. - -## Installation - -``` -npm install @eth-optimism/sdk -``` - -## Docs - -You can find auto-generated API documentation over at [sdk.optimism.io](https://sdk.optimism.io). - -## Contributing - -Most of the core functionality is in the [CrossChainMessenger](./src/cross-chain-messenger.ts) file. - -## Using the SDK - -### CrossChainMessenger - -The [`CrossChainMessenger`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/sdk/src/cross-chain-messenger.ts) class simplifies the process of moving assets and data between Ethereum and Optimism. -You can use this class to, for example, initiate a withdrawal of ERC20 tokens from Optimism back to Ethereum, accurately track when the withdrawal is ready to be finalized on Ethereum, and execute the finalization transaction after the challenge period has elapsed. -The `CrossChainMessenger` can handle deposits and withdrawals of ETH and any ERC20-compatible token. -Detailed API descriptions can be found at [sdk.optimism.io](https://sdk.optimism.io/classes/crosschainmessenger). -The `CrossChainMessenger` automatically connects to all relevant contracts so complex configuration is not necessary. - -### L2Provider and related utilities - -The Optimism SDK includes [various utilities](https://github.com/ethereum-optimism/optimism/blob/develop/packages/sdk/src/l2-provider.ts) for handling Optimism's [transaction fee model](https://community.optimism.io/docs/developers/build/transaction-fees/). -For instance, [`estimateTotalGasCost`](https://sdk.optimism.io/modules.html#estimateTotalGasCost) will estimate the total cost (in wei) to send at transaction on Optimism including both the L2 execution cost and the L1 data cost. -You can also use the [`asL2Provider`](https://sdk.optimism.io/modules.html#asL2Provider) function to wrap an ethers Provider object into an `L2Provider` which will have all of these helper functions attached. - -### Other utilities - -The SDK contains other useful helper functions and constants. -For a complete list, refer to the auto-generated [SDK documentation](https://sdk.optimism.io/) diff --git a/packages/sdk/example.env b/packages/sdk/example.env deleted file mode 100644 index b8855b67b433..000000000000 --- a/packages/sdk/example.env +++ /dev/null @@ -1,4 +0,0 @@ -// public rpcs are heavily throttled/rate limited so replace these with rpcs with apikeys. These are meant to be testnet rpcs -// in future these will get renamed to VITE_E2E_RPC_URL_GOERLI etc. -VITE_E2E_RPC_URL_L1=https://ethereum-goerli.publicnode.com -VITE_E2E_RPC_URL_L2=https://goerli.optimism.io \ No newline at end of file diff --git a/packages/sdk/setupVitest.ts b/packages/sdk/setupVitest.ts deleted file mode 100644 index 0a879e628c88..000000000000 --- a/packages/sdk/setupVitest.ts +++ /dev/null @@ -1,4 +0,0 @@ -import fetch from 'isomorphic-fetch' - -// viem needs this -global.fetch = fetch diff --git a/packages/sdk/src/adapters/dai-bridge.ts b/packages/sdk/src/adapters/dai-bridge.ts deleted file mode 100644 index 3ef75b04aaad..000000000000 --- a/packages/sdk/src/adapters/dai-bridge.ts +++ /dev/null @@ -1,63 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ -import { Contract } from 'ethers' -import { hexStringEquals } from '@eth-optimism/core-utils' - -import { AddressLike } from '../interfaces' -import { toAddress } from '../utils' -import { StandardBridgeAdapter } from './standard-bridge' - -/** - * Bridge adapter for DAI. - */ -export class DAIBridgeAdapter extends StandardBridgeAdapter { - public async supportsTokenPair( - l1Token: AddressLike, - l2Token: AddressLike - ): Promise { - // Just need access to this ABI for this one function. - const l1Bridge = new Contract( - this.l1Bridge.address, - [ - { - inputs: [], - name: 'l1Token' as const, - outputs: [ - { - internalType: 'address' as const, - name: '' as const, - type: 'address' as const, - }, - ], - stateMutability: 'view' as const, - type: 'function' as const, - }, - { - inputs: [], - name: 'l2Token' as const, - outputs: [ - { - internalType: 'address' as const, - name: '' as const, - type: 'address' as const, - }, - ], - stateMutability: 'view' as const, - type: 'function' as const, - }, - ], - this.messenger.l1Provider - ) - - const allowedL1Token = await l1Bridge.l1Token() - if (!hexStringEquals(allowedL1Token, toAddress(l1Token))) { - return false - } - - const allowedL2Token = await l1Bridge.l2Token() - if (!hexStringEquals(allowedL2Token, toAddress(l2Token))) { - return false - } - - return true - } -} diff --git a/packages/sdk/src/adapters/eco-bridge.ts b/packages/sdk/src/adapters/eco-bridge.ts deleted file mode 100644 index 8fa8668c433a..000000000000 --- a/packages/sdk/src/adapters/eco-bridge.ts +++ /dev/null @@ -1,73 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ -import { Contract } from 'ethers' -import { hexStringEquals } from '@eth-optimism/core-utils' - -import { AddressLike } from '../interfaces' -import { toAddress } from '../utils' -import { StandardBridgeAdapter } from './standard-bridge' - -/** - * Bridge adapter for ECO. - * ECO bridge requires a separate adapter as exposes different functions than our standard bridge - */ -export class ECOBridgeAdapter extends StandardBridgeAdapter { - public async supportsTokenPair( - l1Token: AddressLike, - l2Token: AddressLike - ): Promise { - const l1Bridge = new Contract( - this.l1Bridge.address, - [ - { - inputs: [], - name: 'l1Eco', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - ], - this.messenger.l1Provider - ) - - const l2Bridge = new Contract( - this.l2Bridge.address, - [ - { - inputs: [], - name: 'l2Eco', - outputs: [ - { - internalType: 'contract L2ECO', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - ], - this.messenger.l2Provider - ) - - const [remoteL1Token, remoteL2Token] = await Promise.all([ - l1Bridge.l1Eco(), - l2Bridge.l2Eco(), - ]) - - if (!hexStringEquals(remoteL1Token, toAddress(l1Token))) { - return false - } - - if (!hexStringEquals(remoteL2Token, toAddress(l2Token))) { - return false - } - - return true - } -} diff --git a/packages/sdk/src/adapters/eth-bridge.ts b/packages/sdk/src/adapters/eth-bridge.ts deleted file mode 100644 index b45bffdaec28..000000000000 --- a/packages/sdk/src/adapters/eth-bridge.ts +++ /dev/null @@ -1,201 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ -import { ethers, Overrides, BigNumber } from 'ethers' -import { TransactionRequest, BlockTag } from '@ethersproject/abstract-provider' -import { predeploys } from '@eth-optimism/contracts' -import { hexStringEquals } from '@eth-optimism/core-utils' - -import { - NumberLike, - AddressLike, - TokenBridgeMessage, - MessageDirection, -} from '../interfaces' -import { toAddress, omit } from '../utils' -import { StandardBridgeAdapter } from './standard-bridge' - -/** - * Bridge adapter for the ETH bridge. - */ -export class ETHBridgeAdapter extends StandardBridgeAdapter { - public async approval( - l1Token: AddressLike, - l2Token: AddressLike, - signer: ethers.Signer - ): Promise { - throw new Error(`approval not necessary for ETH bridge`) - } - - public async getDepositsByAddress( - address: AddressLike, - opts?: { - fromBlock?: BlockTag - toBlock?: BlockTag - } - ): Promise { - const events = await this.l1Bridge.queryFilter( - this.l1Bridge.filters.ETHDepositInitiated(address), - opts?.fromBlock, - opts?.toBlock - ) - - return events - .map((event) => { - return { - direction: MessageDirection.L1_TO_L2, - from: event.args.from, - to: event.args.to, - l1Token: ethers.constants.AddressZero, - l2Token: predeploys.OVM_ETH, - amount: event.args.amount, - data: event.args.extraData, - logIndex: event.logIndex, - blockNumber: event.blockNumber, - transactionHash: event.transactionHash, - } - }) - .sort((a, b) => { - // Sort descending by block number - return b.blockNumber - a.blockNumber - }) - } - - public async getWithdrawalsByAddress( - address: AddressLike, - opts?: { - fromBlock?: BlockTag - toBlock?: BlockTag - } - ): Promise { - const events = await this.l2Bridge.queryFilter( - this.l2Bridge.filters.WithdrawalInitiated(undefined, undefined, address), - opts?.fromBlock, - opts?.toBlock - ) - - return events - .filter((event) => { - // Only find ETH withdrawals. - return ( - hexStringEquals(event.args.l1Token, ethers.constants.AddressZero) && - hexStringEquals(event.args.l2Token, predeploys.OVM_ETH) - ) - }) - .map((event) => { - return { - direction: MessageDirection.L2_TO_L1, - from: event.args.from, - to: event.args.to, - l1Token: event.args.l1Token, - l2Token: event.args.l2Token, - amount: event.args.amount, - data: event.args.extraData, - logIndex: event.logIndex, - blockNumber: event.blockNumber, - transactionHash: event.transactionHash, - } - }) - .sort((a, b) => { - // Sort descending by block number - return b.blockNumber - a.blockNumber - }) - } - - public async supportsTokenPair( - l1Token: AddressLike, - l2Token: AddressLike - ): Promise { - // Only support ETH deposits and withdrawals. - return ( - hexStringEquals(toAddress(l1Token), ethers.constants.AddressZero) && - hexStringEquals(toAddress(l2Token), predeploys.OVM_ETH) - ) - } - - populateTransaction = { - approve: async ( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - overrides?: Overrides - } - ): Promise => { - throw new Error(`approvals not necessary for ETH bridge`) - }, - - deposit: async ( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - recipient?: AddressLike - l2GasLimit?: NumberLike - overrides?: Overrides - } - ): Promise => { - if (!(await this.supportsTokenPair(l1Token, l2Token))) { - throw new Error(`token pair not supported by bridge`) - } - - if (opts?.recipient === undefined) { - return this.l1Bridge.populateTransaction.depositETH( - opts?.l2GasLimit || 200_000, // Default to 200k gas limit. - '0x', // No data. - { - ...omit(opts?.overrides || {}, 'value'), - value: amount, - } - ) - } else { - return this.l1Bridge.populateTransaction.depositETHTo( - toAddress(opts.recipient), - opts?.l2GasLimit || 200_000, // Default to 200k gas limit. - '0x', // No data. - { - ...omit(opts?.overrides || {}, 'value'), - value: amount, - } - ) - } - }, - - withdraw: async ( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - recipient?: AddressLike - overrides?: Overrides - } - ): Promise => { - if (!(await this.supportsTokenPair(l1Token, l2Token))) { - throw new Error(`token pair not supported by bridge`) - } - - if (opts?.recipient === undefined) { - return this.l2Bridge.populateTransaction.withdraw( - toAddress(l2Token), - amount, - 0, // L1 gas not required. - '0x', // No data. - { - ...omit(opts?.overrides || {}, 'value'), - value: this.messenger.bedrock ? amount : 0, - } - ) - } else { - return this.l2Bridge.populateTransaction.withdrawTo( - toAddress(l2Token), - toAddress(opts.recipient), - amount, - 0, // L1 gas not required. - '0x', // No data. - { - ...omit(opts?.overrides || {}, 'value'), - value: this.messenger.bedrock ? amount : 0, - } - ) - } - }, - } -} diff --git a/packages/sdk/src/adapters/index.ts b/packages/sdk/src/adapters/index.ts deleted file mode 100644 index 21b6f580b198..000000000000 --- a/packages/sdk/src/adapters/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './standard-bridge' -export * from './eth-bridge' -export * from './dai-bridge' -export * from './eco-bridge' diff --git a/packages/sdk/src/adapters/standard-bridge.ts b/packages/sdk/src/adapters/standard-bridge.ts deleted file mode 100644 index 9e5315cf421a..000000000000 --- a/packages/sdk/src/adapters/standard-bridge.ts +++ /dev/null @@ -1,390 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ -import { - ethers, - Contract, - Overrides, - Signer, - BigNumber, - CallOverrides, -} from 'ethers' -import { - TransactionRequest, - TransactionResponse, - BlockTag, -} from '@ethersproject/abstract-provider' -import { predeploys } from '@eth-optimism/contracts' -import { hexStringEquals } from '@eth-optimism/core-utils' - -import l1StandardBridgeArtifact from '../forge-artifacts/L1StandardBridge.json' -import l2StandardBridgeArtifact from '../forge-artifacts/L2StandardBridge.json' -import optimismMintableERC20 from '../forge-artifacts/OptimismMintableERC20.json' -import { CrossChainMessenger } from '../cross-chain-messenger' -import { - IBridgeAdapter, - NumberLike, - AddressLike, - TokenBridgeMessage, - MessageDirection, -} from '../interfaces' -import { toAddress } from '../utils' - -/** - * Bridge adapter for any token bridge that uses the standard token bridge interface. - */ -export class StandardBridgeAdapter implements IBridgeAdapter { - public messenger: CrossChainMessenger - public l1Bridge: Contract - public l2Bridge: Contract - - /** - * Creates a StandardBridgeAdapter instance. - * - * @param opts Options for the adapter. - * @param opts.messenger Provider used to make queries related to cross-chain interactions. - * @param opts.l1Bridge L1 bridge contract. - * @param opts.l2Bridge L2 bridge contract. - */ - constructor(opts: { - messenger: CrossChainMessenger - l1Bridge: AddressLike - l2Bridge: AddressLike - }) { - this.messenger = opts.messenger - this.l1Bridge = new Contract( - toAddress(opts.l1Bridge), - l1StandardBridgeArtifact.abi, - this.messenger.l1Provider - ) - this.l2Bridge = new Contract( - toAddress(opts.l2Bridge), - l2StandardBridgeArtifact.abi, - this.messenger.l2Provider - ) - } - - public async getDepositsByAddress( - address: AddressLike, - opts?: { - fromBlock?: BlockTag - toBlock?: BlockTag - } - ): Promise { - const events = await this.l1Bridge.queryFilter( - this.l1Bridge.filters.ERC20DepositInitiated( - undefined, - undefined, - address - ), - opts?.fromBlock, - opts?.toBlock - ) - - return events - .filter((event) => { - // Specifically filter out ETH. ETH deposits and withdrawals are handled by the ETH bridge - // adapter. Bridges that are not the ETH bridge should not be able to handle or even - // present ETH deposits or withdrawals. - return ( - !hexStringEquals(event.args.l1Token, ethers.constants.AddressZero) && - !hexStringEquals(event.args.l2Token, predeploys.OVM_ETH) - ) - }) - .map((event) => { - return { - direction: MessageDirection.L1_TO_L2, - from: event.args.from, - to: event.args.to, - l1Token: event.args.l1Token, - l2Token: event.args.l2Token, - amount: event.args.amount, - data: event.args.extraData, - logIndex: event.logIndex, - blockNumber: event.blockNumber, - transactionHash: event.transactionHash, - } - }) - .sort((a, b) => { - // Sort descending by block number - return b.blockNumber - a.blockNumber - }) - } - - public async getWithdrawalsByAddress( - address: AddressLike, - opts?: { - fromBlock?: BlockTag - toBlock?: BlockTag - } - ): Promise { - const events = await this.l2Bridge.queryFilter( - this.l2Bridge.filters.WithdrawalInitiated(undefined, undefined, address), - opts?.fromBlock, - opts?.toBlock - ) - - return events - .filter((event) => { - // Specifically filter out ETH. ETH deposits and withdrawals are handled by the ETH bridge - // adapter. Bridges that are not the ETH bridge should not be able to handle or even - // present ETH deposits or withdrawals. - return ( - !hexStringEquals(event.args.l1Token, ethers.constants.AddressZero) && - !hexStringEquals(event.args.l2Token, predeploys.OVM_ETH) - ) - }) - .map((event) => { - return { - direction: MessageDirection.L2_TO_L1, - from: event.args.from, - to: event.args.to, - l1Token: event.args.l1Token, - l2Token: event.args.l2Token, - amount: event.args.amount, - data: event.args.extraData, - logIndex: event.logIndex, - blockNumber: event.blockNumber, - transactionHash: event.transactionHash, - } - }) - .sort((a, b) => { - // Sort descending by block number - return b.blockNumber - a.blockNumber - }) - } - - public async supportsTokenPair( - l1Token: AddressLike, - l2Token: AddressLike - ): Promise { - const contract = new Contract( - toAddress(l2Token), - optimismMintableERC20.abi, - this.messenger.l2Provider - ) - // Don't support ETH deposits or withdrawals via this bridge. - if ( - hexStringEquals(toAddress(l1Token), ethers.constants.AddressZero) || - hexStringEquals(toAddress(l2Token), predeploys.OVM_ETH) - ) { - return false - } - - // Make sure the L1 token matches. - const remoteL1Token = await contract.l1Token() - - if (!hexStringEquals(remoteL1Token, toAddress(l1Token))) { - return false - } - - // Make sure the L2 bridge matches. - const remoteL2Bridge = await contract.l2Bridge() - if (!hexStringEquals(remoteL2Bridge, this.l2Bridge.address)) { - return false - } - - return true - } - - public async approval( - l1Token: AddressLike, - l2Token: AddressLike, - signer: ethers.Signer - ): Promise { - if (!(await this.supportsTokenPair(l1Token, l2Token))) { - throw new Error(`token pair not supported by bridge`) - } - - const token = new Contract( - toAddress(l1Token), - optimismMintableERC20.abi, - this.messenger.l1Provider - ) - - return token.allowance(await signer.getAddress(), this.l1Bridge.address) - } - - public async approve( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - signer: Signer, - opts?: { - overrides?: Overrides - } - ): Promise { - return signer.sendTransaction( - await this.populateTransaction.approve(l1Token, l2Token, amount, opts) - ) - } - - public async deposit( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - signer: Signer, - opts?: { - recipient?: AddressLike - l2GasLimit?: NumberLike - overrides?: Overrides - } - ): Promise { - return signer.sendTransaction( - await this.populateTransaction.deposit(l1Token, l2Token, amount, opts) - ) - } - - public async withdraw( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - signer: Signer, - opts?: { - recipient?: AddressLike - overrides?: Overrides - } - ): Promise { - return signer.sendTransaction( - await this.populateTransaction.withdraw(l1Token, l2Token, amount, opts) - ) - } - - populateTransaction = { - approve: async ( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - overrides?: Overrides - } - ): Promise => { - if (!(await this.supportsTokenPair(l1Token, l2Token))) { - throw new Error(`token pair not supported by bridge`) - } - - const token = new Contract( - toAddress(l1Token), - optimismMintableERC20.abi, - this.messenger.l1Provider - ) - - return token.populateTransaction.approve( - this.l1Bridge.address, - amount, - opts?.overrides || {} - ) - }, - - deposit: async ( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - recipient?: AddressLike - l2GasLimit?: NumberLike - overrides?: Overrides - } - ): Promise => { - if (!(await this.supportsTokenPair(l1Token, l2Token))) { - throw new Error(`token pair not supported by bridge`) - } - - if (opts?.recipient === undefined) { - return this.l1Bridge.populateTransaction.depositERC20( - toAddress(l1Token), - toAddress(l2Token), - amount, - opts?.l2GasLimit || 200_000, // Default to 200k gas limit. - '0x', // No data. - opts?.overrides || {} - ) - } else { - return this.l1Bridge.populateTransaction.depositERC20To( - toAddress(l1Token), - toAddress(l2Token), - toAddress(opts.recipient), - amount, - opts?.l2GasLimit || 200_000, // Default to 200k gas limit. - '0x', // No data. - opts?.overrides || {} - ) - } - }, - - withdraw: async ( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - recipient?: AddressLike - overrides?: Overrides - } - ): Promise => { - if (!(await this.supportsTokenPair(l1Token, l2Token))) { - throw new Error(`token pair not supported by bridge`) - } - - if (opts?.recipient === undefined) { - return this.l2Bridge.populateTransaction.withdraw( - toAddress(l2Token), - amount, - 0, // L1 gas not required. - '0x', // No data. - opts?.overrides || {} - ) - } else { - return this.l2Bridge.populateTransaction.withdrawTo( - toAddress(l2Token), - toAddress(opts.recipient), - amount, - 0, // L1 gas not required. - '0x', // No data. - opts?.overrides || {} - ) - } - }, - } - - estimateGas = { - approve: async ( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - overrides?: CallOverrides - } - ): Promise => { - return this.messenger.l1Provider.estimateGas( - await this.populateTransaction.approve(l1Token, l2Token, amount, opts) - ) - }, - - deposit: async ( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - recipient?: AddressLike - l2GasLimit?: NumberLike - overrides?: CallOverrides - } - ): Promise => { - return this.messenger.l1Provider.estimateGas( - await this.populateTransaction.deposit(l1Token, l2Token, amount, opts) - ) - }, - - withdraw: async ( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - recipient?: AddressLike - overrides?: CallOverrides - } - ): Promise => { - return this.messenger.l2Provider.estimateGas( - await this.populateTransaction.withdraw(l1Token, l2Token, amount, opts) - ) - }, - } -} diff --git a/packages/sdk/src/cross-chain-messenger.ts b/packages/sdk/src/cross-chain-messenger.ts deleted file mode 100644 index 65df54dcf460..000000000000 --- a/packages/sdk/src/cross-chain-messenger.ts +++ /dev/null @@ -1,2801 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ -import { - Provider, - BlockTag, - TransactionReceipt, - TransactionResponse, - TransactionRequest, -} from '@ethersproject/abstract-provider' -import { Signer } from '@ethersproject/abstract-signer' -import { - ethers, - BigNumber, - Overrides, - CallOverrides, - PayableOverrides, -} from 'ethers' -import { - sleep, - remove0x, - toHexString, - toRpcHexString, - encodeCrossDomainMessageV0, - encodeCrossDomainMessageV1, - BedrockOutputData, - BedrockCrossChainMessageProof, - decodeVersionedNonce, - encodeVersionedNonce, - getChainId, - hashCrossDomainMessagev0, - hashCrossDomainMessagev1, -} from '@eth-optimism/core-utils' -import { getContractInterface, predeploys } from '@eth-optimism/contracts' -import * as rlp from 'rlp' -import semver from 'semver' - -import { - OEContracts, - OEContractsLike, - MessageLike, - MessageRequestLike, - TransactionLike, - AddressLike, - NumberLike, - SignerOrProviderLike, - CrossChainMessage, - CrossChainMessageRequest, - CrossChainMessageProof, - MessageDirection, - MessageStatus, - TokenBridgeMessage, - MessageReceipt, - MessageReceiptStatus, - BridgeAdapterData, - BridgeAdapters, - StateRoot, - StateRootBatch, - IBridgeAdapter, - ProvenWithdrawal, - LowLevelMessage, - FPACProvenWithdrawal, -} from './interfaces' -import { - toSignerOrProvider, - toNumber, - toTransactionHash, - DeepPartial, - getAllOEContracts, - getBridgeAdapters, - makeMerkleTreeProof, - makeStateTrieProof, - hashLowLevelMessage, - migratedWithdrawalGasLimit, - DEPOSIT_CONFIRMATION_BLOCKS, - CHAIN_BLOCK_TIMES, - hashMessageHash, - getContractInterfaceBedrock, - toJsonRpcProvider, -} from './utils' - -export class CrossChainMessenger { - /** - * Provider connected to the L1 chain. - */ - public l1SignerOrProvider: Signer | Provider - - /** - * Provider connected to the L2 chain. - */ - public l2SignerOrProvider: Signer | Provider - - /** - * Chain ID for the L1 network. - */ - public l1ChainId: number - - /** - * Chain ID for the L2 network. - */ - public l2ChainId: number - - /** - * Contract objects attached to their respective providers and addresses. - */ - public contracts: OEContracts - - /** - * List of custom bridges for the given network. - */ - public bridges: BridgeAdapters - - /** - * Number of blocks before a deposit is considered confirmed. - */ - public depositConfirmationBlocks: number - - /** - * Estimated average L1 block time in seconds. - */ - public l1BlockTimeSeconds: number - - /** - * Whether or not Bedrock compatibility is enabled. - */ - public bedrock: boolean - - /** - * Cache for output root validation. Output roots are expensive to verify, so we cache them. - */ - private _outputCache: Array<{ root: string; valid: boolean }> = [] - - /** - * Creates a new CrossChainProvider instance. - * - * @param opts Options for the provider. - * @param opts.l1SignerOrProvider Signer or Provider for the L1 chain, or a JSON-RPC url. - * @param opts.l2SignerOrProvider Signer or Provider for the L2 chain, or a JSON-RPC url. - * @param opts.l1ChainId Chain ID for the L1 chain. - * @param opts.l2ChainId Chain ID for the L2 chain. - * @param opts.depositConfirmationBlocks Optional number of blocks before a deposit is confirmed. - * @param opts.l1BlockTimeSeconds Optional estimated block time in seconds for the L1 chain. - * @param opts.contracts Optional contract address overrides. - * @param opts.bridges Optional bridge address list. - * @param opts.bedrock Whether or not to enable Bedrock compatibility. - */ - constructor(opts: { - l1SignerOrProvider: SignerOrProviderLike - l2SignerOrProvider: SignerOrProviderLike - l1ChainId: NumberLike - l2ChainId: NumberLike - depositConfirmationBlocks?: NumberLike - l1BlockTimeSeconds?: NumberLike - contracts?: DeepPartial - bridges?: BridgeAdapterData - bedrock?: boolean - }) { - this.bedrock = opts.bedrock ?? true - - this.l1SignerOrProvider = toSignerOrProvider(opts.l1SignerOrProvider) - this.l2SignerOrProvider = toSignerOrProvider(opts.l2SignerOrProvider) - - try { - this.l1ChainId = toNumber(opts.l1ChainId) - } catch (err) { - throw new Error(`L1 chain ID is missing or invalid: ${opts.l1ChainId}`) - } - - try { - this.l2ChainId = toNumber(opts.l2ChainId) - } catch (err) { - throw new Error(`L2 chain ID is missing or invalid: ${opts.l2ChainId}`) - } - - this.depositConfirmationBlocks = - opts?.depositConfirmationBlocks !== undefined - ? toNumber(opts.depositConfirmationBlocks) - : DEPOSIT_CONFIRMATION_BLOCKS[this.l2ChainId] || 0 - - this.l1BlockTimeSeconds = - opts?.l1BlockTimeSeconds !== undefined - ? toNumber(opts.l1BlockTimeSeconds) - : CHAIN_BLOCK_TIMES[this.l1ChainId] || 1 - - this.contracts = getAllOEContracts(this.l2ChainId, { - l1SignerOrProvider: this.l1SignerOrProvider, - l2SignerOrProvider: this.l2SignerOrProvider, - overrides: opts.contracts, - }) - - this.bridges = getBridgeAdapters(this.l2ChainId, this, { - overrides: opts.bridges, - contracts: opts.contracts, - }) - } - - /** - * Provider connected to the L1 chain. - */ - get l1Provider(): Provider { - if (Provider.isProvider(this.l1SignerOrProvider)) { - return this.l1SignerOrProvider - } else { - return this.l1SignerOrProvider.provider - } - } - - /** - * Provider connected to the L2 chain. - */ - get l2Provider(): Provider { - if (Provider.isProvider(this.l2SignerOrProvider)) { - return this.l2SignerOrProvider - } else { - return this.l2SignerOrProvider.provider - } - } - - /** - * Signer connected to the L1 chain. - */ - get l1Signer(): Signer { - if (Provider.isProvider(this.l1SignerOrProvider)) { - throw new Error(`messenger has no L1 signer`) - } else { - return this.l1SignerOrProvider - } - } - - /** - * Signer connected to the L2 chain. - */ - get l2Signer(): Signer { - if (Provider.isProvider(this.l2SignerOrProvider)) { - throw new Error(`messenger has no L2 signer`) - } else { - return this.l2SignerOrProvider - } - } - - /** - * Uses portal version to determine if the messenger is using fpac contracts. Better not to cache - * this value as it will change during the fpac upgrade and we want clients to automatically - * begin using the new logic without throwing any errors. - * - * @returns Whether or not the messenger is using fpac contracts. - */ - public async fpac(): Promise { - if ( - this.contracts.l1.OptimismPortal.address === ethers.constants.AddressZero - ) { - // Only really relevant for certain SDK tests where the portal is not deployed. We should - // probably just update the tests so the portal gets deployed but feels like it's out of - // scope for the FPAC changes. - return false - } else { - return semver.gte( - await this.contracts.l1.OptimismPortal.version(), - '3.0.0' - ) - } - } - - /** - * Retrieves all cross chain messages sent within a given transaction. - * - * @param transaction Transaction hash or receipt to find messages from. - * @param opts Options object. - * @param opts.direction Direction to search for messages in. If not provided, will attempt to - * automatically search both directions under the assumption that a transaction hash will only - * exist on one chain. If the hash exists on both chains, will throw an error. - * @returns All cross chain messages sent within the transaction. - */ - public async getMessagesByTransaction( - transaction: TransactionLike, - opts: { - direction?: MessageDirection - } = {} - ): Promise { - // Wait for the transaction receipt if the input is waitable. - await (transaction as TransactionResponse).wait?.() - - // Convert the input to a transaction hash. - const txHash = toTransactionHash(transaction) - - let receipt: TransactionReceipt - if (opts.direction !== undefined) { - // Get the receipt for the requested direction. - if (opts.direction === MessageDirection.L1_TO_L2) { - receipt = await this.l1Provider.getTransactionReceipt(txHash) - } else { - receipt = await this.l2Provider.getTransactionReceipt(txHash) - } - } else { - // Try both directions, starting with L1 => L2. - receipt = await this.l1Provider.getTransactionReceipt(txHash) - if (receipt) { - opts.direction = MessageDirection.L1_TO_L2 - } else { - receipt = await this.l2Provider.getTransactionReceipt(txHash) - opts.direction = MessageDirection.L2_TO_L1 - } - } - - if (!receipt) { - throw new Error(`unable to find transaction receipt for ${txHash}`) - } - - // By this point opts.direction will always be defined. - const messenger = - opts.direction === MessageDirection.L1_TO_L2 - ? this.contracts.l1.L1CrossDomainMessenger - : this.contracts.l2.L2CrossDomainMessenger - - return receipt.logs - .filter((log) => { - // Only look at logs emitted by the messenger address - return log.address === messenger.address - }) - .filter((log) => { - // Only look at SentMessage logs specifically - const parsed = messenger.interface.parseLog(log) - return parsed.name === 'SentMessage' - }) - .map((log) => { - // Try to pull out the value field, but only if the very next log is a SentMessageExtension1 - // event which was introduced in the Bedrock upgrade. - let value = ethers.BigNumber.from(0) - const next = receipt.logs.find((l) => { - return ( - l.logIndex === log.logIndex + 1 && l.address === messenger.address - ) - }) - if (next) { - const nextParsed = messenger.interface.parseLog(next) - if (nextParsed.name === 'SentMessageExtension1') { - value = nextParsed.args.value - } - } - - // Convert each SentMessage log into a message object - const parsed = messenger.interface.parseLog(log) - return { - direction: opts.direction, - target: parsed.args.target, - sender: parsed.args.sender, - message: parsed.args.message, - messageNonce: parsed.args.messageNonce, - value, - minGasLimit: parsed.args.gasLimit, - logIndex: log.logIndex, - blockNumber: log.blockNumber, - transactionHash: log.transactionHash, - } - }) - } - - /** - * Transforms a legacy message into its corresponding Bedrock representation. - * - * @param message Legacy message to transform. - * @param messageIndex The index of the message, if multiple exist from multicall - * @returns Bedrock representation of the message. - */ - public async toBedrockCrossChainMessage( - message: MessageLike, - messageIndex = 0 - ): Promise { - const resolved = await this.toCrossChainMessage(message, messageIndex) - - // Bedrock messages are already in the correct format. - const { version } = decodeVersionedNonce(resolved.messageNonce) - if (version.eq(1)) { - return resolved - } - - let value = BigNumber.from(0) - if ( - resolved.direction === MessageDirection.L2_TO_L1 && - resolved.sender === this.contracts.l2.L2StandardBridge.address && - resolved.target === this.contracts.l1.L1StandardBridge.address - ) { - try { - ;[, , value] = - this.contracts.l1.L1StandardBridge.interface.decodeFunctionData( - 'finalizeETHWithdrawal', - resolved.message - ) - } catch (err) { - // No problem, not a message with value. - } - } - - return { - ...resolved, - value, - minGasLimit: BigNumber.from(0), - messageNonce: encodeVersionedNonce( - BigNumber.from(0), - resolved.messageNonce - ), - } - } - - /** - * Transforms a CrossChainMessenger message into its low-level representation inside the - * L2ToL1MessagePasser contract on L2. - * - * @param message Message to transform. - * @param messageIndex The index of the message, if multiple exist from multicall - * @return Transformed message. - */ - public async toLowLevelMessage( - message: MessageLike, - messageIndex = 0 - ): Promise { - const resolved = await this.toCrossChainMessage(message, messageIndex) - if (resolved.direction === MessageDirection.L1_TO_L2) { - throw new Error(`can only convert L2 to L1 messages to low level`) - } - - // We may have to update the message if it's a legacy message. - const { version } = decodeVersionedNonce(resolved.messageNonce) - let updated: CrossChainMessage - if (version.eq(0)) { - updated = await this.toBedrockCrossChainMessage(resolved, messageIndex) - } else { - updated = resolved - } - - // Encode the updated message, we need this for legacy messages. - const encoded = encodeCrossDomainMessageV1( - updated.messageNonce, - updated.sender, - updated.target, - updated.value, - updated.minGasLimit, - updated.message - ) - - // EVERYTHING following here is basically repeating the logic from getMessagesByTransaction - // consider cleaning this up - // We need to figure out the final withdrawal data that was used to compute the withdrawal hash - // inside the L2ToL1Message passer contract. Exact mechanism here depends on whether or not - // this is a legacy message or a new Bedrock message. - let gasLimit: BigNumber - let messageNonce: BigNumber - if (version.eq(0)) { - const chainID = await getChainId(this.l2Provider) - gasLimit = migratedWithdrawalGasLimit(encoded, chainID) - messageNonce = resolved.messageNonce - } else { - const receipt = await this.l2Provider.getTransactionReceipt( - ( - await this.toCrossChainMessage(message) - ).transactionHash - ) - - const withdrawals: ethers.utils.Result[] = [] - for (const log of receipt.logs) { - if (log.address === this.contracts.l2.BedrockMessagePasser.address) { - const decoded = - this.contracts.l2.L2ToL1MessagePasser.interface.parseLog(log) - if (decoded.name === 'MessagePassed') { - withdrawals.push(decoded.args) - } - } - } - - // Should not happen. - if (withdrawals.length === 0) { - throw new Error(`no withdrawals found in receipt`) - } - - const withdrawal = withdrawals[messageIndex] - if (!withdrawal) { - throw new Error( - `withdrawal index ${messageIndex} out of bounds there are ${withdrawals.length} withdrawals` - ) - } - messageNonce = withdrawal.nonce - gasLimit = withdrawal.gasLimit - } - - return { - messageNonce, - sender: this.contracts.l2.L2CrossDomainMessenger.address, - target: this.contracts.l1.L1CrossDomainMessenger.address, - value: updated.value, - minGasLimit: gasLimit, - message: encoded, - } - } - - // public async getMessagesByAddress( - // address: AddressLike, - // opts?: { - // direction?: MessageDirection - // fromBlock?: NumberLike - // toBlock?: NumberLike - // } - // ): Promise { - // throw new Error(` - // The function getMessagesByAddress is currently not enabled because the sender parameter of - // the SentMessage event is not indexed within the CrossChainMessenger contracts. - // getMessagesByAddress will be enabled by plugging in an Optimism Indexer (coming soon). - // See the following issue on GitHub for additional context: - // https://github.com/ethereum-optimism/optimism/issues/2129 - // `) - // } - - /** - * Finds the appropriate bridge adapter for a given L1<>L2 token pair. Will throw if no bridges - * support the token pair or if more than one bridge supports the token pair. - * - * @param l1Token L1 token address. - * @param l2Token L2 token address. - * @returns The appropriate bridge adapter for the given token pair. - */ - public async getBridgeForTokenPair( - l1Token: AddressLike, - l2Token: AddressLike - ): Promise { - const bridges: IBridgeAdapter[] = [] - for (const bridge of Object.values(this.bridges)) { - try { - if (await bridge.supportsTokenPair(l1Token, l2Token)) { - bridges.push(bridge) - } - } catch (err) { - if ( - !err?.message?.toString().includes('CALL_EXCEPTION') && - !err?.stack?.toString().includes('execution reverted') - ) { - console.error('Unexpected error when checking bridge', err) - } - } - } - - if (bridges.length === 0) { - throw new Error(`no supported bridge for token pair`) - } - - if (bridges.length > 1) { - throw new Error(`found more than one bridge for token pair`) - } - - return bridges[0] - } - - /** - * Gets all deposits for a given address. - * - * @param address Address to search for messages from. - * @param opts Options object. - * @param opts.fromBlock Block to start searching for messages from. If not provided, will start - * from the first block (block #0). - * @param opts.toBlock Block to stop searching for messages at. If not provided, will stop at the - * latest known block ("latest"). - * @returns All deposit token bridge messages sent by the given address. - */ - public async getDepositsByAddress( - address: AddressLike, - opts: { - fromBlock?: BlockTag - toBlock?: BlockTag - } = {} - ): Promise { - return ( - await Promise.all( - Object.values(this.bridges).map(async (bridge) => { - return bridge.getDepositsByAddress(address, opts) - }) - ) - ) - .reduce((acc, val) => { - return acc.concat(val) - }, []) - .sort((a, b) => { - // Sort descending by block number - return b.blockNumber - a.blockNumber - }) - } - - /** - * Gets all withdrawals for a given address. - * - * @param address Address to search for messages from. - * @param opts Options object. - * @param opts.fromBlock Block to start searching for messages from. If not provided, will start - * from the first block (block #0). - * @param opts.toBlock Block to stop searching for messages at. If not provided, will stop at the - * latest known block ("latest"). - * @returns All withdrawal token bridge messages sent by the given address. - */ - public async getWithdrawalsByAddress( - address: AddressLike, - opts: { - fromBlock?: BlockTag - toBlock?: BlockTag - } = {} - ): Promise { - return ( - await Promise.all( - Object.values(this.bridges).map(async (bridge) => { - return bridge.getWithdrawalsByAddress(address, opts) - }) - ) - ) - .reduce((acc, val) => { - return acc.concat(val) - }, []) - .sort((a, b) => { - // Sort descending by block number - return b.blockNumber - a.blockNumber - }) - } - - /** - * Resolves a MessageLike into a CrossChainMessage object. - * Unlike other coercion functions, this function is stateful and requires making additional - * requests. For now I'm going to keep this function here, but we could consider putting a - * similar function inside of utils/coercion.ts if people want to use this without having to - * create an entire CrossChainProvider object. - * - * @param message MessageLike to resolve into a CrossChainMessage. - * @param messageIndex The index of the message, if multiple exist from multicall - * @returns Message coerced into a CrossChainMessage. - */ - public async toCrossChainMessage( - message: MessageLike, - messageIndex = 0 - ): Promise { - if (!message) { - throw new Error('message is undefined') - } - // TODO: Convert these checks into proper type checks. - if ((message as CrossChainMessage).message) { - return message as CrossChainMessage - } else if ( - (message as TokenBridgeMessage).l1Token && - (message as TokenBridgeMessage).l2Token && - (message as TokenBridgeMessage).transactionHash - ) { - const messages = await this.getMessagesByTransaction( - (message as TokenBridgeMessage).transactionHash - ) - - // The `messages` object corresponds to a list of SentMessage events that were triggered by - // the same transaction. We want to find the specific SentMessage event that corresponds to - // the TokenBridgeMessage (either a ETHDepositInitiated, ERC20DepositInitiated, or - // WithdrawalInitiated event). We expect the behavior of bridge contracts to be that these - // TokenBridgeMessage events are triggered and then a SentMessage event is triggered. Our - // goal here is therefore to find the first SentMessage event that comes after the input - // event. - const found = messages - .sort((a, b) => { - // Sort all messages in ascending order by log index. - return a.logIndex - b.logIndex - }) - .find((m) => { - return m.logIndex > (message as TokenBridgeMessage).logIndex - }) - - if (!found) { - throw new Error(`could not find SentMessage event for message`) - } - - return found - } else { - // TODO: Explicit TransactionLike check and throw if not TransactionLike - const messages = await this.getMessagesByTransaction( - message as TransactionLike - ) - - const out = messages[messageIndex] - if (!out) { - throw new Error( - `withdrawal index ${messageIndex} out of bounds. There are ${messages.length} withdrawals` - ) - } - return out - } - } - - /** - * Retrieves the status of a particular message as an enum. - * - * @param message Cross chain message to check the status of. - * @param messageIndex The index of the message, if multiple exist from multicall - * @param fromBlockOrBlockHash The start block to use for the query filter on the RECEIVING chain - * @param toBlockOrBlockHash The end block to use for the query filter on the RECEIVING chain - * @returns Status of the message. - */ - public async getMessageStatus( - message: MessageLike, - // consider making this an options object next breaking release - messageIndex = 0, - /** - * @deprecated no longer used since no log filters are used - */ - fromBlockOrBlockHash?: BlockTag, - /** - * @deprecated no longer used since no log filters are used - */ - toBlockOrBlockHash?: BlockTag - ): Promise { - const resolved = await this.toCrossChainMessage(message, messageIndex) - // legacy withdrawals relayed prebedrock are v1 - const messageHashV0 = hashCrossDomainMessagev0( - resolved.target, - resolved.sender, - resolved.message, - resolved.messageNonce - ) - // bedrock withdrawals are v1 - // legacy withdrawals relayed postbedrock are v1 - // there is no good way to differentiate between the two types of legacy - // so what we will check for both - const messageHashV1 = hashCrossDomainMessagev1( - resolved.messageNonce, - resolved.sender, - resolved.target, - resolved.value, - resolved.minGasLimit, - resolved.message - ) - - // Here we want the messenger that will receive the message, not the one that sent it. - const messenger = - resolved.direction === MessageDirection.L1_TO_L2 - ? this.contracts.l2.L2CrossDomainMessenger - : this.contracts.l1.L1CrossDomainMessenger - - const success = - (await messenger.successfulMessages(messageHashV0)) || - (await messenger.successfulMessages(messageHashV1)) - - // Avoid the extra query if we already know the message was successful. - if (success) { - return MessageStatus.RELAYED - } - - const failure = - (await messenger.failedMessages(messageHashV0)) || - (await messenger.failedMessages(messageHashV1)) - - if (resolved.direction === MessageDirection.L1_TO_L2) { - if (failure) { - return MessageStatus.FAILED_L1_TO_L2_MESSAGE - } else { - return MessageStatus.UNCONFIRMED_L1_TO_L2_MESSAGE - } - } else { - if (failure) { - return MessageStatus.READY_FOR_RELAY - } else { - let timestamp: number - if (this.bedrock) { - const output = await this.getMessageBedrockOutput( - resolved, - messageIndex - ) - if (output === null) { - return MessageStatus.STATE_ROOT_NOT_PUBLISHED - } - - // Convert the message to the low level message that was proven. - const withdrawal = await this.toLowLevelMessage( - resolved, - messageIndex - ) - - // Attempt to fetch the proven withdrawal. - const provenWithdrawal = await this.getProvenWithdrawal( - hashLowLevelMessage(withdrawal) - ) - - // If the withdrawal hash has not been proven on L1, return READY_TO_PROVE. - // Note that this will also apply in the case that a withdrawal has been proven but the - // proposal used to create the proof was invalidated. This is fine because in that case - // the withdrawal needs to be proven again anyway. - if (provenWithdrawal === null) { - return MessageStatus.READY_TO_PROVE - } - - // Set the timestamp to the provenWithdrawal's timestamp - timestamp = provenWithdrawal.timestamp.toNumber() - } else { - const stateRoot = await this.getMessageStateRoot( - resolved, - messageIndex - ) - if (stateRoot === null) { - return MessageStatus.STATE_ROOT_NOT_PUBLISHED - } - - const bn = stateRoot.batch.blockNumber - const block = await this.l1Provider.getBlock(bn) - timestamp = block.timestamp - } - - if (await this.fpac()) { - // Convert the message to the low level message that was proven. - const withdrawal = await this.toLowLevelMessage( - resolved, - messageIndex - ) - - // Get the withdrawal hash. - const withdrawalHash = hashLowLevelMessage(withdrawal) - - // Grab the proven withdrawal data. - const provenWithdrawal = await this.getProvenWithdrawal( - withdrawalHash - ) - - // Sanity check, should've already happened above but do it just in case. - if (provenWithdrawal === null) { - // Ready to prove is the correct status here, we would not expect to hit this code path - // unless there was an unexpected reorg on L1. Since this is unlikely we log a warning. - console.warn( - 'Unexpected code path reached in getMessageStatus, returning READY_TO_PROVE' - ) - return MessageStatus.READY_TO_PROVE - } - - // Shouldn't happen, but worth checking just in case. - if (!('proofSubmitter' in provenWithdrawal)) { - throw new Error( - `expected to get FPAC withdrawal but got legacy withdrawal` - ) - } - - try { - // If this doesn't revert then we should be fine to relay. - await this.contracts.l1.OptimismPortal2.checkWithdrawal( - hashLowLevelMessage(withdrawal), - provenWithdrawal.proofSubmitter - ) - - return MessageStatus.READY_FOR_RELAY - } catch (err) { - return MessageStatus.IN_CHALLENGE_PERIOD - } - } else { - const challengePeriod = await this.getChallengePeriodSeconds() - const latestBlock = await this.l1Provider.getBlock('latest') - - if (timestamp + challengePeriod > latestBlock.timestamp) { - return MessageStatus.IN_CHALLENGE_PERIOD - } else { - return MessageStatus.READY_FOR_RELAY - } - } - } - } - } - - /** - * Finds the receipt of the transaction that executed a particular cross chain message. - * - * @param message Message to find the receipt of. - * @param messageIndex The index of the message, if multiple exist from multicall - * @param fromBlockOrBlockHash The start block to use for the query filter on the RECEIVING chain - * @param toBlockOrBlockHash The end block to use for the query filter on the RECEIVING chain - * @returns CrossChainMessage receipt including receipt of the transaction that relayed the - * given message. - */ - public async getMessageReceipt( - message: MessageLike, - messageIndex = 0, - fromBlockOrBlockHash?: BlockTag, - toBlockOrHash?: BlockTag - ): Promise { - const resolved = await this.toCrossChainMessage(message, messageIndex) - // legacy withdrawals relayed prebedrock are v1 - const messageHashV0 = hashCrossDomainMessagev0( - resolved.target, - resolved.sender, - resolved.message, - resolved.messageNonce - ) - // bedrock withdrawals are v1 - // legacy withdrawals relayed postbedrock are v1 - // there is no good way to differentiate between the two types of legacy - // so what we will check for both - const messageHashV1 = hashCrossDomainMessagev1( - resolved.messageNonce, - resolved.sender, - resolved.target, - resolved.value, - resolved.minGasLimit, - resolved.message - ) - - // Here we want the messenger that will receive the message, not the one that sent it. - const messenger = - resolved.direction === MessageDirection.L1_TO_L2 - ? this.contracts.l2.L2CrossDomainMessenger - : this.contracts.l1.L1CrossDomainMessenger - - // this is safe because we can guarantee only one of these filters max will return something - const relayedMessageEvents = [ - ...(await messenger.queryFilter( - messenger.filters.RelayedMessage(messageHashV0), - fromBlockOrBlockHash, - toBlockOrHash - )), - ...(await messenger.queryFilter( - messenger.filters.RelayedMessage(messageHashV1), - fromBlockOrBlockHash, - toBlockOrHash - )), - ] - - // Great, we found the message. Convert it into a transaction receipt. - if (relayedMessageEvents.length === 1) { - return { - receiptStatus: MessageReceiptStatus.RELAYED_SUCCEEDED, - transactionReceipt: - await relayedMessageEvents[0].getTransactionReceipt(), - } - } else if (relayedMessageEvents.length > 1) { - // Should never happen! - throw new Error(`multiple successful relays for message`) - } - - // We didn't find a transaction that relayed the message. We now attempt to find - // FailedRelayedMessage events instead. - const failedRelayedMessageEvents = [ - ...(await messenger.queryFilter( - messenger.filters.FailedRelayedMessage(messageHashV0), - fromBlockOrBlockHash, - toBlockOrHash - )), - ...(await messenger.queryFilter( - messenger.filters.FailedRelayedMessage(messageHashV1), - fromBlockOrBlockHash, - toBlockOrHash - )), - ] - - // A transaction can fail to be relayed multiple times. We'll always return the last - // transaction that attempted to relay the message. - // TODO: Is this the best way to handle this? - if (failedRelayedMessageEvents.length > 0) { - return { - receiptStatus: MessageReceiptStatus.RELAYED_FAILED, - transactionReceipt: await failedRelayedMessageEvents[ - failedRelayedMessageEvents.length - 1 - ].getTransactionReceipt(), - } - } - - // TODO: If the user doesn't provide enough gas then there's a chance that FailedRelayedMessage - // will never be triggered. We should probably fix this at the contract level by requiring a - // minimum amount of input gas and designing the contracts such that the gas will always be - // enough to trigger the event. However, for now we need a temporary way to find L1 => L2 - // transactions that fail but don't alert us because they didn't provide enough gas. - // TODO: Talk with the systems and protocol team about coordinating a hard fork that fixes this - // on both L1 and L2. - - // Just return null if we didn't find a receipt. Slightly nicer than throwing an error. - return null - } - - /** - * Waits for a message to be executed and returns the receipt of the transaction that executed - * the given message. - * - * @param message Message to wait for. - * @param opts Options to pass to the waiting function. - * @param opts.confirmations Number of transaction confirmations to wait for before returning. - * @param opts.pollIntervalMs Number of milliseconds to wait between polling for the receipt. - * @param opts.timeoutMs Milliseconds to wait before timing out. - * @param opts.fromBlockOrBlockHash The start block to use for the query filter on the RECEIVING chain - * @param opts.toBlockOrBlockHash The end block to use for the query filter on the RECEIVING chain - * @param messageIndex The index of the message, if multiple exist from multicall - * @returns CrossChainMessage receipt including receipt of the transaction that relayed the - * given message. - */ - public async waitForMessageReceipt( - message: MessageLike, - opts: { - fromBlockOrBlockHash?: BlockTag - toBlockOrHash?: BlockTag - confirmations?: number - pollIntervalMs?: number - timeoutMs?: number - } = {}, - - /** - * The index of the withdrawal if multiple are made with multicall - */ - messageIndex = 0 - ): Promise { - // Resolving once up-front is slightly more efficient. - const resolved = await this.toCrossChainMessage(message, messageIndex) - - let totalTimeMs = 0 - while (totalTimeMs < (opts.timeoutMs || Infinity)) { - const tick = Date.now() - const receipt = await this.getMessageReceipt( - resolved, - messageIndex, - opts.fromBlockOrBlockHash, - opts.toBlockOrHash - ) - if (receipt !== null) { - return receipt - } else { - await sleep(opts.pollIntervalMs || 4000) - totalTimeMs += Date.now() - tick - } - } - - throw new Error(`timed out waiting for message receipt`) - } - - /** - * Waits until the status of a given message changes to the expected status. Note that if the - * status of the given message changes to a status that implies the expected status, this will - * still return. If the status of the message changes to a status that exclues the expected - * status, this will throw an error. - * - * @param message Message to wait for. - * @param status Expected status of the message. - * @param opts Options to pass to the waiting function. - * @param opts.pollIntervalMs Number of milliseconds to wait when polling. - * @param opts.timeoutMs Milliseconds to wait before timing out. - * @param opts.fromBlockOrBlockHash The start block to use for the query filter on the RECEIVING chain - * @param opts.toBlockOrBlockHash The end block to use for the query filter on the RECEIVING chain - * @param messageIndex The index of the message, if multiple exist from multicall - */ - public async waitForMessageStatus( - message: MessageLike, - status: MessageStatus, - opts: { - fromBlockOrBlockHash?: BlockTag - toBlockOrBlockHash?: BlockTag - pollIntervalMs?: number - timeoutMs?: number - } = {}, - messageIndex = 0 - ): Promise { - // Resolving once up-front is slightly more efficient. - const resolved = await this.toCrossChainMessage(message, messageIndex) - - let totalTimeMs = 0 - while (totalTimeMs < (opts.timeoutMs || Infinity)) { - const tick = Date.now() - const currentStatus = await this.getMessageStatus( - resolved, - messageIndex, - opts.fromBlockOrBlockHash, - opts.toBlockOrBlockHash - ) - - // Handle special cases for L1 to L2 messages. - if (resolved.direction === MessageDirection.L1_TO_L2) { - // If we're at the expected status, we're done. - if (currentStatus === status) { - return - } - - if ( - status === MessageStatus.UNCONFIRMED_L1_TO_L2_MESSAGE && - currentStatus > status - ) { - // Anything other than UNCONFIRMED_L1_TO_L2_MESSAGE implies that the message was at one - // point "unconfirmed", so we can stop waiting. - return - } - - if ( - status === MessageStatus.FAILED_L1_TO_L2_MESSAGE && - currentStatus === MessageStatus.RELAYED - ) { - throw new Error( - `incompatible message status, expected FAILED_L1_TO_L2_MESSAGE got RELAYED` - ) - } - - if ( - status === MessageStatus.RELAYED && - currentStatus === MessageStatus.FAILED_L1_TO_L2_MESSAGE - ) { - throw new Error( - `incompatible message status, expected RELAYED got FAILED_L1_TO_L2_MESSAGE` - ) - } - } - - // Handle special cases for L2 to L1 messages. - if (resolved.direction === MessageDirection.L2_TO_L1) { - if (currentStatus >= status) { - // For L2 to L1 messages, anything after the expected status implies the previous status, - // so we can safely return if the current status enum is larger than the expected one. - return - } - } - - await sleep(opts.pollIntervalMs || 4000) - totalTimeMs += Date.now() - tick - } - - throw new Error(`timed out waiting for message status change`) - } - - /** - * Estimates the amount of gas required to fully execute a given message on L2. Only applies to - * L1 => L2 messages. You would supply this gas limit when sending the message to L2. - * - * @param message Message get a gas estimate for. - * @param opts Options object. - * @param opts.bufferPercent Percentage of gas to add to the estimate. Defaults to 20. - * @param opts.from Address to use as the sender. - * @returns Estimates L2 gas limit. - */ - public async estimateL2MessageGasLimit( - message: MessageRequestLike, - opts?: { - bufferPercent?: number - from?: string - }, - messageIndex = 0 - ): Promise { - let resolved: CrossChainMessage | CrossChainMessageRequest - let from: string - if ((message as CrossChainMessage).messageNonce === undefined) { - resolved = message as CrossChainMessageRequest - from = opts?.from - } else { - resolved = await this.toCrossChainMessage( - message as MessageLike, - messageIndex - ) - from = opts?.from || (resolved as CrossChainMessage).sender - } - - // L2 message gas estimation is only used for L1 => L2 messages. - if (resolved.direction === MessageDirection.L2_TO_L1) { - throw new Error(`cannot estimate gas limit for L2 => L1 message`) - } - - const estimate = await this.l2Provider.estimateGas({ - from, - to: resolved.target, - data: resolved.message, - }) - - // Return the estimate plus a buffer of 20% just in case. - const bufferPercent = opts?.bufferPercent || 20 - return estimate.mul(100 + bufferPercent).div(100) - } - - /** - * Returns the estimated amount of time before the message can be executed. When this is a - * message being sent to L1, this will return the estimated time until the message will complete - * its challenge period. When this is a message being sent to L2, this will return the estimated - * amount of time until the message will be picked up and executed on L2. - * - * @param message Message to estimate the time remaining for. - * @param messageIndex The index of the message, if multiple exist from multicall - * @param opts.fromBlockOrBlockHash The start block to use for the query filter on the RECEIVING chain - * @param opts.toBlockOrBlockHash The end block to use for the query filter on the RECEIVING chain - * @returns Estimated amount of time remaining (in seconds) before the message can be executed. - */ - public async estimateMessageWaitTimeSeconds( - message: MessageLike, - // consider making this an options object next breaking release - messageIndex = 0, - fromBlockOrBlockHash?: BlockTag, - toBlockOrBlockHash?: BlockTag - ): Promise { - const resolved = await this.toCrossChainMessage(message, messageIndex) - const status = await this.getMessageStatus( - resolved, - messageIndex, - fromBlockOrBlockHash, - toBlockOrBlockHash - ) - if (resolved.direction === MessageDirection.L1_TO_L2) { - if ( - status === MessageStatus.RELAYED || - status === MessageStatus.FAILED_L1_TO_L2_MESSAGE - ) { - // Transactions that are relayed or failed are considered completed, so the wait time is 0. - return 0 - } else { - // Otherwise we need to estimate the number of blocks left until the transaction will be - // considered confirmed by the Layer 2 system. Then we multiply this by the estimated - // average L1 block time. - const receipt = await this.l1Provider.getTransactionReceipt( - resolved.transactionHash - ) - const blocksLeft = Math.max( - this.depositConfirmationBlocks - receipt.confirmations, - 0 - ) - return blocksLeft * this.l1BlockTimeSeconds - } - } else { - if ( - status === MessageStatus.RELAYED || - status === MessageStatus.READY_FOR_RELAY - ) { - // Transactions that are relayed or ready for relay are considered complete. - return 0 - } else if (status === MessageStatus.STATE_ROOT_NOT_PUBLISHED) { - // If the state root hasn't been published yet, just assume it'll be published relatively - // quickly and return the challenge period for now. In the future we could use more - // advanced techniques to figure out average time between transaction execution and - // state root publication. - return this.getChallengePeriodSeconds() - } else if (status === MessageStatus.IN_CHALLENGE_PERIOD) { - // If the message is still within the challenge period, then we need to estimate exactly - // the amount of time left until the challenge period expires. The challenge period starts - // when the state root is published. - const stateRoot = await this.getMessageStateRoot(resolved, messageIndex) - const challengePeriod = await this.getChallengePeriodSeconds() - const targetBlock = await this.l1Provider.getBlock( - stateRoot.batch.blockNumber - ) - const latestBlock = await this.l1Provider.getBlock('latest') - return Math.max( - challengePeriod - (latestBlock.timestamp - targetBlock.timestamp), - 0 - ) - } else { - // Should not happen - throw new Error(`unexpected message status`) - } - } - } - - /** - * Queries the current challenge period in seconds from the StateCommitmentChain. - * - * @returns Current challenge period in seconds. - */ - public async getChallengePeriodSeconds(): Promise { - if (!this.bedrock) { - return ( - await this.contracts.l1.StateCommitmentChain.FRAUD_PROOF_WINDOW() - ).toNumber() - } - - const oracleVersion = await this.contracts.l1.L2OutputOracle.version() - const challengePeriod = - oracleVersion === '1.0.0' - ? // The ABI in the SDK does not contain FINALIZATION_PERIOD_SECONDS - // in OptimismPortal, so making an explicit call instead. - BigNumber.from( - await this.contracts.l1.OptimismPortal.provider.call({ - to: this.contracts.l1.OptimismPortal.address, - data: '0xf4daa291', // FINALIZATION_PERIOD_SECONDS - }) - ) - : await this.contracts.l1.L2OutputOracle.FINALIZATION_PERIOD_SECONDS() - return challengePeriod.toNumber() - } - - /** - * Queries the OptimismPortal contract's `provenWithdrawals` mapping - * for a ProvenWithdrawal that matches the passed withdrawalHash - * - * @bedrock - * Note: This function is bedrock-specific. - * - * @returns A ProvenWithdrawal object - */ - public async getProvenWithdrawal( - withdrawalHash: string - ): Promise { - if (!this.bedrock) { - throw new Error('message proving only applies after the bedrock upgrade') - } - - // Getting the withdrawal is easy before FPAC. - if (!(await this.fpac())) { - // Grab the proven withdrawal directly by hash. - const provenWithdrawal = - await this.contracts.l1.OptimismPortal.provenWithdrawals(withdrawalHash) - - // If the timestamp is 0 then the withdrawal has not been proven. - if (provenWithdrawal.timestamp.eq(0)) { - return null - } else { - return provenWithdrawal - } - } - - // Getting the withdrawal is a bit more complicated after FPAC. - // First we need to get the number of proof submitters for this withdrawal. - const numProofSubmitters = BigNumber.from( - await this.contracts.l1.OptimismPortal2.numProofSubmitters(withdrawalHash) - ).toNumber() - - // Now we need to find any withdrawal where the output proposal that the withdrawal was proven - // against is actually valid. We can use the same output validation cache used elsewhere. - for (let i = 0; i < numProofSubmitters; i++) { - // Grab the proof submitter. - const proofSubmitter = - await this.contracts.l1.OptimismPortal2.proofSubmitters( - withdrawalHash, - i - ) - - // Grab the ProvenWithdrawal struct for this proof. - const provenWithdrawal = - await this.contracts.l1.OptimismPortal2.provenWithdrawals( - withdrawalHash, - proofSubmitter - ) - - // Grab the game that was proven against. - const game = new ethers.Contract( - provenWithdrawal.disputeGameProxy, - getContractInterfaceBedrock('FaultDisputeGame'), - this.l1SignerOrProvider - ) - - // Check the game status. - const status = await game.status() - if (status === 1) { - // If status is CHALLENGER_WINS then it's no good. - continue - } else if (status === 2) { - // If status is DEFENDER_WINS then it's a valid proof. - return { - ...provenWithdrawal, - proofSubmitter, - } - } else if (status > 2) { - // Shouldn't happen in practice. - throw new Error('got invalid game status') - } - - // Otherwise we're IN_PROGRESS. - // Grab the block number from the extra data. Since this is not a standardized field we need - // to be defensive and assume that the extra data could be anything. If the extra data does - // not decode properly then we just skip this game. - const extraData = await game.extraData() - let l2BlockNumber: number - try { - ;[l2BlockNumber] = ethers.utils.defaultAbiCoder.decode( - ['uint256'], - extraData - ) - } catch (err) { - // Didn't decode properly, bad game. - continue - } - - // Finally we check if the output root is valid. If it is, then we can return the proven - // withdrawal. If it isn't, then we act as if this proof does not exist because it isn't - // useful for finalizing the withdrawal. - if (await this.isValidOutputRoot(await game.rootClaim(), l2BlockNumber)) { - return { - ...provenWithdrawal, - proofSubmitter, - } - } - } - - // Return null if we didn't find a valid proof. - return null - } - - /** - * Checks whether a given root claim is valid. Uses the L2 node that the SDK is connected to - * when verifying the claim. Assumes that the connected L2 node is honest. - * - * @param outputRoot Output root to verify. - * @param l2BlockNumber L2 block number the root is for. - * @returns Whether or not the root is valid. - */ - public async isValidOutputRoot( - outputRoot: string, - l2BlockNumber: number - ): Promise { - // Use the cache if we can. - const cached = this._outputCache.find((other) => { - return other.root === outputRoot - }) - - // Skip if we can use the cached. - if (cached) { - return cached.valid - } - - // If the cache ever gets to 10k elements, clear out the first half. Works well enough - // since the cache will generally tend to be used in a FIFO manner. - if (this._outputCache.length > 10000) { - this._outputCache = this._outputCache.slice(5000) - } - - // We didn't hit the cache so we're going to have to do the work. - try { - // Make sure this is a JSON RPC provider. - const provider = toJsonRpcProvider(this.l2Provider) - - // Grab the block and storage proof at the same time. - const [block, proof] = await Promise.all([ - provider.send('eth_getBlockByNumber', [ - toRpcHexString(l2BlockNumber), - false, - ]), - makeStateTrieProof( - provider, - l2BlockNumber, - this.contracts.l2.OVM_L2ToL1MessagePasser.address, - ethers.constants.HashZero - ), - ]) - - // Compute the output. - const output = ethers.utils.solidityKeccak256( - ['bytes32', 'bytes32', 'bytes32', 'bytes32'], - [ - ethers.constants.HashZero, - block.stateRoot, - proof.storageRoot, - block.hash, - ] - ) - - // If the output matches the proposal then we're good. - const valid = output === outputRoot - this._outputCache.push({ root: outputRoot, valid }) - return valid - } catch (err) { - // Assume the game is invalid but don't add it to the cache just in case we had a temp error. - return false - } - } - - /** - * Returns the Bedrock output root that corresponds to the given message. - * - * @param message Message to get the Bedrock output root for. - * @param messageIndex The index of the message, if multiple exist from multicall - * @returns Bedrock output root. - */ - public async getMessageBedrockOutput( - message: MessageLike, - messageIndex = 0 - ): Promise { - const resolved = await this.toCrossChainMessage(message, messageIndex) - - // Outputs are only a thing for L2 to L1 messages. - if (resolved.direction === MessageDirection.L1_TO_L2) { - throw new Error(`cannot get a state root for an L1 to L2 message`) - } - - let proposal: any - let l2OutputIndex: BigNumber - if (await this.fpac()) { - // Get the respected game type from the portal. - const gameType = - await this.contracts.l1.OptimismPortal2.respectedGameType() - - // Get the total game count from the DisputeGameFactory since that will give us the end of - // the array that we're searching over. We'll then use that to find the latest games. - const gameCount = await this.contracts.l1.DisputeGameFactory.gameCount() - - // Find the latest 100 games (or as many as we can up to 100). - const latestGames = - await this.contracts.l1.DisputeGameFactory.findLatestGames( - gameType, - Math.max(0, gameCount.sub(1).toNumber()), - Math.min(100, gameCount.toNumber()) - ) - - // Find all games that are for proposals about blocks newer than the message block. - const matches: any[] = [] - for (const game of latestGames) { - try { - const [blockNumber] = ethers.utils.defaultAbiCoder.decode( - ['uint256'], - game.extraData - ) - if (blockNumber.gte(resolved.blockNumber)) { - matches.push({ - ...game, - l2BlockNumber: blockNumber, - }) - } - } catch (err) { - // If we can't decode the extra data then we just skip this game. - continue - } - } - - // Shuffle the list of matches. We shuffle here to avoid potential DoS vectors where the - // latest games are all invalid and the SDK would be forced to make a bunch of archive calls. - for (let i = matches.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)) - ;[matches[i], matches[j]] = [matches[j], matches[i]] - } - - // Now we verify the proposals in the matches array. - let match: any - for (const option of matches) { - if ( - await this.isValidOutputRoot(option.rootClaim, option.l2BlockNumber) - ) { - match = option - break - } - } - - // If there's no match then we can't prove the message to the portal. - if (!match) { - return null - } - - // Put the result into the same format as the old logic for now to reduce added code. - l2OutputIndex = match.index - proposal = { - outputRoot: match.rootClaim, - timestamp: match.timestamp, - l2BlockNumber: match.l2BlockNumber, - } - } else { - // Try to find the output index that corresponds to the block number attached to the message. - // We'll explicitly handle "cannot get output" errors as a null return value, but anything else - // needs to get thrown. Might need to revisit this in the future to be a little more robust - // when connected to RPCs that don't return nice error messages. - try { - l2OutputIndex = - await this.contracts.l1.L2OutputOracle.getL2OutputIndexAfter( - resolved.blockNumber - ) - } catch (err) { - if (err.message.includes('L2OutputOracle: cannot get output')) { - return null - } else { - throw err - } - } - - // Now pull the proposal out given the output index. Should always work as long as the above - // codepath completed successfully. - proposal = await this.contracts.l1.L2OutputOracle.getL2Output( - l2OutputIndex - ) - } - - // Format everything and return it nicely. - return { - outputRoot: proposal.outputRoot, - l1Timestamp: proposal.timestamp.toNumber(), - l2BlockNumber: proposal.l2BlockNumber.toNumber(), - l2OutputIndex: l2OutputIndex.toNumber(), - } - } - - /** - * Returns the state root that corresponds to a given message. This is the state root for the - * block in which the transaction was included, as published to the StateCommitmentChain. If the - * state root for the given message has not been published yet, this function returns null. - * - * @param message Message to find a state root for. - * @param messageIndex The index of the message, if multiple exist from multicall - * @returns State root for the block in which the message was created. - */ - public async getMessageStateRoot( - message: MessageLike, - messageIndex = 0 - ): Promise { - const resolved = await this.toCrossChainMessage(message, messageIndex) - - // State roots are only a thing for L2 to L1 messages. - if (resolved.direction === MessageDirection.L1_TO_L2) { - throw new Error(`cannot get a state root for an L1 to L2 message`) - } - - // We need the block number of the transaction that triggered the message so we can look up the - // state root batch that corresponds to that block number. - const messageTxReceipt = await this.l2Provider.getTransactionReceipt( - resolved.transactionHash - ) - - // Every block has exactly one transaction in it. Since there's a genesis block, the - // transaction index will always be one less than the block number. - const messageTxIndex = messageTxReceipt.blockNumber - 1 - - // Pull down the state root batch, we'll try to pick out the specific state root that - // corresponds to our message. - const stateRootBatch = await this.getStateRootBatchByTransactionIndex( - messageTxIndex - ) - - // No state root batch, no state root. - if (stateRootBatch === null) { - return null - } - - // We have a state root batch, now we need to find the specific state root for our transaction. - // First we need to figure out the index of the state root within the batch we found. This is - // going to be the original transaction index offset by the total number of previous state - // roots. - const indexInBatch = - messageTxIndex - stateRootBatch.header.prevTotalElements.toNumber() - - // Just a sanity check. - if (stateRootBatch.stateRoots.length <= indexInBatch) { - // Should never happen! - throw new Error(`state root does not exist in batch`) - } - - return { - stateRoot: stateRootBatch.stateRoots[indexInBatch], - stateRootIndexInBatch: indexInBatch, - batch: stateRootBatch, - } - } - - /** - * Returns the StateBatchAppended event that was emitted when the batch with a given index was - * created. Returns null if no such event exists (the batch has not been submitted). - * - * @param batchIndex Index of the batch to find an event for. - * @returns StateBatchAppended event for the batch, or null if no such batch exists. - */ - public async getStateBatchAppendedEventByBatchIndex( - batchIndex: number - ): Promise { - const events = await this.contracts.l1.StateCommitmentChain.queryFilter( - this.contracts.l1.StateCommitmentChain.filters.StateBatchAppended( - batchIndex - ) - ) - - if (events.length === 0) { - return null - } else if (events.length > 1) { - // Should never happen! - throw new Error(`found more than one StateBatchAppended event`) - } else { - return events[0] - } - } - - /** - * Returns the StateBatchAppended event for the batch that includes the transaction with the - * given index. Returns null if no such event exists. - * - * @param transactionIndex Index of the L2 transaction to find an event for. - * @returns StateBatchAppended event for the batch that includes the given transaction by index. - */ - public async getStateBatchAppendedEventByTransactionIndex( - transactionIndex: number - ): Promise { - const isEventHi = (event: ethers.Event, index: number) => { - const prevTotalElements = event.args._prevTotalElements.toNumber() - return index < prevTotalElements - } - - const isEventLo = (event: ethers.Event, index: number) => { - const prevTotalElements = event.args._prevTotalElements.toNumber() - const batchSize = event.args._batchSize.toNumber() - return index >= prevTotalElements + batchSize - } - - const totalBatches: ethers.BigNumber = - await this.contracts.l1.StateCommitmentChain.getTotalBatches() - if (totalBatches.eq(0)) { - return null - } - - let lowerBound = 0 - let upperBound = totalBatches.toNumber() - 1 - let batchEvent: ethers.Event | null = - await this.getStateBatchAppendedEventByBatchIndex(upperBound) - - // Only happens when no batches have been submitted yet. - if (batchEvent === null) { - return null - } - - if (isEventLo(batchEvent, transactionIndex)) { - // Upper bound is too low, means this transaction doesn't have a corresponding state batch yet. - return null - } else if (!isEventHi(batchEvent, transactionIndex)) { - // Upper bound is not too low and also not too high. This means the upper bound event is the - // one we're looking for! Return it. - return batchEvent - } - - // Binary search to find the right event. The above checks will guarantee that the event does - // exist and that we'll find it during this search. - while (lowerBound < upperBound) { - const middleOfBounds = Math.floor((lowerBound + upperBound) / 2) - batchEvent = await this.getStateBatchAppendedEventByBatchIndex( - middleOfBounds - ) - - if (isEventHi(batchEvent, transactionIndex)) { - upperBound = middleOfBounds - } else if (isEventLo(batchEvent, transactionIndex)) { - lowerBound = middleOfBounds - } else { - break - } - } - - return batchEvent - } - - /** - * Returns information about the state root batch that included the state root for the given - * transaction by index. Returns null if no such state root has been published yet. - * - * @param transactionIndex Index of the L2 transaction to find a state root batch for. - * @returns State root batch for the given transaction index, or null if none exists yet. - */ - public async getStateRootBatchByTransactionIndex( - transactionIndex: number - ): Promise { - const stateBatchAppendedEvent = - await this.getStateBatchAppendedEventByTransactionIndex(transactionIndex) - if (stateBatchAppendedEvent === null) { - return null - } - - const stateBatchTransaction = await stateBatchAppendedEvent.getTransaction() - const [stateRoots] = - this.contracts.l1.StateCommitmentChain.interface.decodeFunctionData( - 'appendStateBatch', - stateBatchTransaction.data - ) - - return { - blockNumber: stateBatchAppendedEvent.blockNumber, - stateRoots, - header: { - batchIndex: stateBatchAppendedEvent.args._batchIndex, - batchRoot: stateBatchAppendedEvent.args._batchRoot, - batchSize: stateBatchAppendedEvent.args._batchSize, - prevTotalElements: stateBatchAppendedEvent.args._prevTotalElements, - extraData: stateBatchAppendedEvent.args._extraData, - }, - } - } - - /** - * Generates the proof required to finalize an L2 to L1 message. - * - * @param message Message to generate a proof for. - * @param messageIndex The index of the message, if multiple exist from multicall - * @returns Proof that can be used to finalize the message. - */ - public async getMessageProof( - message: MessageLike, - messageIndex = 0 - ): Promise { - const resolved = await this.toCrossChainMessage(message, messageIndex) - if (resolved.direction === MessageDirection.L1_TO_L2) { - throw new Error(`can only generate proofs for L2 to L1 messages`) - } - - const stateRoot = await this.getMessageStateRoot(resolved, messageIndex) - if (stateRoot === null) { - throw new Error(`state root for message not yet published`) - } - - // We need to calculate the specific storage slot that demonstrates that this message was - // actually included in the L2 chain. The following calculation is based on the fact that - // messages are stored in the following mapping on L2: - // https://github.com/ethereum-optimism/optimism/blob/c84d3450225306abbb39b4e7d6d82424341df2be/packages/contracts/contracts/L2/predeploys/OVM_L2ToL1MessagePasser.sol#L23 - // You can read more about how Solidity storage slots are computed for mappings here: - // https://docs.soliditylang.org/en/v0.8.4/internals/layout_in_storage.html#mappings-and-dynamic-arrays - const messageSlot = ethers.utils.keccak256( - ethers.utils.keccak256( - encodeCrossDomainMessageV0( - resolved.target, - resolved.sender, - resolved.message, - resolved.messageNonce - ) + remove0x(this.contracts.l2.L2CrossDomainMessenger.address) - ) + '00'.repeat(32) - ) - - const stateTrieProof = await makeStateTrieProof( - toJsonRpcProvider(this.l2Provider), - resolved.blockNumber, - this.contracts.l2.OVM_L2ToL1MessagePasser.address, - messageSlot - ) - - return { - stateRoot: stateRoot.stateRoot, - stateRootBatchHeader: stateRoot.batch.header, - stateRootProof: { - index: stateRoot.stateRootIndexInBatch, - siblings: makeMerkleTreeProof( - stateRoot.batch.stateRoots, - stateRoot.stateRootIndexInBatch - ), - }, - stateTrieWitness: toHexString(rlp.encode(stateTrieProof.accountProof)), - storageTrieWitness: toHexString(rlp.encode(stateTrieProof.storageProof)), - } - } - - /** - * Generates the bedrock proof required to finalize an L2 to L1 message. - * - * @param message Message to generate a proof for. - * @param messageIndex The index of the message, if multiple exist from multicall - * @returns Proof that can be used to finalize the message. - */ - public async getBedrockMessageProof( - message: MessageLike, - messageIndex = 0 - ): Promise { - const resolved = await this.toCrossChainMessage(message, messageIndex) - if (resolved.direction === MessageDirection.L1_TO_L2) { - throw new Error(`can only generate proofs for L2 to L1 messages`) - } - - const output = await this.getMessageBedrockOutput(resolved, messageIndex) - if (output === null) { - throw new Error(`state root for message not yet published`) - } - - const withdrawal = await this.toLowLevelMessage(resolved, messageIndex) - const hash = hashLowLevelMessage(withdrawal) - const messageSlot = hashMessageHash(hash) - - const provider = toJsonRpcProvider(this.l2Provider) - - const stateTrieProof = await makeStateTrieProof( - provider, - output.l2BlockNumber, - this.contracts.l2.BedrockMessagePasser.address, - messageSlot - ) - - const block = await provider.send('eth_getBlockByNumber', [ - toRpcHexString(output.l2BlockNumber), - false, - ]) - - return { - outputRootProof: { - version: ethers.constants.HashZero, - stateRoot: block.stateRoot, - messagePasserStorageRoot: stateTrieProof.storageRoot, - latestBlockhash: block.hash, - }, - withdrawalProof: stateTrieProof.storageProof, - l2OutputIndex: output.l2OutputIndex, - } - } - - /** - * Sends a given cross chain message. Where the message is sent depends on the direction attached - * to the message itself. - * - * @param message Cross chain message to send. - * @param opts Additional options. - * @param opts.signer Optional signer to use to send the transaction. - * @param opts.l2GasLimit Optional gas limit to use for the transaction on L2. - * @param opts.overrides Optional transaction overrides. - * @returns Transaction response for the message sending transaction. - */ - public async sendMessage( - message: CrossChainMessageRequest, - opts?: { - signer?: Signer - l2GasLimit?: NumberLike - overrides?: Overrides - } - ): Promise { - const tx = await this.populateTransaction.sendMessage(message, opts) - if (message.direction === MessageDirection.L1_TO_L2) { - return (opts?.signer || this.l1Signer).sendTransaction(tx) - } else { - return (opts?.signer || this.l2Signer).sendTransaction(tx) - } - } - - /** - * Resends a given cross chain message with a different gas limit. Only applies to L1 to L2 - * messages. If provided an L2 to L1 message, this function will throw an error. - * - * @param message Cross chain message to resend. - * @param messageGasLimit New gas limit to use for the message. - * @param opts Additional options. - * @param opts.signer Optional signer to use to send the transaction. - * @param opts.overrides Optional transaction overrides. - * @returns Transaction response for the message resending transaction. - */ - public async resendMessage( - message: MessageLike, - messageGasLimit: NumberLike, - opts?: { - signer?: Signer - overrides?: Overrides - } - ): Promise { - return (opts?.signer || this.l1Signer).sendTransaction( - await this.populateTransaction.resendMessage( - message, - messageGasLimit, - opts - ) - ) - } - - /** - * Proves a cross chain message that was sent from L2 to L1. Only applicable for L2 to L1 - * messages. - * - * @param message Message to finalize. - * @param opts Additional options. - * @param opts.signer Optional signer to use to send the transaction. - * @param opts.overrides Optional transaction overrides. - * @returns Transaction response for the finalization transaction. - */ - public async proveMessage( - message: MessageLike, - opts?: { - signer?: Signer - overrides?: Overrides - }, - /** - * The index of the withdrawal if multiple are made with multicall - */ - messageIndex: number = 0 - ): Promise { - const tx = await this.populateTransaction.proveMessage( - message, - opts, - messageIndex - ) - return (opts?.signer || this.l1Signer).sendTransaction(tx) - } - - /** - * Finalizes a cross chain message that was sent from L2 to L1. Only applicable for L2 to L1 - * messages. Will throw an error if the message has not completed its challenge period yet. - * - * @param message Message to finalize. - * @param opts Additional options. - * @param opts.signer Optional signer to use to send the transaction. - * @param opts.overrides Optional transaction overrides. - * @param messageIndex The index of the message, if multiple exist from multicall - * @returns Transaction response for the finalization transaction. - */ - public async finalizeMessage( - message: MessageLike, - opts?: { - signer?: Signer - overrides?: PayableOverrides - }, - messageIndex = 0 - ): Promise { - return (opts?.signer || this.l1Signer).sendTransaction( - await this.populateTransaction.finalizeMessage( - message, - opts, - messageIndex - ) - ) - } - - /** - * Deposits some ETH into the L2 chain. - * - * @param amount Amount of ETH to deposit (in wei). - * @param opts Additional options. - * @param opts.signer Optional signer to use to send the transaction. - * @param opts.recipient Optional address to receive the funds on L2. Defaults to sender. - * @param opts.l2GasLimit Optional gas limit to use for the transaction on L2. - * @param opts.overrides Optional transaction overrides. - * @returns Transaction response for the deposit transaction. - */ - public async depositETH( - amount: NumberLike, - opts?: { - recipient?: AddressLike - signer?: Signer - l2GasLimit?: NumberLike - overrides?: Overrides - } - ): Promise { - return (opts?.signer || this.l1Signer).sendTransaction( - await this.populateTransaction.depositETH(amount, opts) - ) - } - - /** - * Withdraws some ETH back to the L1 chain. - * - * @param amount Amount of ETH to withdraw. - * @param opts Additional options. - * @param opts.signer Optional signer to use to send the transaction. - * @param opts.recipient Optional address to receive the funds on L1. Defaults to sender. - * @param opts.overrides Optional transaction overrides. - * @returns Transaction response for the withdraw transaction. - */ - public async withdrawETH( - amount: NumberLike, - opts?: { - recipient?: AddressLike - signer?: Signer - overrides?: Overrides - } - ): Promise { - return (opts?.signer || this.l2Signer).sendTransaction( - await this.populateTransaction.withdrawETH(amount, opts) - ) - } - - /** - * Queries the account's approval amount for a given L1 token. - * - * @param l1Token The L1 token address. - * @param l2Token The L2 token address. - * @param opts Additional options. - * @param opts.signer Optional signer to get the approval for. - * @returns Amount of tokens approved for deposits from the account. - */ - public async approval( - l1Token: AddressLike, - l2Token: AddressLike, - opts?: { - signer?: Signer - } - ): Promise { - const bridge = await this.getBridgeForTokenPair(l1Token, l2Token) - return bridge.approval(l1Token, l2Token, opts?.signer || this.l1Signer) - } - - /** - * Approves a deposit into the L2 chain. - * - * @param l1Token The L1 token address. - * @param l2Token The L2 token address. - * @param amount Amount of the token to approve. - * @param opts Additional options. - * @param opts.signer Optional signer to use to send the transaction. - * @param opts.overrides Optional transaction overrides. - * @returns Transaction response for the approval transaction. - */ - public async approveERC20( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - signer?: Signer - overrides?: Overrides - } - ): Promise { - return (opts?.signer || this.l1Signer).sendTransaction( - await this.populateTransaction.approveERC20( - l1Token, - l2Token, - amount, - opts - ) - ) - } - - /** - * Deposits some ERC20 tokens into the L2 chain. - * - * @param l1Token Address of the L1 token. - * @param l2Token Address of the L2 token. - * @param amount Amount to deposit. - * @param opts Additional options. - * @param opts.signer Optional signer to use to send the transaction. - * @param opts.recipient Optional address to receive the funds on L2. Defaults to sender. - * @param opts.l2GasLimit Optional gas limit to use for the transaction on L2. - * @param opts.overrides Optional transaction overrides. - * @returns Transaction response for the deposit transaction. - */ - public async depositERC20( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - recipient?: AddressLike - signer?: Signer - l2GasLimit?: NumberLike - overrides?: CallOverrides - } - ): Promise { - return (opts?.signer || this.l1Signer).sendTransaction( - await this.populateTransaction.depositERC20( - l1Token, - l2Token, - amount, - opts - ) - ) - } - - /** - * Withdraws some ERC20 tokens back to the L1 chain. - * - * @param l1Token Address of the L1 token. - * @param l2Token Address of the L2 token. - * @param amount Amount to withdraw. - * @param opts Additional options. - * @param opts.signer Optional signer to use to send the transaction. - * @param opts.recipient Optional address to receive the funds on L1. Defaults to sender. - * @param opts.overrides Optional transaction overrides. - * @returns Transaction response for the withdraw transaction. - */ - public async withdrawERC20( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - recipient?: AddressLike - signer?: Signer - overrides?: Overrides - } - ): Promise { - return (opts?.signer || this.l2Signer).sendTransaction( - await this.populateTransaction.withdrawERC20( - l1Token, - l2Token, - amount, - opts - ) - ) - } - - /** - * Object that holds the functions that generate transactions to be signed by the user. - * Follows the pattern used by ethers.js. - */ - populateTransaction = { - /** - * Generates a transaction that sends a given cross chain message. This transaction can be signed - * and executed by a signer. - * - * @param message Cross chain message to send. - * @param opts Additional options. - * @param opts.l2GasLimit Optional gas limit to use for the transaction on L2. - * @param opts.overrides Optional transaction overrides. - * @returns Transaction that can be signed and executed to send the message. - */ - sendMessage: async ( - message: CrossChainMessageRequest, - opts?: { - l2GasLimit?: NumberLike - overrides?: Overrides - } - ): Promise => { - if (message.direction === MessageDirection.L1_TO_L2) { - return this.contracts.l1.L1CrossDomainMessenger.populateTransaction.sendMessage( - message.target, - message.message, - opts?.l2GasLimit || (await this.estimateL2MessageGasLimit(message)), - opts?.overrides || {} - ) - } else { - return this.contracts.l2.L2CrossDomainMessenger.populateTransaction.sendMessage( - message.target, - message.message, - 0, // Gas limit goes unused when sending from L2 to L1 - opts?.overrides || {} - ) - } - }, - - /** - * Generates a transaction that resends a given cross chain message. Only applies to L1 to L2 - * messages. This transaction can be signed and executed by a signer. - * - * @param message Cross chain message to resend. - * @param messageGasLimit New gas limit to use for the message. - * @param opts Additional options. - * @param opts.overrides Optional transaction overrides. - * @returns Transaction that can be signed and executed to resend the message. - */ - resendMessage: async ( - message: MessageLike, - messageGasLimit: NumberLike, - opts?: { - overrides?: Overrides - }, - /** - * The index of the withdrawal if multiple are made with multicall - */ - messageIndex = 0 - ): Promise => { - const resolved = await this.toCrossChainMessage(message, messageIndex) - if (resolved.direction === MessageDirection.L2_TO_L1) { - throw new Error(`cannot resend L2 to L1 message`) - } - - if (this.bedrock) { - return this.populateTransaction.finalizeMessage( - resolved, - { - ...(opts || {}), - overrides: { - ...opts?.overrides, - gasLimit: messageGasLimit, - }, - }, - messageIndex - ) - } else { - const legacyL1XDM = new ethers.Contract( - this.contracts.l1.L1CrossDomainMessenger.address, - getContractInterface('L1CrossDomainMessenger'), - this.l1SignerOrProvider - ) - return legacyL1XDM.populateTransaction.replayMessage( - resolved.target, - resolved.sender, - resolved.message, - resolved.messageNonce, - resolved.minGasLimit, - messageGasLimit, - opts?.overrides || {} - ) - } - }, - - /** - * Generates a message proving transaction that can be signed and executed. Only - * applicable for L2 to L1 messages. - * - * @param message Message to generate the proving transaction for. - * @param opts Additional options. - * @param opts.overrides Optional transaction overrides. - * @param messageIndex The index of the message, if multiple exist from multicall - * @returns Transaction that can be signed and executed to prove the message. - */ - proveMessage: async ( - message: MessageLike, - opts?: { - overrides?: PayableOverrides - }, - messageIndex = 0 - ): Promise => { - const resolved = await this.toCrossChainMessage(message, messageIndex) - if (resolved.direction === MessageDirection.L1_TO_L2) { - throw new Error('cannot finalize L1 to L2 message') - } - - if (!this.bedrock) { - throw new Error( - 'message proving only applies after the bedrock upgrade' - ) - } - - const withdrawal = await this.toLowLevelMessage(resolved, messageIndex) - const proof = await this.getBedrockMessageProof(resolved, messageIndex) - - const args = [ - [ - withdrawal.messageNonce, - withdrawal.sender, - withdrawal.target, - withdrawal.value, - withdrawal.minGasLimit, - withdrawal.message, - ], - proof.l2OutputIndex, - [ - proof.outputRootProof.version, - proof.outputRootProof.stateRoot, - proof.outputRootProof.messagePasserStorageRoot, - proof.outputRootProof.latestBlockhash, - ], - proof.withdrawalProof, - opts?.overrides || {}, - ] as const - - return this.contracts.l1.OptimismPortal.populateTransaction.proveWithdrawalTransaction( - ...args - ) - }, - - /** - * Generates a message finalization transaction that can be signed and executed. Only - * applicable for L2 to L1 messages. Will throw an error if the message has not completed - * its challenge period yet. - * - * @param message Message to generate the finalization transaction for. - * @param opts Additional options. - * @param opts.overrides Optional transaction overrides. - * @param messageIndex The index of the message, if multiple exist from multicall - * @returns Transaction that can be signed and executed to finalize the message. - */ - finalizeMessage: async ( - message: MessageLike, - opts?: { - overrides?: PayableOverrides - }, - messageIndex = 0 - ): Promise => { - const resolved = await this.toCrossChainMessage(message, messageIndex) - if (resolved.direction === MessageDirection.L1_TO_L2) { - throw new Error(`cannot finalize L1 to L2 message`) - } - - if (this.bedrock) { - // get everything we need to finalize - const messageHashV1 = hashCrossDomainMessagev1( - resolved.messageNonce, - resolved.sender, - resolved.target, - resolved.value, - resolved.minGasLimit, - resolved.message - ) - - // fetch the following - // 1. Whether it needs to be replayed because it failed - // 2. The withdrawal as a low level message - const [isFailed, withdrawal] = await Promise.allSettled([ - this.contracts.l1.L1CrossDomainMessenger.failedMessages( - messageHashV1 - ), - this.toLowLevelMessage(resolved, messageIndex), - ]) - - // handle errors - if ( - isFailed.status === 'rejected' || - withdrawal.status === 'rejected' - ) { - const rejections = [isFailed, withdrawal] - .filter((p) => p.status === 'rejected') - .map((p: PromiseRejectedResult) => p.reason) - throw rejections.length > 1 - ? new AggregateError(rejections) - : rejections[0] - } - - if (isFailed.value === true) { - const xdmWithdrawal = - this.contracts.l1.L1CrossDomainMessenger.interface.decodeFunctionData( - 'relayMessage', - withdrawal.value.message - ) - return this.contracts.l1.L1CrossDomainMessenger.populateTransaction.relayMessage( - xdmWithdrawal._nonce, - xdmWithdrawal._sender, - xdmWithdrawal._target, - xdmWithdrawal._value, - xdmWithdrawal._minGasLimit, - xdmWithdrawal._message, - opts?.overrides || {} - ) - } - - return this.contracts.l1.OptimismPortal.populateTransaction.finalizeWithdrawalTransaction( - [ - withdrawal.value.messageNonce, - withdrawal.value.sender, - withdrawal.value.target, - withdrawal.value.value, - withdrawal.value.minGasLimit, - withdrawal.value.message, - ], - opts?.overrides || {} - ) - } else { - // L1CrossDomainMessenger relayMessage is the only method that isn't fully backwards - // compatible, so we need to use the legacy interface. When we fully upgrade to Bedrock we - // should be able to remove this code. - const proof = await this.getMessageProof(resolved, messageIndex) - const legacyL1XDM = new ethers.Contract( - this.contracts.l1.L1CrossDomainMessenger.address, - getContractInterface('L1CrossDomainMessenger'), - this.l1SignerOrProvider - ) - return legacyL1XDM.populateTransaction.relayMessage( - resolved.target, - resolved.sender, - resolved.message, - resolved.messageNonce, - proof, - opts?.overrides || {} - ) - } - }, - - /** - * Generates a transaction for depositing some ETH into the L2 chain. - * - * @param amount Amount of ETH to deposit. - * @param opts Additional options. - * @param opts.recipient Optional address to receive the funds on L2. Defaults to sender. - * @param opts.l2GasLimit Optional gas limit to use for the transaction on L2. - * @param opts.overrides Optional transaction overrides. - * @returns Transaction that can be signed and executed to deposit the ETH. - */ - depositETH: async ( - amount: NumberLike, - opts?: { - recipient?: AddressLike - l2GasLimit?: NumberLike - overrides?: PayableOverrides - }, - isEstimatingGas: boolean = false - ): Promise => { - const getOpts = async () => { - if (isEstimatingGas) { - return opts - } - const gasEstimation = await this.estimateGas.depositETH(amount, opts) - return { - ...opts, - overrides: { - ...opts?.overrides, - gasLimit: gasEstimation.add(gasEstimation.div(2)), - }, - } - } - return this.bridges.ETH.populateTransaction.deposit( - ethers.constants.AddressZero, - predeploys.OVM_ETH, - amount, - await getOpts() - ) - }, - - /** - * Generates a transaction for withdrawing some ETH back to the L1 chain. - * - * @param amount Amount of ETH to withdraw. - * @param opts Additional options. - * @param opts.recipient Optional address to receive the funds on L1. Defaults to sender. - * @param opts.overrides Optional transaction overrides. - * @returns Transaction that can be signed and executed to withdraw the ETH. - */ - withdrawETH: async ( - amount: NumberLike, - opts?: { - recipient?: AddressLike - overrides?: Overrides - } - ): Promise => { - return this.bridges.ETH.populateTransaction.withdraw( - ethers.constants.AddressZero, - predeploys.OVM_ETH, - amount, - opts - ) - }, - - /** - * Generates a transaction for approving some tokens to deposit into the L2 chain. - * - * @param l1Token The L1 token address. - * @param l2Token The L2 token address. - * @param amount Amount of the token to approve. - * @param opts Additional options. - * @param opts.overrides Optional transaction overrides. - * @returns Transaction response for the approval transaction. - */ - approveERC20: async ( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - overrides?: Overrides - } - ): Promise => { - const bridge = await this.getBridgeForTokenPair(l1Token, l2Token) - return bridge.populateTransaction.approve(l1Token, l2Token, amount, opts) - }, - - /** - * Generates a transaction for depositing some ERC20 tokens into the L2 chain. - * - * @param l1Token Address of the L1 token. - * @param l2Token Address of the L2 token. - * @param amount Amount to deposit. - * @param opts Additional options. - * @param opts.recipient Optional address to receive the funds on L2. Defaults to sender. - * @param opts.l2GasLimit Optional gas limit to use for the transaction on L2. - * @param opts.overrides Optional transaction overrides. - * @returns Transaction that can be signed and executed to deposit the tokens. - */ - depositERC20: async ( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - recipient?: AddressLike - l2GasLimit?: NumberLike - overrides?: CallOverrides - }, - isEstimatingGas: boolean = false - ): Promise => { - const bridge = await this.getBridgeForTokenPair(l1Token, l2Token) - // we need extra buffer for gas limit - const getOpts = async () => { - if (isEstimatingGas) { - return opts - } - // if we don't include the users address the estimation will fail from lack of allowance - if (!ethers.Signer.isSigner(this.l1SignerOrProvider)) { - throw new Error('unable to deposit without an l1 signer') - } - const from = (this.l1SignerOrProvider as Signer).getAddress() - const gasEstimation = await this.estimateGas.depositERC20( - l1Token, - l2Token, - amount, - { - ...opts, - overrides: { - ...opts?.overrides, - from: opts?.overrides?.from ?? from, - }, - } - ) - return { - ...opts, - overrides: { - ...opts?.overrides, - gasLimit: gasEstimation.add(gasEstimation.div(2)), - from: opts?.overrides?.from ?? from, - }, - } - } - return bridge.populateTransaction.deposit( - l1Token, - l2Token, - amount, - await getOpts() - ) - }, - - /** - * Generates a transaction for withdrawing some ERC20 tokens back to the L1 chain. - * - * @param l1Token Address of the L1 token. - * @param l2Token Address of the L2 token. - * @param amount Amount to withdraw. - * @param opts Additional options. - * @param opts.recipient Optional address to receive the funds on L1. Defaults to sender. - * @param opts.overrides Optional transaction overrides. - * @returns Transaction that can be signed and executed to withdraw the tokens. - */ - withdrawERC20: async ( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - recipient?: AddressLike - overrides?: Overrides - } - ): Promise => { - const bridge = await this.getBridgeForTokenPair(l1Token, l2Token) - return bridge.populateTransaction.withdraw(l1Token, l2Token, amount, opts) - }, - } - - /** - * Object that holds the functions that estimates the gas required for a given transaction. - * Follows the pattern used by ethers.js. - */ - estimateGas = { - /** - * Estimates gas required to send a cross chain message. - * - * @param message Cross chain message to send. - * @param opts Additional options. - * @param opts.l2GasLimit Optional gas limit to use for the transaction on L2. - * @param opts.overrides Optional transaction overrides. - * @returns Gas estimate for the transaction. - */ - sendMessage: async ( - message: CrossChainMessageRequest, - opts?: { - l2GasLimit?: NumberLike - overrides?: CallOverrides - } - ): Promise => { - const tx = await this.populateTransaction.sendMessage(message, opts) - if (message.direction === MessageDirection.L1_TO_L2) { - return this.l1Provider.estimateGas(tx) - } else { - return this.l2Provider.estimateGas(tx) - } - }, - - /** - * Estimates gas required to resend a cross chain message. Only applies to L1 to L2 messages. - * - * @param message Cross chain message to resend. - * @param messageGasLimit New gas limit to use for the message. - * @param opts Additional options. - * @param opts.overrides Optional transaction overrides. - * @returns Gas estimate for the transaction. - */ - resendMessage: async ( - message: MessageLike, - messageGasLimit: NumberLike, - opts?: { - overrides?: CallOverrides - } - ): Promise => { - return this.l1Provider.estimateGas( - await this.populateTransaction.resendMessage( - message, - messageGasLimit, - opts - ) - ) - }, - - /** - * Estimates gas required to prove a cross chain message. Only applies to L2 to L1 messages. - * - * @param message Message to generate the proving transaction for. - * @param opts Additional options. - * @param opts.overrides Optional transaction overrides. - * @param messageIndex The index of the message, if multiple exist from multicall - * @returns Gas estimate for the transaction. - */ - proveMessage: async ( - message: MessageLike, - opts?: { - overrides?: CallOverrides - }, - messageIndex = 0 - ): Promise => { - return this.l1Provider.estimateGas( - await this.populateTransaction.proveMessage(message, opts, messageIndex) - ) - }, - - /** - * Estimates gas required to finalize a cross chain message. Only applies to L2 to L1 messages. - * - * @param message Message to generate the finalization transaction for. - * @param opts Additional options. - * @param opts.overrides Optional transaction overrides. - * @param messageIndex The index of the message, if multiple exist from multicall - * @returns Gas estimate for the transaction. - */ - finalizeMessage: async ( - message: MessageLike, - opts?: { - overrides?: CallOverrides - }, - messageIndex = 0 - ): Promise => { - return this.l1Provider.estimateGas( - await this.populateTransaction.finalizeMessage( - message, - opts, - messageIndex - ) - ) - }, - - /** - * Estimates gas required to deposit some ETH into the L2 chain. - * - * @param amount Amount of ETH to deposit. - * @param opts Additional options. - * @param opts.recipient Optional address to receive the funds on L2. Defaults to sender. - * @param opts.l2GasLimit Optional gas limit to use for the transaction on L2. - * @param opts.overrides Optional transaction overrides. - * @returns Gas estimate for the transaction. - */ - depositETH: async ( - amount: NumberLike, - opts?: { - recipient?: AddressLike - l2GasLimit?: NumberLike - overrides?: CallOverrides - } - ): Promise => { - return this.l1Provider.estimateGas( - await this.populateTransaction.depositETH(amount, opts, true) - ) - }, - - /** - * Estimates gas required to withdraw some ETH back to the L1 chain. - * - * @param amount Amount of ETH to withdraw. - * @param opts Additional options. - * @param opts.recipient Optional address to receive the funds on L1. Defaults to sender. - * @param opts.overrides Optional transaction overrides. - * @returns Gas estimate for the transaction. - */ - withdrawETH: async ( - amount: NumberLike, - opts?: { - recipient?: AddressLike - overrides?: CallOverrides - } - ): Promise => { - return this.l2Provider.estimateGas( - await this.populateTransaction.withdrawETH(amount, opts) - ) - }, - - /** - * Estimates gas required to approve some tokens to deposit into the L2 chain. - * - * @param l1Token The L1 token address. - * @param l2Token The L2 token address. - * @param amount Amount of the token to approve. - * @param opts Additional options. - * @param opts.overrides Optional transaction overrides. - * @returns Transaction response for the approval transaction. - */ - approveERC20: async ( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - overrides?: CallOverrides - } - ): Promise => { - return this.l1Provider.estimateGas( - await this.populateTransaction.approveERC20( - l1Token, - l2Token, - amount, - opts - ) - ) - }, - - /** - * Estimates gas required to deposit some ERC20 tokens into the L2 chain. - * - * @param l1Token Address of the L1 token. - * @param l2Token Address of the L2 token. - * @param amount Amount to deposit. - * @param opts Additional options. - * @param opts.recipient Optional address to receive the funds on L2. Defaults to sender. - * @param opts.l2GasLimit Optional gas limit to use for the transaction on L2. - * @param opts.overrides Optional transaction overrides. - * @returns Gas estimate for the transaction. - */ - depositERC20: async ( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - recipient?: AddressLike - l2GasLimit?: NumberLike - overrides?: CallOverrides - } - ): Promise => { - return this.l1Provider.estimateGas( - await this.populateTransaction.depositERC20( - l1Token, - l2Token, - amount, - opts, - true - ) - ) - }, - - /** - * Estimates gas required to withdraw some ERC20 tokens back to the L1 chain. - * - * @param l1Token Address of the L1 token. - * @param l2Token Address of the L2 token. - * @param amount Amount to withdraw. - * @param opts Additional options. - * @param opts.recipient Optional address to receive the funds on L1. Defaults to sender. - * @param opts.overrides Optional transaction overrides. - * @returns Gas estimate for the transaction. - */ - withdrawERC20: async ( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - recipient?: AddressLike - overrides?: CallOverrides - } - ): Promise => { - return this.l2Provider.estimateGas( - await this.populateTransaction.withdrawERC20( - l1Token, - l2Token, - amount, - opts - ) - ) - }, - } -} diff --git a/packages/sdk/src/forge-artifacts/DisputeGameFactory.json b/packages/sdk/src/forge-artifacts/DisputeGameFactory.json deleted file mode 100644 index e2db82b17cc3..000000000000 --- a/packages/sdk/src/forge-artifacts/DisputeGameFactory.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"create","inputs":[{"name":"_gameType","type":"uint32","internalType":"GameType"},{"name":"_rootClaim","type":"bytes32","internalType":"Claim"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"proxy_","type":"address","internalType":"contract IDisputeGame"}],"stateMutability":"payable"},{"type":"function","name":"findLatestGames","inputs":[{"name":"_gameType","type":"uint32","internalType":"GameType"},{"name":"_start","type":"uint256","internalType":"uint256"},{"name":"_n","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"games_","type":"tuple[]","internalType":"struct IDisputeGameFactory.GameSearchResult[]","components":[{"name":"index","type":"uint256","internalType":"uint256"},{"name":"metadata","type":"bytes32","internalType":"GameId"},{"name":"timestamp","type":"uint64","internalType":"Timestamp"},{"name":"rootClaim","type":"bytes32","internalType":"Claim"},{"name":"extraData","type":"bytes","internalType":"bytes"}]}],"stateMutability":"view"},{"type":"function","name":"gameAtIndex","inputs":[{"name":"_index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"gameType_","type":"uint32","internalType":"GameType"},{"name":"timestamp_","type":"uint64","internalType":"Timestamp"},{"name":"proxy_","type":"address","internalType":"contract IDisputeGame"}],"stateMutability":"view"},{"type":"function","name":"gameCount","inputs":[],"outputs":[{"name":"gameCount_","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"gameImpls","inputs":[{"name":"","type":"uint32","internalType":"GameType"}],"outputs":[{"name":"","type":"address","internalType":"contract IDisputeGame"}],"stateMutability":"view"},{"type":"function","name":"games","inputs":[{"name":"_gameType","type":"uint32","internalType":"GameType"},{"name":"_rootClaim","type":"bytes32","internalType":"Claim"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"proxy_","type":"address","internalType":"contract IDisputeGame"},{"name":"timestamp_","type":"uint64","internalType":"Timestamp"}],"stateMutability":"view"},{"type":"function","name":"getGameUUID","inputs":[{"name":"_gameType","type":"uint32","internalType":"GameType"},{"name":"_rootClaim","type":"bytes32","internalType":"Claim"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"uuid_","type":"bytes32","internalType":"Hash"}],"stateMutability":"pure"},{"type":"function","name":"initBonds","inputs":[{"name":"","type":"uint32","internalType":"GameType"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_owner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setImplementation","inputs":[{"name":"_gameType","type":"uint32","internalType":"GameType"},{"name":"_impl","type":"address","internalType":"contract IDisputeGame"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setInitBond","inputs":[{"name":"_gameType","type":"uint32","internalType":"GameType"},{"name":"_initBond","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"event","name":"DisputeGameCreated","inputs":[{"name":"disputeProxy","type":"address","indexed":true,"internalType":"address"},{"name":"gameType","type":"uint32","indexed":true,"internalType":"GameType"},{"name":"rootClaim","type":"bytes32","indexed":true,"internalType":"Claim"}],"anonymous":false},{"type":"event","name":"ImplementationSet","inputs":[{"name":"impl","type":"address","indexed":true,"internalType":"address"},{"name":"gameType","type":"uint32","indexed":true,"internalType":"GameType"}],"anonymous":false},{"type":"event","name":"InitBondUpdated","inputs":[{"name":"gameType","type":"uint32","indexed":true,"internalType":"GameType"},{"name":"newBond","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"GameAlreadyExists","inputs":[{"name":"uuid","type":"bytes32","internalType":"Hash"}]},{"type":"error","name":"IncorrectBondAmount","inputs":[]},{"type":"error","name":"NoImplementation","inputs":[{"name":"gameType","type":"uint32","internalType":"GameType"}]}],"bytecode":{"object":"0x60806040523480156200001157600080fd5b506200001e600062000024565b62000292565b600054610100900460ff1615808015620000455750600054600160ff909116105b8062000075575062000062306200016260201b62000cdd1760201c565b15801562000075575060005460ff166001145b620000de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000102576000805461ff0019166101001790555b6200010c62000171565b6200011782620001d9565b80156200015e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620001cd5760405162461bcd60e51b815260206004820152602b60248201526000805160206200185283398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000d5565b620001d76200022b565b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16620002875760405162461bcd60e51b815260206004820152602b60248201526000805160206200185283398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000d5565b620001d733620001d9565b6115b080620002a26000396000f3fe6080604052600436106100e85760003560e01c80636593dc6e1161008a57806396cd97201161005957806396cd972014610313578063bb8aa1fc14610333578063c4d66de814610394578063f2fde38b146103b457600080fd5b80636593dc6e14610293578063715018a6146102c057806382ecf2f6146102d55780638da5cb5b146102e857600080fd5b8063254bd683116100c6578063254bd6831461019c5780634d1975b4146101c957806354fd4d50146101e85780635f0150cb1461023e57600080fd5b806314f6b1a3146100ed5780631b685b9e1461010f5780631e3342401461017c575b600080fd5b3480156100f957600080fd5b5061010d6101083660046110bf565b6103d4565b005b34801561011b57600080fd5b5061015261012a3660046110f6565b60656020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018857600080fd5b5061010d610197366004611111565b61045e565b3480156101a857600080fd5b506101bc6101b736600461113b565b6104aa565b60405161017391906111e8565b3480156101d557600080fd5b506068545b604051908152602001610173565b3480156101f457600080fd5b506102316040518060400160405280600581526020017f302e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161017391906112a5565b34801561024a57600080fd5b5061025e6102593660046112b8565b6106ee565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff909116602083015201610173565b34801561029f57600080fd5b506101da6102ae3660046110f6565b60666020526000908152604090205481565b3480156102cc57600080fd5b5061010d610741565b6101526102e33660046112b8565b610755565b3480156102f457600080fd5b5060335473ffffffffffffffffffffffffffffffffffffffff16610152565b34801561031f57600080fd5b506101da61032e3660046112b8565b6109ef565b34801561033f57600080fd5b5061035361034e36600461133f565b610a28565b6040805163ffffffff909416845267ffffffffffffffff909216602084015273ffffffffffffffffffffffffffffffffffffffff1690820152606001610173565b3480156103a057600080fd5b5061010d6103af366004611358565b610a8a565b3480156103c057600080fd5b5061010d6103cf366004611358565b610c26565b6103dc610cf9565b63ffffffff821660008181526065602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155905190917fff513d80e2c7fa487608f70a618dfbc0cf415699dc69588c747e8c71566c88de91a35050565b610466610cf9565b63ffffffff8216600081815260666020526040808220849055518392917f74d6665c4b26d5596a5aa13d3014e0c06af4d322075a797f87b03cd4c5bc91ca91a35050565b606854606090831015806104bc575081155b6106e7575060408051600583901b8101602001909152825b8381116106e5576000606882815481106104f0576104f0611375565b600091825260209091200154905060e081901c60a082901c67ffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff831663ffffffff891683036106b6576001865101865260008173ffffffffffffffffffffffffffffffffffffffff1663609d33346040518163ffffffff1660e01b8152600401600060405180830381865afa15801561058a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105d091908101906113d3565b905060008273ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561061f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610643919061149e565b90506040518060a001604052808881526020018781526020018567ffffffffffffffff168152602001828152602001838152508860018a5161068591906114b7565b8151811061069557610695611375565b6020026020010181905250888851106106b3575050505050506106e5565b50505b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191506104d49050565b505b9392505050565b60008060006106ff878787876109ef565b60009081526067602052604090205473ffffffffffffffffffffffffffffffffffffffff81169860a09190911c67ffffffffffffffff16975095505050505050565b610749610cf9565b6107536000610d7a565b565b63ffffffff841660009081526065602052604081205473ffffffffffffffffffffffffffffffffffffffff16806107c5576040517f031c6de400000000000000000000000000000000000000000000000000000000815263ffffffff871660048201526024015b60405180910390fd5b63ffffffff86166000908152606660205260409020543414610813576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006108206001436114b7565b40905061088a338783888860405160200161083f9594939291906114f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905273ffffffffffffffffffffffffffffffffffffffff841690610df1565b92508273ffffffffffffffffffffffffffffffffffffffff16638129fc1c346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050505060006108fb888888886109ef565b60008181526067602052604090205490915015610947576040517f014f6fe5000000000000000000000000000000000000000000000000000000008152600481018290526024016107bc565b60004260a01b60e08a901b178517600083815260676020526040808220839055606880546001810182559083527fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c220977530183905551919250899163ffffffff8c169173ffffffffffffffffffffffffffffffffffffffff8916917f5b565efe82411da98814f356d0e7bcb8f0219b8d970307c5afb4a6903a8b2e359190a450505050949350505050565b600084848484604051602001610a089493929190611542565b604051602081830303815290604052805190602001209050949350505050565b6000806000610a7d60688581548110610a4357610a43611375565b906000526020600020015460e081901c9160a082901c67ffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff1690565b9196909550909350915050565b600054610100900460ff1615808015610aaa5750600054600160ff909116105b80610ac45750303b158015610ac4575060005460ff166001145b610b50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107bc565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610bae57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610bb6610dff565b610bbf82610d7a565b8015610c2257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b610c2e610cf9565b73ffffffffffffffffffffffffffffffffffffffff8116610cd1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107bc565b610cda81610d7a565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff163314610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107bc565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006106e760008484610e9e565b600054610100900460ff16610e96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107bc565b610753610fe4565b600060608203516040830351602084035184518060208701018051600283016c5af43d3d93803e606057fd5bf3895289600d8a035278593da1005b363d3d373d3d3d3d610000806062363936013d738160481b1760218a03527f9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff603a8a035272fd6100003d81600a3d39f336602c57343d527f6062820160781b1761ff9e82106059018a03528060f01b8352606c8101604c8a038cf097505086610f6a5763301164256000526004601cfd5b905285527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08501527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa09092019190915292915050565b600054610100900460ff1661107b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107bc565b61075333610d7a565b803563ffffffff8116811461109857600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610cda57600080fd5b600080604083850312156110d257600080fd5b6110db83611084565b915060208301356110eb8161109d565b809150509250929050565b60006020828403121561110857600080fd5b6106e782611084565b6000806040838503121561112457600080fd5b61112d83611084565b946020939093013593505050565b60008060006060848603121561115057600080fd5b61115984611084565b95602085013595506040909401359392505050565b60005b83811015611189578181015183820152602001611171565b83811115611198576000848401525b50505050565b600081518084526111b681602086016020860161116e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015611297578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc001855281518051845287810151888501528681015167ffffffffffffffff16878501526060808201519085015260809081015160a0918501829052906112838186018361119e565b96890196945050509086019060010161120f565b509098975050505050505050565b6020815260006106e7602083018461119e565b600080600080606085870312156112ce57600080fd5b6112d785611084565b935060208501359250604085013567ffffffffffffffff808211156112fb57600080fd5b818701915087601f83011261130f57600080fd5b81358181111561131e57600080fd5b88602082850101111561133057600080fd5b95989497505060200194505050565b60006020828403121561135157600080fd5b5035919050565b60006020828403121561136a57600080fd5b81356106e78161109d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156113e557600080fd5b815167ffffffffffffffff808211156113fd57600080fd5b818401915084601f83011261141157600080fd5b815181811115611423576114236113a4565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611469576114696113a4565b8160405282815287602084870101111561148257600080fd5b61149383602083016020880161116e565b979650505050505050565b6000602082840312156114b057600080fd5b5051919050565b6000828210156114f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008660601b1681528460148201528360348201528183605483013760009101605401908152949350505050565b63ffffffff8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101939250505056fea164736f6c634300080f000a496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069","sourceMap":"989:7456:163:-:0;;;1965:74;;;;;;;;;-1:-1:-1;2010:22:163::1;2029:1;2010:10;:22::i;:::-;989:7456:::0;;2136:124;3111:19:27;3134:13;;;;;;3133:14;;3179:34;;;;-1:-1:-1;3197:12:27;;3212:1;3197:12;;;;:16;3179:34;3178:108;;;;3220:44;3258:4;3220:29;;;;;:44;;:::i;:::-;3219:45;:66;;;;-1:-1:-1;3268:12:27;;;;;:17;3219:66;3157:201;;;;-1:-1:-1;;;3157:201:27;;216:2:357;3157:201:27;;;198:21:357;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:357;;;338:44;399:19;;3157:201:27;;;;;;;;;3368:12;:16;;-1:-1:-1;;3368:16:27;3383:1;3368:16;;;3394:65;;;;3428:13;:20;;-1:-1:-1;;3428:20:27;;;;;3394:65;2201:16:163::1;:14;:16::i;:::-;2227:26;2246:6:::0;2227:18:::1;:26::i;:::-;3483:14:27::0;3479:99;;;3529:5;3513:21;;-1:-1:-1;;3513:21:27;;;3553:14;;-1:-1:-1;581:36:357;;3553:14:27;;569:2:357;554:18;3553:14:27;;;;;;;3479:99;3101:483;2136:124:163;:::o;1186:320:33:-;-1:-1:-1;;;;;1476:19:33;;:23;;;1186:320::o;1003:95:26:-;4910:13:27;;;;;;;4902:69;;;;-1:-1:-1;;;4902:69:27;;830:2:357;4902:69:27;;;812:21:357;869:2;849:18;;;842:30;-1:-1:-1;;;;;;;;;;;888:18:357;;;881:62;-1:-1:-1;;;959:18:357;;;952:41;1010:19;;4902:69:27;628:407:357;4902:69:27;1065:26:26::1;:24;:26::i;:::-;1003:95::o:0;2673:187::-;2765:6;;;-1:-1:-1;;;;;2781:17:26;;;-1:-1:-1;;;;;;2781:17:26;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;1104:111::-;4910:13:27;;;;;;;4902:69;;;;-1:-1:-1;;;4902:69:27;;830:2:357;4902:69:27;;;812:21:357;869:2;849:18;;;842:30;-1:-1:-1;;;;;;;;;;;888:18:357;;;881:62;-1:-1:-1;;;959:18:357;;;952:41;1010:19;;4902:69:27;628:407:357;4902:69:27;1176:32:26::1;929:10:34::0;1176:18:26::1;:32::i;628:407:357:-:0;989:7456:163;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106100e85760003560e01c80636593dc6e1161008a57806396cd97201161005957806396cd972014610313578063bb8aa1fc14610333578063c4d66de814610394578063f2fde38b146103b457600080fd5b80636593dc6e14610293578063715018a6146102c057806382ecf2f6146102d55780638da5cb5b146102e857600080fd5b8063254bd683116100c6578063254bd6831461019c5780634d1975b4146101c957806354fd4d50146101e85780635f0150cb1461023e57600080fd5b806314f6b1a3146100ed5780631b685b9e1461010f5780631e3342401461017c575b600080fd5b3480156100f957600080fd5b5061010d6101083660046110bf565b6103d4565b005b34801561011b57600080fd5b5061015261012a3660046110f6565b60656020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018857600080fd5b5061010d610197366004611111565b61045e565b3480156101a857600080fd5b506101bc6101b736600461113b565b6104aa565b60405161017391906111e8565b3480156101d557600080fd5b506068545b604051908152602001610173565b3480156101f457600080fd5b506102316040518060400160405280600581526020017f302e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161017391906112a5565b34801561024a57600080fd5b5061025e6102593660046112b8565b6106ee565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff909116602083015201610173565b34801561029f57600080fd5b506101da6102ae3660046110f6565b60666020526000908152604090205481565b3480156102cc57600080fd5b5061010d610741565b6101526102e33660046112b8565b610755565b3480156102f457600080fd5b5060335473ffffffffffffffffffffffffffffffffffffffff16610152565b34801561031f57600080fd5b506101da61032e3660046112b8565b6109ef565b34801561033f57600080fd5b5061035361034e36600461133f565b610a28565b6040805163ffffffff909416845267ffffffffffffffff909216602084015273ffffffffffffffffffffffffffffffffffffffff1690820152606001610173565b3480156103a057600080fd5b5061010d6103af366004611358565b610a8a565b3480156103c057600080fd5b5061010d6103cf366004611358565b610c26565b6103dc610cf9565b63ffffffff821660008181526065602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155905190917fff513d80e2c7fa487608f70a618dfbc0cf415699dc69588c747e8c71566c88de91a35050565b610466610cf9565b63ffffffff8216600081815260666020526040808220849055518392917f74d6665c4b26d5596a5aa13d3014e0c06af4d322075a797f87b03cd4c5bc91ca91a35050565b606854606090831015806104bc575081155b6106e7575060408051600583901b8101602001909152825b8381116106e5576000606882815481106104f0576104f0611375565b600091825260209091200154905060e081901c60a082901c67ffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff831663ffffffff891683036106b6576001865101865260008173ffffffffffffffffffffffffffffffffffffffff1663609d33346040518163ffffffff1660e01b8152600401600060405180830381865afa15801561058a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105d091908101906113d3565b905060008273ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561061f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610643919061149e565b90506040518060a001604052808881526020018781526020018567ffffffffffffffff168152602001828152602001838152508860018a5161068591906114b7565b8151811061069557610695611375565b6020026020010181905250888851106106b3575050505050506106e5565b50505b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191506104d49050565b505b9392505050565b60008060006106ff878787876109ef565b60009081526067602052604090205473ffffffffffffffffffffffffffffffffffffffff81169860a09190911c67ffffffffffffffff16975095505050505050565b610749610cf9565b6107536000610d7a565b565b63ffffffff841660009081526065602052604081205473ffffffffffffffffffffffffffffffffffffffff16806107c5576040517f031c6de400000000000000000000000000000000000000000000000000000000815263ffffffff871660048201526024015b60405180910390fd5b63ffffffff86166000908152606660205260409020543414610813576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006108206001436114b7565b40905061088a338783888860405160200161083f9594939291906114f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905273ffffffffffffffffffffffffffffffffffffffff841690610df1565b92508273ffffffffffffffffffffffffffffffffffffffff16638129fc1c346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050505060006108fb888888886109ef565b60008181526067602052604090205490915015610947576040517f014f6fe5000000000000000000000000000000000000000000000000000000008152600481018290526024016107bc565b60004260a01b60e08a901b178517600083815260676020526040808220839055606880546001810182559083527fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c220977530183905551919250899163ffffffff8c169173ffffffffffffffffffffffffffffffffffffffff8916917f5b565efe82411da98814f356d0e7bcb8f0219b8d970307c5afb4a6903a8b2e359190a450505050949350505050565b600084848484604051602001610a089493929190611542565b604051602081830303815290604052805190602001209050949350505050565b6000806000610a7d60688581548110610a4357610a43611375565b906000526020600020015460e081901c9160a082901c67ffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff1690565b9196909550909350915050565b600054610100900460ff1615808015610aaa5750600054600160ff909116105b80610ac45750303b158015610ac4575060005460ff166001145b610b50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107bc565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610bae57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610bb6610dff565b610bbf82610d7a565b8015610c2257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b610c2e610cf9565b73ffffffffffffffffffffffffffffffffffffffff8116610cd1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107bc565b610cda81610d7a565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff163314610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107bc565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006106e760008484610e9e565b600054610100900460ff16610e96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107bc565b610753610fe4565b600060608203516040830351602084035184518060208701018051600283016c5af43d3d93803e606057fd5bf3895289600d8a035278593da1005b363d3d373d3d3d3d610000806062363936013d738160481b1760218a03527f9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff603a8a035272fd6100003d81600a3d39f336602c57343d527f6062820160781b1761ff9e82106059018a03528060f01b8352606c8101604c8a038cf097505086610f6a5763301164256000526004601cfd5b905285527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08501527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa09092019190915292915050565b600054610100900460ff1661107b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107bc565b61075333610d7a565b803563ffffffff8116811461109857600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610cda57600080fd5b600080604083850312156110d257600080fd5b6110db83611084565b915060208301356110eb8161109d565b809150509250929050565b60006020828403121561110857600080fd5b6106e782611084565b6000806040838503121561112457600080fd5b61112d83611084565b946020939093013593505050565b60008060006060848603121561115057600080fd5b61115984611084565b95602085013595506040909401359392505050565b60005b83811015611189578181015183820152602001611171565b83811115611198576000848401525b50505050565b600081518084526111b681602086016020860161116e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015611297578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc001855281518051845287810151888501528681015167ffffffffffffffff16878501526060808201519085015260809081015160a0918501829052906112838186018361119e565b96890196945050509086019060010161120f565b509098975050505050505050565b6020815260006106e7602083018461119e565b600080600080606085870312156112ce57600080fd5b6112d785611084565b935060208501359250604085013567ffffffffffffffff808211156112fb57600080fd5b818701915087601f83011261130f57600080fd5b81358181111561131e57600080fd5b88602082850101111561133057600080fd5b95989497505060200194505050565b60006020828403121561135157600080fd5b5035919050565b60006020828403121561136a57600080fd5b81356106e78161109d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156113e557600080fd5b815167ffffffffffffffff808211156113fd57600080fd5b818401915084601f83011261141157600080fd5b815181811115611423576114236113a4565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611469576114696113a4565b8160405282815287602084870101111561148257600080fd5b61149383602083016020880161116e565b979650505050505050565b6000602082840312156114b057600080fd5b5051919050565b6000828210156114f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008660601b1681528460148201528360348201528183605483013760009101605401908152949350505050565b63ffffffff8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101939250505056fea164736f6c634300080f000a","sourceMap":"989:7456:163:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8027:190;;;;;;;;;;-1:-1:-1;8027:190:163;;;;;:::i;:::-;;:::i;:::-;;1338:50;;;;;;;;;;-1:-1:-1;1338:50:163;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1237:42:357;1225:55;;;1207:74;;1195:2;1180:18;1338:50:163;;;;;;;;8263:180;;;;;;;;;;-1:-1:-1;8263:180:163;;;;;:::i;:::-;;:::i;6052:1929::-;;;;;;;;;;-1:-1:-1;6052:1929:163;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2306:117::-;;;;;;;;;;-1:-1:-1;2393:16:163;:23;2306:117;;;4100:25:357;;;4088:2;4073:18;2306:117:163;3954:177:357;1251:40:163;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2469:342::-;;;;;;;;;;-1:-1:-1;2469:342:163;;;;;:::i;:::-;;:::i;:::-;;;;5437:42:357;5425:55;;;5407:74;;5529:18;5517:31;;;5512:2;5497:18;;5490:59;5380:18;2469:342:163;5179:376:357;1435:45:163;;;;;;;;;;-1:-1:-1;1435:45:163;;;;;:::i;:::-;;;;;;;;;;;;;;2071:101:26;;;;;;;;;;;;;:::i;3138:2553:163:-;;;;;;:::i;:::-;;:::i;1441:85:26:-;;;;;;;;;;-1:-1:-1;1513:6:26;;;;1441:85;;5737:269:163;;;;;;;;;;-1:-1:-1;5737:269:163;;;;;:::i;:::-;;:::i;2857:235::-;;;;;;;;;;-1:-1:-1;2857:235:163;;;;;:::i;:::-;;:::i;:::-;;;;6501:10:357;6489:23;;;6471:42;;6561:18;6549:31;;;6544:2;6529:18;;6522:59;6629:42;6617:55;6597:18;;;6590:83;6459:2;6444:18;2857:235:163;6185:494:357;2136:124:163;;;;;;;;;;-1:-1:-1;2136:124:163;;;;;:::i;:::-;;:::i;2321:198:26:-;;;;;;;;;;-1:-1:-1;2321:198:26;;;;;:::i;:::-;;:::i;8027:190:163:-;1334:13:26;:11;:13::i;:::-;8123:20:163::1;::::0;::::1;;::::0;;;:9:::1;:20;::::0;;;;;:28;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;8166:44;;8123:28;;8166:44:::1;::::0;::::1;8027:190:::0;;:::o;8263:180::-;1334:13:26;:11;:13::i;:::-;8352:20:163::1;::::0;::::1;;::::0;;;:9:::1;:20;::::0;;;;;:32;;;8399:37;8375:9;;8352:20;8399:37:::1;::::0;::::1;8263:180:::0;;:::o;6052:1929::-;6384:16;:23;6202:32;;6374:33;;;;:44;;-1:-1:-1;6411:7:163;;6374:44;6420:13;6370:63;-1:-1:-1;6690:4:163;6684:11;;6747:4;6743:13;;;6721:37;;6737:4;6721:37;6708:51;;;6891:6;6874:1101;6914:6;6909:1;:11;6874:1101;;6937:9;6949:16;6966:1;6949:19;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;1277:3:174;1273:17;;;1325:3;1321:17;;;1340:18;1317:42;1399;1386:56;;7093:13:163;;;7075:33;;7071:834;;7433:4;7424:6;7418:13;7414:24;7406:6;7399:40;7475:22;7500:5;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7475:42;;7535:15;7553:5;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7535:35;;7616:226;;;;;;;;7662:1;7616:226;;;;7695:2;7616:226;;;;7730:9;7616:226;;;;;;7772:9;7616:226;;;;7814:9;7616:226;;;7588:6;7611:1;7595:6;:13;:17;;;;:::i;:::-;7588:25;;;;;;;;:::i;:::-;;;;;;:254;;;;7881:2;7864:6;:13;:19;7860:30;;7885:5;;;;;;;;7860:30;7110:795;;7071:834;-1:-1:-1;;7947:3:163;;;;;-1:-1:-1;6874:1101:163;;-1:-1:-1;6874:1101:163;;;6052:1929;;;;;;:::o;2469:342::-;2626:19;2647:20;2683:9;2695:46;2707:9;2718:10;2730;;2695:11;:46::i;:::-;2776:19;;;;:13;:19;;;;;;1399:42:174;1386:56;;;1325:3;1321:17;;;;1340:18;1317:42;;-1:-1:-1;2751:53:163;-1:-1:-1;;;;;;2469:342:163:o;2071:101:26:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;:::-;2071:101::o:0;3138:2553:163:-;3424:20;;;3299:19;3424:20;;;:9;:20;;;;;;;;;3539:67;;3579:27;;;;;8982:10:357;8970:23;;3579:27:163;;;8952:42:357;8925:18;;3579:27:163;;;;;;;;3539:67;3701:20;;;;;;;:9;:20;;;;;;3688:9;:33;3684:67;;3730:21;;;;;;;;;;;;;;3684:67;3807:18;3838:16;3853:1;3838:12;:16;:::i;:::-;3828:27;3807:48;;4890:85;4927:10;4939;4951;4963;;4910:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;4890:19;;;;;:85::i;:::-;4868:108;;4986:6;:17;;;5012:9;4986:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5099:9;5111:46;5123:9;5134:10;5146;;5111:11;:46::i;:::-;5290:1;5258:19;;;:13;:19;;;;;;5099:58;;-1:-1:-1;5244:48:163;5240:84;;5301:23;;;;;;;;4100:25:357;;;4073:18;;5301:23:163;3954:177:357;5240:84:163;5364:9;5424:15;767:3:174;763:20;746:3;742:19;;;739:45;736:61;;5552:19:163;;;;:13;:19;;;;;;:24;;;5586:16;:25;;;;;;;;;;;;;;;5626:58;5364:86;;-1:-1:-1;5673:10:163;;5626:58;;;;;;;;;;5552:19;5626:58;3324:2367;;;;3138:2553;;;;;;:::o;5737:269::-;5898:10;5963:9;5974:10;5986;;5952:45;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5942:56;;;;;;5924:75;;5737:269;;;;;;:::o;2857:235::-;2941:18;2961:20;2983:19;3052:33;:16;3069:6;3052:24;;;;;;;;:::i;:::-;;;;;;;;;1277:3:174;1273:17;;;;1325:3;1321:17;;;1340:18;1317:42;;1399;1386:56;;1077:381;3052:33:163;3018:67;;;;-1:-1:-1;3018:67:163;;-1:-1:-1;2857:235:163;-1:-1:-1;;2857:235:163:o;2136:124::-;3111:19:27;3134:13;;;;;;3133:14;;3179:34;;;;-1:-1:-1;3197:12:27;;3212:1;3197:12;;;;:16;3179:34;3178:108;;;-1:-1:-1;3258:4:27;1476:19:33;:23;;;3219:66:27;;-1:-1:-1;3268:12:27;;;;;:17;3219:66;3157:201;;;;;;;10469:2:357;3157:201:27;;;10451:21:357;10508:2;10488:18;;;10481:30;10547:34;10527:18;;;10520:62;10618:16;10598:18;;;10591:44;10652:19;;3157:201:27;10267:410:357;3157:201:27;3368:12;:16;;;;3383:1;3368:16;;;3394:65;;;;3428:13;:20;;;;;;;;3394:65;2201:16:163::1;:14;:16::i;:::-;2227:26;2246:6;2227:18;:26::i;:::-;3483:14:27::0;3479:99;;;3529:5;3513:21;;;;;;3553:14;;-1:-1:-1;10834:36:357;;3553:14:27;;10822:2:357;10807:18;3553:14:27;;;;;;;3479:99;3101:483;2136:124:163;:::o;2321:198:26:-;1334:13;:11;:13::i;:::-;2409:22:::1;::::0;::::1;2401:73;;;::::0;::::1;::::0;;11083:2:357;2401:73:26::1;::::0;::::1;11065:21:357::0;11122:2;11102:18;;;11095:30;11161:34;11141:18;;;11134:62;11232:8;11212:18;;;11205:36;11258:19;;2401:73:26::1;10881:402:357::0;2401:73:26::1;2484:28;2503:8;2484:18;:28::i;:::-;2321:198:::0;:::o;1186:320:33:-;1476:19;;;:23;;;1186:320::o;1599:130:26:-;1513:6;;1662:23;1513:6;929:10:34;1662:23:26;1654:68;;;;;;;11490:2:357;1654:68:26;;;11472:21:357;;;11509:18;;;11502:30;11568:34;11548:18;;;11541:62;11620:18;;1654:68:26;11288:356:357;2673:187:26;2765:6;;;;2781:17;;;;;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;19667:152:99:-;19743:16;19782:30;19788:1;19791:14;19807:4;19782:5;:30::i;1003:95:26:-;4910:13:27;;;;;;;4902:69;;;;;;;11851:2:357;4902:69:27;;;11833:21:357;11890:2;11870:18;;;11863:30;11929:34;11909:18;;;11902:62;12000:13;11980:18;;;11973:41;12031:19;;4902:69:27;11649:407:357;4902:69:27;1065:26:26::1;:24;:26::i;19918:11162:99:-:0;20025:16;20200:4;20194;20190:15;20184:22;20251:4;20245;20241:15;20235:22;20302:4;20296;20292:15;20286:22;20345:4;20339:11;20399:10;20392:4;20386;20382:15;20378:32;20444:7;20438:14;20582:1;20570:10;20566:18;29569:28;29563:4;29556:42;29674:14;29667:4;29661;29657:15;29650:39;29877:52;29863:11;29857:4;29853:22;29850:80;29827:4;29821;29817:15;29793:151;30048:66;30041:4;30035;30031:15;30007:121;30449:40;30441:4;30428:11;30424:22;30418:4;30414:33;30411:79;30384:6;30371:11;30368:23;30362:4;30358:34;30352:4;30348:45;30141:363;30543:11;30537:4;30533:22;30524:7;30517:39;30630:4;30617:11;30613:22;30606:4;30600;30596:15;30589:5;30582:54;30570:66;;;30659:8;30649:136;;30700:10;30694:4;30687:24;30766:4;30760;30753:18;30649:136;30865:24;;30902;;30946:15;;;30939:33;30992:15;;;30985:33;31038:15;;;;31031:33;;;;19918:11162;;-1:-1:-1;;19918:11162:99:o;1104:111:26:-;4910:13:27;;;;;;;4902:69;;;;;;;11851:2:357;4902:69:27;;;11833:21:357;11890:2;11870:18;;;11863:30;11929:34;11909:18;;;11902:62;12000:13;11980:18;;;11973:41;12031:19;;4902:69:27;11649:407:357;4902:69:27;1176:32:26::1;929:10:34::0;1176:18:26::1;:32::i;14:186:357:-:0;104:20;;164:10;153:22;;143:33;;133:61;;190:1;187;180:12;133:61;14:186;;;:::o;205:168::-;305:42;298:5;294:54;287:5;284:65;274:93;;363:1;360;353:12;378:411;500:6;508;561:2;549:9;540:7;536:23;532:32;529:52;;;577:1;574;567:12;529:52;600:51;641:9;600:51;:::i;:::-;590:61;;701:2;690:9;686:18;673:32;714:45;753:5;714:45;:::i;:::-;778:5;768:15;;;378:411;;;;;:::o;794:239::-;884:6;937:2;925:9;916:7;912:23;908:32;905:52;;;953:1;950;943:12;905:52;976:51;1017:9;976:51;:::i;1292:307::-;1391:6;1399;1452:2;1440:9;1431:7;1427:23;1423:32;1420:52;;;1468:1;1465;1458:12;1420:52;1491:51;1532:9;1491:51;:::i;:::-;1481:61;1589:2;1574:18;;;;1561:32;;-1:-1:-1;;;1292:307:357:o;1604:375::-;1712:6;1720;1728;1781:2;1769:9;1760:7;1756:23;1752:32;1749:52;;;1797:1;1794;1787:12;1749:52;1820:51;1861:9;1820:51;:::i;:::-;1810:61;1918:2;1903:18;;1890:32;;-1:-1:-1;1969:2:357;1954:18;;;1941:32;;1604:375;-1:-1:-1;;;1604:375:357:o;1984:258::-;2056:1;2066:113;2080:6;2077:1;2074:13;2066:113;;;2156:11;;;2150:18;2137:11;;;2130:39;2102:2;2095:10;2066:113;;;2197:6;2194:1;2191:13;2188:48;;;2232:1;2223:6;2218:3;2214:16;2207:27;2188:48;;1984:258;;;:::o;2247:316::-;2288:3;2326:5;2320:12;2353:6;2348:3;2341:19;2369:63;2425:6;2418:4;2413:3;2409:14;2402:4;2395:5;2391:16;2369:63;:::i;:::-;2477:2;2465:15;2482:66;2461:88;2452:98;;;;2552:4;2448:109;;2247:316;-1:-1:-1;;2247:316:357:o;2568:1381::-;2782:4;2811:2;2851;2840:9;2836:18;2881:2;2870:9;2863:21;2904:6;2939;2933:13;2970:6;2962;2955:22;2996:2;2986:12;;3029:2;3018:9;3014:18;3007:25;;3091:2;3081:6;3078:1;3074:14;3063:9;3059:30;3055:39;3129:2;3121:6;3117:15;3150:1;3160:760;3174:6;3171:1;3168:13;3160:760;;;3239:22;;;3263:66;3235:95;3223:108;;3354:13;;3422:9;;3407:25;;3475:11;;;3469:18;3452:15;;;3445:43;3535:11;;;3529:18;3549;3525:43;3508:15;;;3501:68;3592:4;3639:11;;;3633:18;3616:15;;;3609:43;3675:4;3718:11;;;3712:18;3390:4;3750:15;;;3743:27;;;3712:18;3793:47;3824:15;;;3712:18;3793:47;:::i;:::-;3898:12;;;;3783:57;-1:-1:-1;;;3863:15:357;;;;3196:1;3189:9;3160:760;;;-1:-1:-1;3937:6:357;;2568:1381;-1:-1:-1;;;;;;;;2568:1381:357:o;4136:219::-;4285:2;4274:9;4267:21;4248:4;4305:44;4345:2;4334:9;4330:18;4322:6;4305:44;:::i;4360:814::-;4507:6;4515;4523;4531;4584:2;4572:9;4563:7;4559:23;4555:32;4552:52;;;4600:1;4597;4590:12;4552:52;4623:51;4664:9;4623:51;:::i;:::-;4613:61;;4721:2;4710:9;4706:18;4693:32;4683:42;;4776:2;4765:9;4761:18;4748:32;4799:18;4840:2;4832:6;4829:14;4826:34;;;4856:1;4853;4846:12;4826:34;4894:6;4883:9;4879:22;4869:32;;4939:7;4932:4;4928:2;4924:13;4920:27;4910:55;;4961:1;4958;4951:12;4910:55;5001:2;4988:16;5027:2;5019:6;5016:14;5013:34;;;5043:1;5040;5033:12;5013:34;5088:7;5083:2;5074:6;5070:2;5066:15;5062:24;5059:37;5056:57;;;5109:1;5106;5099:12;5056:57;4360:814;;;;-1:-1:-1;;5140:2:357;5132:11;;-1:-1:-1;;;4360:814:357:o;6000:180::-;6059:6;6112:2;6100:9;6091:7;6087:23;6083:32;6080:52;;;6128:1;6125;6118:12;6080:52;-1:-1:-1;6151:23:357;;6000:180;-1:-1:-1;6000:180:357:o;6684:261::-;6743:6;6796:2;6784:9;6775:7;6771:23;6767:32;6764:52;;;6812:1;6809;6802:12;6764:52;6851:9;6838:23;6870:45;6909:5;6870:45;:::i;6950:184::-;7002:77;6999:1;6992:88;7099:4;7096:1;7089:15;7123:4;7120:1;7113:15;7139:184;7191:77;7188:1;7181:88;7288:4;7285:1;7278:15;7312:4;7309:1;7302:15;7328:942;7407:6;7460:2;7448:9;7439:7;7435:23;7431:32;7428:52;;;7476:1;7473;7466:12;7428:52;7509:9;7503:16;7538:18;7579:2;7571:6;7568:14;7565:34;;;7595:1;7592;7585:12;7565:34;7633:6;7622:9;7618:22;7608:32;;7678:7;7671:4;7667:2;7663:13;7659:27;7649:55;;7700:1;7697;7690:12;7649:55;7729:2;7723:9;7751:2;7747;7744:10;7741:36;;;7757:18;;:::i;:::-;7891:2;7885:9;7953:4;7945:13;;7796:66;7941:22;;;7965:2;7937:31;7933:40;7921:53;;;7989:18;;;8009:22;;;7986:46;7983:72;;;8035:18;;:::i;:::-;8075:10;8071:2;8064:22;8110:2;8102:6;8095:18;8150:7;8145:2;8140;8136;8132:11;8128:20;8125:33;8122:53;;;8171:1;8168;8161:12;8122:53;8184:55;8236:2;8231;8223:6;8219:15;8214:2;8210;8206:11;8184:55;:::i;:::-;8258:6;7328:942;-1:-1:-1;;;;;;;7328:942:357:o;8275:212::-;8373:6;8426:2;8414:9;8405:7;8401:23;8397:32;8394:52;;;8442:1;8439;8432:12;8394:52;-1:-1:-1;8465:16:357;;8275:212;-1:-1:-1;8275:212:357:o;8492:279::-;8532:4;8560:1;8557;8554:8;8551:188;;;8595:77;8592:1;8585:88;8696:4;8693:1;8686:15;8724:4;8721:1;8714:15;8551:188;-1:-1:-1;8756:9:357;;8492:279::o;9005:585::-;9307:66;9298:6;9294:2;9290:15;9286:88;9281:3;9274:101;9405:6;9400:2;9395:3;9391:12;9384:28;9442:6;9437:2;9432:3;9428:12;9421:28;9493:6;9485;9480:2;9475:3;9471:12;9458:42;9256:3;9523:16;;9541:2;9519:25;9553:13;;;9519:25;9005:585;-1:-1:-1;;;;9005:585:357:o;9595:667::-;9878:10;9870:6;9866:23;9855:9;9848:42;9926:6;9921:2;9910:9;9906:18;9899:34;9969:2;9964;9953:9;9949:18;9942:30;10008:6;10003:2;9992:9;9988:18;9981:34;10066:6;10058;10052:3;10041:9;10037:19;10024:49;10123:1;10093:22;;;10117:3;10089:32;;;10082:43;;;;10177:2;10165:15;;;10182:66;10161:88;10146:104;10142:114;;9595:667;-1:-1:-1;;;9595:667:357:o","linkReferences":{}},"methodIdentifiers":{"create(uint32,bytes32,bytes)":"82ecf2f6","findLatestGames(uint32,uint256,uint256)":"254bd683","gameAtIndex(uint256)":"bb8aa1fc","gameCount()":"4d1975b4","gameImpls(uint32)":"1b685b9e","games(uint32,bytes32,bytes)":"5f0150cb","getGameUUID(uint32,bytes32,bytes)":"96cd9720","initBonds(uint32)":"6593dc6e","initialize(address)":"c4d66de8","owner()":"8da5cb5b","renounceOwnership()":"715018a6","setImplementation(uint32,address)":"14f6b1a3","setInitBond(uint32,uint256)":"1e334240","transferOwnership(address)":"f2fde38b","version()":"54fd4d50"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"Hash\",\"name\":\"uuid\",\"type\":\"bytes32\"}],\"name\":\"GameAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectBondAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType\",\"type\":\"uint32\"}],\"name\":\"NoImplementation\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"disputeProxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"GameType\",\"name\":\"gameType\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"Claim\",\"name\":\"rootClaim\",\"type\":\"bytes32\"}],\"name\":\"DisputeGameCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"GameType\",\"name\":\"gameType\",\"type\":\"uint32\"}],\"name\":\"ImplementationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"GameType\",\"name\":\"gameType\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newBond\",\"type\":\"uint256\"}],\"name\":\"InitBondUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"_gameType\",\"type\":\"uint32\"},{\"internalType\":\"Claim\",\"name\":\"_rootClaim\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"contract IDisputeGame\",\"name\":\"proxy_\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"_gameType\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"_start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_n\",\"type\":\"uint256\"}],\"name\":\"findLatestGames\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"GameId\",\"name\":\"metadata\",\"type\":\"bytes32\"},{\"internalType\":\"Timestamp\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"Claim\",\"name\":\"rootClaim\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct IDisputeGameFactory.GameSearchResult[]\",\"name\":\"games_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"gameAtIndex\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint32\"},{\"internalType\":\"Timestamp\",\"name\":\"timestamp_\",\"type\":\"uint64\"},{\"internalType\":\"contract IDisputeGame\",\"name\":\"proxy_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"gameCount_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"gameImpls\",\"outputs\":[{\"internalType\":\"contract IDisputeGame\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"_gameType\",\"type\":\"uint32\"},{\"internalType\":\"Claim\",\"name\":\"_rootClaim\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"games\",\"outputs\":[{\"internalType\":\"contract IDisputeGame\",\"name\":\"proxy_\",\"type\":\"address\"},{\"internalType\":\"Timestamp\",\"name\":\"timestamp_\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"_gameType\",\"type\":\"uint32\"},{\"internalType\":\"Claim\",\"name\":\"_rootClaim\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"getGameUUID\",\"outputs\":[{\"internalType\":\"Hash\",\"name\":\"uuid_\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"initBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"_gameType\",\"type\":\"uint32\"},{\"internalType\":\"contract IDisputeGame\",\"name\":\"_impl\",\"type\":\"address\"}],\"name\":\"setImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"_gameType\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"_initBond\",\"type\":\"uint256\"}],\"name\":\"setInitBond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"GameAlreadyExists(bytes32)\":[{\"params\":{\"uuid\":\"The UUID of the dispute game that already exists.\"}}],\"NoImplementation(uint32)\":[{\"params\":{\"gameType\":\"The unsupported game type.\"}}]},\"kind\":\"dev\",\"methods\":{\"create(uint32,bytes32,bytes)\":{\"params\":{\"_extraData\":\"Any extra data that should be provided to the created dispute game.\",\"_gameType\":\"The type of the DisputeGame - used to decide the proxy implementation.\",\"_rootClaim\":\"The root claim of the DisputeGame.\"},\"returns\":{\"proxy_\":\"The address of the created DisputeGame proxy.\"}},\"findLatestGames(uint32,uint256,uint256)\":{\"params\":{\"_gameType\":\"The type of game to find.\",\"_n\":\"The number of games to find.\",\"_start\":\"The index to start the reverse search from.\"}},\"gameAtIndex(uint256)\":{\"params\":{\"_index\":\"The index of the dispute game.\"},\"returns\":{\"gameType_\":\"The type of the DisputeGame - used to decide the proxy implementation.\",\"proxy_\":\"The clone of the `DisputeGame` created with the given parameters. Returns `address(0)` if nonexistent.\",\"timestamp_\":\"The timestamp of the creation of the dispute game.\"}},\"gameCount()\":{\"returns\":{\"gameCount_\":\"The total number of dispute games created by this factory.\"}},\"games(uint32,bytes32,bytes)\":{\"details\":\"`++` equates to concatenation.\",\"params\":{\"_extraData\":\"Any extra data that should be provided to the created dispute game.\",\"_gameType\":\"The type of the DisputeGame - used to decide the proxy implementation\",\"_rootClaim\":\"The root claim of the DisputeGame.\"},\"returns\":{\"proxy_\":\"The clone of the `DisputeGame` created with the given parameters. Returns `address(0)` if nonexistent.\",\"timestamp_\":\"The timestamp of the creation of the dispute game.\"}},\"getGameUUID(uint32,bytes32,bytes)\":{\"details\":\"Hashes the concatenation of `gameType . rootClaim . extraData` without expanding memory.\",\"params\":{\"_extraData\":\"Any extra data that should be provided to the created dispute game.\",\"_gameType\":\"The type of the DisputeGame.\",\"_rootClaim\":\"The root claim of the DisputeGame.\"},\"returns\":{\"uuid_\":\"The unique identifier for the given dispute game parameters.\"}},\"initialize(address)\":{\"params\":{\"_owner\":\"The owner of the contract.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setImplementation(uint32,address)\":{\"details\":\"May only be called by the `owner`.\",\"params\":{\"_gameType\":\"The type of the DisputeGame.\",\"_impl\":\"The implementation contract for the given `GameType`.\"}},\"setInitBond(uint32,uint256)\":{\"details\":\"May only be called by the `owner`.\",\"params\":{\"_gameType\":\"The type of the DisputeGame.\",\"_initBond\":\"The bond (in wei) for initializing a game type.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"stateVariables\":{\"gameImpls\":{\"params\":{\"_gameType\":\"The type of the dispute game.\"},\"return\":\"The address of the implementation of the game type. Will be cloned on creation of a new dispute game with the given `gameType`.\",\"returns\":{\"_0\":\"The address of the implementation of the game type. Will be cloned on creation of a new dispute game with the given `gameType`.\"}},\"initBonds\":{\"params\":{\"_gameType\":\"The type of the dispute game.\"},\"return\":\"The required bond for initializing a dispute game of the given type.\",\"returns\":{\"_0\":\"The required bond for initializing a dispute game of the given type.\"}},\"version\":{\"custom:semver\":\"0.6.0\"}},\"title\":\"DisputeGameFactory\",\"version\":1},\"userdoc\":{\"errors\":{\"GameAlreadyExists(bytes32)\":[{\"notice\":\"Thrown when a dispute game that already exists is attempted to be created.\"}],\"IncorrectBondAmount()\":[{\"notice\":\"Thrown when a supplied bond is not equal to the required bond amount to cover the cost of the interaction.\"}],\"NoImplementation(uint32)\":[{\"notice\":\"Thrown when a dispute game is attempted to be created with an unsupported game type.\"}]},\"events\":{\"DisputeGameCreated(address,uint32,bytes32)\":{\"notice\":\"Emitted when a new dispute game is created\"},\"ImplementationSet(address,uint32)\":{\"notice\":\"Emitted when a new game implementation added to the factory\"},\"InitBondUpdated(uint32,uint256)\":{\"notice\":\"Emitted when a game type's initialization bond is updated\"}},\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Constructs a new DisputeGameFactory contract.\"},\"create(uint32,bytes32,bytes)\":{\"notice\":\"Creates a new DisputeGame proxy contract.\"},\"findLatestGames(uint32,uint256,uint256)\":{\"notice\":\"Finds the `_n` most recent `GameId`'s of type `_gameType` starting at `_start`. If there are less than `_n` games of type `_gameType` starting at `_start`, then the returned array will be shorter than `_n`.\"},\"gameAtIndex(uint256)\":{\"notice\":\"`gameAtIndex` returns the dispute game contract address and its creation timestamp at the given index. Each created dispute game increments the underlying index.\"},\"gameCount()\":{\"notice\":\"The total number of dispute games created by this factory.\"},\"gameImpls(uint32)\":{\"notice\":\"`gameImpls` is a mapping that maps `GameType`s to their respective `IDisputeGame` implementations.\"},\"games(uint32,bytes32,bytes)\":{\"notice\":\"`games` queries an internal mapping that maps the hash of `gameType ++ rootClaim ++ extraData` to the deployed `DisputeGame` clone.\"},\"getGameUUID(uint32,bytes32,bytes)\":{\"notice\":\"Returns a unique identifier for the given dispute game parameters.\"},\"initBonds(uint32)\":{\"notice\":\"Returns the required bonds for initializing a dispute game of the given type.\"},\"initialize(address)\":{\"notice\":\"Initializes the contract.\"},\"setImplementation(uint32,address)\":{\"notice\":\"Sets the implementation contract for a specific `GameType`.\"},\"setInitBond(uint32,uint256)\":{\"notice\":\"Sets the bond (in wei) for initializing a game type.\"},\"version()\":{\"notice\":\"Semantic version.\"}},\"notice\":\"A factory contract for creating `IDisputeGame` contracts. All created dispute games are stored in both a mapping and an append only array. The timestamp of the creation time of the dispute game is packed tightly into the storage slot with the address of the dispute game to make offchain discoverability of playable dispute games easier.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/dispute/DisputeGameFactory.sol\":\"DisputeGameFactory\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/solady/src/utils/LibClone.sol\":{\"keccak256\":\"0xfd4b40a4584e736d9d0b045fbc748023804c83819f5e018635a9f447834774a4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://202fc57397118355d9d573c28d36ff45892e632a12b143f4bc5e7266bfb7737e\",\"dweb:/ipfs/QmZYD6Va3nNUC4B9NHZcyvFmK59i3WnEPPpsi8N355GivN\"]},\"src/dispute/DisputeGameFactory.sol\":{\"keccak256\":\"0xc7c6b0c2a051d4a14b3833243fa2e93e5e320bb106ef3979ce77098fb9d6629f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd5cbabb1b0b41f9faf3d2329e519936ea43a1e7da1df6a9be90d2513603b09f\",\"dweb:/ipfs/QmQM5FpgogJQnbmJjdQdoxxMzczx5PBiCNbiRUQiJqHyhM\"]},\"src/dispute/interfaces/IDisputeGame.sol\":{\"keccak256\":\"0xe2611453d5cc05f8aa30dc0e5e15ee5ae29fd3eb55a2c034424250baebf12f9b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://274e00fbcea3b8455bbaa042130bf1f7a5b2b769f28ad57afbf9fabfd74a757a\",\"dweb:/ipfs/QmRKQTfYdMjQYVbuZhdXts1d752eUq8RwrjqqwV5XRYLi6\"]},\"src/dispute/interfaces/IDisputeGameFactory.sol\":{\"keccak256\":\"0x204d89d38d4dc0db40fbf898d95e639ac5608810a5a5506a3d80d71177648bda\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://71e5c0ff04f409f30ca4f8ebfae1592c6ca495e315b059f969d11812e6e84dbd\",\"dweb:/ipfs/QmaNKkhkJv7qHzX6bKB3LjpWBupfMPLhoATUGx1HRTLtXh\"]},\"src/dispute/interfaces/IInitializable.sol\":{\"keccak256\":\"0xbc553af6501a972850a98fc6284943f8e95a5183a7b4f64198c16fca2338c9dc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1f1c422ce4a9e72f0bbdec36434206da4af3a32d38f922acab957942e994ce5\",\"dweb:/ipfs/QmNQGWBceLxx1CKSMLfwTM584q8UCgUpF4rrFe8pdbWYtj\"]},\"src/dispute/lib/LibGameId.sol\":{\"keccak256\":\"0x9a9f30500da6eb7eeaa7193515dc5e45dc479f09ae7d522a07283c0fb5f4bfa6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be113d8198d5822385de3d6ff3d7b3e8241993484aa95604ffaf38c2d33f40e0\",\"dweb:/ipfs/QmY9mHC52fqc4gAFYCGobNyuP4TqugQgs8o1kTF33t17Hc\"]},\"src/dispute/lib/LibHashing.sol\":{\"keccak256\":\"0x5a072cd028094eee55acb84ed8d08d7422b1fb46658b7e043e916781530a383b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b67e54f1318f1fd67b28b16c6861a56e27217c26a12aaea5c446e2ec53143920\",\"dweb:/ipfs/QmVLSTP3PwXzRkR3A4qV9fjZhca9v8J1EnEYuVGUsSirAq\"]},\"src/dispute/lib/LibPosition.sol\":{\"keccak256\":\"0xf7ceb26f0ac7067ff8a43f263451050eef6fba2029eafb83d3cbe35224d894a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bb403b0d707a8e2e3780a19185b918bfe907ca2d1b939ea74ae095a5cdf3b48\",\"dweb:/ipfs/QmYFzkmF8TRomp1cBEbTsKxiEnqLnX6SvSh4y3rVa84pBR\"]},\"src/dispute/lib/LibUDT.sol\":{\"keccak256\":\"0x9b61b15f5edfac1e6528aec79c1be6ac712d5f6a62140db87ed749e41a46563f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://24ef4ecee91638e278886888192b7d2b1811ab99f4e90a06817a4b2651720046\",\"dweb:/ipfs/QmdisoBv1mE9jDv6jvpcbvKhdmJZMMjQmATrEYfBQQrXtZ\"]},\"src/libraries/DisputeErrors.sol\":{\"keccak256\":\"0x869bec0d79d97f2d0a00b1e70bf1e6955a2be585521e0084602e54455c0a6937\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a235c6349437cd2ade72909287404e2993c1c4bd356707299239c71fa3bf780e\",\"dweb:/ipfs/QmcFSh6PWJ5sNg1CeoRyF9EnV8APWDz1kYP98v6ooGxc71\"]},\"src/libraries/DisputeTypes.sol\":{\"keccak256\":\"0xae3d053cf40b3e47669b89438524fec4eb571a78be296cc7e7ba23025b3bdf0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a2b90604718ad29d19a8f21d45a5f8c6188320781fdb7102b3fccadae549961\",\"dweb:/ipfs/QmUBTXgRFG7PvoCBJsXmgi2sZPZFPQQZTptQ91LL7tC2xQ\"]},\"src/universal/ISemver.sol\":{\"keccak256\":\"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a\",\"dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.15+commit.e14f2714"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"Hash","name":"uuid","type":"bytes32"}],"type":"error","name":"GameAlreadyExists"},{"inputs":[],"type":"error","name":"IncorrectBondAmount"},{"inputs":[{"internalType":"GameType","name":"gameType","type":"uint32"}],"type":"error","name":"NoImplementation"},{"inputs":[{"internalType":"address","name":"disputeProxy","type":"address","indexed":true},{"internalType":"GameType","name":"gameType","type":"uint32","indexed":true},{"internalType":"Claim","name":"rootClaim","type":"bytes32","indexed":true}],"type":"event","name":"DisputeGameCreated","anonymous":false},{"inputs":[{"internalType":"address","name":"impl","type":"address","indexed":true},{"internalType":"GameType","name":"gameType","type":"uint32","indexed":true}],"type":"event","name":"ImplementationSet","anonymous":false},{"inputs":[{"internalType":"GameType","name":"gameType","type":"uint32","indexed":true},{"internalType":"uint256","name":"newBond","type":"uint256","indexed":true}],"type":"event","name":"InitBondUpdated","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"GameType","name":"_gameType","type":"uint32"},{"internalType":"Claim","name":"_rootClaim","type":"bytes32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"payable","type":"function","name":"create","outputs":[{"internalType":"contract IDisputeGame","name":"proxy_","type":"address"}]},{"inputs":[{"internalType":"GameType","name":"_gameType","type":"uint32"},{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_n","type":"uint256"}],"stateMutability":"view","type":"function","name":"findLatestGames","outputs":[{"internalType":"struct IDisputeGameFactory.GameSearchResult[]","name":"games_","type":"tuple[]","components":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"GameId","name":"metadata","type":"bytes32"},{"internalType":"Timestamp","name":"timestamp","type":"uint64"},{"internalType":"Claim","name":"rootClaim","type":"bytes32"},{"internalType":"bytes","name":"extraData","type":"bytes"}]}]},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"stateMutability":"view","type":"function","name":"gameAtIndex","outputs":[{"internalType":"GameType","name":"gameType_","type":"uint32"},{"internalType":"Timestamp","name":"timestamp_","type":"uint64"},{"internalType":"contract IDisputeGame","name":"proxy_","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"gameCount","outputs":[{"internalType":"uint256","name":"gameCount_","type":"uint256"}]},{"inputs":[{"internalType":"GameType","name":"","type":"uint32"}],"stateMutability":"view","type":"function","name":"gameImpls","outputs":[{"internalType":"contract IDisputeGame","name":"","type":"address"}]},{"inputs":[{"internalType":"GameType","name":"_gameType","type":"uint32"},{"internalType":"Claim","name":"_rootClaim","type":"bytes32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"view","type":"function","name":"games","outputs":[{"internalType":"contract IDisputeGame","name":"proxy_","type":"address"},{"internalType":"Timestamp","name":"timestamp_","type":"uint64"}]},{"inputs":[{"internalType":"GameType","name":"_gameType","type":"uint32"},{"internalType":"Claim","name":"_rootClaim","type":"bytes32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"pure","type":"function","name":"getGameUUID","outputs":[{"internalType":"Hash","name":"uuid_","type":"bytes32"}]},{"inputs":[{"internalType":"GameType","name":"","type":"uint32"}],"stateMutability":"view","type":"function","name":"initBonds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"GameType","name":"_gameType","type":"uint32"},{"internalType":"contract IDisputeGame","name":"_impl","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setImplementation"},{"inputs":[{"internalType":"GameType","name":"_gameType","type":"uint32"},{"internalType":"uint256","name":"_initBond","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setInitBond"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]}],"devdoc":{"kind":"dev","methods":{"create(uint32,bytes32,bytes)":{"params":{"_extraData":"Any extra data that should be provided to the created dispute game.","_gameType":"The type of the DisputeGame - used to decide the proxy implementation.","_rootClaim":"The root claim of the DisputeGame."},"returns":{"proxy_":"The address of the created DisputeGame proxy."}},"findLatestGames(uint32,uint256,uint256)":{"params":{"_gameType":"The type of game to find.","_n":"The number of games to find.","_start":"The index to start the reverse search from."}},"gameAtIndex(uint256)":{"params":{"_index":"The index of the dispute game."},"returns":{"gameType_":"The type of the DisputeGame - used to decide the proxy implementation.","proxy_":"The clone of the `DisputeGame` created with the given parameters. Returns `address(0)` if nonexistent.","timestamp_":"The timestamp of the creation of the dispute game."}},"gameCount()":{"returns":{"gameCount_":"The total number of dispute games created by this factory."}},"games(uint32,bytes32,bytes)":{"details":"`++` equates to concatenation.","params":{"_extraData":"Any extra data that should be provided to the created dispute game.","_gameType":"The type of the DisputeGame - used to decide the proxy implementation","_rootClaim":"The root claim of the DisputeGame."},"returns":{"proxy_":"The clone of the `DisputeGame` created with the given parameters. Returns `address(0)` if nonexistent.","timestamp_":"The timestamp of the creation of the dispute game."}},"getGameUUID(uint32,bytes32,bytes)":{"details":"Hashes the concatenation of `gameType . rootClaim . extraData` without expanding memory.","params":{"_extraData":"Any extra data that should be provided to the created dispute game.","_gameType":"The type of the DisputeGame.","_rootClaim":"The root claim of the DisputeGame."},"returns":{"uuid_":"The unique identifier for the given dispute game parameters."}},"initialize(address)":{"params":{"_owner":"The owner of the contract."}},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"setImplementation(uint32,address)":{"details":"May only be called by the `owner`.","params":{"_gameType":"The type of the DisputeGame.","_impl":"The implementation contract for the given `GameType`."}},"setInitBond(uint32,uint256)":{"details":"May only be called by the `owner`.","params":{"_gameType":"The type of the DisputeGame.","_initBond":"The bond (in wei) for initializing a game type."}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{"constructor":{"notice":"Constructs a new DisputeGameFactory contract."},"create(uint32,bytes32,bytes)":{"notice":"Creates a new DisputeGame proxy contract."},"findLatestGames(uint32,uint256,uint256)":{"notice":"Finds the `_n` most recent `GameId`'s of type `_gameType` starting at `_start`. If there are less than `_n` games of type `_gameType` starting at `_start`, then the returned array will be shorter than `_n`."},"gameAtIndex(uint256)":{"notice":"`gameAtIndex` returns the dispute game contract address and its creation timestamp at the given index. Each created dispute game increments the underlying index."},"gameCount()":{"notice":"The total number of dispute games created by this factory."},"gameImpls(uint32)":{"notice":"`gameImpls` is a mapping that maps `GameType`s to their respective `IDisputeGame` implementations."},"games(uint32,bytes32,bytes)":{"notice":"`games` queries an internal mapping that maps the hash of `gameType ++ rootClaim ++ extraData` to the deployed `DisputeGame` clone."},"getGameUUID(uint32,bytes32,bytes)":{"notice":"Returns a unique identifier for the given dispute game parameters."},"initBonds(uint32)":{"notice":"Returns the required bonds for initializing a dispute game of the given type."},"initialize(address)":{"notice":"Initializes the contract."},"setImplementation(uint32,address)":{"notice":"Sets the implementation contract for a specific `GameType`."},"setInitBond(uint32,uint256)":{"notice":"Sets the bond (in wei) for initializing a game type."},"version()":{"notice":"Semantic version."}},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","ds-test/=lib/forge-std/lib/ds-test/src/","forge-std/=lib/forge-std/src/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/dispute/DisputeGameFactory.sol":"DisputeGameFactory"},"evmVersion":"london","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888","urls":["bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a","dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e","urls":["bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497","dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3","urls":["bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4","dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149","urls":["bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c","dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"],"license":"MIT"},"lib/solady/src/utils/LibClone.sol":{"keccak256":"0xfd4b40a4584e736d9d0b045fbc748023804c83819f5e018635a9f447834774a4","urls":["bzz-raw://202fc57397118355d9d573c28d36ff45892e632a12b143f4bc5e7266bfb7737e","dweb:/ipfs/QmZYD6Va3nNUC4B9NHZcyvFmK59i3WnEPPpsi8N355GivN"],"license":"MIT"},"src/dispute/DisputeGameFactory.sol":{"keccak256":"0xc7c6b0c2a051d4a14b3833243fa2e93e5e320bb106ef3979ce77098fb9d6629f","urls":["bzz-raw://cd5cbabb1b0b41f9faf3d2329e519936ea43a1e7da1df6a9be90d2513603b09f","dweb:/ipfs/QmQM5FpgogJQnbmJjdQdoxxMzczx5PBiCNbiRUQiJqHyhM"],"license":"MIT"},"src/dispute/interfaces/IDisputeGame.sol":{"keccak256":"0xe2611453d5cc05f8aa30dc0e5e15ee5ae29fd3eb55a2c034424250baebf12f9b","urls":["bzz-raw://274e00fbcea3b8455bbaa042130bf1f7a5b2b769f28ad57afbf9fabfd74a757a","dweb:/ipfs/QmRKQTfYdMjQYVbuZhdXts1d752eUq8RwrjqqwV5XRYLi6"],"license":"MIT"},"src/dispute/interfaces/IDisputeGameFactory.sol":{"keccak256":"0x204d89d38d4dc0db40fbf898d95e639ac5608810a5a5506a3d80d71177648bda","urls":["bzz-raw://71e5c0ff04f409f30ca4f8ebfae1592c6ca495e315b059f969d11812e6e84dbd","dweb:/ipfs/QmaNKkhkJv7qHzX6bKB3LjpWBupfMPLhoATUGx1HRTLtXh"],"license":"MIT"},"src/dispute/interfaces/IInitializable.sol":{"keccak256":"0xbc553af6501a972850a98fc6284943f8e95a5183a7b4f64198c16fca2338c9dc","urls":["bzz-raw://b1f1c422ce4a9e72f0bbdec36434206da4af3a32d38f922acab957942e994ce5","dweb:/ipfs/QmNQGWBceLxx1CKSMLfwTM584q8UCgUpF4rrFe8pdbWYtj"],"license":"MIT"},"src/dispute/lib/LibGameId.sol":{"keccak256":"0x9a9f30500da6eb7eeaa7193515dc5e45dc479f09ae7d522a07283c0fb5f4bfa6","urls":["bzz-raw://be113d8198d5822385de3d6ff3d7b3e8241993484aa95604ffaf38c2d33f40e0","dweb:/ipfs/QmY9mHC52fqc4gAFYCGobNyuP4TqugQgs8o1kTF33t17Hc"],"license":"MIT"},"src/dispute/lib/LibHashing.sol":{"keccak256":"0x5a072cd028094eee55acb84ed8d08d7422b1fb46658b7e043e916781530a383b","urls":["bzz-raw://b67e54f1318f1fd67b28b16c6861a56e27217c26a12aaea5c446e2ec53143920","dweb:/ipfs/QmVLSTP3PwXzRkR3A4qV9fjZhca9v8J1EnEYuVGUsSirAq"],"license":"MIT"},"src/dispute/lib/LibPosition.sol":{"keccak256":"0xf7ceb26f0ac7067ff8a43f263451050eef6fba2029eafb83d3cbe35224d894a6","urls":["bzz-raw://3bb403b0d707a8e2e3780a19185b918bfe907ca2d1b939ea74ae095a5cdf3b48","dweb:/ipfs/QmYFzkmF8TRomp1cBEbTsKxiEnqLnX6SvSh4y3rVa84pBR"],"license":"MIT"},"src/dispute/lib/LibUDT.sol":{"keccak256":"0x9b61b15f5edfac1e6528aec79c1be6ac712d5f6a62140db87ed749e41a46563f","urls":["bzz-raw://24ef4ecee91638e278886888192b7d2b1811ab99f4e90a06817a4b2651720046","dweb:/ipfs/QmdisoBv1mE9jDv6jvpcbvKhdmJZMMjQmATrEYfBQQrXtZ"],"license":"MIT"},"src/libraries/DisputeErrors.sol":{"keccak256":"0x869bec0d79d97f2d0a00b1e70bf1e6955a2be585521e0084602e54455c0a6937","urls":["bzz-raw://a235c6349437cd2ade72909287404e2993c1c4bd356707299239c71fa3bf780e","dweb:/ipfs/QmcFSh6PWJ5sNg1CeoRyF9EnV8APWDz1kYP98v6ooGxc71"],"license":"MIT"},"src/libraries/DisputeTypes.sol":{"keccak256":"0xae3d053cf40b3e47669b89438524fec4eb571a78be296cc7e7ba23025b3bdf0c","urls":["bzz-raw://4a2b90604718ad29d19a8f21d45a5f8c6188320781fdb7102b3fccadae549961","dweb:/ipfs/QmUBTXgRFG7PvoCBJsXmgi2sZPZFPQQZTptQ91LL7tC2xQ"],"license":"MIT"},"src/universal/ISemver.sol":{"keccak256":"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44","urls":["bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a","dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":46970,"contract":"src/dispute/DisputeGameFactory.sol:DisputeGameFactory","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":46973,"contract":"src/dispute/DisputeGameFactory.sol:DisputeGameFactory","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":48501,"contract":"src/dispute/DisputeGameFactory.sol:DisputeGameFactory","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":46842,"contract":"src/dispute/DisputeGameFactory.sol:DisputeGameFactory","label":"_owner","offset":0,"slot":"51","type":"t_address"},{"astId":46962,"contract":"src/dispute/DisputeGameFactory.sol:DisputeGameFactory","label":"__gap","offset":0,"slot":"52","type":"t_array(t_uint256)49_storage"},{"astId":97221,"contract":"src/dispute/DisputeGameFactory.sol:DisputeGameFactory","label":"gameImpls","offset":0,"slot":"101","type":"t_mapping(t_userDefinedValueType(GameType)103271,t_contract(IDisputeGame)100327)"},{"astId":97227,"contract":"src/dispute/DisputeGameFactory.sol:DisputeGameFactory","label":"initBonds","offset":0,"slot":"102","type":"t_mapping(t_userDefinedValueType(GameType)103271,t_uint256)"},{"astId":97234,"contract":"src/dispute/DisputeGameFactory.sol:DisputeGameFactory","label":"_disputeGames","offset":0,"slot":"103","type":"t_mapping(t_userDefinedValueType(Hash)103253,t_userDefinedValueType(GameId)103265)"},{"astId":97239,"contract":"src/dispute/DisputeGameFactory.sol:DisputeGameFactory","label":"_disputeGameList","offset":0,"slot":"104","type":"t_array(t_userDefinedValueType(GameId)103265)dyn_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)49_storage":{"encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568","base":"t_uint256"},"t_array(t_uint256)50_storage":{"encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600","base":"t_uint256"},"t_array(t_userDefinedValueType(GameId)103265)dyn_storage":{"encoding":"dynamic_array","label":"GameId[]","numberOfBytes":"32","base":"t_userDefinedValueType(GameId)103265"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(IDisputeGame)100327":{"encoding":"inplace","label":"contract IDisputeGame","numberOfBytes":"20"},"t_mapping(t_userDefinedValueType(GameType)103271,t_contract(IDisputeGame)100327)":{"encoding":"mapping","key":"t_userDefinedValueType(GameType)103271","label":"mapping(GameType => contract IDisputeGame)","numberOfBytes":"32","value":"t_contract(IDisputeGame)100327"},"t_mapping(t_userDefinedValueType(GameType)103271,t_uint256)":{"encoding":"mapping","key":"t_userDefinedValueType(GameType)103271","label":"mapping(GameType => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_userDefinedValueType(Hash)103253,t_userDefinedValueType(GameId)103265)":{"encoding":"mapping","key":"t_userDefinedValueType(Hash)103253","label":"mapping(Hash => GameId)","numberOfBytes":"32","value":"t_userDefinedValueType(GameId)103265"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"},"t_userDefinedValueType(GameId)103265":{"encoding":"inplace","label":"GameId","numberOfBytes":"32"},"t_userDefinedValueType(GameType)103271":{"encoding":"inplace","label":"GameType","numberOfBytes":"4"},"t_userDefinedValueType(Hash)103253":{"encoding":"inplace","label":"Hash","numberOfBytes":"32"}}},"userdoc":{"version":1,"kind":"user","methods":{"constructor":{"notice":"Constructs a new DisputeGameFactory contract."},"create(uint32,bytes32,bytes)":{"notice":"Creates a new DisputeGame proxy contract."},"findLatestGames(uint32,uint256,uint256)":{"notice":"Finds the `_n` most recent `GameId`'s of type `_gameType` starting at `_start`. If there are less than `_n` games of type `_gameType` starting at `_start`, then the returned array will be shorter than `_n`."},"gameAtIndex(uint256)":{"notice":"`gameAtIndex` returns the dispute game contract address and its creation timestamp at the given index. Each created dispute game increments the underlying index."},"gameCount()":{"notice":"The total number of dispute games created by this factory."},"gameImpls(uint32)":{"notice":"`gameImpls` is a mapping that maps `GameType`s to their respective `IDisputeGame` implementations."},"games(uint32,bytes32,bytes)":{"notice":"`games` queries an internal mapping that maps the hash of `gameType ++ rootClaim ++ extraData` to the deployed `DisputeGame` clone."},"getGameUUID(uint32,bytes32,bytes)":{"notice":"Returns a unique identifier for the given dispute game parameters."},"initBonds(uint32)":{"notice":"Returns the required bonds for initializing a dispute game of the given type."},"initialize(address)":{"notice":"Initializes the contract."},"setImplementation(uint32,address)":{"notice":"Sets the implementation contract for a specific `GameType`."},"setInitBond(uint32,uint256)":{"notice":"Sets the bond (in wei) for initializing a game type."},"version()":{"notice":"Semantic version."}},"events":{"DisputeGameCreated(address,uint32,bytes32)":{"notice":"Emitted when a new dispute game is created"},"ImplementationSet(address,uint32)":{"notice":"Emitted when a new game implementation added to the factory"},"InitBondUpdated(uint32,uint256)":{"notice":"Emitted when a game type's initialization bond is updated"}},"errors":{"GameAlreadyExists(bytes32)":[{"notice":"Thrown when a dispute game that already exists is attempted to be created."}],"IncorrectBondAmount()":[{"notice":"Thrown when a supplied bond is not equal to the required bond amount to cover the cost of the interaction."}],"NoImplementation(uint32)":[{"notice":"Thrown when a dispute game is attempted to be created with an unsupported game type."}]},"notice":"A factory contract for creating `IDisputeGame` contracts. All created dispute games are stored in both a mapping and an append only array. The timestamp of the creation time of the dispute game is packed tightly into the storage slot with the address of the dispute game to make offchain discoverability of playable dispute games easier."},"devdoc":{"version":1,"kind":"dev","methods":{"create(uint32,bytes32,bytes)":{"params":{"_extraData":"Any extra data that should be provided to the created dispute game.","_gameType":"The type of the DisputeGame - used to decide the proxy implementation.","_rootClaim":"The root claim of the DisputeGame."},"returns":{"proxy_":"The address of the created DisputeGame proxy."}},"findLatestGames(uint32,uint256,uint256)":{"params":{"_gameType":"The type of game to find.","_n":"The number of games to find.","_start":"The index to start the reverse search from."}},"gameAtIndex(uint256)":{"params":{"_index":"The index of the dispute game."},"returns":{"gameType_":"The type of the DisputeGame - used to decide the proxy implementation.","proxy_":"The clone of the `DisputeGame` created with the given parameters. Returns `address(0)` if nonexistent.","timestamp_":"The timestamp of the creation of the dispute game."}},"gameCount()":{"returns":{"gameCount_":"The total number of dispute games created by this factory."}},"games(uint32,bytes32,bytes)":{"details":"`++` equates to concatenation.","params":{"_extraData":"Any extra data that should be provided to the created dispute game.","_gameType":"The type of the DisputeGame - used to decide the proxy implementation","_rootClaim":"The root claim of the DisputeGame."},"returns":{"proxy_":"The clone of the `DisputeGame` created with the given parameters. Returns `address(0)` if nonexistent.","timestamp_":"The timestamp of the creation of the dispute game."}},"getGameUUID(uint32,bytes32,bytes)":{"details":"Hashes the concatenation of `gameType . rootClaim . extraData` without expanding memory.","params":{"_extraData":"Any extra data that should be provided to the created dispute game.","_gameType":"The type of the DisputeGame.","_rootClaim":"The root claim of the DisputeGame."},"returns":{"uuid_":"The unique identifier for the given dispute game parameters."}},"initialize(address)":{"params":{"_owner":"The owner of the contract."}},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"setImplementation(uint32,address)":{"details":"May only be called by the `owner`.","params":{"_gameType":"The type of the DisputeGame.","_impl":"The implementation contract for the given `GameType`."}},"setInitBond(uint32,uint256)":{"details":"May only be called by the `owner`.","params":{"_gameType":"The type of the DisputeGame.","_initBond":"The bond (in wei) for initializing a game type."}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"errors":{"GameAlreadyExists(bytes32)":[{"params":{"uuid":"The UUID of the dispute game that already exists."}}],"NoImplementation(uint32)":[{"params":{"gameType":"The unsupported game type."}}]},"title":"DisputeGameFactory"},"ast":{"absolutePath":"src/dispute/DisputeGameFactory.sol","id":97683,"exportedSymbols":{"AlreadyInitialized":[103120],"AnchorRootNotFound":[103192],"BadAuth":[103195],"BadExtraData":[103132],"BondAmount":[103259],"BondTransferFailed":[103129],"CannotDefendRootClaim":[103135],"Claim":[103255],"ClaimAboveSplit":[103177],"ClaimAlreadyExists":[103138],"ClaimAlreadyResolved":[103174],"ClaimHash":[103257],"Clock":[103267],"ClockNotExpired":[103150],"ClockTimeExceeded":[103147],"DisputeGameFactory":[97682],"DuplicateStep":[103189],"Duration":[103263],"GameAlreadyExists":[103111],"GameDepthExceeded":[103153],"GameId":[103265],"GameNotInProgress":[103144],"GameStatus":[103277],"GameType":[103271],"GameTypes":[103317],"Hash":[103253],"IDisputeGame":[100327],"IDisputeGameFactory":[100497],"ISemver":[109417],"IncorrectBondAmount":[103123],"InvalidClaim":[103141],"InvalidClockExtension":[103183],"InvalidLocalIdent":[103168],"InvalidParent":[103156],"InvalidPrestate":[103159],"InvalidSplitDepth":[103180],"L1HeadTooOld":[103165],"LibClaim":[101086],"LibClock":[101073],"LibClone":[62767],"LibDuration":[101099],"LibGameId":[100778],"LibGameType":[101151],"LibHash":[101112],"LibHashing":[100800],"LibPosition":[101018],"LibTimestamp":[101125],"LibVMStatus":[101138],"LocalPreimageKey":[103373],"MaxDepthTooLarge":[103186],"NoCreditToClaim":[103126],"NoImplementation":[103105],"OutOfOrderResolution":[103171],"OutputRoot":[103283],"OwnableUpgradeable":[46963],"Position":[103269],"Timestamp":[103261],"UnexpectedRootClaim":[103117],"VMStatus":[103273],"VMStatuses":[103351],"ValidStep":[103162]},"nodeType":"SourceUnit","src":"32:8414:163","nodes":[{"id":97186,"nodeType":"PragmaDirective","src":"32:23:163","nodes":[],"literals":["solidity","0.8",".15"]},{"id":97188,"nodeType":"ImportDirective","src":"57:54:163","nodes":[],"absolutePath":"lib/solady/src/utils/LibClone.sol","file":"@solady/utils/LibClone.sol","nameLocation":"-1:-1:-1","scope":97683,"sourceUnit":62768,"symbolAliases":[{"foreign":{"id":97187,"name":"LibClone","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62767,"src":"66:8:163","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":97190,"nodeType":"ImportDirective","src":"112:103:163","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":97683,"sourceUnit":46964,"symbolAliases":[{"foreign":{"id":97189,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46963,"src":"121:18:163","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":97192,"nodeType":"ImportDirective","src":"216:52:163","nodes":[],"absolutePath":"src/universal/ISemver.sol","file":"src/universal/ISemver.sol","nameLocation":"-1:-1:-1","scope":97683,"sourceUnit":109418,"symbolAliases":[{"foreign":{"id":97191,"name":"ISemver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109417,"src":"225:7:163","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":97194,"nodeType":"ImportDirective","src":"270:71:163","nodes":[],"absolutePath":"src/dispute/interfaces/IDisputeGame.sol","file":"src/dispute/interfaces/IDisputeGame.sol","nameLocation":"-1:-1:-1","scope":97683,"sourceUnit":100328,"symbolAliases":[{"foreign":{"id":97193,"name":"IDisputeGame","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100327,"src":"279:12:163","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":97196,"nodeType":"ImportDirective","src":"342:85:163","nodes":[],"absolutePath":"src/dispute/interfaces/IDisputeGameFactory.sol","file":"src/dispute/interfaces/IDisputeGameFactory.sol","nameLocation":"-1:-1:-1","scope":97683,"sourceUnit":100498,"symbolAliases":[{"foreign":{"id":97195,"name":"IDisputeGameFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100497,"src":"351:19:163","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":97198,"nodeType":"ImportDirective","src":"429:58:163","nodes":[],"absolutePath":"src/dispute/lib/LibGameId.sol","file":"src/dispute/lib/LibGameId.sol","nameLocation":"-1:-1:-1","scope":97683,"sourceUnit":100779,"symbolAliases":[{"foreign":{"id":97197,"name":"LibGameId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100778,"src":"438:9:163","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":97199,"nodeType":"ImportDirective","src":"489:40:163","nodes":[],"absolutePath":"src/libraries/DisputeTypes.sol","file":"src/libraries/DisputeTypes.sol","nameLocation":"-1:-1:-1","scope":97683,"sourceUnit":103374,"symbolAliases":[],"unitAlias":""},{"id":97200,"nodeType":"ImportDirective","src":"530:41:163","nodes":[],"absolutePath":"src/libraries/DisputeErrors.sol","file":"src/libraries/DisputeErrors.sol","nameLocation":"-1:-1:-1","scope":97683,"sourceUnit":103196,"symbolAliases":[],"unitAlias":""},{"id":97682,"nodeType":"ContractDefinition","src":"989:7456:163","nodes":[{"id":97210,"nodeType":"UsingForDirective","src":"1155:27:163","nodes":[],"global":false,"libraryName":{"id":97208,"name":"LibClone","nodeType":"IdentifierPath","referencedDeclaration":62767,"src":"1161:8:163"},"typeName":{"id":97209,"name":"address","nodeType":"ElementaryTypeName","src":"1174:7:163","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"id":97214,"nodeType":"VariableDeclaration","src":"1251:40:163","nodes":[],"baseFunctions":[109416],"constant":true,"documentation":{"id":97211,"nodeType":"StructuredDocumentation","src":"1188:58:163","text":"@notice Semantic version.\n @custom:semver 0.6.0"},"functionSelector":"54fd4d50","mutability":"constant","name":"version","nameLocation":"1274:7:163","scope":97682,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":97212,"name":"string","nodeType":"ElementaryTypeName","src":"1251:6:163","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"302e362e30","id":97213,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1284:7:163","typeDescriptions":{"typeIdentifier":"t_stringliteral_98293d924c2515c22d1d357dd5a43b88356a9d20201dd01f3afa1023505a904d","typeString":"literal_string \"0.6.0\""},"value":"0.6.0"},"visibility":"public"},{"id":97221,"nodeType":"VariableDeclaration","src":"1338:50:163","nodes":[],"baseFunctions":[100423],"constant":false,"documentation":{"id":97215,"nodeType":"StructuredDocumentation","src":"1298:35:163","text":"@inheritdoc IDisputeGameFactory"},"functionSelector":"1b685b9e","mutability":"mutable","name":"gameImpls","nameLocation":"1379:9:163","scope":97682,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_GameType_$103271_$_t_contract$_IDisputeGame_$100327_$","typeString":"mapping(GameType => contract IDisputeGame)"},"typeName":{"id":97220,"keyType":{"id":97217,"nodeType":"UserDefinedTypeName","pathNode":{"id":97216,"name":"GameType","nodeType":"IdentifierPath","referencedDeclaration":103271,"src":"1346:8:163"},"referencedDeclaration":103271,"src":"1346:8:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"nodeType":"Mapping","src":"1338:33:163","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_GameType_$103271_$_t_contract$_IDisputeGame_$100327_$","typeString":"mapping(GameType => contract IDisputeGame)"},"valueType":{"id":97219,"nodeType":"UserDefinedTypeName","pathNode":{"id":97218,"name":"IDisputeGame","nodeType":"IdentifierPath","referencedDeclaration":100327,"src":"1358:12:163"},"referencedDeclaration":100327,"src":"1358:12:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}}},"visibility":"public"},{"id":97227,"nodeType":"VariableDeclaration","src":"1435:45:163","nodes":[],"baseFunctions":[100432],"constant":false,"documentation":{"id":97222,"nodeType":"StructuredDocumentation","src":"1395:35:163","text":"@inheritdoc IDisputeGameFactory"},"functionSelector":"6593dc6e","mutability":"mutable","name":"initBonds","nameLocation":"1471:9:163","scope":97682,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_GameType_$103271_$_t_uint256_$","typeString":"mapping(GameType => uint256)"},"typeName":{"id":97226,"keyType":{"id":97224,"nodeType":"UserDefinedTypeName","pathNode":{"id":97223,"name":"GameType","nodeType":"IdentifierPath","referencedDeclaration":103271,"src":"1443:8:163"},"referencedDeclaration":103271,"src":"1443:8:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"nodeType":"Mapping","src":"1435:28:163","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_GameType_$103271_$_t_uint256_$","typeString":"mapping(GameType => uint256)"},"valueType":{"id":97225,"name":"uint256","nodeType":"ElementaryTypeName","src":"1455:7:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"public"},{"id":97234,"nodeType":"VariableDeclaration","src":"1650:46:163","nodes":[],"constant":false,"documentation":{"id":97228,"nodeType":"StructuredDocumentation","src":"1487:113:163","text":"@notice Mapping of a hash of `gameType || rootClaim || extraData` to the deployed `IDisputeGame` clone (where"},"mutability":"mutable","name":"_disputeGames","nameLocation":"1683:13:163","scope":97682,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_Hash_$103253_$_t_userDefinedValueType$_GameId_$103265_$","typeString":"mapping(Hash => GameId)"},"typeName":{"id":97233,"keyType":{"id":97230,"nodeType":"UserDefinedTypeName","pathNode":{"id":97229,"name":"Hash","nodeType":"IdentifierPath","referencedDeclaration":103253,"src":"1658:4:163"},"referencedDeclaration":103253,"src":"1658:4:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"nodeType":"Mapping","src":"1650:23:163","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_Hash_$103253_$_t_userDefinedValueType$_GameId_$103265_$","typeString":"mapping(Hash => GameId)"},"valueType":{"id":97232,"nodeType":"UserDefinedTypeName","pathNode":{"id":97231,"name":"GameId","nodeType":"IdentifierPath","referencedDeclaration":103265,"src":"1666:6:163"},"referencedDeclaration":103265,"src":"1666:6:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameId_$103265","typeString":"GameId"}}},"visibility":"internal"},{"id":97239,"nodeType":"VariableDeclaration","src":"1862:34:163","nodes":[],"constant":false,"documentation":{"id":97235,"nodeType":"StructuredDocumentation","src":"1703:154:163","text":"@notice An append-only array of disputeGames that have been created. Used by offchain game solvers to\n efficiently track dispute games."},"mutability":"mutable","name":"_disputeGameList","nameLocation":"1880:16:163","scope":97682,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_userDefinedValueType$_GameId_$103265_$dyn_storage","typeString":"GameId[]"},"typeName":{"baseType":{"id":97237,"nodeType":"UserDefinedTypeName","pathNode":{"id":97236,"name":"GameId","nodeType":"IdentifierPath","referencedDeclaration":103265,"src":"1862:6:163"},"referencedDeclaration":103265,"src":"1862:6:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameId_$103265","typeString":"GameId"}},"id":97238,"nodeType":"ArrayTypeName","src":"1862:8:163","typeDescriptions":{"typeIdentifier":"t_array$_t_userDefinedValueType$_GameId_$103265_$dyn_storage_ptr","typeString":"GameId[]"}},"visibility":"internal"},{"id":97253,"nodeType":"FunctionDefinition","src":"1965:74:163","nodes":[],"body":{"id":97252,"nodeType":"Block","src":"2000:39:163","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":97248,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2029:1:163","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":97247,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2021:7:163","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":97246,"name":"address","nodeType":"ElementaryTypeName","src":"2021:7:163","typeDescriptions":{}}},"id":97249,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2021:10:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":97245,"name":"initialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97269,"src":"2010:10:163","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":97250,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2010:22:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":97251,"nodeType":"ExpressionStatement","src":"2010:22:163"}]},"documentation":{"id":97240,"nodeType":"StructuredDocumentation","src":"1903:57:163","text":"@notice Constructs a new DisputeGameFactory contract."},"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":97243,"kind":"baseConstructorSpecifier","modifierName":{"id":97242,"name":"OwnableUpgradeable","nodeType":"IdentifierPath","referencedDeclaration":46963,"src":"1979:18:163"},"nodeType":"ModifierInvocation","src":"1979:20:163"}],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":97241,"nodeType":"ParameterList","parameters":[],"src":"1976:2:163"},"returnParameters":{"id":97244,"nodeType":"ParameterList","parameters":[],"src":"2000:0:163"},"scope":97682,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":97269,"nodeType":"FunctionDefinition","src":"2136:124:163","nodes":[],"body":{"id":97268,"nodeType":"Block","src":"2191:69:163","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":97261,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46858,"src":"2201:14:163","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":97262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2201:16:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":97263,"nodeType":"ExpressionStatement","src":"2201:16:163"},{"expression":{"arguments":[{"id":97265,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97256,"src":"2246:6:163","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":97264,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46957,"src":"2227:18:163","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":97266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2227:26:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":97267,"nodeType":"ExpressionStatement","src":"2227:26:163"}]},"documentation":{"id":97254,"nodeType":"StructuredDocumentation","src":"2045:86:163","text":"@notice Initializes the contract.\n @param _owner The owner of the contract."},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":97259,"kind":"modifierInvocation","modifierName":{"id":97258,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":47034,"src":"2179:11:163"},"nodeType":"ModifierInvocation","src":"2179:11:163"}],"name":"initialize","nameLocation":"2145:10:163","parameters":{"id":97257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":97256,"mutability":"mutable","name":"_owner","nameLocation":"2164:6:163","nodeType":"VariableDeclaration","scope":97269,"src":"2156:14:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":97255,"name":"address","nodeType":"ElementaryTypeName","src":"2156:7:163","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2155:16:163"},"returnParameters":{"id":97260,"nodeType":"ParameterList","parameters":[],"src":"2191:0:163"},"scope":97682,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":97281,"nodeType":"FunctionDefinition","src":"2306:117:163","nodes":[],"body":{"id":97280,"nodeType":"Block","src":"2370:53:163","nodes":[],"statements":[{"expression":{"id":97278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":97275,"name":"gameCount_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97273,"src":"2380:10:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":97276,"name":"_disputeGameList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97239,"src":"2393:16:163","typeDescriptions":{"typeIdentifier":"t_array$_t_userDefinedValueType$_GameId_$103265_$dyn_storage","typeString":"GameId[] storage ref"}},"id":97277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2393:23:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2380:36:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":97279,"nodeType":"ExpressionStatement","src":"2380:36:163"}]},"baseFunctions":[100380],"documentation":{"id":97270,"nodeType":"StructuredDocumentation","src":"2266:35:163","text":"@inheritdoc IDisputeGameFactory"},"functionSelector":"4d1975b4","implemented":true,"kind":"function","modifiers":[],"name":"gameCount","nameLocation":"2315:9:163","parameters":{"id":97271,"nodeType":"ParameterList","parameters":[],"src":"2324:2:163"},"returnParameters":{"id":97274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":97273,"mutability":"mutable","name":"gameCount_","nameLocation":"2358:10:163","nodeType":"VariableDeclaration","scope":97281,"src":"2350:18:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":97272,"name":"uint256","nodeType":"ElementaryTypeName","src":"2350:7:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2349:20:163"},"scope":97682,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":97319,"nodeType":"FunctionDefinition","src":"2469:342:163","nodes":[],"body":{"id":97318,"nodeType":"Block","src":"2673:138:163","nodes":[],"statements":[{"assignments":[97301],"declarations":[{"constant":false,"id":97301,"mutability":"mutable","name":"uuid","nameLocation":"2688:4:163","nodeType":"VariableDeclaration","scope":97318,"src":"2683:9:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"},"typeName":{"id":97300,"nodeType":"UserDefinedTypeName","pathNode":{"id":97299,"name":"Hash","nodeType":"IdentifierPath","referencedDeclaration":103253,"src":"2683:4:163"},"referencedDeclaration":103253,"src":"2683:4:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"visibility":"internal"}],"id":97307,"initialValue":{"arguments":[{"id":97303,"name":"_gameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97285,"src":"2707:9:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},{"id":97304,"name":"_rootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97288,"src":"2718:10:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"id":97305,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97290,"src":"2730:10:163","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"},{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":97302,"name":"getGameUUID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97522,"src":"2695:11:163","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_GameType_$103271_$_t_userDefinedValueType$_Claim_$103255_$_t_bytes_calldata_ptr_$returns$_t_userDefinedValueType$_Hash_$103253_$","typeString":"function (GameType,Claim,bytes calldata) pure returns (Hash)"}},"id":97306,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2695:46:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"nodeType":"VariableDeclarationStatement","src":"2683:58:163"},{"expression":{"id":97316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[null,{"id":97308,"name":"timestamp_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97297,"src":"2754:10:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"}},{"id":97309,"name":"proxy_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97294,"src":"2766:6:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}}],"id":97310,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"2751:22:163","typeDescriptions":{"typeIdentifier":"t_tuple$__$_t_userDefinedValueType$_Timestamp_$103261_$_t_contract$_IDisputeGame_$100327_$","typeString":"tuple(,Timestamp,contract IDisputeGame)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":97311,"name":"_disputeGames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97234,"src":"2776:13:163","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_Hash_$103253_$_t_userDefinedValueType$_GameId_$103265_$","typeString":"mapping(Hash => GameId)"}},"id":97313,"indexExpression":{"id":97312,"name":"uuid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97301,"src":"2790:4:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2776:19:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameId_$103265","typeString":"GameId"}},"id":97314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"unpack","nodeType":"MemberAccess","referencedDeclaration":100777,"src":"2776:26:163","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_GameId_$103265_$returns$_t_userDefinedValueType$_GameType_$103271_$_t_userDefinedValueType$_Timestamp_$103261_$_t_contract$_IDisputeGame_$100327_$bound_to$_t_userDefinedValueType$_GameId_$103265_$","typeString":"function (GameId) pure returns (GameType,Timestamp,contract IDisputeGame)"}},"id":97315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2776:28:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_userDefinedValueType$_GameType_$103271_$_t_userDefinedValueType$_Timestamp_$103261_$_t_contract$_IDisputeGame_$100327_$","typeString":"tuple(GameType,Timestamp,contract IDisputeGame)"}},"src":"2751:53:163","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":97317,"nodeType":"ExpressionStatement","src":"2751:53:163"}]},"baseFunctions":[100398],"documentation":{"id":97282,"nodeType":"StructuredDocumentation","src":"2429:35:163","text":"@inheritdoc IDisputeGameFactory"},"functionSelector":"5f0150cb","implemented":true,"kind":"function","modifiers":[],"name":"games","nameLocation":"2478:5:163","parameters":{"id":97291,"nodeType":"ParameterList","parameters":[{"constant":false,"id":97285,"mutability":"mutable","name":"_gameType","nameLocation":"2502:9:163","nodeType":"VariableDeclaration","scope":97319,"src":"2493:18:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"},"typeName":{"id":97284,"nodeType":"UserDefinedTypeName","pathNode":{"id":97283,"name":"GameType","nodeType":"IdentifierPath","referencedDeclaration":103271,"src":"2493:8:163"},"referencedDeclaration":103271,"src":"2493:8:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"visibility":"internal"},{"constant":false,"id":97288,"mutability":"mutable","name":"_rootClaim","nameLocation":"2527:10:163","nodeType":"VariableDeclaration","scope":97319,"src":"2521:16:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":97287,"nodeType":"UserDefinedTypeName","pathNode":{"id":97286,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"2521:5:163"},"referencedDeclaration":103255,"src":"2521:5:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"},{"constant":false,"id":97290,"mutability":"mutable","name":"_extraData","nameLocation":"2562:10:163","nodeType":"VariableDeclaration","scope":97319,"src":"2547:25:163","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":97289,"name":"bytes","nodeType":"ElementaryTypeName","src":"2547:5:163","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2483:95:163"},"returnParameters":{"id":97298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":97294,"mutability":"mutable","name":"proxy_","nameLocation":"2639:6:163","nodeType":"VariableDeclaration","scope":97319,"src":"2626:19:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"},"typeName":{"id":97293,"nodeType":"UserDefinedTypeName","pathNode":{"id":97292,"name":"IDisputeGame","nodeType":"IdentifierPath","referencedDeclaration":100327,"src":"2626:12:163"},"referencedDeclaration":100327,"src":"2626:12:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"visibility":"internal"},{"constant":false,"id":97297,"mutability":"mutable","name":"timestamp_","nameLocation":"2657:10:163","nodeType":"VariableDeclaration","scope":97319,"src":"2647:20:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"},"typeName":{"id":97296,"nodeType":"UserDefinedTypeName","pathNode":{"id":97295,"name":"Timestamp","nodeType":"IdentifierPath","referencedDeclaration":103261,"src":"2647:9:163"},"referencedDeclaration":103261,"src":"2647:9:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"}},"visibility":"internal"}],"src":"2625:43:163"},"scope":97682,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":97346,"nodeType":"FunctionDefinition","src":"2857:235:163","nodes":[],"body":{"id":97345,"nodeType":"Block","src":"3008:84:163","nodes":[],"statements":[{"expression":{"id":97343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":97334,"name":"gameType_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97326,"src":"3019:9:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},{"id":97335,"name":"timestamp_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97329,"src":"3030:10:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"}},{"id":97336,"name":"proxy_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97332,"src":"3042:6:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}}],"id":97337,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3018:31:163","typeDescriptions":{"typeIdentifier":"t_tuple$_t_userDefinedValueType$_GameType_$103271_$_t_userDefinedValueType$_Timestamp_$103261_$_t_contract$_IDisputeGame_$100327_$","typeString":"tuple(GameType,Timestamp,contract IDisputeGame)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":97338,"name":"_disputeGameList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97239,"src":"3052:16:163","typeDescriptions":{"typeIdentifier":"t_array$_t_userDefinedValueType$_GameId_$103265_$dyn_storage","typeString":"GameId[] storage ref"}},"id":97340,"indexExpression":{"id":97339,"name":"_index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97322,"src":"3069:6:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3052:24:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameId_$103265","typeString":"GameId"}},"id":97341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"unpack","nodeType":"MemberAccess","referencedDeclaration":100777,"src":"3052:31:163","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_GameId_$103265_$returns$_t_userDefinedValueType$_GameType_$103271_$_t_userDefinedValueType$_Timestamp_$103261_$_t_contract$_IDisputeGame_$100327_$bound_to$_t_userDefinedValueType$_GameId_$103265_$","typeString":"function (GameId) pure returns (GameType,Timestamp,contract IDisputeGame)"}},"id":97342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3052:33:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_userDefinedValueType$_GameType_$103271_$_t_userDefinedValueType$_Timestamp_$103261_$_t_contract$_IDisputeGame_$100327_$","typeString":"tuple(GameType,Timestamp,contract IDisputeGame)"}},"src":"3018:67:163","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":97344,"nodeType":"ExpressionStatement","src":"3018:67:163"}]},"baseFunctions":[100413],"documentation":{"id":97320,"nodeType":"StructuredDocumentation","src":"2817:35:163","text":"@inheritdoc IDisputeGameFactory"},"functionSelector":"bb8aa1fc","implemented":true,"kind":"function","modifiers":[],"name":"gameAtIndex","nameLocation":"2866:11:163","parameters":{"id":97323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":97322,"mutability":"mutable","name":"_index","nameLocation":"2886:6:163","nodeType":"VariableDeclaration","scope":97346,"src":"2878:14:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":97321,"name":"uint256","nodeType":"ElementaryTypeName","src":"2878:7:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2877:16:163"},"returnParameters":{"id":97333,"nodeType":"ParameterList","parameters":[{"constant":false,"id":97326,"mutability":"mutable","name":"gameType_","nameLocation":"2950:9:163","nodeType":"VariableDeclaration","scope":97346,"src":"2941:18:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"},"typeName":{"id":97325,"nodeType":"UserDefinedTypeName","pathNode":{"id":97324,"name":"GameType","nodeType":"IdentifierPath","referencedDeclaration":103271,"src":"2941:8:163"},"referencedDeclaration":103271,"src":"2941:8:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"visibility":"internal"},{"constant":false,"id":97329,"mutability":"mutable","name":"timestamp_","nameLocation":"2971:10:163","nodeType":"VariableDeclaration","scope":97346,"src":"2961:20:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"},"typeName":{"id":97328,"nodeType":"UserDefinedTypeName","pathNode":{"id":97327,"name":"Timestamp","nodeType":"IdentifierPath","referencedDeclaration":103261,"src":"2961:9:163"},"referencedDeclaration":103261,"src":"2961:9:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"}},"visibility":"internal"},{"constant":false,"id":97332,"mutability":"mutable","name":"proxy_","nameLocation":"2996:6:163","nodeType":"VariableDeclaration","scope":97346,"src":"2983:19:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"},"typeName":{"id":97331,"nodeType":"UserDefinedTypeName","pathNode":{"id":97330,"name":"IDisputeGame","nodeType":"IdentifierPath","referencedDeclaration":100327,"src":"2983:12:163"},"referencedDeclaration":100327,"src":"2983:12:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"visibility":"internal"}],"src":"2940:63:163"},"scope":97682,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":97492,"nodeType":"FunctionDefinition","src":"3138:2553:163","nodes":[],"body":{"id":97491,"nodeType":"Block","src":"3324:2367:163","nodes":[],"statements":[{"assignments":[97363],"declarations":[{"constant":false,"id":97363,"mutability":"mutable","name":"impl","nameLocation":"3417:4:163","nodeType":"VariableDeclaration","scope":97491,"src":"3404:17:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"},"typeName":{"id":97362,"nodeType":"UserDefinedTypeName","pathNode":{"id":97361,"name":"IDisputeGame","nodeType":"IdentifierPath","referencedDeclaration":100327,"src":"3404:12:163"},"referencedDeclaration":100327,"src":"3404:12:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"visibility":"internal"}],"id":97367,"initialValue":{"baseExpression":{"id":97364,"name":"gameImpls","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97221,"src":"3424:9:163","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_GameType_$103271_$_t_contract$_IDisputeGame_$100327_$","typeString":"mapping(GameType => contract IDisputeGame)"}},"id":97366,"indexExpression":{"id":97365,"name":"_gameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97350,"src":"3434:9:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3424:20:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"nodeType":"VariableDeclarationStatement","src":"3404:40:163"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":97376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":97370,"name":"impl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97363,"src":"3551:4:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}],"id":97369,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3543:7:163","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":97368,"name":"address","nodeType":"ElementaryTypeName","src":"3543:7:163","typeDescriptions":{}}},"id":97371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3543:13:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":97374,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3568:1:163","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":97373,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3560:7:163","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":97372,"name":"address","nodeType":"ElementaryTypeName","src":"3560:7:163","typeDescriptions":{}}},"id":97375,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3560:10:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3543:27:163","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":97381,"nodeType":"IfStatement","src":"3539:67:163","trueBody":{"errorCall":{"arguments":[{"id":97378,"name":"_gameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97350,"src":"3596:9:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}],"id":97377,"name":"NoImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103105,"src":"3579:16:163","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_userDefinedValueType$_GameType_$103271_$returns$__$","typeString":"function (GameType) pure"}},"id":97379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3579:27:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":97380,"nodeType":"RevertStatement","src":"3572:34:163"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":97387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":97382,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3688:3:163","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":97383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"3688:9:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"baseExpression":{"id":97384,"name":"initBonds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97227,"src":"3701:9:163","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_GameType_$103271_$_t_uint256_$","typeString":"mapping(GameType => uint256)"}},"id":97386,"indexExpression":{"id":97385,"name":"_gameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97350,"src":"3711:9:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3701:20:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3688:33:163","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":97391,"nodeType":"IfStatement","src":"3684:67:163","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":97388,"name":"IncorrectBondAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103123,"src":"3730:19:163","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":97389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3730:21:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":97390,"nodeType":"RevertStatement","src":"3723:28:163"}},{"assignments":[97393],"declarations":[{"constant":false,"id":97393,"mutability":"mutable","name":"parentHash","nameLocation":"3815:10:163","nodeType":"VariableDeclaration","scope":97491,"src":"3807:18:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":97392,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3807:7:163","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":97400,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":97398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":97395,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3838:5:163","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":97396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"number","nodeType":"MemberAccess","src":"3838:12:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":97397,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3853:1:163","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3838:16:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":97394,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"3828:9:163","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":97399,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3828:27:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3807:48:163"},{"expression":{"id":97418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":97401,"name":"proxy_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97359,"src":"4868:6:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":97410,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4927:3:163","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":97411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"4927:10:163","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":97412,"name":"_rootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97353,"src":"4939:10:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"id":97413,"name":"parentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97393,"src":"4951:10:163","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":97414,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97355,"src":"4963:10:163","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":97408,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4910:3:163","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":97409,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"4910:16:163","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":97415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4910:64:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":97405,"name":"impl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97363,"src":"4898:4:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}],"id":97404,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4890:7:163","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":97403,"name":"address","nodeType":"ElementaryTypeName","src":"4890:7:163","typeDescriptions":{}}},"id":97406,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4890:13:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":97407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"clone","nodeType":"MemberAccess","referencedDeclaration":62515,"src":"4890:19:163","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_address_$","typeString":"function (address,bytes memory) returns (address)"}},"id":97416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4890:85:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":97402,"name":"IDisputeGame","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100327,"src":"4877:12:163","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IDisputeGame_$100327_$","typeString":"type(contract IDisputeGame)"}},"id":97417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4877:99:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"src":"4868:108:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"id":97419,"nodeType":"ExpressionStatement","src":"4868:108:163"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"argumentTypes":[],"expression":{"id":97420,"name":"proxy_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97359,"src":"4986:6:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"id":97422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":100615,"src":"4986:17:163","typeDescriptions":{"typeIdentifier":"t_function_external_payable$__$returns$__$","typeString":"function () payable external"}},"id":97425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":97423,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5012:3:163","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":97424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"5012:9:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"4986:37:163","typeDescriptions":{"typeIdentifier":"t_function_external_payable$__$returns$__$value","typeString":"function () payable external"}},"id":97426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4986:39:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":97427,"nodeType":"ExpressionStatement","src":"4986:39:163"},{"assignments":[97430],"declarations":[{"constant":false,"id":97430,"mutability":"mutable","name":"uuid","nameLocation":"5104:4:163","nodeType":"VariableDeclaration","scope":97491,"src":"5099:9:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"},"typeName":{"id":97429,"nodeType":"UserDefinedTypeName","pathNode":{"id":97428,"name":"Hash","nodeType":"IdentifierPath","referencedDeclaration":103253,"src":"5099:4:163"},"referencedDeclaration":103253,"src":"5099:4:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"visibility":"internal"}],"id":97436,"initialValue":{"arguments":[{"id":97432,"name":"_gameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97350,"src":"5123:9:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},{"id":97433,"name":"_rootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97353,"src":"5134:10:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"id":97434,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97355,"src":"5146:10:163","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"},{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":97431,"name":"getGameUUID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97522,"src":"5111:11:163","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_GameType_$103271_$_t_userDefinedValueType$_Claim_$103255_$_t_bytes_calldata_ptr_$returns$_t_userDefinedValueType$_Hash_$103253_$","typeString":"function (GameType,Claim,bytes calldata) pure returns (Hash)"}},"id":97435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5111:46:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"nodeType":"VariableDeclarationStatement","src":"5099:58:163"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":97447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"id":97439,"name":"_disputeGames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97234,"src":"5258:13:163","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_Hash_$103253_$_t_userDefinedValueType$_GameId_$103265_$","typeString":"mapping(Hash => GameId)"}},"id":97441,"indexExpression":{"id":97440,"name":"uuid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97430,"src":"5272:4:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5258:19:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameId_$103265","typeString":"GameId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_GameId_$103265","typeString":"GameId"}],"expression":{"id":97437,"name":"GameId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103265,"src":"5244:6:163","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_GameId_$103265_$","typeString":"type(GameId)"}},"id":97438,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"unwrap","nodeType":"MemberAccess","src":"5244:13:163","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_GameId_$103265_$returns$_t_bytes32_$","typeString":"function (GameId) pure returns (bytes32)"}},"id":97442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5244:34:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":97445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5290:1:163","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":97444,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5282:7:163","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":97443,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5282:7:163","typeDescriptions":{}}},"id":97446,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5282:10:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5244:48:163","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":97452,"nodeType":"IfStatement","src":"5240:84:163","trueBody":{"errorCall":{"arguments":[{"id":97449,"name":"uuid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97430,"src":"5319:4:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}],"id":97448,"name":"GameAlreadyExists","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103111,"src":"5301:17:163","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_userDefinedValueType$_Hash_$103253_$returns$__$","typeString":"function (Hash) pure"}},"id":97450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5301:23:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":97451,"nodeType":"RevertStatement","src":"5294:30:163"}},{"assignments":[97455],"declarations":[{"constant":false,"id":97455,"mutability":"mutable","name":"id","nameLocation":"5371:2:163","nodeType":"VariableDeclaration","scope":97491,"src":"5364:9:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameId_$103265","typeString":"GameId"},"typeName":{"id":97454,"nodeType":"UserDefinedTypeName","pathNode":{"id":97453,"name":"GameId","nodeType":"IdentifierPath","referencedDeclaration":103265,"src":"5364:6:163"},"referencedDeclaration":103265,"src":"5364:6:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameId_$103265","typeString":"GameId"}},"visibility":"internal"}],"id":97469,"initialValue":{"arguments":[{"id":97458,"name":"_gameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97350,"src":"5391:9:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},{"arguments":[{"arguments":[{"expression":{"id":97463,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"5424:5:163","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":97464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"5424:15:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":97462,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5417:6:163","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":97461,"name":"uint64","nodeType":"ElementaryTypeName","src":"5417:6:163","typeDescriptions":{}}},"id":97465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5417:23:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"expression":{"id":97459,"name":"Timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103261,"src":"5402:9:163","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Timestamp_$103261_$","typeString":"type(Timestamp)"}},"id":97460,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","src":"5402:14:163","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_uint64_$returns$_t_userDefinedValueType$_Timestamp_$103261_$","typeString":"function (uint64) pure returns (Timestamp)"}},"id":97466,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5402:39:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"}},{"id":97467,"name":"proxy_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97359,"src":"5443:6:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"},{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"},{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}],"expression":{"id":97456,"name":"LibGameId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100778,"src":"5376:9:163","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibGameId_$100778_$","typeString":"type(library LibGameId)"}},"id":97457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"pack","nodeType":"MemberAccess","referencedDeclaration":100759,"src":"5376:14:163","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_GameType_$103271_$_t_userDefinedValueType$_Timestamp_$103261_$_t_contract$_IDisputeGame_$100327_$returns$_t_userDefinedValueType$_GameId_$103265_$","typeString":"function (GameType,Timestamp,contract IDisputeGame) pure returns (GameId)"}},"id":97468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5376:74:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameId_$103265","typeString":"GameId"}},"nodeType":"VariableDeclarationStatement","src":"5364:86:163"},{"expression":{"id":97474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":97470,"name":"_disputeGames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97234,"src":"5552:13:163","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_Hash_$103253_$_t_userDefinedValueType$_GameId_$103265_$","typeString":"mapping(Hash => GameId)"}},"id":97472,"indexExpression":{"id":97471,"name":"uuid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97430,"src":"5566:4:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5552:19:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameId_$103265","typeString":"GameId"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":97473,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97455,"src":"5574:2:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameId_$103265","typeString":"GameId"}},"src":"5552:24:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameId_$103265","typeString":"GameId"}},"id":97475,"nodeType":"ExpressionStatement","src":"5552:24:163"},{"expression":{"arguments":[{"id":97479,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97455,"src":"5608:2:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameId_$103265","typeString":"GameId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_GameId_$103265","typeString":"GameId"}],"expression":{"id":97476,"name":"_disputeGameList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97239,"src":"5586:16:163","typeDescriptions":{"typeIdentifier":"t_array$_t_userDefinedValueType$_GameId_$103265_$dyn_storage","typeString":"GameId[] storage ref"}},"id":97478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"push","nodeType":"MemberAccess","src":"5586:21:163","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_userDefinedValueType$_GameId_$103265_$dyn_storage_ptr_$_t_userDefinedValueType$_GameId_$103265_$returns$__$bound_to$_t_array$_t_userDefinedValueType$_GameId_$103265_$dyn_storage_ptr_$","typeString":"function (GameId[] storage pointer,GameId)"}},"id":97480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5586:25:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":97481,"nodeType":"ExpressionStatement","src":"5586:25:163"},{"eventCall":{"arguments":[{"arguments":[{"id":97485,"name":"proxy_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97359,"src":"5653:6:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}],"id":97484,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5645:7:163","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":97483,"name":"address","nodeType":"ElementaryTypeName","src":"5645:7:163","typeDescriptions":{}}},"id":97486,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5645:15:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":97487,"name":"_gameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97350,"src":"5662:9:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},{"id":97488,"name":"_rootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97353,"src":"5673:10:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"},{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}],"id":97482,"name":"DisputeGameCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100344,"src":"5626:18:163","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_userDefinedValueType$_GameType_$103271_$_t_userDefinedValueType$_Claim_$103255_$returns$__$","typeString":"function (address,GameType,Claim)"}},"id":97489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5626:58:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":97490,"nodeType":"EmitStatement","src":"5621:63:163"}]},"baseFunctions":[100447],"documentation":{"id":97347,"nodeType":"StructuredDocumentation","src":"3098:35:163","text":"@inheritdoc IDisputeGameFactory"},"functionSelector":"82ecf2f6","implemented":true,"kind":"function","modifiers":[],"name":"create","nameLocation":"3147:6:163","parameters":{"id":97356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":97350,"mutability":"mutable","name":"_gameType","nameLocation":"3172:9:163","nodeType":"VariableDeclaration","scope":97492,"src":"3163:18:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"},"typeName":{"id":97349,"nodeType":"UserDefinedTypeName","pathNode":{"id":97348,"name":"GameType","nodeType":"IdentifierPath","referencedDeclaration":103271,"src":"3163:8:163"},"referencedDeclaration":103271,"src":"3163:8:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"visibility":"internal"},{"constant":false,"id":97353,"mutability":"mutable","name":"_rootClaim","nameLocation":"3197:10:163","nodeType":"VariableDeclaration","scope":97492,"src":"3191:16:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":97352,"nodeType":"UserDefinedTypeName","pathNode":{"id":97351,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"3191:5:163"},"referencedDeclaration":103255,"src":"3191:5:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"},{"constant":false,"id":97355,"mutability":"mutable","name":"_extraData","nameLocation":"3232:10:163","nodeType":"VariableDeclaration","scope":97492,"src":"3217:25:163","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":97354,"name":"bytes","nodeType":"ElementaryTypeName","src":"3217:5:163","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3153:95:163"},"returnParameters":{"id":97360,"nodeType":"ParameterList","parameters":[{"constant":false,"id":97359,"mutability":"mutable","name":"proxy_","nameLocation":"3312:6:163","nodeType":"VariableDeclaration","scope":97492,"src":"3299:19:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"},"typeName":{"id":97358,"nodeType":"UserDefinedTypeName","pathNode":{"id":97357,"name":"IDisputeGame","nodeType":"IdentifierPath","referencedDeclaration":100327,"src":"3299:12:163"},"referencedDeclaration":100327,"src":"3299:12:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"visibility":"internal"}],"src":"3298:21:163"},"scope":97682,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":97522,"nodeType":"FunctionDefinition","src":"5737:269:163","nodes":[],"body":{"id":97521,"nodeType":"Block","src":"5914:92:163","nodes":[],"statements":[{"expression":{"id":97519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":97507,"name":"uuid_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97505,"src":"5924:5:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"id":97513,"name":"_gameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97496,"src":"5963:9:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},{"id":97514,"name":"_rootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97499,"src":"5974:10:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"id":97515,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97501,"src":"5986:10:163","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"},{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":97511,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5952:3:163","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":97512,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"5952:10:163","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":97516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5952:45:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":97510,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5942:9:163","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":97517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5942:56:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":97508,"name":"Hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103253,"src":"5932:4:163","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Hash_$103253_$","typeString":"type(Hash)"}},"id":97509,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","src":"5932:9:163","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Hash_$103253_$","typeString":"function (bytes32) pure returns (Hash)"}},"id":97518,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5932:67:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"src":"5924:75:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"id":97520,"nodeType":"ExpressionStatement","src":"5924:75:163"}]},"baseFunctions":[100481],"documentation":{"id":97493,"nodeType":"StructuredDocumentation","src":"5697:35:163","text":"@inheritdoc IDisputeGameFactory"},"functionSelector":"96cd9720","implemented":true,"kind":"function","modifiers":[],"name":"getGameUUID","nameLocation":"5746:11:163","parameters":{"id":97502,"nodeType":"ParameterList","parameters":[{"constant":false,"id":97496,"mutability":"mutable","name":"_gameType","nameLocation":"5776:9:163","nodeType":"VariableDeclaration","scope":97522,"src":"5767:18:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"},"typeName":{"id":97495,"nodeType":"UserDefinedTypeName","pathNode":{"id":97494,"name":"GameType","nodeType":"IdentifierPath","referencedDeclaration":103271,"src":"5767:8:163"},"referencedDeclaration":103271,"src":"5767:8:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"visibility":"internal"},{"constant":false,"id":97499,"mutability":"mutable","name":"_rootClaim","nameLocation":"5801:10:163","nodeType":"VariableDeclaration","scope":97522,"src":"5795:16:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":97498,"nodeType":"UserDefinedTypeName","pathNode":{"id":97497,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"5795:5:163"},"referencedDeclaration":103255,"src":"5795:5:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"},{"constant":false,"id":97501,"mutability":"mutable","name":"_extraData","nameLocation":"5836:10:163","nodeType":"VariableDeclaration","scope":97522,"src":"5821:25:163","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":97500,"name":"bytes","nodeType":"ElementaryTypeName","src":"5821:5:163","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5757:95:163"},"returnParameters":{"id":97506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":97505,"mutability":"mutable","name":"uuid_","nameLocation":"5903:5:163","nodeType":"VariableDeclaration","scope":97522,"src":"5898:10:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"},"typeName":{"id":97504,"nodeType":"UserDefinedTypeName","pathNode":{"id":97503,"name":"Hash","nodeType":"IdentifierPath","referencedDeclaration":103253,"src":"5898:4:163"},"referencedDeclaration":103253,"src":"5898:4:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"visibility":"internal"}],"src":"5897:12:163"},"scope":97682,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":97631,"nodeType":"FunctionDefinition","src":"6052:1929:163","nodes":[],"body":{"id":97630,"nodeType":"Block","src":"6240:1741:163","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":97544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":97540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":97537,"name":"_start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97528,"src":"6374:6:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":97538,"name":"_disputeGameList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97239,"src":"6384:16:163","typeDescriptions":{"typeIdentifier":"t_array$_t_userDefinedValueType$_GameId_$103265_$dyn_storage","typeString":"GameId[] storage ref"}},"id":97539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"6384:23:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6374:33:163","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":97543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":97541,"name":"_n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97530,"src":"6411:2:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":97542,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6417:1:163","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6411:7:163","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6374:44:163","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":97547,"nodeType":"IfStatement","src":"6370:63:163","trueBody":{"expression":{"id":97545,"name":"games_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97535,"src":"6427:6:163","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_GameSearchResult_$100374_memory_ptr_$dyn_memory_ptr","typeString":"struct IDisputeGameFactory.GameSearchResult memory[] memory"}},"functionReturnParameters":97536,"id":97546,"nodeType":"Return","src":"6420:13:163"}},{"AST":{"nodeType":"YulBlock","src":"6660:109:163","statements":[{"nodeType":"YulAssignment","src":"6674:21:163","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6690:4:163","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6684:5:163"},"nodeType":"YulFunctionCall","src":"6684:11:163"},"variableNames":[{"name":"games_","nodeType":"YulIdentifier","src":"6674:6:163"}]},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6715:4:163","type":"","value":"0x40"},{"arguments":[{"name":"games_","nodeType":"YulIdentifier","src":"6725:6:163"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6737:4:163","type":"","value":"0x20"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6747:4:163","type":"","value":"0x05"},{"name":"_n","nodeType":"YulIdentifier","src":"6753:2:163"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6743:3:163"},"nodeType":"YulFunctionCall","src":"6743:13:163"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6733:3:163"},"nodeType":"YulFunctionCall","src":"6733:24:163"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6721:3:163"},"nodeType":"YulFunctionCall","src":"6721:37:163"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6708:6:163"},"nodeType":"YulFunctionCall","src":"6708:51:163"},"nodeType":"YulExpressionStatement","src":"6708:51:163"}]},"evmVersion":"london","externalReferences":[{"declaration":97530,"isOffset":false,"isSlot":false,"src":"6753:2:163","valueSize":1},{"declaration":97535,"isOffset":false,"isSlot":false,"src":"6674:6:163","valueSize":1},{"declaration":97535,"isOffset":false,"isSlot":false,"src":"6725:6:163","valueSize":1}],"id":97548,"nodeType":"InlineAssembly","src":"6651:118:163"},{"body":{"id":97628,"nodeType":"Block","src":"6923:1052:163","statements":[{"assignments":[97562],"declarations":[{"constant":false,"id":97562,"mutability":"mutable","name":"id","nameLocation":"6944:2:163","nodeType":"VariableDeclaration","scope":97628,"src":"6937:9:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameId_$103265","typeString":"GameId"},"typeName":{"id":97561,"nodeType":"UserDefinedTypeName","pathNode":{"id":97560,"name":"GameId","nodeType":"IdentifierPath","referencedDeclaration":103265,"src":"6937:6:163"},"referencedDeclaration":103265,"src":"6937:6:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameId_$103265","typeString":"GameId"}},"visibility":"internal"}],"id":97566,"initialValue":{"baseExpression":{"id":97563,"name":"_disputeGameList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97239,"src":"6949:16:163","typeDescriptions":{"typeIdentifier":"t_array$_t_userDefinedValueType$_GameId_$103265_$dyn_storage","typeString":"GameId[] storage ref"}},"id":97565,"indexExpression":{"id":97564,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97550,"src":"6966:1:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6949:19:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameId_$103265","typeString":"GameId"}},"nodeType":"VariableDeclarationStatement","src":"6937:31:163"},{"assignments":[97569,97572,97575],"declarations":[{"constant":false,"id":97569,"mutability":"mutable","name":"gameType","nameLocation":"6992:8:163","nodeType":"VariableDeclaration","scope":97628,"src":"6983:17:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"},"typeName":{"id":97568,"nodeType":"UserDefinedTypeName","pathNode":{"id":97567,"name":"GameType","nodeType":"IdentifierPath","referencedDeclaration":103271,"src":"6983:8:163"},"referencedDeclaration":103271,"src":"6983:8:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"visibility":"internal"},{"constant":false,"id":97572,"mutability":"mutable","name":"timestamp","nameLocation":"7012:9:163","nodeType":"VariableDeclaration","scope":97628,"src":"7002:19:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"},"typeName":{"id":97571,"nodeType":"UserDefinedTypeName","pathNode":{"id":97570,"name":"Timestamp","nodeType":"IdentifierPath","referencedDeclaration":103261,"src":"7002:9:163"},"referencedDeclaration":103261,"src":"7002:9:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"}},"visibility":"internal"},{"constant":false,"id":97575,"mutability":"mutable","name":"proxy","nameLocation":"7036:5:163","nodeType":"VariableDeclaration","scope":97628,"src":"7023:18:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"},"typeName":{"id":97574,"nodeType":"UserDefinedTypeName","pathNode":{"id":97573,"name":"IDisputeGame","nodeType":"IdentifierPath","referencedDeclaration":100327,"src":"7023:12:163"},"referencedDeclaration":100327,"src":"7023:12:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"visibility":"internal"}],"id":97579,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":97576,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97562,"src":"7045:2:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameId_$103265","typeString":"GameId"}},"id":97577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"unpack","nodeType":"MemberAccess","referencedDeclaration":100777,"src":"7045:9:163","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_GameId_$103265_$returns$_t_userDefinedValueType$_GameType_$103271_$_t_userDefinedValueType$_Timestamp_$103261_$_t_contract$_IDisputeGame_$100327_$bound_to$_t_userDefinedValueType$_GameId_$103265_$","typeString":"function (GameId) pure returns (GameType,Timestamp,contract IDisputeGame)"}},"id":97578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7045:11:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_userDefinedValueType$_GameType_$103271_$_t_userDefinedValueType$_Timestamp_$103261_$_t_contract$_IDisputeGame_$100327_$","typeString":"tuple(GameType,Timestamp,contract IDisputeGame)"}},"nodeType":"VariableDeclarationStatement","src":"6982:74:163"},{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":97586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":97580,"name":"gameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97569,"src":"7075:8:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"id":97581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101150,"src":"7075:12:163","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_GameType_$103271_$returns$_t_uint32_$bound_to$_t_userDefinedValueType$_GameType_$103271_$","typeString":"function (GameType) pure returns (uint32)"}},"id":97582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7075:14:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":97583,"name":"_gameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97526,"src":"7093:9:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"id":97584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101150,"src":"7093:13:163","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_GameType_$103271_$returns$_t_uint32_$bound_to$_t_userDefinedValueType$_GameType_$103271_$","typeString":"function (GameType) pure returns (uint32)"}},"id":97585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7093:15:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"7075:33:163","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":97623,"nodeType":"IfStatement","src":"7071:834:163","trueBody":{"id":97622,"nodeType":"Block","src":"7110:795:163","statements":[{"AST":{"nodeType":"YulBlock","src":"7377:80:163","statements":[{"expression":{"arguments":[{"name":"games_","nodeType":"YulIdentifier","src":"7406:6:163"},{"arguments":[{"arguments":[{"name":"games_","nodeType":"YulIdentifier","src":"7424:6:163"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7418:5:163"},"nodeType":"YulFunctionCall","src":"7418:13:163"},{"kind":"number","nodeType":"YulLiteral","src":"7433:4:163","type":"","value":"0x01"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7414:3:163"},"nodeType":"YulFunctionCall","src":"7414:24:163"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7399:6:163"},"nodeType":"YulFunctionCall","src":"7399:40:163"},"nodeType":"YulExpressionStatement","src":"7399:40:163"}]},"evmVersion":"london","externalReferences":[{"declaration":97535,"isOffset":false,"isSlot":false,"src":"7406:6:163","valueSize":1},{"declaration":97535,"isOffset":false,"isSlot":false,"src":"7424:6:163","valueSize":1}],"id":97587,"nodeType":"InlineAssembly","src":"7368:89:163"},{"assignments":[97589],"declarations":[{"constant":false,"id":97589,"mutability":"mutable","name":"extraData","nameLocation":"7488:9:163","nodeType":"VariableDeclaration","scope":97622,"src":"7475:22:163","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":97588,"name":"bytes","nodeType":"ElementaryTypeName","src":"7475:5:163","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":97593,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":97590,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97575,"src":"7500:5:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"id":97591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"extraData","nodeType":"MemberAccess","referencedDeclaration":100307,"src":"7500:15:163","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure external returns (bytes memory)"}},"id":97592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7500:17:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"7475:42:163"},{"assignments":[97596],"declarations":[{"constant":false,"id":97596,"mutability":"mutable","name":"rootClaim","nameLocation":"7541:9:163","nodeType":"VariableDeclaration","scope":97622,"src":"7535:15:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":97595,"nodeType":"UserDefinedTypeName","pathNode":{"id":97594,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"7535:5:163"},"referencedDeclaration":103255,"src":"7535:5:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"}],"id":97600,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":97597,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97575,"src":"7553:5:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"id":97598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rootClaim","nodeType":"MemberAccess","referencedDeclaration":100294,"src":"7553:15:163","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_userDefinedValueType$_Claim_$103255_$","typeString":"function () pure external returns (Claim)"}},"id":97599,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7553:17:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"nodeType":"VariableDeclarationStatement","src":"7535:35:163"},{"expression":{"id":97614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":97601,"name":"games_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97535,"src":"7588:6:163","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_GameSearchResult_$100374_memory_ptr_$dyn_memory_ptr","typeString":"struct IDisputeGameFactory.GameSearchResult memory[] memory"}},"id":97606,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":97605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":97602,"name":"games_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97535,"src":"7595:6:163","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_GameSearchResult_$100374_memory_ptr_$dyn_memory_ptr","typeString":"struct IDisputeGameFactory.GameSearchResult memory[] memory"}},"id":97603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"7595:13:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":97604,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7611:1:163","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7595:17:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7588:25:163","typeDescriptions":{"typeIdentifier":"t_struct$_GameSearchResult_$100374_memory_ptr","typeString":"struct IDisputeGameFactory.GameSearchResult memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":97608,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97550,"src":"7662:1:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":97609,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97562,"src":"7695:2:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameId_$103265","typeString":"GameId"}},{"id":97610,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97572,"src":"7730:9:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"}},{"id":97611,"name":"rootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97596,"src":"7772:9:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"id":97612,"name":"extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97589,"src":"7814:9:163","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_userDefinedValueType$_GameId_$103265","typeString":"GameId"},{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"},{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":97607,"name":"GameSearchResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100374,"src":"7616:16:163","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_GameSearchResult_$100374_storage_ptr_$","typeString":"type(struct IDisputeGameFactory.GameSearchResult storage pointer)"}},"id":97613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["index","metadata","timestamp","rootClaim","extraData"],"nodeType":"FunctionCall","src":"7616:226:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GameSearchResult_$100374_memory_ptr","typeString":"struct IDisputeGameFactory.GameSearchResult memory"}},"src":"7588:254:163","typeDescriptions":{"typeIdentifier":"t_struct$_GameSearchResult_$100374_memory_ptr","typeString":"struct IDisputeGameFactory.GameSearchResult memory"}},"id":97615,"nodeType":"ExpressionStatement","src":"7588:254:163"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":97619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":97616,"name":"games_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97535,"src":"7864:6:163","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_GameSearchResult_$100374_memory_ptr_$dyn_memory_ptr","typeString":"struct IDisputeGameFactory.GameSearchResult memory[] memory"}},"id":97617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"7864:13:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":97618,"name":"_n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97530,"src":"7881:2:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7864:19:163","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":97621,"nodeType":"IfStatement","src":"7860:30:163","trueBody":{"id":97620,"nodeType":"Break","src":"7885:5:163"}}]}},{"id":97627,"nodeType":"UncheckedBlock","src":"7919:46:163","statements":[{"expression":{"id":97625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":false,"src":"7947:3:163","subExpression":{"id":97624,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97550,"src":"7947:1:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":97626,"nodeType":"ExpressionStatement","src":"7947:3:163"}]}]},"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":97559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":97555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":97553,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97550,"src":"6899:1:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"30","id":97554,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6904:1:163","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6899:6:163","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":97558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":97556,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97550,"src":"6909:1:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":97557,"name":"_start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97528,"src":"6914:6:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6909:11:163","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6899:21:163","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":97629,"initializationExpression":{"assignments":[97550],"declarations":[{"constant":false,"id":97550,"mutability":"mutable","name":"i","nameLocation":"6887:1:163","nodeType":"VariableDeclaration","scope":97629,"src":"6879:9:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":97549,"name":"uint256","nodeType":"ElementaryTypeName","src":"6879:7:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":97552,"initialValue":{"id":97551,"name":"_start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97528,"src":"6891:6:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6879:18:163"},"nodeType":"ForStatement","src":"6874:1101:163"}]},"baseFunctions":[100496],"documentation":{"id":97523,"nodeType":"StructuredDocumentation","src":"6012:35:163","text":"@inheritdoc IDisputeGameFactory"},"functionSelector":"254bd683","implemented":true,"kind":"function","modifiers":[],"name":"findLatestGames","nameLocation":"6061:15:163","parameters":{"id":97531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":97526,"mutability":"mutable","name":"_gameType","nameLocation":"6095:9:163","nodeType":"VariableDeclaration","scope":97631,"src":"6086:18:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"},"typeName":{"id":97525,"nodeType":"UserDefinedTypeName","pathNode":{"id":97524,"name":"GameType","nodeType":"IdentifierPath","referencedDeclaration":103271,"src":"6086:8:163"},"referencedDeclaration":103271,"src":"6086:8:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"visibility":"internal"},{"constant":false,"id":97528,"mutability":"mutable","name":"_start","nameLocation":"6122:6:163","nodeType":"VariableDeclaration","scope":97631,"src":"6114:14:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":97527,"name":"uint256","nodeType":"ElementaryTypeName","src":"6114:7:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":97530,"mutability":"mutable","name":"_n","nameLocation":"6146:2:163","nodeType":"VariableDeclaration","scope":97631,"src":"6138:10:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":97529,"name":"uint256","nodeType":"ElementaryTypeName","src":"6138:7:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6076:78:163"},"returnParameters":{"id":97536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":97535,"mutability":"mutable","name":"games_","nameLocation":"6228:6:163","nodeType":"VariableDeclaration","scope":97631,"src":"6202:32:163","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_GameSearchResult_$100374_memory_ptr_$dyn_memory_ptr","typeString":"struct IDisputeGameFactory.GameSearchResult[]"},"typeName":{"baseType":{"id":97533,"nodeType":"UserDefinedTypeName","pathNode":{"id":97532,"name":"GameSearchResult","nodeType":"IdentifierPath","referencedDeclaration":100374,"src":"6202:16:163"},"referencedDeclaration":100374,"src":"6202:16:163","typeDescriptions":{"typeIdentifier":"t_struct$_GameSearchResult_$100374_storage_ptr","typeString":"struct IDisputeGameFactory.GameSearchResult"}},"id":97534,"nodeType":"ArrayTypeName","src":"6202:18:163","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_GameSearchResult_$100374_storage_$dyn_storage_ptr","typeString":"struct IDisputeGameFactory.GameSearchResult[]"}},"visibility":"internal"}],"src":"6201:34:163"},"scope":97682,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":97658,"nodeType":"FunctionDefinition","src":"8027:190:163","nodes":[],"body":{"id":97657,"nodeType":"Block","src":"8113:104:163","nodes":[],"statements":[{"expression":{"id":97647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":97643,"name":"gameImpls","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97221,"src":"8123:9:163","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_GameType_$103271_$_t_contract$_IDisputeGame_$100327_$","typeString":"mapping(GameType => contract IDisputeGame)"}},"id":97645,"indexExpression":{"id":97644,"name":"_gameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97635,"src":"8133:9:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8123:20:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":97646,"name":"_impl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97638,"src":"8146:5:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"src":"8123:28:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"id":97648,"nodeType":"ExpressionStatement","src":"8123:28:163"},{"eventCall":{"arguments":[{"arguments":[{"id":97652,"name":"_impl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97638,"src":"8192:5:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}],"id":97651,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8184:7:163","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":97650,"name":"address","nodeType":"ElementaryTypeName","src":"8184:7:163","typeDescriptions":{}}},"id":97653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8184:14:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":97654,"name":"_gameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97635,"src":"8200:9:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}],"id":97649,"name":"ImplementationSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100352,"src":"8166:17:163","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_userDefinedValueType$_GameType_$103271_$returns$__$","typeString":"function (address,GameType)"}},"id":97655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8166:44:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":97656,"nodeType":"EmitStatement","src":"8161:49:163"}]},"baseFunctions":[100457],"documentation":{"id":97632,"nodeType":"StructuredDocumentation","src":"7987:35:163","text":"@inheritdoc IDisputeGameFactory"},"functionSelector":"14f6b1a3","implemented":true,"kind":"function","modifiers":[{"id":97641,"kind":"modifierInvocation","modifierName":{"id":97640,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":46877,"src":"8103:9:163"},"nodeType":"ModifierInvocation","src":"8103:9:163"}],"name":"setImplementation","nameLocation":"8036:17:163","parameters":{"id":97639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":97635,"mutability":"mutable","name":"_gameType","nameLocation":"8063:9:163","nodeType":"VariableDeclaration","scope":97658,"src":"8054:18:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"},"typeName":{"id":97634,"nodeType":"UserDefinedTypeName","pathNode":{"id":97633,"name":"GameType","nodeType":"IdentifierPath","referencedDeclaration":103271,"src":"8054:8:163"},"referencedDeclaration":103271,"src":"8054:8:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"visibility":"internal"},{"constant":false,"id":97638,"mutability":"mutable","name":"_impl","nameLocation":"8087:5:163","nodeType":"VariableDeclaration","scope":97658,"src":"8074:18:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"},"typeName":{"id":97637,"nodeType":"UserDefinedTypeName","pathNode":{"id":97636,"name":"IDisputeGame","nodeType":"IdentifierPath","referencedDeclaration":100327,"src":"8074:12:163"},"referencedDeclaration":100327,"src":"8074:12:163","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"visibility":"internal"}],"src":"8053:40:163"},"returnParameters":{"id":97642,"nodeType":"ParameterList","parameters":[],"src":"8113:0:163"},"scope":97682,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":97681,"nodeType":"FunctionDefinition","src":"8263:180:163","nodes":[],"body":{"id":97680,"nodeType":"Block","src":"8342:101:163","nodes":[],"statements":[{"expression":{"id":97673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":97669,"name":"initBonds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97227,"src":"8352:9:163","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_GameType_$103271_$_t_uint256_$","typeString":"mapping(GameType => uint256)"}},"id":97671,"indexExpression":{"id":97670,"name":"_gameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97662,"src":"8362:9:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8352:20:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":97672,"name":"_initBond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97664,"src":"8375:9:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8352:32:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":97674,"nodeType":"ExpressionStatement","src":"8352:32:163"},{"eventCall":{"arguments":[{"id":97676,"name":"_gameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97662,"src":"8415:9:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},{"id":97677,"name":"_initBond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97664,"src":"8426:9:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":97675,"name":"InitBondUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100360,"src":"8399:15:163","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_userDefinedValueType$_GameType_$103271_$_t_uint256_$returns$__$","typeString":"function (GameType,uint256)"}},"id":97678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8399:37:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":97679,"nodeType":"EmitStatement","src":"8394:42:163"}]},"baseFunctions":[100466],"documentation":{"id":97659,"nodeType":"StructuredDocumentation","src":"8223:35:163","text":"@inheritdoc IDisputeGameFactory"},"functionSelector":"1e334240","implemented":true,"kind":"function","modifiers":[{"id":97667,"kind":"modifierInvocation","modifierName":{"id":97666,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":46877,"src":"8332:9:163"},"nodeType":"ModifierInvocation","src":"8332:9:163"}],"name":"setInitBond","nameLocation":"8272:11:163","parameters":{"id":97665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":97662,"mutability":"mutable","name":"_gameType","nameLocation":"8293:9:163","nodeType":"VariableDeclaration","scope":97681,"src":"8284:18:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"},"typeName":{"id":97661,"nodeType":"UserDefinedTypeName","pathNode":{"id":97660,"name":"GameType","nodeType":"IdentifierPath","referencedDeclaration":103271,"src":"8284:8:163"},"referencedDeclaration":103271,"src":"8284:8:163","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"visibility":"internal"},{"constant":false,"id":97664,"mutability":"mutable","name":"_initBond","nameLocation":"8312:9:163","nodeType":"VariableDeclaration","scope":97681,"src":"8304:17:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":97663,"name":"uint256","nodeType":"ElementaryTypeName","src":"8304:7:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8283:39:163"},"returnParameters":{"id":97668,"nodeType":"ParameterList","parameters":[],"src":"8342:0:163"},"scope":97682,"stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":97202,"name":"OwnableUpgradeable","nodeType":"IdentifierPath","referencedDeclaration":46963,"src":"1020:18:163"},"id":97203,"nodeType":"InheritanceSpecifier","src":"1020:18:163"},{"baseName":{"id":97204,"name":"IDisputeGameFactory","nodeType":"IdentifierPath","referencedDeclaration":100497,"src":"1040:19:163"},"id":97205,"nodeType":"InheritanceSpecifier","src":"1040:19:163"},{"baseName":{"id":97206,"name":"ISemver","nodeType":"IdentifierPath","referencedDeclaration":109417,"src":"1061:7:163"},"id":97207,"nodeType":"InheritanceSpecifier","src":"1061:7:163"}],"canonicalName":"DisputeGameFactory","contractDependencies":[],"contractKind":"contract","documentation":{"id":97201,"nodeType":"StructuredDocumentation","src":"573:416:163","text":"@title DisputeGameFactory\n @notice A factory contract for creating `IDisputeGame` contracts. All created dispute games are stored in both a\n mapping and an append only array. The timestamp of the creation time of the dispute game is packed tightly\n into the storage slot with the address of the dispute game to make offchain discoverability of playable\n dispute games easier."},"fullyImplemented":true,"linearizedBaseContracts":[97682,109417,100497,46963,48502,47114],"name":"DisputeGameFactory","nameLocation":"998:18:163","scope":97683,"usedErrors":[103105,103111,103123]}],"license":"MIT"},"id":163} \ No newline at end of file diff --git a/packages/sdk/src/forge-artifacts/FaultDisputeGame.json b/packages/sdk/src/forge-artifacts/FaultDisputeGame.json deleted file mode 100644 index 0f6ea9b686d0..000000000000 --- a/packages/sdk/src/forge-artifacts/FaultDisputeGame.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"_gameType","type":"uint32","internalType":"GameType"},{"name":"_absolutePrestate","type":"bytes32","internalType":"Claim"},{"name":"_maxGameDepth","type":"uint256","internalType":"uint256"},{"name":"_splitDepth","type":"uint256","internalType":"uint256"},{"name":"_clockExtension","type":"uint64","internalType":"Duration"},{"name":"_maxClockDuration","type":"uint64","internalType":"Duration"},{"name":"_vm","type":"address","internalType":"contract IBigStepper"},{"name":"_weth","type":"address","internalType":"contract IDelayedWETH"},{"name":"_anchorStateRegistry","type":"address","internalType":"contract IAnchorStateRegistry"},{"name":"_l2ChainId","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"absolutePrestate","inputs":[],"outputs":[{"name":"absolutePrestate_","type":"bytes32","internalType":"Claim"}],"stateMutability":"view"},{"type":"function","name":"addLocalData","inputs":[{"name":"_ident","type":"uint256","internalType":"uint256"},{"name":"_execLeafIdx","type":"uint256","internalType":"uint256"},{"name":"_partOffset","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"anchorStateRegistry","inputs":[],"outputs":[{"name":"registry_","type":"address","internalType":"contract IAnchorStateRegistry"}],"stateMutability":"view"},{"type":"function","name":"attack","inputs":[{"name":"_parentIndex","type":"uint256","internalType":"uint256"},{"name":"_claim","type":"bytes32","internalType":"Claim"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"claimCredit","inputs":[{"name":"_recipient","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"claimData","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"parentIndex","type":"uint32","internalType":"uint32"},{"name":"counteredBy","type":"address","internalType":"address"},{"name":"claimant","type":"address","internalType":"address"},{"name":"bond","type":"uint128","internalType":"uint128"},{"name":"claim","type":"bytes32","internalType":"Claim"},{"name":"position","type":"uint128","internalType":"Position"},{"name":"clock","type":"uint128","internalType":"Clock"}],"stateMutability":"view"},{"type":"function","name":"claimDataLen","inputs":[],"outputs":[{"name":"len_","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"claims","inputs":[{"name":"","type":"bytes32","internalType":"ClaimHash"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"clockExtension","inputs":[],"outputs":[{"name":"clockExtension_","type":"uint64","internalType":"Duration"}],"stateMutability":"view"},{"type":"function","name":"createdAt","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"Timestamp"}],"stateMutability":"view"},{"type":"function","name":"credit","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"defend","inputs":[{"name":"_parentIndex","type":"uint256","internalType":"uint256"},{"name":"_claim","type":"bytes32","internalType":"Claim"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"extraData","inputs":[],"outputs":[{"name":"extraData_","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"gameCreator","inputs":[],"outputs":[{"name":"creator_","type":"address","internalType":"address"}],"stateMutability":"pure"},{"type":"function","name":"gameData","inputs":[],"outputs":[{"name":"gameType_","type":"uint32","internalType":"GameType"},{"name":"rootClaim_","type":"bytes32","internalType":"Claim"},{"name":"extraData_","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"gameType","inputs":[],"outputs":[{"name":"gameType_","type":"uint32","internalType":"GameType"}],"stateMutability":"view"},{"type":"function","name":"getChallengerDuration","inputs":[{"name":"_claimIndex","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"duration_","type":"uint64","internalType":"Duration"}],"stateMutability":"view"},{"type":"function","name":"getRequiredBond","inputs":[{"name":"_position","type":"uint128","internalType":"Position"}],"outputs":[{"name":"requiredBond_","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"l1Head","inputs":[],"outputs":[{"name":"l1Head_","type":"bytes32","internalType":"Hash"}],"stateMutability":"pure"},{"type":"function","name":"l2BlockNumber","inputs":[],"outputs":[{"name":"l2BlockNumber_","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"l2ChainId","inputs":[],"outputs":[{"name":"l2ChainId_","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"maxClockDuration","inputs":[],"outputs":[{"name":"maxClockDuration_","type":"uint64","internalType":"Duration"}],"stateMutability":"view"},{"type":"function","name":"maxGameDepth","inputs":[],"outputs":[{"name":"maxGameDepth_","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"move","inputs":[{"name":"_challengeIndex","type":"uint256","internalType":"uint256"},{"name":"_claim","type":"bytes32","internalType":"Claim"},{"name":"_isAttack","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"resolve","inputs":[],"outputs":[{"name":"status_","type":"uint8","internalType":"enum GameStatus"}],"stateMutability":"nonpayable"},{"type":"function","name":"resolveClaim","inputs":[{"name":"_claimIndex","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"resolvedAt","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"Timestamp"}],"stateMutability":"view"},{"type":"function","name":"resolvedSubgames","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"rootClaim","inputs":[],"outputs":[{"name":"rootClaim_","type":"bytes32","internalType":"Claim"}],"stateMutability":"pure"},{"type":"function","name":"splitDepth","inputs":[],"outputs":[{"name":"splitDepth_","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"startingBlockNumber","inputs":[],"outputs":[{"name":"startingBlockNumber_","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"startingOutputRoot","inputs":[],"outputs":[{"name":"root","type":"bytes32","internalType":"Hash"},{"name":"l2BlockNumber","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"startingRootHash","inputs":[],"outputs":[{"name":"startingRootHash_","type":"bytes32","internalType":"Hash"}],"stateMutability":"view"},{"type":"function","name":"status","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"enum GameStatus"}],"stateMutability":"view"},{"type":"function","name":"step","inputs":[{"name":"_claimIndex","type":"uint256","internalType":"uint256"},{"name":"_isAttack","type":"bool","internalType":"bool"},{"name":"_stateData","type":"bytes","internalType":"bytes"},{"name":"_proof","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"subgames","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"vm","inputs":[],"outputs":[{"name":"vm_","type":"address","internalType":"contract IBigStepper"}],"stateMutability":"view"},{"type":"function","name":"weth","inputs":[],"outputs":[{"name":"weth_","type":"address","internalType":"contract IDelayedWETH"}],"stateMutability":"view"},{"type":"event","name":"Move","inputs":[{"name":"parentIndex","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"claim","type":"bytes32","indexed":true,"internalType":"Claim"},{"name":"claimant","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Resolved","inputs":[{"name":"status","type":"uint8","indexed":true,"internalType":"enum GameStatus"}],"anonymous":false},{"type":"error","name":"AlreadyInitialized","inputs":[]},{"type":"error","name":"AnchorRootNotFound","inputs":[]},{"type":"error","name":"BondTransferFailed","inputs":[]},{"type":"error","name":"CannotDefendRootClaim","inputs":[]},{"type":"error","name":"ClaimAboveSplit","inputs":[]},{"type":"error","name":"ClaimAlreadyExists","inputs":[]},{"type":"error","name":"ClaimAlreadyResolved","inputs":[]},{"type":"error","name":"ClockNotExpired","inputs":[]},{"type":"error","name":"ClockTimeExceeded","inputs":[]},{"type":"error","name":"DuplicateStep","inputs":[]},{"type":"error","name":"GameDepthExceeded","inputs":[]},{"type":"error","name":"GameNotInProgress","inputs":[]},{"type":"error","name":"IncorrectBondAmount","inputs":[]},{"type":"error","name":"InvalidClockExtension","inputs":[]},{"type":"error","name":"InvalidLocalIdent","inputs":[]},{"type":"error","name":"InvalidParent","inputs":[]},{"type":"error","name":"InvalidPrestate","inputs":[]},{"type":"error","name":"InvalidSplitDepth","inputs":[]},{"type":"error","name":"MaxDepthTooLarge","inputs":[]},{"type":"error","name":"NoCreditToClaim","inputs":[]},{"type":"error","name":"OutOfOrderResolution","inputs":[]},{"type":"error","name":"UnexpectedRootClaim","inputs":[{"name":"rootClaim","type":"bytes32","internalType":"Claim"}]},{"type":"error","name":"ValidStep","inputs":[]}],"bytecode":{"object":"0x6101c06040523480156200001257600080fd5b5060405162004dfd38038062004dfd833981016040819052620000359162000187565b620000436001607e62000248565b60ff168811156200006757604051633beff19960e11b815260040160405180910390fd5b878710620000885760405163e62ccf3960e01b815260040160405180910390fd5b620000a7856001600160401b03166200014e60201b620029041760201c565b6001600160401b0316620000cf876001600160401b03166200014e60201b620029041760201c565b6001600160401b03161115620000f85760405163235dfb2b60e21b815260040160405180910390fd5b63ffffffff9099166101205260809790975260a09590955260c0939093526001600160401b039182166101a0521660e0526001600160a01b0390811661010052908116610140521661016052610180526200027a565b90565b80516001600160401b03811681146200016957600080fd5b919050565b6001600160a01b03811681146200018457600080fd5b50565b6000806000806000806000806000806101408b8d031215620001a857600080fd5b8a5163ffffffff81168114620001bd57600080fd5b809a505060208b0151985060408b0151975060608b01519650620001e460808c0162000151565b9550620001f460a08c0162000151565b945060c08b015162000206816200016e565b60e08c015190945062000219816200016e565b6101008c01519093506200022d816200016e565b809250506101208b015190509295989b9194979a5092959850565b600060ff821660ff8416808210156200027157634e487b7160e01b600052601160045260246000fd5b90039392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051614a0b620003f2600039600081816105c60152818161124f0152818161130d015261133701526000818161084a0152612b5501526000818161050b01528181610c1f015261186001526000818161045201528181610da50152818161170701528181611c610152613f310152600081816106a60152818161181f0152612bef01526000818161041f015281816124c6015261281b01526000818161089d015281816111e90152818161127a0152818161136f01528181611e6d01528181611eaf0152612ced0152600081816108d00152818161108f01528181611158015281816112d80152818161231901528181612a1d015281816130fd0152818161382c0152818161395a01528181613a5b0152613b30015260008181610987015281816110fb01528181611f7e015281816120040152818161220f015261233a01526000818161066b01526123d80152614a0b6000f3fe6080604052600436106102bb5760003560e01c80638b85902b1161016e578063d6ae3cd5116100cb578063f8f43ff61161007f578063fa315aa911610064578063fa315aa914610978578063fdffbb28146109ab578063fe2bbeb2146109cb57600080fd5b8063f8f43ff614610934578063fa24f7431461095457600080fd5b8063dabd396d116100b0578063dabd396d1461088e578063ec5e6308146108c1578063eff0f592146108f457600080fd5b8063d6ae3cd51461083b578063d8cc1a3c1461086e57600080fd5b8063c395e1ca11610122578063c6f0308c11610107578063c6f0308c14610763578063cf09e0d0146107ed578063d5d44d801461080e57600080fd5b8063c395e1ca14610730578063c55cd0c71461075057600080fd5b8063bbdc02db11610153578063bbdc02db1461068f578063bcef3b55146106d0578063bd8da9561461071057600080fd5b80638b85902b1461061c5780638d450a951461065c57600080fd5b806357da950e1161021c5780636361506d116101d057806370872aa5116101b557806370872aa5146105ea5780638129fc1c146105ff5780638980e0cc1461060757600080fd5b80636361506d146105775780636b6716c0146105b757600080fd5b8063609d333411610201578063609d33341461052f57806360e2746414610544578063632247ea1461056457600080fd5b806357da950e146104cc5780635c0cba33146104fc57600080fd5b806335fef567116102735780633a768463116102585780633a768463146104105780633fc8cef31461044357806354fd4d501461047657600080fd5b806335fef5671461039a57806337b1b229146103af57600080fd5b806325fc2ace116102a457806325fc2ace146103465780632810e1d6146103655780632ad69aeb1461037a57600080fd5b806319effeb4146102c0578063200d2ed21461030b575b600080fd5b3480156102cc57600080fd5b506000546102ed9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561031757600080fd5b5060005461033990700100000000000000000000000000000000900460ff1681565b60405161030291906142b6565b34801561035257600080fd5b506006545b604051908152602001610302565b34801561037157600080fd5b506103396109fb565b34801561038657600080fd5b506103576103953660046142f7565b610ca0565b6103ad6103a83660046142f7565b610cd1565b005b3480156103bb57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610302565b34801561041c57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103eb565b34801561044f57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103eb565b34801561048257600080fd5b506104bf6040518060400160405280600681526020017f302e31372e30000000000000000000000000000000000000000000000000000081525081565b6040516103029190614384565b3480156104d857600080fd5b506006546007546104e7919082565b60408051928352602083019190915201610302565b34801561050857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103eb565b34801561053b57600080fd5b506104bf610ce6565b34801561055057600080fd5b506103ad61055f3660046143bc565b610cf4565b6103ad6105723660046143f5565b610ea0565b34801561058357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360340135610357565b3480156105c357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102ed565b3480156105f657600080fd5b50600754610357565b6103ad6117a0565b34801561061357600080fd5b50600154610357565b34801561062857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360540135610357565b34801561066857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610357565b34801561069b57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610302565b3480156106dc57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135610357565b34801561071c57600080fd5b506102ed61072b36600461442a565b611cf8565b34801561073c57600080fd5b5061035761074b366004614443565b611ed8565b6103ad61075e3660046142f7565b6120bb565b34801561076f57600080fd5b5061078361077e36600461442a565b6120c7565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610302565b3480156107f957600080fd5b506000546102ed9067ffffffffffffffff1681565b34801561081a57600080fd5b506103576108293660046143bc565b60026020526000908152604090205481565b34801561084757600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610357565b34801561087a57600080fd5b506103ad6108893660046144be565b61215e565b34801561089a57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102ed565b3480156108cd57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610357565b34801561090057600080fd5b5061092461090f36600461442a565b60036020526000908152604090205460ff1681565b6040519015158152602001610302565b34801561094057600080fd5b506103ad61094f366004614548565b61278d565b34801561096057600080fd5b50610969612bed565b60405161030293929190614574565b34801561098457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610357565b3480156109b757600080fd5b506103ad6109c636600461442a565b612c4d565b3480156109d757600080fd5b506109246109e636600461442a565b60056020526000908152604090205460ff1681565b600080600054700100000000000000000000000000000000900460ff166002811115610a2957610a29614287565b14610a60576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc5460ff16610ac4576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600081548110610af057610af0614599565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614610b2b576001610b2e565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff90911617700100000000000000000000000000000000836002811115610bdf57610bdf614287565b021790556002811115610bf457610bf4614287565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c8557600080fd5b505af1158015610c99573d6000803e3d6000fd5b5050505090565b60046020528160005260406000208181548110610cbc57600080fd5b90600052602060002001600091509150505481565b610cdd82826000610ea0565b5050565b905090565b6060610ce16054602061305f565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812080549082905590819003610d59576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063f3fef3a390604401600060405180830381600087803b158015610de957600080fd5b505af1158015610dfd573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e5b576040519150601f19603f3d011682016040523d82523d6000602084013e610e60565b606091505b5050905080610e9b576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054700100000000000000000000000000000000900460ff166002811115610ecc57610ecc614287565b14610f03576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018481548110610f1857610f18614599565b600091825260208083206040805160e0810182526005909402909101805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff6401000000009092048216948601949094526001820154169184019190915260028101546fffffffffffffffffffffffffffffffff90811660608501526003820154608085015260049091015480821660a0850181905270010000000000000000000000000000000090910490911660c0840152919350909190610fdd90839086906130b116565b9050600061107d826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508615806110b857506110b57f000000000000000000000000000000000000000000000000000000000000000060026145f7565b81145b80156110c2575084155b156110f9576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115611153576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61117e7f000000000000000000000000000000000000000000000000000000000000000060016145f7565b810361119057611190868885886130b9565b3461119a83611ed8565b146111d1576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111dc88611cf8565b905067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811690821603611244576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166112a4919061460f565b67ffffffffffffffff166112bf8267ffffffffffffffff1690565b67ffffffffffffffff1611156113a15760006112fc60017f0000000000000000000000000000000000000000000000000000000000000000614638565b83146113325767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611367565b6113677f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261464f565b905061139d817f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1661460f565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526003602052604090205490915060ff161561141f576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016003600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060016040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600460008b8152602001908152602001600020600180805490506116b49190614638565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263d0e30db09234926004808301939282900301818588803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a450505050505050505050565b60005471010000000000000000000000000000000000900460ff16156117f2576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637258a807906024016040805180830381865afa1580156118a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ca919061467f565b909250905081611906576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526006829055600781905536607a1461193957639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360540135116119d3576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c0190815282548084018455928a529a5160059092027fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf681018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf787018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf985015551955182167001000000000000000000000000000000000295909116949094177fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa9091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f00000000000000000000000000000000000000000000000000000000000000009092169363d0e30db093926004828101939282900301818588803b158015611ca757600080fd5b505af1158015611cbb573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611d2657611d26614287565b14611d5d576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018381548110611d7257611d72614599565b600091825260208220600590910201805490925063ffffffff90811614611de157815460018054909163ffffffff16908110611db057611db0614599565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611e1990700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611e2d9067ffffffffffffffff1642614638565b611e4c611e0c846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611e6091906145f7565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff168167ffffffffffffffff1611611ead5780611ecf565b7f00000000000000000000000000000000000000000000000000000000000000005b95945050505050565b600080611f77836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000000811115611fd6576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a80630bebc2006000611ff183836146d2565b9050670de0b6b3a76400006000612028827f00000000000000000000000000000000000000000000000000000000000000006146e6565b90506000612046612041670de0b6b3a7640000866146e6565b613273565b9050600061205484846134ce565b90506000612062838361351d565b9050600061206f8261354b565b9050600061208e82612089670de0b6b3a76400008f6146e6565b613733565b9050600061209c8b8361351d565b90506120a8818d6146e6565b9f9e505050505050505050505050505050565b610cdd82826001610ea0565b600181815481106120d757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff16600281111561218a5761218a614287565b146121c1576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600187815481106121d6576121d6614599565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506122357f000000000000000000000000000000000000000000000000000000000000000060016145f7565b6122d1826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161461230b576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156124025761235e7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614638565b6001901b61237d846fffffffffffffffffffffffffffffffff1661376d565b6fffffffffffffffffffffffffffffffff166123999190614723565b156123d6576123cd6123be60016fffffffffffffffffffffffffffffffff8716614737565b865463ffffffff16600061380c565b600301546123f8565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061242c565b600385015491506124296123be6fffffffffffffffffffffffffffffffff86166001614760565b90505b600882901b60088a8a604051612443929190614794565b6040518091039020901b14612484576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061248f8c6138f0565b9050600061249e836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced3290612518908f908f908f908f908a906004016147ed565b6020604051808303816000875af1158015612537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255b9190614827565b600485015491149150600090600290612606906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6126a2896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6126ac9190614840565b6126b69190614863565b60ff1615905081151581036126f7576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff161561274e576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156127b9576127b9614287565b146127f0576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806127ff8661391f565b9350935093509350600061281585858585613d28565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a89190614885565b9050600189036129a35773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84612907367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015612979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299d9190614827565b50612be2565b600289036129cf5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489612907565b600389036129fb5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487612907565b60048903612b17576000612a416fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000000613de2565b600754612a4e91906145f7565b612a599060016145f7565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af1158015612aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b109190614827565b5050612be2565b60058903612bb0576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000000060c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161295a565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356060612c46610ce6565b9050909192565b60008054700100000000000000000000000000000000900460ff166002811115612c7957612c79614287565b14612cb0576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018281548110612cc557612cc5614599565b906000526020600020906005020190506000612ce083611cf8565b905067ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081169082161015612d49576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526005602052604090205460ff1615612d92576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600460205260409020805480158015612daf57508415155b15612e49578354640100000000900473ffffffffffffffffffffffffffffffffffffffff1660008115612de25781612dfe565b600186015473ffffffffffffffffffffffffffffffffffffffff165b9050612e0a8187613e90565b505050600093845250506005602052506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60006fffffffffffffffffffffffffffffffff815b83811015612f91576000858281548110612e7a57612e7a614599565b6000918252602080832090910154808352600590915260409091205490915060ff16612ed2576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018281548110612ee757612ee7614599565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff16158015612f40575060048101546fffffffffffffffffffffffffffffffff908116908516115b15612f7e576001810154600482015473ffffffffffffffffffffffffffffffffffffffff90911695506fffffffffffffffffffffffffffffffff1693505b505080612f8a906148a2565b9050612e5e565b50612fd973ffffffffffffffffffffffffffffffffffffffff831615612fb75782612fd3565b600187015473ffffffffffffffffffffffffffffffffffffffff165b87613e90565b50845473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff90911617909355505050600090815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b151760011b90565b60006130d86fffffffffffffffffffffffffffffffff84166001614760565b905060006130e88286600161380c565b9050600086901a83806131d4575061312160027f0000000000000000000000000000000000000000000000000000000000000000614723565b60048301546002906131c5906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6131cf9190614863565b60ff16145b1561322c5760ff8116600114806131ee575060ff81166002145b613227576040517ff40239db000000000000000000000000000000000000000000000000000000008152600481018890526024016119ca565b61326a565b60ff81161561326a576040517ff40239db000000000000000000000000000000000000000000000000000000008152600481018890526024016119ca565b50505050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136132d257631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261350b57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b60008160001904831182021561353b5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d7821361357957919050565b680755bf798b4a1bf1e582126135975763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613764670de0b6b3a76400008361374b86613273565b61375591906148da565b61375f9190614996565b61354b565b90505b92915050565b6000806137fa837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b60008082613855576138506fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000000613f89565b613870565b613870856fffffffffffffffffffffffffffffffff16614139565b90506001848154811061388557613885614599565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff8281169116146138e857815460018054909163ffffffff169081106138d3576138d3614599565b90600052602060002090600502019150613896565b509392505050565b60008060008060006139018661391f565b935093509350935061391584848484613d28565b9695505050505050565b600080600080600085905060006001828154811061393f5761393f614599565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000090613a16906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613a50576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000090613b17906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169250821115613b8c57825463ffffffff16613b567f000000000000000000000000000000000000000000000000000000000000000060016145f7565b8303613b60578391505b60018181548110613b7357613b73614599565b9060005260206000209060050201935080945050613a54565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff16613bf5613be0856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff161490508015613cc4576000613c2d836fffffffffffffffffffffffffffffffff1661376d565b6fffffffffffffffffffffffffffffffff161115613c98576000613c6f613c6760016fffffffffffffffffffffffffffffffff8616614737565b89600161380c565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a50613c9e9050565b6006549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750613d1a565b6000613ce6613c676fffffffffffffffffffffffffffffffff85166001614760565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff841615613d955760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611ecf565b8282604051602001613dc39291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080613e6f847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60028082015473ffffffffffffffffffffffffffffffffffffffff841660009081526020929092526040822080546fffffffffffffffffffffffffffffffff909216928392613ee09084906145f7565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690637eee288d90604401600060405180830381600087803b158015613f7557600080fd5b505af115801561326a573d6000803e3d6000fd5b600081614028846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614062576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61406b83614139565b90508161410a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613767576137646141208360016145f7565b6fffffffffffffffffffffffffffffffff8316906141de565b600081196001830116816141cd827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b60008061426b847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106142f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561430a57600080fd5b50508035926020909101359150565b6000815180845260005b8181101561433f57602081850181015186830182015201614323565b81811115614351576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006137646020830184614319565b73ffffffffffffffffffffffffffffffffffffffff811681146143b957600080fd5b50565b6000602082840312156143ce57600080fd5b81356143d981614397565b9392505050565b803580151581146143f057600080fd5b919050565b60008060006060848603121561440a57600080fd5b8335925060208401359150614421604085016143e0565b90509250925092565b60006020828403121561443c57600080fd5b5035919050565b60006020828403121561445557600080fd5b81356fffffffffffffffffffffffffffffffff811681146143d957600080fd5b60008083601f84011261448757600080fd5b50813567ffffffffffffffff81111561449f57600080fd5b6020830191508360208285010111156144b757600080fd5b9250929050565b600080600080600080608087890312156144d757600080fd5b863595506144e7602088016143e0565b9450604087013567ffffffffffffffff8082111561450457600080fd5b6145108a838b01614475565b9096509450606089013591508082111561452957600080fd5b5061453689828a01614475565b979a9699509497509295939492505050565b60008060006060848603121561455d57600080fd5b505081359360208301359350604090920135919050565b63ffffffff84168152826020820152606060408201526000611ecf6060830184614319565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561460a5761460a6145c8565b500190565b600067ffffffffffffffff83811690831681811015614630576146306145c8565b039392505050565b60008282101561464a5761464a6145c8565b500390565b600067ffffffffffffffff80831681851681830481118215151615614676576146766145c8565b02949350505050565b6000806040838503121561469257600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826146e1576146e16146a3565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561471e5761471e6145c8565b500290565b600082614732576147326146a3565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015614630576146306145c8565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561478b5761478b6145c8565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006148016060830187896147a4565b82810360208401526148148186886147a4565b9150508260408301529695505050505050565b60006020828403121561483957600080fd5b5051919050565b600060ff821660ff84168082101561485a5761485a6145c8565b90039392505050565b600060ff831680614876576148766146a3565b8060ff84160691505092915050565b60006020828403121561489757600080fd5b81516143d981614397565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148d3576148d36145c8565b5060010190565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561491b5761491b6145c8565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615614956576149566145c8565b60008712925087820587128484161615614972576149726145c8565b87850587128184161615614988576149886145c8565b505050929093029392505050565b6000826149a5576149a56146a3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156149f9576149f96145c8565b50059056fea164736f6c634300080f000a","sourceMap":"996:43827:164:-:0;;;4927:1230;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5391:35;5425:1;512:3:176;5391:35:164;:::i;:::-;5375:51;;:13;:51;5371:82;;;5435:18;;-1:-1:-1;;;5435:18:164;;;;;;;;;;;5371:82;5564:13;5549:11;:28;5545:60;;5586:19;;-1:-1:-1;;;5586:19:164;;;;;;;;;;;5545:60;5722:23;:17;-1:-1:-1;;;;;5722:21:164;;;;;;:23;;:::i;:::-;-1:-1:-1;;;;;5698:47:164;:21;:15;-1:-1:-1;;;;;5698:19:164;;;;;;:21;;:::i;:::-;-1:-1:-1;;;;;5698:47:164;;5694:83;;;5754:23;;-1:-1:-1;;;5754:23:164;;;;;;;;;;;5694:83;5788:21;;;;;;5819:37;;;;;-1:-1:-1;5866:30:164;;;;5906:25;;;;;-1:-1:-1;;;;;5941:33:164;;;;;5984:38;;;-1:-1:-1;;;;;6032:8:164;;;;;6050:12;;;;;6072:44;;;6126:24;;996:43827;;2881:145:177;3001:9;2881:145::o;14:198:357:-;115:13;;-1:-1:-1;;;;;157:30:357;;147:41;;137:69;;202:1;199;192:12;137:69;14:198;;;:::o;217:144::-;-1:-1:-1;;;;;305:31:357;;295:42;;285:70;;351:1;348;341:12;285:70;217:144;:::o;366:1384::-;714:6;722;730;738;746;754;762;770;778;786;839:3;827:9;818:7;814:23;810:33;807:53;;;856:1;853;846:12;807:53;888:9;882:16;938:10;931:5;927:22;920:5;917:33;907:61;;964:1;961;954:12;907:61;987:5;977:15;;;1032:2;1021:9;1017:18;1011:25;1001:35;;1076:2;1065:9;1061:18;1055:25;1045:35;;1120:2;1109:9;1105:18;1099:25;1089:35;;1143:72;1210:3;1199:9;1195:19;1143:72;:::i;:::-;1133:82;;1234:72;1301:3;1290:9;1286:19;1234:72;:::i;:::-;1224:82;;1351:3;1340:9;1336:19;1330:26;1365:46;1403:7;1365:46;:::i;:::-;1482:3;1467:19;;1461:26;1430:7;;-1:-1:-1;1496:46:357;1461:26;1496:46;:::i;:::-;1613:3;1598:19;;1592:26;1561:7;;-1:-1:-1;1627:46:357;1592:26;1627:46;:::i;:::-;1692:7;1682:17;;;1739:3;1728:9;1724:19;1718:26;1708:36;;366:1384;;;;;;;;;;;;;:::o;1755:292::-;1793:4;1830;1827:1;1823:12;1862:4;1859:1;1855:12;1887:3;1882;1879:12;1876:135;;;1933:10;1928:3;1924:20;1921:1;1914:31;1968:4;1965:1;1958:15;1996:4;1993:1;1986:15;1876:135;2028:13;;;1755:292;-1:-1:-1;;;1755:292:357:o;:::-;996:43827:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106102bb5760003560e01c80638b85902b1161016e578063d6ae3cd5116100cb578063f8f43ff61161007f578063fa315aa911610064578063fa315aa914610978578063fdffbb28146109ab578063fe2bbeb2146109cb57600080fd5b8063f8f43ff614610934578063fa24f7431461095457600080fd5b8063dabd396d116100b0578063dabd396d1461088e578063ec5e6308146108c1578063eff0f592146108f457600080fd5b8063d6ae3cd51461083b578063d8cc1a3c1461086e57600080fd5b8063c395e1ca11610122578063c6f0308c11610107578063c6f0308c14610763578063cf09e0d0146107ed578063d5d44d801461080e57600080fd5b8063c395e1ca14610730578063c55cd0c71461075057600080fd5b8063bbdc02db11610153578063bbdc02db1461068f578063bcef3b55146106d0578063bd8da9561461071057600080fd5b80638b85902b1461061c5780638d450a951461065c57600080fd5b806357da950e1161021c5780636361506d116101d057806370872aa5116101b557806370872aa5146105ea5780638129fc1c146105ff5780638980e0cc1461060757600080fd5b80636361506d146105775780636b6716c0146105b757600080fd5b8063609d333411610201578063609d33341461052f57806360e2746414610544578063632247ea1461056457600080fd5b806357da950e146104cc5780635c0cba33146104fc57600080fd5b806335fef567116102735780633a768463116102585780633a768463146104105780633fc8cef31461044357806354fd4d501461047657600080fd5b806335fef5671461039a57806337b1b229146103af57600080fd5b806325fc2ace116102a457806325fc2ace146103465780632810e1d6146103655780632ad69aeb1461037a57600080fd5b806319effeb4146102c0578063200d2ed21461030b575b600080fd5b3480156102cc57600080fd5b506000546102ed9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561031757600080fd5b5060005461033990700100000000000000000000000000000000900460ff1681565b60405161030291906142b6565b34801561035257600080fd5b506006545b604051908152602001610302565b34801561037157600080fd5b506103396109fb565b34801561038657600080fd5b506103576103953660046142f7565b610ca0565b6103ad6103a83660046142f7565b610cd1565b005b3480156103bb57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610302565b34801561041c57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103eb565b34801561044f57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103eb565b34801561048257600080fd5b506104bf6040518060400160405280600681526020017f302e31372e30000000000000000000000000000000000000000000000000000081525081565b6040516103029190614384565b3480156104d857600080fd5b506006546007546104e7919082565b60408051928352602083019190915201610302565b34801561050857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103eb565b34801561053b57600080fd5b506104bf610ce6565b34801561055057600080fd5b506103ad61055f3660046143bc565b610cf4565b6103ad6105723660046143f5565b610ea0565b34801561058357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360340135610357565b3480156105c357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102ed565b3480156105f657600080fd5b50600754610357565b6103ad6117a0565b34801561061357600080fd5b50600154610357565b34801561062857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360540135610357565b34801561066857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610357565b34801561069b57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610302565b3480156106dc57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135610357565b34801561071c57600080fd5b506102ed61072b36600461442a565b611cf8565b34801561073c57600080fd5b5061035761074b366004614443565b611ed8565b6103ad61075e3660046142f7565b6120bb565b34801561076f57600080fd5b5061078361077e36600461442a565b6120c7565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610302565b3480156107f957600080fd5b506000546102ed9067ffffffffffffffff1681565b34801561081a57600080fd5b506103576108293660046143bc565b60026020526000908152604090205481565b34801561084757600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610357565b34801561087a57600080fd5b506103ad6108893660046144be565b61215e565b34801561089a57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102ed565b3480156108cd57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610357565b34801561090057600080fd5b5061092461090f36600461442a565b60036020526000908152604090205460ff1681565b6040519015158152602001610302565b34801561094057600080fd5b506103ad61094f366004614548565b61278d565b34801561096057600080fd5b50610969612bed565b60405161030293929190614574565b34801561098457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610357565b3480156109b757600080fd5b506103ad6109c636600461442a565b612c4d565b3480156109d757600080fd5b506109246109e636600461442a565b60056020526000908152604090205460ff1681565b600080600054700100000000000000000000000000000000900460ff166002811115610a2957610a29614287565b14610a60576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc5460ff16610ac4576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600081548110610af057610af0614599565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614610b2b576001610b2e565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff90911617700100000000000000000000000000000000836002811115610bdf57610bdf614287565b021790556002811115610bf457610bf4614287565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c8557600080fd5b505af1158015610c99573d6000803e3d6000fd5b5050505090565b60046020528160005260406000208181548110610cbc57600080fd5b90600052602060002001600091509150505481565b610cdd82826000610ea0565b5050565b905090565b6060610ce16054602061305f565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812080549082905590819003610d59576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063f3fef3a390604401600060405180830381600087803b158015610de957600080fd5b505af1158015610dfd573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e5b576040519150601f19603f3d011682016040523d82523d6000602084013e610e60565b606091505b5050905080610e9b576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054700100000000000000000000000000000000900460ff166002811115610ecc57610ecc614287565b14610f03576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018481548110610f1857610f18614599565b600091825260208083206040805160e0810182526005909402909101805463ffffffff808216865273ffffffffffffffffffffffffffffffffffffffff6401000000009092048216948601949094526001820154169184019190915260028101546fffffffffffffffffffffffffffffffff90811660608501526003820154608085015260049091015480821660a0850181905270010000000000000000000000000000000090910490911660c0840152919350909190610fdd90839086906130b116565b9050600061107d826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508615806110b857506110b57f000000000000000000000000000000000000000000000000000000000000000060026145f7565b81145b80156110c2575084155b156110f9576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115611153576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61117e7f000000000000000000000000000000000000000000000000000000000000000060016145f7565b810361119057611190868885886130b9565b3461119a83611ed8565b146111d1576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111dc88611cf8565b905067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811690821603611244576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166112a4919061460f565b67ffffffffffffffff166112bf8267ffffffffffffffff1690565b67ffffffffffffffff1611156113a15760006112fc60017f0000000000000000000000000000000000000000000000000000000000000000614638565b83146113325767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611367565b6113677f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261464f565b905061139d817f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1661460f565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526003602052604090205490915060ff161561141f576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016003600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060016040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600460008b8152602001908152602001600020600180805490506116b49190614638565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263d0e30db09234926004808301939282900301818588803b15801561174c57600080fd5b505af1158015611760573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a450505050505050505050565b60005471010000000000000000000000000000000000900460ff16156117f2576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637258a807906024016040805180830381865afa1580156118a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ca919061467f565b909250905081611906576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526006829055600781905536607a1461193957639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360540135116119d3576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c0190815282548084018455928a529a5160059092027fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf681018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf787018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf985015551955182167001000000000000000000000000000000000295909116949094177fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa9091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f00000000000000000000000000000000000000000000000000000000000000009092169363d0e30db093926004828101939282900301818588803b158015611ca757600080fd5b505af1158015611cbb573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611d2657611d26614287565b14611d5d576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018381548110611d7257611d72614599565b600091825260208220600590910201805490925063ffffffff90811614611de157815460018054909163ffffffff16908110611db057611db0614599565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611e1990700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611e2d9067ffffffffffffffff1642614638565b611e4c611e0c846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611e6091906145f7565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff168167ffffffffffffffff1611611ead5780611ecf565b7f00000000000000000000000000000000000000000000000000000000000000005b95945050505050565b600080611f77836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000000811115611fd6576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a80630bebc2006000611ff183836146d2565b9050670de0b6b3a76400006000612028827f00000000000000000000000000000000000000000000000000000000000000006146e6565b90506000612046612041670de0b6b3a7640000866146e6565b613273565b9050600061205484846134ce565b90506000612062838361351d565b9050600061206f8261354b565b9050600061208e82612089670de0b6b3a76400008f6146e6565b613733565b9050600061209c8b8361351d565b90506120a8818d6146e6565b9f9e505050505050505050505050505050565b610cdd82826001610ea0565b600181815481106120d757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff16600281111561218a5761218a614287565b146121c1576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600187815481106121d6576121d6614599565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506122357f000000000000000000000000000000000000000000000000000000000000000060016145f7565b6122d1826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161461230b576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156124025761235e7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614638565b6001901b61237d846fffffffffffffffffffffffffffffffff1661376d565b6fffffffffffffffffffffffffffffffff166123999190614723565b156123d6576123cd6123be60016fffffffffffffffffffffffffffffffff8716614737565b865463ffffffff16600061380c565b600301546123f8565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061242c565b600385015491506124296123be6fffffffffffffffffffffffffffffffff86166001614760565b90505b600882901b60088a8a604051612443929190614794565b6040518091039020901b14612484576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061248f8c6138f0565b9050600061249e836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e14ced3290612518908f908f908f908f908a906004016147ed565b6020604051808303816000875af1158015612537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255b9190614827565b600485015491149150600090600290612606906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6126a2896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6126ac9190614840565b6126b69190614863565b60ff1615905081151581036126f7576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff161561274e576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156127b9576127b9614287565b146127f0576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806127ff8661391f565b9350935093509350600061281585858585613d28565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a89190614885565b9050600189036129a35773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84612907367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015612979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299d9190614827565b50612be2565b600289036129cf5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489612907565b600389036129fb5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487612907565b60048903612b17576000612a416fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000000613de2565b600754612a4e91906145f7565b612a599060016145f7565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af1158015612aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b109190614827565b5050612be2565b60058903612bb0576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000000060c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161295a565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356060612c46610ce6565b9050909192565b60008054700100000000000000000000000000000000900460ff166002811115612c7957612c79614287565b14612cb0576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018281548110612cc557612cc5614599565b906000526020600020906005020190506000612ce083611cf8565b905067ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081169082161015612d49576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526005602052604090205460ff1615612d92576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600460205260409020805480158015612daf57508415155b15612e49578354640100000000900473ffffffffffffffffffffffffffffffffffffffff1660008115612de25781612dfe565b600186015473ffffffffffffffffffffffffffffffffffffffff165b9050612e0a8187613e90565b505050600093845250506005602052506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60006fffffffffffffffffffffffffffffffff815b83811015612f91576000858281548110612e7a57612e7a614599565b6000918252602080832090910154808352600590915260409091205490915060ff16612ed2576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018281548110612ee757612ee7614599565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff16158015612f40575060048101546fffffffffffffffffffffffffffffffff908116908516115b15612f7e576001810154600482015473ffffffffffffffffffffffffffffffffffffffff90911695506fffffffffffffffffffffffffffffffff1693505b505080612f8a906148a2565b9050612e5e565b50612fd973ffffffffffffffffffffffffffffffffffffffff831615612fb75782612fd3565b600187015473ffffffffffffffffffffffffffffffffffffffff165b87613e90565b50845473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff90911617909355505050600090815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b151760011b90565b60006130d86fffffffffffffffffffffffffffffffff84166001614760565b905060006130e88286600161380c565b9050600086901a83806131d4575061312160027f0000000000000000000000000000000000000000000000000000000000000000614723565b60048301546002906131c5906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6131cf9190614863565b60ff16145b1561322c5760ff8116600114806131ee575060ff81166002145b613227576040517ff40239db000000000000000000000000000000000000000000000000000000008152600481018890526024016119ca565b61326a565b60ff81161561326a576040517ff40239db000000000000000000000000000000000000000000000000000000008152600481018890526024016119ca565b50505050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136132d257631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261350b57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b60008160001904831182021561353b5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d7821361357957919050565b680755bf798b4a1bf1e582126135975763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613764670de0b6b3a76400008361374b86613273565b61375591906148da565b61375f9190614996565b61354b565b90505b92915050565b6000806137fa837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b60008082613855576138506fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000000613f89565b613870565b613870856fffffffffffffffffffffffffffffffff16614139565b90506001848154811061388557613885614599565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff8281169116146138e857815460018054909163ffffffff169081106138d3576138d3614599565b90600052602060002090600502019150613896565b509392505050565b60008060008060006139018661391f565b935093509350935061391584848484613d28565b9695505050505050565b600080600080600085905060006001828154811061393f5761393f614599565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000090613a16906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613a50576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000090613b17906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169250821115613b8c57825463ffffffff16613b567f000000000000000000000000000000000000000000000000000000000000000060016145f7565b8303613b60578391505b60018181548110613b7357613b73614599565b9060005260206000209060050201935080945050613a54565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff16613bf5613be0856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff161490508015613cc4576000613c2d836fffffffffffffffffffffffffffffffff1661376d565b6fffffffffffffffffffffffffffffffff161115613c98576000613c6f613c6760016fffffffffffffffffffffffffffffffff8616614737565b89600161380c565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a50613c9e9050565b6006549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750613d1a565b6000613ce6613c676fffffffffffffffffffffffffffffffff85166001614760565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff841615613d955760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611ecf565b8282604051602001613dc39291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080613e6f847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60028082015473ffffffffffffffffffffffffffffffffffffffff841660009081526020929092526040822080546fffffffffffffffffffffffffffffffff909216928392613ee09084906145f7565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690637eee288d90604401600060405180830381600087803b158015613f7557600080fd5b505af115801561326a573d6000803e3d6000fd5b600081614028846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614062576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61406b83614139565b90508161410a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613767576137646141208360016145f7565b6fffffffffffffffffffffffffffffffff8316906141de565b600081196001830116816141cd827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b60008061426b847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106142f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561430a57600080fd5b50508035926020909101359150565b6000815180845260005b8181101561433f57602081850181015186830182015201614323565b81811115614351576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006137646020830184614319565b73ffffffffffffffffffffffffffffffffffffffff811681146143b957600080fd5b50565b6000602082840312156143ce57600080fd5b81356143d981614397565b9392505050565b803580151581146143f057600080fd5b919050565b60008060006060848603121561440a57600080fd5b8335925060208401359150614421604085016143e0565b90509250925092565b60006020828403121561443c57600080fd5b5035919050565b60006020828403121561445557600080fd5b81356fffffffffffffffffffffffffffffffff811681146143d957600080fd5b60008083601f84011261448757600080fd5b50813567ffffffffffffffff81111561449f57600080fd5b6020830191508360208285010111156144b757600080fd5b9250929050565b600080600080600080608087890312156144d757600080fd5b863595506144e7602088016143e0565b9450604087013567ffffffffffffffff8082111561450457600080fd5b6145108a838b01614475565b9096509450606089013591508082111561452957600080fd5b5061453689828a01614475565b979a9699509497509295939492505050565b60008060006060848603121561455d57600080fd5b505081359360208301359350604090920135919050565b63ffffffff84168152826020820152606060408201526000611ecf6060830184614319565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561460a5761460a6145c8565b500190565b600067ffffffffffffffff83811690831681811015614630576146306145c8565b039392505050565b60008282101561464a5761464a6145c8565b500390565b600067ffffffffffffffff80831681851681830481118215151615614676576146766145c8565b02949350505050565b6000806040838503121561469257600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826146e1576146e16146a3565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561471e5761471e6145c8565b500290565b600082614732576147326146a3565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015614630576146306145c8565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561478b5761478b6145c8565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006148016060830187896147a4565b82810360208401526148148186886147a4565b9150508260408301529695505050505050565b60006020828403121561483957600080fd5b5051919050565b600060ff821660ff84168082101561485a5761485a6145c8565b90039392505050565b600060ff831680614876576148766146a3565b8060ff84160691505092915050565b60006020828403121561489757600080fd5b81516143d981614397565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148d3576148d36145c8565b5060010190565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561491b5761491b6145c8565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615614956576149566145c8565b60008712925087820587128484161615614972576149726145c8565b87850587128184161615614988576149886145c8565b505050929093029392505050565b6000826149a5576149a56146a3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156149f9576149f96145c8565b50059056fea164736f6c634300080f000a","sourceMap":"996:43827:164:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3113:27;;;;;;;;;;-1:-1:-1;3113:27:164;;;;;;;;;;;;;;221:18:357;209:31;;;191:50;;179:2;164:18;3113:27:164;;;;;;;;3180:24;;;;;;;;;;-1:-1:-1;3180:24:164;;;;;;;;;;;;;;;;;;:::i;22098:135::-;;;;;;;;;;-1:-1:-1;22203:18:164;:23;22098:135;;;1021:25:357;;;1009:2;994:18;22098:135:164;848:204:357;22480:905:164;;;;;;;;;;;;;:::i;3777:45::-;;;;;;;;;;-1:-1:-1;3777:45:164;;;;;:::i;:::-;;:::i;19512:119::-;;;;;;:::i;:::-;;:::i;:::-;;27482:110;;;;;;;;;;-1:-1:-1;14565:14:97;14561:22;;;14548:36;14543:3;14539:46;14519:67;;1993:36;1989:2;1985:45;27482:110:164;;;1949:42:357;1937:55;;;1919:74;;1907:2;1892:18;27482:110:164;1773:226:357;34509:79:164;;;;;;;;;;-1:-1:-1;34579:2:164;34509:79;;34653:88;;;;;;;;;;-1:-1:-1;34730:4:164;34653:88;;2918:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4061:36::-;;;;;;;;;;-1:-1:-1;4061:36:164;;;;;;;;;;;;;3473:25:357;;;3529:2;3514:18;;3507:34;;;;3446:18;4061:36:164;3272:275:357;34807:136:164;;;;;;;;;;-1:-1:-1;34915:21:164;34807:136;;27942:231;;;;;;;;;;;;;:::i;31160:671::-;;;;;;;;;;-1:-1:-1;31160:671:164;;;;;:::i;:::-;;:::i;14106:5200::-;;;;;;:::i;:::-;;:::i;27792:111::-;;;;;;;;;;-1:-1:-1;14565:14:97;14561:22;;;14548:36;14543:3;14539:46;14519:67;;27890:4:164;3514:22:97;3501:36;27792:111:164;27482:110;34331:125;;;;;;;;;;-1:-1:-1;34434:15:164;34331:125;;21898:156;;;;;;;;;;-1:-1:-1;22015:32:164;;21898:156;;6198:2903;;;:::i;33244:101::-;;;;;;;;;;-1:-1:-1;33322:9:164;:16;33244:101;;21730:124;;;;;;;;;;-1:-1:-1;14565:14:97;14561:22;;;14548:36;14543:3;14539:46;14519:67;;21842:4:164;3514:22:97;3501:36;21730:124:164;27482:110;33631:130;;;;;;;;;;-1:-1:-1;33737:17:164;33631:130;;27335:108;;;;;;;;;;-1:-1:-1;27335:108:164;;5615:10:357;27427:9:164;5603:23:357;5585:42;;5573:2;5558:18;27335:108:164;5409:224:357;27631:122:164;;;;;;;;;;-1:-1:-1;14565:14:97;14561:22;;;14548:36;14543:3;14539:46;14519:67;;27740:4:164;3514:22:97;3501:36;27631:122:164;27482:110;32166:1011;;;;;;;;;;-1:-1:-1;32166:1011:164;;;;;:::i;:::-;;:::i;28849:2171::-;;;;;;;;;;-1:-1:-1;28849:2171:164;;;;;:::i;:::-;;:::i;19350:118::-;;;;;;:::i;:::-;;:::i;3405:28::-;;;;;;;;;;-1:-1:-1;3405:28:164;;;;;:::i;:::-;;:::i;:::-;;;;6590:10:357;6578:23;;;6560:42;;6621;6699:15;;;6694:2;6679:18;;6672:43;6751:15;;;;6731:18;;;6724:43;;;;6786:34;6856:15;;;6851:2;6836:18;;6829:43;6903:3;6888:19;;6881:35;6953:15;;;6947:3;6932:19;;6925:44;7006:15;7000:3;6985:19;;6978:44;6547:3;6532:19;3405:28:164;6160:868:357;3017:26:164;;;;;;;;;;-1:-1:-1;3017:26:164;;;;;;;;3500:41;;;;;;;;;;-1:-1:-1;3500:41:164;;;;;:::i;:::-;;;;;;;;;;;;;;35032:105;;;;;;;;;;-1:-1:-1;35119:11:164;35032:105;;9353:4442;;;;;;;;;;-1:-1:-1;9353:4442:164;;;;;:::i;:::-;;:::i;34137:134::-;;;;;;;;;;-1:-1:-1;34246:18:164;34137:134;;33975:108;;;;;;;;;;-1:-1:-1;34065:11:164;33975:108;;3629:40;;;;;;;;;;-1:-1:-1;3629:40:164;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8626:14:357;;8619:22;8601:41;;8589:2;8574:18;3629:40:164;8461:187:357;19675:2011:164;;;;;;;;;;-1:-1:-1;19675:2011:164;;;;;:::i;:::-;;:::i;28212:213::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;33811:117::-;;;;;;;;;;-1:-1:-1;33907:14:164;33811:117;;23429:3867;;;;;;;;;;-1:-1:-1;23429:3867:164;;;;;:::i;:::-;;:::i;3912:48::-;;;;;;;;;;-1:-1:-1;3912:48:164;;;;;:::i;:::-;;;;;;;;;;;;;;;;22480:905;22517:18;;22639:6;;;;;;;:32;;;;;;;;:::i;:::-;;22635:64;;22680:19;;;;;;;;;;;;;;22635:64;22813:19;;;:16;:19;;;;;;22808:55;;22841:22;;;;;;;;;;;;;;22808:55;22989:1;22953:38;;:9;22963:1;22953:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:24;;;;;;:38;:94;;23021:26;22953:94;;;22994:24;22953:94;23057:10;:52;;;23092:15;23057:52;;;;;;;;;;22943:104;;-1:-1:-1;22943:104:164;;23239:16;;;;;;;;22943:104;23239:16;;;;;;;;:::i;:::-;;;;;23230:26;;;;;;;;:::i;:::-;;;;;;;;23334:21;:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22480:905;:::o;3777:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19512:119::-;19591:33;19596:12;19610:6;19618:5;19591:4;:33::i;:::-;19512:119;;:::o;27565:20::-;27554:31;;27482:110;:::o;27942:231::-;27984:23;28142:24;28155:4;28161;28142:12;:24::i;31160:671::-;31333:18;;;31307:23;31333:18;;;:6;:18;;;;;;;31361:22;;;;31333:18;31457:20;;;31453:75;;31500:17;;;;;;;;;;;;;;31453:75;31605:42;;;;;:13;9795:55:357;;;31605:42:164;;;9777:74:357;9867:18;;;9860:34;;;31605:4:164;:13;;;;9750:18:357;;31605:42:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31708:12;31725:10;:15;;31749;31725:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31707:66;;;31788:7;31783:41;;31804:20;;;;;;;;;;;;;;31783:41;31210:621;;31160:671;:::o;14106:5200::-;14307:22;14297:6;;;;;;;:32;;;;;;;;:::i;:::-;;14293:64;;14338:19;;;;;;;;;;;;;;14293:64;14448:23;14474:9;14484:15;14474:26;;;;;;;;:::i;:::-;;;;;;;;;14448:52;;;;;;;;14474:26;;;;;;;14448:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14448:52:164;;14474:26;14829:25;;14448:52;;14844:9;;14829:14;:25;:::i;:::-;14805:49;;14864:25;14892:20;:12;:18;;2237:66:176;2189:20;1511:18;1508:46;-1:-1:-1;1505:1:176;1501:54;1612:22;;;1600:10;1597:38;1594:1;1590:46;1579:58;1730:22;;;1796:1;1792:17;;;1778:32;1854:1;1850:17;;;1836:32;1912:1;1908:17;;;1894:32;1970:1;1966:17;;;1952:32;2028:2;2024:18;;;2010:33;2174:36;2169:3;2165:46;2135:190;2083:260;;1283:1076;14892:20:164;14864:48;;;-1:-1:-1;15259:20:164;;;:60;;-1:-1:-1;15304:15:164;:11;15318:1;15304:15;:::i;:::-;15283:17;:36;15259:60;15258:76;;;;;15325:9;15324:10;15258:76;15254:137;;;15357:23;;;;;;;;;;;;;;15254:137;15752:14;15732:17;:34;15728:66;;;15775:19;;;;;;;;;;;;;;15728:66;16022:15;:11;16036:1;16022:15;:::i;:::-;16001:17;:36;15997:138;;16053:71;16078:6;16086:15;16103:9;16114;16053:24;:71::i;:::-;16258:9;16225:29;16241:12;16225:15;:29::i;:::-;:42;16221:76;;16276:21;;;;;;;;;;;;;;16221:76;16530:21;16554:38;16576:15;16554:21;:38::i;:::-;16530:62;-1:-1:-1;16764:22:164;:18;:22;;16742:16;;;:46;16738:78;;16797:19;;;;;;;;;;;;;;16738:78;17525:19;:15;:19;17498:22;:18;:22;:48;;;;:::i;:::-;17477:69;;:18;:12;:16;;3001:9:177;2881:145;17477:18:164;:69;;;17473:424;;;17671:22;17733:15;17747:1;17733:11;:15;:::i;:::-;17712:17;:36;:88;;17779:19;:15;:19;17712:88;;;17751:25;:15;:19;;17775:1;17751:25;:::i;:::-;17671:129;-1:-1:-1;17843:42:164;17671:129;17843:18;:22;;:42;:::i;:::-;17814:72;;17548:349;17473:424;17998:15;668:4:177;664:20;;;18066:15:164;661:36:177;18368:19:164;758:20:175;;;811:3;807:19;;;832:34;828:56;;804:81;798:4;791:95;929:4;913:21;;17998:86:164;;-1:-1:-1;18368:19:164;18454:17;;;;:6;:17;;;;;;18368:72;;-1:-1:-1;18454:17:164;;18450:50;;;18480:20;;;;;;;;;;;;;;18450:50;18530:4;18510:6;:17;18517:9;18510:17;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;18578:9;18606:366;;;;;;;;18654:15;18606:366;;;;;;18770:1;18606:366;;;;;;18800:10;18606:366;;;;;;18842:9;18606:366;;;;;;18877:6;18606:366;;;;18911:12;18606:366;;;;;;18948:9;18606:366;;;;;18578:404;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19051:8;:25;19060:15;19051:25;;;;;;;;;;;19101:1;19082:9;:16;;;;:20;;;;:::i;:::-;19051:52;;;;;;;-1:-1:-1;19051:52:164;;;;;;;;19143:34;;;;;;;;:12;:4;:12;;;;19164:9;;19143:34;;;;;-1:-1:-1;19143:34:164;;;;;19164:9;19143:12;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19258:41:164;;19288:10;;-1:-1:-1;19280:6:164;;-1:-1:-1;19263:15:164;;-1:-1:-1;19258:41:164;;;;;14198:5108;;;;;;;14106:5200;;;:::o;6198:2903::-;6888:11;;;;;;;6884:44;;;6908:20;;;;;;;;;;;;;;6884:44;7018:40;;;;;;7048:9;5603:23:357;7018:40:164;;;5585:42:357;6980:9:164;;;;7018:29;:21;:29;;;;5558:18:357;;7018:40:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6979:79;;-1:-1:-1;6979:79:164;-1:-1:-1;6979:79:164;7155:57;;7192:20;;;;;;;;;;;;;;7155:57;7285:58;;;;;;;;;;;;;;;;;7264:18;:79;;;;;;;7960:14;7976:4;7957:24;7947:195;;8082:10;8076:4;8069:24;8123:4;8117;8110:18;7947:195;8339:15;14565:14:97;14561:22;;;14548:36;14543:3;14539:46;14519:67;;21842:4:164;3514:22:97;3501:36;8320:34:164;8316:79;;8363:32;;;;;14565:14:97;14561:22;;;14548:36;14543:3;14539:46;14519:67;;27740:4:164;3514:22:97;3501:36;8363:32:164;;;1021:25:357;994:18;;8363:32:164;;;;;;;;8316:79;8464:370;;;;;;;;8505:16;8464:370;;;-1:-1:-1;8464:370:164;;;;;;14561:22:97;14565:14;14561:22;;;14548:36;14543:3;14539:46;14519:67;;1993:36;;1989:2;1985:45;;;8464:370:164;;;;;;8635:9;8464:370;;;;;;;;;;27740:4;3514:22:97;;;3501:36;8464:370:164;;;;;;8436:9;8464:370;;;;;;8801:15;8464:370;;;;;;;;8436:408;;;;;;;;;;;;;;;;;;;;;;;8464:370;8436:408;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8895:18;;;;;;;;8953:34;;;;;;;:4;:12;;;;;;8635:9;8436:408;8953:34;;;;-1:-1:-1;8953:34:164;;;;;8635:9;8953:12;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9043:9:164;:51;;;;9077:15;9043:51;;;;;-1:-1:-1;;;;;6198:2903:164:o;32166:1011::-;32239:18;;32381:6;;;;;;;:32;;;;;;;;:::i;:::-;;32377:89;;32436:19;;;;;;;;;;;;;;32377:89;32517:34;32554:9;32564:11;32554:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;32689:28;;32554:22;;-1:-1:-1;32721:16:164;32689:28;;;:48;32685:138;;32777:28;;32767:9;:39;;:9;;32777:28;;;32767:39;;;;;;:::i;:::-;;;;;;;;;;;:45;;;;;;;;;;;;32753:59;;32685:138;33006:22;;;;32910:24;;33006:40;;:22;;;1624:28:177;;33006:34:164;:38;;3001:9:177;2881:145;33006:40:164;32988:58;;;;:15;:58;:::i;:::-;32956:28;:22;:11;:20;;1135:4:177;1131:17;;913:251;32956:28:164;:91;;;;;;:::i;:::-;32910:138;-1:-1:-1;33090:22:164;:18;:22;33070:44;;:17;:44;;;:100;;33152:17;33070:100;;;33117:18;33070:100;33058:112;32166:1011;-1:-1:-1;;;;;32166:1011:164:o;28849:2171::-;28915:21;28948:13;28972:17;:9;:15;;2237:66:176;2189:20;1511:18;1508:46;-1:-1:-1;1505:1:176;1501:54;1612:22;;;1600:10;1597:38;1594:1;1590:46;1579:58;1730:22;;;1796:1;1792:17;;;1778:32;1854:1;1850:17;;;1836:32;1912:1;1908:17;;;1894:32;1970:1;1966:17;;;1952:32;2028:2;2024:18;;;2010:33;2174:36;2169:3;2165:46;2135:190;2083:260;;1283:1076;28972:17:164;28964:26;;28948:42;;29012:14;29004:5;:22;29000:54;;;29035:19;;;;;;;;;;;;;;29000:54;29145:8;29188:7;29230:11;29120:22;29997:31;29188:7;29230:11;29997:31;:::i;:::-;29985:43;-1:-1:-1;2458:4:98;30038:9:164;30093:38;2458:4:98;30093:14:164;:38;:::i;:::-;30081:50;-1:-1:-1;30228:11:164;30250:58;30281:25;2458:4:98;30281:1:164;:25;:::i;:::-;30250:23;:58::i;:::-;30228:81;;30386:14;30403:30;30428:1;30431;30403:24;:30::i;:::-;30386:47;;30567:17;30587:37;30612:3;30617:6;30587:24;:37::i;:::-;30567:57;;30634:11;30648:43;30680:9;30648:24;:43::i;:::-;30634:57;-1:-1:-1;30746:13:164;30762:69;30634:57;30800:29;2458:4:98;30800:5:164;:29;:::i;:::-;30762:24;:69::i;:::-;30746:85;;30841:19;30863:57;30888:14;30912:6;30863:24;:57::i;:::-;30841:79;-1:-1:-1;30985:28:164;30841:79;30985:14;:28;:::i;:::-;30969:44;28849:2171;-1:-1:-1;;;;;;;;;;;;;;;28849:2171:164:o;19350:118::-;19429:32;19434:12;19448:6;19456:4;19429;:32::i;3405:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3405:28:164;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9353:4442::-;9636:22;9626:6;;;;;;;:32;;;;;;;;:::i;:::-;;9622:64;;9667:19;;;;;;;;;;;;;;9622:64;9777:24;9804:9;9814:11;9804:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;9910:15;;;;9804:22;;-1:-1:-1;9910:15:164;;;8619:17:176;;8616:32;;8613:1;8609:40;9982:44:164;-1:-1:-1;10161:18:164;:14;10178:1;10161:18;:::i;:::-;10142:15;:7;:13;;2237:66:176;2189:20;1511:18;1508:46;-1:-1:-1;1505:1:176;1501:54;1612:22;;;1600:10;1597:38;1594:1;1590:46;1579:58;1730:22;;;1796:1;1792:17;;;1778:32;1854:1;1850:17;;;1836:32;1912:1;1908:17;;;1894:32;1970:1;1966:17;;;1952:32;2028:2;2024:18;;;2010:33;2174:36;2169:3;2165:46;2135:190;2083:260;;1283:1076;10142:15:164;:37;;;10138:65;;10188:15;;;;;;;;;;;;;;10138:65;10279:19;10308:27;10349:9;10345:1343;;;11080:28;11097:11;11080:14;:28;:::i;:::-;11074:1;:35;;11048:22;:7;:20;;;:22::i;:::-;:62;;;;;;:::i;:::-;11047:69;:211;;11171:81;11204:19;11222:1;11204:13;;;:19;:::i;:::-;11226:18;;;;;11171;:81::i;:::-;:87;;;11047:211;;;11135:17;11047:211;11031:227;;11351:6;11339:18;;10345:1343;;;11558:12;;;;;-1:-1:-1;11596:81:164;11629:19;:13;;;11647:1;11629:19;:::i;11596:81::-;11584:93;;10345:1343;12084:1;12061:13;:24;;12056:1;12041:10;;12031:21;;;;;;;:::i;:::-;;;;;;;;:26;;:54;12027:84;;12094:17;;;;;;;;;;;;;;12027:84;12182:9;12194:30;12212:11;12194:17;:30::i;:::-;12182:42;;13197:14;13257:21;:9;:15;;;3001:9:177;2881:145;13257:21:164;13214:39;;;;;:2;:7;;;;;:39;;13222:10;;;;13234:6;;;;13242:4;;13214:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13332:18;;;;13214:64;;;-1:-1:-1;13288:20:164;;13362:1;;13332:26;;:18;;2237:66:176;2189:20;1511:18;1508:46;-1:-1:-1;1505:1:176;1501:54;1612:22;;;1600:10;1597:38;1594:1;1590:46;1579:58;1730:22;;;1796:1;1792:17;;;1778:32;1854:1;1850:17;;;1836:32;1912:1;1908:17;;;1894:32;1970:1;1966:17;;;1952:32;2028:2;2024:18;;;2010:33;2174:36;2169:3;2165:46;2135:190;2083:260;;1283:1076;13332:26:164;13312:17;:9;:15;;2237:66:176;2189:20;1511:18;1508:46;-1:-1:-1;1505:1:176;1501:54;1612:22;;;1600:10;1597:38;1594:1;1590:46;1579:58;1730:22;;;1796:1;1792:17;;;1778:32;1854:1;1850:17;;;1836:32;1912:1;1908:17;;;1894:32;1970:1;1966:17;;;1952:32;2028:2;2024:18;;;2010:33;2174:36;2169:3;2165:46;2135:190;2083:260;;1283:1076;13312:17:164;:46;;;;:::i;:::-;13311:52;;;;:::i;:::-;:57;;;;-1:-1:-1;13382:28:164;;;;;13378:52;;13419:11;;;;;;;;;;;;;;13378:52;13524:18;;;;;:32;:18;:32;13520:60;;13565:15;;;;;;;;;;;;;;13520:60;-1:-1:-1;;13757:31:164;;;;13778:10;13757:31;;;;;;-1:-1:-1;;;;;;;;;;;9353:4442:164:o;19675:2011::-;19878:22;19868:6;;;;;;;:32;;;;;;;;:::i;:::-;;19864:64;;19909:19;;;;;;;;;;;;;;19864:64;19940:14;19956:20;19978:14;19994:20;20030:45;20062:12;20030:31;:45::i;:::-;19939:136;;;;;;;;20085:9;20097:66;20118:8;20128:11;20141:8;20151:11;20097:20;:66::i;:::-;20085:78;;20174:22;20199:2;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20174:36;;5253:4:194;20224:6:164;:39;20220:1460;;20316:20;;;;20337:6;20345:4;20357:14;14565::97;14561:22;;;14548:36;14543:3;14539:46;14519:67;;27890:4:164;3514:22:97;3501:36;3001:9:177;2881:145;20357:8:164;3001:9:177;2881:145;20357:14:164;20316:73;;;;;;;;;;;;;14739:25:357;;;;14780:18;;;14773:34;;;;14823:18;;;14816:34;20373:2:164;14866:18:357;;;14859:34;14909:19;;;14902:35;;;14711:19;;20316:73:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20220:1460;;;5374:4:194;20410:6:164;:47;20406:1274;;20530:20;;;;20551:6;20559:4;20571:8;:14;2881:145:177;20406:1274:164;5495:4:194;20624:6:164;:47;20620:1060;;20743:20;;;;20764:6;20772:4;20784:8;:14;2881:145:177;20620:1060:164;5624:4:194;20837:6:164;:51;20833:847;;21168:16;21222:35;:22;;;21245:11;21222:22;:35::i;:::-;21187:32;;:70;;;;:::i;:::-;:74;;21260:1;21187:74;:::i;:::-;21168:93;-1:-1:-1;21276:20:164;;;;21297:6;21305:4;21276:83;;;;;;;;;;;;;14739:25:357;;;;14780:18;;;14773:34;21337:4:164;21325:16;;;14823:18:357;;;14816:34;21344:1:164;14866:18:357;;;14859:34;14909:19;;;14902:35;;;14711:19;;21276:83:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20890:480;20833:847;;;5721:4:194;21380:6:164;:35;21376:304;;21526:86;;;;;;;;14739:25:357;;;14780:18;;;14773:34;;;21575:11:164;21590:4;21575:19;14823:18:357;;;14816:34;21597:1:164;14866:18:357;;;14859:34;14909:19;;;14902:35;;;21526:20:164;;;;;;14711:19:357;;21526:86:164;14471:472:357;21376:304:164;21650:19;;;;;;;;;;;;;;21376:304;19765:1921;;;;;;19675:2011;;;:::o;28212:213::-;27427:9;14565:14:97;14561:22;;;14548:36;14543:3;14539:46;14519:67;;27740:4:164;3514:22:97;3501:36;28293:23:164;28407:11;:9;:11::i;:::-;28394:24;;28212:213;;;:::o;23429:3867::-;23593:22;23583:6;;;;;;;:32;;;;;;;;:::i;:::-;;23579:64;;23624:19;;;;;;;;;;;;;;23579:64;23654:34;23691:9;23701:11;23691:22;;;;;;;;:::i;:::-;;;;;;;;;;;23654:59;;23723:31;23757:34;23779:11;23757:21;:34::i;:::-;23723:68;-1:-1:-1;24102:22:164;:18;:22;;24071:26;;;:55;24067:85;;;24135:17;;;;;;;;;;;;;;24067:85;24221:29;;;;:16;:29;;;;;;;;24217:64;;;24259:22;;;;;;;;;;;;;;24217:64;24292:34;24329:21;;;:8;:21;;;;;24390:23;;24576:24;;:44;;;;-1:-1:-1;24604:16:164;;;24576:44;24572:805;;;25109:28;;;;;;;25087:19;25171:25;;:67;;25227:11;25171:67;;;25199:25;;;;;;25171:67;25151:87;;25252:44;25268:9;25279:16;25252:15;:44::i;:::-;-1:-1:-1;;;25310:29:164;;;;-1:-1:-1;;25310:16:164;:29;;-1:-1:-1;25310:29:164;;;:36;;;;25342:4;25310:36;;;23429:3867::o;24572:805::-;25445:17;25526;25445;25554:1129;25578:19;25574:1;:23;25554:1129;;;25618:22;25643:16;25660:1;25643:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;25764:32;;;:16;:32;;;;;;;;25643:19;;-1:-1:-1;25764:32:164;;25759:68;;25805:22;;;;;;;;;;;;;;25759:68;25842:23;25868:9;25878:14;25868:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;26483:17;;25868:25;;-1:-1:-1;26483:17:164;;;:31;:17;:31;:79;;;;-1:-1:-1;26542:14:164;;;;;;;;26518:19;;;:44;26483:79;26479:194;;;26594:14;;;;26644;;;;26594;;;;;-1:-1:-1;26644:14:164;;;-1:-1:-1;26479:194:164;25604:1079;;25599:3;;;;:::i;:::-;;;25554:1129;;;-1:-1:-1;26891:98:164;26907:23;;;;:63;;26961:9;26907:63;;;26933:25;;;;;;26907:63;26972:16;26891:15;:98::i;:::-;-1:-1:-1;27161:40:164;;;;;;;;;;;;;;;;-1:-1:-1;;;27161:28:164;27253:29;;;:16;:29;;;;;:36;;;;-1:-1:-1;27253:36:164;;;23429:3867::o;1122:588:97:-;1389:4;1383:11;1407:19;;;14565:14;14561:22;;;14548:36;14543:3;14539:46;14519:67;;1407:19;1489:22;;;1482:4;1473:14;;1460:60;1562:6;1555:4;1550:3;1546:14;1542:27;1592:1;1589;1582:12;1664:4;1661:1;1657:12;1651:4;1644:26;;1362:342;1122:588;;;;:::o;8478:187:176:-;8619:17;8616:32;8613:1;8609:40;;8478:187::o;36108:1977:164:-;36860:24;36901:20;:14;;;36920:1;36901:20;:::i;:::-;36860:62;;36932:26;36961:80;36988:15;37013:10;37034:4;36961:18;:80::i;:::-;36932:109;-1:-1:-1;37051:14:164;37074:19;;;37109:9;;:61;;-1:-1:-1;37155:15:164;37169:1;37155:11;:15;:::i;:::-;37122:17;;;;37150:1;;37122:25;;:17;;2237:66:176;2189:20;1511:18;1508:46;-1:-1:-1;1505:1:176;1501:54;1612:22;;;1600:10;1597:38;1594:1;1590:46;1579:58;1730:22;;;1796:1;1792:17;;;1778:32;1854:1;1850:17;;;1836:32;1912:1;1908:17;;;1894:32;1970:1;1966:17;;;1952:32;2028:2;2024:18;;;2010:33;2174:36;2169:3;2165:46;2135:190;2083:260;;1283:1076;37122:25:164;:29;;;;:::i;:::-;:48;;;37109:61;37105:974;;;37648:36;;;4806:1:194;37648:36:164;;:74;;-1:-1:-1;37688:34:164;;;4900:1:194;37688:34:164;37648:74;37642:154;;37750:31;;;;;;;;1021:25:357;;;994:18;;37750:31:164;848:204:357;37642:154:164;37105:974;;;37816:34;;;;37812:267;;38037:31;;;;;;;;1021:25:357;;;994:18;;38037:31:164;848:204:357;37812:267:164;36289:1796;;;36108:1977;;;;:::o;11843:3927:98:-;12373:34;12370:41;-1:-1:-1;12367:1:98;12363:49;12466:9;;;12446:18;12443:33;12440:1;12436:41;12430:48;12524:9;;;12512:10;12509:25;12506:1;12502:33;12496:40;12578:9;;;12570:6;12567:21;12564:1;12560:29;12554:36;12630:9;;;12624:4;12621:19;12618:1;12614:27;12608:34;11891:8;12739:9;;12729:135;;12781:10;12775:4;12768:24;12845:4;12839;12832:18;12729:135;13016:66;12962:34;12951:9;;;12947:50;12941:4;12937:61;12932:151;12925:159;13210:9;;;13205:3;13201:19;;;14173:31;14169:39;;14272:9;;13660:2;14264:18;;;14230:32;14226:57;14348:9;;14340:18;;14305:33;14301:58;14424:9;;14416:18;;14381:33;14377:58;14500:9;;14492:18;;14457:33;14453:58;14575:9;;14567:18;;14533:32;14529:57;14648:9;;14640:18;;14608:30;14604:55;13672:31;13668:59;;13664:67;;13656:76;;13606:32;13602:131;13598:139;;13590:148;;13540:32;13536:203;13532:211;;13524:220;;13430:349;;13809:9;;13801:18;;13797:57;;13884:9;;13876:18;;;13872:57;;13951:9;;;13947:55;;15131:10;15261:43;15257:51;15499:11;;;15426:71;15422:89;15418:97;15595:72;15591:80;15747:3;15743:11;;11843:3927::o;5293:468::-;5354:9;5574:16;5568:23;;5586:3;5559:33;5552:41;5545:49;;5535:173;;5627:10;5621:4;5614:24;5689:4;5683;5676:18;5535:173;-1:-1:-1;5737:3:98;5730:11;;;;5726:19;;5293:468::o;2809:424::-;2870:9;3063:1;3059;3055:6;3051:14;3048:1;3045:21;3042:1;3038:29;3035:145;;;3099:10;3093:4;3086:24;3161:4;3155;3148:18;3035:145;-1:-1:-1;3213:3:98;3202:9;;3198:19;;2809:424::o;8260:3448::-;8309:8;8504:21;8499:1;:26;8495:40;;8260:3448;;;:::o;8495:40::-;8841:21;8838:1;8834:29;8824:164;;8900:10;8894:4;8887:24;8965:4;8959;8952:18;8824:164;9280:7;9274:2;9269:7;;;9268:19;;-1:-1:-1;9551:8:98;9619:2;9575:29;9564:7;;;9563:41;9607:7;9563:51;9562:59;;9647:29;9643:33;;9639:37;;;10328:35;;;10383:5;;9959:2;10382:13;;;10399:32;10381:50;10451:5;;10450:13;;10449:51;;10520:5;;10519:13;;10536:34;10518:52;10590:5;;10589:13;;10588:53;;10661:5;;10660:13;;10677:35;10659:53;9965:32;9898:31;9894:35;;9949:5;;9948:13;;9947:50;;;10022:5;;;:40;;10082:5;10081:13;;;10098:35;10080:53;10151:5;;;10160:40;10151:50;11079:10;11607:49;11594:62;11669:3;:7;;;;11593:84;;;;;;-1:-1:-1;;8260:3448:98:o;7938:186::-;7997:6;8081:36;2458:4;8100:1;8089:8;8095:1;8089:5;:8::i;:::-;:12;;;;:::i;:::-;8088:28;;;;:::i;:::-;8081:6;:36::i;:::-;8074:43;;7938:186;;;;;:::o;2826:363:176:-;2891:21;3066:11;3080:16;3086:9;2237:66;2189:20;1511:18;1508:46;-1:-1:-1;1505:1:176;1501:54;1612:22;;;1600:10;1597:38;1594:1;1590:46;1579:58;1730:22;;;1796:1;1792:17;;;1778:32;1854:1;1850:17;;;1836:32;1912:1;1908:17;;;1894:32;1970:1;1966:17;;;1952:32;2028:2;2024:18;;;2010:33;2174:36;2169:3;2165:46;2135:190;2083:260;;1283:1076;3080:16;3170:1;3066:30;;;;;3161:11;3146:27;;;;2826:363;-1:-1:-1;;2826:363:176:o;38605:677:164:-;38755:27;38854:25;38882:7;:71;;38915:38;:25;;;38941:11;38915:25;:38::i;:::-;38882:71;;;38892:20;:4;:18;;;:20::i;:::-;38854:99;;39121:9;39131:6;39121:17;;;;;;;;:::i;:::-;;;;;;;;;;;39109:29;;39148:128;39155:18;;;;39183:20;;;;39155:18;;:50;39148:128;;39243:21;;39233:9;:32;;:9;;39243:21;;;39233:32;;;;;;:::i;:::-;;;;;;;;;;;39221:44;;39148:128;;;38788:494;38605:677;;;;;:::o;43519:319::-;43590:10;43613:14;43629:20;43651:14;43667:20;43703:44;43735:11;43703:31;:44::i;:::-;43612:135;;;;;;;;43765:66;43786:8;43796:11;43809:8;43819:11;43765:20;:66::i;:::-;43757:74;43519:319;-1:-1:-1;;;;;;43519:319:164:o;39797:3468::-;39901:20;39923:21;39946:20;39968:21;40042:16;40061:6;40042:25;;40077:23;40103:9;40113:8;40103:19;;;;;;;;:::i;:::-;;;;;;;;;40245:14;40103:19;;;;;40245:14;;;;40103:19;;-1:-1:-1;40271:11:164;;40245:22;;:14;;2237:66:176;2189:20;1511:18;1508:46;-1:-1:-1;1505:1:176;1501:54;1612:22;;;1600:10;1597:38;1594:1;1590:46;1579:58;1730:22;;;1796:1;1792:17;;;1778:32;1854:1;1850:17;;;1836:32;1912:1;1908:17;;;1894:32;1970:1;1966:17;;;1952:32;2028:2;2024:18;;;2010:33;2174:36;2169:3;2165:46;2135:190;2083:260;;1283:1076;40245:22:164;:37;;;40241:67;;40291:17;;;;;;;;;;;;;;40241:67;40659:20;40723:5;40738:571;40761:14;;;;40787:11;;40761:22;;:14;;2237:66:176;2189:20;1511:18;1508:46;-1:-1:-1;1505:1:176;1501:54;1612:22;;;1600:10;1597:38;1594:1;1590:46;1579:58;1730:22;;;1796:1;1792:17;;;1778:32;1854:1;1850:17;;;1836:32;1912:1;1908:17;;;1894:32;1970:1;1966:17;;;1952:32;2028:2;2024:18;;;2010:33;2174:36;2169:3;2165:46;2135:190;2083:260;;1283:1076;40761:22:164;40746:37;;;;;40745:53;40738:571;;;40836:17;;;;41179:15;:11;40836:17;41179:15;:::i;:::-;41163:12;:31;41159:58;;41212:5;41196:21;;41159:58;41240:9;41250:11;41240:22;;;;;;;;:::i;:::-;;;;;;;;;;;41232:30;;41287:11;41276:22;;40800:509;40738:571;;;41622:22;;;;;41646:14;;;;41622:22;;;;;41646:14;41577:20;41646:14;41688:45;;:26;:20;:11;:18;;4185:1:176;4181:17;;4060:154;41688:20:164;:24;;3001:9:177;2881:145;41688:26:164;:45;;;41671:62;;42228:9;42224:1035;;;42567:1;42540:24;:9;:22;;;:24::i;:::-;:28;;;42536:349;;;42588:26;42617:70;42650:19;42668:1;42650:13;;;:19;:::i;:::-;42672:8;42682:4;42617:18;:70::i;:::-;42739:14;;;;42755:17;;;;;42739:14;;-1:-1:-1;42755:17:164;;;-1:-1:-1;42536:349:164;;-1:-1:-1;42536:349:164;;42840:18;:23;42812:58;;42536:349;42932:11;;;;42945:14;;;;42932:11;;-1:-1:-1;42945:14:164;;;-1:-1:-1;42224:1035:164;;;42991:26;43020:70;43053:19;:13;;;43071:1;43053:19;:::i;43020:70::-;43138:11;;;;;43151:14;;;;;43214;;;;43230:17;;;43138:11;;-1:-1:-1;43151:14:164;;;;;-1:-1:-1;43214:14:164;;-1:-1:-1;43230:17:164;;-1:-1:-1;;42224:1035:164;39995:3270;;;;;;;39797:3468;;;;;:::o;44205:616::-;44400:10;44622:16;;;:23;:192;;44752:60;;;;;;16946:25:357;;;16990:34;17060:15;;;17040:18;;;17033:43;;;;17092:18;;;17085:34;;;17155:15;;;17135:18;;;17128:43;16918:19;;44752:60:164;;;;;;;;;;;;44742:71;;;;;;44622:192;;;44691:9;44702:12;44680:35;;;;;;;;17415:25:357;;;17488:34;17476:47;17471:2;17456:18;;17449:75;17403:2;17388:18;;17182:348;44680:35:164;;;;;;;;;;;;;44670:46;;;;;;44614:200;44205:616;-1:-1:-1;;;;;44205:616:164:o;5396:336:176:-;5478:19;5509:11;5523:16;5529:9;2237:66;2189:20;1511:18;1508:46;-1:-1:-1;1505:1:176;1501:54;1612:22;;;1600:10;1597:38;1594:1;1590:46;1579:58;1730:22;;;1796:1;1792:17;;;1778:32;1854:1;1850:17;;;1836:32;1912:1;1908:17;;;1894:32;1970:1;1966:17;;;1952:32;2028:2;2024:18;;;2010:33;2174:36;2169:3;2165:46;2135:190;2083:260;;1283:1076;5523:16;5509:30;;;;5604:3;5593:9;5589:19;5713:1;5702:9;5698:17;5693:1;5689;5678:9;5674:17;5670:25;5658:9;5647;5643:25;5640:56;5636:80;5621:95;;;5558:168;5396:336;;;;:::o;35528:361:164:-;35721:12;;;;;35788:18;;;35706:12;35788:18;;;;;;;;;;;:26;;35721:12;;;;;;;35788:26;;35721:12;;35788:26;:::i;:::-;;;;-1:-1:-1;;35853:29:164;;;;;:11;9795:55:357;;;35853:29:164;;;9777:74:357;9867:18;;;9860:34;;;35853:4:164;:11;;;;9750:18:357;;35853:29:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7263:794:176;7412:18;7553:20;7532:17;:9;:15;;2237:66;2189:20;1511:18;1508:46;-1:-1:-1;1505:1:176;1501:54;1612:22;;;1600:10;1597:38;1594:1;1590:46;1579:58;1730:22;;;1796:1;1792:17;;;1778:32;1854:1;1850:17;;;1836:32;1912:1;1908:17;;;1894:32;1970:1;1966:17;;;1952:32;2028:2;2024:18;;;2010:33;2174:36;2169:3;2165:46;2135:190;2083:260;;1283:1076;7532:17;:41;;;7528:71;;7582:17;;;;;;;;;;;;;;7528:71;7665:24;7679:9;7665:13;:24::i;:::-;7653:36;;7946:20;7925:17;:9;:15;;2237:66;2189:20;1511:18;1508:46;-1:-1:-1;1505:1:176;1501:54;1612:22;;;1600:10;1597:38;1594:1;1590:46;1579:58;1730:22;;;1796:1;1792:17;;;1778:32;1854:1;1850:17;;;1836:32;1912:1;1908:17;;;1894:32;1970:1;1966:17;;;1952:32;2028:2;2024:18;;;2010:33;2174:36;2169:3;2165:46;2135:190;2083:260;;1283:1076;7925:17;:41;;;7921:130;;7994:46;8015:24;:20;8038:1;8015:24;:::i;:::-;7994:20;;;;;:46::i;6034:710::-;6100:18;6263:14;;6294:1;6279:17;;6259:38;6100:18;6398:10;6259:38;2237:66;2189:20;1511:18;1508:46;-1:-1:-1;1505:1:176;1501:54;1612:22;;;1600:10;1597:38;1594:1;1590:46;1579:58;1730:22;;;1796:1;1792:17;;;1778:32;1854:1;1850:17;;;1836:32;1912:1;1908:17;;;1894:32;1970:1;1966:17;;;1952:32;2028:2;2024:18;;;2010:33;2174:36;2169:3;2165:46;2135:190;2083:260;;1283:1076;6398:10;6384:24;;6607:19;;;;6718:9;;6712:16;;6034:710;-1:-1:-1;;;6034:710:176:o;4635:313::-;4717:20;4749:11;4763:16;4769:9;2237:66;2189:20;1511:18;1508:46;-1:-1:-1;1505:1:176;1501:54;1612:22;;;1600:10;1597:38;1594:1;1590:46;1579:58;1730:22;;;1796:1;1792:17;;;1778:32;1854:1;1850:17;;;1836:32;1912:1;1908:17;;;1894:32;1970:1;1966:17;;;1952:32;2028:2;2024:18;;;2010:33;2174:36;2169:3;2165:46;2135:190;2083:260;;1283:1076;4763:16;4749:30;;;;4844:3;4833:9;4829:19;4929:1;4925;4914:9;4910:17;4906:25;4894:9;4883;4879:25;4876:56;4861:71;;;4798:144;4635:313;;;;:::o;252:184:357:-;304:77;301:1;294:88;401:4;398:1;391:15;425:4;422:1;415:15;441:402;590:2;575:18;;623:1;612:13;;602:201;;659:77;656:1;649:88;760:4;757:1;750:15;788:4;785:1;778:15;602:201;812:25;;;441:402;:::o;1057:248::-;1125:6;1133;1186:2;1174:9;1165:7;1161:23;1157:32;1154:52;;;1202:1;1199;1192:12;1154:52;-1:-1:-1;;1225:23:357;;;1295:2;1280:18;;;1267:32;;-1:-1:-1;1057:248:357:o;2511:531::-;2553:3;2591:5;2585:12;2618:6;2613:3;2606:19;2643:1;2653:162;2667:6;2664:1;2661:13;2653:162;;;2729:4;2785:13;;;2781:22;;2775:29;2757:11;;;2753:20;;2746:59;2682:12;2653:162;;;2833:6;2830:1;2827:13;2824:87;;;2899:1;2892:4;2883:6;2878:3;2874:16;2870:27;2863:38;2824:87;-1:-1:-1;2956:2:357;2944:15;2961:66;2940:88;2931:98;;;;3031:4;2927:109;;2511:531;-1:-1:-1;;2511:531:357:o;3047:220::-;3196:2;3185:9;3178:21;3159:4;3216:45;3257:2;3246:9;3242:18;3234:6;3216:45;:::i;4037:154::-;4123:42;4116:5;4112:54;4105:5;4102:65;4092:93;;4181:1;4178;4171:12;4092:93;4037:154;:::o;4196:247::-;4255:6;4308:2;4296:9;4287:7;4283:23;4279:32;4276:52;;;4324:1;4321;4314:12;4276:52;4363:9;4350:23;4382:31;4407:5;4382:31;:::i;:::-;4432:5;4196:247;-1:-1:-1;;;4196:247:357:o;4448:160::-;4513:20;;4569:13;;4562:21;4552:32;;4542:60;;4598:1;4595;4588:12;4542:60;4448:160;;;:::o;4613:344::-;4715:6;4723;4731;4784:2;4772:9;4763:7;4759:23;4755:32;4752:52;;;4800:1;4797;4790:12;4752:52;4836:9;4823:23;4813:33;;4893:2;4882:9;4878:18;4865:32;4855:42;;4916:35;4947:2;4936:9;4932:18;4916:35;:::i;:::-;4906:45;;4613:344;;;;;:::o;5638:180::-;5697:6;5750:2;5738:9;5729:7;5725:23;5721:32;5718:52;;;5766:1;5763;5756:12;5718:52;-1:-1:-1;5789:23:357;;5638:180;-1:-1:-1;5638:180:357:o;5823:332::-;5913:6;5966:2;5954:9;5945:7;5941:23;5937:32;5934:52;;;5982:1;5979;5972:12;5934:52;6021:9;6008:23;6071:34;6064:5;6060:46;6053:5;6050:57;6040:85;;6121:1;6118;6111:12;7033:347;7084:8;7094:6;7148:3;7141:4;7133:6;7129:17;7125:27;7115:55;;7166:1;7163;7156:12;7115:55;-1:-1:-1;7189:20:357;;7232:18;7221:30;;7218:50;;;7264:1;7261;7254:12;7218:50;7301:4;7293:6;7289:17;7277:29;;7353:3;7346:4;7337:6;7329;7325:19;7321:30;7318:39;7315:59;;;7370:1;7367;7360:12;7315:59;7033:347;;;;;:::o;7385:854::-;7490:6;7498;7506;7514;7522;7530;7583:3;7571:9;7562:7;7558:23;7554:33;7551:53;;;7600:1;7597;7590:12;7551:53;7636:9;7623:23;7613:33;;7665:35;7696:2;7685:9;7681:18;7665:35;:::i;:::-;7655:45;;7751:2;7740:9;7736:18;7723:32;7774:18;7815:2;7807:6;7804:14;7801:34;;;7831:1;7828;7821:12;7801:34;7870:58;7920:7;7911:6;7900:9;7896:22;7870:58;:::i;:::-;7947:8;;-1:-1:-1;7844:84:357;-1:-1:-1;8035:2:357;8020:18;;8007:32;;-1:-1:-1;8051:16:357;;;8048:36;;;8080:1;8077;8070:12;8048:36;;8119:60;8171:7;8160:8;8149:9;8145:24;8119:60;:::i;:::-;7385:854;;;;-1:-1:-1;7385:854:357;;-1:-1:-1;7385:854:357;;8198:8;;7385:854;-1:-1:-1;;;7385:854:357:o;8653:316::-;8730:6;8738;8746;8799:2;8787:9;8778:7;8774:23;8770:32;8767:52;;;8815:1;8812;8805:12;8767:52;-1:-1:-1;;8838:23:357;;;8908:2;8893:18;;8880:32;;-1:-1:-1;8959:2:357;8944:18;;;8931:32;;8653:316;-1:-1:-1;8653:316:357:o;8974:435::-;9247:10;9239:6;9235:23;9224:9;9217:42;9295:6;9290:2;9279:9;9275:18;9268:34;9338:2;9333;9322:9;9318:18;9311:30;9198:4;9358:45;9399:2;9388:9;9384:18;9376:6;9358:45;:::i;9414:184::-;9466:77;9463:1;9456:88;9563:4;9560:1;9553:15;9587:4;9584:1;9577:15;10115:184;10167:77;10164:1;10157:88;10264:4;10261:1;10254:15;10288:4;10285:1;10278:15;10304:128;10344:3;10375:1;10371:6;10368:1;10365:13;10362:39;;;10381:18;;:::i;:::-;-1:-1:-1;10417:9:357;;10304:128::o;10437:229::-;10476:4;10505:18;10573:10;;;;10543;;10595:12;;;10592:38;;;10610:18;;:::i;:::-;10647:13;;10437:229;-1:-1:-1;;;10437:229:357:o;10671:125::-;10711:4;10739:1;10736;10733:8;10730:34;;;10744:18;;:::i;:::-;-1:-1:-1;10781:9:357;;10671:125::o;10801:270::-;10840:7;10872:18;10917:2;10914:1;10910:10;10947:2;10944:1;10940:10;11003:3;10999:2;10995:12;10990:3;10987:21;10980:3;10973:11;10966:19;10962:47;10959:73;;;11012:18;;:::i;:::-;11052:13;;10801:270;-1:-1:-1;;;;10801:270:357:o;11076:272::-;11182:6;11190;11243:2;11231:9;11222:7;11218:23;11214:32;11211:52;;;11259:1;11256;11249:12;11211:52;-1:-1:-1;;11282:16:357;;11338:2;11323:18;;;11317:25;11282:16;;11317:25;;-1:-1:-1;11076:272:357:o;11353:184::-;11405:77;11402:1;11395:88;11502:4;11499:1;11492:15;11526:4;11523:1;11516:15;11542:120;11582:1;11608;11598:35;;11613:18;;:::i;:::-;-1:-1:-1;11647:9:357;;11542:120::o;11667:228::-;11707:7;11833:1;11765:66;11761:74;11758:1;11755:81;11750:1;11743:9;11736:17;11732:105;11729:131;;;11840:18;;:::i;:::-;-1:-1:-1;11880:9:357;;11667:228::o;11900:112::-;11932:1;11958;11948:35;;11963:18;;:::i;:::-;-1:-1:-1;11997:9:357;;11900:112::o;12017:246::-;12057:4;12086:34;12170:10;;;;12140;;12192:12;;;12189:38;;;12207:18;;:::i;12268:253::-;12308:3;12336:34;12397:2;12394:1;12390:10;12427:2;12424:1;12420:10;12458:3;12454:2;12450:12;12445:3;12442:21;12439:47;;;12466:18;;:::i;:::-;12502:13;;12268:253;-1:-1:-1;;;;12268:253:357:o;12526:271::-;12709:6;12701;12696:3;12683:33;12665:3;12735:16;;12760:13;;;12735:16;12526:271;-1:-1:-1;12526:271:357:o;12802:325::-;12890:6;12885:3;12878:19;12942:6;12935:5;12928:4;12923:3;12919:14;12906:43;;12994:1;12987:4;12978:6;12973:3;12969:16;12965:27;12958:38;12860:3;13116:4;13046:66;13041:2;13033:6;13029:15;13025:88;13020:3;13016:98;13012:109;13005:116;;12802:325;;;;:::o;13132:502::-;13373:2;13362:9;13355:21;13336:4;13399:61;13456:2;13445:9;13441:18;13433:6;13425;13399:61;:::i;:::-;13508:9;13500:6;13496:22;13491:2;13480:9;13476:18;13469:50;13536:49;13578:6;13570;13562;13536:49;:::i;:::-;13528:57;;;13621:6;13616:2;13605:9;13601:18;13594:34;13132:502;;;;;;;;:::o;13639:184::-;13709:6;13762:2;13750:9;13741:7;13737:23;13733:32;13730:52;;;13778:1;13775;13768:12;13730:52;-1:-1:-1;13801:16:357;;13639:184;-1:-1:-1;13639:184:357:o;13828:195::-;13866:4;13903;13900:1;13896:12;13935:4;13932:1;13928:12;13960:3;13955;13952:12;13949:38;;;13967:18;;:::i;:::-;14004:13;;;13828:195;-1:-1:-1;;;13828:195:357:o;14028:157::-;14058:1;14092:4;14089:1;14085:12;14116:3;14106:37;;14123:18;;:::i;:::-;14175:3;14168:4;14165:1;14161:12;14157:22;14152:27;;;14028:157;;;;:::o;14190:276::-;14285:6;14338:2;14326:9;14317:7;14313:23;14309:32;14306:52;;;14354:1;14351;14344:12;14306:52;14386:9;14380:16;14405:31;14430:5;14405:31;:::i;15424:195::-;15463:3;15494:66;15487:5;15484:77;15481:103;;15564:18;;:::i;:::-;-1:-1:-1;15611:1:357;15600:13;;15424:195::o;15624:655::-;15663:7;15695:66;15787:1;15784;15780:9;15815:1;15812;15808:9;15860:1;15856:2;15852:10;15849:1;15846:17;15841:2;15837;15833:11;15829:35;15826:61;;;15867:18;;:::i;:::-;15906:66;15998:1;15995;15991:9;16045:1;16041:2;16036:11;16033:1;16029:19;16024:2;16020;16016:11;16012:37;16009:63;;;16052:18;;:::i;:::-;16098:1;16095;16091:9;16081:19;;16145:1;16141:2;16136:11;16133:1;16129:19;16124:2;16120;16116:11;16112:37;16109:63;;;16152:18;;:::i;:::-;16217:1;16213:2;16208:11;16205:1;16201:19;16196:2;16192;16188:11;16184:37;16181:63;;;16224:18;;:::i;:::-;-1:-1:-1;;;16264:9:357;;;;;15624:655;-1:-1:-1;;;15624:655:357:o;16284:308::-;16323:1;16349;16339:35;;16354:18;;:::i;:::-;16471:66;16468:1;16465:73;16396:66;16393:1;16390:73;16386:153;16383:179;;;16542:18;;:::i;:::-;-1:-1:-1;16576:10:357;;16284:308::o","linkReferences":{},"immutableReferences":{"97720":[{"start":1643,"length":32},{"start":9176,"length":32}],"97723":[{"start":2439,"length":32},{"start":4347,"length":32},{"start":8062,"length":32},{"start":8196,"length":32},{"start":8719,"length":32},{"start":9018,"length":32}],"97726":[{"start":2256,"length":32},{"start":4239,"length":32},{"start":4440,"length":32},{"start":4824,"length":32},{"start":8985,"length":32},{"start":10781,"length":32},{"start":12541,"length":32},{"start":14380,"length":32},{"start":14682,"length":32},{"start":14939,"length":32},{"start":15152,"length":32}],"97730":[{"start":2205,"length":32},{"start":4585,"length":32},{"start":4730,"length":32},{"start":4975,"length":32},{"start":7789,"length":32},{"start":7855,"length":32},{"start":11501,"length":32}],"97734":[{"start":1055,"length":32},{"start":9414,"length":32},{"start":10267,"length":32}],"97738":[{"start":1702,"length":32},{"start":6175,"length":32},{"start":11247,"length":32}],"97742":[{"start":1106,"length":32},{"start":3493,"length":32},{"start":5895,"length":32},{"start":7265,"length":32},{"start":16177,"length":32}],"97746":[{"start":1291,"length":32},{"start":3103,"length":32},{"start":6240,"length":32}],"97749":[{"start":2122,"length":32},{"start":11093,"length":32}],"97753":[{"start":1478,"length":32},{"start":4687,"length":32},{"start":4877,"length":32},{"start":4919,"length":32}]}},"methodIdentifiers":{"absolutePrestate()":"8d450a95","addLocalData(uint256,uint256,uint256)":"f8f43ff6","anchorStateRegistry()":"5c0cba33","attack(uint256,bytes32)":"c55cd0c7","claimCredit(address)":"60e27464","claimData(uint256)":"c6f0308c","claimDataLen()":"8980e0cc","claims(bytes32)":"eff0f592","clockExtension()":"6b6716c0","createdAt()":"cf09e0d0","credit(address)":"d5d44d80","defend(uint256,bytes32)":"35fef567","extraData()":"609d3334","gameCreator()":"37b1b229","gameData()":"fa24f743","gameType()":"bbdc02db","getChallengerDuration(uint256)":"bd8da956","getRequiredBond(uint128)":"c395e1ca","initialize()":"8129fc1c","l1Head()":"6361506d","l2BlockNumber()":"8b85902b","l2ChainId()":"d6ae3cd5","maxClockDuration()":"dabd396d","maxGameDepth()":"fa315aa9","move(uint256,bytes32,bool)":"632247ea","resolve()":"2810e1d6","resolveClaim(uint256)":"fdffbb28","resolvedAt()":"19effeb4","resolvedSubgames(uint256)":"fe2bbeb2","rootClaim()":"bcef3b55","splitDepth()":"ec5e6308","startingBlockNumber()":"70872aa5","startingOutputRoot()":"57da950e","startingRootHash()":"25fc2ace","status()":"200d2ed2","step(uint256,bool,bytes,bytes)":"d8cc1a3c","subgames(uint256,uint256)":"2ad69aeb","version()":"54fd4d50","vm()":"3a768463","weth()":"3fc8cef3"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"_gameType\",\"type\":\"uint32\"},{\"internalType\":\"Claim\",\"name\":\"_absolutePrestate\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_maxGameDepth\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_splitDepth\",\"type\":\"uint256\"},{\"internalType\":\"Duration\",\"name\":\"_clockExtension\",\"type\":\"uint64\"},{\"internalType\":\"Duration\",\"name\":\"_maxClockDuration\",\"type\":\"uint64\"},{\"internalType\":\"contract IBigStepper\",\"name\":\"_vm\",\"type\":\"address\"},{\"internalType\":\"contract IDelayedWETH\",\"name\":\"_weth\",\"type\":\"address\"},{\"internalType\":\"contract IAnchorStateRegistry\",\"name\":\"_anchorStateRegistry\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_l2ChainId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AnchorRootNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotDefendRootClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClaimAboveSplit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClaimAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClaimAlreadyResolved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockNotExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockTimeExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateStep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameDepthExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameNotInProgress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectBondAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidClockExtension\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLocalIdent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidParent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPrestate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSplitDepth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxDepthTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoCreditToClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfOrderResolution\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"Claim\",\"name\":\"rootClaim\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedRootClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidStep\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"parentIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimant\",\"type\":\"address\"}],\"name\":\"Move\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum GameStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"Resolved\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"absolutePrestate\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"absolutePrestate_\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ident\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_execLeafIdx\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_partOffset\",\"type\":\"uint256\"}],\"name\":\"addLocalData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"anchorStateRegistry\",\"outputs\":[{\"internalType\":\"contract IAnchorStateRegistry\",\"name\":\"registry_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"attack\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"}],\"name\":\"claimCredit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"claimData\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"parentIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"counteredBy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"claimant\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"bond\",\"type\":\"uint128\"},{\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"internalType\":\"Position\",\"name\":\"position\",\"type\":\"uint128\"},{\"internalType\":\"Clock\",\"name\":\"clock\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimDataLen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"len_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ClaimHash\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"claims\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"clockExtension\",\"outputs\":[{\"internalType\":\"Duration\",\"name\":\"clockExtension_\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"createdAt\",\"outputs\":[{\"internalType\":\"Timestamp\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"credit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"defend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"extraData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameCreator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"creator_\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameData\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint32\"},{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameType\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_claimIndex\",\"type\":\"uint256\"}],\"name\":\"getChallengerDuration\",\"outputs\":[{\"internalType\":\"Duration\",\"name\":\"duration_\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Position\",\"name\":\"_position\",\"type\":\"uint128\"}],\"name\":\"getRequiredBond\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"requiredBond_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1Head\",\"outputs\":[{\"internalType\":\"Hash\",\"name\":\"l1Head_\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2BlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"l2BlockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"l2ChainId_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxClockDuration\",\"outputs\":[{\"internalType\":\"Duration\",\"name\":\"maxClockDuration_\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxGameDepth\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxGameDepth_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_challengeIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"}],\"name\":\"move\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"enum GameStatus\",\"name\":\"status_\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_claimIndex\",\"type\":\"uint256\"}],\"name\":\"resolveClaim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resolvedAt\",\"outputs\":[{\"internalType\":\"Timestamp\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"resolvedSubgames\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rootClaim\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"splitDepth\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"splitDepth_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startingBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"startingBlockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startingOutputRoot\",\"outputs\":[{\"internalType\":\"Hash\",\"name\":\"root\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"l2BlockNumber\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startingRootHash\",\"outputs\":[{\"internalType\":\"Hash\",\"name\":\"startingRootHash_\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"status\",\"outputs\":[{\"internalType\":\"enum GameStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_claimIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_stateData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"}],\"name\":\"step\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"subgames\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vm\",\"outputs\":[{\"internalType\":\"contract IBigStepper\",\"name\":\"vm_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"contract IDelayedWETH\",\"name\":\"weth_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"UnexpectedRootClaim(bytes32)\":[{\"params\":{\"rootClaim\":\"is the claim that was unexpected.\"}}]},\"kind\":\"dev\",\"methods\":{\"addLocalData(uint256,uint256,uint256)\":{\"params\":{\"_execLeafIdx\":\"The index of the leaf claim in an execution subgame that requires the local data for a step.\",\"_ident\":\"The local identifier of the data to post.\",\"_partOffset\":\"The offset of the data to post.\"}},\"attack(uint256,bytes32)\":{\"params\":{\"_claim\":\"The `Claim` at the relative attack position.\",\"_parentIndex\":\"Index of the `Claim` to attack in the `claimData` array.\"}},\"claimCredit(address)\":{\"params\":{\"_recipient\":\"The owner and recipient of the credit.\"}},\"constructor\":{\"params\":{\"_absolutePrestate\":\"The absolute prestate of the instruction trace.\",\"_anchorStateRegistry\":\"The contract that stores the anchor state for each game type.\",\"_clockExtension\":\"The clock extension to perform when the remaining duration is less than the extension.\",\"_gameType\":\"The type ID of the game.\",\"_l2ChainId\":\"Chain ID of the L2 network this contract argues about.\",\"_maxClockDuration\":\"The maximum amount of time that may accumulate on a team's chess clock.\",\"_maxGameDepth\":\"The maximum depth of bisection.\",\"_splitDepth\":\"The final depth of the output bisection portion of the game.\",\"_vm\":\"An onchain VM that performs single instruction steps on an FPP trace.\",\"_weth\":\"WETH contract for holding ETH.\"}},\"defend(uint256,bytes32)\":{\"params\":{\"_claim\":\"The `Claim` at the relative defense position.\",\"_parentIndex\":\"Index of the claim to defend in the `claimData` array.\"}},\"extraData()\":{\"details\":\"`clones-with-immutable-args` argument #4\",\"returns\":{\"extraData_\":\"Any extra data supplied to the dispute game contract by the creator.\"}},\"gameCreator()\":{\"details\":\"`clones-with-immutable-args` argument #1\",\"returns\":{\"creator_\":\"The creator of the dispute game.\"}},\"gameData()\":{\"returns\":{\"extraData_\":\"Any extra data supplied to the dispute game contract by the creator.\",\"gameType_\":\"The type of proof system being used.\",\"rootClaim_\":\"The root claim of the DisputeGame.\"}},\"gameType()\":{\"details\":\"The reference impl should be entirely different depending on the type (fault, validity) i.e. The game type should indicate the security model.\",\"returns\":{\"gameType_\":\"The type of proof system being used.\"}},\"getChallengerDuration(uint256)\":{\"params\":{\"_claimIndex\":\"The index of the subgame root claim.\"},\"returns\":{\"duration_\":\"The time elapsed on the potential challenger to `_claimIndex`'s chess clock.\"}},\"getRequiredBond(uint128)\":{\"params\":{\"_position\":\"The position of the bonded interaction.\"},\"returns\":{\"requiredBond_\":\"The required ETH bond for the given move, in wei.\"}},\"initialize()\":{\"details\":\"This function may only be called once.\"},\"l1Head()\":{\"details\":\"`clones-with-immutable-args` argument #3\",\"returns\":{\"l1Head_\":\"The parent hash of the L1 block when the dispute game was created.\"}},\"move(uint256,bytes32,bool)\":{\"params\":{\"_challengeIndex\":\"The index of the claim being moved against.\",\"_claim\":\"The claim at the next logical position in the game.\",\"_isAttack\":\"Whether or not the move is an attack or defense.\"}},\"resolve()\":{\"details\":\"May only be called if the `status` is `IN_PROGRESS`.\",\"returns\":{\"status_\":\"The status of the game after resolution.\"}},\"resolveClaim(uint256)\":{\"details\":\"This function must be called bottom-up in the DAG A subgame is a tree of claims that has a maximum depth of 1. A subgame root claims is valid if, and only if, all of its child claims are invalid. At the deepest level in the DAG, a claim is invalid if there's a successful step against it.\",\"params\":{\"_claimIndex\":\"The index of the subgame root claim to resolve.\"}},\"rootClaim()\":{\"details\":\"`clones-with-immutable-args` argument #2\",\"returns\":{\"rootClaim_\":\"The root claim of the DisputeGame.\"}},\"step(uint256,bool,bytes,bytes)\":{\"details\":\"This function should point to a fault proof processor in order to execute a step in the fault proof program on-chain. The interface of the fault proof processor contract should adhere to the `IBigStepper` interface.\",\"params\":{\"_claimIndex\":\"The index of the challenged claim within `claimData`.\",\"_isAttack\":\"Whether or not the step is an attack or a defense.\",\"_proof\":\"Proof to access memory nodes in the VM's merkle state tree.\",\"_stateData\":\"The stateData of the step is the preimage of the claim at the given prestate, which is at `_stateIndex` if the move is an attack and `_claimIndex` if the move is a defense. If the step is an attack on the first instruction, it is the absolute prestate of the fault proof VM.\"}}},\"stateVariables\":{\"status\":{\"return\":\"The current status of the game.\",\"returns\":{\"_0\":\"The current status of the game.\"}},\"version\":{\"custom:semver\":\"0.17.0\"}},\"title\":\"FaultDisputeGame\",\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"notice\":\"Thrown when a dispute game has already been initialized.\"}],\"AnchorRootNotFound()\":[{\"notice\":\"Thrown when an anchor root is not found for a given game type.\"}],\"BondTransferFailed()\":[{\"notice\":\"Thrown when the transfer of credit to a recipient account reverts.\"}],\"CannotDefendRootClaim()\":[{\"notice\":\"Thrown when a defense against the root claim is attempted.\"}],\"ClaimAboveSplit()\":[{\"notice\":\"Thrown when a parent output root is attempted to be found on a claim that is in the output root portion of the tree.\"}],\"ClaimAlreadyExists()\":[{\"notice\":\"Thrown when a claim is attempting to be made that already exists.\"}],\"ClaimAlreadyResolved()\":[{\"notice\":\"Thrown when resolving a claim that has already been resolved.\"}],\"ClockNotExpired()\":[{\"notice\":\"Thrown when the game is attempted to be resolved too early.\"}],\"ClockTimeExceeded()\":[{\"notice\":\"Thrown when a move is attempted to be made after the clock has timed out.\"}],\"DuplicateStep()\":[{\"notice\":\"Thrown when trying to step against a claim for a second time, after it has already been countered with an instruction step.\"}],\"GameDepthExceeded()\":[{\"notice\":\"Thrown when a move is attempted to be made at or greater than the max depth of the game.\"}],\"GameNotInProgress()\":[{\"notice\":\"Thrown when an action that requires the game to be `IN_PROGRESS` is invoked when the game is not in progress.\"}],\"IncorrectBondAmount()\":[{\"notice\":\"Thrown when a supplied bond is not equal to the required bond amount to cover the cost of the interaction.\"}],\"InvalidClockExtension()\":[{\"notice\":\"Thrown on deployment if the max clock duration is less than or equal to the clock extension.\"}],\"InvalidLocalIdent()\":[{\"notice\":\"Thrown when an invalid local identifier is passed to the `addLocalData` function.\"}],\"InvalidParent()\":[{\"notice\":\"Thrown when a step is attempted above the maximum game depth.\"}],\"InvalidPrestate()\":[{\"notice\":\"Thrown when an invalid prestate is supplied to `step`.\"}],\"InvalidSplitDepth()\":[{\"notice\":\"Thrown on deployment if the split depth is greater than or equal to the max depth of the game.\"}],\"MaxDepthTooLarge()\":[{\"notice\":\"Thrown on deployment if the max depth is greater than `LibPosition.`\"}],\"NoCreditToClaim()\":[{\"notice\":\"Thrown when a credit claim is attempted for a value of 0.\"}],\"OutOfOrderResolution()\":[{\"notice\":\"Thrown when resolving claims out of order.\"}],\"UnexpectedRootClaim(bytes32)\":[{\"notice\":\"Thrown when the root claim has an unexpected VM status. Some games can only start with a root-claim with a specific status.\"}],\"ValidStep()\":[{\"notice\":\"Thrown when a step is made that computes the expected post state correctly.\"}]},\"events\":{\"Move(uint256,bytes32,address)\":{\"notice\":\"Emitted when a new claim is added to the DAG by `claimant`\"},\"Resolved(uint8)\":{\"notice\":\"Emitted when the game is resolved.\"}},\"kind\":\"user\",\"methods\":{\"absolutePrestate()\":{\"notice\":\"Returns the absolute prestate of the instruction trace.\"},\"addLocalData(uint256,uint256,uint256)\":{\"notice\":\"Posts the requested local data to the VM's `PreimageOralce`.\"},\"anchorStateRegistry()\":{\"notice\":\"Returns the anchor state registry contract.\"},\"attack(uint256,bytes32)\":{\"notice\":\"Attack a disagreed upon `Claim`.\"},\"claimCredit(address)\":{\"notice\":\"Claim the credit belonging to the recipient address.\"},\"claimData(uint256)\":{\"notice\":\"An append-only array of all claims made during the dispute game.\"},\"claimDataLen()\":{\"notice\":\"Returns the length of the `claimData` array.\"},\"claims(bytes32)\":{\"notice\":\"A mapping to allow for constant-time lookups of existing claims.\"},\"clockExtension()\":{\"notice\":\"Returns the clock extension constant.\"},\"createdAt()\":{\"notice\":\"The starting timestamp of the game\"},\"credit(address)\":{\"notice\":\"Credited balances for winning participants.\"},\"defend(uint256,bytes32)\":{\"notice\":\"Defend an agreed upon `Claim`.\"},\"extraData()\":{\"notice\":\"Getter for the extra data.\"},\"gameCreator()\":{\"notice\":\"Getter for the creator of the dispute game.\"},\"gameData()\":{\"notice\":\"A compliant implementation of this interface should return the components of the game UUID's preimage provided in the cwia payload. The preimage of the UUID is constructed as `keccak256(gameType . rootClaim . extraData)` where `.` denotes concatenation.\"},\"gameType()\":{\"notice\":\"Getter for the game type.\"},\"getChallengerDuration(uint256)\":{\"notice\":\"Returns the amount of time elapsed on the potential challenger to `_claimIndex`'s chess clock. Maxes out at `MAX_CLOCK_DURATION`.\"},\"getRequiredBond(uint128)\":{\"notice\":\"Returns the required bond for a given move kind.\"},\"initialize()\":{\"notice\":\"Initializes the contract.\"},\"l1Head()\":{\"notice\":\"Getter for the parent hash of the L1 block when the dispute game was created.\"},\"l2BlockNumber()\":{\"notice\":\"The l2BlockNumber of the disputed output root in the `L2OutputOracle`.\"},\"l2ChainId()\":{\"notice\":\"Returns the chain ID of the L2 network this contract argues about.\"},\"maxClockDuration()\":{\"notice\":\"Returns the max clock duration.\"},\"maxGameDepth()\":{\"notice\":\"Returns the max game depth.\"},\"move(uint256,bytes32,bool)\":{\"notice\":\"Generic move function, used for both `attack` and `defend` moves.\"},\"resolve()\":{\"notice\":\"If all necessary information has been gathered, this function should mark the game status as either `CHALLENGER_WINS` or `DEFENDER_WINS` and return the status of the resolved game. It is at this stage that the bonds should be awarded to the necessary parties.\"},\"resolveClaim(uint256)\":{\"notice\":\"Resolves the subgame rooted at the given claim index.\"},\"resolvedAt()\":{\"notice\":\"The timestamp of the game's global resolution.\"},\"resolvedSubgames(uint256)\":{\"notice\":\"An interneal mapping of resolved subgames rooted at a claim index.\"},\"rootClaim()\":{\"notice\":\"Getter for the root claim.\"},\"splitDepth()\":{\"notice\":\"Returns the split depth.\"},\"startingBlockNumber()\":{\"notice\":\"Only the starting block number of the game.\"},\"startingOutputRoot()\":{\"notice\":\"The latest finalized output root, serving as the anchor for output bisection.\"},\"startingRootHash()\":{\"notice\":\"Only the starting output root of the game.\"},\"status()\":{\"notice\":\"Returns the current status of the game.\"},\"step(uint256,bool,bytes,bytes)\":{\"notice\":\"Perform an instruction step via an on-chain fault proof processor.\"},\"subgames(uint256,uint256)\":{\"notice\":\"A mapping of subgames rooted at a claim index to other claim indices in the subgame.\"},\"version()\":{\"notice\":\"Semantic version.\"},\"vm()\":{\"notice\":\"Returns the address of the VM.\"},\"weth()\":{\"notice\":\"Returns the WETH contract for holding ETH.\"}},\"notice\":\"An implementation of the `IFaultDisputeGame` interface.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/dispute/FaultDisputeGame.sol\":\"FaultDisputeGame\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/solady/src/utils/Clone.sol\":{\"keccak256\":\"0xb408dc90294bacd394e59c83619e7dc76f45c83ad6f8e923eb07d3a5bab89f22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3abeb55ad062c4b29b5b5edab6167de36615c51621ef71ef3ddfd9f6735a93b\",\"dweb:/ipfs/Qmboh4zX6ZgFVhetUhZGJ14kKXiaGeB9bW3Vseg2MLMGHW\"]},\"lib/solady/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x1fbad6f61bd3e5875e6b0060b67626cb1ccb9542c0da368a44eb3870c9a9e160\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5189fcd5ecff0f449475cf3183e9d6b509cd1221555aba6cd76c70b097cc8260\",\"dweb:/ipfs/Qmbt34Kf5h2DeYzmqXtg3jprYxDCFdENtf41NgCdcARA7u\"]},\"src/cannon/interfaces/IPreimageOracle.sol\":{\"keccak256\":\"0x7bda0156571b468cf0e22321945655f2dacd7082f440f742aa4612b36b388a9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5ba53777c65987bc20faa7731476c779e7794a58bafb40191a25275a05e3f8af\",\"dweb:/ipfs/QmbxQwE2BC9aabTruDqkd2CLojwq7G9i2rkWKv46Wucae1\"]},\"src/dispute/FaultDisputeGame.sol\":{\"keccak256\":\"0x0d90358576f7b5c14cfe338937ed4fea7d945f9a1b5e68111196310554b485b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5d6d4ce62af4902e17af3a70b6c4688be4d148498c841af9c8ead2c076794e6e\",\"dweb:/ipfs/QmS2ebpEDxbhnUwXYnKEChS2zVpFvfdnJr3AbfDSQovBAN\"]},\"src/dispute/interfaces/IAnchorStateRegistry.sol\":{\"keccak256\":\"0x5fd05f2482d149668897e54f92d556a0c3512aa35b51ba800ef15d18dd490cb3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://689d621bc5c43a41d5232980f0eceecd7a3d8aa99438dfd9fed5f73d5ecd2887\",\"dweb:/ipfs/QmQ5jw54TkdxLuLFti6JZown54rGQ3m3Q93pvnVU1j1HRj\"]},\"src/dispute/interfaces/IBigStepper.sol\":{\"keccak256\":\"0xc92ee3069677b903826c83d5b4e46e3be462f9ccf1d95e72a12b1052e3451f0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f93692bd3c8d9533ab8024ce2df6d880328826d1a92fdb9cf45301e2d0c65884\",\"dweb:/ipfs/QmUcmbjTw9gnCUNasgmQjVbSgcCPKZ1FQyA31dH4k5Nc75\"]},\"src/dispute/interfaces/IDelayedWETH.sol\":{\"keccak256\":\"0x0bb035e9bbb411696841ea292eeed6d4463c3c3eee7d6c5d8e38a101e8a4ff04\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0477cf2c137392d35081f23bfd7f3565881767dcb1489a62e7e80b3c178cfce8\",\"dweb:/ipfs/QmTjALjrHg5rvhjfCKPmXLTgkMNneECWaqoarunSoVS37G\"]},\"src/dispute/interfaces/IDisputeGame.sol\":{\"keccak256\":\"0xe2611453d5cc05f8aa30dc0e5e15ee5ae29fd3eb55a2c034424250baebf12f9b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://274e00fbcea3b8455bbaa042130bf1f7a5b2b769f28ad57afbf9fabfd74a757a\",\"dweb:/ipfs/QmRKQTfYdMjQYVbuZhdXts1d752eUq8RwrjqqwV5XRYLi6\"]},\"src/dispute/interfaces/IDisputeGameFactory.sol\":{\"keccak256\":\"0x204d89d38d4dc0db40fbf898d95e639ac5608810a5a5506a3d80d71177648bda\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://71e5c0ff04f409f30ca4f8ebfae1592c6ca495e315b059f969d11812e6e84dbd\",\"dweb:/ipfs/QmaNKkhkJv7qHzX6bKB3LjpWBupfMPLhoATUGx1HRTLtXh\"]},\"src/dispute/interfaces/IFaultDisputeGame.sol\":{\"keccak256\":\"0xe2f3acb614ecffd6e0fee98443cf58fa95c1209f4ee43e723781733823da3437\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e4cffbd5b53e6459aad472249e629ae5f52c725b6f6828050df019a18ab50278\",\"dweb:/ipfs/QmTC1GgzbwSyqd9fbJz2veqHnbKJfAK5tBr5jUZcC5N271\"]},\"src/dispute/interfaces/IInitializable.sol\":{\"keccak256\":\"0xbc553af6501a972850a98fc6284943f8e95a5183a7b4f64198c16fca2338c9dc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1f1c422ce4a9e72f0bbdec36434206da4af3a32d38f922acab957942e994ce5\",\"dweb:/ipfs/QmNQGWBceLxx1CKSMLfwTM584q8UCgUpF4rrFe8pdbWYtj\"]},\"src/dispute/interfaces/IWETH.sol\":{\"keccak256\":\"0x3858f6c0ce3ec7978b1ea1772484c25aec7c8c480ceaf18239f726fdd06fdd1f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b72cf3bc31324409480e9ae6eb3e2654da8dff3cbf9f2136b19fe714293b3766\",\"dweb:/ipfs/QmTW3JiFUo8pYhDbthPH8ZSp5f1nmdga4CSzo4YdEzppnM\"]},\"src/dispute/lib/LibGameId.sol\":{\"keccak256\":\"0x9a9f30500da6eb7eeaa7193515dc5e45dc479f09ae7d522a07283c0fb5f4bfa6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be113d8198d5822385de3d6ff3d7b3e8241993484aa95604ffaf38c2d33f40e0\",\"dweb:/ipfs/QmY9mHC52fqc4gAFYCGobNyuP4TqugQgs8o1kTF33t17Hc\"]},\"src/dispute/lib/LibHashing.sol\":{\"keccak256\":\"0x5a072cd028094eee55acb84ed8d08d7422b1fb46658b7e043e916781530a383b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b67e54f1318f1fd67b28b16c6861a56e27217c26a12aaea5c446e2ec53143920\",\"dweb:/ipfs/QmVLSTP3PwXzRkR3A4qV9fjZhca9v8J1EnEYuVGUsSirAq\"]},\"src/dispute/lib/LibPosition.sol\":{\"keccak256\":\"0xf7ceb26f0ac7067ff8a43f263451050eef6fba2029eafb83d3cbe35224d894a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bb403b0d707a8e2e3780a19185b918bfe907ca2d1b939ea74ae095a5cdf3b48\",\"dweb:/ipfs/QmYFzkmF8TRomp1cBEbTsKxiEnqLnX6SvSh4y3rVa84pBR\"]},\"src/dispute/lib/LibUDT.sol\":{\"keccak256\":\"0x9b61b15f5edfac1e6528aec79c1be6ac712d5f6a62140db87ed749e41a46563f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://24ef4ecee91638e278886888192b7d2b1811ab99f4e90a06817a4b2651720046\",\"dweb:/ipfs/QmdisoBv1mE9jDv6jvpcbvKhdmJZMMjQmATrEYfBQQrXtZ\"]},\"src/libraries/DisputeErrors.sol\":{\"keccak256\":\"0x869bec0d79d97f2d0a00b1e70bf1e6955a2be585521e0084602e54455c0a6937\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a235c6349437cd2ade72909287404e2993c1c4bd356707299239c71fa3bf780e\",\"dweb:/ipfs/QmcFSh6PWJ5sNg1CeoRyF9EnV8APWDz1kYP98v6ooGxc71\"]},\"src/libraries/DisputeTypes.sol\":{\"keccak256\":\"0xae3d053cf40b3e47669b89438524fec4eb571a78be296cc7e7ba23025b3bdf0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a2b90604718ad29d19a8f21d45a5f8c6188320781fdb7102b3fccadae549961\",\"dweb:/ipfs/QmUBTXgRFG7PvoCBJsXmgi2sZPZFPQQZTptQ91LL7tC2xQ\"]},\"src/libraries/Types.sol\":{\"keccak256\":\"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e\",\"dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc\"]},\"src/universal/ISemver.sol\":{\"keccak256\":\"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a\",\"dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.15+commit.e14f2714"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"GameType","name":"_gameType","type":"uint32"},{"internalType":"Claim","name":"_absolutePrestate","type":"bytes32"},{"internalType":"uint256","name":"_maxGameDepth","type":"uint256"},{"internalType":"uint256","name":"_splitDepth","type":"uint256"},{"internalType":"Duration","name":"_clockExtension","type":"uint64"},{"internalType":"Duration","name":"_maxClockDuration","type":"uint64"},{"internalType":"contract IBigStepper","name":"_vm","type":"address"},{"internalType":"contract IDelayedWETH","name":"_weth","type":"address"},{"internalType":"contract IAnchorStateRegistry","name":"_anchorStateRegistry","type":"address"},{"internalType":"uint256","name":"_l2ChainId","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"AlreadyInitialized"},{"inputs":[],"type":"error","name":"AnchorRootNotFound"},{"inputs":[],"type":"error","name":"BondTransferFailed"},{"inputs":[],"type":"error","name":"CannotDefendRootClaim"},{"inputs":[],"type":"error","name":"ClaimAboveSplit"},{"inputs":[],"type":"error","name":"ClaimAlreadyExists"},{"inputs":[],"type":"error","name":"ClaimAlreadyResolved"},{"inputs":[],"type":"error","name":"ClockNotExpired"},{"inputs":[],"type":"error","name":"ClockTimeExceeded"},{"inputs":[],"type":"error","name":"DuplicateStep"},{"inputs":[],"type":"error","name":"GameDepthExceeded"},{"inputs":[],"type":"error","name":"GameNotInProgress"},{"inputs":[],"type":"error","name":"IncorrectBondAmount"},{"inputs":[],"type":"error","name":"InvalidClockExtension"},{"inputs":[],"type":"error","name":"InvalidLocalIdent"},{"inputs":[],"type":"error","name":"InvalidParent"},{"inputs":[],"type":"error","name":"InvalidPrestate"},{"inputs":[],"type":"error","name":"InvalidSplitDepth"},{"inputs":[],"type":"error","name":"MaxDepthTooLarge"},{"inputs":[],"type":"error","name":"NoCreditToClaim"},{"inputs":[],"type":"error","name":"OutOfOrderResolution"},{"inputs":[{"internalType":"Claim","name":"rootClaim","type":"bytes32"}],"type":"error","name":"UnexpectedRootClaim"},{"inputs":[],"type":"error","name":"ValidStep"},{"inputs":[{"internalType":"uint256","name":"parentIndex","type":"uint256","indexed":true},{"internalType":"Claim","name":"claim","type":"bytes32","indexed":true},{"internalType":"address","name":"claimant","type":"address","indexed":true}],"type":"event","name":"Move","anonymous":false},{"inputs":[{"internalType":"enum GameStatus","name":"status","type":"uint8","indexed":true}],"type":"event","name":"Resolved","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"absolutePrestate","outputs":[{"internalType":"Claim","name":"absolutePrestate_","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"_ident","type":"uint256"},{"internalType":"uint256","name":"_execLeafIdx","type":"uint256"},{"internalType":"uint256","name":"_partOffset","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"addLocalData"},{"inputs":[],"stateMutability":"view","type":"function","name":"anchorStateRegistry","outputs":[{"internalType":"contract IAnchorStateRegistry","name":"registry_","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"_parentIndex","type":"uint256"},{"internalType":"Claim","name":"_claim","type":"bytes32"}],"stateMutability":"payable","type":"function","name":"attack"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"claimCredit"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"claimData","outputs":[{"internalType":"uint32","name":"parentIndex","type":"uint32"},{"internalType":"address","name":"counteredBy","type":"address"},{"internalType":"address","name":"claimant","type":"address"},{"internalType":"uint128","name":"bond","type":"uint128"},{"internalType":"Claim","name":"claim","type":"bytes32"},{"internalType":"Position","name":"position","type":"uint128"},{"internalType":"Clock","name":"clock","type":"uint128"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"claimDataLen","outputs":[{"internalType":"uint256","name":"len_","type":"uint256"}]},{"inputs":[{"internalType":"ClaimHash","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"claims","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"clockExtension","outputs":[{"internalType":"Duration","name":"clockExtension_","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"createdAt","outputs":[{"internalType":"Timestamp","name":"","type":"uint64"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"credit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"_parentIndex","type":"uint256"},{"internalType":"Claim","name":"_claim","type":"bytes32"}],"stateMutability":"payable","type":"function","name":"defend"},{"inputs":[],"stateMutability":"pure","type":"function","name":"extraData","outputs":[{"internalType":"bytes","name":"extraData_","type":"bytes"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"gameCreator","outputs":[{"internalType":"address","name":"creator_","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"gameData","outputs":[{"internalType":"GameType","name":"gameType_","type":"uint32"},{"internalType":"Claim","name":"rootClaim_","type":"bytes32"},{"internalType":"bytes","name":"extraData_","type":"bytes"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"gameType","outputs":[{"internalType":"GameType","name":"gameType_","type":"uint32"}]},{"inputs":[{"internalType":"uint256","name":"_claimIndex","type":"uint256"}],"stateMutability":"view","type":"function","name":"getChallengerDuration","outputs":[{"internalType":"Duration","name":"duration_","type":"uint64"}]},{"inputs":[{"internalType":"Position","name":"_position","type":"uint128"}],"stateMutability":"view","type":"function","name":"getRequiredBond","outputs":[{"internalType":"uint256","name":"requiredBond_","type":"uint256"}]},{"inputs":[],"stateMutability":"payable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"pure","type":"function","name":"l1Head","outputs":[{"internalType":"Hash","name":"l1Head_","type":"bytes32"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"l2BlockNumber","outputs":[{"internalType":"uint256","name":"l2BlockNumber_","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"l2ChainId","outputs":[{"internalType":"uint256","name":"l2ChainId_","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"maxClockDuration","outputs":[{"internalType":"Duration","name":"maxClockDuration_","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"maxGameDepth","outputs":[{"internalType":"uint256","name":"maxGameDepth_","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"_challengeIndex","type":"uint256"},{"internalType":"Claim","name":"_claim","type":"bytes32"},{"internalType":"bool","name":"_isAttack","type":"bool"}],"stateMutability":"payable","type":"function","name":"move"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"resolve","outputs":[{"internalType":"enum GameStatus","name":"status_","type":"uint8"}]},{"inputs":[{"internalType":"uint256","name":"_claimIndex","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"resolveClaim"},{"inputs":[],"stateMutability":"view","type":"function","name":"resolvedAt","outputs":[{"internalType":"Timestamp","name":"","type":"uint64"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"resolvedSubgames","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"rootClaim","outputs":[{"internalType":"Claim","name":"rootClaim_","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"splitDepth","outputs":[{"internalType":"uint256","name":"splitDepth_","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"startingBlockNumber","outputs":[{"internalType":"uint256","name":"startingBlockNumber_","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"startingOutputRoot","outputs":[{"internalType":"Hash","name":"root","type":"bytes32"},{"internalType":"uint256","name":"l2BlockNumber","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"startingRootHash","outputs":[{"internalType":"Hash","name":"startingRootHash_","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"status","outputs":[{"internalType":"enum GameStatus","name":"","type":"uint8"}]},{"inputs":[{"internalType":"uint256","name":"_claimIndex","type":"uint256"},{"internalType":"bool","name":"_isAttack","type":"bool"},{"internalType":"bytes","name":"_stateData","type":"bytes"},{"internalType":"bytes","name":"_proof","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"step"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"subgames","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"vm","outputs":[{"internalType":"contract IBigStepper","name":"vm_","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"weth","outputs":[{"internalType":"contract IDelayedWETH","name":"weth_","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"addLocalData(uint256,uint256,uint256)":{"params":{"_execLeafIdx":"The index of the leaf claim in an execution subgame that requires the local data for a step.","_ident":"The local identifier of the data to post.","_partOffset":"The offset of the data to post."}},"attack(uint256,bytes32)":{"params":{"_claim":"The `Claim` at the relative attack position.","_parentIndex":"Index of the `Claim` to attack in the `claimData` array."}},"claimCredit(address)":{"params":{"_recipient":"The owner and recipient of the credit."}},"constructor":{"params":{"_absolutePrestate":"The absolute prestate of the instruction trace.","_anchorStateRegistry":"The contract that stores the anchor state for each game type.","_clockExtension":"The clock extension to perform when the remaining duration is less than the extension.","_gameType":"The type ID of the game.","_l2ChainId":"Chain ID of the L2 network this contract argues about.","_maxClockDuration":"The maximum amount of time that may accumulate on a team's chess clock.","_maxGameDepth":"The maximum depth of bisection.","_splitDepth":"The final depth of the output bisection portion of the game.","_vm":"An onchain VM that performs single instruction steps on an FPP trace.","_weth":"WETH contract for holding ETH."}},"defend(uint256,bytes32)":{"params":{"_claim":"The `Claim` at the relative defense position.","_parentIndex":"Index of the claim to defend in the `claimData` array."}},"extraData()":{"details":"`clones-with-immutable-args` argument #4","returns":{"extraData_":"Any extra data supplied to the dispute game contract by the creator."}},"gameCreator()":{"details":"`clones-with-immutable-args` argument #1","returns":{"creator_":"The creator of the dispute game."}},"gameData()":{"returns":{"extraData_":"Any extra data supplied to the dispute game contract by the creator.","gameType_":"The type of proof system being used.","rootClaim_":"The root claim of the DisputeGame."}},"gameType()":{"details":"The reference impl should be entirely different depending on the type (fault, validity) i.e. The game type should indicate the security model.","returns":{"gameType_":"The type of proof system being used."}},"getChallengerDuration(uint256)":{"params":{"_claimIndex":"The index of the subgame root claim."},"returns":{"duration_":"The time elapsed on the potential challenger to `_claimIndex`'s chess clock."}},"getRequiredBond(uint128)":{"params":{"_position":"The position of the bonded interaction."},"returns":{"requiredBond_":"The required ETH bond for the given move, in wei."}},"initialize()":{"details":"This function may only be called once."},"l1Head()":{"details":"`clones-with-immutable-args` argument #3","returns":{"l1Head_":"The parent hash of the L1 block when the dispute game was created."}},"move(uint256,bytes32,bool)":{"params":{"_challengeIndex":"The index of the claim being moved against.","_claim":"The claim at the next logical position in the game.","_isAttack":"Whether or not the move is an attack or defense."}},"resolve()":{"details":"May only be called if the `status` is `IN_PROGRESS`.","returns":{"status_":"The status of the game after resolution."}},"resolveClaim(uint256)":{"details":"This function must be called bottom-up in the DAG A subgame is a tree of claims that has a maximum depth of 1. A subgame root claims is valid if, and only if, all of its child claims are invalid. At the deepest level in the DAG, a claim is invalid if there's a successful step against it.","params":{"_claimIndex":"The index of the subgame root claim to resolve."}},"rootClaim()":{"details":"`clones-with-immutable-args` argument #2","returns":{"rootClaim_":"The root claim of the DisputeGame."}},"step(uint256,bool,bytes,bytes)":{"details":"This function should point to a fault proof processor in order to execute a step in the fault proof program on-chain. The interface of the fault proof processor contract should adhere to the `IBigStepper` interface.","params":{"_claimIndex":"The index of the challenged claim within `claimData`.","_isAttack":"Whether or not the step is an attack or a defense.","_proof":"Proof to access memory nodes in the VM's merkle state tree.","_stateData":"The stateData of the step is the preimage of the claim at the given prestate, which is at `_stateIndex` if the move is an attack and `_claimIndex` if the move is a defense. If the step is an attack on the first instruction, it is the absolute prestate of the fault proof VM."}}},"version":1},"userdoc":{"kind":"user","methods":{"absolutePrestate()":{"notice":"Returns the absolute prestate of the instruction trace."},"addLocalData(uint256,uint256,uint256)":{"notice":"Posts the requested local data to the VM's `PreimageOralce`."},"anchorStateRegistry()":{"notice":"Returns the anchor state registry contract."},"attack(uint256,bytes32)":{"notice":"Attack a disagreed upon `Claim`."},"claimCredit(address)":{"notice":"Claim the credit belonging to the recipient address."},"claimData(uint256)":{"notice":"An append-only array of all claims made during the dispute game."},"claimDataLen()":{"notice":"Returns the length of the `claimData` array."},"claims(bytes32)":{"notice":"A mapping to allow for constant-time lookups of existing claims."},"clockExtension()":{"notice":"Returns the clock extension constant."},"createdAt()":{"notice":"The starting timestamp of the game"},"credit(address)":{"notice":"Credited balances for winning participants."},"defend(uint256,bytes32)":{"notice":"Defend an agreed upon `Claim`."},"extraData()":{"notice":"Getter for the extra data."},"gameCreator()":{"notice":"Getter for the creator of the dispute game."},"gameData()":{"notice":"A compliant implementation of this interface should return the components of the game UUID's preimage provided in the cwia payload. The preimage of the UUID is constructed as `keccak256(gameType . rootClaim . extraData)` where `.` denotes concatenation."},"gameType()":{"notice":"Getter for the game type."},"getChallengerDuration(uint256)":{"notice":"Returns the amount of time elapsed on the potential challenger to `_claimIndex`'s chess clock. Maxes out at `MAX_CLOCK_DURATION`."},"getRequiredBond(uint128)":{"notice":"Returns the required bond for a given move kind."},"initialize()":{"notice":"Initializes the contract."},"l1Head()":{"notice":"Getter for the parent hash of the L1 block when the dispute game was created."},"l2BlockNumber()":{"notice":"The l2BlockNumber of the disputed output root in the `L2OutputOracle`."},"l2ChainId()":{"notice":"Returns the chain ID of the L2 network this contract argues about."},"maxClockDuration()":{"notice":"Returns the max clock duration."},"maxGameDepth()":{"notice":"Returns the max game depth."},"move(uint256,bytes32,bool)":{"notice":"Generic move function, used for both `attack` and `defend` moves."},"resolve()":{"notice":"If all necessary information has been gathered, this function should mark the game status as either `CHALLENGER_WINS` or `DEFENDER_WINS` and return the status of the resolved game. It is at this stage that the bonds should be awarded to the necessary parties."},"resolveClaim(uint256)":{"notice":"Resolves the subgame rooted at the given claim index."},"resolvedAt()":{"notice":"The timestamp of the game's global resolution."},"resolvedSubgames(uint256)":{"notice":"An interneal mapping of resolved subgames rooted at a claim index."},"rootClaim()":{"notice":"Getter for the root claim."},"splitDepth()":{"notice":"Returns the split depth."},"startingBlockNumber()":{"notice":"Only the starting block number of the game."},"startingOutputRoot()":{"notice":"The latest finalized output root, serving as the anchor for output bisection."},"startingRootHash()":{"notice":"Only the starting output root of the game."},"status()":{"notice":"Returns the current status of the game."},"step(uint256,bool,bytes,bytes)":{"notice":"Perform an instruction step via an on-chain fault proof processor."},"subgames(uint256,uint256)":{"notice":"A mapping of subgames rooted at a claim index to other claim indices in the subgame."},"version()":{"notice":"Semantic version."},"vm()":{"notice":"Returns the address of the VM."},"weth()":{"notice":"Returns the WETH contract for holding ETH."}},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","ds-test/=lib/forge-std/lib/ds-test/src/","forge-std/=lib/forge-std/src/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/dispute/FaultDisputeGame.sol":"FaultDisputeGame"},"evmVersion":"london","libraries":{}},"sources":{"lib/solady/src/utils/Clone.sol":{"keccak256":"0xb408dc90294bacd394e59c83619e7dc76f45c83ad6f8e923eb07d3a5bab89f22","urls":["bzz-raw://c3abeb55ad062c4b29b5b5edab6167de36615c51621ef71ef3ddfd9f6735a93b","dweb:/ipfs/Qmboh4zX6ZgFVhetUhZGJ14kKXiaGeB9bW3Vseg2MLMGHW"],"license":"MIT"},"lib/solady/src/utils/FixedPointMathLib.sol":{"keccak256":"0x1fbad6f61bd3e5875e6b0060b67626cb1ccb9542c0da368a44eb3870c9a9e160","urls":["bzz-raw://5189fcd5ecff0f449475cf3183e9d6b509cd1221555aba6cd76c70b097cc8260","dweb:/ipfs/Qmbt34Kf5h2DeYzmqXtg3jprYxDCFdENtf41NgCdcARA7u"],"license":"MIT"},"src/cannon/interfaces/IPreimageOracle.sol":{"keccak256":"0x7bda0156571b468cf0e22321945655f2dacd7082f440f742aa4612b36b388a9f","urls":["bzz-raw://5ba53777c65987bc20faa7731476c779e7794a58bafb40191a25275a05e3f8af","dweb:/ipfs/QmbxQwE2BC9aabTruDqkd2CLojwq7G9i2rkWKv46Wucae1"],"license":"MIT"},"src/dispute/FaultDisputeGame.sol":{"keccak256":"0x0d90358576f7b5c14cfe338937ed4fea7d945f9a1b5e68111196310554b485b3","urls":["bzz-raw://5d6d4ce62af4902e17af3a70b6c4688be4d148498c841af9c8ead2c076794e6e","dweb:/ipfs/QmS2ebpEDxbhnUwXYnKEChS2zVpFvfdnJr3AbfDSQovBAN"],"license":"MIT"},"src/dispute/interfaces/IAnchorStateRegistry.sol":{"keccak256":"0x5fd05f2482d149668897e54f92d556a0c3512aa35b51ba800ef15d18dd490cb3","urls":["bzz-raw://689d621bc5c43a41d5232980f0eceecd7a3d8aa99438dfd9fed5f73d5ecd2887","dweb:/ipfs/QmQ5jw54TkdxLuLFti6JZown54rGQ3m3Q93pvnVU1j1HRj"],"license":"MIT"},"src/dispute/interfaces/IBigStepper.sol":{"keccak256":"0xc92ee3069677b903826c83d5b4e46e3be462f9ccf1d95e72a12b1052e3451f0a","urls":["bzz-raw://f93692bd3c8d9533ab8024ce2df6d880328826d1a92fdb9cf45301e2d0c65884","dweb:/ipfs/QmUcmbjTw9gnCUNasgmQjVbSgcCPKZ1FQyA31dH4k5Nc75"],"license":"MIT"},"src/dispute/interfaces/IDelayedWETH.sol":{"keccak256":"0x0bb035e9bbb411696841ea292eeed6d4463c3c3eee7d6c5d8e38a101e8a4ff04","urls":["bzz-raw://0477cf2c137392d35081f23bfd7f3565881767dcb1489a62e7e80b3c178cfce8","dweb:/ipfs/QmTjALjrHg5rvhjfCKPmXLTgkMNneECWaqoarunSoVS37G"],"license":"MIT"},"src/dispute/interfaces/IDisputeGame.sol":{"keccak256":"0xe2611453d5cc05f8aa30dc0e5e15ee5ae29fd3eb55a2c034424250baebf12f9b","urls":["bzz-raw://274e00fbcea3b8455bbaa042130bf1f7a5b2b769f28ad57afbf9fabfd74a757a","dweb:/ipfs/QmRKQTfYdMjQYVbuZhdXts1d752eUq8RwrjqqwV5XRYLi6"],"license":"MIT"},"src/dispute/interfaces/IDisputeGameFactory.sol":{"keccak256":"0x204d89d38d4dc0db40fbf898d95e639ac5608810a5a5506a3d80d71177648bda","urls":["bzz-raw://71e5c0ff04f409f30ca4f8ebfae1592c6ca495e315b059f969d11812e6e84dbd","dweb:/ipfs/QmaNKkhkJv7qHzX6bKB3LjpWBupfMPLhoATUGx1HRTLtXh"],"license":"MIT"},"src/dispute/interfaces/IFaultDisputeGame.sol":{"keccak256":"0xe2f3acb614ecffd6e0fee98443cf58fa95c1209f4ee43e723781733823da3437","urls":["bzz-raw://e4cffbd5b53e6459aad472249e629ae5f52c725b6f6828050df019a18ab50278","dweb:/ipfs/QmTC1GgzbwSyqd9fbJz2veqHnbKJfAK5tBr5jUZcC5N271"],"license":"MIT"},"src/dispute/interfaces/IInitializable.sol":{"keccak256":"0xbc553af6501a972850a98fc6284943f8e95a5183a7b4f64198c16fca2338c9dc","urls":["bzz-raw://b1f1c422ce4a9e72f0bbdec36434206da4af3a32d38f922acab957942e994ce5","dweb:/ipfs/QmNQGWBceLxx1CKSMLfwTM584q8UCgUpF4rrFe8pdbWYtj"],"license":"MIT"},"src/dispute/interfaces/IWETH.sol":{"keccak256":"0x3858f6c0ce3ec7978b1ea1772484c25aec7c8c480ceaf18239f726fdd06fdd1f","urls":["bzz-raw://b72cf3bc31324409480e9ae6eb3e2654da8dff3cbf9f2136b19fe714293b3766","dweb:/ipfs/QmTW3JiFUo8pYhDbthPH8ZSp5f1nmdga4CSzo4YdEzppnM"],"license":"MIT"},"src/dispute/lib/LibGameId.sol":{"keccak256":"0x9a9f30500da6eb7eeaa7193515dc5e45dc479f09ae7d522a07283c0fb5f4bfa6","urls":["bzz-raw://be113d8198d5822385de3d6ff3d7b3e8241993484aa95604ffaf38c2d33f40e0","dweb:/ipfs/QmY9mHC52fqc4gAFYCGobNyuP4TqugQgs8o1kTF33t17Hc"],"license":"MIT"},"src/dispute/lib/LibHashing.sol":{"keccak256":"0x5a072cd028094eee55acb84ed8d08d7422b1fb46658b7e043e916781530a383b","urls":["bzz-raw://b67e54f1318f1fd67b28b16c6861a56e27217c26a12aaea5c446e2ec53143920","dweb:/ipfs/QmVLSTP3PwXzRkR3A4qV9fjZhca9v8J1EnEYuVGUsSirAq"],"license":"MIT"},"src/dispute/lib/LibPosition.sol":{"keccak256":"0xf7ceb26f0ac7067ff8a43f263451050eef6fba2029eafb83d3cbe35224d894a6","urls":["bzz-raw://3bb403b0d707a8e2e3780a19185b918bfe907ca2d1b939ea74ae095a5cdf3b48","dweb:/ipfs/QmYFzkmF8TRomp1cBEbTsKxiEnqLnX6SvSh4y3rVa84pBR"],"license":"MIT"},"src/dispute/lib/LibUDT.sol":{"keccak256":"0x9b61b15f5edfac1e6528aec79c1be6ac712d5f6a62140db87ed749e41a46563f","urls":["bzz-raw://24ef4ecee91638e278886888192b7d2b1811ab99f4e90a06817a4b2651720046","dweb:/ipfs/QmdisoBv1mE9jDv6jvpcbvKhdmJZMMjQmATrEYfBQQrXtZ"],"license":"MIT"},"src/libraries/DisputeErrors.sol":{"keccak256":"0x869bec0d79d97f2d0a00b1e70bf1e6955a2be585521e0084602e54455c0a6937","urls":["bzz-raw://a235c6349437cd2ade72909287404e2993c1c4bd356707299239c71fa3bf780e","dweb:/ipfs/QmcFSh6PWJ5sNg1CeoRyF9EnV8APWDz1kYP98v6ooGxc71"],"license":"MIT"},"src/libraries/DisputeTypes.sol":{"keccak256":"0xae3d053cf40b3e47669b89438524fec4eb571a78be296cc7e7ba23025b3bdf0c","urls":["bzz-raw://4a2b90604718ad29d19a8f21d45a5f8c6188320781fdb7102b3fccadae549961","dweb:/ipfs/QmUBTXgRFG7PvoCBJsXmgi2sZPZFPQQZTptQ91LL7tC2xQ"],"license":"MIT"},"src/libraries/Types.sol":{"keccak256":"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4","urls":["bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e","dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc"],"license":"MIT"},"src/universal/ISemver.sol":{"keccak256":"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44","urls":["bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a","dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":97769,"contract":"src/dispute/FaultDisputeGame.sol:FaultDisputeGame","label":"createdAt","offset":0,"slot":"0","type":"t_userDefinedValueType(Timestamp)103261"},{"astId":97773,"contract":"src/dispute/FaultDisputeGame.sol:FaultDisputeGame","label":"resolvedAt","offset":8,"slot":"0","type":"t_userDefinedValueType(Timestamp)103261"},{"astId":97777,"contract":"src/dispute/FaultDisputeGame.sol:FaultDisputeGame","label":"status","offset":16,"slot":"0","type":"t_enum(GameStatus)103277"},{"astId":97780,"contract":"src/dispute/FaultDisputeGame.sol:FaultDisputeGame","label":"initialized","offset":17,"slot":"0","type":"t_bool"},{"astId":97785,"contract":"src/dispute/FaultDisputeGame.sol:FaultDisputeGame","label":"claimData","offset":0,"slot":"1","type":"t_array(t_struct(ClaimData)100523_storage)dyn_storage"},{"astId":97790,"contract":"src/dispute/FaultDisputeGame.sol:FaultDisputeGame","label":"credit","offset":0,"slot":"2","type":"t_mapping(t_address,t_uint256)"},{"astId":97796,"contract":"src/dispute/FaultDisputeGame.sol:FaultDisputeGame","label":"claims","offset":0,"slot":"3","type":"t_mapping(t_userDefinedValueType(ClaimHash)103257,t_bool)"},{"astId":97802,"contract":"src/dispute/FaultDisputeGame.sol:FaultDisputeGame","label":"subgames","offset":0,"slot":"4","type":"t_mapping(t_uint256,t_array(t_uint256)dyn_storage)"},{"astId":97807,"contract":"src/dispute/FaultDisputeGame.sol:FaultDisputeGame","label":"resolvedSubgames","offset":0,"slot":"5","type":"t_mapping(t_uint256,t_bool)"},{"astId":97811,"contract":"src/dispute/FaultDisputeGame.sol:FaultDisputeGame","label":"startingOutputRoot","offset":0,"slot":"6","type":"t_struct(OutputRoot)103283_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_struct(ClaimData)100523_storage)dyn_storage":{"encoding":"dynamic_array","label":"struct IFaultDisputeGame.ClaimData[]","numberOfBytes":"32","base":"t_struct(ClaimData)100523_storage"},"t_array(t_uint256)dyn_storage":{"encoding":"dynamic_array","label":"uint256[]","numberOfBytes":"32","base":"t_uint256"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_enum(GameStatus)103277":{"encoding":"inplace","label":"enum GameStatus","numberOfBytes":"1"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_array(t_uint256)dyn_storage)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => uint256[])","numberOfBytes":"32","value":"t_array(t_uint256)dyn_storage"},"t_mapping(t_uint256,t_bool)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_userDefinedValueType(ClaimHash)103257,t_bool)":{"encoding":"mapping","key":"t_userDefinedValueType(ClaimHash)103257","label":"mapping(ClaimHash => bool)","numberOfBytes":"32","value":"t_bool"},"t_struct(ClaimData)100523_storage":{"encoding":"inplace","label":"struct IFaultDisputeGame.ClaimData","numberOfBytes":"160","members":[{"astId":100507,"contract":"src/dispute/FaultDisputeGame.sol:FaultDisputeGame","label":"parentIndex","offset":0,"slot":"0","type":"t_uint32"},{"astId":100509,"contract":"src/dispute/FaultDisputeGame.sol:FaultDisputeGame","label":"counteredBy","offset":4,"slot":"0","type":"t_address"},{"astId":100511,"contract":"src/dispute/FaultDisputeGame.sol:FaultDisputeGame","label":"claimant","offset":0,"slot":"1","type":"t_address"},{"astId":100513,"contract":"src/dispute/FaultDisputeGame.sol:FaultDisputeGame","label":"bond","offset":0,"slot":"2","type":"t_uint128"},{"astId":100516,"contract":"src/dispute/FaultDisputeGame.sol:FaultDisputeGame","label":"claim","offset":0,"slot":"3","type":"t_userDefinedValueType(Claim)103255"},{"astId":100519,"contract":"src/dispute/FaultDisputeGame.sol:FaultDisputeGame","label":"position","offset":0,"slot":"4","type":"t_userDefinedValueType(Position)103269"},{"astId":100522,"contract":"src/dispute/FaultDisputeGame.sol:FaultDisputeGame","label":"clock","offset":16,"slot":"4","type":"t_userDefinedValueType(Clock)103267"}]},"t_struct(OutputRoot)103283_storage":{"encoding":"inplace","label":"struct OutputRoot","numberOfBytes":"64","members":[{"astId":103280,"contract":"src/dispute/FaultDisputeGame.sol:FaultDisputeGame","label":"root","offset":0,"slot":"0","type":"t_userDefinedValueType(Hash)103253"},{"astId":103282,"contract":"src/dispute/FaultDisputeGame.sol:FaultDisputeGame","label":"l2BlockNumber","offset":0,"slot":"1","type":"t_uint256"}]},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"},"t_userDefinedValueType(Claim)103255":{"encoding":"inplace","label":"Claim","numberOfBytes":"32"},"t_userDefinedValueType(ClaimHash)103257":{"encoding":"inplace","label":"ClaimHash","numberOfBytes":"32"},"t_userDefinedValueType(Clock)103267":{"encoding":"inplace","label":"Clock","numberOfBytes":"16"},"t_userDefinedValueType(Hash)103253":{"encoding":"inplace","label":"Hash","numberOfBytes":"32"},"t_userDefinedValueType(Position)103269":{"encoding":"inplace","label":"Position","numberOfBytes":"16"},"t_userDefinedValueType(Timestamp)103261":{"encoding":"inplace","label":"Timestamp","numberOfBytes":"8"}}},"userdoc":{"version":1,"kind":"user","methods":{"absolutePrestate()":{"notice":"Returns the absolute prestate of the instruction trace."},"addLocalData(uint256,uint256,uint256)":{"notice":"Posts the requested local data to the VM's `PreimageOralce`."},"anchorStateRegistry()":{"notice":"Returns the anchor state registry contract."},"attack(uint256,bytes32)":{"notice":"Attack a disagreed upon `Claim`."},"claimCredit(address)":{"notice":"Claim the credit belonging to the recipient address."},"claimData(uint256)":{"notice":"An append-only array of all claims made during the dispute game."},"claimDataLen()":{"notice":"Returns the length of the `claimData` array."},"claims(bytes32)":{"notice":"A mapping to allow for constant-time lookups of existing claims."},"clockExtension()":{"notice":"Returns the clock extension constant."},"createdAt()":{"notice":"The starting timestamp of the game"},"credit(address)":{"notice":"Credited balances for winning participants."},"defend(uint256,bytes32)":{"notice":"Defend an agreed upon `Claim`."},"extraData()":{"notice":"Getter for the extra data."},"gameCreator()":{"notice":"Getter for the creator of the dispute game."},"gameData()":{"notice":"A compliant implementation of this interface should return the components of the game UUID's preimage provided in the cwia payload. The preimage of the UUID is constructed as `keccak256(gameType . rootClaim . extraData)` where `.` denotes concatenation."},"gameType()":{"notice":"Getter for the game type."},"getChallengerDuration(uint256)":{"notice":"Returns the amount of time elapsed on the potential challenger to `_claimIndex`'s chess clock. Maxes out at `MAX_CLOCK_DURATION`."},"getRequiredBond(uint128)":{"notice":"Returns the required bond for a given move kind."},"initialize()":{"notice":"Initializes the contract."},"l1Head()":{"notice":"Getter for the parent hash of the L1 block when the dispute game was created."},"l2BlockNumber()":{"notice":"The l2BlockNumber of the disputed output root in the `L2OutputOracle`."},"l2ChainId()":{"notice":"Returns the chain ID of the L2 network this contract argues about."},"maxClockDuration()":{"notice":"Returns the max clock duration."},"maxGameDepth()":{"notice":"Returns the max game depth."},"move(uint256,bytes32,bool)":{"notice":"Generic move function, used for both `attack` and `defend` moves."},"resolve()":{"notice":"If all necessary information has been gathered, this function should mark the game status as either `CHALLENGER_WINS` or `DEFENDER_WINS` and return the status of the resolved game. It is at this stage that the bonds should be awarded to the necessary parties."},"resolveClaim(uint256)":{"notice":"Resolves the subgame rooted at the given claim index."},"resolvedAt()":{"notice":"The timestamp of the game's global resolution."},"resolvedSubgames(uint256)":{"notice":"An interneal mapping of resolved subgames rooted at a claim index."},"rootClaim()":{"notice":"Getter for the root claim."},"splitDepth()":{"notice":"Returns the split depth."},"startingBlockNumber()":{"notice":"Only the starting block number of the game."},"startingOutputRoot()":{"notice":"The latest finalized output root, serving as the anchor for output bisection."},"startingRootHash()":{"notice":"Only the starting output root of the game."},"status()":{"notice":"Returns the current status of the game."},"step(uint256,bool,bytes,bytes)":{"notice":"Perform an instruction step via an on-chain fault proof processor."},"subgames(uint256,uint256)":{"notice":"A mapping of subgames rooted at a claim index to other claim indices in the subgame."},"version()":{"notice":"Semantic version."},"vm()":{"notice":"Returns the address of the VM."},"weth()":{"notice":"Returns the WETH contract for holding ETH."}},"events":{"Move(uint256,bytes32,address)":{"notice":"Emitted when a new claim is added to the DAG by `claimant`"},"Resolved(uint8)":{"notice":"Emitted when the game is resolved."}},"errors":{"AlreadyInitialized()":[{"notice":"Thrown when a dispute game has already been initialized."}],"AnchorRootNotFound()":[{"notice":"Thrown when an anchor root is not found for a given game type."}],"BondTransferFailed()":[{"notice":"Thrown when the transfer of credit to a recipient account reverts."}],"CannotDefendRootClaim()":[{"notice":"Thrown when a defense against the root claim is attempted."}],"ClaimAboveSplit()":[{"notice":"Thrown when a parent output root is attempted to be found on a claim that is in the output root portion of the tree."}],"ClaimAlreadyExists()":[{"notice":"Thrown when a claim is attempting to be made that already exists."}],"ClaimAlreadyResolved()":[{"notice":"Thrown when resolving a claim that has already been resolved."}],"ClockNotExpired()":[{"notice":"Thrown when the game is attempted to be resolved too early."}],"ClockTimeExceeded()":[{"notice":"Thrown when a move is attempted to be made after the clock has timed out."}],"DuplicateStep()":[{"notice":"Thrown when trying to step against a claim for a second time, after it has already been countered with an instruction step."}],"GameDepthExceeded()":[{"notice":"Thrown when a move is attempted to be made at or greater than the max depth of the game."}],"GameNotInProgress()":[{"notice":"Thrown when an action that requires the game to be `IN_PROGRESS` is invoked when the game is not in progress."}],"IncorrectBondAmount()":[{"notice":"Thrown when a supplied bond is not equal to the required bond amount to cover the cost of the interaction."}],"InvalidClockExtension()":[{"notice":"Thrown on deployment if the max clock duration is less than or equal to the clock extension."}],"InvalidLocalIdent()":[{"notice":"Thrown when an invalid local identifier is passed to the `addLocalData` function."}],"InvalidParent()":[{"notice":"Thrown when a step is attempted above the maximum game depth."}],"InvalidPrestate()":[{"notice":"Thrown when an invalid prestate is supplied to `step`."}],"InvalidSplitDepth()":[{"notice":"Thrown on deployment if the split depth is greater than or equal to the max depth of the game."}],"MaxDepthTooLarge()":[{"notice":"Thrown on deployment if the max depth is greater than `LibPosition.`"}],"NoCreditToClaim()":[{"notice":"Thrown when a credit claim is attempted for a value of 0."}],"OutOfOrderResolution()":[{"notice":"Thrown when resolving claims out of order."}],"UnexpectedRootClaim(bytes32)":[{"notice":"Thrown when the root claim has an unexpected VM status. Some games can only start with a root-claim with a specific status."}],"ValidStep()":[{"notice":"Thrown when a step is made that computes the expected post state correctly."}]},"notice":"An implementation of the `IFaultDisputeGame` interface."},"devdoc":{"version":1,"kind":"dev","methods":{"addLocalData(uint256,uint256,uint256)":{"params":{"_execLeafIdx":"The index of the leaf claim in an execution subgame that requires the local data for a step.","_ident":"The local identifier of the data to post.","_partOffset":"The offset of the data to post."}},"attack(uint256,bytes32)":{"params":{"_claim":"The `Claim` at the relative attack position.","_parentIndex":"Index of the `Claim` to attack in the `claimData` array."}},"claimCredit(address)":{"params":{"_recipient":"The owner and recipient of the credit."}},"constructor":{"params":{"_absolutePrestate":"The absolute prestate of the instruction trace.","_anchorStateRegistry":"The contract that stores the anchor state for each game type.","_clockExtension":"The clock extension to perform when the remaining duration is less than the extension.","_gameType":"The type ID of the game.","_l2ChainId":"Chain ID of the L2 network this contract argues about.","_maxClockDuration":"The maximum amount of time that may accumulate on a team's chess clock.","_maxGameDepth":"The maximum depth of bisection.","_splitDepth":"The final depth of the output bisection portion of the game.","_vm":"An onchain VM that performs single instruction steps on an FPP trace.","_weth":"WETH contract for holding ETH."}},"defend(uint256,bytes32)":{"params":{"_claim":"The `Claim` at the relative defense position.","_parentIndex":"Index of the claim to defend in the `claimData` array."}},"extraData()":{"details":"`clones-with-immutable-args` argument #4","returns":{"extraData_":"Any extra data supplied to the dispute game contract by the creator."}},"gameCreator()":{"details":"`clones-with-immutable-args` argument #1","returns":{"creator_":"The creator of the dispute game."}},"gameData()":{"returns":{"extraData_":"Any extra data supplied to the dispute game contract by the creator.","gameType_":"The type of proof system being used.","rootClaim_":"The root claim of the DisputeGame."}},"gameType()":{"details":"The reference impl should be entirely different depending on the type (fault, validity) i.e. The game type should indicate the security model.","returns":{"gameType_":"The type of proof system being used."}},"getChallengerDuration(uint256)":{"params":{"_claimIndex":"The index of the subgame root claim."},"returns":{"duration_":"The time elapsed on the potential challenger to `_claimIndex`'s chess clock."}},"getRequiredBond(uint128)":{"params":{"_position":"The position of the bonded interaction."},"returns":{"requiredBond_":"The required ETH bond for the given move, in wei."}},"initialize()":{"details":"This function may only be called once."},"l1Head()":{"details":"`clones-with-immutable-args` argument #3","returns":{"l1Head_":"The parent hash of the L1 block when the dispute game was created."}},"move(uint256,bytes32,bool)":{"params":{"_challengeIndex":"The index of the claim being moved against.","_claim":"The claim at the next logical position in the game.","_isAttack":"Whether or not the move is an attack or defense."}},"resolve()":{"details":"May only be called if the `status` is `IN_PROGRESS`.","returns":{"status_":"The status of the game after resolution."}},"resolveClaim(uint256)":{"details":"This function must be called bottom-up in the DAG A subgame is a tree of claims that has a maximum depth of 1. A subgame root claims is valid if, and only if, all of its child claims are invalid. At the deepest level in the DAG, a claim is invalid if there's a successful step against it.","params":{"_claimIndex":"The index of the subgame root claim to resolve."}},"rootClaim()":{"details":"`clones-with-immutable-args` argument #2","returns":{"rootClaim_":"The root claim of the DisputeGame."}},"step(uint256,bool,bytes,bytes)":{"details":"This function should point to a fault proof processor in order to execute a step in the fault proof program on-chain. The interface of the fault proof processor contract should adhere to the `IBigStepper` interface.","params":{"_claimIndex":"The index of the challenged claim within `claimData`.","_isAttack":"Whether or not the step is an attack or a defense.","_proof":"Proof to access memory nodes in the VM's merkle state tree.","_stateData":"The stateData of the step is the preimage of the claim at the given prestate, which is at `_stateIndex` if the move is an attack and `_claimIndex` if the move is a defense. If the step is an attack on the first instruction, it is the absolute prestate of the fault proof VM."}}},"errors":{"UnexpectedRootClaim(bytes32)":[{"params":{"rootClaim":"is the claim that was unexpected."}}]},"title":"FaultDisputeGame"},"ast":{"absolutePath":"src/dispute/FaultDisputeGame.sol","id":99928,"exportedSymbols":{"AlreadyInitialized":[103120],"AnchorRootNotFound":[103192],"BadAuth":[103195],"BadExtraData":[103132],"BondAmount":[103259],"BondTransferFailed":[103129],"CannotDefendRootClaim":[103135],"Claim":[103255],"ClaimAboveSplit":[103177],"ClaimAlreadyExists":[103138],"ClaimAlreadyResolved":[103174],"ClaimHash":[103257],"Clock":[103267],"ClockNotExpired":[103150],"ClockTimeExceeded":[103147],"Clone":[60963],"DuplicateStep":[103189],"Duration":[103263],"FaultDisputeGame":[99927],"FixedPointMathLib":[62288],"GameAlreadyExists":[103111],"GameDepthExceeded":[103153],"GameId":[103265],"GameNotInProgress":[103144],"GameStatus":[103277],"GameType":[103271],"GameTypes":[103317],"Hash":[103253],"IAnchorStateRegistry":[100146],"IBigStepper":[100171],"IDelayedWETH":[100239],"IDisputeGame":[100327],"IFaultDisputeGame":[100608],"IInitializable":[100616],"IPreimageOracle":[96782],"ISemver":[109417],"IncorrectBondAmount":[103123],"InvalidClaim":[103141],"InvalidClockExtension":[103183],"InvalidLocalIdent":[103168],"InvalidParent":[103156],"InvalidPrestate":[103159],"InvalidSplitDepth":[103180],"L1HeadTooOld":[103165],"LibClaim":[101086],"LibClock":[101073],"LibDuration":[101099],"LibGameId":[100778],"LibGameType":[101151],"LibHash":[101112],"LibHashing":[100800],"LibPosition":[101018],"LibTimestamp":[101125],"LibVMStatus":[101138],"LocalPreimageKey":[103373],"MaxDepthTooLarge":[103186],"NoCreditToClaim":[103126],"NoImplementation":[103105],"OutOfOrderResolution":[103171],"OutputRoot":[103283],"Position":[103269],"Timestamp":[103261],"Types":[104349],"UnexpectedRootClaim":[103117],"VMStatus":[103273],"VMStatuses":[103351],"ValidStep":[103162]},"nodeType":"SourceUnit","src":"32:44792:164","nodes":[{"id":97684,"nodeType":"PragmaDirective","src":"32:23:164","nodes":[],"literals":["solidity","0.8",".15"]},{"id":97686,"nodeType":"ImportDirective","src":"57:72:164","nodes":[],"absolutePath":"lib/solady/src/utils/FixedPointMathLib.sol","file":"@solady/utils/FixedPointMathLib.sol","nameLocation":"-1:-1:-1","scope":99928,"sourceUnit":62289,"symbolAliases":[{"foreign":{"id":97685,"name":"FixedPointMathLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62288,"src":"66:17:164","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":97688,"nodeType":"ImportDirective","src":"131:71:164","nodes":[],"absolutePath":"src/dispute/interfaces/IDelayedWETH.sol","file":"src/dispute/interfaces/IDelayedWETH.sol","nameLocation":"-1:-1:-1","scope":99928,"sourceUnit":100240,"symbolAliases":[{"foreign":{"id":97687,"name":"IDelayedWETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100239,"src":"140:12:164","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":97690,"nodeType":"ImportDirective","src":"203:71:164","nodes":[],"absolutePath":"src/dispute/interfaces/IDisputeGame.sol","file":"src/dispute/interfaces/IDisputeGame.sol","nameLocation":"-1:-1:-1","scope":99928,"sourceUnit":100328,"symbolAliases":[{"foreign":{"id":97689,"name":"IDisputeGame","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100327,"src":"212:12:164","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":97692,"nodeType":"ImportDirective","src":"275:81:164","nodes":[],"absolutePath":"src/dispute/interfaces/IFaultDisputeGame.sol","file":"src/dispute/interfaces/IFaultDisputeGame.sol","nameLocation":"-1:-1:-1","scope":99928,"sourceUnit":100609,"symbolAliases":[{"foreign":{"id":97691,"name":"IFaultDisputeGame","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100608,"src":"284:17:164","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":97694,"nodeType":"ImportDirective","src":"357:75:164","nodes":[],"absolutePath":"src/dispute/interfaces/IInitializable.sol","file":"src/dispute/interfaces/IInitializable.sol","nameLocation":"-1:-1:-1","scope":99928,"sourceUnit":100617,"symbolAliases":[{"foreign":{"id":97693,"name":"IInitializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100616,"src":"366:14:164","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":97697,"nodeType":"ImportDirective","src":"433:86:164","nodes":[],"absolutePath":"src/dispute/interfaces/IBigStepper.sol","file":"src/dispute/interfaces/IBigStepper.sol","nameLocation":"-1:-1:-1","scope":99928,"sourceUnit":100172,"symbolAliases":[{"foreign":{"id":97695,"name":"IBigStepper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100171,"src":"442:11:164","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":97696,"name":"IPreimageOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":96782,"src":"455:15:164","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":97699,"nodeType":"ImportDirective","src":"520:87:164","nodes":[],"absolutePath":"src/dispute/interfaces/IAnchorStateRegistry.sol","file":"src/dispute/interfaces/IAnchorStateRegistry.sol","nameLocation":"-1:-1:-1","scope":99928,"sourceUnit":100147,"symbolAliases":[{"foreign":{"id":97698,"name":"IAnchorStateRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100146,"src":"529:20:164","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":97701,"nodeType":"ImportDirective","src":"609:48:164","nodes":[],"absolutePath":"lib/solady/src/utils/Clone.sol","file":"@solady/utils/Clone.sol","nameLocation":"-1:-1:-1","scope":99928,"sourceUnit":60964,"symbolAliases":[{"foreign":{"id":97700,"name":"Clone","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60963,"src":"618:5:164","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":97703,"nodeType":"ImportDirective","src":"658:48:164","nodes":[],"absolutePath":"src/libraries/Types.sol","file":"src/libraries/Types.sol","nameLocation":"-1:-1:-1","scope":99928,"sourceUnit":104350,"symbolAliases":[{"foreign":{"id":97702,"name":"Types","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104349,"src":"667:5:164","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":97705,"nodeType":"ImportDirective","src":"707:52:164","nodes":[],"absolutePath":"src/universal/ISemver.sol","file":"src/universal/ISemver.sol","nameLocation":"-1:-1:-1","scope":99928,"sourceUnit":109418,"symbolAliases":[{"foreign":{"id":97704,"name":"ISemver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109417,"src":"716:7:164","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":97707,"nodeType":"ImportDirective","src":"760:54:164","nodes":[],"absolutePath":"src/dispute/lib/LibUDT.sol","file":"src/dispute/lib/LibUDT.sol","nameLocation":"-1:-1:-1","scope":99928,"sourceUnit":101152,"symbolAliases":[{"foreign":{"id":97706,"name":"LibClock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":101073,"src":"769:8:164","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":97708,"nodeType":"ImportDirective","src":"816:40:164","nodes":[],"absolutePath":"src/libraries/DisputeTypes.sol","file":"src/libraries/DisputeTypes.sol","nameLocation":"-1:-1:-1","scope":99928,"sourceUnit":103374,"symbolAliases":[],"unitAlias":""},{"id":97709,"nodeType":"ImportDirective","src":"857:41:164","nodes":[],"absolutePath":"src/libraries/DisputeErrors.sol","file":"src/libraries/DisputeErrors.sol","nameLocation":"-1:-1:-1","scope":99928,"sourceUnit":103196,"symbolAliases":[],"unitAlias":""},{"id":99927,"nodeType":"ContractDefinition","src":"996:43827:164","nodes":[{"id":97720,"nodeType":"VariableDeclaration","src":"1444:42:164","nodes":[],"constant":false,"documentation":{"id":97717,"nodeType":"StructuredDocumentation","src":"1273:166:164","text":"@notice The absolute prestate of the instruction trace. This is a constant that is defined\n by the program that is being used to execute the trace."},"mutability":"immutable","name":"ABSOLUTE_PRESTATE","nameLocation":"1469:17:164","scope":99927,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":97719,"nodeType":"UserDefinedTypeName","pathNode":{"id":97718,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"1444:5:164"},"referencedDeclaration":103255,"src":"1444:5:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"},{"id":97723,"nodeType":"VariableDeclaration","src":"1536:41:164","nodes":[],"constant":false,"documentation":{"id":97721,"nodeType":"StructuredDocumentation","src":"1493:38:164","text":"@notice The max depth of the game."},"mutability":"immutable","name":"MAX_GAME_DEPTH","nameLocation":"1563:14:164","scope":99927,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":97722,"name":"uint256","nodeType":"ElementaryTypeName","src":"1536:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"id":97726,"nodeType":"VariableDeclaration","src":"1750:38:164","nodes":[],"constant":false,"documentation":{"id":97724,"nodeType":"StructuredDocumentation","src":"1584:161:164","text":"@notice The max depth of the output bisection portion of the position tree. Immediately beneath\n this depth, execution trace bisection begins."},"mutability":"immutable","name":"SPLIT_DEPTH","nameLocation":"1777:11:164","scope":99927,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":97725,"name":"uint256","nodeType":"ElementaryTypeName","src":"1750:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"id":97730,"nodeType":"VariableDeclaration","src":"1911:46:164","nodes":[],"constant":false,"documentation":{"id":97727,"nodeType":"StructuredDocumentation","src":"1795:111:164","text":"@notice The maximum duration that may accumulate on a team's chess clock before they may no longer respond."},"mutability":"immutable","name":"MAX_CLOCK_DURATION","nameLocation":"1939:18:164","scope":99927,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"},"typeName":{"id":97729,"nodeType":"UserDefinedTypeName","pathNode":{"id":97728,"name":"Duration","nodeType":"IdentifierPath","referencedDeclaration":103263,"src":"1911:8:164"},"referencedDeclaration":103263,"src":"1911:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"visibility":"internal"},{"id":97734,"nodeType":"VariableDeclaration","src":"2065:33:164","nodes":[],"constant":false,"documentation":{"id":97731,"nodeType":"StructuredDocumentation","src":"1964:96:164","text":"@notice An onchain VM that performs single instruction steps on a fault proof program trace."},"mutability":"immutable","name":"VM","nameLocation":"2096:2:164","scope":99927,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBigStepper_$100171","typeString":"contract IBigStepper"},"typeName":{"id":97733,"nodeType":"UserDefinedTypeName","pathNode":{"id":97732,"name":"IBigStepper","nodeType":"IdentifierPath","referencedDeclaration":100171,"src":"2065:11:164"},"referencedDeclaration":100171,"src":"2065:11:164","typeDescriptions":{"typeIdentifier":"t_contract$_IBigStepper_$100171","typeString":"contract IBigStepper"}},"visibility":"internal"},{"id":97738,"nodeType":"VariableDeclaration","src":"2139:37:164","nodes":[],"constant":false,"documentation":{"id":97735,"nodeType":"StructuredDocumentation","src":"2105:29:164","text":"@notice The game type ID."},"mutability":"immutable","name":"GAME_TYPE","nameLocation":"2167:9:164","scope":99927,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"},"typeName":{"id":97737,"nodeType":"UserDefinedTypeName","pathNode":{"id":97736,"name":"GameType","nodeType":"IdentifierPath","referencedDeclaration":103271,"src":"2139:8:164"},"referencedDeclaration":103271,"src":"2139:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"visibility":"internal"},{"id":97742,"nodeType":"VariableDeclaration","src":"2230:36:164","nodes":[],"constant":false,"documentation":{"id":97739,"nodeType":"StructuredDocumentation","src":"2183:42:164","text":"@notice WETH contract for holding ETH."},"mutability":"immutable","name":"WETH","nameLocation":"2262:4:164","scope":99927,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IDelayedWETH_$100239","typeString":"contract IDelayedWETH"},"typeName":{"id":97741,"nodeType":"UserDefinedTypeName","pathNode":{"id":97740,"name":"IDelayedWETH","nodeType":"IdentifierPath","referencedDeclaration":100239,"src":"2230:12:164"},"referencedDeclaration":100239,"src":"2230:12:164","typeDescriptions":{"typeIdentifier":"t_contract$_IDelayedWETH_$100239","typeString":"contract IDelayedWETH"}},"visibility":"internal"},{"id":97746,"nodeType":"VariableDeclaration","src":"2316:61:164","nodes":[],"constant":false,"documentation":{"id":97743,"nodeType":"StructuredDocumentation","src":"2273:38:164","text":"@notice The anchor state registry."},"mutability":"immutable","name":"ANCHOR_STATE_REGISTRY","nameLocation":"2356:21:164","scope":99927,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAnchorStateRegistry_$100146","typeString":"contract IAnchorStateRegistry"},"typeName":{"id":97745,"nodeType":"UserDefinedTypeName","pathNode":{"id":97744,"name":"IAnchorStateRegistry","nodeType":"IdentifierPath","referencedDeclaration":100146,"src":"2316:20:164"},"referencedDeclaration":100146,"src":"2316:20:164","typeDescriptions":{"typeIdentifier":"t_contract$_IAnchorStateRegistry_$100146","typeString":"contract IAnchorStateRegistry"}},"visibility":"internal"},{"id":97749,"nodeType":"VariableDeclaration","src":"2459:38:164","nodes":[],"constant":false,"documentation":{"id":97747,"nodeType":"StructuredDocumentation","src":"2384:70:164","text":"@notice The chain ID of the L2 network this contract argues about."},"mutability":"immutable","name":"L2_CHAIN_ID","nameLocation":"2486:11:164","scope":99927,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":97748,"name":"uint256","nodeType":"ElementaryTypeName","src":"2459:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"id":97753,"nodeType":"VariableDeclaration","src":"2666:43:164","nodes":[],"constant":false,"documentation":{"id":97750,"nodeType":"StructuredDocumentation","src":"2504:157:164","text":"@notice The duration of the clock extension. Will be doubled if the grandchild is the root claim of an execution\n trace bisection subgame."},"mutability":"immutable","name":"CLOCK_EXTENSION","nameLocation":"2694:15:164","scope":99927,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"},"typeName":{"id":97752,"nodeType":"UserDefinedTypeName","pathNode":{"id":97751,"name":"Duration","nodeType":"IdentifierPath","referencedDeclaration":103263,"src":"2666:8:164"},"referencedDeclaration":103263,"src":"2666:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"visibility":"internal"},{"id":97761,"nodeType":"VariableDeclaration","src":"2788:59:164","nodes":[],"constant":true,"documentation":{"id":97754,"nodeType":"StructuredDocumentation","src":"2716:67:164","text":"@notice The global root claim's position is always at gindex 1."},"mutability":"constant","name":"ROOT_POSITION","nameLocation":"2815:13:164","scope":99927,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},"typeName":{"id":97756,"nodeType":"UserDefinedTypeName","pathNode":{"id":97755,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":103269,"src":"2788:8:164"},"referencedDeclaration":103269,"src":"2788:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"value":{"arguments":[{"hexValue":"31","id":97759,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2845:1:164","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"expression":{"id":97757,"name":"Position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103269,"src":"2831:8:164","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Position_$103269_$","typeString":"type(Position)"}},"id":97758,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","src":"2831:13:164","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_uint128_$returns$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (uint128) pure returns (Position)"}},"id":97760,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2831:16:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"visibility":"internal"},{"id":97765,"nodeType":"VariableDeclaration","src":"2918:41:164","nodes":[],"baseFunctions":[109416],"constant":true,"documentation":{"id":97762,"nodeType":"StructuredDocumentation","src":"2854:59:164","text":"@notice Semantic version.\n @custom:semver 0.17.0"},"functionSelector":"54fd4d50","mutability":"constant","name":"version","nameLocation":"2941:7:164","scope":99927,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":97763,"name":"string","nodeType":"ElementaryTypeName","src":"2918:6:164","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"302e31372e30","id":97764,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2951:8:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_512d9a572f9735444291a88a6ab37093045e89287be8ab073814769d70f29bc8","typeString":"literal_string \"0.17.0\""},"value":"0.17.0"},"visibility":"public"},{"id":97769,"nodeType":"VariableDeclaration","src":"3017:26:164","nodes":[],"baseFunctions":[100260],"constant":false,"documentation":{"id":97766,"nodeType":"StructuredDocumentation","src":"2966:46:164","text":"@notice The starting timestamp of the game"},"functionSelector":"cf09e0d0","mutability":"mutable","name":"createdAt","nameLocation":"3034:9:164","scope":99927,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"},"typeName":{"id":97768,"nodeType":"UserDefinedTypeName","pathNode":{"id":97767,"name":"Timestamp","nodeType":"IdentifierPath","referencedDeclaration":103261,"src":"3017:9:164"},"referencedDeclaration":103261,"src":"3017:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"}},"visibility":"public"},{"id":97773,"nodeType":"VariableDeclaration","src":"3113:27:164","nodes":[],"baseFunctions":[100267],"constant":false,"documentation":{"id":97770,"nodeType":"StructuredDocumentation","src":"3050:58:164","text":"@notice The timestamp of the game's global resolution."},"functionSelector":"19effeb4","mutability":"mutable","name":"resolvedAt","nameLocation":"3130:10:164","scope":99927,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"},"typeName":{"id":97772,"nodeType":"UserDefinedTypeName","pathNode":{"id":97771,"name":"Timestamp","nodeType":"IdentifierPath","referencedDeclaration":103261,"src":"3113:9:164"},"referencedDeclaration":103261,"src":"3113:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"}},"visibility":"public"},{"id":97777,"nodeType":"VariableDeclaration","src":"3180:24:164","nodes":[],"baseFunctions":[100274],"constant":false,"documentation":{"id":97774,"nodeType":"StructuredDocumentation","src":"3147:28:164","text":"@inheritdoc IDisputeGame"},"functionSelector":"200d2ed2","mutability":"mutable","name":"status","nameLocation":"3198:6:164","scope":99927,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"},"typeName":{"id":97776,"nodeType":"UserDefinedTypeName","pathNode":{"id":97775,"name":"GameStatus","nodeType":"IdentifierPath","referencedDeclaration":103277,"src":"3180:10:164"},"referencedDeclaration":103277,"src":"3180:10:164","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"visibility":"public"},{"id":97780,"nodeType":"VariableDeclaration","src":"3292:25:164","nodes":[],"constant":false,"documentation":{"id":97778,"nodeType":"StructuredDocumentation","src":"3211:76:164","text":"@notice Flag for the `initialize` function to prevent re-initialization."},"mutability":"mutable","name":"initialized","nameLocation":"3306:11:164","scope":99927,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":97779,"name":"bool","nodeType":"ElementaryTypeName","src":"3292:4:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"id":97785,"nodeType":"VariableDeclaration","src":"3405:28:164","nodes":[],"constant":false,"documentation":{"id":97781,"nodeType":"StructuredDocumentation","src":"3324:76:164","text":"@notice An append-only array of all claims made during the dispute game."},"functionSelector":"c6f0308c","mutability":"mutable","name":"claimData","nameLocation":"3424:9:164","scope":99927,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ClaimData_$100523_storage_$dyn_storage","typeString":"struct IFaultDisputeGame.ClaimData[]"},"typeName":{"baseType":{"id":97783,"nodeType":"UserDefinedTypeName","pathNode":{"id":97782,"name":"ClaimData","nodeType":"IdentifierPath","referencedDeclaration":100523,"src":"3405:9:164"},"referencedDeclaration":100523,"src":"3405:9:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"}},"id":97784,"nodeType":"ArrayTypeName","src":"3405:11:164","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ClaimData_$100523_storage_$dyn_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData[]"}},"visibility":"public"},{"id":97790,"nodeType":"VariableDeclaration","src":"3500:41:164","nodes":[],"constant":false,"documentation":{"id":97786,"nodeType":"StructuredDocumentation","src":"3440:55:164","text":"@notice Credited balances for winning participants."},"functionSelector":"d5d44d80","mutability":"mutable","name":"credit","nameLocation":"3535:6:164","scope":99927,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":97789,"keyType":{"id":97787,"name":"address","nodeType":"ElementaryTypeName","src":"3508:7:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3500:27:164","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":97788,"name":"uint256","nodeType":"ElementaryTypeName","src":"3519:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"public"},{"id":97796,"nodeType":"VariableDeclaration","src":"3629:40:164","nodes":[],"constant":false,"documentation":{"id":97791,"nodeType":"StructuredDocumentation","src":"3548:76:164","text":"@notice A mapping to allow for constant-time lookups of existing claims."},"functionSelector":"eff0f592","mutability":"mutable","name":"claims","nameLocation":"3663:6:164","scope":99927,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_ClaimHash_$103257_$_t_bool_$","typeString":"mapping(ClaimHash => bool)"},"typeName":{"id":97795,"keyType":{"id":97793,"nodeType":"UserDefinedTypeName","pathNode":{"id":97792,"name":"ClaimHash","nodeType":"IdentifierPath","referencedDeclaration":103257,"src":"3637:9:164"},"referencedDeclaration":103257,"src":"3637:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ClaimHash_$103257","typeString":"ClaimHash"}},"nodeType":"Mapping","src":"3629:26:164","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_ClaimHash_$103257_$_t_bool_$","typeString":"mapping(ClaimHash => bool)"},"valueType":{"id":97794,"name":"bool","nodeType":"ElementaryTypeName","src":"3650:4:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"id":97802,"nodeType":"VariableDeclaration","src":"3777:45:164","nodes":[],"constant":false,"documentation":{"id":97797,"nodeType":"StructuredDocumentation","src":"3676:96:164","text":"@notice A mapping of subgames rooted at a claim index to other claim indices in the subgame."},"functionSelector":"2ad69aeb","mutability":"mutable","name":"subgames","nameLocation":"3814:8:164","scope":99927,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_array$_t_uint256_$dyn_storage_$","typeString":"mapping(uint256 => uint256[])"},"typeName":{"id":97801,"keyType":{"id":97798,"name":"uint256","nodeType":"ElementaryTypeName","src":"3785:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"3777:29:164","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_array$_t_uint256_$dyn_storage_$","typeString":"mapping(uint256 => uint256[])"},"valueType":{"baseType":{"id":97799,"name":"uint256","nodeType":"ElementaryTypeName","src":"3796:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":97800,"nodeType":"ArrayTypeName","src":"3796:9:164","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"visibility":"public"},{"id":97807,"nodeType":"VariableDeclaration","src":"3912:48:164","nodes":[],"constant":false,"documentation":{"id":97803,"nodeType":"StructuredDocumentation","src":"3829:78:164","text":"@notice An interneal mapping of resolved subgames rooted at a claim index."},"functionSelector":"fe2bbeb2","mutability":"mutable","name":"resolvedSubgames","nameLocation":"3944:16:164","scope":99927,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bool_$","typeString":"mapping(uint256 => bool)"},"typeName":{"id":97806,"keyType":{"id":97804,"name":"uint256","nodeType":"ElementaryTypeName","src":"3920:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"3912:24:164","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bool_$","typeString":"mapping(uint256 => bool)"},"valueType":{"id":97805,"name":"bool","nodeType":"ElementaryTypeName","src":"3931:4:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"id":97811,"nodeType":"VariableDeclaration","src":"4061:36:164","nodes":[],"baseFunctions":[100594],"constant":false,"documentation":{"id":97808,"nodeType":"StructuredDocumentation","src":"3967:89:164","text":"@notice The latest finalized output root, serving as the anchor for output bisection."},"functionSelector":"57da950e","mutability":"mutable","name":"startingOutputRoot","nameLocation":"4079:18:164","scope":99927,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_OutputRoot_$103283_storage","typeString":"struct OutputRoot"},"typeName":{"id":97810,"nodeType":"UserDefinedTypeName","pathNode":{"id":97809,"name":"OutputRoot","nodeType":"IdentifierPath","referencedDeclaration":103283,"src":"4061:10:164"},"referencedDeclaration":103283,"src":"4061:10:164","typeDescriptions":{"typeIdentifier":"t_struct$_OutputRoot_$103283_storage_ptr","typeString":"struct OutputRoot"}},"visibility":"public"},{"id":97911,"nodeType":"FunctionDefinition","src":"4927:1230:164","nodes":[],"body":{"id":97910,"nodeType":"Block","src":"5268:889:164","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":97847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":97842,"name":"_maxGameDepth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97820,"src":"5375:13:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":97846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":97843,"name":"LibPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":101018,"src":"5391:11:164","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibPosition_$101018_$","typeString":"type(library LibPosition)"}},"id":97844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"MAX_POSITION_BITLEN","nodeType":"MemberAccess","referencedDeclaration":100809,"src":"5391:31:164","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":97845,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5425:1:164","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5391:35:164","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"5375:51:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":97851,"nodeType":"IfStatement","src":"5371:82:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":97848,"name":"MaxDepthTooLarge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103186,"src":"5435:16:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":97849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5435:18:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":97850,"nodeType":"RevertStatement","src":"5428:25:164"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":97854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":97852,"name":"_splitDepth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97822,"src":"5549:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":97853,"name":"_maxGameDepth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97820,"src":"5564:13:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5549:28:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":97858,"nodeType":"IfStatement","src":"5545:60:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":97855,"name":"InvalidSplitDepth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103180,"src":"5586:17:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":97856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5586:19:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":97857,"nodeType":"RevertStatement","src":"5579:26:164"}},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":97865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":97859,"name":"_clockExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97825,"src":"5698:15:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"id":97860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101098,"src":"5698:19:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Duration_$103263_$returns$_t_uint64_$bound_to$_t_userDefinedValueType$_Duration_$103263_$","typeString":"function (Duration) pure returns (uint64)"}},"id":97861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5698:21:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":97862,"name":"_maxClockDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97828,"src":"5722:17:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"id":97863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101098,"src":"5722:21:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Duration_$103263_$returns$_t_uint64_$bound_to$_t_userDefinedValueType$_Duration_$103263_$","typeString":"function (Duration) pure returns (uint64)"}},"id":97864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5722:23:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"5698:47:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":97869,"nodeType":"IfStatement","src":"5694:83:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":97866,"name":"InvalidClockExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103183,"src":"5754:21:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":97867,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5754:23:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":97868,"nodeType":"RevertStatement","src":"5747:30:164"}},{"expression":{"id":97872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":97870,"name":"GAME_TYPE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97738,"src":"5788:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":97871,"name":"_gameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97815,"src":"5800:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"src":"5788:21:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"id":97873,"nodeType":"ExpressionStatement","src":"5788:21:164"},{"expression":{"id":97876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":97874,"name":"ABSOLUTE_PRESTATE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97720,"src":"5819:17:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":97875,"name":"_absolutePrestate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97818,"src":"5839:17:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"src":"5819:37:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"id":97877,"nodeType":"ExpressionStatement","src":"5819:37:164"},{"expression":{"id":97880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":97878,"name":"MAX_GAME_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97723,"src":"5866:14:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":97879,"name":"_maxGameDepth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97820,"src":"5883:13:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5866:30:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":97881,"nodeType":"ExpressionStatement","src":"5866:30:164"},{"expression":{"id":97884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":97882,"name":"SPLIT_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97726,"src":"5906:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":97883,"name":"_splitDepth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97822,"src":"5920:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5906:25:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":97885,"nodeType":"ExpressionStatement","src":"5906:25:164"},{"expression":{"id":97888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":97886,"name":"CLOCK_EXTENSION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97753,"src":"5941:15:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":97887,"name":"_clockExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97825,"src":"5959:15:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"src":"5941:33:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"id":97889,"nodeType":"ExpressionStatement","src":"5941:33:164"},{"expression":{"id":97892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":97890,"name":"MAX_CLOCK_DURATION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97730,"src":"5984:18:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":97891,"name":"_maxClockDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97828,"src":"6005:17:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"src":"5984:38:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"id":97893,"nodeType":"ExpressionStatement","src":"5984:38:164"},{"expression":{"id":97896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":97894,"name":"VM","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97734,"src":"6032:2:164","typeDescriptions":{"typeIdentifier":"t_contract$_IBigStepper_$100171","typeString":"contract IBigStepper"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":97895,"name":"_vm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97831,"src":"6037:3:164","typeDescriptions":{"typeIdentifier":"t_contract$_IBigStepper_$100171","typeString":"contract IBigStepper"}},"src":"6032:8:164","typeDescriptions":{"typeIdentifier":"t_contract$_IBigStepper_$100171","typeString":"contract IBigStepper"}},"id":97897,"nodeType":"ExpressionStatement","src":"6032:8:164"},{"expression":{"id":97900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":97898,"name":"WETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97742,"src":"6050:4:164","typeDescriptions":{"typeIdentifier":"t_contract$_IDelayedWETH_$100239","typeString":"contract IDelayedWETH"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":97899,"name":"_weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97834,"src":"6057:5:164","typeDescriptions":{"typeIdentifier":"t_contract$_IDelayedWETH_$100239","typeString":"contract IDelayedWETH"}},"src":"6050:12:164","typeDescriptions":{"typeIdentifier":"t_contract$_IDelayedWETH_$100239","typeString":"contract IDelayedWETH"}},"id":97901,"nodeType":"ExpressionStatement","src":"6050:12:164"},{"expression":{"id":97904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":97902,"name":"ANCHOR_STATE_REGISTRY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97746,"src":"6072:21:164","typeDescriptions":{"typeIdentifier":"t_contract$_IAnchorStateRegistry_$100146","typeString":"contract IAnchorStateRegistry"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":97903,"name":"_anchorStateRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97837,"src":"6096:20:164","typeDescriptions":{"typeIdentifier":"t_contract$_IAnchorStateRegistry_$100146","typeString":"contract IAnchorStateRegistry"}},"src":"6072:44:164","typeDescriptions":{"typeIdentifier":"t_contract$_IAnchorStateRegistry_$100146","typeString":"contract IAnchorStateRegistry"}},"id":97905,"nodeType":"ExpressionStatement","src":"6072:44:164"},{"expression":{"id":97908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":97906,"name":"L2_CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97749,"src":"6126:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":97907,"name":"_l2ChainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97839,"src":"6140:10:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6126:24:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":97909,"nodeType":"ExpressionStatement","src":"6126:24:164"}]},"documentation":{"id":97812,"nodeType":"StructuredDocumentation","src":"4104:818:164","text":"@param _gameType The type ID of the game.\n @param _absolutePrestate The absolute prestate of the instruction trace.\n @param _maxGameDepth The maximum depth of bisection.\n @param _splitDepth The final depth of the output bisection portion of the game.\n @param _clockExtension The clock extension to perform when the remaining duration is less than the extension.\n @param _maxClockDuration The maximum amount of time that may accumulate on a team's chess clock.\n @param _vm An onchain VM that performs single instruction steps on an FPP trace.\n @param _weth WETH contract for holding ETH.\n @param _anchorStateRegistry The contract that stores the anchor state for each game type.\n @param _l2ChainId Chain ID of the L2 network this contract argues about."},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":97840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":97815,"mutability":"mutable","name":"_gameType","nameLocation":"4957:9:164","nodeType":"VariableDeclaration","scope":97911,"src":"4948:18:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"},"typeName":{"id":97814,"nodeType":"UserDefinedTypeName","pathNode":{"id":97813,"name":"GameType","nodeType":"IdentifierPath","referencedDeclaration":103271,"src":"4948:8:164"},"referencedDeclaration":103271,"src":"4948:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"visibility":"internal"},{"constant":false,"id":97818,"mutability":"mutable","name":"_absolutePrestate","nameLocation":"4982:17:164","nodeType":"VariableDeclaration","scope":97911,"src":"4976:23:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":97817,"nodeType":"UserDefinedTypeName","pathNode":{"id":97816,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"4976:5:164"},"referencedDeclaration":103255,"src":"4976:5:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"},{"constant":false,"id":97820,"mutability":"mutable","name":"_maxGameDepth","nameLocation":"5017:13:164","nodeType":"VariableDeclaration","scope":97911,"src":"5009:21:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":97819,"name":"uint256","nodeType":"ElementaryTypeName","src":"5009:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":97822,"mutability":"mutable","name":"_splitDepth","nameLocation":"5048:11:164","nodeType":"VariableDeclaration","scope":97911,"src":"5040:19:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":97821,"name":"uint256","nodeType":"ElementaryTypeName","src":"5040:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":97825,"mutability":"mutable","name":"_clockExtension","nameLocation":"5078:15:164","nodeType":"VariableDeclaration","scope":97911,"src":"5069:24:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"},"typeName":{"id":97824,"nodeType":"UserDefinedTypeName","pathNode":{"id":97823,"name":"Duration","nodeType":"IdentifierPath","referencedDeclaration":103263,"src":"5069:8:164"},"referencedDeclaration":103263,"src":"5069:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"visibility":"internal"},{"constant":false,"id":97828,"mutability":"mutable","name":"_maxClockDuration","nameLocation":"5112:17:164","nodeType":"VariableDeclaration","scope":97911,"src":"5103:26:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"},"typeName":{"id":97827,"nodeType":"UserDefinedTypeName","pathNode":{"id":97826,"name":"Duration","nodeType":"IdentifierPath","referencedDeclaration":103263,"src":"5103:8:164"},"referencedDeclaration":103263,"src":"5103:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"visibility":"internal"},{"constant":false,"id":97831,"mutability":"mutable","name":"_vm","nameLocation":"5151:3:164","nodeType":"VariableDeclaration","scope":97911,"src":"5139:15:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBigStepper_$100171","typeString":"contract IBigStepper"},"typeName":{"id":97830,"nodeType":"UserDefinedTypeName","pathNode":{"id":97829,"name":"IBigStepper","nodeType":"IdentifierPath","referencedDeclaration":100171,"src":"5139:11:164"},"referencedDeclaration":100171,"src":"5139:11:164","typeDescriptions":{"typeIdentifier":"t_contract$_IBigStepper_$100171","typeString":"contract IBigStepper"}},"visibility":"internal"},{"constant":false,"id":97834,"mutability":"mutable","name":"_weth","nameLocation":"5177:5:164","nodeType":"VariableDeclaration","scope":97911,"src":"5164:18:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IDelayedWETH_$100239","typeString":"contract IDelayedWETH"},"typeName":{"id":97833,"nodeType":"UserDefinedTypeName","pathNode":{"id":97832,"name":"IDelayedWETH","nodeType":"IdentifierPath","referencedDeclaration":100239,"src":"5164:12:164"},"referencedDeclaration":100239,"src":"5164:12:164","typeDescriptions":{"typeIdentifier":"t_contract$_IDelayedWETH_$100239","typeString":"contract IDelayedWETH"}},"visibility":"internal"},{"constant":false,"id":97837,"mutability":"mutable","name":"_anchorStateRegistry","nameLocation":"5213:20:164","nodeType":"VariableDeclaration","scope":97911,"src":"5192:41:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAnchorStateRegistry_$100146","typeString":"contract IAnchorStateRegistry"},"typeName":{"id":97836,"nodeType":"UserDefinedTypeName","pathNode":{"id":97835,"name":"IAnchorStateRegistry","nodeType":"IdentifierPath","referencedDeclaration":100146,"src":"5192:20:164"},"referencedDeclaration":100146,"src":"5192:20:164","typeDescriptions":{"typeIdentifier":"t_contract$_IAnchorStateRegistry_$100146","typeString":"contract IAnchorStateRegistry"}},"visibility":"internal"},{"constant":false,"id":97839,"mutability":"mutable","name":"_l2ChainId","nameLocation":"5251:10:164","nodeType":"VariableDeclaration","scope":97911,"src":"5243:18:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":97838,"name":"uint256","nodeType":"ElementaryTypeName","src":"5243:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4938:329:164"},"returnParameters":{"id":97841,"nodeType":"ParameterList","parameters":[],"src":"5268:0:164"},"scope":99927,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":98025,"nodeType":"FunctionDefinition","src":"6198:2903:164","nodes":[],"body":{"id":98024,"nodeType":"Block","src":"6243:2858:164","nodes":[],"statements":[{"condition":{"id":97915,"name":"initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97780,"src":"6888:11:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":97919,"nodeType":"IfStatement","src":"6884:44:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":97916,"name":"AlreadyInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103120,"src":"6908:18:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":97917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6908:20:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":97918,"nodeType":"RevertStatement","src":"6901:27:164"}},{"assignments":[97922,97924],"declarations":[{"constant":false,"id":97922,"mutability":"mutable","name":"root","nameLocation":"6985:4:164","nodeType":"VariableDeclaration","scope":98024,"src":"6980:9:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"},"typeName":{"id":97921,"nodeType":"UserDefinedTypeName","pathNode":{"id":97920,"name":"Hash","nodeType":"IdentifierPath","referencedDeclaration":103253,"src":"6980:4:164"},"referencedDeclaration":103253,"src":"6980:4:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"visibility":"internal"},{"constant":false,"id":97924,"mutability":"mutable","name":"rootBlockNumber","nameLocation":"6999:15:164","nodeType":"VariableDeclaration","scope":98024,"src":"6991:23:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":97923,"name":"uint256","nodeType":"ElementaryTypeName","src":"6991:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":97929,"initialValue":{"arguments":[{"id":97927,"name":"GAME_TYPE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97738,"src":"7048:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}],"expression":{"id":97925,"name":"ANCHOR_STATE_REGISTRY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97746,"src":"7018:21:164","typeDescriptions":{"typeIdentifier":"t_contract$_IAnchorStateRegistry_$100146","typeString":"contract IAnchorStateRegistry"}},"id":97926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"anchors","nodeType":"MemberAccess","referencedDeclaration":100134,"src":"7018:29:164","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_userDefinedValueType$_GameType_$103271_$returns$_t_userDefinedValueType$_Hash_$103253_$_t_uint256_$","typeString":"function (GameType) view external returns (Hash,uint256)"}},"id":97928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7018:40:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_userDefinedValueType$_Hash_$103253_$_t_uint256_$","typeString":"tuple(Hash,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"6979:79:164"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":97937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":97930,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97922,"src":"7159:4:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"id":97931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101111,"src":"7159:8:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Hash_$103253_$returns$_t_bytes32_$bound_to$_t_userDefinedValueType$_Hash_$103253_$","typeString":"function (Hash) pure returns (bytes32)"}},"id":97932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7159:10:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":97935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7181:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":97934,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7173:7:164","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":97933,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7173:7:164","typeDescriptions":{}}},"id":97936,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7173:10:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"7159:24:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":97941,"nodeType":"IfStatement","src":"7155:57:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":97938,"name":"AnchorRootNotFound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103192,"src":"7192:18:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":97939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7192:20:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":97940,"nodeType":"RevertStatement","src":"7185:27:164"}},{"expression":{"id":97947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":97942,"name":"startingOutputRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97811,"src":"7264:18:164","typeDescriptions":{"typeIdentifier":"t_struct$_OutputRoot_$103283_storage","typeString":"struct OutputRoot storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":97944,"name":"rootBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97924,"src":"7313:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":97945,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97922,"src":"7336:4:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}],"id":97943,"name":"OutputRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103283,"src":"7285:10:164","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_OutputRoot_$103283_storage_ptr_$","typeString":"type(struct OutputRoot storage pointer)"}},"id":97946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["l2BlockNumber","root"],"nodeType":"FunctionCall","src":"7285:58:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_OutputRoot_$103283_memory_ptr","typeString":"struct OutputRoot memory"}},"src":"7264:79:164","typeDescriptions":{"typeIdentifier":"t_struct$_OutputRoot_$103283_storage","typeString":"struct OutputRoot storage ref"}},"id":97948,"nodeType":"ExpressionStatement","src":"7264:79:164"},{"AST":{"nodeType":"YulBlock","src":"7933:219:164","statements":[{"body":{"nodeType":"YulBlock","src":"7983:159:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8076:4:164","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"8082:10:164","type":"","value":"0x9824bdab"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8069:6:164"},"nodeType":"YulFunctionCall","src":"8069:24:164"},"nodeType":"YulExpressionStatement","src":"8069:24:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8117:4:164","type":"","value":"0x1C"},{"kind":"number","nodeType":"YulLiteral","src":"8123:4:164","type":"","value":"0x04"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8110:6:164"},"nodeType":"YulFunctionCall","src":"8110:18:164"},"nodeType":"YulExpressionStatement","src":"8110:18:164"}]},"condition":{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"7960:12:164"},"nodeType":"YulFunctionCall","src":"7960:14:164"},{"kind":"number","nodeType":"YulLiteral","src":"7976:4:164","type":"","value":"0x7A"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"7957:2:164"},"nodeType":"YulFunctionCall","src":"7957:24:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7950:6:164"},"nodeType":"YulFunctionCall","src":"7950:32:164"},"nodeType":"YulIf","src":"7947:195:164"}]},"evmVersion":"london","externalReferences":[],"id":97949,"nodeType":"InlineAssembly","src":"7924:228:164"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":97953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":97950,"name":"l2BlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98690,"src":"8320:13:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_uint256_$","typeString":"function () pure returns (uint256)"}},"id":97951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8320:15:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":97952,"name":"rootBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97924,"src":"8339:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8320:34:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":97959,"nodeType":"IfStatement","src":"8316:79:164","trueBody":{"errorCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":97955,"name":"rootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99027,"src":"8383:9:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_userDefinedValueType$_Claim_$103255_$","typeString":"function () pure returns (Claim)"}},"id":97956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8383:11:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}],"id":97954,"name":"UnexpectedRootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103117,"src":"8363:19:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_userDefinedValueType$_Claim_$103255_$returns$__$","typeString":"function (Claim) pure"}},"id":97957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8363:32:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":97958,"nodeType":"RevertStatement","src":"8356:39:164"}},{"expression":{"arguments":[{"arguments":[{"expression":{"arguments":[{"id":97966,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8510:6:164","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":97965,"name":"uint32","nodeType":"ElementaryTypeName","src":"8510:6:164","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"}],"id":97964,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8505:4:164","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":97967,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8505:12:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint32","typeString":"type(uint32)"}},"id":97968,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"8505:16:164","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"arguments":[{"hexValue":"30","id":97971,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8560:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":97970,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8552:7:164","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":97969,"name":"address","nodeType":"ElementaryTypeName","src":"8552:7:164","typeDescriptions":{}}},"id":97972,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8552:10:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":97973,"name":"gameCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99010,"src":"8590:11:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_address_$","typeString":"function () pure returns (address)"}},"id":97974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8590:13:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":97977,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8635:3:164","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":97978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"8635:9:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":97976,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8627:7:164","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":97975,"name":"uint128","nodeType":"ElementaryTypeName","src":"8627:7:164","typeDescriptions":{}}},"id":97979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8627:18:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"arguments":[],"expression":{"argumentTypes":[],"id":97980,"name":"rootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99027,"src":"8670:9:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_userDefinedValueType$_Claim_$103255_$","typeString":"function () pure returns (Claim)"}},"id":97981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8670:11:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"id":97982,"name":"ROOT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97761,"src":"8709:13:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},{"arguments":[{"arguments":[{"hexValue":"30","id":97987,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8775:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":97985,"name":"Duration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103263,"src":"8761:8:164","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Duration_$103263_$","typeString":"type(Duration)"}},"id":97986,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","src":"8761:13:164","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_uint64_$returns$_t_userDefinedValueType$_Duration_$103263_$","typeString":"function (uint64) pure returns (Duration)"}},"id":97988,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8761:16:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},{"arguments":[{"arguments":[{"expression":{"id":97993,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"8801:5:164","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":97994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"8801:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":97992,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8794:6:164","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":97991,"name":"uint64","nodeType":"ElementaryTypeName","src":"8794:6:164","typeDescriptions":{}}},"id":97995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8794:23:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"expression":{"id":97989,"name":"Timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103261,"src":"8779:9:164","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Timestamp_$103261_$","typeString":"type(Timestamp)"}},"id":97990,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","src":"8779:14:164","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_uint64_$returns$_t_userDefinedValueType$_Timestamp_$103261_$","typeString":"function (uint64) pure returns (Timestamp)"}},"id":97996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8779:39:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"},{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"}],"expression":{"id":97983,"name":"LibClock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":101073,"src":"8747:8:164","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibClock_$101073_$","typeString":"type(library LibClock)"}},"id":97984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","referencedDeclaration":101037,"src":"8747:13:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Duration_$103263_$_t_userDefinedValueType$_Timestamp_$103261_$returns$_t_userDefinedValueType$_Clock_$103267_$","typeString":"function (Duration,Timestamp) pure returns (Clock)"}},"id":97997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8747:72:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Clock_$103267","typeString":"Clock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},{"typeIdentifier":"t_userDefinedValueType$_Clock_$103267","typeString":"Clock"}],"id":97963,"name":"ClaimData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100523,"src":"8464:9:164","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ClaimData_$100523_storage_ptr_$","typeString":"type(struct IFaultDisputeGame.ClaimData storage pointer)"}},"id":97998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["parentIndex","counteredBy","claimant","bond","claim","position","clock"],"nodeType":"FunctionCall","src":"8464:370:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_memory_ptr","typeString":"struct IFaultDisputeGame.ClaimData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ClaimData_$100523_memory_ptr","typeString":"struct IFaultDisputeGame.ClaimData memory"}],"expression":{"id":97960,"name":"claimData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97785,"src":"8436:9:164","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ClaimData_$100523_storage_$dyn_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref[] storage ref"}},"id":97962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"push","nodeType":"MemberAccess","src":"8436:14:164","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_struct$_ClaimData_$100523_storage_$dyn_storage_ptr_$_t_struct$_ClaimData_$100523_storage_$returns$__$bound_to$_t_array$_t_struct$_ClaimData_$100523_storage_$dyn_storage_ptr_$","typeString":"function (struct IFaultDisputeGame.ClaimData storage ref[] storage pointer,struct IFaultDisputeGame.ClaimData storage ref)"}},"id":97999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8436:408:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98000,"nodeType":"ExpressionStatement","src":"8436:408:164"},{"expression":{"id":98003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":98001,"name":"initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97780,"src":"8895:11:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":98002,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8909:4:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"8895:18:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98004,"nodeType":"ExpressionStatement","src":"8895:18:164"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"argumentTypes":[],"expression":{"id":98005,"name":"WETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97742,"src":"8953:4:164","typeDescriptions":{"typeIdentifier":"t_contract$_IDelayedWETH_$100239","typeString":"contract IDelayedWETH"}},"id":98007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":100691,"src":"8953:12:164","typeDescriptions":{"typeIdentifier":"t_function_external_payable$__$returns$__$","typeString":"function () payable external"}},"id":98010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":98008,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8974:3:164","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":98009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"8974:9:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"8953:32:164","typeDescriptions":{"typeIdentifier":"t_function_external_payable$__$returns$__$value","typeString":"function () payable external"}},"id":98011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8953:34:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98012,"nodeType":"ExpressionStatement","src":"8953:34:164"},{"expression":{"id":98022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":98013,"name":"createdAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97769,"src":"9043:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"expression":{"id":98018,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"9077:5:164","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":98019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"9077:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":98017,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9070:6:164","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":98016,"name":"uint64","nodeType":"ElementaryTypeName","src":"9070:6:164","typeDescriptions":{}}},"id":98020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9070:23:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"expression":{"id":98014,"name":"Timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103261,"src":"9055:9:164","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Timestamp_$103261_$","typeString":"type(Timestamp)"}},"id":98015,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","src":"9055:14:164","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_uint64_$returns$_t_userDefinedValueType$_Timestamp_$103261_$","typeString":"function (uint64) pure returns (Timestamp)"}},"id":98021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9055:39:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"}},"src":"9043:51:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"}},"id":98023,"nodeType":"ExpressionStatement","src":"9043:51:164"}]},"baseFunctions":[100615],"documentation":{"id":97912,"nodeType":"StructuredDocumentation","src":"6163:30:164","text":"@inheritdoc IInitializable"},"functionSelector":"8129fc1c","implemented":true,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"6207:10:164","parameters":{"id":97913,"nodeType":"ParameterList","parameters":[],"src":"6217:2:164"},"returnParameters":{"id":97914,"nodeType":"ParameterList","parameters":[],"src":"6243:0:164"},"scope":99927,"stateMutability":"payable","virtual":true,"visibility":"public"},{"id":98227,"nodeType":"FunctionDefinition","src":"9353:4442:164","nodes":[],"body":{"id":98226,"nodeType":"Block","src":"9527:4268:164","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"},"id":98040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98037,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97777,"src":"9626:6:164","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":98038,"name":"GameStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103277,"src":"9636:10:164","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_GameStatus_$103277_$","typeString":"type(enum GameStatus)"}},"id":98039,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"IN_PROGRESS","nodeType":"MemberAccess","referencedDeclaration":103274,"src":"9636:22:164","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"src":"9626:32:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98044,"nodeType":"IfStatement","src":"9622:64:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":98041,"name":"GameNotInProgress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103144,"src":"9667:17:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":98042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9667:19:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98043,"nodeType":"RevertStatement","src":"9660:26:164"}},{"assignments":[98047],"declarations":[{"constant":false,"id":98047,"mutability":"mutable","name":"parent","nameLocation":"9795:6:164","nodeType":"VariableDeclaration","scope":98226,"src":"9777:24:164","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"},"typeName":{"id":98046,"nodeType":"UserDefinedTypeName","pathNode":{"id":98045,"name":"ClaimData","nodeType":"IdentifierPath","referencedDeclaration":100523,"src":"9777:9:164"},"referencedDeclaration":100523,"src":"9777:9:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"}},"visibility":"internal"}],"id":98051,"initialValue":{"baseExpression":{"id":98048,"name":"claimData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97785,"src":"9804:9:164","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ClaimData_$100523_storage_$dyn_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref[] storage ref"}},"id":98050,"indexExpression":{"id":98049,"name":"_claimIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98028,"src":"9814:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9804:22:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"9777:49:164"},{"assignments":[98054],"declarations":[{"constant":false,"id":98054,"mutability":"mutable","name":"parentPos","nameLocation":"9898:9:164","nodeType":"VariableDeclaration","scope":98226,"src":"9889:18:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},"typeName":{"id":98053,"nodeType":"UserDefinedTypeName","pathNode":{"id":98052,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":103269,"src":"9889:8:164"},"referencedDeclaration":103269,"src":"9889:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"visibility":"internal"}],"id":98057,"initialValue":{"expression":{"id":98055,"name":"parent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98047,"src":"9910:6:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":98056,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"position","nodeType":"MemberAccess","referencedDeclaration":100519,"src":"9910:15:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"nodeType":"VariableDeclarationStatement","src":"9889:36:164"},{"assignments":[98060],"declarations":[{"constant":false,"id":98060,"mutability":"mutable","name":"stepPos","nameLocation":"9991:7:164","nodeType":"VariableDeclaration","scope":98226,"src":"9982:16:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},"typeName":{"id":98059,"nodeType":"UserDefinedTypeName","pathNode":{"id":98058,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":103269,"src":"9982:8:164"},"referencedDeclaration":103269,"src":"9982:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"visibility":"internal"}],"id":98065,"initialValue":{"arguments":[{"id":98063,"name":"_isAttack","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98030,"src":"10016:9:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":98061,"name":"parentPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98054,"src":"10001:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":98062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"move","nodeType":"MemberAccess","referencedDeclaration":101006,"src":"10001:14:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$_t_bool_$returns$_t_userDefinedValueType$_Position_$103269_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position,bool) pure returns (Position)"}},"id":98064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10001:25:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"nodeType":"VariableDeclarationStatement","src":"9982:44:164"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98066,"name":"stepPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98060,"src":"10142:7:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":98067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"depth","nodeType":"MemberAccess","referencedDeclaration":100833,"src":"10142:13:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint8_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (uint8)"}},"id":98068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10142:15:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98069,"name":"MAX_GAME_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97723,"src":"10161:14:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":98070,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10178:1:164","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10161:18:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10142:37:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98076,"nodeType":"IfStatement","src":"10138:65:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":98073,"name":"InvalidParent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103156,"src":"10188:13:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":98074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10188:15:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98075,"nodeType":"RevertStatement","src":"10181:22:164"}},{"assignments":[98079],"declarations":[{"constant":false,"id":98079,"mutability":"mutable","name":"preStateClaim","nameLocation":"10285:13:164","nodeType":"VariableDeclaration","scope":98226,"src":"10279:19:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":98078,"nodeType":"UserDefinedTypeName","pathNode":{"id":98077,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"10279:5:164"},"referencedDeclaration":103255,"src":"10279:5:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"}],"id":98080,"nodeType":"VariableDeclarationStatement","src":"10279:19:164"},{"assignments":[98083],"declarations":[{"constant":false,"id":98083,"mutability":"mutable","name":"postState","nameLocation":"10326:9:164","nodeType":"VariableDeclaration","scope":98226,"src":"10308:27:164","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"},"typeName":{"id":98082,"nodeType":"UserDefinedTypeName","pathNode":{"id":98081,"name":"ClaimData","nodeType":"IdentifierPath","referencedDeclaration":100523,"src":"10308:9:164"},"referencedDeclaration":100523,"src":"10308:9:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"}},"visibility":"internal"}],"id":98084,"nodeType":"VariableDeclarationStatement","src":"10308:27:164"},{"condition":{"id":98085,"name":"_isAttack","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98030,"src":"10349:9:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":98145,"nodeType":"Block","src":"11374:314:164","statements":[{"expression":{"id":98127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":98124,"name":"preStateClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98079,"src":"11542:13:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":98125,"name":"parent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98047,"src":"11558:6:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":98126,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"claim","nodeType":"MemberAccess","referencedDeclaration":100516,"src":"11558:12:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"src":"11542:28:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"id":98128,"nodeType":"ExpressionStatement","src":"11542:28:164"},{"expression":{"id":98143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":98129,"name":"postState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98083,"src":"11584:9:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":98137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98133,"name":"parentPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98054,"src":"11629:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":98134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101017,"src":"11629:13:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint128_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (uint128)"}},"id":98135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11629:15:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":98136,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11647:1:164","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"11629:19:164","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":98131,"name":"Position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103269,"src":"11615:8:164","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Position_$103269_$","typeString":"type(Position)"}},"id":98132,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","src":"11615:13:164","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_uint128_$returns$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (uint128) pure returns (Position)"}},"id":98138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11615:34:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},{"expression":{"id":98139,"name":"parent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98047,"src":"11651:6:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":98140,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"parentIndex","nodeType":"MemberAccess","referencedDeclaration":100507,"src":"11651:18:164","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"hexValue":"66616c7365","id":98141,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11671:5:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":98130,"name":"_findTraceAncestor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99638,"src":"11596:18:164","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Position_$103269_$_t_uint256_$_t_bool_$returns$_t_struct$_ClaimData_$100523_storage_ptr_$","typeString":"function (Position,uint256,bool) view returns (struct IFaultDisputeGame.ClaimData storage pointer)"}},"id":98142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11596:81:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"src":"11584:93:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":98144,"nodeType":"ExpressionStatement","src":"11584:93:164"}]},"id":98146,"nodeType":"IfStatement","src":"10345:1343:164","trueBody":{"id":98123,"nodeType":"Block","src":"10360:1008:164","statements":[{"expression":{"id":98117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":98086,"name":"preStateClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98079,"src":"11031:13:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98087,"name":"stepPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98060,"src":"11048:7:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":98088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"indexAtDepth","nodeType":"MemberAccess","referencedDeclaration":100850,"src":"11048:20:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint128_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (uint128)"}},"id":98089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11048:22:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":98090,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11074:1:164","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98091,"name":"MAX_GAME_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97723,"src":"11080:14:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":98092,"name":"SPLIT_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97726,"src":"11097:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11080:28:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":98094,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11079:30:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11074:35:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":98096,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11073:37:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11048:62:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":98098,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11047:64:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":98099,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11115:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11047:69:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":98109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98105,"name":"parentPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98054,"src":"11204:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":98106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101017,"src":"11204:13:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint128_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (uint128)"}},"id":98107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11204:15:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":98108,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11222:1:164","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"11204:19:164","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":98103,"name":"Position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103269,"src":"11190:8:164","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Position_$103269_$","typeString":"type(Position)"}},"id":98104,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","src":"11190:13:164","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_uint128_$returns$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (uint128) pure returns (Position)"}},"id":98110,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11190:34:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},{"expression":{"id":98111,"name":"parent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98047,"src":"11226:6:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":98112,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"parentIndex","nodeType":"MemberAccess","referencedDeclaration":100507,"src":"11226:18:164","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"hexValue":"66616c7365","id":98113,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11246:5:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":98102,"name":"_findTraceAncestor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99638,"src":"11171:18:164","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Position_$103269_$_t_uint256_$_t_bool_$returns$_t_struct$_ClaimData_$100523_storage_ptr_$","typeString":"function (Position,uint256,bool) view returns (struct IFaultDisputeGame.ClaimData storage pointer)"}},"id":98114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11171:81:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":98115,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"claim","nodeType":"MemberAccess","referencedDeclaration":100516,"src":"11171:87:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"id":98116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11047:211:164","trueExpression":{"id":98101,"name":"ABSOLUTE_PRESTATE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97720,"src":"11135:17:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"src":"11031:227:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"id":98118,"nodeType":"ExpressionStatement","src":"11031:227:164"},{"expression":{"id":98121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":98119,"name":"postState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98083,"src":"11339:9:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":98120,"name":"parent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98047,"src":"11351:6:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"src":"11339:18:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":98122,"nodeType":"ExpressionStatement","src":"11339:18:164"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":98157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":98151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":98148,"name":"_stateData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98032,"src":"12041:10:164","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":98147,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"12031:9:164","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":98149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12031:21:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"38","id":98150,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12056:1:164","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12031:26:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":98156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98152,"name":"preStateClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98079,"src":"12061:13:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"id":98153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101085,"src":"12061:17:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Claim_$103255_$returns$_t_bytes32_$bound_to$_t_userDefinedValueType$_Claim_$103255_$","typeString":"function (Claim) pure returns (bytes32)"}},"id":98154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12061:19:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"38","id":98155,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12084:1:164","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12061:24:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12031:54:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98161,"nodeType":"IfStatement","src":"12027:84:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":98158,"name":"InvalidPrestate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103159,"src":"12094:15:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":98159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12094:17:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98160,"nodeType":"RevertStatement","src":"12087:24:164"}},{"assignments":[98164],"declarations":[{"constant":false,"id":98164,"mutability":"mutable","name":"uuid","nameLocation":"12187:4:164","nodeType":"VariableDeclaration","scope":98226,"src":"12182:9:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"},"typeName":{"id":98163,"nodeType":"UserDefinedTypeName","pathNode":{"id":98162,"name":"Hash","nodeType":"IdentifierPath","referencedDeclaration":103253,"src":"12182:4:164"},"referencedDeclaration":103253,"src":"12182:4:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"visibility":"internal"}],"id":98168,"initialValue":{"arguments":[{"id":98166,"name":"_claimIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98028,"src":"12212:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":98165,"name":"_findLocalContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99875,"src":"12194:17:164","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_userDefinedValueType$_Hash_$103253_$","typeString":"function (uint256) view returns (Hash)"}},"id":98167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12194:30:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"nodeType":"VariableDeclarationStatement","src":"12182:42:164"},{"assignments":[98170],"declarations":[{"constant":false,"id":98170,"mutability":"mutable","name":"validStep","nameLocation":"13202:9:164","nodeType":"VariableDeclaration","scope":98226,"src":"13197:14:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":98169,"name":"bool","nodeType":"ElementaryTypeName","src":"13197:4:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":98184,"initialValue":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":98183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":98173,"name":"_stateData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98032,"src":"13222:10:164","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":98174,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98034,"src":"13234:6:164","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98175,"name":"uuid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98164,"src":"13242:4:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"id":98176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101111,"src":"13242:8:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Hash_$103253_$returns$_t_bytes32_$bound_to$_t_userDefinedValueType$_Hash_$103253_$","typeString":"function (Hash) pure returns (bytes32)"}},"id":98177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13242:10:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":98171,"name":"VM","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97734,"src":"13214:2:164","typeDescriptions":{"typeIdentifier":"t_contract$_IBigStepper_$100171","typeString":"contract IBigStepper"}},"id":98172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"step","nodeType":"MemberAccess","referencedDeclaration":100163,"src":"13214:7:164","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes memory,bytes memory,bytes32) external returns (bytes32)"}},"id":98178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13214:39:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":98179,"name":"postState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98083,"src":"13257:9:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":98180,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"claim","nodeType":"MemberAccess","referencedDeclaration":100516,"src":"13257:15:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"id":98181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101085,"src":"13257:19:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Claim_$103255_$returns$_t_bytes32_$bound_to$_t_userDefinedValueType$_Claim_$103255_$","typeString":"function (Claim) pure returns (bytes32)"}},"id":98182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13257:21:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"13214:64:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"13197:81:164"},{"assignments":[98186],"declarations":[{"constant":false,"id":98186,"mutability":"mutable","name":"parentPostAgree","nameLocation":"13293:15:164","nodeType":"VariableDeclaration","scope":98226,"src":"13288:20:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":98185,"name":"bool","nodeType":"ElementaryTypeName","src":"13288:4:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":98200,"initialValue":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":98199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":98197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":98194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98187,"name":"parentPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98054,"src":"13312:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":98188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"depth","nodeType":"MemberAccess","referencedDeclaration":100833,"src":"13312:15:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint8_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (uint8)"}},"id":98189,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13312:17:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":98190,"name":"postState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98083,"src":"13332:9:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":98191,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"position","nodeType":"MemberAccess","referencedDeclaration":100519,"src":"13332:18:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":98192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"depth","nodeType":"MemberAccess","referencedDeclaration":100833,"src":"13332:24:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint8_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (uint8)"}},"id":98193,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13332:26:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"13312:46:164","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":98195,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13311:48:164","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"hexValue":"32","id":98196,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13362:1:164","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"13311:52:164","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":98198,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13367:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13311:57:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"13288:80:164"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":98203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98201,"name":"parentPostAgree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98186,"src":"13382:15:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":98202,"name":"validStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98170,"src":"13401:9:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13382:28:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98207,"nodeType":"IfStatement","src":"13378:52:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":98204,"name":"ValidStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103162,"src":"13419:9:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":98205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13419:11:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98206,"nodeType":"RevertStatement","src":"13412:18:164"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":98214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":98208,"name":"parent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98047,"src":"13524:6:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":98209,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"counteredBy","nodeType":"MemberAccess","referencedDeclaration":100509,"src":"13524:18:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":98212,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13554:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":98211,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13546:7:164","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":98210,"name":"address","nodeType":"ElementaryTypeName","src":"13546:7:164","typeDescriptions":{}}},"id":98213,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13546:10:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13524:32:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98218,"nodeType":"IfStatement","src":"13520:60:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":98215,"name":"DuplicateStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103189,"src":"13565:13:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":98216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13565:15:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98217,"nodeType":"RevertStatement","src":"13558:22:164"}},{"expression":{"id":98224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":98219,"name":"parent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98047,"src":"13757:6:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":98221,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"counteredBy","nodeType":"MemberAccess","referencedDeclaration":100509,"src":"13757:18:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":98222,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13778:3:164","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":98223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"13778:10:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13757:31:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":98225,"nodeType":"ExpressionStatement","src":"13757:31:164"}]},"baseFunctions":[100563],"documentation":{"id":98026,"nodeType":"StructuredDocumentation","src":"9315:33:164","text":"@inheritdoc IFaultDisputeGame"},"functionSelector":"d8cc1a3c","implemented":true,"kind":"function","modifiers":[],"name":"step","nameLocation":"9362:4:164","parameters":{"id":98035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":98028,"mutability":"mutable","name":"_claimIndex","nameLocation":"9384:11:164","nodeType":"VariableDeclaration","scope":98227,"src":"9376:19:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":98027,"name":"uint256","nodeType":"ElementaryTypeName","src":"9376:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":98030,"mutability":"mutable","name":"_isAttack","nameLocation":"9410:9:164","nodeType":"VariableDeclaration","scope":98227,"src":"9405:14:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":98029,"name":"bool","nodeType":"ElementaryTypeName","src":"9405:4:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":98032,"mutability":"mutable","name":"_stateData","nameLocation":"9444:10:164","nodeType":"VariableDeclaration","scope":98227,"src":"9429:25:164","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":98031,"name":"bytes","nodeType":"ElementaryTypeName","src":"9429:5:164","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":98034,"mutability":"mutable","name":"_proof","nameLocation":"9479:6:164","nodeType":"VariableDeclaration","scope":98227,"src":"9464:21:164","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":98033,"name":"bytes","nodeType":"ElementaryTypeName","src":"9464:5:164","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9366:125:164"},"returnParameters":{"id":98036,"nodeType":"ParameterList","parameters":[],"src":"9527:0:164"},"scope":99927,"stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"id":98470,"nodeType":"FunctionDefinition","src":"14106:5200:164","nodes":[],"body":{"id":98469,"nodeType":"Block","src":"14198:5108:164","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"},"id":98241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98238,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97777,"src":"14297:6:164","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":98239,"name":"GameStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103277,"src":"14307:10:164","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_GameStatus_$103277_$","typeString":"type(enum GameStatus)"}},"id":98240,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"IN_PROGRESS","nodeType":"MemberAccess","referencedDeclaration":103274,"src":"14307:22:164","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"src":"14297:32:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98245,"nodeType":"IfStatement","src":"14293:64:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":98242,"name":"GameNotInProgress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103144,"src":"14338:17:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":98243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14338:19:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98244,"nodeType":"RevertStatement","src":"14331:26:164"}},{"assignments":[98248],"declarations":[{"constant":false,"id":98248,"mutability":"mutable","name":"parent","nameLocation":"14465:6:164","nodeType":"VariableDeclaration","scope":98469,"src":"14448:23:164","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_memory_ptr","typeString":"struct IFaultDisputeGame.ClaimData"},"typeName":{"id":98247,"nodeType":"UserDefinedTypeName","pathNode":{"id":98246,"name":"ClaimData","nodeType":"IdentifierPath","referencedDeclaration":100523,"src":"14448:9:164"},"referencedDeclaration":100523,"src":"14448:9:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"}},"visibility":"internal"}],"id":98252,"initialValue":{"baseExpression":{"id":98249,"name":"claimData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97785,"src":"14474:9:164","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ClaimData_$100523_storage_$dyn_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref[] storage ref"}},"id":98251,"indexExpression":{"id":98250,"name":"_challengeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98230,"src":"14484:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14474:26:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"14448:52:164"},{"assignments":[98255],"declarations":[{"constant":false,"id":98255,"mutability":"mutable","name":"parentPos","nameLocation":"14768:9:164","nodeType":"VariableDeclaration","scope":98469,"src":"14759:18:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},"typeName":{"id":98254,"nodeType":"UserDefinedTypeName","pathNode":{"id":98253,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":103269,"src":"14759:8:164"},"referencedDeclaration":103269,"src":"14759:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"visibility":"internal"}],"id":98258,"initialValue":{"expression":{"id":98256,"name":"parent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98248,"src":"14780:6:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_memory_ptr","typeString":"struct IFaultDisputeGame.ClaimData memory"}},"id":98257,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"position","nodeType":"MemberAccess","referencedDeclaration":100519,"src":"14780:15:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"nodeType":"VariableDeclarationStatement","src":"14759:36:164"},{"assignments":[98261],"declarations":[{"constant":false,"id":98261,"mutability":"mutable","name":"nextPosition","nameLocation":"14814:12:164","nodeType":"VariableDeclaration","scope":98469,"src":"14805:21:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},"typeName":{"id":98260,"nodeType":"UserDefinedTypeName","pathNode":{"id":98259,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":103269,"src":"14805:8:164"},"referencedDeclaration":103269,"src":"14805:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"visibility":"internal"}],"id":98266,"initialValue":{"arguments":[{"id":98264,"name":"_isAttack","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98235,"src":"14844:9:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":98262,"name":"parentPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98255,"src":"14829:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":98263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"move","nodeType":"MemberAccess","referencedDeclaration":101006,"src":"14829:14:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$_t_bool_$returns$_t_userDefinedValueType$_Position_$103269_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position,bool) pure returns (Position)"}},"id":98265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14829:25:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"nodeType":"VariableDeclarationStatement","src":"14805:49:164"},{"assignments":[98268],"declarations":[{"constant":false,"id":98268,"mutability":"mutable","name":"nextPositionDepth","nameLocation":"14872:17:164","nodeType":"VariableDeclaration","scope":98469,"src":"14864:25:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":98267,"name":"uint256","nodeType":"ElementaryTypeName","src":"14864:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":98272,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98269,"name":"nextPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98261,"src":"14892:12:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":98270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"depth","nodeType":"MemberAccess","referencedDeclaration":100833,"src":"14892:18:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint8_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (uint8)"}},"id":98271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14892:20:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"14864:48:164"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":98285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":98281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98273,"name":"_challengeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98230,"src":"15259:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":98274,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15278:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"15259:20:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98276,"name":"nextPositionDepth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98268,"src":"15283:17:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98277,"name":"SPLIT_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97726,"src":"15304:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"32","id":98278,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15318:1:164","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"15304:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15283:36:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"15259:60:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":98282,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15258:62:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":98284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"15324:10:164","subExpression":{"id":98283,"name":"_isAttack","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98235,"src":"15325:9:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"15258:76:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98290,"nodeType":"IfStatement","src":"15254:137:164","trueBody":{"id":98289,"nodeType":"Block","src":"15336:55:164","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":98286,"name":"CannotDefendRootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103135,"src":"15357:21:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":98287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15357:23:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98288,"nodeType":"RevertStatement","src":"15350:30:164"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98291,"name":"nextPositionDepth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98268,"src":"15732:17:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":98292,"name":"MAX_GAME_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97723,"src":"15752:14:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15732:34:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98297,"nodeType":"IfStatement","src":"15728:66:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":98294,"name":"GameDepthExceeded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103153,"src":"15775:17:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":98295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15775:19:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98296,"nodeType":"RevertStatement","src":"15768:26:164"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98298,"name":"nextPositionDepth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98268,"src":"16001:17:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98299,"name":"SPLIT_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97726,"src":"16022:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":98300,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16036:1:164","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"16022:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16001:36:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98311,"nodeType":"IfStatement","src":"15997:138:164","trueBody":{"id":98310,"nodeType":"Block","src":"16039:96:164","statements":[{"expression":{"arguments":[{"id":98304,"name":"_claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98233,"src":"16078:6:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"id":98305,"name":"_challengeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98230,"src":"16086:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":98306,"name":"parentPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98255,"src":"16103:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},{"id":98307,"name":"_isAttack","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98235,"src":"16114:9:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":98303,"name":"_verifyExecBisectionRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99587,"src":"16053:24:164","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Claim_$103255_$_t_uint256_$_t_userDefinedValueType$_Position_$103269_$_t_bool_$returns$__$","typeString":"function (Claim,uint256,Position,bool) view"}},"id":98308,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16053:71:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98309,"nodeType":"ExpressionStatement","src":"16053:71:164"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":98313,"name":"nextPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98261,"src":"16241:12:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}],"id":98312,"name":"getRequiredBond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99215,"src":"16225:15:164","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint256_$","typeString":"function (Position) view returns (uint256)"}},"id":98314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16225:29:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":98315,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16258:3:164","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":98316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"16258:9:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16225:42:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98321,"nodeType":"IfStatement","src":"16221:76:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":98318,"name":"IncorrectBondAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103123,"src":"16276:19:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":98319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16276:21:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98320,"nodeType":"RevertStatement","src":"16269:28:164"}},{"assignments":[98324],"declarations":[{"constant":false,"id":98324,"mutability":"mutable","name":"nextDuration","nameLocation":"16539:12:164","nodeType":"VariableDeclaration","scope":98469,"src":"16530:21:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"},"typeName":{"id":98323,"nodeType":"UserDefinedTypeName","pathNode":{"id":98322,"name":"Duration","nodeType":"IdentifierPath","referencedDeclaration":103263,"src":"16530:8:164"},"referencedDeclaration":103263,"src":"16530:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"visibility":"internal"}],"id":98328,"initialValue":{"arguments":[{"id":98326,"name":"_challengeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98230,"src":"16576:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":98325,"name":"getChallengerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99348,"src":"16554:21:164","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_userDefinedValueType$_Duration_$103263_$","typeString":"function (uint256) view returns (Duration)"}},"id":98327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16554:38:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"nodeType":"VariableDeclarationStatement","src":"16530:62:164"},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":98335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98329,"name":"nextDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98324,"src":"16742:12:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"id":98330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101098,"src":"16742:16:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Duration_$103263_$returns$_t_uint64_$bound_to$_t_userDefinedValueType$_Duration_$103263_$","typeString":"function (Duration) pure returns (uint64)"}},"id":98331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16742:18:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98332,"name":"MAX_CLOCK_DURATION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97730,"src":"16764:18:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"id":98333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101098,"src":"16764:22:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Duration_$103263_$returns$_t_uint64_$bound_to$_t_userDefinedValueType$_Duration_$103263_$","typeString":"function (Duration) pure returns (uint64)"}},"id":98334,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16764:24:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"16742:46:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98339,"nodeType":"IfStatement","src":"16738:78:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":98336,"name":"ClockTimeExceeded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103147,"src":"16797:17:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":98337,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16797:19:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98338,"nodeType":"RevertStatement","src":"16790:26:164"}},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":98350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98340,"name":"nextDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98324,"src":"17477:12:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"id":98341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101098,"src":"17477:16:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Duration_$103263_$returns$_t_uint64_$bound_to$_t_userDefinedValueType$_Duration_$103263_$","typeString":"function (Duration) pure returns (uint64)"}},"id":98342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17477:18:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":98349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98343,"name":"MAX_CLOCK_DURATION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97730,"src":"17498:18:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"id":98344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101098,"src":"17498:22:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Duration_$103263_$returns$_t_uint64_$bound_to$_t_userDefinedValueType$_Duration_$103263_$","typeString":"function (Duration) pure returns (uint64)"}},"id":98345,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17498:24:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98346,"name":"CLOCK_EXTENSION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97753,"src":"17525:15:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"id":98347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101098,"src":"17525:19:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Duration_$103263_$returns$_t_uint64_$bound_to$_t_userDefinedValueType$_Duration_$103263_$","typeString":"function (Duration) pure returns (uint64)"}},"id":98348,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17525:21:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17498:48:164","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17477:69:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98380,"nodeType":"IfStatement","src":"17473:424:164","trueBody":{"id":98379,"nodeType":"Block","src":"17548:349:164","statements":[{"assignments":[98352],"declarations":[{"constant":false,"id":98352,"mutability":"mutable","name":"extensionPeriod","nameLocation":"17678:15:164","nodeType":"VariableDeclaration","scope":98379,"src":"17671:22:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":98351,"name":"uint64","nodeType":"ElementaryTypeName","src":"17671:6:164","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"id":98367,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98353,"name":"nextPositionDepth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98268,"src":"17712:17:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98354,"name":"SPLIT_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97726,"src":"17733:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":98355,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17747:1:164","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"17733:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17712:36:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98363,"name":"CLOCK_EXTENSION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97753,"src":"17779:15:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"id":98364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101098,"src":"17779:19:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Duration_$103263_$returns$_t_uint64_$bound_to$_t_userDefinedValueType$_Duration_$103263_$","typeString":"function (Duration) pure returns (uint64)"}},"id":98365,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17779:21:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":98366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"17712:88:164","trueExpression":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":98362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98358,"name":"CLOCK_EXTENSION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97753,"src":"17751:15:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"id":98359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101098,"src":"17751:19:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Duration_$103263_$returns$_t_uint64_$bound_to$_t_userDefinedValueType$_Duration_$103263_$","typeString":"function (Duration) pure returns (uint64)"}},"id":98360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17751:21:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":98361,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17775:1:164","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"17751:25:164","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"VariableDeclarationStatement","src":"17671:129:164"},{"expression":{"id":98377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":98368,"name":"nextDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98324,"src":"17814:12:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":98375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98371,"name":"MAX_CLOCK_DURATION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97730,"src":"17843:18:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"id":98372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101098,"src":"17843:22:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Duration_$103263_$returns$_t_uint64_$bound_to$_t_userDefinedValueType$_Duration_$103263_$","typeString":"function (Duration) pure returns (uint64)"}},"id":98373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17843:24:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":98374,"name":"extensionPeriod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98352,"src":"17870:15:164","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17843:42:164","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"expression":{"id":98369,"name":"Duration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103263,"src":"17829:8:164","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Duration_$103263_$","typeString":"type(Duration)"}},"id":98370,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","src":"17829:13:164","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_uint64_$returns$_t_userDefinedValueType$_Duration_$103263_$","typeString":"function (uint64) pure returns (Duration)"}},"id":98376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17829:57:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"src":"17814:72:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"id":98378,"nodeType":"ExpressionStatement","src":"17814:72:164"}]}},{"assignments":[98383],"declarations":[{"constant":false,"id":98383,"mutability":"mutable","name":"nextClock","nameLocation":"18004:9:164","nodeType":"VariableDeclaration","scope":98469,"src":"17998:15:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Clock_$103267","typeString":"Clock"},"typeName":{"id":98382,"nodeType":"UserDefinedTypeName","pathNode":{"id":98381,"name":"Clock","nodeType":"IdentifierPath","referencedDeclaration":103267,"src":"17998:5:164"},"referencedDeclaration":103267,"src":"17998:5:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Clock_$103267","typeString":"Clock"}},"visibility":"internal"}],"id":98396,"initialValue":{"arguments":[{"id":98386,"name":"nextDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98324,"src":"18030:12:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},{"arguments":[{"arguments":[{"expression":{"id":98391,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"18066:5:164","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":98392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"18066:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":98390,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18059:6:164","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":98389,"name":"uint64","nodeType":"ElementaryTypeName","src":"18059:6:164","typeDescriptions":{}}},"id":98393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18059:23:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"expression":{"id":98387,"name":"Timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103261,"src":"18044:9:164","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Timestamp_$103261_$","typeString":"type(Timestamp)"}},"id":98388,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","src":"18044:14:164","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_uint64_$returns$_t_userDefinedValueType$_Timestamp_$103261_$","typeString":"function (uint64) pure returns (Timestamp)"}},"id":98394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18044:39:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"},{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"}],"expression":{"id":98384,"name":"LibClock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":101073,"src":"18016:8:164","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibClock_$101073_$","typeString":"type(library LibClock)"}},"id":98385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","referencedDeclaration":101037,"src":"18016:13:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Duration_$103263_$_t_userDefinedValueType$_Timestamp_$103261_$returns$_t_userDefinedValueType$_Clock_$103267_$","typeString":"function (Duration,Timestamp) pure returns (Clock)"}},"id":98395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18016:68:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Clock_$103267","typeString":"Clock"}},"nodeType":"VariableDeclarationStatement","src":"17998:86:164"},{"assignments":[98399],"declarations":[{"constant":false,"id":98399,"mutability":"mutable","name":"claimHash","nameLocation":"18378:9:164","nodeType":"VariableDeclaration","scope":98469,"src":"18368:19:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ClaimHash_$103257","typeString":"ClaimHash"},"typeName":{"id":98398,"nodeType":"UserDefinedTypeName","pathNode":{"id":98397,"name":"ClaimHash","nodeType":"IdentifierPath","referencedDeclaration":103257,"src":"18368:9:164"},"referencedDeclaration":103257,"src":"18368:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ClaimHash_$103257","typeString":"ClaimHash"}},"visibility":"internal"}],"id":98405,"initialValue":{"arguments":[{"id":98402,"name":"nextPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98261,"src":"18410:12:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},{"id":98403,"name":"_challengeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98230,"src":"18424:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":98400,"name":"_claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98233,"src":"18390:6:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"id":98401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"hashClaimPos","nodeType":"MemberAccess","referencedDeclaration":100799,"src":"18390:19:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Claim_$103255_$_t_userDefinedValueType$_Position_$103269_$_t_uint256_$returns$_t_userDefinedValueType$_ClaimHash_$103257_$bound_to$_t_userDefinedValueType$_Claim_$103255_$","typeString":"function (Claim,Position,uint256) pure returns (ClaimHash)"}},"id":98404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18390:50:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ClaimHash_$103257","typeString":"ClaimHash"}},"nodeType":"VariableDeclarationStatement","src":"18368:72:164"},{"condition":{"baseExpression":{"id":98406,"name":"claims","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97796,"src":"18454:6:164","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_ClaimHash_$103257_$_t_bool_$","typeString":"mapping(ClaimHash => bool)"}},"id":98408,"indexExpression":{"id":98407,"name":"claimHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98399,"src":"18461:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ClaimHash_$103257","typeString":"ClaimHash"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18454:17:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98412,"nodeType":"IfStatement","src":"18450:50:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":98409,"name":"ClaimAlreadyExists","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103138,"src":"18480:18:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":98410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18480:20:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98411,"nodeType":"RevertStatement","src":"18473:27:164"}},{"expression":{"id":98417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":98413,"name":"claims","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97796,"src":"18510:6:164","typeDescriptions":{"typeIdentifier":"t_mapping$_t_userDefinedValueType$_ClaimHash_$103257_$_t_bool_$","typeString":"mapping(ClaimHash => bool)"}},"id":98415,"indexExpression":{"id":98414,"name":"claimHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98399,"src":"18517:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ClaimHash_$103257","typeString":"ClaimHash"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"18510:17:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":98416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"18530:4:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"18510:24:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98418,"nodeType":"ExpressionStatement","src":"18510:24:164"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":98425,"name":"_challengeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98230,"src":"18654:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":98424,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18647:6:164","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":98423,"name":"uint32","nodeType":"ElementaryTypeName","src":"18647:6:164","typeDescriptions":{}}},"id":98426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18647:23:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"arguments":[{"hexValue":"30","id":98429,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18770:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":98428,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18762:7:164","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":98427,"name":"address","nodeType":"ElementaryTypeName","src":"18762:7:164","typeDescriptions":{}}},"id":98430,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18762:10:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":98431,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18800:3:164","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":98432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"18800:10:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":98435,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18842:3:164","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":98436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"18842:9:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":98434,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18834:7:164","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":98433,"name":"uint128","nodeType":"ElementaryTypeName","src":"18834:7:164","typeDescriptions":{}}},"id":98437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18834:18:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":98438,"name":"_claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98233,"src":"18877:6:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"id":98439,"name":"nextPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98261,"src":"18911:12:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},{"id":98440,"name":"nextClock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98383,"src":"18948:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Clock_$103267","typeString":"Clock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},{"typeIdentifier":"t_userDefinedValueType$_Clock_$103267","typeString":"Clock"}],"id":98422,"name":"ClaimData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100523,"src":"18606:9:164","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ClaimData_$100523_storage_ptr_$","typeString":"type(struct IFaultDisputeGame.ClaimData storage pointer)"}},"id":98441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["parentIndex","counteredBy","claimant","bond","claim","position","clock"],"nodeType":"FunctionCall","src":"18606:366:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_memory_ptr","typeString":"struct IFaultDisputeGame.ClaimData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ClaimData_$100523_memory_ptr","typeString":"struct IFaultDisputeGame.ClaimData memory"}],"expression":{"id":98419,"name":"claimData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97785,"src":"18578:9:164","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ClaimData_$100523_storage_$dyn_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref[] storage ref"}},"id":98421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"push","nodeType":"MemberAccess","src":"18578:14:164","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_struct$_ClaimData_$100523_storage_$dyn_storage_ptr_$_t_struct$_ClaimData_$100523_storage_$returns$__$bound_to$_t_array$_t_struct$_ClaimData_$100523_storage_$dyn_storage_ptr_$","typeString":"function (struct IFaultDisputeGame.ClaimData storage ref[] storage pointer,struct IFaultDisputeGame.ClaimData storage ref)"}},"id":98442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18578:404:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98443,"nodeType":"ExpressionStatement","src":"18578:404:164"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":98448,"name":"claimData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97785,"src":"19082:9:164","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ClaimData_$100523_storage_$dyn_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref[] storage ref"}},"id":98449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"19082:16:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":98450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19101:1:164","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"19082:20:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":98444,"name":"subgames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97802,"src":"19051:8:164","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_array$_t_uint256_$dyn_storage_$","typeString":"mapping(uint256 => uint256[] storage ref)"}},"id":98446,"indexExpression":{"id":98445,"name":"_challengeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98230,"src":"19060:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19051:25:164","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":98447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"push","nodeType":"MemberAccess","src":"19051:30:164","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$__$bound_to$_t_array$_t_uint256_$dyn_storage_ptr_$","typeString":"function (uint256[] storage pointer,uint256)"}},"id":98452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19051:52:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98453,"nodeType":"ExpressionStatement","src":"19051:52:164"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"argumentTypes":[],"expression":{"id":98454,"name":"WETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97742,"src":"19143:4:164","typeDescriptions":{"typeIdentifier":"t_contract$_IDelayedWETH_$100239","typeString":"contract IDelayedWETH"}},"id":98456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":100691,"src":"19143:12:164","typeDescriptions":{"typeIdentifier":"t_function_external_payable$__$returns$__$","typeString":"function () payable external"}},"id":98459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":98457,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19164:3:164","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":98458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"19164:9:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"19143:32:164","typeDescriptions":{"typeIdentifier":"t_function_external_payable$__$returns$__$value","typeString":"function () payable external"}},"id":98460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19143:34:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98461,"nodeType":"ExpressionStatement","src":"19143:34:164"},{"eventCall":{"arguments":[{"id":98463,"name":"_challengeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98230,"src":"19263:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":98464,"name":"_claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98233,"src":"19280:6:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"expression":{"id":98465,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19288:3:164","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":98466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"19288:10:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},{"typeIdentifier":"t_address","typeString":"address"}],"id":98462,"name":"Move","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100533,"src":"19258:4:164","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_userDefinedValueType$_Claim_$103255_$_t_address_$returns$__$","typeString":"function (uint256,Claim,address)"}},"id":98467,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19258:41:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98468,"nodeType":"EmitStatement","src":"19253:46:164"}]},"documentation":{"id":98228,"nodeType":"StructuredDocumentation","src":"13801:300:164","text":"@notice Generic move function, used for both `attack` and `defend` moves.\n @param _challengeIndex The index of the claim being moved against.\n @param _claim The claim at the next logical position in the game.\n @param _isAttack Whether or not the move is an attack or defense."},"functionSelector":"632247ea","implemented":true,"kind":"function","modifiers":[],"name":"move","nameLocation":"14115:4:164","parameters":{"id":98236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":98230,"mutability":"mutable","name":"_challengeIndex","nameLocation":"14128:15:164","nodeType":"VariableDeclaration","scope":98470,"src":"14120:23:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":98229,"name":"uint256","nodeType":"ElementaryTypeName","src":"14120:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":98233,"mutability":"mutable","name":"_claim","nameLocation":"14151:6:164","nodeType":"VariableDeclaration","scope":98470,"src":"14145:12:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":98232,"nodeType":"UserDefinedTypeName","pathNode":{"id":98231,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"14145:5:164"},"referencedDeclaration":103255,"src":"14145:5:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"},{"constant":false,"id":98235,"mutability":"mutable","name":"_isAttack","nameLocation":"14164:9:164","nodeType":"VariableDeclaration","scope":98470,"src":"14159:14:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":98234,"name":"bool","nodeType":"ElementaryTypeName","src":"14159:4:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14119:55:164"},"returnParameters":{"id":98237,"nodeType":"ParameterList","parameters":[],"src":"14198:0:164"},"scope":99927,"stateMutability":"payable","virtual":true,"visibility":"public"},{"id":98486,"nodeType":"FunctionDefinition","src":"19350:118:164","nodes":[],"body":{"id":98485,"nodeType":"Block","src":"19419:49:164","nodes":[],"statements":[{"expression":{"arguments":[{"id":98480,"name":"_parentIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98473,"src":"19434:12:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":98481,"name":"_claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98476,"src":"19448:6:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"hexValue":"74727565","id":98482,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"19456:4:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":98479,"name":"move","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98470,"src":"19429:4:164","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_userDefinedValueType$_Claim_$103255_$_t_bool_$returns$__$","typeString":"function (uint256,Claim,bool)"}},"id":98483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19429:32:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98484,"nodeType":"ExpressionStatement","src":"19429:32:164"}]},"baseFunctions":[100542],"documentation":{"id":98471,"nodeType":"StructuredDocumentation","src":"19312:33:164","text":"@inheritdoc IFaultDisputeGame"},"functionSelector":"c55cd0c7","implemented":true,"kind":"function","modifiers":[],"name":"attack","nameLocation":"19359:6:164","parameters":{"id":98477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":98473,"mutability":"mutable","name":"_parentIndex","nameLocation":"19374:12:164","nodeType":"VariableDeclaration","scope":98486,"src":"19366:20:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":98472,"name":"uint256","nodeType":"ElementaryTypeName","src":"19366:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":98476,"mutability":"mutable","name":"_claim","nameLocation":"19394:6:164","nodeType":"VariableDeclaration","scope":98486,"src":"19388:12:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":98475,"nodeType":"UserDefinedTypeName","pathNode":{"id":98474,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"19388:5:164"},"referencedDeclaration":103255,"src":"19388:5:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"}],"src":"19365:36:164"},"returnParameters":{"id":98478,"nodeType":"ParameterList","parameters":[],"src":"19419:0:164"},"scope":99927,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":98502,"nodeType":"FunctionDefinition","src":"19512:119:164","nodes":[],"body":{"id":98501,"nodeType":"Block","src":"19581:50:164","nodes":[],"statements":[{"expression":{"arguments":[{"id":98496,"name":"_parentIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98489,"src":"19596:12:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":98497,"name":"_claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98492,"src":"19610:6:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"hexValue":"66616c7365","id":98498,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"19618:5:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":98495,"name":"move","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98470,"src":"19591:4:164","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_userDefinedValueType$_Claim_$103255_$_t_bool_$returns$__$","typeString":"function (uint256,Claim,bool)"}},"id":98499,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19591:33:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98500,"nodeType":"ExpressionStatement","src":"19591:33:164"}]},"baseFunctions":[100551],"documentation":{"id":98487,"nodeType":"StructuredDocumentation","src":"19474:33:164","text":"@inheritdoc IFaultDisputeGame"},"functionSelector":"35fef567","implemented":true,"kind":"function","modifiers":[],"name":"defend","nameLocation":"19521:6:164","parameters":{"id":98493,"nodeType":"ParameterList","parameters":[{"constant":false,"id":98489,"mutability":"mutable","name":"_parentIndex","nameLocation":"19536:12:164","nodeType":"VariableDeclaration","scope":98502,"src":"19528:20:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":98488,"name":"uint256","nodeType":"ElementaryTypeName","src":"19528:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":98492,"mutability":"mutable","name":"_claim","nameLocation":"19556:6:164","nodeType":"VariableDeclaration","scope":98502,"src":"19550:12:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":98491,"nodeType":"UserDefinedTypeName","pathNode":{"id":98490,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"19550:5:164"},"referencedDeclaration":103255,"src":"19550:5:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"}],"src":"19527:36:164"},"returnParameters":{"id":98494,"nodeType":"ParameterList","parameters":[],"src":"19581:0:164"},"scope":99927,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":98677,"nodeType":"FunctionDefinition","src":"19675:2011:164","nodes":[],"body":{"id":98676,"nodeType":"Block","src":"19765:1921:164","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"},"id":98515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98512,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97777,"src":"19868:6:164","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":98513,"name":"GameStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103277,"src":"19878:10:164","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_GameStatus_$103277_$","typeString":"type(enum GameStatus)"}},"id":98514,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"IN_PROGRESS","nodeType":"MemberAccess","referencedDeclaration":103274,"src":"19878:22:164","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"src":"19868:32:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98519,"nodeType":"IfStatement","src":"19864:64:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":98516,"name":"GameNotInProgress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103144,"src":"19909:17:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":98517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19909:19:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98518,"nodeType":"RevertStatement","src":"19902:26:164"}},{"assignments":[98522,98525,98528,98531],"declarations":[{"constant":false,"id":98522,"mutability":"mutable","name":"starting","nameLocation":"19946:8:164","nodeType":"VariableDeclaration","scope":98676,"src":"19940:14:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":98521,"nodeType":"UserDefinedTypeName","pathNode":{"id":98520,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"19940:5:164"},"referencedDeclaration":103255,"src":"19940:5:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"},{"constant":false,"id":98525,"mutability":"mutable","name":"startingPos","nameLocation":"19965:11:164","nodeType":"VariableDeclaration","scope":98676,"src":"19956:20:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},"typeName":{"id":98524,"nodeType":"UserDefinedTypeName","pathNode":{"id":98523,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":103269,"src":"19956:8:164"},"referencedDeclaration":103269,"src":"19956:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"visibility":"internal"},{"constant":false,"id":98528,"mutability":"mutable","name":"disputed","nameLocation":"19984:8:164","nodeType":"VariableDeclaration","scope":98676,"src":"19978:14:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":98527,"nodeType":"UserDefinedTypeName","pathNode":{"id":98526,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"19978:5:164"},"referencedDeclaration":103255,"src":"19978:5:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"},{"constant":false,"id":98531,"mutability":"mutable","name":"disputedPos","nameLocation":"20003:11:164","nodeType":"VariableDeclaration","scope":98676,"src":"19994:20:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},"typeName":{"id":98530,"nodeType":"UserDefinedTypeName","pathNode":{"id":98529,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":103269,"src":"19994:8:164"},"referencedDeclaration":103269,"src":"19994:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"visibility":"internal"}],"id":98535,"initialValue":{"arguments":[{"id":98533,"name":"_execLeafIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98507,"src":"20062:12:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":98532,"name":"_findStartingAndDisputedOutputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99840,"src":"20030:31:164","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_userDefinedValueType$_Claim_$103255_$_t_userDefinedValueType$_Position_$103269_$_t_userDefinedValueType$_Claim_$103255_$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (uint256) view returns (Claim,Position,Claim,Position)"}},"id":98534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20030:45:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_userDefinedValueType$_Claim_$103255_$_t_userDefinedValueType$_Position_$103269_$_t_userDefinedValueType$_Claim_$103255_$_t_userDefinedValueType$_Position_$103269_$","typeString":"tuple(Claim,Position,Claim,Position)"}},"nodeType":"VariableDeclarationStatement","src":"19939:136:164"},{"assignments":[98538],"declarations":[{"constant":false,"id":98538,"mutability":"mutable","name":"uuid","nameLocation":"20090:4:164","nodeType":"VariableDeclaration","scope":98676,"src":"20085:9:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"},"typeName":{"id":98537,"nodeType":"UserDefinedTypeName","pathNode":{"id":98536,"name":"Hash","nodeType":"IdentifierPath","referencedDeclaration":103253,"src":"20085:4:164"},"referencedDeclaration":103253,"src":"20085:4:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"visibility":"internal"}],"id":98545,"initialValue":{"arguments":[{"id":98540,"name":"starting","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98522,"src":"20118:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"id":98541,"name":"startingPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98525,"src":"20128:11:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},{"id":98542,"name":"disputed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98528,"src":"20141:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"id":98543,"name":"disputedPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98531,"src":"20151:11:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}],"id":98539,"name":"_computeLocalContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99926,"src":"20097:20:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Claim_$103255_$_t_userDefinedValueType$_Position_$103269_$_t_userDefinedValueType$_Claim_$103255_$_t_userDefinedValueType$_Position_$103269_$returns$_t_userDefinedValueType$_Hash_$103253_$","typeString":"function (Claim,Position,Claim,Position) pure returns (Hash)"}},"id":98544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20097:66:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"nodeType":"VariableDeclarationStatement","src":"20085:78:164"},{"assignments":[98548],"declarations":[{"constant":false,"id":98548,"mutability":"mutable","name":"oracle","nameLocation":"20190:6:164","nodeType":"VariableDeclaration","scope":98676,"src":"20174:22:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPreimageOracle_$96782","typeString":"contract IPreimageOracle"},"typeName":{"id":98547,"nodeType":"UserDefinedTypeName","pathNode":{"id":98546,"name":"IPreimageOracle","nodeType":"IdentifierPath","referencedDeclaration":96782,"src":"20174:15:164"},"referencedDeclaration":96782,"src":"20174:15:164","typeDescriptions":{"typeIdentifier":"t_contract$_IPreimageOracle_$96782","typeString":"contract IPreimageOracle"}},"visibility":"internal"}],"id":98552,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98549,"name":"VM","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97734,"src":"20199:2:164","typeDescriptions":{"typeIdentifier":"t_contract$_IBigStepper_$100171","typeString":"contract IBigStepper"}},"id":98550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"oracle","nodeType":"MemberAccess","referencedDeclaration":100170,"src":"20199:9:164","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IPreimageOracle_$96782_$","typeString":"function () view external returns (contract IPreimageOracle)"}},"id":98551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20199:11:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPreimageOracle_$96782","typeString":"contract IPreimageOracle"}},"nodeType":"VariableDeclarationStatement","src":"20174:36:164"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98553,"name":"_ident","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98505,"src":"20224:6:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":98554,"name":"LocalPreimageKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103373,"src":"20234:16:164","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LocalPreimageKey_$103373_$","typeString":"type(library LocalPreimageKey)"}},"id":98555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"L1_HEAD_HASH","nodeType":"MemberAccess","referencedDeclaration":103356,"src":"20234:29:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20224:39:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98573,"name":"_ident","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98505,"src":"20410:6:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":98574,"name":"LocalPreimageKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103373,"src":"20420:16:164","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LocalPreimageKey_$103373_$","typeString":"type(library LocalPreimageKey)"}},"id":98575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"STARTING_OUTPUT_ROOT","nodeType":"MemberAccess","referencedDeclaration":103360,"src":"20420:37:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20410:47:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98592,"name":"_ident","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98505,"src":"20624:6:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":98593,"name":"LocalPreimageKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103373,"src":"20634:16:164","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LocalPreimageKey_$103373_$","typeString":"type(library LocalPreimageKey)"}},"id":98594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DISPUTED_OUTPUT_ROOT","nodeType":"MemberAccess","referencedDeclaration":103364,"src":"20634:37:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20624:47:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98611,"name":"_ident","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98505,"src":"20837:6:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":98612,"name":"LocalPreimageKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103373,"src":"20847:16:164","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LocalPreimageKey_$103373_$","typeString":"type(library LocalPreimageKey)"}},"id":98613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DISPUTED_L2_BLOCK_NUMBER","nodeType":"MemberAccess","referencedDeclaration":103368,"src":"20847:41:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20837:51:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98645,"name":"_ident","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98505,"src":"21380:6:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":98646,"name":"LocalPreimageKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103373,"src":"21390:16:164","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LocalPreimageKey_$103373_$","typeString":"type(library LocalPreimageKey)"}},"id":98647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CHAIN_ID","nodeType":"MemberAccess","referencedDeclaration":103372,"src":"21390:25:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21380:35:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":98670,"nodeType":"Block","src":"21629:51:164","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":98667,"name":"InvalidLocalIdent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103168,"src":"21650:17:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":98668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"21650:19:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98669,"nodeType":"RevertStatement","src":"21643:26:164"}]},"id":98671,"nodeType":"IfStatement","src":"21376:304:164","trueBody":{"id":98666,"nodeType":"Block","src":"21417:206:164","statements":[{"expression":{"arguments":[{"id":98652,"name":"_ident","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98505,"src":"21547:6:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98653,"name":"uuid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98538,"src":"21555:4:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"id":98654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101111,"src":"21555:8:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Hash_$103253_$returns$_t_bytes32_$bound_to$_t_userDefinedValueType$_Hash_$103253_$","typeString":"function (Hash) pure returns (bytes32)"}},"id":98655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"21555:10:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98658,"name":"L2_CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97749,"src":"21575:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"30784330","id":98659,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21590:4:164","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"0xC0"},"src":"21575:19:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":98657,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21567:7:164","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":98656,"name":"bytes32","nodeType":"ElementaryTypeName","src":"21567:7:164","typeDescriptions":{}}},"id":98661,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"21567:28:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"38","id":98662,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21597:1:164","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":98663,"name":"_partOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98509,"src":"21600:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":98649,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98548,"src":"21526:6:164","typeDescriptions":{"typeIdentifier":"t_contract$_IPreimageOracle_$96782","typeString":"contract IPreimageOracle"}},"id":98651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"loadLocalData","nodeType":"MemberAccess","referencedDeclaration":96741,"src":"21526:20:164","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_bytes32_$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,bytes32,bytes32,uint256,uint256) external returns (bytes32)"}},"id":98664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"21526:86:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":98665,"nodeType":"ExpressionStatement","src":"21526:86:164"}]}},"id":98672,"nodeType":"IfStatement","src":"20833:847:164","trueBody":{"id":98644,"nodeType":"Block","src":"20890:480:164","statements":[{"assignments":[98616],"declarations":[{"constant":false,"id":98616,"mutability":"mutable","name":"l2Number","nameLocation":"21176:8:164","nodeType":"VariableDeclaration","scope":98644,"src":"21168:16:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":98615,"name":"uint256","nodeType":"ElementaryTypeName","src":"21168:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":98626,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":98617,"name":"startingOutputRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97811,"src":"21187:18:164","typeDescriptions":{"typeIdentifier":"t_struct$_OutputRoot_$103283_storage","typeString":"struct OutputRoot storage ref"}},"id":98618,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"l2BlockNumber","nodeType":"MemberAccess","referencedDeclaration":103282,"src":"21187:32:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":98621,"name":"SPLIT_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97726,"src":"21245:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":98619,"name":"disputedPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98531,"src":"21222:11:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":98620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"traceIndex","nodeType":"MemberAccess","referencedDeclaration":100925,"src":"21222:22:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$_t_uint256_$returns$_t_uint256_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position,uint256) pure returns (uint256)"}},"id":98622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"21222:35:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21187:70:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":98624,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21260:1:164","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"21187:74:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21168:93:164"},{"expression":{"arguments":[{"id":98630,"name":"_ident","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98505,"src":"21297:6:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98631,"name":"uuid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98538,"src":"21305:4:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"id":98632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101111,"src":"21305:8:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Hash_$103253_$returns$_t_bytes32_$bound_to$_t_userDefinedValueType$_Hash_$103253_$","typeString":"function (Hash) pure returns (bytes32)"}},"id":98633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"21305:10:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98636,"name":"l2Number","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98616,"src":"21325:8:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"30784330","id":98637,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21337:4:164","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"0xC0"},"src":"21325:16:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":98635,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21317:7:164","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":98634,"name":"bytes32","nodeType":"ElementaryTypeName","src":"21317:7:164","typeDescriptions":{}}},"id":98639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"21317:25:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"38","id":98640,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21344:1:164","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":98641,"name":"_partOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98509,"src":"21347:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":98627,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98548,"src":"21276:6:164","typeDescriptions":{"typeIdentifier":"t_contract$_IPreimageOracle_$96782","typeString":"contract IPreimageOracle"}},"id":98629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"loadLocalData","nodeType":"MemberAccess","referencedDeclaration":96741,"src":"21276:20:164","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_bytes32_$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,bytes32,bytes32,uint256,uint256) external returns (bytes32)"}},"id":98642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"21276:83:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":98643,"nodeType":"ExpressionStatement","src":"21276:83:164"}]}},"id":98673,"nodeType":"IfStatement","src":"20620:1060:164","trueBody":{"id":98610,"nodeType":"Block","src":"20673:154:164","statements":[{"expression":{"arguments":[{"id":98599,"name":"_ident","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98505,"src":"20764:6:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98600,"name":"uuid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98538,"src":"20772:4:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"id":98601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101111,"src":"20772:8:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Hash_$103253_$returns$_t_bytes32_$bound_to$_t_userDefinedValueType$_Hash_$103253_$","typeString":"function (Hash) pure returns (bytes32)"}},"id":98602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20772:10:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98603,"name":"disputed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98528,"src":"20784:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"id":98604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101085,"src":"20784:12:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Claim_$103255_$returns$_t_bytes32_$bound_to$_t_userDefinedValueType$_Claim_$103255_$","typeString":"function (Claim) pure returns (bytes32)"}},"id":98605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20784:14:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"3332","id":98606,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20800:2:164","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":98607,"name":"_partOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98509,"src":"20804:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":98596,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98548,"src":"20743:6:164","typeDescriptions":{"typeIdentifier":"t_contract$_IPreimageOracle_$96782","typeString":"contract IPreimageOracle"}},"id":98598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"loadLocalData","nodeType":"MemberAccess","referencedDeclaration":96741,"src":"20743:20:164","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_bytes32_$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,bytes32,bytes32,uint256,uint256) external returns (bytes32)"}},"id":98608,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20743:73:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":98609,"nodeType":"ExpressionStatement","src":"20743:73:164"}]}},"id":98674,"nodeType":"IfStatement","src":"20406:1274:164","trueBody":{"id":98591,"nodeType":"Block","src":"20459:155:164","statements":[{"expression":{"arguments":[{"id":98580,"name":"_ident","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98505,"src":"20551:6:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98581,"name":"uuid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98538,"src":"20559:4:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"id":98582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101111,"src":"20559:8:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Hash_$103253_$returns$_t_bytes32_$bound_to$_t_userDefinedValueType$_Hash_$103253_$","typeString":"function (Hash) pure returns (bytes32)"}},"id":98583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20559:10:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98584,"name":"starting","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98522,"src":"20571:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"id":98585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101085,"src":"20571:12:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Claim_$103255_$returns$_t_bytes32_$bound_to$_t_userDefinedValueType$_Claim_$103255_$","typeString":"function (Claim) pure returns (bytes32)"}},"id":98586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20571:14:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"3332","id":98587,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20587:2:164","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":98588,"name":"_partOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98509,"src":"20591:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":98577,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98548,"src":"20530:6:164","typeDescriptions":{"typeIdentifier":"t_contract$_IPreimageOracle_$96782","typeString":"contract IPreimageOracle"}},"id":98579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"loadLocalData","nodeType":"MemberAccess","referencedDeclaration":96741,"src":"20530:20:164","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_bytes32_$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,bytes32,bytes32,uint256,uint256) external returns (bytes32)"}},"id":98589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20530:73:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":98590,"nodeType":"ExpressionStatement","src":"20530:73:164"}]}},"id":98675,"nodeType":"IfStatement","src":"20220:1460:164","trueBody":{"id":98572,"nodeType":"Block","src":"20265:135:164","statements":[{"expression":{"arguments":[{"id":98560,"name":"_ident","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98505,"src":"20337:6:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98561,"name":"uuid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98538,"src":"20345:4:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"id":98562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101111,"src":"20345:8:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Hash_$103253_$returns$_t_bytes32_$bound_to$_t_userDefinedValueType$_Hash_$103253_$","typeString":"function (Hash) pure returns (bytes32)"}},"id":98563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20345:10:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":98564,"name":"l1Head","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99044,"src":"20357:6:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_userDefinedValueType$_Hash_$103253_$","typeString":"function () pure returns (Hash)"}},"id":98565,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20357:8:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"id":98566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101111,"src":"20357:12:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Hash_$103253_$returns$_t_bytes32_$bound_to$_t_userDefinedValueType$_Hash_$103253_$","typeString":"function (Hash) pure returns (bytes32)"}},"id":98567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20357:14:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"3332","id":98568,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20373:2:164","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":98569,"name":"_partOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98509,"src":"20377:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":98557,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98548,"src":"20316:6:164","typeDescriptions":{"typeIdentifier":"t_contract$_IPreimageOracle_$96782","typeString":"contract IPreimageOracle"}},"id":98559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"loadLocalData","nodeType":"MemberAccess","referencedDeclaration":96741,"src":"20316:20:164","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_bytes32_$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,bytes32,bytes32,uint256,uint256) external returns (bytes32)"}},"id":98570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20316:73:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":98571,"nodeType":"ExpressionStatement","src":"20316:73:164"}]}}]},"baseFunctions":[100573],"documentation":{"id":98503,"nodeType":"StructuredDocumentation","src":"19637:33:164","text":"@inheritdoc IFaultDisputeGame"},"functionSelector":"f8f43ff6","implemented":true,"kind":"function","modifiers":[],"name":"addLocalData","nameLocation":"19684:12:164","parameters":{"id":98510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":98505,"mutability":"mutable","name":"_ident","nameLocation":"19705:6:164","nodeType":"VariableDeclaration","scope":98677,"src":"19697:14:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":98504,"name":"uint256","nodeType":"ElementaryTypeName","src":"19697:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":98507,"mutability":"mutable","name":"_execLeafIdx","nameLocation":"19721:12:164","nodeType":"VariableDeclaration","scope":98677,"src":"19713:20:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":98506,"name":"uint256","nodeType":"ElementaryTypeName","src":"19713:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":98509,"mutability":"mutable","name":"_partOffset","nameLocation":"19743:11:164","nodeType":"VariableDeclaration","scope":98677,"src":"19735:19:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":98508,"name":"uint256","nodeType":"ElementaryTypeName","src":"19735:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19696:59:164"},"returnParameters":{"id":98511,"nodeType":"ParameterList","parameters":[],"src":"19765:0:164"},"scope":99927,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":98690,"nodeType":"FunctionDefinition","src":"21730:124:164","nodes":[],"body":{"id":98689,"nodeType":"Block","src":"21800:54:164","nodes":[],"statements":[{"expression":{"id":98687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":98683,"name":"l2BlockNumber_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98681,"src":"21810:14:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30783534","id":98685,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21842:4:164","typeDescriptions":{"typeIdentifier":"t_rational_84_by_1","typeString":"int_const 84"},"value":"0x54"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_84_by_1","typeString":"int_const 84"}],"id":98684,"name":"_getArgUint256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60489,"src":"21827:14:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":98686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"21827:20:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21810:37:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":98688,"nodeType":"ExpressionStatement","src":"21810:37:164"}]},"baseFunctions":[100585],"documentation":{"id":98678,"nodeType":"StructuredDocumentation","src":"21692:33:164","text":"@inheritdoc IFaultDisputeGame"},"functionSelector":"8b85902b","implemented":true,"kind":"function","modifiers":[],"name":"l2BlockNumber","nameLocation":"21739:13:164","parameters":{"id":98679,"nodeType":"ParameterList","parameters":[],"src":"21752:2:164"},"returnParameters":{"id":98682,"nodeType":"ParameterList","parameters":[{"constant":false,"id":98681,"mutability":"mutable","name":"l2BlockNumber_","nameLocation":"21784:14:164","nodeType":"VariableDeclaration","scope":98690,"src":"21776:22:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":98680,"name":"uint256","nodeType":"ElementaryTypeName","src":"21776:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21775:24:164"},"scope":99927,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":98702,"nodeType":"FunctionDefinition","src":"21898:156:164","nodes":[],"body":{"id":98701,"nodeType":"Block","src":"21982:72:164","nodes":[],"statements":[{"expression":{"id":98699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":98696,"name":"startingBlockNumber_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98694,"src":"21992:20:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":98697,"name":"startingOutputRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97811,"src":"22015:18:164","typeDescriptions":{"typeIdentifier":"t_struct$_OutputRoot_$103283_storage","typeString":"struct OutputRoot storage ref"}},"id":98698,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"l2BlockNumber","nodeType":"MemberAccess","referencedDeclaration":103282,"src":"22015:32:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21992:55:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":98700,"nodeType":"ExpressionStatement","src":"21992:55:164"}]},"baseFunctions":[100600],"documentation":{"id":98691,"nodeType":"StructuredDocumentation","src":"21860:33:164","text":"@inheritdoc IFaultDisputeGame"},"functionSelector":"70872aa5","implemented":true,"kind":"function","modifiers":[],"name":"startingBlockNumber","nameLocation":"21907:19:164","parameters":{"id":98692,"nodeType":"ParameterList","parameters":[],"src":"21926:2:164"},"returnParameters":{"id":98695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":98694,"mutability":"mutable","name":"startingBlockNumber_","nameLocation":"21960:20:164","nodeType":"VariableDeclaration","scope":98702,"src":"21952:28:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":98693,"name":"uint256","nodeType":"ElementaryTypeName","src":"21952:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21951:30:164"},"scope":99927,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":98715,"nodeType":"FunctionDefinition","src":"22098:135:164","nodes":[],"body":{"id":98714,"nodeType":"Block","src":"22173:60:164","nodes":[],"statements":[{"expression":{"id":98712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":98709,"name":"startingRootHash_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98707,"src":"22183:17:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":98710,"name":"startingOutputRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97811,"src":"22203:18:164","typeDescriptions":{"typeIdentifier":"t_struct$_OutputRoot_$103283_storage","typeString":"struct OutputRoot storage ref"}},"id":98711,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"root","nodeType":"MemberAccess","referencedDeclaration":103280,"src":"22203:23:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"src":"22183:43:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"id":98713,"nodeType":"ExpressionStatement","src":"22183:43:164"}]},"baseFunctions":[100607],"documentation":{"id":98703,"nodeType":"StructuredDocumentation","src":"22060:33:164","text":"@inheritdoc IFaultDisputeGame"},"functionSelector":"25fc2ace","implemented":true,"kind":"function","modifiers":[],"name":"startingRootHash","nameLocation":"22107:16:164","parameters":{"id":98704,"nodeType":"ParameterList","parameters":[],"src":"22123:2:164"},"returnParameters":{"id":98708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":98707,"mutability":"mutable","name":"startingRootHash_","nameLocation":"22154:17:164","nodeType":"VariableDeclaration","scope":98715,"src":"22149:22:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"},"typeName":{"id":98706,"nodeType":"UserDefinedTypeName","pathNode":{"id":98705,"name":"Hash","nodeType":"IdentifierPath","referencedDeclaration":103253,"src":"22149:4:164"},"referencedDeclaration":103253,"src":"22149:4:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"visibility":"internal"}],"src":"22148:24:164"},"scope":99927,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":98778,"nodeType":"FunctionDefinition","src":"22480:905:164","nodes":[],"body":{"id":98777,"nodeType":"Block","src":"22537:848:164","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"},"id":98725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98722,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97777,"src":"22639:6:164","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":98723,"name":"GameStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103277,"src":"22649:10:164","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_GameStatus_$103277_$","typeString":"type(enum GameStatus)"}},"id":98724,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"IN_PROGRESS","nodeType":"MemberAccess","referencedDeclaration":103274,"src":"22649:22:164","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"src":"22639:32:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98729,"nodeType":"IfStatement","src":"22635:64:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":98726,"name":"GameNotInProgress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103144,"src":"22680:17:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":98727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22680:19:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98728,"nodeType":"RevertStatement","src":"22673:26:164"}},{"condition":{"id":98733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"22812:20:164","subExpression":{"baseExpression":{"id":98730,"name":"resolvedSubgames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97807,"src":"22813:16:164","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bool_$","typeString":"mapping(uint256 => bool)"}},"id":98732,"indexExpression":{"hexValue":"30","id":98731,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22830:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22813:19:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98737,"nodeType":"IfStatement","src":"22808:55:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":98734,"name":"OutOfOrderResolution","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103171,"src":"22841:20:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":98735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22841:22:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98736,"nodeType":"RevertStatement","src":"22834:29:164"}},{"expression":{"id":98753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":98738,"name":"status_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98720,"src":"22943:7:164","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":98747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":98739,"name":"claimData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97785,"src":"22953:9:164","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ClaimData_$100523_storage_$dyn_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref[] storage ref"}},"id":98741,"indexExpression":{"hexValue":"30","id":98740,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22963:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22953:12:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref"}},"id":98742,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"counteredBy","nodeType":"MemberAccess","referencedDeclaration":100509,"src":"22953:24:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":98745,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22989:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":98744,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22981:7:164","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":98743,"name":"address","nodeType":"ElementaryTypeName","src":"22981:7:164","typeDescriptions":{}}},"id":98746,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22981:10:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"22953:38:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":98750,"name":"GameStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103277,"src":"23021:10:164","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_GameStatus_$103277_$","typeString":"type(enum GameStatus)"}},"id":98751,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"CHALLENGER_WINS","nodeType":"MemberAccess","referencedDeclaration":103275,"src":"23021:26:164","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"id":98752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"22953:94:164","trueExpression":{"expression":{"id":98748,"name":"GameStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103277,"src":"22994:10:164","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_GameStatus_$103277_$","typeString":"type(enum GameStatus)"}},"id":98749,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"DEFENDER_WINS","nodeType":"MemberAccess","referencedDeclaration":103276,"src":"22994:24:164","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"src":"22943:104:164","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"id":98754,"nodeType":"ExpressionStatement","src":"22943:104:164"},{"expression":{"id":98764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":98755,"name":"resolvedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97773,"src":"23057:10:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"expression":{"id":98760,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"23092:5:164","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":98761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"23092:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":98759,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23085:6:164","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":98758,"name":"uint64","nodeType":"ElementaryTypeName","src":"23085:6:164","typeDescriptions":{}}},"id":98762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23085:23:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"expression":{"id":98756,"name":"Timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103261,"src":"23070:9:164","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Timestamp_$103261_$","typeString":"type(Timestamp)"}},"id":98757,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","src":"23070:14:164","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_uint64_$returns$_t_userDefinedValueType$_Timestamp_$103261_$","typeString":"function (uint64) pure returns (Timestamp)"}},"id":98763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23070:39:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"}},"src":"23057:52:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"}},"id":98765,"nodeType":"ExpressionStatement","src":"23057:52:164"},{"eventCall":{"arguments":[{"id":98769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":98767,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97777,"src":"23239:6:164","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":98768,"name":"status_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98720,"src":"23248:7:164","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"src":"23239:16:164","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}],"id":98766,"name":"Resolved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100253,"src":"23230:8:164","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_enum$_GameStatus_$103277_$returns$__$","typeString":"function (enum GameStatus)"}},"id":98770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23230:26:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98771,"nodeType":"EmitStatement","src":"23225:31:164"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98772,"name":"ANCHOR_STATE_REGISTRY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97746,"src":"23334:21:164","typeDescriptions":{"typeIdentifier":"t_contract$_IAnchorStateRegistry_$100146","typeString":"contract IAnchorStateRegistry"}},"id":98774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"tryUpdateAnchorState","nodeType":"MemberAccess","referencedDeclaration":100145,"src":"23334:42:164","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":98775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23334:44:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98776,"nodeType":"ExpressionStatement","src":"23334:44:164"}]},"baseFunctions":[100314],"documentation":{"id":98716,"nodeType":"StructuredDocumentation","src":"22447:28:164","text":"@inheritdoc IDisputeGame"},"functionSelector":"2810e1d6","implemented":true,"kind":"function","modifiers":[],"name":"resolve","nameLocation":"22489:7:164","parameters":{"id":98717,"nodeType":"ParameterList","parameters":[],"src":"22496:2:164"},"returnParameters":{"id":98721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":98720,"mutability":"mutable","name":"status_","nameLocation":"22528:7:164","nodeType":"VariableDeclaration","scope":98778,"src":"22517:18:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"},"typeName":{"id":98719,"nodeType":"UserDefinedTypeName","pathNode":{"id":98718,"name":"GameStatus","nodeType":"IdentifierPath","referencedDeclaration":103277,"src":"22517:10:164"},"referencedDeclaration":103277,"src":"22517:10:164","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"visibility":"internal"}],"src":"22516:20:164"},"scope":99927,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":98984,"nodeType":"FunctionDefinition","src":"23429:3867:164","nodes":[],"body":{"id":98983,"nodeType":"Block","src":"23481:3815:164","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"},"id":98787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98784,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97777,"src":"23583:6:164","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":98785,"name":"GameStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103277,"src":"23593:10:164","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_GameStatus_$103277_$","typeString":"type(enum GameStatus)"}},"id":98786,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"IN_PROGRESS","nodeType":"MemberAccess","referencedDeclaration":103274,"src":"23593:22:164","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"src":"23583:32:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98791,"nodeType":"IfStatement","src":"23579:64:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":98788,"name":"GameNotInProgress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103144,"src":"23624:17:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":98789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23624:19:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98790,"nodeType":"RevertStatement","src":"23617:26:164"}},{"assignments":[98794],"declarations":[{"constant":false,"id":98794,"mutability":"mutable","name":"subgameRootClaim","nameLocation":"23672:16:164","nodeType":"VariableDeclaration","scope":98983,"src":"23654:34:164","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"},"typeName":{"id":98793,"nodeType":"UserDefinedTypeName","pathNode":{"id":98792,"name":"ClaimData","nodeType":"IdentifierPath","referencedDeclaration":100523,"src":"23654:9:164"},"referencedDeclaration":100523,"src":"23654:9:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"}},"visibility":"internal"}],"id":98798,"initialValue":{"baseExpression":{"id":98795,"name":"claimData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97785,"src":"23691:9:164","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ClaimData_$100523_storage_$dyn_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref[] storage ref"}},"id":98797,"indexExpression":{"id":98796,"name":"_claimIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98781,"src":"23701:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23691:22:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"23654:59:164"},{"assignments":[98801],"declarations":[{"constant":false,"id":98801,"mutability":"mutable","name":"challengeClockDuration","nameLocation":"23732:22:164","nodeType":"VariableDeclaration","scope":98983,"src":"23723:31:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"},"typeName":{"id":98800,"nodeType":"UserDefinedTypeName","pathNode":{"id":98799,"name":"Duration","nodeType":"IdentifierPath","referencedDeclaration":103263,"src":"23723:8:164"},"referencedDeclaration":103263,"src":"23723:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"visibility":"internal"}],"id":98805,"initialValue":{"arguments":[{"id":98803,"name":"_claimIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98781,"src":"23779:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":98802,"name":"getChallengerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99348,"src":"23757:21:164","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_userDefinedValueType$_Duration_$103263_$","typeString":"function (uint256) view returns (Duration)"}},"id":98804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23757:34:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"nodeType":"VariableDeclarationStatement","src":"23723:68:164"},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":98812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98806,"name":"challengeClockDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98801,"src":"24071:22:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"id":98807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101098,"src":"24071:26:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Duration_$103263_$returns$_t_uint64_$bound_to$_t_userDefinedValueType$_Duration_$103263_$","typeString":"function (Duration) pure returns (uint64)"}},"id":98808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24071:28:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98809,"name":"MAX_CLOCK_DURATION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97730,"src":"24102:18:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"id":98810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101098,"src":"24102:22:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Duration_$103263_$returns$_t_uint64_$bound_to$_t_userDefinedValueType$_Duration_$103263_$","typeString":"function (Duration) pure returns (uint64)"}},"id":98811,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24102:24:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"24071:55:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98816,"nodeType":"IfStatement","src":"24067:85:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":98813,"name":"ClockNotExpired","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103150,"src":"24135:15:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":98814,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24135:17:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98815,"nodeType":"RevertStatement","src":"24128:24:164"}},{"condition":{"baseExpression":{"id":98817,"name":"resolvedSubgames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97807,"src":"24221:16:164","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bool_$","typeString":"mapping(uint256 => bool)"}},"id":98819,"indexExpression":{"id":98818,"name":"_claimIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98781,"src":"24238:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24221:29:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98823,"nodeType":"IfStatement","src":"24217:64:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":98820,"name":"ClaimAlreadyResolved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103174,"src":"24259:20:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":98821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24259:22:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98822,"nodeType":"RevertStatement","src":"24252:29:164"}},{"assignments":[98828],"declarations":[{"constant":false,"id":98828,"mutability":"mutable","name":"challengeIndices","nameLocation":"24310:16:164","nodeType":"VariableDeclaration","scope":98983,"src":"24292:34:164","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":98826,"name":"uint256","nodeType":"ElementaryTypeName","src":"24292:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":98827,"nodeType":"ArrayTypeName","src":"24292:9:164","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":98832,"initialValue":{"baseExpression":{"id":98829,"name":"subgames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97802,"src":"24329:8:164","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_array$_t_uint256_$dyn_storage_$","typeString":"mapping(uint256 => uint256[] storage ref)"}},"id":98831,"indexExpression":{"id":98830,"name":"_claimIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98781,"src":"24338:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24329:21:164","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"24292:58:164"},{"assignments":[98834],"declarations":[{"constant":false,"id":98834,"mutability":"mutable","name":"challengeIndicesLen","nameLocation":"24368:19:164","nodeType":"VariableDeclaration","scope":98983,"src":"24360:27:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":98833,"name":"uint256","nodeType":"ElementaryTypeName","src":"24360:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":98837,"initialValue":{"expression":{"id":98835,"name":"challengeIndices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98828,"src":"24390:16:164","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},"id":98836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"24390:23:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"24360:53:164"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":98844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98838,"name":"challengeIndicesLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98834,"src":"24576:19:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":98839,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24599:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"24576:24:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98841,"name":"_claimIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98781,"src":"24604:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":98842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24619:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"24604:16:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"24576:44:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98876,"nodeType":"IfStatement","src":"24572:805:164","trueBody":{"id":98875,"nodeType":"Block","src":"24622:755:164","statements":[{"assignments":[98846],"declarations":[{"constant":false,"id":98846,"mutability":"mutable","name":"counteredBy","nameLocation":"25095:11:164","nodeType":"VariableDeclaration","scope":98875,"src":"25087:19:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":98845,"name":"address","nodeType":"ElementaryTypeName","src":"25087:7:164","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":98849,"initialValue":{"expression":{"id":98847,"name":"subgameRootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98794,"src":"25109:16:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":98848,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"counteredBy","nodeType":"MemberAccess","referencedDeclaration":100509,"src":"25109:28:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"25087:50:164"},{"assignments":[98851],"declarations":[{"constant":false,"id":98851,"mutability":"mutable","name":"recipient","nameLocation":"25159:9:164","nodeType":"VariableDeclaration","scope":98875,"src":"25151:17:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":98850,"name":"address","nodeType":"ElementaryTypeName","src":"25151:7:164","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":98862,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":98857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98852,"name":"counteredBy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98846,"src":"25171:11:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":98855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25194:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":98854,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25186:7:164","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":98853,"name":"address","nodeType":"ElementaryTypeName","src":"25186:7:164","typeDescriptions":{}}},"id":98856,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"25186:10:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"25171:25:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":98860,"name":"counteredBy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98846,"src":"25227:11:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":98861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"25171:67:164","trueExpression":{"expression":{"id":98858,"name":"subgameRootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98794,"src":"25199:16:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":98859,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"claimant","nodeType":"MemberAccess","referencedDeclaration":100511,"src":"25199:25:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"25151:87:164"},{"expression":{"arguments":[{"id":98864,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98851,"src":"25268:9:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":98865,"name":"subgameRootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98794,"src":"25279:16:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}],"id":98863,"name":"_distributeBond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99493,"src":"25252:15:164","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_ClaimData_$100523_storage_ptr_$returns$__$","typeString":"function (address,struct IFaultDisputeGame.ClaimData storage pointer)"}},"id":98866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"25252:44:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98867,"nodeType":"ExpressionStatement","src":"25252:44:164"},{"expression":{"id":98872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":98868,"name":"resolvedSubgames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97807,"src":"25310:16:164","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bool_$","typeString":"mapping(uint256 => bool)"}},"id":98870,"indexExpression":{"id":98869,"name":"_claimIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98781,"src":"25327:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"25310:29:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":98871,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"25342:4:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"25310:36:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98873,"nodeType":"ExpressionStatement","src":"25310:36:164"},{"functionReturnParameters":98783,"id":98874,"nodeType":"Return","src":"25360:7:164"}]}},{"assignments":[98878],"declarations":[{"constant":false,"id":98878,"mutability":"mutable","name":"countered","nameLocation":"25453:9:164","nodeType":"VariableDeclaration","scope":98983,"src":"25445:17:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":98877,"name":"address","nodeType":"ElementaryTypeName","src":"25445:7:164","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":98883,"initialValue":{"arguments":[{"hexValue":"30","id":98881,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25473:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":98880,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25465:7:164","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":98879,"name":"address","nodeType":"ElementaryTypeName","src":"25465:7:164","typeDescriptions":{}}},"id":98882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"25465:10:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"25445:30:164"},{"assignments":[98886],"declarations":[{"constant":false,"id":98886,"mutability":"mutable","name":"leftmostCounter","nameLocation":"25494:15:164","nodeType":"VariableDeclaration","scope":98983,"src":"25485:24:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},"typeName":{"id":98885,"nodeType":"UserDefinedTypeName","pathNode":{"id":98884,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":103269,"src":"25485:8:164"},"referencedDeclaration":103269,"src":"25485:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"visibility":"internal"}],"id":98895,"initialValue":{"arguments":[{"expression":{"arguments":[{"id":98891,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25531:7:164","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":98890,"name":"uint128","nodeType":"ElementaryTypeName","src":"25531:7:164","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":98889,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"25526:4:164","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":98892,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"25526:13:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":98893,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"25526:17:164","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":98887,"name":"Position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103269,"src":"25512:8:164","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Position_$103269_$","typeString":"type(Position)"}},"id":98888,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","src":"25512:13:164","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_uint128_$returns$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (uint128) pure returns (Position)"}},"id":98894,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"25512:32:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"nodeType":"VariableDeclarationStatement","src":"25485:59:164"},{"body":{"id":98955,"nodeType":"Block","src":"25604:1079:164","statements":[{"assignments":[98907],"declarations":[{"constant":false,"id":98907,"mutability":"mutable","name":"challengeIndex","nameLocation":"25626:14:164","nodeType":"VariableDeclaration","scope":98955,"src":"25618:22:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":98906,"name":"uint256","nodeType":"ElementaryTypeName","src":"25618:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":98911,"initialValue":{"baseExpression":{"id":98908,"name":"challengeIndices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98828,"src":"25643:16:164","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},"id":98910,"indexExpression":{"id":98909,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98897,"src":"25660:1:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25643:19:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"25618:44:164"},{"condition":{"id":98915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"25763:33:164","subExpression":{"baseExpression":{"id":98912,"name":"resolvedSubgames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97807,"src":"25764:16:164","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bool_$","typeString":"mapping(uint256 => bool)"}},"id":98914,"indexExpression":{"id":98913,"name":"challengeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98907,"src":"25781:14:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25764:32:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98919,"nodeType":"IfStatement","src":"25759:68:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":98916,"name":"OutOfOrderResolution","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103171,"src":"25805:20:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":98917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"25805:22:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98918,"nodeType":"RevertStatement","src":"25798:29:164"}},{"assignments":[98922],"declarations":[{"constant":false,"id":98922,"mutability":"mutable","name":"claim","nameLocation":"25860:5:164","nodeType":"VariableDeclaration","scope":98955,"src":"25842:23:164","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"},"typeName":{"id":98921,"nodeType":"UserDefinedTypeName","pathNode":{"id":98920,"name":"ClaimData","nodeType":"IdentifierPath","referencedDeclaration":100523,"src":"25842:9:164"},"referencedDeclaration":100523,"src":"25842:9:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"}},"visibility":"internal"}],"id":98926,"initialValue":{"baseExpression":{"id":98923,"name":"claimData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97785,"src":"25868:9:164","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ClaimData_$100523_storage_$dyn_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref[] storage ref"}},"id":98925,"indexExpression":{"id":98924,"name":"challengeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98907,"src":"25878:14:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25868:25:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"25842:51:164"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":98942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":98933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":98927,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98922,"src":"26483:5:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":98928,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"counteredBy","nodeType":"MemberAccess","referencedDeclaration":100509,"src":"26483:17:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":98931,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26512:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":98930,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26504:7:164","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":98929,"name":"address","nodeType":"ElementaryTypeName","src":"26504:7:164","typeDescriptions":{}}},"id":98932,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"26504:10:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"26483:31:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":98941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":98934,"name":"leftmostCounter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98886,"src":"26518:15:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":98935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101017,"src":"26518:19:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint128_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (uint128)"}},"id":98936,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"26518:21:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":98937,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98922,"src":"26542:5:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":98938,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"position","nodeType":"MemberAccess","referencedDeclaration":100519,"src":"26542:14:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":98939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101017,"src":"26542:18:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint128_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (uint128)"}},"id":98940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"26542:20:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"26518:44:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"26483:79:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98954,"nodeType":"IfStatement","src":"26479:194:164","trueBody":{"id":98953,"nodeType":"Block","src":"26564:109:164","statements":[{"expression":{"id":98946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":98943,"name":"countered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98878,"src":"26582:9:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":98944,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98922,"src":"26594:5:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":98945,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"claimant","nodeType":"MemberAccess","referencedDeclaration":100511,"src":"26594:14:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"26582:26:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":98947,"nodeType":"ExpressionStatement","src":"26582:26:164"},{"expression":{"id":98951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":98948,"name":"leftmostCounter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98886,"src":"26626:15:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":98949,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98922,"src":"26644:5:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":98950,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"position","nodeType":"MemberAccess","referencedDeclaration":100519,"src":"26644:14:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"src":"26626:32:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":98952,"nodeType":"ExpressionStatement","src":"26626:32:164"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":98902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98900,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98897,"src":"25574:1:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":98901,"name":"challengeIndicesLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98834,"src":"25578:19:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25574:23:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98956,"initializationExpression":{"assignments":[98897],"declarations":[{"constant":false,"id":98897,"mutability":"mutable","name":"i","nameLocation":"25567:1:164","nodeType":"VariableDeclaration","scope":98956,"src":"25559:9:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":98896,"name":"uint256","nodeType":"ElementaryTypeName","src":"25559:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":98899,"initialValue":{"hexValue":"30","id":98898,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25571:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"25559:13:164"},"loopExpression":{"expression":{"id":98904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"25599:3:164","subExpression":{"id":98903,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98897,"src":"25601:1:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":98905,"nodeType":"ExpressionStatement","src":"25599:3:164"},"nodeType":"ForStatement","src":"25554:1129:164"},{"expression":{"arguments":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":98963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":98958,"name":"countered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98878,"src":"26907:9:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":98961,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26928:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":98960,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26920:7:164","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":98959,"name":"address","nodeType":"ElementaryTypeName","src":"26920:7:164","typeDescriptions":{}}},"id":98962,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"26920:10:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"26907:23:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":98966,"name":"countered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98878,"src":"26961:9:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":98967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"26907:63:164","trueExpression":{"expression":{"id":98964,"name":"subgameRootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98794,"src":"26933:16:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":98965,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"claimant","nodeType":"MemberAccess","referencedDeclaration":100511,"src":"26933:25:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":98968,"name":"subgameRootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98794,"src":"26972:16:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}],"id":98957,"name":"_distributeBond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99493,"src":"26891:15:164","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_ClaimData_$100523_storage_ptr_$returns$__$","typeString":"function (address,struct IFaultDisputeGame.ClaimData storage pointer)"}},"id":98969,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"26891:98:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":98970,"nodeType":"ExpressionStatement","src":"26891:98:164"},{"expression":{"id":98975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":98971,"name":"subgameRootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98794,"src":"27161:16:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":98973,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"counteredBy","nodeType":"MemberAccess","referencedDeclaration":100509,"src":"27161:28:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":98974,"name":"countered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98878,"src":"27192:9:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"27161:40:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":98976,"nodeType":"ExpressionStatement","src":"27161:40:164"},{"expression":{"id":98981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":98977,"name":"resolvedSubgames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97807,"src":"27253:16:164","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bool_$","typeString":"mapping(uint256 => bool)"}},"id":98979,"indexExpression":{"id":98978,"name":"_claimIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98781,"src":"27270:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27253:29:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":98980,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"27285:4:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"27253:36:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":98982,"nodeType":"ExpressionStatement","src":"27253:36:164"}]},"baseFunctions":[100579],"documentation":{"id":98779,"nodeType":"StructuredDocumentation","src":"23391:33:164","text":"@inheritdoc IFaultDisputeGame"},"functionSelector":"fdffbb28","implemented":true,"kind":"function","modifiers":[],"name":"resolveClaim","nameLocation":"23438:12:164","parameters":{"id":98782,"nodeType":"ParameterList","parameters":[{"constant":false,"id":98781,"mutability":"mutable","name":"_claimIndex","nameLocation":"23459:11:164","nodeType":"VariableDeclaration","scope":98984,"src":"23451:19:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":98780,"name":"uint256","nodeType":"ElementaryTypeName","src":"23451:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23450:21:164"},"returnParameters":{"id":98783,"nodeType":"ParameterList","parameters":[],"src":"23481:0:164"},"scope":99927,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":98997,"nodeType":"FunctionDefinition","src":"27335:108:164","nodes":[],"body":{"id":98996,"nodeType":"Block","src":"27405:38:164","nodes":[],"statements":[{"expression":{"id":98994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":98992,"name":"gameType_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98990,"src":"27415:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":98993,"name":"GAME_TYPE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97738,"src":"27427:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"src":"27415:21:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"id":98995,"nodeType":"ExpressionStatement","src":"27415:21:164"}]},"baseFunctions":[100281],"documentation":{"id":98985,"nodeType":"StructuredDocumentation","src":"27302:28:164","text":"@inheritdoc IDisputeGame"},"functionSelector":"bbdc02db","implemented":true,"kind":"function","modifiers":[],"name":"gameType","nameLocation":"27344:8:164","overrides":{"id":98987,"nodeType":"OverrideSpecifier","overrides":[],"src":"27367:8:164"},"parameters":{"id":98986,"nodeType":"ParameterList","parameters":[],"src":"27352:2:164"},"returnParameters":{"id":98991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":98990,"mutability":"mutable","name":"gameType_","nameLocation":"27394:9:164","nodeType":"VariableDeclaration","scope":98997,"src":"27385:18:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"},"typeName":{"id":98989,"nodeType":"UserDefinedTypeName","pathNode":{"id":98988,"name":"GameType","nodeType":"IdentifierPath","referencedDeclaration":103271,"src":"27385:8:164"},"referencedDeclaration":103271,"src":"27385:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"visibility":"internal"}],"src":"27384:20:164"},"scope":99927,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":99010,"nodeType":"FunctionDefinition","src":"27482:110:164","nodes":[],"body":{"id":99009,"nodeType":"Block","src":"27544:48:164","nodes":[],"statements":[{"expression":{"id":99007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99003,"name":"creator_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99001,"src":"27554:8:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30783030","id":99005,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27580:4:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0x00"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":99004,"name":"_getArgAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60423,"src":"27565:14:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_address_$","typeString":"function (uint256) pure returns (address)"}},"id":99006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"27565:20:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"27554:31:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":99008,"nodeType":"ExpressionStatement","src":"27554:31:164"}]},"baseFunctions":[100287],"documentation":{"id":98998,"nodeType":"StructuredDocumentation","src":"27449:28:164","text":"@inheritdoc IDisputeGame"},"functionSelector":"37b1b229","implemented":true,"kind":"function","modifiers":[],"name":"gameCreator","nameLocation":"27491:11:164","parameters":{"id":98999,"nodeType":"ParameterList","parameters":[],"src":"27502:2:164"},"returnParameters":{"id":99002,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99001,"mutability":"mutable","name":"creator_","nameLocation":"27534:8:164","nodeType":"VariableDeclaration","scope":99010,"src":"27526:16:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":99000,"name":"address","nodeType":"ElementaryTypeName","src":"27526:7:164","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"27525:18:164"},"scope":99927,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":99027,"nodeType":"FunctionDefinition","src":"27631:122:164","nodes":[],"body":{"id":99026,"nodeType":"Block","src":"27691:62:164","nodes":[],"statements":[{"expression":{"id":99024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99017,"name":"rootClaim_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99015,"src":"27701:10:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"hexValue":"30783134","id":99021,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27740:4:164","typeDescriptions":{"typeIdentifier":"t_rational_20_by_1","typeString":"int_const 20"},"value":"0x14"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_20_by_1","typeString":"int_const 20"}],"id":99020,"name":"_getArgBytes32","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60474,"src":"27725:14:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) pure returns (bytes32)"}},"id":99022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"27725:20:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":99018,"name":"Claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103255,"src":"27714:5:164","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Claim_$103255_$","typeString":"type(Claim)"}},"id":99019,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","src":"27714:10:164","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Claim_$103255_$","typeString":"function (bytes32) pure returns (Claim)"}},"id":99023,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"27714:32:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"src":"27701:45:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"id":99025,"nodeType":"ExpressionStatement","src":"27701:45:164"}]},"baseFunctions":[100294],"documentation":{"id":99011,"nodeType":"StructuredDocumentation","src":"27598:28:164","text":"@inheritdoc IDisputeGame"},"functionSelector":"bcef3b55","implemented":true,"kind":"function","modifiers":[],"name":"rootClaim","nameLocation":"27640:9:164","parameters":{"id":99012,"nodeType":"ParameterList","parameters":[],"src":"27649:2:164"},"returnParameters":{"id":99016,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99015,"mutability":"mutable","name":"rootClaim_","nameLocation":"27679:10:164","nodeType":"VariableDeclaration","scope":99027,"src":"27673:16:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":99014,"nodeType":"UserDefinedTypeName","pathNode":{"id":99013,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"27673:5:164"},"referencedDeclaration":103255,"src":"27673:5:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"}],"src":"27672:18:164"},"scope":99927,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":99044,"nodeType":"FunctionDefinition","src":"27792:111:164","nodes":[],"body":{"id":99043,"nodeType":"Block","src":"27845:58:164","nodes":[],"statements":[{"expression":{"id":99041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99034,"name":"l1Head_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99032,"src":"27855:7:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"hexValue":"30783334","id":99038,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27890:4:164","typeDescriptions":{"typeIdentifier":"t_rational_52_by_1","typeString":"int_const 52"},"value":"0x34"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_52_by_1","typeString":"int_const 52"}],"id":99037,"name":"_getArgBytes32","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60474,"src":"27875:14:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) pure returns (bytes32)"}},"id":99039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"27875:20:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":99035,"name":"Hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103253,"src":"27865:4:164","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Hash_$103253_$","typeString":"type(Hash)"}},"id":99036,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","src":"27865:9:164","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Hash_$103253_$","typeString":"function (bytes32) pure returns (Hash)"}},"id":99040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"27865:31:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"src":"27855:41:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"id":99042,"nodeType":"ExpressionStatement","src":"27855:41:164"}]},"baseFunctions":[100301],"documentation":{"id":99028,"nodeType":"StructuredDocumentation","src":"27759:28:164","text":"@inheritdoc IDisputeGame"},"functionSelector":"6361506d","implemented":true,"kind":"function","modifiers":[],"name":"l1Head","nameLocation":"27801:6:164","parameters":{"id":99029,"nodeType":"ParameterList","parameters":[],"src":"27807:2:164"},"returnParameters":{"id":99033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99032,"mutability":"mutable","name":"l1Head_","nameLocation":"27836:7:164","nodeType":"VariableDeclaration","scope":99044,"src":"27831:12:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"},"typeName":{"id":99031,"nodeType":"UserDefinedTypeName","pathNode":{"id":99030,"name":"Hash","nodeType":"IdentifierPath","referencedDeclaration":103253,"src":"27831:4:164"},"referencedDeclaration":103253,"src":"27831:4:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"visibility":"internal"}],"src":"27830:14:164"},"scope":99927,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":99058,"nodeType":"FunctionDefinition","src":"27942:231:164","nodes":[],"body":{"id":99057,"nodeType":"Block","src":"28009:164:164","nodes":[],"statements":[{"expression":{"id":99055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99050,"name":"extraData_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99048,"src":"28129:10:164","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30783534","id":99052,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28155:4:164","typeDescriptions":{"typeIdentifier":"t_rational_84_by_1","typeString":"int_const 84"},"value":"0x54"},{"hexValue":"30783230","id":99053,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28161:4:164","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_84_by_1","typeString":"int_const 84"},{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"}],"id":99051,"name":"_getArgBytes","nodeType":"Identifier","overloadedDeclarations":[60391,60408],"referencedDeclaration":60408,"src":"28142:12:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (bytes memory)"}},"id":99054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"28142:24:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"28129:37:164","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":99056,"nodeType":"ExpressionStatement","src":"28129:37:164"}]},"baseFunctions":[100307],"documentation":{"id":99045,"nodeType":"StructuredDocumentation","src":"27909:28:164","text":"@inheritdoc IDisputeGame"},"functionSelector":"609d3334","implemented":true,"kind":"function","modifiers":[],"name":"extraData","nameLocation":"27951:9:164","parameters":{"id":99046,"nodeType":"ParameterList","parameters":[],"src":"27960:2:164"},"returnParameters":{"id":99049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99048,"mutability":"mutable","name":"extraData_","nameLocation":"27997:10:164","nodeType":"VariableDeclaration","scope":99058,"src":"27984:23:164","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":99047,"name":"bytes","nodeType":"ElementaryTypeName","src":"27984:5:164","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"27983:25:164"},"scope":99927,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":99086,"nodeType":"FunctionDefinition","src":"28212:213:164","nodes":[],"body":{"id":99085,"nodeType":"Block","src":"28318:107:164","nodes":[],"statements":[{"expression":{"id":99073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99070,"name":"gameType_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99063,"src":"28328:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":99071,"name":"gameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":98997,"src":"28340:8:164","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_GameType_$103271_$","typeString":"function () view returns (GameType)"}},"id":99072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"28340:10:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"src":"28328:22:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"id":99074,"nodeType":"ExpressionStatement","src":"28328:22:164"},{"expression":{"id":99078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99075,"name":"rootClaim_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99066,"src":"28360:10:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":99076,"name":"rootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99027,"src":"28373:9:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_userDefinedValueType$_Claim_$103255_$","typeString":"function () pure returns (Claim)"}},"id":99077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"28373:11:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"src":"28360:24:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"id":99079,"nodeType":"ExpressionStatement","src":"28360:24:164"},{"expression":{"id":99083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99080,"name":"extraData_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99068,"src":"28394:10:164","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":99081,"name":"extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99058,"src":"28407:9:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":99082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"28407:11:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"28394:24:164","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":99084,"nodeType":"ExpressionStatement","src":"28394:24:164"}]},"baseFunctions":[100326],"documentation":{"id":99059,"nodeType":"StructuredDocumentation","src":"28179:28:164","text":"@inheritdoc IDisputeGame"},"functionSelector":"fa24f743","implemented":true,"kind":"function","modifiers":[],"name":"gameData","nameLocation":"28221:8:164","parameters":{"id":99060,"nodeType":"ParameterList","parameters":[],"src":"28229:2:164"},"returnParameters":{"id":99069,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99063,"mutability":"mutable","name":"gameType_","nameLocation":"28264:9:164","nodeType":"VariableDeclaration","scope":99086,"src":"28255:18:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"},"typeName":{"id":99062,"nodeType":"UserDefinedTypeName","pathNode":{"id":99061,"name":"GameType","nodeType":"IdentifierPath","referencedDeclaration":103271,"src":"28255:8:164"},"referencedDeclaration":103271,"src":"28255:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"visibility":"internal"},{"constant":false,"id":99066,"mutability":"mutable","name":"rootClaim_","nameLocation":"28281:10:164","nodeType":"VariableDeclaration","scope":99086,"src":"28275:16:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":99065,"nodeType":"UserDefinedTypeName","pathNode":{"id":99064,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"28275:5:164"},"referencedDeclaration":103255,"src":"28275:5:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"},{"constant":false,"id":99068,"mutability":"mutable","name":"extraData_","nameLocation":"28306:10:164","nodeType":"VariableDeclaration","scope":99086,"src":"28293:23:164","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":99067,"name":"bytes","nodeType":"ElementaryTypeName","src":"28293:5:164","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"28254:63:164"},"scope":99927,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":99215,"nodeType":"FunctionDefinition","src":"28849:2171:164","nodes":[],"body":{"id":99214,"nodeType":"Block","src":"28938:2082:164","nodes":[],"statements":[{"assignments":[99096],"declarations":[{"constant":false,"id":99096,"mutability":"mutable","name":"depth","nameLocation":"28956:5:164","nodeType":"VariableDeclaration","scope":99214,"src":"28948:13:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99095,"name":"uint256","nodeType":"ElementaryTypeName","src":"28948:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":99103,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":99099,"name":"_position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99090,"src":"28972:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":99100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"depth","nodeType":"MemberAccess","referencedDeclaration":100833,"src":"28972:15:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint8_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (uint8)"}},"id":99101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"28972:17:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":99098,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28964:7:164","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":99097,"name":"uint256","nodeType":"ElementaryTypeName","src":"28964:7:164","typeDescriptions":{}}},"id":99102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"28964:26:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28948:42:164"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":99106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":99104,"name":"depth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99096,"src":"29004:5:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":99105,"name":"MAX_GAME_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97723,"src":"29012:14:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29004:22:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":99110,"nodeType":"IfStatement","src":"29000:54:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":99107,"name":"GameDepthExceeded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103153,"src":"29035:17:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":99108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"29035:19:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":99109,"nodeType":"RevertStatement","src":"29028:26:164"}},{"assignments":[99112],"declarations":[{"constant":false,"id":99112,"mutability":"mutable","name":"assumedBaseFee","nameLocation":"29128:14:164","nodeType":"VariableDeclaration","scope":99214,"src":"29120:22:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99111,"name":"uint256","nodeType":"ElementaryTypeName","src":"29120:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":99114,"initialValue":{"hexValue":"323030","id":99113,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29145:8:164","subdenomination":"gwei","typeDescriptions":{"typeIdentifier":"t_rational_200000000000_by_1","typeString":"int_const 200000000000"},"value":"200"},"nodeType":"VariableDeclarationStatement","src":"29120:33:164"},{"assignments":[99116],"declarations":[{"constant":false,"id":99116,"mutability":"mutable","name":"baseGasCharged","nameLocation":"29171:14:164","nodeType":"VariableDeclaration","scope":99214,"src":"29163:22:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99115,"name":"uint256","nodeType":"ElementaryTypeName","src":"29163:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":99118,"initialValue":{"hexValue":"3430305f303030","id":99117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29188:7:164","typeDescriptions":{"typeIdentifier":"t_rational_400000_by_1","typeString":"int_const 400000"},"value":"400_000"},"nodeType":"VariableDeclarationStatement","src":"29163:32:164"},{"assignments":[99120],"declarations":[{"constant":false,"id":99120,"mutability":"mutable","name":"highGasCharged","nameLocation":"29213:14:164","nodeType":"VariableDeclaration","scope":99214,"src":"29205:22:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99119,"name":"uint256","nodeType":"ElementaryTypeName","src":"29205:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":99122,"initialValue":{"hexValue":"3230305f3030305f303030","id":99121,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29230:11:164","typeDescriptions":{"typeIdentifier":"t_rational_200000000_by_1","typeString":"int_const 200000000"},"value":"200_000_000"},"nodeType":"VariableDeclarationStatement","src":"29205:36:164"},{"assignments":[99124],"declarations":[{"constant":false,"id":99124,"mutability":"mutable","name":"a","nameLocation":"29993:1:164","nodeType":"VariableDeclaration","scope":99214,"src":"29985:9:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99123,"name":"uint256","nodeType":"ElementaryTypeName","src":"29985:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":99128,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":99127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":99125,"name":"highGasCharged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99120,"src":"29997:14:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":99126,"name":"baseGasCharged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99116,"src":"30014:14:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29997:31:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29985:43:164"},{"assignments":[99130],"declarations":[{"constant":false,"id":99130,"mutability":"mutable","name":"b","nameLocation":"30046:1:164","nodeType":"VariableDeclaration","scope":99214,"src":"30038:9:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99129,"name":"uint256","nodeType":"ElementaryTypeName","src":"30038:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":99133,"initialValue":{"expression":{"id":99131,"name":"FixedPointMathLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62288,"src":"30050:17:164","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPointMathLib_$62288_$","typeString":"type(library FixedPointMathLib)"}},"id":99132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"WAD","nodeType":"MemberAccess","referencedDeclaration":61009,"src":"30050:21:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30038:33:164"},{"assignments":[99135],"declarations":[{"constant":false,"id":99135,"mutability":"mutable","name":"c","nameLocation":"30089:1:164","nodeType":"VariableDeclaration","scope":99214,"src":"30081:9:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99134,"name":"uint256","nodeType":"ElementaryTypeName","src":"30081:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":99140,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":99139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":99136,"name":"MAX_GAME_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97723,"src":"30093:14:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":99137,"name":"FixedPointMathLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62288,"src":"30110:17:164","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPointMathLib_$62288_$","typeString":"type(library FixedPointMathLib)"}},"id":99138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"WAD","nodeType":"MemberAccess","referencedDeclaration":61009,"src":"30110:21:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30093:38:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30081:50:164"},{"assignments":[99142],"declarations":[{"constant":false,"id":99142,"mutability":"mutable","name":"lnA","nameLocation":"30236:3:164","nodeType":"VariableDeclaration","scope":99214,"src":"30228:11:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99141,"name":"uint256","nodeType":"ElementaryTypeName","src":"30228:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":99156,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":99152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":99149,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99124,"src":"30281:1:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":99150,"name":"FixedPointMathLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62288,"src":"30285:17:164","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPointMathLib_$62288_$","typeString":"type(library FixedPointMathLib)"}},"id":99151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"WAD","nodeType":"MemberAccess","referencedDeclaration":61009,"src":"30285:21:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30281:25:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":99148,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30274:6:164","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":99147,"name":"int256","nodeType":"ElementaryTypeName","src":"30274:6:164","typeDescriptions":{}}},"id":99153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"30274:33:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"expression":{"id":99145,"name":"FixedPointMathLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62288,"src":"30250:17:164","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPointMathLib_$62288_$","typeString":"type(library FixedPointMathLib)"}},"id":99146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"lnWad","nodeType":"MemberAccess","referencedDeclaration":61377,"src":"30250:23:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":99154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"30250:58:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":99144,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30242:7:164","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":99143,"name":"uint256","nodeType":"ElementaryTypeName","src":"30242:7:164","typeDescriptions":{}}},"id":99155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"30242:67:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30228:81:164"},{"assignments":[99158],"declarations":[{"constant":false,"id":99158,"mutability":"mutable","name":"bOverC","nameLocation":"30394:6:164","nodeType":"VariableDeclaration","scope":99214,"src":"30386:14:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99157,"name":"uint256","nodeType":"ElementaryTypeName","src":"30386:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":99164,"initialValue":{"arguments":[{"id":99161,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99130,"src":"30428:1:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":99162,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99135,"src":"30431:1:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":99159,"name":"FixedPointMathLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62288,"src":"30403:17:164","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPointMathLib_$62288_$","typeString":"type(library FixedPointMathLib)"}},"id":99160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"divWad","nodeType":"MemberAccess","referencedDeclaration":61093,"src":"30403:24:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":99163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"30403:30:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30386:47:164"},{"assignments":[99166],"declarations":[{"constant":false,"id":99166,"mutability":"mutable","name":"numerator","nameLocation":"30575:9:164","nodeType":"VariableDeclaration","scope":99214,"src":"30567:17:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99165,"name":"uint256","nodeType":"ElementaryTypeName","src":"30567:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":99172,"initialValue":{"arguments":[{"id":99169,"name":"lnA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99142,"src":"30612:3:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":99170,"name":"bOverC","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99158,"src":"30617:6:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":99167,"name":"FixedPointMathLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62288,"src":"30587:17:164","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPointMathLib_$62288_$","typeString":"type(library FixedPointMathLib)"}},"id":99168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mulWad","nodeType":"MemberAccess","referencedDeclaration":61021,"src":"30587:24:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":99171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"30587:37:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30567:57:164"},{"assignments":[99174],"declarations":[{"constant":false,"id":99174,"mutability":"mutable","name":"base","nameLocation":"30641:4:164","nodeType":"VariableDeclaration","scope":99214,"src":"30634:11:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":99173,"name":"int256","nodeType":"ElementaryTypeName","src":"30634:6:164","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":99182,"initialValue":{"arguments":[{"arguments":[{"id":99179,"name":"numerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99166,"src":"30680:9:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":99178,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30673:6:164","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":99177,"name":"int256","nodeType":"ElementaryTypeName","src":"30673:6:164","typeDescriptions":{}}},"id":99180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"30673:17:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"expression":{"id":99175,"name":"FixedPointMathLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62288,"src":"30648:17:164","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPointMathLib_$62288_$","typeString":"type(library FixedPointMathLib)"}},"id":99176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"expWad","nodeType":"MemberAccess","referencedDeclaration":61367,"src":"30648:24:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":99181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"30648:43:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"30634:57:164"},{"assignments":[99184],"declarations":[{"constant":false,"id":99184,"mutability":"mutable","name":"rawGas","nameLocation":"30753:6:164","nodeType":"VariableDeclaration","scope":99214,"src":"30746:13:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":99183,"name":"int256","nodeType":"ElementaryTypeName","src":"30746:6:164","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":99196,"initialValue":{"arguments":[{"id":99187,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99174,"src":"30787:4:164","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":99193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":99190,"name":"depth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99096,"src":"30800:5:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":99191,"name":"FixedPointMathLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62288,"src":"30808:17:164","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPointMathLib_$62288_$","typeString":"type(library FixedPointMathLib)"}},"id":99192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"WAD","nodeType":"MemberAccess","referencedDeclaration":61009,"src":"30808:21:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30800:29:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":99189,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30793:6:164","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":99188,"name":"int256","nodeType":"ElementaryTypeName","src":"30793:6:164","typeDescriptions":{}}},"id":99194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"30793:37:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"},{"typeIdentifier":"t_int256","typeString":"int256"}],"expression":{"id":99185,"name":"FixedPointMathLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62288,"src":"30762:17:164","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPointMathLib_$62288_$","typeString":"type(library FixedPointMathLib)"}},"id":99186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"powWad","nodeType":"MemberAccess","referencedDeclaration":61178,"src":"30762:24:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$","typeString":"function (int256,int256) pure returns (int256)"}},"id":99195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"30762:69:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"30746:85:164"},{"assignments":[99198],"declarations":[{"constant":false,"id":99198,"mutability":"mutable","name":"requiredGas","nameLocation":"30849:11:164","nodeType":"VariableDeclaration","scope":99214,"src":"30841:19:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99197,"name":"uint256","nodeType":"ElementaryTypeName","src":"30841:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":99207,"initialValue":{"arguments":[{"id":99201,"name":"baseGasCharged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99116,"src":"30888:14:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":99204,"name":"rawGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99184,"src":"30912:6:164","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":99203,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30904:7:164","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":99202,"name":"uint256","nodeType":"ElementaryTypeName","src":"30904:7:164","typeDescriptions":{}}},"id":99205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"30904:15:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":99199,"name":"FixedPointMathLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62288,"src":"30863:17:164","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPointMathLib_$62288_$","typeString":"type(library FixedPointMathLib)"}},"id":99200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mulWad","nodeType":"MemberAccess","referencedDeclaration":61021,"src":"30863:24:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":99206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"30863:57:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30841:79:164"},{"expression":{"id":99212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99208,"name":"requiredBond_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99093,"src":"30969:13:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":99211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":99209,"name":"assumedBaseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99112,"src":"30985:14:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":99210,"name":"requiredGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99198,"src":"31002:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30985:28:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30969:44:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":99213,"nodeType":"ExpressionStatement","src":"30969:44:164"}]},"documentation":{"id":99087,"nodeType":"StructuredDocumentation","src":"28639:205:164","text":"@notice Returns the required bond for a given move kind.\n @param _position The position of the bonded interaction.\n @return requiredBond_ The required ETH bond for the given move, in wei."},"functionSelector":"c395e1ca","implemented":true,"kind":"function","modifiers":[],"name":"getRequiredBond","nameLocation":"28858:15:164","parameters":{"id":99091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99090,"mutability":"mutable","name":"_position","nameLocation":"28883:9:164","nodeType":"VariableDeclaration","scope":99215,"src":"28874:18:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},"typeName":{"id":99089,"nodeType":"UserDefinedTypeName","pathNode":{"id":99088,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":103269,"src":"28874:8:164"},"referencedDeclaration":103269,"src":"28874:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"visibility":"internal"}],"src":"28873:20:164"},"returnParameters":{"id":99094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99093,"mutability":"mutable","name":"requiredBond_","nameLocation":"28923:13:164","nodeType":"VariableDeclaration","scope":99215,"src":"28915:21:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99092,"name":"uint256","nodeType":"ElementaryTypeName","src":"28915:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"28914:23:164"},"scope":99927,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":99264,"nodeType":"FunctionDefinition","src":"31160:671:164","nodes":[],"body":{"id":99263,"nodeType":"Block","src":"31210:621:164","nodes":[],"statements":[{"assignments":[99222],"declarations":[{"constant":false,"id":99222,"mutability":"mutable","name":"recipientCredit","nameLocation":"31315:15:164","nodeType":"VariableDeclaration","scope":99263,"src":"31307:23:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99221,"name":"uint256","nodeType":"ElementaryTypeName","src":"31307:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":99226,"initialValue":{"baseExpression":{"id":99223,"name":"credit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97790,"src":"31333:6:164","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":99225,"indexExpression":{"id":99224,"name":"_recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99218,"src":"31340:10:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31333:18:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"31307:44:164"},{"expression":{"id":99231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":99227,"name":"credit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97790,"src":"31361:6:164","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":99229,"indexExpression":{"id":99228,"name":"_recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99218,"src":"31368:10:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"31361:18:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":99230,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31382:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"31361:22:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":99232,"nodeType":"ExpressionStatement","src":"31361:22:164"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":99235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":99233,"name":"recipientCredit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99222,"src":"31457:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":99234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31476:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"31457:20:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":99240,"nodeType":"IfStatement","src":"31453:75:164","trueBody":{"id":99239,"nodeType":"Block","src":"31479:49:164","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":99236,"name":"NoCreditToClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103126,"src":"31500:15:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":99237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"31500:17:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":99238,"nodeType":"RevertStatement","src":"31493:24:164"}]}},{"expression":{"arguments":[{"id":99244,"name":"_recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99218,"src":"31619:10:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":99245,"name":"recipientCredit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99222,"src":"31631:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":99241,"name":"WETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97742,"src":"31605:4:164","typeDescriptions":{"typeIdentifier":"t_contract$_IDelayedWETH_$100239","typeString":"contract IDelayedWETH"}},"id":99243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"withdraw","nodeType":"MemberAccess","referencedDeclaration":100224,"src":"31605:13:164","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":99246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"31605:42:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":99247,"nodeType":"ExpressionStatement","src":"31605:42:164"},{"assignments":[99249,null],"declarations":[{"constant":false,"id":99249,"mutability":"mutable","name":"success","nameLocation":"31713:7:164","nodeType":"VariableDeclaration","scope":99263,"src":"31708:12:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":99248,"name":"bool","nodeType":"ElementaryTypeName","src":"31708:4:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":99256,"initialValue":{"arguments":[{"hexValue":"","id":99254,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"31767:5:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":99250,"name":"_recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99218,"src":"31725:10:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":99251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"call","nodeType":"MemberAccess","src":"31725:15:164","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":99253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":99252,"name":"recipientCredit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99222,"src":"31749:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"31725:41:164","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":99255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"31725:48:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"31707:66:164"},{"condition":{"id":99258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"31787:8:164","subExpression":{"id":99257,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99249,"src":"31788:7:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":99262,"nodeType":"IfStatement","src":"31783:41:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":99259,"name":"BondTransferFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103129,"src":"31804:18:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":99260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"31804:20:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":99261,"nodeType":"RevertStatement","src":"31797:27:164"}}]},"documentation":{"id":99216,"nodeType":"StructuredDocumentation","src":"31026:129:164","text":"@notice Claim the credit belonging to the recipient address.\n @param _recipient The owner and recipient of the credit."},"functionSelector":"60e27464","implemented":true,"kind":"function","modifiers":[],"name":"claimCredit","nameLocation":"31169:11:164","parameters":{"id":99219,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99218,"mutability":"mutable","name":"_recipient","nameLocation":"31189:10:164","nodeType":"VariableDeclaration","scope":99264,"src":"31181:18:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":99217,"name":"address","nodeType":"ElementaryTypeName","src":"31181:7:164","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"31180:20:164"},"returnParameters":{"id":99220,"nodeType":"ParameterList","parameters":[],"src":"31210:0:164"},"scope":99927,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":99348,"nodeType":"FunctionDefinition","src":"32166:1011:164","nodes":[],"body":{"id":99347,"nodeType":"Block","src":"32259:918:164","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"},"id":99276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":99273,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97777,"src":"32381:6:164","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":99274,"name":"GameStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103277,"src":"32391:10:164","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_GameStatus_$103277_$","typeString":"type(enum GameStatus)"}},"id":99275,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"IN_PROGRESS","nodeType":"MemberAccess","referencedDeclaration":103274,"src":"32391:22:164","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"src":"32381:32:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":99281,"nodeType":"IfStatement","src":"32377:89:164","trueBody":{"id":99280,"nodeType":"Block","src":"32415:51:164","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":99277,"name":"GameNotInProgress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103144,"src":"32436:17:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":99278,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"32436:19:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":99279,"nodeType":"RevertStatement","src":"32429:26:164"}]}},{"assignments":[99284],"declarations":[{"constant":false,"id":99284,"mutability":"mutable","name":"subgameRootClaim","nameLocation":"32535:16:164","nodeType":"VariableDeclaration","scope":99347,"src":"32517:34:164","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"},"typeName":{"id":99283,"nodeType":"UserDefinedTypeName","pathNode":{"id":99282,"name":"ClaimData","nodeType":"IdentifierPath","referencedDeclaration":100523,"src":"32517:9:164"},"referencedDeclaration":100523,"src":"32517:9:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"}},"visibility":"internal"}],"id":99288,"initialValue":{"baseExpression":{"id":99285,"name":"claimData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97785,"src":"32554:9:164","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ClaimData_$100523_storage_$dyn_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref[] storage ref"}},"id":99287,"indexExpression":{"id":99286,"name":"_claimIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99267,"src":"32564:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"32554:22:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"32517:59:164"},{"assignments":[99291],"declarations":[{"constant":false,"id":99291,"mutability":"mutable","name":"parentClock","nameLocation":"32664:11:164","nodeType":"VariableDeclaration","scope":99347,"src":"32658:17:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Clock_$103267","typeString":"Clock"},"typeName":{"id":99290,"nodeType":"UserDefinedTypeName","pathNode":{"id":99289,"name":"Clock","nodeType":"IdentifierPath","referencedDeclaration":103267,"src":"32658:5:164"},"referencedDeclaration":103267,"src":"32658:5:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Clock_$103267","typeString":"Clock"}},"visibility":"internal"}],"id":99292,"nodeType":"VariableDeclarationStatement","src":"32658:17:164"},{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":99300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":99293,"name":"subgameRootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99284,"src":"32689:16:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99294,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"parentIndex","nodeType":"MemberAccess","referencedDeclaration":100507,"src":"32689:28:164","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"arguments":[{"id":99297,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32726:6:164","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":99296,"name":"uint32","nodeType":"ElementaryTypeName","src":"32726:6:164","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"}],"id":99295,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"32721:4:164","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":99298,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"32721:12:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint32","typeString":"type(uint32)"}},"id":99299,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"32721:16:164","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"32689:48:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":99310,"nodeType":"IfStatement","src":"32685:138:164","trueBody":{"id":99309,"nodeType":"Block","src":"32739:84:164","statements":[{"expression":{"id":99307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99301,"name":"parentClock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99291,"src":"32753:11:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Clock_$103267","typeString":"Clock"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":99302,"name":"claimData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97785,"src":"32767:9:164","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ClaimData_$100523_storage_$dyn_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref[] storage ref"}},"id":99305,"indexExpression":{"expression":{"id":99303,"name":"subgameRootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99284,"src":"32777:16:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99304,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"parentIndex","nodeType":"MemberAccess","referencedDeclaration":100507,"src":"32777:28:164","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"32767:39:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref"}},"id":99306,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"clock","nodeType":"MemberAccess","referencedDeclaration":100522,"src":"32767:45:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Clock_$103267","typeString":"Clock"}},"src":"32753:59:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Clock_$103267","typeString":"Clock"}},"id":99308,"nodeType":"ExpressionStatement","src":"32753:59:164"}]}},{"assignments":[99312],"declarations":[{"constant":false,"id":99312,"mutability":"mutable","name":"challengeDuration","nameLocation":"32917:17:164","nodeType":"VariableDeclaration","scope":99347,"src":"32910:24:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":99311,"name":"uint64","nodeType":"ElementaryTypeName","src":"32910:6:164","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"id":99332,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":99330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":99315,"name":"parentClock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99291,"src":"32956:11:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Clock_$103267","typeString":"Clock"}},"id":99316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"duration","nodeType":"MemberAccess","referencedDeclaration":101049,"src":"32956:20:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Clock_$103267_$returns$_t_userDefinedValueType$_Duration_$103263_$bound_to$_t_userDefinedValueType$_Clock_$103267_$","typeString":"function (Clock) pure returns (Duration)"}},"id":99317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"32956:22:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"id":99318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101098,"src":"32956:26:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Duration_$103263_$returns$_t_uint64_$bound_to$_t_userDefinedValueType$_Duration_$103263_$","typeString":"function (Duration) pure returns (uint64)"}},"id":99319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"32956:28:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":99328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":99320,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"32988:5:164","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":99321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"32988:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":99322,"name":"subgameRootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99284,"src":"33006:16:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99323,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"clock","nodeType":"MemberAccess","referencedDeclaration":100522,"src":"33006:22:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Clock_$103267","typeString":"Clock"}},"id":99324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":101061,"src":"33006:32:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Clock_$103267_$returns$_t_userDefinedValueType$_Timestamp_$103261_$bound_to$_t_userDefinedValueType$_Clock_$103267_$","typeString":"function (Clock) pure returns (Timestamp)"}},"id":99325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"33006:34:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"}},"id":99326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101124,"src":"33006:38:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Timestamp_$103261_$returns$_t_uint64_$bound_to$_t_userDefinedValueType$_Timestamp_$103261_$","typeString":"function (Timestamp) pure returns (uint64)"}},"id":99327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"33006:40:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"32988:58:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":99329,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"32987:60:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32956:91:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":99314,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32949:6:164","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":99313,"name":"uint64","nodeType":"ElementaryTypeName","src":"32949:6:164","typeDescriptions":{}}},"id":99331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"32949:99:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"VariableDeclarationStatement","src":"32910:138:164"},{"expression":{"id":99345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99333,"name":"duration_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99271,"src":"33058:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":99338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":99334,"name":"challengeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99312,"src":"33070:17:164","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":99335,"name":"MAX_CLOCK_DURATION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97730,"src":"33090:18:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"id":99336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101098,"src":"33090:22:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Duration_$103263_$returns$_t_uint64_$bound_to$_t_userDefinedValueType$_Duration_$103263_$","typeString":"function (Duration) pure returns (uint64)"}},"id":99337,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"33090:24:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"33070:44:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"id":99342,"name":"challengeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99312,"src":"33152:17:164","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"expression":{"id":99340,"name":"Duration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103263,"src":"33138:8:164","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Duration_$103263_$","typeString":"type(Duration)"}},"id":99341,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","src":"33138:13:164","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_uint64_$returns$_t_userDefinedValueType$_Duration_$103263_$","typeString":"function (uint64) pure returns (Duration)"}},"id":99343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"33138:32:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"id":99344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"33070:100:164","trueExpression":{"id":99339,"name":"MAX_CLOCK_DURATION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97730,"src":"33117:18:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"src":"33058:112:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"id":99346,"nodeType":"ExpressionStatement","src":"33058:112:164"}]},"documentation":{"id":99265,"nodeType":"StructuredDocumentation","src":"31837:324:164","text":"@notice Returns the amount of time elapsed on the potential challenger to `_claimIndex`'s chess clock. Maxes\n out at `MAX_CLOCK_DURATION`.\n @param _claimIndex The index of the subgame root claim.\n @return duration_ The time elapsed on the potential challenger to `_claimIndex`'s chess clock."},"functionSelector":"bd8da956","implemented":true,"kind":"function","modifiers":[],"name":"getChallengerDuration","nameLocation":"32175:21:164","parameters":{"id":99268,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99267,"mutability":"mutable","name":"_claimIndex","nameLocation":"32205:11:164","nodeType":"VariableDeclaration","scope":99348,"src":"32197:19:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99266,"name":"uint256","nodeType":"ElementaryTypeName","src":"32197:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32196:21:164"},"returnParameters":{"id":99272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99271,"mutability":"mutable","name":"duration_","nameLocation":"32248:9:164","nodeType":"VariableDeclaration","scope":99348,"src":"32239:18:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"},"typeName":{"id":99270,"nodeType":"UserDefinedTypeName","pathNode":{"id":99269,"name":"Duration","nodeType":"IdentifierPath","referencedDeclaration":103263,"src":"32239:8:164"},"referencedDeclaration":103263,"src":"32239:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"visibility":"internal"}],"src":"32238:20:164"},"scope":99927,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":99360,"nodeType":"FunctionDefinition","src":"33244:101:164","nodes":[],"body":{"id":99359,"nodeType":"Block","src":"33305:40:164","nodes":[],"statements":[{"expression":{"id":99357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99354,"name":"len_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99352,"src":"33315:4:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":99355,"name":"claimData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97785,"src":"33322:9:164","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ClaimData_$100523_storage_$dyn_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref[] storage ref"}},"id":99356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"33322:16:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33315:23:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":99358,"nodeType":"ExpressionStatement","src":"33315:23:164"}]},"documentation":{"id":99349,"nodeType":"StructuredDocumentation","src":"33183:56:164","text":"@notice Returns the length of the `claimData` array."},"functionSelector":"8980e0cc","implemented":true,"kind":"function","modifiers":[],"name":"claimDataLen","nameLocation":"33253:12:164","parameters":{"id":99350,"nodeType":"ParameterList","parameters":[],"src":"33265:2:164"},"returnParameters":{"id":99353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99352,"mutability":"mutable","name":"len_","nameLocation":"33299:4:164","nodeType":"VariableDeclaration","scope":99360,"src":"33291:12:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99351,"name":"uint256","nodeType":"ElementaryTypeName","src":"33291:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33290:14:164"},"scope":99927,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":99372,"nodeType":"FunctionDefinition","src":"33631:130:164","nodes":[],"body":{"id":99371,"nodeType":"Block","src":"33707:54:164","nodes":[],"statements":[{"expression":{"id":99369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99367,"name":"absolutePrestate_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99365,"src":"33717:17:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":99368,"name":"ABSOLUTE_PRESTATE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97720,"src":"33737:17:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"src":"33717:37:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"id":99370,"nodeType":"ExpressionStatement","src":"33717:37:164"}]},"documentation":{"id":99361,"nodeType":"StructuredDocumentation","src":"33559:67:164","text":"@notice Returns the absolute prestate of the instruction trace."},"functionSelector":"8d450a95","implemented":true,"kind":"function","modifiers":[],"name":"absolutePrestate","nameLocation":"33640:16:164","parameters":{"id":99362,"nodeType":"ParameterList","parameters":[],"src":"33656:2:164"},"returnParameters":{"id":99366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99365,"mutability":"mutable","name":"absolutePrestate_","nameLocation":"33688:17:164","nodeType":"VariableDeclaration","scope":99372,"src":"33682:23:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":99364,"nodeType":"UserDefinedTypeName","pathNode":{"id":99363,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"33682:5:164"},"referencedDeclaration":103255,"src":"33682:5:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"}],"src":"33681:25:164"},"scope":99927,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":99383,"nodeType":"FunctionDefinition","src":"33811:117:164","nodes":[],"body":{"id":99382,"nodeType":"Block","src":"33881:47:164","nodes":[],"statements":[{"expression":{"id":99380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99378,"name":"maxGameDepth_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99376,"src":"33891:13:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":99379,"name":"MAX_GAME_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97723,"src":"33907:14:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33891:30:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":99381,"nodeType":"ExpressionStatement","src":"33891:30:164"}]},"documentation":{"id":99373,"nodeType":"StructuredDocumentation","src":"33767:39:164","text":"@notice Returns the max game depth."},"functionSelector":"fa315aa9","implemented":true,"kind":"function","modifiers":[],"name":"maxGameDepth","nameLocation":"33820:12:164","parameters":{"id":99374,"nodeType":"ParameterList","parameters":[],"src":"33832:2:164"},"returnParameters":{"id":99377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99376,"mutability":"mutable","name":"maxGameDepth_","nameLocation":"33866:13:164","nodeType":"VariableDeclaration","scope":99383,"src":"33858:21:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99375,"name":"uint256","nodeType":"ElementaryTypeName","src":"33858:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33857:23:164"},"scope":99927,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":99394,"nodeType":"FunctionDefinition","src":"33975:108:164","nodes":[],"body":{"id":99393,"nodeType":"Block","src":"34041:42:164","nodes":[],"statements":[{"expression":{"id":99391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99389,"name":"splitDepth_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99387,"src":"34051:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":99390,"name":"SPLIT_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97726,"src":"34065:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34051:25:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":99392,"nodeType":"ExpressionStatement","src":"34051:25:164"}]},"documentation":{"id":99384,"nodeType":"StructuredDocumentation","src":"33934:36:164","text":"@notice Returns the split depth."},"functionSelector":"ec5e6308","implemented":true,"kind":"function","modifiers":[],"name":"splitDepth","nameLocation":"33984:10:164","parameters":{"id":99385,"nodeType":"ParameterList","parameters":[],"src":"33994:2:164"},"returnParameters":{"id":99388,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99387,"mutability":"mutable","name":"splitDepth_","nameLocation":"34028:11:164","nodeType":"VariableDeclaration","scope":99394,"src":"34020:19:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99386,"name":"uint256","nodeType":"ElementaryTypeName","src":"34020:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34019:21:164"},"scope":99927,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":99406,"nodeType":"FunctionDefinition","src":"34137:134:164","nodes":[],"body":{"id":99405,"nodeType":"Block","src":"34216:55:164","nodes":[],"statements":[{"expression":{"id":99403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99401,"name":"maxClockDuration_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99399,"src":"34226:17:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":99402,"name":"MAX_CLOCK_DURATION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97730,"src":"34246:18:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"src":"34226:38:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"id":99404,"nodeType":"ExpressionStatement","src":"34226:38:164"}]},"documentation":{"id":99395,"nodeType":"StructuredDocumentation","src":"34089:43:164","text":"@notice Returns the max clock duration."},"functionSelector":"dabd396d","implemented":true,"kind":"function","modifiers":[],"name":"maxClockDuration","nameLocation":"34146:16:164","parameters":{"id":99396,"nodeType":"ParameterList","parameters":[],"src":"34162:2:164"},"returnParameters":{"id":99400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99399,"mutability":"mutable","name":"maxClockDuration_","nameLocation":"34197:17:164","nodeType":"VariableDeclaration","scope":99406,"src":"34188:26:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"},"typeName":{"id":99398,"nodeType":"UserDefinedTypeName","pathNode":{"id":99397,"name":"Duration","nodeType":"IdentifierPath","referencedDeclaration":103263,"src":"34188:8:164"},"referencedDeclaration":103263,"src":"34188:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"visibility":"internal"}],"src":"34187:28:164"},"scope":99927,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":99418,"nodeType":"FunctionDefinition","src":"34331:125:164","nodes":[],"body":{"id":99417,"nodeType":"Block","src":"34406:50:164","nodes":[],"statements":[{"expression":{"id":99415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99413,"name":"clockExtension_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99411,"src":"34416:15:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":99414,"name":"CLOCK_EXTENSION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97753,"src":"34434:15:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"src":"34416:33:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"id":99416,"nodeType":"ExpressionStatement","src":"34416:33:164"}]},"documentation":{"id":99407,"nodeType":"StructuredDocumentation","src":"34277:49:164","text":"@notice Returns the clock extension constant."},"functionSelector":"6b6716c0","implemented":true,"kind":"function","modifiers":[],"name":"clockExtension","nameLocation":"34340:14:164","parameters":{"id":99408,"nodeType":"ParameterList","parameters":[],"src":"34354:2:164"},"returnParameters":{"id":99412,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99411,"mutability":"mutable","name":"clockExtension_","nameLocation":"34389:15:164","nodeType":"VariableDeclaration","scope":99418,"src":"34380:24:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"},"typeName":{"id":99410,"nodeType":"UserDefinedTypeName","pathNode":{"id":99409,"name":"Duration","nodeType":"IdentifierPath","referencedDeclaration":103263,"src":"34380:8:164"},"referencedDeclaration":103263,"src":"34380:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Duration_$103263","typeString":"Duration"}},"visibility":"internal"}],"src":"34379:26:164"},"scope":99927,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":99430,"nodeType":"FunctionDefinition","src":"34509:79:164","nodes":[],"body":{"id":99429,"nodeType":"Block","src":"34563:25:164","nodes":[],"statements":[{"expression":{"id":99427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99425,"name":"vm_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99423,"src":"34573:3:164","typeDescriptions":{"typeIdentifier":"t_contract$_IBigStepper_$100171","typeString":"contract IBigStepper"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":99426,"name":"VM","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97734,"src":"34579:2:164","typeDescriptions":{"typeIdentifier":"t_contract$_IBigStepper_$100171","typeString":"contract IBigStepper"}},"src":"34573:8:164","typeDescriptions":{"typeIdentifier":"t_contract$_IBigStepper_$100171","typeString":"contract IBigStepper"}},"id":99428,"nodeType":"ExpressionStatement","src":"34573:8:164"}]},"documentation":{"id":99419,"nodeType":"StructuredDocumentation","src":"34462:42:164","text":"@notice Returns the address of the VM."},"functionSelector":"3a768463","implemented":true,"kind":"function","modifiers":[],"name":"vm","nameLocation":"34518:2:164","parameters":{"id":99420,"nodeType":"ParameterList","parameters":[],"src":"34520:2:164"},"returnParameters":{"id":99424,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99423,"mutability":"mutable","name":"vm_","nameLocation":"34558:3:164","nodeType":"VariableDeclaration","scope":99430,"src":"34546:15:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBigStepper_$100171","typeString":"contract IBigStepper"},"typeName":{"id":99422,"nodeType":"UserDefinedTypeName","pathNode":{"id":99421,"name":"IBigStepper","nodeType":"IdentifierPath","referencedDeclaration":100171,"src":"34546:11:164"},"referencedDeclaration":100171,"src":"34546:11:164","typeDescriptions":{"typeIdentifier":"t_contract$_IBigStepper_$100171","typeString":"contract IBigStepper"}},"visibility":"internal"}],"src":"34545:17:164"},"scope":99927,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":99442,"nodeType":"FunctionDefinition","src":"34653:88:164","nodes":[],"body":{"id":99441,"nodeType":"Block","src":"34712:29:164","nodes":[],"statements":[{"expression":{"id":99439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99437,"name":"weth_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99435,"src":"34722:5:164","typeDescriptions":{"typeIdentifier":"t_contract$_IDelayedWETH_$100239","typeString":"contract IDelayedWETH"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":99438,"name":"WETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97742,"src":"34730:4:164","typeDescriptions":{"typeIdentifier":"t_contract$_IDelayedWETH_$100239","typeString":"contract IDelayedWETH"}},"src":"34722:12:164","typeDescriptions":{"typeIdentifier":"t_contract$_IDelayedWETH_$100239","typeString":"contract IDelayedWETH"}},"id":99440,"nodeType":"ExpressionStatement","src":"34722:12:164"}]},"documentation":{"id":99431,"nodeType":"StructuredDocumentation","src":"34594:54:164","text":"@notice Returns the WETH contract for holding ETH."},"functionSelector":"3fc8cef3","implemented":true,"kind":"function","modifiers":[],"name":"weth","nameLocation":"34662:4:164","parameters":{"id":99432,"nodeType":"ParameterList","parameters":[],"src":"34666:2:164"},"returnParameters":{"id":99436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99435,"mutability":"mutable","name":"weth_","nameLocation":"34705:5:164","nodeType":"VariableDeclaration","scope":99442,"src":"34692:18:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IDelayedWETH_$100239","typeString":"contract IDelayedWETH"},"typeName":{"id":99434,"nodeType":"UserDefinedTypeName","pathNode":{"id":99433,"name":"IDelayedWETH","nodeType":"IdentifierPath","referencedDeclaration":100239,"src":"34692:12:164"},"referencedDeclaration":100239,"src":"34692:12:164","typeDescriptions":{"typeIdentifier":"t_contract$_IDelayedWETH_$100239","typeString":"contract IDelayedWETH"}},"visibility":"internal"}],"src":"34691:20:164"},"scope":99927,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":99454,"nodeType":"FunctionDefinition","src":"34807:136:164","nodes":[],"body":{"id":99453,"nodeType":"Block","src":"34893:50:164","nodes":[],"statements":[{"expression":{"id":99451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99449,"name":"registry_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99447,"src":"34903:9:164","typeDescriptions":{"typeIdentifier":"t_contract$_IAnchorStateRegistry_$100146","typeString":"contract IAnchorStateRegistry"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":99450,"name":"ANCHOR_STATE_REGISTRY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97746,"src":"34915:21:164","typeDescriptions":{"typeIdentifier":"t_contract$_IAnchorStateRegistry_$100146","typeString":"contract IAnchorStateRegistry"}},"src":"34903:33:164","typeDescriptions":{"typeIdentifier":"t_contract$_IAnchorStateRegistry_$100146","typeString":"contract IAnchorStateRegistry"}},"id":99452,"nodeType":"ExpressionStatement","src":"34903:33:164"}]},"documentation":{"id":99443,"nodeType":"StructuredDocumentation","src":"34747:55:164","text":"@notice Returns the anchor state registry contract."},"functionSelector":"5c0cba33","implemented":true,"kind":"function","modifiers":[],"name":"anchorStateRegistry","nameLocation":"34816:19:164","parameters":{"id":99444,"nodeType":"ParameterList","parameters":[],"src":"34835:2:164"},"returnParameters":{"id":99448,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99447,"mutability":"mutable","name":"registry_","nameLocation":"34882:9:164","nodeType":"VariableDeclaration","scope":99454,"src":"34861:30:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAnchorStateRegistry_$100146","typeString":"contract IAnchorStateRegistry"},"typeName":{"id":99446,"nodeType":"UserDefinedTypeName","pathNode":{"id":99445,"name":"IAnchorStateRegistry","nodeType":"IdentifierPath","referencedDeclaration":100146,"src":"34861:20:164"},"referencedDeclaration":100146,"src":"34861:20:164","typeDescriptions":{"typeIdentifier":"t_contract$_IAnchorStateRegistry_$100146","typeString":"contract IAnchorStateRegistry"}},"visibility":"internal"}],"src":"34860:32:164"},"scope":99927,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":99465,"nodeType":"FunctionDefinition","src":"35032:105:164","nodes":[],"body":{"id":99464,"nodeType":"Block","src":"35096:41:164","nodes":[],"statements":[{"expression":{"id":99462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99460,"name":"l2ChainId_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99458,"src":"35106:10:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":99461,"name":"L2_CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97749,"src":"35119:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35106:24:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":99463,"nodeType":"ExpressionStatement","src":"35106:24:164"}]},"documentation":{"id":99455,"nodeType":"StructuredDocumentation","src":"34949:78:164","text":"@notice Returns the chain ID of the L2 network this contract argues about."},"functionSelector":"d6ae3cd5","implemented":true,"kind":"function","modifiers":[],"name":"l2ChainId","nameLocation":"35041:9:164","parameters":{"id":99456,"nodeType":"ParameterList","parameters":[],"src":"35050:2:164"},"returnParameters":{"id":99459,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99458,"mutability":"mutable","name":"l2ChainId_","nameLocation":"35084:10:164","nodeType":"VariableDeclaration","scope":99465,"src":"35076:18:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99457,"name":"uint256","nodeType":"ElementaryTypeName","src":"35076:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"35075:20:164"},"scope":99927,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":99493,"nodeType":"FunctionDefinition","src":"35528:361:164","nodes":[],"body":{"id":99492,"nodeType":"Block","src":"35609:280:164","nodes":[],"statements":[{"assignments":[99475],"declarations":[{"constant":false,"id":99475,"mutability":"mutable","name":"bond","nameLocation":"35714:4:164","nodeType":"VariableDeclaration","scope":99492,"src":"35706:12:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99474,"name":"uint256","nodeType":"ElementaryTypeName","src":"35706:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":99478,"initialValue":{"expression":{"id":99476,"name":"_bonded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99471,"src":"35721:7:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99477,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"bond","nodeType":"MemberAccess","referencedDeclaration":100513,"src":"35721:12:164","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"35706:27:164"},{"expression":{"id":99483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":99479,"name":"credit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97790,"src":"35788:6:164","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":99481,"indexExpression":{"id":99480,"name":"_recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99468,"src":"35795:10:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"35788:18:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":99482,"name":"bond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99475,"src":"35810:4:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35788:26:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":99484,"nodeType":"ExpressionStatement","src":"35788:26:164"},{"expression":{"arguments":[{"id":99488,"name":"_recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99468,"src":"35865:10:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":99489,"name":"bond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99475,"src":"35877:4:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":99485,"name":"WETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97742,"src":"35853:4:164","typeDescriptions":{"typeIdentifier":"t_contract$_IDelayedWETH_$100239","typeString":"contract IDelayedWETH"}},"id":99487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":100216,"src":"35853:11:164","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":99490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"35853:29:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":99491,"nodeType":"ExpressionStatement","src":"35853:29:164"}]},"documentation":{"id":99466,"nodeType":"StructuredDocumentation","src":"35351:172:164","text":"@notice Pays out the bond of a claim to a given recipient.\n @param _recipient The recipient of the bond.\n @param _bonded The claim to pay out the bond of."},"implemented":true,"kind":"function","modifiers":[],"name":"_distributeBond","nameLocation":"35537:15:164","parameters":{"id":99472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99468,"mutability":"mutable","name":"_recipient","nameLocation":"35561:10:164","nodeType":"VariableDeclaration","scope":99493,"src":"35553:18:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":99467,"name":"address","nodeType":"ElementaryTypeName","src":"35553:7:164","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":99471,"mutability":"mutable","name":"_bonded","nameLocation":"35591:7:164","nodeType":"VariableDeclaration","scope":99493,"src":"35573:25:164","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"},"typeName":{"id":99470,"nodeType":"UserDefinedTypeName","pathNode":{"id":99469,"name":"ClaimData","nodeType":"IdentifierPath","referencedDeclaration":100523,"src":"35573:9:164"},"referencedDeclaration":100523,"src":"35573:9:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"}},"visibility":"internal"}],"src":"35552:47:164"},"returnParameters":{"id":99473,"nodeType":"ParameterList","parameters":[],"src":"35609:0:164"},"scope":99927,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":99587,"nodeType":"FunctionDefinition","src":"36108:1977:164","nodes":[],"body":{"id":99586,"nodeType":"Block","src":"36289:1796:164","nodes":[],"statements":[{"assignments":[99509],"declarations":[{"constant":false,"id":99509,"mutability":"mutable","name":"disputedLeafPos","nameLocation":"36869:15:164","nodeType":"VariableDeclaration","scope":99586,"src":"36860:24:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},"typeName":{"id":99508,"nodeType":"UserDefinedTypeName","pathNode":{"id":99507,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":103269,"src":"36860:8:164"},"referencedDeclaration":103269,"src":"36860:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"visibility":"internal"}],"id":99518,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":99516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":99512,"name":"_parentPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99502,"src":"36901:10:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":99513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101017,"src":"36901:14:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint128_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (uint128)"}},"id":99514,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"36901:16:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":99515,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"36920:1:164","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"36901:20:164","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":99510,"name":"Position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103269,"src":"36887:8:164","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Position_$103269_$","typeString":"type(Position)"}},"id":99511,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","src":"36887:13:164","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_uint128_$returns$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (uint128) pure returns (Position)"}},"id":99517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"36887:35:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"nodeType":"VariableDeclarationStatement","src":"36860:62:164"},{"assignments":[99521],"declarations":[{"constant":false,"id":99521,"mutability":"mutable","name":"disputed","nameLocation":"36950:8:164","nodeType":"VariableDeclaration","scope":99586,"src":"36932:26:164","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"},"typeName":{"id":99520,"nodeType":"UserDefinedTypeName","pathNode":{"id":99519,"name":"ClaimData","nodeType":"IdentifierPath","referencedDeclaration":100523,"src":"36932:9:164"},"referencedDeclaration":100523,"src":"36932:9:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"}},"visibility":"internal"}],"id":99527,"initialValue":{"arguments":[{"id":99523,"name":"disputedLeafPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99509,"src":"36988:15:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},{"id":99524,"name":"_parentIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99499,"src":"37013:10:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":99525,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"37034:4:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":99522,"name":"_findTraceAncestor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99638,"src":"36961:18:164","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Position_$103269_$_t_uint256_$_t_bool_$returns$_t_struct$_ClaimData_$100523_storage_ptr_$","typeString":"function (Position,uint256,bool) view returns (struct IFaultDisputeGame.ClaimData storage pointer)"}},"id":99526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["_pos","_start","_global"],"nodeType":"FunctionCall","src":"36961:80:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"36932:109:164"},{"assignments":[99529],"declarations":[{"constant":false,"id":99529,"mutability":"mutable","name":"vmStatus","nameLocation":"37057:8:164","nodeType":"VariableDeclaration","scope":99586,"src":"37051:14:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":99528,"name":"uint8","nodeType":"ElementaryTypeName","src":"37051:5:164","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":99538,"initialValue":{"arguments":[{"baseExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":99532,"name":"_rootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99497,"src":"37074:10:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"id":99533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101085,"src":"37074:14:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Claim_$103255_$returns$_t_bytes32_$bound_to$_t_userDefinedValueType$_Claim_$103255_$","typeString":"function (Claim) pure returns (bytes32)"}},"id":99534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"37074:16:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":99536,"indexExpression":{"hexValue":"30","id":99535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"37091:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"37074:19:164","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":99531,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"37068:5:164","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":99530,"name":"uint8","nodeType":"ElementaryTypeName","src":"37068:5:164","typeDescriptions":{}}},"id":99537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"37068:26:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"37051:43:164"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":99550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":99539,"name":"_isAttack","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99504,"src":"37109:9:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":99549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":99545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":99540,"name":"disputed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99521,"src":"37122:8:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99541,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"position","nodeType":"MemberAccess","referencedDeclaration":100519,"src":"37122:17:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":99542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"depth","nodeType":"MemberAccess","referencedDeclaration":100833,"src":"37122:23:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint8_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (uint8)"}},"id":99543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"37122:25:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"hexValue":"32","id":99544,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"37150:1:164","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"37122:29:164","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":99548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":99546,"name":"SPLIT_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97726,"src":"37155:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"hexValue":"32","id":99547,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"37169:1:164","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"37155:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37122:48:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"37109:61:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":99578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":99573,"name":"vmStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99529,"src":"37816:8:164","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":99574,"name":"VMStatuses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103351,"src":"37828:10:164","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VMStatuses_$103351_$","typeString":"type(library VMStatuses)"}},"id":99575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"VALID","nodeType":"MemberAccess","referencedDeclaration":103326,"src":"37828:16:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VMStatus_$103273","typeString":"VMStatus"}},"id":99576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101137,"src":"37828:20:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_VMStatus_$103273_$returns$_t_uint8_$bound_to$_t_userDefinedValueType$_VMStatus_$103273_$","typeString":"function (VMStatus) pure returns (uint8)"}},"id":99577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"37828:22:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"37816:34:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":99584,"nodeType":"IfStatement","src":"37812:267:164","trueBody":{"id":99583,"nodeType":"Block","src":"37852:227:164","statements":[{"errorCall":{"arguments":[{"id":99580,"name":"_rootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99497,"src":"38057:10:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}],"id":99579,"name":"UnexpectedRootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103117,"src":"38037:19:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_userDefinedValueType$_Claim_$103255_$returns$__$","typeString":"function (Claim) pure"}},"id":99581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"38037:31:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":99582,"nodeType":"RevertStatement","src":"38030:38:164"}]}},"id":99585,"nodeType":"IfStatement","src":"37105:974:164","trueBody":{"id":99572,"nodeType":"Block","src":"37172:634:164","statements":[{"condition":{"id":99565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"37646:77:164","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":99563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":99556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":99551,"name":"vmStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99529,"src":"37648:8:164","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":99552,"name":"VMStatuses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103351,"src":"37660:10:164","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VMStatuses_$103351_$","typeString":"type(library VMStatuses)"}},"id":99553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID","nodeType":"MemberAccess","referencedDeclaration":103334,"src":"37660:18:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VMStatus_$103273","typeString":"VMStatus"}},"id":99554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101137,"src":"37660:22:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_VMStatus_$103273_$returns$_t_uint8_$bound_to$_t_userDefinedValueType$_VMStatus_$103273_$","typeString":"function (VMStatus) pure returns (uint8)"}},"id":99555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"37660:24:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"37648:36:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":99562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":99557,"name":"vmStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99529,"src":"37688:8:164","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":99558,"name":"VMStatuses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103351,"src":"37700:10:164","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VMStatuses_$103351_$","typeString":"type(library VMStatuses)"}},"id":99559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PANIC","nodeType":"MemberAccess","referencedDeclaration":103342,"src":"37700:16:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VMStatus_$103273","typeString":"VMStatus"}},"id":99560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101137,"src":"37700:20:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_VMStatus_$103273_$returns$_t_uint8_$bound_to$_t_userDefinedValueType$_VMStatus_$103273_$","typeString":"function (VMStatus) pure returns (uint8)"}},"id":99561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"37700:22:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"37688:34:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"37648:74:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":99564,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"37647:76:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":99571,"nodeType":"IfStatement","src":"37642:154:164","trueBody":{"id":99570,"nodeType":"Block","src":"37725:71:164","statements":[{"errorCall":{"arguments":[{"id":99567,"name":"_rootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99497,"src":"37770:10:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}],"id":99566,"name":"UnexpectedRootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103117,"src":"37750:19:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_userDefinedValueType$_Claim_$103255_$returns$__$","typeString":"function (Claim) pure"}},"id":99568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"37750:31:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":99569,"nodeType":"RevertStatement","src":"37743:38:164"}]}}]}}]},"documentation":{"id":99494,"nodeType":"StructuredDocumentation","src":"35895:208:164","text":"@notice Verifies the integrity of an execution bisection subgame's root claim. Reverts if the claim\n is invalid.\n @param _rootClaim The root claim of the execution bisection subgame."},"implemented":true,"kind":"function","modifiers":[],"name":"_verifyExecBisectionRoot","nameLocation":"36117:24:164","parameters":{"id":99505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99497,"mutability":"mutable","name":"_rootClaim","nameLocation":"36157:10:164","nodeType":"VariableDeclaration","scope":99587,"src":"36151:16:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":99496,"nodeType":"UserDefinedTypeName","pathNode":{"id":99495,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"36151:5:164"},"referencedDeclaration":103255,"src":"36151:5:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"},{"constant":false,"id":99499,"mutability":"mutable","name":"_parentIdx","nameLocation":"36185:10:164","nodeType":"VariableDeclaration","scope":99587,"src":"36177:18:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99498,"name":"uint256","nodeType":"ElementaryTypeName","src":"36177:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":99502,"mutability":"mutable","name":"_parentPos","nameLocation":"36214:10:164","nodeType":"VariableDeclaration","scope":99587,"src":"36205:19:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},"typeName":{"id":99501,"nodeType":"UserDefinedTypeName","pathNode":{"id":99500,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":103269,"src":"36205:8:164"},"referencedDeclaration":103269,"src":"36205:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"visibility":"internal"},{"constant":false,"id":99504,"mutability":"mutable","name":"_isAttack","nameLocation":"36239:9:164","nodeType":"VariableDeclaration","scope":99587,"src":"36234:14:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":99503,"name":"bool","nodeType":"ElementaryTypeName","src":"36234:4:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"36141:113:164"},"returnParameters":{"id":99506,"nodeType":"ParameterList","parameters":[],"src":"36289:0:164"},"scope":99927,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":99638,"nodeType":"FunctionDefinition","src":"38605:677:164","nodes":[],"body":{"id":99637,"nodeType":"Block","src":"38788:494:164","nodes":[],"statements":[{"assignments":[99603],"declarations":[{"constant":false,"id":99603,"mutability":"mutable","name":"traceAncestorPos","nameLocation":"38863:16:164","nodeType":"VariableDeclaration","scope":99637,"src":"38854:25:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},"typeName":{"id":99602,"nodeType":"UserDefinedTypeName","pathNode":{"id":99601,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":103269,"src":"38854:8:164"},"referencedDeclaration":103269,"src":"38854:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"visibility":"internal"}],"id":99613,"initialValue":{"condition":{"id":99604,"name":"_global","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99595,"src":"38882:7:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"id":99610,"name":"SPLIT_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97726,"src":"38941:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":99608,"name":"_pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99591,"src":"38915:4:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":99609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"traceAncestorBounded","nodeType":"MemberAccess","referencedDeclaration":100992,"src":"38915:25:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$_t_uint256_$returns$_t_userDefinedValueType$_Position_$103269_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position,uint256) pure returns (Position)"}},"id":99611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"38915:38:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":99612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"38882:71:164","trueExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":99605,"name":"_pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99591,"src":"38892:4:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":99606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"traceAncestor","nodeType":"MemberAccess","referencedDeclaration":100948,"src":"38892:18:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_userDefinedValueType$_Position_$103269_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (Position)"}},"id":99607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"38892:20:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"nodeType":"VariableDeclarationStatement","src":"38854:99:164"},{"expression":{"id":99618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99614,"name":"ancestor_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99599,"src":"39109:9:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":99615,"name":"claimData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97785,"src":"39121:9:164","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ClaimData_$100523_storage_$dyn_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref[] storage ref"}},"id":99617,"indexExpression":{"id":99616,"name":"_start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99593,"src":"39131:6:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"39121:17:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref"}},"src":"39109:29:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99619,"nodeType":"ExpressionStatement","src":"39109:29:164"},{"body":{"id":99635,"nodeType":"Block","src":"39207:69:164","statements":[{"expression":{"id":99633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99628,"name":"ancestor_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99599,"src":"39221:9:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":99629,"name":"claimData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97785,"src":"39233:9:164","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ClaimData_$100523_storage_$dyn_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref[] storage ref"}},"id":99632,"indexExpression":{"expression":{"id":99630,"name":"ancestor_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99599,"src":"39243:9:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99631,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"parentIndex","nodeType":"MemberAccess","referencedDeclaration":100507,"src":"39243:21:164","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"39233:32:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref"}},"src":"39221:44:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99634,"nodeType":"ExpressionStatement","src":"39221:44:164"}]},"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":99627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":99620,"name":"ancestor_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99599,"src":"39155:9:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99621,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"position","nodeType":"MemberAccess","referencedDeclaration":100519,"src":"39155:18:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":99622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101017,"src":"39155:22:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint128_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (uint128)"}},"id":99623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"39155:24:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":99624,"name":"traceAncestorPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99603,"src":"39183:16:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":99625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101017,"src":"39183:20:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint128_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (uint128)"}},"id":99626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"39183:22:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"39155:50:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":99636,"nodeType":"WhileStatement","src":"39148:128:164"}]},"documentation":{"id":99588,"nodeType":"StructuredDocumentation","src":"38091:509:164","text":"@notice Finds the trace ancestor of a given position within the DAG.\n @param _pos The position to find the trace ancestor claim of.\n @param _start The index to start searching from.\n @param _global Whether or not to search the entire dag or just within an execution trace subgame. If set to\n `true`, and `_pos` is at or above the split depth, this function will revert.\n @return ancestor_ The ancestor claim that commits to the same trace index as `_pos`."},"implemented":true,"kind":"function","modifiers":[],"name":"_findTraceAncestor","nameLocation":"38614:18:164","parameters":{"id":99596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99591,"mutability":"mutable","name":"_pos","nameLocation":"38651:4:164","nodeType":"VariableDeclaration","scope":99638,"src":"38642:13:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},"typeName":{"id":99590,"nodeType":"UserDefinedTypeName","pathNode":{"id":99589,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":103269,"src":"38642:8:164"},"referencedDeclaration":103269,"src":"38642:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"visibility":"internal"},{"constant":false,"id":99593,"mutability":"mutable","name":"_start","nameLocation":"38673:6:164","nodeType":"VariableDeclaration","scope":99638,"src":"38665:14:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99592,"name":"uint256","nodeType":"ElementaryTypeName","src":"38665:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":99595,"mutability":"mutable","name":"_global","nameLocation":"38694:7:164","nodeType":"VariableDeclaration","scope":99638,"src":"38689:12:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":99594,"name":"bool","nodeType":"ElementaryTypeName","src":"38689:4:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"38632:75:164"},"returnParameters":{"id":99600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99599,"mutability":"mutable","name":"ancestor_","nameLocation":"38773:9:164","nodeType":"VariableDeclaration","scope":99638,"src":"38755:27:164","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"},"typeName":{"id":99598,"nodeType":"UserDefinedTypeName","pathNode":{"id":99597,"name":"ClaimData","nodeType":"IdentifierPath","referencedDeclaration":100523,"src":"38755:9:164"},"referencedDeclaration":100523,"src":"38755:9:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"}},"visibility":"internal"}],"src":"38754:29:164"},"scope":99927,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":99840,"nodeType":"FunctionDefinition","src":"39797:3468:164","nodes":[],"body":{"id":99839,"nodeType":"Block","src":"39995:3270:164","nodes":[],"statements":[{"assignments":[99657],"declarations":[{"constant":false,"id":99657,"mutability":"mutable","name":"claimIdx","nameLocation":"40050:8:164","nodeType":"VariableDeclaration","scope":99839,"src":"40042:16:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99656,"name":"uint256","nodeType":"ElementaryTypeName","src":"40042:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":99659,"initialValue":{"id":99658,"name":"_start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99641,"src":"40061:6:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"40042:25:164"},{"assignments":[99662],"declarations":[{"constant":false,"id":99662,"mutability":"mutable","name":"claim","nameLocation":"40095:5:164","nodeType":"VariableDeclaration","scope":99839,"src":"40077:23:164","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"},"typeName":{"id":99661,"nodeType":"UserDefinedTypeName","pathNode":{"id":99660,"name":"ClaimData","nodeType":"IdentifierPath","referencedDeclaration":100523,"src":"40077:9:164"},"referencedDeclaration":100523,"src":"40077:9:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"}},"visibility":"internal"}],"id":99666,"initialValue":{"baseExpression":{"id":99663,"name":"claimData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97785,"src":"40103:9:164","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ClaimData_$100523_storage_$dyn_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref[] storage ref"}},"id":99665,"indexExpression":{"id":99664,"name":"claimIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99657,"src":"40113:8:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"40103:19:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"40077:45:164"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":99672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":99667,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99662,"src":"40245:5:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99668,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"position","nodeType":"MemberAccess","referencedDeclaration":100519,"src":"40245:14:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":99669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"depth","nodeType":"MemberAccess","referencedDeclaration":100833,"src":"40245:20:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint8_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (uint8)"}},"id":99670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"40245:22:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":99671,"name":"SPLIT_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97726,"src":"40271:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"40245:37:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":99676,"nodeType":"IfStatement","src":"40241:67:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":99673,"name":"ClaimAboveSplit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103177,"src":"40291:15:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":99674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"40291:17:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":99675,"nodeType":"RevertStatement","src":"40284:24:164"}},{"assignments":[99678],"declarations":[{"constant":false,"id":99678,"mutability":"mutable","name":"currentDepth","nameLocation":"40667:12:164","nodeType":"VariableDeclaration","scope":99839,"src":"40659:20:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99677,"name":"uint256","nodeType":"ElementaryTypeName","src":"40659:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":99679,"nodeType":"VariableDeclarationStatement","src":"40659:20:164"},{"assignments":[99682],"declarations":[{"constant":false,"id":99682,"mutability":"mutable","name":"execRootClaim","nameLocation":"40707:13:164","nodeType":"VariableDeclaration","scope":99839,"src":"40689:31:164","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"},"typeName":{"id":99681,"nodeType":"UserDefinedTypeName","pathNode":{"id":99680,"name":"ClaimData","nodeType":"IdentifierPath","referencedDeclaration":100523,"src":"40689:9:164"},"referencedDeclaration":100523,"src":"40689:9:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"}},"visibility":"internal"}],"id":99684,"initialValue":{"id":99683,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99662,"src":"40723:5:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"40689:39:164"},{"body":{"id":99719,"nodeType":"Block","src":"40800:509:164","statements":[{"assignments":[99695],"declarations":[{"constant":false,"id":99695,"mutability":"mutable","name":"parentIndex","nameLocation":"40822:11:164","nodeType":"VariableDeclaration","scope":99719,"src":"40814:19:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99694,"name":"uint256","nodeType":"ElementaryTypeName","src":"40814:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":99698,"initialValue":{"expression":{"id":99696,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99662,"src":"40836:5:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99697,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"parentIndex","nodeType":"MemberAccess","referencedDeclaration":100507,"src":"40836:17:164","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"40814:39:164"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":99703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":99699,"name":"currentDepth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99678,"src":"41163:12:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":99702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":99700,"name":"SPLIT_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97726,"src":"41179:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":99701,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"41193:1:164","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"41179:15:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"41163:31:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":99708,"nodeType":"IfStatement","src":"41159:58:164","trueBody":{"expression":{"id":99706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99704,"name":"execRootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99682,"src":"41196:13:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":99705,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99662,"src":"41212:5:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"src":"41196:21:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99707,"nodeType":"ExpressionStatement","src":"41196:21:164"}},{"expression":{"id":99713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99709,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99662,"src":"41232:5:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":99710,"name":"claimData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97785,"src":"41240:9:164","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ClaimData_$100523_storage_$dyn_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref[] storage ref"}},"id":99712,"indexExpression":{"id":99711,"name":"parentIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99695,"src":"41250:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"41240:22:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage","typeString":"struct IFaultDisputeGame.ClaimData storage ref"}},"src":"41232:30:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99714,"nodeType":"ExpressionStatement","src":"41232:30:164"},{"expression":{"id":99717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99715,"name":"claimIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99657,"src":"41276:8:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":99716,"name":"parentIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99695,"src":"41287:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"41276:22:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":99718,"nodeType":"ExpressionStatement","src":"41276:22:164"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":99693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"id":99690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99685,"name":"currentDepth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99678,"src":"40746:12:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":99686,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99662,"src":"40761:5:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99687,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"position","nodeType":"MemberAccess","referencedDeclaration":100519,"src":"40761:14:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":99688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"depth","nodeType":"MemberAccess","referencedDeclaration":100833,"src":"40761:20:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint8_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (uint8)"}},"id":99689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"40761:22:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"40746:37:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":99691,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"40745:39:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":99692,"name":"SPLIT_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97726,"src":"40787:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"40745:53:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":99720,"nodeType":"WhileStatement","src":"40738:571:164"},{"assignments":[99723,99726],"declarations":[{"constant":false,"id":99723,"mutability":"mutable","name":"execRootPos","nameLocation":"41586:11:164","nodeType":"VariableDeclaration","scope":99839,"src":"41577:20:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},"typeName":{"id":99722,"nodeType":"UserDefinedTypeName","pathNode":{"id":99721,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":103269,"src":"41577:8:164"},"referencedDeclaration":103269,"src":"41577:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"visibility":"internal"},{"constant":false,"id":99726,"mutability":"mutable","name":"outputPos","nameLocation":"41608:9:164","nodeType":"VariableDeclaration","scope":99839,"src":"41599:18:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},"typeName":{"id":99725,"nodeType":"UserDefinedTypeName","pathNode":{"id":99724,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":103269,"src":"41599:8:164"},"referencedDeclaration":103269,"src":"41599:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"visibility":"internal"}],"id":99732,"initialValue":{"components":[{"expression":{"id":99727,"name":"execRootClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99682,"src":"41622:13:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99728,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"position","nodeType":"MemberAccess","referencedDeclaration":100519,"src":"41622:22:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},{"expression":{"id":99729,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99662,"src":"41646:5:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99730,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"position","nodeType":"MemberAccess","referencedDeclaration":100519,"src":"41646:14:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}}],"id":99731,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"41621:40:164","typeDescriptions":{"typeIdentifier":"t_tuple$_t_userDefinedValueType$_Position_$103269_$_t_userDefinedValueType$_Position_$103269_$","typeString":"tuple(Position,Position)"}},"nodeType":"VariableDeclarationStatement","src":"41576:85:164"},{"assignments":[99734],"declarations":[{"constant":false,"id":99734,"mutability":"mutable","name":"wasAttack","nameLocation":"41676:9:164","nodeType":"VariableDeclaration","scope":99839,"src":"41671:14:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":99733,"name":"bool","nodeType":"ElementaryTypeName","src":"41671:4:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":99744,"initialValue":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":99743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":99735,"name":"execRootPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99723,"src":"41688:11:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":99736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"parent","nodeType":"MemberAccess","referencedDeclaration":100886,"src":"41688:18:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_userDefinedValueType$_Position_$103269_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (Position)"}},"id":99737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"41688:20:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":99738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101017,"src":"41688:24:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint128_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (uint128)"}},"id":99739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"41688:26:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":99740,"name":"outputPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99726,"src":"41718:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":99741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101017,"src":"41718:13:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint128_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (uint128)"}},"id":99742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"41718:15:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"41688:45:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"41671:62:164"},{"condition":{"id":99745,"name":"wasAttack","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99734,"src":"42228:9:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":99837,"nodeType":"Block","src":"42977:282:164","statements":[{"assignments":[99803],"declarations":[{"constant":false,"id":99803,"mutability":"mutable","name":"disputed","nameLocation":"43009:8:164","nodeType":"VariableDeclaration","scope":99837,"src":"42991:26:164","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"},"typeName":{"id":99802,"nodeType":"UserDefinedTypeName","pathNode":{"id":99801,"name":"ClaimData","nodeType":"IdentifierPath","referencedDeclaration":100523,"src":"42991:9:164"},"referencedDeclaration":100523,"src":"42991:9:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"}},"visibility":"internal"}],"id":99816,"initialValue":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":99811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":99807,"name":"outputPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99726,"src":"43053:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":99808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101017,"src":"43053:13:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint128_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (uint128)"}},"id":99809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"43053:15:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":99810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"43071:1:164","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"43053:19:164","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":99805,"name":"Position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103269,"src":"43039:8:164","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Position_$103269_$","typeString":"type(Position)"}},"id":99806,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","src":"43039:13:164","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_uint128_$returns$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (uint128) pure returns (Position)"}},"id":99812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"43039:34:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},{"id":99813,"name":"claimIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99657,"src":"43075:8:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":99814,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"43085:4:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":99804,"name":"_findTraceAncestor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99638,"src":"43020:18:164","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Position_$103269_$_t_uint256_$_t_bool_$returns$_t_struct$_ClaimData_$100523_storage_ptr_$","typeString":"function (Position,uint256,bool) view returns (struct IFaultDisputeGame.ClaimData storage pointer)"}},"id":99815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"43020:70:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"42991:99:164"},{"expression":{"id":99825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":99817,"name":"startingClaim_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99645,"src":"43105:14:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"id":99818,"name":"startingPos_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99648,"src":"43121:12:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}}],"id":99819,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"43104:30:164","typeDescriptions":{"typeIdentifier":"t_tuple$_t_userDefinedValueType$_Claim_$103255_$_t_userDefinedValueType$_Position_$103269_$","typeString":"tuple(Claim,Position)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"expression":{"id":99820,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99662,"src":"43138:5:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99821,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"claim","nodeType":"MemberAccess","referencedDeclaration":100516,"src":"43138:11:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"expression":{"id":99822,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99662,"src":"43151:5:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99823,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"position","nodeType":"MemberAccess","referencedDeclaration":100519,"src":"43151:14:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}}],"id":99824,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"43137:29:164","typeDescriptions":{"typeIdentifier":"t_tuple$_t_userDefinedValueType$_Claim_$103255_$_t_userDefinedValueType$_Position_$103269_$","typeString":"tuple(Claim,Position)"}},"src":"43104:62:164","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":99826,"nodeType":"ExpressionStatement","src":"43104:62:164"},{"expression":{"id":99835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":99827,"name":"disputedClaim_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99651,"src":"43181:14:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"id":99828,"name":"disputedPos_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99654,"src":"43197:12:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}}],"id":99829,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"43180:30:164","typeDescriptions":{"typeIdentifier":"t_tuple$_t_userDefinedValueType$_Claim_$103255_$_t_userDefinedValueType$_Position_$103269_$","typeString":"tuple(Claim,Position)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"expression":{"id":99830,"name":"disputed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99803,"src":"43214:8:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99831,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"claim","nodeType":"MemberAccess","referencedDeclaration":100516,"src":"43214:14:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"expression":{"id":99832,"name":"disputed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99803,"src":"43230:8:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99833,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"position","nodeType":"MemberAccess","referencedDeclaration":100519,"src":"43230:17:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}}],"id":99834,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"43213:35:164","typeDescriptions":{"typeIdentifier":"t_tuple$_t_userDefinedValueType$_Claim_$103255_$_t_userDefinedValueType$_Position_$103269_$","typeString":"tuple(Claim,Position)"}},"src":"43180:68:164","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":99836,"nodeType":"ExpressionStatement","src":"43180:68:164"}]},"id":99838,"nodeType":"IfStatement","src":"42224:1035:164","trueBody":{"id":99800,"nodeType":"Block","src":"42239:732:164","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":99750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":99746,"name":"outputPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99726,"src":"42540:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":99747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"indexAtDepth","nodeType":"MemberAccess","referencedDeclaration":100850,"src":"42540:22:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint128_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (uint128)"}},"id":99748,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"42540:24:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":99749,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"42567:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"42540:28:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":99788,"nodeType":"Block","src":"42794:91:164","statements":[{"expression":{"id":99786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99778,"name":"startingClaim_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99645,"src":"42812:14:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":99781,"name":"startingOutputRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97811,"src":"42840:18:164","typeDescriptions":{"typeIdentifier":"t_struct$_OutputRoot_$103283_storage","typeString":"struct OutputRoot storage ref"}},"id":99782,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"root","nodeType":"MemberAccess","referencedDeclaration":103280,"src":"42840:23:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"id":99783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101111,"src":"42840:27:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Hash_$103253_$returns$_t_bytes32_$bound_to$_t_userDefinedValueType$_Hash_$103253_$","typeString":"function (Hash) pure returns (bytes32)"}},"id":99784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"42840:29:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":99779,"name":"Claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103255,"src":"42829:5:164","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Claim_$103255_$","typeString":"type(Claim)"}},"id":99780,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","src":"42829:10:164","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Claim_$103255_$","typeString":"function (bytes32) pure returns (Claim)"}},"id":99785,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"42829:41:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"src":"42812:58:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"id":99787,"nodeType":"ExpressionStatement","src":"42812:58:164"}]},"id":99789,"nodeType":"IfStatement","src":"42536:349:164","trueBody":{"id":99777,"nodeType":"Block","src":"42570:218:164","statements":[{"assignments":[99753],"declarations":[{"constant":false,"id":99753,"mutability":"mutable","name":"starting","nameLocation":"42606:8:164","nodeType":"VariableDeclaration","scope":99777,"src":"42588:26:164","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"},"typeName":{"id":99752,"nodeType":"UserDefinedTypeName","pathNode":{"id":99751,"name":"ClaimData","nodeType":"IdentifierPath","referencedDeclaration":100523,"src":"42588:9:164"},"referencedDeclaration":100523,"src":"42588:9:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData"}},"visibility":"internal"}],"id":99766,"initialValue":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":99761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":99757,"name":"outputPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99726,"src":"42650:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":99758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101017,"src":"42650:13:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint128_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (uint128)"}},"id":99759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"42650:15:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":99760,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"42668:1:164","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"42650:19:164","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":99755,"name":"Position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103269,"src":"42636:8:164","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Position_$103269_$","typeString":"type(Position)"}},"id":99756,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","src":"42636:13:164","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_uint128_$returns$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (uint128) pure returns (Position)"}},"id":99762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"42636:34:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},{"id":99763,"name":"claimIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99657,"src":"42672:8:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":99764,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"42682:4:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":99754,"name":"_findTraceAncestor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99638,"src":"42617:18:164","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Position_$103269_$_t_uint256_$_t_bool_$returns$_t_struct$_ClaimData_$100523_storage_ptr_$","typeString":"function (Position,uint256,bool) view returns (struct IFaultDisputeGame.ClaimData storage pointer)"}},"id":99765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"42617:70:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"42588:99:164"},{"expression":{"id":99775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":99767,"name":"startingClaim_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99645,"src":"42706:14:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"id":99768,"name":"startingPos_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99648,"src":"42722:12:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}}],"id":99769,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"42705:30:164","typeDescriptions":{"typeIdentifier":"t_tuple$_t_userDefinedValueType$_Claim_$103255_$_t_userDefinedValueType$_Position_$103269_$","typeString":"tuple(Claim,Position)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"expression":{"id":99770,"name":"starting","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99753,"src":"42739:8:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99771,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"claim","nodeType":"MemberAccess","referencedDeclaration":100516,"src":"42739:14:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"expression":{"id":99772,"name":"starting","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99753,"src":"42755:8:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99773,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"position","nodeType":"MemberAccess","referencedDeclaration":100519,"src":"42755:17:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}}],"id":99774,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"42738:35:164","typeDescriptions":{"typeIdentifier":"t_tuple$_t_userDefinedValueType$_Claim_$103255_$_t_userDefinedValueType$_Position_$103269_$","typeString":"tuple(Claim,Position)"}},"src":"42705:68:164","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":99776,"nodeType":"ExpressionStatement","src":"42705:68:164"}]}},{"expression":{"id":99798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":99790,"name":"disputedClaim_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99651,"src":"42899:14:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"id":99791,"name":"disputedPos_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99654,"src":"42915:12:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}}],"id":99792,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"42898:30:164","typeDescriptions":{"typeIdentifier":"t_tuple$_t_userDefinedValueType$_Claim_$103255_$_t_userDefinedValueType$_Position_$103269_$","typeString":"tuple(Claim,Position)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"expression":{"id":99793,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99662,"src":"42932:5:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99794,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"claim","nodeType":"MemberAccess","referencedDeclaration":100516,"src":"42932:11:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"expression":{"id":99795,"name":"claim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99662,"src":"42945:5:164","typeDescriptions":{"typeIdentifier":"t_struct$_ClaimData_$100523_storage_ptr","typeString":"struct IFaultDisputeGame.ClaimData storage pointer"}},"id":99796,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"position","nodeType":"MemberAccess","referencedDeclaration":100519,"src":"42945:14:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}}],"id":99797,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"42931:29:164","typeDescriptions":{"typeIdentifier":"t_tuple$_t_userDefinedValueType$_Claim_$103255_$_t_userDefinedValueType$_Position_$103269_$","typeString":"tuple(Claim,Position)"}},"src":"42898:62:164","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":99799,"nodeType":"ExpressionStatement","src":"42898:62:164"}]}}]},"documentation":{"id":99639,"nodeType":"StructuredDocumentation","src":"39288:504:164","text":"@notice Finds the starting and disputed output root for a given `ClaimData` within the DAG. This\n `ClaimData` must be below the `SPLIT_DEPTH`.\n @param _start The index within `claimData` of the claim to start searching from.\n @return startingClaim_ The starting output root claim.\n @return startingPos_ The starting output root position.\n @return disputedClaim_ The disputed output root claim.\n @return disputedPos_ The disputed output root position."},"implemented":true,"kind":"function","modifiers":[],"name":"_findStartingAndDisputedOutputs","nameLocation":"39806:31:164","parameters":{"id":99642,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99641,"mutability":"mutable","name":"_start","nameLocation":"39846:6:164","nodeType":"VariableDeclaration","scope":99840,"src":"39838:14:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99640,"name":"uint256","nodeType":"ElementaryTypeName","src":"39838:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"39837:16:164"},"returnParameters":{"id":99655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99645,"mutability":"mutable","name":"startingClaim_","nameLocation":"39907:14:164","nodeType":"VariableDeclaration","scope":99840,"src":"39901:20:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":99644,"nodeType":"UserDefinedTypeName","pathNode":{"id":99643,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"39901:5:164"},"referencedDeclaration":103255,"src":"39901:5:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"},{"constant":false,"id":99648,"mutability":"mutable","name":"startingPos_","nameLocation":"39932:12:164","nodeType":"VariableDeclaration","scope":99840,"src":"39923:21:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},"typeName":{"id":99647,"nodeType":"UserDefinedTypeName","pathNode":{"id":99646,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":103269,"src":"39923:8:164"},"referencedDeclaration":103269,"src":"39923:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"visibility":"internal"},{"constant":false,"id":99651,"mutability":"mutable","name":"disputedClaim_","nameLocation":"39952:14:164","nodeType":"VariableDeclaration","scope":99840,"src":"39946:20:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":99650,"nodeType":"UserDefinedTypeName","pathNode":{"id":99649,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"39946:5:164"},"referencedDeclaration":103255,"src":"39946:5:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"},{"constant":false,"id":99654,"mutability":"mutable","name":"disputedPos_","nameLocation":"39977:12:164","nodeType":"VariableDeclaration","scope":99840,"src":"39968:21:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},"typeName":{"id":99653,"nodeType":"UserDefinedTypeName","pathNode":{"id":99652,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":103269,"src":"39968:8:164"},"referencedDeclaration":103269,"src":"39968:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"visibility":"internal"}],"src":"39900:90:164"},"scope":99927,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":99875,"nodeType":"FunctionDefinition","src":"43519:319:164","nodes":[],"body":{"id":99874,"nodeType":"Block","src":"43602:236:164","nodes":[],"statements":[{"assignments":[99851,99854,99857,99860],"declarations":[{"constant":false,"id":99851,"mutability":"mutable","name":"starting","nameLocation":"43619:8:164","nodeType":"VariableDeclaration","scope":99874,"src":"43613:14:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":99850,"nodeType":"UserDefinedTypeName","pathNode":{"id":99849,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"43613:5:164"},"referencedDeclaration":103255,"src":"43613:5:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"},{"constant":false,"id":99854,"mutability":"mutable","name":"startingPos","nameLocation":"43638:11:164","nodeType":"VariableDeclaration","scope":99874,"src":"43629:20:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},"typeName":{"id":99853,"nodeType":"UserDefinedTypeName","pathNode":{"id":99852,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":103269,"src":"43629:8:164"},"referencedDeclaration":103269,"src":"43629:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"visibility":"internal"},{"constant":false,"id":99857,"mutability":"mutable","name":"disputed","nameLocation":"43657:8:164","nodeType":"VariableDeclaration","scope":99874,"src":"43651:14:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":99856,"nodeType":"UserDefinedTypeName","pathNode":{"id":99855,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"43651:5:164"},"referencedDeclaration":103255,"src":"43651:5:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"},{"constant":false,"id":99860,"mutability":"mutable","name":"disputedPos","nameLocation":"43676:11:164","nodeType":"VariableDeclaration","scope":99874,"src":"43667:20:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},"typeName":{"id":99859,"nodeType":"UserDefinedTypeName","pathNode":{"id":99858,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":103269,"src":"43667:8:164"},"referencedDeclaration":103269,"src":"43667:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"visibility":"internal"}],"id":99864,"initialValue":{"arguments":[{"id":99862,"name":"_claimIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99843,"src":"43735:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":99861,"name":"_findStartingAndDisputedOutputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99840,"src":"43703:31:164","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_userDefinedValueType$_Claim_$103255_$_t_userDefinedValueType$_Position_$103269_$_t_userDefinedValueType$_Claim_$103255_$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (uint256) view returns (Claim,Position,Claim,Position)"}},"id":99863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"43703:44:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_userDefinedValueType$_Claim_$103255_$_t_userDefinedValueType$_Position_$103269_$_t_userDefinedValueType$_Claim_$103255_$_t_userDefinedValueType$_Position_$103269_$","typeString":"tuple(Claim,Position,Claim,Position)"}},"nodeType":"VariableDeclarationStatement","src":"43612:135:164"},{"expression":{"id":99872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99865,"name":"uuid_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99847,"src":"43757:5:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":99867,"name":"starting","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99851,"src":"43786:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"id":99868,"name":"startingPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99854,"src":"43796:11:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},{"id":99869,"name":"disputed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99857,"src":"43809:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"id":99870,"name":"disputedPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99860,"src":"43819:11:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}],"id":99866,"name":"_computeLocalContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99926,"src":"43765:20:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Claim_$103255_$_t_userDefinedValueType$_Position_$103269_$_t_userDefinedValueType$_Claim_$103255_$_t_userDefinedValueType$_Position_$103269_$returns$_t_userDefinedValueType$_Hash_$103253_$","typeString":"function (Claim,Position,Claim,Position) pure returns (Hash)"}},"id":99871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"43765:66:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"src":"43757:74:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"id":99873,"nodeType":"ExpressionStatement","src":"43757:74:164"}]},"documentation":{"id":99841,"nodeType":"StructuredDocumentation","src":"43271:243:164","text":"@notice Finds the local context hash for a given claim index that is present in an execution trace subgame.\n @param _claimIndex The index of the claim to find the local context hash for.\n @return uuid_ The local context hash."},"implemented":true,"kind":"function","modifiers":[],"name":"_findLocalContext","nameLocation":"43528:17:164","parameters":{"id":99844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99843,"mutability":"mutable","name":"_claimIndex","nameLocation":"43554:11:164","nodeType":"VariableDeclaration","scope":99875,"src":"43546:19:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99842,"name":"uint256","nodeType":"ElementaryTypeName","src":"43546:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"43545:21:164"},"returnParameters":{"id":99848,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99847,"mutability":"mutable","name":"uuid_","nameLocation":"43595:5:164","nodeType":"VariableDeclaration","scope":99875,"src":"43590:10:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"},"typeName":{"id":99846,"nodeType":"UserDefinedTypeName","pathNode":{"id":99845,"name":"Hash","nodeType":"IdentifierPath","referencedDeclaration":103253,"src":"43590:4:164"},"referencedDeclaration":103253,"src":"43590:4:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"visibility":"internal"}],"src":"43589:12:164"},"scope":99927,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":99926,"nodeType":"FunctionDefinition","src":"44205:616:164","nodes":[],"body":{"id":99925,"nodeType":"Block","src":"44416:405:164","nodes":[],"statements":[{"expression":{"id":99923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":99894,"name":"uuid_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99892,"src":"44614:5:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":99899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":99895,"name":"_startingPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99882,"src":"44622:12:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"id":99896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101017,"src":"44622:16:164","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$103269_$returns$_t_uint128_$bound_to$_t_userDefinedValueType$_Position_$103269_$","typeString":"function (Position) pure returns (uint128)"}},"id":99897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"44622:18:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":99898,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"44644:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"44622:23:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"arguments":[{"arguments":[{"id":99915,"name":"_starting","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99879,"src":"44763:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"id":99916,"name":"_startingPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99882,"src":"44774:12:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},{"id":99917,"name":"_disputed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99885,"src":"44788:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"id":99918,"name":"_disputedPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99888,"src":"44799:12:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}],"expression":{"id":99913,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"44752:3:164","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":99914,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"44752:10:164","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":99919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"44752:60:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":99912,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"44742:9:164","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":99920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"44742:71:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":99910,"name":"Hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103253,"src":"44732:4:164","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Hash_$103253_$","typeString":"type(Hash)"}},"id":99911,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","src":"44732:9:164","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Hash_$103253_$","typeString":"function (bytes32) pure returns (Hash)"}},"id":99921,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"44732:82:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"id":99922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"44622:192:164","trueExpression":{"arguments":[{"arguments":[{"arguments":[{"id":99905,"name":"_disputed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99885,"src":"44691:9:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},{"id":99906,"name":"_disputedPos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99888,"src":"44702:12:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}],"expression":{"id":99903,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"44680:3:164","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":99904,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"44680:10:164","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":99907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"44680:35:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":99902,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"44670:9:164","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":99908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"44670:46:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":99900,"name":"Hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103253,"src":"44660:4:164","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Hash_$103253_$","typeString":"type(Hash)"}},"id":99901,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","src":"44660:9:164","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Hash_$103253_$","typeString":"function (bytes32) pure returns (Hash)"}},"id":99909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"44660:57:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"src":"44614:200:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"id":99924,"nodeType":"ExpressionStatement","src":"44614:200:164"}]},"documentation":{"id":99876,"nodeType":"StructuredDocumentation","src":"43844:356:164","text":"@notice Computes the local context hash for a set of starting/disputed claim values and positions.\n @param _starting The starting claim.\n @param _startingPos The starting claim's position.\n @param _disputed The disputed claim.\n @param _disputedPos The disputed claim's position.\n @return uuid_ The local context hash."},"implemented":true,"kind":"function","modifiers":[],"name":"_computeLocalContext","nameLocation":"44214:20:164","parameters":{"id":99889,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99879,"mutability":"mutable","name":"_starting","nameLocation":"44250:9:164","nodeType":"VariableDeclaration","scope":99926,"src":"44244:15:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":99878,"nodeType":"UserDefinedTypeName","pathNode":{"id":99877,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"44244:5:164"},"referencedDeclaration":103255,"src":"44244:5:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"},{"constant":false,"id":99882,"mutability":"mutable","name":"_startingPos","nameLocation":"44278:12:164","nodeType":"VariableDeclaration","scope":99926,"src":"44269:21:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},"typeName":{"id":99881,"nodeType":"UserDefinedTypeName","pathNode":{"id":99880,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":103269,"src":"44269:8:164"},"referencedDeclaration":103269,"src":"44269:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"visibility":"internal"},{"constant":false,"id":99885,"mutability":"mutable","name":"_disputed","nameLocation":"44306:9:164","nodeType":"VariableDeclaration","scope":99926,"src":"44300:15:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":99884,"nodeType":"UserDefinedTypeName","pathNode":{"id":99883,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"44300:5:164"},"referencedDeclaration":103255,"src":"44300:5:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"},{"constant":false,"id":99888,"mutability":"mutable","name":"_disputedPos","nameLocation":"44334:12:164","nodeType":"VariableDeclaration","scope":99926,"src":"44325:21:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"},"typeName":{"id":99887,"nodeType":"UserDefinedTypeName","pathNode":{"id":99886,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":103269,"src":"44325:8:164"},"referencedDeclaration":103269,"src":"44325:8:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$103269","typeString":"Position"}},"visibility":"internal"}],"src":"44234:118:164"},"returnParameters":{"id":99893,"nodeType":"ParameterList","parameters":[{"constant":false,"id":99892,"mutability":"mutable","name":"uuid_","nameLocation":"44405:5:164","nodeType":"VariableDeclaration","scope":99926,"src":"44400:10:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"},"typeName":{"id":99891,"nodeType":"UserDefinedTypeName","pathNode":{"id":99890,"name":"Hash","nodeType":"IdentifierPath","referencedDeclaration":103253,"src":"44400:4:164"},"referencedDeclaration":103253,"src":"44400:4:164","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Hash_$103253","typeString":"Hash"}},"visibility":"internal"}],"src":"44399:12:164"},"scope":99927,"stateMutability":"pure","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":97711,"name":"IFaultDisputeGame","nodeType":"IdentifierPath","referencedDeclaration":100608,"src":"1025:17:164"},"id":97712,"nodeType":"InheritanceSpecifier","src":"1025:17:164"},{"baseName":{"id":97713,"name":"Clone","nodeType":"IdentifierPath","referencedDeclaration":60963,"src":"1044:5:164"},"id":97714,"nodeType":"InheritanceSpecifier","src":"1044:5:164"},{"baseName":{"id":97715,"name":"ISemver","nodeType":"IdentifierPath","referencedDeclaration":109417,"src":"1051:7:164"},"id":97716,"nodeType":"InheritanceSpecifier","src":"1051:7:164"}],"canonicalName":"FaultDisputeGame","contractDependencies":[],"contractKind":"contract","documentation":{"id":97710,"nodeType":"StructuredDocumentation","src":"900:96:164","text":"@title FaultDisputeGame\n @notice An implementation of the `IFaultDisputeGame` interface."},"fullyImplemented":true,"linearizedBaseContracts":[99927,109417,60963,100608,100327,100616],"name":"FaultDisputeGame","nameLocation":"1005:16:164","scope":99928,"usedErrors":[103117,103120,103123,103126,103129,103135,103138,103144,103147,103150,103153,103156,103159,103162,103168,103171,103174,103177,103180,103183,103186,103189,103192]}],"license":"MIT"},"id":164} \ No newline at end of file diff --git a/packages/sdk/src/forge-artifacts/GasPriceOracle.json b/packages/sdk/src/forge-artifacts/GasPriceOracle.json deleted file mode 100644 index 2a5743a1323e..000000000000 --- a/packages/sdk/src/forge-artifacts/GasPriceOracle.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"function","name":"DECIMALS","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"baseFee","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"baseFeeScalar","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"blobBaseFee","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"blobBaseFeeScalar","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"gasPrice","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getL1Fee","inputs":[{"name":"_data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getL1GasUsed","inputs":[{"name":"_data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"isEcotone","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"l1BaseFee","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"overhead","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"scalar","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"setEcotone","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"}],"bytecode":{"object":"0x608060405234801561001057600080fd5b50610fb5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806354fd4d5011610097578063de26c4a111610066578063de26c4a1146101da578063f45e65d8146101ed578063f8206140146101f5578063fe173b97146101cc57600080fd5b806354fd4d501461016657806368d5dca6146101af5780636ef25c3a146101cc578063c5985918146101d257600080fd5b8063313ce567116100d3578063313ce5671461012757806349948e0e1461012e5780634ef6e22414610141578063519b4bd31461015e57600080fd5b80630c18c162146100fa57806322b90ab3146101155780632e0f26251461011f575b600080fd5b6101026101fd565b6040519081526020015b60405180910390f35b61011d61031e565b005b610102600681565b6006610102565b61010261013c366004610b73565b610541565b60005461014e9060ff1681565b604051901515815260200161010c565b610102610565565b6101a26040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161010c9190610c42565b6101b76105c6565b60405163ffffffff909116815260200161010c565b48610102565b6101b761064b565b6101026101e8366004610b73565b6106ac565b610102610760565b610102610853565b6000805460ff1615610296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f47617350726963654f7261636c653a206f76657268656164282920697320646560448201527f707265636174656400000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16638b239f736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103199190610cb5565b905090565b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663e591b2826040518163ffffffff1660e01b8152600401602060405180830381865afa15801561037d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a19190610cce565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f47617350726963654f7261636c653a206f6e6c7920746865206465706f73697460448201527f6f72206163636f756e742063616e2073657420697345636f746f6e6520666c6160648201527f6700000000000000000000000000000000000000000000000000000000000000608482015260a40161028d565b60005460ff1615610514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f47617350726963654f7261636c653a2045636f746f6e6520616c72656164792060448201527f6163746976650000000000000000000000000000000000000000000000000000606482015260840161028d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000805460ff161561055c57610556826108b4565b92915050565b61055682610958565b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16635cf249696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102f5573d6000803e3d6000fd5b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff166368d5dca66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610627573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103199190610d04565b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663c59859186040518163ffffffff1660e01b8152600401602060405180830381865afa158015610627573d6000803e3d6000fd5b6000806106b883610ab4565b60005490915060ff16156106cc5792915050565b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16638b239f736040518163ffffffff1660e01b8152600401602060405180830381865afa15801561072b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074f9190610cb5565b6107599082610d59565b9392505050565b6000805460ff16156107f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f47617350726963654f7261636c653a207363616c61722829206973206465707260448201527f6563617465640000000000000000000000000000000000000000000000000000606482015260840161028d565b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16639e8c49666040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102f5573d6000803e3d6000fd5b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663f82061406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102f5573d6000803e3d6000fd5b6000806108c083610ab4565b905060006108cc610565565b6108d461064b565b6108df906010610d71565b63ffffffff166108ef9190610d9d565b905060006108fb610853565b6109036105c6565b63ffffffff166109139190610d9d565b905060006109218284610d59565b61092b9085610d9d565b90506109396006600a610efa565b610944906010610d9d565b61094e9082610f06565b9695505050505050565b60008061096483610ab4565b9050600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16639e8c49666040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109eb9190610cb5565b6109f3610565565b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16638b239f736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a769190610cb5565b610a809085610d59565b610a8a9190610d9d565b610a949190610d9d565b9050610aa26006600a610efa565b610aac9082610f06565b949350505050565b80516000908190815b81811015610b3757848181518110610ad757610ad7610f41565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016600003610b1757610b10600484610d59565b9250610b25565b610b22601084610d59565b92505b80610b2f81610f70565b915050610abd565b50610aac82610440610d59565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215610b8557600080fd5b813567ffffffffffffffff80821115610b9d57600080fd5b818401915084601f830112610bb157600080fd5b813581811115610bc357610bc3610b44565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c0957610c09610b44565b81604052828152876020848701011115610c2257600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208083528351808285015260005b81811015610c6f57858101830151858201604001528201610c53565b81811115610c81576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060208284031215610cc757600080fd5b5051919050565b600060208284031215610ce057600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461075957600080fd5b600060208284031215610d1657600080fd5b815163ffffffff8116811461075957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610d6c57610d6c610d2a565b500190565b600063ffffffff80831681851681830481118215151615610d9457610d94610d2a565b02949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610dd557610dd5610d2a565b500290565b600181815b80851115610e3357817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610e1957610e19610d2a565b80851615610e2657918102915b93841c9390800290610ddf565b509250929050565b600082610e4a57506001610556565b81610e5757506000610556565b8160018114610e6d5760028114610e7757610e93565b6001915050610556565b60ff841115610e8857610e88610d2a565b50506001821b610556565b5060208310610133831016604e8410600b8410161715610eb6575081810a610556565b610ec08383610dda565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610ef257610ef2610d2a565b029392505050565b60006107598383610e3b565b600082610f3c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610fa157610fa1610d2a565b506001019056fea164736f6c634300080f000a","sourceMap":"1153:5825:144:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106100f55760003560e01c806354fd4d5011610097578063de26c4a111610066578063de26c4a1146101da578063f45e65d8146101ed578063f8206140146101f5578063fe173b97146101cc57600080fd5b806354fd4d501461016657806368d5dca6146101af5780636ef25c3a146101cc578063c5985918146101d257600080fd5b8063313ce567116100d3578063313ce5671461012757806349948e0e1461012e5780634ef6e22414610141578063519b4bd31461015e57600080fd5b80630c18c162146100fa57806322b90ab3146101155780632e0f26251461011f575b600080fd5b6101026101fd565b6040519081526020015b60405180910390f35b61011d61031e565b005b610102600681565b6006610102565b61010261013c366004610b73565b610541565b60005461014e9060ff1681565b604051901515815260200161010c565b610102610565565b6101a26040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161010c9190610c42565b6101b76105c6565b60405163ffffffff909116815260200161010c565b48610102565b6101b761064b565b6101026101e8366004610b73565b6106ac565b610102610760565b610102610853565b6000805460ff1615610296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f47617350726963654f7261636c653a206f76657268656164282920697320646560448201527f707265636174656400000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16638b239f736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103199190610cb5565b905090565b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663e591b2826040518163ffffffff1660e01b8152600401602060405180830381865afa15801561037d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a19190610cce565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f47617350726963654f7261636c653a206f6e6c7920746865206465706f73697460448201527f6f72206163636f756e742063616e2073657420697345636f746f6e6520666c6160648201527f6700000000000000000000000000000000000000000000000000000000000000608482015260a40161028d565b60005460ff1615610514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f47617350726963654f7261636c653a2045636f746f6e6520616c72656164792060448201527f6163746976650000000000000000000000000000000000000000000000000000606482015260840161028d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000805460ff161561055c57610556826108b4565b92915050565b61055682610958565b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16635cf249696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102f5573d6000803e3d6000fd5b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff166368d5dca66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610627573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103199190610d04565b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663c59859186040518163ffffffff1660e01b8152600401602060405180830381865afa158015610627573d6000803e3d6000fd5b6000806106b883610ab4565b60005490915060ff16156106cc5792915050565b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16638b239f736040518163ffffffff1660e01b8152600401602060405180830381865afa15801561072b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074f9190610cb5565b6107599082610d59565b9392505050565b6000805460ff16156107f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f47617350726963654f7261636c653a207363616c61722829206973206465707260448201527f6563617465640000000000000000000000000000000000000000000000000000606482015260840161028d565b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16639e8c49666040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102f5573d6000803e3d6000fd5b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663f82061406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102f5573d6000803e3d6000fd5b6000806108c083610ab4565b905060006108cc610565565b6108d461064b565b6108df906010610d71565b63ffffffff166108ef9190610d9d565b905060006108fb610853565b6109036105c6565b63ffffffff166109139190610d9d565b905060006109218284610d59565b61092b9085610d9d565b90506109396006600a610efa565b610944906010610d9d565b61094e9082610f06565b9695505050505050565b60008061096483610ab4565b9050600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16639e8c49666040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109eb9190610cb5565b6109f3610565565b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16638b239f736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a769190610cb5565b610a809085610d59565b610a8a9190610d9d565b610a949190610d9d565b9050610aa26006600a610efa565b610aac9082610f06565b949350505050565b80516000908190815b81811015610b3757848181518110610ad757610ad7610f41565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016600003610b1757610b10600484610d59565b9250610b25565b610b22601084610d59565b92505b80610b2f81610f70565b915050610abd565b50610aac82610440610d59565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215610b8557600080fd5b813567ffffffffffffffff80821115610b9d57600080fd5b818401915084601f830112610bb157600080fd5b813581811115610bc357610bc3610b44565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c0957610c09610b44565b81604052828152876020848701011115610c2257600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208083528351808285015260005b81811015610c6f57858101830151858201604001528201610c53565b81811115610c81576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060208284031215610cc757600080fd5b5051919050565b600060208284031215610ce057600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461075957600080fd5b600060208284031215610d1657600080fd5b815163ffffffff8116811461075957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610d6c57610d6c610d2a565b500190565b600063ffffffff80831681851681830481118215151615610d9457610d94610d2a565b02949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610dd557610dd5610d2a565b500290565b600181815b80851115610e3357817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610e1957610e19610d2a565b80851615610e2657918102915b93841c9390800290610ddf565b509250929050565b600082610e4a57506001610556565b81610e5757506000610556565b8160018114610e6d5760028114610e7757610e93565b6001915050610556565b60ff841115610e8857610e88610d2a565b50506001821b610556565b5060208310610133831016604e8410600b8410161715610eb6575081810a610556565b610ec08383610dda565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610ef257610ef2610d2a565b029392505050565b60006107598383610e3b565b600082610f3c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610fa157610fa1610d2a565b506001019056fea164736f6c634300080f000a","sourceMap":"1153:5825:144:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2951:202;;;:::i;:::-;;;160:25:357;;;148:2;133:18;2951:202:144;;;;;;;;2115:338;;;:::i;:::-;;1249:36;;1284:1;1249:36;;4561:82;1284:1;4561:82;;1835:196;;;;;;:::i;:::-;;:::i;1486:21::-;;;;;;;;;;;;1535:14:357;;1528:22;1510:41;;1498:2;1483:18;1486:21:144;1370:187:357;3568:124:144;;;:::i;1355:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4267:141::-;;;:::i;:::-;;;2397:10:357;2385:23;;;2367:42;;2355:2;2340:18;4267:141:144;2223:192:357;2746:86:144;2812:13;2746:86;;4022:133;;;:::i;4975:280::-;;;;;;:::i;:::-;;:::i;3268:196::-;;;:::i;3790:130::-;;;:::i;2951:202::-;2992:7;3020:9;;;;3019:10;3011:63;;;;;;;2622:2:357;3011:63:144;;;2604:21:357;2661:2;2641:18;;;2634:30;2700:34;2680:18;;;2673:62;2771:10;2751:18;;;2744:38;2799:19;;3011:63:144;;;;;;;;;1455:42:199;3091:53:144;;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3084:62;;2951:202;:::o;2115:338::-;1455:42:199;2191:57:144;;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2177:73;;:10;:73;;;2156:185;;;;;;;3538:2:357;2156:185:144;;;3520:21:357;3577:2;3557:18;;;3550:30;3616:34;3596:18;;;3589:62;3687:34;3667:18;;;3660:62;3759:3;3738:19;;;3731:32;3780:19;;2156:185:144;3336:469:357;2156:185:144;2359:9;;;;:18;2351:69;;;;;;;4012:2:357;2351:69:144;;;3994:21:357;4051:2;4031:18;;;4024:30;4090:34;4070:18;;;4063:62;4161:8;4141:18;;;4134:36;4187:19;;2351:69:144;3810:402:357;2351:69:144;2430:9;:16;;;;2442:4;2430:16;;;2115:338::o;1835:196::-;1896:7;1919:9;;;;1915:70;;;1951:23;1968:5;1951:16;:23::i;:::-;1944:30;1835:196;-1:-1:-1;;1835:196:144:o;1915:70::-;2001:23;2018:5;2001:16;:23::i;3568:124::-;3610:7;1455:42:199;3636:47:144;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4267:141;4317:6;1455:42:199;4342:57:144;;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4022:133::-;4068:6;1455:42:199;4093:53:144;;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4975:280;5038:7;5057:17;5077:22;5093:5;5077:15;:22::i;:::-;5113:9;;5057:42;;-1:-1:-1;5113:9:144;;5109:56;;;5145:9;4975:280;-1:-1:-1;;4975:280:144:o;5109:56::-;1455:42:199;5193:53:144;;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5181:67;;:9;:67;:::i;:::-;5174:74;4975:280;-1:-1:-1;;;4975:280:144:o;3268:196::-;3307:7;3335:9;;;;3334:10;3326:61;;;;;;;5026:2:357;3326:61:144;;;5008:21:357;5065:2;5045:18;;;5038:30;5104:34;5084:18;;;5077:62;5175:8;5155:18;;;5148:36;5201:19;;3326:61:144;4824:402:357;3326:61:144;1455:42:199;3404:51:144;;;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3790:130;3834:7;1455:42:199;3860:51:144;;;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6015:393;6084:7;6103:17;6123:22;6139:5;6123:15;:22::i;:::-;6103:42;;6155:21;6202:11;:9;:11::i;:::-;6179:15;:13;:15::i;:::-;:20;;6197:2;6179:20;:::i;:::-;:34;;;;;;:::i;:::-;6155:58;;6223:25;6273:13;:11;:13::i;:::-;6251:19;:17;:19::i;:::-;:35;;;;;;:::i;:::-;6223:63;-1:-1:-1;6296:11:144;6323:33;6223:63;6323:13;:33;:::i;:::-;6310:47;;:9;:47;:::i;:::-;6296:61;-1:-1:-1;6386:14:144;1284:1;6386:2;:14;:::i;:::-;6381:19;;:2;:19;:::i;:::-;6374:27;;:3;:27;:::i;:::-;6367:34;6015:393;-1:-1:-1;;;;;;6015:393:144:o;5468:351::-;5537:7;5556:17;5576:22;5592:5;5576:15;:22::i;:::-;5556:42;;5608:11;1455:42:199;5720:51:144;;;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5694:11;:9;:11::i;:::-;1455:42:199;5635:53:144;;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5623:67;;:9;:67;:::i;:::-;5622:83;;;;:::i;:::-;:151;;;;:::i;:::-;5608:165;-1:-1:-1;5797:14:144;1284:1;5797:2;:14;:::i;:::-;5790:22;;:3;:22;:::i;:::-;5783:29;5468:351;-1:-1:-1;;;;5468:351:144:o;6610:366::-;6741:12;;6678:7;;;;;6763:173;6787:6;6783:1;:10;6763:173;;;6818:5;6824:1;6818:8;;;;;;;;:::i;:::-;;;;;;;6830:1;6818:13;6814:112;;6851:10;6860:1;6851:10;;:::i;:::-;;;6814:112;;;6900:11;6909:2;6900:11;;:::i;:::-;;;6814:112;6795:3;;;;:::i;:::-;;;;6763:173;;;-1:-1:-1;6952:17:144;:5;6961:7;6952:17;:::i;196:184:357:-;248:77;245:1;238:88;345:4;342:1;335:15;369:4;366:1;359:15;385:980;453:6;506:2;494:9;485:7;481:23;477:32;474:52;;;522:1;519;512:12;474:52;562:9;549:23;591:18;632:2;624:6;621:14;618:34;;;648:1;645;638:12;618:34;686:6;675:9;671:22;661:32;;731:7;724:4;720:2;716:13;712:27;702:55;;753:1;750;743:12;702:55;789:2;776:16;811:2;807;804:10;801:36;;;817:18;;:::i;:::-;951:2;945:9;1013:4;1005:13;;856:66;1001:22;;;1025:2;997:31;993:40;981:53;;;1049:18;;;1069:22;;;1046:46;1043:72;;;1095:18;;:::i;:::-;1135:10;1131:2;1124:22;1170:2;1162:6;1155:18;1210:7;1205:2;1200;1196;1192:11;1188:20;1185:33;1182:53;;;1231:1;1228;1221:12;1182:53;1287:2;1282;1278;1274:11;1269:2;1261:6;1257:15;1244:46;1332:1;1310:15;;;1327:2;1306:24;1299:35;;;;-1:-1:-1;1314:6:357;385:980;-1:-1:-1;;;;;385:980:357:o;1562:656::-;1674:4;1703:2;1732;1721:9;1714:21;1764:6;1758:13;1807:6;1802:2;1791:9;1787:18;1780:34;1832:1;1842:140;1856:6;1853:1;1850:13;1842:140;;;1951:14;;;1947:23;;1941:30;1917:17;;;1936:2;1913:26;1906:66;1871:10;;1842:140;;;2000:6;1997:1;1994:13;1991:91;;;2070:1;2065:2;2056:6;2045:9;2041:22;2037:31;2030:42;1991:91;-1:-1:-1;2134:2:357;2122:15;2139:66;2118:88;2103:104;;;;2209:2;2099:113;;1562:656;-1:-1:-1;;;1562:656:357:o;2829:184::-;2899:6;2952:2;2940:9;2931:7;2927:23;2923:32;2920:52;;;2968:1;2965;2958:12;2920:52;-1:-1:-1;2991:16:357;;2829:184;-1:-1:-1;2829:184:357:o;3018:313::-;3088:6;3141:2;3129:9;3120:7;3116:23;3112:32;3109:52;;;3157:1;3154;3147:12;3109:52;3189:9;3183:16;3239:42;3232:5;3228:54;3221:5;3218:65;3208:93;;3297:1;3294;3287:12;4217:280;4286:6;4339:2;4327:9;4318:7;4314:23;4310:32;4307:52;;;4355:1;4352;4345:12;4307:52;4387:9;4381:16;4437:10;4430:5;4426:22;4419:5;4416:33;4406:61;;4463:1;4460;4453:12;4502:184;4554:77;4551:1;4544:88;4651:4;4648:1;4641:15;4675:4;4672:1;4665:15;4691:128;4731:3;4762:1;4758:6;4755:1;4752:13;4749:39;;;4768:18;;:::i;:::-;-1:-1:-1;4804:9:357;;4691:128::o;5231:262::-;5270:7;5302:10;5339:2;5336:1;5332:10;5369:2;5366:1;5362:10;5425:3;5421:2;5417:12;5412:3;5409:21;5402:3;5395:11;5388:19;5384:47;5381:73;;;5434:18;;:::i;:::-;5474:13;;5231:262;-1:-1:-1;;;;5231:262:357:o;5498:228::-;5538:7;5664:1;5596:66;5592:74;5589:1;5586:81;5581:1;5574:9;5567:17;5563:105;5560:131;;;5671:18;;:::i;:::-;-1:-1:-1;5711:9:357;;5498:228::o;5731:482::-;5820:1;5863:5;5820:1;5877:330;5898:7;5888:8;5885:21;5877:330;;;6017:4;5949:66;5945:77;5939:4;5936:87;5933:113;;;6026:18;;:::i;:::-;6076:7;6066:8;6062:22;6059:55;;;6096:16;;;;6059:55;6175:22;;;;6135:15;;;;5877:330;;;5881:3;5731:482;;;;;:::o;6218:866::-;6267:5;6297:8;6287:80;;-1:-1:-1;6338:1:357;6352:5;;6287:80;6386:4;6376:76;;-1:-1:-1;6423:1:357;6437:5;;6376:76;6468:4;6486:1;6481:59;;;;6554:1;6549:130;;;;6461:218;;6481:59;6511:1;6502:10;;6525:5;;;6549:130;6586:3;6576:8;6573:17;6570:43;;;6593:18;;:::i;:::-;-1:-1:-1;;6649:1:357;6635:16;;6664:5;;6461:218;;6763:2;6753:8;6750:16;6744:3;6738:4;6735:13;6731:36;6725:2;6715:8;6712:16;6707:2;6701:4;6698:12;6694:35;6691:77;6688:159;;;-1:-1:-1;6800:19:357;;;6832:5;;6688:159;6879:34;6904:8;6898:4;6879:34;:::i;:::-;7009:6;6941:66;6937:79;6928:7;6925:92;6922:118;;;7020:18;;:::i;:::-;7058:20;;6218:866;-1:-1:-1;;;6218:866:357:o;7089:131::-;7149:5;7178:36;7205:8;7199:4;7178:36;:::i;7225:274::-;7265:1;7291;7281:189;;7326:77;7323:1;7316:88;7427:4;7424:1;7417:15;7455:4;7452:1;7445:15;7281:189;-1:-1:-1;7484:9:357;;7225:274::o;7504:184::-;7556:77;7553:1;7546:88;7653:4;7650:1;7643:15;7677:4;7674:1;7667:15;7693:195;7732:3;7763:66;7756:5;7753:77;7750:103;;7833:18;;:::i;:::-;-1:-1:-1;7880:1:357;7869:13;;7693:195::o","linkReferences":{}},"methodIdentifiers":{"DECIMALS()":"2e0f2625","baseFee()":"6ef25c3a","baseFeeScalar()":"c5985918","blobBaseFee()":"f8206140","blobBaseFeeScalar()":"68d5dca6","decimals()":"313ce567","gasPrice()":"fe173b97","getL1Fee(bytes)":"49948e0e","getL1GasUsed(bytes)":"de26c4a1","isEcotone()":"4ef6e224","l1BaseFee()":"519b4bd3","overhead()":"0c18c162","scalar()":"f45e65d8","setEcotone()":"22b90ab3","version()":"54fd4d50"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DECIMALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseFeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blobBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blobBaseFeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"getL1Fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"getL1GasUsed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isEcotone\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1BaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"overhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setEcotone\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"custom:proxied\":\"@custom:predeploy 0x420000000000000000000000000000000000000F\",\"kind\":\"dev\",\"methods\":{\"baseFee()\":{\"returns\":{\"_0\":\"Current L2 base fee.\"}},\"baseFeeScalar()\":{\"returns\":{\"_0\":\"Current base fee scalar.\"}},\"blobBaseFee()\":{\"returns\":{\"_0\":\"Current blob base fee.\"}},\"blobBaseFeeScalar()\":{\"returns\":{\"_0\":\"Current blob base fee scalar.\"}},\"decimals()\":{\"custom:legacy\":\"@notice Retrieves the number of decimals used in the scalar.\",\"returns\":{\"_0\":\"Number of decimals used in the scalar.\"}},\"gasPrice()\":{\"returns\":{\"_0\":\"Current L2 gas price (base fee).\"}},\"getL1Fee(bytes)\":{\"params\":{\"_data\":\"Unsigned fully RLP-encoded transaction to get the L1 fee for.\"},\"returns\":{\"_0\":\"L1 fee that should be paid for the tx\"}},\"getL1GasUsed(bytes)\":{\"params\":{\"_data\":\"Unsigned fully RLP-encoded transaction to get the L1 gas for.\"},\"returns\":{\"_0\":\"Amount of L1 gas used to publish the transaction.\"}},\"l1BaseFee()\":{\"returns\":{\"_0\":\"Latest known L1 base fee.\"}},\"overhead()\":{\"custom:legacy\":\"@notice Retrieves the current fee overhead.\",\"returns\":{\"_0\":\"Current fee overhead.\"}},\"scalar()\":{\"custom:legacy\":\"@notice Retrieves the current fee scalar.\",\"returns\":{\"_0\":\"Current fee scalar.\"}}},\"stateVariables\":{\"version\":{\"custom:semver\":\"1.2.0\"}},\"title\":\"GasPriceOracle\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DECIMALS()\":{\"notice\":\"Number of decimals used in the scalar.\"},\"baseFee()\":{\"notice\":\"Retrieves the current base fee.\"},\"baseFeeScalar()\":{\"notice\":\"Retrieves the current base fee scalar.\"},\"blobBaseFee()\":{\"notice\":\"Retrieves the current blob base fee.\"},\"blobBaseFeeScalar()\":{\"notice\":\"Retrieves the current blob base fee scalar.\"},\"gasPrice()\":{\"notice\":\"Retrieves the current gas price (base fee).\"},\"getL1Fee(bytes)\":{\"notice\":\"Computes the L1 portion of the fee based on the size of the rlp encoded input transaction, the current L1 base fee, and the various dynamic parameters.\"},\"getL1GasUsed(bytes)\":{\"notice\":\"Computes the amount of L1 gas used for a transaction. Adds 68 bytes of padding to account for the fact that the input does not have a signature.\"},\"isEcotone()\":{\"notice\":\"Indicates whether the network has gone through the Ecotone upgrade.\"},\"l1BaseFee()\":{\"notice\":\"Retrieves the latest known L1 base fee.\"},\"setEcotone()\":{\"notice\":\"Set chain to be Ecotone chain (callable by depositor account)\"},\"version()\":{\"notice\":\"Semantic version.\"}},\"notice\":\"This contract maintains the variables responsible for computing the L1 portion of the total fee charged on L2. Before Bedrock, this contract held variables in state that were read during the state transition function to compute the L1 portion of the transaction fee. After Bedrock, this contract now simply proxies the L1Block contract, which has the values used to compute the L1 portion of the fee in its state. The contract exposes an API that is useful for knowing how large the L1 portion of the transaction fee will be. The following events were deprecated with Bedrock: - event OverheadUpdated(uint256 overhead); - event ScalarUpdated(uint256 scalar); - event DecimalsUpdated(uint256 decimals);\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/L2/GasPriceOracle.sol\":\"GasPriceOracle\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"src/L2/GasPriceOracle.sol\":{\"keccak256\":\"0x299b0722d301a4bc075ba09c73e55a98e3dc509444906f285e2ceba9c1fa69b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://17f7ffe4744b7bde10d61ce376ac0b497d40dab962b1c4c47bf7fd9784350cb7\",\"dweb:/ipfs/QmYp8vZtid8GBWrm7QSPxNCV9D4Mm9ELm29PGup7b6dJ7H\"]},\"src/L2/L1Block.sol\":{\"keccak256\":\"0x5819beb85b23c31c5f5d639977bf5d5cf6768975d6d3eecde78299f37ba04cd6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://55cdc404753dcc0cd9d3fac3554a4a16abd7dc39f43f7ae0ebcb0990fa52f7e7\",\"dweb:/ipfs/QmNXMUmNBmNCmL5k8tC1jJ6CmY2hZKJ7owFwuvhMKXr5fv\"]},\"src/libraries/Predeploys.sol\":{\"keccak256\":\"0x7b48b32b75e9ba0cd7f83b3304c6c1676dd8de20a5d40e8846bf7018ae9aff02\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7574fcc79c0d545b90071023aa81ee7880ab50b3057df598fa693bc4cf303663\",\"dweb:/ipfs/QmWLxHzgfaTJ7thfb7khXkTY5UtSBZ5VTUB4DaAXVw7DRe\"]},\"src/universal/ISemver.sol\":{\"keccak256\":\"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a\",\"dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.15+commit.e14f2714"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"view","type":"function","name":"DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"baseFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"baseFeeScalar","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"blobBaseFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"blobBaseFeeScalar","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"gasPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"view","type":"function","name":"getL1Fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"view","type":"function","name":"getL1GasUsed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"isEcotone","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"l1BaseFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"overhead","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"scalar","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setEcotone"},{"inputs":[],"stateMutability":"view","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]}],"devdoc":{"kind":"dev","methods":{"baseFee()":{"returns":{"_0":"Current L2 base fee."}},"baseFeeScalar()":{"returns":{"_0":"Current base fee scalar."}},"blobBaseFee()":{"returns":{"_0":"Current blob base fee."}},"blobBaseFeeScalar()":{"returns":{"_0":"Current blob base fee scalar."}},"decimals()":{"custom:legacy":"@notice Retrieves the number of decimals used in the scalar.","returns":{"_0":"Number of decimals used in the scalar."}},"gasPrice()":{"returns":{"_0":"Current L2 gas price (base fee)."}},"getL1Fee(bytes)":{"params":{"_data":"Unsigned fully RLP-encoded transaction to get the L1 fee for."},"returns":{"_0":"L1 fee that should be paid for the tx"}},"getL1GasUsed(bytes)":{"params":{"_data":"Unsigned fully RLP-encoded transaction to get the L1 gas for."},"returns":{"_0":"Amount of L1 gas used to publish the transaction."}},"l1BaseFee()":{"returns":{"_0":"Latest known L1 base fee."}},"overhead()":{"custom:legacy":"@notice Retrieves the current fee overhead.","returns":{"_0":"Current fee overhead."}},"scalar()":{"custom:legacy":"@notice Retrieves the current fee scalar.","returns":{"_0":"Current fee scalar."}}},"version":1},"userdoc":{"kind":"user","methods":{"DECIMALS()":{"notice":"Number of decimals used in the scalar."},"baseFee()":{"notice":"Retrieves the current base fee."},"baseFeeScalar()":{"notice":"Retrieves the current base fee scalar."},"blobBaseFee()":{"notice":"Retrieves the current blob base fee."},"blobBaseFeeScalar()":{"notice":"Retrieves the current blob base fee scalar."},"gasPrice()":{"notice":"Retrieves the current gas price (base fee)."},"getL1Fee(bytes)":{"notice":"Computes the L1 portion of the fee based on the size of the rlp encoded input transaction, the current L1 base fee, and the various dynamic parameters."},"getL1GasUsed(bytes)":{"notice":"Computes the amount of L1 gas used for a transaction. Adds 68 bytes of padding to account for the fact that the input does not have a signature."},"isEcotone()":{"notice":"Indicates whether the network has gone through the Ecotone upgrade."},"l1BaseFee()":{"notice":"Retrieves the latest known L1 base fee."},"setEcotone()":{"notice":"Set chain to be Ecotone chain (callable by depositor account)"},"version()":{"notice":"Semantic version."}},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","ds-test/=lib/forge-std/lib/ds-test/src/","forge-std/=lib/forge-std/src/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/L2/GasPriceOracle.sol":"GasPriceOracle"},"evmVersion":"london","libraries":{}},"sources":{"src/L2/GasPriceOracle.sol":{"keccak256":"0x299b0722d301a4bc075ba09c73e55a98e3dc509444906f285e2ceba9c1fa69b1","urls":["bzz-raw://17f7ffe4744b7bde10d61ce376ac0b497d40dab962b1c4c47bf7fd9784350cb7","dweb:/ipfs/QmYp8vZtid8GBWrm7QSPxNCV9D4Mm9ELm29PGup7b6dJ7H"],"license":"MIT"},"src/L2/L1Block.sol":{"keccak256":"0x5819beb85b23c31c5f5d639977bf5d5cf6768975d6d3eecde78299f37ba04cd6","urls":["bzz-raw://55cdc404753dcc0cd9d3fac3554a4a16abd7dc39f43f7ae0ebcb0990fa52f7e7","dweb:/ipfs/QmNXMUmNBmNCmL5k8tC1jJ6CmY2hZKJ7owFwuvhMKXr5fv"],"license":"MIT"},"src/libraries/Predeploys.sol":{"keccak256":"0x7b48b32b75e9ba0cd7f83b3304c6c1676dd8de20a5d40e8846bf7018ae9aff02","urls":["bzz-raw://7574fcc79c0d545b90071023aa81ee7880ab50b3057df598fa693bc4cf303663","dweb:/ipfs/QmWLxHzgfaTJ7thfb7khXkTY5UtSBZ5VTUB4DaAXVw7DRe"],"license":"MIT"},"src/universal/ISemver.sol":{"keccak256":"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44","urls":["bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a","dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":89850,"contract":"src/L2/GasPriceOracle.sol:GasPriceOracle","label":"isEcotone","offset":0,"slot":"0","type":"t_bool"}],"types":{"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"}}},"userdoc":{"version":1,"kind":"user","methods":{"DECIMALS()":{"notice":"Number of decimals used in the scalar."},"baseFee()":{"notice":"Retrieves the current base fee."},"baseFeeScalar()":{"notice":"Retrieves the current base fee scalar."},"blobBaseFee()":{"notice":"Retrieves the current blob base fee."},"blobBaseFeeScalar()":{"notice":"Retrieves the current blob base fee scalar."},"gasPrice()":{"notice":"Retrieves the current gas price (base fee)."},"getL1Fee(bytes)":{"notice":"Computes the L1 portion of the fee based on the size of the rlp encoded input transaction, the current L1 base fee, and the various dynamic parameters."},"getL1GasUsed(bytes)":{"notice":"Computes the amount of L1 gas used for a transaction. Adds 68 bytes of padding to account for the fact that the input does not have a signature."},"isEcotone()":{"notice":"Indicates whether the network has gone through the Ecotone upgrade."},"l1BaseFee()":{"notice":"Retrieves the latest known L1 base fee."},"setEcotone()":{"notice":"Set chain to be Ecotone chain (callable by depositor account)"},"version()":{"notice":"Semantic version."}},"notice":"This contract maintains the variables responsible for computing the L1 portion of the total fee charged on L2. Before Bedrock, this contract held variables in state that were read during the state transition function to compute the L1 portion of the transaction fee. After Bedrock, this contract now simply proxies the L1Block contract, which has the values used to compute the L1 portion of the fee in its state. The contract exposes an API that is useful for knowing how large the L1 portion of the transaction fee will be. The following events were deprecated with Bedrock: - event OverheadUpdated(uint256 overhead); - event ScalarUpdated(uint256 scalar); - event DecimalsUpdated(uint256 decimals);"},"devdoc":{"version":1,"kind":"dev","methods":{"baseFee()":{"returns":{"_0":"Current L2 base fee."}},"baseFeeScalar()":{"returns":{"_0":"Current base fee scalar."}},"blobBaseFee()":{"returns":{"_0":"Current blob base fee."}},"blobBaseFeeScalar()":{"returns":{"_0":"Current blob base fee scalar."}},"decimals()":{"returns":{"_0":"Number of decimals used in the scalar."}},"gasPrice()":{"returns":{"_0":"Current L2 gas price (base fee)."}},"getL1Fee(bytes)":{"params":{"_data":"Unsigned fully RLP-encoded transaction to get the L1 fee for."},"returns":{"_0":"L1 fee that should be paid for the tx"}},"getL1GasUsed(bytes)":{"params":{"_data":"Unsigned fully RLP-encoded transaction to get the L1 gas for."},"returns":{"_0":"Amount of L1 gas used to publish the transaction."}},"l1BaseFee()":{"returns":{"_0":"Latest known L1 base fee."}},"overhead()":{"returns":{"_0":"Current fee overhead."}},"scalar()":{"returns":{"_0":"Current fee scalar."}}},"title":"GasPriceOracle"},"ast":{"absolutePath":"src/L2/GasPriceOracle.sol","id":90203,"exportedSymbols":{"GasPriceOracle":[90202],"ISemver":[109417],"L1Block":[90318],"Predeploys":[104124]},"nodeType":"SourceUnit","src":"32:6947:144","nodes":[{"id":89830,"nodeType":"PragmaDirective","src":"32:23:144","nodes":[],"literals":["solidity","0.8",".15"]},{"id":89832,"nodeType":"ImportDirective","src":"57:52:144","nodes":[],"absolutePath":"src/universal/ISemver.sol","file":"src/universal/ISemver.sol","nameLocation":"-1:-1:-1","scope":90203,"sourceUnit":109418,"symbolAliases":[{"foreign":{"id":89831,"name":"ISemver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109417,"src":"66:7:144","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":89834,"nodeType":"ImportDirective","src":"110:58:144","nodes":[],"absolutePath":"src/libraries/Predeploys.sol","file":"src/libraries/Predeploys.sol","nameLocation":"-1:-1:-1","scope":90203,"sourceUnit":104125,"symbolAliases":[{"foreign":{"id":89833,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"119:10:144","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":89836,"nodeType":"ImportDirective","src":"169:45:144","nodes":[],"absolutePath":"src/L2/L1Block.sol","file":"src/L2/L1Block.sol","nameLocation":"-1:-1:-1","scope":90203,"sourceUnit":90319,"symbolAliases":[{"foreign":{"id":89835,"name":"L1Block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90318,"src":"178:7:144","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":90202,"nodeType":"ContractDefinition","src":"1153:5825:144","nodes":[{"id":89843,"nodeType":"VariableDeclaration","src":"1249:36:144","nodes":[],"constant":true,"documentation":{"id":89840,"nodeType":"StructuredDocumentation","src":"1194:50:144","text":"@notice Number of decimals used in the scalar."},"functionSelector":"2e0f2625","mutability":"constant","name":"DECIMALS","nameLocation":"1273:8:144","scope":90202,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":89841,"name":"uint256","nodeType":"ElementaryTypeName","src":"1249:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"36","id":89842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1284:1:144","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"visibility":"public"},{"id":89847,"nodeType":"VariableDeclaration","src":"1355:40:144","nodes":[],"baseFunctions":[109416],"constant":true,"documentation":{"id":89844,"nodeType":"StructuredDocumentation","src":"1292:58:144","text":"@notice Semantic version.\n @custom:semver 1.2.0"},"functionSelector":"54fd4d50","mutability":"constant","name":"version","nameLocation":"1378:7:144","scope":90202,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":89845,"name":"string","nodeType":"ElementaryTypeName","src":"1355:6:144","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"312e322e30","id":89846,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1388:7:144","typeDescriptions":{"typeIdentifier":"t_stringliteral_e374587661e69268352d25204d81b23ce801573f4b09f3545e69536dc085a37a","typeString":"literal_string \"1.2.0\""},"value":"1.2.0"},"visibility":"public"},{"id":89850,"nodeType":"VariableDeclaration","src":"1486:21:144","nodes":[],"constant":false,"documentation":{"id":89848,"nodeType":"StructuredDocumentation","src":"1402:79:144","text":"@notice Indicates whether the network has gone through the Ecotone upgrade."},"functionSelector":"4ef6e224","mutability":"mutable","name":"isEcotone","nameLocation":"1498:9:144","scope":90202,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":89849,"name":"bool","nodeType":"ElementaryTypeName","src":"1486:4:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"id":89870,"nodeType":"FunctionDefinition","src":"1835:196:144","nodes":[],"body":{"id":89869,"nodeType":"Block","src":"1905:126:144","nodes":[],"statements":[{"condition":{"id":89858,"name":"isEcotone","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":89850,"src":"1919:9:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":89864,"nodeType":"IfStatement","src":"1915:70:144","trueBody":{"id":89863,"nodeType":"Block","src":"1930:55:144","statements":[{"expression":{"arguments":[{"id":89860,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":89853,"src":"1968:5:144","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":89859,"name":"_getL1FeeEcotone","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90148,"src":"1951:16:144","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (bytes memory) view returns (uint256)"}},"id":89861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1951:23:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":89857,"id":89862,"nodeType":"Return","src":"1944:30:144"}]}},{"expression":{"arguments":[{"id":89866,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":89853,"src":"2018:5:144","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":89865,"name":"_getL1FeeBedrock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90097,"src":"2001:16:144","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (bytes memory) view returns (uint256)"}},"id":89867,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2001:23:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":89857,"id":89868,"nodeType":"Return","src":"1994:30:144"}]},"documentation":{"id":89851,"nodeType":"StructuredDocumentation","src":"1514:316:144","text":"@notice Computes the L1 portion of the fee based on the size of the rlp encoded input\n transaction, the current L1 base fee, and the various dynamic parameters.\n @param _data Unsigned fully RLP-encoded transaction to get the L1 fee for.\n @return L1 fee that should be paid for the tx"},"functionSelector":"49948e0e","implemented":true,"kind":"function","modifiers":[],"name":"getL1Fee","nameLocation":"1844:8:144","parameters":{"id":89854,"nodeType":"ParameterList","parameters":[{"constant":false,"id":89853,"mutability":"mutable","name":"_data","nameLocation":"1866:5:144","nodeType":"VariableDeclaration","scope":89870,"src":"1853:18:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":89852,"name":"bytes","nodeType":"ElementaryTypeName","src":"1853:5:144","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1852:20:144"},"returnParameters":{"id":89857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":89856,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":89870,"src":"1896:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":89855,"name":"uint256","nodeType":"ElementaryTypeName","src":"1896:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1895:9:144"},"scope":90202,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":89899,"nodeType":"FunctionDefinition","src":"2115:338:144","nodes":[],"body":{"id":89898,"nodeType":"Block","src":"2146:307:144","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":89883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":89875,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2177:3:144","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":89876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2177:10:144","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":89878,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"2199:10:144","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Predeploys_$104124_$","typeString":"type(library Predeploys)"}},"id":89879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"L1_BLOCK_ATTRIBUTES","nodeType":"MemberAccess","referencedDeclaration":104027,"src":"2199:30:144","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":89877,"name":"L1Block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90318,"src":"2191:7:144","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_L1Block_$90318_$","typeString":"type(contract L1Block)"}},"id":89880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2191:39:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_L1Block_$90318","typeString":"contract L1Block"}},"id":89881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DEPOSITOR_ACCOUNT","nodeType":"MemberAccess","referencedDeclaration":90213,"src":"2191:57:144","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":89882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2191:59:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2177:73:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"47617350726963654f7261636c653a206f6e6c7920746865206465706f7369746f72206163636f756e742063616e2073657420697345636f746f6e6520666c6167","id":89884,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2264:67:144","typeDescriptions":{"typeIdentifier":"t_stringliteral_a6497d84b1fcb87671ee1e7d83fa633da5bca5b69ea1e0c7b61a9ee91a07700c","typeString":"literal_string \"GasPriceOracle: only the depositor account can set isEcotone flag\""},"value":"GasPriceOracle: only the depositor account can set isEcotone flag"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a6497d84b1fcb87671ee1e7d83fa633da5bca5b69ea1e0c7b61a9ee91a07700c","typeString":"literal_string \"GasPriceOracle: only the depositor account can set isEcotone flag\""}],"id":89874,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2156:7:144","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":89885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2156:185:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":89886,"nodeType":"ExpressionStatement","src":"2156:185:144"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":89890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":89888,"name":"isEcotone","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":89850,"src":"2359:9:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":89889,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2372:5:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"2359:18:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"47617350726963654f7261636c653a2045636f746f6e6520616c726561647920616374697665","id":89891,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2379:40:144","typeDescriptions":{"typeIdentifier":"t_stringliteral_5923a2a5f6dac6b5f7274d34a2dd94f4b6ab3b4a09fa25eddc1c3f3c5ff8cc39","typeString":"literal_string \"GasPriceOracle: Ecotone already active\""},"value":"GasPriceOracle: Ecotone already active"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5923a2a5f6dac6b5f7274d34a2dd94f4b6ab3b4a09fa25eddc1c3f3c5ff8cc39","typeString":"literal_string \"GasPriceOracle: Ecotone already active\""}],"id":89887,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2351:7:144","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":89892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2351:69:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":89893,"nodeType":"ExpressionStatement","src":"2351:69:144"},{"expression":{"id":89896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":89894,"name":"isEcotone","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":89850,"src":"2430:9:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":89895,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2442:4:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"2430:16:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":89897,"nodeType":"ExpressionStatement","src":"2430:16:144"}]},"documentation":{"id":89871,"nodeType":"StructuredDocumentation","src":"2037:73:144","text":"@notice Set chain to be Ecotone chain (callable by depositor account)"},"functionSelector":"22b90ab3","implemented":true,"kind":"function","modifiers":[],"name":"setEcotone","nameLocation":"2124:10:144","parameters":{"id":89872,"nodeType":"ParameterList","parameters":[],"src":"2134:2:144"},"returnParameters":{"id":89873,"nodeType":"ParameterList","parameters":[],"src":"2146:0:144"},"scope":90202,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":89909,"nodeType":"FunctionDefinition","src":"2568:87:144","nodes":[],"body":{"id":89908,"nodeType":"Block","src":"2618:37:144","nodes":[],"statements":[{"expression":{"expression":{"id":89905,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2635:5:144","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":89906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"basefee","nodeType":"MemberAccess","src":"2635:13:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":89904,"id":89907,"nodeType":"Return","src":"2628:20:144"}]},"documentation":{"id":89900,"nodeType":"StructuredDocumentation","src":"2459:104:144","text":"@notice Retrieves the current gas price (base fee).\n @return Current L2 gas price (base fee)."},"functionSelector":"fe173b97","implemented":true,"kind":"function","modifiers":[],"name":"gasPrice","nameLocation":"2577:8:144","parameters":{"id":89901,"nodeType":"ParameterList","parameters":[],"src":"2585:2:144"},"returnParameters":{"id":89904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":89903,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":89909,"src":"2609:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":89902,"name":"uint256","nodeType":"ElementaryTypeName","src":"2609:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2608:9:144"},"scope":90202,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":89919,"nodeType":"FunctionDefinition","src":"2746:86:144","nodes":[],"body":{"id":89918,"nodeType":"Block","src":"2795:37:144","nodes":[],"statements":[{"expression":{"expression":{"id":89915,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2812:5:144","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":89916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"basefee","nodeType":"MemberAccess","src":"2812:13:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":89914,"id":89917,"nodeType":"Return","src":"2805:20:144"}]},"documentation":{"id":89910,"nodeType":"StructuredDocumentation","src":"2661:80:144","text":"@notice Retrieves the current base fee.\n @return Current L2 base fee."},"functionSelector":"6ef25c3a","implemented":true,"kind":"function","modifiers":[],"name":"baseFee","nameLocation":"2755:7:144","parameters":{"id":89911,"nodeType":"ParameterList","parameters":[],"src":"2762:2:144"},"returnParameters":{"id":89914,"nodeType":"ParameterList","parameters":[{"constant":false,"id":89913,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":89919,"src":"2786:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":89912,"name":"uint256","nodeType":"ElementaryTypeName","src":"2786:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2785:9:144"},"scope":90202,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":89939,"nodeType":"FunctionDefinition","src":"2951:202:144","nodes":[],"body":{"id":89938,"nodeType":"Block","src":"3001:152:144","nodes":[],"statements":[{"expression":{"arguments":[{"id":89927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3019:10:144","subExpression":{"id":89926,"name":"isEcotone","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":89850,"src":"3020:9:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"47617350726963654f7261636c653a206f7665726865616428292069732064657072656361746564","id":89928,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3031:42:144","typeDescriptions":{"typeIdentifier":"t_stringliteral_25a8f9debbed12be50767fc7babd300130a5ca203afc2f904ec6e57d0959fbbf","typeString":"literal_string \"GasPriceOracle: overhead() is deprecated\""},"value":"GasPriceOracle: overhead() is deprecated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_25a8f9debbed12be50767fc7babd300130a5ca203afc2f904ec6e57d0959fbbf","typeString":"literal_string \"GasPriceOracle: overhead() is deprecated\""}],"id":89925,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3011:7:144","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":89929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3011:63:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":89930,"nodeType":"ExpressionStatement","src":"3011:63:144"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":89932,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"3099:10:144","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Predeploys_$104124_$","typeString":"type(library Predeploys)"}},"id":89933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"L1_BLOCK_ATTRIBUTES","nodeType":"MemberAccess","referencedDeclaration":104027,"src":"3099:30:144","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":89931,"name":"L1Block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90318,"src":"3091:7:144","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_L1Block_$90318_$","typeString":"type(contract L1Block)"}},"id":89934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3091:39:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_L1Block_$90318","typeString":"contract L1Block"}},"id":89935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"l1FeeOverhead","nodeType":"MemberAccess","referencedDeclaration":90240,"src":"3091:53:144","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":89936,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3091:55:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":89924,"id":89937,"nodeType":"Return","src":"3084:62:144"}]},"documentation":{"id":89920,"nodeType":"StructuredDocumentation","src":"2838:108:144","text":"@custom:legacy\n @notice Retrieves the current fee overhead.\n @return Current fee overhead."},"functionSelector":"0c18c162","implemented":true,"kind":"function","modifiers":[],"name":"overhead","nameLocation":"2960:8:144","parameters":{"id":89921,"nodeType":"ParameterList","parameters":[],"src":"2968:2:144"},"returnParameters":{"id":89924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":89923,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":89939,"src":"2992:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":89922,"name":"uint256","nodeType":"ElementaryTypeName","src":"2992:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2991:9:144"},"scope":90202,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":89959,"nodeType":"FunctionDefinition","src":"3268:196:144","nodes":[],"body":{"id":89958,"nodeType":"Block","src":"3316:148:144","nodes":[],"statements":[{"expression":{"arguments":[{"id":89947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3334:10:144","subExpression":{"id":89946,"name":"isEcotone","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":89850,"src":"3335:9:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"47617350726963654f7261636c653a207363616c617228292069732064657072656361746564","id":89948,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3346:40:144","typeDescriptions":{"typeIdentifier":"t_stringliteral_fdcd11c052395e9256e13a80dcc0e9d323cf16472d08af1bed3d17258d3603d3","typeString":"literal_string \"GasPriceOracle: scalar() is deprecated\""},"value":"GasPriceOracle: scalar() is deprecated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fdcd11c052395e9256e13a80dcc0e9d323cf16472d08af1bed3d17258d3603d3","typeString":"literal_string \"GasPriceOracle: scalar() is deprecated\""}],"id":89945,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3326:7:144","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":89949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3326:61:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":89950,"nodeType":"ExpressionStatement","src":"3326:61:144"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":89952,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"3412:10:144","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Predeploys_$104124_$","typeString":"type(library Predeploys)"}},"id":89953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"L1_BLOCK_ATTRIBUTES","nodeType":"MemberAccess","referencedDeclaration":104027,"src":"3412:30:144","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":89951,"name":"L1Block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90318,"src":"3404:7:144","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_L1Block_$90318_$","typeString":"type(contract L1Block)"}},"id":89954,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3404:39:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_L1Block_$90318","typeString":"contract L1Block"}},"id":89955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"l1FeeScalar","nodeType":"MemberAccess","referencedDeclaration":90243,"src":"3404:51:144","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":89956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3404:53:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":89944,"id":89957,"nodeType":"Return","src":"3397:60:144"}]},"documentation":{"id":89940,"nodeType":"StructuredDocumentation","src":"3159:104:144","text":"@custom:legacy\n @notice Retrieves the current fee scalar.\n @return Current fee scalar."},"functionSelector":"f45e65d8","implemented":true,"kind":"function","modifiers":[],"name":"scalar","nameLocation":"3277:6:144","parameters":{"id":89941,"nodeType":"ParameterList","parameters":[],"src":"3283:2:144"},"returnParameters":{"id":89944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":89943,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":89959,"src":"3307:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":89942,"name":"uint256","nodeType":"ElementaryTypeName","src":"3307:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3306:9:144"},"scope":90202,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":89973,"nodeType":"FunctionDefinition","src":"3568:124:144","nodes":[],"body":{"id":89972,"nodeType":"Block","src":"3619:73:144","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":89966,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"3644:10:144","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Predeploys_$104124_$","typeString":"type(library Predeploys)"}},"id":89967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"L1_BLOCK_ATTRIBUTES","nodeType":"MemberAccess","referencedDeclaration":104027,"src":"3644:30:144","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":89965,"name":"L1Block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90318,"src":"3636:7:144","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_L1Block_$90318_$","typeString":"type(contract L1Block)"}},"id":89968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3636:39:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_L1Block_$90318","typeString":"contract L1Block"}},"id":89969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"basefee","nodeType":"MemberAccess","referencedDeclaration":90222,"src":"3636:47:144","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":89970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3636:49:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":89964,"id":89971,"nodeType":"Return","src":"3629:56:144"}]},"documentation":{"id":89960,"nodeType":"StructuredDocumentation","src":"3470:93:144","text":"@notice Retrieves the latest known L1 base fee.\n @return Latest known L1 base fee."},"functionSelector":"519b4bd3","implemented":true,"kind":"function","modifiers":[],"name":"l1BaseFee","nameLocation":"3577:9:144","parameters":{"id":89961,"nodeType":"ParameterList","parameters":[],"src":"3586:2:144"},"returnParameters":{"id":89964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":89963,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":89973,"src":"3610:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":89962,"name":"uint256","nodeType":"ElementaryTypeName","src":"3610:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3609:9:144"},"scope":90202,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":89987,"nodeType":"FunctionDefinition","src":"3790:130:144","nodes":[],"body":{"id":89986,"nodeType":"Block","src":"3843:77:144","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":89980,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"3868:10:144","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Predeploys_$104124_$","typeString":"type(library Predeploys)"}},"id":89981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"L1_BLOCK_ATTRIBUTES","nodeType":"MemberAccess","referencedDeclaration":104027,"src":"3868:30:144","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":89979,"name":"L1Block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90318,"src":"3860:7:144","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_L1Block_$90318_$","typeString":"type(contract L1Block)"}},"id":89982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3860:39:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_L1Block_$90318","typeString":"contract L1Block"}},"id":89983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"blobBaseFee","nodeType":"MemberAccess","referencedDeclaration":90246,"src":"3860:51:144","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":89984,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3860:53:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":89978,"id":89985,"nodeType":"Return","src":"3853:60:144"}]},"documentation":{"id":89974,"nodeType":"StructuredDocumentation","src":"3698:87:144","text":"@notice Retrieves the current blob base fee.\n @return Current blob base fee."},"functionSelector":"f8206140","implemented":true,"kind":"function","modifiers":[],"name":"blobBaseFee","nameLocation":"3799:11:144","parameters":{"id":89975,"nodeType":"ParameterList","parameters":[],"src":"3810:2:144"},"returnParameters":{"id":89978,"nodeType":"ParameterList","parameters":[{"constant":false,"id":89977,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":89987,"src":"3834:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":89976,"name":"uint256","nodeType":"ElementaryTypeName","src":"3834:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3833:9:144"},"scope":90202,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":90001,"nodeType":"FunctionDefinition","src":"4022:133:144","nodes":[],"body":{"id":90000,"nodeType":"Block","src":"4076:79:144","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":89994,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"4101:10:144","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Predeploys_$104124_$","typeString":"type(library Predeploys)"}},"id":89995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"L1_BLOCK_ATTRIBUTES","nodeType":"MemberAccess","referencedDeclaration":104027,"src":"4101:30:144","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":89993,"name":"L1Block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90318,"src":"4093:7:144","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_L1Block_$90318_$","typeString":"type(contract L1Block)"}},"id":89996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4093:39:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_L1Block_$90318","typeString":"contract L1Block"}},"id":89997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"baseFeeScalar","nodeType":"MemberAccess","referencedDeclaration":90234,"src":"4093:53:144","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint32_$","typeString":"function () view external returns (uint32)"}},"id":89998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4093:55:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":89992,"id":89999,"nodeType":"Return","src":"4086:62:144"}]},"documentation":{"id":89988,"nodeType":"StructuredDocumentation","src":"3926:91:144","text":"@notice Retrieves the current base fee scalar.\n @return Current base fee scalar."},"functionSelector":"c5985918","implemented":true,"kind":"function","modifiers":[],"name":"baseFeeScalar","nameLocation":"4031:13:144","parameters":{"id":89989,"nodeType":"ParameterList","parameters":[],"src":"4044:2:144"},"returnParameters":{"id":89992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":89991,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":90001,"src":"4068:6:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":89990,"name":"uint32","nodeType":"ElementaryTypeName","src":"4068:6:144","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"4067:8:144"},"scope":90202,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":90015,"nodeType":"FunctionDefinition","src":"4267:141:144","nodes":[],"body":{"id":90014,"nodeType":"Block","src":"4325:83:144","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":90008,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"4350:10:144","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Predeploys_$104124_$","typeString":"type(library Predeploys)"}},"id":90009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"L1_BLOCK_ATTRIBUTES","nodeType":"MemberAccess","referencedDeclaration":104027,"src":"4350:30:144","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":90007,"name":"L1Block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90318,"src":"4342:7:144","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_L1Block_$90318_$","typeString":"type(contract L1Block)"}},"id":90010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4342:39:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_L1Block_$90318","typeString":"contract L1Block"}},"id":90011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"blobBaseFeeScalar","nodeType":"MemberAccess","referencedDeclaration":90231,"src":"4342:57:144","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint32_$","typeString":"function () view external returns (uint32)"}},"id":90012,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4342:59:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":90006,"id":90013,"nodeType":"Return","src":"4335:66:144"}]},"documentation":{"id":90002,"nodeType":"StructuredDocumentation","src":"4161:101:144","text":"@notice Retrieves the current blob base fee scalar.\n @return Current blob base fee scalar."},"functionSelector":"68d5dca6","implemented":true,"kind":"function","modifiers":[],"name":"blobBaseFeeScalar","nameLocation":"4276:17:144","parameters":{"id":90003,"nodeType":"ParameterList","parameters":[],"src":"4293:2:144"},"returnParameters":{"id":90006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90005,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":90015,"src":"4317:6:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":90004,"name":"uint32","nodeType":"ElementaryTypeName","src":"4317:6:144","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"4316:8:144"},"scope":90202,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":90024,"nodeType":"FunctionDefinition","src":"4561:82:144","nodes":[],"body":{"id":90023,"nodeType":"Block","src":"4611:32:144","nodes":[],"statements":[{"expression":{"id":90021,"name":"DECIMALS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":89843,"src":"4628:8:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":90020,"id":90022,"nodeType":"Return","src":"4621:15:144"}]},"documentation":{"id":90016,"nodeType":"StructuredDocumentation","src":"4414:142:144","text":"@custom:legacy\n @notice Retrieves the number of decimals used in the scalar.\n @return Number of decimals used in the scalar."},"functionSelector":"313ce567","implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"4570:8:144","parameters":{"id":90017,"nodeType":"ParameterList","parameters":[],"src":"4578:2:144"},"returnParameters":{"id":90020,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90019,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":90024,"src":"4602:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90018,"name":"uint256","nodeType":"ElementaryTypeName","src":"4602:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4601:9:144"},"scope":90202,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":90053,"nodeType":"FunctionDefinition","src":"4975:280:144","nodes":[],"body":{"id":90052,"nodeType":"Block","src":"5047:208:144","nodes":[],"statements":[{"assignments":[90033],"declarations":[{"constant":false,"id":90033,"mutability":"mutable","name":"l1GasUsed","nameLocation":"5065:9:144","nodeType":"VariableDeclaration","scope":90052,"src":"5057:17:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90032,"name":"uint256","nodeType":"ElementaryTypeName","src":"5057:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":90037,"initialValue":{"arguments":[{"id":90035,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90027,"src":"5093:5:144","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":90034,"name":"_getCalldataGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90201,"src":"5077:15:144","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (bytes memory) pure returns (uint256)"}},"id":90036,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5077:22:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5057:42:144"},{"condition":{"id":90038,"name":"isEcotone","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":89850,"src":"5113:9:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":90042,"nodeType":"IfStatement","src":"5109:56:144","trueBody":{"id":90041,"nodeType":"Block","src":"5124:41:144","statements":[{"expression":{"id":90039,"name":"l1GasUsed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90033,"src":"5145:9:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":90031,"id":90040,"nodeType":"Return","src":"5138:16:144"}]}},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":90050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":90043,"name":"l1GasUsed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90033,"src":"5181:9:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":90045,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"5201:10:144","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Predeploys_$104124_$","typeString":"type(library Predeploys)"}},"id":90046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"L1_BLOCK_ATTRIBUTES","nodeType":"MemberAccess","referencedDeclaration":104027,"src":"5201:30:144","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":90044,"name":"L1Block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90318,"src":"5193:7:144","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_L1Block_$90318_$","typeString":"type(contract L1Block)"}},"id":90047,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5193:39:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_L1Block_$90318","typeString":"contract L1Block"}},"id":90048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"l1FeeOverhead","nodeType":"MemberAccess","referencedDeclaration":90240,"src":"5193:53:144","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":90049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5193:55:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5181:67:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":90031,"id":90051,"nodeType":"Return","src":"5174:74:144"}]},"documentation":{"id":90025,"nodeType":"StructuredDocumentation","src":"4649:321:144","text":"@notice Computes the amount of L1 gas used for a transaction. Adds 68 bytes\n of padding to account for the fact that the input does not have a signature.\n @param _data Unsigned fully RLP-encoded transaction to get the L1 gas for.\n @return Amount of L1 gas used to publish the transaction."},"functionSelector":"de26c4a1","implemented":true,"kind":"function","modifiers":[],"name":"getL1GasUsed","nameLocation":"4984:12:144","parameters":{"id":90028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90027,"mutability":"mutable","name":"_data","nameLocation":"5010:5:144","nodeType":"VariableDeclaration","scope":90053,"src":"4997:18:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":90026,"name":"bytes","nodeType":"ElementaryTypeName","src":"4997:5:144","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4996:20:144"},"returnParameters":{"id":90031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90030,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":90053,"src":"5038:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90029,"name":"uint256","nodeType":"ElementaryTypeName","src":"5038:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5037:9:144"},"scope":90202,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":90097,"nodeType":"FunctionDefinition","src":"5468:351:144","nodes":[],"body":{"id":90096,"nodeType":"Block","src":"5546:273:144","nodes":[],"statements":[{"assignments":[90062],"declarations":[{"constant":false,"id":90062,"mutability":"mutable","name":"l1GasUsed","nameLocation":"5564:9:144","nodeType":"VariableDeclaration","scope":90096,"src":"5556:17:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90061,"name":"uint256","nodeType":"ElementaryTypeName","src":"5556:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":90066,"initialValue":{"arguments":[{"id":90064,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90056,"src":"5592:5:144","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":90063,"name":"_getCalldataGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90201,"src":"5576:15:144","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (bytes memory) pure returns (uint256)"}},"id":90065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5576:22:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5556:42:144"},{"assignments":[90068],"declarations":[{"constant":false,"id":90068,"mutability":"mutable","name":"fee","nameLocation":"5616:3:144","nodeType":"VariableDeclaration","scope":90096,"src":"5608:11:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90067,"name":"uint256","nodeType":"ElementaryTypeName","src":"5608:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":90088,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":90087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":90080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":90076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":90069,"name":"l1GasUsed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90062,"src":"5623:9:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":90071,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"5643:10:144","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Predeploys_$104124_$","typeString":"type(library Predeploys)"}},"id":90072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"L1_BLOCK_ATTRIBUTES","nodeType":"MemberAccess","referencedDeclaration":104027,"src":"5643:30:144","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":90070,"name":"L1Block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90318,"src":"5635:7:144","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_L1Block_$90318_$","typeString":"type(contract L1Block)"}},"id":90073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5635:39:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_L1Block_$90318","typeString":"contract L1Block"}},"id":90074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"l1FeeOverhead","nodeType":"MemberAccess","referencedDeclaration":90240,"src":"5635:53:144","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":90075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5635:55:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5623:67:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":90077,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5622:69:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":90078,"name":"l1BaseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":89973,"src":"5694:9:144","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":90079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5694:11:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5622:83:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":90082,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"5728:10:144","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Predeploys_$104124_$","typeString":"type(library Predeploys)"}},"id":90083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"L1_BLOCK_ATTRIBUTES","nodeType":"MemberAccess","referencedDeclaration":104027,"src":"5728:30:144","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":90081,"name":"L1Block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90318,"src":"5720:7:144","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_L1Block_$90318_$","typeString":"type(contract L1Block)"}},"id":90084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5720:39:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_L1Block_$90318","typeString":"contract L1Block"}},"id":90085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"l1FeeScalar","nodeType":"MemberAccess","referencedDeclaration":90243,"src":"5720:51:144","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":90086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5720:53:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5622:151:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5608:165:144"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":90094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":90089,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90068,"src":"5790:3:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":90092,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":90090,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5797:2:144","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":90091,"name":"DECIMALS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":89843,"src":"5803:8:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5797:14:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":90093,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5796:16:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5790:22:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":90060,"id":90095,"nodeType":"Return","src":"5783:29:144"}]},"documentation":{"id":90054,"nodeType":"StructuredDocumentation","src":"5261:202:144","text":"@notice Computation of the L1 portion of the fee for Bedrock.\n @param _data Unsigned fully RLP-encoded transaction to get the L1 fee for.\n @return L1 fee that should be paid for the tx"},"implemented":true,"kind":"function","modifiers":[],"name":"_getL1FeeBedrock","nameLocation":"5477:16:144","parameters":{"id":90057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90056,"mutability":"mutable","name":"_data","nameLocation":"5507:5:144","nodeType":"VariableDeclaration","scope":90097,"src":"5494:18:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":90055,"name":"bytes","nodeType":"ElementaryTypeName","src":"5494:5:144","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5493:20:144"},"returnParameters":{"id":90060,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90059,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":90097,"src":"5537:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90058,"name":"uint256","nodeType":"ElementaryTypeName","src":"5537:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5536:9:144"},"scope":90202,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":90148,"nodeType":"FunctionDefinition","src":"6015:393:144","nodes":[],"body":{"id":90147,"nodeType":"Block","src":"6093:315:144","nodes":[],"statements":[{"assignments":[90106],"declarations":[{"constant":false,"id":90106,"mutability":"mutable","name":"l1GasUsed","nameLocation":"6111:9:144","nodeType":"VariableDeclaration","scope":90147,"src":"6103:17:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90105,"name":"uint256","nodeType":"ElementaryTypeName","src":"6103:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":90110,"initialValue":{"arguments":[{"id":90108,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90100,"src":"6139:5:144","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":90107,"name":"_getCalldataGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90201,"src":"6123:15:144","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (bytes memory) pure returns (uint256)"}},"id":90109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6123:22:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6103:42:144"},{"assignments":[90112],"declarations":[{"constant":false,"id":90112,"mutability":"mutable","name":"scaledBaseFee","nameLocation":"6163:13:144","nodeType":"VariableDeclaration","scope":90147,"src":"6155:21:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90111,"name":"uint256","nodeType":"ElementaryTypeName","src":"6155:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":90120,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":90119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":90116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":90113,"name":"baseFeeScalar","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90001,"src":"6179:13:144","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint32_$","typeString":"function () view returns (uint32)"}},"id":90114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6179:15:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3136","id":90115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6197:2:144","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"6179:20:144","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":90117,"name":"l1BaseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":89973,"src":"6202:9:144","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":90118,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6202:11:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6179:34:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6155:58:144"},{"assignments":[90122],"declarations":[{"constant":false,"id":90122,"mutability":"mutable","name":"scaledBlobBaseFee","nameLocation":"6231:17:144","nodeType":"VariableDeclaration","scope":90147,"src":"6223:25:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90121,"name":"uint256","nodeType":"ElementaryTypeName","src":"6223:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":90128,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":90127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":90123,"name":"blobBaseFeeScalar","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90015,"src":"6251:17:144","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint32_$","typeString":"function () view returns (uint32)"}},"id":90124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6251:19:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":90125,"name":"blobBaseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":89987,"src":"6273:11:144","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":90126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6273:13:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6251:35:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6223:63:144"},{"assignments":[90130],"declarations":[{"constant":false,"id":90130,"mutability":"mutable","name":"fee","nameLocation":"6304:3:144","nodeType":"VariableDeclaration","scope":90147,"src":"6296:11:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90129,"name":"uint256","nodeType":"ElementaryTypeName","src":"6296:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":90137,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":90136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":90131,"name":"l1GasUsed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90106,"src":"6310:9:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":90134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":90132,"name":"scaledBaseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90112,"src":"6323:13:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":90133,"name":"scaledBlobBaseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90122,"src":"6339:17:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6323:33:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":90135,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6322:35:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6310:47:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6296:61:144"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":90145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":90138,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90130,"src":"6374:3:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":90143,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3136","id":90139,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6381:2:144","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":90142,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":90140,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6386:2:144","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":90141,"name":"DECIMALS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":89843,"src":"6392:8:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6386:14:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6381:19:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":90144,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6380:21:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6374:27:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":90104,"id":90146,"nodeType":"Return","src":"6367:34:144"}]},"documentation":{"id":90098,"nodeType":"StructuredDocumentation","src":"5825:185:144","text":"@notice L1 portion of the fee after Ecotone.\n @param _data Unsigned fully RLP-encoded transaction to get the L1 fee for.\n @return L1 fee that should be paid for the tx"},"implemented":true,"kind":"function","modifiers":[],"name":"_getL1FeeEcotone","nameLocation":"6024:16:144","parameters":{"id":90101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90100,"mutability":"mutable","name":"_data","nameLocation":"6054:5:144","nodeType":"VariableDeclaration","scope":90148,"src":"6041:18:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":90099,"name":"bytes","nodeType":"ElementaryTypeName","src":"6041:5:144","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6040:20:144"},"returnParameters":{"id":90104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90103,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":90148,"src":"6084:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90102,"name":"uint256","nodeType":"ElementaryTypeName","src":"6084:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6083:9:144"},"scope":90202,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":90201,"nodeType":"FunctionDefinition","src":"6610:366:144","nodes":[],"body":{"id":90200,"nodeType":"Block","src":"6687:289:144","nodes":[],"statements":[{"assignments":[90157],"declarations":[{"constant":false,"id":90157,"mutability":"mutable","name":"total","nameLocation":"6705:5:144","nodeType":"VariableDeclaration","scope":90200,"src":"6697:13:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90156,"name":"uint256","nodeType":"ElementaryTypeName","src":"6697:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":90159,"initialValue":{"hexValue":"30","id":90158,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6713:1:144","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6697:17:144"},{"assignments":[90161],"declarations":[{"constant":false,"id":90161,"mutability":"mutable","name":"length","nameLocation":"6732:6:144","nodeType":"VariableDeclaration","scope":90200,"src":"6724:14:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90160,"name":"uint256","nodeType":"ElementaryTypeName","src":"6724:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":90164,"initialValue":{"expression":{"id":90162,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90151,"src":"6741:5:144","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":90163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"6741:12:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6724:29:144"},{"body":{"id":90191,"nodeType":"Block","src":"6800:136:144","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":90179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":90175,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90151,"src":"6818:5:144","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":90177,"indexExpression":{"id":90176,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90166,"src":"6824:1:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6818:8:144","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":90178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6830:1:144","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6818:13:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":90189,"nodeType":"Block","src":"6882:44:144","statements":[{"expression":{"id":90187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":90185,"name":"total","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90157,"src":"6900:5:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3136","id":90186,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6909:2:144","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"6900:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":90188,"nodeType":"ExpressionStatement","src":"6900:11:144"}]},"id":90190,"nodeType":"IfStatement","src":"6814:112:144","trueBody":{"id":90184,"nodeType":"Block","src":"6833:43:144","statements":[{"expression":{"id":90182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":90180,"name":"total","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90157,"src":"6851:5:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"34","id":90181,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6860:1:144","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"6851:10:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":90183,"nodeType":"ExpressionStatement","src":"6851:10:144"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":90171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":90169,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90166,"src":"6783:1:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":90170,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90161,"src":"6787:6:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6783:10:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":90192,"initializationExpression":{"assignments":[90166],"declarations":[{"constant":false,"id":90166,"mutability":"mutable","name":"i","nameLocation":"6776:1:144","nodeType":"VariableDeclaration","scope":90192,"src":"6768:9:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90165,"name":"uint256","nodeType":"ElementaryTypeName","src":"6768:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":90168,"initialValue":{"hexValue":"30","id":90167,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6780:1:144","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6768:13:144"},"loopExpression":{"expression":{"id":90173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"6795:3:144","subExpression":{"id":90172,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90166,"src":"6795:1:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":90174,"nodeType":"ExpressionStatement","src":"6795:3:144"},"nodeType":"ForStatement","src":"6763:173:144"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":90198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":90193,"name":"total","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90157,"src":"6952:5:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_1088_by_1","typeString":"int_const 1088"},"id":90196,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3638","id":90194,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6961:2:144","typeDescriptions":{"typeIdentifier":"t_rational_68_by_1","typeString":"int_const 68"},"value":"68"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3136","id":90195,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6966:2:144","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"6961:7:144","typeDescriptions":{"typeIdentifier":"t_rational_1088_by_1","typeString":"int_const 1088"}}],"id":90197,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6960:9:144","typeDescriptions":{"typeIdentifier":"t_rational_1088_by_1","typeString":"int_const 1088"}},"src":"6952:17:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":90155,"id":90199,"nodeType":"Return","src":"6945:24:144"}]},"documentation":{"id":90149,"nodeType":"StructuredDocumentation","src":"6414:191:144","text":"@notice L1 gas estimation calculation.\n @param _data Unsigned fully RLP-encoded transaction to get the L1 gas for.\n @return Amount of L1 gas used to publish the transaction."},"implemented":true,"kind":"function","modifiers":[],"name":"_getCalldataGas","nameLocation":"6619:15:144","parameters":{"id":90152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90151,"mutability":"mutable","name":"_data","nameLocation":"6648:5:144","nodeType":"VariableDeclaration","scope":90201,"src":"6635:18:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":90150,"name":"bytes","nodeType":"ElementaryTypeName","src":"6635:5:144","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6634:20:144"},"returnParameters":{"id":90155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90154,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":90201,"src":"6678:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90153,"name":"uint256","nodeType":"ElementaryTypeName","src":"6678:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6677:9:144"},"scope":90202,"stateMutability":"pure","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":89838,"name":"ISemver","nodeType":"IdentifierPath","referencedDeclaration":109417,"src":"1180:7:144"},"id":89839,"nodeType":"InheritanceSpecifier","src":"1180:7:144"}],"canonicalName":"GasPriceOracle","contractDependencies":[],"contractKind":"contract","documentation":{"id":89837,"nodeType":"StructuredDocumentation","src":"216:937:144","text":"@custom:proxied\n @custom:predeploy 0x420000000000000000000000000000000000000F\n @title GasPriceOracle\n @notice This contract maintains the variables responsible for computing the L1 portion of the\n total fee charged on L2. Before Bedrock, this contract held variables in state that were\n read during the state transition function to compute the L1 portion of the transaction\n fee. After Bedrock, this contract now simply proxies the L1Block contract, which has\n the values used to compute the L1 portion of the fee in its state.\n The contract exposes an API that is useful for knowing how large the L1 portion of the\n transaction fee will be. The following events were deprecated with Bedrock:\n - event OverheadUpdated(uint256 overhead);\n - event ScalarUpdated(uint256 scalar);\n - event DecimalsUpdated(uint256 decimals);"},"fullyImplemented":true,"linearizedBaseContracts":[90202,109417],"name":"GasPriceOracle","nameLocation":"1162:14:144","scope":90203,"usedErrors":[]}],"license":"MIT"},"id":144} \ No newline at end of file diff --git a/packages/sdk/src/forge-artifacts/L1Block.json b/packages/sdk/src/forge-artifacts/L1Block.json deleted file mode 100644 index c62500ca1155..000000000000 --- a/packages/sdk/src/forge-artifacts/L1Block.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"function","name":"DEPOSITOR_ACCOUNT","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"baseFeeScalar","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"basefee","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"batcherHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"blobBaseFee","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"blobBaseFeeScalar","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"hash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"l1FeeOverhead","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"l1FeeScalar","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"number","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"sequenceNumber","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"setL1BlockValues","inputs":[{"name":"_number","type":"uint64","internalType":"uint64"},{"name":"_timestamp","type":"uint64","internalType":"uint64"},{"name":"_basefee","type":"uint256","internalType":"uint256"},{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_sequenceNumber","type":"uint64","internalType":"uint64"},{"name":"_batcherHash","type":"bytes32","internalType":"bytes32"},{"name":"_l1FeeOverhead","type":"uint256","internalType":"uint256"},{"name":"_l1FeeScalar","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setL1BlockValuesEcotone","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"timestamp","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"}],"bytecode":{"object":"0x608060405234801561001057600080fd5b5061053e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638381f58a11610097578063c598591811610066578063c598591814610229578063e591b28214610249578063e81b2c6d14610289578063f82061401461029257600080fd5b80638381f58a146101e35780638b239f73146101f75780639e8c496614610200578063b80777ea1461020957600080fd5b806354fd4d50116100d357806354fd4d50146101335780635cf249691461017c57806364ca23ef1461018557806368d5dca6146101b257600080fd5b8063015d8eb9146100fa57806309bd5a601461010f578063440a5e201461012b575b600080fd5b61010d61010836600461044c565b61029b565b005b61011860025481565b6040519081526020015b60405180910390f35b61010d6103da565b61016f6040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161012291906104be565b61011860015481565b6003546101999067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610122565b6003546101ce9068010000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610122565b6000546101999067ffffffffffffffff1681565b61011860055481565b61011860065481565b6000546101999068010000000000000000900467ffffffffffffffff1681565b6003546101ce906c01000000000000000000000000900463ffffffff1681565b61026473deaddeaddeaddeaddeaddeaddeaddeaddead000181565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610122565b61011860045481565b61011860075481565b3373deaddeaddeaddeaddeaddeaddeaddeaddead000114610342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4c31426c6f636b3a206f6e6c7920746865206465706f7369746f72206163636f60448201527f756e742063616e20736574204c3120626c6f636b2076616c7565730000000000606482015260840160405180910390fd5b6000805467ffffffffffffffff98891668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116998916999099179890981790975560019490945560029290925560038054919094167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009190911617909255600491909155600555600655565b3373deaddeaddeaddeaddeaddeaddeaddeaddead00011461040357633cc50b456000526004601cfd5b60043560801c60035560143560801c600055602435600155604435600755606435600255608435600455565b803567ffffffffffffffff8116811461044757600080fd5b919050565b600080600080600080600080610100898b03121561046957600080fd5b6104728961042f565b975061048060208a0161042f565b9650604089013595506060890135945061049c60808a0161042f565b979a969950949793969560a0850135955060c08501359460e001359350915050565b600060208083528351808285015260005b818110156104eb578581018301518582016040015282016104cf565b818111156104fd576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea164736f6c634300080f000a","sourceMap":"588:4256:145:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80638381f58a11610097578063c598591811610066578063c598591814610229578063e591b28214610249578063e81b2c6d14610289578063f82061401461029257600080fd5b80638381f58a146101e35780638b239f73146101f75780639e8c496614610200578063b80777ea1461020957600080fd5b806354fd4d50116100d357806354fd4d50146101335780635cf249691461017c57806364ca23ef1461018557806368d5dca6146101b257600080fd5b8063015d8eb9146100fa57806309bd5a601461010f578063440a5e201461012b575b600080fd5b61010d61010836600461044c565b61029b565b005b61011860025481565b6040519081526020015b60405180910390f35b61010d6103da565b61016f6040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161012291906104be565b61011860015481565b6003546101999067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610122565b6003546101ce9068010000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610122565b6000546101999067ffffffffffffffff1681565b61011860055481565b61011860065481565b6000546101999068010000000000000000900467ffffffffffffffff1681565b6003546101ce906c01000000000000000000000000900463ffffffff1681565b61026473deaddeaddeaddeaddeaddeaddeaddeaddead000181565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610122565b61011860045481565b61011860075481565b3373deaddeaddeaddeaddeaddeaddeaddeaddead000114610342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4c31426c6f636b3a206f6e6c7920746865206465706f7369746f72206163636f60448201527f756e742063616e20736574204c3120626c6f636b2076616c7565730000000000606482015260840160405180910390fd5b6000805467ffffffffffffffff98891668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116998916999099179890981790975560019490945560029290925560038054919094167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009190911617909255600491909155600555600655565b3373deaddeaddeaddeaddeaddeaddeaddeaddead00011461040357633cc50b456000526004601cfd5b60043560801c60035560143560801c600055602435600155604435600755606435600255608435600455565b803567ffffffffffffffff8116811461044757600080fd5b919050565b600080600080600080600080610100898b03121561046957600080fd5b6104728961042f565b975061048060208a0161042f565b9650604089013595506060890135945061049c60808a0161042f565b979a969950949793969560a0850135955060c08501359460e001359350915050565b600060208083528351808285015260005b818110156104eb578581018301518582016040015282016104cf565b818111156104fd576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea164736f6c634300080f000a","sourceMap":"588:4256:145:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2494:660;;;;;;:::i;:::-;;:::i;:::-;;1071:19;;;;;;;;;1014:25:357;;;1002:2;987:18;1071:19:145;;;;;;;;3886:956;;;:::i;1961:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1001:22::-;;;;;;1156:28;;;;;;;;;;;;2067:18:357;2055:31;;;2037:50;;2025:2;2010:18;1156:28:145;1893:200:357;1298:31:145;;;;;;;;;;;;;;;2272:10:357;2260:23;;;2242:42;;2230:2;2215:18;1298:31:145;2098:192:357;840:20:145;;;;;;;;;1680:28;;;;;;1821:26;;;;;;931:23;;;;;;;;;;;;1438:27;;;;;;;;;;;;680:86;;724:42;680:86;;;;;2471:42:357;2459:55;;;2441:74;;2429:2;2414:18;680:86:145;2295:226:357;1539:26:145;;;;;;1899;;;;;;2494:660;2789:10;724:42;2789:31;2781:103;;;;;;;2728:2:357;2781:103:145;;;2710:21:357;2767:2;2747:18;;;2740:30;2806:34;2786:18;;;2779:62;2877:29;2857:18;;;2850:57;2924:19;;2781:103:145;;;;;;;;2895:6;:16;;;2921:22;;;;;;;;;2895:16;;;2921:22;;;;;;;;;;;2895:16;2953:18;;;;2981:4;:12;;;;3003:14;:32;;;;;;2895:16;3003:32;;;;;;;;3045:11;:26;;;;3081:13;:30;3121:11;:26;2494:660::o;3886:956::-;4036:8;4046:17;4029:233;;;4096:10;4090:4;4083:24;4194:4;4188;4181:18;4029:233;4453:1;4440:15;4435:3;4431:25;4410:19;4403:54;4566:2;4553:16;4548:3;4544:26;4531:11;4524:47;4618:2;4605:16;4591:12;4584:38;4684:2;4671:16;4653;4646:42;4743:3;4730:17;4719:9;4712:36;4810:3;4797:17;4779:16;4772:43;3886:956::o;14:171:357:-;81:20;;141:18;130:30;;120:41;;110:69;;175:1;172;165:12;110:69;14:171;;;:::o;190:673::-;309:6;317;325;333;341;349;357;365;418:3;406:9;397:7;393:23;389:33;386:53;;;435:1;432;425:12;386:53;458:28;476:9;458:28;:::i;:::-;448:38;;505:37;538:2;527:9;523:18;505:37;:::i;:::-;495:47;;589:2;578:9;574:18;561:32;551:42;;640:2;629:9;625:18;612:32;602:42;;663:38;696:3;685:9;681:19;663:38;:::i;:::-;190:673;;;;-1:-1:-1;190:673:357;;;;653:48;748:3;733:19;;720:33;;-1:-1:-1;800:3:357;785:19;;772:33;;852:3;837:19;824:33;;-1:-1:-1;190:673:357;-1:-1:-1;;190:673:357:o;1050:656::-;1162:4;1191:2;1220;1209:9;1202:21;1252:6;1246:13;1295:6;1290:2;1279:9;1275:18;1268:34;1320:1;1330:140;1344:6;1341:1;1338:13;1330:140;;;1439:14;;;1435:23;;1429:30;1405:17;;;1424:2;1401:26;1394:66;1359:10;;1330:140;;;1488:6;1485:1;1482:13;1479:91;;;1558:1;1553:2;1544:6;1533:9;1529:22;1525:31;1518:42;1479:91;-1:-1:-1;1622:2:357;1610:15;1627:66;1606:88;1591:104;;;;1697:2;1587:113;;1050:656;-1:-1:-1;;;1050:656:357:o","linkReferences":{}},"methodIdentifiers":{"DEPOSITOR_ACCOUNT()":"e591b282","baseFeeScalar()":"c5985918","basefee()":"5cf24969","batcherHash()":"e81b2c6d","blobBaseFee()":"f8206140","blobBaseFeeScalar()":"68d5dca6","hash()":"09bd5a60","l1FeeOverhead()":"8b239f73","l1FeeScalar()":"9e8c4966","number()":"8381f58a","sequenceNumber()":"64ca23ef","setL1BlockValues(uint64,uint64,uint256,bytes32,uint64,bytes32,uint256,uint256)":"015d8eb9","setL1BlockValuesEcotone()":"440a5e20","timestamp()":"b80777ea","version()":"54fd4d50"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DEPOSITOR_ACCOUNT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseFeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"basefee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blobBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blobBaseFeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1FeeOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1FeeScalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"number\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_number\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"_timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"_basefee\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l1FeeOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l1FeeScalar\",\"type\":\"uint256\"}],\"name\":\"setL1BlockValues\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setL1BlockValuesEcotone\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"timestamp\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"custom:proxied\":\"@custom:predeploy 0x4200000000000000000000000000000000000015\",\"kind\":\"dev\",\"methods\":{\"setL1BlockValues(uint64,uint64,uint256,bytes32,uint64,bytes32,uint256,uint256)\":{\"custom:legacy\":\"@notice Updates the L1 block values.\",\"params\":{\"_basefee\":\"L1 basefee.\",\"_batcherHash\":\"Versioned hash to authenticate batcher by.\",\"_hash\":\"L1 blockhash.\",\"_l1FeeOverhead\":\"L1 fee overhead.\",\"_l1FeeScalar\":\"L1 fee scalar.\",\"_number\":\"L1 blocknumber.\",\"_sequenceNumber\":\"Number of L2 blocks since epoch start.\",\"_timestamp\":\"L1 timestamp.\"}}},\"stateVariables\":{\"l1FeeOverhead\":{\"custom:legacy\":\"\"},\"l1FeeScalar\":{\"custom:legacy\":\"\"},\"version\":{\"custom:semver\":\"1.2.0\"}},\"title\":\"L1Block\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DEPOSITOR_ACCOUNT()\":{\"notice\":\"Address of the special depositor account.\"},\"baseFeeScalar()\":{\"notice\":\"The scalar value applied to the L1 base fee portion of the blob-capable L1 cost func.\"},\"basefee()\":{\"notice\":\"The latest L1 base fee.\"},\"batcherHash()\":{\"notice\":\"The versioned hash to authenticate the batcher by.\"},\"blobBaseFee()\":{\"notice\":\"The latest L1 blob base fee.\"},\"blobBaseFeeScalar()\":{\"notice\":\"The scalar value applied to the L1 blob base fee portion of the blob-capable L1 cost func.\"},\"hash()\":{\"notice\":\"The latest L1 blockhash.\"},\"l1FeeOverhead()\":{\"notice\":\"The overhead value applied to the L1 portion of the transaction fee.\"},\"l1FeeScalar()\":{\"notice\":\"The scalar value applied to the L1 portion of the transaction fee.\"},\"number()\":{\"notice\":\"The latest L1 block number known by the L2 system.\"},\"sequenceNumber()\":{\"notice\":\"The number of L2 blocks in the same epoch.\"},\"setL1BlockValuesEcotone()\":{\"notice\":\"Updates the L1 block values for an Ecotone upgraded chain. Params are packed and passed in as raw msg.data instead of ABI to reduce calldata size. Params are expected to be in the following order: 1. _baseFeeScalar L1 base fee scalar 2. _blobBaseFeeScalar L1 blob base fee scalar 3. _sequenceNumber Number of L2 blocks since epoch start. 4. _timestamp L1 timestamp. 5. _number L1 blocknumber. 6. _basefee L1 base fee. 7. _blobBaseFee L1 blob base fee. 8. _hash L1 blockhash. 9. _batcherHash Versioned hash to authenticate batcher by.\"},\"timestamp()\":{\"notice\":\"The latest L1 timestamp known by the L2 system.\"}},\"notice\":\"The L1Block predeploy gives users access to information about the last known L1 block. Values within this contract are updated once per epoch (every L1 block) and can only be set by the \\\"depositor\\\" account, a special system address. Depositor account transactions are created by the protocol whenever we move to a new epoch.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/L2/L1Block.sol\":\"L1Block\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"src/L2/L1Block.sol\":{\"keccak256\":\"0x5819beb85b23c31c5f5d639977bf5d5cf6768975d6d3eecde78299f37ba04cd6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://55cdc404753dcc0cd9d3fac3554a4a16abd7dc39f43f7ae0ebcb0990fa52f7e7\",\"dweb:/ipfs/QmNXMUmNBmNCmL5k8tC1jJ6CmY2hZKJ7owFwuvhMKXr5fv\"]},\"src/universal/ISemver.sol\":{\"keccak256\":\"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a\",\"dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.15+commit.e14f2714"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"view","type":"function","name":"DEPOSITOR_ACCOUNT","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"baseFeeScalar","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"basefee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"batcherHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"blobBaseFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"blobBaseFeeScalar","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"hash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"l1FeeOverhead","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"l1FeeScalar","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"number","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"sequenceNumber","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"uint64","name":"_number","type":"uint64"},{"internalType":"uint64","name":"_timestamp","type":"uint64"},{"internalType":"uint256","name":"_basefee","type":"uint256"},{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"uint64","name":"_sequenceNumber","type":"uint64"},{"internalType":"bytes32","name":"_batcherHash","type":"bytes32"},{"internalType":"uint256","name":"_l1FeeOverhead","type":"uint256"},{"internalType":"uint256","name":"_l1FeeScalar","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setL1BlockValues"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setL1BlockValuesEcotone"},{"inputs":[],"stateMutability":"view","type":"function","name":"timestamp","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]}],"devdoc":{"kind":"dev","methods":{"setL1BlockValues(uint64,uint64,uint256,bytes32,uint64,bytes32,uint256,uint256)":{"custom:legacy":"@notice Updates the L1 block values.","params":{"_basefee":"L1 basefee.","_batcherHash":"Versioned hash to authenticate batcher by.","_hash":"L1 blockhash.","_l1FeeOverhead":"L1 fee overhead.","_l1FeeScalar":"L1 fee scalar.","_number":"L1 blocknumber.","_sequenceNumber":"Number of L2 blocks since epoch start.","_timestamp":"L1 timestamp."}}},"version":1},"userdoc":{"kind":"user","methods":{"DEPOSITOR_ACCOUNT()":{"notice":"Address of the special depositor account."},"baseFeeScalar()":{"notice":"The scalar value applied to the L1 base fee portion of the blob-capable L1 cost func."},"basefee()":{"notice":"The latest L1 base fee."},"batcherHash()":{"notice":"The versioned hash to authenticate the batcher by."},"blobBaseFee()":{"notice":"The latest L1 blob base fee."},"blobBaseFeeScalar()":{"notice":"The scalar value applied to the L1 blob base fee portion of the blob-capable L1 cost func."},"hash()":{"notice":"The latest L1 blockhash."},"l1FeeOverhead()":{"notice":"The overhead value applied to the L1 portion of the transaction fee."},"l1FeeScalar()":{"notice":"The scalar value applied to the L1 portion of the transaction fee."},"number()":{"notice":"The latest L1 block number known by the L2 system."},"sequenceNumber()":{"notice":"The number of L2 blocks in the same epoch."},"setL1BlockValuesEcotone()":{"notice":"Updates the L1 block values for an Ecotone upgraded chain. Params are packed and passed in as raw msg.data instead of ABI to reduce calldata size. Params are expected to be in the following order: 1. _baseFeeScalar L1 base fee scalar 2. _blobBaseFeeScalar L1 blob base fee scalar 3. _sequenceNumber Number of L2 blocks since epoch start. 4. _timestamp L1 timestamp. 5. _number L1 blocknumber. 6. _basefee L1 base fee. 7. _blobBaseFee L1 blob base fee. 8. _hash L1 blockhash. 9. _batcherHash Versioned hash to authenticate batcher by."},"timestamp()":{"notice":"The latest L1 timestamp known by the L2 system."}},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","ds-test/=lib/forge-std/lib/ds-test/src/","forge-std/=lib/forge-std/src/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/L2/L1Block.sol":"L1Block"},"evmVersion":"london","libraries":{}},"sources":{"src/L2/L1Block.sol":{"keccak256":"0x5819beb85b23c31c5f5d639977bf5d5cf6768975d6d3eecde78299f37ba04cd6","urls":["bzz-raw://55cdc404753dcc0cd9d3fac3554a4a16abd7dc39f43f7ae0ebcb0990fa52f7e7","dweb:/ipfs/QmNXMUmNBmNCmL5k8tC1jJ6CmY2hZKJ7owFwuvhMKXr5fv"],"license":"MIT"},"src/universal/ISemver.sol":{"keccak256":"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44","urls":["bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a","dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":90216,"contract":"src/L2/L1Block.sol:L1Block","label":"number","offset":0,"slot":"0","type":"t_uint64"},{"astId":90219,"contract":"src/L2/L1Block.sol:L1Block","label":"timestamp","offset":8,"slot":"0","type":"t_uint64"},{"astId":90222,"contract":"src/L2/L1Block.sol:L1Block","label":"basefee","offset":0,"slot":"1","type":"t_uint256"},{"astId":90225,"contract":"src/L2/L1Block.sol:L1Block","label":"hash","offset":0,"slot":"2","type":"t_bytes32"},{"astId":90228,"contract":"src/L2/L1Block.sol:L1Block","label":"sequenceNumber","offset":0,"slot":"3","type":"t_uint64"},{"astId":90231,"contract":"src/L2/L1Block.sol:L1Block","label":"blobBaseFeeScalar","offset":8,"slot":"3","type":"t_uint32"},{"astId":90234,"contract":"src/L2/L1Block.sol:L1Block","label":"baseFeeScalar","offset":12,"slot":"3","type":"t_uint32"},{"astId":90237,"contract":"src/L2/L1Block.sol:L1Block","label":"batcherHash","offset":0,"slot":"4","type":"t_bytes32"},{"astId":90240,"contract":"src/L2/L1Block.sol:L1Block","label":"l1FeeOverhead","offset":0,"slot":"5","type":"t_uint256"},{"astId":90243,"contract":"src/L2/L1Block.sol:L1Block","label":"l1FeeScalar","offset":0,"slot":"6","type":"t_uint256"},{"astId":90246,"contract":"src/L2/L1Block.sol:L1Block","label":"blobBaseFee","offset":0,"slot":"7","type":"t_uint256"}],"types":{"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"},"t_uint64":{"encoding":"inplace","label":"uint64","numberOfBytes":"8"}}},"userdoc":{"version":1,"kind":"user","methods":{"DEPOSITOR_ACCOUNT()":{"notice":"Address of the special depositor account."},"baseFeeScalar()":{"notice":"The scalar value applied to the L1 base fee portion of the blob-capable L1 cost func."},"basefee()":{"notice":"The latest L1 base fee."},"batcherHash()":{"notice":"The versioned hash to authenticate the batcher by."},"blobBaseFee()":{"notice":"The latest L1 blob base fee."},"blobBaseFeeScalar()":{"notice":"The scalar value applied to the L1 blob base fee portion of the blob-capable L1 cost func."},"hash()":{"notice":"The latest L1 blockhash."},"l1FeeOverhead()":{"notice":"The overhead value applied to the L1 portion of the transaction fee."},"l1FeeScalar()":{"notice":"The scalar value applied to the L1 portion of the transaction fee."},"number()":{"notice":"The latest L1 block number known by the L2 system."},"sequenceNumber()":{"notice":"The number of L2 blocks in the same epoch."},"setL1BlockValuesEcotone()":{"notice":"Updates the L1 block values for an Ecotone upgraded chain. Params are packed and passed in as raw msg.data instead of ABI to reduce calldata size. Params are expected to be in the following order: 1. _baseFeeScalar L1 base fee scalar 2. _blobBaseFeeScalar L1 blob base fee scalar 3. _sequenceNumber Number of L2 blocks since epoch start. 4. _timestamp L1 timestamp. 5. _number L1 blocknumber. 6. _basefee L1 base fee. 7. _blobBaseFee L1 blob base fee. 8. _hash L1 blockhash. 9. _batcherHash Versioned hash to authenticate batcher by."},"timestamp()":{"notice":"The latest L1 timestamp known by the L2 system."}},"notice":"The L1Block predeploy gives users access to information about the last known L1 block. Values within this contract are updated once per epoch (every L1 block) and can only be set by the \"depositor\" account, a special system address. Depositor account transactions are created by the protocol whenever we move to a new epoch."},"devdoc":{"version":1,"kind":"dev","methods":{"setL1BlockValues(uint64,uint64,uint256,bytes32,uint64,bytes32,uint256,uint256)":{"params":{"_basefee":"L1 basefee.","_batcherHash":"Versioned hash to authenticate batcher by.","_hash":"L1 blockhash.","_l1FeeOverhead":"L1 fee overhead.","_l1FeeScalar":"L1 fee scalar.","_number":"L1 blocknumber.","_sequenceNumber":"Number of L2 blocks since epoch start.","_timestamp":"L1 timestamp."}}},"title":"L1Block"},"ast":{"absolutePath":"src/L2/L1Block.sol","id":90319,"exportedSymbols":{"ISemver":[109417],"L1Block":[90318]},"nodeType":"SourceUnit","src":"32:4813:145","nodes":[{"id":90204,"nodeType":"PragmaDirective","src":"32:23:145","nodes":[],"literals":["solidity","0.8",".15"]},{"id":90206,"nodeType":"ImportDirective","src":"57:52:145","nodes":[],"absolutePath":"src/universal/ISemver.sol","file":"src/universal/ISemver.sol","nameLocation":"-1:-1:-1","scope":90319,"sourceUnit":109418,"symbolAliases":[{"foreign":{"id":90205,"name":"ISemver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109417,"src":"66:7:145","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":90318,"nodeType":"ContractDefinition","src":"588:4256:145","nodes":[{"id":90213,"nodeType":"VariableDeclaration","src":"680:86:145","nodes":[],"constant":true,"documentation":{"id":90210,"nodeType":"StructuredDocumentation","src":"622:53:145","text":"@notice Address of the special depositor account."},"functionSelector":"e591b282","mutability":"constant","name":"DEPOSITOR_ACCOUNT","nameLocation":"704:17:145","scope":90318,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90211,"name":"address","nodeType":"ElementaryTypeName","src":"680:7:145","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307844656144444561444465416444654164444541644445616464654164644541644445416430303031","id":90212,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"724:42:145","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0xDeaDDEaDDeAdDeAdDEAdDEaddeAddEAdDEAd0001"},"visibility":"public"},{"id":90216,"nodeType":"VariableDeclaration","src":"840:20:145","nodes":[],"constant":false,"documentation":{"id":90214,"nodeType":"StructuredDocumentation","src":"773:62:145","text":"@notice The latest L1 block number known by the L2 system."},"functionSelector":"8381f58a","mutability":"mutable","name":"number","nameLocation":"854:6:145","scope":90318,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":90215,"name":"uint64","nodeType":"ElementaryTypeName","src":"840:6:145","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"public"},{"id":90219,"nodeType":"VariableDeclaration","src":"931:23:145","nodes":[],"constant":false,"documentation":{"id":90217,"nodeType":"StructuredDocumentation","src":"867:59:145","text":"@notice The latest L1 timestamp known by the L2 system."},"functionSelector":"b80777ea","mutability":"mutable","name":"timestamp","nameLocation":"945:9:145","scope":90318,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":90218,"name":"uint64","nodeType":"ElementaryTypeName","src":"931:6:145","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"public"},{"id":90222,"nodeType":"VariableDeclaration","src":"1001:22:145","nodes":[],"constant":false,"documentation":{"id":90220,"nodeType":"StructuredDocumentation","src":"961:35:145","text":"@notice The latest L1 base fee."},"functionSelector":"5cf24969","mutability":"mutable","name":"basefee","nameLocation":"1016:7:145","scope":90318,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90221,"name":"uint256","nodeType":"ElementaryTypeName","src":"1001:7:145","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":90225,"nodeType":"VariableDeclaration","src":"1071:19:145","nodes":[],"constant":false,"documentation":{"id":90223,"nodeType":"StructuredDocumentation","src":"1030:36:145","text":"@notice The latest L1 blockhash."},"functionSelector":"09bd5a60","mutability":"mutable","name":"hash","nameLocation":"1086:4:145","scope":90318,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":90224,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1071:7:145","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":90228,"nodeType":"VariableDeclaration","src":"1156:28:145","nodes":[],"constant":false,"documentation":{"id":90226,"nodeType":"StructuredDocumentation","src":"1097:54:145","text":"@notice The number of L2 blocks in the same epoch."},"functionSelector":"64ca23ef","mutability":"mutable","name":"sequenceNumber","nameLocation":"1170:14:145","scope":90318,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":90227,"name":"uint64","nodeType":"ElementaryTypeName","src":"1156:6:145","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"public"},{"id":90231,"nodeType":"VariableDeclaration","src":"1298:31:145","nodes":[],"constant":false,"documentation":{"id":90229,"nodeType":"StructuredDocumentation","src":"1191:102:145","text":"@notice The scalar value applied to the L1 blob base fee portion of the blob-capable L1 cost func."},"functionSelector":"68d5dca6","mutability":"mutable","name":"blobBaseFeeScalar","nameLocation":"1312:17:145","scope":90318,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":90230,"name":"uint32","nodeType":"ElementaryTypeName","src":"1298:6:145","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"public"},{"id":90234,"nodeType":"VariableDeclaration","src":"1438:27:145","nodes":[],"constant":false,"documentation":{"id":90232,"nodeType":"StructuredDocumentation","src":"1336:97:145","text":"@notice The scalar value applied to the L1 base fee portion of the blob-capable L1 cost func."},"functionSelector":"c5985918","mutability":"mutable","name":"baseFeeScalar","nameLocation":"1452:13:145","scope":90318,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":90233,"name":"uint32","nodeType":"ElementaryTypeName","src":"1438:6:145","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"public"},{"id":90237,"nodeType":"VariableDeclaration","src":"1539:26:145","nodes":[],"constant":false,"documentation":{"id":90235,"nodeType":"StructuredDocumentation","src":"1472:62:145","text":"@notice The versioned hash to authenticate the batcher by."},"functionSelector":"e81b2c6d","mutability":"mutable","name":"batcherHash","nameLocation":"1554:11:145","scope":90318,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":90236,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1539:7:145","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":90240,"nodeType":"VariableDeclaration","src":"1680:28:145","nodes":[],"constant":false,"documentation":{"id":90238,"nodeType":"StructuredDocumentation","src":"1572:103:145","text":"@notice The overhead value applied to the L1 portion of the transaction fee.\n @custom:legacy"},"functionSelector":"8b239f73","mutability":"mutable","name":"l1FeeOverhead","nameLocation":"1695:13:145","scope":90318,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90239,"name":"uint256","nodeType":"ElementaryTypeName","src":"1680:7:145","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":90243,"nodeType":"VariableDeclaration","src":"1821:26:145","nodes":[],"constant":false,"documentation":{"id":90241,"nodeType":"StructuredDocumentation","src":"1715:101:145","text":"@notice The scalar value applied to the L1 portion of the transaction fee.\n @custom:legacy"},"functionSelector":"9e8c4966","mutability":"mutable","name":"l1FeeScalar","nameLocation":"1836:11:145","scope":90318,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90242,"name":"uint256","nodeType":"ElementaryTypeName","src":"1821:7:145","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":90246,"nodeType":"VariableDeclaration","src":"1899:26:145","nodes":[],"constant":false,"documentation":{"id":90244,"nodeType":"StructuredDocumentation","src":"1854:40:145","text":"@notice The latest L1 blob base fee."},"functionSelector":"f8206140","mutability":"mutable","name":"blobBaseFee","nameLocation":"1914:11:145","scope":90318,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90245,"name":"uint256","nodeType":"ElementaryTypeName","src":"1899:7:145","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":90250,"nodeType":"VariableDeclaration","src":"1961:40:145","nodes":[],"baseFunctions":[109416],"constant":true,"documentation":{"id":90247,"nodeType":"StructuredDocumentation","src":"1932:24:145","text":"@custom:semver 1.2.0"},"functionSelector":"54fd4d50","mutability":"constant","name":"version","nameLocation":"1984:7:145","scope":90318,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":90248,"name":"string","nodeType":"ElementaryTypeName","src":"1961:6:145","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"312e322e30","id":90249,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1994:7:145","typeDescriptions":{"typeIdentifier":"t_stringliteral_e374587661e69268352d25204d81b23ce801573f4b09f3545e69536dc085a37a","typeString":"literal_string \"1.2.0\""},"value":"1.2.0"},"visibility":"public"},{"id":90311,"nodeType":"FunctionDefinition","src":"2494:660:145","nodes":[],"body":{"id":90310,"nodeType":"Block","src":"2771:383:145","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":90274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":90271,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2789:3:145","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":90272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2789:10:145","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":90273,"name":"DEPOSITOR_ACCOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90213,"src":"2803:17:145","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2789:31:145","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c31426c6f636b3a206f6e6c7920746865206465706f7369746f72206163636f756e742063616e20736574204c3120626c6f636b2076616c756573","id":90275,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2822:61:145","typeDescriptions":{"typeIdentifier":"t_stringliteral_c3c76ba7c08c4e35ee9214a1ee03dd5f5eafa75e54f6dcd9b82029d1cceb0d7b","typeString":"literal_string \"L1Block: only the depositor account can set L1 block values\""},"value":"L1Block: only the depositor account can set L1 block values"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c3c76ba7c08c4e35ee9214a1ee03dd5f5eafa75e54f6dcd9b82029d1cceb0d7b","typeString":"literal_string \"L1Block: only the depositor account can set L1 block values\""}],"id":90270,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2781:7:145","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":90276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2781:103:145","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90277,"nodeType":"ExpressionStatement","src":"2781:103:145"},{"expression":{"id":90280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":90278,"name":"number","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90216,"src":"2895:6:145","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":90279,"name":"_number","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90253,"src":"2904:7:145","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"2895:16:145","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":90281,"nodeType":"ExpressionStatement","src":"2895:16:145"},{"expression":{"id":90284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":90282,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90219,"src":"2921:9:145","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":90283,"name":"_timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90255,"src":"2933:10:145","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"2921:22:145","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":90285,"nodeType":"ExpressionStatement","src":"2921:22:145"},{"expression":{"id":90288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":90286,"name":"basefee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90222,"src":"2953:7:145","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":90287,"name":"_basefee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90257,"src":"2963:8:145","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2953:18:145","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":90289,"nodeType":"ExpressionStatement","src":"2953:18:145"},{"expression":{"id":90292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":90290,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90225,"src":"2981:4:145","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":90291,"name":"_hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90259,"src":"2988:5:145","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2981:12:145","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":90293,"nodeType":"ExpressionStatement","src":"2981:12:145"},{"expression":{"id":90296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":90294,"name":"sequenceNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90228,"src":"3003:14:145","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":90295,"name":"_sequenceNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90261,"src":"3020:15:145","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"3003:32:145","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":90297,"nodeType":"ExpressionStatement","src":"3003:32:145"},{"expression":{"id":90300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":90298,"name":"batcherHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90237,"src":"3045:11:145","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":90299,"name":"_batcherHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90263,"src":"3059:12:145","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3045:26:145","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":90301,"nodeType":"ExpressionStatement","src":"3045:26:145"},{"expression":{"id":90304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":90302,"name":"l1FeeOverhead","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90240,"src":"3081:13:145","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":90303,"name":"_l1FeeOverhead","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90265,"src":"3097:14:145","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3081:30:145","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":90305,"nodeType":"ExpressionStatement","src":"3081:30:145"},{"expression":{"id":90308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":90306,"name":"l1FeeScalar","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90243,"src":"3121:11:145","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":90307,"name":"_l1FeeScalar","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90267,"src":"3135:12:145","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3121:26:145","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":90309,"nodeType":"ExpressionStatement","src":"3121:26:145"}]},"documentation":{"id":90251,"nodeType":"StructuredDocumentation","src":"2008:481:145","text":"@custom:legacy\n @notice Updates the L1 block values.\n @param _number L1 blocknumber.\n @param _timestamp L1 timestamp.\n @param _basefee L1 basefee.\n @param _hash L1 blockhash.\n @param _sequenceNumber Number of L2 blocks since epoch start.\n @param _batcherHash Versioned hash to authenticate batcher by.\n @param _l1FeeOverhead L1 fee overhead.\n @param _l1FeeScalar L1 fee scalar."},"functionSelector":"015d8eb9","implemented":true,"kind":"function","modifiers":[],"name":"setL1BlockValues","nameLocation":"2503:16:145","parameters":{"id":90268,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90253,"mutability":"mutable","name":"_number","nameLocation":"2536:7:145","nodeType":"VariableDeclaration","scope":90311,"src":"2529:14:145","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":90252,"name":"uint64","nodeType":"ElementaryTypeName","src":"2529:6:145","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":90255,"mutability":"mutable","name":"_timestamp","nameLocation":"2560:10:145","nodeType":"VariableDeclaration","scope":90311,"src":"2553:17:145","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":90254,"name":"uint64","nodeType":"ElementaryTypeName","src":"2553:6:145","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":90257,"mutability":"mutable","name":"_basefee","nameLocation":"2588:8:145","nodeType":"VariableDeclaration","scope":90311,"src":"2580:16:145","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90256,"name":"uint256","nodeType":"ElementaryTypeName","src":"2580:7:145","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":90259,"mutability":"mutable","name":"_hash","nameLocation":"2614:5:145","nodeType":"VariableDeclaration","scope":90311,"src":"2606:13:145","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":90258,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2606:7:145","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":90261,"mutability":"mutable","name":"_sequenceNumber","nameLocation":"2636:15:145","nodeType":"VariableDeclaration","scope":90311,"src":"2629:22:145","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":90260,"name":"uint64","nodeType":"ElementaryTypeName","src":"2629:6:145","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":90263,"mutability":"mutable","name":"_batcherHash","nameLocation":"2669:12:145","nodeType":"VariableDeclaration","scope":90311,"src":"2661:20:145","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":90262,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2661:7:145","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":90265,"mutability":"mutable","name":"_l1FeeOverhead","nameLocation":"2699:14:145","nodeType":"VariableDeclaration","scope":90311,"src":"2691:22:145","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90264,"name":"uint256","nodeType":"ElementaryTypeName","src":"2691:7:145","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":90267,"mutability":"mutable","name":"_l1FeeScalar","nameLocation":"2731:12:145","nodeType":"VariableDeclaration","scope":90311,"src":"2723:20:145","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90266,"name":"uint256","nodeType":"ElementaryTypeName","src":"2723:7:145","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2519:230:145"},"returnParameters":{"id":90269,"nodeType":"ParameterList","parameters":[],"src":"2771:0:145"},"scope":90318,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":90317,"nodeType":"FunctionDefinition","src":"3886:956:145","nodes":[],"body":{"id":90316,"nodeType":"Block","src":"3930:912:145","nodes":[],"statements":[{"AST":{"nodeType":"YulBlock","src":"3949:887:145","statements":[{"body":{"nodeType":"YulBlock","src":"4065:197:145","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4090:4:145","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"4096:10:145","type":"","value":"0x3cc50b45"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4083:6:145"},"nodeType":"YulFunctionCall","src":"4083:24:145"},"nodeType":"YulExpressionStatement","src":"4083:24:145"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4188:4:145","type":"","value":"0x1C"},{"kind":"number","nodeType":"YulLiteral","src":"4194:4:145","type":"","value":"0x04"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4181:6:145"},"nodeType":"YulFunctionCall","src":"4181:18:145"},"nodeType":"YulExpressionStatement","src":"4181:18:145"}]},"condition":{"arguments":[{"arguments":[],"functionName":{"name":"caller","nodeType":"YulIdentifier","src":"4036:6:145"},"nodeType":"YulFunctionCall","src":"4036:8:145"},{"name":"DEPOSITOR_ACCOUNT","nodeType":"YulIdentifier","src":"4046:17:145"}],"functionName":{"name":"xor","nodeType":"YulIdentifier","src":"4032:3:145"},"nodeType":"YulFunctionCall","src":"4032:32:145"},"nodeType":"YulIf","src":"4029:233:145"},{"nodeType":"YulVariableDeclaration","src":"4275:27:145","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4300:1:145","type":"","value":"4"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4287:12:145"},"nodeType":"YulFunctionCall","src":"4287:15:145"},"variables":[{"name":"data","nodeType":"YulTypedName","src":"4279:4:145","type":""}]},{"expression":{"arguments":[{"name":"sequenceNumber.slot","nodeType":"YulIdentifier","src":"4410:19:145"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4435:3:145","type":"","value":"128"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4453:1:145","type":"","value":"4"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4440:12:145"},"nodeType":"YulFunctionCall","src":"4440:15:145"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"4431:3:145"},"nodeType":"YulFunctionCall","src":"4431:25:145"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"4403:6:145"},"nodeType":"YulFunctionCall","src":"4403:54:145"},"nodeType":"YulExpressionStatement","src":"4403:54:145"},{"expression":{"arguments":[{"name":"number.slot","nodeType":"YulIdentifier","src":"4531:11:145"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4548:3:145","type":"","value":"128"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4566:2:145","type":"","value":"20"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4553:12:145"},"nodeType":"YulFunctionCall","src":"4553:16:145"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"4544:3:145"},"nodeType":"YulFunctionCall","src":"4544:26:145"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"4524:6:145"},"nodeType":"YulFunctionCall","src":"4524:47:145"},"nodeType":"YulExpressionStatement","src":"4524:47:145"},{"expression":{"arguments":[{"name":"basefee.slot","nodeType":"YulIdentifier","src":"4591:12:145"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4618:2:145","type":"","value":"36"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4605:12:145"},"nodeType":"YulFunctionCall","src":"4605:16:145"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"4584:6:145"},"nodeType":"YulFunctionCall","src":"4584:38:145"},"nodeType":"YulExpressionStatement","src":"4584:38:145"},{"expression":{"arguments":[{"name":"blobBaseFee.slot","nodeType":"YulIdentifier","src":"4653:16:145"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4684:2:145","type":"","value":"68"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4671:12:145"},"nodeType":"YulFunctionCall","src":"4671:16:145"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"4646:6:145"},"nodeType":"YulFunctionCall","src":"4646:42:145"},"nodeType":"YulExpressionStatement","src":"4646:42:145"},{"expression":{"arguments":[{"name":"hash.slot","nodeType":"YulIdentifier","src":"4719:9:145"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4743:3:145","type":"","value":"100"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4730:12:145"},"nodeType":"YulFunctionCall","src":"4730:17:145"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"4712:6:145"},"nodeType":"YulFunctionCall","src":"4712:36:145"},"nodeType":"YulExpressionStatement","src":"4712:36:145"},{"expression":{"arguments":[{"name":"batcherHash.slot","nodeType":"YulIdentifier","src":"4779:16:145"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4810:3:145","type":"","value":"132"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4797:12:145"},"nodeType":"YulFunctionCall","src":"4797:17:145"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"4772:6:145"},"nodeType":"YulFunctionCall","src":"4772:43:145"},"nodeType":"YulExpressionStatement","src":"4772:43:145"}]},"evmVersion":"london","externalReferences":[{"declaration":90213,"isOffset":false,"isSlot":false,"src":"4046:17:145","valueSize":1},{"declaration":90222,"isOffset":false,"isSlot":true,"src":"4591:12:145","suffix":"slot","valueSize":1},{"declaration":90237,"isOffset":false,"isSlot":true,"src":"4779:16:145","suffix":"slot","valueSize":1},{"declaration":90246,"isOffset":false,"isSlot":true,"src":"4653:16:145","suffix":"slot","valueSize":1},{"declaration":90225,"isOffset":false,"isSlot":true,"src":"4719:9:145","suffix":"slot","valueSize":1},{"declaration":90216,"isOffset":false,"isSlot":true,"src":"4531:11:145","suffix":"slot","valueSize":1},{"declaration":90228,"isOffset":false,"isSlot":true,"src":"4410:19:145","suffix":"slot","valueSize":1}],"id":90315,"nodeType":"InlineAssembly","src":"3940:896:145"}]},"documentation":{"id":90312,"nodeType":"StructuredDocumentation","src":"3160:721:145","text":"@notice Updates the L1 block values for an Ecotone upgraded chain.\n Params are packed and passed in as raw msg.data instead of ABI to reduce calldata size.\n Params are expected to be in the following order:\n 1. _baseFeeScalar L1 base fee scalar\n 2. _blobBaseFeeScalar L1 blob base fee scalar\n 3. _sequenceNumber Number of L2 blocks since epoch start.\n 4. _timestamp L1 timestamp.\n 5. _number L1 blocknumber.\n 6. _basefee L1 base fee.\n 7. _blobBaseFee L1 blob base fee.\n 8. _hash L1 blockhash.\n 9. _batcherHash Versioned hash to authenticate batcher by."},"functionSelector":"440a5e20","implemented":true,"kind":"function","modifiers":[],"name":"setL1BlockValuesEcotone","nameLocation":"3895:23:145","parameters":{"id":90313,"nodeType":"ParameterList","parameters":[],"src":"3918:2:145"},"returnParameters":{"id":90314,"nodeType":"ParameterList","parameters":[],"src":"3930:0:145"},"scope":90318,"stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":90208,"name":"ISemver","nodeType":"IdentifierPath","referencedDeclaration":109417,"src":"608:7:145"},"id":90209,"nodeType":"InheritanceSpecifier","src":"608:7:145"}],"canonicalName":"L1Block","contractDependencies":[],"contractKind":"contract","documentation":{"id":90207,"nodeType":"StructuredDocumentation","src":"111:477:145","text":"@custom:proxied\n @custom:predeploy 0x4200000000000000000000000000000000000015\n @title L1Block\n @notice The L1Block predeploy gives users access to information about the last known L1 block.\n Values within this contract are updated once per epoch (every L1 block) and can only be\n set by the \"depositor\" account, a special system address. Depositor account transactions\n are created by the protocol whenever we move to a new epoch."},"fullyImplemented":true,"linearizedBaseContracts":[90318,109417],"name":"L1Block","nameLocation":"597:7:145","scope":90319,"usedErrors":[]}],"license":"MIT"},"id":145} \ No newline at end of file diff --git a/packages/sdk/src/forge-artifacts/L1CrossDomainMessenger.json b/packages/sdk/src/forge-artifacts/L1CrossDomainMessenger.json deleted file mode 100644 index 9dba5479d699..000000000000 --- a/packages/sdk/src/forge-artifacts/L1CrossDomainMessenger.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"MESSAGE_VERSION","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"MIN_GAS_CALLDATA_OVERHEAD","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"OTHER_MESSENGER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract CrossDomainMessenger"}],"stateMutability":"view"},{"type":"function","name":"PORTAL","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract OptimismPortal"}],"stateMutability":"view"},{"type":"function","name":"RELAY_CALL_OVERHEAD","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"RELAY_CONSTANT_OVERHEAD","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"RELAY_GAS_CHECK_BUFFER","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"RELAY_RESERVED_GAS","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"baseGas","inputs":[{"name":"_message","type":"bytes","internalType":"bytes"},{"name":"_minGasLimit","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"pure"},{"type":"function","name":"failedMessages","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_superchainConfig","type":"address","internalType":"contract SuperchainConfig"},{"name":"_portal","type":"address","internalType":"contract OptimismPortal"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"messageNonce","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"otherMessenger","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract CrossDomainMessenger"}],"stateMutability":"view"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"portal","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract OptimismPortal"}],"stateMutability":"view"},{"type":"function","name":"relayMessage","inputs":[{"name":"_nonce","type":"uint256","internalType":"uint256"},{"name":"_sender","type":"address","internalType":"address"},{"name":"_target","type":"address","internalType":"address"},{"name":"_value","type":"uint256","internalType":"uint256"},{"name":"_minGasLimit","type":"uint256","internalType":"uint256"},{"name":"_message","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"sendMessage","inputs":[{"name":"_target","type":"address","internalType":"address"},{"name":"_message","type":"bytes","internalType":"bytes"},{"name":"_minGasLimit","type":"uint32","internalType":"uint32"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"successfulMessages","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"superchainConfig","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract SuperchainConfig"}],"stateMutability":"view"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"xDomainMessageSender","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"FailedRelayedMessage","inputs":[{"name":"msgHash","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"RelayedMessage","inputs":[{"name":"msgHash","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"SentMessage","inputs":[{"name":"target","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"message","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"messageNonce","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"gasLimit","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"SentMessageExtension1","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false}],"bytecode":{"object":"0x60806040523480156200001157600080fd5b506200001f60008062000025565b6200027f565b600054600160a81b900460ff16158080156200004e57506000546001600160a01b90910460ff16105b806200008557506200006b30620001b960201b620014d61760201c565b158015620000855750600054600160a01b900460ff166001145b620000ee5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011c576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038086166001600160a01b03199283161790925560fc8054928516929091169190911790556200016b734200000000000000000000000000000000000007620001c8565b8015620001b4576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002375760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e5565b60cc546001600160a01b03166200025d5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b611f94806200028f6000396000f3fe6080604052600436106101805760003560e01c80635c975abb116100d6578063a4e7f8bd1161007f578063d764ad0b11610059578063d764ad0b14610463578063db505d8014610476578063ecc70428146104a357600080fd5b8063a4e7f8bd146103e3578063b1b1b20914610413578063b28ade251461044357600080fd5b806383a74074116100b057806383a74074146103a15780638cbeeef2146102b85780639fce812c146103b857600080fd5b80635c975abb1461033a5780636425666b1461035f5780636e296e451461038c57600080fd5b80633dbb202b116101385780634c1d6a69116101125780634c1d6a69146102b857806354fd4d50146102ce5780635644cfdf1461032457600080fd5b80633dbb202b1461025b5780633f827a5a14610270578063485cc9551461029857600080fd5b80630ff754ea116101695780630ff754ea146101cd5780632828d7e81461021957806335e80ab31461022e57600080fd5b8063028f85f7146101855780630c568498146101b8575b600080fd5b34801561019157600080fd5b5061019a601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101c457600080fd5b5061019a603f81565b3480156101d957600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101af565b34801561022557600080fd5b5061019a604081565b34801561023a57600080fd5b5060fb546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b61026e610269366004611a22565b610508565b005b34801561027c57600080fd5b50610285600181565b60405161ffff90911681526020016101af565b3480156102a457600080fd5b5061026e6102b3366004611a89565b610765565b3480156102c457600080fd5b5061019a619c4081565b3480156102da57600080fd5b506103176040518060400160405280600581526020017f322e332e3000000000000000000000000000000000000000000000000000000081525081565b6040516101af9190611b2d565b34801561033057600080fd5b5061019a61138881565b34801561034657600080fd5b5061034f6109d3565b60405190151581526020016101af565b34801561036b57600080fd5b5060fc546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039857600080fd5b506101f4610a6c565b3480156103ad57600080fd5b5061019a62030d4081565b3480156103c457600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101f4565b3480156103ef57600080fd5b5061034f6103fe366004611b47565b60ce6020526000908152604090205460ff1681565b34801561041f57600080fd5b5061034f61042e366004611b47565b60cb6020526000908152604090205460ff1681565b34801561044f57600080fd5b5061019a61045e366004611b60565b610b53565b61026e610471366004611bb4565b610bc1565b34801561048257600080fd5b5060cf546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104af57600080fd5b506104fa60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101af565b60cf5461063a9073ffffffffffffffffffffffffffffffffffffffff16610530858585610b53565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061059c60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016105b89796959493929190611c83565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526114f2565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856106bf60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516106d1959493929190611ce2565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b6000547501000000000000000000000000000000000000000000900460ff16158080156107b0575060005460017401000000000000000000000000000000000000000090910460ff16105b806107e25750303b1580156107e2575060005474010000000000000000000000000000000000000000900460ff166001145b610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905580156108f957600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc80549285169290911691909117905561096b73420000000000000000000000000000000000000761158b565b80156109ce57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a679190611d30565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610b36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f74207365740000000000000000000000606482015260840161086a565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b6f604063ffffffff8816611d81565b610b799190611db1565b610b84601088611d81565b610b919062030d40611dff565b610b9b9190611dff565b610ba59190611dff565b610baf9190611dff565b610bb99190611dff565b949350505050565b610bc96109d3565b15610c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a2070617573656400000000604482015260640161086a565b60f087901c60028110610ceb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a40161086a565b8061ffff16600003610de0576000610d3c878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506116c7915050565b600081815260cb602052604090205490915060ff1615610dde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c61796564000000000000000000606482015260840161086a565b505b6000610e26898989898989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116e692505050565b9050610e30611709565b15610e6857853414610e4457610e44611e2b565b600081815260ce602052604090205460ff1615610e6357610e63611e2b565b610fba565b3415610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a40161086a565b600081815260ce602052604090205460ff16610fba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c6179656400000000000000000000000000000000606482015260840161086a565b610fc3876117e5565b15611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a40161086a565b600081815260cb602052604090205460ff1615611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c6179656400000000000000000000606482015260840161086a565b61113685611127611388619c40611dff565b67ffffffffffffffff1661182b565b158061115c575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561127557600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161086a565b50506114cd565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061130688619c405a6112c99190611e5a565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061184992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156113bc57600082815260cb602052604090205460ff161561135957611359611e2b565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26114c9565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016114c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161086a565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611553908890839089906000908990600401611e71565b6000604051808303818588803b15801561156c57600080fd5b505af1158015611580573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161086a565b60cc5473ffffffffffffffffffffffffffffffffffffffff166116805760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006116d585858585611863565b805190602001209050949350505050565b60006116f68787878787876118fc565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a67575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156117a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c99190611ec9565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611825575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60608484848460405160240161187c9493929190611ee6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606086868686868660405160240161191996959493929190611f30565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146119bd57600080fd5b50565b60008083601f8401126119d257600080fd5b50813567ffffffffffffffff8111156119ea57600080fd5b602083019150836020828501011115611a0257600080fd5b9250929050565b803563ffffffff81168114611a1d57600080fd5b919050565b60008060008060608587031215611a3857600080fd5b8435611a438161199b565b9350602085013567ffffffffffffffff811115611a5f57600080fd5b611a6b878288016119c0565b9094509250611a7e905060408601611a09565b905092959194509250565b60008060408385031215611a9c57600080fd5b8235611aa78161199b565b91506020830135611ab78161199b565b809150509250929050565b6000815180845260005b81811015611ae857602081850181015186830182015201611acc565b81811115611afa576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b406020830184611ac2565b9392505050565b600060208284031215611b5957600080fd5b5035919050565b600080600060408486031215611b7557600080fd5b833567ffffffffffffffff811115611b8c57600080fd5b611b98868287016119c0565b9094509250611bab905060208501611a09565b90509250925092565b600080600080600080600060c0888a031215611bcf57600080fd5b873596506020880135611be18161199b565b95506040880135611bf18161199b565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611c1b57600080fd5b611c278a828b016119c0565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611cd560c083018486611c3a565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611d12608083018688611c3a565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611d4257600080fd5b81518015158114611b4057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611da857611da8611d52565b02949350505050565b600067ffffffffffffffff80841680611df3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611e2257611e22611d52565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611e6c57611e6c611d52565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a060808201526000611ebe60a0830184611ac2565b979650505050505050565b600060208284031215611edb57600080fd5b8151611b408161199b565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611f1f6080830185611ac2565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611f7b60c0830184611ac2565b9897505050505050505056fea164736f6c634300080f000a","sourceMap":"701:2432:130:-:0;;;1159:163;;;;;;;;;-1:-1:-1;1206:109:130::1;1263:1;::::0;1206:10:::1;:109::i;:::-;701:2432:::0;;1542:296;3111:19:27;3134:13;-1:-1:-1;;;3134:13:27;;;;3133:14;;3179:34;;;;-1:-1:-1;3197:12:27;;3212:1;-1:-1:-1;;;3197:12:27;;;;;:16;3179:34;3178:108;;;;3220:44;3258:4;3220:29;;;;;:44;;:::i;:::-;3219:45;:66;;;;-1:-1:-1;3268:12:27;;-1:-1:-1;;;3268:12:27;;;;3284:1;3268:17;3219:66;3157:201;;;;-1:-1:-1;;;3157:201:27;;216:2:357;3157:201:27;;;198:21:357;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:357;;;338:44;399:19;;3157:201:27;;;;;;;;;3368:12;:16;;-1:-1:-1;;;;3368:16:27;-1:-1:-1;;;3368:16:27;;;3394:65;;;;3428:13;:20;;-1:-1:-1;;;;3428:20:27;-1:-1:-1;;;3428:20:27;;;3394:65;1651:16:130::1;:36:::0;;-1:-1:-1;;;;;1651:36:130;;::::1;-1:-1:-1::0;;;;;;1651:36:130;;::::1;;::::0;;;1697:6:::1;:16:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;1723:108:::1;480:42:199;1723:27:130;:108::i;:::-;3483:14:27::0;3479:99;;;3529:5;3513:21;;-1:-1:-1;;;;3513:21:27;;;3553:14;;-1:-1:-1;581:36:357;;3553:14:27;;569:2:357;554:18;3553:14:27;;;;;;;3479:99;3101:483;1542:296:130;;:::o;1186:320:33:-;-1:-1:-1;;;;;1476:19:33;;:23;;;1186:320::o;18503:636:223:-;4910:13:27;;-1:-1:-1;;;4910:13:27;;;;4902:69;;;;-1:-1:-1;;;4902:69:27;;830:2:357;4902:69:27;;;812:21:357;869:2;849:18;;;842:30;908:34;888:18;;;881:62;-1:-1:-1;;;959:18:357;;;952:41;1010:19;;4902:69:27;628:407:357;4902:69:27;18988:16:223::1;::::0;-1:-1:-1;;;;;18988:16:223::1;18984:107;;19034:16;:46:::0;;-1:-1:-1;;;;;;19034:46:223::1;1338:42:192;19034:46:223;::::0;;18984:107:::1;19100:14;:32:::0;;-1:-1:-1;;;;;;19100:32:223::1;-1:-1:-1::0;;;;;19100:32:223;;;::::1;::::0;;;::::1;::::0;;18503:636::o;628:407:357:-;701:2432:130;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101805760003560e01c80635c975abb116100d6578063a4e7f8bd1161007f578063d764ad0b11610059578063d764ad0b14610463578063db505d8014610476578063ecc70428146104a357600080fd5b8063a4e7f8bd146103e3578063b1b1b20914610413578063b28ade251461044357600080fd5b806383a74074116100b057806383a74074146103a15780638cbeeef2146102b85780639fce812c146103b857600080fd5b80635c975abb1461033a5780636425666b1461035f5780636e296e451461038c57600080fd5b80633dbb202b116101385780634c1d6a69116101125780634c1d6a69146102b857806354fd4d50146102ce5780635644cfdf1461032457600080fd5b80633dbb202b1461025b5780633f827a5a14610270578063485cc9551461029857600080fd5b80630ff754ea116101695780630ff754ea146101cd5780632828d7e81461021957806335e80ab31461022e57600080fd5b8063028f85f7146101855780630c568498146101b8575b600080fd5b34801561019157600080fd5b5061019a601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101c457600080fd5b5061019a603f81565b3480156101d957600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101af565b34801561022557600080fd5b5061019a604081565b34801561023a57600080fd5b5060fb546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b61026e610269366004611a22565b610508565b005b34801561027c57600080fd5b50610285600181565b60405161ffff90911681526020016101af565b3480156102a457600080fd5b5061026e6102b3366004611a89565b610765565b3480156102c457600080fd5b5061019a619c4081565b3480156102da57600080fd5b506103176040518060400160405280600581526020017f322e332e3000000000000000000000000000000000000000000000000000000081525081565b6040516101af9190611b2d565b34801561033057600080fd5b5061019a61138881565b34801561034657600080fd5b5061034f6109d3565b60405190151581526020016101af565b34801561036b57600080fd5b5060fc546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039857600080fd5b506101f4610a6c565b3480156103ad57600080fd5b5061019a62030d4081565b3480156103c457600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101f4565b3480156103ef57600080fd5b5061034f6103fe366004611b47565b60ce6020526000908152604090205460ff1681565b34801561041f57600080fd5b5061034f61042e366004611b47565b60cb6020526000908152604090205460ff1681565b34801561044f57600080fd5b5061019a61045e366004611b60565b610b53565b61026e610471366004611bb4565b610bc1565b34801561048257600080fd5b5060cf546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104af57600080fd5b506104fa60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101af565b60cf5461063a9073ffffffffffffffffffffffffffffffffffffffff16610530858585610b53565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061059c60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016105b89796959493929190611c83565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526114f2565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856106bf60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516106d1959493929190611ce2565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b6000547501000000000000000000000000000000000000000000900460ff16158080156107b0575060005460017401000000000000000000000000000000000000000090910460ff16105b806107e25750303b1580156107e2575060005474010000000000000000000000000000000000000000900460ff166001145b610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905580156108f957600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc80549285169290911691909117905561096b73420000000000000000000000000000000000000761158b565b80156109ce57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a679190611d30565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610b36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f74207365740000000000000000000000606482015260840161086a565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b6f604063ffffffff8816611d81565b610b799190611db1565b610b84601088611d81565b610b919062030d40611dff565b610b9b9190611dff565b610ba59190611dff565b610baf9190611dff565b610bb99190611dff565b949350505050565b610bc96109d3565b15610c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a2070617573656400000000604482015260640161086a565b60f087901c60028110610ceb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a40161086a565b8061ffff16600003610de0576000610d3c878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506116c7915050565b600081815260cb602052604090205490915060ff1615610dde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c61796564000000000000000000606482015260840161086a565b505b6000610e26898989898989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116e692505050565b9050610e30611709565b15610e6857853414610e4457610e44611e2b565b600081815260ce602052604090205460ff1615610e6357610e63611e2b565b610fba565b3415610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a40161086a565b600081815260ce602052604090205460ff16610fba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c6179656400000000000000000000000000000000606482015260840161086a565b610fc3876117e5565b15611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a40161086a565b600081815260cb602052604090205460ff1615611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c6179656400000000000000000000606482015260840161086a565b61113685611127611388619c40611dff565b67ffffffffffffffff1661182b565b158061115c575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561127557600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161086a565b50506114cd565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061130688619c405a6112c99190611e5a565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061184992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156113bc57600082815260cb602052604090205460ff161561135957611359611e2b565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26114c9565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016114c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161086a565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611553908890839089906000908990600401611e71565b6000604051808303818588803b15801561156c57600080fd5b505af1158015611580573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161086a565b60cc5473ffffffffffffffffffffffffffffffffffffffff166116805760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006116d585858585611863565b805190602001209050949350505050565b60006116f68787878787876118fc565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a67575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156117a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c99190611ec9565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611825575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60608484848460405160240161187c9493929190611ee6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606086868686868660405160240161191996959493929190611f30565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146119bd57600080fd5b50565b60008083601f8401126119d257600080fd5b50813567ffffffffffffffff8111156119ea57600080fd5b602083019150836020828501011115611a0257600080fd5b9250929050565b803563ffffffff81168114611a1d57600080fd5b919050565b60008060008060608587031215611a3857600080fd5b8435611a438161199b565b9350602085013567ffffffffffffffff811115611a5f57600080fd5b611a6b878288016119c0565b9094509250611a7e905060408601611a09565b905092959194509250565b60008060408385031215611a9c57600080fd5b8235611aa78161199b565b91506020830135611ab78161199b565b809150509250929050565b6000815180845260005b81811015611ae857602081850181015186830182015201611acc565b81811115611afa576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b406020830184611ac2565b9392505050565b600060208284031215611b5957600080fd5b5035919050565b600080600060408486031215611b7557600080fd5b833567ffffffffffffffff811115611b8c57600080fd5b611b98868287016119c0565b9094509250611bab905060208501611a09565b90509250925092565b600080600080600080600060c0888a031215611bcf57600080fd5b873596506020880135611be18161199b565b95506040880135611bf18161199b565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611c1b57600080fd5b611c278a828b016119c0565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611cd560c083018486611c3a565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611d12608083018688611c3a565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611d4257600080fd5b81518015158114611b4057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611da857611da8611d52565b02949350505050565b600067ffffffffffffffff80841680611df3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611e2257611e22611d52565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611e6c57611e6c611d52565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a060808201526000611ebe60a0830184611ac2565b979650505050505050565b600060208284031215611edb57600080fd5b8151611b408161199b565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611f1f6080830185611ac2565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611f7b60c0830184611ac2565b9897505050505050505056fea164736f6c634300080f000a","sourceMap":"701:2432:130:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4456:53:223;;;;;;;;;;;;4507:2;4456:53;;;;;188:18:357;176:31;;;158:50;;146:2;131:18;4456:53:223;;;;;;;;4301:64;;;;;;;;;;;;4363:2;4301:64;;2107:87:130;;;;;;;;;;-1:-1:-1;2181:6:130;;;;2107:87;;;427:42:357;415:55;;;397:74;;385:2;370:18;2107:87:130;219:258:357;4146:62:223;;;;;;;;;;;;4206:2;4146:62;;822:40:130;;;;;;;;;;-1:-1:-1;822:40:130;;;;;;;;8628:995:223;;;;;;:::i;:::-;;:::i;:::-;;3879:42;;;;;;;;;;;;3920:1;3879:42;;;;;2213:6:357;2201:19;;;2183:38;;2171:2;2156:18;3879:42:223;2039:188:357;1542:296:130;;;;;;;;;;-1:-1:-1;1542:296:130;;;;;:::i;:::-;;:::i;4597:51:223:-;;;;;;;;;;;;4642:6;4597:51;;1048:40:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4943:53:223:-;;;;;;;;;;;;4991:5;4943:53;;3028:103:130;;;;;;;;;;;;;:::i;:::-;;;3601:14:357;;3594:22;3576:41;;3564:2;3549:18;3028:103:130;3436:187:357;950:28:130;;;;;;;;;;-1:-1:-1;950:28:130;;;;;;;;15764:250:223;;;;;;;;;;;;;:::i;3999:56::-;;;;;;;;;;;;4048:7;3999:56;;16317:108;;;;;;;;;;-1:-1:-1;16404:14:223;;;;16317:108;;6234:46;;;;;;;;;;-1:-1:-1;6234:46:223;;;;;:::i;:::-;;;;;;;;;;;;;;;;5252:50;;;;;;;;;;-1:-1:-1;5252:50:223;;;;;:::i;:::-;;;;;;;;;;;;;;;;17493:894;;;;;;;;;;-1:-1:-1;17493:894:223;;;;;:::i;:::-;;:::i;10311:5066::-;;;;;;:::i;:::-;;:::i;6386:42::-;;;;;;;;;;-1:-1:-1;6386:42:223;;;;;;;;16746:134;;;;;;;;;;;;16847:8;;;;4855:18:195;4852:30;;3028:103:130;16746:134:223;;;5835:25:357;;;5823:2;5808:18;16746:134:223;5689:177:357;8628:995:223;9128:14;;9088:326;;9128:14;;9168:31;9176:8;;9186:12;9168:7;:31::i;:::-;9221:9;9291:26;9319:14;16847:8;;;;4855:18:195;4852:30;;3028:103:130;9319:14:223;9335:10;9347:7;9356:9;9367:12;9381:8;;9251:152;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9088:12;:326::i;:::-;9442:7;9430:72;;;9451:10;9463:8;;9473:14;16847:8;;;;4855:18:195;4852:30;;3028:103:130;9473:14:223;9489:12;9430:72;;;;;;;;;;:::i;:::-;;;;;;;;9517:44;;9551:9;5835:25:357;;9539:10:223;;9517:44;;5823:2:357;5808:18;9517:44:223;;;;;;;-1:-1:-1;;9598:8:223;9596:10;;;;;;;;;;;;;;;;-1:-1:-1;;8628:995:223:o;1542:296:130:-;3111:19:27;3134:13;;;;;;3133:14;;3179:34;;;;-1:-1:-1;3197:12:27;;3212:1;3197:12;;;;;;:16;3179:34;3178:108;;;-1:-1:-1;3258:4:27;1476:19:33;:23;;;3219:66:27;;-1:-1:-1;3268:12:27;;;;;;;3284:1;3268:17;3219:66;3157:201;;;;;;;7634:2:357;3157:201:27;;;7616:21:357;7673:2;7653:18;;;7646:30;7712:34;7692:18;;;7685:62;7783:16;7763:18;;;7756:44;7817:19;;3157:201:27;;;;;;;;;3368:12;:16;;;;;;;;3394:65;;;;3428:13;:20;;;;;;;;3394:65;1651:16:130::1;:36:::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;;1697:6:::1;:16:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;1723:108:::1;480:42:199;1723:27:130;:108::i;:::-;3483:14:27::0;3479:99;;;3529:5;3513:21;;;;;;3553:14;;-1:-1:-1;7999:36:357;;3553:14:27;;7987:2:357;7972:18;3553:14:27;;;;;;;3479:99;3101:483;1542:296:130;;:::o;3028:103::-;3099:16;;:25;;;;;;;;3076:4;;3099:16;;;:23;;:25;;;;;;;;;;;;;;:16;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3092:32;;3028:103;:::o;15764:250:223:-;15859:16;;15819:7;;15859:47;:16;:47;;15838:135;;;;;;;8530:2:357;15838:135:223;;;8512:21:357;8569:2;8549:18;;;8542:30;8608:34;8588:18;;;8581:62;8679:23;8659:18;;;8652:51;8720:19;;15838:135:223;8328:417:357;15838:135:223;-1:-1:-1;15991:16:223;;;;;15764:250::o;17493:894::-;17577:6;4991:5;4796:6;;4363:2;17806:49;4206:2;17806:49;;;;:::i;:::-;17805:90;;;;:::i;:::-;17703:51;4507:2;17710:8;17703:51;:::i;:::-;17639:116;;4048:7;17639:116;:::i;:::-;:257;;;;:::i;:::-;:412;;;;:::i;:::-;:587;;;;:::i;:::-;:741;;;;:::i;:::-;17595:785;17493:894;-1:-1:-1;;;;17493:894:223:o;10311:5066::-;10722:8;:6;:8::i;:::-;:17;10714:58;;;;;;;10015:2:357;10714:58:223;;;9997:21:357;10054:2;10034:18;;;10027:30;10093;10073:18;;;10066:58;10141:18;;10714:58:223;9813:352:357;10714:58:223;5444:3:195;5440:16;;;10869:1:223;10859:11;;10851:101;;;;;;;10372:2:357;10851:101:223;;;10354:21:357;10411:2;10391:18;;;10384:30;10450:34;10430:18;;;10423:62;10521:34;10501:18;;;10494:62;10593:15;10572:19;;;10565:44;10626:19;;10851:101:223;10170:481:357;10851:101:223;11154:7;:12;;11165:1;11154:12;11150:247;;11182:15;11200:68;11233:7;11242;11251:8;;11200:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11261:6:223;;-1:-1:-1;11200:32:223;;-1:-1:-1;;11200:68:223:i;:::-;11290:27;;;;:18;:27;;;;;;11182:86;;-1:-1:-1;11290:27:223;;:36;11282:104;;;;;;;10858:2:357;11282:104:223;;;10840:21:357;10897:2;10877:18;;;10870:30;10936:34;10916:18;;;10909:62;11007:25;10987:18;;;10980:53;11050:19;;11282:104:223;10656:419:357;11282:104:223;11168:229;11150:247;11567:21;11603:90;11636:6;11644:7;11653;11662:6;11670:12;11684:8;;11603:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11603:32:223;;-1:-1:-1;;;11603:90:223:i;:::-;11567:126;;11708:19;:17;:19::i;:::-;11704:506;;;11897:6;11884:9;:19;11877:27;;;;:::i;:::-;11926:29;;;;:14;:29;;;;;;;;11925:30;11918:38;;;;:::i;:::-;11704:506;;;11995:9;:14;11987:107;;;;;;;11471:2:357;11987:107:223;;;11453:21:357;11510:2;11490:18;;;11483:30;11549:34;11529:18;;;11522:62;11620:34;11600:18;;;11593:62;11692:18;11671:19;;;11664:47;11728:19;;11987:107:223;11269:484:357;11987:107:223;12117:29;;;;:14;:29;;;;;;;;12109:90;;;;;;;11960:2:357;12109:90:223;;;11942:21:357;11999:2;11979:18;;;11972:30;12038:34;12018:18;;;12011:62;12109:18;12089;;;12082:46;12145:19;;12109:90:223;11758:412:357;12109:90:223;12241:24;12257:7;12241:15;:24::i;:::-;:33;12220:135;;;;;;;12377:2:357;12220:135:223;;;12359:21:357;12416:2;12396:18;;;12389:30;12455:34;12435:18;;;12428:62;12526:34;12506:18;;;12499:62;12598:5;12577:19;;;12570:34;12621:19;;12220:135:223;12175:471:357;12220:135:223;12374:33;;;;:18;:33;;;;;;;;:42;12366:109;;;;;;;12853:2:357;12366:109:223;;;12835:21:357;12892:2;12872:18;;;12865:30;12931:34;12911:18;;;12904:62;13002:24;12982:18;;;12975:52;13044:19;;12366:109:223;12651:418:357;12366:109:223;13169:77;13188:12;13202:43;4991:5;4796:6;13202:43;:::i;:::-;13169:77;;:18;:77::i;:::-;13168:78;:145;;;-1:-1:-1;13266:16:223;;:47;:16;1338:42:192;13266:47:223;;13168:145;13151:919;;;13338:29;;;;:14;:29;;;;;;:36;;;;13370:4;13338:36;;;13393:35;13353:13;;13393:35;;;13908:41;:9;:41;13904:135;;13969:55;;;;;13276:2:357;13969:55:223;;;13258:21:357;13315:2;13295:18;;;13288:30;13354:34;13334:18;;;13327:62;13425:15;13405:18;;;13398:43;13458:19;;13969:55:223;13074:409:357;13904:135:223;14053:7;;;;13151:919;14080:16;:26;;;;;;;;;;-1:-1:-1;14131:72:223;14145:7;4796:6;14154:9;:30;;;;:::i;:::-;14186:6;14194:8;;14131:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14131:13:223;;-1:-1:-1;;;14131:72:223:i;:::-;14213:16;:46;;;;1338:42:192;14213:46:223;;;14116:87;-1:-1:-1;14270:1101:223;;;;14484:33;;;;:18;:33;;;;;;;;:42;14477:50;;;;:::i;:::-;14541:33;;;;:18;:33;;;;;;:40;;;;14577:4;14541:40;;;14600:29;14560:13;;14600:29;;;14270:1101;;;14660:29;;;;:14;:29;;;;;;:36;;;;14692:4;14660:36;;;14715:35;14675:13;;14715:35;;;15230:41;:9;:41;15226:135;;15291:55;;;;;13276:2:357;15291:55:223;;;13258:21:357;13315:2;13295:18;;;13288:30;13354:34;13334:18;;;13327:62;13425:15;13405:18;;;13398:43;13458:19;;15291:55:223;13074:409:357;15226:135:223;10537:4840;;;10311:5066;;;;;;;;:::o;1186:320:33:-;1476:19;;;:23;;;1186:320::o;2241::130:-;2358:6;;:196;;;;;:6;;;;;:25;;2392:6;;2358:196;;2420:3;;2392:6;;2476:9;;2358:6;;2538:5;;2358:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2241:320;;;;:::o;18503:636:223:-;4910:13:27;;;;;;;4902:69;;;;;;;14412:2:357;4902:69:27;;;14394:21:357;14451:2;14431:18;;;14424:30;14490:34;14470:18;;;14463:62;14561:13;14541:18;;;14534:41;14592:19;;4902:69:27;14210:407:357;4902:69:27;18988:16:223::1;::::0;:30:::1;:16;18984:107;;19034:16;:46:::0;;;::::1;1338:42:192;19034:46:223;::::0;;18984:107:::1;19100:14;:32:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;18503:636::o;3100:305:196:-;3289:7;3329:68;3365:7;3374;3383:5;3390:6;3329:35;:68::i;:::-;3319:79;;;;;;3312:86;;3100:305;;;;;;:::o;3877:375::-;4117:7;4157:87;4193:6;4201:7;4210;4219:6;4227:9;4238:5;4157:35;:87::i;:::-;4147:98;;;;;;4140:105;;3877:375;;;;;;;;:::o;2608:168:130:-;2714:6;;2669:4;;2714:6;;2692:10;:29;:77;;;;-1:-1:-1;2754:14:130;;2725:6;;:17;;;;;;;;2754:14;;;;;2725:6;;;;:15;;:17;;;;;;;;;;;;;;;:6;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;;2685:84;;2608:168;:::o;2823:158::-;2897:4;2920:24;;;2939:4;2920:24;;:54;;-1:-1:-1;2967:6:130;;;2948:26;;;2967:6;;2948:26;2920:54;2913:61;2823:158;-1:-1:-1;;2823:158:130:o;3615:365:200:-;3696:4;3712:15;3931:2;3916:12;3909:5;3905:24;3901:33;3896:2;3887:7;3883:16;3879:56;3874:2;3867:5;3863:14;3860:76;3853:84;;3615:365;-1:-1:-1;;;;3615:365:200:o;1202:536::-;1305:4;1321:13;1668:1;1635;1594:9;1588:16;1554:2;1543:9;1539:18;1496:6;1454:7;1421:4;1395:302;1367:330;1202:536;-1:-1:-1;;;;;;1202:536:200:o;3073:336:195:-;3264:12;3370:7;3379;3388:5;3395:6;3299:103;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3073:336:195;;;;;;:::o;3883:516::-;4125:12;4272:6;4292:7;4313;4334:6;4354:9;4377:5;4160:232;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3883:516:195;;;;;;;;:::o;739:154:357:-;825:42;818:5;814:54;807:5;804:65;794:93;;883:1;880;873:12;794:93;739:154;:::o;898:347::-;949:8;959:6;1013:3;1006:4;998:6;994:17;990:27;980:55;;1031:1;1028;1021:12;980:55;-1:-1:-1;1054:20:357;;1097:18;1086:30;;1083:50;;;1129:1;1126;1119:12;1083:50;1166:4;1158:6;1154:17;1142:29;;1218:3;1211:4;1202:6;1194;1190:19;1186:30;1183:39;1180:59;;;1235:1;1232;1225:12;1180:59;898:347;;;;;:::o;1250:163::-;1317:20;;1377:10;1366:22;;1356:33;;1346:61;;1403:1;1400;1393:12;1346:61;1250:163;;;:::o;1418:616::-;1505:6;1513;1521;1529;1582:2;1570:9;1561:7;1557:23;1553:32;1550:52;;;1598:1;1595;1588:12;1550:52;1637:9;1624:23;1656:31;1681:5;1656:31;:::i;:::-;1706:5;-1:-1:-1;1762:2:357;1747:18;;1734:32;1789:18;1778:30;;1775:50;;;1821:1;1818;1811:12;1775:50;1860:58;1910:7;1901:6;1890:9;1886:22;1860:58;:::i;:::-;1937:8;;-1:-1:-1;1834:84:357;-1:-1:-1;1991:37:357;;-1:-1:-1;2024:2:357;2009:18;;1991:37;:::i;:::-;1981:47;;1418:616;;;;;;;:::o;2232:438::-;2350:6;2358;2411:2;2399:9;2390:7;2386:23;2382:32;2379:52;;;2427:1;2424;2417:12;2379:52;2466:9;2453:23;2485:31;2510:5;2485:31;:::i;:::-;2535:5;-1:-1:-1;2592:2:357;2577:18;;2564:32;2605:33;2564:32;2605:33;:::i;:::-;2657:7;2647:17;;;2232:438;;;;;:::o;2675:531::-;2717:3;2755:5;2749:12;2782:6;2777:3;2770:19;2807:1;2817:162;2831:6;2828:1;2825:13;2817:162;;;2893:4;2949:13;;;2945:22;;2939:29;2921:11;;;2917:20;;2910:59;2846:12;2817:162;;;2997:6;2994:1;2991:13;2988:87;;;3063:1;3056:4;3047:6;3042:3;3038:16;3034:27;3027:38;2988:87;-1:-1:-1;3120:2:357;3108:15;3125:66;3104:88;3095:98;;;;3195:4;3091:109;;2675:531;-1:-1:-1;;2675:531:357:o;3211:220::-;3360:2;3349:9;3342:21;3323:4;3380:45;3421:2;3410:9;3406:18;3398:6;3380:45;:::i;:::-;3372:53;3211:220;-1:-1:-1;;;3211:220:357:o;4121:180::-;4180:6;4233:2;4221:9;4212:7;4208:23;4204:32;4201:52;;;4249:1;4246;4239:12;4201:52;-1:-1:-1;4272:23:357;;4121:180;-1:-1:-1;4121:180:357:o;4306:481::-;4384:6;4392;4400;4453:2;4441:9;4432:7;4428:23;4424:32;4421:52;;;4469:1;4466;4459:12;4421:52;4509:9;4496:23;4542:18;4534:6;4531:30;4528:50;;;4574:1;4571;4564:12;4528:50;4613:58;4663:7;4654:6;4643:9;4639:22;4613:58;:::i;:::-;4690:8;;-1:-1:-1;4587:84:357;-1:-1:-1;4744:37:357;;-1:-1:-1;4777:2:357;4762:18;;4744:37;:::i;:::-;4734:47;;4306:481;;;;;:::o;4792:892::-;4907:6;4915;4923;4931;4939;4947;4955;5008:3;4996:9;4987:7;4983:23;4979:33;4976:53;;;5025:1;5022;5015:12;4976:53;5061:9;5048:23;5038:33;;5121:2;5110:9;5106:18;5093:32;5134:31;5159:5;5134:31;:::i;:::-;5184:5;-1:-1:-1;5241:2:357;5226:18;;5213:32;5254:33;5213:32;5254:33;:::i;:::-;5306:7;-1:-1:-1;5360:2:357;5345:18;;5332:32;;-1:-1:-1;5411:3:357;5396:19;;5383:33;;-1:-1:-1;5467:3:357;5452:19;;5439:33;5495:18;5484:30;;5481:50;;;5527:1;5524;5517:12;5481:50;5566:58;5616:7;5607:6;5596:9;5592:22;5566:58;:::i;:::-;4792:892;;;;-1:-1:-1;4792:892:357;;-1:-1:-1;4792:892:357;;;;5540:84;;-1:-1:-1;;;4792:892:357:o;5871:325::-;5959:6;5954:3;5947:19;6011:6;6004:5;5997:4;5992:3;5988:14;5975:43;;6063:1;6056:4;6047:6;6042:3;6038:16;6034:27;6027:38;5929:3;6185:4;6115:66;6110:2;6102:6;6098:15;6094:88;6089:3;6085:98;6081:109;6074:116;;5871:325;;;;:::o;6201:697::-;6496:6;6485:9;6478:25;6459:4;6522:42;6612:2;6604:6;6600:15;6595:2;6584:9;6580:18;6573:43;6664:2;6656:6;6652:15;6647:2;6636:9;6632:18;6625:43;;6704:6;6699:2;6688:9;6684:18;6677:34;6760:10;6752:6;6748:23;6742:3;6731:9;6727:19;6720:52;6809:3;6803;6792:9;6788:19;6781:32;6830:62;6887:3;6876:9;6872:19;6864:6;6856;6830:62;:::i;:::-;6822:70;6201:697;-1:-1:-1;;;;;;;;;6201:697:357:o;6903:524::-;7155:42;7147:6;7143:55;7132:9;7125:74;7235:3;7230:2;7219:9;7215:18;7208:31;7106:4;7256:62;7313:3;7302:9;7298:19;7290:6;7282;7256:62;:::i;:::-;7248:70;;7354:6;7349:2;7338:9;7334:18;7327:34;7409:10;7401:6;7397:23;7392:2;7381:9;7377:18;7370:51;6903:524;;;;;;;;:::o;8046:277::-;8113:6;8166:2;8154:9;8145:7;8141:23;8137:32;8134:52;;;8182:1;8179;8172:12;8134:52;8214:9;8208:16;8267:5;8260:13;8253:21;8246:5;8243:32;8233:60;;8289:1;8286;8279:12;8750:184;8802:77;8799:1;8792:88;8899:4;8896:1;8889:15;8923:4;8920:1;8913:15;8939:270;8978:7;9010:18;9055:2;9052:1;9048:10;9085:2;9082:1;9078:10;9141:3;9137:2;9133:12;9128:3;9125:21;9118:3;9111:11;9104:19;9100:47;9097:73;;;9150:18;;:::i;:::-;9190:13;;8939:270;-1:-1:-1;;;;8939:270:357:o;9214:353::-;9253:1;9279:18;9324:2;9321:1;9317:10;9346:3;9336:191;;9383:77;9380:1;9373:88;9484:4;9481:1;9474:15;9512:4;9509:1;9502:15;9336:191;9545:10;;9541:20;;;;;9214:353;-1:-1:-1;;9214:353:357:o;9572:236::-;9611:3;9639:18;9684:2;9681:1;9677:10;9714:2;9711:1;9707:10;9745:3;9741:2;9737:12;9732:3;9729:21;9726:47;;;9753:18;;:::i;:::-;9789:13;;9572:236;-1:-1:-1;;;;9572:236:357:o;11080:184::-;11132:77;11129:1;11122:88;11229:4;11226:1;11219:15;11253:4;11250:1;11243:15;13488:125;13528:4;13556:1;13553;13550:8;13547:34;;;13561:18;;:::i;:::-;-1:-1:-1;13598:9:357;;13488:125::o;13618:587::-;13881:42;13873:6;13869:55;13858:9;13851:74;13961:6;13956:2;13945:9;13941:18;13934:34;14016:18;14008:6;14004:31;13999:2;13988:9;13984:18;13977:59;14086:6;14079:14;14072:22;14067:2;14056:9;14052:18;14045:50;14132:3;14126;14115:9;14111:19;14104:32;13832:4;14153:46;14194:3;14183:9;14179:19;14171:6;14153:46;:::i;:::-;14145:54;13618:587;-1:-1:-1;;;;;;;13618:587:357:o;14622:251::-;14692:6;14745:2;14733:9;14724:7;14720:23;14716:32;14713:52;;;14761:1;14758;14751:12;14713:52;14793:9;14787:16;14812:31;14837:5;14812:31;:::i;14878:512::-;15072:4;15101:42;15182:2;15174:6;15170:15;15159:9;15152:34;15234:2;15226:6;15222:15;15217:2;15206:9;15202:18;15195:43;;15274:3;15269:2;15258:9;15254:18;15247:31;15295:46;15336:3;15325:9;15321:19;15313:6;15295:46;:::i;:::-;15287:54;;15377:6;15372:2;15361:9;15357:18;15350:34;14878:512;;;;;;;:::o;15395:656::-;15682:6;15671:9;15664:25;15645:4;15708:42;15798:2;15790:6;15786:15;15781:2;15770:9;15766:18;15759:43;15850:2;15842:6;15838:15;15833:2;15822:9;15818:18;15811:43;;15890:6;15885:2;15874:9;15870:18;15863:34;15934:6;15928:3;15917:9;15913:19;15906:35;15978:3;15972;15961:9;15957:19;15950:32;15999:46;16040:3;16029:9;16025:19;16017:6;15999:46;:::i;:::-;15991:54;15395:656;-1:-1:-1;;;;;;;;15395:656:357:o","linkReferences":{}},"methodIdentifiers":{"MESSAGE_VERSION()":"3f827a5a","MIN_GAS_CALLDATA_OVERHEAD()":"028f85f7","MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR()":"0c568498","MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR()":"2828d7e8","OTHER_MESSENGER()":"9fce812c","PORTAL()":"0ff754ea","RELAY_CALL_OVERHEAD()":"4c1d6a69","RELAY_CONSTANT_OVERHEAD()":"83a74074","RELAY_GAS_CHECK_BUFFER()":"5644cfdf","RELAY_RESERVED_GAS()":"8cbeeef2","baseGas(bytes,uint32)":"b28ade25","failedMessages(bytes32)":"a4e7f8bd","initialize(address,address)":"485cc955","messageNonce()":"ecc70428","otherMessenger()":"db505d80","paused()":"5c975abb","portal()":"6425666b","relayMessage(uint256,address,address,uint256,uint256,bytes)":"d764ad0b","sendMessage(address,bytes,uint32)":"3dbb202b","successfulMessages(bytes32)":"b1b1b209","superchainConfig()":"35e80ab3","version()":"54fd4d50","xDomainMessageSender()":"6e296e45"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"FailedRelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"RelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"name\":\"SentMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SentMessageExtension1\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSAGE_VERSION\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_MESSENGER\",\"outputs\":[{\"internalType\":\"contract CrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PORTAL\",\"outputs\":[{\"internalType\":\"contract OptimismPortal\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_CALL_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_RESERVED_GAS\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"}],\"name\":\"baseGas\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"failedMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract SuperchainConfig\",\"name\":\"_superchainConfig\",\"type\":\"address\"},{\"internalType\":\"contract OptimismPortal\",\"name\":\"_portal\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"otherMessenger\",\"outputs\":[{\"internalType\":\"contract CrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"portal\",\"outputs\":[{\"internalType\":\"contract OptimismPortal\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"relayMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"successfulMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"superchainConfig\",\"outputs\":[{\"internalType\":\"contract SuperchainConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xDomainMessageSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"custom:proxied\":\"@title L1CrossDomainMessenger\",\"kind\":\"dev\",\"methods\":{\"OTHER_MESSENGER()\":{\"custom:legacy\":\"\",\"returns\":{\"_0\":\"CrossDomainMessenger contract on the other chain.\"}},\"PORTAL()\":{\"custom:legacy\":\"\",\"returns\":{\"_0\":\"Contract of the OptimismPortal on this chain.\"}},\"baseGas(bytes,uint32)\":{\"params\":{\"_message\":\"Message to compute the amount of required gas for.\",\"_minGasLimit\":\"Minimum desired gas limit when message goes to target.\"},\"returns\":{\"_0\":\"Amount of gas required to guarantee message receipt.\"}},\"initialize(address,address)\":{\"params\":{\"_portal\":\"Contract of the OptimismPortal contract on this network.\",\"_superchainConfig\":\"Contract of the SuperchainConfig contract on this network.\"}},\"messageNonce()\":{\"returns\":{\"_0\":\"Nonce of the next message to be sent, with added message version.\"}},\"paused()\":{\"returns\":{\"_0\":\"Whether or not the contract is paused.\"}},\"relayMessage(uint256,address,address,uint256,uint256,bytes)\":{\"params\":{\"_message\":\"Message to send to the target.\",\"_minGasLimit\":\"Minimum amount of gas that the message can be executed with.\",\"_nonce\":\"Nonce of the message being relayed.\",\"_sender\":\"Address of the user who sent the message.\",\"_target\":\"Address that the message is targeted at.\",\"_value\":\"ETH value to send with the message.\"}},\"sendMessage(address,bytes,uint32)\":{\"params\":{\"_message\":\"Message to trigger the target address with.\",\"_minGasLimit\":\"Minimum gas limit that the message can be executed with.\",\"_target\":\"Target contract or wallet address.\"}},\"xDomainMessageSender()\":{\"returns\":{\"_0\":\"Address of the sender of the currently executing message on the other chain.\"}}},\"stateVariables\":{\"portal\":{\"custom:network-specific\":\"\"},\"version\":{\"custom:semver\":\"2.3.0\"}},\"version\":1},\"userdoc\":{\"events\":{\"FailedRelayedMessage(bytes32)\":{\"notice\":\"Emitted whenever a message fails to be relayed on this chain.\"},\"RelayedMessage(bytes32)\":{\"notice\":\"Emitted whenever a message is successfully relayed on this chain.\"},\"SentMessage(address,address,bytes,uint256,uint256)\":{\"notice\":\"Emitted whenever a message is sent to the other chain.\"},\"SentMessageExtension1(address,uint256)\":{\"notice\":\"Additional event data to emit, required as of Bedrock. Cannot be merged with the SentMessage event without breaking the ABI of this contract, this is good enough.\"}},\"kind\":\"user\",\"methods\":{\"MESSAGE_VERSION()\":{\"notice\":\"Current message version identifier.\"},\"MIN_GAS_CALLDATA_OVERHEAD()\":{\"notice\":\"Extra gas added to base gas for each byte of calldata in a message.\"},\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR()\":{\"notice\":\"Denominator for dynamic overhead added to the base gas for a message.\"},\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR()\":{\"notice\":\"Numerator for dynamic overhead added to the base gas for a message.\"},\"OTHER_MESSENGER()\":{\"notice\":\"Retrieves the address of the paired CrossDomainMessenger contract on the other chain Public getter is legacy and will be removed in the future. Use `otherMessenger()` instead.\"},\"PORTAL()\":{\"notice\":\"Getter function for the OptimismPortal contract on this chain. Public getter is legacy and will be removed in the future. Use `portal()` instead.\"},\"RELAY_CALL_OVERHEAD()\":{\"notice\":\"Gas reserved for performing the external call in `relayMessage`.\"},\"RELAY_CONSTANT_OVERHEAD()\":{\"notice\":\"Constant overhead added to the base gas for a message.\"},\"RELAY_GAS_CHECK_BUFFER()\":{\"notice\":\"Gas reserved for the execution between the `hasMinGas` check and the external call in `relayMessage`.\"},\"RELAY_RESERVED_GAS()\":{\"notice\":\"Gas reserved for finalizing the execution of `relayMessage` after the safe call.\"},\"baseGas(bytes,uint32)\":{\"notice\":\"Computes the amount of gas required to guarantee that a given message will be received on the other chain without running out of gas. Guaranteeing that a message will not run out of gas is important because this ensures that a message can always be replayed on the other chain if it fails to execute completely.\"},\"constructor\":{\"notice\":\"Constructs the L1CrossDomainMessenger contract.\"},\"failedMessages(bytes32)\":{\"notice\":\"Mapping of message hashes to a boolean if and only if the message has failed to be executed at least once. A message will not be present in this mapping if it successfully executed on the first attempt.\"},\"initialize(address,address)\":{\"notice\":\"Initializes the contract.\"},\"messageNonce()\":{\"notice\":\"Retrieves the next message nonce. Message version will be added to the upper two bytes of the message nonce. Message version allows us to treat messages as having different structures.\"},\"otherMessenger()\":{\"notice\":\"CrossDomainMessenger contract on the other chain.\"},\"paused()\":{\"notice\":\"This function should return true if the contract is paused. On L1 this function will check the SuperchainConfig for its paused status. On L2 this function should be a no-op.\"},\"portal()\":{\"notice\":\"Contract of the OptimismPortal.\"},\"relayMessage(uint256,address,address,uint256,uint256,bytes)\":{\"notice\":\"Relays a message that was sent by the other CrossDomainMessenger contract. Can only be executed via cross-chain call from the other messenger OR if the message was already received once and is currently being replayed.\"},\"sendMessage(address,bytes,uint32)\":{\"notice\":\"Sends a message to some target address on the other chain. Note that if the call always reverts, then the message will be unrelayable, and any ETH sent will be permanently locked. The same will occur if the target on the other chain is considered unsafe (see the _isUnsafeTarget() function).\"},\"successfulMessages(bytes32)\":{\"notice\":\"Mapping of message hashes to boolean receipt values. Note that a message will only be present in this mapping if it has successfully been relayed on this chain, and can therefore not be relayed again.\"},\"superchainConfig()\":{\"notice\":\"Contract of the SuperchainConfig.\"},\"version()\":{\"notice\":\"Semantic version.\"},\"xDomainMessageSender()\":{\"notice\":\"Retrieves the address of the contract or wallet that initiated the currently executing message on the other chain. Will throw an error if there is no message currently being executed. Allows the recipient of a call to see who triggered it.\"}},\"notice\":\"The L1CrossDomainMessenger is a message passing interface between L1 and L2 responsible for sending and receiving data on the L1 side. Users are encouraged to use this interface instead of interacting with lower-level contracts directly.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/L1/L1CrossDomainMessenger.sol\":\"L1CrossDomainMessenger\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f\",\"dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929\",\"dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689\",\"dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy\"]},\"lib/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c\",\"dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8\"]},\"src/L1/L1CrossDomainMessenger.sol\":{\"keccak256\":\"0x1a93450f3f9e2262b32e7831709b01d4491befb79a90cc24509b569103674e06\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2896f906f07fb6ceb7fea3cb31a10b8289db628142cb0612d9890d62bce265b1\",\"dweb:/ipfs/QmYGAMecafbcT4LRBbDCYFj6mPCa3u5hNGUq2tfjWU3s18\"]},\"src/L1/L2OutputOracle.sol\":{\"keccak256\":\"0x342c5084f3c640c90530122bd78372c011d6162e698dd8c8daec9496fef01d42\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8700a3d486bd62cbb861ff80175b8040336940515791073af6a036db7c2df303\",\"dweb:/ipfs/QmSGKTH84rVHWgMg4d6GQZCmCJ16KuUuTsMwPMDdJxCsww\"]},\"src/L1/OptimismPortal.sol\":{\"keccak256\":\"0xf46a1158e86edcbb157d0b06a32db37867c0bc9d2aeeed6a8110547c7537201a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0aeb33d425db200953063e3576403b78c50e3a5e7b4f56ef4bead28919406ee2\",\"dweb:/ipfs/QmUFb1rEQnCFrGRZQPHgFFWJQ48SR7wodiSFLgQKu8Jx6k\"]},\"src/L1/ResourceMetering.sol\":{\"keccak256\":\"0xde3ac62c60f27a3f1ba06eec94f4eda45e7ec5544c6a5d6b79543a7184e44408\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://265a2845c4ff0d9076dd0505755cf2bdf799f4fdc09ef016865a26b51f5c3409\",\"dweb:/ipfs/QmRzSdBD8jmQf3U9u2ATRAzzuyo6c5ugz8VA5ZM4vzoGiM\"]},\"src/L1/SuperchainConfig.sol\":{\"keccak256\":\"0x5fab874f980fe3e52c3398ddd25b655c56af0c98c15588b2ad9ebf30671d859d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4e0aa613d38eceb621f8569fc714f521bc1f2df3d029552186ab3cdf2ee5d53f\",\"dweb:/ipfs/QmZDzFxhTXLW79eohQbr1nghNh3oNC4CUfH7uMX8CsjVAB\"]},\"src/L1/SystemConfig.sol\":{\"keccak256\":\"0xc3d6392cbc44e38ddc93b84b82b08ab8e813df771a48926db3f94edde8f2b64a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d326d644dc59a57a71f4ff6eaa5c6d1464697c7df337b641fe82091b9050e6ce\",\"dweb:/ipfs/Qmd6tNzBmm8V4cpcMNyFWbWnKPNMRoysmmA62rZjGqpg7f\"]},\"src/libraries/Arithmetic.sol\":{\"keccak256\":\"0x91345e053584f82ad04d682ba821cf3ede808304f5b2a88116a894cf692c21db\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://005e3c42d2edfca0a506cbda94d3b0104eddf20c00bd1bd25272f53f2ef74c72\",\"dweb:/ipfs/QmdaW6Nge6NKoGvFqRpQjBpM2fXpc5y8WpZyBnDnKicdJq\"]},\"src/libraries/Burn.sol\":{\"keccak256\":\"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f\",\"dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb\"]},\"src/libraries/Bytes.sol\":{\"keccak256\":\"0x827f47d123b0fdf3b08816d5b33831811704dbf4e554e53f2269354f6bba8859\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3137ac7204d30a245a8b0d67aa6da5286f1bd8c90379daab561f84963b6db782\",\"dweb:/ipfs/QmWRhisw3axJK833gUScs23ETh2MLFbVzzqzYVMKSDN3S9\"]},\"src/libraries/Constants.sol\":{\"keccak256\":\"0xe0aeec7d6e5d1e44a11405d3b5bfc384ea092c39bea0b763ab937a26fd427132\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11aa3bff9da26ca2545132ec7994866690446a5321023811c254410d9593bd9b\",\"dweb:/ipfs/QmVxWqadxvdfkqdrhfWisDqeAthibn4HEE1P6o9aFxXLhp\"]},\"src/libraries/Encoding.sol\":{\"keccak256\":\"0x1dafabcbd4877c7abe9698957b0a44b7e911cb8b11c1437a4ed897135669fa87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6addfacefa26fdb44f56d73fa0172b97740de75629a962905ec2a20a28d40fff\",\"dweb:/ipfs/QmboHMouqU19Rnbqrfo1gkfnuDBFcPiC9wsKgGtF2W1cNA\"]},\"src/libraries/Hashing.sol\":{\"keccak256\":\"0x89c07a0ca102cbe57b4e082543f2dd6dae0e1fd4a87908a334bd076fc914e7b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://69c83489c9544ab442dc244c2feb2c6811b726a5eb5a509b97fc5ccb90b98c12\",\"dweb:/ipfs/QmPGGJeLasc1HWHzd6odvWcNvFPQrbYtDubZcv8yp1HLtF\"]},\"src/libraries/PortalErrors.sol\":{\"keccak256\":\"0x57adcaa45a1ce9c5af04d0fe4ecbc86e6ff3f947f7957ab55bdade129adcf558\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf485f11085ad6d1ba1386fdb340f65eb1048187692ad3d9eb8816e290140c1\",\"dweb:/ipfs/Qmb423b45TLV8PdhFa8Hs72eom5D2C5q4gVcYGNzDh4EMU\"]},\"src/libraries/Predeploys.sol\":{\"keccak256\":\"0x7b48b32b75e9ba0cd7f83b3304c6c1676dd8de20a5d40e8846bf7018ae9aff02\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7574fcc79c0d545b90071023aa81ee7880ab50b3057df598fa693bc4cf303663\",\"dweb:/ipfs/QmWLxHzgfaTJ7thfb7khXkTY5UtSBZ5VTUB4DaAXVw7DRe\"]},\"src/libraries/SafeCall.sol\":{\"keccak256\":\"0x0636a7abb242bb5d6f5606967c8929e6aa7e63468c1e2ce40ad4780d4c4bf94f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4daec2ac8f9907bbf84ef0a1c48f03bae8657619bc6f42b3a672f25c516f17a\",\"dweb:/ipfs/Qmf8gfRxBv8gEmCkP8YMPb2GGfj9QUnoNUyKE7UR2SWGnq\"]},\"src/libraries/Storage.sol\":{\"keccak256\":\"0x7ce27a05552aa69afa6b2ab6684dfe99f27366cf8ef2046baeb1fb62fff0022f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6a24f3ed56681720707a5ab0372fd67fcb1a4f6fb072c7140cda28bdb70f269\",\"dweb:/ipfs/QmW9uTpUULV4xmP7A7MoBDeDhVfQgmJG5qVUFGtXxWpWWK\"]},\"src/libraries/Types.sol\":{\"keccak256\":\"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e\",\"dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc\"]},\"src/libraries/rlp/RLPReader.sol\":{\"keccak256\":\"0x99731a39bc10203719d448117b0e6ef47771890440d595d118084d7988d59afb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1dbeb75d0cc8de58350cc15df8867bf97d8492e0617b1c62733ace6155c6915a\",\"dweb:/ipfs/QmNiXzskPE72h93F8EXT8wAXKzEh2EERLbubdVMfwTQbtj\"]},\"src/libraries/rlp/RLPWriter.sol\":{\"keccak256\":\"0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b\",\"dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV\"]},\"src/libraries/trie/MerkleTrie.sol\":{\"keccak256\":\"0xf8ba770ee6666e73ae43184c700e9c704b2c4ace71f9e3c2227ddc11a8148b4c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4702ccee1fe44aea3ee01d59e6152eb755da083f786f00947fec4437c064fe74\",\"dweb:/ipfs/QmQjFj5J7hrEM1dxJjFszzW2Cs7g7eMhYNBXonF2DXBstE\"]},\"src/libraries/trie/SecureMerkleTrie.sol\":{\"keccak256\":\"0xeaff8315cfd21197bc6bc859c2decf5d4f4838c9c357c502cdf2b1eac863d288\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://79dcdcaa560aea51d138da4f5dc553a1808b6de090b2dc1629f18375edbff681\",\"dweb:/ipfs/QmbE4pUPhf5fLKW4W6cEjhQs55gEDvHmbmoBqkW1yz3bnw\"]},\"src/universal/CrossDomainMessenger.sol\":{\"keccak256\":\"0x330ae1479e88fc8a8b5b27a84df935a092a47ad13e59d9b9ea4982ad31bbe7b0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf5fb4e78a03dcad4b9a8e2d5ed135f8e989aa02090747386843383fa6b7d1\",\"dweb:/ipfs/QmTp66RoF6EaKeBrrZBuYAu3dsMfKo8de2XY9iHHnqfN3n\"]},\"src/universal/ISemver.sol\":{\"keccak256\":\"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a\",\"dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR\"]},\"src/vendor/AddressAliasHelper.sol\":{\"keccak256\":\"0x6ecb83b4ec80fbe49c22f4f95d90482de64660ef5d422a19f4d4b04df31c1237\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1d0885be6e473962f9a0622176a22300165ac0cc1a1d7f2e22b11c3d656ace88\",\"dweb:/ipfs/QmPRa3KmRpXW5P9ykveKRDgYN5zYo4cYLAYSnoqHX3KnXR\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.15+commit.e14f2714"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"bytes32","name":"msgHash","type":"bytes32","indexed":true}],"type":"event","name":"FailedRelayedMessage","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"msgHash","type":"bytes32","indexed":true}],"type":"event","name":"RelayedMessage","anonymous":false},{"inputs":[{"internalType":"address","name":"target","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"bytes","name":"message","type":"bytes","indexed":false},{"internalType":"uint256","name":"messageNonce","type":"uint256","indexed":false},{"internalType":"uint256","name":"gasLimit","type":"uint256","indexed":false}],"type":"event","name":"SentMessage","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"SentMessageExtension1","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"MESSAGE_VERSION","outputs":[{"internalType":"uint16","name":"","type":"uint16"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"MIN_GAS_CALLDATA_OVERHEAD","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"OTHER_MESSENGER","outputs":[{"internalType":"contract CrossDomainMessenger","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"PORTAL","outputs":[{"internalType":"contract OptimismPortal","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"RELAY_CALL_OVERHEAD","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"RELAY_CONSTANT_OVERHEAD","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"RELAY_GAS_CHECK_BUFFER","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"RELAY_RESERVED_GAS","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"}],"stateMutability":"pure","type":"function","name":"baseGas","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"failedMessages","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"contract SuperchainConfig","name":"_superchainConfig","type":"address"},{"internalType":"contract OptimismPortal","name":"_portal","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"messageNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"otherMessenger","outputs":[{"internalType":"contract CrossDomainMessenger","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"portal","outputs":[{"internalType":"contract OptimismPortal","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_minGasLimit","type":"uint256"},{"internalType":"bytes","name":"_message","type":"bytes"}],"stateMutability":"payable","type":"function","name":"relayMessage"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"}],"stateMutability":"payable","type":"function","name":"sendMessage"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"successfulMessages","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"superchainConfig","outputs":[{"internalType":"contract SuperchainConfig","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"xDomainMessageSender","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"OTHER_MESSENGER()":{"custom:legacy":"","returns":{"_0":"CrossDomainMessenger contract on the other chain."}},"PORTAL()":{"custom:legacy":"","returns":{"_0":"Contract of the OptimismPortal on this chain."}},"baseGas(bytes,uint32)":{"params":{"_message":"Message to compute the amount of required gas for.","_minGasLimit":"Minimum desired gas limit when message goes to target."},"returns":{"_0":"Amount of gas required to guarantee message receipt."}},"initialize(address,address)":{"params":{"_portal":"Contract of the OptimismPortal contract on this network.","_superchainConfig":"Contract of the SuperchainConfig contract on this network."}},"messageNonce()":{"returns":{"_0":"Nonce of the next message to be sent, with added message version."}},"paused()":{"returns":{"_0":"Whether or not the contract is paused."}},"relayMessage(uint256,address,address,uint256,uint256,bytes)":{"params":{"_message":"Message to send to the target.","_minGasLimit":"Minimum amount of gas that the message can be executed with.","_nonce":"Nonce of the message being relayed.","_sender":"Address of the user who sent the message.","_target":"Address that the message is targeted at.","_value":"ETH value to send with the message."}},"sendMessage(address,bytes,uint32)":{"params":{"_message":"Message to trigger the target address with.","_minGasLimit":"Minimum gas limit that the message can be executed with.","_target":"Target contract or wallet address."}},"xDomainMessageSender()":{"returns":{"_0":"Address of the sender of the currently executing message on the other chain."}}},"version":1},"userdoc":{"kind":"user","methods":{"MESSAGE_VERSION()":{"notice":"Current message version identifier."},"MIN_GAS_CALLDATA_OVERHEAD()":{"notice":"Extra gas added to base gas for each byte of calldata in a message."},"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR()":{"notice":"Denominator for dynamic overhead added to the base gas for a message."},"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR()":{"notice":"Numerator for dynamic overhead added to the base gas for a message."},"OTHER_MESSENGER()":{"notice":"Retrieves the address of the paired CrossDomainMessenger contract on the other chain Public getter is legacy and will be removed in the future. Use `otherMessenger()` instead."},"PORTAL()":{"notice":"Getter function for the OptimismPortal contract on this chain. Public getter is legacy and will be removed in the future. Use `portal()` instead."},"RELAY_CALL_OVERHEAD()":{"notice":"Gas reserved for performing the external call in `relayMessage`."},"RELAY_CONSTANT_OVERHEAD()":{"notice":"Constant overhead added to the base gas for a message."},"RELAY_GAS_CHECK_BUFFER()":{"notice":"Gas reserved for the execution between the `hasMinGas` check and the external call in `relayMessage`."},"RELAY_RESERVED_GAS()":{"notice":"Gas reserved for finalizing the execution of `relayMessage` after the safe call."},"baseGas(bytes,uint32)":{"notice":"Computes the amount of gas required to guarantee that a given message will be received on the other chain without running out of gas. Guaranteeing that a message will not run out of gas is important because this ensures that a message can always be replayed on the other chain if it fails to execute completely."},"constructor":{"notice":"Constructs the L1CrossDomainMessenger contract."},"failedMessages(bytes32)":{"notice":"Mapping of message hashes to a boolean if and only if the message has failed to be executed at least once. A message will not be present in this mapping if it successfully executed on the first attempt."},"initialize(address,address)":{"notice":"Initializes the contract."},"messageNonce()":{"notice":"Retrieves the next message nonce. Message version will be added to the upper two bytes of the message nonce. Message version allows us to treat messages as having different structures."},"otherMessenger()":{"notice":"CrossDomainMessenger contract on the other chain."},"paused()":{"notice":"This function should return true if the contract is paused. On L1 this function will check the SuperchainConfig for its paused status. On L2 this function should be a no-op."},"portal()":{"notice":"Contract of the OptimismPortal."},"relayMessage(uint256,address,address,uint256,uint256,bytes)":{"notice":"Relays a message that was sent by the other CrossDomainMessenger contract. Can only be executed via cross-chain call from the other messenger OR if the message was already received once and is currently being replayed."},"sendMessage(address,bytes,uint32)":{"notice":"Sends a message to some target address on the other chain. Note that if the call always reverts, then the message will be unrelayable, and any ETH sent will be permanently locked. The same will occur if the target on the other chain is considered unsafe (see the _isUnsafeTarget() function)."},"successfulMessages(bytes32)":{"notice":"Mapping of message hashes to boolean receipt values. Note that a message will only be present in this mapping if it has successfully been relayed on this chain, and can therefore not be relayed again."},"superchainConfig()":{"notice":"Contract of the SuperchainConfig."},"version()":{"notice":"Semantic version."},"xDomainMessageSender()":{"notice":"Retrieves the address of the contract or wallet that initiated the currently executing message on the other chain. Will throw an error if there is no message currently being executed. Allows the recipient of a call to see who triggered it."}},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","ds-test/=lib/forge-std/lib/ds-test/src/","forge-std/=lib/forge-std/src/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/L1/L1CrossDomainMessenger.sol":"L1CrossDomainMessenger"},"evmVersion":"london","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888","urls":["bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a","dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e","urls":["bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497","dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3","urls":["bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4","dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149","urls":["bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c","dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66","urls":["bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f","dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10","urls":["bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487","dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0","urls":["bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929","dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7","urls":["bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689","dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy"],"license":"MIT"},"lib/solmate/src/utils/FixedPointMathLib.sol":{"keccak256":"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d","urls":["bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c","dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8"],"license":"MIT"},"src/L1/L1CrossDomainMessenger.sol":{"keccak256":"0x1a93450f3f9e2262b32e7831709b01d4491befb79a90cc24509b569103674e06","urls":["bzz-raw://2896f906f07fb6ceb7fea3cb31a10b8289db628142cb0612d9890d62bce265b1","dweb:/ipfs/QmYGAMecafbcT4LRBbDCYFj6mPCa3u5hNGUq2tfjWU3s18"],"license":"MIT"},"src/L1/L2OutputOracle.sol":{"keccak256":"0x342c5084f3c640c90530122bd78372c011d6162e698dd8c8daec9496fef01d42","urls":["bzz-raw://8700a3d486bd62cbb861ff80175b8040336940515791073af6a036db7c2df303","dweb:/ipfs/QmSGKTH84rVHWgMg4d6GQZCmCJ16KuUuTsMwPMDdJxCsww"],"license":"MIT"},"src/L1/OptimismPortal.sol":{"keccak256":"0xf46a1158e86edcbb157d0b06a32db37867c0bc9d2aeeed6a8110547c7537201a","urls":["bzz-raw://0aeb33d425db200953063e3576403b78c50e3a5e7b4f56ef4bead28919406ee2","dweb:/ipfs/QmUFb1rEQnCFrGRZQPHgFFWJQ48SR7wodiSFLgQKu8Jx6k"],"license":"MIT"},"src/L1/ResourceMetering.sol":{"keccak256":"0xde3ac62c60f27a3f1ba06eec94f4eda45e7ec5544c6a5d6b79543a7184e44408","urls":["bzz-raw://265a2845c4ff0d9076dd0505755cf2bdf799f4fdc09ef016865a26b51f5c3409","dweb:/ipfs/QmRzSdBD8jmQf3U9u2ATRAzzuyo6c5ugz8VA5ZM4vzoGiM"],"license":"MIT"},"src/L1/SuperchainConfig.sol":{"keccak256":"0x5fab874f980fe3e52c3398ddd25b655c56af0c98c15588b2ad9ebf30671d859d","urls":["bzz-raw://4e0aa613d38eceb621f8569fc714f521bc1f2df3d029552186ab3cdf2ee5d53f","dweb:/ipfs/QmZDzFxhTXLW79eohQbr1nghNh3oNC4CUfH7uMX8CsjVAB"],"license":"MIT"},"src/L1/SystemConfig.sol":{"keccak256":"0xc3d6392cbc44e38ddc93b84b82b08ab8e813df771a48926db3f94edde8f2b64a","urls":["bzz-raw://d326d644dc59a57a71f4ff6eaa5c6d1464697c7df337b641fe82091b9050e6ce","dweb:/ipfs/Qmd6tNzBmm8V4cpcMNyFWbWnKPNMRoysmmA62rZjGqpg7f"],"license":"MIT"},"src/libraries/Arithmetic.sol":{"keccak256":"0x91345e053584f82ad04d682ba821cf3ede808304f5b2a88116a894cf692c21db","urls":["bzz-raw://005e3c42d2edfca0a506cbda94d3b0104eddf20c00bd1bd25272f53f2ef74c72","dweb:/ipfs/QmdaW6Nge6NKoGvFqRpQjBpM2fXpc5y8WpZyBnDnKicdJq"],"license":"MIT"},"src/libraries/Burn.sol":{"keccak256":"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010","urls":["bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f","dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb"],"license":"MIT"},"src/libraries/Bytes.sol":{"keccak256":"0x827f47d123b0fdf3b08816d5b33831811704dbf4e554e53f2269354f6bba8859","urls":["bzz-raw://3137ac7204d30a245a8b0d67aa6da5286f1bd8c90379daab561f84963b6db782","dweb:/ipfs/QmWRhisw3axJK833gUScs23ETh2MLFbVzzqzYVMKSDN3S9"],"license":"MIT"},"src/libraries/Constants.sol":{"keccak256":"0xe0aeec7d6e5d1e44a11405d3b5bfc384ea092c39bea0b763ab937a26fd427132","urls":["bzz-raw://11aa3bff9da26ca2545132ec7994866690446a5321023811c254410d9593bd9b","dweb:/ipfs/QmVxWqadxvdfkqdrhfWisDqeAthibn4HEE1P6o9aFxXLhp"],"license":"MIT"},"src/libraries/Encoding.sol":{"keccak256":"0x1dafabcbd4877c7abe9698957b0a44b7e911cb8b11c1437a4ed897135669fa87","urls":["bzz-raw://6addfacefa26fdb44f56d73fa0172b97740de75629a962905ec2a20a28d40fff","dweb:/ipfs/QmboHMouqU19Rnbqrfo1gkfnuDBFcPiC9wsKgGtF2W1cNA"],"license":"MIT"},"src/libraries/Hashing.sol":{"keccak256":"0x89c07a0ca102cbe57b4e082543f2dd6dae0e1fd4a87908a334bd076fc914e7b8","urls":["bzz-raw://69c83489c9544ab442dc244c2feb2c6811b726a5eb5a509b97fc5ccb90b98c12","dweb:/ipfs/QmPGGJeLasc1HWHzd6odvWcNvFPQrbYtDubZcv8yp1HLtF"],"license":"MIT"},"src/libraries/PortalErrors.sol":{"keccak256":"0x57adcaa45a1ce9c5af04d0fe4ecbc86e6ff3f947f7957ab55bdade129adcf558","urls":["bzz-raw://3cf485f11085ad6d1ba1386fdb340f65eb1048187692ad3d9eb8816e290140c1","dweb:/ipfs/Qmb423b45TLV8PdhFa8Hs72eom5D2C5q4gVcYGNzDh4EMU"],"license":"MIT"},"src/libraries/Predeploys.sol":{"keccak256":"0x7b48b32b75e9ba0cd7f83b3304c6c1676dd8de20a5d40e8846bf7018ae9aff02","urls":["bzz-raw://7574fcc79c0d545b90071023aa81ee7880ab50b3057df598fa693bc4cf303663","dweb:/ipfs/QmWLxHzgfaTJ7thfb7khXkTY5UtSBZ5VTUB4DaAXVw7DRe"],"license":"MIT"},"src/libraries/SafeCall.sol":{"keccak256":"0x0636a7abb242bb5d6f5606967c8929e6aa7e63468c1e2ce40ad4780d4c4bf94f","urls":["bzz-raw://a4daec2ac8f9907bbf84ef0a1c48f03bae8657619bc6f42b3a672f25c516f17a","dweb:/ipfs/Qmf8gfRxBv8gEmCkP8YMPb2GGfj9QUnoNUyKE7UR2SWGnq"],"license":"MIT"},"src/libraries/Storage.sol":{"keccak256":"0x7ce27a05552aa69afa6b2ab6684dfe99f27366cf8ef2046baeb1fb62fff0022f","urls":["bzz-raw://a6a24f3ed56681720707a5ab0372fd67fcb1a4f6fb072c7140cda28bdb70f269","dweb:/ipfs/QmW9uTpUULV4xmP7A7MoBDeDhVfQgmJG5qVUFGtXxWpWWK"],"license":"MIT"},"src/libraries/Types.sol":{"keccak256":"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4","urls":["bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e","dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc"],"license":"MIT"},"src/libraries/rlp/RLPReader.sol":{"keccak256":"0x99731a39bc10203719d448117b0e6ef47771890440d595d118084d7988d59afb","urls":["bzz-raw://1dbeb75d0cc8de58350cc15df8867bf97d8492e0617b1c62733ace6155c6915a","dweb:/ipfs/QmNiXzskPE72h93F8EXT8wAXKzEh2EERLbubdVMfwTQbtj"],"license":"MIT"},"src/libraries/rlp/RLPWriter.sol":{"keccak256":"0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6","urls":["bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b","dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV"],"license":"MIT"},"src/libraries/trie/MerkleTrie.sol":{"keccak256":"0xf8ba770ee6666e73ae43184c700e9c704b2c4ace71f9e3c2227ddc11a8148b4c","urls":["bzz-raw://4702ccee1fe44aea3ee01d59e6152eb755da083f786f00947fec4437c064fe74","dweb:/ipfs/QmQjFj5J7hrEM1dxJjFszzW2Cs7g7eMhYNBXonF2DXBstE"],"license":"MIT"},"src/libraries/trie/SecureMerkleTrie.sol":{"keccak256":"0xeaff8315cfd21197bc6bc859c2decf5d4f4838c9c357c502cdf2b1eac863d288","urls":["bzz-raw://79dcdcaa560aea51d138da4f5dc553a1808b6de090b2dc1629f18375edbff681","dweb:/ipfs/QmbE4pUPhf5fLKW4W6cEjhQs55gEDvHmbmoBqkW1yz3bnw"],"license":"MIT"},"src/universal/CrossDomainMessenger.sol":{"keccak256":"0x330ae1479e88fc8a8b5b27a84df935a092a47ad13e59d9b9ea4982ad31bbe7b0","urls":["bzz-raw://66bf5fb4e78a03dcad4b9a8e2d5ed135f8e989aa02090747386843383fa6b7d1","dweb:/ipfs/QmTp66RoF6EaKeBrrZBuYAu3dsMfKo8de2XY9iHHnqfN3n"],"license":"MIT"},"src/universal/ISemver.sol":{"keccak256":"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44","urls":["bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a","dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR"],"license":"MIT"},"src/vendor/AddressAliasHelper.sol":{"keccak256":"0x6ecb83b4ec80fbe49c22f4f95d90482de64660ef5d422a19f4d4b04df31c1237","urls":["bzz-raw://1d0885be6e473962f9a0622176a22300165ac0cc1a1d7f2e22b11c3d656ace88","dweb:/ipfs/QmPRa3KmRpXW5P9ykveKRDgYN5zYo4cYLAYSnoqHX3KnXR"],"license":"Apache-2.0"}},"version":1},"storageLayout":{"storage":[{"astId":108324,"contract":"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger","label":"spacer_0_0_20","offset":0,"slot":"0","type":"t_address"},{"astId":46970,"contract":"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger","label":"_initialized","offset":20,"slot":"0","type":"t_uint8"},{"astId":46973,"contract":"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger","label":"_initializing","offset":21,"slot":"0","type":"t_bool"},{"astId":108331,"contract":"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger","label":"spacer_1_0_1600","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":108334,"contract":"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger","label":"spacer_51_0_20","offset":0,"slot":"51","type":"t_address"},{"astId":108339,"contract":"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger","label":"spacer_52_0_1568","offset":0,"slot":"52","type":"t_array(t_uint256)49_storage"},{"astId":108342,"contract":"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger","label":"spacer_101_0_1","offset":0,"slot":"101","type":"t_bool"},{"astId":108347,"contract":"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger","label":"spacer_102_0_1568","offset":0,"slot":"102","type":"t_array(t_uint256)49_storage"},{"astId":108350,"contract":"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger","label":"spacer_151_0_32","offset":0,"slot":"151","type":"t_uint256"},{"astId":108355,"contract":"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger","label":"spacer_152_0_1568","offset":0,"slot":"152","type":"t_array(t_uint256)49_storage"},{"astId":108360,"contract":"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger","label":"spacer_201_0_32","offset":0,"slot":"201","type":"t_mapping(t_bytes32,t_bool)"},{"astId":108365,"contract":"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger","label":"spacer_202_0_32","offset":0,"slot":"202","type":"t_mapping(t_bytes32,t_bool)"},{"astId":108410,"contract":"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger","label":"successfulMessages","offset":0,"slot":"203","type":"t_mapping(t_bytes32,t_bool)"},{"astId":108413,"contract":"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger","label":"xDomainMsgSender","offset":0,"slot":"204","type":"t_address"},{"astId":108416,"contract":"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger","label":"msgNonce","offset":0,"slot":"205","type":"t_uint240"},{"astId":108421,"contract":"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger","label":"failedMessages","offset":0,"slot":"206","type":"t_mapping(t_bytes32,t_bool)"},{"astId":108425,"contract":"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger","label":"otherMessenger","offset":0,"slot":"207","type":"t_contract(CrossDomainMessenger)108888"},{"astId":108430,"contract":"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger","label":"__gap","offset":0,"slot":"208","type":"t_array(t_uint256)43_storage"},{"astId":84986,"contract":"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger","label":"superchainConfig","offset":0,"slot":"251","type":"t_contract(SuperchainConfig)88793"},{"astId":84990,"contract":"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger","label":"portal","offset":0,"slot":"252","type":"t_contract(OptimismPortal)87104"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)43_storage":{"encoding":"inplace","label":"uint256[43]","numberOfBytes":"1376","base":"t_uint256"},"t_array(t_uint256)49_storage":{"encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568","base":"t_uint256"},"t_array(t_uint256)50_storage":{"encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600","base":"t_uint256"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(CrossDomainMessenger)108888":{"encoding":"inplace","label":"contract CrossDomainMessenger","numberOfBytes":"20"},"t_contract(OptimismPortal)87104":{"encoding":"inplace","label":"contract OptimismPortal","numberOfBytes":"20"},"t_contract(SuperchainConfig)88793":{"encoding":"inplace","label":"contract SuperchainConfig","numberOfBytes":"20"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_uint240":{"encoding":"inplace","label":"uint240","numberOfBytes":"30"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"version":1,"kind":"user","methods":{"MESSAGE_VERSION()":{"notice":"Current message version identifier."},"MIN_GAS_CALLDATA_OVERHEAD()":{"notice":"Extra gas added to base gas for each byte of calldata in a message."},"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR()":{"notice":"Denominator for dynamic overhead added to the base gas for a message."},"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR()":{"notice":"Numerator for dynamic overhead added to the base gas for a message."},"OTHER_MESSENGER()":{"notice":"Retrieves the address of the paired CrossDomainMessenger contract on the other chain Public getter is legacy and will be removed in the future. Use `otherMessenger()` instead."},"PORTAL()":{"notice":"Getter function for the OptimismPortal contract on this chain. Public getter is legacy and will be removed in the future. Use `portal()` instead."},"RELAY_CALL_OVERHEAD()":{"notice":"Gas reserved for performing the external call in `relayMessage`."},"RELAY_CONSTANT_OVERHEAD()":{"notice":"Constant overhead added to the base gas for a message."},"RELAY_GAS_CHECK_BUFFER()":{"notice":"Gas reserved for the execution between the `hasMinGas` check and the external call in `relayMessage`."},"RELAY_RESERVED_GAS()":{"notice":"Gas reserved for finalizing the execution of `relayMessage` after the safe call."},"baseGas(bytes,uint32)":{"notice":"Computes the amount of gas required to guarantee that a given message will be received on the other chain without running out of gas. Guaranteeing that a message will not run out of gas is important because this ensures that a message can always be replayed on the other chain if it fails to execute completely."},"constructor":{"notice":"Constructs the L1CrossDomainMessenger contract."},"failedMessages(bytes32)":{"notice":"Mapping of message hashes to a boolean if and only if the message has failed to be executed at least once. A message will not be present in this mapping if it successfully executed on the first attempt."},"initialize(address,address)":{"notice":"Initializes the contract."},"messageNonce()":{"notice":"Retrieves the next message nonce. Message version will be added to the upper two bytes of the message nonce. Message version allows us to treat messages as having different structures."},"otherMessenger()":{"notice":"CrossDomainMessenger contract on the other chain."},"paused()":{"notice":"This function should return true if the contract is paused. On L1 this function will check the SuperchainConfig for its paused status. On L2 this function should be a no-op."},"portal()":{"notice":"Contract of the OptimismPortal."},"relayMessage(uint256,address,address,uint256,uint256,bytes)":{"notice":"Relays a message that was sent by the other CrossDomainMessenger contract. Can only be executed via cross-chain call from the other messenger OR if the message was already received once and is currently being replayed."},"sendMessage(address,bytes,uint32)":{"notice":"Sends a message to some target address on the other chain. Note that if the call always reverts, then the message will be unrelayable, and any ETH sent will be permanently locked. The same will occur if the target on the other chain is considered unsafe (see the _isUnsafeTarget() function)."},"successfulMessages(bytes32)":{"notice":"Mapping of message hashes to boolean receipt values. Note that a message will only be present in this mapping if it has successfully been relayed on this chain, and can therefore not be relayed again."},"superchainConfig()":{"notice":"Contract of the SuperchainConfig."},"version()":{"notice":"Semantic version."},"xDomainMessageSender()":{"notice":"Retrieves the address of the contract or wallet that initiated the currently executing message on the other chain. Will throw an error if there is no message currently being executed. Allows the recipient of a call to see who triggered it."}},"events":{"FailedRelayedMessage(bytes32)":{"notice":"Emitted whenever a message fails to be relayed on this chain."},"RelayedMessage(bytes32)":{"notice":"Emitted whenever a message is successfully relayed on this chain."},"SentMessage(address,address,bytes,uint256,uint256)":{"notice":"Emitted whenever a message is sent to the other chain."},"SentMessageExtension1(address,uint256)":{"notice":"Additional event data to emit, required as of Bedrock. Cannot be merged with the SentMessage event without breaking the ABI of this contract, this is good enough."}},"notice":"The L1CrossDomainMessenger is a message passing interface between L1 and L2 responsible for sending and receiving data on the L1 side. Users are encouraged to use this interface instead of interacting with lower-level contracts directly."},"devdoc":{"version":1,"kind":"dev","methods":{"OTHER_MESSENGER()":{"returns":{"_0":"CrossDomainMessenger contract on the other chain."}},"PORTAL()":{"returns":{"_0":"Contract of the OptimismPortal on this chain."}},"baseGas(bytes,uint32)":{"params":{"_message":"Message to compute the amount of required gas for.","_minGasLimit":"Minimum desired gas limit when message goes to target."},"returns":{"_0":"Amount of gas required to guarantee message receipt."}},"initialize(address,address)":{"params":{"_portal":"Contract of the OptimismPortal contract on this network.","_superchainConfig":"Contract of the SuperchainConfig contract on this network."}},"messageNonce()":{"returns":{"_0":"Nonce of the next message to be sent, with added message version."}},"paused()":{"returns":{"_0":"Whether or not the contract is paused."}},"relayMessage(uint256,address,address,uint256,uint256,bytes)":{"params":{"_message":"Message to send to the target.","_minGasLimit":"Minimum amount of gas that the message can be executed with.","_nonce":"Nonce of the message being relayed.","_sender":"Address of the user who sent the message.","_target":"Address that the message is targeted at.","_value":"ETH value to send with the message."}},"sendMessage(address,bytes,uint32)":{"params":{"_message":"Message to trigger the target address with.","_minGasLimit":"Minimum gas limit that the message can be executed with.","_target":"Target contract or wallet address."}},"xDomainMessageSender()":{"returns":{"_0":"Address of the sender of the currently executing message on the other chain."}}}},"ast":{"absolutePath":"src/L1/L1CrossDomainMessenger.sol","id":85146,"exportedSymbols":{"CrossDomainMessenger":[108888],"ISemver":[109417],"L1CrossDomainMessenger":[85145],"OptimismPortal":[87104],"Predeploys":[104124],"SuperchainConfig":[88793]},"nodeType":"SourceUnit","src":"32:3102:130","nodes":[{"id":84967,"nodeType":"PragmaDirective","src":"32:23:130","nodes":[],"literals":["solidity","0.8",".15"]},{"id":84969,"nodeType":"ImportDirective","src":"57:58:130","nodes":[],"absolutePath":"src/libraries/Predeploys.sol","file":"src/libraries/Predeploys.sol","nameLocation":"-1:-1:-1","scope":85146,"sourceUnit":104125,"symbolAliases":[{"foreign":{"id":84968,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"66:10:130","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":84971,"nodeType":"ImportDirective","src":"116:59:130","nodes":[],"absolutePath":"src/L1/OptimismPortal.sol","file":"src/L1/OptimismPortal.sol","nameLocation":"-1:-1:-1","scope":85146,"sourceUnit":87105,"symbolAliases":[{"foreign":{"id":84970,"name":"OptimismPortal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87104,"src":"125:14:130","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":84973,"nodeType":"ImportDirective","src":"176:78:130","nodes":[],"absolutePath":"src/universal/CrossDomainMessenger.sol","file":"src/universal/CrossDomainMessenger.sol","nameLocation":"-1:-1:-1","scope":85146,"sourceUnit":108889,"symbolAliases":[{"foreign":{"id":84972,"name":"CrossDomainMessenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108888,"src":"185:20:130","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":84975,"nodeType":"ImportDirective","src":"255:52:130","nodes":[],"absolutePath":"src/universal/ISemver.sol","file":"src/universal/ISemver.sol","nameLocation":"-1:-1:-1","scope":85146,"sourceUnit":109418,"symbolAliases":[{"foreign":{"id":84974,"name":"ISemver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109417,"src":"264:7:130","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":84977,"nodeType":"ImportDirective","src":"308:63:130","nodes":[],"absolutePath":"src/L1/SuperchainConfig.sol","file":"src/L1/SuperchainConfig.sol","nameLocation":"-1:-1:-1","scope":85146,"sourceUnit":88794,"symbolAliases":[{"foreign":{"id":84976,"name":"SuperchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":88793,"src":"317:16:130","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":85145,"nodeType":"ContractDefinition","src":"701:2432:130","nodes":[{"id":84986,"nodeType":"VariableDeclaration","src":"822:40:130","nodes":[],"constant":false,"documentation":{"id":84983,"nodeType":"StructuredDocumentation","src":"772:45:130","text":"@notice Contract of the SuperchainConfig."},"functionSelector":"35e80ab3","mutability":"mutable","name":"superchainConfig","nameLocation":"846:16:130","scope":85145,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"},"typeName":{"id":84985,"nodeType":"UserDefinedTypeName","pathNode":{"id":84984,"name":"SuperchainConfig","nodeType":"IdentifierPath","referencedDeclaration":88793,"src":"822:16:130"},"referencedDeclaration":88793,"src":"822:16:130","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"visibility":"public"},{"id":84990,"nodeType":"VariableDeclaration","src":"950:28:130","nodes":[],"constant":false,"documentation":{"id":84987,"nodeType":"StructuredDocumentation","src":"869:76:130","text":"@notice Contract of the OptimismPortal.\n @custom:network-specific"},"functionSelector":"6425666b","mutability":"mutable","name":"portal","nameLocation":"972:6:130","scope":85145,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_OptimismPortal_$87104","typeString":"contract OptimismPortal"},"typeName":{"id":84989,"nodeType":"UserDefinedTypeName","pathNode":{"id":84988,"name":"OptimismPortal","nodeType":"IdentifierPath","referencedDeclaration":87104,"src":"950:14:130"},"referencedDeclaration":87104,"src":"950:14:130","typeDescriptions":{"typeIdentifier":"t_contract$_OptimismPortal_$87104","typeString":"contract OptimismPortal"}},"visibility":"public"},{"id":84994,"nodeType":"VariableDeclaration","src":"1048:40:130","nodes":[],"baseFunctions":[109416],"constant":true,"documentation":{"id":84991,"nodeType":"StructuredDocumentation","src":"985:58:130","text":"@notice Semantic version.\n @custom:semver 2.3.0"},"functionSelector":"54fd4d50","mutability":"constant","name":"version","nameLocation":"1071:7:130","scope":85145,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":84992,"name":"string","nodeType":"ElementaryTypeName","src":"1048:6:130","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"322e332e30","id":84993,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1081:7:130","typeDescriptions":{"typeIdentifier":"t_stringliteral_22fd31a466cd79bdd552fae6268088a4b5436c44416a9eb8cc3035d8d9e397ab","typeString":"literal_string \"2.3.0\""},"value":"2.3.0"},"visibility":"public"},{"id":85019,"nodeType":"FunctionDefinition","src":"1159:163:130","nodes":[],"body":{"id":85018,"nodeType":"Block","src":"1196:126:130","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"hexValue":"30","id":85004,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1263:1:130","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":85003,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1255:7:130","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":85002,"name":"address","nodeType":"ElementaryTypeName","src":"1255:7:130","typeDescriptions":{}}},"id":85005,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1255:10:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":85001,"name":"SuperchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":88793,"src":"1238:16:130","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SuperchainConfig_$88793_$","typeString":"type(contract SuperchainConfig)"}},"id":85006,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1238:28:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},{"arguments":[{"arguments":[{"arguments":[{"hexValue":"30","id":85012,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1308:1:130","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":85011,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1300:7:130","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":85010,"name":"address","nodeType":"ElementaryTypeName","src":"1300:7:130","typeDescriptions":{}}},"id":85013,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1300:10:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":85009,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1292:8:130","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":85008,"name":"address","nodeType":"ElementaryTypeName","src":"1292:8:130","stateMutability":"payable","typeDescriptions":{}}},"id":85014,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1292:19:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":85007,"name":"OptimismPortal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87104,"src":"1277:14:130","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_OptimismPortal_$87104_$","typeString":"type(contract OptimismPortal)"}},"id":85015,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1277:35:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_OptimismPortal_$87104","typeString":"contract OptimismPortal"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"},{"typeIdentifier":"t_contract$_OptimismPortal_$87104","typeString":"contract OptimismPortal"}],"id":85000,"name":"initialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85047,"src":"1206:10:130","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_SuperchainConfig_$88793_$_t_contract$_OptimismPortal_$87104_$returns$__$","typeString":"function (contract SuperchainConfig,contract OptimismPortal)"}},"id":85016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["_superchainConfig","_portal"],"nodeType":"FunctionCall","src":"1206:109:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85017,"nodeType":"ExpressionStatement","src":"1206:109:130"}]},"documentation":{"id":84995,"nodeType":"StructuredDocumentation","src":"1095:59:130","text":"@notice Constructs the L1CrossDomainMessenger contract."},"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":84998,"kind":"baseConstructorSpecifier","modifierName":{"id":84997,"name":"CrossDomainMessenger","nodeType":"IdentifierPath","referencedDeclaration":108888,"src":"1173:20:130"},"nodeType":"ModifierInvocation","src":"1173:22:130"}],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":84996,"nodeType":"ParameterList","parameters":[],"src":"1170:2:130"},"returnParameters":{"id":84999,"nodeType":"ParameterList","parameters":[],"src":"1196:0:130"},"scope":85145,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":85047,"nodeType":"FunctionDefinition","src":"1542:296:130","nodes":[],"body":{"id":85046,"nodeType":"Block","src":"1641:197:130","nodes":[],"statements":[{"expression":{"id":85033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":85031,"name":"superchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":84986,"src":"1651:16:130","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":85032,"name":"_superchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85023,"src":"1670:17:130","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"src":"1651:36:130","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"id":85034,"nodeType":"ExpressionStatement","src":"1651:36:130"},{"expression":{"id":85037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":85035,"name":"portal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":84990,"src":"1697:6:130","typeDescriptions":{"typeIdentifier":"t_contract$_OptimismPortal_$87104","typeString":"contract OptimismPortal"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":85036,"name":"_portal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85026,"src":"1706:7:130","typeDescriptions":{"typeIdentifier":"t_contract$_OptimismPortal_$87104","typeString":"contract OptimismPortal"}},"src":"1697:16:130","typeDescriptions":{"typeIdentifier":"t_contract$_OptimismPortal_$87104","typeString":"contract OptimismPortal"}},"id":85038,"nodeType":"ExpressionStatement","src":"1697:16:130"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":85041,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"1791:10:130","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Predeploys_$104124_$","typeString":"type(library Predeploys)"}},"id":85042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"L2_CROSS_DOMAIN_MESSENGER","nodeType":"MemberAccess","referencedDeclaration":104004,"src":"1791:36:130","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":85040,"name":"CrossDomainMessenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108888,"src":"1770:20:130","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CrossDomainMessenger_$108888_$","typeString":"type(contract CrossDomainMessenger)"}},"id":85043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1770:58:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}],"id":85039,"name":"__CrossDomainMessenger_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108852,"src":"1723:27:130","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_CrossDomainMessenger_$108888_$returns$__$","typeString":"function (contract CrossDomainMessenger)"}},"id":85044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["_otherMessenger"],"nodeType":"FunctionCall","src":"1723:108:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85045,"nodeType":"ExpressionStatement","src":"1723:108:130"}]},"documentation":{"id":85020,"nodeType":"StructuredDocumentation","src":"1328:209:130","text":"@notice Initializes the contract.\n @param _superchainConfig Contract of the SuperchainConfig contract on this network.\n @param _portal Contract of the OptimismPortal contract on this network."},"functionSelector":"485cc955","implemented":true,"kind":"function","modifiers":[{"id":85029,"kind":"modifierInvocation","modifierName":{"id":85028,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":47034,"src":"1629:11:130"},"nodeType":"ModifierInvocation","src":"1629:11:130"}],"name":"initialize","nameLocation":"1551:10:130","parameters":{"id":85027,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85023,"mutability":"mutable","name":"_superchainConfig","nameLocation":"1579:17:130","nodeType":"VariableDeclaration","scope":85047,"src":"1562:34:130","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"},"typeName":{"id":85022,"nodeType":"UserDefinedTypeName","pathNode":{"id":85021,"name":"SuperchainConfig","nodeType":"IdentifierPath","referencedDeclaration":88793,"src":"1562:16:130"},"referencedDeclaration":88793,"src":"1562:16:130","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"visibility":"internal"},{"constant":false,"id":85026,"mutability":"mutable","name":"_portal","nameLocation":"1613:7:130","nodeType":"VariableDeclaration","scope":85047,"src":"1598:22:130","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_OptimismPortal_$87104","typeString":"contract OptimismPortal"},"typeName":{"id":85025,"nodeType":"UserDefinedTypeName","pathNode":{"id":85024,"name":"OptimismPortal","nodeType":"IdentifierPath","referencedDeclaration":87104,"src":"1598:14:130"},"referencedDeclaration":87104,"src":"1598:14:130","typeDescriptions":{"typeIdentifier":"t_contract$_OptimismPortal_$87104","typeString":"contract OptimismPortal"}},"visibility":"internal"}],"src":"1561:60:130"},"returnParameters":{"id":85030,"nodeType":"ParameterList","parameters":[],"src":"1641:0:130"},"scope":85145,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":85057,"nodeType":"FunctionDefinition","src":"2107:87:130","nodes":[],"body":{"id":85056,"nodeType":"Block","src":"2164:30:130","nodes":[],"statements":[{"expression":{"id":85054,"name":"portal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":84990,"src":"2181:6:130","typeDescriptions":{"typeIdentifier":"t_contract$_OptimismPortal_$87104","typeString":"contract OptimismPortal"}},"functionReturnParameters":85053,"id":85055,"nodeType":"Return","src":"2174:13:130"}]},"documentation":{"id":85048,"nodeType":"StructuredDocumentation","src":"1844:258:130","text":"@notice Getter function for the OptimismPortal contract on this chain.\n Public getter is legacy and will be removed in the future. Use `portal()` instead.\n @return Contract of the OptimismPortal on this chain.\n @custom:legacy"},"functionSelector":"0ff754ea","implemented":true,"kind":"function","modifiers":[],"name":"PORTAL","nameLocation":"2116:6:130","parameters":{"id":85049,"nodeType":"ParameterList","parameters":[],"src":"2122:2:130"},"returnParameters":{"id":85053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85052,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":85057,"src":"2148:14:130","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_OptimismPortal_$87104","typeString":"contract OptimismPortal"},"typeName":{"id":85051,"nodeType":"UserDefinedTypeName","pathNode":{"id":85050,"name":"OptimismPortal","nodeType":"IdentifierPath","referencedDeclaration":87104,"src":"2148:14:130"},"referencedDeclaration":87104,"src":"2148:14:130","typeDescriptions":{"typeIdentifier":"t_contract$_OptimismPortal_$87104","typeString":"contract OptimismPortal"}},"visibility":"internal"}],"src":"2147:16:130"},"scope":85145,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":85083,"nodeType":"FunctionDefinition","src":"2241:320:130","nodes":[],"body":{"id":85082,"nodeType":"Block","src":"2348:213:130","nodes":[],"statements":[{"expression":{"arguments":[{"id":85075,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85060,"src":"2420:3:130","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85076,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85064,"src":"2445:6:130","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":85077,"name":"_gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85062,"src":"2476:9:130","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"hexValue":"66616c7365","id":85078,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2512:5:130","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":85079,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85066,"src":"2538:5:130","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":85070,"name":"portal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":84990,"src":"2358:6:130","typeDescriptions":{"typeIdentifier":"t_contract$_OptimismPortal_$87104","typeString":"contract OptimismPortal"}},"id":85072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"depositTransaction","nodeType":"MemberAccess","referencedDeclaration":87068,"src":"2358:25:130","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_uint256_$_t_uint64_$_t_bool_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,uint256,uint64,bool,bytes memory) payable external"}},"id":85074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":85073,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85064,"src":"2392:6:130","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"2358:42:130","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_uint256_$_t_uint64_$_t_bool_$_t_bytes_memory_ptr_$returns$__$value","typeString":"function (address,uint256,uint64,bool,bytes memory) payable external"}},"id":85080,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["_to","_value","_gasLimit","_isCreation","_data"],"nodeType":"FunctionCall","src":"2358:196:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85081,"nodeType":"ExpressionStatement","src":"2358:196:130"}]},"baseFunctions":[108864],"documentation":{"id":85058,"nodeType":"StructuredDocumentation","src":"2200:36:130","text":"@inheritdoc CrossDomainMessenger"},"implemented":true,"kind":"function","modifiers":[],"name":"_sendMessage","nameLocation":"2250:12:130","overrides":{"id":85068,"nodeType":"OverrideSpecifier","overrides":[],"src":"2339:8:130"},"parameters":{"id":85067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85060,"mutability":"mutable","name":"_to","nameLocation":"2271:3:130","nodeType":"VariableDeclaration","scope":85083,"src":"2263:11:130","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85059,"name":"address","nodeType":"ElementaryTypeName","src":"2263:7:130","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85062,"mutability":"mutable","name":"_gasLimit","nameLocation":"2283:9:130","nodeType":"VariableDeclaration","scope":85083,"src":"2276:16:130","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":85061,"name":"uint64","nodeType":"ElementaryTypeName","src":"2276:6:130","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":85064,"mutability":"mutable","name":"_value","nameLocation":"2302:6:130","nodeType":"VariableDeclaration","scope":85083,"src":"2294:14:130","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85063,"name":"uint256","nodeType":"ElementaryTypeName","src":"2294:7:130","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":85066,"mutability":"mutable","name":"_data","nameLocation":"2323:5:130","nodeType":"VariableDeclaration","scope":85083,"src":"2310:18:130","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":85065,"name":"bytes","nodeType":"ElementaryTypeName","src":"2310:5:130","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2262:67:130"},"returnParameters":{"id":85069,"nodeType":"ParameterList","parameters":[],"src":"2348:0:130"},"scope":85145,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":85108,"nodeType":"FunctionDefinition","src":"2608:168:130","nodes":[],"body":{"id":85107,"nodeType":"Block","src":"2675:101:130","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":85105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":85096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":85090,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2692:3:130","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":85091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2692:10:130","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":85094,"name":"portal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":84990,"src":"2714:6:130","typeDescriptions":{"typeIdentifier":"t_contract$_OptimismPortal_$87104","typeString":"contract OptimismPortal"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_OptimismPortal_$87104","typeString":"contract OptimismPortal"}],"id":85093,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2706:7:130","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":85092,"name":"address","nodeType":"ElementaryTypeName","src":"2706:7:130","typeDescriptions":{}}},"id":85095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2706:15:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2692:29:130","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":85104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":85097,"name":"portal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":84990,"src":"2725:6:130","typeDescriptions":{"typeIdentifier":"t_contract$_OptimismPortal_$87104","typeString":"contract OptimismPortal"}},"id":85098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"l2Sender","nodeType":"MemberAccess","referencedDeclaration":86489,"src":"2725:15:130","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":85099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2725:17:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":85102,"name":"otherMessenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108425,"src":"2754:14:130","typeDescriptions":{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}],"id":85101,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2746:7:130","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":85100,"name":"address","nodeType":"ElementaryTypeName","src":"2746:7:130","typeDescriptions":{}}},"id":85103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2746:23:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2725:44:130","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2692:77:130","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":85089,"id":85106,"nodeType":"Return","src":"2685:84:130"}]},"baseFunctions":[108870],"documentation":{"id":85084,"nodeType":"StructuredDocumentation","src":"2567:36:130","text":"@inheritdoc CrossDomainMessenger"},"implemented":true,"kind":"function","modifiers":[],"name":"_isOtherMessenger","nameLocation":"2617:17:130","overrides":{"id":85086,"nodeType":"OverrideSpecifier","overrides":[],"src":"2651:8:130"},"parameters":{"id":85085,"nodeType":"ParameterList","parameters":[],"src":"2634:2:130"},"returnParameters":{"id":85089,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85088,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":85108,"src":"2669:4:130","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":85087,"name":"bool","nodeType":"ElementaryTypeName","src":"2669:4:130","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2668:6:130"},"scope":85145,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":85132,"nodeType":"FunctionDefinition","src":"2823:158:130","nodes":[],"body":{"id":85131,"nodeType":"Block","src":"2903:78:130","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":85129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":85122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":85117,"name":"_target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85111,"src":"2920:7:130","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":85120,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2939:4:130","typeDescriptions":{"typeIdentifier":"t_contract$_L1CrossDomainMessenger_$85145","typeString":"contract L1CrossDomainMessenger"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_L1CrossDomainMessenger_$85145","typeString":"contract L1CrossDomainMessenger"}],"id":85119,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2931:7:130","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":85118,"name":"address","nodeType":"ElementaryTypeName","src":"2931:7:130","typeDescriptions":{}}},"id":85121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2931:13:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2920:24:130","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":85128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":85123,"name":"_target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85111,"src":"2948:7:130","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":85126,"name":"portal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":84990,"src":"2967:6:130","typeDescriptions":{"typeIdentifier":"t_contract$_OptimismPortal_$87104","typeString":"contract OptimismPortal"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_OptimismPortal_$87104","typeString":"contract OptimismPortal"}],"id":85125,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2959:7:130","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":85124,"name":"address","nodeType":"ElementaryTypeName","src":"2959:7:130","typeDescriptions":{}}},"id":85127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2959:15:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2948:26:130","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2920:54:130","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":85116,"id":85130,"nodeType":"Return","src":"2913:61:130"}]},"baseFunctions":[108878],"documentation":{"id":85109,"nodeType":"StructuredDocumentation","src":"2782:36:130","text":"@inheritdoc CrossDomainMessenger"},"implemented":true,"kind":"function","modifiers":[],"name":"_isUnsafeTarget","nameLocation":"2832:15:130","overrides":{"id":85113,"nodeType":"OverrideSpecifier","overrides":[],"src":"2879:8:130"},"parameters":{"id":85112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85111,"mutability":"mutable","name":"_target","nameLocation":"2856:7:130","nodeType":"VariableDeclaration","scope":85132,"src":"2848:15:130","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85110,"name":"address","nodeType":"ElementaryTypeName","src":"2848:7:130","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2847:17:130"},"returnParameters":{"id":85116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85115,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":85132,"src":"2897:4:130","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":85114,"name":"bool","nodeType":"ElementaryTypeName","src":"2897:4:130","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2896:6:130"},"scope":85145,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":85144,"nodeType":"FunctionDefinition","src":"3028:103:130","nodes":[],"body":{"id":85143,"nodeType":"Block","src":"3082:49:130","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":85139,"name":"superchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":84986,"src":"3099:16:130","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"id":85140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"paused","nodeType":"MemberAccess","referencedDeclaration":88707,"src":"3099:23:130","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bool_$","typeString":"function () view external returns (bool)"}},"id":85141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3099:25:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":85138,"id":85142,"nodeType":"Return","src":"3092:32:130"}]},"baseFunctions":[108887],"documentation":{"id":85133,"nodeType":"StructuredDocumentation","src":"2987:36:130","text":"@inheritdoc CrossDomainMessenger"},"functionSelector":"5c975abb","implemented":true,"kind":"function","modifiers":[],"name":"paused","nameLocation":"3037:6:130","overrides":{"id":85135,"nodeType":"OverrideSpecifier","overrides":[],"src":"3058:8:130"},"parameters":{"id":85134,"nodeType":"ParameterList","parameters":[],"src":"3043:2:130"},"returnParameters":{"id":85138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85137,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":85144,"src":"3076:4:130","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":85136,"name":"bool","nodeType":"ElementaryTypeName","src":"3076:4:130","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3075:6:130"},"scope":85145,"stateMutability":"view","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":84979,"name":"CrossDomainMessenger","nodeType":"IdentifierPath","referencedDeclaration":108888,"src":"736:20:130"},"id":84980,"nodeType":"InheritanceSpecifier","src":"736:20:130"},{"baseName":{"id":84981,"name":"ISemver","nodeType":"IdentifierPath","referencedDeclaration":109417,"src":"758:7:130"},"id":84982,"nodeType":"InheritanceSpecifier","src":"758:7:130"}],"canonicalName":"L1CrossDomainMessenger","contractDependencies":[],"contractKind":"contract","documentation":{"id":84978,"nodeType":"StructuredDocumentation","src":"373:328:130","text":"@custom:proxied\n @title L1CrossDomainMessenger\n @notice The L1CrossDomainMessenger is a message passing interface between L1 and L2 responsible\n for sending and receiving data on the L1 side. Users are encouraged to use this\n interface instead of interacting with lower-level contracts directly."},"fullyImplemented":true,"linearizedBaseContracts":[85145,109417,108888,108366,47114,108325],"name":"L1CrossDomainMessenger","nameLocation":"710:22:130","scope":85146,"usedErrors":[]}],"license":"MIT"},"id":130} \ No newline at end of file diff --git a/packages/sdk/src/forge-artifacts/L1ERC721Bridge.json b/packages/sdk/src/forge-artifacts/L1ERC721Bridge.json deleted file mode 100644 index e986941bf60b..000000000000 --- a/packages/sdk/src/forge-artifacts/L1ERC721Bridge.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"MESSENGER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract CrossDomainMessenger"}],"stateMutability":"view"},{"type":"function","name":"OTHER_BRIDGE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract StandardBridge"}],"stateMutability":"view"},{"type":"function","name":"bridgeERC721","inputs":[{"name":"_localToken","type":"address","internalType":"address"},{"name":"_remoteToken","type":"address","internalType":"address"},{"name":"_tokenId","type":"uint256","internalType":"uint256"},{"name":"_minGasLimit","type":"uint32","internalType":"uint32"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"bridgeERC721To","inputs":[{"name":"_localToken","type":"address","internalType":"address"},{"name":"_remoteToken","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_tokenId","type":"uint256","internalType":"uint256"},{"name":"_minGasLimit","type":"uint32","internalType":"uint32"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deposits","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"finalizeBridgeERC721","inputs":[{"name":"_localToken","type":"address","internalType":"address"},{"name":"_remoteToken","type":"address","internalType":"address"},{"name":"_from","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_tokenId","type":"uint256","internalType":"uint256"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[{"name":"_messenger","type":"address","internalType":"contract CrossDomainMessenger"},{"name":"_superchainConfig","type":"address","internalType":"contract SuperchainConfig"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"messenger","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract CrossDomainMessenger"}],"stateMutability":"view"},{"type":"function","name":"otherBridge","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract StandardBridge"}],"stateMutability":"view"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"superchainConfig","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract SuperchainConfig"}],"stateMutability":"view"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"event","name":"ERC721BridgeFinalized","inputs":[{"name":"localToken","type":"address","indexed":true,"internalType":"address"},{"name":"remoteToken","type":"address","indexed":true,"internalType":"address"},{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"extraData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ERC721BridgeInitiated","inputs":[{"name":"localToken","type":"address","indexed":true,"internalType":"address"},{"name":"remoteToken","type":"address","indexed":true,"internalType":"address"},{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"extraData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false}],"bytecode":{"object":"0x60806040523480156200001157600080fd5b506200001f60008062000025565b62000234565b600054610100900460ff1615808015620000465750600054600160ff909116105b8062000076575062000063306200018a60201b62000b141760201c565b15801562000076575060005460ff166001145b620000df5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000103576000805461ff0019166101001790555b603280546001600160a01b0319166001600160a01b0384161790556200013e8373420000000000000000000000000000000000001462000199565b801562000185576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b600054610100900460ff16620002065760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d6565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b6113e980620002446000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80635d93a3fc11610081578063927ede2d1161005b578063927ede2d14610231578063aa5574521461024f578063c89701a21461026257600080fd5b80635d93a3fc146101cc578063761f4493146102005780637f46ddb21461021357600080fd5b8063485cc955116100b2578063485cc9551461015857806354fd4d501461016b5780635c975abb146101b457600080fd5b806335e80ab3146100d95780633687011a146101235780633cb747bf14610138575b600080fd5b6032546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610136610131366004610fe1565b610282565b005b6001546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b610136610166366004611064565b61032e565b6101a76040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b60405161011a9190611108565b6101bc610518565b604051901515815260200161011a565b6101bc6101da366004611122565b603160209081526000938452604080852082529284528284209052825290205460ff1681565b61013661020e366004611163565b6105b1565b60025473ffffffffffffffffffffffffffffffffffffffff166100f9565b60015473ffffffffffffffffffffffffffffffffffffffff166100f9565b61013661025d3660046111fb565b610a58565b6002546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b333b15610316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6103268686333388888888610b30565b505050505050565b600054610100900460ff161580801561034e5750600054600160ff909116105b806103685750303b158015610368575060005460ff166001145b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161030d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561045257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556104b083734200000000000000000000000000000000000014610e70565b801561051357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610588573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ac9190611272565b905090565b60015473ffffffffffffffffffffffffffffffffffffffff16331480156106865750600254600154604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691636e296e45916004808201926020929091908290030181865afa15801561064a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066e9190611294565b73ffffffffffffffffffffffffffffffffffffffff16145b610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f746865722062726964676500606482015260840161030d565b61071a610518565b15610781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4c314552433732314272696467653a2070617573656400000000000000000000604482015260640161030d565b3073ffffffffffffffffffffffffffffffffffffffff881603610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c314552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c6600000000000000000000000000000000000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152603160209081526040808320938a1683529281528282208683529052205460ff1615156001146108f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4c314552433732314272696467653a20546f6b656e204944206973206e6f742060448201527f657363726f77656420696e20746865204c312042726964676500000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526031602090815260408083208b8616845282528083208884529091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152918616602483015260448201859052906342842e0e90606401600060405180830381600087803b1580156109b557600080fd5b505af11580156109c9573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac87878787604051610a4794939291906112fa565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516610afb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f74206265206164647265737328302900000000000000000000000000000000606482015260840161030d565b610b0b8787338888888888610b30565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff8716610bd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c314552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f742062652061646472657373283029000000000000000000000000000000606482015260840161030d565b600063761f449360e01b888a8989898888604051602401610bfa979695949392919061133a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000959095169490941790935273ffffffffffffffffffffffffffffffffffffffff8c81166000818152603186528381208e8416825286528381208b82529095529382902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590517f23b872dd000000000000000000000000000000000000000000000000000000008152908a166004820152306024820152604481018890529092506323b872dd90606401600060405180830381600087803b158015610d3a57600080fd5b505af1158015610d4e573d6000803e3d6000fd5b50506001546002546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169450633dbb202b9350610db1929091169085908990600401611397565b600060405180830381600087803b158015610dcb57600080fd5b505af1158015610ddf573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a589898888604051610e5d94939291906112fa565b60405180910390a4505050505050505050565b600054610100900460ff16610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161030d565b6001805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560028054929093169116179055565b73ffffffffffffffffffffffffffffffffffffffff81168114610f7c57600080fd5b50565b803563ffffffff81168114610f9357600080fd5b919050565b60008083601f840112610faa57600080fd5b50813567ffffffffffffffff811115610fc257600080fd5b602083019150836020828501011115610fda57600080fd5b9250929050565b60008060008060008060a08789031215610ffa57600080fd5b863561100581610f5a565b9550602087013561101581610f5a565b94506040870135935061102a60608801610f7f565b9250608087013567ffffffffffffffff81111561104657600080fd5b61105289828a01610f98565b979a9699509497509295939492505050565b6000806040838503121561107757600080fd5b823561108281610f5a565b9150602083013561109281610f5a565b809150509250929050565b6000815180845260005b818110156110c3576020818501810151868301820152016110a7565b818111156110d5576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061111b602083018461109d565b9392505050565b60008060006060848603121561113757600080fd5b833561114281610f5a565b9250602084013561115281610f5a565b929592945050506040919091013590565b600080600080600080600060c0888a03121561117e57600080fd5b873561118981610f5a565b9650602088013561119981610f5a565b955060408801356111a981610f5a565b945060608801356111b981610f5a565b93506080880135925060a088013567ffffffffffffffff8111156111dc57600080fd5b6111e88a828b01610f98565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561121657600080fd5b873561122181610f5a565b9650602088013561123181610f5a565b9550604088013561124181610f5a565b94506060880135935061125660808901610f7f565b925060a088013567ffffffffffffffff8111156111dc57600080fd5b60006020828403121561128457600080fd5b8151801515811461111b57600080fd5b6000602082840312156112a657600080fd5b815161111b81610f5a565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006113306060830184866112b1565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261138a60c0830184866112b1565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006113c6606083018561109d565b905063ffffffff8316604083015294935050505056fea164736f6c634300080f000a","sourceMap":"922:4498:131:-:0;;;1492:155;;;;;;;;;-1:-1:-1;1531:109:131::1;1585:1;::::0;1531:10:::1;:109::i;:::-;922:4498:::0;;1869:318;3100:19:43;3123:13;;;;;;3122:14;;3168:34;;;;-1:-1:-1;3186:12:43;;3201:1;3186:12;;;;:16;3168:34;3167:97;;;;3209:33;3236:4;3209:18;;;;;:33;;:::i;:::-;3208:34;:55;;;;-1:-1:-1;3246:12:43;;;;;:17;3208:55;3146:190;;;;-1:-1:-1;;;3146:190:43;;216:2:357;3146:190:43;;;198:21:357;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:357;;;338:44;399:19;;3146:190:43;;;;;;;;;3346:12;:16;;-1:-1:-1;;3346:16:43;3361:1;3346:16;;;3372:65;;;;3406:13;:20;;-1:-1:-1;;3406:20:43;;;;;3372:65;1987:16:131::1;:36:::0;;-1:-1:-1;;;;;;1987:36:131::1;-1:-1:-1::0;;;;;1987:36:131;::::1;;::::0;;2033:147:::1;2079:10:::0;786:42:199::1;2033:19:131;:147::i;:::-;3461:14:43::0;3457:99;;;3507:5;3491:21;;-1:-1:-1;;3491:21:43;;;3531:14;;-1:-1:-1;581:36:357;;3531:14:43;;569:2:357;554:18;3531:14:43;;;;;;;3457:99;3090:472;1869:318:131;;:::o;1175:320:59:-;-1:-1:-1;;;;;1465:19:59;;:23;;;1175:320::o;3043:234:224:-;4888:13:43;;;;;;;4880:69;;;;-1:-1:-1;;;4880:69:43;;830:2:357;4880:69:43;;;812:21:357;869:2;849:18;;;842:30;908:34;888:18;;;881:62;-1:-1:-1;;;959:18:357;;;952:41;1010:19;;4880:69:43;628:407:357;4880:69:43;3212:9:224::1;:22:::0;;-1:-1:-1;;;;;3212:22:224;;::::1;-1:-1:-1::0;;;;;;3212:22:224;;::::1;;::::0;;;3244:11:::1;:26:::0;;;;;::::1;::::0;::::1;;::::0;;3043:234::o;628:407:357:-;922:4498:131;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106100d45760003560e01c80635d93a3fc11610081578063927ede2d1161005b578063927ede2d14610231578063aa5574521461024f578063c89701a21461026257600080fd5b80635d93a3fc146101cc578063761f4493146102005780637f46ddb21461021357600080fd5b8063485cc955116100b2578063485cc9551461015857806354fd4d501461016b5780635c975abb146101b457600080fd5b806335e80ab3146100d95780633687011a146101235780633cb747bf14610138575b600080fd5b6032546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610136610131366004610fe1565b610282565b005b6001546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b610136610166366004611064565b61032e565b6101a76040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b60405161011a9190611108565b6101bc610518565b604051901515815260200161011a565b6101bc6101da366004611122565b603160209081526000938452604080852082529284528284209052825290205460ff1681565b61013661020e366004611163565b6105b1565b60025473ffffffffffffffffffffffffffffffffffffffff166100f9565b60015473ffffffffffffffffffffffffffffffffffffffff166100f9565b61013661025d3660046111fb565b610a58565b6002546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b333b15610316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6103268686333388888888610b30565b505050505050565b600054610100900460ff161580801561034e5750600054600160ff909116105b806103685750303b158015610368575060005460ff166001145b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161030d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561045257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556104b083734200000000000000000000000000000000000014610e70565b801561051357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610588573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ac9190611272565b905090565b60015473ffffffffffffffffffffffffffffffffffffffff16331480156106865750600254600154604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691636e296e45916004808201926020929091908290030181865afa15801561064a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066e9190611294565b73ffffffffffffffffffffffffffffffffffffffff16145b610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f746865722062726964676500606482015260840161030d565b61071a610518565b15610781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4c314552433732314272696467653a2070617573656400000000000000000000604482015260640161030d565b3073ffffffffffffffffffffffffffffffffffffffff881603610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c314552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c6600000000000000000000000000000000000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152603160209081526040808320938a1683529281528282208683529052205460ff1615156001146108f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4c314552433732314272696467653a20546f6b656e204944206973206e6f742060448201527f657363726f77656420696e20746865204c312042726964676500000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526031602090815260408083208b8616845282528083208884529091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152918616602483015260448201859052906342842e0e90606401600060405180830381600087803b1580156109b557600080fd5b505af11580156109c9573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac87878787604051610a4794939291906112fa565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516610afb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f74206265206164647265737328302900000000000000000000000000000000606482015260840161030d565b610b0b8787338888888888610b30565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff8716610bd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c314552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f742062652061646472657373283029000000000000000000000000000000606482015260840161030d565b600063761f449360e01b888a8989898888604051602401610bfa979695949392919061133a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000959095169490941790935273ffffffffffffffffffffffffffffffffffffffff8c81166000818152603186528381208e8416825286528381208b82529095529382902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590517f23b872dd000000000000000000000000000000000000000000000000000000008152908a166004820152306024820152604481018890529092506323b872dd90606401600060405180830381600087803b158015610d3a57600080fd5b505af1158015610d4e573d6000803e3d6000fd5b50506001546002546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169450633dbb202b9350610db1929091169085908990600401611397565b600060405180830381600087803b158015610dcb57600080fd5b505af1158015610ddf573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a589898888604051610e5d94939291906112fa565b60405180910390a4505050505050505050565b600054610100900460ff16610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161030d565b6001805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560028054929093169116179055565b73ffffffffffffffffffffffffffffffffffffffff81168114610f7c57600080fd5b50565b803563ffffffff81168114610f9357600080fd5b919050565b60008083601f840112610faa57600080fd5b50813567ffffffffffffffff811115610fc257600080fd5b602083019150836020828501011115610fda57600080fd5b9250929050565b60008060008060008060a08789031215610ffa57600080fd5b863561100581610f5a565b9550602087013561101581610f5a565b94506040870135935061102a60608801610f7f565b9250608087013567ffffffffffffffff81111561104657600080fd5b61105289828a01610f98565b979a9699509497509295939492505050565b6000806040838503121561107757600080fd5b823561108281610f5a565b9150602083013561109281610f5a565b809150509250929050565b6000815180845260005b818110156110c3576020818501810151868301820152016110a7565b818111156110d5576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061111b602083018461109d565b9392505050565b60008060006060848603121561113757600080fd5b833561114281610f5a565b9250602084013561115281610f5a565b929592945050506040919091013590565b600080600080600080600060c0888a03121561117e57600080fd5b873561118981610f5a565b9650602088013561119981610f5a565b955060408801356111a981610f5a565b945060608801356111b981610f5a565b93506080880135925060a088013567ffffffffffffffff8111156111dc57600080fd5b6111e88a828b01610f98565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561121657600080fd5b873561122181610f5a565b9650602088013561123181610f5a565b9550604088013561124181610f5a565b94506060880135935061125660808901610f7f565b925060a088013567ffffffffffffffff8111156111dc57600080fd5b60006020828403121561128457600080fd5b8151801515811461111b57600080fd5b6000602082840312156112a657600080fd5b815161111b81610f5a565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006113306060830184866112b1565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261138a60c0830184866112b1565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006113c6606083018561109d565b905063ffffffff8316604083015294935050505056fea164736f6c634300080f000a","sourceMap":"922:4498:131:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1279:40;;;;;;;;;;;;216:42:357;204:55;;;186:74;;174:2;159:18;1279:40:131;;;;;;;;5688:971:224;;;;;;:::i;:::-;;:::i;:::-;;829:37;;;;;;;;;1869:318:131;;;;;;:::i;:::-;;:::i;1389:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2226:103::-;;;:::i;:::-;;;3420:14:357;;3413:22;3395:41;;3383:2;3368:18;2226:103:131;3255:187:357;1134:80:131;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3096:1207;;;;;;:::i;:::-;;:::i;3858:98:224:-;3938:11;;;;3858:98;;3511:99;3594:9;;;;3511:99;;7885:428;;;;;;:::i;:::-;;:::i;967:33::-;;;;;;;;;5688:971;6472:10;1465:19:59;:23;6444:89:224;;;;;;;6391:2:357;6444:89:224;;;6373:21:357;6430:2;6410:18;;;6403:30;6469:34;6449:18;;;6442:62;6540:15;6520:18;;;6513:43;6573:19;;6444:89:224;;;;;;;;;6544:108;6566:11;6579:12;6593:10;6605;6617:8;6627:12;6641:10;;6544:21;:108::i;:::-;5688:971;;;;;;:::o;1869:318:131:-;3100:19:43;3123:13;;;;;;3122:14;;3168:34;;;;-1:-1:-1;3186:12:43;;3201:1;3186:12;;;;:16;3168:34;3167:97;;;-1:-1:-1;3236:4:43;1465:19:59;:23;;;3208:55:43;;-1:-1:-1;3246:12:43;;;;;:17;3208:55;3146:190;;;;;;;6805:2:357;3146:190:43;;;6787:21:357;6844:2;6824:18;;;6817:30;6883:34;6863:18;;;6856:62;6954:16;6934:18;;;6927:44;6988:19;;3146:190:43;6603:410:357;3146:190:43;3346:12;:16;;;;3361:1;3346:16;;;3372:65;;;;3406:13;:20;;;;;;;;3372:65;1987:16:131::1;:36:::0;;;::::1;;::::0;::::1;;::::0;;2033:147:::1;2079:10:::0;786:42:199::1;2033:19:131;:147::i;:::-;3461:14:43::0;3457:99;;;3507:5;3491:21;;;;;;3531:14;;-1:-1:-1;7170:36:357;;3531:14:43;;7158:2:357;7143:18;3531:14:43;;;;;;;3457:99;3090:472;1869:318:131;;:::o;2226:103::-;2297:16;;:25;;;;;;;;2274:4;;2297:16;;;:23;;:25;;;;;;;;;;;;;;:16;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2290:32;;2226:103;:::o;3096:1207::-;2669:9:224;;;;2647:10;:32;:92;;;;-1:-1:-1;2727:11:224;;;2683:9;:32;;;;;;;;2727:11;;;;;2683:9;;;;:30;;:32;;;;;;;;;;;;;;;:9;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;2647:92;2626:202;;;;;;;7957:2:357;2626:202:224;;;7939:21:357;7996:2;7976:18;;;7969:30;8035:34;8015:18;;;8008:62;8106:33;8086:18;;;8079:61;8157:19;;2626:202:224;7755:427:357;2626:202:224;3359:8:131::1;:6;:8::i;:::-;:17;3351:52;;;::::0;::::1;::::0;;8389:2:357;3351:52:131::1;::::0;::::1;8371:21:357::0;8428:2;8408:18;;;8401:30;8467:24;8447:18;;;8440:52;8509:18;;3351:52:131::1;8187:346:357::0;3351:52:131::1;3444:4;3421:28;::::0;::::1;::::0;3413:83:::1;;;::::0;::::1;::::0;;8740:2:357;3413:83:131::1;::::0;::::1;8722:21:357::0;8779:2;8759:18;;;8752:30;8818:34;8798:18;;;8791:62;8889:12;8869:18;;;8862:40;8919:19;;3413:83:131::1;8538:406:357::0;3413:83:131::1;3620:21;::::0;;::::1;;::::0;;;:8:::1;:21;::::0;;;;;;;:35;;::::1;::::0;;;;;;;;:45;;;;;;;::::1;;:53;;:45:::0;:53:::1;3599:157;;;::::0;::::1;::::0;;9151:2:357;3599:157:131::1;::::0;::::1;9133:21:357::0;9190:2;9170:18;;;9163:30;9229:34;9209:18;;;9202:62;9300:27;9280:18;;;9273:55;9345:19;;3599:157:131::1;8949:421:357::0;3599:157:131::1;3878:21;::::0;;::::1;3926:5;3878:21:::0;;;:8:::1;:21;::::0;;;;;;;:35;;::::1;::::0;;;;;;;:45;;;;;;;;;;:53;;;::::1;::::0;;4053:90;;;;4107:4:::1;4053:90;::::0;::::1;9638:34:357::0;9708:15;;;9688:18;;;9681:43;9740:18;;;9733:34;;;3878:21:131;4053:37:::1;::::0;9550:18:357;;4053:90:131::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4263:5;4214:82;;4249:12;4214:82;;4236:11;4214:82;;;4270:3;4275:8;4285:10;;4214:82;;;;;;;;;:::i;:::-;;;;;;;;3096:1207:::0;;;;;;;:::o;7885:428:224:-;8124:17;;;8116:78;;;;;;;10750:2:357;8116:78:224;;;10732:21:357;10789:2;10769:18;;;10762:30;10828:34;10808:18;;;10801:62;10899:18;10879;;;10872:46;10935:19;;8116:78:224;10548:412:357;8116:78:224;8205:101;8227:11;8240:12;8254:10;8266:3;8271:8;8281:12;8295:10;;8205:21;:101::i;:::-;7885:428;;;;;;;:::o;1175:320:59:-;1465:19;;;:23;;;1175:320::o;4342:1076:131:-;4628:26;;;4620:88;;;;;;;11167:2:357;4620:88:131;;;11149:21:357;11206:2;11186:18;;;11179:30;11245:34;11225:18;;;11218:62;11316:19;11296:18;;;11289:47;11353:19;;4620:88:131;10965:413:357;4620:88:131;4798:20;4857:44;;;4903:12;4917:11;4930:5;4937:3;4942:8;4952:10;;4821:151;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5017:21;;;;-1:-1:-1;5017:21:131;;;:8;:21;;;;;:35;;;;;;;;;;:45;;;;;;;;;;:52;;;;5065:4;5017:52;;;5079:88;;;;;9656:15:357;;;5079:88:131;;;9638:34:357;5140:4:131;9688:18:357;;;9681:43;9740:18;;;9733:34;;;4821:151:131;;-1:-1:-1;5079:33:131;;9550:18:357;;5079:88:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5211:9:131;;5252:11;;5211:103;;;;;:9;;;;;-1:-1:-1;5211:21:131;;-1:-1:-1;5211:103:131;;5252:11;;;;5276:7;;5299:12;;5211:103;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5378:5;5329:82;;5364:12;5329:82;;5351:11;5329:82;;;5385:3;5390:8;5400:10;;5329:82;;;;;;;;;:::i;:::-;;;;;;;;4610:808;4342:1076;;;;;;;;:::o;3043:234:224:-;4888:13:43;;;;;;;4880:69;;;;;;;12719:2:357;4880:69:43;;;12701:21:357;12758:2;12738:18;;;12731:30;12797:34;12777:18;;;12770:62;12868:13;12848:18;;;12841:41;12899:19;;4880:69:43;12517:407:357;4880:69:43;3212:9:224::1;:22:::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;;3244:11:::1;:26:::0;;;;;::::1;::::0;::::1;;::::0;;3043:234::o;271:154:357:-;357:42;350:5;346:54;339:5;336:65;326:93;;415:1;412;405:12;326:93;271:154;:::o;430:163::-;497:20;;557:10;546:22;;536:33;;526:61;;583:1;580;573:12;526:61;430:163;;;:::o;598:347::-;649:8;659:6;713:3;706:4;698:6;694:17;690:27;680:55;;731:1;728;721:12;680:55;-1:-1:-1;754:20:357;;797:18;786:30;;783:50;;;829:1;826;819:12;783:50;866:4;858:6;854:17;842:29;;918:3;911:4;902:6;894;890:19;886:30;883:39;880:59;;;935:1;932;925:12;880:59;598:347;;;;;:::o;950:827::-;1055:6;1063;1071;1079;1087;1095;1148:3;1136:9;1127:7;1123:23;1119:33;1116:53;;;1165:1;1162;1155:12;1116:53;1204:9;1191:23;1223:31;1248:5;1223:31;:::i;:::-;1273:5;-1:-1:-1;1330:2:357;1315:18;;1302:32;1343:33;1302:32;1343:33;:::i;:::-;1395:7;-1:-1:-1;1449:2:357;1434:18;;1421:32;;-1:-1:-1;1472:37:357;1505:2;1490:18;;1472:37;:::i;:::-;1462:47;;1560:3;1549:9;1545:19;1532:33;1588:18;1580:6;1577:30;1574:50;;;1620:1;1617;1610:12;1574:50;1659:58;1709:7;1700:6;1689:9;1685:22;1659:58;:::i;:::-;950:827;;;;-1:-1:-1;950:827:357;;-1:-1:-1;950:827:357;;1736:8;;950:827;-1:-1:-1;;;950:827:357:o;2044:445::-;2169:6;2177;2230:2;2218:9;2209:7;2205:23;2201:32;2198:52;;;2246:1;2243;2236:12;2198:52;2285:9;2272:23;2304:31;2329:5;2304:31;:::i;:::-;2354:5;-1:-1:-1;2411:2:357;2396:18;;2383:32;2424:33;2383:32;2424:33;:::i;:::-;2476:7;2466:17;;;2044:445;;;;;:::o;2494:531::-;2536:3;2574:5;2568:12;2601:6;2596:3;2589:19;2626:1;2636:162;2650:6;2647:1;2644:13;2636:162;;;2712:4;2768:13;;;2764:22;;2758:29;2740:11;;;2736:20;;2729:59;2665:12;2636:162;;;2816:6;2813:1;2810:13;2807:87;;;2882:1;2875:4;2866:6;2861:3;2857:16;2853:27;2846:38;2807:87;-1:-1:-1;2939:2:357;2927:15;2944:66;2923:88;2914:98;;;;3014:4;2910:109;;2494:531;-1:-1:-1;;2494:531:357:o;3030:220::-;3179:2;3168:9;3161:21;3142:4;3199:45;3240:2;3229:9;3225:18;3217:6;3199:45;:::i;:::-;3191:53;3030:220;-1:-1:-1;;;3030:220:357:o;3447:456::-;3524:6;3532;3540;3593:2;3581:9;3572:7;3568:23;3564:32;3561:52;;;3609:1;3606;3599:12;3561:52;3648:9;3635:23;3667:31;3692:5;3667:31;:::i;:::-;3717:5;-1:-1:-1;3774:2:357;3759:18;;3746:32;3787:33;3746:32;3787:33;:::i;:::-;3447:456;;3839:7;;-1:-1:-1;;;3893:2:357;3878:18;;;;3865:32;;3447:456::o;3908:1038::-;4023:6;4031;4039;4047;4055;4063;4071;4124:3;4112:9;4103:7;4099:23;4095:33;4092:53;;;4141:1;4138;4131:12;4092:53;4180:9;4167:23;4199:31;4224:5;4199:31;:::i;:::-;4249:5;-1:-1:-1;4306:2:357;4291:18;;4278:32;4319:33;4278:32;4319:33;:::i;:::-;4371:7;-1:-1:-1;4430:2:357;4415:18;;4402:32;4443:33;4402:32;4443:33;:::i;:::-;4495:7;-1:-1:-1;4554:2:357;4539:18;;4526:32;4567:33;4526:32;4567:33;:::i;:::-;4619:7;-1:-1:-1;4673:3:357;4658:19;;4645:33;;-1:-1:-1;4729:3:357;4714:19;;4701:33;4757:18;4746:30;;4743:50;;;4789:1;4786;4779:12;4743:50;4828:58;4878:7;4869:6;4858:9;4854:22;4828:58;:::i;:::-;3908:1038;;;;-1:-1:-1;3908:1038:357;;-1:-1:-1;3908:1038:357;;;;4802:84;;-1:-1:-1;;;3908:1038:357:o;5215:969::-;5329:6;5337;5345;5353;5361;5369;5377;5430:3;5418:9;5409:7;5405:23;5401:33;5398:53;;;5447:1;5444;5437:12;5398:53;5486:9;5473:23;5505:31;5530:5;5505:31;:::i;:::-;5555:5;-1:-1:-1;5612:2:357;5597:18;;5584:32;5625:33;5584:32;5625:33;:::i;:::-;5677:7;-1:-1:-1;5736:2:357;5721:18;;5708:32;5749:33;5708:32;5749:33;:::i;:::-;5801:7;-1:-1:-1;5855:2:357;5840:18;;5827:32;;-1:-1:-1;5878:38:357;5911:3;5896:19;;5878:38;:::i;:::-;5868:48;;5967:3;5956:9;5952:19;5939:33;5995:18;5987:6;5984:30;5981:50;;;6027:1;6024;6017:12;7217:277;7284:6;7337:2;7325:9;7316:7;7312:23;7308:32;7305:52;;;7353:1;7350;7343:12;7305:52;7385:9;7379:16;7438:5;7431:13;7424:21;7417:5;7414:32;7404:60;;7460:1;7457;7450:12;7499:251;7569:6;7622:2;7610:9;7601:7;7597:23;7593:32;7590:52;;;7638:1;7635;7628:12;7590:52;7670:9;7664:16;7689:31;7714:5;7689:31;:::i;9778:325::-;9866:6;9861:3;9854:19;9918:6;9911:5;9904:4;9899:3;9895:14;9882:43;;9970:1;9963:4;9954:6;9949:3;9945:16;9941:27;9934:38;9836:3;10092:4;10022:66;10017:2;10009:6;10005:15;10001:88;9996:3;9992:98;9988:109;9981:116;;9778:325;;;;:::o;10108:435::-;10333:42;10325:6;10321:55;10310:9;10303:74;10413:6;10408:2;10397:9;10393:18;10386:34;10456:2;10451;10440:9;10436:18;10429:30;10284:4;10476:61;10533:2;10522:9;10518:18;10510:6;10502;10476:61;:::i;:::-;10468:69;10108:435;-1:-1:-1;;;;;;10108:435:357:o;11383:700::-;11643:4;11672:42;11753:2;11745:6;11741:15;11730:9;11723:34;11805:2;11797:6;11793:15;11788:2;11777:9;11773:18;11766:43;11857:2;11849:6;11845:15;11840:2;11829:9;11825:18;11818:43;11909:2;11901:6;11897:15;11892:2;11881:9;11877:18;11870:43;;11950:6;11944:3;11933:9;11929:19;11922:35;11994:3;11988;11977:9;11973:19;11966:32;12015:62;12072:3;12061:9;12057:19;12049:6;12041;12015:62;:::i;:::-;12007:70;11383:700;-1:-1:-1;;;;;;;;;11383:700:357:o;12088:424::-;12301:42;12293:6;12289:55;12278:9;12271:74;12381:2;12376;12365:9;12361:18;12354:30;12252:4;12401:45;12442:2;12431:9;12427:18;12419:6;12401:45;:::i;:::-;12393:53;;12494:10;12486:6;12482:23;12477:2;12466:9;12462:18;12455:51;12088:424;;;;;;:::o","linkReferences":{}},"methodIdentifiers":{"MESSENGER()":"927ede2d","OTHER_BRIDGE()":"7f46ddb2","bridgeERC721(address,address,uint256,uint32,bytes)":"3687011a","bridgeERC721To(address,address,address,uint256,uint32,bytes)":"aa557452","deposits(address,address,uint256)":"5d93a3fc","finalizeBridgeERC721(address,address,address,address,uint256,bytes)":"761f4493","initialize(address,address)":"485cc955","messenger()":"3cb747bf","otherBridge()":"c89701a2","paused()":"5c975abb","superchainConfig()":"35e80ab3","version()":"54fd4d50"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC721BridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC721BridgeInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"contract CrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_BRIDGE\",\"outputs\":[{\"internalType\":\"contract StandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC721\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC721To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"deposits\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeERC721\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract CrossDomainMessenger\",\"name\":\"_messenger\",\"type\":\"address\"},{\"internalType\":\"contract SuperchainConfig\",\"name\":\"_superchainConfig\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messenger\",\"outputs\":[{\"internalType\":\"contract CrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"otherBridge\",\"outputs\":[{\"internalType\":\"contract StandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"superchainConfig\",\"outputs\":[{\"internalType\":\"contract SuperchainConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"MESSENGER()\":{\"custom:legacy\":\"\",\"returns\":{\"_0\":\"Messenger contract on this domain.\"}},\"OTHER_BRIDGE()\":{\"custom:legacy\":\"\",\"returns\":{\"_0\":\"Contract of the bridge on the other network.\"}},\"bridgeERC721(address,address,uint256,uint32,bytes)\":{\"params\":{\"_extraData\":\"Optional data to forward to the other chain. Data supplied here will not be used to execute any code on the other chain and is only emitted as extra data for the convenience of off-chain tooling.\",\"_localToken\":\"Address of the ERC721 on this domain.\",\"_minGasLimit\":\"Minimum gas limit for the bridge message on the other domain.\",\"_remoteToken\":\"Address of the ERC721 on the remote domain.\",\"_tokenId\":\"Token ID to bridge.\"}},\"bridgeERC721To(address,address,address,uint256,uint32,bytes)\":{\"params\":{\"_extraData\":\"Optional data to forward to the other chain. Data supplied here will not be used to execute any code on the other chain and is only emitted as extra data for the convenience of off-chain tooling.\",\"_localToken\":\"Address of the ERC721 on this domain.\",\"_minGasLimit\":\"Minimum gas limit for the bridge message on the other domain.\",\"_remoteToken\":\"Address of the ERC721 on the remote domain.\",\"_to\":\"Address to receive the token on the other domain.\",\"_tokenId\":\"Token ID to bridge.\"}},\"finalizeBridgeERC721(address,address,address,address,uint256,bytes)\":{\"params\":{\"_extraData\":\"Optional data to forward to L2. Data supplied here will not be used to execute any code on L2 and is only emitted as extra data for the convenience of off-chain tooling.\",\"_from\":\"Address that triggered the bridge on the other domain.\",\"_localToken\":\"Address of the ERC721 token on this domain.\",\"_remoteToken\":\"Address of the ERC721 token on the other domain.\",\"_to\":\"Address to receive the token on this domain.\",\"_tokenId\":\"ID of the token being deposited.\"}},\"initialize(address,address)\":{\"params\":{\"_messenger\":\"Contract of the CrossDomainMessenger on this network.\",\"_superchainConfig\":\"Contract of the SuperchainConfig contract on this network.\"}},\"paused()\":{\"returns\":{\"_0\":\"Whether or not the contract is paused.\"}}},\"stateVariables\":{\"version\":{\"custom:semver\":\"2.1.0\"}},\"title\":\"L1ERC721Bridge\",\"version\":1},\"userdoc\":{\"events\":{\"ERC721BridgeFinalized(address,address,address,address,uint256,bytes)\":{\"notice\":\"Emitted when an ERC721 bridge from the other network is finalized.\"},\"ERC721BridgeInitiated(address,address,address,address,uint256,bytes)\":{\"notice\":\"Emitted when an ERC721 bridge to the other network is initiated.\"}},\"kind\":\"user\",\"methods\":{\"MESSENGER()\":{\"notice\":\"Legacy getter for messenger contract. Public getter is legacy and will be removed in the future. Use `messenger` instead.\"},\"OTHER_BRIDGE()\":{\"notice\":\"Legacy getter for other bridge address. Public getter is legacy and will be removed in the future. Use `otherBridge` instead.\"},\"bridgeERC721(address,address,uint256,uint32,bytes)\":{\"notice\":\"Initiates a bridge of an NFT to the caller's account on the other chain. Note that this function can only be called by EOAs. Smart contract wallets should use the `bridgeERC721To` function after ensuring that the recipient address on the remote chain exists. Also note that the current owner of the token on this chain must approve this contract to operate the NFT before it can be bridged. **WARNING**: Do not bridge an ERC721 that was originally deployed on Optimism. This bridge only supports ERC721s originally deployed on Ethereum. Users will need to wait for the one-week challenge period to elapse before their Optimism-native NFT can be refunded on L2.\"},\"bridgeERC721To(address,address,address,uint256,uint32,bytes)\":{\"notice\":\"Initiates a bridge of an NFT to some recipient's account on the other chain. Note that the current owner of the token on this chain must approve this contract to operate the NFT before it can be bridged. **WARNING**: Do not bridge an ERC721 that was originally deployed on Optimism. This bridge only supports ERC721s originally deployed on Ethereum. Users will need to wait for the one-week challenge period to elapse before their Optimism-native NFT can be refunded on L2.\"},\"constructor\":{\"notice\":\"Constructs the L1ERC721Bridge contract.\"},\"deposits(address,address,uint256)\":{\"notice\":\"Mapping of L1 token to L2 token to ID to boolean, indicating if the given L1 token by ID was deposited for a given L2 token.\"},\"finalizeBridgeERC721(address,address,address,address,uint256,bytes)\":{\"notice\":\"Completes an ERC721 bridge from the other domain and sends the ERC721 token to the recipient on this domain.\"},\"initialize(address,address)\":{\"notice\":\"Initializes the contract.\"},\"messenger()\":{\"notice\":\"Messenger contract on this domain.\"},\"otherBridge()\":{\"notice\":\"Contract of the bridge on the other network.\"},\"paused()\":{\"notice\":\"This function should return true if the contract is paused. On L1 this function will check the SuperchainConfig for its paused status. On L2 this function should be a no-op.\"},\"superchainConfig()\":{\"notice\":\"Address of the SuperchainConfig contract.\"},\"version()\":{\"notice\":\"Semantic version.\"}},\"notice\":\"The L1 ERC721 bridge is a contract which works together with the L2 ERC721 bridge to make it possible to transfer ERC721 tokens from Ethereum to Optimism. This contract acts as an escrow for ERC721 tokens deposited into L2.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/L1/L1ERC721Bridge.sol\":\"L1ERC721Bridge\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f\",\"dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x24b04b8aacaaf1a4a0719117b29c9c3647b1f479c5ac2a60f5ff1bb6d839c238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://43e46da9d9f49741ecd876a269e71bc7494058d7a8e9478429998adb5bc3eaa0\",\"dweb:/ipfs/QmUtp4cqzf22C5rJ76AabKADquGWcjsc33yjYXxXC4sDvy\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x032807210d1d7d218963d7355d62e021a84bf1b3339f4f50be2f63b53cccaf29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11756f42121f6541a35a8339ea899ee7514cfaa2e6d740625fcc844419296aa6\",\"dweb:/ipfs/QmekMuk6BY4DAjzeXr4MSbKdgoqqsZnA8JPtuyWc6CwXHf\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xed6a749c5373af398105ce6ee3ac4763aa450ea7285d268c85d9eeca809cdb1f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://20a97f891d06f0fe91560ea1a142aaa26fdd22bed1b51606b7d48f670deeb50f\",\"dweb:/ipfs/QmTbCtZKChpaX5H2iRiTDMcSz29GSLCpTCDgJpcMR4wg8x\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol\":{\"keccak256\":\"0xd1556954440b31c97a142c6ba07d5cade45f96fafd52091d33a14ebe365aecbf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26fef835622b46a5ba08b3ef6b46a22e94b5f285d0f0fb66b703bd30217d2c34\",\"dweb:/ipfs/QmZ548qdwfL1qF7aXz3xh1GCdTiST81kGGuKRqVUfYmPZR\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165Checker.sol\":{\"keccak256\":\"0xc65c83c1039508fa7a42a09a3c6a32babd1c438ba4dbb23581255e784b5d5eed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1b3b38db0f76429db899909025e534c366415e9ea8b5ddc4c8901e6a7fc1461\",\"dweb:/ipfs/QmYv1KxyHjLEky9JWNSsSfpGJbiCxFyzVFgTwQKpiqYGUg\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929\",\"dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689\",\"dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy\"]},\"lib/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c\",\"dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8\"]},\"src/L1/L1ERC721Bridge.sol\":{\"keccak256\":\"0x2a3177a2b025bf7ac58450d7dfc7f4f984a265b651d9f57f83c4b43d9fe5ebdd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f24ea47b324c2683f3dd00f5b47c93bfe7b45fda3dd85c2fc08999c2f1e62db\",\"dweb:/ipfs/QmTKM64r67YGyRamy2pwBA47N7HeD6fk5HEMd3nM3vNkAK\"]},\"src/L1/ResourceMetering.sol\":{\"keccak256\":\"0xde3ac62c60f27a3f1ba06eec94f4eda45e7ec5544c6a5d6b79543a7184e44408\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://265a2845c4ff0d9076dd0505755cf2bdf799f4fdc09ef016865a26b51f5c3409\",\"dweb:/ipfs/QmRzSdBD8jmQf3U9u2ATRAzzuyo6c5ugz8VA5ZM4vzoGiM\"]},\"src/L1/SuperchainConfig.sol\":{\"keccak256\":\"0x5fab874f980fe3e52c3398ddd25b655c56af0c98c15588b2ad9ebf30671d859d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4e0aa613d38eceb621f8569fc714f521bc1f2df3d029552186ab3cdf2ee5d53f\",\"dweb:/ipfs/QmZDzFxhTXLW79eohQbr1nghNh3oNC4CUfH7uMX8CsjVAB\"]},\"src/L2/L2ERC721Bridge.sol\":{\"keccak256\":\"0xcacb39a7b6e5d2d5293834195363397010130ab88d2f4de860277dae6d4265f9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6cdcf63276957f9ca614567394b11ab3f6877baa5a6d33bf54dd8022ca2021f\",\"dweb:/ipfs/QmZQBBfjk2UPLFtKeTd5DJCTRWw1KxKbQMmWr8WVDzZsat\"]},\"src/libraries/Arithmetic.sol\":{\"keccak256\":\"0x91345e053584f82ad04d682ba821cf3ede808304f5b2a88116a894cf692c21db\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://005e3c42d2edfca0a506cbda94d3b0104eddf20c00bd1bd25272f53f2ef74c72\",\"dweb:/ipfs/QmdaW6Nge6NKoGvFqRpQjBpM2fXpc5y8WpZyBnDnKicdJq\"]},\"src/libraries/Burn.sol\":{\"keccak256\":\"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f\",\"dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb\"]},\"src/libraries/Constants.sol\":{\"keccak256\":\"0xe0aeec7d6e5d1e44a11405d3b5bfc384ea092c39bea0b763ab937a26fd427132\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11aa3bff9da26ca2545132ec7994866690446a5321023811c254410d9593bd9b\",\"dweb:/ipfs/QmVxWqadxvdfkqdrhfWisDqeAthibn4HEE1P6o9aFxXLhp\"]},\"src/libraries/Encoding.sol\":{\"keccak256\":\"0x1dafabcbd4877c7abe9698957b0a44b7e911cb8b11c1437a4ed897135669fa87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6addfacefa26fdb44f56d73fa0172b97740de75629a962905ec2a20a28d40fff\",\"dweb:/ipfs/QmboHMouqU19Rnbqrfo1gkfnuDBFcPiC9wsKgGtF2W1cNA\"]},\"src/libraries/Hashing.sol\":{\"keccak256\":\"0x89c07a0ca102cbe57b4e082543f2dd6dae0e1fd4a87908a334bd076fc914e7b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://69c83489c9544ab442dc244c2feb2c6811b726a5eb5a509b97fc5ccb90b98c12\",\"dweb:/ipfs/QmPGGJeLasc1HWHzd6odvWcNvFPQrbYtDubZcv8yp1HLtF\"]},\"src/libraries/Predeploys.sol\":{\"keccak256\":\"0x7b48b32b75e9ba0cd7f83b3304c6c1676dd8de20a5d40e8846bf7018ae9aff02\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7574fcc79c0d545b90071023aa81ee7880ab50b3057df598fa693bc4cf303663\",\"dweb:/ipfs/QmWLxHzgfaTJ7thfb7khXkTY5UtSBZ5VTUB4DaAXVw7DRe\"]},\"src/libraries/SafeCall.sol\":{\"keccak256\":\"0x0636a7abb242bb5d6f5606967c8929e6aa7e63468c1e2ce40ad4780d4c4bf94f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4daec2ac8f9907bbf84ef0a1c48f03bae8657619bc6f42b3a672f25c516f17a\",\"dweb:/ipfs/Qmf8gfRxBv8gEmCkP8YMPb2GGfj9QUnoNUyKE7UR2SWGnq\"]},\"src/libraries/Storage.sol\":{\"keccak256\":\"0x7ce27a05552aa69afa6b2ab6684dfe99f27366cf8ef2046baeb1fb62fff0022f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6a24f3ed56681720707a5ab0372fd67fcb1a4f6fb072c7140cda28bdb70f269\",\"dweb:/ipfs/QmW9uTpUULV4xmP7A7MoBDeDhVfQgmJG5qVUFGtXxWpWWK\"]},\"src/libraries/Types.sol\":{\"keccak256\":\"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e\",\"dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc\"]},\"src/libraries/rlp/RLPWriter.sol\":{\"keccak256\":\"0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b\",\"dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV\"]},\"src/universal/CrossDomainMessenger.sol\":{\"keccak256\":\"0x330ae1479e88fc8a8b5b27a84df935a092a47ad13e59d9b9ea4982ad31bbe7b0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf5fb4e78a03dcad4b9a8e2d5ed135f8e989aa02090747386843383fa6b7d1\",\"dweb:/ipfs/QmTp66RoF6EaKeBrrZBuYAu3dsMfKo8de2XY9iHHnqfN3n\"]},\"src/universal/ERC721Bridge.sol\":{\"keccak256\":\"0xea04387e26c6b3ba2ce5762166b7f790ccb068012f2cd5cc16c5734b47e1cb4f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37a697c0886aa201672ded4196c3e5506903522183f27c9c3455ccdbd5e1c3cb\",\"dweb:/ipfs/QmdxhxBFR8J2obRzuFCMtUirB4Fsc8CvKwNwR8DFc9SEGK\"]},\"src/universal/IOptimismMintableERC20.sol\":{\"keccak256\":\"0x6f8133b39efcbcbd5088f195dfacf1bedc3146508429c3865443909af735a04c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://adc36971e2e120458769f050428d9d2b0504516660345020c2521ee46e6d8abf\",\"dweb:/ipfs/QmPbFusQkZgGKpU8Fv5JoqL4oVeJtM3yqnhRGLY9eZT5zZ\"]},\"src/universal/IOptimismMintableERC721.sol\":{\"keccak256\":\"0xb3a65b067e67a9e1fa0493401c8d247970377c6725eba4e7b02ce8099c4f4f52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://86bb6864027560ade2f4ced6a6e34213cbff8002977dc365377e5a0b473cf17b\",\"dweb:/ipfs/QmQvjtodTK27as1g1PzsYk9NyJJ3X6a6251o1vrBwx7DPT\"]},\"src/universal/ISemver.sol\":{\"keccak256\":\"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a\",\"dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR\"]},\"src/universal/OptimismMintableERC20.sol\":{\"keccak256\":\"0x18721f41a831ec39d47002e73ecc2aa3e6624f8d1ab7b9f25b53348e8b0765df\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2162fa7529a77b199a07f37fca26c778542f6c8805f0365f1ceef90c5cd3a3a7\",\"dweb:/ipfs/QmaMmHJS52Bp95AGnrjh1zV7fLLqV3uAbFzkVLziMnPJYa\"]},\"src/universal/StandardBridge.sol\":{\"keccak256\":\"0x1a2f6afd7f14430ae2b797e09497c3dc860ed5db752e1847e30649668060c01d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fefe1356cdeb5b324e4e63e1c723c08f9e244ef2ef133b9f5df0cc0d180eeaa8\",\"dweb:/ipfs/QmZzR3zWKodwdwrdWwXUyh7G3qcFn2cjUQLrE45gRyQMn3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.15+commit.e14f2714"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"localToken","type":"address","indexed":true},{"internalType":"address","name":"remoteToken","type":"address","indexed":true},{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"tokenId","type":"uint256","indexed":false},{"internalType":"bytes","name":"extraData","type":"bytes","indexed":false}],"type":"event","name":"ERC721BridgeFinalized","anonymous":false},{"inputs":[{"internalType":"address","name":"localToken","type":"address","indexed":true},{"internalType":"address","name":"remoteToken","type":"address","indexed":true},{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"tokenId","type":"uint256","indexed":false},{"internalType":"bytes","name":"extraData","type":"bytes","indexed":false}],"type":"event","name":"ERC721BridgeInitiated","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"MESSENGER","outputs":[{"internalType":"contract CrossDomainMessenger","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"OTHER_BRIDGE","outputs":[{"internalType":"contract StandardBridge","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_localToken","type":"address"},{"internalType":"address","name":"_remoteToken","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"bridgeERC721"},{"inputs":[{"internalType":"address","name":"_localToken","type":"address"},{"internalType":"address","name":"_remoteToken","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"bridgeERC721To"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"deposits","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"_localToken","type":"address"},{"internalType":"address","name":"_remoteToken","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"finalizeBridgeERC721"},{"inputs":[{"internalType":"contract CrossDomainMessenger","name":"_messenger","type":"address"},{"internalType":"contract SuperchainConfig","name":"_superchainConfig","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"messenger","outputs":[{"internalType":"contract CrossDomainMessenger","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"otherBridge","outputs":[{"internalType":"contract StandardBridge","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"superchainConfig","outputs":[{"internalType":"contract SuperchainConfig","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]}],"devdoc":{"kind":"dev","methods":{"MESSENGER()":{"custom:legacy":"","returns":{"_0":"Messenger contract on this domain."}},"OTHER_BRIDGE()":{"custom:legacy":"","returns":{"_0":"Contract of the bridge on the other network."}},"bridgeERC721(address,address,uint256,uint32,bytes)":{"params":{"_extraData":"Optional data to forward to the other chain. Data supplied here will not be used to execute any code on the other chain and is only emitted as extra data for the convenience of off-chain tooling.","_localToken":"Address of the ERC721 on this domain.","_minGasLimit":"Minimum gas limit for the bridge message on the other domain.","_remoteToken":"Address of the ERC721 on the remote domain.","_tokenId":"Token ID to bridge."}},"bridgeERC721To(address,address,address,uint256,uint32,bytes)":{"params":{"_extraData":"Optional data to forward to the other chain. Data supplied here will not be used to execute any code on the other chain and is only emitted as extra data for the convenience of off-chain tooling.","_localToken":"Address of the ERC721 on this domain.","_minGasLimit":"Minimum gas limit for the bridge message on the other domain.","_remoteToken":"Address of the ERC721 on the remote domain.","_to":"Address to receive the token on the other domain.","_tokenId":"Token ID to bridge."}},"finalizeBridgeERC721(address,address,address,address,uint256,bytes)":{"params":{"_extraData":"Optional data to forward to L2. Data supplied here will not be used to execute any code on L2 and is only emitted as extra data for the convenience of off-chain tooling.","_from":"Address that triggered the bridge on the other domain.","_localToken":"Address of the ERC721 token on this domain.","_remoteToken":"Address of the ERC721 token on the other domain.","_to":"Address to receive the token on this domain.","_tokenId":"ID of the token being deposited."}},"initialize(address,address)":{"params":{"_messenger":"Contract of the CrossDomainMessenger on this network.","_superchainConfig":"Contract of the SuperchainConfig contract on this network."}},"paused()":{"returns":{"_0":"Whether or not the contract is paused."}}},"version":1},"userdoc":{"kind":"user","methods":{"MESSENGER()":{"notice":"Legacy getter for messenger contract. Public getter is legacy and will be removed in the future. Use `messenger` instead."},"OTHER_BRIDGE()":{"notice":"Legacy getter for other bridge address. Public getter is legacy and will be removed in the future. Use `otherBridge` instead."},"bridgeERC721(address,address,uint256,uint32,bytes)":{"notice":"Initiates a bridge of an NFT to the caller's account on the other chain. Note that this function can only be called by EOAs. Smart contract wallets should use the `bridgeERC721To` function after ensuring that the recipient address on the remote chain exists. Also note that the current owner of the token on this chain must approve this contract to operate the NFT before it can be bridged. **WARNING**: Do not bridge an ERC721 that was originally deployed on Optimism. This bridge only supports ERC721s originally deployed on Ethereum. Users will need to wait for the one-week challenge period to elapse before their Optimism-native NFT can be refunded on L2."},"bridgeERC721To(address,address,address,uint256,uint32,bytes)":{"notice":"Initiates a bridge of an NFT to some recipient's account on the other chain. Note that the current owner of the token on this chain must approve this contract to operate the NFT before it can be bridged. **WARNING**: Do not bridge an ERC721 that was originally deployed on Optimism. This bridge only supports ERC721s originally deployed on Ethereum. Users will need to wait for the one-week challenge period to elapse before their Optimism-native NFT can be refunded on L2."},"constructor":{"notice":"Constructs the L1ERC721Bridge contract."},"deposits(address,address,uint256)":{"notice":"Mapping of L1 token to L2 token to ID to boolean, indicating if the given L1 token by ID was deposited for a given L2 token."},"finalizeBridgeERC721(address,address,address,address,uint256,bytes)":{"notice":"Completes an ERC721 bridge from the other domain and sends the ERC721 token to the recipient on this domain."},"initialize(address,address)":{"notice":"Initializes the contract."},"messenger()":{"notice":"Messenger contract on this domain."},"otherBridge()":{"notice":"Contract of the bridge on the other network."},"paused()":{"notice":"This function should return true if the contract is paused. On L1 this function will check the SuperchainConfig for its paused status. On L2 this function should be a no-op."},"superchainConfig()":{"notice":"Address of the SuperchainConfig contract."},"version()":{"notice":"Semantic version."}},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","ds-test/=lib/forge-std/lib/ds-test/src/","forge-std/=lib/forge-std/src/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/L1/L1ERC721Bridge.sol":"L1ERC721Bridge"},"evmVersion":"london","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e","urls":["bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497","dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3","urls":["bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4","dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66","urls":["bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f","dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol":{"keccak256":"0x24b04b8aacaaf1a4a0719117b29c9c3647b1f479c5ac2a60f5ff1bb6d839c238","urls":["bzz-raw://43e46da9d9f49741ecd876a269e71bc7494058d7a8e9478429998adb5bc3eaa0","dweb:/ipfs/QmUtp4cqzf22C5rJ76AabKADquGWcjsc33yjYXxXC4sDvy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b","urls":["bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34","dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca","urls":["bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd","dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-IERC20Permit.sol":{"keccak256":"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329","urls":["bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95","dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x032807210d1d7d218963d7355d62e021a84bf1b3339f4f50be2f63b53cccaf29","urls":["bzz-raw://11756f42121f6541a35a8339ea899ee7514cfaa2e6d740625fcc844419296aa6","dweb:/ipfs/QmekMuk6BY4DAjzeXr4MSbKdgoqqsZnA8JPtuyWc6CwXHf"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol":{"keccak256":"0xed6a749c5373af398105ce6ee3ac4763aa450ea7285d268c85d9eeca809cdb1f","urls":["bzz-raw://20a97f891d06f0fe91560ea1a142aaa26fdd22bed1b51606b7d48f670deeb50f","dweb:/ipfs/QmTbCtZKChpaX5H2iRiTDMcSz29GSLCpTCDgJpcMR4wg8x"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol":{"keccak256":"0xd1556954440b31c97a142c6ba07d5cade45f96fafd52091d33a14ebe365aecbf","urls":["bzz-raw://26fef835622b46a5ba08b3ef6b46a22e94b5f285d0f0fb66b703bd30217d2c34","dweb:/ipfs/QmZ548qdwfL1qF7aXz3xh1GCdTiST81kGGuKRqVUfYmPZR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10","urls":["bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487","dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7","urls":["bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92","dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165Checker.sol":{"keccak256":"0xc65c83c1039508fa7a42a09a3c6a32babd1c438ba4dbb23581255e784b5d5eed","urls":["bzz-raw://a1b3b38db0f76429db899909025e534c366415e9ea8b5ddc4c8901e6a7fc1461","dweb:/ipfs/QmYv1KxyHjLEky9JWNSsSfpGJbiCxFyzVFgTwQKpiqYGUg"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1","urls":["bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f","dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0","urls":["bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929","dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7","urls":["bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689","dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy"],"license":"MIT"},"lib/solmate/src/utils/FixedPointMathLib.sol":{"keccak256":"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d","urls":["bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c","dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8"],"license":"MIT"},"src/L1/L1ERC721Bridge.sol":{"keccak256":"0x2a3177a2b025bf7ac58450d7dfc7f4f984a265b651d9f57f83c4b43d9fe5ebdd","urls":["bzz-raw://2f24ea47b324c2683f3dd00f5b47c93bfe7b45fda3dd85c2fc08999c2f1e62db","dweb:/ipfs/QmTKM64r67YGyRamy2pwBA47N7HeD6fk5HEMd3nM3vNkAK"],"license":"MIT"},"src/L1/ResourceMetering.sol":{"keccak256":"0xde3ac62c60f27a3f1ba06eec94f4eda45e7ec5544c6a5d6b79543a7184e44408","urls":["bzz-raw://265a2845c4ff0d9076dd0505755cf2bdf799f4fdc09ef016865a26b51f5c3409","dweb:/ipfs/QmRzSdBD8jmQf3U9u2ATRAzzuyo6c5ugz8VA5ZM4vzoGiM"],"license":"MIT"},"src/L1/SuperchainConfig.sol":{"keccak256":"0x5fab874f980fe3e52c3398ddd25b655c56af0c98c15588b2ad9ebf30671d859d","urls":["bzz-raw://4e0aa613d38eceb621f8569fc714f521bc1f2df3d029552186ab3cdf2ee5d53f","dweb:/ipfs/QmZDzFxhTXLW79eohQbr1nghNh3oNC4CUfH7uMX8CsjVAB"],"license":"MIT"},"src/L2/L2ERC721Bridge.sol":{"keccak256":"0xcacb39a7b6e5d2d5293834195363397010130ab88d2f4de860277dae6d4265f9","urls":["bzz-raw://f6cdcf63276957f9ca614567394b11ab3f6877baa5a6d33bf54dd8022ca2021f","dweb:/ipfs/QmZQBBfjk2UPLFtKeTd5DJCTRWw1KxKbQMmWr8WVDzZsat"],"license":"MIT"},"src/libraries/Arithmetic.sol":{"keccak256":"0x91345e053584f82ad04d682ba821cf3ede808304f5b2a88116a894cf692c21db","urls":["bzz-raw://005e3c42d2edfca0a506cbda94d3b0104eddf20c00bd1bd25272f53f2ef74c72","dweb:/ipfs/QmdaW6Nge6NKoGvFqRpQjBpM2fXpc5y8WpZyBnDnKicdJq"],"license":"MIT"},"src/libraries/Burn.sol":{"keccak256":"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010","urls":["bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f","dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb"],"license":"MIT"},"src/libraries/Constants.sol":{"keccak256":"0xe0aeec7d6e5d1e44a11405d3b5bfc384ea092c39bea0b763ab937a26fd427132","urls":["bzz-raw://11aa3bff9da26ca2545132ec7994866690446a5321023811c254410d9593bd9b","dweb:/ipfs/QmVxWqadxvdfkqdrhfWisDqeAthibn4HEE1P6o9aFxXLhp"],"license":"MIT"},"src/libraries/Encoding.sol":{"keccak256":"0x1dafabcbd4877c7abe9698957b0a44b7e911cb8b11c1437a4ed897135669fa87","urls":["bzz-raw://6addfacefa26fdb44f56d73fa0172b97740de75629a962905ec2a20a28d40fff","dweb:/ipfs/QmboHMouqU19Rnbqrfo1gkfnuDBFcPiC9wsKgGtF2W1cNA"],"license":"MIT"},"src/libraries/Hashing.sol":{"keccak256":"0x89c07a0ca102cbe57b4e082543f2dd6dae0e1fd4a87908a334bd076fc914e7b8","urls":["bzz-raw://69c83489c9544ab442dc244c2feb2c6811b726a5eb5a509b97fc5ccb90b98c12","dweb:/ipfs/QmPGGJeLasc1HWHzd6odvWcNvFPQrbYtDubZcv8yp1HLtF"],"license":"MIT"},"src/libraries/Predeploys.sol":{"keccak256":"0x7b48b32b75e9ba0cd7f83b3304c6c1676dd8de20a5d40e8846bf7018ae9aff02","urls":["bzz-raw://7574fcc79c0d545b90071023aa81ee7880ab50b3057df598fa693bc4cf303663","dweb:/ipfs/QmWLxHzgfaTJ7thfb7khXkTY5UtSBZ5VTUB4DaAXVw7DRe"],"license":"MIT"},"src/libraries/SafeCall.sol":{"keccak256":"0x0636a7abb242bb5d6f5606967c8929e6aa7e63468c1e2ce40ad4780d4c4bf94f","urls":["bzz-raw://a4daec2ac8f9907bbf84ef0a1c48f03bae8657619bc6f42b3a672f25c516f17a","dweb:/ipfs/Qmf8gfRxBv8gEmCkP8YMPb2GGfj9QUnoNUyKE7UR2SWGnq"],"license":"MIT"},"src/libraries/Storage.sol":{"keccak256":"0x7ce27a05552aa69afa6b2ab6684dfe99f27366cf8ef2046baeb1fb62fff0022f","urls":["bzz-raw://a6a24f3ed56681720707a5ab0372fd67fcb1a4f6fb072c7140cda28bdb70f269","dweb:/ipfs/QmW9uTpUULV4xmP7A7MoBDeDhVfQgmJG5qVUFGtXxWpWWK"],"license":"MIT"},"src/libraries/Types.sol":{"keccak256":"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4","urls":["bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e","dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc"],"license":"MIT"},"src/libraries/rlp/RLPWriter.sol":{"keccak256":"0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6","urls":["bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b","dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV"],"license":"MIT"},"src/universal/CrossDomainMessenger.sol":{"keccak256":"0x330ae1479e88fc8a8b5b27a84df935a092a47ad13e59d9b9ea4982ad31bbe7b0","urls":["bzz-raw://66bf5fb4e78a03dcad4b9a8e2d5ed135f8e989aa02090747386843383fa6b7d1","dweb:/ipfs/QmTp66RoF6EaKeBrrZBuYAu3dsMfKo8de2XY9iHHnqfN3n"],"license":"MIT"},"src/universal/ERC721Bridge.sol":{"keccak256":"0xea04387e26c6b3ba2ce5762166b7f790ccb068012f2cd5cc16c5734b47e1cb4f","urls":["bzz-raw://37a697c0886aa201672ded4196c3e5506903522183f27c9c3455ccdbd5e1c3cb","dweb:/ipfs/QmdxhxBFR8J2obRzuFCMtUirB4Fsc8CvKwNwR8DFc9SEGK"],"license":"MIT"},"src/universal/IOptimismMintableERC20.sol":{"keccak256":"0x6f8133b39efcbcbd5088f195dfacf1bedc3146508429c3865443909af735a04c","urls":["bzz-raw://adc36971e2e120458769f050428d9d2b0504516660345020c2521ee46e6d8abf","dweb:/ipfs/QmPbFusQkZgGKpU8Fv5JoqL4oVeJtM3yqnhRGLY9eZT5zZ"],"license":"MIT"},"src/universal/IOptimismMintableERC721.sol":{"keccak256":"0xb3a65b067e67a9e1fa0493401c8d247970377c6725eba4e7b02ce8099c4f4f52","urls":["bzz-raw://86bb6864027560ade2f4ced6a6e34213cbff8002977dc365377e5a0b473cf17b","dweb:/ipfs/QmQvjtodTK27as1g1PzsYk9NyJJ3X6a6251o1vrBwx7DPT"],"license":"MIT"},"src/universal/ISemver.sol":{"keccak256":"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44","urls":["bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a","dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR"],"license":"MIT"},"src/universal/OptimismMintableERC20.sol":{"keccak256":"0x18721f41a831ec39d47002e73ecc2aa3e6624f8d1ab7b9f25b53348e8b0765df","urls":["bzz-raw://2162fa7529a77b199a07f37fca26c778542f6c8805f0365f1ceef90c5cd3a3a7","dweb:/ipfs/QmaMmHJS52Bp95AGnrjh1zV7fLLqV3uAbFzkVLziMnPJYa"],"license":"MIT"},"src/universal/StandardBridge.sol":{"keccak256":"0x1a2f6afd7f14430ae2b797e09497c3dc860ed5db752e1847e30649668060c01d","urls":["bzz-raw://fefe1356cdeb5b324e4e63e1c723c08f9e244ef2ef133b9f5df0cc0d180eeaa8","dweb:/ipfs/QmZzR3zWKodwdwrdWwXUyh7G3qcFn2cjUQLrE45gRyQMn3"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":49534,"contract":"src/L1/L1ERC721Bridge.sol:L1ERC721Bridge","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":49537,"contract":"src/L1/L1ERC721Bridge.sol:L1ERC721Bridge","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":108906,"contract":"src/L1/L1ERC721Bridge.sol:L1ERC721Bridge","label":"spacer_0_2_30","offset":2,"slot":"0","type":"t_bytes30"},{"astId":108910,"contract":"src/L1/L1ERC721Bridge.sol:L1ERC721Bridge","label":"messenger","offset":0,"slot":"1","type":"t_contract(CrossDomainMessenger)108888"},{"astId":108914,"contract":"src/L1/L1ERC721Bridge.sol:L1ERC721Bridge","label":"otherBridge","offset":0,"slot":"2","type":"t_contract(StandardBridge)111675"},{"astId":108919,"contract":"src/L1/L1ERC721Bridge.sol:L1ERC721Bridge","label":"__gap","offset":0,"slot":"3","type":"t_array(t_uint256)46_storage"},{"astId":85179,"contract":"src/L1/L1ERC721Bridge.sol:L1ERC721Bridge","label":"deposits","offset":0,"slot":"49","type":"t_mapping(t_address,t_mapping(t_address,t_mapping(t_uint256,t_bool)))"},{"astId":85183,"contract":"src/L1/L1ERC721Bridge.sol:L1ERC721Bridge","label":"superchainConfig","offset":0,"slot":"50","type":"t_contract(SuperchainConfig)88793"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)46_storage":{"encoding":"inplace","label":"uint256[46]","numberOfBytes":"1472","base":"t_uint256"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes30":{"encoding":"inplace","label":"bytes30","numberOfBytes":"30"},"t_contract(CrossDomainMessenger)108888":{"encoding":"inplace","label":"contract CrossDomainMessenger","numberOfBytes":"20"},"t_contract(StandardBridge)111675":{"encoding":"inplace","label":"contract StandardBridge","numberOfBytes":"20"},"t_contract(SuperchainConfig)88793":{"encoding":"inplace","label":"contract SuperchainConfig","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_mapping(t_uint256,t_bool)))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => mapping(uint256 => bool)))","numberOfBytes":"32","value":"t_mapping(t_address,t_mapping(t_uint256,t_bool))"},"t_mapping(t_address,t_mapping(t_uint256,t_bool))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(uint256 => bool))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_bool)"},"t_mapping(t_uint256,t_bool)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => bool)","numberOfBytes":"32","value":"t_bool"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"version":1,"kind":"user","methods":{"MESSENGER()":{"notice":"Legacy getter for messenger contract. Public getter is legacy and will be removed in the future. Use `messenger` instead."},"OTHER_BRIDGE()":{"notice":"Legacy getter for other bridge address. Public getter is legacy and will be removed in the future. Use `otherBridge` instead."},"bridgeERC721(address,address,uint256,uint32,bytes)":{"notice":"Initiates a bridge of an NFT to the caller's account on the other chain. Note that this function can only be called by EOAs. Smart contract wallets should use the `bridgeERC721To` function after ensuring that the recipient address on the remote chain exists. Also note that the current owner of the token on this chain must approve this contract to operate the NFT before it can be bridged. **WARNING**: Do not bridge an ERC721 that was originally deployed on Optimism. This bridge only supports ERC721s originally deployed on Ethereum. Users will need to wait for the one-week challenge period to elapse before their Optimism-native NFT can be refunded on L2."},"bridgeERC721To(address,address,address,uint256,uint32,bytes)":{"notice":"Initiates a bridge of an NFT to some recipient's account on the other chain. Note that the current owner of the token on this chain must approve this contract to operate the NFT before it can be bridged. **WARNING**: Do not bridge an ERC721 that was originally deployed on Optimism. This bridge only supports ERC721s originally deployed on Ethereum. Users will need to wait for the one-week challenge period to elapse before their Optimism-native NFT can be refunded on L2."},"constructor":{"notice":"Constructs the L1ERC721Bridge contract."},"deposits(address,address,uint256)":{"notice":"Mapping of L1 token to L2 token to ID to boolean, indicating if the given L1 token by ID was deposited for a given L2 token."},"finalizeBridgeERC721(address,address,address,address,uint256,bytes)":{"notice":"Completes an ERC721 bridge from the other domain and sends the ERC721 token to the recipient on this domain."},"initialize(address,address)":{"notice":"Initializes the contract."},"messenger()":{"notice":"Messenger contract on this domain."},"otherBridge()":{"notice":"Contract of the bridge on the other network."},"paused()":{"notice":"This function should return true if the contract is paused. On L1 this function will check the SuperchainConfig for its paused status. On L2 this function should be a no-op."},"superchainConfig()":{"notice":"Address of the SuperchainConfig contract."},"version()":{"notice":"Semantic version."}},"events":{"ERC721BridgeFinalized(address,address,address,address,uint256,bytes)":{"notice":"Emitted when an ERC721 bridge from the other network is finalized."},"ERC721BridgeInitiated(address,address,address,address,uint256,bytes)":{"notice":"Emitted when an ERC721 bridge to the other network is initiated."}},"notice":"The L1 ERC721 bridge is a contract which works together with the L2 ERC721 bridge to make it possible to transfer ERC721 tokens from Ethereum to Optimism. This contract acts as an escrow for ERC721 tokens deposited into L2."},"devdoc":{"version":1,"kind":"dev","methods":{"MESSENGER()":{"returns":{"_0":"Messenger contract on this domain."}},"OTHER_BRIDGE()":{"returns":{"_0":"Contract of the bridge on the other network."}},"bridgeERC721(address,address,uint256,uint32,bytes)":{"params":{"_extraData":"Optional data to forward to the other chain. Data supplied here will not be used to execute any code on the other chain and is only emitted as extra data for the convenience of off-chain tooling.","_localToken":"Address of the ERC721 on this domain.","_minGasLimit":"Minimum gas limit for the bridge message on the other domain.","_remoteToken":"Address of the ERC721 on the remote domain.","_tokenId":"Token ID to bridge."}},"bridgeERC721To(address,address,address,uint256,uint32,bytes)":{"params":{"_extraData":"Optional data to forward to the other chain. Data supplied here will not be used to execute any code on the other chain and is only emitted as extra data for the convenience of off-chain tooling.","_localToken":"Address of the ERC721 on this domain.","_minGasLimit":"Minimum gas limit for the bridge message on the other domain.","_remoteToken":"Address of the ERC721 on the remote domain.","_to":"Address to receive the token on the other domain.","_tokenId":"Token ID to bridge."}},"finalizeBridgeERC721(address,address,address,address,uint256,bytes)":{"params":{"_extraData":"Optional data to forward to L2. Data supplied here will not be used to execute any code on L2 and is only emitted as extra data for the convenience of off-chain tooling.","_from":"Address that triggered the bridge on the other domain.","_localToken":"Address of the ERC721 token on this domain.","_remoteToken":"Address of the ERC721 token on the other domain.","_to":"Address to receive the token on this domain.","_tokenId":"ID of the token being deposited."}},"initialize(address,address)":{"params":{"_messenger":"Contract of the CrossDomainMessenger on this network.","_superchainConfig":"Contract of the SuperchainConfig contract on this network."}},"paused()":{"returns":{"_0":"Whether or not the contract is paused."}}},"title":"L1ERC721Bridge"},"ast":{"absolutePath":"src/L1/L1ERC721Bridge.sol","id":85419,"exportedSymbols":{"Constants":[103096],"CrossDomainMessenger":[108888],"ERC721Bridge":[109118],"IERC721":[52560],"ISemver":[109417],"L1ERC721Bridge":[85418],"L2ERC721Bridge":[90723],"Predeploys":[104124],"StandardBridge":[111675],"SuperchainConfig":[88793]},"nodeType":"SourceUnit","src":"32:5389:131","nodes":[{"id":85147,"nodeType":"PragmaDirective","src":"32:23:131","nodes":[],"literals":["solidity","0.8",".15"]},{"id":85149,"nodeType":"ImportDirective","src":"57:62:131","nodes":[],"absolutePath":"src/universal/ERC721Bridge.sol","file":"src/universal/ERC721Bridge.sol","nameLocation":"-1:-1:-1","scope":85419,"sourceUnit":109119,"symbolAliases":[{"foreign":{"id":85148,"name":"ERC721Bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109118,"src":"66:12:131","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":85151,"nodeType":"ImportDirective","src":"120:75:131","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol","file":"@openzeppelin/contracts/token/ERC721/IERC721.sol","nameLocation":"-1:-1:-1","scope":85419,"sourceUnit":52561,"symbolAliases":[{"foreign":{"id":85150,"name":"IERC721","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52560,"src":"129:7:131","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":85153,"nodeType":"ImportDirective","src":"196:59:131","nodes":[],"absolutePath":"src/L2/L2ERC721Bridge.sol","file":"src/L2/L2ERC721Bridge.sol","nameLocation":"-1:-1:-1","scope":85419,"sourceUnit":90724,"symbolAliases":[{"foreign":{"id":85152,"name":"L2ERC721Bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90723,"src":"205:14:131","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":85155,"nodeType":"ImportDirective","src":"256:52:131","nodes":[],"absolutePath":"src/universal/ISemver.sol","file":"src/universal/ISemver.sol","nameLocation":"-1:-1:-1","scope":85419,"sourceUnit":109418,"symbolAliases":[{"foreign":{"id":85154,"name":"ISemver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109417,"src":"265:7:131","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":85157,"nodeType":"ImportDirective","src":"309:58:131","nodes":[],"absolutePath":"src/libraries/Predeploys.sol","file":"src/libraries/Predeploys.sol","nameLocation":"-1:-1:-1","scope":85419,"sourceUnit":104125,"symbolAliases":[{"foreign":{"id":85156,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"318:10:131","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":85159,"nodeType":"ImportDirective","src":"368:78:131","nodes":[],"absolutePath":"src/universal/CrossDomainMessenger.sol","file":"src/universal/CrossDomainMessenger.sol","nameLocation":"-1:-1:-1","scope":85419,"sourceUnit":108889,"symbolAliases":[{"foreign":{"id":85158,"name":"CrossDomainMessenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108888,"src":"377:20:131","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":85161,"nodeType":"ImportDirective","src":"447:66:131","nodes":[],"absolutePath":"src/universal/StandardBridge.sol","file":"src/universal/StandardBridge.sol","nameLocation":"-1:-1:-1","scope":85419,"sourceUnit":111676,"symbolAliases":[{"foreign":{"id":85160,"name":"StandardBridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111675,"src":"456:14:131","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":85163,"nodeType":"ImportDirective","src":"514:56:131","nodes":[],"absolutePath":"src/libraries/Constants.sol","file":"src/libraries/Constants.sol","nameLocation":"-1:-1:-1","scope":85419,"sourceUnit":103097,"symbolAliases":[{"foreign":{"id":85162,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103096,"src":"523:9:131","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":85165,"nodeType":"ImportDirective","src":"571:63:131","nodes":[],"absolutePath":"src/L1/SuperchainConfig.sol","file":"src/L1/SuperchainConfig.sol","nameLocation":"-1:-1:-1","scope":85419,"sourceUnit":88794,"symbolAliases":[{"foreign":{"id":85164,"name":"SuperchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":88793,"src":"580:16:131","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":85418,"nodeType":"ContractDefinition","src":"922:4498:131","nodes":[{"id":85179,"nodeType":"VariableDeclaration","src":"1134:80:131","nodes":[],"constant":false,"documentation":{"id":85171,"nodeType":"StructuredDocumentation","src":"977:152:131","text":"@notice Mapping of L1 token to L2 token to ID to boolean, indicating if the given L1 token\n by ID was deposited for a given L2 token."},"functionSelector":"5d93a3fc","mutability":"mutable","name":"deposits","nameLocation":"1206:8:131","scope":85418,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bool_$_$_$","typeString":"mapping(address => mapping(address => mapping(uint256 => bool)))"},"typeName":{"id":85178,"keyType":{"id":85172,"name":"address","nodeType":"ElementaryTypeName","src":"1142:7:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1134:64:131","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bool_$_$_$","typeString":"mapping(address => mapping(address => mapping(uint256 => bool)))"},"valueType":{"id":85177,"keyType":{"id":85173,"name":"address","nodeType":"ElementaryTypeName","src":"1161:7:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1153:44:131","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bool_$_$","typeString":"mapping(address => mapping(uint256 => bool))"},"valueType":{"id":85176,"keyType":{"id":85174,"name":"uint256","nodeType":"ElementaryTypeName","src":"1180:7:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"1172:24:131","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bool_$","typeString":"mapping(uint256 => bool)"},"valueType":{"id":85175,"name":"bool","nodeType":"ElementaryTypeName","src":"1191:4:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}}}},"visibility":"public"},{"id":85183,"nodeType":"VariableDeclaration","src":"1279:40:131","nodes":[],"constant":false,"documentation":{"id":85180,"nodeType":"StructuredDocumentation","src":"1221:53:131","text":"@notice Address of the SuperchainConfig contract."},"functionSelector":"35e80ab3","mutability":"mutable","name":"superchainConfig","nameLocation":"1303:16:131","scope":85418,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"},"typeName":{"id":85182,"nodeType":"UserDefinedTypeName","pathNode":{"id":85181,"name":"SuperchainConfig","nodeType":"IdentifierPath","referencedDeclaration":88793,"src":"1279:16:131"},"referencedDeclaration":88793,"src":"1279:16:131","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"visibility":"public"},{"id":85187,"nodeType":"VariableDeclaration","src":"1389:40:131","nodes":[],"baseFunctions":[109416],"constant":true,"documentation":{"id":85184,"nodeType":"StructuredDocumentation","src":"1326:58:131","text":"@notice Semantic version.\n @custom:semver 2.1.0"},"functionSelector":"54fd4d50","mutability":"constant","name":"version","nameLocation":"1412:7:131","scope":85418,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":85185,"name":"string","nodeType":"ElementaryTypeName","src":"1389:6:131","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"322e312e30","id":85186,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1422:7:131","typeDescriptions":{"typeIdentifier":"t_stringliteral_3bb4aeded157fe72f9bc813a9dc1bd69961c5b5f35dafc6dc601ab742eacac6b","typeString":"literal_string \"2.1.0\""},"value":"2.1.0"},"visibility":"public"},{"id":85209,"nodeType":"FunctionDefinition","src":"1492:155:131","nodes":[],"body":{"id":85208,"nodeType":"Block","src":"1521:126:131","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"hexValue":"30","id":85197,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1585:1:131","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":85196,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1577:7:131","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":85195,"name":"address","nodeType":"ElementaryTypeName","src":"1577:7:131","typeDescriptions":{}}},"id":85198,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1577:10:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":85194,"name":"CrossDomainMessenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108888,"src":"1556:20:131","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CrossDomainMessenger_$108888_$","typeString":"type(contract CrossDomainMessenger)"}},"id":85199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1556:32:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}},{"arguments":[{"arguments":[{"hexValue":"30","id":85203,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1634:1:131","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":85202,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1626:7:131","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":85201,"name":"address","nodeType":"ElementaryTypeName","src":"1626:7:131","typeDescriptions":{}}},"id":85204,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1626:10:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":85200,"name":"SuperchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":88793,"src":"1609:16:131","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SuperchainConfig_$88793_$","typeString":"type(contract SuperchainConfig)"}},"id":85205,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1609:28:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"},{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}],"id":85193,"name":"initialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85237,"src":"1531:10:131","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_CrossDomainMessenger_$108888_$_t_contract$_SuperchainConfig_$88793_$returns$__$","typeString":"function (contract CrossDomainMessenger,contract SuperchainConfig)"}},"id":85206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["_messenger","_superchainConfig"],"nodeType":"FunctionCall","src":"1531:109:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85207,"nodeType":"ExpressionStatement","src":"1531:109:131"}]},"documentation":{"id":85188,"nodeType":"StructuredDocumentation","src":"1436:51:131","text":"@notice Constructs the L1ERC721Bridge contract."},"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":85191,"kind":"baseConstructorSpecifier","modifierName":{"id":85190,"name":"ERC721Bridge","nodeType":"IdentifierPath","referencedDeclaration":109118,"src":"1506:12:131"},"nodeType":"ModifierInvocation","src":"1506:14:131"}],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":85189,"nodeType":"ParameterList","parameters":[],"src":"1503:2:131"},"returnParameters":{"id":85192,"nodeType":"ParameterList","parameters":[],"src":"1521:0:131"},"scope":85418,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":85237,"nodeType":"FunctionDefinition","src":"1869:318:131","nodes":[],"body":{"id":85236,"nodeType":"Block","src":"1977:210:131","nodes":[],"statements":[{"expression":{"id":85223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":85221,"name":"superchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85183,"src":"1987:16:131","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":85222,"name":"_superchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85216,"src":"2006:17:131","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"src":"1987:36:131","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"id":85224,"nodeType":"ExpressionStatement","src":"1987:36:131"},{"expression":{"arguments":[{"id":85226,"name":"_messenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85213,"src":"2079:10:131","typeDescriptions":{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}},{"arguments":[{"arguments":[{"expression":{"id":85230,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"2140:10:131","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Predeploys_$104124_$","typeString":"type(library Predeploys)"}},"id":85231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"L2_ERC721_BRIDGE","nodeType":"MemberAccess","referencedDeclaration":104012,"src":"2140:27:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":85229,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2132:8:131","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":85228,"name":"address","nodeType":"ElementaryTypeName","src":"2132:8:131","stateMutability":"payable","typeDescriptions":{}}},"id":85232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2132:36:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":85227,"name":"StandardBridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111675,"src":"2117:14:131","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StandardBridge_$111675_$","typeString":"type(contract StandardBridge)"}},"id":85233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2117:52:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_StandardBridge_$111675","typeString":"contract StandardBridge"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"},{"typeIdentifier":"t_contract$_StandardBridge_$111675","typeString":"contract StandardBridge"}],"id":85225,"name":"__ERC721Bridge_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108995,"src":"2033:19:131","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_CrossDomainMessenger_$108888_$_t_contract$_StandardBridge_$111675_$returns$__$","typeString":"function (contract CrossDomainMessenger,contract StandardBridge)"}},"id":85234,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["_messenger","_otherBridge"],"nodeType":"FunctionCall","src":"2033:147:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85235,"nodeType":"ExpressionStatement","src":"2033:147:131"}]},"documentation":{"id":85210,"nodeType":"StructuredDocumentation","src":"1653:211:131","text":"@notice Initializes the contract.\n @param _messenger Contract of the CrossDomainMessenger on this network.\n @param _superchainConfig Contract of the SuperchainConfig contract on this network."},"functionSelector":"485cc955","implemented":true,"kind":"function","modifiers":[{"id":85219,"kind":"modifierInvocation","modifierName":{"id":85218,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":49598,"src":"1965:11:131"},"nodeType":"ModifierInvocation","src":"1965:11:131"}],"name":"initialize","nameLocation":"1878:10:131","parameters":{"id":85217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85213,"mutability":"mutable","name":"_messenger","nameLocation":"1910:10:131","nodeType":"VariableDeclaration","scope":85237,"src":"1889:31:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"},"typeName":{"id":85212,"nodeType":"UserDefinedTypeName","pathNode":{"id":85211,"name":"CrossDomainMessenger","nodeType":"IdentifierPath","referencedDeclaration":108888,"src":"1889:20:131"},"referencedDeclaration":108888,"src":"1889:20:131","typeDescriptions":{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}},"visibility":"internal"},{"constant":false,"id":85216,"mutability":"mutable","name":"_superchainConfig","nameLocation":"1939:17:131","nodeType":"VariableDeclaration","scope":85237,"src":"1922:34:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"},"typeName":{"id":85215,"nodeType":"UserDefinedTypeName","pathNode":{"id":85214,"name":"SuperchainConfig","nodeType":"IdentifierPath","referencedDeclaration":88793,"src":"1922:16:131"},"referencedDeclaration":88793,"src":"1922:16:131","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"visibility":"internal"}],"src":"1888:69:131"},"returnParameters":{"id":85220,"nodeType":"ParameterList","parameters":[],"src":"1977:0:131"},"scope":85418,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":85249,"nodeType":"FunctionDefinition","src":"2226:103:131","nodes":[],"body":{"id":85248,"nodeType":"Block","src":"2280:49:131","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":85244,"name":"superchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85183,"src":"2297:16:131","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"id":85245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"paused","nodeType":"MemberAccess","referencedDeclaration":88707,"src":"2297:23:131","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bool_$","typeString":"function () view external returns (bool)"}},"id":85246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2297:25:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":85243,"id":85247,"nodeType":"Return","src":"2290:32:131"}]},"baseFunctions":[109024],"documentation":{"id":85238,"nodeType":"StructuredDocumentation","src":"2193:28:131","text":"@inheritdoc ERC721Bridge"},"functionSelector":"5c975abb","implemented":true,"kind":"function","modifiers":[],"name":"paused","nameLocation":"2235:6:131","overrides":{"id":85240,"nodeType":"OverrideSpecifier","overrides":[],"src":"2256:8:131"},"parameters":{"id":85239,"nodeType":"ParameterList","parameters":[],"src":"2241:2:131"},"returnParameters":{"id":85243,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85242,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":85249,"src":"2274:4:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":85241,"name":"bool","nodeType":"ElementaryTypeName","src":"2274:4:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2273:6:131"},"scope":85418,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":85330,"nodeType":"FunctionDefinition","src":"3096:1207:131","nodes":[],"body":{"id":85329,"nodeType":"Block","src":"3341:962:131","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":85271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":85268,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[85249],"referencedDeclaration":85249,"src":"3359:6:131","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":85269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3359:8:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":85270,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3371:5:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"3359:17:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c314552433732314272696467653a20706175736564","id":85272,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3378:24:131","typeDescriptions":{"typeIdentifier":"t_stringliteral_0547274687a86ca0a34590eabb05ad0a44aae82bbc5d30b7acda91288e349519","typeString":"literal_string \"L1ERC721Bridge: paused\""},"value":"L1ERC721Bridge: paused"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0547274687a86ca0a34590eabb05ad0a44aae82bbc5d30b7acda91288e349519","typeString":"literal_string \"L1ERC721Bridge: paused\""}],"id":85267,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3351:7:131","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":85273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3351:52:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85274,"nodeType":"ExpressionStatement","src":"3351:52:131"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":85281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":85276,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85252,"src":"3421:11:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":85279,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3444:4:131","typeDescriptions":{"typeIdentifier":"t_contract$_L1ERC721Bridge_$85418","typeString":"contract L1ERC721Bridge"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_L1ERC721Bridge_$85418","typeString":"contract L1ERC721Bridge"}],"id":85278,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3436:7:131","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":85277,"name":"address","nodeType":"ElementaryTypeName","src":"3436:7:131","typeDescriptions":{}}},"id":85280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3436:13:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3421:28:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c314552433732314272696467653a206c6f63616c20746f6b656e2063616e6e6f742062652073656c66","id":85282,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3451:44:131","typeDescriptions":{"typeIdentifier":"t_stringliteral_218d51cceb2e9e86022eea81b17e23e1e964bba3aa5268e422fe8d05e54eb832","typeString":"literal_string \"L1ERC721Bridge: local token cannot be self\""},"value":"L1ERC721Bridge: local token cannot be self"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_218d51cceb2e9e86022eea81b17e23e1e964bba3aa5268e422fe8d05e54eb832","typeString":"literal_string \"L1ERC721Bridge: local token cannot be self\""}],"id":85275,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3413:7:131","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":85283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3413:83:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85284,"nodeType":"ExpressionStatement","src":"3413:83:131"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":85294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":85286,"name":"deposits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85179,"src":"3620:8:131","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bool_$_$_$","typeString":"mapping(address => mapping(address => mapping(uint256 => bool)))"}},"id":85288,"indexExpression":{"id":85287,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85252,"src":"3629:11:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3620:21:131","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bool_$_$","typeString":"mapping(address => mapping(uint256 => bool))"}},"id":85290,"indexExpression":{"id":85289,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85254,"src":"3642:12:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3620:35:131","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bool_$","typeString":"mapping(uint256 => bool)"}},"id":85292,"indexExpression":{"id":85291,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85260,"src":"3656:8:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3620:45:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"74727565","id":85293,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3669:4:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"3620:53:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c314552433732314272696467653a20546f6b656e204944206973206e6f7420657363726f77656420696e20746865204c3120427269646765","id":85295,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3687:59:131","typeDescriptions":{"typeIdentifier":"t_stringliteral_bee7d98e66133cf40de344b202cc1df78b20213eed80aaf4210604281fdaa6af","typeString":"literal_string \"L1ERC721Bridge: Token ID is not escrowed in the L1 Bridge\""},"value":"L1ERC721Bridge: Token ID is not escrowed in the L1 Bridge"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bee7d98e66133cf40de344b202cc1df78b20213eed80aaf4210604281fdaa6af","typeString":"literal_string \"L1ERC721Bridge: Token ID is not escrowed in the L1 Bridge\""}],"id":85285,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3599:7:131","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":85296,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3599:157:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85297,"nodeType":"ExpressionStatement","src":"3599:157:131"},{"expression":{"id":85306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":85298,"name":"deposits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85179,"src":"3878:8:131","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bool_$_$_$","typeString":"mapping(address => mapping(address => mapping(uint256 => bool)))"}},"id":85302,"indexExpression":{"id":85299,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85252,"src":"3887:11:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3878:21:131","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bool_$_$","typeString":"mapping(address => mapping(uint256 => bool))"}},"id":85303,"indexExpression":{"id":85300,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85254,"src":"3900:12:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3878:35:131","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bool_$","typeString":"mapping(uint256 => bool)"}},"id":85304,"indexExpression":{"id":85301,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85260,"src":"3914:8:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3878:45:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":85305,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3926:5:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"3878:53:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":85307,"nodeType":"ExpressionStatement","src":"3878:53:131"},{"expression":{"arguments":[{"arguments":[{"id":85314,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4107:4:131","typeDescriptions":{"typeIdentifier":"t_contract$_L1ERC721Bridge_$85418","typeString":"contract L1ERC721Bridge"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_L1ERC721Bridge_$85418","typeString":"contract L1ERC721Bridge"}],"id":85313,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4099:7:131","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":85312,"name":"address","nodeType":"ElementaryTypeName","src":"4099:7:131","typeDescriptions":{}}},"id":85315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4099:13:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85316,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85258,"src":"4118:3:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85317,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85260,"src":"4132:8:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":85309,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85252,"src":"4061:11:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":85308,"name":"IERC721","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52560,"src":"4053:7:131","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC721_$52560_$","typeString":"type(contract IERC721)"}},"id":85310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4053:20:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC721_$52560","typeString":"contract IERC721"}},"id":85311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":52515,"src":"4053:37:131","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":85318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["from","to","tokenId"],"nodeType":"FunctionCall","src":"4053:90:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85319,"nodeType":"ExpressionStatement","src":"4053:90:131"},{"eventCall":{"arguments":[{"id":85321,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85252,"src":"4236:11:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85322,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85254,"src":"4249:12:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85323,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85256,"src":"4263:5:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85324,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85258,"src":"4270:3:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85325,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85260,"src":"4275:8:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":85326,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85262,"src":"4285:10:131","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":85320,"name":"ERC721BridgeFinalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108949,"src":"4214:21:131","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,address,uint256,bytes memory)"}},"id":85327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4214:82:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85328,"nodeType":"EmitStatement","src":"4209:87:131"}]},"documentation":{"id":85250,"nodeType":"StructuredDocumentation","src":"2335:756:131","text":"@notice Completes an ERC721 bridge from the other domain and sends the ERC721 token to the\n recipient on this domain.\n @param _localToken Address of the ERC721 token on this domain.\n @param _remoteToken Address of the ERC721 token on the other domain.\n @param _from Address that triggered the bridge on the other domain.\n @param _to Address to receive the token on this domain.\n @param _tokenId ID of the token being deposited.\n @param _extraData Optional data to forward to L2.\n Data supplied here will not be used to execute any code on L2 and is\n only emitted as extra data for the convenience of off-chain tooling."},"functionSelector":"761f4493","implemented":true,"kind":"function","modifiers":[{"id":85265,"kind":"modifierInvocation","modifierName":{"id":85264,"name":"onlyOtherBridge","nodeType":"IdentifierPath","referencedDeclaration":108974,"src":"3321:15:131"},"nodeType":"ModifierInvocation","src":"3321:15:131"}],"name":"finalizeBridgeERC721","nameLocation":"3105:20:131","parameters":{"id":85263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85252,"mutability":"mutable","name":"_localToken","nameLocation":"3143:11:131","nodeType":"VariableDeclaration","scope":85330,"src":"3135:19:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85251,"name":"address","nodeType":"ElementaryTypeName","src":"3135:7:131","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85254,"mutability":"mutable","name":"_remoteToken","nameLocation":"3172:12:131","nodeType":"VariableDeclaration","scope":85330,"src":"3164:20:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85253,"name":"address","nodeType":"ElementaryTypeName","src":"3164:7:131","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85256,"mutability":"mutable","name":"_from","nameLocation":"3202:5:131","nodeType":"VariableDeclaration","scope":85330,"src":"3194:13:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85255,"name":"address","nodeType":"ElementaryTypeName","src":"3194:7:131","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85258,"mutability":"mutable","name":"_to","nameLocation":"3225:3:131","nodeType":"VariableDeclaration","scope":85330,"src":"3217:11:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85257,"name":"address","nodeType":"ElementaryTypeName","src":"3217:7:131","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85260,"mutability":"mutable","name":"_tokenId","nameLocation":"3246:8:131","nodeType":"VariableDeclaration","scope":85330,"src":"3238:16:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85259,"name":"uint256","nodeType":"ElementaryTypeName","src":"3238:7:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":85262,"mutability":"mutable","name":"_extraData","nameLocation":"3279:10:131","nodeType":"VariableDeclaration","scope":85330,"src":"3264:25:131","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":85261,"name":"bytes","nodeType":"ElementaryTypeName","src":"3264:5:131","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3125:170:131"},"returnParameters":{"id":85266,"nodeType":"ParameterList","parameters":[],"src":"3341:0:131"},"scope":85418,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":85417,"nodeType":"FunctionDefinition","src":"4342:1076:131","nodes":[],"body":{"id":85416,"nodeType":"Block","src":"4610:808:131","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":85355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":85350,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85335,"src":"4628:12:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":85353,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4652:1:131","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":85352,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4644:7:131","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":85351,"name":"address","nodeType":"ElementaryTypeName","src":"4644:7:131","typeDescriptions":{}}},"id":85354,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4644:10:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4628:26:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c314552433732314272696467653a2072656d6f746520746f6b656e2063616e6e6f742062652061646472657373283029","id":85356,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4656:51:131","typeDescriptions":{"typeIdentifier":"t_stringliteral_14e51418e54e820a40fc2643b1167465f7abe28f86e3d4e777c562f03e420dd1","typeString":"literal_string \"L1ERC721Bridge: remote token cannot be address(0)\""},"value":"L1ERC721Bridge: remote token cannot be address(0)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_14e51418e54e820a40fc2643b1167465f7abe28f86e3d4e777c562f03e420dd1","typeString":"literal_string \"L1ERC721Bridge: remote token cannot be address(0)\""}],"id":85349,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4620:7:131","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":85357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4620:88:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85358,"nodeType":"ExpressionStatement","src":"4620:88:131"},{"assignments":[85360],"declarations":[{"constant":false,"id":85360,"mutability":"mutable","name":"message","nameLocation":"4811:7:131","nodeType":"VariableDeclaration","scope":85416,"src":"4798:20:131","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":85359,"name":"bytes","nodeType":"ElementaryTypeName","src":"4798:5:131","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":85373,"initialValue":{"arguments":[{"expression":{"expression":{"id":85363,"name":"L2ERC721Bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90723,"src":"4857:14:131","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_L2ERC721Bridge_$90723_$","typeString":"type(contract L2ERC721Bridge)"}},"id":85364,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"finalizeBridgeERC721","nodeType":"MemberAccess","referencedDeclaration":90622,"src":"4857:35:131","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function L2ERC721Bridge.finalizeBridgeERC721(address,address,address,address,uint256,bytes calldata)"}},"id":85365,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"4857:44:131","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":85366,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85335,"src":"4903:12:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85367,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85333,"src":"4917:11:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85368,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85337,"src":"4930:5:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85369,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85339,"src":"4937:3:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85370,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85341,"src":"4942:8:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":85371,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85345,"src":"4952:10:131","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":85361,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4821:3:131","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":85362,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"4821:22:131","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":85372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4821:151:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4798:174:131"},{"expression":{"id":85382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":85374,"name":"deposits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85179,"src":"5017:8:131","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bool_$_$_$","typeString":"mapping(address => mapping(address => mapping(uint256 => bool)))"}},"id":85378,"indexExpression":{"id":85375,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85333,"src":"5026:11:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5017:21:131","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bool_$_$","typeString":"mapping(address => mapping(uint256 => bool))"}},"id":85379,"indexExpression":{"id":85376,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85335,"src":"5039:12:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5017:35:131","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bool_$","typeString":"mapping(uint256 => bool)"}},"id":85380,"indexExpression":{"id":85377,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85341,"src":"5053:8:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5017:45:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":85381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5065:4:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"5017:52:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":85383,"nodeType":"ExpressionStatement","src":"5017:52:131"},{"expression":{"arguments":[{"id":85388,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85337,"src":"5121:5:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":85391,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5140:4:131","typeDescriptions":{"typeIdentifier":"t_contract$_L1ERC721Bridge_$85418","typeString":"contract L1ERC721Bridge"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_L1ERC721Bridge_$85418","typeString":"contract L1ERC721Bridge"}],"id":85390,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5132:7:131","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":85389,"name":"address","nodeType":"ElementaryTypeName","src":"5132:7:131","typeDescriptions":{}}},"id":85392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5132:13:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85393,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85341,"src":"5156:8:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":85385,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85333,"src":"5087:11:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":85384,"name":"IERC721","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52560,"src":"5079:7:131","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC721_$52560_$","typeString":"type(contract IERC721)"}},"id":85386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5079:20:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC721_$52560","typeString":"contract IERC721"}},"id":85387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":52525,"src":"5079:33:131","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":85394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["from","to","tokenId"],"nodeType":"FunctionCall","src":"5079:88:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85395,"nodeType":"ExpressionStatement","src":"5079:88:131"},{"expression":{"arguments":[{"arguments":[{"id":85401,"name":"otherBridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108914,"src":"5252:11:131","typeDescriptions":{"typeIdentifier":"t_contract$_StandardBridge_$111675","typeString":"contract StandardBridge"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_StandardBridge_$111675","typeString":"contract StandardBridge"}],"id":85400,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5244:7:131","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":85399,"name":"address","nodeType":"ElementaryTypeName","src":"5244:7:131","typeDescriptions":{}}},"id":85402,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5244:20:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85403,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85360,"src":"5276:7:131","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":85404,"name":"_minGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85343,"src":"5299:12:131","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":85396,"name":"messenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108910,"src":"5211:9:131","typeDescriptions":{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}},"id":85398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sendMessage","nodeType":"MemberAccess","referencedDeclaration":108520,"src":"5211:21:131","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$_t_uint32_$returns$__$","typeString":"function (address,bytes memory,uint32) payable external"}},"id":85405,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["_target","_message","_minGasLimit"],"nodeType":"FunctionCall","src":"5211:103:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85406,"nodeType":"ExpressionStatement","src":"5211:103:131"},{"eventCall":{"arguments":[{"id":85408,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85333,"src":"5351:11:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85409,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85335,"src":"5364:12:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85410,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85337,"src":"5378:5:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85411,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85339,"src":"5385:3:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85412,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85341,"src":"5390:8:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":85413,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85345,"src":"5400:10:131","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":85407,"name":"ERC721BridgeInitiated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108934,"src":"5329:21:131","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,address,uint256,bytes memory)"}},"id":85414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5329:82:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85415,"nodeType":"EmitStatement","src":"5324:87:131"}]},"baseFunctions":[109117],"documentation":{"id":85331,"nodeType":"StructuredDocumentation","src":"4309:28:131","text":"@inheritdoc ERC721Bridge"},"implemented":true,"kind":"function","modifiers":[],"name":"_initiateBridgeERC721","nameLocation":"4351:21:131","overrides":{"id":85347,"nodeType":"OverrideSpecifier","overrides":[],"src":"4597:8:131"},"parameters":{"id":85346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85333,"mutability":"mutable","name":"_localToken","nameLocation":"4390:11:131","nodeType":"VariableDeclaration","scope":85417,"src":"4382:19:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85332,"name":"address","nodeType":"ElementaryTypeName","src":"4382:7:131","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85335,"mutability":"mutable","name":"_remoteToken","nameLocation":"4419:12:131","nodeType":"VariableDeclaration","scope":85417,"src":"4411:20:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85334,"name":"address","nodeType":"ElementaryTypeName","src":"4411:7:131","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85337,"mutability":"mutable","name":"_from","nameLocation":"4449:5:131","nodeType":"VariableDeclaration","scope":85417,"src":"4441:13:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85336,"name":"address","nodeType":"ElementaryTypeName","src":"4441:7:131","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85339,"mutability":"mutable","name":"_to","nameLocation":"4472:3:131","nodeType":"VariableDeclaration","scope":85417,"src":"4464:11:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85338,"name":"address","nodeType":"ElementaryTypeName","src":"4464:7:131","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85341,"mutability":"mutable","name":"_tokenId","nameLocation":"4493:8:131","nodeType":"VariableDeclaration","scope":85417,"src":"4485:16:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85340,"name":"uint256","nodeType":"ElementaryTypeName","src":"4485:7:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":85343,"mutability":"mutable","name":"_minGasLimit","nameLocation":"4518:12:131","nodeType":"VariableDeclaration","scope":85417,"src":"4511:19:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":85342,"name":"uint32","nodeType":"ElementaryTypeName","src":"4511:6:131","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":85345,"mutability":"mutable","name":"_extraData","nameLocation":"4555:10:131","nodeType":"VariableDeclaration","scope":85417,"src":"4540:25:131","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":85344,"name":"bytes","nodeType":"ElementaryTypeName","src":"4540:5:131","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4372:199:131"},"returnParameters":{"id":85348,"nodeType":"ParameterList","parameters":[],"src":"4610:0:131"},"scope":85418,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":85167,"name":"ERC721Bridge","nodeType":"IdentifierPath","referencedDeclaration":109118,"src":"949:12:131"},"id":85168,"nodeType":"InheritanceSpecifier","src":"949:12:131"},{"baseName":{"id":85169,"name":"ISemver","nodeType":"IdentifierPath","referencedDeclaration":109417,"src":"963:7:131"},"id":85170,"nodeType":"InheritanceSpecifier","src":"963:7:131"}],"canonicalName":"L1ERC721Bridge","contractDependencies":[],"contractKind":"contract","documentation":{"id":85166,"nodeType":"StructuredDocumentation","src":"636:286:131","text":"@title L1ERC721Bridge\n @notice The L1 ERC721 bridge is a contract which works together with the L2 ERC721 bridge to\n make it possible to transfer ERC721 tokens from Ethereum to Optimism. This contract\n acts as an escrow for ERC721 tokens deposited into L2."},"fullyImplemented":true,"linearizedBaseContracts":[85418,109417,109118,49678],"name":"L1ERC721Bridge","nameLocation":"931:14:131","scope":85419,"usedErrors":[]}],"license":"MIT"},"id":131} \ No newline at end of file diff --git a/packages/sdk/src/forge-artifacts/L1StandardBridge.json b/packages/sdk/src/forge-artifacts/L1StandardBridge.json deleted file mode 100644 index 41a38e7d7097..000000000000 --- a/packages/sdk/src/forge-artifacts/L1StandardBridge.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"MESSENGER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract CrossDomainMessenger"}],"stateMutability":"view"},{"type":"function","name":"OTHER_BRIDGE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract StandardBridge"}],"stateMutability":"view"},{"type":"function","name":"bridgeERC20","inputs":[{"name":"_localToken","type":"address","internalType":"address"},{"name":"_remoteToken","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"},{"name":"_minGasLimit","type":"uint32","internalType":"uint32"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"bridgeERC20To","inputs":[{"name":"_localToken","type":"address","internalType":"address"},{"name":"_remoteToken","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"},{"name":"_minGasLimit","type":"uint32","internalType":"uint32"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"bridgeETH","inputs":[{"name":"_minGasLimit","type":"uint32","internalType":"uint32"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"bridgeETHTo","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_minGasLimit","type":"uint32","internalType":"uint32"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"depositERC20","inputs":[{"name":"_l1Token","type":"address","internalType":"address"},{"name":"_l2Token","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"},{"name":"_minGasLimit","type":"uint32","internalType":"uint32"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"depositERC20To","inputs":[{"name":"_l1Token","type":"address","internalType":"address"},{"name":"_l2Token","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"},{"name":"_minGasLimit","type":"uint32","internalType":"uint32"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"depositETH","inputs":[{"name":"_minGasLimit","type":"uint32","internalType":"uint32"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"depositETHTo","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_minGasLimit","type":"uint32","internalType":"uint32"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"deposits","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"finalizeBridgeERC20","inputs":[{"name":"_localToken","type":"address","internalType":"address"},{"name":"_remoteToken","type":"address","internalType":"address"},{"name":"_from","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"finalizeBridgeETH","inputs":[{"name":"_from","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"finalizeERC20Withdrawal","inputs":[{"name":"_l1Token","type":"address","internalType":"address"},{"name":"_l2Token","type":"address","internalType":"address"},{"name":"_from","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"finalizeETHWithdrawal","inputs":[{"name":"_from","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"initialize","inputs":[{"name":"_messenger","type":"address","internalType":"contract CrossDomainMessenger"},{"name":"_superchainConfig","type":"address","internalType":"contract SuperchainConfig"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"l2TokenBridge","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"messenger","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract CrossDomainMessenger"}],"stateMutability":"view"},{"type":"function","name":"otherBridge","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract StandardBridge"}],"stateMutability":"view"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"superchainConfig","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract SuperchainConfig"}],"stateMutability":"view"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"event","name":"ERC20BridgeFinalized","inputs":[{"name":"localToken","type":"address","indexed":true,"internalType":"address"},{"name":"remoteToken","type":"address","indexed":true,"internalType":"address"},{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"extraData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ERC20BridgeInitiated","inputs":[{"name":"localToken","type":"address","indexed":true,"internalType":"address"},{"name":"remoteToken","type":"address","indexed":true,"internalType":"address"},{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"extraData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ERC20DepositInitiated","inputs":[{"name":"l1Token","type":"address","indexed":true,"internalType":"address"},{"name":"l2Token","type":"address","indexed":true,"internalType":"address"},{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"extraData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ERC20WithdrawalFinalized","inputs":[{"name":"l1Token","type":"address","indexed":true,"internalType":"address"},{"name":"l2Token","type":"address","indexed":true,"internalType":"address"},{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"extraData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ETHBridgeFinalized","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"extraData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ETHBridgeInitiated","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"extraData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ETHDepositInitiated","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"extraData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ETHWithdrawalFinalized","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"extraData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false}],"bytecode":{"object":"0x60806040523480156200001157600080fd5b506200001f60008062000025565b62000234565b600054610100900460ff1615808015620000465750600054600160ff909116105b8062000076575062000063306200018a60201b620005511760201c565b15801562000076575060005460ff166001145b620000df5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000103576000805461ff0019166101001790555b603280546001600160a01b0319166001600160a01b0384161790556200013e8373420000000000000000000000000000000000001062000199565b801562000185576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b600054610100900460ff16620002065760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d6565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612c4d80620002446000396000f3fe6080604052600436106101795760003560e01c80637f46ddb2116100cb578063927ede2d1161007f578063b1a1a88211610059578063b1a1a882146104fe578063c89701a214610511578063e11013dd1461053e57600080fd5b8063927ede2d146104a05780639a2ac6d5146104cb578063a9f9e675146104de57600080fd5b806387087623116100b0578063870876231461043a5780638f601f661461045a57806391c49bf8146103ef57600080fd5b80637f46ddb2146103ef578063838b25201461041a57600080fd5b80633cb747bf1161012d57806354fd4d501161010757806354fd4d501461035457806358a997f6146103aa5780635c975abb146103ca57600080fd5b80633cb747bf146102e7578063485cc95514610314578063540abf731461033457600080fd5b80631532ec341161015e5780631532ec341461026a5780631635f5fd1461027d57806335e80ab31461029057600080fd5b80630166a07a1461023757806309fc88431461025757600080fd5b3661023257333b15610212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610230333362030d406040518060200160405280600081525061056d565b005b600080fd5b34801561024357600080fd5b506102306102523660046126b1565b610580565b610230610265366004612762565b61099a565b6102306102783660046127b5565b610a71565b61023061028b3660046127b5565b610a85565b34801561029c57600080fd5b506032546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102f357600080fd5b506003546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032057600080fd5b5061023061032f366004612828565b610f4e565b34801561034057600080fd5b5061023061034f366004612861565b611137565b34801561036057600080fd5b5061039d6040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516102de919061294e565b3480156103b657600080fd5b506102306103c5366004612961565b61117c565b3480156103d657600080fd5b506103df611250565b60405190151581526020016102de565b3480156103fb57600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102bd565b34801561042657600080fd5b50610230610435366004612861565b6112e9565b34801561044657600080fd5b50610230610455366004612961565b61132e565b34801561046657600080fd5b50610492610475366004612828565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102de565b3480156104ac57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102bd565b6102306104d93660046129e4565b611402565b3480156104ea57600080fd5b506102306104f93660046126b1565b611444565b61023061050c366004612762565b611453565b34801561051d57600080fd5b506004546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b61023061054c3660046129e4565b611524565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61057a8484348585611567565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610653575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063b9190612a47565b73ffffffffffffffffffffffffffffffffffffffff16145b610705576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610209565b61070d611250565b15610774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610209565b61077d87611731565b156108cb5761078c8787611793565b61083e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610209565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108ae57600080fd5b505af11580156108c2573d6000803e3d6000fd5b5050505061094d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610909908490612a93565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c168352939052919091209190915561094d9085856118b3565b610991878787878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061198792505050565b50505050505050565b333b15610a29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610a6c3333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061156792505050565b505050565b610a7e8585858585610a85565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b58575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b409190612a47565b73ffffffffffffffffffffffffffffffffffffffff16145b610c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610209565b610c12611250565b15610c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610209565b823414610d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610209565b3073ffffffffffffffffffffffffffffffffffffffff851603610dad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610209565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610e58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610209565b610e9a85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a1592505050565b6000610eb7855a8660405180602001604052806000815250611a88565b905080610f46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610209565b505050505050565b600054610100900460ff1615808015610f6e5750600054600160ff909116105b80610f885750303b158015610f88575060005460ff166001145b611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610209565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561107257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556110d083734200000000000000000000000000000000000010611aa2565b8015610a6c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b61099187873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8c92505050565b333b1561120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610f4686863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eb792505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e49190612aaa565b905090565b61099187873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eb792505050565b333b156113bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610f4686863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8c92505050565b61057a33858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061056d92505050565b61099187878787878787610580565b333b156114e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610a6c33338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061056d92505050565b61057a3385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061156792505050565b8234146115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610209565b61160285858584611ec6565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611665908b908b9086908a90602401612acc565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526116f892918890600401612b15565b6000604051808303818588803b15801561171157600080fd5b505af1158015611725573d6000803e3d6000fd5b50505050505050505050565b600061175d827f1d1d8b6300000000000000000000000000000000000000000000000000000000611f39565b8061178d575061178d827fec4fc8e300000000000000000000000000000000000000000000000000000000611f39565b92915050565b60006117bf837f1d1d8b6300000000000000000000000000000000000000000000000000000000611f39565b15611868578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118339190612a47565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905061178d565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180f573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610a6c9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611f5c565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b38686866040516119ff93929190612b5a565b60405180910390a4610f46868686868686612068565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611a74929190612b98565b60405180910390a361057a848484846120f0565b600080600080845160208601878a8af19695505050505050565b600054610100900460ff16611b39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610209565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b611b9587611731565b15611ce357611ba48787611793565b611c56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610209565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611cc657600080fd5b505af1158015611cda573d6000803e3d6000fd5b50505050611d77565b611d0573ffffffffffffffffffffffffffffffffffffffff881686308661215d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611d43908490612bb1565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611d858787878787866121bb565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611de9908b908d908c908c908c908b90602401612bc9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611e7c92918790600401612b15565b600060405180830381600087803b158015611e9657600080fd5b505af1158015611eaa573d6000803e3d6000fd5b5050505050505050505050565b61099187878787878787611b8c565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f238484604051611f25929190612b98565b60405180910390a361057a84848484612249565b6000611f44836122a8565b8015611f555750611f55838361230c565b9392505050565b6000611fbe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166123db9092919063ffffffff16565b805190915015610a6c5780806020019051810190611fdc9190612aaa565b610a6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610209565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516120e093929190612b5a565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161214f929190612b98565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261057a9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611905565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161223393929190612b5a565b60405180910390a4610f468686868686866123f2565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161214f929190612b98565b60006122d4827f01ffc9a70000000000000000000000000000000000000000000000000000000061230c565b801561178d5750612305827fffffffff0000000000000000000000000000000000000000000000000000000061230c565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156123c4575060208210155b80156123d05750600081115b979650505050505050565b60606123ea848460008561246a565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516120e093929190612b5a565b6060824710156124fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610209565b73ffffffffffffffffffffffffffffffffffffffff85163b61257a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610209565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516125a39190612c24565b60006040518083038185875af1925050503d80600081146125e0576040519150601f19603f3d011682016040523d82523d6000602084013e6125e5565b606091505b50915091506123d0828286606083156125ff575081611f55565b82511561260f5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610209919061294e565b73ffffffffffffffffffffffffffffffffffffffff8116811461266557600080fd5b50565b60008083601f84011261267a57600080fd5b50813567ffffffffffffffff81111561269257600080fd5b6020830191508360208285010111156126aa57600080fd5b9250929050565b600080600080600080600060c0888a0312156126cc57600080fd5b87356126d781612643565b965060208801356126e781612643565b955060408801356126f781612643565b9450606088013561270781612643565b93506080880135925060a088013567ffffffffffffffff81111561272a57600080fd5b6127368a828b01612668565b989b979a50959850939692959293505050565b803563ffffffff8116811461275d57600080fd5b919050565b60008060006040848603121561277757600080fd5b61278084612749565b9250602084013567ffffffffffffffff81111561279c57600080fd5b6127a886828701612668565b9497909650939450505050565b6000806000806000608086880312156127cd57600080fd5b85356127d881612643565b945060208601356127e881612643565b935060408601359250606086013567ffffffffffffffff81111561280b57600080fd5b61281788828901612668565b969995985093965092949392505050565b6000806040838503121561283b57600080fd5b823561284681612643565b9150602083013561285681612643565b809150509250929050565b600080600080600080600060c0888a03121561287c57600080fd5b873561288781612643565b9650602088013561289781612643565b955060408801356128a781612643565b9450606088013593506128bc60808901612749565b925060a088013567ffffffffffffffff81111561272a57600080fd5b60005b838110156128f35781810151838201526020016128db565b8381111561057a5750506000910152565b6000815180845261291c8160208601602086016128d8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f556020830184612904565b60008060008060008060a0878903121561297a57600080fd5b863561298581612643565b9550602087013561299581612643565b9450604087013593506129aa60608801612749565b9250608087013567ffffffffffffffff8111156129c657600080fd5b6129d289828a01612668565b979a9699509497509295939492505050565b600080600080606085870312156129fa57600080fd5b8435612a0581612643565b9350612a1360208601612749565b9250604085013567ffffffffffffffff811115612a2f57600080fd5b612a3b87828801612668565b95989497509550505050565b600060208284031215612a5957600080fd5b8151611f5581612643565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612aa557612aa5612a64565b500390565b600060208284031215612abc57600080fd5b81518015158114611f5557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612b0b6080830184612904565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612b446060830185612904565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612b8f6060830184612904565b95945050505050565b8281526040602082015260006123ea6040830184612904565b60008219821115612bc457612bc4612a64565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612c1860c0830184612904565b98975050505050505050565b60008251612c368184602087016128d8565b919091019291505056fea164736f6c634300080f000a","sourceMap":"1209:12690:132:-:0;;;3691:157;;;;;;;;;-1:-1:-1;3732:109:132::1;3786:1;::::0;3732:10:::1;:109::i;:::-;1209:12690:::0;;4055:322;3100:19:43;3123:13;;;;;;3122:14;;3168:34;;;;-1:-1:-1;3186:12:43;;3201:1;3186:12;;;;:16;3168:34;3167:97;;;;3209:33;3236:4;3209:18;;;;;:33;;:::i;:::-;3208:34;:55;;;;-1:-1:-1;3246:12:43;;;;;:17;3208:55;3146:190;;;;-1:-1:-1;;;3146:190:43;;216:2:357;3146:190:43;;;198:21:357;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:357;;;338:44;399:19;;3146:190:43;;;;;;;;;3346:12;:16;;-1:-1:-1;;3346:16:43;3361:1;3346:16;;;3372:65;;;;3406:13;:20;;-1:-1:-1;;3406:20:43;;;;;3372:65;4173:16:132::1;:36:::0;;-1:-1:-1;;;;;;4173:36:132::1;-1:-1:-1::0;;;;;4173:36:132;::::1;;::::0;;4219:151:::1;4267:10:::0;635:42:199::1;4219:21:132;:151::i;:::-;3461:14:43::0;3457:99;;;3507:5;3491:21;;-1:-1:-1;;3491:21:43;;;3531:14;;-1:-1:-1;581:36:357;;3531:14:43;;569:2:357;554:18;3531:14:43;;;;;;;3457:99;3090:472;4055:322:132;;:::o;1175:320:59:-;-1:-1:-1;;;;;1465:19:59;;:23;;;1175:320::o;5373:236:235:-;4888:13:43;;;;;;;4880:69;;;;-1:-1:-1;;;4880:69:43;;830:2:357;4880:69:43;;;812:21:357;869:2;849:18;;;842:30;908:34;888:18;;;881:62;-1:-1:-1;;;959:18:357;;;952:41;1010:19;;4880:69:43;628:407:357;4880:69:43;5544:9:235::1;:22:::0;;-1:-1:-1;;;;;5544:22:235;;::::1;-1:-1:-1::0;;;;;;5544:22:235;;::::1;;::::0;;;5576:11:::1;:26:::0;;;;;::::1;::::0;::::1;;::::0;;5373:236::o;628:407:357:-;1209:12690:132;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101795760003560e01c80637f46ddb2116100cb578063927ede2d1161007f578063b1a1a88211610059578063b1a1a882146104fe578063c89701a214610511578063e11013dd1461053e57600080fd5b8063927ede2d146104a05780639a2ac6d5146104cb578063a9f9e675146104de57600080fd5b806387087623116100b0578063870876231461043a5780638f601f661461045a57806391c49bf8146103ef57600080fd5b80637f46ddb2146103ef578063838b25201461041a57600080fd5b80633cb747bf1161012d57806354fd4d501161010757806354fd4d501461035457806358a997f6146103aa5780635c975abb146103ca57600080fd5b80633cb747bf146102e7578063485cc95514610314578063540abf731461033457600080fd5b80631532ec341161015e5780631532ec341461026a5780631635f5fd1461027d57806335e80ab31461029057600080fd5b80630166a07a1461023757806309fc88431461025757600080fd5b3661023257333b15610212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610230333362030d406040518060200160405280600081525061056d565b005b600080fd5b34801561024357600080fd5b506102306102523660046126b1565b610580565b610230610265366004612762565b61099a565b6102306102783660046127b5565b610a71565b61023061028b3660046127b5565b610a85565b34801561029c57600080fd5b506032546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102f357600080fd5b506003546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032057600080fd5b5061023061032f366004612828565b610f4e565b34801561034057600080fd5b5061023061034f366004612861565b611137565b34801561036057600080fd5b5061039d6040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516102de919061294e565b3480156103b657600080fd5b506102306103c5366004612961565b61117c565b3480156103d657600080fd5b506103df611250565b60405190151581526020016102de565b3480156103fb57600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102bd565b34801561042657600080fd5b50610230610435366004612861565b6112e9565b34801561044657600080fd5b50610230610455366004612961565b61132e565b34801561046657600080fd5b50610492610475366004612828565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102de565b3480156104ac57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102bd565b6102306104d93660046129e4565b611402565b3480156104ea57600080fd5b506102306104f93660046126b1565b611444565b61023061050c366004612762565b611453565b34801561051d57600080fd5b506004546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b61023061054c3660046129e4565b611524565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61057a8484348585611567565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610653575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063b9190612a47565b73ffffffffffffffffffffffffffffffffffffffff16145b610705576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610209565b61070d611250565b15610774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610209565b61077d87611731565b156108cb5761078c8787611793565b61083e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610209565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108ae57600080fd5b505af11580156108c2573d6000803e3d6000fd5b5050505061094d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610909908490612a93565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c168352939052919091209190915561094d9085856118b3565b610991878787878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061198792505050565b50505050505050565b333b15610a29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610a6c3333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061156792505050565b505050565b610a7e8585858585610a85565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b58575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b409190612a47565b73ffffffffffffffffffffffffffffffffffffffff16145b610c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610209565b610c12611250565b15610c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610209565b823414610d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610209565b3073ffffffffffffffffffffffffffffffffffffffff851603610dad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610209565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610e58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610209565b610e9a85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a1592505050565b6000610eb7855a8660405180602001604052806000815250611a88565b905080610f46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610209565b505050505050565b600054610100900460ff1615808015610f6e5750600054600160ff909116105b80610f885750303b158015610f88575060005460ff166001145b611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610209565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561107257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556110d083734200000000000000000000000000000000000010611aa2565b8015610a6c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b61099187873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8c92505050565b333b1561120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610f4686863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eb792505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e49190612aaa565b905090565b61099187873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eb792505050565b333b156113bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610f4686863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8c92505050565b61057a33858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061056d92505050565b61099187878787878787610580565b333b156114e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610a6c33338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061056d92505050565b61057a3385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061156792505050565b8234146115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610209565b61160285858584611ec6565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611665908b908b9086908a90602401612acc565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526116f892918890600401612b15565b6000604051808303818588803b15801561171157600080fd5b505af1158015611725573d6000803e3d6000fd5b50505050505050505050565b600061175d827f1d1d8b6300000000000000000000000000000000000000000000000000000000611f39565b8061178d575061178d827fec4fc8e300000000000000000000000000000000000000000000000000000000611f39565b92915050565b60006117bf837f1d1d8b6300000000000000000000000000000000000000000000000000000000611f39565b15611868578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118339190612a47565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905061178d565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180f573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610a6c9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611f5c565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b38686866040516119ff93929190612b5a565b60405180910390a4610f46868686868686612068565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611a74929190612b98565b60405180910390a361057a848484846120f0565b600080600080845160208601878a8af19695505050505050565b600054610100900460ff16611b39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610209565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b611b9587611731565b15611ce357611ba48787611793565b611c56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610209565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611cc657600080fd5b505af1158015611cda573d6000803e3d6000fd5b50505050611d77565b611d0573ffffffffffffffffffffffffffffffffffffffff881686308661215d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611d43908490612bb1565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611d858787878787866121bb565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611de9908b908d908c908c908c908b90602401612bc9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611e7c92918790600401612b15565b600060405180830381600087803b158015611e9657600080fd5b505af1158015611eaa573d6000803e3d6000fd5b5050505050505050505050565b61099187878787878787611b8c565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f238484604051611f25929190612b98565b60405180910390a361057a84848484612249565b6000611f44836122a8565b8015611f555750611f55838361230c565b9392505050565b6000611fbe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166123db9092919063ffffffff16565b805190915015610a6c5780806020019051810190611fdc9190612aaa565b610a6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610209565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516120e093929190612b5a565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161214f929190612b98565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261057a9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611905565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161223393929190612b5a565b60405180910390a4610f468686868686866123f2565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161214f929190612b98565b60006122d4827f01ffc9a70000000000000000000000000000000000000000000000000000000061230c565b801561178d5750612305827fffffffff0000000000000000000000000000000000000000000000000000000061230c565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156123c4575060208210155b80156123d05750600081115b979650505050505050565b60606123ea848460008561246a565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516120e093929190612b5a565b6060824710156124fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610209565b73ffffffffffffffffffffffffffffffffffffffff85163b61257a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610209565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516125a39190612c24565b60006040518083038185875af1925050503d80600081146125e0576040519150601f19603f3d011682016040523d82523d6000602084013e6125e5565b606091505b50915091506123d0828286606083156125ff575081611f55565b82511561260f5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610209919061294e565b73ffffffffffffffffffffffffffffffffffffffff8116811461266557600080fd5b50565b60008083601f84011261267a57600080fd5b50813567ffffffffffffffff81111561269257600080fd5b6020830191508360208285010111156126aa57600080fd5b9250929050565b600080600080600080600060c0888a0312156126cc57600080fd5b87356126d781612643565b965060208801356126e781612643565b955060408801356126f781612643565b9450606088013561270781612643565b93506080880135925060a088013567ffffffffffffffff81111561272a57600080fd5b6127368a828b01612668565b989b979a50959850939692959293505050565b803563ffffffff8116811461275d57600080fd5b919050565b60008060006040848603121561277757600080fd5b61278084612749565b9250602084013567ffffffffffffffff81111561279c57600080fd5b6127a886828701612668565b9497909650939450505050565b6000806000806000608086880312156127cd57600080fd5b85356127d881612643565b945060208601356127e881612643565b935060408601359250606086013567ffffffffffffffff81111561280b57600080fd5b61281788828901612668565b969995985093965092949392505050565b6000806040838503121561283b57600080fd5b823561284681612643565b9150602083013561285681612643565b809150509250929050565b600080600080600080600060c0888a03121561287c57600080fd5b873561288781612643565b9650602088013561289781612643565b955060408801356128a781612643565b9450606088013593506128bc60808901612749565b925060a088013567ffffffffffffffff81111561272a57600080fd5b60005b838110156128f35781810151838201526020016128db565b8381111561057a5750506000910152565b6000815180845261291c8160208601602086016128d8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f556020830184612904565b60008060008060008060a0878903121561297a57600080fd5b863561298581612643565b9550602087013561299581612643565b9450604087013593506129aa60608801612749565b9250608087013567ffffffffffffffff8111156129c657600080fd5b6129d289828a01612668565b979a9699509497509295939492505050565b600080600080606085870312156129fa57600080fd5b8435612a0581612643565b9350612a1360208601612749565b9250604085013567ffffffffffffffff811115612a2f57600080fd5b612a3b87828801612668565b95989497509550505050565b600060208284031215612a5957600080fd5b8151611f5581612643565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612aa557612aa5612a64565b500390565b600060208284031215612abc57600080fd5b81518015158114611f5557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612b0b6080830184612904565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612b446060830185612904565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612b8f6060830184612904565b95945050505050565b8281526040602082015260006123ea6040830184612904565b60008219821115612bc457612bc4612a64565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612c1860c0830184612904565b98975050505050505050565b60008251612c368184602087016128d8565b919091019291505056fea164736f6c634300080f000a","sourceMap":"1209:12690:132:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4741:10:235;1465:19:59;:23;4713:99:235;;;;;;;216:2:357;4713:99:235;;;198:21:357;255:2;235:18;;;228:30;294:34;274:18;;;267:62;365:25;345:18;;;338:53;408:19;;4713:99:235;;;;;;;;;4658:81:132::1;4678:10;4690;1343:7:235;4729:9:132;;;;;;;;;;;::::0;4658:19:::1;:81::i;:::-;1209:12690:::0;;;;;12867:1084:235;;;;;;;;;;-1:-1:-1;12867:1084:235;;;;;:::i;:::-;;:::i;7253:186::-;;;;;;:::i;:::-;;:::i;8758:245:132:-;;;;;;:::i;:::-;;:::i;11233:902:235:-;;;;;;:::i;:::-;;:::i;3586:40:132:-;;;;;;;;;;-1:-1:-1;3586:40:132;;;;;;;;;;;3607:42:357;3595:55;;;3577:74;;3565:2;3550:18;3586:40:132;;;;;;;;1893:37:235;;;;;;;;;;-1:-1:-1;1893:37:235;;;;;;;;4055:322:132;;;;;;;;;;-1:-1:-1;4055:322:132;;;;;:::i;:::-;;:::i;10320:349:235:-;;;;;;;;;;-1:-1:-1;10320:349:235;;;;;:::i;:::-;;:::i;3481:40:132:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7066:339::-;;;;;;;;;;-1:-1:-1;7066:339:132;;;;;:::i;:::-;;:::i;4418:103::-;;;;;;;;;;;;;:::i;:::-;;;7155:14:357;;7148:22;7130:41;;7118:2;7103:18;4418:103:132;6990:187:357;6369:98:235;;;;;;;;;;-1:-1:-1;6449:11:235;;;;6369:98;;8106:339:132;;;;;;;;;;-1:-1:-1;8106:339:132;;;;;:::i;:::-;;:::i;9277:349:235:-;;;;;;;;;;-1:-1:-1;9277:349:235;;;;;:::i;:::-;;:::i;1739:63::-;;;;;;;;;;-1:-1:-1;1739:63:235;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;7985:25:357;;;7973:2;7958:18;1739:63:235;7839:177:357;6024:99:235;;;;;;;;;;-1:-1:-1;6107:9:235;;;;6024:99;;6242:179:132;;;;;;:::i;:::-;;:::i;9453:305::-;;;;;;;;;;-1:-1:-1;9453:305:132;;;;;:::i;:::-;;:::i;5183:179::-;;;;;;:::i;:::-;;:::i;2028:33:235:-;;;;;;;;;;-1:-1:-1;2028:33:235;;;;;;;;8450:186;;;;;;:::i;:::-;;:::i;1175:320:59:-;1465:19;;;:23;;;1175:320::o;10356:196:132:-;10478:67;10497:5;10504:3;10509:9;10520:12;10534:10;10478:18;:67::i;:::-;10356:196;;;;:::o;12867:1084:235:-;5004:9;;;;4982:10;:32;:92;;;;-1:-1:-1;5062:11:235;;;5018:9;;:32;;;;;;;;5062:11;;;;;5018:9;;;;;:30;;:32;;;;;;;;;;;;:9;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;4982:92;4961:204;;;;;;;9331:2:357;4961:204:235;;;9313:21:357;9370:2;9350:18;;;9343:30;9409:34;9389:18;;;9382:62;9480:34;9460:18;;;9453:62;9552:3;9531:19;;;9524:32;9573:19;;4961:204:235;9129:469:357;4961:204:235;13126:8:::1;:6;:8::i;:::-;:17;13118:52;;;::::0;::::1;::::0;;9805:2:357;13118:52:235::1;::::0;::::1;9787:21:357::0;9844:2;9824:18;;;9817:30;9883:24;9863:18;;;9856:52;9925:18;;13118:52:235::1;9603:346:357::0;13118:52:235::1;13184:37;13209:11;13184:24;:37::i;:::-;13180:489;;;13262:46;13282:11;13295:12;13262:19;:46::i;:::-;13237:179;;;::::0;::::1;::::0;;10156:2:357;13237:179:235::1;::::0;::::1;10138:21:357::0;10195:2;10175:18;;;10168:30;10234:34;10214:18;;;10207:62;10305:34;10285:18;;;10278:62;10377:12;10356:19;;;10349:41;10407:19;;13237:179:235::1;9954:478:357::0;13237:179:235::1;13431:53;::::0;;;;:39:::1;10629:55:357::0;;;13431:53:235::1;::::0;::::1;10611:74:357::0;10701:18;;;10694:34;;;13431:39:235;::::1;::::0;::::1;::::0;10584:18:357;;13431:53:235::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13180:489;;;13553:21;::::0;;::::1;;::::0;;;:8:::1;:21;::::0;;;;;;;:35;;::::1;::::0;;;;;;;:45:::1;::::0;13591:7;;13553:45:::1;:::i;:::-;13515:21;::::0;;::::1;;::::0;;;:8:::1;:21;::::0;;;;;;;:35;;::::1;::::0;;;;;;;;;:83;;;;13612:46:::1;::::0;13645:3;13650:7;13612:32:::1;:46::i;:::-;13859:85;13885:11;13898:12;13912:5;13919:3;13924:7;13933:10;;13859:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;13859:25:235::1;::::0;-1:-1:-1;;;13859:85:235:i:1;:::-;12867:1084:::0;;;;;;;:::o;7253:186::-;4741:10;1465:19:59;:23;4713:99:235;;;;;;;216:2:357;4713:99:235;;;198:21:357;255:2;235:18;;;228:30;294:34;274:18;;;267:62;365:25;345:18;;;338:53;408:19;;4713:99:235;14:419:357;4713:99:235;7353:79:::1;7372:10;7384;7396:9;7407:12;7421:10;;7353:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;7353:18:235::1;::::0;-1:-1:-1;;;7353:79:235:i:1;:::-;7253:186:::0;;;:::o;8758:245:132:-;8946:50;8964:5;8971:3;8976:7;8985:10;;8946:17;:50::i;:::-;8758:245;;;;;:::o;11233:902:235:-;5004:9;;;;4982:10;:32;:92;;;;-1:-1:-1;5062:11:235;;;5018:9;;:32;;;;;;;;5062:11;;;;;5018:9;;;;;:30;;:32;;;;;;;;;;;;:9;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;4982:92;4961:204;;;;;;;9331:2:357;4961:204:235;;;9313:21:357;9370:2;9350:18;;;9343:30;9409:34;9389:18;;;9382:62;9480:34;9460:18;;;9453:62;9552:3;9531:19;;;9524:32;9573:19;;4961:204:235;9129:469:357;4961:204:235;11447:8:::1;:6;:8::i;:::-;:17;11439:52;;;::::0;::::1;::::0;;9805:2:357;11439:52:235::1;::::0;::::1;9787:21:357::0;9844:2;9824:18;;;9817:30;9883:24;9863:18;;;9856:52;9925:18;;11439:52:235::1;9603:346:357::0;11439:52:235::1;11522:7;11509:9;:20;11501:91;;;::::0;::::1;::::0;;11260:2:357;11501:91:235::1;::::0;::::1;11242:21:357::0;11299:2;11279:18;;;11272:30;11338:34;11318:18;;;11311:62;11409:28;11389:18;;;11382:56;11455:19;;11501:91:235::1;11058:422:357::0;11501:91:235::1;11625:4;11610:20;::::0;::::1;::::0;11602:68:::1;;;::::0;::::1;::::0;;11687:2:357;11602:68:235::1;::::0;::::1;11669:21:357::0;11726:2;11706:18;;;11699:30;11765:34;11745:18;;;11738:62;11836:5;11816:18;;;11809:33;11859:19;;11602:68:235::1;11485:399:357::0;11602:68:235::1;11703:9;::::0;::::1;::::0;;::::1;11688:25:::0;;::::1;::::0;11680:78:::1;;;::::0;::::1;::::0;;12091:2:357;11680:78:235::1;::::0;::::1;12073:21:357::0;12130:2;12110:18;;;12103:30;12169:34;12149:18;;;12142:62;12240:10;12220:18;;;12213:38;12268:19;;11680:78:235::1;11889:404:357::0;11680:78:235::1;11936:56;11960:5;11967:3;11972:7;11981:10;;11936:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;11936:23:235::1;::::0;-1:-1:-1;;;11936:56:235:i:1;:::-;12003:12;12018:45;12032:3;12037:9;12048:7;12018:45;;;;;;;;;;;::::0;:13:::1;:45::i;:::-;12003:60;;12081:7;12073:55;;;::::0;::::1;::::0;;12500:2:357;12073:55:235::1;::::0;::::1;12482:21:357::0;12539:2;12519:18;;;12512:30;12578:34;12558:18;;;12551:62;12649:5;12629:18;;;12622:33;12672:19;;12073:55:235::1;12298:399:357::0;12073:55:235::1;11429:706;11233:902:::0;;;;;:::o;4055:322:132:-;3100:19:43;3123:13;;;;;;3122:14;;3168:34;;;;-1:-1:-1;3186:12:43;;3201:1;3186:12;;;;:16;3168:34;3167:97;;;-1:-1:-1;3236:4:43;1465:19:59;:23;;;3208:55:43;;-1:-1:-1;3246:12:43;;;;;:17;3208:55;3146:190;;;;;;;12904:2:357;3146:190:43;;;12886:21:357;12943:2;12923:18;;;12916:30;12982:34;12962:18;;;12955:62;13053:16;13033:18;;;13026:44;13087:19;;3146:190:43;12702:410:357;3146:190:43;3346:12;:16;;;;3361:1;3346:16;;;3372:65;;;;3406:13;:20;;;;;;;;3372:65;4173:16:132::1;:36:::0;;;::::1;;::::0;::::1;;::::0;;4219:151:::1;4267:10:::0;635:42:199::1;4219:21:132;:151::i;:::-;3461:14:43::0;3457:99;;;3507:5;3491:21;;;;;;3531:14;;-1:-1:-1;13269:36:357;;3531:14:43;;13257:2:357;13242:18;3531:14:43;;;;;;;3090:472;4055:322:132;;:::o;10320:349:235:-;10563:99;10584:11;10597:12;10611:10;10623:3;10628:7;10637:12;10651:10;;10563:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10563:20:235;;-1:-1:-1;;;10563:99:235:i;7066:339:132:-;4741:10:235;1465:19:59;:23;4713:99:235;;;;;;;216:2:357;4713:99:235;;;198:21:357;255:2;235:18;;;228:30;294:34;274:18;;;267:62;365:25;345:18;;;338:53;408:19;;4713:99:235;14:419:357;4713:99:235;7298:100:132::1;7320:8;7330;7340:10;7352;7364:7;7373:12;7387:10;;7298:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;7298:21:132::1;::::0;-1:-1:-1;;;7298:100:132:i:1;4418:103::-:0;4489:16;;:25;;;;;;;;4466:4;;4489:16;;;:23;;:25;;;;;;;;;;;;;;:16;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4482:32;;4418:103;:::o;8106:339::-;8345:93;8367:8;8377;8387:10;8399:3;8404:7;8413:12;8427:10;;8345:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8345:21:132;;-1:-1:-1;;;8345:93:132:i;9277:349:235:-;4741:10;1465:19:59;:23;4713:99:235;;;;;;;216:2:357;4713:99:235;;;198:21:357;255:2;235:18;;;228:30;294:34;274:18;;;267:62;365:25;345:18;;;338:53;408:19;;4713:99:235;14:419:357;4713:99:235;9513:106:::1;9534:11;9547:12;9561:10;9573;9585:7;9594:12;9608:10;;9513:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;9513:20:235::1;::::0;-1:-1:-1;;;9513:106:235:i:1;6242:179:132:-:0;6352:62;6372:10;6384:3;6389:12;6403:10;;6352:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6352:19:132;;-1:-1:-1;;;6352:62:132:i;9453:305::-;9679:72;9699:8;9709;9719:5;9726:3;9731:7;9740:10;;9679:19;:72::i;5183:179::-;4741:10:235;1465:19:59;:23;4713:99:235;;;;;;;216:2:357;4713:99:235;;;198:21:357;255:2;235:18;;;228:30;294:34;274:18;;;267:62;365:25;345:18;;;338:53;408:19;;4713:99:235;14:419:357;4713:99:235;5286:69:132::1;5306:10;5318;5330:12;5344:10;;5286:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;5286:19:132::1;::::0;-1:-1:-1;;;5286:69:132:i:1;8450:186:235:-:0;8557:72;8576:10;8588:3;8593:9;8604:12;8618:10;;8557:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8557:18:235;;-1:-1:-1;;;8557:72:235:i;14539:789::-;14756:7;14743:9;:20;14735:95;;;;;;;13800:2:357;14735:95:235;;;13782:21:357;13839:2;13819:18;;;13812:30;13878:34;13858:18;;;13851:62;13949:32;13929:18;;;13922:60;13999:19;;14735:95:235;13598:426:357;14735:95:235;15008:56;15032:5;15039:3;15044:7;15053:10;15008:23;:56::i;:::-;15075:9;;15146:11;;15182:88;;15075:9;;;;;:21;;15105:7;;15146:11;;;15205:31;;15182:88;;15238:5;;15245:3;;15105:7;;15259:10;;15182:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;15075:246;;;;;;;;;;;;;15298:12;;15075:246;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14539:789;;;;;:::o;17966:279::-;18039:4;18062:79;18094:6;18102:38;18062:31;:79::i;:::-;:176;;;;18157:81;18189:6;18197:40;18157:31;:81::i;:::-;18055:183;17966:279;-1:-1:-1;;17966:279:235:o;18692:410::-;18789:4;18809:87;18841:14;18857:38;18809:31;:87::i;:::-;18805:291;;;18955:14;18934:44;;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18919:61;;:11;:61;;;18912:68;;;;18805:291;19056:14;19033:50;;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;763:205:52;902:58;;10641:42:357;10629:55;;902:58:52;;;10611:74:357;10701:18;;;10694:34;;;875:86:52;;895:5;;925:23;;10584:18:357;;902:58:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;875:19;:86::i;13450:447:132:-;13757:5;13705:84;;13743:12;13705:84;;13730:11;13705:84;;;13764:3;13769:7;13778:10;13705:84;;;;;;;;:::i;:::-;;;;;;;;13799:91;13831:11;13844:12;13858:5;13865:3;13870:7;13879:10;13799:31;:91::i;12208:328::-;12432:3;12402:55;;12425:5;12402:55;;;12437:7;12446:10;12402:55;;;;;;;:::i;:::-;;;;;;;;12467:62;12497:5;12504:3;12509:7;12518:10;12467:29;:62::i;1202:536:200:-;1305:4;1321:13;1668:1;1635;1594:9;1588:16;1554:2;1543:9;1539:18;1496:6;1454:7;1421:4;1395:302;1367:330;1202:536;-1:-1:-1;;;;;;1202:536:200:o;5373:236:235:-;4888:13:43;;;;;;;4880:69;;;;;;;15885:2:357;4880:69:43;;;15867:21:357;15924:2;15904:18;;;15897:30;15963:34;15943:18;;;15936:62;16034:13;16014:18;;;16007:41;16065:19;;4880:69:43;15683:407:357;4880:69:43;5544:9:235::1;:22:::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;;5576:11:::1;:26:::0;;;;;::::1;::::0;::::1;;::::0;;5373:236::o;16022:1680::-;16283:37;16308:11;16283:24;:37::i;:::-;16279:512;;;16361:46;16381:11;16394:12;16361:19;:46::i;:::-;16336:179;;;;;;;10156:2:357;16336:179:235;;;10138:21:357;10195:2;10175:18;;;10168:30;10234:34;10214:18;;;10207:62;10305:34;10285:18;;;10278:62;10377:12;10356:19;;;10349:41;10407:19;;16336:179:235;9954:478:357;16336:179:235;16530:55;;;;;:39;10629:55:357;;;16530::235;;;10611:74:357;10701:18;;;10694:34;;;16530:39:235;;;;;10584:18:357;;16530:55:235;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16279:512;;;16616:67;:36;;;16653:5;16668:4;16675:7;16616:36;:67::i;:::-;16735:21;;;;;;;;:8;:21;;;;;;;;:35;;;;;;;;;;:45;;16773:7;;16735:45;:::i;:::-;16697:21;;;;;;;;:8;:21;;;;;;;;:35;;;;;;;;;:83;16279:512;16981:85;17007:11;17020:12;17034:5;17041:3;17046:7;17055:10;16981:25;:85::i;:::-;17077:9;;17130:11;;17166:478;;17077:9;;;;;:21;;17130:11;;17206:33;;17166:478;;17492:12;;17522:11;;17551:5;;17574:3;;17595:7;;17620:10;;17166:478;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;17077:618;;;;;;;;;;;;;17672:12;;17077:618;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16022:1680;;;;;;;:::o;11078:345:132:-;11329:87;11350:8;11360;11370:5;11377:3;11382:7;11391:12;11405:10;11329:20;:87::i;11651:325::-;11872:3;11845:52;;11865:5;11845:52;;;11877:7;11886:10;11845:52;;;;;;;:::i;:::-;;;;;;;;11907:62;11937:5;11944:3;11949:7;11958:10;11907:29;:62::i;1333:274:67:-;1420:4;1527:23;1542:7;1527:14;:23::i;:::-;:73;;;;;1554:46;1579:7;1588:11;1554:24;:46::i;:::-;1520:80;1333:274;-1:-1:-1;;;1333:274:67:o;3747:706:52:-;4166:23;4192:69;4220:4;4192:69;;;;;;;;;;;;;;;;;4200:5;4192:27;;;;:69;;;;;:::i;:::-;4275:17;;4166:95;;-1:-1:-1;4275:21:52;4271:176;;4370:10;4359:30;;;;;;;;;;;;:::i;:::-;4351:85;;;;;;;17109:2:357;4351:85:52;;;17091:21:357;17148:2;17128:18;;;17121:30;17187:34;17167:18;;;17160:62;17258:12;17238:18;;;17231:40;17288:19;;4351:85:52;16907:406:357;21757:341:235;22059:5;22011:80;;22045:12;22011:80;;22032:11;22011:80;;;22066:3;22071:7;22080:10;22011:80;;;;;;;;:::i;:::-;;;;;;;;21757:341;;;;;;:::o;20099:251::-;20318:3;20292:51;;20311:5;20292:51;;;20323:7;20332:10;20292:51;;;;;;;:::i;:::-;;;;;;;;20099:251;;;;:::o;974:241:52:-;1139:68;;17530:42:357;17599:15;;;1139:68:52;;;17581:34:357;17651:15;;17631:18;;;17624:43;17683:18;;;17676:34;;;1112:96:52;;1132:5;;1162:27;;17493:18:357;;1139:68:52;17318:398:357;12771:444:132;13075:5;13026:81;;13061:12;13026:81;;13048:11;13026:81;;;13082:3;13087:7;13096:10;13026:81;;;;;;;;:::i;:::-;;;;;;;;13117:91;13149:11;13162:12;13176:5;13183:3;13188:7;13197:10;13117:31;:91::i;19478:251:235:-;19697:3;19671:51;;19690:5;19671:51;;;19702:7;19711:10;19671:51;;;;;;;:::i;704:411:67:-;768:4;975:60;1000:7;1009:25;975:24;:60::i;:::-;:133;;;;-1:-1:-1;1052:56:67;1077:7;1086:21;1052:24;:56::i;:::-;1051:57;956:152;704:411;-1:-1:-1;;704:411:67:o;4223:638::-;4385:71;;;17895:66:357;17883:79;;4385:71:67;;;;17865:98:357;;;;4385:71:67;;;;;;;;;;17838:18:357;;;;4385:71:67;;;;;;;;;;;4408:34;4385:71;;;4664:20;;4316:4;;4385:71;4316:4;;;;;;4385:71;4316:4;;4664:20;4629:7;4622:5;4611:86;4600:97;;4724:16;4710:30;;4774:4;4768:11;4753:26;;4806:7;:29;;;;;4831:4;4817:10;:18;;4806:29;:48;;;;;4853:1;4839:11;:15;4806:48;4799:55;4223:638;-1:-1:-1;;;;;;;4223:638:67:o;3861:223:59:-;3994:12;4025:52;4047:6;4055:4;4061:1;4064:12;4025:21;:52::i;:::-;4018:59;3861:223;-1:-1:-1;;;;3861:223:59:o;20883:341:235:-;21185:5;21137:80;;21171:12;21137:80;;21158:11;21137:80;;;21192:3;21197:7;21206:10;21137:80;;;;;;;;:::i;4948:499:59:-;5113:12;5170:5;5145:21;:30;;5137:81;;;;;;;18176:2:357;5137:81:59;;;18158:21:357;18215:2;18195:18;;;18188:30;18254:34;18234:18;;;18227:62;18325:8;18305:18;;;18298:36;18351:19;;5137:81:59;17974:402:357;5137:81:59;1465:19;;;;5228:60;;;;;;;18583:2:357;5228:60:59;;;18565:21:357;18622:2;18602:18;;;18595:30;18661:31;18641:18;;;18634:59;18710:18;;5228:60:59;18381:353:357;5228:60:59;5300:12;5314:23;5341:6;:11;;5360:5;5367:4;5341:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5299:73;;;;5389:51;5406:7;5415:10;5427:12;7707;7735:7;7731:566;;;-1:-1:-1;7765:10:59;7758:17;;7731:566;7876:17;;:21;7872:415;;8120:10;8114:17;8180:15;8167:10;8163:2;8159:19;8152:44;7872:415;8259:12;8252:20;;;;;;;;;;;:::i;438:154:357:-;524:42;517:5;513:54;506:5;503:65;493:93;;582:1;579;572:12;493:93;438:154;:::o;597:347::-;648:8;658:6;712:3;705:4;697:6;693:17;689:27;679:55;;730:1;727;720:12;679:55;-1:-1:-1;753:20:357;;796:18;785:30;;782:50;;;828:1;825;818:12;782:50;865:4;857:6;853:17;841:29;;917:3;910:4;901:6;893;889:19;885:30;882:39;879:59;;;934:1;931;924:12;879:59;597:347;;;;;:::o;949:1038::-;1064:6;1072;1080;1088;1096;1104;1112;1165:3;1153:9;1144:7;1140:23;1136:33;1133:53;;;1182:1;1179;1172:12;1133:53;1221:9;1208:23;1240:31;1265:5;1240:31;:::i;:::-;1290:5;-1:-1:-1;1347:2:357;1332:18;;1319:32;1360:33;1319:32;1360:33;:::i;:::-;1412:7;-1:-1:-1;1471:2:357;1456:18;;1443:32;1484:33;1443:32;1484:33;:::i;:::-;1536:7;-1:-1:-1;1595:2:357;1580:18;;1567:32;1608:33;1567:32;1608:33;:::i;:::-;1660:7;-1:-1:-1;1714:3:357;1699:19;;1686:33;;-1:-1:-1;1770:3:357;1755:19;;1742:33;1798:18;1787:30;;1784:50;;;1830:1;1827;1820:12;1784:50;1869:58;1919:7;1910:6;1899:9;1895:22;1869:58;:::i;:::-;949:1038;;;;-1:-1:-1;949:1038:357;;-1:-1:-1;949:1038:357;;;;1843:84;;-1:-1:-1;;;949:1038:357:o;1992:163::-;2059:20;;2119:10;2108:22;;2098:33;;2088:61;;2145:1;2142;2135:12;2088:61;1992:163;;;:::o;2160:481::-;2238:6;2246;2254;2307:2;2295:9;2286:7;2282:23;2278:32;2275:52;;;2323:1;2320;2313:12;2275:52;2346:28;2364:9;2346:28;:::i;:::-;2336:38;;2425:2;2414:9;2410:18;2397:32;2452:18;2444:6;2441:30;2438:50;;;2484:1;2481;2474:12;2438:50;2523:58;2573:7;2564:6;2553:9;2549:22;2523:58;:::i;:::-;2160:481;;2600:8;;-1:-1:-1;2497:84:357;;-1:-1:-1;;;;2160:481:357:o;2646:754::-;2743:6;2751;2759;2767;2775;2828:3;2816:9;2807:7;2803:23;2799:33;2796:53;;;2845:1;2842;2835:12;2796:53;2884:9;2871:23;2903:31;2928:5;2903:31;:::i;:::-;2953:5;-1:-1:-1;3010:2:357;2995:18;;2982:32;3023:33;2982:32;3023:33;:::i;:::-;3075:7;-1:-1:-1;3129:2:357;3114:18;;3101:32;;-1:-1:-1;3184:2:357;3169:18;;3156:32;3211:18;3200:30;;3197:50;;;3243:1;3240;3233:12;3197:50;3282:58;3332:7;3323:6;3312:9;3308:22;3282:58;:::i;:::-;2646:754;;;;-1:-1:-1;2646:754:357;;-1:-1:-1;3359:8:357;;3256:84;2646:754;-1:-1:-1;;;2646:754:357:o;3924:445::-;4049:6;4057;4110:2;4098:9;4089:7;4085:23;4081:32;4078:52;;;4126:1;4123;4116:12;4078:52;4165:9;4152:23;4184:31;4209:5;4184:31;:::i;:::-;4234:5;-1:-1:-1;4291:2:357;4276:18;;4263:32;4304:33;4263:32;4304:33;:::i;:::-;4356:7;4346:17;;;3924:445;;;;;:::o;4374:969::-;4488:6;4496;4504;4512;4520;4528;4536;4589:3;4577:9;4568:7;4564:23;4560:33;4557:53;;;4606:1;4603;4596:12;4557:53;4645:9;4632:23;4664:31;4689:5;4664:31;:::i;:::-;4714:5;-1:-1:-1;4771:2:357;4756:18;;4743:32;4784:33;4743:32;4784:33;:::i;:::-;4836:7;-1:-1:-1;4895:2:357;4880:18;;4867:32;4908:33;4867:32;4908:33;:::i;:::-;4960:7;-1:-1:-1;5014:2:357;4999:18;;4986:32;;-1:-1:-1;5037:38:357;5070:3;5055:19;;5037:38;:::i;:::-;5027:48;;5126:3;5115:9;5111:19;5098:33;5154:18;5146:6;5143:30;5140:50;;;5186:1;5183;5176:12;5348:258;5420:1;5430:113;5444:6;5441:1;5438:13;5430:113;;;5520:11;;;5514:18;5501:11;;;5494:39;5466:2;5459:10;5430:113;;;5561:6;5558:1;5555:13;5552:48;;;-1:-1:-1;;5596:1:357;5578:16;;5571:27;5348:258::o;5611:317::-;5653:3;5691:5;5685:12;5718:6;5713:3;5706:19;5734:63;5790:6;5783:4;5778:3;5774:14;5767:4;5760:5;5756:16;5734:63;:::i;:::-;5842:2;5830:15;5847:66;5826:88;5817:98;;;;5917:4;5813:109;;5611:317;-1:-1:-1;;5611:317:357:o;5933:220::-;6082:2;6071:9;6064:21;6045:4;6102:45;6143:2;6132:9;6128:18;6120:6;6102:45;:::i;6158:827::-;6263:6;6271;6279;6287;6295;6303;6356:3;6344:9;6335:7;6331:23;6327:33;6324:53;;;6373:1;6370;6363:12;6324:53;6412:9;6399:23;6431:31;6456:5;6431:31;:::i;:::-;6481:5;-1:-1:-1;6538:2:357;6523:18;;6510:32;6551:33;6510:32;6551:33;:::i;:::-;6603:7;-1:-1:-1;6657:2:357;6642:18;;6629:32;;-1:-1:-1;6680:37:357;6713:2;6698:18;;6680:37;:::i;:::-;6670:47;;6768:3;6757:9;6753:19;6740:33;6796:18;6788:6;6785:30;6782:50;;;6828:1;6825;6818:12;6782:50;6867:58;6917:7;6908:6;6897:9;6893:22;6867:58;:::i;:::-;6158:827;;;;-1:-1:-1;6158:827:357;;-1:-1:-1;6158:827:357;;6944:8;;6158:827;-1:-1:-1;;;6158:827:357:o;8252:616::-;8339:6;8347;8355;8363;8416:2;8404:9;8395:7;8391:23;8387:32;8384:52;;;8432:1;8429;8422:12;8384:52;8471:9;8458:23;8490:31;8515:5;8490:31;:::i;:::-;8540:5;-1:-1:-1;8564:37:357;8597:2;8582:18;;8564:37;:::i;:::-;8554:47;;8652:2;8641:9;8637:18;8624:32;8679:18;8671:6;8668:30;8665:50;;;8711:1;8708;8701:12;8665:50;8750:58;8800:7;8791:6;8780:9;8776:22;8750:58;:::i;:::-;8252:616;;;;-1:-1:-1;8827:8:357;-1:-1:-1;;;;8252:616:357:o;8873:251::-;8943:6;8996:2;8984:9;8975:7;8971:23;8967:32;8964:52;;;9012:1;9009;9002:12;8964:52;9044:9;9038:16;9063:31;9088:5;9063:31;:::i;10739:184::-;10791:77;10788:1;10781:88;10888:4;10885:1;10878:15;10912:4;10909:1;10902:15;10928:125;10968:4;10996:1;10993;10990:8;10987:34;;;11001:18;;:::i;:::-;-1:-1:-1;11038:9:357;;10928:125::o;13316:277::-;13383:6;13436:2;13424:9;13415:7;13411:23;13407:32;13404:52;;;13452:1;13449;13442:12;13404:52;13484:9;13478:16;13537:5;13530:13;13523:21;13516:5;13513:32;13503:60;;13559:1;13556;13549:12;14029:512;14223:4;14252:42;14333:2;14325:6;14321:15;14310:9;14303:34;14385:2;14377:6;14373:15;14368:2;14357:9;14353:18;14346:43;;14425:6;14420:2;14409:9;14405:18;14398:34;14468:3;14463:2;14452:9;14448:18;14441:31;14489:46;14530:3;14519:9;14515:19;14507:6;14489:46;:::i;:::-;14481:54;14029:512;-1:-1:-1;;;;;;14029:512:357:o;14546:424::-;14759:42;14751:6;14747:55;14736:9;14729:74;14839:2;14834;14823:9;14819:18;14812:30;14710:4;14859:45;14900:2;14889:9;14885:18;14877:6;14859:45;:::i;:::-;14851:53;;14952:10;14944:6;14940:23;14935:2;14924:9;14920:18;14913:51;14546:424;;;;;;:::o;14975:409::-;15190:42;15182:6;15178:55;15167:9;15160:74;15270:6;15265:2;15254:9;15250:18;15243:34;15313:2;15308;15297:9;15293:18;15286:30;15141:4;15333:45;15374:2;15363:9;15359:18;15351:6;15333:45;:::i;:::-;15325:53;14975:409;-1:-1:-1;;;;;14975:409:357:o;15389:289::-;15564:6;15553:9;15546:25;15607:2;15602;15591:9;15587:18;15580:30;15527:4;15627:45;15668:2;15657:9;15653:18;15645:6;15627:45;:::i;16095:128::-;16135:3;16166:1;16162:6;16159:1;16156:13;16153:39;;;16172:18;;:::i;:::-;-1:-1:-1;16208:9:357;;16095:128::o;16228:674::-;16478:4;16507:42;16588:2;16580:6;16576:15;16565:9;16558:34;16640:2;16632:6;16628:15;16623:2;16612:9;16608:18;16601:43;16692:2;16684:6;16680:15;16675:2;16664:9;16660:18;16653:43;16744:2;16736:6;16732:15;16727:2;16716:9;16712:18;16705:43;;16785:6;16779:3;16768:9;16764:19;16757:35;16829:3;16823;16812:9;16808:19;16801:32;16850:46;16891:3;16880:9;16876:19;16868:6;16850:46;:::i;:::-;16842:54;16228:674;-1:-1:-1;;;;;;;;16228:674:357:o;18739:274::-;18868:3;18906:6;18900:13;18922:53;18968:6;18963:3;18956:4;18948:6;18944:17;18922:53;:::i;:::-;18991:16;;;;;18739:274;-1:-1:-1;;18739:274:357:o","linkReferences":{}},"methodIdentifiers":{"MESSENGER()":"927ede2d","OTHER_BRIDGE()":"7f46ddb2","bridgeERC20(address,address,uint256,uint32,bytes)":"87087623","bridgeERC20To(address,address,address,uint256,uint32,bytes)":"540abf73","bridgeETH(uint32,bytes)":"09fc8843","bridgeETHTo(address,uint32,bytes)":"e11013dd","depositERC20(address,address,uint256,uint32,bytes)":"58a997f6","depositERC20To(address,address,address,uint256,uint32,bytes)":"838b2520","depositETH(uint32,bytes)":"b1a1a882","depositETHTo(address,uint32,bytes)":"9a2ac6d5","deposits(address,address)":"8f601f66","finalizeBridgeERC20(address,address,address,address,uint256,bytes)":"0166a07a","finalizeBridgeETH(address,address,uint256,bytes)":"1635f5fd","finalizeERC20Withdrawal(address,address,address,address,uint256,bytes)":"a9f9e675","finalizeETHWithdrawal(address,address,uint256,bytes)":"1532ec34","initialize(address,address)":"485cc955","l2TokenBridge()":"91c49bf8","messenger()":"3cb747bf","otherBridge()":"c89701a2","paused()":"5c975abb","superchainConfig()":"35e80ab3","version()":"54fd4d50"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20BridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20BridgeInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20DepositInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20WithdrawalFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHBridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHBridgeInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHDepositInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHWithdrawalFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"contract CrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_BRIDGE\",\"outputs\":[{\"internalType\":\"contract StandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC20To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeETHTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_l2Token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"depositERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"depositERC20To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"depositETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"depositETHTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"deposits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeERC20Withdrawal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeETHWithdrawal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract CrossDomainMessenger\",\"name\":\"_messenger\",\"type\":\"address\"},{\"internalType\":\"contract SuperchainConfig\",\"name\":\"_superchainConfig\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2TokenBridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messenger\",\"outputs\":[{\"internalType\":\"contract CrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"otherBridge\",\"outputs\":[{\"internalType\":\"contract StandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"superchainConfig\",\"outputs\":[{\"internalType\":\"contract SuperchainConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"custom:proxied\":\"@title L1StandardBridge\",\"events\":{\"ERC20DepositInitiated(address,address,address,address,uint256,bytes)\":{\"custom:legacy\":\"@notice Emitted whenever an ERC20 deposit is initiated.\",\"params\":{\"amount\":\"Amount of the ERC20 deposited.\",\"extraData\":\"Extra data attached to the deposit.\",\"from\":\"Address of the depositor.\",\"l1Token\":\"Address of the token on L1.\",\"l2Token\":\"Address of the corresponding token on L2.\",\"to\":\"Address of the recipient on L2.\"}},\"ERC20WithdrawalFinalized(address,address,address,address,uint256,bytes)\":{\"custom:legacy\":\"@notice Emitted whenever an ERC20 withdrawal is finalized.\",\"params\":{\"amount\":\"Amount of the ERC20 withdrawn.\",\"extraData\":\"Extra data attached to the withdrawal.\",\"from\":\"Address of the withdrawer.\",\"l1Token\":\"Address of the token on L1.\",\"l2Token\":\"Address of the corresponding token on L2.\",\"to\":\"Address of the recipient on L1.\"}},\"ETHDepositInitiated(address,address,uint256,bytes)\":{\"custom:legacy\":\"@notice Emitted whenever a deposit of ETH from L1 into L2 is initiated.\",\"params\":{\"amount\":\"Amount of ETH deposited.\",\"extraData\":\"Extra data attached to the deposit.\",\"from\":\"Address of the depositor.\",\"to\":\"Address of the recipient on L2.\"}},\"ETHWithdrawalFinalized(address,address,uint256,bytes)\":{\"custom:legacy\":\"@notice Emitted whenever a withdrawal of ETH from L2 to L1 is finalized.\",\"params\":{\"amount\":\"Amount of ETH withdrawn.\",\"extraData\":\"Extra data attached to the withdrawal.\",\"from\":\"Address of the withdrawer.\",\"to\":\"Address of the recipient on L1.\"}}},\"kind\":\"dev\",\"methods\":{\"MESSENGER()\":{\"custom:legacy\":\"\",\"returns\":{\"_0\":\"Contract of the messenger on this domain.\"}},\"OTHER_BRIDGE()\":{\"custom:legacy\":\"\",\"returns\":{\"_0\":\"Contract of the bridge on the other network.\"}},\"bridgeERC20(address,address,uint256,uint32,bytes)\":{\"params\":{\"_amount\":\"Amount of local tokens to deposit.\",\"_extraData\":\"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.\",\"_localToken\":\"Address of the ERC20 on this chain.\",\"_minGasLimit\":\"Minimum amount of gas that the bridge can be relayed with.\",\"_remoteToken\":\"Address of the corresponding token on the remote chain.\"}},\"bridgeERC20To(address,address,address,uint256,uint32,bytes)\":{\"params\":{\"_amount\":\"Amount of local tokens to deposit.\",\"_extraData\":\"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.\",\"_localToken\":\"Address of the ERC20 on this chain.\",\"_minGasLimit\":\"Minimum amount of gas that the bridge can be relayed with.\",\"_remoteToken\":\"Address of the corresponding token on the remote chain.\",\"_to\":\"Address of the receiver.\"}},\"bridgeETH(uint32,bytes)\":{\"params\":{\"_extraData\":\"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.\",\"_minGasLimit\":\"Minimum amount of gas that the bridge can be relayed with.\"}},\"bridgeETHTo(address,uint32,bytes)\":{\"params\":{\"_extraData\":\"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.\",\"_minGasLimit\":\"Minimum amount of gas that the bridge can be relayed with.\",\"_to\":\"Address of the receiver.\"}},\"depositERC20(address,address,uint256,uint32,bytes)\":{\"custom:legacy\":\"@notice Deposits some amount of ERC20 tokens into the sender's account on L2.\",\"params\":{\"_amount\":\"Amount of the ERC20 to deposit.\",\"_extraData\":\"Optional data to forward to L2. Data supplied here will not be used to execute any code on L2 and is only emitted as extra data for the convenience of off-chain tooling.\",\"_l1Token\":\"Address of the L1 token being deposited.\",\"_l2Token\":\"Address of the corresponding token on L2.\",\"_minGasLimit\":\"Minimum gas limit for the deposit message on L2.\"}},\"depositERC20To(address,address,address,uint256,uint32,bytes)\":{\"custom:legacy\":\"@notice Deposits some amount of ERC20 tokens into a target account on L2.\",\"params\":{\"_amount\":\"Amount of the ERC20 to deposit.\",\"_extraData\":\"Optional data to forward to L2. Data supplied here will not be used to execute any code on L2 and is only emitted as extra data for the convenience of off-chain tooling.\",\"_l1Token\":\"Address of the L1 token being deposited.\",\"_l2Token\":\"Address of the corresponding token on L2.\",\"_minGasLimit\":\"Minimum gas limit for the deposit message on L2.\",\"_to\":\"Address of the recipient on L2.\"}},\"depositETH(uint32,bytes)\":{\"custom:legacy\":\"@notice Deposits some amount of ETH into the sender's account on L2.\",\"params\":{\"_extraData\":\"Optional data to forward to L2. Data supplied here will not be used to execute any code on L2 and is only emitted as extra data for the convenience of off-chain tooling.\",\"_minGasLimit\":\"Minimum gas limit for the deposit message on L2.\"}},\"depositETHTo(address,uint32,bytes)\":{\"custom:legacy\":\"@notice Deposits some amount of ETH into a target account on L2. Note that if ETH is sent to a contract on L2 and the call fails, then that ETH will be locked in the L2StandardBridge. ETH may be recoverable if the call can be successfully replayed by increasing the amount of gas supplied to the call. If the call will fail for any amount of gas, then the ETH will be locked permanently.\",\"params\":{\"_extraData\":\"Optional data to forward to L2. Data supplied here will not be used to execute any code on L2 and is only emitted as extra data for the convenience of off-chain tooling.\",\"_minGasLimit\":\"Minimum gas limit for the deposit message on L2.\",\"_to\":\"Address of the recipient on L2.\"}},\"finalizeBridgeERC20(address,address,address,address,uint256,bytes)\":{\"params\":{\"_amount\":\"Amount of the ERC20 being bridged.\",\"_extraData\":\"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.\",\"_from\":\"Address of the sender.\",\"_localToken\":\"Address of the ERC20 on this chain.\",\"_remoteToken\":\"Address of the corresponding token on the remote chain.\",\"_to\":\"Address of the receiver.\"}},\"finalizeBridgeETH(address,address,uint256,bytes)\":{\"params\":{\"_amount\":\"Amount of ETH being bridged.\",\"_extraData\":\"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.\",\"_from\":\"Address of the sender.\",\"_to\":\"Address of the receiver.\"}},\"finalizeERC20Withdrawal(address,address,address,address,uint256,bytes)\":{\"custom:legacy\":\"@notice Finalizes a withdrawal of ERC20 tokens from L2.\",\"params\":{\"_amount\":\"Amount of the ERC20 to withdraw.\",\"_extraData\":\"Optional data forwarded from L2.\",\"_from\":\"Address of the withdrawer on L2.\",\"_l1Token\":\"Address of the token on L1.\",\"_l2Token\":\"Address of the corresponding token on L2.\",\"_to\":\"Address of the recipient on L1.\"}},\"finalizeETHWithdrawal(address,address,uint256,bytes)\":{\"custom:legacy\":\"@notice Finalizes a withdrawal of ETH from L2.\",\"params\":{\"_amount\":\"Amount of ETH to withdraw.\",\"_extraData\":\"Optional data forwarded from L2.\",\"_from\":\"Address of the withdrawer on L2.\",\"_to\":\"Address of the recipient on L1.\"}},\"initialize(address,address)\":{\"params\":{\"_messenger\":\"Contract for the CrossDomainMessenger on this network.\",\"_superchainConfig\":\"Contract for the SuperchainConfig on this network.\"}},\"l2TokenBridge()\":{\"custom:legacy\":\"@notice Retrieves the access of the corresponding L2 bridge contract.\",\"returns\":{\"_0\":\"Address of the corresponding L2 bridge contract.\"}},\"paused()\":{\"returns\":{\"_0\":\"Whether or not the contract is paused.\"}}},\"stateVariables\":{\"version\":{\"custom:semver\":\"2.1.0\"}},\"version\":1},\"userdoc\":{\"events\":{\"ERC20BridgeFinalized(address,address,address,address,uint256,bytes)\":{\"notice\":\"Emitted when an ERC20 bridge is finalized on this chain.\"},\"ERC20BridgeInitiated(address,address,address,address,uint256,bytes)\":{\"notice\":\"Emitted when an ERC20 bridge is initiated to the other chain.\"},\"ETHBridgeFinalized(address,address,uint256,bytes)\":{\"notice\":\"Emitted when an ETH bridge is finalized on this chain.\"},\"ETHBridgeInitiated(address,address,uint256,bytes)\":{\"notice\":\"Emitted when an ETH bridge is initiated to the other chain.\"}},\"kind\":\"user\",\"methods\":{\"MESSENGER()\":{\"notice\":\"Getter for messenger contract. Public getter is legacy and will be removed in the future. Use `messenger` instead.\"},\"OTHER_BRIDGE()\":{\"notice\":\"Getter for the other bridge contract. Public getter is legacy and will be removed in the future. Use `otherBridge` instead.\"},\"bridgeERC20(address,address,uint256,uint32,bytes)\":{\"notice\":\"Sends ERC20 tokens to the sender's address on the other chain.\"},\"bridgeERC20To(address,address,address,uint256,uint32,bytes)\":{\"notice\":\"Sends ERC20 tokens to a receiver's address on the other chain.\"},\"bridgeETH(uint32,bytes)\":{\"notice\":\"Sends ETH to the sender's address on the other chain.\"},\"bridgeETHTo(address,uint32,bytes)\":{\"notice\":\"Sends ETH to a receiver's address on the other chain. Note that if ETH is sent to a smart contract and the call fails, the ETH will be temporarily locked in the StandardBridge on the other chain until the call is replayed. If the call cannot be replayed with any amount of gas (call always reverts), then the ETH will be permanently locked in the StandardBridge on the other chain. ETH will also be locked if the receiver is the other bridge, because finalizeBridgeETH will revert in that case.\"},\"constructor\":{\"notice\":\"Constructs the L1StandardBridge contract.\"},\"deposits(address,address)\":{\"notice\":\"Mapping that stores deposits for a given pair of local and remote tokens.\"},\"finalizeBridgeERC20(address,address,address,address,uint256,bytes)\":{\"notice\":\"Finalizes an ERC20 bridge on this chain. Can only be triggered by the other StandardBridge contract on the remote chain.\"},\"finalizeBridgeETH(address,address,uint256,bytes)\":{\"notice\":\"Finalizes an ETH bridge on this chain. Can only be triggered by the other StandardBridge contract on the remote chain.\"},\"initialize(address,address)\":{\"notice\":\"Initializer.\"},\"messenger()\":{\"notice\":\"Messenger contract on this domain.\"},\"otherBridge()\":{\"notice\":\"Corresponding bridge on the other domain.\"},\"paused()\":{\"notice\":\"This function should return true if the contract is paused. On L1 this function will check the SuperchainConfig for its paused status. On L2 this function should be a no-op.\"},\"superchainConfig()\":{\"notice\":\"Address of the SuperchainConfig contract.\"},\"version()\":{\"notice\":\"Semantic version.\"}},\"notice\":\"The L1StandardBridge is responsible for transfering ETH and ERC20 tokens between L1 and L2. In the case that an ERC20 token is native to L1, it will be escrowed within this contract. If the ERC20 token is native to L2, it will be burnt. Before Bedrock, ETH was stored within this contract. After Bedrock, ETH is instead stored inside the OptimismPortal contract. NOTE: this contract is not intended to support all variations of ERC20 tokens. Examples of some token types that may not be properly supported by this contract include, but are not limited to: tokens with transfer fees, rebasing tokens, and tokens with blocklists.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/L1/L1StandardBridge.sol\":\"L1StandardBridge\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f\",\"dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x24b04b8aacaaf1a4a0719117b29c9c3647b1f479c5ac2a60f5ff1bb6d839c238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://43e46da9d9f49741ecd876a269e71bc7494058d7a8e9478429998adb5bc3eaa0\",\"dweb:/ipfs/QmUtp4cqzf22C5rJ76AabKADquGWcjsc33yjYXxXC4sDvy\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x032807210d1d7d218963d7355d62e021a84bf1b3339f4f50be2f63b53cccaf29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11756f42121f6541a35a8339ea899ee7514cfaa2e6d740625fcc844419296aa6\",\"dweb:/ipfs/QmekMuk6BY4DAjzeXr4MSbKdgoqqsZnA8JPtuyWc6CwXHf\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165Checker.sol\":{\"keccak256\":\"0xc65c83c1039508fa7a42a09a3c6a32babd1c438ba4dbb23581255e784b5d5eed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1b3b38db0f76429db899909025e534c366415e9ea8b5ddc4c8901e6a7fc1461\",\"dweb:/ipfs/QmYv1KxyHjLEky9JWNSsSfpGJbiCxFyzVFgTwQKpiqYGUg\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929\",\"dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689\",\"dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy\"]},\"lib/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c\",\"dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8\"]},\"src/L1/L1StandardBridge.sol\":{\"keccak256\":\"0x2fdc6f6f464a24344847c81d394f502d000cd722f7ff21fa21104b5f7e392633\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://393fd96446ab8fce3bb7d1134e6ff847bf9940e0eaa199accf01118c3917367f\",\"dweb:/ipfs/QmX36camDYHu7pVzdjnfprinxPpZnjJehZXUKTyUdezKRK\"]},\"src/L1/ResourceMetering.sol\":{\"keccak256\":\"0xde3ac62c60f27a3f1ba06eec94f4eda45e7ec5544c6a5d6b79543a7184e44408\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://265a2845c4ff0d9076dd0505755cf2bdf799f4fdc09ef016865a26b51f5c3409\",\"dweb:/ipfs/QmRzSdBD8jmQf3U9u2ATRAzzuyo6c5ugz8VA5ZM4vzoGiM\"]},\"src/L1/SuperchainConfig.sol\":{\"keccak256\":\"0x5fab874f980fe3e52c3398ddd25b655c56af0c98c15588b2ad9ebf30671d859d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4e0aa613d38eceb621f8569fc714f521bc1f2df3d029552186ab3cdf2ee5d53f\",\"dweb:/ipfs/QmZDzFxhTXLW79eohQbr1nghNh3oNC4CUfH7uMX8CsjVAB\"]},\"src/libraries/Arithmetic.sol\":{\"keccak256\":\"0x91345e053584f82ad04d682ba821cf3ede808304f5b2a88116a894cf692c21db\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://005e3c42d2edfca0a506cbda94d3b0104eddf20c00bd1bd25272f53f2ef74c72\",\"dweb:/ipfs/QmdaW6Nge6NKoGvFqRpQjBpM2fXpc5y8WpZyBnDnKicdJq\"]},\"src/libraries/Burn.sol\":{\"keccak256\":\"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f\",\"dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb\"]},\"src/libraries/Constants.sol\":{\"keccak256\":\"0xe0aeec7d6e5d1e44a11405d3b5bfc384ea092c39bea0b763ab937a26fd427132\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11aa3bff9da26ca2545132ec7994866690446a5321023811c254410d9593bd9b\",\"dweb:/ipfs/QmVxWqadxvdfkqdrhfWisDqeAthibn4HEE1P6o9aFxXLhp\"]},\"src/libraries/Encoding.sol\":{\"keccak256\":\"0x1dafabcbd4877c7abe9698957b0a44b7e911cb8b11c1437a4ed897135669fa87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6addfacefa26fdb44f56d73fa0172b97740de75629a962905ec2a20a28d40fff\",\"dweb:/ipfs/QmboHMouqU19Rnbqrfo1gkfnuDBFcPiC9wsKgGtF2W1cNA\"]},\"src/libraries/Hashing.sol\":{\"keccak256\":\"0x89c07a0ca102cbe57b4e082543f2dd6dae0e1fd4a87908a334bd076fc914e7b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://69c83489c9544ab442dc244c2feb2c6811b726a5eb5a509b97fc5ccb90b98c12\",\"dweb:/ipfs/QmPGGJeLasc1HWHzd6odvWcNvFPQrbYtDubZcv8yp1HLtF\"]},\"src/libraries/Predeploys.sol\":{\"keccak256\":\"0x7b48b32b75e9ba0cd7f83b3304c6c1676dd8de20a5d40e8846bf7018ae9aff02\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7574fcc79c0d545b90071023aa81ee7880ab50b3057df598fa693bc4cf303663\",\"dweb:/ipfs/QmWLxHzgfaTJ7thfb7khXkTY5UtSBZ5VTUB4DaAXVw7DRe\"]},\"src/libraries/SafeCall.sol\":{\"keccak256\":\"0x0636a7abb242bb5d6f5606967c8929e6aa7e63468c1e2ce40ad4780d4c4bf94f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4daec2ac8f9907bbf84ef0a1c48f03bae8657619bc6f42b3a672f25c516f17a\",\"dweb:/ipfs/Qmf8gfRxBv8gEmCkP8YMPb2GGfj9QUnoNUyKE7UR2SWGnq\"]},\"src/libraries/Storage.sol\":{\"keccak256\":\"0x7ce27a05552aa69afa6b2ab6684dfe99f27366cf8ef2046baeb1fb62fff0022f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6a24f3ed56681720707a5ab0372fd67fcb1a4f6fb072c7140cda28bdb70f269\",\"dweb:/ipfs/QmW9uTpUULV4xmP7A7MoBDeDhVfQgmJG5qVUFGtXxWpWWK\"]},\"src/libraries/Types.sol\":{\"keccak256\":\"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e\",\"dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc\"]},\"src/libraries/rlp/RLPWriter.sol\":{\"keccak256\":\"0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b\",\"dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV\"]},\"src/universal/CrossDomainMessenger.sol\":{\"keccak256\":\"0x330ae1479e88fc8a8b5b27a84df935a092a47ad13e59d9b9ea4982ad31bbe7b0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf5fb4e78a03dcad4b9a8e2d5ed135f8e989aa02090747386843383fa6b7d1\",\"dweb:/ipfs/QmTp66RoF6EaKeBrrZBuYAu3dsMfKo8de2XY9iHHnqfN3n\"]},\"src/universal/IOptimismMintableERC20.sol\":{\"keccak256\":\"0x6f8133b39efcbcbd5088f195dfacf1bedc3146508429c3865443909af735a04c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://adc36971e2e120458769f050428d9d2b0504516660345020c2521ee46e6d8abf\",\"dweb:/ipfs/QmPbFusQkZgGKpU8Fv5JoqL4oVeJtM3yqnhRGLY9eZT5zZ\"]},\"src/universal/ISemver.sol\":{\"keccak256\":\"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a\",\"dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR\"]},\"src/universal/OptimismMintableERC20.sol\":{\"keccak256\":\"0x18721f41a831ec39d47002e73ecc2aa3e6624f8d1ab7b9f25b53348e8b0765df\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2162fa7529a77b199a07f37fca26c778542f6c8805f0365f1ceef90c5cd3a3a7\",\"dweb:/ipfs/QmaMmHJS52Bp95AGnrjh1zV7fLLqV3uAbFzkVLziMnPJYa\"]},\"src/universal/StandardBridge.sol\":{\"keccak256\":\"0x1a2f6afd7f14430ae2b797e09497c3dc860ed5db752e1847e30649668060c01d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fefe1356cdeb5b324e4e63e1c723c08f9e244ef2ef133b9f5df0cc0d180eeaa8\",\"dweb:/ipfs/QmZzR3zWKodwdwrdWwXUyh7G3qcFn2cjUQLrE45gRyQMn3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.15+commit.e14f2714"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"localToken","type":"address","indexed":true},{"internalType":"address","name":"remoteToken","type":"address","indexed":true},{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes","name":"extraData","type":"bytes","indexed":false}],"type":"event","name":"ERC20BridgeFinalized","anonymous":false},{"inputs":[{"internalType":"address","name":"localToken","type":"address","indexed":true},{"internalType":"address","name":"remoteToken","type":"address","indexed":true},{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes","name":"extraData","type":"bytes","indexed":false}],"type":"event","name":"ERC20BridgeInitiated","anonymous":false},{"inputs":[{"internalType":"address","name":"l1Token","type":"address","indexed":true},{"internalType":"address","name":"l2Token","type":"address","indexed":true},{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes","name":"extraData","type":"bytes","indexed":false}],"type":"event","name":"ERC20DepositInitiated","anonymous":false},{"inputs":[{"internalType":"address","name":"l1Token","type":"address","indexed":true},{"internalType":"address","name":"l2Token","type":"address","indexed":true},{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes","name":"extraData","type":"bytes","indexed":false}],"type":"event","name":"ERC20WithdrawalFinalized","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes","name":"extraData","type":"bytes","indexed":false}],"type":"event","name":"ETHBridgeFinalized","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes","name":"extraData","type":"bytes","indexed":false}],"type":"event","name":"ETHBridgeInitiated","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes","name":"extraData","type":"bytes","indexed":false}],"type":"event","name":"ETHDepositInitiated","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes","name":"extraData","type":"bytes","indexed":false}],"type":"event","name":"ETHWithdrawalFinalized","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"MESSENGER","outputs":[{"internalType":"contract CrossDomainMessenger","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"OTHER_BRIDGE","outputs":[{"internalType":"contract StandardBridge","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_localToken","type":"address"},{"internalType":"address","name":"_remoteToken","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"bridgeERC20"},{"inputs":[{"internalType":"address","name":"_localToken","type":"address"},{"internalType":"address","name":"_remoteToken","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"bridgeERC20To"},{"inputs":[{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"payable","type":"function","name":"bridgeETH"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"payable","type":"function","name":"bridgeETHTo"},{"inputs":[{"internalType":"address","name":"_l1Token","type":"address"},{"internalType":"address","name":"_l2Token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"depositERC20"},{"inputs":[{"internalType":"address","name":"_l1Token","type":"address"},{"internalType":"address","name":"_l2Token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"depositERC20To"},{"inputs":[{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"payable","type":"function","name":"depositETH"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"payable","type":"function","name":"depositETHTo"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"deposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"_localToken","type":"address"},{"internalType":"address","name":"_remoteToken","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"finalizeBridgeERC20"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"payable","type":"function","name":"finalizeBridgeETH"},{"inputs":[{"internalType":"address","name":"_l1Token","type":"address"},{"internalType":"address","name":"_l2Token","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"finalizeERC20Withdrawal"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"payable","type":"function","name":"finalizeETHWithdrawal"},{"inputs":[{"internalType":"contract CrossDomainMessenger","name":"_messenger","type":"address"},{"internalType":"contract SuperchainConfig","name":"_superchainConfig","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"l2TokenBridge","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"messenger","outputs":[{"internalType":"contract CrossDomainMessenger","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"otherBridge","outputs":[{"internalType":"contract StandardBridge","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"superchainConfig","outputs":[{"internalType":"contract SuperchainConfig","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"MESSENGER()":{"custom:legacy":"","returns":{"_0":"Contract of the messenger on this domain."}},"OTHER_BRIDGE()":{"custom:legacy":"","returns":{"_0":"Contract of the bridge on the other network."}},"bridgeERC20(address,address,uint256,uint32,bytes)":{"params":{"_amount":"Amount of local tokens to deposit.","_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_localToken":"Address of the ERC20 on this chain.","_minGasLimit":"Minimum amount of gas that the bridge can be relayed with.","_remoteToken":"Address of the corresponding token on the remote chain."}},"bridgeERC20To(address,address,address,uint256,uint32,bytes)":{"params":{"_amount":"Amount of local tokens to deposit.","_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_localToken":"Address of the ERC20 on this chain.","_minGasLimit":"Minimum amount of gas that the bridge can be relayed with.","_remoteToken":"Address of the corresponding token on the remote chain.","_to":"Address of the receiver."}},"bridgeETH(uint32,bytes)":{"params":{"_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_minGasLimit":"Minimum amount of gas that the bridge can be relayed with."}},"bridgeETHTo(address,uint32,bytes)":{"params":{"_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_minGasLimit":"Minimum amount of gas that the bridge can be relayed with.","_to":"Address of the receiver."}},"depositERC20(address,address,uint256,uint32,bytes)":{"custom:legacy":"@notice Deposits some amount of ERC20 tokens into the sender's account on L2.","params":{"_amount":"Amount of the ERC20 to deposit.","_extraData":"Optional data to forward to L2. Data supplied here will not be used to execute any code on L2 and is only emitted as extra data for the convenience of off-chain tooling.","_l1Token":"Address of the L1 token being deposited.","_l2Token":"Address of the corresponding token on L2.","_minGasLimit":"Minimum gas limit for the deposit message on L2."}},"depositERC20To(address,address,address,uint256,uint32,bytes)":{"custom:legacy":"@notice Deposits some amount of ERC20 tokens into a target account on L2.","params":{"_amount":"Amount of the ERC20 to deposit.","_extraData":"Optional data to forward to L2. Data supplied here will not be used to execute any code on L2 and is only emitted as extra data for the convenience of off-chain tooling.","_l1Token":"Address of the L1 token being deposited.","_l2Token":"Address of the corresponding token on L2.","_minGasLimit":"Minimum gas limit for the deposit message on L2.","_to":"Address of the recipient on L2."}},"depositETH(uint32,bytes)":{"custom:legacy":"@notice Deposits some amount of ETH into the sender's account on L2.","params":{"_extraData":"Optional data to forward to L2. Data supplied here will not be used to execute any code on L2 and is only emitted as extra data for the convenience of off-chain tooling.","_minGasLimit":"Minimum gas limit for the deposit message on L2."}},"depositETHTo(address,uint32,bytes)":{"custom:legacy":"@notice Deposits some amount of ETH into a target account on L2. Note that if ETH is sent to a contract on L2 and the call fails, then that ETH will be locked in the L2StandardBridge. ETH may be recoverable if the call can be successfully replayed by increasing the amount of gas supplied to the call. If the call will fail for any amount of gas, then the ETH will be locked permanently.","params":{"_extraData":"Optional data to forward to L2. Data supplied here will not be used to execute any code on L2 and is only emitted as extra data for the convenience of off-chain tooling.","_minGasLimit":"Minimum gas limit for the deposit message on L2.","_to":"Address of the recipient on L2."}},"finalizeBridgeERC20(address,address,address,address,uint256,bytes)":{"params":{"_amount":"Amount of the ERC20 being bridged.","_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_from":"Address of the sender.","_localToken":"Address of the ERC20 on this chain.","_remoteToken":"Address of the corresponding token on the remote chain.","_to":"Address of the receiver."}},"finalizeBridgeETH(address,address,uint256,bytes)":{"params":{"_amount":"Amount of ETH being bridged.","_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_from":"Address of the sender.","_to":"Address of the receiver."}},"finalizeERC20Withdrawal(address,address,address,address,uint256,bytes)":{"custom:legacy":"@notice Finalizes a withdrawal of ERC20 tokens from L2.","params":{"_amount":"Amount of the ERC20 to withdraw.","_extraData":"Optional data forwarded from L2.","_from":"Address of the withdrawer on L2.","_l1Token":"Address of the token on L1.","_l2Token":"Address of the corresponding token on L2.","_to":"Address of the recipient on L1."}},"finalizeETHWithdrawal(address,address,uint256,bytes)":{"custom:legacy":"@notice Finalizes a withdrawal of ETH from L2.","params":{"_amount":"Amount of ETH to withdraw.","_extraData":"Optional data forwarded from L2.","_from":"Address of the withdrawer on L2.","_to":"Address of the recipient on L1."}},"initialize(address,address)":{"params":{"_messenger":"Contract for the CrossDomainMessenger on this network.","_superchainConfig":"Contract for the SuperchainConfig on this network."}},"l2TokenBridge()":{"custom:legacy":"@notice Retrieves the access of the corresponding L2 bridge contract.","returns":{"_0":"Address of the corresponding L2 bridge contract."}},"paused()":{"returns":{"_0":"Whether or not the contract is paused."}}},"version":1},"userdoc":{"kind":"user","methods":{"MESSENGER()":{"notice":"Getter for messenger contract. Public getter is legacy and will be removed in the future. Use `messenger` instead."},"OTHER_BRIDGE()":{"notice":"Getter for the other bridge contract. Public getter is legacy and will be removed in the future. Use `otherBridge` instead."},"bridgeERC20(address,address,uint256,uint32,bytes)":{"notice":"Sends ERC20 tokens to the sender's address on the other chain."},"bridgeERC20To(address,address,address,uint256,uint32,bytes)":{"notice":"Sends ERC20 tokens to a receiver's address on the other chain."},"bridgeETH(uint32,bytes)":{"notice":"Sends ETH to the sender's address on the other chain."},"bridgeETHTo(address,uint32,bytes)":{"notice":"Sends ETH to a receiver's address on the other chain. Note that if ETH is sent to a smart contract and the call fails, the ETH will be temporarily locked in the StandardBridge on the other chain until the call is replayed. If the call cannot be replayed with any amount of gas (call always reverts), then the ETH will be permanently locked in the StandardBridge on the other chain. ETH will also be locked if the receiver is the other bridge, because finalizeBridgeETH will revert in that case."},"constructor":{"notice":"Constructs the L1StandardBridge contract."},"deposits(address,address)":{"notice":"Mapping that stores deposits for a given pair of local and remote tokens."},"finalizeBridgeERC20(address,address,address,address,uint256,bytes)":{"notice":"Finalizes an ERC20 bridge on this chain. Can only be triggered by the other StandardBridge contract on the remote chain."},"finalizeBridgeETH(address,address,uint256,bytes)":{"notice":"Finalizes an ETH bridge on this chain. Can only be triggered by the other StandardBridge contract on the remote chain."},"initialize(address,address)":{"notice":"Initializer."},"messenger()":{"notice":"Messenger contract on this domain."},"otherBridge()":{"notice":"Corresponding bridge on the other domain."},"paused()":{"notice":"This function should return true if the contract is paused. On L1 this function will check the SuperchainConfig for its paused status. On L2 this function should be a no-op."},"superchainConfig()":{"notice":"Address of the SuperchainConfig contract."},"version()":{"notice":"Semantic version."}},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","ds-test/=lib/forge-std/lib/ds-test/src/","forge-std/=lib/forge-std/src/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/L1/L1StandardBridge.sol":"L1StandardBridge"},"evmVersion":"london","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e","urls":["bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497","dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3","urls":["bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4","dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66","urls":["bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f","dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol":{"keccak256":"0x24b04b8aacaaf1a4a0719117b29c9c3647b1f479c5ac2a60f5ff1bb6d839c238","urls":["bzz-raw://43e46da9d9f49741ecd876a269e71bc7494058d7a8e9478429998adb5bc3eaa0","dweb:/ipfs/QmUtp4cqzf22C5rJ76AabKADquGWcjsc33yjYXxXC4sDvy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b","urls":["bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34","dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca","urls":["bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd","dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-IERC20Permit.sol":{"keccak256":"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329","urls":["bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95","dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x032807210d1d7d218963d7355d62e021a84bf1b3339f4f50be2f63b53cccaf29","urls":["bzz-raw://11756f42121f6541a35a8339ea899ee7514cfaa2e6d740625fcc844419296aa6","dweb:/ipfs/QmekMuk6BY4DAjzeXr4MSbKdgoqqsZnA8JPtuyWc6CwXHf"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10","urls":["bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487","dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7","urls":["bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92","dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165Checker.sol":{"keccak256":"0xc65c83c1039508fa7a42a09a3c6a32babd1c438ba4dbb23581255e784b5d5eed","urls":["bzz-raw://a1b3b38db0f76429db899909025e534c366415e9ea8b5ddc4c8901e6a7fc1461","dweb:/ipfs/QmYv1KxyHjLEky9JWNSsSfpGJbiCxFyzVFgTwQKpiqYGUg"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1","urls":["bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f","dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0","urls":["bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929","dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7","urls":["bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689","dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy"],"license":"MIT"},"lib/solmate/src/utils/FixedPointMathLib.sol":{"keccak256":"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d","urls":["bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c","dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8"],"license":"MIT"},"src/L1/L1StandardBridge.sol":{"keccak256":"0x2fdc6f6f464a24344847c81d394f502d000cd722f7ff21fa21104b5f7e392633","urls":["bzz-raw://393fd96446ab8fce3bb7d1134e6ff847bf9940e0eaa199accf01118c3917367f","dweb:/ipfs/QmX36camDYHu7pVzdjnfprinxPpZnjJehZXUKTyUdezKRK"],"license":"MIT"},"src/L1/ResourceMetering.sol":{"keccak256":"0xde3ac62c60f27a3f1ba06eec94f4eda45e7ec5544c6a5d6b79543a7184e44408","urls":["bzz-raw://265a2845c4ff0d9076dd0505755cf2bdf799f4fdc09ef016865a26b51f5c3409","dweb:/ipfs/QmRzSdBD8jmQf3U9u2ATRAzzuyo6c5ugz8VA5ZM4vzoGiM"],"license":"MIT"},"src/L1/SuperchainConfig.sol":{"keccak256":"0x5fab874f980fe3e52c3398ddd25b655c56af0c98c15588b2ad9ebf30671d859d","urls":["bzz-raw://4e0aa613d38eceb621f8569fc714f521bc1f2df3d029552186ab3cdf2ee5d53f","dweb:/ipfs/QmZDzFxhTXLW79eohQbr1nghNh3oNC4CUfH7uMX8CsjVAB"],"license":"MIT"},"src/libraries/Arithmetic.sol":{"keccak256":"0x91345e053584f82ad04d682ba821cf3ede808304f5b2a88116a894cf692c21db","urls":["bzz-raw://005e3c42d2edfca0a506cbda94d3b0104eddf20c00bd1bd25272f53f2ef74c72","dweb:/ipfs/QmdaW6Nge6NKoGvFqRpQjBpM2fXpc5y8WpZyBnDnKicdJq"],"license":"MIT"},"src/libraries/Burn.sol":{"keccak256":"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010","urls":["bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f","dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb"],"license":"MIT"},"src/libraries/Constants.sol":{"keccak256":"0xe0aeec7d6e5d1e44a11405d3b5bfc384ea092c39bea0b763ab937a26fd427132","urls":["bzz-raw://11aa3bff9da26ca2545132ec7994866690446a5321023811c254410d9593bd9b","dweb:/ipfs/QmVxWqadxvdfkqdrhfWisDqeAthibn4HEE1P6o9aFxXLhp"],"license":"MIT"},"src/libraries/Encoding.sol":{"keccak256":"0x1dafabcbd4877c7abe9698957b0a44b7e911cb8b11c1437a4ed897135669fa87","urls":["bzz-raw://6addfacefa26fdb44f56d73fa0172b97740de75629a962905ec2a20a28d40fff","dweb:/ipfs/QmboHMouqU19Rnbqrfo1gkfnuDBFcPiC9wsKgGtF2W1cNA"],"license":"MIT"},"src/libraries/Hashing.sol":{"keccak256":"0x89c07a0ca102cbe57b4e082543f2dd6dae0e1fd4a87908a334bd076fc914e7b8","urls":["bzz-raw://69c83489c9544ab442dc244c2feb2c6811b726a5eb5a509b97fc5ccb90b98c12","dweb:/ipfs/QmPGGJeLasc1HWHzd6odvWcNvFPQrbYtDubZcv8yp1HLtF"],"license":"MIT"},"src/libraries/Predeploys.sol":{"keccak256":"0x7b48b32b75e9ba0cd7f83b3304c6c1676dd8de20a5d40e8846bf7018ae9aff02","urls":["bzz-raw://7574fcc79c0d545b90071023aa81ee7880ab50b3057df598fa693bc4cf303663","dweb:/ipfs/QmWLxHzgfaTJ7thfb7khXkTY5UtSBZ5VTUB4DaAXVw7DRe"],"license":"MIT"},"src/libraries/SafeCall.sol":{"keccak256":"0x0636a7abb242bb5d6f5606967c8929e6aa7e63468c1e2ce40ad4780d4c4bf94f","urls":["bzz-raw://a4daec2ac8f9907bbf84ef0a1c48f03bae8657619bc6f42b3a672f25c516f17a","dweb:/ipfs/Qmf8gfRxBv8gEmCkP8YMPb2GGfj9QUnoNUyKE7UR2SWGnq"],"license":"MIT"},"src/libraries/Storage.sol":{"keccak256":"0x7ce27a05552aa69afa6b2ab6684dfe99f27366cf8ef2046baeb1fb62fff0022f","urls":["bzz-raw://a6a24f3ed56681720707a5ab0372fd67fcb1a4f6fb072c7140cda28bdb70f269","dweb:/ipfs/QmW9uTpUULV4xmP7A7MoBDeDhVfQgmJG5qVUFGtXxWpWWK"],"license":"MIT"},"src/libraries/Types.sol":{"keccak256":"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4","urls":["bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e","dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc"],"license":"MIT"},"src/libraries/rlp/RLPWriter.sol":{"keccak256":"0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6","urls":["bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b","dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV"],"license":"MIT"},"src/universal/CrossDomainMessenger.sol":{"keccak256":"0x330ae1479e88fc8a8b5b27a84df935a092a47ad13e59d9b9ea4982ad31bbe7b0","urls":["bzz-raw://66bf5fb4e78a03dcad4b9a8e2d5ed135f8e989aa02090747386843383fa6b7d1","dweb:/ipfs/QmTp66RoF6EaKeBrrZBuYAu3dsMfKo8de2XY9iHHnqfN3n"],"license":"MIT"},"src/universal/IOptimismMintableERC20.sol":{"keccak256":"0x6f8133b39efcbcbd5088f195dfacf1bedc3146508429c3865443909af735a04c","urls":["bzz-raw://adc36971e2e120458769f050428d9d2b0504516660345020c2521ee46e6d8abf","dweb:/ipfs/QmPbFusQkZgGKpU8Fv5JoqL4oVeJtM3yqnhRGLY9eZT5zZ"],"license":"MIT"},"src/universal/ISemver.sol":{"keccak256":"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44","urls":["bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a","dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR"],"license":"MIT"},"src/universal/OptimismMintableERC20.sol":{"keccak256":"0x18721f41a831ec39d47002e73ecc2aa3e6624f8d1ab7b9f25b53348e8b0765df","urls":["bzz-raw://2162fa7529a77b199a07f37fca26c778542f6c8805f0365f1ceef90c5cd3a3a7","dweb:/ipfs/QmaMmHJS52Bp95AGnrjh1zV7fLLqV3uAbFzkVLziMnPJYa"],"license":"MIT"},"src/universal/StandardBridge.sol":{"keccak256":"0x1a2f6afd7f14430ae2b797e09497c3dc860ed5db752e1847e30649668060c01d","urls":["bzz-raw://fefe1356cdeb5b324e4e63e1c723c08f9e244ef2ef133b9f5df0cc0d180eeaa8","dweb:/ipfs/QmZzR3zWKodwdwrdWwXUyh7G3qcFn2cjUQLrE45gRyQMn3"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":49534,"contract":"src/L1/L1StandardBridge.sol:L1StandardBridge","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":49537,"contract":"src/L1/L1StandardBridge.sol:L1StandardBridge","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":110944,"contract":"src/L1/L1StandardBridge.sol:L1StandardBridge","label":"spacer_0_2_30","offset":2,"slot":"0","type":"t_bytes30"},{"astId":110947,"contract":"src/L1/L1StandardBridge.sol:L1StandardBridge","label":"spacer_1_0_20","offset":0,"slot":"1","type":"t_address"},{"astId":110954,"contract":"src/L1/L1StandardBridge.sol:L1StandardBridge","label":"deposits","offset":0,"slot":"2","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":110958,"contract":"src/L1/L1StandardBridge.sol:L1StandardBridge","label":"messenger","offset":0,"slot":"3","type":"t_contract(CrossDomainMessenger)108888"},{"astId":110962,"contract":"src/L1/L1StandardBridge.sol:L1StandardBridge","label":"otherBridge","offset":0,"slot":"4","type":"t_contract(StandardBridge)111675"},{"astId":110967,"contract":"src/L1/L1StandardBridge.sol:L1StandardBridge","label":"__gap","offset":0,"slot":"5","type":"t_array(t_uint256)45_storage"},{"astId":85497,"contract":"src/L1/L1StandardBridge.sol:L1StandardBridge","label":"superchainConfig","offset":0,"slot":"50","type":"t_contract(SuperchainConfig)88793"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)45_storage":{"encoding":"inplace","label":"uint256[45]","numberOfBytes":"1440","base":"t_uint256"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes30":{"encoding":"inplace","label":"bytes30","numberOfBytes":"30"},"t_contract(CrossDomainMessenger)108888":{"encoding":"inplace","label":"contract CrossDomainMessenger","numberOfBytes":"20"},"t_contract(StandardBridge)111675":{"encoding":"inplace","label":"contract StandardBridge","numberOfBytes":"20"},"t_contract(SuperchainConfig)88793":{"encoding":"inplace","label":"contract SuperchainConfig","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"version":1,"kind":"user","methods":{"MESSENGER()":{"notice":"Getter for messenger contract. Public getter is legacy and will be removed in the future. Use `messenger` instead."},"OTHER_BRIDGE()":{"notice":"Getter for the other bridge contract. Public getter is legacy and will be removed in the future. Use `otherBridge` instead."},"bridgeERC20(address,address,uint256,uint32,bytes)":{"notice":"Sends ERC20 tokens to the sender's address on the other chain."},"bridgeERC20To(address,address,address,uint256,uint32,bytes)":{"notice":"Sends ERC20 tokens to a receiver's address on the other chain."},"bridgeETH(uint32,bytes)":{"notice":"Sends ETH to the sender's address on the other chain."},"bridgeETHTo(address,uint32,bytes)":{"notice":"Sends ETH to a receiver's address on the other chain. Note that if ETH is sent to a smart contract and the call fails, the ETH will be temporarily locked in the StandardBridge on the other chain until the call is replayed. If the call cannot be replayed with any amount of gas (call always reverts), then the ETH will be permanently locked in the StandardBridge on the other chain. ETH will also be locked if the receiver is the other bridge, because finalizeBridgeETH will revert in that case."},"constructor":{"notice":"Constructs the L1StandardBridge contract."},"deposits(address,address)":{"notice":"Mapping that stores deposits for a given pair of local and remote tokens."},"finalizeBridgeERC20(address,address,address,address,uint256,bytes)":{"notice":"Finalizes an ERC20 bridge on this chain. Can only be triggered by the other StandardBridge contract on the remote chain."},"finalizeBridgeETH(address,address,uint256,bytes)":{"notice":"Finalizes an ETH bridge on this chain. Can only be triggered by the other StandardBridge contract on the remote chain."},"initialize(address,address)":{"notice":"Initializer."},"messenger()":{"notice":"Messenger contract on this domain."},"otherBridge()":{"notice":"Corresponding bridge on the other domain."},"paused()":{"notice":"This function should return true if the contract is paused. On L1 this function will check the SuperchainConfig for its paused status. On L2 this function should be a no-op."},"superchainConfig()":{"notice":"Address of the SuperchainConfig contract."},"version()":{"notice":"Semantic version."}},"events":{"ERC20BridgeFinalized(address,address,address,address,uint256,bytes)":{"notice":"Emitted when an ERC20 bridge is finalized on this chain."},"ERC20BridgeInitiated(address,address,address,address,uint256,bytes)":{"notice":"Emitted when an ERC20 bridge is initiated to the other chain."},"ETHBridgeFinalized(address,address,uint256,bytes)":{"notice":"Emitted when an ETH bridge is finalized on this chain."},"ETHBridgeInitiated(address,address,uint256,bytes)":{"notice":"Emitted when an ETH bridge is initiated to the other chain."}},"notice":"The L1StandardBridge is responsible for transfering ETH and ERC20 tokens between L1 and L2. In the case that an ERC20 token is native to L1, it will be escrowed within this contract. If the ERC20 token is native to L2, it will be burnt. Before Bedrock, ETH was stored within this contract. After Bedrock, ETH is instead stored inside the OptimismPortal contract. NOTE: this contract is not intended to support all variations of ERC20 tokens. Examples of some token types that may not be properly supported by this contract include, but are not limited to: tokens with transfer fees, rebasing tokens, and tokens with blocklists."},"devdoc":{"version":1,"kind":"dev","methods":{"MESSENGER()":{"returns":{"_0":"Contract of the messenger on this domain."}},"OTHER_BRIDGE()":{"returns":{"_0":"Contract of the bridge on the other network."}},"bridgeERC20(address,address,uint256,uint32,bytes)":{"params":{"_amount":"Amount of local tokens to deposit.","_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_localToken":"Address of the ERC20 on this chain.","_minGasLimit":"Minimum amount of gas that the bridge can be relayed with.","_remoteToken":"Address of the corresponding token on the remote chain."}},"bridgeERC20To(address,address,address,uint256,uint32,bytes)":{"params":{"_amount":"Amount of local tokens to deposit.","_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_localToken":"Address of the ERC20 on this chain.","_minGasLimit":"Minimum amount of gas that the bridge can be relayed with.","_remoteToken":"Address of the corresponding token on the remote chain.","_to":"Address of the receiver."}},"bridgeETH(uint32,bytes)":{"params":{"_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_minGasLimit":"Minimum amount of gas that the bridge can be relayed with."}},"bridgeETHTo(address,uint32,bytes)":{"params":{"_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_minGasLimit":"Minimum amount of gas that the bridge can be relayed with.","_to":"Address of the receiver."}},"depositERC20(address,address,uint256,uint32,bytes)":{"params":{"_amount":"Amount of the ERC20 to deposit.","_extraData":"Optional data to forward to L2. Data supplied here will not be used to execute any code on L2 and is only emitted as extra data for the convenience of off-chain tooling.","_l1Token":"Address of the L1 token being deposited.","_l2Token":"Address of the corresponding token on L2.","_minGasLimit":"Minimum gas limit for the deposit message on L2."}},"depositERC20To(address,address,address,uint256,uint32,bytes)":{"params":{"_amount":"Amount of the ERC20 to deposit.","_extraData":"Optional data to forward to L2. Data supplied here will not be used to execute any code on L2 and is only emitted as extra data for the convenience of off-chain tooling.","_l1Token":"Address of the L1 token being deposited.","_l2Token":"Address of the corresponding token on L2.","_minGasLimit":"Minimum gas limit for the deposit message on L2.","_to":"Address of the recipient on L2."}},"depositETH(uint32,bytes)":{"params":{"_extraData":"Optional data to forward to L2. Data supplied here will not be used to execute any code on L2 and is only emitted as extra data for the convenience of off-chain tooling.","_minGasLimit":"Minimum gas limit for the deposit message on L2."}},"depositETHTo(address,uint32,bytes)":{"params":{"_extraData":"Optional data to forward to L2. Data supplied here will not be used to execute any code on L2 and is only emitted as extra data for the convenience of off-chain tooling.","_minGasLimit":"Minimum gas limit for the deposit message on L2.","_to":"Address of the recipient on L2."}},"finalizeBridgeERC20(address,address,address,address,uint256,bytes)":{"params":{"_amount":"Amount of the ERC20 being bridged.","_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_from":"Address of the sender.","_localToken":"Address of the ERC20 on this chain.","_remoteToken":"Address of the corresponding token on the remote chain.","_to":"Address of the receiver."}},"finalizeBridgeETH(address,address,uint256,bytes)":{"params":{"_amount":"Amount of ETH being bridged.","_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_from":"Address of the sender.","_to":"Address of the receiver."}},"finalizeERC20Withdrawal(address,address,address,address,uint256,bytes)":{"params":{"_amount":"Amount of the ERC20 to withdraw.","_extraData":"Optional data forwarded from L2.","_from":"Address of the withdrawer on L2.","_l1Token":"Address of the token on L1.","_l2Token":"Address of the corresponding token on L2.","_to":"Address of the recipient on L1."}},"finalizeETHWithdrawal(address,address,uint256,bytes)":{"params":{"_amount":"Amount of ETH to withdraw.","_extraData":"Optional data forwarded from L2.","_from":"Address of the withdrawer on L2.","_to":"Address of the recipient on L1."}},"initialize(address,address)":{"params":{"_messenger":"Contract for the CrossDomainMessenger on this network.","_superchainConfig":"Contract for the SuperchainConfig on this network."}},"l2TokenBridge()":{"returns":{"_0":"Address of the corresponding L2 bridge contract."}},"paused()":{"returns":{"_0":"Whether or not the contract is paused."}}},"events":{"ERC20DepositInitiated(address,address,address,address,uint256,bytes)":{"params":{"amount":"Amount of the ERC20 deposited.","extraData":"Extra data attached to the deposit.","from":"Address of the depositor.","l1Token":"Address of the token on L1.","l2Token":"Address of the corresponding token on L2.","to":"Address of the recipient on L2."}},"ERC20WithdrawalFinalized(address,address,address,address,uint256,bytes)":{"params":{"amount":"Amount of the ERC20 withdrawn.","extraData":"Extra data attached to the withdrawal.","from":"Address of the withdrawer.","l1Token":"Address of the token on L1.","l2Token":"Address of the corresponding token on L2.","to":"Address of the recipient on L1."}},"ETHDepositInitiated(address,address,uint256,bytes)":{"params":{"amount":"Amount of ETH deposited.","extraData":"Extra data attached to the deposit.","from":"Address of the depositor.","to":"Address of the recipient on L2."}},"ETHWithdrawalFinalized(address,address,uint256,bytes)":{"params":{"amount":"Amount of ETH withdrawn.","extraData":"Extra data attached to the withdrawal.","from":"Address of the withdrawer.","to":"Address of the recipient on L1."}}}},"ast":{"absolutePath":"src/L1/L1StandardBridge.sol","id":85922,"exportedSymbols":{"Constants":[103096],"CrossDomainMessenger":[108888],"ISemver":[109417],"L1StandardBridge":[85921],"Predeploys":[104124],"StandardBridge":[111675],"SuperchainConfig":[88793]},"nodeType":"SourceUnit","src":"32:13868:132","nodes":[{"id":85420,"nodeType":"PragmaDirective","src":"32:23:132","nodes":[],"literals":["solidity","0.8",".15"]},{"id":85422,"nodeType":"ImportDirective","src":"57:58:132","nodes":[],"absolutePath":"src/libraries/Predeploys.sol","file":"src/libraries/Predeploys.sol","nameLocation":"-1:-1:-1","scope":85922,"sourceUnit":104125,"symbolAliases":[{"foreign":{"id":85421,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"66:10:132","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":85424,"nodeType":"ImportDirective","src":"116:66:132","nodes":[],"absolutePath":"src/universal/StandardBridge.sol","file":"src/universal/StandardBridge.sol","nameLocation":"-1:-1:-1","scope":85922,"sourceUnit":111676,"symbolAliases":[{"foreign":{"id":85423,"name":"StandardBridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111675,"src":"125:14:132","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":85426,"nodeType":"ImportDirective","src":"183:52:132","nodes":[],"absolutePath":"src/universal/ISemver.sol","file":"src/universal/ISemver.sol","nameLocation":"-1:-1:-1","scope":85922,"sourceUnit":109418,"symbolAliases":[{"foreign":{"id":85425,"name":"ISemver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109417,"src":"192:7:132","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":85428,"nodeType":"ImportDirective","src":"236:78:132","nodes":[],"absolutePath":"src/universal/CrossDomainMessenger.sol","file":"src/universal/CrossDomainMessenger.sol","nameLocation":"-1:-1:-1","scope":85922,"sourceUnit":108889,"symbolAliases":[{"foreign":{"id":85427,"name":"CrossDomainMessenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108888,"src":"245:20:132","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":85430,"nodeType":"ImportDirective","src":"315:63:132","nodes":[],"absolutePath":"src/L1/SuperchainConfig.sol","file":"src/L1/SuperchainConfig.sol","nameLocation":"-1:-1:-1","scope":85922,"sourceUnit":88794,"symbolAliases":[{"foreign":{"id":85429,"name":"SuperchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":88793,"src":"324:16:132","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":85432,"nodeType":"ImportDirective","src":"379:56:132","nodes":[],"absolutePath":"src/libraries/Constants.sol","file":"src/libraries/Constants.sol","nameLocation":"-1:-1:-1","scope":85922,"sourceUnit":103097,"symbolAliases":[{"foreign":{"id":85431,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103096,"src":"388:9:132","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":85921,"nodeType":"ContractDefinition","src":"1209:12690:132","nodes":[{"id":85448,"nodeType":"EventDefinition","src":"1590:101:132","nodes":[],"anonymous":false,"documentation":{"id":85438,"nodeType":"StructuredDocumentation","src":"1268:317:132","text":"@custom:legacy\n @notice Emitted whenever a deposit of ETH from L1 into L2 is initiated.\n @param from Address of the depositor.\n @param to Address of the recipient on L2.\n @param amount Amount of ETH deposited.\n @param extraData Extra data attached to the deposit."},"eventSelector":"35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23","name":"ETHDepositInitiated","nameLocation":"1596:19:132","parameters":{"id":85447,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85440,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"1632:4:132","nodeType":"VariableDeclaration","scope":85448,"src":"1616:20:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85439,"name":"address","nodeType":"ElementaryTypeName","src":"1616:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85442,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"1654:2:132","nodeType":"VariableDeclaration","scope":85448,"src":"1638:18:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85441,"name":"address","nodeType":"ElementaryTypeName","src":"1638:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85444,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1666:6:132","nodeType":"VariableDeclaration","scope":85448,"src":"1658:14:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85443,"name":"uint256","nodeType":"ElementaryTypeName","src":"1658:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":85446,"indexed":false,"mutability":"mutable","name":"extraData","nameLocation":"1680:9:132","nodeType":"VariableDeclaration","scope":85448,"src":"1674:15:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":85445,"name":"bytes","nodeType":"ElementaryTypeName","src":"1674:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1615:75:132"}},{"id":85459,"nodeType":"EventDefinition","src":"2024:104:132","nodes":[],"anonymous":false,"documentation":{"id":85449,"nodeType":"StructuredDocumentation","src":"1697:322:132","text":"@custom:legacy\n @notice Emitted whenever a withdrawal of ETH from L2 to L1 is finalized.\n @param from Address of the withdrawer.\n @param to Address of the recipient on L1.\n @param amount Amount of ETH withdrawn.\n @param extraData Extra data attached to the withdrawal."},"eventSelector":"2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e631","name":"ETHWithdrawalFinalized","nameLocation":"2030:22:132","parameters":{"id":85458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85451,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"2069:4:132","nodeType":"VariableDeclaration","scope":85459,"src":"2053:20:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85450,"name":"address","nodeType":"ElementaryTypeName","src":"2053:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85453,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"2091:2:132","nodeType":"VariableDeclaration","scope":85459,"src":"2075:18:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85452,"name":"address","nodeType":"ElementaryTypeName","src":"2075:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85455,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2103:6:132","nodeType":"VariableDeclaration","scope":85459,"src":"2095:14:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85454,"name":"uint256","nodeType":"ElementaryTypeName","src":"2095:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":85457,"indexed":false,"mutability":"mutable","name":"extraData","nameLocation":"2117:9:132","nodeType":"VariableDeclaration","scope":85459,"src":"2111:15:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":85456,"name":"bytes","nodeType":"ElementaryTypeName","src":"2111:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2052:75:132"}},{"id":85474,"nodeType":"EventDefinition","src":"2566:199:132","nodes":[],"anonymous":false,"documentation":{"id":85460,"nodeType":"StructuredDocumentation","src":"2134:427:132","text":"@custom:legacy\n @notice Emitted whenever an ERC20 deposit is initiated.\n @param l1Token Address of the token on L1.\n @param l2Token Address of the corresponding token on L2.\n @param from Address of the depositor.\n @param to Address of the recipient on L2.\n @param amount Amount of the ERC20 deposited.\n @param extraData Extra data attached to the deposit."},"eventSelector":"718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d0396","name":"ERC20DepositInitiated","nameLocation":"2572:21:132","parameters":{"id":85473,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85462,"indexed":true,"mutability":"mutable","name":"l1Token","nameLocation":"2619:7:132","nodeType":"VariableDeclaration","scope":85474,"src":"2603:23:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85461,"name":"address","nodeType":"ElementaryTypeName","src":"2603:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85464,"indexed":true,"mutability":"mutable","name":"l2Token","nameLocation":"2652:7:132","nodeType":"VariableDeclaration","scope":85474,"src":"2636:23:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85463,"name":"address","nodeType":"ElementaryTypeName","src":"2636:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85466,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"2685:4:132","nodeType":"VariableDeclaration","scope":85474,"src":"2669:20:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85465,"name":"address","nodeType":"ElementaryTypeName","src":"2669:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85468,"indexed":false,"mutability":"mutable","name":"to","nameLocation":"2707:2:132","nodeType":"VariableDeclaration","scope":85474,"src":"2699:10:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85467,"name":"address","nodeType":"ElementaryTypeName","src":"2699:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85470,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2727:6:132","nodeType":"VariableDeclaration","scope":85474,"src":"2719:14:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85469,"name":"uint256","nodeType":"ElementaryTypeName","src":"2719:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":85472,"indexed":false,"mutability":"mutable","name":"extraData","nameLocation":"2749:9:132","nodeType":"VariableDeclaration","scope":85474,"src":"2743:15:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":85471,"name":"bytes","nodeType":"ElementaryTypeName","src":"2743:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2593:171:132"}},{"id":85489,"nodeType":"EventDefinition","src":"3210:202:132","nodes":[],"anonymous":false,"documentation":{"id":85475,"nodeType":"StructuredDocumentation","src":"2771:434:132","text":"@custom:legacy\n @notice Emitted whenever an ERC20 withdrawal is finalized.\n @param l1Token Address of the token on L1.\n @param l2Token Address of the corresponding token on L2.\n @param from Address of the withdrawer.\n @param to Address of the recipient on L1.\n @param amount Amount of the ERC20 withdrawn.\n @param extraData Extra data attached to the withdrawal."},"eventSelector":"3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3","name":"ERC20WithdrawalFinalized","nameLocation":"3216:24:132","parameters":{"id":85488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85477,"indexed":true,"mutability":"mutable","name":"l1Token","nameLocation":"3266:7:132","nodeType":"VariableDeclaration","scope":85489,"src":"3250:23:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85476,"name":"address","nodeType":"ElementaryTypeName","src":"3250:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85479,"indexed":true,"mutability":"mutable","name":"l2Token","nameLocation":"3299:7:132","nodeType":"VariableDeclaration","scope":85489,"src":"3283:23:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85478,"name":"address","nodeType":"ElementaryTypeName","src":"3283:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85481,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"3332:4:132","nodeType":"VariableDeclaration","scope":85489,"src":"3316:20:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85480,"name":"address","nodeType":"ElementaryTypeName","src":"3316:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85483,"indexed":false,"mutability":"mutable","name":"to","nameLocation":"3354:2:132","nodeType":"VariableDeclaration","scope":85489,"src":"3346:10:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85482,"name":"address","nodeType":"ElementaryTypeName","src":"3346:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85485,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"3374:6:132","nodeType":"VariableDeclaration","scope":85489,"src":"3366:14:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85484,"name":"uint256","nodeType":"ElementaryTypeName","src":"3366:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":85487,"indexed":false,"mutability":"mutable","name":"extraData","nameLocation":"3396:9:132","nodeType":"VariableDeclaration","scope":85489,"src":"3390:15:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":85486,"name":"bytes","nodeType":"ElementaryTypeName","src":"3390:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3240:171:132"}},{"id":85493,"nodeType":"VariableDeclaration","src":"3481:40:132","nodes":[],"baseFunctions":[109416],"constant":true,"documentation":{"id":85490,"nodeType":"StructuredDocumentation","src":"3418:58:132","text":"@notice Semantic version.\n @custom:semver 2.1.0"},"functionSelector":"54fd4d50","mutability":"constant","name":"version","nameLocation":"3504:7:132","scope":85921,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":85491,"name":"string","nodeType":"ElementaryTypeName","src":"3481:6:132","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"322e312e30","id":85492,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3514:7:132","typeDescriptions":{"typeIdentifier":"t_stringliteral_3bb4aeded157fe72f9bc813a9dc1bd69961c5b5f35dafc6dc601ab742eacac6b","typeString":"literal_string \"2.1.0\""},"value":"2.1.0"},"visibility":"public"},{"id":85497,"nodeType":"VariableDeclaration","src":"3586:40:132","nodes":[],"constant":false,"documentation":{"id":85494,"nodeType":"StructuredDocumentation","src":"3528:53:132","text":"@notice Address of the SuperchainConfig contract."},"functionSelector":"35e80ab3","mutability":"mutable","name":"superchainConfig","nameLocation":"3610:16:132","scope":85921,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"},"typeName":{"id":85496,"nodeType":"UserDefinedTypeName","pathNode":{"id":85495,"name":"SuperchainConfig","nodeType":"IdentifierPath","referencedDeclaration":88793,"src":"3586:16:132"},"referencedDeclaration":88793,"src":"3586:16:132","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"visibility":"public"},{"id":85519,"nodeType":"FunctionDefinition","src":"3691:157:132","nodes":[],"body":{"id":85518,"nodeType":"Block","src":"3722:126:132","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"hexValue":"30","id":85507,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3786:1:132","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":85506,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3778:7:132","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":85505,"name":"address","nodeType":"ElementaryTypeName","src":"3778:7:132","typeDescriptions":{}}},"id":85508,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3778:10:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":85504,"name":"CrossDomainMessenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108888,"src":"3757:20:132","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CrossDomainMessenger_$108888_$","typeString":"type(contract CrossDomainMessenger)"}},"id":85509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3757:32:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}},{"arguments":[{"arguments":[{"hexValue":"30","id":85513,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3835:1:132","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":85512,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3827:7:132","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":85511,"name":"address","nodeType":"ElementaryTypeName","src":"3827:7:132","typeDescriptions":{}}},"id":85514,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3827:10:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":85510,"name":"SuperchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":88793,"src":"3810:16:132","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SuperchainConfig_$88793_$","typeString":"type(contract SuperchainConfig)"}},"id":85515,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3810:28:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"},{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}],"id":85503,"name":"initialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85547,"src":"3732:10:132","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_CrossDomainMessenger_$108888_$_t_contract$_SuperchainConfig_$88793_$returns$__$","typeString":"function (contract CrossDomainMessenger,contract SuperchainConfig)"}},"id":85516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["_messenger","_superchainConfig"],"nodeType":"FunctionCall","src":"3732:109:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85517,"nodeType":"ExpressionStatement","src":"3732:109:132"}]},"documentation":{"id":85498,"nodeType":"StructuredDocumentation","src":"3633:53:132","text":"@notice Constructs the L1StandardBridge contract."},"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":85501,"kind":"baseConstructorSpecifier","modifierName":{"id":85500,"name":"StandardBridge","nodeType":"IdentifierPath","referencedDeclaration":111675,"src":"3705:14:132"},"nodeType":"ModifierInvocation","src":"3705:16:132"}],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":85499,"nodeType":"ParameterList","parameters":[],"src":"3702:2:132"},"returnParameters":{"id":85502,"nodeType":"ParameterList","parameters":[],"src":"3722:0:132"},"scope":85921,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":85547,"nodeType":"FunctionDefinition","src":"4055:322:132","nodes":[],"body":{"id":85546,"nodeType":"Block","src":"4163:214:132","nodes":[],"statements":[{"expression":{"id":85533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":85531,"name":"superchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85497,"src":"4173:16:132","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":85532,"name":"_superchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85526,"src":"4192:17:132","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"src":"4173:36:132","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"id":85534,"nodeType":"ExpressionStatement","src":"4173:36:132"},{"expression":{"arguments":[{"id":85536,"name":"_messenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85523,"src":"4267:10:132","typeDescriptions":{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}},{"arguments":[{"arguments":[{"expression":{"id":85540,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"4328:10:132","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Predeploys_$104124_$","typeString":"type(library Predeploys)"}},"id":85541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"L2_STANDARD_BRIDGE","nodeType":"MemberAccess","referencedDeclaration":104008,"src":"4328:29:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":85539,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4320:8:132","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":85538,"name":"address","nodeType":"ElementaryTypeName","src":"4320:8:132","stateMutability":"payable","typeDescriptions":{}}},"id":85542,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4320:38:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":85537,"name":"StandardBridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111675,"src":"4305:14:132","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StandardBridge_$111675_$","typeString":"type(contract StandardBridge)"}},"id":85543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4305:54:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_StandardBridge_$111675","typeString":"contract StandardBridge"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"},{"typeIdentifier":"t_contract$_StandardBridge_$111675","typeString":"contract StandardBridge"}],"id":85535,"name":"__StandardBridge_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111080,"src":"4219:21:132","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_CrossDomainMessenger_$108888_$_t_contract$_StandardBridge_$111675_$returns$__$","typeString":"function (contract CrossDomainMessenger,contract StandardBridge)"}},"id":85544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["_messenger","_otherBridge"],"nodeType":"FunctionCall","src":"4219:151:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85545,"nodeType":"ExpressionStatement","src":"4219:151:132"}]},"documentation":{"id":85520,"nodeType":"StructuredDocumentation","src":"3854:196:132","text":"@notice Initializer.\n @param _messenger Contract for the CrossDomainMessenger on this network.\n @param _superchainConfig Contract for the SuperchainConfig on this network."},"functionSelector":"485cc955","implemented":true,"kind":"function","modifiers":[{"id":85529,"kind":"modifierInvocation","modifierName":{"id":85528,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":49598,"src":"4151:11:132"},"nodeType":"ModifierInvocation","src":"4151:11:132"}],"name":"initialize","nameLocation":"4064:10:132","parameters":{"id":85527,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85523,"mutability":"mutable","name":"_messenger","nameLocation":"4096:10:132","nodeType":"VariableDeclaration","scope":85547,"src":"4075:31:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"},"typeName":{"id":85522,"nodeType":"UserDefinedTypeName","pathNode":{"id":85521,"name":"CrossDomainMessenger","nodeType":"IdentifierPath","referencedDeclaration":108888,"src":"4075:20:132"},"referencedDeclaration":108888,"src":"4075:20:132","typeDescriptions":{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}},"visibility":"internal"},{"constant":false,"id":85526,"mutability":"mutable","name":"_superchainConfig","nameLocation":"4125:17:132","nodeType":"VariableDeclaration","scope":85547,"src":"4108:34:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"},"typeName":{"id":85525,"nodeType":"UserDefinedTypeName","pathNode":{"id":85524,"name":"SuperchainConfig","nodeType":"IdentifierPath","referencedDeclaration":88793,"src":"4108:16:132"},"referencedDeclaration":88793,"src":"4108:16:132","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"visibility":"internal"}],"src":"4074:69:132"},"returnParameters":{"id":85530,"nodeType":"ParameterList","parameters":[],"src":"4163:0:132"},"scope":85921,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":85559,"nodeType":"FunctionDefinition","src":"4418:103:132","nodes":[],"body":{"id":85558,"nodeType":"Block","src":"4472:49:132","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":85554,"name":"superchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85497,"src":"4489:16:132","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"id":85555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"paused","nodeType":"MemberAccess","referencedDeclaration":88707,"src":"4489:23:132","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bool_$","typeString":"function () view external returns (bool)"}},"id":85556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4489:25:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":85553,"id":85557,"nodeType":"Return","src":"4482:32:132"}]},"baseFunctions":[111113],"documentation":{"id":85548,"nodeType":"StructuredDocumentation","src":"4383:30:132","text":"@inheritdoc StandardBridge"},"functionSelector":"5c975abb","implemented":true,"kind":"function","modifiers":[],"name":"paused","nameLocation":"4427:6:132","overrides":{"id":85550,"nodeType":"OverrideSpecifier","overrides":[],"src":"4448:8:132"},"parameters":{"id":85549,"nodeType":"ParameterList","parameters":[],"src":"4433:2:132"},"returnParameters":{"id":85553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85552,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":85559,"src":"4466:4:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":85551,"name":"bool","nodeType":"ElementaryTypeName","src":"4466:4:132","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4465:6:132"},"scope":85921,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":85579,"nodeType":"FunctionDefinition","src":"4604:142:132","nodes":[],"body":{"id":85578,"nodeType":"Block","src":"4648:98:132","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":85567,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4678:3:132","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":85568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"4678:10:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":85569,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4690:3:132","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":85570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"4690:10:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85571,"name":"RECEIVE_DEFAULT_GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110941,"src":"4702:25:132","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"arguments":[{"hexValue":"","id":85574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4735:2:132","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":85573,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4729:5:132","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":85572,"name":"bytes","nodeType":"ElementaryTypeName","src":"4729:5:132","typeDescriptions":{}}},"id":85575,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4729:9:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":85566,"name":"_initiateETHDeposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85755,"src":"4658:19:132","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,uint32,bytes memory)"}},"id":85576,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4658:81:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85577,"nodeType":"ExpressionStatement","src":"4658:81:132"}]},"baseFunctions":[111084],"documentation":{"id":85560,"nodeType":"StructuredDocumentation","src":"4527:72:132","text":"@notice Allows EOAs to bridge ETH by sending directly to the bridge."},"implemented":true,"kind":"receive","modifiers":[{"id":85564,"kind":"modifierInvocation","modifierName":{"id":85563,"name":"onlyEOA","nodeType":"IdentifierPath","referencedDeclaration":111034,"src":"4640:7:132"},"nodeType":"ModifierInvocation","src":"4640:7:132"}],"name":"","nameLocation":"-1:-1:-1","overrides":{"id":85562,"nodeType":"OverrideSpecifier","overrides":[],"src":"4631:8:132"},"parameters":{"id":85561,"nodeType":"ParameterList","parameters":[],"src":"4611:2:132"},"returnParameters":{"id":85565,"nodeType":"ParameterList","parameters":[],"src":"4648:0:132"},"scope":85921,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":85599,"nodeType":"FunctionDefinition","src":"5183:179:132","nodes":[],"body":{"id":85598,"nodeType":"Block","src":"5276:86:132","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":85590,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5306:3:132","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":85591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5306:10:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":85592,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5318:3:132","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":85593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5318:10:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85594,"name":"_minGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85582,"src":"5330:12:132","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":85595,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85584,"src":"5344:10:132","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":85589,"name":"_initiateETHDeposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85755,"src":"5286:19:132","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,uint32,bytes memory)"}},"id":85596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5286:69:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85597,"nodeType":"ExpressionStatement","src":"5286:69:132"}]},"documentation":{"id":85580,"nodeType":"StructuredDocumentation","src":"4752:426:132","text":"@custom:legacy\n @notice Deposits some amount of ETH into the sender's account on L2.\n @param _minGasLimit Minimum gas limit for the deposit message on L2.\n @param _extraData Optional data to forward to L2.\n Data supplied here will not be used to execute any code on L2 and is\n only emitted as extra data for the convenience of off-chain tooling."},"functionSelector":"b1a1a882","implemented":true,"kind":"function","modifiers":[{"id":85587,"kind":"modifierInvocation","modifierName":{"id":85586,"name":"onlyEOA","nodeType":"IdentifierPath","referencedDeclaration":111034,"src":"5268:7:132"},"nodeType":"ModifierInvocation","src":"5268:7:132"}],"name":"depositETH","nameLocation":"5192:10:132","parameters":{"id":85585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85582,"mutability":"mutable","name":"_minGasLimit","nameLocation":"5210:12:132","nodeType":"VariableDeclaration","scope":85599,"src":"5203:19:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":85581,"name":"uint32","nodeType":"ElementaryTypeName","src":"5203:6:132","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":85584,"mutability":"mutable","name":"_extraData","nameLocation":"5239:10:132","nodeType":"VariableDeclaration","scope":85599,"src":"5224:25:132","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":85583,"name":"bytes","nodeType":"ElementaryTypeName","src":"5224:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5202:48:132"},"returnParameters":{"id":85588,"nodeType":"ParameterList","parameters":[],"src":"5276:0:132"},"scope":85921,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":85618,"nodeType":"FunctionDefinition","src":"6242:179:132","nodes":[],"body":{"id":85617,"nodeType":"Block","src":"6342:79:132","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":85610,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6372:3:132","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":85611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6372:10:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85612,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85602,"src":"6384:3:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85613,"name":"_minGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85604,"src":"6389:12:132","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":85614,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85606,"src":"6403:10:132","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":85609,"name":"_initiateETHDeposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85755,"src":"6352:19:132","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,uint32,bytes memory)"}},"id":85615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6352:62:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85616,"nodeType":"ExpressionStatement","src":"6352:62:132"}]},"documentation":{"id":85600,"nodeType":"StructuredDocumentation","src":"5368:869:132","text":"@custom:legacy\n @notice Deposits some amount of ETH into a target account on L2.\n Note that if ETH is sent to a contract on L2 and the call fails, then that ETH will\n be locked in the L2StandardBridge. ETH may be recoverable if the call can be\n successfully replayed by increasing the amount of gas supplied to the call. If the\n call will fail for any amount of gas, then the ETH will be locked permanently.\n @param _to Address of the recipient on L2.\n @param _minGasLimit Minimum gas limit for the deposit message on L2.\n @param _extraData Optional data to forward to L2.\n Data supplied here will not be used to execute any code on L2 and is\n only emitted as extra data for the convenience of off-chain tooling."},"functionSelector":"9a2ac6d5","implemented":true,"kind":"function","modifiers":[],"name":"depositETHTo","nameLocation":"6251:12:132","parameters":{"id":85607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85602,"mutability":"mutable","name":"_to","nameLocation":"6272:3:132","nodeType":"VariableDeclaration","scope":85618,"src":"6264:11:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85601,"name":"address","nodeType":"ElementaryTypeName","src":"6264:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85604,"mutability":"mutable","name":"_minGasLimit","nameLocation":"6284:12:132","nodeType":"VariableDeclaration","scope":85618,"src":"6277:19:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":85603,"name":"uint32","nodeType":"ElementaryTypeName","src":"6277:6:132","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":85606,"mutability":"mutable","name":"_extraData","nameLocation":"6313:10:132","nodeType":"VariableDeclaration","scope":85618,"src":"6298:25:132","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":85605,"name":"bytes","nodeType":"ElementaryTypeName","src":"6298:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6263:61:132"},"returnParameters":{"id":85608,"nodeType":"ParameterList","parameters":[],"src":"6342:0:132"},"scope":85921,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":85647,"nodeType":"FunctionDefinition","src":"7066:339:132","nodes":[],"body":{"id":85646,"nodeType":"Block","src":"7288:117:132","nodes":[],"statements":[{"expression":{"arguments":[{"id":85635,"name":"_l1Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85621,"src":"7320:8:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85636,"name":"_l2Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85623,"src":"7330:8:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":85637,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7340:3:132","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":85638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"7340:10:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":85639,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7352:3:132","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":85640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"7352:10:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85641,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85625,"src":"7364:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":85642,"name":"_minGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85627,"src":"7373:12:132","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":85643,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85629,"src":"7387:10:132","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":85634,"name":"_initiateERC20Deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85784,"src":"7298:21:132","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,address,uint256,uint32,bytes memory)"}},"id":85644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7298:100:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85645,"nodeType":"ExpressionStatement","src":"7298:100:132"}]},"documentation":{"id":85619,"nodeType":"StructuredDocumentation","src":"6427:634:132","text":"@custom:legacy\n @notice Deposits some amount of ERC20 tokens into the sender's account on L2.\n @param _l1Token Address of the L1 token being deposited.\n @param _l2Token Address of the corresponding token on L2.\n @param _amount Amount of the ERC20 to deposit.\n @param _minGasLimit Minimum gas limit for the deposit message on L2.\n @param _extraData Optional data to forward to L2.\n Data supplied here will not be used to execute any code on L2 and is\n only emitted as extra data for the convenience of off-chain tooling."},"functionSelector":"58a997f6","implemented":true,"kind":"function","modifiers":[{"id":85632,"kind":"modifierInvocation","modifierName":{"id":85631,"name":"onlyEOA","nodeType":"IdentifierPath","referencedDeclaration":111034,"src":"7276:7:132"},"nodeType":"ModifierInvocation","src":"7276:7:132"}],"name":"depositERC20","nameLocation":"7075:12:132","parameters":{"id":85630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85621,"mutability":"mutable","name":"_l1Token","nameLocation":"7105:8:132","nodeType":"VariableDeclaration","scope":85647,"src":"7097:16:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85620,"name":"address","nodeType":"ElementaryTypeName","src":"7097:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85623,"mutability":"mutable","name":"_l2Token","nameLocation":"7131:8:132","nodeType":"VariableDeclaration","scope":85647,"src":"7123:16:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85622,"name":"address","nodeType":"ElementaryTypeName","src":"7123:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85625,"mutability":"mutable","name":"_amount","nameLocation":"7157:7:132","nodeType":"VariableDeclaration","scope":85647,"src":"7149:15:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85624,"name":"uint256","nodeType":"ElementaryTypeName","src":"7149:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":85627,"mutability":"mutable","name":"_minGasLimit","nameLocation":"7181:12:132","nodeType":"VariableDeclaration","scope":85647,"src":"7174:19:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":85626,"name":"uint32","nodeType":"ElementaryTypeName","src":"7174:6:132","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":85629,"mutability":"mutable","name":"_extraData","nameLocation":"7218:10:132","nodeType":"VariableDeclaration","scope":85647,"src":"7203:25:132","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":85628,"name":"bytes","nodeType":"ElementaryTypeName","src":"7203:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7087:147:132"},"returnParameters":{"id":85633,"nodeType":"ParameterList","parameters":[],"src":"7288:0:132"},"scope":85921,"stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"id":85675,"nodeType":"FunctionDefinition","src":"8106:339:132","nodes":[],"body":{"id":85674,"nodeType":"Block","src":"8335:110:132","nodes":[],"statements":[{"expression":{"arguments":[{"id":85664,"name":"_l1Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85650,"src":"8367:8:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85665,"name":"_l2Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85652,"src":"8377:8:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":85666,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8387:3:132","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":85667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"8387:10:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85668,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85654,"src":"8399:3:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85669,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85656,"src":"8404:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":85670,"name":"_minGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85658,"src":"8413:12:132","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":85671,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85660,"src":"8427:10:132","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":85663,"name":"_initiateERC20Deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85784,"src":"8345:21:132","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,address,uint256,uint32,bytes memory)"}},"id":85672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8345:93:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85673,"nodeType":"ExpressionStatement","src":"8345:93:132"}]},"documentation":{"id":85648,"nodeType":"StructuredDocumentation","src":"7411:690:132","text":"@custom:legacy\n @notice Deposits some amount of ERC20 tokens into a target account on L2.\n @param _l1Token Address of the L1 token being deposited.\n @param _l2Token Address of the corresponding token on L2.\n @param _to Address of the recipient on L2.\n @param _amount Amount of the ERC20 to deposit.\n @param _minGasLimit Minimum gas limit for the deposit message on L2.\n @param _extraData Optional data to forward to L2.\n Data supplied here will not be used to execute any code on L2 and is\n only emitted as extra data for the convenience of off-chain tooling."},"functionSelector":"838b2520","implemented":true,"kind":"function","modifiers":[],"name":"depositERC20To","nameLocation":"8115:14:132","parameters":{"id":85661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85650,"mutability":"mutable","name":"_l1Token","nameLocation":"8147:8:132","nodeType":"VariableDeclaration","scope":85675,"src":"8139:16:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85649,"name":"address","nodeType":"ElementaryTypeName","src":"8139:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85652,"mutability":"mutable","name":"_l2Token","nameLocation":"8173:8:132","nodeType":"VariableDeclaration","scope":85675,"src":"8165:16:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85651,"name":"address","nodeType":"ElementaryTypeName","src":"8165:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85654,"mutability":"mutable","name":"_to","nameLocation":"8199:3:132","nodeType":"VariableDeclaration","scope":85675,"src":"8191:11:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85653,"name":"address","nodeType":"ElementaryTypeName","src":"8191:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85656,"mutability":"mutable","name":"_amount","nameLocation":"8220:7:132","nodeType":"VariableDeclaration","scope":85675,"src":"8212:15:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85655,"name":"uint256","nodeType":"ElementaryTypeName","src":"8212:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":85658,"mutability":"mutable","name":"_minGasLimit","nameLocation":"8244:12:132","nodeType":"VariableDeclaration","scope":85675,"src":"8237:19:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":85657,"name":"uint32","nodeType":"ElementaryTypeName","src":"8237:6:132","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":85660,"mutability":"mutable","name":"_extraData","nameLocation":"8281:10:132","nodeType":"VariableDeclaration","scope":85675,"src":"8266:25:132","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":85659,"name":"bytes","nodeType":"ElementaryTypeName","src":"8266:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8129:168:132"},"returnParameters":{"id":85662,"nodeType":"ParameterList","parameters":[],"src":"8335:0:132"},"scope":85921,"stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"id":85695,"nodeType":"FunctionDefinition","src":"8758:245:132","nodes":[],"body":{"id":85694,"nodeType":"Block","src":"8936:67:132","nodes":[],"statements":[{"expression":{"arguments":[{"id":85688,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85678,"src":"8964:5:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85689,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85680,"src":"8971:3:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85690,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85682,"src":"8976:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":85691,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85684,"src":"8985:10:132","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":85687,"name":"finalizeBridgeETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111287,"src":"8946:17:132","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes calldata)"}},"id":85692,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8946:50:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85693,"nodeType":"ExpressionStatement","src":"8946:50:132"}]},"documentation":{"id":85676,"nodeType":"StructuredDocumentation","src":"8451:302:132","text":"@custom:legacy\n @notice Finalizes a withdrawal of ETH from L2.\n @param _from Address of the withdrawer on L2.\n @param _to Address of the recipient on L1.\n @param _amount Amount of ETH to withdraw.\n @param _extraData Optional data forwarded from L2."},"functionSelector":"1532ec34","implemented":true,"kind":"function","modifiers":[],"name":"finalizeETHWithdrawal","nameLocation":"8767:21:132","parameters":{"id":85685,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85678,"mutability":"mutable","name":"_from","nameLocation":"8806:5:132","nodeType":"VariableDeclaration","scope":85695,"src":"8798:13:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85677,"name":"address","nodeType":"ElementaryTypeName","src":"8798:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85680,"mutability":"mutable","name":"_to","nameLocation":"8829:3:132","nodeType":"VariableDeclaration","scope":85695,"src":"8821:11:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85679,"name":"address","nodeType":"ElementaryTypeName","src":"8821:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85682,"mutability":"mutable","name":"_amount","nameLocation":"8850:7:132","nodeType":"VariableDeclaration","scope":85695,"src":"8842:15:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85681,"name":"uint256","nodeType":"ElementaryTypeName","src":"8842:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":85684,"mutability":"mutable","name":"_extraData","nameLocation":"8882:10:132","nodeType":"VariableDeclaration","scope":85695,"src":"8867:25:132","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":85683,"name":"bytes","nodeType":"ElementaryTypeName","src":"8867:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8788:110:132"},"returnParameters":{"id":85686,"nodeType":"ParameterList","parameters":[],"src":"8936:0:132"},"scope":85921,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":85721,"nodeType":"FunctionDefinition","src":"9453:305:132","nodes":[],"body":{"id":85720,"nodeType":"Block","src":"9669:89:132","nodes":[],"statements":[{"expression":{"arguments":[{"id":85712,"name":"_l1Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85698,"src":"9699:8:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85713,"name":"_l2Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85700,"src":"9709:8:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85714,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85702,"src":"9719:5:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85715,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85704,"src":"9726:3:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85716,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85706,"src":"9731:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":85717,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85708,"src":"9740:10:132","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":85711,"name":"finalizeBridgeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111367,"src":"9679:19:132","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function (address,address,address,address,uint256,bytes calldata)"}},"id":85718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9679:72:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85719,"nodeType":"ExpressionStatement","src":"9679:72:132"}]},"documentation":{"id":85696,"nodeType":"StructuredDocumentation","src":"9009:439:132","text":"@custom:legacy\n @notice Finalizes a withdrawal of ERC20 tokens from L2.\n @param _l1Token Address of the token on L1.\n @param _l2Token Address of the corresponding token on L2.\n @param _from Address of the withdrawer on L2.\n @param _to Address of the recipient on L1.\n @param _amount Amount of the ERC20 to withdraw.\n @param _extraData Optional data forwarded from L2."},"functionSelector":"a9f9e675","implemented":true,"kind":"function","modifiers":[],"name":"finalizeERC20Withdrawal","nameLocation":"9462:23:132","parameters":{"id":85709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85698,"mutability":"mutable","name":"_l1Token","nameLocation":"9503:8:132","nodeType":"VariableDeclaration","scope":85721,"src":"9495:16:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85697,"name":"address","nodeType":"ElementaryTypeName","src":"9495:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85700,"mutability":"mutable","name":"_l2Token","nameLocation":"9529:8:132","nodeType":"VariableDeclaration","scope":85721,"src":"9521:16:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85699,"name":"address","nodeType":"ElementaryTypeName","src":"9521:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85702,"mutability":"mutable","name":"_from","nameLocation":"9555:5:132","nodeType":"VariableDeclaration","scope":85721,"src":"9547:13:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85701,"name":"address","nodeType":"ElementaryTypeName","src":"9547:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85704,"mutability":"mutable","name":"_to","nameLocation":"9578:3:132","nodeType":"VariableDeclaration","scope":85721,"src":"9570:11:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85703,"name":"address","nodeType":"ElementaryTypeName","src":"9570:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85706,"mutability":"mutable","name":"_amount","nameLocation":"9599:7:132","nodeType":"VariableDeclaration","scope":85721,"src":"9591:15:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85705,"name":"uint256","nodeType":"ElementaryTypeName","src":"9591:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":85708,"mutability":"mutable","name":"_extraData","nameLocation":"9631:10:132","nodeType":"VariableDeclaration","scope":85721,"src":"9616:25:132","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":85707,"name":"bytes","nodeType":"ElementaryTypeName","src":"9616:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9485:162:132"},"returnParameters":{"id":85710,"nodeType":"ParameterList","parameters":[],"src":"9669:0:132"},"scope":85921,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":85733,"nodeType":"FunctionDefinition","src":"9930:101:132","nodes":[],"body":{"id":85732,"nodeType":"Block","src":"9987:44:132","nodes":[],"statements":[{"expression":{"arguments":[{"id":85729,"name":"otherBridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110962,"src":"10012:11:132","typeDescriptions":{"typeIdentifier":"t_contract$_StandardBridge_$111675","typeString":"contract StandardBridge"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_StandardBridge_$111675","typeString":"contract StandardBridge"}],"id":85728,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10004:7:132","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":85727,"name":"address","nodeType":"ElementaryTypeName","src":"10004:7:132","typeDescriptions":{}}},"id":85730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10004:20:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":85726,"id":85731,"nodeType":"Return","src":"9997:27:132"}]},"documentation":{"id":85722,"nodeType":"StructuredDocumentation","src":"9764:161:132","text":"@custom:legacy\n @notice Retrieves the access of the corresponding L2 bridge contract.\n @return Address of the corresponding L2 bridge contract."},"functionSelector":"91c49bf8","implemented":true,"kind":"function","modifiers":[],"name":"l2TokenBridge","nameLocation":"9939:13:132","parameters":{"id":85723,"nodeType":"ParameterList","parameters":[],"src":"9952:2:132"},"returnParameters":{"id":85726,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85725,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":85733,"src":"9978:7:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85724,"name":"address","nodeType":"ElementaryTypeName","src":"9978:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9977:9:132"},"scope":85921,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":85755,"nodeType":"FunctionDefinition","src":"10356:196:132","nodes":[],"body":{"id":85754,"nodeType":"Block","src":"10468:84:132","nodes":[],"statements":[{"expression":{"arguments":[{"id":85746,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85736,"src":"10497:5:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85747,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85738,"src":"10504:3:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":85748,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10509:3:132","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":85749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"10509:9:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":85750,"name":"_minGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85740,"src":"10520:12:132","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":85751,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85742,"src":"10534:10:132","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":85745,"name":"_initiateBridgeETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111419,"src":"10478:18:132","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,uint32,bytes memory)"}},"id":85752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10478:67:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85753,"nodeType":"ExpressionStatement","src":"10478:67:132"}]},"documentation":{"id":85734,"nodeType":"StructuredDocumentation","src":"10037:314:132","text":"@notice Internal function for initiating an ETH deposit.\n @param _from Address of the sender on L1.\n @param _to Address of the recipient on L2.\n @param _minGasLimit Minimum gas limit for the deposit message on L2.\n @param _extraData Optional data to forward to L2."},"implemented":true,"kind":"function","modifiers":[],"name":"_initiateETHDeposit","nameLocation":"10365:19:132","parameters":{"id":85743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85736,"mutability":"mutable","name":"_from","nameLocation":"10393:5:132","nodeType":"VariableDeclaration","scope":85755,"src":"10385:13:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85735,"name":"address","nodeType":"ElementaryTypeName","src":"10385:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85738,"mutability":"mutable","name":"_to","nameLocation":"10408:3:132","nodeType":"VariableDeclaration","scope":85755,"src":"10400:11:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85737,"name":"address","nodeType":"ElementaryTypeName","src":"10400:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85740,"mutability":"mutable","name":"_minGasLimit","nameLocation":"10420:12:132","nodeType":"VariableDeclaration","scope":85755,"src":"10413:19:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":85739,"name":"uint32","nodeType":"ElementaryTypeName","src":"10413:6:132","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":85742,"mutability":"mutable","name":"_extraData","nameLocation":"10447:10:132","nodeType":"VariableDeclaration","scope":85755,"src":"10434:23:132","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":85741,"name":"bytes","nodeType":"ElementaryTypeName","src":"10434:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10384:74:132"},"returnParameters":{"id":85744,"nodeType":"ParameterList","parameters":[],"src":"10468:0:132"},"scope":85921,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":85784,"nodeType":"FunctionDefinition","src":"11078:345:132","nodes":[],"body":{"id":85783,"nodeType":"Block","src":"11319:104:132","nodes":[],"statements":[{"expression":{"arguments":[{"id":85774,"name":"_l1Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85758,"src":"11350:8:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85775,"name":"_l2Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85760,"src":"11360:8:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85776,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85762,"src":"11370:5:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85777,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85764,"src":"11377:3:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85778,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85766,"src":"11382:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":85779,"name":"_minGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85768,"src":"11391:12:132","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":85780,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85770,"src":"11405:10:132","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":85773,"name":"_initiateBridgeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111517,"src":"11329:20:132","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,address,uint256,uint32,bytes memory)"}},"id":85781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11329:87:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85782,"nodeType":"ExpressionStatement","src":"11329:87:132"}]},"documentation":{"id":85756,"nodeType":"StructuredDocumentation","src":"10558:515:132","text":"@notice Internal function for initiating an ERC20 deposit.\n @param _l1Token Address of the L1 token being deposited.\n @param _l2Token Address of the corresponding token on L2.\n @param _from Address of the sender on L1.\n @param _to Address of the recipient on L2.\n @param _amount Amount of the ERC20 to deposit.\n @param _minGasLimit Minimum gas limit for the deposit message on L2.\n @param _extraData Optional data to forward to L2."},"implemented":true,"kind":"function","modifiers":[],"name":"_initiateERC20Deposit","nameLocation":"11087:21:132","parameters":{"id":85771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85758,"mutability":"mutable","name":"_l1Token","nameLocation":"11126:8:132","nodeType":"VariableDeclaration","scope":85784,"src":"11118:16:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85757,"name":"address","nodeType":"ElementaryTypeName","src":"11118:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85760,"mutability":"mutable","name":"_l2Token","nameLocation":"11152:8:132","nodeType":"VariableDeclaration","scope":85784,"src":"11144:16:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85759,"name":"address","nodeType":"ElementaryTypeName","src":"11144:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85762,"mutability":"mutable","name":"_from","nameLocation":"11178:5:132","nodeType":"VariableDeclaration","scope":85784,"src":"11170:13:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85761,"name":"address","nodeType":"ElementaryTypeName","src":"11170:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85764,"mutability":"mutable","name":"_to","nameLocation":"11201:3:132","nodeType":"VariableDeclaration","scope":85784,"src":"11193:11:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85763,"name":"address","nodeType":"ElementaryTypeName","src":"11193:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85766,"mutability":"mutable","name":"_amount","nameLocation":"11222:7:132","nodeType":"VariableDeclaration","scope":85784,"src":"11214:15:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85765,"name":"uint256","nodeType":"ElementaryTypeName","src":"11214:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":85768,"mutability":"mutable","name":"_minGasLimit","nameLocation":"11246:12:132","nodeType":"VariableDeclaration","scope":85784,"src":"11239:19:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":85767,"name":"uint32","nodeType":"ElementaryTypeName","src":"11239:6:132","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":85770,"mutability":"mutable","name":"_extraData","nameLocation":"11281:10:132","nodeType":"VariableDeclaration","scope":85784,"src":"11268:23:132","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":85769,"name":"bytes","nodeType":"ElementaryTypeName","src":"11268:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11108:189:132"},"returnParameters":{"id":85772,"nodeType":"ParameterList","parameters":[],"src":"11319:0:132"},"scope":85921,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":85814,"nodeType":"FunctionDefinition","src":"11651:325:132","nodes":[],"body":{"id":85813,"nodeType":"Block","src":"11830:146:132","nodes":[],"statements":[{"eventCall":{"arguments":[{"id":85798,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85787,"src":"11865:5:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85799,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85789,"src":"11872:3:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85800,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85791,"src":"11877:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":85801,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85793,"src":"11886:10:132","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":85797,"name":"ETHDepositInitiated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85448,"src":"11845:19:132","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory)"}},"id":85802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11845:52:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85803,"nodeType":"EmitStatement","src":"11840:57:132"},{"expression":{"arguments":[{"id":85807,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85787,"src":"11937:5:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85808,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85789,"src":"11944:3:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85809,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85791,"src":"11949:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":85810,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85793,"src":"11958:10:132","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":85804,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"11907:5:132","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_L1StandardBridge_$85921_$","typeString":"type(contract super L1StandardBridge)"}},"id":85806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_emitETHBridgeInitiated","nodeType":"MemberAccess","referencedDeclaration":111602,"src":"11907:29:132","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory)"}},"id":85811,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11907:62:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85812,"nodeType":"ExpressionStatement","src":"11907:62:132"}]},"baseFunctions":[111602],"documentation":{"id":85785,"nodeType":"StructuredDocumentation","src":"11429:217:132","text":"@inheritdoc StandardBridge\n @notice Emits the legacy ETHDepositInitiated event followed by the ETHBridgeInitiated event.\n This is necessary for backwards compatibility with the legacy bridge."},"implemented":true,"kind":"function","modifiers":[],"name":"_emitETHBridgeInitiated","nameLocation":"11660:23:132","overrides":{"id":85795,"nodeType":"OverrideSpecifier","overrides":[],"src":"11817:8:132"},"parameters":{"id":85794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85787,"mutability":"mutable","name":"_from","nameLocation":"11701:5:132","nodeType":"VariableDeclaration","scope":85814,"src":"11693:13:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85786,"name":"address","nodeType":"ElementaryTypeName","src":"11693:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85789,"mutability":"mutable","name":"_to","nameLocation":"11724:3:132","nodeType":"VariableDeclaration","scope":85814,"src":"11716:11:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85788,"name":"address","nodeType":"ElementaryTypeName","src":"11716:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85791,"mutability":"mutable","name":"_amount","nameLocation":"11745:7:132","nodeType":"VariableDeclaration","scope":85814,"src":"11737:15:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85790,"name":"uint256","nodeType":"ElementaryTypeName","src":"11737:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":85793,"mutability":"mutable","name":"_extraData","nameLocation":"11775:10:132","nodeType":"VariableDeclaration","scope":85814,"src":"11762:23:132","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":85792,"name":"bytes","nodeType":"ElementaryTypeName","src":"11762:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11683:108:132"},"returnParameters":{"id":85796,"nodeType":"ParameterList","parameters":[],"src":"11830:0:132"},"scope":85921,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":85844,"nodeType":"FunctionDefinition","src":"12208:328:132","nodes":[],"body":{"id":85843,"nodeType":"Block","src":"12387:149:132","nodes":[],"statements":[{"eventCall":{"arguments":[{"id":85828,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85817,"src":"12425:5:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85829,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85819,"src":"12432:3:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85830,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85821,"src":"12437:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":85831,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85823,"src":"12446:10:132","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":85827,"name":"ETHWithdrawalFinalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85459,"src":"12402:22:132","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory)"}},"id":85832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12402:55:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85833,"nodeType":"EmitStatement","src":"12397:60:132"},{"expression":{"arguments":[{"id":85837,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85817,"src":"12497:5:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85838,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85819,"src":"12504:3:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85839,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85821,"src":"12509:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":85840,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85823,"src":"12518:10:132","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":85834,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"12467:5:132","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_L1StandardBridge_$85921_$","typeString":"type(contract super L1StandardBridge)"}},"id":85836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_emitETHBridgeFinalized","nodeType":"MemberAccess","referencedDeclaration":111622,"src":"12467:29:132","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory)"}},"id":85841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12467:62:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85842,"nodeType":"ExpressionStatement","src":"12467:62:132"}]},"baseFunctions":[111622],"documentation":{"id":85815,"nodeType":"StructuredDocumentation","src":"11982:221:132","text":"@inheritdoc StandardBridge\n @notice Emits the legacy ERC20DepositInitiated event followed by the ERC20BridgeInitiated\n event. This is necessary for backwards compatibility with the legacy bridge."},"implemented":true,"kind":"function","modifiers":[],"name":"_emitETHBridgeFinalized","nameLocation":"12217:23:132","overrides":{"id":85825,"nodeType":"OverrideSpecifier","overrides":[],"src":"12374:8:132"},"parameters":{"id":85824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85817,"mutability":"mutable","name":"_from","nameLocation":"12258:5:132","nodeType":"VariableDeclaration","scope":85844,"src":"12250:13:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85816,"name":"address","nodeType":"ElementaryTypeName","src":"12250:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85819,"mutability":"mutable","name":"_to","nameLocation":"12281:3:132","nodeType":"VariableDeclaration","scope":85844,"src":"12273:11:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85818,"name":"address","nodeType":"ElementaryTypeName","src":"12273:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85821,"mutability":"mutable","name":"_amount","nameLocation":"12302:7:132","nodeType":"VariableDeclaration","scope":85844,"src":"12294:15:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85820,"name":"uint256","nodeType":"ElementaryTypeName","src":"12294:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":85823,"mutability":"mutable","name":"_extraData","nameLocation":"12332:10:132","nodeType":"VariableDeclaration","scope":85844,"src":"12319:23:132","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":85822,"name":"bytes","nodeType":"ElementaryTypeName","src":"12319:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"12240:108:132"},"returnParameters":{"id":85826,"nodeType":"ParameterList","parameters":[],"src":"12387:0:132"},"scope":85921,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":85882,"nodeType":"FunctionDefinition","src":"12771:444:132","nodes":[],"body":{"id":85881,"nodeType":"Block","src":"13011:204:132","nodes":[],"statements":[{"eventCall":{"arguments":[{"id":85862,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85847,"src":"13048:11:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85863,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85849,"src":"13061:12:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85864,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85851,"src":"13075:5:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85865,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85853,"src":"13082:3:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85866,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85855,"src":"13087:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":85867,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85857,"src":"13096:10:132","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":85861,"name":"ERC20DepositInitiated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85474,"src":"13026:21:132","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,address,uint256,bytes memory)"}},"id":85868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13026:81:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85869,"nodeType":"EmitStatement","src":"13021:86:132"},{"expression":{"arguments":[{"id":85873,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85847,"src":"13149:11:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85874,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85849,"src":"13162:12:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85875,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85851,"src":"13176:5:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85876,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85853,"src":"13183:3:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85877,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85855,"src":"13188:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":85878,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85857,"src":"13197:10:132","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":85870,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"13117:5:132","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_L1StandardBridge_$85921_$","typeString":"type(contract super L1StandardBridge)"}},"id":85872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_emitERC20BridgeInitiated","nodeType":"MemberAccess","referencedDeclaration":111648,"src":"13117:31:132","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,address,uint256,bytes memory)"}},"id":85879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13117:91:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85880,"nodeType":"ExpressionStatement","src":"13117:91:132"}]},"baseFunctions":[111648],"documentation":{"id":85845,"nodeType":"StructuredDocumentation","src":"12542:224:132","text":"@inheritdoc StandardBridge\n @notice Emits the legacy ERC20WithdrawalFinalized event followed by the ERC20BridgeFinalized\n event. This is necessary for backwards compatibility with the legacy bridge."},"implemented":true,"kind":"function","modifiers":[],"name":"_emitERC20BridgeInitiated","nameLocation":"12780:25:132","overrides":{"id":85859,"nodeType":"OverrideSpecifier","overrides":[],"src":"12998:8:132"},"parameters":{"id":85858,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85847,"mutability":"mutable","name":"_localToken","nameLocation":"12823:11:132","nodeType":"VariableDeclaration","scope":85882,"src":"12815:19:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85846,"name":"address","nodeType":"ElementaryTypeName","src":"12815:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85849,"mutability":"mutable","name":"_remoteToken","nameLocation":"12852:12:132","nodeType":"VariableDeclaration","scope":85882,"src":"12844:20:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85848,"name":"address","nodeType":"ElementaryTypeName","src":"12844:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85851,"mutability":"mutable","name":"_from","nameLocation":"12882:5:132","nodeType":"VariableDeclaration","scope":85882,"src":"12874:13:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85850,"name":"address","nodeType":"ElementaryTypeName","src":"12874:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85853,"mutability":"mutable","name":"_to","nameLocation":"12905:3:132","nodeType":"VariableDeclaration","scope":85882,"src":"12897:11:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85852,"name":"address","nodeType":"ElementaryTypeName","src":"12897:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85855,"mutability":"mutable","name":"_amount","nameLocation":"12926:7:132","nodeType":"VariableDeclaration","scope":85882,"src":"12918:15:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85854,"name":"uint256","nodeType":"ElementaryTypeName","src":"12918:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":85857,"mutability":"mutable","name":"_extraData","nameLocation":"12956:10:132","nodeType":"VariableDeclaration","scope":85882,"src":"12943:23:132","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":85856,"name":"bytes","nodeType":"ElementaryTypeName","src":"12943:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"12805:167:132"},"returnParameters":{"id":85860,"nodeType":"ParameterList","parameters":[],"src":"13011:0:132"},"scope":85921,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":85920,"nodeType":"FunctionDefinition","src":"13450:447:132","nodes":[],"body":{"id":85919,"nodeType":"Block","src":"13690:207:132","nodes":[],"statements":[{"eventCall":{"arguments":[{"id":85900,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85885,"src":"13730:11:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85901,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85887,"src":"13743:12:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85902,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85889,"src":"13757:5:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85903,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85891,"src":"13764:3:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85904,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85893,"src":"13769:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":85905,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85895,"src":"13778:10:132","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":85899,"name":"ERC20WithdrawalFinalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85489,"src":"13705:24:132","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,address,uint256,bytes memory)"}},"id":85906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13705:84:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85907,"nodeType":"EmitStatement","src":"13700:89:132"},{"expression":{"arguments":[{"id":85911,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85885,"src":"13831:11:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85912,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85887,"src":"13844:12:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85913,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85889,"src":"13858:5:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85914,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85891,"src":"13865:3:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":85915,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85893,"src":"13870:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":85916,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85895,"src":"13879:10:132","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":85908,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"13799:5:132","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_L1StandardBridge_$85921_$","typeString":"type(contract super L1StandardBridge)"}},"id":85910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_emitERC20BridgeFinalized","nodeType":"MemberAccess","referencedDeclaration":111674,"src":"13799:31:132","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,address,uint256,bytes memory)"}},"id":85917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13799:91:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":85918,"nodeType":"ExpressionStatement","src":"13799:91:132"}]},"baseFunctions":[111674],"documentation":{"id":85883,"nodeType":"StructuredDocumentation","src":"13221:224:132","text":"@inheritdoc StandardBridge\n @notice Emits the legacy ERC20WithdrawalFinalized event followed by the ERC20BridgeFinalized\n event. This is necessary for backwards compatibility with the legacy bridge."},"implemented":true,"kind":"function","modifiers":[],"name":"_emitERC20BridgeFinalized","nameLocation":"13459:25:132","overrides":{"id":85897,"nodeType":"OverrideSpecifier","overrides":[],"src":"13677:8:132"},"parameters":{"id":85896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85885,"mutability":"mutable","name":"_localToken","nameLocation":"13502:11:132","nodeType":"VariableDeclaration","scope":85920,"src":"13494:19:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85884,"name":"address","nodeType":"ElementaryTypeName","src":"13494:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85887,"mutability":"mutable","name":"_remoteToken","nameLocation":"13531:12:132","nodeType":"VariableDeclaration","scope":85920,"src":"13523:20:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85886,"name":"address","nodeType":"ElementaryTypeName","src":"13523:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85889,"mutability":"mutable","name":"_from","nameLocation":"13561:5:132","nodeType":"VariableDeclaration","scope":85920,"src":"13553:13:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85888,"name":"address","nodeType":"ElementaryTypeName","src":"13553:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85891,"mutability":"mutable","name":"_to","nameLocation":"13584:3:132","nodeType":"VariableDeclaration","scope":85920,"src":"13576:11:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85890,"name":"address","nodeType":"ElementaryTypeName","src":"13576:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":85893,"mutability":"mutable","name":"_amount","nameLocation":"13605:7:132","nodeType":"VariableDeclaration","scope":85920,"src":"13597:15:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85892,"name":"uint256","nodeType":"ElementaryTypeName","src":"13597:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":85895,"mutability":"mutable","name":"_extraData","nameLocation":"13635:10:132","nodeType":"VariableDeclaration","scope":85920,"src":"13622:23:132","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":85894,"name":"bytes","nodeType":"ElementaryTypeName","src":"13622:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"13484:167:132"},"returnParameters":{"id":85898,"nodeType":"ParameterList","parameters":[],"src":"13690:0:132"},"scope":85921,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":85434,"name":"StandardBridge","nodeType":"IdentifierPath","referencedDeclaration":111675,"src":"1238:14:132"},"id":85435,"nodeType":"InheritanceSpecifier","src":"1238:14:132"},{"baseName":{"id":85436,"name":"ISemver","nodeType":"IdentifierPath","referencedDeclaration":109417,"src":"1254:7:132"},"id":85437,"nodeType":"InheritanceSpecifier","src":"1254:7:132"}],"canonicalName":"L1StandardBridge","contractDependencies":[],"contractKind":"contract","documentation":{"id":85433,"nodeType":"StructuredDocumentation","src":"437:772:132","text":"@custom:proxied\n @title L1StandardBridge\n @notice The L1StandardBridge is responsible for transfering ETH and ERC20 tokens between L1 and\n L2. In the case that an ERC20 token is native to L1, it will be escrowed within this\n contract. If the ERC20 token is native to L2, it will be burnt. Before Bedrock, ETH was\n stored within this contract. After Bedrock, ETH is instead stored inside the\n OptimismPortal contract.\n NOTE: this contract is not intended to support all variations of ERC20 tokens. Examples\n of some token types that may not be properly supported by this contract include, but are\n not limited to: tokens with transfer fees, rebasing tokens, and tokens with blocklists."},"fullyImplemented":true,"linearizedBaseContracts":[85921,109417,111675,49678],"name":"L1StandardBridge","nameLocation":"1218:16:132","scope":85922,"usedErrors":[]}],"license":"MIT"},"id":132} \ No newline at end of file diff --git a/packages/sdk/src/forge-artifacts/L2CrossDomainMessenger.json b/packages/sdk/src/forge-artifacts/L2CrossDomainMessenger.json deleted file mode 100644 index 9877d7506eb5..000000000000 --- a/packages/sdk/src/forge-artifacts/L2CrossDomainMessenger.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"MESSAGE_VERSION","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"MIN_GAS_CALLDATA_OVERHEAD","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"OTHER_MESSENGER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract CrossDomainMessenger"}],"stateMutability":"view"},{"type":"function","name":"RELAY_CALL_OVERHEAD","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"RELAY_CONSTANT_OVERHEAD","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"RELAY_GAS_CHECK_BUFFER","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"RELAY_RESERVED_GAS","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"baseGas","inputs":[{"name":"_message","type":"bytes","internalType":"bytes"},{"name":"_minGasLimit","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"pure"},{"type":"function","name":"failedMessages","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_l1CrossDomainMessenger","type":"address","internalType":"contract CrossDomainMessenger"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"l1CrossDomainMessenger","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract CrossDomainMessenger"}],"stateMutability":"view"},{"type":"function","name":"messageNonce","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"otherMessenger","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract CrossDomainMessenger"}],"stateMutability":"view"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"relayMessage","inputs":[{"name":"_nonce","type":"uint256","internalType":"uint256"},{"name":"_sender","type":"address","internalType":"address"},{"name":"_target","type":"address","internalType":"address"},{"name":"_value","type":"uint256","internalType":"uint256"},{"name":"_minGasLimit","type":"uint256","internalType":"uint256"},{"name":"_message","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"sendMessage","inputs":[{"name":"_target","type":"address","internalType":"address"},{"name":"_message","type":"bytes","internalType":"bytes"},{"name":"_minGasLimit","type":"uint32","internalType":"uint32"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"successfulMessages","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"xDomainMessageSender","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"FailedRelayedMessage","inputs":[{"name":"msgHash","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"RelayedMessage","inputs":[{"name":"msgHash","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"SentMessage","inputs":[{"name":"target","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"message","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"messageNonce","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"gasLimit","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"SentMessageExtension1","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false}],"bytecode":{"object":"0x60806040523480156200001157600080fd5b506200001e600062000024565b62000239565b600054600160a81b900460ff16158080156200004d57506000546001600160a01b90910460ff16105b806200008457506200006a306200017360201b620013071760201c565b158015620000845750600054600160a01b900460ff166001145b620000ed5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011b576000805460ff60a81b1916600160a81b1790555b620001268262000182565b80156200016f576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620001f15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e4565b60cc546001600160a01b0316620002175760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b611c8280620002496000396000f3fe60806040526004361061016a5760003560e01c806383a74074116100cb578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b146103c7578063db505d80146103da578063ecc704281461040757600080fd5b8063b1b1b20914610357578063b28ade2514610387578063c4d66de8146103a757600080fd5b80639fce812c116100b05780639fce812c146102fc578063a4e7f8bd14610327578063a7119869146102fc57600080fd5b806383a74074146102e55780638cbeeef21461020957600080fd5b80634c1d6a69116101225780635644cfdf116101075780635644cfdf146102755780635c975abb1461028b5780636e296e45146102ab57600080fd5b80634c1d6a691461020957806354fd4d501461021f57600080fd5b80632828d7e8116101535780632828d7e8146101b75780633dbb202b146101cc5780633f827a5a146101e157600080fd5b8063028f85f71461016f5780630c568498146101a2575b600080fd5b34801561017b57600080fd5b50610184601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101ae57600080fd5b50610184603f81565b3480156101c357600080fd5b50610184604081565b6101df6101da36600461177b565b61046c565b005b3480156101ed57600080fd5b506101f6600181565b60405161ffff9091168152602001610199565b34801561021557600080fd5b50610184619c4081565b34801561022b57600080fd5b506102686040518060400160405280600581526020017f322e302e3000000000000000000000000000000000000000000000000000000081525081565b604051610199919061184d565b34801561028157600080fd5b5061018461138881565b34801561029757600080fd5b5060005b6040519015158152602001610199565b3480156102b757600080fd5b506102c06106c9565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610199565b3480156102f157600080fd5b5061018462030d4081565b34801561030857600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166102c0565b34801561033357600080fd5b5061029b610342366004611867565b60ce6020526000908152604090205460ff1681565b34801561036357600080fd5b5061029b610372366004611867565b60cb6020526000908152604090205460ff1681565b34801561039357600080fd5b506101846103a2366004611880565b6107b5565b3480156103b357600080fd5b506101df6103c23660046118d4565b610823565b6101df6103d53660046118f1565b610a22565b3480156103e657600080fd5b5060cf546102c09073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041357600080fd5b5061045e60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b604051908152602001610199565b60cf5461059e9073ffffffffffffffffffffffffffffffffffffffff166104948585856107b5565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061050060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161051c97969594939291906119c0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611323565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561062360cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610635959493929190611a1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6107d1604063ffffffff8816611a9c565b6107db9190611acc565b6107e6601088611a9c565b6107f39062030d40611b1a565b6107fd9190611b1a565b6108079190611b1a565b6108119190611b1a565b61081b9190611b1a565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff161580801561086e575060005460017401000000000000000000000000000000000000000090910460ff16105b806108a05750303b1580156108a0575060005474010000000000000000000000000000000000000000900460ff166001145b61092c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161078f565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905580156109b257600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b6109bb826113b1565b8015610a1e57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60f087901c60028110610add576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a40161078f565b8061ffff16600003610bd2576000610b2e878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506114ed915050565b600081815260cb602052604090205490915060ff1615610bd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c61796564000000000000000000606482015260840161078f565b505b6000610c18898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150c92505050565b9050610c6160cf54337fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef0173ffffffffffffffffffffffffffffffffffffffff90811691161490565b15610c9957853414610c7557610c75611b46565b600081815260ce602052604090205460ff1615610c9457610c94611b46565b610deb565b3415610d4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a40161078f565b600081815260ce602052604090205460ff16610deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c6179656400000000000000000000000000000000606482015260840161078f565b610df48761152f565b15610ea7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a40161078f565b600081815260cb602052604090205460ff1615610f46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c6179656400000000000000000000606482015260840161078f565b610f6785610f58611388619c40611b1a565b67ffffffffffffffff16611584565b1580610f8d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156110a657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161109f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161078f565b50506112fe565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061113788619c405a6110fa9190611b75565b8988888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115a292505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156111ed57600082815260cb602052604090205460ff161561118a5761118a611b46565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26112fa565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016112fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161078f565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040517fc2b3e5ac0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000169063c2b3e5ac90849061137990889088908790600401611b8c565b6000604051808303818588803b15801561139257600080fd5b505af11580156113a6573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff1661145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161078f565b60cc5473ffffffffffffffffffffffffffffffffffffffff166114a65760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006114fb858585856115bc565b805190602001209050949350505050565b600061151c878787878787611655565b8051906020012090509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff821630148061157e575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000016145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6060848484846040516024016115d59493929190611bd4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606086868686868660405160240161167296959493929190611c1e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461171657600080fd5b50565b60008083601f84011261172b57600080fd5b50813567ffffffffffffffff81111561174357600080fd5b60208301915083602082850101111561175b57600080fd5b9250929050565b803563ffffffff8116811461177657600080fd5b919050565b6000806000806060858703121561179157600080fd5b843561179c816116f4565b9350602085013567ffffffffffffffff8111156117b857600080fd5b6117c487828801611719565b90945092506117d7905060408601611762565b905092959194509250565b6000815180845260005b81811015611808576020818501810151868301820152016117ec565b8181111561181a576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061186060208301846117e2565b9392505050565b60006020828403121561187957600080fd5b5035919050565b60008060006040848603121561189557600080fd5b833567ffffffffffffffff8111156118ac57600080fd5b6118b886828701611719565b90945092506118cb905060208501611762565b90509250925092565b6000602082840312156118e657600080fd5b8135611860816116f4565b600080600080600080600060c0888a03121561190c57600080fd5b87359650602088013561191e816116f4565b9550604088013561192e816116f4565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561195857600080fd5b6119648a828b01611719565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611a1260c083018486611977565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611a4f608083018688611977565b905083604083015263ffffffff831660608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611ac357611ac3611a6d565b02949350505050565b600067ffffffffffffffff80841680611b0e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611b3d57611b3d611a6d565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611b8757611b87611a6d565b500390565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff83166020820152606060408201526000611bcb60608301846117e2565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611c0d60808301856117e2565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611c6960c08301846117e2565b9897505050505050505056fea164736f6c634300080f000a","sourceMap":"812:1752:147:-:0;;;1023:127;;;;;;;;;-1:-1:-1;1070:73:147::1;1137:1;1070:10;:73::i;:::-;812:1752:::0;;1278:175;3111:19:27;3134:13;-1:-1:-1;;;3134:13:27;;;;3133:14;;3179:34;;;;-1:-1:-1;3197:12:27;;3212:1;-1:-1:-1;;;3197:12:27;;;;;:16;3179:34;3178:108;;;;3220:44;3258:4;3220:29;;;;;:44;;:::i;:::-;3219:45;:66;;;;-1:-1:-1;3268:12:27;;-1:-1:-1;;;3268:12:27;;;;3284:1;3268:17;3219:66;3157:201;;;;-1:-1:-1;;;3157:201:27;;216:2:357;3157:201:27;;;198:21:357;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:357;;;338:44;399:19;;3157:201:27;;;;;;;;;3368:12;:16;;-1:-1:-1;;;;3368:16:27;-1:-1:-1;;;3368:16:27;;;3394:65;;;;3428:13;:20;;-1:-1:-1;;;;3428:20:27;-1:-1:-1;;;3428:20:27;;;3394:65;1373:73:147::1;1420:23:::0;1373:27:::1;:73::i;:::-;3483:14:27::0;3479:99;;;3529:5;3513:21;;-1:-1:-1;;;;3513:21:27;;;3553:14;;-1:-1:-1;581:36:357;;3553:14:27;;569:2:357;554:18;3553:14:27;;;;;;;3479:99;3101:483;1278:175:147;:::o;1186:320:33:-;-1:-1:-1;;;;;1476:19:33;;:23;;;1186:320::o;18503:636:223:-;4910:13:27;;-1:-1:-1;;;4910:13:27;;;;4902:69;;;;-1:-1:-1;;;4902:69:27;;830:2:357;4902:69:27;;;812:21:357;869:2;849:18;;;842:30;908:34;888:18;;;881:62;-1:-1:-1;;;959:18:357;;;952:41;1010:19;;4902:69:27;628:407:357;4902:69:27;18988:16:223::1;::::0;-1:-1:-1;;;;;18988:16:223::1;18984:107;;19034:16;:46:::0;;-1:-1:-1;;;;;;19034:46:223::1;1338:42:192;19034:46:223;::::0;;18984:107:::1;19100:14;:32:::0;;-1:-1:-1;;;;;;19100:32:223::1;-1:-1:-1::0;;;;;19100:32:223;;;::::1;::::0;;;::::1;::::0;;18503:636::o;628:407:357:-;812:1752:147;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361061016a5760003560e01c806383a74074116100cb578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b146103c7578063db505d80146103da578063ecc704281461040757600080fd5b8063b1b1b20914610357578063b28ade2514610387578063c4d66de8146103a757600080fd5b80639fce812c116100b05780639fce812c146102fc578063a4e7f8bd14610327578063a7119869146102fc57600080fd5b806383a74074146102e55780638cbeeef21461020957600080fd5b80634c1d6a69116101225780635644cfdf116101075780635644cfdf146102755780635c975abb1461028b5780636e296e45146102ab57600080fd5b80634c1d6a691461020957806354fd4d501461021f57600080fd5b80632828d7e8116101535780632828d7e8146101b75780633dbb202b146101cc5780633f827a5a146101e157600080fd5b8063028f85f71461016f5780630c568498146101a2575b600080fd5b34801561017b57600080fd5b50610184601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101ae57600080fd5b50610184603f81565b3480156101c357600080fd5b50610184604081565b6101df6101da36600461177b565b61046c565b005b3480156101ed57600080fd5b506101f6600181565b60405161ffff9091168152602001610199565b34801561021557600080fd5b50610184619c4081565b34801561022b57600080fd5b506102686040518060400160405280600581526020017f322e302e3000000000000000000000000000000000000000000000000000000081525081565b604051610199919061184d565b34801561028157600080fd5b5061018461138881565b34801561029757600080fd5b5060005b6040519015158152602001610199565b3480156102b757600080fd5b506102c06106c9565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610199565b3480156102f157600080fd5b5061018462030d4081565b34801561030857600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166102c0565b34801561033357600080fd5b5061029b610342366004611867565b60ce6020526000908152604090205460ff1681565b34801561036357600080fd5b5061029b610372366004611867565b60cb6020526000908152604090205460ff1681565b34801561039357600080fd5b506101846103a2366004611880565b6107b5565b3480156103b357600080fd5b506101df6103c23660046118d4565b610823565b6101df6103d53660046118f1565b610a22565b3480156103e657600080fd5b5060cf546102c09073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041357600080fd5b5061045e60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b604051908152602001610199565b60cf5461059e9073ffffffffffffffffffffffffffffffffffffffff166104948585856107b5565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061050060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161051c97969594939291906119c0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611323565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561062360cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610635959493929190611a1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6107d1604063ffffffff8816611a9c565b6107db9190611acc565b6107e6601088611a9c565b6107f39062030d40611b1a565b6107fd9190611b1a565b6108079190611b1a565b6108119190611b1a565b61081b9190611b1a565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff161580801561086e575060005460017401000000000000000000000000000000000000000090910460ff16105b806108a05750303b1580156108a0575060005474010000000000000000000000000000000000000000900460ff166001145b61092c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161078f565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905580156109b257600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b6109bb826113b1565b8015610a1e57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60f087901c60028110610add576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a40161078f565b8061ffff16600003610bd2576000610b2e878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506114ed915050565b600081815260cb602052604090205490915060ff1615610bd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c61796564000000000000000000606482015260840161078f565b505b6000610c18898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150c92505050565b9050610c6160cf54337fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef0173ffffffffffffffffffffffffffffffffffffffff90811691161490565b15610c9957853414610c7557610c75611b46565b600081815260ce602052604090205460ff1615610c9457610c94611b46565b610deb565b3415610d4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a40161078f565b600081815260ce602052604090205460ff16610deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c6179656400000000000000000000000000000000606482015260840161078f565b610df48761152f565b15610ea7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a40161078f565b600081815260cb602052604090205460ff1615610f46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c6179656400000000000000000000606482015260840161078f565b610f6785610f58611388619c40611b1a565b67ffffffffffffffff16611584565b1580610f8d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156110a657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161109f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161078f565b50506112fe565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061113788619c405a6110fa9190611b75565b8988888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115a292505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156111ed57600082815260cb602052604090205460ff161561118a5761118a611b46565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26112fa565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016112fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161078f565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040517fc2b3e5ac0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000169063c2b3e5ac90849061137990889088908790600401611b8c565b6000604051808303818588803b15801561139257600080fd5b505af11580156113a6573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff1661145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161078f565b60cc5473ffffffffffffffffffffffffffffffffffffffff166114a65760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006114fb858585856115bc565b805190602001209050949350505050565b600061151c878787878787611655565b8051906020012090509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff821630148061157e575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000016145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6060848484846040516024016115d59493929190611bd4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606086868686868660405160240161167296959493929190611c1e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461171657600080fd5b50565b60008083601f84011261172b57600080fd5b50813567ffffffffffffffff81111561174357600080fd5b60208301915083602082850101111561175b57600080fd5b9250929050565b803563ffffffff8116811461177657600080fd5b919050565b6000806000806060858703121561179157600080fd5b843561179c816116f4565b9350602085013567ffffffffffffffff8111156117b857600080fd5b6117c487828801611719565b90945092506117d7905060408601611762565b905092959194509250565b6000815180845260005b81811015611808576020818501810151868301820152016117ec565b8181111561181a576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061186060208301846117e2565b9392505050565b60006020828403121561187957600080fd5b5035919050565b60008060006040848603121561189557600080fd5b833567ffffffffffffffff8111156118ac57600080fd5b6118b886828701611719565b90945092506118cb905060208501611762565b90509250925092565b6000602082840312156118e657600080fd5b8135611860816116f4565b600080600080600080600060c0888a03121561190c57600080fd5b87359650602088013561191e816116f4565b9550604088013561192e816116f4565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561195857600080fd5b6119648a828b01611719565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611a1260c083018486611977565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611a4f608083018688611977565b905083604083015263ffffffff831660608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611ac357611ac3611a6d565b02949350505050565b600067ffffffffffffffff80841680611b0e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611b3d57611b3d611a6d565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611b8757611b87611a6d565b500390565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff83166020820152606060408201526000611bcb60608301846117e2565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611c0d60808301856117e2565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611c6960c08301846117e2565b9897505050505050505056fea164736f6c634300080f000a","sourceMap":"812:1752:147:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4456:53:223;;;;;;;;;;;;4507:2;4456:53;;;;;188:18:357;176:31;;;158:50;;146:2;131:18;4456:53:223;;;;;;;;4301:64;;;;;;;;;;;;4363:2;4301:64;;4146:62;;;;;;;;;;;;4206:2;4146:62;;8628:995;;;;;;:::i;:::-;;:::i;:::-;;3879:42;;;;;;;;;;;;3920:1;3879:42;;;;;1693:6:357;1681:19;;;1663:38;;1651:2;1636:18;3879:42:223;1519:188:357;4597:51:223;;;;;;;;;;;;4642:6;4597:51;;912:40:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4943:53:223:-;;;;;;;;;;;;4991:5;4943:53;;21032:82;;;;;;;;;;-1:-1:-1;21079:4:223;21032:82;;;2638:14:357;;2631:22;2613:41;;2601:2;2586:18;21032:82:223;2473:187:357;15764:250:223;;;;;;;;;;;;;:::i;:::-;;;2841:42:357;2829:55;;;2811:74;;2799:2;2784:18;15764:250:223;2665:226:357;3999:56:223;;;;;;;;;;;;4048:7;3999:56;;16317:108;;;;;;;;;;-1:-1:-1;16404:14:223;;;;16317:108;;6234:46;;;;;;;;;;-1:-1:-1;6234:46:223;;;;;:::i;:::-;;;;;;;;;;;;;;;;5252:50;;;;;;;;;;-1:-1:-1;5252:50:223;;;;;:::i;:::-;;;;;;;;;;;;;;;;17493:894;;;;;;;;;;-1:-1:-1;17493:894:223;;;;;:::i;:::-;;:::i;1278:175:147:-;;;;;;;;;;-1:-1:-1;1278:175:147;;;;;:::i;:::-;;:::i;10311:5066:223:-;;;;;;:::i;:::-;;:::i;6386:42::-;;;;;;;;;;-1:-1:-1;6386:42:223;;;;;;;;16746:134;;;;;;;;;;;;16847:8;;;;4855:18:195;4852:30;;16746:134:223;;;;5155:25:357;;;5143:2;5128:18;16746:134:223;5009:177:357;8628:995:223;9128:14;;9088:326;;9128:14;;9168:31;9176:8;;9186:12;9168:7;:31::i;:::-;9221:9;9291:26;9319:14;16847:8;;;;4855:18:195;4852:30;;16746:134:223;9319:14;9335:10;9347:7;9356:9;9367:12;9381:8;;9251:152;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9088:12;:326::i;:::-;9442:7;9430:72;;;9451:10;9463:8;;9473:14;16847:8;;;;4855:18:195;4852:30;;16746:134:223;9473:14;9489:12;9430:72;;;;;;;;;;:::i;:::-;;;;;;;;9517:44;;9551:9;5155:25:357;;9539:10:223;;9517:44;;5143:2:357;5128:18;9517:44:223;;;;;;;-1:-1:-1;;9598:8:223;9596:10;;;;;;;;;;;;;;;;-1:-1:-1;;8628:995:223:o;15764:250::-;15859:16;;15819:7;;15859:47;:16;:47;;15838:135;;;;;;;6954:2:357;15838:135:223;;;6936:21:357;6993:2;6973:18;;;6966:30;7032:34;7012:18;;;7005:62;7103:23;7083:18;;;7076:51;7144:19;;15838:135:223;;;;;;;;;-1:-1:-1;15991:16:223;;;;;15764:250::o;17493:894::-;17577:6;4991:5;4796:6;;4363:2;17806:49;4206:2;17806:49;;;;:::i;:::-;17805:90;;;;:::i;:::-;17703:51;4507:2;17710:8;17703:51;:::i;:::-;17639:116;;4048:7;17639:116;:::i;:::-;:257;;;;:::i;:::-;:412;;;;:::i;:::-;:587;;;;:::i;:::-;:741;;;;:::i;:::-;17595:785;17493:894;-1:-1:-1;;;;17493:894:223:o;1278:175:147:-;3111:19:27;3134:13;;;;;;3133:14;;3179:34;;;;-1:-1:-1;3197:12:27;;3212:1;3197:12;;;;;;:16;3179:34;3178:108;;;-1:-1:-1;3258:4:27;1476:19:33;:23;;;3219:66:27;;-1:-1:-1;3268:12:27;;;;;;;3284:1;3268:17;3219:66;3157:201;;;;;;;8439:2:357;3157:201:27;;;8421:21:357;8478:2;8458:18;;;8451:30;8517:34;8497:18;;;8490:62;8588:16;8568:18;;;8561:44;8622:19;;3157:201:27;8237:410:357;3157:201:27;3368:12;:16;;;;;;;;3394:65;;;;3428:13;:20;;;;;;;;3394:65;1373:73:147::1;1420:23;1373:27;:73::i;:::-;3483:14:27::0;3479:99;;;3529:5;3513:21;;;;;;3553:14;;-1:-1:-1;8804:36:357;;3553:14:27;;8792:2:357;8777:18;3553:14:27;;;;;;;3479:99;3101:483;1278:175:147;:::o;10311:5066:223:-;5444:3:195;5440:16;;;10869:1:223;10859:11;;10851:101;;;;;;;9410:2:357;10851:101:223;;;9392:21:357;9449:2;9429:18;;;9422:30;9488:34;9468:18;;;9461:62;9559:34;9539:18;;;9532:62;9631:15;9610:19;;;9603:44;9664:19;;10851:101:223;9208:481:357;10851:101:223;11154:7;:12;;11165:1;11154:12;11150:247;;11182:15;11200:68;11233:7;11242;11251:8;;11200:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11261:6:223;;-1:-1:-1;11200:32:223;;-1:-1:-1;;11200:68:223:i;:::-;11290:27;;;;:18;:27;;;;;;11182:86;;-1:-1:-1;11290:27:223;;:36;11282:104;;;;;;;9896:2:357;11282:104:223;;;9878:21:357;9935:2;9915:18;;;9908:30;9974:34;9954:18;;;9947:62;10045:25;10025:18;;;10018:53;10088:19;;11282:104:223;9694:419:357;11282:104:223;11168:229;11150:247;11567:21;11603:90;11636:6;11644:7;11653;11662:6;11670:12;11684:8;;11603:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11603:32:223;;-1:-1:-1;;;11603:90:223:i;:::-;11567:126;;11708:19;2307:14:147;;2284:10;1685:27:237;;2307:14:147;2249:73;;;2307:14;;2249:73;;2165:164;11708:19:223;11704:506;;;11897:6;11884:9;:19;11877:27;;;;:::i;:::-;11926:29;;;;:14;:29;;;;;;;;11925:30;11918:38;;;;:::i;:::-;11704:506;;;11995:9;:14;11987:107;;;;;;;10509:2:357;11987:107:223;;;10491:21:357;10548:2;10528:18;;;10521:30;10587:34;10567:18;;;10560:62;10658:34;10638:18;;;10631:62;10730:18;10709:19;;;10702:47;10766:19;;11987:107:223;10307:484:357;11987:107:223;12117:29;;;;:14;:29;;;;;;;;12109:90;;;;;;;10998:2:357;12109:90:223;;;10980:21:357;11037:2;11017:18;;;11010:30;11076:34;11056:18;;;11049:62;11147:18;11127;;;11120:46;11183:19;;12109:90:223;10796:412:357;12109:90:223;12241:24;12257:7;12241:15;:24::i;:::-;:33;12220:135;;;;;;;11415:2:357;12220:135:223;;;11397:21:357;11454:2;11434:18;;;11427:30;11493:34;11473:18;;;11466:62;11564:34;11544:18;;;11537:62;11636:5;11615:19;;;11608:34;11659:19;;12220:135:223;11213:471:357;12220:135:223;12374:33;;;;:18;:33;;;;;;;;:42;12366:109;;;;;;;11891:2:357;12366:109:223;;;11873:21:357;11930:2;11910:18;;;11903:30;11969:34;11949:18;;;11942:62;12040:24;12020:18;;;12013:52;12082:19;;12366:109:223;11689:418:357;12366:109:223;13169:77;13188:12;13202:43;4991:5;4796:6;13202:43;:::i;:::-;13169:77;;:18;:77::i;:::-;13168:78;:145;;;-1:-1:-1;13266:16:223;;:47;:16;1338:42:192;13266:47:223;;13168:145;13151:919;;;13338:29;;;;:14;:29;;;;;;:36;;;;13370:4;13338:36;;;13393:35;13353:13;;13393:35;;;13908:41;:9;:41;13904:135;;13969:55;;;;;12314:2:357;13969:55:223;;;12296:21:357;12353:2;12333:18;;;12326:30;12392:34;12372:18;;;12365:62;12463:15;12443:18;;;12436:43;12496:19;;13969:55:223;12112:409:357;13904:135:223;14053:7;;;;13151:919;14080:16;:26;;;;;;;;;;-1:-1:-1;14131:72:223;14145:7;4796:6;14154:9;:30;;;;:::i;:::-;14186:6;14194:8;;14131:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14131:13:223;;-1:-1:-1;;;14131:72:223:i;:::-;14213:16;:46;;;;1338:42:192;14213:46:223;;;14116:87;-1:-1:-1;14270:1101:223;;;;14484:33;;;;:18;:33;;;;;;;;:42;14477:50;;;;:::i;:::-;14541:33;;;;:18;:33;;;;;;:40;;;;14577:4;14541:40;;;14600:29;14560:13;;14600:29;;;14270:1101;;;14660:29;;;;:14;:29;;;;;;:36;;;;14692:4;14660:36;;;14715:35;14675:13;;14715:35;;;15230:41;:9;:41;15226:135;;15291:55;;;;;12314:2:357;15291:55:223;;;12296:21:357;12353:2;12333:18;;;12326:30;12392:34;12372:18;;;12365:62;12463:15;12443:18;;;12436:43;12496:19;;15291:55:223;12112:409:357;15226:135:223;10537:4840;;;10311:5066;;;;;;;;:::o;1186:320:33:-;1476:19;;;:23;;;1186:320::o;1849:269:147:-;1966:145;;;;;312:42:199;;1966:83:147;;2058:6;;1966:145;;2080:3;;2085:9;;2096:5;;1966:145;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1849:269;;;;:::o;18503:636:223:-;4910:13:27;;;;;;;4902:69;;;;;;;13296:2:357;4902:69:27;;;13278:21:357;13335:2;13315:18;;;13308:30;13374:34;13354:18;;;13347:62;13445:13;13425:18;;;13418:41;13476:19;;4902:69:27;13094:407:357;4902:69:27;18988:16:223::1;::::0;:30:::1;:16;18984:107;;19034:16;:46:::0;;;::::1;1338:42:192;19034:46:223;::::0;;18984:107:::1;19100:14;:32:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;18503:636::o;3100:305:196:-;3289:7;3329:68;3365:7;3374;3383:5;3390:6;3329:35;:68::i;:::-;3319:79;;;;;;3312:86;;3100:305;;;;;;:::o;3877:375::-;4117:7;4157:87;4193:6;4201:7;4210;4219:6;4227:9;4238:5;4157:35;:87::i;:::-;4147:98;;;;;;4140:105;;3877:375;;;;;;;;:::o;2376:186:147:-;2450:4;2473:24;;;2492:4;2473:24;;:82;;-1:-1:-1;2501:54:147;;;312:42:199;2501:54:147;2473:82;2466:89;2376:186;-1:-1:-1;;2376:186:147:o;3615:365:200:-;3696:4;3712:15;3931:2;3916:12;3909:5;3905:24;3901:33;3896:2;3887:7;3883:16;3879:56;3874:2;3867:5;3863:14;3860:76;3853:84;;3615:365;-1:-1:-1;;;;3615:365:200:o;1202:536::-;1305:4;1321:13;1668:1;1635;1594:9;1588:16;1554:2;1543:9;1539:18;1496:6;1454:7;1421:4;1395:302;1367:330;1202:536;-1:-1:-1;;;;;;1202:536:200:o;3073:336:195:-;3264:12;3370:7;3379;3388:5;3395:6;3299:103;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3073:336:195;;;;;;:::o;3883:516::-;4125:12;4272:6;4292:7;4313;4334:6;4354:9;4377:5;4160:232;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3883:516:195;;;;;;;;:::o;219:154:357:-;305:42;298:5;294:54;287:5;284:65;274:93;;363:1;360;353:12;274:93;219:154;:::o;378:347::-;429:8;439:6;493:3;486:4;478:6;474:17;470:27;460:55;;511:1;508;501:12;460:55;-1:-1:-1;534:20:357;;577:18;566:30;;563:50;;;609:1;606;599:12;563:50;646:4;638:6;634:17;622:29;;698:3;691:4;682:6;674;670:19;666:30;663:39;660:59;;;715:1;712;705:12;660:59;378:347;;;;;:::o;730:163::-;797:20;;857:10;846:22;;836:33;;826:61;;883:1;880;873:12;826:61;730:163;;;:::o;898:616::-;985:6;993;1001;1009;1062:2;1050:9;1041:7;1037:23;1033:32;1030:52;;;1078:1;1075;1068:12;1030:52;1117:9;1104:23;1136:31;1161:5;1136:31;:::i;:::-;1186:5;-1:-1:-1;1242:2:357;1227:18;;1214:32;1269:18;1258:30;;1255:50;;;1301:1;1298;1291:12;1255:50;1340:58;1390:7;1381:6;1370:9;1366:22;1340:58;:::i;:::-;1417:8;;-1:-1:-1;1314:84:357;-1:-1:-1;1471:37:357;;-1:-1:-1;1504:2:357;1489:18;;1471:37;:::i;:::-;1461:47;;898:616;;;;;;;:::o;1712:531::-;1754:3;1792:5;1786:12;1819:6;1814:3;1807:19;1844:1;1854:162;1868:6;1865:1;1862:13;1854:162;;;1930:4;1986:13;;;1982:22;;1976:29;1958:11;;;1954:20;;1947:59;1883:12;1854:162;;;2034:6;2031:1;2028:13;2025:87;;;2100:1;2093:4;2084:6;2079:3;2075:16;2071:27;2064:38;2025:87;-1:-1:-1;2157:2:357;2145:15;2162:66;2141:88;2132:98;;;;2232:4;2128:109;;1712:531;-1:-1:-1;;1712:531:357:o;2248:220::-;2397:2;2386:9;2379:21;2360:4;2417:45;2458:2;2447:9;2443:18;2435:6;2417:45;:::i;:::-;2409:53;2248:220;-1:-1:-1;;;2248:220:357:o;3158:180::-;3217:6;3270:2;3258:9;3249:7;3245:23;3241:32;3238:52;;;3286:1;3283;3276:12;3238:52;-1:-1:-1;3309:23:357;;3158:180;-1:-1:-1;3158:180:357:o;3343:481::-;3421:6;3429;3437;3490:2;3478:9;3469:7;3465:23;3461:32;3458:52;;;3506:1;3503;3496:12;3458:52;3546:9;3533:23;3579:18;3571:6;3568:30;3565:50;;;3611:1;3608;3601:12;3565:50;3650:58;3700:7;3691:6;3680:9;3676:22;3650:58;:::i;:::-;3727:8;;-1:-1:-1;3624:84:357;-1:-1:-1;3781:37:357;;-1:-1:-1;3814:2:357;3799:18;;3781:37;:::i;:::-;3771:47;;3343:481;;;;;:::o;3829:278::-;3919:6;3972:2;3960:9;3951:7;3947:23;3943:32;3940:52;;;3988:1;3985;3978:12;3940:52;4027:9;4014:23;4046:31;4071:5;4046:31;:::i;4112:892::-;4227:6;4235;4243;4251;4259;4267;4275;4328:3;4316:9;4307:7;4303:23;4299:33;4296:53;;;4345:1;4342;4335:12;4296:53;4381:9;4368:23;4358:33;;4441:2;4430:9;4426:18;4413:32;4454:31;4479:5;4454:31;:::i;:::-;4504:5;-1:-1:-1;4561:2:357;4546:18;;4533:32;4574:33;4533:32;4574:33;:::i;:::-;4626:7;-1:-1:-1;4680:2:357;4665:18;;4652:32;;-1:-1:-1;4731:3:357;4716:19;;4703:33;;-1:-1:-1;4787:3:357;4772:19;;4759:33;4815:18;4804:30;;4801:50;;;4847:1;4844;4837:12;4801:50;4886:58;4936:7;4927:6;4916:9;4912:22;4886:58;:::i;:::-;4112:892;;;;-1:-1:-1;4112:892:357;;-1:-1:-1;4112:892:357;;;;4860:84;;-1:-1:-1;;;4112:892:357:o;5191:325::-;5279:6;5274:3;5267:19;5331:6;5324:5;5317:4;5312:3;5308:14;5295:43;;5383:1;5376:4;5367:6;5362:3;5358:16;5354:27;5347:38;5249:3;5505:4;5435:66;5430:2;5422:6;5418:15;5414:88;5409:3;5405:98;5401:109;5394:116;;5191:325;;;;:::o;5521:697::-;5816:6;5805:9;5798:25;5779:4;5842:42;5932:2;5924:6;5920:15;5915:2;5904:9;5900:18;5893:43;5984:2;5976:6;5972:15;5967:2;5956:9;5952:18;5945:43;;6024:6;6019:2;6008:9;6004:18;5997:34;6080:10;6072:6;6068:23;6062:3;6051:9;6047:19;6040:52;6129:3;6123;6112:9;6108:19;6101:32;6150:62;6207:3;6196:9;6192:19;6184:6;6176;6150:62;:::i;:::-;6142:70;5521:697;-1:-1:-1;;;;;;;;;5521:697:357:o;6223:524::-;6475:42;6467:6;6463:55;6452:9;6445:74;6555:3;6550:2;6539:9;6535:18;6528:31;6426:4;6576:62;6633:3;6622:9;6618:19;6610:6;6602;6576:62;:::i;:::-;6568:70;;6674:6;6669:2;6658:9;6654:18;6647:34;6729:10;6721:6;6717:23;6712:2;6701:9;6697:18;6690:51;6223:524;;;;;;;;:::o;7174:184::-;7226:77;7223:1;7216:88;7323:4;7320:1;7313:15;7347:4;7344:1;7337:15;7363:270;7402:7;7434:18;7479:2;7476:1;7472:10;7509:2;7506:1;7502:10;7565:3;7561:2;7557:12;7552:3;7549:21;7542:3;7535:11;7528:19;7524:47;7521:73;;;7574:18;;:::i;:::-;7614:13;;7363:270;-1:-1:-1;;;;7363:270:357:o;7638:353::-;7677:1;7703:18;7748:2;7745:1;7741:10;7770:3;7760:191;;7807:77;7804:1;7797:88;7908:4;7905:1;7898:15;7936:4;7933:1;7926:15;7760:191;7969:10;;7965:20;;;;;7638:353;-1:-1:-1;;7638:353:357:o;7996:236::-;8035:3;8063:18;8108:2;8105:1;8101:10;8138:2;8135:1;8131:10;8169:3;8165:2;8161:12;8156:3;8153:21;8150:47;;;8177:18;;:::i;:::-;8213:13;;7996:236;-1:-1:-1;;;;7996:236:357:o;10118:184::-;10170:77;10167:1;10160:88;10267:4;10264:1;10257:15;10291:4;10288:1;10281:15;12526:125;12566:4;12594:1;12591;12588:8;12585:34;;;12599:18;;:::i;:::-;-1:-1:-1;12636:9:357;;12526:125::o;12656:433::-;12870:42;12862:6;12858:55;12847:9;12840:74;12962:18;12954:6;12950:31;12945:2;12934:9;12930:18;12923:59;13018:2;13013;13002:9;12998:18;12991:30;12821:4;13038:45;13079:2;13068:9;13064:18;13056:6;13038:45;:::i;:::-;13030:53;12656:433;-1:-1:-1;;;;;12656:433:357:o;13506:512::-;13700:4;13729:42;13810:2;13802:6;13798:15;13787:9;13780:34;13862:2;13854:6;13850:15;13845:2;13834:9;13830:18;13823:43;;13902:3;13897:2;13886:9;13882:18;13875:31;13923:46;13964:3;13953:9;13949:19;13941:6;13923:46;:::i;:::-;13915:54;;14005:6;14000:2;13989:9;13985:18;13978:34;13506:512;;;;;;;:::o;14023:656::-;14310:6;14299:9;14292:25;14273:4;14336:42;14426:2;14418:6;14414:15;14409:2;14398:9;14394:18;14387:43;14478:2;14470:6;14466:15;14461:2;14450:9;14446:18;14439:43;;14518:6;14513:2;14502:9;14498:18;14491:34;14562:6;14556:3;14545:9;14541:19;14534:35;14606:3;14600;14589:9;14585:19;14578:32;14627:46;14668:3;14657:9;14653:19;14645:6;14627:46;:::i;:::-;14619:54;14023:656;-1:-1:-1;;;;;;;;14023:656:357:o","linkReferences":{}},"methodIdentifiers":{"MESSAGE_VERSION()":"3f827a5a","MIN_GAS_CALLDATA_OVERHEAD()":"028f85f7","MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR()":"0c568498","MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR()":"2828d7e8","OTHER_MESSENGER()":"9fce812c","RELAY_CALL_OVERHEAD()":"4c1d6a69","RELAY_CONSTANT_OVERHEAD()":"83a74074","RELAY_GAS_CHECK_BUFFER()":"5644cfdf","RELAY_RESERVED_GAS()":"8cbeeef2","baseGas(bytes,uint32)":"b28ade25","failedMessages(bytes32)":"a4e7f8bd","initialize(address)":"c4d66de8","l1CrossDomainMessenger()":"a7119869","messageNonce()":"ecc70428","otherMessenger()":"db505d80","paused()":"5c975abb","relayMessage(uint256,address,address,uint256,uint256,bytes)":"d764ad0b","sendMessage(address,bytes,uint32)":"3dbb202b","successfulMessages(bytes32)":"b1b1b209","version()":"54fd4d50","xDomainMessageSender()":"6e296e45"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"FailedRelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"RelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"name\":\"SentMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SentMessageExtension1\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSAGE_VERSION\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_MESSENGER\",\"outputs\":[{\"internalType\":\"contract CrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_CALL_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_RESERVED_GAS\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"}],\"name\":\"baseGas\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"failedMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract CrossDomainMessenger\",\"name\":\"_l1CrossDomainMessenger\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1CrossDomainMessenger\",\"outputs\":[{\"internalType\":\"contract CrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"otherMessenger\",\"outputs\":[{\"internalType\":\"contract CrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"relayMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"successfulMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xDomainMessageSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"custom:proxied\":\"@custom:predeploy 0x4200000000000000000000000000000000000007\",\"kind\":\"dev\",\"methods\":{\"OTHER_MESSENGER()\":{\"custom:legacy\":\"\",\"returns\":{\"_0\":\"CrossDomainMessenger contract on the other chain.\"}},\"baseGas(bytes,uint32)\":{\"params\":{\"_message\":\"Message to compute the amount of required gas for.\",\"_minGasLimit\":\"Minimum desired gas limit when message goes to target.\"},\"returns\":{\"_0\":\"Amount of gas required to guarantee message receipt.\"}},\"initialize(address)\":{\"params\":{\"_l1CrossDomainMessenger\":\"L1CrossDomainMessenger contract on the other network.\"}},\"l1CrossDomainMessenger()\":{\"custom:legacy\":\"\",\"returns\":{\"_0\":\"L1CrossDomainMessenger contract.\"}},\"messageNonce()\":{\"returns\":{\"_0\":\"Nonce of the next message to be sent, with added message version.\"}},\"paused()\":{\"returns\":{\"_0\":\"Whether or not the contract is paused.\"}},\"relayMessage(uint256,address,address,uint256,uint256,bytes)\":{\"params\":{\"_message\":\"Message to send to the target.\",\"_minGasLimit\":\"Minimum amount of gas that the message can be executed with.\",\"_nonce\":\"Nonce of the message being relayed.\",\"_sender\":\"Address of the user who sent the message.\",\"_target\":\"Address that the message is targeted at.\",\"_value\":\"ETH value to send with the message.\"}},\"sendMessage(address,bytes,uint32)\":{\"params\":{\"_message\":\"Message to trigger the target address with.\",\"_minGasLimit\":\"Minimum gas limit that the message can be executed with.\",\"_target\":\"Target contract or wallet address.\"}},\"xDomainMessageSender()\":{\"returns\":{\"_0\":\"Address of the sender of the currently executing message on the other chain.\"}}},\"stateVariables\":{\"version\":{\"custom:semver\":\"2.0.0\"}},\"title\":\"L2CrossDomainMessenger\",\"version\":1},\"userdoc\":{\"events\":{\"FailedRelayedMessage(bytes32)\":{\"notice\":\"Emitted whenever a message fails to be relayed on this chain.\"},\"RelayedMessage(bytes32)\":{\"notice\":\"Emitted whenever a message is successfully relayed on this chain.\"},\"SentMessage(address,address,bytes,uint256,uint256)\":{\"notice\":\"Emitted whenever a message is sent to the other chain.\"},\"SentMessageExtension1(address,uint256)\":{\"notice\":\"Additional event data to emit, required as of Bedrock. Cannot be merged with the SentMessage event without breaking the ABI of this contract, this is good enough.\"}},\"kind\":\"user\",\"methods\":{\"MESSAGE_VERSION()\":{\"notice\":\"Current message version identifier.\"},\"MIN_GAS_CALLDATA_OVERHEAD()\":{\"notice\":\"Extra gas added to base gas for each byte of calldata in a message.\"},\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR()\":{\"notice\":\"Denominator for dynamic overhead added to the base gas for a message.\"},\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR()\":{\"notice\":\"Numerator for dynamic overhead added to the base gas for a message.\"},\"OTHER_MESSENGER()\":{\"notice\":\"Retrieves the address of the paired CrossDomainMessenger contract on the other chain Public getter is legacy and will be removed in the future. Use `otherMessenger()` instead.\"},\"RELAY_CALL_OVERHEAD()\":{\"notice\":\"Gas reserved for performing the external call in `relayMessage`.\"},\"RELAY_CONSTANT_OVERHEAD()\":{\"notice\":\"Constant overhead added to the base gas for a message.\"},\"RELAY_GAS_CHECK_BUFFER()\":{\"notice\":\"Gas reserved for the execution between the `hasMinGas` check and the external call in `relayMessage`.\"},\"RELAY_RESERVED_GAS()\":{\"notice\":\"Gas reserved for finalizing the execution of `relayMessage` after the safe call.\"},\"baseGas(bytes,uint32)\":{\"notice\":\"Computes the amount of gas required to guarantee that a given message will be received on the other chain without running out of gas. Guaranteeing that a message will not run out of gas is important because this ensures that a message can always be replayed on the other chain if it fails to execute completely.\"},\"constructor\":{\"notice\":\"Constructs the L2CrossDomainMessenger contract.\"},\"failedMessages(bytes32)\":{\"notice\":\"Mapping of message hashes to a boolean if and only if the message has failed to be executed at least once. A message will not be present in this mapping if it successfully executed on the first attempt.\"},\"initialize(address)\":{\"notice\":\"Initializer.\"},\"l1CrossDomainMessenger()\":{\"notice\":\"Getter for the remote messenger. Public getter is legacy and will be removed in the future. Use `otherMessenger()` instead.\"},\"messageNonce()\":{\"notice\":\"Retrieves the next message nonce. Message version will be added to the upper two bytes of the message nonce. Message version allows us to treat messages as having different structures.\"},\"otherMessenger()\":{\"notice\":\"CrossDomainMessenger contract on the other chain.\"},\"paused()\":{\"notice\":\"This function should return true if the contract is paused. On L1 this function will check the SuperchainConfig for its paused status. On L2 this function should be a no-op.\"},\"relayMessage(uint256,address,address,uint256,uint256,bytes)\":{\"notice\":\"Relays a message that was sent by the other CrossDomainMessenger contract. Can only be executed via cross-chain call from the other messenger OR if the message was already received once and is currently being replayed.\"},\"sendMessage(address,bytes,uint32)\":{\"notice\":\"Sends a message to some target address on the other chain. Note that if the call always reverts, then the message will be unrelayable, and any ETH sent will be permanently locked. The same will occur if the target on the other chain is considered unsafe (see the _isUnsafeTarget() function).\"},\"successfulMessages(bytes32)\":{\"notice\":\"Mapping of message hashes to boolean receipt values. Note that a message will only be present in this mapping if it has successfully been relayed on this chain, and can therefore not be relayed again.\"},\"xDomainMessageSender()\":{\"notice\":\"Retrieves the address of the contract or wallet that initiated the currently executing message on the other chain. Will throw an error if there is no message currently being executed. Allows the recipient of a call to see who triggered it.\"}},\"notice\":\"The L2CrossDomainMessenger is a high-level interface for message passing between L1 and L2 on the L2 side. Users are generally encouraged to use this contract instead of lower level message passing contracts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/L2/L2CrossDomainMessenger.sol\":\"L2CrossDomainMessenger\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f\",\"dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929\",\"dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689\",\"dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy\"]},\"lib/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c\",\"dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8\"]},\"src/L1/ResourceMetering.sol\":{\"keccak256\":\"0xde3ac62c60f27a3f1ba06eec94f4eda45e7ec5544c6a5d6b79543a7184e44408\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://265a2845c4ff0d9076dd0505755cf2bdf799f4fdc09ef016865a26b51f5c3409\",\"dweb:/ipfs/QmRzSdBD8jmQf3U9u2ATRAzzuyo6c5ugz8VA5ZM4vzoGiM\"]},\"src/L2/L2CrossDomainMessenger.sol\":{\"keccak256\":\"0xe6f3989bb296a3b8678a0d0734788cfdef8ed6632df10cba23af5a369293d355\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ec3c85753657891b6c6bc5a7b941ac7cffd312f9589683e006f2d0f5b725f4b\",\"dweb:/ipfs/QmTSLy4kv3ZVUR158NED6x31vy9J69wQunHWkJVDU5VYDC\"]},\"src/L2/L2ToL1MessagePasser.sol\":{\"keccak256\":\"0x67f440defc45e97bf1494274a9061876cbdcb10625707c534a0cb04b1c057e21\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47900ccfcd1e4506d50dd3b14069da285eeb5f783020a0c74f58181b4c011460\",\"dweb:/ipfs/QmNUtEAxiwXT8QDbCHsX3uT4h2fh6k9f8LvMrmRK2N7K61\"]},\"src/libraries/Arithmetic.sol\":{\"keccak256\":\"0x91345e053584f82ad04d682ba821cf3ede808304f5b2a88116a894cf692c21db\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://005e3c42d2edfca0a506cbda94d3b0104eddf20c00bd1bd25272f53f2ef74c72\",\"dweb:/ipfs/QmdaW6Nge6NKoGvFqRpQjBpM2fXpc5y8WpZyBnDnKicdJq\"]},\"src/libraries/Burn.sol\":{\"keccak256\":\"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f\",\"dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb\"]},\"src/libraries/Constants.sol\":{\"keccak256\":\"0xe0aeec7d6e5d1e44a11405d3b5bfc384ea092c39bea0b763ab937a26fd427132\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11aa3bff9da26ca2545132ec7994866690446a5321023811c254410d9593bd9b\",\"dweb:/ipfs/QmVxWqadxvdfkqdrhfWisDqeAthibn4HEE1P6o9aFxXLhp\"]},\"src/libraries/Encoding.sol\":{\"keccak256\":\"0x1dafabcbd4877c7abe9698957b0a44b7e911cb8b11c1437a4ed897135669fa87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6addfacefa26fdb44f56d73fa0172b97740de75629a962905ec2a20a28d40fff\",\"dweb:/ipfs/QmboHMouqU19Rnbqrfo1gkfnuDBFcPiC9wsKgGtF2W1cNA\"]},\"src/libraries/Hashing.sol\":{\"keccak256\":\"0x89c07a0ca102cbe57b4e082543f2dd6dae0e1fd4a87908a334bd076fc914e7b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://69c83489c9544ab442dc244c2feb2c6811b726a5eb5a509b97fc5ccb90b98c12\",\"dweb:/ipfs/QmPGGJeLasc1HWHzd6odvWcNvFPQrbYtDubZcv8yp1HLtF\"]},\"src/libraries/Predeploys.sol\":{\"keccak256\":\"0x7b48b32b75e9ba0cd7f83b3304c6c1676dd8de20a5d40e8846bf7018ae9aff02\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7574fcc79c0d545b90071023aa81ee7880ab50b3057df598fa693bc4cf303663\",\"dweb:/ipfs/QmWLxHzgfaTJ7thfb7khXkTY5UtSBZ5VTUB4DaAXVw7DRe\"]},\"src/libraries/SafeCall.sol\":{\"keccak256\":\"0x0636a7abb242bb5d6f5606967c8929e6aa7e63468c1e2ce40ad4780d4c4bf94f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4daec2ac8f9907bbf84ef0a1c48f03bae8657619bc6f42b3a672f25c516f17a\",\"dweb:/ipfs/Qmf8gfRxBv8gEmCkP8YMPb2GGfj9QUnoNUyKE7UR2SWGnq\"]},\"src/libraries/Types.sol\":{\"keccak256\":\"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e\",\"dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc\"]},\"src/libraries/rlp/RLPWriter.sol\":{\"keccak256\":\"0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b\",\"dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV\"]},\"src/universal/CrossDomainMessenger.sol\":{\"keccak256\":\"0x330ae1479e88fc8a8b5b27a84df935a092a47ad13e59d9b9ea4982ad31bbe7b0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf5fb4e78a03dcad4b9a8e2d5ed135f8e989aa02090747386843383fa6b7d1\",\"dweb:/ipfs/QmTp66RoF6EaKeBrrZBuYAu3dsMfKo8de2XY9iHHnqfN3n\"]},\"src/universal/ISemver.sol\":{\"keccak256\":\"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a\",\"dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR\"]},\"src/vendor/AddressAliasHelper.sol\":{\"keccak256\":\"0x6ecb83b4ec80fbe49c22f4f95d90482de64660ef5d422a19f4d4b04df31c1237\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1d0885be6e473962f9a0622176a22300165ac0cc1a1d7f2e22b11c3d656ace88\",\"dweb:/ipfs/QmPRa3KmRpXW5P9ykveKRDgYN5zYo4cYLAYSnoqHX3KnXR\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.15+commit.e14f2714"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"bytes32","name":"msgHash","type":"bytes32","indexed":true}],"type":"event","name":"FailedRelayedMessage","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"msgHash","type":"bytes32","indexed":true}],"type":"event","name":"RelayedMessage","anonymous":false},{"inputs":[{"internalType":"address","name":"target","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"bytes","name":"message","type":"bytes","indexed":false},{"internalType":"uint256","name":"messageNonce","type":"uint256","indexed":false},{"internalType":"uint256","name":"gasLimit","type":"uint256","indexed":false}],"type":"event","name":"SentMessage","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"SentMessageExtension1","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"MESSAGE_VERSION","outputs":[{"internalType":"uint16","name":"","type":"uint16"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"MIN_GAS_CALLDATA_OVERHEAD","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"OTHER_MESSENGER","outputs":[{"internalType":"contract CrossDomainMessenger","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"RELAY_CALL_OVERHEAD","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"RELAY_CONSTANT_OVERHEAD","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"RELAY_GAS_CHECK_BUFFER","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"RELAY_RESERVED_GAS","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"}],"stateMutability":"pure","type":"function","name":"baseGas","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"failedMessages","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"contract CrossDomainMessenger","name":"_l1CrossDomainMessenger","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"l1CrossDomainMessenger","outputs":[{"internalType":"contract CrossDomainMessenger","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"messageNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"otherMessenger","outputs":[{"internalType":"contract CrossDomainMessenger","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_minGasLimit","type":"uint256"},{"internalType":"bytes","name":"_message","type":"bytes"}],"stateMutability":"payable","type":"function","name":"relayMessage"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"}],"stateMutability":"payable","type":"function","name":"sendMessage"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"successfulMessages","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"xDomainMessageSender","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"OTHER_MESSENGER()":{"custom:legacy":"","returns":{"_0":"CrossDomainMessenger contract on the other chain."}},"baseGas(bytes,uint32)":{"params":{"_message":"Message to compute the amount of required gas for.","_minGasLimit":"Minimum desired gas limit when message goes to target."},"returns":{"_0":"Amount of gas required to guarantee message receipt."}},"initialize(address)":{"params":{"_l1CrossDomainMessenger":"L1CrossDomainMessenger contract on the other network."}},"l1CrossDomainMessenger()":{"custom:legacy":"","returns":{"_0":"L1CrossDomainMessenger contract."}},"messageNonce()":{"returns":{"_0":"Nonce of the next message to be sent, with added message version."}},"paused()":{"returns":{"_0":"Whether or not the contract is paused."}},"relayMessage(uint256,address,address,uint256,uint256,bytes)":{"params":{"_message":"Message to send to the target.","_minGasLimit":"Minimum amount of gas that the message can be executed with.","_nonce":"Nonce of the message being relayed.","_sender":"Address of the user who sent the message.","_target":"Address that the message is targeted at.","_value":"ETH value to send with the message."}},"sendMessage(address,bytes,uint32)":{"params":{"_message":"Message to trigger the target address with.","_minGasLimit":"Minimum gas limit that the message can be executed with.","_target":"Target contract or wallet address."}},"xDomainMessageSender()":{"returns":{"_0":"Address of the sender of the currently executing message on the other chain."}}},"version":1},"userdoc":{"kind":"user","methods":{"MESSAGE_VERSION()":{"notice":"Current message version identifier."},"MIN_GAS_CALLDATA_OVERHEAD()":{"notice":"Extra gas added to base gas for each byte of calldata in a message."},"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR()":{"notice":"Denominator for dynamic overhead added to the base gas for a message."},"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR()":{"notice":"Numerator for dynamic overhead added to the base gas for a message."},"OTHER_MESSENGER()":{"notice":"Retrieves the address of the paired CrossDomainMessenger contract on the other chain Public getter is legacy and will be removed in the future. Use `otherMessenger()` instead."},"RELAY_CALL_OVERHEAD()":{"notice":"Gas reserved for performing the external call in `relayMessage`."},"RELAY_CONSTANT_OVERHEAD()":{"notice":"Constant overhead added to the base gas for a message."},"RELAY_GAS_CHECK_BUFFER()":{"notice":"Gas reserved for the execution between the `hasMinGas` check and the external call in `relayMessage`."},"RELAY_RESERVED_GAS()":{"notice":"Gas reserved for finalizing the execution of `relayMessage` after the safe call."},"baseGas(bytes,uint32)":{"notice":"Computes the amount of gas required to guarantee that a given message will be received on the other chain without running out of gas. Guaranteeing that a message will not run out of gas is important because this ensures that a message can always be replayed on the other chain if it fails to execute completely."},"constructor":{"notice":"Constructs the L2CrossDomainMessenger contract."},"failedMessages(bytes32)":{"notice":"Mapping of message hashes to a boolean if and only if the message has failed to be executed at least once. A message will not be present in this mapping if it successfully executed on the first attempt."},"initialize(address)":{"notice":"Initializer."},"l1CrossDomainMessenger()":{"notice":"Getter for the remote messenger. Public getter is legacy and will be removed in the future. Use `otherMessenger()` instead."},"messageNonce()":{"notice":"Retrieves the next message nonce. Message version will be added to the upper two bytes of the message nonce. Message version allows us to treat messages as having different structures."},"otherMessenger()":{"notice":"CrossDomainMessenger contract on the other chain."},"paused()":{"notice":"This function should return true if the contract is paused. On L1 this function will check the SuperchainConfig for its paused status. On L2 this function should be a no-op."},"relayMessage(uint256,address,address,uint256,uint256,bytes)":{"notice":"Relays a message that was sent by the other CrossDomainMessenger contract. Can only be executed via cross-chain call from the other messenger OR if the message was already received once and is currently being replayed."},"sendMessage(address,bytes,uint32)":{"notice":"Sends a message to some target address on the other chain. Note that if the call always reverts, then the message will be unrelayable, and any ETH sent will be permanently locked. The same will occur if the target on the other chain is considered unsafe (see the _isUnsafeTarget() function)."},"successfulMessages(bytes32)":{"notice":"Mapping of message hashes to boolean receipt values. Note that a message will only be present in this mapping if it has successfully been relayed on this chain, and can therefore not be relayed again."},"xDomainMessageSender()":{"notice":"Retrieves the address of the contract or wallet that initiated the currently executing message on the other chain. Will throw an error if there is no message currently being executed. Allows the recipient of a call to see who triggered it."}},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","ds-test/=lib/forge-std/lib/ds-test/src/","forge-std/=lib/forge-std/src/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/L2/L2CrossDomainMessenger.sol":"L2CrossDomainMessenger"},"evmVersion":"london","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e","urls":["bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497","dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3","urls":["bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4","dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66","urls":["bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f","dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10","urls":["bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487","dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0","urls":["bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929","dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7","urls":["bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689","dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy"],"license":"MIT"},"lib/solmate/src/utils/FixedPointMathLib.sol":{"keccak256":"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d","urls":["bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c","dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8"],"license":"MIT"},"src/L1/ResourceMetering.sol":{"keccak256":"0xde3ac62c60f27a3f1ba06eec94f4eda45e7ec5544c6a5d6b79543a7184e44408","urls":["bzz-raw://265a2845c4ff0d9076dd0505755cf2bdf799f4fdc09ef016865a26b51f5c3409","dweb:/ipfs/QmRzSdBD8jmQf3U9u2ATRAzzuyo6c5ugz8VA5ZM4vzoGiM"],"license":"MIT"},"src/L2/L2CrossDomainMessenger.sol":{"keccak256":"0xe6f3989bb296a3b8678a0d0734788cfdef8ed6632df10cba23af5a369293d355","urls":["bzz-raw://1ec3c85753657891b6c6bc5a7b941ac7cffd312f9589683e006f2d0f5b725f4b","dweb:/ipfs/QmTSLy4kv3ZVUR158NED6x31vy9J69wQunHWkJVDU5VYDC"],"license":"MIT"},"src/L2/L2ToL1MessagePasser.sol":{"keccak256":"0x67f440defc45e97bf1494274a9061876cbdcb10625707c534a0cb04b1c057e21","urls":["bzz-raw://47900ccfcd1e4506d50dd3b14069da285eeb5f783020a0c74f58181b4c011460","dweb:/ipfs/QmNUtEAxiwXT8QDbCHsX3uT4h2fh6k9f8LvMrmRK2N7K61"],"license":"MIT"},"src/libraries/Arithmetic.sol":{"keccak256":"0x91345e053584f82ad04d682ba821cf3ede808304f5b2a88116a894cf692c21db","urls":["bzz-raw://005e3c42d2edfca0a506cbda94d3b0104eddf20c00bd1bd25272f53f2ef74c72","dweb:/ipfs/QmdaW6Nge6NKoGvFqRpQjBpM2fXpc5y8WpZyBnDnKicdJq"],"license":"MIT"},"src/libraries/Burn.sol":{"keccak256":"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010","urls":["bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f","dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb"],"license":"MIT"},"src/libraries/Constants.sol":{"keccak256":"0xe0aeec7d6e5d1e44a11405d3b5bfc384ea092c39bea0b763ab937a26fd427132","urls":["bzz-raw://11aa3bff9da26ca2545132ec7994866690446a5321023811c254410d9593bd9b","dweb:/ipfs/QmVxWqadxvdfkqdrhfWisDqeAthibn4HEE1P6o9aFxXLhp"],"license":"MIT"},"src/libraries/Encoding.sol":{"keccak256":"0x1dafabcbd4877c7abe9698957b0a44b7e911cb8b11c1437a4ed897135669fa87","urls":["bzz-raw://6addfacefa26fdb44f56d73fa0172b97740de75629a962905ec2a20a28d40fff","dweb:/ipfs/QmboHMouqU19Rnbqrfo1gkfnuDBFcPiC9wsKgGtF2W1cNA"],"license":"MIT"},"src/libraries/Hashing.sol":{"keccak256":"0x89c07a0ca102cbe57b4e082543f2dd6dae0e1fd4a87908a334bd076fc914e7b8","urls":["bzz-raw://69c83489c9544ab442dc244c2feb2c6811b726a5eb5a509b97fc5ccb90b98c12","dweb:/ipfs/QmPGGJeLasc1HWHzd6odvWcNvFPQrbYtDubZcv8yp1HLtF"],"license":"MIT"},"src/libraries/Predeploys.sol":{"keccak256":"0x7b48b32b75e9ba0cd7f83b3304c6c1676dd8de20a5d40e8846bf7018ae9aff02","urls":["bzz-raw://7574fcc79c0d545b90071023aa81ee7880ab50b3057df598fa693bc4cf303663","dweb:/ipfs/QmWLxHzgfaTJ7thfb7khXkTY5UtSBZ5VTUB4DaAXVw7DRe"],"license":"MIT"},"src/libraries/SafeCall.sol":{"keccak256":"0x0636a7abb242bb5d6f5606967c8929e6aa7e63468c1e2ce40ad4780d4c4bf94f","urls":["bzz-raw://a4daec2ac8f9907bbf84ef0a1c48f03bae8657619bc6f42b3a672f25c516f17a","dweb:/ipfs/Qmf8gfRxBv8gEmCkP8YMPb2GGfj9QUnoNUyKE7UR2SWGnq"],"license":"MIT"},"src/libraries/Types.sol":{"keccak256":"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4","urls":["bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e","dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc"],"license":"MIT"},"src/libraries/rlp/RLPWriter.sol":{"keccak256":"0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6","urls":["bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b","dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV"],"license":"MIT"},"src/universal/CrossDomainMessenger.sol":{"keccak256":"0x330ae1479e88fc8a8b5b27a84df935a092a47ad13e59d9b9ea4982ad31bbe7b0","urls":["bzz-raw://66bf5fb4e78a03dcad4b9a8e2d5ed135f8e989aa02090747386843383fa6b7d1","dweb:/ipfs/QmTp66RoF6EaKeBrrZBuYAu3dsMfKo8de2XY9iHHnqfN3n"],"license":"MIT"},"src/universal/ISemver.sol":{"keccak256":"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44","urls":["bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a","dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR"],"license":"MIT"},"src/vendor/AddressAliasHelper.sol":{"keccak256":"0x6ecb83b4ec80fbe49c22f4f95d90482de64660ef5d422a19f4d4b04df31c1237","urls":["bzz-raw://1d0885be6e473962f9a0622176a22300165ac0cc1a1d7f2e22b11c3d656ace88","dweb:/ipfs/QmPRa3KmRpXW5P9ykveKRDgYN5zYo4cYLAYSnoqHX3KnXR"],"license":"Apache-2.0"}},"version":1},"storageLayout":{"storage":[{"astId":108324,"contract":"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger","label":"spacer_0_0_20","offset":0,"slot":"0","type":"t_address"},{"astId":46970,"contract":"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger","label":"_initialized","offset":20,"slot":"0","type":"t_uint8"},{"astId":46973,"contract":"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger","label":"_initializing","offset":21,"slot":"0","type":"t_bool"},{"astId":108331,"contract":"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger","label":"spacer_1_0_1600","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":108334,"contract":"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger","label":"spacer_51_0_20","offset":0,"slot":"51","type":"t_address"},{"astId":108339,"contract":"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger","label":"spacer_52_0_1568","offset":0,"slot":"52","type":"t_array(t_uint256)49_storage"},{"astId":108342,"contract":"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger","label":"spacer_101_0_1","offset":0,"slot":"101","type":"t_bool"},{"astId":108347,"contract":"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger","label":"spacer_102_0_1568","offset":0,"slot":"102","type":"t_array(t_uint256)49_storage"},{"astId":108350,"contract":"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger","label":"spacer_151_0_32","offset":0,"slot":"151","type":"t_uint256"},{"astId":108355,"contract":"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger","label":"spacer_152_0_1568","offset":0,"slot":"152","type":"t_array(t_uint256)49_storage"},{"astId":108360,"contract":"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger","label":"spacer_201_0_32","offset":0,"slot":"201","type":"t_mapping(t_bytes32,t_bool)"},{"astId":108365,"contract":"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger","label":"spacer_202_0_32","offset":0,"slot":"202","type":"t_mapping(t_bytes32,t_bool)"},{"astId":108410,"contract":"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger","label":"successfulMessages","offset":0,"slot":"203","type":"t_mapping(t_bytes32,t_bool)"},{"astId":108413,"contract":"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger","label":"xDomainMsgSender","offset":0,"slot":"204","type":"t_address"},{"astId":108416,"contract":"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger","label":"msgNonce","offset":0,"slot":"205","type":"t_uint240"},{"astId":108421,"contract":"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger","label":"failedMessages","offset":0,"slot":"206","type":"t_mapping(t_bytes32,t_bool)"},{"astId":108425,"contract":"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger","label":"otherMessenger","offset":0,"slot":"207","type":"t_contract(CrossDomainMessenger)108888"},{"astId":108430,"contract":"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger","label":"__gap","offset":0,"slot":"208","type":"t_array(t_uint256)43_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)43_storage":{"encoding":"inplace","label":"uint256[43]","numberOfBytes":"1376","base":"t_uint256"},"t_array(t_uint256)49_storage":{"encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568","base":"t_uint256"},"t_array(t_uint256)50_storage":{"encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600","base":"t_uint256"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(CrossDomainMessenger)108888":{"encoding":"inplace","label":"contract CrossDomainMessenger","numberOfBytes":"20"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_uint240":{"encoding":"inplace","label":"uint240","numberOfBytes":"30"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"version":1,"kind":"user","methods":{"MESSAGE_VERSION()":{"notice":"Current message version identifier."},"MIN_GAS_CALLDATA_OVERHEAD()":{"notice":"Extra gas added to base gas for each byte of calldata in a message."},"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR()":{"notice":"Denominator for dynamic overhead added to the base gas for a message."},"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR()":{"notice":"Numerator for dynamic overhead added to the base gas for a message."},"OTHER_MESSENGER()":{"notice":"Retrieves the address of the paired CrossDomainMessenger contract on the other chain Public getter is legacy and will be removed in the future. Use `otherMessenger()` instead."},"RELAY_CALL_OVERHEAD()":{"notice":"Gas reserved for performing the external call in `relayMessage`."},"RELAY_CONSTANT_OVERHEAD()":{"notice":"Constant overhead added to the base gas for a message."},"RELAY_GAS_CHECK_BUFFER()":{"notice":"Gas reserved for the execution between the `hasMinGas` check and the external call in `relayMessage`."},"RELAY_RESERVED_GAS()":{"notice":"Gas reserved for finalizing the execution of `relayMessage` after the safe call."},"baseGas(bytes,uint32)":{"notice":"Computes the amount of gas required to guarantee that a given message will be received on the other chain without running out of gas. Guaranteeing that a message will not run out of gas is important because this ensures that a message can always be replayed on the other chain if it fails to execute completely."},"constructor":{"notice":"Constructs the L2CrossDomainMessenger contract."},"failedMessages(bytes32)":{"notice":"Mapping of message hashes to a boolean if and only if the message has failed to be executed at least once. A message will not be present in this mapping if it successfully executed on the first attempt."},"initialize(address)":{"notice":"Initializer."},"l1CrossDomainMessenger()":{"notice":"Getter for the remote messenger. Public getter is legacy and will be removed in the future. Use `otherMessenger()` instead."},"messageNonce()":{"notice":"Retrieves the next message nonce. Message version will be added to the upper two bytes of the message nonce. Message version allows us to treat messages as having different structures."},"otherMessenger()":{"notice":"CrossDomainMessenger contract on the other chain."},"paused()":{"notice":"This function should return true if the contract is paused. On L1 this function will check the SuperchainConfig for its paused status. On L2 this function should be a no-op."},"relayMessage(uint256,address,address,uint256,uint256,bytes)":{"notice":"Relays a message that was sent by the other CrossDomainMessenger contract. Can only be executed via cross-chain call from the other messenger OR if the message was already received once and is currently being replayed."},"sendMessage(address,bytes,uint32)":{"notice":"Sends a message to some target address on the other chain. Note that if the call always reverts, then the message will be unrelayable, and any ETH sent will be permanently locked. The same will occur if the target on the other chain is considered unsafe (see the _isUnsafeTarget() function)."},"successfulMessages(bytes32)":{"notice":"Mapping of message hashes to boolean receipt values. Note that a message will only be present in this mapping if it has successfully been relayed on this chain, and can therefore not be relayed again."},"xDomainMessageSender()":{"notice":"Retrieves the address of the contract or wallet that initiated the currently executing message on the other chain. Will throw an error if there is no message currently being executed. Allows the recipient of a call to see who triggered it."}},"events":{"FailedRelayedMessage(bytes32)":{"notice":"Emitted whenever a message fails to be relayed on this chain."},"RelayedMessage(bytes32)":{"notice":"Emitted whenever a message is successfully relayed on this chain."},"SentMessage(address,address,bytes,uint256,uint256)":{"notice":"Emitted whenever a message is sent to the other chain."},"SentMessageExtension1(address,uint256)":{"notice":"Additional event data to emit, required as of Bedrock. Cannot be merged with the SentMessage event without breaking the ABI of this contract, this is good enough."}},"notice":"The L2CrossDomainMessenger is a high-level interface for message passing between L1 and L2 on the L2 side. Users are generally encouraged to use this contract instead of lower level message passing contracts."},"devdoc":{"version":1,"kind":"dev","methods":{"OTHER_MESSENGER()":{"returns":{"_0":"CrossDomainMessenger contract on the other chain."}},"baseGas(bytes,uint32)":{"params":{"_message":"Message to compute the amount of required gas for.","_minGasLimit":"Minimum desired gas limit when message goes to target."},"returns":{"_0":"Amount of gas required to guarantee message receipt."}},"initialize(address)":{"params":{"_l1CrossDomainMessenger":"L1CrossDomainMessenger contract on the other network."}},"l1CrossDomainMessenger()":{"returns":{"_0":"L1CrossDomainMessenger contract."}},"messageNonce()":{"returns":{"_0":"Nonce of the next message to be sent, with added message version."}},"paused()":{"returns":{"_0":"Whether or not the contract is paused."}},"relayMessage(uint256,address,address,uint256,uint256,bytes)":{"params":{"_message":"Message to send to the target.","_minGasLimit":"Minimum amount of gas that the message can be executed with.","_nonce":"Nonce of the message being relayed.","_sender":"Address of the user who sent the message.","_target":"Address that the message is targeted at.","_value":"ETH value to send with the message."}},"sendMessage(address,bytes,uint32)":{"params":{"_message":"Message to trigger the target address with.","_minGasLimit":"Minimum gas limit that the message can be executed with.","_target":"Target contract or wallet address."}},"xDomainMessageSender()":{"returns":{"_0":"Address of the sender of the currently executing message on the other chain."}}},"title":"L2CrossDomainMessenger"},"ast":{"absolutePath":"src/L2/L2CrossDomainMessenger.sol","id":90489,"exportedSymbols":{"AddressAliasHelper":[111913],"Constants":[103096],"CrossDomainMessenger":[108888],"ISemver":[109417],"L2CrossDomainMessenger":[90488],"L2ToL1MessagePasser":[91307],"Predeploys":[104124]},"nodeType":"SourceUnit","src":"32:2533:147","nodes":[{"id":90353,"nodeType":"PragmaDirective","src":"32:23:147","nodes":[],"literals":["solidity","0.8",".15"]},{"id":90355,"nodeType":"ImportDirective","src":"57:71:147","nodes":[],"absolutePath":"src/vendor/AddressAliasHelper.sol","file":"src/vendor/AddressAliasHelper.sol","nameLocation":"-1:-1:-1","scope":90489,"sourceUnit":111914,"symbolAliases":[{"foreign":{"id":90354,"name":"AddressAliasHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111913,"src":"66:18:147","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":90357,"nodeType":"ImportDirective","src":"129:58:147","nodes":[],"absolutePath":"src/libraries/Predeploys.sol","file":"src/libraries/Predeploys.sol","nameLocation":"-1:-1:-1","scope":90489,"sourceUnit":104125,"symbolAliases":[{"foreign":{"id":90356,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"138:10:147","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":90359,"nodeType":"ImportDirective","src":"188:78:147","nodes":[],"absolutePath":"src/universal/CrossDomainMessenger.sol","file":"src/universal/CrossDomainMessenger.sol","nameLocation":"-1:-1:-1","scope":90489,"sourceUnit":108889,"symbolAliases":[{"foreign":{"id":90358,"name":"CrossDomainMessenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108888,"src":"197:20:147","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":90361,"nodeType":"ImportDirective","src":"267:52:147","nodes":[],"absolutePath":"src/universal/ISemver.sol","file":"src/universal/ISemver.sol","nameLocation":"-1:-1:-1","scope":90489,"sourceUnit":109418,"symbolAliases":[{"foreign":{"id":90360,"name":"ISemver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109417,"src":"276:7:147","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":90363,"nodeType":"ImportDirective","src":"320:69:147","nodes":[],"absolutePath":"src/L2/L2ToL1MessagePasser.sol","file":"src/L2/L2ToL1MessagePasser.sol","nameLocation":"-1:-1:-1","scope":90489,"sourceUnit":91308,"symbolAliases":[{"foreign":{"id":90362,"name":"L2ToL1MessagePasser","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91307,"src":"329:19:147","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":90365,"nodeType":"ImportDirective","src":"390:56:147","nodes":[],"absolutePath":"src/libraries/Constants.sol","file":"src/libraries/Constants.sol","nameLocation":"-1:-1:-1","scope":90489,"sourceUnit":103097,"symbolAliases":[{"foreign":{"id":90364,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103096,"src":"399:9:147","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":90488,"nodeType":"ContractDefinition","src":"812:1752:147","nodes":[{"id":90374,"nodeType":"VariableDeclaration","src":"912:40:147","nodes":[],"baseFunctions":[109416],"constant":true,"documentation":{"id":90371,"nodeType":"StructuredDocumentation","src":"883:24:147","text":"@custom:semver 2.0.0"},"functionSelector":"54fd4d50","mutability":"constant","name":"version","nameLocation":"935:7:147","scope":90488,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":90372,"name":"string","nodeType":"ElementaryTypeName","src":"912:6:147","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"322e302e30","id":90373,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"945:7:147","typeDescriptions":{"typeIdentifier":"t_stringliteral_b4bcb154e38601c389396fa918314da42d4626f13ef6d0ceb07e5f5d26b2fbc3","typeString":"literal_string \"2.0.0\""},"value":"2.0.0"},"visibility":"public"},{"id":90390,"nodeType":"FunctionDefinition","src":"1023:127:147","nodes":[],"body":{"id":90389,"nodeType":"Block","src":"1060:90:147","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"hexValue":"30","id":90384,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1137:1:147","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":90383,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1129:7:147","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":90382,"name":"address","nodeType":"ElementaryTypeName","src":"1129:7:147","typeDescriptions":{}}},"id":90385,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1129:10:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":90381,"name":"CrossDomainMessenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108888,"src":"1108:20:147","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CrossDomainMessenger_$108888_$","typeString":"type(contract CrossDomainMessenger)"}},"id":90386,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1108:32:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}],"id":90380,"name":"initialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90404,"src":"1070:10:147","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_CrossDomainMessenger_$108888_$returns$__$","typeString":"function (contract CrossDomainMessenger)"}},"id":90387,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["_l1CrossDomainMessenger"],"nodeType":"FunctionCall","src":"1070:73:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90388,"nodeType":"ExpressionStatement","src":"1070:73:147"}]},"documentation":{"id":90375,"nodeType":"StructuredDocumentation","src":"959:59:147","text":"@notice Constructs the L2CrossDomainMessenger contract."},"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":90378,"kind":"baseConstructorSpecifier","modifierName":{"id":90377,"name":"CrossDomainMessenger","nodeType":"IdentifierPath","referencedDeclaration":108888,"src":"1037:20:147"},"nodeType":"ModifierInvocation","src":"1037:22:147"}],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":90376,"nodeType":"ParameterList","parameters":[],"src":"1034:2:147"},"returnParameters":{"id":90379,"nodeType":"ParameterList","parameters":[],"src":"1060:0:147"},"scope":90488,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":90404,"nodeType":"FunctionDefinition","src":"1278:175:147","nodes":[],"body":{"id":90403,"nodeType":"Block","src":"1363:90:147","nodes":[],"statements":[{"expression":{"arguments":[{"id":90400,"name":"_l1CrossDomainMessenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90394,"src":"1420:23:147","typeDescriptions":{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}],"id":90399,"name":"__CrossDomainMessenger_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108852,"src":"1373:27:147","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_CrossDomainMessenger_$108888_$returns$__$","typeString":"function (contract CrossDomainMessenger)"}},"id":90401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["_otherMessenger"],"nodeType":"FunctionCall","src":"1373:73:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90402,"nodeType":"ExpressionStatement","src":"1373:73:147"}]},"documentation":{"id":90391,"nodeType":"StructuredDocumentation","src":"1156:117:147","text":"@notice Initializer.\n @param _l1CrossDomainMessenger L1CrossDomainMessenger contract on the other network."},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":90397,"kind":"modifierInvocation","modifierName":{"id":90396,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":47034,"src":"1351:11:147"},"nodeType":"ModifierInvocation","src":"1351:11:147"}],"name":"initialize","nameLocation":"1287:10:147","parameters":{"id":90395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90394,"mutability":"mutable","name":"_l1CrossDomainMessenger","nameLocation":"1319:23:147","nodeType":"VariableDeclaration","scope":90404,"src":"1298:44:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"},"typeName":{"id":90393,"nodeType":"UserDefinedTypeName","pathNode":{"id":90392,"name":"CrossDomainMessenger","nodeType":"IdentifierPath","referencedDeclaration":108888,"src":"1298:20:147"},"referencedDeclaration":108888,"src":"1298:20:147","typeDescriptions":{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}},"visibility":"internal"}],"src":"1297:46:147"},"returnParameters":{"id":90398,"nodeType":"ParameterList","parameters":[],"src":"1363:0:147"},"scope":90488,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":90414,"nodeType":"FunctionDefinition","src":"1687:115:147","nodes":[],"body":{"id":90413,"nodeType":"Block","src":"1764:38:147","nodes":[],"statements":[{"expression":{"id":90411,"name":"otherMessenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108425,"src":"1781:14:147","typeDescriptions":{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}},"functionReturnParameters":90410,"id":90412,"nodeType":"Return","src":"1774:21:147"}]},"documentation":{"id":90405,"nodeType":"StructuredDocumentation","src":"1459:223:147","text":"@notice Getter for the remote messenger.\n Public getter is legacy and will be removed in the future. Use `otherMessenger()` instead.\n @return L1CrossDomainMessenger contract.\n @custom:legacy"},"functionSelector":"a7119869","implemented":true,"kind":"function","modifiers":[],"name":"l1CrossDomainMessenger","nameLocation":"1696:22:147","parameters":{"id":90406,"nodeType":"ParameterList","parameters":[],"src":"1718:2:147"},"returnParameters":{"id":90410,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90409,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":90414,"src":"1742:20:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"},"typeName":{"id":90408,"nodeType":"UserDefinedTypeName","pathNode":{"id":90407,"name":"CrossDomainMessenger","nodeType":"IdentifierPath","referencedDeclaration":108888,"src":"1742:20:147"},"referencedDeclaration":108888,"src":"1742:20:147","typeDescriptions":{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}},"visibility":"internal"}],"src":"1741:22:147"},"scope":90488,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":90443,"nodeType":"FunctionDefinition","src":"1849:269:147","nodes":[],"body":{"id":90442,"nodeType":"Block","src":"1956:162:147","nodes":[],"statements":[{"expression":{"arguments":[{"id":90437,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90417,"src":"2080:3:147","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90438,"name":"_gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90419,"src":"2085:9:147","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":90439,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90423,"src":"2096:5:147","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"arguments":[{"expression":{"id":90430,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"1994:10:147","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Predeploys_$104124_$","typeString":"type(library Predeploys)"}},"id":90431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"L2_TO_L1_MESSAGE_PASSER","nodeType":"MemberAccess","referencedDeclaration":104000,"src":"1994:34:147","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":90429,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1986:8:147","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":90428,"name":"address","nodeType":"ElementaryTypeName","src":"1986:8:147","stateMutability":"payable","typeDescriptions":{}}},"id":90432,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1986:43:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":90427,"name":"L2ToL1MessagePasser","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91307,"src":"1966:19:147","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_L2ToL1MessagePasser_$91307_$","typeString":"type(contract L2ToL1MessagePasser)"}},"id":90433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1966:64:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_L2ToL1MessagePasser_$91307","typeString":"contract L2ToL1MessagePasser"}},"id":90434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"initiateWithdrawal","nodeType":"MemberAccess","referencedDeclaration":91293,"src":"1966:83:147","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,uint256,bytes memory) payable external"}},"id":90436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":90435,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90421,"src":"2058:6:147","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"1966:100:147","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$value","typeString":"function (address,uint256,bytes memory) payable external"}},"id":90440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1966:145:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90441,"nodeType":"ExpressionStatement","src":"1966:145:147"}]},"baseFunctions":[108864],"documentation":{"id":90415,"nodeType":"StructuredDocumentation","src":"1808:36:147","text":"@inheritdoc CrossDomainMessenger"},"implemented":true,"kind":"function","modifiers":[],"name":"_sendMessage","nameLocation":"1858:12:147","overrides":{"id":90425,"nodeType":"OverrideSpecifier","overrides":[],"src":"1947:8:147"},"parameters":{"id":90424,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90417,"mutability":"mutable","name":"_to","nameLocation":"1879:3:147","nodeType":"VariableDeclaration","scope":90443,"src":"1871:11:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90416,"name":"address","nodeType":"ElementaryTypeName","src":"1871:7:147","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90419,"mutability":"mutable","name":"_gasLimit","nameLocation":"1891:9:147","nodeType":"VariableDeclaration","scope":90443,"src":"1884:16:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":90418,"name":"uint64","nodeType":"ElementaryTypeName","src":"1884:6:147","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":90421,"mutability":"mutable","name":"_value","nameLocation":"1910:6:147","nodeType":"VariableDeclaration","scope":90443,"src":"1902:14:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90420,"name":"uint256","nodeType":"ElementaryTypeName","src":"1902:7:147","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":90423,"mutability":"mutable","name":"_data","nameLocation":"1931:5:147","nodeType":"VariableDeclaration","scope":90443,"src":"1918:18:147","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":90422,"name":"bytes","nodeType":"ElementaryTypeName","src":"1918:5:147","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1870:67:147"},"returnParameters":{"id":90426,"nodeType":"ParameterList","parameters":[],"src":"1956:0:147"},"scope":90488,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":90462,"nodeType":"FunctionDefinition","src":"2165:164:147","nodes":[],"body":{"id":90461,"nodeType":"Block","src":"2232:97:147","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":90459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":90452,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2284:3:147","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":90453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2284:10:147","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":90450,"name":"AddressAliasHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111913,"src":"2249:18:147","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AddressAliasHelper_$111913_$","typeString":"type(library AddressAliasHelper)"}},"id":90451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"undoL1ToL2Alias","nodeType":"MemberAccess","referencedDeclaration":111912,"src":"2249:34:147","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$_t_address_$","typeString":"function (address) pure returns (address)"}},"id":90454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2249:46:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":90457,"name":"otherMessenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108425,"src":"2307:14:147","typeDescriptions":{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}],"id":90456,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2299:7:147","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":90455,"name":"address","nodeType":"ElementaryTypeName","src":"2299:7:147","typeDescriptions":{}}},"id":90458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2299:23:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2249:73:147","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":90449,"id":90460,"nodeType":"Return","src":"2242:80:147"}]},"baseFunctions":[108870],"documentation":{"id":90444,"nodeType":"StructuredDocumentation","src":"2124:36:147","text":"@inheritdoc CrossDomainMessenger"},"implemented":true,"kind":"function","modifiers":[],"name":"_isOtherMessenger","nameLocation":"2174:17:147","overrides":{"id":90446,"nodeType":"OverrideSpecifier","overrides":[],"src":"2208:8:147"},"parameters":{"id":90445,"nodeType":"ParameterList","parameters":[],"src":"2191:2:147"},"returnParameters":{"id":90449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90448,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":90462,"src":"2226:4:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":90447,"name":"bool","nodeType":"ElementaryTypeName","src":"2226:4:147","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2225:6:147"},"scope":90488,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":90487,"nodeType":"FunctionDefinition","src":"2376:186:147","nodes":[],"body":{"id":90486,"nodeType":"Block","src":"2456:106:147","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":90484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":90476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":90471,"name":"_target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90465,"src":"2473:7:147","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":90474,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2492:4:147","typeDescriptions":{"typeIdentifier":"t_contract$_L2CrossDomainMessenger_$90488","typeString":"contract L2CrossDomainMessenger"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_L2CrossDomainMessenger_$90488","typeString":"contract L2CrossDomainMessenger"}],"id":90473,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2484:7:147","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":90472,"name":"address","nodeType":"ElementaryTypeName","src":"2484:7:147","typeDescriptions":{}}},"id":90475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2484:13:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2473:24:147","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":90483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":90477,"name":"_target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90465,"src":"2501:7:147","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"expression":{"id":90480,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"2520:10:147","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Predeploys_$104124_$","typeString":"type(library Predeploys)"}},"id":90481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"L2_TO_L1_MESSAGE_PASSER","nodeType":"MemberAccess","referencedDeclaration":104000,"src":"2520:34:147","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":90479,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2512:7:147","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":90478,"name":"address","nodeType":"ElementaryTypeName","src":"2512:7:147","typeDescriptions":{}}},"id":90482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2512:43:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2501:54:147","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2473:82:147","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":90470,"id":90485,"nodeType":"Return","src":"2466:89:147"}]},"baseFunctions":[108878],"documentation":{"id":90463,"nodeType":"StructuredDocumentation","src":"2335:36:147","text":"@inheritdoc CrossDomainMessenger"},"implemented":true,"kind":"function","modifiers":[],"name":"_isUnsafeTarget","nameLocation":"2385:15:147","overrides":{"id":90467,"nodeType":"OverrideSpecifier","overrides":[],"src":"2432:8:147"},"parameters":{"id":90466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90465,"mutability":"mutable","name":"_target","nameLocation":"2409:7:147","nodeType":"VariableDeclaration","scope":90487,"src":"2401:15:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90464,"name":"address","nodeType":"ElementaryTypeName","src":"2401:7:147","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2400:17:147"},"returnParameters":{"id":90470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90469,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":90487,"src":"2450:4:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":90468,"name":"bool","nodeType":"ElementaryTypeName","src":"2450:4:147","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2449:6:147"},"scope":90488,"stateMutability":"view","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":90367,"name":"CrossDomainMessenger","nodeType":"IdentifierPath","referencedDeclaration":108888,"src":"847:20:147"},"id":90368,"nodeType":"InheritanceSpecifier","src":"847:20:147"},{"baseName":{"id":90369,"name":"ISemver","nodeType":"IdentifierPath","referencedDeclaration":109417,"src":"869:7:147"},"id":90370,"nodeType":"InheritanceSpecifier","src":"869:7:147"}],"canonicalName":"L2CrossDomainMessenger","contractDependencies":[],"contractKind":"contract","documentation":{"id":90366,"nodeType":"StructuredDocumentation","src":"448:364:147","text":"@custom:proxied\n @custom:predeploy 0x4200000000000000000000000000000000000007\n @title L2CrossDomainMessenger\n @notice The L2CrossDomainMessenger is a high-level interface for message passing between L1 and\n L2 on the L2 side. Users are generally encouraged to use this contract instead of lower\n level message passing contracts."},"fullyImplemented":true,"linearizedBaseContracts":[90488,109417,108888,108366,47114,108325],"name":"L2CrossDomainMessenger","nameLocation":"821:22:147","scope":90489,"usedErrors":[]}],"license":"MIT"},"id":147} \ No newline at end of file diff --git a/packages/sdk/src/forge-artifacts/L2ERC721Bridge.json b/packages/sdk/src/forge-artifacts/L2ERC721Bridge.json deleted file mode 100644 index 4ec47e1d9f16..000000000000 --- a/packages/sdk/src/forge-artifacts/L2ERC721Bridge.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"MESSENGER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract CrossDomainMessenger"}],"stateMutability":"view"},{"type":"function","name":"OTHER_BRIDGE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract StandardBridge"}],"stateMutability":"view"},{"type":"function","name":"bridgeERC721","inputs":[{"name":"_localToken","type":"address","internalType":"address"},{"name":"_remoteToken","type":"address","internalType":"address"},{"name":"_tokenId","type":"uint256","internalType":"uint256"},{"name":"_minGasLimit","type":"uint32","internalType":"uint32"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"bridgeERC721To","inputs":[{"name":"_localToken","type":"address","internalType":"address"},{"name":"_remoteToken","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_tokenId","type":"uint256","internalType":"uint256"},{"name":"_minGasLimit","type":"uint32","internalType":"uint32"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"finalizeBridgeERC721","inputs":[{"name":"_localToken","type":"address","internalType":"address"},{"name":"_remoteToken","type":"address","internalType":"address"},{"name":"_from","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_tokenId","type":"uint256","internalType":"uint256"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[{"name":"_l1ERC721Bridge","type":"address","internalType":"address payable"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"messenger","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract CrossDomainMessenger"}],"stateMutability":"view"},{"type":"function","name":"otherBridge","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract StandardBridge"}],"stateMutability":"view"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"event","name":"ERC721BridgeFinalized","inputs":[{"name":"localToken","type":"address","indexed":true,"internalType":"address"},{"name":"remoteToken","type":"address","indexed":true,"internalType":"address"},{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"extraData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ERC721BridgeInitiated","inputs":[{"name":"localToken","type":"address","indexed":true,"internalType":"address"},{"name":"remoteToken","type":"address","indexed":true,"internalType":"address"},{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"extraData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false}],"bytecode":{"object":"0x60806040523480156200001157600080fd5b506200001e600062000024565b62000217565b600054610100900460ff1615808015620000455750600054600160ff909116105b8062000075575062000062306200016d60201b62000a3e1760201c565b15801562000075575060005460ff166001145b620000de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000102576000805461ff0019166101001790555b62000122734200000000000000000000000000000000000007836200017c565b801562000169576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620001e95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d5565b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b61160c80620002276000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80637f46ddb211610076578063aa5574521161005b578063aa557452146101c9578063c4d66de8146101dc578063c89701a2146101ef57600080fd5b80637f46ddb21461018d578063927ede2d146101ab57600080fd5b806354fd4d50116100a757806354fd4d50146101225780635c975abb1461016b578063761f44931461017a57600080fd5b80633687011a146100c35780633cb747bf146100d8575b600080fd5b6100d66100d136600461128a565b61020f565b005b6001546100f89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61015e6040518060400160405280600581526020017f312e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101199190611378565b60405160008152602001610119565b6100d661018836600461138b565b6102bb565b60025473ffffffffffffffffffffffffffffffffffffffff166100f8565b60015473ffffffffffffffffffffffffffffffffffffffff166100f8565b6100d66101d7366004611423565b6107d9565b6100d66101ea36600461149a565b610895565b6002546100f89073ffffffffffffffffffffffffffffffffffffffff1681565b333b156102a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102b38686333388888888610a5a565b505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331480156103905750600254600154604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691636e296e45916004808201926020929091908290030181865afa158015610354573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037891906114b7565b73ffffffffffffffffffffffffffffffffffffffff16145b61041c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f746865722062726964676500606482015260840161029a565b3073ffffffffffffffffffffffffffffffffffffffff8816036104c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c324552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c6600000000000000000000000000000000000000000000606482015260840161029a565b6104eb877f74259ebf00000000000000000000000000000000000000000000000000000000610fc2565b610577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324552433732314272696467653a206c6f63616c20746f6b656e20696e746560448201527f7266616365206973206e6f7420636f6d706c69616e7400000000000000000000606482015260840161029a565b8673ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e691906114b7565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146106c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4c324552433732314272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433732312060648201527f6c6f63616c20746f6b656e000000000000000000000000000000000000000000608482015260a40161029a565b6040517fa144819400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526024820185905288169063a144819490604401600060405180830381600087803b15801561073657600080fd5b505af115801561074a573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac878787876040516107c8949392919061151d565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff851661087c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f74206265206164647265737328302900000000000000000000000000000000606482015260840161029a565b61088c8787338888888888610a5a565b50505050505050565b600054610100900460ff16158080156108b55750600054600160ff909116105b806108cf5750303b1580156108cf575060005460ff166001145b61095b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161029a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156109b957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109d773420000000000000000000000000000000000000783610fe5565b8015610a3a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff8716610afd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c324552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f742062652061646472657373283029000000000000000000000000000000606482015260840161029a565b6040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff891690636352211e90602401602060405180830381865afa158015610b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8c91906114b7565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610c46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324552433732314272696467653a205769746864726177616c206973206e6f60448201527f74206265696e6720696e69746961746564206279204e4654206f776e65720000606482015260840161029a565b60008873ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb791906114b7565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c324552433732314272696467653a2072656d6f746520746f6b656e20646f6560448201527f73206e6f74206d6174636820676976656e2076616c7565000000000000000000606482015260840161029a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018790528a1690639dc29fac90604401600060405180830381600087803b158015610de457600080fd5b505af1158015610df8573d6000803e3d6000fd5b50505050600063761f449360e01b828b8a8a8a8989604051602401610e23979695949392919061155d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260015460025492517f3dbb202b00000000000000000000000000000000000000000000000000000000815291935073ffffffffffffffffffffffffffffffffffffffff90811692633dbb202b92610f0292919091169085908a906004016115ba565b600060405180830381600087803b158015610f1c57600080fd5b505af1158015610f30573d6000803e3d6000fd5b505050508773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a58a8a8989604051610fae949392919061151d565b60405180910390a450505050505050505050565b6000610fcd836110cf565b8015610fde5750610fde8383611134565b9392505050565b600054610100900460ff1661107c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161029a565b6001805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560028054929093169116179055565b60006110fb827f01ffc9a700000000000000000000000000000000000000000000000000000000611134565b801561112e575061112c827fffffffff00000000000000000000000000000000000000000000000000000000611134565b155b92915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156111ec575060208210155b80156111f85750600081115b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461122557600080fd5b50565b803563ffffffff8116811461123c57600080fd5b919050565b60008083601f84011261125357600080fd5b50813567ffffffffffffffff81111561126b57600080fd5b60208301915083602082850101111561128357600080fd5b9250929050565b60008060008060008060a087890312156112a357600080fd5b86356112ae81611203565b955060208701356112be81611203565b9450604087013593506112d360608801611228565b9250608087013567ffffffffffffffff8111156112ef57600080fd5b6112fb89828a01611241565b979a9699509497509295939492505050565b6000815180845260005b8181101561133357602081850181015186830182015201611317565b81811115611345576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610fde602083018461130d565b600080600080600080600060c0888a0312156113a657600080fd5b87356113b181611203565b965060208801356113c181611203565b955060408801356113d181611203565b945060608801356113e181611203565b93506080880135925060a088013567ffffffffffffffff81111561140457600080fd5b6114108a828b01611241565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561143e57600080fd5b873561144981611203565b9650602088013561145981611203565b9550604088013561146981611203565b94506060880135935061147e60808901611228565b925060a088013567ffffffffffffffff81111561140457600080fd5b6000602082840312156114ac57600080fd5b8135610fde81611203565b6000602082840312156114c957600080fd5b8151610fde81611203565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006115536060830184866114d4565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a08301526115ad60c0830184866114d4565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006115e9606083018561130d565b905063ffffffff8316604083015294935050505056fea164736f6c634300080f000a","sourceMap":"1389:4507:148:-:0;;;1576:98;;;;;;;;;-1:-1:-1;1615:52:148::1;1661:1;1615:10;:52::i;:::-;1389:4507:::0;;1813:263;3100:19:43;3123:13;;;;;;3122:14;;3168:34;;;;-1:-1:-1;3186:12:43;;3201:1;3186:12;;;;:16;3168:34;3167:97;;;;3209:33;3236:4;3209:18;;;;;:33;;:::i;:::-;3208:34;:55;;;;-1:-1:-1;3246:12:43;;;;;:17;3208:55;3146:190;;;;-1:-1:-1;;;3146:190:43;;216:2:357;3146:190:43;;;198:21:357;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:357;;;338:44;399:19;;3146:190:43;;;;;;;;;3346:12;:16;;-1:-1:-1;;3346:16:43;3361:1;3346:16;;;3372:65;;;;3406:13;:20;;-1:-1:-1;;3406:20:43;;;;;3372:65;1895:174:148::1;480:42:199;2042:15:148::0;1895:19:::1;:174::i;:::-;3461:14:43::0;3457:99;;;3507:5;3491:21;;-1:-1:-1;;3491:21:43;;;3531:14;;-1:-1:-1;581:36:357;;3531:14:43;;569:2:357;554:18;3531:14:43;;;;;;;3457:99;3090:472;1813:263:148;:::o;1175:320:59:-;-1:-1:-1;;;;;1465:19:59;;:23;;;1175:320::o;3043:234:224:-;4888:13:43;;;;;;;4880:69;;;;-1:-1:-1;;;4880:69:43;;830:2:357;4880:69:43;;;812:21:357;869:2;849:18;;;842:30;908:34;888:18;;;881:62;-1:-1:-1;;;959:18:357;;;952:41;1010:19;;4880:69:43;628:407:357;4880:69:43;3212:9:224::1;:22:::0;;-1:-1:-1;;;;;3212:22:224;;::::1;-1:-1:-1::0;;;;;;3212:22:224;;::::1;;::::0;;;3244:11:::1;:26:::0;;;;;::::1;::::0;::::1;;::::0;;3043:234::o;628:407:357:-;1389:4507:148;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106100be5760003560e01c80637f46ddb211610076578063aa5574521161005b578063aa557452146101c9578063c4d66de8146101dc578063c89701a2146101ef57600080fd5b80637f46ddb21461018d578063927ede2d146101ab57600080fd5b806354fd4d50116100a757806354fd4d50146101225780635c975abb1461016b578063761f44931461017a57600080fd5b80633687011a146100c35780633cb747bf146100d8575b600080fd5b6100d66100d136600461128a565b61020f565b005b6001546100f89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61015e6040518060400160405280600581526020017f312e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101199190611378565b60405160008152602001610119565b6100d661018836600461138b565b6102bb565b60025473ffffffffffffffffffffffffffffffffffffffff166100f8565b60015473ffffffffffffffffffffffffffffffffffffffff166100f8565b6100d66101d7366004611423565b6107d9565b6100d66101ea36600461149a565b610895565b6002546100f89073ffffffffffffffffffffffffffffffffffffffff1681565b333b156102a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102b38686333388888888610a5a565b505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331480156103905750600254600154604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691636e296e45916004808201926020929091908290030181865afa158015610354573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037891906114b7565b73ffffffffffffffffffffffffffffffffffffffff16145b61041c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f746865722062726964676500606482015260840161029a565b3073ffffffffffffffffffffffffffffffffffffffff8816036104c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c324552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c6600000000000000000000000000000000000000000000606482015260840161029a565b6104eb877f74259ebf00000000000000000000000000000000000000000000000000000000610fc2565b610577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324552433732314272696467653a206c6f63616c20746f6b656e20696e746560448201527f7266616365206973206e6f7420636f6d706c69616e7400000000000000000000606482015260840161029a565b8673ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e691906114b7565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146106c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4c324552433732314272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433732312060648201527f6c6f63616c20746f6b656e000000000000000000000000000000000000000000608482015260a40161029a565b6040517fa144819400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526024820185905288169063a144819490604401600060405180830381600087803b15801561073657600080fd5b505af115801561074a573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac878787876040516107c8949392919061151d565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff851661087c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f74206265206164647265737328302900000000000000000000000000000000606482015260840161029a565b61088c8787338888888888610a5a565b50505050505050565b600054610100900460ff16158080156108b55750600054600160ff909116105b806108cf5750303b1580156108cf575060005460ff166001145b61095b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161029a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156109b957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109d773420000000000000000000000000000000000000783610fe5565b8015610a3a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff8716610afd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c324552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f742062652061646472657373283029000000000000000000000000000000606482015260840161029a565b6040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff891690636352211e90602401602060405180830381865afa158015610b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8c91906114b7565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610c46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324552433732314272696467653a205769746864726177616c206973206e6f60448201527f74206265696e6720696e69746961746564206279204e4654206f776e65720000606482015260840161029a565b60008873ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb791906114b7565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c324552433732314272696467653a2072656d6f746520746f6b656e20646f6560448201527f73206e6f74206d6174636820676976656e2076616c7565000000000000000000606482015260840161029a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018790528a1690639dc29fac90604401600060405180830381600087803b158015610de457600080fd5b505af1158015610df8573d6000803e3d6000fd5b50505050600063761f449360e01b828b8a8a8a8989604051602401610e23979695949392919061155d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260015460025492517f3dbb202b00000000000000000000000000000000000000000000000000000000815291935073ffffffffffffffffffffffffffffffffffffffff90811692633dbb202b92610f0292919091169085908a906004016115ba565b600060405180830381600087803b158015610f1c57600080fd5b505af1158015610f30573d6000803e3d6000fd5b505050508773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a58a8a8989604051610fae949392919061151d565b60405180910390a450505050505050505050565b6000610fcd836110cf565b8015610fde5750610fde8383611134565b9392505050565b600054610100900460ff1661107c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161029a565b6001805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560028054929093169116179055565b60006110fb827f01ffc9a700000000000000000000000000000000000000000000000000000000611134565b801561112e575061112c827fffffffff00000000000000000000000000000000000000000000000000000000611134565b155b92915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156111ec575060208210155b80156111f85750600081115b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461122557600080fd5b50565b803563ffffffff8116811461123c57600080fd5b919050565b60008083601f84011261125357600080fd5b50813567ffffffffffffffff81111561126b57600080fd5b60208301915083602082850101111561128357600080fd5b9250929050565b60008060008060008060a087890312156112a357600080fd5b86356112ae81611203565b955060208701356112be81611203565b9450604087013593506112d360608801611228565b9250608087013567ffffffffffffffff8111156112ef57600080fd5b6112fb89828a01611241565b979a9699509497509295939492505050565b6000815180845260005b8181101561133357602081850181015186830182015201611317565b81811115611345576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610fde602083018461130d565b600080600080600080600060c0888a0312156113a657600080fd5b87356113b181611203565b965060208801356113c181611203565b955060408801356113d181611203565b945060608801356113e181611203565b93506080880135925060a088013567ffffffffffffffff81111561140457600080fd5b6114108a828b01611241565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561143e57600080fd5b873561144981611203565b9650602088013561145981611203565b9550604088013561146981611203565b94506060880135935061147e60808901611228565b925060a088013567ffffffffffffffff81111561140457600080fd5b6000602082840312156114ac57600080fd5b8135610fde81611203565b6000602082840312156114c957600080fd5b8151610fde81611203565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006115536060830184866114d4565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a08301526115ad60c0830184866114d4565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006115e9606083018561130d565b905063ffffffff8316604083015294935050505056fea164736f6c634300080f000a","sourceMap":"1389:4507:148:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5688:971:224;;;;;;:::i;:::-;;:::i;:::-;;829:37;;;;;;;;;;;;1732:42:357;1720:55;;;1702:74;;1690:2;1675:18;829:37:224;;;;;;;;1473:40:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4239:82:224:-;;;4286:4;2688:41:357;;2676:2;2661:18;4239:82:224;2548:187:357;2843:1275:148;;;;;;:::i;:::-;;:::i;3858:98:224:-;3938:11;;;;3858:98;;3511:99;3594:9;;;;3511:99;;7885:428;;;;;;:::i;:::-;;:::i;1813:263:148:-;;;;;;:::i;:::-;;:::i;967:33:224:-;;;;;;;;;5688:971;6472:10;1465:19:59;:23;6444:89:224;;;;;;;5483:2:357;6444:89:224;;;5465:21:357;5522:2;5502:18;;;5495:30;5561:34;5541:18;;;5534:62;5632:15;5612:18;;;5605:43;5665:19;;6444:89:224;;;;;;;;;6544:108;6566:11;6579:12;6593:10;6605;6617:8;6627:12;6641:10;;6544:21;:108::i;:::-;5688:971;;;;;;:::o;2843:1275:148:-;2669:9:224;;;;2647:10;:32;:92;;;;-1:-1:-1;2727:11:224;;;2683:9;:32;;;;;;;;2727:11;;;;;2683:9;;;;:30;;:32;;;;;;;;;;;;;;;:9;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;2647:92;2626:202;;;;;;;6153:2:357;2626:202:224;;;6135:21:357;6192:2;6172:18;;;6165:30;6231:34;6211:18;;;6204:62;6302:33;6282:18;;;6275:61;6353:19;;2626:202:224;5951:427:357;2626:202:224;3129:4:148::1;3106:28;::::0;::::1;::::0;3098:83:::1;;;::::0;::::1;::::0;;6585:2:357;3098:83:148::1;::::0;::::1;6567:21:357::0;6624:2;6604:18;;;6597:30;6663:34;6643:18;;;6636:62;6734:12;6714:18;;;6707:40;6764:19;;3098:83:148::1;6383:406:357::0;3098:83:148::1;3331:87;3363:11;3376:41;3331:31;:87::i;:::-;3310:188;;;::::0;::::1;::::0;;6996:2:357;3310:188:148::1;::::0;::::1;6978:21:357::0;7035:2;7015:18;;;7008:30;7074:34;7054:18;;;7047:62;7145:24;7125:18;;;7118:52;7187:19;;3310:188:148::1;6794:418:357::0;3310:188:148::1;3570:11;3546:48;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3530:66;;:12;:66;;;3509:188;;;::::0;::::1;::::0;;7419:2:357;3509:188:148::1;::::0;::::1;7401:21:357::0;7458:2;7438:18;;;7431:30;7497:34;7477:18;;;7470:62;7568:34;7548:18;;;7541:62;7640:13;7619:19;;;7612:42;7671:19;;3509:188:148::1;7217:479:357::0;3509:188:148::1;3898:60;::::0;;;;:45:::1;7893:55:357::0;;;3898:60:148::1;::::0;::::1;7875:74:357::0;7965:18;;;7958:34;;;3898:45:148;::::1;::::0;::::1;::::0;7848:18:357;;3898:60:148::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4078:5;4029:82;;4064:12;4029:82;;4051:11;4029:82;;;4085:3;4090:8;4100:10;;4029:82;;;;;;;;;:::i;:::-;;;;;;;;2843:1275:::0;;;;;;;:::o;7885:428:224:-;8124:17;;;8116:78;;;;;;;8975:2:357;8116:78:224;;;8957:21:357;9014:2;8994:18;;;8987:30;9053:34;9033:18;;;9026:62;9124:18;9104;;;9097:46;9160:19;;8116:78:224;8773:412:357;8116:78:224;8205:101;8227:11;8240:12;8254:10;8266:3;8271:8;8281:12;8295:10;;8205:21;:101::i;:::-;7885:428;;;;;;;:::o;1813:263:148:-;3100:19:43;3123:13;;;;;;3122:14;;3168:34;;;;-1:-1:-1;3186:12:43;;3201:1;3186:12;;;;:16;3168:34;3167:97;;;-1:-1:-1;3236:4:43;1465:19:59;:23;;;3208:55:43;;-1:-1:-1;3246:12:43;;;;;:17;3208:55;3146:190;;;;;;;9392:2:357;3146:190:43;;;9374:21:357;9431:2;9411:18;;;9404:30;9470:34;9450:18;;;9443:62;9541:16;9521:18;;;9514:44;9575:19;;3146:190:43;9190:410:357;3146:190:43;3346:12;:16;;;;3361:1;3346:16;;;3372:65;;;;3406:13;:20;;;;;;;;3372:65;1895:174:148::1;480:42:199;2042:15:148;1895:19;:174::i;:::-;3461:14:43::0;3457:99;;;3507:5;3491:21;;;;;;3531:14;;-1:-1:-1;9757:36:357;;3531:14:43;;9745:2:357;9730:18;3531:14:43;;;;;;;3457:99;3090:472;1813:263:148;:::o;1175:320:59:-;1465:19;;;:23;;;1175:320::o;4157:1737:148:-;4443:26;;;4435:88;;;;;;;10006:2:357;4435:88:148;;;9988:21:357;10045:2;10025:18;;;10018:30;10084:34;10064:18;;;10057:62;10155:19;10135:18;;;10128:47;10192:19;;4435:88:148;9804:413:357;4435:88:148;4637:54;;;;;;;;10368:25:357;;;4637:44:148;;;;;;10341:18:357;;4637:54:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4628:63;;:5;:63;;;4607:172;;;;;;;10606:2:357;4607:172:148;;;10588:21:357;10645:2;10625:18;;;10618:30;10684:34;10664:18;;;10657:62;10755:32;10735:18;;;10728:60;10805:19;;4607:172:148;10404:426:357;4607:172:148;4930:19;4976:11;4952:48;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4930:72;;5035:12;5020:27;;:11;:27;;;5012:95;;;;;;;11037:2:357;5012:95:148;;;11019:21:357;11076:2;11056:18;;;11049:30;11115:34;11095:18;;;11088:62;11186:25;11166:18;;;11159:53;11229:19;;5012:95:148;10835:419:357;5012:95:148;5287:58;;;;;:41;7893:55:357;;;5287:58:148;;;7875:74:357;7965:18;;;7958:34;;;5287:41:148;;;;;7848:18:357;;5287:58:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5356:20;5415:44;;;5461:11;5474;5487:5;5494:3;5499:8;5509:10;;5379:150;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5632:9;;5673:11;;5632:103;;;;;5379:150;;-1:-1:-1;5632:9:148;;;;;:21;;:103;;5673:11;;;;;5379:150;;5720:12;;5632:103;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5854:5;5806:81;;5841:11;5806:81;;5828:11;5806:81;;;5861:3;5866:8;5876:10;;5806:81;;;;;;;;;:::i;:::-;;;;;;;;4425:1469;;4157:1737;;;;;;;;:::o;1333:274:67:-;1420:4;1527:23;1542:7;1527:14;:23::i;:::-;:73;;;;;1554:46;1579:7;1588:11;1554:24;:46::i;:::-;1520:80;1333:274;-1:-1:-1;;;1333:274:67:o;3043:234:224:-;4888:13:43;;;;;;;4880:69;;;;;;;12595:2:357;4880:69:43;;;12577:21:357;12634:2;12614:18;;;12607:30;12673:34;12653:18;;;12646:62;12744:13;12724:18;;;12717:41;12775:19;;4880:69:43;12393:407:357;4880:69:43;3212:9:224::1;:22:::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;;3244:11:::1;:26:::0;;;;;::::1;::::0;::::1;;::::0;;3043:234::o;704:411:67:-;768:4;975:60;1000:7;1009:25;975:24;:60::i;:::-;:133;;;;-1:-1:-1;1052:56:67;1077:7;1086:21;1052:24;:56::i;:::-;1051:57;975:133;956:152;704:411;-1:-1:-1;;704:411:67:o;4223:638::-;4385:71;;;12979:66:357;12967:79;;4385:71:67;;;;12949:98:357;;;;4385:71:67;;;;;;;;;;12922:18:357;;;;4385:71:67;;;;;;;;;;;4408:34;4385:71;;;4664:20;;4316:4;;4385:71;4316:4;;;;;;4385:71;4316:4;;4664:20;4629:7;4622:5;4611:86;4600:97;;4724:16;4710:30;;4774:4;4768:11;4753:26;;4806:7;:29;;;;;4831:4;4817:10;:18;;4806:29;:48;;;;;4853:1;4839:11;:15;4806:48;4799:55;4223:638;-1:-1:-1;;;;;;;4223:638:67:o;14:154:357:-;100:42;93:5;89:54;82:5;79:65;69:93;;158:1;155;148:12;69:93;14:154;:::o;173:163::-;240:20;;300:10;289:22;;279:33;;269:61;;326:1;323;316:12;269:61;173:163;;;:::o;341:347::-;392:8;402:6;456:3;449:4;441:6;437:17;433:27;423:55;;474:1;471;464:12;423:55;-1:-1:-1;497:20:357;;540:18;529:30;;526:50;;;572:1;569;562:12;526:50;609:4;601:6;597:17;585:29;;661:3;654:4;645:6;637;633:19;629:30;626:39;623:59;;;678:1;675;668:12;623:59;341:347;;;;;:::o;693:827::-;798:6;806;814;822;830;838;891:3;879:9;870:7;866:23;862:33;859:53;;;908:1;905;898:12;859:53;947:9;934:23;966:31;991:5;966:31;:::i;:::-;1016:5;-1:-1:-1;1073:2:357;1058:18;;1045:32;1086:33;1045:32;1086:33;:::i;:::-;1138:7;-1:-1:-1;1192:2:357;1177:18;;1164:32;;-1:-1:-1;1215:37:357;1248:2;1233:18;;1215:37;:::i;:::-;1205:47;;1303:3;1292:9;1288:19;1275:33;1331:18;1323:6;1320:30;1317:50;;;1363:1;1360;1353:12;1317:50;1402:58;1452:7;1443:6;1432:9;1428:22;1402:58;:::i;:::-;693:827;;;;-1:-1:-1;693:827:357;;-1:-1:-1;693:827:357;;1479:8;;693:827;-1:-1:-1;;;693:827:357:o;1787:531::-;1829:3;1867:5;1861:12;1894:6;1889:3;1882:19;1919:1;1929:162;1943:6;1940:1;1937:13;1929:162;;;2005:4;2061:13;;;2057:22;;2051:29;2033:11;;;2029:20;;2022:59;1958:12;1929:162;;;2109:6;2106:1;2103:13;2100:87;;;2175:1;2168:4;2159:6;2154:3;2150:16;2146:27;2139:38;2100:87;-1:-1:-1;2232:2:357;2220:15;2237:66;2216:88;2207:98;;;;2307:4;2203:109;;1787:531;-1:-1:-1;;1787:531:357:o;2323:220::-;2472:2;2461:9;2454:21;2435:4;2492:45;2533:2;2522:9;2518:18;2510:6;2492:45;:::i;2740:1038::-;2855:6;2863;2871;2879;2887;2895;2903;2956:3;2944:9;2935:7;2931:23;2927:33;2924:53;;;2973:1;2970;2963:12;2924:53;3012:9;2999:23;3031:31;3056:5;3031:31;:::i;:::-;3081:5;-1:-1:-1;3138:2:357;3123:18;;3110:32;3151:33;3110:32;3151:33;:::i;:::-;3203:7;-1:-1:-1;3262:2:357;3247:18;;3234:32;3275:33;3234:32;3275:33;:::i;:::-;3327:7;-1:-1:-1;3386:2:357;3371:18;;3358:32;3399:33;3358:32;3399:33;:::i;:::-;3451:7;-1:-1:-1;3505:3:357;3490:19;;3477:33;;-1:-1:-1;3561:3:357;3546:19;;3533:33;3589:18;3578:30;;3575:50;;;3621:1;3618;3611:12;3575:50;3660:58;3710:7;3701:6;3690:9;3686:22;3660:58;:::i;:::-;2740:1038;;;;-1:-1:-1;2740:1038:357;;-1:-1:-1;2740:1038:357;;;;3634:84;;-1:-1:-1;;;2740:1038:357:o;4047:969::-;4161:6;4169;4177;4185;4193;4201;4209;4262:3;4250:9;4241:7;4237:23;4233:33;4230:53;;;4279:1;4276;4269:12;4230:53;4318:9;4305:23;4337:31;4362:5;4337:31;:::i;:::-;4387:5;-1:-1:-1;4444:2:357;4429:18;;4416:32;4457:33;4416:32;4457:33;:::i;:::-;4509:7;-1:-1:-1;4568:2:357;4553:18;;4540:32;4581:33;4540:32;4581:33;:::i;:::-;4633:7;-1:-1:-1;4687:2:357;4672:18;;4659:32;;-1:-1:-1;4710:38:357;4743:3;4728:19;;4710:38;:::i;:::-;4700:48;;4799:3;4788:9;4784:19;4771:33;4827:18;4819:6;4816:30;4813:50;;;4859:1;4856;4849:12;5021:255;5088:6;5141:2;5129:9;5120:7;5116:23;5112:32;5109:52;;;5157:1;5154;5147:12;5109:52;5196:9;5183:23;5215:31;5240:5;5215:31;:::i;5695:251::-;5765:6;5818:2;5806:9;5797:7;5793:23;5789:32;5786:52;;;5834:1;5831;5824:12;5786:52;5866:9;5860:16;5885:31;5910:5;5885:31;:::i;8003:325::-;8091:6;8086:3;8079:19;8143:6;8136:5;8129:4;8124:3;8120:14;8107:43;;8195:1;8188:4;8179:6;8174:3;8170:16;8166:27;8159:38;8061:3;8317:4;8247:66;8242:2;8234:6;8230:15;8226:88;8221:3;8217:98;8213:109;8206:116;;8003:325;;;;:::o;8333:435::-;8558:42;8550:6;8546:55;8535:9;8528:74;8638:6;8633:2;8622:9;8618:18;8611:34;8681:2;8676;8665:9;8661:18;8654:30;8509:4;8701:61;8758:2;8747:9;8743:18;8735:6;8727;8701:61;:::i;:::-;8693:69;8333:435;-1:-1:-1;;;;;;8333:435:357:o;11259:700::-;11519:4;11548:42;11629:2;11621:6;11617:15;11606:9;11599:34;11681:2;11673:6;11669:15;11664:2;11653:9;11649:18;11642:43;11733:2;11725:6;11721:15;11716:2;11705:9;11701:18;11694:43;11785:2;11777:6;11773:15;11768:2;11757:9;11753:18;11746:43;;11826:6;11820:3;11809:9;11805:19;11798:35;11870:3;11864;11853:9;11849:19;11842:32;11891:62;11948:3;11937:9;11933:19;11925:6;11917;11891:62;:::i;:::-;11883:70;11259:700;-1:-1:-1;;;;;;;;;11259:700:357:o;11964:424::-;12177:42;12169:6;12165:55;12154:9;12147:74;12257:2;12252;12241:9;12237:18;12230:30;12128:4;12277:45;12318:2;12307:9;12303:18;12295:6;12277:45;:::i;:::-;12269:53;;12370:10;12362:6;12358:23;12353:2;12342:9;12338:18;12331:51;11964:424;;;;;;:::o","linkReferences":{}},"methodIdentifiers":{"MESSENGER()":"927ede2d","OTHER_BRIDGE()":"7f46ddb2","bridgeERC721(address,address,uint256,uint32,bytes)":"3687011a","bridgeERC721To(address,address,address,uint256,uint32,bytes)":"aa557452","finalizeBridgeERC721(address,address,address,address,uint256,bytes)":"761f4493","initialize(address)":"c4d66de8","messenger()":"3cb747bf","otherBridge()":"c89701a2","paused()":"5c975abb","version()":"54fd4d50"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC721BridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC721BridgeInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"contract CrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_BRIDGE\",\"outputs\":[{\"internalType\":\"contract StandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC721\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC721To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeERC721\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_l1ERC721Bridge\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messenger\",\"outputs\":[{\"internalType\":\"contract CrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"otherBridge\",\"outputs\":[{\"internalType\":\"contract StandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"MESSENGER()\":{\"custom:legacy\":\"\",\"returns\":{\"_0\":\"Messenger contract on this domain.\"}},\"OTHER_BRIDGE()\":{\"custom:legacy\":\"\",\"returns\":{\"_0\":\"Contract of the bridge on the other network.\"}},\"bridgeERC721(address,address,uint256,uint32,bytes)\":{\"params\":{\"_extraData\":\"Optional data to forward to the other chain. Data supplied here will not be used to execute any code on the other chain and is only emitted as extra data for the convenience of off-chain tooling.\",\"_localToken\":\"Address of the ERC721 on this domain.\",\"_minGasLimit\":\"Minimum gas limit for the bridge message on the other domain.\",\"_remoteToken\":\"Address of the ERC721 on the remote domain.\",\"_tokenId\":\"Token ID to bridge.\"}},\"bridgeERC721To(address,address,address,uint256,uint32,bytes)\":{\"params\":{\"_extraData\":\"Optional data to forward to the other chain. Data supplied here will not be used to execute any code on the other chain and is only emitted as extra data for the convenience of off-chain tooling.\",\"_localToken\":\"Address of the ERC721 on this domain.\",\"_minGasLimit\":\"Minimum gas limit for the bridge message on the other domain.\",\"_remoteToken\":\"Address of the ERC721 on the remote domain.\",\"_to\":\"Address to receive the token on the other domain.\",\"_tokenId\":\"Token ID to bridge.\"}},\"finalizeBridgeERC721(address,address,address,address,uint256,bytes)\":{\"params\":{\"_extraData\":\"Optional data to forward to L1. Data supplied here will not be used to execute any code on L1 and is only emitted as extra data for the convenience of off-chain tooling.\",\"_from\":\"Address that triggered the bridge on the other domain.\",\"_localToken\":\"Address of the ERC721 token on this domain.\",\"_remoteToken\":\"Address of the ERC721 token on the other domain.\",\"_to\":\"Address to receive the token on this domain.\",\"_tokenId\":\"ID of the token being deposited.\"}},\"initialize(address)\":{\"params\":{\"_l1ERC721Bridge\":\"Address of the ERC721 bridge contract on the other network.\"}},\"paused()\":{\"returns\":{\"_0\":\"Whether or not the contract is paused.\"}}},\"stateVariables\":{\"version\":{\"custom:semver\":\"1.7.0\"}},\"title\":\"L2ERC721Bridge\",\"version\":1},\"userdoc\":{\"events\":{\"ERC721BridgeFinalized(address,address,address,address,uint256,bytes)\":{\"notice\":\"Emitted when an ERC721 bridge from the other network is finalized.\"},\"ERC721BridgeInitiated(address,address,address,address,uint256,bytes)\":{\"notice\":\"Emitted when an ERC721 bridge to the other network is initiated.\"}},\"kind\":\"user\",\"methods\":{\"MESSENGER()\":{\"notice\":\"Legacy getter for messenger contract. Public getter is legacy and will be removed in the future. Use `messenger` instead.\"},\"OTHER_BRIDGE()\":{\"notice\":\"Legacy getter for other bridge address. Public getter is legacy and will be removed in the future. Use `otherBridge` instead.\"},\"bridgeERC721(address,address,uint256,uint32,bytes)\":{\"notice\":\"Initiates a bridge of an NFT to the caller's account on the other chain. Note that this function can only be called by EOAs. Smart contract wallets should use the `bridgeERC721To` function after ensuring that the recipient address on the remote chain exists. Also note that the current owner of the token on this chain must approve this contract to operate the NFT before it can be bridged. **WARNING**: Do not bridge an ERC721 that was originally deployed on Optimism. This bridge only supports ERC721s originally deployed on Ethereum. Users will need to wait for the one-week challenge period to elapse before their Optimism-native NFT can be refunded on L2.\"},\"bridgeERC721To(address,address,address,uint256,uint32,bytes)\":{\"notice\":\"Initiates a bridge of an NFT to some recipient's account on the other chain. Note that the current owner of the token on this chain must approve this contract to operate the NFT before it can be bridged. **WARNING**: Do not bridge an ERC721 that was originally deployed on Optimism. This bridge only supports ERC721s originally deployed on Ethereum. Users will need to wait for the one-week challenge period to elapse before their Optimism-native NFT can be refunded on L2.\"},\"constructor\":{\"notice\":\"Constructs the L2ERC721Bridge contract.\"},\"finalizeBridgeERC721(address,address,address,address,uint256,bytes)\":{\"notice\":\"Completes an ERC721 bridge from the other domain and sends the ERC721 token to the recipient on this domain.\"},\"initialize(address)\":{\"notice\":\"Initializes the contract.\"},\"messenger()\":{\"notice\":\"Messenger contract on this domain.\"},\"otherBridge()\":{\"notice\":\"Contract of the bridge on the other network.\"},\"paused()\":{\"notice\":\"This function should return true if the contract is paused. On L1 this function will check the SuperchainConfig for its paused status. On L2 this function should be a no-op.\"}},\"notice\":\"The L2 ERC721 bridge is a contract which works together with the L1 ERC721 bridge to make it possible to transfer ERC721 tokens from Ethereum to Optimism. This contract acts as a minter for new tokens when it hears about deposits into the L1 ERC721 bridge. This contract also acts as a burner for tokens being withdrawn. **WARNING**: Do not bridge an ERC721 that was originally deployed on Optimism. This bridge ONLY supports ERC721s originally deployed on Ethereum. Users will need to wait for the one-week challenge period to elapse before their Optimism-native NFT can be refunded on L2.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/L2/L2ERC721Bridge.sol\":\"L2ERC721Bridge\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f\",\"dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x24b04b8aacaaf1a4a0719117b29c9c3647b1f479c5ac2a60f5ff1bb6d839c238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://43e46da9d9f49741ecd876a269e71bc7494058d7a8e9478429998adb5bc3eaa0\",\"dweb:/ipfs/QmUtp4cqzf22C5rJ76AabKADquGWcjsc33yjYXxXC4sDvy\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x032807210d1d7d218963d7355d62e021a84bf1b3339f4f50be2f63b53cccaf29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11756f42121f6541a35a8339ea899ee7514cfaa2e6d740625fcc844419296aa6\",\"dweb:/ipfs/QmekMuk6BY4DAjzeXr4MSbKdgoqqsZnA8JPtuyWc6CwXHf\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xed6a749c5373af398105ce6ee3ac4763aa450ea7285d268c85d9eeca809cdb1f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://20a97f891d06f0fe91560ea1a142aaa26fdd22bed1b51606b7d48f670deeb50f\",\"dweb:/ipfs/QmTbCtZKChpaX5H2iRiTDMcSz29GSLCpTCDgJpcMR4wg8x\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol\":{\"keccak256\":\"0xd1556954440b31c97a142c6ba07d5cade45f96fafd52091d33a14ebe365aecbf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26fef835622b46a5ba08b3ef6b46a22e94b5f285d0f0fb66b703bd30217d2c34\",\"dweb:/ipfs/QmZ548qdwfL1qF7aXz3xh1GCdTiST81kGGuKRqVUfYmPZR\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165Checker.sol\":{\"keccak256\":\"0xc65c83c1039508fa7a42a09a3c6a32babd1c438ba4dbb23581255e784b5d5eed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1b3b38db0f76429db899909025e534c366415e9ea8b5ddc4c8901e6a7fc1461\",\"dweb:/ipfs/QmYv1KxyHjLEky9JWNSsSfpGJbiCxFyzVFgTwQKpiqYGUg\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929\",\"dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689\",\"dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy\"]},\"lib/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c\",\"dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8\"]},\"src/L1/L1ERC721Bridge.sol\":{\"keccak256\":\"0x2a3177a2b025bf7ac58450d7dfc7f4f984a265b651d9f57f83c4b43d9fe5ebdd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f24ea47b324c2683f3dd00f5b47c93bfe7b45fda3dd85c2fc08999c2f1e62db\",\"dweb:/ipfs/QmTKM64r67YGyRamy2pwBA47N7HeD6fk5HEMd3nM3vNkAK\"]},\"src/L1/ResourceMetering.sol\":{\"keccak256\":\"0xde3ac62c60f27a3f1ba06eec94f4eda45e7ec5544c6a5d6b79543a7184e44408\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://265a2845c4ff0d9076dd0505755cf2bdf799f4fdc09ef016865a26b51f5c3409\",\"dweb:/ipfs/QmRzSdBD8jmQf3U9u2ATRAzzuyo6c5ugz8VA5ZM4vzoGiM\"]},\"src/L1/SuperchainConfig.sol\":{\"keccak256\":\"0x5fab874f980fe3e52c3398ddd25b655c56af0c98c15588b2ad9ebf30671d859d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4e0aa613d38eceb621f8569fc714f521bc1f2df3d029552186ab3cdf2ee5d53f\",\"dweb:/ipfs/QmZDzFxhTXLW79eohQbr1nghNh3oNC4CUfH7uMX8CsjVAB\"]},\"src/L2/L2ERC721Bridge.sol\":{\"keccak256\":\"0xcacb39a7b6e5d2d5293834195363397010130ab88d2f4de860277dae6d4265f9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6cdcf63276957f9ca614567394b11ab3f6877baa5a6d33bf54dd8022ca2021f\",\"dweb:/ipfs/QmZQBBfjk2UPLFtKeTd5DJCTRWw1KxKbQMmWr8WVDzZsat\"]},\"src/libraries/Arithmetic.sol\":{\"keccak256\":\"0x91345e053584f82ad04d682ba821cf3ede808304f5b2a88116a894cf692c21db\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://005e3c42d2edfca0a506cbda94d3b0104eddf20c00bd1bd25272f53f2ef74c72\",\"dweb:/ipfs/QmdaW6Nge6NKoGvFqRpQjBpM2fXpc5y8WpZyBnDnKicdJq\"]},\"src/libraries/Burn.sol\":{\"keccak256\":\"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f\",\"dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb\"]},\"src/libraries/Constants.sol\":{\"keccak256\":\"0xe0aeec7d6e5d1e44a11405d3b5bfc384ea092c39bea0b763ab937a26fd427132\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11aa3bff9da26ca2545132ec7994866690446a5321023811c254410d9593bd9b\",\"dweb:/ipfs/QmVxWqadxvdfkqdrhfWisDqeAthibn4HEE1P6o9aFxXLhp\"]},\"src/libraries/Encoding.sol\":{\"keccak256\":\"0x1dafabcbd4877c7abe9698957b0a44b7e911cb8b11c1437a4ed897135669fa87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6addfacefa26fdb44f56d73fa0172b97740de75629a962905ec2a20a28d40fff\",\"dweb:/ipfs/QmboHMouqU19Rnbqrfo1gkfnuDBFcPiC9wsKgGtF2W1cNA\"]},\"src/libraries/Hashing.sol\":{\"keccak256\":\"0x89c07a0ca102cbe57b4e082543f2dd6dae0e1fd4a87908a334bd076fc914e7b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://69c83489c9544ab442dc244c2feb2c6811b726a5eb5a509b97fc5ccb90b98c12\",\"dweb:/ipfs/QmPGGJeLasc1HWHzd6odvWcNvFPQrbYtDubZcv8yp1HLtF\"]},\"src/libraries/Predeploys.sol\":{\"keccak256\":\"0x7b48b32b75e9ba0cd7f83b3304c6c1676dd8de20a5d40e8846bf7018ae9aff02\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7574fcc79c0d545b90071023aa81ee7880ab50b3057df598fa693bc4cf303663\",\"dweb:/ipfs/QmWLxHzgfaTJ7thfb7khXkTY5UtSBZ5VTUB4DaAXVw7DRe\"]},\"src/libraries/SafeCall.sol\":{\"keccak256\":\"0x0636a7abb242bb5d6f5606967c8929e6aa7e63468c1e2ce40ad4780d4c4bf94f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4daec2ac8f9907bbf84ef0a1c48f03bae8657619bc6f42b3a672f25c516f17a\",\"dweb:/ipfs/Qmf8gfRxBv8gEmCkP8YMPb2GGfj9QUnoNUyKE7UR2SWGnq\"]},\"src/libraries/Storage.sol\":{\"keccak256\":\"0x7ce27a05552aa69afa6b2ab6684dfe99f27366cf8ef2046baeb1fb62fff0022f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6a24f3ed56681720707a5ab0372fd67fcb1a4f6fb072c7140cda28bdb70f269\",\"dweb:/ipfs/QmW9uTpUULV4xmP7A7MoBDeDhVfQgmJG5qVUFGtXxWpWWK\"]},\"src/libraries/Types.sol\":{\"keccak256\":\"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e\",\"dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc\"]},\"src/libraries/rlp/RLPWriter.sol\":{\"keccak256\":\"0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b\",\"dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV\"]},\"src/universal/CrossDomainMessenger.sol\":{\"keccak256\":\"0x330ae1479e88fc8a8b5b27a84df935a092a47ad13e59d9b9ea4982ad31bbe7b0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf5fb4e78a03dcad4b9a8e2d5ed135f8e989aa02090747386843383fa6b7d1\",\"dweb:/ipfs/QmTp66RoF6EaKeBrrZBuYAu3dsMfKo8de2XY9iHHnqfN3n\"]},\"src/universal/ERC721Bridge.sol\":{\"keccak256\":\"0xea04387e26c6b3ba2ce5762166b7f790ccb068012f2cd5cc16c5734b47e1cb4f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37a697c0886aa201672ded4196c3e5506903522183f27c9c3455ccdbd5e1c3cb\",\"dweb:/ipfs/QmdxhxBFR8J2obRzuFCMtUirB4Fsc8CvKwNwR8DFc9SEGK\"]},\"src/universal/IOptimismMintableERC20.sol\":{\"keccak256\":\"0x6f8133b39efcbcbd5088f195dfacf1bedc3146508429c3865443909af735a04c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://adc36971e2e120458769f050428d9d2b0504516660345020c2521ee46e6d8abf\",\"dweb:/ipfs/QmPbFusQkZgGKpU8Fv5JoqL4oVeJtM3yqnhRGLY9eZT5zZ\"]},\"src/universal/IOptimismMintableERC721.sol\":{\"keccak256\":\"0xb3a65b067e67a9e1fa0493401c8d247970377c6725eba4e7b02ce8099c4f4f52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://86bb6864027560ade2f4ced6a6e34213cbff8002977dc365377e5a0b473cf17b\",\"dweb:/ipfs/QmQvjtodTK27as1g1PzsYk9NyJJ3X6a6251o1vrBwx7DPT\"]},\"src/universal/ISemver.sol\":{\"keccak256\":\"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a\",\"dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR\"]},\"src/universal/OptimismMintableERC20.sol\":{\"keccak256\":\"0x18721f41a831ec39d47002e73ecc2aa3e6624f8d1ab7b9f25b53348e8b0765df\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2162fa7529a77b199a07f37fca26c778542f6c8805f0365f1ceef90c5cd3a3a7\",\"dweb:/ipfs/QmaMmHJS52Bp95AGnrjh1zV7fLLqV3uAbFzkVLziMnPJYa\"]},\"src/universal/StandardBridge.sol\":{\"keccak256\":\"0x1a2f6afd7f14430ae2b797e09497c3dc860ed5db752e1847e30649668060c01d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fefe1356cdeb5b324e4e63e1c723c08f9e244ef2ef133b9f5df0cc0d180eeaa8\",\"dweb:/ipfs/QmZzR3zWKodwdwrdWwXUyh7G3qcFn2cjUQLrE45gRyQMn3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.15+commit.e14f2714"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"localToken","type":"address","indexed":true},{"internalType":"address","name":"remoteToken","type":"address","indexed":true},{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"tokenId","type":"uint256","indexed":false},{"internalType":"bytes","name":"extraData","type":"bytes","indexed":false}],"type":"event","name":"ERC721BridgeFinalized","anonymous":false},{"inputs":[{"internalType":"address","name":"localToken","type":"address","indexed":true},{"internalType":"address","name":"remoteToken","type":"address","indexed":true},{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"tokenId","type":"uint256","indexed":false},{"internalType":"bytes","name":"extraData","type":"bytes","indexed":false}],"type":"event","name":"ERC721BridgeInitiated","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"MESSENGER","outputs":[{"internalType":"contract CrossDomainMessenger","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"OTHER_BRIDGE","outputs":[{"internalType":"contract StandardBridge","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_localToken","type":"address"},{"internalType":"address","name":"_remoteToken","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"bridgeERC721"},{"inputs":[{"internalType":"address","name":"_localToken","type":"address"},{"internalType":"address","name":"_remoteToken","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"bridgeERC721To"},{"inputs":[{"internalType":"address","name":"_localToken","type":"address"},{"internalType":"address","name":"_remoteToken","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"finalizeBridgeERC721"},{"inputs":[{"internalType":"address payable","name":"_l1ERC721Bridge","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"messenger","outputs":[{"internalType":"contract CrossDomainMessenger","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"otherBridge","outputs":[{"internalType":"contract StandardBridge","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]}],"devdoc":{"kind":"dev","methods":{"MESSENGER()":{"custom:legacy":"","returns":{"_0":"Messenger contract on this domain."}},"OTHER_BRIDGE()":{"custom:legacy":"","returns":{"_0":"Contract of the bridge on the other network."}},"bridgeERC721(address,address,uint256,uint32,bytes)":{"params":{"_extraData":"Optional data to forward to the other chain. Data supplied here will not be used to execute any code on the other chain and is only emitted as extra data for the convenience of off-chain tooling.","_localToken":"Address of the ERC721 on this domain.","_minGasLimit":"Minimum gas limit for the bridge message on the other domain.","_remoteToken":"Address of the ERC721 on the remote domain.","_tokenId":"Token ID to bridge."}},"bridgeERC721To(address,address,address,uint256,uint32,bytes)":{"params":{"_extraData":"Optional data to forward to the other chain. Data supplied here will not be used to execute any code on the other chain and is only emitted as extra data for the convenience of off-chain tooling.","_localToken":"Address of the ERC721 on this domain.","_minGasLimit":"Minimum gas limit for the bridge message on the other domain.","_remoteToken":"Address of the ERC721 on the remote domain.","_to":"Address to receive the token on the other domain.","_tokenId":"Token ID to bridge."}},"finalizeBridgeERC721(address,address,address,address,uint256,bytes)":{"params":{"_extraData":"Optional data to forward to L1. Data supplied here will not be used to execute any code on L1 and is only emitted as extra data for the convenience of off-chain tooling.","_from":"Address that triggered the bridge on the other domain.","_localToken":"Address of the ERC721 token on this domain.","_remoteToken":"Address of the ERC721 token on the other domain.","_to":"Address to receive the token on this domain.","_tokenId":"ID of the token being deposited."}},"initialize(address)":{"params":{"_l1ERC721Bridge":"Address of the ERC721 bridge contract on the other network."}},"paused()":{"returns":{"_0":"Whether or not the contract is paused."}}},"version":1},"userdoc":{"kind":"user","methods":{"MESSENGER()":{"notice":"Legacy getter for messenger contract. Public getter is legacy and will be removed in the future. Use `messenger` instead."},"OTHER_BRIDGE()":{"notice":"Legacy getter for other bridge address. Public getter is legacy and will be removed in the future. Use `otherBridge` instead."},"bridgeERC721(address,address,uint256,uint32,bytes)":{"notice":"Initiates a bridge of an NFT to the caller's account on the other chain. Note that this function can only be called by EOAs. Smart contract wallets should use the `bridgeERC721To` function after ensuring that the recipient address on the remote chain exists. Also note that the current owner of the token on this chain must approve this contract to operate the NFT before it can be bridged. **WARNING**: Do not bridge an ERC721 that was originally deployed on Optimism. This bridge only supports ERC721s originally deployed on Ethereum. Users will need to wait for the one-week challenge period to elapse before their Optimism-native NFT can be refunded on L2."},"bridgeERC721To(address,address,address,uint256,uint32,bytes)":{"notice":"Initiates a bridge of an NFT to some recipient's account on the other chain. Note that the current owner of the token on this chain must approve this contract to operate the NFT before it can be bridged. **WARNING**: Do not bridge an ERC721 that was originally deployed on Optimism. This bridge only supports ERC721s originally deployed on Ethereum. Users will need to wait for the one-week challenge period to elapse before their Optimism-native NFT can be refunded on L2."},"constructor":{"notice":"Constructs the L2ERC721Bridge contract."},"finalizeBridgeERC721(address,address,address,address,uint256,bytes)":{"notice":"Completes an ERC721 bridge from the other domain and sends the ERC721 token to the recipient on this domain."},"initialize(address)":{"notice":"Initializes the contract."},"messenger()":{"notice":"Messenger contract on this domain."},"otherBridge()":{"notice":"Contract of the bridge on the other network."},"paused()":{"notice":"This function should return true if the contract is paused. On L1 this function will check the SuperchainConfig for its paused status. On L2 this function should be a no-op."}},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","ds-test/=lib/forge-std/lib/ds-test/src/","forge-std/=lib/forge-std/src/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/L2/L2ERC721Bridge.sol":"L2ERC721Bridge"},"evmVersion":"london","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e","urls":["bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497","dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3","urls":["bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4","dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66","urls":["bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f","dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol":{"keccak256":"0x24b04b8aacaaf1a4a0719117b29c9c3647b1f479c5ac2a60f5ff1bb6d839c238","urls":["bzz-raw://43e46da9d9f49741ecd876a269e71bc7494058d7a8e9478429998adb5bc3eaa0","dweb:/ipfs/QmUtp4cqzf22C5rJ76AabKADquGWcjsc33yjYXxXC4sDvy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b","urls":["bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34","dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca","urls":["bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd","dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-IERC20Permit.sol":{"keccak256":"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329","urls":["bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95","dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x032807210d1d7d218963d7355d62e021a84bf1b3339f4f50be2f63b53cccaf29","urls":["bzz-raw://11756f42121f6541a35a8339ea899ee7514cfaa2e6d740625fcc844419296aa6","dweb:/ipfs/QmekMuk6BY4DAjzeXr4MSbKdgoqqsZnA8JPtuyWc6CwXHf"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol":{"keccak256":"0xed6a749c5373af398105ce6ee3ac4763aa450ea7285d268c85d9eeca809cdb1f","urls":["bzz-raw://20a97f891d06f0fe91560ea1a142aaa26fdd22bed1b51606b7d48f670deeb50f","dweb:/ipfs/QmTbCtZKChpaX5H2iRiTDMcSz29GSLCpTCDgJpcMR4wg8x"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol":{"keccak256":"0xd1556954440b31c97a142c6ba07d5cade45f96fafd52091d33a14ebe365aecbf","urls":["bzz-raw://26fef835622b46a5ba08b3ef6b46a22e94b5f285d0f0fb66b703bd30217d2c34","dweb:/ipfs/QmZ548qdwfL1qF7aXz3xh1GCdTiST81kGGuKRqVUfYmPZR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10","urls":["bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487","dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7","urls":["bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92","dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165Checker.sol":{"keccak256":"0xc65c83c1039508fa7a42a09a3c6a32babd1c438ba4dbb23581255e784b5d5eed","urls":["bzz-raw://a1b3b38db0f76429db899909025e534c366415e9ea8b5ddc4c8901e6a7fc1461","dweb:/ipfs/QmYv1KxyHjLEky9JWNSsSfpGJbiCxFyzVFgTwQKpiqYGUg"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1","urls":["bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f","dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0","urls":["bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929","dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7","urls":["bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689","dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy"],"license":"MIT"},"lib/solmate/src/utils/FixedPointMathLib.sol":{"keccak256":"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d","urls":["bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c","dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8"],"license":"MIT"},"src/L1/L1ERC721Bridge.sol":{"keccak256":"0x2a3177a2b025bf7ac58450d7dfc7f4f984a265b651d9f57f83c4b43d9fe5ebdd","urls":["bzz-raw://2f24ea47b324c2683f3dd00f5b47c93bfe7b45fda3dd85c2fc08999c2f1e62db","dweb:/ipfs/QmTKM64r67YGyRamy2pwBA47N7HeD6fk5HEMd3nM3vNkAK"],"license":"MIT"},"src/L1/ResourceMetering.sol":{"keccak256":"0xde3ac62c60f27a3f1ba06eec94f4eda45e7ec5544c6a5d6b79543a7184e44408","urls":["bzz-raw://265a2845c4ff0d9076dd0505755cf2bdf799f4fdc09ef016865a26b51f5c3409","dweb:/ipfs/QmRzSdBD8jmQf3U9u2ATRAzzuyo6c5ugz8VA5ZM4vzoGiM"],"license":"MIT"},"src/L1/SuperchainConfig.sol":{"keccak256":"0x5fab874f980fe3e52c3398ddd25b655c56af0c98c15588b2ad9ebf30671d859d","urls":["bzz-raw://4e0aa613d38eceb621f8569fc714f521bc1f2df3d029552186ab3cdf2ee5d53f","dweb:/ipfs/QmZDzFxhTXLW79eohQbr1nghNh3oNC4CUfH7uMX8CsjVAB"],"license":"MIT"},"src/L2/L2ERC721Bridge.sol":{"keccak256":"0xcacb39a7b6e5d2d5293834195363397010130ab88d2f4de860277dae6d4265f9","urls":["bzz-raw://f6cdcf63276957f9ca614567394b11ab3f6877baa5a6d33bf54dd8022ca2021f","dweb:/ipfs/QmZQBBfjk2UPLFtKeTd5DJCTRWw1KxKbQMmWr8WVDzZsat"],"license":"MIT"},"src/libraries/Arithmetic.sol":{"keccak256":"0x91345e053584f82ad04d682ba821cf3ede808304f5b2a88116a894cf692c21db","urls":["bzz-raw://005e3c42d2edfca0a506cbda94d3b0104eddf20c00bd1bd25272f53f2ef74c72","dweb:/ipfs/QmdaW6Nge6NKoGvFqRpQjBpM2fXpc5y8WpZyBnDnKicdJq"],"license":"MIT"},"src/libraries/Burn.sol":{"keccak256":"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010","urls":["bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f","dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb"],"license":"MIT"},"src/libraries/Constants.sol":{"keccak256":"0xe0aeec7d6e5d1e44a11405d3b5bfc384ea092c39bea0b763ab937a26fd427132","urls":["bzz-raw://11aa3bff9da26ca2545132ec7994866690446a5321023811c254410d9593bd9b","dweb:/ipfs/QmVxWqadxvdfkqdrhfWisDqeAthibn4HEE1P6o9aFxXLhp"],"license":"MIT"},"src/libraries/Encoding.sol":{"keccak256":"0x1dafabcbd4877c7abe9698957b0a44b7e911cb8b11c1437a4ed897135669fa87","urls":["bzz-raw://6addfacefa26fdb44f56d73fa0172b97740de75629a962905ec2a20a28d40fff","dweb:/ipfs/QmboHMouqU19Rnbqrfo1gkfnuDBFcPiC9wsKgGtF2W1cNA"],"license":"MIT"},"src/libraries/Hashing.sol":{"keccak256":"0x89c07a0ca102cbe57b4e082543f2dd6dae0e1fd4a87908a334bd076fc914e7b8","urls":["bzz-raw://69c83489c9544ab442dc244c2feb2c6811b726a5eb5a509b97fc5ccb90b98c12","dweb:/ipfs/QmPGGJeLasc1HWHzd6odvWcNvFPQrbYtDubZcv8yp1HLtF"],"license":"MIT"},"src/libraries/Predeploys.sol":{"keccak256":"0x7b48b32b75e9ba0cd7f83b3304c6c1676dd8de20a5d40e8846bf7018ae9aff02","urls":["bzz-raw://7574fcc79c0d545b90071023aa81ee7880ab50b3057df598fa693bc4cf303663","dweb:/ipfs/QmWLxHzgfaTJ7thfb7khXkTY5UtSBZ5VTUB4DaAXVw7DRe"],"license":"MIT"},"src/libraries/SafeCall.sol":{"keccak256":"0x0636a7abb242bb5d6f5606967c8929e6aa7e63468c1e2ce40ad4780d4c4bf94f","urls":["bzz-raw://a4daec2ac8f9907bbf84ef0a1c48f03bae8657619bc6f42b3a672f25c516f17a","dweb:/ipfs/Qmf8gfRxBv8gEmCkP8YMPb2GGfj9QUnoNUyKE7UR2SWGnq"],"license":"MIT"},"src/libraries/Storage.sol":{"keccak256":"0x7ce27a05552aa69afa6b2ab6684dfe99f27366cf8ef2046baeb1fb62fff0022f","urls":["bzz-raw://a6a24f3ed56681720707a5ab0372fd67fcb1a4f6fb072c7140cda28bdb70f269","dweb:/ipfs/QmW9uTpUULV4xmP7A7MoBDeDhVfQgmJG5qVUFGtXxWpWWK"],"license":"MIT"},"src/libraries/Types.sol":{"keccak256":"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4","urls":["bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e","dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc"],"license":"MIT"},"src/libraries/rlp/RLPWriter.sol":{"keccak256":"0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6","urls":["bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b","dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV"],"license":"MIT"},"src/universal/CrossDomainMessenger.sol":{"keccak256":"0x330ae1479e88fc8a8b5b27a84df935a092a47ad13e59d9b9ea4982ad31bbe7b0","urls":["bzz-raw://66bf5fb4e78a03dcad4b9a8e2d5ed135f8e989aa02090747386843383fa6b7d1","dweb:/ipfs/QmTp66RoF6EaKeBrrZBuYAu3dsMfKo8de2XY9iHHnqfN3n"],"license":"MIT"},"src/universal/ERC721Bridge.sol":{"keccak256":"0xea04387e26c6b3ba2ce5762166b7f790ccb068012f2cd5cc16c5734b47e1cb4f","urls":["bzz-raw://37a697c0886aa201672ded4196c3e5506903522183f27c9c3455ccdbd5e1c3cb","dweb:/ipfs/QmdxhxBFR8J2obRzuFCMtUirB4Fsc8CvKwNwR8DFc9SEGK"],"license":"MIT"},"src/universal/IOptimismMintableERC20.sol":{"keccak256":"0x6f8133b39efcbcbd5088f195dfacf1bedc3146508429c3865443909af735a04c","urls":["bzz-raw://adc36971e2e120458769f050428d9d2b0504516660345020c2521ee46e6d8abf","dweb:/ipfs/QmPbFusQkZgGKpU8Fv5JoqL4oVeJtM3yqnhRGLY9eZT5zZ"],"license":"MIT"},"src/universal/IOptimismMintableERC721.sol":{"keccak256":"0xb3a65b067e67a9e1fa0493401c8d247970377c6725eba4e7b02ce8099c4f4f52","urls":["bzz-raw://86bb6864027560ade2f4ced6a6e34213cbff8002977dc365377e5a0b473cf17b","dweb:/ipfs/QmQvjtodTK27as1g1PzsYk9NyJJ3X6a6251o1vrBwx7DPT"],"license":"MIT"},"src/universal/ISemver.sol":{"keccak256":"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44","urls":["bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a","dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR"],"license":"MIT"},"src/universal/OptimismMintableERC20.sol":{"keccak256":"0x18721f41a831ec39d47002e73ecc2aa3e6624f8d1ab7b9f25b53348e8b0765df","urls":["bzz-raw://2162fa7529a77b199a07f37fca26c778542f6c8805f0365f1ceef90c5cd3a3a7","dweb:/ipfs/QmaMmHJS52Bp95AGnrjh1zV7fLLqV3uAbFzkVLziMnPJYa"],"license":"MIT"},"src/universal/StandardBridge.sol":{"keccak256":"0x1a2f6afd7f14430ae2b797e09497c3dc860ed5db752e1847e30649668060c01d","urls":["bzz-raw://fefe1356cdeb5b324e4e63e1c723c08f9e244ef2ef133b9f5df0cc0d180eeaa8","dweb:/ipfs/QmZzR3zWKodwdwrdWwXUyh7G3qcFn2cjUQLrE45gRyQMn3"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":49534,"contract":"src/L2/L2ERC721Bridge.sol:L2ERC721Bridge","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":49537,"contract":"src/L2/L2ERC721Bridge.sol:L2ERC721Bridge","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":108906,"contract":"src/L2/L2ERC721Bridge.sol:L2ERC721Bridge","label":"spacer_0_2_30","offset":2,"slot":"0","type":"t_bytes30"},{"astId":108910,"contract":"src/L2/L2ERC721Bridge.sol:L2ERC721Bridge","label":"messenger","offset":0,"slot":"1","type":"t_contract(CrossDomainMessenger)108888"},{"astId":108914,"contract":"src/L2/L2ERC721Bridge.sol:L2ERC721Bridge","label":"otherBridge","offset":0,"slot":"2","type":"t_contract(StandardBridge)111675"},{"astId":108919,"contract":"src/L2/L2ERC721Bridge.sol:L2ERC721Bridge","label":"__gap","offset":0,"slot":"3","type":"t_array(t_uint256)46_storage"}],"types":{"t_array(t_uint256)46_storage":{"encoding":"inplace","label":"uint256[46]","numberOfBytes":"1472","base":"t_uint256"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes30":{"encoding":"inplace","label":"bytes30","numberOfBytes":"30"},"t_contract(CrossDomainMessenger)108888":{"encoding":"inplace","label":"contract CrossDomainMessenger","numberOfBytes":"20"},"t_contract(StandardBridge)111675":{"encoding":"inplace","label":"contract StandardBridge","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"version":1,"kind":"user","methods":{"MESSENGER()":{"notice":"Legacy getter for messenger contract. Public getter is legacy and will be removed in the future. Use `messenger` instead."},"OTHER_BRIDGE()":{"notice":"Legacy getter for other bridge address. Public getter is legacy and will be removed in the future. Use `otherBridge` instead."},"bridgeERC721(address,address,uint256,uint32,bytes)":{"notice":"Initiates a bridge of an NFT to the caller's account on the other chain. Note that this function can only be called by EOAs. Smart contract wallets should use the `bridgeERC721To` function after ensuring that the recipient address on the remote chain exists. Also note that the current owner of the token on this chain must approve this contract to operate the NFT before it can be bridged. **WARNING**: Do not bridge an ERC721 that was originally deployed on Optimism. This bridge only supports ERC721s originally deployed on Ethereum. Users will need to wait for the one-week challenge period to elapse before their Optimism-native NFT can be refunded on L2."},"bridgeERC721To(address,address,address,uint256,uint32,bytes)":{"notice":"Initiates a bridge of an NFT to some recipient's account on the other chain. Note that the current owner of the token on this chain must approve this contract to operate the NFT before it can be bridged. **WARNING**: Do not bridge an ERC721 that was originally deployed on Optimism. This bridge only supports ERC721s originally deployed on Ethereum. Users will need to wait for the one-week challenge period to elapse before their Optimism-native NFT can be refunded on L2."},"constructor":{"notice":"Constructs the L2ERC721Bridge contract."},"finalizeBridgeERC721(address,address,address,address,uint256,bytes)":{"notice":"Completes an ERC721 bridge from the other domain and sends the ERC721 token to the recipient on this domain."},"initialize(address)":{"notice":"Initializes the contract."},"messenger()":{"notice":"Messenger contract on this domain."},"otherBridge()":{"notice":"Contract of the bridge on the other network."},"paused()":{"notice":"This function should return true if the contract is paused. On L1 this function will check the SuperchainConfig for its paused status. On L2 this function should be a no-op."}},"events":{"ERC721BridgeFinalized(address,address,address,address,uint256,bytes)":{"notice":"Emitted when an ERC721 bridge from the other network is finalized."},"ERC721BridgeInitiated(address,address,address,address,uint256,bytes)":{"notice":"Emitted when an ERC721 bridge to the other network is initiated."}},"notice":"The L2 ERC721 bridge is a contract which works together with the L1 ERC721 bridge to make it possible to transfer ERC721 tokens from Ethereum to Optimism. This contract acts as a minter for new tokens when it hears about deposits into the L1 ERC721 bridge. This contract also acts as a burner for tokens being withdrawn. **WARNING**: Do not bridge an ERC721 that was originally deployed on Optimism. This bridge ONLY supports ERC721s originally deployed on Ethereum. Users will need to wait for the one-week challenge period to elapse before their Optimism-native NFT can be refunded on L2."},"devdoc":{"version":1,"kind":"dev","methods":{"MESSENGER()":{"returns":{"_0":"Messenger contract on this domain."}},"OTHER_BRIDGE()":{"returns":{"_0":"Contract of the bridge on the other network."}},"bridgeERC721(address,address,uint256,uint32,bytes)":{"params":{"_extraData":"Optional data to forward to the other chain. Data supplied here will not be used to execute any code on the other chain and is only emitted as extra data for the convenience of off-chain tooling.","_localToken":"Address of the ERC721 on this domain.","_minGasLimit":"Minimum gas limit for the bridge message on the other domain.","_remoteToken":"Address of the ERC721 on the remote domain.","_tokenId":"Token ID to bridge."}},"bridgeERC721To(address,address,address,uint256,uint32,bytes)":{"params":{"_extraData":"Optional data to forward to the other chain. Data supplied here will not be used to execute any code on the other chain and is only emitted as extra data for the convenience of off-chain tooling.","_localToken":"Address of the ERC721 on this domain.","_minGasLimit":"Minimum gas limit for the bridge message on the other domain.","_remoteToken":"Address of the ERC721 on the remote domain.","_to":"Address to receive the token on the other domain.","_tokenId":"Token ID to bridge."}},"finalizeBridgeERC721(address,address,address,address,uint256,bytes)":{"params":{"_extraData":"Optional data to forward to L1. Data supplied here will not be used to execute any code on L1 and is only emitted as extra data for the convenience of off-chain tooling.","_from":"Address that triggered the bridge on the other domain.","_localToken":"Address of the ERC721 token on this domain.","_remoteToken":"Address of the ERC721 token on the other domain.","_to":"Address to receive the token on this domain.","_tokenId":"ID of the token being deposited."}},"initialize(address)":{"params":{"_l1ERC721Bridge":"Address of the ERC721 bridge contract on the other network."}},"paused()":{"returns":{"_0":"Whether or not the contract is paused."}}},"title":"L2ERC721Bridge"},"ast":{"absolutePath":"src/L2/L2ERC721Bridge.sol","id":90724,"exportedSymbols":{"Constants":[103096],"CrossDomainMessenger":[108888],"ERC165Checker":[54434],"ERC721Bridge":[109118],"IOptimismMintableERC721":[109407],"ISemver":[109417],"L1ERC721Bridge":[85418],"L2ERC721Bridge":[90723],"Predeploys":[104124],"StandardBridge":[111675]},"nodeType":"SourceUnit","src":"32:5865:148","nodes":[{"id":90490,"nodeType":"PragmaDirective","src":"32:23:148","nodes":[],"literals":["solidity","0.8",".15"]},{"id":90492,"nodeType":"ImportDirective","src":"57:62:148","nodes":[],"absolutePath":"src/universal/ERC721Bridge.sol","file":"src/universal/ERC721Bridge.sol","nameLocation":"-1:-1:-1","scope":90724,"sourceUnit":109119,"symbolAliases":[{"foreign":{"id":90491,"name":"ERC721Bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109118,"src":"66:12:148","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":90494,"nodeType":"ImportDirective","src":"120:94:148","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165Checker.sol","file":"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol","nameLocation":"-1:-1:-1","scope":90724,"sourceUnit":54435,"symbolAliases":[{"foreign":{"id":90493,"name":"ERC165Checker","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54434,"src":"129:13:148","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":90496,"nodeType":"ImportDirective","src":"215:59:148","nodes":[],"absolutePath":"src/L1/L1ERC721Bridge.sol","file":"src/L1/L1ERC721Bridge.sol","nameLocation":"-1:-1:-1","scope":90724,"sourceUnit":85419,"symbolAliases":[{"foreign":{"id":90495,"name":"L1ERC721Bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85418,"src":"224:14:148","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":90498,"nodeType":"ImportDirective","src":"275:84:148","nodes":[],"absolutePath":"src/universal/IOptimismMintableERC721.sol","file":"src/universal/IOptimismMintableERC721.sol","nameLocation":"-1:-1:-1","scope":90724,"sourceUnit":109408,"symbolAliases":[{"foreign":{"id":90497,"name":"IOptimismMintableERC721","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109407,"src":"284:23:148","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":90500,"nodeType":"ImportDirective","src":"360:78:148","nodes":[],"absolutePath":"src/universal/CrossDomainMessenger.sol","file":"src/universal/CrossDomainMessenger.sol","nameLocation":"-1:-1:-1","scope":90724,"sourceUnit":108889,"symbolAliases":[{"foreign":{"id":90499,"name":"CrossDomainMessenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108888,"src":"369:20:148","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":90502,"nodeType":"ImportDirective","src":"439:66:148","nodes":[],"absolutePath":"src/universal/StandardBridge.sol","file":"src/universal/StandardBridge.sol","nameLocation":"-1:-1:-1","scope":90724,"sourceUnit":111676,"symbolAliases":[{"foreign":{"id":90501,"name":"StandardBridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111675,"src":"448:14:148","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":90504,"nodeType":"ImportDirective","src":"506:52:148","nodes":[],"absolutePath":"src/universal/ISemver.sol","file":"src/universal/ISemver.sol","nameLocation":"-1:-1:-1","scope":90724,"sourceUnit":109418,"symbolAliases":[{"foreign":{"id":90503,"name":"ISemver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109417,"src":"515:7:148","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":90506,"nodeType":"ImportDirective","src":"559:56:148","nodes":[],"absolutePath":"src/libraries/Constants.sol","file":"src/libraries/Constants.sol","nameLocation":"-1:-1:-1","scope":90724,"sourceUnit":103097,"symbolAliases":[{"foreign":{"id":90505,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103096,"src":"568:9:148","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":90508,"nodeType":"ImportDirective","src":"616:58:148","nodes":[],"absolutePath":"src/libraries/Predeploys.sol","file":"src/libraries/Predeploys.sol","nameLocation":"-1:-1:-1","scope":90724,"sourceUnit":104125,"symbolAliases":[{"foreign":{"id":90507,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"625:10:148","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":90723,"nodeType":"ContractDefinition","src":"1389:4507:148","nodes":[{"id":90517,"nodeType":"VariableDeclaration","src":"1473:40:148","nodes":[],"baseFunctions":[109416],"constant":true,"documentation":{"id":90514,"nodeType":"StructuredDocumentation","src":"1444:24:148","text":"@custom:semver 1.7.0"},"functionSelector":"54fd4d50","mutability":"constant","name":"version","nameLocation":"1496:7:148","scope":90723,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":90515,"name":"string","nodeType":"ElementaryTypeName","src":"1473:6:148","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"312e372e30","id":90516,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1506:7:148","typeDescriptions":{"typeIdentifier":"t_stringliteral_fcd77289efc7773aa152b2b29fc41f05d9109a509f3f68a18547b233f97c1fdc","typeString":"literal_string \"1.7.0\""},"value":"1.7.0"},"visibility":"public"},{"id":90534,"nodeType":"FunctionDefinition","src":"1576:98:148","nodes":[],"body":{"id":90533,"nodeType":"Block","src":"1605:69:148","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"hexValue":"30","id":90528,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1661:1:148","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":90527,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1653:7:148","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":90526,"name":"address","nodeType":"ElementaryTypeName","src":"1653:7:148","typeDescriptions":{}}},"id":90529,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1653:10:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":90525,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1645:8:148","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":90524,"name":"address","nodeType":"ElementaryTypeName","src":"1645:8:148","stateMutability":"payable","typeDescriptions":{}}},"id":90530,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1645:19:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":90523,"name":"initialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90553,"src":"1615:10:148","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_payable_$returns$__$","typeString":"function (address payable)"}},"id":90531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["_l1ERC721Bridge"],"nodeType":"FunctionCall","src":"1615:52:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90532,"nodeType":"ExpressionStatement","src":"1615:52:148"}]},"documentation":{"id":90518,"nodeType":"StructuredDocumentation","src":"1520:51:148","text":"@notice Constructs the L2ERC721Bridge contract."},"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":90521,"kind":"baseConstructorSpecifier","modifierName":{"id":90520,"name":"ERC721Bridge","nodeType":"IdentifierPath","referencedDeclaration":109118,"src":"1590:12:148"},"nodeType":"ModifierInvocation","src":"1590:14:148"}],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":90519,"nodeType":"ParameterList","parameters":[],"src":"1587:2:148"},"returnParameters":{"id":90522,"nodeType":"ParameterList","parameters":[],"src":"1605:0:148"},"scope":90723,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":90553,"nodeType":"FunctionDefinition","src":"1813:263:148","nodes":[],"body":{"id":90552,"nodeType":"Block","src":"1885:191:148","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":90544,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"1962:10:148","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Predeploys_$104124_$","typeString":"type(library Predeploys)"}},"id":90545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"L2_CROSS_DOMAIN_MESSENGER","nodeType":"MemberAccess","referencedDeclaration":104004,"src":"1962:36:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":90543,"name":"CrossDomainMessenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108888,"src":"1941:20:148","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CrossDomainMessenger_$108888_$","typeString":"type(contract CrossDomainMessenger)"}},"id":90546,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1941:58:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}},{"arguments":[{"id":90548,"name":"_l1ERC721Bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90537,"src":"2042:15:148","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":90547,"name":"StandardBridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111675,"src":"2027:14:148","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StandardBridge_$111675_$","typeString":"type(contract StandardBridge)"}},"id":90549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2027:31:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_StandardBridge_$111675","typeString":"contract StandardBridge"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"},{"typeIdentifier":"t_contract$_StandardBridge_$111675","typeString":"contract StandardBridge"}],"id":90542,"name":"__ERC721Bridge_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108995,"src":"1895:19:148","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_CrossDomainMessenger_$108888_$_t_contract$_StandardBridge_$111675_$returns$__$","typeString":"function (contract CrossDomainMessenger,contract StandardBridge)"}},"id":90550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["_messenger","_otherBridge"],"nodeType":"FunctionCall","src":"1895:174:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90551,"nodeType":"ExpressionStatement","src":"1895:174:148"}]},"documentation":{"id":90535,"nodeType":"StructuredDocumentation","src":"1680:128:148","text":"@notice Initializes the contract.\n @param _l1ERC721Bridge Address of the ERC721 bridge contract on the other network."},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":90540,"kind":"modifierInvocation","modifierName":{"id":90539,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":49598,"src":"1873:11:148"},"nodeType":"ModifierInvocation","src":"1873:11:148"}],"name":"initialize","nameLocation":"1822:10:148","parameters":{"id":90538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90537,"mutability":"mutable","name":"_l1ERC721Bridge","nameLocation":"1849:15:148","nodeType":"VariableDeclaration","scope":90553,"src":"1833:31:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":90536,"name":"address","nodeType":"ElementaryTypeName","src":"1833:15:148","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"src":"1832:33:148"},"returnParameters":{"id":90541,"nodeType":"ParameterList","parameters":[],"src":"1885:0:148"},"scope":90723,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":90622,"nodeType":"FunctionDefinition","src":"2843:1275:148","nodes":[],"body":{"id":90621,"nodeType":"Block","src":"3088:1030:148","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":90577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":90572,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90556,"src":"3106:11:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":90575,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3129:4:148","typeDescriptions":{"typeIdentifier":"t_contract$_L2ERC721Bridge_$90723","typeString":"contract L2ERC721Bridge"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_L2ERC721Bridge_$90723","typeString":"contract L2ERC721Bridge"}],"id":90574,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3121:7:148","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":90573,"name":"address","nodeType":"ElementaryTypeName","src":"3121:7:148","typeDescriptions":{}}},"id":90576,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3121:13:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3106:28:148","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c324552433732314272696467653a206c6f63616c20746f6b656e2063616e6e6f742062652073656c66","id":90578,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3136:44:148","typeDescriptions":{"typeIdentifier":"t_stringliteral_7e18be074e522c384c2b459d3f552ca9fb14628371ea9e81c37dfc2875bec911","typeString":"literal_string \"L2ERC721Bridge: local token cannot be self\""},"value":"L2ERC721Bridge: local token cannot be self"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7e18be074e522c384c2b459d3f552ca9fb14628371ea9e81c37dfc2875bec911","typeString":"literal_string \"L2ERC721Bridge: local token cannot be self\""}],"id":90571,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3098:7:148","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":90579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3098:83:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90580,"nodeType":"ExpressionStatement","src":"3098:83:148"},{"expression":{"arguments":[{"arguments":[{"id":90584,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90556,"src":"3363:11:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"arguments":[{"id":90586,"name":"IOptimismMintableERC721","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109407,"src":"3381:23:148","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IOptimismMintableERC721_$109407_$","typeString":"type(contract IOptimismMintableERC721)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IOptimismMintableERC721_$109407_$","typeString":"type(contract IOptimismMintableERC721)"}],"id":90585,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3376:4:148","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":90587,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3376:29:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IOptimismMintableERC721_$109407","typeString":"type(contract IOptimismMintableERC721)"}},"id":90588,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"interfaceId","nodeType":"MemberAccess","src":"3376:41:148","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":90582,"name":"ERC165Checker","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54434,"src":"3331:13:148","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC165Checker_$54434_$","typeString":"type(library ERC165Checker)"}},"id":90583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"supportsInterface","nodeType":"MemberAccess","referencedDeclaration":54290,"src":"3331:31:148","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$","typeString":"function (address,bytes4) view returns (bool)"}},"id":90589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3331:87:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c324552433732314272696467653a206c6f63616c20746f6b656e20696e74657266616365206973206e6f7420636f6d706c69616e74","id":90590,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3432:56:148","typeDescriptions":{"typeIdentifier":"t_stringliteral_07efea2f6062b2acb6eac32db41367de7f7d64803f2496130d2183dc5a0651ad","typeString":"literal_string \"L2ERC721Bridge: local token interface is not compliant\""},"value":"L2ERC721Bridge: local token interface is not compliant"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_07efea2f6062b2acb6eac32db41367de7f7d64803f2496130d2183dc5a0651ad","typeString":"literal_string \"L2ERC721Bridge: local token interface is not compliant\""}],"id":90581,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3310:7:148","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":90591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3310:188:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90592,"nodeType":"ExpressionStatement","src":"3310:188:148"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":90600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":90594,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90558,"src":"3530:12:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":90596,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90556,"src":"3570:11:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":90595,"name":"IOptimismMintableERC721","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109407,"src":"3546:23:148","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IOptimismMintableERC721_$109407_$","typeString":"type(contract IOptimismMintableERC721)"}},"id":90597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3546:36:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IOptimismMintableERC721_$109407","typeString":"contract IOptimismMintableERC721"}},"id":90598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"remoteToken","nodeType":"MemberAccess","referencedDeclaration":109400,"src":"3546:48:148","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":90599,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3546:50:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3530:66:148","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c324552433732314272696467653a2077726f6e672072656d6f746520746f6b656e20666f72204f7074696d69736d204d696e7461626c6520455243373231206c6f63616c20746f6b656e","id":90601,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3610:77:148","typeDescriptions":{"typeIdentifier":"t_stringliteral_a297b13cacd808a47e4a8cb030741295c70e2e66399d9c0dd47e18d6f766c6dd","typeString":"literal_string \"L2ERC721Bridge: wrong remote token for Optimism Mintable ERC721 local token\""},"value":"L2ERC721Bridge: wrong remote token for Optimism Mintable ERC721 local token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a297b13cacd808a47e4a8cb030741295c70e2e66399d9c0dd47e18d6f766c6dd","typeString":"literal_string \"L2ERC721Bridge: wrong remote token for Optimism Mintable ERC721 local token\""}],"id":90593,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3509:7:148","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":90602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3509:188:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90603,"nodeType":"ExpressionStatement","src":"3509:188:148"},{"expression":{"arguments":[{"id":90608,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90562,"src":"3944:3:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90609,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90564,"src":"3949:8:148","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":90605,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90556,"src":"3922:11:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":90604,"name":"IOptimismMintableERC721","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109407,"src":"3898:23:148","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IOptimismMintableERC721_$109407_$","typeString":"type(contract IOptimismMintableERC721)"}},"id":90606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3898:36:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IOptimismMintableERC721_$109407","typeString":"contract IOptimismMintableERC721"}},"id":90607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeMint","nodeType":"MemberAccess","referencedDeclaration":109362,"src":"3898:45:148","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":90610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3898:60:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90611,"nodeType":"ExpressionStatement","src":"3898:60:148"},{"eventCall":{"arguments":[{"id":90613,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90556,"src":"4051:11:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90614,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90558,"src":"4064:12:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90615,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90560,"src":"4078:5:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90616,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90562,"src":"4085:3:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90617,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90564,"src":"4090:8:148","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":90618,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90566,"src":"4100:10:148","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":90612,"name":"ERC721BridgeFinalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108949,"src":"4029:21:148","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,address,uint256,bytes memory)"}},"id":90619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4029:82:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90620,"nodeType":"EmitStatement","src":"4024:87:148"}]},"documentation":{"id":90554,"nodeType":"StructuredDocumentation","src":"2082:756:148","text":"@notice Completes an ERC721 bridge from the other domain and sends the ERC721 token to the\n recipient on this domain.\n @param _localToken Address of the ERC721 token on this domain.\n @param _remoteToken Address of the ERC721 token on the other domain.\n @param _from Address that triggered the bridge on the other domain.\n @param _to Address to receive the token on this domain.\n @param _tokenId ID of the token being deposited.\n @param _extraData Optional data to forward to L1.\n Data supplied here will not be used to execute any code on L1 and is\n only emitted as extra data for the convenience of off-chain tooling."},"functionSelector":"761f4493","implemented":true,"kind":"function","modifiers":[{"id":90569,"kind":"modifierInvocation","modifierName":{"id":90568,"name":"onlyOtherBridge","nodeType":"IdentifierPath","referencedDeclaration":108974,"src":"3068:15:148"},"nodeType":"ModifierInvocation","src":"3068:15:148"}],"name":"finalizeBridgeERC721","nameLocation":"2852:20:148","parameters":{"id":90567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90556,"mutability":"mutable","name":"_localToken","nameLocation":"2890:11:148","nodeType":"VariableDeclaration","scope":90622,"src":"2882:19:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90555,"name":"address","nodeType":"ElementaryTypeName","src":"2882:7:148","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90558,"mutability":"mutable","name":"_remoteToken","nameLocation":"2919:12:148","nodeType":"VariableDeclaration","scope":90622,"src":"2911:20:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90557,"name":"address","nodeType":"ElementaryTypeName","src":"2911:7:148","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90560,"mutability":"mutable","name":"_from","nameLocation":"2949:5:148","nodeType":"VariableDeclaration","scope":90622,"src":"2941:13:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90559,"name":"address","nodeType":"ElementaryTypeName","src":"2941:7:148","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90562,"mutability":"mutable","name":"_to","nameLocation":"2972:3:148","nodeType":"VariableDeclaration","scope":90622,"src":"2964:11:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90561,"name":"address","nodeType":"ElementaryTypeName","src":"2964:7:148","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90564,"mutability":"mutable","name":"_tokenId","nameLocation":"2993:8:148","nodeType":"VariableDeclaration","scope":90622,"src":"2985:16:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90563,"name":"uint256","nodeType":"ElementaryTypeName","src":"2985:7:148","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":90566,"mutability":"mutable","name":"_extraData","nameLocation":"3026:10:148","nodeType":"VariableDeclaration","scope":90622,"src":"3011:25:148","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":90565,"name":"bytes","nodeType":"ElementaryTypeName","src":"3011:5:148","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2872:170:148"},"returnParameters":{"id":90570,"nodeType":"ParameterList","parameters":[],"src":"3088:0:148"},"scope":90723,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":90722,"nodeType":"FunctionDefinition","src":"4157:1737:148","nodes":[],"body":{"id":90721,"nodeType":"Block","src":"4425:1469:148","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":90647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":90642,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90627,"src":"4443:12:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":90645,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4467:1:148","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":90644,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4459:7:148","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":90643,"name":"address","nodeType":"ElementaryTypeName","src":"4459:7:148","typeDescriptions":{}}},"id":90646,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4459:10:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4443:26:148","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c324552433732314272696467653a2072656d6f746520746f6b656e2063616e6e6f742062652061646472657373283029","id":90648,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4471:51:148","typeDescriptions":{"typeIdentifier":"t_stringliteral_dda13b674104cff93529fc9113589ef9eda6a9e3d2414ccc2ce12f79952de0f9","typeString":"literal_string \"L2ERC721Bridge: remote token cannot be address(0)\""},"value":"L2ERC721Bridge: remote token cannot be address(0)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_dda13b674104cff93529fc9113589ef9eda6a9e3d2414ccc2ce12f79952de0f9","typeString":"literal_string \"L2ERC721Bridge: remote token cannot be address(0)\""}],"id":90641,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4435:7:148","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":90649,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4435:88:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90650,"nodeType":"ExpressionStatement","src":"4435:88:148"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":90659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":90652,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90629,"src":"4628:5:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":90657,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90633,"src":"4682:8:148","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":90654,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90625,"src":"4661:11:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":90653,"name":"IOptimismMintableERC721","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109407,"src":"4637:23:148","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IOptimismMintableERC721_$109407_$","typeString":"type(contract IOptimismMintableERC721)"}},"id":90655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4637:36:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IOptimismMintableERC721_$109407","typeString":"contract IOptimismMintableERC721"}},"id":90656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ownerOf","nodeType":"MemberAccess","referencedDeclaration":52493,"src":"4637:44:148","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_address_$","typeString":"function (uint256) view external returns (address)"}},"id":90658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4637:54:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4628:63:148","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c324552433732314272696467653a205769746864726177616c206973206e6f74206265696e6720696e69746961746564206279204e4654206f776e6572","id":90660,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4705:64:148","typeDescriptions":{"typeIdentifier":"t_stringliteral_5ee75d9b9b0c7320a30e3101dd31a8695dfeba929ef037ce562e2025d1f1db7f","typeString":"literal_string \"L2ERC721Bridge: Withdrawal is not being initiated by NFT owner\""},"value":"L2ERC721Bridge: Withdrawal is not being initiated by NFT owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5ee75d9b9b0c7320a30e3101dd31a8695dfeba929ef037ce562e2025d1f1db7f","typeString":"literal_string \"L2ERC721Bridge: Withdrawal is not being initiated by NFT owner\""}],"id":90651,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4607:7:148","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":90661,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4607:172:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90662,"nodeType":"ExpressionStatement","src":"4607:172:148"},{"assignments":[90664],"declarations":[{"constant":false,"id":90664,"mutability":"mutable","name":"remoteToken","nameLocation":"4938:11:148","nodeType":"VariableDeclaration","scope":90721,"src":"4930:19:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90663,"name":"address","nodeType":"ElementaryTypeName","src":"4930:7:148","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":90670,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":90666,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90625,"src":"4976:11:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":90665,"name":"IOptimismMintableERC721","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109407,"src":"4952:23:148","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IOptimismMintableERC721_$109407_$","typeString":"type(contract IOptimismMintableERC721)"}},"id":90667,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4952:36:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IOptimismMintableERC721_$109407","typeString":"contract IOptimismMintableERC721"}},"id":90668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"remoteToken","nodeType":"MemberAccess","referencedDeclaration":109400,"src":"4952:48:148","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":90669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4952:50:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4930:72:148"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":90674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":90672,"name":"remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90664,"src":"5020:11:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":90673,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90627,"src":"5035:12:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5020:27:148","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c324552433732314272696467653a2072656d6f746520746f6b656e20646f6573206e6f74206d6174636820676976656e2076616c7565","id":90675,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5049:57:148","typeDescriptions":{"typeIdentifier":"t_stringliteral_3a41ad0de9429285711503556faaaf7a96337a91d3717dc15ffb9a52d12e98d9","typeString":"literal_string \"L2ERC721Bridge: remote token does not match given value\""},"value":"L2ERC721Bridge: remote token does not match given value"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3a41ad0de9429285711503556faaaf7a96337a91d3717dc15ffb9a52d12e98d9","typeString":"literal_string \"L2ERC721Bridge: remote token does not match given value\""}],"id":90671,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5012:7:148","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":90676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5012:95:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90677,"nodeType":"ExpressionStatement","src":"5012:95:148"},{"expression":{"arguments":[{"id":90682,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90629,"src":"5329:5:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90683,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90633,"src":"5336:8:148","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":90679,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90625,"src":"5311:11:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":90678,"name":"IOptimismMintableERC721","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109407,"src":"5287:23:148","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IOptimismMintableERC721_$109407_$","typeString":"type(contract IOptimismMintableERC721)"}},"id":90680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5287:36:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IOptimismMintableERC721_$109407","typeString":"contract IOptimismMintableERC721"}},"id":90681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":109370,"src":"5287:41:148","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":90684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5287:58:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90685,"nodeType":"ExpressionStatement","src":"5287:58:148"},{"assignments":[90687],"declarations":[{"constant":false,"id":90687,"mutability":"mutable","name":"message","nameLocation":"5369:7:148","nodeType":"VariableDeclaration","scope":90721,"src":"5356:20:148","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":90686,"name":"bytes","nodeType":"ElementaryTypeName","src":"5356:5:148","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":90700,"initialValue":{"arguments":[{"expression":{"expression":{"id":90690,"name":"L1ERC721Bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85418,"src":"5415:14:148","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_L1ERC721Bridge_$85418_$","typeString":"type(contract L1ERC721Bridge)"}},"id":90691,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"finalizeBridgeERC721","nodeType":"MemberAccess","referencedDeclaration":85330,"src":"5415:35:148","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function L1ERC721Bridge.finalizeBridgeERC721(address,address,address,address,uint256,bytes calldata)"}},"id":90692,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"5415:44:148","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":90693,"name":"remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90664,"src":"5461:11:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90694,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90625,"src":"5474:11:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90695,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90629,"src":"5487:5:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90696,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90631,"src":"5494:3:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90697,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90633,"src":"5499:8:148","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":90698,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90637,"src":"5509:10:148","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":90688,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5379:3:148","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":90689,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"5379:22:148","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":90699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5379:150:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"5356:173:148"},{"expression":{"arguments":[{"arguments":[{"id":90706,"name":"otherBridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108914,"src":"5673:11:148","typeDescriptions":{"typeIdentifier":"t_contract$_StandardBridge_$111675","typeString":"contract StandardBridge"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_StandardBridge_$111675","typeString":"contract StandardBridge"}],"id":90705,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5665:7:148","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":90704,"name":"address","nodeType":"ElementaryTypeName","src":"5665:7:148","typeDescriptions":{}}},"id":90707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5665:20:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90708,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90687,"src":"5697:7:148","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":90709,"name":"_minGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90635,"src":"5720:12:148","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":90701,"name":"messenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108910,"src":"5632:9:148","typeDescriptions":{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}},"id":90703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sendMessage","nodeType":"MemberAccess","referencedDeclaration":108520,"src":"5632:21:148","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$_t_uint32_$returns$__$","typeString":"function (address,bytes memory,uint32) payable external"}},"id":90710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["_target","_message","_minGasLimit"],"nodeType":"FunctionCall","src":"5632:103:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90711,"nodeType":"ExpressionStatement","src":"5632:103:148"},{"eventCall":{"arguments":[{"id":90713,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90625,"src":"5828:11:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90714,"name":"remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90664,"src":"5841:11:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90715,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90629,"src":"5854:5:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90716,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90631,"src":"5861:3:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90717,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90633,"src":"5866:8:148","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":90718,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90637,"src":"5876:10:148","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":90712,"name":"ERC721BridgeInitiated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108934,"src":"5806:21:148","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,address,uint256,bytes memory)"}},"id":90719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5806:81:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90720,"nodeType":"EmitStatement","src":"5801:86:148"}]},"baseFunctions":[109117],"documentation":{"id":90623,"nodeType":"StructuredDocumentation","src":"4124:28:148","text":"@inheritdoc ERC721Bridge"},"implemented":true,"kind":"function","modifiers":[],"name":"_initiateBridgeERC721","nameLocation":"4166:21:148","overrides":{"id":90639,"nodeType":"OverrideSpecifier","overrides":[],"src":"4412:8:148"},"parameters":{"id":90638,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90625,"mutability":"mutable","name":"_localToken","nameLocation":"4205:11:148","nodeType":"VariableDeclaration","scope":90722,"src":"4197:19:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90624,"name":"address","nodeType":"ElementaryTypeName","src":"4197:7:148","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90627,"mutability":"mutable","name":"_remoteToken","nameLocation":"4234:12:148","nodeType":"VariableDeclaration","scope":90722,"src":"4226:20:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90626,"name":"address","nodeType":"ElementaryTypeName","src":"4226:7:148","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90629,"mutability":"mutable","name":"_from","nameLocation":"4264:5:148","nodeType":"VariableDeclaration","scope":90722,"src":"4256:13:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90628,"name":"address","nodeType":"ElementaryTypeName","src":"4256:7:148","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90631,"mutability":"mutable","name":"_to","nameLocation":"4287:3:148","nodeType":"VariableDeclaration","scope":90722,"src":"4279:11:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90630,"name":"address","nodeType":"ElementaryTypeName","src":"4279:7:148","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90633,"mutability":"mutable","name":"_tokenId","nameLocation":"4308:8:148","nodeType":"VariableDeclaration","scope":90722,"src":"4300:16:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90632,"name":"uint256","nodeType":"ElementaryTypeName","src":"4300:7:148","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":90635,"mutability":"mutable","name":"_minGasLimit","nameLocation":"4333:12:148","nodeType":"VariableDeclaration","scope":90722,"src":"4326:19:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":90634,"name":"uint32","nodeType":"ElementaryTypeName","src":"4326:6:148","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":90637,"mutability":"mutable","name":"_extraData","nameLocation":"4370:10:148","nodeType":"VariableDeclaration","scope":90722,"src":"4355:25:148","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":90636,"name":"bytes","nodeType":"ElementaryTypeName","src":"4355:5:148","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4187:199:148"},"returnParameters":{"id":90640,"nodeType":"ParameterList","parameters":[],"src":"4425:0:148"},"scope":90723,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":90510,"name":"ERC721Bridge","nodeType":"IdentifierPath","referencedDeclaration":109118,"src":"1416:12:148"},"id":90511,"nodeType":"InheritanceSpecifier","src":"1416:12:148"},{"baseName":{"id":90512,"name":"ISemver","nodeType":"IdentifierPath","referencedDeclaration":109417,"src":"1430:7:148"},"id":90513,"nodeType":"InheritanceSpecifier","src":"1430:7:148"}],"canonicalName":"L2ERC721Bridge","contractDependencies":[],"contractKind":"contract","documentation":{"id":90509,"nodeType":"StructuredDocumentation","src":"676:713:148","text":"@title L2ERC721Bridge\n @notice The L2 ERC721 bridge is a contract which works together with the L1 ERC721 bridge to\n make it possible to transfer ERC721 tokens from Ethereum to Optimism. This contract\n acts as a minter for new tokens when it hears about deposits into the L1 ERC721 bridge.\n This contract also acts as a burner for tokens being withdrawn.\n **WARNING**: Do not bridge an ERC721 that was originally deployed on Optimism. This\n bridge ONLY supports ERC721s originally deployed on Ethereum. Users will need to\n wait for the one-week challenge period to elapse before their Optimism-native NFT\n can be refunded on L2."},"fullyImplemented":true,"linearizedBaseContracts":[90723,109417,109118,49678],"name":"L2ERC721Bridge","nameLocation":"1398:14:148","scope":90724,"usedErrors":[]}],"license":"MIT"},"id":148} \ No newline at end of file diff --git a/packages/sdk/src/forge-artifacts/L2OutputOracle.json b/packages/sdk/src/forge-artifacts/L2OutputOracle.json deleted file mode 100644 index 31c2aeb5292c..000000000000 --- a/packages/sdk/src/forge-artifacts/L2OutputOracle.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"CHALLENGER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"FINALIZATION_PERIOD_SECONDS","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"L2_BLOCK_TIME","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"PROPOSER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"SUBMISSION_INTERVAL","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"challenger","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"computeL2Timestamp","inputs":[{"name":"_l2BlockNumber","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"deleteL2Outputs","inputs":[{"name":"_l2OutputIndex","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"finalizationPeriodSeconds","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getL2Output","inputs":[{"name":"_l2OutputIndex","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct Types.OutputProposal","components":[{"name":"outputRoot","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint128","internalType":"uint128"},{"name":"l2BlockNumber","type":"uint128","internalType":"uint128"}]}],"stateMutability":"view"},{"type":"function","name":"getL2OutputAfter","inputs":[{"name":"_l2BlockNumber","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct Types.OutputProposal","components":[{"name":"outputRoot","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint128","internalType":"uint128"},{"name":"l2BlockNumber","type":"uint128","internalType":"uint128"}]}],"stateMutability":"view"},{"type":"function","name":"getL2OutputIndexAfter","inputs":[{"name":"_l2BlockNumber","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_submissionInterval","type":"uint256","internalType":"uint256"},{"name":"_l2BlockTime","type":"uint256","internalType":"uint256"},{"name":"_startingBlockNumber","type":"uint256","internalType":"uint256"},{"name":"_startingTimestamp","type":"uint256","internalType":"uint256"},{"name":"_proposer","type":"address","internalType":"address"},{"name":"_challenger","type":"address","internalType":"address"},{"name":"_finalizationPeriodSeconds","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"l2BlockTime","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"latestBlockNumber","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"latestOutputIndex","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"nextBlockNumber","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"nextOutputIndex","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proposeL2Output","inputs":[{"name":"_outputRoot","type":"bytes32","internalType":"bytes32"},{"name":"_l2BlockNumber","type":"uint256","internalType":"uint256"},{"name":"_l1BlockHash","type":"bytes32","internalType":"bytes32"},{"name":"_l1BlockNumber","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"proposer","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"startingBlockNumber","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"startingTimestamp","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"submissionInterval","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"OutputProposed","inputs":[{"name":"outputRoot","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"l2OutputIndex","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"l2BlockNumber","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"l1Timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OutputsDeleted","inputs":[{"name":"prevNextOutputIndex","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"newNextOutputIndex","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false}],"bytecode":{"object":"0x60806040523480156200001157600080fd5b50620000256001806000808080806200002b565b62000328565b600054610100900460ff16158080156200004c5750600054600160ff909116105b806200007c575062000069306200031960201b6200135d1760201c565b1580156200007c575060005460ff166001145b620000e55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000109576000805461ff0019166101001790555b60008811620001815760405162461bcd60e51b815260206004820152603a60248201527f4c324f75747075744f7261636c653a207375626d697373696f6e20696e74657260448201527f76616c206d7573742062652067726561746572207468616e20300000000000006064820152608401620000dc565b60008711620001f95760405162461bcd60e51b815260206004820152603460248201527f4c324f75747075744f7261636c653a204c3220626c6f636b2074696d65206d7560448201527f73742062652067726561746572207468616e20300000000000000000000000006064820152608401620000dc565b428511156200027f5760405162461bcd60e51b8152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201526374696d6560e01b608482015260a401620000dc565b6004889055600587905560018690556002859055600780546001600160a01b038087166001600160a01b0319928316179092556006805492861692909116919091179055600882905580156200030f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6001600160a01b03163b151590565b6115d580620003386000396000f3fe60806040526004361061018a5760003560e01c806389c44cbb116100d6578063ce5db8d61161007f578063dcec334811610059578063dcec33481461049b578063e1a41bcf146104b0578063f4daa291146104c657600080fd5b8063ce5db8d614610445578063cf8e5cf01461045b578063d1de856c1461047b57600080fd5b8063a25ae557116100b0578063a25ae55714610391578063a8e4fb90146103ed578063bffa7f0f1461041a57600080fd5b806389c44cbb1461034857806393991af3146103685780639aaab6481461037e57600080fd5b806369f16eec1161013857806370872aa51161011257806370872aa5146102fc5780637f00642014610312578063887862721461033257600080fd5b806369f16eec146102a75780636abcf563146102bc5780636b4d98dd146102d157600080fd5b8063529933df11610169578063529933df146101ea578063534db0e2146101ff57806354fd4d501461025157600080fd5b80622134cc1461018f5780631c89c97d146101b35780634599c788146101d5575b600080fd5b34801561019b57600080fd5b506005545b6040519081526020015b60405180910390f35b3480156101bf57600080fd5b506101d36101ce3660046113a2565b6104db565b005b3480156101e157600080fd5b506101a06108b6565b3480156101f657600080fd5b506004546101a0565b34801561020b57600080fd5b5060065461022c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101aa565b34801561025d57600080fd5b5061029a6040518060400160405280600581526020017f312e382e3000000000000000000000000000000000000000000000000000000081525081565b6040516101aa9190611405565b3480156102b357600080fd5b506101a0610929565b3480156102c857600080fd5b506003546101a0565b3480156102dd57600080fd5b5060065473ffffffffffffffffffffffffffffffffffffffff1661022c565b34801561030857600080fd5b506101a060015481565b34801561031e57600080fd5b506101a061032d366004611478565b61093b565b34801561033e57600080fd5b506101a060025481565b34801561035457600080fd5b506101d3610363366004611478565b610b4f565b34801561037457600080fd5b506101a060055481565b6101d361038c366004611491565b610de9565b34801561039d57600080fd5b506103b16103ac366004611478565b61124a565b60408051825181526020808401516fffffffffffffffffffffffffffffffff9081169183019190915292820151909216908201526060016101aa565b3480156103f957600080fd5b5060075461022c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561042657600080fd5b5060075473ffffffffffffffffffffffffffffffffffffffff1661022c565b34801561045157600080fd5b506101a060085481565b34801561046757600080fd5b506103b1610476366004611478565b6112de565b34801561048757600080fd5b506101a0610496366004611478565b611316565b3480156104a757600080fd5b506101a0611346565b3480156104bc57600080fd5b506101a060045481565b3480156104d257600080fd5b506008546101a0565b600054610100900460ff16158080156104fb5750600054600160ff909116105b806105155750303b158015610515575060005460ff166001145b6105a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561060457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60008811610694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a207375626d697373696f6e20696e74657260448201527f76616c206d7573742062652067726561746572207468616e2030000000000000606482015260840161059d565b60008711610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4c324f75747075744f7261636c653a204c3220626c6f636b2074696d65206d7560448201527f73742062652067726561746572207468616e2030000000000000000000000000606482015260840161059d565b428511156107db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201527f74696d6500000000000000000000000000000000000000000000000000000000608482015260a40161059d565b60048890556005879055600186905560028590556007805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556006805492861692909116919091179055600882905580156108ac57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6003546000901561092057600380546108d1906001906114f2565b815481106108e1576108e1611509565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16919050565b6001545b905090565b600354600090610924906001906114f2565b60006109456108b6565b8211156109fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f7420666f72206120626c6f636b207468617420686173206e6f74206265656e2060648201527f70726f706f736564000000000000000000000000000000000000000000000000608482015260a40161059d565b600354610aaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f74206173206e6f206f7574707574732068617665206265656e2070726f706f7360648201527f6564207965740000000000000000000000000000000000000000000000000000608482015260a40161059d565b6003546000905b80821015610b485760006002610acc8385611538565b610ad69190611550565b90508460038281548110610aec57610aec611509565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff161015610b3e57610b37816001611538565b9250610b42565b8091505b50610ab6565b5092915050565b60065473ffffffffffffffffffffffffffffffffffffffff163314610bf6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324f75747075744f7261636c653a206f6e6c7920746865206368616c6c656e60448201527f67657220616464726573732063616e2064656c657465206f7574707574730000606482015260840161059d565b6003548110610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f747075747320616674657220746865206c6174657374206f757470757420696e60648201527f6465780000000000000000000000000000000000000000000000000000000000608482015260a40161059d565b60085460038281548110610cc357610cc3611509565b6000918252602090912060016002909202010154610cf3906fffffffffffffffffffffffffffffffff16426114f2565b10610da6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f74707574732074686174206861766520616c7265616479206265656e2066696e60648201527f616c697a65640000000000000000000000000000000000000000000000000000608482015260a40161059d565b6000610db160035490565b90508160035581817f4ee37ac2c786ec85e87592d3c5c8a1dd66f8496dda3f125d9ea8ca5f657629b660405160405180910390a35050565b60075473ffffffffffffffffffffffffffffffffffffffff163314610eb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f4c324f75747075744f7261636c653a206f6e6c79207468652070726f706f736560448201527f7220616464726573732063616e2070726f706f7365206e6577206f757470757460648201527f7300000000000000000000000000000000000000000000000000000000000000608482015260a40161059d565b610ebe611346565b8314610f72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a20626c6f636b206e756d626572206d757360448201527f7420626520657175616c20746f206e65787420657870656374656420626c6f6360648201527f6b206e756d626572000000000000000000000000000000000000000000000000608482015260a40161059d565b42610f7c84611316565b10611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324f75747075744f7261636c653a2063616e6e6f742070726f706f7365204c60448201527f32206f757470757420696e207468652066757475726500000000000000000000606482015260840161059d565b83611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a204c32206f75747075742070726f706f7360448201527f616c2063616e6e6f7420626520746865207a65726f2068617368000000000000606482015260840161059d565b81156111525781814014611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4c324f75747075744f7261636c653a20626c6f636b206861736820646f65732060448201527f6e6f74206d61746368207468652068617368206174207468652065787065637460648201527f6564206865696768740000000000000000000000000000000000000000000000608482015260a40161059d565b8261115c60035490565b857fa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e24260405161118e91815260200190565b60405180910390a45050604080516060810182529283526fffffffffffffffffffffffffffffffff4281166020850190815292811691840191825260038054600181018255600091909152935160029094027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b810194909455915190518216700100000000000000000000000000000000029116177fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c90910155565b60408051606081018252600080825260208201819052918101919091526003828154811061127a5761127a611509565b600091825260209182902060408051606081018252600290930290910180548352600101546fffffffffffffffffffffffffffffffff8082169484019490945270010000000000000000000000000000000090049092169181019190915292915050565b604080516060810182526000808252602082018190529181019190915260036113068361093b565b8154811061127a5761127a611509565b60006005546001548361132991906114f2565b611333919061158b565b6002546113409190611538565b92915050565b60006004546113536108b6565b6109249190611538565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b803573ffffffffffffffffffffffffffffffffffffffff8116811461139d57600080fd5b919050565b600080600080600080600060e0888a0312156113bd57600080fd5b873596506020880135955060408801359450606088013593506113e260808901611379565b92506113f060a08901611379565b915060c0880135905092959891949750929550565b600060208083528351808285015260005b8181101561143257858101830151858201604001528201611416565b81811115611444576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561148a57600080fd5b5035919050565b600080600080608085870312156114a757600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611504576115046114c3565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561154b5761154b6114c3565b500190565b600082611586577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156115c3576115c36114c3565b50029056fea164736f6c634300080f000a","sourceMap":"611:13425:133:-:0;;;2792:305;;;;;;;;;-1:-1:-1;2816:274:133;2862:1;;2928;;;;;2816:10;:274::i;:::-;611:13425;;3742:985;3100:19:43;3123:13;;;;;;3122:14;;3168:34;;;;-1:-1:-1;3186:12:43;;3201:1;3186:12;;;;:16;3168:34;3167:97;;;;3209:33;3236:4;3209:18;;;;;:33;;:::i;:::-;3208:34;:55;;;;-1:-1:-1;3246:12:43;;;;;:17;3208:55;3146:190;;;;-1:-1:-1;;;3146:190:43;;216:2:357;3146:190:43;;;198:21:357;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:357;;;338:44;399:19;;3146:190:43;;;;;;;;;3346:12;:16;;-1:-1:-1;;3346:16:43;3361:1;3346:16;;;3372:65;;;;3406:13;:20;;-1:-1:-1;;3406:20:43;;;;;3372:65;4088:1:133::1;4066:19;:23;4058:94;;;::::0;-1:-1:-1;;;4058:94:133;;631:2:357;4058:94:133::1;::::0;::::1;613:21:357::0;670:2;650:18;;;643:30;709:34;689:18;;;682:62;780:28;760:18;;;753:56;826:19;;4058:94:133::1;429:422:357::0;4058:94:133::1;4185:1;4170:12;:16;4162:81;;;::::0;-1:-1:-1;;;4162:81:133;;1058:2:357;4162:81:133::1;::::0;::::1;1040:21:357::0;1097:2;1077:18;;;1070:30;1136:34;1116:18;;;1109:62;1207:22;1187:18;;;1180:50;1247:19;;4162:81:133::1;856:416:357::0;4162:81:133::1;4296:15;4274:18;:37;;4253:152;;;::::0;-1:-1:-1;;;4253:152:133;;1479:2:357;4253:152:133::1;::::0;::::1;1461:21:357::0;1518:2;1498:18;;;1491:30;;;1557:34;1537:18;;;1530:62;1628:34;1608:18;;;1601:62;-1:-1:-1;;;1679:19:357;;;1672:35;1724:19;;4253:152:133::1;1277:472:357::0;4253:152:133::1;4416:18;:40:::0;;;4466:11:::1;:26:::0;;;4502:19:::1;:42:::0;;;4554:17:::1;:38:::0;;;4602:8:::1;:20:::0;;-1:-1:-1;;;;;4602:20:133;;::::1;-1:-1:-1::0;;;;;;4602:20:133;;::::1;;::::0;;;4632:10:::1;:24:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;4666:25:::1;:54:::0;;;3457:99:43;;;;3507:5;3491:21;;-1:-1:-1;;3491:21:43;;;3531:14;;-1:-1:-1;1906:36:357;;3531:14:43;;1894:2:357;1879:18;3531:14:43;;;;;;;3457:99;3090:472;3742:985:133;;;;;;;:::o;1175:320:59:-;-1:-1:-1;;;;;1465:19:59;;:23;;;1175:320::o;1754:194:357:-;611:13425:133;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361061018a5760003560e01c806389c44cbb116100d6578063ce5db8d61161007f578063dcec334811610059578063dcec33481461049b578063e1a41bcf146104b0578063f4daa291146104c657600080fd5b8063ce5db8d614610445578063cf8e5cf01461045b578063d1de856c1461047b57600080fd5b8063a25ae557116100b0578063a25ae55714610391578063a8e4fb90146103ed578063bffa7f0f1461041a57600080fd5b806389c44cbb1461034857806393991af3146103685780639aaab6481461037e57600080fd5b806369f16eec1161013857806370872aa51161011257806370872aa5146102fc5780637f00642014610312578063887862721461033257600080fd5b806369f16eec146102a75780636abcf563146102bc5780636b4d98dd146102d157600080fd5b8063529933df11610169578063529933df146101ea578063534db0e2146101ff57806354fd4d501461025157600080fd5b80622134cc1461018f5780631c89c97d146101b35780634599c788146101d5575b600080fd5b34801561019b57600080fd5b506005545b6040519081526020015b60405180910390f35b3480156101bf57600080fd5b506101d36101ce3660046113a2565b6104db565b005b3480156101e157600080fd5b506101a06108b6565b3480156101f657600080fd5b506004546101a0565b34801561020b57600080fd5b5060065461022c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101aa565b34801561025d57600080fd5b5061029a6040518060400160405280600581526020017f312e382e3000000000000000000000000000000000000000000000000000000081525081565b6040516101aa9190611405565b3480156102b357600080fd5b506101a0610929565b3480156102c857600080fd5b506003546101a0565b3480156102dd57600080fd5b5060065473ffffffffffffffffffffffffffffffffffffffff1661022c565b34801561030857600080fd5b506101a060015481565b34801561031e57600080fd5b506101a061032d366004611478565b61093b565b34801561033e57600080fd5b506101a060025481565b34801561035457600080fd5b506101d3610363366004611478565b610b4f565b34801561037457600080fd5b506101a060055481565b6101d361038c366004611491565b610de9565b34801561039d57600080fd5b506103b16103ac366004611478565b61124a565b60408051825181526020808401516fffffffffffffffffffffffffffffffff9081169183019190915292820151909216908201526060016101aa565b3480156103f957600080fd5b5060075461022c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561042657600080fd5b5060075473ffffffffffffffffffffffffffffffffffffffff1661022c565b34801561045157600080fd5b506101a060085481565b34801561046757600080fd5b506103b1610476366004611478565b6112de565b34801561048757600080fd5b506101a0610496366004611478565b611316565b3480156104a757600080fd5b506101a0611346565b3480156104bc57600080fd5b506101a060045481565b3480156104d257600080fd5b506008546101a0565b600054610100900460ff16158080156104fb5750600054600160ff909116105b806105155750303b158015610515575060005460ff166001145b6105a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561060457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60008811610694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a207375626d697373696f6e20696e74657260448201527f76616c206d7573742062652067726561746572207468616e2030000000000000606482015260840161059d565b60008711610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4c324f75747075744f7261636c653a204c3220626c6f636b2074696d65206d7560448201527f73742062652067726561746572207468616e2030000000000000000000000000606482015260840161059d565b428511156107db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201527f74696d6500000000000000000000000000000000000000000000000000000000608482015260a40161059d565b60048890556005879055600186905560028590556007805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556006805492861692909116919091179055600882905580156108ac57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6003546000901561092057600380546108d1906001906114f2565b815481106108e1576108e1611509565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16919050565b6001545b905090565b600354600090610924906001906114f2565b60006109456108b6565b8211156109fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f7420666f72206120626c6f636b207468617420686173206e6f74206265656e2060648201527f70726f706f736564000000000000000000000000000000000000000000000000608482015260a40161059d565b600354610aaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f74206173206e6f206f7574707574732068617665206265656e2070726f706f7360648201527f6564207965740000000000000000000000000000000000000000000000000000608482015260a40161059d565b6003546000905b80821015610b485760006002610acc8385611538565b610ad69190611550565b90508460038281548110610aec57610aec611509565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff161015610b3e57610b37816001611538565b9250610b42565b8091505b50610ab6565b5092915050565b60065473ffffffffffffffffffffffffffffffffffffffff163314610bf6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324f75747075744f7261636c653a206f6e6c7920746865206368616c6c656e60448201527f67657220616464726573732063616e2064656c657465206f7574707574730000606482015260840161059d565b6003548110610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f747075747320616674657220746865206c6174657374206f757470757420696e60648201527f6465780000000000000000000000000000000000000000000000000000000000608482015260a40161059d565b60085460038281548110610cc357610cc3611509565b6000918252602090912060016002909202010154610cf3906fffffffffffffffffffffffffffffffff16426114f2565b10610da6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f74707574732074686174206861766520616c7265616479206265656e2066696e60648201527f616c697a65640000000000000000000000000000000000000000000000000000608482015260a40161059d565b6000610db160035490565b90508160035581817f4ee37ac2c786ec85e87592d3c5c8a1dd66f8496dda3f125d9ea8ca5f657629b660405160405180910390a35050565b60075473ffffffffffffffffffffffffffffffffffffffff163314610eb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f4c324f75747075744f7261636c653a206f6e6c79207468652070726f706f736560448201527f7220616464726573732063616e2070726f706f7365206e6577206f757470757460648201527f7300000000000000000000000000000000000000000000000000000000000000608482015260a40161059d565b610ebe611346565b8314610f72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a20626c6f636b206e756d626572206d757360448201527f7420626520657175616c20746f206e65787420657870656374656420626c6f6360648201527f6b206e756d626572000000000000000000000000000000000000000000000000608482015260a40161059d565b42610f7c84611316565b10611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324f75747075744f7261636c653a2063616e6e6f742070726f706f7365204c60448201527f32206f757470757420696e207468652066757475726500000000000000000000606482015260840161059d565b83611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a204c32206f75747075742070726f706f7360448201527f616c2063616e6e6f7420626520746865207a65726f2068617368000000000000606482015260840161059d565b81156111525781814014611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4c324f75747075744f7261636c653a20626c6f636b206861736820646f65732060448201527f6e6f74206d61746368207468652068617368206174207468652065787065637460648201527f6564206865696768740000000000000000000000000000000000000000000000608482015260a40161059d565b8261115c60035490565b857fa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e24260405161118e91815260200190565b60405180910390a45050604080516060810182529283526fffffffffffffffffffffffffffffffff4281166020850190815292811691840191825260038054600181018255600091909152935160029094027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b810194909455915190518216700100000000000000000000000000000000029116177fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c90910155565b60408051606081018252600080825260208201819052918101919091526003828154811061127a5761127a611509565b600091825260209182902060408051606081018252600290930290910180548352600101546fffffffffffffffffffffffffffffffff8082169484019490945270010000000000000000000000000000000090049092169181019190915292915050565b604080516060810182526000808252602082018190529181019190915260036113068361093b565b8154811061127a5761127a611509565b60006005546001548361132991906114f2565b611333919061158b565b6002546113409190611538565b92915050565b60006004546113536108b6565b6109249190611538565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b803573ffffffffffffffffffffffffffffffffffffffff8116811461139d57600080fd5b919050565b600080600080600080600060e0888a0312156113bd57600080fd5b873596506020880135955060408801359450606088013593506113e260808901611379565b92506113f060a08901611379565b915060c0880135905092959891949750929550565b600060208083528351808285015260005b8181101561143257858101830151858201604001528201611416565b81811115611444576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561148a57600080fd5b5035919050565b600080600080608085870312156114a757600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611504576115046114c3565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561154b5761154b6114c3565b500190565b600082611586577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156115c3576115c36114c3565b50029056fea164736f6c634300080f000a","sourceMap":"611:13425:133:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5264:92;;;;;;;;;;-1:-1:-1;5338:11:133;;5264:92;;;160:25:357;;;148:2;133:18;5264:92:133;;;;;;;;3742:985;;;;;;;;;;-1:-1:-1;3742:985:133;;;;;:::i;:::-;;:::i;:::-;;13212:174;;;;;;;;;;;;;:::i;4953:105::-;;;;;;;;;;-1:-1:-1;5033:18:133;;4953:105;;1426:25;;;;;;;;;;-1:-1:-1;1426:25:133;;;;;;;;;;;1182:42:357;1170:55;;;1152:74;;1140:2;1125:18;1426:25:133;1006:226:357;2598:40:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12608:105::-;;;;;;;;;;;;;:::i;12849:97::-;;;;;;;;;;-1:-1:-1;12923:9:133;:16;12849:97;;5580:88;;;;;;;;;;-1:-1:-1;5651:10:133;;;;5580:88;;743:34;;;;;;;;;;;;;;;;10969:896;;;;;;;;;;-1:-1:-1;10969:896:133;;;;;:::i;:::-;;:::i;863:32::-;;;;;;;;;;;;;;;;6689:975;;;;;;;;;;-1:-1:-1;6689:975:133;;;;;:::i;:::-;;:::i;1285:26::-;;;;;;;;;;;;;;;;8258:1981;;;;;;:::i;:::-;;:::i;10443:146::-;;;;;;;;;;-1:-1:-1;10443:146:133;;;;;:::i;:::-;;:::i;:::-;;;;2705:13:357;;2687:32;;2766:4;2754:17;;;2748:24;2791:34;2863:21;;;2841:20;;;2834:51;;;;2933:17;;;2927:24;2923:33;;;2901:20;;;2894:63;2675:2;2660:18;10443:146:133;2473:490:357;1564:23:133;;;;;;;;;;-1:-1:-1;1564:23:133;;;;;;;;5886:84;;;;;;;;;;-1:-1:-1;5955:8:133;;;;5886:84;;1728:40;;;;;;;;;;;;;;;;12228:174;;;;;;;;;;-1:-1:-1;12228:174:133;;;;;:::i;:::-;;:::i;13854:180::-;;;;;;;;;;-1:-1:-1;13854:180:133;;;;;:::i;:::-;;:::i;13524:121::-;;;;;;;;;;;;;:::i;1114:33::-;;;;;;;;;;;;;;;;6221:120;;;;;;;;;;-1:-1:-1;6309:25:133;;6221:120;;3742:985;3100:19:43;3123:13;;;;;;3122:14;;3168:34;;;;-1:-1:-1;3186:12:43;;3201:1;3186:12;;;;:16;3168:34;3167:97;;;-1:-1:-1;3236:4:43;1465:19:59;:23;;;3208:55:43;;-1:-1:-1;3246:12:43;;;;;:17;3208:55;3146:190;;;;;;;3170:2:357;3146:190:43;;;3152:21:357;3209:2;3189:18;;;3182:30;3248:34;3228:18;;;3221:62;3319:16;3299:18;;;3292:44;3353:19;;3146:190:43;;;;;;;;;3346:12;:16;;;;3361:1;3346:16;;;3372:65;;;;3406:13;:20;;;;;;;;3372:65;4088:1:133::1;4066:19;:23;4058:94;;;::::0;::::1;::::0;;3585:2:357;4058:94:133::1;::::0;::::1;3567:21:357::0;3624:2;3604:18;;;3597:30;3663:34;3643:18;;;3636:62;3734:28;3714:18;;;3707:56;3780:19;;4058:94:133::1;3383:422:357::0;4058:94:133::1;4185:1;4170:12;:16;4162:81;;;::::0;::::1;::::0;;4012:2:357;4162:81:133::1;::::0;::::1;3994:21:357::0;4051:2;4031:18;;;4024:30;4090:34;4070:18;;;4063:62;4161:22;4141:18;;;4134:50;4201:19;;4162:81:133::1;3810:416:357::0;4162:81:133::1;4296:15;4274:18;:37;;4253:152;;;::::0;::::1;::::0;;4433:2:357;4253:152:133::1;::::0;::::1;4415:21:357::0;4472:2;4452:18;;;4445:30;;;4511:34;4491:18;;;4484:62;4582:34;4562:18;;;4555:62;4654:6;4633:19;;;4626:35;4678:19;;4253:152:133::1;4231:472:357::0;4253:152:133::1;4416:18;:40:::0;;;4466:11:::1;:26:::0;;;4502:19:::1;:42:::0;;;4554:17:::1;:38:::0;;;4602:8:::1;:20:::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;;4632:10:::1;:24:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;4666:25:::1;:54:::0;;;3457:99:43;;;;3507:5;3491:21;;;;;;3531:14;;-1:-1:-1;4860:36:357;;3531:14:43;;4848:2:357;4833:18;3531:14:43;;;;;;;3457:99;3090:472;3742:985:133;;;;;;;:::o;13212:174::-;13288:9;:16;13262:7;;13288:21;:91;;13334:9;13344:16;;:20;;13363:1;;13344:20;:::i;:::-;13334:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:45;;;;;;;;;13212:174;-1:-1:-1;13212:174:133:o;13288:91::-;13312:19;;13288:91;13281:98;;13212:174;:::o;12608:105::-;12686:9;:16;12660:7;;12686:20;;12705:1;;12686:20;:::i;10969:896::-;11045:7;11184:19;:17;:19::i;:::-;11166:14;:37;;11145:156;;;;;;;5617:2:357;11145:156:133;;;5599:21:357;5656:2;5636:18;;;5629:30;5695:34;5675:18;;;5668:62;5766:34;5746:18;;;5739:62;5838:10;5817:19;;;5810:39;5866:19;;11145:156:133;5415:476:357;11145:156:133;11379:9;:16;11371:103;;;;;;;6098:2:357;11371:103:133;;;6080:21:357;6137:2;6117:18;;;6110:30;6176:34;6156:18;;;6149:62;6247:34;6227:18;;;6220:62;6319:8;6298:19;;;6291:37;6345:19;;11371:103:133;5896:474:357;11371:103:133;11589:9;:16;11552:10;;11615:224;11627:2;11622;:7;11615:224;;;11645:11;11671:1;11660:7;11665:2;11660;:7;:::i;:::-;11659:13;;;;:::i;:::-;11645:27;;11721:14;11690:9;11700:3;11690:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:28;;;;;;;;:45;11686:143;;;11760:7;:3;11766:1;11760:7;:::i;:::-;11755:12;;11686:143;;;11811:3;11806:8;;11686:143;11631:208;11615:224;;;-1:-1:-1;11856:2:133;10969:896;-1:-1:-1;;10969:896:133:o;6689:975::-;6779:10;;;;6765;:24;6757:99;;;;;;;6989:2:357;6757:99:133;;;6971:21:357;7028:2;7008:18;;;7001:30;7067:34;7047:18;;;7040:62;7138:32;7118:18;;;7111:60;7188:19;;6757:99:133;6787:426:357;6757:99:133;6974:9;:16;6957:33;;6936:135;;;;;;;7420:2:357;6936:135:133;;;7402:21:357;7459:2;7439:18;;;7432:30;7498:34;7478:18;;;7471:62;7569:34;7549:18;;;7542:62;7641:5;7620:19;;;7613:34;7664:19;;6936:135:133;7218:471:357;6936:135:133;7238:25;;7200:9;7210:14;7200:25;;;;;;;;:::i;:::-;;;;;;;;;:35;:25;;;;;:35;;7182:53;;7200:35;;7182:15;:53;:::i;:::-;:81;7161:198;;;;;;;7896:2:357;7161:198:133;;;7878:21:357;7935:2;7915:18;;;7908:30;7974:34;7954:18;;;7947:62;8045:34;8025:18;;;8018:62;8117:8;8096:19;;;8089:37;8143:19;;7161:198:133;7694:474:357;7161:198:133;7370:29;7402:17;12923:9;:16;;12849:97;7402:17;7370:49;;7564:14;7548;7541:38;7642:14;7619:21;7604:53;;;;;;;;;;6747:917;6689:975;:::o;8258:1981::-;8481:8;;;;8467:10;:22;8459:100;;;;;;;8375:2:357;8459:100:133;;;8357:21:357;8414:2;8394:18;;;8387:30;8453:34;8433:18;;;8426:62;8524:34;8504:18;;;8497:62;8596:3;8575:19;;;8568:32;8617:19;;8459:100:133;8173:469:357;8459:100:133;8609:17;:15;:17::i;:::-;8591:14;:35;8570:154;;;;;;;8849:2:357;8570:154:133;;;8831:21:357;8888:2;8868:18;;;8861:30;8927:34;8907:18;;;8900:62;8998:34;8978:18;;;8971:62;9070:10;9049:19;;;9042:39;9098:19;;8570:154:133;8647:476:357;8570:154:133;8793:15;8756:34;8775:14;8756:18;:34::i;:::-;:52;8735:153;;;;;;;9330:2:357;8735:153:133;;;9312:21:357;9369:2;9349:18;;;9342:30;9408:34;9388:18;;;9381:62;9479:24;9459:18;;;9452:52;9521:19;;8735:153:133;9128:418:357;8735:153:133;8907:11;8899:96;;;;;;;9753:2:357;8899:96:133;;;9735:21:357;9792:2;9772:18;;;9765:30;9831:34;9811:18;;;9804:62;9902:28;9882:18;;;9875:56;9948:19;;8899:96:133;9551:422:357;8899:96:133;9010:26;;9006:897;;9773:12;9754:14;9744:25;:41;9719:173;;;;;;;10180:2:357;9719:173:133;;;10162:21:357;10219:2;10199:18;;;10192:30;10258:34;10238:18;;;10231:62;10329:34;10309:18;;;10302:62;10401:11;10380:19;;;10373:40;10430:19;;9719:173:133;9978:477:357;9719:173:133;9965:14;9946:17;12923:9;:16;;12849:97;9946:17;9933:11;9918:79;9981:15;9918:79;;;;160:25:357;;148:2;133:18;;14:177;9918:79:133;;;;;;;;-1:-1:-1;;10036:186:133;;;;;;;;;;;;10135:15;10036:186;;;;;;;;;;;;;;;;;10008:9;:224;;;;;;;-1:-1:-1;10008:224:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8258:1981::o;10443:146::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;10557:9:133;10567:14;10557:25;;;;;;;;:::i;:::-;;;;;;;;;;10550:32;;;;;;;;10557:25;;;;;;;10550:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10443:146;-1:-1:-1;;10443:146:133:o;12228:174::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;12347:9:133;12357:37;12379:14;12357:21;:37::i;:::-;12347:48;;;;;;;;:::i;13854:180::-;13927:7;14015:11;;13992:19;;13975:14;:36;;;;:::i;:::-;13974:52;;;;:::i;:::-;13953:17;;:74;;;;:::i;:::-;13946:81;13854:180;-1:-1:-1;;13854:180:133:o;13524:121::-;13572:7;13620:18;;13598:19;:17;:19::i;:::-;:40;;;;:::i;1175:320:59:-;1465:19;;;:23;;;1175:320::o;196:196:357:-;264:20;;324:42;313:54;;303:65;;293:93;;382:1;379;372:12;293:93;196:196;;;:::o;397:604::-;510:6;518;526;534;542;550;558;611:3;599:9;590:7;586:23;582:33;579:53;;;628:1;625;618:12;579:53;664:9;651:23;641:33;;721:2;710:9;706:18;693:32;683:42;;772:2;761:9;757:18;744:32;734:42;;823:2;812:9;808:18;795:32;785:42;;846:39;880:3;869:9;865:19;846:39;:::i;:::-;836:49;;904:39;938:3;927:9;923:19;904:39;:::i;:::-;894:49;;990:3;979:9;975:19;962:33;952:43;;397:604;;;;;;;;;;:::o;1237:656::-;1349:4;1378:2;1407;1396:9;1389:21;1439:6;1433:13;1482:6;1477:2;1466:9;1462:18;1455:34;1507:1;1517:140;1531:6;1528:1;1525:13;1517:140;;;1626:14;;;1622:23;;1616:30;1592:17;;;1611:2;1588:26;1581:66;1546:10;;1517:140;;;1675:6;1672:1;1669:13;1666:91;;;1745:1;1740:2;1731:6;1720:9;1716:22;1712:31;1705:42;1666:91;-1:-1:-1;1809:2:357;1797:15;1814:66;1793:88;1778:104;;;;1884:2;1774:113;;1237:656;-1:-1:-1;;;1237:656:357:o;1898:180::-;1957:6;2010:2;1998:9;1989:7;1985:23;1981:32;1978:52;;;2026:1;2023;2016:12;1978:52;-1:-1:-1;2049:23:357;;1898:180;-1:-1:-1;1898:180:357:o;2083:385::-;2169:6;2177;2185;2193;2246:3;2234:9;2225:7;2221:23;2217:33;2214:53;;;2263:1;2260;2253:12;2214:53;-1:-1:-1;;2286:23:357;;;2356:2;2341:18;;2328:32;;-1:-1:-1;2407:2:357;2392:18;;2379:32;;2458:2;2443:18;2430:32;;-1:-1:-1;2083:385:357;-1:-1:-1;2083:385:357:o;4907:184::-;4959:77;4956:1;4949:88;5056:4;5053:1;5046:15;5080:4;5077:1;5070:15;5096:125;5136:4;5164:1;5161;5158:8;5155:34;;;5169:18;;:::i;:::-;-1:-1:-1;5206:9:357;;5096:125::o;5226:184::-;5278:77;5275:1;5268:88;5375:4;5372:1;5365:15;5399:4;5396:1;5389:15;6375:128;6415:3;6446:1;6442:6;6439:1;6436:13;6433:39;;;6452:18;;:::i;:::-;-1:-1:-1;6488:9:357;;6375:128::o;6508:274::-;6548:1;6574;6564:189;;6609:77;6606:1;6599:88;6710:4;6707:1;6700:15;6738:4;6735:1;6728:15;6564:189;-1:-1:-1;6767:9:357;;6508:274::o;10460:228::-;10500:7;10626:1;10558:66;10554:74;10551:1;10548:81;10543:1;10536:9;10529:17;10525:105;10522:131;;;10633:18;;:::i;:::-;-1:-1:-1;10673:9:357;;10460:228::o","linkReferences":{}},"methodIdentifiers":{"CHALLENGER()":"6b4d98dd","FINALIZATION_PERIOD_SECONDS()":"f4daa291","L2_BLOCK_TIME()":"002134cc","PROPOSER()":"bffa7f0f","SUBMISSION_INTERVAL()":"529933df","challenger()":"534db0e2","computeL2Timestamp(uint256)":"d1de856c","deleteL2Outputs(uint256)":"89c44cbb","finalizationPeriodSeconds()":"ce5db8d6","getL2Output(uint256)":"a25ae557","getL2OutputAfter(uint256)":"cf8e5cf0","getL2OutputIndexAfter(uint256)":"7f006420","initialize(uint256,uint256,uint256,uint256,address,address,uint256)":"1c89c97d","l2BlockTime()":"93991af3","latestBlockNumber()":"4599c788","latestOutputIndex()":"69f16eec","nextBlockNumber()":"dcec3348","nextOutputIndex()":"6abcf563","proposeL2Output(bytes32,uint256,bytes32,uint256)":"9aaab648","proposer()":"a8e4fb90","startingBlockNumber()":"70872aa5","startingTimestamp()":"88786272","submissionInterval()":"e1a41bcf","version()":"54fd4d50"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2OutputIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2BlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"l1Timestamp\",\"type\":\"uint256\"}],\"name\":\"OutputProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"prevNextOutputIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newNextOutputIndex\",\"type\":\"uint256\"}],\"name\":\"OutputsDeleted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CHALLENGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FINALIZATION_PERIOD_SECONDS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_BLOCK_TIME\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROPOSER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUBMISSION_INTERVAL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challenger\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"computeL2Timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"}],\"name\":\"deleteL2Outputs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"}],\"name\":\"getL2Output\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"timestamp\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.OutputProposal\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"getL2OutputAfter\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"timestamp\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.OutputProposal\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"getL2OutputIndexAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_submissionInterval\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_proposer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2BlockTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestOutputIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextOutputIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_l1BlockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l1BlockNumber\",\"type\":\"uint256\"}],\"name\":\"proposeL2Output\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startingBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startingTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"submissionInterval\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"custom:proxied\":\"@title L2OutputOracle\",\"events\":{\"OutputProposed(bytes32,uint256,uint256,uint256)\":{\"params\":{\"l1Timestamp\":\"The L1 timestamp when proposed.\",\"l2BlockNumber\":\"The L2 block number of the output root.\",\"l2OutputIndex\":\"The index of the output in the l2Outputs array.\",\"outputRoot\":\"The output root.\"}},\"OutputsDeleted(uint256,uint256)\":{\"params\":{\"newNextOutputIndex\":\"Next L2 output index after the deletion.\",\"prevNextOutputIndex\":\"Next L2 output index before the deletion.\"}}},\"kind\":\"dev\",\"methods\":{\"CHALLENGER()\":{\"custom:legacy\":\"\",\"returns\":{\"_0\":\"Address of the challenger.\"}},\"FINALIZATION_PERIOD_SECONDS()\":{\"custom:legacy\":\"\",\"returns\":{\"_0\":\"Finalization period in seconds.\"}},\"L2_BLOCK_TIME()\":{\"custom:legacy\":\"\",\"returns\":{\"_0\":\"L2 block time.\"}},\"PROPOSER()\":{\"custom:legacy\":\"\",\"returns\":{\"_0\":\"Address of the proposer.\"}},\"SUBMISSION_INTERVAL()\":{\"custom:legacy\":\"\",\"returns\":{\"_0\":\"Submission interval.\"}},\"computeL2Timestamp(uint256)\":{\"params\":{\"_l2BlockNumber\":\"The L2 block number of the target block.\"},\"returns\":{\"_0\":\"L2 timestamp of the given block.\"}},\"deleteL2Outputs(uint256)\":{\"params\":{\"_l2OutputIndex\":\"Index of the first L2 output to be deleted. All outputs after this output will also be deleted.\"}},\"getL2Output(uint256)\":{\"params\":{\"_l2OutputIndex\":\"Index of the output to return.\"},\"returns\":{\"_0\":\"The output at the given index.\"}},\"getL2OutputAfter(uint256)\":{\"params\":{\"_l2BlockNumber\":\"L2 block number to find a checkpoint for.\"},\"returns\":{\"_0\":\"First checkpoint that commits to the given L2 block number.\"}},\"getL2OutputIndexAfter(uint256)\":{\"params\":{\"_l2BlockNumber\":\"L2 block number to find a checkpoint for.\"},\"returns\":{\"_0\":\"Index of the first checkpoint that commits to the given L2 block number.\"}},\"initialize(uint256,uint256,uint256,uint256,address,address,uint256)\":{\"params\":{\"_challenger\":\"The address of the challenger.\",\"_finalizationPeriodSeconds\":\"The minimum time (in seconds) that must elapse before a withdrawal can be finalized.\",\"_l2BlockTime\":\"The time per L2 block, in seconds.\",\"_proposer\":\"The address of the proposer.\",\"_startingBlockNumber\":\"The number of the first L2 block.\",\"_startingTimestamp\":\"The timestamp of the first L2 block.\",\"_submissionInterval\":\"Interval in blocks at which checkpoints must be submitted.\"}},\"latestBlockNumber()\":{\"returns\":{\"_0\":\"Latest submitted L2 block number.\"}},\"latestOutputIndex()\":{\"returns\":{\"_0\":\"The number of outputs that have been proposed.\"}},\"nextBlockNumber()\":{\"returns\":{\"_0\":\"Next L2 block number.\"}},\"nextOutputIndex()\":{\"returns\":{\"_0\":\"The index of the next output to be proposed.\"}},\"proposeL2Output(bytes32,uint256,bytes32,uint256)\":{\"params\":{\"_l1BlockHash\":\"A block hash which must be included in the current chain.\",\"_l1BlockNumber\":\"The block number with the specified block hash.\",\"_l2BlockNumber\":\"The L2 block number that resulted in _outputRoot.\",\"_outputRoot\":\"The L2 output of the checkpoint block.\"}}},\"stateVariables\":{\"challenger\":{\"custom:network-specific\":\"\"},\"finalizationPeriodSeconds\":{\"custom:network-specific\":\"\"},\"l2BlockTime\":{\"custom:network-specific\":\"\"},\"proposer\":{\"custom:network-specific\":\"\"},\"submissionInterval\":{\"custom:network-specific\":\"\"},\"version\":{\"custom:semver\":\"1.8.0\"}},\"version\":1},\"userdoc\":{\"events\":{\"OutputProposed(bytes32,uint256,uint256,uint256)\":{\"notice\":\"Emitted when an output is proposed.\"},\"OutputsDeleted(uint256,uint256)\":{\"notice\":\"Emitted when outputs are deleted.\"}},\"kind\":\"user\",\"methods\":{\"CHALLENGER()\":{\"notice\":\"Getter for the challenger address. Public getter is legacy and will be removed in the future. Use `challenger` instead.\"},\"FINALIZATION_PERIOD_SECONDS()\":{\"notice\":\"Getter for the finalizationPeriodSeconds. Public getter is legacy and will be removed in the future. Use `finalizationPeriodSeconds` instead.\"},\"L2_BLOCK_TIME()\":{\"notice\":\"Getter for the l2BlockTime. Public getter is legacy and will be removed in the future. Use `l2BlockTime` instead.\"},\"PROPOSER()\":{\"notice\":\"Getter for the proposer address. Public getter is legacy and will be removed in the future. Use `proposer` instead.\"},\"SUBMISSION_INTERVAL()\":{\"notice\":\"Getter for the submissionInterval. Public getter is legacy and will be removed in the future. Use `submissionInterval` instead.\"},\"challenger()\":{\"notice\":\"The address of the challenger. Can be updated via upgrade.\"},\"computeL2Timestamp(uint256)\":{\"notice\":\"Returns the L2 timestamp corresponding to a given L2 block number.\"},\"constructor\":{\"notice\":\"Constructs the L2OutputOracle contract. Initializes variables to the same values as in the getting-started config.\"},\"deleteL2Outputs(uint256)\":{\"notice\":\"Deletes all output proposals after and including the proposal that corresponds to the given output index. Only the challenger address can delete outputs.\"},\"finalizationPeriodSeconds()\":{\"notice\":\"The minimum time (in seconds) that must elapse before a withdrawal can be finalized.\"},\"getL2Output(uint256)\":{\"notice\":\"Returns an output by index. Needed to return a struct instead of a tuple.\"},\"getL2OutputAfter(uint256)\":{\"notice\":\"Returns the L2 output proposal that checkpoints a given L2 block number. Uses a binary search to find the first output greater than or equal to the given block.\"},\"getL2OutputIndexAfter(uint256)\":{\"notice\":\"Returns the index of the L2 output that checkpoints a given L2 block number. Uses a binary search to find the first output greater than or equal to the given block.\"},\"initialize(uint256,uint256,uint256,uint256,address,address,uint256)\":{\"notice\":\"Initializer.\"},\"l2BlockTime()\":{\"notice\":\"The time between L2 blocks in seconds. Once set, this value MUST NOT be modified.\"},\"latestBlockNumber()\":{\"notice\":\"Returns the block number of the latest submitted L2 output proposal. If no proposals been submitted yet then this function will return the starting block number.\"},\"latestOutputIndex()\":{\"notice\":\"Returns the number of outputs that have been proposed. Will revert if no outputs have been proposed yet.\"},\"nextBlockNumber()\":{\"notice\":\"Computes the block number of the next L2 block that needs to be checkpointed.\"},\"nextOutputIndex()\":{\"notice\":\"Returns the index of the next output to be proposed.\"},\"proposeL2Output(bytes32,uint256,bytes32,uint256)\":{\"notice\":\"Accepts an outputRoot and the timestamp of the corresponding L2 block. The timestamp must be equal to the current value returned by `nextTimestamp()` in order to be accepted. This function may only be called by the Proposer.\"},\"proposer()\":{\"notice\":\"The address of the proposer. Can be updated via upgrade.\"},\"startingBlockNumber()\":{\"notice\":\"The number of the first L2 block recorded in this contract.\"},\"startingTimestamp()\":{\"notice\":\"The timestamp of the first L2 block recorded in this contract.\"},\"submissionInterval()\":{\"notice\":\"The interval in L2 blocks at which checkpoints must be submitted.\"},\"version()\":{\"notice\":\"Semantic version.\"}},\"notice\":\"The L2OutputOracle contains an array of L2 state outputs, where each output is a commitment to the state of the L2 chain. Other contracts like the OptimismPortal use these outputs to verify information about the state of L2.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/L1/L2OutputOracle.sol\":\"L2OutputOracle\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f\",\"dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929\",\"dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689\",\"dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy\"]},\"lib/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c\",\"dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8\"]},\"src/L1/L2OutputOracle.sol\":{\"keccak256\":\"0x342c5084f3c640c90530122bd78372c011d6162e698dd8c8daec9496fef01d42\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8700a3d486bd62cbb861ff80175b8040336940515791073af6a036db7c2df303\",\"dweb:/ipfs/QmSGKTH84rVHWgMg4d6GQZCmCJ16KuUuTsMwPMDdJxCsww\"]},\"src/L1/ResourceMetering.sol\":{\"keccak256\":\"0xde3ac62c60f27a3f1ba06eec94f4eda45e7ec5544c6a5d6b79543a7184e44408\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://265a2845c4ff0d9076dd0505755cf2bdf799f4fdc09ef016865a26b51f5c3409\",\"dweb:/ipfs/QmRzSdBD8jmQf3U9u2ATRAzzuyo6c5ugz8VA5ZM4vzoGiM\"]},\"src/libraries/Arithmetic.sol\":{\"keccak256\":\"0x91345e053584f82ad04d682ba821cf3ede808304f5b2a88116a894cf692c21db\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://005e3c42d2edfca0a506cbda94d3b0104eddf20c00bd1bd25272f53f2ef74c72\",\"dweb:/ipfs/QmdaW6Nge6NKoGvFqRpQjBpM2fXpc5y8WpZyBnDnKicdJq\"]},\"src/libraries/Burn.sol\":{\"keccak256\":\"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f\",\"dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb\"]},\"src/libraries/Constants.sol\":{\"keccak256\":\"0xe0aeec7d6e5d1e44a11405d3b5bfc384ea092c39bea0b763ab937a26fd427132\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11aa3bff9da26ca2545132ec7994866690446a5321023811c254410d9593bd9b\",\"dweb:/ipfs/QmVxWqadxvdfkqdrhfWisDqeAthibn4HEE1P6o9aFxXLhp\"]},\"src/libraries/Types.sol\":{\"keccak256\":\"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e\",\"dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc\"]},\"src/universal/ISemver.sol\":{\"keccak256\":\"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a\",\"dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.15+commit.e14f2714"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"outputRoot","type":"bytes32","indexed":true},{"internalType":"uint256","name":"l2OutputIndex","type":"uint256","indexed":true},{"internalType":"uint256","name":"l2BlockNumber","type":"uint256","indexed":true},{"internalType":"uint256","name":"l1Timestamp","type":"uint256","indexed":false}],"type":"event","name":"OutputProposed","anonymous":false},{"inputs":[{"internalType":"uint256","name":"prevNextOutputIndex","type":"uint256","indexed":true},{"internalType":"uint256","name":"newNextOutputIndex","type":"uint256","indexed":true}],"type":"event","name":"OutputsDeleted","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"CHALLENGER","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"FINALIZATION_PERIOD_SECONDS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"L2_BLOCK_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"PROPOSER","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"SUBMISSION_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"challenger","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"_l2BlockNumber","type":"uint256"}],"stateMutability":"view","type":"function","name":"computeL2Timestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"_l2OutputIndex","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"deleteL2Outputs"},{"inputs":[],"stateMutability":"view","type":"function","name":"finalizationPeriodSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"_l2OutputIndex","type":"uint256"}],"stateMutability":"view","type":"function","name":"getL2Output","outputs":[{"internalType":"struct Types.OutputProposal","name":"","type":"tuple","components":[{"internalType":"bytes32","name":"outputRoot","type":"bytes32"},{"internalType":"uint128","name":"timestamp","type":"uint128"},{"internalType":"uint128","name":"l2BlockNumber","type":"uint128"}]}]},{"inputs":[{"internalType":"uint256","name":"_l2BlockNumber","type":"uint256"}],"stateMutability":"view","type":"function","name":"getL2OutputAfter","outputs":[{"internalType":"struct Types.OutputProposal","name":"","type":"tuple","components":[{"internalType":"bytes32","name":"outputRoot","type":"bytes32"},{"internalType":"uint128","name":"timestamp","type":"uint128"},{"internalType":"uint128","name":"l2BlockNumber","type":"uint128"}]}]},{"inputs":[{"internalType":"uint256","name":"_l2BlockNumber","type":"uint256"}],"stateMutability":"view","type":"function","name":"getL2OutputIndexAfter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"_submissionInterval","type":"uint256"},{"internalType":"uint256","name":"_l2BlockTime","type":"uint256"},{"internalType":"uint256","name":"_startingBlockNumber","type":"uint256"},{"internalType":"uint256","name":"_startingTimestamp","type":"uint256"},{"internalType":"address","name":"_proposer","type":"address"},{"internalType":"address","name":"_challenger","type":"address"},{"internalType":"uint256","name":"_finalizationPeriodSeconds","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"l2BlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"latestBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"latestOutputIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"nextBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"nextOutputIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"_outputRoot","type":"bytes32"},{"internalType":"uint256","name":"_l2BlockNumber","type":"uint256"},{"internalType":"bytes32","name":"_l1BlockHash","type":"bytes32"},{"internalType":"uint256","name":"_l1BlockNumber","type":"uint256"}],"stateMutability":"payable","type":"function","name":"proposeL2Output"},{"inputs":[],"stateMutability":"view","type":"function","name":"proposer","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"startingBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"startingTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"submissionInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]}],"devdoc":{"kind":"dev","methods":{"CHALLENGER()":{"custom:legacy":"","returns":{"_0":"Address of the challenger."}},"FINALIZATION_PERIOD_SECONDS()":{"custom:legacy":"","returns":{"_0":"Finalization period in seconds."}},"L2_BLOCK_TIME()":{"custom:legacy":"","returns":{"_0":"L2 block time."}},"PROPOSER()":{"custom:legacy":"","returns":{"_0":"Address of the proposer."}},"SUBMISSION_INTERVAL()":{"custom:legacy":"","returns":{"_0":"Submission interval."}},"computeL2Timestamp(uint256)":{"params":{"_l2BlockNumber":"The L2 block number of the target block."},"returns":{"_0":"L2 timestamp of the given block."}},"deleteL2Outputs(uint256)":{"params":{"_l2OutputIndex":"Index of the first L2 output to be deleted. All outputs after this output will also be deleted."}},"getL2Output(uint256)":{"params":{"_l2OutputIndex":"Index of the output to return."},"returns":{"_0":"The output at the given index."}},"getL2OutputAfter(uint256)":{"params":{"_l2BlockNumber":"L2 block number to find a checkpoint for."},"returns":{"_0":"First checkpoint that commits to the given L2 block number."}},"getL2OutputIndexAfter(uint256)":{"params":{"_l2BlockNumber":"L2 block number to find a checkpoint for."},"returns":{"_0":"Index of the first checkpoint that commits to the given L2 block number."}},"initialize(uint256,uint256,uint256,uint256,address,address,uint256)":{"params":{"_challenger":"The address of the challenger.","_finalizationPeriodSeconds":"The minimum time (in seconds) that must elapse before a withdrawal can be finalized.","_l2BlockTime":"The time per L2 block, in seconds.","_proposer":"The address of the proposer.","_startingBlockNumber":"The number of the first L2 block.","_startingTimestamp":"The timestamp of the first L2 block.","_submissionInterval":"Interval in blocks at which checkpoints must be submitted."}},"latestBlockNumber()":{"returns":{"_0":"Latest submitted L2 block number."}},"latestOutputIndex()":{"returns":{"_0":"The number of outputs that have been proposed."}},"nextBlockNumber()":{"returns":{"_0":"Next L2 block number."}},"nextOutputIndex()":{"returns":{"_0":"The index of the next output to be proposed."}},"proposeL2Output(bytes32,uint256,bytes32,uint256)":{"params":{"_l1BlockHash":"A block hash which must be included in the current chain.","_l1BlockNumber":"The block number with the specified block hash.","_l2BlockNumber":"The L2 block number that resulted in _outputRoot.","_outputRoot":"The L2 output of the checkpoint block."}}},"version":1},"userdoc":{"kind":"user","methods":{"CHALLENGER()":{"notice":"Getter for the challenger address. Public getter is legacy and will be removed in the future. Use `challenger` instead."},"FINALIZATION_PERIOD_SECONDS()":{"notice":"Getter for the finalizationPeriodSeconds. Public getter is legacy and will be removed in the future. Use `finalizationPeriodSeconds` instead."},"L2_BLOCK_TIME()":{"notice":"Getter for the l2BlockTime. Public getter is legacy and will be removed in the future. Use `l2BlockTime` instead."},"PROPOSER()":{"notice":"Getter for the proposer address. Public getter is legacy and will be removed in the future. Use `proposer` instead."},"SUBMISSION_INTERVAL()":{"notice":"Getter for the submissionInterval. Public getter is legacy and will be removed in the future. Use `submissionInterval` instead."},"challenger()":{"notice":"The address of the challenger. Can be updated via upgrade."},"computeL2Timestamp(uint256)":{"notice":"Returns the L2 timestamp corresponding to a given L2 block number."},"constructor":{"notice":"Constructs the L2OutputOracle contract. Initializes variables to the same values as in the getting-started config."},"deleteL2Outputs(uint256)":{"notice":"Deletes all output proposals after and including the proposal that corresponds to the given output index. Only the challenger address can delete outputs."},"finalizationPeriodSeconds()":{"notice":"The minimum time (in seconds) that must elapse before a withdrawal can be finalized."},"getL2Output(uint256)":{"notice":"Returns an output by index. Needed to return a struct instead of a tuple."},"getL2OutputAfter(uint256)":{"notice":"Returns the L2 output proposal that checkpoints a given L2 block number. Uses a binary search to find the first output greater than or equal to the given block."},"getL2OutputIndexAfter(uint256)":{"notice":"Returns the index of the L2 output that checkpoints a given L2 block number. Uses a binary search to find the first output greater than or equal to the given block."},"initialize(uint256,uint256,uint256,uint256,address,address,uint256)":{"notice":"Initializer."},"l2BlockTime()":{"notice":"The time between L2 blocks in seconds. Once set, this value MUST NOT be modified."},"latestBlockNumber()":{"notice":"Returns the block number of the latest submitted L2 output proposal. If no proposals been submitted yet then this function will return the starting block number."},"latestOutputIndex()":{"notice":"Returns the number of outputs that have been proposed. Will revert if no outputs have been proposed yet."},"nextBlockNumber()":{"notice":"Computes the block number of the next L2 block that needs to be checkpointed."},"nextOutputIndex()":{"notice":"Returns the index of the next output to be proposed."},"proposeL2Output(bytes32,uint256,bytes32,uint256)":{"notice":"Accepts an outputRoot and the timestamp of the corresponding L2 block. The timestamp must be equal to the current value returned by `nextTimestamp()` in order to be accepted. This function may only be called by the Proposer."},"proposer()":{"notice":"The address of the proposer. Can be updated via upgrade."},"startingBlockNumber()":{"notice":"The number of the first L2 block recorded in this contract."},"startingTimestamp()":{"notice":"The timestamp of the first L2 block recorded in this contract."},"submissionInterval()":{"notice":"The interval in L2 blocks at which checkpoints must be submitted."},"version()":{"notice":"Semantic version."}},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","ds-test/=lib/forge-std/lib/ds-test/src/","forge-std/=lib/forge-std/src/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/L1/L2OutputOracle.sol":"L2OutputOracle"},"evmVersion":"london","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66","urls":["bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f","dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10","urls":["bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487","dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0","urls":["bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929","dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7","urls":["bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689","dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy"],"license":"MIT"},"lib/solmate/src/utils/FixedPointMathLib.sol":{"keccak256":"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d","urls":["bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c","dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8"],"license":"MIT"},"src/L1/L2OutputOracle.sol":{"keccak256":"0x342c5084f3c640c90530122bd78372c011d6162e698dd8c8daec9496fef01d42","urls":["bzz-raw://8700a3d486bd62cbb861ff80175b8040336940515791073af6a036db7c2df303","dweb:/ipfs/QmSGKTH84rVHWgMg4d6GQZCmCJ16KuUuTsMwPMDdJxCsww"],"license":"MIT"},"src/L1/ResourceMetering.sol":{"keccak256":"0xde3ac62c60f27a3f1ba06eec94f4eda45e7ec5544c6a5d6b79543a7184e44408","urls":["bzz-raw://265a2845c4ff0d9076dd0505755cf2bdf799f4fdc09ef016865a26b51f5c3409","dweb:/ipfs/QmRzSdBD8jmQf3U9u2ATRAzzuyo6c5ugz8VA5ZM4vzoGiM"],"license":"MIT"},"src/libraries/Arithmetic.sol":{"keccak256":"0x91345e053584f82ad04d682ba821cf3ede808304f5b2a88116a894cf692c21db","urls":["bzz-raw://005e3c42d2edfca0a506cbda94d3b0104eddf20c00bd1bd25272f53f2ef74c72","dweb:/ipfs/QmdaW6Nge6NKoGvFqRpQjBpM2fXpc5y8WpZyBnDnKicdJq"],"license":"MIT"},"src/libraries/Burn.sol":{"keccak256":"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010","urls":["bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f","dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb"],"license":"MIT"},"src/libraries/Constants.sol":{"keccak256":"0xe0aeec7d6e5d1e44a11405d3b5bfc384ea092c39bea0b763ab937a26fd427132","urls":["bzz-raw://11aa3bff9da26ca2545132ec7994866690446a5321023811c254410d9593bd9b","dweb:/ipfs/QmVxWqadxvdfkqdrhfWisDqeAthibn4HEE1P6o9aFxXLhp"],"license":"MIT"},"src/libraries/Types.sol":{"keccak256":"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4","urls":["bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e","dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc"],"license":"MIT"},"src/universal/ISemver.sol":{"keccak256":"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44","urls":["bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a","dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":49534,"contract":"src/L1/L2OutputOracle.sol:L2OutputOracle","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":49537,"contract":"src/L1/L2OutputOracle.sol:L2OutputOracle","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":85939,"contract":"src/L1/L2OutputOracle.sol:L2OutputOracle","label":"startingBlockNumber","offset":0,"slot":"1","type":"t_uint256"},{"astId":85942,"contract":"src/L1/L2OutputOracle.sol:L2OutputOracle","label":"startingTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":85947,"contract":"src/L1/L2OutputOracle.sol:L2OutputOracle","label":"l2Outputs","offset":0,"slot":"3","type":"t_array(t_struct(OutputProposal)104307_storage)dyn_storage"},{"astId":85950,"contract":"src/L1/L2OutputOracle.sol:L2OutputOracle","label":"submissionInterval","offset":0,"slot":"4","type":"t_uint256"},{"astId":85953,"contract":"src/L1/L2OutputOracle.sol:L2OutputOracle","label":"l2BlockTime","offset":0,"slot":"5","type":"t_uint256"},{"astId":85956,"contract":"src/L1/L2OutputOracle.sol:L2OutputOracle","label":"challenger","offset":0,"slot":"6","type":"t_address"},{"astId":85959,"contract":"src/L1/L2OutputOracle.sol:L2OutputOracle","label":"proposer","offset":0,"slot":"7","type":"t_address"},{"astId":85962,"contract":"src/L1/L2OutputOracle.sol:L2OutputOracle","label":"finalizationPeriodSeconds","offset":0,"slot":"8","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_struct(OutputProposal)104307_storage)dyn_storage":{"encoding":"dynamic_array","label":"struct Types.OutputProposal[]","numberOfBytes":"32","base":"t_struct(OutputProposal)104307_storage"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_struct(OutputProposal)104307_storage":{"encoding":"inplace","label":"struct Types.OutputProposal","numberOfBytes":"64","members":[{"astId":104302,"contract":"src/L1/L2OutputOracle.sol:L2OutputOracle","label":"outputRoot","offset":0,"slot":"0","type":"t_bytes32"},{"astId":104304,"contract":"src/L1/L2OutputOracle.sol:L2OutputOracle","label":"timestamp","offset":0,"slot":"1","type":"t_uint128"},{"astId":104306,"contract":"src/L1/L2OutputOracle.sol:L2OutputOracle","label":"l2BlockNumber","offset":16,"slot":"1","type":"t_uint128"}]},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"version":1,"kind":"user","methods":{"CHALLENGER()":{"notice":"Getter for the challenger address. Public getter is legacy and will be removed in the future. Use `challenger` instead."},"FINALIZATION_PERIOD_SECONDS()":{"notice":"Getter for the finalizationPeriodSeconds. Public getter is legacy and will be removed in the future. Use `finalizationPeriodSeconds` instead."},"L2_BLOCK_TIME()":{"notice":"Getter for the l2BlockTime. Public getter is legacy and will be removed in the future. Use `l2BlockTime` instead."},"PROPOSER()":{"notice":"Getter for the proposer address. Public getter is legacy and will be removed in the future. Use `proposer` instead."},"SUBMISSION_INTERVAL()":{"notice":"Getter for the submissionInterval. Public getter is legacy and will be removed in the future. Use `submissionInterval` instead."},"challenger()":{"notice":"The address of the challenger. Can be updated via upgrade."},"computeL2Timestamp(uint256)":{"notice":"Returns the L2 timestamp corresponding to a given L2 block number."},"constructor":{"notice":"Constructs the L2OutputOracle contract. Initializes variables to the same values as in the getting-started config."},"deleteL2Outputs(uint256)":{"notice":"Deletes all output proposals after and including the proposal that corresponds to the given output index. Only the challenger address can delete outputs."},"finalizationPeriodSeconds()":{"notice":"The minimum time (in seconds) that must elapse before a withdrawal can be finalized."},"getL2Output(uint256)":{"notice":"Returns an output by index. Needed to return a struct instead of a tuple."},"getL2OutputAfter(uint256)":{"notice":"Returns the L2 output proposal that checkpoints a given L2 block number. Uses a binary search to find the first output greater than or equal to the given block."},"getL2OutputIndexAfter(uint256)":{"notice":"Returns the index of the L2 output that checkpoints a given L2 block number. Uses a binary search to find the first output greater than or equal to the given block."},"initialize(uint256,uint256,uint256,uint256,address,address,uint256)":{"notice":"Initializer."},"l2BlockTime()":{"notice":"The time between L2 blocks in seconds. Once set, this value MUST NOT be modified."},"latestBlockNumber()":{"notice":"Returns the block number of the latest submitted L2 output proposal. If no proposals been submitted yet then this function will return the starting block number."},"latestOutputIndex()":{"notice":"Returns the number of outputs that have been proposed. Will revert if no outputs have been proposed yet."},"nextBlockNumber()":{"notice":"Computes the block number of the next L2 block that needs to be checkpointed."},"nextOutputIndex()":{"notice":"Returns the index of the next output to be proposed."},"proposeL2Output(bytes32,uint256,bytes32,uint256)":{"notice":"Accepts an outputRoot and the timestamp of the corresponding L2 block. The timestamp must be equal to the current value returned by `nextTimestamp()` in order to be accepted. This function may only be called by the Proposer."},"proposer()":{"notice":"The address of the proposer. Can be updated via upgrade."},"startingBlockNumber()":{"notice":"The number of the first L2 block recorded in this contract."},"startingTimestamp()":{"notice":"The timestamp of the first L2 block recorded in this contract."},"submissionInterval()":{"notice":"The interval in L2 blocks at which checkpoints must be submitted."},"version()":{"notice":"Semantic version."}},"events":{"OutputProposed(bytes32,uint256,uint256,uint256)":{"notice":"Emitted when an output is proposed."},"OutputsDeleted(uint256,uint256)":{"notice":"Emitted when outputs are deleted."}},"notice":"The L2OutputOracle contains an array of L2 state outputs, where each output is a commitment to the state of the L2 chain. Other contracts like the OptimismPortal use these outputs to verify information about the state of L2."},"devdoc":{"version":1,"kind":"dev","methods":{"CHALLENGER()":{"returns":{"_0":"Address of the challenger."}},"FINALIZATION_PERIOD_SECONDS()":{"returns":{"_0":"Finalization period in seconds."}},"L2_BLOCK_TIME()":{"returns":{"_0":"L2 block time."}},"PROPOSER()":{"returns":{"_0":"Address of the proposer."}},"SUBMISSION_INTERVAL()":{"returns":{"_0":"Submission interval."}},"computeL2Timestamp(uint256)":{"params":{"_l2BlockNumber":"The L2 block number of the target block."},"returns":{"_0":"L2 timestamp of the given block."}},"deleteL2Outputs(uint256)":{"params":{"_l2OutputIndex":"Index of the first L2 output to be deleted. All outputs after this output will also be deleted."}},"getL2Output(uint256)":{"params":{"_l2OutputIndex":"Index of the output to return."},"returns":{"_0":"The output at the given index."}},"getL2OutputAfter(uint256)":{"params":{"_l2BlockNumber":"L2 block number to find a checkpoint for."},"returns":{"_0":"First checkpoint that commits to the given L2 block number."}},"getL2OutputIndexAfter(uint256)":{"params":{"_l2BlockNumber":"L2 block number to find a checkpoint for."},"returns":{"_0":"Index of the first checkpoint that commits to the given L2 block number."}},"initialize(uint256,uint256,uint256,uint256,address,address,uint256)":{"params":{"_challenger":"The address of the challenger.","_finalizationPeriodSeconds":"The minimum time (in seconds) that must elapse before a withdrawal can be finalized.","_l2BlockTime":"The time per L2 block, in seconds.","_proposer":"The address of the proposer.","_startingBlockNumber":"The number of the first L2 block.","_startingTimestamp":"The timestamp of the first L2 block.","_submissionInterval":"Interval in blocks at which checkpoints must be submitted."}},"latestBlockNumber()":{"returns":{"_0":"Latest submitted L2 block number."}},"latestOutputIndex()":{"returns":{"_0":"The number of outputs that have been proposed."}},"nextBlockNumber()":{"returns":{"_0":"Next L2 block number."}},"nextOutputIndex()":{"returns":{"_0":"The index of the next output to be proposed."}},"proposeL2Output(bytes32,uint256,bytes32,uint256)":{"params":{"_l1BlockHash":"A block hash which must be included in the current chain.","_l1BlockNumber":"The block number with the specified block hash.","_l2BlockNumber":"The L2 block number that resulted in _outputRoot.","_outputRoot":"The L2 output of the checkpoint block."}}},"events":{"OutputProposed(bytes32,uint256,uint256,uint256)":{"params":{"l1Timestamp":"The L1 timestamp when proposed.","l2BlockNumber":"The L2 block number of the output root.","l2OutputIndex":"The index of the output in the l2Outputs array.","outputRoot":"The output root."}},"OutputsDeleted(uint256,uint256)":{"params":{"newNextOutputIndex":"Next L2 output index after the deletion.","prevNextOutputIndex":"Next L2 output index before the deletion."}}}},"ast":{"absolutePath":"src/L1/L2OutputOracle.sol","id":86436,"exportedSymbols":{"Constants":[103096],"ISemver":[109417],"Initializable":[49678],"L2OutputOracle":[86435],"Types":[104349]},"nodeType":"SourceUnit","src":"32:14005:133","nodes":[{"id":85923,"nodeType":"PragmaDirective","src":"32:23:133","nodes":[],"literals":["solidity","0.8",".15"]},{"id":85925,"nodeType":"ImportDirective","src":"57:86:133","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":86436,"sourceUnit":49679,"symbolAliases":[{"foreign":{"id":85924,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49678,"src":"66:13:133","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":85927,"nodeType":"ImportDirective","src":"144:52:133","nodes":[],"absolutePath":"src/universal/ISemver.sol","file":"src/universal/ISemver.sol","nameLocation":"-1:-1:-1","scope":86436,"sourceUnit":109418,"symbolAliases":[{"foreign":{"id":85926,"name":"ISemver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109417,"src":"153:7:133","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":85929,"nodeType":"ImportDirective","src":"197:48:133","nodes":[],"absolutePath":"src/libraries/Types.sol","file":"src/libraries/Types.sol","nameLocation":"-1:-1:-1","scope":86436,"sourceUnit":104350,"symbolAliases":[{"foreign":{"id":85928,"name":"Types","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104349,"src":"206:5:133","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":85931,"nodeType":"ImportDirective","src":"246:56:133","nodes":[],"absolutePath":"src/libraries/Constants.sol","file":"src/libraries/Constants.sol","nameLocation":"-1:-1:-1","scope":86436,"sourceUnit":103097,"symbolAliases":[{"foreign":{"id":85930,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103096,"src":"255:9:133","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":86435,"nodeType":"ContractDefinition","src":"611:13425:133","nodes":[{"id":85939,"nodeType":"VariableDeclaration","src":"743:34:133","nodes":[],"constant":false,"documentation":{"id":85937,"nodeType":"StructuredDocumentation","src":"667:71:133","text":"@notice The number of the first L2 block recorded in this contract."},"functionSelector":"70872aa5","mutability":"mutable","name":"startingBlockNumber","nameLocation":"758:19:133","scope":86435,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85938,"name":"uint256","nodeType":"ElementaryTypeName","src":"743:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":85942,"nodeType":"VariableDeclaration","src":"863:32:133","nodes":[],"constant":false,"documentation":{"id":85940,"nodeType":"StructuredDocumentation","src":"784:74:133","text":"@notice The timestamp of the first L2 block recorded in this contract."},"functionSelector":"88786272","mutability":"mutable","name":"startingTimestamp","nameLocation":"878:17:133","scope":86435,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85941,"name":"uint256","nodeType":"ElementaryTypeName","src":"863:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":85947,"nodeType":"VariableDeclaration","src":"951:41:133","nodes":[],"constant":false,"documentation":{"id":85943,"nodeType":"StructuredDocumentation","src":"902:44:133","text":"@notice An array of L2 output proposals."},"mutability":"mutable","name":"l2Outputs","nameLocation":"983:9:133","scope":86435,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutputProposal_$104307_storage_$dyn_storage","typeString":"struct Types.OutputProposal[]"},"typeName":{"baseType":{"id":85945,"nodeType":"UserDefinedTypeName","pathNode":{"id":85944,"name":"Types.OutputProposal","nodeType":"IdentifierPath","referencedDeclaration":104307,"src":"951:20:133"},"referencedDeclaration":104307,"src":"951:20:133","typeDescriptions":{"typeIdentifier":"t_struct$_OutputProposal_$104307_storage_ptr","typeString":"struct Types.OutputProposal"}},"id":85946,"nodeType":"ArrayTypeName","src":"951:22:133","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutputProposal_$104307_storage_$dyn_storage_ptr","typeString":"struct Types.OutputProposal[]"}},"visibility":"internal"},{"id":85950,"nodeType":"VariableDeclaration","src":"1114:33:133","nodes":[],"constant":false,"documentation":{"id":85948,"nodeType":"StructuredDocumentation","src":"999:110:133","text":"@notice The interval in L2 blocks at which checkpoints must be submitted.\n @custom:network-specific"},"functionSelector":"e1a41bcf","mutability":"mutable","name":"submissionInterval","nameLocation":"1129:18:133","scope":86435,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85949,"name":"uint256","nodeType":"ElementaryTypeName","src":"1114:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":85953,"nodeType":"VariableDeclaration","src":"1285:26:133","nodes":[],"constant":false,"documentation":{"id":85951,"nodeType":"StructuredDocumentation","src":"1154:126:133","text":"@notice The time between L2 blocks in seconds. Once set, this value MUST NOT be modified.\n @custom:network-specific"},"functionSelector":"93991af3","mutability":"mutable","name":"l2BlockTime","nameLocation":"1300:11:133","scope":86435,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85952,"name":"uint256","nodeType":"ElementaryTypeName","src":"1285:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":85956,"nodeType":"VariableDeclaration","src":"1426:25:133","nodes":[],"constant":false,"documentation":{"id":85954,"nodeType":"StructuredDocumentation","src":"1318:103:133","text":"@notice The address of the challenger. Can be updated via upgrade.\n @custom:network-specific"},"functionSelector":"534db0e2","mutability":"mutable","name":"challenger","nameLocation":"1441:10:133","scope":86435,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85955,"name":"address","nodeType":"ElementaryTypeName","src":"1426:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":85959,"nodeType":"VariableDeclaration","src":"1564:23:133","nodes":[],"constant":false,"documentation":{"id":85957,"nodeType":"StructuredDocumentation","src":"1458:101:133","text":"@notice The address of the proposer. Can be updated via upgrade.\n @custom:network-specific"},"functionSelector":"a8e4fb90","mutability":"mutable","name":"proposer","nameLocation":"1579:8:133","scope":86435,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85958,"name":"address","nodeType":"ElementaryTypeName","src":"1564:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":85962,"nodeType":"VariableDeclaration","src":"1728:40:133","nodes":[],"constant":false,"documentation":{"id":85960,"nodeType":"StructuredDocumentation","src":"1594:129:133","text":"@notice The minimum time (in seconds) that must elapse before a withdrawal can be finalized.\n @custom:network-specific"},"functionSelector":"ce5db8d6","mutability":"mutable","name":"finalizationPeriodSeconds","nameLocation":"1743:25:133","scope":86435,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85961,"name":"uint256","nodeType":"ElementaryTypeName","src":"1728:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":85973,"nodeType":"EventDefinition","src":"2080:146:133","nodes":[],"anonymous":false,"documentation":{"id":85963,"nodeType":"StructuredDocumentation","src":"1775:300:133","text":"@notice Emitted when an output is proposed.\n @param outputRoot The output root.\n @param l2OutputIndex The index of the output in the l2Outputs array.\n @param l2BlockNumber The L2 block number of the output root.\n @param l1Timestamp The L1 timestamp when proposed."},"eventSelector":"a7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e2","name":"OutputProposed","nameLocation":"2086:14:133","parameters":{"id":85972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85965,"indexed":true,"mutability":"mutable","name":"outputRoot","nameLocation":"2126:10:133","nodeType":"VariableDeclaration","scope":85973,"src":"2110:26:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":85964,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2110:7:133","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":85967,"indexed":true,"mutability":"mutable","name":"l2OutputIndex","nameLocation":"2154:13:133","nodeType":"VariableDeclaration","scope":85973,"src":"2138:29:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85966,"name":"uint256","nodeType":"ElementaryTypeName","src":"2138:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":85969,"indexed":true,"mutability":"mutable","name":"l2BlockNumber","nameLocation":"2185:13:133","nodeType":"VariableDeclaration","scope":85973,"src":"2169:29:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85968,"name":"uint256","nodeType":"ElementaryTypeName","src":"2169:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":85971,"indexed":false,"mutability":"mutable","name":"l1Timestamp","nameLocation":"2208:11:133","nodeType":"VariableDeclaration","scope":85973,"src":"2200:19:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85970,"name":"uint256","nodeType":"ElementaryTypeName","src":"2200:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2100:125:133"}},{"id":85980,"nodeType":"EventDefinition","src":"2435:94:133","nodes":[],"anonymous":false,"documentation":{"id":85974,"nodeType":"StructuredDocumentation","src":"2232:198:133","text":"@notice Emitted when outputs are deleted.\n @param prevNextOutputIndex Next L2 output index before the deletion.\n @param newNextOutputIndex Next L2 output index after the deletion."},"eventSelector":"4ee37ac2c786ec85e87592d3c5c8a1dd66f8496dda3f125d9ea8ca5f657629b6","name":"OutputsDeleted","nameLocation":"2441:14:133","parameters":{"id":85979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":85976,"indexed":true,"mutability":"mutable","name":"prevNextOutputIndex","nameLocation":"2472:19:133","nodeType":"VariableDeclaration","scope":85980,"src":"2456:35:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85975,"name":"uint256","nodeType":"ElementaryTypeName","src":"2456:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":85978,"indexed":true,"mutability":"mutable","name":"newNextOutputIndex","nameLocation":"2509:18:133","nodeType":"VariableDeclaration","scope":85980,"src":"2493:34:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85977,"name":"uint256","nodeType":"ElementaryTypeName","src":"2493:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2455:73:133"}},{"id":85984,"nodeType":"VariableDeclaration","src":"2598:40:133","nodes":[],"baseFunctions":[109416],"constant":true,"documentation":{"id":85981,"nodeType":"StructuredDocumentation","src":"2535:58:133","text":"@notice Semantic version.\n @custom:semver 1.8.0"},"functionSelector":"54fd4d50","mutability":"constant","name":"version","nameLocation":"2621:7:133","scope":86435,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":85982,"name":"string","nodeType":"ElementaryTypeName","src":"2598:6:133","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"312e382e30","id":85983,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2631:7:133","typeDescriptions":{"typeIdentifier":"t_stringliteral_cd02a4b5da981b4c403351c949b2ca4bdb2fb4b72b50891f7eb106d3eb7049e9","typeString":"literal_string \"1.8.0\""},"value":"1.8.0"},"visibility":"public"},{"id":86005,"nodeType":"FunctionDefinition","src":"2792:305:133","nodes":[],"body":{"id":86004,"nodeType":"Block","src":"2806:291:133","nodes":[],"statements":[{"expression":{"arguments":[{"hexValue":"31","id":85989,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2862:1:133","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"hexValue":"31","id":85990,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2891:1:133","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"hexValue":"30","id":85991,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2928:1:133","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":85992,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2963:1:133","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"arguments":[{"hexValue":"30","id":85995,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2997:1:133","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":85994,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2989:7:133","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":85993,"name":"address","nodeType":"ElementaryTypeName","src":"2989:7:133","typeDescriptions":{}}},"id":85996,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2989:10:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":85999,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3034:1:133","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":85998,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3026:7:133","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":85997,"name":"address","nodeType":"ElementaryTypeName","src":"3026:7:133","typeDescriptions":{}}},"id":86000,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3026:10:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":86001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3078:1:133","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":85988,"name":"initialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86076,"src":"2816:10:133","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256,uint256,address,address,uint256)"}},"id":86002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["_submissionInterval","_l2BlockTime","_startingBlockNumber","_startingTimestamp","_proposer","_challenger","_finalizationPeriodSeconds"],"nodeType":"FunctionCall","src":"2816:274:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86003,"nodeType":"ExpressionStatement","src":"2816:274:133"}]},"documentation":{"id":85985,"nodeType":"StructuredDocumentation","src":"2645:142:133","text":"@notice Constructs the L2OutputOracle contract. Initializes variables to the same values as\n in the getting-started config."},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":85986,"nodeType":"ParameterList","parameters":[],"src":"2803:2:133"},"returnParameters":{"id":85987,"nodeType":"ParameterList","parameters":[],"src":"2806:0:133"},"scope":86435,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":86076,"nodeType":"FunctionDefinition","src":"3742:985:133","nodes":[],"body":{"id":86075,"nodeType":"Block","src":"4048:679:133","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":86026,"name":"_submissionInterval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86008,"src":"4066:19:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":86027,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4088:1:133","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4066:23:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c324f75747075744f7261636c653a207375626d697373696f6e20696e74657276616c206d7573742062652067726561746572207468616e2030","id":86029,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4091:60:133","typeDescriptions":{"typeIdentifier":"t_stringliteral_a22226fa4dda9c6c644d22b26affbedef5d3fc150a8b26008a6baa26d85d543f","typeString":"literal_string \"L2OutputOracle: submission interval must be greater than 0\""},"value":"L2OutputOracle: submission interval must be greater than 0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a22226fa4dda9c6c644d22b26affbedef5d3fc150a8b26008a6baa26d85d543f","typeString":"literal_string \"L2OutputOracle: submission interval must be greater than 0\""}],"id":86025,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4058:7:133","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4058:94:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86031,"nodeType":"ExpressionStatement","src":"4058:94:133"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":86033,"name":"_l2BlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86010,"src":"4170:12:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":86034,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4185:1:133","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4170:16:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c324f75747075744f7261636c653a204c3220626c6f636b2074696d65206d7573742062652067726561746572207468616e2030","id":86036,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4188:54:133","typeDescriptions":{"typeIdentifier":"t_stringliteral_ac9ff37c1a6529ab3b67321d57550ba5021740edf6aa58a5708726b9aa5179b7","typeString":"literal_string \"L2OutputOracle: L2 block time must be greater than 0\""},"value":"L2OutputOracle: L2 block time must be greater than 0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ac9ff37c1a6529ab3b67321d57550ba5021740edf6aa58a5708726b9aa5179b7","typeString":"literal_string \"L2OutputOracle: L2 block time must be greater than 0\""}],"id":86032,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4162:7:133","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4162:81:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86038,"nodeType":"ExpressionStatement","src":"4162:81:133"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":86040,"name":"_startingTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86014,"src":"4274:18:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":86041,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4296:5:133","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":86042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"4296:15:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4274:37:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c324f75747075744f7261636c653a207374617274696e67204c322074696d657374616d70206d757374206265206c657373207468616e2063757272656e742074696d65","id":86044,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4325:70:133","typeDescriptions":{"typeIdentifier":"t_stringliteral_898fd7ed8708de35483db60bd4b962ea9e8aa9058ba6455714580e35a9e067a7","typeString":"literal_string \"L2OutputOracle: starting L2 timestamp must be less than current time\""},"value":"L2OutputOracle: starting L2 timestamp must be less than current time"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_898fd7ed8708de35483db60bd4b962ea9e8aa9058ba6455714580e35a9e067a7","typeString":"literal_string \"L2OutputOracle: starting L2 timestamp must be less than current time\""}],"id":86039,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4253:7:133","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4253:152:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86046,"nodeType":"ExpressionStatement","src":"4253:152:133"},{"expression":{"id":86049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":86047,"name":"submissionInterval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85950,"src":"4416:18:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":86048,"name":"_submissionInterval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86008,"src":"4437:19:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4416:40:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":86050,"nodeType":"ExpressionStatement","src":"4416:40:133"},{"expression":{"id":86053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":86051,"name":"l2BlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85953,"src":"4466:11:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":86052,"name":"_l2BlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86010,"src":"4480:12:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4466:26:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":86054,"nodeType":"ExpressionStatement","src":"4466:26:133"},{"expression":{"id":86057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":86055,"name":"startingBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85939,"src":"4502:19:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":86056,"name":"_startingBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86012,"src":"4524:20:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4502:42:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":86058,"nodeType":"ExpressionStatement","src":"4502:42:133"},{"expression":{"id":86061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":86059,"name":"startingTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85942,"src":"4554:17:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":86060,"name":"_startingTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86014,"src":"4574:18:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4554:38:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":86062,"nodeType":"ExpressionStatement","src":"4554:38:133"},{"expression":{"id":86065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":86063,"name":"proposer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85959,"src":"4602:8:133","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":86064,"name":"_proposer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86016,"src":"4613:9:133","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4602:20:133","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":86066,"nodeType":"ExpressionStatement","src":"4602:20:133"},{"expression":{"id":86069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":86067,"name":"challenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85956,"src":"4632:10:133","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":86068,"name":"_challenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86018,"src":"4645:11:133","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4632:24:133","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":86070,"nodeType":"ExpressionStatement","src":"4632:24:133"},{"expression":{"id":86073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":86071,"name":"finalizationPeriodSeconds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85962,"src":"4666:25:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":86072,"name":"_finalizationPeriodSeconds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86020,"src":"4694:26:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4666:54:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":86074,"nodeType":"ExpressionStatement","src":"4666:54:133"}]},"documentation":{"id":86006,"nodeType":"StructuredDocumentation","src":"3103:634:133","text":"@notice Initializer.\n @param _submissionInterval Interval in blocks at which checkpoints must be submitted.\n @param _l2BlockTime The time per L2 block, in seconds.\n @param _startingBlockNumber The number of the first L2 block.\n @param _startingTimestamp The timestamp of the first L2 block.\n @param _proposer The address of the proposer.\n @param _challenger The address of the challenger.\n @param _finalizationPeriodSeconds The minimum time (in seconds) that must elapse before a withdrawal\n can be finalized."},"functionSelector":"1c89c97d","implemented":true,"kind":"function","modifiers":[{"id":86023,"kind":"modifierInvocation","modifierName":{"id":86022,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":49598,"src":"4032:11:133"},"nodeType":"ModifierInvocation","src":"4032:11:133"}],"name":"initialize","nameLocation":"3751:10:133","parameters":{"id":86021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86008,"mutability":"mutable","name":"_submissionInterval","nameLocation":"3779:19:133","nodeType":"VariableDeclaration","scope":86076,"src":"3771:27:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86007,"name":"uint256","nodeType":"ElementaryTypeName","src":"3771:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":86010,"mutability":"mutable","name":"_l2BlockTime","nameLocation":"3816:12:133","nodeType":"VariableDeclaration","scope":86076,"src":"3808:20:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86009,"name":"uint256","nodeType":"ElementaryTypeName","src":"3808:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":86012,"mutability":"mutable","name":"_startingBlockNumber","nameLocation":"3846:20:133","nodeType":"VariableDeclaration","scope":86076,"src":"3838:28:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86011,"name":"uint256","nodeType":"ElementaryTypeName","src":"3838:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":86014,"mutability":"mutable","name":"_startingTimestamp","nameLocation":"3884:18:133","nodeType":"VariableDeclaration","scope":86076,"src":"3876:26:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86013,"name":"uint256","nodeType":"ElementaryTypeName","src":"3876:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":86016,"mutability":"mutable","name":"_proposer","nameLocation":"3920:9:133","nodeType":"VariableDeclaration","scope":86076,"src":"3912:17:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":86015,"name":"address","nodeType":"ElementaryTypeName","src":"3912:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":86018,"mutability":"mutable","name":"_challenger","nameLocation":"3947:11:133","nodeType":"VariableDeclaration","scope":86076,"src":"3939:19:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":86017,"name":"address","nodeType":"ElementaryTypeName","src":"3939:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":86020,"mutability":"mutable","name":"_finalizationPeriodSeconds","nameLocation":"3976:26:133","nodeType":"VariableDeclaration","scope":86076,"src":"3968:34:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86019,"name":"uint256","nodeType":"ElementaryTypeName","src":"3968:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3761:247:133"},"returnParameters":{"id":86024,"nodeType":"ParameterList","parameters":[],"src":"4048:0:133"},"scope":86435,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":86085,"nodeType":"FunctionDefinition","src":"4953:105:133","nodes":[],"body":{"id":86084,"nodeType":"Block","src":"5016:42:133","nodes":[],"statements":[{"expression":{"id":86082,"name":"submissionInterval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85950,"src":"5033:18:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":86081,"id":86083,"nodeType":"Return","src":"5026:25:133"}]},"documentation":{"id":86077,"nodeType":"StructuredDocumentation","src":"4733:215:133","text":"@notice Getter for the submissionInterval.\n Public getter is legacy and will be removed in the future. Use `submissionInterval` instead.\n @return Submission interval.\n @custom:legacy"},"functionSelector":"529933df","implemented":true,"kind":"function","modifiers":[],"name":"SUBMISSION_INTERVAL","nameLocation":"4962:19:133","parameters":{"id":86078,"nodeType":"ParameterList","parameters":[],"src":"4981:2:133"},"returnParameters":{"id":86081,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86080,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":86085,"src":"5007:7:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86079,"name":"uint256","nodeType":"ElementaryTypeName","src":"5007:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5006:9:133"},"scope":86435,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":86094,"nodeType":"FunctionDefinition","src":"5264:92:133","nodes":[],"body":{"id":86093,"nodeType":"Block","src":"5321:35:133","nodes":[],"statements":[{"expression":{"id":86091,"name":"l2BlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85953,"src":"5338:11:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":86090,"id":86092,"nodeType":"Return","src":"5331:18:133"}]},"documentation":{"id":86086,"nodeType":"StructuredDocumentation","src":"5064:195:133","text":"@notice Getter for the l2BlockTime.\n Public getter is legacy and will be removed in the future. Use `l2BlockTime` instead.\n @return L2 block time.\n @custom:legacy"},"functionSelector":"002134cc","implemented":true,"kind":"function","modifiers":[],"name":"L2_BLOCK_TIME","nameLocation":"5273:13:133","parameters":{"id":86087,"nodeType":"ParameterList","parameters":[],"src":"5286:2:133"},"returnParameters":{"id":86090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86089,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":86094,"src":"5312:7:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86088,"name":"uint256","nodeType":"ElementaryTypeName","src":"5312:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5311:9:133"},"scope":86435,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":86103,"nodeType":"FunctionDefinition","src":"5580:88:133","nodes":[],"body":{"id":86102,"nodeType":"Block","src":"5634:34:133","nodes":[],"statements":[{"expression":{"id":86100,"name":"challenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85956,"src":"5651:10:133","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":86099,"id":86101,"nodeType":"Return","src":"5644:17:133"}]},"documentation":{"id":86095,"nodeType":"StructuredDocumentation","src":"5362:213:133","text":"@notice Getter for the challenger address.\n Public getter is legacy and will be removed in the future. Use `challenger` instead.\n @return Address of the challenger.\n @custom:legacy"},"functionSelector":"6b4d98dd","implemented":true,"kind":"function","modifiers":[],"name":"CHALLENGER","nameLocation":"5589:10:133","parameters":{"id":86096,"nodeType":"ParameterList","parameters":[],"src":"5599:2:133"},"returnParameters":{"id":86099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86098,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":86103,"src":"5625:7:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":86097,"name":"address","nodeType":"ElementaryTypeName","src":"5625:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5624:9:133"},"scope":86435,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":86112,"nodeType":"FunctionDefinition","src":"5886:84:133","nodes":[],"body":{"id":86111,"nodeType":"Block","src":"5938:32:133","nodes":[],"statements":[{"expression":{"id":86109,"name":"proposer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85959,"src":"5955:8:133","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":86108,"id":86110,"nodeType":"Return","src":"5948:15:133"}]},"documentation":{"id":86104,"nodeType":"StructuredDocumentation","src":"5674:207:133","text":"@notice Getter for the proposer address.\n Public getter is legacy and will be removed in the future. Use `proposer` instead.\n @return Address of the proposer.\n @custom:legacy"},"functionSelector":"bffa7f0f","implemented":true,"kind":"function","modifiers":[],"name":"PROPOSER","nameLocation":"5895:8:133","parameters":{"id":86105,"nodeType":"ParameterList","parameters":[],"src":"5903:2:133"},"returnParameters":{"id":86108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86107,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":86112,"src":"5929:7:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":86106,"name":"address","nodeType":"ElementaryTypeName","src":"5929:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5928:9:133"},"scope":86435,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":86121,"nodeType":"FunctionDefinition","src":"6221:120:133","nodes":[],"body":{"id":86120,"nodeType":"Block","src":"6292:49:133","nodes":[],"statements":[{"expression":{"id":86118,"name":"finalizationPeriodSeconds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85962,"src":"6309:25:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":86117,"id":86119,"nodeType":"Return","src":"6302:32:133"}]},"documentation":{"id":86113,"nodeType":"StructuredDocumentation","src":"5976:240:133","text":"@notice Getter for the finalizationPeriodSeconds.\n Public getter is legacy and will be removed in the future. Use `finalizationPeriodSeconds` instead.\n @return Finalization period in seconds.\n @custom:legacy"},"functionSelector":"f4daa291","implemented":true,"kind":"function","modifiers":[],"name":"FINALIZATION_PERIOD_SECONDS","nameLocation":"6230:27:133","parameters":{"id":86114,"nodeType":"ParameterList","parameters":[],"src":"6257:2:133"},"returnParameters":{"id":86117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86116,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":86121,"src":"6283:7:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86115,"name":"uint256","nodeType":"ElementaryTypeName","src":"6283:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6282:9:133"},"scope":86435,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":86168,"nodeType":"FunctionDefinition","src":"6689:975:133","nodes":[],"body":{"id":86167,"nodeType":"Block","src":"6747:917:133","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":86131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":86128,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6765:3:133","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":86129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6765:10:133","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":86130,"name":"challenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85956,"src":"6779:10:133","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6765:24:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c324f75747075744f7261636c653a206f6e6c7920746865206368616c6c656e67657220616464726573732063616e2064656c657465206f757470757473","id":86132,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6791:64:133","typeDescriptions":{"typeIdentifier":"t_stringliteral_73ca084205f86e7b7b010a7bf147aa19f097b7f0a2c7768452f50d69ddf1c8a6","typeString":"literal_string \"L2OutputOracle: only the challenger address can delete outputs\""},"value":"L2OutputOracle: only the challenger address can delete outputs"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_73ca084205f86e7b7b010a7bf147aa19f097b7f0a2c7768452f50d69ddf1c8a6","typeString":"literal_string \"L2OutputOracle: only the challenger address can delete outputs\""}],"id":86127,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6757:7:133","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6757:99:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86134,"nodeType":"ExpressionStatement","src":"6757:99:133"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":86136,"name":"_l2OutputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86124,"src":"6957:14:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":86137,"name":"l2Outputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85947,"src":"6974:9:133","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutputProposal_$104307_storage_$dyn_storage","typeString":"struct Types.OutputProposal storage ref[] storage ref"}},"id":86138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"6974:16:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6957:33:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f75747075747320616674657220746865206c6174657374206f757470757420696e646578","id":86140,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6992:69:133","typeDescriptions":{"typeIdentifier":"t_stringliteral_8fade7eaadcf8920b61cd280bfaf9215de3229fd9b8bc0c114506f50c3323d08","typeString":"literal_string \"L2OutputOracle: cannot delete outputs after the latest output index\""},"value":"L2OutputOracle: cannot delete outputs after the latest output index"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8fade7eaadcf8920b61cd280bfaf9215de3229fd9b8bc0c114506f50c3323d08","typeString":"literal_string \"L2OutputOracle: cannot delete outputs after the latest output index\""}],"id":86135,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6936:7:133","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6936:135:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86142,"nodeType":"ExpressionStatement","src":"6936:135:133"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":86144,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"7182:5:133","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":86145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"7182:15:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"baseExpression":{"id":86146,"name":"l2Outputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85947,"src":"7200:9:133","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutputProposal_$104307_storage_$dyn_storage","typeString":"struct Types.OutputProposal storage ref[] storage ref"}},"id":86148,"indexExpression":{"id":86147,"name":"_l2OutputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86124,"src":"7210:14:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7200:25:133","typeDescriptions":{"typeIdentifier":"t_struct$_OutputProposal_$104307_storage","typeString":"struct Types.OutputProposal storage ref"}},"id":86149,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":104304,"src":"7200:35:133","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7182:53:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":86151,"name":"finalizationPeriodSeconds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85962,"src":"7238:25:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7182:81:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7574707574732074686174206861766520616c7265616479206265656e2066696e616c697a6564","id":86153,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7277:72:133","typeDescriptions":{"typeIdentifier":"t_stringliteral_d750945a6d3cdf9f7770d0a5d95aa9b56f37a0ad47759ca246a1b772fdac6c07","typeString":"literal_string \"L2OutputOracle: cannot delete outputs that have already been finalized\""},"value":"L2OutputOracle: cannot delete outputs that have already been finalized"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d750945a6d3cdf9f7770d0a5d95aa9b56f37a0ad47759ca246a1b772fdac6c07","typeString":"literal_string \"L2OutputOracle: cannot delete outputs that have already been finalized\""}],"id":86143,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7161:7:133","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7161:198:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86155,"nodeType":"ExpressionStatement","src":"7161:198:133"},{"assignments":[86157],"declarations":[{"constant":false,"id":86157,"mutability":"mutable","name":"prevNextL2OutputIndex","nameLocation":"7378:21:133","nodeType":"VariableDeclaration","scope":86167,"src":"7370:29:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86156,"name":"uint256","nodeType":"ElementaryTypeName","src":"7370:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":86160,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":86158,"name":"nextOutputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86382,"src":"7402:15:133","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":86159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7402:17:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7370:49:133"},{"AST":{"nodeType":"YulBlock","src":"7527:62:133","statements":[{"expression":{"arguments":[{"name":"l2Outputs.slot","nodeType":"YulIdentifier","src":"7548:14:133"},{"name":"_l2OutputIndex","nodeType":"YulIdentifier","src":"7564:14:133"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"7541:6:133"},"nodeType":"YulFunctionCall","src":"7541:38:133"},"nodeType":"YulExpressionStatement","src":"7541:38:133"}]},"evmVersion":"london","externalReferences":[{"declaration":86124,"isOffset":false,"isSlot":false,"src":"7564:14:133","valueSize":1},{"declaration":85947,"isOffset":false,"isSlot":true,"src":"7548:14:133","suffix":"slot","valueSize":1}],"id":86161,"nodeType":"InlineAssembly","src":"7518:71:133"},{"eventCall":{"arguments":[{"id":86163,"name":"prevNextL2OutputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86157,"src":"7619:21:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":86164,"name":"_l2OutputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86124,"src":"7642:14:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":86162,"name":"OutputsDeleted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85980,"src":"7604:14:133","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":86165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7604:53:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86166,"nodeType":"EmitStatement","src":"7599:58:133"}]},"documentation":{"id":86122,"nodeType":"StructuredDocumentation","src":"6347:337:133","text":"@notice Deletes all output proposals after and including the proposal that corresponds to\n the given output index. Only the challenger address can delete outputs.\n @param _l2OutputIndex Index of the first L2 output to be deleted.\n All outputs after this output will also be deleted."},"functionSelector":"89c44cbb","implemented":true,"kind":"function","modifiers":[],"name":"deleteL2Outputs","nameLocation":"6698:15:133","parameters":{"id":86125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86124,"mutability":"mutable","name":"_l2OutputIndex","nameLocation":"6722:14:133","nodeType":"VariableDeclaration","scope":86168,"src":"6714:22:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86123,"name":"uint256","nodeType":"ElementaryTypeName","src":"6714:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6713:24:133"},"returnParameters":{"id":86126,"nodeType":"ParameterList","parameters":[],"src":"6747:0:133"},"scope":86435,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":86261,"nodeType":"FunctionDefinition","src":"8258:1981:133","nodes":[],"body":{"id":86260,"nodeType":"Block","src":"8449:1790:133","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":86184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":86181,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8467:3:133","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":86182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"8467:10:133","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":86183,"name":"proposer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85959,"src":"8481:8:133","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8467:22:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c324f75747075744f7261636c653a206f6e6c79207468652070726f706f73657220616464726573732063616e2070726f706f7365206e6577206f757470757473","id":86185,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8491:67:133","typeDescriptions":{"typeIdentifier":"t_stringliteral_9f1c67e2dc62ce3502755d353f72e304832f39c730ef77e02614e374f1fb53d3","typeString":"literal_string \"L2OutputOracle: only the proposer address can propose new outputs\""},"value":"L2OutputOracle: only the proposer address can propose new outputs"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9f1c67e2dc62ce3502755d353f72e304832f39c730ef77e02614e374f1fb53d3","typeString":"literal_string \"L2OutputOracle: only the proposer address can propose new outputs\""}],"id":86180,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8459:7:133","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8459:100:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86187,"nodeType":"ExpressionStatement","src":"8459:100:133"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":86189,"name":"_l2BlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86173,"src":"8591:14:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":86190,"name":"nextBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86415,"src":"8609:15:133","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":86191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8609:17:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8591:35:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c324f75747075744f7261636c653a20626c6f636b206e756d626572206d75737420626520657175616c20746f206e65787420657870656374656420626c6f636b206e756d626572","id":86193,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8640:74:133","typeDescriptions":{"typeIdentifier":"t_stringliteral_06e1bf88480451e9a05edd933fbefd888745eeb4cd60fea580144d9699d6c8c6","typeString":"literal_string \"L2OutputOracle: block number must be equal to next expected block number\""},"value":"L2OutputOracle: block number must be equal to next expected block number"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_06e1bf88480451e9a05edd933fbefd888745eeb4cd60fea580144d9699d6c8c6","typeString":"literal_string \"L2OutputOracle: block number must be equal to next expected block number\""}],"id":86188,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8570:7:133","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8570:154:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86195,"nodeType":"ExpressionStatement","src":"8570:154:133"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":86198,"name":"_l2BlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86173,"src":"8775:14:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":86197,"name":"computeL2Timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86434,"src":"8756:18:133","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":86199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8756:34:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":86200,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"8793:5:133","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":86201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"8793:15:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8756:52:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c324f75747075744f7261636c653a2063616e6e6f742070726f706f7365204c32206f757470757420696e2074686520667574757265","id":86203,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8822:56:133","typeDescriptions":{"typeIdentifier":"t_stringliteral_398aa710210a226bac70935aec326d363ca55bd0968a10f188845909ad22cbc6","typeString":"literal_string \"L2OutputOracle: cannot propose L2 output in the future\""},"value":"L2OutputOracle: cannot propose L2 output in the future"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_398aa710210a226bac70935aec326d363ca55bd0968a10f188845909ad22cbc6","typeString":"literal_string \"L2OutputOracle: cannot propose L2 output in the future\""}],"id":86196,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8735:7:133","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8735:153:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86205,"nodeType":"ExpressionStatement","src":"8735:153:133"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":86212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":86207,"name":"_outputRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86171,"src":"8907:11:133","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":86210,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8930:1:133","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":86209,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8922:7:133","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":86208,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8922:7:133","typeDescriptions":{}}},"id":86211,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8922:10:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"8907:25:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c324f75747075744f7261636c653a204c32206f75747075742070726f706f73616c2063616e6e6f7420626520746865207a65726f2068617368","id":86213,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8934:60:133","typeDescriptions":{"typeIdentifier":"t_stringliteral_bd49586dceb93dcaff5457c4b7f965cdcdd796092fef31828e5d2ee522ee1ffa","typeString":"literal_string \"L2OutputOracle: L2 output proposal cannot be the zero hash\""},"value":"L2OutputOracle: L2 output proposal cannot be the zero hash"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bd49586dceb93dcaff5457c4b7f965cdcdd796092fef31828e5d2ee522ee1ffa","typeString":"literal_string \"L2OutputOracle: L2 output proposal cannot be the zero hash\""}],"id":86206,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8899:7:133","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8899:96:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86215,"nodeType":"ExpressionStatement","src":"8899:96:133"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":86221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":86216,"name":"_l1BlockHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86175,"src":"9010:12:133","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":86219,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9034:1:133","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":86218,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9026:7:133","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":86217,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9026:7:133","typeDescriptions":{}}},"id":86220,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9026:10:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"9010:26:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":86232,"nodeType":"IfStatement","src":"9006:897:133","trueBody":{"id":86231,"nodeType":"Block","src":"9038:865:133","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":86227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":86224,"name":"_l1BlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86177,"src":"9754:14:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":86223,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"9744:9:133","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":86225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9744:25:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":86226,"name":"_l1BlockHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86175,"src":"9773:12:133","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"9744:41:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c324f75747075744f7261636c653a20626c6f636b206861736820646f6573206e6f74206d617463682074686520686173682061742074686520657870656374656420686569676874","id":86228,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9803:75:133","typeDescriptions":{"typeIdentifier":"t_stringliteral_126a709d462b085b243904a4250a7244b58590dd3a6ba08b7c943ca19e9fb452","typeString":"literal_string \"L2OutputOracle: block hash does not match the hash at the expected height\""},"value":"L2OutputOracle: block hash does not match the hash at the expected height"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_126a709d462b085b243904a4250a7244b58590dd3a6ba08b7c943ca19e9fb452","typeString":"literal_string \"L2OutputOracle: block hash does not match the hash at the expected height\""}],"id":86222,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9719:7:133","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9719:173:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86230,"nodeType":"ExpressionStatement","src":"9719:173:133"}]}},{"eventCall":{"arguments":[{"id":86234,"name":"_outputRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86171,"src":"9933:11:133","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"id":86235,"name":"nextOutputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86382,"src":"9946:15:133","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":86236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9946:17:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":86237,"name":"_l2BlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86173,"src":"9965:14:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":86238,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"9981:5:133","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":86239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"9981:15:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":86233,"name":"OutputProposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85973,"src":"9918:14:133","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (bytes32,uint256,uint256,uint256)"}},"id":86240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9918:79:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86241,"nodeType":"EmitStatement","src":"9913:84:133"},{"expression":{"arguments":[{"arguments":[{"id":86247,"name":"_outputRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86171,"src":"10087:11:133","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"expression":{"id":86250,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"10135:5:133","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":86251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"10135:15:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":86249,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10127:7:133","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":86248,"name":"uint128","nodeType":"ElementaryTypeName","src":"10127:7:133","typeDescriptions":{}}},"id":86252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10127:24:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"arguments":[{"id":86255,"name":"_l2BlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86173,"src":"10192:14:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":86254,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10184:7:133","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":86253,"name":"uint128","nodeType":"ElementaryTypeName","src":"10184:7:133","typeDescriptions":{}}},"id":86256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10184:23:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":86245,"name":"Types","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104349,"src":"10036:5:133","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Types_$104349_$","typeString":"type(library Types)"}},"id":86246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OutputProposal","nodeType":"MemberAccess","referencedDeclaration":104307,"src":"10036:20:133","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_OutputProposal_$104307_storage_ptr_$","typeString":"type(struct Types.OutputProposal storage pointer)"}},"id":86257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["outputRoot","timestamp","l2BlockNumber"],"nodeType":"FunctionCall","src":"10036:186:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_OutputProposal_$104307_memory_ptr","typeString":"struct Types.OutputProposal memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_OutputProposal_$104307_memory_ptr","typeString":"struct Types.OutputProposal memory"}],"expression":{"id":86242,"name":"l2Outputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85947,"src":"10008:9:133","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutputProposal_$104307_storage_$dyn_storage","typeString":"struct Types.OutputProposal storage ref[] storage ref"}},"id":86244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"push","nodeType":"MemberAccess","src":"10008:14:133","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_struct$_OutputProposal_$104307_storage_$dyn_storage_ptr_$_t_struct$_OutputProposal_$104307_storage_$returns$__$bound_to$_t_array$_t_struct$_OutputProposal_$104307_storage_$dyn_storage_ptr_$","typeString":"function (struct Types.OutputProposal storage ref[] storage pointer,struct Types.OutputProposal storage ref)"}},"id":86258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10008:224:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86259,"nodeType":"ExpressionStatement","src":"10008:224:133"}]},"documentation":{"id":86169,"nodeType":"StructuredDocumentation","src":"7670:583:133","text":"@notice Accepts an outputRoot and the timestamp of the corresponding L2 block.\n The timestamp must be equal to the current value returned by `nextTimestamp()` in\n order to be accepted. This function may only be called by the Proposer.\n @param _outputRoot The L2 output of the checkpoint block.\n @param _l2BlockNumber The L2 block number that resulted in _outputRoot.\n @param _l1BlockHash A block hash which must be included in the current chain.\n @param _l1BlockNumber The block number with the specified block hash."},"functionSelector":"9aaab648","implemented":true,"kind":"function","modifiers":[],"name":"proposeL2Output","nameLocation":"8267:15:133","parameters":{"id":86178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86171,"mutability":"mutable","name":"_outputRoot","nameLocation":"8300:11:133","nodeType":"VariableDeclaration","scope":86261,"src":"8292:19:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":86170,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8292:7:133","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":86173,"mutability":"mutable","name":"_l2BlockNumber","nameLocation":"8329:14:133","nodeType":"VariableDeclaration","scope":86261,"src":"8321:22:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86172,"name":"uint256","nodeType":"ElementaryTypeName","src":"8321:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":86175,"mutability":"mutable","name":"_l1BlockHash","nameLocation":"8361:12:133","nodeType":"VariableDeclaration","scope":86261,"src":"8353:20:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":86174,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8353:7:133","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":86177,"mutability":"mutable","name":"_l1BlockNumber","nameLocation":"8391:14:133","nodeType":"VariableDeclaration","scope":86261,"src":"8383:22:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86176,"name":"uint256","nodeType":"ElementaryTypeName","src":"8383:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8282:129:133"},"returnParameters":{"id":86179,"nodeType":"ParameterList","parameters":[],"src":"8449:0:133"},"scope":86435,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":86275,"nodeType":"FunctionDefinition","src":"10443:146:133","nodes":[],"body":{"id":86274,"nodeType":"Block","src":"10540:49:133","nodes":[],"statements":[{"expression":{"baseExpression":{"id":86270,"name":"l2Outputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85947,"src":"10557:9:133","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutputProposal_$104307_storage_$dyn_storage","typeString":"struct Types.OutputProposal storage ref[] storage ref"}},"id":86272,"indexExpression":{"id":86271,"name":"_l2OutputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86264,"src":"10567:14:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10557:25:133","typeDescriptions":{"typeIdentifier":"t_struct$_OutputProposal_$104307_storage","typeString":"struct Types.OutputProposal storage ref"}},"functionReturnParameters":86269,"id":86273,"nodeType":"Return","src":"10550:32:133"}]},"documentation":{"id":86262,"nodeType":"StructuredDocumentation","src":"10245:193:133","text":"@notice Returns an output by index. Needed to return a struct instead of a tuple.\n @param _l2OutputIndex Index of the output to return.\n @return The output at the given index."},"functionSelector":"a25ae557","implemented":true,"kind":"function","modifiers":[],"name":"getL2Output","nameLocation":"10452:11:133","parameters":{"id":86265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86264,"mutability":"mutable","name":"_l2OutputIndex","nameLocation":"10472:14:133","nodeType":"VariableDeclaration","scope":86275,"src":"10464:22:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86263,"name":"uint256","nodeType":"ElementaryTypeName","src":"10464:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10463:24:133"},"returnParameters":{"id":86269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86268,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":86275,"src":"10511:27:133","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_OutputProposal_$104307_memory_ptr","typeString":"struct Types.OutputProposal"},"typeName":{"id":86267,"nodeType":"UserDefinedTypeName","pathNode":{"id":86266,"name":"Types.OutputProposal","nodeType":"IdentifierPath","referencedDeclaration":104307,"src":"10511:20:133"},"referencedDeclaration":104307,"src":"10511:20:133","typeDescriptions":{"typeIdentifier":"t_struct$_OutputProposal_$104307_storage_ptr","typeString":"struct Types.OutputProposal"}},"visibility":"internal"}],"src":"10510:29:133"},"scope":86435,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":86344,"nodeType":"FunctionDefinition","src":"10969:896:133","nodes":[],"body":{"id":86343,"nodeType":"Block","src":"11054:811:133","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":86284,"name":"_l2BlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86278,"src":"11166:14:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":86285,"name":"latestBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86403,"src":"11184:17:133","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":86286,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11184:19:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11166:37:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c324f75747075744f7261636c653a2063616e6e6f7420676574206f757470757420666f72206120626c6f636b207468617420686173206e6f74206265656e2070726f706f736564","id":86288,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11217:74:133","typeDescriptions":{"typeIdentifier":"t_stringliteral_e20eea09cda66a0de8aaee9225052cff8973e85b47dc903dda82ca1d2f5e4f1e","typeString":"literal_string \"L2OutputOracle: cannot get output for a block that has not been proposed\""},"value":"L2OutputOracle: cannot get output for a block that has not been proposed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e20eea09cda66a0de8aaee9225052cff8973e85b47dc903dda82ca1d2f5e4f1e","typeString":"literal_string \"L2OutputOracle: cannot get output for a block that has not been proposed\""}],"id":86283,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11145:7:133","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11145:156:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86290,"nodeType":"ExpressionStatement","src":"11145:156:133"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":86292,"name":"l2Outputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85947,"src":"11379:9:133","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutputProposal_$104307_storage_$dyn_storage","typeString":"struct Types.OutputProposal storage ref[] storage ref"}},"id":86293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"11379:16:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":86294,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11398:1:133","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11379:20:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707574206173206e6f206f7574707574732068617665206265656e2070726f706f73656420796574","id":86296,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11401:72:133","typeDescriptions":{"typeIdentifier":"t_stringliteral_80c3451a3ec9750ebb6fb31ae69a5869a904e947867f132ba63cfb294c03b73e","typeString":"literal_string \"L2OutputOracle: cannot get output as no outputs have been proposed yet\""},"value":"L2OutputOracle: cannot get output as no outputs have been proposed yet"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_80c3451a3ec9750ebb6fb31ae69a5869a904e947867f132ba63cfb294c03b73e","typeString":"literal_string \"L2OutputOracle: cannot get output as no outputs have been proposed yet\""}],"id":86291,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11371:7:133","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11371:103:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86298,"nodeType":"ExpressionStatement","src":"11371:103:133"},{"assignments":[86300],"declarations":[{"constant":false,"id":86300,"mutability":"mutable","name":"lo","nameLocation":"11560:2:133","nodeType":"VariableDeclaration","scope":86343,"src":"11552:10:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86299,"name":"uint256","nodeType":"ElementaryTypeName","src":"11552:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":86302,"initialValue":{"hexValue":"30","id":86301,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11565:1:133","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11552:14:133"},{"assignments":[86304],"declarations":[{"constant":false,"id":86304,"mutability":"mutable","name":"hi","nameLocation":"11584:2:133","nodeType":"VariableDeclaration","scope":86343,"src":"11576:10:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86303,"name":"uint256","nodeType":"ElementaryTypeName","src":"11576:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":86307,"initialValue":{"expression":{"id":86305,"name":"l2Outputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85947,"src":"11589:9:133","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutputProposal_$104307_storage_$dyn_storage","typeString":"struct Types.OutputProposal storage ref[] storage ref"}},"id":86306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"11589:16:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11576:29:133"},{"body":{"id":86339,"nodeType":"Block","src":"11631:208:133","statements":[{"assignments":[86312],"declarations":[{"constant":false,"id":86312,"mutability":"mutable","name":"mid","nameLocation":"11653:3:133","nodeType":"VariableDeclaration","scope":86339,"src":"11645:11:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86311,"name":"uint256","nodeType":"ElementaryTypeName","src":"11645:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":86319,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":86313,"name":"lo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86300,"src":"11660:2:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":86314,"name":"hi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86304,"src":"11665:2:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11660:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":86316,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11659:9:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":86317,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11671:1:133","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"11659:13:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11645:27:133"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":86320,"name":"l2Outputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85947,"src":"11690:9:133","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutputProposal_$104307_storage_$dyn_storage","typeString":"struct Types.OutputProposal storage ref[] storage ref"}},"id":86322,"indexExpression":{"id":86321,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86312,"src":"11700:3:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11690:14:133","typeDescriptions":{"typeIdentifier":"t_struct$_OutputProposal_$104307_storage","typeString":"struct Types.OutputProposal storage ref"}},"id":86323,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"l2BlockNumber","nodeType":"MemberAccess","referencedDeclaration":104306,"src":"11690:28:133","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":86324,"name":"_l2BlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86278,"src":"11721:14:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11690:45:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":86337,"nodeType":"Block","src":"11788:41:133","statements":[{"expression":{"id":86335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":86333,"name":"hi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86304,"src":"11806:2:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":86334,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86312,"src":"11811:3:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11806:8:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":86336,"nodeType":"ExpressionStatement","src":"11806:8:133"}]},"id":86338,"nodeType":"IfStatement","src":"11686:143:133","trueBody":{"id":86332,"nodeType":"Block","src":"11737:45:133","statements":[{"expression":{"id":86330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":86326,"name":"lo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86300,"src":"11755:2:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":86327,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86312,"src":"11760:3:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":86328,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11766:1:133","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"11760:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11755:12:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":86331,"nodeType":"ExpressionStatement","src":"11755:12:133"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":86308,"name":"lo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86300,"src":"11622:2:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":86309,"name":"hi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86304,"src":"11627:2:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11622:7:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":86340,"nodeType":"WhileStatement","src":"11615:224:133"},{"expression":{"id":86341,"name":"lo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86300,"src":"11856:2:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":86282,"id":86342,"nodeType":"Return","src":"11849:9:133"}]},"documentation":{"id":86276,"nodeType":"StructuredDocumentation","src":"10595:369:133","text":"@notice Returns the index of the L2 output that checkpoints a given L2 block number.\n Uses a binary search to find the first output greater than or equal to the given\n block.\n @param _l2BlockNumber L2 block number to find a checkpoint for.\n @return Index of the first checkpoint that commits to the given L2 block number."},"functionSelector":"7f006420","implemented":true,"kind":"function","modifiers":[],"name":"getL2OutputIndexAfter","nameLocation":"10978:21:133","parameters":{"id":86279,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86278,"mutability":"mutable","name":"_l2BlockNumber","nameLocation":"11008:14:133","nodeType":"VariableDeclaration","scope":86344,"src":"11000:22:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86277,"name":"uint256","nodeType":"ElementaryTypeName","src":"11000:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10999:24:133"},"returnParameters":{"id":86282,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86281,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":86344,"src":"11045:7:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86280,"name":"uint256","nodeType":"ElementaryTypeName","src":"11045:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11044:9:133"},"scope":86435,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":86360,"nodeType":"FunctionDefinition","src":"12228:174:133","nodes":[],"body":{"id":86359,"nodeType":"Block","src":"12330:72:133","nodes":[],"statements":[{"expression":{"baseExpression":{"id":86353,"name":"l2Outputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85947,"src":"12347:9:133","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutputProposal_$104307_storage_$dyn_storage","typeString":"struct Types.OutputProposal storage ref[] storage ref"}},"id":86357,"indexExpression":{"arguments":[{"id":86355,"name":"_l2BlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86347,"src":"12379:14:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":86354,"name":"getL2OutputIndexAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86344,"src":"12357:21:133","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":86356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12357:37:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12347:48:133","typeDescriptions":{"typeIdentifier":"t_struct$_OutputProposal_$104307_storage","typeString":"struct Types.OutputProposal storage ref"}},"functionReturnParameters":86352,"id":86358,"nodeType":"Return","src":"12340:55:133"}]},"documentation":{"id":86345,"nodeType":"StructuredDocumentation","src":"11871:352:133","text":"@notice Returns the L2 output proposal that checkpoints a given L2 block number.\n Uses a binary search to find the first output greater than or equal to the given\n block.\n @param _l2BlockNumber L2 block number to find a checkpoint for.\n @return First checkpoint that commits to the given L2 block number."},"functionSelector":"cf8e5cf0","implemented":true,"kind":"function","modifiers":[],"name":"getL2OutputAfter","nameLocation":"12237:16:133","parameters":{"id":86348,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86347,"mutability":"mutable","name":"_l2BlockNumber","nameLocation":"12262:14:133","nodeType":"VariableDeclaration","scope":86360,"src":"12254:22:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86346,"name":"uint256","nodeType":"ElementaryTypeName","src":"12254:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12253:24:133"},"returnParameters":{"id":86352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86351,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":86360,"src":"12301:27:133","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_OutputProposal_$104307_memory_ptr","typeString":"struct Types.OutputProposal"},"typeName":{"id":86350,"nodeType":"UserDefinedTypeName","pathNode":{"id":86349,"name":"Types.OutputProposal","nodeType":"IdentifierPath","referencedDeclaration":104307,"src":"12301:20:133"},"referencedDeclaration":104307,"src":"12301:20:133","typeDescriptions":{"typeIdentifier":"t_struct$_OutputProposal_$104307_storage_ptr","typeString":"struct Types.OutputProposal"}},"visibility":"internal"}],"src":"12300:29:133"},"scope":86435,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":86372,"nodeType":"FunctionDefinition","src":"12608:105:133","nodes":[],"body":{"id":86371,"nodeType":"Block","src":"12669:44:133","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":86366,"name":"l2Outputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85947,"src":"12686:9:133","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutputProposal_$104307_storage_$dyn_storage","typeString":"struct Types.OutputProposal storage ref[] storage ref"}},"id":86367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"12686:16:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":86368,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12705:1:133","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12686:20:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":86365,"id":86370,"nodeType":"Return","src":"12679:27:133"}]},"documentation":{"id":86361,"nodeType":"StructuredDocumentation","src":"12408:195:133","text":"@notice Returns the number of outputs that have been proposed.\n Will revert if no outputs have been proposed yet.\n @return The number of outputs that have been proposed."},"functionSelector":"69f16eec","implemented":true,"kind":"function","modifiers":[],"name":"latestOutputIndex","nameLocation":"12617:17:133","parameters":{"id":86362,"nodeType":"ParameterList","parameters":[],"src":"12634:2:133"},"returnParameters":{"id":86365,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86364,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":86372,"src":"12660:7:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86363,"name":"uint256","nodeType":"ElementaryTypeName","src":"12660:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12659:9:133"},"scope":86435,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":86382,"nodeType":"FunctionDefinition","src":"12849:97:133","nodes":[],"body":{"id":86381,"nodeType":"Block","src":"12906:40:133","nodes":[],"statements":[{"expression":{"expression":{"id":86378,"name":"l2Outputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85947,"src":"12923:9:133","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutputProposal_$104307_storage_$dyn_storage","typeString":"struct Types.OutputProposal storage ref[] storage ref"}},"id":86379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"12923:16:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":86377,"id":86380,"nodeType":"Return","src":"12916:23:133"}]},"documentation":{"id":86373,"nodeType":"StructuredDocumentation","src":"12719:125:133","text":"@notice Returns the index of the next output to be proposed.\n @return The index of the next output to be proposed."},"functionSelector":"6abcf563","implemented":true,"kind":"function","modifiers":[],"name":"nextOutputIndex","nameLocation":"12858:15:133","parameters":{"id":86374,"nodeType":"ParameterList","parameters":[],"src":"12873:2:133"},"returnParameters":{"id":86377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86376,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":86382,"src":"12897:7:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86375,"name":"uint256","nodeType":"ElementaryTypeName","src":"12897:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12896:9:133"},"scope":86435,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":86403,"nodeType":"FunctionDefinition","src":"13212:174:133","nodes":[],"body":{"id":86402,"nodeType":"Block","src":"13271:115:133","nodes":[],"statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":86388,"name":"l2Outputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85947,"src":"13288:9:133","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutputProposal_$104307_storage_$dyn_storage","typeString":"struct Types.OutputProposal storage ref[] storage ref"}},"id":86389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"13288:16:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":86390,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13308:1:133","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13288:21:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"baseExpression":{"id":86393,"name":"l2Outputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85947,"src":"13334:9:133","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutputProposal_$104307_storage_$dyn_storage","typeString":"struct Types.OutputProposal storage ref[] storage ref"}},"id":86398,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":86394,"name":"l2Outputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85947,"src":"13344:9:133","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutputProposal_$104307_storage_$dyn_storage","typeString":"struct Types.OutputProposal storage ref[] storage ref"}},"id":86395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"13344:16:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":86396,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13363:1:133","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"13344:20:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13334:31:133","typeDescriptions":{"typeIdentifier":"t_struct$_OutputProposal_$104307_storage","typeString":"struct Types.OutputProposal storage ref"}},"id":86399,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"l2BlockNumber","nodeType":"MemberAccess","referencedDeclaration":104306,"src":"13334:45:133","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":86400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"13288:91:133","trueExpression":{"id":86392,"name":"startingBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85939,"src":"13312:19:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":86387,"id":86401,"nodeType":"Return","src":"13281:98:133"}]},"documentation":{"id":86383,"nodeType":"StructuredDocumentation","src":"12952:255:133","text":"@notice Returns the block number of the latest submitted L2 output proposal.\n If no proposals been submitted yet then this function will return the starting\n block number.\n @return Latest submitted L2 block number."},"functionSelector":"4599c788","implemented":true,"kind":"function","modifiers":[],"name":"latestBlockNumber","nameLocation":"13221:17:133","parameters":{"id":86384,"nodeType":"ParameterList","parameters":[],"src":"13238:2:133"},"returnParameters":{"id":86387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86386,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":86403,"src":"13262:7:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86385,"name":"uint256","nodeType":"ElementaryTypeName","src":"13262:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13261:9:133"},"scope":86435,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":86415,"nodeType":"FunctionDefinition","src":"13524:121:133","nodes":[],"body":{"id":86414,"nodeType":"Block","src":"13581:64:133","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":86409,"name":"latestBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86403,"src":"13598:17:133","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":86410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13598:19:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":86411,"name":"submissionInterval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85950,"src":"13620:18:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13598:40:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":86408,"id":86413,"nodeType":"Return","src":"13591:47:133"}]},"documentation":{"id":86404,"nodeType":"StructuredDocumentation","src":"13392:127:133","text":"@notice Computes the block number of the next L2 block that needs to be checkpointed.\n @return Next L2 block number."},"functionSelector":"dcec3348","implemented":true,"kind":"function","modifiers":[],"name":"nextBlockNumber","nameLocation":"13533:15:133","parameters":{"id":86405,"nodeType":"ParameterList","parameters":[],"src":"13548:2:133"},"returnParameters":{"id":86408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86407,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":86415,"src":"13572:7:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86406,"name":"uint256","nodeType":"ElementaryTypeName","src":"13572:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13571:9:133"},"scope":86435,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":86434,"nodeType":"FunctionDefinition","src":"13854:180:133","nodes":[],"body":{"id":86433,"nodeType":"Block","src":"13936:98:133","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":86423,"name":"startingTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85942,"src":"13953:17:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":86424,"name":"_l2BlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86418,"src":"13975:14:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":86425,"name":"startingBlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85939,"src":"13992:19:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13975:36:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":86427,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13974:38:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":86428,"name":"l2BlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":85953,"src":"14015:11:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13974:52:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":86430,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13973:54:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13953:74:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":86422,"id":86432,"nodeType":"Return","src":"13946:81:133"}]},"documentation":{"id":86416,"nodeType":"StructuredDocumentation","src":"13651:198:133","text":"@notice Returns the L2 timestamp corresponding to a given L2 block number.\n @param _l2BlockNumber The L2 block number of the target block.\n @return L2 timestamp of the given block."},"functionSelector":"d1de856c","implemented":true,"kind":"function","modifiers":[],"name":"computeL2Timestamp","nameLocation":"13863:18:133","parameters":{"id":86419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86418,"mutability":"mutable","name":"_l2BlockNumber","nameLocation":"13890:14:133","nodeType":"VariableDeclaration","scope":86434,"src":"13882:22:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86417,"name":"uint256","nodeType":"ElementaryTypeName","src":"13882:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13881:24:133"},"returnParameters":{"id":86422,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86421,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":86434,"src":"13927:7:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86420,"name":"uint256","nodeType":"ElementaryTypeName","src":"13927:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13926:9:133"},"scope":86435,"stateMutability":"view","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":85933,"name":"Initializable","nodeType":"IdentifierPath","referencedDeclaration":49678,"src":"638:13:133"},"id":85934,"nodeType":"InheritanceSpecifier","src":"638:13:133"},{"baseName":{"id":85935,"name":"ISemver","nodeType":"IdentifierPath","referencedDeclaration":109417,"src":"653:7:133"},"id":85936,"nodeType":"InheritanceSpecifier","src":"653:7:133"}],"canonicalName":"L2OutputOracle","contractDependencies":[],"contractKind":"contract","documentation":{"id":85932,"nodeType":"StructuredDocumentation","src":"304:307:133","text":"@custom:proxied\n @title L2OutputOracle\n @notice The L2OutputOracle contains an array of L2 state outputs, where each output is a\n commitment to the state of the L2 chain. Other contracts like the OptimismPortal use\n these outputs to verify information about the state of L2."},"fullyImplemented":true,"linearizedBaseContracts":[86435,109417,49678],"name":"L2OutputOracle","nameLocation":"620:14:133","scope":86436,"usedErrors":[]}],"license":"MIT"},"id":133} \ No newline at end of file diff --git a/packages/sdk/src/forge-artifacts/L2StandardBridge.json b/packages/sdk/src/forge-artifacts/L2StandardBridge.json deleted file mode 100644 index 3e707fe88b52..000000000000 --- a/packages/sdk/src/forge-artifacts/L2StandardBridge.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"MESSENGER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract CrossDomainMessenger"}],"stateMutability":"view"},{"type":"function","name":"OTHER_BRIDGE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract StandardBridge"}],"stateMutability":"view"},{"type":"function","name":"bridgeERC20","inputs":[{"name":"_localToken","type":"address","internalType":"address"},{"name":"_remoteToken","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"},{"name":"_minGasLimit","type":"uint32","internalType":"uint32"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"bridgeERC20To","inputs":[{"name":"_localToken","type":"address","internalType":"address"},{"name":"_remoteToken","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"},{"name":"_minGasLimit","type":"uint32","internalType":"uint32"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"bridgeETH","inputs":[{"name":"_minGasLimit","type":"uint32","internalType":"uint32"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"bridgeETHTo","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_minGasLimit","type":"uint32","internalType":"uint32"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"deposits","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"finalizeBridgeERC20","inputs":[{"name":"_localToken","type":"address","internalType":"address"},{"name":"_remoteToken","type":"address","internalType":"address"},{"name":"_from","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"finalizeBridgeETH","inputs":[{"name":"_from","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"finalizeDeposit","inputs":[{"name":"_l1Token","type":"address","internalType":"address"},{"name":"_l2Token","type":"address","internalType":"address"},{"name":"_from","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"initialize","inputs":[{"name":"_otherBridge","type":"address","internalType":"contract StandardBridge"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"l1TokenBridge","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"messenger","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract CrossDomainMessenger"}],"stateMutability":"view"},{"type":"function","name":"otherBridge","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract StandardBridge"}],"stateMutability":"view"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"withdraw","inputs":[{"name":"_l2Token","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"},{"name":"_minGasLimit","type":"uint32","internalType":"uint32"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"withdrawTo","inputs":[{"name":"_l2Token","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"},{"name":"_minGasLimit","type":"uint32","internalType":"uint32"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"event","name":"DepositFinalized","inputs":[{"name":"l1Token","type":"address","indexed":true,"internalType":"address"},{"name":"l2Token","type":"address","indexed":true,"internalType":"address"},{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"extraData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ERC20BridgeFinalized","inputs":[{"name":"localToken","type":"address","indexed":true,"internalType":"address"},{"name":"remoteToken","type":"address","indexed":true,"internalType":"address"},{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"extraData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ERC20BridgeInitiated","inputs":[{"name":"localToken","type":"address","indexed":true,"internalType":"address"},{"name":"remoteToken","type":"address","indexed":true,"internalType":"address"},{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"extraData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ETHBridgeFinalized","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"extraData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ETHBridgeInitiated","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"extraData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"WithdrawalInitiated","inputs":[{"name":"l1Token","type":"address","indexed":true,"internalType":"address"},{"name":"l2Token","type":"address","indexed":true,"internalType":"address"},{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"extraData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60806040523480156200001157600080fd5b506200001e600062000024565b62000217565b600054610100900460ff1615808015620000455750600054600160ff909116105b8062000075575062000062306200016d60201b620004811760201c565b15801562000075575060005460ff166001145b620000de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000102576000805461ff0019166101001790555b62000122734200000000000000000000000000000000000007836200017c565b801562000169576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620001e95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d5565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612a8380620002276000396000f3fe60806040526004361061012d5760003560e01c8063662a633a116100a5578063927ede2d11610074578063c4d66de811610059578063c4d66de814610421578063c89701a214610441578063e11013dd1461046e57600080fd5b8063927ede2d146103e3578063a3a795481461040e57600080fd5b8063662a633a1461036a5780637f46ddb21461025a578063870876231461037d5780638f601f661461039d57600080fd5b806336c717c1116100fc578063540abf73116100e1578063540abf73146102d857806354fd4d50146102f85780635c975abb1461034e57600080fd5b806336c717c11461025a5780633cb747bf146102ab57600080fd5b80630166a07a1461020157806309fc8843146102215780631635f5fd1461023457806332b7006d1461024757600080fd5b366101fc57333b156101c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b6101fa73deaddeaddeaddeaddeaddeaddeaddeaddead000033333462030d406040518060200160405280600081525061049d565b005b600080fd5b34801561020d57600080fd5b506101fa61021c366004612476565b610578565b6101fa61022f366004612527565b61091a565b6101fa61024236600461257a565b6109f1565b6101fa6102553660046125ed565b610e43565b34801561026657600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102b757600080fd5b506003546102819073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102e457600080fd5b506101fa6102f3366004612641565b610f1d565b34801561030457600080fd5b506103416040518060400160405280600581526020017f312e382e3000000000000000000000000000000000000000000000000000000081525081565b6040516102a2919061272e565b34801561035a57600080fd5b50604051600081526020016102a2565b6101fa610378366004612476565b610f62565b34801561038957600080fd5b506101fa610398366004612741565b610fd5565b3480156103a957600080fd5b506103d56103b83660046127c4565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102a2565b3480156103ef57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610281565b6101fa61041c366004612741565b6110a9565b34801561042d57600080fd5b506101fa61043c3660046127fd565b6110ed565b34801561044d57600080fd5b506004546102819073ffffffffffffffffffffffffffffffffffffffff1681565b6101fa61047c36600461281a565b611296565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b7fffffffffffffffffffffffff215221522152215221522152215221522153000073ffffffffffffffffffffffffffffffffffffffff8716016104ec576104e785858585856112df565b610570565b60008673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055d919061287d565b905061056e878288888888886114a9565b505b505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561064b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561060f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610633919061287d565b73ffffffffffffffffffffffffffffffffffffffff16145b6106fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101bd565b610706876117d4565b15610854576107158787611836565b6107c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101bd565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b505050506108d6565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546108929084906128c9565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556108d6908585611956565b61056e878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a2a92505050565b333b156109a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101bd565b6109ec3333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112df92505050565b505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610ac4575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aac919061287d565b73ffffffffffffffffffffffffffffffffffffffff16145b610b76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101bd565b823414610c05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e7420726571756972656400000000000060648201526084016101bd565b3073ffffffffffffffffffffffffffffffffffffffff851603610caa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c66000000000000000000000000000000000000000000000000000000000060648201526084016101bd565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610d55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e67657200000000000000000000000000000000000000000000000060648201526084016101bd565b610d9785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ab892505050565b6000610db4855a8660405180602001604052806000815250611b59565b905080610570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c6564000000000000000000000000000000000000000000000000000000000060648201526084016101bd565b333b15610ed2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101bd565b610f16853333878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061049d92505050565b5050505050565b61056e87873388888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114a992505050565b73ffffffffffffffffffffffffffffffffffffffff8716158015610faf575073ffffffffffffffffffffffffffffffffffffffff861673deaddeaddeaddeaddeaddeaddeaddeaddead0000145b15610fc657610fc185858585856109f1565b61056e565b61056e86888787878787610578565b333b15611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101bd565b61057086863333888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114a992505050565b610570863387878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061049d92505050565b600054610100900460ff161580801561110d5750600054600160ff909116105b806111275750303b158015611127575060005460ff166001145b6111b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016101bd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561121157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61122f73420000000000000000000000000000000000000783611b73565b801561129257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6112d93385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112df92505050565b50505050565b82341461136e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c7565000060648201526084016101bd565b61137a85858584611c5d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906113dd908b908b9086908a906024016128e0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261147092918890600401612929565b6000604051808303818588803b15801561148957600080fd5b505af115801561149d573d6000803e3d6000fd5b50505050505050505050565b6114b2876117d4565b15611600576114c18787611836565b611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101bd565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b1580156115e357600080fd5b505af11580156115f7573d6000803e3d6000fd5b50505050611694565b61162273ffffffffffffffffffffffffffffffffffffffff8816863086611cfe565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a168352929052205461166090849061296e565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b6116a2878787878786611d5c565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611706908b908d908c908c908c908b90602401612986565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261179992918790600401612929565b600060405180830381600087803b1580156117b357600080fd5b505af11580156117c7573d6000803e3d6000fd5b5050505050505050505050565b6000611800827f1d1d8b6300000000000000000000000000000000000000000000000000000000611dea565b806118305750611830827fec4fc8e300000000000000000000000000000000000000000000000000000000611dea565b92915050565b6000611862837f1d1d8b6300000000000000000000000000000000000000000000000000000000611dea565b1561190b578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d6919061287d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611830565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b2573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109ec9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611e0d565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611aa2939291906129e1565b60405180910390a4610570868686868686611f19565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611b45939291906129e1565b60405180910390a46112d984848484611fa1565b600080600080845160208601878a8af19695505050505050565b600054610100900460ff16611c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016101bd565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611cea939291906129e1565b60405180910390a46112d98484848461200e565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526112d99085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016119a8565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611dd4939291906129e1565b60405180910390a461057086868686868661206d565b6000611df5836120e5565b8015611e065750611e068383612149565b9392505050565b6000611e6f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166122189092919063ffffffff16565b8051909150156109ec5780806020019051810190611e8d9190612a1f565b6109ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101bd565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd868686604051611f91939291906129e1565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612000929190612a41565b60405180910390a350505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612000929190612a41565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf868686604051611f91939291906129e1565b6000612111827f01ffc9a700000000000000000000000000000000000000000000000000000000612149565b80156118305750612142827fffffffff00000000000000000000000000000000000000000000000000000000612149565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612201575060208210155b801561220d5750600081115b979650505050505050565b6060612227848460008561222f565b949350505050565b6060824710156122c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101bd565b73ffffffffffffffffffffffffffffffffffffffff85163b61233f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101bd565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516123689190612a5a565b60006040518083038185875af1925050503d80600081146123a5576040519150601f19603f3d011682016040523d82523d6000602084013e6123aa565b606091505b509150915061220d828286606083156123c4575081611e06565b8251156123d45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101bd919061272e565b73ffffffffffffffffffffffffffffffffffffffff8116811461242a57600080fd5b50565b60008083601f84011261243f57600080fd5b50813567ffffffffffffffff81111561245757600080fd5b60208301915083602082850101111561246f57600080fd5b9250929050565b600080600080600080600060c0888a03121561249157600080fd5b873561249c81612408565b965060208801356124ac81612408565b955060408801356124bc81612408565b945060608801356124cc81612408565b93506080880135925060a088013567ffffffffffffffff8111156124ef57600080fd5b6124fb8a828b0161242d565b989b979a50959850939692959293505050565b803563ffffffff8116811461252257600080fd5b919050565b60008060006040848603121561253c57600080fd5b6125458461250e565b9250602084013567ffffffffffffffff81111561256157600080fd5b61256d8682870161242d565b9497909650939450505050565b60008060008060006080868803121561259257600080fd5b853561259d81612408565b945060208601356125ad81612408565b935060408601359250606086013567ffffffffffffffff8111156125d057600080fd5b6125dc8882890161242d565b969995985093965092949392505050565b60008060008060006080868803121561260557600080fd5b853561261081612408565b9450602086013593506126256040870161250e565b9250606086013567ffffffffffffffff8111156125d057600080fd5b600080600080600080600060c0888a03121561265c57600080fd5b873561266781612408565b9650602088013561267781612408565b9550604088013561268781612408565b94506060880135935061269c6080890161250e565b925060a088013567ffffffffffffffff8111156124ef57600080fd5b60005b838110156126d35781810151838201526020016126bb565b838111156112d95750506000910152565b600081518084526126fc8160208601602086016126b8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611e0660208301846126e4565b60008060008060008060a0878903121561275a57600080fd5b863561276581612408565b9550602087013561277581612408565b94506040870135935061278a6060880161250e565b9250608087013567ffffffffffffffff8111156127a657600080fd5b6127b289828a0161242d565b979a9699509497509295939492505050565b600080604083850312156127d757600080fd5b82356127e281612408565b915060208301356127f281612408565b809150509250929050565b60006020828403121561280f57600080fd5b8135611e0681612408565b6000806000806060858703121561283057600080fd5b843561283b81612408565b93506128496020860161250e565b9250604085013567ffffffffffffffff81111561286557600080fd5b6128718782880161242d565b95989497509550505050565b60006020828403121561288f57600080fd5b8151611e0681612408565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156128db576128db61289a565b500390565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261291f60808301846126e4565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260606020820152600061295860608301856126e4565b905063ffffffff83166040830152949350505050565b600082198211156129815761298161289a565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526129d560c08301846126e4565b98975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612a1660608301846126e4565b95945050505050565b600060208284031215612a3157600080fd5b81518015158114611e0657600080fd5b82815260406020820152600061222760408301846126e4565b60008251612a6c8184602087016126b8565b919091019291505056fea164736f6c634300080f000a","sourceMap":"1141:9307:149:-:0;;;2615:113;;;;;;;;;-1:-1:-1;2656:65:149::1;2714:1;2656:10;:65::i;:::-;1141:9307:::0;;2849:242;3100:19:43;3123:13;;;;;;3122:14;;3168:34;;;;-1:-1:-1;3186:12:43;;3201:1;3186:12;;;;:16;3168:34;3167:97;;;;3209:33;3236:4;3209:18;;;;;:33;;:::i;:::-;3208:34;:55;;;;-1:-1:-1;3246:12:43;;;;;:17;3208:55;3146:190;;;;-1:-1:-1;;;3146:190:43;;216:2:357;3146:190:43;;;198:21:357;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:357;;;338:44;399:19;;3146:190:43;;;;;;;;;3346:12;:16;;-1:-1:-1;;3346:16:43;3361:1;3346:16;;;3372:65;;;;3406:13;:20;;-1:-1:-1;;3406:20:43;;;;;3372:65;2927:157:149::1;480:42:199;3061:12:149::0;2927:21:::1;:157::i;:::-;3461:14:43::0;3457:99;;;3507:5;3491:21;;-1:-1:-1;;3491:21:43;;;3531:14;;-1:-1:-1;581:36:357;;3531:14:43;;569:2:357;554:18;3531:14:43;;;;;;;3457:99;3090:472;2849:242:149;:::o;1175:320:59:-;-1:-1:-1;;;;;1465:19:59;;:23;;;1175:320::o;5373:236:235:-;4888:13:43;;;;;;;4880:69;;;;-1:-1:-1;;;4880:69:43;;830:2:357;4880:69:43;;;812:21:357;869:2;849:18;;;842:30;908:34;888:18;;;881:62;-1:-1:-1;;;959:18:357;;;952:41;1010:19;;4880:69:43;628:407:357;4880:69:43;5544:9:235::1;:22:::0;;-1:-1:-1;;;;;5544:22:235;;::::1;-1:-1:-1::0;;;;;;5544:22:235;;::::1;;::::0;;;5576:11:::1;:26:::0;;;;;::::1;::::0;::::1;;::::0;;5373:236::o;628:407:357:-;1141:9307:149;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361061012d5760003560e01c8063662a633a116100a5578063927ede2d11610074578063c4d66de811610059578063c4d66de814610421578063c89701a214610441578063e11013dd1461046e57600080fd5b8063927ede2d146103e3578063a3a795481461040e57600080fd5b8063662a633a1461036a5780637f46ddb21461025a578063870876231461037d5780638f601f661461039d57600080fd5b806336c717c1116100fc578063540abf73116100e1578063540abf73146102d857806354fd4d50146102f85780635c975abb1461034e57600080fd5b806336c717c11461025a5780633cb747bf146102ab57600080fd5b80630166a07a1461020157806309fc8843146102215780631635f5fd1461023457806332b7006d1461024757600080fd5b366101fc57333b156101c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b6101fa73deaddeaddeaddeaddeaddeaddeaddeaddead000033333462030d406040518060200160405280600081525061049d565b005b600080fd5b34801561020d57600080fd5b506101fa61021c366004612476565b610578565b6101fa61022f366004612527565b61091a565b6101fa61024236600461257a565b6109f1565b6101fa6102553660046125ed565b610e43565b34801561026657600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102b757600080fd5b506003546102819073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102e457600080fd5b506101fa6102f3366004612641565b610f1d565b34801561030457600080fd5b506103416040518060400160405280600581526020017f312e382e3000000000000000000000000000000000000000000000000000000081525081565b6040516102a2919061272e565b34801561035a57600080fd5b50604051600081526020016102a2565b6101fa610378366004612476565b610f62565b34801561038957600080fd5b506101fa610398366004612741565b610fd5565b3480156103a957600080fd5b506103d56103b83660046127c4565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102a2565b3480156103ef57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610281565b6101fa61041c366004612741565b6110a9565b34801561042d57600080fd5b506101fa61043c3660046127fd565b6110ed565b34801561044d57600080fd5b506004546102819073ffffffffffffffffffffffffffffffffffffffff1681565b6101fa61047c36600461281a565b611296565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b7fffffffffffffffffffffffff215221522152215221522152215221522153000073ffffffffffffffffffffffffffffffffffffffff8716016104ec576104e785858585856112df565b610570565b60008673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055d919061287d565b905061056e878288888888886114a9565b505b505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561064b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561060f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610633919061287d565b73ffffffffffffffffffffffffffffffffffffffff16145b6106fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101bd565b610706876117d4565b15610854576107158787611836565b6107c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101bd565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b505050506108d6565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546108929084906128c9565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556108d6908585611956565b61056e878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a2a92505050565b333b156109a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101bd565b6109ec3333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112df92505050565b505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610ac4575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aac919061287d565b73ffffffffffffffffffffffffffffffffffffffff16145b610b76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101bd565b823414610c05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e7420726571756972656400000000000060648201526084016101bd565b3073ffffffffffffffffffffffffffffffffffffffff851603610caa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c66000000000000000000000000000000000000000000000000000000000060648201526084016101bd565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610d55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e67657200000000000000000000000000000000000000000000000060648201526084016101bd565b610d9785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ab892505050565b6000610db4855a8660405180602001604052806000815250611b59565b905080610570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c6564000000000000000000000000000000000000000000000000000000000060648201526084016101bd565b333b15610ed2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101bd565b610f16853333878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061049d92505050565b5050505050565b61056e87873388888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114a992505050565b73ffffffffffffffffffffffffffffffffffffffff8716158015610faf575073ffffffffffffffffffffffffffffffffffffffff861673deaddeaddeaddeaddeaddeaddeaddeaddead0000145b15610fc657610fc185858585856109f1565b61056e565b61056e86888787878787610578565b333b15611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101bd565b61057086863333888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114a992505050565b610570863387878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061049d92505050565b600054610100900460ff161580801561110d5750600054600160ff909116105b806111275750303b158015611127575060005460ff166001145b6111b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016101bd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561121157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61122f73420000000000000000000000000000000000000783611b73565b801561129257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6112d93385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112df92505050565b50505050565b82341461136e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c7565000060648201526084016101bd565b61137a85858584611c5d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906113dd908b908b9086908a906024016128e0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261147092918890600401612929565b6000604051808303818588803b15801561148957600080fd5b505af115801561149d573d6000803e3d6000fd5b50505050505050505050565b6114b2876117d4565b15611600576114c18787611836565b611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101bd565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b1580156115e357600080fd5b505af11580156115f7573d6000803e3d6000fd5b50505050611694565b61162273ffffffffffffffffffffffffffffffffffffffff8816863086611cfe565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a168352929052205461166090849061296e565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b6116a2878787878786611d5c565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611706908b908d908c908c908c908b90602401612986565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261179992918790600401612929565b600060405180830381600087803b1580156117b357600080fd5b505af11580156117c7573d6000803e3d6000fd5b5050505050505050505050565b6000611800827f1d1d8b6300000000000000000000000000000000000000000000000000000000611dea565b806118305750611830827fec4fc8e300000000000000000000000000000000000000000000000000000000611dea565b92915050565b6000611862837f1d1d8b6300000000000000000000000000000000000000000000000000000000611dea565b1561190b578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d6919061287d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611830565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b2573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109ec9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611e0d565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611aa2939291906129e1565b60405180910390a4610570868686868686611f19565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611b45939291906129e1565b60405180910390a46112d984848484611fa1565b600080600080845160208601878a8af19695505050505050565b600054610100900460ff16611c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016101bd565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611cea939291906129e1565b60405180910390a46112d98484848461200e565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526112d99085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016119a8565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611dd4939291906129e1565b60405180910390a461057086868686868661206d565b6000611df5836120e5565b8015611e065750611e068383612149565b9392505050565b6000611e6f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166122189092919063ffffffff16565b8051909150156109ec5780806020019051810190611e8d9190612a1f565b6109ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101bd565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd868686604051611f91939291906129e1565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612000929190612a41565b60405180910390a350505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612000929190612a41565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf868686604051611f91939291906129e1565b6000612111827f01ffc9a700000000000000000000000000000000000000000000000000000000612149565b80156118305750612142827fffffffff00000000000000000000000000000000000000000000000000000000612149565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612201575060208210155b801561220d5750600081115b979650505050505050565b6060612227848460008561222f565b949350505050565b6060824710156122c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101bd565b73ffffffffffffffffffffffffffffffffffffffff85163b61233f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101bd565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516123689190612a5a565b60006040518083038185875af1925050503d80600081146123a5576040519150601f19603f3d011682016040523d82523d6000602084013e6123aa565b606091505b509150915061220d828286606083156123c4575081611e06565b8251156123d45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101bd919061272e565b73ffffffffffffffffffffffffffffffffffffffff8116811461242a57600080fd5b50565b60008083601f84011261243f57600080fd5b50813567ffffffffffffffff81111561245757600080fd5b60208301915083602082850101111561246f57600080fd5b9250929050565b600080600080600080600060c0888a03121561249157600080fd5b873561249c81612408565b965060208801356124ac81612408565b955060408801356124bc81612408565b945060608801356124cc81612408565b93506080880135925060a088013567ffffffffffffffff8111156124ef57600080fd5b6124fb8a828b0161242d565b989b979a50959850939692959293505050565b803563ffffffff8116811461252257600080fd5b919050565b60008060006040848603121561253c57600080fd5b6125458461250e565b9250602084013567ffffffffffffffff81111561256157600080fd5b61256d8682870161242d565b9497909650939450505050565b60008060008060006080868803121561259257600080fd5b853561259d81612408565b945060208601356125ad81612408565b935060408601359250606086013567ffffffffffffffff8111156125d057600080fd5b6125dc8882890161242d565b969995985093965092949392505050565b60008060008060006080868803121561260557600080fd5b853561261081612408565b9450602086013593506126256040870161250e565b9250606086013567ffffffffffffffff8111156125d057600080fd5b600080600080600080600060c0888a03121561265c57600080fd5b873561266781612408565b9650602088013561267781612408565b9550604088013561268781612408565b94506060880135935061269c6080890161250e565b925060a088013567ffffffffffffffff8111156124ef57600080fd5b60005b838110156126d35781810151838201526020016126bb565b838111156112d95750506000910152565b600081518084526126fc8160208601602086016126b8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611e0660208301846126e4565b60008060008060008060a0878903121561275a57600080fd5b863561276581612408565b9550602087013561277581612408565b94506040870135935061278a6060880161250e565b9250608087013567ffffffffffffffff8111156127a657600080fd5b6127b289828a0161242d565b979a9699509497509295939492505050565b600080604083850312156127d757600080fd5b82356127e281612408565b915060208301356127f281612408565b809150509250929050565b60006020828403121561280f57600080fd5b8135611e0681612408565b6000806000806060858703121561283057600080fd5b843561283b81612408565b93506128496020860161250e565b9250604085013567ffffffffffffffff81111561286557600080fd5b6128718782880161242d565b95989497509550505050565b60006020828403121561288f57600080fd5b8151611e0681612408565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156128db576128db61289a565b500390565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261291f60808301846126e4565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260606020820152600061295860608301856126e4565b905063ffffffff83166040830152949350505050565b600082198211156129815761298161289a565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526129d560c08301846126e4565b98975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612a1660608301846126e4565b95945050505050565b600060208284031215612a3157600080fd5b81518015158114611e0657600080fd5b82815260406020820152600061222760408301846126e4565b60008251612a6c8184602087016126b8565b919091019291505056fea164736f6c634300080f000a","sourceMap":"1141:9307:149:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4741:10:235;1465:19:59;:23;4713:99:235;;;;;;;216:2:357;4713:99:235;;;198:21:357;255:2;235:18;;;228:30;294:34;274:18;;;267:62;365:25;345:18;;;338:53;408:19;;4713:99:235;;;;;;;;;3228:143:149::1;2708:42:199;3290:10:149;3302;3314:9;1343:7:235;3352:9:149;;;;;;;;;;;::::0;3228:19:::1;:143::i;:::-;1141:9307:::0;;;;;12867:1084:235;;;;;;;;;;-1:-1:-1;12867:1084:235;;;;;:::i;:::-;;:::i;7253:186::-;;;;;;:::i;:::-;;:::i;11233:902::-;;;;;;:::i;:::-;;:::i;3897:313:149:-;;;;;;:::i;:::-;;:::i;6764:101::-;;;;;;;;;;-1:-1:-1;6846:11:149;;;;6764:101;;;4271:42:357;4259:55;;;4241:74;;4229:2;4214:18;6764:101:149;;;;;;;;1893:37:235;;;;;;;;;;-1:-1:-1;1893:37:235;;;;;;;;10320:349;;;;;;;;;;-1:-1:-1;10320:349:235;;;;;:::i;:::-;;:::i;2510:40:149:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;6750:82:235:-;;;;;;;;;;-1:-1:-1;6750:82:235;;6797:4;6512:41:357;;6500:2;6485:18;6750:82:235;6372:187:357;6087:505:149;;;;;;:::i;:::-;;:::i;9277:349:235:-;;;;;;;;;;-1:-1:-1;9277:349:235;;;;;:::i;:::-;;:::i;1739:63::-;;;;;;;;;;-1:-1:-1;1739:63:235;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;8199:25:357;;;8187:2;8172:18;1739:63:235;8053:177:357;6024:99:235;;;;;;;;;;-1:-1:-1;6107:9:235;;;;6024:99;;5197:313:149;;;;;;:::i;:::-;;:::i;2849:242::-;;;;;;;;;;-1:-1:-1;2849:242:149;;;;;:::i;:::-;;:::i;2028:33:235:-;;;;;;;;;;-1:-1:-1;2028:33:235;;;;;;;;8450:186;;;;;;:::i;:::-;;:::i;1175:320:59:-;1465:19;;;:23;;;1175:320::o;7372:554:149:-;7599:39;;;;;7595:325;;7654:65;7673:5;7680:3;7685:7;7694:12;7708:10;7654:18;:65::i;:::-;7595:325;;;7750:15;7790:8;7768:39;;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7750:59;;7823:86;7844:8;7854:7;7863:5;7870:3;7875:7;7884:12;7898:10;7823:20;:86::i;:::-;7736:184;7595:325;7372:554;;;;;;:::o;12867:1084:235:-;5004:9;;;;4982:10;:32;:92;;;;-1:-1:-1;5062:11:235;;;5018:9;;:32;;;;;;;;5062:11;;;;;5018:9;;;;;:30;;:32;;;;;;;;;;;;:9;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;4982:92;4961:204;;;;;;;9591:2:357;4961:204:235;;;9573:21:357;9630:2;9610:18;;;9603:30;9669:34;9649:18;;;9642:62;9740:34;9720:18;;;9713:62;9812:3;9791:19;;;9784:32;9833:19;;4961:204:235;9389:469:357;4961:204:235;13184:37:::1;13209:11;13184:24;:37::i;:::-;13180:489;;;13262:46;13282:11;13295:12;13262:19;:46::i;:::-;13237:179;;;::::0;::::1;::::0;;10416:2:357;13237:179:235::1;::::0;::::1;10398:21:357::0;10455:2;10435:18;;;10428:30;10494:34;10474:18;;;10467:62;10565:34;10545:18;;;10538:62;10637:12;10616:19;;;10609:41;10667:19;;13237:179:235::1;10214:478:357::0;13237:179:235::1;13431:53;::::0;;;;:39:::1;10889:55:357::0;;;13431:53:235::1;::::0;::::1;10871:74:357::0;10961:18;;;10954:34;;;13431:39:235;::::1;::::0;::::1;::::0;10844:18:357;;13431:53:235::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13180:489;;;13553:21;::::0;;::::1;;::::0;;;:8:::1;:21;::::0;;;;;;;:35;;::::1;::::0;;;;;;;:45:::1;::::0;13591:7;;13553:45:::1;:::i;:::-;13515:21;::::0;;::::1;;::::0;;;:8:::1;:21;::::0;;;;;;;:35;;::::1;::::0;;;;;;;;;:83;;;;13612:46:::1;::::0;13645:3;13650:7;13612:32:::1;:46::i;:::-;13859:85;13885:11;13898:12;13912:5;13919:3;13924:7;13933:10;;13859:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;13859:25:235::1;::::0;-1:-1:-1;;;13859:85:235:i:1;7253:186::-:0;4741:10;1465:19:59;:23;4713:99:235;;;;;;;216:2:357;4713:99:235;;;198:21:357;255:2;235:18;;;228:30;294:34;274:18;;;267:62;365:25;345:18;;;338:53;408:19;;4713:99:235;14:419:357;4713:99:235;7353:79:::1;7372:10;7384;7396:9;7407:12;7421:10;;7353:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;7353:18:235::1;::::0;-1:-1:-1;;;7353:79:235:i:1;:::-;7253:186:::0;;;:::o;11233:902::-;5004:9;;;;4982:10;:32;:92;;;;-1:-1:-1;5062:11:235;;;5018:9;;:32;;;;;;;;5062:11;;;;;5018:9;;;;;:30;;:32;;;;;;;;;;;;:9;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;4982:92;4961:204;;;;;;;9591:2:357;4961:204:235;;;9573:21:357;9630:2;9610:18;;;9603:30;9669:34;9649:18;;;9642:62;9740:34;9720:18;;;9713:62;9812:3;9791:19;;;9784:32;9833:19;;4961:204:235;9389:469:357;4961:204:235;11522:7:::1;11509:9;:20;11501:91;;;::::0;::::1;::::0;;11520:2:357;11501:91:235::1;::::0;::::1;11502:21:357::0;11559:2;11539:18;;;11532:30;11598:34;11578:18;;;11571:62;11669:28;11649:18;;;11642:56;11715:19;;11501:91:235::1;11318:422:357::0;11501:91:235::1;11625:4;11610:20;::::0;::::1;::::0;11602:68:::1;;;::::0;::::1;::::0;;11947:2:357;11602:68:235::1;::::0;::::1;11929:21:357::0;11986:2;11966:18;;;11959:30;12025:34;12005:18;;;11998:62;12096:5;12076:18;;;12069:33;12119:19;;11602:68:235::1;11745:399:357::0;11602:68:235::1;11703:9;::::0;::::1;::::0;;::::1;11688:25:::0;;::::1;::::0;11680:78:::1;;;::::0;::::1;::::0;;12351:2:357;11680:78:235::1;::::0;::::1;12333:21:357::0;12390:2;12370:18;;;12363:30;12429:34;12409:18;;;12402:62;12500:10;12480:18;;;12473:38;12528:19;;11680:78:235::1;12149:404:357::0;11680:78:235::1;11936:56;11960:5;11967:3;11972:7;11981:10;;11936:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;11936:23:235::1;::::0;-1:-1:-1;;;11936:56:235:i:1;:::-;12003:12;12018:45;12032:3;12037:9;12048:7;12018:45;;;;;;;;;;;::::0;:13:::1;:45::i;:::-;12003:60;;12081:7;12073:55;;;::::0;::::1;::::0;;12760:2:357;12073:55:235::1;::::0;::::1;12742:21:357::0;12799:2;12779:18;;;12772:30;12838:34;12818:18;;;12811:62;12909:5;12889:18;;;12882:33;12932:19;;12073:55:235::1;12558:399:357::0;3897:313:149;4741:10:235;1465:19:59;:23;4713:99:235;;;;;;;216:2:357;4713:99:235;;;198:21:357;255:2;235:18;;;228:30;294:34;274:18;;;267:62;365:25;345:18;;;338:53;408:19;;4713:99:235;14:419:357;4713:99:235;4115:88:149::1;4135:8;4145:10;4157;4169:7;4178:12;4192:10;;4115:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;4115:19:149::1;::::0;-1:-1:-1;;;4115:88:149:i:1;:::-;3897:313:::0;;;;;:::o;10320:349:235:-;10563:99;10584:11;10597:12;10611:10;10623:3;10628:7;10637:12;10651:10;;10563:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10563:20:235;;-1:-1:-1;;;10563:99:235:i;6087:505:149:-;6341:22;;;;:65;;;;-1:-1:-1;6367:39:149;;;2708:42:199;6367:39:149;6341:65;6337:249;;;6422:50;6440:5;6447:3;6452:7;6461:10;;6422:17;:50::i;:::-;6337:249;;;6503:72;6523:8;6533;6543:5;6550:3;6555:7;6564:10;;6503:19;:72::i;9277:349:235:-;4741:10;1465:19:59;:23;4713:99:235;;;;;;;216:2:357;4713:99:235;;;198:21:357;255:2;235:18;;;228:30;294:34;274:18;;;267:62;365:25;345:18;;;338:53;408:19;;4713:99:235;14:419:357;4713:99:235;9513:106:::1;9534:11;9547:12;9561:10;9573;9585:7;9594:12;9608:10;;9513:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;9513:20:235::1;::::0;-1:-1:-1;;;9513:106:235:i:1;5197:313:149:-:0;5422:81;5442:8;5452:10;5464:3;5469:7;5478:12;5492:10;;5422:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5422:19:149;;-1:-1:-1;;;5422:81:149:i;2849:242::-;3100:19:43;3123:13;;;;;;3122:14;;3168:34;;;;-1:-1:-1;3186:12:43;;3201:1;3186:12;;;;:16;3168:34;3167:97;;;-1:-1:-1;3236:4:43;1465:19:59;:23;;;3208:55:43;;-1:-1:-1;3246:12:43;;;;;:17;3208:55;3146:190;;;;;;;13164:2:357;3146:190:43;;;13146:21:357;13203:2;13183:18;;;13176:30;13242:34;13222:18;;;13215:62;13313:16;13293:18;;;13286:44;13347:19;;3146:190:43;12962:410:357;3146:190:43;3346:12;:16;;;;3361:1;3346:16;;;3372:65;;;;3406:13;:20;;;;;;;;3372:65;2927:157:149::1;480:42:199;3061:12:149;2927:21;:157::i;:::-;3461:14:43::0;3457:99;;;3507:5;3491:21;;;;;;3531:14;;-1:-1:-1;13529:36:357;;3531:14:43;;13517:2:357;13502:18;3531:14:43;;;;;;;3457:99;3090:472;2849:242:149;:::o;8450:186:235:-;8557:72;8576:10;8588:3;8593:9;8604:12;8618:10;;8557:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8557:18:235;;-1:-1:-1;;;8557:72:235:i;:::-;8450:186;;;;:::o;14539:789::-;14756:7;14743:9;:20;14735:95;;;;;;;13778:2:357;14735:95:235;;;13760:21:357;13817:2;13797:18;;;13790:30;13856:34;13836:18;;;13829:62;13927:32;13907:18;;;13900:60;13977:19;;14735:95:235;13576:426:357;14735:95:235;15008:56;15032:5;15039:3;15044:7;15053:10;15008:23;:56::i;:::-;15075:9;;15146:11;;15182:88;;15075:9;;;;;:21;;15105:7;;15146:11;;;15205:31;;15182:88;;15238:5;;15245:3;;15105:7;;15259:10;;15182:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;15075:246;;;;;;;;;;;;;15298:12;;15075:246;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14539:789;;;;;:::o;16022:1680::-;16283:37;16308:11;16283:24;:37::i;:::-;16279:512;;;16361:46;16381:11;16394:12;16361:19;:46::i;:::-;16336:179;;;;;;;10416:2:357;16336:179:235;;;10398:21:357;10455:2;10435:18;;;10428:30;10494:34;10474:18;;;10467:62;10565:34;10545:18;;;10538:62;10637:12;10616:19;;;10609:41;10667:19;;16336:179:235;10214:478:357;16336:179:235;16530:55;;;;;:39;10889:55:357;;;16530::235;;;10871:74:357;10961:18;;;10954:34;;;16530:39:235;;;;;10844:18:357;;16530:55:235;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16279:512;;;16616:67;:36;;;16653:5;16668:4;16675:7;16616:36;:67::i;:::-;16735:21;;;;;;;;:8;:21;;;;;;;;:35;;;;;;;;;;:45;;16773:7;;16735:45;:::i;:::-;16697:21;;;;;;;;:8;:21;;;;;;;;:35;;;;;;;;;:83;16279:512;16981:85;17007:11;17020:12;17034:5;17041:3;17046:7;17055:10;16981:25;:85::i;:::-;17077:9;;17130:11;;17166:478;;17077:9;;;;;:21;;17130:11;;17206:33;;17166:478;;17492:12;;17522:11;;17551:5;;17574:3;;17595:7;;17620:10;;17166:478;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;17077:618;;;;;;;;;;;;;17672:12;;17077:618;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16022:1680;;;;;;;:::o;17966:279::-;18039:4;18062:79;18094:6;18102:38;18062:31;:79::i;:::-;:176;;;;18157:81;18189:6;18197:40;18157:31;:81::i;:::-;18055:183;17966:279;-1:-1:-1;;17966:279:235:o;18692:410::-;18789:4;18809:87;18841:14;18857:38;18809:31;:87::i;:::-;18805:291;;;18955:14;18934:44;;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18919:61;;:11;:61;;;18912:68;;;;18805:291;19056:14;19033:50;;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;763:205:52;902:58;;10901:42:357;10889:55;;902:58:52;;;10871:74:357;10961:18;;;10954:34;;;875:86:52;;895:5;;925:23;;10844:18:357;;902:58:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;875:19;:86::i;10007:439:149:-;10306:5;10262:76;;10293:11;10262:76;;10279:12;10262:76;;;10313:3;10318:7;10327:10;10262:76;;;;;;;;:::i;:::-;;;;;;;;10348:91;10380:11;10393:12;10407:5;10414:3;10419:7;10428:10;10348:31;:91::i;8745:363::-;8997:5;8939:90;;2708:42:199;8939:90:149;;8964:1;8939:90;;;9004:3;9009:7;9018:10;8939:90;;;;;;;;:::i;:::-;;;;;;;;9039:62;9069:5;9076:3;9081:7;9090:10;9039:29;:62::i;1202:536:200:-;1305:4;1321:13;1668:1;1635;1594:9;1588:16;1554:2;1543:9;1539:18;1496:6;1454:7;1421:4;1395:302;1367:330;1202:536;-1:-1:-1;;;;;;1202:536:200:o;5373:236:235:-;4888:13:43;;;;;;;4880:69;;;;;;;16381:2:357;4880:69:43;;;16363:21:357;16420:2;16400:18;;;16393:30;16459:34;16439:18;;;16432:62;16530:13;16510:18;;;16503:41;16561:19;;4880:69:43;16179:407:357;4880:69:43;5544:9:235::1;:22:::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;;5576:11:::1;:26:::0;;;;;::::1;::::0;::::1;;::::0;;5373:236::o;8154:366:149:-;8409:5;8348:93;;2708:42:199;8348:93:149;;8376:1;8348:93;;;8416:3;8421:7;8430:10;8348:93;;;;;;;;:::i;:::-;;;;;;;;8451:62;8481:5;8488:3;8493:7;8502:10;8451:29;:62::i;974:241:52:-;1139:68;;16803:42:357;16872:15;;;1139:68:52;;;16854:34:357;16924:15;;16904:18;;;16897:43;16956:18;;;16949:34;;;1112:96:52;;1132:5;;1162:27;;16766:18:357;;1139:68:52;16591:398:357;9338:442:149;9640:5;9593:79;;9627:11;9593:79;;9613:12;9593:79;;;9647:3;9652:7;9661:10;9593:79;;;;;;;;:::i;:::-;;;;;;;;9682:91;9714:11;9727:12;9741:5;9748:3;9753:7;9762:10;9682:31;:91::i;1333:274:67:-;1420:4;1527:23;1542:7;1527:14;:23::i;:::-;:73;;;;;1554:46;1579:7;1588:11;1554:24;:46::i;:::-;1520:80;1333:274;-1:-1:-1;;;1333:274:67:o;3747:706:52:-;4166:23;4192:69;4220:4;4192:69;;;;;;;;;;;;;;;;;4200:5;4192:27;;;;:69;;;;;:::i;:::-;4275:17;;4166:95;;-1:-1:-1;4275:21:52;4271:176;;4370:10;4359:30;;;;;;;;;;;;:::i;:::-;4351:85;;;;;;;17478:2:357;4351:85:52;;;17460:21:357;17517:2;17497:18;;;17490:30;17556:34;17536:18;;;17529:62;17627:12;17607:18;;;17600:40;17657:19;;4351:85:52;17276:406:357;21757:341:235;22059:5;22011:80;;22045:12;22011:80;;22032:11;22011:80;;;22066:3;22071:7;22080:10;22011:80;;;;;;;;:::i;:::-;;;;;;;;21757:341;;;;;;:::o;20099:251::-;20318:3;20292:51;;20311:5;20292:51;;;20323:7;20332:10;20292:51;;;;;;;:::i;:::-;;;;;;;;20099:251;;;;:::o;19478:::-;19697:3;19671:51;;19690:5;19671:51;;;19702:7;19711:10;19671:51;;;;;;;:::i;20883:341::-;21185:5;21137:80;;21171:12;21137:80;;21158:11;21137:80;;;21192:3;21197:7;21206:10;21137:80;;;;;;;;:::i;704:411:67:-;768:4;975:60;1000:7;1009:25;975:24;:60::i;:::-;:133;;;;-1:-1:-1;1052:56:67;1077:7;1086:21;1052:24;:56::i;:::-;1051:57;956:152;704:411;-1:-1:-1;;704:411:67:o;4223:638::-;4385:71;;;18155:66:357;18143:79;;4385:71:67;;;;18125:98:357;;;;4385:71:67;;;;;;;;;;18098:18:357;;;;4385:71:67;;;;;;;;;;;4408:34;4385:71;;;4664:20;;4316:4;;4385:71;4316:4;;;;;;4385:71;4316:4;;4664:20;4629:7;4622:5;4611:86;4600:97;;4724:16;4710:30;;4774:4;4768:11;4753:26;;4806:7;:29;;;;;4831:4;4817:10;:18;;4806:29;:48;;;;;4853:1;4839:11;:15;4806:48;4799:55;4223:638;-1:-1:-1;;;;;;;4223:638:67:o;3861:223:59:-;3994:12;4025:52;4047:6;4055:4;4061:1;4064:12;4025:21;:52::i;:::-;4018:59;3861:223;-1:-1:-1;;;;3861:223:59:o;4948:499::-;5113:12;5170:5;5145:21;:30;;5137:81;;;;;;;18436:2:357;5137:81:59;;;18418:21:357;18475:2;18455:18;;;18448:30;18514:34;18494:18;;;18487:62;18585:8;18565:18;;;18558:36;18611:19;;5137:81:59;18234:402:357;5137:81:59;1465:19;;;;5228:60;;;;;;;18843:2:357;5228:60:59;;;18825:21:357;18882:2;18862:18;;;18855:30;18921:31;18901:18;;;18894:59;18970:18;;5228:60:59;18641:353:357;5228:60:59;5300:12;5314:23;5341:6;:11;;5360:5;5367:4;5341:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5299:73;;;;5389:51;5406:7;5415:10;5427:12;7707;7735:7;7731:566;;;-1:-1:-1;7765:10:59;7758:17;;7731:566;7876:17;;:21;7872:415;;8120:10;8114:17;8180:15;8167:10;8163:2;8159:19;8152:44;7872:415;8259:12;8252:20;;;;;;;;;;;:::i;438:154:357:-;524:42;517:5;513:54;506:5;503:65;493:93;;582:1;579;572:12;493:93;438:154;:::o;597:347::-;648:8;658:6;712:3;705:4;697:6;693:17;689:27;679:55;;730:1;727;720:12;679:55;-1:-1:-1;753:20:357;;796:18;785:30;;782:50;;;828:1;825;818:12;782:50;865:4;857:6;853:17;841:29;;917:3;910:4;901:6;893;889:19;885:30;882:39;879:59;;;934:1;931;924:12;879:59;597:347;;;;;:::o;949:1038::-;1064:6;1072;1080;1088;1096;1104;1112;1165:3;1153:9;1144:7;1140:23;1136:33;1133:53;;;1182:1;1179;1172:12;1133:53;1221:9;1208:23;1240:31;1265:5;1240:31;:::i;:::-;1290:5;-1:-1:-1;1347:2:357;1332:18;;1319:32;1360:33;1319:32;1360:33;:::i;:::-;1412:7;-1:-1:-1;1471:2:357;1456:18;;1443:32;1484:33;1443:32;1484:33;:::i;:::-;1536:7;-1:-1:-1;1595:2:357;1580:18;;1567:32;1608:33;1567:32;1608:33;:::i;:::-;1660:7;-1:-1:-1;1714:3:357;1699:19;;1686:33;;-1:-1:-1;1770:3:357;1755:19;;1742:33;1798:18;1787:30;;1784:50;;;1830:1;1827;1820:12;1784:50;1869:58;1919:7;1910:6;1899:9;1895:22;1869:58;:::i;:::-;949:1038;;;;-1:-1:-1;949:1038:357;;-1:-1:-1;949:1038:357;;;;1843:84;;-1:-1:-1;;;949:1038:357:o;1992:163::-;2059:20;;2119:10;2108:22;;2098:33;;2088:61;;2145:1;2142;2135:12;2088:61;1992:163;;;:::o;2160:481::-;2238:6;2246;2254;2307:2;2295:9;2286:7;2282:23;2278:32;2275:52;;;2323:1;2320;2313:12;2275:52;2346:28;2364:9;2346:28;:::i;:::-;2336:38;;2425:2;2414:9;2410:18;2397:32;2452:18;2444:6;2441:30;2438:50;;;2484:1;2481;2474:12;2438:50;2523:58;2573:7;2564:6;2553:9;2549:22;2523:58;:::i;:::-;2160:481;;2600:8;;-1:-1:-1;2497:84:357;;-1:-1:-1;;;;2160:481:357:o;2646:754::-;2743:6;2751;2759;2767;2775;2828:3;2816:9;2807:7;2803:23;2799:33;2796:53;;;2845:1;2842;2835:12;2796:53;2884:9;2871:23;2903:31;2928:5;2903:31;:::i;:::-;2953:5;-1:-1:-1;3010:2:357;2995:18;;2982:32;3023:33;2982:32;3023:33;:::i;:::-;3075:7;-1:-1:-1;3129:2:357;3114:18;;3101:32;;-1:-1:-1;3184:2:357;3169:18;;3156:32;3211:18;3200:30;;3197:50;;;3243:1;3240;3233:12;3197:50;3282:58;3332:7;3323:6;3312:9;3308:22;3282:58;:::i;:::-;2646:754;;;;-1:-1:-1;2646:754:357;;-1:-1:-1;3359:8:357;;3256:84;2646:754;-1:-1:-1;;;2646:754:357:o;3405:685::-;3501:6;3509;3517;3525;3533;3586:3;3574:9;3565:7;3561:23;3557:33;3554:53;;;3603:1;3600;3593:12;3554:53;3642:9;3629:23;3661:31;3686:5;3661:31;:::i;:::-;3711:5;-1:-1:-1;3763:2:357;3748:18;;3735:32;;-1:-1:-1;3786:37:357;3819:2;3804:18;;3786:37;:::i;:::-;3776:47;;3874:2;3863:9;3859:18;3846:32;3901:18;3893:6;3890:30;3887:50;;;3933:1;3930;3923:12;4588:969;4702:6;4710;4718;4726;4734;4742;4750;4803:3;4791:9;4782:7;4778:23;4774:33;4771:53;;;4820:1;4817;4810:12;4771:53;4859:9;4846:23;4878:31;4903:5;4878:31;:::i;:::-;4928:5;-1:-1:-1;4985:2:357;4970:18;;4957:32;4998:33;4957:32;4998:33;:::i;:::-;5050:7;-1:-1:-1;5109:2:357;5094:18;;5081:32;5122:33;5081:32;5122:33;:::i;:::-;5174:7;-1:-1:-1;5228:2:357;5213:18;;5200:32;;-1:-1:-1;5251:38:357;5284:3;5269:19;;5251:38;:::i;:::-;5241:48;;5340:3;5329:9;5325:19;5312:33;5368:18;5360:6;5357:30;5354:50;;;5400:1;5397;5390:12;5562:258;5634:1;5644:113;5658:6;5655:1;5652:13;5644:113;;;5734:11;;;5728:18;5715:11;;;5708:39;5680:2;5673:10;5644:113;;;5775:6;5772:1;5769:13;5766:48;;;-1:-1:-1;;5810:1:357;5792:16;;5785:27;5562:258::o;5825:317::-;5867:3;5905:5;5899:12;5932:6;5927:3;5920:19;5948:63;6004:6;5997:4;5992:3;5988:14;5981:4;5974:5;5970:16;5948:63;:::i;:::-;6056:2;6044:15;6061:66;6040:88;6031:98;;;;6131:4;6027:109;;5825:317;-1:-1:-1;;5825:317:357:o;6147:220::-;6296:2;6285:9;6278:21;6259:4;6316:45;6357:2;6346:9;6342:18;6334:6;6316:45;:::i;6828:827::-;6933:6;6941;6949;6957;6965;6973;7026:3;7014:9;7005:7;7001:23;6997:33;6994:53;;;7043:1;7040;7033:12;6994:53;7082:9;7069:23;7101:31;7126:5;7101:31;:::i;:::-;7151:5;-1:-1:-1;7208:2:357;7193:18;;7180:32;7221:33;7180:32;7221:33;:::i;:::-;7273:7;-1:-1:-1;7327:2:357;7312:18;;7299:32;;-1:-1:-1;7350:37:357;7383:2;7368:18;;7350:37;:::i;:::-;7340:47;;7438:3;7427:9;7423:19;7410:33;7466:18;7458:6;7455:30;7452:50;;;7498:1;7495;7488:12;7452:50;7537:58;7587:7;7578:6;7567:9;7563:22;7537:58;:::i;:::-;6828:827;;;;-1:-1:-1;6828:827:357;;-1:-1:-1;6828:827:357;;7614:8;;6828:827;-1:-1:-1;;;6828:827:357:o;7660:388::-;7728:6;7736;7789:2;7777:9;7768:7;7764:23;7760:32;7757:52;;;7805:1;7802;7795:12;7757:52;7844:9;7831:23;7863:31;7888:5;7863:31;:::i;:::-;7913:5;-1:-1:-1;7970:2:357;7955:18;;7942:32;7983:33;7942:32;7983:33;:::i;:::-;8035:7;8025:17;;;7660:388;;;;;:::o;8235:272::-;8319:6;8372:2;8360:9;8351:7;8347:23;8343:32;8340:52;;;8388:1;8385;8378:12;8340:52;8427:9;8414:23;8446:31;8471:5;8446:31;:::i;8512:616::-;8599:6;8607;8615;8623;8676:2;8664:9;8655:7;8651:23;8647:32;8644:52;;;8692:1;8689;8682:12;8644:52;8731:9;8718:23;8750:31;8775:5;8750:31;:::i;:::-;8800:5;-1:-1:-1;8824:37:357;8857:2;8842:18;;8824:37;:::i;:::-;8814:47;;8912:2;8901:9;8897:18;8884:32;8939:18;8931:6;8928:30;8925:50;;;8971:1;8968;8961:12;8925:50;9010:58;9060:7;9051:6;9040:9;9036:22;9010:58;:::i;:::-;8512:616;;;;-1:-1:-1;9087:8:357;-1:-1:-1;;;;8512:616:357:o;9133:251::-;9203:6;9256:2;9244:9;9235:7;9231:23;9227:32;9224:52;;;9272:1;9269;9262:12;9224:52;9304:9;9298:16;9323:31;9348:5;9323:31;:::i;10999:184::-;11051:77;11048:1;11041:88;11148:4;11145:1;11138:15;11172:4;11169:1;11162:15;11188:125;11228:4;11256:1;11253;11250:8;11247:34;;;11261:18;;:::i;:::-;-1:-1:-1;11298:9:357;;11188:125::o;14007:512::-;14201:4;14230:42;14311:2;14303:6;14299:15;14288:9;14281:34;14363:2;14355:6;14351:15;14346:2;14335:9;14331:18;14324:43;;14403:6;14398:2;14387:9;14383:18;14376:34;14446:3;14441:2;14430:9;14426:18;14419:31;14467:46;14508:3;14497:9;14493:19;14485:6;14467:46;:::i;:::-;14459:54;14007:512;-1:-1:-1;;;;;;14007:512:357:o;14524:424::-;14737:42;14729:6;14725:55;14714:9;14707:74;14817:2;14812;14801:9;14797:18;14790:30;14688:4;14837:45;14878:2;14867:9;14863:18;14855:6;14837:45;:::i;:::-;14829:53;;14930:10;14922:6;14918:23;14913:2;14902:9;14898:18;14891:51;14524:424;;;;;;:::o;14953:128::-;14993:3;15024:1;15020:6;15017:1;15014:13;15011:39;;;15030:18;;:::i;:::-;-1:-1:-1;15066:9:357;;14953:128::o;15086:674::-;15336:4;15365:42;15446:2;15438:6;15434:15;15423:9;15416:34;15498:2;15490:6;15486:15;15481:2;15470:9;15466:18;15459:43;15550:2;15542:6;15538:15;15533:2;15522:9;15518:18;15511:43;15602:2;15594:6;15590:15;15585:2;15574:9;15570:18;15563:43;;15643:6;15637:3;15626:9;15622:19;15615:35;15687:3;15681;15670:9;15666:19;15659:32;15708:46;15749:3;15738:9;15734:19;15726:6;15708:46;:::i;:::-;15700:54;15086:674;-1:-1:-1;;;;;;;;15086:674:357:o;15765:409::-;15980:42;15972:6;15968:55;15957:9;15950:74;16060:6;16055:2;16044:9;16040:18;16033:34;16103:2;16098;16087:9;16083:18;16076:30;15931:4;16123:45;16164:2;16153:9;16149:18;16141:6;16123:45;:::i;:::-;16115:53;15765:409;-1:-1:-1;;;;;15765:409:357:o;16994:277::-;17061:6;17114:2;17102:9;17093:7;17089:23;17085:32;17082:52;;;17130:1;17127;17120:12;17082:52;17162:9;17156:16;17215:5;17208:13;17201:21;17194:5;17191:32;17181:60;;17237:1;17234;17227:12;17687:289;17862:6;17851:9;17844:25;17905:2;17900;17889:9;17885:18;17878:30;17825:4;17925:45;17966:2;17955:9;17951:18;17943:6;17925:45;:::i;18999:274::-;19128:3;19166:6;19160:13;19182:53;19228:6;19223:3;19216:4;19208:6;19204:17;19182:53;:::i;:::-;19251:16;;;;;18999:274;-1:-1:-1;;18999:274:357:o","linkReferences":{}},"methodIdentifiers":{"MESSENGER()":"927ede2d","OTHER_BRIDGE()":"7f46ddb2","bridgeERC20(address,address,uint256,uint32,bytes)":"87087623","bridgeERC20To(address,address,address,uint256,uint32,bytes)":"540abf73","bridgeETH(uint32,bytes)":"09fc8843","bridgeETHTo(address,uint32,bytes)":"e11013dd","deposits(address,address)":"8f601f66","finalizeBridgeERC20(address,address,address,address,uint256,bytes)":"0166a07a","finalizeBridgeETH(address,address,uint256,bytes)":"1635f5fd","finalizeDeposit(address,address,address,address,uint256,bytes)":"662a633a","initialize(address)":"c4d66de8","l1TokenBridge()":"36c717c1","messenger()":"3cb747bf","otherBridge()":"c89701a2","paused()":"5c975abb","version()":"54fd4d50","withdraw(address,uint256,uint32,bytes)":"32b7006d","withdrawTo(address,address,uint256,uint32,bytes)":"a3a79548"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"DepositFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20BridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20BridgeInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHBridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHBridgeInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"WithdrawalInitiated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"contract CrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_BRIDGE\",\"outputs\":[{\"internalType\":\"contract StandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC20To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeETHTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"deposits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeDeposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract StandardBridge\",\"name\":\"_otherBridge\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TokenBridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messenger\",\"outputs\":[{\"internalType\":\"contract CrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"otherBridge\",\"outputs\":[{\"internalType\":\"contract StandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l2Token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"withdrawTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"custom:proxied\":\"@custom:predeploy 0x4200000000000000000000000000000000000010\",\"events\":{\"DepositFinalized(address,address,address,address,uint256,bytes)\":{\"custom:legacy\":\"@notice Emitted whenever an ERC20 deposit is finalized.\",\"params\":{\"amount\":\"Amount of the ERC20 deposited.\",\"extraData\":\"Extra data attached to the deposit.\",\"from\":\"Address of the depositor.\",\"l1Token\":\"Address of the token on L1.\",\"l2Token\":\"Address of the corresponding token on L2.\",\"to\":\"Address of the recipient on L2.\"}},\"WithdrawalInitiated(address,address,address,address,uint256,bytes)\":{\"custom:legacy\":\"@notice Emitted whenever a withdrawal from L2 to L1 is initiated.\",\"params\":{\"amount\":\"Amount of the ERC20 withdrawn.\",\"extraData\":\"Extra data attached to the withdrawal.\",\"from\":\"Address of the withdrawer.\",\"l1Token\":\"Address of the token on L1.\",\"l2Token\":\"Address of the corresponding token on L2.\",\"to\":\"Address of the recipient on L1.\"}}},\"kind\":\"dev\",\"methods\":{\"MESSENGER()\":{\"custom:legacy\":\"\",\"returns\":{\"_0\":\"Contract of the messenger on this domain.\"}},\"OTHER_BRIDGE()\":{\"custom:legacy\":\"\",\"returns\":{\"_0\":\"Contract of the bridge on the other network.\"}},\"bridgeERC20(address,address,uint256,uint32,bytes)\":{\"params\":{\"_amount\":\"Amount of local tokens to deposit.\",\"_extraData\":\"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.\",\"_localToken\":\"Address of the ERC20 on this chain.\",\"_minGasLimit\":\"Minimum amount of gas that the bridge can be relayed with.\",\"_remoteToken\":\"Address of the corresponding token on the remote chain.\"}},\"bridgeERC20To(address,address,address,uint256,uint32,bytes)\":{\"params\":{\"_amount\":\"Amount of local tokens to deposit.\",\"_extraData\":\"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.\",\"_localToken\":\"Address of the ERC20 on this chain.\",\"_minGasLimit\":\"Minimum amount of gas that the bridge can be relayed with.\",\"_remoteToken\":\"Address of the corresponding token on the remote chain.\",\"_to\":\"Address of the receiver.\"}},\"bridgeETH(uint32,bytes)\":{\"params\":{\"_extraData\":\"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.\",\"_minGasLimit\":\"Minimum amount of gas that the bridge can be relayed with.\"}},\"bridgeETHTo(address,uint32,bytes)\":{\"params\":{\"_extraData\":\"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.\",\"_minGasLimit\":\"Minimum amount of gas that the bridge can be relayed with.\",\"_to\":\"Address of the receiver.\"}},\"finalizeBridgeERC20(address,address,address,address,uint256,bytes)\":{\"params\":{\"_amount\":\"Amount of the ERC20 being bridged.\",\"_extraData\":\"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.\",\"_from\":\"Address of the sender.\",\"_localToken\":\"Address of the ERC20 on this chain.\",\"_remoteToken\":\"Address of the corresponding token on the remote chain.\",\"_to\":\"Address of the receiver.\"}},\"finalizeBridgeETH(address,address,uint256,bytes)\":{\"params\":{\"_amount\":\"Amount of ETH being bridged.\",\"_extraData\":\"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.\",\"_from\":\"Address of the sender.\",\"_to\":\"Address of the receiver.\"}},\"finalizeDeposit(address,address,address,address,uint256,bytes)\":{\"custom:legacy\":\"@notice Finalizes a deposit from L1 to L2. To finalize a deposit of ether, use address(0) and the l1Token and the Legacy ERC20 ether predeploy address as the l2Token.\",\"params\":{\"_amount\":\"Amount of the tokens being deposited.\",\"_extraData\":\"Extra data attached to the deposit.\",\"_from\":\"Address of the depositor.\",\"_l1Token\":\"Address of the L1 token to deposit.\",\"_l2Token\":\"Address of the corresponding L2 token.\",\"_to\":\"Address of the recipient.\"}},\"initialize(address)\":{\"params\":{\"_otherBridge\":\"Contract for the corresponding bridge on the other chain.\"}},\"l1TokenBridge()\":{\"custom:legacy\":\"@notice Retrieves the access of the corresponding L1 bridge contract.\",\"returns\":{\"_0\":\"Address of the corresponding L1 bridge contract.\"}},\"paused()\":{\"returns\":{\"_0\":\"Whether or not the contract is paused.\"}},\"withdraw(address,uint256,uint32,bytes)\":{\"custom:legacy\":\"@notice Initiates a withdrawal from L2 to L1. This function only works with OptimismMintableERC20 tokens or ether. Use the `bridgeERC20` function to bridge native L2 tokens to L1.\",\"params\":{\"_amount\":\"Amount of the L2 token to withdraw.\",\"_extraData\":\"Extra data attached to the withdrawal.\",\"_l2Token\":\"Address of the L2 token to withdraw.\",\"_minGasLimit\":\"Minimum gas limit to use for the transaction.\"}},\"withdrawTo(address,address,uint256,uint32,bytes)\":{\"custom:legacy\":\"@notice Initiates a withdrawal from L2 to L1 to a target account on L1. Note that if ETH is sent to a contract on L1 and the call fails, then that ETH will be locked in the L1StandardBridge. ETH may be recoverable if the call can be successfully replayed by increasing the amount of gas supplied to the call. If the call will fail for any amount of gas, then the ETH will be locked permanently. This function only works with OptimismMintableERC20 tokens or ether. Use the `bridgeERC20To` function to bridge native L2 tokens to L1.\",\"params\":{\"_amount\":\"Amount of the L2 token to withdraw.\",\"_extraData\":\"Extra data attached to the withdrawal.\",\"_l2Token\":\"Address of the L2 token to withdraw.\",\"_minGasLimit\":\"Minimum gas limit to use for the transaction.\",\"_to\":\"Recipient account on L1.\"}}},\"stateVariables\":{\"version\":{\"custom:semver\":\"1.8.0\"}},\"title\":\"L2StandardBridge\",\"version\":1},\"userdoc\":{\"events\":{\"ERC20BridgeFinalized(address,address,address,address,uint256,bytes)\":{\"notice\":\"Emitted when an ERC20 bridge is finalized on this chain.\"},\"ERC20BridgeInitiated(address,address,address,address,uint256,bytes)\":{\"notice\":\"Emitted when an ERC20 bridge is initiated to the other chain.\"},\"ETHBridgeFinalized(address,address,uint256,bytes)\":{\"notice\":\"Emitted when an ETH bridge is finalized on this chain.\"},\"ETHBridgeInitiated(address,address,uint256,bytes)\":{\"notice\":\"Emitted when an ETH bridge is initiated to the other chain.\"}},\"kind\":\"user\",\"methods\":{\"MESSENGER()\":{\"notice\":\"Getter for messenger contract. Public getter is legacy and will be removed in the future. Use `messenger` instead.\"},\"OTHER_BRIDGE()\":{\"notice\":\"Getter for the other bridge contract. Public getter is legacy and will be removed in the future. Use `otherBridge` instead.\"},\"bridgeERC20(address,address,uint256,uint32,bytes)\":{\"notice\":\"Sends ERC20 tokens to the sender's address on the other chain.\"},\"bridgeERC20To(address,address,address,uint256,uint32,bytes)\":{\"notice\":\"Sends ERC20 tokens to a receiver's address on the other chain.\"},\"bridgeETH(uint32,bytes)\":{\"notice\":\"Sends ETH to the sender's address on the other chain.\"},\"bridgeETHTo(address,uint32,bytes)\":{\"notice\":\"Sends ETH to a receiver's address on the other chain. Note that if ETH is sent to a smart contract and the call fails, the ETH will be temporarily locked in the StandardBridge on the other chain until the call is replayed. If the call cannot be replayed with any amount of gas (call always reverts), then the ETH will be permanently locked in the StandardBridge on the other chain. ETH will also be locked if the receiver is the other bridge, because finalizeBridgeETH will revert in that case.\"},\"constructor\":{\"notice\":\"Constructs the L2StandardBridge contract.\"},\"deposits(address,address)\":{\"notice\":\"Mapping that stores deposits for a given pair of local and remote tokens.\"},\"finalizeBridgeERC20(address,address,address,address,uint256,bytes)\":{\"notice\":\"Finalizes an ERC20 bridge on this chain. Can only be triggered by the other StandardBridge contract on the remote chain.\"},\"finalizeBridgeETH(address,address,uint256,bytes)\":{\"notice\":\"Finalizes an ETH bridge on this chain. Can only be triggered by the other StandardBridge contract on the remote chain.\"},\"initialize(address)\":{\"notice\":\"Initializer.\"},\"messenger()\":{\"notice\":\"Messenger contract on this domain.\"},\"otherBridge()\":{\"notice\":\"Corresponding bridge on the other domain.\"},\"paused()\":{\"notice\":\"This function should return true if the contract is paused. On L1 this function will check the SuperchainConfig for its paused status. On L2 this function should be a no-op.\"}},\"notice\":\"The L2StandardBridge is responsible for transfering ETH and ERC20 tokens between L1 and L2. In the case that an ERC20 token is native to L2, it will be escrowed within this contract. If the ERC20 token is native to L1, it will be burnt. NOTE: this contract is not intended to support all variations of ERC20 tokens. Examples of some token types that may not be properly supported by this contract include, but are not limited to: tokens with transfer fees, rebasing tokens, and tokens with blocklists.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/L2/L2StandardBridge.sol\":\"L2StandardBridge\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f\",\"dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x24b04b8aacaaf1a4a0719117b29c9c3647b1f479c5ac2a60f5ff1bb6d839c238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://43e46da9d9f49741ecd876a269e71bc7494058d7a8e9478429998adb5bc3eaa0\",\"dweb:/ipfs/QmUtp4cqzf22C5rJ76AabKADquGWcjsc33yjYXxXC4sDvy\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x032807210d1d7d218963d7355d62e021a84bf1b3339f4f50be2f63b53cccaf29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11756f42121f6541a35a8339ea899ee7514cfaa2e6d740625fcc844419296aa6\",\"dweb:/ipfs/QmekMuk6BY4DAjzeXr4MSbKdgoqqsZnA8JPtuyWc6CwXHf\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165Checker.sol\":{\"keccak256\":\"0xc65c83c1039508fa7a42a09a3c6a32babd1c438ba4dbb23581255e784b5d5eed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1b3b38db0f76429db899909025e534c366415e9ea8b5ddc4c8901e6a7fc1461\",\"dweb:/ipfs/QmYv1KxyHjLEky9JWNSsSfpGJbiCxFyzVFgTwQKpiqYGUg\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929\",\"dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689\",\"dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy\"]},\"lib/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c\",\"dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8\"]},\"src/L1/ResourceMetering.sol\":{\"keccak256\":\"0xde3ac62c60f27a3f1ba06eec94f4eda45e7ec5544c6a5d6b79543a7184e44408\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://265a2845c4ff0d9076dd0505755cf2bdf799f4fdc09ef016865a26b51f5c3409\",\"dweb:/ipfs/QmRzSdBD8jmQf3U9u2ATRAzzuyo6c5ugz8VA5ZM4vzoGiM\"]},\"src/L2/L2StandardBridge.sol\":{\"keccak256\":\"0x9f17720ac0b3b44723b02385a19063cf22704cd0bd253fce3e6d24b9f76bd629\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1575cf22553428baf7abb23059cb97c29e534ab5214f13d54a1810349166c570\",\"dweb:/ipfs/Qme2oVH1pd1rBe1AyxUjHrofDgHXdHaUiqSgBVsSSLbKN5\"]},\"src/libraries/Arithmetic.sol\":{\"keccak256\":\"0x91345e053584f82ad04d682ba821cf3ede808304f5b2a88116a894cf692c21db\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://005e3c42d2edfca0a506cbda94d3b0104eddf20c00bd1bd25272f53f2ef74c72\",\"dweb:/ipfs/QmdaW6Nge6NKoGvFqRpQjBpM2fXpc5y8WpZyBnDnKicdJq\"]},\"src/libraries/Burn.sol\":{\"keccak256\":\"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f\",\"dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb\"]},\"src/libraries/Constants.sol\":{\"keccak256\":\"0xe0aeec7d6e5d1e44a11405d3b5bfc384ea092c39bea0b763ab937a26fd427132\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11aa3bff9da26ca2545132ec7994866690446a5321023811c254410d9593bd9b\",\"dweb:/ipfs/QmVxWqadxvdfkqdrhfWisDqeAthibn4HEE1P6o9aFxXLhp\"]},\"src/libraries/Encoding.sol\":{\"keccak256\":\"0x1dafabcbd4877c7abe9698957b0a44b7e911cb8b11c1437a4ed897135669fa87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6addfacefa26fdb44f56d73fa0172b97740de75629a962905ec2a20a28d40fff\",\"dweb:/ipfs/QmboHMouqU19Rnbqrfo1gkfnuDBFcPiC9wsKgGtF2W1cNA\"]},\"src/libraries/Hashing.sol\":{\"keccak256\":\"0x89c07a0ca102cbe57b4e082543f2dd6dae0e1fd4a87908a334bd076fc914e7b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://69c83489c9544ab442dc244c2feb2c6811b726a5eb5a509b97fc5ccb90b98c12\",\"dweb:/ipfs/QmPGGJeLasc1HWHzd6odvWcNvFPQrbYtDubZcv8yp1HLtF\"]},\"src/libraries/Predeploys.sol\":{\"keccak256\":\"0x7b48b32b75e9ba0cd7f83b3304c6c1676dd8de20a5d40e8846bf7018ae9aff02\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7574fcc79c0d545b90071023aa81ee7880ab50b3057df598fa693bc4cf303663\",\"dweb:/ipfs/QmWLxHzgfaTJ7thfb7khXkTY5UtSBZ5VTUB4DaAXVw7DRe\"]},\"src/libraries/SafeCall.sol\":{\"keccak256\":\"0x0636a7abb242bb5d6f5606967c8929e6aa7e63468c1e2ce40ad4780d4c4bf94f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4daec2ac8f9907bbf84ef0a1c48f03bae8657619bc6f42b3a672f25c516f17a\",\"dweb:/ipfs/Qmf8gfRxBv8gEmCkP8YMPb2GGfj9QUnoNUyKE7UR2SWGnq\"]},\"src/libraries/Types.sol\":{\"keccak256\":\"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e\",\"dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc\"]},\"src/libraries/rlp/RLPWriter.sol\":{\"keccak256\":\"0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b\",\"dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV\"]},\"src/universal/CrossDomainMessenger.sol\":{\"keccak256\":\"0x330ae1479e88fc8a8b5b27a84df935a092a47ad13e59d9b9ea4982ad31bbe7b0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf5fb4e78a03dcad4b9a8e2d5ed135f8e989aa02090747386843383fa6b7d1\",\"dweb:/ipfs/QmTp66RoF6EaKeBrrZBuYAu3dsMfKo8de2XY9iHHnqfN3n\"]},\"src/universal/IOptimismMintableERC20.sol\":{\"keccak256\":\"0x6f8133b39efcbcbd5088f195dfacf1bedc3146508429c3865443909af735a04c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://adc36971e2e120458769f050428d9d2b0504516660345020c2521ee46e6d8abf\",\"dweb:/ipfs/QmPbFusQkZgGKpU8Fv5JoqL4oVeJtM3yqnhRGLY9eZT5zZ\"]},\"src/universal/ISemver.sol\":{\"keccak256\":\"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a\",\"dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR\"]},\"src/universal/OptimismMintableERC20.sol\":{\"keccak256\":\"0x18721f41a831ec39d47002e73ecc2aa3e6624f8d1ab7b9f25b53348e8b0765df\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2162fa7529a77b199a07f37fca26c778542f6c8805f0365f1ceef90c5cd3a3a7\",\"dweb:/ipfs/QmaMmHJS52Bp95AGnrjh1zV7fLLqV3uAbFzkVLziMnPJYa\"]},\"src/universal/StandardBridge.sol\":{\"keccak256\":\"0x1a2f6afd7f14430ae2b797e09497c3dc860ed5db752e1847e30649668060c01d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fefe1356cdeb5b324e4e63e1c723c08f9e244ef2ef133b9f5df0cc0d180eeaa8\",\"dweb:/ipfs/QmZzR3zWKodwdwrdWwXUyh7G3qcFn2cjUQLrE45gRyQMn3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.15+commit.e14f2714"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"l1Token","type":"address","indexed":true},{"internalType":"address","name":"l2Token","type":"address","indexed":true},{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes","name":"extraData","type":"bytes","indexed":false}],"type":"event","name":"DepositFinalized","anonymous":false},{"inputs":[{"internalType":"address","name":"localToken","type":"address","indexed":true},{"internalType":"address","name":"remoteToken","type":"address","indexed":true},{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes","name":"extraData","type":"bytes","indexed":false}],"type":"event","name":"ERC20BridgeFinalized","anonymous":false},{"inputs":[{"internalType":"address","name":"localToken","type":"address","indexed":true},{"internalType":"address","name":"remoteToken","type":"address","indexed":true},{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes","name":"extraData","type":"bytes","indexed":false}],"type":"event","name":"ERC20BridgeInitiated","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes","name":"extraData","type":"bytes","indexed":false}],"type":"event","name":"ETHBridgeFinalized","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes","name":"extraData","type":"bytes","indexed":false}],"type":"event","name":"ETHBridgeInitiated","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"l1Token","type":"address","indexed":true},{"internalType":"address","name":"l2Token","type":"address","indexed":true},{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes","name":"extraData","type":"bytes","indexed":false}],"type":"event","name":"WithdrawalInitiated","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"MESSENGER","outputs":[{"internalType":"contract CrossDomainMessenger","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"OTHER_BRIDGE","outputs":[{"internalType":"contract StandardBridge","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_localToken","type":"address"},{"internalType":"address","name":"_remoteToken","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"bridgeERC20"},{"inputs":[{"internalType":"address","name":"_localToken","type":"address"},{"internalType":"address","name":"_remoteToken","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"bridgeERC20To"},{"inputs":[{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"payable","type":"function","name":"bridgeETH"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"payable","type":"function","name":"bridgeETHTo"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"deposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"_localToken","type":"address"},{"internalType":"address","name":"_remoteToken","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"finalizeBridgeERC20"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"payable","type":"function","name":"finalizeBridgeETH"},{"inputs":[{"internalType":"address","name":"_l1Token","type":"address"},{"internalType":"address","name":"_l2Token","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"payable","type":"function","name":"finalizeDeposit"},{"inputs":[{"internalType":"contract StandardBridge","name":"_otherBridge","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"l1TokenBridge","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"messenger","outputs":[{"internalType":"contract CrossDomainMessenger","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"otherBridge","outputs":[{"internalType":"contract StandardBridge","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"address","name":"_l2Token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"payable","type":"function","name":"withdraw"},{"inputs":[{"internalType":"address","name":"_l2Token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint32","name":"_minGasLimit","type":"uint32"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"stateMutability":"payable","type":"function","name":"withdrawTo"},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"MESSENGER()":{"custom:legacy":"","returns":{"_0":"Contract of the messenger on this domain."}},"OTHER_BRIDGE()":{"custom:legacy":"","returns":{"_0":"Contract of the bridge on the other network."}},"bridgeERC20(address,address,uint256,uint32,bytes)":{"params":{"_amount":"Amount of local tokens to deposit.","_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_localToken":"Address of the ERC20 on this chain.","_minGasLimit":"Minimum amount of gas that the bridge can be relayed with.","_remoteToken":"Address of the corresponding token on the remote chain."}},"bridgeERC20To(address,address,address,uint256,uint32,bytes)":{"params":{"_amount":"Amount of local tokens to deposit.","_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_localToken":"Address of the ERC20 on this chain.","_minGasLimit":"Minimum amount of gas that the bridge can be relayed with.","_remoteToken":"Address of the corresponding token on the remote chain.","_to":"Address of the receiver."}},"bridgeETH(uint32,bytes)":{"params":{"_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_minGasLimit":"Minimum amount of gas that the bridge can be relayed with."}},"bridgeETHTo(address,uint32,bytes)":{"params":{"_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_minGasLimit":"Minimum amount of gas that the bridge can be relayed with.","_to":"Address of the receiver."}},"finalizeBridgeERC20(address,address,address,address,uint256,bytes)":{"params":{"_amount":"Amount of the ERC20 being bridged.","_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_from":"Address of the sender.","_localToken":"Address of the ERC20 on this chain.","_remoteToken":"Address of the corresponding token on the remote chain.","_to":"Address of the receiver."}},"finalizeBridgeETH(address,address,uint256,bytes)":{"params":{"_amount":"Amount of ETH being bridged.","_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_from":"Address of the sender.","_to":"Address of the receiver."}},"finalizeDeposit(address,address,address,address,uint256,bytes)":{"custom:legacy":"@notice Finalizes a deposit from L1 to L2. To finalize a deposit of ether, use address(0) and the l1Token and the Legacy ERC20 ether predeploy address as the l2Token.","params":{"_amount":"Amount of the tokens being deposited.","_extraData":"Extra data attached to the deposit.","_from":"Address of the depositor.","_l1Token":"Address of the L1 token to deposit.","_l2Token":"Address of the corresponding L2 token.","_to":"Address of the recipient."}},"initialize(address)":{"params":{"_otherBridge":"Contract for the corresponding bridge on the other chain."}},"l1TokenBridge()":{"custom:legacy":"@notice Retrieves the access of the corresponding L1 bridge contract.","returns":{"_0":"Address of the corresponding L1 bridge contract."}},"paused()":{"returns":{"_0":"Whether or not the contract is paused."}},"withdraw(address,uint256,uint32,bytes)":{"custom:legacy":"@notice Initiates a withdrawal from L2 to L1. This function only works with OptimismMintableERC20 tokens or ether. Use the `bridgeERC20` function to bridge native L2 tokens to L1.","params":{"_amount":"Amount of the L2 token to withdraw.","_extraData":"Extra data attached to the withdrawal.","_l2Token":"Address of the L2 token to withdraw.","_minGasLimit":"Minimum gas limit to use for the transaction."}},"withdrawTo(address,address,uint256,uint32,bytes)":{"custom:legacy":"@notice Initiates a withdrawal from L2 to L1 to a target account on L1. Note that if ETH is sent to a contract on L1 and the call fails, then that ETH will be locked in the L1StandardBridge. ETH may be recoverable if the call can be successfully replayed by increasing the amount of gas supplied to the call. If the call will fail for any amount of gas, then the ETH will be locked permanently. This function only works with OptimismMintableERC20 tokens or ether. Use the `bridgeERC20To` function to bridge native L2 tokens to L1.","params":{"_amount":"Amount of the L2 token to withdraw.","_extraData":"Extra data attached to the withdrawal.","_l2Token":"Address of the L2 token to withdraw.","_minGasLimit":"Minimum gas limit to use for the transaction.","_to":"Recipient account on L1."}}},"version":1},"userdoc":{"kind":"user","methods":{"MESSENGER()":{"notice":"Getter for messenger contract. Public getter is legacy and will be removed in the future. Use `messenger` instead."},"OTHER_BRIDGE()":{"notice":"Getter for the other bridge contract. Public getter is legacy and will be removed in the future. Use `otherBridge` instead."},"bridgeERC20(address,address,uint256,uint32,bytes)":{"notice":"Sends ERC20 tokens to the sender's address on the other chain."},"bridgeERC20To(address,address,address,uint256,uint32,bytes)":{"notice":"Sends ERC20 tokens to a receiver's address on the other chain."},"bridgeETH(uint32,bytes)":{"notice":"Sends ETH to the sender's address on the other chain."},"bridgeETHTo(address,uint32,bytes)":{"notice":"Sends ETH to a receiver's address on the other chain. Note that if ETH is sent to a smart contract and the call fails, the ETH will be temporarily locked in the StandardBridge on the other chain until the call is replayed. If the call cannot be replayed with any amount of gas (call always reverts), then the ETH will be permanently locked in the StandardBridge on the other chain. ETH will also be locked if the receiver is the other bridge, because finalizeBridgeETH will revert in that case."},"constructor":{"notice":"Constructs the L2StandardBridge contract."},"deposits(address,address)":{"notice":"Mapping that stores deposits for a given pair of local and remote tokens."},"finalizeBridgeERC20(address,address,address,address,uint256,bytes)":{"notice":"Finalizes an ERC20 bridge on this chain. Can only be triggered by the other StandardBridge contract on the remote chain."},"finalizeBridgeETH(address,address,uint256,bytes)":{"notice":"Finalizes an ETH bridge on this chain. Can only be triggered by the other StandardBridge contract on the remote chain."},"initialize(address)":{"notice":"Initializer."},"messenger()":{"notice":"Messenger contract on this domain."},"otherBridge()":{"notice":"Corresponding bridge on the other domain."},"paused()":{"notice":"This function should return true if the contract is paused. On L1 this function will check the SuperchainConfig for its paused status. On L2 this function should be a no-op."}},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","ds-test/=lib/forge-std/lib/ds-test/src/","forge-std/=lib/forge-std/src/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/L2/L2StandardBridge.sol":"L2StandardBridge"},"evmVersion":"london","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e","urls":["bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497","dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3","urls":["bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4","dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66","urls":["bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f","dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol":{"keccak256":"0x24b04b8aacaaf1a4a0719117b29c9c3647b1f479c5ac2a60f5ff1bb6d839c238","urls":["bzz-raw://43e46da9d9f49741ecd876a269e71bc7494058d7a8e9478429998adb5bc3eaa0","dweb:/ipfs/QmUtp4cqzf22C5rJ76AabKADquGWcjsc33yjYXxXC4sDvy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b","urls":["bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34","dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca","urls":["bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd","dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-IERC20Permit.sol":{"keccak256":"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329","urls":["bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95","dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x032807210d1d7d218963d7355d62e021a84bf1b3339f4f50be2f63b53cccaf29","urls":["bzz-raw://11756f42121f6541a35a8339ea899ee7514cfaa2e6d740625fcc844419296aa6","dweb:/ipfs/QmekMuk6BY4DAjzeXr4MSbKdgoqqsZnA8JPtuyWc6CwXHf"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10","urls":["bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487","dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7","urls":["bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92","dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165Checker.sol":{"keccak256":"0xc65c83c1039508fa7a42a09a3c6a32babd1c438ba4dbb23581255e784b5d5eed","urls":["bzz-raw://a1b3b38db0f76429db899909025e534c366415e9ea8b5ddc4c8901e6a7fc1461","dweb:/ipfs/QmYv1KxyHjLEky9JWNSsSfpGJbiCxFyzVFgTwQKpiqYGUg"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1","urls":["bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f","dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0","urls":["bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929","dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7","urls":["bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689","dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy"],"license":"MIT"},"lib/solmate/src/utils/FixedPointMathLib.sol":{"keccak256":"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d","urls":["bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c","dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8"],"license":"MIT"},"src/L1/ResourceMetering.sol":{"keccak256":"0xde3ac62c60f27a3f1ba06eec94f4eda45e7ec5544c6a5d6b79543a7184e44408","urls":["bzz-raw://265a2845c4ff0d9076dd0505755cf2bdf799f4fdc09ef016865a26b51f5c3409","dweb:/ipfs/QmRzSdBD8jmQf3U9u2ATRAzzuyo6c5ugz8VA5ZM4vzoGiM"],"license":"MIT"},"src/L2/L2StandardBridge.sol":{"keccak256":"0x9f17720ac0b3b44723b02385a19063cf22704cd0bd253fce3e6d24b9f76bd629","urls":["bzz-raw://1575cf22553428baf7abb23059cb97c29e534ab5214f13d54a1810349166c570","dweb:/ipfs/Qme2oVH1pd1rBe1AyxUjHrofDgHXdHaUiqSgBVsSSLbKN5"],"license":"MIT"},"src/libraries/Arithmetic.sol":{"keccak256":"0x91345e053584f82ad04d682ba821cf3ede808304f5b2a88116a894cf692c21db","urls":["bzz-raw://005e3c42d2edfca0a506cbda94d3b0104eddf20c00bd1bd25272f53f2ef74c72","dweb:/ipfs/QmdaW6Nge6NKoGvFqRpQjBpM2fXpc5y8WpZyBnDnKicdJq"],"license":"MIT"},"src/libraries/Burn.sol":{"keccak256":"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010","urls":["bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f","dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb"],"license":"MIT"},"src/libraries/Constants.sol":{"keccak256":"0xe0aeec7d6e5d1e44a11405d3b5bfc384ea092c39bea0b763ab937a26fd427132","urls":["bzz-raw://11aa3bff9da26ca2545132ec7994866690446a5321023811c254410d9593bd9b","dweb:/ipfs/QmVxWqadxvdfkqdrhfWisDqeAthibn4HEE1P6o9aFxXLhp"],"license":"MIT"},"src/libraries/Encoding.sol":{"keccak256":"0x1dafabcbd4877c7abe9698957b0a44b7e911cb8b11c1437a4ed897135669fa87","urls":["bzz-raw://6addfacefa26fdb44f56d73fa0172b97740de75629a962905ec2a20a28d40fff","dweb:/ipfs/QmboHMouqU19Rnbqrfo1gkfnuDBFcPiC9wsKgGtF2W1cNA"],"license":"MIT"},"src/libraries/Hashing.sol":{"keccak256":"0x89c07a0ca102cbe57b4e082543f2dd6dae0e1fd4a87908a334bd076fc914e7b8","urls":["bzz-raw://69c83489c9544ab442dc244c2feb2c6811b726a5eb5a509b97fc5ccb90b98c12","dweb:/ipfs/QmPGGJeLasc1HWHzd6odvWcNvFPQrbYtDubZcv8yp1HLtF"],"license":"MIT"},"src/libraries/Predeploys.sol":{"keccak256":"0x7b48b32b75e9ba0cd7f83b3304c6c1676dd8de20a5d40e8846bf7018ae9aff02","urls":["bzz-raw://7574fcc79c0d545b90071023aa81ee7880ab50b3057df598fa693bc4cf303663","dweb:/ipfs/QmWLxHzgfaTJ7thfb7khXkTY5UtSBZ5VTUB4DaAXVw7DRe"],"license":"MIT"},"src/libraries/SafeCall.sol":{"keccak256":"0x0636a7abb242bb5d6f5606967c8929e6aa7e63468c1e2ce40ad4780d4c4bf94f","urls":["bzz-raw://a4daec2ac8f9907bbf84ef0a1c48f03bae8657619bc6f42b3a672f25c516f17a","dweb:/ipfs/Qmf8gfRxBv8gEmCkP8YMPb2GGfj9QUnoNUyKE7UR2SWGnq"],"license":"MIT"},"src/libraries/Types.sol":{"keccak256":"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4","urls":["bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e","dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc"],"license":"MIT"},"src/libraries/rlp/RLPWriter.sol":{"keccak256":"0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6","urls":["bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b","dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV"],"license":"MIT"},"src/universal/CrossDomainMessenger.sol":{"keccak256":"0x330ae1479e88fc8a8b5b27a84df935a092a47ad13e59d9b9ea4982ad31bbe7b0","urls":["bzz-raw://66bf5fb4e78a03dcad4b9a8e2d5ed135f8e989aa02090747386843383fa6b7d1","dweb:/ipfs/QmTp66RoF6EaKeBrrZBuYAu3dsMfKo8de2XY9iHHnqfN3n"],"license":"MIT"},"src/universal/IOptimismMintableERC20.sol":{"keccak256":"0x6f8133b39efcbcbd5088f195dfacf1bedc3146508429c3865443909af735a04c","urls":["bzz-raw://adc36971e2e120458769f050428d9d2b0504516660345020c2521ee46e6d8abf","dweb:/ipfs/QmPbFusQkZgGKpU8Fv5JoqL4oVeJtM3yqnhRGLY9eZT5zZ"],"license":"MIT"},"src/universal/ISemver.sol":{"keccak256":"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44","urls":["bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a","dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR"],"license":"MIT"},"src/universal/OptimismMintableERC20.sol":{"keccak256":"0x18721f41a831ec39d47002e73ecc2aa3e6624f8d1ab7b9f25b53348e8b0765df","urls":["bzz-raw://2162fa7529a77b199a07f37fca26c778542f6c8805f0365f1ceef90c5cd3a3a7","dweb:/ipfs/QmaMmHJS52Bp95AGnrjh1zV7fLLqV3uAbFzkVLziMnPJYa"],"license":"MIT"},"src/universal/StandardBridge.sol":{"keccak256":"0x1a2f6afd7f14430ae2b797e09497c3dc860ed5db752e1847e30649668060c01d","urls":["bzz-raw://fefe1356cdeb5b324e4e63e1c723c08f9e244ef2ef133b9f5df0cc0d180eeaa8","dweb:/ipfs/QmZzR3zWKodwdwrdWwXUyh7G3qcFn2cjUQLrE45gRyQMn3"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":49534,"contract":"src/L2/L2StandardBridge.sol:L2StandardBridge","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":49537,"contract":"src/L2/L2StandardBridge.sol:L2StandardBridge","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":110944,"contract":"src/L2/L2StandardBridge.sol:L2StandardBridge","label":"spacer_0_2_30","offset":2,"slot":"0","type":"t_bytes30"},{"astId":110947,"contract":"src/L2/L2StandardBridge.sol:L2StandardBridge","label":"spacer_1_0_20","offset":0,"slot":"1","type":"t_address"},{"astId":110954,"contract":"src/L2/L2StandardBridge.sol:L2StandardBridge","label":"deposits","offset":0,"slot":"2","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":110958,"contract":"src/L2/L2StandardBridge.sol:L2StandardBridge","label":"messenger","offset":0,"slot":"3","type":"t_contract(CrossDomainMessenger)108888"},{"astId":110962,"contract":"src/L2/L2StandardBridge.sol:L2StandardBridge","label":"otherBridge","offset":0,"slot":"4","type":"t_contract(StandardBridge)111675"},{"astId":110967,"contract":"src/L2/L2StandardBridge.sol:L2StandardBridge","label":"__gap","offset":0,"slot":"5","type":"t_array(t_uint256)45_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)45_storage":{"encoding":"inplace","label":"uint256[45]","numberOfBytes":"1440","base":"t_uint256"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes30":{"encoding":"inplace","label":"bytes30","numberOfBytes":"30"},"t_contract(CrossDomainMessenger)108888":{"encoding":"inplace","label":"contract CrossDomainMessenger","numberOfBytes":"20"},"t_contract(StandardBridge)111675":{"encoding":"inplace","label":"contract StandardBridge","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"version":1,"kind":"user","methods":{"MESSENGER()":{"notice":"Getter for messenger contract. Public getter is legacy and will be removed in the future. Use `messenger` instead."},"OTHER_BRIDGE()":{"notice":"Getter for the other bridge contract. Public getter is legacy and will be removed in the future. Use `otherBridge` instead."},"bridgeERC20(address,address,uint256,uint32,bytes)":{"notice":"Sends ERC20 tokens to the sender's address on the other chain."},"bridgeERC20To(address,address,address,uint256,uint32,bytes)":{"notice":"Sends ERC20 tokens to a receiver's address on the other chain."},"bridgeETH(uint32,bytes)":{"notice":"Sends ETH to the sender's address on the other chain."},"bridgeETHTo(address,uint32,bytes)":{"notice":"Sends ETH to a receiver's address on the other chain. Note that if ETH is sent to a smart contract and the call fails, the ETH will be temporarily locked in the StandardBridge on the other chain until the call is replayed. If the call cannot be replayed with any amount of gas (call always reverts), then the ETH will be permanently locked in the StandardBridge on the other chain. ETH will also be locked if the receiver is the other bridge, because finalizeBridgeETH will revert in that case."},"constructor":{"notice":"Constructs the L2StandardBridge contract."},"deposits(address,address)":{"notice":"Mapping that stores deposits for a given pair of local and remote tokens."},"finalizeBridgeERC20(address,address,address,address,uint256,bytes)":{"notice":"Finalizes an ERC20 bridge on this chain. Can only be triggered by the other StandardBridge contract on the remote chain."},"finalizeBridgeETH(address,address,uint256,bytes)":{"notice":"Finalizes an ETH bridge on this chain. Can only be triggered by the other StandardBridge contract on the remote chain."},"initialize(address)":{"notice":"Initializer."},"messenger()":{"notice":"Messenger contract on this domain."},"otherBridge()":{"notice":"Corresponding bridge on the other domain."},"paused()":{"notice":"This function should return true if the contract is paused. On L1 this function will check the SuperchainConfig for its paused status. On L2 this function should be a no-op."}},"events":{"ERC20BridgeFinalized(address,address,address,address,uint256,bytes)":{"notice":"Emitted when an ERC20 bridge is finalized on this chain."},"ERC20BridgeInitiated(address,address,address,address,uint256,bytes)":{"notice":"Emitted when an ERC20 bridge is initiated to the other chain."},"ETHBridgeFinalized(address,address,uint256,bytes)":{"notice":"Emitted when an ETH bridge is finalized on this chain."},"ETHBridgeInitiated(address,address,uint256,bytes)":{"notice":"Emitted when an ETH bridge is initiated to the other chain."}},"notice":"The L2StandardBridge is responsible for transfering ETH and ERC20 tokens between L1 and L2. In the case that an ERC20 token is native to L2, it will be escrowed within this contract. If the ERC20 token is native to L1, it will be burnt. NOTE: this contract is not intended to support all variations of ERC20 tokens. Examples of some token types that may not be properly supported by this contract include, but are not limited to: tokens with transfer fees, rebasing tokens, and tokens with blocklists."},"devdoc":{"version":1,"kind":"dev","methods":{"MESSENGER()":{"returns":{"_0":"Contract of the messenger on this domain."}},"OTHER_BRIDGE()":{"returns":{"_0":"Contract of the bridge on the other network."}},"bridgeERC20(address,address,uint256,uint32,bytes)":{"params":{"_amount":"Amount of local tokens to deposit.","_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_localToken":"Address of the ERC20 on this chain.","_minGasLimit":"Minimum amount of gas that the bridge can be relayed with.","_remoteToken":"Address of the corresponding token on the remote chain."}},"bridgeERC20To(address,address,address,uint256,uint32,bytes)":{"params":{"_amount":"Amount of local tokens to deposit.","_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_localToken":"Address of the ERC20 on this chain.","_minGasLimit":"Minimum amount of gas that the bridge can be relayed with.","_remoteToken":"Address of the corresponding token on the remote chain.","_to":"Address of the receiver."}},"bridgeETH(uint32,bytes)":{"params":{"_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_minGasLimit":"Minimum amount of gas that the bridge can be relayed with."}},"bridgeETHTo(address,uint32,bytes)":{"params":{"_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_minGasLimit":"Minimum amount of gas that the bridge can be relayed with.","_to":"Address of the receiver."}},"finalizeBridgeERC20(address,address,address,address,uint256,bytes)":{"params":{"_amount":"Amount of the ERC20 being bridged.","_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_from":"Address of the sender.","_localToken":"Address of the ERC20 on this chain.","_remoteToken":"Address of the corresponding token on the remote chain.","_to":"Address of the receiver."}},"finalizeBridgeETH(address,address,uint256,bytes)":{"params":{"_amount":"Amount of ETH being bridged.","_extraData":"Extra data to be sent with the transaction. Note that the recipient will not be triggered with this data, but it will be emitted and can be used to identify the transaction.","_from":"Address of the sender.","_to":"Address of the receiver."}},"finalizeDeposit(address,address,address,address,uint256,bytes)":{"params":{"_amount":"Amount of the tokens being deposited.","_extraData":"Extra data attached to the deposit.","_from":"Address of the depositor.","_l1Token":"Address of the L1 token to deposit.","_l2Token":"Address of the corresponding L2 token.","_to":"Address of the recipient."}},"initialize(address)":{"params":{"_otherBridge":"Contract for the corresponding bridge on the other chain."}},"l1TokenBridge()":{"returns":{"_0":"Address of the corresponding L1 bridge contract."}},"paused()":{"returns":{"_0":"Whether or not the contract is paused."}},"withdraw(address,uint256,uint32,bytes)":{"params":{"_amount":"Amount of the L2 token to withdraw.","_extraData":"Extra data attached to the withdrawal.","_l2Token":"Address of the L2 token to withdraw.","_minGasLimit":"Minimum gas limit to use for the transaction."}},"withdrawTo(address,address,uint256,uint32,bytes)":{"params":{"_amount":"Amount of the L2 token to withdraw.","_extraData":"Extra data attached to the withdrawal.","_l2Token":"Address of the L2 token to withdraw.","_minGasLimit":"Minimum gas limit to use for the transaction.","_to":"Recipient account on L1."}}},"events":{"DepositFinalized(address,address,address,address,uint256,bytes)":{"params":{"amount":"Amount of the ERC20 deposited.","extraData":"Extra data attached to the deposit.","from":"Address of the depositor.","l1Token":"Address of the token on L1.","l2Token":"Address of the corresponding token on L2.","to":"Address of the recipient on L2."}},"WithdrawalInitiated(address,address,address,address,uint256,bytes)":{"params":{"amount":"Amount of the ERC20 withdrawn.","extraData":"Extra data attached to the withdrawal.","from":"Address of the withdrawer.","l1Token":"Address of the token on L1.","l2Token":"Address of the corresponding token on L2.","to":"Address of the recipient on L1."}}},"title":"L2StandardBridge"},"ast":{"absolutePath":"src/L2/L2StandardBridge.sol","id":91147,"exportedSymbols":{"Constants":[103096],"CrossDomainMessenger":[108888],"ISemver":[109417],"L2StandardBridge":[91146],"OptimismMintableERC20":[109645],"Predeploys":[104124],"StandardBridge":[111675]},"nodeType":"SourceUnit","src":"32:10417:149","nodes":[{"id":90725,"nodeType":"PragmaDirective","src":"32:23:149","nodes":[],"literals":["solidity","0.8",".15"]},{"id":90727,"nodeType":"ImportDirective","src":"57:58:149","nodes":[],"absolutePath":"src/libraries/Predeploys.sol","file":"src/libraries/Predeploys.sol","nameLocation":"-1:-1:-1","scope":91147,"sourceUnit":104125,"symbolAliases":[{"foreign":{"id":90726,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"66:10:149","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":90729,"nodeType":"ImportDirective","src":"116:66:149","nodes":[],"absolutePath":"src/universal/StandardBridge.sol","file":"src/universal/StandardBridge.sol","nameLocation":"-1:-1:-1","scope":91147,"sourceUnit":111676,"symbolAliases":[{"foreign":{"id":90728,"name":"StandardBridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111675,"src":"125:14:149","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":90731,"nodeType":"ImportDirective","src":"183:52:149","nodes":[],"absolutePath":"src/universal/ISemver.sol","file":"src/universal/ISemver.sol","nameLocation":"-1:-1:-1","scope":91147,"sourceUnit":109418,"symbolAliases":[{"foreign":{"id":90730,"name":"ISemver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109417,"src":"192:7:149","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":90733,"nodeType":"ImportDirective","src":"236:80:149","nodes":[],"absolutePath":"src/universal/OptimismMintableERC20.sol","file":"src/universal/OptimismMintableERC20.sol","nameLocation":"-1:-1:-1","scope":91147,"sourceUnit":109646,"symbolAliases":[{"foreign":{"id":90732,"name":"OptimismMintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109645,"src":"245:21:149","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":90735,"nodeType":"ImportDirective","src":"317:78:149","nodes":[],"absolutePath":"src/universal/CrossDomainMessenger.sol","file":"src/universal/CrossDomainMessenger.sol","nameLocation":"-1:-1:-1","scope":91147,"sourceUnit":108889,"symbolAliases":[{"foreign":{"id":90734,"name":"CrossDomainMessenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108888,"src":"326:20:149","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":90737,"nodeType":"ImportDirective","src":"396:56:149","nodes":[],"absolutePath":"src/libraries/Constants.sol","file":"src/libraries/Constants.sol","nameLocation":"-1:-1:-1","scope":91147,"sourceUnit":103097,"symbolAliases":[{"foreign":{"id":90736,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103096,"src":"405:9:149","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":91146,"nodeType":"ContractDefinition","src":"1141:9307:149","nodes":[{"id":90757,"nodeType":"EventDefinition","src":"1646:197:149","nodes":[],"anonymous":false,"documentation":{"id":90743,"nodeType":"StructuredDocumentation","src":"1200:441:149","text":"@custom:legacy\n @notice Emitted whenever a withdrawal from L2 to L1 is initiated.\n @param l1Token Address of the token on L1.\n @param l2Token Address of the corresponding token on L2.\n @param from Address of the withdrawer.\n @param to Address of the recipient on L1.\n @param amount Amount of the ERC20 withdrawn.\n @param extraData Extra data attached to the withdrawal."},"eventSelector":"73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e","name":"WithdrawalInitiated","nameLocation":"1652:19:149","parameters":{"id":90756,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90745,"indexed":true,"mutability":"mutable","name":"l1Token","nameLocation":"1697:7:149","nodeType":"VariableDeclaration","scope":90757,"src":"1681:23:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90744,"name":"address","nodeType":"ElementaryTypeName","src":"1681:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90747,"indexed":true,"mutability":"mutable","name":"l2Token","nameLocation":"1730:7:149","nodeType":"VariableDeclaration","scope":90757,"src":"1714:23:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90746,"name":"address","nodeType":"ElementaryTypeName","src":"1714:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90749,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"1763:4:149","nodeType":"VariableDeclaration","scope":90757,"src":"1747:20:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90748,"name":"address","nodeType":"ElementaryTypeName","src":"1747:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90751,"indexed":false,"mutability":"mutable","name":"to","nameLocation":"1785:2:149","nodeType":"VariableDeclaration","scope":90757,"src":"1777:10:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90750,"name":"address","nodeType":"ElementaryTypeName","src":"1777:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90753,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1805:6:149","nodeType":"VariableDeclaration","scope":90757,"src":"1797:14:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90752,"name":"uint256","nodeType":"ElementaryTypeName","src":"1797:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":90755,"indexed":false,"mutability":"mutable","name":"extraData","nameLocation":"1827:9:149","nodeType":"VariableDeclaration","scope":90757,"src":"1821:15:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":90754,"name":"bytes","nodeType":"ElementaryTypeName","src":"1821:5:149","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1671:171:149"}},{"id":90772,"nodeType":"EventDefinition","src":"2281:194:149","nodes":[],"anonymous":false,"documentation":{"id":90758,"nodeType":"StructuredDocumentation","src":"1849:427:149","text":"@custom:legacy\n @notice Emitted whenever an ERC20 deposit is finalized.\n @param l1Token Address of the token on L1.\n @param l2Token Address of the corresponding token on L2.\n @param from Address of the depositor.\n @param to Address of the recipient on L2.\n @param amount Amount of the ERC20 deposited.\n @param extraData Extra data attached to the deposit."},"eventSelector":"b0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89","name":"DepositFinalized","nameLocation":"2287:16:149","parameters":{"id":90771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90760,"indexed":true,"mutability":"mutable","name":"l1Token","nameLocation":"2329:7:149","nodeType":"VariableDeclaration","scope":90772,"src":"2313:23:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90759,"name":"address","nodeType":"ElementaryTypeName","src":"2313:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90762,"indexed":true,"mutability":"mutable","name":"l2Token","nameLocation":"2362:7:149","nodeType":"VariableDeclaration","scope":90772,"src":"2346:23:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90761,"name":"address","nodeType":"ElementaryTypeName","src":"2346:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90764,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"2395:4:149","nodeType":"VariableDeclaration","scope":90772,"src":"2379:20:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90763,"name":"address","nodeType":"ElementaryTypeName","src":"2379:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90766,"indexed":false,"mutability":"mutable","name":"to","nameLocation":"2417:2:149","nodeType":"VariableDeclaration","scope":90772,"src":"2409:10:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90765,"name":"address","nodeType":"ElementaryTypeName","src":"2409:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90768,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2437:6:149","nodeType":"VariableDeclaration","scope":90772,"src":"2429:14:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90767,"name":"uint256","nodeType":"ElementaryTypeName","src":"2429:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":90770,"indexed":false,"mutability":"mutable","name":"extraData","nameLocation":"2459:9:149","nodeType":"VariableDeclaration","scope":90772,"src":"2453:15:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":90769,"name":"bytes","nodeType":"ElementaryTypeName","src":"2453:5:149","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2303:171:149"}},{"id":90776,"nodeType":"VariableDeclaration","src":"2510:40:149","nodes":[],"baseFunctions":[109416],"constant":true,"documentation":{"id":90773,"nodeType":"StructuredDocumentation","src":"2481:24:149","text":"@custom:semver 1.8.0"},"functionSelector":"54fd4d50","mutability":"constant","name":"version","nameLocation":"2533:7:149","scope":91146,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":90774,"name":"string","nodeType":"ElementaryTypeName","src":"2510:6:149","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"312e382e30","id":90775,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2543:7:149","typeDescriptions":{"typeIdentifier":"t_stringliteral_cd02a4b5da981b4c403351c949b2ca4bdb2fb4b72b50891f7eb106d3eb7049e9","typeString":"literal_string \"1.8.0\""},"value":"1.8.0"},"visibility":"public"},{"id":90795,"nodeType":"FunctionDefinition","src":"2615:113:149","nodes":[],"body":{"id":90794,"nodeType":"Block","src":"2646:82:149","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"hexValue":"30","id":90788,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2714:1:149","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":90787,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2706:7:149","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":90786,"name":"address","nodeType":"ElementaryTypeName","src":"2706:7:149","typeDescriptions":{}}},"id":90789,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2706:10:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":90785,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2698:8:149","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":90784,"name":"address","nodeType":"ElementaryTypeName","src":"2698:8:149","stateMutability":"payable","typeDescriptions":{}}},"id":90790,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2698:19:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":90783,"name":"StandardBridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111675,"src":"2683:14:149","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StandardBridge_$111675_$","typeString":"type(contract StandardBridge)"}},"id":90791,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2683:35:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_StandardBridge_$111675","typeString":"contract StandardBridge"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_StandardBridge_$111675","typeString":"contract StandardBridge"}],"id":90782,"name":"initialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90813,"src":"2656:10:149","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_StandardBridge_$111675_$returns$__$","typeString":"function (contract StandardBridge)"}},"id":90792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["_otherBridge"],"nodeType":"FunctionCall","src":"2656:65:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90793,"nodeType":"ExpressionStatement","src":"2656:65:149"}]},"documentation":{"id":90777,"nodeType":"StructuredDocumentation","src":"2557:53:149","text":"@notice Constructs the L2StandardBridge contract."},"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":90780,"kind":"baseConstructorSpecifier","modifierName":{"id":90779,"name":"StandardBridge","nodeType":"IdentifierPath","referencedDeclaration":111675,"src":"2629:14:149"},"nodeType":"ModifierInvocation","src":"2629:16:149"}],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":90778,"nodeType":"ParameterList","parameters":[],"src":"2626:2:149"},"returnParameters":{"id":90781,"nodeType":"ParameterList","parameters":[],"src":"2646:0:149"},"scope":91146,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":90813,"nodeType":"FunctionDefinition","src":"2849:242:149","nodes":[],"body":{"id":90812,"nodeType":"Block","src":"2917:174:149","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":90806,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"2996:10:149","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Predeploys_$104124_$","typeString":"type(library Predeploys)"}},"id":90807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"L2_CROSS_DOMAIN_MESSENGER","nodeType":"MemberAccess","referencedDeclaration":104004,"src":"2996:36:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":90805,"name":"CrossDomainMessenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":108888,"src":"2975:20:149","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CrossDomainMessenger_$108888_$","typeString":"type(contract CrossDomainMessenger)"}},"id":90808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2975:58:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"}},{"id":90809,"name":"_otherBridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90799,"src":"3061:12:149","typeDescriptions":{"typeIdentifier":"t_contract$_StandardBridge_$111675","typeString":"contract StandardBridge"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CrossDomainMessenger_$108888","typeString":"contract CrossDomainMessenger"},{"typeIdentifier":"t_contract$_StandardBridge_$111675","typeString":"contract StandardBridge"}],"id":90804,"name":"__StandardBridge_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111080,"src":"2927:21:149","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_CrossDomainMessenger_$108888_$_t_contract$_StandardBridge_$111675_$returns$__$","typeString":"function (contract CrossDomainMessenger,contract StandardBridge)"}},"id":90810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["_messenger","_otherBridge"],"nodeType":"FunctionCall","src":"2927:157:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90811,"nodeType":"ExpressionStatement","src":"2927:157:149"}]},"documentation":{"id":90796,"nodeType":"StructuredDocumentation","src":"2734:110:149","text":"@notice Initializer.\n @param _otherBridge Contract for the corresponding bridge on the other chain."},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":90802,"kind":"modifierInvocation","modifierName":{"id":90801,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":49598,"src":"2905:11:149"},"nodeType":"ModifierInvocation","src":"2905:11:149"}],"name":"initialize","nameLocation":"2858:10:149","parameters":{"id":90800,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90799,"mutability":"mutable","name":"_otherBridge","nameLocation":"2884:12:149","nodeType":"VariableDeclaration","scope":90813,"src":"2869:27:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_StandardBridge_$111675","typeString":"contract StandardBridge"},"typeName":{"id":90798,"nodeType":"UserDefinedTypeName","pathNode":{"id":90797,"name":"StandardBridge","nodeType":"IdentifierPath","referencedDeclaration":111675,"src":"2869:14:149"},"referencedDeclaration":111675,"src":"2869:14:149","typeDescriptions":{"typeIdentifier":"t_contract$_StandardBridge_$111675","typeString":"contract StandardBridge"}},"visibility":"internal"}],"src":"2868:29:149"},"returnParameters":{"id":90803,"nodeType":"ParameterList","parameters":[],"src":"2917:0:149"},"scope":91146,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":90837,"nodeType":"FunctionDefinition","src":"3174:204:149","nodes":[],"body":{"id":90836,"nodeType":"Block","src":"3218:160:149","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":90821,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"3261:10:149","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Predeploys_$104124_$","typeString":"type(library Predeploys)"}},"id":90822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"LEGACY_ERC20_ETH","nodeType":"MemberAccess","referencedDeclaration":104047,"src":"3261:27:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":90823,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3290:3:149","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":90824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3290:10:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":90825,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3302:3:149","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":90826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3302:10:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":90827,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3314:3:149","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":90828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"3314:9:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":90829,"name":"RECEIVE_DEFAULT_GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110941,"src":"3325:25:149","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"arguments":[{"hexValue":"","id":90832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3358:2:149","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":90831,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3352:5:149","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":90830,"name":"bytes","nodeType":"ElementaryTypeName","src":"3352:5:149","typeDescriptions":{}}},"id":90833,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3352:9:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":90820,"name":"_initiateWithdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90997,"src":"3228:19:149","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,uint256,uint32,bytes memory)"}},"id":90834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3228:143:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90835,"nodeType":"ExpressionStatement","src":"3228:143:149"}]},"baseFunctions":[111084],"documentation":{"id":90814,"nodeType":"StructuredDocumentation","src":"3097:72:149","text":"@notice Allows EOAs to bridge ETH by sending directly to the bridge."},"implemented":true,"kind":"receive","modifiers":[{"id":90818,"kind":"modifierInvocation","modifierName":{"id":90817,"name":"onlyEOA","nodeType":"IdentifierPath","referencedDeclaration":111034,"src":"3210:7:149"},"nodeType":"ModifierInvocation","src":"3210:7:149"}],"name":"","nameLocation":"-1:-1:-1","overrides":{"id":90816,"nodeType":"OverrideSpecifier","overrides":[],"src":"3201:8:149"},"parameters":{"id":90815,"nodeType":"ParameterList","parameters":[],"src":"3181:2:149"},"returnParameters":{"id":90819,"nodeType":"ParameterList","parameters":[],"src":"3218:0:149"},"scope":91146,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":90863,"nodeType":"FunctionDefinition","src":"3897:313:149","nodes":[],"body":{"id":90862,"nodeType":"Block","src":"4105:105:149","nodes":[],"statements":[{"expression":{"arguments":[{"id":90852,"name":"_l2Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90840,"src":"4135:8:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":90853,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4145:3:149","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":90854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"4145:10:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":90855,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4157:3:149","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":90856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"4157:10:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90857,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90842,"src":"4169:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":90858,"name":"_minGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90844,"src":"4178:12:149","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":90859,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90846,"src":"4192:10:149","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":90851,"name":"_initiateWithdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90997,"src":"4115:19:149","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,uint256,uint32,bytes memory)"}},"id":90860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4115:88:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90861,"nodeType":"ExpressionStatement","src":"4115:88:149"}]},"documentation":{"id":90838,"nodeType":"StructuredDocumentation","src":"3384:508:149","text":"@custom:legacy\n @notice Initiates a withdrawal from L2 to L1.\n This function only works with OptimismMintableERC20 tokens or ether. Use the\n `bridgeERC20` function to bridge native L2 tokens to L1.\n @param _l2Token Address of the L2 token to withdraw.\n @param _amount Amount of the L2 token to withdraw.\n @param _minGasLimit Minimum gas limit to use for the transaction.\n @param _extraData Extra data attached to the withdrawal."},"functionSelector":"32b7006d","implemented":true,"kind":"function","modifiers":[{"id":90849,"kind":"modifierInvocation","modifierName":{"id":90848,"name":"onlyEOA","nodeType":"IdentifierPath","referencedDeclaration":111034,"src":"4093:7:149"},"nodeType":"ModifierInvocation","src":"4093:7:149"}],"name":"withdraw","nameLocation":"3906:8:149","parameters":{"id":90847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90840,"mutability":"mutable","name":"_l2Token","nameLocation":"3932:8:149","nodeType":"VariableDeclaration","scope":90863,"src":"3924:16:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90839,"name":"address","nodeType":"ElementaryTypeName","src":"3924:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90842,"mutability":"mutable","name":"_amount","nameLocation":"3958:7:149","nodeType":"VariableDeclaration","scope":90863,"src":"3950:15:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90841,"name":"uint256","nodeType":"ElementaryTypeName","src":"3950:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":90844,"mutability":"mutable","name":"_minGasLimit","nameLocation":"3982:12:149","nodeType":"VariableDeclaration","scope":90863,"src":"3975:19:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":90843,"name":"uint32","nodeType":"ElementaryTypeName","src":"3975:6:149","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":90846,"mutability":"mutable","name":"_extraData","nameLocation":"4019:10:149","nodeType":"VariableDeclaration","scope":90863,"src":"4004:25:149","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":90845,"name":"bytes","nodeType":"ElementaryTypeName","src":"4004:5:149","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3914:121:149"},"returnParameters":{"id":90850,"nodeType":"ParameterList","parameters":[],"src":"4105:0:149"},"scope":91146,"stateMutability":"payable","virtual":true,"visibility":"external"},{"id":90888,"nodeType":"FunctionDefinition","src":"5197:313:149","nodes":[],"body":{"id":90887,"nodeType":"Block","src":"5412:98:149","nodes":[],"statements":[{"expression":{"arguments":[{"id":90878,"name":"_l2Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90866,"src":"5442:8:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":90879,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5452:3:149","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":90880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5452:10:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90881,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90868,"src":"5464:3:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90882,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90870,"src":"5469:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":90883,"name":"_minGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90872,"src":"5478:12:149","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":90884,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90874,"src":"5492:10:149","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":90877,"name":"_initiateWithdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90997,"src":"5422:19:149","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,uint256,uint32,bytes memory)"}},"id":90885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5422:81:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90886,"nodeType":"ExpressionStatement","src":"5422:81:149"}]},"documentation":{"id":90864,"nodeType":"StructuredDocumentation","src":"4216:976:149","text":"@custom:legacy\n @notice Initiates a withdrawal from L2 to L1 to a target account on L1.\n Note that if ETH is sent to a contract on L1 and the call fails, then that ETH will\n be locked in the L1StandardBridge. ETH may be recoverable if the call can be\n successfully replayed by increasing the amount of gas supplied to the call. If the\n call will fail for any amount of gas, then the ETH will be locked permanently.\n This function only works with OptimismMintableERC20 tokens or ether. Use the\n `bridgeERC20To` function to bridge native L2 tokens to L1.\n @param _l2Token Address of the L2 token to withdraw.\n @param _to Recipient account on L1.\n @param _amount Amount of the L2 token to withdraw.\n @param _minGasLimit Minimum gas limit to use for the transaction.\n @param _extraData Extra data attached to the withdrawal."},"functionSelector":"a3a79548","implemented":true,"kind":"function","modifiers":[],"name":"withdrawTo","nameLocation":"5206:10:149","parameters":{"id":90875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90866,"mutability":"mutable","name":"_l2Token","nameLocation":"5234:8:149","nodeType":"VariableDeclaration","scope":90888,"src":"5226:16:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90865,"name":"address","nodeType":"ElementaryTypeName","src":"5226:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90868,"mutability":"mutable","name":"_to","nameLocation":"5260:3:149","nodeType":"VariableDeclaration","scope":90888,"src":"5252:11:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90867,"name":"address","nodeType":"ElementaryTypeName","src":"5252:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90870,"mutability":"mutable","name":"_amount","nameLocation":"5281:7:149","nodeType":"VariableDeclaration","scope":90888,"src":"5273:15:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90869,"name":"uint256","nodeType":"ElementaryTypeName","src":"5273:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":90872,"mutability":"mutable","name":"_minGasLimit","nameLocation":"5305:12:149","nodeType":"VariableDeclaration","scope":90888,"src":"5298:19:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":90871,"name":"uint32","nodeType":"ElementaryTypeName","src":"5298:6:149","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":90874,"mutability":"mutable","name":"_extraData","nameLocation":"5342:10:149","nodeType":"VariableDeclaration","scope":90888,"src":"5327:25:149","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":90873,"name":"bytes","nodeType":"ElementaryTypeName","src":"5327:5:149","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5216:142:149"},"returnParameters":{"id":90876,"nodeType":"ParameterList","parameters":[],"src":"5412:0:149"},"scope":91146,"stateMutability":"payable","virtual":true,"visibility":"external"},{"id":90935,"nodeType":"FunctionDefinition","src":"6087:505:149","nodes":[],"body":{"id":90934,"nodeType":"Block","src":"6327:265:149","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":90914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":90909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":90904,"name":"_l1Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90891,"src":"6341:8:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":90907,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6361:1:149","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":90906,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6353:7:149","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":90905,"name":"address","nodeType":"ElementaryTypeName","src":"6353:7:149","typeDescriptions":{}}},"id":90908,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6353:10:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6341:22:149","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":90913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":90910,"name":"_l2Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90893,"src":"6367:8:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":90911,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"6379:10:149","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Predeploys_$104124_$","typeString":"type(library Predeploys)"}},"id":90912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"LEGACY_ERC20_ETH","nodeType":"MemberAccess","referencedDeclaration":104047,"src":"6379:27:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6367:39:149","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6341:65:149","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":90932,"nodeType":"Block","src":"6489:97:149","statements":[{"expression":{"arguments":[{"id":90924,"name":"_l2Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90893,"src":"6523:8:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90925,"name":"_l1Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90891,"src":"6533:8:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90926,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90895,"src":"6543:5:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90927,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90897,"src":"6550:3:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90928,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90899,"src":"6555:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":90929,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90901,"src":"6564:10:149","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":90923,"name":"finalizeBridgeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111367,"src":"6503:19:149","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function (address,address,address,address,uint256,bytes calldata)"}},"id":90930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6503:72:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90931,"nodeType":"ExpressionStatement","src":"6503:72:149"}]},"id":90933,"nodeType":"IfStatement","src":"6337:249:149","trueBody":{"id":90922,"nodeType":"Block","src":"6408:75:149","statements":[{"expression":{"arguments":[{"id":90916,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90895,"src":"6440:5:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90917,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90897,"src":"6447:3:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90918,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90899,"src":"6452:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":90919,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90901,"src":"6461:10:149","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":90915,"name":"finalizeBridgeETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111287,"src":"6422:17:149","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes calldata)"}},"id":90920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6422:50:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90921,"nodeType":"ExpressionStatement","src":"6422:50:149"}]}}]},"documentation":{"id":90889,"nodeType":"StructuredDocumentation","src":"5516:566:149","text":"@custom:legacy\n @notice Finalizes a deposit from L1 to L2. To finalize a deposit of ether, use address(0)\n and the l1Token and the Legacy ERC20 ether predeploy address as the l2Token.\n @param _l1Token Address of the L1 token to deposit.\n @param _l2Token Address of the corresponding L2 token.\n @param _from Address of the depositor.\n @param _to Address of the recipient.\n @param _amount Amount of the tokens being deposited.\n @param _extraData Extra data attached to the deposit."},"functionSelector":"662a633a","implemented":true,"kind":"function","modifiers":[],"name":"finalizeDeposit","nameLocation":"6096:15:149","parameters":{"id":90902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90891,"mutability":"mutable","name":"_l1Token","nameLocation":"6129:8:149","nodeType":"VariableDeclaration","scope":90935,"src":"6121:16:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90890,"name":"address","nodeType":"ElementaryTypeName","src":"6121:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90893,"mutability":"mutable","name":"_l2Token","nameLocation":"6155:8:149","nodeType":"VariableDeclaration","scope":90935,"src":"6147:16:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90892,"name":"address","nodeType":"ElementaryTypeName","src":"6147:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90895,"mutability":"mutable","name":"_from","nameLocation":"6181:5:149","nodeType":"VariableDeclaration","scope":90935,"src":"6173:13:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90894,"name":"address","nodeType":"ElementaryTypeName","src":"6173:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90897,"mutability":"mutable","name":"_to","nameLocation":"6204:3:149","nodeType":"VariableDeclaration","scope":90935,"src":"6196:11:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90896,"name":"address","nodeType":"ElementaryTypeName","src":"6196:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90899,"mutability":"mutable","name":"_amount","nameLocation":"6225:7:149","nodeType":"VariableDeclaration","scope":90935,"src":"6217:15:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90898,"name":"uint256","nodeType":"ElementaryTypeName","src":"6217:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":90901,"mutability":"mutable","name":"_extraData","nameLocation":"6257:10:149","nodeType":"VariableDeclaration","scope":90935,"src":"6242:25:149","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":90900,"name":"bytes","nodeType":"ElementaryTypeName","src":"6242:5:149","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6111:162:149"},"returnParameters":{"id":90903,"nodeType":"ParameterList","parameters":[],"src":"6327:0:149"},"scope":91146,"stateMutability":"payable","virtual":true,"visibility":"external"},{"id":90947,"nodeType":"FunctionDefinition","src":"6764:101:149","nodes":[],"body":{"id":90946,"nodeType":"Block","src":"6821:44:149","nodes":[],"statements":[{"expression":{"arguments":[{"id":90943,"name":"otherBridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110962,"src":"6846:11:149","typeDescriptions":{"typeIdentifier":"t_contract$_StandardBridge_$111675","typeString":"contract StandardBridge"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_StandardBridge_$111675","typeString":"contract StandardBridge"}],"id":90942,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6838:7:149","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":90941,"name":"address","nodeType":"ElementaryTypeName","src":"6838:7:149","typeDescriptions":{}}},"id":90944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6838:20:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":90940,"id":90945,"nodeType":"Return","src":"6831:27:149"}]},"documentation":{"id":90936,"nodeType":"StructuredDocumentation","src":"6598:161:149","text":"@custom:legacy\n @notice Retrieves the access of the corresponding L1 bridge contract.\n @return Address of the corresponding L1 bridge contract."},"functionSelector":"36c717c1","implemented":true,"kind":"function","modifiers":[],"name":"l1TokenBridge","nameLocation":"6773:13:149","parameters":{"id":90937,"nodeType":"ParameterList","parameters":[],"src":"6786:2:149"},"returnParameters":{"id":90940,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90939,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":90947,"src":"6812:7:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90938,"name":"address","nodeType":"ElementaryTypeName","src":"6812:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6811:9:149"},"scope":91146,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":90997,"nodeType":"FunctionDefinition","src":"7372:554:149","nodes":[],"body":{"id":90996,"nodeType":"Block","src":"7585:341:149","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":90966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":90963,"name":"_l2Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90950,"src":"7599:8:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":90964,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"7611:10:149","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Predeploys_$104124_$","typeString":"type(library Predeploys)"}},"id":90965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"LEGACY_ERC20_ETH","nodeType":"MemberAccess","referencedDeclaration":104047,"src":"7611:27:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7599:39:149","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":90994,"nodeType":"Block","src":"7736:184:149","statements":[{"assignments":[90977],"declarations":[{"constant":false,"id":90977,"mutability":"mutable","name":"l1Token","nameLocation":"7758:7:149","nodeType":"VariableDeclaration","scope":90994,"src":"7750:15:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90976,"name":"address","nodeType":"ElementaryTypeName","src":"7750:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":90983,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":90979,"name":"_l2Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90950,"src":"7790:8:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":90978,"name":"OptimismMintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109645,"src":"7768:21:149","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_OptimismMintableERC20_$109645_$","typeString":"type(contract OptimismMintableERC20)"}},"id":90980,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7768:31:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_OptimismMintableERC20_$109645","typeString":"contract OptimismMintableERC20"}},"id":90981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"l1Token","nodeType":"MemberAccess","referencedDeclaration":109607,"src":"7768:39:149","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":90982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7768:41:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"7750:59:149"},{"expression":{"arguments":[{"id":90985,"name":"_l2Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90950,"src":"7844:8:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90986,"name":"l1Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90977,"src":"7854:7:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90987,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90952,"src":"7863:5:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90988,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90954,"src":"7870:3:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90989,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90956,"src":"7875:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":90990,"name":"_minGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90958,"src":"7884:12:149","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":90991,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90960,"src":"7898:10:149","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":90984,"name":"_initiateBridgeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111517,"src":"7823:20:149","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,address,uint256,uint32,bytes memory)"}},"id":90992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7823:86:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90993,"nodeType":"ExpressionStatement","src":"7823:86:149"}]},"id":90995,"nodeType":"IfStatement","src":"7595:325:149","trueBody":{"id":90975,"nodeType":"Block","src":"7640:90:149","statements":[{"expression":{"arguments":[{"id":90968,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90952,"src":"7673:5:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90969,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90954,"src":"7680:3:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":90970,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90956,"src":"7685:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":90971,"name":"_minGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90958,"src":"7694:12:149","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":90972,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90960,"src":"7708:10:149","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":90967,"name":"_initiateBridgeETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111419,"src":"7654:18:149","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,uint32,bytes memory)"}},"id":90973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7654:65:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":90974,"nodeType":"ExpressionStatement","src":"7654:65:149"}]}}]},"documentation":{"id":90948,"nodeType":"StructuredDocumentation","src":"6871:496:149","text":"@custom:legacy\n @notice Internal function to initiate a withdrawal from L2 to L1 to a target account on L1.\n @param _l2Token Address of the L2 token to withdraw.\n @param _from Address of the withdrawer.\n @param _to Recipient account on L1.\n @param _amount Amount of the L2 token to withdraw.\n @param _minGasLimit Minimum gas limit to use for the transaction.\n @param _extraData Extra data attached to the withdrawal."},"implemented":true,"kind":"function","modifiers":[],"name":"_initiateWithdrawal","nameLocation":"7381:19:149","parameters":{"id":90961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90950,"mutability":"mutable","name":"_l2Token","nameLocation":"7418:8:149","nodeType":"VariableDeclaration","scope":90997,"src":"7410:16:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90949,"name":"address","nodeType":"ElementaryTypeName","src":"7410:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90952,"mutability":"mutable","name":"_from","nameLocation":"7444:5:149","nodeType":"VariableDeclaration","scope":90997,"src":"7436:13:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90951,"name":"address","nodeType":"ElementaryTypeName","src":"7436:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90954,"mutability":"mutable","name":"_to","nameLocation":"7467:3:149","nodeType":"VariableDeclaration","scope":90997,"src":"7459:11:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90953,"name":"address","nodeType":"ElementaryTypeName","src":"7459:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90956,"mutability":"mutable","name":"_amount","nameLocation":"7488:7:149","nodeType":"VariableDeclaration","scope":90997,"src":"7480:15:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90955,"name":"uint256","nodeType":"ElementaryTypeName","src":"7480:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":90958,"mutability":"mutable","name":"_minGasLimit","nameLocation":"7512:12:149","nodeType":"VariableDeclaration","scope":90997,"src":"7505:19:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":90957,"name":"uint32","nodeType":"ElementaryTypeName","src":"7505:6:149","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":90960,"mutability":"mutable","name":"_extraData","nameLocation":"7547:10:149","nodeType":"VariableDeclaration","scope":90997,"src":"7534:23:149","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":90959,"name":"bytes","nodeType":"ElementaryTypeName","src":"7534:5:149","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7400:163:149"},"returnParameters":{"id":90962,"nodeType":"ParameterList","parameters":[],"src":"7585:0:149"},"scope":91146,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":91033,"nodeType":"FunctionDefinition","src":"8154:366:149","nodes":[],"body":{"id":91032,"nodeType":"Block","src":"8333:187:149","nodes":[],"statements":[{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":91013,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8376:1:149","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":91012,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8368:7:149","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":91011,"name":"address","nodeType":"ElementaryTypeName","src":"8368:7:149","typeDescriptions":{}}},"id":91014,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8368:10:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":91015,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"8380:10:149","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Predeploys_$104124_$","typeString":"type(library Predeploys)"}},"id":91016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"LEGACY_ERC20_ETH","nodeType":"MemberAccess","referencedDeclaration":104047,"src":"8380:27:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91017,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91000,"src":"8409:5:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91018,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91002,"src":"8416:3:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91019,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91004,"src":"8421:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":91020,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91006,"src":"8430:10:149","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":91010,"name":"WithdrawalInitiated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90757,"src":"8348:19:149","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,address,uint256,bytes memory)"}},"id":91021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8348:93:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":91022,"nodeType":"EmitStatement","src":"8343:98:149"},{"expression":{"arguments":[{"id":91026,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91000,"src":"8481:5:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91027,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91002,"src":"8488:3:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91028,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91004,"src":"8493:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":91029,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91006,"src":"8502:10:149","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":91023,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"8451:5:149","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_L2StandardBridge_$91146_$","typeString":"type(contract super L2StandardBridge)"}},"id":91025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_emitETHBridgeInitiated","nodeType":"MemberAccess","referencedDeclaration":111602,"src":"8451:29:149","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory)"}},"id":91030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8451:62:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":91031,"nodeType":"ExpressionStatement","src":"8451:62:149"}]},"baseFunctions":[111602],"documentation":{"id":90998,"nodeType":"StructuredDocumentation","src":"7932:217:149","text":"@notice Emits the legacy WithdrawalInitiated event followed by the ETHBridgeInitiated event.\n This is necessary for backwards compatibility with the legacy bridge.\n @inheritdoc StandardBridge"},"implemented":true,"kind":"function","modifiers":[],"name":"_emitETHBridgeInitiated","nameLocation":"8163:23:149","overrides":{"id":91008,"nodeType":"OverrideSpecifier","overrides":[],"src":"8320:8:149"},"parameters":{"id":91007,"nodeType":"ParameterList","parameters":[{"constant":false,"id":91000,"mutability":"mutable","name":"_from","nameLocation":"8204:5:149","nodeType":"VariableDeclaration","scope":91033,"src":"8196:13:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90999,"name":"address","nodeType":"ElementaryTypeName","src":"8196:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":91002,"mutability":"mutable","name":"_to","nameLocation":"8227:3:149","nodeType":"VariableDeclaration","scope":91033,"src":"8219:11:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":91001,"name":"address","nodeType":"ElementaryTypeName","src":"8219:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":91004,"mutability":"mutable","name":"_amount","nameLocation":"8248:7:149","nodeType":"VariableDeclaration","scope":91033,"src":"8240:15:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":91003,"name":"uint256","nodeType":"ElementaryTypeName","src":"8240:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":91006,"mutability":"mutable","name":"_extraData","nameLocation":"8278:10:149","nodeType":"VariableDeclaration","scope":91033,"src":"8265:23:149","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":91005,"name":"bytes","nodeType":"ElementaryTypeName","src":"8265:5:149","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8186:108:149"},"returnParameters":{"id":91009,"nodeType":"ParameterList","parameters":[],"src":"8333:0:149"},"scope":91146,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":91069,"nodeType":"FunctionDefinition","src":"8745:363:149","nodes":[],"body":{"id":91068,"nodeType":"Block","src":"8924:184:149","nodes":[],"statements":[{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":91049,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8964:1:149","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":91048,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8956:7:149","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":91047,"name":"address","nodeType":"ElementaryTypeName","src":"8956:7:149","typeDescriptions":{}}},"id":91050,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8956:10:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":91051,"name":"Predeploys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104124,"src":"8968:10:149","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Predeploys_$104124_$","typeString":"type(library Predeploys)"}},"id":91052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"LEGACY_ERC20_ETH","nodeType":"MemberAccess","referencedDeclaration":104047,"src":"8968:27:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91053,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91036,"src":"8997:5:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91054,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91038,"src":"9004:3:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91055,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91040,"src":"9009:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":91056,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91042,"src":"9018:10:149","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":91046,"name":"DepositFinalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90772,"src":"8939:16:149","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,address,uint256,bytes memory)"}},"id":91057,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8939:90:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":91058,"nodeType":"EmitStatement","src":"8934:95:149"},{"expression":{"arguments":[{"id":91062,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91036,"src":"9069:5:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91063,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91038,"src":"9076:3:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91064,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91040,"src":"9081:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":91065,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91042,"src":"9090:10:149","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":91059,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"9039:5:149","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_L2StandardBridge_$91146_$","typeString":"type(contract super L2StandardBridge)"}},"id":91061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_emitETHBridgeFinalized","nodeType":"MemberAccess","referencedDeclaration":111622,"src":"9039:29:149","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory)"}},"id":91066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9039:62:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":91067,"nodeType":"ExpressionStatement","src":"9039:62:149"}]},"baseFunctions":[111622],"documentation":{"id":91034,"nodeType":"StructuredDocumentation","src":"8526:214:149","text":"@notice Emits the legacy DepositFinalized event followed by the ETHBridgeFinalized event.\n This is necessary for backwards compatibility with the legacy bridge.\n @inheritdoc StandardBridge"},"implemented":true,"kind":"function","modifiers":[],"name":"_emitETHBridgeFinalized","nameLocation":"8754:23:149","overrides":{"id":91044,"nodeType":"OverrideSpecifier","overrides":[],"src":"8911:8:149"},"parameters":{"id":91043,"nodeType":"ParameterList","parameters":[{"constant":false,"id":91036,"mutability":"mutable","name":"_from","nameLocation":"8795:5:149","nodeType":"VariableDeclaration","scope":91069,"src":"8787:13:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":91035,"name":"address","nodeType":"ElementaryTypeName","src":"8787:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":91038,"mutability":"mutable","name":"_to","nameLocation":"8818:3:149","nodeType":"VariableDeclaration","scope":91069,"src":"8810:11:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":91037,"name":"address","nodeType":"ElementaryTypeName","src":"8810:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":91040,"mutability":"mutable","name":"_amount","nameLocation":"8839:7:149","nodeType":"VariableDeclaration","scope":91069,"src":"8831:15:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":91039,"name":"uint256","nodeType":"ElementaryTypeName","src":"8831:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":91042,"mutability":"mutable","name":"_extraData","nameLocation":"8869:10:149","nodeType":"VariableDeclaration","scope":91069,"src":"8856:23:149","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":91041,"name":"bytes","nodeType":"ElementaryTypeName","src":"8856:5:149","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8777:108:149"},"returnParameters":{"id":91045,"nodeType":"ParameterList","parameters":[],"src":"8924:0:149"},"scope":91146,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":91107,"nodeType":"FunctionDefinition","src":"9338:442:149","nodes":[],"body":{"id":91106,"nodeType":"Block","src":"9578:202:149","nodes":[],"statements":[{"eventCall":{"arguments":[{"id":91087,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91074,"src":"9613:12:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91088,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91072,"src":"9627:11:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91089,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91076,"src":"9640:5:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91090,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91078,"src":"9647:3:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91091,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91080,"src":"9652:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":91092,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91082,"src":"9661:10:149","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":91086,"name":"WithdrawalInitiated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90757,"src":"9593:19:149","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,address,uint256,bytes memory)"}},"id":91093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9593:79:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":91094,"nodeType":"EmitStatement","src":"9588:84:149"},{"expression":{"arguments":[{"id":91098,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91072,"src":"9714:11:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91099,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91074,"src":"9727:12:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91100,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91076,"src":"9741:5:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91101,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91078,"src":"9748:3:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91102,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91080,"src":"9753:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":91103,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91082,"src":"9762:10:149","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":91095,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"9682:5:149","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_L2StandardBridge_$91146_$","typeString":"type(contract super L2StandardBridge)"}},"id":91097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_emitERC20BridgeInitiated","nodeType":"MemberAccess","referencedDeclaration":111648,"src":"9682:31:149","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,address,uint256,bytes memory)"}},"id":91104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9682:91:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":91105,"nodeType":"ExpressionStatement","src":"9682:91:149"}]},"baseFunctions":[111648],"documentation":{"id":91070,"nodeType":"StructuredDocumentation","src":"9114:219:149","text":"@notice Emits the legacy WithdrawalInitiated event followed by the ERC20BridgeInitiated\n event. This is necessary for backwards compatibility with the legacy bridge.\n @inheritdoc StandardBridge"},"implemented":true,"kind":"function","modifiers":[],"name":"_emitERC20BridgeInitiated","nameLocation":"9347:25:149","overrides":{"id":91084,"nodeType":"OverrideSpecifier","overrides":[],"src":"9565:8:149"},"parameters":{"id":91083,"nodeType":"ParameterList","parameters":[{"constant":false,"id":91072,"mutability":"mutable","name":"_localToken","nameLocation":"9390:11:149","nodeType":"VariableDeclaration","scope":91107,"src":"9382:19:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":91071,"name":"address","nodeType":"ElementaryTypeName","src":"9382:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":91074,"mutability":"mutable","name":"_remoteToken","nameLocation":"9419:12:149","nodeType":"VariableDeclaration","scope":91107,"src":"9411:20:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":91073,"name":"address","nodeType":"ElementaryTypeName","src":"9411:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":91076,"mutability":"mutable","name":"_from","nameLocation":"9449:5:149","nodeType":"VariableDeclaration","scope":91107,"src":"9441:13:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":91075,"name":"address","nodeType":"ElementaryTypeName","src":"9441:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":91078,"mutability":"mutable","name":"_to","nameLocation":"9472:3:149","nodeType":"VariableDeclaration","scope":91107,"src":"9464:11:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":91077,"name":"address","nodeType":"ElementaryTypeName","src":"9464:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":91080,"mutability":"mutable","name":"_amount","nameLocation":"9493:7:149","nodeType":"VariableDeclaration","scope":91107,"src":"9485:15:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":91079,"name":"uint256","nodeType":"ElementaryTypeName","src":"9485:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":91082,"mutability":"mutable","name":"_extraData","nameLocation":"9523:10:149","nodeType":"VariableDeclaration","scope":91107,"src":"9510:23:149","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":91081,"name":"bytes","nodeType":"ElementaryTypeName","src":"9510:5:149","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9372:167:149"},"returnParameters":{"id":91085,"nodeType":"ParameterList","parameters":[],"src":"9578:0:149"},"scope":91146,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":91145,"nodeType":"FunctionDefinition","src":"10007:439:149","nodes":[],"body":{"id":91144,"nodeType":"Block","src":"10247:199:149","nodes":[],"statements":[{"eventCall":{"arguments":[{"id":91125,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91112,"src":"10279:12:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91126,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91110,"src":"10293:11:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91127,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91114,"src":"10306:5:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91128,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91116,"src":"10313:3:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91129,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91118,"src":"10318:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":91130,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91120,"src":"10327:10:149","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":91124,"name":"DepositFinalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":90772,"src":"10262:16:149","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,address,uint256,bytes memory)"}},"id":91131,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10262:76:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":91132,"nodeType":"EmitStatement","src":"10257:81:149"},{"expression":{"arguments":[{"id":91136,"name":"_localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91110,"src":"10380:11:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91137,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91112,"src":"10393:12:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91138,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91114,"src":"10407:5:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91139,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91116,"src":"10414:3:149","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91140,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91118,"src":"10419:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":91141,"name":"_extraData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91120,"src":"10428:10:149","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":91133,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"10348:5:149","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_L2StandardBridge_$91146_$","typeString":"type(contract super L2StandardBridge)"}},"id":91135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_emitERC20BridgeFinalized","nodeType":"MemberAccess","referencedDeclaration":111674,"src":"10348:31:149","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,address,uint256,bytes memory)"}},"id":91142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10348:91:149","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":91143,"nodeType":"ExpressionStatement","src":"10348:91:149"}]},"baseFunctions":[111674],"documentation":{"id":91108,"nodeType":"StructuredDocumentation","src":"9786:216:149","text":"@notice Emits the legacy DepositFinalized event followed by the ERC20BridgeFinalized event.\n This is necessary for backwards compatibility with the legacy bridge.\n @inheritdoc StandardBridge"},"implemented":true,"kind":"function","modifiers":[],"name":"_emitERC20BridgeFinalized","nameLocation":"10016:25:149","overrides":{"id":91122,"nodeType":"OverrideSpecifier","overrides":[],"src":"10234:8:149"},"parameters":{"id":91121,"nodeType":"ParameterList","parameters":[{"constant":false,"id":91110,"mutability":"mutable","name":"_localToken","nameLocation":"10059:11:149","nodeType":"VariableDeclaration","scope":91145,"src":"10051:19:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":91109,"name":"address","nodeType":"ElementaryTypeName","src":"10051:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":91112,"mutability":"mutable","name":"_remoteToken","nameLocation":"10088:12:149","nodeType":"VariableDeclaration","scope":91145,"src":"10080:20:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":91111,"name":"address","nodeType":"ElementaryTypeName","src":"10080:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":91114,"mutability":"mutable","name":"_from","nameLocation":"10118:5:149","nodeType":"VariableDeclaration","scope":91145,"src":"10110:13:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":91113,"name":"address","nodeType":"ElementaryTypeName","src":"10110:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":91116,"mutability":"mutable","name":"_to","nameLocation":"10141:3:149","nodeType":"VariableDeclaration","scope":91145,"src":"10133:11:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":91115,"name":"address","nodeType":"ElementaryTypeName","src":"10133:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":91118,"mutability":"mutable","name":"_amount","nameLocation":"10162:7:149","nodeType":"VariableDeclaration","scope":91145,"src":"10154:15:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":91117,"name":"uint256","nodeType":"ElementaryTypeName","src":"10154:7:149","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":91120,"mutability":"mutable","name":"_extraData","nameLocation":"10192:10:149","nodeType":"VariableDeclaration","scope":91145,"src":"10179:23:149","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":91119,"name":"bytes","nodeType":"ElementaryTypeName","src":"10179:5:149","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10041:167:149"},"returnParameters":{"id":91123,"nodeType":"ParameterList","parameters":[],"src":"10247:0:149"},"scope":91146,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":90739,"name":"StandardBridge","nodeType":"IdentifierPath","referencedDeclaration":111675,"src":"1170:14:149"},"id":90740,"nodeType":"InheritanceSpecifier","src":"1170:14:149"},{"baseName":{"id":90741,"name":"ISemver","nodeType":"IdentifierPath","referencedDeclaration":109417,"src":"1186:7:149"},"id":90742,"nodeType":"InheritanceSpecifier","src":"1186:7:149"}],"canonicalName":"L2StandardBridge","contractDependencies":[],"contractKind":"contract","documentation":{"id":90738,"nodeType":"StructuredDocumentation","src":"454:687:149","text":"@custom:proxied\n @custom:predeploy 0x4200000000000000000000000000000000000010\n @title L2StandardBridge\n @notice The L2StandardBridge is responsible for transfering ETH and ERC20 tokens between L1 and\n L2. In the case that an ERC20 token is native to L2, it will be escrowed within this\n contract. If the ERC20 token is native to L1, it will be burnt.\n NOTE: this contract is not intended to support all variations of ERC20 tokens. Examples\n of some token types that may not be properly supported by this contract include, but are\n not limited to: tokens with transfer fees, rebasing tokens, and tokens with blocklists."},"fullyImplemented":true,"linearizedBaseContracts":[91146,109417,111675,49678],"name":"L2StandardBridge","nameLocation":"1150:16:149","scope":91147,"usedErrors":[]}],"license":"MIT"},"id":149} \ No newline at end of file diff --git a/packages/sdk/src/forge-artifacts/L2ToL1MessagePasser.json b/packages/sdk/src/forge-artifacts/L2ToL1MessagePasser.json deleted file mode 100644 index f7ed43e765c9..000000000000 --- a/packages/sdk/src/forge-artifacts/L2ToL1MessagePasser.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"receive","stateMutability":"payable"},{"type":"function","name":"MESSAGE_VERSION","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"burn","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initiateWithdrawal","inputs":[{"name":"_target","type":"address","internalType":"address"},{"name":"_gasLimit","type":"uint256","internalType":"uint256"},{"name":"_data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"messageNonce","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"sentMessages","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"event","name":"MessagePassed","inputs":[{"name":"nonce","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"target","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"gasLimit","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"withdrawalHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"WithdrawerBalanceBurnt","inputs":[{"name":"amount","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false}],"bytecode":{"object":"0x608060405234801561001057600080fd5b506106d3806100206000396000f3fe6080604052600436106100695760003560e01c806382e3702d1161004357806382e3702d1461012a578063c2b3e5ac1461016a578063ecc704281461017d57600080fd5b80633f827a5a1461009257806344df8e70146100bf57806354fd4d50146100d457600080fd5b3661008d5761008b33620186a0604051806020016040528060008152506101e2565b005b600080fd5b34801561009e57600080fd5b506100a7600181565b60405161ffff90911681526020015b60405180910390f35b3480156100cb57600080fd5b5061008b6103a6565b3480156100e057600080fd5b5061011d6040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b691906104d1565b34801561013657600080fd5b5061015a6101453660046104eb565b60006020819052908152604090205460ff1681565b60405190151581526020016100b6565b61008b610178366004610533565b6101e2565b34801561018957600080fd5b506101d46001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016100b6565b60006102786040518060c0016040528061023c6001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b815233602082015273ffffffffffffffffffffffffffffffffffffffff871660408201523460608201526080810186905260a0018490526103de565b600081815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055905073ffffffffffffffffffffffffffffffffffffffff8416336103136001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b7f02a52367d10742d8032712c1bb8e0144ff1ec5ffda1ed7d70bb05a2744955054348787876040516103489493929190610637565b60405180910390a45050600180547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082168301167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b476103b08161042b565b60405181907f7967de617a5ac1cc7eba2d6f37570a0135afa950d8bb77cdd35f0d0b4e85a16f90600090a250565b80516020808301516040808501516060860151608087015160a0880151935160009761040e979096959101610667565b604051602081830303815290604052805190602001209050919050565b806040516104389061045a565b6040518091039082f0905080158015610455573d6000803e3d6000fd5b505050565b6008806106bf83390190565b6000815180845260005b8181101561048c57602081850181015186830182015201610470565b8181111561049e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006104e46020830184610466565b9392505050565b6000602082840312156104fd57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561054857600080fd5b833573ffffffffffffffffffffffffffffffffffffffff8116811461056c57600080fd5b925060208401359150604084013567ffffffffffffffff8082111561059057600080fd5b818601915086601f8301126105a457600080fd5b8135818111156105b6576105b6610504565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156105fc576105fc610504565b8160405282815289602084870101111561061557600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b8481528360208201526080604082015260006106566080830185610466565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526106b260c0830184610466565b9897505050505050505056fe608060405230fffea164736f6c634300080f000a","sourceMap":"722:3696:150:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106100695760003560e01c806382e3702d1161004357806382e3702d1461012a578063c2b3e5ac1461016a578063ecc704281461017d57600080fd5b80633f827a5a1461009257806344df8e70146100bf57806354fd4d50146100d457600080fd5b3661008d5761008b33620186a0604051806020016040528060008152506101e2565b005b600080fd5b34801561009e57600080fd5b506100a7600181565b60405161ffff90911681526020015b60405180910390f35b3480156100cb57600080fd5b5061008b6103a6565b3480156100e057600080fd5b5061011d6040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b691906104d1565b34801561013657600080fd5b5061015a6101453660046104eb565b60006020819052908152604090205460ff1681565b60405190151581526020016100b6565b61008b610178366004610533565b6101e2565b34801561018957600080fd5b506101d46001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016100b6565b60006102786040518060c0016040528061023c6001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b815233602082015273ffffffffffffffffffffffffffffffffffffffff871660408201523460608201526080810186905260a0018490526103de565b600081815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055905073ffffffffffffffffffffffffffffffffffffffff8416336103136001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b7f02a52367d10742d8032712c1bb8e0144ff1ec5ffda1ed7d70bb05a2744955054348787876040516103489493929190610637565b60405180910390a45050600180547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082168301167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b476103b08161042b565b60405181907f7967de617a5ac1cc7eba2d6f37570a0135afa950d8bb77cdd35f0d0b4e85a16f90600090a250565b80516020808301516040808501516060860151608087015160a0880151935160009761040e979096959101610667565b604051602081830303815290604052805190602001209050919050565b806040516104389061045a565b6040518091039082f0905080158015610455573d6000803e3d6000fd5b505050565b6008806106bf83390190565b6000815180845260005b8181101561048c57602081850181015186830182015201610470565b8181111561049e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006104e46020830184610466565b9392505050565b6000602082840312156104fd57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561054857600080fd5b833573ffffffffffffffffffffffffffffffffffffffff8116811461056c57600080fd5b925060208401359150604084013567ffffffffffffffff8082111561059057600080fd5b818601915086601f8301126105a457600080fd5b8135818111156105b6576105b6610504565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156105fc576105fc610504565b8160405282815289602084870101111561061557600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b8481528360208201526080604082015260006106566080830185610466565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526106b260c0830184610466565b9897505050505050505056fe608060405230fffea164736f6c634300080f000a","sourceMap":"722:3696:150:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2474:68;2493:10;911:7;2532:9;;;;;;;;;;;;2474:18;:68::i;:::-;722:3696;;;;;981:42;;;;;;;;;;;;1022:1;981:42;;;;;188:6:357;176:19;;;158:38;;146:2;131:18;981:42:150;;;;;;;;2915:154;;;;;;;;;;;;;:::i;2307:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1094:44::-;;;;;;;;;;-1:-1:-1;1094:44:150;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;1318:14:357;;1311:22;1293:41;;1281:2;1266:18;1094:44:150;1153:187:357;3311:650:150;;;;;;:::i;:::-;;:::i;4282:134::-;;;;;;;;;;;;4383:8;;;;4855:18:195;4852:30;;4282:134:150;;;;2930:25:357;;;2918:2;2903:18;4282:134:150;2784:177:357;3311:650:150;3420:22;3445:297;3481:251;;;;;;;;3534:14;4383:8;;;;4855:18:195;4852:30;;4282:134:150;3534:14;3481:251;;3574:10;3481:251;;;;;;;;;;;3642:9;3481:251;;;;;;;;;;;;;;;3445:22;:297::i;:::-;3753:12;:28;;;;;;;;;;:35;;;;3784:4;3753:35;;;3420:322;-1:-1:-1;3804:95:150;;;3834:10;3818:14;4383:8;;;;4855:18:195;4852:30;;4282:134:150;3818:14;3804:95;3855:9;3866;3877:5;3884:14;3804:95;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;3936:8:150;3934:10;;;;;;;;;;;;;;;;-1:-1:-1;;3311:650:150:o;2915:154::-;2968:21;2999:17;2968:21;2999:8;:17::i;:::-;3031:31;;3054:7;;3031:31;;;;;2940:129;2915:154::o;4456:211:196:-;4590:9;;4601:10;;;;;4613;;;;;4625:9;;;;4636:12;;;;4650:8;;;;4579:80;;4543:7;;4579:80;;4590:9;;4601:10;4650:8;4579:80;;:::i;:::-;;;;;;;;;;;;;4569:91;;;;;;4562:98;;4456:211;;;:::o;224:86:190:-;292:7;273:30;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;224:86;:::o;-1:-1:-1:-;;;;;;;;:::o;207:531:357:-;249:3;287:5;281:12;314:6;309:3;302:19;339:1;349:162;363:6;360:1;357:13;349:162;;;425:4;481:13;;;477:22;;471:29;453:11;;;449:20;;442:59;378:12;349:162;;;529:6;526:1;523:13;520:87;;;595:1;588:4;579:6;574:3;570:16;566:27;559:38;520:87;-1:-1:-1;652:2:357;640:15;657:66;636:88;627:98;;;;727:4;623:109;;207:531;-1:-1:-1;;207:531:357:o;743:220::-;892:2;881:9;874:21;855:4;912:45;953:2;942:9;938:18;930:6;912:45;:::i;:::-;904:53;743:220;-1:-1:-1;;;743:220:357:o;968:180::-;1027:6;1080:2;1068:9;1059:7;1055:23;1051:32;1048:52;;;1096:1;1093;1086:12;1048:52;-1:-1:-1;1119:23:357;;968:180;-1:-1:-1;968:180:357:o;1345:184::-;1397:77;1394:1;1387:88;1494:4;1491:1;1484:15;1518:4;1515:1;1508:15;1534:1245;1620:6;1628;1636;1689:2;1677:9;1668:7;1664:23;1660:32;1657:52;;;1705:1;1702;1695:12;1657:52;1744:9;1731:23;1794:42;1787:5;1783:54;1776:5;1773:65;1763:93;;1852:1;1849;1842:12;1763:93;1875:5;-1:-1:-1;1927:2:357;1912:18;;1899:32;;-1:-1:-1;1982:2:357;1967:18;;1954:32;2005:18;2035:14;;;2032:34;;;2062:1;2059;2052:12;2032:34;2100:6;2089:9;2085:22;2075:32;;2145:7;2138:4;2134:2;2130:13;2126:27;2116:55;;2167:1;2164;2157:12;2116:55;2203:2;2190:16;2225:2;2221;2218:10;2215:36;;;2231:18;;:::i;:::-;2365:2;2359:9;2427:4;2419:13;;2270:66;2415:22;;;2439:2;2411:31;2407:40;2395:53;;;2463:18;;;2483:22;;;2460:46;2457:72;;;2509:18;;:::i;:::-;2549:10;2545:2;2538:22;2584:2;2576:6;2569:18;2624:7;2619:2;2614;2610;2606:11;2602:20;2599:33;2596:53;;;2645:1;2642;2635:12;2596:53;2701:2;2696;2692;2688:11;2683:2;2675:6;2671:15;2658:46;2746:1;2741:2;2736;2728:6;2724:15;2720:24;2713:35;2767:6;2757:16;;;;;;;1534:1245;;;;;:::o;2966:433::-;3197:6;3186:9;3179:25;3240:6;3235:2;3224:9;3220:18;3213:34;3283:3;3278:2;3267:9;3263:18;3256:31;3160:4;3304:46;3345:3;3334:9;3330:19;3322:6;3304:46;:::i;:::-;3296:54;;3386:6;3381:2;3370:9;3366:18;3359:34;2966:433;;;;;;;:::o;3404:656::-;3691:6;3680:9;3673:25;3654:4;3717:42;3807:2;3799:6;3795:15;3790:2;3779:9;3775:18;3768:43;3859:2;3851:6;3847:15;3842:2;3831:9;3827:18;3820:43;;3899:6;3894:2;3883:9;3879:18;3872:34;3943:6;3937:3;3926:9;3922:19;3915:35;3987:3;3981;3970:9;3966:19;3959:32;4008:46;4049:3;4038:9;4034:19;4026:6;4008:46;:::i;:::-;4000:54;3404:656;-1:-1:-1;;;;;;;;3404:656:357:o","linkReferences":{}},"methodIdentifiers":{"MESSAGE_VERSION()":"3f827a5a","burn()":"44df8e70","initiateWithdrawal(address,uint256,bytes)":"c2b3e5ac","messageNonce()":"ecc70428","sentMessages(bytes32)":"82e3702d","version()":"54fd4d50"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"}],\"name\":\"MessagePassed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawerBalanceBurnt\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSAGE_VERSION\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"initiateWithdrawal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"sentMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"custom:proxied\":\"@custom:predeploy 0x4200000000000000000000000000000000000016\",\"events\":{\"MessagePassed(uint256,address,address,uint256,uint256,bytes,bytes32)\":{\"params\":{\"data\":\"The data to be forwarded to the target on L1.\",\"gasLimit\":\"The minimum amount of gas that must be provided when withdrawing.\",\"nonce\":\"Unique value corresponding to each withdrawal.\",\"sender\":\"The L2 account address which initiated the withdrawal.\",\"target\":\"The L1 account address the call will be send to.\",\"value\":\"The ETH value submitted for withdrawal, to be forwarded to the target.\",\"withdrawalHash\":\"The hash of the withdrawal.\"}},\"WithdrawerBalanceBurnt(uint256)\":{\"params\":{\"amount\":\"Amount of ETh that was burned.\"}}},\"kind\":\"dev\",\"methods\":{\"initiateWithdrawal(address,uint256,bytes)\":{\"params\":{\"_data\":\"Data to forward to L1 target.\",\"_gasLimit\":\"Minimum gas limit for executing the message on L1.\",\"_target\":\"Address to call on L1 execution.\"}},\"messageNonce()\":{\"returns\":{\"_0\":\"Nonce of the next message to be sent, with added message version.\"}}},\"stateVariables\":{\"version\":{\"custom:semver\":\"1.1.0\"}},\"title\":\"L2ToL1MessagePasser\",\"version\":1},\"userdoc\":{\"events\":{\"MessagePassed(uint256,address,address,uint256,uint256,bytes,bytes32)\":{\"notice\":\"Emitted any time a withdrawal is initiated.\"},\"WithdrawerBalanceBurnt(uint256)\":{\"notice\":\"Emitted when the balance of this contract is burned.\"}},\"kind\":\"user\",\"methods\":{\"MESSAGE_VERSION()\":{\"notice\":\"The current message version identifier.\"},\"burn()\":{\"notice\":\"Removes all ETH held by this contract from the state. Used to prevent the amount of ETH on L2 inflating when ETH is withdrawn. Currently only way to do this is to create a contract and self-destruct it to itself. Anyone can call this function. Not incentivized since this function is very cheap.\"},\"initiateWithdrawal(address,uint256,bytes)\":{\"notice\":\"Sends a message from L2 to L1.\"},\"messageNonce()\":{\"notice\":\"Retrieves the next message nonce. Message version will be added to the upper two bytes of the message nonce. Message version allows us to treat messages as having different structures.\"},\"sentMessages(bytes32)\":{\"notice\":\"Includes the message hashes for all withdrawals\"}},\"notice\":\"The L2ToL1MessagePasser is a dedicated contract where messages that are being sent from L2 to L1 can be stored. The storage root of this contract is pulled up to the top level of the L2 output to reduce the cost of proving the existence of sent messages.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/L2/L2ToL1MessagePasser.sol\":\"L2ToL1MessagePasser\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"src/L2/L2ToL1MessagePasser.sol\":{\"keccak256\":\"0x67f440defc45e97bf1494274a9061876cbdcb10625707c534a0cb04b1c057e21\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47900ccfcd1e4506d50dd3b14069da285eeb5f783020a0c74f58181b4c011460\",\"dweb:/ipfs/QmNUtEAxiwXT8QDbCHsX3uT4h2fh6k9f8LvMrmRK2N7K61\"]},\"src/libraries/Burn.sol\":{\"keccak256\":\"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f\",\"dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb\"]},\"src/libraries/Encoding.sol\":{\"keccak256\":\"0x1dafabcbd4877c7abe9698957b0a44b7e911cb8b11c1437a4ed897135669fa87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6addfacefa26fdb44f56d73fa0172b97740de75629a962905ec2a20a28d40fff\",\"dweb:/ipfs/QmboHMouqU19Rnbqrfo1gkfnuDBFcPiC9wsKgGtF2W1cNA\"]},\"src/libraries/Hashing.sol\":{\"keccak256\":\"0x89c07a0ca102cbe57b4e082543f2dd6dae0e1fd4a87908a334bd076fc914e7b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://69c83489c9544ab442dc244c2feb2c6811b726a5eb5a509b97fc5ccb90b98c12\",\"dweb:/ipfs/QmPGGJeLasc1HWHzd6odvWcNvFPQrbYtDubZcv8yp1HLtF\"]},\"src/libraries/Types.sol\":{\"keccak256\":\"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e\",\"dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc\"]},\"src/libraries/rlp/RLPWriter.sol\":{\"keccak256\":\"0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b\",\"dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV\"]},\"src/universal/ISemver.sol\":{\"keccak256\":\"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a\",\"dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.15+commit.e14f2714"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"address","name":"target","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false},{"internalType":"uint256","name":"gasLimit","type":"uint256","indexed":false},{"internalType":"bytes","name":"data","type":"bytes","indexed":false},{"internalType":"bytes32","name":"withdrawalHash","type":"bytes32","indexed":false}],"type":"event","name":"MessagePassed","anonymous":false},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256","indexed":true}],"type":"event","name":"WithdrawerBalanceBurnt","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"MESSAGE_VERSION","outputs":[{"internalType":"uint16","name":"","type":"uint16"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"burn"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_gasLimit","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"initiateWithdrawal"},{"inputs":[],"stateMutability":"view","type":"function","name":"messageNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"sentMessages","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"initiateWithdrawal(address,uint256,bytes)":{"params":{"_data":"Data to forward to L1 target.","_gasLimit":"Minimum gas limit for executing the message on L1.","_target":"Address to call on L1 execution."}},"messageNonce()":{"returns":{"_0":"Nonce of the next message to be sent, with added message version."}}},"version":1},"userdoc":{"kind":"user","methods":{"MESSAGE_VERSION()":{"notice":"The current message version identifier."},"burn()":{"notice":"Removes all ETH held by this contract from the state. Used to prevent the amount of ETH on L2 inflating when ETH is withdrawn. Currently only way to do this is to create a contract and self-destruct it to itself. Anyone can call this function. Not incentivized since this function is very cheap."},"initiateWithdrawal(address,uint256,bytes)":{"notice":"Sends a message from L2 to L1."},"messageNonce()":{"notice":"Retrieves the next message nonce. Message version will be added to the upper two bytes of the message nonce. Message version allows us to treat messages as having different structures."},"sentMessages(bytes32)":{"notice":"Includes the message hashes for all withdrawals"}},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","ds-test/=lib/forge-std/lib/ds-test/src/","forge-std/=lib/forge-std/src/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/L2/L2ToL1MessagePasser.sol":"L2ToL1MessagePasser"},"evmVersion":"london","libraries":{}},"sources":{"src/L2/L2ToL1MessagePasser.sol":{"keccak256":"0x67f440defc45e97bf1494274a9061876cbdcb10625707c534a0cb04b1c057e21","urls":["bzz-raw://47900ccfcd1e4506d50dd3b14069da285eeb5f783020a0c74f58181b4c011460","dweb:/ipfs/QmNUtEAxiwXT8QDbCHsX3uT4h2fh6k9f8LvMrmRK2N7K61"],"license":"MIT"},"src/libraries/Burn.sol":{"keccak256":"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010","urls":["bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f","dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb"],"license":"MIT"},"src/libraries/Encoding.sol":{"keccak256":"0x1dafabcbd4877c7abe9698957b0a44b7e911cb8b11c1437a4ed897135669fa87","urls":["bzz-raw://6addfacefa26fdb44f56d73fa0172b97740de75629a962905ec2a20a28d40fff","dweb:/ipfs/QmboHMouqU19Rnbqrfo1gkfnuDBFcPiC9wsKgGtF2W1cNA"],"license":"MIT"},"src/libraries/Hashing.sol":{"keccak256":"0x89c07a0ca102cbe57b4e082543f2dd6dae0e1fd4a87908a334bd076fc914e7b8","urls":["bzz-raw://69c83489c9544ab442dc244c2feb2c6811b726a5eb5a509b97fc5ccb90b98c12","dweb:/ipfs/QmPGGJeLasc1HWHzd6odvWcNvFPQrbYtDubZcv8yp1HLtF"],"license":"MIT"},"src/libraries/Types.sol":{"keccak256":"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4","urls":["bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e","dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc"],"license":"MIT"},"src/libraries/rlp/RLPWriter.sol":{"keccak256":"0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6","urls":["bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b","dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV"],"license":"MIT"},"src/universal/ISemver.sol":{"keccak256":"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44","urls":["bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a","dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":91174,"contract":"src/L2/L2ToL1MessagePasser.sol:L2ToL1MessagePasser","label":"sentMessages","offset":0,"slot":"0","type":"t_mapping(t_bytes32,t_bool)"},{"astId":91177,"contract":"src/L2/L2ToL1MessagePasser.sol:L2ToL1MessagePasser","label":"msgNonce","offset":0,"slot":"1","type":"t_uint240"}],"types":{"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_uint240":{"encoding":"inplace","label":"uint240","numberOfBytes":"30"}}},"userdoc":{"version":1,"kind":"user","methods":{"MESSAGE_VERSION()":{"notice":"The current message version identifier."},"burn()":{"notice":"Removes all ETH held by this contract from the state. Used to prevent the amount of ETH on L2 inflating when ETH is withdrawn. Currently only way to do this is to create a contract and self-destruct it to itself. Anyone can call this function. Not incentivized since this function is very cheap."},"initiateWithdrawal(address,uint256,bytes)":{"notice":"Sends a message from L2 to L1."},"messageNonce()":{"notice":"Retrieves the next message nonce. Message version will be added to the upper two bytes of the message nonce. Message version allows us to treat messages as having different structures."},"sentMessages(bytes32)":{"notice":"Includes the message hashes for all withdrawals"}},"events":{"MessagePassed(uint256,address,address,uint256,uint256,bytes,bytes32)":{"notice":"Emitted any time a withdrawal is initiated."},"WithdrawerBalanceBurnt(uint256)":{"notice":"Emitted when the balance of this contract is burned."}},"notice":"The L2ToL1MessagePasser is a dedicated contract where messages that are being sent from L2 to L1 can be stored. The storage root of this contract is pulled up to the top level of the L2 output to reduce the cost of proving the existence of sent messages."},"devdoc":{"version":1,"kind":"dev","methods":{"initiateWithdrawal(address,uint256,bytes)":{"params":{"_data":"Data to forward to L1 target.","_gasLimit":"Minimum gas limit for executing the message on L1.","_target":"Address to call on L1 execution."}},"messageNonce()":{"returns":{"_0":"Nonce of the next message to be sent, with added message version."}}},"events":{"MessagePassed(uint256,address,address,uint256,uint256,bytes,bytes32)":{"params":{"data":"The data to be forwarded to the target on L1.","gasLimit":"The minimum amount of gas that must be provided when withdrawing.","nonce":"Unique value corresponding to each withdrawal.","sender":"The L2 account address which initiated the withdrawal.","target":"The L1 account address the call will be send to.","value":"The ETH value submitted for withdrawal, to be forwarded to the target.","withdrawalHash":"The hash of the withdrawal."}},"WithdrawerBalanceBurnt(uint256)":{"params":{"amount":"Amount of ETh that was burned."}}},"title":"L2ToL1MessagePasser"},"ast":{"absolutePath":"src/L2/L2ToL1MessagePasser.sol","id":91308,"exportedSymbols":{"Burn":[102909],"Encoding":[103714],"Hashing":[103936],"ISemver":[109417],"L2ToL1MessagePasser":[91307],"Types":[104349]},"nodeType":"SourceUnit","src":"32:4387:150","nodes":[{"id":91148,"nodeType":"PragmaDirective","src":"32:23:150","nodes":[],"literals":["solidity","0.8",".15"]},{"id":91150,"nodeType":"ImportDirective","src":"57:48:150","nodes":[],"absolutePath":"src/libraries/Types.sol","file":"src/libraries/Types.sol","nameLocation":"-1:-1:-1","scope":91308,"sourceUnit":104350,"symbolAliases":[{"foreign":{"id":91149,"name":"Types","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104349,"src":"66:5:150","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":91152,"nodeType":"ImportDirective","src":"106:52:150","nodes":[],"absolutePath":"src/libraries/Hashing.sol","file":"src/libraries/Hashing.sol","nameLocation":"-1:-1:-1","scope":91308,"sourceUnit":103937,"symbolAliases":[{"foreign":{"id":91151,"name":"Hashing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103936,"src":"115:7:150","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":91154,"nodeType":"ImportDirective","src":"159:54:150","nodes":[],"absolutePath":"src/libraries/Encoding.sol","file":"src/libraries/Encoding.sol","nameLocation":"-1:-1:-1","scope":91308,"sourceUnit":103715,"symbolAliases":[{"foreign":{"id":91153,"name":"Encoding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103714,"src":"168:8:150","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":91156,"nodeType":"ImportDirective","src":"214:46:150","nodes":[],"absolutePath":"src/libraries/Burn.sol","file":"src/libraries/Burn.sol","nameLocation":"-1:-1:-1","scope":91308,"sourceUnit":102926,"symbolAliases":[{"foreign":{"id":91155,"name":"Burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":102909,"src":"223:4:150","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":91158,"nodeType":"ImportDirective","src":"261:52:150","nodes":[],"absolutePath":"src/universal/ISemver.sol","file":"src/universal/ISemver.sol","nameLocation":"-1:-1:-1","scope":91308,"sourceUnit":109418,"symbolAliases":[{"foreign":{"id":91157,"name":"ISemver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109417,"src":"270:7:150","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":91307,"nodeType":"ContractDefinition","src":"722:3696:150","nodes":[{"id":91165,"nodeType":"VariableDeclaration","src":"857:61:150","nodes":[],"constant":true,"documentation":{"id":91162,"nodeType":"StructuredDocumentation","src":"768:84:150","text":"@notice The L1 gas limit set when eth is withdrawn using the receive() function."},"mutability":"constant","name":"RECEIVE_DEFAULT_GAS_LIMIT","nameLocation":"883:25:150","scope":91307,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":91163,"name":"uint256","nodeType":"ElementaryTypeName","src":"857:7:150","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3130305f303030","id":91164,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"911:7:150","typeDescriptions":{"typeIdentifier":"t_rational_100000_by_1","typeString":"int_const 100000"},"value":"100_000"},"visibility":"internal"},{"id":91169,"nodeType":"VariableDeclaration","src":"981:42:150","nodes":[],"constant":true,"documentation":{"id":91166,"nodeType":"StructuredDocumentation","src":"925:51:150","text":"@notice The current message version identifier."},"functionSelector":"3f827a5a","mutability":"constant","name":"MESSAGE_VERSION","nameLocation":"1004:15:150","scope":91307,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":91167,"name":"uint16","nodeType":"ElementaryTypeName","src":"981:6:150","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"value":{"hexValue":"31","id":91168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1022:1:150","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"public"},{"id":91174,"nodeType":"VariableDeclaration","src":"1094:44:150","nodes":[],"constant":false,"documentation":{"id":91170,"nodeType":"StructuredDocumentation","src":"1030:59:150","text":"@notice Includes the message hashes for all withdrawals"},"functionSelector":"82e3702d","mutability":"mutable","name":"sentMessages","nameLocation":"1126:12:150","scope":91307,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"},"typeName":{"id":91173,"keyType":{"id":91171,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1102:7:150","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"1094:24:150","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"},"valueType":{"id":91172,"name":"bool","nodeType":"ElementaryTypeName","src":"1113:4:150","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"id":91177,"nodeType":"VariableDeclaration","src":"1205:25:150","nodes":[],"constant":false,"documentation":{"id":91175,"nodeType":"StructuredDocumentation","src":"1145:55:150","text":"@notice A unique value hashed with each withdrawal."},"mutability":"mutable","name":"msgNonce","nameLocation":"1222:8:150","scope":91307,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"},"typeName":{"id":91176,"name":"uint240","nodeType":"ElementaryTypeName","src":"1205:7:150","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"visibility":"internal"},{"id":91194,"nodeType":"EventDefinition","src":"1869:222:150","nodes":[],"anonymous":false,"documentation":{"id":91178,"nodeType":"StructuredDocumentation","src":"1237:627:150","text":"@notice Emitted any time a withdrawal is initiated.\n @param nonce Unique value corresponding to each withdrawal.\n @param sender The L2 account address which initiated the withdrawal.\n @param target The L1 account address the call will be send to.\n @param value The ETH value submitted for withdrawal, to be forwarded to the target.\n @param gasLimit The minimum amount of gas that must be provided when withdrawing.\n @param data The data to be forwarded to the target on L1.\n @param withdrawalHash The hash of the withdrawal."},"eventSelector":"02a52367d10742d8032712c1bb8e0144ff1ec5ffda1ed7d70bb05a2744955054","name":"MessagePassed","nameLocation":"1875:13:150","parameters":{"id":91193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":91180,"indexed":true,"mutability":"mutable","name":"nonce","nameLocation":"1914:5:150","nodeType":"VariableDeclaration","scope":91194,"src":"1898:21:150","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":91179,"name":"uint256","nodeType":"ElementaryTypeName","src":"1898:7:150","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":91182,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"1945:6:150","nodeType":"VariableDeclaration","scope":91194,"src":"1929:22:150","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":91181,"name":"address","nodeType":"ElementaryTypeName","src":"1929:7:150","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":91184,"indexed":true,"mutability":"mutable","name":"target","nameLocation":"1977:6:150","nodeType":"VariableDeclaration","scope":91194,"src":"1961:22:150","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":91183,"name":"address","nodeType":"ElementaryTypeName","src":"1961:7:150","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":91186,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"2001:5:150","nodeType":"VariableDeclaration","scope":91194,"src":"1993:13:150","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":91185,"name":"uint256","nodeType":"ElementaryTypeName","src":"1993:7:150","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":91188,"indexed":false,"mutability":"mutable","name":"gasLimit","nameLocation":"2024:8:150","nodeType":"VariableDeclaration","scope":91194,"src":"2016:16:150","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":91187,"name":"uint256","nodeType":"ElementaryTypeName","src":"2016:7:150","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":91190,"indexed":false,"mutability":"mutable","name":"data","nameLocation":"2048:4:150","nodeType":"VariableDeclaration","scope":91194,"src":"2042:10:150","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":91189,"name":"bytes","nodeType":"ElementaryTypeName","src":"2042:5:150","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":91192,"indexed":false,"mutability":"mutable","name":"withdrawalHash","nameLocation":"2070:14:150","nodeType":"VariableDeclaration","scope":91194,"src":"2062:22:150","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":91191,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2062:7:150","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1888:202:150"}},{"id":91199,"nodeType":"EventDefinition","src":"2219:53:150","nodes":[],"anonymous":false,"documentation":{"id":91195,"nodeType":"StructuredDocumentation","src":"2097:117:150","text":"@notice Emitted when the balance of this contract is burned.\n @param amount Amount of ETh that was burned."},"eventSelector":"7967de617a5ac1cc7eba2d6f37570a0135afa950d8bb77cdd35f0d0b4e85a16f","name":"WithdrawerBalanceBurnt","nameLocation":"2225:22:150","parameters":{"id":91198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":91197,"indexed":true,"mutability":"mutable","name":"amount","nameLocation":"2264:6:150","nodeType":"VariableDeclaration","scope":91199,"src":"2248:22:150","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":91196,"name":"uint256","nodeType":"ElementaryTypeName","src":"2248:7:150","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2247:24:150"}},{"id":91203,"nodeType":"VariableDeclaration","src":"2307:40:150","nodes":[],"baseFunctions":[109416],"constant":true,"documentation":{"id":91200,"nodeType":"StructuredDocumentation","src":"2278:24:150","text":"@custom:semver 1.1.0"},"functionSelector":"54fd4d50","mutability":"constant","name":"version","nameLocation":"2330:7:150","scope":91307,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":91201,"name":"string","nodeType":"ElementaryTypeName","src":"2307:6:150","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"312e312e30","id":91202,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2340:7:150","typeDescriptions":{"typeIdentifier":"t_stringliteral_6815ba53416ba06aff1932cc76b3832272bafab9bc8e066be382e32b06ba5546","typeString":"literal_string \"1.1.0\""},"value":"1.1.0"},"visibility":"public"},{"id":91218,"nodeType":"FunctionDefinition","src":"2437:112:150","nodes":[],"body":{"id":91217,"nodeType":"Block","src":"2464:85:150","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":91208,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2493:3:150","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":91209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2493:10:150","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91210,"name":"RECEIVE_DEFAULT_GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91165,"src":"2505:25:150","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"","id":91213,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2538:2:150","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":91212,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2532:5:150","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":91211,"name":"bytes","nodeType":"ElementaryTypeName","src":"2532:5:150","typeDescriptions":{}}},"id":91214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2532:9:150","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":91207,"name":"initiateWithdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91293,"src":"2474:18:150","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,uint256,bytes memory)"}},"id":91215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2474:68:150","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":91216,"nodeType":"ExpressionStatement","src":"2474:68:150"}]},"documentation":{"id":91204,"nodeType":"StructuredDocumentation","src":"2354:78:150","text":"@notice Allows users to withdraw ETH by sending directly to this contract."},"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":91205,"nodeType":"ParameterList","parameters":[],"src":"2444:2:150"},"returnParameters":{"id":91206,"nodeType":"ParameterList","parameters":[],"src":"2464:0:150"},"scope":91307,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":91241,"nodeType":"FunctionDefinition","src":"2915:154:150","nodes":[],"body":{"id":91240,"nodeType":"Block","src":"2940:129:150","nodes":[],"statements":[{"assignments":[91223],"declarations":[{"constant":false,"id":91223,"mutability":"mutable","name":"balance","nameLocation":"2958:7:150","nodeType":"VariableDeclaration","scope":91240,"src":"2950:15:150","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":91222,"name":"uint256","nodeType":"ElementaryTypeName","src":"2950:7:150","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":91229,"initialValue":{"expression":{"arguments":[{"id":91226,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2976:4:150","typeDescriptions":{"typeIdentifier":"t_contract$_L2ToL1MessagePasser_$91307","typeString":"contract L2ToL1MessagePasser"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_L2ToL1MessagePasser_$91307","typeString":"contract L2ToL1MessagePasser"}],"id":91225,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2968:7:150","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":91224,"name":"address","nodeType":"ElementaryTypeName","src":"2968:7:150","typeDescriptions":{}}},"id":91227,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2968:13:150","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":91228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","src":"2968:21:150","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2950:39:150"},{"expression":{"arguments":[{"id":91233,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91223,"src":"3008:7:150","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":91230,"name":"Burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":102909,"src":"2999:4:150","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Burn_$102909_$","typeString":"type(library Burn)"}},"id":91232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"eth","nodeType":"MemberAccess","referencedDeclaration":102881,"src":"2999:8:150","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":91234,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2999:17:150","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":91235,"nodeType":"ExpressionStatement","src":"2999:17:150"},{"eventCall":{"arguments":[{"id":91237,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91223,"src":"3054:7:150","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":91236,"name":"WithdrawerBalanceBurnt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91199,"src":"3031:22:150","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":91238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3031:31:150","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":91239,"nodeType":"EmitStatement","src":"3026:36:150"}]},"documentation":{"id":91219,"nodeType":"StructuredDocumentation","src":"2555:355:150","text":"@notice Removes all ETH held by this contract from the state. Used to prevent the amount of\n ETH on L2 inflating when ETH is withdrawn. Currently only way to do this is to\n create a contract and self-destruct it to itself. Anyone can call this function. Not\n incentivized since this function is very cheap."},"functionSelector":"44df8e70","implemented":true,"kind":"function","modifiers":[],"name":"burn","nameLocation":"2924:4:150","parameters":{"id":91220,"nodeType":"ParameterList","parameters":[],"src":"2928:2:150"},"returnParameters":{"id":91221,"nodeType":"ParameterList","parameters":[],"src":"2940:0:150"},"scope":91307,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":91293,"nodeType":"FunctionDefinition","src":"3311:650:150","nodes":[],"body":{"id":91292,"nodeType":"Block","src":"3410:551:150","nodes":[],"statements":[{"assignments":[91252],"declarations":[{"constant":false,"id":91252,"mutability":"mutable","name":"withdrawalHash","nameLocation":"3428:14:150","nodeType":"VariableDeclaration","scope":91292,"src":"3420:22:150","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":91251,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3420:7:150","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":91268,"initialValue":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":91257,"name":"messageNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91306,"src":"3534:12:150","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":91258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3534:14:150","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":91259,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3574:3:150","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":91260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3574:10:150","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91261,"name":"_target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91244,"src":"3610:7:150","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":91262,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3642:3:150","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":91263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"3642:9:150","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":91264,"name":"_gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91246,"src":"3679:9:150","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":91265,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91248,"src":"3712:5:150","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":91255,"name":"Types","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104349,"src":"3481:5:150","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Types_$104349_$","typeString":"type(library Types)"}},"id":91256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"WithdrawalTransaction","nodeType":"MemberAccess","referencedDeclaration":104348,"src":"3481:27:150","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_WithdrawalTransaction_$104348_storage_ptr_$","typeString":"type(struct Types.WithdrawalTransaction storage pointer)"}},"id":91266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["nonce","sender","target","value","gasLimit","data"],"nodeType":"FunctionCall","src":"3481:251:150","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}],"expression":{"id":91253,"name":"Hashing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103936,"src":"3445:7:150","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Hashing_$103936_$","typeString":"type(library Hashing)"}},"id":91254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"hashWithdrawal","nodeType":"MemberAccess","referencedDeclaration":103911,"src":"3445:22:150","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_WithdrawalTransaction_$104348_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct Types.WithdrawalTransaction memory) pure returns (bytes32)"}},"id":91267,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3445:297:150","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3420:322:150"},{"expression":{"id":91273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":91269,"name":"sentMessages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91174,"src":"3753:12:150","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":91271,"indexExpression":{"id":91270,"name":"withdrawalHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91252,"src":"3766:14:150","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3753:28:150","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":91272,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3784:4:150","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"3753:35:150","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":91274,"nodeType":"ExpressionStatement","src":"3753:35:150"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":91276,"name":"messageNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91306,"src":"3818:12:150","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":91277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3818:14:150","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":91278,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3834:3:150","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":91279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3834:10:150","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":91280,"name":"_target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91244,"src":"3846:7:150","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":91281,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3855:3:150","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":91282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"3855:9:150","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":91283,"name":"_gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91246,"src":"3866:9:150","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":91284,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91248,"src":"3877:5:150","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":91285,"name":"withdrawalHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91252,"src":"3884:14:150","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":91275,"name":"MessagePassed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91194,"src":"3804:13:150","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes32_$returns$__$","typeString":"function (uint256,address,address,uint256,uint256,bytes memory,bytes32)"}},"id":91286,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3804:95:150","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":91287,"nodeType":"EmitStatement","src":"3799:100:150"},{"id":91291,"nodeType":"UncheckedBlock","src":"3910:45:150","statements":[{"expression":{"id":91289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3934:10:150","subExpression":{"id":91288,"name":"msgNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91177,"src":"3936:8:150","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"id":91290,"nodeType":"ExpressionStatement","src":"3934:10:150"}]}]},"documentation":{"id":91242,"nodeType":"StructuredDocumentation","src":"3075:231:150","text":"@notice Sends a message from L2 to L1.\n @param _target Address to call on L1 execution.\n @param _gasLimit Minimum gas limit for executing the message on L1.\n @param _data Data to forward to L1 target."},"functionSelector":"c2b3e5ac","implemented":true,"kind":"function","modifiers":[],"name":"initiateWithdrawal","nameLocation":"3320:18:150","parameters":{"id":91249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":91244,"mutability":"mutable","name":"_target","nameLocation":"3347:7:150","nodeType":"VariableDeclaration","scope":91293,"src":"3339:15:150","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":91243,"name":"address","nodeType":"ElementaryTypeName","src":"3339:7:150","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":91246,"mutability":"mutable","name":"_gasLimit","nameLocation":"3364:9:150","nodeType":"VariableDeclaration","scope":91293,"src":"3356:17:150","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":91245,"name":"uint256","nodeType":"ElementaryTypeName","src":"3356:7:150","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":91248,"mutability":"mutable","name":"_data","nameLocation":"3388:5:150","nodeType":"VariableDeclaration","scope":91293,"src":"3375:18:150","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":91247,"name":"bytes","nodeType":"ElementaryTypeName","src":"3375:5:150","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3338:56:150"},"returnParameters":{"id":91250,"nodeType":"ParameterList","parameters":[],"src":"3410:0:150"},"scope":91307,"stateMutability":"payable","virtual":false,"visibility":"public"},{"id":91306,"nodeType":"FunctionDefinition","src":"4282:134:150","nodes":[],"body":{"id":91305,"nodeType":"Block","src":"4336:80:150","nodes":[],"statements":[{"expression":{"arguments":[{"id":91301,"name":"msgNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91177,"src":"4383:8:150","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},{"id":91302,"name":"MESSAGE_VERSION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91169,"src":"4393:15:150","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint240","typeString":"uint240"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":91299,"name":"Encoding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103714,"src":"4353:8:150","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Encoding_$103714_$","typeString":"type(library Encoding)"}},"id":91300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"encodeVersionedNonce","nodeType":"MemberAccess","referencedDeclaration":103643,"src":"4353:29:150","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint240_$_t_uint16_$returns$_t_uint256_$","typeString":"function (uint240,uint16) pure returns (uint256)"}},"id":91303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4353:56:150","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":91298,"id":91304,"nodeType":"Return","src":"4346:63:150"}]},"documentation":{"id":91294,"nodeType":"StructuredDocumentation","src":"3967:310:150","text":"@notice Retrieves the next message nonce. Message version will be added to the upper two\n bytes of the message nonce. Message version allows us to treat messages as having\n different structures.\n @return Nonce of the next message to be sent, with added message version."},"functionSelector":"ecc70428","implemented":true,"kind":"function","modifiers":[],"name":"messageNonce","nameLocation":"4291:12:150","parameters":{"id":91295,"nodeType":"ParameterList","parameters":[],"src":"4303:2:150"},"returnParameters":{"id":91298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":91297,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":91306,"src":"4327:7:150","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":91296,"name":"uint256","nodeType":"ElementaryTypeName","src":"4327:7:150","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4326:9:150"},"scope":91307,"stateMutability":"view","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":91160,"name":"ISemver","nodeType":"IdentifierPath","referencedDeclaration":109417,"src":"754:7:150"},"id":91161,"nodeType":"InheritanceSpecifier","src":"754:7:150"}],"canonicalName":"L2ToL1MessagePasser","contractDependencies":[102925],"contractKind":"contract","documentation":{"id":91159,"nodeType":"StructuredDocumentation","src":"315:407:150","text":"@custom:proxied\n @custom:predeploy 0x4200000000000000000000000000000000000016\n @title L2ToL1MessagePasser\n @notice The L2ToL1MessagePasser is a dedicated contract where messages that are being sent from\n L2 to L1 can be stored. The storage root of this contract is pulled up to the top level\n of the L2 output to reduce the cost of proving the existence of sent messages."},"fullyImplemented":true,"linearizedBaseContracts":[91307,109417],"name":"L2ToL1MessagePasser","nameLocation":"731:19:150","scope":91308,"usedErrors":[]}],"license":"MIT"},"id":150} \ No newline at end of file diff --git a/packages/sdk/src/forge-artifacts/OptimismMintableERC20.json b/packages/sdk/src/forge-artifacts/OptimismMintableERC20.json deleted file mode 100644 index 682ff763ac78..000000000000 --- a/packages/sdk/src/forge-artifacts/OptimismMintableERC20.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"_bridge","type":"address","internalType":"address"},{"name":"_remoteToken","type":"address","internalType":"address"},{"name":"_name","type":"string","internalType":"string"},{"name":"_symbol","type":"string","internalType":"string"},{"name":"_decimals","type":"uint8","internalType":"uint8"}],"stateMutability":"nonpayable"},{"type":"function","name":"BRIDGE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"REMOTE_TOKEN","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"bridge","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"burn","inputs":[{"name":"_from","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"decreaseAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"subtractedValue","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"increaseAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"addedValue","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"l1Token","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"l2Bridge","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"mint","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"remoteToken","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"supportsInterface","inputs":[{"name":"_interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Burn","inputs":[{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Mint","inputs":[{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false}],"bytecode":{"object":"0x60e06040523480156200001157600080fd5b506040516200178a3803806200178a833981016040819052620000349162000163565b828260036200004483826200029e565b5060046200005382826200029e565b5050506001600160a01b039384166080529390921660a052505060ff1660c0526200036a565b80516001600160a01b03811681146200009157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000be57600080fd5b81516001600160401b0380821115620000db57620000db62000096565b604051601f8301601f19908116603f0116810190828211818310171562000106576200010662000096565b816040528381526020925086838588010111156200012357600080fd5b600091505b8382101562000147578582018301518183018401529082019062000128565b83821115620001595760008385830101525b9695505050505050565b600080600080600060a086880312156200017c57600080fd5b620001878662000079565b9450620001976020870162000079565b60408701519094506001600160401b0380821115620001b557600080fd5b620001c389838a01620000ac565b94506060880151915080821115620001da57600080fd5b50620001e988828901620000ac565b925050608086015160ff811681146200020157600080fd5b809150509295509295909350565b600181811c908216806200022457607f821691505b6020821081036200024557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200029957600081815260208120601f850160051c81016020861015620002745750805b601f850160051c820191505b81811015620002955782815560010162000280565b5050505b505050565b81516001600160401b03811115620002ba57620002ba62000096565b620002d281620002cb84546200020f565b846200024b565b602080601f8311600181146200030a5760008415620002f15750858301515b600019600386901b1c1916600185901b17855562000295565b600085815260208120601f198616915b828110156200033b578886015182559484019460019091019084016200031a565b50858210156200035a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c0516113d4620003b6600039600061024401526000818161034b015281816103e001528181610625015261075c0152600081816101a9015261037101526113d46000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063ae1f6aaf1161008c578063dd62ed3e11610066578063dd62ed3e14610395578063e78cea9214610349578063ee9a31a2146103db57600080fd5b8063ae1f6aaf14610349578063c01e1bd61461036f578063d6c0b2c41461036f57600080fd5b80639dc29fac116100bd5780639dc29fac14610310578063a457c2d714610323578063a9059cbb1461033657600080fd5b806370a08231146102d257806395d89b411461030857600080fd5b806323b872dd1161012f5780633950935111610114578063395093511461026e57806340c10f191461028157806354fd4d501461029657600080fd5b806323b872dd1461022a578063313ce5671461023d57600080fd5b806306fdde031161016057806306fdde03146101f0578063095ea7b31461020557806318160ddd1461021857600080fd5b806301ffc9a71461017c578063033964be146101a4575b600080fd5b61018f61018a36600461117d565b610402565b60405190151581526020015b60405180910390f35b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f86104f3565b60405161019b91906111c6565b61018f610213366004611262565b610585565b6002545b60405190815260200161019b565b61018f61023836600461128c565b61059d565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161019b565b61018f61027c366004611262565b6105c1565b61029461028f366004611262565b61060d565b005b6101f86040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b61021c6102e03660046112c8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101f8610735565b61029461031e366004611262565b610744565b61018f610331366004611262565b61085b565b61018f610344366004611262565b61092c565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b61021c6103a33660046112e3565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f1d1d8b63000000000000000000000000000000000000000000000000000000007fec4fc8e3000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000085168314806104bb57507fffffffff00000000000000000000000000000000000000000000000000000000858116908316145b806104ea57507fffffffff00000000000000000000000000000000000000000000000000000000858116908216145b95945050505050565b60606003805461050290611316565b80601f016020809104026020016040519081016040528092919081815260200182805461052e90611316565b801561057b5780601f106105505761010080835404028352916020019161057b565b820191906000526020600020905b81548152906001019060200180831161055e57829003601f168201915b5050505050905090565b60003361059381858561093a565b5060019392505050565b6000336105ab858285610aee565b6105b6858585610bc5565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906105939082908690610608908790611398565b61093a565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e00000000000000000000000060648201526084015b60405180910390fd5b6106e18282610e78565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161072991815260200190565b60405180910390a25050565b60606004805461050290611316565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e00000000000000000000000060648201526084016106ce565b6108138282610f98565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58260405161072991815260200190565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091908381101561091f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016106ce565b6105b6828686840361093a565b600033610593818585610bc5565b73ffffffffffffffffffffffffffffffffffffffff83166109dc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff8216610a7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610bbf5781811015610bb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106ce565b610bbf848484840361093a565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff8216610d0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610dc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610e05908490611398565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e6b91815260200190565b60405180910390a3610bbf565b73ffffffffffffffffffffffffffffffffffffffff8216610ef5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106ce565b8060026000828254610f079190611398565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f41908490611398565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156110f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040812083830390556002805484929061112d9084906113b0565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ae1565b60006020828403121561118f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146111bf57600080fd5b9392505050565b600060208083528351808285015260005b818110156111f3578581018301518582016040015282016111d7565b81811115611205576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125d57600080fd5b919050565b6000806040838503121561127557600080fd5b61127e83611239565b946020939093013593505050565b6000806000606084860312156112a157600080fd5b6112aa84611239565b92506112b860208501611239565b9150604084013590509250925092565b6000602082840312156112da57600080fd5b6111bf82611239565b600080604083850312156112f657600080fd5b6112ff83611239565b915061130d60208401611239565b90509250929050565b600181811c9082168061132a57607f821691505b602082108103611363577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113ab576113ab611369565b500190565b6000828210156113c2576113c2611369565b50039056fea164736f6c634300080f000a","sourceMap":"833:4510:229:-:0;;;2268:292;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2440:5;2447:7;2044:5:45;:13;2440:5:229;2044::45;:13;:::i;:::-;-1:-1:-1;2067:7:45;:17;2077:7;2067;:17;:::i;:::-;-1:-1:-1;;;;;;;;2470:27:229;;::::1;;::::0;2507:16;;;::::1;;::::0;-1:-1:-1;;2533:20:229::1;;;::::0;833:4510;;14:177:357;93:13;;-1:-1:-1;;;;;135:31:357;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:127::-;257:10;252:3;248:20;245:1;238:31;288:4;285:1;278:15;312:4;309:1;302:15;328:885;382:5;435:3;428:4;420:6;416:17;412:27;402:55;;453:1;450;443:12;402:55;476:13;;-1:-1:-1;;;;;538:10:357;;;535:36;;;551:18;;:::i;:::-;626:2;620:9;594:2;680:13;;-1:-1:-1;;676:22:357;;;700:2;672:31;668:40;656:53;;;724:18;;;744:22;;;721:46;718:72;;;770:18;;:::i;:::-;810:10;806:2;799:22;845:2;837:6;830:18;867:4;857:14;;912:3;907:2;902;894:6;890:15;886:24;883:33;880:53;;;929:1;926;919:12;880:53;951:1;942:10;;961:133;975:2;972:1;969:9;961:133;;;1063:14;;;1059:23;;1053:30;1032:14;;;1028:23;;1021:63;986:10;;;;961:133;;;1112:2;1109:1;1106:9;1103:80;;;1171:1;1166:2;1161;1153:6;1149:15;1145:24;1138:35;1103:80;1201:6;328:885;-1:-1:-1;;;;;;328:885:357:o;1218:884::-;1342:6;1350;1358;1366;1374;1427:3;1415:9;1406:7;1402:23;1398:33;1395:53;;;1444:1;1441;1434:12;1395:53;1467:40;1497:9;1467:40;:::i;:::-;1457:50;;1526:49;1571:2;1560:9;1556:18;1526:49;:::i;:::-;1619:2;1604:18;;1598:25;1516:59;;-1:-1:-1;;;;;;1672:14:357;;;1669:34;;;1699:1;1696;1689:12;1669:34;1722:61;1775:7;1766:6;1755:9;1751:22;1722:61;:::i;:::-;1712:71;;1829:2;1818:9;1814:18;1808:25;1792:41;;1858:2;1848:8;1845:16;1842:36;;;1874:1;1871;1864:12;1842:36;;1897:63;1952:7;1941:8;1930:9;1926:24;1897:63;:::i;:::-;1887:73;;;2003:3;1992:9;1988:19;1982:26;2048:4;2041:5;2037:16;2030:5;2027:27;2017:55;;2068:1;2065;2058:12;2017:55;2091:5;2081:15;;;1218:884;;;;;;;;:::o;2107:380::-;2186:1;2182:12;;;;2229;;;2250:61;;2304:4;2296:6;2292:17;2282:27;;2250:61;2357:2;2349:6;2346:14;2326:18;2323:38;2320:161;;2403:10;2398:3;2394:20;2391:1;2384:31;2438:4;2435:1;2428:15;2466:4;2463:1;2456:15;2320:161;;2107:380;;;:::o;2618:545::-;2720:2;2715:3;2712:11;2709:448;;;2756:1;2781:5;2777:2;2770:17;2826:4;2822:2;2812:19;2896:2;2884:10;2880:19;2877:1;2873:27;2867:4;2863:38;2932:4;2920:10;2917:20;2914:47;;;-1:-1:-1;2955:4:357;2914:47;3010:2;3005:3;3001:12;2998:1;2994:20;2988:4;2984:31;2974:41;;3065:82;3083:2;3076:5;3073:13;3065:82;;;3128:17;;;3109:1;3098:13;3065:82;;;3069:3;;;2709:448;2618:545;;;:::o;3339:1352::-;3459:10;;-1:-1:-1;;;;;3481:30:357;;3478:56;;;3514:18;;:::i;:::-;3543:97;3633:6;3593:38;3625:4;3619:11;3593:38;:::i;:::-;3587:4;3543:97;:::i;:::-;3695:4;;3759:2;3748:14;;3776:1;3771:663;;;;4478:1;4495:6;4492:89;;;-1:-1:-1;4547:19:357;;;4541:26;4492:89;-1:-1:-1;;3296:1:357;3292:11;;;3288:24;3284:29;3274:40;3320:1;3316:11;;;3271:57;4594:81;;3741:944;;3771:663;2565:1;2558:14;;;2602:4;2589:18;;-1:-1:-1;;3807:20:357;;;3925:236;3939:7;3936:1;3933:14;3925:236;;;4028:19;;;4022:26;4007:42;;4120:27;;;;4088:1;4076:14;;;;3955:19;;3925:236;;;3929:3;4189:6;4180:7;4177:19;4174:201;;;4250:19;;;4244:26;-1:-1:-1;;4333:1:357;4329:14;;;4345:3;4325:24;4321:37;4317:42;4302:58;4287:74;;4174:201;-1:-1:-1;;;;;4421:1:357;4405:14;;;4401:22;4388:36;;-1:-1:-1;3339:1352:357:o;:::-;833:4510:229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063ae1f6aaf1161008c578063dd62ed3e11610066578063dd62ed3e14610395578063e78cea9214610349578063ee9a31a2146103db57600080fd5b8063ae1f6aaf14610349578063c01e1bd61461036f578063d6c0b2c41461036f57600080fd5b80639dc29fac116100bd5780639dc29fac14610310578063a457c2d714610323578063a9059cbb1461033657600080fd5b806370a08231146102d257806395d89b411461030857600080fd5b806323b872dd1161012f5780633950935111610114578063395093511461026e57806340c10f191461028157806354fd4d501461029657600080fd5b806323b872dd1461022a578063313ce5671461023d57600080fd5b806306fdde031161016057806306fdde03146101f0578063095ea7b31461020557806318160ddd1461021857600080fd5b806301ffc9a71461017c578063033964be146101a4575b600080fd5b61018f61018a36600461117d565b610402565b60405190151581526020015b60405180910390f35b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f86104f3565b60405161019b91906111c6565b61018f610213366004611262565b610585565b6002545b60405190815260200161019b565b61018f61023836600461128c565b61059d565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161019b565b61018f61027c366004611262565b6105c1565b61029461028f366004611262565b61060d565b005b6101f86040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b61021c6102e03660046112c8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101f8610735565b61029461031e366004611262565b610744565b61018f610331366004611262565b61085b565b61018f610344366004611262565b61092c565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b61021c6103a33660046112e3565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f1d1d8b63000000000000000000000000000000000000000000000000000000007fec4fc8e3000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000085168314806104bb57507fffffffff00000000000000000000000000000000000000000000000000000000858116908316145b806104ea57507fffffffff00000000000000000000000000000000000000000000000000000000858116908216145b95945050505050565b60606003805461050290611316565b80601f016020809104026020016040519081016040528092919081815260200182805461052e90611316565b801561057b5780601f106105505761010080835404028352916020019161057b565b820191906000526020600020905b81548152906001019060200180831161055e57829003601f168201915b5050505050905090565b60003361059381858561093a565b5060019392505050565b6000336105ab858285610aee565b6105b6858585610bc5565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906105939082908690610608908790611398565b61093a565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e00000000000000000000000060648201526084015b60405180910390fd5b6106e18282610e78565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161072991815260200190565b60405180910390a25050565b60606004805461050290611316565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e00000000000000000000000060648201526084016106ce565b6108138282610f98565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58260405161072991815260200190565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091908381101561091f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016106ce565b6105b6828686840361093a565b600033610593818585610bc5565b73ffffffffffffffffffffffffffffffffffffffff83166109dc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff8216610a7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610bbf5781811015610bb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106ce565b610bbf848484840361093a565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff8216610d0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610dc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610e05908490611398565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e6b91815260200190565b60405180910390a3610bbf565b73ffffffffffffffffffffffffffffffffffffffff8216610ef5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106ce565b8060026000828254610f079190611398565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f41908490611398565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156110f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040812083830390556002805484929061112d9084906113b0565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ae1565b60006020828403121561118f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146111bf57600080fd5b9392505050565b600060208083528351808285015260005b818110156111f3578581018301518582016040015282016111d7565b81811115611205576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125d57600080fd5b919050565b6000806040838503121561127557600080fd5b61127e83611239565b946020939093013593505050565b6000806000606084860312156112a157600080fd5b6112aa84611239565b92506112b860208501611239565b9150604084013590509250925092565b6000602082840312156112da57600080fd5b6111bf82611239565b600080604083850312156112f657600080fd5b6112ff83611239565b915061130d60208401611239565b90509250929050565b600181811c9082168061132a57607f821691505b602082108103611363577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113ab576113ab611369565b500190565b6000828210156113c2576113c2611369565b50039056fea164736f6c634300080f000a","sourceMap":"833:4510:229:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3616:519;;;;;;:::i;:::-;;:::i;:::-;;;516:14:357;;509:22;491:41;;479:2;464:18;3616:519:229;;;;;;;;1022:37;;;;;;;;719:42:357;707:55;;;689:74;;677:2;662:18;1022:37:229;543:226:357;2156:98:45;;;:::i;:::-;;;;;;;:::i;4433:197::-;;;;;;:::i;:::-;;:::i;3244:106::-;3331:12;;3244:106;;;2041:25:357;;;2029:2;2014:18;3244:106:45;1895:177:357;5192:286:45;;;;;;:::i;:::-;;:::i;5252:89:229:-;;;2582:4:357;5326:8:229;2570:17:357;2552:36;;2540:2;2525:18;5252:89:229;2410:184:357;5873:234:45;;;;;;:::i;:::-;;:::i;2739:254:229:-;;;;;;:::i;:::-;;:::i;:::-;;2009:40;;;;;;;;;;;;;;;;;;;;;3408:125:45;;;;;;:::i;:::-;3508:18;;3482:7;3508:18;;;;;;;;;;;;3408:125;2367:102;;;:::i;3174:260:229:-;;;;;;:::i;:::-;;:::i;6594:427:45:-;;;;;;:::i;:::-;;:::i;3729:189::-;;;;;;:::i;:::-;;:::i;4434:80:229:-;4501:6;4434:80;;4248:85;4314:12;4248:85;;3976:149:45;;;;;;:::i;:::-;4091:18;;;;4065:7;4091:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3976:149;1129:31:229;;;;;3616:519;3695:4;3727:25;3844:38;3997:40;4054:22;;;;;;:48;;-1:-1:-1;4080:22:229;;;;;;;;4054:48;:74;;;-1:-1:-1;4106:22:229;;;;;;;;4054:74;4047:81;3616:519;-1:-1:-1;;;;;3616:519:229:o;2156:98:45:-;2210:13;2242:5;2235:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2156:98;:::o;4433:197::-;4516:4;719:10:60;4570:32:45;719:10:60;4586:7:45;4595:6;4570:8;:32::i;:::-;-1:-1:-1;4619:4:45;;4433:197;-1:-1:-1;;;4433:197:45:o;5192:286::-;5319:4;719:10:60;5375:38:45;5391:4;719:10:60;5406:6:45;5375:15;:38::i;:::-;5423:27;5433:4;5439:2;5443:6;5423:9;:27::i;:::-;-1:-1:-1;5467:4:45;;5192:286;-1:-1:-1;;;;5192:286:45:o;5873:234::-;719:10:60;5961:4:45;4091:18;;;:11;:18;;;;;;;;;:27;;;;;;;;;;5961:4;;719:10:60;6015:64:45;;719:10:60;;4091:27:45;;6040:38;;6068:10;;6040:38;:::i;:::-;6015:8;:64::i;2739:254:229:-;1845:10;:20;1859:6;1845:20;;1837:85;;;;;;;4021:2:357;1837:85:229;;;4003:21:357;4060:2;4040:18;;;4033:30;4099:34;4079:18;;;4072:62;4170:22;4150:18;;;4143:50;4210:19;;1837:85:229;;;;;;;;;2934:19:::1;2940:3;2945:7;2934:5;:19::i;:::-;2973:3;2968:18;;;2978:7;2968:18;;;;2041:25:357::0;;2029:2;2014:18;;1895:177;2968:18:229::1;;;;;;;;2739:254:::0;;:::o;2367:102:45:-;2423:13;2455:7;2448:14;;;;;:::i;3174:260:229:-;1845:10;:20;1859:6;1845:20;;1837:85;;;;;;;4021:2:357;1837:85:229;;;4003:21:357;4060:2;4040:18;;;4033:30;4099:34;4079:18;;;4072:62;4170:22;4150:18;;;4143:50;4210:19;;1837:85:229;3819:416:357;1837:85:229;3371:21:::1;3377:5;3384:7;3371:5;:21::i;:::-;3412:5;3407:20;;;3419:7;3407:20;;;;2041:25:357::0;;2029:2;2014:18;;1895:177;6594:427:45;719:10:60;6687:4:45;4091:18;;;:11;:18;;;;;;;;;:27;;;;;;;;;;6687:4;;719:10:60;6831:15:45;6811:16;:35;;6803:85;;;;;;;4442:2:357;6803:85:45;;;4424:21:357;4481:2;4461:18;;;4454:30;4520:34;4500:18;;;4493:62;4591:7;4571:18;;;4564:35;4616:19;;6803:85:45;4240:401:357;6803:85:45;6922:60;6931:5;6938:7;6966:15;6947:16;:34;6922:8;:60::i;3729:189::-;3808:4;719:10:60;3862:28:45;719:10:60;3879:2:45;3883:6;3862:9;:28::i;10110:370::-;10241:19;;;10233:68;;;;;;;4848:2:357;10233:68:45;;;4830:21:357;4887:2;4867:18;;;4860:30;4926:34;4906:18;;;4899:62;4997:6;4977:18;;;4970:34;5021:19;;10233:68:45;4646:400:357;10233:68:45;10319:21;;;10311:68;;;;;;;5253:2:357;10311:68:45;;;5235:21:357;5292:2;5272:18;;;5265:30;5331:34;5311:18;;;5304:62;5402:4;5382:18;;;5375:32;5424:19;;10311:68:45;5051:398:357;10311:68:45;10390:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10441:32;;2041:25:357;;;10441:32:45;;2014:18:357;10441:32:45;;;;;;;;10110:370;;;:::o;10761:441::-;4091:18;;;;10891:24;4091:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;10977:17;10957:37;;10953:243;;11038:6;11018:16;:26;;11010:68;;;;;;;5656:2:357;11010:68:45;;;5638:21:357;5695:2;5675:18;;;5668:30;5734:31;5714:18;;;5707:59;5783:18;;11010:68:45;5454:353:357;11010:68:45;11120:51;11129:5;11136:7;11164:6;11145:16;:25;11120:8;:51::i;:::-;10881:321;10761:441;;;:::o;7475:651::-;7601:18;;;7593:68;;;;;;;6014:2:357;7593:68:45;;;5996:21:357;6053:2;6033:18;;;6026:30;6092:34;6072:18;;;6065:62;6163:7;6143:18;;;6136:35;6188:19;;7593:68:45;5812:401:357;7593:68:45;7679:16;;;7671:64;;;;;;;6420:2:357;7671:64:45;;;6402:21:357;6459:2;6439:18;;;6432:30;6498:34;6478:18;;;6471:62;6569:5;6549:18;;;6542:33;6592:19;;7671:64:45;6218:399:357;7671:64:45;7817:15;;;7795:19;7817:15;;;;;;;;;;;7850:21;;;;7842:72;;;;;;;6824:2:357;7842:72:45;;;6806:21:357;6863:2;6843:18;;;6836:30;6902:34;6882:18;;;6875:62;6973:8;6953:18;;;6946:36;6999:19;;7842:72:45;6622:402:357;7842:72:45;7948:15;;;;:9;:15;;;;;;;;;;;7966:20;;;7948:38;;8006:13;;;;;;;;:23;;7980:6;;7948:9;8006:23;;7980:6;;8006:23;:::i;:::-;;;;;;;;8060:2;8045:26;;8054:4;8045:26;;;8064:6;8045:26;;;;2041:25:357;;2029:2;2014:18;;1895:177;8045:26:45;;;;;;;;8082:37;9111:576;8402:389;8485:21;;;8477:65;;;;;;;7231:2:357;8477:65:45;;;7213:21:357;7270:2;7250:18;;;7243:30;7309:33;7289:18;;;7282:61;7360:18;;8477:65:45;7029:355:357;8477:65:45;8629:6;8613:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;8645:18:45;;;:9;:18;;;;;;;;;;:28;;8667:6;;8645:9;:28;;8667:6;;8645:28;:::i;:::-;;;;-1:-1:-1;;8688:37:45;;2041:25:357;;;8688:37:45;;;;8705:1;;8688:37;;2029:2:357;2014:18;8688:37:45;;;;;;;8402:389;;:::o;9111:576::-;9194:21;;;9186:67;;;;;;;7591:2:357;9186:67:45;;;7573:21:357;7630:2;7610:18;;;7603:30;7669:34;7649:18;;;7642:62;7740:3;7720:18;;;7713:31;7761:19;;9186:67:45;7389:397:357;9186:67:45;9349:18;;;9324:22;9349:18;;;;;;;;;;;9385:24;;;;9377:71;;;;;;;7993:2:357;9377:71:45;;;7975:21:357;8032:2;8012:18;;;8005:30;8071:34;8051:18;;;8044:62;8142:4;8122:18;;;8115:32;8164:19;;9377:71:45;7791:398:357;9377:71:45;9482:18;;;:9;:18;;;;;;;;;;9503:23;;;9482:44;;9546:12;:22;;9520:6;;9482:9;9546:22;;9520:6;;9546:22;:::i;:::-;;;;-1:-1:-1;;9584:37:45;;2041:25:357;;;9610:1:45;;9584:37;;;;;;2029:2:357;2014:18;9584:37:45;1895:177:357;14:332;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:66;223:5;219:78;212:5;209:89;199:117;;312:1;309;302:12;199:117;335:5;14:332;-1:-1:-1;;;14:332:357:o;774:656::-;886:4;915:2;944;933:9;926:21;976:6;970:13;1019:6;1014:2;1003:9;999:18;992:34;1044:1;1054:140;1068:6;1065:1;1062:13;1054:140;;;1163:14;;;1159:23;;1153:30;1129:17;;;1148:2;1125:26;1118:66;1083:10;;1054:140;;;1212:6;1209:1;1206:13;1203:91;;;1282:1;1277:2;1268:6;1257:9;1253:22;1249:31;1242:42;1203:91;-1:-1:-1;1346:2:357;1334:15;1351:66;1330:88;1315:104;;;;1421:2;1311:113;;774:656;-1:-1:-1;;;774:656:357:o;1435:196::-;1503:20;;1563:42;1552:54;;1542:65;;1532:93;;1621:1;1618;1611:12;1532:93;1435:196;;;:::o;1636:254::-;1704:6;1712;1765:2;1753:9;1744:7;1740:23;1736:32;1733:52;;;1781:1;1778;1771:12;1733:52;1804:29;1823:9;1804:29;:::i;:::-;1794:39;1880:2;1865:18;;;;1852:32;;-1:-1:-1;;;1636:254:357:o;2077:328::-;2154:6;2162;2170;2223:2;2211:9;2202:7;2198:23;2194:32;2191:52;;;2239:1;2236;2229:12;2191:52;2262:29;2281:9;2262:29;:::i;:::-;2252:39;;2310:38;2344:2;2333:9;2329:18;2310:38;:::i;:::-;2300:48;;2395:2;2384:9;2380:18;2367:32;2357:42;;2077:328;;;;;:::o;2599:186::-;2658:6;2711:2;2699:9;2690:7;2686:23;2682:32;2679:52;;;2727:1;2724;2717:12;2679:52;2750:29;2769:9;2750:29;:::i;2790:260::-;2858:6;2866;2919:2;2907:9;2898:7;2894:23;2890:32;2887:52;;;2935:1;2932;2925:12;2887:52;2958:29;2977:9;2958:29;:::i;:::-;2948:39;;3006:38;3040:2;3029:9;3025:18;3006:38;:::i;:::-;2996:48;;2790:260;;;;;:::o;3055:437::-;3134:1;3130:12;;;;3177;;;3198:61;;3252:4;3244:6;3240:17;3230:27;;3198:61;3305:2;3297:6;3294:14;3274:18;3271:38;3268:218;;3342:77;3339:1;3332:88;3443:4;3440:1;3433:15;3471:4;3468:1;3461:15;3268:218;;3055:437;;;:::o;3497:184::-;3549:77;3546:1;3539:88;3646:4;3643:1;3636:15;3670:4;3667:1;3660:15;3686:128;3726:3;3757:1;3753:6;3750:1;3747:13;3744:39;;;3763:18;;:::i;:::-;-1:-1:-1;3799:9:357;;3686:128::o;8194:125::-;8234:4;8262:1;8259;8256:8;8253:34;;;8267:18;;:::i;:::-;-1:-1:-1;8304:9:357;;8194:125::o","linkReferences":{},"immutableReferences":{"109440":[{"start":425,"length":32},{"start":881,"length":32}],"109443":[{"start":843,"length":32},{"start":992,"length":32},{"start":1573,"length":32},{"start":1884,"length":32}],"109446":[{"start":580,"length":32}]}},"methodIdentifiers":{"BRIDGE()":"ee9a31a2","REMOTE_TOKEN()":"033964be","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","bridge()":"e78cea92","burn(address,uint256)":"9dc29fac","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","increaseAllowance(address,uint256)":"39509351","l1Token()":"c01e1bd6","l2Bridge()":"ae1f6aaf","mint(address,uint256)":"40c10f19","name()":"06fdde03","remoteToken()":"d6c0b2c4","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","version()":"54fd4d50"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"_decimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BRIDGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REMOTE_TOKEN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1Token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Bridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"remoteToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Burn(address,uint256)\":{\"params\":{\"account\":\"Address of the account tokens are being burned from.\",\"amount\":\"Amount of tokens burned.\"}},\"Mint(address,uint256)\":{\"params\":{\"account\":\"Address of the account tokens are being minted for.\",\"amount\":\"Amount of tokens minted.\"}}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"bridge()\":{\"custom:legacy\":\"@notice Legacy getter for BRIDGE.\"},\"burn(address,uint256)\":{\"params\":{\"_amount\":\"Amount of tokens to burn.\",\"_from\":\"Address to burn tokens from.\"}},\"constructor\":{\"params\":{\"_bridge\":\"Address of the L2 standard bridge.\",\"_name\":\"ERC20 name.\",\"_remoteToken\":\"Address of the corresponding L1 token.\",\"_symbol\":\"ERC20 symbol.\"}},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"l1Token()\":{\"custom:legacy\":\"@notice Legacy getter for the remote token. Use REMOTE_TOKEN going forward.\"},\"l2Bridge()\":{\"custom:legacy\":\"@notice Legacy getter for the bridge. Use BRIDGE going forward.\"},\"mint(address,uint256)\":{\"params\":{\"_amount\":\"Amount of tokens to mint.\",\"_to\":\"Address to mint tokens to.\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"remoteToken()\":{\"custom:legacy\":\"@notice Legacy getter for REMOTE_TOKEN.\"},\"supportsInterface(bytes4)\":{\"params\":{\"_interfaceId\":\"Interface ID to check.\"},\"returns\":{\"_0\":\"Whether or not the interface is supported by this contract.\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"}},\"stateVariables\":{\"version\":{\"custom:semver\":\"1.3.0\"}},\"title\":\"OptimismMintableERC20\",\"version\":1},\"userdoc\":{\"events\":{\"Burn(address,uint256)\":{\"notice\":\"Emitted whenever tokens are burned from an account.\"},\"Mint(address,uint256)\":{\"notice\":\"Emitted whenever tokens are minted for an account.\"}},\"kind\":\"user\",\"methods\":{\"BRIDGE()\":{\"notice\":\"Address of the StandardBridge on this network.\"},\"REMOTE_TOKEN()\":{\"notice\":\"Address of the corresponding version of this token on the remote chain.\"},\"burn(address,uint256)\":{\"notice\":\"Allows the StandardBridge on this network to burn tokens.\"},\"mint(address,uint256)\":{\"notice\":\"Allows the StandardBridge on this network to mint tokens.\"},\"supportsInterface(bytes4)\":{\"notice\":\"ERC165 interface check function.\"},\"version()\":{\"notice\":\"Semantic version.\"}},\"notice\":\"OptimismMintableERC20 is a standard extension of the base ERC20 token contract designed to allow the StandardBridge contracts to mint and burn tokens. This makes it possible to use an OptimismMintablERC20 as the L2 representation of an L1 token, or vice-versa. Designed to be backwards compatible with the older StandardL2ERC20 token which was only meant for use on L2.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/universal/OptimismMintableERC20.sol\":\"OptimismMintableERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x24b04b8aacaaf1a4a0719117b29c9c3647b1f479c5ac2a60f5ff1bb6d839c238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://43e46da9d9f49741ecd876a269e71bc7494058d7a8e9478429998adb5bc3eaa0\",\"dweb:/ipfs/QmUtp4cqzf22C5rJ76AabKADquGWcjsc33yjYXxXC4sDvy\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"src/universal/IOptimismMintableERC20.sol\":{\"keccak256\":\"0x6f8133b39efcbcbd5088f195dfacf1bedc3146508429c3865443909af735a04c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://adc36971e2e120458769f050428d9d2b0504516660345020c2521ee46e6d8abf\",\"dweb:/ipfs/QmPbFusQkZgGKpU8Fv5JoqL4oVeJtM3yqnhRGLY9eZT5zZ\"]},\"src/universal/ISemver.sol\":{\"keccak256\":\"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a\",\"dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR\"]},\"src/universal/OptimismMintableERC20.sol\":{\"keccak256\":\"0x18721f41a831ec39d47002e73ecc2aa3e6624f8d1ab7b9f25b53348e8b0765df\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2162fa7529a77b199a07f37fca26c778542f6c8805f0365f1ceef90c5cd3a3a7\",\"dweb:/ipfs/QmaMmHJS52Bp95AGnrjh1zV7fLLqV3uAbFzkVLziMnPJYa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.15+commit.e14f2714"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_bridge","type":"address"},{"internalType":"address","name":"_remoteToken","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"spender","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Approval","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"Burn","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"Mint","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"BRIDGE","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"REMOTE_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"stateMutability":"view","type":"function","name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"bridge","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burn"},{"inputs":[],"stateMutability":"view","type":"function","name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"l1Token","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"l2Bridge","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"mint"},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"remoteToken","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes4","name":"_interfaceId","type":"bytes4"}],"stateMutability":"pure","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]}],"devdoc":{"kind":"dev","methods":{"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"bridge()":{"custom:legacy":"@notice Legacy getter for BRIDGE."},"burn(address,uint256)":{"params":{"_amount":"Amount of tokens to burn.","_from":"Address to burn tokens from."}},"constructor":{"params":{"_bridge":"Address of the L2 standard bridge.","_name":"ERC20 name.","_remoteToken":"Address of the corresponding L1 token.","_symbol":"ERC20 symbol."}},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"decreaseAllowance(address,uint256)":{"details":"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."},"increaseAllowance(address,uint256)":{"details":"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."},"l1Token()":{"custom:legacy":"@notice Legacy getter for the remote token. Use REMOTE_TOKEN going forward."},"l2Bridge()":{"custom:legacy":"@notice Legacy getter for the bridge. Use BRIDGE going forward."},"mint(address,uint256)":{"params":{"_amount":"Amount of tokens to mint.","_to":"Address to mint tokens to."}},"name()":{"details":"Returns the name of the token."},"remoteToken()":{"custom:legacy":"@notice Legacy getter for REMOTE_TOKEN."},"supportsInterface(bytes4)":{"params":{"_interfaceId":"Interface ID to check."},"returns":{"_0":"Whether or not the interface is supported by this contract."}},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`."}},"version":1},"userdoc":{"kind":"user","methods":{"BRIDGE()":{"notice":"Address of the StandardBridge on this network."},"REMOTE_TOKEN()":{"notice":"Address of the corresponding version of this token on the remote chain."},"burn(address,uint256)":{"notice":"Allows the StandardBridge on this network to burn tokens."},"mint(address,uint256)":{"notice":"Allows the StandardBridge on this network to mint tokens."},"supportsInterface(bytes4)":{"notice":"ERC165 interface check function."},"version()":{"notice":"Semantic version."}},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","ds-test/=lib/forge-std/lib/ds-test/src/","forge-std/=lib/forge-std/src/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/universal/OptimismMintableERC20.sol":"OptimismMintableERC20"},"evmVersion":"london","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol":{"keccak256":"0x24b04b8aacaaf1a4a0719117b29c9c3647b1f479c5ac2a60f5ff1bb6d839c238","urls":["bzz-raw://43e46da9d9f49741ecd876a269e71bc7494058d7a8e9478429998adb5bc3eaa0","dweb:/ipfs/QmUtp4cqzf22C5rJ76AabKADquGWcjsc33yjYXxXC4sDvy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b","urls":["bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34","dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca","urls":["bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd","dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7","urls":["bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92","dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1","urls":["bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f","dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy"],"license":"MIT"},"src/universal/IOptimismMintableERC20.sol":{"keccak256":"0x6f8133b39efcbcbd5088f195dfacf1bedc3146508429c3865443909af735a04c","urls":["bzz-raw://adc36971e2e120458769f050428d9d2b0504516660345020c2521ee46e6d8abf","dweb:/ipfs/QmPbFusQkZgGKpU8Fv5JoqL4oVeJtM3yqnhRGLY9eZT5zZ"],"license":"MIT"},"src/universal/ISemver.sol":{"keccak256":"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44","urls":["bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a","dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR"],"license":"MIT"},"src/universal/OptimismMintableERC20.sol":{"keccak256":"0x18721f41a831ec39d47002e73ecc2aa3e6624f8d1ab7b9f25b53348e8b0765df","urls":["bzz-raw://2162fa7529a77b199a07f37fca26c778542f6c8805f0365f1ceef90c5cd3a3a7","dweb:/ipfs/QmaMmHJS52Bp95AGnrjh1zV7fLLqV3uAbFzkVLziMnPJYa"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":49734,"contract":"src/universal/OptimismMintableERC20.sol:OptimismMintableERC20","label":"_balances","offset":0,"slot":"0","type":"t_mapping(t_address,t_uint256)"},{"astId":49740,"contract":"src/universal/OptimismMintableERC20.sol:OptimismMintableERC20","label":"_allowances","offset":0,"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":49742,"contract":"src/universal/OptimismMintableERC20.sol:OptimismMintableERC20","label":"_totalSupply","offset":0,"slot":"2","type":"t_uint256"},{"astId":49744,"contract":"src/universal/OptimismMintableERC20.sol:OptimismMintableERC20","label":"_name","offset":0,"slot":"3","type":"t_string_storage"},{"astId":49746,"contract":"src/universal/OptimismMintableERC20.sol:OptimismMintableERC20","label":"_symbol","offset":0,"slot":"4","type":"t_string_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"version":1,"kind":"user","methods":{"BRIDGE()":{"notice":"Address of the StandardBridge on this network."},"REMOTE_TOKEN()":{"notice":"Address of the corresponding version of this token on the remote chain."},"burn(address,uint256)":{"notice":"Allows the StandardBridge on this network to burn tokens."},"mint(address,uint256)":{"notice":"Allows the StandardBridge on this network to mint tokens."},"supportsInterface(bytes4)":{"notice":"ERC165 interface check function."},"version()":{"notice":"Semantic version."}},"events":{"Burn(address,uint256)":{"notice":"Emitted whenever tokens are burned from an account."},"Mint(address,uint256)":{"notice":"Emitted whenever tokens are minted for an account."}},"notice":"OptimismMintableERC20 is a standard extension of the base ERC20 token contract designed to allow the StandardBridge contracts to mint and burn tokens. This makes it possible to use an OptimismMintablERC20 as the L2 representation of an L1 token, or vice-versa. Designed to be backwards compatible with the older StandardL2ERC20 token which was only meant for use on L2."},"devdoc":{"version":1,"kind":"dev","methods":{"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"bridge()":{},"burn(address,uint256)":{"params":{"_amount":"Amount of tokens to burn.","_from":"Address to burn tokens from."}},"constructor":{"params":{"_bridge":"Address of the L2 standard bridge.","_name":"ERC20 name.","_remoteToken":"Address of the corresponding L1 token.","_symbol":"ERC20 symbol."}},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"decreaseAllowance(address,uint256)":{"details":"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."},"increaseAllowance(address,uint256)":{"details":"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."},"l1Token()":{},"l2Bridge()":{},"mint(address,uint256)":{"params":{"_amount":"Amount of tokens to mint.","_to":"Address to mint tokens to."}},"name()":{"details":"Returns the name of the token."},"remoteToken()":{},"supportsInterface(bytes4)":{"params":{"_interfaceId":"Interface ID to check."},"returns":{"_0":"Whether or not the interface is supported by this contract."}},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`."}},"events":{"Burn(address,uint256)":{"params":{"account":"Address of the account tokens are being burned from.","amount":"Amount of tokens burned."}},"Mint(address,uint256)":{"params":{"account":"Address of the account tokens are being minted for.","amount":"Amount of tokens minted."}}},"title":"OptimismMintableERC20"},"ast":{"absolutePath":"src/universal/OptimismMintableERC20.sol","id":109646,"exportedSymbols":{"ERC20":[50304],"IERC165":[54446],"ILegacyMintableERC20":[109333],"IOptimismMintableERC20":[109310],"ISemver":[109417],"OptimismMintableERC20":[109645]},"nodeType":"SourceUnit","src":"32:5312:229","nodes":[{"id":109419,"nodeType":"PragmaDirective","src":"32:23:229","nodes":[],"literals":["solidity","0.8",".15"]},{"id":109421,"nodeType":"ImportDirective","src":"57:70:229","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol","file":"@openzeppelin/contracts/token/ERC20/ERC20.sol","nameLocation":"-1:-1:-1","scope":109646,"sourceUnit":50305,"symbolAliases":[{"foreign":{"id":109420,"name":"ERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50304,"src":"66:5:229","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":109423,"nodeType":"ImportDirective","src":"128:82:229","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol","file":"@openzeppelin/contracts/utils/introspection/IERC165.sol","nameLocation":"-1:-1:-1","scope":109646,"sourceUnit":54447,"symbolAliases":[{"foreign":{"id":109422,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54446,"src":"137:7:229","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":109426,"nodeType":"ImportDirective","src":"211:104:229","nodes":[],"absolutePath":"src/universal/IOptimismMintableERC20.sol","file":"src/universal/IOptimismMintableERC20.sol","nameLocation":"-1:-1:-1","scope":109646,"sourceUnit":109334,"symbolAliases":[{"foreign":{"id":109424,"name":"ILegacyMintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109333,"src":"220:20:229","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":109425,"name":"IOptimismMintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109310,"src":"242:22:229","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":109428,"nodeType":"ImportDirective","src":"316:52:229","nodes":[],"absolutePath":"src/universal/ISemver.sol","file":"src/universal/ISemver.sol","nameLocation":"-1:-1:-1","scope":109646,"sourceUnit":109418,"symbolAliases":[{"foreign":{"id":109427,"name":"ISemver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109417,"src":"325:7:229","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":109645,"nodeType":"ContractDefinition","src":"833:4510:229","nodes":[{"id":109440,"nodeType":"VariableDeclaration","src":"1022:37:229","nodes":[],"constant":false,"documentation":{"id":109438,"nodeType":"StructuredDocumentation","src":"934:83:229","text":"@notice Address of the corresponding version of this token on the remote chain."},"functionSelector":"033964be","mutability":"immutable","name":"REMOTE_TOKEN","nameLocation":"1047:12:229","scope":109645,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109439,"name":"address","nodeType":"ElementaryTypeName","src":"1022:7:229","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":109443,"nodeType":"VariableDeclaration","src":"1129:31:229","nodes":[],"constant":false,"documentation":{"id":109441,"nodeType":"StructuredDocumentation","src":"1066:58:229","text":"@notice Address of the StandardBridge on this network."},"functionSelector":"ee9a31a2","mutability":"immutable","name":"BRIDGE","nameLocation":"1154:6:229","scope":109645,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109442,"name":"address","nodeType":"ElementaryTypeName","src":"1129:7:229","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":109446,"nodeType":"VariableDeclaration","src":"1205:32:229","nodes":[],"constant":false,"documentation":{"id":109444,"nodeType":"StructuredDocumentation","src":"1167:33:229","text":"@notice Decimals of the token"},"mutability":"immutable","name":"DECIMALS","nameLocation":"1229:8:229","scope":109645,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":109445,"name":"uint8","nodeType":"ElementaryTypeName","src":"1205:5:229","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"private"},{"id":109453,"nodeType":"EventDefinition","src":"1434:52:229","nodes":[],"anonymous":false,"documentation":{"id":109447,"nodeType":"StructuredDocumentation","src":"1244:185:229","text":"@notice Emitted whenever tokens are minted for an account.\n @param account Address of the account tokens are being minted for.\n @param amount Amount of tokens minted."},"eventSelector":"0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885","name":"Mint","nameLocation":"1440:4:229","parameters":{"id":109452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109449,"indexed":true,"mutability":"mutable","name":"account","nameLocation":"1461:7:229","nodeType":"VariableDeclaration","scope":109453,"src":"1445:23:229","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109448,"name":"address","nodeType":"ElementaryTypeName","src":"1445:7:229","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":109451,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1478:6:229","nodeType":"VariableDeclaration","scope":109453,"src":"1470:14:229","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":109450,"name":"uint256","nodeType":"ElementaryTypeName","src":"1470:7:229","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1444:41:229"}},{"id":109460,"nodeType":"EventDefinition","src":"1684:52:229","nodes":[],"anonymous":false,"documentation":{"id":109454,"nodeType":"StructuredDocumentation","src":"1492:187:229","text":"@notice Emitted whenever tokens are burned from an account.\n @param account Address of the account tokens are being burned from.\n @param amount Amount of tokens burned."},"eventSelector":"cc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5","name":"Burn","nameLocation":"1690:4:229","parameters":{"id":109459,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109456,"indexed":true,"mutability":"mutable","name":"account","nameLocation":"1711:7:229","nodeType":"VariableDeclaration","scope":109460,"src":"1695:23:229","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109455,"name":"address","nodeType":"ElementaryTypeName","src":"1695:7:229","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":109458,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1728:6:229","nodeType":"VariableDeclaration","scope":109460,"src":"1720:14:229","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":109457,"name":"uint256","nodeType":"ElementaryTypeName","src":"1720:7:229","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1694:41:229"}},{"id":109473,"nodeType":"ModifierDefinition","src":"1805:135:229","nodes":[],"body":{"id":109472,"nodeType":"Block","src":"1827:113:229","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":109467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":109464,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1845:3:229","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":109465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1845:10:229","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":109466,"name":"BRIDGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109443,"src":"1859:6:229","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1845:20:229","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696467652063616e206d696e7420616e64206275726e","id":109468,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1867:54:229","typeDescriptions":{"typeIdentifier":"t_stringliteral_684e9b7e2c7fdcb543a3efbe7d9ca90113ea3f2c0463752c3d3de870c67a963a","typeString":"literal_string \"OptimismMintableERC20: only bridge can mint and burn\""},"value":"OptimismMintableERC20: only bridge can mint and burn"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_684e9b7e2c7fdcb543a3efbe7d9ca90113ea3f2c0463752c3d3de870c67a963a","typeString":"literal_string \"OptimismMintableERC20: only bridge can mint and burn\""}],"id":109463,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1837:7:229","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":109469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1837:85:229","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":109470,"nodeType":"ExpressionStatement","src":"1837:85:229"},{"id":109471,"nodeType":"PlaceholderStatement","src":"1932:1:229"}]},"documentation":{"id":109461,"nodeType":"StructuredDocumentation","src":"1742:58:229","text":"@notice A modifier that only allows the bridge to call"},"name":"onlyBridge","nameLocation":"1814:10:229","parameters":{"id":109462,"nodeType":"ParameterList","parameters":[],"src":"1824:2:229"},"virtual":false,"visibility":"internal"},{"id":109477,"nodeType":"VariableDeclaration","src":"2009:40:229","nodes":[],"baseFunctions":[109416],"constant":true,"documentation":{"id":109474,"nodeType":"StructuredDocumentation","src":"1946:58:229","text":"@notice Semantic version.\n @custom:semver 1.3.0"},"functionSelector":"54fd4d50","mutability":"constant","name":"version","nameLocation":"2032:7:229","scope":109645,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":109475,"name":"string","nodeType":"ElementaryTypeName","src":"2009:6:229","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"312e332e30","id":109476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2042:7:229","typeDescriptions":{"typeIdentifier":"t_stringliteral_6a08c3e203132c561752255a4d52ffae85bb9c5d33cb3291520dea1b84356389","typeString":"literal_string \"1.3.0\""},"value":"1.3.0"},"visibility":"public"},{"id":109508,"nodeType":"FunctionDefinition","src":"2268:292:229","nodes":[],"body":{"id":109507,"nodeType":"Block","src":"2460:100:229","nodes":[],"statements":[{"expression":{"id":109497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":109495,"name":"REMOTE_TOKEN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109440,"src":"2470:12:229","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":109496,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109482,"src":"2485:12:229","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2470:27:229","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":109498,"nodeType":"ExpressionStatement","src":"2470:27:229"},{"expression":{"id":109501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":109499,"name":"BRIDGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109443,"src":"2507:6:229","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":109500,"name":"_bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109480,"src":"2516:7:229","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2507:16:229","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":109502,"nodeType":"ExpressionStatement","src":"2507:16:229"},{"expression":{"id":109505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":109503,"name":"DECIMALS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109446,"src":"2533:8:229","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":109504,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109488,"src":"2544:9:229","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"2533:20:229","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":109506,"nodeType":"ExpressionStatement","src":"2533:20:229"}]},"documentation":{"id":109478,"nodeType":"StructuredDocumentation","src":"2056:207:229","text":"@param _bridge Address of the L2 standard bridge.\n @param _remoteToken Address of the corresponding L1 token.\n @param _name ERC20 name.\n @param _symbol ERC20 symbol."},"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":109491,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109484,"src":"2440:5:229","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":109492,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109486,"src":"2447:7:229","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":109493,"kind":"baseConstructorSpecifier","modifierName":{"id":109490,"name":"ERC20","nodeType":"IdentifierPath","referencedDeclaration":50304,"src":"2434:5:229"},"nodeType":"ModifierInvocation","src":"2434:21:229"}],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":109489,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109480,"mutability":"mutable","name":"_bridge","nameLocation":"2297:7:229","nodeType":"VariableDeclaration","scope":109508,"src":"2289:15:229","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109479,"name":"address","nodeType":"ElementaryTypeName","src":"2289:7:229","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":109482,"mutability":"mutable","name":"_remoteToken","nameLocation":"2322:12:229","nodeType":"VariableDeclaration","scope":109508,"src":"2314:20:229","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109481,"name":"address","nodeType":"ElementaryTypeName","src":"2314:7:229","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":109484,"mutability":"mutable","name":"_name","nameLocation":"2358:5:229","nodeType":"VariableDeclaration","scope":109508,"src":"2344:19:229","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":109483,"name":"string","nodeType":"ElementaryTypeName","src":"2344:6:229","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":109486,"mutability":"mutable","name":"_symbol","nameLocation":"2387:7:229","nodeType":"VariableDeclaration","scope":109508,"src":"2373:21:229","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":109485,"name":"string","nodeType":"ElementaryTypeName","src":"2373:6:229","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":109488,"mutability":"mutable","name":"_decimals","nameLocation":"2410:9:229","nodeType":"VariableDeclaration","scope":109508,"src":"2404:15:229","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":109487,"name":"uint8","nodeType":"ElementaryTypeName","src":"2404:5:229","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"2279:146:229"},"returnParameters":{"id":109494,"nodeType":"ParameterList","parameters":[],"src":"2460:0:229"},"scope":109645,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":109532,"nodeType":"FunctionDefinition","src":"2739:254:229","nodes":[],"body":{"id":109531,"nodeType":"Block","src":"2924:69:229","nodes":[],"statements":[{"expression":{"arguments":[{"id":109522,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109511,"src":"2940:3:229","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":109523,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109513,"src":"2945:7:229","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":109521,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50121,"src":"2934:5:229","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":109524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2934:19:229","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":109525,"nodeType":"ExpressionStatement","src":"2934:19:229"},{"eventCall":{"arguments":[{"id":109527,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109511,"src":"2973:3:229","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":109528,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109513,"src":"2978:7:229","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":109526,"name":"Mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109453,"src":"2968:4:229","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":109529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2968:18:229","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":109530,"nodeType":"EmitStatement","src":"2963:23:229"}]},"baseFunctions":[109302,109325],"documentation":{"id":109509,"nodeType":"StructuredDocumentation","src":"2566:168:229","text":"@notice Allows the StandardBridge on this network to mint tokens.\n @param _to Address to mint tokens to.\n @param _amount Amount of tokens to mint."},"functionSelector":"40c10f19","implemented":true,"kind":"function","modifiers":[{"id":109519,"kind":"modifierInvocation","modifierName":{"id":109518,"name":"onlyBridge","nodeType":"IdentifierPath","referencedDeclaration":109473,"src":"2909:10:229"},"nodeType":"ModifierInvocation","src":"2909:10:229"}],"name":"mint","nameLocation":"2748:4:229","overrides":{"id":109517,"nodeType":"OverrideSpecifier","overrides":[{"id":109515,"name":"IOptimismMintableERC20","nodeType":"IdentifierPath","referencedDeclaration":109310,"src":"2855:22:229"},{"id":109516,"name":"ILegacyMintableERC20","nodeType":"IdentifierPath","referencedDeclaration":109333,"src":"2879:20:229"}],"src":"2846:54:229"},"parameters":{"id":109514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109511,"mutability":"mutable","name":"_to","nameLocation":"2770:3:229","nodeType":"VariableDeclaration","scope":109532,"src":"2762:11:229","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109510,"name":"address","nodeType":"ElementaryTypeName","src":"2762:7:229","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":109513,"mutability":"mutable","name":"_amount","nameLocation":"2791:7:229","nodeType":"VariableDeclaration","scope":109532,"src":"2783:15:229","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":109512,"name":"uint256","nodeType":"ElementaryTypeName","src":"2783:7:229","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2752:52:229"},"returnParameters":{"id":109520,"nodeType":"ParameterList","parameters":[],"src":"2924:0:229"},"scope":109645,"stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"id":109556,"nodeType":"FunctionDefinition","src":"3174:260:229","nodes":[],"body":{"id":109555,"nodeType":"Block","src":"3361:73:229","nodes":[],"statements":[{"expression":{"arguments":[{"id":109546,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109535,"src":"3377:5:229","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":109547,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109537,"src":"3384:7:229","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":109545,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50193,"src":"3371:5:229","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":109548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3371:21:229","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":109549,"nodeType":"ExpressionStatement","src":"3371:21:229"},{"eventCall":{"arguments":[{"id":109551,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109535,"src":"3412:5:229","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":109552,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109537,"src":"3419:7:229","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":109550,"name":"Burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109460,"src":"3407:4:229","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":109553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3407:20:229","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":109554,"nodeType":"EmitStatement","src":"3402:25:229"}]},"baseFunctions":[109309,109332],"documentation":{"id":109533,"nodeType":"StructuredDocumentation","src":"2999:170:229","text":"@notice Allows the StandardBridge on this network to burn tokens.\n @param _from Address to burn tokens from.\n @param _amount Amount of tokens to burn."},"functionSelector":"9dc29fac","implemented":true,"kind":"function","modifiers":[{"id":109543,"kind":"modifierInvocation","modifierName":{"id":109542,"name":"onlyBridge","nodeType":"IdentifierPath","referencedDeclaration":109473,"src":"3346:10:229"},"nodeType":"ModifierInvocation","src":"3346:10:229"}],"name":"burn","nameLocation":"3183:4:229","overrides":{"id":109541,"nodeType":"OverrideSpecifier","overrides":[{"id":109539,"name":"IOptimismMintableERC20","nodeType":"IdentifierPath","referencedDeclaration":109310,"src":"3292:22:229"},{"id":109540,"name":"ILegacyMintableERC20","nodeType":"IdentifierPath","referencedDeclaration":109333,"src":"3316:20:229"}],"src":"3283:54:229"},"parameters":{"id":109538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109535,"mutability":"mutable","name":"_from","nameLocation":"3205:5:229","nodeType":"VariableDeclaration","scope":109556,"src":"3197:13:229","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109534,"name":"address","nodeType":"ElementaryTypeName","src":"3197:7:229","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":109537,"mutability":"mutable","name":"_amount","nameLocation":"3228:7:229","nodeType":"VariableDeclaration","scope":109556,"src":"3220:15:229","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":109536,"name":"uint256","nodeType":"ElementaryTypeName","src":"3220:7:229","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3187:54:229"},"returnParameters":{"id":109544,"nodeType":"ParameterList","parameters":[],"src":"3361:0:229"},"scope":109645,"stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"id":109598,"nodeType":"FunctionDefinition","src":"3616:519:229","nodes":[],"body":{"id":109597,"nodeType":"Block","src":"3701:434:229","nodes":[],"statements":[{"assignments":[109565],"declarations":[{"constant":false,"id":109565,"mutability":"mutable","name":"iface1","nameLocation":"3718:6:229","nodeType":"VariableDeclaration","scope":109597,"src":"3711:13:229","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":109564,"name":"bytes4","nodeType":"ElementaryTypeName","src":"3711:6:229","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":109570,"initialValue":{"expression":{"arguments":[{"id":109567,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54446,"src":"3732:7:229","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC165_$54446_$","typeString":"type(contract IERC165)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC165_$54446_$","typeString":"type(contract IERC165)"}],"id":109566,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3727:4:229","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":109568,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3727:13:229","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC165_$54446","typeString":"type(contract IERC165)"}},"id":109569,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"interfaceId","nodeType":"MemberAccess","src":"3727:25:229","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"3711:41:229"},{"assignments":[109572],"declarations":[{"constant":false,"id":109572,"mutability":"mutable","name":"iface2","nameLocation":"3835:6:229","nodeType":"VariableDeclaration","scope":109597,"src":"3828:13:229","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":109571,"name":"bytes4","nodeType":"ElementaryTypeName","src":"3828:6:229","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":109577,"initialValue":{"expression":{"arguments":[{"id":109574,"name":"ILegacyMintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109333,"src":"3849:20:229","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ILegacyMintableERC20_$109333_$","typeString":"type(contract ILegacyMintableERC20)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_ILegacyMintableERC20_$109333_$","typeString":"type(contract ILegacyMintableERC20)"}],"id":109573,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3844:4:229","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":109575,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3844:26:229","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_ILegacyMintableERC20_$109333","typeString":"type(contract ILegacyMintableERC20)"}},"id":109576,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"interfaceId","nodeType":"MemberAccess","src":"3844:38:229","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"3828:54:229"},{"assignments":[109579],"declarations":[{"constant":false,"id":109579,"mutability":"mutable","name":"iface3","nameLocation":"3988:6:229","nodeType":"VariableDeclaration","scope":109597,"src":"3981:13:229","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":109578,"name":"bytes4","nodeType":"ElementaryTypeName","src":"3981:6:229","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":109584,"initialValue":{"expression":{"arguments":[{"id":109581,"name":"IOptimismMintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109310,"src":"4002:22:229","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IOptimismMintableERC20_$109310_$","typeString":"type(contract IOptimismMintableERC20)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IOptimismMintableERC20_$109310_$","typeString":"type(contract IOptimismMintableERC20)"}],"id":109580,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3997:4:229","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":109582,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3997:28:229","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IOptimismMintableERC20_$109310","typeString":"type(contract IOptimismMintableERC20)"}},"id":109583,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"interfaceId","nodeType":"MemberAccess","src":"3997:40:229","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"3981:56:229"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":109595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":109591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":109587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":109585,"name":"_interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109559,"src":"4054:12:229","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":109586,"name":"iface1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109565,"src":"4070:6:229","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"4054:22:229","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":109590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":109588,"name":"_interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109559,"src":"4080:12:229","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":109589,"name":"iface2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109572,"src":"4096:6:229","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"4080:22:229","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4054:48:229","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":109594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":109592,"name":"_interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109559,"src":"4106:12:229","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":109593,"name":"iface3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109579,"src":"4122:6:229","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"4106:22:229","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4054:74:229","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":109563,"id":109596,"nodeType":"Return","src":"4047:81:229"}]},"baseFunctions":[54445],"documentation":{"id":109557,"nodeType":"StructuredDocumentation","src":"3440:171:229","text":"@notice ERC165 interface check function.\n @param _interfaceId Interface ID to check.\n @return Whether or not the interface is supported by this contract."},"functionSelector":"01ffc9a7","implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"3625:17:229","parameters":{"id":109560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109559,"mutability":"mutable","name":"_interfaceId","nameLocation":"3650:12:229","nodeType":"VariableDeclaration","scope":109598,"src":"3643:19:229","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":109558,"name":"bytes4","nodeType":"ElementaryTypeName","src":"3643:6:229","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"3642:21:229"},"returnParameters":{"id":109563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109562,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":109598,"src":"3695:4:229","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":109561,"name":"bool","nodeType":"ElementaryTypeName","src":"3695:4:229","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3694:6:229"},"scope":109645,"stateMutability":"pure","virtual":true,"visibility":"external"},{"id":109607,"nodeType":"FunctionDefinition","src":"4248:85:229","nodes":[],"body":{"id":109606,"nodeType":"Block","src":"4297:36:229","nodes":[],"statements":[{"expression":{"id":109604,"name":"REMOTE_TOKEN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109440,"src":"4314:12:229","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":109603,"id":109605,"nodeType":"Return","src":"4307:19:229"}]},"baseFunctions":[109318],"documentation":{"id":109599,"nodeType":"StructuredDocumentation","src":"4141:102:229","text":"@custom:legacy\n @notice Legacy getter for the remote token. Use REMOTE_TOKEN going forward."},"functionSelector":"c01e1bd6","implemented":true,"kind":"function","modifiers":[],"name":"l1Token","nameLocation":"4257:7:229","parameters":{"id":109600,"nodeType":"ParameterList","parameters":[],"src":"4264:2:229"},"returnParameters":{"id":109603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109602,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":109607,"src":"4288:7:229","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109601,"name":"address","nodeType":"ElementaryTypeName","src":"4288:7:229","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4287:9:229"},"scope":109645,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":109616,"nodeType":"FunctionDefinition","src":"4434:80:229","nodes":[],"body":{"id":109615,"nodeType":"Block","src":"4484:30:229","nodes":[],"statements":[{"expression":{"id":109613,"name":"BRIDGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109443,"src":"4501:6:229","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":109612,"id":109614,"nodeType":"Return","src":"4494:13:229"}]},"documentation":{"id":109608,"nodeType":"StructuredDocumentation","src":"4339:90:229","text":"@custom:legacy\n @notice Legacy getter for the bridge. Use BRIDGE going forward."},"functionSelector":"ae1f6aaf","implemented":true,"kind":"function","modifiers":[],"name":"l2Bridge","nameLocation":"4443:8:229","parameters":{"id":109609,"nodeType":"ParameterList","parameters":[],"src":"4451:2:229"},"returnParameters":{"id":109612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109611,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":109616,"src":"4475:7:229","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109610,"name":"address","nodeType":"ElementaryTypeName","src":"4475:7:229","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4474:9:229"},"scope":109645,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":109625,"nodeType":"FunctionDefinition","src":"4591:89:229","nodes":[],"body":{"id":109624,"nodeType":"Block","src":"4644:36:229","nodes":[],"statements":[{"expression":{"id":109622,"name":"REMOTE_TOKEN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109440,"src":"4661:12:229","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":109621,"id":109623,"nodeType":"Return","src":"4654:19:229"}]},"baseFunctions":[109290],"documentation":{"id":109617,"nodeType":"StructuredDocumentation","src":"4520:66:229","text":"@custom:legacy\n @notice Legacy getter for REMOTE_TOKEN."},"functionSelector":"d6c0b2c4","implemented":true,"kind":"function","modifiers":[],"name":"remoteToken","nameLocation":"4600:11:229","parameters":{"id":109618,"nodeType":"ParameterList","parameters":[],"src":"4611:2:229"},"returnParameters":{"id":109621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109620,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":109625,"src":"4635:7:229","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109619,"name":"address","nodeType":"ElementaryTypeName","src":"4635:7:229","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4634:9:229"},"scope":109645,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":109634,"nodeType":"FunctionDefinition","src":"4751:78:229","nodes":[],"body":{"id":109633,"nodeType":"Block","src":"4799:30:229","nodes":[],"statements":[{"expression":{"id":109631,"name":"BRIDGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109443,"src":"4816:6:229","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":109630,"id":109632,"nodeType":"Return","src":"4809:13:229"}]},"baseFunctions":[109295],"documentation":{"id":109626,"nodeType":"StructuredDocumentation","src":"4686:60:229","text":"@custom:legacy\n @notice Legacy getter for BRIDGE."},"functionSelector":"e78cea92","implemented":true,"kind":"function","modifiers":[],"name":"bridge","nameLocation":"4760:6:229","parameters":{"id":109627,"nodeType":"ParameterList","parameters":[],"src":"4766:2:229"},"returnParameters":{"id":109630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109629,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":109634,"src":"4790:7:229","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109628,"name":"address","nodeType":"ElementaryTypeName","src":"4790:7:229","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4789:9:229"},"scope":109645,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":109644,"nodeType":"FunctionDefinition","src":"5252:89:229","nodes":[],"body":{"id":109643,"nodeType":"Block","src":"5309:32:229","nodes":[],"statements":[{"expression":{"id":109641,"name":"DECIMALS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109446,"src":"5326:8:229","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":109640,"id":109642,"nodeType":"Return","src":"5319:15:229"}]},"baseFunctions":[49793],"documentation":{"id":109635,"nodeType":"StructuredDocumentation","src":"4835:412:229","text":"@dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5.05` (`505 / 10 ** 2`).\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}."},"functionSelector":"313ce567","implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"5261:8:229","overrides":{"id":109637,"nodeType":"OverrideSpecifier","overrides":[],"src":"5284:8:229"},"parameters":{"id":109636,"nodeType":"ParameterList","parameters":[],"src":"5269:2:229"},"returnParameters":{"id":109640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109639,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":109644,"src":"5302:5:229","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":109638,"name":"uint8","nodeType":"ElementaryTypeName","src":"5302:5:229","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"5301:7:229"},"scope":109645,"stateMutability":"view","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":109430,"name":"IOptimismMintableERC20","nodeType":"IdentifierPath","referencedDeclaration":109310,"src":"867:22:229"},"id":109431,"nodeType":"InheritanceSpecifier","src":"867:22:229"},{"baseName":{"id":109432,"name":"ILegacyMintableERC20","nodeType":"IdentifierPath","referencedDeclaration":109333,"src":"891:20:229"},"id":109433,"nodeType":"InheritanceSpecifier","src":"891:20:229"},{"baseName":{"id":109434,"name":"ERC20","nodeType":"IdentifierPath","referencedDeclaration":50304,"src":"913:5:229"},"id":109435,"nodeType":"InheritanceSpecifier","src":"913:5:229"},{"baseName":{"id":109436,"name":"ISemver","nodeType":"IdentifierPath","referencedDeclaration":109417,"src":"920:7:229"},"id":109437,"nodeType":"InheritanceSpecifier","src":"920:7:229"}],"canonicalName":"OptimismMintableERC20","contractDependencies":[],"contractKind":"contract","documentation":{"id":109429,"nodeType":"StructuredDocumentation","src":"370:463:229","text":"@title OptimismMintableERC20\n @notice OptimismMintableERC20 is a standard extension of the base ERC20 token contract designed\n to allow the StandardBridge contracts to mint and burn tokens. This makes it possible to\n use an OptimismMintablERC20 as the L2 representation of an L1 token, or vice-versa.\n Designed to be backwards compatible with the older StandardL2ERC20 token which was only\n meant for use on L2."},"fullyImplemented":true,"linearizedBaseContracts":[109645,109417,50304,51088,50382,53291,109333,109310,54446],"name":"OptimismMintableERC20","nameLocation":"842:21:229","scope":109646,"usedErrors":[]}],"license":"MIT"},"id":229} \ No newline at end of file diff --git a/packages/sdk/src/forge-artifacts/OptimismMintableERC20Factory.json b/packages/sdk/src/forge-artifacts/OptimismMintableERC20Factory.json deleted file mode 100644 index c43204aaaace..000000000000 --- a/packages/sdk/src/forge-artifacts/OptimismMintableERC20Factory.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"BRIDGE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"bridge","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"createOptimismMintableERC20","inputs":[{"name":"_remoteToken","type":"address","internalType":"address"},{"name":"_name","type":"string","internalType":"string"},{"name":"_symbol","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"createOptimismMintableERC20WithDecimals","inputs":[{"name":"_remoteToken","type":"address","internalType":"address"},{"name":"_name","type":"string","internalType":"string"},{"name":"_symbol","type":"string","internalType":"string"},{"name":"_decimals","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"createStandardL2Token","inputs":[{"name":"_remoteToken","type":"address","internalType":"address"},{"name":"_name","type":"string","internalType":"string"},{"name":"_symbol","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[{"name":"_bridge","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"OptimismMintableERC20Created","inputs":[{"name":"localToken","type":"address","indexed":true,"internalType":"address"},{"name":"remoteToken","type":"address","indexed":true,"internalType":"address"},{"name":"deployer","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"StandardL2TokenCreated","inputs":[{"name":"remoteToken","type":"address","indexed":true,"internalType":"address"},{"name":"localToken","type":"address","indexed":true,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x608060405234801561001057600080fd5b5061001b6000610020565b610169565b600054610100900460ff16158080156100405750600054600160ff909116105b8061006b57506100593061015a60201b61059d1760201c565b15801561006b575060005460ff166001145b6100d25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff1916600117905580156100f5576000805461ff0019166101001790555b600180546001600160a01b0319166001600160a01b0384161790558015610156576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b6120e5806101786000396000f3fe60806040523480156200001157600080fd5b5060043610620000875760003560e01c8063c4d66de81162000062578063c4d66de81462000135578063ce5ac90f146200014e578063e78cea921462000165578063ee9a31a2146200018657600080fd5b806354fd4d50146200008c578063896f93d114620000e15780638cf0629c146200011e575b600080fd5b620000c96040518060400160405280600581526020017f312e392e3000000000000000000000000000000000000000000000000000000081525081565b604051620000d8919062000635565b60405180910390f35b620000f8620000f23660046200075d565b620001a5565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620000d8565b620000f86200012f366004620007da565b620001bc565b6200014c6200014636600462000871565b620003ba565b005b620000f86200015f3660046200075d565b6200058c565b600154620000f89073ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff16620000f8565b6000620001b48484846200058c565b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff851662000267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d4d696e7461626c654552433230466163746f72793a206d7560448201527f73742070726f766964652072656d6f746520746f6b656e20616464726573730060648201526084015b60405180910390fd5b6000858585856040516020016200028294939291906200088f565b604051602081830303815290604052805190602001209050600081600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688888888604051620002d290620005b9565b620002e2959493929190620008e9565b8190604051809103906000f590508015801562000303573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fceeb8e7d520d7f3b65fc11a262b91066940193b05d4f93df07cfdced0eb551cf60405160405180910390a360405133815273ffffffffffffffffffffffffffffffffffffffff80891691908316907f52fe89dd5930f343d25650b62fd367bae47088bcddffd2a88350a6ecdd620cdb9060200160405180910390a39695505050505050565b600054610100900460ff1615808015620003db5750600054600160ff909116105b80620003f75750303b158015620003f7575060005460ff166001145b62000485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200025e565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620004e457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905580156200058857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6000620001b48484846012620001bc565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61178a806200094f83390190565b6000815180845260005b81811015620005ef57602081850181015186830182015201620005d1565b8181111562000602576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006200064a6020830184620005c7565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146200067657600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112620006bc57600080fd5b813567ffffffffffffffff80821115620006da57620006da6200067b565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156200072357620007236200067b565b816040528381528660208588010111156200073d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156200077357600080fd5b6200077e8462000651565b9250602084013567ffffffffffffffff808211156200079c57600080fd5b620007aa87838801620006aa565b93506040860135915080821115620007c157600080fd5b50620007d086828701620006aa565b9150509250925092565b60008060008060808587031215620007f157600080fd5b620007fc8562000651565b9350602085013567ffffffffffffffff808211156200081a57600080fd5b6200082888838901620006aa565b945060408701359150808211156200083f57600080fd5b506200084e87828801620006aa565b925050606085013560ff811681146200086657600080fd5b939692955090935050565b6000602082840312156200088457600080fd5b6200064a8262000651565b73ffffffffffffffffffffffffffffffffffffffff85168152608060208201526000620008c06080830186620005c7565b8281036040840152620008d48186620005c7565b91505060ff8316606083015295945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a060408301526200092460a0830186620005c7565b8281036060840152620009388186620005c7565b91505060ff83166080830152969550505050505056fe60e06040523480156200001157600080fd5b506040516200178a3803806200178a833981016040819052620000349162000163565b828260036200004483826200029e565b5060046200005382826200029e565b5050506001600160a01b039384166080529390921660a052505060ff1660c0526200036a565b80516001600160a01b03811681146200009157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000be57600080fd5b81516001600160401b0380821115620000db57620000db62000096565b604051601f8301601f19908116603f0116810190828211818310171562000106576200010662000096565b816040528381526020925086838588010111156200012357600080fd5b600091505b8382101562000147578582018301518183018401529082019062000128565b83821115620001595760008385830101525b9695505050505050565b600080600080600060a086880312156200017c57600080fd5b620001878662000079565b9450620001976020870162000079565b60408701519094506001600160401b0380821115620001b557600080fd5b620001c389838a01620000ac565b94506060880151915080821115620001da57600080fd5b50620001e988828901620000ac565b925050608086015160ff811681146200020157600080fd5b809150509295509295909350565b600181811c908216806200022457607f821691505b6020821081036200024557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200029957600081815260208120601f850160051c81016020861015620002745750805b601f850160051c820191505b81811015620002955782815560010162000280565b5050505b505050565b81516001600160401b03811115620002ba57620002ba62000096565b620002d281620002cb84546200020f565b846200024b565b602080601f8311600181146200030a5760008415620002f15750858301515b600019600386901b1c1916600185901b17855562000295565b600085815260208120601f198616915b828110156200033b578886015182559484019460019091019084016200031a565b50858210156200035a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c0516113d4620003b6600039600061024401526000818161034b015281816103e001528181610625015261075c0152600081816101a9015261037101526113d46000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063ae1f6aaf1161008c578063dd62ed3e11610066578063dd62ed3e14610395578063e78cea9214610349578063ee9a31a2146103db57600080fd5b8063ae1f6aaf14610349578063c01e1bd61461036f578063d6c0b2c41461036f57600080fd5b80639dc29fac116100bd5780639dc29fac14610310578063a457c2d714610323578063a9059cbb1461033657600080fd5b806370a08231146102d257806395d89b411461030857600080fd5b806323b872dd1161012f5780633950935111610114578063395093511461026e57806340c10f191461028157806354fd4d501461029657600080fd5b806323b872dd1461022a578063313ce5671461023d57600080fd5b806306fdde031161016057806306fdde03146101f0578063095ea7b31461020557806318160ddd1461021857600080fd5b806301ffc9a71461017c578063033964be146101a4575b600080fd5b61018f61018a36600461117d565b610402565b60405190151581526020015b60405180910390f35b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f86104f3565b60405161019b91906111c6565b61018f610213366004611262565b610585565b6002545b60405190815260200161019b565b61018f61023836600461128c565b61059d565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161019b565b61018f61027c366004611262565b6105c1565b61029461028f366004611262565b61060d565b005b6101f86040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b61021c6102e03660046112c8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101f8610735565b61029461031e366004611262565b610744565b61018f610331366004611262565b61085b565b61018f610344366004611262565b61092c565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b61021c6103a33660046112e3565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f1d1d8b63000000000000000000000000000000000000000000000000000000007fec4fc8e3000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000085168314806104bb57507fffffffff00000000000000000000000000000000000000000000000000000000858116908316145b806104ea57507fffffffff00000000000000000000000000000000000000000000000000000000858116908216145b95945050505050565b60606003805461050290611316565b80601f016020809104026020016040519081016040528092919081815260200182805461052e90611316565b801561057b5780601f106105505761010080835404028352916020019161057b565b820191906000526020600020905b81548152906001019060200180831161055e57829003601f168201915b5050505050905090565b60003361059381858561093a565b5060019392505050565b6000336105ab858285610aee565b6105b6858585610bc5565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906105939082908690610608908790611398565b61093a565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e00000000000000000000000060648201526084015b60405180910390fd5b6106e18282610e78565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161072991815260200190565b60405180910390a25050565b60606004805461050290611316565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e00000000000000000000000060648201526084016106ce565b6108138282610f98565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58260405161072991815260200190565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091908381101561091f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016106ce565b6105b6828686840361093a565b600033610593818585610bc5565b73ffffffffffffffffffffffffffffffffffffffff83166109dc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff8216610a7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610bbf5781811015610bb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106ce565b610bbf848484840361093a565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff8216610d0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610dc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610e05908490611398565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e6b91815260200190565b60405180910390a3610bbf565b73ffffffffffffffffffffffffffffffffffffffff8216610ef5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106ce565b8060026000828254610f079190611398565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f41908490611398565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156110f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040812083830390556002805484929061112d9084906113b0565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ae1565b60006020828403121561118f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146111bf57600080fd5b9392505050565b600060208083528351808285015260005b818110156111f3578581018301518582016040015282016111d7565b81811115611205576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125d57600080fd5b919050565b6000806040838503121561127557600080fd5b61127e83611239565b946020939093013593505050565b6000806000606084860312156112a157600080fd5b6112aa84611239565b92506112b860208501611239565b9150604084013590509250925092565b6000602082840312156112da57600080fd5b6111bf82611239565b600080604083850312156112f657600080fd5b6112ff83611239565b915061130d60208401611239565b90509250929050565b600181811c9082168061132a57607f821691505b602082108103611363577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113ab576113ab611369565b500190565b6000828210156113c2576113c2611369565b50039056fea164736f6c634300080f000aa164736f6c634300080f000a","sourceMap":"770:5093:230:-:0;;;2694:66;;;;;;;;;-1:-1:-1;2718:35:230;2748:1;2718:10;:35::i;:::-;770:5093;;2876:89;3100:19:43;3123:13;;;;;;3122:14;;3168:34;;;;-1:-1:-1;3186:12:43;;3201:1;3186:12;;;;:16;3168:34;3167:97;;;;3209:33;3236:4;3209:18;;;;;:33;;:::i;:::-;3208:34;:55;;;;-1:-1:-1;3246:12:43;;;;;:17;3208:55;3146:190;;;;-1:-1:-1;;;3146:190:43;;216:2:357;3146:190:43;;;198:21:357;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:357;;;338:44;399:19;;3146:190:43;;;;;;;;3346:12;:16;;-1:-1:-1;;3346:16:43;3361:1;3346:16;;;3372:65;;;;3406:13;:20;;-1:-1:-1;;3406:20:43;;;;;3372:65;2942:6:230::1;:16:::0;;-1:-1:-1;;;;;;2942:16:230::1;-1:-1:-1::0;;;;;2942:16:230;::::1;;::::0;;3457:99:43;;;;3507:5;3491:21;;-1:-1:-1;;3491:21:43;;;3531:14;;-1:-1:-1;581:36:357;;3531:14:43;;569:2:357;554:18;3531:14:43;;;;;;;3457:99;3090:472;2876:89:230;:::o;1175:320:59:-;-1:-1:-1;;;;;1465:19:59;;:23;;;1175:320::o;429:194:357:-;770:5093:230;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040523480156200001157600080fd5b5060043610620000875760003560e01c8063c4d66de81162000062578063c4d66de81462000135578063ce5ac90f146200014e578063e78cea921462000165578063ee9a31a2146200018657600080fd5b806354fd4d50146200008c578063896f93d114620000e15780638cf0629c146200011e575b600080fd5b620000c96040518060400160405280600581526020017f312e392e3000000000000000000000000000000000000000000000000000000081525081565b604051620000d8919062000635565b60405180910390f35b620000f8620000f23660046200075d565b620001a5565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620000d8565b620000f86200012f366004620007da565b620001bc565b6200014c6200014636600462000871565b620003ba565b005b620000f86200015f3660046200075d565b6200058c565b600154620000f89073ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff16620000f8565b6000620001b48484846200058c565b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff851662000267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d4d696e7461626c654552433230466163746f72793a206d7560448201527f73742070726f766964652072656d6f746520746f6b656e20616464726573730060648201526084015b60405180910390fd5b6000858585856040516020016200028294939291906200088f565b604051602081830303815290604052805190602001209050600081600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688888888604051620002d290620005b9565b620002e2959493929190620008e9565b8190604051809103906000f590508015801562000303573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fceeb8e7d520d7f3b65fc11a262b91066940193b05d4f93df07cfdced0eb551cf60405160405180910390a360405133815273ffffffffffffffffffffffffffffffffffffffff80891691908316907f52fe89dd5930f343d25650b62fd367bae47088bcddffd2a88350a6ecdd620cdb9060200160405180910390a39695505050505050565b600054610100900460ff1615808015620003db5750600054600160ff909116105b80620003f75750303b158015620003f7575060005460ff166001145b62000485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200025e565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620004e457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905580156200058857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6000620001b48484846012620001bc565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61178a806200094f83390190565b6000815180845260005b81811015620005ef57602081850181015186830182015201620005d1565b8181111562000602576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006200064a6020830184620005c7565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146200067657600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112620006bc57600080fd5b813567ffffffffffffffff80821115620006da57620006da6200067b565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156200072357620007236200067b565b816040528381528660208588010111156200073d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156200077357600080fd5b6200077e8462000651565b9250602084013567ffffffffffffffff808211156200079c57600080fd5b620007aa87838801620006aa565b93506040860135915080821115620007c157600080fd5b50620007d086828701620006aa565b9150509250925092565b60008060008060808587031215620007f157600080fd5b620007fc8562000651565b9350602085013567ffffffffffffffff808211156200081a57600080fd5b6200082888838901620006aa565b945060408701359150808211156200083f57600080fd5b506200084e87828801620006aa565b925050606085013560ff811681146200086657600080fd5b939692955090935050565b6000602082840312156200088457600080fd5b6200064a8262000651565b73ffffffffffffffffffffffffffffffffffffffff85168152608060208201526000620008c06080830186620005c7565b8281036040840152620008d48186620005c7565b91505060ff8316606083015295945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a060408301526200092460a0830186620005c7565b8281036060840152620009388186620005c7565b91505060ff83166080830152969550505050505056fe60e06040523480156200001157600080fd5b506040516200178a3803806200178a833981016040819052620000349162000163565b828260036200004483826200029e565b5060046200005382826200029e565b5050506001600160a01b039384166080529390921660a052505060ff1660c0526200036a565b80516001600160a01b03811681146200009157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000be57600080fd5b81516001600160401b0380821115620000db57620000db62000096565b604051601f8301601f19908116603f0116810190828211818310171562000106576200010662000096565b816040528381526020925086838588010111156200012357600080fd5b600091505b8382101562000147578582018301518183018401529082019062000128565b83821115620001595760008385830101525b9695505050505050565b600080600080600060a086880312156200017c57600080fd5b620001878662000079565b9450620001976020870162000079565b60408701519094506001600160401b0380821115620001b557600080fd5b620001c389838a01620000ac565b94506060880151915080821115620001da57600080fd5b50620001e988828901620000ac565b925050608086015160ff811681146200020157600080fd5b809150509295509295909350565b600181811c908216806200022457607f821691505b6020821081036200024557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200029957600081815260208120601f850160051c81016020861015620002745750805b601f850160051c820191505b81811015620002955782815560010162000280565b5050505b505050565b81516001600160401b03811115620002ba57620002ba62000096565b620002d281620002cb84546200020f565b846200024b565b602080601f8311600181146200030a5760008415620002f15750858301515b600019600386901b1c1916600185901b17855562000295565b600085815260208120601f198616915b828110156200033b578886015182559484019460019091019084016200031a565b50858210156200035a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c0516113d4620003b6600039600061024401526000818161034b015281816103e001528181610625015261075c0152600081816101a9015261037101526113d46000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063ae1f6aaf1161008c578063dd62ed3e11610066578063dd62ed3e14610395578063e78cea9214610349578063ee9a31a2146103db57600080fd5b8063ae1f6aaf14610349578063c01e1bd61461036f578063d6c0b2c41461036f57600080fd5b80639dc29fac116100bd5780639dc29fac14610310578063a457c2d714610323578063a9059cbb1461033657600080fd5b806370a08231146102d257806395d89b411461030857600080fd5b806323b872dd1161012f5780633950935111610114578063395093511461026e57806340c10f191461028157806354fd4d501461029657600080fd5b806323b872dd1461022a578063313ce5671461023d57600080fd5b806306fdde031161016057806306fdde03146101f0578063095ea7b31461020557806318160ddd1461021857600080fd5b806301ffc9a71461017c578063033964be146101a4575b600080fd5b61018f61018a36600461117d565b610402565b60405190151581526020015b60405180910390f35b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f86104f3565b60405161019b91906111c6565b61018f610213366004611262565b610585565b6002545b60405190815260200161019b565b61018f61023836600461128c565b61059d565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161019b565b61018f61027c366004611262565b6105c1565b61029461028f366004611262565b61060d565b005b6101f86040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b61021c6102e03660046112c8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101f8610735565b61029461031e366004611262565b610744565b61018f610331366004611262565b61085b565b61018f610344366004611262565b61092c565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b61021c6103a33660046112e3565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f1d1d8b63000000000000000000000000000000000000000000000000000000007fec4fc8e3000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000085168314806104bb57507fffffffff00000000000000000000000000000000000000000000000000000000858116908316145b806104ea57507fffffffff00000000000000000000000000000000000000000000000000000000858116908216145b95945050505050565b60606003805461050290611316565b80601f016020809104026020016040519081016040528092919081815260200182805461052e90611316565b801561057b5780601f106105505761010080835404028352916020019161057b565b820191906000526020600020905b81548152906001019060200180831161055e57829003601f168201915b5050505050905090565b60003361059381858561093a565b5060019392505050565b6000336105ab858285610aee565b6105b6858585610bc5565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906105939082908690610608908790611398565b61093a565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e00000000000000000000000060648201526084015b60405180910390fd5b6106e18282610e78565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161072991815260200190565b60405180910390a25050565b60606004805461050290611316565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e00000000000000000000000060648201526084016106ce565b6108138282610f98565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58260405161072991815260200190565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091908381101561091f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016106ce565b6105b6828686840361093a565b600033610593818585610bc5565b73ffffffffffffffffffffffffffffffffffffffff83166109dc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff8216610a7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610bbf5781811015610bb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106ce565b610bbf848484840361093a565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff8216610d0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610dc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610e05908490611398565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e6b91815260200190565b60405180910390a3610bbf565b73ffffffffffffffffffffffffffffffffffffffff8216610ef5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106ce565b8060026000828254610f079190611398565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f41908490611398565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156110f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016106ce565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040812083830390556002805484929061112d9084906113b0565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610ae1565b60006020828403121561118f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146111bf57600080fd5b9392505050565b600060208083528351808285015260005b818110156111f3578581018301518582016040015282016111d7565b81811115611205576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125d57600080fd5b919050565b6000806040838503121561127557600080fd5b61127e83611239565b946020939093013593505050565b6000806000606084860312156112a157600080fd5b6112aa84611239565b92506112b860208501611239565b9150604084013590509250925092565b6000602082840312156112da57600080fd5b6111bf82611239565b600080604083850312156112f657600080fd5b6112ff83611239565b915061130d60208401611239565b90509250929050565b600181811c9082168061132a57607f821691505b602082108103611363577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113ab576113ab611369565b500190565b6000828210156113c2576113c2611369565b50039056fea164736f6c634300080f000aa164736f6c634300080f000a","sourceMap":"770:5093:230:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2577:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;3740:255;;;;;;:::i;:::-;;:::i;:::-;;;2746:42:357;2734:55;;;2716:74;;2704:2;2689:18;3740:255:230;2570:226:357;4908:953:230;;;;;;:::i;:::-;;:::i;2876:89::-;;;;;;:::i;:::-;;:::i;:::-;;4280:275;;;;;;:::i;:::-;;:::i;1115:21::-;;;;;;;;;3237:80;3304:6;;;;3237:80;;3740:255;3901:7;3931:57;3959:12;3973:5;3980:7;3931:27;:57::i;:::-;3924:64;3740:255;-1:-1:-1;;;;3740:255:230:o;4908:953::-;5110:7;5141:26;;;5133:102;;;;;;;3974:2:357;5133:102:230;;;3956:21:357;4013:2;3993:18;;;3986:30;4052:34;4032:18;;;4025:62;4123:33;4103:18;;;4096:61;4174:19;;5133:102:230;;;;;;;;;5246:12;5282;5296:5;5303:7;5312:9;5271:51;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5261:62;;;;;;5246:77;;5333:18;5407:4;5414:6;;;;;;;;;;;5422:12;5436:5;5443:7;5452:9;5374:88;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;5333:130;;5570:10;5533:48;;5556:12;5533:48;;;;;;;;;;;;5760:66;;5815:10;2716:74:357;;5760:66:230;;;;;;;;;;;2704:2:357;2689:18;5760:66:230;;;;;;;5844:10;4908:953;-1:-1:-1;;;;;;4908:953:230:o;2876:89::-;3100:19:43;3123:13;;;;;;3122:14;;3168:34;;;;-1:-1:-1;3186:12:43;;3201:1;3186:12;;;;:16;3168:34;3167:97;;;-1:-1:-1;3236:4:43;1465:19:59;:23;;;3208:55:43;;-1:-1:-1;3246:12:43;;;;;:17;3208:55;3146:190;;;;;;;5684:2:357;3146:190:43;;;5666:21:357;5723:2;5703:18;;;5696:30;5762:34;5742:18;;;5735:62;5833:16;5813:18;;;5806:44;5867:19;;3146:190:43;5482:410:357;3146:190:43;3346:12;:16;;;;3361:1;3346:16;;;3372:65;;;;3406:13;:20;;;;;;;;3372:65;2942:6:230::1;:16:::0;;;::::1;;::::0;::::1;;::::0;;3457:99:43;;;;3507:5;3491:21;;;;;;3531:14;;-1:-1:-1;6049:36:357;;3531:14:43;;6037:2:357;6022:18;3531:14:43;;;;;;;3457:99;3090:472;2876:89:230;:::o;4280:275::-;4445:7;4475:73;4515:12;4529:5;4536:7;4545:2;4475:39;:73::i;1175:320:59:-;1465:19;;;:23;;;1175:320::o;-1:-1:-1:-;;;;;;;;:::o;14:531:357:-;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;336:6;333:1;330:13;327:87;;;402:1;395:4;386:6;381:3;377:16;373:27;366:38;327:87;-1:-1:-1;459:2:357;447:15;464:66;443:88;434:98;;;;534:4;430:109;;14:531;-1:-1:-1;;14:531:357:o;550:220::-;699:2;688:9;681:21;662:4;719:45;760:2;749:9;745:18;737:6;719:45;:::i;:::-;711:53;550:220;-1:-1:-1;;;550:220:357:o;775:196::-;843:20;;903:42;892:54;;882:65;;872:93;;961:1;958;951:12;872:93;775:196;;;:::o;976:184::-;1028:77;1025:1;1018:88;1125:4;1122:1;1115:15;1149:4;1146:1;1139:15;1165:778;1208:5;1261:3;1254:4;1246:6;1242:17;1238:27;1228:55;;1279:1;1276;1269:12;1228:55;1315:6;1302:20;1341:18;1378:2;1374;1371:10;1368:36;;;1384:18;;:::i;:::-;1518:2;1512:9;1580:4;1572:13;;1423:66;1568:22;;;1592:2;1564:31;1560:40;1548:53;;;1616:18;;;1636:22;;;1613:46;1610:72;;;1662:18;;:::i;:::-;1702:10;1698:2;1691:22;1737:2;1729:6;1722:18;1783:3;1776:4;1771:2;1763:6;1759:15;1755:26;1752:35;1749:55;;;1800:1;1797;1790:12;1749:55;1864:2;1857:4;1849:6;1845:17;1838:4;1830:6;1826:17;1813:54;1911:1;1904:4;1899:2;1891:6;1887:15;1883:26;1876:37;1931:6;1922:15;;;;;;1165:778;;;;:::o;1948:617::-;2045:6;2053;2061;2114:2;2102:9;2093:7;2089:23;2085:32;2082:52;;;2130:1;2127;2120:12;2082:52;2153:29;2172:9;2153:29;:::i;:::-;2143:39;;2233:2;2222:9;2218:18;2205:32;2256:18;2297:2;2289:6;2286:14;2283:34;;;2313:1;2310;2303:12;2283:34;2336:50;2378:7;2369:6;2358:9;2354:22;2336:50;:::i;:::-;2326:60;;2439:2;2428:9;2424:18;2411:32;2395:48;;2468:2;2458:8;2455:16;2452:36;;;2484:1;2481;2474:12;2452:36;;2507:52;2551:7;2540:8;2529:9;2525:24;2507:52;:::i;:::-;2497:62;;;1948:617;;;;;:::o;2801:775::-;2905:6;2913;2921;2929;2982:3;2970:9;2961:7;2957:23;2953:33;2950:53;;;2999:1;2996;2989:12;2950:53;3022:29;3041:9;3022:29;:::i;:::-;3012:39;;3102:2;3091:9;3087:18;3074:32;3125:18;3166:2;3158:6;3155:14;3152:34;;;3182:1;3179;3172:12;3152:34;3205:50;3247:7;3238:6;3227:9;3223:22;3205:50;:::i;:::-;3195:60;;3308:2;3297:9;3293:18;3280:32;3264:48;;3337:2;3327:8;3324:16;3321:36;;;3353:1;3350;3343:12;3321:36;;3376:52;3420:7;3409:8;3398:9;3394:24;3376:52;:::i;:::-;3366:62;;;3478:2;3467:9;3463:18;3450:32;3522:4;3515:5;3511:16;3504:5;3501:27;3491:55;;3542:1;3539;3532:12;3491:55;2801:775;;;;-1:-1:-1;2801:775:357;;-1:-1:-1;;2801:775:357:o;3581:186::-;3640:6;3693:2;3681:9;3672:7;3668:23;3664:32;3661:52;;;3709:1;3706;3699:12;3661:52;3732:29;3751:9;3732:29;:::i;4204:583::-;4465:42;4457:6;4453:55;4442:9;4435:74;4545:3;4540:2;4529:9;4525:18;4518:31;4416:4;4572:46;4613:3;4602:9;4598:19;4590:6;4572:46;:::i;:::-;4666:9;4658:6;4654:22;4649:2;4638:9;4634:18;4627:50;4694:33;4720:6;4712;4694:33;:::i;:::-;4686:41;;;4775:4;4767:6;4763:17;4758:2;4747:9;4743:18;4736:45;4204:583;;;;;;;:::o;4792:685::-;5032:4;5061:42;5142:2;5134:6;5130:15;5119:9;5112:34;5194:2;5186:6;5182:15;5177:2;5166:9;5162:18;5155:43;;5234:3;5229:2;5218:9;5214:18;5207:31;5261:46;5302:3;5291:9;5287:19;5279:6;5261:46;:::i;:::-;5355:9;5347:6;5343:22;5338:2;5327:9;5323:18;5316:50;5383:33;5409:6;5401;5383:33;:::i;:::-;5375:41;;;5465:4;5457:6;5453:17;5447:3;5436:9;5432:19;5425:46;4792:685;;;;;;;;:::o","linkReferences":{}},"methodIdentifiers":{"BRIDGE()":"ee9a31a2","bridge()":"e78cea92","createOptimismMintableERC20(address,string,string)":"ce5ac90f","createOptimismMintableERC20WithDecimals(address,string,string,uint8)":"8cf0629c","createStandardL2Token(address,string,string)":"896f93d1","initialize(address)":"c4d66de8","version()":"54fd4d50"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"deployer\",\"type\":\"address\"}],\"name\":\"OptimismMintableERC20Created\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"name\":\"StandardL2TokenCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BRIDGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"createOptimismMintableERC20\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"_decimals\",\"type\":\"uint8\"}],\"name\":\"createOptimismMintableERC20WithDecimals\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"createStandardL2Token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bridge\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"custom:proxied\":\"@custom:predeployed 0x4200000000000000000000000000000000000012\",\"events\":{\"OptimismMintableERC20Created(address,address,address)\":{\"params\":{\"deployer\":\"Address of the account that deployed the token.\",\"localToken\":\"Address of the created token on the local chain.\",\"remoteToken\":\"Address of the corresponding token on the remote chain.\"}},\"StandardL2TokenCreated(address,address)\":{\"custom:legacy\":\"@notice Emitted whenever a new OptimismMintableERC20 is created. Legacy version of the newer OptimismMintableERC20Created event. We recommend relying on that event instead.\",\"params\":{\"localToken\":\"Address of the created token on the local chain.\",\"remoteToken\":\"Address of the token on the remote chain.\"}}},\"kind\":\"dev\",\"methods\":{\"BRIDGE()\":{\"custom:legacy\":\"\",\"returns\":{\"_0\":\"Address of the StandardBridge on this chain.\"}},\"createOptimismMintableERC20(address,string,string)\":{\"params\":{\"_name\":\"ERC20 name.\",\"_remoteToken\":\"Address of the token on the remote chain.\",\"_symbol\":\"ERC20 symbol.\"},\"returns\":{\"_0\":\"Address of the newly created token.\"}},\"createOptimismMintableERC20WithDecimals(address,string,string,uint8)\":{\"params\":{\"_decimals\":\"ERC20 decimals\",\"_name\":\"ERC20 name.\",\"_remoteToken\":\"Address of the token on the remote chain.\",\"_symbol\":\"ERC20 symbol.\"},\"returns\":{\"_0\":\"Address of the newly created token.\"}},\"createStandardL2Token(address,string,string)\":{\"custom:legacy\":\"@notice Creates an instance of the OptimismMintableERC20 contract. Legacy version of the newer createOptimismMintableERC20 function, which has a more intuitive name.\",\"params\":{\"_name\":\"ERC20 name.\",\"_remoteToken\":\"Address of the token on the remote chain.\",\"_symbol\":\"ERC20 symbol.\"},\"returns\":{\"_0\":\"Address of the newly created token.\"}},\"initialize(address)\":{\"params\":{\"_bridge\":\"Address of the StandardBridge on this chain.\"}}},\"stateVariables\":{\"bridge\":{\"custom:network-specific\":\"\"},\"spacer_0_2_30\":{\"custom:spacer\":\"OptimismMintableERC20Factory's initializer slot spacing\"},\"version\":{\"custom:semver\":\"1.9.0\"}},\"title\":\"OptimismMintableERC20Factory\",\"version\":1},\"userdoc\":{\"events\":{\"OptimismMintableERC20Created(address,address,address)\":{\"notice\":\"Emitted whenever a new OptimismMintableERC20 is created.\"}},\"kind\":\"user\",\"methods\":{\"BRIDGE()\":{\"notice\":\"Getter function for the address of the StandardBridge on this chain. Public getter is legacy and will be removed in the future. Use `bridge` instead.\"},\"bridge()\":{\"notice\":\"Address of the StandardBridge on this chain.\"},\"constructor\":{\"notice\":\"Constructs the OptimismMintableERC20Factory contract.\"},\"createOptimismMintableERC20(address,string,string)\":{\"notice\":\"Creates an instance of the OptimismMintableERC20 contract.\"},\"createOptimismMintableERC20WithDecimals(address,string,string,uint8)\":{\"notice\":\"Creates an instance of the OptimismMintableERC20 contract, with specified decimals.\"},\"initialize(address)\":{\"notice\":\"Initializes the contract.\"},\"version()\":{\"notice\":\"The semver MUST be bumped any time that there is a change in the OptimismMintableERC20 token contract since this contract is responsible for deploying OptimismMintableERC20 contracts.Semantic version.\"}},\"notice\":\"OptimismMintableERC20Factory is a factory contract that generates OptimismMintableERC20 contracts on the network it's deployed to. Simplifies the deployment process for users who may be less familiar with deploying smart contracts. Designed to be backwards compatible with the older StandardL2ERC20Factory contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/universal/OptimismMintableERC20Factory.sol\":\"OptimismMintableERC20Factory\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f\",\"dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x24b04b8aacaaf1a4a0719117b29c9c3647b1f479c5ac2a60f5ff1bb6d839c238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://43e46da9d9f49741ecd876a269e71bc7494058d7a8e9478429998adb5bc3eaa0\",\"dweb:/ipfs/QmUtp4cqzf22C5rJ76AabKADquGWcjsc33yjYXxXC4sDvy\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"src/universal/IOptimismMintableERC20.sol\":{\"keccak256\":\"0x6f8133b39efcbcbd5088f195dfacf1bedc3146508429c3865443909af735a04c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://adc36971e2e120458769f050428d9d2b0504516660345020c2521ee46e6d8abf\",\"dweb:/ipfs/QmPbFusQkZgGKpU8Fv5JoqL4oVeJtM3yqnhRGLY9eZT5zZ\"]},\"src/universal/ISemver.sol\":{\"keccak256\":\"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a\",\"dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR\"]},\"src/universal/OptimismMintableERC20.sol\":{\"keccak256\":\"0x18721f41a831ec39d47002e73ecc2aa3e6624f8d1ab7b9f25b53348e8b0765df\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2162fa7529a77b199a07f37fca26c778542f6c8805f0365f1ceef90c5cd3a3a7\",\"dweb:/ipfs/QmaMmHJS52Bp95AGnrjh1zV7fLLqV3uAbFzkVLziMnPJYa\"]},\"src/universal/OptimismMintableERC20Factory.sol\":{\"keccak256\":\"0xb508dc7b6f7fbf6e7156a11ae7a1e6ceed86f627c82b94d4f37dd98691b5e00f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5e27f27581f94a983c92809aeda85232e37e1de4552777fbf734c9a0fd84a5a9\",\"dweb:/ipfs/QmVNzxCwipUN2UgcrYf8n7Ei7y6uE76cCYcorAwRg96Kp3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.15+commit.e14f2714"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"localToken","type":"address","indexed":true},{"internalType":"address","name":"remoteToken","type":"address","indexed":true},{"internalType":"address","name":"deployer","type":"address","indexed":false}],"type":"event","name":"OptimismMintableERC20Created","anonymous":false},{"inputs":[{"internalType":"address","name":"remoteToken","type":"address","indexed":true},{"internalType":"address","name":"localToken","type":"address","indexed":true}],"type":"event","name":"StandardL2TokenCreated","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"BRIDGE","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"bridge","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_remoteToken","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"createOptimismMintableERC20","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_remoteToken","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"}],"stateMutability":"nonpayable","type":"function","name":"createOptimismMintableERC20WithDecimals","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_remoteToken","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"createStandardL2Token","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_bridge","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]}],"devdoc":{"kind":"dev","methods":{"BRIDGE()":{"custom:legacy":"","returns":{"_0":"Address of the StandardBridge on this chain."}},"createOptimismMintableERC20(address,string,string)":{"params":{"_name":"ERC20 name.","_remoteToken":"Address of the token on the remote chain.","_symbol":"ERC20 symbol."},"returns":{"_0":"Address of the newly created token."}},"createOptimismMintableERC20WithDecimals(address,string,string,uint8)":{"params":{"_decimals":"ERC20 decimals","_name":"ERC20 name.","_remoteToken":"Address of the token on the remote chain.","_symbol":"ERC20 symbol."},"returns":{"_0":"Address of the newly created token."}},"createStandardL2Token(address,string,string)":{"custom:legacy":"@notice Creates an instance of the OptimismMintableERC20 contract. Legacy version of the newer createOptimismMintableERC20 function, which has a more intuitive name.","params":{"_name":"ERC20 name.","_remoteToken":"Address of the token on the remote chain.","_symbol":"ERC20 symbol."},"returns":{"_0":"Address of the newly created token."}},"initialize(address)":{"params":{"_bridge":"Address of the StandardBridge on this chain."}}},"version":1},"userdoc":{"kind":"user","methods":{"BRIDGE()":{"notice":"Getter function for the address of the StandardBridge on this chain. Public getter is legacy and will be removed in the future. Use `bridge` instead."},"bridge()":{"notice":"Address of the StandardBridge on this chain."},"constructor":{"notice":"Constructs the OptimismMintableERC20Factory contract."},"createOptimismMintableERC20(address,string,string)":{"notice":"Creates an instance of the OptimismMintableERC20 contract."},"createOptimismMintableERC20WithDecimals(address,string,string,uint8)":{"notice":"Creates an instance of the OptimismMintableERC20 contract, with specified decimals."},"initialize(address)":{"notice":"Initializes the contract."},"version()":{"notice":"The semver MUST be bumped any time that there is a change in the OptimismMintableERC20 token contract since this contract is responsible for deploying OptimismMintableERC20 contracts.Semantic version."}},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","ds-test/=lib/forge-std/lib/ds-test/src/","forge-std/=lib/forge-std/src/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/universal/OptimismMintableERC20Factory.sol":"OptimismMintableERC20Factory"},"evmVersion":"london","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66","urls":["bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f","dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol":{"keccak256":"0x24b04b8aacaaf1a4a0719117b29c9c3647b1f479c5ac2a60f5ff1bb6d839c238","urls":["bzz-raw://43e46da9d9f49741ecd876a269e71bc7494058d7a8e9478429998adb5bc3eaa0","dweb:/ipfs/QmUtp4cqzf22C5rJ76AabKADquGWcjsc33yjYXxXC4sDvy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b","urls":["bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34","dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca","urls":["bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd","dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10","urls":["bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487","dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7","urls":["bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92","dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1","urls":["bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f","dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy"],"license":"MIT"},"src/universal/IOptimismMintableERC20.sol":{"keccak256":"0x6f8133b39efcbcbd5088f195dfacf1bedc3146508429c3865443909af735a04c","urls":["bzz-raw://adc36971e2e120458769f050428d9d2b0504516660345020c2521ee46e6d8abf","dweb:/ipfs/QmPbFusQkZgGKpU8Fv5JoqL4oVeJtM3yqnhRGLY9eZT5zZ"],"license":"MIT"},"src/universal/ISemver.sol":{"keccak256":"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44","urls":["bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a","dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR"],"license":"MIT"},"src/universal/OptimismMintableERC20.sol":{"keccak256":"0x18721f41a831ec39d47002e73ecc2aa3e6624f8d1ab7b9f25b53348e8b0765df","urls":["bzz-raw://2162fa7529a77b199a07f37fca26c778542f6c8805f0365f1ceef90c5cd3a3a7","dweb:/ipfs/QmaMmHJS52Bp95AGnrjh1zV7fLLqV3uAbFzkVLziMnPJYa"],"license":"MIT"},"src/universal/OptimismMintableERC20Factory.sol":{"keccak256":"0xb508dc7b6f7fbf6e7156a11ae7a1e6ceed86f627c82b94d4f37dd98691b5e00f","urls":["bzz-raw://5e27f27581f94a983c92809aeda85232e37e1de4552777fbf734c9a0fd84a5a9","dweb:/ipfs/QmVNzxCwipUN2UgcrYf8n7Ei7y6uE76cCYcorAwRg96Kp3"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":49534,"contract":"src/universal/OptimismMintableERC20Factory.sol:OptimismMintableERC20Factory","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":49537,"contract":"src/universal/OptimismMintableERC20Factory.sol:OptimismMintableERC20Factory","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":109661,"contract":"src/universal/OptimismMintableERC20Factory.sol:OptimismMintableERC20Factory","label":"spacer_0_2_30","offset":2,"slot":"0","type":"t_bytes30"},{"astId":109664,"contract":"src/universal/OptimismMintableERC20Factory.sol:OptimismMintableERC20Factory","label":"bridge","offset":0,"slot":"1","type":"t_address"},{"astId":109669,"contract":"src/universal/OptimismMintableERC20Factory.sol:OptimismMintableERC20Factory","label":"__gap","offset":0,"slot":"2","type":"t_array(t_uint256)49_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)49_storage":{"encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568","base":"t_uint256"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes30":{"encoding":"inplace","label":"bytes30","numberOfBytes":"30"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"version":1,"kind":"user","methods":{"BRIDGE()":{"notice":"Getter function for the address of the StandardBridge on this chain. Public getter is legacy and will be removed in the future. Use `bridge` instead."},"bridge()":{"notice":"Address of the StandardBridge on this chain."},"constructor":{"notice":"Constructs the OptimismMintableERC20Factory contract."},"createOptimismMintableERC20(address,string,string)":{"notice":"Creates an instance of the OptimismMintableERC20 contract."},"createOptimismMintableERC20WithDecimals(address,string,string,uint8)":{"notice":"Creates an instance of the OptimismMintableERC20 contract, with specified decimals."},"initialize(address)":{"notice":"Initializes the contract."},"version()":{"notice":"The semver MUST be bumped any time that there is a change in the OptimismMintableERC20 token contract since this contract is responsible for deploying OptimismMintableERC20 contracts.Semantic version."}},"events":{"OptimismMintableERC20Created(address,address,address)":{"notice":"Emitted whenever a new OptimismMintableERC20 is created."}},"notice":"OptimismMintableERC20Factory is a factory contract that generates OptimismMintableERC20 contracts on the network it's deployed to. Simplifies the deployment process for users who may be less familiar with deploying smart contracts. Designed to be backwards compatible with the older StandardL2ERC20Factory contract."},"devdoc":{"version":1,"kind":"dev","methods":{"BRIDGE()":{"returns":{"_0":"Address of the StandardBridge on this chain."}},"createOptimismMintableERC20(address,string,string)":{"params":{"_name":"ERC20 name.","_remoteToken":"Address of the token on the remote chain.","_symbol":"ERC20 symbol."},"returns":{"_0":"Address of the newly created token."}},"createOptimismMintableERC20WithDecimals(address,string,string,uint8)":{"params":{"_decimals":"ERC20 decimals","_name":"ERC20 name.","_remoteToken":"Address of the token on the remote chain.","_symbol":"ERC20 symbol."},"returns":{"_0":"Address of the newly created token."}},"createStandardL2Token(address,string,string)":{"params":{"_name":"ERC20 name.","_remoteToken":"Address of the token on the remote chain.","_symbol":"ERC20 symbol."},"returns":{"_0":"Address of the newly created token."}},"initialize(address)":{"params":{"_bridge":"Address of the StandardBridge on this chain."}}},"events":{"OptimismMintableERC20Created(address,address,address)":{"params":{"deployer":"Address of the account that deployed the token.","localToken":"Address of the created token on the local chain.","remoteToken":"Address of the corresponding token on the remote chain."}},"StandardL2TokenCreated(address,address)":{"params":{"localToken":"Address of the created token on the local chain.","remoteToken":"Address of the token on the remote chain."}}},"title":"OptimismMintableERC20Factory"},"ast":{"absolutePath":"src/universal/OptimismMintableERC20Factory.sol","id":109832,"exportedSymbols":{"ISemver":[109417],"Initializable":[49678],"OptimismMintableERC20":[109645],"OptimismMintableERC20Factory":[109831]},"nodeType":"SourceUnit","src":"32:5832:230","nodes":[{"id":109647,"nodeType":"PragmaDirective","src":"32:23:230","nodes":[],"literals":["solidity","0.8",".15"]},{"id":109649,"nodeType":"ImportDirective","src":"57:80:230","nodes":[],"absolutePath":"src/universal/OptimismMintableERC20.sol","file":"src/universal/OptimismMintableERC20.sol","nameLocation":"-1:-1:-1","scope":109832,"sourceUnit":109646,"symbolAliases":[{"foreign":{"id":109648,"name":"OptimismMintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109645,"src":"66:21:230","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":109651,"nodeType":"ImportDirective","src":"138:52:230","nodes":[],"absolutePath":"src/universal/ISemver.sol","file":"src/universal/ISemver.sol","nameLocation":"-1:-1:-1","scope":109832,"sourceUnit":109418,"symbolAliases":[{"foreign":{"id":109650,"name":"ISemver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109417,"src":"147:7:230","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":109653,"nodeType":"ImportDirective","src":"191:86:230","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":109832,"sourceUnit":49679,"symbolAliases":[{"foreign":{"id":109652,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49678,"src":"200:13:230","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":109831,"nodeType":"ContractDefinition","src":"770:5093:230","nodes":[{"id":109661,"nodeType":"VariableDeclaration","src":"985:29:230","nodes":[],"constant":false,"documentation":{"id":109659,"nodeType":"StructuredDocumentation","src":"840:140:230","text":"@custom:spacer OptimismMintableERC20Factory's initializer slot spacing\n @notice Spacer to avoid packing into the initializer slot"},"mutability":"mutable","name":"spacer_0_2_30","nameLocation":"1001:13:230","scope":109831,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes30","typeString":"bytes30"},"typeName":{"id":109660,"name":"bytes30","nodeType":"ElementaryTypeName","src":"985:7:230","typeDescriptions":{"typeIdentifier":"t_bytes30","typeString":"bytes30"}},"visibility":"private"},{"id":109664,"nodeType":"VariableDeclaration","src":"1115:21:230","nodes":[],"constant":false,"documentation":{"id":109662,"nodeType":"StructuredDocumentation","src":"1021:89:230","text":"@notice Address of the StandardBridge on this chain.\n @custom:network-specific"},"functionSelector":"e78cea92","mutability":"mutable","name":"bridge","nameLocation":"1130:6:230","scope":109831,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109663,"name":"address","nodeType":"ElementaryTypeName","src":"1115:7:230","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":109669,"nodeType":"VariableDeclaration","src":"1370:25:230","nodes":[],"constant":false,"documentation":{"id":109665,"nodeType":"StructuredDocumentation","src":"1143:222:230","text":"@notice Reserve extra slots in the storage layout for future upgrades.\n A gap size of 49 was chosen here, so that the first slot used in a child contract\n would be 1 plus a multiple of 50."},"mutability":"mutable","name":"__gap","nameLocation":"1390:5:230","scope":109831,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage","typeString":"uint256[49]"},"typeName":{"baseType":{"id":109666,"name":"uint256","nodeType":"ElementaryTypeName","src":"1370:7:230","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":109668,"length":{"hexValue":"3439","id":109667,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1378:2:230","typeDescriptions":{"typeIdentifier":"t_rational_49_by_1","typeString":"int_const 49"},"value":"49"},"nodeType":"ArrayTypeName","src":"1370:11:230","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage_ptr","typeString":"uint256[49]"}},"visibility":"private"},{"id":109676,"nodeType":"EventDefinition","src":"1767:86:230","nodes":[],"anonymous":false,"documentation":{"id":109670,"nodeType":"StructuredDocumentation","src":"1402:360:230","text":"@custom:legacy\n @notice Emitted whenever a new OptimismMintableERC20 is created. Legacy version of the newer\n OptimismMintableERC20Created event. We recommend relying on that event instead.\n @param remoteToken Address of the token on the remote chain.\n @param localToken Address of the created token on the local chain."},"eventSelector":"ceeb8e7d520d7f3b65fc11a262b91066940193b05d4f93df07cfdced0eb551cf","name":"StandardL2TokenCreated","nameLocation":"1773:22:230","parameters":{"id":109675,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109672,"indexed":true,"mutability":"mutable","name":"remoteToken","nameLocation":"1812:11:230","nodeType":"VariableDeclaration","scope":109676,"src":"1796:27:230","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109671,"name":"address","nodeType":"ElementaryTypeName","src":"1796:7:230","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":109674,"indexed":true,"mutability":"mutable","name":"localToken","nameLocation":"1841:10:230","nodeType":"VariableDeclaration","scope":109676,"src":"1825:26:230","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109673,"name":"address","nodeType":"ElementaryTypeName","src":"1825:7:230","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1795:57:230"}},{"id":109685,"nodeType":"EventDefinition","src":"2166:110:230","nodes":[],"anonymous":false,"documentation":{"id":109677,"nodeType":"StructuredDocumentation","src":"1859:302:230","text":"@notice Emitted whenever a new OptimismMintableERC20 is created.\n @param localToken Address of the created token on the local chain.\n @param remoteToken Address of the corresponding token on the remote chain.\n @param deployer Address of the account that deployed the token."},"eventSelector":"52fe89dd5930f343d25650b62fd367bae47088bcddffd2a88350a6ecdd620cdb","name":"OptimismMintableERC20Created","nameLocation":"2172:28:230","parameters":{"id":109684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109679,"indexed":true,"mutability":"mutable","name":"localToken","nameLocation":"2217:10:230","nodeType":"VariableDeclaration","scope":109685,"src":"2201:26:230","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109678,"name":"address","nodeType":"ElementaryTypeName","src":"2201:7:230","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":109681,"indexed":true,"mutability":"mutable","name":"remoteToken","nameLocation":"2245:11:230","nodeType":"VariableDeclaration","scope":109685,"src":"2229:27:230","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109680,"name":"address","nodeType":"ElementaryTypeName","src":"2229:7:230","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":109683,"indexed":false,"mutability":"mutable","name":"deployer","nameLocation":"2266:8:230","nodeType":"VariableDeclaration","scope":109685,"src":"2258:16:230","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109682,"name":"address","nodeType":"ElementaryTypeName","src":"2258:7:230","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2200:75:230"}},{"id":109689,"nodeType":"VariableDeclaration","src":"2577:40:230","nodes":[],"baseFunctions":[109416],"constant":true,"documentation":{"id":109686,"nodeType":"StructuredDocumentation","src":"2282:290:230","text":"@notice The semver MUST be bumped any time that there is a change in\n the OptimismMintableERC20 token contract since this contract\n is responsible for deploying OptimismMintableERC20 contracts.\n @notice Semantic version.\n @custom:semver 1.9.0"},"functionSelector":"54fd4d50","mutability":"constant","name":"version","nameLocation":"2600:7:230","scope":109831,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":109687,"name":"string","nodeType":"ElementaryTypeName","src":"2577:6:230","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"312e392e30","id":109688,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2610:7:230","typeDescriptions":{"typeIdentifier":"t_stringliteral_48b337767c221abef259fe87e655d8fa1026fb5e60ec68ad68fa7e00bb7f050c","typeString":"literal_string \"1.9.0\""},"value":"1.9.0"},"visibility":"public"},{"id":109701,"nodeType":"FunctionDefinition","src":"2694:66:230","nodes":[],"body":{"id":109700,"nodeType":"Block","src":"2708:52:230","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":109696,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2748:1:230","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":109695,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2740:7:230","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":109694,"name":"address","nodeType":"ElementaryTypeName","src":"2740:7:230","typeDescriptions":{}}},"id":109697,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2740:10:230","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":109693,"name":"initialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109714,"src":"2718:10:230","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":109698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["_bridge"],"nodeType":"FunctionCall","src":"2718:35:230","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":109699,"nodeType":"ExpressionStatement","src":"2718:35:230"}]},"documentation":{"id":109690,"nodeType":"StructuredDocumentation","src":"2624:65:230","text":"@notice Constructs the OptimismMintableERC20Factory contract."},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":109691,"nodeType":"ParameterList","parameters":[],"src":"2705:2:230"},"returnParameters":{"id":109692,"nodeType":"ParameterList","parameters":[],"src":"2708:0:230"},"scope":109831,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":109714,"nodeType":"FunctionDefinition","src":"2876:89:230","nodes":[],"body":{"id":109713,"nodeType":"Block","src":"2932:33:230","nodes":[],"statements":[{"expression":{"id":109711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":109709,"name":"bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109664,"src":"2942:6:230","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":109710,"name":"_bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109704,"src":"2951:7:230","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2942:16:230","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":109712,"nodeType":"ExpressionStatement","src":"2942:16:230"}]},"documentation":{"id":109702,"nodeType":"StructuredDocumentation","src":"2766:105:230","text":"@notice Initializes the contract.\n @param _bridge Address of the StandardBridge on this chain."},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":109707,"kind":"modifierInvocation","modifierName":{"id":109706,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":49598,"src":"2920:11:230"},"nodeType":"ModifierInvocation","src":"2920:11:230"}],"name":"initialize","nameLocation":"2885:10:230","parameters":{"id":109705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109704,"mutability":"mutable","name":"_bridge","nameLocation":"2904:7:230","nodeType":"VariableDeclaration","scope":109714,"src":"2896:15:230","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109703,"name":"address","nodeType":"ElementaryTypeName","src":"2896:7:230","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2895:17:230"},"returnParameters":{"id":109708,"nodeType":"ParameterList","parameters":[],"src":"2932:0:230"},"scope":109831,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":109723,"nodeType":"FunctionDefinition","src":"3237:80:230","nodes":[],"body":{"id":109722,"nodeType":"Block","src":"3287:30:230","nodes":[],"statements":[{"expression":{"id":109720,"name":"bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109664,"src":"3304:6:230","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":109719,"id":109721,"nodeType":"Return","src":"3297:13:230"}]},"documentation":{"id":109715,"nodeType":"StructuredDocumentation","src":"2971:261:230","text":"@notice Getter function for the address of the StandardBridge on this chain.\n Public getter is legacy and will be removed in the future. Use `bridge` instead.\n @return Address of the StandardBridge on this chain.\n @custom:legacy"},"functionSelector":"ee9a31a2","implemented":true,"kind":"function","modifiers":[],"name":"BRIDGE","nameLocation":"3246:6:230","parameters":{"id":109716,"nodeType":"ParameterList","parameters":[],"src":"3252:2:230"},"returnParameters":{"id":109719,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109718,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":109723,"src":"3278:7:230","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109717,"name":"address","nodeType":"ElementaryTypeName","src":"3278:7:230","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3277:9:230"},"scope":109831,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":109742,"nodeType":"FunctionDefinition","src":"3740:255:230","nodes":[],"body":{"id":109741,"nodeType":"Block","src":"3914:81:230","nodes":[],"statements":[{"expression":{"arguments":[{"id":109736,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109726,"src":"3959:12:230","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":109737,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109728,"src":"3973:5:230","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":109738,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109730,"src":"3980:7:230","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":109735,"name":"createOptimismMintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109762,"src":"3931:27:230","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_address_$","typeString":"function (address,string memory,string memory) returns (address)"}},"id":109739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3931:57:230","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":109734,"id":109740,"nodeType":"Return","src":"3924:64:230"}]},"documentation":{"id":109724,"nodeType":"StructuredDocumentation","src":"3323:412:230","text":"@custom:legacy\n @notice Creates an instance of the OptimismMintableERC20 contract. Legacy version of the\n newer createOptimismMintableERC20 function, which has a more intuitive name.\n @param _remoteToken Address of the token on the remote chain.\n @param _name ERC20 name.\n @param _symbol ERC20 symbol.\n @return Address of the newly created token."},"functionSelector":"896f93d1","implemented":true,"kind":"function","modifiers":[],"name":"createStandardL2Token","nameLocation":"3749:21:230","parameters":{"id":109731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109726,"mutability":"mutable","name":"_remoteToken","nameLocation":"3788:12:230","nodeType":"VariableDeclaration","scope":109742,"src":"3780:20:230","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109725,"name":"address","nodeType":"ElementaryTypeName","src":"3780:7:230","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":109728,"mutability":"mutable","name":"_name","nameLocation":"3824:5:230","nodeType":"VariableDeclaration","scope":109742,"src":"3810:19:230","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":109727,"name":"string","nodeType":"ElementaryTypeName","src":"3810:6:230","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":109730,"mutability":"mutable","name":"_symbol","nameLocation":"3853:7:230","nodeType":"VariableDeclaration","scope":109742,"src":"3839:21:230","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":109729,"name":"string","nodeType":"ElementaryTypeName","src":"3839:6:230","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3770:96:230"},"returnParameters":{"id":109734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109733,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":109742,"src":"3901:7:230","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109732,"name":"address","nodeType":"ElementaryTypeName","src":"3901:7:230","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3900:9:230"},"scope":109831,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":109762,"nodeType":"FunctionDefinition","src":"4280:275:230","nodes":[],"body":{"id":109761,"nodeType":"Block","src":"4458:97:230","nodes":[],"statements":[{"expression":{"arguments":[{"id":109755,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109745,"src":"4515:12:230","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":109756,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109747,"src":"4529:5:230","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":109757,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109749,"src":"4536:7:230","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"3138","id":109758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4545:2:230","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"}],"id":109754,"name":"createOptimismMintableERC20WithDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109830,"src":"4475:39:230","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint8_$returns$_t_address_$","typeString":"function (address,string memory,string memory,uint8) returns (address)"}},"id":109759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4475:73:230","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":109753,"id":109760,"nodeType":"Return","src":"4468:80:230"}]},"documentation":{"id":109743,"nodeType":"StructuredDocumentation","src":"4001:274:230","text":"@notice Creates an instance of the OptimismMintableERC20 contract.\n @param _remoteToken Address of the token on the remote chain.\n @param _name ERC20 name.\n @param _symbol ERC20 symbol.\n @return Address of the newly created token."},"functionSelector":"ce5ac90f","implemented":true,"kind":"function","modifiers":[],"name":"createOptimismMintableERC20","nameLocation":"4289:27:230","parameters":{"id":109750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109745,"mutability":"mutable","name":"_remoteToken","nameLocation":"4334:12:230","nodeType":"VariableDeclaration","scope":109762,"src":"4326:20:230","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109744,"name":"address","nodeType":"ElementaryTypeName","src":"4326:7:230","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":109747,"mutability":"mutable","name":"_name","nameLocation":"4370:5:230","nodeType":"VariableDeclaration","scope":109762,"src":"4356:19:230","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":109746,"name":"string","nodeType":"ElementaryTypeName","src":"4356:6:230","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":109749,"mutability":"mutable","name":"_symbol","nameLocation":"4399:7:230","nodeType":"VariableDeclaration","scope":109762,"src":"4385:21:230","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":109748,"name":"string","nodeType":"ElementaryTypeName","src":"4385:6:230","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4316:96:230"},"returnParameters":{"id":109753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109752,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":109762,"src":"4445:7:230","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109751,"name":"address","nodeType":"ElementaryTypeName","src":"4445:7:230","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4444:9:230"},"scope":109831,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":109830,"nodeType":"FunctionDefinition","src":"4908:953:230","nodes":[],"body":{"id":109829,"nodeType":"Block","src":"5123:738:230","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":109782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":109777,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109765,"src":"5141:12:230","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":109780,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5165:1:230","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":109779,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5157:7:230","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":109778,"name":"address","nodeType":"ElementaryTypeName","src":"5157:7:230","typeDescriptions":{}}},"id":109781,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5157:10:230","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5141:26:230","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d4d696e7461626c654552433230466163746f72793a206d7573742070726f766964652072656d6f746520746f6b656e2061646472657373","id":109783,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5169:65:230","typeDescriptions":{"typeIdentifier":"t_stringliteral_1fc9c38ce58e5889170de515a92b1e54913f12f8fd8aa9ab11446ca47e097779","typeString":"literal_string \"OptimismMintableERC20Factory: must provide remote token address\""},"value":"OptimismMintableERC20Factory: must provide remote token address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1fc9c38ce58e5889170de515a92b1e54913f12f8fd8aa9ab11446ca47e097779","typeString":"literal_string \"OptimismMintableERC20Factory: must provide remote token address\""}],"id":109776,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5133:7:230","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":109784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5133:102:230","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":109785,"nodeType":"ExpressionStatement","src":"5133:102:230"},{"assignments":[109787],"declarations":[{"constant":false,"id":109787,"mutability":"mutable","name":"salt","nameLocation":"5254:4:230","nodeType":"VariableDeclaration","scope":109829,"src":"5246:12:230","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":109786,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5246:7:230","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":109797,"initialValue":{"arguments":[{"arguments":[{"id":109791,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109765,"src":"5282:12:230","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":109792,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109767,"src":"5296:5:230","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":109793,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109769,"src":"5303:7:230","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":109794,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109771,"src":"5312:9:230","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":109789,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5271:3:230","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":109790,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"5271:10:230","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":109795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5271:51:230","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":109788,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5261:9:230","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":109796,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5261:62:230","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5246:77:230"},{"assignments":[109799],"declarations":[{"constant":false,"id":109799,"mutability":"mutable","name":"localToken","nameLocation":"5341:10:230","nodeType":"VariableDeclaration","scope":109829,"src":"5333:18:230","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109798,"name":"address","nodeType":"ElementaryTypeName","src":"5333:7:230","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":109814,"initialValue":{"arguments":[{"arguments":[{"id":109807,"name":"bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109664,"src":"5414:6:230","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":109808,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109765,"src":"5422:12:230","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":109809,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109767,"src":"5436:5:230","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":109810,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109769,"src":"5443:7:230","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":109811,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109771,"src":"5452:9:230","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":109804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"5374:25:230","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$_t_address_$_t_address_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint8_$returns$_t_contract$_OptimismMintableERC20_$109645_$","typeString":"function (address,address,string memory,string memory,uint8) returns (contract OptimismMintableERC20)"},"typeName":{"id":109803,"nodeType":"UserDefinedTypeName","pathNode":{"id":109802,"name":"OptimismMintableERC20","nodeType":"IdentifierPath","referencedDeclaration":109645,"src":"5378:21:230"},"referencedDeclaration":109645,"src":"5378:21:230","typeDescriptions":{"typeIdentifier":"t_contract$_OptimismMintableERC20_$109645","typeString":"contract OptimismMintableERC20"}}},"id":109806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["salt"],"nodeType":"FunctionCallOptions","options":[{"id":109805,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109787,"src":"5407:4:230","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"src":"5374:39:230","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$_t_address_$_t_address_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint8_$returns$_t_contract$_OptimismMintableERC20_$109645_$salt","typeString":"function (address,address,string memory,string memory,uint8) returns (contract OptimismMintableERC20)"}},"id":109812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5374:88:230","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_OptimismMintableERC20_$109645","typeString":"contract OptimismMintableERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_OptimismMintableERC20_$109645","typeString":"contract OptimismMintableERC20"}],"id":109801,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5366:7:230","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":109800,"name":"address","nodeType":"ElementaryTypeName","src":"5366:7:230","typeDescriptions":{}}},"id":109813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5366:97:230","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5333:130:230"},{"eventCall":{"arguments":[{"id":109816,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109765,"src":"5556:12:230","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":109817,"name":"localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109799,"src":"5570:10:230","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":109815,"name":"StandardL2TokenCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109676,"src":"5533:22:230","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":109818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5533:48:230","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":109819,"nodeType":"EmitStatement","src":"5528:53:230"},{"eventCall":{"arguments":[{"id":109821,"name":"localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109799,"src":"5789:10:230","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":109822,"name":"_remoteToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109765,"src":"5801:12:230","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":109823,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5815:3:230","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":109824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5815:10:230","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":109820,"name":"OptimismMintableERC20Created","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109685,"src":"5760:28:230","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":109825,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5760:66:230","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":109826,"nodeType":"EmitStatement","src":"5755:71:230"},{"expression":{"id":109827,"name":"localToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109799,"src":"5844:10:230","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":109775,"id":109828,"nodeType":"Return","src":"5837:17:230"}]},"documentation":{"id":109763,"nodeType":"StructuredDocumentation","src":"4561:342:230","text":"@notice Creates an instance of the OptimismMintableERC20 contract, with specified decimals.\n @param _remoteToken Address of the token on the remote chain.\n @param _name ERC20 name.\n @param _symbol ERC20 symbol.\n @param _decimals ERC20 decimals\n @return Address of the newly created token."},"functionSelector":"8cf0629c","implemented":true,"kind":"function","modifiers":[],"name":"createOptimismMintableERC20WithDecimals","nameLocation":"4917:39:230","parameters":{"id":109772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109765,"mutability":"mutable","name":"_remoteToken","nameLocation":"4974:12:230","nodeType":"VariableDeclaration","scope":109830,"src":"4966:20:230","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109764,"name":"address","nodeType":"ElementaryTypeName","src":"4966:7:230","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":109767,"mutability":"mutable","name":"_name","nameLocation":"5010:5:230","nodeType":"VariableDeclaration","scope":109830,"src":"4996:19:230","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":109766,"name":"string","nodeType":"ElementaryTypeName","src":"4996:6:230","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":109769,"mutability":"mutable","name":"_symbol","nameLocation":"5039:7:230","nodeType":"VariableDeclaration","scope":109830,"src":"5025:21:230","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":109768,"name":"string","nodeType":"ElementaryTypeName","src":"5025:6:230","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":109771,"mutability":"mutable","name":"_decimals","nameLocation":"5062:9:230","nodeType":"VariableDeclaration","scope":109830,"src":"5056:15:230","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":109770,"name":"uint8","nodeType":"ElementaryTypeName","src":"5056:5:230","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"4956:121:230"},"returnParameters":{"id":109775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":109774,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":109830,"src":"5110:7:230","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109773,"name":"address","nodeType":"ElementaryTypeName","src":"5110:7:230","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5109:9:230"},"scope":109831,"stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":109655,"name":"ISemver","nodeType":"IdentifierPath","referencedDeclaration":109417,"src":"811:7:230"},"id":109656,"nodeType":"InheritanceSpecifier","src":"811:7:230"},{"baseName":{"id":109657,"name":"Initializable","nodeType":"IdentifierPath","referencedDeclaration":49678,"src":"820:13:230"},"id":109658,"nodeType":"InheritanceSpecifier","src":"820:13:230"}],"canonicalName":"OptimismMintableERC20Factory","contractDependencies":[109645],"contractKind":"contract","documentation":{"id":109654,"nodeType":"StructuredDocumentation","src":"279:491:230","text":"@custom:proxied\n @custom:predeployed 0x4200000000000000000000000000000000000012\n @title OptimismMintableERC20Factory\n @notice OptimismMintableERC20Factory is a factory contract that generates OptimismMintableERC20\n contracts on the network it's deployed to. Simplifies the deployment process for users\n who may be less familiar with deploying smart contracts. Designed to be backwards\n compatible with the older StandardL2ERC20Factory contract."},"fullyImplemented":true,"linearizedBaseContracts":[109831,49678,109417],"name":"OptimismMintableERC20Factory","nameLocation":"779:28:230","scope":109832,"usedErrors":[]}],"license":"MIT"},"id":230} \ No newline at end of file diff --git a/packages/sdk/src/forge-artifacts/OptimismPortal.json b/packages/sdk/src/forge-artifacts/OptimismPortal.json deleted file mode 100644 index 4d3e3388ce41..000000000000 --- a/packages/sdk/src/forge-artifacts/OptimismPortal.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"depositTransaction","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_value","type":"uint256","internalType":"uint256"},{"name":"_gasLimit","type":"uint64","internalType":"uint64"},{"name":"_isCreation","type":"bool","internalType":"bool"},{"name":"_data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"donateETH","inputs":[],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"finalizeWithdrawalTransaction","inputs":[{"name":"_tx","type":"tuple","internalType":"struct Types.WithdrawalTransaction","components":[{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"sender","type":"address","internalType":"address"},{"name":"target","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"finalizedWithdrawals","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"guardian","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_l2Oracle","type":"address","internalType":"contract L2OutputOracle"},{"name":"_systemConfig","type":"address","internalType":"contract SystemConfig"},{"name":"_superchainConfig","type":"address","internalType":"contract SuperchainConfig"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isOutputFinalized","inputs":[{"name":"_l2OutputIndex","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"l2Oracle","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract L2OutputOracle"}],"stateMutability":"view"},{"type":"function","name":"l2Sender","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"minimumGasLimit","inputs":[{"name":"_byteCount","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"pure"},{"type":"function","name":"params","inputs":[],"outputs":[{"name":"prevBaseFee","type":"uint128","internalType":"uint128"},{"name":"prevBoughtGas","type":"uint64","internalType":"uint64"},{"name":"prevBlockNum","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"paused_","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"proveWithdrawalTransaction","inputs":[{"name":"_tx","type":"tuple","internalType":"struct Types.WithdrawalTransaction","components":[{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"sender","type":"address","internalType":"address"},{"name":"target","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}]},{"name":"_l2OutputIndex","type":"uint256","internalType":"uint256"},{"name":"_outputRootProof","type":"tuple","internalType":"struct Types.OutputRootProof","components":[{"name":"version","type":"bytes32","internalType":"bytes32"},{"name":"stateRoot","type":"bytes32","internalType":"bytes32"},{"name":"messagePasserStorageRoot","type":"bytes32","internalType":"bytes32"},{"name":"latestBlockhash","type":"bytes32","internalType":"bytes32"}]},{"name":"_withdrawalProof","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"provenWithdrawals","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"outputRoot","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint128","internalType":"uint128"},{"name":"l2OutputIndex","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"superchainConfig","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract SuperchainConfig"}],"stateMutability":"view"},{"type":"function","name":"systemConfig","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract SystemConfig"}],"stateMutability":"view"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"TransactionDeposited","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"version","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"opaqueData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"WithdrawalFinalized","inputs":[{"name":"withdrawalHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"success","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"WithdrawalProven","inputs":[{"name":"withdrawalHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"BadTarget","inputs":[]},{"type":"error","name":"CallPaused","inputs":[]},{"type":"error","name":"GasEstimation","inputs":[]},{"type":"error","name":"LargeCalldata","inputs":[]},{"type":"error","name":"OutOfGas","inputs":[]},{"type":"error","name":"SmallGasLimit","inputs":[]}],"bytecode":{"object":"0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b6200191f1760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615142806200029f6000396000f3fe6080604052600436106101125760003560e01c80638c3152e9116100a5578063a35d99df11610074578063cff0ab9611610059578063cff0ab961461039a578063e965084c1461043b578063e9e05c42146104c757600080fd5b8063a35d99df14610341578063c0c53b8b1461037a57600080fd5b80638c3152e9146102975780639b5f694a146102b75780639bf62d82146102e4578063a14238e71461031157600080fd5b806354fd4d50116100e157806354fd4d50146101fc5780635c975abb146102525780636dbffb78146102775780638b4c40b01461013757600080fd5b806333d7e2bd1461013e57806335e80ab314610195578063452a9320146101c75780634870496f146101dc57600080fd5b36610139576101373334620186a06000604051806020016040528060008152506104d5565b005b600080fd5b34801561014a57600080fd5b5060375461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a157600080fd5b5060355461016b90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156101d357600080fd5b5061016b610692565b3480156101e857600080fd5b506101376101f7366004614709565b61072a565b34801561020857600080fd5b506102456040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161018c919061485b565b34801561025e57600080fd5b50610267610d2d565b604051901515815260200161018c565b34801561028357600080fd5b5061026761029236600461486e565b610dc0565b3480156102a357600080fd5b506101376102b2366004614887565b610e7d565b3480156102c357600080fd5b5060365461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102f057600080fd5b5060325461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561031d57600080fd5b5061026761032c36600461486e565b60336020526000908152604090205460ff1681565b34801561034d57600080fd5b5061036161035c3660046148e1565b6116b8565b60405167ffffffffffffffff909116815260200161018c565b34801561038657600080fd5b506101376103953660046148fc565b6116d1565b3480156103a657600080fd5b50600154610402906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161018c565b34801561044757600080fd5b5061049961045636600461486e565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff928316602085015291169082015260600161018c565b6101376104d5366004614955565b8260005a90508380156104fd575073ffffffffffffffffffffffffffffffffffffffff871615155b15610534576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61053e83516116b8565b67ffffffffffffffff168567ffffffffffffffff16101561058b576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0835111156105c9576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146105ea575033731111000000000000000000000000000000001111015b600034888888886040516020016106059594939291906149d2565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3284604051610675919061485b565b60405180910390a45050610689828261193b565b50505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614a37565b905090565b610732610d2d565b15610769576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff160361082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561089d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c19190614a74565b5190506108db6108d636869003860186614ad9565b611c12565b8114610969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610824565b600061097487611c6e565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610a8a5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a869190614a74565b5114155b610b16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610824565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610bdf9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610bd5888a614b3f565b8a60400135611c9e565b610c6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610824565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d9c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614bc3565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610e759173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5a9190614a74565b602001516fffffffffffffffffffffffffffffffff16611cc2565b92915050565b565b610e85610d2d565b15610ebc576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14610f65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610824565b6000610f7082611c6e565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610824565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ec9190614be0565b81602001516fffffffffffffffffffffffffffffffff1610156111b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610824565b6111d681602001516fffffffffffffffffffffffffffffffff16611cc2565b611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610824565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561130f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113339190614a74565b82518151919250146113ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610824565b61140c81602001516fffffffffffffffffffffffffffffffff16611cc2565b6114be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610824565b60008381526033602052604090205460ff161561155d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610824565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a08801516115ff93929190611d68565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061166490841515815260200190565b60405180910390a28015801561167a5750326001145b156116b1576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60006116c5826010614c28565b610e7590615208614c58565b600054610100900460ff16158080156116f15750600054600160ff909116105b8061170b5750303b15801561170b575060005460ff166001145b611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610824565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156117f557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010085841602179055603254166118ae57603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b6118b6611dc6565b801561191957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090611971907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643614c84565b9050600061197d611ed9565b90506000816020015160ff16826000015163ffffffff1661199e9190614cca565b90508215611ad5576001546000906119d5908390700100000000000000000000000000000000900467ffffffffffffffff16614d32565b90506000836040015160ff16836119ec9190614da6565b600154611a0c9084906fffffffffffffffffffffffffffffffff16614da6565b611a169190614cca565b600154909150600090611a6790611a409084906fffffffffffffffffffffffffffffffff16614e62565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16611f9a565b90506001861115611a9657611a93611a4082876040015160ff1660018a611a8e9190614c84565b611fb9565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090611b08908490700100000000000000000000000000000000900467ffffffffffffffff16614c58565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611b95576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090611bc1906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816614ed6565b90506000611bd348633b9aca0061200e565b611bdd9083614f13565b905060005a611bec9088614c84565b905080821115611c0857611c08611c038284614c84565b612025565b5050505050505050565b60008160000151826020015183604001518460600151604051602001611c51949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611c51979096959101614f27565b600080611caa86612053565b9050611cb881868686612085565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015611d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d569190614be0565b611d609083614f7e565b421192915050565b6000806000611d788660006120b5565b905080611dae576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600054610100900460ff16611e5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610824565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600003610e7b5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015611f76573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614fbb565b6000611faf611fa985856120d3565b836120e3565b90505b9392505050565b6000670de0b6b3a7640000611ffa611fd18583614cca565b611fe390670de0b6b3a7640000614d32565b611ff585670de0b6b3a7640000614da6565b6120f2565b6120049086614da6565b611faf9190614cca565b60008183101561201e5781611fb2565b5090919050565b6000805a90505b825a6120389083614c84565b101561204e576120478261505a565b915061202c565b505050565b6060818051906020012060405160200161206f91815260200190565b6040516020818303038152906040529050919050565b60006120ac84612096878686612123565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b60008183121561201e5781611fb2565b600081831261201e5781611fb2565b6000611fb2670de0b6b3a76400008361210a86612ba1565b6121149190614da6565b61211e9190614cca565b612de5565b60606000845111612190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610824565b600061219b84613024565b905060006121a886613110565b90506000846040516020016121bf91815260200190565b60405160208183030381529060405290506000805b8451811015612b185760008582815181106121f1576121f1615092565b60200260200101519050845183111561228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610824565b8260000361234557805180516020918201206040516122da926122b492910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610824565b61249c565b8051516020116123fb578051805160209182012060405161236f926122b492910190815260200190565b612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610824565b80518451602080870191909120825191909201201461249c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610824565b6124a860106001614f7e565b81602001515103612684578451830361261c576124e281602001516010815181106124d5576124d5615092565b6020026020010151613173565b96506000875111612575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610824565b600186516125839190614c84565b8214612611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610824565b505050505050611fb2565b600085848151811061263057612630615092565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061265b5761265b615092565b6020026020010151905061266e816132d3565b955061267b600186614f7e565b94505050612b05565b600281602001515103612a7d57600061269c826132f8565b90506000816000815181106126b3576126b3615092565b016020015160f81c905060006126ca6002836150c1565b6126d59060026150e3565b905060006126e6848360ff1661331c565b905060006126f48a8961331c565b905060006127028383613352565b905080835114612794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610824565b60ff8516600214806127a9575060ff85166003145b15612998578082511461283e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610824565b61285887602001516001815181106124d5576124d5615092565b9c5060008d51116128eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610824565b60018c516128f99190614c84565b8814612987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610824565b505050505050505050505050611fb2565b60ff851615806129ab575060ff85166001145b156129ea576129d787602001516001815181106129ca576129ca615092565b60200260200101516132d3565b99506129e3818a614f7e565b9850612a72565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610824565b505050505050612b05565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610824565b5080612b108161505a565b9150506121d4565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610824565b6000808213612c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610824565b60006060612c1984613406565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c18213612e1657506000919050565b680755bf798b4a1bf1e58212612e88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610824565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff81111561304257613042614529565b60405190808252806020026020018201604052801561308757816020015b60408051808201909152606080825260208201528152602001906001900390816130605790505b50915060005b818110156131095760405180604001604052808583815181106130b2576130b2615092565b602002602001015181526020016130e18684815181106130d4576130d4615092565b60200260200101516134dc565b8152508382815181106130f6576130f6615092565b602090810291909101015260010161308d565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613168578060011b82018184015160001a8060041c8253600f81166001830153505060010161313a565b509295945050505050565b60606000806000613183856134ef565b91945092509050600081600181111561319e5761319e615106565b1461322b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610824565b6132358284614f7e565b8551146132c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610824565b6120ac85602001518484613f5c565b606060208260000151106132ef576132ea82613173565b610e75565b610e7582613ff0565b6060610e7561331783602001516000815181106124d5576124d5615092565b613110565b60608251821061333b5750604080516020810190915260008152610e75565b611fb2838384865161334d9190614c84565b614006565b6000808251845110613365578251613368565b83515b90505b80821080156133ef575082828151811061338757613387615092565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168483815181106133c6576133c6615092565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156133ff5781600101915061336b565b5092915050565b6000808211613471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610824565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060610e756134ea836141de565b6142c7565b6000806000808460000151116135ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610824565b6020840151805160001a607f81116135d2576000600160009450945094505050613f55565b60b781116137e05760006135e7608083614c84565b9050808760000151116136a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610824565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061371b57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6137cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610824565b5060019550935060009250613f55915050565b60bf8111613b2e5760006137f560b783614c84565b9050808760000151116138b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610824565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361398e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610824565b600184015160088302610100031c60378111613a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610824565b613a5c8184614f7e565b895111613b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610824565b613b1c836001614f7e565b9750955060009450613f559350505050565b60f78111613c0f576000613b4360c083614c84565b905080876000015111613bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610824565b600195509350849250613f55915050565b6000613c1c60f783614c84565b905080876000015111613cd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610824565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613db5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610824565b600184015160088302610100031c60378111613e79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610824565b613e838184614f7e565b895111613f38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610824565b613f43836001614f7e565b9750955060019450613f559350505050565b9193909250565b60608167ffffffffffffffff811115613f7757613f77614529565b6040519080825280601f01601f191660200182016040528015613fa1576020820181803683370190505b5090508115611fb2576000613fb68486614f7e565b90506020820160005b84811015613fd7578281015182820152602001613fbf565b84811115613fe6576000858301525b5050509392505050565b6060610e75826020015160008460000151613f5c565b60608182601f011015614075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610824565b8282840110156140e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610824565b8183018451101561414e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610824565b60608215801561416d57604051915060008252602082016040526141d5565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156141a657805183526020928301920161418e565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116142a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610824565b50604080518082019091528151815260209182019181019190915290565b606060008060006142d7856134ef565b9194509250905060018160018111156142f2576142f2615106565b1461437f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610824565b845161438b8385614f7e565b14614418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610824565b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161442f5790505093506000835b865181101561451d576000806144a26040518060400160405280858c600001516144869190614c84565b8152602001858c6020015161449b9190614f7e565b90526134ef565b5091509150604051806040016040528083836144be9190614f7e565b8152602001848b602001516144d39190614f7e565b8152508885815181106144e8576144e8615092565b60209081029190910101526144fe600185614f7e565b935061450a8183614f7e565b6145149084614f7e565b9250505061445c565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561459f5761459f614529565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff811681146145c957600080fd5b50565b600082601f8301126145dd57600080fd5b813567ffffffffffffffff8111156145f7576145f7614529565b61462860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614558565b81815284602083860101111561463d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561466c57600080fd5b60405160c0810167ffffffffffffffff828210818311171561469057614690614529565b8160405282935084358352602085013591506146ab826145a7565b816020840152604085013591506146c1826145a7565b816040840152606085013560608401526080850135608084015260a08501359150808211156146ef57600080fd5b506146fc858286016145cc565b60a0830152505092915050565b600080600080600085870360e081121561472257600080fd5b863567ffffffffffffffff8082111561473a57600080fd5b6147468a838b0161465a565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561477f57600080fd5b60408901955060c089013592508083111561479957600080fd5b828901925089601f8401126147ad57600080fd5b82359150808211156147be57600080fd5b508860208260051b84010111156147d457600080fd5b959894975092955050506020019190565b60005b838110156148005781810151838201526020016147e8565b838111156119195750506000910152565b600081518084526148298160208601602086016147e5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fb26020830184614811565b60006020828403121561488057600080fd5b5035919050565b60006020828403121561489957600080fd5b813567ffffffffffffffff8111156148b057600080fd5b6148bc8482850161465a565b949350505050565b803567ffffffffffffffff811681146148dc57600080fd5b919050565b6000602082840312156148f357600080fd5b611fb2826148c4565b60008060006060848603121561491157600080fd5b833561491c816145a7565b9250602084013561492c816145a7565b9150604084013561493c816145a7565b809150509250925092565b80151581146145c957600080fd5b600080600080600060a0868803121561496d57600080fd5b8535614978816145a7565b94506020860135935061498d604087016148c4565b9250606086013561499d81614947565b9150608086013567ffffffffffffffff8111156149b957600080fd5b6149c5888289016145cc565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614a268160498501602087016147e5565b919091016049019695505050505050565b600060208284031215614a4957600080fd5b8151611fb2816145a7565b80516fffffffffffffffffffffffffffffffff811681146148dc57600080fd5b600060608284031215614a8657600080fd5b6040516060810181811067ffffffffffffffff82111715614aa957614aa9614529565b60405282518152614abc60208401614a54565b6020820152614acd60408401614a54565b60408201529392505050565b600060808284031215614aeb57600080fd5b6040516080810181811067ffffffffffffffff82111715614b0e57614b0e614529565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614b5a57614b5a614529565b8360051b6020614b6b818301614558565b868152918501918181019036841115614b8357600080fd5b865b84811015614bb757803586811115614b9d5760008081fd5b614ba936828b016145cc565b845250918301918301614b85565b50979650505050505050565b600060208284031215614bd557600080fd5b8151611fb281614947565b600060208284031215614bf257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615614c4f57614c4f614bf9565b02949350505050565b600067ffffffffffffffff808316818516808303821115614c7b57614c7b614bf9565b01949350505050565b600082821015614c9657614c96614bf9565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614cd957614cd9614c9b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615614d2d57614d2d614bf9565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615614d6c57614d6c614bf9565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615614da057614da0614bf9565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615614de757614de7614bf9565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615614e2257614e22614bf9565b60008712925087820587128484161615614e3e57614e3e614bf9565b87850587128184161615614e5457614e54614bf9565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615614e9c57614e9c614bf9565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615614ed057614ed0614bf9565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f0e57614f0e614bf9565b500290565b600082614f2257614f22614c9b565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152614f7260c0830184614811565b98975050505050505050565b60008219821115614f9157614f91614bf9565b500190565b805163ffffffff811681146148dc57600080fd5b805160ff811681146148dc57600080fd5b600060c08284031215614fcd57600080fd5b60405160c0810181811067ffffffffffffffff82111715614ff057614ff0614529565b604052614ffc83614f96565b815261500a60208401614faa565b602082015261501b60408401614faa565b604082015261502c60608401614f96565b606082015261503d60808401614f96565b608082015261504e60a08401614a54565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361508b5761508b614bf9565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff8316806150d4576150d4614c9b565b8060ff84160691505092915050565b600060ff821660ff8416808210156150fd576150fd614bf9565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a","sourceMap":"1240:19301:134:-:0;;;4633:218;;;;;;;;;-1:-1:-1;4657:187:134;4716:1;;;4657:10;:187::i;:::-;1240:19301;;5069:435;3100:19:43;3123:13;;;;;;3122:14;;3168:34;;;;-1:-1:-1;3186:12:43;;3201:1;3186:12;;;;:16;3168:34;3167:97;;;;3209:33;3236:4;3209:18;;;;;:33;;:::i;:::-;3208:34;:55;;;;-1:-1:-1;3246:12:43;;;;;:17;3208:55;3146:190;;;;-1:-1:-1;;;3146:190:43;;216:2:357;3146:190:43;;;198:21:357;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:357;;;338:44;399:19;;3146:190:43;;;;;;;;;3346:12;:16;;-1:-1:-1;;3346:16:43;3361:1;3346:16;;;3372:65;;;;3406:13;:20;;-1:-1:-1;;3406:20:43;;;;;3372:65;5258:8:134::1;:20:::0;;-1:-1:-1;;;;;;5258:20:134;;::::1;-1:-1:-1::0;;;;;5258:20:134;;::::1;::::0;;;::::1;::::0;;;5288:12:::1;:28:::0;;;;::::1;::::0;;::::1;;::::0;;5326:16:::1;:36:::0;;-1:-1:-1;;;;;;5326:36:134::1;5258:20;5326:36:::0;;::::1;;;::::0;;5376:8:::1;::::0;::::1;5372:91;;5414:8;:38:::0;;-1:-1:-1;;;;;;5414:38:134::1;1338:42:192;5414:38:134;::::0;;5372:91:::1;5472:25;:23;:25::i;:::-;3461:14:43::0;3457:99;;;3507:5;3491:21;;-1:-1:-1;;3491:21:43;;;3531:14;;-1:-1:-1;581:36:357;;3531:14:43;;569:2:357;554:18;3531:14:43;;;;;;;3457:99;3090:472;5069:435:134;;;:::o;1175:320:59:-;-1:-1:-1;;;;;1465:19:59;;:23;;;1175:320::o;8340:234:137:-;4888:13:43;;;;;;;4880:69;;;;-1:-1:-1;;;4880:69:43;;830:2:357;4880:69:43;;;812:21:357;869:2;849:18;;;842:30;908:34;888:18;;;881:62;-1:-1:-1;;;959:18:357;;;952:41;1010:19;;4880:69:43;628:407:357;4880:69:43;8415:6:137::1;:19:::0;-1:-1:-1;;;8415:19:137;::::1;-1:-1:-1::0;;;;;8415:19:137::1;;:24:::0;8411:157:::1;;8464:93;::::0;;::::1;::::0;::::1;::::0;;8494:6:::1;8464:93:::0;;;-1:-1:-1;8464:93:137::1;::::0;::::1;::::0;8541:12:::1;-1:-1:-1::0;;;;;8464:93:137::1;::::0;;;;;;;-1:-1:-1;;;8455:102:137::1;;:6;:102:::0;8411:157:::1;8340:234::o:0;628:407:357:-;1240:19301:134;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101125760003560e01c80638c3152e9116100a5578063a35d99df11610074578063cff0ab9611610059578063cff0ab961461039a578063e965084c1461043b578063e9e05c42146104c757600080fd5b8063a35d99df14610341578063c0c53b8b1461037a57600080fd5b80638c3152e9146102975780639b5f694a146102b75780639bf62d82146102e4578063a14238e71461031157600080fd5b806354fd4d50116100e157806354fd4d50146101fc5780635c975abb146102525780636dbffb78146102775780638b4c40b01461013757600080fd5b806333d7e2bd1461013e57806335e80ab314610195578063452a9320146101c75780634870496f146101dc57600080fd5b36610139576101373334620186a06000604051806020016040528060008152506104d5565b005b600080fd5b34801561014a57600080fd5b5060375461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a157600080fd5b5060355461016b90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156101d357600080fd5b5061016b610692565b3480156101e857600080fd5b506101376101f7366004614709565b61072a565b34801561020857600080fd5b506102456040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161018c919061485b565b34801561025e57600080fd5b50610267610d2d565b604051901515815260200161018c565b34801561028357600080fd5b5061026761029236600461486e565b610dc0565b3480156102a357600080fd5b506101376102b2366004614887565b610e7d565b3480156102c357600080fd5b5060365461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102f057600080fd5b5060325461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561031d57600080fd5b5061026761032c36600461486e565b60336020526000908152604090205460ff1681565b34801561034d57600080fd5b5061036161035c3660046148e1565b6116b8565b60405167ffffffffffffffff909116815260200161018c565b34801561038657600080fd5b506101376103953660046148fc565b6116d1565b3480156103a657600080fd5b50600154610402906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161018c565b34801561044757600080fd5b5061049961045636600461486e565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff928316602085015291169082015260600161018c565b6101376104d5366004614955565b8260005a90508380156104fd575073ffffffffffffffffffffffffffffffffffffffff871615155b15610534576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61053e83516116b8565b67ffffffffffffffff168567ffffffffffffffff16101561058b576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0835111156105c9576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146105ea575033731111000000000000000000000000000000001111015b600034888888886040516020016106059594939291906149d2565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3284604051610675919061485b565b60405180910390a45050610689828261193b565b50505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614a37565b905090565b610732610d2d565b15610769576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff160361082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561089d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c19190614a74565b5190506108db6108d636869003860186614ad9565b611c12565b8114610969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610824565b600061097487611c6e565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610a8a5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a869190614a74565b5114155b610b16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610824565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610bdf9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610bd5888a614b3f565b8a60400135611c9e565b610c6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610824565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d9c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614bc3565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610e759173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5a9190614a74565b602001516fffffffffffffffffffffffffffffffff16611cc2565b92915050565b565b610e85610d2d565b15610ebc576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14610f65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610824565b6000610f7082611c6e565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610824565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ec9190614be0565b81602001516fffffffffffffffffffffffffffffffff1610156111b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610824565b6111d681602001516fffffffffffffffffffffffffffffffff16611cc2565b611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610824565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561130f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113339190614a74565b82518151919250146113ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610824565b61140c81602001516fffffffffffffffffffffffffffffffff16611cc2565b6114be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610824565b60008381526033602052604090205460ff161561155d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610824565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a08801516115ff93929190611d68565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061166490841515815260200190565b60405180910390a28015801561167a5750326001145b156116b1576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60006116c5826010614c28565b610e7590615208614c58565b600054610100900460ff16158080156116f15750600054600160ff909116105b8061170b5750303b15801561170b575060005460ff166001145b611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610824565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156117f557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010085841602179055603254166118ae57603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b6118b6611dc6565b801561191957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090611971907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643614c84565b9050600061197d611ed9565b90506000816020015160ff16826000015163ffffffff1661199e9190614cca565b90508215611ad5576001546000906119d5908390700100000000000000000000000000000000900467ffffffffffffffff16614d32565b90506000836040015160ff16836119ec9190614da6565b600154611a0c9084906fffffffffffffffffffffffffffffffff16614da6565b611a169190614cca565b600154909150600090611a6790611a409084906fffffffffffffffffffffffffffffffff16614e62565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16611f9a565b90506001861115611a9657611a93611a4082876040015160ff1660018a611a8e9190614c84565b611fb9565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090611b08908490700100000000000000000000000000000000900467ffffffffffffffff16614c58565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611b95576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090611bc1906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816614ed6565b90506000611bd348633b9aca0061200e565b611bdd9083614f13565b905060005a611bec9088614c84565b905080821115611c0857611c08611c038284614c84565b612025565b5050505050505050565b60008160000151826020015183604001518460600151604051602001611c51949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611c51979096959101614f27565b600080611caa86612053565b9050611cb881868686612085565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015611d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d569190614be0565b611d609083614f7e565b421192915050565b6000806000611d788660006120b5565b905080611dae576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600054610100900460ff16611e5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610824565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600003610e7b5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015611f76573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614fbb565b6000611faf611fa985856120d3565b836120e3565b90505b9392505050565b6000670de0b6b3a7640000611ffa611fd18583614cca565b611fe390670de0b6b3a7640000614d32565b611ff585670de0b6b3a7640000614da6565b6120f2565b6120049086614da6565b611faf9190614cca565b60008183101561201e5781611fb2565b5090919050565b6000805a90505b825a6120389083614c84565b101561204e576120478261505a565b915061202c565b505050565b6060818051906020012060405160200161206f91815260200190565b6040516020818303038152906040529050919050565b60006120ac84612096878686612123565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b60008183121561201e5781611fb2565b600081831261201e5781611fb2565b6000611fb2670de0b6b3a76400008361210a86612ba1565b6121149190614da6565b61211e9190614cca565b612de5565b60606000845111612190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610824565b600061219b84613024565b905060006121a886613110565b90506000846040516020016121bf91815260200190565b60405160208183030381529060405290506000805b8451811015612b185760008582815181106121f1576121f1615092565b60200260200101519050845183111561228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610824565b8260000361234557805180516020918201206040516122da926122b492910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610824565b61249c565b8051516020116123fb578051805160209182012060405161236f926122b492910190815260200190565b612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610824565b80518451602080870191909120825191909201201461249c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610824565b6124a860106001614f7e565b81602001515103612684578451830361261c576124e281602001516010815181106124d5576124d5615092565b6020026020010151613173565b96506000875111612575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610824565b600186516125839190614c84565b8214612611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610824565b505050505050611fb2565b600085848151811061263057612630615092565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061265b5761265b615092565b6020026020010151905061266e816132d3565b955061267b600186614f7e565b94505050612b05565b600281602001515103612a7d57600061269c826132f8565b90506000816000815181106126b3576126b3615092565b016020015160f81c905060006126ca6002836150c1565b6126d59060026150e3565b905060006126e6848360ff1661331c565b905060006126f48a8961331c565b905060006127028383613352565b905080835114612794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610824565b60ff8516600214806127a9575060ff85166003145b15612998578082511461283e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610824565b61285887602001516001815181106124d5576124d5615092565b9c5060008d51116128eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610824565b60018c516128f99190614c84565b8814612987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610824565b505050505050505050505050611fb2565b60ff851615806129ab575060ff85166001145b156129ea576129d787602001516001815181106129ca576129ca615092565b60200260200101516132d3565b99506129e3818a614f7e565b9850612a72565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610824565b505050505050612b05565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610824565b5080612b108161505a565b9150506121d4565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610824565b6000808213612c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610824565b60006060612c1984613406565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c18213612e1657506000919050565b680755bf798b4a1bf1e58212612e88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610824565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff81111561304257613042614529565b60405190808252806020026020018201604052801561308757816020015b60408051808201909152606080825260208201528152602001906001900390816130605790505b50915060005b818110156131095760405180604001604052808583815181106130b2576130b2615092565b602002602001015181526020016130e18684815181106130d4576130d4615092565b60200260200101516134dc565b8152508382815181106130f6576130f6615092565b602090810291909101015260010161308d565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613168578060011b82018184015160001a8060041c8253600f81166001830153505060010161313a565b509295945050505050565b60606000806000613183856134ef565b91945092509050600081600181111561319e5761319e615106565b1461322b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610824565b6132358284614f7e565b8551146132c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610824565b6120ac85602001518484613f5c565b606060208260000151106132ef576132ea82613173565b610e75565b610e7582613ff0565b6060610e7561331783602001516000815181106124d5576124d5615092565b613110565b60608251821061333b5750604080516020810190915260008152610e75565b611fb2838384865161334d9190614c84565b614006565b6000808251845110613365578251613368565b83515b90505b80821080156133ef575082828151811061338757613387615092565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168483815181106133c6576133c6615092565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156133ff5781600101915061336b565b5092915050565b6000808211613471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610824565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060610e756134ea836141de565b6142c7565b6000806000808460000151116135ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610824565b6020840151805160001a607f81116135d2576000600160009450945094505050613f55565b60b781116137e05760006135e7608083614c84565b9050808760000151116136a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610824565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061371b57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6137cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610824565b5060019550935060009250613f55915050565b60bf8111613b2e5760006137f560b783614c84565b9050808760000151116138b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610824565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361398e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610824565b600184015160088302610100031c60378111613a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610824565b613a5c8184614f7e565b895111613b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610824565b613b1c836001614f7e565b9750955060009450613f559350505050565b60f78111613c0f576000613b4360c083614c84565b905080876000015111613bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610824565b600195509350849250613f55915050565b6000613c1c60f783614c84565b905080876000015111613cd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610824565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613db5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610824565b600184015160088302610100031c60378111613e79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610824565b613e838184614f7e565b895111613f38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610824565b613f43836001614f7e565b9750955060019450613f559350505050565b9193909250565b60608167ffffffffffffffff811115613f7757613f77614529565b6040519080825280601f01601f191660200182016040528015613fa1576020820181803683370190505b5090508115611fb2576000613fb68486614f7e565b90506020820160005b84811015613fd7578281015182820152602001613fbf565b84811115613fe6576000858301525b5050509392505050565b6060610e75826020015160008460000151613f5c565b60608182601f011015614075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610824565b8282840110156140e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610824565b8183018451101561414e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610824565b60608215801561416d57604051915060008252602082016040526141d5565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156141a657805183526020928301920161418e565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116142a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610824565b50604080518082019091528151815260209182019181019190915290565b606060008060006142d7856134ef565b9194509250905060018160018111156142f2576142f2615106565b1461437f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610824565b845161438b8385614f7e565b14614418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610824565b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161442f5790505093506000835b865181101561451d576000806144a26040518060400160405280858c600001516144869190614c84565b8152602001858c6020015161449b9190614f7e565b90526134ef565b5091509150604051806040016040528083836144be9190614f7e565b8152602001848b602001516144d39190614f7e565b8152508885815181106144e8576144e8615092565b60209081029190910101526144fe600185614f7e565b935061450a8183614f7e565b6145149084614f7e565b9250505061445c565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561459f5761459f614529565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff811681146145c957600080fd5b50565b600082601f8301126145dd57600080fd5b813567ffffffffffffffff8111156145f7576145f7614529565b61462860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614558565b81815284602083860101111561463d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561466c57600080fd5b60405160c0810167ffffffffffffffff828210818311171561469057614690614529565b8160405282935084358352602085013591506146ab826145a7565b816020840152604085013591506146c1826145a7565b816040840152606085013560608401526080850135608084015260a08501359150808211156146ef57600080fd5b506146fc858286016145cc565b60a0830152505092915050565b600080600080600085870360e081121561472257600080fd5b863567ffffffffffffffff8082111561473a57600080fd5b6147468a838b0161465a565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561477f57600080fd5b60408901955060c089013592508083111561479957600080fd5b828901925089601f8401126147ad57600080fd5b82359150808211156147be57600080fd5b508860208260051b84010111156147d457600080fd5b959894975092955050506020019190565b60005b838110156148005781810151838201526020016147e8565b838111156119195750506000910152565b600081518084526148298160208601602086016147e5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fb26020830184614811565b60006020828403121561488057600080fd5b5035919050565b60006020828403121561489957600080fd5b813567ffffffffffffffff8111156148b057600080fd5b6148bc8482850161465a565b949350505050565b803567ffffffffffffffff811681146148dc57600080fd5b919050565b6000602082840312156148f357600080fd5b611fb2826148c4565b60008060006060848603121561491157600080fd5b833561491c816145a7565b9250602084013561492c816145a7565b9150604084013561493c816145a7565b809150509250925092565b80151581146145c957600080fd5b600080600080600060a0868803121561496d57600080fd5b8535614978816145a7565b94506020860135935061498d604087016148c4565b9250606086013561499d81614947565b9150608086013567ffffffffffffffff8111156149b957600080fd5b6149c5888289016145cc565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614a268160498501602087016147e5565b919091016049019695505050505050565b600060208284031215614a4957600080fd5b8151611fb2816145a7565b80516fffffffffffffffffffffffffffffffff811681146148dc57600080fd5b600060608284031215614a8657600080fd5b6040516060810181811067ffffffffffffffff82111715614aa957614aa9614529565b60405282518152614abc60208401614a54565b6020820152614acd60408401614a54565b60408201529392505050565b600060808284031215614aeb57600080fd5b6040516080810181811067ffffffffffffffff82111715614b0e57614b0e614529565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614b5a57614b5a614529565b8360051b6020614b6b818301614558565b868152918501918181019036841115614b8357600080fd5b865b84811015614bb757803586811115614b9d5760008081fd5b614ba936828b016145cc565b845250918301918301614b85565b50979650505050505050565b600060208284031215614bd557600080fd5b8151611fb281614947565b600060208284031215614bf257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615614c4f57614c4f614bf9565b02949350505050565b600067ffffffffffffffff808316818516808303821115614c7b57614c7b614bf9565b01949350505050565b600082821015614c9657614c96614bf9565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614cd957614cd9614c9b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615614d2d57614d2d614bf9565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615614d6c57614d6c614bf9565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615614da057614da0614bf9565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615614de757614de7614bf9565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615614e2257614e22614bf9565b60008712925087820587128484161615614e3e57614e3e614bf9565b87850587128184161615614e5457614e54614bf9565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615614e9c57614e9c614bf9565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615614ed057614ed0614bf9565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f0e57614f0e614bf9565b500290565b600082614f2257614f22614c9b565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152614f7260c0830184614811565b98975050505050505050565b60008219821115614f9157614f91614bf9565b500190565b805163ffffffff811681146148dc57600080fd5b805160ff811681146148dc57600080fd5b600060c08284031215614fcd57600080fd5b60405160c0810181811067ffffffffffffffff82111715614ff057614ff0614529565b604052614ffc83614f96565b815261500a60208401614faa565b602082015261501b60408401614faa565b604082015261502c60608401614f96565b606082015261503d60808401614f96565b608082015261504e60a08401614a54565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361508b5761508b614bf9565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff8316806150d4576150d4614c9b565b8060ff84160691505092915050565b600060ff821660ff8416808210156150fd576150fd614bf9565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a","sourceMap":"1240:19301:134:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7115:86;7134:10;7146:9;1971:7;7184:5;7191:9;;;;;;;;;;;;7115:18;:86::i;:::-;1240:19301;;;;;2983:32;;;;;;;;;;-1:-1:-1;2983:32:134;;;;;;;;;;;212:42:357;200:55;;;182:74;;170:2;155:18;2983:32:134;;;;;;;;2739:40;;;;;;;;;;-1:-1:-1;2739:40:134;;;;;;;;;;;5757:101;;;;;;;;;;;;;:::i;8288:3825::-;;;;;;;;;;-1:-1:-1;8288:3825:134;;;;;:::i;:::-;;:::i;4530:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;5981:105::-;;;;;;;;;;;;;:::i;:::-;;;5228:14:357;;5221:22;5203:41;;5191:2;5176:18;5981:105:134;5063:187:357;19926:180:134;;;;;;;;;;-1:-1:-1;19926:180:134;;;;;:::i;:::-;;:::i;12226:4818::-;;;;;;;;;;-1:-1:-1;12226:4818:134;;;;;:::i;:::-;;:::i;2867:30::-;;;;;;;;;;-1:-1:-1;2867:30:134;;;;;;;;2234:23;;;;;;;;;;-1:-1:-1;2234:23:134;;;;;;;;2348:52;;;;;;;;;;-1:-1:-1;2348:52:134;;;;;:::i;:::-;;;;;;;;;;;;;;;;6579:120;;;;;;;;;;-1:-1:-1;6579:120:134;;;;;:::i;:::-;;:::i;:::-;;;6799:18:357;6787:31;;;6769:50;;6757:2;6742:18;6579:120:134;6625:200:357;5069:435:134;;;;;;;;;;-1:-1:-1;5069:435:134;;;;;:::i;:::-;;:::i;3093:28:137:-;;;;;;;;;;-1:-1:-1;3093:28:137;;;;;;;;;;;;;;;;;;;;;;;;;7664:34:357;7652:47;;;7634:66;;7719:18;7773:15;;;7768:2;7753:18;;7746:43;7825:15;;7805:18;;;7798:43;7622:2;7607:18;3093:28:137;7436:411:357;2482:61:134;;;;;;;;;;-1:-1:-1;2482:61:134;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8054:25:357;;;8098:34;8168:15;;;8163:2;8148:18;;8141:43;8220:15;;8200:18;;;8193:43;8042:2;8027:18;2482:61:134;7852:390:357;17774:1855:134;;;;;;:::i;:::-;17980:9;3511:18:137;3532:9;3511:30;;18134:11:134::1;:32;;;;-1:-1:-1::0;18149:17:134::1;::::0;::::1;::::0;::::1;18134:32;18130:56;;;18175:11;;;;;;;;;;;;;;18130:56;18350:37;18373:5;:12;18350:15;:37::i;:::-;18338:49;;:9;:49;;;18334:77;;;18396:15;;;;;;;;;;;;;;18334:77;18801:7;18786:5;:12;:22;18782:50;;;18817:15;;;;;;;;;;;;;;18782:50;18938:10;18976:9;18962:23:::0;::::1;18958:108;;-1:-1:-1::0;19044:10:134::1;741:42:237::0;1213:27;18958:108:134::1;19323:23;19366:9;19377:6;19385:9;19396:11;19409:5;19349:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19323:92;;1821:1;19589:3;19562:60;;19583:4;19562:60;;;19611:10;19562:60;;;;;;:::i;:::-;;;;;;;;17995:1634;;3642:29:137::0;3651:7;3660:10;3642:8;:29::i;:::-;3433:245;17774:1855:134;;;;;;:::o;5757:101::-;5798:7;5824:16;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5817:34;;5757:101;:::o;8288:3825::-;4414:8;:6;:8::i;:::-;4410:33;;;4431:12;;;;;;;;;;;;;;4410:33;8820:4:::1;8798:27;;:3;:10;;;:27;;::::0;8790:103:::1;;;::::0;::::1;::::0;;10435:2:357;8790:103:134::1;::::0;::::1;10417:21:357::0;10474:2;10454:18;;;10447:30;10513:34;10493:18;;;10486:62;10584:33;10564:18;;;10557:61;10635:19;;8790:103:134::1;;;;;;;;;9091:8;::::0;:36:::1;::::0;;;;::::1;::::0;::::1;10811:25:357::0;;;9070:18:134::1;::::0;9091:8:::1;;::::0;:20:::1;::::0;10784:18:357;;9091:36:134::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47:::0;;-1:-1:-1;9272:45:134::1;;;::::0;;::::1;::::0;::::1;9300:16:::0;9272:45:::1;:::i;:::-;:27;:45::i;:::-;9258:10;:59;9237:135;;;::::0;::::1;::::0;;12521:2:357;9237:135:134::1;::::0;::::1;12503:21:357::0;12560:2;12540:18;;;12533:30;12599:34;12579:18;;;12572:62;12670:11;12650:18;;;12643:39;12699:19;;9237:135:134::1;12319:405:357::0;9237:135:134::1;9483:22;9508:27;9531:3;9508:22;:27::i;:::-;9545:40;9588:33:::0;;;:17:::1;:33;::::0;;;;;;;;9545:76;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;::::1;;::::0;;;;;;;9483:52;;-1:-1:-1;9545:76:134;10175:31;;:145:::1;;-1:-1:-1::0;10293:27:134;;10226:8:::1;::::0;10247:30:::1;::::0;;::::1;::::0;10226:52;;;;;12905:34:357;12893:47;;;10226:52:134::1;::::0;::::1;12875:66:357::0;10226:8:134::1;::::0;;::::1;::::0;:20:::1;::::0;12848:18:357;;10226:52:134::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63:::0;:94:::1;;10175:145;10154:247;;;::::0;::::1;::::0;;13154:2:357;10154:247:134::1;::::0;::::1;13136:21:357::0;13193:2;13173:18;;;13166:30;13232:34;13212:18;;;13205:62;13303:25;13283:18;;;13276:53;13346:19;;10154:247:134::1;12952:419:357::0;10154:247:134::1;10681:147;::::0;;::::1;::::0;::::1;13550:25:357::0;;;10637:18:134::1;13591::357::0;;;13584:34;;;13523:18;;10681:147:134::1;::::0;;;;;::::1;::::0;;;;;;10658:180;;10681:147:::1;10658:180:::0;;::::1;::::0;11253:22;;::::1;10811:25:357::0;;;10658:180:134;-1:-1:-1;11191:240:134::1;::::0;10784:18:357;11253:22:134::1;::::0;;;;;::::1;::::0;;;11191:240;;::::1;::::0;;;::::1;::::0;;::::1;11253:22;11191:240:::0;::::1;::::0;11253:22;11191:240:::1;11334:16:::0;;11191:240:::1;:::i;:::-;11375:16;:41;;;11191:37;:240::i;:::-;11170:337;;;::::0;::::1;::::0;;14952:2:357;11170:337:134::1;::::0;::::1;14934:21:357::0;14991:2;14971:18;;;14964:30;15030:34;15010:18;;;15003:62;15101:20;15081:18;;;15074:48;15139:19;;11170:337:134::1;14750:414:357::0;11170:337:134::1;11825:165;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;11911:15;11825:165:::0;::::1;;::::0;;::::1;::::0;;;;;::::1;::::0;;;;;;-1:-1:-1;11789:33:134;;;:17:::1;:33:::0;;;;;:201;;;;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;;12095:10;;::::1;::::0;12083;;::::1;::::0;12050:56;;::::1;::::0;;::::1;::::0;;;::::1;::::0;11807:14;;12050:56:::1;::::0;-1:-1:-1;12050:56:134::1;8553:3560;;;;8288:3825:::0;;;;;:::o;5981:105::-;6020:12;6054:16;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19926:180::-;20052:8;;:36;;;;;;;;10811:25:357;;;20000:4:134;;20023:76;;20052:8;;;;;:20;;10784:18:357;;20052:36:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;;20023:76;;:28;:76::i;:::-;20016:83;19926:180;-1:-1:-1;;19926:180:134:o;7422:77::-;:::o;12226:4818::-;4414:8;:6;:8::i;:::-;4410:33;;;4431:12;;;;;;;;;;;;;;4410:33;12594:8:::1;::::0;:39:::1;:8;1338:42:192;12594:39:134;12573:137;;;::::0;::::1;::::0;;15621:2:357;12573:137:134::1;::::0;::::1;15603:21:357::0;15660:2;15640:18;;;15633:30;15699:34;15679:18;;;15672:62;15770:33;15750:18;;;15743:61;15821:19;;12573:137:134::1;15419:427:357::0;12573:137:134::1;12793:22;12818:27;12841:3;12818:22;:27::i;:::-;12855:40;12898:33:::0;;;:17:::1;:33;::::0;;;;;;;12855:76;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;::::1;;::::0;;;;;;;12793:52;;-1:-1:-1;13181:31:134;;13173:94:::1;;;::::0;::::1;::::0;;16053:2:357;13173:94:134::1;::::0;::::1;16035:21:357::0;16092:2;16072:18;;;16065:30;16131:34;16111:18;;;16104:62;16202:20;16182:18;;;16175:48;16240:19;;13173:94:134::1;15851:414:357::0;13173:94:134::1;13584:8;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13554:16;:26;;;:58;;;;13533:180;;;::::0;::::1;::::0;;16661:2:357;13533:180:134::1;::::0;::::1;16643:21:357::0;16700:2;16680:18;;;16673:30;16739:34;16719:18;;;16712:62;16810:34;16790:18;;;16783:62;16882:13;16861:19;;;16854:42;16913:19;;13533:180:134::1;16459:479:357::0;13533:180:134::1;14103:56;14132:16;:26;;;14103:56;;:28;:56::i;:::-;14082:172;;;::::0;::::1;::::0;;17145:2:357;14082:172:134::1;::::0;::::1;17127:21:357::0;17184:2;17164:18;;;17157:30;17223:34;17203:18;;;17196:62;17294:34;17274:18;;;17267:62;17366:7;17345:19;;;17338:36;17391:19;;14082:172:134::1;16943:473:357::0;14082:172:134::1;14464:8;::::0;14485:30:::1;::::0;;::::1;::::0;14464:52;;;;;12905:34:357;12893:47;;;14464:52:134::1;::::0;::::1;12875:66:357::0;14425:36:134::1;::::0;14464:8:::1;;::::0;:20:::1;::::0;12848:18:357;;14464:52:134::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14827:27:::0;;14804:19;;14425:91;;-1:-1:-1;14804:50:134::1;14783:170;;;::::0;::::1;::::0;;17623:2:357;14783:170:134::1;::::0;::::1;17605:21:357::0;17662:2;17642:18;;;17635:30;17701:34;17681:18;;;17674:62;17772:34;17752:18;;;17745:62;17844:11;17823:19;;;17816:40;17873:19;;14783:170:134::1;17421:477:357::0;14783:170:134::1;15052:48;15081:8;:18;;;15052:48;;:28;:48::i;:::-;15031:162;;;::::0;::::1;::::0;;18105:2:357;15031:162:134::1;::::0;::::1;18087:21:357::0;18144:2;18124:18;;;18117:30;18183:34;18163:18;;;18156:62;18254:34;18234:18;;;18227:62;18326:5;18305:19;;;18298:34;18349:19;;15031:162:134::1;17903:471:357::0;15031:162:134::1;15309:36;::::0;;;:20:::1;:36;::::0;;;;;::::1;;:45;15301:111;;;::::0;::::1;::::0;;18581:2:357;15301:111:134::1;::::0;::::1;18563:21:357::0;18620:2;18600:18;;;18593:30;18659:34;18639:18;;;18632:62;18730:23;18710:18;;;18703:51;18771:19;;15301:111:134::1;18379:417:357::0;15301:111:134::1;15492:36;::::0;;;:20:::1;:36;::::0;;;;;;;:43;;;::::1;15531:4;15492:43;::::0;;15640:10;;::::1;::::0;15629:8:::1;:21:::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;16309:10;::::1;::::0;16321:12:::1;::::0;::::1;::::0;16335:9:::1;::::0;::::1;::::0;16346:8:::1;::::0;::::1;::::0;16285:70:::1;::::0;16309:10;16321:12;16335:9;16285:23:::1;:70::i;:::-;16423:8;:38:::0;;;::::1;1338:42:192;16423:38:134;::::0;;16620:44:::1;::::0;16270:85;;-1:-1:-1;16640:14:134;;16620:44:::1;::::0;::::1;::::0;16270:85;5228:14:357;5221:22;5203:41;;5191:2;5176:18;;5063:187;16620:44:134::1;;;;;;;;16928:16:::0;::::1;::::0;::::1;:61;;-1:-1:-1::0;16948:9:134::1;1016:1:192;16948:41:134;16928:61;16924:114;;;17012:15;;;;;;;;;;;;;;16924:114;12328:4716;;;;12226:4818:::0;:::o;6579:120::-;6644:6;6669:15;:10;6682:2;6669:15;:::i;:::-;:23;;6687:5;6669:23;:::i;5069:435::-;3100:19:43;3123:13;;;;;;3122:14;;3168:34;;;;-1:-1:-1;3186:12:43;;3201:1;3186:12;;;;:16;3168:34;3167:97;;;-1:-1:-1;3236:4:43;1465:19:59;:23;;;3208:55:43;;-1:-1:-1;3246:12:43;;;;;:17;3208:55;3146:190;;;;;;;19708:2:357;3146:190:43;;;19690:21:357;19747:2;19727:18;;;19720:30;19786:34;19766:18;;;19759:62;19857:16;19837:18;;;19830:44;19891:19;;3146:190:43;19506:410:357;3146:190:43;3346:12;:16;;;;3361:1;3346:16;;;3372:65;;;;3406:13;:20;;;;;;;;3372:65;5258:8:134::1;:20:::0;;;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;5288:12:::1;:28:::0;;;;::::1;::::0;;::::1;;::::0;;5326:16:::1;:36:::0;;;::::1;5258:20;5326:36:::0;;::::1;;;::::0;;5376:8:::1;::::0;::::1;5372:91;;5414:8;:38:::0;;;::::1;1338:42:192;5414:38:134;::::0;;5372:91:::1;5472:25;:23;:25::i;:::-;3461:14:43::0;3457:99;;;3507:5;3491:21;;;;;;3531:14;;-1:-1:-1;20073:36:357;;3531:14:43;;20061:2:357;20046:18;3531:14:43;;;;;;;3457:99;3090:472;5069:435:134;;;:::o;1175:320:59:-;1465:19;;;:23;;;1175:320::o;3911:3974:137:-;4078:6;:19;4043:17;;4063:34;;4078:19;;;;;4063:12;:34;:::i;:::-;4043:54;;4108:28;4139:17;:15;:17::i;:::-;4108:48;;4166:26;4265:6;:27;;;4257:36;;4222:6;:23;;;4214:32;;4207:87;;;;:::i;:::-;4166:128;-1:-1:-1;4309:13:137;;4305:2229;;4666:6;:20;4629:19;;4651:59;;4691:19;;4666:20;;;;;4651:59;:::i;:::-;4629:81;;4724:19;4855:6;:34;;;4847:43;;4818:19;:73;;;;:::i;:::-;4762:6;:18;4747:50;;4785:12;;4762:18;;4747:50;:::i;:::-;4746:146;;;;:::i;:::-;5111:6;:18;4724:168;;-1:-1:-1;5033:17:137;;5053:232;;5096:50;;4724:168;;5111:18;;5096:50;:::i;:::-;5185:6;:21;;;5177:30;;5247:6;:21;;;5239:30;;5053:16;:232::i;:::-;5033:252;;5562:1;5550:9;:13;5546:741;;;5835:437;5882:239;5939:10;6004:6;:34;;;5996:43;;6096:1;6084:9;:13;;;;:::i;:::-;5882:16;:239::i;5835:437::-;5822:450;;5546:741;6380:49;;6481:42;6443:24;6510:12;6481:42;;;6380:6;6481:42;-1:-1:-1;;4305:2229:137;6628:6;:31;;6652:7;;6628:6;:20;;:31;;6652:7;;6628:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6728:6;:23;;;6720:32;;6688:6;:20;;;;;;;;;;;;6680:29;;6673:80;6669:128;;;6776:10;;;;;;;;;;;;;;6669:128;6908:6;:18;6858:20;;6881:46;;6908:18;;6881:16;;;:46;:::i;:::-;6858:69;;7409:15;7442:31;7451:13;7466:6;7442:8;:31::i;:::-;7427:46;;:12;:46;:::i;:::-;7409:64;;7753:15;7785:9;7771:23;;:11;:23;:::i;:::-;7753:41;;7818:7;7808;:17;7804:75;;;7841:27;7850:17;7860:7;7850;:17;:::i;:::-;7841:8;:27::i;:::-;3975:3910;;;;;;3911:3974;;:::o;4961:384:196:-;5060:7;5137:16;:24;;;5179:16;:26;;;5223:16;:41;;;5282:16;:32;;;5109:219;;;;;;;;;;22747:25:357;;;22803:2;22788:18;;22781:34;;;;22846:2;22831:18;;22824:34;22889:2;22874:18;;22867:34;22734:3;22719:19;;22516:391;5109:219:196;;;;;;;;;;;;;5086:252;;;;;;5079:259;;4961:384;;;:::o;4456:211::-;4590:9;;4601:10;;;;;4613;;;;;4625:9;;;;4636:12;;;;4650:8;;;;4579:80;;4543:7;;4579:80;;4590:9;;4601:10;4650:8;4579:80;;:::i;1041:343:206:-;1234:11;1261:16;1280:19;1294:4;1280:13;:19::i;:::-;1261:38;;1318:59;1350:3;1355:6;1363;1371:5;1318:31;:59::i;:::-;1309:68;1041:343;-1:-1:-1;;;;;;1041:343:206:o;20359:180:134:-;20494:8;;:38;;;;;;;;20440:4;;20494:8;;;:36;;:38;;;;;;;;;;;;;;:8;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20481:51;;:10;:51;:::i;:::-;20463:15;:69;;20359:180;-1:-1:-1;;20359:180:134:o;4419:2320:200:-;4589:4;4609:13;4632:15;4650:21;4660:7;4669:1;4650:9;:21::i;:::-;4632:39;;4782:10;4772:1146;;4894:10;4891:1;4884:21;5009:2;5005;4998:14;5747:56;5743:2;5736:68;5900:3;5896:2;5889:15;4772:1146;6666:4;6630;6589:9;6583:16;6549:2;6538:9;6534:18;6491:6;6449:7;6415:5;6389:309;6361:337;4419:2320;-1:-1:-1;;;;;;;4419:2320:200:o;8340:234:137:-;4888:13:43;;;;;;;4880:69;;;;;;;23908:2:357;4880:69:43;;;23890:21:357;23947:2;23927:18;;;23920:30;23986:34;23966:18;;;23959:62;24057:13;24037:18;;;24030:41;24088:19;;4880:69:43;23706:407:357;4880:69:43;8415:6:137::1;:19:::0;;;::::1;;;;:24:::0;8411:157:::1;;8464:93;::::0;;::::1;::::0;::::1;::::0;;8494:6:::1;8464:93:::0;;;-1:-1:-1;8464:93:137::1;::::0;::::1;::::0;8541:12:::1;8464:93;;::::0;;;;;;;8455:102;::::1;;:6;:102:::0;8340:234::o;7748:152:134:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7864:12:134;;:29;;;;;;;-1:-1:-1;;7864:12:134;;;;;:27;;:29;;;;;-1:-1:-1;;7864:29:134;;;;;;:12;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;537:161:189:-;616:6;641:50;656:28;671:6;679:4;656:14;:28::i;:::-;686:4;641:14;:50::i;:::-;634:57;;537:161;;;;;;:::o;1040:228::-;1138:6;1257:4;1180:72;1213:19;1220:12;1257:4;1213:19;:::i;:::-;1205:28;;:4;:28;:::i;:::-;1235:16;:9;1247:4;1235:16;:::i;:::-;1180:24;:72::i;:::-;1164:89;;:12;:89;:::i;:::-;1163:98;;;;:::i;413:105:69:-;471:7;502:1;497;:6;;:14;;510:1;497:14;;;-1:-1:-1;506:1:69;;490:21;-1:-1:-1;413:105:69:o;407:192:190:-;461:9;484:18;505:9;484:30;;524:69;556:7;544:9;531:22;;:10;:22;:::i;:::-;:32;524:69;;;579:3;;;:::i;:::-;;;524:69;;;451:148;;407:192;:::o;2052:142:206:-;2116:18;2181:4;2171:15;;;;;;2154:33;;;;;;25677:19:357;;25721:2;25712:12;;25548:182;2154:33:206;;;;;;;;;;;;;2146:41;;2052:142;;;:::o;2253:281:205:-;2446:11;2482:45;2494:6;2502:24;2506:4;2512:6;2520:5;2502:3;:24::i;:::-;6693:17:191;;;;;;;6672;;;;;;;;;;:38;;6569:148;2482:45:205;2473:54;2253:281;-1:-1:-1;;;;;2253:281:205:o;3615:365:200:-;3696:4;3712:15;3931:2;3916:12;3909:5;3905:24;3901:33;3896:2;3887:7;3883:16;3879:56;3874:2;3867:5;3863:14;3860:76;3853:84;;3615:365;-1:-1:-1;;;;3615:365:200:o;311:102:71:-;367:6;397:1;392;:6;;:14;;405:1;392:14;;491:101;547:6;576:1;572;:5;:13;;584:1;572:13;;1208:273:106;1267:6;1391:36;491:4;1410:1;1399:8;1405:1;1399:5;:8::i;:::-;:12;;;;:::i;:::-;1398:28;;;;:::i;:::-;1391:6;:36::i;2830:6314:205:-;2923:19;2976:1;2962:4;:11;:15;2954:49;;;;;;;25937:2:357;2954:49:205;;;25919:21:357;25976:2;25956:18;;;25949:30;26015:23;25995:18;;;25988:51;26056:18;;2954:49:205;25735:345:357;2954:49:205;3014:23;3040:19;3052:6;3040:11;:19::i;:::-;3014:45;;3069:16;3088:21;3104:4;3088:15;:21::i;:::-;3069:40;;3119:26;3165:5;3148:23;;;;;;25677:19:357;;25721:2;25712:12;;25548:182;3148:23:205;;;;;;;;;;;;;3119:52;;3181:23;3295:9;3290:5790;3314:5;:12;3310:1;:16;3290:5790;;;3347:27;3377:5;3383:1;3377:8;;;;;;;;:::i;:::-;;;;;;;3347:38;;3516:3;:10;3497:15;:29;;3489:88;;;;;;;26476:2:357;3489:88:205;;;26458:21:357;26515:2;26495:18;;;26488:30;26554:34;26534:18;;;26527:62;26625:16;26605:18;;;26598:44;26659:19;;3489:88:205;26274:410:357;3489:88:205;3596:15;3615:1;3596:20;3592:837;;3768:19;;3758:30;;;;;;;3741:48;;3729:76;;3741:48;;3758:30;3741:48;25677:19:357;;;25721:2;25712:12;;25548:182;3741:48:205;;;;;;;;;;;;;3791:13;6693:17:191;;;;;;;6672;;;;;;;;;;:38;;6569:148;3729:76:205;3700:176;;;;;;;26891:2:357;3700:176:205;;;26873:21:357;26930:2;26910:18;;;26903:30;26969:31;26949:18;;;26942:59;27018:18;;3700:176:205;26689:353:357;3700:176:205;3592:837;;;3901:19;;:26;3931:2;-1:-1:-1;3897:532:205;;4097:19;;4087:30;;;;;;;4070:48;;4058:76;;4070:48;;4087:30;4070:48;25677:19:357;;;25721:2;25712:12;;25548:182;4058:76:205;4029:186;;;;;;;27249:2:357;4029:186:205;;;27231:21:357;27288:2;27268:18;;;27261:30;27327:34;27307:18;;;27300:62;27398:9;27378:18;;;27371:37;27425:19;;4029:186:205;27047:403:357;3897:532:205;4336:19;;6693:17:191;;;;;;;;;;6672;;;;;;;:38;4316:98:205;;;;;;;27657:2:357;4316:98:205;;;27639:21:357;27696:2;27676:18;;;27669:30;27735:34;27715:18;;;27708:62;27806:8;27786:18;;;27779:36;27832:19;;4316:98:205;27455:402:357;4316:98:205;936:14;803:2;949:1;936:14;:::i;:::-;4447:11;:19;;;:26;:48;4443:4627;;4538:3;:10;4519:15;:29;4515:1346;;5047:52;5067:11;:19;;;803:2;5067:31;;;;;;;;:::i;:::-;;;;;;;5047:19;:52::i;:::-;5038:61;;5145:1;5129:6;:13;:17;5121:89;;;;;;;28064:2:357;5121:89:205;;;28046:21:357;28103:2;28083:18;;;28076:30;28142:34;28122:18;;;28115:62;28213:29;28193:18;;;28186:57;28260:19;;5121:89:205;27862:423:357;5121:89:205;5322:1;5307:5;:12;:16;;;;:::i;:::-;5302:1;:21;5294:92;;;;;;;28492:2:357;5294:92:205;;;28474:21:357;28531:2;28511:18;;;28504:30;28570:34;28550:18;;;28543:62;28641:28;28621:18;;;28614:56;28687:19;;5294:92:205;28290:422:357;5294:92:205;5409:13;;;;;;;;4515:1346;5609:15;5633:3;5637:15;5633:20;;;;;;;;:::i;:::-;;;;;;;;;5627:27;;5609:45;;5676:33;5712:11;:19;;;5732:9;5712:30;;;;;;;;;;:::i;:::-;;;;;;;5676:66;;5780:20;5791:8;5780:10;:20::i;:::-;5764:36;-1:-1:-1;5822:20:205;5841:1;5822:20;;:::i;:::-;;;5447:414;;4443:4627;;;1105:1;5885:11;:19;;;:26;:59;5881:3189;;5964:17;5984:25;5997:11;5984:12;:25::i;:::-;5964:45;;6027:12;6048:4;6053:1;6048:7;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;6074:12:205;6094:10;6103:1;6048:7;6094:10;:::i;:::-;6089:16;;:1;:16;:::i;:::-;6074:31;;6123:26;6152:25;6164:4;6170:6;6152:25;;:11;:25::i;:::-;6123:54;;6195:25;6223:33;6235:3;6240:15;6223:11;:33::i;:::-;6195:61;;6274:26;6303:51;6326:13;6341:12;6303:22;:51::i;:::-;6274:80;;6661:18;6637:13;:20;:42;6608:171;;;;;;;29281:2:357;6608:171:205;;;29263:21:357;29320:2;29300:18;;;29293:30;29359:34;29339:18;;;29332:62;29430:28;29410:18;;;29403:56;29476:19;;6608:171:205;29079:422:357;6608:171:205;6802:26;;;1447:1;6802:26;;:55;;-1:-1:-1;6832:25:205;;;1553:1;6832:25;6802:55;6798:2169;;;7498:18;7475:12;:19;:41;7442:185;;;;;;;29708:2:357;7442:185:205;;;29690:21:357;29747:2;29727:18;;;29720:30;29786:34;29766:18;;;29759:62;29857:31;29837:18;;;29830:59;29906:19;;7442:185:205;29506:425:357;7442:185:205;7985:43;8005:11;:19;;;8025:1;8005:22;;;;;;;;:::i;7985:43::-;7976:52;;8074:1;8058:6;:13;:17;8050:87;;;;;;;30138:2:357;8050:87:205;;;30120:21:357;30177:2;30157:18;;;30150:30;30216:34;30196:18;;;30189:62;30287:27;30267:18;;;30260:55;30332:19;;8050:87:205;29936:421:357;8050:87:205;8249:1;8234:5;:12;:16;;;;:::i;:::-;8229:1;:21;8221:90;;;;;;;30564:2:357;8221:90:205;;;30546:21:357;30603:2;30583:18;;;30576:30;30642:34;30622:18;;;30615:62;30713:26;30693:18;;;30686:54;30757:19;;8221:90:205;30362:420:357;8221:90:205;8334:13;;;;;;;;;;;;;;6798:2169;8376:31;;;;;:65;;-1:-1:-1;8411:30:205;;;1339:1;8411:30;8376:65;8372:595;;;8748:34;8759:11;:19;;;8779:1;8759:22;;;;;;;;:::i;:::-;;;;;;;8748:10;:34::i;:::-;8732:50;-1:-1:-1;8804:37:205;8823:18;8804:37;;:::i;:::-;;;8372:595;;;8888:60;;;;;30989:2:357;8888:60:205;;;30971:21:357;31028:2;31008:18;;;31001:30;31067:34;31047:18;;;31040:62;31138:20;31118:18;;;31111:48;31176:19;;8888:60:205;30787:414:357;8372:595:205;5946:3035;;;;;;5881:3189;;;9005:50;;;;;31408:2:357;9005:50:205;;;31390:21:357;31447:2;31427:18;;;31420:30;31486:34;31466:18;;;31459:62;31557:10;31537:18;;;31530:38;31585:19;;9005:50:205;31206:404:357;5881:3189:205;-1:-1:-1;3328:3:205;;;;:::i;:::-;;;;3290:5790;;;-1:-1:-1;9090:47:205;;;;;31817:2:357;9090:47:205;;;31799:21:357;31856:2;31836:18;;;31829:30;31895:34;31875:18;;;31868:62;31966:7;31946:18;;;31939:35;31991:19;;9090:47:205;31615:401:357;4596:2947:106;4644:8;4700:1;4696;:5;4688:27;;;;;;;32223:2:357;4688:27:106;;;32205:21:357;32262:1;32242:18;;;32235:29;32300:11;32280:18;;;32273:39;32329:18;;4688:27:106;32021:332:357;4688:27:106;5107:8;5145:2;5125:16;5138:1;5125:4;:16::i;:::-;5118:29;5175:3;:7;;;5161:22;;;;5208:17;;;6001:31;5997:35;;6052:5;;5459:2;6051:13;;;6068:32;6050:50;6120:5;;6119:13;;6136:33;6118:51;6189:5;;6188:13;;6205:33;6187:51;6258:5;;6257:13;;6274:33;6256:51;6327:5;;6326:13;;6343:32;6325:50;6395:5;;6394:13;;6411:30;6393:48;5398:31;5394:35;;5449:5;;5448:13;;5465:32;5447:50;5517:5;;5516:13;;5533:32;5515:50;5585:5;;5584:13;;5583:50;;5653:5;;5652:13;;5651:50;;5721:5;;5720:13;;;5719:50;;5787:5;;;:46;;6735:10;7125:43;7120:48;7232:71;:75;;;;7227:80;;;;7380:72;7375:77;7523:3;7517:9;;;-1:-1:-1;;4596:2947:106:o;1487:3103::-;1536:8;1718:21;1713:1;:26;1709:40;;-1:-1:-1;1748:1:106;;1487:3103;-1:-1:-1;1487:3103:106:o;1709:40::-;1948:21;1943:1;:26;1939:54;;1971:22;;;;;32560:2:357;1971:22:106;;;32542:21:357;32599:2;32579:18;;;32572:30;32638:14;32618:18;;;32611:42;32670:18;;1971:22:106;32358:336:357;1939:54:106;2266:5;2260:2;2255:7;;;2254:17;;-1:-1:-1;2535:8:106;2601:2;2559:29;2548:7;;;2547:41;2591:5;2547:49;2546:57;;2629:29;2625:33;;2621:37;;;3300:35;;;3355:5;;2935:2;3354:13;;;3371:32;3353:50;3423:5;;3422:13;;3421:51;;3492:5;;3491:13;;3508:34;3490:52;3562:5;;3561:13;;3560:53;;3633:5;;3632:13;;3649:35;3631:53;2941:32;2874:31;2870:35;;2925:5;;2924:13;;2923:50;;;2998:5;;;:40;;3058:5;3057:13;;;3074:35;3056:53;3127:5;;;3136:40;3127:50;4002:10;4502:49;4489:62;4564:3;:7;;;;4488:84;;;;;;-1:-1:-1;;1487:3103:106:o;9434:390:205:-;9553:13;;9500:24;;9553:13;9585:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;9585:22:205;;;;;;;;;;;;;;;;9576:31;;9622:9;9617:201;9641:6;9637:1;:10;9617:201;;;9676:72;;;;;;;;9696:6;9703:1;9696:9;;;;;;;;:::i;:::-;;;;;;;9676:72;;;;9716:29;9735:6;9742:1;9735:9;;;;;;;;:::i;:::-;;;;;;;9716:18;:29::i;:::-;9676:72;;;9664:6;9671:1;9664:9;;;;;;;;:::i;:::-;;;;;;;;;;:84;9790:3;;9617:201;;;;9526:298;9434:390;;;:::o;4332:1978:191:-;4395:12;4419:21;4550:4;4544:11;4532:23;;4663:6;4657:13;4836:11;4830:4;4826:22;5195:4;5180:13;5176:24;5169:4;5165:9;5161:40;5151:8;5147:55;5141:4;5134:69;5293:13;5283:8;5276:31;;5434:4;5426:6;5422:17;5571:4;5561:8;5557:19;5662:4;5647:622;5675:11;5672:1;5669:18;5647:622;;;5854:1;5848:4;5844:12;5830;5826:31;5996:1;5984:10;5980:18;5974:25;5968:4;5963:37;6119:1;6113:4;6109:12;6101:6;6093:29;6249:4;6246:1;6242:12;6235:4;6227:6;6223:17;6215:40;-1:-1:-1;;5702:4:191;5695:12;5647:622;;;-1:-1:-1;6295:8:191;;4332:1978;-1:-1:-1;;;;;4332:1978:191:o;3993:464:203:-;4055:17;4085:18;4105;4125:20;4149:18;4163:3;4149:13;:18::i;:::-;4084:83;;-1:-1:-1;4084:83:203;-1:-1:-1;4084:83:203;-1:-1:-1;4198:21:203;4186:8;:33;;;;;;;;:::i;:::-;;4178:103;;;;;;;33090:2:357;4178:103:203;;;33072:21:357;33129:2;33109:18;;;33102:30;33168:34;33148:18;;;33141:62;33239:27;33219:18;;;33212:55;33284:19;;4178:103:203;32888:421:357;4178:103:203;4314:23;4327:10;4314;:23;:::i;:::-;4300:10;;:37;4292:102;;;;;;;33516:2:357;4292:102:203;;;33498:21:357;33555:2;33535:18;;;33528:30;33594:34;33574:18;;;33567:62;33665:22;33645:18;;;33638:50;33705:19;;4292:102:203;33314:416:357;4292:102:203;4412:38;4418:3;:7;;;4427:10;4439;4412:5;:38::i;10121:193:205:-;10195:16;10244:2;10229:5;:12;;;:17;:78;;10281:26;10301:5;10281:19;:26::i;:::-;10229:78;;;10249:29;10272:5;10249:22;:29::i;10495:172::-;10562:21;10606:54;10622:37;10642:5;:13;;;10656:1;10642:16;;;;;;;;:::i;10622:37::-;10606:15;:54::i;3805:237:191:-;3880:12;3918:6;:13;3908:6;:23;3904:70;;-1:-1:-1;3954:9:191;;;;;;;;;-1:-1:-1;3954:9:191;;3947:16;;3904:70;3990:45;3996:6;4004;4028;4012;:13;:22;;;;:::i;:::-;3990:5;:45::i;10892:321:205:-;10980:15;11007:11;11034:2;:9;11022:2;:9;:21;11021:47;;11059:2;:9;11021:47;;;11047:2;:9;11021:47;11007:61;;11078:129;11095:3;11085:7;:13;:43;;;;;11117:2;11120:7;11117:11;;;;;;;;:::i;:::-;;;;;;;;;11102:26;;;:2;11105:7;11102:11;;;;;;;;:::i;:::-;;;;;;;:26;11085:43;11078:129;;;11173:9;;;;;11078:129;;;10997:216;10892:321;;;;:::o;15328:575:106:-;15376:9;15409:1;15405;:5;15397:27;;;;;;;32223:2:357;15397:27:106;;;32205:21:357;32262:1;32242:18;;;32235:29;32300:11;32280:18;;;32273:39;32329:18;;15397:27:106;32021:332:357;15397:27:106;-1:-1:-1;15821:1:106;15473:34;-1:-1:-1;;15467:1:106;15463:49;15566:9;;;15546:18;15543:33;15540:1;15536:41;15530:48;15624:9;;;15612:10;15609:25;15606:1;15602:33;15596:40;15678:9;;;15670:6;15667:21;15664:1;15660:29;15654:36;15730:9;;;15724:4;15721:19;15718:1;15714:27;;;15708:34;;;15781:9;;;15776:3;15773:18;15770:1;15766:26;15760:33;15832:9;;;15824:18;;;15817:26;;15811:33;15876:9;;;-1:-1:-1;15862:25:106;;15328:575::o;3732:130:203:-;3791:21;3831:24;3840:14;3850:3;3840:9;:14::i;:::-;3831:8;:24::i;5246:4079::-;5335:15;5352;5369:17;5705:1;5692:3;:10;;;:14;5684:101;;;;;;;33937:2:357;5684:101:203;;;33919:21:357;33976:2;33956:18;;;33949:30;34015:34;33995:18;;;33988:62;34086:34;34066:18;;;34059:62;34158:12;34137:19;;;34130:41;34188:19;;5684:101:203;33735:478:357;5684:101:203;5816:7;;;;5898:10;;5796:17;5890:19;5943:4;5933:14;;5929:3390;;5999:1;6002;6005:21;5991:36;;;;;;;;;;5929:3390;6058:4;6048:6;:14;6044:3275;;6164:14;6181:13;6190:4;6181:6;:13;:::i;:::-;6164:30;;6247:6;6234:3;:10;;;:19;6209:140;;;;;;;34420:2:357;6209:140:203;;;34402:21:357;34459:2;34439:18;;;34432:30;34498:34;34478:18;;;34471:62;34569:34;34549:18;;;34542:62;34641:16;34620:19;;;34613:45;34675:19;;6209:140:203;34218:482:357;6209:140:203;6471:1;6462:11;;;6456:18;6476:14;6452:39;;6544:11;;;;:41;;-1:-1:-1;6559:26:203;;;;;;6544:41;6519:177;;;;;;;34907:2:357;6519:177:203;;;34889:21:357;34946:2;34926:18;;;34919:30;34985:34;34965:18;;;34958:62;35056:34;35036:18;;;35029:62;35128:15;35107:19;;;35100:44;35161:19;;6519:177:203;34705:481:357;6519:177:203;-1:-1:-1;6719:1:203;;-1:-1:-1;6722:6:203;-1:-1:-1;6730:21:203;;-1:-1:-1;6711:41:203;;-1:-1:-1;;6711:41:203;6044:3275;6783:4;6773:6;:14;6769:2550;;6831:19;6853:13;6862:4;6853:6;:13;:::i;:::-;6831:35;;6919:11;6906:3;:10;;;:24;6881:164;;;;;;;35393:2:357;6881:164:203;;;35375:21:357;35432:2;35412:18;;;35405:30;35471:34;35451:18;;;35444:62;35542:34;35522:18;;;35515:62;35614:19;35593;;;35586:48;35651:19;;6881:164:203;35191:485:357;6881:164:203;7167:1;7158:11;;7152:18;7172:14;7148:39;7060:25;7240:26;;;7215:143;;;;;;;35883:2:357;7215:143:203;;;35865:21:357;35922:2;35902:18;;;35895:30;35961:34;35941:18;;;35934:62;36032:34;36012:18;;;36005:62;36104:12;36083:19;;;36076:41;36134:19;;7215:143:203;35681:478:357;7215:143:203;7488:1;7479:11;;7473:18;7455:1;7451:19;;7446:3;7442:29;7438:54;7537:2;7528:11;;7520:96;;;;;;;36366:2:357;7520:96:203;;;36348:21:357;36405:2;36385:18;;;36378:30;36444:34;36424:18;;;36417:62;36515:34;36495:18;;;36488:62;36587:10;36566:19;;;36559:39;36615:19;;7520:96:203;36164:476:357;7520:96:203;7669:20;7683:6;7669:11;:20;:::i;:::-;7656:10;;:33;7631:168;;;;;;;36847:2:357;7631:168:203;;;36829:21:357;36886:2;36866:18;;;36859:30;36925:34;36905:18;;;36898:62;36996:34;36976:18;;;36969:62;37068:14;37047:19;;;37040:43;37100:19;;7631:168:203;36645:480:357;7631:168:203;7822:15;7826:11;7822:1;:15;:::i;:::-;7814:55;-1:-1:-1;7839:6:203;-1:-1:-1;7847:21:203;;-1:-1:-1;7814:55:203;;-1:-1:-1;;;;7814:55:203;6769:2550;7900:4;7890:6;:14;7886:1433;;8003:15;8021:13;8030:4;8021:6;:13;:::i;:::-;8003:31;;8070:7;8057:3;:10;;;:20;8049:107;;;;;;;37332:2:357;8049:107:203;;;37314:21:357;37371:2;37351:18;;;37344:30;37410:34;37390:18;;;37383:62;37481:34;37461:18;;;37454:62;37553:12;37532:19;;;37525:41;37583:19;;8049:107:203;37130:478:357;8049:107:203;8179:1;;-1:-1:-1;8182:7:203;-1:-1:-1;8179:1:203;;-1:-1:-1;8171:42:203;;-1:-1:-1;;8171:42:203;7886:1433;8270:20;8293:13;8302:4;8293:6;:13;:::i;:::-;8270:36;;8359:12;8346:3;:10;;;:25;8321:161;;;;;;;37815:2:357;8321:161:203;;;37797:21:357;37854:2;37834:18;;;37827:30;37893:34;37873:18;;;37866:62;37964:34;37944:18;;;37937:62;38036:15;38015:19;;;38008:44;38069:19;;8321:161:203;37613:481:357;8321:161:203;8604:1;8595:11;;8589:18;8609:14;8585:39;8497:25;8677:26;;;8652:141;;;;;;;38301:2:357;8652:141:203;;;38283:21:357;38340:2;38320:18;;;38313:30;38379:34;38359:18;;;38352:62;38450:34;38430:18;;;38423:62;38522:10;38501:19;;;38494:39;38550:19;;8652:141:203;38099:476:357;8652:141:203;8926:1;8917:11;;8911:18;8892:1;8888:20;;8883:3;8879:30;8875:55;8976:2;8966:12;;8958:95;;;;;;;38782:2:357;8958:95:203;;;38764:21:357;38821:2;38801:18;;;38794:30;38860:34;38840:18;;;38833:62;38931:34;38911:18;;;38904:62;39003:8;38982:19;;;38975:37;39029:19;;8958:95:203;38580:474:357;8958:95:203;9106:22;9121:7;9106:12;:22;:::i;:::-;9093:10;;:35;9068:168;;;;;;;39261:2:357;9068:168:203;;;39243:21:357;39300:2;39280:18;;;39273:30;39339:34;39319:18;;;39312:62;39410:34;39390:18;;;39383:62;39482:12;39461:19;;;39454:41;39512:19;;9068:168:203;39059:478:357;9068:168:203;9259:16;9263:12;9259:1;:16;:::i;:::-;9251:57;-1:-1:-1;9277:7:203;-1:-1:-1;9286:21:203;;-1:-1:-1;9251:57:203;;-1:-1:-1;;;;9251:57:203;5246:4079;;;;;;:::o;9585:737::-;9676:17;9722:7;9712:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9712:18:203;-1:-1:-1;9705:25:203;-1:-1:-1;9740:54:203;;9772:11;9740:54;10010:11;10024:36;10053:7;10045:4;10024:36;:::i;:::-;10010:50;;10115:2;10109:4;10105:13;10140:1;10154:87;10168:7;10165:1;10162:14;10154:87;;;10226:11;;;10220:18;10206:12;;;10199:40;10191:2;10184:10;10154:87;;;10264:7;10261:1;10258:14;10255:51;;;10302:1;10292:7;10286:4;10282:18;10275:29;10255:51;;;10079:237;9585:737;;;;;:::o;4847:137::-;4912:17;4948:29;4954:3;:7;;;4963:1;4966:3;:10;;;4948:5;:29::i;660:2816:191:-;752:12;824:7;808;818:2;808:12;:23;;800:50;;;;;;;39744:2:357;800:50:191;;;39726:21:357;39783:2;39763:18;;;39756:30;39822:16;39802:18;;;39795:44;39856:18;;800:50:191;39542:338:357;800:50:191;892:6;881:7;872:6;:16;:26;;864:53;;;;;;;39744:2:357;864:53:191;;;39726:21:357;39783:2;39763:18;;;39756:30;39822:16;39802:18;;;39795:44;39856:18;;864:53:191;39542:338:357;864:53:191;965:7;956:6;:16;939:6;:13;:33;;931:63;;;;;;;40087:2:357;931:63:191;;;40069:21:357;40126:2;40106:18;;;40099:30;40165:19;40145:18;;;40138:47;40202:18;;931:63:191;39885:341:357;931:63:191;1015:22;1078:15;;1106:1931;;;;3178:4;3172:11;3159:24;;3365:1;3354:9;3347:20;3413:4;3402:9;3398:20;3392:4;3385:34;1071:2362;;1106:1931;1288:4;1282:11;1269:24;;1947:2;1938:7;1934:16;2329:9;2322:17;2316:4;2312:28;2300:9;2289;2285:25;2281:60;2377:7;2373:2;2369:16;2629:6;2615:9;2608:17;2602:4;2598:28;2586:9;2578:6;2574:22;2570:57;2566:70;2403:389;2662:3;2658:2;2655:11;2403:389;;;2780:9;;2769:21;;2703:4;2695:13;;;;2735;2403:389;;;-1:-1:-1;;2810:26:191;;;3018:2;3001:11;3014:7;2997:25;2991:4;2984:39;-1:-1:-1;1071:2362:191;-1:-1:-1;3460:9:191;660:2816;-1:-1:-1;;;;660:2816:191:o;1298:390:203:-;-1:-1:-1;;;;;;;;;;;;;;;;;1453:1:203;1440:3;:10;:14;1432:101;;;;;;;33937:2:357;1432:101:203;;;33919:21:357;33976:2;33956:18;;;33949:30;34015:34;33995:18;;;33988:62;34086:34;34066:18;;;34059:62;34158:12;34137:19;;;34130:41;34188:19;;1432:101:203;33735:478:357;1432:101:203;-1:-1:-1;1640:41:203;;;;;;;;;1658:10;;1640:41;;1610:2;1601:12;;;1640:41;;;;;;;;1298:390::o;1840:1740::-;1901:21;1935:18;1955;1975:20;1999:18;2013:3;1999:13;:18::i;:::-;1934:83;;-1:-1:-1;1934:83:203;-1:-1:-1;1934:83:203;-1:-1:-1;2048:21:203;2036:8;:33;;;;;;;;:::i;:::-;;2028:102;;;;;;;40433:2:357;2028:102:203;;;40415:21:357;40472:2;40452:18;;;40445:30;40511:34;40491:18;;;40484:62;40582:26;40562:18;;;40555:54;40626:19;;2028:102:203;40231:420:357;2028:102:203;2176:10;;2149:23;2162:10;2149;:23;:::i;:::-;:37;2141:100;;;;;;;40858:2:357;2141:100:203;;;40840:21:357;40897:2;40877:18;;;40870:30;40936:34;40916:18;;;40909:62;41007:20;40987:18;;;40980:48;41045:19;;2141:100:203;40656:414:357;2141:100:203;2651:30;;;1123:2;2651:30;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;2651:30:203;;;;;;;;;;;;;;-1:-1:-1;2644:37:203;-1:-1:-1;2692:17:203;2740:10;2760:681;2776:10;;2767:19;;2760:681;;;2803:18;2823;2846:150;2877:105;;;;;;;;2908:6;2895:3;:10;;;:19;;;;:::i;:::-;2877:105;;;;2972:6;2961:3;:7;;;2940:38;;;;:::i;:::-;2877:105;;2846:13;:150::i;:::-;2802:194;;;;;3201:153;;;;;;;;3248:10;3235;:23;;;;:::i;:::-;3201:153;;;;3332:6;3321:3;:7;;;3300:38;;;;:::i;:::-;3201:153;;;3183:4;3188:9;3183:15;;;;;;;;:::i;:::-;;;;;;;;;;:171;3369:14;3382:1;3369:14;;:::i;:::-;;-1:-1:-1;3407:23:203;3420:10;3407;:23;:::i;:::-;3397:33;;;;:::i;:::-;;;2788:653;;2760:681;;;-1:-1:-1;3541:23:203;;-1:-1:-1;3548:4:203;;1840:1740;-1:-1:-1;;;1840:1740:203:o;755:184:357:-;807:77;804:1;797:88;904:4;901:1;894:15;928:4;925:1;918:15;944:334;1015:2;1009:9;1071:2;1061:13;;1076:66;1057:86;1045:99;;1174:18;1159:34;;1195:22;;;1156:62;1153:88;;;1221:18;;:::i;:::-;1257:2;1250:22;944:334;;-1:-1:-1;944:334:357:o;1283:154::-;1369:42;1362:5;1358:54;1351:5;1348:65;1338:93;;1427:1;1424;1417:12;1338:93;1283:154;:::o;1442:589::-;1484:5;1537:3;1530:4;1522:6;1518:17;1514:27;1504:55;;1555:1;1552;1545:12;1504:55;1591:6;1578:20;1617:18;1613:2;1610:26;1607:52;;;1639:18;;:::i;:::-;1683:114;1791:4;1722:66;1715:4;1711:2;1707:13;1703:86;1699:97;1683:114;:::i;:::-;1822:2;1813:7;1806:19;1868:3;1861:4;1856:2;1848:6;1844:15;1840:26;1837:35;1834:55;;;1885:1;1882;1875:12;1834:55;1950:2;1943:4;1935:6;1931:17;1924:4;1915:7;1911:18;1898:55;1998:1;1973:16;;;1991:4;1969:27;1962:38;;;;1977:7;1442:589;-1:-1:-1;;;1442:589:357:o;2036:1032::-;2104:5;2152:4;2140:9;2135:3;2131:19;2127:30;2124:50;;;2170:1;2167;2160:12;2124:50;2203:2;2197:9;2245:4;2237:6;2233:17;2269:18;2337:6;2325:10;2322:22;2317:2;2305:10;2302:18;2299:46;2296:72;;;2348:18;;:::i;:::-;2388:10;2384:2;2377:22;2417:6;2408:15;;2460:9;2447:23;2439:6;2432:39;2523:2;2512:9;2508:18;2495:32;2480:47;;2536:33;2561:7;2536:33;:::i;:::-;2602:7;2597:2;2589:6;2585:15;2578:32;2662:2;2651:9;2647:18;2634:32;2619:47;;2675:33;2700:7;2675:33;:::i;:::-;2741:7;2736:2;2728:6;2724:15;2717:32;2810:2;2799:9;2795:18;2782:32;2777:2;2769:6;2765:15;2758:57;2877:3;2866:9;2862:19;2849:33;2843:3;2835:6;2831:16;2824:59;2934:3;2923:9;2919:19;2906:33;2892:47;;2962:2;2954:6;2951:14;2948:34;;;2978:1;2975;2968:12;2948:34;;3016:45;3057:3;3048:6;3037:9;3033:22;3016:45;:::i;:::-;3010:3;3002:6;2998:16;2991:71;;;2036:1032;;;;:::o;3073:1175::-;3275:6;3283;3291;3299;3307;3351:9;3342:7;3338:23;3381:3;3377:2;3373:12;3370:32;;;3398:1;3395;3388:12;3370:32;3438:9;3425:23;3467:18;3508:2;3500:6;3497:14;3494:34;;;3524:1;3521;3514:12;3494:34;3547:72;3611:7;3602:6;3591:9;3587:22;3547:72;:::i;:::-;3537:82;;3666:2;3655:9;3651:18;3638:32;3628:42;;3763:3;3694:66;3690:2;3686:75;3682:85;3679:105;;;3780:1;3777;3770:12;3679:105;3818:2;3807:9;3803:18;3793:28;;3874:3;3863:9;3859:19;3846:33;3830:49;;3904:2;3894:8;3891:16;3888:36;;;3920:1;3917;3910:12;3888:36;3958:8;3947:9;3943:24;3933:34;;4005:7;3998:4;3994:2;3990:13;3986:27;3976:55;;4027:1;4024;4017:12;3976:55;4067:2;4054:16;4040:30;;4093:2;4085:6;4082:14;4079:34;;;4109:1;4106;4099:12;4079:34;;4162:7;4157:2;4147:6;4144:1;4140:14;4136:2;4132:23;4128:32;4125:45;4122:65;;;4183:1;4180;4173:12;4122:65;3073:1175;;;;-1:-1:-1;3073:1175:357;;-1:-1:-1;;;4214:2:357;4206:11;;4236:6;3073:1175::o;4253:258::-;4325:1;4335:113;4349:6;4346:1;4343:13;4335:113;;;4425:11;;;4419:18;4406:11;;;4399:39;4371:2;4364:10;4335:113;;;4466:6;4463:1;4460:13;4457:48;;;-1:-1:-1;;4501:1:357;4483:16;;4476:27;4253:258::o;4516:317::-;4558:3;4596:5;4590:12;4623:6;4618:3;4611:19;4639:63;4695:6;4688:4;4683:3;4679:14;4672:4;4665:5;4661:16;4639:63;:::i;:::-;4747:2;4735:15;4752:66;4731:88;4722:98;;;;4822:4;4718:109;;4516:317;-1:-1:-1;;4516:317:357:o;4838:220::-;4987:2;4976:9;4969:21;4950:4;5007:45;5048:2;5037:9;5033:18;5025:6;5007:45;:::i;5255:180::-;5314:6;5367:2;5355:9;5346:7;5342:23;5338:32;5335:52;;;5383:1;5380;5373:12;5335:52;-1:-1:-1;5406:23:357;;5255:180;-1:-1:-1;5255:180:357:o;5440:375::-;5540:6;5593:2;5581:9;5572:7;5568:23;5564:32;5561:52;;;5609:1;5606;5599:12;5561:52;5649:9;5636:23;5682:18;5674:6;5671:30;5668:50;;;5714:1;5711;5704:12;5668:50;5737:72;5801:7;5792:6;5781:9;5777:22;5737:72;:::i;:::-;5727:82;5440:375;-1:-1:-1;;;;5440:375:357:o;6260:171::-;6327:20;;6387:18;6376:30;;6366:41;;6356:69;;6421:1;6418;6411:12;6356:69;6260:171;;;:::o;6436:184::-;6494:6;6547:2;6535:9;6526:7;6522:23;6518:32;6515:52;;;6563:1;6560;6553:12;6515:52;6586:28;6604:9;6586:28;:::i;6830:601::-;6979:6;6987;6995;7048:2;7036:9;7027:7;7023:23;7019:32;7016:52;;;7064:1;7061;7054:12;7016:52;7103:9;7090:23;7122:31;7147:5;7122:31;:::i;:::-;7172:5;-1:-1:-1;7229:2:357;7214:18;;7201:32;7242:33;7201:32;7242:33;:::i;:::-;7294:7;-1:-1:-1;7353:2:357;7338:18;;7325:32;7366:33;7325:32;7366:33;:::i;:::-;7418:7;7408:17;;;6830:601;;;;;:::o;8247:118::-;8333:5;8326:13;8319:21;8312:5;8309:32;8299:60;;8355:1;8352;8345:12;8370:732;8470:6;8478;8486;8494;8502;8555:3;8543:9;8534:7;8530:23;8526:33;8523:53;;;8572:1;8569;8562:12;8523:53;8611:9;8598:23;8630:31;8655:5;8630:31;:::i;:::-;8680:5;-1:-1:-1;8732:2:357;8717:18;;8704:32;;-1:-1:-1;8755:37:357;8788:2;8773:18;;8755:37;:::i;:::-;8745:47;;8844:2;8833:9;8829:18;8816:32;8857:30;8879:7;8857:30;:::i;:::-;8906:7;-1:-1:-1;8964:3:357;8949:19;;8936:33;8992:18;8981:30;;8978:50;;;9024:1;9021;9014:12;8978:50;9047:49;9088:7;9079:6;9068:9;9064:22;9047:49;:::i;:::-;9037:59;;;8370:732;;;;;;;;:::o;9107:642::-;9370:6;9365:3;9358:19;9407:6;9402:2;9397:3;9393:12;9386:28;9466:66;9457:6;9452:3;9448:16;9444:89;9439:2;9434:3;9430:12;9423:111;9587:6;9580:14;9573:22;9568:3;9564:32;9559:2;9554:3;9550:12;9543:54;9340:3;9626:6;9620:13;9642:60;9695:6;9690:2;9685:3;9681:12;9676:2;9668:6;9664:15;9642:60;:::i;:::-;9722:16;;;;9740:2;9718:25;;9107:642;-1:-1:-1;;;;;;9107:642:357:o;9977:251::-;10047:6;10100:2;10088:9;10079:7;10075:23;10071:32;10068:52;;;10116:1;10113;10106:12;10068:52;10148:9;10142:16;10167:31;10192:5;10167:31;:::i;10847:192::-;10926:13;;10979:34;10968:46;;10958:57;;10948:85;;11029:1;11026;11019:12;11044:617;11148:6;11201:2;11189:9;11180:7;11176:23;11172:32;11169:52;;;11217:1;11214;11207:12;11169:52;11250:2;11244:9;11292:2;11284:6;11280:15;11361:6;11349:10;11346:22;11325:18;11313:10;11310:34;11307:62;11304:88;;;11372:18;;:::i;:::-;11408:2;11401:22;11447:16;;11432:32;;11497:49;11542:2;11527:18;;11497:49;:::i;:::-;11492:2;11484:6;11480:15;11473:74;11580:49;11625:2;11614:9;11610:18;11580:49;:::i;:::-;11575:2;11563:15;;11556:74;11567:6;11044:617;-1:-1:-1;;;11044:617:357:o;11666:648::-;11760:6;11813:3;11801:9;11792:7;11788:23;11784:33;11781:53;;;11830:1;11827;11820:12;11781:53;11863:2;11857:9;11905:3;11897:6;11893:16;11975:6;11963:10;11960:22;11939:18;11927:10;11924:34;11921:62;11918:88;;;11986:18;;:::i;:::-;12026:10;12022:2;12015:22;;12074:9;12061:23;12053:6;12046:39;12146:2;12135:9;12131:18;12118:32;12113:2;12105:6;12101:15;12094:57;12212:2;12201:9;12197:18;12184:32;12179:2;12171:6;12167:15;12160:57;12278:2;12267:9;12263:18;12250:32;12245:2;12237:6;12233:15;12226:57;12302:6;12292:16;;;11666:648;;;;:::o;13811:934::-;13947:9;13981:18;14022:2;14014:6;14011:14;14008:40;;;14028:18;;:::i;:::-;14074:6;14071:1;14067:14;14100:4;14124:28;14148:2;14144;14140:11;14124:28;:::i;:::-;14186:19;;;14256:14;;;;14221:12;;;;14293:14;14282:26;;14279:46;;;14321:1;14318;14311:12;14279:46;14345:5;14359:353;14375:6;14370:3;14367:15;14359:353;;;14461:3;14448:17;14497:2;14484:11;14481:19;14478:109;;;14541:1;14570:2;14566;14559:14;14478:109;14612:57;14654:14;14640:11;14633:5;14629:23;14612:57;:::i;:::-;14600:70;;-1:-1:-1;14690:12:357;;;;14392;;14359:353;;;-1:-1:-1;14734:5:357;13811:934;-1:-1:-1;;;;;;;13811:934:357:o;15169:245::-;15236:6;15289:2;15277:9;15268:7;15264:23;15260:32;15257:52;;;15305:1;15302;15295:12;15257:52;15337:9;15331:16;15356:28;15378:5;15356:28;:::i;16270:184::-;16340:6;16393:2;16381:9;16372:7;16368:23;16364:32;16361:52;;;16409:1;16406;16399:12;16361:52;-1:-1:-1;16432:16:357;;16270:184;-1:-1:-1;16270:184:357:o;18801:::-;18853:77;18850:1;18843:88;18950:4;18947:1;18940:15;18974:4;18971:1;18964:15;18990:270;19029:7;19061:18;19106:2;19103:1;19099:10;19136:2;19133:1;19129:10;19192:3;19188:2;19184:12;19179:3;19176:21;19169:3;19162:11;19155:19;19151:47;19148:73;;;19201:18;;:::i;:::-;19241:13;;18990:270;-1:-1:-1;;;;18990:270:357:o;19265:236::-;19304:3;19332:18;19377:2;19374:1;19370:10;19407:2;19404:1;19400:10;19438:3;19434:2;19430:12;19425:3;19422:21;19419:47;;;19446:18;;:::i;:::-;19482:13;;19265:236;-1:-1:-1;;;;19265:236:357:o;20120:125::-;20160:4;20188:1;20185;20182:8;20179:34;;;20193:18;;:::i;:::-;-1:-1:-1;20230:9:357;;20120:125::o;20250:184::-;20302:77;20299:1;20292:88;20399:4;20396:1;20389:15;20423:4;20420:1;20413:15;20439:308;20478:1;20504;20494:35;;20509:18;;:::i;:::-;20626:66;20623:1;20620:73;20551:66;20548:1;20545:73;20541:153;20538:179;;;20697:18;;:::i;:::-;-1:-1:-1;20731:10:357;;20439:308::o;20752:369::-;20791:4;20827:1;20824;20820:9;20936:1;20868:66;20864:74;20861:1;20857:82;20852:2;20845:10;20841:99;20838:125;;;20943:18;;:::i;:::-;21062:1;20994:66;20990:74;20987:1;20983:82;20979:2;20975:91;20972:117;;;21069:18;;:::i;:::-;-1:-1:-1;;21106:9:357;;20752:369::o;21126:655::-;21165:7;21197:66;21289:1;21286;21282:9;21317:1;21314;21310:9;21362:1;21358:2;21354:10;21351:1;21348:17;21343:2;21339;21335:11;21331:35;21328:61;;;21369:18;;:::i;:::-;21408:66;21500:1;21497;21493:9;21547:1;21543:2;21538:11;21535:1;21531:19;21526:2;21522;21518:11;21514:37;21511:63;;;21554:18;;:::i;:::-;21600:1;21597;21593:9;21583:19;;21647:1;21643:2;21638:11;21635:1;21631:19;21626:2;21622;21618:11;21614:37;21611:63;;;21654:18;;:::i;:::-;21719:1;21715:2;21710:11;21707:1;21703:19;21698:2;21694;21690:11;21686:37;21683:63;;;21726:18;;:::i;:::-;-1:-1:-1;;;21766:9:357;;;;;21126:655;-1:-1:-1;;;21126:655:357:o;21786:367::-;21825:3;21860:1;21857;21853:9;21969:1;21901:66;21897:74;21894:1;21890:82;21885:2;21878:10;21874:99;21871:125;;;21976:18;;:::i;:::-;22095:1;22027:66;22023:74;22020:1;22016:82;22012:2;22008:91;22005:117;;;22102:18;;:::i;:::-;-1:-1:-1;;22138:9:357;;21786:367::o;22158:228::-;22198:7;22324:1;22256:66;22252:74;22249:1;22246:81;22241:1;22234:9;22227:17;22223:105;22220:131;;;22331:18;;:::i;:::-;-1:-1:-1;22371:9:357;;22158:228::o;22391:120::-;22431:1;22457;22447:35;;22462:18;;:::i;:::-;-1:-1:-1;22496:9:357;;22391:120::o;22912:656::-;23199:6;23188:9;23181:25;23162:4;23225:42;23315:2;23307:6;23303:15;23298:2;23287:9;23283:18;23276:43;23367:2;23359:6;23355:15;23350:2;23339:9;23335:18;23328:43;;23407:6;23402:2;23391:9;23387:18;23380:34;23451:6;23445:3;23434:9;23430:19;23423:35;23495:3;23489;23478:9;23474:19;23467:32;23516:46;23557:3;23546:9;23542:19;23534:6;23516:46;:::i;:::-;23508:54;22912:656;-1:-1:-1;;;;;;;;22912:656:357:o;23573:128::-;23613:3;23644:1;23640:6;23637:1;23634:13;23631:39;;;23650:18;;:::i;:::-;-1:-1:-1;23686:9:357;;23573:128::o;24118:167::-;24196:13;;24249:10;24238:22;;24228:33;;24218:61;;24275:1;24272;24265:12;24290:160;24367:13;;24420:4;24409:16;;24399:27;;24389:55;;24440:1;24437;24430:12;24455:888;24558:6;24611:3;24599:9;24590:7;24586:23;24582:33;24579:53;;;24628:1;24625;24618:12;24579:53;24661:2;24655:9;24703:3;24695:6;24691:16;24773:6;24761:10;24758:22;24737:18;24725:10;24722:34;24719:62;24716:88;;;24784:18;;:::i;:::-;24820:2;24813:22;24859:39;24888:9;24859:39;:::i;:::-;24851:6;24844:55;24932:47;24975:2;24964:9;24960:18;24932:47;:::i;:::-;24927:2;24919:6;24915:15;24908:72;25013:47;25056:2;25045:9;25041:18;25013:47;:::i;:::-;25008:2;25000:6;24996:15;24989:72;25094:48;25138:2;25127:9;25123:18;25094:48;:::i;:::-;25089:2;25081:6;25077:15;25070:73;25177:49;25221:3;25210:9;25206:19;25177:49;:::i;:::-;25171:3;25163:6;25159:16;25152:75;25261:50;25306:3;25295:9;25291:19;25261:50;:::i;:::-;25255:3;25243:16;;25236:76;25247:6;24455:888;-1:-1:-1;;;24455:888:357:o;25348:195::-;25387:3;25418:66;25411:5;25408:77;25405:103;;25488:18;;:::i;:::-;-1:-1:-1;25535:1:357;25524:13;;25348:195::o;26085:184::-;26137:77;26134:1;26127:88;26234:4;26231:1;26224:15;26258:4;26255:1;26248:15;28717:157;28747:1;28781:4;28778:1;28774:12;28805:3;28795:37;;28812:18;;:::i;:::-;28864:3;28857:4;28854:1;28850:12;28846:22;28841:27;;;28717:157;;;;:::o;28879:195::-;28917:4;28954;28951:1;28947:12;28986:4;28983:1;28979:12;29011:3;29006;29003:12;29000:38;;;29018:18;;:::i;:::-;29055:13;;;28879:195;-1:-1:-1;;;28879:195:357:o;32699:184::-;32751:77;32748:1;32741:88;32848:4;32845:1;32838:15;32872:4;32869:1;32862:15","linkReferences":{}},"methodIdentifiers":{"depositTransaction(address,uint256,uint64,bool,bytes)":"e9e05c42","donateETH()":"8b4c40b0","finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))":"8c3152e9","finalizedWithdrawals(bytes32)":"a14238e7","guardian()":"452a9320","initialize(address,address,address)":"c0c53b8b","isOutputFinalized(uint256)":"6dbffb78","l2Oracle()":"9b5f694a","l2Sender()":"9bf62d82","minimumGasLimit(uint64)":"a35d99df","params()":"cff0ab96","paused()":"5c975abb","proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])":"4870496f","provenWithdrawals(bytes32)":"e965084c","superchainConfig()":"35e80ab3","systemConfig()":"33d7e2bd","version()":"54fd4d50"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BadTarget\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasEstimation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LargeCalldata\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfGas\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SmallGasLimit\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"opaqueData\",\"type\":\"bytes\"}],\"name\":\"TransactionDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"WithdrawalFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"WithdrawalProven\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"_isCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"depositTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"donateETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Types.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"}],\"name\":\"finalizeWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"finalizedWithdrawals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guardian\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract L2OutputOracle\",\"name\":\"_l2Oracle\",\"type\":\"address\"},{\"internalType\":\"contract SystemConfig\",\"name\":\"_systemConfig\",\"type\":\"address\"},{\"internalType\":\"contract SuperchainConfig\",\"name\":\"_superchainConfig\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"}],\"name\":\"isOutputFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Oracle\",\"outputs\":[{\"internalType\":\"contract L2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_byteCount\",\"type\":\"uint64\"}],\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"prevBaseFee\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"prevBoughtGas\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"prevBlockNum\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paused_\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Types.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"latestBlockhash\",\"type\":\"bytes32\"}],\"internalType\":\"struct Types.OutputRootProof\",\"name\":\"_outputRootProof\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\"}],\"name\":\"proveWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenWithdrawals\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"timestamp\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2OutputIndex\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"superchainConfig\",\"outputs\":[{\"internalType\":\"contract SuperchainConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"systemConfig\",\"outputs\":[{\"internalType\":\"contract SystemConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"custom:proxied\":\"@title OptimismPortal\",\"events\":{\"TransactionDeposited(address,address,uint256,bytes)\":{\"params\":{\"from\":\"Address that triggered the deposit transaction.\",\"opaqueData\":\"ABI encoded deposit data to be parsed off-chain.\",\"to\":\"Address that the deposit transaction is directed to.\",\"version\":\"Version of this deposit transaction event.\"}},\"WithdrawalFinalized(bytes32,bool)\":{\"params\":{\"success\":\"Whether the withdrawal transaction was successful.\",\"withdrawalHash\":\"Hash of the withdrawal transaction.\"}},\"WithdrawalProven(bytes32,address,address)\":{\"params\":{\"from\":\"Address that triggered the withdrawal transaction.\",\"to\":\"Address that the withdrawal transaction is directed to.\",\"withdrawalHash\":\"Hash of the withdrawal transaction.\"}}},\"kind\":\"dev\",\"methods\":{\"depositTransaction(address,uint256,uint64,bool,bytes)\":{\"params\":{\"_data\":\"Data to trigger the recipient with.\",\"_gasLimit\":\"Amount of L2 gas to purchase by burning gas on L1.\",\"_isCreation\":\"Whether or not the transaction is a contract creation.\",\"_to\":\"Target address on L2.\",\"_value\":\"ETH value to send to the recipient.\"}},\"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))\":{\"params\":{\"_tx\":\"Withdrawal transaction to finalize.\"}},\"guardian()\":{\"custom:legacy\":\"\",\"returns\":{\"_0\":\"Address of the guardian.\"}},\"initialize(address,address,address)\":{\"params\":{\"_l2Oracle\":\"Contract of the L2OutputOracle.\",\"_superchainConfig\":\"Contract of the SuperchainConfig.\",\"_systemConfig\":\"Contract of the SystemConfig.\"}},\"isOutputFinalized(uint256)\":{\"params\":{\"_l2OutputIndex\":\"Index of the L2 output to check.\"},\"returns\":{\"_0\":\"Whether or not the output is finalized.\"}},\"minimumGasLimit(uint64)\":{\"params\":{\"_byteCount\":\"Number of bytes in the calldata.\"},\"returns\":{\"_0\":\"The minimum gas limit for a deposit.\"}},\"paused()\":{\"returns\":{\"paused_\":\"Whether or not the contract is paused.\"}},\"proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])\":{\"params\":{\"_l2OutputIndex\":\"L2 output index to prove against.\",\"_outputRootProof\":\"Inclusion proof of the L2ToL1MessagePasser contract's storage root.\",\"_tx\":\"Withdrawal transaction to finalize.\",\"_withdrawalProof\":\"Inclusion proof of the withdrawal in L2ToL1MessagePasser contract.\"}}},\"stateVariables\":{\"l2Oracle\":{\"custom:network-specific\":\"\"},\"spacer_53_0_1\":{\"custom:legacy\":\"@custom:spacer paused\"},\"systemConfig\":{\"custom:network-specific\":\"\"},\"version\":{\"custom:semver\":\"2.6.0\"}},\"version\":1},\"userdoc\":{\"errors\":{\"BadTarget()\":[{\"notice\":\"Error for when a deposit or withdrawal is to a bad target.\"}],\"CallPaused()\":[{\"notice\":\"Error for when a method cannot be called when paused. This could be renamed to `Paused` in the future, but it collides with the `Paused` event.\"}],\"GasEstimation()\":[{\"notice\":\"Error for special gas estimation.\"}],\"LargeCalldata()\":[{\"notice\":\"Error for when a deposit has too much calldata.\"}],\"OutOfGas()\":[{\"notice\":\"Error returned when too much gas resource is consumed.\"}],\"SmallGasLimit()\":[{\"notice\":\"Error for when a deposit has too small of a gas limit.\"}]},\"events\":{\"TransactionDeposited(address,address,uint256,bytes)\":{\"notice\":\"Emitted when a transaction is deposited from L1 to L2. The parameters of this event are read by the rollup node and used to derive deposit transactions on L2.\"},\"WithdrawalFinalized(bytes32,bool)\":{\"notice\":\"Emitted when a withdrawal transaction is finalized.\"},\"WithdrawalProven(bytes32,address,address)\":{\"notice\":\"Emitted when a withdrawal transaction is proven.\"}},\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Constructs the OptimismPortal contract.\"},\"depositTransaction(address,uint256,uint64,bool,bytes)\":{\"notice\":\"Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in deriving deposit transactions. Note that if a deposit is made by a contract, its address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider using the CrossDomainMessenger contracts for a simpler developer experience.\"},\"donateETH()\":{\"notice\":\"Accepts ETH value without triggering a deposit to L2. This function mainly exists for the sake of the migration between the legacy Optimism system and Bedrock.\"},\"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))\":{\"notice\":\"Finalizes a withdrawal transaction.\"},\"finalizedWithdrawals(bytes32)\":{\"notice\":\"A list of withdrawal hashes which have been successfully finalized.\"},\"guardian()\":{\"notice\":\"Getter function for the address of the guardian. Public getter is legacy and will be removed in the future. Use `SuperchainConfig.guardian()` instead.\"},\"initialize(address,address,address)\":{\"notice\":\"Initializer.\"},\"isOutputFinalized(uint256)\":{\"notice\":\"Determine if a given output is finalized. Reverts if the call to l2Oracle.getL2Output reverts. Returns a boolean otherwise.\"},\"l2Oracle()\":{\"notice\":\"Contract of the L2OutputOracle.\"},\"l2Sender()\":{\"notice\":\"Address of the L2 account which initiated a withdrawal in this transaction. If the of this variable is the default L2 sender address, then we are NOT inside of a call to finalizeWithdrawalTransaction.\"},\"minimumGasLimit(uint64)\":{\"notice\":\"Computes the minimum gas limit for a deposit. The minimum gas limit linearly increases based on the size of the calldata. This is to prevent users from creating L2 resource usage without paying for it. This function can be used when interacting with the portal to ensure forwards compatibility.\"},\"params()\":{\"notice\":\"EIP-1559 style gas parameters.\"},\"paused()\":{\"notice\":\"Getter for the current paused status.\"},\"proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])\":{\"notice\":\"Proves a withdrawal transaction.\"},\"provenWithdrawals(bytes32)\":{\"notice\":\"A mapping of withdrawal hashes to `ProvenWithdrawal` data.\"},\"superchainConfig()\":{\"notice\":\"Contract of the Superchain Config.\"},\"systemConfig()\":{\"notice\":\"Contract of the SystemConfig.\"},\"version()\":{\"notice\":\"Semantic version.\"}},\"notice\":\"The OptimismPortal is a low-level contract responsible for passing messages between L1 and L2. Messages sent directly to the OptimismPortal have no form of replayability. Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/L1/OptimismPortal.sol\":\"OptimismPortal\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f\",\"dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929\",\"dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689\",\"dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy\"]},\"lib/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c\",\"dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8\"]},\"src/L1/L2OutputOracle.sol\":{\"keccak256\":\"0x342c5084f3c640c90530122bd78372c011d6162e698dd8c8daec9496fef01d42\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8700a3d486bd62cbb861ff80175b8040336940515791073af6a036db7c2df303\",\"dweb:/ipfs/QmSGKTH84rVHWgMg4d6GQZCmCJ16KuUuTsMwPMDdJxCsww\"]},\"src/L1/OptimismPortal.sol\":{\"keccak256\":\"0xf46a1158e86edcbb157d0b06a32db37867c0bc9d2aeeed6a8110547c7537201a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0aeb33d425db200953063e3576403b78c50e3a5e7b4f56ef4bead28919406ee2\",\"dweb:/ipfs/QmUFb1rEQnCFrGRZQPHgFFWJQ48SR7wodiSFLgQKu8Jx6k\"]},\"src/L1/ResourceMetering.sol\":{\"keccak256\":\"0xde3ac62c60f27a3f1ba06eec94f4eda45e7ec5544c6a5d6b79543a7184e44408\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://265a2845c4ff0d9076dd0505755cf2bdf799f4fdc09ef016865a26b51f5c3409\",\"dweb:/ipfs/QmRzSdBD8jmQf3U9u2ATRAzzuyo6c5ugz8VA5ZM4vzoGiM\"]},\"src/L1/SuperchainConfig.sol\":{\"keccak256\":\"0x5fab874f980fe3e52c3398ddd25b655c56af0c98c15588b2ad9ebf30671d859d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4e0aa613d38eceb621f8569fc714f521bc1f2df3d029552186ab3cdf2ee5d53f\",\"dweb:/ipfs/QmZDzFxhTXLW79eohQbr1nghNh3oNC4CUfH7uMX8CsjVAB\"]},\"src/L1/SystemConfig.sol\":{\"keccak256\":\"0xc3d6392cbc44e38ddc93b84b82b08ab8e813df771a48926db3f94edde8f2b64a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d326d644dc59a57a71f4ff6eaa5c6d1464697c7df337b641fe82091b9050e6ce\",\"dweb:/ipfs/Qmd6tNzBmm8V4cpcMNyFWbWnKPNMRoysmmA62rZjGqpg7f\"]},\"src/libraries/Arithmetic.sol\":{\"keccak256\":\"0x91345e053584f82ad04d682ba821cf3ede808304f5b2a88116a894cf692c21db\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://005e3c42d2edfca0a506cbda94d3b0104eddf20c00bd1bd25272f53f2ef74c72\",\"dweb:/ipfs/QmdaW6Nge6NKoGvFqRpQjBpM2fXpc5y8WpZyBnDnKicdJq\"]},\"src/libraries/Burn.sol\":{\"keccak256\":\"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f\",\"dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb\"]},\"src/libraries/Bytes.sol\":{\"keccak256\":\"0x827f47d123b0fdf3b08816d5b33831811704dbf4e554e53f2269354f6bba8859\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3137ac7204d30a245a8b0d67aa6da5286f1bd8c90379daab561f84963b6db782\",\"dweb:/ipfs/QmWRhisw3axJK833gUScs23ETh2MLFbVzzqzYVMKSDN3S9\"]},\"src/libraries/Constants.sol\":{\"keccak256\":\"0xe0aeec7d6e5d1e44a11405d3b5bfc384ea092c39bea0b763ab937a26fd427132\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11aa3bff9da26ca2545132ec7994866690446a5321023811c254410d9593bd9b\",\"dweb:/ipfs/QmVxWqadxvdfkqdrhfWisDqeAthibn4HEE1P6o9aFxXLhp\"]},\"src/libraries/Encoding.sol\":{\"keccak256\":\"0x1dafabcbd4877c7abe9698957b0a44b7e911cb8b11c1437a4ed897135669fa87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6addfacefa26fdb44f56d73fa0172b97740de75629a962905ec2a20a28d40fff\",\"dweb:/ipfs/QmboHMouqU19Rnbqrfo1gkfnuDBFcPiC9wsKgGtF2W1cNA\"]},\"src/libraries/Hashing.sol\":{\"keccak256\":\"0x89c07a0ca102cbe57b4e082543f2dd6dae0e1fd4a87908a334bd076fc914e7b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://69c83489c9544ab442dc244c2feb2c6811b726a5eb5a509b97fc5ccb90b98c12\",\"dweb:/ipfs/QmPGGJeLasc1HWHzd6odvWcNvFPQrbYtDubZcv8yp1HLtF\"]},\"src/libraries/PortalErrors.sol\":{\"keccak256\":\"0x57adcaa45a1ce9c5af04d0fe4ecbc86e6ff3f947f7957ab55bdade129adcf558\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf485f11085ad6d1ba1386fdb340f65eb1048187692ad3d9eb8816e290140c1\",\"dweb:/ipfs/Qmb423b45TLV8PdhFa8Hs72eom5D2C5q4gVcYGNzDh4EMU\"]},\"src/libraries/SafeCall.sol\":{\"keccak256\":\"0x0636a7abb242bb5d6f5606967c8929e6aa7e63468c1e2ce40ad4780d4c4bf94f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4daec2ac8f9907bbf84ef0a1c48f03bae8657619bc6f42b3a672f25c516f17a\",\"dweb:/ipfs/Qmf8gfRxBv8gEmCkP8YMPb2GGfj9QUnoNUyKE7UR2SWGnq\"]},\"src/libraries/Storage.sol\":{\"keccak256\":\"0x7ce27a05552aa69afa6b2ab6684dfe99f27366cf8ef2046baeb1fb62fff0022f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6a24f3ed56681720707a5ab0372fd67fcb1a4f6fb072c7140cda28bdb70f269\",\"dweb:/ipfs/QmW9uTpUULV4xmP7A7MoBDeDhVfQgmJG5qVUFGtXxWpWWK\"]},\"src/libraries/Types.sol\":{\"keccak256\":\"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e\",\"dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc\"]},\"src/libraries/rlp/RLPReader.sol\":{\"keccak256\":\"0x99731a39bc10203719d448117b0e6ef47771890440d595d118084d7988d59afb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1dbeb75d0cc8de58350cc15df8867bf97d8492e0617b1c62733ace6155c6915a\",\"dweb:/ipfs/QmNiXzskPE72h93F8EXT8wAXKzEh2EERLbubdVMfwTQbtj\"]},\"src/libraries/rlp/RLPWriter.sol\":{\"keccak256\":\"0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b\",\"dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV\"]},\"src/libraries/trie/MerkleTrie.sol\":{\"keccak256\":\"0xf8ba770ee6666e73ae43184c700e9c704b2c4ace71f9e3c2227ddc11a8148b4c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4702ccee1fe44aea3ee01d59e6152eb755da083f786f00947fec4437c064fe74\",\"dweb:/ipfs/QmQjFj5J7hrEM1dxJjFszzW2Cs7g7eMhYNBXonF2DXBstE\"]},\"src/libraries/trie/SecureMerkleTrie.sol\":{\"keccak256\":\"0xeaff8315cfd21197bc6bc859c2decf5d4f4838c9c357c502cdf2b1eac863d288\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://79dcdcaa560aea51d138da4f5dc553a1808b6de090b2dc1629f18375edbff681\",\"dweb:/ipfs/QmbE4pUPhf5fLKW4W6cEjhQs55gEDvHmbmoBqkW1yz3bnw\"]},\"src/universal/ISemver.sol\":{\"keccak256\":\"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a\",\"dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR\"]},\"src/vendor/AddressAliasHelper.sol\":{\"keccak256\":\"0x6ecb83b4ec80fbe49c22f4f95d90482de64660ef5d422a19f4d4b04df31c1237\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1d0885be6e473962f9a0622176a22300165ac0cc1a1d7f2e22b11c3d656ace88\",\"dweb:/ipfs/QmPRa3KmRpXW5P9ykveKRDgYN5zYo4cYLAYSnoqHX3KnXR\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.15+commit.e14f2714"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"BadTarget"},{"inputs":[],"type":"error","name":"CallPaused"},{"inputs":[],"type":"error","name":"GasEstimation"},{"inputs":[],"type":"error","name":"LargeCalldata"},{"inputs":[],"type":"error","name":"OutOfGas"},{"inputs":[],"type":"error","name":"SmallGasLimit"},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"version","type":"uint256","indexed":true},{"internalType":"bytes","name":"opaqueData","type":"bytes","indexed":false}],"type":"event","name":"TransactionDeposited","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"withdrawalHash","type":"bytes32","indexed":true},{"internalType":"bool","name":"success","type":"bool","indexed":false}],"type":"event","name":"WithdrawalFinalized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"withdrawalHash","type":"bytes32","indexed":true},{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true}],"type":"event","name":"WithdrawalProven","anonymous":false},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint64","name":"_gasLimit","type":"uint64"},{"internalType":"bool","name":"_isCreation","type":"bool"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"depositTransaction"},{"inputs":[],"stateMutability":"payable","type":"function","name":"donateETH"},{"inputs":[{"internalType":"struct Types.WithdrawalTransaction","name":"_tx","type":"tuple","components":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}]}],"stateMutability":"nonpayable","type":"function","name":"finalizeWithdrawalTransaction"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"finalizedWithdrawals","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"guardian","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"contract L2OutputOracle","name":"_l2Oracle","type":"address"},{"internalType":"contract SystemConfig","name":"_systemConfig","type":"address"},{"internalType":"contract SuperchainConfig","name":"_superchainConfig","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"uint256","name":"_l2OutputIndex","type":"uint256"}],"stateMutability":"view","type":"function","name":"isOutputFinalized","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"l2Oracle","outputs":[{"internalType":"contract L2OutputOracle","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"l2Sender","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint64","name":"_byteCount","type":"uint64"}],"stateMutability":"pure","type":"function","name":"minimumGasLimit","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"params","outputs":[{"internalType":"uint128","name":"prevBaseFee","type":"uint128"},{"internalType":"uint64","name":"prevBoughtGas","type":"uint64"},{"internalType":"uint64","name":"prevBlockNum","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"paused_","type":"bool"}]},{"inputs":[{"internalType":"struct Types.WithdrawalTransaction","name":"_tx","type":"tuple","components":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}]},{"internalType":"uint256","name":"_l2OutputIndex","type":"uint256"},{"internalType":"struct Types.OutputRootProof","name":"_outputRootProof","type":"tuple","components":[{"internalType":"bytes32","name":"version","type":"bytes32"},{"internalType":"bytes32","name":"stateRoot","type":"bytes32"},{"internalType":"bytes32","name":"messagePasserStorageRoot","type":"bytes32"},{"internalType":"bytes32","name":"latestBlockhash","type":"bytes32"}]},{"internalType":"bytes[]","name":"_withdrawalProof","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"proveWithdrawalTransaction"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"provenWithdrawals","outputs":[{"internalType":"bytes32","name":"outputRoot","type":"bytes32"},{"internalType":"uint128","name":"timestamp","type":"uint128"},{"internalType":"uint128","name":"l2OutputIndex","type":"uint128"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"superchainConfig","outputs":[{"internalType":"contract SuperchainConfig","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"systemConfig","outputs":[{"internalType":"contract SystemConfig","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"depositTransaction(address,uint256,uint64,bool,bytes)":{"params":{"_data":"Data to trigger the recipient with.","_gasLimit":"Amount of L2 gas to purchase by burning gas on L1.","_isCreation":"Whether or not the transaction is a contract creation.","_to":"Target address on L2.","_value":"ETH value to send to the recipient."}},"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))":{"params":{"_tx":"Withdrawal transaction to finalize."}},"guardian()":{"custom:legacy":"","returns":{"_0":"Address of the guardian."}},"initialize(address,address,address)":{"params":{"_l2Oracle":"Contract of the L2OutputOracle.","_superchainConfig":"Contract of the SuperchainConfig.","_systemConfig":"Contract of the SystemConfig."}},"isOutputFinalized(uint256)":{"params":{"_l2OutputIndex":"Index of the L2 output to check."},"returns":{"_0":"Whether or not the output is finalized."}},"minimumGasLimit(uint64)":{"params":{"_byteCount":"Number of bytes in the calldata."},"returns":{"_0":"The minimum gas limit for a deposit."}},"paused()":{"returns":{"paused_":"Whether or not the contract is paused."}},"proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])":{"params":{"_l2OutputIndex":"L2 output index to prove against.","_outputRootProof":"Inclusion proof of the L2ToL1MessagePasser contract's storage root.","_tx":"Withdrawal transaction to finalize.","_withdrawalProof":"Inclusion proof of the withdrawal in L2ToL1MessagePasser contract."}}},"version":1},"userdoc":{"kind":"user","methods":{"constructor":{"notice":"Constructs the OptimismPortal contract."},"depositTransaction(address,uint256,uint64,bool,bytes)":{"notice":"Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in deriving deposit transactions. Note that if a deposit is made by a contract, its address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider using the CrossDomainMessenger contracts for a simpler developer experience."},"donateETH()":{"notice":"Accepts ETH value without triggering a deposit to L2. This function mainly exists for the sake of the migration between the legacy Optimism system and Bedrock."},"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))":{"notice":"Finalizes a withdrawal transaction."},"finalizedWithdrawals(bytes32)":{"notice":"A list of withdrawal hashes which have been successfully finalized."},"guardian()":{"notice":"Getter function for the address of the guardian. Public getter is legacy and will be removed in the future. Use `SuperchainConfig.guardian()` instead."},"initialize(address,address,address)":{"notice":"Initializer."},"isOutputFinalized(uint256)":{"notice":"Determine if a given output is finalized. Reverts if the call to l2Oracle.getL2Output reverts. Returns a boolean otherwise."},"l2Oracle()":{"notice":"Contract of the L2OutputOracle."},"l2Sender()":{"notice":"Address of the L2 account which initiated a withdrawal in this transaction. If the of this variable is the default L2 sender address, then we are NOT inside of a call to finalizeWithdrawalTransaction."},"minimumGasLimit(uint64)":{"notice":"Computes the minimum gas limit for a deposit. The minimum gas limit linearly increases based on the size of the calldata. This is to prevent users from creating L2 resource usage without paying for it. This function can be used when interacting with the portal to ensure forwards compatibility."},"params()":{"notice":"EIP-1559 style gas parameters."},"paused()":{"notice":"Getter for the current paused status."},"proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])":{"notice":"Proves a withdrawal transaction."},"provenWithdrawals(bytes32)":{"notice":"A mapping of withdrawal hashes to `ProvenWithdrawal` data."},"superchainConfig()":{"notice":"Contract of the Superchain Config."},"systemConfig()":{"notice":"Contract of the SystemConfig."},"version()":{"notice":"Semantic version."}},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","ds-test/=lib/forge-std/lib/ds-test/src/","forge-std/=lib/forge-std/src/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/L1/OptimismPortal.sol":"OptimismPortal"},"evmVersion":"london","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888","urls":["bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a","dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e","urls":["bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497","dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3","urls":["bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4","dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149","urls":["bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c","dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66","urls":["bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f","dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10","urls":["bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487","dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0","urls":["bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929","dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7","urls":["bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689","dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy"],"license":"MIT"},"lib/solmate/src/utils/FixedPointMathLib.sol":{"keccak256":"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d","urls":["bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c","dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8"],"license":"MIT"},"src/L1/L2OutputOracle.sol":{"keccak256":"0x342c5084f3c640c90530122bd78372c011d6162e698dd8c8daec9496fef01d42","urls":["bzz-raw://8700a3d486bd62cbb861ff80175b8040336940515791073af6a036db7c2df303","dweb:/ipfs/QmSGKTH84rVHWgMg4d6GQZCmCJ16KuUuTsMwPMDdJxCsww"],"license":"MIT"},"src/L1/OptimismPortal.sol":{"keccak256":"0xf46a1158e86edcbb157d0b06a32db37867c0bc9d2aeeed6a8110547c7537201a","urls":["bzz-raw://0aeb33d425db200953063e3576403b78c50e3a5e7b4f56ef4bead28919406ee2","dweb:/ipfs/QmUFb1rEQnCFrGRZQPHgFFWJQ48SR7wodiSFLgQKu8Jx6k"],"license":"MIT"},"src/L1/ResourceMetering.sol":{"keccak256":"0xde3ac62c60f27a3f1ba06eec94f4eda45e7ec5544c6a5d6b79543a7184e44408","urls":["bzz-raw://265a2845c4ff0d9076dd0505755cf2bdf799f4fdc09ef016865a26b51f5c3409","dweb:/ipfs/QmRzSdBD8jmQf3U9u2ATRAzzuyo6c5ugz8VA5ZM4vzoGiM"],"license":"MIT"},"src/L1/SuperchainConfig.sol":{"keccak256":"0x5fab874f980fe3e52c3398ddd25b655c56af0c98c15588b2ad9ebf30671d859d","urls":["bzz-raw://4e0aa613d38eceb621f8569fc714f521bc1f2df3d029552186ab3cdf2ee5d53f","dweb:/ipfs/QmZDzFxhTXLW79eohQbr1nghNh3oNC4CUfH7uMX8CsjVAB"],"license":"MIT"},"src/L1/SystemConfig.sol":{"keccak256":"0xc3d6392cbc44e38ddc93b84b82b08ab8e813df771a48926db3f94edde8f2b64a","urls":["bzz-raw://d326d644dc59a57a71f4ff6eaa5c6d1464697c7df337b641fe82091b9050e6ce","dweb:/ipfs/Qmd6tNzBmm8V4cpcMNyFWbWnKPNMRoysmmA62rZjGqpg7f"],"license":"MIT"},"src/libraries/Arithmetic.sol":{"keccak256":"0x91345e053584f82ad04d682ba821cf3ede808304f5b2a88116a894cf692c21db","urls":["bzz-raw://005e3c42d2edfca0a506cbda94d3b0104eddf20c00bd1bd25272f53f2ef74c72","dweb:/ipfs/QmdaW6Nge6NKoGvFqRpQjBpM2fXpc5y8WpZyBnDnKicdJq"],"license":"MIT"},"src/libraries/Burn.sol":{"keccak256":"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010","urls":["bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f","dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb"],"license":"MIT"},"src/libraries/Bytes.sol":{"keccak256":"0x827f47d123b0fdf3b08816d5b33831811704dbf4e554e53f2269354f6bba8859","urls":["bzz-raw://3137ac7204d30a245a8b0d67aa6da5286f1bd8c90379daab561f84963b6db782","dweb:/ipfs/QmWRhisw3axJK833gUScs23ETh2MLFbVzzqzYVMKSDN3S9"],"license":"MIT"},"src/libraries/Constants.sol":{"keccak256":"0xe0aeec7d6e5d1e44a11405d3b5bfc384ea092c39bea0b763ab937a26fd427132","urls":["bzz-raw://11aa3bff9da26ca2545132ec7994866690446a5321023811c254410d9593bd9b","dweb:/ipfs/QmVxWqadxvdfkqdrhfWisDqeAthibn4HEE1P6o9aFxXLhp"],"license":"MIT"},"src/libraries/Encoding.sol":{"keccak256":"0x1dafabcbd4877c7abe9698957b0a44b7e911cb8b11c1437a4ed897135669fa87","urls":["bzz-raw://6addfacefa26fdb44f56d73fa0172b97740de75629a962905ec2a20a28d40fff","dweb:/ipfs/QmboHMouqU19Rnbqrfo1gkfnuDBFcPiC9wsKgGtF2W1cNA"],"license":"MIT"},"src/libraries/Hashing.sol":{"keccak256":"0x89c07a0ca102cbe57b4e082543f2dd6dae0e1fd4a87908a334bd076fc914e7b8","urls":["bzz-raw://69c83489c9544ab442dc244c2feb2c6811b726a5eb5a509b97fc5ccb90b98c12","dweb:/ipfs/QmPGGJeLasc1HWHzd6odvWcNvFPQrbYtDubZcv8yp1HLtF"],"license":"MIT"},"src/libraries/PortalErrors.sol":{"keccak256":"0x57adcaa45a1ce9c5af04d0fe4ecbc86e6ff3f947f7957ab55bdade129adcf558","urls":["bzz-raw://3cf485f11085ad6d1ba1386fdb340f65eb1048187692ad3d9eb8816e290140c1","dweb:/ipfs/Qmb423b45TLV8PdhFa8Hs72eom5D2C5q4gVcYGNzDh4EMU"],"license":"MIT"},"src/libraries/SafeCall.sol":{"keccak256":"0x0636a7abb242bb5d6f5606967c8929e6aa7e63468c1e2ce40ad4780d4c4bf94f","urls":["bzz-raw://a4daec2ac8f9907bbf84ef0a1c48f03bae8657619bc6f42b3a672f25c516f17a","dweb:/ipfs/Qmf8gfRxBv8gEmCkP8YMPb2GGfj9QUnoNUyKE7UR2SWGnq"],"license":"MIT"},"src/libraries/Storage.sol":{"keccak256":"0x7ce27a05552aa69afa6b2ab6684dfe99f27366cf8ef2046baeb1fb62fff0022f","urls":["bzz-raw://a6a24f3ed56681720707a5ab0372fd67fcb1a4f6fb072c7140cda28bdb70f269","dweb:/ipfs/QmW9uTpUULV4xmP7A7MoBDeDhVfQgmJG5qVUFGtXxWpWWK"],"license":"MIT"},"src/libraries/Types.sol":{"keccak256":"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4","urls":["bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e","dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc"],"license":"MIT"},"src/libraries/rlp/RLPReader.sol":{"keccak256":"0x99731a39bc10203719d448117b0e6ef47771890440d595d118084d7988d59afb","urls":["bzz-raw://1dbeb75d0cc8de58350cc15df8867bf97d8492e0617b1c62733ace6155c6915a","dweb:/ipfs/QmNiXzskPE72h93F8EXT8wAXKzEh2EERLbubdVMfwTQbtj"],"license":"MIT"},"src/libraries/rlp/RLPWriter.sol":{"keccak256":"0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6","urls":["bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b","dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV"],"license":"MIT"},"src/libraries/trie/MerkleTrie.sol":{"keccak256":"0xf8ba770ee6666e73ae43184c700e9c704b2c4ace71f9e3c2227ddc11a8148b4c","urls":["bzz-raw://4702ccee1fe44aea3ee01d59e6152eb755da083f786f00947fec4437c064fe74","dweb:/ipfs/QmQjFj5J7hrEM1dxJjFszzW2Cs7g7eMhYNBXonF2DXBstE"],"license":"MIT"},"src/libraries/trie/SecureMerkleTrie.sol":{"keccak256":"0xeaff8315cfd21197bc6bc859c2decf5d4f4838c9c357c502cdf2b1eac863d288","urls":["bzz-raw://79dcdcaa560aea51d138da4f5dc553a1808b6de090b2dc1629f18375edbff681","dweb:/ipfs/QmbE4pUPhf5fLKW4W6cEjhQs55gEDvHmbmoBqkW1yz3bnw"],"license":"MIT"},"src/universal/ISemver.sol":{"keccak256":"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44","urls":["bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a","dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR"],"license":"MIT"},"src/vendor/AddressAliasHelper.sol":{"keccak256":"0x6ecb83b4ec80fbe49c22f4f95d90482de64660ef5d422a19f4d4b04df31c1237","urls":["bzz-raw://1d0885be6e473962f9a0622176a22300165ac0cc1a1d7f2e22b11c3d656ace88","dweb:/ipfs/QmPRa3KmRpXW5P9ykveKRDgYN5zYo4cYLAYSnoqHX3KnXR"],"license":"Apache-2.0"}},"version":1},"storageLayout":{"storage":[{"astId":49534,"contract":"src/L1/OptimismPortal.sol:OptimismPortal","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":49537,"contract":"src/L1/OptimismPortal.sol:OptimismPortal","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":88262,"contract":"src/L1/OptimismPortal.sol:OptimismPortal","label":"params","offset":0,"slot":"1","type":"t_struct(ResourceParams)88245_storage"},{"astId":88267,"contract":"src/L1/OptimismPortal.sol:OptimismPortal","label":"__gap","offset":0,"slot":"2","type":"t_array(t_uint256)48_storage"},{"astId":86489,"contract":"src/L1/OptimismPortal.sol:OptimismPortal","label":"l2Sender","offset":0,"slot":"50","type":"t_address"},{"astId":86494,"contract":"src/L1/OptimismPortal.sol:OptimismPortal","label":"finalizedWithdrawals","offset":0,"slot":"51","type":"t_mapping(t_bytes32,t_bool)"},{"astId":86500,"contract":"src/L1/OptimismPortal.sol:OptimismPortal","label":"provenWithdrawals","offset":0,"slot":"52","type":"t_mapping(t_bytes32,t_struct(ProvenWithdrawal)86478_storage)"},{"astId":86503,"contract":"src/L1/OptimismPortal.sol:OptimismPortal","label":"spacer_53_0_1","offset":0,"slot":"53","type":"t_bool"},{"astId":86507,"contract":"src/L1/OptimismPortal.sol:OptimismPortal","label":"superchainConfig","offset":1,"slot":"53","type":"t_contract(SuperchainConfig)88793"},{"astId":86511,"contract":"src/L1/OptimismPortal.sol:OptimismPortal","label":"l2Oracle","offset":0,"slot":"54","type":"t_contract(L2OutputOracle)86435"},{"astId":86515,"contract":"src/L1/OptimismPortal.sol:OptimismPortal","label":"systemConfig","offset":0,"slot":"55","type":"t_contract(SystemConfig)89607"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)48_storage":{"encoding":"inplace","label":"uint256[48]","numberOfBytes":"1536","base":"t_uint256"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(L2OutputOracle)86435":{"encoding":"inplace","label":"contract L2OutputOracle","numberOfBytes":"20"},"t_contract(SuperchainConfig)88793":{"encoding":"inplace","label":"contract SuperchainConfig","numberOfBytes":"20"},"t_contract(SystemConfig)89607":{"encoding":"inplace","label":"contract SystemConfig","numberOfBytes":"20"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_struct(ProvenWithdrawal)86478_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct OptimismPortal.ProvenWithdrawal)","numberOfBytes":"32","value":"t_struct(ProvenWithdrawal)86478_storage"},"t_struct(ProvenWithdrawal)86478_storage":{"encoding":"inplace","label":"struct OptimismPortal.ProvenWithdrawal","numberOfBytes":"64","members":[{"astId":86473,"contract":"src/L1/OptimismPortal.sol:OptimismPortal","label":"outputRoot","offset":0,"slot":"0","type":"t_bytes32"},{"astId":86475,"contract":"src/L1/OptimismPortal.sol:OptimismPortal","label":"timestamp","offset":0,"slot":"1","type":"t_uint128"},{"astId":86477,"contract":"src/L1/OptimismPortal.sol:OptimismPortal","label":"l2OutputIndex","offset":16,"slot":"1","type":"t_uint128"}]},"t_struct(ResourceParams)88245_storage":{"encoding":"inplace","label":"struct ResourceMetering.ResourceParams","numberOfBytes":"32","members":[{"astId":88240,"contract":"src/L1/OptimismPortal.sol:OptimismPortal","label":"prevBaseFee","offset":0,"slot":"0","type":"t_uint128"},{"astId":88242,"contract":"src/L1/OptimismPortal.sol:OptimismPortal","label":"prevBoughtGas","offset":16,"slot":"0","type":"t_uint64"},{"astId":88244,"contract":"src/L1/OptimismPortal.sol:OptimismPortal","label":"prevBlockNum","offset":24,"slot":"0","type":"t_uint64"}]},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint64":{"encoding":"inplace","label":"uint64","numberOfBytes":"8"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"version":1,"kind":"user","methods":{"constructor":{"notice":"Constructs the OptimismPortal contract."},"depositTransaction(address,uint256,uint64,bool,bytes)":{"notice":"Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in deriving deposit transactions. Note that if a deposit is made by a contract, its address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider using the CrossDomainMessenger contracts for a simpler developer experience."},"donateETH()":{"notice":"Accepts ETH value without triggering a deposit to L2. This function mainly exists for the sake of the migration between the legacy Optimism system and Bedrock."},"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))":{"notice":"Finalizes a withdrawal transaction."},"finalizedWithdrawals(bytes32)":{"notice":"A list of withdrawal hashes which have been successfully finalized."},"guardian()":{"notice":"Getter function for the address of the guardian. Public getter is legacy and will be removed in the future. Use `SuperchainConfig.guardian()` instead."},"initialize(address,address,address)":{"notice":"Initializer."},"isOutputFinalized(uint256)":{"notice":"Determine if a given output is finalized. Reverts if the call to l2Oracle.getL2Output reverts. Returns a boolean otherwise."},"l2Oracle()":{"notice":"Contract of the L2OutputOracle."},"l2Sender()":{"notice":"Address of the L2 account which initiated a withdrawal in this transaction. If the of this variable is the default L2 sender address, then we are NOT inside of a call to finalizeWithdrawalTransaction."},"minimumGasLimit(uint64)":{"notice":"Computes the minimum gas limit for a deposit. The minimum gas limit linearly increases based on the size of the calldata. This is to prevent users from creating L2 resource usage without paying for it. This function can be used when interacting with the portal to ensure forwards compatibility."},"params()":{"notice":"EIP-1559 style gas parameters."},"paused()":{"notice":"Getter for the current paused status."},"proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])":{"notice":"Proves a withdrawal transaction."},"provenWithdrawals(bytes32)":{"notice":"A mapping of withdrawal hashes to `ProvenWithdrawal` data."},"superchainConfig()":{"notice":"Contract of the Superchain Config."},"systemConfig()":{"notice":"Contract of the SystemConfig."},"version()":{"notice":"Semantic version."}},"events":{"TransactionDeposited(address,address,uint256,bytes)":{"notice":"Emitted when a transaction is deposited from L1 to L2. The parameters of this event are read by the rollup node and used to derive deposit transactions on L2."},"WithdrawalFinalized(bytes32,bool)":{"notice":"Emitted when a withdrawal transaction is finalized."},"WithdrawalProven(bytes32,address,address)":{"notice":"Emitted when a withdrawal transaction is proven."}},"errors":{"BadTarget()":[{"notice":"Error for when a deposit or withdrawal is to a bad target."}],"CallPaused()":[{"notice":"Error for when a method cannot be called when paused. This could be renamed to `Paused` in the future, but it collides with the `Paused` event."}],"GasEstimation()":[{"notice":"Error for special gas estimation."}],"LargeCalldata()":[{"notice":"Error for when a deposit has too much calldata."}],"OutOfGas()":[{"notice":"Error returned when too much gas resource is consumed."}],"SmallGasLimit()":[{"notice":"Error for when a deposit has too small of a gas limit."}]},"notice":"The OptimismPortal is a low-level contract responsible for passing messages between L1 and L2. Messages sent directly to the OptimismPortal have no form of replayability. Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface."},"devdoc":{"version":1,"kind":"dev","methods":{"depositTransaction(address,uint256,uint64,bool,bytes)":{"params":{"_data":"Data to trigger the recipient with.","_gasLimit":"Amount of L2 gas to purchase by burning gas on L1.","_isCreation":"Whether or not the transaction is a contract creation.","_to":"Target address on L2.","_value":"ETH value to send to the recipient."}},"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))":{"params":{"_tx":"Withdrawal transaction to finalize."}},"guardian()":{"returns":{"_0":"Address of the guardian."}},"initialize(address,address,address)":{"params":{"_l2Oracle":"Contract of the L2OutputOracle.","_superchainConfig":"Contract of the SuperchainConfig.","_systemConfig":"Contract of the SystemConfig."}},"isOutputFinalized(uint256)":{"params":{"_l2OutputIndex":"Index of the L2 output to check."},"returns":{"_0":"Whether or not the output is finalized."}},"minimumGasLimit(uint64)":{"params":{"_byteCount":"Number of bytes in the calldata."},"returns":{"_0":"The minimum gas limit for a deposit."}},"paused()":{"returns":{"paused_":"Whether or not the contract is paused."}},"proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])":{"params":{"_l2OutputIndex":"L2 output index to prove against.","_outputRootProof":"Inclusion proof of the L2ToL1MessagePasser contract's storage root.","_tx":"Withdrawal transaction to finalize.","_withdrawalProof":"Inclusion proof of the withdrawal in L2ToL1MessagePasser contract."}}},"events":{"TransactionDeposited(address,address,uint256,bytes)":{"params":{"from":"Address that triggered the deposit transaction.","opaqueData":"ABI encoded deposit data to be parsed off-chain.","to":"Address that the deposit transaction is directed to.","version":"Version of this deposit transaction event."}},"WithdrawalFinalized(bytes32,bool)":{"params":{"success":"Whether the withdrawal transaction was successful.","withdrawalHash":"Hash of the withdrawal transaction."}},"WithdrawalProven(bytes32,address,address)":{"params":{"from":"Address that triggered the withdrawal transaction.","to":"Address that the withdrawal transaction is directed to.","withdrawalHash":"Hash of the withdrawal transaction."}}}},"ast":{"absolutePath":"src/L1/OptimismPortal.sol","id":87105,"exportedSymbols":{"AddressAliasHelper":[111913],"BadTarget":[103969],"CallPaused":[103990],"Constants":[103096],"GasEstimation":[103993],"Hashing":[103936],"ISemver":[109417],"Initializable":[49678],"L2OutputOracle":[86435],"LargeCalldata":[103972],"NoValue":[103984],"OnlyCustomGasToken":[103981],"OptimismPortal":[87104],"ResourceMetering":[88581],"SafeCall":[104213],"SecureMerkleTrie":[106033],"SmallGasLimit":[103975],"SuperchainConfig":[88793],"SystemConfig":[89607],"TransferFailed":[103978],"Types":[104349],"Unauthorized":[103987]},"nodeType":"SourceUnit","src":"32:20510:134","nodes":[{"id":86437,"nodeType":"PragmaDirective","src":"32:23:134","nodes":[],"literals":["solidity","0.8",".15"]},{"id":86439,"nodeType":"ImportDirective","src":"57:86:134","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":87105,"sourceUnit":49679,"symbolAliases":[{"foreign":{"id":86438,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49678,"src":"66:13:134","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":86441,"nodeType":"ImportDirective","src":"144:54:134","nodes":[],"absolutePath":"src/libraries/SafeCall.sol","file":"src/libraries/SafeCall.sol","nameLocation":"-1:-1:-1","scope":87105,"sourceUnit":104214,"symbolAliases":[{"foreign":{"id":86440,"name":"SafeCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104213,"src":"153:8:134","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":86443,"nodeType":"ImportDirective","src":"199:59:134","nodes":[],"absolutePath":"src/L1/L2OutputOracle.sol","file":"src/L1/L2OutputOracle.sol","nameLocation":"-1:-1:-1","scope":87105,"sourceUnit":86436,"symbolAliases":[{"foreign":{"id":86442,"name":"L2OutputOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86435,"src":"208:14:134","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":86445,"nodeType":"ImportDirective","src":"259:55:134","nodes":[],"absolutePath":"src/L1/SystemConfig.sol","file":"src/L1/SystemConfig.sol","nameLocation":"-1:-1:-1","scope":87105,"sourceUnit":89608,"symbolAliases":[{"foreign":{"id":86444,"name":"SystemConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":89607,"src":"268:12:134","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":86447,"nodeType":"ImportDirective","src":"315:63:134","nodes":[],"absolutePath":"src/L1/SuperchainConfig.sol","file":"src/L1/SuperchainConfig.sol","nameLocation":"-1:-1:-1","scope":87105,"sourceUnit":88794,"symbolAliases":[{"foreign":{"id":86446,"name":"SuperchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":88793,"src":"324:16:134","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":86449,"nodeType":"ImportDirective","src":"379:56:134","nodes":[],"absolutePath":"src/libraries/Constants.sol","file":"src/libraries/Constants.sol","nameLocation":"-1:-1:-1","scope":87105,"sourceUnit":103097,"symbolAliases":[{"foreign":{"id":86448,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103096,"src":"388:9:134","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":86451,"nodeType":"ImportDirective","src":"436:48:134","nodes":[],"absolutePath":"src/libraries/Types.sol","file":"src/libraries/Types.sol","nameLocation":"-1:-1:-1","scope":87105,"sourceUnit":104350,"symbolAliases":[{"foreign":{"id":86450,"name":"Types","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104349,"src":"445:5:134","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":86453,"nodeType":"ImportDirective","src":"485:52:134","nodes":[],"absolutePath":"src/libraries/Hashing.sol","file":"src/libraries/Hashing.sol","nameLocation":"-1:-1:-1","scope":87105,"sourceUnit":103937,"symbolAliases":[{"foreign":{"id":86452,"name":"Hashing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103936,"src":"494:7:134","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":86455,"nodeType":"ImportDirective","src":"538:75:134","nodes":[],"absolutePath":"src/libraries/trie/SecureMerkleTrie.sol","file":"src/libraries/trie/SecureMerkleTrie.sol","nameLocation":"-1:-1:-1","scope":87105,"sourceUnit":106034,"symbolAliases":[{"foreign":{"id":86454,"name":"SecureMerkleTrie","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":106033,"src":"547:16:134","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":86457,"nodeType":"ImportDirective","src":"614:71:134","nodes":[],"absolutePath":"src/vendor/AddressAliasHelper.sol","file":"src/vendor/AddressAliasHelper.sol","nameLocation":"-1:-1:-1","scope":87105,"sourceUnit":111914,"symbolAliases":[{"foreign":{"id":86456,"name":"AddressAliasHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111913,"src":"623:18:134","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":86459,"nodeType":"ImportDirective","src":"686:63:134","nodes":[],"absolutePath":"src/L1/ResourceMetering.sol","file":"src/L1/ResourceMetering.sol","nameLocation":"-1:-1:-1","scope":87105,"sourceUnit":88582,"symbolAliases":[{"foreign":{"id":86458,"name":"ResourceMetering","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":88581,"src":"695:16:134","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":86461,"nodeType":"ImportDirective","src":"750:52:134","nodes":[],"absolutePath":"src/universal/ISemver.sol","file":"src/universal/ISemver.sol","nameLocation":"-1:-1:-1","scope":87105,"sourceUnit":109418,"symbolAliases":[{"foreign":{"id":86460,"name":"ISemver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109417,"src":"759:7:134","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":86463,"nodeType":"ImportDirective","src":"803:56:134","nodes":[],"absolutePath":"src/libraries/Constants.sol","file":"src/libraries/Constants.sol","nameLocation":"-1:-1:-1","scope":87105,"sourceUnit":103097,"symbolAliases":[{"foreign":{"id":86462,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103096,"src":"812:9:134","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":86464,"nodeType":"ImportDirective","src":"860:40:134","nodes":[],"absolutePath":"src/libraries/PortalErrors.sol","file":"src/libraries/PortalErrors.sol","nameLocation":"-1:-1:-1","scope":87105,"sourceUnit":103994,"symbolAliases":[],"unitAlias":""},{"id":87104,"nodeType":"ContractDefinition","src":"1240:19301:134","nodes":[{"id":86478,"nodeType":"StructDefinition","src":"1608:117:134","nodes":[],"canonicalName":"OptimismPortal.ProvenWithdrawal","members":[{"constant":false,"id":86473,"mutability":"mutable","name":"outputRoot","nameLocation":"1650:10:134","nodeType":"VariableDeclaration","scope":86478,"src":"1642:18:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":86472,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1642:7:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":86475,"mutability":"mutable","name":"timestamp","nameLocation":"1678:9:134","nodeType":"VariableDeclaration","scope":86478,"src":"1670:17:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":86474,"name":"uint128","nodeType":"ElementaryTypeName","src":"1670:7:134","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":86477,"mutability":"mutable","name":"l2OutputIndex","nameLocation":"1705:13:134","nodeType":"VariableDeclaration","scope":86478,"src":"1697:21:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":86476,"name":"uint128","nodeType":"ElementaryTypeName","src":"1697:7:134","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"name":"ProvenWithdrawal","nameLocation":"1615:16:134","scope":87104,"visibility":"public"},{"id":86482,"nodeType":"VariableDeclaration","src":"1777:45:134","nodes":[],"constant":true,"documentation":{"id":86479,"nodeType":"StructuredDocumentation","src":"1731:41:134","text":"@notice Version of the deposit event."},"mutability":"constant","name":"DEPOSIT_VERSION","nameLocation":"1803:15:134","scope":87104,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86480,"name":"uint256","nodeType":"ElementaryTypeName","src":"1777:7:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":86481,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1821:1:134","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"internal"},{"id":86486,"nodeType":"VariableDeclaration","src":"1918:60:134","nodes":[],"constant":true,"documentation":{"id":86483,"nodeType":"StructuredDocumentation","src":"1829:84:134","text":"@notice The L2 gas limit set when eth is deposited using the receive() function."},"mutability":"constant","name":"RECEIVE_DEFAULT_GAS_LIMIT","nameLocation":"1943:25:134","scope":87104,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":86484,"name":"uint64","nodeType":"ElementaryTypeName","src":"1918:6:134","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"value":{"hexValue":"3130305f303030","id":86485,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1971:7:134","typeDescriptions":{"typeIdentifier":"t_rational_100000_by_1","typeString":"int_const 100000"},"value":"100_000"},"visibility":"internal"},{"id":86489,"nodeType":"VariableDeclaration","src":"2234:23:134","nodes":[],"constant":false,"documentation":{"id":86487,"nodeType":"StructuredDocumentation","src":"1985:244:134","text":"@notice Address of the L2 account which initiated a withdrawal in this transaction.\n If the of this variable is the default L2 sender address, then we are NOT inside of\n a call to finalizeWithdrawalTransaction."},"functionSelector":"9bf62d82","mutability":"mutable","name":"l2Sender","nameLocation":"2249:8:134","scope":87104,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":86488,"name":"address","nodeType":"ElementaryTypeName","src":"2234:7:134","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":86494,"nodeType":"VariableDeclaration","src":"2348:52:134","nodes":[],"constant":false,"documentation":{"id":86490,"nodeType":"StructuredDocumentation","src":"2264:79:134","text":"@notice A list of withdrawal hashes which have been successfully finalized."},"functionSelector":"a14238e7","mutability":"mutable","name":"finalizedWithdrawals","nameLocation":"2380:20:134","scope":87104,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"},"typeName":{"id":86493,"keyType":{"id":86491,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2356:7:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"2348:24:134","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"},"valueType":{"id":86492,"name":"bool","nodeType":"ElementaryTypeName","src":"2367:4:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"id":86500,"nodeType":"VariableDeclaration","src":"2482:61:134","nodes":[],"constant":false,"documentation":{"id":86495,"nodeType":"StructuredDocumentation","src":"2407:70:134","text":"@notice A mapping of withdrawal hashes to `ProvenWithdrawal` data."},"functionSelector":"e965084c","mutability":"mutable","name":"provenWithdrawals","nameLocation":"2526:17:134","scope":87104,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_ProvenWithdrawal_$86478_storage_$","typeString":"mapping(bytes32 => struct OptimismPortal.ProvenWithdrawal)"},"typeName":{"id":86499,"keyType":{"id":86496,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2490:7:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"2482:36:134","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_ProvenWithdrawal_$86478_storage_$","typeString":"mapping(bytes32 => struct OptimismPortal.ProvenWithdrawal)"},"valueType":{"id":86498,"nodeType":"UserDefinedTypeName","pathNode":{"id":86497,"name":"ProvenWithdrawal","nodeType":"IdentifierPath","referencedDeclaration":86478,"src":"2501:16:134"},"referencedDeclaration":86478,"src":"2501:16:134","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$86478_storage_ptr","typeString":"struct OptimismPortal.ProvenWithdrawal"}}},"visibility":"public"},{"id":86503,"nodeType":"VariableDeclaration","src":"2655:26:134","nodes":[],"constant":false,"documentation":{"id":86501,"nodeType":"StructuredDocumentation","src":"2550:100:134","text":"@custom:legacy\n @custom:spacer paused\n @notice Spacer for backwards compatibility."},"mutability":"mutable","name":"spacer_53_0_1","nameLocation":"2668:13:134","scope":87104,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":86502,"name":"bool","nodeType":"ElementaryTypeName","src":"2655:4:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"id":86507,"nodeType":"VariableDeclaration","src":"2739:40:134","nodes":[],"constant":false,"documentation":{"id":86504,"nodeType":"StructuredDocumentation","src":"2688:46:134","text":"@notice Contract of the Superchain Config."},"functionSelector":"35e80ab3","mutability":"mutable","name":"superchainConfig","nameLocation":"2763:16:134","scope":87104,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"},"typeName":{"id":86506,"nodeType":"UserDefinedTypeName","pathNode":{"id":86505,"name":"SuperchainConfig","nodeType":"IdentifierPath","referencedDeclaration":88793,"src":"2739:16:134"},"referencedDeclaration":88793,"src":"2739:16:134","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"visibility":"public"},{"id":86511,"nodeType":"VariableDeclaration","src":"2867:30:134","nodes":[],"constant":false,"documentation":{"id":86508,"nodeType":"StructuredDocumentation","src":"2786:76:134","text":"@notice Contract of the L2OutputOracle.\n @custom:network-specific"},"functionSelector":"9b5f694a","mutability":"mutable","name":"l2Oracle","nameLocation":"2889:8:134","scope":87104,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_L2OutputOracle_$86435","typeString":"contract L2OutputOracle"},"typeName":{"id":86510,"nodeType":"UserDefinedTypeName","pathNode":{"id":86509,"name":"L2OutputOracle","nodeType":"IdentifierPath","referencedDeclaration":86435,"src":"2867:14:134"},"referencedDeclaration":86435,"src":"2867:14:134","typeDescriptions":{"typeIdentifier":"t_contract$_L2OutputOracle_$86435","typeString":"contract L2OutputOracle"}},"visibility":"public"},{"id":86515,"nodeType":"VariableDeclaration","src":"2983:32:134","nodes":[],"constant":false,"documentation":{"id":86512,"nodeType":"StructuredDocumentation","src":"2904:74:134","text":"@notice Contract of the SystemConfig.\n @custom:network-specific"},"functionSelector":"33d7e2bd","mutability":"mutable","name":"systemConfig","nameLocation":"3003:12:134","scope":87104,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_SystemConfig_$89607","typeString":"contract SystemConfig"},"typeName":{"id":86514,"nodeType":"UserDefinedTypeName","pathNode":{"id":86513,"name":"SystemConfig","nodeType":"IdentifierPath","referencedDeclaration":89607,"src":"2983:12:134"},"referencedDeclaration":89607,"src":"2983:12:134","typeDescriptions":{"typeIdentifier":"t_contract$_SystemConfig_$89607","typeString":"contract SystemConfig"}},"visibility":"public"},{"id":86526,"nodeType":"EventDefinition","src":"3526:112:134","nodes":[],"anonymous":false,"documentation":{"id":86516,"nodeType":"StructuredDocumentation","src":"3022:499:134","text":"@notice Emitted when a transaction is deposited from L1 to L2.\n The parameters of this event are read by the rollup node and used to derive deposit\n transactions on L2.\n @param from Address that triggered the deposit transaction.\n @param to Address that the deposit transaction is directed to.\n @param version Version of this deposit transaction event.\n @param opaqueData ABI encoded deposit data to be parsed off-chain."},"eventSelector":"b3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32","name":"TransactionDeposited","nameLocation":"3532:20:134","parameters":{"id":86525,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86518,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"3569:4:134","nodeType":"VariableDeclaration","scope":86526,"src":"3553:20:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":86517,"name":"address","nodeType":"ElementaryTypeName","src":"3553:7:134","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":86520,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"3591:2:134","nodeType":"VariableDeclaration","scope":86526,"src":"3575:18:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":86519,"name":"address","nodeType":"ElementaryTypeName","src":"3575:7:134","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":86522,"indexed":true,"mutability":"mutable","name":"version","nameLocation":"3611:7:134","nodeType":"VariableDeclaration","scope":86526,"src":"3595:23:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86521,"name":"uint256","nodeType":"ElementaryTypeName","src":"3595:7:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":86524,"indexed":false,"mutability":"mutable","name":"opaqueData","nameLocation":"3626:10:134","nodeType":"VariableDeclaration","scope":86526,"src":"3620:16:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":86523,"name":"bytes","nodeType":"ElementaryTypeName","src":"3620:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3552:85:134"}},{"id":86535,"nodeType":"EventDefinition","src":"3942:97:134","nodes":[],"anonymous":false,"documentation":{"id":86527,"nodeType":"StructuredDocumentation","src":"3644:293:134","text":"@notice Emitted when a withdrawal transaction is proven.\n @param withdrawalHash Hash of the withdrawal transaction.\n @param from Address that triggered the withdrawal transaction.\n @param to Address that the withdrawal transaction is directed to."},"eventSelector":"67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f62","name":"WithdrawalProven","nameLocation":"3948:16:134","parameters":{"id":86534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86529,"indexed":true,"mutability":"mutable","name":"withdrawalHash","nameLocation":"3981:14:134","nodeType":"VariableDeclaration","scope":86535,"src":"3965:30:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":86528,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3965:7:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":86531,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"4013:4:134","nodeType":"VariableDeclaration","scope":86535,"src":"3997:20:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":86530,"name":"address","nodeType":"ElementaryTypeName","src":"3997:7:134","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":86533,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"4035:2:134","nodeType":"VariableDeclaration","scope":86535,"src":"4019:18:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":86532,"name":"address","nodeType":"ElementaryTypeName","src":"4019:7:134","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3964:74:134"}},{"id":86542,"nodeType":"EventDefinition","src":"4260:72:134","nodes":[],"anonymous":false,"documentation":{"id":86536,"nodeType":"StructuredDocumentation","src":"4045:210:134","text":"@notice Emitted when a withdrawal transaction is finalized.\n @param withdrawalHash Hash of the withdrawal transaction.\n @param success Whether the withdrawal transaction was successful."},"eventSelector":"db5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b","name":"WithdrawalFinalized","nameLocation":"4266:19:134","parameters":{"id":86541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86538,"indexed":true,"mutability":"mutable","name":"withdrawalHash","nameLocation":"4302:14:134","nodeType":"VariableDeclaration","scope":86542,"src":"4286:30:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":86537,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4286:7:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":86540,"indexed":false,"mutability":"mutable","name":"success","nameLocation":"4323:7:134","nodeType":"VariableDeclaration","scope":86542,"src":"4318:12:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":86539,"name":"bool","nodeType":"ElementaryTypeName","src":"4318:4:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4285:46:134"}},{"id":86553,"nodeType":"ModifierDefinition","src":"4375:86:134","nodes":[],"body":{"id":86552,"nodeType":"Block","src":"4400:61:134","nodes":[],"statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":86545,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86651,"src":"4414:6:134","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":86546,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4414:8:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":86550,"nodeType":"IfStatement","src":"4410:33:134","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":86547,"name":"CallPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103990,"src":"4431:10:134","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":86548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4431:12:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86549,"nodeType":"RevertStatement","src":"4424:19:134"}},{"id":86551,"nodeType":"PlaceholderStatement","src":"4453:1:134"}]},"documentation":{"id":86543,"nodeType":"StructuredDocumentation","src":"4338:32:134","text":"@notice Reverts when paused."},"name":"whenNotPaused","nameLocation":"4384:13:134","parameters":{"id":86544,"nodeType":"ParameterList","parameters":[],"src":"4397:2:134"},"virtual":false,"visibility":"internal"},{"id":86557,"nodeType":"VariableDeclaration","src":"4530:40:134","nodes":[],"baseFunctions":[109416],"constant":true,"documentation":{"id":86554,"nodeType":"StructuredDocumentation","src":"4467:58:134","text":"@notice Semantic version.\n @custom:semver 2.6.0"},"functionSelector":"54fd4d50","mutability":"constant","name":"version","nameLocation":"4553:7:134","scope":87104,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":86555,"name":"string","nodeType":"ElementaryTypeName","src":"4530:6:134","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"322e362e30","id":86556,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4563:7:134","typeDescriptions":{"typeIdentifier":"t_stringliteral_ad12b1ea91991aacd9b7a7ba82f559ec1ebe6024b70cee19177a7d0d7932dda1","typeString":"literal_string \"2.6.0\""},"value":"2.6.0"},"visibility":"public"},{"id":86583,"nodeType":"FunctionDefinition","src":"4633:218:134","nodes":[],"body":{"id":86582,"nodeType":"Block","src":"4647:204:134","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"hexValue":"30","id":86565,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4716:1:134","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":86564,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4708:7:134","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":86563,"name":"address","nodeType":"ElementaryTypeName","src":"4708:7:134","typeDescriptions":{}}},"id":86566,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4708:10:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":86562,"name":"L2OutputOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86435,"src":"4693:14:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_L2OutputOracle_$86435_$","typeString":"type(contract L2OutputOracle)"}},"id":86567,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4693:26:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_L2OutputOracle_$86435","typeString":"contract L2OutputOracle"}},{"arguments":[{"arguments":[{"hexValue":"30","id":86571,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4769:1:134","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":86570,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4761:7:134","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":86569,"name":"address","nodeType":"ElementaryTypeName","src":"4761:7:134","typeDescriptions":{}}},"id":86572,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4761:10:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":86568,"name":"SystemConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":89607,"src":"4748:12:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SystemConfig_$89607_$","typeString":"type(contract SystemConfig)"}},"id":86573,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4748:24:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_SystemConfig_$89607","typeString":"contract SystemConfig"}},{"arguments":[{"arguments":[{"hexValue":"30","id":86577,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4830:1:134","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":86576,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4822:7:134","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":86575,"name":"address","nodeType":"ElementaryTypeName","src":"4822:7:134","typeDescriptions":{}}},"id":86578,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4822:10:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":86574,"name":"SuperchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":88793,"src":"4805:16:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SuperchainConfig_$88793_$","typeString":"type(contract SuperchainConfig)"}},"id":86579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4805:28:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_L2OutputOracle_$86435","typeString":"contract L2OutputOracle"},{"typeIdentifier":"t_contract$_SystemConfig_$89607","typeString":"contract SystemConfig"},{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}],"id":86561,"name":"initialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86627,"src":"4657:10:134","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_L2OutputOracle_$86435_$_t_contract$_SystemConfig_$89607_$_t_contract$_SuperchainConfig_$88793_$returns$__$","typeString":"function (contract L2OutputOracle,contract SystemConfig,contract SuperchainConfig)"}},"id":86580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["_l2Oracle","_systemConfig","_superchainConfig"],"nodeType":"FunctionCall","src":"4657:187:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86581,"nodeType":"ExpressionStatement","src":"4657:187:134"}]},"documentation":{"id":86558,"nodeType":"StructuredDocumentation","src":"4577:51:134","text":"@notice Constructs the OptimismPortal contract."},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":86559,"nodeType":"ParameterList","parameters":[],"src":"4644:2:134"},"returnParameters":{"id":86560,"nodeType":"ParameterList","parameters":[],"src":"4647:0:134"},"scope":87104,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":86627,"nodeType":"FunctionDefinition","src":"5069:435:134","nodes":[],"body":{"id":86626,"nodeType":"Block","src":"5248:256:134","nodes":[],"statements":[{"expression":{"id":86600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":86598,"name":"l2Oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86511,"src":"5258:8:134","typeDescriptions":{"typeIdentifier":"t_contract$_L2OutputOracle_$86435","typeString":"contract L2OutputOracle"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":86599,"name":"_l2Oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86587,"src":"5269:9:134","typeDescriptions":{"typeIdentifier":"t_contract$_L2OutputOracle_$86435","typeString":"contract L2OutputOracle"}},"src":"5258:20:134","typeDescriptions":{"typeIdentifier":"t_contract$_L2OutputOracle_$86435","typeString":"contract L2OutputOracle"}},"id":86601,"nodeType":"ExpressionStatement","src":"5258:20:134"},{"expression":{"id":86604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":86602,"name":"systemConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86515,"src":"5288:12:134","typeDescriptions":{"typeIdentifier":"t_contract$_SystemConfig_$89607","typeString":"contract SystemConfig"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":86603,"name":"_systemConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86590,"src":"5303:13:134","typeDescriptions":{"typeIdentifier":"t_contract$_SystemConfig_$89607","typeString":"contract SystemConfig"}},"src":"5288:28:134","typeDescriptions":{"typeIdentifier":"t_contract$_SystemConfig_$89607","typeString":"contract SystemConfig"}},"id":86605,"nodeType":"ExpressionStatement","src":"5288:28:134"},{"expression":{"id":86608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":86606,"name":"superchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86507,"src":"5326:16:134","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":86607,"name":"_superchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86593,"src":"5345:17:134","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"src":"5326:36:134","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"id":86609,"nodeType":"ExpressionStatement","src":"5326:36:134"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":86615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":86610,"name":"l2Sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86489,"src":"5376:8:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":86613,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5396:1:134","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":86612,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5388:7:134","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":86611,"name":"address","nodeType":"ElementaryTypeName","src":"5388:7:134","typeDescriptions":{}}},"id":86614,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5388:10:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5376:22:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":86622,"nodeType":"IfStatement","src":"5372:91:134","trueBody":{"id":86621,"nodeType":"Block","src":"5400:63:134","statements":[{"expression":{"id":86619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":86616,"name":"l2Sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86489,"src":"5414:8:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":86617,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103096,"src":"5425:9:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$103096_$","typeString":"type(library Constants)"}},"id":86618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DEFAULT_L2_SENDER","nodeType":"MemberAccess","referencedDeclaration":103058,"src":"5425:27:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5414:38:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":86620,"nodeType":"ExpressionStatement","src":"5414:38:134"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":86623,"name":"__ResourceMetering_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":88580,"src":"5472:23:134","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":86624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5472:25:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86625,"nodeType":"ExpressionStatement","src":"5472:25:134"}]},"documentation":{"id":86584,"nodeType":"StructuredDocumentation","src":"4857:207:134","text":"@notice Initializer.\n @param _l2Oracle Contract of the L2OutputOracle.\n @param _systemConfig Contract of the SystemConfig.\n @param _superchainConfig Contract of the SuperchainConfig."},"functionSelector":"c0c53b8b","implemented":true,"kind":"function","modifiers":[{"id":86596,"kind":"modifierInvocation","modifierName":{"id":86595,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":49598,"src":"5232:11:134"},"nodeType":"ModifierInvocation","src":"5232:11:134"}],"name":"initialize","nameLocation":"5078:10:134","parameters":{"id":86594,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86587,"mutability":"mutable","name":"_l2Oracle","nameLocation":"5113:9:134","nodeType":"VariableDeclaration","scope":86627,"src":"5098:24:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_L2OutputOracle_$86435","typeString":"contract L2OutputOracle"},"typeName":{"id":86586,"nodeType":"UserDefinedTypeName","pathNode":{"id":86585,"name":"L2OutputOracle","nodeType":"IdentifierPath","referencedDeclaration":86435,"src":"5098:14:134"},"referencedDeclaration":86435,"src":"5098:14:134","typeDescriptions":{"typeIdentifier":"t_contract$_L2OutputOracle_$86435","typeString":"contract L2OutputOracle"}},"visibility":"internal"},{"constant":false,"id":86590,"mutability":"mutable","name":"_systemConfig","nameLocation":"5145:13:134","nodeType":"VariableDeclaration","scope":86627,"src":"5132:26:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_SystemConfig_$89607","typeString":"contract SystemConfig"},"typeName":{"id":86589,"nodeType":"UserDefinedTypeName","pathNode":{"id":86588,"name":"SystemConfig","nodeType":"IdentifierPath","referencedDeclaration":89607,"src":"5132:12:134"},"referencedDeclaration":89607,"src":"5132:12:134","typeDescriptions":{"typeIdentifier":"t_contract$_SystemConfig_$89607","typeString":"contract SystemConfig"}},"visibility":"internal"},{"constant":false,"id":86593,"mutability":"mutable","name":"_superchainConfig","nameLocation":"5185:17:134","nodeType":"VariableDeclaration","scope":86627,"src":"5168:34:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"},"typeName":{"id":86592,"nodeType":"UserDefinedTypeName","pathNode":{"id":86591,"name":"SuperchainConfig","nodeType":"IdentifierPath","referencedDeclaration":88793,"src":"5168:16:134"},"referencedDeclaration":88793,"src":"5168:16:134","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"visibility":"internal"}],"src":"5088:120:134"},"returnParameters":{"id":86597,"nodeType":"ParameterList","parameters":[],"src":"5248:0:134"},"scope":87104,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":86638,"nodeType":"FunctionDefinition","src":"5757:101:134","nodes":[],"body":{"id":86637,"nodeType":"Block","src":"5807:51:134","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":86633,"name":"superchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86507,"src":"5824:16:134","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"id":86634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"guardian","nodeType":"MemberAccess","referencedDeclaration":88693,"src":"5824:25:134","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":86635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5824:27:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":86632,"id":86636,"nodeType":"Return","src":"5817:34:134"}]},"documentation":{"id":86628,"nodeType":"StructuredDocumentation","src":"5510:242:134","text":"@notice Getter function for the address of the guardian.\n Public getter is legacy and will be removed in the future. Use `SuperchainConfig.guardian()` instead.\n @return Address of the guardian.\n @custom:legacy"},"functionSelector":"452a9320","implemented":true,"kind":"function","modifiers":[],"name":"guardian","nameLocation":"5766:8:134","parameters":{"id":86629,"nodeType":"ParameterList","parameters":[],"src":"5774:2:134"},"returnParameters":{"id":86632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86631,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":86638,"src":"5798:7:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":86630,"name":"address","nodeType":"ElementaryTypeName","src":"5798:7:134","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5797:9:134"},"scope":87104,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":86651,"nodeType":"FunctionDefinition","src":"5981:105:134","nodes":[],"body":{"id":86650,"nodeType":"Block","src":"6034:52:134","nodes":[],"statements":[{"expression":{"id":86648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":86644,"name":"paused_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86642,"src":"6044:7:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":86645,"name":"superchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86507,"src":"6054:16:134","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"id":86646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"paused","nodeType":"MemberAccess","referencedDeclaration":88707,"src":"6054:23:134","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bool_$","typeString":"function () view external returns (bool)"}},"id":86647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6054:25:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6044:35:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":86649,"nodeType":"ExpressionStatement","src":"6044:35:134"}]},"documentation":{"id":86639,"nodeType":"StructuredDocumentation","src":"5864:112:134","text":"@notice Getter for the current paused status.\n @return paused_ Whether or not the contract is paused."},"functionSelector":"5c975abb","implemented":true,"kind":"function","modifiers":[],"name":"paused","nameLocation":"5990:6:134","parameters":{"id":86640,"nodeType":"ParameterList","parameters":[],"src":"5996:2:134"},"returnParameters":{"id":86643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86642,"mutability":"mutable","name":"paused_","nameLocation":"6025:7:134","nodeType":"VariableDeclaration","scope":86651,"src":"6020:12:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":86641,"name":"bool","nodeType":"ElementaryTypeName","src":"6020:4:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6019:14:134"},"scope":87104,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":86666,"nodeType":"FunctionDefinition","src":"6579:120:134","nodes":[],"body":{"id":86665,"nodeType":"Block","src":"6652:47:134","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":86663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":86661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":86659,"name":"_byteCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86654,"src":"6669:10:134","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3136","id":86660,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6682:2:134","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"6669:15:134","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"3231303030","id":86662,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6687:5:134","typeDescriptions":{"typeIdentifier":"t_rational_21000_by_1","typeString":"int_const 21000"},"value":"21000"},"src":"6669:23:134","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":86658,"id":86664,"nodeType":"Return","src":"6662:30:134"}]},"documentation":{"id":86652,"nodeType":"StructuredDocumentation","src":"6092:482:134","text":"@notice Computes the minimum gas limit for a deposit.\n The minimum gas limit linearly increases based on the size of the calldata.\n This is to prevent users from creating L2 resource usage without paying for it.\n This function can be used when interacting with the portal to ensure forwards\n compatibility.\n @param _byteCount Number of bytes in the calldata.\n @return The minimum gas limit for a deposit."},"functionSelector":"a35d99df","implemented":true,"kind":"function","modifiers":[],"name":"minimumGasLimit","nameLocation":"6588:15:134","parameters":{"id":86655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86654,"mutability":"mutable","name":"_byteCount","nameLocation":"6611:10:134","nodeType":"VariableDeclaration","scope":86666,"src":"6604:17:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":86653,"name":"uint64","nodeType":"ElementaryTypeName","src":"6604:6:134","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"6603:19:134"},"returnParameters":{"id":86658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86657,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":86666,"src":"6644:6:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":86656,"name":"uint64","nodeType":"ElementaryTypeName","src":"6644:6:134","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"6643:8:134"},"scope":87104,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":86684,"nodeType":"FunctionDefinition","src":"7078:130:134","nodes":[],"body":{"id":86683,"nodeType":"Block","src":"7105:103:134","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":86671,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7134:3:134","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":86672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"7134:10:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":86673,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7146:3:134","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":86674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"7146:9:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":86675,"name":"RECEIVE_DEFAULT_GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86486,"src":"7157:25:134","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"hexValue":"66616c7365","id":86676,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7184:5:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"arguments":[{"hexValue":"","id":86679,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7197:2:134","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":86678,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7191:5:134","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":86677,"name":"bytes","nodeType":"ElementaryTypeName","src":"7191:5:134","typeDescriptions":{}}},"id":86680,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7191:9:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":86670,"name":"depositTransaction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87068,"src":"7115:18:134","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint64_$_t_bool_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,uint256,uint64,bool,bytes memory)"}},"id":86681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7115:86:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86682,"nodeType":"ExpressionStatement","src":"7115:86:134"}]},"documentation":{"id":86667,"nodeType":"StructuredDocumentation","src":"6705:368:134","text":"@notice Accepts value so that users can send ETH directly to this contract and have the\n funds be deposited to their address on L2. This is intended as a convenience\n function for EOAs. Contracts should call the depositTransaction() function directly\n otherwise any deposited funds will be lost due to address aliasing."},"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":86668,"nodeType":"ParameterList","parameters":[],"src":"7085:2:134"},"returnParameters":{"id":86669,"nodeType":"ParameterList","parameters":[],"src":"7105:0:134"},"scope":87104,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":86689,"nodeType":"FunctionDefinition","src":"7422:77:134","nodes":[],"body":{"id":86688,"nodeType":"Block","src":"7460:39:134","nodes":[],"statements":[]},"documentation":{"id":86685,"nodeType":"StructuredDocumentation","src":"7214:203:134","text":"@notice Accepts ETH value without triggering a deposit to L2.\n This function mainly exists for the sake of the migration between the legacy\n Optimism system and Bedrock."},"functionSelector":"8b4c40b0","implemented":true,"kind":"function","modifiers":[],"name":"donateETH","nameLocation":"7431:9:134","parameters":{"id":86686,"nodeType":"ParameterList","parameters":[],"src":"7440:2:134"},"returnParameters":{"id":86687,"nodeType":"ParameterList","parameters":[],"src":"7460:0:134"},"scope":87104,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":86702,"nodeType":"FunctionDefinition","src":"7748:152:134","nodes":[],"body":{"id":86701,"nodeType":"Block","src":"7847:53:134","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":86697,"name":"systemConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86515,"src":"7864:12:134","typeDescriptions":{"typeIdentifier":"t_contract$_SystemConfig_$89607","typeString":"contract SystemConfig"}},"id":86698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"resourceConfig","nodeType":"MemberAccess","referencedDeclaration":89527,"src":"7864:27:134","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_struct$_ResourceConfig_$88258_memory_ptr_$","typeString":"function () view external returns (struct ResourceMetering.ResourceConfig memory)"}},"id":86699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7864:29:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ResourceConfig_$88258_memory_ptr","typeString":"struct ResourceMetering.ResourceConfig memory"}},"functionReturnParameters":86696,"id":86700,"nodeType":"Return","src":"7857:36:134"}]},"baseFunctions":[88555],"documentation":{"id":86690,"nodeType":"StructuredDocumentation","src":"7505:238:134","text":"@notice Getter for the resource config.\n Used internally by the ResourceMetering contract.\n The SystemConfig is the source of truth for the resource config.\n @return ResourceMetering ResourceConfig"},"implemented":true,"kind":"function","modifiers":[],"name":"_resourceConfig","nameLocation":"7757:15:134","overrides":{"id":86692,"nodeType":"OverrideSpecifier","overrides":[],"src":"7789:8:134"},"parameters":{"id":86691,"nodeType":"ParameterList","parameters":[],"src":"7772:2:134"},"returnParameters":{"id":86696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86695,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":86702,"src":"7807:38:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ResourceConfig_$88258_memory_ptr","typeString":"struct ResourceMetering.ResourceConfig"},"typeName":{"id":86694,"nodeType":"UserDefinedTypeName","pathNode":{"id":86693,"name":"ResourceMetering.ResourceConfig","nodeType":"IdentifierPath","referencedDeclaration":88258,"src":"7807:31:134"},"referencedDeclaration":88258,"src":"7807:31:134","typeDescriptions":{"typeIdentifier":"t_struct$_ResourceConfig_$88258_storage_ptr","typeString":"struct ResourceMetering.ResourceConfig"}},"visibility":"internal"}],"src":"7806:40:134"},"scope":87104,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":86834,"nodeType":"FunctionDefinition","src":"8288:3825:134","nodes":[],"body":{"id":86833,"nodeType":"Block","src":"8553:3560:134","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":86726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":86720,"name":"_tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86706,"src":"8798:3:134","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}},"id":86721,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"target","nodeType":"MemberAccess","referencedDeclaration":104341,"src":"8798:10:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":86724,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8820:4:134","typeDescriptions":{"typeIdentifier":"t_contract$_OptimismPortal_$87104","typeString":"contract OptimismPortal"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_OptimismPortal_$87104","typeString":"contract OptimismPortal"}],"id":86723,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8812:7:134","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":86722,"name":"address","nodeType":"ElementaryTypeName","src":"8812:7:134","typeDescriptions":{}}},"id":86725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8812:13:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8798:27:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e64206d6573736167657320746f2074686520706f7274616c20636f6e7472616374","id":86727,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8827:65:134","typeDescriptions":{"typeIdentifier":"t_stringliteral_57e41062e2e7b97ddf730827f5249d28f602a3846dfe107ce36292fb1c029eb8","typeString":"literal_string \"OptimismPortal: you cannot send messages to the portal contract\""},"value":"OptimismPortal: you cannot send messages to the portal contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_57e41062e2e7b97ddf730827f5249d28f602a3846dfe107ce36292fb1c029eb8","typeString":"literal_string \"OptimismPortal: you cannot send messages to the portal contract\""}],"id":86719,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8790:7:134","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8790:103:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86729,"nodeType":"ExpressionStatement","src":"8790:103:134"},{"assignments":[86731],"declarations":[{"constant":false,"id":86731,"mutability":"mutable","name":"outputRoot","nameLocation":"9078:10:134","nodeType":"VariableDeclaration","scope":86833,"src":"9070:18:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":86730,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9070:7:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":86737,"initialValue":{"expression":{"arguments":[{"id":86734,"name":"_l2OutputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86708,"src":"9112:14:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":86732,"name":"l2Oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86511,"src":"9091:8:134","typeDescriptions":{"typeIdentifier":"t_contract$_L2OutputOracle_$86435","typeString":"contract L2OutputOracle"}},"id":86733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getL2Output","nodeType":"MemberAccess","referencedDeclaration":86275,"src":"9091:20:134","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_struct$_OutputProposal_$104307_memory_ptr_$","typeString":"function (uint256) view external returns (struct Types.OutputProposal memory)"}},"id":86735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9091:36:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_OutputProposal_$104307_memory_ptr","typeString":"struct Types.OutputProposal memory"}},"id":86736,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"outputRoot","nodeType":"MemberAccess","referencedDeclaration":104302,"src":"9091:47:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"9070:68:134"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":86744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":86739,"name":"outputRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86731,"src":"9258:10:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":86742,"name":"_outputRootProof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86711,"src":"9300:16:134","typeDescriptions":{"typeIdentifier":"t_struct$_OutputRootProof_$104316_calldata_ptr","typeString":"struct Types.OutputRootProof calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_OutputRootProof_$104316_calldata_ptr","typeString":"struct Types.OutputRootProof calldata"}],"expression":{"id":86740,"name":"Hashing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103936,"src":"9272:7:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Hashing_$103936_$","typeString":"type(library Hashing)"}},"id":86741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"hashOutputRootProof","nodeType":"MemberAccess","referencedDeclaration":103935,"src":"9272:27:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_OutputRootProof_$104316_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct Types.OutputRootProof memory) pure returns (bytes32)"}},"id":86743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9272:45:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"9258:59:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a20696e76616c6964206f757470757420726f6f742070726f6f66","id":86745,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9319:43:134","typeDescriptions":{"typeIdentifier":"t_stringliteral_490ec653897228799e7e4c4af8b1fd3b4a0688df98d026b46afa352ce9876996","typeString":"literal_string \"OptimismPortal: invalid output root proof\""},"value":"OptimismPortal: invalid output root proof"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_490ec653897228799e7e4c4af8b1fd3b4a0688df98d026b46afa352ce9876996","typeString":"literal_string \"OptimismPortal: invalid output root proof\""}],"id":86738,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9237:7:134","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9237:135:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86747,"nodeType":"ExpressionStatement","src":"9237:135:134"},{"assignments":[86749],"declarations":[{"constant":false,"id":86749,"mutability":"mutable","name":"withdrawalHash","nameLocation":"9491:14:134","nodeType":"VariableDeclaration","scope":86833,"src":"9483:22:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":86748,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9483:7:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":86754,"initialValue":{"arguments":[{"id":86752,"name":"_tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86706,"src":"9531:3:134","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}],"expression":{"id":86750,"name":"Hashing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103936,"src":"9508:7:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Hashing_$103936_$","typeString":"type(library Hashing)"}},"id":86751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"hashWithdrawal","nodeType":"MemberAccess","referencedDeclaration":103911,"src":"9508:22:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_WithdrawalTransaction_$104348_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct Types.WithdrawalTransaction memory) pure returns (bytes32)"}},"id":86753,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9508:27:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"9483:52:134"},{"assignments":[86757],"declarations":[{"constant":false,"id":86757,"mutability":"mutable","name":"provenWithdrawal","nameLocation":"9569:16:134","nodeType":"VariableDeclaration","scope":86833,"src":"9545:40:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$86478_memory_ptr","typeString":"struct OptimismPortal.ProvenWithdrawal"},"typeName":{"id":86756,"nodeType":"UserDefinedTypeName","pathNode":{"id":86755,"name":"ProvenWithdrawal","nodeType":"IdentifierPath","referencedDeclaration":86478,"src":"9545:16:134"},"referencedDeclaration":86478,"src":"9545:16:134","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$86478_storage_ptr","typeString":"struct OptimismPortal.ProvenWithdrawal"}},"visibility":"internal"}],"id":86761,"initialValue":{"baseExpression":{"id":86758,"name":"provenWithdrawals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86500,"src":"9588:17:134","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_ProvenWithdrawal_$86478_storage_$","typeString":"mapping(bytes32 => struct OptimismPortal.ProvenWithdrawal storage ref)"}},"id":86760,"indexExpression":{"id":86759,"name":"withdrawalHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86749,"src":"9606:14:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9588:33:134","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$86478_storage","typeString":"struct OptimismPortal.ProvenWithdrawal storage ref"}},"nodeType":"VariableDeclarationStatement","src":"9545:76:134"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":86776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":86766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":86763,"name":"provenWithdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86757,"src":"10175:16:134","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$86478_memory_ptr","typeString":"struct OptimismPortal.ProvenWithdrawal memory"}},"id":86764,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":86475,"src":"10175:26:134","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":86765,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10205:1:134","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10175:31:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":86775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"expression":{"id":86769,"name":"provenWithdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86757,"src":"10247:16:134","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$86478_memory_ptr","typeString":"struct OptimismPortal.ProvenWithdrawal memory"}},"id":86770,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"l2OutputIndex","nodeType":"MemberAccess","referencedDeclaration":86477,"src":"10247:30:134","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":86767,"name":"l2Oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86511,"src":"10226:8:134","typeDescriptions":{"typeIdentifier":"t_contract$_L2OutputOracle_$86435","typeString":"contract L2OutputOracle"}},"id":86768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getL2Output","nodeType":"MemberAccess","referencedDeclaration":86275,"src":"10226:20:134","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_struct$_OutputProposal_$104307_memory_ptr_$","typeString":"function (uint256) view external returns (struct Types.OutputProposal memory)"}},"id":86771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10226:52:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_OutputProposal_$104307_memory_ptr","typeString":"struct Types.OutputProposal memory"}},"id":86772,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"outputRoot","nodeType":"MemberAccess","referencedDeclaration":104302,"src":"10226:63:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":86773,"name":"provenWithdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86757,"src":"10293:16:134","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$86478_memory_ptr","typeString":"struct OptimismPortal.ProvenWithdrawal memory"}},"id":86774,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"outputRoot","nodeType":"MemberAccess","referencedDeclaration":86473,"src":"10293:27:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"10226:94:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10175:145:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a207769746864726177616c20686173682068617320616c7265616479206265656e2070726f76656e","id":86777,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10334:57:134","typeDescriptions":{"typeIdentifier":"t_stringliteral_5238e365e021f6fd781c2264a5a09100f0670031b56dacfc224b453789ac1dd0","typeString":"literal_string \"OptimismPortal: withdrawal hash has already been proven\""},"value":"OptimismPortal: withdrawal hash has already been proven"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5238e365e021f6fd781c2264a5a09100f0670031b56dacfc224b453789ac1dd0","typeString":"literal_string \"OptimismPortal: withdrawal hash has already been proven\""}],"id":86762,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10154:7:134","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10154:247:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86779,"nodeType":"ExpressionStatement","src":"10154:247:134"},{"assignments":[86781],"declarations":[{"constant":false,"id":86781,"mutability":"mutable","name":"storageKey","nameLocation":"10645:10:134","nodeType":"VariableDeclaration","scope":86833,"src":"10637:18:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":86780,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10637:7:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":86792,"initialValue":{"arguments":[{"arguments":[{"id":86785,"name":"withdrawalHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86749,"src":"10709:14:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"hexValue":"30","id":86788,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10749:1:134","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":86787,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10741:7:134","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":86786,"name":"uint256","nodeType":"ElementaryTypeName","src":"10741:7:134","typeDescriptions":{}}},"id":86789,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10741:10:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":86783,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"10681:3:134","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":86784,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"10681:10:134","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":86790,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10681:147:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":86782,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"10658:9:134","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":86791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10658:180:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"10637:201:134"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":86798,"name":"storageKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86781,"src":"11264:10:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":86796,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"11253:3:134","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":86797,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"11253:10:134","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":86799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11253:22:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"01","id":86800,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"11301:7:134","typeDescriptions":{"typeIdentifier":"t_stringliteral_5fe7f977e71dba2ea1a68e21057beebb9be2ac30c6410aa38d4f3fbe41dcffd2","typeString":"literal_string hex\"01\""},"value":"\u0001"},{"id":86801,"name":"_withdrawalProof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86714,"src":"11334:16:134","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},{"expression":{"id":86802,"name":"_outputRootProof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86711,"src":"11375:16:134","typeDescriptions":{"typeIdentifier":"t_struct$_OutputRootProof_$104316_calldata_ptr","typeString":"struct Types.OutputRootProof calldata"}},"id":86803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"messagePasserStorageRoot","nodeType":"MemberAccess","referencedDeclaration":104313,"src":"11375:41:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_5fe7f977e71dba2ea1a68e21057beebb9be2ac30c6410aa38d4f3fbe41dcffd2","typeString":"literal_string hex\"01\""},{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":86794,"name":"SecureMerkleTrie","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":106033,"src":"11191:16:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SecureMerkleTrie_$106033_$","typeString":"type(library SecureMerkleTrie)"}},"id":86795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"verifyInclusionProof","nodeType":"MemberAccess","referencedDeclaration":105985,"src":"11191:37:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes memory,bytes memory,bytes memory[] memory,bytes32) pure returns (bool)"}},"id":86804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["_key","_value","_proof","_root"],"nodeType":"FunctionCall","src":"11191:240:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a20696e76616c6964207769746864726177616c20696e636c7573696f6e2070726f6f66","id":86805,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11445:52:134","typeDescriptions":{"typeIdentifier":"t_stringliteral_11b666636981dad70da1c1a9e87589eb7d9c042eacd4d25e887aac557f6cd6b9","typeString":"literal_string \"OptimismPortal: invalid withdrawal inclusion proof\""},"value":"OptimismPortal: invalid withdrawal inclusion proof"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_11b666636981dad70da1c1a9e87589eb7d9c042eacd4d25e887aac557f6cd6b9","typeString":"literal_string \"OptimismPortal: invalid withdrawal inclusion proof\""}],"id":86793,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11170:7:134","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11170:337:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86807,"nodeType":"ExpressionStatement","src":"11170:337:134"},{"expression":{"id":86823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":86808,"name":"provenWithdrawals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86500,"src":"11789:17:134","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_ProvenWithdrawal_$86478_storage_$","typeString":"mapping(bytes32 => struct OptimismPortal.ProvenWithdrawal storage ref)"}},"id":86810,"indexExpression":{"id":86809,"name":"withdrawalHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86749,"src":"11807:14:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11789:33:134","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$86478_storage","typeString":"struct OptimismPortal.ProvenWithdrawal storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":86812,"name":"outputRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86731,"src":"11868:10:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"expression":{"id":86815,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"11911:5:134","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":86816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"11911:15:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":86814,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11903:7:134","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":86813,"name":"uint128","nodeType":"ElementaryTypeName","src":"11903:7:134","typeDescriptions":{}}},"id":86817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11903:24:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"arguments":[{"id":86820,"name":"_l2OutputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86708,"src":"11964:14:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":86819,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11956:7:134","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":86818,"name":"uint128","nodeType":"ElementaryTypeName","src":"11956:7:134","typeDescriptions":{}}},"id":86821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11956:23:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":86811,"name":"ProvenWithdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86478,"src":"11825:16:134","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ProvenWithdrawal_$86478_storage_ptr_$","typeString":"type(struct OptimismPortal.ProvenWithdrawal storage pointer)"}},"id":86822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["outputRoot","timestamp","l2OutputIndex"],"nodeType":"FunctionCall","src":"11825:165:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$86478_memory_ptr","typeString":"struct OptimismPortal.ProvenWithdrawal memory"}},"src":"11789:201:134","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$86478_storage","typeString":"struct OptimismPortal.ProvenWithdrawal storage ref"}},"id":86824,"nodeType":"ExpressionStatement","src":"11789:201:134"},{"eventCall":{"arguments":[{"id":86826,"name":"withdrawalHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86749,"src":"12067:14:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":86827,"name":"_tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86706,"src":"12083:3:134","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}},"id":86828,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":104339,"src":"12083:10:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":86829,"name":"_tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86706,"src":"12095:3:134","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}},"id":86830,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"target","nodeType":"MemberAccess","referencedDeclaration":104341,"src":"12095:10:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":86825,"name":"WithdrawalProven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86535,"src":"12050:16:134","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$","typeString":"function (bytes32,address,address)"}},"id":86831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12050:56:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86832,"nodeType":"EmitStatement","src":"12045:61:134"}]},"documentation":{"id":86703,"nodeType":"StructuredDocumentation","src":"7906:377:134","text":"@notice Proves a withdrawal transaction.\n @param _tx Withdrawal transaction to finalize.\n @param _l2OutputIndex L2 output index to prove against.\n @param _outputRootProof Inclusion proof of the L2ToL1MessagePasser contract's storage root.\n @param _withdrawalProof Inclusion proof of the withdrawal in L2ToL1MessagePasser contract."},"functionSelector":"4870496f","implemented":true,"kind":"function","modifiers":[{"id":86717,"kind":"modifierInvocation","modifierName":{"id":86716,"name":"whenNotPaused","nodeType":"IdentifierPath","referencedDeclaration":86553,"src":"8535:13:134"},"nodeType":"ModifierInvocation","src":"8535:13:134"}],"name":"proveWithdrawalTransaction","nameLocation":"8297:26:134","parameters":{"id":86715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86706,"mutability":"mutable","name":"_tx","nameLocation":"8368:3:134","nodeType":"VariableDeclaration","scope":86834,"src":"8333:38:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction"},"typeName":{"id":86705,"nodeType":"UserDefinedTypeName","pathNode":{"id":86704,"name":"Types.WithdrawalTransaction","nodeType":"IdentifierPath","referencedDeclaration":104348,"src":"8333:27:134"},"referencedDeclaration":104348,"src":"8333:27:134","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_storage_ptr","typeString":"struct Types.WithdrawalTransaction"}},"visibility":"internal"},{"constant":false,"id":86708,"mutability":"mutable","name":"_l2OutputIndex","nameLocation":"8389:14:134","nodeType":"VariableDeclaration","scope":86834,"src":"8381:22:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86707,"name":"uint256","nodeType":"ElementaryTypeName","src":"8381:7:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":86711,"mutability":"mutable","name":"_outputRootProof","nameLocation":"8444:16:134","nodeType":"VariableDeclaration","scope":86834,"src":"8413:47:134","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_OutputRootProof_$104316_calldata_ptr","typeString":"struct Types.OutputRootProof"},"typeName":{"id":86710,"nodeType":"UserDefinedTypeName","pathNode":{"id":86709,"name":"Types.OutputRootProof","nodeType":"IdentifierPath","referencedDeclaration":104316,"src":"8413:21:134"},"referencedDeclaration":104316,"src":"8413:21:134","typeDescriptions":{"typeIdentifier":"t_struct$_OutputRootProof_$104316_storage_ptr","typeString":"struct Types.OutputRootProof"}},"visibility":"internal"},{"constant":false,"id":86714,"mutability":"mutable","name":"_withdrawalProof","nameLocation":"8487:16:134","nodeType":"VariableDeclaration","scope":86834,"src":"8470:33:134","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":86712,"name":"bytes","nodeType":"ElementaryTypeName","src":"8470:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":86713,"nodeType":"ArrayTypeName","src":"8470:7:134","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"8323:186:134"},"returnParameters":{"id":86718,"nodeType":"ParameterList","parameters":[],"src":"8553:0:134"},"scope":87104,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":86978,"nodeType":"FunctionDefinition","src":"12226:4818:134","nodes":[],"body":{"id":86977,"nodeType":"Block","src":"12328:4716:134","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":86847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":86844,"name":"l2Sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86489,"src":"12594:8:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":86845,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103096,"src":"12606:9:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$103096_$","typeString":"type(library Constants)"}},"id":86846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DEFAULT_L2_SENDER","nodeType":"MemberAccess","referencedDeclaration":103058,"src":"12606:27:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12594:39:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a2063616e206f6e6c792074726967676572206f6e65207769746864726177616c20706572207472616e73616374696f6e","id":86848,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12635:65:134","typeDescriptions":{"typeIdentifier":"t_stringliteral_452e6500a4013b85635a7a9b231d68a5197c7f7579d0b96d0b2f2e5fe6b5995b","typeString":"literal_string \"OptimismPortal: can only trigger one withdrawal per transaction\""},"value":"OptimismPortal: can only trigger one withdrawal per transaction"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_452e6500a4013b85635a7a9b231d68a5197c7f7579d0b96d0b2f2e5fe6b5995b","typeString":"literal_string \"OptimismPortal: can only trigger one withdrawal per transaction\""}],"id":86843,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12573:7:134","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12573:137:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86850,"nodeType":"ExpressionStatement","src":"12573:137:134"},{"assignments":[86852],"declarations":[{"constant":false,"id":86852,"mutability":"mutable","name":"withdrawalHash","nameLocation":"12801:14:134","nodeType":"VariableDeclaration","scope":86977,"src":"12793:22:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":86851,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12793:7:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":86857,"initialValue":{"arguments":[{"id":86855,"name":"_tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86838,"src":"12841:3:134","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}],"expression":{"id":86853,"name":"Hashing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103936,"src":"12818:7:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Hashing_$103936_$","typeString":"type(library Hashing)"}},"id":86854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"hashWithdrawal","nodeType":"MemberAccess","referencedDeclaration":103911,"src":"12818:22:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_WithdrawalTransaction_$104348_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct Types.WithdrawalTransaction memory) pure returns (bytes32)"}},"id":86856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12818:27:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"12793:52:134"},{"assignments":[86860],"declarations":[{"constant":false,"id":86860,"mutability":"mutable","name":"provenWithdrawal","nameLocation":"12879:16:134","nodeType":"VariableDeclaration","scope":86977,"src":"12855:40:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$86478_memory_ptr","typeString":"struct OptimismPortal.ProvenWithdrawal"},"typeName":{"id":86859,"nodeType":"UserDefinedTypeName","pathNode":{"id":86858,"name":"ProvenWithdrawal","nodeType":"IdentifierPath","referencedDeclaration":86478,"src":"12855:16:134"},"referencedDeclaration":86478,"src":"12855:16:134","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$86478_storage_ptr","typeString":"struct OptimismPortal.ProvenWithdrawal"}},"visibility":"internal"}],"id":86864,"initialValue":{"baseExpression":{"id":86861,"name":"provenWithdrawals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86500,"src":"12898:17:134","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_ProvenWithdrawal_$86478_storage_$","typeString":"mapping(bytes32 => struct OptimismPortal.ProvenWithdrawal storage ref)"}},"id":86863,"indexExpression":{"id":86862,"name":"withdrawalHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86852,"src":"12916:14:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12898:33:134","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$86478_storage","typeString":"struct OptimismPortal.ProvenWithdrawal storage ref"}},"nodeType":"VariableDeclarationStatement","src":"12855:76:134"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":86869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":86866,"name":"provenWithdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86860,"src":"13181:16:134","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$86478_memory_ptr","typeString":"struct OptimismPortal.ProvenWithdrawal memory"}},"id":86867,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":86475,"src":"13181:26:134","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":86868,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13211:1:134","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13181:31:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e6f74206265656e2070726f76656e20796574","id":86870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13214:52:134","typeDescriptions":{"typeIdentifier":"t_stringliteral_bc94f9f4f2ecd47ddd807efca122bcc34325481f7fe9d60687e25c709aff1610","typeString":"literal_string \"OptimismPortal: withdrawal has not been proven yet\""},"value":"OptimismPortal: withdrawal has not been proven yet"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bc94f9f4f2ecd47ddd807efca122bcc34325481f7fe9d60687e25c709aff1610","typeString":"literal_string \"OptimismPortal: withdrawal has not been proven yet\""}],"id":86865,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"13173:7:134","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13173:94:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86872,"nodeType":"ExpressionStatement","src":"13173:94:134"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":86879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":86874,"name":"provenWithdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86860,"src":"13554:16:134","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$86478_memory_ptr","typeString":"struct OptimismPortal.ProvenWithdrawal memory"}},"id":86875,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":86475,"src":"13554:26:134","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":86876,"name":"l2Oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86511,"src":"13584:8:134","typeDescriptions":{"typeIdentifier":"t_contract$_L2OutputOracle_$86435","typeString":"contract L2OutputOracle"}},"id":86877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"startingTimestamp","nodeType":"MemberAccess","referencedDeclaration":85942,"src":"13584:26:134","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":86878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13584:28:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13554:58:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657374616d70206c657373207468616e204c32204f7261636c65207374617274696e672074696d657374616d70","id":86880,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13626:77:134","typeDescriptions":{"typeIdentifier":"t_stringliteral_5c7c78dd7f8d5d79f2ff5ac1a4442209661a78fffa24392f88331b760a60bedd","typeString":"literal_string \"OptimismPortal: withdrawal timestamp less than L2 Oracle starting timestamp\""},"value":"OptimismPortal: withdrawal timestamp less than L2 Oracle starting timestamp"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5c7c78dd7f8d5d79f2ff5ac1a4442209661a78fffa24392f88331b760a60bedd","typeString":"literal_string \"OptimismPortal: withdrawal timestamp less than L2 Oracle starting timestamp\""}],"id":86873,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"13533:7:134","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13533:180:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86882,"nodeType":"ExpressionStatement","src":"13533:180:134"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":86885,"name":"provenWithdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86860,"src":"14132:16:134","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$86478_memory_ptr","typeString":"struct OptimismPortal.ProvenWithdrawal memory"}},"id":86886,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":86475,"src":"14132:26:134","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":86884,"name":"_isFinalizationPeriodElapsed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87103,"src":"14103:28:134","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256) view returns (bool)"}},"id":86887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14103:56:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a2070726f76656e207769746864726177616c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c6170736564","id":86888,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14173:71:134","typeDescriptions":{"typeIdentifier":"t_stringliteral_98a66ca0d4a8e5a839585f0aa5b4b8fc94a946382443fc5580ee1ed6e6237f70","typeString":"literal_string \"OptimismPortal: proven withdrawal finalization period has not elapsed\""},"value":"OptimismPortal: proven withdrawal finalization period has not elapsed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_98a66ca0d4a8e5a839585f0aa5b4b8fc94a946382443fc5580ee1ed6e6237f70","typeString":"literal_string \"OptimismPortal: proven withdrawal finalization period has not elapsed\""}],"id":86883,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14082:7:134","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14082:172:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86890,"nodeType":"ExpressionStatement","src":"14082:172:134"},{"assignments":[86895],"declarations":[{"constant":false,"id":86895,"mutability":"mutable","name":"proposal","nameLocation":"14453:8:134","nodeType":"VariableDeclaration","scope":86977,"src":"14425:36:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_OutputProposal_$104307_memory_ptr","typeString":"struct Types.OutputProposal"},"typeName":{"id":86894,"nodeType":"UserDefinedTypeName","pathNode":{"id":86893,"name":"Types.OutputProposal","nodeType":"IdentifierPath","referencedDeclaration":104307,"src":"14425:20:134"},"referencedDeclaration":104307,"src":"14425:20:134","typeDescriptions":{"typeIdentifier":"t_struct$_OutputProposal_$104307_storage_ptr","typeString":"struct Types.OutputProposal"}},"visibility":"internal"}],"id":86901,"initialValue":{"arguments":[{"expression":{"id":86898,"name":"provenWithdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86860,"src":"14485:16:134","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$86478_memory_ptr","typeString":"struct OptimismPortal.ProvenWithdrawal memory"}},"id":86899,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"l2OutputIndex","nodeType":"MemberAccess","referencedDeclaration":86477,"src":"14485:30:134","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":86896,"name":"l2Oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86511,"src":"14464:8:134","typeDescriptions":{"typeIdentifier":"t_contract$_L2OutputOracle_$86435","typeString":"contract L2OutputOracle"}},"id":86897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getL2Output","nodeType":"MemberAccess","referencedDeclaration":86275,"src":"14464:20:134","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_struct$_OutputProposal_$104307_memory_ptr_$","typeString":"function (uint256) view external returns (struct Types.OutputProposal memory)"}},"id":86900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14464:52:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_OutputProposal_$104307_memory_ptr","typeString":"struct Types.OutputProposal memory"}},"nodeType":"VariableDeclarationStatement","src":"14425:91:134"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":86907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":86903,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86895,"src":"14804:8:134","typeDescriptions":{"typeIdentifier":"t_struct$_OutputProposal_$104307_memory_ptr","typeString":"struct Types.OutputProposal memory"}},"id":86904,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"outputRoot","nodeType":"MemberAccess","referencedDeclaration":104302,"src":"14804:19:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":86905,"name":"provenWithdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86860,"src":"14827:16:134","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$86478_memory_ptr","typeString":"struct OptimismPortal.ProvenWithdrawal memory"}},"id":86906,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"outputRoot","nodeType":"MemberAccess","referencedDeclaration":86473,"src":"14827:27:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"14804:50:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f76656e206973206e6f74207468652073616d652061732063757272656e74206f757470757420726f6f74","id":86908,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14868:75:134","typeDescriptions":{"typeIdentifier":"t_stringliteral_2bee9e90a055fc3fdea28727a1d039ffb281ae00c8962ca3262d0dabb187a280","typeString":"literal_string \"OptimismPortal: output root proven is not the same as current output root\""},"value":"OptimismPortal: output root proven is not the same as current output root"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2bee9e90a055fc3fdea28727a1d039ffb281ae00c8962ca3262d0dabb187a280","typeString":"literal_string \"OptimismPortal: output root proven is not the same as current output root\""}],"id":86902,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14783:7:134","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14783:170:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86910,"nodeType":"ExpressionStatement","src":"14783:170:134"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":86913,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86895,"src":"15081:8:134","typeDescriptions":{"typeIdentifier":"t_struct$_OutputProposal_$104307_memory_ptr","typeString":"struct Types.OutputProposal memory"}},"id":86914,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":104304,"src":"15081:18:134","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":86912,"name":"_isFinalizationPeriodElapsed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87103,"src":"15052:28:134","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256) view returns (bool)"}},"id":86915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15052:48:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c6170736564","id":86916,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15114:69:134","typeDescriptions":{"typeIdentifier":"t_stringliteral_e2e53e5f2e5c146290963511529e48aa3e1570a42475ccc1fb3eba5190175c74","typeString":"literal_string \"OptimismPortal: output proposal finalization period has not elapsed\""},"value":"OptimismPortal: output proposal finalization period has not elapsed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e2e53e5f2e5c146290963511529e48aa3e1570a42475ccc1fb3eba5190175c74","typeString":"literal_string \"OptimismPortal: output proposal finalization period has not elapsed\""}],"id":86911,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"15031:7:134","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15031:162:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86918,"nodeType":"ExpressionStatement","src":"15031:162:134"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":86924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":86920,"name":"finalizedWithdrawals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86494,"src":"15309:20:134","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":86922,"indexExpression":{"id":86921,"name":"withdrawalHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86852,"src":"15330:14:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15309:36:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":86923,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15349:5:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"15309:45:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a207769746864726177616c2068617320616c7265616479206265656e2066696e616c697a6564","id":86925,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15356:55:134","typeDescriptions":{"typeIdentifier":"t_stringliteral_2a1157cbf4171a399f26106a5211324151853c78d2faca1fb1d3acbf755aa485","typeString":"literal_string \"OptimismPortal: withdrawal has already been finalized\""},"value":"OptimismPortal: withdrawal has already been finalized"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2a1157cbf4171a399f26106a5211324151853c78d2faca1fb1d3acbf755aa485","typeString":"literal_string \"OptimismPortal: withdrawal has already been finalized\""}],"id":86919,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"15301:7:134","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":86926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15301:111:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86927,"nodeType":"ExpressionStatement","src":"15301:111:134"},{"expression":{"id":86932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":86928,"name":"finalizedWithdrawals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86494,"src":"15492:20:134","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":86930,"indexExpression":{"id":86929,"name":"withdrawalHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86852,"src":"15513:14:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15492:36:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":86931,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15531:4:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"15492:43:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":86933,"nodeType":"ExpressionStatement","src":"15492:43:134"},{"expression":{"id":86937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":86934,"name":"l2Sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86489,"src":"15629:8:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":86935,"name":"_tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86838,"src":"15640:3:134","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}},"id":86936,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":104339,"src":"15640:10:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"15629:21:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":86938,"nodeType":"ExpressionStatement","src":"15629:21:134"},{"assignments":[86940],"declarations":[{"constant":false,"id":86940,"mutability":"mutable","name":"success","nameLocation":"16275:7:134","nodeType":"VariableDeclaration","scope":86977,"src":"16270:12:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":86939,"name":"bool","nodeType":"ElementaryTypeName","src":"16270:4:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":86952,"initialValue":{"arguments":[{"expression":{"id":86943,"name":"_tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86838,"src":"16309:3:134","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}},"id":86944,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"target","nodeType":"MemberAccess","referencedDeclaration":104341,"src":"16309:10:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":86945,"name":"_tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86838,"src":"16321:3:134","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}},"id":86946,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"gasLimit","nodeType":"MemberAccess","referencedDeclaration":104345,"src":"16321:12:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":86947,"name":"_tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86838,"src":"16335:3:134","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}},"id":86948,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","referencedDeclaration":104343,"src":"16335:9:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":86949,"name":"_tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86838,"src":"16346:3:134","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}},"id":86950,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":104347,"src":"16346:8:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":86941,"name":"SafeCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104213,"src":"16285:8:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCall_$104213_$","typeString":"type(library SafeCall)"}},"id":86942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"callWithMinGas","nodeType":"MemberAccess","referencedDeclaration":104212,"src":"16285:23:134","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,uint256,uint256,bytes memory) returns (bool)"}},"id":86951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16285:70:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"16270:85:134"},{"expression":{"id":86956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":86953,"name":"l2Sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86489,"src":"16423:8:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":86954,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103096,"src":"16434:9:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$103096_$","typeString":"type(library Constants)"}},"id":86955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DEFAULT_L2_SENDER","nodeType":"MemberAccess","referencedDeclaration":103058,"src":"16434:27:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16423:38:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":86957,"nodeType":"ExpressionStatement","src":"16423:38:134"},{"eventCall":{"arguments":[{"id":86959,"name":"withdrawalHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86852,"src":"16640:14:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":86960,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86940,"src":"16656:7:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":86958,"name":"WithdrawalFinalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86542,"src":"16620:19:134","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bool_$returns$__$","typeString":"function (bytes32,bool)"}},"id":86961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16620:44:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86962,"nodeType":"EmitStatement","src":"16615:49:134"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":86971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":86965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":86963,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86940,"src":"16928:7:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":86964,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16939:5:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"16928:16:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":86970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":86966,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"16948:2:134","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":86967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"origin","nodeType":"MemberAccess","src":"16948:9:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":86968,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103096,"src":"16961:9:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$103096_$","typeString":"type(library Constants)"}},"id":86969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ESTIMATION_ADDRESS","nodeType":"MemberAccess","referencedDeclaration":103054,"src":"16961:28:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16948:41:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16928:61:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":86976,"nodeType":"IfStatement","src":"16924:114:134","trueBody":{"id":86975,"nodeType":"Block","src":"16991:47:134","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":86972,"name":"GasEstimation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103993,"src":"17012:13:134","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":86973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17012:15:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86974,"nodeType":"RevertStatement","src":"17005:22:134"}]}}]},"documentation":{"id":86835,"nodeType":"StructuredDocumentation","src":"12119:102:134","text":"@notice Finalizes a withdrawal transaction.\n @param _tx Withdrawal transaction to finalize."},"functionSelector":"8c3152e9","implemented":true,"kind":"function","modifiers":[{"id":86841,"kind":"modifierInvocation","modifierName":{"id":86840,"name":"whenNotPaused","nodeType":"IdentifierPath","referencedDeclaration":86553,"src":"12314:13:134"},"nodeType":"ModifierInvocation","src":"12314:13:134"}],"name":"finalizeWithdrawalTransaction","nameLocation":"12235:29:134","parameters":{"id":86839,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86838,"mutability":"mutable","name":"_tx","nameLocation":"12300:3:134","nodeType":"VariableDeclaration","scope":86978,"src":"12265:38:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction"},"typeName":{"id":86837,"nodeType":"UserDefinedTypeName","pathNode":{"id":86836,"name":"Types.WithdrawalTransaction","nodeType":"IdentifierPath","referencedDeclaration":104348,"src":"12265:27:134"},"referencedDeclaration":104348,"src":"12265:27:134","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_storage_ptr","typeString":"struct Types.WithdrawalTransaction"}},"visibility":"internal"}],"src":"12264:40:134"},"returnParameters":{"id":86842,"nodeType":"ParameterList","parameters":[],"src":"12328:0:134"},"scope":87104,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":87068,"nodeType":"FunctionDefinition","src":"17774:1855:134","nodes":[],"body":{"id":87067,"nodeType":"Block","src":"17995:1634:134","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":87002,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":86995,"name":"_isCreation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86987,"src":"18134:11:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":87001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":86996,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86981,"src":"18149:3:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":86999,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18164:1:134","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":86998,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18156:7:134","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":86997,"name":"address","nodeType":"ElementaryTypeName","src":"18156:7:134","typeDescriptions":{}}},"id":87000,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18156:10:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18149:17:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"18134:32:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":87006,"nodeType":"IfStatement","src":"18130:56:134","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":87003,"name":"BadTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103969,"src":"18175:9:134","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":87004,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18175:11:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87005,"nodeType":"RevertStatement","src":"18168:18:134"}},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":87015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":87007,"name":"_gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86985,"src":"18338:9:134","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[{"arguments":[{"expression":{"id":87011,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86989,"src":"18373:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":87012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"18373:12:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":87010,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18366:6:134","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":87009,"name":"uint64","nodeType":"ElementaryTypeName","src":"18366:6:134","typeDescriptions":{}}},"id":87013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18366:20:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":87008,"name":"minimumGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86666,"src":"18350:15:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint64_$returns$_t_uint64_$","typeString":"function (uint64) pure returns (uint64)"}},"id":87014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18350:37:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"18338:49:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":87019,"nodeType":"IfStatement","src":"18334:77:134","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":87016,"name":"SmallGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103975,"src":"18396:13:134","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":87017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18396:15:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87018,"nodeType":"RevertStatement","src":"18389:22:134"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":87023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":87020,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86989,"src":"18786:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":87021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"18786:12:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"3132305f303030","id":87022,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18801:7:134","typeDescriptions":{"typeIdentifier":"t_rational_120000_by_1","typeString":"int_const 120000"},"value":"120_000"},"src":"18786:22:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":87027,"nodeType":"IfStatement","src":"18782:50:134","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":87024,"name":"LargeCalldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103972,"src":"18817:13:134","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":87025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18817:15:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87026,"nodeType":"RevertStatement","src":"18810:22:134"}},{"assignments":[87029],"declarations":[{"constant":false,"id":87029,"mutability":"mutable","name":"from","nameLocation":"18931:4:134","nodeType":"VariableDeclaration","scope":87067,"src":"18923:12:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":87028,"name":"address","nodeType":"ElementaryTypeName","src":"18923:7:134","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":87032,"initialValue":{"expression":{"id":87030,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18938:3:134","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":87031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"18938:10:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"18923:25:134"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":87037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":87033,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18962:3:134","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":87034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"18962:10:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":87035,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"18976:2:134","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":87036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"origin","nodeType":"MemberAccess","src":"18976:9:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18962:23:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":87047,"nodeType":"IfStatement","src":"18958:108:134","trueBody":{"id":87046,"nodeType":"Block","src":"18987:79:134","statements":[{"expression":{"id":87044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":87038,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87029,"src":"19001:4:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":87041,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19044:3:134","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":87042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"19044:10:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":87039,"name":"AddressAliasHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111913,"src":"19008:18:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AddressAliasHelper_$111913_$","typeString":"type(library AddressAliasHelper)"}},"id":87040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"applyL1ToL2Alias","nodeType":"MemberAccess","referencedDeclaration":111890,"src":"19008:35:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$_t_address_$","typeString":"function (address) pure returns (address)"}},"id":87043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19008:47:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19001:54:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":87045,"nodeType":"ExpressionStatement","src":"19001:54:134"}]}},{"assignments":[87049],"declarations":[{"constant":false,"id":87049,"mutability":"mutable","name":"opaqueData","nameLocation":"19336:10:134","nodeType":"VariableDeclaration","scope":87067,"src":"19323:23:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":87048,"name":"bytes","nodeType":"ElementaryTypeName","src":"19323:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":87059,"initialValue":{"arguments":[{"expression":{"id":87052,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19366:3:134","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":87053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"19366:9:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":87054,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86983,"src":"19377:6:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":87055,"name":"_gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86985,"src":"19385:9:134","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":87056,"name":"_isCreation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86987,"src":"19396:11:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":87057,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86989,"src":"19409:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":87050,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"19349:3:134","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":87051,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"19349:16:134","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":87058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19349:66:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"19323:92:134"},{"eventCall":{"arguments":[{"id":87061,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87029,"src":"19583:4:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":87062,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86981,"src":"19589:3:134","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":87063,"name":"DEPOSIT_VERSION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86482,"src":"19594:15:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":87064,"name":"opaqueData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87049,"src":"19611:10:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":87060,"name":"TransactionDeposited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86526,"src":"19562:20:134","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory)"}},"id":87065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19562:60:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87066,"nodeType":"EmitStatement","src":"19557:65:134"}]},"documentation":{"id":86979,"nodeType":"StructuredDocumentation","src":"17050:719:134","text":"@notice Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in\n deriving deposit transactions. Note that if a deposit is made by a contract, its\n address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider\n using the CrossDomainMessenger contracts for a simpler developer experience.\n @param _to Target address on L2.\n @param _value ETH value to send to the recipient.\n @param _gasLimit Amount of L2 gas to purchase by burning gas on L1.\n @param _isCreation Whether or not the transaction is a contract creation.\n @param _data Data to trigger the recipient with."},"functionSelector":"e9e05c42","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":86992,"name":"_gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86985,"src":"17980:9:134","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"id":86993,"kind":"modifierInvocation","modifierName":{"id":86991,"name":"metered","nodeType":"IdentifierPath","referencedDeclaration":88284,"src":"17972:7:134"},"nodeType":"ModifierInvocation","src":"17972:18:134"}],"name":"depositTransaction","nameLocation":"17783:18:134","parameters":{"id":86990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86981,"mutability":"mutable","name":"_to","nameLocation":"17819:3:134","nodeType":"VariableDeclaration","scope":87068,"src":"17811:11:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":86980,"name":"address","nodeType":"ElementaryTypeName","src":"17811:7:134","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":86983,"mutability":"mutable","name":"_value","nameLocation":"17840:6:134","nodeType":"VariableDeclaration","scope":87068,"src":"17832:14:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":86982,"name":"uint256","nodeType":"ElementaryTypeName","src":"17832:7:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":86985,"mutability":"mutable","name":"_gasLimit","nameLocation":"17863:9:134","nodeType":"VariableDeclaration","scope":87068,"src":"17856:16:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":86984,"name":"uint64","nodeType":"ElementaryTypeName","src":"17856:6:134","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":86987,"mutability":"mutable","name":"_isCreation","nameLocation":"17887:11:134","nodeType":"VariableDeclaration","scope":87068,"src":"17882:16:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":86986,"name":"bool","nodeType":"ElementaryTypeName","src":"17882:4:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":86989,"mutability":"mutable","name":"_data","nameLocation":"17921:5:134","nodeType":"VariableDeclaration","scope":87068,"src":"17908:18:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":86988,"name":"bytes","nodeType":"ElementaryTypeName","src":"17908:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"17801:131:134"},"returnParameters":{"id":86994,"nodeType":"ParameterList","parameters":[],"src":"17995:0:134"},"scope":87104,"stateMutability":"payable","virtual":false,"visibility":"public"},{"id":87085,"nodeType":"FunctionDefinition","src":"19926:180:134","nodes":[],"body":{"id":87084,"nodeType":"Block","src":"20006:100:134","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"arguments":[{"id":87079,"name":"_l2OutputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87071,"src":"20073:14:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":87077,"name":"l2Oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86511,"src":"20052:8:134","typeDescriptions":{"typeIdentifier":"t_contract$_L2OutputOracle_$86435","typeString":"contract L2OutputOracle"}},"id":87078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getL2Output","nodeType":"MemberAccess","referencedDeclaration":86275,"src":"20052:20:134","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_struct$_OutputProposal_$104307_memory_ptr_$","typeString":"function (uint256) view external returns (struct Types.OutputProposal memory)"}},"id":87080,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20052:36:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_OutputProposal_$104307_memory_ptr","typeString":"struct Types.OutputProposal memory"}},"id":87081,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":104304,"src":"20052:46:134","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":87076,"name":"_isFinalizationPeriodElapsed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87103,"src":"20023:28:134","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256) view returns (bool)"}},"id":87082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20023:76:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":87075,"id":87083,"nodeType":"Return","src":"20016:83:134"}]},"documentation":{"id":87069,"nodeType":"StructuredDocumentation","src":"19635:286:134","text":"@notice Determine if a given output is finalized.\n Reverts if the call to l2Oracle.getL2Output reverts.\n Returns a boolean otherwise.\n @param _l2OutputIndex Index of the L2 output to check.\n @return Whether or not the output is finalized."},"functionSelector":"6dbffb78","implemented":true,"kind":"function","modifiers":[],"name":"isOutputFinalized","nameLocation":"19935:17:134","parameters":{"id":87072,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87071,"mutability":"mutable","name":"_l2OutputIndex","nameLocation":"19961:14:134","nodeType":"VariableDeclaration","scope":87085,"src":"19953:22:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":87070,"name":"uint256","nodeType":"ElementaryTypeName","src":"19953:7:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19952:24:134"},"returnParameters":{"id":87075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87074,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":87085,"src":"20000:4:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":87073,"name":"bool","nodeType":"ElementaryTypeName","src":"20000:4:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19999:6:134"},"scope":87104,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":87103,"nodeType":"FunctionDefinition","src":"20359:180:134","nodes":[],"body":{"id":87102,"nodeType":"Block","src":"20446:93:134","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":87100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":87093,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"20463:5:134","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":87094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"20463:15:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":87099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":87095,"name":"_timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87088,"src":"20481:10:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":87096,"name":"l2Oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":86511,"src":"20494:8:134","typeDescriptions":{"typeIdentifier":"t_contract$_L2OutputOracle_$86435","typeString":"contract L2OutputOracle"}},"id":87097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FINALIZATION_PERIOD_SECONDS","nodeType":"MemberAccess","referencedDeclaration":86121,"src":"20494:36:134","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":87098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20494:38:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20481:51:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20463:69:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":87092,"id":87101,"nodeType":"Return","src":"20456:76:134"}]},"documentation":{"id":87086,"nodeType":"StructuredDocumentation","src":"20112:242:134","text":"@notice Determines whether the finalization period has elapsed with respect to\n the provided block timestamp.\n @param _timestamp Timestamp to check.\n @return Whether or not the finalization period has elapsed."},"implemented":true,"kind":"function","modifiers":[],"name":"_isFinalizationPeriodElapsed","nameLocation":"20368:28:134","parameters":{"id":87089,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87088,"mutability":"mutable","name":"_timestamp","nameLocation":"20405:10:134","nodeType":"VariableDeclaration","scope":87103,"src":"20397:18:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":87087,"name":"uint256","nodeType":"ElementaryTypeName","src":"20397:7:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20396:20:134"},"returnParameters":{"id":87092,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87091,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":87103,"src":"20440:4:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":87090,"name":"bool","nodeType":"ElementaryTypeName","src":"20440:4:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"20439:6:134"},"scope":87104,"stateMutability":"view","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":86466,"name":"Initializable","nodeType":"IdentifierPath","referencedDeclaration":49678,"src":"1267:13:134"},"id":86467,"nodeType":"InheritanceSpecifier","src":"1267:13:134"},{"baseName":{"id":86468,"name":"ResourceMetering","nodeType":"IdentifierPath","referencedDeclaration":88581,"src":"1282:16:134"},"id":86469,"nodeType":"InheritanceSpecifier","src":"1282:16:134"},{"baseName":{"id":86470,"name":"ISemver","nodeType":"IdentifierPath","referencedDeclaration":109417,"src":"1300:7:134"},"id":86471,"nodeType":"InheritanceSpecifier","src":"1300:7:134"}],"canonicalName":"OptimismPortal","contractDependencies":[],"contractKind":"contract","documentation":{"id":86465,"nodeType":"StructuredDocumentation","src":"902:338:134","text":"@custom:proxied\n @title OptimismPortal\n @notice The OptimismPortal is a low-level contract responsible for passing messages between L1\n and L2. Messages sent directly to the OptimismPortal have no form of replayability.\n Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface."},"fullyImplemented":true,"linearizedBaseContracts":[87104,109417,88581,49678],"name":"OptimismPortal","nameLocation":"1249:14:134","scope":87105,"usedErrors":[88238,103969,103972,103975,103990,103993]}],"license":"MIT"},"id":134} \ No newline at end of file diff --git a/packages/sdk/src/forge-artifacts/OptimismPortal2.json b/packages/sdk/src/forge-artifacts/OptimismPortal2.json deleted file mode 100644 index 962c442e0c67..000000000000 --- a/packages/sdk/src/forge-artifacts/OptimismPortal2.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"_proofMaturityDelaySeconds","type":"uint256","internalType":"uint256"},{"name":"_disputeGameFinalityDelaySeconds","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"blacklistDisputeGame","inputs":[{"name":"_disputeGame","type":"address","internalType":"contract IDisputeGame"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"checkWithdrawal","inputs":[{"name":"_withdrawalHash","type":"bytes32","internalType":"bytes32"},{"name":"_proofSubmitter","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"depositTransaction","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_value","type":"uint256","internalType":"uint256"},{"name":"_gasLimit","type":"uint64","internalType":"uint64"},{"name":"_isCreation","type":"bool","internalType":"bool"},{"name":"_data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"disputeGameBlacklist","inputs":[{"name":"","type":"address","internalType":"contract IDisputeGame"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"disputeGameFactory","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract DisputeGameFactory"}],"stateMutability":"view"},{"type":"function","name":"disputeGameFinalityDelaySeconds","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"donateETH","inputs":[],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"finalizeWithdrawalTransaction","inputs":[{"name":"_tx","type":"tuple","internalType":"struct Types.WithdrawalTransaction","components":[{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"sender","type":"address","internalType":"address"},{"name":"target","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"finalizeWithdrawalTransactionExternalProof","inputs":[{"name":"_tx","type":"tuple","internalType":"struct Types.WithdrawalTransaction","components":[{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"sender","type":"address","internalType":"address"},{"name":"target","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}]},{"name":"_proofSubmitter","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"finalizedWithdrawals","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"guardian","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_disputeGameFactory","type":"address","internalType":"contract DisputeGameFactory"},{"name":"_systemConfig","type":"address","internalType":"contract SystemConfig"},{"name":"_superchainConfig","type":"address","internalType":"contract SuperchainConfig"},{"name":"_initialRespectedGameType","type":"uint32","internalType":"GameType"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"l2Sender","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"minimumGasLimit","inputs":[{"name":"_byteCount","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"pure"},{"type":"function","name":"numProofSubmitters","inputs":[{"name":"_withdrawalHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"params","inputs":[],"outputs":[{"name":"prevBaseFee","type":"uint128","internalType":"uint128"},{"name":"prevBoughtGas","type":"uint64","internalType":"uint64"},{"name":"prevBlockNum","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"proofMaturityDelaySeconds","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proofSubmitters","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"proveWithdrawalTransaction","inputs":[{"name":"_tx","type":"tuple","internalType":"struct Types.WithdrawalTransaction","components":[{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"sender","type":"address","internalType":"address"},{"name":"target","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}]},{"name":"_disputeGameIndex","type":"uint256","internalType":"uint256"},{"name":"_outputRootProof","type":"tuple","internalType":"struct Types.OutputRootProof","components":[{"name":"version","type":"bytes32","internalType":"bytes32"},{"name":"stateRoot","type":"bytes32","internalType":"bytes32"},{"name":"messagePasserStorageRoot","type":"bytes32","internalType":"bytes32"},{"name":"latestBlockhash","type":"bytes32","internalType":"bytes32"}]},{"name":"_withdrawalProof","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"provenWithdrawals","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"disputeGameProxy","type":"address","internalType":"contract IDisputeGame"},{"name":"timestamp","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"respectedGameType","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"GameType"}],"stateMutability":"view"},{"type":"function","name":"respectedGameTypeUpdatedAt","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"setRespectedGameType","inputs":[{"name":"_gameType","type":"uint32","internalType":"GameType"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"superchainConfig","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract SuperchainConfig"}],"stateMutability":"view"},{"type":"function","name":"systemConfig","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract SystemConfig"}],"stateMutability":"view"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"TransactionDeposited","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"version","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"opaqueData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"WithdrawalFinalized","inputs":[{"name":"withdrawalHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"success","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"WithdrawalProven","inputs":[{"name":"withdrawalHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"BadTarget","inputs":[]},{"type":"error","name":"CallPaused","inputs":[]},{"type":"error","name":"GasEstimation","inputs":[]},{"type":"error","name":"LargeCalldata","inputs":[]},{"type":"error","name":"OutOfGas","inputs":[]},{"type":"error","name":"SmallGasLimit","inputs":[]},{"type":"error","name":"Unauthorized","inputs":[]}],"bytecode":{"object":"0x60c06040523480156200001157600080fd5b5060405162005cbd38038062005cbd8339810160408190526200003491620002f2565b608082905260a08190526200004d600080808062000055565b505062000317565b600054610100900460ff1615808015620000765750600054600160ff909116105b80620000a6575062000093306200022460201b620020d41760201c565b158015620000a6575060005460ff166001145b6200010f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000133576000805461ff0019166101001790555b603880546001600160a01b03199081166001600160a01b03888116919091179092556037805490911686831617905560358054610100600160a81b0319166101008684160217905560325416620001cc576032805461dead6001600160a01b0319909116179055603b80546001600160601b031916640100000000426001600160401b03160263ffffffff19161763ffffffff84161790555b620001d662000233565b80156200021d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6001600160a01b03163b151590565b600054610100900460ff16620002a05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000106565b600154600160c01b90046001600160401b0316600003620002f05760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b600080604083850312156200030657600080fd5b505080516020909101519092909150565b60805160a0516159726200034b600039600081816104c30152611a4601526000818161063a015261168401526159726000f3fe6080604052600436106101b05760003560e01c80637fc48504116100ec578063a35d99df1161008a578063bf653a5c11610064578063bf653a5c1461062b578063cff0ab961461065e578063e9e05c42146106ff578063f2b4e6171461071257600080fd5b8063a35d99df14610544578063a3860f4814610564578063bb2c727e1461058457600080fd5b80638e819e54116100c65780638e819e5414610494578063952b2797146104b45780639bf62d82146104e7578063a14238e71461051457600080fd5b80637fc48504146104545780638b4c40b0146101d55780638c3152e91461047457600080fd5b80634870496f1161015957806354fd4d501161013357806354fd4d50146103a95780635c975abb146103ff57806371c1566e146104145780637d6be8dc1461043457600080fd5b80634870496f1461030c5780634fd0434c1461032c578063513747ab1461036e57600080fd5b806343ca1c501161018a57806343ca1c5014610297578063452a9320146102b757806345884d32146102cc57600080fd5b806333d7e2bd146101dc57806335e80ab3146102335780633c9f397c1461026557600080fd5b366101d7576101d53334620186a060006040518060200160405280600081525061073f565b005b600080fd5b3480156101e857600080fd5b506037546102099073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561023f57600080fd5b5060355461020990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561027157600080fd5b50603b546102829063ffffffff1681565b60405163ffffffff909116815260200161022a565b3480156102a357600080fd5b506101d56102b2366004614e15565b6108fc565b3480156102c357600080fd5b50610209610b5a565b3480156102d857600080fd5b506102fc6102e7366004614e67565b603a6020526000908152604090205460ff1681565b604051901515815260200161022a565b34801561031857600080fd5b506101d5610327366004614e84565b610bf2565b34801561033857600080fd5b50603b5461035590640100000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161022a565b34801561037a57600080fd5b5061039b610389366004614f60565b6000908152603c602052604090205490565b60405190815260200161022a565b3480156103b557600080fd5b506103f26040518060400160405280600581526020017f332e382e3000000000000000000000000000000000000000000000000000000081525081565b60405161022a9190614fef565b34801561040b57600080fd5b506102fc6112d6565b34801561042057600080fd5b506101d561042f366004615002565b611369565b34801561044057600080fd5b506101d561044f366004614e67565b611bfa565b34801561046057600080fd5b506101d561046f366004615039565b611cb5565b34801561048057600080fd5b506101d561048f366004615056565b611d6f565b3480156104a057600080fd5b506101d56104af366004615093565b611dbb565b3480156104c057600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061039b565b3480156104f357600080fd5b506032546102099073ffffffffffffffffffffffffffffffffffffffff1681565b34801561052057600080fd5b506102fc61052f366004614f60565b60336020526000908152604090205460ff1681565b34801561055057600080fd5b5061035561055f366004615105565b612070565b34801561057057600080fd5b5061020961057f366004615122565b61208f565b34801561059057600080fd5b506105f661059f366004615002565b603960209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900467ffffffffffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff90911660208301520161022a565b34801561063757600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061039b565b34801561066a57600080fd5b506001546106c6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161022a565b6101d561070d366004615152565b61073f565b34801561071e57600080fd5b506038546102099073ffffffffffffffffffffffffffffffffffffffff1681565b8260005a9050838015610767575073ffffffffffffffffffffffffffffffffffffffff871615155b1561079e576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107a88351612070565b67ffffffffffffffff168567ffffffffffffffff1610156107f5576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c083511115610833576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33328114610854575033731111000000000000000000000000000000001111015b6000348888888860405160200161086f9594939291906151d1565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516108df9190614fef565b60405180910390a450506108f382826120f0565b50505050505050565b6109046112d6565b1561093b576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146109e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084015b60405180910390fd5b60006109f4836123c7565b9050610a008183611369565b600081815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558401516080850151606086015160a0870151610aa293929190612414565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90610b0790841515815260200190565b60405180910390a280158015610b1d5750326001145b15610b54576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190615236565b905090565b610bfa6112d6565b15610c31576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016109e0565b6038546040517fbb8aa1fc00000000000000000000000000000000000000000000000000000000815260048101869052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063bb8aa1fc90602401606060405180830381865afa158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190615253565b925050915060008173ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfe91906152a0565b603b5490915063ffffffff848116911614610e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016109e0565b610eb2610ead368890038801886152b9565b612472565b8114610f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016109e0565b6000610f4b896123c7565b905060018373ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbe919061534e565b6002811115610fcf57610fcf61531f565b0361105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4f7074696d69736d506f7274616c3a2063616e6e6f742070726f76652061676160448201527f696e737420696e76616c696420646973707574652067616d657300000000000060648201526084016109e0565b60408051602081018390526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506111259101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f010000000000000000000000000000000000000000000000000000000000000060208301529061111b898b61536f565b8b604001356124b1565b6111b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016109e0565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff808716825267ffffffffffffffff4281166020808501918252600088815260398252868120338252825286812095518654935190941674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090931693851693909317919091179093558d840151928e01519351928216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f6291a4506000908152603c602090815260408220805460018101825590835291200180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611345573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed91906153f3565b600082815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff85811685529083528184208251808401845290549182168082527401000000000000000000000000000000000000000090920467ffffffffffffffff1681850152818552603a90935292205490919060ff161561146e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652068617360448201527f206265656e20626c61636b6c697374656400000000000000000000000000000060648201526084016109e0565b816020015167ffffffffffffffff16600003611532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2062792070726f6f66207375626d6974746560648201527f7220616464726573732079657400000000000000000000000000000000000000608482015260a4016109e0565b60006115b38273ffffffffffffffffffffffffffffffffffffffff1663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a69190615410565b67ffffffffffffffff1690565b90508067ffffffffffffffff16836020015167ffffffffffffffff1611611682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e20646973707574652067616d65206372656160648201527f74696f6e2074696d657374616d70000000000000000000000000000000000000608482015260a4016109e0565b7f0000000000000000000000000000000000000000000000000000000000000000836020015167ffffffffffffffff16426116bd919061545c565b1161174a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c20686173206e6f74206d61747572656420796574000000000000000000000060648201526084016109e0565b60028273ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bb919061534e565b60028111156117cc576117cc61531f565b14611859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f686173206e6f74206265656e2076616c6964617465640000000000000000000060648201526084016109e0565b603b5463ffffffff1663ffffffff166118e38373ffffffffffffffffffffffffffffffffffffffff1663bbdc02db6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118da9190615473565b63ffffffff1690565b63ffffffff1614611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016109e0565b603b5467ffffffffffffffff64010000000090910481169082161015611a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652063726560448201527f61746564206265666f7265207265737065637465642067616d6520747970652060648201527f7761732075706461746564000000000000000000000000000000000000000000608482015260a4016109e0565b7f0000000000000000000000000000000000000000000000000000000000000000611ab38373ffffffffffffffffffffffffffffffffffffffff166319effeb46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611582573d6000803e3d6000fd5b611ac79067ffffffffffffffff164261545c565b11611b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f696e206169722d6761700000000000000000000000000000000000000000000060648201526084016109e0565b60008581526033602052604090205460ff1615611bf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016109e0565b5050505050565b611c02610b5a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c66576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff166000908152603a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b611cbd610b5a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d21576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603b805463ffffffff929092167fffffffffffffffffffffffffffffffffffffffff000000000000000000000000909216919091176401000000004267ffffffffffffffff1602179055565b565b611d776112d6565b15611dae576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611db881336108fc565b50565b600054610100900460ff1615808015611ddb5750600054600160ff909116105b80611df55750303b158015611df5575060005460ff166001145b611e81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109e0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611edf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8881169190911790925560378054909116868316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008684160217905560325416611fff576032805461dead7fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055603b80547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166401000000004267ffffffffffffffff16027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000161763ffffffff84161790555b6120076124d5565b8015611bf357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b600061207d826010615490565b612089906152086154c0565b92915050565b603c60205281600052604060002081815481106120ab57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090612126907801000000000000000000000000000000000000000000000000900467ffffffffffffffff164361545c565b905060006121326125e8565b90506000816020015160ff16826000015163ffffffff16612153919061551b565b9050821561228a5760015460009061218a908390700100000000000000000000000000000000900467ffffffffffffffff16615583565b90506000836040015160ff16836121a191906155f7565b6001546121c19084906fffffffffffffffffffffffffffffffff166155f7565b6121cb919061551b565b60015490915060009061221c906121f59084906fffffffffffffffffffffffffffffffff166156b3565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166126a9565b9050600186111561224b576122486121f582876040015160ff1660018a612243919061545c565b6126c8565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b600180548691906010906122bd908490700100000000000000000000000000000000900467ffffffffffffffff166154c0565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16131561234a576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612376906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615727565b9050600061238848633b9aca0061271d565b6123929083615764565b905060005a6123a1908861545c565b9050808211156123bd576123bd6123b8828461545c565b612734565b5050505050505050565b80516020808301516040808501516060860151608087015160a088015193516000976123f7979096959101615778565b604051602081830303815290604052805190602001209050919050565b6000806000612424866000612762565b90508061245a576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600081600001518260200151836040015184606001516040516020016123f7949392919093845260208401929092526040830152606082015260800190565b6000806124bd86612780565b90506124cb818686866127b2565b9695505050505050565b600054610100900460ff1661256c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109e0565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600003611d6d5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612685573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed91906157e5565b60006126be6126b885856127e2565b836127f2565b90505b9392505050565b6000670de0b6b3a76400006127096126e0858361551b565b6126f290670de0b6b3a7640000615583565b61270485670de0b6b3a76400006155f7565b612801565b61271390866155f7565b6126be919061551b565b60008183101561272d57816126c1565b5090919050565b6000805a90505b825a612747908361545c565b101561275d57612756826158a1565b915061273b565b505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6060818051906020012060405160200161279c91815260200190565b6040516020818303038152906040529050919050565b60006127d9846127c3878686612832565b8051602091820120825192909101919091201490565b95945050505050565b60008183121561272d57816126c1565b600081831261272d57816126c1565b60006126c1670de0b6b3a764000083612819866132b0565b61282391906155f7565b61282d919061551b565b6134f4565b6060600084511161289f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b6579000000000000000000000060448201526064016109e0565b60006128aa84613733565b905060006128b78661381f565b90506000846040516020016128ce91815260200190565b60405160208183030381529060405290506000805b8451811015613227576000858281518110612900576129006158d9565b60200260200101519050845183111561299b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e67746800000000000000000000000000000000000060648201526084016109e0565b82600003612a5457805180516020918201206040516129e9926129c392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016109e0565b612bab565b805151602011612b0a5780518051602091820120604051612a7e926129c392910190815260200190565b612a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016109e0565b805184516020808701919091208251919092012014612bab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016109e0565b612bb760106001615908565b81602001515103612d935784518303612d2b57612bf18160200151601081518110612be457612be46158d9565b6020026020010151613882565b96506000875111612c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016109e0565b60018651612c92919061545c565b8214612d20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016109e0565b5050505050506126c1565b6000858481518110612d3f57612d3f6158d9565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612d6a57612d6a6158d9565b60200260200101519050612d7d816139e2565b9550612d8a600186615908565b94505050613214565b60028160200151510361318c576000612dab82613a07565b9050600081600081518110612dc257612dc26158d9565b016020015160f81c90506000612dd9600283615920565b612de4906002615942565b90506000612df5848360ff16613a2b565b90506000612e038a89613a2b565b90506000612e118383613a61565b905080835114612ea3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016109e0565b60ff851660021480612eb8575060ff85166003145b156130a75780825114612f4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016109e0565b612f678760200151600181518110612be457612be46158d9565b9c5060008d5111612ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016109e0565b60018c51613008919061545c565b8814613096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016109e0565b5050505050505050505050506126c1565b60ff851615806130ba575060ff85166001145b156130f9576130e687602001516001815181106130d9576130d96158d9565b60200260200101516139e2565b99506130f2818a615908565b9850613181565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016109e0565b505050505050613214565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016109e0565b508061321f816158a1565b9150506128e3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e747300000000000000000000000000000000000000000000000000000060648201526084016109e0565b600080821361331b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016109e0565b6000606061332884613b15565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361352557506000919050565b680755bf798b4a1bf1e58212613597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016109e0565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff81111561375157613751614c38565b60405190808252806020026020018201604052801561379657816020015b604080518082019091526060808252602082015281526020019060019003908161376f5790505b50915060005b818110156138185760405180604001604052808583815181106137c1576137c16158d9565b602002602001015181526020016137f08684815181106137e3576137e36158d9565b6020026020010151613beb565b815250838281518110613805576138056158d9565b602090810291909101015260010161379c565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613877578060011b82018184015160001a8060041c8253600f811660018301535050600101613849565b509295945050505050565b6060600080600061389285613bfe565b9194509250905060008160018111156138ad576138ad61531f565b1461393a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016109e0565b6139448284615908565b8551146139d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e64657200000000000000000000000060648201526084016109e0565b6127d98560200151848461466b565b606060208260000151106139fe576139f982613882565b612089565b612089826146ff565b6060612089613a268360200151600081518110612be457612be46158d9565b61381f565b606082518210613a4a5750604080516020810190915260008152612089565b6126c18383848651613a5c919061545c565b614715565b6000808251845110613a74578251613a77565b83515b90505b8082108015613afe5750828281518110613a9657613a966158d9565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848381518110613ad557613ad56158d9565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15613b0e57816001019150613a7a565b5092915050565b6000808211613b80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016109e0565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060612089613bf9836148ed565b6149d6565b600080600080846000015111613cbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016109e0565b6020840151805160001a607f8111613ce1576000600160009450945094505050614664565b60b78111613eef576000613cf660808361545c565b905080876000015111613db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a4016109e0565b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082141580613e2a57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613edc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a4016109e0565b5060019550935060009250614664915050565b60bf811161423d576000613f0460b78361545c565b905080876000015111613fbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a4016109e0565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361409d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a4016109e0565b600184015160088302610100031c60378111614161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a4016109e0565b61416b8184615908565b895111614220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a4016109e0565b61422b836001615908565b97509550600094506146649350505050565b60f7811161431e57600061425260c08361545c565b90508087600001511161430d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a4016109e0565b600195509350849250614664915050565b600061432b60f78361545c565b9050808760000151116143e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a4016109e0565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036144c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a4016109e0565b600184015160088302610100031c60378111614588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a4016109e0565b6145928184615908565b895111614647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a4016109e0565b614652836001615908565b97509550600194506146649350505050565b9193909250565b60608167ffffffffffffffff81111561468657614686614c38565b6040519080825280601f01601f1916602001820160405280156146b0576020820181803683370190505b50905081156126c15760006146c58486615908565b90506020820160005b848110156146e65782810151828201526020016146ce565b848111156146f5576000858301525b5050509392505050565b606061208982602001516000846000015161466b565b60608182601f011015614784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b8282840110156147f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b8183018451101561485d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016109e0565b60608215801561487c57604051915060008252602082016040526148e4565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156148b557805183526020928301920161489d565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116149b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016109e0565b50604080518082019091528151815260209182019181019190915290565b606060008060006149e685613bfe565b919450925090506001816001811115614a0157614a0161531f565b14614a8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016109e0565b8451614a9a8385615908565b14614b27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e646572000000000000000000000000000060648201526084016109e0565b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081614b3e5790505093506000835b8651811015614c2c57600080614bb16040518060400160405280858c60000151614b95919061545c565b8152602001858c60200151614baa9190615908565b9052613bfe565b509150915060405180604001604052808383614bcd9190615908565b8152602001848b60200151614be29190615908565b815250888581518110614bf757614bf76158d9565b6020908102919091010152614c0d600185615908565b9350614c198183615908565b614c239084615908565b92505050614b6b565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cae57614cae614c38565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611db857600080fd5b600082601f830112614ce957600080fd5b813567ffffffffffffffff811115614d0357614d03614c38565b614d3460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614c67565b818152846020838601011115614d4957600080fd5b816020850160208301376000918101602001919091529392505050565b600060c08284031215614d7857600080fd5b60405160c0810167ffffffffffffffff8282108183111715614d9c57614d9c614c38565b816040528293508435835260208501359150614db782614cb6565b81602084015260408501359150614dcd82614cb6565b816040840152606085013560608401526080850135608084015260a0850135915080821115614dfb57600080fd5b50614e0885828601614cd8565b60a0830152505092915050565b60008060408385031215614e2857600080fd5b823567ffffffffffffffff811115614e3f57600080fd5b614e4b85828601614d66565b9250506020830135614e5c81614cb6565b809150509250929050565b600060208284031215614e7957600080fd5b81356126c181614cb6565b600080600080600085870360e0811215614e9d57600080fd5b863567ffffffffffffffff80821115614eb557600080fd5b614ec18a838b01614d66565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084011215614efa57600080fd5b60408901955060c0890135925080831115614f1457600080fd5b828901925089601f840112614f2857600080fd5b8235915080821115614f3957600080fd5b508860208260051b8401011115614f4f57600080fd5b959894975092955050506020019190565b600060208284031215614f7257600080fd5b5035919050565b60005b83811015614f94578181015183820152602001614f7c565b83811115610b545750506000910152565b60008151808452614fbd816020860160208601614f79565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006126c16020830184614fa5565b6000806040838503121561501557600080fd5b823591506020830135614e5c81614cb6565b63ffffffff81168114611db857600080fd5b60006020828403121561504b57600080fd5b81356126c181615027565b60006020828403121561506857600080fd5b813567ffffffffffffffff81111561507f57600080fd5b61508b84828501614d66565b949350505050565b600080600080608085870312156150a957600080fd5b84356150b481614cb6565b935060208501356150c481614cb6565b925060408501356150d481614cb6565b915060608501356150e481615027565b939692955090935050565b67ffffffffffffffff81168114611db857600080fd5b60006020828403121561511757600080fd5b81356126c1816150ef565b6000806040838503121561513557600080fd5b50508035926020909101359150565b8015158114611db857600080fd5b600080600080600060a0868803121561516a57600080fd5b853561517581614cb6565b945060208601359350604086013561518c816150ef565b9250606086013561519c81615144565b9150608086013567ffffffffffffffff8111156151b857600080fd5b6151c488828901614cd8565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615225816049850160208701614f79565b919091016049019695505050505050565b60006020828403121561524857600080fd5b81516126c181614cb6565b60008060006060848603121561526857600080fd5b835161527381615027565b6020850151909350615284816150ef565b604085015190925061529581614cb6565b809150509250925092565b6000602082840312156152b257600080fd5b5051919050565b6000608082840312156152cb57600080fd5b6040516080810181811067ffffffffffffffff821117156152ee576152ee614c38565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561536057600080fd5b8151600381106126c157600080fd5b600067ffffffffffffffff8084111561538a5761538a614c38565b8360051b602061539b818301614c67565b8681529185019181810190368411156153b357600080fd5b865b848110156153e7578035868111156153cd5760008081fd5b6153d936828b01614cd8565b8452509183019183016153b5565b50979650505050505050565b60006020828403121561540557600080fd5b81516126c181615144565b60006020828403121561542257600080fd5b81516126c1816150ef565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561546e5761546e61542d565b500390565b60006020828403121561548557600080fd5b81516126c181615027565b600067ffffffffffffffff808316818516818304811182151516156154b7576154b761542d565b02949350505050565b600067ffffffffffffffff8083168185168083038211156154e3576154e361542d565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261552a5761552a6154ec565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561557e5761557e61542d565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156155bd576155bd61542d565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156155f1576155f161542d565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156156385761563861542d565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156156735761567361542d565b6000871292508782058712848416161561568f5761568f61542d565b878505871281841616156156a5576156a561542d565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156156ed576156ed61542d565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156157215761572161542d565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561575f5761575f61542d565b500290565b600082615773576157736154ec565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526157c360c0830184614fa5565b98975050505050505050565b805160ff811681146157e057600080fd5b919050565b600060c082840312156157f757600080fd5b60405160c0810181811067ffffffffffffffff8211171561581a5761581a614c38565b604052825161582881615027565b8152615836602084016157cf565b6020820152615847604084016157cf565b6040820152606083015161585a81615027565b6060820152608083015161586d81615027565b608082015260a08301516fffffffffffffffffffffffffffffffff8116811461589557600080fd5b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036158d2576158d261542d565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561591b5761591b61542d565b500190565b600060ff831680615933576159336154ec565b8060ff84160691505092915050565b600060ff821660ff84168082101561595c5761595c61542d565b9003939250505056fea164736f6c634300080f000a","sourceMap":"1310:23607:135:-:0;;;5985:513;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6085:57;;;;6152:70;;;;6233:258;6306:1;;;;6233:10;:258::i;:::-;5985:513;;1310:23607;;6730:971;3100:19:43;3123:13;;;;;;3122:14;;3168:34;;;;-1:-1:-1;3186:12:43;;3201:1;3186:12;;;;:16;3168:34;3167:97;;;;3209:33;3236:4;3209:18;;;;;:33;;:::i;:::-;3208:34;:55;;;;-1:-1:-1;3246:12:43;;;;;:17;3208:55;3146:190;;;;-1:-1:-1;;;3146:190:43;;466:2:357;3146:190:43;;;448:21:357;505:2;485:18;;;478:30;544:34;524:18;;;517:62;-1:-1:-1;;;595:18:357;;;588:44;649:19;;3146:190:43;;;;;;;;;3346:12;:16;;-1:-1:-1;;3346:16:43;3361:1;3346:16;;;3372:65;;;;3406:13;:20;;-1:-1:-1;;3406:20:43;;;;;3372:65;6977:18:135::1;:40:::0;;-1:-1:-1;;;;;;6977:40:135;;::::1;-1:-1:-1::0;;;;;6977:40:135;;::::1;::::0;;;::::1;::::0;;;7027:12:::1;:28:::0;;;;::::1;::::0;;::::1;;::::0;;7065:16:::1;:36:::0;;-1:-1:-1;;;;;;7065:36:135::1;6977:40;7065:36:::0;;::::1;;;::::0;;7249:8:::1;::::0;::::1;7245:414;;7287:8;:38:::0;;1338:42:192::1;-1:-1:-1::0;;;;;;7287:38:135;;::::1;;::::0;;7485:26:::1;:52:::0;;-1:-1:-1;;;;;;7603:45:135;7485:52;7521:15:::1;-1:-1:-1::0;;;;;7485:52:135::1;;-1:-1:-1::0;;7603:45:135;;::::1;::::0;::::1;;::::0;;7245:414:::1;7669:25;:23;:25::i;:::-;3461:14:43::0;3457:99;;;3507:5;3491:21;;-1:-1:-1;;3491:21:43;;;3531:14;;-1:-1:-1;831:36:357;;3531:14:43;;819:2:357;804:18;3531:14:43;;;;;;;3457:99;3090:472;6730:971:135;;;;:::o;1175:320:59:-;-1:-1:-1;;;;;1465:19:59;;:23;;;1175:320::o;8340:234:137:-;4888:13:43;;;;;;;4880:69;;;;-1:-1:-1;;;4880:69:43;;1080:2:357;4880:69:43;;;1062:21:357;1119:2;1099:18;;;1092:30;1158:34;1138:18;;;1131:62;-1:-1:-1;;;1209:18:357;;;1202:41;1260:19;;4880:69:43;878:407:357;4880:69:43;8415:6:137::1;:19:::0;-1:-1:-1;;;8415:19:137;::::1;-1:-1:-1::0;;;;;8415:19:137::1;;:24:::0;8411:157:::1;;8464:93;::::0;;::::1;::::0;::::1;::::0;;8494:6:::1;8464:93:::0;;;-1:-1:-1;8464:93:137::1;::::0;::::1;::::0;8541:12:::1;-1:-1:-1::0;;;;;8464:93:137::1;::::0;;;;;;;-1:-1:-1;;;8455:102:137::1;;:6;:102:::0;8411:157:::1;8340:234::o:0;14:245:357:-;93:6;101;154:2;142:9;133:7;129:23;125:32;122:52;;;170:1;167;160:12;122:52;-1:-1:-1;;193:16:357;;249:2;234:18;;;228:25;193:16;;228:25;;-1:-1:-1;14:245:357:o;878:407::-;1310:23607:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101b05760003560e01c80637fc48504116100ec578063a35d99df1161008a578063bf653a5c11610064578063bf653a5c1461062b578063cff0ab961461065e578063e9e05c42146106ff578063f2b4e6171461071257600080fd5b8063a35d99df14610544578063a3860f4814610564578063bb2c727e1461058457600080fd5b80638e819e54116100c65780638e819e5414610494578063952b2797146104b45780639bf62d82146104e7578063a14238e71461051457600080fd5b80637fc48504146104545780638b4c40b0146101d55780638c3152e91461047457600080fd5b80634870496f1161015957806354fd4d501161013357806354fd4d50146103a95780635c975abb146103ff57806371c1566e146104145780637d6be8dc1461043457600080fd5b80634870496f1461030c5780634fd0434c1461032c578063513747ab1461036e57600080fd5b806343ca1c501161018a57806343ca1c5014610297578063452a9320146102b757806345884d32146102cc57600080fd5b806333d7e2bd146101dc57806335e80ab3146102335780633c9f397c1461026557600080fd5b366101d7576101d53334620186a060006040518060200160405280600081525061073f565b005b600080fd5b3480156101e857600080fd5b506037546102099073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561023f57600080fd5b5060355461020990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561027157600080fd5b50603b546102829063ffffffff1681565b60405163ffffffff909116815260200161022a565b3480156102a357600080fd5b506101d56102b2366004614e15565b6108fc565b3480156102c357600080fd5b50610209610b5a565b3480156102d857600080fd5b506102fc6102e7366004614e67565b603a6020526000908152604090205460ff1681565b604051901515815260200161022a565b34801561031857600080fd5b506101d5610327366004614e84565b610bf2565b34801561033857600080fd5b50603b5461035590640100000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161022a565b34801561037a57600080fd5b5061039b610389366004614f60565b6000908152603c602052604090205490565b60405190815260200161022a565b3480156103b557600080fd5b506103f26040518060400160405280600581526020017f332e382e3000000000000000000000000000000000000000000000000000000081525081565b60405161022a9190614fef565b34801561040b57600080fd5b506102fc6112d6565b34801561042057600080fd5b506101d561042f366004615002565b611369565b34801561044057600080fd5b506101d561044f366004614e67565b611bfa565b34801561046057600080fd5b506101d561046f366004615039565b611cb5565b34801561048057600080fd5b506101d561048f366004615056565b611d6f565b3480156104a057600080fd5b506101d56104af366004615093565b611dbb565b3480156104c057600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061039b565b3480156104f357600080fd5b506032546102099073ffffffffffffffffffffffffffffffffffffffff1681565b34801561052057600080fd5b506102fc61052f366004614f60565b60336020526000908152604090205460ff1681565b34801561055057600080fd5b5061035561055f366004615105565b612070565b34801561057057600080fd5b5061020961057f366004615122565b61208f565b34801561059057600080fd5b506105f661059f366004615002565b603960209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900467ffffffffffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff90911660208301520161022a565b34801561063757600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061039b565b34801561066a57600080fd5b506001546106c6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161022a565b6101d561070d366004615152565b61073f565b34801561071e57600080fd5b506038546102099073ffffffffffffffffffffffffffffffffffffffff1681565b8260005a9050838015610767575073ffffffffffffffffffffffffffffffffffffffff871615155b1561079e576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107a88351612070565b67ffffffffffffffff168567ffffffffffffffff1610156107f5576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c083511115610833576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33328114610854575033731111000000000000000000000000000000001111015b6000348888888860405160200161086f9594939291906151d1565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516108df9190614fef565b60405180910390a450506108f382826120f0565b50505050505050565b6109046112d6565b1561093b576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146109e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084015b60405180910390fd5b60006109f4836123c7565b9050610a008183611369565b600081815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558401516080850151606086015160a0870151610aa293929190612414565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90610b0790841515815260200190565b60405180910390a280158015610b1d5750326001145b15610b54576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190615236565b905090565b610bfa6112d6565b15610c31576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016109e0565b6038546040517fbb8aa1fc00000000000000000000000000000000000000000000000000000000815260048101869052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063bb8aa1fc90602401606060405180830381865afa158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190615253565b925050915060008173ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfe91906152a0565b603b5490915063ffffffff848116911614610e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016109e0565b610eb2610ead368890038801886152b9565b612472565b8114610f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016109e0565b6000610f4b896123c7565b905060018373ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbe919061534e565b6002811115610fcf57610fcf61531f565b0361105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4f7074696d69736d506f7274616c3a2063616e6e6f742070726f76652061676160448201527f696e737420696e76616c696420646973707574652067616d657300000000000060648201526084016109e0565b60408051602081018390526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506111259101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f010000000000000000000000000000000000000000000000000000000000000060208301529061111b898b61536f565b8b604001356124b1565b6111b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016109e0565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff808716825267ffffffffffffffff4281166020808501918252600088815260398252868120338252825286812095518654935190941674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090931693851693909317919091179093558d840151928e01519351928216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f6291a4506000908152603c602090815260408220805460018101825590835291200180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611345573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed91906153f3565b600082815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff85811685529083528184208251808401845290549182168082527401000000000000000000000000000000000000000090920467ffffffffffffffff1681850152818552603a90935292205490919060ff161561146e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652068617360448201527f206265656e20626c61636b6c697374656400000000000000000000000000000060648201526084016109e0565b816020015167ffffffffffffffff16600003611532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2062792070726f6f66207375626d6974746560648201527f7220616464726573732079657400000000000000000000000000000000000000608482015260a4016109e0565b60006115b38273ffffffffffffffffffffffffffffffffffffffff1663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a69190615410565b67ffffffffffffffff1690565b90508067ffffffffffffffff16836020015167ffffffffffffffff1611611682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e20646973707574652067616d65206372656160648201527f74696f6e2074696d657374616d70000000000000000000000000000000000000608482015260a4016109e0565b7f0000000000000000000000000000000000000000000000000000000000000000836020015167ffffffffffffffff16426116bd919061545c565b1161174a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c20686173206e6f74206d61747572656420796574000000000000000000000060648201526084016109e0565b60028273ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bb919061534e565b60028111156117cc576117cc61531f565b14611859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f686173206e6f74206265656e2076616c6964617465640000000000000000000060648201526084016109e0565b603b5463ffffffff1663ffffffff166118e38373ffffffffffffffffffffffffffffffffffffffff1663bbdc02db6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118da9190615473565b63ffffffff1690565b63ffffffff1614611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016109e0565b603b5467ffffffffffffffff64010000000090910481169082161015611a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652063726560448201527f61746564206265666f7265207265737065637465642067616d6520747970652060648201527f7761732075706461746564000000000000000000000000000000000000000000608482015260a4016109e0565b7f0000000000000000000000000000000000000000000000000000000000000000611ab38373ffffffffffffffffffffffffffffffffffffffff166319effeb46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611582573d6000803e3d6000fd5b611ac79067ffffffffffffffff164261545c565b11611b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f696e206169722d6761700000000000000000000000000000000000000000000060648201526084016109e0565b60008581526033602052604090205460ff1615611bf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016109e0565b5050505050565b611c02610b5a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c66576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff166000908152603a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b611cbd610b5a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d21576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603b805463ffffffff929092167fffffffffffffffffffffffffffffffffffffffff000000000000000000000000909216919091176401000000004267ffffffffffffffff1602179055565b565b611d776112d6565b15611dae576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611db881336108fc565b50565b600054610100900460ff1615808015611ddb5750600054600160ff909116105b80611df55750303b158015611df5575060005460ff166001145b611e81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109e0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611edf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8881169190911790925560378054909116868316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008684160217905560325416611fff576032805461dead7fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055603b80547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166401000000004267ffffffffffffffff16027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000161763ffffffff84161790555b6120076124d5565b8015611bf357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b600061207d826010615490565b612089906152086154c0565b92915050565b603c60205281600052604060002081815481106120ab57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090612126907801000000000000000000000000000000000000000000000000900467ffffffffffffffff164361545c565b905060006121326125e8565b90506000816020015160ff16826000015163ffffffff16612153919061551b565b9050821561228a5760015460009061218a908390700100000000000000000000000000000000900467ffffffffffffffff16615583565b90506000836040015160ff16836121a191906155f7565b6001546121c19084906fffffffffffffffffffffffffffffffff166155f7565b6121cb919061551b565b60015490915060009061221c906121f59084906fffffffffffffffffffffffffffffffff166156b3565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166126a9565b9050600186111561224b576122486121f582876040015160ff1660018a612243919061545c565b6126c8565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b600180548691906010906122bd908490700100000000000000000000000000000000900467ffffffffffffffff166154c0565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16131561234a576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612376906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615727565b9050600061238848633b9aca0061271d565b6123929083615764565b905060005a6123a1908861545c565b9050808211156123bd576123bd6123b8828461545c565b612734565b5050505050505050565b80516020808301516040808501516060860151608087015160a088015193516000976123f7979096959101615778565b604051602081830303815290604052805190602001209050919050565b6000806000612424866000612762565b90508061245a576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600081600001518260200151836040015184606001516040516020016123f7949392919093845260208401929092526040830152606082015260800190565b6000806124bd86612780565b90506124cb818686866127b2565b9695505050505050565b600054610100900460ff1661256c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109e0565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600003611d6d5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612685573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed91906157e5565b60006126be6126b885856127e2565b836127f2565b90505b9392505050565b6000670de0b6b3a76400006127096126e0858361551b565b6126f290670de0b6b3a7640000615583565b61270485670de0b6b3a76400006155f7565b612801565b61271390866155f7565b6126be919061551b565b60008183101561272d57816126c1565b5090919050565b6000805a90505b825a612747908361545c565b101561275d57612756826158a1565b915061273b565b505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6060818051906020012060405160200161279c91815260200190565b6040516020818303038152906040529050919050565b60006127d9846127c3878686612832565b8051602091820120825192909101919091201490565b95945050505050565b60008183121561272d57816126c1565b600081831261272d57816126c1565b60006126c1670de0b6b3a764000083612819866132b0565b61282391906155f7565b61282d919061551b565b6134f4565b6060600084511161289f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b6579000000000000000000000060448201526064016109e0565b60006128aa84613733565b905060006128b78661381f565b90506000846040516020016128ce91815260200190565b60405160208183030381529060405290506000805b8451811015613227576000858281518110612900576129006158d9565b60200260200101519050845183111561299b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e67746800000000000000000000000000000000000060648201526084016109e0565b82600003612a5457805180516020918201206040516129e9926129c392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016109e0565b612bab565b805151602011612b0a5780518051602091820120604051612a7e926129c392910190815260200190565b612a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016109e0565b805184516020808701919091208251919092012014612bab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016109e0565b612bb760106001615908565b81602001515103612d935784518303612d2b57612bf18160200151601081518110612be457612be46158d9565b6020026020010151613882565b96506000875111612c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016109e0565b60018651612c92919061545c565b8214612d20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016109e0565b5050505050506126c1565b6000858481518110612d3f57612d3f6158d9565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612d6a57612d6a6158d9565b60200260200101519050612d7d816139e2565b9550612d8a600186615908565b94505050613214565b60028160200151510361318c576000612dab82613a07565b9050600081600081518110612dc257612dc26158d9565b016020015160f81c90506000612dd9600283615920565b612de4906002615942565b90506000612df5848360ff16613a2b565b90506000612e038a89613a2b565b90506000612e118383613a61565b905080835114612ea3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016109e0565b60ff851660021480612eb8575060ff85166003145b156130a75780825114612f4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016109e0565b612f678760200151600181518110612be457612be46158d9565b9c5060008d5111612ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016109e0565b60018c51613008919061545c565b8814613096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016109e0565b5050505050505050505050506126c1565b60ff851615806130ba575060ff85166001145b156130f9576130e687602001516001815181106130d9576130d96158d9565b60200260200101516139e2565b99506130f2818a615908565b9850613181565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016109e0565b505050505050613214565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016109e0565b508061321f816158a1565b9150506128e3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e747300000000000000000000000000000000000000000000000000000060648201526084016109e0565b600080821361331b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016109e0565b6000606061332884613b15565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361352557506000919050565b680755bf798b4a1bf1e58212613597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016109e0565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff81111561375157613751614c38565b60405190808252806020026020018201604052801561379657816020015b604080518082019091526060808252602082015281526020019060019003908161376f5790505b50915060005b818110156138185760405180604001604052808583815181106137c1576137c16158d9565b602002602001015181526020016137f08684815181106137e3576137e36158d9565b6020026020010151613beb565b815250838281518110613805576138056158d9565b602090810291909101015260010161379c565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613877578060011b82018184015160001a8060041c8253600f811660018301535050600101613849565b509295945050505050565b6060600080600061389285613bfe565b9194509250905060008160018111156138ad576138ad61531f565b1461393a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016109e0565b6139448284615908565b8551146139d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e64657200000000000000000000000060648201526084016109e0565b6127d98560200151848461466b565b606060208260000151106139fe576139f982613882565b612089565b612089826146ff565b6060612089613a268360200151600081518110612be457612be46158d9565b61381f565b606082518210613a4a5750604080516020810190915260008152612089565b6126c18383848651613a5c919061545c565b614715565b6000808251845110613a74578251613a77565b83515b90505b8082108015613afe5750828281518110613a9657613a966158d9565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848381518110613ad557613ad56158d9565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15613b0e57816001019150613a7a565b5092915050565b6000808211613b80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016109e0565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060612089613bf9836148ed565b6149d6565b600080600080846000015111613cbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016109e0565b6020840151805160001a607f8111613ce1576000600160009450945094505050614664565b60b78111613eef576000613cf660808361545c565b905080876000015111613db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a4016109e0565b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082141580613e2a57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613edc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a4016109e0565b5060019550935060009250614664915050565b60bf811161423d576000613f0460b78361545c565b905080876000015111613fbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a4016109e0565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361409d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a4016109e0565b600184015160088302610100031c60378111614161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a4016109e0565b61416b8184615908565b895111614220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a4016109e0565b61422b836001615908565b97509550600094506146649350505050565b60f7811161431e57600061425260c08361545c565b90508087600001511161430d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a4016109e0565b600195509350849250614664915050565b600061432b60f78361545c565b9050808760000151116143e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a4016109e0565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036144c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a4016109e0565b600184015160088302610100031c60378111614588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a4016109e0565b6145928184615908565b895111614647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a4016109e0565b614652836001615908565b97509550600194506146649350505050565b9193909250565b60608167ffffffffffffffff81111561468657614686614c38565b6040519080825280601f01601f1916602001820160405280156146b0576020820181803683370190505b50905081156126c15760006146c58486615908565b90506020820160005b848110156146e65782810151828201526020016146ce565b848111156146f5576000858301525b5050509392505050565b606061208982602001516000846000015161466b565b60608182601f011015614784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b8282840110156147f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b8183018451101561485d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016109e0565b60608215801561487c57604051915060008252602082016040526148e4565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156148b557805183526020928301920161489d565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116149b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016109e0565b50604080518082019091528151815260209182019181019190915290565b606060008060006149e685613bfe565b919450925090506001816001811115614a0157614a0161531f565b14614a8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016109e0565b8451614a9a8385615908565b14614b27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e646572000000000000000000000000000060648201526084016109e0565b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081614b3e5790505093506000835b8651811015614c2c57600080614bb16040518060400160405280858c60000151614b95919061545c565b8152602001858c60200151614baa9190615908565b9052613bfe565b509150915060405180604001604052808383614bcd9190615908565b8152602001848b60200151614be29190615908565b815250888581518110614bf757614bf76158d9565b6020908102919091010152614c0d600185615908565b9350614c198183615908565b614c239084615908565b92505050614b6b565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cae57614cae614c38565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611db857600080fd5b600082601f830112614ce957600080fd5b813567ffffffffffffffff811115614d0357614d03614c38565b614d3460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614c67565b818152846020838601011115614d4957600080fd5b816020850160208301376000918101602001919091529392505050565b600060c08284031215614d7857600080fd5b60405160c0810167ffffffffffffffff8282108183111715614d9c57614d9c614c38565b816040528293508435835260208501359150614db782614cb6565b81602084015260408501359150614dcd82614cb6565b816040840152606085013560608401526080850135608084015260a0850135915080821115614dfb57600080fd5b50614e0885828601614cd8565b60a0830152505092915050565b60008060408385031215614e2857600080fd5b823567ffffffffffffffff811115614e3f57600080fd5b614e4b85828601614d66565b9250506020830135614e5c81614cb6565b809150509250929050565b600060208284031215614e7957600080fd5b81356126c181614cb6565b600080600080600085870360e0811215614e9d57600080fd5b863567ffffffffffffffff80821115614eb557600080fd5b614ec18a838b01614d66565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084011215614efa57600080fd5b60408901955060c0890135925080831115614f1457600080fd5b828901925089601f840112614f2857600080fd5b8235915080821115614f3957600080fd5b508860208260051b8401011115614f4f57600080fd5b959894975092955050506020019190565b600060208284031215614f7257600080fd5b5035919050565b60005b83811015614f94578181015183820152602001614f7c565b83811115610b545750506000910152565b60008151808452614fbd816020860160208601614f79565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006126c16020830184614fa5565b6000806040838503121561501557600080fd5b823591506020830135614e5c81614cb6565b63ffffffff81168114611db857600080fd5b60006020828403121561504b57600080fd5b81356126c181615027565b60006020828403121561506857600080fd5b813567ffffffffffffffff81111561507f57600080fd5b61508b84828501614d66565b949350505050565b600080600080608085870312156150a957600080fd5b84356150b481614cb6565b935060208501356150c481614cb6565b925060408501356150d481614cb6565b915060608501356150e481615027565b939692955090935050565b67ffffffffffffffff81168114611db857600080fd5b60006020828403121561511757600080fd5b81356126c1816150ef565b6000806040838503121561513557600080fd5b50508035926020909101359150565b8015158114611db857600080fd5b600080600080600060a0868803121561516a57600080fd5b853561517581614cb6565b945060208601359350604086013561518c816150ef565b9250606086013561519c81615144565b9150608086013567ffffffffffffffff8111156151b857600080fd5b6151c488828901614cd8565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615225816049850160208701614f79565b919091016049019695505050505050565b60006020828403121561524857600080fd5b81516126c181614cb6565b60008060006060848603121561526857600080fd5b835161527381615027565b6020850151909350615284816150ef565b604085015190925061529581614cb6565b809150509250925092565b6000602082840312156152b257600080fd5b5051919050565b6000608082840312156152cb57600080fd5b6040516080810181811067ffffffffffffffff821117156152ee576152ee614c38565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561536057600080fd5b8151600381106126c157600080fd5b600067ffffffffffffffff8084111561538a5761538a614c38565b8360051b602061539b818301614c67565b8681529185019181810190368411156153b357600080fd5b865b848110156153e7578035868111156153cd5760008081fd5b6153d936828b01614cd8565b8452509183019183016153b5565b50979650505050505050565b60006020828403121561540557600080fd5b81516126c181615144565b60006020828403121561542257600080fd5b81516126c1816150ef565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561546e5761546e61542d565b500390565b60006020828403121561548557600080fd5b81516126c181615027565b600067ffffffffffffffff808316818516818304811182151516156154b7576154b761542d565b02949350505050565b600067ffffffffffffffff8083168185168083038211156154e3576154e361542d565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261552a5761552a6154ec565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561557e5761557e61542d565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156155bd576155bd61542d565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156155f1576155f161542d565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156156385761563861542d565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156156735761567361542d565b6000871292508782058712848416161561568f5761568f61542d565b878505871281841616156156a5576156a561542d565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156156ed576156ed61542d565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156157215761572161542d565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561575f5761575f61542d565b500290565b600082615773576157736154ec565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526157c360c0830184614fa5565b98975050505050505050565b805160ff811681146157e057600080fd5b919050565b600060c082840312156157f757600080fd5b60405160c0810181811067ffffffffffffffff8211171561581a5761581a614c38565b604052825161582881615027565b8152615836602084016157cf565b6020820152615847604084016157cf565b6040820152606083015161585a81615027565b6060820152608083015161586d81615027565b608082015260a08301516fffffffffffffffffffffffffffffffff8116811461589557600080fd5b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036158d2576158d261542d565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561591b5761591b61542d565b500190565b600060ff831680615933576159336154ec565b8060ff84160691505092915050565b600060ff821660ff84168082101561595c5761595c61542d565b9003939250505056fea164736f6c634300080f000a","sourceMap":"1310:23607:135:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9614:86;9633:10;9645:9;2352:7;9683:5;9690:9;;;;;;;;;;;;9614:18;:86::i;:::-;1310:23607;;;;;3443:32;;;;;;;;;;-1:-1:-1;3443:32:135;;;;;;;;;;;212:42:357;200:55;;;182:74;;170:2;155:18;3443:32:135;;;;;;;;3156:40;;;;;;;;;;-1:-1:-1;3156:40:135;;;;;;;;;;;4041:33;;;;;;;;;;-1:-1:-1;4041:33:135;;;;;;;;;;;730:10:357;718:23;;;700:42;;688:2;673:18;4041:33:135;524:224:357;14882:2403:135;;;;;;;;;;-1:-1:-1;14882:2403:135;;;;;:::i;:::-;;:::i;7954:101::-;;;;;;;;;;;;;:::i;3892:57::-;;;;;;;;;;-1:-1:-1;3892:57:135;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4257:14:357;;4250:22;4232:41;;4220:2;4205:18;3892:57:135;4092:187:357;10816:3564:135;;;;;;;;;;-1:-1:-1;10816:3564:135;;;;;:::i;:::-;;:::i;4162:40::-;;;;;;;;;;-1:-1:-1;4162:40:135;;;;;;;;;;;;;;5638:18:357;5626:31;;;5608:50;;5596:2;5581:18;4162:40:135;5464:200:357;24767:148:135;;;;;;;;;;-1:-1:-1;24767:148:135;;;;;:::i;:::-;24843:7;24869:32;;;:15;:32;;;;;:39;;24767:148;;;;6000:25:357;;;5988:2;5973:18;24767:148:135;5854:177:357;5882:40:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8115:94::-;;;;;;;;;;;;;:::i;21034:3510::-;;;;;;;;;;-1:-1:-1;21034:3510:135;;;;;:::i;:::-;;:::i;20049:185::-;;;;;;;;;;-1:-1:-1;20049:185:135;;;;;:::i;:::-;;:::i;20481:228::-;;;;;;;;;;-1:-1:-1;20481:228:135;;;;;:::i;:::-;;:::i;14493:178::-;;;;;;;;;;-1:-1:-1;14493:178:135;;;;;:::i;:::-;;:::i;6730:971::-;;;;;;;;;;-1:-1:-1;6730:971:135;;;;;:::i;:::-;;:::i;8453:132::-;;;;;;;;;;-1:-1:-1;8543:35:135;8453:132;;2615:23;;;;;;;;;;-1:-1:-1;2615:23:135;;;;;;;;2729:52;;;;;;;;;;-1:-1:-1;2729:52:135;;;;;:::i;:::-;;;;;;;;;;;;;;;;9078:120;;;;;;;;;;-1:-1:-1;9078:120:135;;;;;:::i;:::-;;:::i;4315:52::-;;;;;;;;;;-1:-1:-1;4315:52:135;;;;;:::i;:::-;;:::i;3712:81::-;;;;;;;;;;-1:-1:-1;3712:81:135;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9667:42:357;9655:55;;;9637:74;;9759:18;9747:31;;;9742:2;9727:18;;9720:59;9610:18;3712:81:135;9442:343:357;8268:119:135;;;;;;;;;;-1:-1:-1;8352:28:135;8268:119;;3093:28:137;;;;;;;;;;-1:-1:-1;3093:28:137;;;;;;;;;;;;;;;;;;;;;;;;;10018:34:357;10006:47;;;9988:66;;10073:18;10127:15;;;10122:2;10107:18;;10100:43;10179:15;;10159:18;;;10152:43;9976:2;9961:18;3093:28:137;9790:411:357;18015:1855:135;;;;;;:::i;:::-;;:::i;3566:44::-;;;;;;;;;;-1:-1:-1;3566:44:135;;;;;;;;18015:1855;18221:9;3511:18:137;3532:9;3511:30;;18375:11:135::1;:32;;;;-1:-1:-1::0;18390:17:135::1;::::0;::::1;::::0;::::1;18375:32;18371:56;;;18416:11;;;;;;;;;;;;;;18371:56;18591:37;18614:5;:12;18591:15;:37::i;:::-;18579:49;;:9;:49;;;18575:77;;;18637:15;;;;;;;;;;;;;;18575:77;19042:7;19027:5;:12;:22;19023:50;;;19058:15;;;;;;;;;;;;;;19023:50;19179:10;19217:9;19203:23:::0;::::1;19199:108;;-1:-1:-1::0;19285:10:135::1;741:42:237::0;1213:27;19199:108:135::1;19564:23;19607:9;19618:6;19626:9;19637:11;19650:5;19590:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19564:92;;2202:1;19830:3;19803:60;;19824:4;19803:60;;;19852:10;19803:60;;;;;;:::i;:::-;;;;;;;;18236:1634;;3642:29:137::0;3651:7;3660:10;3642:8;:29::i;:::-;3433:245;18015:1855:135;;;;;;:::o;14882:2403::-;5766:8;:6;:8::i;:::-;5762:33;;;5783:12;;;;;;;;;;;;;;5762:33;15328:8:::1;::::0;:39:::1;:8;1338:42:192;15328:39:135;15307:137;;;::::0;::::1;::::0;;12464:2:357;15307:137:135::1;::::0;::::1;12446:21:357::0;12503:2;12483:18;;;12476:30;12542:34;12522:18;;;12515:62;12613:33;12593:18;;;12586:61;12664:19;;15307:137:135::1;;;;;;;;;15495:22;15520:27;15543:3;15520:22;:27::i;:::-;15495:52;;15613:48;15629:14;15645:15;15613;:48::i;:::-;15741:36;::::0;;;:20:::1;:36;::::0;;;;;;;:43;;;::::1;15780:4;15741:43;::::0;;15889:10;;::::1;::::0;15878:8:::1;:21:::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;16558:10;::::1;::::0;16570:12:::1;::::0;::::1;::::0;16584:9:::1;::::0;::::1;::::0;16595:8:::1;::::0;::::1;::::0;16534:70:::1;::::0;16558:10;16570:12;16584:9;16534:23:::1;:70::i;:::-;16672:8;:38:::0;;;::::1;1338:42:192;16672:38:135;::::0;;16869:44:::1;::::0;16519:85;;-1:-1:-1;16889:14:135;;16869:44:::1;::::0;::::1;::::0;16519:85;4257:14:357;4250:22;4232:41;;4220:2;4205:18;;4092:187;16869:44:135::1;;;;;;;;17178:7;17177:8;:53;;;;-1:-1:-1::0;17189:9:135::1;1016:1:192;17189:41:135;17177:53;17173:106;;;17253:15;;;;;;;;;;;;;;17173:106;15062:2223;;14882:2403:::0;;:::o;7954:101::-;7995:7;8021:16;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8014:34;;7954:101;:::o;10816:3564::-;5766:8;:6;:8::i;:::-;5762:33;;;5783:12;;;;;;;;;;;;;;5762:33;11351:4:::1;11329:27;;:3;:10;;;:27;;::::0;11321:103:::1;;;::::0;::::1;::::0;;13152:2:357;11321:103:135::1;::::0;::::1;13134:21:357::0;13191:2;13171:18;;;13164:30;13230:34;13210:18;;;13203:62;13301:33;13281:18;;;13274:61;13352:19;;11321:103:135::1;12950:427:357::0;11321:103:135::1;11562:18;::::0;:49:::1;::::0;;;;::::1;::::0;::::1;6000:25:357::0;;;11516:17:135::1;::::0;;;11562:18:::1;::::0;;::::1;::::0;:30:::1;::::0;5973:18:357;;11562:49:135::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11515:96;;;;;11621:16;11640:9;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11776:17;::::0;11621:40;;-1:-1:-1;11776:17:135::1;11758:12:::0;;::::1;11776:17:::0;::::1;11758:41;11750:87;;;::::0;::::1;::::0;;14432:2:357;11750:87:135::1;::::0;::::1;14414:21:357::0;14471:2;14451:18;;;14444:30;14510:34;14490:18;;;14483:62;14581:3;14561:18;;;14554:31;14602:19;;11750:87:135::1;14230:397:357::0;11750:87:135::1;11977:45;;;::::0;;::::1;::::0;::::1;12005:16:::0;11977:45:::1;:::i;:::-;:27;:45::i;:::-;11957:10:::0;:65:::1;11936:153;;;::::0;::::1;::::0;;15487:2:357;11936:153:135::1;::::0;::::1;15469:21:357::0;15526:2;15506:18;;;15499:30;15565:34;15545:18;;;15538:62;15636:11;15616:18;;;15609:39;15665:19;;11936:153:135::1;15285:405:357::0;11936:153:135::1;12200:22;12225:27;12248:3;12225:22;:27::i;:::-;12200:52:::0;-1:-1:-1;12446:26:135::1;12424:9;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;;;;;;;:::i;:::-;::::0;12403:153:::1;;;::::0;::::1;::::0;;16368:2:357;12403:153:135::1;::::0;::::1;16350:21:357::0;16407:2;16387:18;;;16380:30;16446:34;16426:18;;;16419:62;16517:28;16497:18;;;16490:56;16563:19;;12403:153:135::1;16166:422:357::0;12403:153:135::1;12836:147;::::0;;::::1;::::0;::::1;16767:25:357::0;;;12792:18:135::1;16808::357::0;;;16801:34;;;16740:18;;12836:147:135::1;::::0;;;;;::::1;::::0;;;;;;12813:180;;12836:147:::1;12813:180:::0;;::::1;::::0;13408:22;;::::1;6000:25:357::0;;;12813:180:135;-1:-1:-1;13346:240:135::1;::::0;5973:18:357;13408:22:135::1;::::0;;;;;::::1;::::0;;;13346:240;;::::1;::::0;;;::::1;::::0;;::::1;13408:22;13346:240:::0;::::1;::::0;13408:22;13346:240:::1;13489:16:::0;;13346:240:::1;:::i;:::-;13530:16;:41;;;13346:37;:240::i;:::-;13325:337;;;::::0;::::1;::::0;;18169:2:357;13325:337:135::1;::::0;::::1;18151:21:357::0;18208:2;18188:18;;;18181:30;18247:34;18227:18;;;18220:62;18318:20;18298:18;;;18291:48;18356:19;;13325:337:135::1;17967:414:357::0;13325:337:135::1;14020:85;::::0;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;::::1;14086:15;14020:85:::0;::::1;;::::0;;::::1;::::0;;;-1:-1:-1;13960:33:135;;;:17:::1;:33:::0;;;;;13994:10:::1;13960:45:::0;;;;;;;:145;;;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;;;;;;::::1;::::0;;;14210:10;;::::1;::::0;14198;;::::1;::::0;14165:56;;;;::::1;::::0;;;::::1;::::0;13978:14;;14165:56:::1;::::0;::::1;-1:-1:-1::0;14325:31:135::1;::::0;;;:15:::1;:31;::::0;;;;;;:48;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;::::1;14362:10;14325:48;::::0;;-1:-1:-1;;;;;;;;10816:3564:135:o;8115:94::-;8154:4;8177:16;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21034:3510::-;21131:40;21174:34;;;:17;:34;;;;;;;;:51;;;;;;;;;;;;21131:94;;;;;;;;;;;;;;;;;;;;;;;;;21373:38;;;:20;:38;;;;;;21131:94;;;21373:38;;21372:39;21364:101;;;;;;;18838:2:357;21364:101:135;;;18820:21:357;18877:2;18857:18;;;18850:30;18916:34;18896:18;;;18889:62;18987:19;18967:18;;;18960:47;19024:19;;21364:101:135;18636:413:357;21364:101:135;21728:16;:26;;;:31;;21758:1;21728:31;21707:155;;;;;;;19256:2:357;21707:155:135;;;19238:21:357;19295:2;19275:18;;;19268:30;19334:34;19314:18;;;19307:62;19405:34;19385:18;;;19378:62;19477:15;19456:19;;;19449:44;19510:19;;21707:155:135;19054:481:357;21707:155:135;21873:16;21892:34;:16;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:32;;5038:9:177;4918:145;21892:34:135;21873:53;;22240:9;22211:38;;:16;:26;;;:38;;;22190:163;;;;;;;20029:2:357;22190:163:135;;;20011:21:357;20068:2;20048:18;;;20041:30;20107:34;20087:18;;;20080:62;20178:34;20158:18;;;20151:62;20250:16;20229:19;;;20222:45;20284:19;;22190:163:135;19827:482:357;22190:163:135;22532:28;22503:16;:26;;;22485:44;;:15;:44;;;;:::i;:::-;:75;22464:175;;;;;;;20835:2:357;22464:175:135;;;20817:21:357;20874:2;20854:18;;;20847:30;20913:34;20893:18;;;20886:62;20984:23;20964:18;;;20957:51;21025:19;;22464:175:135;20633:417:357;22464:175:135;22972:24;22943:16;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;;;;;;:::i;:::-;;22922:154;;;;;;;21257:2:357;22922:154:135;;;21239:21:357;21296:2;21276:18;;;21269:30;21335:34;21315:18;;;21308:62;21406:24;21386:18;;;21379:52;21448:19;;22922:154:135;21055:418:357;22922:154:135;23386:17;;;;23349:60;;:33;:16;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:31;;5038:9:177;4918:145;23349:33:135;:60;;;23341:106;;;;;;;14432:2:357;23341:106:135;;;14414:21:357;14471:2;14451:18;;;14444:30;14510:34;14490:18;;;14483:62;14581:3;14561:18;;;14554:31;14602:19;;23341:106:135;14230:397:357;23341:106:135;23722:26;;;;;;;;;23709:39;;;;;23688:161;;;;;;;21989:2:357;23688:161:135;;;21971:21:357;22028:2;22008:18;;;22001:30;22067:34;22047:18;;;22040:62;22138:34;22118:18;;;22111:62;22210:13;22189:19;;;22182:42;22241:19;;23688:161:135;21787:479:357;23688:161:135;24222:35;24184;:16;:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:35;24166:53;;;;:15;:53;:::i;:::-;:91;24145:180;;;;;;;22473:2:357;24145:180:135;;;22455:21:357;22512:2;22492:18;;;22485:30;22551:34;22531:18;;;22524:62;22622:12;22602:18;;;22595:40;22652:19;;24145:180:135;22271:406:357;24145:180:135;24442:37;;;;:20;:37;;;;;;;;24441:38;24433:104;;;;;;;22884:2:357;24433:104:135;;;22866:21:357;22923:2;22903:18;;;22896:30;22962:34;22942:18;;;22935:62;23033:23;23013:18;;;23006:51;23074:19;;24433:104:135;22682:417:357;24433:104:135;21121:3423;;;21034:3510;;:::o;20049:185::-;20143:10;:8;:10::i;:::-;20129:24;;:10;:24;;;20125:51;;20162:14;;;;;;;;;;;;;;20125:51;20186:34;;;;;;:20;:34;;;;;:41;;;;20223:4;20186:41;;;20049:185::o;20481:228::-;20568:10;:8;:10::i;:::-;20554:24;;:10;:24;;;20550:51;;20587:14;;;;;;;;;;;;;;20550:51;20611:17;:29;;;;;;;20650:52;;;;;;;;;20686:15;20650:52;;;;;;20481:228::o;9921:77::-;:::o;14493:178::-;5766:8;:6;:8::i;:::-;5762:33;;;5783:12;;;;;;;;;;;;;;5762:33;14605:59:::1;14648:3;14653:10;14605:42;:59::i;:::-;14493:178:::0;:::o;6730:971::-;3100:19:43;3123:13;;;;;;3122:14;;3168:34;;;;-1:-1:-1;3186:12:43;;3201:1;3186:12;;;;:16;3168:34;3167:97;;;-1:-1:-1;3236:4:43;1465:19:59;:23;;;3208:55:43;;-1:-1:-1;3246:12:43;;;;;:17;3208:55;3146:190;;;;;;;23306:2:357;3146:190:43;;;23288:21:357;23345:2;23325:18;;;23318:30;23384:34;23364:18;;;23357:62;23455:16;23435:18;;;23428:44;23489:19;;3146:190:43;23104:410:357;3146:190:43;3346:12;:16;;;;3361:1;3346:16;;;3372:65;;;;3406:13;:20;;;;;;;;3372:65;6977:18:135::1;:40:::0;;;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;7027:12:::1;:28:::0;;;;::::1;::::0;;::::1;;::::0;;7065:16:::1;:36:::0;;;::::1;6977:40;7065:36:::0;;::::1;;;::::0;;7249:8:::1;::::0;::::1;7245:414;;7287:8;:38:::0;;1338:42:192::1;7287:38:135::0;;;::::1;;::::0;;7485:26:::1;:52:::0;;7603:45;;7485:52;7521:15:::1;7485:52;;;7603:45:::0;;;::::1;::::0;::::1;;::::0;;7245:414:::1;7669:25;:23;:25::i;:::-;3461:14:43::0;3457:99;;;3507:5;3491:21;;;;;;3531:14;;-1:-1:-1;23671:36:357;;3531:14:43;;23659:2:357;23644:18;3531:14:43;;;;;;;3090:472;6730:971:135;;;;:::o;9078:120::-;9143:6;9168:15;:10;9181:2;9168:15;:::i;:::-;:23;;9186:5;9168:23;:::i;:::-;9161:30;9078:120;-1:-1:-1;;9078:120:135:o;4315:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4315:52:135;;-1:-1:-1;4315:52:135:o;1175:320:59:-;1465:19;;;:23;;;1175:320::o;3911:3974:137:-;4078:6;:19;4043:17;;4063:34;;4078:19;;;;;4063:12;:34;:::i;:::-;4043:54;;4108:28;4139:17;:15;:17::i;:::-;4108:48;;4166:26;4265:6;:27;;;4257:36;;4222:6;:23;;;4214:32;;4207:87;;;;:::i;:::-;4166:128;-1:-1:-1;4309:13:137;;4305:2229;;4666:6;:20;4629:19;;4651:59;;4691:19;;4666:20;;;;;4651:59;:::i;:::-;4629:81;;4724:19;4855:6;:34;;;4847:43;;4818:19;:73;;;;:::i;:::-;4762:6;:18;4747:50;;4785:12;;4762:18;;4747:50;:::i;:::-;4746:146;;;;:::i;:::-;5111:6;:18;4724:168;;-1:-1:-1;5033:17:137;;5053:232;;5096:50;;4724:168;;5111:18;;5096:50;:::i;:::-;5185:6;:21;;;5177:30;;5247:6;:21;;;5239:30;;5053:16;:232::i;:::-;5033:252;;5562:1;5550:9;:13;5546:741;;;5835:437;5882:239;5939:10;6004:6;:34;;;5996:43;;6096:1;6084:9;:13;;;;:::i;:::-;5882:16;:239::i;5835:437::-;5822:450;;5546:741;6380:49;;6481:42;6443:24;6510:12;6481:42;;;6380:6;6481:42;-1:-1:-1;;4305:2229:137;6628:6;:31;;6652:7;;6628:6;:20;;:31;;6652:7;;6628:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6728:6;:23;;;6720:32;;6688:6;:20;;;;;;;;;;;;6680:29;;6673:80;6669:128;;;6776:10;;;;;;;;;;;;;;6669:128;6908:6;:18;6858:20;;6881:46;;6908:18;;6881:16;;;:46;:::i;:::-;6858:69;;7409:15;7442:31;7451:13;7466:6;7442:8;:31::i;:::-;7427:46;;:12;:46;:::i;:::-;7409:64;;7753:15;7785:9;7771:23;;:11;:23;:::i;:::-;7753:41;;7818:7;7808;:17;7804:75;;;7841:27;7850:17;7860:7;7850;:17;:::i;:::-;7841:8;:27::i;:::-;3975:3910;;;;;;3911:3974;;:::o;4456:211:196:-;4590:9;;4601:10;;;;;4613;;;;;4625:9;;;;4636:12;;;;4650:8;;;;4579:80;;4543:7;;4579:80;;4590:9;;4601:10;4650:8;4579:80;;:::i;:::-;;;;;;;;;;;;;4569:91;;;;;;4562:98;;4456:211;;;:::o;4419:2320:200:-;4589:4;4609:13;4632:15;4650:21;4660:7;4669:1;4650:9;:21::i;:::-;4632:39;;4782:10;4772:1146;;4894:10;4891:1;4884:21;5009:2;5005;4998:14;5747:56;5743:2;5736:68;5900:3;5896:2;5889:15;4772:1146;6666:4;6630;6589:9;6583:16;6549:2;6538:9;6534:18;6491:6;6449:7;6415:5;6389:309;6361:337;4419:2320;-1:-1:-1;;;;;;;4419:2320:200:o;4961:384:196:-;5060:7;5137:16;:24;;;5179:16;:26;;;5223:16;:41;;;5282:16;:32;;;5109:219;;;;;;;;;;27392:25:357;;;27448:2;27433:18;;27426:34;;;;27491:2;27476:18;;27469:34;27534:2;27519:18;;27512:34;27379:3;27364:19;;27161:391;1041:343:206;1234:11;1261:16;1280:19;1294:4;1280:13;:19::i;:::-;1261:38;;1318:59;1350:3;1355:6;1363;1371:5;1318:31;:59::i;:::-;1309:68;1041:343;-1:-1:-1;;;;;;1041:343:206:o;8340:234:137:-;4888:13:43;;;;;;;4880:69;;;;;;;27759:2:357;4880:69:43;;;27741:21:357;27798:2;27778:18;;;27771:30;27837:34;27817:18;;;27810:62;27908:13;27888:18;;;27881:41;27939:19;;4880:69:43;27557:407:357;4880:69:43;8415:6:137::1;:19:::0;;;::::1;;;;:24:::0;8411:157:::1;;8464:93;::::0;;::::1;::::0;::::1;::::0;;8494:6:::1;8464:93:::0;;;-1:-1:-1;8464:93:137::1;::::0;::::1;::::0;8541:12:::1;8464:93;;::::0;;;;;;;8455:102;::::1;;:6;:102:::0;8340:234::o;10247:152:135:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10363:12:135;;:29;;;;;;;-1:-1:-1;;10363:12:135;;;;;:27;;:29;;;;;-1:-1:-1;;10363:29:135;;;;;;:12;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;537:161:189:-;616:6;641:50;656:28;671:6;679:4;656:14;:28::i;:::-;686:4;641:14;:50::i;:::-;634:57;;537:161;;;;;;:::o;1040:228::-;1138:6;1257:4;1180:72;1213:19;1220:12;1257:4;1213:19;:::i;:::-;1205:28;;:4;:28;:::i;:::-;1235:16;:9;1247:4;1235:16;:::i;:::-;1180:24;:72::i;:::-;1164:89;;:12;:89;:::i;:::-;1163:98;;;;:::i;413:105:69:-;471:7;502:1;497;:6;;:14;;510:1;497:14;;;-1:-1:-1;506:1:69;;490:21;-1:-1:-1;413:105:69:o;407:192:190:-;461:9;484:18;505:9;484:30;;524:69;556:7;544:9;531:22;;:10;:22;:::i;:::-;:32;524:69;;;579:3;;;:::i;:::-;;;524:69;;;451:148;;407:192;:::o;3615:365:200:-;3696:4;3712:15;3931:2;3916:12;3909:5;3905:24;3901:33;3896:2;3887:7;3883:16;3879:56;3874:2;3867:5;3863:14;3860:76;3853:84;;3615:365;-1:-1:-1;;;;3615:365:200:o;2052:142:206:-;2116:18;2181:4;2171:15;;;;;;2154:33;;;;;;29671:19:357;;29715:2;29706:12;;29542:182;2154:33:206;;;;;;;;;;;;;2146:41;;2052:142;;;:::o;2253:281:205:-;2446:11;2482:45;2494:6;2502:24;2506:4;2512:6;2520:5;2502:3;:24::i;:::-;6693:17:191;;;;;;;6672;;;;;;;;;;:38;;6569:148;2482:45:205;2473:54;2253:281;-1:-1:-1;;;;;2253:281:205:o;311:102:71:-;367:6;397:1;392;:6;;:14;;405:1;392:14;;491:101;547:6;576:1;572;:5;:13;;584:1;572:13;;1208:273:106;1267:6;1391:36;491:4;1410:1;1399:8;1405:1;1399:5;:8::i;:::-;:12;;;;:::i;:::-;1398:28;;;;:::i;:::-;1391:6;:36::i;2830:6314:205:-;2923:19;2976:1;2962:4;:11;:15;2954:49;;;;;;;29931:2:357;2954:49:205;;;29913:21:357;29970:2;29950:18;;;29943:30;30009:23;29989:18;;;29982:51;30050:18;;2954:49:205;29729:345:357;2954:49:205;3014:23;3040:19;3052:6;3040:11;:19::i;:::-;3014:45;;3069:16;3088:21;3104:4;3088:15;:21::i;:::-;3069:40;;3119:26;3165:5;3148:23;;;;;;29671:19:357;;29715:2;29706:12;;29542:182;3148:23:205;;;;;;;;;;;;;3119:52;;3181:23;3295:9;3290:5790;3314:5;:12;3310:1;:16;3290:5790;;;3347:27;3377:5;3383:1;3377:8;;;;;;;;:::i;:::-;;;;;;;3347:38;;3516:3;:10;3497:15;:29;;3489:88;;;;;;;30470:2:357;3489:88:205;;;30452:21:357;30509:2;30489:18;;;30482:30;30548:34;30528:18;;;30521:62;30619:16;30599:18;;;30592:44;30653:19;;3489:88:205;30268:410:357;3489:88:205;3596:15;3615:1;3596:20;3592:837;;3768:19;;3758:30;;;;;;;3741:48;;3729:76;;3741:48;;3758:30;3741:48;29671:19:357;;;29715:2;29706:12;;29542:182;3741:48:205;;;;;;;;;;;;;3791:13;6693:17:191;;;;;;;6672;;;;;;;;;;:38;;6569:148;3729:76:205;3700:176;;;;;;;30885:2:357;3700:176:205;;;30867:21:357;30924:2;30904:18;;;30897:30;30963:31;30943:18;;;30936:59;31012:18;;3700:176:205;30683:353:357;3700:176:205;3592:837;;;3901:19;;:26;3931:2;-1:-1:-1;3897:532:205;;4097:19;;4087:30;;;;;;;4070:48;;4058:76;;4070:48;;4087:30;4070:48;29671:19:357;;;29715:2;29706:12;;29542:182;4058:76:205;4029:186;;;;;;;31243:2:357;4029:186:205;;;31225:21:357;31282:2;31262:18;;;31255:30;31321:34;31301:18;;;31294:62;31392:9;31372:18;;;31365:37;31419:19;;4029:186:205;31041:403:357;3897:532:205;4336:19;;6693:17:191;;;;;;;;;;6672;;;;;;;:38;4316:98:205;;;;;;;31651:2:357;4316:98:205;;;31633:21:357;31690:2;31670:18;;;31663:30;31729:34;31709:18;;;31702:62;31800:8;31780:18;;;31773:36;31826:19;;4316:98:205;31449:402:357;4316:98:205;936:14;803:2;949:1;936:14;:::i;:::-;4447:11;:19;;;:26;:48;4443:4627;;4538:3;:10;4519:15;:29;4515:1346;;5047:52;5067:11;:19;;;803:2;5067:31;;;;;;;;:::i;:::-;;;;;;;5047:19;:52::i;:::-;5038:61;;5145:1;5129:6;:13;:17;5121:89;;;;;;;32191:2:357;5121:89:205;;;32173:21:357;32230:2;32210:18;;;32203:30;32269:34;32249:18;;;32242:62;32340:29;32320:18;;;32313:57;32387:19;;5121:89:205;31989:423:357;5121:89:205;5322:1;5307:5;:12;:16;;;;:::i;:::-;5302:1;:21;5294:92;;;;;;;32619:2:357;5294:92:205;;;32601:21:357;32658:2;32638:18;;;32631:30;32697:34;32677:18;;;32670:62;32768:28;32748:18;;;32741:56;32814:19;;5294:92:205;32417:422:357;5294:92:205;5409:13;;;;;;;;4515:1346;5609:15;5633:3;5637:15;5633:20;;;;;;;;:::i;:::-;;;;;;;;;5627:27;;5609:45;;5676:33;5712:11;:19;;;5732:9;5712:30;;;;;;;;;;:::i;:::-;;;;;;;5676:66;;5780:20;5791:8;5780:10;:20::i;:::-;5764:36;-1:-1:-1;5822:20:205;5841:1;5822:20;;:::i;:::-;;;5447:414;;4443:4627;;;1105:1;5885:11;:19;;;:26;:59;5881:3189;;5964:17;5984:25;5997:11;5984:12;:25::i;:::-;5964:45;;6027:12;6048:4;6053:1;6048:7;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;6074:12:205;6094:10;6103:1;6048:7;6094:10;:::i;:::-;6089:16;;:1;:16;:::i;:::-;6074:31;;6123:26;6152:25;6164:4;6170:6;6152:25;;:11;:25::i;:::-;6123:54;;6195:25;6223:33;6235:3;6240:15;6223:11;:33::i;:::-;6195:61;;6274:26;6303:51;6326:13;6341:12;6303:22;:51::i;:::-;6274:80;;6661:18;6637:13;:20;:42;6608:171;;;;;;;33408:2:357;6608:171:205;;;33390:21:357;33447:2;33427:18;;;33420:30;33486:34;33466:18;;;33459:62;33557:28;33537:18;;;33530:56;33603:19;;6608:171:205;33206:422:357;6608:171:205;6802:26;;;1447:1;6802:26;;:55;;-1:-1:-1;6832:25:205;;;1553:1;6832:25;6802:55;6798:2169;;;7498:18;7475:12;:19;:41;7442:185;;;;;;;33835:2:357;7442:185:205;;;33817:21:357;33874:2;33854:18;;;33847:30;33913:34;33893:18;;;33886:62;33984:31;33964:18;;;33957:59;34033:19;;7442:185:205;33633:425:357;7442:185:205;7985:43;8005:11;:19;;;8025:1;8005:22;;;;;;;;:::i;7985:43::-;7976:52;;8074:1;8058:6;:13;:17;8050:87;;;;;;;34265:2:357;8050:87:205;;;34247:21:357;34304:2;34284:18;;;34277:30;34343:34;34323:18;;;34316:62;34414:27;34394:18;;;34387:55;34459:19;;8050:87:205;34063:421:357;8050:87:205;8249:1;8234:5;:12;:16;;;;:::i;:::-;8229:1;:21;8221:90;;;;;;;34691:2:357;8221:90:205;;;34673:21:357;34730:2;34710:18;;;34703:30;34769:34;34749:18;;;34742:62;34840:26;34820:18;;;34813:54;34884:19;;8221:90:205;34489:420:357;8221:90:205;8334:13;;;;;;;;;;;;;;6798:2169;8376:31;;;;;:65;;-1:-1:-1;8411:30:205;;;1339:1;8411:30;8376:65;8372:595;;;8748:34;8759:11;:19;;;8779:1;8759:22;;;;;;;;:::i;:::-;;;;;;;8748:10;:34::i;:::-;8732:50;-1:-1:-1;8804:37:205;8823:18;8804:37;;:::i;:::-;;;8372:595;;;8888:60;;;;;35116:2:357;8888:60:205;;;35098:21:357;35155:2;35135:18;;;35128:30;35194:34;35174:18;;;35167:62;35265:20;35245:18;;;35238:48;35303:19;;8888:60:205;34914:414:357;8372:595:205;5946:3035;;;;;;5881:3189;;;9005:50;;;;;35535:2:357;9005:50:205;;;35517:21:357;35574:2;35554:18;;;35547:30;35613:34;35593:18;;;35586:62;35684:10;35664:18;;;35657:38;35712:19;;9005:50:205;35333:404:357;5881:3189:205;-1:-1:-1;3328:3:205;;;;:::i;:::-;;;;3290:5790;;;-1:-1:-1;9090:47:205;;;;;35944:2:357;9090:47:205;;;35926:21:357;35983:2;35963:18;;;35956:30;36022:34;36002:18;;;35995:62;36093:7;36073:18;;;36066:35;36118:19;;9090:47:205;35742:401:357;4596:2947:106;4644:8;4700:1;4696;:5;4688:27;;;;;;;36350:2:357;4688:27:106;;;36332:21:357;36389:1;36369:18;;;36362:29;36427:11;36407:18;;;36400:39;36456:18;;4688:27:106;36148:332:357;4688:27:106;5107:8;5145:2;5125:16;5138:1;5125:4;:16::i;:::-;5118:29;5175:3;:7;;;5161:22;;;;5208:17;;;6001:31;5997:35;;6052:5;;5459:2;6051:13;;;6068:32;6050:50;6120:5;;6119:13;;6136:33;6118:51;6189:5;;6188:13;;6205:33;6187:51;6258:5;;6257:13;;6274:33;6256:51;6327:5;;6326:13;;6343:32;6325:50;6395:5;;6394:13;;6411:30;6393:48;5398:31;5394:35;;5449:5;;5448:13;;5465:32;5447:50;5517:5;;5516:13;;5533:32;5515:50;5585:5;;5584:13;;5583:50;;5653:5;;5652:13;;5651:50;;5721:5;;5720:13;;;5719:50;;5787:5;;;:46;;6735:10;7125:43;7120:48;7232:71;:75;;;;7227:80;;;;7380:72;7375:77;7523:3;7517:9;;;-1:-1:-1;;4596:2947:106:o;1487:3103::-;1536:8;1718:21;1713:1;:26;1709:40;;-1:-1:-1;1748:1:106;;1487:3103;-1:-1:-1;1487:3103:106:o;1709:40::-;1948:21;1943:1;:26;1939:54;;1971:22;;;;;36687:2:357;1971:22:106;;;36669:21:357;36726:2;36706:18;;;36699:30;36765:14;36745:18;;;36738:42;36797:18;;1971:22:106;36485:336:357;1939:54:106;2266:5;2260:2;2255:7;;;2254:17;;-1:-1:-1;2535:8:106;2601:2;2559:29;2548:7;;;2547:41;2591:5;2547:49;2546:57;;2629:29;2625:33;;2621:37;;;3300:35;;;3355:5;;2935:2;3354:13;;;3371:32;3353:50;3423:5;;3422:13;;3421:51;;3492:5;;3491:13;;3508:34;3490:52;3562:5;;3561:13;;3560:53;;3633:5;;3632:13;;3649:35;3631:53;2941:32;2874:31;2870:35;;2925:5;;2924:13;;2923:50;;;2998:5;;;:40;;3058:5;3057:13;;;3074:35;3056:53;3127:5;;;3136:40;3127:50;4002:10;4502:49;4489:62;4564:3;:7;;;;4488:84;;;;;;-1:-1:-1;;1487:3103:106:o;9434:390:205:-;9553:13;;9500:24;;9553:13;9585:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;9585:22:205;;;;;;;;;;;;;;;;9576:31;;9622:9;9617:201;9641:6;9637:1;:10;9617:201;;;9676:72;;;;;;;;9696:6;9703:1;9696:9;;;;;;;;:::i;:::-;;;;;;;9676:72;;;;9716:29;9735:6;9742:1;9735:9;;;;;;;;:::i;:::-;;;;;;;9716:18;:29::i;:::-;9676:72;;;9664:6;9671:1;9664:9;;;;;;;;:::i;:::-;;;;;;;;;;:84;9790:3;;9617:201;;;;9526:298;9434:390;;;:::o;4332:1978:191:-;4395:12;4419:21;4550:4;4544:11;4532:23;;4663:6;4657:13;4836:11;4830:4;4826:22;5195:4;5180:13;5176:24;5169:4;5165:9;5161:40;5151:8;5147:55;5141:4;5134:69;5293:13;5283:8;5276:31;;5434:4;5426:6;5422:17;5571:4;5561:8;5557:19;5662:4;5647:622;5675:11;5672:1;5669:18;5647:622;;;5854:1;5848:4;5844:12;5830;5826:31;5996:1;5984:10;5980:18;5974:25;5968:4;5963:37;6119:1;6113:4;6109:12;6101:6;6093:29;6249:4;6246:1;6242:12;6235:4;6227:6;6223:17;6215:40;-1:-1:-1;;5702:4:191;5695:12;5647:622;;;-1:-1:-1;6295:8:191;;4332:1978;-1:-1:-1;;;;;4332:1978:191:o;3993:464:203:-;4055:17;4085:18;4105;4125:20;4149:18;4163:3;4149:13;:18::i;:::-;4084:83;;-1:-1:-1;4084:83:203;-1:-1:-1;4084:83:203;-1:-1:-1;4198:21:203;4186:8;:33;;;;;;;;:::i;:::-;;4178:103;;;;;;;37028:2:357;4178:103:203;;;37010:21:357;37067:2;37047:18;;;37040:30;37106:34;37086:18;;;37079:62;37177:27;37157:18;;;37150:55;37222:19;;4178:103:203;36826:421:357;4178:103:203;4314:23;4327:10;4314;:23;:::i;:::-;4300:10;;:37;4292:102;;;;;;;37454:2:357;4292:102:203;;;37436:21:357;37493:2;37473:18;;;37466:30;37532:34;37512:18;;;37505:62;37603:22;37583:18;;;37576:50;37643:19;;4292:102:203;37252:416:357;4292:102:203;4412:38;4418:3;:7;;;4427:10;4439;4412:5;:38::i;10121:193:205:-;10195:16;10244:2;10229:5;:12;;;:17;:78;;10281:26;10301:5;10281:19;:26::i;:::-;10229:78;;;10249:29;10272:5;10249:22;:29::i;10495:172::-;10562:21;10606:54;10622:37;10642:5;:13;;;10656:1;10642:16;;;;;;;;:::i;10622:37::-;10606:15;:54::i;3805:237:191:-;3880:12;3918:6;:13;3908:6;:23;3904:70;;-1:-1:-1;3954:9:191;;;;;;;;;-1:-1:-1;3954:9:191;;3947:16;;3904:70;3990:45;3996:6;4004;4028;4012;:13;:22;;;;:::i;:::-;3990:5;:45::i;10892:321:205:-;10980:15;11007:11;11034:2;:9;11022:2;:9;:21;11021:47;;11059:2;:9;11021:47;;;11047:2;:9;11021:47;11007:61;;11078:129;11095:3;11085:7;:13;:43;;;;;11117:2;11120:7;11117:11;;;;;;;;:::i;:::-;;;;;;;;;11102:26;;;:2;11105:7;11102:11;;;;;;;;:::i;:::-;;;;;;;:26;11085:43;11078:129;;;11173:9;;;;;11078:129;;;10997:216;10892:321;;;;:::o;15328:575:106:-;15376:9;15409:1;15405;:5;15397:27;;;;;;;36350:2:357;15397:27:106;;;36332:21:357;36389:1;36369:18;;;36362:29;36427:11;36407:18;;;36400:39;36456:18;;15397:27:106;36148:332:357;15397:27:106;-1:-1:-1;15821:1:106;15473:34;-1:-1:-1;;15467:1:106;15463:49;15566:9;;;15546:18;15543:33;15540:1;15536:41;15530:48;15624:9;;;15612:10;15609:25;15606:1;15602:33;15596:40;15678:9;;;15670:6;15667:21;15664:1;15660:29;15654:36;15730:9;;;15724:4;15721:19;15718:1;15714:27;;;15708:34;;;15781:9;;;15776:3;15773:18;15770:1;15766:26;15760:33;15832:9;;;15824:18;;;15817:26;;15811:33;15876:9;;;-1:-1:-1;15862:25:106;;15328:575::o;3732:130:203:-;3791:21;3831:24;3840:14;3850:3;3840:9;:14::i;:::-;3831:8;:24::i;5246:4079::-;5335:15;5352;5369:17;5705:1;5692:3;:10;;;:14;5684:101;;;;;;;37875:2:357;5684:101:203;;;37857:21:357;37914:2;37894:18;;;37887:30;37953:34;37933:18;;;37926:62;38024:34;38004:18;;;37997:62;38096:12;38075:19;;;38068:41;38126:19;;5684:101:203;37673:478:357;5684:101:203;5816:7;;;;5898:10;;5796:17;5890:19;5943:4;5933:14;;5929:3390;;5999:1;6002;6005:21;5991:36;;;;;;;;;;5929:3390;6058:4;6048:6;:14;6044:3275;;6164:14;6181:13;6190:4;6181:6;:13;:::i;:::-;6164:30;;6247:6;6234:3;:10;;;:19;6209:140;;;;;;;38358:2:357;6209:140:203;;;38340:21:357;38397:2;38377:18;;;38370:30;38436:34;38416:18;;;38409:62;38507:34;38487:18;;;38480:62;38579:16;38558:19;;;38551:45;38613:19;;6209:140:203;38156:482:357;6209:140:203;6471:1;6462:11;;;6456:18;6476:14;6452:39;;6544:11;;;;:41;;-1:-1:-1;6559:26:203;;;;;;6544:41;6519:177;;;;;;;38845:2:357;6519:177:203;;;38827:21:357;38884:2;38864:18;;;38857:30;38923:34;38903:18;;;38896:62;38994:34;38974:18;;;38967:62;39066:15;39045:19;;;39038:44;39099:19;;6519:177:203;38643:481:357;6519:177:203;-1:-1:-1;6719:1:203;;-1:-1:-1;6722:6:203;-1:-1:-1;6730:21:203;;-1:-1:-1;6711:41:203;;-1:-1:-1;;6711:41:203;6044:3275;6783:4;6773:6;:14;6769:2550;;6831:19;6853:13;6862:4;6853:6;:13;:::i;:::-;6831:35;;6919:11;6906:3;:10;;;:24;6881:164;;;;;;;39331:2:357;6881:164:203;;;39313:21:357;39370:2;39350:18;;;39343:30;39409:34;39389:18;;;39382:62;39480:34;39460:18;;;39453:62;39552:19;39531;;;39524:48;39589:19;;6881:164:203;39129:485:357;6881:164:203;7167:1;7158:11;;7152:18;7172:14;7148:39;7060:25;7240:26;;;7215:143;;;;;;;39821:2:357;7215:143:203;;;39803:21:357;39860:2;39840:18;;;39833:30;39899:34;39879:18;;;39872:62;39970:34;39950:18;;;39943:62;40042:12;40021:19;;;40014:41;40072:19;;7215:143:203;39619:478:357;7215:143:203;7488:1;7479:11;;7473:18;7455:1;7451:19;;7446:3;7442:29;7438:54;7537:2;7528:11;;7520:96;;;;;;;40304:2:357;7520:96:203;;;40286:21:357;40343:2;40323:18;;;40316:30;40382:34;40362:18;;;40355:62;40453:34;40433:18;;;40426:62;40525:10;40504:19;;;40497:39;40553:19;;7520:96:203;40102:476:357;7520:96:203;7669:20;7683:6;7669:11;:20;:::i;:::-;7656:10;;:33;7631:168;;;;;;;40785:2:357;7631:168:203;;;40767:21:357;40824:2;40804:18;;;40797:30;40863:34;40843:18;;;40836:62;40934:34;40914:18;;;40907:62;41006:14;40985:19;;;40978:43;41038:19;;7631:168:203;40583:480:357;7631:168:203;7822:15;7826:11;7822:1;:15;:::i;:::-;7814:55;-1:-1:-1;7839:6:203;-1:-1:-1;7847:21:203;;-1:-1:-1;7814:55:203;;-1:-1:-1;;;;7814:55:203;6769:2550;7900:4;7890:6;:14;7886:1433;;8003:15;8021:13;8030:4;8021:6;:13;:::i;:::-;8003:31;;8070:7;8057:3;:10;;;:20;8049:107;;;;;;;41270:2:357;8049:107:203;;;41252:21:357;41309:2;41289:18;;;41282:30;41348:34;41328:18;;;41321:62;41419:34;41399:18;;;41392:62;41491:12;41470:19;;;41463:41;41521:19;;8049:107:203;41068:478:357;8049:107:203;8179:1;;-1:-1:-1;8182:7:203;-1:-1:-1;8179:1:203;;-1:-1:-1;8171:42:203;;-1:-1:-1;;8171:42:203;7886:1433;8270:20;8293:13;8302:4;8293:6;:13;:::i;:::-;8270:36;;8359:12;8346:3;:10;;;:25;8321:161;;;;;;;41753:2:357;8321:161:203;;;41735:21:357;41792:2;41772:18;;;41765:30;41831:34;41811:18;;;41804:62;41902:34;41882:18;;;41875:62;41974:15;41953:19;;;41946:44;42007:19;;8321:161:203;41551:481:357;8321:161:203;8604:1;8595:11;;8589:18;8609:14;8585:39;8497:25;8677:26;;;8652:141;;;;;;;42239:2:357;8652:141:203;;;42221:21:357;42278:2;42258:18;;;42251:30;42317:34;42297:18;;;42290:62;42388:34;42368:18;;;42361:62;42460:10;42439:19;;;42432:39;42488:19;;8652:141:203;42037:476:357;8652:141:203;8926:1;8917:11;;8911:18;8892:1;8888:20;;8883:3;8879:30;8875:55;8976:2;8966:12;;8958:95;;;;;;;42720:2:357;8958:95:203;;;42702:21:357;42759:2;42739:18;;;42732:30;42798:34;42778:18;;;42771:62;42869:34;42849:18;;;42842:62;42941:8;42920:19;;;42913:37;42967:19;;8958:95:203;42518:474:357;8958:95:203;9106:22;9121:7;9106:12;:22;:::i;:::-;9093:10;;:35;9068:168;;;;;;;43199:2:357;9068:168:203;;;43181:21:357;43238:2;43218:18;;;43211:30;43277:34;43257:18;;;43250:62;43348:34;43328:18;;;43321:62;43420:12;43399:19;;;43392:41;43450:19;;9068:168:203;42997:478:357;9068:168:203;9259:16;9263:12;9259:1;:16;:::i;:::-;9251:57;-1:-1:-1;9277:7:203;-1:-1:-1;9286:21:203;;-1:-1:-1;9251:57:203;;-1:-1:-1;;;;9251:57:203;5246:4079;;;;;;:::o;9585:737::-;9676:17;9722:7;9712:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9712:18:203;-1:-1:-1;9705:25:203;-1:-1:-1;9740:54:203;;9772:11;9740:54;10010:11;10024:36;10053:7;10045:4;10024:36;:::i;:::-;10010:50;;10115:2;10109:4;10105:13;10140:1;10154:87;10168:7;10165:1;10162:14;10154:87;;;10226:11;;;10220:18;10206:12;;;10199:40;10191:2;10184:10;10154:87;;;10264:7;10261:1;10258:14;10255:51;;;10302:1;10292:7;10286:4;10282:18;10275:29;10255:51;;;10079:237;9585:737;;;;;:::o;4847:137::-;4912:17;4948:29;4954:3;:7;;;4963:1;4966:3;:10;;;4948:5;:29::i;660:2816:191:-;752:12;824:7;808;818:2;808:12;:23;;800:50;;;;;;;43682:2:357;800:50:191;;;43664:21:357;43721:2;43701:18;;;43694:30;43760:16;43740:18;;;43733:44;43794:18;;800:50:191;43480:338:357;800:50:191;892:6;881:7;872:6;:16;:26;;864:53;;;;;;;43682:2:357;864:53:191;;;43664:21:357;43721:2;43701:18;;;43694:30;43760:16;43740:18;;;43733:44;43794:18;;864:53:191;43480:338:357;864:53:191;965:7;956:6;:16;939:6;:13;:33;;931:63;;;;;;;44025:2:357;931:63:191;;;44007:21:357;44064:2;44044:18;;;44037:30;44103:19;44083:18;;;44076:47;44140:18;;931:63:191;43823:341:357;931:63:191;1015:22;1078:15;;1106:1931;;;;3178:4;3172:11;3159:24;;3365:1;3354:9;3347:20;3413:4;3402:9;3398:20;3392:4;3385:34;1071:2362;;1106:1931;1288:4;1282:11;1269:24;;1947:2;1938:7;1934:16;2329:9;2322:17;2316:4;2312:28;2300:9;2289;2285:25;2281:60;2377:7;2373:2;2369:16;2629:6;2615:9;2608:17;2602:4;2598:28;2586:9;2578:6;2574:22;2570:57;2566:70;2403:389;2662:3;2658:2;2655:11;2403:389;;;2780:9;;2769:21;;2703:4;2695:13;;;;2735;2403:389;;;-1:-1:-1;;2810:26:191;;;3018:2;3001:11;3014:7;2997:25;2991:4;2984:39;-1:-1:-1;1071:2362:191;-1:-1:-1;3460:9:191;660:2816;-1:-1:-1;;;;660:2816:191:o;1298:390:203:-;-1:-1:-1;;;;;;;;;;;;;;;;;1453:1:203;1440:3;:10;:14;1432:101;;;;;;;37875:2:357;1432:101:203;;;37857:21:357;37914:2;37894:18;;;37887:30;37953:34;37933:18;;;37926:62;38024:34;38004:18;;;37997:62;38096:12;38075:19;;;38068:41;38126:19;;1432:101:203;37673:478:357;1432:101:203;-1:-1:-1;1640:41:203;;;;;;;;;1658:10;;1640:41;;1610:2;1601:12;;;1640:41;;;;;;;;1298:390::o;1840:1740::-;1901:21;1935:18;1955;1975:20;1999:18;2013:3;1999:13;:18::i;:::-;1934:83;;-1:-1:-1;1934:83:203;-1:-1:-1;1934:83:203;-1:-1:-1;2048:21:203;2036:8;:33;;;;;;;;:::i;:::-;;2028:102;;;;;;;44371:2:357;2028:102:203;;;44353:21:357;44410:2;44390:18;;;44383:30;44449:34;44429:18;;;44422:62;44520:26;44500:18;;;44493:54;44564:19;;2028:102:203;44169:420:357;2028:102:203;2176:10;;2149:23;2162:10;2149;:23;:::i;:::-;:37;2141:100;;;;;;;44796:2:357;2141:100:203;;;44778:21:357;44835:2;44815:18;;;44808:30;44874:34;44854:18;;;44847:62;44945:20;44925:18;;;44918:48;44983:19;;2141:100:203;44594:414:357;2141:100:203;2651:30;;;1123:2;2651:30;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;2651:30:203;;;;;;;;;;;;;;-1:-1:-1;2644:37:203;-1:-1:-1;2692:17:203;2740:10;2760:681;2776:10;;2767:19;;2760:681;;;2803:18;2823;2846:150;2877:105;;;;;;;;2908:6;2895:3;:10;;;:19;;;;:::i;:::-;2877:105;;;;2972:6;2961:3;:7;;;2940:38;;;;:::i;:::-;2877:105;;2846:13;:150::i;:::-;2802:194;;;;;3201:153;;;;;;;;3248:10;3235;:23;;;;:::i;:::-;3201:153;;;;3332:6;3321:3;:7;;;3300:38;;;;:::i;:::-;3201:153;;;3183:4;3188:9;3183:15;;;;;;;;:::i;:::-;;;;;;;;;;:171;3369:14;3382:1;3369:14;;:::i;:::-;;-1:-1:-1;3407:23:203;3420:10;3407;:23;:::i;:::-;3397:33;;;;:::i;:::-;;;2788:653;;2760:681;;;-1:-1:-1;3541:23:203;;-1:-1:-1;3548:4:203;;1840:1740;-1:-1:-1;;;1840:1740:203:o;753:184:357:-;805:77;802:1;795:88;902:4;899:1;892:15;926:4;923:1;916:15;942:334;1013:2;1007:9;1069:2;1059:13;;1074:66;1055:86;1043:99;;1172:18;1157:34;;1193:22;;;1154:62;1151:88;;;1219:18;;:::i;:::-;1255:2;1248:22;942:334;;-1:-1:-1;942:334:357:o;1281:154::-;1367:42;1360:5;1356:54;1349:5;1346:65;1336:93;;1425:1;1422;1415:12;1440:589;1482:5;1535:3;1528:4;1520:6;1516:17;1512:27;1502:55;;1553:1;1550;1543:12;1502:55;1589:6;1576:20;1615:18;1611:2;1608:26;1605:52;;;1637:18;;:::i;:::-;1681:114;1789:4;1720:66;1713:4;1709:2;1705:13;1701:86;1697:97;1681:114;:::i;:::-;1820:2;1811:7;1804:19;1866:3;1859:4;1854:2;1846:6;1842:15;1838:26;1835:35;1832:55;;;1883:1;1880;1873:12;1832:55;1948:2;1941:4;1933:6;1929:17;1922:4;1913:7;1909:18;1896:55;1996:1;1971:16;;;1989:4;1967:27;1960:38;;;;1975:7;1440:589;-1:-1:-1;;;1440:589:357:o;2034:1032::-;2102:5;2150:4;2138:9;2133:3;2129:19;2125:30;2122:50;;;2168:1;2165;2158:12;2122:50;2201:2;2195:9;2243:4;2235:6;2231:17;2267:18;2335:6;2323:10;2320:22;2315:2;2303:10;2300:18;2297:46;2294:72;;;2346:18;;:::i;:::-;2386:10;2382:2;2375:22;2415:6;2406:15;;2458:9;2445:23;2437:6;2430:39;2521:2;2510:9;2506:18;2493:32;2478:47;;2534:33;2559:7;2534:33;:::i;:::-;2600:7;2595:2;2587:6;2583:15;2576:32;2660:2;2649:9;2645:18;2632:32;2617:47;;2673:33;2698:7;2673:33;:::i;:::-;2739:7;2734:2;2726:6;2722:15;2715:32;2808:2;2797:9;2793:18;2780:32;2775:2;2767:6;2763:15;2756:57;2875:3;2864:9;2860:19;2847:33;2841:3;2833:6;2829:16;2822:59;2932:3;2921:9;2917:19;2904:33;2890:47;;2960:2;2952:6;2949:14;2946:34;;;2976:1;2973;2966:12;2946:34;;3014:45;3055:3;3046:6;3035:9;3031:22;3014:45;:::i;:::-;3008:3;3000:6;2996:16;2989:71;;;2034:1032;;;;:::o;3071:510::-;3180:6;3188;3241:2;3229:9;3220:7;3216:23;3212:32;3209:52;;;3257:1;3254;3247:12;3209:52;3297:9;3284:23;3330:18;3322:6;3319:30;3316:50;;;3362:1;3359;3352:12;3316:50;3385:72;3449:7;3440:6;3429:9;3425:22;3385:72;:::i;:::-;3375:82;;;3507:2;3496:9;3492:18;3479:32;3520:31;3545:5;3520:31;:::i;:::-;3570:5;3560:15;;;3071:510;;;;;:::o;3817:270::-;3899:6;3952:2;3940:9;3931:7;3927:23;3923:32;3920:52;;;3968:1;3965;3958:12;3920:52;4007:9;3994:23;4026:31;4051:5;4026:31;:::i;4284:1175::-;4486:6;4494;4502;4510;4518;4562:9;4553:7;4549:23;4592:3;4588:2;4584:12;4581:32;;;4609:1;4606;4599:12;4581:32;4649:9;4636:23;4678:18;4719:2;4711:6;4708:14;4705:34;;;4735:1;4732;4725:12;4705:34;4758:72;4822:7;4813:6;4802:9;4798:22;4758:72;:::i;:::-;4748:82;;4877:2;4866:9;4862:18;4849:32;4839:42;;4974:3;4905:66;4901:2;4897:75;4893:85;4890:105;;;4991:1;4988;4981:12;4890:105;5029:2;5018:9;5014:18;5004:28;;5085:3;5074:9;5070:19;5057:33;5041:49;;5115:2;5105:8;5102:16;5099:36;;;5131:1;5128;5121:12;5099:36;5169:8;5158:9;5154:24;5144:34;;5216:7;5209:4;5205:2;5201:13;5197:27;5187:55;;5238:1;5235;5228:12;5187:55;5278:2;5265:16;5251:30;;5304:2;5296:6;5293:14;5290:34;;;5320:1;5317;5310:12;5290:34;;5373:7;5368:2;5358:6;5355:1;5351:14;5347:2;5343:23;5339:32;5336:45;5333:65;;;5394:1;5391;5384:12;5333:65;4284:1175;;;;-1:-1:-1;4284:1175:357;;-1:-1:-1;;;5425:2:357;5417:11;;5447:6;4284:1175::o;5669:180::-;5728:6;5781:2;5769:9;5760:7;5756:23;5752:32;5749:52;;;5797:1;5794;5787:12;5749:52;-1:-1:-1;5820:23:357;;5669:180;-1:-1:-1;5669:180:357:o;6036:258::-;6108:1;6118:113;6132:6;6129:1;6126:13;6118:113;;;6208:11;;;6202:18;6189:11;;;6182:39;6154:2;6147:10;6118:113;;;6249:6;6246:1;6243:13;6240:48;;;-1:-1:-1;;6284:1:357;6266:16;;6259:27;6036:258::o;6299:317::-;6341:3;6379:5;6373:12;6406:6;6401:3;6394:19;6422:63;6478:6;6471:4;6466:3;6462:14;6455:4;6448:5;6444:16;6422:63;:::i;:::-;6530:2;6518:15;6535:66;6514:88;6505:98;;;;6605:4;6501:109;;6299:317;-1:-1:-1;;6299:317:357:o;6621:220::-;6770:2;6759:9;6752:21;6733:4;6790:45;6831:2;6820:9;6816:18;6808:6;6790:45;:::i;6846:315::-;6914:6;6922;6975:2;6963:9;6954:7;6950:23;6946:32;6943:52;;;6991:1;6988;6981:12;6943:52;7027:9;7014:23;7004:33;;7087:2;7076:9;7072:18;7059:32;7100:31;7125:5;7100:31;:::i;7166:144::-;7274:10;7267:5;7263:22;7256:5;7253:33;7243:61;;7300:1;7297;7290:12;7315:300;7405:6;7458:2;7446:9;7437:7;7433:23;7429:32;7426:52;;;7474:1;7471;7464:12;7426:52;7513:9;7500:23;7532:53;7579:5;7532:53;:::i;7620:375::-;7720:6;7773:2;7761:9;7752:7;7748:23;7744:32;7741:52;;;7789:1;7786;7779:12;7741:52;7829:9;7816:23;7862:18;7854:6;7851:30;7848:50;;;7894:1;7891;7884:12;7848:50;7917:72;7981:7;7972:6;7961:9;7957:22;7917:72;:::i;:::-;7907:82;7620:375;-1:-1:-1;;;;7620:375:357:o;8000:800::-;8193:6;8201;8209;8217;8270:3;8258:9;8249:7;8245:23;8241:33;8238:53;;;8287:1;8284;8277:12;8238:53;8326:9;8313:23;8345:31;8370:5;8345:31;:::i;:::-;8395:5;-1:-1:-1;8452:2:357;8437:18;;8424:32;8465:33;8424:32;8465:33;:::i;:::-;8517:7;-1:-1:-1;8576:2:357;8561:18;;8548:32;8589:33;8548:32;8589:33;:::i;:::-;8641:7;-1:-1:-1;8700:2:357;8685:18;;8672:32;8713:55;8672:32;8713:55;:::i;:::-;8000:800;;;;-1:-1:-1;8000:800:357;;-1:-1:-1;;8000:800:357:o;8805:129::-;8890:18;8883:5;8879:30;8872:5;8869:41;8859:69;;8924:1;8921;8914:12;8939:245;8997:6;9050:2;9038:9;9029:7;9025:23;9021:32;9018:52;;;9066:1;9063;9056:12;9018:52;9105:9;9092:23;9124:30;9148:5;9124:30;:::i;9189:248::-;9257:6;9265;9318:2;9306:9;9297:7;9293:23;9289:32;9286:52;;;9334:1;9331;9324:12;9286:52;-1:-1:-1;;9357:23:357;;;9427:2;9412:18;;;9399:32;;-1:-1:-1;9189:248:357:o;10206:118::-;10292:5;10285:13;10278:21;10271:5;10268:32;10258:60;;10314:1;10311;10304:12;10329:799;10429:6;10437;10445;10453;10461;10514:3;10502:9;10493:7;10489:23;10485:33;10482:53;;;10531:1;10528;10521:12;10482:53;10570:9;10557:23;10589:31;10614:5;10589:31;:::i;:::-;10639:5;-1:-1:-1;10691:2:357;10676:18;;10663:32;;-1:-1:-1;10747:2:357;10732:18;;10719:32;10760;10719;10760;:::i;:::-;10811:7;-1:-1:-1;10870:2:357;10855:18;;10842:32;10883:30;10842:32;10883:30;:::i;:::-;10932:7;-1:-1:-1;10990:3:357;10975:19;;10962:33;11018:18;11007:30;;11004:50;;;11050:1;11047;11040:12;11004:50;11073:49;11114:7;11105:6;11094:9;11090:22;11073:49;:::i;:::-;11063:59;;;10329:799;;;;;;;;:::o;11392:642::-;11655:6;11650:3;11643:19;11692:6;11687:2;11682:3;11678:12;11671:28;11751:66;11742:6;11737:3;11733:16;11729:89;11724:2;11719:3;11715:12;11708:111;11872:6;11865:14;11858:22;11853:3;11849:32;11844:2;11839:3;11835:12;11828:54;11625:3;11911:6;11905:13;11927:60;11980:6;11975:2;11970:3;11966:12;11961:2;11953:6;11949:15;11927:60;:::i;:::-;12007:16;;;;12025:2;12003:25;;11392:642;-1:-1:-1;;;;;;11392:642:357:o;12694:251::-;12764:6;12817:2;12805:9;12796:7;12792:23;12788:32;12785:52;;;12833:1;12830;12823:12;12785:52;12865:9;12859:16;12884:31;12909:5;12884:31;:::i;13382:626::-;13556:6;13564;13572;13625:2;13613:9;13604:7;13600:23;13596:32;13593:52;;;13641:1;13638;13631:12;13593:52;13673:9;13667:16;13692:53;13739:5;13692:53;:::i;:::-;13814:2;13799:18;;13793:25;13764:5;;-1:-1:-1;13827:32:357;13793:25;13827:32;:::i;:::-;13930:2;13915:18;;13909:25;13878:7;;-1:-1:-1;13943:33:357;13909:25;13943:33;:::i;:::-;13995:7;13985:17;;;13382:626;;;;;:::o;14013:212::-;14111:6;14164:2;14152:9;14143:7;14139:23;14135:32;14132:52;;;14180:1;14177;14170:12;14132:52;-1:-1:-1;14203:16:357;;14013:212;-1:-1:-1;14013:212:357:o;14632:648::-;14726:6;14779:3;14767:9;14758:7;14754:23;14750:33;14747:53;;;14796:1;14793;14786:12;14747:53;14829:2;14823:9;14871:3;14863:6;14859:16;14941:6;14929:10;14926:22;14905:18;14893:10;14890:34;14887:62;14884:88;;;14952:18;;:::i;:::-;14992:10;14988:2;14981:22;;15040:9;15027:23;15019:6;15012:39;15112:2;15101:9;15097:18;15084:32;15079:2;15071:6;15067:15;15060:57;15178:2;15167:9;15163:18;15150:32;15145:2;15137:6;15133:15;15126:57;15244:2;15233:9;15229:18;15216:32;15211:2;15203:6;15199:15;15192:57;15268:6;15258:16;;;14632:648;;;;:::o;15695:184::-;15747:77;15744:1;15737:88;15844:4;15841:1;15834:15;15868:4;15865:1;15858:15;15884:277;15971:6;16024:2;16012:9;16003:7;15999:23;15995:32;15992:52;;;16040:1;16037;16030:12;15992:52;16072:9;16066:16;16111:1;16104:5;16101:12;16091:40;;16127:1;16124;16117:12;17028:934;17164:9;17198:18;17239:2;17231:6;17228:14;17225:40;;;17245:18;;:::i;:::-;17291:6;17288:1;17284:14;17317:4;17341:28;17365:2;17361;17357:11;17341:28;:::i;:::-;17403:19;;;17473:14;;;;17438:12;;;;17510:14;17499:26;;17496:46;;;17538:1;17535;17528:12;17496:46;17562:5;17576:353;17592:6;17587:3;17584:15;17576:353;;;17678:3;17665:17;17714:2;17701:11;17698:19;17695:109;;;17758:1;17787:2;17783;17776:14;17695:109;17829:57;17871:14;17857:11;17850:5;17846:23;17829:57;:::i;:::-;17817:70;;-1:-1:-1;17907:12:357;;;;17609;;17576:353;;;-1:-1:-1;17951:5:357;17028:934;-1:-1:-1;;;;;;;17028:934:357:o;18386:245::-;18453:6;18506:2;18494:9;18485:7;18481:23;18477:32;18474:52;;;18522:1;18519;18512:12;18474:52;18554:9;18548:16;18573:28;18595:5;18573:28;:::i;19540:282::-;19642:6;19695:2;19683:9;19674:7;19670:23;19666:32;19663:52;;;19711:1;19708;19701:12;19663:52;19743:9;19737:16;19762:30;19786:5;19762:30;:::i;20314:184::-;20366:77;20363:1;20356:88;20463:4;20460:1;20453:15;20487:4;20484:1;20477:15;20503:125;20543:4;20571:1;20568;20565:8;20562:34;;;20576:18;;:::i;:::-;-1:-1:-1;20613:9:357;;20503:125::o;21478:304::-;21579:6;21632:2;21620:9;21611:7;21607:23;21603:32;21600:52;;;21648:1;21645;21638:12;21600:52;21680:9;21674:16;21699:53;21746:5;21699:53;:::i;23718:270::-;23757:7;23789:18;23834:2;23831:1;23827:10;23864:2;23861:1;23857:10;23920:3;23916:2;23912:12;23907:3;23904:21;23897:3;23890:11;23883:19;23879:47;23876:73;;;23929:18;;:::i;:::-;23969:13;;23718:270;-1:-1:-1;;;;23718:270:357:o;23993:236::-;24032:3;24060:18;24105:2;24102:1;24098:10;24135:2;24132:1;24128:10;24166:3;24162:2;24158:12;24153:3;24150:21;24147:47;;;24174:18;;:::i;:::-;24210:13;;23993:236;-1:-1:-1;;;;23993:236:357:o;24234:184::-;24286:77;24283:1;24276:88;24383:4;24380:1;24373:15;24407:4;24404:1;24397:15;24423:308;24462:1;24488;24478:35;;24493:18;;:::i;:::-;24610:66;24607:1;24604:73;24535:66;24532:1;24529:73;24525:153;24522:179;;;24681:18;;:::i;:::-;-1:-1:-1;24715:10:357;;24423:308::o;24736:369::-;24775:4;24811:1;24808;24804:9;24920:1;24852:66;24848:74;24845:1;24841:82;24836:2;24829:10;24825:99;24822:125;;;24927:18;;:::i;:::-;25046:1;24978:66;24974:74;24971:1;24967:82;24963:2;24959:91;24956:117;;;25053:18;;:::i;:::-;-1:-1:-1;;25090:9:357;;24736:369::o;25110:655::-;25149:7;25181:66;25273:1;25270;25266:9;25301:1;25298;25294:9;25346:1;25342:2;25338:10;25335:1;25332:17;25327:2;25323;25319:11;25315:35;25312:61;;;25353:18;;:::i;:::-;25392:66;25484:1;25481;25477:9;25531:1;25527:2;25522:11;25519:1;25515:19;25510:2;25506;25502:11;25498:37;25495:63;;;25538:18;;:::i;:::-;25584:1;25581;25577:9;25567:19;;25631:1;25627:2;25622:11;25619:1;25615:19;25610:2;25606;25602:11;25598:37;25595:63;;;25638:18;;:::i;:::-;25703:1;25699:2;25694:11;25691:1;25687:19;25682:2;25678;25674:11;25670:37;25667:63;;;25710:18;;:::i;:::-;-1:-1:-1;;;25750:9:357;;;;;25110:655;-1:-1:-1;;;25110:655:357:o;25770:367::-;25809:3;25844:1;25841;25837:9;25953:1;25885:66;25881:74;25878:1;25874:82;25869:2;25862:10;25858:99;25855:125;;;25960:18;;:::i;:::-;26079:1;26011:66;26007:74;26004:1;26000:82;25996:2;25992:91;25989:117;;;26086:18;;:::i;:::-;-1:-1:-1;;26122:9:357;;25770:367::o;26142:228::-;26182:7;26308:1;26240:66;26236:74;26233:1;26230:81;26225:1;26218:9;26211:17;26207:105;26204:131;;;26315:18;;:::i;:::-;-1:-1:-1;26355:9:357;;26142:228::o;26375:120::-;26415:1;26441;26431:35;;26446:18;;:::i;:::-;-1:-1:-1;26480:9:357;;26375:120::o;26500:656::-;26787:6;26776:9;26769:25;26750:4;26813:42;26903:2;26895:6;26891:15;26886:2;26875:9;26871:18;26864:43;26955:2;26947:6;26943:15;26938:2;26927:9;26923:18;26916:43;;26995:6;26990:2;26979:9;26975:18;26968:34;27039:6;27033:3;27022:9;27018:19;27011:35;27083:3;27077;27066:9;27062:19;27055:32;27104:46;27145:3;27134:9;27130:19;27122:6;27104:46;:::i;:::-;27096:54;26500:656;-1:-1:-1;;;;;;;;26500:656:357:o;27969:160::-;28046:13;;28099:4;28088:16;;28078:27;;28068:55;;28119:1;28116;28109:12;28068:55;27969:160;;;:::o;28134:1203::-;28237:6;28290:3;28278:9;28269:7;28265:23;28261:33;28258:53;;;28307:1;28304;28297:12;28258:53;28340:2;28334:9;28382:3;28374:6;28370:16;28452:6;28440:10;28437:22;28416:18;28404:10;28401:34;28398:62;28395:88;;;28463:18;;:::i;:::-;28499:2;28492:22;28536:16;;28561:53;28536:16;28561:53;:::i;:::-;28623:21;;28677:47;28720:2;28705:18;;28677:47;:::i;:::-;28672:2;28664:6;28660:15;28653:72;28758:47;28801:2;28790:9;28786:18;28758:47;:::i;:::-;28753:2;28745:6;28741:15;28734:72;28851:2;28840:9;28836:18;28830:25;28864:55;28911:7;28864:55;:::i;:::-;28947:2;28935:15;;28928:32;29005:3;28990:19;;28984:26;29019:55;28984:26;29019:55;:::i;:::-;29102:3;29090:16;;29083:33;29161:3;29146:19;;29140:26;29210:34;29197:48;;29185:61;;29175:89;;29260:1;29257;29250:12;29175:89;29292:3;29280:16;;29273:33;29284:6;28134:1203;-1:-1:-1;;;28134:1203:357:o;29342:195::-;29381:3;29412:66;29405:5;29402:77;29399:103;;29482:18;;:::i;:::-;-1:-1:-1;29529:1:357;29518:13;;29342:195::o;30079:184::-;30131:77;30128:1;30121:88;30228:4;30225:1;30218:15;30252:4;30249:1;30242:15;31856:128;31896:3;31927:1;31923:6;31920:1;31917:13;31914:39;;;31933:18;;:::i;:::-;-1:-1:-1;31969:9:357;;31856:128::o;32844:157::-;32874:1;32908:4;32905:1;32901:12;32932:3;32922:37;;32939:18;;:::i;:::-;32991:3;32984:4;32981:1;32977:12;32973:22;32968:27;;;32844:157;;;;:::o;33006:195::-;33044:4;33081;33078:1;33074:12;33113:4;33110:1;33106:12;33138:3;33133;33130:12;33127:38;;;33145:18;;:::i;:::-;33182:13;;;33006:195;-1:-1:-1;;;33006:195:357:o","linkReferences":{},"immutableReferences":{"87151":[{"start":1594,"length":32},{"start":5764,"length":32}],"87154":[{"start":1219,"length":32},{"start":6726,"length":32}]}},"methodIdentifiers":{"blacklistDisputeGame(address)":"7d6be8dc","checkWithdrawal(bytes32,address)":"71c1566e","depositTransaction(address,uint256,uint64,bool,bytes)":"e9e05c42","disputeGameBlacklist(address)":"45884d32","disputeGameFactory()":"f2b4e617","disputeGameFinalityDelaySeconds()":"952b2797","donateETH()":"8b4c40b0","finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))":"8c3152e9","finalizeWithdrawalTransactionExternalProof((uint256,address,address,uint256,uint256,bytes),address)":"43ca1c50","finalizedWithdrawals(bytes32)":"a14238e7","guardian()":"452a9320","initialize(address,address,address,uint32)":"8e819e54","l2Sender()":"9bf62d82","minimumGasLimit(uint64)":"a35d99df","numProofSubmitters(bytes32)":"513747ab","params()":"cff0ab96","paused()":"5c975abb","proofMaturityDelaySeconds()":"bf653a5c","proofSubmitters(bytes32,uint256)":"a3860f48","proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])":"4870496f","provenWithdrawals(bytes32,address)":"bb2c727e","respectedGameType()":"3c9f397c","respectedGameTypeUpdatedAt()":"4fd0434c","setRespectedGameType(uint32)":"7fc48504","superchainConfig()":"35e80ab3","systemConfig()":"33d7e2bd","version()":"54fd4d50"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_proofMaturityDelaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_disputeGameFinalityDelaySeconds\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BadTarget\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasEstimation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LargeCalldata\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfGas\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SmallGasLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"opaqueData\",\"type\":\"bytes\"}],\"name\":\"TransactionDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"WithdrawalFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"WithdrawalProven\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract IDisputeGame\",\"name\":\"_disputeGame\",\"type\":\"address\"}],\"name\":\"blacklistDisputeGame\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_withdrawalHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_proofSubmitter\",\"type\":\"address\"}],\"name\":\"checkWithdrawal\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"_isCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"depositTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IDisputeGame\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputeGameBlacklist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disputeGameFactory\",\"outputs\":[{\"internalType\":\"contract DisputeGameFactory\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disputeGameFinalityDelaySeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"donateETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Types.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"}],\"name\":\"finalizeWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Types.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_proofSubmitter\",\"type\":\"address\"}],\"name\":\"finalizeWithdrawalTransactionExternalProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"finalizedWithdrawals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guardian\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract DisputeGameFactory\",\"name\":\"_disputeGameFactory\",\"type\":\"address\"},{\"internalType\":\"contract SystemConfig\",\"name\":\"_systemConfig\",\"type\":\"address\"},{\"internalType\":\"contract SuperchainConfig\",\"name\":\"_superchainConfig\",\"type\":\"address\"},{\"internalType\":\"GameType\",\"name\":\"_initialRespectedGameType\",\"type\":\"uint32\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_byteCount\",\"type\":\"uint64\"}],\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_withdrawalHash\",\"type\":\"bytes32\"}],\"name\":\"numProofSubmitters\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"prevBaseFee\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"prevBoughtGas\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"prevBlockNum\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofMaturityDelaySeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proofSubmitters\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Types.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_disputeGameIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"latestBlockhash\",\"type\":\"bytes32\"}],\"internalType\":\"struct Types.OutputRootProof\",\"name\":\"_outputRootProof\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\"}],\"name\":\"proveWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"provenWithdrawals\",\"outputs\":[{\"internalType\":\"contract IDisputeGame\",\"name\":\"disputeGameProxy\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"respectedGameType\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"respectedGameTypeUpdatedAt\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"_gameType\",\"type\":\"uint32\"}],\"name\":\"setRespectedGameType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"superchainConfig\",\"outputs\":[{\"internalType\":\"contract SuperchainConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"systemConfig\",\"outputs\":[{\"internalType\":\"contract SystemConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"custom:proxied\":\"@title OptimismPortal2\",\"events\":{\"TransactionDeposited(address,address,uint256,bytes)\":{\"params\":{\"from\":\"Address that triggered the deposit transaction.\",\"opaqueData\":\"ABI encoded deposit data to be parsed off-chain.\",\"to\":\"Address that the deposit transaction is directed to.\",\"version\":\"Version of this deposit transaction event.\"}},\"WithdrawalFinalized(bytes32,bool)\":{\"params\":{\"success\":\"Whether the withdrawal transaction was successful.\",\"withdrawalHash\":\"Hash of the withdrawal transaction.\"}},\"WithdrawalProven(bytes32,address,address)\":{\"params\":{\"from\":\"Address that triggered the withdrawal transaction.\",\"to\":\"Address that the withdrawal transaction is directed to.\",\"withdrawalHash\":\"Hash of the withdrawal transaction.\"}}},\"kind\":\"dev\",\"methods\":{\"blacklistDisputeGame(address)\":{\"params\":{\"_disputeGame\":\"Dispute game to blacklist.\"}},\"checkWithdrawal(bytes32,address)\":{\"params\":{\"_proofSubmitter\":\"The submitter of the proof for the withdrawal hash\",\"_withdrawalHash\":\"Hash of the withdrawal to check.\"}},\"depositTransaction(address,uint256,uint64,bool,bytes)\":{\"params\":{\"_data\":\"Data to trigger the recipient with.\",\"_gasLimit\":\"Amount of L2 gas to purchase by burning gas on L1.\",\"_isCreation\":\"Whether or not the transaction is a contract creation.\",\"_to\":\"Target address on L2.\",\"_value\":\"ETH value to send to the recipient.\"}},\"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))\":{\"params\":{\"_tx\":\"Withdrawal transaction to finalize.\"}},\"finalizeWithdrawalTransactionExternalProof((uint256,address,address,uint256,uint256,bytes),address)\":{\"params\":{\"_proofSubmitter\":\"Address of the proof submitter.\",\"_tx\":\"Withdrawal transaction to finalize.\"}},\"guardian()\":{\"custom:legacy\":\"\",\"returns\":{\"_0\":\"Address of the guardian.\"}},\"initialize(address,address,address,uint32)\":{\"params\":{\"_disputeGameFactory\":\"Contract of the DisputeGameFactory.\",\"_superchainConfig\":\"Contract of the SuperchainConfig.\",\"_systemConfig\":\"Contract of the SystemConfig.\"}},\"minimumGasLimit(uint64)\":{\"params\":{\"_byteCount\":\"Number of bytes in the calldata.\"},\"returns\":{\"_0\":\"The minimum gas limit for a deposit.\"}},\"numProofSubmitters(bytes32)\":{\"params\":{\"_withdrawalHash\":\"Hash of the withdrawal.\"},\"returns\":{\"_0\":\"The number of proof submitters for the withdrawal hash.\"}},\"proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])\":{\"params\":{\"_disputeGameIndex\":\"Index of the dispute game to prove the withdrawal against.\",\"_outputRootProof\":\"Inclusion proof of the L2ToL1MessagePasser contract's storage root.\",\"_tx\":\"Withdrawal transaction to finalize.\",\"_withdrawalProof\":\"Inclusion proof of the withdrawal in L2ToL1MessagePasser contract.\"}},\"setRespectedGameType(uint32)\":{\"params\":{\"_gameType\":\"The game type to consult for output proposals.\"}}},\"stateVariables\":{\"disputeGameFactory\":{\"custom:network-specific\":\"\"},\"spacer_52_0_32\":{\"custom:legacy\":\"@custom:spacer provenWithdrawals\"},\"spacer_53_0_1\":{\"custom:legacy\":\"@custom:spacer paused\"},\"spacer_54_0_20\":{\"custom:legacy\":\"@custom:spacer l2Oracle\"},\"systemConfig\":{\"custom:network-specific\":\"\"},\"version\":{\"custom:semver\":\"3.8.0\"}},\"version\":1},\"userdoc\":{\"errors\":{\"BadTarget()\":[{\"notice\":\"Error for when a deposit or withdrawal is to a bad target.\"}],\"CallPaused()\":[{\"notice\":\"Error for when a method cannot be called when paused. This could be renamed to `Paused` in the future, but it collides with the `Paused` event.\"}],\"GasEstimation()\":[{\"notice\":\"Error for special gas estimation.\"}],\"LargeCalldata()\":[{\"notice\":\"Error for when a deposit has too much calldata.\"}],\"OutOfGas()\":[{\"notice\":\"Error returned when too much gas resource is consumed.\"}],\"SmallGasLimit()\":[{\"notice\":\"Error for when a deposit has too small of a gas limit.\"}],\"Unauthorized()\":[{\"notice\":\"Error for an unauthorized CALLER.\"}]},\"events\":{\"TransactionDeposited(address,address,uint256,bytes)\":{\"notice\":\"Emitted when a transaction is deposited from L1 to L2. The parameters of this event are read by the rollup node and used to derive deposit transactions on L2.\"},\"WithdrawalFinalized(bytes32,bool)\":{\"notice\":\"Emitted when a withdrawal transaction is finalized.\"},\"WithdrawalProven(bytes32,address,address)\":{\"notice\":\"Emitted when a withdrawal transaction is proven.\"}},\"kind\":\"user\",\"methods\":{\"blacklistDisputeGame(address)\":{\"notice\":\"Blacklists a dispute game. Should only be used in the event that a dispute game resolves incorrectly.\"},\"checkWithdrawal(bytes32,address)\":{\"notice\":\"Checks if a withdrawal can be finalized. This function will revert if the withdrawal cannot be finalized, and otherwise has no side-effects.\"},\"constructor\":{\"notice\":\"Constructs the OptimismPortal contract.\"},\"depositTransaction(address,uint256,uint64,bool,bytes)\":{\"notice\":\"Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in deriving deposit transactions. Note that if a deposit is made by a contract, its address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider using the CrossDomainMessenger contracts for a simpler developer experience.\"},\"disputeGameBlacklist(address)\":{\"notice\":\"A mapping of dispute game addresses to whether or not they are blacklisted.\"},\"disputeGameFactory()\":{\"notice\":\"Address of the DisputeGameFactory.\"},\"disputeGameFinalityDelaySeconds()\":{\"notice\":\"Getter for the dispute game finality delay.\"},\"donateETH()\":{\"notice\":\"Accepts ETH value without triggering a deposit to L2. This function mainly exists for the sake of the migration between the legacy Optimism system and Bedrock.\"},\"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))\":{\"notice\":\"Finalizes a withdrawal transaction.\"},\"finalizeWithdrawalTransactionExternalProof((uint256,address,address,uint256,uint256,bytes),address)\":{\"notice\":\"Finalizes a withdrawal transaction, using an external proof submitter.\"},\"finalizedWithdrawals(bytes32)\":{\"notice\":\"A list of withdrawal hashes which have been successfully finalized.\"},\"guardian()\":{\"notice\":\"Getter function for the address of the guardian. Public getter is legacy and will be removed in the future. Use `SuperchainConfig.guardian()` instead.\"},\"initialize(address,address,address,uint32)\":{\"notice\":\"Initializer.\"},\"l2Sender()\":{\"notice\":\"Address of the L2 account which initiated a withdrawal in this transaction. If the of this variable is the default L2 sender address, then we are NOT inside of a call to finalizeWithdrawalTransaction.\"},\"minimumGasLimit(uint64)\":{\"notice\":\"Computes the minimum gas limit for a deposit. The minimum gas limit linearly increases based on the size of the calldata. This is to prevent users from creating L2 resource usage without paying for it. This function can be used when interacting with the portal to ensure forwards compatibility.\"},\"numProofSubmitters(bytes32)\":{\"notice\":\"External getter for the number of proof submitters for a withdrawal hash.\"},\"params()\":{\"notice\":\"EIP-1559 style gas parameters.\"},\"paused()\":{\"notice\":\"Getter for the current paused status.\"},\"proofMaturityDelaySeconds()\":{\"notice\":\"Getter for the proof maturity delay.\"},\"proofSubmitters(bytes32,uint256)\":{\"notice\":\"Mapping of withdrawal hashes to addresses that have submitted a proof for the withdrawal.\"},\"proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])\":{\"notice\":\"Proves a withdrawal transaction.\"},\"provenWithdrawals(bytes32,address)\":{\"notice\":\"A mapping of withdrawal hashes to proof submitters to `ProvenWithdrawal` data.\"},\"respectedGameType()\":{\"notice\":\"The game type that the OptimismPortal consults for output proposals.\"},\"respectedGameTypeUpdatedAt()\":{\"notice\":\"The timestamp at which the respected game type was last updated.\"},\"setRespectedGameType(uint32)\":{\"notice\":\"Sets the respected game type. Changing this value can alter the security properties of the system, depending on the new game's behavior.\"},\"superchainConfig()\":{\"notice\":\"Contract of the Superchain Config.\"},\"systemConfig()\":{\"notice\":\"Contract of the SystemConfig.\"},\"version()\":{\"notice\":\"Semantic version.\"}},\"notice\":\"The OptimismPortal is a low-level contract responsible for passing messages between L1 and L2. Messages sent directly to the OptimismPortal have no form of replayability. Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/L1/OptimismPortal2.sol\":\"OptimismPortal2\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f\",\"dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929\",\"dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689\",\"dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy\"]},\"lib/solady/src/utils/LibClone.sol\":{\"keccak256\":\"0xfd4b40a4584e736d9d0b045fbc748023804c83819f5e018635a9f447834774a4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://202fc57397118355d9d573c28d36ff45892e632a12b143f4bc5e7266bfb7737e\",\"dweb:/ipfs/QmZYD6Va3nNUC4B9NHZcyvFmK59i3WnEPPpsi8N355GivN\"]},\"lib/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c\",\"dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8\"]},\"src/L1/OptimismPortal2.sol\":{\"keccak256\":\"0xcd1bb48f8005d9ed77120615d936441a8fd000b15bec1f32416f819999e4f0ca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://251a0362b91185a1b53b4053651cc189e1411cdabc4003cbdc7f9efabbd7e22f\",\"dweb:/ipfs/QmfW9o4Pxa2SAbiohXRnqDEbpHWZeqFM4d9QmD3gJjFLQE\"]},\"src/L1/ResourceMetering.sol\":{\"keccak256\":\"0xde3ac62c60f27a3f1ba06eec94f4eda45e7ec5544c6a5d6b79543a7184e44408\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://265a2845c4ff0d9076dd0505755cf2bdf799f4fdc09ef016865a26b51f5c3409\",\"dweb:/ipfs/QmRzSdBD8jmQf3U9u2ATRAzzuyo6c5ugz8VA5ZM4vzoGiM\"]},\"src/L1/SuperchainConfig.sol\":{\"keccak256\":\"0x5fab874f980fe3e52c3398ddd25b655c56af0c98c15588b2ad9ebf30671d859d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4e0aa613d38eceb621f8569fc714f521bc1f2df3d029552186ab3cdf2ee5d53f\",\"dweb:/ipfs/QmZDzFxhTXLW79eohQbr1nghNh3oNC4CUfH7uMX8CsjVAB\"]},\"src/L1/SystemConfig.sol\":{\"keccak256\":\"0xc3d6392cbc44e38ddc93b84b82b08ab8e813df771a48926db3f94edde8f2b64a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d326d644dc59a57a71f4ff6eaa5c6d1464697c7df337b641fe82091b9050e6ce\",\"dweb:/ipfs/Qmd6tNzBmm8V4cpcMNyFWbWnKPNMRoysmmA62rZjGqpg7f\"]},\"src/dispute/DisputeGameFactory.sol\":{\"keccak256\":\"0xc7c6b0c2a051d4a14b3833243fa2e93e5e320bb106ef3979ce77098fb9d6629f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd5cbabb1b0b41f9faf3d2329e519936ea43a1e7da1df6a9be90d2513603b09f\",\"dweb:/ipfs/QmQM5FpgogJQnbmJjdQdoxxMzczx5PBiCNbiRUQiJqHyhM\"]},\"src/dispute/interfaces/IDisputeGame.sol\":{\"keccak256\":\"0xe2611453d5cc05f8aa30dc0e5e15ee5ae29fd3eb55a2c034424250baebf12f9b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://274e00fbcea3b8455bbaa042130bf1f7a5b2b769f28ad57afbf9fabfd74a757a\",\"dweb:/ipfs/QmRKQTfYdMjQYVbuZhdXts1d752eUq8RwrjqqwV5XRYLi6\"]},\"src/dispute/interfaces/IDisputeGameFactory.sol\":{\"keccak256\":\"0x204d89d38d4dc0db40fbf898d95e639ac5608810a5a5506a3d80d71177648bda\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://71e5c0ff04f409f30ca4f8ebfae1592c6ca495e315b059f969d11812e6e84dbd\",\"dweb:/ipfs/QmaNKkhkJv7qHzX6bKB3LjpWBupfMPLhoATUGx1HRTLtXh\"]},\"src/dispute/interfaces/IInitializable.sol\":{\"keccak256\":\"0xbc553af6501a972850a98fc6284943f8e95a5183a7b4f64198c16fca2338c9dc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1f1c422ce4a9e72f0bbdec36434206da4af3a32d38f922acab957942e994ce5\",\"dweb:/ipfs/QmNQGWBceLxx1CKSMLfwTM584q8UCgUpF4rrFe8pdbWYtj\"]},\"src/dispute/lib/LibGameId.sol\":{\"keccak256\":\"0x9a9f30500da6eb7eeaa7193515dc5e45dc479f09ae7d522a07283c0fb5f4bfa6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be113d8198d5822385de3d6ff3d7b3e8241993484aa95604ffaf38c2d33f40e0\",\"dweb:/ipfs/QmY9mHC52fqc4gAFYCGobNyuP4TqugQgs8o1kTF33t17Hc\"]},\"src/dispute/lib/LibHashing.sol\":{\"keccak256\":\"0x5a072cd028094eee55acb84ed8d08d7422b1fb46658b7e043e916781530a383b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b67e54f1318f1fd67b28b16c6861a56e27217c26a12aaea5c446e2ec53143920\",\"dweb:/ipfs/QmVLSTP3PwXzRkR3A4qV9fjZhca9v8J1EnEYuVGUsSirAq\"]},\"src/dispute/lib/LibPosition.sol\":{\"keccak256\":\"0xf7ceb26f0ac7067ff8a43f263451050eef6fba2029eafb83d3cbe35224d894a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bb403b0d707a8e2e3780a19185b918bfe907ca2d1b939ea74ae095a5cdf3b48\",\"dweb:/ipfs/QmYFzkmF8TRomp1cBEbTsKxiEnqLnX6SvSh4y3rVa84pBR\"]},\"src/dispute/lib/LibUDT.sol\":{\"keccak256\":\"0x9b61b15f5edfac1e6528aec79c1be6ac712d5f6a62140db87ed749e41a46563f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://24ef4ecee91638e278886888192b7d2b1811ab99f4e90a06817a4b2651720046\",\"dweb:/ipfs/QmdisoBv1mE9jDv6jvpcbvKhdmJZMMjQmATrEYfBQQrXtZ\"]},\"src/libraries/Arithmetic.sol\":{\"keccak256\":\"0x91345e053584f82ad04d682ba821cf3ede808304f5b2a88116a894cf692c21db\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://005e3c42d2edfca0a506cbda94d3b0104eddf20c00bd1bd25272f53f2ef74c72\",\"dweb:/ipfs/QmdaW6Nge6NKoGvFqRpQjBpM2fXpc5y8WpZyBnDnKicdJq\"]},\"src/libraries/Burn.sol\":{\"keccak256\":\"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f\",\"dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb\"]},\"src/libraries/Bytes.sol\":{\"keccak256\":\"0x827f47d123b0fdf3b08816d5b33831811704dbf4e554e53f2269354f6bba8859\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3137ac7204d30a245a8b0d67aa6da5286f1bd8c90379daab561f84963b6db782\",\"dweb:/ipfs/QmWRhisw3axJK833gUScs23ETh2MLFbVzzqzYVMKSDN3S9\"]},\"src/libraries/Constants.sol\":{\"keccak256\":\"0xe0aeec7d6e5d1e44a11405d3b5bfc384ea092c39bea0b763ab937a26fd427132\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11aa3bff9da26ca2545132ec7994866690446a5321023811c254410d9593bd9b\",\"dweb:/ipfs/QmVxWqadxvdfkqdrhfWisDqeAthibn4HEE1P6o9aFxXLhp\"]},\"src/libraries/DisputeErrors.sol\":{\"keccak256\":\"0x869bec0d79d97f2d0a00b1e70bf1e6955a2be585521e0084602e54455c0a6937\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a235c6349437cd2ade72909287404e2993c1c4bd356707299239c71fa3bf780e\",\"dweb:/ipfs/QmcFSh6PWJ5sNg1CeoRyF9EnV8APWDz1kYP98v6ooGxc71\"]},\"src/libraries/DisputeTypes.sol\":{\"keccak256\":\"0xae3d053cf40b3e47669b89438524fec4eb571a78be296cc7e7ba23025b3bdf0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a2b90604718ad29d19a8f21d45a5f8c6188320781fdb7102b3fccadae549961\",\"dweb:/ipfs/QmUBTXgRFG7PvoCBJsXmgi2sZPZFPQQZTptQ91LL7tC2xQ\"]},\"src/libraries/Encoding.sol\":{\"keccak256\":\"0x1dafabcbd4877c7abe9698957b0a44b7e911cb8b11c1437a4ed897135669fa87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6addfacefa26fdb44f56d73fa0172b97740de75629a962905ec2a20a28d40fff\",\"dweb:/ipfs/QmboHMouqU19Rnbqrfo1gkfnuDBFcPiC9wsKgGtF2W1cNA\"]},\"src/libraries/Hashing.sol\":{\"keccak256\":\"0x89c07a0ca102cbe57b4e082543f2dd6dae0e1fd4a87908a334bd076fc914e7b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://69c83489c9544ab442dc244c2feb2c6811b726a5eb5a509b97fc5ccb90b98c12\",\"dweb:/ipfs/QmPGGJeLasc1HWHzd6odvWcNvFPQrbYtDubZcv8yp1HLtF\"]},\"src/libraries/PortalErrors.sol\":{\"keccak256\":\"0x57adcaa45a1ce9c5af04d0fe4ecbc86e6ff3f947f7957ab55bdade129adcf558\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf485f11085ad6d1ba1386fdb340f65eb1048187692ad3d9eb8816e290140c1\",\"dweb:/ipfs/Qmb423b45TLV8PdhFa8Hs72eom5D2C5q4gVcYGNzDh4EMU\"]},\"src/libraries/SafeCall.sol\":{\"keccak256\":\"0x0636a7abb242bb5d6f5606967c8929e6aa7e63468c1e2ce40ad4780d4c4bf94f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4daec2ac8f9907bbf84ef0a1c48f03bae8657619bc6f42b3a672f25c516f17a\",\"dweb:/ipfs/Qmf8gfRxBv8gEmCkP8YMPb2GGfj9QUnoNUyKE7UR2SWGnq\"]},\"src/libraries/Storage.sol\":{\"keccak256\":\"0x7ce27a05552aa69afa6b2ab6684dfe99f27366cf8ef2046baeb1fb62fff0022f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6a24f3ed56681720707a5ab0372fd67fcb1a4f6fb072c7140cda28bdb70f269\",\"dweb:/ipfs/QmW9uTpUULV4xmP7A7MoBDeDhVfQgmJG5qVUFGtXxWpWWK\"]},\"src/libraries/Types.sol\":{\"keccak256\":\"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e\",\"dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc\"]},\"src/libraries/rlp/RLPReader.sol\":{\"keccak256\":\"0x99731a39bc10203719d448117b0e6ef47771890440d595d118084d7988d59afb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1dbeb75d0cc8de58350cc15df8867bf97d8492e0617b1c62733ace6155c6915a\",\"dweb:/ipfs/QmNiXzskPE72h93F8EXT8wAXKzEh2EERLbubdVMfwTQbtj\"]},\"src/libraries/rlp/RLPWriter.sol\":{\"keccak256\":\"0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b\",\"dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV\"]},\"src/libraries/trie/MerkleTrie.sol\":{\"keccak256\":\"0xf8ba770ee6666e73ae43184c700e9c704b2c4ace71f9e3c2227ddc11a8148b4c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4702ccee1fe44aea3ee01d59e6152eb755da083f786f00947fec4437c064fe74\",\"dweb:/ipfs/QmQjFj5J7hrEM1dxJjFszzW2Cs7g7eMhYNBXonF2DXBstE\"]},\"src/libraries/trie/SecureMerkleTrie.sol\":{\"keccak256\":\"0xeaff8315cfd21197bc6bc859c2decf5d4f4838c9c357c502cdf2b1eac863d288\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://79dcdcaa560aea51d138da4f5dc553a1808b6de090b2dc1629f18375edbff681\",\"dweb:/ipfs/QmbE4pUPhf5fLKW4W6cEjhQs55gEDvHmbmoBqkW1yz3bnw\"]},\"src/universal/ISemver.sol\":{\"keccak256\":\"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a\",\"dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR\"]},\"src/vendor/AddressAliasHelper.sol\":{\"keccak256\":\"0x6ecb83b4ec80fbe49c22f4f95d90482de64660ef5d422a19f4d4b04df31c1237\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1d0885be6e473962f9a0622176a22300165ac0cc1a1d7f2e22b11c3d656ace88\",\"dweb:/ipfs/QmPRa3KmRpXW5P9ykveKRDgYN5zYo4cYLAYSnoqHX3KnXR\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.15+commit.e14f2714"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"_proofMaturityDelaySeconds","type":"uint256"},{"internalType":"uint256","name":"_disputeGameFinalityDelaySeconds","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"BadTarget"},{"inputs":[],"type":"error","name":"CallPaused"},{"inputs":[],"type":"error","name":"GasEstimation"},{"inputs":[],"type":"error","name":"LargeCalldata"},{"inputs":[],"type":"error","name":"OutOfGas"},{"inputs":[],"type":"error","name":"SmallGasLimit"},{"inputs":[],"type":"error","name":"Unauthorized"},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"version","type":"uint256","indexed":true},{"internalType":"bytes","name":"opaqueData","type":"bytes","indexed":false}],"type":"event","name":"TransactionDeposited","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"withdrawalHash","type":"bytes32","indexed":true},{"internalType":"bool","name":"success","type":"bool","indexed":false}],"type":"event","name":"WithdrawalFinalized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"withdrawalHash","type":"bytes32","indexed":true},{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true}],"type":"event","name":"WithdrawalProven","anonymous":false},{"inputs":[{"internalType":"contract IDisputeGame","name":"_disputeGame","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"blacklistDisputeGame"},{"inputs":[{"internalType":"bytes32","name":"_withdrawalHash","type":"bytes32"},{"internalType":"address","name":"_proofSubmitter","type":"address"}],"stateMutability":"view","type":"function","name":"checkWithdrawal"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint64","name":"_gasLimit","type":"uint64"},{"internalType":"bool","name":"_isCreation","type":"bool"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"depositTransaction"},{"inputs":[{"internalType":"contract IDisputeGame","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"disputeGameBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"disputeGameFactory","outputs":[{"internalType":"contract DisputeGameFactory","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"disputeGameFinalityDelaySeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"payable","type":"function","name":"donateETH"},{"inputs":[{"internalType":"struct Types.WithdrawalTransaction","name":"_tx","type":"tuple","components":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}]}],"stateMutability":"nonpayable","type":"function","name":"finalizeWithdrawalTransaction"},{"inputs":[{"internalType":"struct Types.WithdrawalTransaction","name":"_tx","type":"tuple","components":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}]},{"internalType":"address","name":"_proofSubmitter","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"finalizeWithdrawalTransactionExternalProof"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"finalizedWithdrawals","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"guardian","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"contract DisputeGameFactory","name":"_disputeGameFactory","type":"address"},{"internalType":"contract SystemConfig","name":"_systemConfig","type":"address"},{"internalType":"contract SuperchainConfig","name":"_superchainConfig","type":"address"},{"internalType":"GameType","name":"_initialRespectedGameType","type":"uint32"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"l2Sender","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint64","name":"_byteCount","type":"uint64"}],"stateMutability":"pure","type":"function","name":"minimumGasLimit","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"bytes32","name":"_withdrawalHash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"numProofSubmitters","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"params","outputs":[{"internalType":"uint128","name":"prevBaseFee","type":"uint128"},{"internalType":"uint64","name":"prevBoughtGas","type":"uint64"},{"internalType":"uint64","name":"prevBlockNum","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proofMaturityDelaySeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"proofSubmitters","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"struct Types.WithdrawalTransaction","name":"_tx","type":"tuple","components":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}]},{"internalType":"uint256","name":"_disputeGameIndex","type":"uint256"},{"internalType":"struct Types.OutputRootProof","name":"_outputRootProof","type":"tuple","components":[{"internalType":"bytes32","name":"version","type":"bytes32"},{"internalType":"bytes32","name":"stateRoot","type":"bytes32"},{"internalType":"bytes32","name":"messagePasserStorageRoot","type":"bytes32"},{"internalType":"bytes32","name":"latestBlockhash","type":"bytes32"}]},{"internalType":"bytes[]","name":"_withdrawalProof","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"proveWithdrawalTransaction"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"provenWithdrawals","outputs":[{"internalType":"contract IDisputeGame","name":"disputeGameProxy","type":"address"},{"internalType":"uint64","name":"timestamp","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"respectedGameType","outputs":[{"internalType":"GameType","name":"","type":"uint32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"respectedGameTypeUpdatedAt","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"GameType","name":"_gameType","type":"uint32"}],"stateMutability":"nonpayable","type":"function","name":"setRespectedGameType"},{"inputs":[],"stateMutability":"view","type":"function","name":"superchainConfig","outputs":[{"internalType":"contract SuperchainConfig","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"systemConfig","outputs":[{"internalType":"contract SystemConfig","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"blacklistDisputeGame(address)":{"params":{"_disputeGame":"Dispute game to blacklist."}},"checkWithdrawal(bytes32,address)":{"params":{"_proofSubmitter":"The submitter of the proof for the withdrawal hash","_withdrawalHash":"Hash of the withdrawal to check."}},"depositTransaction(address,uint256,uint64,bool,bytes)":{"params":{"_data":"Data to trigger the recipient with.","_gasLimit":"Amount of L2 gas to purchase by burning gas on L1.","_isCreation":"Whether or not the transaction is a contract creation.","_to":"Target address on L2.","_value":"ETH value to send to the recipient."}},"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))":{"params":{"_tx":"Withdrawal transaction to finalize."}},"finalizeWithdrawalTransactionExternalProof((uint256,address,address,uint256,uint256,bytes),address)":{"params":{"_proofSubmitter":"Address of the proof submitter.","_tx":"Withdrawal transaction to finalize."}},"guardian()":{"custom:legacy":"","returns":{"_0":"Address of the guardian."}},"initialize(address,address,address,uint32)":{"params":{"_disputeGameFactory":"Contract of the DisputeGameFactory.","_superchainConfig":"Contract of the SuperchainConfig.","_systemConfig":"Contract of the SystemConfig."}},"minimumGasLimit(uint64)":{"params":{"_byteCount":"Number of bytes in the calldata."},"returns":{"_0":"The minimum gas limit for a deposit."}},"numProofSubmitters(bytes32)":{"params":{"_withdrawalHash":"Hash of the withdrawal."},"returns":{"_0":"The number of proof submitters for the withdrawal hash."}},"proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])":{"params":{"_disputeGameIndex":"Index of the dispute game to prove the withdrawal against.","_outputRootProof":"Inclusion proof of the L2ToL1MessagePasser contract's storage root.","_tx":"Withdrawal transaction to finalize.","_withdrawalProof":"Inclusion proof of the withdrawal in L2ToL1MessagePasser contract."}},"setRespectedGameType(uint32)":{"params":{"_gameType":"The game type to consult for output proposals."}}},"version":1},"userdoc":{"kind":"user","methods":{"blacklistDisputeGame(address)":{"notice":"Blacklists a dispute game. Should only be used in the event that a dispute game resolves incorrectly."},"checkWithdrawal(bytes32,address)":{"notice":"Checks if a withdrawal can be finalized. This function will revert if the withdrawal cannot be finalized, and otherwise has no side-effects."},"constructor":{"notice":"Constructs the OptimismPortal contract."},"depositTransaction(address,uint256,uint64,bool,bytes)":{"notice":"Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in deriving deposit transactions. Note that if a deposit is made by a contract, its address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider using the CrossDomainMessenger contracts for a simpler developer experience."},"disputeGameBlacklist(address)":{"notice":"A mapping of dispute game addresses to whether or not they are blacklisted."},"disputeGameFactory()":{"notice":"Address of the DisputeGameFactory."},"disputeGameFinalityDelaySeconds()":{"notice":"Getter for the dispute game finality delay."},"donateETH()":{"notice":"Accepts ETH value without triggering a deposit to L2. This function mainly exists for the sake of the migration between the legacy Optimism system and Bedrock."},"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))":{"notice":"Finalizes a withdrawal transaction."},"finalizeWithdrawalTransactionExternalProof((uint256,address,address,uint256,uint256,bytes),address)":{"notice":"Finalizes a withdrawal transaction, using an external proof submitter."},"finalizedWithdrawals(bytes32)":{"notice":"A list of withdrawal hashes which have been successfully finalized."},"guardian()":{"notice":"Getter function for the address of the guardian. Public getter is legacy and will be removed in the future. Use `SuperchainConfig.guardian()` instead."},"initialize(address,address,address,uint32)":{"notice":"Initializer."},"l2Sender()":{"notice":"Address of the L2 account which initiated a withdrawal in this transaction. If the of this variable is the default L2 sender address, then we are NOT inside of a call to finalizeWithdrawalTransaction."},"minimumGasLimit(uint64)":{"notice":"Computes the minimum gas limit for a deposit. The minimum gas limit linearly increases based on the size of the calldata. This is to prevent users from creating L2 resource usage without paying for it. This function can be used when interacting with the portal to ensure forwards compatibility."},"numProofSubmitters(bytes32)":{"notice":"External getter for the number of proof submitters for a withdrawal hash."},"params()":{"notice":"EIP-1559 style gas parameters."},"paused()":{"notice":"Getter for the current paused status."},"proofMaturityDelaySeconds()":{"notice":"Getter for the proof maturity delay."},"proofSubmitters(bytes32,uint256)":{"notice":"Mapping of withdrawal hashes to addresses that have submitted a proof for the withdrawal."},"proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])":{"notice":"Proves a withdrawal transaction."},"provenWithdrawals(bytes32,address)":{"notice":"A mapping of withdrawal hashes to proof submitters to `ProvenWithdrawal` data."},"respectedGameType()":{"notice":"The game type that the OptimismPortal consults for output proposals."},"respectedGameTypeUpdatedAt()":{"notice":"The timestamp at which the respected game type was last updated."},"setRespectedGameType(uint32)":{"notice":"Sets the respected game type. Changing this value can alter the security properties of the system, depending on the new game's behavior."},"superchainConfig()":{"notice":"Contract of the Superchain Config."},"systemConfig()":{"notice":"Contract of the SystemConfig."},"version()":{"notice":"Semantic version."}},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","ds-test/=lib/forge-std/lib/ds-test/src/","forge-std/=lib/forge-std/src/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/L1/OptimismPortal2.sol":"OptimismPortal2"},"evmVersion":"london","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888","urls":["bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a","dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e","urls":["bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497","dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3","urls":["bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4","dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149","urls":["bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c","dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66","urls":["bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f","dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10","urls":["bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487","dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0","urls":["bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929","dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7","urls":["bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689","dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy"],"license":"MIT"},"lib/solady/src/utils/LibClone.sol":{"keccak256":"0xfd4b40a4584e736d9d0b045fbc748023804c83819f5e018635a9f447834774a4","urls":["bzz-raw://202fc57397118355d9d573c28d36ff45892e632a12b143f4bc5e7266bfb7737e","dweb:/ipfs/QmZYD6Va3nNUC4B9NHZcyvFmK59i3WnEPPpsi8N355GivN"],"license":"MIT"},"lib/solmate/src/utils/FixedPointMathLib.sol":{"keccak256":"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d","urls":["bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c","dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8"],"license":"MIT"},"src/L1/OptimismPortal2.sol":{"keccak256":"0xcd1bb48f8005d9ed77120615d936441a8fd000b15bec1f32416f819999e4f0ca","urls":["bzz-raw://251a0362b91185a1b53b4053651cc189e1411cdabc4003cbdc7f9efabbd7e22f","dweb:/ipfs/QmfW9o4Pxa2SAbiohXRnqDEbpHWZeqFM4d9QmD3gJjFLQE"],"license":"MIT"},"src/L1/ResourceMetering.sol":{"keccak256":"0xde3ac62c60f27a3f1ba06eec94f4eda45e7ec5544c6a5d6b79543a7184e44408","urls":["bzz-raw://265a2845c4ff0d9076dd0505755cf2bdf799f4fdc09ef016865a26b51f5c3409","dweb:/ipfs/QmRzSdBD8jmQf3U9u2ATRAzzuyo6c5ugz8VA5ZM4vzoGiM"],"license":"MIT"},"src/L1/SuperchainConfig.sol":{"keccak256":"0x5fab874f980fe3e52c3398ddd25b655c56af0c98c15588b2ad9ebf30671d859d","urls":["bzz-raw://4e0aa613d38eceb621f8569fc714f521bc1f2df3d029552186ab3cdf2ee5d53f","dweb:/ipfs/QmZDzFxhTXLW79eohQbr1nghNh3oNC4CUfH7uMX8CsjVAB"],"license":"MIT"},"src/L1/SystemConfig.sol":{"keccak256":"0xc3d6392cbc44e38ddc93b84b82b08ab8e813df771a48926db3f94edde8f2b64a","urls":["bzz-raw://d326d644dc59a57a71f4ff6eaa5c6d1464697c7df337b641fe82091b9050e6ce","dweb:/ipfs/Qmd6tNzBmm8V4cpcMNyFWbWnKPNMRoysmmA62rZjGqpg7f"],"license":"MIT"},"src/dispute/DisputeGameFactory.sol":{"keccak256":"0xc7c6b0c2a051d4a14b3833243fa2e93e5e320bb106ef3979ce77098fb9d6629f","urls":["bzz-raw://cd5cbabb1b0b41f9faf3d2329e519936ea43a1e7da1df6a9be90d2513603b09f","dweb:/ipfs/QmQM5FpgogJQnbmJjdQdoxxMzczx5PBiCNbiRUQiJqHyhM"],"license":"MIT"},"src/dispute/interfaces/IDisputeGame.sol":{"keccak256":"0xe2611453d5cc05f8aa30dc0e5e15ee5ae29fd3eb55a2c034424250baebf12f9b","urls":["bzz-raw://274e00fbcea3b8455bbaa042130bf1f7a5b2b769f28ad57afbf9fabfd74a757a","dweb:/ipfs/QmRKQTfYdMjQYVbuZhdXts1d752eUq8RwrjqqwV5XRYLi6"],"license":"MIT"},"src/dispute/interfaces/IDisputeGameFactory.sol":{"keccak256":"0x204d89d38d4dc0db40fbf898d95e639ac5608810a5a5506a3d80d71177648bda","urls":["bzz-raw://71e5c0ff04f409f30ca4f8ebfae1592c6ca495e315b059f969d11812e6e84dbd","dweb:/ipfs/QmaNKkhkJv7qHzX6bKB3LjpWBupfMPLhoATUGx1HRTLtXh"],"license":"MIT"},"src/dispute/interfaces/IInitializable.sol":{"keccak256":"0xbc553af6501a972850a98fc6284943f8e95a5183a7b4f64198c16fca2338c9dc","urls":["bzz-raw://b1f1c422ce4a9e72f0bbdec36434206da4af3a32d38f922acab957942e994ce5","dweb:/ipfs/QmNQGWBceLxx1CKSMLfwTM584q8UCgUpF4rrFe8pdbWYtj"],"license":"MIT"},"src/dispute/lib/LibGameId.sol":{"keccak256":"0x9a9f30500da6eb7eeaa7193515dc5e45dc479f09ae7d522a07283c0fb5f4bfa6","urls":["bzz-raw://be113d8198d5822385de3d6ff3d7b3e8241993484aa95604ffaf38c2d33f40e0","dweb:/ipfs/QmY9mHC52fqc4gAFYCGobNyuP4TqugQgs8o1kTF33t17Hc"],"license":"MIT"},"src/dispute/lib/LibHashing.sol":{"keccak256":"0x5a072cd028094eee55acb84ed8d08d7422b1fb46658b7e043e916781530a383b","urls":["bzz-raw://b67e54f1318f1fd67b28b16c6861a56e27217c26a12aaea5c446e2ec53143920","dweb:/ipfs/QmVLSTP3PwXzRkR3A4qV9fjZhca9v8J1EnEYuVGUsSirAq"],"license":"MIT"},"src/dispute/lib/LibPosition.sol":{"keccak256":"0xf7ceb26f0ac7067ff8a43f263451050eef6fba2029eafb83d3cbe35224d894a6","urls":["bzz-raw://3bb403b0d707a8e2e3780a19185b918bfe907ca2d1b939ea74ae095a5cdf3b48","dweb:/ipfs/QmYFzkmF8TRomp1cBEbTsKxiEnqLnX6SvSh4y3rVa84pBR"],"license":"MIT"},"src/dispute/lib/LibUDT.sol":{"keccak256":"0x9b61b15f5edfac1e6528aec79c1be6ac712d5f6a62140db87ed749e41a46563f","urls":["bzz-raw://24ef4ecee91638e278886888192b7d2b1811ab99f4e90a06817a4b2651720046","dweb:/ipfs/QmdisoBv1mE9jDv6jvpcbvKhdmJZMMjQmATrEYfBQQrXtZ"],"license":"MIT"},"src/libraries/Arithmetic.sol":{"keccak256":"0x91345e053584f82ad04d682ba821cf3ede808304f5b2a88116a894cf692c21db","urls":["bzz-raw://005e3c42d2edfca0a506cbda94d3b0104eddf20c00bd1bd25272f53f2ef74c72","dweb:/ipfs/QmdaW6Nge6NKoGvFqRpQjBpM2fXpc5y8WpZyBnDnKicdJq"],"license":"MIT"},"src/libraries/Burn.sol":{"keccak256":"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010","urls":["bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f","dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb"],"license":"MIT"},"src/libraries/Bytes.sol":{"keccak256":"0x827f47d123b0fdf3b08816d5b33831811704dbf4e554e53f2269354f6bba8859","urls":["bzz-raw://3137ac7204d30a245a8b0d67aa6da5286f1bd8c90379daab561f84963b6db782","dweb:/ipfs/QmWRhisw3axJK833gUScs23ETh2MLFbVzzqzYVMKSDN3S9"],"license":"MIT"},"src/libraries/Constants.sol":{"keccak256":"0xe0aeec7d6e5d1e44a11405d3b5bfc384ea092c39bea0b763ab937a26fd427132","urls":["bzz-raw://11aa3bff9da26ca2545132ec7994866690446a5321023811c254410d9593bd9b","dweb:/ipfs/QmVxWqadxvdfkqdrhfWisDqeAthibn4HEE1P6o9aFxXLhp"],"license":"MIT"},"src/libraries/DisputeErrors.sol":{"keccak256":"0x869bec0d79d97f2d0a00b1e70bf1e6955a2be585521e0084602e54455c0a6937","urls":["bzz-raw://a235c6349437cd2ade72909287404e2993c1c4bd356707299239c71fa3bf780e","dweb:/ipfs/QmcFSh6PWJ5sNg1CeoRyF9EnV8APWDz1kYP98v6ooGxc71"],"license":"MIT"},"src/libraries/DisputeTypes.sol":{"keccak256":"0xae3d053cf40b3e47669b89438524fec4eb571a78be296cc7e7ba23025b3bdf0c","urls":["bzz-raw://4a2b90604718ad29d19a8f21d45a5f8c6188320781fdb7102b3fccadae549961","dweb:/ipfs/QmUBTXgRFG7PvoCBJsXmgi2sZPZFPQQZTptQ91LL7tC2xQ"],"license":"MIT"},"src/libraries/Encoding.sol":{"keccak256":"0x1dafabcbd4877c7abe9698957b0a44b7e911cb8b11c1437a4ed897135669fa87","urls":["bzz-raw://6addfacefa26fdb44f56d73fa0172b97740de75629a962905ec2a20a28d40fff","dweb:/ipfs/QmboHMouqU19Rnbqrfo1gkfnuDBFcPiC9wsKgGtF2W1cNA"],"license":"MIT"},"src/libraries/Hashing.sol":{"keccak256":"0x89c07a0ca102cbe57b4e082543f2dd6dae0e1fd4a87908a334bd076fc914e7b8","urls":["bzz-raw://69c83489c9544ab442dc244c2feb2c6811b726a5eb5a509b97fc5ccb90b98c12","dweb:/ipfs/QmPGGJeLasc1HWHzd6odvWcNvFPQrbYtDubZcv8yp1HLtF"],"license":"MIT"},"src/libraries/PortalErrors.sol":{"keccak256":"0x57adcaa45a1ce9c5af04d0fe4ecbc86e6ff3f947f7957ab55bdade129adcf558","urls":["bzz-raw://3cf485f11085ad6d1ba1386fdb340f65eb1048187692ad3d9eb8816e290140c1","dweb:/ipfs/Qmb423b45TLV8PdhFa8Hs72eom5D2C5q4gVcYGNzDh4EMU"],"license":"MIT"},"src/libraries/SafeCall.sol":{"keccak256":"0x0636a7abb242bb5d6f5606967c8929e6aa7e63468c1e2ce40ad4780d4c4bf94f","urls":["bzz-raw://a4daec2ac8f9907bbf84ef0a1c48f03bae8657619bc6f42b3a672f25c516f17a","dweb:/ipfs/Qmf8gfRxBv8gEmCkP8YMPb2GGfj9QUnoNUyKE7UR2SWGnq"],"license":"MIT"},"src/libraries/Storage.sol":{"keccak256":"0x7ce27a05552aa69afa6b2ab6684dfe99f27366cf8ef2046baeb1fb62fff0022f","urls":["bzz-raw://a6a24f3ed56681720707a5ab0372fd67fcb1a4f6fb072c7140cda28bdb70f269","dweb:/ipfs/QmW9uTpUULV4xmP7A7MoBDeDhVfQgmJG5qVUFGtXxWpWWK"],"license":"MIT"},"src/libraries/Types.sol":{"keccak256":"0x75900d651301940d24c00d14f0b3b6cbd6dcf379173ceaa31d9bf5be934a9aa4","urls":["bzz-raw://99c2632c5bf4fa3982391c32110eec9fa07917b483b2442cbaf18bdde5bdb24e","dweb:/ipfs/QmSUs6Amkeootf5gKGbKi4mJpvhN2U8i1ED6ef2dskV5xc"],"license":"MIT"},"src/libraries/rlp/RLPReader.sol":{"keccak256":"0x99731a39bc10203719d448117b0e6ef47771890440d595d118084d7988d59afb","urls":["bzz-raw://1dbeb75d0cc8de58350cc15df8867bf97d8492e0617b1c62733ace6155c6915a","dweb:/ipfs/QmNiXzskPE72h93F8EXT8wAXKzEh2EERLbubdVMfwTQbtj"],"license":"MIT"},"src/libraries/rlp/RLPWriter.sol":{"keccak256":"0x60ac401490f321c9c55e996a2c65151cd5e60de5f8f297e7c94d541c29820bb6","urls":["bzz-raw://070f5814db07e4a89173d44a36d90e4261ce530f7336034c01635347f2c2d88b","dweb:/ipfs/QmXqr9yW5Kc8MYgr5wSehU5AiqS9pZ4FKxv7vwiwpZCcyV"],"license":"MIT"},"src/libraries/trie/MerkleTrie.sol":{"keccak256":"0xf8ba770ee6666e73ae43184c700e9c704b2c4ace71f9e3c2227ddc11a8148b4c","urls":["bzz-raw://4702ccee1fe44aea3ee01d59e6152eb755da083f786f00947fec4437c064fe74","dweb:/ipfs/QmQjFj5J7hrEM1dxJjFszzW2Cs7g7eMhYNBXonF2DXBstE"],"license":"MIT"},"src/libraries/trie/SecureMerkleTrie.sol":{"keccak256":"0xeaff8315cfd21197bc6bc859c2decf5d4f4838c9c357c502cdf2b1eac863d288","urls":["bzz-raw://79dcdcaa560aea51d138da4f5dc553a1808b6de090b2dc1629f18375edbff681","dweb:/ipfs/QmbE4pUPhf5fLKW4W6cEjhQs55gEDvHmbmoBqkW1yz3bnw"],"license":"MIT"},"src/universal/ISemver.sol":{"keccak256":"0xba34562a8026f59886d2e07d1d58d90b9691d00e0788c6263cef6c22740cab44","urls":["bzz-raw://0826f998632f83c103c3085bf2e872db79a69022b6d2e0444c83a64ca5283c2a","dweb:/ipfs/QmcJ7PNqkAfKqbjFGRordtAg1v9DvcBSKvdTkVvciLyvQR"],"license":"MIT"},"src/vendor/AddressAliasHelper.sol":{"keccak256":"0x6ecb83b4ec80fbe49c22f4f95d90482de64660ef5d422a19f4d4b04df31c1237","urls":["bzz-raw://1d0885be6e473962f9a0622176a22300165ac0cc1a1d7f2e22b11c3d656ace88","dweb:/ipfs/QmPRa3KmRpXW5P9ykveKRDgYN5zYo4cYLAYSnoqHX3KnXR"],"license":"Apache-2.0"}},"version":1},"storageLayout":{"storage":[{"astId":49534,"contract":"src/L1/OptimismPortal2.sol:OptimismPortal2","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":49537,"contract":"src/L1/OptimismPortal2.sol:OptimismPortal2","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":88262,"contract":"src/L1/OptimismPortal2.sol:OptimismPortal2","label":"params","offset":0,"slot":"1","type":"t_struct(ResourceParams)88245_storage"},{"astId":88267,"contract":"src/L1/OptimismPortal2.sol:OptimismPortal2","label":"__gap","offset":0,"slot":"2","type":"t_array(t_uint256)48_storage"},{"astId":87165,"contract":"src/L1/OptimismPortal2.sol:OptimismPortal2","label":"l2Sender","offset":0,"slot":"50","type":"t_address"},{"astId":87170,"contract":"src/L1/OptimismPortal2.sol:OptimismPortal2","label":"finalizedWithdrawals","offset":0,"slot":"51","type":"t_mapping(t_bytes32,t_bool)"},{"astId":87173,"contract":"src/L1/OptimismPortal2.sol:OptimismPortal2","label":"spacer_52_0_32","offset":0,"slot":"52","type":"t_bytes32"},{"astId":87176,"contract":"src/L1/OptimismPortal2.sol:OptimismPortal2","label":"spacer_53_0_1","offset":0,"slot":"53","type":"t_bool"},{"astId":87180,"contract":"src/L1/OptimismPortal2.sol:OptimismPortal2","label":"superchainConfig","offset":1,"slot":"53","type":"t_contract(SuperchainConfig)88793"},{"astId":87183,"contract":"src/L1/OptimismPortal2.sol:OptimismPortal2","label":"spacer_54_0_20","offset":0,"slot":"54","type":"t_address"},{"astId":87187,"contract":"src/L1/OptimismPortal2.sol:OptimismPortal2","label":"systemConfig","offset":0,"slot":"55","type":"t_contract(SystemConfig)89607"},{"astId":87191,"contract":"src/L1/OptimismPortal2.sol:OptimismPortal2","label":"disputeGameFactory","offset":0,"slot":"56","type":"t_contract(DisputeGameFactory)97682"},{"astId":87199,"contract":"src/L1/OptimismPortal2.sol:OptimismPortal2","label":"provenWithdrawals","offset":0,"slot":"57","type":"t_mapping(t_bytes32,t_mapping(t_address,t_struct(ProvenWithdrawal)87148_storage))"},{"astId":87205,"contract":"src/L1/OptimismPortal2.sol:OptimismPortal2","label":"disputeGameBlacklist","offset":0,"slot":"58","type":"t_mapping(t_contract(IDisputeGame)100327,t_bool)"},{"astId":87209,"contract":"src/L1/OptimismPortal2.sol:OptimismPortal2","label":"respectedGameType","offset":0,"slot":"59","type":"t_userDefinedValueType(GameType)103271"},{"astId":87212,"contract":"src/L1/OptimismPortal2.sol:OptimismPortal2","label":"respectedGameTypeUpdatedAt","offset":4,"slot":"59","type":"t_uint64"},{"astId":87218,"contract":"src/L1/OptimismPortal2.sol:OptimismPortal2","label":"proofSubmitters","offset":0,"slot":"60","type":"t_mapping(t_bytes32,t_array(t_address)dyn_storage)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"encoding":"dynamic_array","label":"address[]","numberOfBytes":"32","base":"t_address"},"t_array(t_uint256)48_storage":{"encoding":"inplace","label":"uint256[48]","numberOfBytes":"1536","base":"t_uint256"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(DisputeGameFactory)97682":{"encoding":"inplace","label":"contract DisputeGameFactory","numberOfBytes":"20"},"t_contract(IDisputeGame)100327":{"encoding":"inplace","label":"contract IDisputeGame","numberOfBytes":"20"},"t_contract(SuperchainConfig)88793":{"encoding":"inplace","label":"contract SuperchainConfig","numberOfBytes":"20"},"t_contract(SystemConfig)89607":{"encoding":"inplace","label":"contract SystemConfig","numberOfBytes":"20"},"t_mapping(t_address,t_struct(ProvenWithdrawal)87148_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct OptimismPortal2.ProvenWithdrawal)","numberOfBytes":"32","value":"t_struct(ProvenWithdrawal)87148_storage"},"t_mapping(t_bytes32,t_array(t_address)dyn_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => address[])","numberOfBytes":"32","value":"t_array(t_address)dyn_storage"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_mapping(t_address,t_struct(ProvenWithdrawal)87148_storage))":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => mapping(address => struct OptimismPortal2.ProvenWithdrawal))","numberOfBytes":"32","value":"t_mapping(t_address,t_struct(ProvenWithdrawal)87148_storage)"},"t_mapping(t_contract(IDisputeGame)100327,t_bool)":{"encoding":"mapping","key":"t_contract(IDisputeGame)100327","label":"mapping(contract IDisputeGame => bool)","numberOfBytes":"32","value":"t_bool"},"t_struct(ProvenWithdrawal)87148_storage":{"encoding":"inplace","label":"struct OptimismPortal2.ProvenWithdrawal","numberOfBytes":"32","members":[{"astId":87145,"contract":"src/L1/OptimismPortal2.sol:OptimismPortal2","label":"disputeGameProxy","offset":0,"slot":"0","type":"t_contract(IDisputeGame)100327"},{"astId":87147,"contract":"src/L1/OptimismPortal2.sol:OptimismPortal2","label":"timestamp","offset":20,"slot":"0","type":"t_uint64"}]},"t_struct(ResourceParams)88245_storage":{"encoding":"inplace","label":"struct ResourceMetering.ResourceParams","numberOfBytes":"32","members":[{"astId":88240,"contract":"src/L1/OptimismPortal2.sol:OptimismPortal2","label":"prevBaseFee","offset":0,"slot":"0","type":"t_uint128"},{"astId":88242,"contract":"src/L1/OptimismPortal2.sol:OptimismPortal2","label":"prevBoughtGas","offset":16,"slot":"0","type":"t_uint64"},{"astId":88244,"contract":"src/L1/OptimismPortal2.sol:OptimismPortal2","label":"prevBlockNum","offset":24,"slot":"0","type":"t_uint64"}]},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint64":{"encoding":"inplace","label":"uint64","numberOfBytes":"8"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"},"t_userDefinedValueType(GameType)103271":{"encoding":"inplace","label":"GameType","numberOfBytes":"4"}}},"userdoc":{"version":1,"kind":"user","methods":{"blacklistDisputeGame(address)":{"notice":"Blacklists a dispute game. Should only be used in the event that a dispute game resolves incorrectly."},"checkWithdrawal(bytes32,address)":{"notice":"Checks if a withdrawal can be finalized. This function will revert if the withdrawal cannot be finalized, and otherwise has no side-effects."},"constructor":{"notice":"Constructs the OptimismPortal contract."},"depositTransaction(address,uint256,uint64,bool,bytes)":{"notice":"Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in deriving deposit transactions. Note that if a deposit is made by a contract, its address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider using the CrossDomainMessenger contracts for a simpler developer experience."},"disputeGameBlacklist(address)":{"notice":"A mapping of dispute game addresses to whether or not they are blacklisted."},"disputeGameFactory()":{"notice":"Address of the DisputeGameFactory."},"disputeGameFinalityDelaySeconds()":{"notice":"Getter for the dispute game finality delay."},"donateETH()":{"notice":"Accepts ETH value without triggering a deposit to L2. This function mainly exists for the sake of the migration between the legacy Optimism system and Bedrock."},"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))":{"notice":"Finalizes a withdrawal transaction."},"finalizeWithdrawalTransactionExternalProof((uint256,address,address,uint256,uint256,bytes),address)":{"notice":"Finalizes a withdrawal transaction, using an external proof submitter."},"finalizedWithdrawals(bytes32)":{"notice":"A list of withdrawal hashes which have been successfully finalized."},"guardian()":{"notice":"Getter function for the address of the guardian. Public getter is legacy and will be removed in the future. Use `SuperchainConfig.guardian()` instead."},"initialize(address,address,address,uint32)":{"notice":"Initializer."},"l2Sender()":{"notice":"Address of the L2 account which initiated a withdrawal in this transaction. If the of this variable is the default L2 sender address, then we are NOT inside of a call to finalizeWithdrawalTransaction."},"minimumGasLimit(uint64)":{"notice":"Computes the minimum gas limit for a deposit. The minimum gas limit linearly increases based on the size of the calldata. This is to prevent users from creating L2 resource usage without paying for it. This function can be used when interacting with the portal to ensure forwards compatibility."},"numProofSubmitters(bytes32)":{"notice":"External getter for the number of proof submitters for a withdrawal hash."},"params()":{"notice":"EIP-1559 style gas parameters."},"paused()":{"notice":"Getter for the current paused status."},"proofMaturityDelaySeconds()":{"notice":"Getter for the proof maturity delay."},"proofSubmitters(bytes32,uint256)":{"notice":"Mapping of withdrawal hashes to addresses that have submitted a proof for the withdrawal."},"proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])":{"notice":"Proves a withdrawal transaction."},"provenWithdrawals(bytes32,address)":{"notice":"A mapping of withdrawal hashes to proof submitters to `ProvenWithdrawal` data."},"respectedGameType()":{"notice":"The game type that the OptimismPortal consults for output proposals."},"respectedGameTypeUpdatedAt()":{"notice":"The timestamp at which the respected game type was last updated."},"setRespectedGameType(uint32)":{"notice":"Sets the respected game type. Changing this value can alter the security properties of the system, depending on the new game's behavior."},"superchainConfig()":{"notice":"Contract of the Superchain Config."},"systemConfig()":{"notice":"Contract of the SystemConfig."},"version()":{"notice":"Semantic version."}},"events":{"TransactionDeposited(address,address,uint256,bytes)":{"notice":"Emitted when a transaction is deposited from L1 to L2. The parameters of this event are read by the rollup node and used to derive deposit transactions on L2."},"WithdrawalFinalized(bytes32,bool)":{"notice":"Emitted when a withdrawal transaction is finalized."},"WithdrawalProven(bytes32,address,address)":{"notice":"Emitted when a withdrawal transaction is proven."}},"errors":{"BadTarget()":[{"notice":"Error for when a deposit or withdrawal is to a bad target."}],"CallPaused()":[{"notice":"Error for when a method cannot be called when paused. This could be renamed to `Paused` in the future, but it collides with the `Paused` event."}],"GasEstimation()":[{"notice":"Error for special gas estimation."}],"LargeCalldata()":[{"notice":"Error for when a deposit has too much calldata."}],"OutOfGas()":[{"notice":"Error returned when too much gas resource is consumed."}],"SmallGasLimit()":[{"notice":"Error for when a deposit has too small of a gas limit."}],"Unauthorized()":[{"notice":"Error for an unauthorized CALLER."}]},"notice":"The OptimismPortal is a low-level contract responsible for passing messages between L1 and L2. Messages sent directly to the OptimismPortal have no form of replayability. Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface."},"devdoc":{"version":1,"kind":"dev","methods":{"blacklistDisputeGame(address)":{"params":{"_disputeGame":"Dispute game to blacklist."}},"checkWithdrawal(bytes32,address)":{"params":{"_proofSubmitter":"The submitter of the proof for the withdrawal hash","_withdrawalHash":"Hash of the withdrawal to check."}},"depositTransaction(address,uint256,uint64,bool,bytes)":{"params":{"_data":"Data to trigger the recipient with.","_gasLimit":"Amount of L2 gas to purchase by burning gas on L1.","_isCreation":"Whether or not the transaction is a contract creation.","_to":"Target address on L2.","_value":"ETH value to send to the recipient."}},"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))":{"params":{"_tx":"Withdrawal transaction to finalize."}},"finalizeWithdrawalTransactionExternalProof((uint256,address,address,uint256,uint256,bytes),address)":{"params":{"_proofSubmitter":"Address of the proof submitter.","_tx":"Withdrawal transaction to finalize."}},"guardian()":{"returns":{"_0":"Address of the guardian."}},"initialize(address,address,address,uint32)":{"params":{"_disputeGameFactory":"Contract of the DisputeGameFactory.","_superchainConfig":"Contract of the SuperchainConfig.","_systemConfig":"Contract of the SystemConfig."}},"minimumGasLimit(uint64)":{"params":{"_byteCount":"Number of bytes in the calldata."},"returns":{"_0":"The minimum gas limit for a deposit."}},"numProofSubmitters(bytes32)":{"params":{"_withdrawalHash":"Hash of the withdrawal."},"returns":{"_0":"The number of proof submitters for the withdrawal hash."}},"proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])":{"params":{"_disputeGameIndex":"Index of the dispute game to prove the withdrawal against.","_outputRootProof":"Inclusion proof of the L2ToL1MessagePasser contract's storage root.","_tx":"Withdrawal transaction to finalize.","_withdrawalProof":"Inclusion proof of the withdrawal in L2ToL1MessagePasser contract."}},"setRespectedGameType(uint32)":{"params":{"_gameType":"The game type to consult for output proposals."}}},"events":{"TransactionDeposited(address,address,uint256,bytes)":{"params":{"from":"Address that triggered the deposit transaction.","opaqueData":"ABI encoded deposit data to be parsed off-chain.","to":"Address that the deposit transaction is directed to.","version":"Version of this deposit transaction event."}},"WithdrawalFinalized(bytes32,bool)":{"params":{"success":"Whether the withdrawal transaction was successful.","withdrawalHash":"Hash of the withdrawal transaction."}},"WithdrawalProven(bytes32,address,address)":{"params":{"from":"Address that triggered the withdrawal transaction.","to":"Address that the withdrawal transaction is directed to.","withdrawalHash":"Hash of the withdrawal transaction."}}}},"ast":{"absolutePath":"src/L1/OptimismPortal2.sol","id":87972,"exportedSymbols":{"AddressAliasHelper":[111913],"BadTarget":[103969],"BondAmount":[103259],"CallPaused":[103990],"Claim":[103255],"ClaimHash":[103257],"Clock":[103267],"Constants":[103096],"DisputeGameFactory":[97682],"Duration":[103263],"GameId":[103265],"GameStatus":[103277],"GameType":[103271],"GameTypes":[103317],"GasEstimation":[103993],"Hash":[103253],"Hashing":[103936],"IDisputeGame":[100327],"ISemver":[109417],"Initializable":[49678],"LargeCalldata":[103972],"LibClaim":[101086],"LibClock":[101073],"LibDuration":[101099],"LibGameId":[100778],"LibGameType":[101151],"LibHash":[101112],"LibHashing":[100800],"LibPosition":[101018],"LibTimestamp":[101125],"LibVMStatus":[101138],"LocalPreimageKey":[103373],"NoValue":[103984],"OnlyCustomGasToken":[103981],"OptimismPortal2":[87971],"OutputRoot":[103283],"Position":[103269],"ResourceMetering":[88581],"SafeCall":[104213],"SecureMerkleTrie":[106033],"SmallGasLimit":[103975],"SuperchainConfig":[88793],"SystemConfig":[89607],"Timestamp":[103261],"TransferFailed":[103978],"Types":[104349],"Unauthorized":[103987],"VMStatus":[103273],"VMStatuses":[103351]},"nodeType":"SourceUnit","src":"32:24886:135","nodes":[{"id":87106,"nodeType":"PragmaDirective","src":"32:23:135","nodes":[],"literals":["solidity","0.8",".15"]},{"id":87108,"nodeType":"ImportDirective","src":"57:86:135","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":87972,"sourceUnit":49679,"symbolAliases":[{"foreign":{"id":87107,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49678,"src":"66:13:135","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":87110,"nodeType":"ImportDirective","src":"144:54:135","nodes":[],"absolutePath":"src/libraries/SafeCall.sol","file":"src/libraries/SafeCall.sol","nameLocation":"-1:-1:-1","scope":87972,"sourceUnit":104214,"symbolAliases":[{"foreign":{"id":87109,"name":"SafeCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104213,"src":"153:8:135","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":87113,"nodeType":"ImportDirective","src":"199:86:135","nodes":[],"absolutePath":"src/dispute/DisputeGameFactory.sol","file":"src/dispute/DisputeGameFactory.sol","nameLocation":"-1:-1:-1","scope":87972,"sourceUnit":97683,"symbolAliases":[{"foreign":{"id":87111,"name":"DisputeGameFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97682,"src":"208:18:135","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":87112,"name":"IDisputeGame","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100327,"src":"228:12:135","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":87115,"nodeType":"ImportDirective","src":"286:55:135","nodes":[],"absolutePath":"src/L1/SystemConfig.sol","file":"src/L1/SystemConfig.sol","nameLocation":"-1:-1:-1","scope":87972,"sourceUnit":89608,"symbolAliases":[{"foreign":{"id":87114,"name":"SystemConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":89607,"src":"295:12:135","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":87117,"nodeType":"ImportDirective","src":"342:63:135","nodes":[],"absolutePath":"src/L1/SuperchainConfig.sol","file":"src/L1/SuperchainConfig.sol","nameLocation":"-1:-1:-1","scope":87972,"sourceUnit":88794,"symbolAliases":[{"foreign":{"id":87116,"name":"SuperchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":88793,"src":"351:16:135","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":87119,"nodeType":"ImportDirective","src":"406:56:135","nodes":[],"absolutePath":"src/libraries/Constants.sol","file":"src/libraries/Constants.sol","nameLocation":"-1:-1:-1","scope":87972,"sourceUnit":103097,"symbolAliases":[{"foreign":{"id":87118,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103096,"src":"415:9:135","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":87121,"nodeType":"ImportDirective","src":"463:48:135","nodes":[],"absolutePath":"src/libraries/Types.sol","file":"src/libraries/Types.sol","nameLocation":"-1:-1:-1","scope":87972,"sourceUnit":104350,"symbolAliases":[{"foreign":{"id":87120,"name":"Types","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104349,"src":"472:5:135","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":87123,"nodeType":"ImportDirective","src":"512:52:135","nodes":[],"absolutePath":"src/libraries/Hashing.sol","file":"src/libraries/Hashing.sol","nameLocation":"-1:-1:-1","scope":87972,"sourceUnit":103937,"symbolAliases":[{"foreign":{"id":87122,"name":"Hashing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103936,"src":"521:7:135","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":87125,"nodeType":"ImportDirective","src":"565:75:135","nodes":[],"absolutePath":"src/libraries/trie/SecureMerkleTrie.sol","file":"src/libraries/trie/SecureMerkleTrie.sol","nameLocation":"-1:-1:-1","scope":87972,"sourceUnit":106034,"symbolAliases":[{"foreign":{"id":87124,"name":"SecureMerkleTrie","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":106033,"src":"574:16:135","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":87127,"nodeType":"ImportDirective","src":"641:71:135","nodes":[],"absolutePath":"src/vendor/AddressAliasHelper.sol","file":"src/vendor/AddressAliasHelper.sol","nameLocation":"-1:-1:-1","scope":87972,"sourceUnit":111914,"symbolAliases":[{"foreign":{"id":87126,"name":"AddressAliasHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111913,"src":"650:18:135","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":87129,"nodeType":"ImportDirective","src":"713:63:135","nodes":[],"absolutePath":"src/L1/ResourceMetering.sol","file":"src/L1/ResourceMetering.sol","nameLocation":"-1:-1:-1","scope":87972,"sourceUnit":88582,"symbolAliases":[{"foreign":{"id":87128,"name":"ResourceMetering","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":88581,"src":"722:16:135","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":87131,"nodeType":"ImportDirective","src":"777:52:135","nodes":[],"absolutePath":"src/universal/ISemver.sol","file":"src/universal/ISemver.sol","nameLocation":"-1:-1:-1","scope":87972,"sourceUnit":109418,"symbolAliases":[{"foreign":{"id":87130,"name":"ISemver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109417,"src":"786:7:135","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":87133,"nodeType":"ImportDirective","src":"830:56:135","nodes":[],"absolutePath":"src/libraries/Constants.sol","file":"src/libraries/Constants.sol","nameLocation":"-1:-1:-1","scope":87972,"sourceUnit":103097,"symbolAliases":[{"foreign":{"id":87132,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103096,"src":"839:9:135","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":87134,"nodeType":"ImportDirective","src":"888:40:135","nodes":[],"absolutePath":"src/libraries/PortalErrors.sol","file":"src/libraries/PortalErrors.sol","nameLocation":"-1:-1:-1","scope":87972,"sourceUnit":103994,"symbolAliases":[],"unitAlias":""},{"id":87135,"nodeType":"ImportDirective","src":"929:40:135","nodes":[],"absolutePath":"src/libraries/DisputeTypes.sol","file":"src/libraries/DisputeTypes.sol","nameLocation":"-1:-1:-1","scope":87972,"sourceUnit":103374,"symbolAliases":[],"unitAlias":""},{"id":87971,"nodeType":"ContractDefinition","src":"1310:23607:135","nodes":[{"id":87148,"nodeType":"StructDefinition","src":"1635:96:135","nodes":[],"canonicalName":"OptimismPortal2.ProvenWithdrawal","members":[{"constant":false,"id":87145,"mutability":"mutable","name":"disputeGameProxy","nameLocation":"1682:16:135","nodeType":"VariableDeclaration","scope":87148,"src":"1669:29:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"},"typeName":{"id":87144,"nodeType":"UserDefinedTypeName","pathNode":{"id":87143,"name":"IDisputeGame","nodeType":"IdentifierPath","referencedDeclaration":100327,"src":"1669:12:135"},"referencedDeclaration":100327,"src":"1669:12:135","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"visibility":"internal"},{"constant":false,"id":87147,"mutability":"mutable","name":"timestamp","nameLocation":"1715:9:135","nodeType":"VariableDeclaration","scope":87148,"src":"1708:16:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":87146,"name":"uint64","nodeType":"ElementaryTypeName","src":"1708:6:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"name":"ProvenWithdrawal","nameLocation":"1642:16:135","scope":87971,"visibility":"public"},{"id":87151,"nodeType":"VariableDeclaration","src":"1841:55:135","nodes":[],"constant":false,"documentation":{"id":87149,"nodeType":"StructuredDocumentation","src":"1737:99:135","text":"@notice The delay between when a withdrawal transaction is proven and when it may be finalized."},"mutability":"immutable","name":"PROOF_MATURITY_DELAY_SECONDS","nameLocation":"1868:28:135","scope":87971,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":87150,"name":"uint256","nodeType":"ElementaryTypeName","src":"1841:7:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"id":87154,"nodeType":"VariableDeclaration","src":"2043:62:135","nodes":[],"constant":false,"documentation":{"id":87152,"nodeType":"StructuredDocumentation","src":"1903:135:135","text":"@notice The delay between when a dispute game is resolved and when a withdrawal proven against it may be\n finalized."},"mutability":"immutable","name":"DISPUTE_GAME_FINALITY_DELAY_SECONDS","nameLocation":"2070:35:135","scope":87971,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":87153,"name":"uint256","nodeType":"ElementaryTypeName","src":"2043:7:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"id":87158,"nodeType":"VariableDeclaration","src":"2158:45:135","nodes":[],"constant":true,"documentation":{"id":87155,"nodeType":"StructuredDocumentation","src":"2112:41:135","text":"@notice Version of the deposit event."},"mutability":"constant","name":"DEPOSIT_VERSION","nameLocation":"2184:15:135","scope":87971,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":87156,"name":"uint256","nodeType":"ElementaryTypeName","src":"2158:7:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":87157,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2202:1:135","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"internal"},{"id":87162,"nodeType":"VariableDeclaration","src":"2299:60:135","nodes":[],"constant":true,"documentation":{"id":87159,"nodeType":"StructuredDocumentation","src":"2210:84:135","text":"@notice The L2 gas limit set when eth is deposited using the receive() function."},"mutability":"constant","name":"RECEIVE_DEFAULT_GAS_LIMIT","nameLocation":"2324:25:135","scope":87971,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":87160,"name":"uint64","nodeType":"ElementaryTypeName","src":"2299:6:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"value":{"hexValue":"3130305f303030","id":87161,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2352:7:135","typeDescriptions":{"typeIdentifier":"t_rational_100000_by_1","typeString":"int_const 100000"},"value":"100_000"},"visibility":"internal"},{"id":87165,"nodeType":"VariableDeclaration","src":"2615:23:135","nodes":[],"constant":false,"documentation":{"id":87163,"nodeType":"StructuredDocumentation","src":"2366:244:135","text":"@notice Address of the L2 account which initiated a withdrawal in this transaction.\n If the of this variable is the default L2 sender address, then we are NOT inside of\n a call to finalizeWithdrawalTransaction."},"functionSelector":"9bf62d82","mutability":"mutable","name":"l2Sender","nameLocation":"2630:8:135","scope":87971,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":87164,"name":"address","nodeType":"ElementaryTypeName","src":"2615:7:135","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":87170,"nodeType":"VariableDeclaration","src":"2729:52:135","nodes":[],"constant":false,"documentation":{"id":87166,"nodeType":"StructuredDocumentation","src":"2645:79:135","text":"@notice A list of withdrawal hashes which have been successfully finalized."},"functionSelector":"a14238e7","mutability":"mutable","name":"finalizedWithdrawals","nameLocation":"2761:20:135","scope":87971,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"},"typeName":{"id":87169,"keyType":{"id":87167,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2737:7:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"2729:24:135","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"},"valueType":{"id":87168,"name":"bool","nodeType":"ElementaryTypeName","src":"2748:4:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"id":87173,"nodeType":"VariableDeclaration","src":"2930:30:135","nodes":[],"constant":false,"documentation":{"id":87171,"nodeType":"StructuredDocumentation","src":"2788:137:135","text":"@custom:legacy\n @custom:spacer provenWithdrawals\n @notice Spacer taking up the legacy `provenWithdrawals` mapping slot."},"mutability":"mutable","name":"spacer_52_0_32","nameLocation":"2946:14:135","scope":87971,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":87172,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2930:7:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"id":87176,"nodeType":"VariableDeclaration","src":"3072:26:135","nodes":[],"constant":false,"documentation":{"id":87174,"nodeType":"StructuredDocumentation","src":"2967:100:135","text":"@custom:legacy\n @custom:spacer paused\n @notice Spacer for backwards compatibility."},"mutability":"mutable","name":"spacer_53_0_1","nameLocation":"3085:13:135","scope":87971,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":87175,"name":"bool","nodeType":"ElementaryTypeName","src":"3072:4:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"id":87180,"nodeType":"VariableDeclaration","src":"3156:40:135","nodes":[],"constant":false,"documentation":{"id":87177,"nodeType":"StructuredDocumentation","src":"3105:46:135","text":"@notice Contract of the Superchain Config."},"functionSelector":"35e80ab3","mutability":"mutable","name":"superchainConfig","nameLocation":"3180:16:135","scope":87971,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"},"typeName":{"id":87179,"nodeType":"UserDefinedTypeName","pathNode":{"id":87178,"name":"SuperchainConfig","nodeType":"IdentifierPath","referencedDeclaration":88793,"src":"3156:16:135"},"referencedDeclaration":88793,"src":"3156:16:135","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"visibility":"public"},{"id":87183,"nodeType":"VariableDeclaration","src":"3327:30:135","nodes":[],"constant":false,"documentation":{"id":87181,"nodeType":"StructuredDocumentation","src":"3203:119:135","text":"@custom:legacy\n @custom:spacer l2Oracle\n @notice Spacer taking up the legacy `l2Oracle` address slot."},"mutability":"mutable","name":"spacer_54_0_20","nameLocation":"3343:14:135","scope":87971,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":87182,"name":"address","nodeType":"ElementaryTypeName","src":"3327:7:135","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"id":87187,"nodeType":"VariableDeclaration","src":"3443:32:135","nodes":[],"constant":false,"documentation":{"id":87184,"nodeType":"StructuredDocumentation","src":"3364:74:135","text":"@notice Contract of the SystemConfig.\n @custom:network-specific"},"functionSelector":"33d7e2bd","mutability":"mutable","name":"systemConfig","nameLocation":"3463:12:135","scope":87971,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_SystemConfig_$89607","typeString":"contract SystemConfig"},"typeName":{"id":87186,"nodeType":"UserDefinedTypeName","pathNode":{"id":87185,"name":"SystemConfig","nodeType":"IdentifierPath","referencedDeclaration":89607,"src":"3443:12:135"},"referencedDeclaration":89607,"src":"3443:12:135","typeDescriptions":{"typeIdentifier":"t_contract$_SystemConfig_$89607","typeString":"contract SystemConfig"}},"visibility":"public"},{"id":87191,"nodeType":"VariableDeclaration","src":"3566:44:135","nodes":[],"constant":false,"documentation":{"id":87188,"nodeType":"StructuredDocumentation","src":"3482:79:135","text":"@notice Address of the DisputeGameFactory.\n @custom:network-specific"},"functionSelector":"f2b4e617","mutability":"mutable","name":"disputeGameFactory","nameLocation":"3592:18:135","scope":87971,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_DisputeGameFactory_$97682","typeString":"contract DisputeGameFactory"},"typeName":{"id":87190,"nodeType":"UserDefinedTypeName","pathNode":{"id":87189,"name":"DisputeGameFactory","nodeType":"IdentifierPath","referencedDeclaration":97682,"src":"3566:18:135"},"referencedDeclaration":97682,"src":"3566:18:135","typeDescriptions":{"typeIdentifier":"t_contract$_DisputeGameFactory_$97682","typeString":"contract DisputeGameFactory"}},"visibility":"public"},{"id":87199,"nodeType":"VariableDeclaration","src":"3712:81:135","nodes":[],"constant":false,"documentation":{"id":87192,"nodeType":"StructuredDocumentation","src":"3617:90:135","text":"@notice A mapping of withdrawal hashes to proof submitters to `ProvenWithdrawal` data."},"functionSelector":"bb2c727e","mutability":"mutable","name":"provenWithdrawals","nameLocation":"3776:17:135","scope":87971,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_struct$_ProvenWithdrawal_$87148_storage_$_$","typeString":"mapping(bytes32 => mapping(address => struct OptimismPortal2.ProvenWithdrawal))"},"typeName":{"id":87198,"keyType":{"id":87193,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3720:7:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"3712:56:135","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_struct$_ProvenWithdrawal_$87148_storage_$_$","typeString":"mapping(bytes32 => mapping(address => struct OptimismPortal2.ProvenWithdrawal))"},"valueType":{"id":87197,"keyType":{"id":87194,"name":"address","nodeType":"ElementaryTypeName","src":"3739:7:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3731:36:135","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ProvenWithdrawal_$87148_storage_$","typeString":"mapping(address => struct OptimismPortal2.ProvenWithdrawal)"},"valueType":{"id":87196,"nodeType":"UserDefinedTypeName","pathNode":{"id":87195,"name":"ProvenWithdrawal","nodeType":"IdentifierPath","referencedDeclaration":87148,"src":"3750:16:135"},"referencedDeclaration":87148,"src":"3750:16:135","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$87148_storage_ptr","typeString":"struct OptimismPortal2.ProvenWithdrawal"}}}},"visibility":"public"},{"id":87205,"nodeType":"VariableDeclaration","src":"3892:57:135","nodes":[],"constant":false,"documentation":{"id":87200,"nodeType":"StructuredDocumentation","src":"3800:87:135","text":"@notice A mapping of dispute game addresses to whether or not they are blacklisted."},"functionSelector":"45884d32","mutability":"mutable","name":"disputeGameBlacklist","nameLocation":"3929:20:135","scope":87971,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IDisputeGame_$100327_$_t_bool_$","typeString":"mapping(contract IDisputeGame => bool)"},"typeName":{"id":87204,"keyType":{"id":87202,"nodeType":"UserDefinedTypeName","pathNode":{"id":87201,"name":"IDisputeGame","nodeType":"IdentifierPath","referencedDeclaration":100327,"src":"3900:12:135"},"referencedDeclaration":100327,"src":"3900:12:135","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"nodeType":"Mapping","src":"3892:29:135","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IDisputeGame_$100327_$_t_bool_$","typeString":"mapping(contract IDisputeGame => bool)"},"valueType":{"id":87203,"name":"bool","nodeType":"ElementaryTypeName","src":"3916:4:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"id":87209,"nodeType":"VariableDeclaration","src":"4041:33:135","nodes":[],"constant":false,"documentation":{"id":87206,"nodeType":"StructuredDocumentation","src":"3956:80:135","text":"@notice The game type that the OptimismPortal consults for output proposals."},"functionSelector":"3c9f397c","mutability":"mutable","name":"respectedGameType","nameLocation":"4057:17:135","scope":87971,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"},"typeName":{"id":87208,"nodeType":"UserDefinedTypeName","pathNode":{"id":87207,"name":"GameType","nodeType":"IdentifierPath","referencedDeclaration":103271,"src":"4041:8:135"},"referencedDeclaration":103271,"src":"4041:8:135","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"visibility":"public"},{"id":87212,"nodeType":"VariableDeclaration","src":"4162:40:135","nodes":[],"constant":false,"documentation":{"id":87210,"nodeType":"StructuredDocumentation","src":"4081:76:135","text":"@notice The timestamp at which the respected game type was last updated."},"functionSelector":"4fd0434c","mutability":"mutable","name":"respectedGameTypeUpdatedAt","nameLocation":"4176:26:135","scope":87971,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":87211,"name":"uint64","nodeType":"ElementaryTypeName","src":"4162:6:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"public"},{"id":87218,"nodeType":"VariableDeclaration","src":"4315:52:135","nodes":[],"constant":false,"documentation":{"id":87213,"nodeType":"StructuredDocumentation","src":"4209:101:135","text":"@notice Mapping of withdrawal hashes to addresses that have submitted a proof for the withdrawal."},"functionSelector":"a3860f48","mutability":"mutable","name":"proofSubmitters","nameLocation":"4352:15:135","scope":87971,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_address_$dyn_storage_$","typeString":"mapping(bytes32 => address[])"},"typeName":{"id":87217,"keyType":{"id":87214,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4323:7:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"4315:29:135","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_address_$dyn_storage_$","typeString":"mapping(bytes32 => address[])"},"valueType":{"baseType":{"id":87215,"name":"address","nodeType":"ElementaryTypeName","src":"4334:7:135","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":87216,"nodeType":"ArrayTypeName","src":"4334:9:135","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"visibility":"public"},{"id":87229,"nodeType":"EventDefinition","src":"4878:112:135","nodes":[],"anonymous":false,"documentation":{"id":87219,"nodeType":"StructuredDocumentation","src":"4374:499:135","text":"@notice Emitted when a transaction is deposited from L1 to L2.\n The parameters of this event are read by the rollup node and used to derive deposit\n transactions on L2.\n @param from Address that triggered the deposit transaction.\n @param to Address that the deposit transaction is directed to.\n @param version Version of this deposit transaction event.\n @param opaqueData ABI encoded deposit data to be parsed off-chain."},"eventSelector":"b3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32","name":"TransactionDeposited","nameLocation":"4884:20:135","parameters":{"id":87228,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87221,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"4921:4:135","nodeType":"VariableDeclaration","scope":87229,"src":"4905:20:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":87220,"name":"address","nodeType":"ElementaryTypeName","src":"4905:7:135","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":87223,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"4943:2:135","nodeType":"VariableDeclaration","scope":87229,"src":"4927:18:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":87222,"name":"address","nodeType":"ElementaryTypeName","src":"4927:7:135","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":87225,"indexed":true,"mutability":"mutable","name":"version","nameLocation":"4963:7:135","nodeType":"VariableDeclaration","scope":87229,"src":"4947:23:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":87224,"name":"uint256","nodeType":"ElementaryTypeName","src":"4947:7:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":87227,"indexed":false,"mutability":"mutable","name":"opaqueData","nameLocation":"4978:10:135","nodeType":"VariableDeclaration","scope":87229,"src":"4972:16:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":87226,"name":"bytes","nodeType":"ElementaryTypeName","src":"4972:5:135","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4904:85:135"}},{"id":87238,"nodeType":"EventDefinition","src":"5294:97:135","nodes":[],"anonymous":false,"documentation":{"id":87230,"nodeType":"StructuredDocumentation","src":"4996:293:135","text":"@notice Emitted when a withdrawal transaction is proven.\n @param withdrawalHash Hash of the withdrawal transaction.\n @param from Address that triggered the withdrawal transaction.\n @param to Address that the withdrawal transaction is directed to."},"eventSelector":"67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f62","name":"WithdrawalProven","nameLocation":"5300:16:135","parameters":{"id":87237,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87232,"indexed":true,"mutability":"mutable","name":"withdrawalHash","nameLocation":"5333:14:135","nodeType":"VariableDeclaration","scope":87238,"src":"5317:30:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":87231,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5317:7:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":87234,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"5365:4:135","nodeType":"VariableDeclaration","scope":87238,"src":"5349:20:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":87233,"name":"address","nodeType":"ElementaryTypeName","src":"5349:7:135","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":87236,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"5387:2:135","nodeType":"VariableDeclaration","scope":87238,"src":"5371:18:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":87235,"name":"address","nodeType":"ElementaryTypeName","src":"5371:7:135","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5316:74:135"}},{"id":87245,"nodeType":"EventDefinition","src":"5612:72:135","nodes":[],"anonymous":false,"documentation":{"id":87239,"nodeType":"StructuredDocumentation","src":"5397:210:135","text":"@notice Emitted when a withdrawal transaction is finalized.\n @param withdrawalHash Hash of the withdrawal transaction.\n @param success Whether the withdrawal transaction was successful."},"eventSelector":"db5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b","name":"WithdrawalFinalized","nameLocation":"5618:19:135","parameters":{"id":87244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87241,"indexed":true,"mutability":"mutable","name":"withdrawalHash","nameLocation":"5654:14:135","nodeType":"VariableDeclaration","scope":87245,"src":"5638:30:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":87240,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5638:7:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":87243,"indexed":false,"mutability":"mutable","name":"success","nameLocation":"5675:7:135","nodeType":"VariableDeclaration","scope":87245,"src":"5670:12:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":87242,"name":"bool","nodeType":"ElementaryTypeName","src":"5670:4:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5637:46:135"}},{"id":87256,"nodeType":"ModifierDefinition","src":"5727:86:135","nodes":[],"body":{"id":87255,"nodeType":"Block","src":"5752:61:135","nodes":[],"statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":87248,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87383,"src":"5766:6:135","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":87249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5766:8:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":87253,"nodeType":"IfStatement","src":"5762:33:135","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":87250,"name":"CallPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103990,"src":"5783:10:135","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":87251,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5783:12:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87252,"nodeType":"RevertStatement","src":"5776:19:135"}},{"id":87254,"nodeType":"PlaceholderStatement","src":"5805:1:135"}]},"documentation":{"id":87246,"nodeType":"StructuredDocumentation","src":"5690:32:135","text":"@notice Reverts when paused."},"name":"whenNotPaused","nameLocation":"5736:13:135","parameters":{"id":87247,"nodeType":"ParameterList","parameters":[],"src":"5749:2:135"},"virtual":false,"visibility":"internal"},{"id":87260,"nodeType":"VariableDeclaration","src":"5882:40:135","nodes":[],"baseFunctions":[109416],"constant":true,"documentation":{"id":87257,"nodeType":"StructuredDocumentation","src":"5819:58:135","text":"@notice Semantic version.\n @custom:semver 3.8.0"},"functionSelector":"54fd4d50","mutability":"constant","name":"version","nameLocation":"5905:7:135","scope":87971,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":87258,"name":"string","nodeType":"ElementaryTypeName","src":"5882:6:135","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"332e382e30","id":87259,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5915:7:135","typeDescriptions":{"typeIdentifier":"t_stringliteral_f9c59c463d339610f985b3aa69b5b5031ed3afd32f941c9c4c60b492e8c1a90f","typeString":"literal_string \"3.8.0\""},"value":"3.8.0"},"visibility":"public"},{"id":87302,"nodeType":"FunctionDefinition","src":"5985:513:135","nodes":[],"body":{"id":87301,"nodeType":"Block","src":"6075:423:135","nodes":[],"statements":[{"expression":{"id":87270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":87268,"name":"PROOF_MATURITY_DELAY_SECONDS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87151,"src":"6085:28:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":87269,"name":"_proofMaturityDelaySeconds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87263,"src":"6116:26:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6085:57:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":87271,"nodeType":"ExpressionStatement","src":"6085:57:135"},{"expression":{"id":87274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":87272,"name":"DISPUTE_GAME_FINALITY_DELAY_SECONDS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87154,"src":"6152:35:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":87273,"name":"_disputeGameFinalityDelaySeconds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87265,"src":"6190:32:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6152:70:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":87275,"nodeType":"ExpressionStatement","src":"6152:70:135"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"hexValue":"30","id":87280,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6306:1:135","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":87279,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6298:7:135","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":87278,"name":"address","nodeType":"ElementaryTypeName","src":"6298:7:135","typeDescriptions":{}}},"id":87281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6298:10:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":87277,"name":"DisputeGameFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":97682,"src":"6279:18:135","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DisputeGameFactory_$97682_$","typeString":"type(contract DisputeGameFactory)"}},"id":87282,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6279:30:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_DisputeGameFactory_$97682","typeString":"contract DisputeGameFactory"}},{"arguments":[{"arguments":[{"hexValue":"30","id":87286,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6359:1:135","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":87285,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6351:7:135","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":87284,"name":"address","nodeType":"ElementaryTypeName","src":"6351:7:135","typeDescriptions":{}}},"id":87287,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6351:10:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":87283,"name":"SystemConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":89607,"src":"6338:12:135","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SystemConfig_$89607_$","typeString":"type(contract SystemConfig)"}},"id":87288,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6338:24:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_SystemConfig_$89607","typeString":"contract SystemConfig"}},{"arguments":[{"arguments":[{"hexValue":"30","id":87292,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6420:1:135","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":87291,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6412:7:135","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":87290,"name":"address","nodeType":"ElementaryTypeName","src":"6412:7:135","typeDescriptions":{}}},"id":87293,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6412:10:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":87289,"name":"SuperchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":88793,"src":"6395:16:135","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SuperchainConfig_$88793_$","typeString":"type(contract SuperchainConfig)"}},"id":87294,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6395:28:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},{"arguments":[{"hexValue":"30","id":87297,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6478:1:135","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":87295,"name":"GameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103271,"src":"6464:8:135","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_GameType_$103271_$","typeString":"type(GameType)"}},"id":87296,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"wrap","nodeType":"MemberAccess","src":"6464:13:135","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_uint32_$returns$_t_userDefinedValueType$_GameType_$103271_$","typeString":"function (uint32) pure returns (GameType)"}},"id":87298,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6464:16:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_DisputeGameFactory_$97682","typeString":"contract DisputeGameFactory"},{"typeIdentifier":"t_contract$_SystemConfig_$89607","typeString":"contract SystemConfig"},{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"},{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}],"id":87276,"name":"initialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87361,"src":"6233:10:135","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_DisputeGameFactory_$97682_$_t_contract$_SystemConfig_$89607_$_t_contract$_SuperchainConfig_$88793_$_t_userDefinedValueType$_GameType_$103271_$returns$__$","typeString":"function (contract DisputeGameFactory,contract SystemConfig,contract SuperchainConfig,GameType)"}},"id":87299,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["_disputeGameFactory","_systemConfig","_superchainConfig","_initialRespectedGameType"],"nodeType":"FunctionCall","src":"6233:258:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87300,"nodeType":"ExpressionStatement","src":"6233:258:135"}]},"documentation":{"id":87261,"nodeType":"StructuredDocumentation","src":"5929:51:135","text":"@notice Constructs the OptimismPortal contract."},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":87266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87263,"mutability":"mutable","name":"_proofMaturityDelaySeconds","nameLocation":"6005:26:135","nodeType":"VariableDeclaration","scope":87302,"src":"5997:34:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":87262,"name":"uint256","nodeType":"ElementaryTypeName","src":"5997:7:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":87265,"mutability":"mutable","name":"_disputeGameFinalityDelaySeconds","nameLocation":"6041:32:135","nodeType":"VariableDeclaration","scope":87302,"src":"6033:40:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":87264,"name":"uint256","nodeType":"ElementaryTypeName","src":"6033:7:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5996:78:135"},"returnParameters":{"id":87267,"nodeType":"ParameterList","parameters":[],"src":"6075:0:135"},"scope":87971,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":87361,"nodeType":"FunctionDefinition","src":"6730:971:135","nodes":[],"body":{"id":87360,"nodeType":"Block","src":"6967:734:135","nodes":[],"statements":[{"expression":{"id":87322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":87320,"name":"disputeGameFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87191,"src":"6977:18:135","typeDescriptions":{"typeIdentifier":"t_contract$_DisputeGameFactory_$97682","typeString":"contract DisputeGameFactory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":87321,"name":"_disputeGameFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87306,"src":"6998:19:135","typeDescriptions":{"typeIdentifier":"t_contract$_DisputeGameFactory_$97682","typeString":"contract DisputeGameFactory"}},"src":"6977:40:135","typeDescriptions":{"typeIdentifier":"t_contract$_DisputeGameFactory_$97682","typeString":"contract DisputeGameFactory"}},"id":87323,"nodeType":"ExpressionStatement","src":"6977:40:135"},{"expression":{"id":87326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":87324,"name":"systemConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87187,"src":"7027:12:135","typeDescriptions":{"typeIdentifier":"t_contract$_SystemConfig_$89607","typeString":"contract SystemConfig"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":87325,"name":"_systemConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87309,"src":"7042:13:135","typeDescriptions":{"typeIdentifier":"t_contract$_SystemConfig_$89607","typeString":"contract SystemConfig"}},"src":"7027:28:135","typeDescriptions":{"typeIdentifier":"t_contract$_SystemConfig_$89607","typeString":"contract SystemConfig"}},"id":87327,"nodeType":"ExpressionStatement","src":"7027:28:135"},{"expression":{"id":87330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":87328,"name":"superchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87180,"src":"7065:16:135","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":87329,"name":"_superchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87312,"src":"7084:17:135","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"src":"7065:36:135","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"id":87331,"nodeType":"ExpressionStatement","src":"7065:36:135"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":87337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":87332,"name":"l2Sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87165,"src":"7249:8:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":87335,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7269:1:135","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":87334,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7261:7:135","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":87333,"name":"address","nodeType":"ElementaryTypeName","src":"7261:7:135","typeDescriptions":{}}},"id":87336,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7261:10:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7249:22:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":87356,"nodeType":"IfStatement","src":"7245:414:135","trueBody":{"id":87355,"nodeType":"Block","src":"7273:386:135","statements":[{"expression":{"id":87341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":87338,"name":"l2Sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87165,"src":"7287:8:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":87339,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103096,"src":"7298:9:135","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$103096_$","typeString":"type(library Constants)"}},"id":87340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DEFAULT_L2_SENDER","nodeType":"MemberAccess","referencedDeclaration":103058,"src":"7298:27:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7287:38:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":87342,"nodeType":"ExpressionStatement","src":"7287:38:135"},{"expression":{"id":87349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":87343,"name":"respectedGameTypeUpdatedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87212,"src":"7485:26:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":87346,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"7521:5:135","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":87347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"7521:15:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":87345,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7514:6:135","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":87344,"name":"uint64","nodeType":"ElementaryTypeName","src":"7514:6:135","typeDescriptions":{}}},"id":87348,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7514:23:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"7485:52:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":87350,"nodeType":"ExpressionStatement","src":"7485:52:135"},{"expression":{"id":87353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":87351,"name":"respectedGameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87209,"src":"7603:17:135","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":87352,"name":"_initialRespectedGameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87315,"src":"7623:25:135","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"src":"7603:45:135","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"id":87354,"nodeType":"ExpressionStatement","src":"7603:45:135"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":87357,"name":"__ResourceMetering_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":88580,"src":"7669:23:135","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":87358,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7669:25:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87359,"nodeType":"ExpressionStatement","src":"7669:25:135"}]},"documentation":{"id":87303,"nodeType":"StructuredDocumentation","src":"6504:221:135","text":"@notice Initializer.\n @param _disputeGameFactory Contract of the DisputeGameFactory.\n @param _systemConfig Contract of the SystemConfig.\n @param _superchainConfig Contract of the SuperchainConfig."},"functionSelector":"8e819e54","implemented":true,"kind":"function","modifiers":[{"id":87318,"kind":"modifierInvocation","modifierName":{"id":87317,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":49598,"src":"6951:11:135"},"nodeType":"ModifierInvocation","src":"6951:11:135"}],"name":"initialize","nameLocation":"6739:10:135","parameters":{"id":87316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87306,"mutability":"mutable","name":"_disputeGameFactory","nameLocation":"6778:19:135","nodeType":"VariableDeclaration","scope":87361,"src":"6759:38:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_DisputeGameFactory_$97682","typeString":"contract DisputeGameFactory"},"typeName":{"id":87305,"nodeType":"UserDefinedTypeName","pathNode":{"id":87304,"name":"DisputeGameFactory","nodeType":"IdentifierPath","referencedDeclaration":97682,"src":"6759:18:135"},"referencedDeclaration":97682,"src":"6759:18:135","typeDescriptions":{"typeIdentifier":"t_contract$_DisputeGameFactory_$97682","typeString":"contract DisputeGameFactory"}},"visibility":"internal"},{"constant":false,"id":87309,"mutability":"mutable","name":"_systemConfig","nameLocation":"6820:13:135","nodeType":"VariableDeclaration","scope":87361,"src":"6807:26:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_SystemConfig_$89607","typeString":"contract SystemConfig"},"typeName":{"id":87308,"nodeType":"UserDefinedTypeName","pathNode":{"id":87307,"name":"SystemConfig","nodeType":"IdentifierPath","referencedDeclaration":89607,"src":"6807:12:135"},"referencedDeclaration":89607,"src":"6807:12:135","typeDescriptions":{"typeIdentifier":"t_contract$_SystemConfig_$89607","typeString":"contract SystemConfig"}},"visibility":"internal"},{"constant":false,"id":87312,"mutability":"mutable","name":"_superchainConfig","nameLocation":"6860:17:135","nodeType":"VariableDeclaration","scope":87361,"src":"6843:34:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"},"typeName":{"id":87311,"nodeType":"UserDefinedTypeName","pathNode":{"id":87310,"name":"SuperchainConfig","nodeType":"IdentifierPath","referencedDeclaration":88793,"src":"6843:16:135"},"referencedDeclaration":88793,"src":"6843:16:135","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"visibility":"internal"},{"constant":false,"id":87315,"mutability":"mutable","name":"_initialRespectedGameType","nameLocation":"6896:25:135","nodeType":"VariableDeclaration","scope":87361,"src":"6887:34:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"},"typeName":{"id":87314,"nodeType":"UserDefinedTypeName","pathNode":{"id":87313,"name":"GameType","nodeType":"IdentifierPath","referencedDeclaration":103271,"src":"6887:8:135"},"referencedDeclaration":103271,"src":"6887:8:135","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"visibility":"internal"}],"src":"6749:178:135"},"returnParameters":{"id":87319,"nodeType":"ParameterList","parameters":[],"src":"6967:0:135"},"scope":87971,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":87372,"nodeType":"FunctionDefinition","src":"7954:101:135","nodes":[],"body":{"id":87371,"nodeType":"Block","src":"8004:51:135","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":87367,"name":"superchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87180,"src":"8021:16:135","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"id":87368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"guardian","nodeType":"MemberAccess","referencedDeclaration":88693,"src":"8021:25:135","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":87369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8021:27:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":87366,"id":87370,"nodeType":"Return","src":"8014:34:135"}]},"documentation":{"id":87362,"nodeType":"StructuredDocumentation","src":"7707:242:135","text":"@notice Getter function for the address of the guardian.\n Public getter is legacy and will be removed in the future. Use `SuperchainConfig.guardian()` instead.\n @return Address of the guardian.\n @custom:legacy"},"functionSelector":"452a9320","implemented":true,"kind":"function","modifiers":[],"name":"guardian","nameLocation":"7963:8:135","parameters":{"id":87363,"nodeType":"ParameterList","parameters":[],"src":"7971:2:135"},"returnParameters":{"id":87366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87365,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":87372,"src":"7995:7:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":87364,"name":"address","nodeType":"ElementaryTypeName","src":"7995:7:135","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7994:9:135"},"scope":87971,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":87383,"nodeType":"FunctionDefinition","src":"8115:94:135","nodes":[],"body":{"id":87382,"nodeType":"Block","src":"8160:49:135","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":87378,"name":"superchainConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87180,"src":"8177:16:135","typeDescriptions":{"typeIdentifier":"t_contract$_SuperchainConfig_$88793","typeString":"contract SuperchainConfig"}},"id":87379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"paused","nodeType":"MemberAccess","referencedDeclaration":88707,"src":"8177:23:135","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bool_$","typeString":"function () view external returns (bool)"}},"id":87380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8177:25:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":87377,"id":87381,"nodeType":"Return","src":"8170:32:135"}]},"documentation":{"id":87373,"nodeType":"StructuredDocumentation","src":"8061:49:135","text":"@notice Getter for the current paused status."},"functionSelector":"5c975abb","implemented":true,"kind":"function","modifiers":[],"name":"paused","nameLocation":"8124:6:135","parameters":{"id":87374,"nodeType":"ParameterList","parameters":[],"src":"8130:2:135"},"returnParameters":{"id":87377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87376,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":87383,"src":"8154:4:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":87375,"name":"bool","nodeType":"ElementaryTypeName","src":"8154:4:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8153:6:135"},"scope":87971,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":87392,"nodeType":"FunctionDefinition","src":"8268:119:135","nodes":[],"body":{"id":87391,"nodeType":"Block","src":"8335:52:135","nodes":[],"statements":[{"expression":{"id":87389,"name":"PROOF_MATURITY_DELAY_SECONDS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87151,"src":"8352:28:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":87388,"id":87390,"nodeType":"Return","src":"8345:35:135"}]},"documentation":{"id":87384,"nodeType":"StructuredDocumentation","src":"8215:48:135","text":"@notice Getter for the proof maturity delay."},"functionSelector":"bf653a5c","implemented":true,"kind":"function","modifiers":[],"name":"proofMaturityDelaySeconds","nameLocation":"8277:25:135","parameters":{"id":87385,"nodeType":"ParameterList","parameters":[],"src":"8302:2:135"},"returnParameters":{"id":87388,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87387,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":87392,"src":"8326:7:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":87386,"name":"uint256","nodeType":"ElementaryTypeName","src":"8326:7:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8325:9:135"},"scope":87971,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":87401,"nodeType":"FunctionDefinition","src":"8453:132:135","nodes":[],"body":{"id":87400,"nodeType":"Block","src":"8526:59:135","nodes":[],"statements":[{"expression":{"id":87398,"name":"DISPUTE_GAME_FINALITY_DELAY_SECONDS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87154,"src":"8543:35:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":87397,"id":87399,"nodeType":"Return","src":"8536:42:135"}]},"documentation":{"id":87393,"nodeType":"StructuredDocumentation","src":"8393:55:135","text":"@notice Getter for the dispute game finality delay."},"functionSelector":"952b2797","implemented":true,"kind":"function","modifiers":[],"name":"disputeGameFinalityDelaySeconds","nameLocation":"8462:31:135","parameters":{"id":87394,"nodeType":"ParameterList","parameters":[],"src":"8493:2:135"},"returnParameters":{"id":87397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87396,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":87401,"src":"8517:7:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":87395,"name":"uint256","nodeType":"ElementaryTypeName","src":"8517:7:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8516:9:135"},"scope":87971,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":87416,"nodeType":"FunctionDefinition","src":"9078:120:135","nodes":[],"body":{"id":87415,"nodeType":"Block","src":"9151:47:135","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":87413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":87411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":87409,"name":"_byteCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87404,"src":"9168:10:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3136","id":87410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9181:2:135","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"9168:15:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"3231303030","id":87412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9186:5:135","typeDescriptions":{"typeIdentifier":"t_rational_21000_by_1","typeString":"int_const 21000"},"value":"21000"},"src":"9168:23:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":87408,"id":87414,"nodeType":"Return","src":"9161:30:135"}]},"documentation":{"id":87402,"nodeType":"StructuredDocumentation","src":"8591:482:135","text":"@notice Computes the minimum gas limit for a deposit.\n The minimum gas limit linearly increases based on the size of the calldata.\n This is to prevent users from creating L2 resource usage without paying for it.\n This function can be used when interacting with the portal to ensure forwards\n compatibility.\n @param _byteCount Number of bytes in the calldata.\n @return The minimum gas limit for a deposit."},"functionSelector":"a35d99df","implemented":true,"kind":"function","modifiers":[],"name":"minimumGasLimit","nameLocation":"9087:15:135","parameters":{"id":87405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87404,"mutability":"mutable","name":"_byteCount","nameLocation":"9110:10:135","nodeType":"VariableDeclaration","scope":87416,"src":"9103:17:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":87403,"name":"uint64","nodeType":"ElementaryTypeName","src":"9103:6:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"9102:19:135"},"returnParameters":{"id":87408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87407,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":87416,"src":"9143:6:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":87406,"name":"uint64","nodeType":"ElementaryTypeName","src":"9143:6:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"9142:8:135"},"scope":87971,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":87434,"nodeType":"FunctionDefinition","src":"9577:130:135","nodes":[],"body":{"id":87433,"nodeType":"Block","src":"9604:103:135","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":87421,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9633:3:135","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":87422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"9633:10:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":87423,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9645:3:135","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":87424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"9645:9:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":87425,"name":"RECEIVE_DEFAULT_GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87162,"src":"9656:25:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"hexValue":"66616c7365","id":87426,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9683:5:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"arguments":[{"hexValue":"","id":87429,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9696:2:135","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":87428,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9690:5:135","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":87427,"name":"bytes","nodeType":"ElementaryTypeName","src":"9690:5:135","typeDescriptions":{}}},"id":87430,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9690:9:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":87420,"name":"depositTransaction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87785,"src":"9614:18:135","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint64_$_t_bool_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,uint256,uint64,bool,bytes memory)"}},"id":87431,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9614:86:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87432,"nodeType":"ExpressionStatement","src":"9614:86:135"}]},"documentation":{"id":87417,"nodeType":"StructuredDocumentation","src":"9204:368:135","text":"@notice Accepts value so that users can send ETH directly to this contract and have the\n funds be deposited to their address on L2. This is intended as a convenience\n function for EOAs. Contracts should call the depositTransaction() function directly\n otherwise any deposited funds will be lost due to address aliasing."},"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":87418,"nodeType":"ParameterList","parameters":[],"src":"9584:2:135"},"returnParameters":{"id":87419,"nodeType":"ParameterList","parameters":[],"src":"9604:0:135"},"scope":87971,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":87439,"nodeType":"FunctionDefinition","src":"9921:77:135","nodes":[],"body":{"id":87438,"nodeType":"Block","src":"9959:39:135","nodes":[],"statements":[]},"documentation":{"id":87435,"nodeType":"StructuredDocumentation","src":"9713:203:135","text":"@notice Accepts ETH value without triggering a deposit to L2.\n This function mainly exists for the sake of the migration between the legacy\n Optimism system and Bedrock."},"functionSelector":"8b4c40b0","implemented":true,"kind":"function","modifiers":[],"name":"donateETH","nameLocation":"9930:9:135","parameters":{"id":87436,"nodeType":"ParameterList","parameters":[],"src":"9939:2:135"},"returnParameters":{"id":87437,"nodeType":"ParameterList","parameters":[],"src":"9959:0:135"},"scope":87971,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":87452,"nodeType":"FunctionDefinition","src":"10247:152:135","nodes":[],"body":{"id":87451,"nodeType":"Block","src":"10346:53:135","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":87447,"name":"systemConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87187,"src":"10363:12:135","typeDescriptions":{"typeIdentifier":"t_contract$_SystemConfig_$89607","typeString":"contract SystemConfig"}},"id":87448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"resourceConfig","nodeType":"MemberAccess","referencedDeclaration":89527,"src":"10363:27:135","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_struct$_ResourceConfig_$88258_memory_ptr_$","typeString":"function () view external returns (struct ResourceMetering.ResourceConfig memory)"}},"id":87449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10363:29:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ResourceConfig_$88258_memory_ptr","typeString":"struct ResourceMetering.ResourceConfig memory"}},"functionReturnParameters":87446,"id":87450,"nodeType":"Return","src":"10356:36:135"}]},"baseFunctions":[88555],"documentation":{"id":87440,"nodeType":"StructuredDocumentation","src":"10004:238:135","text":"@notice Getter for the resource config.\n Used internally by the ResourceMetering contract.\n The SystemConfig is the source of truth for the resource config.\n @return ResourceMetering ResourceConfig"},"implemented":true,"kind":"function","modifiers":[],"name":"_resourceConfig","nameLocation":"10256:15:135","overrides":{"id":87442,"nodeType":"OverrideSpecifier","overrides":[],"src":"10288:8:135"},"parameters":{"id":87441,"nodeType":"ParameterList","parameters":[],"src":"10271:2:135"},"returnParameters":{"id":87446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87445,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":87452,"src":"10306:38:135","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ResourceConfig_$88258_memory_ptr","typeString":"struct ResourceMetering.ResourceConfig"},"typeName":{"id":87444,"nodeType":"UserDefinedTypeName","pathNode":{"id":87443,"name":"ResourceMetering.ResourceConfig","nodeType":"IdentifierPath","referencedDeclaration":88258,"src":"10306:31:135"},"referencedDeclaration":88258,"src":"10306:31:135","typeDescriptions":{"typeIdentifier":"t_struct$_ResourceConfig_$88258_storage_ptr","typeString":"struct ResourceMetering.ResourceConfig"}},"visibility":"internal"}],"src":"10305:40:135"},"scope":87971,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":87599,"nodeType":"FunctionDefinition","src":"10816:3564:135","nodes":[],"body":{"id":87598,"nodeType":"Block","src":"11084:3296:135","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":87476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":87470,"name":"_tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87456,"src":"11329:3:135","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}},"id":87471,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"target","nodeType":"MemberAccess","referencedDeclaration":104341,"src":"11329:10:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":87474,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11351:4:135","typeDescriptions":{"typeIdentifier":"t_contract$_OptimismPortal2_$87971","typeString":"contract OptimismPortal2"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_OptimismPortal2_$87971","typeString":"contract OptimismPortal2"}],"id":87473,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11343:7:135","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":87472,"name":"address","nodeType":"ElementaryTypeName","src":"11343:7:135","typeDescriptions":{}}},"id":87475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11343:13:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11329:27:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e64206d6573736167657320746f2074686520706f7274616c20636f6e7472616374","id":87477,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11358:65:135","typeDescriptions":{"typeIdentifier":"t_stringliteral_57e41062e2e7b97ddf730827f5249d28f602a3846dfe107ce36292fb1c029eb8","typeString":"literal_string \"OptimismPortal: you cannot send messages to the portal contract\""},"value":"OptimismPortal: you cannot send messages to the portal contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_57e41062e2e7b97ddf730827f5249d28f602a3846dfe107ce36292fb1c029eb8","typeString":"literal_string \"OptimismPortal: you cannot send messages to the portal contract\""}],"id":87469,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11321:7:135","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":87478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11321:103:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87479,"nodeType":"ExpressionStatement","src":"11321:103:135"},{"assignments":[87482,null,87485],"declarations":[{"constant":false,"id":87482,"mutability":"mutable","name":"gameType","nameLocation":"11525:8:135","nodeType":"VariableDeclaration","scope":87598,"src":"11516:17:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"},"typeName":{"id":87481,"nodeType":"UserDefinedTypeName","pathNode":{"id":87480,"name":"GameType","nodeType":"IdentifierPath","referencedDeclaration":103271,"src":"11516:8:135"},"referencedDeclaration":103271,"src":"11516:8:135","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"visibility":"internal"},null,{"constant":false,"id":87485,"mutability":"mutable","name":"gameProxy","nameLocation":"11549:9:135","nodeType":"VariableDeclaration","scope":87598,"src":"11536:22:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"},"typeName":{"id":87484,"nodeType":"UserDefinedTypeName","pathNode":{"id":87483,"name":"IDisputeGame","nodeType":"IdentifierPath","referencedDeclaration":100327,"src":"11536:12:135"},"referencedDeclaration":100327,"src":"11536:12:135","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"visibility":"internal"}],"id":87490,"initialValue":{"arguments":[{"id":87488,"name":"_disputeGameIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87458,"src":"11593:17:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":87486,"name":"disputeGameFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87191,"src":"11562:18:135","typeDescriptions":{"typeIdentifier":"t_contract$_DisputeGameFactory_$97682","typeString":"contract DisputeGameFactory"}},"id":87487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"gameAtIndex","nodeType":"MemberAccess","referencedDeclaration":97346,"src":"11562:30:135","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_userDefinedValueType$_GameType_$103271_$_t_userDefinedValueType$_Timestamp_$103261_$_t_contract$_IDisputeGame_$100327_$","typeString":"function (uint256) view external returns (GameType,Timestamp,contract IDisputeGame)"}},"id":87489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11562:49:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_userDefinedValueType$_GameType_$103271_$_t_userDefinedValueType$_Timestamp_$103261_$_t_contract$_IDisputeGame_$100327_$","typeString":"tuple(GameType,Timestamp,contract IDisputeGame)"}},"nodeType":"VariableDeclarationStatement","src":"11515:96:135"},{"assignments":[87493],"declarations":[{"constant":false,"id":87493,"mutability":"mutable","name":"outputRoot","nameLocation":"11627:10:135","nodeType":"VariableDeclaration","scope":87598,"src":"11621:16:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"},"typeName":{"id":87492,"nodeType":"UserDefinedTypeName","pathNode":{"id":87491,"name":"Claim","nodeType":"IdentifierPath","referencedDeclaration":103255,"src":"11621:5:135"},"referencedDeclaration":103255,"src":"11621:5:135","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"visibility":"internal"}],"id":87497,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":87494,"name":"gameProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87485,"src":"11640:9:135","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"id":87495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rootClaim","nodeType":"MemberAccess","referencedDeclaration":100294,"src":"11640:19:135","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_userDefinedValueType$_Claim_$103255_$","typeString":"function () pure external returns (Claim)"}},"id":87496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11640:21:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"nodeType":"VariableDeclarationStatement","src":"11621:40:135"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":87505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":87499,"name":"gameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87482,"src":"11758:8:135","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"id":87500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101150,"src":"11758:12:135","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_GameType_$103271_$returns$_t_uint32_$bound_to$_t_userDefinedValueType$_GameType_$103271_$","typeString":"function (GameType) pure returns (uint32)"}},"id":87501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11758:14:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":87502,"name":"respectedGameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87209,"src":"11776:17:135","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"id":87503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101150,"src":"11776:21:135","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_GameType_$103271_$returns$_t_uint32_$bound_to$_t_userDefinedValueType$_GameType_$103271_$","typeString":"function (GameType) pure returns (uint32)"}},"id":87504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11776:23:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"11758:41:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797065","id":87506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11801:35:135","typeDescriptions":{"typeIdentifier":"t_stringliteral_ea6e52a7a06be8d460d58a9fb591f5b7ad20643cdd834b0004aaeaa0647b1d4b","typeString":"literal_string \"OptimismPortal: invalid game type\""},"value":"OptimismPortal: invalid game type"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ea6e52a7a06be8d460d58a9fb591f5b7ad20643cdd834b0004aaeaa0647b1d4b","typeString":"literal_string \"OptimismPortal: invalid game type\""}],"id":87498,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11750:7:135","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":87507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11750:87:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87508,"nodeType":"ExpressionStatement","src":"11750:87:135"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":87517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":87510,"name":"outputRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87493,"src":"11957:10:135","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Claim_$103255","typeString":"Claim"}},"id":87511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101085,"src":"11957:14:135","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Claim_$103255_$returns$_t_bytes32_$bound_to$_t_userDefinedValueType$_Claim_$103255_$","typeString":"function (Claim) pure returns (bytes32)"}},"id":87512,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11957:16:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":87515,"name":"_outputRootProof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87461,"src":"12005:16:135","typeDescriptions":{"typeIdentifier":"t_struct$_OutputRootProof_$104316_calldata_ptr","typeString":"struct Types.OutputRootProof calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_OutputRootProof_$104316_calldata_ptr","typeString":"struct Types.OutputRootProof calldata"}],"expression":{"id":87513,"name":"Hashing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103936,"src":"11977:7:135","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Hashing_$103936_$","typeString":"type(library Hashing)"}},"id":87514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"hashOutputRootProof","nodeType":"MemberAccess","referencedDeclaration":103935,"src":"11977:27:135","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_OutputRootProof_$104316_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct Types.OutputRootProof memory) pure returns (bytes32)"}},"id":87516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11977:45:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11957:65:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a20696e76616c6964206f757470757420726f6f742070726f6f66","id":87518,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12036:43:135","typeDescriptions":{"typeIdentifier":"t_stringliteral_490ec653897228799e7e4c4af8b1fd3b4a0688df98d026b46afa352ce9876996","typeString":"literal_string \"OptimismPortal: invalid output root proof\""},"value":"OptimismPortal: invalid output root proof"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_490ec653897228799e7e4c4af8b1fd3b4a0688df98d026b46afa352ce9876996","typeString":"literal_string \"OptimismPortal: invalid output root proof\""}],"id":87509,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11936:7:135","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":87519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11936:153:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87520,"nodeType":"ExpressionStatement","src":"11936:153:135"},{"assignments":[87522],"declarations":[{"constant":false,"id":87522,"mutability":"mutable","name":"withdrawalHash","nameLocation":"12208:14:135","nodeType":"VariableDeclaration","scope":87598,"src":"12200:22:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":87521,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12200:7:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":87527,"initialValue":{"arguments":[{"id":87525,"name":"_tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87456,"src":"12248:3:135","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}],"expression":{"id":87523,"name":"Hashing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103936,"src":"12225:7:135","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Hashing_$103936_$","typeString":"type(library Hashing)"}},"id":87524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"hashWithdrawal","nodeType":"MemberAccess","referencedDeclaration":103911,"src":"12225:22:135","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_WithdrawalTransaction_$104348_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct Types.WithdrawalTransaction memory) pure returns (bytes32)"}},"id":87526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12225:27:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"12200:52:135"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"},"id":87534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":87529,"name":"gameProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87485,"src":"12424:9:135","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"id":87530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"status","nodeType":"MemberAccess","referencedDeclaration":100274,"src":"12424:16:135","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_enum$_GameStatus_$103277_$","typeString":"function () view external returns (enum GameStatus)"}},"id":87531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12424:18:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":87532,"name":"GameStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103277,"src":"12446:10:135","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_GameStatus_$103277_$","typeString":"type(enum GameStatus)"}},"id":87533,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"CHALLENGER_WINS","nodeType":"MemberAccess","referencedDeclaration":103275,"src":"12446:26:135","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"src":"12424:48:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a2063616e6e6f742070726f766520616761696e737420696e76616c696420646973707574652067616d6573","id":87535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12486:60:135","typeDescriptions":{"typeIdentifier":"t_stringliteral_69fd02e8f1261d2d4a8ae7fdb140ea99e9eb488a3b5b9ae3c51756d573f7f1f7","typeString":"literal_string \"OptimismPortal: cannot prove against invalid dispute games\""},"value":"OptimismPortal: cannot prove against invalid dispute games"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_69fd02e8f1261d2d4a8ae7fdb140ea99e9eb488a3b5b9ae3c51756d573f7f1f7","typeString":"literal_string \"OptimismPortal: cannot prove against invalid dispute games\""}],"id":87528,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12403:7:135","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":87536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12403:153:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87537,"nodeType":"ExpressionStatement","src":"12403:153:135"},{"assignments":[87539],"declarations":[{"constant":false,"id":87539,"mutability":"mutable","name":"storageKey","nameLocation":"12800:10:135","nodeType":"VariableDeclaration","scope":87598,"src":"12792:18:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":87538,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12792:7:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":87550,"initialValue":{"arguments":[{"arguments":[{"id":87543,"name":"withdrawalHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87522,"src":"12864:14:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"hexValue":"30","id":87546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12904:1:135","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":87545,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12896:7:135","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":87544,"name":"uint256","nodeType":"ElementaryTypeName","src":"12896:7:135","typeDescriptions":{}}},"id":87547,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12896:10:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":87541,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"12836:3:135","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":87542,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"12836:10:135","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":87548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12836:147:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":87540,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"12813:9:135","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":87549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12813:180:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"12792:201:135"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":87556,"name":"storageKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87539,"src":"13419:10:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":87554,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"13408:3:135","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":87555,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"13408:10:135","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":87557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13408:22:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"01","id":87558,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"13456:7:135","typeDescriptions":{"typeIdentifier":"t_stringliteral_5fe7f977e71dba2ea1a68e21057beebb9be2ac30c6410aa38d4f3fbe41dcffd2","typeString":"literal_string hex\"01\""},"value":"\u0001"},{"id":87559,"name":"_withdrawalProof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87464,"src":"13489:16:135","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},{"expression":{"id":87560,"name":"_outputRootProof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87461,"src":"13530:16:135","typeDescriptions":{"typeIdentifier":"t_struct$_OutputRootProof_$104316_calldata_ptr","typeString":"struct Types.OutputRootProof calldata"}},"id":87561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"messagePasserStorageRoot","nodeType":"MemberAccess","referencedDeclaration":104313,"src":"13530:41:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_5fe7f977e71dba2ea1a68e21057beebb9be2ac30c6410aa38d4f3fbe41dcffd2","typeString":"literal_string hex\"01\""},{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":87552,"name":"SecureMerkleTrie","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":106033,"src":"13346:16:135","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SecureMerkleTrie_$106033_$","typeString":"type(library SecureMerkleTrie)"}},"id":87553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"verifyInclusionProof","nodeType":"MemberAccess","referencedDeclaration":105985,"src":"13346:37:135","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes memory,bytes memory,bytes memory[] memory,bytes32) pure returns (bool)"}},"id":87562,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":["_key","_value","_proof","_root"],"nodeType":"FunctionCall","src":"13346:240:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a20696e76616c6964207769746864726177616c20696e636c7573696f6e2070726f6f66","id":87563,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13600:52:135","typeDescriptions":{"typeIdentifier":"t_stringliteral_11b666636981dad70da1c1a9e87589eb7d9c042eacd4d25e887aac557f6cd6b9","typeString":"literal_string \"OptimismPortal: invalid withdrawal inclusion proof\""},"value":"OptimismPortal: invalid withdrawal inclusion proof"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_11b666636981dad70da1c1a9e87589eb7d9c042eacd4d25e887aac557f6cd6b9","typeString":"literal_string \"OptimismPortal: invalid withdrawal inclusion proof\""}],"id":87551,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"13325:7:135","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":87564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13325:337:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87565,"nodeType":"ExpressionStatement","src":"13325:337:135"},{"expression":{"id":87580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":87566,"name":"provenWithdrawals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87199,"src":"13960:17:135","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_struct$_ProvenWithdrawal_$87148_storage_$_$","typeString":"mapping(bytes32 => mapping(address => struct OptimismPortal2.ProvenWithdrawal storage ref))"}},"id":87570,"indexExpression":{"id":87567,"name":"withdrawalHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87522,"src":"13978:14:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13960:33:135","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ProvenWithdrawal_$87148_storage_$","typeString":"mapping(address => struct OptimismPortal2.ProvenWithdrawal storage ref)"}},"id":87571,"indexExpression":{"expression":{"id":87568,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13994:3:135","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":87569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"13994:10:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13960:45:135","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$87148_storage","typeString":"struct OptimismPortal2.ProvenWithdrawal storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":87573,"name":"gameProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87485,"src":"14057:9:135","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},{"arguments":[{"expression":{"id":87576,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"14086:5:135","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":87577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"14086:15:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":87575,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14079:6:135","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":87574,"name":"uint64","nodeType":"ElementaryTypeName","src":"14079:6:135","typeDescriptions":{}}},"id":87578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14079:23:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":87572,"name":"ProvenWithdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87148,"src":"14020:16:135","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ProvenWithdrawal_$87148_storage_ptr_$","typeString":"type(struct OptimismPortal2.ProvenWithdrawal storage pointer)"}},"id":87579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["disputeGameProxy","timestamp"],"nodeType":"FunctionCall","src":"14020:85:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$87148_memory_ptr","typeString":"struct OptimismPortal2.ProvenWithdrawal memory"}},"src":"13960:145:135","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$87148_storage","typeString":"struct OptimismPortal2.ProvenWithdrawal storage ref"}},"id":87581,"nodeType":"ExpressionStatement","src":"13960:145:135"},{"eventCall":{"arguments":[{"id":87583,"name":"withdrawalHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87522,"src":"14182:14:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":87584,"name":"_tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87456,"src":"14198:3:135","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}},"id":87585,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":104339,"src":"14198:10:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":87586,"name":"_tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87456,"src":"14210:3:135","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}},"id":87587,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"target","nodeType":"MemberAccess","referencedDeclaration":104341,"src":"14210:10:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":87582,"name":"WithdrawalProven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87238,"src":"14165:16:135","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$","typeString":"function (bytes32,address,address)"}},"id":87588,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14165:56:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87589,"nodeType":"EmitStatement","src":"14160:61:135"},{"expression":{"arguments":[{"expression":{"id":87594,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14362:3:135","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":87595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"14362:10:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":87590,"name":"proofSubmitters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87218,"src":"14325:15:135","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_address_$dyn_storage_$","typeString":"mapping(bytes32 => address[] storage ref)"}},"id":87592,"indexExpression":{"id":87591,"name":"withdrawalHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87522,"src":"14341:14:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14325:31:135","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":87593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"push","nodeType":"MemberAccess","src":"14325:36:135","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer,address)"}},"id":87596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14325:48:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87597,"nodeType":"ExpressionStatement","src":"14325:48:135"}]},"documentation":{"id":87453,"nodeType":"StructuredDocumentation","src":"10405:406:135","text":"@notice Proves a withdrawal transaction.\n @param _tx Withdrawal transaction to finalize.\n @param _disputeGameIndex Index of the dispute game to prove the withdrawal against.\n @param _outputRootProof Inclusion proof of the L2ToL1MessagePasser contract's storage root.\n @param _withdrawalProof Inclusion proof of the withdrawal in L2ToL1MessagePasser contract."},"functionSelector":"4870496f","implemented":true,"kind":"function","modifiers":[{"id":87467,"kind":"modifierInvocation","modifierName":{"id":87466,"name":"whenNotPaused","nodeType":"IdentifierPath","referencedDeclaration":87256,"src":"11066:13:135"},"nodeType":"ModifierInvocation","src":"11066:13:135"}],"name":"proveWithdrawalTransaction","nameLocation":"10825:26:135","parameters":{"id":87465,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87456,"mutability":"mutable","name":"_tx","nameLocation":"10896:3:135","nodeType":"VariableDeclaration","scope":87599,"src":"10861:38:135","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction"},"typeName":{"id":87455,"nodeType":"UserDefinedTypeName","pathNode":{"id":87454,"name":"Types.WithdrawalTransaction","nodeType":"IdentifierPath","referencedDeclaration":104348,"src":"10861:27:135"},"referencedDeclaration":104348,"src":"10861:27:135","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_storage_ptr","typeString":"struct Types.WithdrawalTransaction"}},"visibility":"internal"},{"constant":false,"id":87458,"mutability":"mutable","name":"_disputeGameIndex","nameLocation":"10917:17:135","nodeType":"VariableDeclaration","scope":87599,"src":"10909:25:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":87457,"name":"uint256","nodeType":"ElementaryTypeName","src":"10909:7:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":87461,"mutability":"mutable","name":"_outputRootProof","nameLocation":"10975:16:135","nodeType":"VariableDeclaration","scope":87599,"src":"10944:47:135","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_OutputRootProof_$104316_calldata_ptr","typeString":"struct Types.OutputRootProof"},"typeName":{"id":87460,"nodeType":"UserDefinedTypeName","pathNode":{"id":87459,"name":"Types.OutputRootProof","nodeType":"IdentifierPath","referencedDeclaration":104316,"src":"10944:21:135"},"referencedDeclaration":104316,"src":"10944:21:135","typeDescriptions":{"typeIdentifier":"t_struct$_OutputRootProof_$104316_storage_ptr","typeString":"struct Types.OutputRootProof"}},"visibility":"internal"},{"constant":false,"id":87464,"mutability":"mutable","name":"_withdrawalProof","nameLocation":"11018:16:135","nodeType":"VariableDeclaration","scope":87599,"src":"11001:33:135","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":87462,"name":"bytes","nodeType":"ElementaryTypeName","src":"11001:5:135","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":87463,"nodeType":"ArrayTypeName","src":"11001:7:135","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"10851:189:135"},"returnParameters":{"id":87468,"nodeType":"ParameterList","parameters":[],"src":"11084:0:135"},"scope":87971,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":87615,"nodeType":"FunctionDefinition","src":"14493:178:135","nodes":[],"body":{"id":87614,"nodeType":"Block","src":"14595:76:135","nodes":[],"statements":[{"expression":{"arguments":[{"id":87609,"name":"_tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87603,"src":"14648:3:135","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}},{"expression":{"id":87610,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14653:3:135","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":87611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"14653:10:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":87608,"name":"finalizeWithdrawalTransactionExternalProof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87695,"src":"14605:42:135","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_WithdrawalTransaction_$104348_memory_ptr_$_t_address_$returns$__$","typeString":"function (struct Types.WithdrawalTransaction memory,address)"}},"id":87612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14605:59:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87613,"nodeType":"ExpressionStatement","src":"14605:59:135"}]},"documentation":{"id":87600,"nodeType":"StructuredDocumentation","src":"14386:102:135","text":"@notice Finalizes a withdrawal transaction.\n @param _tx Withdrawal transaction to finalize."},"functionSelector":"8c3152e9","implemented":true,"kind":"function","modifiers":[{"id":87606,"kind":"modifierInvocation","modifierName":{"id":87605,"name":"whenNotPaused","nodeType":"IdentifierPath","referencedDeclaration":87256,"src":"14581:13:135"},"nodeType":"ModifierInvocation","src":"14581:13:135"}],"name":"finalizeWithdrawalTransaction","nameLocation":"14502:29:135","parameters":{"id":87604,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87603,"mutability":"mutable","name":"_tx","nameLocation":"14567:3:135","nodeType":"VariableDeclaration","scope":87615,"src":"14532:38:135","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction"},"typeName":{"id":87602,"nodeType":"UserDefinedTypeName","pathNode":{"id":87601,"name":"Types.WithdrawalTransaction","nodeType":"IdentifierPath","referencedDeclaration":104348,"src":"14532:27:135"},"referencedDeclaration":104348,"src":"14532:27:135","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_storage_ptr","typeString":"struct Types.WithdrawalTransaction"}},"visibility":"internal"}],"src":"14531:40:135"},"returnParameters":{"id":87607,"nodeType":"ParameterList","parameters":[],"src":"14595:0:135"},"scope":87971,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":87695,"nodeType":"FunctionDefinition","src":"14882:2403:135","nodes":[],"body":{"id":87694,"nodeType":"Block","src":"15062:2223:135","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":87630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":87627,"name":"l2Sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87165,"src":"15328:8:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":87628,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103096,"src":"15340:9:135","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$103096_$","typeString":"type(library Constants)"}},"id":87629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DEFAULT_L2_SENDER","nodeType":"MemberAccess","referencedDeclaration":103058,"src":"15340:27:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"15328:39:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a2063616e206f6e6c792074726967676572206f6e65207769746864726177616c20706572207472616e73616374696f6e","id":87631,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15369:65:135","typeDescriptions":{"typeIdentifier":"t_stringliteral_452e6500a4013b85635a7a9b231d68a5197c7f7579d0b96d0b2f2e5fe6b5995b","typeString":"literal_string \"OptimismPortal: can only trigger one withdrawal per transaction\""},"value":"OptimismPortal: can only trigger one withdrawal per transaction"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_452e6500a4013b85635a7a9b231d68a5197c7f7579d0b96d0b2f2e5fe6b5995b","typeString":"literal_string \"OptimismPortal: can only trigger one withdrawal per transaction\""}],"id":87626,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"15307:7:135","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":87632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15307:137:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87633,"nodeType":"ExpressionStatement","src":"15307:137:135"},{"assignments":[87635],"declarations":[{"constant":false,"id":87635,"mutability":"mutable","name":"withdrawalHash","nameLocation":"15503:14:135","nodeType":"VariableDeclaration","scope":87694,"src":"15495:22:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":87634,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15495:7:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":87640,"initialValue":{"arguments":[{"id":87638,"name":"_tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87619,"src":"15543:3:135","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}],"expression":{"id":87636,"name":"Hashing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103936,"src":"15520:7:135","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Hashing_$103936_$","typeString":"type(library Hashing)"}},"id":87637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"hashWithdrawal","nodeType":"MemberAccess","referencedDeclaration":103911,"src":"15520:22:135","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_WithdrawalTransaction_$104348_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct Types.WithdrawalTransaction memory) pure returns (bytes32)"}},"id":87639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15520:27:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"15495:52:135"},{"expression":{"arguments":[{"id":87642,"name":"withdrawalHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87635,"src":"15629:14:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":87643,"name":"_proofSubmitter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87621,"src":"15645:15:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":87641,"name":"checkWithdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87956,"src":"15613:15:135","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) view"}},"id":87644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15613:48:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87645,"nodeType":"ExpressionStatement","src":"15613:48:135"},{"expression":{"id":87650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":87646,"name":"finalizedWithdrawals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87170,"src":"15741:20:135","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":87648,"indexExpression":{"id":87647,"name":"withdrawalHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87635,"src":"15762:14:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15741:36:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":87649,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15780:4:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"15741:43:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":87651,"nodeType":"ExpressionStatement","src":"15741:43:135"},{"expression":{"id":87655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":87652,"name":"l2Sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87165,"src":"15878:8:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":87653,"name":"_tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87619,"src":"15889:3:135","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}},"id":87654,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":104339,"src":"15889:10:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"15878:21:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":87656,"nodeType":"ExpressionStatement","src":"15878:21:135"},{"assignments":[87658],"declarations":[{"constant":false,"id":87658,"mutability":"mutable","name":"success","nameLocation":"16524:7:135","nodeType":"VariableDeclaration","scope":87694,"src":"16519:12:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":87657,"name":"bool","nodeType":"ElementaryTypeName","src":"16519:4:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":87670,"initialValue":{"arguments":[{"expression":{"id":87661,"name":"_tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87619,"src":"16558:3:135","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}},"id":87662,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"target","nodeType":"MemberAccess","referencedDeclaration":104341,"src":"16558:10:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":87663,"name":"_tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87619,"src":"16570:3:135","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}},"id":87664,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"gasLimit","nodeType":"MemberAccess","referencedDeclaration":104345,"src":"16570:12:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":87665,"name":"_tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87619,"src":"16584:3:135","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}},"id":87666,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","referencedDeclaration":104343,"src":"16584:9:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":87667,"name":"_tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87619,"src":"16595:3:135","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction memory"}},"id":87668,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":104347,"src":"16595:8:135","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":87659,"name":"SafeCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":104213,"src":"16534:8:135","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCall_$104213_$","typeString":"type(library SafeCall)"}},"id":87660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"callWithMinGas","nodeType":"MemberAccess","referencedDeclaration":104212,"src":"16534:23:135","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,uint256,uint256,bytes memory) returns (bool)"}},"id":87669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16534:70:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"16519:85:135"},{"expression":{"id":87674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":87671,"name":"l2Sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87165,"src":"16672:8:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":87672,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103096,"src":"16683:9:135","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$103096_$","typeString":"type(library Constants)"}},"id":87673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DEFAULT_L2_SENDER","nodeType":"MemberAccess","referencedDeclaration":103058,"src":"16683:27:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16672:38:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":87675,"nodeType":"ExpressionStatement","src":"16672:38:135"},{"eventCall":{"arguments":[{"id":87677,"name":"withdrawalHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87635,"src":"16889:14:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":87678,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87658,"src":"16905:7:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":87676,"name":"WithdrawalFinalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87245,"src":"16869:19:135","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bool_$returns$__$","typeString":"function (bytes32,bool)"}},"id":87679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16869:44:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87680,"nodeType":"EmitStatement","src":"16864:49:135"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":87688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":87682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"17177:8:135","subExpression":{"id":87681,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87658,"src":"17178:7:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":87687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":87683,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"17189:2:135","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":87684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"origin","nodeType":"MemberAccess","src":"17189:9:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":87685,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103096,"src":"17202:9:135","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$103096_$","typeString":"type(library Constants)"}},"id":87686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ESTIMATION_ADDRESS","nodeType":"MemberAccess","referencedDeclaration":103054,"src":"17202:28:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17189:41:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17177:53:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":87693,"nodeType":"IfStatement","src":"17173:106:135","trueBody":{"id":87692,"nodeType":"Block","src":"17232:47:135","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":87689,"name":"GasEstimation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103993,"src":"17253:13:135","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":87690,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17253:15:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87691,"nodeType":"RevertStatement","src":"17246:22:135"}]}}]},"documentation":{"id":87616,"nodeType":"StructuredDocumentation","src":"14677:200:135","text":"@notice Finalizes a withdrawal transaction, using an external proof submitter.\n @param _tx Withdrawal transaction to finalize.\n @param _proofSubmitter Address of the proof submitter."},"functionSelector":"43ca1c50","implemented":true,"kind":"function","modifiers":[{"id":87624,"kind":"modifierInvocation","modifierName":{"id":87623,"name":"whenNotPaused","nodeType":"IdentifierPath","referencedDeclaration":87256,"src":"15044:13:135"},"nodeType":"ModifierInvocation","src":"15044:13:135"}],"name":"finalizeWithdrawalTransactionExternalProof","nameLocation":"14891:42:135","parameters":{"id":87622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87619,"mutability":"mutable","name":"_tx","nameLocation":"14978:3:135","nodeType":"VariableDeclaration","scope":87695,"src":"14943:38:135","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_memory_ptr","typeString":"struct Types.WithdrawalTransaction"},"typeName":{"id":87618,"nodeType":"UserDefinedTypeName","pathNode":{"id":87617,"name":"Types.WithdrawalTransaction","nodeType":"IdentifierPath","referencedDeclaration":104348,"src":"14943:27:135"},"referencedDeclaration":104348,"src":"14943:27:135","typeDescriptions":{"typeIdentifier":"t_struct$_WithdrawalTransaction_$104348_storage_ptr","typeString":"struct Types.WithdrawalTransaction"}},"visibility":"internal"},{"constant":false,"id":87621,"mutability":"mutable","name":"_proofSubmitter","nameLocation":"14999:15:135","nodeType":"VariableDeclaration","scope":87695,"src":"14991:23:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":87620,"name":"address","nodeType":"ElementaryTypeName","src":"14991:7:135","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14933:87:135"},"returnParameters":{"id":87625,"nodeType":"ParameterList","parameters":[],"src":"15062:0:135"},"scope":87971,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":87785,"nodeType":"FunctionDefinition","src":"18015:1855:135","nodes":[],"body":{"id":87784,"nodeType":"Block","src":"18236:1634:135","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":87719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":87712,"name":"_isCreation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87704,"src":"18375:11:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":87718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":87713,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87698,"src":"18390:3:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":87716,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18405:1:135","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":87715,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18397:7:135","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":87714,"name":"address","nodeType":"ElementaryTypeName","src":"18397:7:135","typeDescriptions":{}}},"id":87717,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18397:10:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18390:17:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"18375:32:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":87723,"nodeType":"IfStatement","src":"18371:56:135","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":87720,"name":"BadTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103969,"src":"18416:9:135","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":87721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18416:11:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87722,"nodeType":"RevertStatement","src":"18409:18:135"}},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":87732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":87724,"name":"_gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87702,"src":"18579:9:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[{"arguments":[{"expression":{"id":87728,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87706,"src":"18614:5:135","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":87729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"18614:12:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":87727,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18607:6:135","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":87726,"name":"uint64","nodeType":"ElementaryTypeName","src":"18607:6:135","typeDescriptions":{}}},"id":87730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18607:20:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":87725,"name":"minimumGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87416,"src":"18591:15:135","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint64_$returns$_t_uint64_$","typeString":"function (uint64) pure returns (uint64)"}},"id":87731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18591:37:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"18579:49:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":87736,"nodeType":"IfStatement","src":"18575:77:135","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":87733,"name":"SmallGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103975,"src":"18637:13:135","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":87734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18637:15:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87735,"nodeType":"RevertStatement","src":"18630:22:135"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":87740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":87737,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87706,"src":"19027:5:135","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":87738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"19027:12:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"3132305f303030","id":87739,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19042:7:135","typeDescriptions":{"typeIdentifier":"t_rational_120000_by_1","typeString":"int_const 120000"},"value":"120_000"},"src":"19027:22:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":87744,"nodeType":"IfStatement","src":"19023:50:135","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":87741,"name":"LargeCalldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103972,"src":"19058:13:135","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":87742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19058:15:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87743,"nodeType":"RevertStatement","src":"19051:22:135"}},{"assignments":[87746],"declarations":[{"constant":false,"id":87746,"mutability":"mutable","name":"from","nameLocation":"19172:4:135","nodeType":"VariableDeclaration","scope":87784,"src":"19164:12:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":87745,"name":"address","nodeType":"ElementaryTypeName","src":"19164:7:135","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":87749,"initialValue":{"expression":{"id":87747,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19179:3:135","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":87748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"19179:10:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"19164:25:135"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":87754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":87750,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19203:3:135","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":87751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"19203:10:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":87752,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"19217:2:135","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":87753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"origin","nodeType":"MemberAccess","src":"19217:9:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19203:23:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":87764,"nodeType":"IfStatement","src":"19199:108:135","trueBody":{"id":87763,"nodeType":"Block","src":"19228:79:135","statements":[{"expression":{"id":87761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":87755,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87746,"src":"19242:4:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":87758,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19285:3:135","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":87759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"19285:10:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":87756,"name":"AddressAliasHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111913,"src":"19249:18:135","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AddressAliasHelper_$111913_$","typeString":"type(library AddressAliasHelper)"}},"id":87757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"applyL1ToL2Alias","nodeType":"MemberAccess","referencedDeclaration":111890,"src":"19249:35:135","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$_t_address_$","typeString":"function (address) pure returns (address)"}},"id":87760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19249:47:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19242:54:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":87762,"nodeType":"ExpressionStatement","src":"19242:54:135"}]}},{"assignments":[87766],"declarations":[{"constant":false,"id":87766,"mutability":"mutable","name":"opaqueData","nameLocation":"19577:10:135","nodeType":"VariableDeclaration","scope":87784,"src":"19564:23:135","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":87765,"name":"bytes","nodeType":"ElementaryTypeName","src":"19564:5:135","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":87776,"initialValue":{"arguments":[{"expression":{"id":87769,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19607:3:135","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":87770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"19607:9:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":87771,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87700,"src":"19618:6:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":87772,"name":"_gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87702,"src":"19626:9:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":87773,"name":"_isCreation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87704,"src":"19637:11:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":87774,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87706,"src":"19650:5:135","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":87767,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"19590:3:135","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":87768,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"19590:16:135","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":87775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19590:66:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"19564:92:135"},{"eventCall":{"arguments":[{"id":87778,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87746,"src":"19824:4:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":87779,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87698,"src":"19830:3:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":87780,"name":"DEPOSIT_VERSION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87158,"src":"19835:15:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":87781,"name":"opaqueData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87766,"src":"19852:10:135","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":87777,"name":"TransactionDeposited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87229,"src":"19803:20:135","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory)"}},"id":87782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19803:60:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87783,"nodeType":"EmitStatement","src":"19798:65:135"}]},"documentation":{"id":87696,"nodeType":"StructuredDocumentation","src":"17291:719:135","text":"@notice Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in\n deriving deposit transactions. Note that if a deposit is made by a contract, its\n address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider\n using the CrossDomainMessenger contracts for a simpler developer experience.\n @param _to Target address on L2.\n @param _value ETH value to send to the recipient.\n @param _gasLimit Amount of L2 gas to purchase by burning gas on L1.\n @param _isCreation Whether or not the transaction is a contract creation.\n @param _data Data to trigger the recipient with."},"functionSelector":"e9e05c42","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":87709,"name":"_gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87702,"src":"18221:9:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"id":87710,"kind":"modifierInvocation","modifierName":{"id":87708,"name":"metered","nodeType":"IdentifierPath","referencedDeclaration":88284,"src":"18213:7:135"},"nodeType":"ModifierInvocation","src":"18213:18:135"}],"name":"depositTransaction","nameLocation":"18024:18:135","parameters":{"id":87707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87698,"mutability":"mutable","name":"_to","nameLocation":"18060:3:135","nodeType":"VariableDeclaration","scope":87785,"src":"18052:11:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":87697,"name":"address","nodeType":"ElementaryTypeName","src":"18052:7:135","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":87700,"mutability":"mutable","name":"_value","nameLocation":"18081:6:135","nodeType":"VariableDeclaration","scope":87785,"src":"18073:14:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":87699,"name":"uint256","nodeType":"ElementaryTypeName","src":"18073:7:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":87702,"mutability":"mutable","name":"_gasLimit","nameLocation":"18104:9:135","nodeType":"VariableDeclaration","scope":87785,"src":"18097:16:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":87701,"name":"uint64","nodeType":"ElementaryTypeName","src":"18097:6:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":87704,"mutability":"mutable","name":"_isCreation","nameLocation":"18128:11:135","nodeType":"VariableDeclaration","scope":87785,"src":"18123:16:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":87703,"name":"bool","nodeType":"ElementaryTypeName","src":"18123:4:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":87706,"mutability":"mutable","name":"_data","nameLocation":"18162:5:135","nodeType":"VariableDeclaration","scope":87785,"src":"18149:18:135","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":87705,"name":"bytes","nodeType":"ElementaryTypeName","src":"18149:5:135","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"18042:131:135"},"returnParameters":{"id":87711,"nodeType":"ParameterList","parameters":[],"src":"18236:0:135"},"scope":87971,"stateMutability":"payable","virtual":false,"visibility":"public"},{"id":87808,"nodeType":"FunctionDefinition","src":"20049:185:135","nodes":[],"body":{"id":87807,"nodeType":"Block","src":"20115:119:135","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":87796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":87792,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"20129:3:135","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":87793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"20129:10:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":87794,"name":"guardian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87372,"src":"20143:8:135","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":87795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20143:10:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"20129:24:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":87800,"nodeType":"IfStatement","src":"20125:51:135","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":87797,"name":"Unauthorized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103987,"src":"20162:12:135","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":87798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20162:14:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87799,"nodeType":"RevertStatement","src":"20155:21:135"}},{"expression":{"id":87805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":87801,"name":"disputeGameBlacklist","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87205,"src":"20186:20:135","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IDisputeGame_$100327_$_t_bool_$","typeString":"mapping(contract IDisputeGame => bool)"}},"id":87803,"indexExpression":{"id":87802,"name":"_disputeGame","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87789,"src":"20207:12:135","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"20186:34:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":87804,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20223:4:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"20186:41:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":87806,"nodeType":"ExpressionStatement","src":"20186:41:135"}]},"documentation":{"id":87786,"nodeType":"StructuredDocumentation","src":"19876:168:135","text":"@notice Blacklists a dispute game. Should only be used in the event that a dispute game resolves incorrectly.\n @param _disputeGame Dispute game to blacklist."},"functionSelector":"7d6be8dc","implemented":true,"kind":"function","modifiers":[],"name":"blacklistDisputeGame","nameLocation":"20058:20:135","parameters":{"id":87790,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87789,"mutability":"mutable","name":"_disputeGame","nameLocation":"20092:12:135","nodeType":"VariableDeclaration","scope":87808,"src":"20079:25:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"},"typeName":{"id":87788,"nodeType":"UserDefinedTypeName","pathNode":{"id":87787,"name":"IDisputeGame","nodeType":"IdentifierPath","referencedDeclaration":100327,"src":"20079:12:135"},"referencedDeclaration":100327,"src":"20079:12:135","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"visibility":"internal"}],"src":"20078:27:135"},"returnParameters":{"id":87791,"nodeType":"ParameterList","parameters":[],"src":"20115:0:135"},"scope":87971,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":87837,"nodeType":"FunctionDefinition","src":"20481:228:135","nodes":[],"body":{"id":87836,"nodeType":"Block","src":"20540:169:135","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":87819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":87815,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"20554:3:135","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":87816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"20554:10:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":87817,"name":"guardian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87372,"src":"20568:8:135","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":87818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20568:10:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"20554:24:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":87823,"nodeType":"IfStatement","src":"20550:51:135","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":87820,"name":"Unauthorized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103987,"src":"20587:12:135","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":87821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20587:14:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87822,"nodeType":"RevertStatement","src":"20580:21:135"}},{"expression":{"id":87826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":87824,"name":"respectedGameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87209,"src":"20611:17:135","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":87825,"name":"_gameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87812,"src":"20631:9:135","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"src":"20611:29:135","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"id":87827,"nodeType":"ExpressionStatement","src":"20611:29:135"},{"expression":{"id":87834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":87828,"name":"respectedGameTypeUpdatedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87212,"src":"20650:26:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":87831,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"20686:5:135","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":87832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"20686:15:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":87830,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20679:6:135","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":87829,"name":"uint64","nodeType":"ElementaryTypeName","src":"20679:6:135","typeDescriptions":{}}},"id":87833,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20679:23:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"20650:52:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":87835,"nodeType":"ExpressionStatement","src":"20650:52:135"}]},"documentation":{"id":87809,"nodeType":"StructuredDocumentation","src":"20240:236:135","text":"@notice Sets the respected game type. Changing this value can alter the security properties of the system,\n depending on the new game's behavior.\n @param _gameType The game type to consult for output proposals."},"functionSelector":"7fc48504","implemented":true,"kind":"function","modifiers":[],"name":"setRespectedGameType","nameLocation":"20490:20:135","parameters":{"id":87813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87812,"mutability":"mutable","name":"_gameType","nameLocation":"20520:9:135","nodeType":"VariableDeclaration","scope":87837,"src":"20511:18:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"},"typeName":{"id":87811,"nodeType":"UserDefinedTypeName","pathNode":{"id":87810,"name":"GameType","nodeType":"IdentifierPath","referencedDeclaration":103271,"src":"20511:8:135"},"referencedDeclaration":103271,"src":"20511:8:135","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"visibility":"internal"}],"src":"20510:20:135"},"returnParameters":{"id":87814,"nodeType":"ParameterList","parameters":[],"src":"20540:0:135"},"scope":87971,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":87956,"nodeType":"FunctionDefinition","src":"21034:3510:135","nodes":[],"body":{"id":87955,"nodeType":"Block","src":"21121:3423:135","nodes":[],"statements":[{"assignments":[87847],"declarations":[{"constant":false,"id":87847,"mutability":"mutable","name":"provenWithdrawal","nameLocation":"21155:16:135","nodeType":"VariableDeclaration","scope":87955,"src":"21131:40:135","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$87148_memory_ptr","typeString":"struct OptimismPortal2.ProvenWithdrawal"},"typeName":{"id":87846,"nodeType":"UserDefinedTypeName","pathNode":{"id":87845,"name":"ProvenWithdrawal","nodeType":"IdentifierPath","referencedDeclaration":87148,"src":"21131:16:135"},"referencedDeclaration":87148,"src":"21131:16:135","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$87148_storage_ptr","typeString":"struct OptimismPortal2.ProvenWithdrawal"}},"visibility":"internal"}],"id":87853,"initialValue":{"baseExpression":{"baseExpression":{"id":87848,"name":"provenWithdrawals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87199,"src":"21174:17:135","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_struct$_ProvenWithdrawal_$87148_storage_$_$","typeString":"mapping(bytes32 => mapping(address => struct OptimismPortal2.ProvenWithdrawal storage ref))"}},"id":87850,"indexExpression":{"id":87849,"name":"_withdrawalHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87840,"src":"21192:15:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21174:34:135","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ProvenWithdrawal_$87148_storage_$","typeString":"mapping(address => struct OptimismPortal2.ProvenWithdrawal storage ref)"}},"id":87852,"indexExpression":{"id":87851,"name":"_proofSubmitter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87842,"src":"21209:15:135","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21174:51:135","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$87148_storage","typeString":"struct OptimismPortal2.ProvenWithdrawal storage ref"}},"nodeType":"VariableDeclarationStatement","src":"21131:94:135"},{"assignments":[87856],"declarations":[{"constant":false,"id":87856,"mutability":"mutable","name":"disputeGameProxy","nameLocation":"21248:16:135","nodeType":"VariableDeclaration","scope":87955,"src":"21235:29:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"},"typeName":{"id":87855,"nodeType":"UserDefinedTypeName","pathNode":{"id":87854,"name":"IDisputeGame","nodeType":"IdentifierPath","referencedDeclaration":100327,"src":"21235:12:135"},"referencedDeclaration":100327,"src":"21235:12:135","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"visibility":"internal"}],"id":87859,"initialValue":{"expression":{"id":87857,"name":"provenWithdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87847,"src":"21267:16:135","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$87148_memory_ptr","typeString":"struct OptimismPortal2.ProvenWithdrawal memory"}},"id":87858,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"disputeGameProxy","nodeType":"MemberAccess","referencedDeclaration":87145,"src":"21267:33:135","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"nodeType":"VariableDeclarationStatement","src":"21235:65:135"},{"expression":{"arguments":[{"id":87864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"21372:39:135","subExpression":{"baseExpression":{"id":87861,"name":"disputeGameBlacklist","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87205,"src":"21373:20:135","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IDisputeGame_$100327_$_t_bool_$","typeString":"mapping(contract IDisputeGame => bool)"}},"id":87863,"indexExpression":{"id":87862,"name":"disputeGameProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87856,"src":"21394:16:135","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21373:38:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a20646973707574652067616d6520686173206265656e20626c61636b6c6973746564","id":87865,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"21413:51:135","typeDescriptions":{"typeIdentifier":"t_stringliteral_73f1817c6693b1e67cebb729644f638bfff163fd990e09b18d9a753bee9d3156","typeString":"literal_string \"OptimismPortal: dispute game has been blacklisted\""},"value":"OptimismPortal: dispute game has been blacklisted"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_73f1817c6693b1e67cebb729644f638bfff163fd990e09b18d9a753bee9d3156","typeString":"literal_string \"OptimismPortal: dispute game has been blacklisted\""}],"id":87860,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"21364:7:135","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":87866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"21364:101:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87867,"nodeType":"ExpressionStatement","src":"21364:101:135"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":87872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":87869,"name":"provenWithdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87847,"src":"21728:16:135","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$87148_memory_ptr","typeString":"struct OptimismPortal2.ProvenWithdrawal memory"}},"id":87870,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":87147,"src":"21728:26:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":87871,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21758:1:135","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21728:31:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e6f74206265656e2070726f76656e2062792070726f6f66207375626d6974746572206164647265737320796574","id":87873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"21773:79:135","typeDescriptions":{"typeIdentifier":"t_stringliteral_dff7e2322b891da5e795cf007265ba6491e079cdcc6285755ab2ef47d12c1b3e","typeString":"literal_string \"OptimismPortal: withdrawal has not been proven by proof submitter address yet\""},"value":"OptimismPortal: withdrawal has not been proven by proof submitter address yet"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_dff7e2322b891da5e795cf007265ba6491e079cdcc6285755ab2ef47d12c1b3e","typeString":"literal_string \"OptimismPortal: withdrawal has not been proven by proof submitter address yet\""}],"id":87868,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"21707:7:135","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":87874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"21707:155:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87875,"nodeType":"ExpressionStatement","src":"21707:155:135"},{"assignments":[87877],"declarations":[{"constant":false,"id":87877,"mutability":"mutable","name":"createdAt","nameLocation":"21880:9:135","nodeType":"VariableDeclaration","scope":87955,"src":"21873:16:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":87876,"name":"uint64","nodeType":"ElementaryTypeName","src":"21873:6:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"id":87883,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":87878,"name":"disputeGameProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87856,"src":"21892:16:135","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"id":87879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"createdAt","nodeType":"MemberAccess","referencedDeclaration":100260,"src":"21892:26:135","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_userDefinedValueType$_Timestamp_$103261_$","typeString":"function () view external returns (Timestamp)"}},"id":87880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"21892:28:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"}},"id":87881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101124,"src":"21892:32:135","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Timestamp_$103261_$returns$_t_uint64_$bound_to$_t_userDefinedValueType$_Timestamp_$103261_$","typeString":"function (Timestamp) pure returns (uint64)"}},"id":87882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"21892:34:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"VariableDeclarationStatement","src":"21873:53:135"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":87888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":87885,"name":"provenWithdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87847,"src":"22211:16:135","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$87148_memory_ptr","typeString":"struct OptimismPortal2.ProvenWithdrawal memory"}},"id":87886,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":87147,"src":"22211:26:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":87887,"name":"createdAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87877,"src":"22240:9:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"22211:38:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657374616d70206c657373207468616e20646973707574652067616d65206372656174696f6e2074696d657374616d70","id":87889,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"22263:80:135","typeDescriptions":{"typeIdentifier":"t_stringliteral_0ad74f1e06ee42b3b76dc1e11cd4cd398b1f9faab8a48965612e5077366f3ac5","typeString":"literal_string \"OptimismPortal: withdrawal timestamp less than dispute game creation timestamp\""},"value":"OptimismPortal: withdrawal timestamp less than dispute game creation timestamp"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0ad74f1e06ee42b3b76dc1e11cd4cd398b1f9faab8a48965612e5077366f3ac5","typeString":"literal_string \"OptimismPortal: withdrawal timestamp less than dispute game creation timestamp\""}],"id":87884,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"22190:7:135","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":87890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22190:163:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87891,"nodeType":"ExpressionStatement","src":"22190:163:135"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":87899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":87897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":87893,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"22485:5:135","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":87894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"22485:15:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":87895,"name":"provenWithdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87847,"src":"22503:16:135","typeDescriptions":{"typeIdentifier":"t_struct$_ProvenWithdrawal_$87148_memory_ptr","typeString":"struct OptimismPortal2.ProvenWithdrawal memory"}},"id":87896,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":87147,"src":"22503:26:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"22485:44:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":87898,"name":"PROOF_MATURITY_DELAY_SECONDS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87151,"src":"22532:28:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22485:75:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a2070726f76656e207769746864726177616c20686173206e6f74206d61747572656420796574","id":87900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"22574:55:135","typeDescriptions":{"typeIdentifier":"t_stringliteral_76db07ababbe7ead3930082886fa1efd5937fe1ef0c82ee1c6b5f5e6f3c5b440","typeString":"literal_string \"OptimismPortal: proven withdrawal has not matured yet\""},"value":"OptimismPortal: proven withdrawal has not matured yet"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_76db07ababbe7ead3930082886fa1efd5937fe1ef0c82ee1c6b5f5e6f3c5b440","typeString":"literal_string \"OptimismPortal: proven withdrawal has not matured yet\""}],"id":87892,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"22464:7:135","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":87901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22464:175:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87902,"nodeType":"ExpressionStatement","src":"22464:175:135"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"},"id":87909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":87904,"name":"disputeGameProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87856,"src":"22943:16:135","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"id":87905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"status","nodeType":"MemberAccess","referencedDeclaration":100274,"src":"22943:23:135","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_enum$_GameStatus_$103277_$","typeString":"function () view external returns (enum GameStatus)"}},"id":87906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22943:25:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":87907,"name":"GameStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103277,"src":"22972:10:135","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_GameStatus_$103277_$","typeString":"type(enum GameStatus)"}},"id":87908,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"DEFENDER_WINS","nodeType":"MemberAccess","referencedDeclaration":103276,"src":"22972:24:135","typeDescriptions":{"typeIdentifier":"t_enum$_GameStatus_$103277","typeString":"enum GameStatus"}},"src":"22943:53:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c20686173206e6f74206265656e2076616c696461746564","id":87910,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23010:56:135","typeDescriptions":{"typeIdentifier":"t_stringliteral_6a59e1f27f0a2f1f7f0bcad40a1f45d3cc032caa0d85e86ecaf6cb415c3f90fc","typeString":"literal_string \"OptimismPortal: output proposal has not been validated\""},"value":"OptimismPortal: output proposal has not been validated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6a59e1f27f0a2f1f7f0bcad40a1f45d3cc032caa0d85e86ecaf6cb415c3f90fc","typeString":"literal_string \"OptimismPortal: output proposal has not been validated\""}],"id":87903,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"22922:7:135","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":87911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22922:154:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87912,"nodeType":"ExpressionStatement","src":"22922:154:135"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":87922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":87914,"name":"disputeGameProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87856,"src":"23349:16:135","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"id":87915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"gameType","nodeType":"MemberAccess","referencedDeclaration":100281,"src":"23349:25:135","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_userDefinedValueType$_GameType_$103271_$","typeString":"function () view external returns (GameType)"}},"id":87916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23349:27:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"id":87917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101150,"src":"23349:31:135","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_GameType_$103271_$returns$_t_uint32_$bound_to$_t_userDefinedValueType$_GameType_$103271_$","typeString":"function (GameType) pure returns (uint32)"}},"id":87918,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23349:33:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":87919,"name":"respectedGameType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87209,"src":"23386:17:135","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_GameType_$103271","typeString":"GameType"}},"id":87920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101150,"src":"23386:21:135","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_GameType_$103271_$returns$_t_uint32_$bound_to$_t_userDefinedValueType$_GameType_$103271_$","typeString":"function (GameType) pure returns (uint32)"}},"id":87921,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23386:23:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"23349:60:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797065","id":87923,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23411:35:135","typeDescriptions":{"typeIdentifier":"t_stringliteral_ea6e52a7a06be8d460d58a9fb591f5b7ad20643cdd834b0004aaeaa0647b1d4b","typeString":"literal_string \"OptimismPortal: invalid game type\""},"value":"OptimismPortal: invalid game type"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ea6e52a7a06be8d460d58a9fb591f5b7ad20643cdd834b0004aaeaa0647b1d4b","typeString":"literal_string \"OptimismPortal: invalid game type\""}],"id":87913,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"23341:7:135","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":87924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23341:106:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87925,"nodeType":"ExpressionStatement","src":"23341:106:135"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":87929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":87927,"name":"createdAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87877,"src":"23709:9:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":87928,"name":"respectedGameTypeUpdatedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87212,"src":"23722:26:135","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"23709:39:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a20646973707574652067616d652063726561746564206265666f7265207265737065637465642067616d652074797065207761732075706461746564","id":87930,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23762:77:135","typeDescriptions":{"typeIdentifier":"t_stringliteral_eb316f1f3803f121f540c3c08dac6b170256917a9481e6e8393a29885b3a291f","typeString":"literal_string \"OptimismPortal: dispute game created before respected game type was updated\""},"value":"OptimismPortal: dispute game created before respected game type was updated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_eb316f1f3803f121f540c3c08dac6b170256917a9481e6e8393a29885b3a291f","typeString":"literal_string \"OptimismPortal: dispute game created before respected game type was updated\""}],"id":87926,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"23688:7:135","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":87931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23688:161:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87932,"nodeType":"ExpressionStatement","src":"23688:161:135"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":87943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":87941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":87934,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"24166:5:135","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":87935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"24166:15:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":87936,"name":"disputeGameProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87856,"src":"24184:16:135","typeDescriptions":{"typeIdentifier":"t_contract$_IDisputeGame_$100327","typeString":"contract IDisputeGame"}},"id":87937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"resolvedAt","nodeType":"MemberAccess","referencedDeclaration":100267,"src":"24184:27:135","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_userDefinedValueType$_Timestamp_$103261_$","typeString":"function () view external returns (Timestamp)"}},"id":87938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24184:29:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Timestamp_$103261","typeString":"Timestamp"}},"id":87939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":101124,"src":"24184:33:135","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Timestamp_$103261_$returns$_t_uint64_$bound_to$_t_userDefinedValueType$_Timestamp_$103261_$","typeString":"function (Timestamp) pure returns (uint64)"}},"id":87940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24184:35:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"24166:53:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":87942,"name":"DISPUTE_GAME_FINALITY_DELAY_SECONDS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87154,"src":"24222:35:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24166:91:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c20696e206169722d676170","id":87944,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"24271:44:135","typeDescriptions":{"typeIdentifier":"t_stringliteral_2a9b71e2152e178b3e39fef8c45fff793ac6b1f468eb7fbc612e0d564625c10f","typeString":"literal_string \"OptimismPortal: output proposal in air-gap\""},"value":"OptimismPortal: output proposal in air-gap"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2a9b71e2152e178b3e39fef8c45fff793ac6b1f468eb7fbc612e0d564625c10f","typeString":"literal_string \"OptimismPortal: output proposal in air-gap\""}],"id":87933,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"24145:7:135","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":87945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24145:180:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87946,"nodeType":"ExpressionStatement","src":"24145:180:135"},{"expression":{"arguments":[{"id":87951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"24441:38:135","subExpression":{"baseExpression":{"id":87948,"name":"finalizedWithdrawals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87170,"src":"24442:20:135","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":87950,"indexExpression":{"id":87949,"name":"_withdrawalHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87840,"src":"24463:15:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24442:37:135","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7074696d69736d506f7274616c3a207769746864726177616c2068617320616c7265616479206265656e2066696e616c697a6564","id":87952,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"24481:55:135","typeDescriptions":{"typeIdentifier":"t_stringliteral_2a1157cbf4171a399f26106a5211324151853c78d2faca1fb1d3acbf755aa485","typeString":"literal_string \"OptimismPortal: withdrawal has already been finalized\""},"value":"OptimismPortal: withdrawal has already been finalized"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2a1157cbf4171a399f26106a5211324151853c78d2faca1fb1d3acbf755aa485","typeString":"literal_string \"OptimismPortal: withdrawal has already been finalized\""}],"id":87947,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"24433:7:135","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":87953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24433:104:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87954,"nodeType":"ExpressionStatement","src":"24433:104:135"}]},"documentation":{"id":87838,"nodeType":"StructuredDocumentation","src":"20715:314:135","text":"@notice Checks if a withdrawal can be finalized. This function will revert if the withdrawal cannot be\n finalized, and otherwise has no side-effects.\n @param _withdrawalHash Hash of the withdrawal to check.\n @param _proofSubmitter The submitter of the proof for the withdrawal hash"},"functionSelector":"71c1566e","implemented":true,"kind":"function","modifiers":[],"name":"checkWithdrawal","nameLocation":"21043:15:135","parameters":{"id":87843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87840,"mutability":"mutable","name":"_withdrawalHash","nameLocation":"21067:15:135","nodeType":"VariableDeclaration","scope":87956,"src":"21059:23:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":87839,"name":"bytes32","nodeType":"ElementaryTypeName","src":"21059:7:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":87842,"mutability":"mutable","name":"_proofSubmitter","nameLocation":"21092:15:135","nodeType":"VariableDeclaration","scope":87956,"src":"21084:23:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":87841,"name":"address","nodeType":"ElementaryTypeName","src":"21084:7:135","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21058:50:135"},"returnParameters":{"id":87844,"nodeType":"ParameterList","parameters":[],"src":"21121:0:135"},"scope":87971,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":87970,"nodeType":"FunctionDefinition","src":"24767:148:135","nodes":[],"body":{"id":87969,"nodeType":"Block","src":"24852:63:135","nodes":[],"statements":[{"expression":{"expression":{"baseExpression":{"id":87964,"name":"proofSubmitters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87218,"src":"24869:15:135","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_address_$dyn_storage_$","typeString":"mapping(bytes32 => address[] storage ref)"}},"id":87966,"indexExpression":{"id":87965,"name":"_withdrawalHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":87959,"src":"24885:15:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24869:32:135","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":87967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"24869:39:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":87963,"id":87968,"nodeType":"Return","src":"24862:46:135"}]},"documentation":{"id":87957,"nodeType":"StructuredDocumentation","src":"24550:212:135","text":"@notice External getter for the number of proof submitters for a withdrawal hash.\n @param _withdrawalHash Hash of the withdrawal.\n @return The number of proof submitters for the withdrawal hash."},"functionSelector":"513747ab","implemented":true,"kind":"function","modifiers":[],"name":"numProofSubmitters","nameLocation":"24776:18:135","parameters":{"id":87960,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87959,"mutability":"mutable","name":"_withdrawalHash","nameLocation":"24803:15:135","nodeType":"VariableDeclaration","scope":87970,"src":"24795:23:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":87958,"name":"bytes32","nodeType":"ElementaryTypeName","src":"24795:7:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"24794:25:135"},"returnParameters":{"id":87963,"nodeType":"ParameterList","parameters":[{"constant":false,"id":87962,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":87970,"src":"24843:7:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":87961,"name":"uint256","nodeType":"ElementaryTypeName","src":"24843:7:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24842:9:135"},"scope":87971,"stateMutability":"view","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":87137,"name":"Initializable","nodeType":"IdentifierPath","referencedDeclaration":49678,"src":"1338:13:135"},"id":87138,"nodeType":"InheritanceSpecifier","src":"1338:13:135"},{"baseName":{"id":87139,"name":"ResourceMetering","nodeType":"IdentifierPath","referencedDeclaration":88581,"src":"1353:16:135"},"id":87140,"nodeType":"InheritanceSpecifier","src":"1353:16:135"},{"baseName":{"id":87141,"name":"ISemver","nodeType":"IdentifierPath","referencedDeclaration":109417,"src":"1371:7:135"},"id":87142,"nodeType":"InheritanceSpecifier","src":"1371:7:135"}],"canonicalName":"OptimismPortal2","contractDependencies":[],"contractKind":"contract","documentation":{"id":87136,"nodeType":"StructuredDocumentation","src":"971:339:135","text":"@custom:proxied\n @title OptimismPortal2\n @notice The OptimismPortal is a low-level contract responsible for passing messages between L1\n and L2. Messages sent directly to the OptimismPortal have no form of replayability.\n Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface."},"fullyImplemented":true,"linearizedBaseContracts":[87971,109417,88581,49678],"name":"OptimismPortal2","nameLocation":"1319:15:135","scope":87972,"usedErrors":[88238,103969,103972,103975,103987,103990,103993]}],"license":"MIT"},"id":135} \ No newline at end of file diff --git a/packages/sdk/src/forge-artifacts/ProxyAdmin.json b/packages/sdk/src/forge-artifacts/ProxyAdmin.json deleted file mode 100644 index 2edb1663c68a..000000000000 --- a/packages/sdk/src/forge-artifacts/ProxyAdmin.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"_owner","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"addressManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract AddressManager"}],"stateMutability":"view"},{"type":"function","name":"changeProxyAdmin","inputs":[{"name":"_proxy","type":"address","internalType":"address payable"},{"name":"_newAdmin","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getProxyAdmin","inputs":[{"name":"_proxy","type":"address","internalType":"address payable"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getProxyImplementation","inputs":[{"name":"_proxy","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"implementationName","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"isUpgrading","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"proxyType","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint8","internalType":"enum ProxyAdmin.ProxyType"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setAddress","inputs":[{"name":"_name","type":"string","internalType":"string"},{"name":"_address","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setAddressManager","inputs":[{"name":"_address","type":"address","internalType":"contract AddressManager"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setImplementationName","inputs":[{"name":"_address","type":"address","internalType":"address"},{"name":"_name","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setProxyType","inputs":[{"name":"_address","type":"address","internalType":"address"},{"name":"_type","type":"uint8","internalType":"enum ProxyAdmin.ProxyType"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setUpgrading","inputs":[{"name":"_upgrading","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgrade","inputs":[{"name":"_proxy","type":"address","internalType":"address payable"},{"name":"_implementation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeAndCall","inputs":[{"name":"_proxy","type":"address","internalType":"address payable"},{"name":"_implementation","type":"address","internalType":"address"},{"name":"_data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x60806040523480156200001157600080fd5b5060405162001a5f38038062001a5f8339810160408190526200003491620000a1565b6200003f3362000051565b6200004a8162000051565b50620000d3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215620000b457600080fd5b81516001600160a01b0381168114620000cc57600080fd5b9392505050565b61197c80620000e36000396000f3fe60806040526004361061010e5760003560e01c8063860f7cda116100a557806399a88ec411610074578063b794726211610059578063b794726214610329578063f2fde38b14610364578063f3b7dead1461038457600080fd5b806399a88ec4146102e95780639b2ea4bd1461030957600080fd5b8063860f7cda1461026b5780638d52d4a01461028b5780638da5cb5b146102ab5780639623609d146102d657600080fd5b80633ab76e9f116100e15780633ab76e9f146101cc5780636bd9f516146101f9578063715018a6146102365780637eff275e1461024b57600080fd5b80630652b57a1461011357806307c8f7b014610135578063204e1c7a14610155578063238181ae1461019f575b600080fd5b34801561011f57600080fd5b5061013361012e3660046111f9565b6103a4565b005b34801561014157600080fd5b50610133610150366004611216565b6103f3565b34801561016157600080fd5b506101756101703660046111f9565b610445565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101ab57600080fd5b506101bf6101ba3660046111f9565b61066b565b60405161019691906112ae565b3480156101d857600080fd5b506003546101759073ffffffffffffffffffffffffffffffffffffffff1681565b34801561020557600080fd5b506102296102143660046111f9565b60016020526000908152604090205460ff1681565b60405161019691906112f0565b34801561024257600080fd5b50610133610705565b34801561025757600080fd5b50610133610266366004611331565b610719565b34801561027757600080fd5b5061013361028636600461148c565b6108cc565b34801561029757600080fd5b506101336102a63660046114dc565b610903565b3480156102b757600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610175565b6101336102e436600461150e565b610977565b3480156102f557600080fd5b50610133610304366004611331565b610b8e565b34801561031557600080fd5b50610133610324366004611584565b610e1e565b34801561033557600080fd5b5060035474010000000000000000000000000000000000000000900460ff166040519015158152602001610196565b34801561037057600080fd5b5061013361037f3660046111f9565b610eb4565b34801561039057600080fd5b5061017561039f3660046111f9565b610f6b565b6103ac6110e1565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6103fb6110e1565b6003805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205460ff1681816002811115610481576104816112c1565b036104fc578273ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f591906115cb565b9392505050565b6001816002811115610510576105106112c1565b03610560578273ffffffffffffffffffffffffffffffffffffffff1663aaf10f426040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d1573d6000803e3d6000fd5b6002816002811115610574576105746112c1565b036105fe5760035473ffffffffffffffffffffffffffffffffffffffff8481166000908152600260205260409081902090517fbf40fac1000000000000000000000000000000000000000000000000000000008152919092169163bf40fac1916105e19190600401611635565b602060405180830381865afa1580156104d1573d6000803e3d6000fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f50726f787941646d696e3a20756e6b6e6f776e2070726f78792074797065000060448201526064015b60405180910390fd5b50919050565b60026020526000908152604090208054610684906115e8565b80601f01602080910402602001604051908101604052809291908181526020018280546106b0906115e8565b80156106fd5780601f106106d2576101008083540402835291602001916106fd565b820191906000526020600020905b8154815290600101906020018083116106e057829003601f168201915b505050505081565b61070d6110e1565b6107176000611162565b565b6107216110e1565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604081205460ff169081600281111561075d5761075d6112c1565b036107e9576040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690638f283970906024015b600060405180830381600087803b1580156107cc57600080fd5b505af11580156107e0573d6000803e3d6000fd5b50505050505050565b60018160028111156107fd576107fd6112c1565b03610856576040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528416906313af4035906024016107b2565b600281600281111561086a5761086a6112c1565b036105fe576003546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529091169063f2fde38b906024016107b2565b505050565b6108d46110e1565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604090206108c78282611724565b61090b6110e1565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160208190526040909120805483927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091169083600281111561096e5761096e6112c1565b02179055505050565b61097f6110e1565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081205460ff16908160028111156109bb576109bb6112c1565b03610a81576040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690634f1ef286903490610a16908790879060040161183e565b60006040518083038185885af1158015610a34573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a7b9190810190611875565b50610b88565b610a8b8484610b8e565b60008473ffffffffffffffffffffffffffffffffffffffff163484604051610ab391906118ec565b60006040518083038185875af1925050503d8060008114610af0576040519150601f19603f3d011682016040523d82523d6000602084013e610af5565b606091505b5050905080610b86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f50726f787941646d696e3a2063616c6c20746f2070726f78792061667465722060448201527f75706772616465206661696c6564000000000000000000000000000000000000606482015260840161065c565b505b50505050565b610b966110e1565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604081205460ff1690816002811115610bd257610bd26112c1565b03610c2b576040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690633659cfe6906024016107b2565b6001816002811115610c3f57610c3f6112c1565b03610cbe576040517f9b0b0fda0000000000000000000000000000000000000000000000000000000081527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152841690639b0b0fda906044016107b2565b6002816002811115610cd257610cd26112c1565b03610e165773ffffffffffffffffffffffffffffffffffffffff831660009081526002602052604081208054610d07906115e8565b80601f0160208091040260200160405190810160405280929190818152602001828054610d33906115e8565b8015610d805780601f10610d5557610100808354040283529160200191610d80565b820191906000526020600020905b815481529060010190602001808311610d6357829003601f168201915b50506003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815294955073ffffffffffffffffffffffffffffffffffffffff1693639b2ea4bd9350610dde92508591508790600401611908565b600060405180830381600087803b158015610df857600080fd5b505af1158015610e0c573d6000803e3d6000fd5b5050505050505050565b6108c7611940565b610e266110e1565b6003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690639b2ea4bd90610e7e9085908590600401611908565b600060405180830381600087803b158015610e9857600080fd5b505af1158015610eac573d6000803e3d6000fd5b505050505050565b610ebc6110e1565b73ffffffffffffffffffffffffffffffffffffffff8116610f5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161065c565b610f6881611162565b50565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205460ff1681816002811115610fa757610fa76112c1565b03610ff7578273ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d1573d6000803e3d6000fd5b600181600281111561100b5761100b6112c1565b0361105b578273ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d1573d6000803e3d6000fd5b600281600281111561106f5761106f6112c1565b036105fe57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d1573d6000803e3d6000fd5b60005473ffffffffffffffffffffffffffffffffffffffff163314610717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161065c565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff81168114610f6857600080fd5b60006020828403121561120b57600080fd5b81356104f5816111d7565b60006020828403121561122857600080fd5b813580151581146104f557600080fd5b60005b8381101561125357818101518382015260200161123b565b83811115610b885750506000910152565b6000815180845261127c816020860160208601611238565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006104f56020830184611264565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061132b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561134457600080fd5b823561134f816111d7565b9150602083013561135f816111d7565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156113e0576113e061136a565b604052919050565b600067ffffffffffffffff8211156114025761140261136a565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600061144161143c846113e8565b611399565b905082815283838301111561145557600080fd5b828260208301376000602084830101529392505050565b600082601f83011261147d57600080fd5b6104f58383356020850161142e565b6000806040838503121561149f57600080fd5b82356114aa816111d7565b9150602083013567ffffffffffffffff8111156114c657600080fd5b6114d28582860161146c565b9150509250929050565b600080604083850312156114ef57600080fd5b82356114fa816111d7565b915060208301356003811061135f57600080fd5b60008060006060848603121561152357600080fd5b833561152e816111d7565b9250602084013561153e816111d7565b9150604084013567ffffffffffffffff81111561155a57600080fd5b8401601f8101861361156b57600080fd5b61157a8682356020840161142e565b9150509250925092565b6000806040838503121561159757600080fd5b823567ffffffffffffffff8111156115ae57600080fd5b6115ba8582860161146c565b925050602083013561135f816111d7565b6000602082840312156115dd57600080fd5b81516104f5816111d7565b600181811c908216806115fc57607f821691505b602082108103610665577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000602080835260008454611649816115e8565b8084870152604060018084166000811461166a57600181146116a2576116d0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838a01528284151560051b8a010195506116d0565b896000528660002060005b858110156116c85781548b82018601529083019088016116ad565b8a0184019650505b509398975050505050505050565b601f8211156108c757600081815260208120601f850160051c810160208610156117055750805b601f850160051c820191505b81811015610eac57828155600101611711565b815167ffffffffffffffff81111561173e5761173e61136a565b6117528161174c84546115e8565b846116de565b602080601f8311600181146117a5576000841561176f5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610eac565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156117f2578886015182559484019460019091019084016117d3565b508582101561182e57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600061186d6040830184611264565b949350505050565b60006020828403121561188757600080fd5b815167ffffffffffffffff81111561189e57600080fd5b8201601f810184136118af57600080fd5b80516118bd61143c826113e8565b8181528560208385010111156118d257600080fd5b6118e3826020830160208601611238565b95945050505050565b600082516118fe818460208701611238565b9190910192915050565b60408152600061191b6040830185611264565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fdfea164736f6c634300080f000a","sourceMap":"1241:8036:234:-:0;;;2494:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;936:32:40;719:10:60;936:18:40;:32::i;:::-;2542:26:234::1;2561:6:::0;2542:18:::1;:26::i;:::-;2494:81:::0;1241:8036;;2433:187:40;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:40;;;-1:-1:-1;;;;;;2541:17:40;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;14:290:357:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:357;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:357:o;:::-;1241:8036:234;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361061010e5760003560e01c8063860f7cda116100a557806399a88ec411610074578063b794726211610059578063b794726214610329578063f2fde38b14610364578063f3b7dead1461038457600080fd5b806399a88ec4146102e95780639b2ea4bd1461030957600080fd5b8063860f7cda1461026b5780638d52d4a01461028b5780638da5cb5b146102ab5780639623609d146102d657600080fd5b80633ab76e9f116100e15780633ab76e9f146101cc5780636bd9f516146101f9578063715018a6146102365780637eff275e1461024b57600080fd5b80630652b57a1461011357806307c8f7b014610135578063204e1c7a14610155578063238181ae1461019f575b600080fd5b34801561011f57600080fd5b5061013361012e3660046111f9565b6103a4565b005b34801561014157600080fd5b50610133610150366004611216565b6103f3565b34801561016157600080fd5b506101756101703660046111f9565b610445565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101ab57600080fd5b506101bf6101ba3660046111f9565b61066b565b60405161019691906112ae565b3480156101d857600080fd5b506003546101759073ffffffffffffffffffffffffffffffffffffffff1681565b34801561020557600080fd5b506102296102143660046111f9565b60016020526000908152604090205460ff1681565b60405161019691906112f0565b34801561024257600080fd5b50610133610705565b34801561025757600080fd5b50610133610266366004611331565b610719565b34801561027757600080fd5b5061013361028636600461148c565b6108cc565b34801561029757600080fd5b506101336102a63660046114dc565b610903565b3480156102b757600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610175565b6101336102e436600461150e565b610977565b3480156102f557600080fd5b50610133610304366004611331565b610b8e565b34801561031557600080fd5b50610133610324366004611584565b610e1e565b34801561033557600080fd5b5060035474010000000000000000000000000000000000000000900460ff166040519015158152602001610196565b34801561037057600080fd5b5061013361037f3660046111f9565b610eb4565b34801561039057600080fd5b5061017561039f3660046111f9565b610f6b565b6103ac6110e1565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6103fb6110e1565b6003805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205460ff1681816002811115610481576104816112c1565b036104fc578273ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f591906115cb565b9392505050565b6001816002811115610510576105106112c1565b03610560578273ffffffffffffffffffffffffffffffffffffffff1663aaf10f426040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d1573d6000803e3d6000fd5b6002816002811115610574576105746112c1565b036105fe5760035473ffffffffffffffffffffffffffffffffffffffff8481166000908152600260205260409081902090517fbf40fac1000000000000000000000000000000000000000000000000000000008152919092169163bf40fac1916105e19190600401611635565b602060405180830381865afa1580156104d1573d6000803e3d6000fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f50726f787941646d696e3a20756e6b6e6f776e2070726f78792074797065000060448201526064015b60405180910390fd5b50919050565b60026020526000908152604090208054610684906115e8565b80601f01602080910402602001604051908101604052809291908181526020018280546106b0906115e8565b80156106fd5780601f106106d2576101008083540402835291602001916106fd565b820191906000526020600020905b8154815290600101906020018083116106e057829003601f168201915b505050505081565b61070d6110e1565b6107176000611162565b565b6107216110e1565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604081205460ff169081600281111561075d5761075d6112c1565b036107e9576040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690638f283970906024015b600060405180830381600087803b1580156107cc57600080fd5b505af11580156107e0573d6000803e3d6000fd5b50505050505050565b60018160028111156107fd576107fd6112c1565b03610856576040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528416906313af4035906024016107b2565b600281600281111561086a5761086a6112c1565b036105fe576003546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529091169063f2fde38b906024016107b2565b505050565b6108d46110e1565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604090206108c78282611724565b61090b6110e1565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160208190526040909120805483927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091169083600281111561096e5761096e6112c1565b02179055505050565b61097f6110e1565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081205460ff16908160028111156109bb576109bb6112c1565b03610a81576040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690634f1ef286903490610a16908790879060040161183e565b60006040518083038185885af1158015610a34573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a7b9190810190611875565b50610b88565b610a8b8484610b8e565b60008473ffffffffffffffffffffffffffffffffffffffff163484604051610ab391906118ec565b60006040518083038185875af1925050503d8060008114610af0576040519150601f19603f3d011682016040523d82523d6000602084013e610af5565b606091505b5050905080610b86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f50726f787941646d696e3a2063616c6c20746f2070726f78792061667465722060448201527f75706772616465206661696c6564000000000000000000000000000000000000606482015260840161065c565b505b50505050565b610b966110e1565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604081205460ff1690816002811115610bd257610bd26112c1565b03610c2b576040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690633659cfe6906024016107b2565b6001816002811115610c3f57610c3f6112c1565b03610cbe576040517f9b0b0fda0000000000000000000000000000000000000000000000000000000081527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152841690639b0b0fda906044016107b2565b6002816002811115610cd257610cd26112c1565b03610e165773ffffffffffffffffffffffffffffffffffffffff831660009081526002602052604081208054610d07906115e8565b80601f0160208091040260200160405190810160405280929190818152602001828054610d33906115e8565b8015610d805780601f10610d5557610100808354040283529160200191610d80565b820191906000526020600020905b815481529060010190602001808311610d6357829003601f168201915b50506003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815294955073ffffffffffffffffffffffffffffffffffffffff1693639b2ea4bd9350610dde92508591508790600401611908565b600060405180830381600087803b158015610df857600080fd5b505af1158015610e0c573d6000803e3d6000fd5b5050505050505050565b6108c7611940565b610e266110e1565b6003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690639b2ea4bd90610e7e9085908590600401611908565b600060405180830381600087803b158015610e9857600080fd5b505af1158015610eac573d6000803e3d6000fd5b505050505050565b610ebc6110e1565b73ffffffffffffffffffffffffffffffffffffffff8116610f5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161065c565b610f6881611162565b50565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205460ff1681816002811115610fa757610fa76112c1565b03610ff7578273ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d1573d6000803e3d6000fd5b600181600281111561100b5761100b6112c1565b0361105b578273ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d1573d6000803e3d6000fd5b600281600281111561106f5761106f6112c1565b036105fe57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d1573d6000803e3d6000fd5b60005473ffffffffffffffffffffffffffffffffffffffff163314610717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161065c565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff81168114610f6857600080fd5b60006020828403121561120b57600080fd5b81356104f5816111d7565b60006020828403121561122857600080fd5b813580151581146104f557600080fd5b60005b8381101561125357818101518382015260200161123b565b83811115610b885750506000910152565b6000815180845261127c816020860160208601611238565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006104f56020830184611264565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061132b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561134457600080fd5b823561134f816111d7565b9150602083013561135f816111d7565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156113e0576113e061136a565b604052919050565b600067ffffffffffffffff8211156114025761140261136a565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600061144161143c846113e8565b611399565b905082815283838301111561145557600080fd5b828260208301376000602084830101529392505050565b600082601f83011261147d57600080fd5b6104f58383356020850161142e565b6000806040838503121561149f57600080fd5b82356114aa816111d7565b9150602083013567ffffffffffffffff8111156114c657600080fd5b6114d28582860161146c565b9150509250929050565b600080604083850312156114ef57600080fd5b82356114fa816111d7565b915060208301356003811061135f57600080fd5b60008060006060848603121561152357600080fd5b833561152e816111d7565b9250602084013561153e816111d7565b9150604084013567ffffffffffffffff81111561155a57600080fd5b8401601f8101861361156b57600080fd5b61157a8682356020840161142e565b9150509250925092565b6000806040838503121561159757600080fd5b823567ffffffffffffffff8111156115ae57600080fd5b6115ba8582860161146c565b925050602083013561135f816111d7565b6000602082840312156115dd57600080fd5b81516104f5816111d7565b600181811c908216806115fc57607f821691505b602082108103610665577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000602080835260008454611649816115e8565b8084870152604060018084166000811461166a57600181146116a2576116d0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838a01528284151560051b8a010195506116d0565b896000528660002060005b858110156116c85781548b82018601529083019088016116ad565b8a0184019650505b509398975050505050505050565b601f8211156108c757600081815260208120601f850160051c810160208610156117055750805b601f850160051c820191505b81811015610eac57828155600101611711565b815167ffffffffffffffff81111561173e5761173e61136a565b6117528161174c84546115e8565b846116de565b602080601f8311600181146117a5576000841561176f5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610eac565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156117f2578886015182559484019460019091019084016117d3565b508582101561182e57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600061186d6040830184611264565b949350505050565b60006020828403121561188757600080fd5b815167ffffffffffffffff81111561189e57600080fd5b8201601f810184136118af57600080fd5b80516118bd61143c826113e8565b8181528560208385010111156118d257600080fd5b6118e3826020830160208601611238565b95945050505050565b600082516118fe818460208701611238565b9190910192915050565b60408152600061191b6040830185611264565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fdfea164736f6c634300080f000a","sourceMap":"1241:8036:234:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3571:113;;;;;;;;;;-1:-1:-1;3571:113:234;;;;;:::i;:::-;;:::i;:::-;;4430:97;;;;;;;;;;-1:-1:-1;4430:97:234;;;;;:::i;:::-;;:::i;5236:569::-;;;;;;;;;;-1:-1:-1;5236:569:234;;;;;:::i;:::-;;:::i;:::-;;;1204:42:357;1192:55;;;1174:74;;1162:2;1147:18;5236:569:234;;;;;;;;2087:52;;;;;;;;;;-1:-1:-1;2087:52:234;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2273:36::-;;;;;;;;;;-1:-1:-1;2273:36:234;;;;;;;;1760:46;;;;;;;;;;-1:-1:-1;1760:46:234;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;1831:101:40:-;;;;;;;;;;;;;:::i;6689:531:234:-;;;;;;;;;;-1:-1:-1;6689:531:234;;;;;:::i;:::-;;:::i;3219:142::-;;;;;;;;;;-1:-1:-1;3219:142:234;;;;;:::i;:::-;;:::i;2796:120::-;;;;;;;;;;-1:-1:-1;2796:120:234;;;;;:::i;:::-;;:::i;1201:85:40:-;;;;;;;;;;-1:-1:-1;1247:7:40;1273:6;;;1201:85;;8644:631:234;;;;;;:::i;:::-;;:::i;7423:816::-;;;;;;;;;;-1:-1:-1;7423:816:234;;;;;:::i;:::-;;:::i;4126:137::-;;;;;;;;;;-1:-1:-1;4126:137:234;;;;;:::i;:::-;;:::i;4941:85::-;;;;;;;;;;-1:-1:-1;5010:9:234;;;;;;;4941:85;;7028:14:357;;7021:22;7003:41;;6991:2;6976:18;4941:85:234;6863:187:357;2081:198:40;;;;;;;;;;-1:-1:-1;2081:198:40;;;;;:::i;:::-;;:::i;5988:519:234:-;;;;;;;;;;-1:-1:-1;5988:519:234;;;;;:::i;:::-;;:::i;3571:113::-;1094:13:40;:11;:13::i;:::-;3652:14:234::1;:25:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;3571:113::o;4430:97::-;1094:13:40;:11;:13::i;:::-;4498:9:234::1;:22:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;4430:97::o;5236:569::-;5344:17;;;5307:7;5344:17;;;:9;:17;;;;;;;;5307:7;5375:5;:26;;;;;;;;:::i;:::-;;5371:428;;5444:6;5424:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5417:51;5236:569;-1:-1:-1;;;5236:569:234:o;5371:428::-;5498:20;5489:5;:29;;;;;;;;:::i;:::-;;5485:314;;5566:6;5541:50;;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5485:314;5623:18;5614:5;:27;;;;;;;;:::i;:::-;;5610:189;;5664:14;;;5690:26;;;5664:14;5690:26;;;:18;:26;;;;;;;5664:53;;;;;:14;;;;;:25;;:53;;5690:26;5664:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5610:189;5748:40;;;;;9399:2:357;5748:40:234;;;9381:21:357;9438:2;9418:18;;;9411:30;9477:32;9457:18;;;9450:60;9527:18;;5748:40:234;;;;;;;;5610:189;5316:489;5236:569;;;:::o;2087:52::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1831:101:40:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;6689:531:234:-;1094:13:40;:11;:13::i;:::-;6805:17:234::1;::::0;::::1;6787:15;6805:17:::0;;;:9:::1;:17;::::0;;;;;::::1;;::::0;6836:5:::1;:26;;;;;;;;:::i;:::-;::::0;6832:382:::1;;6878:36;::::0;;;;:25:::1;1192:55:357::0;;;6878:36:234::1;::::0;::::1;1174:74:357::0;6878:25:234;::::1;::::0;::::1;::::0;1147:18:357;;6878:36:234::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6777:443;6689:531:::0;;:::o;6832:382::-:1;6944:20;6935:5;:29;;;;;;;;:::i;:::-;::::0;6931:283:::1;;6980:45;::::0;;;;:34:::1;1192:55:357::0;;;6980:45:234::1;::::0;::::1;1174:74:357::0;6980:34:234;::::1;::::0;::::1;::::0;1147:18:357;;6980:45:234::1;1028:226:357::0;6931:283:234::1;7055:18;7046:5;:27;;;;;;;;:::i;:::-;::::0;7042:172:::1;;7089:14;::::0;:43:::1;::::0;;;;:14:::1;1192:55:357::0;;;7089:43:234::1;::::0;::::1;1174:74:357::0;7089:14:234;;::::1;::::0;:32:::1;::::0;1147:18:357;;7089:43:234::1;1028:226:357::0;7042:172:234::1;6777:443;6689:531:::0;;:::o;3219:142::-;1094:13:40;:11;:13::i;:::-;3318:28:234::1;::::0;::::1;;::::0;;;:18:::1;:28;::::0;;;;:36:::1;3349:5:::0;3318:28;:36:::1;:::i;2796:120::-:0;1094:13:40;:11;:13::i;:::-;2882:19:234::1;::::0;::::1;;::::0;;;:9:::1;:19;::::0;;;;;;;:27;;2904:5;;2882:27;;;::::1;::::0;2904:5;2882:27:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;2796:120:::0;;:::o;8644:631::-;1094:13:40;:11;:13::i;:::-;8850:17:234::1;::::0;::::1;8832:15;8850:17:::0;;;:9:::1;:17;::::0;;;;;::::1;;::::0;8881:5:::1;:26;;;;;;;;:::i;:::-;::::0;8877:392:::1;;8923:74;::::0;;;;:30:::1;::::0;::::1;::::0;::::1;::::0;8962:9:::1;::::0;8923:74:::1;::::0;8974:15;;8991:5;;8923:74:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;8877:392;;;9076:32;9084:6;9092:15;9076:7;:32::i;:::-;9123:12;9140:6;:11;;9160:9;9172:5;9140:38;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9122:56;;;9200:7;9192:66;;;::::0;::::1;::::0;;13277:2:357;9192:66:234::1;::::0;::::1;13259:21:357::0;13316:2;13296:18;;;13289:30;13355:34;13335:18;;;13328:62;13426:16;13406:18;;;13399:44;13460:19;;9192:66:234::1;13075:410:357::0;9192:66:234::1;9014:255;8877:392;8822:453;8644:631:::0;;;:::o;7423:816::-;1094:13:40;:11;:13::i;:::-;7534:17:234::1;::::0;::::1;7516:15;7534:17:::0;;;:9:::1;:17;::::0;;;;;::::1;;::::0;7565:5:::1;:26;;;;;;;;:::i;:::-;::::0;7561:672:::1;;7607:40;::::0;;;;:23:::1;1192:55:357::0;;;7607:40:234::1;::::0;::::1;1174:74:357::0;7607:23:234;::::1;::::0;::::1;::::0;1147:18:357;;7607:40:234::1;1028:226:357::0;7561:672:234::1;7677:20;7668:5;:29;;;;;;;;:::i;:::-;::::0;7664:569:::1;;7713:150;::::0;;;;1614:66:192::1;7713:150:234;::::0;::::1;13664:25:357::0;7713:36:234::1;7815:33:::0;;::::1;13705:18:357::0;;;13698:34;7713:36:234;::::1;::::0;::::1;::::0;13637:18:357;;7713:150:234::1;13490:248:357::0;7664:569:234::1;7893:18;7884:5;:27;;;;;;;;:::i;:::-;::::0;7880:353:::1;;7948:26;::::0;::::1;7927:18;7948:26:::0;;;:18:::1;:26;::::0;;;;7927:47;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;7988:14:234::1;::::0;:48:::1;::::0;;;;7927:47;;-1:-1:-1;7988:14:234::1;;::::0;:25:::1;::::0;-1:-1:-1;7988:48:234::1;::::0;-1:-1:-1;7927:47:234;;-1:-1:-1;8020:15:234;;7988:48:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7913:134;6777:443;6689:531:::0;;:::o;7880:353::-:1;8209:13;;:::i;4126:137::-:0;1094:13:40;:11;:13::i;:::-;4214:14:234::1;::::0;:42:::1;::::0;;;;:14:::1;::::0;;::::1;::::0;:25:::1;::::0;:42:::1;::::0;4240:5;;4247:8;;4214:42:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4126:137:::0;;:::o;2081:198:40:-;1094:13;:11;:13::i;:::-;2169:22:::1;::::0;::::1;2161:73;;;::::0;::::1;::::0;;14479:2:357;2161:73:40::1;::::0;::::1;14461:21:357::0;14518:2;14498:18;;;14491:30;14557:34;14537:18;;;14530:62;14628:8;14608:18;;;14601:36;14654:19;;2161:73:40::1;14277:402:357::0;2161:73:40::1;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;5988:519:234:-;6095:17;;;6058:7;6095:17;;;:9;:17;;;;;;;;6058:7;6126:5;:26;;;;;;;;:::i;:::-;;6122:379;;6195:6;6175:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6122:379;6240:20;6231:5;:29;;;;;;;;:::i;:::-;;6227:274;;6308:6;6283:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6227:274;6356:18;6347:5;:27;;;;;;;;:::i;:::-;;6343:158;;6397:14;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1359:130:40;1247:7;1273:6;1422:23;1273:6;719:10:60;1422:23:40;1414:68;;;;;;;14886:2:357;1414:68:40;;;14868:21:357;;;14905:18;;;14898:30;14964:34;14944:18;;;14937:62;15016:18;;1414:68:40;14684:356:357;2433:187:40;2506:16;2525:6;;;2541:17;;;;;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;14:170:357:-;116:42;109:5;105:54;98:5;95:65;85:93;;174:1;171;164:12;189:288;273:6;326:2;314:9;305:7;301:23;297:32;294:52;;;342:1;339;332:12;294:52;381:9;368:23;400:47;441:5;400:47;:::i;482:273::-;538:6;591:2;579:9;570:7;566:23;562:32;559:52;;;607:1;604;597:12;559:52;646:9;633:23;699:5;692:13;685:21;678:5;675:32;665:60;;721:1;718;711:12;1259:258;1331:1;1341:113;1355:6;1352:1;1349:13;1341:113;;;1431:11;;;1425:18;1412:11;;;1405:39;1377:2;1370:10;1341:113;;;1472:6;1469:1;1466:13;1463:48;;;-1:-1:-1;;1507:1:357;1489:16;;1482:27;1259:258::o;1522:317::-;1564:3;1602:5;1596:12;1629:6;1624:3;1617:19;1645:63;1701:6;1694:4;1689:3;1685:14;1678:4;1671:5;1667:16;1645:63;:::i;:::-;1753:2;1741:15;1758:66;1737:88;1728:98;;;;1828:4;1724:109;;1522:317;-1:-1:-1;;1522:317:357:o;1844:220::-;1993:2;1982:9;1975:21;1956:4;2013:45;2054:2;2043:9;2039:18;2031:6;2013:45;:::i;2325:184::-;2377:77;2374:1;2367:88;2474:4;2471:1;2464:15;2498:4;2495:1;2488:15;2514:401;2662:2;2647:18;;2695:1;2684:13;;2674:201;;2731:77;2728:1;2721:88;2832:4;2829:1;2822:15;2860:4;2857:1;2850:15;2674:201;2884:25;;;2514:401;:::o;2920:428::-;2996:6;3004;3057:2;3045:9;3036:7;3032:23;3028:32;3025:52;;;3073:1;3070;3063:12;3025:52;3112:9;3099:23;3131:47;3172:5;3131:47;:::i;:::-;3197:5;-1:-1:-1;3254:2:357;3239:18;;3226:32;3267:49;3226:32;3267:49;:::i;:::-;3335:7;3325:17;;;2920:428;;;;;:::o;3353:184::-;3405:77;3402:1;3395:88;3502:4;3499:1;3492:15;3526:4;3523:1;3516:15;3542:334;3613:2;3607:9;3669:2;3659:13;;3674:66;3655:86;3643:99;;3772:18;3757:34;;3793:22;;;3754:62;3751:88;;;3819:18;;:::i;:::-;3855:2;3848:22;3542:334;;-1:-1:-1;3542:334:357:o;3881:246::-;3930:4;3963:18;3955:6;3952:30;3949:56;;;3985:18;;:::i;:::-;-1:-1:-1;4042:2:357;4030:15;4047:66;4026:88;4116:4;4022:99;;3881:246::o;4132:338::-;4197:5;4226:53;4242:36;4271:6;4242:36;:::i;:::-;4226:53;:::i;:::-;4217:62;;4302:6;4295:5;4288:21;4342:3;4333:6;4328:3;4324:16;4321:25;4318:45;;;4359:1;4356;4349:12;4318:45;4408:6;4403:3;4396:4;4389:5;4385:16;4372:43;4462:1;4455:4;4446:6;4439:5;4435:18;4431:29;4424:40;4132:338;;;;;:::o;4475:222::-;4518:5;4571:3;4564:4;4556:6;4552:17;4548:27;4538:55;;4589:1;4586;4579:12;4538:55;4611:80;4687:3;4678:6;4665:20;4658:4;4650:6;4646:17;4611:80;:::i;4702:473::-;4780:6;4788;4841:2;4829:9;4820:7;4816:23;4812:32;4809:52;;;4857:1;4854;4847:12;4809:52;4896:9;4883:23;4915:47;4956:5;4915:47;:::i;:::-;4981:5;-1:-1:-1;5037:2:357;5022:18;;5009:32;5064:18;5053:30;;5050:50;;;5096:1;5093;5086:12;5050:50;5119;5161:7;5152:6;5141:9;5137:22;5119:50;:::i;:::-;5109:60;;;4702:473;;;;;:::o;5180:429::-;5264:6;5272;5325:2;5313:9;5304:7;5300:23;5296:32;5293:52;;;5341:1;5338;5331:12;5293:52;5380:9;5367:23;5399:47;5440:5;5399:47;:::i;:::-;5465:5;-1:-1:-1;5522:2:357;5507:18;;5494:32;5557:1;5545:14;;5535:42;;5573:1;5570;5563:12;5614:766;5708:6;5716;5724;5777:2;5765:9;5756:7;5752:23;5748:32;5745:52;;;5793:1;5790;5783:12;5745:52;5832:9;5819:23;5851:47;5892:5;5851:47;:::i;:::-;5917:5;-1:-1:-1;5974:2:357;5959:18;;5946:32;5987:49;5946:32;5987:49;:::i;:::-;6055:7;-1:-1:-1;6113:2:357;6098:18;;6085:32;6140:18;6129:30;;6126:50;;;6172:1;6169;6162:12;6126:50;6195:22;;6248:4;6240:13;;6236:27;-1:-1:-1;6226:55:357;;6277:1;6274;6267:12;6226:55;6300:74;6366:7;6361:2;6348:16;6343:2;6339;6335:11;6300:74;:::i;:::-;6290:84;;;5614:766;;;;;:::o;6385:473::-;6463:6;6471;6524:2;6512:9;6503:7;6499:23;6495:32;6492:52;;;6540:1;6537;6530:12;6492:52;6580:9;6567:23;6613:18;6605:6;6602:30;6599:50;;;6645:1;6642;6635:12;6599:50;6668;6710:7;6701:6;6690:9;6686:22;6668:50;:::i;:::-;6658:60;;;6768:2;6757:9;6753:18;6740:32;6781:47;6822:5;6781:47;:::i;7331:267::-;7401:6;7454:2;7442:9;7433:7;7429:23;7425:32;7422:52;;;7470:1;7467;7460:12;7422:52;7502:9;7496:16;7521:47;7562:5;7521:47;:::i;7603:437::-;7682:1;7678:12;;;;7725;;;7746:61;;7800:4;7792:6;7788:17;7778:27;;7746:61;7853:2;7845:6;7842:14;7822:18;7819:38;7816:218;;7890:77;7887:1;7880:88;7991:4;7988:1;7981:15;8019:4;8016:1;8009:15;8171:1021;8280:4;8309:2;8338;8327:9;8320:21;8361:1;8394:6;8388:13;8424:36;8450:9;8424:36;:::i;:::-;8496:6;8491:2;8480:9;8476:18;8469:34;8522:2;8543:1;8575:2;8564:9;8560:18;8592:1;8587:216;;;;8817:1;8812:354;;;;8553:613;;8587:216;8650:66;8639:9;8635:82;8630:2;8619:9;8615:18;8608:110;8790:2;8778:6;8771:14;8764:22;8761:1;8757:30;8746:9;8742:46;8738:55;8731:62;;8587:216;;8812:354;8843:6;8840:1;8833:17;8891:2;8888:1;8878:16;8916:1;8930:180;8944:6;8941:1;8938:13;8930:180;;;9037:14;;9013:17;;;9009:26;;9002:50;9080:16;;;;8959:10;;8930:180;;;9134:17;;9130:26;;;-1:-1:-1;;8553:613:357;-1:-1:-1;9183:3:357;;8171:1021;-1:-1:-1;;;;;;;;8171:1021:357:o;9556:545::-;9658:2;9653:3;9650:11;9647:448;;;9694:1;9719:5;9715:2;9708:17;9764:4;9760:2;9750:19;9834:2;9822:10;9818:19;9815:1;9811:27;9805:4;9801:38;9870:4;9858:10;9855:20;9852:47;;;-1:-1:-1;9893:4:357;9852:47;9948:2;9943:3;9939:12;9936:1;9932:20;9926:4;9922:31;9912:41;;10003:82;10021:2;10014:5;10011:13;10003:82;;;10066:17;;;10047:1;10036:13;10003:82;;10337:1471;10463:3;10457:10;10490:18;10482:6;10479:30;10476:56;;;10512:18;;:::i;:::-;10541:97;10631:6;10591:38;10623:4;10617:11;10591:38;:::i;:::-;10585:4;10541:97;:::i;:::-;10693:4;;10757:2;10746:14;;10774:1;10769:782;;;;11595:1;11612:6;11609:89;;;-1:-1:-1;11664:19:357;;;11658:26;11609:89;10243:66;10234:1;10230:11;;;10226:84;10222:89;10212:100;10318:1;10314:11;;;10209:117;11711:81;;10739:1063;;10769:782;8118:1;8111:14;;;8155:4;8142:18;;10817:66;10805:79;;;10982:236;10996:7;10993:1;10990:14;10982:236;;;11085:19;;;11079:26;11064:42;;11177:27;;;;11145:1;11133:14;;;;11012:19;;10982:236;;;10986:3;11246:6;11237:7;11234:19;11231:261;;;11307:19;;;11301:26;11408:66;11390:1;11386:14;;;11402:3;11382:24;11378:97;11374:102;11359:118;11344:134;;11231:261;-1:-1:-1;;;;;11538:1:357;11522:14;;;11518:22;11505:36;;-1:-1:-1;10337:1471:357:o;11813:338::-;12000:42;11992:6;11988:55;11977:9;11970:74;12080:2;12075;12064:9;12060:18;12053:30;11951:4;12100:45;12141:2;12130:9;12126:18;12118:6;12100:45;:::i;:::-;12092:53;11813:338;-1:-1:-1;;;;11813:338:357:o;12156:635::-;12235:6;12288:2;12276:9;12267:7;12263:23;12259:32;12256:52;;;12304:1;12301;12294:12;12256:52;12337:9;12331:16;12370:18;12362:6;12359:30;12356:50;;;12402:1;12399;12392:12;12356:50;12425:22;;12478:4;12470:13;;12466:27;-1:-1:-1;12456:55:357;;12507:1;12504;12497:12;12456:55;12536:2;12530:9;12561:49;12577:32;12606:2;12577:32;:::i;12561:49::-;12633:2;12626:5;12619:17;12673:7;12668:2;12663;12659;12655:11;12651:20;12648:33;12645:53;;;12694:1;12691;12684:12;12645:53;12707:54;12758:2;12753;12746:5;12742:14;12737:2;12733;12729:11;12707:54;:::i;:::-;12780:5;12156:635;-1:-1:-1;;;;;12156:635:357:o;12796:274::-;12925:3;12963:6;12957:13;12979:53;13025:6;13020:3;13013:4;13005:6;13001:17;12979:53;:::i;:::-;13048:16;;;;;12796:274;-1:-1:-1;;12796:274:357:o;13743:340::-;13920:2;13909:9;13902:21;13883:4;13940:45;13981:2;13970:9;13966:18;13958:6;13940:45;:::i;:::-;13932:53;;14033:42;14025:6;14021:55;14016:2;14005:9;14001:18;13994:83;13743:340;;;;;:::o;14088:184::-;14140:77;14137:1;14130:88;14237:4;14234:1;14227:15;14261:4;14258:1;14251:15","linkReferences":{}},"methodIdentifiers":{"addressManager()":"3ab76e9f","changeProxyAdmin(address,address)":"7eff275e","getProxyAdmin(address)":"f3b7dead","getProxyImplementation(address)":"204e1c7a","implementationName(address)":"238181ae","isUpgrading()":"b7947262","owner()":"8da5cb5b","proxyType(address)":"6bd9f516","renounceOwnership()":"715018a6","setAddress(string,address)":"9b2ea4bd","setAddressManager(address)":"0652b57a","setImplementationName(address,string)":"860f7cda","setProxyType(address,uint8)":"8d52d4a0","setUpgrading(bool)":"07c8f7b0","transferOwnership(address)":"f2fde38b","upgrade(address,address)":"99a88ec4","upgradeAndCall(address,address,bytes)":"9623609d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"contract AddressManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"implementationName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUpgrading\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"proxyType\",\"outputs\":[{\"internalType\":\"enum ProxyAdmin.ProxyType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract AddressManager\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAddressManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"setImplementationName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"internalType\":\"enum ProxyAdmin.ProxyType\",\"name\":\"_type\",\"type\":\"uint8\"}],\"name\":\"setProxyType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_upgrading\",\"type\":\"bool\"}],\"name\":\"setUpgrading\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"params\":{\"_newAdmin\":\"Address of the new proxy admin.\",\"_proxy\":\"Address of the proxy to update.\"}},\"constructor\":{\"params\":{\"_owner\":\"Address of the initial owner of this contract.\"}},\"getProxyAdmin(address)\":{\"params\":{\"_proxy\":\"Address of the proxy to get the admin of.\"},\"returns\":{\"_0\":\"Address of the admin of the proxy.\"}},\"getProxyImplementation(address)\":{\"params\":{\"_proxy\":\"Address of the proxy to get the implementation of.\"},\"returns\":{\"_0\":\"Address of the implementation of the proxy.\"}},\"isUpgrading()\":{\"custom:legacy\":\"@notice Legacy function used to tell ChugSplashProxy contracts if an upgrade is happening.\",\"returns\":{\"_0\":\"Whether or not there is an upgrade going on. May not actually tell you whether an upgrade is going on, since we don't currently plan to use this variable for anything other than a legacy indicator to fix a UX bug in the ChugSplash proxy.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setAddress(string,address)\":{\"custom:legacy\":\"@notice Set an address in the address manager. Since only the owner of the AddressManager can directly modify addresses and the ProxyAdmin will own the AddressManager, this gives the owner of the ProxyAdmin the ability to modify addresses directly.\",\"params\":{\"_address\":\"Address to attach to the given name.\",\"_name\":\"Name to set within the AddressManager.\"}},\"setAddressManager(address)\":{\"params\":{\"_address\":\"Address of the AddressManager.\"}},\"setImplementationName(address,string)\":{\"params\":{\"_address\":\"Address of the ResolvedDelegateProxy.\",\"_name\":\"Name of the implementation for the proxy.\"}},\"setProxyType(address,uint8)\":{\"params\":{\"_address\":\"Address of the proxy.\",\"_type\":\"Type of the proxy.\"}},\"setUpgrading(bool)\":{\"custom:legacy\":\"@notice Set the upgrading status for the Chugsplash proxy type.\",\"params\":{\"_upgrading\":\"Whether or not the system is upgrading.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"params\":{\"_implementation\":\"Address of the new implementation address.\",\"_proxy\":\"Address of the proxy to upgrade.\"}},\"upgradeAndCall(address,address,bytes)\":{\"params\":{\"_data\":\"Data to trigger the new implementation with.\",\"_implementation\":\"Address of the new implementation address.\",\"_proxy\":\"Address of the proxy to upgrade.\"}}},\"title\":\"ProxyAdmin\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addressManager()\":{\"notice\":\"The address of the address manager, this is required to manage the ResolvedDelegateProxy type.\"},\"changeProxyAdmin(address,address)\":{\"notice\":\"Updates the admin of the given proxy address.\"},\"getProxyAdmin(address)\":{\"notice\":\"Returns the admin of the given proxy address.\"},\"getProxyImplementation(address)\":{\"notice\":\"Returns the implementation of the given proxy address.\"},\"implementationName(address)\":{\"notice\":\"A reverse mapping of addresses to names held in the AddressManager. This must be manually kept up to date with changes in the AddressManager for this contract to be able to work as an admin for the ResolvedDelegateProxy type.\"},\"proxyType(address)\":{\"notice\":\"A mapping of proxy types, used for backwards compatibility.\"},\"setAddressManager(address)\":{\"notice\":\"Set the address of the AddressManager. This is required to manage legacy ResolvedDelegateProxy type proxy contracts.\"},\"setImplementationName(address,string)\":{\"notice\":\"Sets the implementation name for a given address. Only required for ResolvedDelegateProxy type proxies that have an implementation name.\"},\"setProxyType(address,uint8)\":{\"notice\":\"Sets the proxy type for a given address. Only required for non-standard (legacy) proxy types.\"},\"upgrade(address,address)\":{\"notice\":\"Changes a proxy's implementation contract.\"},\"upgradeAndCall(address,address,bytes)\":{\"notice\":\"Changes a proxy's implementation contract and delegatecalls the new implementation with some given data. Useful for atomic upgrade-and-initialize calls.\"}},\"notice\":\"This is an auxiliary contract meant to be assigned as the admin of an ERC1967 Proxy, based on the OpenZeppelin implementation. It has backwards compatibility logic to work with the various types of proxies that have been deployed by Optimism in the past.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/universal/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f\",\"dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929\",\"dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689\",\"dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy\"]},\"lib/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c\",\"dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8\"]},\"src/L1/ResourceMetering.sol\":{\"keccak256\":\"0xde3ac62c60f27a3f1ba06eec94f4eda45e7ec5544c6a5d6b79543a7184e44408\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://265a2845c4ff0d9076dd0505755cf2bdf799f4fdc09ef016865a26b51f5c3409\",\"dweb:/ipfs/QmRzSdBD8jmQf3U9u2ATRAzzuyo6c5ugz8VA5ZM4vzoGiM\"]},\"src/legacy/AddressManager.sol\":{\"keccak256\":\"0x1fcb990df6473f7fa360d5924d62d39ce2ca97d45668e3901e5405cfbe598b19\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9d08358b60dea54dbc32e988a1bb7ea909488063eaae3c5ae28a322f125c9b34\",\"dweb:/ipfs/QmZPQwdjLh9gaamNAoTUmWwwbRKj3yHovBYfnTPnfuKvUt\"]},\"src/legacy/L1ChugSplashProxy.sol\":{\"keccak256\":\"0xdde5626645fa217ad3a37805c4c3012e4251de01df868aae73b986f5d03cdb23\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a99fd0ec440c17c826465001dc88c5185dd41dc72396254fdd3cdfcc84aeae8c\",\"dweb:/ipfs/QmStHuecN89zBL8FH9SUK1TtkyYwfzMY2KkQaFJLHZLuyA\"]},\"src/libraries/Arithmetic.sol\":{\"keccak256\":\"0x91345e053584f82ad04d682ba821cf3ede808304f5b2a88116a894cf692c21db\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://005e3c42d2edfca0a506cbda94d3b0104eddf20c00bd1bd25272f53f2ef74c72\",\"dweb:/ipfs/QmdaW6Nge6NKoGvFqRpQjBpM2fXpc5y8WpZyBnDnKicdJq\"]},\"src/libraries/Burn.sol\":{\"keccak256\":\"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f\",\"dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb\"]},\"src/libraries/Constants.sol\":{\"keccak256\":\"0xe0aeec7d6e5d1e44a11405d3b5bfc384ea092c39bea0b763ab937a26fd427132\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11aa3bff9da26ca2545132ec7994866690446a5321023811c254410d9593bd9b\",\"dweb:/ipfs/QmVxWqadxvdfkqdrhfWisDqeAthibn4HEE1P6o9aFxXLhp\"]},\"src/universal/Proxy.sol\":{\"keccak256\":\"0x4f6f02e154bbb37137bcedcc256bef1e647865c79ec694fcaf5b6968799d7ddc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://00df4d4c6f4813c883eb33e1ec812c953840e78237fecf09c5739389c0777223\",\"dweb:/ipfs/QmQ1D5j7EwxBPtbQju55hKFQuruAwm8gnPHUTSXtDFjHUe\"]},\"src/universal/ProxyAdmin.sol\":{\"keccak256\":\"0xd15267cf5ed8c24d5a0f2099b8d470178d7ad729db52be16232eb143620b8dcf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9300ee0feb16fcf6c06ee541f2496eac533256bd97f79fe2128527d2f096894\",\"dweb:/ipfs/Qme3Md8pGSnjkG94WFXUdi5UF3a47BTQgKCdGmTKcMgcRa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.15+commit.e14f2714"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"addressManager","outputs":[{"internalType":"contract AddressManager","name":"","type":"address"}]},{"inputs":[{"internalType":"address payable","name":"_proxy","type":"address"},{"internalType":"address","name":"_newAdmin","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"changeProxyAdmin"},{"inputs":[{"internalType":"address payable","name":"_proxy","type":"address"}],"stateMutability":"view","type":"function","name":"getProxyAdmin","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_proxy","type":"address"}],"stateMutability":"view","type":"function","name":"getProxyImplementation","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"implementationName","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"isUpgrading","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"proxyType","outputs":[{"internalType":"enum ProxyAdmin.ProxyType","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"address","name":"_address","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setAddress"},{"inputs":[{"internalType":"contract AddressManager","name":"_address","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setAddressManager"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"setImplementationName"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"enum ProxyAdmin.ProxyType","name":"_type","type":"uint8"}],"stateMutability":"nonpayable","type":"function","name":"setProxyType"},{"inputs":[{"internalType":"bool","name":"_upgrading","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setUpgrading"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"address payable","name":"_proxy","type":"address"},{"internalType":"address","name":"_implementation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"upgrade"},{"inputs":[{"internalType":"address payable","name":"_proxy","type":"address"},{"internalType":"address","name":"_implementation","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeAndCall"}],"devdoc":{"kind":"dev","methods":{"changeProxyAdmin(address,address)":{"params":{"_newAdmin":"Address of the new proxy admin.","_proxy":"Address of the proxy to update."}},"constructor":{"params":{"_owner":"Address of the initial owner of this contract."}},"getProxyAdmin(address)":{"params":{"_proxy":"Address of the proxy to get the admin of."},"returns":{"_0":"Address of the admin of the proxy."}},"getProxyImplementation(address)":{"params":{"_proxy":"Address of the proxy to get the implementation of."},"returns":{"_0":"Address of the implementation of the proxy."}},"isUpgrading()":{"custom:legacy":"@notice Legacy function used to tell ChugSplashProxy contracts if an upgrade is happening.","returns":{"_0":"Whether or not there is an upgrade going on. May not actually tell you whether an upgrade is going on, since we don't currently plan to use this variable for anything other than a legacy indicator to fix a UX bug in the ChugSplash proxy."}},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"setAddress(string,address)":{"custom:legacy":"@notice Set an address in the address manager. Since only the owner of the AddressManager can directly modify addresses and the ProxyAdmin will own the AddressManager, this gives the owner of the ProxyAdmin the ability to modify addresses directly.","params":{"_address":"Address to attach to the given name.","_name":"Name to set within the AddressManager."}},"setAddressManager(address)":{"params":{"_address":"Address of the AddressManager."}},"setImplementationName(address,string)":{"params":{"_address":"Address of the ResolvedDelegateProxy.","_name":"Name of the implementation for the proxy."}},"setProxyType(address,uint8)":{"params":{"_address":"Address of the proxy.","_type":"Type of the proxy."}},"setUpgrading(bool)":{"custom:legacy":"@notice Set the upgrading status for the Chugsplash proxy type.","params":{"_upgrading":"Whether or not the system is upgrading."}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"upgrade(address,address)":{"params":{"_implementation":"Address of the new implementation address.","_proxy":"Address of the proxy to upgrade."}},"upgradeAndCall(address,address,bytes)":{"params":{"_data":"Data to trigger the new implementation with.","_implementation":"Address of the new implementation address.","_proxy":"Address of the proxy to upgrade."}}},"version":1},"userdoc":{"kind":"user","methods":{"addressManager()":{"notice":"The address of the address manager, this is required to manage the ResolvedDelegateProxy type."},"changeProxyAdmin(address,address)":{"notice":"Updates the admin of the given proxy address."},"getProxyAdmin(address)":{"notice":"Returns the admin of the given proxy address."},"getProxyImplementation(address)":{"notice":"Returns the implementation of the given proxy address."},"implementationName(address)":{"notice":"A reverse mapping of addresses to names held in the AddressManager. This must be manually kept up to date with changes in the AddressManager for this contract to be able to work as an admin for the ResolvedDelegateProxy type."},"proxyType(address)":{"notice":"A mapping of proxy types, used for backwards compatibility."},"setAddressManager(address)":{"notice":"Set the address of the AddressManager. This is required to manage legacy ResolvedDelegateProxy type proxy contracts."},"setImplementationName(address,string)":{"notice":"Sets the implementation name for a given address. Only required for ResolvedDelegateProxy type proxies that have an implementation name."},"setProxyType(address,uint8)":{"notice":"Sets the proxy type for a given address. Only required for non-standard (legacy) proxy types."},"upgrade(address,address)":{"notice":"Changes a proxy's implementation contract."},"upgradeAndCall(address,address,bytes)":{"notice":"Changes a proxy's implementation contract and delegatecalls the new implementation with some given data. Useful for atomic upgrade-and-initialize calls."}},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","ds-test/=lib/forge-std/lib/ds-test/src/","forge-std/=lib/forge-std/src/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/universal/ProxyAdmin.sol":"ProxyAdmin"},"evmVersion":"london","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673","urls":["bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2","dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66","urls":["bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f","dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10","urls":["bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487","dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7","urls":["bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92","dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0","urls":["bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929","dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7","urls":["bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689","dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy"],"license":"MIT"},"lib/solmate/src/utils/FixedPointMathLib.sol":{"keccak256":"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d","urls":["bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c","dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8"],"license":"MIT"},"src/L1/ResourceMetering.sol":{"keccak256":"0xde3ac62c60f27a3f1ba06eec94f4eda45e7ec5544c6a5d6b79543a7184e44408","urls":["bzz-raw://265a2845c4ff0d9076dd0505755cf2bdf799f4fdc09ef016865a26b51f5c3409","dweb:/ipfs/QmRzSdBD8jmQf3U9u2ATRAzzuyo6c5ugz8VA5ZM4vzoGiM"],"license":"MIT"},"src/legacy/AddressManager.sol":{"keccak256":"0x1fcb990df6473f7fa360d5924d62d39ce2ca97d45668e3901e5405cfbe598b19","urls":["bzz-raw://9d08358b60dea54dbc32e988a1bb7ea909488063eaae3c5ae28a322f125c9b34","dweb:/ipfs/QmZPQwdjLh9gaamNAoTUmWwwbRKj3yHovBYfnTPnfuKvUt"],"license":"MIT"},"src/legacy/L1ChugSplashProxy.sol":{"keccak256":"0xdde5626645fa217ad3a37805c4c3012e4251de01df868aae73b986f5d03cdb23","urls":["bzz-raw://a99fd0ec440c17c826465001dc88c5185dd41dc72396254fdd3cdfcc84aeae8c","dweb:/ipfs/QmStHuecN89zBL8FH9SUK1TtkyYwfzMY2KkQaFJLHZLuyA"],"license":"MIT"},"src/libraries/Arithmetic.sol":{"keccak256":"0x91345e053584f82ad04d682ba821cf3ede808304f5b2a88116a894cf692c21db","urls":["bzz-raw://005e3c42d2edfca0a506cbda94d3b0104eddf20c00bd1bd25272f53f2ef74c72","dweb:/ipfs/QmdaW6Nge6NKoGvFqRpQjBpM2fXpc5y8WpZyBnDnKicdJq"],"license":"MIT"},"src/libraries/Burn.sol":{"keccak256":"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010","urls":["bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f","dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb"],"license":"MIT"},"src/libraries/Constants.sol":{"keccak256":"0xe0aeec7d6e5d1e44a11405d3b5bfc384ea092c39bea0b763ab937a26fd427132","urls":["bzz-raw://11aa3bff9da26ca2545132ec7994866690446a5321023811c254410d9593bd9b","dweb:/ipfs/QmVxWqadxvdfkqdrhfWisDqeAthibn4HEE1P6o9aFxXLhp"],"license":"MIT"},"src/universal/Proxy.sol":{"keccak256":"0x4f6f02e154bbb37137bcedcc256bef1e647865c79ec694fcaf5b6968799d7ddc","urls":["bzz-raw://00df4d4c6f4813c883eb33e1ec812c953840e78237fecf09c5739389c0777223","dweb:/ipfs/QmQ1D5j7EwxBPtbQju55hKFQuruAwm8gnPHUTSXtDFjHUe"],"license":"MIT"},"src/universal/ProxyAdmin.sol":{"keccak256":"0xd15267cf5ed8c24d5a0f2099b8d470178d7ad729db52be16232eb143620b8dcf","urls":["bzz-raw://e9300ee0feb16fcf6c06ee541f2496eac533256bd97f79fe2128527d2f096894","dweb:/ipfs/Qme3Md8pGSnjkG94WFXUdi5UF3a47BTQgKCdGmTKcMgcRa"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":49330,"contract":"src/universal/ProxyAdmin.sol:ProxyAdmin","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":110483,"contract":"src/universal/ProxyAdmin.sol:ProxyAdmin","label":"proxyType","offset":0,"slot":"1","type":"t_mapping(t_address,t_enum(ProxyType)110477)"},{"astId":110488,"contract":"src/universal/ProxyAdmin.sol:ProxyAdmin","label":"implementationName","offset":0,"slot":"2","type":"t_mapping(t_address,t_string_storage)"},{"astId":110492,"contract":"src/universal/ProxyAdmin.sol:ProxyAdmin","label":"addressManager","offset":0,"slot":"3","type":"t_contract(AddressManager)102008"},{"astId":110495,"contract":"src/universal/ProxyAdmin.sol:ProxyAdmin","label":"upgrading","offset":20,"slot":"3","type":"t_bool"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(AddressManager)102008":{"encoding":"inplace","label":"contract AddressManager","numberOfBytes":"20"},"t_enum(ProxyType)110477":{"encoding":"inplace","label":"enum ProxyAdmin.ProxyType","numberOfBytes":"1"},"t_mapping(t_address,t_enum(ProxyType)110477)":{"encoding":"mapping","key":"t_address","label":"mapping(address => enum ProxyAdmin.ProxyType)","numberOfBytes":"32","value":"t_enum(ProxyType)110477"},"t_mapping(t_address,t_string_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => string)","numberOfBytes":"32","value":"t_string_storage"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"}}},"userdoc":{"version":1,"kind":"user","methods":{"addressManager()":{"notice":"The address of the address manager, this is required to manage the ResolvedDelegateProxy type."},"changeProxyAdmin(address,address)":{"notice":"Updates the admin of the given proxy address."},"getProxyAdmin(address)":{"notice":"Returns the admin of the given proxy address."},"getProxyImplementation(address)":{"notice":"Returns the implementation of the given proxy address."},"implementationName(address)":{"notice":"A reverse mapping of addresses to names held in the AddressManager. This must be manually kept up to date with changes in the AddressManager for this contract to be able to work as an admin for the ResolvedDelegateProxy type."},"proxyType(address)":{"notice":"A mapping of proxy types, used for backwards compatibility."},"setAddressManager(address)":{"notice":"Set the address of the AddressManager. This is required to manage legacy ResolvedDelegateProxy type proxy contracts."},"setImplementationName(address,string)":{"notice":"Sets the implementation name for a given address. Only required for ResolvedDelegateProxy type proxies that have an implementation name."},"setProxyType(address,uint8)":{"notice":"Sets the proxy type for a given address. Only required for non-standard (legacy) proxy types."},"upgrade(address,address)":{"notice":"Changes a proxy's implementation contract."},"upgradeAndCall(address,address,bytes)":{"notice":"Changes a proxy's implementation contract and delegatecalls the new implementation with some given data. Useful for atomic upgrade-and-initialize calls."}},"notice":"This is an auxiliary contract meant to be assigned as the admin of an ERC1967 Proxy, based on the OpenZeppelin implementation. It has backwards compatibility logic to work with the various types of proxies that have been deployed by Optimism in the past."},"devdoc":{"version":1,"kind":"dev","methods":{"changeProxyAdmin(address,address)":{"params":{"_newAdmin":"Address of the new proxy admin.","_proxy":"Address of the proxy to update."}},"constructor":{"params":{"_owner":"Address of the initial owner of this contract."}},"getProxyAdmin(address)":{"params":{"_proxy":"Address of the proxy to get the admin of."},"returns":{"_0":"Address of the admin of the proxy."}},"getProxyImplementation(address)":{"params":{"_proxy":"Address of the proxy to get the implementation of."},"returns":{"_0":"Address of the implementation of the proxy."}},"isUpgrading()":{"returns":{"_0":"Whether or not there is an upgrade going on. May not actually tell you whether an upgrade is going on, since we don't currently plan to use this variable for anything other than a legacy indicator to fix a UX bug in the ChugSplash proxy."}},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"setAddress(string,address)":{"params":{"_address":"Address to attach to the given name.","_name":"Name to set within the AddressManager."}},"setAddressManager(address)":{"params":{"_address":"Address of the AddressManager."}},"setImplementationName(address,string)":{"params":{"_address":"Address of the ResolvedDelegateProxy.","_name":"Name of the implementation for the proxy."}},"setProxyType(address,uint8)":{"params":{"_address":"Address of the proxy.","_type":"Type of the proxy."}},"setUpgrading(bool)":{"params":{"_upgrading":"Whether or not the system is upgrading."}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"upgrade(address,address)":{"params":{"_implementation":"Address of the new implementation address.","_proxy":"Address of the proxy to upgrade."}},"upgradeAndCall(address,address,bytes)":{"params":{"_data":"Data to trigger the new implementation with.","_implementation":"Address of the new implementation address.","_proxy":"Address of the proxy to upgrade."}}},"title":"ProxyAdmin"},"ast":{"absolutePath":"src/universal/ProxyAdmin.sol","id":110910,"exportedSymbols":{"AddressManager":[102008],"Constants":[103096],"IStaticERC1967Proxy":[110458],"IStaticL1ChugSplashProxy":[110470],"L1ChugSplashProxy":[102516],"Ownable":[49435],"Proxy":[110434],"ProxyAdmin":[110909]},"nodeType":"SourceUnit","src":"32:9246:234","nodes":[{"id":110436,"nodeType":"PragmaDirective","src":"32:23:234","nodes":[],"literals":["solidity","0.8",".15"]},{"id":110438,"nodeType":"ImportDirective","src":"57:69:234","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/access/Ownable.sol","file":"@openzeppelin/contracts/access/Ownable.sol","nameLocation":"-1:-1:-1","scope":110910,"sourceUnit":49436,"symbolAliases":[{"foreign":{"id":110437,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49435,"src":"66:7:234","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":110440,"nodeType":"ImportDirective","src":"127:48:234","nodes":[],"absolutePath":"src/universal/Proxy.sol","file":"src/universal/Proxy.sol","nameLocation":"-1:-1:-1","scope":110910,"sourceUnit":110435,"symbolAliases":[{"foreign":{"id":110439,"name":"Proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110434,"src":"136:5:234","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":110442,"nodeType":"ImportDirective","src":"176:63:234","nodes":[],"absolutePath":"src/legacy/AddressManager.sol","file":"src/legacy/AddressManager.sol","nameLocation":"-1:-1:-1","scope":110910,"sourceUnit":102009,"symbolAliases":[{"foreign":{"id":110441,"name":"AddressManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":102008,"src":"185:14:234","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":110444,"nodeType":"ImportDirective","src":"240:69:234","nodes":[],"absolutePath":"src/legacy/L1ChugSplashProxy.sol","file":"src/legacy/L1ChugSplashProxy.sol","nameLocation":"-1:-1:-1","scope":110910,"sourceUnit":102517,"symbolAliases":[{"foreign":{"id":110443,"name":"L1ChugSplashProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":102516,"src":"249:17:234","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":110446,"nodeType":"ImportDirective","src":"310:56:234","nodes":[],"absolutePath":"src/libraries/Constants.sol","file":"src/libraries/Constants.sol","nameLocation":"-1:-1:-1","scope":110910,"sourceUnit":103097,"symbolAliases":[{"foreign":{"id":110445,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103096,"src":"319:9:234","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":110458,"nodeType":"ContractDefinition","src":"483:151:234","nodes":[{"id":110452,"nodeType":"FunctionDefinition","src":"519:58:234","nodes":[],"functionSelector":"5c60da1b","implemented":false,"kind":"function","modifiers":[],"name":"implementation","nameLocation":"528:14:234","parameters":{"id":110448,"nodeType":"ParameterList","parameters":[],"src":"542:2:234"},"returnParameters":{"id":110451,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110450,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":110452,"src":"568:7:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":110449,"name":"address","nodeType":"ElementaryTypeName","src":"568:7:234","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"567:9:234"},"scope":110458,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":110457,"nodeType":"FunctionDefinition","src":"583:49:234","nodes":[],"functionSelector":"f851a440","implemented":false,"kind":"function","modifiers":[],"name":"admin","nameLocation":"592:5:234","parameters":{"id":110453,"nodeType":"ParameterList","parameters":[],"src":"597:2:234"},"returnParameters":{"id":110456,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110455,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":110457,"src":"623:7:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":110454,"name":"address","nodeType":"ElementaryTypeName","src":"623:7:234","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"622:9:234"},"scope":110458,"stateMutability":"view","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[],"canonicalName":"IStaticERC1967Proxy","contractDependencies":[],"contractKind":"interface","documentation":{"id":110447,"nodeType":"StructuredDocumentation","src":"368:115:234","text":"@title IStaticERC1967Proxy\n @notice IStaticERC1967Proxy is a static version of the ERC1967 proxy interface."},"fullyImplemented":false,"linearizedBaseContracts":[110458],"name":"IStaticERC1967Proxy","nameLocation":"493:19:234","scope":110910,"usedErrors":[]},{"id":110470,"nodeType":"ContractDefinition","src":"764:162:234","nodes":[{"id":110464,"nodeType":"FunctionDefinition","src":"805:61:234","nodes":[],"functionSelector":"aaf10f42","implemented":false,"kind":"function","modifiers":[],"name":"getImplementation","nameLocation":"814:17:234","parameters":{"id":110460,"nodeType":"ParameterList","parameters":[],"src":"831:2:234"},"returnParameters":{"id":110463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110462,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":110464,"src":"857:7:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":110461,"name":"address","nodeType":"ElementaryTypeName","src":"857:7:234","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"856:9:234"},"scope":110470,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":110469,"nodeType":"FunctionDefinition","src":"872:52:234","nodes":[],"functionSelector":"893d20e8","implemented":false,"kind":"function","modifiers":[],"name":"getOwner","nameLocation":"881:8:234","parameters":{"id":110465,"nodeType":"ParameterList","parameters":[],"src":"889:2:234"},"returnParameters":{"id":110468,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110467,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":110469,"src":"915:7:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":110466,"name":"address","nodeType":"ElementaryTypeName","src":"915:7:234","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"914:9:234"},"scope":110470,"stateMutability":"view","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[],"canonicalName":"IStaticL1ChugSplashProxy","contractDependencies":[],"contractKind":"interface","documentation":{"id":110459,"nodeType":"StructuredDocumentation","src":"636:128:234","text":"@title IStaticL1ChugSplashProxy\n @notice IStaticL1ChugSplashProxy is a static version of the ChugSplash proxy interface."},"fullyImplemented":false,"linearizedBaseContracts":[110470],"name":"IStaticL1ChugSplashProxy","nameLocation":"774:24:234","scope":110910,"usedErrors":[]},{"id":110909,"nodeType":"ContractDefinition","src":"1241:8036:234","nodes":[{"id":110477,"nodeType":"EnumDefinition","src":"1602:76:234","nodes":[],"canonicalName":"ProxyAdmin.ProxyType","members":[{"id":110474,"name":"ERC1967","nameLocation":"1627:7:234","nodeType":"EnumValue","src":"1627:7:234"},{"id":110475,"name":"CHUGSPLASH","nameLocation":"1644:10:234","nodeType":"EnumValue","src":"1644:10:234"},{"id":110476,"name":"RESOLVED","nameLocation":"1664:8:234","nodeType":"EnumValue","src":"1664:8:234"}],"name":"ProxyType","nameLocation":"1607:9:234"},{"id":110483,"nodeType":"VariableDeclaration","src":"1760:46:234","nodes":[],"constant":false,"documentation":{"id":110478,"nodeType":"StructuredDocumentation","src":"1684:71:234","text":"@notice A mapping of proxy types, used for backwards compatibility."},"functionSelector":"6bd9f516","mutability":"mutable","name":"proxyType","nameLocation":"1797:9:234","scope":110909,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_enum$_ProxyType_$110477_$","typeString":"mapping(address => enum ProxyAdmin.ProxyType)"},"typeName":{"id":110482,"keyType":{"id":110479,"name":"address","nodeType":"ElementaryTypeName","src":"1768:7:234","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1760:29:234","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_enum$_ProxyType_$110477_$","typeString":"mapping(address => enum ProxyAdmin.ProxyType)"},"valueType":{"id":110481,"nodeType":"UserDefinedTypeName","pathNode":{"id":110480,"name":"ProxyType","nodeType":"IdentifierPath","referencedDeclaration":110477,"src":"1779:9:234"},"referencedDeclaration":110477,"src":"1779:9:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}}},"visibility":"public"},{"id":110488,"nodeType":"VariableDeclaration","src":"2087:52:234","nodes":[],"constant":false,"documentation":{"id":110484,"nodeType":"StructuredDocumentation","src":"1813:269:234","text":"@notice A reverse mapping of addresses to names held in the AddressManager. This must be\n manually kept up to date with changes in the AddressManager for this contract\n to be able to work as an admin for the ResolvedDelegateProxy type."},"functionSelector":"238181ae","mutability":"mutable","name":"implementationName","nameLocation":"2121:18:234","scope":110909,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_string_storage_$","typeString":"mapping(address => string)"},"typeName":{"id":110487,"keyType":{"id":110485,"name":"address","nodeType":"ElementaryTypeName","src":"2095:7:234","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2087:26:234","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_string_storage_$","typeString":"mapping(address => string)"},"valueType":{"id":110486,"name":"string","nodeType":"ElementaryTypeName","src":"2106:6:234","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}}},"visibility":"public"},{"id":110492,"nodeType":"VariableDeclaration","src":"2273:36:234","nodes":[],"constant":false,"documentation":{"id":110489,"nodeType":"StructuredDocumentation","src":"2146:122:234","text":"@notice The address of the address manager, this is required to manage the\n ResolvedDelegateProxy type."},"functionSelector":"3ab76e9f","mutability":"mutable","name":"addressManager","nameLocation":"2295:14:234","scope":110909,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_AddressManager_$102008","typeString":"contract AddressManager"},"typeName":{"id":110491,"nodeType":"UserDefinedTypeName","pathNode":{"id":110490,"name":"AddressManager","nodeType":"IdentifierPath","referencedDeclaration":102008,"src":"2273:14:234"},"referencedDeclaration":102008,"src":"2273:14:234","typeDescriptions":{"typeIdentifier":"t_contract$_AddressManager_$102008","typeString":"contract AddressManager"}},"visibility":"public"},{"id":110495,"nodeType":"VariableDeclaration","src":"2395:23:234","nodes":[],"constant":false,"documentation":{"id":110493,"nodeType":"StructuredDocumentation","src":"2316:74:234","text":"@notice A legacy upgrading indicator used by the old Chugsplash Proxy."},"mutability":"mutable","name":"upgrading","nameLocation":"2409:9:234","scope":110909,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":110494,"name":"bool","nodeType":"ElementaryTypeName","src":"2395:4:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"id":110508,"nodeType":"FunctionDefinition","src":"2494:81:234","nodes":[],"body":{"id":110507,"nodeType":"Block","src":"2532:43:234","nodes":[],"statements":[{"expression":{"arguments":[{"id":110504,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110498,"src":"2561:6:234","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":110503,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49434,"src":"2542:18:234","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":110505,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2542:26:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":110506,"nodeType":"ExpressionStatement","src":"2542:26:234"}]},"documentation":{"id":110496,"nodeType":"StructuredDocumentation","src":"2425:64:234","text":"@param _owner Address of the initial owner of this contract."},"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":110501,"kind":"baseConstructorSpecifier","modifierName":{"id":110500,"name":"Ownable","nodeType":"IdentifierPath","referencedDeclaration":49435,"src":"2522:7:234"},"nodeType":"ModifierInvocation","src":"2522:9:234"}],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":110499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110498,"mutability":"mutable","name":"_owner","nameLocation":"2514:6:234","nodeType":"VariableDeclaration","scope":110508,"src":"2506:14:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":110497,"name":"address","nodeType":"ElementaryTypeName","src":"2506:7:234","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2505:16:234"},"returnParameters":{"id":110502,"nodeType":"ParameterList","parameters":[],"src":"2532:0:234"},"scope":110909,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":110526,"nodeType":"FunctionDefinition","src":"2796:120:234","nodes":[],"body":{"id":110525,"nodeType":"Block","src":"2872:44:234","nodes":[],"statements":[{"expression":{"id":110523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":110519,"name":"proxyType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110483,"src":"2882:9:234","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_enum$_ProxyType_$110477_$","typeString":"mapping(address => enum ProxyAdmin.ProxyType)"}},"id":110521,"indexExpression":{"id":110520,"name":"_address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110511,"src":"2892:8:234","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2882:19:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":110522,"name":"_type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110514,"src":"2904:5:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"src":"2882:27:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"id":110524,"nodeType":"ExpressionStatement","src":"2882:27:234"}]},"documentation":{"id":110509,"nodeType":"StructuredDocumentation","src":"2581:210:234","text":"@notice Sets the proxy type for a given address. Only required for non-standard (legacy)\n proxy types.\n @param _address Address of the proxy.\n @param _type Type of the proxy."},"functionSelector":"8d52d4a0","implemented":true,"kind":"function","modifiers":[{"id":110517,"kind":"modifierInvocation","modifierName":{"id":110516,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":49354,"src":"2862:9:234"},"nodeType":"ModifierInvocation","src":"2862:9:234"}],"name":"setProxyType","nameLocation":"2805:12:234","parameters":{"id":110515,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110511,"mutability":"mutable","name":"_address","nameLocation":"2826:8:234","nodeType":"VariableDeclaration","scope":110526,"src":"2818:16:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":110510,"name":"address","nodeType":"ElementaryTypeName","src":"2818:7:234","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":110514,"mutability":"mutable","name":"_type","nameLocation":"2846:5:234","nodeType":"VariableDeclaration","scope":110526,"src":"2836:15:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"},"typeName":{"id":110513,"nodeType":"UserDefinedTypeName","pathNode":{"id":110512,"name":"ProxyType","nodeType":"IdentifierPath","referencedDeclaration":110477,"src":"2836:9:234"},"referencedDeclaration":110477,"src":"2836:9:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"visibility":"internal"}],"src":"2817:35:234"},"returnParameters":{"id":110518,"nodeType":"ParameterList","parameters":[],"src":"2872:0:234"},"scope":110909,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":110543,"nodeType":"FunctionDefinition","src":"3219:142:234","nodes":[],"body":{"id":110542,"nodeType":"Block","src":"3308:53:234","nodes":[],"statements":[{"expression":{"id":110540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":110536,"name":"implementationName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110488,"src":"3318:18:234","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_string_storage_$","typeString":"mapping(address => string storage ref)"}},"id":110538,"indexExpression":{"id":110537,"name":"_address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110529,"src":"3337:8:234","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3318:28:234","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":110539,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110531,"src":"3349:5:234","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"3318:36:234","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":110541,"nodeType":"ExpressionStatement","src":"3318:36:234"}]},"documentation":{"id":110527,"nodeType":"StructuredDocumentation","src":"2922:292:234","text":"@notice Sets the implementation name for a given address. Only required for\n ResolvedDelegateProxy type proxies that have an implementation name.\n @param _address Address of the ResolvedDelegateProxy.\n @param _name Name of the implementation for the proxy."},"functionSelector":"860f7cda","implemented":true,"kind":"function","modifiers":[{"id":110534,"kind":"modifierInvocation","modifierName":{"id":110533,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":49354,"src":"3298:9:234"},"nodeType":"ModifierInvocation","src":"3298:9:234"}],"name":"setImplementationName","nameLocation":"3228:21:234","parameters":{"id":110532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110529,"mutability":"mutable","name":"_address","nameLocation":"3258:8:234","nodeType":"VariableDeclaration","scope":110543,"src":"3250:16:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":110528,"name":"address","nodeType":"ElementaryTypeName","src":"3250:7:234","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":110531,"mutability":"mutable","name":"_name","nameLocation":"3282:5:234","nodeType":"VariableDeclaration","scope":110543,"src":"3268:19:234","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":110530,"name":"string","nodeType":"ElementaryTypeName","src":"3268:6:234","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3249:39:234"},"returnParameters":{"id":110535,"nodeType":"ParameterList","parameters":[],"src":"3308:0:234"},"scope":110909,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":110557,"nodeType":"FunctionDefinition","src":"3571:113:234","nodes":[],"body":{"id":110556,"nodeType":"Block","src":"3642:42:234","nodes":[],"statements":[{"expression":{"id":110554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":110552,"name":"addressManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110492,"src":"3652:14:234","typeDescriptions":{"typeIdentifier":"t_contract$_AddressManager_$102008","typeString":"contract AddressManager"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":110553,"name":"_address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110547,"src":"3669:8:234","typeDescriptions":{"typeIdentifier":"t_contract$_AddressManager_$102008","typeString":"contract AddressManager"}},"src":"3652:25:234","typeDescriptions":{"typeIdentifier":"t_contract$_AddressManager_$102008","typeString":"contract AddressManager"}},"id":110555,"nodeType":"ExpressionStatement","src":"3652:25:234"}]},"documentation":{"id":110544,"nodeType":"StructuredDocumentation","src":"3367:199:234","text":"@notice Set the address of the AddressManager. This is required to manage legacy\n ResolvedDelegateProxy type proxy contracts.\n @param _address Address of the AddressManager."},"functionSelector":"0652b57a","implemented":true,"kind":"function","modifiers":[{"id":110550,"kind":"modifierInvocation","modifierName":{"id":110549,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":49354,"src":"3632:9:234"},"nodeType":"ModifierInvocation","src":"3632:9:234"}],"name":"setAddressManager","nameLocation":"3580:17:234","parameters":{"id":110548,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110547,"mutability":"mutable","name":"_address","nameLocation":"3613:8:234","nodeType":"VariableDeclaration","scope":110557,"src":"3598:23:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_AddressManager_$102008","typeString":"contract AddressManager"},"typeName":{"id":110546,"nodeType":"UserDefinedTypeName","pathNode":{"id":110545,"name":"AddressManager","nodeType":"IdentifierPath","referencedDeclaration":102008,"src":"3598:14:234"},"referencedDeclaration":102008,"src":"3598:14:234","typeDescriptions":{"typeIdentifier":"t_contract$_AddressManager_$102008","typeString":"contract AddressManager"}},"visibility":"internal"}],"src":"3597:25:234"},"returnParameters":{"id":110551,"nodeType":"ParameterList","parameters":[],"src":"3642:0:234"},"scope":110909,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":110575,"nodeType":"FunctionDefinition","src":"4126:137:234","nodes":[],"body":{"id":110574,"nodeType":"Block","src":"4204:59:234","nodes":[],"statements":[{"expression":{"arguments":[{"id":110570,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110560,"src":"4240:5:234","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":110571,"name":"_address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110562,"src":"4247:8:234","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":110567,"name":"addressManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110492,"src":"4214:14:234","typeDescriptions":{"typeIdentifier":"t_contract$_AddressManager_$102008","typeString":"contract AddressManager"}},"id":110569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setAddress","nodeType":"MemberAccess","referencedDeclaration":101976,"src":"4214:25:234","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (string memory,address) external"}},"id":110572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4214:42:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":110573,"nodeType":"ExpressionStatement","src":"4214:42:234"}]},"documentation":{"id":110558,"nodeType":"StructuredDocumentation","src":"3690:431:234","text":"@custom:legacy\n @notice Set an address in the address manager. Since only the owner of the AddressManager\n can directly modify addresses and the ProxyAdmin will own the AddressManager, this\n gives the owner of the ProxyAdmin the ability to modify addresses directly.\n @param _name Name to set within the AddressManager.\n @param _address Address to attach to the given name."},"functionSelector":"9b2ea4bd","implemented":true,"kind":"function","modifiers":[{"id":110565,"kind":"modifierInvocation","modifierName":{"id":110564,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":49354,"src":"4194:9:234"},"nodeType":"ModifierInvocation","src":"4194:9:234"}],"name":"setAddress","nameLocation":"4135:10:234","parameters":{"id":110563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110560,"mutability":"mutable","name":"_name","nameLocation":"4160:5:234","nodeType":"VariableDeclaration","scope":110575,"src":"4146:19:234","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":110559,"name":"string","nodeType":"ElementaryTypeName","src":"4146:6:234","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":110562,"mutability":"mutable","name":"_address","nameLocation":"4175:8:234","nodeType":"VariableDeclaration","scope":110575,"src":"4167:16:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":110561,"name":"address","nodeType":"ElementaryTypeName","src":"4167:7:234","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4145:39:234"},"returnParameters":{"id":110566,"nodeType":"ParameterList","parameters":[],"src":"4204:0:234"},"scope":110909,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":110588,"nodeType":"FunctionDefinition","src":"4430:97:234","nodes":[],"body":{"id":110587,"nodeType":"Block","src":"4488:39:234","nodes":[],"statements":[{"expression":{"id":110585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":110583,"name":"upgrading","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110495,"src":"4498:9:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":110584,"name":"_upgrading","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110578,"src":"4510:10:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4498:22:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":110586,"nodeType":"ExpressionStatement","src":"4498:22:234"}]},"documentation":{"id":110576,"nodeType":"StructuredDocumentation","src":"4269:156:234","text":"@custom:legacy\n @notice Set the upgrading status for the Chugsplash proxy type.\n @param _upgrading Whether or not the system is upgrading."},"functionSelector":"07c8f7b0","implemented":true,"kind":"function","modifiers":[{"id":110581,"kind":"modifierInvocation","modifierName":{"id":110580,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":49354,"src":"4478:9:234"},"nodeType":"ModifierInvocation","src":"4478:9:234"}],"name":"setUpgrading","nameLocation":"4439:12:234","parameters":{"id":110579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110578,"mutability":"mutable","name":"_upgrading","nameLocation":"4457:10:234","nodeType":"VariableDeclaration","scope":110588,"src":"4452:15:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":110577,"name":"bool","nodeType":"ElementaryTypeName","src":"4452:4:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4451:17:234"},"returnParameters":{"id":110582,"nodeType":"ParameterList","parameters":[],"src":"4488:0:234"},"scope":110909,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":110597,"nodeType":"FunctionDefinition","src":"4941:85:234","nodes":[],"body":{"id":110596,"nodeType":"Block","src":"4993:33:234","nodes":[],"statements":[{"expression":{"id":110594,"name":"upgrading","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110495,"src":"5010:9:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":110593,"id":110595,"nodeType":"Return","src":"5003:16:234"}]},"documentation":{"id":110589,"nodeType":"StructuredDocumentation","src":"4533:403:234","text":"@custom:legacy\n @notice Legacy function used to tell ChugSplashProxy contracts if an upgrade is happening.\n @return Whether or not there is an upgrade going on. May not actually tell you whether an\n upgrade is going on, since we don't currently plan to use this variable for anything\n other than a legacy indicator to fix a UX bug in the ChugSplash proxy."},"functionSelector":"b7947262","implemented":true,"kind":"function","modifiers":[],"name":"isUpgrading","nameLocation":"4950:11:234","parameters":{"id":110590,"nodeType":"ParameterList","parameters":[],"src":"4961:2:234"},"returnParameters":{"id":110593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110592,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":110597,"src":"4987:4:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":110591,"name":"bool","nodeType":"ElementaryTypeName","src":"4987:4:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4986:6:234"},"scope":110909,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":110655,"nodeType":"FunctionDefinition","src":"5236:569:234","nodes":[],"body":{"id":110654,"nodeType":"Block","src":"5316:489:234","nodes":[],"statements":[{"assignments":[110607],"declarations":[{"constant":false,"id":110607,"mutability":"mutable","name":"ptype","nameLocation":"5336:5:234","nodeType":"VariableDeclaration","scope":110654,"src":"5326:15:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"},"typeName":{"id":110606,"nodeType":"UserDefinedTypeName","pathNode":{"id":110605,"name":"ProxyType","nodeType":"IdentifierPath","referencedDeclaration":110477,"src":"5326:9:234"},"referencedDeclaration":110477,"src":"5326:9:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"visibility":"internal"}],"id":110611,"initialValue":{"baseExpression":{"id":110608,"name":"proxyType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110483,"src":"5344:9:234","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_enum$_ProxyType_$110477_$","typeString":"mapping(address => enum ProxyAdmin.ProxyType)"}},"id":110610,"indexExpression":{"id":110609,"name":"_proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110600,"src":"5354:6:234","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5344:17:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"nodeType":"VariableDeclarationStatement","src":"5326:35:234"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"},"id":110615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":110612,"name":"ptype","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110607,"src":"5375:5:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":110613,"name":"ProxyType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110477,"src":"5384:9:234","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProxyType_$110477_$","typeString":"type(enum ProxyAdmin.ProxyType)"}},"id":110614,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"ERC1967","nodeType":"MemberAccess","referencedDeclaration":110474,"src":"5384:17:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"src":"5375:26:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"},"id":110626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":110623,"name":"ptype","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110607,"src":"5489:5:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":110624,"name":"ProxyType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110477,"src":"5498:9:234","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProxyType_$110477_$","typeString":"type(enum ProxyAdmin.ProxyType)"}},"id":110625,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"CHUGSPLASH","nodeType":"MemberAccess","referencedDeclaration":110475,"src":"5498:20:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"src":"5489:29:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"},"id":110637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":110634,"name":"ptype","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110607,"src":"5614:5:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":110635,"name":"ProxyType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110477,"src":"5623:9:234","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProxyType_$110477_$","typeString":"type(enum ProxyAdmin.ProxyType)"}},"id":110636,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"RESOLVED","nodeType":"MemberAccess","referencedDeclaration":110476,"src":"5623:18:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"src":"5614:27:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":110650,"nodeType":"Block","src":"5734:65:234","statements":[{"expression":{"arguments":[{"hexValue":"50726f787941646d696e3a20756e6b6e6f776e2070726f78792074797065","id":110647,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5755:32:234","typeDescriptions":{"typeIdentifier":"t_stringliteral_0d595a635c8f2d148646b25cd19d12c4c97462aeb17388cbeb2bf405cffe65f2","typeString":"literal_string \"ProxyAdmin: unknown proxy type\""},"value":"ProxyAdmin: unknown proxy type"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_0d595a635c8f2d148646b25cd19d12c4c97462aeb17388cbeb2bf405cffe65f2","typeString":"literal_string \"ProxyAdmin: unknown proxy type\""}],"id":110646,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"5748:6:234","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":110648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5748:40:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":110649,"nodeType":"ExpressionStatement","src":"5748:40:234"}]},"id":110651,"nodeType":"IfStatement","src":"5610:189:234","trueBody":{"id":110645,"nodeType":"Block","src":"5643:85:234","statements":[{"expression":{"arguments":[{"baseExpression":{"id":110640,"name":"implementationName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110488,"src":"5690:18:234","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_string_storage_$","typeString":"mapping(address => string storage ref)"}},"id":110642,"indexExpression":{"id":110641,"name":"_proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110600,"src":"5709:6:234","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5690:26:234","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}],"expression":{"id":110638,"name":"addressManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110492,"src":"5664:14:234","typeDescriptions":{"typeIdentifier":"t_contract$_AddressManager_$102008","typeString":"contract AddressManager"}},"id":110639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAddress","nodeType":"MemberAccess","referencedDeclaration":101991,"src":"5664:25:234","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_string_memory_ptr_$returns$_t_address_$","typeString":"function (string memory) view external returns (address)"}},"id":110643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5664:53:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":110604,"id":110644,"nodeType":"Return","src":"5657:60:234"}]}},"id":110652,"nodeType":"IfStatement","src":"5485:314:234","trueBody":{"id":110633,"nodeType":"Block","src":"5520:84:234","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":110628,"name":"_proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110600,"src":"5566:6:234","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":110627,"name":"IStaticL1ChugSplashProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110470,"src":"5541:24:234","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStaticL1ChugSplashProxy_$110470_$","typeString":"type(contract IStaticL1ChugSplashProxy)"}},"id":110629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5541:32:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStaticL1ChugSplashProxy_$110470","typeString":"contract IStaticL1ChugSplashProxy"}},"id":110630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getImplementation","nodeType":"MemberAccess","referencedDeclaration":110464,"src":"5541:50:234","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":110631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5541:52:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":110604,"id":110632,"nodeType":"Return","src":"5534:59:234"}]}},"id":110653,"nodeType":"IfStatement","src":"5371:428:234","trueBody":{"id":110622,"nodeType":"Block","src":"5403:76:234","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":110617,"name":"_proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110600,"src":"5444:6:234","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":110616,"name":"IStaticERC1967Proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110458,"src":"5424:19:234","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStaticERC1967Proxy_$110458_$","typeString":"type(contract IStaticERC1967Proxy)"}},"id":110618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5424:27:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStaticERC1967Proxy_$110458","typeString":"contract IStaticERC1967Proxy"}},"id":110619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":110452,"src":"5424:42:234","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":110620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5424:44:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":110604,"id":110621,"nodeType":"Return","src":"5417:51:234"}]}}]},"documentation":{"id":110598,"nodeType":"StructuredDocumentation","src":"5032:199:234","text":"@notice Returns the implementation of the given proxy address.\n @param _proxy Address of the proxy to get the implementation of.\n @return Address of the implementation of the proxy."},"functionSelector":"204e1c7a","implemented":true,"kind":"function","modifiers":[],"name":"getProxyImplementation","nameLocation":"5245:22:234","parameters":{"id":110601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110600,"mutability":"mutable","name":"_proxy","nameLocation":"5276:6:234","nodeType":"VariableDeclaration","scope":110655,"src":"5268:14:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":110599,"name":"address","nodeType":"ElementaryTypeName","src":"5268:7:234","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5267:16:234"},"returnParameters":{"id":110604,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110603,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":110655,"src":"5307:7:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":110602,"name":"address","nodeType":"ElementaryTypeName","src":"5307:7:234","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5306:9:234"},"scope":110909,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":110710,"nodeType":"FunctionDefinition","src":"5988:519:234","nodes":[],"body":{"id":110709,"nodeType":"Block","src":"6067:440:234","nodes":[],"statements":[{"assignments":[110665],"declarations":[{"constant":false,"id":110665,"mutability":"mutable","name":"ptype","nameLocation":"6087:5:234","nodeType":"VariableDeclaration","scope":110709,"src":"6077:15:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"},"typeName":{"id":110664,"nodeType":"UserDefinedTypeName","pathNode":{"id":110663,"name":"ProxyType","nodeType":"IdentifierPath","referencedDeclaration":110477,"src":"6077:9:234"},"referencedDeclaration":110477,"src":"6077:9:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"visibility":"internal"}],"id":110669,"initialValue":{"baseExpression":{"id":110666,"name":"proxyType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110483,"src":"6095:9:234","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_enum$_ProxyType_$110477_$","typeString":"mapping(address => enum ProxyAdmin.ProxyType)"}},"id":110668,"indexExpression":{"id":110667,"name":"_proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110658,"src":"6105:6:234","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6095:17:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"nodeType":"VariableDeclarationStatement","src":"6077:35:234"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"},"id":110673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":110670,"name":"ptype","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110665,"src":"6126:5:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":110671,"name":"ProxyType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110477,"src":"6135:9:234","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProxyType_$110477_$","typeString":"type(enum ProxyAdmin.ProxyType)"}},"id":110672,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"ERC1967","nodeType":"MemberAccess","referencedDeclaration":110474,"src":"6135:17:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"src":"6126:26:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"},"id":110684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":110681,"name":"ptype","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110665,"src":"6231:5:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":110682,"name":"ProxyType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110477,"src":"6240:9:234","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProxyType_$110477_$","typeString":"type(enum ProxyAdmin.ProxyType)"}},"id":110683,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"CHUGSPLASH","nodeType":"MemberAccess","referencedDeclaration":110475,"src":"6240:20:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"src":"6231:29:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"},"id":110695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":110692,"name":"ptype","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110665,"src":"6347:5:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":110693,"name":"ProxyType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110477,"src":"6356:9:234","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProxyType_$110477_$","typeString":"type(enum ProxyAdmin.ProxyType)"}},"id":110694,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"RESOLVED","nodeType":"MemberAccess","referencedDeclaration":110476,"src":"6356:18:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"src":"6347:27:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":110705,"nodeType":"Block","src":"6436:65:234","statements":[{"expression":{"arguments":[{"hexValue":"50726f787941646d696e3a20756e6b6e6f776e2070726f78792074797065","id":110702,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6457:32:234","typeDescriptions":{"typeIdentifier":"t_stringliteral_0d595a635c8f2d148646b25cd19d12c4c97462aeb17388cbeb2bf405cffe65f2","typeString":"literal_string \"ProxyAdmin: unknown proxy type\""},"value":"ProxyAdmin: unknown proxy type"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_0d595a635c8f2d148646b25cd19d12c4c97462aeb17388cbeb2bf405cffe65f2","typeString":"literal_string \"ProxyAdmin: unknown proxy type\""}],"id":110701,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"6450:6:234","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":110703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6450:40:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":110704,"nodeType":"ExpressionStatement","src":"6450:40:234"}]},"id":110706,"nodeType":"IfStatement","src":"6343:158:234","trueBody":{"id":110700,"nodeType":"Block","src":"6376:54:234","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":110696,"name":"addressManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110492,"src":"6397:14:234","typeDescriptions":{"typeIdentifier":"t_contract$_AddressManager_$102008","typeString":"contract AddressManager"}},"id":110697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"owner","nodeType":"MemberAccess","referencedDeclaration":49363,"src":"6397:20:234","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":110698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6397:22:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":110662,"id":110699,"nodeType":"Return","src":"6390:29:234"}]}},"id":110707,"nodeType":"IfStatement","src":"6227:274:234","trueBody":{"id":110691,"nodeType":"Block","src":"6262:75:234","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":110686,"name":"_proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110658,"src":"6308:6:234","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":110685,"name":"IStaticL1ChugSplashProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110470,"src":"6283:24:234","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStaticL1ChugSplashProxy_$110470_$","typeString":"type(contract IStaticL1ChugSplashProxy)"}},"id":110687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6283:32:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStaticL1ChugSplashProxy_$110470","typeString":"contract IStaticL1ChugSplashProxy"}},"id":110688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getOwner","nodeType":"MemberAccess","referencedDeclaration":110469,"src":"6283:41:234","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":110689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6283:43:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":110662,"id":110690,"nodeType":"Return","src":"6276:50:234"}]}},"id":110708,"nodeType":"IfStatement","src":"6122:379:234","trueBody":{"id":110680,"nodeType":"Block","src":"6154:67:234","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":110675,"name":"_proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110658,"src":"6195:6:234","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":110674,"name":"IStaticERC1967Proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110458,"src":"6175:19:234","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStaticERC1967Proxy_$110458_$","typeString":"type(contract IStaticERC1967Proxy)"}},"id":110676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6175:27:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStaticERC1967Proxy_$110458","typeString":"contract IStaticERC1967Proxy"}},"id":110677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"admin","nodeType":"MemberAccess","referencedDeclaration":110457,"src":"6175:33:234","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":110678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6175:35:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":110662,"id":110679,"nodeType":"Return","src":"6168:42:234"}]}}]},"documentation":{"id":110656,"nodeType":"StructuredDocumentation","src":"5811:172:234","text":"@notice Returns the admin of the given proxy address.\n @param _proxy Address of the proxy to get the admin of.\n @return Address of the admin of the proxy."},"functionSelector":"f3b7dead","implemented":true,"kind":"function","modifiers":[],"name":"getProxyAdmin","nameLocation":"5997:13:234","parameters":{"id":110659,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110658,"mutability":"mutable","name":"_proxy","nameLocation":"6027:6:234","nodeType":"VariableDeclaration","scope":110710,"src":"6011:22:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":110657,"name":"address","nodeType":"ElementaryTypeName","src":"6011:15:234","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"src":"6010:24:234"},"returnParameters":{"id":110662,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110661,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":110710,"src":"6058:7:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":110660,"name":"address","nodeType":"ElementaryTypeName","src":"6058:7:234","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6057:9:234"},"scope":110909,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":110771,"nodeType":"FunctionDefinition","src":"6689:531:234","nodes":[],"body":{"id":110770,"nodeType":"Block","src":"6777:443:234","nodes":[],"statements":[{"assignments":[110722],"declarations":[{"constant":false,"id":110722,"mutability":"mutable","name":"ptype","nameLocation":"6797:5:234","nodeType":"VariableDeclaration","scope":110770,"src":"6787:15:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"},"typeName":{"id":110721,"nodeType":"UserDefinedTypeName","pathNode":{"id":110720,"name":"ProxyType","nodeType":"IdentifierPath","referencedDeclaration":110477,"src":"6787:9:234"},"referencedDeclaration":110477,"src":"6787:9:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"visibility":"internal"}],"id":110726,"initialValue":{"baseExpression":{"id":110723,"name":"proxyType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110483,"src":"6805:9:234","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_enum$_ProxyType_$110477_$","typeString":"mapping(address => enum ProxyAdmin.ProxyType)"}},"id":110725,"indexExpression":{"id":110724,"name":"_proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110713,"src":"6815:6:234","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6805:17:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"nodeType":"VariableDeclarationStatement","src":"6787:35:234"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"},"id":110730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":110727,"name":"ptype","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110722,"src":"6836:5:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":110728,"name":"ProxyType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110477,"src":"6845:9:234","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProxyType_$110477_$","typeString":"type(enum ProxyAdmin.ProxyType)"}},"id":110729,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"ERC1967","nodeType":"MemberAccess","referencedDeclaration":110474,"src":"6845:17:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"src":"6836:26:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"},"id":110742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":110739,"name":"ptype","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110722,"src":"6935:5:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":110740,"name":"ProxyType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110477,"src":"6944:9:234","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProxyType_$110477_$","typeString":"type(enum ProxyAdmin.ProxyType)"}},"id":110741,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"CHUGSPLASH","nodeType":"MemberAccess","referencedDeclaration":110475,"src":"6944:20:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"src":"6935:29:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"},"id":110754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":110751,"name":"ptype","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110722,"src":"7046:5:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":110752,"name":"ProxyType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110477,"src":"7055:9:234","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProxyType_$110477_$","typeString":"type(enum ProxyAdmin.ProxyType)"}},"id":110753,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"RESOLVED","nodeType":"MemberAccess","referencedDeclaration":110476,"src":"7055:18:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"src":"7046:27:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":110766,"nodeType":"Block","src":"7149:65:234","statements":[{"expression":{"arguments":[{"hexValue":"50726f787941646d696e3a20756e6b6e6f776e2070726f78792074797065","id":110763,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7170:32:234","typeDescriptions":{"typeIdentifier":"t_stringliteral_0d595a635c8f2d148646b25cd19d12c4c97462aeb17388cbeb2bf405cffe65f2","typeString":"literal_string \"ProxyAdmin: unknown proxy type\""},"value":"ProxyAdmin: unknown proxy type"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_0d595a635c8f2d148646b25cd19d12c4c97462aeb17388cbeb2bf405cffe65f2","typeString":"literal_string \"ProxyAdmin: unknown proxy type\""}],"id":110762,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"7163:6:234","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":110764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7163:40:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":110765,"nodeType":"ExpressionStatement","src":"7163:40:234"}]},"id":110767,"nodeType":"IfStatement","src":"7042:172:234","trueBody":{"id":110761,"nodeType":"Block","src":"7075:68:234","statements":[{"expression":{"arguments":[{"id":110758,"name":"_newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110715,"src":"7122:9:234","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":110755,"name":"addressManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110492,"src":"7089:14:234","typeDescriptions":{"typeIdentifier":"t_contract$_AddressManager_$102008","typeString":"contract AddressManager"}},"id":110757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferOwnership","nodeType":"MemberAccess","referencedDeclaration":49414,"src":"7089:32:234","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":110759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7089:43:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":110760,"nodeType":"ExpressionStatement","src":"7089:43:234"}]}},"id":110768,"nodeType":"IfStatement","src":"6931:283:234","trueBody":{"id":110750,"nodeType":"Block","src":"6966:70:234","statements":[{"expression":{"arguments":[{"id":110747,"name":"_newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110715,"src":"7015:9:234","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":110744,"name":"_proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110713,"src":"6998:6:234","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":110743,"name":"L1ChugSplashProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":102516,"src":"6980:17:234","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_L1ChugSplashProxy_$102516_$","typeString":"type(contract L1ChugSplashProxy)"}},"id":110745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6980:25:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_L1ChugSplashProxy_$102516","typeString":"contract L1ChugSplashProxy"}},"id":110746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setOwner","nodeType":"MemberAccess","referencedDeclaration":102391,"src":"6980:34:234","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":110748,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6980:45:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":110749,"nodeType":"ExpressionStatement","src":"6980:45:234"}]}},"id":110769,"nodeType":"IfStatement","src":"6832:382:234","trueBody":{"id":110738,"nodeType":"Block","src":"6864:61:234","statements":[{"expression":{"arguments":[{"id":110735,"name":"_newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110715,"src":"6904:9:234","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":110732,"name":"_proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110713,"src":"6884:6:234","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":110731,"name":"Proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110434,"src":"6878:5:234","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Proxy_$110434_$","typeString":"type(contract Proxy)"}},"id":110733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6878:13:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Proxy_$110434","typeString":"contract Proxy"}},"id":110734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"changeAdmin","nodeType":"MemberAccess","referencedDeclaration":110312,"src":"6878:25:234","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":110736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6878:36:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":110737,"nodeType":"ExpressionStatement","src":"6878:36:234"}]}}]},"documentation":{"id":110711,"nodeType":"StructuredDocumentation","src":"6513:171:234","text":"@notice Updates the admin of the given proxy address.\n @param _proxy Address of the proxy to update.\n @param _newAdmin Address of the new proxy admin."},"functionSelector":"7eff275e","implemented":true,"kind":"function","modifiers":[{"id":110718,"kind":"modifierInvocation","modifierName":{"id":110717,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":49354,"src":"6767:9:234"},"nodeType":"ModifierInvocation","src":"6767:9:234"}],"name":"changeProxyAdmin","nameLocation":"6698:16:234","parameters":{"id":110716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110713,"mutability":"mutable","name":"_proxy","nameLocation":"6731:6:234","nodeType":"VariableDeclaration","scope":110771,"src":"6715:22:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":110712,"name":"address","nodeType":"ElementaryTypeName","src":"6715:15:234","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":110715,"mutability":"mutable","name":"_newAdmin","nameLocation":"6747:9:234","nodeType":"VariableDeclaration","scope":110771,"src":"6739:17:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":110714,"name":"address","nodeType":"ElementaryTypeName","src":"6739:7:234","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6714:43:234"},"returnParameters":{"id":110719,"nodeType":"ParameterList","parameters":[],"src":"6777:0:234"},"scope":110909,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":110850,"nodeType":"FunctionDefinition","src":"7423:816:234","nodes":[],"body":{"id":110849,"nodeType":"Block","src":"7506:733:234","nodes":[],"statements":[{"assignments":[110783],"declarations":[{"constant":false,"id":110783,"mutability":"mutable","name":"ptype","nameLocation":"7526:5:234","nodeType":"VariableDeclaration","scope":110849,"src":"7516:15:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"},"typeName":{"id":110782,"nodeType":"UserDefinedTypeName","pathNode":{"id":110781,"name":"ProxyType","nodeType":"IdentifierPath","referencedDeclaration":110477,"src":"7516:9:234"},"referencedDeclaration":110477,"src":"7516:9:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"visibility":"internal"}],"id":110787,"initialValue":{"baseExpression":{"id":110784,"name":"proxyType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110483,"src":"7534:9:234","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_enum$_ProxyType_$110477_$","typeString":"mapping(address => enum ProxyAdmin.ProxyType)"}},"id":110786,"indexExpression":{"id":110785,"name":"_proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110774,"src":"7544:6:234","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7534:17:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"nodeType":"VariableDeclarationStatement","src":"7516:35:234"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"},"id":110791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":110788,"name":"ptype","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110783,"src":"7565:5:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":110789,"name":"ProxyType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110477,"src":"7574:9:234","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProxyType_$110477_$","typeString":"type(enum ProxyAdmin.ProxyType)"}},"id":110790,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"ERC1967","nodeType":"MemberAccess","referencedDeclaration":110474,"src":"7574:17:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"src":"7565:26:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"},"id":110803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":110800,"name":"ptype","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110783,"src":"7668:5:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":110801,"name":"ProxyType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110477,"src":"7677:9:234","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProxyType_$110477_$","typeString":"type(enum ProxyAdmin.ProxyType)"}},"id":110802,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"CHUGSPLASH","nodeType":"MemberAccess","referencedDeclaration":110475,"src":"7677:20:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"src":"7668:29:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"},"id":110826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":110823,"name":"ptype","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110783,"src":"7884:5:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":110824,"name":"ProxyType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110477,"src":"7893:9:234","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProxyType_$110477_$","typeString":"type(enum ProxyAdmin.ProxyType)"}},"id":110825,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"RESOLVED","nodeType":"MemberAccess","referencedDeclaration":110476,"src":"7893:18:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"src":"7884:27:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":110845,"nodeType":"Block","src":"8053:180:234","statements":[{"expression":{"arguments":[{"hexValue":"66616c7365","id":110842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8216:5:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":110841,"name":"assert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-3,"src":"8209:6:234","typeDescriptions":{"typeIdentifier":"t_function_assert_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":110843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8209:13:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":110844,"nodeType":"ExpressionStatement","src":"8209:13:234"}]},"id":110846,"nodeType":"IfStatement","src":"7880:353:234","trueBody":{"id":110840,"nodeType":"Block","src":"7913:134:234","statements":[{"assignments":[110828],"declarations":[{"constant":false,"id":110828,"mutability":"mutable","name":"name","nameLocation":"7941:4:234","nodeType":"VariableDeclaration","scope":110840,"src":"7927:18:234","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":110827,"name":"string","nodeType":"ElementaryTypeName","src":"7927:6:234","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":110832,"initialValue":{"baseExpression":{"id":110829,"name":"implementationName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110488,"src":"7948:18:234","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_string_storage_$","typeString":"mapping(address => string storage ref)"}},"id":110831,"indexExpression":{"id":110830,"name":"_proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110774,"src":"7967:6:234","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7948:26:234","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"VariableDeclarationStatement","src":"7927:47:234"},{"expression":{"arguments":[{"id":110836,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110828,"src":"8014:4:234","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":110837,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110776,"src":"8020:15:234","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":110833,"name":"addressManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110492,"src":"7988:14:234","typeDescriptions":{"typeIdentifier":"t_contract$_AddressManager_$102008","typeString":"contract AddressManager"}},"id":110835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setAddress","nodeType":"MemberAccess","referencedDeclaration":101976,"src":"7988:25:234","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (string memory,address) external"}},"id":110838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7988:48:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":110839,"nodeType":"ExpressionStatement","src":"7988:48:234"}]}},"id":110847,"nodeType":"IfStatement","src":"7664:569:234","trueBody":{"id":110822,"nodeType":"Block","src":"7699:175:234","statements":[{"expression":{"arguments":[{"expression":{"id":110808,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":103096,"src":"7767:9:234","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$103096_$","typeString":"type(library Constants)"}},"id":110809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PROXY_IMPLEMENTATION_ADDRESS","nodeType":"MemberAccess","referencedDeclaration":103062,"src":"7767:38:234","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"arguments":[{"arguments":[{"id":110816,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110776,"src":"7831:15:234","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":110815,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7823:7:234","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":110814,"name":"uint160","nodeType":"ElementaryTypeName","src":"7823:7:234","typeDescriptions":{}}},"id":110817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7823:24:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":110813,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7815:7:234","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":110812,"name":"uint256","nodeType":"ElementaryTypeName","src":"7815:7:234","typeDescriptions":{}}},"id":110818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7815:33:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":110811,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7807:7:234","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":110810,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7807:7:234","typeDescriptions":{}}},"id":110819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7807:42:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"arguments":[{"id":110805,"name":"_proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110774,"src":"7731:6:234","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":110804,"name":"L1ChugSplashProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":102516,"src":"7713:17:234","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_L1ChugSplashProxy_$102516_$","typeString":"type(contract L1ChugSplashProxy)"}},"id":110806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7713:25:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_L1ChugSplashProxy_$102516","typeString":"contract L1ChugSplashProxy"}},"id":110807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setStorage","nodeType":"MemberAccess","referencedDeclaration":102378,"src":"7713:36:234","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (bytes32,bytes32) external"}},"id":110820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7713:150:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":110821,"nodeType":"ExpressionStatement","src":"7713:150:234"}]}},"id":110848,"nodeType":"IfStatement","src":"7561:672:234","trueBody":{"id":110799,"nodeType":"Block","src":"7593:65:234","statements":[{"expression":{"arguments":[{"id":110796,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110776,"src":"7631:15:234","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":110793,"name":"_proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110774,"src":"7613:6:234","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":110792,"name":"Proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110434,"src":"7607:5:234","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Proxy_$110434_$","typeString":"type(contract Proxy)"}},"id":110794,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7607:13:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Proxy_$110434","typeString":"contract Proxy"}},"id":110795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"upgradeTo","nodeType":"MemberAccess","referencedDeclaration":110266,"src":"7607:23:234","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":110797,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7607:40:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":110798,"nodeType":"ExpressionStatement","src":"7607:40:234"}]}}]},"documentation":{"id":110772,"nodeType":"StructuredDocumentation","src":"7226:192:234","text":"@notice Changes a proxy's implementation contract.\n @param _proxy Address of the proxy to upgrade.\n @param _implementation Address of the new implementation address."},"functionSelector":"99a88ec4","implemented":true,"kind":"function","modifiers":[{"id":110779,"kind":"modifierInvocation","modifierName":{"id":110778,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":49354,"src":"7496:9:234"},"nodeType":"ModifierInvocation","src":"7496:9:234"}],"name":"upgrade","nameLocation":"7432:7:234","parameters":{"id":110777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110774,"mutability":"mutable","name":"_proxy","nameLocation":"7456:6:234","nodeType":"VariableDeclaration","scope":110850,"src":"7440:22:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":110773,"name":"address","nodeType":"ElementaryTypeName","src":"7440:15:234","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":110776,"mutability":"mutable","name":"_implementation","nameLocation":"7472:15:234","nodeType":"VariableDeclaration","scope":110850,"src":"7464:23:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":110775,"name":"address","nodeType":"ElementaryTypeName","src":"7464:7:234","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7439:49:234"},"returnParameters":{"id":110780,"nodeType":"ParameterList","parameters":[],"src":"7506:0:234"},"scope":110909,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":110908,"nodeType":"FunctionDefinition","src":"8644:631:234","nodes":[],"body":{"id":110907,"nodeType":"Block","src":"8822:453:234","nodes":[],"statements":[{"assignments":[110864],"declarations":[{"constant":false,"id":110864,"mutability":"mutable","name":"ptype","nameLocation":"8842:5:234","nodeType":"VariableDeclaration","scope":110907,"src":"8832:15:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"},"typeName":{"id":110863,"nodeType":"UserDefinedTypeName","pathNode":{"id":110862,"name":"ProxyType","nodeType":"IdentifierPath","referencedDeclaration":110477,"src":"8832:9:234"},"referencedDeclaration":110477,"src":"8832:9:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"visibility":"internal"}],"id":110868,"initialValue":{"baseExpression":{"id":110865,"name":"proxyType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110483,"src":"8850:9:234","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_enum$_ProxyType_$110477_$","typeString":"mapping(address => enum ProxyAdmin.ProxyType)"}},"id":110867,"indexExpression":{"id":110866,"name":"_proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110853,"src":"8860:6:234","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8850:17:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"nodeType":"VariableDeclarationStatement","src":"8832:35:234"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"},"id":110872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":110869,"name":"ptype","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110864,"src":"8881:5:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":110870,"name":"ProxyType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110477,"src":"8890:9:234","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProxyType_$110477_$","typeString":"type(enum ProxyAdmin.ProxyType)"}},"id":110871,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"ERC1967","nodeType":"MemberAccess","referencedDeclaration":110474,"src":"8890:17:234","typeDescriptions":{"typeIdentifier":"t_enum$_ProxyType_$110477","typeString":"enum ProxyAdmin.ProxyType"}},"src":"8881:26:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":110905,"nodeType":"Block","src":"9014:255:234","statements":[{"expression":{"arguments":[{"id":110886,"name":"_proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110853,"src":"9084:6:234","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":110887,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110855,"src":"9092:15:234","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"}],"id":110885,"name":"upgrade","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110850,"src":"9076:7:234","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_payable_$_t_address_$returns$__$","typeString":"function (address payable,address)"}},"id":110888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9076:32:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":110889,"nodeType":"ExpressionStatement","src":"9076:32:234"},{"assignments":[110891,null],"declarations":[{"constant":false,"id":110891,"mutability":"mutable","name":"success","nameLocation":"9128:7:234","nodeType":"VariableDeclaration","scope":110905,"src":"9123:12:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":110890,"name":"bool","nodeType":"ElementaryTypeName","src":"9123:4:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":110899,"initialValue":{"arguments":[{"id":110897,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110857,"src":"9172:5:234","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":110892,"name":"_proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110853,"src":"9140:6:234","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":110893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"call","nodeType":"MemberAccess","src":"9140:11:234","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":110896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":110894,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9160:3:234","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":110895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"9160:9:234","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"9140:31:234","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":110898,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9140:38:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"9122:56:234"},{"expression":{"arguments":[{"id":110901,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110891,"src":"9200:7:234","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"50726f787941646d696e3a2063616c6c20746f2070726f78792061667465722075706772616465206661696c6564","id":110902,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9209:48:234","typeDescriptions":{"typeIdentifier":"t_stringliteral_9dbbe4927f0b34687229d178ecf6fef1e21d5f949373ef3cb14376a90927e2f4","typeString":"literal_string \"ProxyAdmin: call to proxy after upgrade failed\""},"value":"ProxyAdmin: call to proxy after upgrade failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9dbbe4927f0b34687229d178ecf6fef1e21d5f949373ef3cb14376a90927e2f4","typeString":"literal_string \"ProxyAdmin: call to proxy after upgrade failed\""}],"id":110900,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9192:7:234","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":110903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9192:66:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":110904,"nodeType":"ExpressionStatement","src":"9192:66:234"}]},"id":110906,"nodeType":"IfStatement","src":"8877:392:234","trueBody":{"id":110884,"nodeType":"Block","src":"8909:99:234","statements":[{"expression":{"arguments":[{"id":110880,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110855,"src":"8974:15:234","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":110881,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110857,"src":"8991:5:234","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":110874,"name":"_proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110853,"src":"8929:6:234","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":110873,"name":"Proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110434,"src":"8923:5:234","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Proxy_$110434_$","typeString":"type(contract Proxy)"}},"id":110875,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8923:13:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Proxy_$110434","typeString":"contract Proxy"}},"id":110876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"upgradeToAndCall","nodeType":"MemberAccess","referencedDeclaration":110299,"src":"8923:30:234","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) payable external returns (bytes memory)"}},"id":110879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":110877,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8962:3:234","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":110878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"8962:9:234","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"8923:50:234","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$value","typeString":"function (address,bytes memory) payable external returns (bytes memory)"}},"id":110882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8923:74:234","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":110883,"nodeType":"ExpressionStatement","src":"8923:74:234"}]}}]},"documentation":{"id":110851,"nodeType":"StructuredDocumentation","src":"8245:394:234","text":"@notice Changes a proxy's implementation contract and delegatecalls the new implementation\n with some given data. Useful for atomic upgrade-and-initialize calls.\n @param _proxy Address of the proxy to upgrade.\n @param _implementation Address of the new implementation address.\n @param _data Data to trigger the new implementation with."},"functionSelector":"9623609d","implemented":true,"kind":"function","modifiers":[{"id":110860,"kind":"modifierInvocation","modifierName":{"id":110859,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":49354,"src":"8808:9:234"},"nodeType":"ModifierInvocation","src":"8808:9:234"}],"name":"upgradeAndCall","nameLocation":"8653:14:234","parameters":{"id":110858,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110853,"mutability":"mutable","name":"_proxy","nameLocation":"8693:6:234","nodeType":"VariableDeclaration","scope":110908,"src":"8677:22:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":110852,"name":"address","nodeType":"ElementaryTypeName","src":"8677:15:234","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":110855,"mutability":"mutable","name":"_implementation","nameLocation":"8717:15:234","nodeType":"VariableDeclaration","scope":110908,"src":"8709:23:234","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":110854,"name":"address","nodeType":"ElementaryTypeName","src":"8709:7:234","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":110857,"mutability":"mutable","name":"_data","nameLocation":"8755:5:234","nodeType":"VariableDeclaration","scope":110908,"src":"8742:18:234","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":110856,"name":"bytes","nodeType":"ElementaryTypeName","src":"8742:5:234","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8667:99:234"},"returnParameters":{"id":110861,"nodeType":"ParameterList","parameters":[],"src":"8822:0:234"},"scope":110909,"stateMutability":"payable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":110472,"name":"Ownable","nodeType":"IdentifierPath","referencedDeclaration":49435,"src":"1264:7:234"},"id":110473,"nodeType":"InheritanceSpecifier","src":"1264:7:234"}],"canonicalName":"ProxyAdmin","contractDependencies":[],"contractKind":"contract","documentation":{"id":110471,"nodeType":"StructuredDocumentation","src":"928:313:234","text":"@title ProxyAdmin\n @notice This is an auxiliary contract meant to be assigned as the admin of an ERC1967 Proxy,\n based on the OpenZeppelin implementation. It has backwards compatibility logic to work\n with the various types of proxies that have been deployed by Optimism in the past."},"fullyImplemented":true,"linearizedBaseContracts":[110909,49435,53291],"name":"ProxyAdmin","nameLocation":"1250:10:234","scope":110910,"usedErrors":[]}],"license":"MIT"},"id":234} \ No newline at end of file diff --git a/packages/sdk/src/forge-artifacts/WETH9.json b/packages/sdk/src/forge-artifacts/WETH9.json deleted file mode 100644 index d89e081d4a7f..000000000000 --- a/packages/sdk/src/forge-artifacts/WETH9.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"fallback","stateMutability":"payable"},{"type":"function","name":"allowance","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"guy","type":"address","internalType":"address"},{"name":"wad","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"deposit","inputs":[],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"dst","type":"address","internalType":"address"},{"name":"wad","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"src","type":"address","internalType":"address"},{"name":"dst","type":"address","internalType":"address"},{"name":"wad","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"withdraw","inputs":[{"name":"wad","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"src","type":"address","indexed":true,"internalType":"address"},{"name":"guy","type":"address","indexed":true,"internalType":"address"},{"name":"wad","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Deposit","inputs":[{"name":"dst","type":"address","indexed":true,"internalType":"address"},{"name":"wad","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"src","type":"address","indexed":true,"internalType":"address"},{"name":"dst","type":"address","indexed":true,"internalType":"address"},{"name":"wad","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Withdrawal","inputs":[{"name":"src","type":"address","indexed":true,"internalType":"address"},{"name":"wad","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false}],"bytecode":{"object":"0x60c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b50610115565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100bb57805160ff19168380011785556100e8565b828001600101855582156100e8579182015b828111156100e85782518255916020019190600101906100cd565b506100f49291506100f8565b5090565b61011291905b808211156100f457600081556001016100fe565b90565b6107f9806101246000396000f3fe6080604052600436106100bc5760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146102cb578063d0e30db0146100bc578063dd62ed3e14610311576100bc565b8063313ce5671461024b57806370a082311461027657806395d89b41146102b6576100bc565b806318160ddd116100a557806318160ddd146101aa57806323b872dd146101d15780632e1a7d4d14610221576100bc565b806306fdde03146100c6578063095ea7b314610150575b6100c4610359565b005b3480156100d257600080fd5b506100db6103a8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101155781810151838201526020016100fd565b50505050905090810190601f1680156101425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015c57600080fd5b506101966004803603604081101561017357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610454565b604080519115158252519081900360200190f35b3480156101b657600080fd5b506101bf6104c7565b60408051918252519081900360200190f35b3480156101dd57600080fd5b50610196600480360360608110156101f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356104cb565b34801561022d57600080fd5b506100c46004803603602081101561024457600080fd5b503561066b565b34801561025757600080fd5b50610260610700565b6040805160ff9092168252519081900360200190f35b34801561028257600080fd5b506101bf6004803603602081101561029957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610709565b3480156102c257600080fd5b506100db61071b565b3480156102d757600080fd5b50610196600480360360408110156102ee57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610793565b34801561031d57600080fd5b506101bf6004803603604081101561033457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166107a7565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b820191906000526020600020905b81548152906001019060200180831161042f57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156104fd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610573575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105ed5773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156105b557600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020805483900390555b73ffffffffffffffffffffffffffffffffffffffff808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561068757600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156106c6573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b60006107a03384846104cb565b9392505050565b60046020908152600092835260408084209091529082529020548156fea265627a7a72315820d9a21886186e04516cbdaa611a54950fabc4d47164691bf70de28f6c54060de964736f6c63430005110032","sourceMap":"739:40:0:-;718:1809;739:40;;718:1809;739:40;;;-1:-1:-1;;;739:40:0;;;;;;-1:-1:-1;;739:40:0;;:::i;:::-;-1:-1:-1;785:31:0;;;;;;;;;;;;;-1:-1:-1;;;785:31:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;822:27:0;;;-1:-1:-1;;822:27:0;847:2;822:27;;;718:1809;5:2:-1;;;;30:1;27;20:12;5:2;718:1809:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;718:1809:0;;;-1:-1:-1;718:1809:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106100bc5760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146102cb578063d0e30db0146100bc578063dd62ed3e14610311576100bc565b8063313ce5671461024b57806370a082311461027657806395d89b41146102b6576100bc565b806318160ddd116100a557806318160ddd146101aa57806323b872dd146101d15780632e1a7d4d14610221576100bc565b806306fdde03146100c6578063095ea7b314610150575b6100c4610359565b005b3480156100d257600080fd5b506100db6103a8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101155781810151838201526020016100fd565b50505050905090810190601f1680156101425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015c57600080fd5b506101966004803603604081101561017357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610454565b604080519115158252519081900360200190f35b3480156101b657600080fd5b506101bf6104c7565b60408051918252519081900360200190f35b3480156101dd57600080fd5b50610196600480360360608110156101f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356104cb565b34801561022d57600080fd5b506100c46004803603602081101561024457600080fd5b503561066b565b34801561025757600080fd5b50610260610700565b6040805160ff9092168252519081900360200190f35b34801561028257600080fd5b506101bf6004803603602081101561029957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610709565b3480156102c257600080fd5b506100db61071b565b3480156102d757600080fd5b50610196600480360360408110156102ee57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610793565b34801561031d57600080fd5b506101bf6004803603604081101561033457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166107a7565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b820191906000526020600020905b81548152906001019060200180831161042f57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156104fd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610573575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105ed5773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156105b557600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020805483900390555b73ffffffffffffffffffffffffffffffffffffffff808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561068757600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156106c6573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b60006107a03384846104cb565b9392505050565b60046020908152600092835260408084209091529082529020548156fea265627a7a72315820d9a21886186e04516cbdaa611a54950fabc4d47164691bf70de28f6c54060de964736f6c63430005110032","sourceMap":"718:1809:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1289:9;:7;:9::i;:::-;718:1809;739:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;739:40:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;739:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1755:177;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1755:177:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1755:177:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1654:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1654:95:0;;;:::i;:::-;;;;;;;;;;;;;;;;2065:460;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2065:460:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2065:460:0;;;;;;;;;;;;;;;;;;:::i;1445:203::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1445:203:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1445:203:0;;:::i;822:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;822:27:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1108:65;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1108:65:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1108:65:0;;;;:::i;785:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;785:31:0;;;:::i;1938:121::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1938:121:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1938:121:0;;;;;;;;;:::i;1179:65::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1179:65:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1179:65:0;;;;;;;;;;;:::i;1310:130::-;1364:10;1354:21;;;;:9;:21;;;;;;;;;:34;;1379:9;1354:34;;;;;;1403:30;;;;;;;;;;;;;;;;;1310:130::o;739:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1755:177::-;1837:10;1811:4;1827:21;;;:9;:21;;;;;;;;;:26;;;;;;;;;;;:32;;;1874:30;;;;;;;1811:4;;1827:26;;1837:10;;1874:30;;;;;;;;-1:-1:-1;1921:4:0;1755:177;;;;:::o;1654:95::-;1721:21;1654:95;:::o;2065:460::-;2183:14;;;2155:4;2183:14;;;:9;:14;;;;;;:21;-1:-1:-1;2183:21:0;2175:30;;;;;;2220:17;;;2227:10;2220:17;;;;:59;;-1:-1:-1;2241:14:0;;;;;;;:9;:14;;;;;;;;2256:10;2241:26;;;;;;;;2276:2;2241:38;;2220:59;2216:179;;;2303:14;;;;;;;:9;:14;;;;;;;;2318:10;2303:26;;;;;;;;:33;-1:-1:-1;2303:33:0;2295:42;;;;;;2351:14;;;;;;;:9;:14;;;;;;;;2366:10;2351:26;;;;;;;:33;;;;;;;2216:179;2405:14;;;;;;;;:9;:14;;;;;;;;:21;;;;;;;2436:14;;;;;;;;;;:21;;;;;;2473:23;;;;;;;2436:14;;2473:23;;;;;;;;;;;-1:-1:-1;2514:4:0;2065:460;;;;;:::o;1445:203::-;1508:10;1498:21;;;;:9;:21;;;;;;:28;-1:-1:-1;1498:28:0;1490:37;;;;;;1547:10;1537:21;;;;:9;:21;;;;;;:28;;;;;;;1575:24;;;;;;1562:3;;1575:24;;1537:21;1575:24;1562:3;1547:10;1575:24;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;1614:27:0;;;;;;;;1625:10;;1614:27;;;;;;;;;;1445:203;:::o;822:27::-;;;;;;:::o;1108:65::-;;;;;;;;;;;;;:::o;785:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1938:121;1995:4;2018:34;2031:10;2043:3;2048;2018:12;:34::i;:::-;2011:41;1938:121;-1:-1:-1;;;1938:121:0:o;1179:65::-;;;;;;;;;;;;;;;;;;;;;;;;:::o","linkReferences":{}},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","deposit()":"d0e30db0","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256)":"2e1a7d4d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.5.17+commit.d19bba13\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"src/vendor/WETH9.sol\":\"WETH9\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"src/vendor/WETH9.sol\":{\"keccak256\":\"0x5cf72b1d2b0f0a758d5540c663352aa757c80a975c2e2d9b22cc6bc9f1ada1a1\",\"urls\":[\"bzz-raw://aba380794ab2878afe942d0c093cb41820afa854182668af91bffa3f26492244\",\"dweb:/ipfs/QmTW9EWupsNX3DgoJc13uu2V3P4UPRErvaVCPmLyCbDnM1\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.5.17+commit.d19bba13"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"src","type":"address","indexed":true},{"internalType":"address","name":"guy","type":"address","indexed":true},{"internalType":"uint256","name":"wad","type":"uint256","indexed":false}],"type":"event","name":"Approval","anonymous":false},{"inputs":[{"internalType":"address","name":"dst","type":"address","indexed":true},{"internalType":"uint256","name":"wad","type":"uint256","indexed":false}],"type":"event","name":"Deposit","anonymous":false},{"inputs":[{"internalType":"address","name":"src","type":"address","indexed":true},{"internalType":"address","name":"dst","type":"address","indexed":true},{"internalType":"uint256","name":"wad","type":"uint256","indexed":false}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[{"internalType":"address","name":"src","type":"address","indexed":true},{"internalType":"uint256","name":"wad","type":"uint256","indexed":false}],"type":"event","name":"Withdrawal","anonymous":false},{"inputs":[],"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"guy","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"payable","type":"function","name":"deposit"},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"withdraw"}],"devdoc":{"methods":{}},"userdoc":{"methods":{}}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","ds-test/=lib/forge-std/lib/ds-test/src/","forge-std/=lib/forge-std/src/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"compilationTarget":{"src/vendor/WETH9.sol":"WETH9"},"evmVersion":"istanbul","libraries":{}},"sources":{"src/vendor/WETH9.sol":{"keccak256":"0x5cf72b1d2b0f0a758d5540c663352aa757c80a975c2e2d9b22cc6bc9f1ada1a1","urls":["bzz-raw://aba380794ab2878afe942d0c093cb41820afa854182668af91bffa3f26492244","dweb:/ipfs/QmTW9EWupsNX3DgoJc13uu2V3P4UPRErvaVCPmLyCbDnM1"],"license":null}},"version":1},"storageLayout":{"storage":[{"astId":4,"contract":"src/vendor/WETH9.sol:WETH9","label":"name","offset":0,"slot":"0","type":"t_string_storage"},{"astId":7,"contract":"src/vendor/WETH9.sol:WETH9","label":"symbol","offset":0,"slot":"1","type":"t_string_storage"},{"astId":10,"contract":"src/vendor/WETH9.sol:WETH9","label":"decimals","offset":0,"slot":"2","type":"t_uint8"},{"astId":42,"contract":"src/vendor/WETH9.sol:WETH9","label":"balanceOf","offset":0,"slot":"3","type":"t_mapping(t_address,t_uint256)"},{"astId":48,"contract":"src/vendor/WETH9.sol:WETH9","label":"allowance","offset":0,"slot":"4","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{},"devdoc":{},"ast":{"absolutePath":"src/vendor/WETH9.sol","id":246,"exportedSymbols":{"WETH9":[245]},"nodeType":"SourceUnit","src":"686:36998:0","nodes":[{"id":1,"nodeType":"PragmaDirective","src":"686:30:0","nodes":[],"literals":["solidity",">=","0.4",".22","<","0.6"]},{"id":245,"nodeType":"ContractDefinition","src":"718:1809:0","nodes":[{"id":4,"nodeType":"VariableDeclaration","src":"739:40:0","nodes":[],"constant":false,"name":"name","scope":245,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":2,"name":"string","nodeType":"ElementaryTypeName","src":"739:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"argumentTypes":null,"hexValue":"57726170706564204574686572","id":3,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"764:15:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_00cd3d46df44f2cbb950cf84eb2e92aa2ddd23195b1a009173ea59a063357ed3","typeString":"literal_string \"Wrapped Ether\""},"value":"Wrapped Ether"},"visibility":"public"},{"id":7,"nodeType":"VariableDeclaration","src":"785:31:0","nodes":[],"constant":false,"name":"symbol","scope":245,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":5,"name":"string","nodeType":"ElementaryTypeName","src":"785:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"argumentTypes":null,"hexValue":"57455448","id":6,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"810:6:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_0f8a193ff464434486c0daf7db2a895884365d2bc84ba47a68fcf89c1b14b5b8","typeString":"literal_string \"WETH\""},"value":"WETH"},"visibility":"public"},{"id":10,"nodeType":"VariableDeclaration","src":"822:27:0","nodes":[],"constant":false,"name":"decimals","scope":245,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":8,"name":"uint8","nodeType":"ElementaryTypeName","src":"822:5:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"argumentTypes":null,"hexValue":"3138","id":9,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"847:2:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"visibility":"public"},{"id":18,"nodeType":"EventDefinition","src":"856:68:0","nodes":[],"anonymous":false,"documentation":null,"name":"Approval","parameters":{"id":17,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12,"indexed":true,"name":"src","nodeType":"VariableDeclaration","scope":18,"src":"872:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11,"name":"address","nodeType":"ElementaryTypeName","src":"872:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":14,"indexed":true,"name":"guy","nodeType":"VariableDeclaration","scope":18,"src":"893:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13,"name":"address","nodeType":"ElementaryTypeName","src":"893:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":16,"indexed":false,"name":"wad","nodeType":"VariableDeclaration","scope":18,"src":"914:8:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15,"name":"uint","nodeType":"ElementaryTypeName","src":"914:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"871:52:0"}},{"id":26,"nodeType":"EventDefinition","src":"929:68:0","nodes":[],"anonymous":false,"documentation":null,"name":"Transfer","parameters":{"id":25,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20,"indexed":true,"name":"src","nodeType":"VariableDeclaration","scope":26,"src":"945:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19,"name":"address","nodeType":"ElementaryTypeName","src":"945:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":22,"indexed":true,"name":"dst","nodeType":"VariableDeclaration","scope":26,"src":"966:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21,"name":"address","nodeType":"ElementaryTypeName","src":"966:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":24,"indexed":false,"name":"wad","nodeType":"VariableDeclaration","scope":26,"src":"987:8:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23,"name":"uint","nodeType":"ElementaryTypeName","src":"987:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"944:52:0"}},{"id":32,"nodeType":"EventDefinition","src":"1002:46:0","nodes":[],"anonymous":false,"documentation":null,"name":"Deposit","parameters":{"id":31,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28,"indexed":true,"name":"dst","nodeType":"VariableDeclaration","scope":32,"src":"1017:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27,"name":"address","nodeType":"ElementaryTypeName","src":"1017:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":30,"indexed":false,"name":"wad","nodeType":"VariableDeclaration","scope":32,"src":"1038:8:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29,"name":"uint","nodeType":"ElementaryTypeName","src":"1038:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1016:31:0"}},{"id":38,"nodeType":"EventDefinition","src":"1053:49:0","nodes":[],"anonymous":false,"documentation":null,"name":"Withdrawal","parameters":{"id":37,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34,"indexed":true,"name":"src","nodeType":"VariableDeclaration","scope":38,"src":"1071:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33,"name":"address","nodeType":"ElementaryTypeName","src":"1071:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":36,"indexed":false,"name":"wad","nodeType":"VariableDeclaration","scope":38,"src":"1092:8:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35,"name":"uint","nodeType":"ElementaryTypeName","src":"1092:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1070:31:0"}},{"id":42,"nodeType":"VariableDeclaration","src":"1108:65:0","nodes":[],"constant":false,"name":"balanceOf","scope":245,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":41,"keyType":{"id":39,"name":"address","nodeType":"ElementaryTypeName","src":"1117:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1108:25:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":40,"name":"uint","nodeType":"ElementaryTypeName","src":"1128:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"value":null,"visibility":"public"},{"id":48,"nodeType":"VariableDeclaration","src":"1179:65:0","nodes":[],"constant":false,"name":"allowance","scope":245,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":47,"keyType":{"id":43,"name":"address","nodeType":"ElementaryTypeName","src":"1188:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1179:46:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueType":{"id":46,"keyType":{"id":44,"name":"address","nodeType":"ElementaryTypeName","src":"1208:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1199:25:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":45,"name":"uint","nodeType":"ElementaryTypeName","src":"1219:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"value":null,"visibility":"public"},{"id":55,"nodeType":"FunctionDefinition","src":"1251:54:0","nodes":[],"body":{"id":54,"nodeType":"Block","src":"1279:26:0","nodes":[],"statements":[{"expression":{"argumentTypes":null,"arguments":[],"expression":{"argumentTypes":[],"id":51,"name":"deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74,"src":"1289:7:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":52,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1289:9:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":53,"nodeType":"ExpressionStatement","src":"1289:9:0"}]},"documentation":null,"implemented":true,"kind":"fallback","modifiers":[],"name":"","parameters":{"id":49,"nodeType":"ParameterList","parameters":[],"src":"1259:2:0"},"returnParameters":{"id":50,"nodeType":"ParameterList","parameters":[],"src":"1279:0:0"},"scope":245,"stateMutability":"payable","superFunction":null,"visibility":"external"},{"id":74,"nodeType":"FunctionDefinition","src":"1310:130:0","nodes":[],"body":{"id":73,"nodeType":"Block","src":"1344:96:0","nodes":[],"statements":[{"expression":{"argumentTypes":null,"id":64,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":58,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42,"src":"1354:9:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":59,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":260,"src":"1364:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"1364:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1354:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":62,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":260,"src":"1379:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","referencedDeclaration":null,"src":"1379:9:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1354:34:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":65,"nodeType":"ExpressionStatement","src":"1354:34:0"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":67,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":260,"src":"1411:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":68,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"1411:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"argumentTypes":null,"expression":{"argumentTypes":null,"id":69,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":260,"src":"1423:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":70,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","referencedDeclaration":null,"src":"1423:9:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":66,"name":"Deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32,"src":"1403:7:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":71,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1403:30:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":72,"nodeType":"EmitStatement","src":"1398:35:0"}]},"documentation":null,"implemented":true,"kind":"function","modifiers":[],"name":"deposit","parameters":{"id":56,"nodeType":"ParameterList","parameters":[],"src":"1326:2:0"},"returnParameters":{"id":57,"nodeType":"ParameterList","parameters":[],"src":"1344:0:0"},"scope":245,"stateMutability":"payable","superFunction":null,"visibility":"public"},{"id":110,"nodeType":"FunctionDefinition","src":"1445:203:0","nodes":[],"body":{"id":109,"nodeType":"Block","src":"1480:168:0","nodes":[],"statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":85,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":80,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42,"src":"1498:9:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":83,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":81,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":260,"src":"1508:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":82,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"1508:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1498:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"argumentTypes":null,"id":84,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76,"src":"1523:3:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1498:28:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":79,"name":"require","nodeType":"Identifier","overloadedDeclarations":[263,264],"referencedDeclaration":263,"src":"1490:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":86,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1490:37:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":87,"nodeType":"ExpressionStatement","src":"1490:37:0"},{"expression":{"argumentTypes":null,"id":93,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":88,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42,"src":"1537:9:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":91,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":89,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":260,"src":"1547:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":90,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"1547:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1537:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"argumentTypes":null,"id":92,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76,"src":"1562:3:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1537:28:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":94,"nodeType":"ExpressionStatement","src":"1537:28:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":100,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76,"src":"1595:3:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":95,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":260,"src":"1575:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":98,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"1575:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":99,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":null,"src":"1575:19:0","typeDescriptions":{"typeIdentifier":"t_function_transfer_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1575:24:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":102,"nodeType":"ExpressionStatement","src":"1575:24:0"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":104,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":260,"src":"1625:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"1625:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"argumentTypes":null,"id":106,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76,"src":"1637:3:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":103,"name":"Withdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38,"src":"1614:10:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1614:27:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":108,"nodeType":"EmitStatement","src":"1609:32:0"}]},"documentation":null,"implemented":true,"kind":"function","modifiers":[],"name":"withdraw","parameters":{"id":77,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76,"name":"wad","nodeType":"VariableDeclaration","scope":110,"src":"1463:8:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75,"name":"uint","nodeType":"ElementaryTypeName","src":"1463:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1462:10:0"},"returnParameters":{"id":78,"nodeType":"ParameterList","parameters":[],"src":"1480:0:0"},"scope":245,"stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"id":121,"nodeType":"FunctionDefinition","src":"1654:95:0","nodes":[],"body":{"id":120,"nodeType":"Block","src":"1704:45:0","nodes":[],"statements":[{"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":116,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":274,"src":"1729:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_WETH9_$245","typeString":"contract WETH9"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_WETH9_$245","typeString":"contract WETH9"}],"id":115,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1721:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1721:13:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":null,"src":"1721:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":114,"id":119,"nodeType":"Return","src":"1714:28:0"}]},"documentation":null,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","parameters":{"id":111,"nodeType":"ParameterList","parameters":[],"src":"1674:2:0"},"returnParameters":{"id":114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":113,"name":"","nodeType":"VariableDeclaration","scope":121,"src":"1698:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":112,"name":"uint","nodeType":"ElementaryTypeName","src":"1698:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1697:6:0"},"scope":245,"stateMutability":"view","superFunction":null,"visibility":"public"},{"id":149,"nodeType":"FunctionDefinition","src":"1755:177:0","nodes":[],"body":{"id":148,"nodeType":"Block","src":"1817:115:0","nodes":[],"statements":[{"expression":{"argumentTypes":null,"id":137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":130,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48,"src":"1827:9:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":134,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":131,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":260,"src":"1837:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"1837:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1827:21:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":135,"indexExpression":{"argumentTypes":null,"id":133,"name":"guy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":123,"src":"1849:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1827:26:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":136,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":125,"src":"1856:3:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1827:32:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":138,"nodeType":"ExpressionStatement","src":"1827:32:0"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":140,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":260,"src":"1883:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"1883:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"argumentTypes":null,"id":142,"name":"guy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":123,"src":"1895:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":143,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":125,"src":"1900:3:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":139,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18,"src":"1874:8:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1874:30:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":145,"nodeType":"EmitStatement","src":"1869:35:0"},{"expression":{"argumentTypes":null,"hexValue":"74727565","id":146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1921:4:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":129,"id":147,"nodeType":"Return","src":"1914:11:0"}]},"documentation":null,"implemented":true,"kind":"function","modifiers":[],"name":"approve","parameters":{"id":126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":123,"name":"guy","nodeType":"VariableDeclaration","scope":149,"src":"1772:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":122,"name":"address","nodeType":"ElementaryTypeName","src":"1772:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":125,"name":"wad","nodeType":"VariableDeclaration","scope":149,"src":"1785:8:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":124,"name":"uint","nodeType":"ElementaryTypeName","src":"1785:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1771:23:0"},"returnParameters":{"id":129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":128,"name":"","nodeType":"VariableDeclaration","scope":149,"src":"1811:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":127,"name":"bool","nodeType":"ElementaryTypeName","src":"1811:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"1810:6:0"},"scope":245,"stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"id":166,"nodeType":"FunctionDefinition","src":"1938:121:0","nodes":[],"body":{"id":165,"nodeType":"Block","src":"2001:58:0","nodes":[],"statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":159,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":260,"src":"2031:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"2031:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"argumentTypes":null,"id":161,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":151,"src":"2043:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":162,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":153,"src":"2048:3:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":158,"name":"transferFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":244,"src":"2018:12:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) returns (bool)"}},"id":163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2018:34:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":157,"id":164,"nodeType":"Return","src":"2011:41:0"}]},"documentation":null,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","parameters":{"id":154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":151,"name":"dst","nodeType":"VariableDeclaration","scope":166,"src":"1956:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":150,"name":"address","nodeType":"ElementaryTypeName","src":"1956:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":153,"name":"wad","nodeType":"VariableDeclaration","scope":166,"src":"1969:8:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":152,"name":"uint","nodeType":"ElementaryTypeName","src":"1969:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1955:23:0"},"returnParameters":{"id":157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":156,"name":"","nodeType":"VariableDeclaration","scope":166,"src":"1995:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":155,"name":"bool","nodeType":"ElementaryTypeName","src":"1995:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"1994:6:0"},"scope":245,"stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"id":244,"nodeType":"FunctionDefinition","src":"2065:460:0","nodes":[],"body":{"id":243,"nodeType":"Block","src":"2165:360:0","nodes":[],"statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":178,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42,"src":"2183:9:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":180,"indexExpression":{"argumentTypes":null,"id":179,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":168,"src":"2193:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2183:14:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"argumentTypes":null,"id":181,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":172,"src":"2201:3:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2183:21:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":177,"name":"require","nodeType":"Identifier","overloadedDeclarations":[263,264],"referencedDeclaration":263,"src":"2175:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2175:30:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":184,"nodeType":"ExpressionStatement","src":"2175:30:0"},{"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":185,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":168,"src":"2220:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":186,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":260,"src":"2227:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"2227:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"2220:17:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":189,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48,"src":"2241:9:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":191,"indexExpression":{"argumentTypes":null,"id":190,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":168,"src":"2251:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2241:14:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":194,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":192,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":260,"src":"2256:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"2256:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2241:26:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":197,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"2276:2:0","subExpression":{"argumentTypes":null,"hexValue":"31","id":196,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2277:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_rational_minus_1_by_1","typeString":"int_const -1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_minus_1_by_1","typeString":"int_const -1"}],"id":195,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2271:4:0","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":"uint"},"id":198,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2271:8:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2241:38:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2220:59:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":null,"id":222,"nodeType":"IfStatement","src":"2216:179:0","trueBody":{"id":221,"nodeType":"Block","src":"2281:114:0","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":202,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48,"src":"2303:9:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":204,"indexExpression":{"argumentTypes":null,"id":203,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":168,"src":"2313:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2303:14:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":207,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":205,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":260,"src":"2318:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"2318:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2303:26:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"argumentTypes":null,"id":208,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":172,"src":"2333:3:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2303:33:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":201,"name":"require","nodeType":"Identifier","overloadedDeclarations":[263,264],"referencedDeclaration":263,"src":"2295:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2295:42:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":211,"nodeType":"ExpressionStatement","src":"2295:42:0"},{"expression":{"argumentTypes":null,"id":219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":212,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48,"src":"2351:9:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":216,"indexExpression":{"argumentTypes":null,"id":213,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":168,"src":"2361:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2351:14:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":217,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":214,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":260,"src":"2366:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"2366:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2351:26:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"argumentTypes":null,"id":218,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":172,"src":"2381:3:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2351:33:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":220,"nodeType":"ExpressionStatement","src":"2351:33:0"}]}},{"expression":{"argumentTypes":null,"id":227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":223,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42,"src":"2405:9:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":225,"indexExpression":{"argumentTypes":null,"id":224,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":168,"src":"2415:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2405:14:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"argumentTypes":null,"id":226,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":172,"src":"2423:3:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2405:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":228,"nodeType":"ExpressionStatement","src":"2405:21:0"},{"expression":{"argumentTypes":null,"id":233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":229,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42,"src":"2436:9:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":231,"indexExpression":{"argumentTypes":null,"id":230,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":170,"src":"2446:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2436:14:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"argumentTypes":null,"id":232,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":172,"src":"2454:3:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2436:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":234,"nodeType":"ExpressionStatement","src":"2436:21:0"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":236,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":168,"src":"2482:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":237,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":170,"src":"2487:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":238,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":172,"src":"2492:3:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":235,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26,"src":"2473:8:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2473:23:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":240,"nodeType":"EmitStatement","src":"2468:28:0"},{"expression":{"argumentTypes":null,"hexValue":"74727565","id":241,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2514:4:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":176,"id":242,"nodeType":"Return","src":"2507:11:0"}]},"documentation":null,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","parameters":{"id":173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":168,"name":"src","nodeType":"VariableDeclaration","scope":244,"src":"2087:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":167,"name":"address","nodeType":"ElementaryTypeName","src":"2087:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":170,"name":"dst","nodeType":"VariableDeclaration","scope":244,"src":"2100:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":169,"name":"address","nodeType":"ElementaryTypeName","src":"2100:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":172,"name":"wad","nodeType":"VariableDeclaration","scope":244,"src":"2113:8:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":171,"name":"uint","nodeType":"ElementaryTypeName","src":"2113:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"2086:36:0"},"returnParameters":{"id":176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":175,"name":"","nodeType":"VariableDeclaration","scope":244,"src":"2155:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":174,"name":"bool","nodeType":"ElementaryTypeName","src":"2155:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"2154:6:0"},"scope":245,"stateMutability":"nonpayable","superFunction":null,"visibility":"public"}],"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":null,"fullyImplemented":true,"linearizedBaseContracts":[245],"name":"WETH9","scope":246}]},"id":0} \ No newline at end of file diff --git a/packages/sdk/src/index.ts b/packages/sdk/src/index.ts deleted file mode 100644 index aeceec8a2264..000000000000 --- a/packages/sdk/src/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './interfaces' -export * from './utils' -export * from './cross-chain-messenger' -export * from './adapters' -export * from './l2-provider' diff --git a/packages/sdk/src/interfaces/bridge-adapter.ts b/packages/sdk/src/interfaces/bridge-adapter.ts deleted file mode 100644 index 957119889285..000000000000 --- a/packages/sdk/src/interfaces/bridge-adapter.ts +++ /dev/null @@ -1,308 +0,0 @@ -import { - Contract, - Overrides, - Signer, - BigNumber, - CallOverrides, - PayableOverrides, -} from 'ethers' -import { - TransactionRequest, - TransactionResponse, - BlockTag, -} from '@ethersproject/abstract-provider' - -import { NumberLike, AddressLike, TokenBridgeMessage } from './types' -import { CrossChainMessenger } from '../cross-chain-messenger' - -/** - * Represents an adapter for an L1<>L2 token bridge. Each custom bridge currently needs its own - * adapter because the bridge interface is not standardized. This may change in the future. - */ -export interface IBridgeAdapter { - /** - * Provider used to make queries related to cross-chain interactions. - */ - messenger: CrossChainMessenger - - /** - * L1 bridge contract. - */ - l1Bridge: Contract - - /** - * L2 bridge contract. - */ - l2Bridge: Contract - - /** - * Gets all deposits for a given address. - * - * @param address Address to search for messages from. - * @param opts Options object. - * @param opts.fromBlock Block to start searching for messages from. If not provided, will start - * from the first block (block #0). - * @param opts.toBlock Block to stop searching for messages at. If not provided, will stop at the - * latest known block ("latest"). - * @returns All deposit token bridge messages sent by the given address. - */ - getDepositsByAddress( - address: AddressLike, - opts?: { - fromBlock?: BlockTag - toBlock?: BlockTag - } - ): Promise - - /** - * Gets all withdrawals for a given address. - * - * @param address Address to search for messages from. - * @param opts Options object. - * @param opts.fromBlock Block to start searching for messages from. If not provided, will start - * from the first block (block #0). - * @param opts.toBlock Block to stop searching for messages at. If not provided, will stop at the - * latest known block ("latest"). - * @returns All withdrawal token bridge messages sent by the given address. - */ - getWithdrawalsByAddress( - address: AddressLike, - opts?: { - fromBlock?: BlockTag - toBlock?: BlockTag - } - ): Promise - - /** - * Checks whether the given token pair is supported by the bridge. - * - * @param l1Token The L1 token address. - * @param l2Token The L2 token address. - * @returns Whether the given token pair is supported by the bridge. - */ - supportsTokenPair( - l1Token: AddressLike, - l2Token: AddressLike - ): Promise - - /** - * Queries the account's approval amount for a given L1 token. - * - * @param l1Token The L1 token address. - * @param l2Token The L2 token address. - * @param signer Signer to query the approval for. - * @returns Amount of tokens approved for deposits from the account. - */ - approval( - l1Token: AddressLike, - l2Token: AddressLike, - signer: Signer - ): Promise - - /** - * Approves a deposit into the L2 chain. - * - * @param l1Token The L1 token address. - * @param l2Token The L2 token address. - * @param amount Amount of the token to approve. - * @param signer Signer used to sign and send the transaction. - * @param opts Additional options. - * @param opts.overrides Optional transaction overrides. - * @returns Transaction response for the approval transaction. - */ - approve( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - signer: Signer, - opts?: { - overrides?: Overrides - } - ): Promise - - /** - * Deposits some tokens into the L2 chain. - * - * @param l1Token The L1 token address. - * @param l2Token The L2 token address. - * @param amount Amount of the token to deposit. - * @param signer Signer used to sign and send the transaction. - * @param opts Additional options. - * @param opts.recipient Optional address to receive the funds on L2. Defaults to sender. - * @param opts.l2GasLimit Optional gas limit to use for the transaction on L2. - * @param opts.overrides Optional transaction overrides. - * @returns Transaction response for the deposit transaction. - */ - deposit( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - signer: Signer, - opts?: { - recipient?: AddressLike - l2GasLimit?: NumberLike - overrides?: Overrides - } - ): Promise - - /** - * Withdraws some tokens back to the L1 chain. - * - * @param l1Token The L1 token address. - * @param l2Token The L2 token address. - * @param amount Amount of the token to withdraw. - * @param signer Signer used to sign and send the transaction. - * @param opts Additional options. - * @param opts.recipient Optional address to receive the funds on L1. Defaults to sender. - * @param opts.overrides Optional transaction overrides. - * @returns Transaction response for the withdraw transaction. - */ - withdraw( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - signer: Signer, - opts?: { - recipient?: AddressLike - overrides?: Overrides - } - ): Promise - - /** - * Object that holds the functions that generate transactions to be signed by the user. - * Follows the pattern used by ethers.js. - */ - populateTransaction: { - /** - * Generates a transaction for approving some tokens to deposit into the L2 chain. - * - * @param l1Token The L1 token address. - * @param l2Token The L2 token address. - * @param amount Amount of the token to approve. - * @param opts Additional options. - * @param opts.overrides Optional transaction overrides. - * @returns Transaction that can be signed and executed to deposit the tokens. - */ - approve( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - overrides?: Overrides - } - ): Promise - - /** - * Generates a transaction for depositing some tokens into the L2 chain. - * - * @param l1Token The L1 token address. - * @param l2Token The L2 token address. - * @param amount Amount of the token to deposit. - * @param opts Additional options. - * @param opts.recipient Optional address to receive the funds on L2. Defaults to sender. - * @param opts.l2GasLimit Optional gas limit to use for the transaction on L2. - * @param opts.overrides Optional transaction overrides. - * @returns Transaction that can be signed and executed to deposit the tokens. - */ - deposit( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - recipient?: AddressLike - l2GasLimit?: NumberLike - overrides?: PayableOverrides - } - ): Promise - - /** - * Generates a transaction for withdrawing some tokens back to the L1 chain. - * - * @param l1Token The L1 token address. - * @param l2Token The L2 token address. - * @param amount Amount of the token to withdraw. - * @param opts Additional options. - * @param opts.recipient Optional address to receive the funds on L1. Defaults to sender. - * @param opts.overrides Optional transaction overrides. - * @returns Transaction that can be signed and executed to withdraw the tokens. - */ - withdraw( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - recipient?: AddressLike - overrides?: Overrides - } - ): Promise - } - - /** - * Object that holds the functions that estimates the gas required for a given transaction. - * Follows the pattern used by ethers.js. - */ - estimateGas: { - /** - * Estimates gas required to approve some tokens to deposit into the L2 chain. - * - * @param l1Token The L1 token address. - * @param l2Token The L2 token address. - * @param amount Amount of the token to approve. - * @param opts Additional options. - * @param opts.overrides Optional transaction overrides. - * @returns Gas estimate for the transaction. - */ - approve( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - overrides?: CallOverrides - } - ): Promise - - /** - * Estimates gas required to deposit some tokens into the L2 chain. - * - * @param l1Token The L1 token address. - * @param l2Token The L2 token address. - * @param amount Amount of the token to deposit. - * @param opts Additional options. - * @param opts.recipient Optional address to receive the funds on L2. Defaults to sender. - * @param opts.l2GasLimit Optional gas limit to use for the transaction on L2. - * @param opts.overrides Optional transaction overrides. - * @returns Gas estimate for the transaction. - */ - deposit( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - recipient?: AddressLike - l2GasLimit?: NumberLike - overrides?: CallOverrides - } - ): Promise - - /** - * Estimates gas required to withdraw some tokens back to the L1 chain. - * - * @param l1Token The L1 token address. - * @param l2Token The L2 token address. - * @param amount Amount of the token to withdraw. - * @param opts Additional options. - * @param opts.recipient Optional address to receive the funds on L1. Defaults to sender. - * @param opts.overrides Optional transaction overrides. - * @returns Gas estimate for the transaction. - */ - withdraw( - l1Token: AddressLike, - l2Token: AddressLike, - amount: NumberLike, - opts?: { - recipient?: AddressLike - overrides?: CallOverrides - } - ): Promise - } -} diff --git a/packages/sdk/src/interfaces/index.ts b/packages/sdk/src/interfaces/index.ts deleted file mode 100644 index 7f1672e2693a..000000000000 --- a/packages/sdk/src/interfaces/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './bridge-adapter' -export * from './l2-provider' -export * from './types' diff --git a/packages/sdk/src/interfaces/l2-provider.ts b/packages/sdk/src/interfaces/l2-provider.ts deleted file mode 100644 index bd988705ec69..000000000000 --- a/packages/sdk/src/interfaces/l2-provider.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { - Provider, - TransactionRequest, - TransactionResponse, - Block, - BlockWithTransactions, -} from '@ethersproject/abstract-provider' -import { BigNumber } from 'ethers' - -/** - * JSON transaction representation when returned by L2Geth nodes. This is simply an extension to - * the standard transaction response type. You do NOT need to use this type unless you care about - * having typed access to L2-specific fields. - */ -export interface L2Transaction extends TransactionResponse { - l1BlockNumber: number - l1TxOrigin: string - queueOrigin: string - rawTransaction: string -} - -/** - * JSON block representation when returned by L2Geth nodes. Just a normal block but with - * an added stateRoot field. - */ -export interface L2Block extends Block { - stateRoot: string -} - -/** - * JSON block representation when returned by L2Geth nodes. Just a normal block but with - * L2Transaction objects instead of the standard transaction response object. - */ -export interface L2BlockWithTransactions extends BlockWithTransactions { - stateRoot: string - transactions: [L2Transaction] -} - -/** - * Represents an extended version of an normal ethers Provider that returns additional L2 info and - * has special functions for L2-specific interactions. - */ -export type L2Provider = TProvider & { - /** - * Gets the current L1 (data) gas price. - * - * @returns Current L1 data gas price in wei. - */ - getL1GasPrice(): Promise - - /** - * Estimates the L1 (data) gas required for a transaction. - * - * @param tx Transaction to estimate L1 gas for. - * @returns Estimated L1 gas. - */ - estimateL1Gas(tx: TransactionRequest): Promise - - /** - * Estimates the L1 (data) gas cost for a transaction in wei by multiplying the estimated L1 gas - * cost by the current L1 gas price. - * - * @param tx Transaction to estimate L1 gas cost for. - * @returns Estimated L1 gas cost. - */ - estimateL1GasCost(tx: TransactionRequest): Promise - - /** - * Estimates the L2 (execution) gas cost for a transaction in wei by multiplying the estimated L1 - * gas cost by the current L2 gas price. This is a simple multiplication of the result of - * getGasPrice and estimateGas for the given transaction request. - * - * @param tx Transaction to estimate L2 gas cost for. - * @returns Estimated L2 gas cost. - */ - estimateL2GasCost(tx: TransactionRequest): Promise - - /** - * Estimates the total gas cost for a transaction in wei by adding the estimated the L1 gas cost - * and the estimated L2 gas cost. - * - * @param tx Transaction to estimate total gas cost for. - * @returns Estimated total gas cost. - */ - estimateTotalGasCost(tx: TransactionRequest): Promise - - /** - * Internal property to determine if a provider is a L2Provider - * You are likely looking for the isL2Provider function - */ - _isL2Provider: true -} diff --git a/packages/sdk/src/interfaces/types.ts b/packages/sdk/src/interfaces/types.ts deleted file mode 100644 index 6b78b9e9234b..000000000000 --- a/packages/sdk/src/interfaces/types.ts +++ /dev/null @@ -1,374 +0,0 @@ -import { - Provider, - TransactionReceipt, - TransactionResponse, -} from '@ethersproject/abstract-provider' -import { Signer } from '@ethersproject/abstract-signer' -import { Contract, BigNumber } from 'ethers' - -import { CrossChainMessenger } from '../cross-chain-messenger' -import { IBridgeAdapter } from './bridge-adapter' - -/** - * L1 network chain IDs - */ -export enum L1ChainID { - MAINNET = 1, - GOERLI = 5, - SEPOLIA = 11155111, - HARDHAT_LOCAL = 31337, - BEDROCK_LOCAL_DEVNET = 900, -} - -/** - * L2 network chain IDs - */ -export enum L2ChainID { - OPTIMISM = 10, - OPTIMISM_GOERLI = 420, - OPTIMISM_SEPOLIA = 11155420, - OPTIMISM_HARDHAT_LOCAL = 31337, - OPTIMISM_HARDHAT_DEVNET = 17, - OPTIMISM_BEDROCK_ALPHA_TESTNET = 28528, - BASE_GOERLI = 84531, - BASE_SEPOLIA = 84532, - BASE_MAINNET = 8453, - ZORA_GOERLI = 999, - ZORA_MAINNET = 7777777, - MODE_SEPOLIA = 919, - MODE_MAINNET = 34443, -} - -/** - * L1 contract references. - */ -export interface OEL1Contracts { - AddressManager: Contract - L1CrossDomainMessenger: Contract - L1StandardBridge: Contract - StateCommitmentChain: Contract - CanonicalTransactionChain: Contract - BondManager: Contract - // Bedrock - OptimismPortal: Contract - L2OutputOracle: Contract - // FPAC - OptimismPortal2?: Contract - DisputeGameFactory?: Contract - FaultDisputeGame?: Contract -} - -/** - * L2 contract references. - */ -export interface OEL2Contracts { - L2CrossDomainMessenger: Contract - L2StandardBridge: Contract - L2ToL1MessagePasser: Contract - OVM_L1BlockNumber: Contract - OVM_L2ToL1MessagePasser: Contract - OVM_DeployerWhitelist: Contract - OVM_ETH: Contract - OVM_GasPriceOracle: Contract - OVM_SequencerFeeVault: Contract - WETH: Contract - BedrockMessagePasser: Contract -} - -/** - * Represents Optimism contracts, assumed to be connected to their appropriate - * providers and addresses. - */ -export interface OEContracts { - l1: OEL1Contracts - l2: OEL2Contracts -} - -/** - * Convenience type for something that looks like the L1 OE contract interface but could be - * addresses instead of actual contract objects. - */ -export type OEL1ContractsLike = { - [K in keyof OEL1Contracts]: AddressLike -} - -/** - * Convenience type for something that looks like the L2 OE contract interface but could be - * addresses instead of actual contract objects. - */ -export type OEL2ContractsLike = { - [K in keyof OEL2Contracts]: AddressLike -} - -/** - * Convenience type for something that looks like the OE contract interface but could be - * addresses instead of actual contract objects. - */ -export interface OEContractsLike { - l1: OEL1ContractsLike - l2: OEL2ContractsLike -} - -/** - * Something that looks like the list of custom bridges. - */ -export interface BridgeAdapterData { - [name: string]: { - Adapter: new (opts: { - messenger: CrossChainMessenger - l1Bridge: AddressLike - l2Bridge: AddressLike - }) => IBridgeAdapter - l1Bridge: AddressLike - l2Bridge: AddressLike - } -} - -/** - * Something that looks like the list of custom bridges. - */ -export interface BridgeAdapters { - [name: string]: IBridgeAdapter -} - -/** - * Enum describing the status of a message. - */ -export enum MessageStatus { - /** - * Message is an L1 to L2 message and has not been processed by the L2. - */ - UNCONFIRMED_L1_TO_L2_MESSAGE, - - /** - * Message is an L1 to L2 message and the transaction to execute the message failed. - * When this status is returned, you will need to resend the L1 to L2 message, probably with a - * higher gas limit. - */ - FAILED_L1_TO_L2_MESSAGE, - - /** - * Message is an L2 to L1 message and no state root has been published yet. - */ - STATE_ROOT_NOT_PUBLISHED, - - /** - * Message is ready to be proved on L1 to initiate the challenge period. - */ - READY_TO_PROVE, - - /** - * Message is a proved L2 to L1 message and is undergoing the challenge period. - */ - IN_CHALLENGE_PERIOD, - - /** - * Message is ready to be relayed. - */ - READY_FOR_RELAY, - - /** - * Message has been relayed. - */ - RELAYED, -} - -/** - * Enum describing the direction of a message. - */ -export enum MessageDirection { - L1_TO_L2, - L2_TO_L1, -} - -/** - * Partial message that needs to be signed and executed by a specific signer. - */ -export interface CrossChainMessageRequest { - direction: MessageDirection - target: string - message: string -} - -/** - * Core components of a cross chain message. - */ -export interface CoreCrossChainMessage { - sender: string - target: string - message: string - messageNonce: BigNumber - value: BigNumber - minGasLimit: BigNumber -} - -/** - * Describes a message that is sent between L1 and L2. Direction determines where the message was - * sent from and where it's being sent to. - */ -export interface CrossChainMessage extends CoreCrossChainMessage { - direction: MessageDirection - logIndex: number - blockNumber: number - transactionHash: string -} - -/** - * Describes messages sent inside the L2ToL1MessagePasser on L2. Happens to be the same structure - * as the CoreCrossChainMessage so we'll reuse the type for now. - */ -export type LowLevelMessage = CoreCrossChainMessage - -/** - * Describes a token withdrawal or deposit, along with the underlying raw cross chain message - * behind the deposit or withdrawal. - */ -export interface TokenBridgeMessage { - direction: MessageDirection - from: string - to: string - l1Token: string - l2Token: string - amount: BigNumber - data: string - logIndex: number - blockNumber: number - transactionHash: string -} - -/** - * Represents a withdrawal entry within the logs of a L2 to L1 - * CrossChainMessage - */ -export interface WithdrawalEntry { - MessagePassed: any -} - -/** - * Enum describing the status of a CrossDomainMessage message receipt. - */ -export enum MessageReceiptStatus { - RELAYED_FAILED, - RELAYED_SUCCEEDED, -} - -/** - * CrossDomainMessage receipt. - */ -export interface MessageReceipt { - receiptStatus: MessageReceiptStatus - transactionReceipt: TransactionReceipt -} - -/** - * ProvenWithdrawal in OptimismPortal. - */ -export interface LegacyProvenWithdrawal { - outputRoot: string - timestamp: BigNumber - l2BlockNumber: BigNumber -} - -/** - * ProvenWithdrawal in OptimismPortal (FPAC). - */ -export interface FPACProvenWithdrawal { - proofSubmitter: string - disputeGameProxy: string - timestamp: BigNumber -} - -/** - * ProvenWithdrawal in OptimismPortal (FPAC or Legacy). - */ -export type ProvenWithdrawal = LegacyProvenWithdrawal | FPACProvenWithdrawal - -/** - * Header for a state root batch. - */ -export interface StateRootBatchHeader { - batchIndex: BigNumber - batchRoot: string - batchSize: BigNumber - prevTotalElements: BigNumber - extraData: string -} - -/** - * Information about a state root, including header, block number, and root iself. - */ -export interface StateRoot { - stateRoot: string - stateRootIndexInBatch: number - batch: StateRootBatch -} - -/** - * Information about a batch of state roots. - */ -export interface StateRootBatch { - blockNumber: number - header: StateRootBatchHeader - stateRoots: string[] -} - -/** - * Proof data required to finalize an L2 to L1 message. - */ -export interface CrossChainMessageProof { - stateRoot: string - stateRootBatchHeader: StateRootBatchHeader - stateRootProof: { - index: number - siblings: string[] - } - stateTrieWitness: string - storageTrieWitness: string -} - -/** - * Stuff that can be coerced into a transaction. - */ -export type TransactionLike = string | TransactionReceipt | TransactionResponse - -/** - * Stuff that can be coerced into a CrossChainMessage. - */ -export type MessageLike = - | CrossChainMessage - | TransactionLike - | TokenBridgeMessage - -/** - * Stuff that can be coerced into a CrossChainMessageRequest. - */ -export type MessageRequestLike = - | CrossChainMessageRequest - | CrossChainMessage - | TransactionLike - | TokenBridgeMessage - -/** - * Stuff that can be coerced into a provider. - */ -export type ProviderLike = string | Provider - -/** - * Stuff that can be coerced into a signer. - */ -export type SignerLike = string | Signer - -/** - * Stuff that can be coerced into a signer or provider. - */ -export type SignerOrProviderLike = SignerLike | ProviderLike - -/** - * Stuff that can be coerced into an address. - */ -export type AddressLike = string | Contract - -/** - * Stuff that can be coerced into a number. - */ -export type NumberLike = string | number | BigNumber diff --git a/packages/sdk/src/l2-provider.ts b/packages/sdk/src/l2-provider.ts deleted file mode 100644 index 6c410d2b2f47..000000000000 --- a/packages/sdk/src/l2-provider.ts +++ /dev/null @@ -1,277 +0,0 @@ -import { Provider, TransactionRequest } from '@ethersproject/abstract-provider' -import { serialize } from '@ethersproject/transactions' -import { Contract, BigNumber } from 'ethers' -import { predeploys, getContractInterface } from '@eth-optimism/contracts' -import cloneDeep from 'lodash/cloneDeep' - -import { assert } from './utils/assert' -import { L2Provider, ProviderLike, NumberLike } from './interfaces' -import { toProvider, toNumber, toBigNumber } from './utils' - -type ProviderTypeIsWrong = any - -/** - * Gets a reasonable nonce for the transaction. - * - * @param provider Provider to get the nonce from. - * @param tx Requested transaction. - * @returns A reasonable nonce for the transaction. - */ -const getNonceForTx = async ( - provider: ProviderLike, - tx: TransactionRequest -): Promise => { - if (tx.nonce !== undefined) { - return toNumber(tx.nonce as NumberLike) - } else if (tx.from !== undefined) { - return toProvider(provider).getTransactionCount(tx.from) - } else { - // Large nonce with lots of non-zero bytes - return 0xffffffff - } -} - -/** - * Returns a Contract object for the GasPriceOracle. - * - * @param provider Provider to attach the contract to. - * @returns Contract object for the GasPriceOracle. - */ -const connectGasPriceOracle = (provider: ProviderLike): Contract => { - return new Contract( - predeploys.OVM_GasPriceOracle, - getContractInterface('OVM_GasPriceOracle'), - toProvider(provider) - ) -} - -/** - * Gets the current L1 gas price as seen on L2. - * - * @param l2Provider L2 provider to query the L1 gas price from. - * @returns Current L1 gas price as seen on L2. - */ -export const getL1GasPrice = async ( - l2Provider: ProviderLike -): Promise => { - const gpo = connectGasPriceOracle(l2Provider) - return gpo.l1BaseFee() -} - -/** - * Estimates the amount of L1 gas required for a given L2 transaction. - * - * @param l2Provider L2 provider to query the gas usage from. - * @param tx Transaction to estimate L1 gas for. - * @returns Estimated L1 gas. - */ -export const estimateL1Gas = async ( - l2Provider: ProviderLike, - tx: TransactionRequest -): Promise => { - const gpo = connectGasPriceOracle(l2Provider) - return gpo.getL1GasUsed( - serialize({ - to: tx.to, - gasLimit: tx.gasLimit, - gasPrice: tx.gasPrice, - maxFeePerGas: tx.maxFeePerGas, - maxPriorityFeePerGas: tx.maxPriorityFeePerGas, - data: tx.data, - value: tx.value, - chainId: tx.chainId, - type: tx.type, - accessList: tx.accessList, - nonce: tx.nonce - ? BigNumber.from(tx.nonce).toNumber() - : await getNonceForTx(l2Provider, tx), - }) - ) -} - -/** - * Estimates the amount of L1 gas cost for a given L2 transaction in wei. - * - * @param l2Provider L2 provider to query the gas usage from. - * @param tx Transaction to estimate L1 gas cost for. - * @returns Estimated L1 gas cost. - */ -export const estimateL1GasCost = async ( - l2Provider: ProviderLike, - tx: TransactionRequest -): Promise => { - const gpo = connectGasPriceOracle(l2Provider) - return gpo.getL1Fee( - serialize({ - to: tx.to, - gasLimit: tx.gasLimit, - gasPrice: tx.gasPrice, - maxFeePerGas: tx.maxFeePerGas, - maxPriorityFeePerGas: tx.maxPriorityFeePerGas, - data: tx.data, - value: tx.value, - chainId: tx.chainId, - type: tx.type, - accessList: tx.accessList, - nonce: tx.nonce - ? BigNumber.from(tx.nonce).toNumber() - : await getNonceForTx(l2Provider, tx), - }) - ) -} - -/** - * Estimates the L2 gas cost for a given L2 transaction in wei. - * - * @param l2Provider L2 provider to query the gas usage from. - * @param tx Transaction to estimate L2 gas cost for. - * @returns Estimated L2 gas cost. - */ -export const estimateL2GasCost = async ( - l2Provider: ProviderLike, - tx: TransactionRequest -): Promise => { - const parsed = toProvider(l2Provider) - const l2GasPrice = await parsed.getGasPrice() - const l2GasCost = await parsed.estimateGas(tx) - return l2GasPrice.mul(l2GasCost) -} - -/** - * Estimates the total gas cost for a given L2 transaction in wei. - * - * @param l2Provider L2 provider to query the gas usage from. - * @param tx Transaction to estimate total gas cost for. - * @returns Estimated total gas cost. - */ -export const estimateTotalGasCost = async ( - l2Provider: ProviderLike, - tx: TransactionRequest -): Promise => { - const l1GasCost = await estimateL1GasCost(l2Provider, tx) - const l2GasCost = await estimateL2GasCost(l2Provider, tx) - return l1GasCost.add(l2GasCost) -} - -/** - * Determines if a given Provider is an L2Provider. Will coerce type - * if true - * - * @param provider The provider to check - * @returns Boolean - * @example - * if (isL2Provider(provider)) { - * // typescript now knows it is of type L2Provider - * const gasPrice = await provider.estimateL2GasPrice(tx) - * } - */ -export const isL2Provider = ( - provider: TProvider -): provider is L2Provider => { - return Boolean((provider as L2Provider)._isL2Provider) -} - -/** - * Returns an provider wrapped as an Optimism L2 provider. Adds a few extra helper functions to - * simplify the process of estimating the gas usage for a transaction on Optimism. Returns a COPY - * of the original provider. - * - * @param provider Provider to wrap into an L2 provider. - * @returns Provider wrapped as an L2 provider. - */ -export const asL2Provider = ( - provider: TProvider -): L2Provider => { - // Skip if we've already wrapped this provider. - if (isL2Provider(provider)) { - return provider - } - - // Make a copy of the provider since we'll be modifying some internals and don't want to mess - // with the original object. - const l2Provider = cloneDeep(provider) as L2Provider - - // Not exactly sure when the provider wouldn't have a formatter function, but throw an error if - // it doesn't have one. The Provider type doesn't define it but every provider I've dealt with - // seems to have it. - // TODO this may be fixed if library has gotten updated since - const formatter = (l2Provider as ProviderTypeIsWrong).formatter - assert(formatter, `provider.formatter must be defined`) - - // Modify the block formatter to return the state root. Not strictly related to Optimism, just a - // generally useful thing that really should've been on the Ethers block object to begin with. - // TODO: Maybe we should make a PR to add this to the Ethers library? - const ogBlockFormatter = formatter.block.bind(formatter) - formatter.block = (block: any) => { - const parsed = ogBlockFormatter(block) - parsed.stateRoot = block.stateRoot - return parsed - } - - // Modify the block formatter to include all the L2 fields for transactions. - const ogBlockWithTxFormatter = formatter.blockWithTransactions.bind(formatter) - formatter.blockWithTransactions = (block: any) => { - const parsed = ogBlockWithTxFormatter(block) - parsed.stateRoot = block.stateRoot - parsed.transactions = parsed.transactions.map((tx: any, idx: number) => { - const ogTx = block.transactions[idx] - tx.l1BlockNumber = ogTx.l1BlockNumber - ? toNumber(ogTx.l1BlockNumber) - : ogTx.l1BlockNumber - tx.l1Timestamp = ogTx.l1Timestamp - ? toNumber(ogTx.l1Timestamp) - : ogTx.l1Timestamp - tx.l1TxOrigin = ogTx.l1TxOrigin - tx.queueOrigin = ogTx.queueOrigin - tx.rawTransaction = ogTx.rawTransaction - return tx - }) - return parsed - } - - // Modify the transaction formatter to include all the L2 fields for transactions. - const ogTxResponseFormatter = formatter.transactionResponse.bind(formatter) - formatter.transactionResponse = (tx: any) => { - const parsed = ogTxResponseFormatter(tx) - parsed.txType = tx.txType - parsed.queueOrigin = tx.queueOrigin - parsed.rawTransaction = tx.rawTransaction - parsed.l1TxOrigin = tx.l1TxOrigin - parsed.l1BlockNumber = tx.l1BlockNumber - ? parseInt(tx.l1BlockNumber, 16) - : tx.l1BlockNumbers - return parsed - } - - // Modify the receipt formatter to include all the L2 fields. - const ogReceiptFormatter = formatter.receipt.bind(formatter) - formatter.receipt = (receipt: any) => { - const parsed = ogReceiptFormatter(receipt) - parsed.l1GasPrice = toBigNumber(receipt.l1GasPrice) - parsed.l1GasUsed = toBigNumber(receipt.l1GasUsed) - parsed.l1Fee = toBigNumber(receipt.l1Fee) - parsed.l1FeeScalar = parseFloat(receipt.l1FeeScalar) - return parsed - } - - // Connect extra functions. - l2Provider.getL1GasPrice = async () => { - return getL1GasPrice(l2Provider) - } - l2Provider.estimateL1Gas = async (tx: TransactionRequest) => { - return estimateL1Gas(l2Provider, tx) - } - l2Provider.estimateL1GasCost = async (tx: TransactionRequest) => { - return estimateL1GasCost(l2Provider, tx) - } - l2Provider.estimateL2GasCost = async (tx: TransactionRequest) => { - return estimateL2GasCost(l2Provider, tx) - } - l2Provider.estimateTotalGasCost = async (tx: TransactionRequest) => { - return estimateTotalGasCost(l2Provider, tx) - } - - l2Provider._isL2Provider = true - - return l2Provider -} diff --git a/packages/sdk/src/utils/assert.ts b/packages/sdk/src/utils/assert.ts deleted file mode 100644 index 3022990e5151..000000000000 --- a/packages/sdk/src/utils/assert.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const assert = (condition: boolean, message: string): void => { - if (!condition) { - throw new Error(message) - } -} diff --git a/packages/sdk/src/utils/chain-constants.ts b/packages/sdk/src/utils/chain-constants.ts deleted file mode 100644 index 15a7c1a98855..000000000000 --- a/packages/sdk/src/utils/chain-constants.ts +++ /dev/null @@ -1,385 +0,0 @@ -import { predeploys } from '@eth-optimism/core-utils' -import { ethers } from 'ethers' - -// The addresses below should be for the proxy if it is a proxied contract. - -const portalAddresses = { - mainnet: '0xbEb5Fc579115071764c7423A4f12eDde41f106Ed', - goerli: '0x5b47E1A08Ea6d985D6649300584e6722Ec4B1383', - sepolia: '0x16Fc5058F25648194471939df75CF27A2fdC48BC', -} - -const l2OutputOracleAddresses = { - mainnet: '0xdfe97868233d1aa22e815a266982f2cf17685a27', - goerli: '0xE6Dfba0953616Bacab0c9A8ecb3a9BBa77FC15c0', - sepolia: '0x90E9c4f8a994a250F6aEfd61CAFb4F2e895D458F', -} - -const addressManagerAddresses = { - mainnet: '0xdE1FCfB0851916CA5101820A69b13a4E276bd81F', - goerli: '0xa6f73589243a6A7a9023b1Fa0651b1d89c177111', - sepolia: '0x9bFE9c5609311DF1c011c47642253B78a4f33F4B', -} - -const l1StandardBridgeAddresses = { - mainnet: '0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1', - goerli: '0x636Af16bf2f682dD3109e60102b8E1A089FedAa8', - sepolia: '0xFBb0621E0B23b5478B630BD55a5f21f67730B0F1', -} - -const l1CrossDomainMessengerAddresses = { - mainnet: '0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1', - goerli: '0x5086d1eEF304eb5284A0f6720f79403b4e9bE294', - sepolia: '0x58Cc85b8D04EA49cC6DBd3CbFFd00B4B8D6cb3ef', -} - -const disputeGameFactoryAddresses = { - mainnet: ethers.constants.AddressZero, - goerli: ethers.constants.AddressZero, - sepolia: '0x05F9613aDB30026FFd634f38e5C4dFd30a197Fa1', -} - -// legacy -const stateCommitmentChainAddresses = { - mainnet: '0xBe5dAb4A2e9cd0F27300dB4aB94BeE3A233AEB19', - goerli: '0x9c945aC97Baf48cB784AbBB61399beB71aF7A378', - sepolia: ethers.constants.AddressZero, -} - -// legacy -const canonicalTransactionChainAddresses = { - mainnet: '0x5E4e65926BA27467555EB562121fac00D24E9dD2', - goerli: '0x607F755149cFEB3a14E1Dc3A4E2450Cde7dfb04D', - sepolia: ethers.constants.AddressZero, -} - -import { - L1ChainID, - L2ChainID, - OEContractsLike, - OEL1ContractsLike, - OEL2ContractsLike, - BridgeAdapterData, -} from '../interfaces' -import { - StandardBridgeAdapter, - DAIBridgeAdapter, - ECOBridgeAdapter, -} from '../adapters' - -export const DEPOSIT_CONFIRMATION_BLOCKS: { - [ChainID in L2ChainID]: number -} = { - [L2ChainID.OPTIMISM]: 50 as const, - [L2ChainID.OPTIMISM_GOERLI]: 12 as const, - [L2ChainID.OPTIMISM_SEPOLIA]: 12 as const, - [L2ChainID.OPTIMISM_HARDHAT_LOCAL]: 2 as const, - [L2ChainID.OPTIMISM_HARDHAT_DEVNET]: 2 as const, - [L2ChainID.OPTIMISM_BEDROCK_ALPHA_TESTNET]: 12 as const, - [L2ChainID.BASE_GOERLI]: 25 as const, - [L2ChainID.BASE_SEPOLIA]: 25 as const, - [L2ChainID.BASE_MAINNET]: 10 as const, - [L2ChainID.ZORA_GOERLI]: 12 as const, - [L2ChainID.ZORA_MAINNET]: 50 as const, - [L2ChainID.MODE_SEPOLIA]: 25 as const, - [L2ChainID.MODE_MAINNET]: 50 as const, -} - -export const CHAIN_BLOCK_TIMES: { - [ChainID in L1ChainID]: number -} = { - [L1ChainID.MAINNET]: 13 as const, - [L1ChainID.GOERLI]: 15 as const, - [L1ChainID.SEPOLIA]: 15 as const, - [L1ChainID.HARDHAT_LOCAL]: 1 as const, - [L1ChainID.BEDROCK_LOCAL_DEVNET]: 15 as const, -} - -/** - * Full list of default L2 contract addresses. - */ -export const DEFAULT_L2_CONTRACT_ADDRESSES: OEL2ContractsLike = { - L2CrossDomainMessenger: predeploys.L2CrossDomainMessenger, - L2ToL1MessagePasser: predeploys.L2ToL1MessagePasser, - L2StandardBridge: predeploys.L2StandardBridge, - OVM_L1BlockNumber: predeploys.L1BlockNumber, - OVM_L2ToL1MessagePasser: predeploys.L2ToL1MessagePasser, - OVM_DeployerWhitelist: predeploys.DeployerWhitelist, - OVM_ETH: predeploys.LegacyERC20ETH, - OVM_GasPriceOracle: predeploys.GasPriceOracle, - OVM_SequencerFeeVault: predeploys.SequencerFeeVault, - WETH: predeploys.WETH9, - BedrockMessagePasser: predeploys.L2ToL1MessagePasser, -} - -/** - * Loads the L1 contracts for a given network by the network name. - * - * @param network The name of the network to load the contracts for. - * @returns The L1 contracts for the given network. - */ -const getL1ContractsByNetworkName = (network: string): OEL1ContractsLike => { - return { - AddressManager: addressManagerAddresses[network], - L1CrossDomainMessenger: l1CrossDomainMessengerAddresses[network], - L1StandardBridge: l1StandardBridgeAddresses[network], - StateCommitmentChain: stateCommitmentChainAddresses[network], - CanonicalTransactionChain: canonicalTransactionChainAddresses[network], - BondManager: ethers.constants.AddressZero, - OptimismPortal: portalAddresses[network], - L2OutputOracle: l2OutputOracleAddresses[network], - OptimismPortal2: portalAddresses[network], - DisputeGameFactory: disputeGameFactoryAddresses[network], - } -} - -/** - * List of contracts that are ignorable when checking for contracts on a given network. - */ -export const IGNORABLE_CONTRACTS = ['OptimismPortal2', 'DisputeGameFactory'] - -/** - * Mapping of L1 chain IDs to the appropriate contract addresses for the OE deployments to the - * given network. Simplifies the process of getting the correct contract addresses for a given - * contract name. - */ -export const CONTRACT_ADDRESSES: { - [ChainID in L2ChainID]: OEContractsLike -} = { - [L2ChainID.OPTIMISM]: { - l1: getL1ContractsByNetworkName('mainnet'), - l2: DEFAULT_L2_CONTRACT_ADDRESSES, - }, - [L2ChainID.OPTIMISM_GOERLI]: { - l1: getL1ContractsByNetworkName('goerli'), - l2: DEFAULT_L2_CONTRACT_ADDRESSES, - }, - [L2ChainID.OPTIMISM_SEPOLIA]: { - l1: getL1ContractsByNetworkName('sepolia'), - l2: DEFAULT_L2_CONTRACT_ADDRESSES, - }, - [L2ChainID.OPTIMISM_HARDHAT_LOCAL]: { - l1: { - AddressManager: '0x5FbDB2315678afecb367f032d93F642f64180aa3' as const, - L1CrossDomainMessenger: - '0x8A791620dd6260079BF849Dc5567aDC3F2FdC318' as const, - L1StandardBridge: '0x610178dA211FEF7D417bC0e6FeD39F05609AD788' as const, - StateCommitmentChain: - '0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9' as const, - CanonicalTransactionChain: - '0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9' as const, - BondManager: '0x5FC8d32690cc91D4c39d9d3abcBD16989F875707' as const, - // FIXME - OptimismPortal: '0x0000000000000000000000000000000000000000' as const, - L2OutputOracle: '0x0000000000000000000000000000000000000000' as const, - OptimismPortal2: '0x0000000000000000000000000000000000000000' as const, - DisputeGameFactory: '0x0000000000000000000000000000000000000000' as const, - }, - l2: DEFAULT_L2_CONTRACT_ADDRESSES, - }, - [L2ChainID.OPTIMISM_HARDHAT_DEVNET]: { - l1: { - AddressManager: '0x5FbDB2315678afecb367f032d93F642f64180aa3' as const, - L1CrossDomainMessenger: - '0x8A791620dd6260079BF849Dc5567aDC3F2FdC318' as const, - L1StandardBridge: '0x610178dA211FEF7D417bC0e6FeD39F05609AD788' as const, - StateCommitmentChain: - '0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9' as const, - CanonicalTransactionChain: - '0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9' as const, - BondManager: '0x5FC8d32690cc91D4c39d9d3abcBD16989F875707' as const, - OptimismPortal: '0x0000000000000000000000000000000000000000' as const, - L2OutputOracle: '0x0000000000000000000000000000000000000000' as const, - OptimismPortal2: '0x0000000000000000000000000000000000000000' as const, - DisputeGameFactory: '0x0000000000000000000000000000000000000000' as const, - }, - l2: DEFAULT_L2_CONTRACT_ADDRESSES, - }, - [L2ChainID.OPTIMISM_BEDROCK_ALPHA_TESTNET]: { - l1: { - AddressManager: '0xb4e08DcE1F323608229265c9d4125E22a4B9dbAF' as const, - L1CrossDomainMessenger: - '0x838a6DC4E37CA45D4Ef05bb776bf05eEf50798De' as const, - L1StandardBridge: '0xFf94B6C486350aD92561Ba09bad3a59df764Da92' as const, - StateCommitmentChain: - '0x0000000000000000000000000000000000000000' as const, - CanonicalTransactionChain: - '0x0000000000000000000000000000000000000000' as const, - BondManager: '0x0000000000000000000000000000000000000000' as const, - OptimismPortal: '0xA581Ca3353DB73115C4625FFC7aDF5dB379434A8' as const, - L2OutputOracle: '0x3A234299a14De50027eA65dCdf1c0DaC729e04A6' as const, - OptimismPortal2: '0x0000000000000000000000000000000000000000' as const, - DisputeGameFactory: '0x0000000000000000000000000000000000000000' as const, - }, - l2: DEFAULT_L2_CONTRACT_ADDRESSES, - }, - [L2ChainID.BASE_GOERLI]: { - l1: { - AddressManager: '0x4Cf6b56b14c6CFcB72A75611080514F94624c54e' as const, - L1CrossDomainMessenger: - '0x8e5693140eA606bcEB98761d9beB1BC87383706D' as const, - L1StandardBridge: '0xfA6D8Ee5BE770F84FC001D098C4bD604Fe01284a' as const, - StateCommitmentChain: - '0x0000000000000000000000000000000000000000' as const, - CanonicalTransactionChain: - '0x0000000000000000000000000000000000000000' as const, - BondManager: '0x0000000000000000000000000000000000000000' as const, - OptimismPortal: '0xe93c8cD0D409341205A592f8c4Ac1A5fe5585cfA' as const, - L2OutputOracle: '0x2A35891ff30313CcFa6CE88dcf3858bb075A2298' as const, - OptimismPortal2: '0x0000000000000000000000000000000000000000' as const, - DisputeGameFactory: '0x0000000000000000000000000000000000000000' as const, - }, - l2: DEFAULT_L2_CONTRACT_ADDRESSES, - }, - [L2ChainID.BASE_SEPOLIA]: { - l1: { - AddressManager: '0x709c2B8ef4A9feFc629A8a2C1AF424Dc5BD6ad1B' as const, - L1CrossDomainMessenger: - '0xC34855F4De64F1840e5686e64278da901e261f20' as const, - L1StandardBridge: '0xfd0Bf71F60660E2f608ed56e1659C450eB113120' as const, - StateCommitmentChain: - '0x0000000000000000000000000000000000000000' as const, - CanonicalTransactionChain: - '0x0000000000000000000000000000000000000000' as const, - BondManager: '0x0000000000000000000000000000000000000000' as const, - OptimismPortal: '0x49f53e41452C74589E85cA1677426Ba426459e85' as const, - L2OutputOracle: '0x84457ca9D0163FbC4bbfe4Dfbb20ba46e48DF254' as const, - OptimismPortal2: '0x0000000000000000000000000000000000000000' as const, - DisputeGameFactory: '0x0000000000000000000000000000000000000000' as const, - }, - l2: DEFAULT_L2_CONTRACT_ADDRESSES, - }, - [L2ChainID.BASE_MAINNET]: { - l1: { - AddressManager: '0x8EfB6B5c4767B09Dc9AA6Af4eAA89F749522BaE2' as const, - L1CrossDomainMessenger: - '0x866E82a600A1414e583f7F13623F1aC5d58b0Afa' as const, - L1StandardBridge: '0x3154Cf16ccdb4C6d922629664174b904d80F2C35' as const, - StateCommitmentChain: - '0x0000000000000000000000000000000000000000' as const, - CanonicalTransactionChain: - '0x0000000000000000000000000000000000000000' as const, - BondManager: '0x0000000000000000000000000000000000000000' as const, - OptimismPortal: '0x49048044D57e1C92A77f79988d21Fa8fAF74E97e' as const, - L2OutputOracle: '0x56315b90c40730925ec5485cf004d835058518A0' as const, - OptimismPortal2: '0x0000000000000000000000000000000000000000' as const, - DisputeGameFactory: '0x0000000000000000000000000000000000000000' as const, - }, - l2: DEFAULT_L2_CONTRACT_ADDRESSES, - }, - // Zora Goerli - [L2ChainID.ZORA_GOERLI]: { - l1: { - AddressManager: '0x54f4676203dEDA6C08E0D40557A119c602bFA246' as const, - L1CrossDomainMessenger: - '0xD87342e16352D33170557A7dA1e5fB966a60FafC' as const, - L1StandardBridge: '0x7CC09AC2452D6555d5e0C213Ab9E2d44eFbFc956' as const, - StateCommitmentChain: - '0x0000000000000000000000000000000000000000' as const, - CanonicalTransactionChain: - '0x0000000000000000000000000000000000000000' as const, - BondManager: '0x0000000000000000000000000000000000000000' as const, - OptimismPortal: '0xDb9F51790365e7dc196e7D072728df39Be958ACe' as const, - L2OutputOracle: '0xdD292C9eEd00f6A32Ff5245d0BCd7f2a15f24e00' as const, - OptimismPortal2: '0x0000000000000000000000000000000000000000' as const, - DisputeGameFactory: '0x0000000000000000000000000000000000000000' as const, - }, - l2: DEFAULT_L2_CONTRACT_ADDRESSES, - }, - [L2ChainID.ZORA_MAINNET]: { - l1: { - AddressManager: '0xEF8115F2733fb2033a7c756402Fc1deaa56550Ef' as const, - L1CrossDomainMessenger: - '0xdC40a14d9abd6F410226f1E6de71aE03441ca506' as const, - L1StandardBridge: '0x3e2Ea9B92B7E48A52296fD261dc26fd995284631' as const, - StateCommitmentChain: - '0x0000000000000000000000000000000000000000' as const, - CanonicalTransactionChain: - '0x0000000000000000000000000000000000000000' as const, - BondManager: '0x0000000000000000000000000000000000000000' as const, - OptimismPortal: '0x1a0ad011913A150f69f6A19DF447A0CfD9551054' as const, - L2OutputOracle: '0x9E6204F750cD866b299594e2aC9eA824E2e5f95c' as const, - OptimismPortal2: '0x0000000000000000000000000000000000000000' as const, - DisputeGameFactory: '0x0000000000000000000000000000000000000000' as const, - }, - l2: DEFAULT_L2_CONTRACT_ADDRESSES, - }, - [L2ChainID.MODE_SEPOLIA]: { - l1: { - AddressManager: '0x83D45725d6562d8CD717673D6bb4c67C07dC1905' as const, - L1CrossDomainMessenger: - '0xc19a60d9E8C27B9A43527c3283B4dd8eDC8bE15C' as const, - L1StandardBridge: '0xbC5C679879B2965296756CD959C3C739769995E2' as const, - StateCommitmentChain: - '0x0000000000000000000000000000000000000000' as const, - CanonicalTransactionChain: - '0x0000000000000000000000000000000000000000' as const, - BondManager: '0x0000000000000000000000000000000000000000' as const, - OptimismPortal: '0x320e1580effF37E008F1C92700d1eBa47c1B23fD' as const, - L2OutputOracle: '0x2634BD65ba27AB63811c74A63118ACb312701Bfa' as const, - OptimismPortal2: '0x0000000000000000000000000000000000000000' as const, - DisputeGameFactory: '0x0000000000000000000000000000000000000000' as const, - }, - l2: DEFAULT_L2_CONTRACT_ADDRESSES, - }, - [L2ChainID.MODE_MAINNET]: { - l1: { - AddressManager: '0x50eF494573f28Cad6B64C31b7a00Cdaa48306e15' as const, - L1CrossDomainMessenger: - '0x95bDCA6c8EdEB69C98Bd5bd17660BaCef1298A6f' as const, - L1StandardBridge: '0x735aDBbE72226BD52e818E7181953f42E3b0FF21' as const, - StateCommitmentChain: - '0x0000000000000000000000000000000000000000' as const, - CanonicalTransactionChain: - '0x0000000000000000000000000000000000000000' as const, - BondManager: '0x0000000000000000000000000000000000000000' as const, - OptimismPortal: '0x8B34b14c7c7123459Cf3076b8Cb929BE097d0C07' as const, - L2OutputOracle: '0x4317ba146D4933D889518a3e5E11Fe7a53199b04' as const, - OptimismPortal2: '0x0000000000000000000000000000000000000000' as const, - DisputeGameFactory: '0x0000000000000000000000000000000000000000' as const, - }, - l2: DEFAULT_L2_CONTRACT_ADDRESSES, - }, -} - -/** - * Mapping of L1 chain IDs to the list of custom bridge addresses for each chain. - */ -export const BRIDGE_ADAPTER_DATA: { - [ChainID in L2ChainID]?: BridgeAdapterData -} = { - [L2ChainID.OPTIMISM]: { - wstETH: { - Adapter: DAIBridgeAdapter, - l1Bridge: '0x76943C0D61395d8F2edF9060e1533529cAe05dE6' as const, - l2Bridge: '0x8E01013243a96601a86eb3153F0d9Fa4fbFb6957' as const, - }, - BitBTC: { - Adapter: StandardBridgeAdapter, - l1Bridge: '0xaBA2c5F108F7E820C049D5Af70B16ac266c8f128' as const, - l2Bridge: '0x158F513096923fF2d3aab2BcF4478536de6725e2' as const, - }, - DAI: { - Adapter: DAIBridgeAdapter, - l1Bridge: '0x10E6593CDda8c58a1d0f14C5164B376352a55f2F' as const, - l2Bridge: '0x467194771dAe2967Aef3ECbEDD3Bf9a310C76C65' as const, - }, - ECO: { - Adapter: ECOBridgeAdapter, - l1Bridge: '0xAa029BbdC947F5205fBa0F3C11b592420B58f824' as const, - l2Bridge: '0xAa029BbdC947F5205fBa0F3C11b592420B58f824' as const, - }, - }, - [L2ChainID.OPTIMISM_GOERLI]: { - DAI: { - Adapter: DAIBridgeAdapter, - l1Bridge: '0x05a388Db09C2D44ec0b00Ee188cD42365c42Df23' as const, - l2Bridge: '0x467194771dAe2967Aef3ECbEDD3Bf9a310C76C65' as const, - }, - ECO: { - Adapter: ECOBridgeAdapter, - l1Bridge: '0x9A4464D6bFE006715382D39D183AAf66c952a3e0' as const, - l2Bridge: '0x6aA809bAeA2e4C057b3994127cB165119c6fc3B2' as const, - }, - }, -} diff --git a/packages/sdk/src/utils/coercion.ts b/packages/sdk/src/utils/coercion.ts deleted file mode 100644 index b57f8ba04418..000000000000 --- a/packages/sdk/src/utils/coercion.ts +++ /dev/null @@ -1,132 +0,0 @@ -import { - Provider, - TransactionReceipt, - TransactionResponse, -} from '@ethersproject/abstract-provider' -import { Signer } from '@ethersproject/abstract-signer' -import { ethers, BigNumber } from 'ethers' - -import { assert } from './assert' -import { - SignerOrProviderLike, - ProviderLike, - TransactionLike, - NumberLike, - AddressLike, -} from '../interfaces' - -/** - * Converts a SignerOrProviderLike into a Signer or a Provider. Assumes that if the input is a - * string then it is a JSON-RPC url. - * - * @param signerOrProvider SignerOrProviderLike to turn into a Signer or Provider. - * @returns Input as a Signer or Provider. - */ -export const toSignerOrProvider = ( - signerOrProvider: SignerOrProviderLike -): Signer | Provider => { - if (typeof signerOrProvider === 'string') { - return new ethers.providers.JsonRpcProvider(signerOrProvider) - } else if (Provider.isProvider(signerOrProvider)) { - return signerOrProvider - } else if (Signer.isSigner(signerOrProvider)) { - return signerOrProvider - } else { - throw new Error('Invalid provider') - } -} - -/** - * Converts a ProviderLike into a Provider. Assumes that if the input is a string then it is a - * JSON-RPC url. - * - * @param provider ProviderLike to turn into a Provider. - * @returns Input as a Provider. - */ -export const toProvider = (provider: ProviderLike): Provider => { - if (typeof provider === 'string') { - return new ethers.providers.JsonRpcProvider(provider) - } else if (Provider.isProvider(provider)) { - return provider - } else { - throw new Error('Invalid provider') - } -} - -/** - * Converts a ProviderLike into a JsonRpcProvider. - * - * @param provider ProviderLike to turn into a JsonRpcProvider. - * @returns Input as a JsonRpcProvider. - */ -export const toJsonRpcProvider = ( - provider: ProviderLike -): ethers.providers.JsonRpcProvider => { - const coerced = toProvider(provider) - if ('send' in coerced) { - // Existence of "send" is basically the only function that matters for determining if we can - // use this provider as a JsonRpcProvider, because "send" is the function that we usually want - // access to when we specifically care about having a JsonRpcProvider. - return coerced as ethers.providers.JsonRpcProvider - } else { - throw new Error('Invalid JsonRpcProvider, does not have "send" function') - } -} - -/** - * Pulls a transaction hash out of a TransactionLike object. - * - * @param transaction TransactionLike to convert into a transaction hash. - * @returns Transaction hash corresponding to the TransactionLike input. - */ -export const toTransactionHash = (transaction: TransactionLike): string => { - if (typeof transaction === 'string') { - assert( - ethers.utils.isHexString(transaction, 32), - 'Invalid transaction hash' - ) - return transaction - } else if ((transaction as TransactionReceipt).transactionHash) { - return (transaction as TransactionReceipt).transactionHash - } else if ((transaction as TransactionResponse).hash) { - return (transaction as TransactionResponse).hash - } else { - throw new Error('Invalid transaction') - } -} - -/** - * Converts a number-like into an ethers BigNumber. - * - * @param num Number-like to convert into a BigNumber. - * @returns Number-like as a BigNumber. - */ -export const toBigNumber = (num: NumberLike): BigNumber => { - return ethers.BigNumber.from(num) -} - -/** - * Converts a number-like into a number. - * - * @param num Number-like to convert into a number. - * @returns Number-like as a number. - */ -export const toNumber = (num: NumberLike): number => { - return toBigNumber(num).toNumber() -} - -/** - * Converts an address-like into a 0x-prefixed address string. - * - * @param addr Address-like to convert into an address. - * @returns Address-like as an address. - */ -export const toAddress = (addr: AddressLike): string => { - if (typeof addr === 'string') { - assert(ethers.utils.isAddress(addr), 'Invalid address') - return ethers.utils.getAddress(addr) - } else { - assert(ethers.utils.isAddress(addr.address), 'Invalid address') - return ethers.utils.getAddress(addr.address) - } -} diff --git a/packages/sdk/src/utils/contracts.ts b/packages/sdk/src/utils/contracts.ts deleted file mode 100644 index c9a4184b0367..000000000000 --- a/packages/sdk/src/utils/contracts.ts +++ /dev/null @@ -1,291 +0,0 @@ -import { getContractInterface, predeploys } from '@eth-optimism/contracts' -import { ethers, Contract } from 'ethers' - -import l1StandardBridge from '../forge-artifacts/L1StandardBridge.json' -import l2StandardBridge from '../forge-artifacts/L2StandardBridge.json' -import optimismMintableERC20 from '../forge-artifacts/OptimismMintableERC20.json' -import optimismPortal from '../forge-artifacts/OptimismPortal.json' -import l1CrossDomainMessenger from '../forge-artifacts/L1CrossDomainMessenger.json' -import l2CrossDomainMessenger from '../forge-artifacts/L2CrossDomainMessenger.json' -import optimismMintableERC20Factory from '../forge-artifacts/OptimismMintableERC20Factory.json' -import proxyAdmin from '../forge-artifacts/ProxyAdmin.json' -import l2OutputOracle from '../forge-artifacts/L2OutputOracle.json' -import l1ERC721Bridge from '../forge-artifacts/L1ERC721Bridge.json' -import l2ERC721Bridge from '../forge-artifacts/L2ERC721Bridge.json' -import l1Block from '../forge-artifacts/L1Block.json' -import l2ToL1MessagePasser from '../forge-artifacts/L2ToL1MessagePasser.json' -import gasPriceOracle from '../forge-artifacts/GasPriceOracle.json' -import disputeGameFactory from '../forge-artifacts/DisputeGameFactory.json' -import optimismPortal2 from '../forge-artifacts/OptimismPortal2.json' -import faultDisputeGame from '../forge-artifacts/FaultDisputeGame.json' -import { toAddress } from './coercion' -import { DeepPartial } from './type-utils' -import { CrossChainMessenger } from '../cross-chain-messenger' -import { StandardBridgeAdapter, ETHBridgeAdapter } from '../adapters' -import { - CONTRACT_ADDRESSES, - DEFAULT_L2_CONTRACT_ADDRESSES, - BRIDGE_ADAPTER_DATA, - IGNORABLE_CONTRACTS, -} from './chain-constants' -import { - OEContracts, - OEL1Contracts, - OEL2Contracts, - OEContractsLike, - AddressLike, - BridgeAdapters, - BridgeAdapterData, -} from '../interfaces' - -/** - * We've changed some contract names in this SDK to be a bit nicer. Here we remap these nicer names - * back to the original contract names so we can look them up. - */ -const NAME_REMAPPING = { - AddressManager: 'Lib_AddressManager' as const, - OVM_L1BlockNumber: 'iOVM_L1BlockNumber' as const, - WETH: 'WETH9' as const, - BedrockMessagePasser: 'L2ToL1MessagePasser' as const, -} - -export const getContractInterfaceBedrock = ( - name: string -): ethers.utils.Interface => { - let artifact: any = '' - switch (name) { - case 'Lib_AddressManager': - case 'AddressManager': - artifact = '' - break - case 'L1CrossDomainMessenger': - artifact = l1CrossDomainMessenger - break - case 'L1ERC721Bridge': - artifact = l1ERC721Bridge - break - case 'L2OutputOracle': - artifact = l2OutputOracle - break - case 'OptimismMintableERC20Factory': - artifact = optimismMintableERC20Factory - break - case 'ProxyAdmin': - artifact = proxyAdmin - break - case 'L1StandardBridge': - artifact = l1StandardBridge - break - case 'L2StandardBridge': - artifact = l2StandardBridge - break - case 'OptimismPortal': - artifact = optimismPortal - break - case 'L2CrossDomainMessenger': - artifact = l2CrossDomainMessenger - break - case 'OptimismMintableERC20': - artifact = optimismMintableERC20 - break - case 'L2ERC721Bridge': - artifact = l2ERC721Bridge - break - case 'L1Block': - artifact = l1Block - break - case 'L2ToL1MessagePasser': - artifact = l2ToL1MessagePasser - break - case 'GasPriceOracle': - artifact = gasPriceOracle - break - case 'DisputeGameFactory': - artifact = disputeGameFactory - break - case 'OptimismPortal2': - artifact = optimismPortal2 - break - case 'FaultDisputeGame': - artifact = faultDisputeGame - break - } - return new ethers.utils.Interface(artifact.abi) -} - -/** - * Returns an ethers.Contract object for the given name, connected to the appropriate address for - * the given L2 chain ID. Users can also provide a custom address to connect the contract to - * instead. If the chain ID is not known then the user MUST provide a custom address or this - * function will throw an error. - * - * @param contractName Name of the contract to connect to. - * @param l2ChainId Chain ID for the L2 network. - * @param opts Additional options for connecting to the contract. - * @param opts.address Custom address to connect to the contract. - * @param opts.signerOrProvider Signer or provider to connect to the contract. - * @returns An ethers.Contract object connected to the appropriate address and interface. - */ -export const getOEContract = ( - contractName: keyof OEL1Contracts | keyof OEL2Contracts, - l2ChainId: number, - opts: { - address?: AddressLike - signerOrProvider?: ethers.Signer | ethers.providers.Provider - } = {} -): Contract => { - // Generally we want to throw an error if a contract address is not provided but there are some - // exceptions, particularly for contracts that are part of an upgrade that has not yet been - // deployed. It's OK to not provide an address for these contracts with the caveat that this may - // cause a runtime error if the contract does actually need to be used. - const addresses = CONTRACT_ADDRESSES[l2ChainId] - if (addresses === undefined && opts.address === undefined) { - if (IGNORABLE_CONTRACTS.includes(contractName)) { - return undefined - } else { - throw new Error( - `cannot get contract ${contractName} for unknown L2 chain ID ${l2ChainId}, you must provide an address` - ) - } - } - - // Bedrock interfaces are backwards compatible. We can prefer Bedrock interfaces over legacy - // interfaces if they exist. - const name = NAME_REMAPPING[contractName] || contractName - let iface: ethers.utils.Interface - try { - iface = getContractInterfaceBedrock(name) - } catch (err) { - iface = getContractInterface(name) - } - - return new Contract( - toAddress( - opts.address || addresses.l1[contractName] || addresses.l2[contractName] - ), - iface, - opts.signerOrProvider - ) -} - -/** - * Automatically connects to all contract addresses, both L1 and L2, for the given L2 chain ID. The - * user can provide custom contract address overrides for L1 or L2 contracts. If the given chain ID - * is not known then the user MUST provide custom contract addresses for ALL L1 contracts or this - * function will throw an error. - * - * @param l2ChainId Chain ID for the L2 network. - * @param opts Additional options for connecting to the contracts. - * @param opts.l1SignerOrProvider: Signer or provider to connect to the L1 contracts. - * @param opts.l2SignerOrProvider: Signer or provider to connect to the L2 contracts. - * @param opts.overrides Custom contract address overrides for L1 or L2 contracts. - * @returns An object containing ethers.Contract objects connected to the appropriate addresses on - * both L1 and L2. - */ -export const getAllOEContracts = ( - l2ChainId: number, - opts: { - l1SignerOrProvider?: ethers.Signer | ethers.providers.Provider - l2SignerOrProvider?: ethers.Signer | ethers.providers.Provider - overrides?: DeepPartial - } = {} -): OEContracts => { - const addresses = CONTRACT_ADDRESSES[l2ChainId] || { - l1: { - AddressManager: undefined, - L1CrossDomainMessenger: undefined, - L1StandardBridge: undefined, - StateCommitmentChain: undefined, - CanonicalTransactionChain: undefined, - BondManager: undefined, - OptimismPortal: undefined, - L2OutputOracle: undefined, - DisputeGameFactory: undefined, - OptimismPortal2: undefined, - }, - l2: DEFAULT_L2_CONTRACT_ADDRESSES, - } - - // Attach all L1 contracts. - const l1Contracts = {} as OEL1Contracts - for (const [contractName, contractAddress] of Object.entries(addresses.l1)) { - l1Contracts[contractName] = getOEContract( - contractName as keyof OEL1Contracts, - l2ChainId, - { - address: opts.overrides?.l1?.[contractName] || contractAddress, - signerOrProvider: opts.l1SignerOrProvider, - } - ) - } - - // Attach all L2 contracts. - const l2Contracts = {} as OEL2Contracts - for (const [contractName, contractAddress] of Object.entries(addresses.l2)) { - l2Contracts[contractName] = getOEContract( - contractName as keyof OEL2Contracts, - l2ChainId, - { - address: opts.overrides?.l2?.[contractName] || contractAddress, - signerOrProvider: opts.l2SignerOrProvider, - } - ) - } - - return { - l1: l1Contracts, - l2: l2Contracts, - } -} - -/** - * Gets a series of bridge adapters for the given L2 chain ID. - * - * @param l2ChainId Chain ID for the L2 network. - * @param messenger Cross chain messenger to connect to the bridge adapters - * @param opts Additional options for connecting to the custom bridges. - * @param opts.overrides Custom bridge adapters. - * @returns An object containing all bridge adapters - */ -export const getBridgeAdapters = ( - l2ChainId: number, - messenger: CrossChainMessenger, - opts?: { - overrides?: BridgeAdapterData - contracts?: DeepPartial - } -): BridgeAdapters => { - const adapterData: BridgeAdapterData = { - ...(CONTRACT_ADDRESSES[l2ChainId] || opts?.contracts?.l1?.L1StandardBridge - ? { - Standard: { - Adapter: StandardBridgeAdapter, - l1Bridge: - opts?.contracts?.l1?.L1StandardBridge || - CONTRACT_ADDRESSES[l2ChainId].l1.L1StandardBridge, - l2Bridge: predeploys.L2StandardBridge, - }, - ETH: { - Adapter: ETHBridgeAdapter, - l1Bridge: - opts?.contracts?.l1?.L1StandardBridge || - CONTRACT_ADDRESSES[l2ChainId].l1.L1StandardBridge, - l2Bridge: predeploys.L2StandardBridge, - }, - } - : {}), - ...(BRIDGE_ADAPTER_DATA[l2ChainId] || {}), - ...(opts?.overrides || {}), - } - - const adapters: BridgeAdapters = {} - for (const [bridgeName, bridgeData] of Object.entries(adapterData)) { - adapters[bridgeName] = new bridgeData.Adapter({ - messenger, - l1Bridge: bridgeData.l1Bridge, - l2Bridge: bridgeData.l2Bridge, - }) - } - - return adapters -} diff --git a/packages/sdk/src/utils/index.ts b/packages/sdk/src/utils/index.ts deleted file mode 100644 index 0e166b9f6c82..000000000000 --- a/packages/sdk/src/utils/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from './coercion' -export * from './contracts' -export * from './type-utils' -export * from './misc-utils' -export * from './merkle-utils' -export * from './chain-constants' -export * from './message-utils' diff --git a/packages/sdk/src/utils/merkle-utils.ts b/packages/sdk/src/utils/merkle-utils.ts deleted file mode 100644 index 2080ca6306c9..000000000000 --- a/packages/sdk/src/utils/merkle-utils.ts +++ /dev/null @@ -1,121 +0,0 @@ -/* Imports: External */ -import { ethers, BigNumber } from 'ethers' -import { - fromHexString, - toHexString, - toRpcHexString, -} from '@eth-optimism/core-utils' -import { MerkleTree } from 'merkletreejs' -import * as rlp from 'rlp' - -/** - * Generates a Merkle proof (using the particular scheme we use within Lib_MerkleTree). - * - * @param leaves Leaves of the merkle tree. - * @param index Index to generate a proof for. - * @returns Merkle proof sibling leaves, as hex strings. - */ -export const makeMerkleTreeProof = ( - leaves: string[], - index: number -): string[] => { - // Our specific Merkle tree implementation requires that the number of leaves is a power of 2. - // If the number of given leaves is less than a power of 2, we need to round up to the next - // available power of 2. We fill the remaining space with the hash of bytes32(0). - const correctedTreeSize = Math.pow(2, Math.ceil(Math.log2(leaves.length))) - const parsedLeaves = [] - for (let i = 0; i < correctedTreeSize; i++) { - if (i < leaves.length) { - parsedLeaves.push(leaves[i]) - } else { - parsedLeaves.push(ethers.utils.keccak256('0x' + '00'.repeat(32))) - } - } - - // merkletreejs prefers things to be Buffers. - const bufLeaves = parsedLeaves.map(fromHexString) - const tree = new MerkleTree(bufLeaves, (el: Buffer | string): Buffer => { - return fromHexString(ethers.utils.keccak256(el)) - }) - - const proof = tree.getProof(bufLeaves[index], index).map((element: any) => { - return toHexString(element.data) - }) - - return proof -} - -/** - * Fix for the case where the final proof element is less than 32 bytes and the element exists - * inside of a branch node. Current implementation of the onchain MPT contract can't handle this - * natively so we instead append an extra proof element to handle it instead. - * - * @param key Key that the proof is for. - * @param proof Proof to potentially modify. - * @returns Modified proof. - */ -export const maybeAddProofNode = (key: string, proof: string[]) => { - const modifiedProof = [...proof] - const finalProofEl = modifiedProof[modifiedProof.length - 1] - const finalProofElDecoded = rlp.decode(finalProofEl) as any - if (finalProofElDecoded.length === 17) { - for (const item of finalProofElDecoded) { - // Find any nodes located inside of the branch node. - if (Array.isArray(item)) { - // Check if the key inside the node matches the key we're looking for. We remove the first - // two characters (0x) and then we remove one more character (the first nibble) since this - // is the identifier for the type of node we're looking at. In this case we don't actually - // care what type of node it is because a branch node would only ever be the final proof - // element if (1) it includes the leaf node we're looking for or (2) it stores the value - // within itself. If (1) then this logic will work, if (2) then this won't find anything - // and we won't append any proof elements, which is exactly what we would want. - const suffix = toHexString(item[0]).slice(3) - if (key.endsWith(suffix)) { - modifiedProof.push(toHexString(rlp.encode(item))) - } - } - } - } - - // Return the modified proof. - return modifiedProof -} - -/** - * Generates a Merkle-Patricia trie proof for a given account and storage slot. - * - * @param provider RPC provider attached to an EVM-compatible chain. - * @param blockNumber Block number to generate the proof at. - * @param address Address to generate the proof for. - * @param slot Storage slot to generate the proof for. - * @returns Account proof and storage proof. - */ -export const makeStateTrieProof = async ( - provider: ethers.providers.JsonRpcProvider, - blockNumber: number, - address: string, - slot: string -): Promise<{ - accountProof: string[] - storageProof: string[] - storageValue: BigNumber - storageRoot: string -}> => { - const proof = await provider.send('eth_getProof', [ - address, - [slot], - toRpcHexString(blockNumber), - ]) - - proof.storageProof[0].proof = maybeAddProofNode( - ethers.utils.keccak256(slot), - proof.storageProof[0].proof - ) - - return { - accountProof: proof.accountProof, - storageProof: proof.storageProof[0].proof, - storageValue: BigNumber.from(proof.storageProof[0].value), - storageRoot: proof.storageHash, - } -} diff --git a/packages/sdk/src/utils/message-utils.ts b/packages/sdk/src/utils/message-utils.ts deleted file mode 100644 index 6cf16f32637e..000000000000 --- a/packages/sdk/src/utils/message-utils.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { hashWithdrawal } from '@eth-optimism/core-utils' -import { BigNumber, utils, ethers } from 'ethers' - -import { LowLevelMessage } from '../interfaces' - -const { hexDataLength } = utils - -// Constants used by `CrossDomainMessenger.baseGas` -const RELAY_CONSTANT_OVERHEAD = BigNumber.from(200_000) -const RELAY_PER_BYTE_DATA_COST = BigNumber.from(16) -const MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR = BigNumber.from(64) -const MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR = BigNumber.from(63) -const RELAY_CALL_OVERHEAD = BigNumber.from(40_000) -const RELAY_RESERVED_GAS = BigNumber.from(40_000) -const RELAY_GAS_CHECK_BUFFER = BigNumber.from(5_000) - -/** - * Utility for hashing a LowLevelMessage object. - * - * @param message LowLevelMessage object to hash. - * @returns Hash of the given LowLevelMessage. - */ -export const hashLowLevelMessage = (message: LowLevelMessage): string => { - return hashWithdrawal( - message.messageNonce, - message.sender, - message.target, - message.value, - message.minGasLimit, - message.message - ) -} - -/** - * Utility for hashing a message hash. This computes the storage slot - * where the message hash will be stored in state. HashZero is used - * because the first mapping in the contract is used. - * - * @param messageHash Message hash to hash. - * @returns Hash of the given message hash. - */ -export const hashMessageHash = (messageHash: string): string => { - const data = ethers.utils.defaultAbiCoder.encode( - ['bytes32', 'uint256'], - [messageHash, ethers.constants.HashZero] - ) - return ethers.utils.keccak256(data) -} - -/** - * Compute the min gas limit for a migrated withdrawal. - */ -export const migratedWithdrawalGasLimit = ( - data: string, - chainID: number -): BigNumber => { - // Compute the gas limit and cap at 25 million - const dataCost = BigNumber.from(hexDataLength(data)).mul( - RELAY_PER_BYTE_DATA_COST - ) - let overhead: BigNumber - if (chainID === 420) { - overhead = BigNumber.from(200_000) - } else { - // Dynamic overhead (EIP-150) - // We use a constant 1 million gas limit due to the overhead of simulating all migrated withdrawal - // transactions during the migration. This is a conservative estimate, and if a withdrawal - // uses more than the minimum gas limit, it will fail and need to be replayed with a higher - // gas limit. - const dynamicOverhead = MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR.mul( - 1_000_000 - ).div(MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR) - - // Constant overhead - overhead = RELAY_CONSTANT_OVERHEAD.add(dynamicOverhead) - .add(RELAY_CALL_OVERHEAD) - // Gas reserved for the worst-case cost of 3/5 of the `CALL` opcode's dynamic gas - // factors. (Conservative) - // Relay reserved gas (to ensure execution of `relayMessage` completes after the - // subcontext finishes executing) (Conservative) - .add(RELAY_RESERVED_GAS) - // Gas reserved for the execution between the `hasMinGas` check and the `CALL` - // opcode. (Conservative) - .add(RELAY_GAS_CHECK_BUFFER) - } - - let minGasLimit = dataCost.add(overhead) - if (minGasLimit.gt(25_000_000)) { - minGasLimit = BigNumber.from(25_000_000) - } - return minGasLimit -} diff --git a/packages/sdk/src/utils/misc-utils.ts b/packages/sdk/src/utils/misc-utils.ts deleted file mode 100644 index 3c2d9478290b..000000000000 --- a/packages/sdk/src/utils/misc-utils.ts +++ /dev/null @@ -1,20 +0,0 @@ -// TODO: A lot of this stuff could probably live in core-utils instead. -// Review this file eventually for stuff that could go into core-utils. - -/** - * Returns a copy of the given object ({ ...obj }) with the given keys omitted. - * - * @param obj Object to return with the keys omitted. - * @param keys Keys to omit from the returned object. - * @returns A copy of the given object with the given keys omitted. - */ -export const omit = ( - obj: T, - ...keys: K[] -): Omit => { - const copy = { ...obj } - for (const key of keys) { - delete copy[key as string] - } - return copy -} diff --git a/packages/sdk/src/utils/type-utils.ts b/packages/sdk/src/utils/type-utils.ts deleted file mode 100644 index 086d5f7c112a..000000000000 --- a/packages/sdk/src/utils/type-utils.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Utility type for deep partials. - */ -export type DeepPartial = { - [P in keyof T]?: DeepPartial -} diff --git a/packages/sdk/tasks/finalize-withdrawal.ts b/packages/sdk/tasks/finalize-withdrawal.ts deleted file mode 100644 index 7c44a610b320..000000000000 --- a/packages/sdk/tasks/finalize-withdrawal.ts +++ /dev/null @@ -1,130 +0,0 @@ -import { task, types } from 'hardhat/config' -import { HardhatRuntimeEnvironment } from 'hardhat/types' -import { Wallet, providers } from 'ethers' -import { predeploys } from '@eth-optimism/core-utils' -import 'hardhat-deploy' -import '@nomiclabs/hardhat-ethers' - -import { - CrossChainMessenger, - StandardBridgeAdapter, - MessageStatus, -} from '../src' - -task('finalize-withdrawal', 'Finalize a withdrawal') - .addParam( - 'transactionHash', - 'L2 Transaction hash to finalize', - '', - types.string - ) - .addParam('l2Url', 'L2 HTTP URL', 'http://localhost:9545', types.string) - .setAction(async (args, hre: HardhatRuntimeEnvironment) => { - const txHash = args.transactionHash - if (txHash === '') { - console.log('No tx hash') - } - - const signers = await hre.ethers.getSigners() - if (signers.length === 0) { - throw new Error('No configured signers') - } - const signer = signers[0] - const address = await signer.getAddress() - console.log(`Using signer: ${address}`) - - const l2Provider = new providers.StaticJsonRpcProvider(args.l2Url) - const l2Signer = new Wallet(hre.network.config.accounts[0], l2Provider) - - let Deployment__L1StandardBridgeProxy = await hre.deployments.getOrNull( - 'L1StandardBridgeProxy' - ) - if (Deployment__L1StandardBridgeProxy === undefined) { - Deployment__L1StandardBridgeProxy = await hre.deployments.getOrNull( - 'Proxy__OVM_L1StandardBridge' - ) - } - - let Deployment__L1CrossDomainMessengerProxy = - await hre.deployments.getOrNull('L1CrossDomainMessengerProxy') - if (Deployment__L1CrossDomainMessengerProxy === undefined) { - Deployment__L1CrossDomainMessengerProxy = await hre.deployments.getOrNull( - 'Proxy__OVM_L1CrossDomainMessenger' - ) - } - - const Deployment__L2OutputOracleProxy = await hre.deployments.getOrNull( - 'L2OutputOracleProxy' - ) - const Deployment__OptimismPortalProxy = await hre.deployments.getOrNull( - 'OptimismPortalProxy' - ) - - if (Deployment__L1StandardBridgeProxy?.address === undefined) { - throw new Error('No L1StandardBridgeProxy deployment') - } - - if (Deployment__L1CrossDomainMessengerProxy?.address === undefined) { - throw new Error('No L1CrossDomainMessengerProxy deployment') - } - - if (Deployment__L2OutputOracleProxy?.address === undefined) { - throw new Error('No L2OutputOracleProxy deployment') - } - - if (Deployment__OptimismPortalProxy?.address === undefined) { - throw new Error('No OptimismPortalProxy deployment') - } - - const messenger = new CrossChainMessenger({ - l1SignerOrProvider: signer, - l2SignerOrProvider: l2Signer, - l1ChainId: await signer.getChainId(), - l2ChainId: await l2Signer.getChainId(), - bridges: { - Standard: { - Adapter: StandardBridgeAdapter, - l1Bridge: Deployment__L1StandardBridgeProxy?.address, - l2Bridge: predeploys.L2StandardBridge, - }, - }, - contracts: { - l1: { - L1StandardBridge: Deployment__L1StandardBridgeProxy?.address, - L1CrossDomainMessenger: - Deployment__L1CrossDomainMessengerProxy?.address, - L2OutputOracle: Deployment__L2OutputOracleProxy?.address, - OptimismPortal: Deployment__OptimismPortalProxy?.address, - }, - }, - }) - - console.log(`Fetching message status for ${txHash}`) - const status = await messenger.getMessageStatus(txHash) - console.log(`Status: ${MessageStatus[status]}`) - - if (status === MessageStatus.READY_TO_PROVE) { - const proveTx = await messenger.proveMessage(txHash) - const proveReceipt = await proveTx.wait() - console.log('Prove receipt', proveReceipt) - - const finalizeInterval = setInterval(async () => { - const currentStatus = await messenger.getMessageStatus(txHash) - console.log(`Message status: ${MessageStatus[currentStatus]}`) - }, 3000) - - try { - await messenger.waitForMessageStatus( - txHash, - MessageStatus.READY_FOR_RELAY - ) - } finally { - clearInterval(finalizeInterval) - } - - const tx = await messenger.finalizeMessage(txHash) - const receipt = await tx.wait() - console.log(receipt) - console.log('Finalized withdrawal') - } - }) diff --git a/packages/sdk/test-next/README.md b/packages/sdk/test-next/README.md deleted file mode 100644 index a46dbfa069a9..000000000000 --- a/packages/sdk/test-next/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# test-next - -To run these tests it is expected that anvil is already running. - -See [circle config sdk-next tests](../../../.circleci/config.yml) for which anvil commands you should run diff --git a/packages/sdk/test-next/bridgeEcoToken.spec.ts b/packages/sdk/test-next/bridgeEcoToken.spec.ts deleted file mode 100644 index cebb5bc86bcf..000000000000 --- a/packages/sdk/test-next/bridgeEcoToken.spec.ts +++ /dev/null @@ -1,125 +0,0 @@ -import ethers from 'ethers' -import { describe, expect, it } from 'vitest' -import { Address, PublicClient, parseEther } from 'viem' - -import { - l1TestClient, - l2TestClient, - l1PublicClient, - l2PublicClient, -} from './testUtils/viemClients' -import { BRIDGE_ADAPTER_DATA, CrossChainMessenger, L2ChainID } from '../src' -import { l1Provider, l2Provider } from './testUtils/ethersProviders' - -const ECO_WHALE: Address = '0x982E148216E3Aa6B38f9D901eF578B5c06DD7502' - -// we should instead use tokenlist as source of truth -const ECO_L1_TOKEN_ADDRESS: Address = - '0x3E87d4d9E69163E7590f9b39a70853cf25e5ABE3' -const ECO_L2_TOKEN_ADDRESS: Address = - '0xD2f598c826429EEe7c071C02735549aCd88F2c09' - -const getERC20TokenBalance = async ( - publicClient: PublicClient, - tokenAddress: Address, - ownerAddress: Address -) => { - const result = await publicClient.readContract({ - address: tokenAddress, - abi: [ - { - inputs: [{ name: 'owner', type: 'address' }], - name: 'balanceOf', - outputs: [{ name: '', type: 'uint256' }], - stateMutability: 'view', - type: 'function', - }, - ], - functionName: 'balanceOf', - args: [ownerAddress], - }) - - return result as bigint -} - -const getL1ERC20TokenBalance = async (ownerAddress: Address) => { - return getERC20TokenBalance( - l1PublicClient, - ECO_L1_TOKEN_ADDRESS, - ownerAddress - ) -} - -const getL2ERC20TokenBalance = async (ownerAddress: Address) => { - return getERC20TokenBalance( - l2PublicClient, - ECO_L2_TOKEN_ADDRESS, - ownerAddress - ) -} - -describe.skip('ECO token', () => { - it('sdk should be able to deposit to l1 bridge contract correctly', async () => { - await l1TestClient.impersonateAccount({ address: ECO_WHALE }) - - const l1EcoWhaleSigner = await l1Provider.getSigner(ECO_WHALE) - const preBridgeL1EcoWhaleBalance = await getL1ERC20TokenBalance(ECO_WHALE) - - const crossChainMessenger = new CrossChainMessenger({ - l1SignerOrProvider: l1EcoWhaleSigner, - l2SignerOrProvider: l2Provider, - l1ChainId: 5, - l2ChainId: 420, - bedrock: true, - bridges: BRIDGE_ADAPTER_DATA[L2ChainID.OPTIMISM_GOERLI], - }) - - await crossChainMessenger.approveERC20( - ECO_L1_TOKEN_ADDRESS, - ECO_L2_TOKEN_ADDRESS, - ethers.utils.parseEther('0.1') - ) - - const txResponse = await crossChainMessenger.depositERC20( - ECO_L1_TOKEN_ADDRESS, - ECO_L2_TOKEN_ADDRESS, - ethers.utils.parseEther('0.1') - ) - - await txResponse.wait() - - const l1EcoWhaleBalance = await getL1ERC20TokenBalance(ECO_WHALE) - expect(l1EcoWhaleBalance).toEqual( - preBridgeL1EcoWhaleBalance - parseEther('0.1') - ) - }, 20_000) - - it('sdk should be able to withdraw into the l2 bridge contract correctly', async () => { - await l2TestClient.impersonateAccount({ address: ECO_WHALE }) - const l2EcoWhaleSigner = await l2Provider.getSigner(ECO_WHALE) - - const preBridgeL2EcoWhaleBalance = await getL2ERC20TokenBalance(ECO_WHALE) - - const crossChainMessenger = new CrossChainMessenger({ - l1SignerOrProvider: l1Provider, - l2SignerOrProvider: l2EcoWhaleSigner, - l1ChainId: 5, - l2ChainId: 420, - bedrock: true, - bridges: BRIDGE_ADAPTER_DATA[L2ChainID.OPTIMISM_GOERLI], - }) - - const txResponse = await crossChainMessenger.withdrawERC20( - ECO_L1_TOKEN_ADDRESS, - ECO_L2_TOKEN_ADDRESS, - ethers.utils.parseEther('0.1') - ) - - await txResponse.wait() - - const l2EcoWhaleBalance = await getL2ERC20TokenBalance(ECO_WHALE) - expect(l2EcoWhaleBalance).toEqual( - preBridgeL2EcoWhaleBalance - parseEther('0.1') - ) - }, 20_000) -}) diff --git a/packages/sdk/test-next/failedMessages.spec.ts b/packages/sdk/test-next/failedMessages.spec.ts deleted file mode 100644 index ac2ea9554a68..000000000000 --- a/packages/sdk/test-next/failedMessages.spec.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { describe, it, expect } from 'vitest' -import { Address, Hex, encodePacked, keccak256, toHex } from 'viem' -import { ethers } from 'ethers' -import { z } from 'zod' -import { hashCrossDomainMessagev1 } from '@eth-optimism/core-utils' -import { optimismSepolia } from 'viem/chains' - -import { CONTRACT_ADDRESSES, CrossChainMessenger } from '../src' -import { sepoliaPublicClient, sepoliaTestClient } from './testUtils/viemClients' -import { sepoliaProvider, opSepoliaProvider } from './testUtils/ethersProviders' - -/** - * Generated on Mar 28 2024 using - * `forge inspect L1CrossDomainMessenger storage-layout` - **/ -const failedMessagesStorageLayout = { - astId: 7989, - contract: 'src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger', - label: 'failedMessages', - offset: 0, - slot: 206n, - type: 't_mapping(t_bytes32,t_bool)', -} - -const sepoliaCrossDomainMessengerAddress = CONTRACT_ADDRESSES[ - optimismSepolia.id -].l1.L1CrossDomainMessenger as Address - -const setMessageAsFailed = async (tx: Hex) => { - const message = await crossChainMessenger.toCrossChainMessage(tx) - const messageHash = hashCrossDomainMessagev1( - message.messageNonce, - message.sender, - message.target, - message.value, - message.minGasLimit, - message.message - ) as Hex - - const keySlotHash = keccak256( - encodePacked( - ['bytes32', 'uint256'], - [messageHash, failedMessagesStorageLayout.slot] - ) - ) - return sepoliaTestClient.setStorageAt({ - address: sepoliaCrossDomainMessengerAddress, - index: keySlotHash, - value: toHex(true, { size: 32 }), - }) -} - -const E2E_PRIVATE_KEY = z - .string() - .describe('Private key') - // Mnemonic: test test test test test test test test test test test junk - .default('0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6') - .parse(import.meta.env.VITE_E2E_PRIVATE_KEY) - -const sepoliaWallet = new ethers.Wallet(E2E_PRIVATE_KEY, sepoliaProvider) -const crossChainMessenger = new CrossChainMessenger({ - l1SignerOrProvider: sepoliaWallet, - l2SignerOrProvider: opSepoliaProvider, - l1ChainId: 11155111, - l2ChainId: 11155420, - bedrock: true, -}) - -describe('replaying failed messages', () => { - it('should be able to replay failed messages', async () => { - // Grab an existing tx but mark it as failed - // @see https://sepolia-optimism.etherscan.io/tx/0x28249a36f764afab583a4633d59ff6c2a0e934293062bffa7cedb662e5da9abd - const tx = - '0x28249a36f764afab583a4633d59ff6c2a0e934293062bffa7cedb662e5da9abd' - - await setMessageAsFailed(tx) - - // debugging ethers.js is brutal because of error message so let's instead - // send the tx with viem. If it succeeds we will then test with ethers - const txData = - await crossChainMessenger.populateTransaction.finalizeMessage(tx) - - await sepoliaPublicClient.call({ - data: txData.data as Hex, - to: txData.to as Address, - }) - - // finalize the message - const finalizeTx = await crossChainMessenger.finalizeMessage(tx) - - const receipt = await finalizeTx.wait() - - expect(receipt.transactionHash).toBeDefined() - }) -}) diff --git a/packages/sdk/test-next/messageStatus.spec.ts b/packages/sdk/test-next/messageStatus.spec.ts deleted file mode 100644 index c66eecc9e353..000000000000 --- a/packages/sdk/test-next/messageStatus.spec.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { describe, expect, it } from 'vitest' - -import { CrossChainMessenger, MessageStatus } from '../src' -import { l1Provider, l2Provider } from './testUtils/ethersProviders' - -const crossChainMessenger = new CrossChainMessenger({ - l1SignerOrProvider: l1Provider, - l2SignerOrProvider: l2Provider, - l1ChainId: 5, - l2ChainId: 420, - bedrock: true, -}) - -describe.skip('getMessageStatus', () => { - it(`should be able to correctly find a finalized withdrawal`, async () => { - /** - * Tx hash of a withdrawal - * - * @see https://goerli-optimism.etherscan.io/tx/0x8fb235a61079f3fa87da66e78c9da075281bc4ba5f1af4b95197dd9480e03bb5 - */ - const txWithdrawalHash = - '0x8fb235a61079f3fa87da66e78c9da075281bc4ba5f1af4b95197dd9480e03bb5' - - const txReceipt = await l2Provider.getTransactionReceipt(txWithdrawalHash) - - expect(txReceipt).toBeDefined() - - expect( - await crossChainMessenger.getMessageStatus( - txWithdrawalHash, - 0, - 9370789 - 1000, - 9370789 - ) - ).toBe(MessageStatus.RELAYED) - }, 20_000) - - it(`should return READY_FOR_RELAY if not in block range`, async () => { - const txWithdrawalHash = - '0x8fb235a61079f3fa87da66e78c9da075281bc4ba5f1af4b95197dd9480e03bb5' - - const txReceipt = await l2Provider.getTransactionReceipt(txWithdrawalHash) - - expect(txReceipt).toBeDefined() - - expect( - await crossChainMessenger.getMessageStatus(txWithdrawalHash, 0, 0, 0) - ).toBe(MessageStatus.READY_FOR_RELAY) - }, 20_000) -}) diff --git a/packages/sdk/test-next/proveMessage.spec.ts b/packages/sdk/test-next/proveMessage.spec.ts deleted file mode 100644 index b3a7da4cfda4..000000000000 --- a/packages/sdk/test-next/proveMessage.spec.ts +++ /dev/null @@ -1,88 +0,0 @@ -import ethers from 'ethers' -import { describe, expect, it } from 'vitest' -import { z } from 'zod' - -import { CrossChainMessenger } from '../src' -import { l1Provider, l2Provider } from './testUtils/ethersProviders' - -/** - * This test repros the bug where legacy withdrawals are not provable - */ -/******* -Cast results from runnning cast tx and cast receipt on the l2 tx hash - -cast tx 0xd66fda632b51a8b25a9d260d70da8be57b9930c4616370861526335c3e8eef81 --rpc-url https://goerli.optimism.io - -blockHash 0x67956cee3de38d49206d34b77f560c4c371d77b36584047ade8bf7b67bf210c0 -blockNumber 2337599 -from 0x1d86C2F5cc7fBEc35FEDbd3293b5004A841EA3F0 -gas 118190 -gasPrice 1 -hash 0xd66fda632b51a8b25a9d260d70da8be57b9930c4616370861526335c3e8eef81 -input 0x32b7006d000000000000000000000000deaddeaddeaddeaddeaddeaddeaddeaddead000000000000000000000000000000000000000000000000000000005af3107a4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000 -nonce 10 -r 0x7e58c5dbb37f57303d936562d89a75a20be2a45f54c5d44dc73119453adf2e08 -s 0x1bc952bd048dd38668a0c3b4bac202945c5a150465b551dd2a768e54a746e2c4 -to 0x4200000000000000000000000000000000000010 -transactionIndex 0 -v 875 -value 0 -index 2337598 -l1BlockNumber 7850866 -l1Timestamp 1666982083 -queueOrigin sequencer -rawTransaction 0xf901070a018301cdae94420000000000000000000000000000000000001080b8a432b7006d000000000000000000000000deaddeaddeaddeaddeaddeaddeaddeaddead000000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000082036ba07e58c5dbb37f57303d936562d89a75a20be2a45f54c5d44dc73119453adf2e08a01bc952bd048dd38668a0c3b4bac202945c5a150465b551dd2a768e54a746e2c4 - -cast tx 0xd66fda632b51a8b25a9d260d70da8be57b9930c4616370861526335c3e8eef81 --rpc-url https://goerli.optimism.io - -blockHash 0x67956cee3de38d49206d34b77f560c4c371d77b36584047ade8bf7b67bf210c0 -blockNumber 2337599 -contractAddress -cumulativeGasUsed 115390 -effectiveGasPrice -gasUsed 115390 -logs [{"address":"0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x0000000000000000000000001d86c2f5cc7fbec35fedbd3293b5004a841ea3f0","0x0000000000000000000000000000000000000000000000000000000000000000"],"data":"0x00000000000000000000000000000000000000000000000000005af3107a4000","blockHash":"0x67956cee3de38d49206d34b77f560c4c371d77b36584047ade8bf7b67bf210c0","blockNumber":"0x23ab3f","transactionHash":"0xd66fda632b51a8b25a9d260d70da8be57b9930c4616370861526335c3e8eef81","transactionIndex":"0x0","logIndex":"0x0","removed":false},{"address":"0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000","topics":["0xcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5","0x0000000000000000000000001d86c2f5cc7fbec35fedbd3293b5004a841ea3f0"],"data":"0x00000000000000000000000000000000000000000000000000005af3107a4000","blockHash":"0x67956cee3de38d49206d34b77f560c4c371d77b36584047ade8bf7b67bf210c0","blockNumber":"0x23ab3f","transactionHash":"0xd66fda632b51a8b25a9d260d70da8be57b9930c4616370861526335c3e8eef81","transactionIndex":"0x0","logIndex":"0x1","removed":false},{"address":"0x4200000000000000000000000000000000000007","topics":["0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a","0x000000000000000000000000636af16bf2f682dd3109e60102b8e1a089fedaa8"],"data":"0x00000000000000000000000042000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000001a048000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a41532ec340000000000000000000000001d86c2f5cc7fbec35fedbd3293b5004a841ea3f00000000000000000000000001d86c2f5cc7fbec35fedbd3293b5004a841ea3f000000000000000000000000000000000000000000000000000005af3107a40000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","blockHash":"0x67956cee3de38d49206d34b77f560c4c371d77b36584047ade8bf7b67bf210c0","blockNumber":"0x23ab3f","transactionHash":"0xd66fda632b51a8b25a9d260d70da8be57b9930c4616370861526335c3e8eef81","transactionIndex":"0x0","logIndex":"0x2","removed":false},{"address":"0x4200000000000000000000000000000000000010","topics":["0x73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e","0x0000000000000000000000000000000000000000000000000000000000000000","0x000000000000000000000000deaddeaddeaddeaddeaddeaddeaddeaddead0000","0x0000000000000000000000001d86c2f5cc7fbec35fedbd3293b5004a841ea3f0"],"data":"0x0000000000000000000000001d86c2f5cc7fbec35fedbd3293b5004a841ea3f000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000","blockHash":"0x67956cee3de38d49206d34b77f560c4c371d77b36584047ade8bf7b67bf210c0","blockNumber":"0x23ab3f","transactionHash":"0xd66fda632b51a8b25a9d260d70da8be57b9930c4616370861526335c3e8eef81","transactionIndex":"0x0","logIndex":"0x3","removed":false}] -logsBloom 0x00000000000000000010000000000000000000000000001000100000001000000000000000000080000000000000008000000800000000000000000000000240000000002000400040000008000000000000000000000000000000000000000100000000020000000000000000000800080000000040000000000010000000000000000000000000000000000000000000800000000000000020000000200000000000000000000001000000000000000000200000000000000000000000000000000002000000200000000400000000000002100000000000000000000020001000000000000000000000000000000000000000000000000000010000008000 -root -status 1 -transactionHash 0xd66fda632b51a8b25a9d260d70da8be57b9930c4616370861526335c3e8eef81 -transactionIndex 0 -type - */ - -const E2E_PRIVATE_KEY = z - .string() - .describe('Private key') - .parse(import.meta.env.VITE_E2E_PRIVATE_KEY) - -const l1Wallet = new ethers.Wallet(E2E_PRIVATE_KEY, l1Provider) -const crossChainMessenger = new CrossChainMessenger({ - l1SignerOrProvider: l1Wallet, - l2SignerOrProvider: l2Provider, - l1ChainId: 5, - l2ChainId: 420, - bedrock: true, -}) - -describe.skip('prove message', () => { - it(`should prove a legacy tx - `, async () => { - /** - * Tx hash of legacy withdrawal - * - * @see https://goerli-optimism.etherscan.io/tx/0xd66fda632b51a8b25a9d260d70da8be57b9930c4616370861526335c3e8eef81 - */ - const txWithdrawalHash = - '0xd66fda632b51a8b25a9d260d70da8be57b9930c4616370861526335c3e8eef81' - - const txReceipt = await l2Provider.getTransactionReceipt(txWithdrawalHash) - - expect(txReceipt).toBeDefined() - - const tx = await crossChainMessenger.proveMessage(txWithdrawalHash) - const receipt = await tx.wait() - - // A 1 means the transaction was successful - expect(receipt.status).toBe(1) - }, 20_000) -}) diff --git a/packages/sdk/test-next/testUtils/ethersProviders.ts b/packages/sdk/test-next/testUtils/ethersProviders.ts deleted file mode 100644 index 7098afe0015c..000000000000 --- a/packages/sdk/test-next/testUtils/ethersProviders.ts +++ /dev/null @@ -1,58 +0,0 @@ -import ethers from 'ethers' -import { z } from 'zod' - -/** - * @deprecated - */ -const E2E_RPC_URL_L1 = z - .string() - .url() - .default('http://localhost:8545') - .describe('L1 ethereum rpc Url') - .parse(import.meta.env.VITE_E2E_RPC_URL_L1) -/** - * @deprecated - */ -const E2E_RPC_URL_L2 = z - .string() - .url() - .default('http://localhost:9545') - .describe('L2 ethereum rpc Url') - .parse(import.meta.env.VITE_E2E_RPC_URL_L2) - -const jsonRpcHeaders = { 'User-Agent': 'eth-optimism/@gateway/backend' } -/** - * @deprecated - */ -export const l1Provider = new ethers.providers.JsonRpcProvider({ - url: E2E_RPC_URL_L1, - headers: jsonRpcHeaders, -}) -/** - * @deprecated - */ -export const l2Provider = new ethers.providers.JsonRpcProvider({ - url: E2E_RPC_URL_L2, - headers: jsonRpcHeaders, -}) - -export const E2E_RPC_URL_SEPOLIA = z - .string() - .url() - .default('http://localhost:8545') - .describe('SEPOLIA ethereum rpc Url') - .parse(import.meta.env.VITE_E2E_RPC_URL_SEPOLIA) -export const E2E_RPC_URL_OP_SEPOLIA = z - .string() - .url() - .default('http://localhost:9545') - .describe('OP_SEPOLIA ethereum rpc Url') - .parse(import.meta.env.VITE_E2E_RPC_URL_OP_SEPOLIA) -export const sepoliaProvider = new ethers.providers.JsonRpcProvider({ - url: E2E_RPC_URL_SEPOLIA, - headers: jsonRpcHeaders, -}) -export const opSepoliaProvider = new ethers.providers.JsonRpcProvider({ - url: E2E_RPC_URL_OP_SEPOLIA, - headers: jsonRpcHeaders, -}) diff --git a/packages/sdk/test-next/testUtils/viemClients.ts b/packages/sdk/test-next/testUtils/viemClients.ts deleted file mode 100644 index a33f4c6721d0..000000000000 --- a/packages/sdk/test-next/testUtils/viemClients.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { - createTestClient, - createPublicClient, - createWalletClient, - http, -} from 'viem' -import { goerli, optimismGoerli, optimismSepolia, sepolia } from 'viem/chains' - -import { E2E_RPC_URL_OP_SEPOLIA, E2E_RPC_URL_SEPOLIA } from './ethersProviders' - -/** - * @deprecated - */ -const L1_CHAIN = goerli -/** - * @deprecated - */ -const L2_CHAIN = optimismGoerli -/** - * @deprecated - */ -const L1_RPC_URL = 'http://localhost:8545' -/** - * @deprecated - */ -const L2_RPC_URL = 'http://localhost:9545' - -/** - * @deprecated - */ -export const l1TestClient = createTestClient({ - mode: 'anvil', - chain: L1_CHAIN, - transport: http(L1_RPC_URL), -}) - -/** - * @deprecated - */ -export const l2TestClient = createTestClient({ - mode: 'anvil', - chain: L2_CHAIN, - transport: http(L2_RPC_URL), -}) - -/** - * @deprecated - */ -export const l1PublicClient = createPublicClient({ - chain: L1_CHAIN, - transport: http(L1_RPC_URL), -}) - -/** - * @deprecated - */ -export const l2PublicClient = createPublicClient({ - chain: L2_CHAIN, - transport: http(L2_RPC_URL), -}) - -/** - * @deprecated - */ -export const l1WalletClient = createWalletClient({ - chain: L1_CHAIN, - transport: http(L1_RPC_URL), -}) - -/** - * @deprecated - */ -export const l2WalletClient = createWalletClient({ - chain: L2_CHAIN, - transport: http(L2_RPC_URL), -}) - -const SEPOLIA_CHAIN = sepolia -const OP_SEPOLIA_CHAIN = optimismSepolia - -export const sepoliaTestClient = createTestClient({ - mode: 'anvil', - chain: SEPOLIA_CHAIN, - transport: http(E2E_RPC_URL_SEPOLIA), -}) - -export const opSepoliaTestClient = createTestClient({ - mode: 'anvil', - chain: OP_SEPOLIA_CHAIN, - transport: http(E2E_RPC_URL_OP_SEPOLIA), -}) - -export const sepoliaPublicClient = createPublicClient({ - chain: SEPOLIA_CHAIN, - transport: http(E2E_RPC_URL_SEPOLIA), -}) - -export const opSepoliaPublicClient = createPublicClient({ - chain: OP_SEPOLIA_CHAIN, - transport: http(E2E_RPC_URL_OP_SEPOLIA), -}) - -export const sepoliaWalletClient = createWalletClient({ - chain: SEPOLIA_CHAIN, - transport: http(E2E_RPC_URL_SEPOLIA), -}) - -export const opSepoliaWalletClient = createWalletClient({ - chain: OP_SEPOLIA_CHAIN, - transport: http(E2E_RPC_URL_OP_SEPOLIA), -}) diff --git a/packages/sdk/test/contracts/AbsolutelyNothing.sol b/packages/sdk/test/contracts/AbsolutelyNothing.sol deleted file mode 100644 index 0c0447951d7e..000000000000 --- a/packages/sdk/test/contracts/AbsolutelyNothing.sol +++ /dev/null @@ -1,7 +0,0 @@ -pragma solidity ^0.8.9; - -contract AbsolutelyNothing { - function doAbsolutelyNothing() public { - return; - } -} diff --git a/packages/sdk/test/contracts/ICrossDomainMessenger.sol b/packages/sdk/test/contracts/ICrossDomainMessenger.sol deleted file mode 100644 index ead9da44cf3f..000000000000 --- a/packages/sdk/test/contracts/ICrossDomainMessenger.sol +++ /dev/null @@ -1,45 +0,0 @@ -pragma solidity ^0.8.9; - -// Right now this is copy/pasted from the contracts package. We need to do this because we don't -// currently copy the contracts into the root of the contracts package in the correct way until -// we bundle the contracts package for publication. As a result, we can't properly use the -// package the way we want to from inside the monorepo (yet). Needs to be fixed as part of a -// separate pull request. - -interface ICrossDomainMessenger { - /********** - * Events * - **********/ - - event SentMessage( - address indexed target, - address sender, - bytes message, - uint256 messageNonce, - uint256 gasLimit - ); - event RelayedMessage(bytes32 indexed msgHash); - event FailedRelayedMessage(bytes32 indexed msgHash); - - /************* - * Variables * - *************/ - - function xDomainMessageSender() external view returns (address); - - /******************** - * Public Functions * - ********************/ - - /** - * Sends a cross domain message to the target messenger. - * @param _target Target contract address. - * @param _message Message to send to the target. - * @param _gasLimit Gas limit for the provided message. - */ - function sendMessage( - address _target, - bytes calldata _message, - uint32 _gasLimit - ) external; -} diff --git a/packages/sdk/test/contracts/MessageEncodingHelper.sol b/packages/sdk/test/contracts/MessageEncodingHelper.sol deleted file mode 100644 index b411b3013490..000000000000 --- a/packages/sdk/test/contracts/MessageEncodingHelper.sol +++ /dev/null @@ -1,42 +0,0 @@ -pragma solidity ^0.8.9; - -contract MessageEncodingHelper { - // This function is copy/pasted from the Lib_CrossDomainUtils library. We have to do this - // because the Lib_CrossDomainUtils library does not provide a function for hashing. Instead, - // I'm duplicating the functionality of the library here and exposing an additional method that - // does the required hashing. This is fragile and will break if we ever update the way that our - // contracts hash the encoded data, but at least it works for now. - // TODO: Next time we're planning to upgrade the contracts, make sure that the library also - // contains a function for hashing. - function encodeXDomainCalldata( - address _target, - address _sender, - bytes memory _message, - uint256 _messageNonce - ) public pure returns (bytes memory) { - return - abi.encodeWithSignature( - "relayMessage(address,address,bytes,uint256)", - _target, - _sender, - _message, - _messageNonce - ); - } - - function hashXDomainCalldata( - address _target, - address _sender, - bytes memory _message, - uint256 _messageNonce - ) public pure returns (bytes32) { - return keccak256( - encodeXDomainCalldata( - _target, - _sender, - _message, - _messageNonce - ) - ); - } -} diff --git a/packages/sdk/test/contracts/MockBridge.sol b/packages/sdk/test/contracts/MockBridge.sol deleted file mode 100644 index 7f3b5155cfb1..000000000000 --- a/packages/sdk/test/contracts/MockBridge.sol +++ /dev/null @@ -1,156 +0,0 @@ -pragma solidity ^0.8.9; - -import { MockMessenger } from "./MockMessenger.sol"; - -contract MockBridge { - event ETHDepositInitiated( - address indexed _from, - address indexed _to, - uint256 _amount, - bytes _data - ); - - event ERC20DepositInitiated( - address indexed _l1Token, - address indexed _l2Token, - address indexed _from, - address _to, - uint256 _amount, - bytes _data - ); - - event ERC20WithdrawalFinalized( - address indexed _l1Token, - address indexed _l2Token, - address indexed _from, - address _to, - uint256 _amount, - bytes _data - ); - - event WithdrawalInitiated( - address indexed _l1Token, - address indexed _l2Token, - address indexed _from, - address _to, - uint256 _amount, - bytes _data - ); - - event DepositFinalized( - address indexed _l1Token, - address indexed _l2Token, - address indexed _from, - address _to, - uint256 _amount, - bytes _data - ); - - event DepositFailed( - address indexed _l1Token, - address indexed _l2Token, - address indexed _from, - address _to, - uint256 _amount, - bytes _data - ); - - struct TokenEventStruct { - address l1Token; - address l2Token; - address from; - address to; - uint256 amount; - bytes data; - } - - MockMessenger public messenger; - - constructor(MockMessenger _messenger) { - messenger = _messenger; - } - - function emitERC20DepositInitiated( - TokenEventStruct memory _params - ) public { - emit ERC20DepositInitiated(_params.l1Token, _params.l2Token, _params.from, _params.to, _params.amount, _params.data); - messenger.triggerSentMessageEvent( - MockMessenger.SentMessageEventParams( - address(0), - address(0), - hex"1234", - 1234, - 12345678, - 0 - ) - ); - } - - function emitERC20WithdrawalFinalized( - TokenEventStruct memory _params - ) public { - emit ERC20WithdrawalFinalized(_params.l1Token, _params.l2Token, _params.from, _params.to, _params.amount, _params.data); - } - - function emitWithdrawalInitiated( - TokenEventStruct memory _params - ) public { - emit WithdrawalInitiated(_params.l1Token, _params.l2Token, _params.from, _params.to, _params.amount, _params.data); - messenger.triggerSentMessageEvent( - MockMessenger.SentMessageEventParams( - address(0), - address(0), - hex"1234", - 1234, - 12345678, - 0 - ) - ); - } - - function emitDepositFinalized( - TokenEventStruct memory _params - ) public { - emit DepositFinalized(_params.l1Token, _params.l2Token, _params.from, _params.to, _params.amount, _params.data); - } - - function emitDepositFailed( - TokenEventStruct memory _params - ) public { - emit DepositFailed(_params.l1Token, _params.l2Token, _params.from, _params.to, _params.amount, _params.data); - } - - function depositETH( - uint32 _l2GasLimit, - bytes memory _data - ) - public - payable - { - emit ETHDepositInitiated( - msg.sender, - msg.sender, - msg.value, - _data - ); - } - - function withdraw( - address _l2Token, - uint256 _amount, - uint32 _l1Gas, - bytes calldata _data - ) - public - payable - { - emit WithdrawalInitiated( - address(0), - _l2Token, - msg.sender, - msg.sender, - _amount, - _data - ); - } -} diff --git a/packages/sdk/test/contracts/MockMessenger.sol b/packages/sdk/test/contracts/MockMessenger.sol deleted file mode 100644 index 1f7b3d8cf737..000000000000 --- a/packages/sdk/test/contracts/MockMessenger.sol +++ /dev/null @@ -1,98 +0,0 @@ -pragma solidity ^0.8.9; - -import { ICrossDomainMessenger } from "./ICrossDomainMessenger.sol"; - -contract MockMessenger is ICrossDomainMessenger { - function xDomainMessageSender() public view returns (address) { - return address(0); - } - - uint256 public nonce; - mapping (bytes32 => bool) public successfulMessages; - mapping (bytes32 => bool) public failedMessages; - - // Empty function to satisfy the interface. - function sendMessage( - address _target, - bytes calldata _message, - uint32 _gasLimit - ) public { - emit SentMessage( - _target, - msg.sender, - _message, - nonce, - _gasLimit - ); - nonce++; - } - - function replayMessage( - address _target, - address _sender, - bytes calldata _message, - uint256 _queueIndex, - uint32 _oldGasLimit, - uint32 _newGasLimit - ) public { - emit SentMessage( - _target, - _sender, - _message, - nonce, - _newGasLimit - ); - nonce++; - } - - struct SentMessageEventParams { - address target; - address sender; - bytes message; - uint256 messageNonce; - uint256 minGasLimit; - uint256 value; - } - - function doNothing() public { - return; - } - - function triggerSentMessageEvent( - SentMessageEventParams memory _params - ) public { - emit SentMessage( - _params.target, - _params.sender, - _params.message, - _params.messageNonce, - _params.minGasLimit - ); - } - - function triggerSentMessageEvents( - SentMessageEventParams[] memory _params - ) public { - for (uint256 i = 0; i < _params.length; i++) { - triggerSentMessageEvent(_params[i]); - } - } - - function triggerRelayedMessageEvents( - bytes32[] memory _params - ) public { - for (uint256 i = 0; i < _params.length; i++) { - emit RelayedMessage(_params[i]); - successfulMessages[_params[i]] = true; - } - } - - function triggerFailedRelayedMessageEvents( - bytes32[] memory _params - ) public { - for (uint256 i = 0; i < _params.length; i++) { - emit FailedRelayedMessage(_params[i]); - failedMessages[_params[i]] = true; - } - } -} diff --git a/packages/sdk/test/contracts/MockSCC.sol b/packages/sdk/test/contracts/MockSCC.sol deleted file mode 100644 index 56f37de38cc8..000000000000 --- a/packages/sdk/test/contracts/MockSCC.sol +++ /dev/null @@ -1,48 +0,0 @@ -pragma solidity ^0.8.9; - -contract MockSCC { - event StateBatchAppended( - uint256 indexed _batchIndex, - bytes32 _batchRoot, - uint256 _batchSize, - uint256 _prevTotalElements, - bytes _extraData - ); - - struct StateBatchAppendedArgs { - uint256 batchIndex; - bytes32 batchRoot; - uint256 batchSize; - uint256 prevTotalElements; - bytes extraData; - } - - // Window in seconds, will resolve to 100 blocks. - uint256 public FRAUD_PROOF_WINDOW = 1500; - uint256 public batches = 0; - StateBatchAppendedArgs public sbaParams; - - function getTotalBatches() public view returns (uint256) { - return batches; - } - - function setSBAParams( - StateBatchAppendedArgs memory _args - ) public { - sbaParams = _args; - } - - function appendStateBatch( - bytes32[] memory _roots, - uint256 _shouldStartAtIndex - ) public { - batches++; - emit StateBatchAppended( - sbaParams.batchIndex, - sbaParams.batchRoot, - sbaParams.batchSize, - sbaParams.prevTotalElements, - sbaParams.extraData - ); - } -} diff --git a/packages/sdk/test/cross-chain-messenger.spec.ts b/packages/sdk/test/cross-chain-messenger.spec.ts deleted file mode 100644 index 13a59348207d..000000000000 --- a/packages/sdk/test/cross-chain-messenger.spec.ts +++ /dev/null @@ -1,1664 +0,0 @@ -import { Provider } from '@ethersproject/abstract-provider' -import { expectApprox, hashCrossDomainMessage } from '@eth-optimism/core-utils' -import { predeploys } from '@eth-optimism/contracts' -import { Contract } from 'ethers' -import { ethers } from 'hardhat' - -import { expect } from './setup' -import { - MessageDirection, - CONTRACT_ADDRESSES, - omit, - MessageStatus, - CrossChainMessage, - CrossChainMessenger, - StandardBridgeAdapter, - ETHBridgeAdapter, - L1ChainID, - L2ChainID, - IGNORABLE_CONTRACTS, -} from '../src' -import { DUMMY_MESSAGE, DUMMY_EXTENDED_MESSAGE } from './helpers' - -describe('CrossChainMessenger', () => { - let l1Signer: any - let l2Signer: any - before(async () => { - ;[l1Signer, l2Signer] = await ethers.getSigners() - }) - - describe('construction', () => { - describe('when given an ethers provider for the L1 provider', () => { - it('should use the provider as the L1 provider', () => { - const messenger = new CrossChainMessenger({ - bedrock: false, - l1SignerOrProvider: ethers.provider, - l2SignerOrProvider: ethers.provider, - l1ChainId: L1ChainID.MAINNET, - l2ChainId: L2ChainID.OPTIMISM, - }) - - expect(messenger.l1Provider).to.equal(ethers.provider) - }) - }) - - describe('when given an ethers provider for the L2 provider', () => { - it('should use the provider as the L2 provider', () => { - const messenger = new CrossChainMessenger({ - bedrock: false, - l1SignerOrProvider: ethers.provider, - l2SignerOrProvider: ethers.provider, - l1ChainId: L1ChainID.MAINNET, - l2ChainId: L2ChainID.OPTIMISM, - }) - - expect(messenger.l2Provider).to.equal(ethers.provider) - }) - }) - - describe('when given a string as the L1 provider', () => { - it('should create a JSON-RPC provider for the L1 provider', () => { - const messenger = new CrossChainMessenger({ - bedrock: false, - l1SignerOrProvider: 'https://localhost:8545', - l2SignerOrProvider: ethers.provider, - l1ChainId: L1ChainID.MAINNET, - l2ChainId: L2ChainID.OPTIMISM, - }) - - expect(Provider.isProvider(messenger.l1Provider)).to.be.true - }) - }) - - describe('when given a string as the L2 provider', () => { - it('should create a JSON-RPC provider for the L2 provider', () => { - const messenger = new CrossChainMessenger({ - bedrock: false, - l1SignerOrProvider: ethers.provider, - l2SignerOrProvider: 'https://localhost:8545', - l1ChainId: L1ChainID.MAINNET, - l2ChainId: L2ChainID.OPTIMISM, - }) - - expect(Provider.isProvider(messenger.l2Provider)).to.be.true - }) - }) - - describe('when given a bad L1 chain ID', () => { - it('should throw an error', () => { - expect(() => { - new CrossChainMessenger({ - bedrock: false, - l1SignerOrProvider: ethers.provider, - l2SignerOrProvider: ethers.provider, - l1ChainId: undefined as any, - l2ChainId: L2ChainID.OPTIMISM, - }) - }).to.throw('L1 chain ID is missing or invalid') - }) - }) - - describe('when given a bad L2 chain ID', () => { - it('should throw an error', () => { - expect(() => { - new CrossChainMessenger({ - bedrock: false, - l1SignerOrProvider: ethers.provider, - l2SignerOrProvider: ethers.provider, - l1ChainId: L1ChainID.MAINNET, - l2ChainId: undefined as any, - }) - }).to.throw('L2 chain ID is missing or invalid') - }) - }) - - describe('when no custom contract addresses are provided', () => { - describe('when given a known chain ID', () => { - it('should use the contract addresses for the known chain ID', () => { - const messenger = new CrossChainMessenger({ - bedrock: false, - l1SignerOrProvider: ethers.provider, - l2SignerOrProvider: 'https://localhost:8545', - l1ChainId: L1ChainID.MAINNET, - l2ChainId: L2ChainID.OPTIMISM, - }) - - const addresses = CONTRACT_ADDRESSES[messenger.l2ChainId] - for (const [contractName, contractAddress] of Object.entries( - addresses.l1 - )) { - const contract = messenger.contracts.l1[contractName] - expect(contract.address).to.equal(contractAddress) - } - for (const [contractName, contractAddress] of Object.entries( - addresses.l2 - )) { - const contract = messenger.contracts.l2[contractName] - expect(contract.address).to.equal(contractAddress) - } - }) - }) - - describe('when given an unknown L2 chain ID', () => { - it('should throw an error', () => { - expect(() => { - new CrossChainMessenger({ - bedrock: false, - l1SignerOrProvider: ethers.provider, - l2SignerOrProvider: 'https://localhost:8545', - l1ChainId: L1ChainID.MAINNET, - l2ChainId: 1234, - }) - }).to.throw() - }) - }) - }) - - describe('when custom contract addresses are provided', () => { - describe('when given a known chain ID', () => { - it('should use known addresses except where custom addresses are given', () => { - const overrides = { - l1: { - L1CrossDomainMessenger: '0x' + '11'.repeat(20), - }, - l2: { - L2CrossDomainMessenger: '0x' + '22'.repeat(20), - }, - } - const messenger = new CrossChainMessenger({ - bedrock: false, - l1SignerOrProvider: ethers.provider, - l2SignerOrProvider: 'https://localhost:8545', - l1ChainId: L1ChainID.MAINNET, - l2ChainId: L2ChainID.OPTIMISM, - contracts: overrides, - }) - - const addresses = CONTRACT_ADDRESSES[messenger.l2ChainId] - for (const [contractName, contractAddress] of Object.entries( - addresses.l1 - )) { - if (overrides.l1[contractName]) { - const contract = messenger.contracts.l1[contractName] - expect(contract.address).to.equal(overrides.l1[contractName]) - } else { - const contract = messenger.contracts.l1[contractName] - expect(contract.address).to.equal(contractAddress) - } - } - for (const [contractName, contractAddress] of Object.entries( - addresses.l2 - )) { - if (overrides.l2[contractName]) { - const contract = messenger.contracts.l2[contractName] - expect(contract.address).to.equal(overrides.l2[contractName]) - } else { - const contract = messenger.contracts.l2[contractName] - expect(contract.address).to.equal(contractAddress) - } - } - }) - }) - - describe('when given an unknown L2 chain ID', () => { - describe('when all L1 addresses are provided', () => { - it('should use custom addresses where provided', () => { - const overrides = { - l1: { - AddressManager: '0x' + '11'.repeat(20), - L1CrossDomainMessenger: '0x' + '12'.repeat(20), - L1StandardBridge: '0x' + '13'.repeat(20), - StateCommitmentChain: '0x' + '14'.repeat(20), - CanonicalTransactionChain: '0x' + '15'.repeat(20), - BondManager: '0x' + '16'.repeat(20), - OptimismPortal: '0x' + '17'.repeat(20), - L2OutputOracle: '0x' + '18'.repeat(20), - }, - l2: { - L2CrossDomainMessenger: '0x' + '22'.repeat(20), - }, - } - - const messenger = new CrossChainMessenger({ - bedrock: false, - l1SignerOrProvider: ethers.provider, - l2SignerOrProvider: 'https://localhost:8545', - l1ChainId: L1ChainID.MAINNET, - l2ChainId: 1234, - contracts: overrides, - }) - - const addresses = CONTRACT_ADDRESSES[L2ChainID.OPTIMISM] - for (const [contractName, contractAddress] of Object.entries( - addresses.l1 - )) { - if (overrides.l1[contractName]) { - const contract = messenger.contracts.l1[contractName] - expect(contract.address).to.equal(overrides.l1[contractName]) - } else if (!IGNORABLE_CONTRACTS.includes(contractName)) { - const contract = messenger.contracts.l1[contractName] - expect(contract.address).to.equal(contractAddress) - } - } - for (const [contractName, contractAddress] of Object.entries( - addresses.l2 - )) { - if (overrides.l2[contractName]) { - const contract = messenger.contracts.l2[contractName] - expect(contract.address).to.equal(overrides.l2[contractName]) - } else { - const contract = messenger.contracts.l2[contractName] - expect(contract.address).to.equal(contractAddress) - } - } - }) - }) - - describe('when not all L1 addresses are provided', () => { - it('should throw an error', () => { - expect(() => { - new CrossChainMessenger({ - bedrock: false, - l1SignerOrProvider: ethers.provider, - l2SignerOrProvider: 'https://localhost:8545', - l1ChainId: L1ChainID.MAINNET, - l2ChainId: 1234, - contracts: { - l1: { - // Missing some required L1 addresses - AddressManager: '0x' + '11'.repeat(20), - L1CrossDomainMessenger: '0x' + '12'.repeat(20), - L1StandardBridge: '0x' + '13'.repeat(20), - }, - l2: { - L2CrossDomainMessenger: '0x' + '22'.repeat(20), - }, - }, - }) - }).to.throw() - }) - }) - }) - }) - }) - - describe('getMessagesByTransaction', () => { - let l1Messenger: Contract - let l2Messenger: Contract - let messenger: CrossChainMessenger - beforeEach(async () => { - l1Messenger = (await ( - await ethers.getContractFactory('MockMessenger') - ).deploy()) as any - l2Messenger = (await ( - await ethers.getContractFactory('MockMessenger') - ).deploy()) as any - - messenger = new CrossChainMessenger({ - bedrock: false, - l1SignerOrProvider: ethers.provider, - l2SignerOrProvider: ethers.provider, - l1ChainId: L1ChainID.HARDHAT_LOCAL, - l2ChainId: L2ChainID.OPTIMISM_HARDHAT_LOCAL, - contracts: { - l1: { - L1CrossDomainMessenger: l1Messenger.address, - }, - l2: { - L2CrossDomainMessenger: l2Messenger.address, - }, - }, - }) - }) - - describe('when a direction is specified', () => { - describe('when the transaction exists', () => { - describe('when the transaction has messages', () => { - for (const n of [1, 2, 4, 8]) { - it(`should find ${n} messages when the transaction emits ${n} messages`, async () => { - const messages = [...Array(n)].map(() => { - return DUMMY_MESSAGE - }) - - const tx = await l1Messenger.triggerSentMessageEvents(messages) - const found = await messenger.getMessagesByTransaction(tx, { - direction: MessageDirection.L1_TO_L2, - }) - expect(found).to.deep.equal( - messages.map((message, i) => { - return { - direction: MessageDirection.L1_TO_L2, - sender: message.sender, - target: message.target, - message: message.message, - messageNonce: ethers.BigNumber.from(message.messageNonce), - minGasLimit: ethers.BigNumber.from(message.minGasLimit), - value: ethers.BigNumber.from(message.value), - logIndex: i, - blockNumber: tx.blockNumber, - transactionHash: tx.hash, - } - }) - ) - }) - } - }) - - describe('when the transaction has no messages', () => { - it('should find nothing', async () => { - const tx = await l1Messenger.doNothing() - const found = await messenger.getMessagesByTransaction(tx, { - direction: MessageDirection.L1_TO_L2, - }) - expect(found).to.deep.equal([]) - }) - }) - }) - - describe('when the transaction does not exist in the specified direction', () => { - it('should throw an error', async () => { - await expect( - messenger.getMessagesByTransaction('0x' + '11'.repeat(32), { - direction: MessageDirection.L1_TO_L2, - }) - ).to.be.rejectedWith('unable to find transaction receipt') - }) - }) - }) - - describe('when a direction is not specified', () => { - describe('when the transaction exists only on L1', () => { - describe('when the transaction has messages', () => { - for (const n of [1, 2, 4, 8]) { - it(`should find ${n} messages when the transaction emits ${n} messages`, async () => { - const messages = [...Array(n)].map(() => { - return DUMMY_MESSAGE - }) - - const tx = await l1Messenger.triggerSentMessageEvents(messages) - const found = await messenger.getMessagesByTransaction(tx) - expect(found).to.deep.equal( - messages.map((message, i) => { - return { - direction: MessageDirection.L1_TO_L2, - sender: message.sender, - target: message.target, - message: message.message, - messageNonce: ethers.BigNumber.from(message.messageNonce), - minGasLimit: ethers.BigNumber.from(message.minGasLimit), - value: ethers.BigNumber.from(message.value), - logIndex: i, - blockNumber: tx.blockNumber, - transactionHash: tx.hash, - } - }) - ) - }) - } - }) - - describe('when the transaction has no messages', () => { - it('should find nothing', async () => { - const tx = await l1Messenger.doNothing() - const found = await messenger.getMessagesByTransaction(tx) - expect(found).to.deep.equal([]) - }) - }) - }) - - describe('when the transaction exists only on L2', () => { - describe('when the transaction has messages', () => { - for (const n of [1, 2, 4, 8]) { - it(`should find ${n} messages when the transaction emits ${n} messages`, () => { - // TODO: Need support for simulating more than one network. - }) - } - }) - - describe('when the transaction has no messages', () => { - it('should find nothing', () => { - // TODO: Need support for simulating more than one network. - }) - }) - }) - - describe('when the transaction does not exist', () => { - it('should throw an error', async () => { - await expect( - messenger.getMessagesByTransaction('0x' + '11'.repeat(32)) - ).to.be.rejectedWith('unable to find transaction receipt') - }) - }) - - describe('when the transaction exists on both L1 and L2', () => { - it('should throw an error', async () => { - // TODO: Need support for simulating more than one network. - }) - }) - }) - }) - - // Skipped until getMessagesByAddress can be implemented - describe.skip('getMessagesByAddress', () => { - describe('when the address has sent messages', () => { - describe('when no direction is specified', () => { - it('should find all messages sent by the address') - }) - - describe('when a direction is specified', () => { - it('should find all messages only in the given direction') - }) - - describe('when a block range is specified', () => { - it('should find all messages within the block range') - }) - - describe('when both a direction and a block range are specified', () => { - it( - 'should find all messages only in the given direction and within the block range' - ) - }) - }) - - describe('when the address has not sent messages', () => { - it('should find nothing') - }) - }) - - describe('toCrossChainMessage', () => { - let l1Bridge: Contract - let l2Bridge: Contract - let l1Messenger: Contract - let l2Messenger: Contract - let messenger: CrossChainMessenger - beforeEach(async () => { - l1Messenger = (await ( - await ethers.getContractFactory('MockMessenger') - ).deploy()) as any - l2Messenger = (await ( - await ethers.getContractFactory('MockMessenger') - ).deploy()) as any - l1Bridge = (await ( - await ethers.getContractFactory('MockBridge') - ).deploy(l1Messenger.address)) as any - l2Bridge = (await ( - await ethers.getContractFactory('MockBridge') - ).deploy(l2Messenger.address)) as any - - messenger = new CrossChainMessenger({ - bedrock: false, - l1SignerOrProvider: ethers.provider, - l2SignerOrProvider: ethers.provider, - l1ChainId: L1ChainID.HARDHAT_LOCAL, - l2ChainId: L2ChainID.OPTIMISM_HARDHAT_LOCAL, - contracts: { - l1: { - L1CrossDomainMessenger: l1Messenger.address, - L1StandardBridge: l1Bridge.address, - }, - l2: { - L2CrossDomainMessenger: l2Messenger.address, - L2StandardBridge: l2Bridge.address, - }, - }, - bridges: { - Standard: { - Adapter: StandardBridgeAdapter, - l1Bridge: l1Bridge.address, - l2Bridge: l2Bridge.address, - }, - }, - }) - }) - - describe('when the input is a CrossChainMessage', () => { - it('should return the input', async () => { - const message = { - ...DUMMY_EXTENDED_MESSAGE, - direction: MessageDirection.L1_TO_L2, - } - - expect(await messenger.toCrossChainMessage(message)).to.deep.equal( - message - ) - }) - }) - - describe('when the input is a TokenBridgeMessage', () => { - // TODO: There are some edge cases here with custom bridges that conform to the interface but - // not to the behavioral spec. Possibly worth testing those. For now this is probably - // sufficient. - it('should return the sent message event that came after the deposit or withdrawal', async () => { - const from = '0x' + '99'.repeat(20) - const deposit = { - l1Token: '0x' + '11'.repeat(20), - l2Token: '0x' + '22'.repeat(20), - from, - to: '0x' + '44'.repeat(20), - amount: ethers.BigNumber.from(1234), - data: '0x1234', - } - - const tx = await l1Bridge.emitERC20DepositInitiated(deposit) - - const foundCrossChainMessages = - await messenger.getMessagesByTransaction(tx) - const foundTokenBridgeMessages = await messenger.getDepositsByAddress( - from - ) - const resolved = await messenger.toCrossChainMessage( - foundTokenBridgeMessages[0] - ) - - expect(resolved).to.deep.equal(foundCrossChainMessages[0]) - }) - }) - - describe('when the input is a TransactionLike', () => { - describe('when the transaction sent exactly one message', () => { - it('should return the CrossChainMessage sent in the transaction', async () => { - const tx = await l1Messenger.triggerSentMessageEvents([DUMMY_MESSAGE]) - const foundCrossChainMessages = - await messenger.getMessagesByTransaction(tx) - const resolved = await messenger.toCrossChainMessage(tx) - expect(resolved).to.deep.equal(foundCrossChainMessages[0]) - }) - }) - - describe('when the transaction sent more than one message', () => { - it('should be able to get second message by passing in an idex', async () => { - const messages = [...Array(2)].map(() => { - return DUMMY_MESSAGE - }) - - const tx = await l1Messenger.triggerSentMessageEvents(messages) - const foundCrossChainMessages = - await messenger.getMessagesByTransaction(tx) - expect(await messenger.toCrossChainMessage(tx, 1)).to.deep.eq( - foundCrossChainMessages[1] - ) - }) - }) - - describe('when the transaction sent no messages', () => { - it('should throw an out of bounds error', async () => { - const tx = await l1Messenger.triggerSentMessageEvents([]) - await expect(messenger.toCrossChainMessage(tx)).to.be.rejectedWith( - `withdrawal index 0 out of bounds. There are 0 withdrawals` - ) - }) - }) - }) - }) - - describe('getMessageStatus', () => { - let scc: Contract - let l1Messenger: Contract - let l2Messenger: Contract - let messenger: CrossChainMessenger - beforeEach(async () => { - // TODO: Get rid of the nested awaits here. Could be a good first issue for someone. - scc = (await (await ethers.getContractFactory('MockSCC')).deploy()) as any - l1Messenger = (await ( - await ethers.getContractFactory('MockMessenger') - ).deploy()) as any - l2Messenger = (await ( - await ethers.getContractFactory('MockMessenger') - ).deploy()) as any - - messenger = new CrossChainMessenger({ - bedrock: false, - l1SignerOrProvider: ethers.provider, - l2SignerOrProvider: ethers.provider, - l1ChainId: L1ChainID.HARDHAT_LOCAL, - l2ChainId: L2ChainID.OPTIMISM_HARDHAT_LOCAL, - contracts: { - l1: { - L1CrossDomainMessenger: l1Messenger.address, - StateCommitmentChain: scc.address, - }, - l2: { - L2CrossDomainMessenger: l2Messenger.address, - }, - }, - }) - }) - - const sendAndGetDummyMessage = async (direction: MessageDirection) => { - const mockMessenger = - direction === MessageDirection.L1_TO_L2 ? l1Messenger : l2Messenger - const tx = await mockMessenger.triggerSentMessageEvents([DUMMY_MESSAGE]) - return ( - await messenger.getMessagesByTransaction(tx, { - direction, - }) - )[0] - } - - const submitStateRootBatchForMessage = async ( - message: CrossChainMessage - ) => { - await scc.setSBAParams({ - batchIndex: 0, - batchRoot: ethers.constants.HashZero, - batchSize: 1, - prevTotalElements: message.blockNumber, - extraData: '0x', - }) - await scc.appendStateBatch([ethers.constants.HashZero], 0) - } - - describe('when the message is an L1 => L2 message', () => { - describe('when the message has not been executed on L2 yet', () => { - it('should return a status of UNCONFIRMED_L1_TO_L2_MESSAGE', async () => { - const message = await sendAndGetDummyMessage( - MessageDirection.L1_TO_L2 - ) - - expect(await messenger.getMessageStatus(message)).to.equal( - MessageStatus.UNCONFIRMED_L1_TO_L2_MESSAGE - ) - }) - }) - - describe('when the message has been executed on L2', () => { - it('should return a status of RELAYED', async () => { - const message = await sendAndGetDummyMessage( - MessageDirection.L1_TO_L2 - ) - - await l2Messenger.triggerRelayedMessageEvents([ - hashCrossDomainMessage( - message.messageNonce, - message.sender, - message.target, - message.value, - message.minGasLimit, - message.message - ), - ]) - - expect(await messenger.getMessageStatus(message)).to.equal( - MessageStatus.RELAYED - ) - }) - }) - - describe('when the message has been executed but failed', () => { - it('should return a status of FAILED_L1_TO_L2_MESSAGE', async () => { - const message = await sendAndGetDummyMessage( - MessageDirection.L1_TO_L2 - ) - - await l2Messenger.triggerFailedRelayedMessageEvents([ - hashCrossDomainMessage( - message.messageNonce, - message.sender, - message.target, - message.value, - message.minGasLimit, - message.message - ), - ]) - - expect(await messenger.getMessageStatus(message)).to.equal( - MessageStatus.FAILED_L1_TO_L2_MESSAGE - ) - }) - }) - }) - - describe('when the message is an L2 => L1 message', () => { - describe('when the message state root has not been published', () => { - it('should return a status of STATE_ROOT_NOT_PUBLISHED', async () => { - const message = await sendAndGetDummyMessage( - MessageDirection.L2_TO_L1 - ) - - expect(await messenger.getMessageStatus(message)).to.equal( - MessageStatus.STATE_ROOT_NOT_PUBLISHED - ) - }) - }) - - describe('when the message state root is still in the challenge period', () => { - it('should return a status of IN_CHALLENGE_PERIOD', async () => { - const message = await sendAndGetDummyMessage( - MessageDirection.L2_TO_L1 - ) - - await submitStateRootBatchForMessage(message) - - expect(await messenger.getMessageStatus(message)).to.equal( - MessageStatus.IN_CHALLENGE_PERIOD - ) - }) - }) - - describe('when the message is no longer in the challenge period', () => { - describe('when the message has been relayed successfully', () => { - it('should return a status of RELAYED', async () => { - const message = await sendAndGetDummyMessage( - MessageDirection.L2_TO_L1 - ) - - await submitStateRootBatchForMessage(message) - - const challengePeriod = await messenger.getChallengePeriodSeconds() - ethers.provider.send('evm_increaseTime', [challengePeriod + 1]) - ethers.provider.send('evm_mine', []) - - await l1Messenger.triggerRelayedMessageEvents([ - hashCrossDomainMessage( - message.messageNonce, - message.sender, - message.target, - message.value, - message.minGasLimit, - message.message - ), - ]) - - expect(await messenger.getMessageStatus(message)).to.equal( - MessageStatus.RELAYED - ) - }) - }) - - describe('when the message has been relayed but the relay failed', () => { - it('should return a status of READY_FOR_RELAY', async () => { - const message = await sendAndGetDummyMessage( - MessageDirection.L2_TO_L1 - ) - - await submitStateRootBatchForMessage(message) - - const challengePeriod = await messenger.getChallengePeriodSeconds() - ethers.provider.send('evm_increaseTime', [challengePeriod + 1]) - ethers.provider.send('evm_mine', []) - - await l1Messenger.triggerFailedRelayedMessageEvents([ - hashCrossDomainMessage( - message.messageNonce, - message.sender, - message.target, - message.value, - message.minGasLimit, - message.message - ), - ]) - - expect(await messenger.getMessageStatus(message)).to.equal( - MessageStatus.READY_FOR_RELAY - ) - }) - }) - - describe('when the message has not been relayed', () => { - it('should return a status of READY_FOR_RELAY', async () => { - const message = await sendAndGetDummyMessage( - MessageDirection.L2_TO_L1 - ) - - await submitStateRootBatchForMessage(message) - - const challengePeriod = await messenger.getChallengePeriodSeconds() - ethers.provider.send('evm_increaseTime', [challengePeriod + 1]) - ethers.provider.send('evm_mine', []) - - expect(await messenger.getMessageStatus(message)).to.equal( - MessageStatus.READY_FOR_RELAY - ) - }) - }) - }) - }) - - describe('when the message does not exist', () => { - // TODO: Figure out if this is the correct behavior. Mark suggests perhaps returning null. - it('should throw an error') - }) - }) - - describe('getMessageReceipt', () => { - let l1Bridge: Contract - let l2Bridge: Contract - let l1Messenger: Contract - let l2Messenger: Contract - let messenger: CrossChainMessenger - beforeEach(async () => { - l1Messenger = (await ( - await ethers.getContractFactory('MockMessenger') - ).deploy()) as any - l2Messenger = (await ( - await ethers.getContractFactory('MockMessenger') - ).deploy()) as any - l1Bridge = (await ( - await ethers.getContractFactory('MockBridge') - ).deploy(l1Messenger.address)) as any - l2Bridge = (await ( - await ethers.getContractFactory('MockBridge') - ).deploy(l2Messenger.address)) as any - - messenger = new CrossChainMessenger({ - bedrock: false, - l1SignerOrProvider: ethers.provider, - l2SignerOrProvider: ethers.provider, - l1ChainId: L1ChainID.HARDHAT_LOCAL, - l2ChainId: L2ChainID.OPTIMISM_HARDHAT_LOCAL, - contracts: { - l1: { - L1CrossDomainMessenger: l1Messenger.address, - L1StandardBridge: l1Bridge.address, - }, - l2: { - L2CrossDomainMessenger: l2Messenger.address, - L2StandardBridge: l2Bridge.address, - }, - }, - }) - }) - - describe('when the message has been relayed', () => { - describe('when the relay was successful', () => { - it('should return the receipt of the transaction that relayed the message', async () => { - const message = { - ...DUMMY_EXTENDED_MESSAGE, - direction: MessageDirection.L1_TO_L2, - } - - const tx = await l2Messenger.triggerRelayedMessageEvents([ - hashCrossDomainMessage( - message.messageNonce, - message.sender, - message.target, - message.value, - message.minGasLimit, - message.message - ), - ]) - - const messageReceipt = await messenger.getMessageReceipt(message) - expect(messageReceipt.receiptStatus).to.equal(1) - expect( - omit(messageReceipt.transactionReceipt, 'confirmations') - ).to.deep.equal( - omit( - await ethers.provider.getTransactionReceipt(tx.hash), - 'confirmations' - ) - ) - }) - }) - - describe('when the relay failed', () => { - it('should return the receipt of the transaction that attempted to relay the message', async () => { - const message = { - ...DUMMY_EXTENDED_MESSAGE, - direction: MessageDirection.L1_TO_L2, - } - - const tx = await l2Messenger.triggerFailedRelayedMessageEvents([ - hashCrossDomainMessage( - message.messageNonce, - message.sender, - message.target, - message.value, - message.minGasLimit, - message.message - ), - ]) - - const messageReceipt = await messenger.getMessageReceipt(message) - expect(messageReceipt.receiptStatus).to.equal(0) - expect( - omit(messageReceipt.transactionReceipt, 'confirmations') - ).to.deep.equal( - omit( - await ethers.provider.getTransactionReceipt(tx.hash), - 'confirmations' - ) - ) - }) - }) - - describe('when the relay failed more than once', () => { - it('should return the receipt of the last transaction that attempted to relay the message', async () => { - const message = { - ...DUMMY_EXTENDED_MESSAGE, - direction: MessageDirection.L1_TO_L2, - } - - await l2Messenger.triggerFailedRelayedMessageEvents([ - hashCrossDomainMessage( - message.messageNonce, - message.sender, - message.target, - message.value, - message.minGasLimit, - message.message - ), - ]) - - const tx = await l2Messenger.triggerFailedRelayedMessageEvents([ - hashCrossDomainMessage( - message.messageNonce, - message.sender, - message.target, - message.value, - message.minGasLimit, - message.message - ), - ]) - - const messageReceipt = await messenger.getMessageReceipt(message) - expect(messageReceipt.receiptStatus).to.equal(0) - expect( - omit(messageReceipt.transactionReceipt, 'confirmations') - ).to.deep.equal( - omit( - await ethers.provider.getTransactionReceipt(tx.hash), - 'confirmations' - ) - ) - }) - }) - }) - - describe('when the message has not been relayed', () => { - it('should return null', async () => { - const message = { - ...DUMMY_EXTENDED_MESSAGE, - direction: MessageDirection.L1_TO_L2, - } - - await l2Messenger.doNothing() - - const messageReceipt = await messenger.getMessageReceipt(message) - expect(messageReceipt).to.equal(null) - }) - }) - - // TODO: Go over all of these tests and remove the empty functions so we can accurately keep - // track of - }) - - describe('waitForMessageReceipt', () => { - let l2Messenger: Contract - let messenger: CrossChainMessenger - beforeEach(async () => { - l2Messenger = (await ( - await ethers.getContractFactory('MockMessenger') - ).deploy()) as any - - messenger = new CrossChainMessenger({ - bedrock: false, - l1SignerOrProvider: ethers.provider, - l2SignerOrProvider: ethers.provider, - l1ChainId: L1ChainID.HARDHAT_LOCAL, - l2ChainId: L2ChainID.OPTIMISM_HARDHAT_LOCAL, - contracts: { - l2: { - L2CrossDomainMessenger: l2Messenger.address, - }, - }, - }) - }) - - describe('when the message receipt already exists', () => { - it('should immediately return the receipt', async () => { - const message = { - ...DUMMY_EXTENDED_MESSAGE, - direction: MessageDirection.L1_TO_L2, - } - - const tx = await l2Messenger.triggerRelayedMessageEvents([ - hashCrossDomainMessage( - message.messageNonce, - message.sender, - message.target, - message.value, - message.minGasLimit, - message.message - ), - ]) - - const messageReceipt = await messenger.waitForMessageReceipt(message) - expect(messageReceipt.receiptStatus).to.equal(1) - expect( - omit(messageReceipt.transactionReceipt, 'confirmations') - ).to.deep.equal( - omit( - await ethers.provider.getTransactionReceipt(tx.hash), - 'confirmations' - ) - ) - }) - }) - - describe('when the message receipt does not exist already', () => { - describe('when no extra options are provided', () => { - it('should wait for the receipt to be published', async () => { - const message = { - ...DUMMY_EXTENDED_MESSAGE, - direction: MessageDirection.L1_TO_L2, - } - - setTimeout(async () => { - await l2Messenger.triggerRelayedMessageEvents([ - hashCrossDomainMessage( - message.messageNonce, - message.sender, - message.target, - message.value, - message.minGasLimit, - message.message - ), - ]) - }, 5000) - - const tick = Date.now() - const messageReceipt = await messenger.waitForMessageReceipt(message) - const tock = Date.now() - expect(messageReceipt.receiptStatus).to.equal(1) - expect(tock - tick).to.be.greaterThan(5000) - }) - - it('should wait forever for the receipt if the receipt is never published', () => { - // Not sure how to easily test this without introducing some sort of cancellation token - // I don't want the promise to loop forever and make the tests never finish. - }) - }) - - describe('when a timeout is provided', () => { - it('should throw an error if the timeout is reached', async () => { - const message = { - ...DUMMY_EXTENDED_MESSAGE, - direction: MessageDirection.L1_TO_L2, - } - - await expect( - messenger.waitForMessageReceipt(message, { - timeoutMs: 10000, - }) - ).to.be.rejectedWith('timed out waiting for message receipt') - }) - }) - }) - }) - - describe('estimateL2MessageGasLimit', () => { - let messenger: CrossChainMessenger - beforeEach(async () => { - messenger = new CrossChainMessenger({ - bedrock: false, - l1SignerOrProvider: ethers.provider, - l2SignerOrProvider: ethers.provider, - l1ChainId: L1ChainID.HARDHAT_LOCAL, - l2ChainId: L2ChainID.OPTIMISM_HARDHAT_LOCAL, - }) - }) - - describe('when the message is an L1 to L2 message', () => { - it('should return an accurate gas estimate plus a ~20% buffer', async () => { - const message = { - direction: MessageDirection.L1_TO_L2, - target: '0x' + '11'.repeat(20), - sender: '0x' + '22'.repeat(20), - message: '0x' + '33'.repeat(64), - messageNonce: 1234, - logIndex: 0, - blockNumber: 1234, - transactionHash: '0x' + '44'.repeat(32), - } - - const estimate = await ethers.provider.estimateGas({ - to: message.target, - from: message.sender, - data: message.message, - }) - - // Approximately 20% greater than the estimate, +/- 1%. - expectApprox( - await messenger.estimateL2MessageGasLimit(message), - estimate.mul(120).div(100), - { - percentUpperDeviation: 1, - percentLowerDeviation: 1, - } - ) - }) - - it('should return an accurate gas estimate when a custom buffer is provided', async () => { - const message = { - direction: MessageDirection.L1_TO_L2, - target: '0x' + '11'.repeat(20), - sender: '0x' + '22'.repeat(20), - message: '0x' + '33'.repeat(64), - messageNonce: 1234, - logIndex: 0, - blockNumber: 1234, - transactionHash: '0x' + '44'.repeat(32), - } - - const estimate = await ethers.provider.estimateGas({ - to: message.target, - from: message.sender, - data: message.message, - }) - - // Approximately 30% greater than the estimate, +/- 1%. - expectApprox( - await messenger.estimateL2MessageGasLimit(message, { - bufferPercent: 30, - }), - estimate.mul(130).div(100), - { - percentUpperDeviation: 1, - percentLowerDeviation: 1, - } - ) - }) - }) - - describe('when the message is an L2 to L1 message', () => { - it('should throw an error', async () => { - const message = { - direction: MessageDirection.L2_TO_L1, - target: '0x' + '11'.repeat(20), - sender: '0x' + '22'.repeat(20), - message: '0x' + '33'.repeat(64), - messageNonce: 1234, - logIndex: 0, - blockNumber: 1234, - transactionHash: '0x' + '44'.repeat(32), - } - - await expect(messenger.estimateL2MessageGasLimit(message)).to.be - .rejected - }) - }) - }) - - describe('estimateMessageWaitTimeSeconds', () => { - let scc: Contract - let l1Messenger: Contract - let l2Messenger: Contract - let messenger: CrossChainMessenger - beforeEach(async () => { - // TODO: Get rid of the nested awaits here. Could be a good first issue for someone. - scc = (await (await ethers.getContractFactory('MockSCC')).deploy()) as any - l1Messenger = (await ( - await ethers.getContractFactory('MockMessenger') - ).deploy()) as any - l2Messenger = (await ( - await ethers.getContractFactory('MockMessenger') - ).deploy()) as any - - messenger = new CrossChainMessenger({ - bedrock: false, - l1SignerOrProvider: ethers.provider, - l2SignerOrProvider: ethers.provider, - l1ChainId: L1ChainID.HARDHAT_LOCAL, - l2ChainId: L2ChainID.OPTIMISM_HARDHAT_LOCAL, - contracts: { - l1: { - L1CrossDomainMessenger: l1Messenger.address, - StateCommitmentChain: scc.address, - }, - l2: { - L2CrossDomainMessenger: l2Messenger.address, - }, - }, - }) - }) - - const sendAndGetDummyMessage = async (direction: MessageDirection) => { - const mockMessenger = - direction === MessageDirection.L1_TO_L2 ? l1Messenger : l2Messenger - const tx = await mockMessenger.triggerSentMessageEvents([DUMMY_MESSAGE]) - return ( - await messenger.getMessagesByTransaction(tx, { - direction, - }) - )[0] - } - - const submitStateRootBatchForMessage = async ( - message: CrossChainMessage - ) => { - await scc.setSBAParams({ - batchIndex: 0, - batchRoot: ethers.constants.HashZero, - batchSize: 1, - prevTotalElements: message.blockNumber, - extraData: '0x', - }) - await scc.appendStateBatch([ethers.constants.HashZero], 0) - } - - describe('when the message is an L1 => L2 message', () => { - describe('when the message has not been executed on L2 yet', () => { - it('should return the estimated seconds until the message will be confirmed on L2', async () => { - const message = await sendAndGetDummyMessage( - MessageDirection.L1_TO_L2 - ) - - await l1Messenger.triggerSentMessageEvents([message]) - - expect( - await messenger.estimateMessageWaitTimeSeconds(message) - ).to.equal(1) - }) - }) - - describe('when the message has been executed on L2', () => { - it('should return 0', async () => { - const message = await sendAndGetDummyMessage( - MessageDirection.L1_TO_L2 - ) - - await l1Messenger.triggerSentMessageEvents([message]) - await l2Messenger.triggerRelayedMessageEvents([ - hashCrossDomainMessage( - message.messageNonce, - message.sender, - message.target, - message.value, - message.minGasLimit, - message.message - ), - ]) - - expect( - await messenger.estimateMessageWaitTimeSeconds(message) - ).to.equal(0) - }) - }) - }) - - describe('when the message is an L2 => L1 message', () => { - describe('when the state root has not been published', () => { - it('should return the estimated seconds until the state root will be published and pass the challenge period', async () => { - const message = await sendAndGetDummyMessage( - MessageDirection.L2_TO_L1 - ) - - expect( - await messenger.estimateMessageWaitTimeSeconds(message) - ).to.equal(await messenger.getChallengePeriodSeconds()) - }) - }) - - describe('when the state root is within the challenge period', () => { - it('should return the estimated seconds until the state root passes the challenge period', async () => { - const message = await sendAndGetDummyMessage( - MessageDirection.L2_TO_L1 - ) - - await submitStateRootBatchForMessage(message) - - const challengePeriod = await messenger.getChallengePeriodSeconds() - ethers.provider.send('evm_increaseTime', [challengePeriod / 2]) - ethers.provider.send('evm_mine', []) - - expectApprox( - await messenger.estimateMessageWaitTimeSeconds(message), - challengePeriod / 2, - { - percentUpperDeviation: 5, - percentLowerDeviation: 5, - } - ) - }) - }) - - describe('when the state root passes the challenge period', () => { - it('should return 0', async () => { - const message = await sendAndGetDummyMessage( - MessageDirection.L2_TO_L1 - ) - - await submitStateRootBatchForMessage(message) - - const challengePeriod = await messenger.getChallengePeriodSeconds() - ethers.provider.send('evm_increaseTime', [challengePeriod + 1]) - ethers.provider.send('evm_mine', []) - - expect( - await messenger.estimateMessageWaitTimeSeconds(message) - ).to.equal(0) - }) - }) - - describe('when the message has been executed', () => { - it('should return 0', async () => { - const message = await sendAndGetDummyMessage( - MessageDirection.L2_TO_L1 - ) - - await l2Messenger.triggerSentMessageEvents([message]) - await l1Messenger.triggerRelayedMessageEvents([ - hashCrossDomainMessage( - message.messageNonce, - message.sender, - message.target, - message.value, - message.minGasLimit, - message.message - ), - ]) - - expect( - await messenger.estimateMessageWaitTimeSeconds(message) - ).to.equal(0) - }) - }) - }) - }) - - describe('sendMessage', () => { - let l1Messenger: Contract - let l2Messenger: Contract - let messenger: CrossChainMessenger - beforeEach(async () => { - l1Messenger = (await ( - await ethers.getContractFactory('MockMessenger') - ).deploy()) as any - l2Messenger = (await ( - await ethers.getContractFactory('MockMessenger') - ).deploy()) as any - - messenger = new CrossChainMessenger({ - bedrock: false, - l1SignerOrProvider: l1Signer, - l2SignerOrProvider: l2Signer, - l1ChainId: L1ChainID.HARDHAT_LOCAL, - l2ChainId: L2ChainID.OPTIMISM_HARDHAT_LOCAL, - contracts: { - l1: { - L1CrossDomainMessenger: l1Messenger.address, - }, - l2: { - L2CrossDomainMessenger: l2Messenger.address, - }, - }, - }) - }) - - describe('when the message is an L1 to L2 message', () => { - describe('when no l2GasLimit is provided', () => { - it('should send a message with an estimated l2GasLimit', async () => { - const message = { - direction: MessageDirection.L1_TO_L2, - target: '0x' + '11'.repeat(20), - message: '0x' + '22'.repeat(32), - } - - const estimate = await messenger.estimateL2MessageGasLimit(message) - await expect(messenger.sendMessage(message)) - .to.emit(l1Messenger, 'SentMessage') - .withArgs( - message.target, - await l1Signer.getAddress(), - message.message, - 0, - estimate - ) - }) - }) - - describe('when an l2GasLimit is provided', () => { - it('should send a message with the provided l2GasLimit', async () => { - const message = { - direction: MessageDirection.L1_TO_L2, - target: '0x' + '11'.repeat(20), - message: '0x' + '22'.repeat(32), - } - - await expect( - messenger.sendMessage(message, { - l2GasLimit: 1234, - }) - ) - .to.emit(l1Messenger, 'SentMessage') - .withArgs( - message.target, - await l1Signer.getAddress(), - message.message, - 0, - 1234 - ) - }) - }) - }) - - describe('when the message is an L2 to L1 message', () => { - it('should send a message', async () => { - const message = { - direction: MessageDirection.L2_TO_L1, - target: '0x' + '11'.repeat(20), - message: '0x' + '22'.repeat(32), - } - - await expect(messenger.sendMessage(message)) - .to.emit(l2Messenger, 'SentMessage') - .withArgs( - message.target, - await l2Signer.getAddress(), - message.message, - 0, - 0 - ) - }) - }) - }) - - describe('resendMessage', () => { - let l1Messenger: Contract - let l2Messenger: Contract - let messenger: CrossChainMessenger - beforeEach(async () => { - l1Messenger = (await ( - await ethers.getContractFactory('MockMessenger') - ).deploy()) as any - l2Messenger = (await ( - await ethers.getContractFactory('MockMessenger') - ).deploy()) as any - - messenger = new CrossChainMessenger({ - bedrock: false, - l1SignerOrProvider: l1Signer, - l2SignerOrProvider: l2Signer, - l1ChainId: L1ChainID.HARDHAT_LOCAL, - l2ChainId: L2ChainID.OPTIMISM_HARDHAT_LOCAL, - contracts: { - l1: { - L1CrossDomainMessenger: l1Messenger.address, - }, - l2: { - L2CrossDomainMessenger: l2Messenger.address, - }, - }, - }) - }) - - describe('when resending an L1 to L2 message', () => { - it('should resend the message with the new gas limit', async () => { - const message = { - direction: MessageDirection.L1_TO_L2, - target: '0x' + '11'.repeat(20), - message: '0x' + '22'.repeat(32), - } - - const sent = await messenger.sendMessage(message, { - l2GasLimit: 1234, - }) - - await expect(messenger.resendMessage(sent, 10000)) - .to.emit(l1Messenger, 'SentMessage') - .withArgs( - message.target, - await l1Signer.getAddress(), - message.message, - 1, // nonce is now 1 - 10000 - ) - }) - }) - - describe('when resending an L2 to L1 message', () => { - it('should throw an error', async () => { - const message = { - direction: MessageDirection.L2_TO_L1, - target: '0x' + '11'.repeat(20), - message: '0x' + '22'.repeat(32), - } - - const sent = await messenger.sendMessage(message, { - l2GasLimit: 1234, - }) - - await expect(messenger.resendMessage(sent, 10000)).to.be.rejected - }) - }) - }) - - describe('finalizeMessage', () => { - describe('when the message being finalized exists', () => { - describe('when the message is ready to be finalized', () => { - it('should finalize the message') - }) - - describe('when the message is not ready to be finalized', () => { - it('should throw an error') - }) - - describe('when the message has already been finalized', () => { - it('should throw an error') - }) - }) - - describe('when the message being finalized does not exist', () => { - it('should throw an error') - }) - }) - - describe('depositETH', () => { - let l1Messenger: Contract - let l2Messenger: Contract - let l1Bridge: Contract - let l2Bridge: Contract - let messenger: CrossChainMessenger - beforeEach(async () => { - l1Messenger = (await ( - await ethers.getContractFactory('MockMessenger') - ).deploy()) as any - l1Bridge = (await ( - await ethers.getContractFactory('MockBridge') - ).deploy(l1Messenger.address)) as any - l2Messenger = (await ( - await ethers.getContractFactory('MockMessenger') - ).deploy()) as any - l2Bridge = (await ( - await ethers.getContractFactory('MockBridge') - ).deploy(l2Messenger.address)) as any - - messenger = new CrossChainMessenger({ - bedrock: false, - l1SignerOrProvider: l1Signer, - l2SignerOrProvider: l2Signer, - l1ChainId: L1ChainID.HARDHAT_LOCAL, - l2ChainId: L2ChainID.OPTIMISM_HARDHAT_LOCAL, - contracts: { - l1: { - L1CrossDomainMessenger: l1Messenger.address, - L1StandardBridge: l1Bridge.address, - }, - l2: { - L2CrossDomainMessenger: l2Messenger.address, - L2StandardBridge: l2Bridge.address, - }, - }, - bridges: { - ETH: { - Adapter: ETHBridgeAdapter, - l1Bridge: l1Bridge.address, - l2Bridge: l2Bridge.address, - }, - }, - }) - }) - - it('should trigger the deposit ETH function with the given amount', async () => { - await expect(messenger.depositETH(100000)) - .to.emit(l1Bridge, 'ETHDepositInitiated') - .withArgs( - await l1Signer.getAddress(), - await l1Signer.getAddress(), - 100000, - '0x' - ) - }) - }) - - describe('withdrawETH', () => { - let l1Messenger: Contract - let l2Messenger: Contract - let l1Bridge: Contract - let l2Bridge: Contract - let messenger: CrossChainMessenger - beforeEach(async () => { - l1Messenger = (await ( - await ethers.getContractFactory('MockMessenger') - ).deploy()) as any - l1Bridge = (await ( - await ethers.getContractFactory('MockBridge') - ).deploy(l1Messenger.address)) as any - l2Messenger = (await ( - await ethers.getContractFactory('MockMessenger') - ).deploy()) as any - l2Bridge = (await ( - await ethers.getContractFactory('MockBridge') - ).deploy(l2Messenger.address)) as any - - messenger = new CrossChainMessenger({ - bedrock: false, - l1SignerOrProvider: l1Signer, - l2SignerOrProvider: l2Signer, - l1ChainId: L1ChainID.HARDHAT_LOCAL, - l2ChainId: L2ChainID.OPTIMISM_HARDHAT_LOCAL, - contracts: { - l1: { - L1CrossDomainMessenger: l1Messenger.address, - L1StandardBridge: l1Bridge.address, - }, - l2: { - L2CrossDomainMessenger: l2Messenger.address, - L2StandardBridge: l2Bridge.address, - }, - }, - bridges: { - ETH: { - Adapter: ETHBridgeAdapter, - l1Bridge: l1Bridge.address, - l2Bridge: l2Bridge.address, - }, - }, - }) - }) - - it('should trigger the withdraw ETH function with the given amount', async () => { - await expect(messenger.withdrawETH(100000)) - .to.emit(l2Bridge, 'WithdrawalInitiated') - .withArgs( - ethers.constants.AddressZero, - predeploys.OVM_ETH, - await l2Signer.getAddress(), - await l2Signer.getAddress(), - 100000, - '0x' - ) - }) - }) -}) diff --git a/packages/sdk/test/helpers/constants.ts b/packages/sdk/test/helpers/constants.ts deleted file mode 100644 index 8a13a005c808..000000000000 --- a/packages/sdk/test/helpers/constants.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ethers } from 'ethers' - -export const DUMMY_MESSAGE = { - target: '0x' + '11'.repeat(20), - sender: '0x' + '22'.repeat(20), - message: '0x' + '33'.repeat(64), - messageNonce: ethers.BigNumber.from(1234), - value: ethers.BigNumber.from(0), - minGasLimit: ethers.BigNumber.from(5678), -} - -export const DUMMY_EXTENDED_MESSAGE = { - ...DUMMY_MESSAGE, - logIndex: 0, - blockNumber: 1234, - transactionHash: '0x' + '44'.repeat(32), -} diff --git a/packages/sdk/test/helpers/index.ts b/packages/sdk/test/helpers/index.ts deleted file mode 100644 index f87cf0102a14..000000000000 --- a/packages/sdk/test/helpers/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './constants' diff --git a/packages/sdk/test/l2-provider.spec.ts b/packages/sdk/test/l2-provider.spec.ts deleted file mode 100644 index 51709d25a185..000000000000 --- a/packages/sdk/test/l2-provider.spec.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* eslint-disable @typescript-eslint/no-empty-function */ -import './setup' - -describe('L2Provider', () => { - describe('getL1GasPrice', () => { - it('should query the GasPriceOracle contract', () => {}) - }) - - describe('estimateL1Gas', () => { - it('should query the GasPriceOracle contract', () => {}) - }) - - describe('estimateL1GasCost', () => { - it('should multiply the estimated L1 gas cost by the L1 gas price', () => {}) - }) - - describe('estimateL2GasCost', () => { - it('should multiply the estimated L2 gas cost by the L1 gas price', () => {}) - }) - - describe('estimateTotalGasCost', () => { - it('should be the sum of the L1 and L2 gas cost estimates', () => {}) - }) -}) diff --git a/packages/sdk/test/setup.ts b/packages/sdk/test/setup.ts deleted file mode 100644 index a0cc88ed1237..000000000000 --- a/packages/sdk/test/setup.ts +++ /dev/null @@ -1,10 +0,0 @@ -/* External Imports */ -import chai = require('chai') -import Mocha from 'mocha' -import chaiAsPromised from 'chai-as-promised' - -chai.use(chaiAsPromised) -const should = chai.should() -const expect = chai.expect - -export { should, expect, Mocha } diff --git a/packages/sdk/test/utils/coercion.spec.ts b/packages/sdk/test/utils/coercion.spec.ts deleted file mode 100644 index 6f5111b07014..000000000000 --- a/packages/sdk/test/utils/coercion.spec.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { Provider } from '@ethersproject/abstract-provider' -import { Contract } from 'ethers' -import { ethers } from 'hardhat' - -import { expect } from '../setup' -import { toSignerOrProvider, toTransactionHash } from '../../src' - -describe('type coercion utils', () => { - describe('toSignerOrProvider', () => { - it('should convert a string to a JsonRpcProvider', () => { - const provider = toSignerOrProvider('http://localhost:8545') - expect(Provider.isProvider(provider)).to.be.true - }) - - it('should not do anything with a provider', () => { - const provider = toSignerOrProvider(ethers.provider) - expect(provider).to.deep.equal(ethers.provider) - }) - }) - - describe('toTransactionHash', () => { - describe('string inputs', () => { - it('should return the input if the input is a valid transaction hash', () => { - const input = '0x' + '11'.repeat(32) - expect(toTransactionHash(input)).to.equal(input) - }) - - it('should throw an error if the input is a hex string but not a transaction hash', () => { - const input = '0x' + '11'.repeat(31) - expect(() => toTransactionHash(input)).to.throw( - 'Invalid transaction hash' - ) - }) - - it('should throw an error if the input is not a hex string', () => { - const input = 'hi mom look at me go' - expect(() => toTransactionHash(input)).to.throw( - 'Invalid transaction hash' - ) - }) - }) - - describe('transaction inputs', () => { - let AbsolutelyNothing: Contract - before(async () => { - AbsolutelyNothing = (await ( - await ethers.getContractFactory('AbsolutelyNothing') - ).deploy()) as any - }) - - it('should return the transaction hash if the input is a transaction response', async () => { - const tx = await AbsolutelyNothing.doAbsolutelyNothing() - expect(toTransactionHash(tx)).to.equal(tx.hash) - }) - - it('should return the transaction hash if the input is a transaction receipt', async () => { - const tx = await AbsolutelyNothing.doAbsolutelyNothing() - const receipt = await tx.wait() - expect(toTransactionHash(receipt)).to.equal(receipt.transactionHash) - }) - }) - - describe('other types', () => { - it('should throw if given a number as an input', () => { - expect(() => toTransactionHash(1234 as any)).to.throw( - 'Invalid transaction' - ) - }) - - it('should throw if given a function as an input', () => { - expect(() => - toTransactionHash((() => { - return 1234 - }) as any) - ).to.throw('Invalid transaction') - }) - }) - }) -}) diff --git a/packages/sdk/test/utils/contracts.spec.ts b/packages/sdk/test/utils/contracts.spec.ts deleted file mode 100644 index be98fc6a6bb0..000000000000 --- a/packages/sdk/test/utils/contracts.spec.ts +++ /dev/null @@ -1,372 +0,0 @@ -/* eslint-disable @typescript-eslint/no-empty-function */ -import { Signer } from 'ethers' -import { ethers } from 'hardhat' - -import { expect } from '../setup' -import { - getOEContract, - getAllOEContracts, - CONTRACT_ADDRESSES, - DEFAULT_L2_CONTRACT_ADDRESSES, - L2ChainID, -} from '../../src' - -describe('contract connection utils', () => { - let signers: Signer[] - before(async () => { - signers = (await ethers.getSigners()) as any - }) - - describe('getOEContract', () => { - describe('when given a known chain ID', () => { - describe('when not given an address override', () => { - it('should use the address for the given contract name and chain ID', () => { - const addresses = CONTRACT_ADDRESSES[L2ChainID.OPTIMISM] - for (const [contractName, contractAddress] of [ - ...Object.entries(addresses.l1), - ...Object.entries(addresses.l2), - ]) { - const contract = getOEContract( - contractName as any, - L2ChainID.OPTIMISM - ) - expect(contract.address).to.equal(contractAddress) - } - }) - }) - - describe('when given an address override', () => { - it('should use the custom address', () => { - const addresses = CONTRACT_ADDRESSES[L2ChainID.OPTIMISM] - for (const contractName of [ - ...Object.keys(addresses.l1), - ...Object.keys(addresses.l2), - ]) { - const address = '0x' + '11'.repeat(20) - const contract = getOEContract(contractName as any, 1, { - address, - }) - expect(contract.address).to.equal(address) - } - }) - }) - }) - - describe('when given an unknown chain ID', () => { - describe('when not given an address override', () => { - it('should throw an error', () => { - expect(() => getOEContract('L1CrossDomainMessenger', 3)).to.throw() - }) - }) - - describe('when given an address override', () => { - it('should use the custom address', () => { - const address = '0x' + '11'.repeat(20) - const contract = getOEContract('L1CrossDomainMessenger', 3, { - address, - }) - expect(contract.address).to.equal(address) - }) - }) - }) - - describe('when connected to a valid address', () => { - it('should have the correct interface for the contract name', () => { - const contract = getOEContract( - 'L1CrossDomainMessenger', - L2ChainID.OPTIMISM - ) - expect(contract.sendMessage).to.not.be.undefined - }) - - describe('when not given a signer or provider', () => { - it('should not have a signer or provider', () => { - const contract = getOEContract( - 'L1CrossDomainMessenger', - L2ChainID.OPTIMISM - ) - expect(contract.signer).to.be.null - expect(contract.provider).to.be.null - }) - }) - - describe('when given a signer', () => { - it('should attach the given signer', () => { - const contract = getOEContract( - 'L1CrossDomainMessenger', - L2ChainID.OPTIMISM, - { - signerOrProvider: signers[0], - } - ) - expect(contract.signer).to.deep.equal(signers[0]) - }) - }) - - describe('when given a provider', () => { - it('should attach the given provider', () => { - const contract = getOEContract( - 'L1CrossDomainMessenger', - L2ChainID.OPTIMISM, - { - signerOrProvider: ethers.provider as any, - } - ) - expect(contract.signer).to.be.null - expect(contract.provider).to.deep.equal(ethers.provider) - }) - }) - }) - }) - - describe('getAllOEContracts', () => { - describe('when given a known chain ID', () => { - describe('when not given any address overrides', () => { - it('should return all contracts connected to the default addresses', () => { - const contracts = getAllOEContracts(L2ChainID.OPTIMISM) - const addresses = CONTRACT_ADDRESSES[L2ChainID.OPTIMISM] - for (const [contractName, contractAddress] of Object.entries( - addresses.l1 - )) { - const contract = contracts.l1[contractName] - expect(contract.address).to.equal(contractAddress) - } - for (const [contractName, contractAddress] of Object.entries( - addresses.l2 - )) { - const contract = contracts.l2[contractName] - expect(contract.address).to.equal(contractAddress) - } - }) - }) - - describe('when given address overrides', () => { - it('should return contracts connected to the overridden addresses where given', () => { - const overrides = { - l1: { - L1CrossDomainMessenger: '0x' + '11'.repeat(20), - }, - l2: { - L2CrossDomainMessenger: '0x' + '22'.repeat(20), - }, - } - const contracts = getAllOEContracts(L2ChainID.OPTIMISM, { overrides }) - const addresses = CONTRACT_ADDRESSES[L2ChainID.OPTIMISM] - for (const [contractName, contractAddress] of Object.entries( - addresses.l1 - )) { - const contract = contracts.l1[contractName] - if (overrides.l1[contractName]) { - expect(contract.address).to.equal(overrides.l1[contractName]) - } else { - expect(contract.address).to.equal(contractAddress) - } - } - for (const [contractName, contractAddress] of Object.entries( - addresses.l2 - )) { - const contract = contracts.l2[contractName] - if (overrides.l2[contractName]) { - expect(contract.address).to.equal(overrides.l2[contractName]) - } else { - expect(contract.address).to.equal(contractAddress) - } - } - }) - }) - }) - - describe('when given an unknown chain ID', () => { - describe('when given address overrides for all L1 contracts', () => { - describe('when given address overrides for L2 contracts', () => { - it('should return contracts connected to the overridden addresses where given', () => { - const l1Overrides = {} - for (const contractName of Object.keys( - CONTRACT_ADDRESSES[L2ChainID.OPTIMISM].l1 - )) { - l1Overrides[contractName] = '0x' + '11'.repeat(20) - } - - const contracts = getAllOEContracts(3, { - overrides: { - l1: l1Overrides as any, - l2: { - L2CrossDomainMessenger: '0x' + '22'.repeat(20), - }, - }, - }) - - for (const [contractName, contract] of Object.entries( - contracts.l1 - )) { - expect(contract.address).to.equal(l1Overrides[contractName]) - } - - expect(contracts.l2.L2CrossDomainMessenger.address).to.equal( - '0x' + '22'.repeat(20) - ) - }) - }) - - describe('when not given address overrides for L2 contracts', () => { - it('should return contracts connected to the default L2 addresses and custom L1 addresses', () => { - const l1Overrides = {} - for (const contractName of Object.keys( - CONTRACT_ADDRESSES[L2ChainID.OPTIMISM].l1 - )) { - l1Overrides[contractName] = '0x' + '11'.repeat(20) - } - - const contracts = getAllOEContracts(3, { - overrides: { - l1: l1Overrides as any, - }, - }) - - for (const [contractName, contract] of Object.entries( - contracts.l1 - )) { - expect(contract.address).to.equal(l1Overrides[contractName]) - } - - for (const [contractName, contract] of Object.entries( - contracts.l2 - )) { - expect(contract.address).to.equal( - DEFAULT_L2_CONTRACT_ADDRESSES[contractName] - ) - } - }) - }) - }) - - describe('when given address overrides for some L1 contracts', () => { - it('should throw an error', () => { - expect(() => - getAllOEContracts(3, { - overrides: { - l1: { - L1CrossDomainMessenger: '0x' + '11'.repeat(20), - }, - }, - }) - ).to.throw() - }) - }) - - describe('when given address overrides for no L1 contracts', () => { - it('should throw an error', () => { - expect(() => getAllOEContracts(3)).to.throw() - }) - }) - }) - - describe('when not given a signer or provider', () => { - it('should not attach a signer or provider to any contracts', () => { - const contracts = getAllOEContracts(L2ChainID.OPTIMISM) - for (const contract of Object.values(contracts.l1)) { - expect(contract.signer).to.be.null - expect(contract.provider).to.be.null - } - for (const contract of Object.values(contracts.l2)) { - expect(contract.signer).to.be.null - expect(contract.provider).to.be.null - } - }) - }) - - describe('when given an L1 signer', () => { - it('should attach the signer to the L1 contracts only', () => { - const contracts = getAllOEContracts(L2ChainID.OPTIMISM, { - l1SignerOrProvider: signers[0], - }) - for (const contract of Object.values(contracts.l1)) { - expect(contract.signer).to.deep.equal(signers[0]) - } - for (const contract of Object.values(contracts.l2)) { - expect(contract.signer).to.be.null - expect(contract.provider).to.be.null - } - }) - }) - - describe('when given an L2 signer', () => { - it('should attach the signer to the L2 contracts only', () => { - const contracts = getAllOEContracts(L2ChainID.OPTIMISM, { - l2SignerOrProvider: signers[0], - }) - for (const contract of Object.values(contracts.l1)) { - expect(contract.signer).to.be.null - expect(contract.provider).to.be.null - } - for (const contract of Object.values(contracts.l2)) { - expect(contract.signer).to.deep.equal(signers[0]) - } - }) - }) - - describe('when given an L1 signer and an L2 signer', () => { - it('should attach the signer to both sets of contracts', () => { - const contracts = getAllOEContracts(L2ChainID.OPTIMISM, { - l1SignerOrProvider: signers[0], - l2SignerOrProvider: signers[1], - }) - for (const contract of Object.values(contracts.l1)) { - expect(contract.signer).to.deep.equal(signers[0]) - } - for (const contract of Object.values(contracts.l2)) { - expect(contract.signer).to.deep.equal(signers[1]) - } - }) - }) - - describe('when given an L1 provider', () => { - it('should attach the provider to the L1 contracts only', () => { - const contracts = getAllOEContracts(L2ChainID.OPTIMISM, { - l1SignerOrProvider: ethers.provider as any, - }) - for (const contract of Object.values(contracts.l1)) { - expect(contract.signer).to.be.null - expect(contract.provider).to.deep.equal(ethers.provider) - } - for (const contract of Object.values(contracts.l2)) { - expect(contract.signer).to.be.null - expect(contract.provider).to.be.null - } - }) - }) - - describe('when given an L2 provider', () => { - it('should attach the provider to the L2 contracts only', () => { - const contracts = getAllOEContracts(L2ChainID.OPTIMISM, { - l2SignerOrProvider: ethers.provider as any, - }) - for (const contract of Object.values(contracts.l1)) { - expect(contract.signer).to.be.null - expect(contract.provider).to.be.null - } - for (const contract of Object.values(contracts.l2)) { - expect(contract.signer).to.be.null - expect(contract.provider).to.deep.equal(ethers.provider) - } - }) - }) - - describe('when given an L1 provider and an L2 provider', () => { - it('should attach the provider to both sets of contracts', () => { - const contracts = getAllOEContracts(L2ChainID.OPTIMISM, { - l1SignerOrProvider: ethers.provider as any, - l2SignerOrProvider: ethers.provider as any, - }) - for (const contract of Object.values(contracts.l1)) { - expect(contract.signer).to.be.null - expect(contract.provider).to.deep.equal(ethers.provider) - } - for (const contract of Object.values(contracts.l2)) { - expect(contract.signer).to.be.null - expect(contract.provider).to.deep.equal(ethers.provider) - } - }) - }) - }) -}) diff --git a/packages/sdk/test/utils/merkle-utils.spec.ts b/packages/sdk/test/utils/merkle-utils.spec.ts deleted file mode 100644 index 5c9fbcbf009a..000000000000 --- a/packages/sdk/test/utils/merkle-utils.spec.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { ethers } from 'ethers' - -import { expect } from '../setup' -import { maybeAddProofNode } from '../../src/utils/merkle-utils' - -describe('Merkle Utils', () => { - describe('maybeAddProofNode', () => { - // Test taken from opBNB testnet withdrawal. - it('should add a proof node when final node is inside of a branch', () => { - const key = ethers.utils.keccak256( - '0x5cd60ecef836e75dd12539abe8ad5f4ba0dc4fcaae2c45024c69bd9e20746eba' - ) - const proof = [ - '0xf90211a0feb6c6afca5ea568e0b7183d7292c112e9d28a1c846d889636d5c8822463aa77a0df719a24d8049d04a47e0e07ba493110fed0665d897c0ffdb05a7ce474782026a01bec363c069dc337ce16b4ca5cffa11d20e305fd7dcf6d87547b151c31aabf0ca00583d5a451bfa01f5e51d992e129ee17e65adda9495bda77898187484625aa9ea0bd9fef27cd52c2721e519bcd40c63a818095374e505a3bbd88db29c6c4521982a009a31937313c5b2bc06da6fec4075110f19526a9dbde3629ebe36aa8cd8e0851a0555f89002a34f6570bab438e69c5d8b855f2664e31f5dd59b807d0956577cc81a07e6f59ec99405b7afa436bf62abd098a85b43861fd3a9da3214a5d46b2d12543a03e7e883b0406cb781e5bf2a71cafc02ebbcdb0684ac03439633faf339d1259e2a0fa154fcf0bedd25aacac74e9864e4b96742c3d06f58c170cd320ade69db16c88a07e34154a031da5e50a3886efcb15c6681deeb20832726f083f80b03678b56d33a0d24408a39fb57838fdfe85c68f7eac74daab709ec3c22dfd0a579c1dbd64861aa093c1837ab2907fc51de7e918b81b997d60a6c8a18e3538720ee0d0f369530c26a0fca1af24293865f21d18d5eb823e0ecc007306823864f11d59c1c5c370fb22c2a0de8c894b5067d637df401aa6b963a3fc52b774abbedf6688e25bbf9a29672b7ca021c85d42de67601599e605d9ed1257451d1ce403d2478496d0a99d60db643d5280', - '0xf90211a02288f14667ef872b449e0f0f5526c2ad3634dcdb7376616d18fd87f6af9293bfa027223b95acda1508dbc42caac8edfb422759eedd13628e4dff0c5bf79d275182a0352a96940c817156a6e33c6f6cb2010ac216296f6e912c335982ba75ffb11898a0c3b7339a174d0a5fd842d3bb946a2ba6d9c1088215d9c3f56449af4dabb59e1ca03b331c72db0a3e0b51167ecb4d0ee76126181e3a54718e7cdefbf89ae0ae0d7ea03f162cadc26daa12d91e9ba459c9e61008ef57314e9cb810f074a878f2b81910a00dc670d0489ec214e2a636274d1e8b2df9db343218503ae2bf7ed868d8ab553fa0bffdd8cf5fe58452a64254f44e28ecd886964898fbab68711749423478d9c94ea0ca722fcaddd052f5a8ddce25c0c4161cd9e5552a0697ceccba540b0520cfcb61a0ffc0036ebf8ed2d9603de8c22d36cdc3fb451dd92a23adefe5593a4d8a12299da0bff43610f0c3d44e73e741d58f34f4d8e25aa3f67e0796241210bf321c2f1117a0341dcdbf2722bd7eacc3af46b6a9d80bb775dace93808a6737a1e135b9b225f3a07b3c3ec4c199c11374ba2dd28227e8c1efdbd8cb065768eff27e3918647eaccfa0e5a903a66eedfe8ea6d28a0f93cc91fc5f00f612a54aeeff100dafe84182a815a0203b138ec5130556a58d06184fdc399cb726954d28fe9fc68131f23d211382f5a057e92c1aec0a5b4e723cbbb3928d1008c9a9b4a26206656fccf70c14136a77de80', - '0xf90211a0437a65e2661356d938aa5321927d85003770566f25f121ec0dba4ad4acae9a8ca04acf516468076bf35f8c10e6aa904612fe08fcfba5c7b76bd87a5fe38e212c4da08db4fa1d774e1653468078c4c6a26cc6236025d6ab88dd1c02dae7c8bc7b19f7a03fb292d186e2d63e163788b3af313403cd12bc4b839037be4ad15a6fbbee217aa0dc569eab6a0b0a1d1dd7d12a24512bff7d4a6f5dc55a5a2dea31ed1a5415d383a0e4eaab256b73b4abc3402f44b6fa90a0854b733cdd5b884915ae8c07f5c78002a075ccef6818cc6c2870a70a0b41e3904ba2355937e028b02cb54a7ab321492357a0b059014d41d68c6c28b7de8f06b57c015210167d64c8589f9d7801dd4f025a60a07bf03f4912eaba2dd295222c1e01c1ddd7baedad61cf90d4e5987fc7ae1c6beaa0309d5aff3d1194cf259389cbb365e43548291aa9125d0550ab4908d1cc958844a0ff3fa5bba3bd95b08506336101c1c71cb920dd3ee68d8120654dac8f4b05d390a03a7b3de7b7476d9bf665396b718a28f8d746828bbf51a396e43669a4c90ca770a0913bc7b7ef04689a19cebf2c785f4eea68ccf9c97be94bb5bdd1346d4b145147a0cc21ab258bc2d961534438ddbbf185de30f8387acbc40f89857d88a23f90047ea0cf8b6876bd0cfd19ddd39fcfe88470d76757f64ba8496cfc382c92ed65706586a051de24dd2a27ffce89bb1dfcd6aa33469a91b50c4332ff9ef45d3cc917613a5c80', - '0xf90211a00aaeb3f8caea8f7167815fcdf1470777f7e100c781bc9ed79afefac295bb0d03a04b9f1d4ade00185fc62732b28abfb243afff140ebfa034daa4f139e0015a2195a0f9608d7d4346638e5ad4219ef6ea0769aa9fdb4bc6207831cf0f64854b072c2da0b953f4ee5f8ae17d9da8e3c1efaf9a822d0301dab05cae4b776fbd666fce8158a0bd8460bbbcfa3e02af0909445883176e3b65c85a63c6f91c2994fa2979228726a024f9c1c9952c2b6edec11955b50eaccd1ef44099db309f807f85aa4c4130b31ea056ad08d1e812df59fb54d2b847b1e7fa0872aaa1f3ac8f4e314d6893baece56aa02ca9f7cf8514dcca9401081f94b824f03b4d74dc690dfeed6779ddee4a9ad72ba050dffdadd79fbb8d857ad658864cd9cb19e69c73f8ba9c241fc2b451e2124320a00377a910bb501d1b22b7b03a3fa60aa47facf33515c10b0742fb76bd5a3d7a6ca0abcffd053ac378f2aa4d90e95c64dd7cc450fe6f961f9f55722cc49ef7b47f7ba042a8b3431675d5909bad710d519dd2c5d3287f3af8641122cce53b137087ce6ba0b77542431b232d0aabbbdf27e1c1adab761e144d396d0658ec1a84a712906a73a099ca74decdad4e079c0d1f35c8da403acbe65bf284253dab1be788f1808687eba06d866839d5ce08a75b3c8a2383b7eec6120ab32c7dfbe9b036831fc3101c8250a0fd315d671bf51da89b2db014d0f199be522fbf8e19d0276d0a14a1c66c1df8ac80', - '0xf901f1a0d6228395f59dea0ead05458d95d54c315c7feddf6416bb41aed62dc165446a6ca051e1ecb5424d948d386c0d291bb674fac4c47349f67e40a77850f54254b612b5a0e3b1d858fc2bb8001052eb3a36c9e2bea2966c795848aff0e5fb3cd779cfb565a0046a3c69a3639aa8bc1b3cf2c052d54424a88d2ea90a6388595b160ef5ef161780a0b2b1a778cbd8a3257ff7114116d892491a3ab148be723e22262b842680a9b29ea026da2284e756fcade15d922c0b8f6282a008e1c842e5030a307b3ea2e9a55726a026c0862e8e9e06ddef9ce37044fe2228a3ba9863faaf0cf1ad0863d41f7d7f13a0bcfbf48375296ad05ade4710ffe7e2b419fe246623369f7a6a4fa6f720bb185fa0d982dbbef7671cf7add6efd8612d47477b77f40d62e11983fe4478e959c0a86da0b3bf440462efb53c7056f5ff3ea134a072363a95a15a6945b83e416e6adee245a00396e89cb82998271f55ef0e892d456a7bbf624c23bf751f1ea2da6a7690be42a06f2588a03a07740fe4d300795096252abeb6b984e41b4f7027df84c1c520ea84a0ce163ce486c3de11ca2f6656f5dcf82e62496cb0d5472e042dede34d0e1aedd8a0fec8a8bfbf3e3418c4730c3c7c047cd73695c4c429f6ec6babc7165b9b27e635a002711d0ce2951376bac13daf1d3bcf359a90f68bc804b6b2b2e9efe09a8157af80', - '0xf89180808080808080a0326fe6fc4a847e4db1144153b15d0d3811f0317239f2885cc2a383825ccb1d8480a04455f6e0d1f8a2022ea33d5e6a537e384483dfccd19d07d21047e9b264b56e3c808080a06174ffa3ff6accab10abb5d61000db050324c608b10c0344a3eec6fa0107a079a0d494a04c23ba556fc3bdbe234562fe6825d55f3aaaa81e43415b8070a733d0bd8080', - '0xe482000fa03cb626e2849a157c57ca2e62c3dd139cf803efe281f5b6331b3ba92280dd8c42', - '0xf84d8080808080de9c332c35a4d03ec6ab9b3ffd06c69652ce8e02ff95537f98b7a0feb29c01808080de9c36620d27102d4799d259fe08f690c0a21b80d0a1a903db682417a23f0180808080808080', - ] - const modifiedProof = maybeAddProofNode(key, proof) - expect(modifiedProof).to.deep.equal([ - ...proof, - '0xde9c36620d27102d4799d259fe08f690c0a21b80d0a1a903db682417a23f01', - ]) - }) - - // Test taken from opBNB testnet withdrawal. - it('should not add a proof node when final node is a leaf node', () => { - const key = ethers.utils.keccak256( - '0x55b08006167f308d31af5ea9f302384725df906124e39e0eb2c6d040498e0fae' - ) - const proof = [ - '0xf90211a08c7918779c1c4435737b269573de96df28e1ec8c5847d7317906971b4c5fa73fa018679d112e60f815616a167692ea7d821691f34bed06df12c7b121a4c7b8384ba06b0a09649c9e7df1bde1c7448243c954dfecae8301b7f6bbe7d8f0b781733194a0258988e63a01754eafaffa3837ccc321c4f99d50869d04c09e7ab587988ecfa6a0a5b325ae646fd16ad7daac9d6da2ea244d456fa1a219f828cb9a5785f01bbf4ea0532b1427977ae09ee5344667910500207fd500912f9e1c6f5e7aa6b8b333a717a04a32b16d0d56f217216a9dae9eea953883ff3bcf1a9578d60d6bb28bbf4b6655a009e8cabb94c504eeb5cf15a151ed4b99be678bf969ee30be5d8aaf1312210079a0938dedf6ad32b04a9a2da09f29e481c51d7cf440d62651ed570355e12a4858d8a0b6bae212efc7179842abc76e9d6b2850b05336720b81dac467e942f7f6cd6b9ba0be45a8205c8c75ebe83c10cc9e87a597820d7e3ca691f9d1549e12a6f050a296a0c65bd95874adb4054ae8b346f2d2ccc88e76555c662b230d62072db36933508ca0e21442e3384b11c414e4a6bc2d56e71dbbbc672c38ac00bd63386ad55c590955a0d3d178f5be5f808d97ce22d48adce909ecf326cc5d9a0e7b64af616ca2d3e12ca09475833e7206cd83f7301f995617825f6d7050c782e17495ce5eb0556c2b68c4a09638ed778938e150e4c68cbcaf9bd47f97e1a6a6d6d2bbf9bc516450166a1ed980', - '0xf90211a0a3f8f3795f08496d4cd1b0c054c337d10d28fa2e9725162da7714c20d3b30c88a05856b0aa4c58cd715545c05ddb8bd93835dcd0ecbc7c2b139266af1c1850a671a000b3e2386218f9308469c731f6d53d5fb27512082390826956c8a234854a88aca0e525d6f4fa38fec4694f5cdb589156dc3a4d829861e1228b502c0130a4834ceaa0a414e804e76eb8863d1804ae04189237119b0415bf57c8a6a4ab176ad9f78eeca022aa4baf04a82bb83148c6ff6261dec1165f5d2f9bdf0ce73dfb2c9719fb8597a06fe7a289928f7fbd860aafb95945dcc2699bf7bf2010d6aa83b9f49308e968c9a008d5e746de17a948d6e7fc864286215d008e7f2d592cf7269df4dab0a3486215a0c39c7aa088d057db66179d7354b3f0d48f6d3ed2e62f8a840d9117b7b66a64bda0dd4ccdc76f721cf04cdf14d1d8a1821501d89c3d44ed5ed92b5a820431b36990a06c89982d73cc213516be264bb2fb6c969131f542afbc460ff781b839290e42f8a09954b3cbc392cdefb5664bc8483e1400def7846c631728d814b1a163ba871c44a0215b32a1491899a86be9c986dd695612a3964235b20e73158e501e6005cec689a0c1a8d7e66e95c7b661018c01dce2732f0f88614caa69e0e0848f5a750c8a9bbaa01aab317da329eee7bcdb91ee23d9a776f2a662bc672cc89f9d8f1c40cf94a4d5a013b5fc28d7d795f1203db98a7f49493ec4dbc6e7f19415131fd724274d53b93b80', - '0xf90211a099cf6b57cf52d79d997c6c7cacc880d9eecba4d91b711e94567d153a4e7a0586a05dd28dc2c3001cd399773fec132570d32a88cf439c15d8ed1750692892019bbda0419a8369667afcc1bd0eb25aa2ee01aa9914389f1c4c5b8cfdb76c7387b1efeda0c31b4168d817e9e6c1f8d9241cb61d3e40417396438799cae60b21036c569585a02cb6faef5768eb7381530c01c30a69ee9d6b74b63ad7875df8dce0d3f9e33beea0722b13f67dcc8e022e2f2f6cf42b697330425f910499f9f69455e9b9dc7a5696a0c2da3ee274178cd500418aa82c86116f8a19c03f50680589689cd76c526885baa0de4fcbd8ef4edef419cac8f12a67f76c27a7d53a47d0408251c89b191599e2a6a01bec2c60b7ab411ffe01ef36723a82b1e36df58759e4356b90f0b939cf9f7feca0823b67e452e64a3986da2836b6398bfe6dd6257b1313b649bd38b8109b442e86a0fe8fd7cf12be37c649531fa445116c53258d76664ba95b84f6adac356015f469a04d68070a9bd5b183068eafc1edfec122dba0ded10725ebc468cb0b7b7fba15d6a051b612dfba41f35f8c827ee18387bf6e3316cb8494fd30d88a091b5405bc5d8ca01c622f8ce84c20a5d1055a984e405638509e2e8683d1fa89725b4855500f353aa01e795b4bd4df111c9528d22c7964d89f96cdb5f7217fda91132b10b30782965fa0d91eacec2f75501bb1e9c7c3dd7d2cdf12d206627f096da1408573f2775646ce80', - '0xf90211a03b7d6150ad44f8399b7fa60d27034db408b0fe2f42770312dbc12220205ba6b2a0c34225fedb6a5a5351429e52c6dc637abed3bde536318fbb9e592630dbaa9ff8a0a3a4cbf9ee86518067c263c9ea3c59683306519f5ad518f8c7ccb298e8b405dda0bb9847a6a1e58287f2f5e0dd2fc9a7e78118639f1d9768d970114fd72cf4bb94a00bd41abbd004fc6aabb2ad6ca5ad6c8adc9188263b41e3c5c1c640bc6cdad909a01ddb2f8f80a1856248f813e3f066f12a0699c83c7a620a3a156f8d7320887901a0716be43af95da7bb5b22ffd86b67790da8f6470bdb771a1c72c3d8b918101f77a08e844b3e7b41dbf69f7cb59df673d21dd0d0679b387d136e77e91e01c2aa83cda01086f25f4f678183dc4a5398a0c608f28578619d5ef25890457f266dfd0b2b45a05c463dd5c575e7440ceea9322b3a50fc1111f45f15d8a2bb822efe430cb321e9a0deb669961500f680770e94ee2253cd5fbb20d30a0d2cb10a35efd0c1a7827ebaa090fb4c646e0a7d00b427d27372532e003f6e430fef4a896b26da3d334b5e35bea0e00315beb0ceadcbfe33727cfdb08d98c86dca534ceb50e799f2bf914e18da66a0b32fcca5247e924812fedc00a2f6c72ef36dfb28896a315bbbad8f7dac09623ca07e5d50949d89b497620383abcc9fe952911f4821b50184261c3dda6e46a0b815a039921c389fef00713e4ad8897bc5c68781fee90d0873a42cfd814b8709152c4380', - '0xf901f1a01dd4ceeb1ab5bc49adb270f4c031783adcc6d4b8b2c874778310b84188fe9b64a0747c08e80562666c517c00dfb2648e71273377b1412b56ad5e45f633f952229aa0991ce5972ae42c944f7d7fafb8cf01913a0658efd48ea4beff7dfc4c45c0f21aa0fe8c9b0e45134639ea41c880910a73d49d3c5fb8e3cf003eda7ceb48891b9d12a0d5748723a79117e595d805b90c5da4f28a88ca06ab8a3b540509fc5f74487be2a04724502db500742f7bf9f64bd6d0c9cecb150dcacd8f41b235baa3228120c3dc80a05ba19409d69154ee9397c0451ce8fe478a4a17097c49df7f25aa349243522455a01f16b5317ef849b7d520e74f02e3a1b5d3aa5454a009c398f6917ef72d12fd3aa0354fbfecc5fe46c76395042141308381ef0f59e0ffae159d1758b287dcd92c2ea065df8dd7ad7fe8accdc96ae5bf97802b1425dec3cef9c148f49c736dc8151faaa0eb440cd657329946458789ab7ba02df5dcd77a28095009305001fe5124424079a05fa06e6354a138012417afd550c71a9a08164bceccf652f150d1ea6a31f89d20a06cc7b02dce36338aa84041a725bb47b87bc93090b676776b53c0a7c654d93361a02c4ec483c0b8b4d148c133e2ea471b3432d310ed7c43d2b983203bd08adbb3eda025964bfbdd4d19d5d5f094ac4ca8bb2476047f3c5328cb1c84a24ee5bea5fdcb80', - '0xf851808080a045d583df49281f7f8c545ab91f4d35ba48873cc4da6deb2c0703135959fc8ec080808080a0ca2836f17b4c1af21e2531f7036a069ba8ef535650495820731ca669590dfddb8080808080808080', - '0xe09e202ec4eafbdfe1b7f218e5f087854c923c7f41b85d3ada15c32bef29588a01', - ] - const modifiedProof = maybeAddProofNode(key, proof) - expect(modifiedProof).to.deep.equal(proof) - }) - - // Test taken from MerkleTrie solidity test suite. - it('should not add a proof node when the value itself is inside a branch node', () => { - const key = '0x6b657933' - const proof = [ - '0xe68416b65793a0f3f387240403976788281c0a6ee5b3fc08360d276039d635bb824ea7e6fed779', - '0xf87180a034d14ccc7685aa2beb64f78b11ee2a335eae82047ef97c79b7dda7f0732b9f4ca05fb052b64e23d177131d9f32e9c5b942209eb7229e9a07c99a5d93245f53af18a09a137197a43a880648d5887cce656a5e6bbbe5e44ecb4f264395ccaddbe1acca80808080808080808080808080', - '0xf839808080808080c9823363856176616c338080808080808080809f31323334353637383930313233343536373839303132333435363738393031', - ] - const modifiedProof = maybeAddProofNode(key, proof) - expect(modifiedProof).to.deep.equal(proof) - }) - }) -}) diff --git a/packages/sdk/test/utils/message-utils.spec.ts b/packages/sdk/test/utils/message-utils.spec.ts deleted file mode 100644 index 0f57a796bc32..000000000000 --- a/packages/sdk/test/utils/message-utils.spec.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { BigNumber } from 'ethers' - -import { expect } from '../setup' -import { - migratedWithdrawalGasLimit, - hashLowLevelMessage, - hashMessageHash, -} from '../../src/utils/message-utils' - -const goerliChainID = 420 - -describe('Message Utils', () => { - describe('migratedWithdrawalGasLimit', () => { - it('should have a max of 25 million', () => { - const data = '0x' + 'ff'.repeat(15_000_000) - const result = migratedWithdrawalGasLimit(data, goerliChainID) - expect(result).to.eq(BigNumber.from(25_000_000)) - }) - - it('should work for mixes of zeros and ones', () => { - const tests = [ - { input: '0x', result: BigNumber.from(200_000) }, - { input: '0xff', result: BigNumber.from(200_000 + 16) }, - { input: '0xff00', result: BigNumber.from(200_000 + 16 + 16) }, - { input: '0x00', result: BigNumber.from(200_000 + 16) }, - { input: '0x000000', result: BigNumber.from(200_000 + 16 + 16 + 16) }, - ] - - for (const test of tests) { - const result = migratedWithdrawalGasLimit(test.input, goerliChainID) - expect(result).to.eq(test.result) - } - }) - }) - - /** - * Test that storage slot computation is correct. The test vectors are - * from actual migrated withdrawals on goerli. - */ - describe('Withdrawal Hashing', () => { - it('should work', () => { - const tests = [ - { - input: { - messageNonce: BigNumber.from(100000), - sender: '0x4200000000000000000000000000000000000007', - target: '0x5086d1eEF304eb5284A0f6720f79403b4e9bE294', - value: BigNumber.from(0), - minGasLimit: BigNumber.from(207744), - message: - '0xd764ad0b00000000000000000000000000000000000000000000000000000000000186a00000000000000000000000004200000000000000000000000000000000000010000000000000000000000000636af16bf2f682dd3109e60102b8e1a089fedaa80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e4a9f9e67500000000000000000000000007865c6e87b9f70255377e024ace6630c1eaa37f0000000000000000000000003b8e53b3ab8e01fb57d0c9e893bc4d655aa67d84000000000000000000000000b91882244f7f82540f2941a759724523c7b9a166000000000000000000000000b91882244f7f82540f2941a759724523c7b9a166000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', - }, - result: - '0x7c83d39edf60c0ab61bc7cfd2e5f741efdf02fd6e2da0f12318f0d1858d3773b', - }, - { - input: { - messageNonce: BigNumber.from(100001), - sender: '0x4200000000000000000000000000000000000007', - target: '0x5086d1eEF304eb5284A0f6720f79403b4e9bE294', - value: BigNumber.from(0), - minGasLimit: BigNumber.from(207744), - message: - '0xd764ad0b00000000000000000000000000000000000000000000000000000000000186a10000000000000000000000004200000000000000000000000000000000000010000000000000000000000000636af16bf2f682dd3109e60102b8e1a089fedaa80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e4a9f9e67500000000000000000000000007865c6e87b9f70255377e024ace6630c1eaa37f0000000000000000000000004e62882864fb8ce54affcaf8d899a286762b011b000000000000000000000000b91882244f7f82540f2941a759724523c7b9a166000000000000000000000000b91882244f7f82540f2941a759724523c7b9a166000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', - }, - result: - '0x17c90d87508a23d806962f4c5f366ef505e8d80e5cc2a5c87242560c21d7c588', - }, - ] - - for (const test of tests) { - const hash = hashLowLevelMessage(test.input) - const messageSlot = hashMessageHash(hash) - expect(messageSlot).to.eq(test.result) - } - }) - }) -}) diff --git a/packages/sdk/vitest.config.ts b/packages/sdk/vitest.config.ts deleted file mode 100644 index 45da2e6aa84a..000000000000 --- a/packages/sdk/vitest.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { defineConfig } from 'vitest/config' - -// https://vitest.dev/config/ - for docs -export default defineConfig({ - test: { - setupFiles: './setupVitest.ts', - include: ['test-next/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], - }, -}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f4db3ad30750..e7c6519ede2c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -114,15 +114,6 @@ importers: specifier: ^7.2.0 version: 7.2.0 - indexer/api-ts: - devDependencies: - tsup: - specifier: ^8.0.1 - version: 8.0.1(@swc/core@1.4.13)(postcss@8.4.35)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.11.17)(typescript@5.4.5))(typescript@5.4.5) - vitest: - specifier: ^1.2.2 - version: 1.2.2(@types/node@20.11.17)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.7))(terser@5.26.0) - packages/chain-mon: dependencies: '@eth-optimism/common-ts': @@ -190,60 +181,24 @@ importers: specifier: ^5.4.5 version: 5.4.5 - packages/sdk: + packages/devnet-tasks: dependencies: - '@eth-optimism/contracts': - specifier: 0.6.0 - version: 0.6.0(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(utf-8-validate@5.0.7) '@eth-optimism/core-utils': specifier: ^0.13.2 version: 0.13.2(bufferutil@4.0.8)(utf-8-validate@5.0.7) - lodash: - specifier: ^4.17.21 - version: 4.17.21 - merkletreejs: - specifier: ^0.3.11 - version: 0.3.11 - rlp: - specifier: ^2.2.7 - version: 2.2.7 - semver: - specifier: ^7.6.0 - version: 7.6.0 + '@eth-optimism/sdk': + specifier: ^3.3.1 + version: 3.3.1(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(utf-8-validate@5.0.7) devDependencies: - '@ethersproject/abstract-provider': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/abstract-signer': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/transactions': - specifier: ^5.7.0 - version: 5.7.0 '@nomiclabs/hardhat-ethers': specifier: ^2.2.3 version: 2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(hardhat@2.20.1(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.11.17)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.7)) '@nomiclabs/hardhat-waffle': specifier: ^2.0.1 - version: 2.0.1(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(hardhat@2.20.1(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.11.17)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.7)))(ethereum-waffle@4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(typescript@5.4.5))(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(hardhat@2.20.1(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.11.17)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.7)) - '@types/chai': - specifier: ^4.3.11 - version: 4.3.11 - '@types/chai-as-promised': - specifier: ^7.1.8 - version: 7.1.8 - '@types/mocha': - specifier: ^10.0.6 - version: 10.0.6 + version: 2.0.6(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(hardhat@2.20.1(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.11.17)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.7)))(@types/sinon-chai@3.2.5)(ethereum-waffle@4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(typescript@5.4.5))(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(hardhat@2.20.1(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.11.17)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.7)) '@types/node': specifier: ^20.11.17 version: 20.11.17 - '@types/semver': - specifier: ^7.5.7 - version: 7.5.7 - chai-as-promised: - specifier: ^7.1.1 - version: 7.1.1(chai@4.3.10) ethereum-waffle: specifier: ^4.0.10 version: 4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(typescript@5.4.5) @@ -256,12 +211,6 @@ importers: hardhat-deploy: specifier: ^0.12.2 version: 0.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.7) - isomorphic-fetch: - specifier: ^3.0.0 - version: 3.0.0 - mocha: - specifier: ^10.2.0 - version: 10.2.0 nyc: specifier: ^15.1.0 version: 15.1.0 @@ -274,15 +223,6 @@ importers: typescript: specifier: ^5.4.5 version: 5.4.5 - viem: - specifier: ^2.8.13 - version: 2.8.13(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.7)(zod@3.22.4) - vitest: - specifier: ^1.2.2 - version: 1.2.2(@types/node@20.11.17)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.7))(terser@5.26.0) - zod: - specifier: ^3.22.4 - version: 3.22.4 packages: @@ -290,9 +230,6 @@ packages: resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} - '@adraffy/ens-normalize@1.10.0': - resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} - '@ampproject/remapping@2.2.1': resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} @@ -489,264 +426,132 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.19.7': - resolution: {integrity: sha512-YEDcw5IT7hW3sFKZBkCAQaOCJQLONVcD4bOyTXMZz5fr66pTHnAet46XAtbXAkJRfIn2YVhdC6R9g4xa27jQ1w==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm@0.19.10': resolution: {integrity: sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w==} engines: {node: '>=12'} cpu: [arm] os: [android] - '@esbuild/android-arm@0.19.7': - resolution: {integrity: sha512-YGSPnndkcLo4PmVl2tKatEn+0mlVMr3yEpOOT0BeMria87PhvoJb5dg5f5Ft9fbCVgtAz4pWMzZVgSEGpDAlww==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - '@esbuild/android-x64@0.19.10': resolution: {integrity: sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw==} engines: {node: '>=12'} cpu: [x64] os: [android] - '@esbuild/android-x64@0.19.7': - resolution: {integrity: sha512-jhINx8DEjz68cChFvM72YzrqfwJuFbfvSxZAk4bebpngGfNNRm+zRl4rtT9oAX6N9b6gBcFaJHFew5Blf6CvUw==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - '@esbuild/darwin-arm64@0.19.10': resolution: {integrity: sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.19.7': - resolution: {integrity: sha512-dr81gbmWN//3ZnBIm6YNCl4p3pjnabg1/ZVOgz2fJoUO1a3mq9WQ/1iuEluMs7mCL+Zwv7AY5e3g1hjXqQZ9Iw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-x64@0.19.10': resolution: {integrity: sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.19.7': - resolution: {integrity: sha512-Lc0q5HouGlzQEwLkgEKnWcSazqr9l9OdV2HhVasWJzLKeOt0PLhHaUHuzb8s/UIya38DJDoUm74GToZ6Wc7NGQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - '@esbuild/freebsd-arm64@0.19.10': resolution: {integrity: sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.19.7': - resolution: {integrity: sha512-+y2YsUr0CxDFF7GWiegWjGtTUF6gac2zFasfFkRJPkMAuMy9O7+2EH550VlqVdpEEchWMynkdhC9ZjtnMiHImQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-x64@0.19.10': resolution: {integrity: sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.19.7': - resolution: {integrity: sha512-CdXOxIbIzPJmJhrpmJTLx+o35NoiKBIgOvmvT+jeSadYiWJn0vFKsl+0bSG/5lwjNHoIDEyMYc/GAPR9jxusTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - '@esbuild/linux-arm64@0.19.10': resolution: {integrity: sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==} engines: {node: '>=12'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.19.7': - resolution: {integrity: sha512-inHqdOVCkUhHNvuQPT1oCB7cWz9qQ/Cz46xmVe0b7UXcuIJU3166aqSunsqkgSGMtUCWOZw3+KMwI6otINuC9g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm@0.19.10': resolution: {integrity: sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg==} engines: {node: '>=12'} cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.19.7': - resolution: {integrity: sha512-Y+SCmWxsJOdQtjcBxoacn/pGW9HDZpwsoof0ttL+2vGcHokFlfqV666JpfLCSP2xLxFpF1lj7T3Ox3sr95YXww==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - '@esbuild/linux-ia32@0.19.10': resolution: {integrity: sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.19.7': - resolution: {integrity: sha512-2BbiL7nLS5ZO96bxTQkdO0euGZIUQEUXMTrqLxKUmk/Y5pmrWU84f+CMJpM8+EHaBPfFSPnomEaQiG/+Gmh61g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-loong64@0.19.10': resolution: {integrity: sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.19.7': - resolution: {integrity: sha512-BVFQla72KXv3yyTFCQXF7MORvpTo4uTA8FVFgmwVrqbB/4DsBFWilUm1i2Oq6zN36DOZKSVUTb16jbjedhfSHw==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-mips64el@0.19.10': resolution: {integrity: sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.19.7': - resolution: {integrity: sha512-DzAYckIaK+pS31Q/rGpvUKu7M+5/t+jI+cdleDgUwbU7KdG2eC3SUbZHlo6Q4P1CfVKZ1lUERRFP8+q0ob9i2w==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-ppc64@0.19.10': resolution: {integrity: sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.19.7': - resolution: {integrity: sha512-JQ1p0SmUteNdUaaiRtyS59GkkfTW0Edo+e0O2sihnY4FoZLz5glpWUQEKMSzMhA430ctkylkS7+vn8ziuhUugQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-riscv64@0.19.10': resolution: {integrity: sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.19.7': - resolution: {integrity: sha512-xGwVJ7eGhkprY/nB7L7MXysHduqjpzUl40+XoYDGC4UPLbnG+gsyS1wQPJ9lFPcxYAaDXbdRXd1ACs9AE9lxuw==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-s390x@0.19.10': resolution: {integrity: sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA==} engines: {node: '>=12'} cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.19.7': - resolution: {integrity: sha512-U8Rhki5PVU0L0nvk+E8FjkV8r4Lh4hVEb9duR6Zl21eIEYEwXz8RScj4LZWA2i3V70V4UHVgiqMpszXvG0Yqhg==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-x64@0.19.10': resolution: {integrity: sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA==} engines: {node: '>=12'} cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.19.7': - resolution: {integrity: sha512-ZYZopyLhm4mcoZXjFt25itRlocKlcazDVkB4AhioiL9hOWhDldU9n38g62fhOI4Pth6vp+Mrd5rFKxD0/S+7aQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - '@esbuild/netbsd-x64@0.19.10': resolution: {integrity: sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.19.7': - resolution: {integrity: sha512-/yfjlsYmT1O3cum3J6cmGG16Fd5tqKMcg5D+sBYLaOQExheAJhqr8xOAEIuLo8JYkevmjM5zFD9rVs3VBcsjtQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - '@esbuild/openbsd-x64@0.19.10': resolution: {integrity: sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.19.7': - resolution: {integrity: sha512-MYDFyV0EW1cTP46IgUJ38OnEY5TaXxjoDmwiTXPjezahQgZd+j3T55Ht8/Q9YXBM0+T9HJygrSRGV5QNF/YVDQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - '@esbuild/sunos-x64@0.19.10': resolution: {integrity: sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.19.7': - resolution: {integrity: sha512-JcPvgzf2NN/y6X3UUSqP6jSS06V0DZAV/8q0PjsZyGSXsIGcG110XsdmuWiHM+pno7/mJF6fjH5/vhUz/vA9fw==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - '@esbuild/win32-arm64@0.19.10': resolution: {integrity: sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw==} engines: {node: '>=12'} cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.19.7': - resolution: {integrity: sha512-ZA0KSYti5w5toax5FpmfcAgu3ZNJxYSRm0AW/Dao5up0YV1hDVof1NvwLomjEN+3/GMtaWDI+CIyJOMTRSTdMw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-ia32@0.19.10': resolution: {integrity: sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.19.7': - resolution: {integrity: sha512-CTOnijBKc5Jpk6/W9hQMMvJnsSYRYgveN6O75DTACCY18RA2nqka8dTZR+x/JqXCRiKk84+5+bRKXUSbbwsS0A==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-x64@0.19.10': resolution: {integrity: sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==} engines: {node: '>=12'} cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.19.7': - resolution: {integrity: sha512-gRaP2sk6hc98N734luX4VpF318l3w+ofrtTu9j5L8EQXF+FzQKV6alCOHMVoJJHvVK/mGbwBXfOL1HETQu9IGQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1007,9 +812,6 @@ packages: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - '@jridgewell/source-map@0.3.5': - resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} - '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} @@ -1035,9 +837,6 @@ packages: '@noble/curves@1.1.0': resolution: {integrity: sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==} - '@noble/curves@1.2.0': - resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} - '@noble/hashes@1.2.0': resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} @@ -1196,14 +995,6 @@ packages: ethers: ^5.0.0 hardhat: ^2.0.0 - '@nomiclabs/hardhat-waffle@2.0.1': - resolution: {integrity: sha512-2YR2V5zTiztSH9n8BYWgtv3Q+EL0N5Ltm1PAr5z20uAY4SkkfylJ98CIqt18XFvxTD5x4K2wKBzddjV9ViDAZQ==} - peerDependencies: - '@nomiclabs/hardhat-ethers': ^2.0.0 - ethereum-waffle: ^3.2.0 - ethers: ^5.0.0 - hardhat: ^2.0.0 - '@nomiclabs/hardhat-waffle@2.0.6': resolution: {integrity: sha512-+Wz0hwmJGSI17B+BhU/qFRZ1l6/xMW82QGXE/Gi+WTmwgJrQefuBs1lIf7hzQ1hLk6hpkvb/zwcNkpVKRYTQYg==} peerDependencies: @@ -1296,66 +1087,6 @@ packages: '@resolver-engine/imports@0.3.3': resolution: {integrity: sha512-anHpS4wN4sRMwsAbMXhMfOD/y4a4Oo0Cw/5+rue7hSwGWsDOQaAU1ClK1OxjUC35/peazxEl8JaSRRS+Xb8t3Q==} - '@rollup/rollup-android-arm-eabi@4.5.1': - resolution: {integrity: sha512-YaN43wTyEBaMqLDYeze+gQ4ZrW5RbTEGtT5o1GVDkhpdNcsLTnLRcLccvwy3E9wiDKWg9RIhuoy3JQKDRBfaZA==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.5.1': - resolution: {integrity: sha512-n1bX+LCGlQVuPlCofO0zOKe1b2XkFozAVRoczT+yxWZPGnkEAKTTYVOGZz8N4sKuBnKMxDbfhUsB1uwYdup/sw==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.5.1': - resolution: {integrity: sha512-QqJBumdvfBqBBmyGHlKxje+iowZwrHna7pokj/Go3dV1PJekSKfmjKrjKQ/e6ESTGhkfPNLq3VXdYLAc+UtAQw==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.5.1': - resolution: {integrity: sha512-RrkDNkR/P5AEQSPkxQPmd2ri8WTjSl0RYmuFOiEABkEY/FSg0a4riihWQGKDJ4LnV9gigWZlTMx2DtFGzUrYQw==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-linux-arm-gnueabihf@4.5.1': - resolution: {integrity: sha512-ZFPxvUZmE+fkB/8D9y/SWl/XaDzNSaxd1TJUSE27XAKlRpQ2VNce/86bGd9mEUgL3qrvjJ9XTGwoX0BrJkYK/A==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.5.1': - resolution: {integrity: sha512-FEuAjzVIld5WVhu+M2OewLmjmbXWd3q7Zcx+Rwy4QObQCqfblriDMMS7p7+pwgjZoo9BLkP3wa9uglQXzsB9ww==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.5.1': - resolution: {integrity: sha512-f5Gs8WQixqGRtI0Iq/cMqvFYmgFzMinuJO24KRfnv7Ohi/HQclwrBCYkzQu1XfLEEt3DZyvveq9HWo4bLJf1Lw==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.5.1': - resolution: {integrity: sha512-CWPkPGrFfN2vj3mw+S7A/4ZaU3rTV7AkXUr08W9lNP+UzOvKLVf34tWCqrKrfwQ0NTk5GFqUr2XGpeR2p6R4gw==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.5.1': - resolution: {integrity: sha512-ZRETMFA0uVukUC9u31Ed1nx++29073goCxZtmZARwk5aF/ltuENaeTtRVsSQzFlzdd4J6L3qUm+EW8cbGt0CKQ==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-win32-arm64-msvc@4.5.1': - resolution: {integrity: sha512-ihqfNJNb2XtoZMSCPeoo0cYMgU04ksyFIoOw5S0JUVbOhafLot+KD82vpKXOurE2+9o/awrqIxku9MRR9hozHQ==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.5.1': - resolution: {integrity: sha512-zK9MRpC8946lQ9ypFn4gLpdwr5a01aQ/odiIJeL9EbgZDMgbZjjT/XzTqJvDfTmnE1kHdbG20sAeNlpc91/wbg==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.5.1': - resolution: {integrity: sha512-5I3Nz4Sb9TYOtkRwlH0ow+BhMH2vnh38tZ4J4mggE48M/YyJyp/0sPSxhw1UeS1+oBgQ8q7maFtSeKpeRJu41Q==} - cpu: [x64] - os: [win32] - '@scure/base@1.1.3': resolution: {integrity: sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==} @@ -1365,9 +1096,6 @@ packages: '@scure/bip32@1.3.1': resolution: {integrity: sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==} - '@scure/bip32@1.3.2': - resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} - '@scure/bip39@1.1.1': resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==} @@ -1573,9 +1301,6 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - '@types/estree@1.0.5': - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - '@types/express-serve-static-core@4.17.35': resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==} @@ -1669,15 +1394,9 @@ packages: '@types/sinon@10.0.2': resolution: {integrity: sha512-BHn8Bpkapj8Wdfxvh2jWIUoaYB/9/XhsL0oOvBfRagJtKlSl9NWPcFOz2lRukI9szwGxFtYZCTejJSqsGDbdmw==} - '@types/underscore@1.11.3': - resolution: {integrity: sha512-Fl1TX1dapfXyDqFg2ic9M+vlXRktcPJrc4PR7sRc7sdVrjavg/JHlbUXBt8qWWqhJrmSqg3RNAkAPRiOYw6Ahw==} - '@types/unist@2.0.6': resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} - '@types/web3@1.0.19': - resolution: {integrity: sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==} - '@typescript-eslint/eslint-plugin@6.21.0': resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1739,21 +1458,6 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@vitest/expect@1.2.2': - resolution: {integrity: sha512-3jpcdPAD7LwHUUiT2pZTj2U82I2Tcgg2oVPvKxhn6mDI2On6tfvPQTjAI4628GUGDZrCm4Zna9iQHm5cEexOAg==} - - '@vitest/runner@1.2.2': - resolution: {integrity: sha512-JctG7QZ4LSDXr5CsUweFgcpEvrcxOV1Gft7uHrvkQ+fsAVylmWQvnaAr/HDp3LAH1fztGMQZugIheTWjaGzYIg==} - - '@vitest/snapshot@1.2.2': - resolution: {integrity: sha512-SmGY4saEw1+bwE1th6S/cZmPxz/Q4JWsl7LvbQIky2tKE35US4gd0Mjzqfr84/4OD0tikGWaWdMja/nWL5NIPA==} - - '@vitest/spy@1.2.2': - resolution: {integrity: sha512-k9Gcahssw8d7X3pSLq3e3XEu/0L78mUkCjivUqCQeXJm9clfXR/Td8+AP+VC1O6fKPIDLcHDTAmBOINVuv6+7g==} - - '@vitest/utils@1.2.2': - resolution: {integrity: sha512-WKITBHLsBHlpjnDQahr+XK6RE7MiAsgrIkr0pGhQ9ygoxBfUeG0lUG5iLlzqjmKSlBv3+j5EGsriBzh+C3Tq9g==} - '@vue/compiler-core@3.3.4': resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==} @@ -1783,17 +1487,6 @@ packages: resolution: {integrity: sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==} hasBin: true - abitype@1.0.0: - resolution: {integrity: sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==} - peerDependencies: - typescript: '>=5.0.4' - zod: ^3 >=3.22.0 - peerDependenciesMeta: - typescript: - optional: true - zod: - optional: true - abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -1819,10 +1512,6 @@ packages: resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} engines: {node: '>=0.4.0'} - acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} - engines: {node: '>=0.4.0'} - acorn@8.10.0: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} @@ -1839,10 +1528,6 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} - agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} - engines: {node: '>= 14'} - aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1903,9 +1588,6 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -2180,12 +1862,6 @@ packages: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} - bundle-require@4.0.1: - resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - esbuild: '>=0.17' - busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -2194,10 +1870,6 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - caching-transform@4.0.0: resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} engines: {node: '>=8'} @@ -2392,10 +2064,6 @@ packages: commander@3.0.2: resolution: {integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==} - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} @@ -2418,9 +2086,6 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} - convert-source-map@1.8.0: - resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} - convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} @@ -2473,10 +2138,6 @@ packages: crypto-js@4.2.0: resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} - cssstyle@4.0.1: - resolution: {integrity: sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==} - engines: {node: '>=18'} - csv-generate@3.4.3: resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} @@ -2494,10 +2155,6 @@ packages: resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} engines: {node: '>=0.10'} - data-urls@5.0.0: - resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} - engines: {node: '>=18'} - dataloader@1.4.0: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} @@ -2541,9 +2198,6 @@ packages: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} - decimal.js@10.4.3: - resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - deep-eql@4.1.3: resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} engines: {node: '>=6'} @@ -2729,10 +2383,6 @@ packages: resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} engines: {node: '>=0.12'} - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -2774,11 +2424,6 @@ packages: engines: {node: '>=12'} hasBin: true - esbuild@0.19.7: - resolution: {integrity: sha512-6brbTZVqxhqgbpqBR5MzErImcpA0SQdoKOkcWK/U30HtQxnokIpG3TX2r0IJqbFUzqLjhU/zC1S5ndgakObVCQ==} - engines: {node: '>=12'} - hasBin: true - escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -2951,9 +2596,6 @@ packages: estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -3023,10 +2665,6 @@ packages: evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} @@ -3291,10 +2929,6 @@ packages: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} @@ -3322,11 +2956,9 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true - glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + deprecated: Glob versions prior to v9 are no longer supported glob@7.2.0: resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} @@ -3457,10 +3089,6 @@ packages: hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - html-encoding-sniffer@4.0.0: - resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} - engines: {node: '>=18'} - html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -3471,10 +3099,6 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} - http-proxy-agent@7.0.0: - resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} - engines: {node: '>= 14'} - http-signature@1.2.0: resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} engines: {node: '>=0.8', npm: '>=1.3.7'} @@ -3483,17 +3107,9 @@ packages: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} - https-proxy-agent@7.0.2: - resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} - engines: {node: '>= 14'} - human-id@1.0.2: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} @@ -3507,10 +3123,6 @@ packages: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - idna-uts46-hx@2.3.1: resolution: {integrity: sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==} engines: {node: '>=4.0.0'} @@ -3697,9 +3309,6 @@ packages: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} - is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -3770,21 +3379,9 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isomorphic-fetch@3.0.0: - resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} - - isows@1.0.3: - resolution: {integrity: sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==} - peerDependencies: - ws: '*' - isstream@0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} - istanbul-lib-coverage@3.0.0: - resolution: {integrity: sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==} - engines: {node: '>=8'} - istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} @@ -3801,10 +3398,6 @@ packages: resolution: {integrity: sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==} engines: {node: '>=8'} - istanbul-lib-report@3.0.0: - resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} - engines: {node: '>=8'} - istanbul-lib-report@3.0.1: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} @@ -3835,10 +3428,6 @@ packages: joi@17.11.0: resolution: {integrity: sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==} - joycon@3.1.1: - resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} - engines: {node: '>=10'} - js-sdsl@4.4.2: resolution: {integrity: sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==} @@ -3866,15 +3455,6 @@ packages: resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} engines: {node: '>=12.0.0'} - jsdom@24.0.0: - resolution: {integrity: sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==} - engines: {node: '>=18'} - peerDependencies: - canvas: ^2.11.2 - peerDependenciesMeta: - canvas: - optional: true - jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -3999,10 +3579,6 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - lilconfig@3.0.0: resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} engines: {node: '>=14'} @@ -4027,18 +3603,10 @@ packages: resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==} engines: {node: '>=0.10.0'} - load-tsconfig@0.2.5: - resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - load-yaml-file@0.2.0: resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} engines: {node: '>=6'} - local-pkg@0.5.0: - resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} - engines: {node: '>=14'} - locate-path@2.0.0: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} engines: {node: '>=4'} @@ -4063,9 +3631,6 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} @@ -4340,9 +3905,6 @@ packages: engines: {node: '>=10'} hasBin: true - mlly@1.4.2: - resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} - mnemonist@0.38.3: resolution: {integrity: sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==} @@ -4371,9 +3933,6 @@ packages: murmur-128@0.2.1: resolution: {integrity: sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==} - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@3.3.3: resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -4444,9 +4003,6 @@ packages: resolution: {integrity: sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==} engines: {node: '>=6.5.0', npm: '>=3'} - nwsapi@2.2.7: - resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} - nx-cloud@18.0.0: resolution: {integrity: sha512-VpPywcHmFIU3GSWb3KV3nQ+TAMLc06DTO39vTFsM+HreB6qRloDxbADRvfM5eHAbY26TNmwflT7wxd0fluv2+A==} hasBin: true @@ -4583,10 +4139,6 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-limit@5.0.0: - resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} - engines: {node: '>=18'} - p-locate@2.0.0: resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} engines: {node: '>=4'} @@ -4642,9 +4194,6 @@ packages: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} - parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} - parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -4694,9 +4243,6 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - pathe@1.1.1: - resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} - pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} @@ -4764,17 +4310,10 @@ packages: resolution: {integrity: sha512-oswmokxkav9bADfJ2ifrvfHUwad6MLp73Uat0IkQWY3iAw5xTRoznXbXksZs8oaOUMpmhVWD+PZogNzllWpJaA==} hasBin: true - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - pkg-types@1.0.3: - resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} - please-upgrade-node@3.2.0: resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==} @@ -4782,18 +4321,6 @@ packages: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} - postcss-load-config@4.0.1: - resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - postcss@8.4.35: resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} engines: {node: ^10 || ^12 || >=14} @@ -4885,9 +4412,6 @@ packages: resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} engines: {node: '>=0.6'} - querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -5032,9 +4556,6 @@ packages: require-package-name@2.0.1: resolution: {integrity: sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==} - requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - resolve-dir@1.0.1: resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} engines: {node: '>=0.10.0'} @@ -5082,6 +4603,7 @@ packages: rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rimraf@3.0.2: @@ -5104,14 +4626,6 @@ packages: resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} hasBin: true - rollup@4.5.1: - resolution: {integrity: sha512-0EQribZoPKpb5z1NW/QYm3XSR//Xr8BeEXU49Lc/mQmpmVVG5jPUVrpc2iptup/0WMrY9mzas0fxH+TjYvG2CA==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - rrweb-cssom@0.6.0: - resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} - run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -5147,10 +4661,6 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - saxes@6.0.0: - resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} - engines: {node: '>=v12.22.7'} - scrypt-js@3.0.1: resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} @@ -5227,9 +4737,6 @@ packages: side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -5285,10 +4792,6 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} - spawn-wrap@2.0.0: resolution: {integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==} engines: {node: '>=8'} @@ -5326,9 +4829,6 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - stacktrace-parser@0.1.10: resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} engines: {node: '>=6'} @@ -5337,9 +4837,6 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - std-env@3.6.0: - resolution: {integrity: sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg==} - stream-shift@1.0.1: resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} @@ -5413,10 +4910,6 @@ packages: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} @@ -5433,19 +4926,11 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strip-literal@1.3.0: - resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} - strong-log-transformer@2.1.0: resolution: {integrity: sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==} engines: {node: '>=4'} hasBin: true - sucrase@3.34.0: - resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} - engines: {node: '>=8'} - hasBin: true - supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -5462,9 +4947,6 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - table-layout@1.0.2: resolution: {integrity: sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==} engines: {node: '>=8.0.0'} @@ -5484,11 +4966,6 @@ packages: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} - terser@5.26.0: - resolution: {integrity: sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==} - engines: {node: '>=10'} - hasBin: true - test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -5500,13 +4977,6 @@ packages: text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - thread-stream@0.15.2: resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} @@ -5519,17 +4989,6 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - tinybench@2.5.1: - resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} - - tinypool@0.8.2: - resolution: {integrity: sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==} - engines: {node: '>=14.0.0'} - - tinyspy@2.2.0: - resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} - engines: {node: '>=14.0.0'} - tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -5554,27 +5013,12 @@ packages: resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} engines: {node: '>=0.8'} - tough-cookie@4.1.3: - resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} - engines: {node: '>=6'} - tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - - tr46@5.0.0: - resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} - engines: {node: '>=18'} - traverse@0.6.6: resolution: {integrity: sha512-kdf4JKs8lbARxWdp7RKdNzoJBhGUcIalSYibuGyHJbmk40pOysQ0+QPvlkCOICOivDWU2IJo2rkrxyTK2AH4fw==} - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - treeify@1.1.0: resolution: {integrity: sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==} engines: {node: '>=0.6'} @@ -5601,9 +5045,6 @@ packages: peerDependencies: typescript: '>=3.7.0' - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - ts-mocha@10.0.0: resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} engines: {node: '>= 6.X.X'} @@ -5646,25 +5087,6 @@ packages: tsort@0.0.1: resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} - tsup@8.0.1: - resolution: {integrity: sha512-hvW7gUSG96j53ZTSlT4j/KL0q1Q2l6TqGBFc6/mu/L46IoNWqLLUzLRLP1R8Q7xrJTmkDxxDoojV5uCVs1sVOg==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - '@microsoft/api-extractor': ^7.36.0 - '@swc/core': ^1 - postcss: ^8.4.12 - typescript: '>=4.5.0' - peerDependenciesMeta: - '@microsoft/api-extractor': - optional: true - '@swc/core': - optional: true - postcss: - optional: true - typescript: - optional: true - tsx@4.7.0: resolution: {integrity: sha512-I+t79RYPlEYlHn9a+KzwrvEwhJg35h/1zHsLC2JXvhC2mdynMv6Zxzvhv5EMV6VF5qJlLlkSnMVvdZV3PSIGcg==} engines: {node: '>=18.0.0'} @@ -5776,9 +5198,6 @@ packages: resolution: {integrity: sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==} engines: {node: '>=8'} - ufo@1.3.2: - resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} - unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} @@ -5808,10 +5227,6 @@ packages: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} - universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} - universalify@2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} @@ -5832,9 +5247,6 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - url-value-parser@2.0.3: resolution: {integrity: sha512-FjIX+Q9lYmDM9uYIGdMYfQW0uLbWVwN2NrL2ayAI7BTOvEwzH+VoDdNquwB9h4dFAx+u6mb0ONLa3sHD5DvyvA==} engines: {node: '>=6.0.0'} @@ -5885,110 +5297,12 @@ packages: vfile@4.2.1: resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} - viem@2.8.13: - resolution: {integrity: sha512-jEbRUjsiBwmoDr3fnKL1Bh1GhK5ERhmZcPLeARtEaQoBTPB6bcO2siKhNPVOF8qrYRnGHGQrZHncBWMQhTjGYg==} - peerDependencies: - typescript: '>=5.0.4' - peerDependenciesMeta: - typescript: - optional: true - - vite-node@1.2.2: - resolution: {integrity: sha512-1as4rDTgVWJO3n1uHmUYqq7nsFgINQ9u+mRcXpjeOMJUmviqNKjcZB7UfRZrlM7MjYXMKpuWp5oGkjaFLnjawg==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - - vite@5.1.5: - resolution: {integrity: sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - - vite@5.1.7: - resolution: {integrity: sha512-sgnEEFTZYMui/sTlH1/XEnVNHMujOahPLGMxn1+5sIT45Xjng1Ec1K78jRP15dSmVgg5WBin9yO81j3o9OxofA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - - vitest@1.2.2: - resolution: {integrity: sha512-d5Ouvrnms3GD9USIK36KG8OZ5bEvKEkITFtnGv56HFaSlbItJuYr7hv2Lkn903+AvRAgSixiamozUVfORUekjw==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': ^1.0.0 - '@vitest/ui': ^1.0.0 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@types/node': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - vscode-oniguruma@1.7.0: resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} vscode-textmate@8.0.0: resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} - w3c-xmlserializer@5.0.0: - resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} - engines: {node: '>=18'} - wait-on@7.2.0: resolution: {integrity: sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==} engines: {node: '>=12.0.0'} @@ -6004,34 +5318,9 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - - webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} - - whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} - - whatwg-fetch@3.6.17: - resolution: {integrity: sha512-c4ghIvG6th0eudYwKZY5keb81wtFz9/WeAHAoy8+r18kcWlitUIrmGFQ2rWEl4UCKUilD3zCLHOIPheHx5ypRQ==} - - whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} - - whatwg-url@14.0.0: - resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} - engines: {node: '>=18'} - whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -6065,11 +5354,6 @@ packages: engines: {node: '>= 8'} hasBin: true - why-is-node-running@2.2.2: - resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} - engines: {node: '>=8'} - hasBin: true - widest-line@3.1.0: resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} engines: {node: '>=8'} @@ -6136,37 +5420,6 @@ packages: utf-8-validate: optional: true - ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - ws@8.16.0: - resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - xml-name-validator@5.0.0: - resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} - engines: {node: '>=18'} - - xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -6248,19 +5501,12 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} - zksync-ethers@5.6.0: resolution: {integrity: sha512-+lw1dhURpVZos6+g82HdXVw2i/OI+S2nTqyNvBK2xwnQYv8vqxv0Ux/cMPV2AflswTG1/zrMmseRp+UJUCaw9g==} engines: {node: '>=16.0.0'} peerDependencies: ethers: ~5.7.0 - zod@3.22.4: - resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} - zwitch@1.0.5: resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} @@ -6268,8 +5514,6 @@ snapshots: '@aashutoshrathi/word-wrap@1.2.6': {} - '@adraffy/ens-normalize@1.10.0': {} - '@ampproject/remapping@2.2.1': dependencies: '@jridgewell/gen-mapping': 0.3.3 @@ -6607,135 +5851,69 @@ snapshots: '@esbuild/android-arm64@0.19.10': optional: true - '@esbuild/android-arm64@0.19.7': - optional: true - '@esbuild/android-arm@0.19.10': optional: true - '@esbuild/android-arm@0.19.7': - optional: true - '@esbuild/android-x64@0.19.10': optional: true - '@esbuild/android-x64@0.19.7': - optional: true - '@esbuild/darwin-arm64@0.19.10': optional: true - '@esbuild/darwin-arm64@0.19.7': - optional: true - '@esbuild/darwin-x64@0.19.10': optional: true - '@esbuild/darwin-x64@0.19.7': - optional: true - '@esbuild/freebsd-arm64@0.19.10': optional: true - '@esbuild/freebsd-arm64@0.19.7': - optional: true - '@esbuild/freebsd-x64@0.19.10': optional: true - '@esbuild/freebsd-x64@0.19.7': - optional: true - '@esbuild/linux-arm64@0.19.10': optional: true - '@esbuild/linux-arm64@0.19.7': - optional: true - '@esbuild/linux-arm@0.19.10': optional: true - '@esbuild/linux-arm@0.19.7': - optional: true - '@esbuild/linux-ia32@0.19.10': optional: true - '@esbuild/linux-ia32@0.19.7': - optional: true - '@esbuild/linux-loong64@0.19.10': optional: true - '@esbuild/linux-loong64@0.19.7': - optional: true - '@esbuild/linux-mips64el@0.19.10': optional: true - '@esbuild/linux-mips64el@0.19.7': - optional: true - '@esbuild/linux-ppc64@0.19.10': optional: true - '@esbuild/linux-ppc64@0.19.7': - optional: true - '@esbuild/linux-riscv64@0.19.10': optional: true - '@esbuild/linux-riscv64@0.19.7': - optional: true - '@esbuild/linux-s390x@0.19.10': optional: true - '@esbuild/linux-s390x@0.19.7': - optional: true - '@esbuild/linux-x64@0.19.10': optional: true - '@esbuild/linux-x64@0.19.7': - optional: true - '@esbuild/netbsd-x64@0.19.10': optional: true - '@esbuild/netbsd-x64@0.19.7': - optional: true - '@esbuild/openbsd-x64@0.19.10': optional: true - '@esbuild/openbsd-x64@0.19.7': - optional: true - '@esbuild/sunos-x64@0.19.10': optional: true - '@esbuild/sunos-x64@0.19.7': - optional: true - '@esbuild/win32-arm64@0.19.10': optional: true - '@esbuild/win32-arm64@0.19.7': - optional: true - '@esbuild/win32-ia32@0.19.10': optional: true - '@esbuild/win32-ia32@0.19.7': - optional: true - '@esbuild/win32-x64@0.19.10': optional: true - '@esbuild/win32-x64@0.19.7': - optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.56.0)': dependencies: eslint: 8.56.0 @@ -7331,12 +6509,6 @@ snapshots: '@jridgewell/set-array@1.1.2': {} - '@jridgewell/source-map@0.3.5': - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 - optional: true - '@jridgewell/sourcemap-codec@1.4.15': {} '@jridgewell/trace-mapping@0.3.19': @@ -7381,10 +6553,6 @@ snapshots: dependencies: '@noble/hashes': 1.3.1 - '@noble/curves@1.2.0': - dependencies: - '@noble/hashes': 1.3.2 - '@noble/hashes@1.2.0': {} '@noble/hashes@1.3.1': {} @@ -7579,15 +6747,6 @@ snapshots: ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7) hardhat: 2.20.1(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.11.17)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.7) - '@nomiclabs/hardhat-waffle@2.0.1(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(hardhat@2.20.1(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.11.17)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.7)))(ethereum-waffle@4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(typescript@5.4.5))(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(hardhat@2.20.1(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.11.17)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.7))': - dependencies: - '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(hardhat@2.20.1(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.11.17)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.7)) - '@types/sinon-chai': 3.2.5 - '@types/web3': 1.0.19 - ethereum-waffle: 4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(typescript@5.4.5) - ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7) - hardhat: 2.20.1(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.11.17)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.7) - '@nomiclabs/hardhat-waffle@2.0.6(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(hardhat@2.20.1(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.11.17)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.7)))(@types/sinon-chai@3.2.5)(ethereum-waffle@4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(typescript@5.4.5))(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(hardhat@2.20.1(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.11.17)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.7))': dependencies: '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7))(hardhat@2.20.1(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.11.17)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.7)) @@ -7677,42 +6836,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@rollup/rollup-android-arm-eabi@4.5.1': - optional: true - - '@rollup/rollup-android-arm64@4.5.1': - optional: true - - '@rollup/rollup-darwin-arm64@4.5.1': - optional: true - - '@rollup/rollup-darwin-x64@4.5.1': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.5.1': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.5.1': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.5.1': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.5.1': - optional: true - - '@rollup/rollup-linux-x64-musl@4.5.1': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.5.1': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.5.1': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.5.1': - optional: true - '@scure/base@1.1.3': {} '@scure/bip32@1.1.5': @@ -7727,12 +6850,6 @@ snapshots: '@noble/hashes': 1.3.2 '@scure/base': 1.1.3 - '@scure/bip32@1.3.2': - dependencies: - '@noble/curves': 1.2.0 - '@noble/hashes': 1.3.2 - '@scure/base': 1.1.3 - '@scure/bip39@1.1.1': dependencies: '@noble/hashes': 1.2.0 @@ -7956,8 +7073,6 @@ snapshots: dependencies: '@types/ms': 0.7.31 - '@types/estree@1.0.5': {} - '@types/express-serve-static-core@4.17.35': dependencies: '@types/node': 20.11.17 @@ -8061,15 +7176,8 @@ snapshots: dependencies: '@sinonjs/fake-timers': 7.1.2 - '@types/underscore@1.11.3': {} - '@types/unist@2.0.6': {} - '@types/web3@1.0.19': - dependencies: - '@types/bn.js': 5.1.0 - '@types/underscore': 1.11.3 - '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.4.5))(eslint@8.56.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.6.2 @@ -8158,35 +7266,6 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitest/expect@1.2.2': - dependencies: - '@vitest/spy': 1.2.2 - '@vitest/utils': 1.2.2 - chai: 4.3.10 - - '@vitest/runner@1.2.2': - dependencies: - '@vitest/utils': 1.2.2 - p-limit: 5.0.0 - pathe: 1.1.1 - - '@vitest/snapshot@1.2.2': - dependencies: - magic-string: 0.30.5 - pathe: 1.1.1 - pretty-format: 29.7.0 - - '@vitest/spy@1.2.2': - dependencies: - tinyspy: 2.2.0 - - '@vitest/utils@1.2.2': - dependencies: - diff-sequences: 29.6.3 - estree-walker: 3.0.3 - loupe: 2.3.7 - pretty-format: 29.7.0 - '@vue/compiler-core@3.3.4': dependencies: '@babel/parser': 7.23.6 @@ -8238,11 +7317,6 @@ snapshots: dependencies: argparse: 2.0.1 - abitype@1.0.0(typescript@5.4.5)(zod@3.22.4): - optionalDependencies: - typescript: 5.4.5 - zod: 3.22.4 - abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -8274,8 +7348,6 @@ snapshots: acorn-walk@8.3.0: {} - acorn-walk@8.3.2: {} - acorn@8.10.0: {} adm-zip@0.4.16: {} @@ -8288,13 +7360,6 @@ snapshots: transitivePeerDependencies: - supports-color - agent-base@7.1.0: - dependencies: - debug: 4.3.4(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - optional: true - aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 @@ -8347,8 +7412,6 @@ snapshots: ansi-styles@6.2.1: {} - any-promise@1.3.0: {} - anymatch@3.1.3: dependencies: normalize-path: 3.0.0 @@ -8673,19 +7736,12 @@ snapshots: builtin-modules@3.3.0: {} - bundle-require@4.0.1(esbuild@0.19.7): - dependencies: - esbuild: 0.19.7 - load-tsconfig: 0.2.5 - busboy@1.6.0: dependencies: streamsearch: 1.1.0 bytes@3.1.2: {} - cac@6.7.14: {} - caching-transform@4.0.0: dependencies: hasha: 5.2.2 @@ -8880,8 +7936,6 @@ snapshots: commander@3.0.2: {} - commander@4.1.1: {} - commander@8.3.0: {} comment-parser@1.4.1: {} @@ -8896,10 +7950,6 @@ snapshots: content-type@1.0.5: {} - convert-source-map@1.8.0: - dependencies: - safe-buffer: 5.1.2 - convert-source-map@1.9.0: {} cookie-signature@1.0.6: {} @@ -8959,11 +8009,6 @@ snapshots: crypto-js@4.2.0: {} - cssstyle@4.0.1: - dependencies: - rrweb-cssom: 0.6.0 - optional: true - csv-generate@3.4.3: {} csv-parse@4.16.3: {} @@ -8981,12 +8026,6 @@ snapshots: dependencies: assert-plus: 1.0.0 - data-urls@5.0.0: - dependencies: - whatwg-mimetype: 4.0.0 - whatwg-url: 14.0.0 - optional: true - dataloader@1.4.0: {} dateformat@4.5.1: {} @@ -9014,9 +8053,6 @@ snapshots: decamelize@4.0.0: {} - decimal.js@10.4.3: - optional: true - deep-eql@4.1.3: dependencies: type-detect: 4.0.8 @@ -9207,9 +8243,6 @@ snapshots: entities@3.0.1: {} - entities@4.5.0: - optional: true - env-paths@2.2.1: {} envalid@8.0.0: @@ -9327,31 +8360,6 @@ snapshots: '@esbuild/win32-ia32': 0.19.10 '@esbuild/win32-x64': 0.19.10 - esbuild@0.19.7: - optionalDependencies: - '@esbuild/android-arm': 0.19.7 - '@esbuild/android-arm64': 0.19.7 - '@esbuild/android-x64': 0.19.7 - '@esbuild/darwin-arm64': 0.19.7 - '@esbuild/darwin-x64': 0.19.7 - '@esbuild/freebsd-arm64': 0.19.7 - '@esbuild/freebsd-x64': 0.19.7 - '@esbuild/linux-arm': 0.19.7 - '@esbuild/linux-arm64': 0.19.7 - '@esbuild/linux-ia32': 0.19.7 - '@esbuild/linux-loong64': 0.19.7 - '@esbuild/linux-mips64el': 0.19.7 - '@esbuild/linux-ppc64': 0.19.7 - '@esbuild/linux-riscv64': 0.19.7 - '@esbuild/linux-s390x': 0.19.7 - '@esbuild/linux-x64': 0.19.7 - '@esbuild/netbsd-x64': 0.19.7 - '@esbuild/openbsd-x64': 0.19.7 - '@esbuild/sunos-x64': 0.19.7 - '@esbuild/win32-arm64': 0.19.7 - '@esbuild/win32-ia32': 0.19.7 - '@esbuild/win32-x64': 0.19.7 - escalade@3.1.1: {} escape-html@1.0.3: {} @@ -9590,10 +8598,6 @@ snapshots: estree-walker@2.0.2: {} - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.5 - esutils@2.0.3: {} etag@1.8.1: {} @@ -9746,18 +8750,6 @@ snapshots: md5.js: 1.3.5 safe-buffer: 5.2.1 - execa@5.1.1: - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - execa@8.0.1: dependencies: cross-spawn: 7.0.3 @@ -10068,8 +9060,6 @@ snapshots: get-package-type@0.1.0: {} - get-stream@6.0.1: {} - get-stream@8.0.1: {} get-symbol-description@1.0.0: @@ -10101,15 +9091,6 @@ snapshots: minipass: 7.0.3 path-scurry: 1.10.1 - glob@7.1.6: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - glob@7.1.7: dependencies: fs.realpath: 1.0.0 @@ -10337,11 +9318,6 @@ snapshots: hosted-git-info@2.8.9: {} - html-encoding-sniffer@4.0.0: - dependencies: - whatwg-encoding: 3.1.1 - optional: true - html-escaper@2.0.2: {} htmlparser2@7.2.0: @@ -10359,14 +9335,6 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 - http-proxy-agent@7.0.0: - dependencies: - agent-base: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - optional: true - http-signature@1.2.0: dependencies: assert-plus: 1.0.0 @@ -10380,18 +9348,8 @@ snapshots: transitivePeerDependencies: - supports-color - https-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - optional: true - human-id@1.0.2: {} - human-signals@2.1.0: {} - human-signals@5.0.0: {} husky@9.0.10: {} @@ -10400,11 +9358,6 @@ snapshots: dependencies: safer-buffer: 2.1.2 - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - optional: true - idna-uts46-hx@2.3.1: dependencies: punycode: 2.1.0 @@ -10557,9 +9510,6 @@ snapshots: is-plain-obj@2.1.0: {} - is-potential-custom-element-name@1.0.1: - optional: true - is-regex@1.1.4: dependencies: call-bind: 1.0.2 @@ -10620,21 +9570,8 @@ snapshots: isexe@2.0.0: {} - isomorphic-fetch@3.0.0: - dependencies: - node-fetch: 2.6.12 - whatwg-fetch: 3.6.17 - transitivePeerDependencies: - - encoding - - isows@1.0.3(ws@8.13.0(bufferutil@4.0.8)(utf-8-validate@5.0.7)): - dependencies: - ws: 8.13.0(bufferutil@4.0.8)(utf-8-validate@5.0.7) - isstream@0.1.2: {} - istanbul-lib-coverage@3.0.0: {} - istanbul-lib-coverage@3.2.2: {} istanbul-lib-hook@3.0.0: @@ -10660,12 +9597,6 @@ snapshots: rimraf: 3.0.2 uuid: 3.4.0 - istanbul-lib-report@3.0.0: - dependencies: - istanbul-lib-coverage: 3.2.2 - make-dir: 3.1.0 - supports-color: 7.2.0 - istanbul-lib-report@3.0.1: dependencies: istanbul-lib-coverage: 3.2.2 @@ -10716,8 +9647,6 @@ snapshots: '@sideway/formula': 3.0.1 '@sideway/pinpoint': 2.0.0 - joycon@3.1.1: {} - js-sdsl@4.4.2: {} js-sha3@0.5.7: {} @@ -10739,35 +9668,6 @@ snapshots: jsdoc-type-pratt-parser@4.0.0: {} - jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.7): - dependencies: - cssstyle: 4.0.1 - data-urls: 5.0.0 - decimal.js: 10.4.3 - form-data: 4.0.0 - html-encoding-sniffer: 4.0.0 - http-proxy-agent: 7.0.0 - https-proxy-agent: 7.0.2 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.7 - parse5: 7.1.2 - rrweb-cssom: 0.6.0 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 4.1.3 - w3c-xmlserializer: 5.0.0 - webidl-conversions: 7.0.0 - whatwg-encoding: 3.1.1 - whatwg-mimetype: 4.0.0 - whatwg-url: 14.0.0 - ws: 8.16.0(bufferutil@4.0.8)(utf-8-validate@5.0.7) - xml-name-validator: 5.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - optional: true - jsesc@0.5.0: {} jsesc@2.5.2: {} @@ -10894,8 +9794,6 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lilconfig@2.1.0: {} - lilconfig@3.0.0: {} lines-and-columns@1.2.4: {} @@ -10934,8 +9832,6 @@ snapshots: pinkie-promise: 2.0.1 strip-bom: 2.0.0 - load-tsconfig@0.2.5: {} - load-yaml-file@0.2.0: dependencies: graceful-fs: 4.2.11 @@ -10943,11 +9839,6 @@ snapshots: pify: 4.0.1 strip-bom: 3.0.0 - local-pkg@0.5.0: - dependencies: - mlly: 1.4.2 - pkg-types: 1.0.3 - locate-path@2.0.0: dependencies: p-locate: 2.0.0 @@ -10969,8 +9860,6 @@ snapshots: lodash.merge@4.6.2: {} - lodash.sortby@4.7.0: {} - lodash.startcase@4.4.0: {} lodash@4.17.21: {} @@ -11303,13 +10192,6 @@ snapshots: mkdirp@1.0.4: {} - mlly@1.4.2: - dependencies: - acorn: 8.10.0 - pathe: 1.1.1 - pkg-types: 1.0.3 - ufo: 1.3.2 - mnemonist@0.38.3: dependencies: obliterator: 1.6.1 @@ -11368,12 +10250,6 @@ snapshots: fmix: 0.1.0 imul: 1.0.1 - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - nanoid@3.3.3: {} nanoid@3.3.7: {} @@ -11425,9 +10301,6 @@ snapshots: bn.js: 4.11.6 strip-hex-prefix: 1.0.0 - nwsapi@2.2.7: - optional: true - nx-cloud@18.0.0: dependencies: '@nrwl/nx-cloud': 18.0.0 @@ -11499,18 +10372,18 @@ snapshots: '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 caching-transform: 4.0.0 - convert-source-map: 1.8.0 + convert-source-map: 1.9.0 decamelize: 1.2.0 find-cache-dir: 3.3.2 find-up: 4.1.0 foreground-child: 2.0.0 get-package-type: 0.1.0 glob: 7.2.3 - istanbul-lib-coverage: 3.0.0 + istanbul-lib-coverage: 3.2.2 istanbul-lib-hook: 3.0.0 istanbul-lib-instrument: 4.0.3 istanbul-lib-processinfo: 2.0.2 - istanbul-lib-report: 3.0.0 + istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.0 istanbul-reports: 3.0.2 make-dir: 3.1.0 @@ -11661,10 +10534,6 @@ snapshots: dependencies: yocto-queue: 0.1.0 - p-limit@5.0.0: - dependencies: - yocto-queue: 1.0.0 - p-locate@2.0.0: dependencies: p-limit: 1.3.0 @@ -11724,11 +10593,6 @@ snapshots: parse-passwd@1.0.0: {} - parse5@7.1.2: - dependencies: - entities: 4.5.0 - optional: true - parseurl@1.3.3: {} path-browserify@1.0.1: {} @@ -11764,8 +10628,6 @@ snapshots: path-type@4.0.0: {} - pathe@1.1.1: {} - pathval@1.1.1: {} pbkdf2@3.1.2: @@ -11848,32 +10710,16 @@ snapshots: sonic-boom: 3.7.0 thread-stream: 2.4.0 - pirates@4.0.6: {} - pkg-dir@4.2.0: dependencies: find-up: 4.1.0 - pkg-types@1.0.3: - dependencies: - jsonc-parser: 3.2.0 - mlly: 1.4.2 - pathe: 1.1.1 - please-upgrade-node@3.2.0: dependencies: semver-compare: 1.0.0 pluralize@8.0.0: {} - postcss-load-config@4.0.1(postcss@8.4.35)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.11.17)(typescript@5.4.5)): - dependencies: - lilconfig: 2.1.0 - yaml: 2.3.4 - optionalDependencies: - postcss: 8.4.35 - ts-node: 10.9.2(@swc/core@1.4.13)(@types/node@20.11.17)(typescript@5.4.5) - postcss@8.4.35: dependencies: nanoid: 3.3.7 @@ -11961,9 +10807,6 @@ snapshots: qs@6.5.3: {} - querystringify@2.2.0: - optional: true - queue-microtask@1.2.3: {} quick-format-unescaped@4.0.4: {} @@ -12138,9 +10981,6 @@ snapshots: require-package-name@2.0.1: {} - requires-port@1.0.0: - optional: true - resolve-dir@1.0.1: dependencies: expand-tilde: 2.0.2 @@ -12213,25 +11053,6 @@ snapshots: dependencies: bn.js: 5.2.1 - rollup@4.5.1: - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.5.1 - '@rollup/rollup-android-arm64': 4.5.1 - '@rollup/rollup-darwin-arm64': 4.5.1 - '@rollup/rollup-darwin-x64': 4.5.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.5.1 - '@rollup/rollup-linux-arm64-gnu': 4.5.1 - '@rollup/rollup-linux-arm64-musl': 4.5.1 - '@rollup/rollup-linux-x64-gnu': 4.5.1 - '@rollup/rollup-linux-x64-musl': 4.5.1 - '@rollup/rollup-win32-arm64-msvc': 4.5.1 - '@rollup/rollup-win32-ia32-msvc': 4.5.1 - '@rollup/rollup-win32-x64-msvc': 4.5.1 - fsevents: 2.3.3 - - rrweb-cssom@0.6.0: - optional: true - run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -12269,11 +11090,6 @@ snapshots: safer-buffer@2.1.2: {} - saxes@6.0.0: - dependencies: - xmlchars: 2.2.0 - optional: true - scrypt-js@3.0.1: {} secp256k1@4.0.3: @@ -12363,8 +11179,6 @@ snapshots: get-intrinsic: 1.2.1 object-inspect: 1.12.3 - siginfo@2.0.0: {} - signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -12441,10 +11255,6 @@ snapshots: source-map@0.6.1: {} - source-map@0.8.0-beta.0: - dependencies: - whatwg-url: 7.1.0 - spawn-wrap@2.0.0: dependencies: foreground-child: 2.0.0 @@ -12498,16 +11308,12 @@ snapshots: safer-buffer: 2.1.2 tweetnacl: 0.14.5 - stackback@0.0.2: {} - stacktrace-parser@0.1.10: dependencies: type-fest: 0.7.1 statuses@2.0.1: {} - std-env@3.6.0: {} - stream-shift@1.0.1: {} stream-transform@2.1.3: @@ -12597,8 +11403,6 @@ snapshots: strip-bom@4.0.0: {} - strip-final-newline@2.0.0: {} - strip-final-newline@3.0.0: {} strip-hex-prefix@1.0.0: @@ -12611,26 +11415,12 @@ snapshots: strip-json-comments@3.1.1: {} - strip-literal@1.3.0: - dependencies: - acorn: 8.10.0 - strong-log-transformer@2.1.0: dependencies: duplexer: 0.1.2 minimist: 1.2.8 through: 2.3.8 - sucrase@3.34.0: - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - commander: 4.1.1 - glob: 7.1.6 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 - supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -12645,9 +11435,6 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - symbol-tree@3.2.4: - optional: true - table-layout@1.0.2: dependencies: array-back: 4.0.2 @@ -12678,14 +11465,6 @@ snapshots: term-size@2.2.1: {} - terser@5.26.0: - dependencies: - '@jridgewell/source-map': 0.3.5 - acorn: 8.10.0 - commander: 2.20.3 - source-map-support: 0.5.21 - optional: true - test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 @@ -12696,14 +11475,6 @@ snapshots: text-table@0.2.0: {} - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 - - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 - thread-stream@0.15.2: dependencies: real-require: 0.1.0 @@ -12719,12 +11490,6 @@ snapshots: through@2.3.8: {} - tinybench@2.5.1: {} - - tinypool@0.8.2: {} - - tinyspy@2.2.0: {} - tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -12746,29 +11511,10 @@ snapshots: psl: 1.9.0 punycode: 2.3.1 - tough-cookie@4.1.3: - dependencies: - psl: 1.9.0 - punycode: 2.3.1 - universalify: 0.2.0 - url-parse: 1.5.10 - optional: true - tr46@0.0.3: {} - tr46@1.0.1: - dependencies: - punycode: 2.3.1 - - tr46@5.0.0: - dependencies: - punycode: 2.3.1 - optional: true - traverse@0.6.6: {} - tree-kill@1.2.2: {} - treeify@1.1.0: {} trim-newlines@3.0.1: {} @@ -12790,8 +11536,6 @@ snapshots: dependencies: typescript: 5.4.5 - ts-interface-checker@0.1.13: {} - ts-mocha@10.0.0(mocha@10.2.0): dependencies: mocha: 10.2.0 @@ -12849,30 +11593,6 @@ snapshots: tsort@0.0.1: {} - tsup@8.0.1(@swc/core@1.4.13)(postcss@8.4.35)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.11.17)(typescript@5.4.5))(typescript@5.4.5): - dependencies: - bundle-require: 4.0.1(esbuild@0.19.7) - cac: 6.7.14 - chokidar: 3.5.3 - debug: 4.3.4(supports-color@8.1.1) - esbuild: 0.19.7 - execa: 5.1.1 - globby: 11.1.0 - joycon: 3.1.1 - postcss-load-config: 4.0.1(postcss@8.4.35)(ts-node@10.9.2(@swc/core@1.4.13)(@types/node@20.11.17)(typescript@5.4.5)) - resolve-from: 5.0.0 - rollup: 4.5.1 - source-map: 0.8.0-beta.0 - sucrase: 3.34.0 - tree-kill: 1.2.2 - optionalDependencies: - '@swc/core': 1.4.13 - postcss: 8.4.35 - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - - ts-node - tsx@4.7.0: dependencies: esbuild: 0.19.10 @@ -12988,8 +11708,6 @@ snapshots: typical@5.2.0: {} - ufo@1.3.2: {} - unbox-primitive@1.0.2: dependencies: call-bind: 1.0.2 @@ -13028,9 +11746,6 @@ snapshots: universalify@0.1.2: {} - universalify@0.2.0: - optional: true - universalify@2.0.0: {} unpipe@1.0.0: {} @@ -13047,12 +11762,6 @@ snapshots: dependencies: punycode: 2.3.1 - url-parse@1.5.10: - dependencies: - querystringify: 2.2.0 - requires-port: 1.0.0 - optional: true - url-value-parser@2.0.3: {} url@0.11.1: @@ -13102,104 +11811,10 @@ snapshots: unist-util-stringify-position: 2.0.3 vfile-message: 2.0.4 - viem@2.8.13(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.7)(zod@3.22.4): - dependencies: - '@adraffy/ens-normalize': 1.10.0 - '@noble/curves': 1.2.0 - '@noble/hashes': 1.3.2 - '@scure/bip32': 1.3.2 - '@scure/bip39': 1.2.1 - abitype: 1.0.0(typescript@5.4.5)(zod@3.22.4) - isows: 1.0.3(ws@8.13.0(bufferutil@4.0.8)(utf-8-validate@5.0.7)) - ws: 8.13.0(bufferutil@4.0.8)(utf-8-validate@5.0.7) - optionalDependencies: - typescript: 5.4.5 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - zod - - vite-node@1.2.2(@types/node@20.11.17)(terser@5.26.0): - dependencies: - cac: 6.7.14 - debug: 4.3.4(supports-color@8.1.1) - pathe: 1.1.1 - picocolors: 1.0.0 - vite: 5.1.7(@types/node@20.11.17)(terser@5.26.0) - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - stylus - - sugarss - - supports-color - - terser - - vite@5.1.5(@types/node@20.11.17)(terser@5.26.0): - dependencies: - esbuild: 0.19.10 - postcss: 8.4.35 - rollup: 4.5.1 - optionalDependencies: - '@types/node': 20.11.17 - fsevents: 2.3.3 - terser: 5.26.0 - - vite@5.1.7(@types/node@20.11.17)(terser@5.26.0): - dependencies: - esbuild: 0.19.10 - postcss: 8.4.35 - rollup: 4.5.1 - optionalDependencies: - '@types/node': 20.11.17 - fsevents: 2.3.3 - terser: 5.26.0 - - vitest@1.2.2(@types/node@20.11.17)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.7))(terser@5.26.0): - dependencies: - '@vitest/expect': 1.2.2 - '@vitest/runner': 1.2.2 - '@vitest/snapshot': 1.2.2 - '@vitest/spy': 1.2.2 - '@vitest/utils': 1.2.2 - acorn-walk: 8.3.2 - cac: 6.7.14 - chai: 4.3.10 - debug: 4.3.4(supports-color@8.1.1) - execa: 8.0.1 - local-pkg: 0.5.0 - magic-string: 0.30.5 - pathe: 1.1.1 - picocolors: 1.0.0 - std-env: 3.6.0 - strip-literal: 1.3.0 - tinybench: 2.5.1 - tinypool: 0.8.2 - vite: 5.1.5(@types/node@20.11.17)(terser@5.26.0) - vite-node: 1.2.2(@types/node@20.11.17)(terser@5.26.0) - why-is-node-running: 2.2.2 - optionalDependencies: - '@types/node': 20.11.17 - jsdom: 24.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.7) - transitivePeerDependencies: - - less - - lightningcss - - sass - - stylus - - sugarss - - supports-color - - terser - vscode-oniguruma@1.7.0: {} vscode-textmate@8.0.0: {} - w3c-xmlserializer@5.0.0: - dependencies: - xml-name-validator: 5.0.0 - optional: true - wait-on@7.2.0: dependencies: axios: 1.6.7 @@ -13227,38 +11842,11 @@ snapshots: webidl-conversions@3.0.1: {} - webidl-conversions@4.0.2: {} - - webidl-conversions@7.0.0: - optional: true - - whatwg-encoding@3.1.1: - dependencies: - iconv-lite: 0.6.3 - optional: true - - whatwg-fetch@3.6.17: {} - - whatwg-mimetype@4.0.0: - optional: true - - whatwg-url@14.0.0: - dependencies: - tr46: 5.0.0 - webidl-conversions: 7.0.0 - optional: true - whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - whatwg-url@7.1.0: - dependencies: - lodash.sortby: 4.7.0 - tr46: 1.0.1 - webidl-conversions: 4.0.2 - which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 @@ -13314,11 +11902,6 @@ snapshots: dependencies: isexe: 2.0.0 - why-is-node-running@2.2.2: - dependencies: - siginfo: 2.0.0 - stackback: 0.0.2 - widest-line@3.1.0: dependencies: string-width: 4.2.3 @@ -13380,23 +11963,6 @@ snapshots: bufferutil: 4.0.8 utf-8-validate: 5.0.7 - ws@8.13.0(bufferutil@4.0.8)(utf-8-validate@5.0.7): - optionalDependencies: - bufferutil: 4.0.8 - utf-8-validate: 5.0.7 - - ws@8.16.0(bufferutil@4.0.8)(utf-8-validate@5.0.7): - optionalDependencies: - bufferutil: 4.0.8 - utf-8-validate: 5.0.7 - optional: true - - xml-name-validator@5.0.0: - optional: true - - xmlchars@2.2.0: - optional: true - xtend@4.0.2: {} y18n@3.2.2: {} @@ -13495,12 +12061,8 @@ snapshots: yocto-queue@0.1.0: {} - yocto-queue@1.0.0: {} - zksync-ethers@5.6.0(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7)): dependencies: ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.7) - zod@3.22.4: {} - zwitch@1.0.5: {} From 2a072340ab21a5dd7e9483da0000aa96ea7f7bb9 Mon Sep 17 00:00:00 2001 From: Marcel <153717436+MonkeyMarcel@users.noreply.github.com> Date: Wed, 12 Jun 2024 00:58:46 +0800 Subject: [PATCH 021/141] remove unused json import (#10792) --- ops/scripts/update-op-geth.py | 1 - .../contracts-bedrock/test/kontrol/scripts/json/clean_json.py | 1 - 2 files changed, 2 deletions(-) diff --git a/ops/scripts/update-op-geth.py b/ops/scripts/update-op-geth.py index 77478d46c34f..20aaec2349b6 100755 --- a/ops/scripts/update-op-geth.py +++ b/ops/scripts/update-op-geth.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -import json import subprocess import os diff --git a/packages/contracts-bedrock/test/kontrol/scripts/json/clean_json.py b/packages/contracts-bedrock/test/kontrol/scripts/json/clean_json.py index 70f97fad40cd..570ecef5d7ae 100644 --- a/packages/contracts-bedrock/test/kontrol/scripts/json/clean_json.py +++ b/packages/contracts-bedrock/test/kontrol/scripts/json/clean_json.py @@ -13,7 +13,6 @@ """ import sys -import json def clean_json(input_file): with open(input_file, 'r') as file: From bdf0f17d779f57793b3da4933b07adf24c873a5c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Jun 2024 12:03:53 -0600 Subject: [PATCH 022/141] dependabot(gomod): bump github.com/hashicorp/raft from 1.6.1 to 1.7.0 (#10773) Bumps [github.com/hashicorp/raft](https://github.com/hashicorp/raft) from 1.6.1 to 1.7.0. - [Release notes](https://github.com/hashicorp/raft/releases) - [Changelog](https://github.com/hashicorp/raft/blob/main/CHANGELOG.md) - [Commits](https://github.com/hashicorp/raft/compare/v1.6.1...v1.7.0) --- updated-dependencies: - dependency-name: github.com/hashicorp/raft dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 16a06c909f72..0292d41a072a 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,7 @@ require ( github.com/google/gofuzz v1.2.1-0.20220503160820-4a35382e8fc8 github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/golang-lru/v2 v2.0.7 - github.com/hashicorp/raft v1.6.1 + github.com/hashicorp/raft v1.7.0 github.com/hashicorp/raft-boltdb v0.0.0-20231211162105-6c830fa4535e github.com/holiman/uint256 v1.2.4 github.com/ipfs/go-datastore v0.6.0 diff --git a/go.sum b/go.sum index 7315cfcd8c31..8b93feda677f 100644 --- a/go.sum +++ b/go.sum @@ -329,8 +329,8 @@ github.com/hashicorp/golang-lru/arc/v2 v2.0.7/go.mod h1:Pe7gBlGdc8clY5LJ0LpJXMt5 github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hashicorp/raft v1.1.0/go.mod h1:4Ak7FSPnuvmb0GV6vgIAJ4vYT4bek9bb6Q+7HVbyzqM= -github.com/hashicorp/raft v1.6.1 h1:v/jm5fcYHvVkL0akByAp+IDdDSzCNCGhdO6VdB56HIM= -github.com/hashicorp/raft v1.6.1/go.mod h1:N1sKh6Vn47mrWvEArQgILTyng8GoDRNYlgKyK7PMjs0= +github.com/hashicorp/raft v1.7.0 h1:4u24Qn6lQ6uwziM++UgsyiT64Q8GyRn43CV41qPiz1o= +github.com/hashicorp/raft v1.7.0/go.mod h1:N1sKh6Vn47mrWvEArQgILTyng8GoDRNYlgKyK7PMjs0= github.com/hashicorp/raft-boltdb v0.0.0-20231211162105-6c830fa4535e h1:SK4y8oR4ZMHPvwVHryKI88kJPJda4UyWYvG5A6iEQxc= github.com/hashicorp/raft-boltdb v0.0.0-20231211162105-6c830fa4535e/go.mod h1:EMz/UIuG93P0MBeHh6CbXQAEe8ckVJLZjhD17lBzK5Q= github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4 h1:X4egAf/gcS1zATw6wn4Ej8vjuVGxeHdan+bRb2ebyv4= From 1b480b4de80d3888b15de08dee877a213ad7d49d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Jun 2024 12:06:48 -0600 Subject: [PATCH 023/141] dependabot(gomod): bump github.com/DataDog/zstd from 1.5.2 to 1.5.5 (#10556) Bumps [github.com/DataDog/zstd](https://github.com/DataDog/zstd) from 1.5.2 to 1.5.5. - [Release notes](https://github.com/DataDog/zstd/releases) - [Commits](https://github.com/DataDog/zstd/compare/v1.5.2...v1.5.5) --- updated-dependencies: - dependency-name: github.com/DataDog/zstd dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 0292d41a072a..b9a89cc08655 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/ethereum-optimism/optimism go 1.21 require ( - github.com/DataDog/zstd v1.5.2 + github.com/DataDog/zstd v1.5.5 github.com/andybalholm/brotli v1.1.0 github.com/btcsuite/btcd v0.24.0 github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 diff --git a/go.sum b/go.sum index 8b93feda677f..0c66f61d48ae 100644 --- a/go.sum +++ b/go.sum @@ -14,8 +14,8 @@ github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8 github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= -github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= +github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= From d2bba5b3f197e87de0ef951ca058372b2253f92c Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Tue, 11 Jun 2024 21:15:35 +0300 Subject: [PATCH 024/141] monorepo: remove husky (#10795) Delete `husky` and `lint-checked` from the monorepo as no active JS development happens here. There is no need to run the pre commit lint hook on every single commit, this only slows down the latency of all commits. --- .github/mergify.yml | 2 +- .husky/.gitignore | 1 - .husky/pre-commit | 5 - package.json | 5 +- packages/chain-mon/package.json | 1 - packages/devnet-tasks/package.json | 1 - pnpm-lock.yaml | 280 ----------------------------- 7 files changed, 2 insertions(+), 293 deletions(-) delete mode 100644 .husky/.gitignore delete mode 100755 .husky/pre-commit diff --git a/.github/mergify.yml b/.github/mergify.yml index 14196ea82bf8..7156137c4007 100644 --- a/.github/mergify.yml +++ b/.github/mergify.yml @@ -253,7 +253,7 @@ pull_request_rules: - M-deletion - name: Add M-ci label when ci files are modified conditions: - - 'files~=^\.(github|circleci|husky)\/' + - 'files~=^\.(github|circleci)\/' - '#label<5' actions: label: diff --git a/.husky/.gitignore b/.husky/.gitignore deleted file mode 100644 index 31354ec13899..000000000000 --- a/.husky/.gitignore +++ /dev/null @@ -1 +0,0 @@ -_ diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100755 index 91d78423de59..000000000000 --- a/.husky/pre-commit +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -pnpm nx affected --target=pre-commit - diff --git a/package.json b/package.json index 472ac9d4df33..0b1dc47ebf8b 100644 --- a/package.json +++ b/package.json @@ -21,10 +21,9 @@ "lint:ts:check": "npx nx run-many --target=lint:ts:check", "lint:check": "npx nx run-many --target=lint:check", "lint:fix": "npx nx run-many --target=lint:fix", - "lint:shellcheck": "find . -type f -name '*.sh' -not -path '*/node_modules/*' -not -path './packages/contracts-bedrock/lib/*' -not -path './packages/contracts-bedrock/kout*/*' -not -path './.husky/_/husky.sh' -exec sh -c 'echo \"Checking $1\"; shellcheck \"$1\"' _ {} \\;", + "lint:shellcheck": "find . -type f -name '*.sh' -not -path '*/node_modules/*' -not -path './packages/contracts-bedrock/lib/*' -not -path './packages/contracts-bedrock/kout*/*' -exec sh -c 'echo \"Checking $1\"; shellcheck \"$1\"' _ {} \\;", "preinstall": "npx only-allow pnpm", "ready": "pnpm lint && pnpm test", - "prepare": "husky install", "release": "npx nx run-many --target=build --skip-nx-cache && pnpm changeset publish", "release:check": "changeset status --verbose --since=origin/main", "release:publish": "pnpm install --frozen-lockfile && npx nx run-many --target=build && pnpm build && changeset publish", @@ -66,8 +65,6 @@ "eslint-plugin-promise": "^5.1.0", "eslint-plugin-react": "^7.24.0", "eslint-plugin-unicorn": "^50.0.1", - "husky": "^9.0.10", - "lint-staged": "15.2.0", "mocha": "^10.2.0", "nx": "18.2.2", "nx-cloud": "latest", diff --git a/packages/chain-mon/package.json b/packages/chain-mon/package.json index 954e1024ef66..456639c9ccda 100644 --- a/packages/chain-mon/package.json +++ b/packages/chain-mon/package.json @@ -32,7 +32,6 @@ "build": "tsc -p ./tsconfig.json", "clean": "rimraf dist/ ./tsconfig.tsbuildinfo", "lint": "pnpm lint:fix && pnpm lint:check", - "pre-commit": "lint-staged", "lint:fix": "pnpm lint:check --fix", "lint:check": "eslint . --max-warnings=0" }, diff --git a/packages/devnet-tasks/package.json b/packages/devnet-tasks/package.json index 17a0461c06d8..a170cb6d51d1 100644 --- a/packages/devnet-tasks/package.json +++ b/packages/devnet-tasks/package.json @@ -16,7 +16,6 @@ "lint": "pnpm lint:fix && pnpm lint:check", "lint:check": "eslint . --max-warnings=0", "lint:fix": "pnpm lint:check --fix", - "pre-commit": "lint-staged", "test": "hardhat test", "test:coverage": "nyc hardhat test && nyc merge .nyc_output coverage.json", "autogen:docs": "typedoc --out docs src/index.ts" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e7c6519ede2c..0d9048bd5818 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -80,12 +80,6 @@ importers: eslint-plugin-unicorn: specifier: ^50.0.1 version: 50.0.1(eslint@8.56.0) - husky: - specifier: ^9.0.10 - version: 9.0.10 - lint-staged: - specifier: 15.2.0 - version: 15.2.0 mocha: specifier: ^10.2.0 version: 10.2.0 @@ -1553,10 +1547,6 @@ packages: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} - ansi-escapes@6.2.0: - resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} - engines: {node: '>=14.16'} - ansi-regex@2.1.1: resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} engines: {node: '>=0.10.0'} @@ -1926,10 +1916,6 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - character-entities-legacy@1.1.4: resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} @@ -1986,10 +1972,6 @@ packages: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} - cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - cli-spinners@2.6.1: resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==} engines: {node: '>=6'} @@ -1998,10 +1980,6 @@ packages: resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==} engines: {node: '>=6'} - cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} - cliui@3.2.0: resolution: {integrity: sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==} @@ -2036,9 +2014,6 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -2349,9 +2324,6 @@ packages: emoji-regex@10.1.0: resolution: {integrity: sha512-xAEnNCT3w2Tg6MA7ly6QqYJvEoY1tm9iIjJ3yMKK9JPlWuRHAMoe5iETwQnx3M9TVbFMfsrBgWKR+IsmswwNjg==} - emoji-regex@10.3.0: - resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} - emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2655,9 +2627,6 @@ packages: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} - eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -2665,10 +2634,6 @@ packages: evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} - execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - expand-tilde@2.0.2: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} engines: {node: '>=0.10.0'} @@ -2915,10 +2880,6 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.2.0: - resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} - engines: {node: '>=18'} - get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} @@ -2929,10 +2890,6 @@ packages: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} - get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} @@ -3110,15 +3067,6 @@ packages: human-id@1.0.2: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} - human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - - husky@9.0.10: - resolution: {integrity: sha512-TQGNknoiy6bURzIO77pPRu+XHi6zI7T93rX+QnJsoYFf3xdjKOur+IlfqzJGMHIK/wXrLg+GsvMs8Op7vI2jVA==} - engines: {node: '>=18'} - hasBin: true - iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -3255,14 +3203,6 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - - is-fullwidth-code-point@5.0.0: - resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} - engines: {node: '>=18'} - is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} @@ -3323,10 +3263,6 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} @@ -3579,10 +3515,6 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lilconfig@3.0.0: - resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} - engines: {node: '>=14'} - lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -3590,15 +3522,6 @@ packages: resolution: {integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - lint-staged@15.2.0: - resolution: {integrity: sha512-TFZzUEV00f+2YLaVPWBWGAMq7So6yQx+GG8YRMDeOEIf95Zn5RyiLMsEiX4KTNl9vq/w+NqRJkLA1kPIo15ufQ==} - engines: {node: '>=18.12.0'} - hasBin: true - - listr2@8.0.0: - resolution: {integrity: sha512-u8cusxAcyqAiQ2RhYvV7kRKNLgUvtObIbhOX2NCXqvp1UU32xIg5CT22ykS2TPKJXZWJwtK3IKLiqAGlGNE+Zg==} - engines: {node: '>=18.0.0'} - load-json-file@1.1.0: resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==} engines: {node: '>=0.10.0'} @@ -3641,10 +3564,6 @@ packages: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} - log-update@6.0.0: - resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} - engines: {node: '>=18'} - longest-streak@2.0.4: resolution: {integrity: sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==} @@ -3771,9 +3690,6 @@ packages: merge-descriptors@1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -3844,10 +3760,6 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -3991,10 +3903,6 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} - npm-run-path@5.1.0: - resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - number-is-nan@1.0.1: resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} engines: {node: '>=0.10.0'} @@ -4096,10 +4004,6 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} - onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -4221,10 +4125,6 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -4260,11 +4160,6 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true - pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} @@ -4590,17 +4485,10 @@ packages: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} - restore-cursor@4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rfdc@1.3.0: - resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} - rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -4748,14 +4636,6 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} - - slice-ansi@7.1.0: - resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} - engines: {node: '>=18'} - smartwrap@2.0.2: resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} engines: {node: '>=6'} @@ -4847,10 +4727,6 @@ packages: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} - string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - string-format@2.0.0: resolution: {integrity: sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==} @@ -4866,10 +4742,6 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} - string-width@7.0.0: - resolution: {integrity: sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==} - engines: {node: '>=18'} - string.prototype.matchall@4.0.8: resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} @@ -4910,10 +4782,6 @@ packages: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} - strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - strip-hex-prefix@1.0.0: resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} engines: {node: '>=6.5.0', npm: '>=3'} @@ -5141,10 +5009,6 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} - type-fest@3.13.1: - resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} - engines: {node: '>=14.16'} - type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -5386,10 +5250,6 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} - wrap-ansi@9.0.0: - resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} - engines: {node: '>=18'} - wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -5447,10 +5307,6 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - yaml@2.3.4: - resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} - engines: {node: '>= 14'} - yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} @@ -7388,10 +7244,6 @@ snapshots: dependencies: type-fest: 0.21.3 - ansi-escapes@6.2.0: - dependencies: - type-fest: 3.13.1 - ansi-regex@2.1.1: {} ansi-regex@5.0.1: {} @@ -7802,8 +7654,6 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.3.0: {} - character-entities-legacy@1.1.4: {} character-entities@1.2.4: {} @@ -7855,19 +7705,10 @@ snapshots: dependencies: restore-cursor: 3.1.0 - cli-cursor@4.0.0: - dependencies: - restore-cursor: 4.0.0 - cli-spinners@2.6.1: {} cli-spinners@2.9.0: {} - cli-truncate@4.0.0: - dependencies: - slice-ansi: 5.0.0 - string-width: 7.0.0 - cliui@3.2.0: dependencies: string-width: 1.0.2 @@ -7908,8 +7749,6 @@ snapshots: color-name@1.1.4: {} - colorette@2.0.20: {} - combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 @@ -8214,8 +8053,6 @@ snapshots: emoji-regex@10.1.0: {} - emoji-regex@10.3.0: {} - emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -8741,8 +8578,6 @@ snapshots: event-target-shim@5.0.1: {} - eventemitter3@5.0.1: {} - events@3.3.0: {} evp_bytestokey@1.0.3: @@ -8750,18 +8585,6 @@ snapshots: md5.js: 1.3.5 safe-buffer: 5.2.1 - execa@8.0.1: - dependencies: - cross-spawn: 7.0.3 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.1.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - expand-tilde@2.0.2: dependencies: homedir-polyfill: 1.0.3 @@ -9047,8 +8870,6 @@ snapshots: get-caller-file@2.0.5: {} - get-east-asian-width@1.2.0: {} - get-func-name@2.0.2: {} get-intrinsic@1.2.1: @@ -9060,8 +8881,6 @@ snapshots: get-package-type@0.1.0: {} - get-stream@8.0.1: {} - get-symbol-description@1.0.0: dependencies: call-bind: 1.0.2 @@ -9350,10 +9169,6 @@ snapshots: human-id@1.0.2: {} - human-signals@5.0.0: {} - - husky@9.0.10: {} - iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -9474,12 +9289,6 @@ snapshots: is-fullwidth-code-point@3.0.0: {} - is-fullwidth-code-point@4.0.0: {} - - is-fullwidth-code-point@5.0.0: - dependencies: - get-east-asian-width: 1.2.0 - is-generator-function@1.0.10: dependencies: has-tostringtag: 1.0.0 @@ -9523,8 +9332,6 @@ snapshots: is-stream@2.0.1: {} - is-stream@3.0.0: {} - is-string@1.0.7: dependencies: has-tostringtag: 1.0.0 @@ -9794,36 +9601,10 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lilconfig@3.0.0: {} - lines-and-columns@1.2.4: {} lines-and-columns@2.0.3: {} - lint-staged@15.2.0: - dependencies: - chalk: 5.3.0 - commander: 11.1.0 - debug: 4.3.4(supports-color@8.1.1) - execa: 8.0.1 - lilconfig: 3.0.0 - listr2: 8.0.0 - micromatch: 4.0.5 - pidtree: 0.6.0 - string-argv: 0.3.2 - yaml: 2.3.4 - transitivePeerDependencies: - - supports-color - - listr2@8.0.0: - dependencies: - cli-truncate: 4.0.0 - colorette: 2.0.20 - eventemitter3: 5.0.1 - log-update: 6.0.0 - rfdc: 1.3.0 - wrap-ansi: 9.0.0 - load-json-file@1.1.0: dependencies: graceful-fs: 4.2.11 @@ -9869,14 +9650,6 @@ snapshots: chalk: 4.1.2 is-unicode-supported: 0.1.0 - log-update@6.0.0: - dependencies: - ansi-escapes: 6.2.0 - cli-cursor: 4.0.0 - slice-ansi: 7.1.0 - strip-ansi: 7.1.0 - wrap-ansi: 9.0.0 - longest-streak@2.0.4: {} loose-envify@1.4.0: @@ -10042,8 +9815,6 @@ snapshots: merge-descriptors@1.0.1: {} - merge-stream@2.0.0: {} - merge2@1.4.1: {} merkle-patricia-tree@4.2.4: @@ -10141,8 +9912,6 @@ snapshots: mimic-fn@2.1.0: {} - mimic-fn@4.0.0: {} - min-indent@1.0.1: {} minimalistic-assert@1.0.1: {} @@ -10290,10 +10059,6 @@ snapshots: dependencies: path-key: 3.1.1 - npm-run-path@5.1.0: - dependencies: - path-key: 4.0.0 - number-is-nan@1.0.1: {} number-to-bn@1.7.0: @@ -10480,10 +10245,6 @@ snapshots: dependencies: mimic-fn: 2.1.0 - onetime@6.0.0: - dependencies: - mimic-fn: 4.0.0 - open@8.4.2: dependencies: define-lazy-prop: 2.0.0 @@ -10609,8 +10370,6 @@ snapshots: path-key@3.1.1: {} - path-key@4.0.0: {} - path-parse@1.0.7: {} path-scurry@1.10.1: @@ -10644,8 +10403,6 @@ snapshots: picomatch@2.3.1: {} - pidtree@0.6.0: {} - pify@2.3.0: {} pify@4.0.1: {} @@ -11019,15 +10776,8 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 - restore-cursor@4.0.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - reusify@1.0.4: {} - rfdc@1.3.0: {} - rimraf@2.7.1: dependencies: glob: 7.2.3 @@ -11185,16 +10935,6 @@ snapshots: slash@3.0.0: {} - slice-ansi@5.0.0: - dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 4.0.0 - - slice-ansi@7.1.0: - dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 5.0.0 - smartwrap@2.0.2: dependencies: array.prototype.flat: 1.3.2 @@ -11322,8 +11062,6 @@ snapshots: streamsearch@1.1.0: {} - string-argv@0.3.2: {} - string-format@2.0.0: {} string-width@1.0.2: @@ -11344,12 +11082,6 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - string-width@7.0.0: - dependencies: - emoji-regex: 10.3.0 - get-east-asian-width: 1.2.0 - strip-ansi: 7.1.0 - string.prototype.matchall@4.0.8: dependencies: call-bind: 1.0.2 @@ -11403,8 +11135,6 @@ snapshots: strip-bom@4.0.0: {} - strip-final-newline@3.0.0: {} - strip-hex-prefix@1.0.0: dependencies: is-hex-prefixed: 1.0.0 @@ -11638,8 +11368,6 @@ snapshots: type-fest@0.8.1: {} - type-fest@3.13.1: {} - type-is@1.6.18: dependencies: media-typer: 0.3.0 @@ -11938,12 +11666,6 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 - wrap-ansi@9.0.0: - dependencies: - ansi-styles: 6.2.1 - string-width: 7.0.0 - strip-ansi: 7.1.0 - wrappy@1.0.2: {} write-file-atomic@3.0.3: @@ -11979,8 +11701,6 @@ snapshots: yaml@1.10.2: {} - yaml@2.3.4: {} - yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 From 492b67736e41d7036b081f058bb77f0c279a7a7d Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Tue, 11 Jun 2024 21:55:31 +0300 Subject: [PATCH 025/141] ci: remove sdk tests (#10798) Removes the `sdk-next` tests from CI. The sdk no longer lives in the protocol monorepo, it lives in the ecosystem monorepo now, see https://github.com/ethereum-optimism/ecosystem. --- .circleci/config.yml | 75 -------------------------------------------- 1 file changed, 75 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index fa69f393b67a..bafc24310b01 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -736,61 +736,6 @@ jobs: name: Upload coverage command: codecov --verbose --clean --flags <> - sdk-next-tests: - docker: - - image: <> - resource_class: medium - steps: - - checkout - - attach_workspace: { at: "." } - - restore_cache: - name: Restore pnpm Package Cache - keys: - - pnpm-packages-v2-{{ checksum "pnpm.lock.yaml" }} - - check-changed: - patterns: sdk - # populate node modules from the cache - - run: - name: Install dependencies - command: pnpm install:ci - - run: - name: sepolia-fork - background: true - # atm this is goerli but we should use mainnet after bedrock is live - command: anvil --fork-url $ANVIL_SEPOLIA_FORK_URL --fork-block-number 5580113 --port 8545 - - - run: - name: op-sepolia-fork - background: true - # atm this is goerli but we should use mainnet after bedrock is live - command: anvil --fork-url $ANVIL_OP_SEPOLIA_FORK_URL --port 9545 --fork-block-number 9925328 - - - run: - name: build - command: pnpm build - working_directory: packages/sdk - - run: - name: lint - command: pnpm lint:check - working_directory: packages/sdk - - run: - name: make sure anvil l1 is up - command: npx wait-on tcp:8545 && cast block-number --rpc-url http://localhost:8545 - - run: - name: make sure anvil l2 is up - command: npx wait-on tcp:9545 && cast block-number --rpc-url http://localhost:9545 - - run: - name: test:next - command: pnpm test:next:run - no_output_timeout: 5m - working_directory: packages/sdk - environment: - # anvil[0] test private key - VITE_E2E_PRIVATE_KEY: "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" - VITE_E2E_RPC_URL_L1: http://localhost:8545 - VITE_E2E_RPC_URL_L2: http://localhost:9545 - - notify-failures-on-develop - todo-issues: machine: image: <> @@ -2137,26 +2082,6 @@ workflows: context: - slack - develop-sdk-next-tests: - when: - and: - - or: - - equal: [ "develop", <> ] - - equal: [ true, <> ] - - not: - equal: [ scheduled_pipeline, << pipeline.trigger_source >> ] - jobs: - - pnpm-monorepo: - name: pnpm-monorepo - context: - - slack - - sdk-next-tests: - name: sdk-next-tests - requires: - - pnpm-monorepo - context: - - slack - scheduled-docker-publish: when: equal: [ build_hourly, <> ] From 52d6e4b38c943ffe2e115066da8ca4cf13f8d756 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Tue, 11 Jun 2024 22:23:21 +0300 Subject: [PATCH 026/141] op-chain-ops: cleanup genesis check (#10799) * op-chain-ops: cleanup genesis check Ensures that the check for contracts are correct based on the config flags instead of always skipping the fault proof contracts in the check. * config: fix --- op-chain-ops/genesis/config.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/op-chain-ops/genesis/config.go b/op-chain-ops/genesis/config.go index 14fa59f5a9a3..a2661b057ecb 100644 --- a/op-chain-ops/genesis/config.go +++ b/op-chain-ops/genesis/config.go @@ -690,9 +690,9 @@ func NewDeployConfigWithNetwork(network, path string) (*DeployConfig, error) { } // L1Deployments represents a set of L1 contracts that are deployed. +// This should be consolidated with https://github.com/ethereum-optimism/superchain-registry/blob/f9702a89214244c8dde39e45f5c2955f26d857d0/superchain/superchain.go#L227 type L1Deployments struct { AddressManager common.Address `json:"AddressManager"` - BlockOracle common.Address `json:"BlockOracle"` DisputeGameFactory common.Address `json:"DisputeGameFactory"` DisputeGameFactoryProxy common.Address `json:"DisputeGameFactoryProxy"` L1CrossDomainMessenger common.Address `json:"L1CrossDomainMessenger"` @@ -738,10 +738,9 @@ func (d *L1Deployments) Check(deployConfig *DeployConfig) error { } for i := 0; i < val.NumField(); i++ { name := val.Type().Field(i).Name - // Skip the non production ready contracts - if name == "DisputeGameFactory" || - name == "DisputeGameFactoryProxy" || - name == "BlockOracle" { + if !deployConfig.UseFaultProofs && + (name == "DisputeGameFactory" || + name == "DisputeGameFactoryProxy") { continue } if !deployConfig.UsePlasma && From c9fd3b49ac316e31ae19ff34294e9fdbeb75a780 Mon Sep 17 00:00:00 2001 From: protolambda Date: Tue, 11 Jun 2024 22:13:12 +0200 Subject: [PATCH 027/141] op-node: move engine controller into its own package (#10782) --- op-e2e/actions/l2_verifier.go | 15 +-- op-node/node/node.go | 11 +- op-node/rollup/attributes/attributes.go | 9 +- op-node/rollup/attributes/attributes_test.go | 15 +-- op-node/rollup/clsync/clsync.go | 3 +- op-node/rollup/derive/iface.go | 114 ------------------ op-node/rollup/derive/pipeline.go | 10 ++ op-node/rollup/derive/pipeline_test.go | 2 - op-node/rollup/driver/driver.go | 17 ++- op-node/rollup/driver/metered_engine.go | 9 +- op-node/rollup/driver/sequencer.go | 5 +- op-node/rollup/driver/sequencer_test.go | 19 +-- op-node/rollup/driver/state.go | 7 +- .../{derive => engine}/engine_controller.go | 53 ++++---- .../rollup/{derive => engine}/engine_reset.go | 24 +++- .../{derive => engine}/engine_update.go | 2 +- op-node/rollup/engine/iface.go | 66 ++++++++++ op-node/rollup/iface.go | 22 ++++ op-program/client/driver/driver.go | 13 +- op-program/client/l2/engine_test.go | 13 +- 20 files changed, 220 insertions(+), 209 deletions(-) delete mode 100644 op-node/rollup/derive/iface.go rename op-node/rollup/{derive => engine}/engine_controller.go (89%) rename op-node/rollup/{derive => engine}/engine_reset.go (72%) rename op-node/rollup/{derive => engine}/engine_update.go (99%) create mode 100644 op-node/rollup/engine/iface.go create mode 100644 op-node/rollup/iface.go diff --git a/op-e2e/actions/l2_verifier.go b/op-e2e/actions/l2_verifier.go index 4baa7a16ff7d..a0f513cfba38 100644 --- a/op-e2e/actions/l2_verifier.go +++ b/op-e2e/actions/l2_verifier.go @@ -17,6 +17,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup/clsync" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/driver" + "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-node/rollup/finality" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" "github.com/ethereum-optimism/optimism/op-service/client" @@ -31,19 +32,19 @@ type L2Verifier struct { log log.Logger eng interface { - derive.Engine + engine.Engine L2BlockRefByNumber(ctx context.Context, num uint64) (eth.L2BlockRef, error) } syncDeriver *driver.SyncDeriver // L2 rollup - engine *derive.EngineController + engine *engine.EngineController derivation *derive.DerivationPipeline clSync *clsync.CLSync attributesHandler driver.AttributesHandler - safeHeadListener derive.SafeHeadListener + safeHeadListener rollup.SafeHeadListener finalizer driver.Finalizer syncCfg *sync.Config @@ -61,7 +62,7 @@ type L2Verifier struct { } type L2API interface { - derive.Engine + engine.Engine L2BlockRefByNumber(ctx context.Context, num uint64) (eth.L2BlockRef, error) InfoByHash(ctx context.Context, hash common.Hash) (eth.BlockInfo, error) // GetProof returns a proof of the account, it may return a nil result without error if the address was not found. @@ -70,13 +71,13 @@ type L2API interface { } type safeDB interface { - derive.SafeHeadListener + rollup.SafeHeadListener node.SafeDBReader } func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc derive.L1BlobsFetcher, plasmaSrc driver.PlasmaIface, eng L2API, cfg *rollup.Config, syncCfg *sync.Config, safeHeadListener safeDB) *L2Verifier { metrics := &testutils.TestDerivationMetrics{} - engine := derive.NewEngineController(eng, log, metrics, cfg, syncCfg.SyncMode) + engine := engine.NewEngineController(eng, log, metrics, cfg, syncCfg.SyncMode) clSync := clsync.NewCLSync(log, cfg, metrics, engine) @@ -273,7 +274,7 @@ func (s *L2Verifier) ActL2PipelineStep(t Testing) { } else if err != nil && errors.Is(err, derive.ErrReset) { s.log.Warn("Derivation pipeline is reset", "err", err) s.derivation.Reset() - if err := derive.ResetEngine(t.Ctx(), s.log, s.rollupCfg, s.engine, s.l1, s.eng, s.syncCfg, s.safeHeadListener); err != nil { + if err := engine.ResetEngine(t.Ctx(), s.log, s.rollupCfg, s.engine, s.l1, s.eng, s.syncCfg, s.safeHeadListener); err != nil { s.log.Error("Derivation pipeline not ready, failed to reset engine", "err", err) // Derivation-pipeline will return a new ResetError until we confirm the engine has been successfully reset. return diff --git a/op-node/node/node.go b/op-node/node/node.go index 0fb1edcf5700..f2a62cf58da0 100644 --- a/op-node/node/node.go +++ b/op-node/node/node.go @@ -8,11 +8,6 @@ import ( "sync/atomic" "time" - "github.com/ethereum-optimism/optimism/op-node/node/safedb" - "github.com/ethereum-optimism/optimism/op-node/rollup/derive" - plasma "github.com/ethereum-optimism/optimism/op-plasma" - "github.com/ethereum-optimism/optimism/op-service/httputil" - "github.com/hashicorp/go-multierror" "github.com/libp2p/go-libp2p/core/peer" @@ -22,13 +17,17 @@ import ( "github.com/ethereum-optimism/optimism/op-node/heartbeat" "github.com/ethereum-optimism/optimism/op-node/metrics" + "github.com/ethereum-optimism/optimism/op-node/node/safedb" "github.com/ethereum-optimism/optimism/op-node/p2p" + "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/conductor" "github.com/ethereum-optimism/optimism/op-node/rollup/driver" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" "github.com/ethereum-optimism/optimism/op-node/version" + plasma "github.com/ethereum-optimism/optimism/op-plasma" "github.com/ethereum-optimism/optimism/op-service/client" "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/ethereum-optimism/optimism/op-service/httputil" "github.com/ethereum-optimism/optimism/op-service/oppprof" "github.com/ethereum-optimism/optimism/op-service/retry" "github.com/ethereum-optimism/optimism/op-service/sources" @@ -37,7 +36,7 @@ import ( var ErrAlreadyClosed = errors.New("node is already closed") type closableSafeDB interface { - derive.SafeHeadListener + rollup.SafeHeadListener SafeDBReader io.Closer } diff --git a/op-node/rollup/attributes/attributes.go b/op-node/rollup/attributes/attributes.go index 52f04170c4d9..517c91f70863 100644 --- a/op-node/rollup/attributes/attributes.go +++ b/op-node/rollup/attributes/attributes.go @@ -15,11 +15,12 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup/async" "github.com/ethereum-optimism/optimism/op-node/rollup/conductor" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-service/eth" ) type Engine interface { - derive.EngineControl + engine.EngineControl SetUnsafeHead(eth.L2BlockRef) SetSafeHead(eth.L2BlockRef) @@ -146,13 +147,13 @@ func (eq *AttributesHandler) forceNextSafeAttributes(ctx context.Context, attrib } if err != nil { switch errType { - case derive.BlockInsertTemporaryErr: + case engine.BlockInsertTemporaryErr: // RPC errors are recoverable, we can retry the buffered payload attributes later. return derive.NewTemporaryError(fmt.Errorf("temporarily cannot insert new safe block: %w", err)) - case derive.BlockInsertPrestateErr: + case engine.BlockInsertPrestateErr: _ = eq.ec.CancelPayload(ctx, true) return derive.NewResetError(fmt.Errorf("need reset to resolve pre-state problem: %w", err)) - case derive.BlockInsertPayloadErr: + case engine.BlockInsertPayloadErr: _ = eq.ec.CancelPayload(ctx, true) eq.log.Warn("could not process payload derived from L1 data, dropping batch", "err", err) // Count the number of deposits to see if the tx list is deposit only. diff --git a/op-node/rollup/attributes/attributes_test.go b/op-node/rollup/attributes/attributes_test.go index 2b27dcf39697..62931af8c378 100644 --- a/op-node/rollup/attributes/attributes_test.go +++ b/op-node/rollup/attributes/attributes_test.go @@ -17,6 +17,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/metrics" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/testlog" @@ -181,7 +182,7 @@ func TestAttributesHandler(t *testing.T) { t.Run("drop stale attributes", func(t *testing.T) { logger := testlog.Logger(t, log.LevelInfo) eng := &testutils.MockEngine{} - ec := derive.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync) + ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync) ah := NewAttributesHandler(logger, cfg, ec, eng) defer eng.AssertExpectations(t) @@ -195,7 +196,7 @@ func TestAttributesHandler(t *testing.T) { t.Run("pending gets reorged", func(t *testing.T) { logger := testlog.Logger(t, log.LevelInfo) eng := &testutils.MockEngine{} - ec := derive.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync) + ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync) ah := NewAttributesHandler(logger, cfg, ec, eng) defer eng.AssertExpectations(t) @@ -210,7 +211,7 @@ func TestAttributesHandler(t *testing.T) { t.Run("consolidation fails", func(t *testing.T) { logger := testlog.Logger(t, log.LevelInfo) eng := &testutils.MockEngine{} - ec := derive.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync) + ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync) ah := NewAttributesHandler(logger, cfg, ec, eng) ec.SetUnsafeHead(refA1) @@ -264,7 +265,7 @@ func TestAttributesHandler(t *testing.T) { fn := func(t *testing.T, lastInSpan bool) { logger := testlog.Logger(t, log.LevelInfo) eng := &testutils.MockEngine{} - ec := derive.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync) + ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync) ah := NewAttributesHandler(logger, cfg, ec, eng) ec.SetUnsafeHead(refA1) @@ -323,7 +324,7 @@ func TestAttributesHandler(t *testing.T) { logger := testlog.Logger(t, log.LevelInfo) eng := &testutils.MockEngine{} - ec := derive.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync) + ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync) ah := NewAttributesHandler(logger, cfg, ec, eng) ec.SetUnsafeHead(refA0) @@ -374,7 +375,7 @@ func TestAttributesHandler(t *testing.T) { logger := testlog.Logger(t, log.LevelInfo) eng := &testutils.MockEngine{} - ec := derive.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync) + ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync) ah := NewAttributesHandler(logger, cfg, ec, eng) ec.SetUnsafeHead(refA0) @@ -398,7 +399,7 @@ func TestAttributesHandler(t *testing.T) { t.Run("no attributes", func(t *testing.T) { logger := testlog.Logger(t, log.LevelInfo) eng := &testutils.MockEngine{} - ec := derive.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync) + ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync) ah := NewAttributesHandler(logger, cfg, ec, eng) defer eng.AssertExpectations(t) diff --git a/op-node/rollup/clsync/clsync.go b/op-node/rollup/clsync/clsync.go index fbd7b8a91d8d..989f1c7c98b6 100644 --- a/op-node/rollup/clsync/clsync.go +++ b/op-node/rollup/clsync/clsync.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-service/eth" ) @@ -20,7 +21,7 @@ type Metrics interface { } type Engine interface { - derive.EngineState + engine.EngineState InsertUnsafePayload(ctx context.Context, payload *eth.ExecutionPayloadEnvelope, ref eth.L2BlockRef) error } diff --git a/op-node/rollup/derive/iface.go b/op-node/rollup/derive/iface.go deleted file mode 100644 index 4190d84fa534..000000000000 --- a/op-node/rollup/derive/iface.go +++ /dev/null @@ -1,114 +0,0 @@ -package derive - -import ( - "context" - - "github.com/ethereum/go-ethereum/common" - - "github.com/ethereum-optimism/optimism/op-node/rollup/async" - "github.com/ethereum-optimism/optimism/op-node/rollup/conductor" - "github.com/ethereum-optimism/optimism/op-service/eth" -) - -// SafeHeadListener is called when the safe head is updated. -// The safe head may advance by more than one block in a single update -// The l1Block specified is the first L1 block that includes sufficient information to derive the new safe head -type SafeHeadListener interface { - - // Enabled reports if this safe head listener is actively using the posted data. This allows the ResetEngine to - // optionally skip making calls that may be expensive to prepare. - // Callbacks may still be made if Enabled returns false but are not guaranteed. - Enabled() bool - - // SafeHeadUpdated indicates that the safe head has been updated in response to processing batch data - // The l1Block specified is the first L1 block containing all required batch data to derive newSafeHead - SafeHeadUpdated(newSafeHead eth.L2BlockRef, l1Block eth.BlockID) error - - // SafeHeadReset indicates that the derivation pipeline reset back to the specified safe head - // The L1 block that made the new safe head safe is unknown. - SafeHeadReset(resetSafeHead eth.L2BlockRef) error -} - -// EngineState provides a read-only interface of the forkchoice state properties of the L2 Engine. -type EngineState interface { - Finalized() eth.L2BlockRef - UnsafeL2Head() eth.L2BlockRef - SafeL2Head() eth.L2BlockRef -} - -type Engine interface { - ExecEngine - L2Source -} - -// EngineControl enables other components to build blocks with the Engine, -// while keeping the forkchoice state and payload-id management internal to -// avoid state inconsistencies between different users of the EngineControl. -type EngineControl interface { - EngineState - - // StartPayload requests the engine to start building a block with the given attributes. - // If updateSafe, the resulting block will be marked as a safe block. - StartPayload(ctx context.Context, parent eth.L2BlockRef, attrs *AttributesWithParent, updateSafe bool) (errType BlockInsertionErrType, err error) - // ConfirmPayload requests the engine to complete the current block. If no block is being built, or if it fails, an error is returned. - ConfirmPayload(ctx context.Context, agossip async.AsyncGossiper, sequencerConductor conductor.SequencerConductor) (out *eth.ExecutionPayloadEnvelope, errTyp BlockInsertionErrType, err error) - // CancelPayload requests the engine to stop building the current block without making it canonical. - // This is optional, as the engine expires building jobs that are left uncompleted, but can still save resources. - CancelPayload(ctx context.Context, force bool) error - // BuildingPayload indicates if a payload is being built, and onto which block it is being built, and whether or not it is a safe payload. - BuildingPayload() (onto eth.L2BlockRef, id eth.PayloadID, safe bool) -} - -type LocalEngineState interface { - EngineState - - PendingSafeL2Head() eth.L2BlockRef - BackupUnsafeL2Head() eth.L2BlockRef -} - -type ResetEngineControl interface { - SetUnsafeHead(eth.L2BlockRef) - SetSafeHead(eth.L2BlockRef) - SetFinalizedHead(eth.L2BlockRef) - - SetBackupUnsafeL2Head(block eth.L2BlockRef, triggerReorg bool) - SetPendingSafeL2Head(eth.L2BlockRef) - - ResetBuildingState() -} - -type LocalEngineControl interface { - LocalEngineState - EngineControl - ResetEngineControl -} - -type L2Source interface { - PayloadByHash(context.Context, common.Hash) (*eth.ExecutionPayloadEnvelope, error) - PayloadByNumber(context.Context, uint64) (*eth.ExecutionPayloadEnvelope, error) - L2BlockRefByLabel(ctx context.Context, label eth.BlockLabel) (eth.L2BlockRef, error) - L2BlockRefByHash(ctx context.Context, l2Hash common.Hash) (eth.L2BlockRef, error) - L2BlockRefByNumber(ctx context.Context, num uint64) (eth.L2BlockRef, error) - SystemConfigL2Fetcher -} - -type FinalizerHooks interface { - // OnDerivationL1End remembers the given L1 block, - // and finalizes any prior data with the latest finality signal based on block height. - OnDerivationL1End(ctx context.Context, derivedFrom eth.L1BlockRef) error - // PostProcessSafeL2 remembers the L2 block is derived from the given L1 block, for later finalization. - PostProcessSafeL2(l2Safe eth.L2BlockRef, derivedFrom eth.L1BlockRef) - // Reset clear recent state, to adapt to reorgs. - Reset() -} - -type AttributesHandler interface { - // HasAttributes returns if there are any block attributes to process. - // HasAttributes is for EngineQueue testing only, and can be removed when attribute processing is fully independent. - HasAttributes() bool - // SetAttributes overwrites the set of attributes. This may be nil, to clear what may be processed next. - SetAttributes(attributes *AttributesWithParent) - // Proceed runs one attempt of processing attributes, if any. - // Proceed returns io.EOF if there are no attributes to process. - Proceed(ctx context.Context) error -} diff --git a/op-node/rollup/derive/pipeline.go b/op-node/rollup/derive/pipeline.go index 2a15dd73badb..31295870f40c 100644 --- a/op-node/rollup/derive/pipeline.go +++ b/op-node/rollup/derive/pipeline.go @@ -6,6 +6,7 @@ import ( "fmt" "io" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" "github.com/ethereum-optimism/optimism/op-node/rollup" @@ -36,6 +37,15 @@ type ResettableStage interface { Reset(ctx context.Context, base eth.L1BlockRef, baseCfg eth.SystemConfig) error } +type L2Source interface { + PayloadByHash(context.Context, common.Hash) (*eth.ExecutionPayloadEnvelope, error) + PayloadByNumber(context.Context, uint64) (*eth.ExecutionPayloadEnvelope, error) + L2BlockRefByLabel(ctx context.Context, label eth.BlockLabel) (eth.L2BlockRef, error) + L2BlockRefByHash(ctx context.Context, l2Hash common.Hash) (eth.L2BlockRef, error) + L2BlockRefByNumber(ctx context.Context, num uint64) (eth.L2BlockRef, error) + SystemConfigL2Fetcher +} + // DerivationPipeline is updated with new L1 data, and the Step() function can be iterated on to generate attributes type DerivationPipeline struct { log log.Logger diff --git a/op-node/rollup/derive/pipeline_test.go b/op-node/rollup/derive/pipeline_test.go index a7639dc6295b..409b228a93db 100644 --- a/op-node/rollup/derive/pipeline_test.go +++ b/op-node/rollup/derive/pipeline_test.go @@ -2,8 +2,6 @@ package derive import "github.com/ethereum-optimism/optimism/op-service/testutils" -var _ Engine = (*testutils.MockEngine)(nil) - var _ L1Fetcher = (*testutils.MockL1Source)(nil) var _ Metrics = (*testutils.TestDerivationMetrics)(nil) diff --git a/op-node/rollup/driver/driver.go b/op-node/rollup/driver/driver.go index 951c7c45db5e..7213eaf98bac 100644 --- a/op-node/rollup/driver/driver.go +++ b/op-node/rollup/driver/driver.go @@ -13,6 +13,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup/clsync" "github.com/ethereum-optimism/optimism/op-node/rollup/conductor" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-node/rollup/finality" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" plasma "github.com/ethereum-optimism/optimism/op-plasma" @@ -52,7 +53,7 @@ type L1Chain interface { } type L2Chain interface { - derive.Engine + engine.Engine L2BlockRefByLabel(ctx context.Context, label eth.BlockLabel) (eth.L2BlockRef, error) L2BlockRefByHash(ctx context.Context, l2Hash common.Hash) (eth.L2BlockRef, error) L2BlockRefByNumber(ctx context.Context, num uint64) (eth.L2BlockRef, error) @@ -67,7 +68,7 @@ type DerivationPipeline interface { } type EngineController interface { - derive.LocalEngineControl + engine.LocalEngineControl IsEngineSyncing() bool InsertUnsafePayload(ctx context.Context, payload *eth.ExecutionPayloadEnvelope, ref eth.L2BlockRef) error TryUpdateEngine(ctx context.Context) error @@ -81,14 +82,20 @@ type CLSync interface { } type AttributesHandler interface { + // HasAttributes returns if there are any block attributes to process. + // HasAttributes is for EngineQueue testing only, and can be removed when attribute processing is fully independent. + HasAttributes() bool + // SetAttributes overwrites the set of attributes. This may be nil, to clear what may be processed next. SetAttributes(attributes *derive.AttributesWithParent) + // Proceed runs one attempt of processing attributes, if any. + // Proceed returns io.EOF if there are no attributes to process. Proceed(ctx context.Context) error } type Finalizer interface { Finalize(ctx context.Context, ref eth.L1BlockRef) FinalizedL1() eth.L1BlockRef - derive.FinalizerHooks + engine.FinalizerHooks } type PlasmaIface interface { @@ -161,7 +168,7 @@ func NewDriver( snapshotLog log.Logger, metrics Metrics, sequencerStateListener SequencerStateListener, - safeHeadListener derive.SafeHeadListener, + safeHeadListener rollup.SafeHeadListener, syncCfg *sync.Config, sequencerConductor conductor.SequencerConductor, plasma PlasmaIface, @@ -171,7 +178,7 @@ func NewDriver( sequencerConfDepth := NewConfDepth(driverCfg.SequencerConfDepth, l1State.L1Head, l1) findL1Origin := NewL1OriginSelector(log, cfg, sequencerConfDepth) verifConfDepth := NewConfDepth(driverCfg.VerifierConfDepth, l1State.L1Head, l1) - engine := derive.NewEngineController(l2, log, metrics, cfg, syncCfg.SyncMode) + engine := engine.NewEngineController(l2, log, metrics, cfg, syncCfg.SyncMode) clSync := clsync.NewCLSync(log, cfg, metrics, engine) var finalizer Finalizer diff --git a/op-node/rollup/driver/metered_engine.go b/op-node/rollup/driver/metered_engine.go index 29f2c7e4c8a2..41f207a50962 100644 --- a/op-node/rollup/driver/metered_engine.go +++ b/op-node/rollup/driver/metered_engine.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup/async" "github.com/ethereum-optimism/optimism/op-node/rollup/conductor" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-service/eth" ) @@ -23,7 +24,7 @@ type EngineMetrics interface { // MeteredEngine wraps an EngineControl and adds metrics such as block building time diff and sealing time type MeteredEngine struct { - inner derive.EngineControl + inner engine.EngineControl cfg *rollup.Config metrics EngineMetrics @@ -32,7 +33,7 @@ type MeteredEngine struct { buildingStartTime time.Time } -func NewMeteredEngine(cfg *rollup.Config, inner derive.EngineControl, metrics EngineMetrics, log log.Logger) *MeteredEngine { +func NewMeteredEngine(cfg *rollup.Config, inner engine.EngineControl, metrics EngineMetrics, log log.Logger) *MeteredEngine { return &MeteredEngine{ inner: inner, cfg: cfg, @@ -53,7 +54,7 @@ func (m *MeteredEngine) SafeL2Head() eth.L2BlockRef { return m.inner.SafeL2Head() } -func (m *MeteredEngine) StartPayload(ctx context.Context, parent eth.L2BlockRef, attrs *derive.AttributesWithParent, updateSafe bool) (errType derive.BlockInsertionErrType, err error) { +func (m *MeteredEngine) StartPayload(ctx context.Context, parent eth.L2BlockRef, attrs *derive.AttributesWithParent, updateSafe bool) (errType engine.BlockInsertionErrType, err error) { m.buildingStartTime = time.Now() errType, err = m.inner.StartPayload(ctx, parent, attrs, updateSafe) if err != nil { @@ -62,7 +63,7 @@ func (m *MeteredEngine) StartPayload(ctx context.Context, parent eth.L2BlockRef, return errType, err } -func (m *MeteredEngine) ConfirmPayload(ctx context.Context, agossip async.AsyncGossiper, sequencerConductor conductor.SequencerConductor) (out *eth.ExecutionPayloadEnvelope, errTyp derive.BlockInsertionErrType, err error) { +func (m *MeteredEngine) ConfirmPayload(ctx context.Context, agossip async.AsyncGossiper, sequencerConductor conductor.SequencerConductor) (out *eth.ExecutionPayloadEnvelope, errTyp engine.BlockInsertionErrType, err error) { sealingStart := time.Now() // Actually execute the block and add it to the head of the chain. payload, errType, err := m.inner.ConfirmPayload(ctx, agossip, sequencerConductor) diff --git a/op-node/rollup/driver/sequencer.go b/op-node/rollup/driver/sequencer.go index 80a2bb7df040..c40d76f08922 100644 --- a/op-node/rollup/driver/sequencer.go +++ b/op-node/rollup/driver/sequencer.go @@ -14,6 +14,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup/async" "github.com/ethereum-optimism/optimism/op-node/rollup/conductor" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-service/eth" ) @@ -37,7 +38,7 @@ type Sequencer struct { rollupCfg *rollup.Config spec *rollup.ChainSpec - engine derive.EngineControl + engine engine.EngineControl attrBuilder derive.AttributesBuilder l1OriginSelector L1OriginSelectorIface @@ -50,7 +51,7 @@ type Sequencer struct { nextAction time.Time } -func NewSequencer(log log.Logger, rollupCfg *rollup.Config, engine derive.EngineControl, attributesBuilder derive.AttributesBuilder, l1OriginSelector L1OriginSelectorIface, metrics SequencerMetrics) *Sequencer { +func NewSequencer(log log.Logger, rollupCfg *rollup.Config, engine engine.EngineControl, attributesBuilder derive.AttributesBuilder, l1OriginSelector L1OriginSelectorIface, metrics SequencerMetrics) *Sequencer { return &Sequencer{ log: log, rollupCfg: rollupCfg, diff --git a/op-node/rollup/driver/sequencer_test.go b/op-node/rollup/driver/sequencer_test.go index 31bcc6b5595b..ffd5f15d9e2c 100644 --- a/op-node/rollup/driver/sequencer_test.go +++ b/op-node/rollup/driver/sequencer_test.go @@ -21,6 +21,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup/async" "github.com/ethereum-optimism/optimism/op-node/rollup/conductor" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/testlog" "github.com/ethereum-optimism/optimism/op-service/testutils" @@ -46,7 +47,7 @@ type FakeEngineControl struct { makePayload func(onto eth.L2BlockRef, attrs *eth.PayloadAttributes) *eth.ExecutionPayload - errTyp derive.BlockInsertionErrType + errTyp engine.BlockInsertionErrType err error totalBuildingTime time.Duration @@ -62,7 +63,7 @@ func (m *FakeEngineControl) avgTxsPerBlock() float64 { return float64(m.totalTxs) / float64(m.totalBuiltBlocks) } -func (m *FakeEngineControl) StartPayload(ctx context.Context, parent eth.L2BlockRef, attrs *derive.AttributesWithParent, updateSafe bool) (errType derive.BlockInsertionErrType, err error) { +func (m *FakeEngineControl) StartPayload(ctx context.Context, parent eth.L2BlockRef, attrs *derive.AttributesWithParent, updateSafe bool) (errType engine.BlockInsertionErrType, err error) { if m.err != nil { return m.errTyp, m.err } @@ -72,10 +73,10 @@ func (m *FakeEngineControl) StartPayload(ctx context.Context, parent eth.L2Block m.buildingSafe = updateSafe m.buildingAttrs = attrs.Attributes m.buildingStart = m.timeNow() - return derive.BlockInsertOK, nil + return engine.BlockInsertOK, nil } -func (m *FakeEngineControl) ConfirmPayload(ctx context.Context, agossip async.AsyncGossiper, sequencerConductor conductor.SequencerConductor) (out *eth.ExecutionPayloadEnvelope, errTyp derive.BlockInsertionErrType, err error) { +func (m *FakeEngineControl) ConfirmPayload(ctx context.Context, agossip async.AsyncGossiper, sequencerConductor conductor.SequencerConductor) (out *eth.ExecutionPayloadEnvelope, errTyp engine.BlockInsertionErrType, err error) { if m.err != nil { return nil, m.errTyp, m.err } @@ -94,7 +95,7 @@ func (m *FakeEngineControl) ConfirmPayload(ctx context.Context, agossip async.As m.resetBuildingState() m.totalTxs += len(payload.Transactions) - return ð.ExecutionPayloadEnvelope{ExecutionPayload: payload}, derive.BlockInsertOK, nil + return ð.ExecutionPayloadEnvelope{ExecutionPayload: payload}, engine.BlockInsertOK, nil } func (m *FakeEngineControl) CancelPayload(ctx context.Context, force bool) error { @@ -127,7 +128,7 @@ func (m *FakeEngineControl) resetBuildingState() { m.buildingAttrs = nil } -var _ derive.EngineControl = (*FakeEngineControl)(nil) +var _ engine.EngineControl = (*FakeEngineControl)(nil) type testAttrBuilderFn func(ctx context.Context, l2Parent eth.L2BlockRef, epoch eth.BlockID) (attrs *eth.PayloadAttributes, err error) @@ -327,7 +328,7 @@ func TestSequencerChaosMonkey(t *testing.T) { if engControl.err != mockResetErr { // the mockResetErr requires the sequencer to Reset() to recover. engControl.err = nil } - engControl.errTyp = derive.BlockInsertOK + engControl.errTyp = engine.BlockInsertOK // maybe make something maybe fail, or try a new L1 origin switch rng.Intn(20) { // 9/20 = 45% chance to fail sequencer action (!!!) @@ -337,10 +338,10 @@ func TestSequencerChaosMonkey(t *testing.T) { attrsErr = errors.New("mock attributes error") case 4, 5: engControl.err = errors.New("mock temporary engine error") - engControl.errTyp = derive.BlockInsertTemporaryErr + engControl.errTyp = engine.BlockInsertTemporaryErr case 6, 7: engControl.err = errors.New("mock prestate engine error") - engControl.errTyp = derive.BlockInsertPrestateErr + engControl.errTyp = engine.BlockInsertPrestateErr case 8: engControl.err = mockResetErr default: diff --git a/op-node/rollup/driver/state.go b/op-node/rollup/driver/state.go index d7968823bb0e..7af9656bd386 100644 --- a/op-node/rollup/driver/state.go +++ b/op-node/rollup/driver/state.go @@ -17,6 +17,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup/async" "github.com/ethereum-optimism/optimism/op-node/rollup/conductor" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/retry" @@ -367,7 +368,7 @@ func (s *Driver) eventLoop() { s.Finalizer.Reset() s.metrics.RecordPipelineReset() reqStep() - if err := derive.ResetEngine(s.driverCtx, s.log, s.config, s.Engine, s.l1, s.l2, s.syncCfg, s.SafeHeadNotifs); err != nil { + if err := engine.ResetEngine(s.driverCtx, s.log, s.config, s.Engine, s.l1, s.l2, s.syncCfg, s.SafeHeadNotifs); err != nil { s.log.Error("Derivation pipeline not ready, failed to reset engine", "err", err) // Derivation-pipeline will return a new ResetError until we confirm the engine has been successfully reset. continue @@ -448,7 +449,7 @@ type SyncDeriver struct { AttributesHandler AttributesHandler - SafeHeadNotifs derive.SafeHeadListener // notified when safe head is updated + SafeHeadNotifs rollup.SafeHeadListener // notified when safe head is updated lastNotifiedSafeHead eth.L2BlockRef CLSync CLSync @@ -469,7 +470,7 @@ func (s *SyncDeriver) SyncStep(ctx context.Context) error { } // If we don't need to call FCU, keep going b/c this was a no-op. If we needed to // perform a network call, then we should yield even if we did not encounter an error. - if err := s.Engine.TryUpdateEngine(ctx); !errors.Is(err, derive.ErrNoFCUNeeded) { + if err := s.Engine.TryUpdateEngine(ctx); !errors.Is(err, engine.ErrNoFCUNeeded) { return err } diff --git a/op-node/rollup/derive/engine_controller.go b/op-node/rollup/engine/engine_controller.go similarity index 89% rename from op-node/rollup/derive/engine_controller.go rename to op-node/rollup/engine/engine_controller.go index 6de097e42d01..6e382cc367f2 100644 --- a/op-node/rollup/derive/engine_controller.go +++ b/op-node/rollup/engine/engine_controller.go @@ -1,4 +1,4 @@ -package derive +package engine import ( "context" @@ -6,15 +6,17 @@ import ( "fmt" "time" + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/async" "github.com/ethereum-optimism/optimism/op-node/rollup/conductor" + "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" "github.com/ethereum-optimism/optimism/op-service/clock" "github.com/ethereum-optimism/optimism/op-service/eth" - "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/log" ) type syncStatusEnum int @@ -34,9 +36,6 @@ const ( var ErrNoFCUNeeded = errors.New("no FCU call was needed") -var _ EngineControl = (*EngineController)(nil) -var _ LocalEngineControl = (*EngineController)(nil) - type ExecEngine interface { GetPayload(ctx context.Context, payloadInfo eth.PayloadInfo) (*eth.ExecutionPayloadEnvelope, error) ForkchoiceUpdate(ctx context.Context, state *eth.ForkchoiceState, attr *eth.PayloadAttributes) (*eth.ForkchoiceUpdatedResult, error) @@ -47,7 +46,7 @@ type ExecEngine interface { type EngineController struct { engine ExecEngine // Underlying execution engine RPC log log.Logger - metrics Metrics + metrics derive.Metrics syncMode sync.Mode syncStatus syncStatusEnum chainSpec *rollup.ChainSpec @@ -73,10 +72,10 @@ type EngineController struct { buildingOnto eth.L2BlockRef buildingInfo eth.PayloadInfo buildingSafe bool - safeAttrs *AttributesWithParent + safeAttrs *derive.AttributesWithParent } -func NewEngineController(engine ExecEngine, log log.Logger, metrics Metrics, rollupCfg *rollup.Config, syncMode sync.Mode) *EngineController { +func NewEngineController(engine ExecEngine, log log.Logger, metrics derive.Metrics, rollupCfg *rollup.Config, syncMode sync.Mode) *EngineController { syncStatus := syncStatusCL if syncMode == sync.ELSync { syncStatus = syncStatusWillStartEL @@ -207,7 +206,7 @@ func (e *EngineController) logSyncProgressMaybe() func() { // Engine Methods -func (e *EngineController) StartPayload(ctx context.Context, parent eth.L2BlockRef, attrs *AttributesWithParent, updateSafe bool) (errType BlockInsertionErrType, err error) { +func (e *EngineController) StartPayload(ctx context.Context, parent eth.L2BlockRef, attrs *derive.AttributesWithParent, updateSafe bool) (errType BlockInsertionErrType, err error) { if e.IsEngineSyncing() { return BlockInsertTemporaryErr, fmt.Errorf("engine is in progess of p2p sync") } @@ -260,9 +259,9 @@ func (e *EngineController) ConfirmPayload(ctx context.Context, agossip async.Asy if err != nil { return nil, errTyp, fmt.Errorf("failed to complete building on top of L2 chain %s, id: %s, error (%d): %w", e.buildingOnto, e.buildingInfo.ID, errTyp, err) } - ref, err := PayloadToBlockRef(e.rollupCfg, envelope.ExecutionPayload) + ref, err := derive.PayloadToBlockRef(e.rollupCfg, envelope.ExecutionPayload) if err != nil { - return nil, BlockInsertPayloadErr, NewResetError(fmt.Errorf("failed to decode L2 block ref from payload: %w", err)) + return nil, BlockInsertPayloadErr, derive.NewResetError(fmt.Errorf("failed to decode L2 block ref from payload: %w", err)) } // Backup unsafeHead when new block is not built on original unsafe head. if e.unsafeHead.Number >= ref.Number { @@ -360,12 +359,12 @@ func (e *EngineController) TryUpdateEngine(ctx context.Context) error { if errors.As(err, &inputErr) { switch inputErr.Code { case eth.InvalidForkchoiceState: - return NewResetError(fmt.Errorf("forkchoice update was inconsistent with engine, need reset to resolve: %w", inputErr.Unwrap())) + return derive.NewResetError(fmt.Errorf("forkchoice update was inconsistent with engine, need reset to resolve: %w", inputErr.Unwrap())) default: - return NewTemporaryError(fmt.Errorf("unexpected error code in forkchoice-updated response: %w", err)) + return derive.NewTemporaryError(fmt.Errorf("unexpected error code in forkchoice-updated response: %w", err)) } } else { - return NewTemporaryError(fmt.Errorf("failed to sync forkchoice with engine: %w", err)) + return derive.NewTemporaryError(fmt.Errorf("failed to sync forkchoice with engine: %w", err)) } } e.needFCUCall = false @@ -386,17 +385,17 @@ func (e *EngineController) InsertUnsafePayload(ctx context.Context, envelope *et e.log.Info("Skipping EL sync and going straight to CL sync because there is a finalized block", "id", b.ID()) return nil } else { - return NewTemporaryError(fmt.Errorf("failed to fetch finalized head: %w", err)) + return derive.NewTemporaryError(fmt.Errorf("failed to fetch finalized head: %w", err)) } } // Insert the payload & then call FCU status, err := e.engine.NewPayload(ctx, envelope.ExecutionPayload, envelope.ParentBeaconBlockRoot) if err != nil { - return NewTemporaryError(fmt.Errorf("failed to update insert payload: %w", err)) + return derive.NewTemporaryError(fmt.Errorf("failed to update insert payload: %w", err)) } if !e.checkNewPayloadStatus(status.Status) { payload := envelope.ExecutionPayload - return NewTemporaryError(fmt.Errorf("cannot process unsafe payload: new - %v; parent: %v; err: %w", + return derive.NewTemporaryError(fmt.Errorf("cannot process unsafe payload: new - %v; parent: %v; err: %w", payload.ID(), payload.ParentID(), eth.NewPayloadErr(payload, status))) } @@ -420,17 +419,17 @@ func (e *EngineController) InsertUnsafePayload(ctx context.Context, envelope *et if errors.As(err, &inputErr) { switch inputErr.Code { case eth.InvalidForkchoiceState: - return NewResetError(fmt.Errorf("pre-unsafe-block forkchoice update was inconsistent with engine, need reset to resolve: %w", inputErr.Unwrap())) + return derive.NewResetError(fmt.Errorf("pre-unsafe-block forkchoice update was inconsistent with engine, need reset to resolve: %w", inputErr.Unwrap())) default: - return NewTemporaryError(fmt.Errorf("unexpected error code in forkchoice-updated response: %w", err)) + return derive.NewTemporaryError(fmt.Errorf("unexpected error code in forkchoice-updated response: %w", err)) } } else { - return NewTemporaryError(fmt.Errorf("failed to update forkchoice to prepare for new unsafe payload: %w", err)) + return derive.NewTemporaryError(fmt.Errorf("failed to update forkchoice to prepare for new unsafe payload: %w", err)) } } if !e.checkForkchoiceUpdatedStatus(fcRes.PayloadStatus.Status) { payload := envelope.ExecutionPayload - return NewTemporaryError(fmt.Errorf("cannot prepare unsafe chain for new payload: new - %v; parent: %v; err: %w", + return derive.NewTemporaryError(fmt.Errorf("cannot prepare unsafe chain for new payload: new - %v; parent: %v; err: %w", payload.ID(), payload.ParentID(), eth.ForkchoiceUpdateErr(fcRes.PayloadStatus))) } e.SetUnsafeHead(ref) @@ -490,15 +489,15 @@ func (e *EngineController) TryBackupUnsafeReorg(ctx context.Context) (bool, erro e.SetBackupUnsafeL2Head(eth.L2BlockRef{}, false) switch inputErr.Code { case eth.InvalidForkchoiceState: - return true, NewResetError(fmt.Errorf("forkchoice update was inconsistent with engine, need reset to resolve: %w", inputErr.Unwrap())) + return true, derive.NewResetError(fmt.Errorf("forkchoice update was inconsistent with engine, need reset to resolve: %w", inputErr.Unwrap())) default: - return true, NewTemporaryError(fmt.Errorf("unexpected error code in forkchoice-updated response: %w", err)) + return true, derive.NewTemporaryError(fmt.Errorf("unexpected error code in forkchoice-updated response: %w", err)) } } else { // Retry when forkChoiceUpdate returns non-input error. // Do not reset backupUnsafeHead because it will be used again. e.needFCUCallForBackupUnsafeReorg = true - return true, NewTemporaryError(fmt.Errorf("failed to sync forkchoice with engine: %w", err)) + return true, derive.NewTemporaryError(fmt.Errorf("failed to sync forkchoice with engine: %w", err)) } } if fcRes.PayloadStatus.Status == eth.ExecutionValid { @@ -510,7 +509,7 @@ func (e *EngineController) TryBackupUnsafeReorg(ctx context.Context) (bool, erro } e.SetBackupUnsafeL2Head(eth.L2BlockRef{}, false) // Execution engine could not reorg back to previous unsafe head. - return true, NewTemporaryError(fmt.Errorf("cannot restore unsafe chain using backupUnsafe: err: %w", + return true, derive.NewTemporaryError(fmt.Errorf("cannot restore unsafe chain using backupUnsafe: err: %w", eth.ForkchoiceUpdateErr(fcRes.PayloadStatus))) } diff --git a/op-node/rollup/derive/engine_reset.go b/op-node/rollup/engine/engine_reset.go similarity index 72% rename from op-node/rollup/derive/engine_reset.go rename to op-node/rollup/engine/engine_reset.go index 2ada72378dde..700e44e11c30 100644 --- a/op-node/rollup/derive/engine_reset.go +++ b/op-node/rollup/engine/engine_reset.go @@ -1,4 +1,4 @@ -package derive +package engine import ( "context" @@ -7,29 +7,41 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" "github.com/ethereum-optimism/optimism/op-service/eth" ) type ResetL2 interface { sync.L2Chain - SystemConfigL2Fetcher + derive.SystemConfigL2Fetcher +} + +type ResetEngineControl interface { + SetUnsafeHead(eth.L2BlockRef) + SetSafeHead(eth.L2BlockRef) + SetFinalizedHead(eth.L2BlockRef) + + SetBackupUnsafeL2Head(block eth.L2BlockRef, triggerReorg bool) + SetPendingSafeL2Head(eth.L2BlockRef) + + ResetBuildingState() } // ResetEngine walks the L2 chain backwards until it finds a plausible unsafe head, // and an L2 safe block that is guaranteed to still be from the L1 chain. -func ResetEngine(ctx context.Context, log log.Logger, cfg *rollup.Config, ec ResetEngineControl, l1 sync.L1Chain, l2 ResetL2, syncCfg *sync.Config, safeHeadNotifs SafeHeadListener) error { +func ResetEngine(ctx context.Context, log log.Logger, cfg *rollup.Config, ec ResetEngineControl, l1 sync.L1Chain, l2 ResetL2, syncCfg *sync.Config, safeHeadNotifs rollup.SafeHeadListener) error { result, err := sync.FindL2Heads(ctx, cfg, l1, l2, log, syncCfg) if err != nil { - return NewTemporaryError(fmt.Errorf("failed to find the L2 Heads to start from: %w", err)) + return derive.NewTemporaryError(fmt.Errorf("failed to find the L2 Heads to start from: %w", err)) } finalized, safe, unsafe := result.Finalized, result.Safe, result.Unsafe l1Origin, err := l1.L1BlockRefByHash(ctx, safe.L1Origin.Hash) if err != nil { - return NewTemporaryError(fmt.Errorf("failed to fetch the new L1 progress: origin: %v; err: %w", safe.L1Origin, err)) + return derive.NewTemporaryError(fmt.Errorf("failed to fetch the new L1 progress: origin: %v; err: %w", safe.L1Origin, err)) } if safe.Time < l1Origin.Time { - return NewResetError(fmt.Errorf("cannot reset block derivation to start at L2 block %s with time %d older than its L1 origin %s with time %d, time invariant is broken", + return derive.NewResetError(fmt.Errorf("cannot reset block derivation to start at L2 block %s with time %d older than its L1 origin %s with time %d, time invariant is broken", safe, safe.Time, l1Origin, l1Origin.Time)) } diff --git a/op-node/rollup/derive/engine_update.go b/op-node/rollup/engine/engine_update.go similarity index 99% rename from op-node/rollup/derive/engine_update.go rename to op-node/rollup/engine/engine_update.go index b23a27004004..68d1f74bf7f5 100644 --- a/op-node/rollup/derive/engine_update.go +++ b/op-node/rollup/engine/engine_update.go @@ -1,4 +1,4 @@ -package derive +package engine import ( "context" diff --git a/op-node/rollup/engine/iface.go b/op-node/rollup/engine/iface.go new file mode 100644 index 000000000000..37c4278ac5a7 --- /dev/null +++ b/op-node/rollup/engine/iface.go @@ -0,0 +1,66 @@ +package engine + +import ( + "context" + + "github.com/ethereum-optimism/optimism/op-node/rollup/async" + "github.com/ethereum-optimism/optimism/op-node/rollup/conductor" + "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-service/eth" +) + +// EngineState provides a read-only interface of the forkchoice state properties of the L2 Engine. +type EngineState interface { + Finalized() eth.L2BlockRef + UnsafeL2Head() eth.L2BlockRef + SafeL2Head() eth.L2BlockRef +} + +type Engine interface { + ExecEngine + derive.L2Source +} + +// EngineControl enables other components to build blocks with the Engine, +// while keeping the forkchoice state and payload-id management internal to +// avoid state inconsistencies between different users of the EngineControl. +type EngineControl interface { + EngineState + + // StartPayload requests the engine to start building a block with the given attributes. + // If updateSafe, the resulting block will be marked as a safe block. + StartPayload(ctx context.Context, parent eth.L2BlockRef, attrs *derive.AttributesWithParent, updateSafe bool) (errType BlockInsertionErrType, err error) + // ConfirmPayload requests the engine to complete the current block. If no block is being built, or if it fails, an error is returned. + ConfirmPayload(ctx context.Context, agossip async.AsyncGossiper, sequencerConductor conductor.SequencerConductor) (out *eth.ExecutionPayloadEnvelope, errTyp BlockInsertionErrType, err error) + // CancelPayload requests the engine to stop building the current block without making it canonical. + // This is optional, as the engine expires building jobs that are left uncompleted, but can still save resources. + CancelPayload(ctx context.Context, force bool) error + // BuildingPayload indicates if a payload is being built, and onto which block it is being built, and whether or not it is a safe payload. + BuildingPayload() (onto eth.L2BlockRef, id eth.PayloadID, safe bool) +} + +type LocalEngineState interface { + EngineState + + PendingSafeL2Head() eth.L2BlockRef + BackupUnsafeL2Head() eth.L2BlockRef +} + +type LocalEngineControl interface { + LocalEngineState + EngineControl + ResetEngineControl +} + +type FinalizerHooks interface { + // OnDerivationL1End remembers the given L1 block, + // and finalizes any prior data with the latest finality signal based on block height. + OnDerivationL1End(ctx context.Context, derivedFrom eth.L1BlockRef) error + // PostProcessSafeL2 remembers the L2 block is derived from the given L1 block, for later finalization. + PostProcessSafeL2(l2Safe eth.L2BlockRef, derivedFrom eth.L1BlockRef) + // Reset clear recent state, to adapt to reorgs. + Reset() +} + +var _ EngineControl = (*EngineController)(nil) +var _ LocalEngineControl = (*EngineController)(nil) diff --git a/op-node/rollup/iface.go b/op-node/rollup/iface.go new file mode 100644 index 000000000000..f6cf0882de20 --- /dev/null +++ b/op-node/rollup/iface.go @@ -0,0 +1,22 @@ +package rollup + +import "github.com/ethereum-optimism/optimism/op-service/eth" + +// SafeHeadListener is called when the safe head is updated. +// The safe head may advance by more than one block in a single update +// The l1Block specified is the first L1 block that includes sufficient information to derive the new safe head +type SafeHeadListener interface { + + // Enabled reports if this safe head listener is actively using the posted data. This allows the engine queue to + // optionally skip making calls that may be expensive to prepare. + // Callbacks may still be made if Enabled returns false but are not guaranteed. + Enabled() bool + + // SafeHeadUpdated indicates that the safe head has been updated in response to processing batch data + // The l1Block specified is the first L1 block containing all required batch data to derive newSafeHead + SafeHeadUpdated(newSafeHead eth.L2BlockRef, l1Block eth.BlockID) error + + // SafeHeadReset indicates that the derivation pipeline reset back to the specified safe head + // The L1 block that made the new safe head safe is unknown. + SafeHeadReset(resetSafeHead eth.L2BlockRef) error +} diff --git a/op-program/client/driver/driver.go b/op-program/client/driver/driver.go index b10ce56d6d35..f533865e96dc 100644 --- a/op-program/client/driver/driver.go +++ b/op-program/client/driver/driver.go @@ -13,6 +13,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup/attributes" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/driver" + "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" plasma "github.com/ethereum-optimism/optimism/op-plasma" "github.com/ethereum-optimism/optimism/op-service/eth" @@ -33,11 +34,11 @@ type Engine interface { SafeL2Head() eth.L2BlockRef PendingSafeL2Head() eth.L2BlockRef TryUpdateEngine(ctx context.Context) error - derive.ResetEngineControl + engine.ResetEngineControl } type L2Source interface { - derive.Engine + engine.Engine L2OutputRoot(uint64) (eth.Bytes32, error) } @@ -64,17 +65,17 @@ func (d *MinimalSyncDeriver) SafeL2Head() eth.L2BlockRef { func (d *MinimalSyncDeriver) SyncStep(ctx context.Context) error { if !d.initialResetDone { - if err := d.engine.TryUpdateEngine(ctx); !errors.Is(err, derive.ErrNoFCUNeeded) { + if err := d.engine.TryUpdateEngine(ctx); !errors.Is(err, engine.ErrNoFCUNeeded) { return err } - if err := derive.ResetEngine(ctx, d.logger, d.cfg, d.engine, d.l1Source, d.l2Source, d.syncCfg, nil); err != nil { + if err := engine.ResetEngine(ctx, d.logger, d.cfg, d.engine, d.l1Source, d.l2Source, d.syncCfg, nil); err != nil { return err } d.pipeline.ConfirmEngineReset() d.initialResetDone = true } - if err := d.engine.TryUpdateEngine(ctx); !errors.Is(err, derive.ErrNoFCUNeeded) { + if err := d.engine.TryUpdateEngine(ctx); !errors.Is(err, engine.ErrNoFCUNeeded) { return err } if err := d.attributesHandler.Proceed(ctx); err != io.EOF { @@ -100,7 +101,7 @@ type Driver struct { } func NewDriver(logger log.Logger, cfg *rollup.Config, l1Source derive.L1Fetcher, l1BlobsSource derive.L1BlobsFetcher, l2Source L2Source, targetBlockNum uint64) *Driver { - engine := derive.NewEngineController(l2Source, logger, metrics.NoopMetrics, cfg, sync.CLSync) + engine := engine.NewEngineController(l2Source, logger, metrics.NoopMetrics, cfg, sync.CLSync) attributesHandler := attributes.NewAttributesHandler(logger, cfg, engine, l2Source) syncCfg := &sync.Config{SyncMode: sync.CLSync} pipeline := derive.NewDerivationPipeline(logger, cfg, l1Source, l1BlobsSource, plasma.Disabled, l2Source, metrics.NoopMetrics) diff --git a/op-program/client/l2/engine_test.go b/op-program/client/l2/engine_test.go index b96db24d0cc9..18d9a4c26cf6 100644 --- a/op-program/client/l2/engine_test.go +++ b/op-program/client/l2/engine_test.go @@ -5,9 +5,8 @@ import ( "math/big" "testing" - "github.com/ethereum-optimism/optimism/op-node/chaincfg" - "github.com/ethereum-optimism/optimism/op-node/rollup/derive" - "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/stretchr/testify/require" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus" "github.com/ethereum/go-ethereum/core/state" @@ -15,11 +14,15 @@ import ( "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/trie" - "github.com/stretchr/testify/require" + + "github.com/ethereum-optimism/optimism/op-node/chaincfg" + "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-node/rollup/engine" + "github.com/ethereum-optimism/optimism/op-service/eth" ) // Should implement derive.Engine -var _ derive.Engine = (*OracleEngine)(nil) +var _ engine.Engine = (*OracleEngine)(nil) func TestPayloadByHash(t *testing.T) { ctx := context.Background() From 8e9baf53ba1c0956664a6f343b39e031ebac1081 Mon Sep 17 00:00:00 2001 From: zhiqiangxu <652732310@qq.com> Date: Wed, 12 Jun 2024 05:02:59 +0800 Subject: [PATCH 028/141] op-batcher: log oldest l1 origin when channel close (#10676) * output oldest l1 origin in channel * also log l2 range when channel close * use eth.ToBlockID * fix a bug * add testcase for 3 new fields --- op-batcher/batcher/channel.go | 15 +++++ op-batcher/batcher/channel_builder.go | 33 +++++++++++ op-batcher/batcher/channel_builder_test.go | 66 ++++++++++++++++++++++ op-batcher/batcher/channel_manager.go | 3 + 4 files changed, 117 insertions(+) diff --git a/op-batcher/batcher/channel.go b/op-batcher/batcher/channel.go index 0aaa194a73c4..c92b62c8213a 100644 --- a/op-batcher/batcher/channel.go +++ b/op-batcher/batcher/channel.go @@ -226,6 +226,21 @@ func (c *channel) LatestL1Origin() eth.BlockID { return c.channelBuilder.LatestL1Origin() } +// OldestL1Origin returns the oldest L1 block origin from all the L2 blocks that have been added to the channel +func (c *channel) OldestL1Origin() eth.BlockID { + return c.channelBuilder.OldestL1Origin() +} + +// LatestL2 returns the latest L2 block from all the L2 blocks that have been added to the channel +func (c *channel) LatestL2() eth.BlockID { + return c.channelBuilder.LatestL2() +} + +// OldestL2 returns the oldest L2 block from all the L2 blocks that have been added to the channel +func (c *channel) OldestL2() eth.BlockID { + return c.channelBuilder.OldestL2() +} + func (s *channel) Close() { s.channelBuilder.Close() } diff --git a/op-batcher/batcher/channel_builder.go b/op-batcher/batcher/channel_builder.go index d63e1d45b5dc..1a4ed28bb3f3 100644 --- a/op-batcher/batcher/channel_builder.go +++ b/op-batcher/batcher/channel_builder.go @@ -68,6 +68,12 @@ type ChannelBuilder struct { blocks []*types.Block // latestL1Origin is the latest L1 origin of all the L2 blocks that have been added to the channel latestL1Origin eth.BlockID + // oldestL1Origin is the oldest L1 origin of all the L2 blocks that have been added to the channel + oldestL1Origin eth.BlockID + // latestL2 is the latest L2 block of all the L2 blocks that have been added to the channel + latestL2 eth.BlockID + // oldestL2 is the oldest L2 block of all the L2 blocks that have been added to the channel + oldestL2 eth.BlockID // frames data queue, to be send as txs frames []frameData // total frames counter @@ -135,6 +141,21 @@ func (c *ChannelBuilder) LatestL1Origin() eth.BlockID { return c.latestL1Origin } +// OldestL1Origin returns the oldest L1 block origin from all the L2 blocks that have been added to the channel +func (c *ChannelBuilder) OldestL1Origin() eth.BlockID { + return c.oldestL1Origin +} + +// LatestL2 returns the latest L2 block from all the L2 blocks that have been added to the channel +func (c *ChannelBuilder) LatestL2() eth.BlockID { + return c.latestL2 +} + +// OldestL2 returns the oldest L2 block from all the L2 blocks that have been added to the channel +func (c *ChannelBuilder) OldestL2() eth.BlockID { + return c.oldestL2 +} + // AddBlock adds a block to the channel compression pipeline. IsFull should be // called afterwards to test whether the channel is full. If full, a new channel // must be started. @@ -172,6 +193,18 @@ func (c *ChannelBuilder) AddBlock(block *types.Block) (*derive.L1BlockInfo, erro Number: l1info.Number, } } + if c.oldestL1Origin.Number == 0 || l1info.Number < c.latestL1Origin.Number { + c.oldestL1Origin = eth.BlockID{ + Hash: l1info.BlockHash, + Number: l1info.Number, + } + } + if block.NumberU64() > c.latestL2.Number { + c.latestL2 = eth.ToBlockID(block) + } + if c.oldestL2.Number == 0 || block.NumberU64() < c.oldestL2.Number { + c.oldestL2 = eth.ToBlockID(block) + } if err = c.co.FullErr(); err != nil { c.setFullErr(err) diff --git a/op-batcher/batcher/channel_builder_test.go b/op-batcher/batcher/channel_builder_test.go index 8d1cbd8219ee..828c098925e3 100644 --- a/op-batcher/batcher/channel_builder_test.go +++ b/op-batcher/batcher/channel_builder_test.go @@ -712,6 +712,72 @@ func TestChannelBuilder_LatestL1Origin(t *testing.T) { require.Equal(t, uint64(2), cb.LatestL1Origin().Number) } +func TestChannelBuilder_OldestL1Origin(t *testing.T) { + cb, err := NewChannelBuilder(defaultTestChannelConfig(), defaultTestRollupConfig, latestL1BlockOrigin) + require.NoError(t, err) + require.Equal(t, eth.BlockID{}, cb.OldestL1Origin()) + + _, err = cb.AddBlock(newMiniL2BlockWithNumberParentAndL1Information(0, big.NewInt(1), common.Hash{}, 1, 100)) + require.NoError(t, err) + require.Equal(t, uint64(1), cb.OldestL1Origin().Number) + + _, err = cb.AddBlock(newMiniL2BlockWithNumberParentAndL1Information(0, big.NewInt(2), common.Hash{}, 1, 100)) + require.NoError(t, err) + require.Equal(t, uint64(1), cb.OldestL1Origin().Number) + + _, err = cb.AddBlock(newMiniL2BlockWithNumberParentAndL1Information(0, big.NewInt(3), common.Hash{}, 2, 110)) + require.NoError(t, err) + require.Equal(t, uint64(1), cb.OldestL1Origin().Number) + + _, err = cb.AddBlock(newMiniL2BlockWithNumberParentAndL1Information(0, big.NewInt(3), common.Hash{}, 1, 110)) + require.NoError(t, err) + require.Equal(t, uint64(1), cb.OldestL1Origin().Number) +} + +func TestChannelBuilder_LatestL2(t *testing.T) { + cb, err := NewChannelBuilder(defaultTestChannelConfig(), defaultTestRollupConfig, latestL1BlockOrigin) + require.NoError(t, err) + require.Equal(t, eth.BlockID{}, cb.LatestL2()) + + _, err = cb.AddBlock(newMiniL2BlockWithNumberParentAndL1Information(0, big.NewInt(1), common.Hash{}, 1, 100)) + require.NoError(t, err) + require.Equal(t, uint64(1), cb.LatestL2().Number) + + _, err = cb.AddBlock(newMiniL2BlockWithNumberParentAndL1Information(0, big.NewInt(2), common.Hash{}, 1, 100)) + require.NoError(t, err) + require.Equal(t, uint64(2), cb.LatestL2().Number) + + _, err = cb.AddBlock(newMiniL2BlockWithNumberParentAndL1Information(0, big.NewInt(3), common.Hash{}, 2, 110)) + require.NoError(t, err) + require.Equal(t, uint64(3), cb.LatestL2().Number) + + _, err = cb.AddBlock(newMiniL2BlockWithNumberParentAndL1Information(0, big.NewInt(3), common.Hash{}, 1, 110)) + require.NoError(t, err) + require.Equal(t, uint64(3), cb.LatestL2().Number) +} + +func TestChannelBuilder_OldestL2(t *testing.T) { + cb, err := NewChannelBuilder(defaultTestChannelConfig(), defaultTestRollupConfig, latestL1BlockOrigin) + require.NoError(t, err) + require.Equal(t, eth.BlockID{}, cb.OldestL2()) + + _, err = cb.AddBlock(newMiniL2BlockWithNumberParentAndL1Information(0, big.NewInt(1), common.Hash{}, 1, 100)) + require.NoError(t, err) + require.Equal(t, uint64(1), cb.OldestL2().Number) + + _, err = cb.AddBlock(newMiniL2BlockWithNumberParentAndL1Information(0, big.NewInt(2), common.Hash{}, 1, 100)) + require.NoError(t, err) + require.Equal(t, uint64(1), cb.OldestL2().Number) + + _, err = cb.AddBlock(newMiniL2BlockWithNumberParentAndL1Information(0, big.NewInt(3), common.Hash{}, 2, 110)) + require.NoError(t, err) + require.Equal(t, uint64(1), cb.OldestL2().Number) + + _, err = cb.AddBlock(newMiniL2BlockWithNumberParentAndL1Information(0, big.NewInt(3), common.Hash{}, 1, 110)) + require.NoError(t, err) + require.Equal(t, uint64(1), cb.OldestL2().Number) +} + func ChannelBuilder_PendingFrames_TotalFrames(t *testing.T, batchType uint) { const tnf = 9 rng := rand.New(rand.NewSource(94572314)) diff --git a/op-batcher/batcher/channel_manager.go b/op-batcher/batcher/channel_manager.go index b6f26d25fe86..82d692b0ca4f 100644 --- a/op-batcher/batcher/channel_manager.go +++ b/op-batcher/batcher/channel_manager.go @@ -320,7 +320,10 @@ func (s *channelManager) outputFrames() error { "num_frames", s.currentChannel.TotalFrames(), "input_bytes", inBytes, "output_bytes", outBytes, + "oldest_l1_origin", s.currentChannel.OldestL1Origin(), "l1_origin", lastClosedL1Origin, + "oldest_l2", s.currentChannel.OldestL2(), + "latest_l2", s.currentChannel.LatestL2(), "full_reason", s.currentChannel.FullErr(), "compr_ratio", comprRatio, "latest_l1_origin", s.l1OriginLastClosedChannel, From 482633768be731462c7aa9b32b8eafb74289ad2e Mon Sep 17 00:00:00 2001 From: Sebastian Stammler Date: Tue, 11 Jun 2024 23:20:27 +0200 Subject: [PATCH 029/141] contracts: Make L2 genesis script configurable (#10764) * contracts: Make L2 genesis script configurable * contracts: Read latest fork from deploy config in L2 genesis script * contracts: add README entry for new L2 genesis script env vars * address review --- .circleci/config.yml | 12 +-- bedrock-devnet/devnet/__init__.py | 11 ++- op-chain-ops/genesis/layer_two.go | 2 +- op-e2e/config/init.go | 5 +- packages/contracts-bedrock/README.md | 12 +++ packages/contracts-bedrock/scripts/Config.sol | 90 +++++++++++++++++++ .../scripts/DeployConfig.s.sol | 51 ++++++++++- .../contracts-bedrock/scripts/L2Genesis.s.sol | 58 ++++++------ .../test/L2/GasPriceOracle.t.sol | 8 +- .../contracts-bedrock/test/L2Genesis.t.sol | 4 +- .../contracts-bedrock/test/setup/Setup.sol | 13 ++- 11 files changed, 207 insertions(+), 59 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index bafc24310b01..de393bf98188 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -243,25 +243,25 @@ jobs: - "packages/contracts-bedrock/tsconfig.tsbuildinfo" - "packages/contracts-bedrock/tsconfig.build.tsbuildinfo" - ".devnet/allocs-l1.json" - - ".devnet/allocs-l2.json" - ".devnet/allocs-l2-delta.json" - ".devnet/allocs-l2-ecotone.json" + - ".devnet/allocs-l2-fjord.json" - ".devnet/addresses.json" - ".devnet-l2oo/allocs-l1.json" - ".devnet-l2oo/addresses.json" - - ".devnet-l2oo/allocs-l2.json" - ".devnet-l2oo/allocs-l2-delta.json" - ".devnet-l2oo/allocs-l2-ecotone.json" + - ".devnet-l2oo/allocs-l2-fjord.json" - ".devnet-plasma/allocs-l1.json" - ".devnet-plasma/addresses.json" - - ".devnet-plasma/allocs-l2.json" - ".devnet-plasma/allocs-l2-delta.json" - ".devnet-plasma/allocs-l2-ecotone.json" + - ".devnet-plasma/allocs-l2-fjord.json" - ".devnet-plasma-generic/allocs-l1.json" - ".devnet-plasma-generic/addresses.json" - - ".devnet-plasma-generic/allocs-l2.json" - ".devnet-plasma-generic/allocs-l2-delta.json" - ".devnet-plasma-generic/allocs-l2-ecotone.json" + - ".devnet-plasma-generic/allocs-l2-fjord.json" - "packages/contracts-bedrock/deploy-config/devnetL1.json" - "packages/contracts-bedrock/deployments/devnetL1" - notify-failures-on-develop @@ -928,9 +928,9 @@ jobs: name: Load devnet-allocs command: | mkdir -p .devnet - cp /tmp/workspace/.devnet<>/allocs-l2.json .devnet/allocs-l2.json cp /tmp/workspace/.devnet<>/allocs-l2-delta.json .devnet/allocs-l2-delta.json cp /tmp/workspace/.devnet<>/allocs-l2-ecotone.json .devnet/allocs-l2-ecotone.json + cp /tmp/workspace/.devnet<>/allocs-l2-fjord.json .devnet/allocs-l2-fjord.json cp /tmp/workspace/.devnet<>/allocs-l1.json .devnet/allocs-l1.json cp /tmp/workspace/.devnet<>/addresses.json .devnet/addresses.json cp /tmp/workspace/packages/contracts-bedrock/deploy-config/devnetL1.json packages/contracts-bedrock/deploy-config/devnetL1.json @@ -1113,9 +1113,9 @@ jobs: - persist_to_workspace: root: . paths: - - ".devnet/allocs-l2.json" - ".devnet/allocs-l2-delta.json" - ".devnet/allocs-l2-ecotone.json" + - ".devnet/allocs-l2-fjord.json" - ".devnet/allocs-l1.json" - ".devnet/addresses.json" - "packages/contracts-bedrock/deploy-config/devnetL1.json" diff --git a/bedrock-devnet/devnet/__init__.py b/bedrock-devnet/devnet/__init__.py index f034efee128e..182172d3412d 100644 --- a/bedrock-devnet/devnet/__init__.py +++ b/bedrock-devnet/devnet/__init__.py @@ -26,6 +26,9 @@ log = logging.getLogger() +# Global constants +FORKS = ["delta", "ecotone", "fjord"] + # Global environment variables DEVNET_NO_BUILD = os.getenv('DEVNET_NO_BUILD') == "true" DEVNET_L2OO = os.getenv('DEVNET_L2OO') == "true" @@ -171,9 +174,9 @@ def devnet_l2_allocs(paths): # For the previous forks, and the latest fork (default, thus empty prefix), # move the forge-dumps into place as .devnet allocs. - for suffix in ["-delta", "-ecotone", ""]: - input_path = pjoin(paths.contracts_bedrock_dir, f"state-dump-901{suffix}.json") - output_path = pjoin(paths.devnet_dir, f'allocs-l2{suffix}.json') + for fork in FORKS: + input_path = pjoin(paths.contracts_bedrock_dir, f"state-dump-901-{fork}.json") + output_path = pjoin(paths.devnet_dir, f'allocs-l2-{fork}.json') shutil.move(src=input_path, dst=output_path) log.info("Generated L2 allocs: "+output_path) @@ -218,7 +221,7 @@ def devnet_deploy(paths): log.info('L2 genesis and rollup configs already generated.') else: log.info('Generating L2 genesis and rollup configs.') - l2_allocs_path = pjoin(paths.devnet_dir, 'allocs-l2.json') + l2_allocs_path = pjoin(paths.devnet_dir, f'allocs-l2-{FORKS[-1]}.json') if os.path.exists(l2_allocs_path) == False or DEVNET_L2OO == True: # Also regenerate if L2OO. # The L2OO flag may affect the L1 deployments addresses, which may affect the L2 genesis. diff --git a/op-chain-ops/genesis/layer_two.go b/op-chain-ops/genesis/layer_two.go index a534957243bd..6cd0bbe7d27f 100644 --- a/op-chain-ops/genesis/layer_two.go +++ b/op-chain-ops/genesis/layer_two.go @@ -24,7 +24,7 @@ type L2AllocsMode string const ( L2AllocsDelta L2AllocsMode = "delta" L2AllocsEcotone L2AllocsMode = "ecotone" - L2AllocsFjord L2AllocsMode = "" // the default in solidity scripting / testing + L2AllocsFjord L2AllocsMode = "fjord" ) var ( diff --git a/op-e2e/config/init.go b/op-e2e/config/init.go index 21034c04a7d4..d53fd0697124 100644 --- a/op-e2e/config/init.go +++ b/op-e2e/config/init.go @@ -113,10 +113,7 @@ func init() { } l2Allocs = make(map[genesis.L2AllocsMode]*genesis.ForgeAllocs) mustL2Allocs := func(mode genesis.L2AllocsMode) { - name := "allocs-l2" - if mode != "" { - name += "-" + string(mode) - } + name := "allocs-l2-" + string(mode) allocs, err := genesis.LoadForgeAllocs(filepath.Join(l2AllocsDir, name+".json")) if err != nil { panic(err) diff --git a/packages/contracts-bedrock/README.md b/packages/contracts-bedrock/README.md index f012c447910d..76f9d4b96f8e 100644 --- a/packages/contracts-bedrock/README.md +++ b/packages/contracts-bedrock/README.md @@ -319,6 +319,18 @@ STATE_DUMP_PATH= \ Create or modify a file `.json` inside of the [`deploy-config`](./deploy-config/) folder. Use the env var `DEPLOY_CONFIG_PATH` to use a particular deploy config file at runtime. +The script will read the latest active fork from the deploy config and the L2 genesis allocs generated will be +compatible with this fork. The automatically detected fork can be overwritten by setting the environment variable +`FORK` either to the lower-case fork name (currently `delta`, `ecotone`, or `fjord`) or to `latest`, which will select +the latest fork available (currently `fjord`). + +By default, the script will dump the L2 genesis allocs of the detected or selected fork only, to the file at `STATE_DUMP_PATH`. +The optional environment variable `OUTPUT_MODE` allows to modify this behavior by setting it to one of the following values: +* `latest` (default) - only dump the selected fork's allocs. +* `all` - also dump all intermediary fork's allocs. This only works if `STATE_DUMP_PATH` is _not_ set. In this case, all allocs + will be written to files `/state-dump-.json`. Another path cannot currently be specified for this use case. +* `none` - won't dump any allocs. Only makes sense for internal test usage. + #### Custom Gas Token The Custom Gas Token feature is a Beta feature of the MIT licensed OP Stack. diff --git a/packages/contracts-bedrock/scripts/Config.sol b/packages/contracts-bedrock/scripts/Config.sol index 1a7692d498ff..0bf567b3dd1c 100644 --- a/packages/contracts-bedrock/scripts/Config.sol +++ b/packages/contracts-bedrock/scripts/Config.sol @@ -3,6 +3,56 @@ pragma solidity ^0.8.0; import { Vm, VmSafe } from "forge-std/Vm.sol"; +/// @notice Enum representing different ways of outputting genesis allocs. +/// @custom:value NONE No output, used in internal tests. +/// @custom:value LATEST Output allocs only for latest fork. +/// @custom:value ALL Output allocs for all intermediary forks. +enum OutputMode { + NONE, + LATEST, + ALL +} + +library OutputModeUtils { + function toString(OutputMode _mode) internal pure returns (string memory) { + if (_mode == OutputMode.NONE) { + return "none"; + } else if (_mode == OutputMode.LATEST) { + return "latest"; + } else if (_mode == OutputMode.ALL) { + return "all"; + } else { + return "unknown"; + } + } +} + +/// @notice Enum of forks available for selection when generating genesis allocs. +enum Fork { + NONE, + DELTA, + ECOTONE, + FJORD +} + +Fork constant LATEST_FORK = Fork.FJORD; + +library ForkUtils { + function toString(Fork _fork) internal pure returns (string memory) { + if (_fork == Fork.NONE) { + return "none"; + } else if (_fork == Fork.DELTA) { + return "delta"; + } else if (_fork == Fork.ECOTONE) { + return "ecotone"; + } else if (_fork == Fork.FJORD) { + return "fjord"; + } else { + return "unknown"; + } + } +} + /// @title Config /// @notice Contains all env var based config. Add any new env var parsing to this file /// to ensure that all config is in a single place. @@ -67,4 +117,44 @@ library Config { function drippieOwnerPrivateKey() internal view returns (uint256 _env) { _env = vm.envUint("DRIPPIE_OWNER_PRIVATE_KEY"); } + + /// @notice Returns the OutputMode for genesis allocs generation. + /// It reads the mode from the environment variable OUTPUT_MODE. + /// If it is unset, OutputMode.ALL is returned. + function outputMode() internal view returns (OutputMode) { + string memory modeStr = vm.envOr("OUTPUT_MODE", string("latest")); + bytes32 modeHash = keccak256(bytes(modeStr)); + if (modeHash == keccak256(bytes("none"))) { + return OutputMode.NONE; + } else if (modeHash == keccak256(bytes("latest"))) { + return OutputMode.LATEST; + } else if (modeHash == keccak256(bytes("all"))) { + return OutputMode.ALL; + } else { + revert(string.concat("Config: unknown output mode: ", modeStr)); + } + } + + /// @notice Returns the latest fork to use for genesis allocs generation. + /// It reads the fork from the environment variable FORK. If it is + /// unset, NONE is returned. + /// If set to the special value "latest", the latest fork is returned. + function fork() internal view returns (Fork) { + string memory forkStr = vm.envOr("FORK", string("")); + if (bytes(forkStr).length == 0) { + return Fork.NONE; + } + bytes32 forkHash = keccak256(bytes(forkStr)); + if (forkHash == keccak256(bytes("latest"))) { + return LATEST_FORK; + } else if (forkHash == keccak256(bytes("delta"))) { + return Fork.DELTA; + } else if (forkHash == keccak256(bytes("ecotone"))) { + return Fork.ECOTONE; + } else if (forkHash == keccak256(bytes("fjord"))) { + return Fork.FJORD; + } else { + revert(string.concat("Config: unknown fork: ", forkStr)); + } + } } diff --git a/packages/contracts-bedrock/scripts/DeployConfig.s.sol b/packages/contracts-bedrock/scripts/DeployConfig.s.sol index 38f58688acaf..25869e97f080 100644 --- a/packages/contracts-bedrock/scripts/DeployConfig.s.sol +++ b/packages/contracts-bedrock/scripts/DeployConfig.s.sol @@ -7,12 +7,19 @@ import { stdJson } from "forge-std/StdJson.sol"; import { Executables } from "scripts/Executables.sol"; import { Process } from "scripts/libraries/Process.sol"; import { Chains } from "scripts/Chains.sol"; +import { Config, Fork, ForkUtils } from "scripts/Config.sol"; /// @title DeployConfig /// @notice Represents the configuration required to deploy the system. It is expected /// to read the file from JSON. A future improvement would be to have fallback /// values if they are not defined in the JSON themselves. contract DeployConfig is Script { + using stdJson for string; + using ForkUtils for Fork; + + /// @notice Represents an unset offset value, as opposed to 0, which denotes no-offset. + uint256 constant NULL_OFFSET = type(uint256).max; + string internal _json; address public finalSystemOwner; @@ -20,6 +27,9 @@ contract DeployConfig is Script { uint256 public l1ChainID; uint256 public l2ChainID; uint256 public l2BlockTime; + uint256 public l2GenesisDeltaTimeOffset; + uint256 public l2GenesisEcotoneTimeOffset; + uint256 public l2GenesisFjordTimeOffset; uint256 public maxSequencerDrift; uint256 public sequencerWindowSize; uint256 public channelTimeout; @@ -94,6 +104,11 @@ contract DeployConfig is Script { l1ChainID = stdJson.readUint(_json, "$.l1ChainID"); l2ChainID = stdJson.readUint(_json, "$.l2ChainID"); l2BlockTime = stdJson.readUint(_json, "$.l2BlockTime"); + + l2GenesisDeltaTimeOffset = _readOr(_json, "$.l2GenesisDeltaTimeOffset", NULL_OFFSET); + l2GenesisEcotoneTimeOffset = _readOr(_json, "$.l2GenesisEcotoneTimeOffset", NULL_OFFSET); + l2GenesisFjordTimeOffset = _readOr(_json, "$.l2GenesisFjordTimeOffset", NULL_OFFSET); + maxSequencerDrift = stdJson.readUint(_json, "$.maxSequencerDrift"); sequencerWindowSize = stdJson.readUint(_json, "$.sequencerWindowSize"); channelTimeout = stdJson.readUint(_json, "$.channelTimeout"); @@ -161,6 +176,18 @@ contract DeployConfig is Script { useInterop = _readOr(_json, "$.useInterop", false); } + function fork() public view returns (Fork fork_) { + // let env var take precedence + fork_ = Config.fork(); + if (fork_ == Fork.NONE) { + // Will revert if no deploy config can be found either. + fork_ = latestGenesisFork(); + console.log("DeployConfig: using deploy config fork: %s", fork_.toString()); + } else { + console.log("DeployConfig: using env var fork: %s", fork_.toString()); + } + } + function l1StartingBlockTag() public returns (bytes32) { try vm.parseJsonBytes32(_json, "$.l1StartingBlockTag") returns (bytes32 tag) { return tag; @@ -215,6 +242,17 @@ contract DeployConfig is Script { customGasTokenAddress = _token; } + function latestGenesisFork() internal view returns (Fork) { + if (l2GenesisFjordTimeOffset == 0) { + return Fork.FJORD; + } else if (l2GenesisEcotoneTimeOffset == 0) { + return Fork.ECOTONE; + } else if (l2GenesisDeltaTimeOffset == 0) { + return Fork.DELTA; + } + revert("DeployConfig: no supported fork active at genesis"); + } + function _getBlockByTag(string memory _tag) internal returns (bytes32) { string[] memory cmd = new string[](3); cmd[0] = Executables.bash; @@ -225,15 +263,20 @@ contract DeployConfig is Script { } function _readOr(string memory json, string memory key, bool defaultValue) internal view returns (bool) { - return vm.keyExists(json, key) ? stdJson.readBool(json, key) : defaultValue; + return vm.keyExistsJson(json, key) ? json.readBool(key) : defaultValue; } function _readOr(string memory json, string memory key, uint256 defaultValue) internal view returns (uint256) { - return vm.keyExists(json, key) ? stdJson.readUint(json, key) : defaultValue; + return (vm.keyExistsJson(json, key) && !_isNull(json, key)) ? json.readUint(key) : defaultValue; } function _readOr(string memory json, string memory key, address defaultValue) internal view returns (address) { - return vm.keyExists(json, key) ? stdJson.readAddress(json, key) : defaultValue; + return vm.keyExistsJson(json, key) ? json.readAddress(key) : defaultValue; + } + + function _isNull(string memory json, string memory key) internal pure returns (bool) { + string memory value = json.readString(key); + return (keccak256(bytes(value)) == keccak256(bytes("null"))); } function _readOr( @@ -245,6 +288,6 @@ contract DeployConfig is Script { view returns (string memory) { - return vm.keyExists(json, key) ? stdJson.readString(json, key) : defaultValue; + return vm.keyExists(json, key) ? json.readString(key) : defaultValue; } } diff --git a/packages/contracts-bedrock/scripts/L2Genesis.s.sol b/packages/contracts-bedrock/scripts/L2Genesis.s.sol index cca52a3c272c..44607c534650 100644 --- a/packages/contracts-bedrock/scripts/L2Genesis.s.sol +++ b/packages/contracts-bedrock/scripts/L2Genesis.s.sol @@ -5,7 +5,7 @@ import { Script } from "forge-std/Script.sol"; import { console2 as console } from "forge-std/console2.sol"; import { Deployer } from "scripts/Deployer.sol"; -import { Config } from "scripts/Config.sol"; +import { Config, OutputMode, OutputModeUtils, Fork, ForkUtils, LATEST_FORK } from "scripts/Config.sol"; import { Artifacts } from "scripts/Artifacts.s.sol"; import { DeployConfig } from "scripts/DeployConfig.s.sol"; import { Predeploys } from "src/libraries/Predeploys.sol"; @@ -37,20 +37,6 @@ struct L1Dependencies { address payable l1ERC721BridgeProxy; } -/// @notice Enum representing different ways of outputting genesis allocs. -/// @custom:value DEFAULT_LATEST Represents only latest L2 allocs, written to output path. -/// @custom:value LOCAL_LATEST Represents latest L2 allocs, not output anywhere, but kept in-process. -/// @custom:value LOCAL_ECOTONE Represents Ecotone-upgrade L2 allocs, not output anywhere, but kept in-process. -/// @custom:value LOCAL_DELTA Represents Delta-upgrade L2 allocs, not output anywhere, but kept in-process. -/// @custom:value OUTPUT_ALL Represents creation of one L2 allocs file for every upgrade. -enum OutputMode { - DEFAULT_LATEST, - LOCAL_LATEST, - LOCAL_ECOTONE, - LOCAL_DELTA, - OUTPUT_ALL -} - /// @title L2Genesis /// @notice Generates the genesis state for the L2 network. /// The following safety invariants are used when setting state: @@ -59,6 +45,9 @@ enum OutputMode { /// 2. A contract must be deployed using the `new` syntax if there are immutables in the code. /// Any other side effects from the init code besides setting the immutables must be cleaned up afterwards. contract L2Genesis is Deployer { + using ForkUtils for Fork; + using OutputModeUtils for OutputMode; + uint256 public constant PRECOMPILE_COUNT = 256; uint80 internal constant DEV_ACCOUNT_FUND_AMT = 10_000 ether; @@ -120,7 +109,7 @@ contract L2Genesis is Deployer { /// Sets the precompiles, proxies, and the implementation accounts to be `vm.dumpState` /// to generate a L2 genesis alloc. function runWithStateDump() public { - runWithOptions(OutputMode.DEFAULT_LATEST, artifactDependencies()); + runWithOptions(Config.outputMode(), cfg.fork(), artifactDependencies()); } /// @notice Alias for `runWithStateDump` so that no `--sig` needs to be specified. @@ -130,11 +119,18 @@ contract L2Genesis is Deployer { /// @notice This is used by op-e2e to have a version of the L2 allocs for each upgrade. function runWithAllUpgrades() public { - runWithOptions(OutputMode.OUTPUT_ALL, artifactDependencies()); + runWithOptions(OutputMode.ALL, LATEST_FORK, artifactDependencies()); + } + + /// @notice This is used by foundry tests to enable the latest fork with the + /// given L1 dependencies. + function runWithLatestLocal(L1Dependencies memory _l1Dependencies) public { + runWithOptions(OutputMode.NONE, LATEST_FORK, _l1Dependencies); } /// @notice Build the L2 genesis. - function runWithOptions(OutputMode _mode, L1Dependencies memory _l1Dependencies) public { + function runWithOptions(OutputMode _mode, Fork _fork, L1Dependencies memory _l1Dependencies) public { + console.log("L2Genesis: outputMode: %s, fork: %s", _mode.toString(), _fork.toString()); vm.startPrank(deployer); vm.chainId(cfg.l2ChainID()); @@ -147,28 +143,30 @@ contract L2Genesis is Deployer { } vm.stopPrank(); - // Genesis is "complete" at this point, but some hardfork activation steps remain. - // Depending on the "Output Mode" we perform the activations and output the necessary state dumps. - if (_mode == OutputMode.LOCAL_DELTA) { + if (writeForkGenesisAllocs(_fork, Fork.DELTA, _mode)) { return; } - if (_mode == OutputMode.OUTPUT_ALL) { - writeGenesisAllocs(Config.stateDumpPath("-delta")); - } activateEcotone(); - if (_mode == OutputMode.LOCAL_ECOTONE) { + if (writeForkGenesisAllocs(_fork, Fork.ECOTONE, _mode)) { return; } - if (_mode == OutputMode.OUTPUT_ALL) { - writeGenesisAllocs(Config.stateDumpPath("-ecotone")); - } activateFjord(); - if (_mode == OutputMode.OUTPUT_ALL || _mode == OutputMode.DEFAULT_LATEST) { - writeGenesisAllocs(Config.stateDumpPath("")); + if (writeForkGenesisAllocs(_fork, Fork.FJORD, _mode)) { + return; + } + } + + function writeForkGenesisAllocs(Fork _latest, Fork _current, OutputMode _mode) internal returns (bool isLatest_) { + if (_mode == OutputMode.ALL || _latest == _current && _mode == OutputMode.LATEST) { + string memory suffix = string.concat("-", _current.toString()); + writeGenesisAllocs(Config.stateDumpPath(suffix)); + } + if (_latest == _current) { + isLatest_ = true; } } diff --git a/packages/contracts-bedrock/test/L2/GasPriceOracle.t.sol b/packages/contracts-bedrock/test/L2/GasPriceOracle.t.sol index 3b04804fb0e2..21f7b98f666b 100644 --- a/packages/contracts-bedrock/test/L2/GasPriceOracle.t.sol +++ b/packages/contracts-bedrock/test/L2/GasPriceOracle.t.sol @@ -3,7 +3,7 @@ pragma solidity 0.8.15; // Testing utilities import { CommonTest } from "test/setup/CommonTest.sol"; -import { OutputMode } from "scripts/L2Genesis.s.sol"; +import { Fork } from "scripts/Config.sol"; // Libraries import { Encoding } from "src/libraries/Encoding.sol"; @@ -39,7 +39,7 @@ contract GasPriceOracleBedrock_Test is GasPriceOracle_Test { /// @dev Sets up the test suite. function setUp() public virtual override { // The gasPriceOracle tests rely on an L2 genesis that is not past Ecotone. - l2OutputMode = OutputMode.LOCAL_DELTA; + l2Fork = Fork.DELTA; super.setUp(); assertEq(gasPriceOracle.isEcotone(), false); @@ -120,7 +120,7 @@ contract GasPriceOracleBedrock_Test is GasPriceOracle_Test { contract GasPriceOracleEcotone_Test is GasPriceOracle_Test { /// @dev Sets up the test suite. function setUp() public virtual override { - l2OutputMode = OutputMode.LOCAL_ECOTONE; // activate ecotone + l2Fork = Fork.ECOTONE; super.setUp(); assertEq(gasPriceOracle.isEcotone(), true); @@ -213,7 +213,7 @@ contract GasPriceOracleEcotone_Test is GasPriceOracle_Test { contract GasPriceOracleFjordActive_Test is GasPriceOracle_Test { /// @dev Sets up the test suite. function setUp() public virtual override { - l2OutputMode = OutputMode.LOCAL_LATEST; // activate fjord + l2Fork = Fork.FJORD; super.setUp(); bytes memory calldataPacked = Encoding.encodeSetL1BlockValuesEcotone( diff --git a/packages/contracts-bedrock/test/L2Genesis.t.sol b/packages/contracts-bedrock/test/L2Genesis.t.sol index f01a3818b880..f851f62d634d 100644 --- a/packages/contracts-bedrock/test/L2Genesis.t.sol +++ b/packages/contracts-bedrock/test/L2Genesis.t.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.15; import { Test } from "forge-std/Test.sol"; -import { L2Genesis, OutputMode, L1Dependencies } from "scripts/L2Genesis.s.sol"; +import { L2Genesis, L1Dependencies } from "scripts/L2Genesis.s.sol"; import { Predeploys } from "src/libraries/Predeploys.sol"; import { Constants } from "src/libraries/Constants.sol"; import { Process } from "scripts/libraries/Process.sol"; @@ -181,7 +181,7 @@ contract L2GenesisTest is Test { /// @notice Tests the number of accounts in the genesis setup function _test_allocs_size(string memory _path) internal { genesis.cfg().setFundDevAccounts(false); - genesis.runWithOptions(OutputMode.LOCAL_LATEST, _dummyL1Deps()); + genesis.runWithLatestLocal(_dummyL1Deps()); genesis.writeGenesisAllocs(_path); uint256 expected = 0; diff --git a/packages/contracts-bedrock/test/setup/Setup.sol b/packages/contracts-bedrock/test/setup/Setup.sol index 42b235dc8a77..3193ce80e6e6 100644 --- a/packages/contracts-bedrock/test/setup/Setup.sol +++ b/packages/contracts-bedrock/test/setup/Setup.sol @@ -25,8 +25,10 @@ import { DelayedWETH } from "src/dispute/weth/DelayedWETH.sol"; import { AnchorStateRegistry } from "src/dispute/AnchorStateRegistry.sol"; import { L1CrossDomainMessenger } from "src/L1/L1CrossDomainMessenger.sol"; import { DeployConfig } from "scripts/DeployConfig.s.sol"; +import { Fork, LATEST_FORK } from "scripts/Config.sol"; import { Deploy } from "scripts/Deploy.s.sol"; -import { L2Genesis, L1Dependencies, OutputMode } from "scripts/L2Genesis.s.sol"; +import { L2Genesis, L1Dependencies } from "scripts/L2Genesis.s.sol"; +import { OutputMode, Fork, ForkUtils } from "scripts/Config.sol"; import { L2OutputOracle } from "src/L1/L2OutputOracle.sol"; import { ProtocolVersions } from "src/L1/ProtocolVersions.sol"; import { SystemConfig } from "src/L1/SystemConfig.sol"; @@ -46,6 +48,8 @@ import { WETH } from "src/L2/WETH.sol"; /// up behind proxies. In the future we will migrate to importing the genesis JSON /// file that is created to set up the L2 contracts instead of setting them up manually. contract Setup { + using ForkUtils for Fork; + /// @notice The address of the foundry Vm contract. Vm private constant vm = Vm(0x7109709ECfa91a80626fF3989D68f67F5b1DD12D); @@ -57,7 +61,7 @@ contract Setup { L2Genesis(address(uint160(uint256(keccak256(abi.encode("optimism.l2genesis")))))); // @notice Allows users of Setup to override what L2 genesis is being created. - OutputMode l2OutputMode = OutputMode.LOCAL_LATEST; + Fork l2Fork = LATEST_FORK; OptimismPortal optimismPortal; OptimismPortal2 optimismPortal2; @@ -175,9 +179,10 @@ contract Setup { /// @dev Sets up the L2 contracts. Depends on `L1()` being called first. function L2() public { - console.log("Setup: creating L2 genesis, with output mode %d", uint256(l2OutputMode)); + console.log("Setup: creating L2 genesis with fork %s", l2Fork.toString()); l2Genesis.runWithOptions( - l2OutputMode, + OutputMode.NONE, + l2Fork, L1Dependencies({ l1CrossDomainMessengerProxy: payable(address(l1CrossDomainMessenger)), l1StandardBridgeProxy: payable(address(l1StandardBridge)), From 8d9287bccc37a874f49ea84d07f9380b7ba72af0 Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Wed, 12 Jun 2024 08:20:10 -0400 Subject: [PATCH 030/141] op-challenger: Deduplicate executor (#10785) * challenger: Create generic vm executor and use for asterisc * challenger: Move executor utils to vm package * challenger: Switch cannon to use common vm executor. * challenger: Use vm.Config to encapsulate Cannon config items. * challenger: Rename to include Path * challenger: Use vm.Config to encapsulate Asterisc config items. * challenger: Remove unused interface * challenger: Reduce amount of config passed to cannon/asterisc trace providers * challenger: Remove Config from names * challenger: Remove replaced cannon metrics --- op-challenger/cmd/main_test.go | 42 ++-- op-challenger/config/config.go | 86 +++---- op-challenger/config/config_test.go | 88 +++---- op-challenger/flags/flags.go | 73 +++--- op-challenger/game/fault/register.go | 4 +- .../game/fault/trace/asterisc/executor.go | 127 ---------- .../game/fault/trace/asterisc/provider.go | 28 +-- .../fault/trace/asterisc/provider_test.go | 9 +- .../game/fault/trace/cannon/executor.go | 127 ---------- .../game/fault/trace/cannon/executor_test.go | 227 ------------------ .../game/fault/trace/cannon/provider.go | 21 +- .../game/fault/trace/cannon/provider_test.go | 3 +- .../fault/trace/outputs/output_asterisc.go | 4 +- .../game/fault/trace/outputs/output_cannon.go | 4 +- op-challenger/game/fault/trace/vm/executor.go | 126 ++++++++++ .../trace/{asterisc => vm}/executor_test.go | 81 ++++--- .../{utils/executor.go => vm/prestates.go} | 8 +- op-challenger/metrics/metrics.go | 31 +-- op-challenger/metrics/noop.go | 8 +- op-e2e/e2eutils/challenger/helper.go | 18 +- .../disputegame/output_cannon_helper.go | 2 +- op-e2e/faultproofs/precompile_test.go | 4 +- 22 files changed, 382 insertions(+), 739 deletions(-) delete mode 100644 op-challenger/game/fault/trace/asterisc/executor.go delete mode 100644 op-challenger/game/fault/trace/cannon/executor.go delete mode 100644 op-challenger/game/fault/trace/cannon/executor_test.go create mode 100644 op-challenger/game/fault/trace/vm/executor.go rename op-challenger/game/fault/trace/{asterisc => vm}/executor_test.go (60%) rename op-challenger/game/fault/trace/{utils/executor.go => vm/prestates.go} (93%) diff --git a/op-challenger/cmd/main_test.go b/op-challenger/cmd/main_test.go index 7e77f19408e8..e6234b063b34 100644 --- a/op-challenger/cmd/main_test.go +++ b/op-challenger/cmd/main_test.go @@ -277,7 +277,7 @@ func TestAsteriscRequiredArgs(t *testing.T) { t.Run("Valid", func(t *testing.T) { cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--asterisc-bin", "--asterisc-bin=./asterisc")) - require.Equal(t, "./asterisc", cfg.AsteriscBin) + require.Equal(t, "./asterisc", cfg.Asterisc.VmBin) }) }) @@ -292,7 +292,7 @@ func TestAsteriscRequiredArgs(t *testing.T) { t.Run("Valid", func(t *testing.T) { cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--asterisc-server", "--asterisc-server=./op-program")) - require.Equal(t, "./op-program", cfg.AsteriscServer) + require.Equal(t, "./op-program", cfg.Asterisc.Server) }) }) @@ -349,12 +349,12 @@ func TestAsteriscRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscSnapshotFreq-%v", traceType), func(t *testing.T) { t.Run("UsesDefault", func(t *testing.T) { cfg := configForArgs(t, addRequiredArgs(traceType)) - require.Equal(t, config.DefaultAsteriscSnapshotFreq, cfg.AsteriscSnapshotFreq) + require.Equal(t, config.DefaultAsteriscSnapshotFreq, cfg.Asterisc.SnapshotFreq) }) t.Run("Valid", func(t *testing.T) { cfg := configForArgs(t, addRequiredArgs(traceType, "--asterisc-snapshot-freq=1234")) - require.Equal(t, uint(1234), cfg.AsteriscSnapshotFreq) + require.Equal(t, uint(1234), cfg.Asterisc.SnapshotFreq) }) t.Run("Invalid", func(t *testing.T) { @@ -366,12 +366,12 @@ func TestAsteriscRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscInfoFreq-%v", traceType), func(t *testing.T) { t.Run("UsesDefault", func(t *testing.T) { cfg := configForArgs(t, addRequiredArgs(traceType)) - require.Equal(t, config.DefaultAsteriscInfoFreq, cfg.AsteriscInfoFreq) + require.Equal(t, config.DefaultAsteriscInfoFreq, cfg.Asterisc.InfoFreq) }) t.Run("Valid", func(t *testing.T) { cfg := configForArgs(t, addRequiredArgs(traceType, "--asterisc-info-freq=1234")) - require.Equal(t, uint(1234), cfg.AsteriscInfoFreq) + require.Equal(t, uint(1234), cfg.Asterisc.InfoFreq) }) t.Run("Invalid", func(t *testing.T) { @@ -432,7 +432,7 @@ func TestAsteriscRequiredArgs(t *testing.T) { delete(args, "--game-factory-address") args["--network"] = "op-sepolia" cfg := configForArgs(t, toArgList(args)) - require.Equal(t, "op-sepolia", cfg.AsteriscNetwork) + require.Equal(t, "op-sepolia", cfg.Asterisc.Network) }) t.Run("MustNotSpecifyNetworkAndAsteriscNetwork", func(t *testing.T) { @@ -442,7 +442,7 @@ func TestAsteriscRequiredArgs(t *testing.T) { t.Run("Valid", func(t *testing.T) { cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--asterisc-network", "--asterisc-network", testNetwork)) - require.Equal(t, testNetwork, cfg.AsteriscNetwork) + require.Equal(t, testNetwork, cfg.Asterisc.Network) }) }) @@ -453,7 +453,7 @@ func TestAsteriscRequiredArgs(t *testing.T) { t.Run("Valid", func(t *testing.T) { cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--asterisc-network", "--asterisc-rollup-config=rollup.json", "--asterisc-l2-genesis=genesis.json")) - require.Equal(t, "rollup.json", cfg.AsteriscRollupConfigPath) + require.Equal(t, "rollup.json", cfg.Asterisc.RollupConfigPath) }) }) @@ -464,7 +464,7 @@ func TestAsteriscRequiredArgs(t *testing.T) { t.Run("Valid", func(t *testing.T) { cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--asterisc-network", "--asterisc-rollup-config=rollup.json", "--asterisc-l2-genesis=genesis.json")) - require.Equal(t, "genesis.json", cfg.AsteriscL2GenesisPath) + require.Equal(t, "genesis.json", cfg.Asterisc.L2GenesisPath) }) }) } @@ -502,7 +502,7 @@ func TestCannonRequiredArgs(t *testing.T) { t.Run("Valid", func(t *testing.T) { cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--cannon-bin", "--cannon-bin=./cannon")) - require.Equal(t, "./cannon", cfg.CannonBin) + require.Equal(t, "./cannon", cfg.Cannon.VmBin) }) }) @@ -517,7 +517,7 @@ func TestCannonRequiredArgs(t *testing.T) { t.Run("Valid", func(t *testing.T) { cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--cannon-server", "--cannon-server=./op-program")) - require.Equal(t, "./op-program", cfg.CannonServer) + require.Equal(t, "./op-program", cfg.Cannon.Server) }) }) @@ -570,12 +570,12 @@ func TestCannonRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestCannonSnapshotFreq-%v", traceType), func(t *testing.T) { t.Run("UsesDefault", func(t *testing.T) { cfg := configForArgs(t, addRequiredArgs(traceType)) - require.Equal(t, config.DefaultCannonSnapshotFreq, cfg.CannonSnapshotFreq) + require.Equal(t, config.DefaultCannonSnapshotFreq, cfg.Cannon.SnapshotFreq) }) t.Run("Valid", func(t *testing.T) { cfg := configForArgs(t, addRequiredArgs(traceType, "--cannon-snapshot-freq=1234")) - require.Equal(t, uint(1234), cfg.CannonSnapshotFreq) + require.Equal(t, uint(1234), cfg.Cannon.SnapshotFreq) }) t.Run("Invalid", func(t *testing.T) { @@ -587,12 +587,12 @@ func TestCannonRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestCannonInfoFreq-%v", traceType), func(t *testing.T) { t.Run("UsesDefault", func(t *testing.T) { cfg := configForArgs(t, addRequiredArgs(traceType)) - require.Equal(t, config.DefaultCannonInfoFreq, cfg.CannonInfoFreq) + require.Equal(t, config.DefaultCannonInfoFreq, cfg.Cannon.InfoFreq) }) t.Run("Valid", func(t *testing.T) { cfg := configForArgs(t, addRequiredArgs(traceType, "--cannon-info-freq=1234")) - require.Equal(t, uint(1234), cfg.CannonInfoFreq) + require.Equal(t, uint(1234), cfg.Cannon.InfoFreq) }) t.Run("Invalid", func(t *testing.T) { @@ -653,7 +653,7 @@ func TestCannonRequiredArgs(t *testing.T) { delete(args, "--game-factory-address") args["--network"] = "op-sepolia" cfg := configForArgs(t, toArgList(args)) - require.Equal(t, "op-sepolia", cfg.CannonNetwork) + require.Equal(t, "op-sepolia", cfg.Cannon.Network) }) t.Run("MustNotSpecifyNetworkAndCannonNetwork", func(t *testing.T) { @@ -663,7 +663,7 @@ func TestCannonRequiredArgs(t *testing.T) { t.Run("Valid", func(t *testing.T) { cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--cannon-network", "--cannon-network", testNetwork)) - require.Equal(t, testNetwork, cfg.CannonNetwork) + require.Equal(t, testNetwork, cfg.Cannon.Network) }) }) @@ -674,7 +674,7 @@ func TestCannonRequiredArgs(t *testing.T) { t.Run("Valid", func(t *testing.T) { cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--cannon-network", "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=genesis.json")) - require.Equal(t, "rollup.json", cfg.CannonRollupConfigPath) + require.Equal(t, "rollup.json", cfg.Cannon.RollupConfigPath) }) }) @@ -685,7 +685,7 @@ func TestCannonRequiredArgs(t *testing.T) { t.Run("Valid", func(t *testing.T) { cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--cannon-network", "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=genesis.json")) - require.Equal(t, "genesis.json", cfg.CannonL2GenesisPath) + require.Equal(t, "genesis.json", cfg.Cannon.L2GenesisPath) }) }) } @@ -729,7 +729,7 @@ func TestGameWindow(t *testing.T) { t.Run("Valid", func(t *testing.T) { cfg := configForArgs(t, addRequiredArgs(config.TraceTypeAlphabet, "--game-window=1m")) - require.Equal(t, time.Duration(time.Minute), cfg.GameWindow) + require.Equal(t, time.Minute, cfg.GameWindow) }) t.Run("ParsesDefault", func(t *testing.T) { diff --git a/op-challenger/config/config.go b/op-challenger/config/config.go index 9586eb54906b..3c6f8c846aff 100644 --- a/op-challenger/config/config.go +++ b/op-challenger/config/config.go @@ -8,12 +8,12 @@ import ( "slices" "time" - "github.com/ethereum/go-ethereum/common" - + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/vm" "github.com/ethereum-optimism/optimism/op-node/chaincfg" opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics" "github.com/ethereum-optimism/optimism/op-service/oppprof" "github.com/ethereum-optimism/optimism/op-service/txmgr" + "github.com/ethereum/go-ethereum/common" ) var ( @@ -129,26 +129,14 @@ type Config struct { L2Rpc string // L2 RPC Url // Specific to the cannon trace provider - CannonBin string // Path to the cannon executable to run when generating trace data - CannonServer string // Path to the op-program executable that provides the pre-image oracle server + Cannon vm.Config CannonAbsolutePreState string // File to load the absolute pre-state for Cannon traces from CannonAbsolutePreStateBaseURL *url.URL // Base URL to retrieve absolute pre-states for Cannon traces from - CannonNetwork string - CannonRollupConfigPath string - CannonL2GenesisPath string - CannonSnapshotFreq uint // Frequency of snapshots to create when executing cannon (in VM instructions) - CannonInfoFreq uint // Frequency of cannon progress log messages (in VM instructions) // Specific to the asterisc trace provider - AsteriscBin string // Path to the asterisc executable to run when generating trace data - AsteriscServer string // Path to the op-program executable that provides the pre-image oracle server + Asterisc vm.Config AsteriscAbsolutePreState string // File to load the absolute pre-state for Asterisc traces from AsteriscAbsolutePreStateBaseURL *url.URL // Base URL to retrieve absolute pre-states for Asterisc traces from - AsteriscNetwork string - AsteriscRollupConfigPath string - AsteriscL2GenesisPath string - AsteriscSnapshotFreq uint // Frequency of snapshots to create when executing asterisc (in VM instructions) - AsteriscInfoFreq uint // Frequency of asterisc progress log messages (in VM instructions) MaxPendingTx uint64 // Maximum number of pending transactions (0 == no limit) @@ -185,11 +173,23 @@ func NewConfig( Datadir: datadir, - CannonSnapshotFreq: DefaultCannonSnapshotFreq, - CannonInfoFreq: DefaultCannonInfoFreq, - AsteriscSnapshotFreq: DefaultAsteriscSnapshotFreq, - AsteriscInfoFreq: DefaultAsteriscInfoFreq, - GameWindow: DefaultGameWindow, + Cannon: vm.Config{ + VmType: TraceTypeCannon.String(), + L1: l1EthRpc, + L1Beacon: l1BeaconApi, + L2: l2EthRpc, + SnapshotFreq: DefaultCannonSnapshotFreq, + InfoFreq: DefaultCannonInfoFreq, + }, + Asterisc: vm.Config{ + VmType: TraceTypeAsterisc.String(), + L1: l1EthRpc, + L1Beacon: l1BeaconApi, + L2: l2EthRpc, + SnapshotFreq: DefaultAsteriscSnapshotFreq, + InfoFreq: DefaultAsteriscInfoFreq, + }, + GameWindow: DefaultGameWindow, } } @@ -223,28 +223,28 @@ func (c Config) Check() error { return ErrMaxConcurrencyZero } if c.TraceTypeEnabled(TraceTypeCannon) || c.TraceTypeEnabled(TraceTypePermissioned) { - if c.CannonBin == "" { + if c.Cannon.VmBin == "" { return ErrMissingCannonBin } - if c.CannonServer == "" { + if c.Cannon.Server == "" { return ErrMissingCannonServer } - if c.CannonNetwork == "" { - if c.CannonRollupConfigPath == "" { + if c.Cannon.Network == "" { + if c.Cannon.RollupConfigPath == "" { return ErrMissingCannonRollupConfig } - if c.CannonL2GenesisPath == "" { + if c.Cannon.L2GenesisPath == "" { return ErrMissingCannonL2Genesis } } else { - if c.CannonRollupConfigPath != "" { + if c.Cannon.RollupConfigPath != "" { return ErrCannonNetworkAndRollupConfig } - if c.CannonL2GenesisPath != "" { + if c.Cannon.L2GenesisPath != "" { return ErrCannonNetworkAndL2Genesis } - if ch := chaincfg.ChainByName(c.CannonNetwork); ch == nil { - return fmt.Errorf("%w: %v", ErrCannonNetworkUnknown, c.CannonNetwork) + if ch := chaincfg.ChainByName(c.Cannon.Network); ch == nil { + return fmt.Errorf("%w: %v", ErrCannonNetworkUnknown, c.Cannon.Network) } } if c.CannonAbsolutePreState == "" && c.CannonAbsolutePreStateBaseURL == nil { @@ -253,36 +253,36 @@ func (c Config) Check() error { if c.CannonAbsolutePreState != "" && c.CannonAbsolutePreStateBaseURL != nil { return ErrCannonAbsolutePreStateAndBaseURL } - if c.CannonSnapshotFreq == 0 { + if c.Cannon.SnapshotFreq == 0 { return ErrMissingCannonSnapshotFreq } - if c.CannonInfoFreq == 0 { + if c.Cannon.InfoFreq == 0 { return ErrMissingCannonInfoFreq } } if c.TraceTypeEnabled(TraceTypeAsterisc) { - if c.AsteriscBin == "" { + if c.Asterisc.VmBin == "" { return ErrMissingAsteriscBin } - if c.AsteriscServer == "" { + if c.Asterisc.Server == "" { return ErrMissingAsteriscServer } - if c.AsteriscNetwork == "" { - if c.AsteriscRollupConfigPath == "" { + if c.Asterisc.Network == "" { + if c.Asterisc.RollupConfigPath == "" { return ErrMissingAsteriscRollupConfig } - if c.AsteriscL2GenesisPath == "" { + if c.Asterisc.L2GenesisPath == "" { return ErrMissingAsteriscL2Genesis } } else { - if c.AsteriscRollupConfigPath != "" { + if c.Asterisc.RollupConfigPath != "" { return ErrAsteriscNetworkAndRollupConfig } - if c.AsteriscL2GenesisPath != "" { + if c.Asterisc.L2GenesisPath != "" { return ErrAsteriscNetworkAndL2Genesis } - if ch := chaincfg.ChainByName(c.AsteriscNetwork); ch == nil { - return fmt.Errorf("%w: %v", ErrAsteriscNetworkUnknown, c.AsteriscNetwork) + if ch := chaincfg.ChainByName(c.Asterisc.Network); ch == nil { + return fmt.Errorf("%w: %v", ErrAsteriscNetworkUnknown, c.Asterisc.Network) } } if c.AsteriscAbsolutePreState == "" && c.AsteriscAbsolutePreStateBaseURL == nil { @@ -291,10 +291,10 @@ func (c Config) Check() error { if c.AsteriscAbsolutePreState != "" && c.AsteriscAbsolutePreStateBaseURL != nil { return ErrAsteriscAbsolutePreStateAndBaseURL } - if c.AsteriscSnapshotFreq == 0 { + if c.Asterisc.SnapshotFreq == 0 { return ErrMissingAsteriscSnapshotFreq } - if c.AsteriscInfoFreq == 0 { + if c.Asterisc.InfoFreq == 0 { return ErrMissingAsteriscInfoFreq } } diff --git a/op-challenger/config/config_test.go b/op-challenger/config/config_test.go index 297bc60b97dc..6cfae373277c 100644 --- a/op-challenger/config/config_test.go +++ b/op-challenger/config/config_test.go @@ -36,17 +36,17 @@ var cannonTraceTypes = []TraceType{TraceTypeCannon, TraceTypePermissioned} var asteriscTraceTypes = []TraceType{TraceTypeAsterisc} func applyValidConfigForCannon(cfg *Config) { - cfg.CannonBin = validCannonBin - cfg.CannonServer = validCannonOpProgramBin + cfg.Cannon.VmBin = validCannonBin + cfg.Cannon.Server = validCannonOpProgramBin cfg.CannonAbsolutePreStateBaseURL = validCannonAbsolutPreStateBaseURL - cfg.CannonNetwork = validCannonNetwork + cfg.Cannon.Network = validCannonNetwork } func applyValidConfigForAsterisc(cfg *Config) { - cfg.AsteriscBin = validAsteriscBin - cfg.AsteriscServer = validAsteriscOpProgramBin + cfg.Asterisc.VmBin = validAsteriscBin + cfg.Asterisc.Server = validAsteriscOpProgramBin cfg.AsteriscAbsolutePreStateBaseURL = validAsteriscAbsolutPreStateBaseURL - cfg.AsteriscNetwork = validAsteriscNetwork + cfg.Asterisc.Network = validAsteriscNetwork } func validConfig(traceType TraceType) Config { @@ -115,13 +115,13 @@ func TestCannonRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestCannonBinRequired-%v", traceType), func(t *testing.T) { config := validConfig(traceType) - config.CannonBin = "" + config.Cannon.VmBin = "" require.ErrorIs(t, config.Check(), ErrMissingCannonBin) }) t.Run(fmt.Sprintf("TestCannonServerRequired-%v", traceType), func(t *testing.T) { config := validConfig(traceType) - config.CannonServer = "" + config.Cannon.Server = "" require.ErrorIs(t, config.Check(), ErrMissingCannonServer) }) @@ -162,7 +162,7 @@ func TestCannonRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestCannonSnapshotFreq-%v", traceType), func(t *testing.T) { t.Run("MustNotBeZero", func(t *testing.T) { cfg := validConfig(traceType) - cfg.CannonSnapshotFreq = 0 + cfg.Cannon.SnapshotFreq = 0 require.ErrorIs(t, cfg.Check(), ErrMissingCannonSnapshotFreq) }) }) @@ -170,46 +170,46 @@ func TestCannonRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestCannonInfoFreq-%v", traceType), func(t *testing.T) { t.Run("MustNotBeZero", func(t *testing.T) { cfg := validConfig(traceType) - cfg.CannonInfoFreq = 0 + cfg.Cannon.InfoFreq = 0 require.ErrorIs(t, cfg.Check(), ErrMissingCannonInfoFreq) }) }) t.Run(fmt.Sprintf("TestCannonNetworkOrRollupConfigRequired-%v", traceType), func(t *testing.T) { cfg := validConfig(traceType) - cfg.CannonNetwork = "" - cfg.CannonRollupConfigPath = "" - cfg.CannonL2GenesisPath = "genesis.json" + cfg.Cannon.Network = "" + cfg.Cannon.RollupConfigPath = "" + cfg.Cannon.L2GenesisPath = "genesis.json" require.ErrorIs(t, cfg.Check(), ErrMissingCannonRollupConfig) }) t.Run(fmt.Sprintf("TestCannonNetworkOrL2GenesisRequired-%v", traceType), func(t *testing.T) { cfg := validConfig(traceType) - cfg.CannonNetwork = "" - cfg.CannonRollupConfigPath = "foo.json" - cfg.CannonL2GenesisPath = "" + cfg.Cannon.Network = "" + cfg.Cannon.RollupConfigPath = "foo.json" + cfg.Cannon.L2GenesisPath = "" require.ErrorIs(t, cfg.Check(), ErrMissingCannonL2Genesis) }) t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndRollup-%v", traceType), func(t *testing.T) { cfg := validConfig(traceType) - cfg.CannonNetwork = validCannonNetwork - cfg.CannonRollupConfigPath = "foo.json" - cfg.CannonL2GenesisPath = "" + cfg.Cannon.Network = validCannonNetwork + cfg.Cannon.RollupConfigPath = "foo.json" + cfg.Cannon.L2GenesisPath = "" require.ErrorIs(t, cfg.Check(), ErrCannonNetworkAndRollupConfig) }) t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndL2Genesis-%v", traceType), func(t *testing.T) { cfg := validConfig(traceType) - cfg.CannonNetwork = validCannonNetwork - cfg.CannonRollupConfigPath = "" - cfg.CannonL2GenesisPath = "foo.json" + cfg.Cannon.Network = validCannonNetwork + cfg.Cannon.RollupConfigPath = "" + cfg.Cannon.L2GenesisPath = "foo.json" require.ErrorIs(t, cfg.Check(), ErrCannonNetworkAndL2Genesis) }) t.Run(fmt.Sprintf("TestNetworkMustBeValid-%v", traceType), func(t *testing.T) { cfg := validConfig(traceType) - cfg.CannonNetwork = "unknown" + cfg.Cannon.Network = "unknown" require.ErrorIs(t, cfg.Check(), ErrCannonNetworkUnknown) }) } @@ -221,13 +221,13 @@ func TestAsteriscRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscBinRequired-%v", traceType), func(t *testing.T) { config := validConfig(traceType) - config.AsteriscBin = "" + config.Asterisc.VmBin = "" require.ErrorIs(t, config.Check(), ErrMissingAsteriscBin) }) t.Run(fmt.Sprintf("TestAsteriscServerRequired-%v", traceType), func(t *testing.T) { config := validConfig(traceType) - config.AsteriscServer = "" + config.Asterisc.Server = "" require.ErrorIs(t, config.Check(), ErrMissingAsteriscServer) }) @@ -268,7 +268,7 @@ func TestAsteriscRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscSnapshotFreq-%v", traceType), func(t *testing.T) { t.Run("MustNotBeZero", func(t *testing.T) { cfg := validConfig(traceType) - cfg.AsteriscSnapshotFreq = 0 + cfg.Asterisc.SnapshotFreq = 0 require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscSnapshotFreq) }) }) @@ -276,46 +276,46 @@ func TestAsteriscRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscInfoFreq-%v", traceType), func(t *testing.T) { t.Run("MustNotBeZero", func(t *testing.T) { cfg := validConfig(traceType) - cfg.AsteriscInfoFreq = 0 + cfg.Asterisc.InfoFreq = 0 require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscInfoFreq) }) }) t.Run(fmt.Sprintf("TestAsteriscNetworkOrRollupConfigRequired-%v", traceType), func(t *testing.T) { cfg := validConfig(traceType) - cfg.AsteriscNetwork = "" - cfg.AsteriscRollupConfigPath = "" - cfg.AsteriscL2GenesisPath = "genesis.json" + cfg.Asterisc.Network = "" + cfg.Asterisc.RollupConfigPath = "" + cfg.Asterisc.L2GenesisPath = "genesis.json" require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscRollupConfig) }) t.Run(fmt.Sprintf("TestAsteriscNetworkOrL2GenesisRequired-%v", traceType), func(t *testing.T) { cfg := validConfig(traceType) - cfg.AsteriscNetwork = "" - cfg.AsteriscRollupConfigPath = "foo.json" - cfg.AsteriscL2GenesisPath = "" + cfg.Asterisc.Network = "" + cfg.Asterisc.RollupConfigPath = "foo.json" + cfg.Asterisc.L2GenesisPath = "" require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscL2Genesis) }) t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndRollup-%v", traceType), func(t *testing.T) { cfg := validConfig(traceType) - cfg.AsteriscNetwork = validAsteriscNetwork - cfg.AsteriscRollupConfigPath = "foo.json" - cfg.AsteriscL2GenesisPath = "" + cfg.Asterisc.Network = validAsteriscNetwork + cfg.Asterisc.RollupConfigPath = "foo.json" + cfg.Asterisc.L2GenesisPath = "" require.ErrorIs(t, cfg.Check(), ErrAsteriscNetworkAndRollupConfig) }) t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndL2Genesis-%v", traceType), func(t *testing.T) { cfg := validConfig(traceType) - cfg.AsteriscNetwork = validAsteriscNetwork - cfg.AsteriscRollupConfigPath = "" - cfg.AsteriscL2GenesisPath = "foo.json" + cfg.Asterisc.Network = validAsteriscNetwork + cfg.Asterisc.RollupConfigPath = "" + cfg.Asterisc.L2GenesisPath = "foo.json" require.ErrorIs(t, cfg.Check(), ErrAsteriscNetworkAndL2Genesis) }) t.Run(fmt.Sprintf("TestNetworkMustBeValid-%v", traceType), func(t *testing.T) { cfg := validConfig(traceType) - cfg.AsteriscNetwork = "unknown" + cfg.Asterisc.Network = "unknown" require.ErrorIs(t, cfg.Check(), ErrAsteriscNetworkUnknown) }) } @@ -404,9 +404,9 @@ func TestRequireConfigForMultipleTraceTypesForCannonAndAsterisc(t *testing.T) { require.NoError(t, cfg.Check()) // Require cannon specific args - cfg.CannonBin = "" + cfg.Cannon.VmBin = "" require.ErrorIs(t, cfg.Check(), ErrMissingCannonBin) - cfg.CannonBin = validCannonBin + cfg.Cannon.VmBin = validCannonBin // Require asterisc specific args cfg.AsteriscAbsolutePreState = "" @@ -415,9 +415,9 @@ func TestRequireConfigForMultipleTraceTypesForCannonAndAsterisc(t *testing.T) { cfg.AsteriscAbsolutePreState = validAsteriscAbsolutPreState // Require cannon specific args - cfg.AsteriscServer = "" + cfg.Asterisc.Server = "" require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscServer) - cfg.AsteriscServer = validAsteriscOpProgramBin + cfg.Asterisc.Server = validAsteriscOpProgramBin // Check final config is valid require.NoError(t, cfg.Check()) diff --git a/op-challenger/flags/flags.go b/op-challenger/flags/flags.go index 5c2c6ea19959..726501ec65ec 100644 --- a/op-challenger/flags/flags.go +++ b/op-challenger/flags/flags.go @@ -7,6 +7,7 @@ import ( "slices" "strings" + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/vm" "github.com/ethereum-optimism/optimism/op-service/flags" "github.com/ethereum-optimism/superchain-registry/superchain" "github.com/ethereum/go-ethereum/common" @@ -496,39 +497,53 @@ func NewConfigFromCLI(ctx *cli.Context, logger log.Logger) (*config.Config, erro if ctx.IsSet(flags.NetworkFlagName) { asteriscNetwork = ctx.String(flags.NetworkFlagName) } + l1EthRpc := ctx.String(L1EthRpcFlag.Name) + l1Beacon := ctx.String(L1BeaconFlag.Name) return &config.Config{ // Required Flags - L1EthRpc: ctx.String(L1EthRpcFlag.Name), - L1Beacon: ctx.String(L1BeaconFlag.Name), - TraceTypes: traceTypes, - GameFactoryAddress: gameFactoryAddress, - GameAllowlist: allowedGames, - GameWindow: ctx.Duration(GameWindowFlag.Name), - MaxConcurrency: maxConcurrency, - L2Rpc: l2Rpc, - MaxPendingTx: ctx.Uint64(MaxPendingTransactionsFlag.Name), - PollInterval: ctx.Duration(HTTPPollInterval.Name), - AdditionalBondClaimants: claimants, - RollupRpc: ctx.String(RollupRpcFlag.Name), - CannonNetwork: cannonNetwork, - CannonRollupConfigPath: ctx.String(CannonRollupConfigFlag.Name), - CannonL2GenesisPath: ctx.String(CannonL2GenesisFlag.Name), - CannonBin: ctx.String(CannonBinFlag.Name), - CannonServer: ctx.String(CannonServerFlag.Name), - CannonAbsolutePreState: ctx.String(CannonPreStateFlag.Name), - CannonAbsolutePreStateBaseURL: cannonPrestatesURL, - Datadir: ctx.String(DatadirFlag.Name), - CannonSnapshotFreq: ctx.Uint(CannonSnapshotFreqFlag.Name), - CannonInfoFreq: ctx.Uint(CannonInfoFreqFlag.Name), - AsteriscNetwork: asteriscNetwork, - AsteriscRollupConfigPath: ctx.String(AsteriscRollupConfigFlag.Name), - AsteriscL2GenesisPath: ctx.String(AsteriscL2GenesisFlag.Name), - AsteriscBin: ctx.String(AsteriscBinFlag.Name), - AsteriscServer: ctx.String(AsteriscServerFlag.Name), + L1EthRpc: l1EthRpc, + L1Beacon: l1Beacon, + TraceTypes: traceTypes, + GameFactoryAddress: gameFactoryAddress, + GameAllowlist: allowedGames, + GameWindow: ctx.Duration(GameWindowFlag.Name), + MaxConcurrency: maxConcurrency, + L2Rpc: l2Rpc, + MaxPendingTx: ctx.Uint64(MaxPendingTransactionsFlag.Name), + PollInterval: ctx.Duration(HTTPPollInterval.Name), + AdditionalBondClaimants: claimants, + RollupRpc: ctx.String(RollupRpcFlag.Name), + Cannon: vm.Config{ + VmType: config.TraceTypeCannon.String(), + L1: l1EthRpc, + L1Beacon: l1Beacon, + L2: l2Rpc, + VmBin: ctx.String(CannonBinFlag.Name), + Server: ctx.String(CannonServerFlag.Name), + Network: cannonNetwork, + RollupConfigPath: ctx.String(CannonRollupConfigFlag.Name), + L2GenesisPath: ctx.String(CannonL2GenesisFlag.Name), + SnapshotFreq: ctx.Uint(CannonSnapshotFreqFlag.Name), + InfoFreq: ctx.Uint(CannonInfoFreqFlag.Name), + }, + CannonAbsolutePreState: ctx.String(CannonPreStateFlag.Name), + CannonAbsolutePreStateBaseURL: cannonPrestatesURL, + Datadir: ctx.String(DatadirFlag.Name), + Asterisc: vm.Config{ + VmType: config.TraceTypeAsterisc.String(), + L1: l1EthRpc, + L1Beacon: l1Beacon, + L2: l2Rpc, + VmBin: ctx.String(AsteriscBinFlag.Name), + Server: ctx.String(AsteriscServerFlag.Name), + Network: asteriscNetwork, + RollupConfigPath: ctx.String(AsteriscRollupConfigFlag.Name), + L2GenesisPath: ctx.String(AsteriscL2GenesisFlag.Name), + SnapshotFreq: ctx.Uint(AsteriscSnapshotFreqFlag.Name), + InfoFreq: ctx.Uint(AsteriscInfoFreqFlag.Name), + }, AsteriscAbsolutePreState: ctx.String(AsteriscPreStateFlag.Name), AsteriscAbsolutePreStateBaseURL: asteriscPreStatesURL, - AsteriscSnapshotFreq: ctx.Uint(AsteriscSnapshotFreqFlag.Name), - AsteriscInfoFreq: ctx.Uint(AsteriscInfoFreqFlag.Name), TxMgrConfig: txMgrConfig, MetricsConfig: metricsConfig, PprofConfig: pprofConfig, diff --git a/op-challenger/game/fault/register.go b/op-challenger/game/fault/register.go index cb23266a2b12..7478dd4b23fe 100644 --- a/op-challenger/game/fault/register.go +++ b/op-challenger/game/fault/register.go @@ -254,7 +254,7 @@ func registerAsterisc( if err != nil { return nil, fmt.Errorf("failed to get asterisc prestate: %w", err) } - accessor, err := outputs.NewOutputAsteriscTraceAccessor(logger, m, cfg, l2Client, prestateProvider, asteriscPrestate, rollupClient, dir, l1HeadID, splitDepth, prestateBlock, poststateBlock) + accessor, err := outputs.NewOutputAsteriscTraceAccessor(logger, m, cfg.Asterisc, l2Client, prestateProvider, asteriscPrestate, rollupClient, dir, l1HeadID, splitDepth, prestateBlock, poststateBlock) if err != nil { return nil, err } @@ -349,7 +349,7 @@ func registerCannon( if err != nil { return nil, fmt.Errorf("failed to get cannon prestate: %w", err) } - accessor, err := outputs.NewOutputCannonTraceAccessor(logger, m, cfg, l2Client, prestateProvider, cannonPrestate, rollupClient, dir, l1HeadID, splitDepth, prestateBlock, poststateBlock) + accessor, err := outputs.NewOutputCannonTraceAccessor(logger, m, cfg.Cannon, l2Client, prestateProvider, cannonPrestate, rollupClient, dir, l1HeadID, splitDepth, prestateBlock, poststateBlock) if err != nil { return nil, err } diff --git a/op-challenger/game/fault/trace/asterisc/executor.go b/op-challenger/game/fault/trace/asterisc/executor.go deleted file mode 100644 index b84d5e444568..000000000000 --- a/op-challenger/game/fault/trace/asterisc/executor.go +++ /dev/null @@ -1,127 +0,0 @@ -package asterisc - -import ( - "context" - "fmt" - "math" - "os" - "path/filepath" - "strconv" - "strings" - "time" - - "github.com/ethereum-optimism/optimism/op-challenger/config" - "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils" - "github.com/ethereum/go-ethereum/log" -) - -type Executor struct { - logger log.Logger - metrics AsteriscMetricer - l1 string - l1Beacon string - l2 string - inputs utils.LocalGameInputs - asterisc string - server string - network string - rollupConfig string - l2Genesis string - absolutePreState string - snapshotFreq uint - infoFreq uint - selectSnapshot utils.SnapshotSelect - cmdExecutor utils.CmdExecutor -} - -func NewExecutor(logger log.Logger, m AsteriscMetricer, cfg *config.Config, prestate string, inputs utils.LocalGameInputs) *Executor { - return &Executor{ - logger: logger, - metrics: m, - l1: cfg.L1EthRpc, - l1Beacon: cfg.L1Beacon, - l2: cfg.L2Rpc, - inputs: inputs, - asterisc: cfg.AsteriscBin, - server: cfg.AsteriscServer, - network: cfg.AsteriscNetwork, - rollupConfig: cfg.AsteriscRollupConfigPath, - l2Genesis: cfg.AsteriscL2GenesisPath, - absolutePreState: prestate, - snapshotFreq: cfg.AsteriscSnapshotFreq, - infoFreq: cfg.AsteriscInfoFreq, - selectSnapshot: utils.FindStartingSnapshot, - cmdExecutor: utils.RunCmd, - } -} - -// GenerateProof executes asterisc to generate a proof at the specified trace index. -// The proof is stored at the specified directory. -func (e *Executor) GenerateProof(ctx context.Context, dir string, i uint64) error { - return e.generateProof(ctx, dir, i, i) -} - -// generateProof executes asterisc from the specified starting trace index until the end trace index. -// The proof is stored at the specified directory. -func (e *Executor) generateProof(ctx context.Context, dir string, begin uint64, end uint64, extraAsteriscArgs ...string) error { - snapshotDir := filepath.Join(dir, utils.SnapsDir) - start, err := e.selectSnapshot(e.logger, snapshotDir, e.absolutePreState, begin) - if err != nil { - return fmt.Errorf("find starting snapshot: %w", err) - } - proofDir := filepath.Join(dir, proofsDir) - dataDir := utils.PreimageDir(dir) - lastGeneratedState := filepath.Join(dir, utils.FinalState) - args := []string{ - "run", - "--input", start, - "--output", lastGeneratedState, - "--meta", "", - "--info-at", "%" + strconv.FormatUint(uint64(e.infoFreq), 10), - "--proof-at", "=" + strconv.FormatUint(end, 10), - "--proof-fmt", filepath.Join(proofDir, "%d.json.gz"), - "--snapshot-at", "%" + strconv.FormatUint(uint64(e.snapshotFreq), 10), - "--snapshot-fmt", filepath.Join(snapshotDir, "%d.json.gz"), - } - if end < math.MaxUint64 { - args = append(args, "--stop-at", "="+strconv.FormatUint(end+1, 10)) - } - args = append(args, extraAsteriscArgs...) - args = append(args, - "--", - e.server, "--server", - "--l1", e.l1, - "--l1.beacon", e.l1Beacon, - "--l2", e.l2, - "--datadir", dataDir, - "--l1.head", e.inputs.L1Head.Hex(), - "--l2.head", e.inputs.L2Head.Hex(), - "--l2.outputroot", e.inputs.L2OutputRoot.Hex(), - "--l2.claim", e.inputs.L2Claim.Hex(), - "--l2.blocknumber", e.inputs.L2BlockNumber.Text(10), - ) - if e.network != "" { - args = append(args, "--network", e.network) - } - if e.rollupConfig != "" { - args = append(args, "--rollup.config", e.rollupConfig) - } - if e.l2Genesis != "" { - args = append(args, "--l2.genesis", e.l2Genesis) - } - - if err := os.MkdirAll(snapshotDir, 0755); err != nil { - return fmt.Errorf("could not create snapshot directory %v: %w", snapshotDir, err) - } - if err := os.MkdirAll(dataDir, 0755); err != nil { - return fmt.Errorf("could not create preimage cache directory %v: %w", dataDir, err) - } - if err := os.MkdirAll(proofDir, 0755); err != nil { - return fmt.Errorf("could not create proofs directory %v: %w", proofDir, err) - } - e.logger.Info("Generating trace", "proof", end, "cmd", e.asterisc, "args", strings.Join(args, ", ")) - execStart := time.Now() - err = e.cmdExecutor(ctx, e.logger.New("proof", end), e.asterisc, args...) - e.metrics.RecordAsteriscExecutionTime(time.Since(execStart).Seconds()) - return err -} diff --git a/op-challenger/game/fault/trace/asterisc/provider.go b/op-challenger/game/fault/trace/asterisc/provider.go index cbf7b6241ae2..5c481777b6ce 100644 --- a/op-challenger/game/fault/trace/asterisc/provider.go +++ b/op-challenger/game/fault/trace/asterisc/provider.go @@ -12,6 +12,7 @@ import ( "github.com/ethereum-optimism/optimism/op-challenger/config" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils" + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/vm" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum-optimism/optimism/op-program/host/kvstore" "github.com/ethereum-optimism/optimism/op-service/ioutil" @@ -19,15 +20,6 @@ import ( "github.com/ethereum/go-ethereum/log" ) -const ( - proofsDir = "proofs" - diskStateCache = "state.json.gz" -) - -type AsteriscMetricer interface { - RecordAsteriscExecutionTime(t float64) -} - type AsteriscTraceProvider struct { logger log.Logger dir string @@ -43,14 +35,14 @@ type AsteriscTraceProvider struct { lastStep uint64 } -func NewTraceProvider(logger log.Logger, m AsteriscMetricer, cfg *config.Config, prestateProvider types.PrestateProvider, asteriscPrestate string, localInputs utils.LocalGameInputs, dir string, gameDepth types.Depth) *AsteriscTraceProvider { +func NewTraceProvider(logger log.Logger, m vm.Metricer, cfg vm.Config, prestateProvider types.PrestateProvider, asteriscPrestate string, localInputs utils.LocalGameInputs, dir string, gameDepth types.Depth) *AsteriscTraceProvider { return &AsteriscTraceProvider{ logger: logger, dir: dir, prestate: asteriscPrestate, - generator: NewExecutor(logger, m, cfg, asteriscPrestate, localInputs), + generator: vm.NewExecutor(logger, m, cfg, asteriscPrestate, localInputs), gameDepth: gameDepth, - preimageLoader: utils.NewPreimageLoader(kvstore.NewDiskKV(utils.PreimageDir(dir)).Get), + preimageLoader: utils.NewPreimageLoader(kvstore.NewDiskKV(vm.PreimageDir(dir)).Get), PrestateProvider: prestateProvider, } } @@ -116,7 +108,7 @@ func (p *AsteriscTraceProvider) loadProof(ctx context.Context, i uint64) (*utils if p.lastStep != 0 && i > p.lastStep { i = p.lastStep } - path := filepath.Join(p.dir, proofsDir, fmt.Sprintf("%d.json.gz", i)) + path := filepath.Join(p.dir, utils.ProofsDir, fmt.Sprintf("%d.json.gz", i)) file, err := ioutil.OpenDecompressed(path) if errors.Is(err, os.ErrNotExist) { if err := p.generator.GenerateProof(ctx, p.dir, i); err != nil { @@ -167,7 +159,7 @@ func (p *AsteriscTraceProvider) loadProof(ctx context.Context, i uint64) (*utils } func (c *AsteriscTraceProvider) finalState() (*VMState, error) { - state, err := parseState(filepath.Join(c.dir, utils.FinalState)) + state, err := parseState(filepath.Join(c.dir, vm.FinalState)) if err != nil { return nil, fmt.Errorf("cannot read final state: %w", err) } @@ -180,21 +172,21 @@ type AsteriscTraceProviderForTest struct { *AsteriscTraceProvider } -func NewTraceProviderForTest(logger log.Logger, m AsteriscMetricer, cfg *config.Config, localInputs utils.LocalGameInputs, dir string, gameDepth types.Depth) *AsteriscTraceProviderForTest { +func NewTraceProviderForTest(logger log.Logger, m vm.Metricer, cfg *config.Config, localInputs utils.LocalGameInputs, dir string, gameDepth types.Depth) *AsteriscTraceProviderForTest { p := &AsteriscTraceProvider{ logger: logger, dir: dir, prestate: cfg.AsteriscAbsolutePreState, - generator: NewExecutor(logger, m, cfg, cfg.AsteriscAbsolutePreState, localInputs), + generator: vm.NewExecutor(logger, m, cfg.Asterisc, cfg.AsteriscAbsolutePreState, localInputs), gameDepth: gameDepth, - preimageLoader: utils.NewPreimageLoader(kvstore.NewDiskKV(utils.PreimageDir(dir)).Get), + preimageLoader: utils.NewPreimageLoader(kvstore.NewDiskKV(vm.PreimageDir(dir)).Get), } return &AsteriscTraceProviderForTest{p} } func (p *AsteriscTraceProviderForTest) FindStep(ctx context.Context, start uint64, preimage utils.PreimageOpt) (uint64, error) { // Run asterisc to find the step that meets the preimage conditions - if err := p.generator.(*Executor).generateProof(ctx, p.dir, start, math.MaxUint64, preimage()...); err != nil { + if err := p.generator.(*vm.Executor).DoGenerateProof(ctx, p.dir, start, math.MaxUint64, preimage()...); err != nil { return 0, fmt.Errorf("generate asterisc trace (until preimage read): %w", err) } // Load the step from the state asterisc finished with diff --git a/op-challenger/game/fault/trace/asterisc/provider_test.go b/op-challenger/game/fault/trace/asterisc/provider_test.go index 950a5ad70375..939a27decc30 100644 --- a/op-challenger/game/fault/trace/asterisc/provider_test.go +++ b/op-challenger/game/fault/trace/asterisc/provider_test.go @@ -12,6 +12,7 @@ import ( "testing" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils" + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/vm" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum-optimism/optimism/op-service/ioutil" "github.com/ethereum-optimism/optimism/op-service/testlog" @@ -205,12 +206,12 @@ func setupTestData(t *testing.T) (string, string) { entries, err := testData.ReadDir(srcDir) require.NoError(t, err) dataDir := t.TempDir() - require.NoError(t, os.Mkdir(filepath.Join(dataDir, proofsDir), 0o777)) + require.NoError(t, os.Mkdir(filepath.Join(dataDir, utils.ProofsDir), 0o777)) for _, entry := range entries { path := filepath.Join(srcDir, entry.Name()) file, err := testData.ReadFile(path) require.NoErrorf(t, err, "reading %v", path) - proofFile := filepath.Join(dataDir, proofsDir, entry.Name()+".gz") + proofFile := filepath.Join(dataDir, utils.ProofsDir, entry.Name()+".gz") err = ioutil.WriteCompressedBytes(proofFile, file, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0o644) require.NoErrorf(t, err, "writing %v", path) } @@ -241,7 +242,7 @@ func (e *stubGenerator) GenerateProof(ctx context.Context, dir string, i uint64) var err error if e.finalState != nil && e.finalState.Step <= i { // Requesting a trace index past the end of the trace - proofFile = filepath.Join(dir, utils.FinalState) + proofFile = filepath.Join(dir, vm.FinalState) data, err = json.Marshal(e.finalState) if err != nil { return err @@ -249,7 +250,7 @@ func (e *stubGenerator) GenerateProof(ctx context.Context, dir string, i uint64) return ioutil.WriteCompressedBytes(proofFile, data, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0o644) } if e.proof != nil { - proofFile = filepath.Join(dir, proofsDir, fmt.Sprintf("%d.json.gz", i)) + proofFile = filepath.Join(dir, utils.ProofsDir, fmt.Sprintf("%d.json.gz", i)) data, err = json.Marshal(e.proof) if err != nil { return err diff --git a/op-challenger/game/fault/trace/cannon/executor.go b/op-challenger/game/fault/trace/cannon/executor.go deleted file mode 100644 index 688fd87d7fa2..000000000000 --- a/op-challenger/game/fault/trace/cannon/executor.go +++ /dev/null @@ -1,127 +0,0 @@ -package cannon - -import ( - "context" - "fmt" - "math" - "os" - "path/filepath" - "strconv" - "strings" - "time" - - "github.com/ethereum-optimism/optimism/op-challenger/config" - "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils" - "github.com/ethereum/go-ethereum/log" -) - -type Executor struct { - logger log.Logger - metrics CannonMetricer - l1 string - l1Beacon string - l2 string - inputs utils.LocalGameInputs - cannon string - server string - network string - rollupConfig string - l2Genesis string - absolutePreState string - snapshotFreq uint - infoFreq uint - selectSnapshot utils.SnapshotSelect - cmdExecutor utils.CmdExecutor -} - -func NewExecutor(logger log.Logger, m CannonMetricer, cfg *config.Config, prestate string, inputs utils.LocalGameInputs) *Executor { - return &Executor{ - logger: logger, - metrics: m, - l1: cfg.L1EthRpc, - l1Beacon: cfg.L1Beacon, - l2: cfg.L2Rpc, - inputs: inputs, - cannon: cfg.CannonBin, - server: cfg.CannonServer, - network: cfg.CannonNetwork, - rollupConfig: cfg.CannonRollupConfigPath, - l2Genesis: cfg.CannonL2GenesisPath, - absolutePreState: prestate, - snapshotFreq: cfg.CannonSnapshotFreq, - infoFreq: cfg.CannonInfoFreq, - selectSnapshot: utils.FindStartingSnapshot, - cmdExecutor: utils.RunCmd, - } -} - -// GenerateProof executes cannon to generate a proof at the specified trace index. -// The proof is stored at the specified directory. -func (e *Executor) GenerateProof(ctx context.Context, dir string, i uint64) error { - return e.generateProof(ctx, dir, i, i) -} - -// generateProof executes cannon from the specified starting trace index until the end trace index. -// The proof is stored at the specified directory. -func (e *Executor) generateProof(ctx context.Context, dir string, begin uint64, end uint64, extraCannonArgs ...string) error { - snapshotDir := filepath.Join(dir, utils.SnapsDir) - start, err := e.selectSnapshot(e.logger, snapshotDir, e.absolutePreState, begin) - if err != nil { - return fmt.Errorf("find starting snapshot: %w", err) - } - proofDir := filepath.Join(dir, utils.ProofsDir) - dataDir := utils.PreimageDir(dir) - lastGeneratedState := filepath.Join(dir, utils.FinalState) - args := []string{ - "run", - "--input", start, - "--output", lastGeneratedState, - "--meta", "", - "--info-at", "%" + strconv.FormatUint(uint64(e.infoFreq), 10), - "--proof-at", "=" + strconv.FormatUint(end, 10), - "--proof-fmt", filepath.Join(proofDir, "%d.json.gz"), - "--snapshot-at", "%" + strconv.FormatUint(uint64(e.snapshotFreq), 10), - "--snapshot-fmt", filepath.Join(snapshotDir, "%d.json.gz"), - } - if end < math.MaxUint64 { - args = append(args, "--stop-at", "="+strconv.FormatUint(end+1, 10)) - } - args = append(args, extraCannonArgs...) - args = append(args, - "--", - e.server, "--server", - "--l1", e.l1, - "--l1.beacon", e.l1Beacon, - "--l2", e.l2, - "--datadir", dataDir, - "--l1.head", e.inputs.L1Head.Hex(), - "--l2.head", e.inputs.L2Head.Hex(), - "--l2.outputroot", e.inputs.L2OutputRoot.Hex(), - "--l2.claim", e.inputs.L2Claim.Hex(), - "--l2.blocknumber", e.inputs.L2BlockNumber.Text(10), - ) - if e.network != "" { - args = append(args, "--network", e.network) - } - if e.rollupConfig != "" { - args = append(args, "--rollup.config", e.rollupConfig) - } - if e.l2Genesis != "" { - args = append(args, "--l2.genesis", e.l2Genesis) - } - - if err := os.MkdirAll(snapshotDir, 0755); err != nil { - return fmt.Errorf("could not create snapshot directory %v: %w", snapshotDir, err) - } - if err := os.MkdirAll(dataDir, 0755); err != nil { - return fmt.Errorf("could not create preimage cache directory %v: %w", dataDir, err) - } - if err := os.MkdirAll(proofDir, 0755); err != nil { - return fmt.Errorf("could not create proofs directory %v: %w", proofDir, err) - } - e.logger.Info("Generating trace", "proof", end, "cmd", e.cannon, "args", strings.Join(args, ", ")) - execStart := time.Now() - err = e.cmdExecutor(ctx, e.logger.New("proof", end), e.cannon, args...) - e.metrics.RecordCannonExecutionTime(time.Since(execStart).Seconds()) - return err -} diff --git a/op-challenger/game/fault/trace/cannon/executor_test.go b/op-challenger/game/fault/trace/cannon/executor_test.go deleted file mode 100644 index 4f20c426e778..000000000000 --- a/op-challenger/game/fault/trace/cannon/executor_test.go +++ /dev/null @@ -1,227 +0,0 @@ -package cannon - -import ( - "context" - "fmt" - "math" - "math/big" - "os" - "path/filepath" - "testing" - "time" - - "github.com/ethereum-optimism/optimism/op-challenger/config" - "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils" - "github.com/ethereum-optimism/optimism/op-challenger/metrics" - "github.com/ethereum-optimism/optimism/op-service/testlog" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/log" - "github.com/stretchr/testify/require" -) - -const execTestCannonPrestate = "/foo/pre.json" - -func TestGenerateProof(t *testing.T) { - input := "starting.json" - tempDir := t.TempDir() - dir := filepath.Join(tempDir, "gameDir") - cfg := config.NewConfig(common.Address{0xbb}, "http://localhost:8888", "http://localhost:9000", "http://localhost:9096", "http://localhost:9095", tempDir, config.TraceTypeCannon) - cfg.L2Rpc = "http://localhost:9999" - prestate := "pre.json" - cfg.CannonBin = "./bin/cannon" - cfg.CannonServer = "./bin/op-program" - cfg.CannonSnapshotFreq = 500 - cfg.CannonInfoFreq = 900 - - inputs := utils.LocalGameInputs{ - L1Head: common.Hash{0x11}, - L2Head: common.Hash{0x22}, - L2OutputRoot: common.Hash{0x33}, - L2Claim: common.Hash{0x44}, - L2BlockNumber: big.NewInt(3333), - } - captureExec := func(t *testing.T, cfg config.Config, proofAt uint64) (string, string, map[string]string) { - m := &cannonDurationMetrics{} - executor := NewExecutor(testlog.Logger(t, log.LevelInfo), m, &cfg, prestate, inputs) - executor.selectSnapshot = func(logger log.Logger, dir string, absolutePreState string, i uint64) (string, error) { - return input, nil - } - var binary string - var subcommand string - args := make(map[string]string) - executor.cmdExecutor = func(ctx context.Context, l log.Logger, b string, a ...string) error { - binary = b - subcommand = a[0] - for i := 1; i < len(a); { - if a[i] == "--" { - // Skip over the divider between cannon and server program - i += 1 - continue - } - args[a[i]] = a[i+1] - i += 2 - } - return nil - } - err := executor.GenerateProof(context.Background(), dir, proofAt) - require.NoError(t, err) - require.Equal(t, 1, m.executionTimeRecordCount, "Should record cannon execution time") - return binary, subcommand, args - } - - t.Run("Network", func(t *testing.T) { - cfg.CannonNetwork = "mainnet" - cfg.CannonRollupConfigPath = "" - cfg.CannonL2GenesisPath = "" - binary, subcommand, args := captureExec(t, cfg, 150_000_000) - require.DirExists(t, filepath.Join(dir, utils.PreimagesDir)) - require.DirExists(t, filepath.Join(dir, utils.ProofsDir)) - require.DirExists(t, filepath.Join(dir, utils.SnapsDir)) - require.Equal(t, cfg.CannonBin, binary) - require.Equal(t, "run", subcommand) - require.Equal(t, input, args["--input"]) - require.Contains(t, args, "--meta") - require.Equal(t, "", args["--meta"]) - require.Equal(t, filepath.Join(dir, utils.FinalState), args["--output"]) - require.Equal(t, "=150000000", args["--proof-at"]) - require.Equal(t, "=150000001", args["--stop-at"]) - require.Equal(t, "%500", args["--snapshot-at"]) - require.Equal(t, "%900", args["--info-at"]) - // Slight quirk of how we pair off args - // The server binary winds up as the key and the first arg --server as the value which has no value - // Then everything else pairs off correctly again - require.Equal(t, "--server", args[cfg.CannonServer]) - require.Equal(t, cfg.L1EthRpc, args["--l1"]) - require.Equal(t, cfg.L1Beacon, args["--l1.beacon"]) - require.Equal(t, cfg.L2Rpc, args["--l2"]) - require.Equal(t, filepath.Join(dir, utils.PreimagesDir), args["--datadir"]) - require.Equal(t, filepath.Join(dir, utils.ProofsDir, "%d.json.gz"), args["--proof-fmt"]) - require.Equal(t, filepath.Join(dir, utils.SnapsDir, "%d.json.gz"), args["--snapshot-fmt"]) - require.Equal(t, cfg.CannonNetwork, args["--network"]) - require.NotContains(t, args, "--rollup.config") - require.NotContains(t, args, "--l2.genesis") - - // Local game inputs - require.Equal(t, inputs.L1Head.Hex(), args["--l1.head"]) - require.Equal(t, inputs.L2Head.Hex(), args["--l2.head"]) - require.Equal(t, inputs.L2OutputRoot.Hex(), args["--l2.outputroot"]) - require.Equal(t, inputs.L2Claim.Hex(), args["--l2.claim"]) - require.Equal(t, "3333", args["--l2.blocknumber"]) - }) - - t.Run("RollupAndGenesis", func(t *testing.T) { - cfg.CannonNetwork = "" - cfg.CannonRollupConfigPath = "rollup.json" - cfg.CannonL2GenesisPath = "genesis.json" - _, _, args := captureExec(t, cfg, 150_000_000) - require.NotContains(t, args, "--network") - require.Equal(t, cfg.CannonRollupConfigPath, args["--rollup.config"]) - require.Equal(t, cfg.CannonL2GenesisPath, args["--l2.genesis"]) - }) - - t.Run("NoStopAtWhenProofIsMaxUInt", func(t *testing.T) { - cfg.CannonNetwork = "mainnet" - cfg.CannonRollupConfigPath = "rollup.json" - cfg.CannonL2GenesisPath = "genesis.json" - _, _, args := captureExec(t, cfg, math.MaxUint64) - // stop-at would need to be one more than the proof step which would overflow back to 0 - // so expect that it will be omitted. We'll ultimately want cannon to execute until the program exits. - require.NotContains(t, args, "--stop-at") - }) -} - -func TestRunCmdLogsOutput(t *testing.T) { - bin := "/bin/echo" - if _, err := os.Stat(bin); err != nil { - t.Skip(bin, " not available", err) - } - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - logger, logs := testlog.CaptureLogger(t, log.LevelInfo) - err := utils.RunCmd(ctx, logger, bin, "Hello World") - require.NoError(t, err) - levelFilter := testlog.NewLevelFilter(log.LevelInfo) - msgFilter := testlog.NewMessageFilter("Hello World") - require.NotNil(t, logs.FindLog(levelFilter, msgFilter)) -} - -func TestFindStartingSnapshot(t *testing.T) { - logger := testlog.Logger(t, log.LevelInfo) - - withSnapshots := func(t *testing.T, files ...string) string { - dir := t.TempDir() - for _, file := range files { - require.NoError(t, os.WriteFile(fmt.Sprintf("%v/%v", dir, file), nil, 0o644)) - } - return dir - } - - t.Run("UsePrestateWhenSnapshotsDirDoesNotExist", func(t *testing.T) { - dir := t.TempDir() - snapshot, err := utils.FindStartingSnapshot(logger, filepath.Join(dir, "doesNotExist"), execTestCannonPrestate, 1200) - require.NoError(t, err) - require.Equal(t, execTestCannonPrestate, snapshot) - }) - - t.Run("UsePrestateWhenSnapshotsDirEmpty", func(t *testing.T) { - dir := withSnapshots(t) - snapshot, err := utils.FindStartingSnapshot(logger, dir, execTestCannonPrestate, 1200) - require.NoError(t, err) - require.Equal(t, execTestCannonPrestate, snapshot) - }) - - t.Run("UsePrestateWhenNoSnapshotBeforeTraceIndex", func(t *testing.T) { - dir := withSnapshots(t, "100.json", "200.json") - snapshot, err := utils.FindStartingSnapshot(logger, dir, execTestCannonPrestate, 99) - require.NoError(t, err) - require.Equal(t, execTestCannonPrestate, snapshot) - - snapshot, err = utils.FindStartingSnapshot(logger, dir, execTestCannonPrestate, 100) - require.NoError(t, err) - require.Equal(t, execTestCannonPrestate, snapshot) - }) - - t.Run("UseClosestAvailableSnapshot", func(t *testing.T) { - dir := withSnapshots(t, "100.json.gz", "123.json.gz", "250.json.gz") - - snapshot, err := utils.FindStartingSnapshot(logger, dir, execTestCannonPrestate, 101) - require.NoError(t, err) - require.Equal(t, filepath.Join(dir, "100.json.gz"), snapshot) - - snapshot, err = utils.FindStartingSnapshot(logger, dir, execTestCannonPrestate, 123) - require.NoError(t, err) - require.Equal(t, filepath.Join(dir, "100.json.gz"), snapshot) - - snapshot, err = utils.FindStartingSnapshot(logger, dir, execTestCannonPrestate, 124) - require.NoError(t, err) - require.Equal(t, filepath.Join(dir, "123.json.gz"), snapshot) - - snapshot, err = utils.FindStartingSnapshot(logger, dir, execTestCannonPrestate, 256) - require.NoError(t, err) - require.Equal(t, filepath.Join(dir, "250.json.gz"), snapshot) - }) - - t.Run("IgnoreDirectories", func(t *testing.T) { - dir := withSnapshots(t, "100.json.gz") - require.NoError(t, os.Mkdir(filepath.Join(dir, "120.json.gz"), 0o777)) - snapshot, err := utils.FindStartingSnapshot(logger, dir, execTestCannonPrestate, 150) - require.NoError(t, err) - require.Equal(t, filepath.Join(dir, "100.json.gz"), snapshot) - }) - - t.Run("IgnoreUnexpectedFiles", func(t *testing.T) { - dir := withSnapshots(t, ".file", "100.json.gz", "foo", "bar.json.gz") - snapshot, err := utils.FindStartingSnapshot(logger, dir, execTestCannonPrestate, 150) - require.NoError(t, err) - require.Equal(t, filepath.Join(dir, "100.json.gz"), snapshot) - }) -} - -type cannonDurationMetrics struct { - metrics.NoopMetricsImpl - executionTimeRecordCount int -} - -func (c *cannonDurationMetrics) RecordCannonExecutionTime(_ float64) { - c.executionTimeRecordCount++ -} diff --git a/op-challenger/game/fault/trace/cannon/provider.go b/op-challenger/game/fault/trace/cannon/provider.go index 704d88e2e6a4..c565b9b39b75 100644 --- a/op-challenger/game/fault/trace/cannon/provider.go +++ b/op-challenger/game/fault/trace/cannon/provider.go @@ -12,6 +12,7 @@ import ( "github.com/ethereum-optimism/optimism/op-challenger/config" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils" + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/vm" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum-optimism/optimism/op-program/host/kvstore" "github.com/ethereum-optimism/optimism/op-service/ioutil" @@ -22,10 +23,6 @@ import ( "github.com/ethereum-optimism/optimism/cannon/mipsevm" ) -type CannonMetricer interface { - RecordCannonExecutionTime(t float64) -} - type CannonTraceProvider struct { logger log.Logger dir string @@ -41,14 +38,14 @@ type CannonTraceProvider struct { lastStep uint64 } -func NewTraceProvider(logger log.Logger, m CannonMetricer, cfg *config.Config, prestateProvider types.PrestateProvider, prestate string, localInputs utils.LocalGameInputs, dir string, gameDepth types.Depth) *CannonTraceProvider { +func NewTraceProvider(logger log.Logger, m vm.Metricer, cfg vm.Config, prestateProvider types.PrestateProvider, prestate string, localInputs utils.LocalGameInputs, dir string, gameDepth types.Depth) *CannonTraceProvider { return &CannonTraceProvider{ logger: logger, dir: dir, prestate: prestate, - generator: NewExecutor(logger, m, cfg, prestate, localInputs), + generator: vm.NewExecutor(logger, m, cfg, prestate, localInputs), gameDepth: gameDepth, - preimageLoader: utils.NewPreimageLoader(kvstore.NewDiskKV(utils.PreimageDir(dir)).Get), + preimageLoader: utils.NewPreimageLoader(kvstore.NewDiskKV(vm.PreimageDir(dir)).Get), PrestateProvider: prestateProvider, } } @@ -170,7 +167,7 @@ func (p *CannonTraceProvider) loadProof(ctx context.Context, i uint64) (*utils.P } func (c *CannonTraceProvider) finalState() (*mipsevm.State, error) { - state, err := parseState(filepath.Join(c.dir, utils.FinalState)) + state, err := parseState(filepath.Join(c.dir, vm.FinalState)) if err != nil { return nil, fmt.Errorf("cannot read final state: %w", err) } @@ -183,21 +180,21 @@ type CannonTraceProviderForTest struct { *CannonTraceProvider } -func NewTraceProviderForTest(logger log.Logger, m CannonMetricer, cfg *config.Config, localInputs utils.LocalGameInputs, dir string, gameDepth types.Depth) *CannonTraceProviderForTest { +func NewTraceProviderForTest(logger log.Logger, m vm.Metricer, cfg *config.Config, localInputs utils.LocalGameInputs, dir string, gameDepth types.Depth) *CannonTraceProviderForTest { p := &CannonTraceProvider{ logger: logger, dir: dir, prestate: cfg.CannonAbsolutePreState, - generator: NewExecutor(logger, m, cfg, cfg.CannonAbsolutePreState, localInputs), + generator: vm.NewExecutor(logger, m, cfg.Cannon, cfg.CannonAbsolutePreState, localInputs), gameDepth: gameDepth, - preimageLoader: utils.NewPreimageLoader(kvstore.NewDiskKV(utils.PreimageDir(dir)).Get), + preimageLoader: utils.NewPreimageLoader(kvstore.NewDiskKV(vm.PreimageDir(dir)).Get), } return &CannonTraceProviderForTest{p} } func (p *CannonTraceProviderForTest) FindStep(ctx context.Context, start uint64, preimage utils.PreimageOpt) (uint64, error) { // Run cannon to find the step that meets the preimage conditions - if err := p.generator.(*Executor).generateProof(ctx, p.dir, start, math.MaxUint64, preimage()...); err != nil { + if err := p.generator.(*vm.Executor).DoGenerateProof(ctx, p.dir, start, math.MaxUint64, preimage()...); err != nil { return 0, fmt.Errorf("generate cannon trace (until preimage read): %w", err) } // Load the step from the state cannon finished with diff --git a/op-challenger/game/fault/trace/cannon/provider_test.go b/op-challenger/game/fault/trace/cannon/provider_test.go index 388bd151991b..94277ed88399 100644 --- a/op-challenger/game/fault/trace/cannon/provider_test.go +++ b/op-challenger/game/fault/trace/cannon/provider_test.go @@ -13,6 +13,7 @@ import ( "github.com/ethereum-optimism/optimism/cannon/mipsevm" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils" + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/vm" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum-optimism/optimism/op-service/ioutil" "github.com/ethereum-optimism/optimism/op-service/testlog" @@ -257,7 +258,7 @@ func (e *stubGenerator) GenerateProof(ctx context.Context, dir string, i uint64) var err error if e.finalState != nil && e.finalState.Step <= i { // Requesting a trace index past the end of the trace - proofFile = filepath.Join(dir, utils.FinalState) + proofFile = filepath.Join(dir, vm.FinalState) data, err = json.Marshal(e.finalState) if err != nil { return err diff --git a/op-challenger/game/fault/trace/outputs/output_asterisc.go b/op-challenger/game/fault/trace/outputs/output_asterisc.go index a6bbf39e7288..ac129dbb26c8 100644 --- a/op-challenger/game/fault/trace/outputs/output_asterisc.go +++ b/op-challenger/game/fault/trace/outputs/output_asterisc.go @@ -5,12 +5,12 @@ import ( "fmt" "path/filepath" - "github.com/ethereum-optimism/optimism/op-challenger/config" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/contracts" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/asterisc" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/split" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils" + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/vm" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum-optimism/optimism/op-challenger/metrics" "github.com/ethereum-optimism/optimism/op-service/eth" @@ -21,7 +21,7 @@ import ( func NewOutputAsteriscTraceAccessor( logger log.Logger, m metrics.Metricer, - cfg *config.Config, + cfg vm.Config, l2Client utils.L2HeaderSource, prestateProvider types.PrestateProvider, asteriscPrestate string, diff --git a/op-challenger/game/fault/trace/outputs/output_cannon.go b/op-challenger/game/fault/trace/outputs/output_cannon.go index 7a2b3d36a975..ecc710380bfb 100644 --- a/op-challenger/game/fault/trace/outputs/output_cannon.go +++ b/op-challenger/game/fault/trace/outputs/output_cannon.go @@ -5,12 +5,12 @@ import ( "fmt" "path/filepath" - "github.com/ethereum-optimism/optimism/op-challenger/config" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/contracts" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/cannon" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/split" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils" + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/vm" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum-optimism/optimism/op-challenger/metrics" "github.com/ethereum-optimism/optimism/op-service/eth" @@ -21,7 +21,7 @@ import ( func NewOutputCannonTraceAccessor( logger log.Logger, m metrics.Metricer, - cfg *config.Config, + cfg vm.Config, l2Client utils.L2HeaderSource, prestateProvider types.PrestateProvider, cannonPrestate string, diff --git a/op-challenger/game/fault/trace/vm/executor.go b/op-challenger/game/fault/trace/vm/executor.go new file mode 100644 index 000000000000..564ef6ac8d20 --- /dev/null +++ b/op-challenger/game/fault/trace/vm/executor.go @@ -0,0 +1,126 @@ +package vm + +import ( + "context" + "fmt" + "math" + "os" + "path/filepath" + "strconv" + "strings" + "time" + + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils" + "github.com/ethereum/go-ethereum/log" +) + +type Metricer interface { + RecordVmExecutionTime(vmType string, t time.Duration) +} + +type Config struct { + VmType string + L1 string + L1Beacon string + L2 string + VmBin string // Path to the vm executable to run when generating trace data + Server string // Path to the executable that provides the pre-image oracle server + Network string + RollupConfigPath string + L2GenesisPath string + SnapshotFreq uint // Frequency of snapshots to create when executing (in VM instructions) + InfoFreq uint // Frequency of progress log messages (in VM instructions) +} + +type Executor struct { + cfg Config + logger log.Logger + metrics Metricer + absolutePreState string + inputs utils.LocalGameInputs + selectSnapshot SnapshotSelect + cmdExecutor CmdExecutor +} + +func NewExecutor(logger log.Logger, m Metricer, cfg Config, prestate string, inputs utils.LocalGameInputs) *Executor { + return &Executor{ + cfg: cfg, + logger: logger, + metrics: m, + inputs: inputs, + absolutePreState: prestate, + selectSnapshot: FindStartingSnapshot, + cmdExecutor: RunCmd, + } +} + +// GenerateProof executes vm to generate a proof at the specified trace index. +// The proof is stored at the specified directory. +func (e *Executor) GenerateProof(ctx context.Context, dir string, i uint64) error { + return e.DoGenerateProof(ctx, dir, i, i) +} + +// DoGenerateProof executes vm from the specified starting trace index until the end trace index. +// The proof is stored at the specified directory. +func (e *Executor) DoGenerateProof(ctx context.Context, dir string, begin uint64, end uint64, extraVmArgs ...string) error { + snapshotDir := filepath.Join(dir, SnapsDir) + start, err := e.selectSnapshot(e.logger, snapshotDir, e.absolutePreState, begin) + if err != nil { + return fmt.Errorf("find starting snapshot: %w", err) + } + proofDir := filepath.Join(dir, utils.ProofsDir) + dataDir := PreimageDir(dir) + lastGeneratedState := filepath.Join(dir, FinalState) + args := []string{ + "run", + "--input", start, + "--output", lastGeneratedState, + "--meta", "", + "--info-at", "%" + strconv.FormatUint(uint64(e.cfg.InfoFreq), 10), + "--proof-at", "=" + strconv.FormatUint(end, 10), + "--proof-fmt", filepath.Join(proofDir, "%d.json.gz"), + "--snapshot-at", "%" + strconv.FormatUint(uint64(e.cfg.SnapshotFreq), 10), + "--snapshot-fmt", filepath.Join(snapshotDir, "%d.json.gz"), + } + if end < math.MaxUint64 { + args = append(args, "--stop-at", "="+strconv.FormatUint(end+1, 10)) + } + args = append(args, extraVmArgs...) + args = append(args, + "--", + e.cfg.Server, "--server", + "--l1", e.cfg.L1, + "--l1.beacon", e.cfg.L1Beacon, + "--l2", e.cfg.L2, + "--datadir", dataDir, + "--l1.head", e.inputs.L1Head.Hex(), + "--l2.head", e.inputs.L2Head.Hex(), + "--l2.outputroot", e.inputs.L2OutputRoot.Hex(), + "--l2.claim", e.inputs.L2Claim.Hex(), + "--l2.blocknumber", e.inputs.L2BlockNumber.Text(10), + ) + if e.cfg.Network != "" { + args = append(args, "--network", e.cfg.Network) + } + if e.cfg.RollupConfigPath != "" { + args = append(args, "--rollup.config", e.cfg.RollupConfigPath) + } + if e.cfg.L2GenesisPath != "" { + args = append(args, "--l2.genesis", e.cfg.L2GenesisPath) + } + + if err := os.MkdirAll(snapshotDir, 0755); err != nil { + return fmt.Errorf("could not create snapshot directory %v: %w", snapshotDir, err) + } + if err := os.MkdirAll(dataDir, 0755); err != nil { + return fmt.Errorf("could not create preimage cache directory %v: %w", dataDir, err) + } + if err := os.MkdirAll(proofDir, 0755); err != nil { + return fmt.Errorf("could not create proofs directory %v: %w", proofDir, err) + } + e.logger.Info("Generating trace", "proof", end, "cmd", e.cfg.VmBin, "args", strings.Join(args, ", ")) + execStart := time.Now() + err = e.cmdExecutor(ctx, e.logger.New("proof", end), e.cfg.VmBin, args...) + e.metrics.RecordVmExecutionTime(e.cfg.VmType, time.Since(execStart)) + return err +} diff --git a/op-challenger/game/fault/trace/asterisc/executor_test.go b/op-challenger/game/fault/trace/vm/executor_test.go similarity index 60% rename from op-challenger/game/fault/trace/asterisc/executor_test.go rename to op-challenger/game/fault/trace/vm/executor_test.go index 7ce44f304375..00078bd2078e 100644 --- a/op-challenger/game/fault/trace/asterisc/executor_test.go +++ b/op-challenger/game/fault/trace/vm/executor_test.go @@ -1,4 +1,4 @@ -package asterisc +package vm import ( "context" @@ -6,8 +6,8 @@ import ( "math/big" "path/filepath" "testing" + "time" - "github.com/ethereum-optimism/optimism/op-challenger/config" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils" "github.com/ethereum-optimism/optimism/op-challenger/metrics" "github.com/ethereum-optimism/optimism/op-service/testlog" @@ -20,13 +20,18 @@ func TestGenerateProof(t *testing.T) { input := "starting.json" tempDir := t.TempDir() dir := filepath.Join(tempDir, "gameDir") - cfg := config.NewConfig(common.Address{0xbb}, "http://localhost:8888", "http://localhost:9000", "http://localhost:9096", "http://localhost:9095", tempDir, config.TraceTypeAsterisc) - cfg.L2Rpc = "http://localhost:9999" + cfg := Config{ + VmType: "test", + L1: "http://localhost:8888", + L1Beacon: "http://localhost:9000", + L2: "http://localhost:9999", + VmBin: "./bin/testvm", + Server: "./bin/testserver", + Network: "op-test", + SnapshotFreq: 500, + InfoFreq: 900, + } prestate := "pre.json" - cfg.AsteriscBin = "./bin/asterisc" - cfg.AsteriscServer = "./bin/op-program" - cfg.AsteriscSnapshotFreq = 500 - cfg.AsteriscInfoFreq = 900 inputs := utils.LocalGameInputs{ L1Head: common.Hash{0x11}, @@ -35,9 +40,9 @@ func TestGenerateProof(t *testing.T) { L2Claim: common.Hash{0x44}, L2BlockNumber: big.NewInt(3333), } - captureExec := func(t *testing.T, cfg config.Config, proofAt uint64) (string, string, map[string]string) { - m := &asteriscDurationMetrics{} - executor := NewExecutor(testlog.Logger(t, log.LevelInfo), m, &cfg, prestate, inputs) + captureExec := func(t *testing.T, cfg Config, proofAt uint64) (string, string, map[string]string) { + m := &stubVmMetrics{} + executor := NewExecutor(testlog.Logger(t, log.LevelInfo), m, cfg, prestate, inputs) executor.selectSnapshot = func(logger log.Logger, dir string, absolutePreState string, i uint64) (string, error) { return input, nil } @@ -49,7 +54,7 @@ func TestGenerateProof(t *testing.T) { subcommand = a[0] for i := 1; i < len(a); { if a[i] == "--" { - // Skip over the divider between asterisc and server program + // Skip over the divider between vm and server program i += 1 continue } @@ -60,24 +65,24 @@ func TestGenerateProof(t *testing.T) { } err := executor.GenerateProof(context.Background(), dir, proofAt) require.NoError(t, err) - require.Equal(t, 1, m.executionTimeRecordCount, "Should record asterisc execution time") + require.Equal(t, 1, m.executionTimeRecordCount, "Should record vm execution time") return binary, subcommand, args } t.Run("Network", func(t *testing.T) { - cfg.AsteriscNetwork = "mainnet" - cfg.AsteriscRollupConfigPath = "" - cfg.AsteriscL2GenesisPath = "" + cfg.Network = "mainnet" + cfg.RollupConfigPath = "" + cfg.L2GenesisPath = "" binary, subcommand, args := captureExec(t, cfg, 150_000_000) - require.DirExists(t, filepath.Join(dir, utils.PreimagesDir)) - require.DirExists(t, filepath.Join(dir, proofsDir)) - require.DirExists(t, filepath.Join(dir, utils.SnapsDir)) - require.Equal(t, cfg.AsteriscBin, binary) + require.DirExists(t, filepath.Join(dir, PreimagesDir)) + require.DirExists(t, filepath.Join(dir, utils.ProofsDir)) + require.DirExists(t, filepath.Join(dir, SnapsDir)) + require.Equal(t, cfg.VmBin, binary) require.Equal(t, "run", subcommand) require.Equal(t, input, args["--input"]) require.Contains(t, args, "--meta") require.Equal(t, "", args["--meta"]) - require.Equal(t, filepath.Join(dir, utils.FinalState), args["--output"]) + require.Equal(t, filepath.Join(dir, FinalState), args["--output"]) require.Equal(t, "=150000000", args["--proof-at"]) require.Equal(t, "=150000001", args["--stop-at"]) require.Equal(t, "%500", args["--snapshot-at"]) @@ -85,14 +90,14 @@ func TestGenerateProof(t *testing.T) { // Slight quirk of how we pair off args // The server binary winds up as the key and the first arg --server as the value which has no value // Then everything else pairs off correctly again - require.Equal(t, "--server", args[cfg.AsteriscServer]) - require.Equal(t, cfg.L1EthRpc, args["--l1"]) + require.Equal(t, "--server", args[cfg.Server]) + require.Equal(t, cfg.L1, args["--l1"]) require.Equal(t, cfg.L1Beacon, args["--l1.beacon"]) - require.Equal(t, cfg.L2Rpc, args["--l2"]) - require.Equal(t, filepath.Join(dir, utils.PreimagesDir), args["--datadir"]) - require.Equal(t, filepath.Join(dir, proofsDir, "%d.json.gz"), args["--proof-fmt"]) - require.Equal(t, filepath.Join(dir, utils.SnapsDir, "%d.json.gz"), args["--snapshot-fmt"]) - require.Equal(t, cfg.AsteriscNetwork, args["--network"]) + require.Equal(t, cfg.L2, args["--l2"]) + require.Equal(t, filepath.Join(dir, PreimagesDir), args["--datadir"]) + require.Equal(t, filepath.Join(dir, utils.ProofsDir, "%d.json.gz"), args["--proof-fmt"]) + require.Equal(t, filepath.Join(dir, SnapsDir, "%d.json.gz"), args["--snapshot-fmt"]) + require.Equal(t, cfg.Network, args["--network"]) require.NotContains(t, args, "--rollup.config") require.NotContains(t, args, "--l2.genesis") @@ -105,19 +110,19 @@ func TestGenerateProof(t *testing.T) { }) t.Run("RollupAndGenesis", func(t *testing.T) { - cfg.AsteriscNetwork = "" - cfg.AsteriscRollupConfigPath = "rollup.json" - cfg.AsteriscL2GenesisPath = "genesis.json" + cfg.Network = "" + cfg.RollupConfigPath = "rollup.json" + cfg.L2GenesisPath = "genesis.json" _, _, args := captureExec(t, cfg, 150_000_000) require.NotContains(t, args, "--network") - require.Equal(t, cfg.AsteriscRollupConfigPath, args["--rollup.config"]) - require.Equal(t, cfg.AsteriscL2GenesisPath, args["--l2.genesis"]) + require.Equal(t, cfg.RollupConfigPath, args["--rollup.config"]) + require.Equal(t, cfg.L2GenesisPath, args["--l2.genesis"]) }) t.Run("NoStopAtWhenProofIsMaxUInt", func(t *testing.T) { - cfg.AsteriscNetwork = "mainnet" - cfg.AsteriscRollupConfigPath = "rollup.json" - cfg.AsteriscL2GenesisPath = "genesis.json" + cfg.Network = "mainnet" + cfg.RollupConfigPath = "rollup.json" + cfg.L2GenesisPath = "genesis.json" _, _, args := captureExec(t, cfg, math.MaxUint64) // stop-at would need to be one more than the proof step which would overflow back to 0 // so expect that it will be omitted. We'll ultimately want asterisc to execute until the program exits. @@ -125,11 +130,11 @@ func TestGenerateProof(t *testing.T) { }) } -type asteriscDurationMetrics struct { +type stubVmMetrics struct { metrics.NoopMetricsImpl executionTimeRecordCount int } -func (c *asteriscDurationMetrics) RecordAsteriscExecutionTime(_ float64) { +func (c *stubVmMetrics) RecordVmExecutionTime(_ string, _ time.Duration) { c.executionTimeRecordCount++ } diff --git a/op-challenger/game/fault/trace/utils/executor.go b/op-challenger/game/fault/trace/vm/prestates.go similarity index 93% rename from op-challenger/game/fault/trace/utils/executor.go rename to op-challenger/game/fault/trace/vm/prestates.go index f3c5feac8311..c51dda7de1e5 100644 --- a/op-challenger/game/fault/trace/utils/executor.go +++ b/op-challenger/game/fault/trace/vm/prestates.go @@ -1,4 +1,4 @@ -package utils +package vm import ( "context" @@ -10,7 +10,7 @@ import ( "regexp" "strconv" - oplog "github.com/ethereum-optimism/optimism/op-service/log" + log2 "github.com/ethereum-optimism/optimism/op-service/log" "github.com/ethereum/go-ethereum/log" ) @@ -31,10 +31,10 @@ func PreimageDir(dir string) string { func RunCmd(ctx context.Context, l log.Logger, binary string, args ...string) error { cmd := exec.CommandContext(ctx, binary, args...) - stdOut := oplog.NewWriter(l, log.LevelInfo) + stdOut := log2.NewWriter(l, log.LevelInfo) defer stdOut.Close() // Keep stdErr at info level because FPVM uses stderr for progress messages - stdErr := oplog.NewWriter(l, log.LevelInfo) + stdErr := log2.NewWriter(l, log.LevelInfo) defer stdErr.Close() cmd.Stdout = stdOut cmd.Stderr = stdErr diff --git a/op-challenger/metrics/metrics.go b/op-challenger/metrics/metrics.go index 9253f26cc631..4f186f4c01e9 100644 --- a/op-challenger/metrics/metrics.go +++ b/op-challenger/metrics/metrics.go @@ -2,6 +2,7 @@ package metrics import ( "io" + "time" "github.com/ethereum-optimism/optimism/op-service/httputil" "github.com/ethereum-optimism/optimism/op-service/sources/caching" @@ -37,8 +38,7 @@ type Metricer interface { RecordGameStep() RecordGameMove() RecordGameL2Challenge() - RecordCannonExecutionTime(t float64) - RecordAsteriscExecutionTime(t float64) + RecordVmExecutionTime(vmType string, t time.Duration) RecordClaimResolutionTime(t float64) RecordGameActTime(t float64) @@ -88,10 +88,9 @@ type Metrics struct { steps prometheus.Counter l2Challenges prometheus.Counter - claimResolutionTime prometheus.Histogram - gameActTime prometheus.Histogram - cannonExecutionTime prometheus.Histogram - asteriscExecutionTime prometheus.Histogram + claimResolutionTime prometheus.Histogram + gameActTime prometheus.Histogram + vmExecutionTime *prometheus.HistogramVec trackedGames prometheus.GaugeVec inflightGames prometheus.Gauge @@ -152,14 +151,6 @@ func NewMetrics() *Metrics { Name: "l2_challenges", Help: "Number of L2 challenges made by the challenge agent", }), - cannonExecutionTime: factory.NewHistogram(prometheus.HistogramOpts{ - Namespace: Namespace, - Name: "cannon_execution_time", - Help: "Time (in seconds) to execute cannon", - Buckets: append( - []float64{1.0, 10.0}, - prometheus.ExponentialBuckets(30.0, 2.0, 14)...), - }), claimResolutionTime: factory.NewHistogram(prometheus.HistogramOpts{ Namespace: Namespace, Name: "claim_resolution_time", @@ -174,14 +165,14 @@ func NewMetrics() *Metrics { []float64{1.0, 2.0, 5.0, 10.0}, prometheus.ExponentialBuckets(30.0, 2.0, 14)...), }), - asteriscExecutionTime: factory.NewHistogram(prometheus.HistogramOpts{ + vmExecutionTime: factory.NewHistogramVec(prometheus.HistogramOpts{ Namespace: Namespace, Name: "asterisc_execution_time", Help: "Time (in seconds) to execute asterisc", Buckets: append( []float64{1.0, 10.0}, prometheus.ExponentialBuckets(30.0, 2.0, 14)...), - }), + }, []string{"vm"}), bondClaimFailures: factory.NewCounter(prometheus.CounterOpts{ Namespace: Namespace, Name: "claim_failures", @@ -278,12 +269,8 @@ func (m *Metrics) RecordBondClaimed(amount uint64) { m.bondsClaimed.Add(float64(amount)) } -func (m *Metrics) RecordCannonExecutionTime(t float64) { - m.cannonExecutionTime.Observe(t) -} - -func (m *Metrics) RecordAsteriscExecutionTime(t float64) { - m.asteriscExecutionTime.Observe(t) +func (m *Metrics) RecordVmExecutionTime(vmType string, dur time.Duration) { + m.vmExecutionTime.WithLabelValues(vmType).Observe(dur.Seconds()) } func (m *Metrics) RecordClaimResolutionTime(t float64) { diff --git a/op-challenger/metrics/noop.go b/op-challenger/metrics/noop.go index c238f03fcb73..fc0f6d077803 100644 --- a/op-challenger/metrics/noop.go +++ b/op-challenger/metrics/noop.go @@ -2,6 +2,7 @@ package metrics import ( "io" + "time" contractMetrics "github.com/ethereum-optimism/optimism/op-challenger/game/fault/contracts/metrics" "github.com/ethereum/go-ethereum/common" @@ -37,10 +38,9 @@ func (*NoopMetricsImpl) RecordPreimageChallengeFailed() {} func (*NoopMetricsImpl) RecordBondClaimFailed() {} func (*NoopMetricsImpl) RecordBondClaimed(uint64) {} -func (*NoopMetricsImpl) RecordCannonExecutionTime(t float64) {} -func (*NoopMetricsImpl) RecordAsteriscExecutionTime(t float64) {} -func (*NoopMetricsImpl) RecordClaimResolutionTime(t float64) {} -func (*NoopMetricsImpl) RecordGameActTime(t float64) {} +func (*NoopMetricsImpl) RecordVmExecutionTime(_ string, _ time.Duration) {} +func (*NoopMetricsImpl) RecordClaimResolutionTime(t float64) {} +func (*NoopMetricsImpl) RecordGameActTime(t float64) {} func (*NoopMetricsImpl) RecordGamesStatus(inProgress, defenderWon, challengerWon int) {} diff --git a/op-e2e/e2eutils/challenger/helper.go b/op-e2e/e2eutils/challenger/helper.go index 95b963666d63..5431efbd3992 100644 --- a/op-e2e/e2eutils/challenger/helper.go +++ b/op-e2e/e2eutils/challenger/helper.go @@ -102,22 +102,22 @@ func FindMonorepoRoot(t *testing.T) string { func applyCannonConfig(c *config.Config, t *testing.T, rollupCfg *rollup.Config, l2Genesis *core.Genesis) { require := require.New(t) root := FindMonorepoRoot(t) - c.CannonBin = root + "cannon/bin/cannon" - c.CannonServer = root + "op-program/bin/op-program" + c.Cannon.VmBin = root + "cannon/bin/cannon" + c.Cannon.Server = root + "op-program/bin/op-program" c.CannonAbsolutePreState = root + "op-program/bin/prestate.json" - c.CannonSnapshotFreq = 10_000_000 + c.Cannon.SnapshotFreq = 10_000_000 genesisBytes, err := json.Marshal(l2Genesis) require.NoError(err, "marshall l2 genesis config") genesisFile := filepath.Join(c.Datadir, "l2-genesis.json") require.NoError(os.WriteFile(genesisFile, genesisBytes, 0o644)) - c.CannonL2GenesisPath = genesisFile + c.Cannon.L2GenesisPath = genesisFile rollupBytes, err := json.Marshal(rollupCfg) require.NoError(err, "marshall rollup config") rollupFile := filepath.Join(c.Datadir, "rollup.json") require.NoError(os.WriteFile(rollupFile, rollupBytes, 0o644)) - c.CannonRollupConfigPath = rollupFile + c.Cannon.RollupConfigPath = rollupFile } func WithCannon(t *testing.T, rollupCfg *rollup.Config, l2Genesis *core.Genesis) Option { @@ -177,12 +177,12 @@ func NewChallengerConfig(t *testing.T, sys EndpointProvider, l2NodeName string, require.NotEmpty(t, cfg.TxMgrConfig.PrivateKey, "Missing private key for TxMgrConfig") require.NoError(t, cfg.Check(), "op-challenger config should be valid") - if cfg.CannonBin != "" { - _, err := os.Stat(cfg.CannonBin) + if cfg.Cannon.VmBin != "" { + _, err := os.Stat(cfg.Cannon.VmBin) require.NoError(t, err, "cannon should be built. Make sure you've run make cannon-prestate") } - if cfg.CannonServer != "" { - _, err := os.Stat(cfg.CannonServer) + if cfg.Cannon.Server != "" { + _, err := os.Stat(cfg.Cannon.Server) require.NoError(t, err, "op-program should be built. Make sure you've run make cannon-prestate") } if cfg.CannonAbsolutePreState != "" { diff --git a/op-e2e/e2eutils/disputegame/output_cannon_helper.go b/op-e2e/e2eutils/disputegame/output_cannon_helper.go index 6b6e6ff4ff76..e2f72c4915d9 100644 --- a/op-e2e/e2eutils/disputegame/output_cannon_helper.go +++ b/op-e2e/e2eutils/disputegame/output_cannon_helper.go @@ -62,7 +62,7 @@ func (g *OutputCannonGameHelper) CreateHonestActor(ctx context.Context, l2Node s prestateProvider := outputs.NewPrestateProvider(rollupClient, prestateBlock) l1Head := g.GetL1Head(ctx) accessor, err := outputs.NewOutputCannonTraceAccessor( - logger, metrics.NoopMetrics, cfg, l2Client, prestateProvider, cfg.CannonAbsolutePreState, rollupClient, dir, l1Head, splitDepth, prestateBlock, poststateBlock) + logger, metrics.NoopMetrics, cfg.Cannon, l2Client, prestateProvider, cfg.CannonAbsolutePreState, rollupClient, dir, l1Head, splitDepth, prestateBlock, poststateBlock) g.Require.NoError(err, "Failed to create output cannon trace accessor") return NewOutputHonestHelper(g.T, g.Require, &g.OutputGameHelper, g.Game, accessor) } diff --git a/op-e2e/faultproofs/precompile_test.go b/op-e2e/faultproofs/precompile_test.go index 28807edee6dd..eae333443842 100644 --- a/op-e2e/faultproofs/precompile_test.go +++ b/op-e2e/faultproofs/precompile_test.go @@ -10,8 +10,8 @@ import ( "github.com/ethereum-optimism/optimism/cannon/mipsevm" "github.com/ethereum-optimism/optimism/op-challenger/config" - "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/cannon" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils" + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/vm" "github.com/ethereum-optimism/optimism/op-challenger/metrics" op_e2e "github.com/ethereum-optimism/optimism/op-e2e" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/challenger" @@ -147,7 +147,7 @@ func runCannon(t *testing.T, ctx context.Context, sys *op_e2e.System, inputs uti cannonOpts(&cfg) logger := testlog.Logger(t, log.LevelInfo).New("role", "cannon") - executor := cannon.NewExecutor(logger, metrics.NoopMetrics, &cfg, cfg.CannonAbsolutePreState, inputs) + executor := vm.NewExecutor(logger, metrics.NoopMetrics, cfg.Cannon, cfg.CannonAbsolutePreState, inputs) t.Log("Running cannon") err := executor.GenerateProof(ctx, proofsDir, math.MaxUint) From 0601149018b87b7b87aaedb3fae1e5af0cbc1e2e Mon Sep 17 00:00:00 2001 From: Kien Trinh <51135161+kien6034@users.noreply.github.com> Date: Wed, 12 Jun 2024 23:40:26 +0700 Subject: [PATCH 031/141] style: remove dup works (#10806) --- op-e2e/system_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op-e2e/system_test.go b/op-e2e/system_test.go index 4dcea8bd96c3..960c262a7755 100644 --- a/op-e2e/system_test.go +++ b/op-e2e/system_test.go @@ -1350,7 +1350,7 @@ func testFees(t *testing.T, cfg SystemConfig) { // Tally BaseFee baseFee := new(big.Int).Mul(header.BaseFee, new(big.Int).SetUint64(receipt.GasUsed)) - require.Equal(t, baseFee, baseFeeRecipientDiff, "base fee fee mismatch") + require.Equal(t, baseFee, baseFeeRecipientDiff, "base fee mismatch") // Tally L1 Fee tx, _, err := l2Seq.TransactionByHash(context.Background(), receipt.TxHash) From cb3900fec1f96dd92ef9224dc24dab555735d7fa Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Wed, 12 Jun 2024 12:55:19 -0400 Subject: [PATCH 032/141] op-e2e: Migrate more bindings away from generated bindings (#10766) --- op-challenger/game/fault/contracts/oracle.go | 11 +++- .../game/fault/contracts/oracle_test.go | 3 + op-challenger/game/fault/preimages/large.go | 5 -- op-e2e/e2eutils/disputegame/helper.go | 11 ++-- .../disputegame/preimage/preimage_helper.go | 59 +++++++------------ op-e2e/e2eutils/transactions/send.go | 5 +- op-e2e/system_test.go | 15 +++-- op-e2e/withdrawal_helper.go | 23 +++----- 8 files changed, 58 insertions(+), 74 deletions(-) diff --git a/op-challenger/game/fault/contracts/oracle.go b/op-challenger/game/fault/contracts/oracle.go index be2520bef8b5..bc0ff338615c 100644 --- a/op-challenger/game/fault/contracts/oracle.go +++ b/op-challenger/game/fault/contracts/oracle.go @@ -129,8 +129,17 @@ func (c *PreimageOracleContract) AddGlobalDataTx(data *types.PreimageOracleData) } func (c *PreimageOracleContract) InitLargePreimage(uuid *big.Int, partOffset uint32, claimedSize uint32) (txmgr.TxCandidate, error) { + bond, err := c.GetMinBondLPP(context.Background()) + if err != nil { + return txmgr.TxCandidate{}, fmt.Errorf("failed to get min bond for large preimage proposal: %w", err) + } call := c.contract.Call(methodInitLPP, uuid, partOffset, claimedSize) - return call.ToTxCandidate() + candidate, err := call.ToTxCandidate() + if err != nil { + return txmgr.TxCandidate{}, fmt.Errorf("failed to create initLPP tx candidate: %w", err) + } + candidate.Value = bond + return candidate, nil } func (c *PreimageOracleContract) AddLeaves(uuid *big.Int, startingBlockIndex *big.Int, input []byte, commitments []common.Hash, finalize bool) (txmgr.TxCandidate, error) { diff --git a/op-challenger/game/fault/contracts/oracle_test.go b/op-challenger/game/fault/contracts/oracle_test.go index 480d738bd478..7bb8158ef6a5 100644 --- a/op-challenger/game/fault/contracts/oracle_test.go +++ b/op-challenger/game/fault/contracts/oracle_test.go @@ -164,6 +164,8 @@ func TestPreimageOracleContract_InitLargePreimage(t *testing.T) { uuid := big.NewInt(123) partOffset := uint32(1) claimedSize := uint32(2) + bond := big.NewInt(42984) + stubRpc.SetResponse(oracleAddr, methodMinBondSizeLPP, rpcblock.Latest, nil, []interface{}{bond}) stubRpc.SetResponse(oracleAddr, methodInitLPP, rpcblock.Latest, []interface{}{ uuid, partOffset, @@ -173,6 +175,7 @@ func TestPreimageOracleContract_InitLargePreimage(t *testing.T) { tx, err := oracle.InitLargePreimage(uuid, partOffset, claimedSize) require.NoError(t, err) stubRpc.VerifyTxCandidate(tx) + require.Truef(t, bond.Cmp(tx.Value) == 0, "Expected bond %v got %v", bond, tx.Value) } func TestPreimageOracleContract_AddLeaves(t *testing.T) { diff --git a/op-challenger/game/fault/preimages/large.go b/op-challenger/game/fault/preimages/large.go index da28fdcf16fd..fe311bdfb150 100644 --- a/op-challenger/game/fault/preimages/large.go +++ b/op-challenger/game/fault/preimages/large.go @@ -164,11 +164,6 @@ func (p *LargePreimageUploader) initLargePreimage(uuid *big.Int, partOffset uint if err != nil { return fmt.Errorf("failed to create pre-image oracle tx: %w", err) } - bond, err := p.contract.GetMinBondLPP(context.Background()) - if err != nil { - return fmt.Errorf("failed to get min bond for large preimage proposal: %w", err) - } - candidate.Value = bond if err := p.txSender.SendAndWaitSimple("init large preimage", candidate); err != nil { return fmt.Errorf("failed to populate pre-image oracle: %w", err) } diff --git a/op-e2e/e2eutils/disputegame/helper.go b/op-e2e/e2eutils/disputegame/helper.go index 6920a6737c10..0ed6a6a6db03 100644 --- a/op-e2e/e2eutils/disputegame/helper.go +++ b/op-e2e/e2eutils/disputegame/helper.go @@ -124,15 +124,14 @@ func (h *FactoryHelper) PreimageHelper(ctx context.Context) *preimage.Helper { opts := &bind.CallOpts{Context: ctx} gameAddr, err := h.Factory.GameImpls(opts, cannonGameType) h.Require.NoError(err) - game, err := bindings.NewFaultDisputeGameCaller(gameAddr, h.Client) + caller := batching.NewMultiCaller(h.Client.Client(), batching.DefaultBatchSize) + game, err := contracts.NewFaultDisputeGameContract(ctx, metrics.NoopContractMetrics, gameAddr, caller) h.Require.NoError(err) - vmAddr, err := game.Vm(opts) + vm, err := game.Vm(ctx) h.Require.NoError(err) - vm, err := bindings.NewMIPSCaller(vmAddr, h.Client) + oracle, err := vm.Oracle(ctx) h.Require.NoError(err) - oracleAddr, err := vm.Oracle(opts) - h.Require.NoError(err) - return preimage.NewHelper(h.T, h.Opts, h.Client, oracleAddr) + return preimage.NewHelper(h.T, h.PrivKey, h.Client, oracle) } func NewGameCfg(opts ...GameOpt) *GameCfg { diff --git a/op-e2e/e2eutils/disputegame/preimage/preimage_helper.go b/op-e2e/e2eutils/disputegame/preimage/preimage_helper.go index ad043d3e37a9..e2eb49836865 100644 --- a/op-e2e/e2eutils/disputegame/preimage/preimage_helper.go +++ b/op-e2e/e2eutils/disputegame/preimage/preimage_helper.go @@ -3,6 +3,7 @@ package preimage import ( "bytes" "context" + "crypto/ecdsa" "errors" "io" "math/big" @@ -15,13 +16,12 @@ import ( "github.com/ethereum-optimism/optimism/op-challenger/game/fault/preimages" "github.com/ethereum-optimism/optimism/op-challenger/game/keccak/matrix" "github.com/ethereum-optimism/optimism/op-challenger/game/keccak/types" - "github.com/ethereum-optimism/optimism/op-e2e/bindings" + "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/transactions" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait" - "github.com/ethereum-optimism/optimism/op-service/sources/batching" "github.com/ethereum-optimism/optimism/op-service/sources/batching/rpcblock" "github.com/ethereum-optimism/optimism/op-service/testutils" - "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethclient" "github.com/stretchr/testify/require" ) @@ -29,28 +29,21 @@ import ( const MinPreimageSize = 10000 type Helper struct { - t *testing.T - require *require.Assertions - client *ethclient.Client - opts *bind.TransactOpts - oracleBindings *bindings.PreimageOracle - oracle *contracts.PreimageOracleContract - uuidProvider atomic.Int64 + t *testing.T + require *require.Assertions + client *ethclient.Client + privKey *ecdsa.PrivateKey + oracle *contracts.PreimageOracleContract + uuidProvider atomic.Int64 } -func NewHelper(t *testing.T, opts *bind.TransactOpts, client *ethclient.Client, addr common.Address) *Helper { - require := require.New(t) - oracleBindings, err := bindings.NewPreimageOracle(addr, client) - require.NoError(err) - - oracle := contracts.NewPreimageOracleContract(addr, batching.NewMultiCaller(client.Client(), batching.DefaultBatchSize)) +func NewHelper(t *testing.T, privKey *ecdsa.PrivateKey, client *ethclient.Client, oracle *contracts.PreimageOracleContract) *Helper { return &Helper{ - t: t, - require: require, - client: client, - opts: opts, - oracleBindings: oracleBindings, - oracle: oracle, + t: t, + require: require.New(t), + client: client, + privKey: privKey, + oracle: oracle, } } @@ -82,14 +75,9 @@ func (h *Helper) UploadLargePreimage(ctx context.Context, dataSize int, modifier data := testutils.RandomData(rand.New(rand.NewSource(1234)), dataSize) s := matrix.NewStateMatrix() uuid := big.NewInt(h.uuidProvider.Add(1)) - bondValue, err := h.oracleBindings.MINBONDSIZE(&bind.CallOpts{}) - h.require.NoError(err) - h.opts.Value = bondValue - tx, err := h.oracleBindings.InitLPP(h.opts, uuid, 32, uint32(len(data))) - h.require.NoError(err) - _, err = wait.ForReceiptOK(ctx, h.client, tx.Hash()) + candidate, err := h.oracle.InitLargePreimage(uuid, 32, uint32(len(data))) h.require.NoError(err) - h.opts.Value = big.NewInt(0) + transactions.RequireSendTx(h.t, ctx, h.client, candidate, h.privKey) startBlock := big.NewInt(0) totalBlocks := len(data) / types.BlockSize @@ -102,15 +90,10 @@ func (h *Helper) UploadLargePreimage(ctx context.Context, dataSize int, modifier for _, modifier := range modifiers { modifier(startBlock.Uint64(), &inputData) } - commitments := make([][32]byte, len(inputData.Commitments)) - for i, commitment := range inputData.Commitments { - commitments[i] = commitment - } - h.t.Logf("Uploading %v parts of preimage %v starting at block %v of about %v Finalize: %v", len(commitments), uuid.Uint64(), startBlock.Uint64(), totalBlocks, inputData.Finalize) - tx, err := h.oracleBindings.AddLeavesLPP(h.opts, uuid, startBlock, inputData.Input, commitments, inputData.Finalize) - h.require.NoError(err) - _, err = wait.ForReceiptOK(ctx, h.client, tx.Hash()) + h.t.Logf("Uploading %v parts of preimage %v starting at block %v of about %v Finalize: %v", len(inputData.Commitments), uuid.Uint64(), startBlock.Uint64(), totalBlocks, inputData.Finalize) + tx, err := h.oracle.AddLeaves(uuid, startBlock, inputData.Input, inputData.Commitments, inputData.Finalize) h.require.NoError(err) + transactions.RequireSendTx(h.t, ctx, h.client, tx, h.privKey) startBlock = new(big.Int).Add(startBlock, big.NewInt(int64(len(inputData.Commitments)))) if inputData.Finalize { break @@ -118,7 +101,7 @@ func (h *Helper) UploadLargePreimage(ctx context.Context, dataSize int, modifier } return types.LargePreimageIdent{ - Claimant: h.opts.From, + Claimant: crypto.PubkeyToAddress(h.privKey.PublicKey), UUID: uuid, } } diff --git a/op-e2e/e2eutils/transactions/send.go b/op-e2e/e2eutils/transactions/send.go index 09bc029daddc..eb229e3fb4f2 100644 --- a/op-e2e/e2eutils/transactions/send.go +++ b/op-e2e/e2eutils/transactions/send.go @@ -44,9 +44,10 @@ func WithReceiptFail() SendTxOpt { } } -func RequireSendTx(t *testing.T, ctx context.Context, client *ethclient.Client, candidate txmgr.TxCandidate, privKey *ecdsa.PrivateKey, opts ...SendTxOpt) { - _, _, err := SendTx(ctx, client, candidate, privKey, opts...) +func RequireSendTx(t *testing.T, ctx context.Context, client *ethclient.Client, candidate txmgr.TxCandidate, privKey *ecdsa.PrivateKey, opts ...SendTxOpt) (*types.Transaction, *types.Receipt) { + tx, rcpt, err := SendTx(ctx, client, candidate, privKey, opts...) require.NoError(t, err, "Failed to send transaction") + return tx, rcpt } func SendTx(ctx context.Context, client *ethclient.Client, candidate txmgr.TxCandidate, privKey *ecdsa.PrivateKey, opts ...SendTxOpt) (*types.Transaction, *types.Receipt, error) { diff --git a/op-e2e/system_test.go b/op-e2e/system_test.go index 960c262a7755..30f15f7e2060 100644 --- a/op-e2e/system_test.go +++ b/op-e2e/system_test.go @@ -11,6 +11,9 @@ import ( "testing" "time" + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/contracts" + metrics2 "github.com/ethereum-optimism/optimism/op-challenger/game/fault/contracts/metrics" + "github.com/ethereum-optimism/optimism/op-service/sources/batching" "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" @@ -192,21 +195,21 @@ func TestL2OutputSubmitterFaultProofs(t *testing.T) { require.Nil(t, err) if latestGameCount.Cmp(initialGameCount) > 0 { + caller := batching.NewMultiCaller(l1Client.Client(), batching.DefaultBatchSize) committedL2Output, err := disputeGameFactory.GameAtIndex(&bind.CallOpts{}, new(big.Int).Sub(latestGameCount, common.Big1)) require.Nil(t, err) - proxy, err := bindings.NewFaultDisputeGameCaller(committedL2Output.Proxy, l1Client) + proxy, err := contracts.NewFaultDisputeGameContract(context.Background(), metrics2.NoopContractMetrics, committedL2Output.Proxy, caller) require.Nil(t, err) - committedOutputRoot, err := proxy.RootClaim(&bind.CallOpts{}) + claim, err := proxy.GetClaim(context.Background(), 0) require.Nil(t, err) ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() - extradata, err := proxy.ExtraData(&bind.CallOpts{}) + _, gameBlockNumber, err := proxy.GetBlockRange(ctx) require.Nil(t, err) - gameBlockNumber := new(big.Int).SetBytes(extradata[0:32]) - l2Output, err := rollupClient.OutputAtBlock(ctx, gameBlockNumber.Uint64()) + l2Output, err := rollupClient.OutputAtBlock(ctx, gameBlockNumber) require.Nil(t, err) - require.Equal(t, l2Output.OutputRoot[:], committedOutputRoot[:]) + require.EqualValues(t, l2Output.OutputRoot, claim.Value) break } diff --git a/op-e2e/withdrawal_helper.go b/op-e2e/withdrawal_helper.go index 47bb9e8ddfa9..bc6b516c3001 100644 --- a/op-e2e/withdrawal_helper.go +++ b/op-e2e/withdrawal_helper.go @@ -10,10 +10,10 @@ import ( "github.com/ethereum-optimism/optimism/op-chain-ops/crossdomain" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/contracts" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/contracts/metrics" - legacybindings "github.com/ethereum-optimism/optimism/op-e2e/bindings" "github.com/ethereum-optimism/optimism/op-e2e/config" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/geth" + "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/transactions" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait" "github.com/ethereum-optimism/optimism/op-node/bindings" bindingspreview "github.com/ethereum-optimism/optimism/op-node/bindings/preview" @@ -201,9 +201,6 @@ func FinalizeWithdrawal(t *testing.T, cfg SystemConfig, l1Client *ethclient.Clie require.Nil(t, err) require.NotNil(t, game, "withdrawal should be proven") - proxy, err := legacybindings.NewFaultDisputeGame(game.DisputeGameProxy, l1Client) - require.Nil(t, err) - caller := batching.NewMultiCaller(l1Client.Client(), batching.DefaultBatchSize) gameContract, err := contracts.NewFaultDisputeGameContract(context.Background(), metrics.NoopContractMetrics, game.DisputeGameProxy, caller) require.Nil(t, err) @@ -216,19 +213,13 @@ func FinalizeWithdrawal(t *testing.T, cfg SystemConfig, l1Client *ethclient.Clie return err == nil, nil })) - resolveClaimTx, err := proxy.ResolveClaim(opts, common.Big0, common.Big0) - require.Nil(t, err) - - resolveClaimReceipt, err = wait.ForReceiptOK(ctx, l1Client, resolveClaimTx.Hash()) - require.Nil(t, err, "resolve claim") - require.Equal(t, types.ReceiptStatusSuccessful, resolveClaimReceipt.Status) - - resolveTx, err := proxy.Resolve(opts) - require.Nil(t, err) + tx, err := gameContract.ResolveClaimTx(0) + require.NoError(t, err, "create resolveClaim tx") + _, resolveClaimReceipt = transactions.RequireSendTx(t, ctx, l1Client, tx, privKey) - resolveReceipt, err = wait.ForReceiptOK(ctx, l1Client, resolveTx.Hash()) - require.Nil(t, err, "resolve") - require.Equal(t, types.ReceiptStatusSuccessful, resolveReceipt.Status) + tx, err = gameContract.ResolveTx() + require.NoError(t, err, "create resolve tx") + _, resolveReceipt = transactions.RequireSendTx(t, ctx, l1Client, tx, privKey) } if e2eutils.UseFaultProofs() { From 6e1dbea15447b4fb8be055b754a1ed74e3174224 Mon Sep 17 00:00:00 2001 From: Inphi Date: Wed, 12 Jun 2024 12:23:10 -0700 Subject: [PATCH 033/141] ci: Update scheduled-preimage-repro (#10807) --- .circleci/config.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index de393bf98188..32eaa935310e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1071,6 +1071,8 @@ jobs: echo 'export EXPECTED_PRESTATE_HASH="0x037ef3c1a487960b0e633d3e513df020c43432769f41a634d18a9595cbf53c55"' >> $BASH_ENV elif [[ "<>" == "1.1.0" ]]; then echo 'export EXPECTED_PRESTATE_HASH="0x03e69d3de5155f4a80da99dd534561cbddd4f9dd56c9ecc704d6886625711d2b"' >> $BASH_ENV + elif [[ "<>" == "1.2.0" ]]; then + echo 'export EXPECTED_PRESTATE_HASH="0x03617abec0b255dc7fc7a0513a2c2220140a1dcd7a1c8eca567659bd67e05cea"' >> $BASH_ENV else echo "Unknown prestate version <>" exit 1 @@ -2188,6 +2190,6 @@ workflows: - preimage-reproducibility: matrix: parameters: - version: ["0.1.0", "0.2.0", "0.3.0", "1.0.0", "1.1.0"] + version: ["0.1.0", "0.2.0", "0.3.0", "1.0.0", "1.1.0", "1.2.0"] context: slack From 81c7aa03af291cde5c48774c340330e373b227d4 Mon Sep 17 00:00:00 2001 From: Joshua Gutow Date: Thu, 13 Jun 2024 06:57:13 -0700 Subject: [PATCH 034/141] Alt-DA: Refactor DAState and DAMgr to Separate Commitment and Challenge Tracking (#10618) * plasma: Split commitments & challenges This splits the current two queues into four queues. Two for commitments and two for challenges. Challenges are commitments are split because they are different things. Each has two physical queues to differentiate between items which have not expired and items which have expired but not finalized. This also splits the commitment origin from the challenge origin because the challenge origin can advance independently of the commitment origin. * Cleanup Refactor ; Fix Tests Reading over the refactor and understanding it for myself, I made some organizational edits, and fixed an issue in the E2E tests. * remove commented assert * Update op-plasma/damgr.go Co-authored-by: Adrian Sutton * add warn log for DA Server Not Found errors --------- Co-authored-by: axelKingsley Co-authored-by: Adrian Sutton --- op-node/rollup/derive/data_source.go | 4 +- op-node/rollup/derive/plasma_data_source.go | 6 +- .../rollup/derive/plasma_data_source_test.go | 19 +- op-plasma/commitment.go | 12 +- op-plasma/daclient_test.go | 9 +- op-plasma/damgr.go | 286 ++++++++------ op-plasma/damgr_test.go | 350 +++++++----------- op-plasma/damock.go | 2 +- op-plasma/dastate.go | 346 +++++++++-------- 9 files changed, 527 insertions(+), 507 deletions(-) diff --git a/op-node/rollup/derive/data_source.go b/op-node/rollup/derive/data_source.go index 5f2e48199bf3..39b62de2e54f 100644 --- a/op-node/rollup/derive/data_source.go +++ b/op-node/rollup/derive/data_source.go @@ -28,7 +28,7 @@ type L1BlobsFetcher interface { type PlasmaInputFetcher interface { // GetInput fetches the input for the given commitment at the given block number from the DA storage service. - GetInput(ctx context.Context, l1 plasma.L1Fetcher, c plasma.CommitmentData, blockId eth.BlockID) (eth.Data, error) + GetInput(ctx context.Context, l1 plasma.L1Fetcher, c plasma.CommitmentData, blockId eth.L1BlockRef) (eth.Data, error) // AdvanceL1Origin advances the L1 origin to the given block number, syncing the DA challenge events. AdvanceL1Origin(ctx context.Context, l1 plasma.L1Fetcher, blockId eth.BlockID) error // Reset the challenge origin in case of L1 reorg @@ -78,7 +78,7 @@ func (ds *DataSourceFactory) OpenData(ctx context.Context, ref eth.L1BlockRef, b } if ds.dsCfg.plasmaEnabled { // plasma([calldata | blobdata](l1Ref)) -> data - return NewPlasmaDataSource(ds.log, src, ds.fetcher, ds.plasmaFetcher, ref.ID()), nil + return NewPlasmaDataSource(ds.log, src, ds.fetcher, ds.plasmaFetcher, ref), nil } return src, nil } diff --git a/op-node/rollup/derive/plasma_data_source.go b/op-node/rollup/derive/plasma_data_source.go index 9db4dd1cc553..e0b94d412b29 100644 --- a/op-node/rollup/derive/plasma_data_source.go +++ b/op-node/rollup/derive/plasma_data_source.go @@ -17,12 +17,12 @@ type PlasmaDataSource struct { src DataIter fetcher PlasmaInputFetcher l1 L1Fetcher - id eth.BlockID + id eth.L1BlockRef // keep track of a pending commitment so we can keep trying to fetch the input. comm plasma.CommitmentData } -func NewPlasmaDataSource(log log.Logger, src DataIter, l1 L1Fetcher, fetcher PlasmaInputFetcher, id eth.BlockID) *PlasmaDataSource { +func NewPlasmaDataSource(log log.Logger, src DataIter, l1 L1Fetcher, fetcher PlasmaInputFetcher, id eth.L1BlockRef) *PlasmaDataSource { return &PlasmaDataSource{ log: log, src: src, @@ -37,7 +37,7 @@ func (s *PlasmaDataSource) Next(ctx context.Context) (eth.Data, error) { // before we can proceed to fetch the input data. This function can be called multiple times // for the same origin and noop if the origin was already processed. It is also called if // there is not commitment in the current origin. - if err := s.fetcher.AdvanceL1Origin(ctx, s.l1, s.id); err != nil { + if err := s.fetcher.AdvanceL1Origin(ctx, s.l1, s.id.ID()); err != nil { if errors.Is(err, plasma.ErrReorgRequired) { return nil, NewResetError(fmt.Errorf("new expired challenge")) } diff --git a/op-node/rollup/derive/plasma_data_source_test.go b/op-node/rollup/derive/plasma_data_source_test.go index ae13be8e37f8..606f754f9930 100644 --- a/op-node/rollup/derive/plasma_data_source_test.go +++ b/op-node/rollup/derive/plasma_data_source_test.go @@ -56,7 +56,7 @@ func TestPlasmaDataSource(t *testing.T) { } metrics := &plasma.NoopMetrics{} - daState := plasma.NewState(logger, metrics) + daState := plasma.NewState(logger, metrics, pcfg) da := plasma.NewPlasmaDAWithState(logger, pcfg, storage, metrics, daState) @@ -97,6 +97,7 @@ func TestPlasmaDataSource(t *testing.T) { // keep track of random input data to validate against var inputs [][]byte var comms []plasma.CommitmentData + var inclusionBlocks []eth.L1BlockRef signer := cfg.L1Signer() @@ -131,6 +132,7 @@ func TestPlasmaDataSource(t *testing.T) { kComm := comm.(plasma.Keccak256Commitment) inputs = append(inputs, input) comms = append(comms, kComm) + inclusionBlocks = append(inclusionBlocks, ref) tx, err := types.SignNewTx(batcherPriv, signer, &types.DynamicFeeTx{ ChainID: signer.ChainID(), @@ -161,7 +163,7 @@ func TestPlasmaDataSource(t *testing.T) { if len(comms) >= 4 && nc < 7 { // skip a block between each challenge transaction if nc%2 == 0 { - daState.SetActiveChallenge(comms[nc/2].Encode(), ref.Number, pcfg.ResolveWindow) + daState.CreateChallenge(comms[nc/2], ref.ID(), inclusionBlocks[nc/2].Number) logger.Info("setting active challenge", "comm", comms[nc/2]) } nc++ @@ -275,11 +277,9 @@ func TestPlasmaDataSource(t *testing.T) { } - // trigger l1 finalization signal - da.Finalize(l1Refs[len(l1Refs)-32]) - + // finalize based on the second to last block, which will prune the commitment on block 2, and make it finalized + da.Finalize(l1Refs[len(l1Refs)-2]) finalitySignal.AssertExpectations(t) - l1F.AssertExpectations(t) } // This tests makes sure the pipeline returns a temporary error if data is not found. @@ -299,7 +299,7 @@ func TestPlasmaDataSourceStall(t *testing.T) { metrics := &plasma.NoopMetrics{} - daState := plasma.NewState(logger, metrics) + daState := plasma.NewState(logger, metrics, pcfg) da := plasma.NewPlasmaDAWithState(logger, pcfg, storage, metrics, daState) @@ -396,8 +396,11 @@ func TestPlasmaDataSourceStall(t *testing.T) { _, err = src.Next(ctx) require.ErrorIs(t, err, NotEnoughData) + // create and resolve a challenge + daState.CreateChallenge(comm, ref.ID(), ref.Number) // now challenge is resolved - daState.SetResolvedChallenge(comm.Encode(), input, ref.Number+2) + err = daState.ResolveChallenge(comm, eth.BlockID{Number: ref.Number + 2}, ref.Number, input) + require.NoError(t, err) // derivation can resume data, err := src.Next(ctx) diff --git a/op-plasma/commitment.go b/op-plasma/commitment.go index 0edb4ad2f14c..763d2b8cf20c 100644 --- a/op-plasma/commitment.go +++ b/op-plasma/commitment.go @@ -2,6 +2,7 @@ package plasma import ( "bytes" + "encoding/hex" "errors" "fmt" @@ -29,7 +30,7 @@ func CommitmentTypeFromString(s string) (CommitmentType, error) { } // CommitmentType describes the binary format of the commitment. -// KeccakCommitmentStringType is the default commitment type for the centralized DA storage. +// KeccakCommitmentType is the default commitment type for the centralized DA storage. // GenericCommitmentType indicates an opaque bytestring that the op-node never opens. const ( Keccak256CommitmentType CommitmentType = 0 @@ -44,6 +45,7 @@ type CommitmentData interface { Encode() []byte TxData() []byte Verify(input []byte) error + String() string } // Keccak256Commitment is an implementation of CommitmentData that uses Keccak256 as the commitment function. @@ -124,6 +126,10 @@ func (c Keccak256Commitment) Verify(input []byte) error { return nil } +func (c Keccak256Commitment) String() string { + return hex.EncodeToString(c.Encode()) +} + // NewGenericCommitment creates a new commitment from the given input. func NewGenericCommitment(input []byte) GenericCommitment { return GenericCommitment(input) @@ -156,3 +162,7 @@ func (c GenericCommitment) TxData() []byte { func (c GenericCommitment) Verify(input []byte) error { return nil } + +func (c GenericCommitment) String() string { + return hex.EncodeToString(c.Encode()) +} diff --git a/op-plasma/daclient_test.go b/op-plasma/daclient_test.go index 8f5aa55053bc..c933526900c5 100644 --- a/op-plasma/daclient_test.go +++ b/op-plasma/daclient_test.go @@ -9,7 +9,6 @@ import ( "github.com/ethereum-optimism/optimism/op-service/testlog" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" "github.com/stretchr/testify/require" ) @@ -116,7 +115,7 @@ func TestDAClientService(t *testing.T) { Enabled: true, DAServerURL: fmt.Sprintf("http://%s", server.Endpoint()), VerifyOnRead: false, - GenericDA: true, + GenericDA: false, } require.NoError(t, cfg.Check()) @@ -129,7 +128,7 @@ func TestDAClientService(t *testing.T) { comm, err := client.SetInput(ctx, input) require.NoError(t, err) - require.Equal(t, comm, NewGenericCommitment(crypto.Keccak256(input))) + require.Equal(t, comm.String(), NewKeccak256Commitment(input).String()) stored, err := client.GetInput(ctx, comm) require.NoError(t, err) @@ -144,7 +143,7 @@ func TestDAClientService(t *testing.T) { require.NoError(t, err) // test not found error - comm = NewGenericCommitment(RandomData(rng, 32)) + comm = NewKeccak256Commitment(RandomData(rng, 32)) _, err = client.GetInput(ctx, comm) require.ErrorIs(t, err, ErrNotFound) @@ -157,6 +156,6 @@ func TestDAClientService(t *testing.T) { _, err = client.SetInput(ctx, input) require.Error(t, err) - _, err = client.GetInput(ctx, NewGenericCommitment(input)) + _, err = client.GetInput(ctx, NewKeccak256Commitment(input)) require.Error(t, err) } diff --git a/op-plasma/damgr.go b/op-plasma/damgr.go index b3604ac1c7ef..90e18cecb4c2 100644 --- a/op-plasma/damgr.go +++ b/op-plasma/damgr.go @@ -63,22 +63,18 @@ type DA struct { log log.Logger cfg Config metrics Metricer - storage DAStorage + state *State // the DA state keeps track of all the commitments and their challenge status. - // the DA state keeps track of all the commitments and their challenge status. - state *State + challengeOrigin eth.BlockID // the highest l1 block we synced challenge contract events from + commitmentOrigin eth.BlockID // the highest l1 block we read commitments from + finalizedHead eth.L1BlockRef // the latest recorded finalized head as per the challenge contract + l1FinalizedHead eth.L1BlockRef // the latest recorded finalized head as per the l1 finalization signal - // the latest l1 block we synced challenge contract events from - origin eth.BlockID - // the latest recorded finalized head as per the challenge contract - finalizedHead eth.L1BlockRef - // the latest recorded finalized head as per the l1 finalization signal - l1FinalizedHead eth.L1BlockRef // flag the reset function we are resetting because of an expired challenge resetting bool - finalizedHeadSignalFunc HeadSignalFn + finalizedHeadSignalHandler HeadSignalFn } // NewPlasmaDA creates a new PlasmaDA instance with the given log and CLIConfig. @@ -93,7 +89,7 @@ func NewPlasmaDAWithStorage(log log.Logger, cfg Config, storage DAStorage, metri cfg: cfg, storage: storage, metrics: metrics, - state: NewState(log, metrics), + state: NewState(log, metrics, cfg), } } @@ -112,40 +108,64 @@ func NewPlasmaDAWithState(log log.Logger, cfg Config, storage DAStorage, metrics // OnFinalizedHeadSignal sets the callback function to be called when the finalized head is updated. // This will signal to the engine queue that will set the proper L2 block as finalized. func (d *DA) OnFinalizedHeadSignal(f HeadSignalFn) { - d.finalizedHeadSignalFunc = f + d.finalizedHeadSignalHandler = f } -// Finalize takes the L1 finality signal, compares the plasma finalized block and forwards the finality -// signal to the engine queue based on whichever is most behind. -func (d *DA) Finalize(l1Finalized eth.L1BlockRef) { - ref := d.finalizedHead - d.log.Info("received l1 finalized signal, forwarding to engine queue", "l1", l1Finalized, "plasma", ref) - // if the l1 finalized head is behind it is the finalized head - if l1Finalized.Number < d.finalizedHead.Number { - ref = l1Finalized +// updateFinalizedHead sets the finalized head and prunes the state to the L1 Finalized head. +// the finalized head is set to the latest reference pruned in this way. +// It is called by the Finalize function, as it has an L1 finalized head to use. +func (d *DA) updateFinalizedHead(l1Finalized eth.L1BlockRef) { + d.l1FinalizedHead = l1Finalized + // Prune the state to the finalized head + d.state.Prune(l1Finalized.ID()) + d.finalizedHead = d.state.lastPrunedCommitment +} + +// updateFinalizedFromL1 updates the finalized head based on the challenge window. +// it uses the L1 fetcher to get the block reference at the finalized head - challenge window. +// It is called in AdvanceL1Origin if there are no commitments to finalize, as it has an L1 fetcher to use. +func (d *DA) updateFinalizedFromL1(ctx context.Context, l1 L1Fetcher) error { + // don't update if the finalized head is smaller than the challenge window + if d.l1FinalizedHead.Number < d.cfg.ChallengeWindow { + return nil } - // prune finalized state - d.state.Prune(ref.Number) + ref, err := l1.L1BlockRefByNumber(ctx, d.l1FinalizedHead.Number-d.cfg.ChallengeWindow) + if err != nil { + return err + } + d.finalizedHead = ref + return nil +} - if d.finalizedHeadSignalFunc == nil { - d.log.Warn("finalized head signal function not set") +// Finalize sets the L1 finalized head signal and calls the handler function if set. +func (d *DA) Finalize(l1Finalized eth.L1BlockRef) { + d.updateFinalizedHead(l1Finalized) + d.metrics.RecordChallengesHead("finalized", d.finalizedHead.Number) + + // Record and Log the latest L1 finalized head + d.log.Info("received l1 finalized signal, forwarding plasma finalization to finalizedHeadSignalHandler", + "l1", l1Finalized, + "plasma", d.finalizedHead) + + // execute the handler function if set + // the handler function is called with the plasma finalized head + if d.finalizedHeadSignalHandler == nil { + d.log.Warn("finalized head signal handler not set") return } - - // signal the engine queue - d.finalizedHeadSignalFunc(ref) + d.finalizedHeadSignalHandler(d.finalizedHead) } // LookAhead increments the challenges origin and process the new block if it exists. // It is used when the derivation pipeline stalls due to missing data and we need to continue // syncing challenge events until the challenge is resolved or expires. func (d *DA) LookAhead(ctx context.Context, l1 L1Fetcher) error { - blkRef, err := l1.L1BlockRefByNumber(ctx, d.origin.Number+1) + blkRef, err := l1.L1BlockRefByNumber(ctx, d.challengeOrigin.Number+1) // temporary error, will do a backoff if err != nil { return err } - return d.AdvanceL1Origin(ctx, l1, blkRef.ID()) + return d.AdvanceChallengeOrigin(ctx, l1, blkRef.ID()) } // Reset the challenge event derivation origin in case of L1 reorg @@ -157,9 +177,12 @@ func (d *DA) Reset(ctx context.Context, base eth.L1BlockRef, baseCfg eth.SystemC // from this stage of the pipeline. if d.resetting { d.resetting = false + d.commitmentOrigin = base.ID() + d.state.ClearCommitments() } else { // resetting due to L1 reorg, clear state - d.origin = base.ID() + d.challengeOrigin = base.ID() + d.commitmentOrigin = base.ID() d.state.Reset() } return io.EOF @@ -167,22 +190,26 @@ func (d *DA) Reset(ctx context.Context, base eth.L1BlockRef, baseCfg eth.SystemC // GetInput returns the input data for the given commitment bytes. blockNumber is required to lookup // the challenge status in the DataAvailabilityChallenge L1 contract. -func (d *DA) GetInput(ctx context.Context, l1 L1Fetcher, comm CommitmentData, blockId eth.BlockID) (eth.Data, error) { +func (d *DA) GetInput(ctx context.Context, l1 L1Fetcher, comm CommitmentData, blockId eth.L1BlockRef) (eth.Data, error) { // If it's not the right commitment type, report it as an expired commitment in order to skip it if d.cfg.CommitmentType != comm.CommitmentType() { return nil, fmt.Errorf("invalid commitment type; expected: %v, got: %v: %w", d.cfg.CommitmentType, comm.CommitmentType(), ErrExpiredChallenge) } - // If the challenge head is ahead in the case of a pipeline reset or stall, we might have synced a - // challenge event for this commitment. Otherwise we mark the commitment as part of the canonical - // chain so potential future challenge events can be selected. - ch := d.state.GetOrTrackChallenge(comm.Encode(), blockId.Number, d.cfg.ChallengeWindow) + status := d.state.GetChallengeStatus(comm, blockId.Number) + // check if the challenge is expired + if status == ChallengeExpired { + // Don't track the expired commitment. If we hit this case we have seen an expired challenge, but never used the data. + // this indicates that the data which might cause us to reorg is expired (not to be used) so we can optimize by skipping the reorg. + // If we used the data & then expire the challenge later, we do that during the AdvanceChallengeOrigin step + return nil, ErrExpiredChallenge + } + // Record the commitment for later finalization / invalidation + d.state.TrackCommitment(comm, blockId) + d.log.Info("getting input", "comm", comm, "status", status) // Fetch the input from the DA storage. data, err := d.storage.GetInput(ctx, comm) - - // data is not found in storage but may be available if the challenge was resolved. notFound := errors.Is(ErrNotFound, err) - if err != nil && !notFound { d.log.Error("failed to get preimage", "err", err) // the storage client request failed for some other reason @@ -190,103 +217,117 @@ func (d *DA) GetInput(ctx context.Context, l1 L1Fetcher, comm CommitmentData, bl return nil, err } - switch ch.challengeStatus { - case ChallengeActive: - if d.isExpired(ch.expiresAt) { - // this challenge has expired, this input must be skipped - return nil, ErrExpiredChallenge - } else if notFound { - // data is missing and a challenge is active, we must wait for the challenge to resolve + // If the data is not found, things are handled differently based on the challenge status. + if notFound { + log.Warn("data not found for the given commitment", "comm", comm, "status", status, "block", blockId.Number) + switch status { + case ChallengeUninitialized: + // If this commitment was never challenged & we can't find the data, treat it as unrecoverable. + if d.challengeOrigin.Number > blockId.Number+d.cfg.ChallengeWindow { + return nil, ErrMissingPastWindow + } + // Otherwise continue syncing challenges hoping it eventually is challenged and resolved + if err := d.LookAhead(ctx, l1); err != nil { + return nil, err + } + return nil, ErrPendingChallenge + case ChallengeActive: + // If the commitment is active, we must wait for the challenge to resolve // hence we continue syncing new origins to sync the new challenge events. + // Active challenges are expired by the AdvanceChallengeOrigin function which calls state.ExpireChallenges if err := d.LookAhead(ctx, l1); err != nil { return nil, err } return nil, ErrPendingChallenge - } - case ChallengeExpired: - // challenge was marked as expired, skip - return nil, ErrExpiredChallenge - case ChallengeResolved: - // challenge was resolved, data is available in storage, return directly - if !notFound { - return data, nil - } - // Generic Commitments don't resolve from L1 so if we still can't find the data with out of luck - if comm.CommitmentType() == GenericCommitmentType { - return nil, ErrMissingPastWindow - } - // data not found in storage, return from challenge resolved input - resolvedInput, err := d.state.GetResolvedInput(comm.Encode()) - if err != nil { - return nil, err - } - return resolvedInput, nil - default: - if notFound { - if d.isExpired(ch.expiresAt) { - // we're past the challenge window and the data is not available + case ChallengeResolved: + // Generic Commitments don't resolve from L1 so if we still can't find the data we're out of luck + if comm.CommitmentType() == GenericCommitmentType { return nil, ErrMissingPastWindow - } else { - // continue syncing challenges hoping it eventually is challenged and resolved - if err := d.LookAhead(ctx, l1); err != nil { - return nil, err - } - return nil, ErrPendingChallenge + } + // Keccak commitments resolve from L1, so we should have the data in the challenge resolved input + if comm.CommitmentType() == Keccak256CommitmentType { + ch, _ := d.state.GetChallenge(comm, blockId.Number) + return ch.input, nil } } } + // regardless of the potential notFound error, if this challenge status is not handled, return an error + if status != ChallengeUninitialized && status != ChallengeActive && status != ChallengeResolved { + return nil, fmt.Errorf("unknown challenge status: %v", status) + } return data, nil } -// isExpired returns whether the given expiration block number is lower or equal to the current head -func (d *DA) isExpired(bn uint64) bool { - return d.origin.Number >= bn +// AdvanceChallengeOrigin reads & stores challenge events for the given L1 block +func (d *DA) AdvanceChallengeOrigin(ctx context.Context, l1 L1Fetcher, block eth.BlockID) error { + // do not repeat for the same or old origin + if block.Number <= d.challengeOrigin.Number { + return nil + } + + // load challenge events from the l1 block + if err := d.loadChallengeEvents(ctx, l1, block); err != nil { + return err + } + + // Expire challenges + d.state.ExpireChallenges(block) + + // set and record the new challenge origin + d.challengeOrigin = block + d.metrics.RecordChallengesHead("latest", d.challengeOrigin.Number) + d.log.Info("processed plasma challenge origin", "origin", block) + return nil } -// AdvanceL1Origin syncs any challenge events included in the l1 block, expires any active challenges -// after the new resolveWindow, computes and signals the new finalized head and sets the l1 block -// as the new head for tracking challenges. If forwards an error if any new challenge have expired to -// trigger a derivation reset. -func (d *DA) AdvanceL1Origin(ctx context.Context, l1 L1Fetcher, block eth.BlockID) error { +// AdvanceCommitmentOrigin updates the commitment origin and the finalized head. +func (d *DA) AdvanceCommitmentOrigin(ctx context.Context, l1 L1Fetcher, block eth.BlockID) error { // do not repeat for the same origin - if block.Number <= d.origin.Number { + if block.Number <= d.commitmentOrigin.Number { return nil } - // sync challenges for the given block ID - if err := d.LoadChallengeEvents(ctx, l1, block); err != nil { - return err - } - // advance challenge window, computing the finalized head - bn, err := d.state.ExpireChallenges(block.Number) + + // Expire commitments + err := d.state.ExpireCommitments(block) if err != nil { // warn the reset function not to clear the state d.resetting = true return err } - // finalized head signal is called only when the finalized head number increases - // and the l1 finalized head ahead of the DA finalized head. - if bn > d.finalizedHead.Number { - ref, err := l1.L1BlockRefByNumber(ctx, bn) - if err != nil { + // set and record the new commitment origin + d.commitmentOrigin = block + d.metrics.RecordChallengesHead("latest", d.challengeOrigin.Number) + d.log.Info("processed plasma l1 origin", "origin", block, "finalized", d.finalizedHead.ID(), "l1-finalize", d.l1FinalizedHead.ID()) + + return nil +} + +// AdvanceL1Origin syncs any challenge events included in the l1 block, expires any active challenges +// after the new resolveWindow, computes and signals the new finalized head and sets the l1 block +// as the new head for tracking challenges and commitments. If forwards an error if any new challenge have expired to +// trigger a derivation reset. +func (d *DA) AdvanceL1Origin(ctx context.Context, l1 L1Fetcher, block eth.BlockID) error { + if err := d.AdvanceChallengeOrigin(ctx, l1, block); err != nil { + return fmt.Errorf("failed to advance challenge origin: %w", err) + } + if err := d.AdvanceCommitmentOrigin(ctx, l1, block); err != nil { + return fmt.Errorf("failed to advance commitment origin: %w", err) + } + // if there are no commitments, we can calculate the finalized head based on the challenge window + // otherwise, the finalization signal is used to set the finalized head + if d.state.NoCommitments() { + if err := d.updateFinalizedFromL1(ctx, l1); err != nil { return err } - d.metrics.RecordChallengesHead("finalized", bn) - - // keep track of finalized had so it can be picked up by the - // l1 finalization signal - d.finalizedHead = ref + d.metrics.RecordChallengesHead("finalized", d.finalizedHead.Number) } - d.origin = block - d.metrics.RecordChallengesHead("latest", d.origin.Number) - - d.log.Info("processed plasma l1 origin", "origin", block, "next-finalized", bn, "finalized", d.finalizedHead.Number, "l1-finalize", d.l1FinalizedHead.Number) return nil } -// LoadChallengeEvents fetches the l1 block receipts and updates the challenge status -func (d *DA) LoadChallengeEvents(ctx context.Context, l1 L1Fetcher, block eth.BlockID) error { +// loadChallengeEvents fetches the l1 block receipts and updates the challenge status +func (d *DA) loadChallengeEvents(ctx context.Context, l1 L1Fetcher, block eth.BlockID) error { // filter any challenge event logs in the block logs, err := d.fetchChallengeLogs(ctx, l1, block) if err != nil { @@ -295,7 +336,7 @@ func (d *DA) LoadChallengeEvents(ctx context.Context, l1 L1Fetcher, block eth.Bl for _, log := range logs { i := log.TxIndex - status, comm, err := d.decodeChallengeStatus(log) + status, comm, bn, err := d.decodeChallengeStatus(log) if err != nil { d.log.Error("failed to decode challenge event", "block", block.Number, "tx", i, "log", log.Index, "err", err) continue @@ -320,6 +361,7 @@ func (d *DA) LoadChallengeEvents(ctx context.Context, l1 L1Fetcher, block eth.Bl d.log.Error("tx hash mismatch", "block", block.Number, "txIdx", i, "log", log.Index, "txHash", tx.Hash(), "receiptTxHash", log.TxHash) continue } + var input []byte if d.cfg.CommitmentType == Keccak256CommitmentType { // Decode the input from resolver tx calldata @@ -333,13 +375,19 @@ func (d *DA) LoadChallengeEvents(ctx context.Context, l1 L1Fetcher, block eth.Bl continue } } - d.log.Info("challenge resolved", "block", block, "txIdx", i, "comm", comm.Encode()) - d.state.SetResolvedChallenge(comm.Encode(), input, log.BlockNumber) + + d.log.Info("challenge resolved", "block", block, "txIdx", i) + // Resolve challenge in state + if err := d.state.ResolveChallenge(comm, block, bn, input); err != nil { + d.log.Error("failed to resolve challenge", "block", block.Number, "txIdx", i, "err", err) + continue + } case ChallengeActive: - d.log.Info("detected new active challenge", "block", block, "comm", comm.Encode()) - d.state.SetActiveChallenge(comm.Encode(), log.BlockNumber, d.cfg.ResolveWindow) + // create challenge in state + d.log.Info("detected new active challenge", "block", block, "comm", comm) + d.state.CreateChallenge(comm, block, bn) default: - d.log.Warn("skipping unknown challenge status", "block", block.Number, "tx", i, "log", log.Index, "status", status, "comm", comm.Encode()) + d.log.Warn("skipping unknown challenge status", "block", block.Number, "tx", i, "log", log.Index, "status", status, "comm", comm) } } return nil @@ -374,25 +422,17 @@ func (d *DA) fetchChallengeLogs(ctx context.Context, l1 L1Fetcher, block eth.Blo } // decodeChallengeStatus decodes and validates a challenge event from a transaction log, returning the associated commitment bytes. -func (d *DA) decodeChallengeStatus(log *types.Log) (ChallengeStatus, CommitmentData, error) { +func (d *DA) decodeChallengeStatus(log *types.Log) (ChallengeStatus, CommitmentData, uint64, error) { event, err := DecodeChallengeStatusEvent(log) if err != nil { - return 0, nil, err + return 0, nil, 0, err } comm, err := DecodeCommitmentData(event.ChallengedCommitment) if err != nil { - return 0, nil, err + return 0, nil, 0, err } d.log.Debug("decoded challenge status event", "log", log, "event", event, "comm", fmt.Sprintf("%x", comm.Encode())) - - bn := event.ChallengedBlockNumber.Uint64() - // IsTracking just validates whether the commitment was challenged for the correct block number - // if it has been loaded from the batcher inbox before. Spam commitments will be tracked but - // ignored and evicted unless derivation encounters the commitment. - if !d.state.IsTracking(comm.Encode(), bn) { - return 0, nil, fmt.Errorf("%w: %x at block %d", ErrInvalidChallenge, comm.Encode(), bn) - } - return ChallengeStatus(event.Status), comm, nil + return ChallengeStatus(event.Status), comm, event.ChallengedBlockNumber.Uint64(), nil } var ( diff --git a/op-plasma/damgr_test.go b/op-plasma/damgr_test.go index 5a37badc19ca..4288a6d53abe 100644 --- a/op-plasma/damgr_test.go +++ b/op-plasma/damgr_test.go @@ -21,241 +21,178 @@ func RandomData(rng *rand.Rand, size int) []byte { return out } -// TestDAChallengeState is a simple test with small values to verify the finalized head logic -func TestDAChallengeState(t *testing.T) { - logger := testlog.Logger(t, log.LvlDebug) - - rng := rand.New(rand.NewSource(1234)) - state := NewState(logger, &NoopMetrics{}) - - i := uint64(1) - - challengeWindow := uint64(6) - resolveWindow := uint64(6) - - // track commitments in the first 10 blocks - for ; i < 10; i++ { - // this is akin to stepping the derivation pipeline through a range a blocks each with a commitment - state.SetInputCommitment(RandomData(rng, 32), i, challengeWindow) - } - - // blocks are finalized after the challenge window expires - bn, err := state.ExpireChallenges(10) - require.NoError(t, err) - // finalized head = 10 - 6 = 4 - require.Equal(t, uint64(4), bn) - - // track the next commitment and mark it as challenged - c := RandomData(rng, 32) - // add input commitment at block i = 10 - state.SetInputCommitment(c, 10, challengeWindow) - // i+4 is the block at which it was challenged - state.SetActiveChallenge(c, 14, resolveWindow) - - for j := i + 1; j < 18; j++ { - // continue walking the pipeline through some more blocks with commitments - state.SetInputCommitment(RandomData(rng, 32), j, challengeWindow) - } - - // finalized l1 origin should not extend past the resolve window - bn, err = state.ExpireChallenges(18) - require.NoError(t, err) - // finalized is active_challenge_block - 1 = 10 - 1 and cannot move until the challenge expires - require.Equal(t, uint64(9), bn) +func RandomCommitment(rng *rand.Rand) CommitmentData { + return NewKeccak256Commitment(RandomData(rng, 32)) +} - // walk past the resolve window - for j := uint64(18); j < 22; j++ { - state.SetInputCommitment(RandomData(rng, 32), j, challengeWindow) - } +func l1Ref(n uint64) eth.L1BlockRef { + return eth.L1BlockRef{Number: n} +} - // no more active challenges, the finalized head can catch up to the challenge window - bn, err = state.ExpireChallenges(22) - require.ErrorIs(t, err, ErrReorgRequired) - // finalized head is now 22 - 6 = 16 - require.Equal(t, uint64(16), bn) +func bID(n uint64) eth.BlockID { + return eth.BlockID{Number: n} +} - // cleanup state we don't need anymore - state.Prune(22) - // now if we expire the challenges again, it won't request a reorg again - bn, err = state.ExpireChallenges(22) - require.NoError(t, err) - // finalized head hasn't moved - require.Equal(t, uint64(16), bn) - - // add one more commitment and challenge it - c = RandomData(rng, 32) - state.SetInputCommitment(c, 22, challengeWindow) - // challenge 3 blocks after - state.SetActiveChallenge(c, 25, resolveWindow) - - // exceed the challenge window with more commitments - for j := uint64(23); j < 30; j++ { - state.SetInputCommitment(RandomData(rng, 32), j, challengeWindow) +// TestFinalization checks that the finalized L1 block ref is returned correctly when pruning with and without challenges +func TestFinalization(t *testing.T) { + logger := testlog.Logger(t, log.LevelInfo) + cfg := Config{ + ResolveWindow: 6, + ChallengeWindow: 6, } - - // finalized head should not extend past the resolve window - bn, err = state.ExpireChallenges(30) - require.NoError(t, err) - // finalized head is stuck waiting for resolve window - require.Equal(t, uint64(21), bn) - - input := RandomData(rng, 100) - // resolve the challenge - state.SetResolvedChallenge(c, input, 30) - - // finalized head catches up - bn, err = state.ExpireChallenges(31) - require.NoError(t, err) - // finalized head is now 31 - 6 = 25 - require.Equal(t, uint64(25), bn) - - // the resolved input is also stored - storedInput, err := state.GetResolvedInput(c) - require.NoError(t, err) - require.Equal(t, input, storedInput) + rng := rand.New(rand.NewSource(1234)) + state := NewState(logger, &NoopMetrics{}, cfg) + + c1 := RandomCommitment(rng) + bn1 := uint64(2) + + // Track a commitment without a challenge + state.TrackCommitment(c1, l1Ref(bn1)) + require.NoError(t, state.ExpireCommitments(bID(7))) + require.Empty(t, state.expiredCommitments) + require.NoError(t, state.ExpireCommitments(bID(8))) + require.Empty(t, state.commitments) + + state.Prune(bID(bn1)) + require.Equal(t, eth.L1BlockRef{}, state.lastPrunedCommitment) + state.Prune(bID(7)) + require.Equal(t, eth.L1BlockRef{}, state.lastPrunedCommitment) + state.Prune(bID(8)) + require.Equal(t, eth.L1BlockRef{}, state.lastPrunedCommitment) + + // Track a commitment, challenge it, & then resolve it + c2 := RandomCommitment(rng) + bn2 := uint64(20) + state.TrackCommitment(c2, l1Ref(bn2)) + require.Equal(t, ChallengeUninitialized, state.GetChallengeStatus(c2, bn2)) + state.CreateChallenge(c2, bID(24), bn2) + require.Equal(t, ChallengeActive, state.GetChallengeStatus(c2, bn2)) + require.NoError(t, state.ResolveChallenge(c2, bID(30), bn2, nil)) + require.Equal(t, ChallengeResolved, state.GetChallengeStatus(c2, bn2)) + + // Expire Challenges & Comms after challenge period but before resolve end & assert they are not expired yet + require.NoError(t, state.ExpireCommitments(bID(28))) + require.Empty(t, state.expiredCommitments) + state.ExpireChallenges(bID(28)) + require.Empty(t, state.expiredChallenges) + + // Now fully expire them + require.NoError(t, state.ExpireCommitments(bID(30))) + require.Empty(t, state.commitments) + state.ExpireChallenges(bID(30)) + require.Empty(t, state.challenges) + + // Now finalize everything + state.Prune(bID(20)) + require.Equal(t, eth.L1BlockRef{}, state.lastPrunedCommitment) + state.Prune(bID(28)) + require.Equal(t, eth.L1BlockRef{}, state.lastPrunedCommitment) + state.Prune(bID(32)) + require.Equal(t, eth.L1BlockRef{Number: bn2}, state.lastPrunedCommitment) } // TestExpireChallenges expires challenges and prunes the state for longer windows // with commitments every 6 blocks. func TestExpireChallenges(t *testing.T) { - logger := testlog.Logger(t, log.LvlDebug) + logger := testlog.Logger(t, log.LevelInfo) + + cfg := Config{ + ResolveWindow: 90, + ChallengeWindow: 90, + } rng := rand.New(rand.NewSource(1234)) - state := NewState(logger, &NoopMetrics{}) + state := NewState(logger, &NoopMetrics{}, cfg) - comms := make(map[uint64][]byte) + comms := make(map[uint64]CommitmentData) i := uint64(3713854) - var finalized uint64 - - challengeWindow := uint64(90) - resolveWindow := uint64(90) - // increment new commitments every 6 blocks for ; i < 3713948; i += 6 { - comm := RandomData(rng, 32) + comm := RandomCommitment(rng) comms[i] = comm - logger.Info("set commitment", "block", i) - cm := state.GetOrTrackChallenge(comm, i, challengeWindow) - require.NotNil(t, cm) + logger.Info("set commitment", "block", i, "comm", comm) + state.TrackCommitment(comm, l1Ref(i)) - bn, err := state.ExpireChallenges(i) - logger.Info("expire challenges", "finalized head", bn, "err", err) - - // only update finalized head if it has moved - if bn > finalized { - finalized = bn - // prune unused state - state.Prune(bn) - } + require.NoError(t, state.ExpireCommitments(bID(i))) + state.ExpireChallenges(bID(i)) } // activate a couple of subsequent challenges - state.SetActiveChallenge(comms[3713926], 3713948, resolveWindow) - - state.SetActiveChallenge(comms[3713932], 3713950, resolveWindow) + state.CreateChallenge(comms[3713926], bID(3713948), 3713926) + state.CreateChallenge(comms[3713932], bID(3713950), 3713932) // continue incrementing commitments for ; i < 3714038; i += 6 { - comm := RandomData(rng, 32) + comm := RandomCommitment(rng) comms[i] = comm logger.Info("set commitment", "block", i) - cm := state.GetOrTrackChallenge(comm, i, challengeWindow) - require.NotNil(t, cm) - - bn, err := state.ExpireChallenges(i) - logger.Info("expire challenges", "expired", bn, "err", err) - - if bn > finalized { - finalized = bn - state.Prune(bn) - } - - } - - // finalized head does not move as it expires previously seen blocks - bn, err := state.ExpireChallenges(3714034) - require.NoError(t, err) - require.Equal(t, uint64(3713920), bn) - - bn, err = state.ExpireChallenges(3714035) - require.NoError(t, err) - require.Equal(t, uint64(3713920), bn) - - bn, err = state.ExpireChallenges(3714036) - require.NoError(t, err) - require.Equal(t, uint64(3713920), bn) - - bn, err = state.ExpireChallenges(3714037) - require.NoError(t, err) - require.Equal(t, uint64(3713920), bn) - - // lastly we get to the resolve window and trigger a reorg - _, err = state.ExpireChallenges(3714038) - require.ErrorIs(t, err, ErrReorgRequired) + state.TrackCommitment(comm, l1Ref(i)) - // this is simulating a pipeline reset where it walks back challenge + resolve window - for i := uint64(3713854); i < 3714044; i += 6 { - cm := state.GetOrTrackChallenge(comms[i], i, challengeWindow) - require.NotNil(t, cm) - - // check that the challenge status was updated to expired - if i == 3713926 { - require.Equal(t, ChallengeExpired, cm.challengeStatus) - } + require.NoError(t, state.ExpireCommitments(bID(i))) + state.ExpireChallenges(bID(i)) } - bn, err = state.ExpireChallenges(3714038) - require.NoError(t, err) - - // finalized at last - require.Equal(t, uint64(3713926), bn) + // Jump ahead to the end of the resolve window for comm included in block 3713926 which triggers a reorg + state.ExpireChallenges(bID(3714106)) + require.ErrorIs(t, state.ExpireCommitments(bID(3714106)), ErrReorgRequired) } +// TestDAChallengeDetached tests the lookahead + reorg handling of the da state func TestDAChallengeDetached(t *testing.T) { - logger := testlog.Logger(t, log.LvlDebug) + logger := testlog.Logger(t, log.LevelWarn) - rng := rand.New(rand.NewSource(1234)) - state := NewState(logger, &NoopMetrics{}) + cfg := Config{ + ResolveWindow: 6, + ChallengeWindow: 6, + } - challengeWindow := uint64(6) - resolveWindow := uint64(6) + rng := rand.New(rand.NewSource(1234)) + state := NewState(logger, &NoopMetrics{}, cfg) - c1 := RandomData(rng, 32) - c2 := RandomData(rng, 32) + c1 := RandomCommitment(rng) + c2 := RandomCommitment(rng) // c1 at bn1 is missing, pipeline stalls - state.GetOrTrackChallenge(c1, 1, challengeWindow) + state.TrackCommitment(c1, l1Ref(1)) // c2 at bn2 is challenged at bn3 - require.True(t, state.IsTracking(c2, 2)) - state.SetActiveChallenge(c2, 3, resolveWindow) + state.CreateChallenge(c2, bID(3), uint64(2)) + require.Equal(t, ChallengeActive, state.GetChallengeStatus(c2, uint64(2))) // c1 is finally challenged at bn5 - state.SetActiveChallenge(c1, 5, resolveWindow) + state.CreateChallenge(c1, bID(5), uint64(1)) - // c2 expires but should not trigger a reset because we don't know if it's valid yet - bn, err := state.ExpireChallenges(10) + // c2 expires but should not trigger a reset because we're waiting for c1 to expire + state.ExpireChallenges(bID(10)) + err := state.ExpireCommitments(bID(10)) require.NoError(t, err) - require.Equal(t, uint64(0), bn) // c1 expires finally - bn, err = state.ExpireChallenges(11) + state.ExpireChallenges(bID(11)) + err = state.ExpireCommitments(bID(11)) require.ErrorIs(t, err, ErrReorgRequired) - require.Equal(t, uint64(1), bn) - // pruning finalized block is safe - state.Prune(bn) + // pruning finalized block is safe. It should not prune any commitments yet. + state.Prune(bID(1)) + require.Equal(t, eth.L1BlockRef{}, state.lastPrunedCommitment) + + // Perform reorg back to bn2 + state.ClearCommitments() - // pipeline discovers c2 - comm := state.GetOrTrackChallenge(c2, 2, challengeWindow) + // pipeline discovers c2 at bn2 + state.TrackCommitment(c2, l1Ref(2)) // it is already marked as expired so it will be skipped without needing a reorg - require.Equal(t, ChallengeExpired, comm.challengeStatus) + require.Equal(t, ChallengeExpired, state.GetChallengeStatus(c2, uint64(2))) // later when we get to finalizing block 10 + margin, the pending challenge is safely pruned - state.Prune(210) - require.Equal(t, 0, len(state.expiredComms)) + // Note: We need to go through the expire then prune steps + state.ExpireChallenges(bID(201)) + err = state.ExpireCommitments(bID(201)) + require.ErrorIs(t, err, ErrReorgRequired) + state.Prune(bID(201)) + require.True(t, state.NoCommitments()) } // cannot import from testutils at this time because of import cycle @@ -290,11 +227,12 @@ func (m *mockL1Fetcher) ExpectL1BlockRefByNumber(num uint64, ref eth.L1BlockRef, m.Mock.On("L1BlockRefByNumber", num).Once().Return(ref, err) } -func TestFilterInvalidBlockNumber(t *testing.T) { - logger := testlog.Logger(t, log.LevelDebug) +func TestAdvanceChallengeOrigin(t *testing.T) { + logger := testlog.Logger(t, log.LevelWarn) ctx := context.Background() l1F := &mockL1Fetcher{} + defer l1F.AssertExpectations(t) storage := NewMockDAClient(logger) @@ -303,10 +241,12 @@ func TestFilterInvalidBlockNumber(t *testing.T) { ChallengeWindow: 90, ResolveWindow: 90, DAChallengeContractAddress: daddr, } - bn := uint64(19) bhash := common.HexToHash("0xd438144ffab918b1349e7cd06889c26800c26d8edc34d64f750e3e097166a09c") + bhash2 := common.HexToHash("0xd000004ffab918b1349e7cd06889c26800c26d8edc34d64f750e3e097166a09c") + bn := uint64(19) + comm := Keccak256Commitment(common.FromHex("eed82c1026bdd0f23461dd6ca515ef677624e63e6fc0ff91e3672af8eddf579d")) - state := NewState(logger, &NoopMetrics{}) + state := NewState(logger, &NoopMetrics{}, pcfg) da := NewPlasmaDAWithState(logger, pcfg, storage, &NoopMetrics{}, state) @@ -339,28 +279,26 @@ func TestFilterInvalidBlockNumber(t *testing.T) { } l1F.ExpectFetchReceipts(bhash, nil, receipts, nil) - // we get 1 log successfully filtered as valid status updated contract event - logs, err := da.fetchChallengeLogs(ctx, l1F, id) - require.NoError(t, err) - require.Equal(t, len(logs), 1) - - // commitment is tracked but not canonical - status, comm, err := da.decodeChallengeStatus(logs[0]) + // Advance the challenge origin & ensure that we track the challenge + err := da.AdvanceChallengeOrigin(ctx, l1F, id) require.NoError(t, err) - c, has := state.commsByKey[string(comm.Encode())] + c, has := state.GetChallenge(comm, 14) require.True(t, has) - require.False(t, c.canonical) - - require.Equal(t, ChallengeActive, status) - // once tracked, set as active based on decoded status - state.SetActiveChallenge(comm.Encode(), bn, pcfg.ResolveWindow) + require.Equal(t, ChallengeActive, c.challengeStatus) - // once we request it during derivation it becomes canonical - tracked := state.GetOrTrackChallenge(comm.Encode(), 14, pcfg.ChallengeWindow) - require.True(t, tracked.canonical) + // Advance the challenge origin until the challenge should be expired + for i := bn + 1; i < bn+1+pcfg.ChallengeWindow; i++ { + id2 := eth.BlockID{ + Number: i, + Hash: bhash2, + } + l1F.ExpectFetchReceipts(bhash2, nil, nil, nil) + err = da.AdvanceChallengeOrigin(ctx, l1F, id2) + require.NoError(t, err) + } + state.Prune(bID(bn + 1 + pcfg.ChallengeWindow + pcfg.ResolveWindow)) - require.Equal(t, ChallengeActive, tracked.challengeStatus) - require.Equal(t, uint64(14), tracked.blockNumber) - require.Equal(t, bn+pcfg.ResolveWindow, tracked.expiresAt) + _, has = state.GetChallenge(comm, 14) + require.False(t, has) } diff --git a/op-plasma/damock.go b/op-plasma/damock.go index c43bdbc53e92..0a1e40d0c6b1 100644 --- a/op-plasma/damock.go +++ b/op-plasma/damock.go @@ -82,7 +82,7 @@ var ErrNotEnabled = errors.New("plasma not enabled") // PlasmaDisabled is a noop plasma DA implementation for stubbing. type PlasmaDisabled struct{} -func (d *PlasmaDisabled) GetInput(ctx context.Context, l1 L1Fetcher, commitment CommitmentData, blockId eth.BlockID) (eth.Data, error) { +func (d *PlasmaDisabled) GetInput(ctx context.Context, l1 L1Fetcher, commitment CommitmentData, blockId eth.L1BlockRef) (eth.Data, error) { return nil, ErrNotEnabled } diff --git a/op-plasma/dastate.go b/op-plasma/dastate.go index c6fee4800af9..01515e293fd3 100644 --- a/op-plasma/dastate.go +++ b/op-plasma/dastate.go @@ -1,10 +1,10 @@ package plasma import ( - "container/heap" "errors" "fmt" + "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum/go-ethereum/log" ) @@ -23,206 +23,236 @@ const ( // Commitment keeps track of the onchain state of an input commitment. type Commitment struct { - key []byte // the encoded commitment - input []byte // the input itself if it was resolved onchain - expiresAt uint64 // represents the block number after which the commitment can no longer be challenged or if challenged no longer be resolved. - blockNumber uint64 // block where the commitment is included as calldata to the batcher inbox - challengeStatus ChallengeStatus // latest known challenge status - canonical bool // whether the commitment was derived as part of the canonical chain if canonical it will be in comms queue if not in the pendingComms queue. + data CommitmentData + inclusionBlock eth.L1BlockRef // block where the commitment is included as calldata to the batcher inbox. + challengeWindowEnd uint64 // represents the block number after which the commitment can no longer be challenged. } -// CommQueue is a priority queue of commitments ordered by block number. -type CommQueue []*Commitment - -var _ heap.Interface = (*CommQueue)(nil) - -func (c CommQueue) Len() int { return len(c) } - -// we want the first item in the queue to have the lowest block number -func (c CommQueue) Less(i, j int) bool { - return c[i].blockNumber < c[j].blockNumber -} - -func (c CommQueue) Swap(i, j int) { - c[i], c[j] = c[j], c[i] +// Challenges are used to track the status of a challenge against a commitment. +type Challenge struct { + commData CommitmentData // the specific commitment which was challenged + commInclusionBlockNumber uint64 // block where the commitment is included as calldata to the batcher inbox + resolveWindowEnd uint64 // block number at which the challenge must be resolved by + input []byte // the input itself if it was resolved onchain + challengeStatus ChallengeStatus // status of the challenge based on the highest processed action } -func (c *CommQueue) Push(x any) { - *c = append(*c, x.(*Commitment)) +func (c *Challenge) key() string { + return challengeKey(c.commData, c.commInclusionBlockNumber) } -func (c *CommQueue) Pop() any { - old := *c - n := len(old) - item := old[n-1] - old[n-1] = nil // avoid memory leak - *c = old[0 : n-1] - return item +func challengeKey(comm CommitmentData, inclusionBlockNumber uint64) string { + return fmt.Sprintf("%d%x", inclusionBlockNumber, comm.Encode()) } // State tracks the commitment and their challenges in order of l1 inclusion. +// Commitments and Challenges are tracked in L1 inclusion order. They are tracked in two separate queues for Active and Expired commitments. +// When commitments are moved to Expired, if there is an active challenge, the DA Manager is informed that a commitment became invalid. +// Challenges and Commitments can be pruned when they are beyond a certain block number (e.g. when they are finalized). +// In the special case of a L2 reorg, challenges are still tracked but commitments are removed. +// This will allow the plasma fetcher to find the expired challenge. type State struct { - activeComms CommQueue - expiredComms CommQueue - commsByKey map[string]*Commitment - log log.Logger - metrics Metricer - finalized uint64 + commitments []Commitment // commitments where the challenge/resolve period has not expired yet + expiredCommitments []Commitment // commitments where the challenge/resolve period has expired but not finalized + challenges []*Challenge // challenges ordered by L1 inclusion + expiredChallenges []*Challenge // challenges ordered by L1 inclusion + challengesMap map[string]*Challenge // challenges by seralized comm + block number for easy lookup + lastPrunedCommitment eth.L1BlockRef // the last commitment to be pruned + cfg Config + log log.Logger + metrics Metricer } -func NewState(log log.Logger, m Metricer) *State { +func NewState(log log.Logger, m Metricer, cfg Config) *State { return &State{ - activeComms: make(CommQueue, 0), - expiredComms: make(CommQueue, 0), - commsByKey: make(map[string]*Commitment), - log: log, - metrics: m, + commitments: make([]Commitment, 0), + expiredCommitments: make([]Commitment, 0), + challenges: make([]*Challenge, 0), + expiredChallenges: make([]*Challenge, 0), + challengesMap: make(map[string]*Challenge), + cfg: cfg, + log: log, + metrics: m, } } -// IsTracking returns whether we currently have a commitment for the given key. -// if the block number is mismatched we return false to ignore the challenge. -func (s *State) IsTracking(key []byte, bn uint64) bool { - if c, ok := s.commsByKey[string(key)]; ok { - return c.blockNumber == bn - } - // track the commitment knowing we may be in detached head and not have seen - // the commitment in the inbox yet. - s.TrackDetachedCommitment(key, bn) - return true -} - -// TrackDetachedCommitment is used for indexing challenges for commitments that have not yet -// been derived due to the derivation pipeline being stalled pending a commitment to be challenged. -// Memory usage is bound to L1 block space during the DA windows, so it is hard and expensive to spam. -// Note that the challenge status and expiration is updated separately after it is tracked. -func (s *State) TrackDetachedCommitment(key []byte, bn uint64) { - c := &Commitment{ - key: key, - expiresAt: bn, - blockNumber: bn, - canonical: false, - } - s.log.Debug("tracking detached commitment", "blockNumber", c.blockNumber, "commitment", fmt.Sprintf("%x", key)) - heap.Push(&s.activeComms, c) - s.commsByKey[string(key)] = c -} - -// SetActiveChallenge switches the state of a given commitment to active challenge. Noop if -// the commitment is not tracked as we don't want to track challenges for invalid commitments. -func (s *State) SetActiveChallenge(key []byte, challengedAt uint64, resolveWindow uint64) { - if c, ok := s.commsByKey[string(key)]; ok { - c.expiresAt = challengedAt + resolveWindow - c.challengeStatus = ChallengeActive - s.metrics.RecordActiveChallenge(c.blockNumber, challengedAt, key) +// ClearCommitments removes all tracked commitments but not challenges. +// This should be used to retain the challenge state when performing a L2 reorg +func (s *State) ClearCommitments() { + s.commitments = s.commitments[:0] + s.expiredCommitments = s.expiredCommitments[:0] +} + +// Reset clears the state. It should be used when a L1 reorg occurs. +func (s *State) Reset() { + s.commitments = s.commitments[:0] + s.expiredCommitments = s.expiredCommitments[:0] + s.challenges = s.challenges[:0] + s.expiredChallenges = s.expiredChallenges[:0] + clear(s.challengesMap) +} + +// CreateChallenge creates & tracks a challenge. It will overwrite earlier challenges if the +// same commitment is challenged again. +func (s *State) CreateChallenge(comm CommitmentData, inclusionBlock eth.BlockID, commBlockNumber uint64) { + c := &Challenge{ + commData: comm, + commInclusionBlockNumber: commBlockNumber, + resolveWindowEnd: inclusionBlock.Number + s.cfg.ResolveWindow, + challengeStatus: ChallengeActive, } + s.challenges = append(s.challenges, c) + s.challengesMap[c.key()] = c } -// SetResolvedChallenge switches the state of a given commitment to resolved. Noop if -// the commitment is not tracked as we don't want to track challenges for invalid commitments. -// The input posted onchain is stored in the state for later retrieval. -func (s *State) SetResolvedChallenge(key []byte, input []byte, resolvedAt uint64) { - if c, ok := s.commsByKey[string(key)]; ok { - c.challengeStatus = ChallengeResolved - c.expiresAt = resolvedAt - c.input = input - s.metrics.RecordResolvedChallenge(key) +// ResolveChallenge marks a challenge as resolved. It will return an error if there was not a corresponding challenge. +func (s *State) ResolveChallenge(comm CommitmentData, inclusionBlock eth.BlockID, commBlockNumber uint64, input []byte) error { + c, ok := s.challengesMap[challengeKey(comm, commBlockNumber)] + if !ok { + return errors.New("challenge was not tracked") } + c.input = input + c.challengeStatus = ChallengeResolved + return nil } -// SetInputCommitment initializes a new commitment and adds it to the state. -// This is called when we see a commitment during derivation so we can refer to it later in -// challenges. -func (s *State) SetInputCommitment(key []byte, committedAt uint64, challengeWindow uint64) *Commitment { - c := &Commitment{ - key: key, - expiresAt: committedAt + challengeWindow, - blockNumber: committedAt, - canonical: true, +// TrackCommitment stores a commitment in the State +func (s *State) TrackCommitment(comm CommitmentData, inclusionBlock eth.L1BlockRef) { + c := Commitment{ + data: comm, + inclusionBlock: inclusionBlock, + challengeWindowEnd: inclusionBlock.Number + s.cfg.ChallengeWindow, } - s.log.Debug("append commitment", "expiresAt", c.expiresAt, "blockNumber", c.blockNumber) - heap.Push(&s.activeComms, c) - s.commsByKey[string(key)] = c + s.commitments = append(s.commitments, c) +} - return c +// GetChallenge looks up a challenge against commitment + inclusion block. +func (s *State) GetChallenge(comm CommitmentData, commBlockNumber uint64) (*Challenge, bool) { + challenge, ok := s.challengesMap[challengeKey(comm, commBlockNumber)] + return challenge, ok } -// GetOrTrackChallenge returns the commitment for the given key if it is already tracked, or -// initializes a new commitment and adds it to the state. -func (s *State) GetOrTrackChallenge(key []byte, bn uint64, challengeWindow uint64) *Commitment { - if c, ok := s.commsByKey[string(key)]; ok { - // commitments previously introduced by challenge events are marked as canonical - c.canonical = true - return c +// GetChallengeStatus looks up a challenge's status, or returns ChallengeUninitialized if there is no challenge. +func (s *State) GetChallengeStatus(comm CommitmentData, commBlockNumber uint64) ChallengeStatus { + challenge, ok := s.GetChallenge(comm, commBlockNumber) + if ok { + return challenge.challengeStatus } - return s.SetInputCommitment(key, bn, challengeWindow) + return ChallengeUninitialized } -// GetResolvedInput returns the input bytes if the commitment was resolved onchain. -func (s *State) GetResolvedInput(key []byte) ([]byte, error) { - if c, ok := s.commsByKey[string(key)]; ok { - return c.input, nil - } - return nil, errors.New("commitment not found") +// NoCommitments returns true iff it is not tracking any commitments or challenges. +func (s *State) NoCommitments() bool { + return len(s.challenges) == 0 && len(s.expiredChallenges) == 0 && len(s.commitments) == 0 && len(s.expiredCommitments) == 0 } -// ExpireChallenges walks back from the oldest commitment to find the latest l1 origin -// for which input data can no longer be challenged. It also marks any active challenges -// as expired based on the new latest l1 origin. If any active challenges are expired -// it returns an error to signal that a derivation pipeline reset is required. -func (s *State) ExpireChallenges(bn uint64) (uint64, error) { +// ExpireCommitments moves commitments from the acive state map to the expired state map. +// commitments are considered expired when the challenge window ends without a challenge, or when the resolve window ends without a resolution to the challenge. +// This function processess commitments in order of inclusion until it finds a commitment which has not expired. +// If a commitment expires which did not resolve its challenge, it returns ErrReorgRequired to indicate that a L2 reorg should be performed. +func (s *State) ExpireCommitments(origin eth.BlockID) error { var err error - for s.activeComms.Len() > 0 && s.activeComms[0].expiresAt <= bn && s.activeComms[0].blockNumber > s.finalized { - // move from the active to the expired queue - c := heap.Pop(&s.activeComms).(*Commitment) - heap.Push(&s.expiredComms, c) - - if c.canonical { - // advance finalized head only if the commitment was derived as part of the canonical chain - s.finalized = c.blockNumber + for len(s.commitments) > 0 { + c := s.commitments[0] + challenge, ok := s.GetChallenge(c.data, c.inclusionBlock.Number) + + // A commitment expires when the challenge window ends without a challenge, + // or when the resolve window on the challenge ends. + expiresAt := c.challengeWindowEnd + if ok { + expiresAt = challenge.resolveWindowEnd } - // active mark as expired so it is skipped in the derivation pipeline + // If the commitment expires the in future, return early + if expiresAt > origin.Number { + return err + } + + // If it has expired, move the commitment to the expired queue + s.log.Info("Expiring commitment", "comm", c.data, "commInclusionBlockNumber", c.inclusionBlock.Number, "origin", origin, "challenged", ok) + s.expiredCommitments = append(s.expiredCommitments, c) + s.commitments = s.commitments[1:] + + // If the expiring challenge was not resolved, return an error to indicate a reorg is required. + if ok && challenge.challengeStatus != ChallengeResolved { + err = ErrReorgRequired + } + } + return err +} + +// ExpireChallenges moves challenges from the active state map to the expired state map. +// challenges are considered expired when the oirgin is beyond the challenge's resolve window. +// This function processess challenges in order of inclusion until it finds a commitment which has not expired. +// This function must be called for every block because there is no contract event to expire challenges. +func (s *State) ExpireChallenges(origin eth.BlockID) { + for len(s.challenges) > 0 { + c := s.challenges[0] + + // If the challenge can still be resolved, return early + if c.resolveWindowEnd > origin.Number { + return + } + + // Move the challenge to the expired queue + s.log.Info("Expiring challenge", "comm", c.commData, "commInclusionBlockNumber", c.commInclusionBlockNumber, "origin", origin) + s.expiredChallenges = append(s.expiredChallenges, c) + s.challenges = s.challenges[1:] + + // Mark the challenge as expired if it was not resolved if c.challengeStatus == ChallengeActive { c.challengeStatus = ChallengeExpired - - // only reorg if canonical. If the pipeline is behind, it will just - // get skipped once it catches up. If it is spam, it will be pruned - // with no effect. - if c.canonical { - err = ErrReorgRequired - s.metrics.RecordExpiredChallenge(c.key) - } } } +} - return s.finalized, err +// Prune removes challenges & commitments which have an expiry block number beyond the given block number. +func (s *State) Prune(origin eth.BlockID) { + // Commitments rely on challenges, so we prune commitments first. + s.pruneCommitments(origin) + s.pruneChallenges(origin) } -// safely prune in case reset is deeper than the finalized l1 -const commPruneMargin = 200 +// pruneCommitments removes commitments which have are beyond a given block number. +// It will remove commitments in order of inclusion until it finds a commitment which is not beyond the given block number. +func (s *State) pruneCommitments(origin eth.BlockID) { + for len(s.expiredCommitments) > 0 { + c := s.expiredCommitments[0] + challenge, ok := s.GetChallenge(c.data, c.inclusionBlock.Number) -// Prune removes commitments once they can no longer be challenged or resolved. -// the finalized head block number is passed so we can safely remove any commitments -// with finalized block numbers. -func (s *State) Prune(bn uint64) { - if bn > commPruneMargin { - bn -= commPruneMargin - } else { - bn = 0 - } - for s.expiredComms.Len() > 0 && s.expiredComms[0].blockNumber < bn { - c := heap.Pop(&s.expiredComms).(*Commitment) - s.log.Debug("prune commitment", "expiresAt", c.expiresAt, "blockNumber", c.blockNumber) - delete(s.commsByKey, string(c.key)) + // the commitment is considered removable when the challenge window ends without a challenge, + // or when the resolve window on the challenge ends. + expiresAt := c.challengeWindowEnd + if ok { + expiresAt = challenge.resolveWindowEnd + } + + // If the commitment is not beyond the given block number, return early + if expiresAt > origin.Number { + break + } + + // Remove the commitment + s.expiredCommitments = s.expiredCommitments[1:] + + // Record the latest inclusion block to be returned + s.lastPrunedCommitment = c.inclusionBlock } } -// In case of L1 reorg, state should be cleared so we can sync all the challenge events -// from scratch. -func (s *State) Reset() { - s.activeComms = s.activeComms[:0] - s.expiredComms = s.expiredComms[:0] - s.finalized = 0 - clear(s.commsByKey) +// pruneChallenges removes challenges which have are beyond a given block number. +// It will remove challenges in order of inclusion until it finds a challenge which is not beyond the given block number. +func (s *State) pruneChallenges(origin eth.BlockID) { + for len(s.expiredChallenges) > 0 { + c := s.expiredChallenges[0] + + // If the challenge is not beyond the given block number, return early + if c.resolveWindowEnd > origin.Number { + break + } + + // Remove the challenge + s.expiredChallenges = s.expiredChallenges[1:] + delete(s.challengesMap, c.key()) + } } From 387c605e2b1dcea7a95f29d76202de2dc5798c20 Mon Sep 17 00:00:00 2001 From: Axel Kingsley Date: Thu, 13 Jun 2024 09:24:49 -0500 Subject: [PATCH 035/141] Alt-DA: Add aliases to cli for Alt-DA (#10812) * Alt-DA: Add aliases to cli for Alt-DA * replace "plasma mode" with "alt-da mode" --- bedrock-devnet/devnet/__init__.py | 2 +- op-batcher/batcher/service.go | 2 +- op-batcher/flags/flags_test.go | 18 ++++++++++--- op-chain-ops/genesis/config.go | 8 +++--- op-e2e/actions/plasma_test.go | 2 +- op-node/flags/flags.go | 4 +-- op-node/flags/flags_test.go | 7 ++++- op-node/node/config.go | 2 +- op-node/rollup/finality/finalizer.go | 2 +- op-node/rollup/finality/plasma.go | 2 +- op-node/rollup/types.go | 16 ++++++------ op-plasma/cli.go | 38 ++++++++++++++++++---------- 12 files changed, 66 insertions(+), 37 deletions(-) diff --git a/bedrock-devnet/devnet/__init__.py b/bedrock-devnet/devnet/__init__.py index 182172d3412d..18f175d3d207 100644 --- a/bedrock-devnet/devnet/__init__.py +++ b/bedrock-devnet/devnet/__init__.py @@ -297,7 +297,7 @@ def devnet_deploy(paths): log.info('Bringing up `op-challenger`.') run_command(['docker', 'compose', 'up', '-d', 'op-challenger'], cwd=paths.ops_bedrock_dir, env=docker_env) - # Optionally bring up Plasma Mode components. + # Optionally bring up Alt-DA Mode components. if DEVNET_PLASMA: log.info('Bringing up `da-server`, `sentinel`.') # TODO(10141): We don't have public sentinel images yet run_command(['docker', 'compose', 'up', '-d', 'da-server'], cwd=paths.ops_bedrock_dir, env=docker_env) diff --git a/op-batcher/batcher/service.go b/op-batcher/batcher/service.go index 8ef40b346a0b..a7d6b3273ae7 100644 --- a/op-batcher/batcher/service.go +++ b/op-batcher/batcher/service.go @@ -248,7 +248,7 @@ func (bs *BatcherService) initChannelConfig(cfg *CLIConfig) error { "channel_timeout", cc.ChannelTimeout, "sub_safety_margin", cc.SubSafetyMargin) if bs.UsePlasma { - bs.Log.Warn("Plasma Mode is a Beta feature of the MIT licensed OP Stack. While it has received initial review from core contributors, it is still undergoing testing, and may have bugs or other issues.") + bs.Log.Warn("Alt-DA Mode is a Beta feature of the MIT licensed OP Stack. While it has received initial review from core contributors, it is still undergoing testing, and may have bugs or other issues.") } bs.ChannelConfig = cc return nil diff --git a/op-batcher/flags/flags_test.go b/op-batcher/flags/flags_test.go index af303724e25d..486342375b1f 100644 --- a/op-batcher/flags/flags_test.go +++ b/op-batcher/flags/flags_test.go @@ -5,6 +5,7 @@ import ( "strings" "testing" + plasma "github.com/ethereum-optimism/optimism/op-plasma" opservice "github.com/ethereum-optimism/optimism/op-service" "github.com/ethereum-optimism/optimism/op-service/txmgr" @@ -57,6 +58,14 @@ func TestBetaFlags(t *testing.T) { } func TestHasEnvVar(t *testing.T) { + // known exceptions to the number of env vars + expEnvVars := map[string]int{ + plasma.EnabledFlagName: 2, + plasma.DaServerAddressFlagName: 2, + plasma.VerifyOnReadFlagName: 2, + plasma.DaServiceFlag: 2, + } + for _, flag := range Flags { flag := flag flagName := flag.Names()[0] @@ -65,9 +74,13 @@ func TestHasEnvVar(t *testing.T) { envFlagGetter, ok := flag.(interface { GetEnvVars() []string }) - envFlags := envFlagGetter.GetEnvVars() require.True(t, ok, "must be able to cast the flag to an EnvVar interface") - require.Equal(t, 1, len(envFlags), "flags should have exactly one env var") + envFlags := envFlagGetter.GetEnvVars() + if numEnvVars, ok := expEnvVars[flagName]; ok { + require.Equalf(t, numEnvVars, len(envFlags), "flags should have %d env vars", numEnvVars) + } else { + require.Equal(t, 1, len(envFlags), "flags should have exactly one env var") + } }) } } @@ -92,7 +105,6 @@ func TestEnvVarFormat(t *testing.T) { }) envFlags := envFlagGetter.GetEnvVars() require.True(t, ok, "must be able to cast the flag to an EnvVar interface") - require.Equal(t, 1, len(envFlags), "flags should have exactly one env var") expectedEnvVar := opservice.FlagNameToEnvVarName(flagName, "OP_BATCHER") require.Equal(t, expectedEnvVar, envFlags[0]) }) diff --git a/op-chain-ops/genesis/config.go b/op-chain-ops/genesis/config.go index a2661b057ecb..6f988fff7ed8 100644 --- a/op-chain-ops/genesis/config.go +++ b/op-chain-ops/genesis/config.go @@ -441,10 +441,10 @@ func (d *DeployConfig) Check() error { } if d.UsePlasma { if d.DAChallengeWindow == 0 { - return fmt.Errorf("%w: DAChallengeWindow cannot be 0 when using plasma mode", ErrInvalidDeployConfig) + return fmt.Errorf("%w: DAChallengeWindow cannot be 0 when using alt-da mode", ErrInvalidDeployConfig) } if d.DAResolveWindow == 0 { - return fmt.Errorf("%w: DAResolveWindow cannot be 0 when using plasma mode", ErrInvalidDeployConfig) + return fmt.Errorf("%w: DAResolveWindow cannot be 0 when using alt-da mode", ErrInvalidDeployConfig) } if !(d.DACommitmentType == plasma.KeccakCommitmentString || d.DACommitmentType == plasma.GenericCommitmentString) { return fmt.Errorf("%w: DACommitmentType must be either KeccakCommtiment or GenericCommitment", ErrInvalidDeployConfig) @@ -520,9 +520,9 @@ func (d *DeployConfig) CheckAddresses() error { return fmt.Errorf("%w: OptimismPortalProxy cannot be address(0)", ErrInvalidDeployConfig) } if d.UsePlasma && d.DACommitmentType == plasma.KeccakCommitmentString && d.DAChallengeProxy == (common.Address{}) { - return fmt.Errorf("%w: DAChallengeContract cannot be address(0) when using plasma mode", ErrInvalidDeployConfig) + return fmt.Errorf("%w: DAChallengeContract cannot be address(0) when using alt-da mode", ErrInvalidDeployConfig) } else if d.UsePlasma && d.DACommitmentType == plasma.GenericCommitmentString && d.DAChallengeProxy != (common.Address{}) { - return fmt.Errorf("%w: DAChallengeContract must be address(0) when using generic commitments in plasma mode", ErrInvalidDeployConfig) + return fmt.Errorf("%w: DAChallengeContract must be address(0) when using generic commitments in alt-da mode", ErrInvalidDeployConfig) } return nil } diff --git a/op-e2e/actions/plasma_test.go b/op-e2e/actions/plasma_test.go index 4307cab18677..bd574f00053d 100644 --- a/op-e2e/actions/plasma_test.go +++ b/op-e2e/actions/plasma_test.go @@ -19,7 +19,7 @@ import ( "github.com/stretchr/testify/require" ) -// Devnet allocs should have plasma mode enabled for these tests to pass +// Devnet allocs should have alt-da mode enabled for these tests to pass // L2PlasmaDA is a test harness for manipulating plasma DA state. type L2PlasmaDA struct { diff --git a/op-node/flags/flags.go b/op-node/flags/flags.go index 9e058350d1e1..88d73d184ea6 100644 --- a/op-node/flags/flags.go +++ b/op-node/flags/flags.go @@ -25,7 +25,7 @@ const ( SequencerCategory = "3. SEQUENCER" OperationsCategory = "4. LOGGING, METRICS, DEBUGGING, AND API" P2PCategory = "5. PEER-TO-PEER" - PlasmaCategory = "6. PLASMA (EXPERIMENTAL)" + AltDACategory = "6. ALT-DA (EXPERIMENTAL)" MiscCategory = "7. MISC" ) @@ -424,7 +424,7 @@ func init() { optionalFlags = append(optionalFlags, oppprof.CLIFlagsWithCategory(EnvVarPrefix, OperationsCategory)...) optionalFlags = append(optionalFlags, DeprecatedFlags...) optionalFlags = append(optionalFlags, opflags.CLIFlags(EnvVarPrefix, RollupCategory)...) - optionalFlags = append(optionalFlags, plasma.CLIFlags(EnvVarPrefix, PlasmaCategory)...) + optionalFlags = append(optionalFlags, plasma.CLIFlags(EnvVarPrefix, AltDACategory)...) Flags = append(requiredFlags, optionalFlags...) } diff --git a/op-node/flags/flags_test.go b/op-node/flags/flags_test.go index c7e87a59830b..3a94041c7e6f 100644 --- a/op-node/flags/flags_test.go +++ b/op-node/flags/flags_test.go @@ -5,6 +5,7 @@ import ( "strings" "testing" + plasma "github.com/ethereum-optimism/optimism/op-plasma" opservice "github.com/ethereum-optimism/optimism/op-service" "github.com/stretchr/testify/require" @@ -73,7 +74,11 @@ func TestDeprecatedFlagsAreHidden(t *testing.T) { func TestHasEnvVar(t *testing.T) { // known exceptions to the number of env vars expEnvVars := map[string]int{ - BeaconFallbackAddrs.Name: 2, + BeaconFallbackAddrs.Name: 2, + plasma.EnabledFlagName: 2, + plasma.DaServerAddressFlagName: 2, + plasma.VerifyOnReadFlagName: 2, + plasma.DaServiceFlag: 2, } for _, flag := range Flags { diff --git a/op-node/node/config.go b/op-node/node/config.go index 223afaccf0f9..0688c8a6cc75 100644 --- a/op-node/node/config.go +++ b/op-node/node/config.go @@ -175,7 +175,7 @@ func (cfg *Config) Check() error { return fmt.Errorf("plasma config error: %w", err) } if cfg.Plasma.Enabled { - log.Warn("Plasma Mode is a Beta feature of the MIT licensed OP Stack. While it has received initial review from core contributors, it is still undergoing testing, and may have bugs or other issues.") + log.Warn("Alt-DA Mode is a Beta feature of the MIT licensed OP Stack. While it has received initial review from core contributors, it is still undergoing testing, and may have bugs or other issues.") } return nil } diff --git a/op-node/rollup/finality/finalizer.go b/op-node/rollup/finality/finalizer.go index 100ed96bb520..78c91fd17b18 100644 --- a/op-node/rollup/finality/finalizer.go +++ b/op-node/rollup/finality/finalizer.go @@ -34,7 +34,7 @@ const finalityDelay = 64 // calcFinalityLookback calculates the default finality lookback based on DA challenge window if plasma // mode is activated or L1 finality lookback. func calcFinalityLookback(cfg *rollup.Config) uint64 { - // in plasma mode the longest finality lookback is a commitment is challenged on the last block of + // in alt-da mode the longest finality lookback is a commitment is challenged on the last block of // the challenge window in which case it will be both challenge + resolve window. if cfg.PlasmaEnabled() { lkb := cfg.PlasmaConfig.DAChallengeWindow + cfg.PlasmaConfig.DAResolveWindow + 1 diff --git a/op-node/rollup/finality/plasma.go b/op-node/rollup/finality/plasma.go index e7826cda7183..6077de90295b 100644 --- a/op-node/rollup/finality/plasma.go +++ b/op-node/rollup/finality/plasma.go @@ -32,7 +32,7 @@ func NewPlasmaFinalizer(log log.Logger, cfg *rollup.Config, inner := NewFinalizer(log, cfg, l1Fetcher, ec) - // In plasma mode, the finalization signal is proxied through the plasma manager. + // In alt-da mode, the finalization signal is proxied through the plasma manager. // Finality signal will come from the DA contract or L1 finality whichever is last. // The plasma module will then call the inner.Finalize function when applicable. backend.OnFinalizedHeadSignal(func(ref eth.L1BlockRef) { diff --git a/op-node/rollup/types.go b/op-node/rollup/types.go index 816181687567..19264a03c5e5 100644 --- a/op-node/rollup/types.go +++ b/op-node/rollup/types.go @@ -54,10 +54,10 @@ type PlasmaConfig struct { DAChallengeAddress common.Address `json:"da_challenge_contract_address,omitempty"` // CommitmentType specifies which commitment type can be used. Defaults to Keccak (type 0) if not present CommitmentType string `json:"da_commitment_type"` - // DA challenge window value set on the DAC contract. Used in plasma mode + // DA challenge window value set on the DAC contract. Used in alt-da mode // to compute when a commitment can no longer be challenged. DAChallengeWindow uint64 `json:"da_challenge_window"` - // DA resolve window value set on the DAC contract. Used in plasma mode + // DA resolve window value set on the DAC contract. Used in alt-da mode // to compute when a challenge expires and trigger a reorg if needed. DAResolveWindow uint64 `json:"da_resolve_window"` } @@ -132,15 +132,15 @@ type Config struct { // L1 DataAvailabilityChallenge contract proxy address LegacyDAChallengeAddress common.Address `json:"da_challenge_contract_address,omitempty"` - // DA challenge window value set on the DAC contract. Used in plasma mode + // DA challenge window value set on the DAC contract. Used in alt-da mode // to compute when a commitment can no longer be challenged. LegacyDAChallengeWindow uint64 `json:"da_challenge_window,omitempty"` - // DA resolve window value set on the DAC contract. Used in plasma mode + // DA resolve window value set on the DAC contract. Used in alt-da mode // to compute when a challenge expires and trigger a reorg if needed. LegacyDAResolveWindow uint64 `json:"da_resolve_window,omitempty"` - // LegacyUsePlasma is activated when the chain is in plasma mode. + // LegacyUsePlasma is activated when the chain is in alt-da mode. LegacyUsePlasma bool `json:"use_plasma,omitempty"` } @@ -326,7 +326,7 @@ func (cfg *Config) Check() error { return nil } -// validatePlasmaConfig checks the two approaches to configuring plasma mode. +// validatePlasmaConfig checks the two approaches to configuring alt-da mode. // If the legacy values are set, they are copied to the new location. If both are set, they are check for consistency. func validatePlasmaConfig(cfg *Config) error { if cfg.LegacyUsePlasma && cfg.PlasmaConfig == nil { @@ -522,7 +522,7 @@ func (c *Config) PlasmaEnabled() bool { } // SyncLookback computes the number of blocks to walk back in order to find the correct L1 origin. -// In plasma mode longest possible window is challenge + resolve windows. +// In alt-da mode longest possible window is challenge + resolve windows. func (c *Config) SyncLookback() uint64 { if c.PlasmaEnabled() { if win := (c.PlasmaConfig.DAChallengeWindow + c.PlasmaConfig.DAResolveWindow); win > c.SeqWindowSize { @@ -567,7 +567,7 @@ func (c *Config) Description(l2Chains map[string]string) string { // Report the protocol version banner += fmt.Sprintf("Node supports up to OP-Stack Protocol Version: %s\n", OPStackSupport) if c.PlasmaConfig != nil { - banner += fmt.Sprintf("Node supports Plasma Mode with CommitmentType %v\n", c.PlasmaConfig.CommitmentType) + banner += fmt.Sprintf("Node supports Alt-DA Mode with CommitmentType %v\n", c.PlasmaConfig.CommitmentType) } return banner } diff --git a/op-plasma/cli.go b/op-plasma/cli.go index 2664a19c7996..f5c4f123f49b 100644 --- a/op-plasma/cli.go +++ b/op-plasma/cli.go @@ -7,44 +7,56 @@ import ( "github.com/urfave/cli/v2" ) -const ( - EnabledFlagName = "plasma.enabled" - DaServerAddressFlagName = "plasma.da-server" - VerifyOnReadFlagName = "plasma.verify-on-read" - DaServiceFlag = "plasma.da-service" +var ( + EnabledFlagName, EnabledFlagAlias = altDAFlags("enabled") + DaServerAddressFlagName, DaServerAddressFlagAlias = altDAFlags("da-server") + VerifyOnReadFlagName, VerifyOnReadFlagAlias = altDAFlags("verify-on-read") + DaServiceFlag, DaServiceFlagAlias = altDAFlags("da-service") ) -func plasmaEnv(envprefix, v string) []string { - return []string{envprefix + "_PLASMA_" + v} +// altDAFlags returns the flag names for altDA, with an Alias for plasma +func altDAFlags(v string) (string, string) { + return "altda." + v, + "plasma." + v +} + +func altDAEnvs(envprefix, v string) []string { + return []string{ + envprefix + "_ALTDA_" + v, + envprefix + "_PLASMA_" + v} } func CLIFlags(envPrefix string, category string) []cli.Flag { return []cli.Flag{ &cli.BoolFlag{ Name: EnabledFlagName, - Usage: "Enable plasma mode\nPlasma Mode is a Beta feature of the MIT licensed OP Stack. While it has received initial review from core contributors, it is still undergoing testing, and may have bugs or other issues.", + Aliases: []string{EnabledFlagAlias}, + Usage: "Enable Alt-DA mode\nAlt-DA Mode is a Beta feature of the MIT licensed OP Stack. While it has received initial review from core contributors, it is still undergoing testing, and may have bugs or other issues.", Value: false, - EnvVars: plasmaEnv(envPrefix, "ENABLED"), + EnvVars: altDAEnvs(envPrefix, "ENABLED"), Category: category, }, &cli.StringFlag{ Name: DaServerAddressFlagName, + Aliases: []string{DaServerAddressFlagAlias}, Usage: "HTTP address of a DA Server", - EnvVars: plasmaEnv(envPrefix, "DA_SERVER"), + EnvVars: altDAEnvs(envPrefix, "DA_SERVER"), Category: category, }, &cli.BoolFlag{ Name: VerifyOnReadFlagName, + Aliases: []string{VerifyOnReadFlagAlias}, Usage: "Verify input data matches the commitments from the DA storage service", Value: true, - EnvVars: plasmaEnv(envPrefix, "VERIFY_ON_READ"), + EnvVars: altDAEnvs(envPrefix, "VERIFY_ON_READ"), Category: category, }, &cli.BoolFlag{ Name: DaServiceFlag, - Usage: "Use DA service type where commitments are generated by plasma server", + Aliases: []string{DaServiceFlagAlias}, + Usage: "Use DA service type where commitments are generated by Alt-DA server", Value: false, - EnvVars: plasmaEnv(envPrefix, "DA_SERVICE"), + EnvVars: altDAEnvs(envPrefix, "DA_SERVICE"), Category: category, }, } From 78b853c43c1e14f0297ab086eb790b4981ca7cd6 Mon Sep 17 00:00:00 2001 From: Andrew Raffensperger Date: Thu, 13 Jun 2024 09:46:54 -0700 Subject: [PATCH 036/141] RLPErrors.sol: Relax Semver (#10819) * fix version * change to suggestion --- packages/contracts-bedrock/src/libraries/rlp/RLPErrors.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contracts-bedrock/src/libraries/rlp/RLPErrors.sol b/packages/contracts-bedrock/src/libraries/rlp/RLPErrors.sol index f7a9cdb091c4..c2ce80a6cc73 100644 --- a/packages/contracts-bedrock/src/libraries/rlp/RLPErrors.sol +++ b/packages/contracts-bedrock/src/libraries/rlp/RLPErrors.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.15; +pragma solidity ^0.8.0; /// @notice The length of an RLP item must be greater than zero to be decodable error EmptyItem(); From 25ab2327070de0fcdbca37cfb03c0b8dd1cf5231 Mon Sep 17 00:00:00 2001 From: smartcontracts Date: Thu, 13 Jun 2024 12:47:36 -0400 Subject: [PATCH 037/141] maint: primary README cleanup (#10817) Just some regular README cleanup. Nothing huge here, a few tweaks to make things flow smoothly. --- README.md | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 435fb5b46ca0..909d7c2eb3bc 100644 --- a/README.md +++ b/README.md @@ -28,35 +28,31 @@ ## What is Optimism? -[Optimism](https://www.optimism.io/) is a project dedicated to scaling Ethereum's technology and expanding its ability to coordinate people from across the world to build effective decentralized economies and governance systems. The [Optimism Collective](https://app.optimism.io/announcement) builds open-source software for running L2 blockchains and aims to address key governance and economic challenges in the wider cryptocurrency ecosystem. Optimism operates on the principle of **impact=profit**, the idea that individuals who positively impact the Collective should be proportionally rewarded with profit. **Change the incentives and you change the world.** +[Optimism](https://www.optimism.io/) is a project dedicated to scaling Ethereum's technology and expanding its ability to coordinate people from across the world to build effective decentralized economies and governance systems. The [Optimism Collective](https://www.optimism.io/vision) builds open-source software that powers scalable blockchains and aims to address key governance and economic challenges in the wider Ethereum ecosystem. Optimism operates on the principle of **impact=profit**, the idea that individuals who positively impact the Collective should be proportionally rewarded with profit. **Change the incentives and you change the world.** -In this repository, you'll find numerous core components of the OP Stack, the decentralized software stack maintained by the Optimism Collective that powers Optimism and forms the backbone of blockchains like [OP Mainnet](https://explorer.optimism.io/) and [Base](https://base.org). Designed to be "aggressively open source," the OP Stack encourages you to explore, modify, extend, and test the code as needed. Although not all elements of the OP Stack are contained here, many of its essential components can be found within this repository. By collaborating on free, open software and shared standards, the Optimism Collective aims to prevent siloed software development and rapidly accelerate the development of the Ethereum ecosystem. Come contribute, build the future, and redefine power, together. +In this repository you'll find numerous core components of the OP Stack, the decentralized software stack maintained by the Optimism Collective that powers Optimism and forms the backbone of blockchains like [OP Mainnet](https://explorer.optimism.io/) and [Base](https://base.org). The OP Stack is designed to be aggressively open-source — you are welcome to explore, modify, and extend this code. ## Documentation - If you want to build on top of OP Mainnet, refer to the [Optimism Documentation](https://docs.optimism.io) -- If you want to build your own OP Stack based blockchain, refer to the [OP Stack Guide](https://docs.optimism.io/stack/getting-started), and make sure to understand this repository's [Development and Release Process](#development-and-release-process) +- If you want to build your own OP Stack based blockchain, refer to the [OP Stack Guide](https://docs.optimism.io/stack/getting-started) and make sure to understand this repository's [Development and Release Process](#development-and-release-process) ## Specification -If you're interested in the technical details of how Optimism works, refer to the [Optimism Protocol Specification](https://github.com/ethereum-optimism/specs). +Detailed specifications for the OP Stack can be found within the [OP Stack Specs](https://github.com/ethereum-optimism/specs) repository. -## Community +## Contributing -General discussion happens most frequently on the [Optimism discord](https://discord.gg/optimism). -Governance discussion can also be found on the [Optimism Governance Forum](https://gov.optimism.io/). +The OP Stack is a collaborative project. By collaborating on free, open software and shared standards, the Optimism Collective aims to prevent siloed software development and rapidly accelerate the development of the Ethereum ecosystem. Come contribute, build the future, and redefine power, together. -## Contributing +[CONTRIBUTING.md](./CONTRIBUTING.md) contains a detailed explanation of the contributing process for this repository. Make sure to use the [Developer Quick Start](./CONTRIBUTING.md#development-quick-start) to properly set up your development environment. -Read through [CONTRIBUTING.md](./CONTRIBUTING.md) for a general overview of the contributing process for this repository. -Use the [Developer Quick Start](./CONTRIBUTING.md#development-quick-start) to get your development environment set up to start working on the Optimism Monorepo. -Then check out the list of [Good First Issues](https://github.com/ethereum-optimism/optimism/issues?q=is:open+is:issue+label:D-good-first-issue) to find something fun to work on! -Typo fixes are welcome; however, please create a single commit with all of the typo fixes & batch as many fixes together in a PR as possible. Spammy PRs will be closed. +[Good First Issues](https://github.com/ethereum-optimism/optimism/issues?q=is:open+is:issue+label:D-good-first-issue) are a great place to look for tasks to tackle if you're not sure where to start. ## Security Policy and Vulnerability Reporting Please refer to the canonical [Security Policy](https://github.com/ethereum-optimism/.github/blob/master/SECURITY.md) document for detailed information about how to report vulnerabilities in this codebase. -Bounty hunters are encouraged to check out [the Optimism Immunefi bug bounty program](https://immunefi.com/bounty/optimism/). +Bounty hunters are encouraged to check out the [Optimism Immunefi bug bounty program](https://immunefi.com/bounty/optimism/). The Optimism Immunefi program offers up to $2,000,042 for in-scope critical vulnerabilities. ## Directory Structure @@ -80,8 +76,8 @@ The Optimism Immunefi program offers up to $2,000,042 for in-scope critical vuln ├── ops-bedrock: Bedrock devnet work ├── packages │ ├── chain-mon: Chain monitoring services -│ ├── contracts-bedrock: Bedrock smart contracts -│ ├── sdk: provides a set of tools for interacting with Optimism +│ ├── contracts-bedrock: OP Stack smart contracts +│ ├── devnet-tasks: Legacy Hardhat tasks used within devnet CI tests ├── proxyd: Configurable RPC request router and proxy ├── specs: Specs of the rollup starting at the Bedrock upgrade @@ -90,7 +86,7 @@ The Optimism Immunefi program offers up to $2,000,042 for in-scope critical vuln ### Overview -Please read this section if you're planning to fork this repository, or make frequent PRs into this repository. +Please read this section carefully if you're planning to fork or make frequent PRs into this repository. ### Production Releases @@ -99,11 +95,11 @@ For example, an `op-node` release might be versioned as `op-node/v1.1.2`, and s Release candidates are versioned in the format `op-node/v1.1.2-rc.1`. We always start with `rc.1` rather than `rc`. -For contract releases, refer to the GitHub release notes for a given release, which will list the specific contracts being released—not all contracts are considered production ready within a release, and many are under active development. +For contract releases, refer to the GitHub release notes for a given release which will list the specific contracts being released. Not all contracts are considered production ready within a release and many are under active development. Tags of the form `v`, such as `v1.1.4`, indicate releases of all Go code only, and **DO NOT** include smart contracts. This naming scheme is required by Golang. -In the above list, this means these `v Date: Thu, 13 Jun 2024 23:48:07 +0700 Subject: [PATCH 038/141] refactor: correct comment naming (#10816) --- op-batcher/batcher/channel_builder.go | 2 +- op-batcher/batcher/tx_data.go | 2 +- op-chain-ops/clients/clients.go | 2 +- op-chain-ops/foundry/artifact.go | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/op-batcher/batcher/channel_builder.go b/op-batcher/batcher/channel_builder.go index 1a4ed28bb3f3..9e496b290d92 100644 --- a/op-batcher/batcher/channel_builder.go +++ b/op-batcher/batcher/channel_builder.go @@ -82,7 +82,7 @@ type ChannelBuilder struct { outputBytes int } -// newChannelBuilder creates a new channel builder or returns an error if the +// NewChannelBuilder creates a new channel builder or returns an error if the // channel out could not be created. // it acts as a factory for either a span or singular channel out func NewChannelBuilder(cfg ChannelConfig, rollupCfg rollup.Config, latestL1OriginBlockNum uint64) (*ChannelBuilder, error) { diff --git a/op-batcher/batcher/tx_data.go b/op-batcher/batcher/tx_data.go index 73e1adbbe179..5937acf6f797 100644 --- a/op-batcher/batcher/tx_data.go +++ b/op-batcher/batcher/tx_data.go @@ -62,7 +62,7 @@ func (td *txData) Len() (l int) { return l } -// Frame returns the single frame of this tx data. +// Frames returns the single frame of this tx data. func (td *txData) Frames() []frameData { return td.frames } diff --git a/op-chain-ops/clients/clients.go b/op-chain-ops/clients/clients.go index 475a130a1f03..16cf1970728c 100644 --- a/op-chain-ops/clients/clients.go +++ b/op-chain-ops/clients/clients.go @@ -10,7 +10,7 @@ import ( "github.com/urfave/cli/v2" ) -// clients represents a set of initialized RPC clients +// Clients represents a set of initialized RPC clients type Clients struct { L1Client *ethclient.Client L2Client *ethclient.Client diff --git a/op-chain-ops/foundry/artifact.go b/op-chain-ops/foundry/artifact.go index 93791ef806d0..cd1b5c9e73d9 100644 --- a/op-chain-ops/foundry/artifact.go +++ b/op-chain-ops/foundry/artifact.go @@ -66,7 +66,7 @@ type DeployedBytecode struct { ImmutableReferences json.RawMessage `json:"immutableReferences,omitempty"` } -// DeployedBytecode represents the bytecode section of the solc compiler output. +// Bytecode represents the bytecode section of the solc compiler output. type Bytecode struct { SourceMap string `json:"sourceMap"` Object hexutil.Bytes `json:"object"` From e20aea4f8bfcbdc60cdfb029034db48f7ae7104b Mon Sep 17 00:00:00 2001 From: Javier Cortejoso Date: Thu, 13 Jun 2024 22:21:46 +0200 Subject: [PATCH 039/141] fix: remove step from husky (#10821) Delete `pnpm prepare` step from Makefile as this script has been removed recently --- Makefile | 1 - 1 file changed, 1 deletion(-) diff --git a/Makefile b/Makefile index 02ea6b71f14f..174909d18faf 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,6 @@ build-ts: submodules . $$NVM_DIR/nvm.sh && nvm use; \ fi pnpm install:ci - pnpm prepare pnpm build .PHONY: build-ts From c76c5420c43d1d7d07175b65e89d74925f7a3899 Mon Sep 17 00:00:00 2001 From: bocalhky <2865836+bocalhky@users.noreply.github.com> Date: Thu, 13 Jun 2024 23:58:16 +0300 Subject: [PATCH 040/141] fix broken links to specs (#10820) --- CONTRIBUTING.md | 2 +- cannon/docs/README.md | 2 +- docs/fault-proof-alpha/README.md | 8 ++++---- docs/fault-proof-alpha/immunefi.md | 6 +++--- docs/fault-proof-alpha/manual.md | 6 +++--- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f27642d2d472..090562981364 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,7 +10,7 @@ There are plenty of ways to contribute, in particular we appreciate support in t - Fixing and responding to existing issues. You can start off with those tagged ["good first issue"](https://github.com/ethereum-optimism/optimism/labels/D-good-first-issue) which are meant as introductory issues for external contributors. - Improving the [community site](https://community.optimism.io/), [documentation](https://github.com/ethereum-optimism/community-hub) and [tutorials](https://github.com/ethereum-optimism/optimism-tutorial). - Become an "Optimizer" and answer questions in the [Optimism Discord](https://discord.optimism.io). -- Get involved in the protocol design process by proposing changes or new features or write parts of the spec yourself in the [specs subdirectory](./specs/). +- Get involved in the protocol design process by proposing changes or new features or write parts of the spec yourself in the [specs repository](https://github.com/ethereum-optimism/specs). Note that we have a [Code of Conduct](https://github.com/ethereum-optimism/.github/blob/master/CODE_OF_CONDUCT.md), please follow it in all your interactions with the project. diff --git a/cannon/docs/README.md b/cannon/docs/README.md index 90fbcd34dbd6..61c9595e8f3c 100644 --- a/cannon/docs/README.md +++ b/cannon/docs/README.md @@ -45,7 +45,7 @@ There are 3 types of witness data involved in onchain execution: ### Packed State The Packed State is provided in every executed onchain instruction. -See [Cannon VM Specs](https://github.com/ethereum-optimism/specs/blob/main/specs/experimental/fault-proof/cannon-fault-proof-vm.md#state) for +See [Cannon VM Specs](https://github.com/ethereum-optimism/specs/blob/main/specs/fault-proof/cannon-fault-proof-vm.md#state) for details on the state structure. The packed state is small! The `State` data can be packed in such a small amount of EVM words, diff --git a/docs/fault-proof-alpha/README.md b/docs/fault-proof-alpha/README.md index f46e51ba7dd2..0e647cf60d9d 100644 --- a/docs/fault-proof-alpha/README.md +++ b/docs/fault-proof-alpha/README.md @@ -16,10 +16,10 @@ finalized and may change without notice. ### Contents * Specifications - * [Generic Fault Proof System](../../specs/fault-proof.md) - * [Generic Dispute Game Interface](../../specs/dispute-game-interface.md) - * [Fault Dispute Game](../../specs/fault-dispute-game.md) - * [Cannon VM](../../specs/cannon-fault-proof-vm.md) + * [Generic Fault Proof System](https://github.com/ethereum-optimism/specs/blob/main/specs/fault-proof/index.md) + * [Generic Dispute Game Interface](https://github.com/ethereum-optimism/specs/blob/main/specs/fault-proof/stage-one/dispute-game-interface.md) + * [Fault Dispute Game](https://github.com/ethereum-optimism/specs/blob/main/specs/fault-proof/stage-one/fault-dispute-game.md) + * [Cannon VM](https://github.com/ethereum-optimism/specs/blob/main/specs/fault-proof/cannon-fault-proof-vm.md) * [Deployment Details](./deployments.md) * [Manual Usage](./manual.md) * [Creating Traces with Cannon](./cannon.md) diff --git a/docs/fault-proof-alpha/immunefi.md b/docs/fault-proof-alpha/immunefi.md index f3ad942950b0..a8becf158f5f 100644 --- a/docs/fault-proof-alpha/immunefi.md +++ b/docs/fault-proof-alpha/immunefi.md @@ -88,13 +88,13 @@ See our bounty program on [Immunefi][immunefi] for information regarding reward [cannon]: https://github.com/ethereum-optimism/optimism/tree/develop/cannon -[cannon-vm-specs]: https://github.com/ethereum-optimism/optimism/blob/develop/specs/cannon-fault-proof-vm.md +[cannon-vm-specs]: https://github.com/ethereum-optimism/specs/blob/main/specs/fault-proof/cannon-fault-proof-vm.md [dispute-game]: https://github.com/ethereum-optimism/optimism/tree/develop/packages/contracts-bedrock/src/dispute -[fault-dispute-specs]: https://github.com/ethereum-optimism/optimism/blob/develop/specs/fault-dispute-game.md +[fault-dispute-specs]: https://github.com/ethereum-optimism/specs/blob/main/specs/fault-proof/stage-one/fault-dispute-game.md [cannon-contracts]: https://github.com/ethereum-optimism/optimism/tree/develop/packages/contracts-bedrock/src/cannon [op-program]: https://github.com/ethereum-optimism/optimism/tree/develop/op-program [op-challenger]: https://github.com/ethereum-optimism/optimism/tree/develop/op-challenger [alphabet-vm]: https://github.com/ethereum-optimism/optimism/blob/c1cbacef0097c28f999e3655200e6bd0d4dba9f2/packages/contracts-bedrock/test/FaultDisputeGame.t.sol#L977-L1005 -[fault-proof-specs]: https://github.com/ethereum-optimism/optimism/blob/develop/specs/fault-proof.md +[fault-proof-specs]: https://github.com/ethereum-optimism/specs/blob/main/specs/fault-proof/index.md [immunefi]: https://immunefi.com/bounty/optimism/ [invalid-proposal-doc]: https://github.com/ethereum-optimism/optimism/blob/develop/docs/fault-proof-alpha/invalid-proposals.md diff --git a/docs/fault-proof-alpha/manual.md b/docs/fault-proof-alpha/manual.md index 36580defa0d6..0963cdf44f94 100644 --- a/docs/fault-proof-alpha/manual.md +++ b/docs/fault-proof-alpha/manual.md @@ -30,7 +30,7 @@ arbitrary hash can be used for claim values. For more advanced cases [cannon can trace, including the claim values to use at specific steps. Note that it is not valid to create a game that disputes an output root, using the final hash from a trace that confirms the output root is valid. To dispute an output root successfully, the trace must resolve that the disputed output root is invalid. This is indicated by the first byte of -the claim value being set to the invalid [VM status](../../specs/cannon-fault-proof-vm.md#state-hash) (`0x01`). +the claim value being set to the invalid [VM status](https://github.com/ethereum-optimism/specs/blob/main/specs/fault-proof/cannon-fault-proof-vm.md#state-hash) (`0x01`). The game can then be created by calling the `create` method on the `DisputeGameFactory` contract. This requires three parameters: @@ -94,9 +94,9 @@ single instruction in cannon running on-chain. When the instruction to be executed as part of a `step` call reads from some pre-image data, that data must be loaded into the pre-image oracle prior to calling `step`. -For [local pre-image keys](../../specs/fault-proof.md#type-1-local-key), the pre-image must be populated via +For [local pre-image keys](https://github.com/ethereum-optimism/specs/blob/main/specs/fault-proof/index.md#type-1-local-key), the pre-image must be populated via the `FaultDisputeGame` contract by calling the `addLocalData` function. -For [global keccak256 keys](../../specs/fault-proof.md#type-2-global-keccak256-key), the data should be added directly +For [global keccak256 keys](https://github.com/ethereum-optimism/specs/blob/main/specs/fault-proof/index.md#type-2-global-keccak256-key), the data should be added directly to the pre-image oracle contract. ### Resolving a Game From f531448485bf0002f2546c5288f50f584b5d758b Mon Sep 17 00:00:00 2001 From: Marcel <153717436+MonkeyMarcel@users.noreply.github.com> Date: Fri, 14 Jun 2024 21:34:03 +0800 Subject: [PATCH 041/141] remove unused import (#10826) --- bedrock-devnet/devnet/__init__.py | 2 -- ops/tag-service/tag-service.py | 1 - ops/tag-service/tag-tool.py | 1 - 3 files changed, 4 deletions(-) diff --git a/bedrock-devnet/devnet/__init__.py b/bedrock-devnet/devnet/__init__.py index 18f175d3d207..e588431de4b6 100644 --- a/bedrock-devnet/devnet/__init__.py +++ b/bedrock-devnet/devnet/__init__.py @@ -4,12 +4,10 @@ import subprocess import json import socket -import calendar import datetime import time import shutil import http.client -import gzip from multiprocessing import Process, Queue import concurrent.futures from collections import namedtuple diff --git a/ops/tag-service/tag-service.py b/ops/tag-service/tag-service.py index 2db9e36c53b5..13e5a8e7b435 100755 --- a/ops/tag-service/tag-service.py +++ b/ops/tag-service/tag-service.py @@ -3,7 +3,6 @@ import os import re import subprocess -import sys import click import semver diff --git a/ops/tag-service/tag-tool.py b/ops/tag-service/tag-tool.py index f3fd847ce069..d5de3acb2edd 100644 --- a/ops/tag-service/tag-tool.py +++ b/ops/tag-service/tag-tool.py @@ -1,6 +1,5 @@ import argparse import subprocess -import re import semver SERVICES = [ From b76fd743da2220a8b5cc09adbdf3c14b87063f84 Mon Sep 17 00:00:00 2001 From: Kim Date: Fri, 14 Jun 2024 23:12:25 +0900 Subject: [PATCH 042/141] remove unnecessary cgo binding in test (#10825) --- go.mod | 4 ++-- op-node/rollup/derive/channel_test.go | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index b9a89cc08655..a451552bd398 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,6 @@ module github.com/ethereum-optimism/optimism go 1.21 require ( - github.com/DataDog/zstd v1.5.5 github.com/andybalholm/brotli v1.1.0 github.com/btcsuite/btcd v0.24.0 github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 @@ -25,6 +24,7 @@ require ( github.com/holiman/uint256 v1.2.4 github.com/ipfs/go-datastore v0.6.0 github.com/ipfs/go-ds-leveldb v0.5.0 + github.com/klauspost/compress v1.17.8 github.com/libp2p/go-libp2p v0.35.0 github.com/libp2p/go-libp2p-mplex v0.9.0 github.com/libp2p/go-libp2p-pubsub v0.11.0 @@ -49,6 +49,7 @@ require ( ) require ( + github.com/DataDog/zstd v1.5.5 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect github.com/VictoriaMetrics/fastcache v1.12.1 // indirect github.com/allegro/bigcache v1.2.1 // indirect @@ -126,7 +127,6 @@ require ( github.com/jbenet/goprocess v0.1.4 // indirect github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267 // indirect github.com/karalabe/usb v0.0.3-0.20230711191512-61db3e06439c // indirect - github.com/klauspost/compress v1.17.8 // indirect github.com/klauspost/cpuid/v2 v2.2.7 // indirect github.com/koron/go-ssdp v0.0.4 // indirect github.com/kr/pretty v0.3.1 // indirect diff --git a/op-node/rollup/derive/channel_test.go b/op-node/rollup/derive/channel_test.go index e853d622aa04..a6594492837b 100644 --- a/op-node/rollup/derive/channel_test.go +++ b/op-node/rollup/derive/channel_test.go @@ -7,9 +7,9 @@ import ( "math/rand" "testing" - "github.com/DataDog/zstd" "github.com/andybalholm/brotli" "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/klauspost/compress/zstd" "github.com/stretchr/testify/require" ) @@ -143,8 +143,9 @@ func TestBatchReader(t *testing.T) { case ca == Zstd: // invalid algo return func(buf *bytes.Buffer, t *testing.T) { buf.WriteByte(0x02) // invalid channel version byte - writer := zstd.NewWriter(buf) - _, err := writer.Write(encodedBatch.Bytes()) + writer, err := zstd.NewWriter(buf) + require.NoError(t, err) + _, err = writer.Write(encodedBatch.Bytes()) require.NoError(t, err) require.NoError(t, writer.Close()) } From abbbd95632e846e4f56df8cdc933a612e674f301 Mon Sep 17 00:00:00 2001 From: George Knee Date: Fri, 14 Jun 2024 15:30:12 +0100 Subject: [PATCH 043/141] update dependency on op-geth and superchain (#10830) --- go.mod | 4 ++-- go.sum | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index a451552bd398..9b757e72dad1 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/crate-crypto/go-kzg-4844 v0.7.0 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3 - github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240610174713-583ceb57407d + github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240614103325-d8902381f5d8 github.com/ethereum/go-ethereum v1.13.15 github.com/fsnotify/fsnotify v1.7.0 github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb @@ -226,7 +226,7 @@ require ( rsc.io/tmplfunc v0.0.3 // indirect ) -replace github.com/ethereum/go-ethereum => github.com/ethereum-optimism/op-geth v1.101315.2-rc.1 +replace github.com/ethereum/go-ethereum => github.com/ethereum-optimism/op-geth v1.101315.3-rc.1 //replace github.com/ethereum/go-ethereum v1.13.9 => ../op-geth diff --git a/go.sum b/go.sum index 0c66f61d48ae..26cbdc69a97d 100644 --- a/go.sum +++ b/go.sum @@ -10,8 +10,8 @@ git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGy github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M= github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= -github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= +github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= @@ -170,10 +170,10 @@ github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/ github.com/elastic/gosigar v0.14.2/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3 h1:RWHKLhCrQThMfch+QJ1Z8veEq5ZO3DfIhZ7xgRP9WTc= github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3/go.mod h1:QziizLAiF0KqyLdNJYD7O5cpDlaFMNZzlxYNcWsJUxs= -github.com/ethereum-optimism/op-geth v1.101315.2-rc.1 h1:9sNukA27AqReNkBEaus2kf+DLNXgkksRj+NbJHYgqxc= -github.com/ethereum-optimism/op-geth v1.101315.2-rc.1/go.mod h1:vObZmT4rKd8hjSblIktsJHtLX8SXbCoaIXEd42HMDB0= -github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240610174713-583ceb57407d h1:lGvrOam2IOoszfxqrpXeIFIT58/e6N1VuOLVaai9GOg= -github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240610174713-583ceb57407d/go.mod h1:7xh2awFQqsiZxFrHKTgEd+InVfDRrkKVUIuK8SAFHp0= +github.com/ethereum-optimism/op-geth v1.101315.3-rc.1 h1:Q/B0FBdtglzsFtqurvUsiNfH8isCOFFF/pf9ss0L4eY= +github.com/ethereum-optimism/op-geth v1.101315.3-rc.1/go.mod h1:h5C5tP+7gkMrlUGENuiV5ddlwJ4RxLdmdapRuTAGlnw= +github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240614103325-d8902381f5d8 h1:CTeE8ZsqRwwV0z8NVazSyXgRx4aAPwtCucN/IkfYqdU= +github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240614103325-d8902381f5d8/go.mod h1:/S7Chw9Xo8Nx6Ranq2OMyeyG+9mFvgBYvLZk4JyTw/k= github.com/ethereum/c-kzg-4844 v0.4.0 h1:3MS1s4JtA868KpJxroZoepdV0ZKBp3u/O5HcZ7R3nlY= github.com/ethereum/c-kzg-4844 v0.4.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= From f99eca3971b2875b9c09b747561a0518e27f051e Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Fri, 14 Jun 2024 10:40:09 -0400 Subject: [PATCH 044/141] txmgr: Include the revert reason in the error when estimateGas fails (#10829) --- op-e2e/e2eutils/transactions/send.go | 14 +++--------- op-service/errutil/errors.go | 22 +++++++++++++++++++ op-service/errutil/errors_test.go | 32 ++++++++++++++++++++++++++++ op-service/txmgr/txmgr.go | 3 ++- 4 files changed, 59 insertions(+), 12 deletions(-) create mode 100644 op-service/errutil/errors.go create mode 100644 op-service/errutil/errors_test.go diff --git a/op-e2e/e2eutils/transactions/send.go b/op-e2e/e2eutils/transactions/send.go index eb229e3fb4f2..d154a9751598 100644 --- a/op-e2e/e2eutils/transactions/send.go +++ b/op-e2e/e2eutils/transactions/send.go @@ -3,12 +3,12 @@ package transactions import ( "context" "crypto/ecdsa" - "errors" "fmt" "math/big" "testing" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait" + "github.com/ethereum-optimism/optimism/op-service/errutil" "github.com/ethereum-optimism/optimism/op-service/txmgr" "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/core/types" @@ -20,10 +20,6 @@ import ( type SendTxOpt func(cfg *sendTxCfg) -type ErrWithData interface { - ErrorData() interface{} -} - type sendTxCfg struct { receiptStatus uint64 } @@ -83,11 +79,7 @@ func SendTx(ctx context.Context, client *ethclient.Client, candidate txmgr.TxCan } gas, err := client.EstimateGas(ctx, msg) if err != nil { - var errWithData ErrWithData - if errors.As(err, &errWithData) { - return nil, nil, fmt.Errorf("failed to estimate gas. errdata: %v err: %w", errWithData.ErrorData(), err) - } - return nil, nil, fmt.Errorf("failed to estimate gas: %w", err) + return nil, nil, fmt.Errorf("failed to estimate gas: %w", errutil.TryAddRevertReason(err)) } tx := types.MustSignNewTx(privKey, types.LatestSignerForChainID(chainID), &types.DynamicFeeTx{ @@ -102,7 +94,7 @@ func SendTx(ctx context.Context, client *ethclient.Client, candidate txmgr.TxCan }) err = client.SendTransaction(ctx, tx) if err != nil { - return nil, nil, fmt.Errorf("failed to send transaction: %w", err) + return nil, nil, fmt.Errorf("failed to send transaction: %w", errutil.TryAddRevertReason(err)) } receipt, err := wait.ForReceipt(ctx, client, tx.Hash(), cfg.receiptStatus) if err != nil { diff --git a/op-service/errutil/errors.go b/op-service/errutil/errors.go new file mode 100644 index 000000000000..f04ffe205ba1 --- /dev/null +++ b/op-service/errutil/errors.go @@ -0,0 +1,22 @@ +package errutil + +import ( + "errors" + "fmt" +) + +type errWithData interface { + ErrorData() interface{} +} + +// TryAddRevertReason attempts to extract the revert reason from geth RPC client errors and adds it to the error message. +// This is most useful when attempting to execute gas, as if the transaction reverts this will then show the reason. +func TryAddRevertReason(err error) error { + var errData errWithData + ok := errors.As(err, &errData) + if ok { + return fmt.Errorf("%w, reason: %v", err, errData.ErrorData()) + } else { + return err + } +} diff --git a/op-service/errutil/errors_test.go b/op-service/errutil/errors_test.go new file mode 100644 index 000000000000..77f2d1de8113 --- /dev/null +++ b/op-service/errutil/errors_test.go @@ -0,0 +1,32 @@ +package errutil + +import ( + "errors" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestTryAddRevertReason(t *testing.T) { + t.Run("AddsReason", func(t *testing.T) { + err := stubError{} + result := TryAddRevertReason(err) + require.Contains(t, result.Error(), "kaboom") + }) + + t.Run("ReturnOriginalWhenNoErrorDataMethod", func(t *testing.T) { + err := errors.New("boom") + result := TryAddRevertReason(err) + require.Same(t, err, result) + }) +} + +type stubError struct{} + +func (s stubError) Error() string { + return "where's the" +} + +func (s stubError) ErrorData() interface{} { + return "kaboom" +} diff --git a/op-service/txmgr/txmgr.go b/op-service/txmgr/txmgr.go index 015d6edc767f..2e5a87d073da 100644 --- a/op-service/txmgr/txmgr.go +++ b/op-service/txmgr/txmgr.go @@ -10,6 +10,7 @@ import ( "sync/atomic" "time" + "github.com/ethereum-optimism/optimism/op-service/errutil" "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus/misc/eip4844" @@ -272,7 +273,7 @@ func (m *SimpleTxManager) craftTx(ctx context.Context, candidate TxCandidate) (* Value: candidate.Value, }) if err != nil { - return nil, fmt.Errorf("failed to estimate gas: %w", err) + return nil, fmt.Errorf("failed to estimate gas: %w", errutil.TryAddRevertReason(err)) } gasLimit = gas } From 5cd021406948e6b6682aed859e6733a53ec9867d Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Fri, 14 Jun 2024 10:40:42 -0400 Subject: [PATCH 045/141] ci: Stop running l2oo variant of devnet tests (#10818) --- .circleci/config.yml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 32eaa935310e..c46f026c0a37 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1137,13 +1137,6 @@ jobs: DEVNET_PLASMA: 'false' steps: - checkout - - when: - condition: - equal: ['l2oo', <>] - steps: - - run: - name: Set DEVNET_L2OO = true - command: echo 'export DEVNET_L2OO=true' >> $BASH_ENV - when: condition: equal: ['plasma', <>] @@ -1750,7 +1743,7 @@ workflows: - devnet: matrix: parameters: - variant: ["default", "l2oo", "plasma", "plasma-generic"] + variant: ["default", "plasma", "plasma-generic"] requires: - pnpm-monorepo - op-batcher-docker-build From 3aeb6bdd3efe798713098f890359513eaaa91522 Mon Sep 17 00:00:00 2001 From: Jacob Elias Date: Fri, 14 Jun 2024 10:56:48 -0500 Subject: [PATCH 046/141] feat: remove proxyd from monorepo, since it has been moved to ethereum-optimism/infra (#10831) --- .circleci/config.yml | 21 +- .github/mergify.yml | 8 - .github/workflows/tag-service.yml | 1 - docker-bake.hcl | 13 - ops/docker/op-stack-go/Dockerfile | 22 +- ops/scripts/ci-docker-tag-op-stack-release.sh | 2 +- ops/tag-service/tag-service.py | 1 - ops/tag-service/tag-tool.py | 1 - proxyd/.gitignore | 3 - proxyd/CHANGELOG.md | 252 ---- proxyd/Dockerfile | 32 - proxyd/Dockerfile.ignore | 3 - proxyd/Makefile | 25 - proxyd/README.md | 148 +- proxyd/backend.go | 1272 ----------------- proxyd/backend_test.go | 21 - proxyd/cache.go | 192 --- proxyd/cache_test.go | 213 --- proxyd/cmd/proxyd/main.go | 121 -- proxyd/config.go | 184 --- proxyd/consensus_poller.go | 746 ---------- proxyd/consensus_tracker.go | 356 ----- proxyd/entrypoint.sh | 6 - proxyd/errors.go | 7 - proxyd/example.config.toml | 123 -- proxyd/frontend_rate_limiter.go | 139 -- proxyd/frontend_rate_limiter_test.go | 53 - proxyd/go.mod | 86 -- proxyd/go.sum | 290 ---- .../integration_tests/batch_timeout_test.go | 42 - proxyd/integration_tests/batching_test.go | 188 --- proxyd/integration_tests/caching_test.go | 275 ---- proxyd/integration_tests/consensus_test.go | 1005 ------------- proxyd/integration_tests/failover_test.go | 288 ---- proxyd/integration_tests/fallback_test.go | 374 ----- .../integration_tests/max_rpc_conns_test.go | 79 - proxyd/integration_tests/mock_backend_test.go | 327 ----- proxyd/integration_tests/rate_limit_test.go | 170 --- .../sender_rate_limit_test.go | 126 -- proxyd/integration_tests/smoke_test.go | 51 - .../testdata/batch_timeout.toml | 20 - .../integration_tests/testdata/batching.toml | 23 - .../integration_tests/testdata/caching.toml | 36 - .../integration_tests/testdata/consensus.toml | 30 - .../testdata/consensus_responses.yml | 234 --- .../integration_tests/testdata/failover.toml | 20 - .../integration_tests/testdata/fallback.toml | 31 - .../testdata/frontend_rate_limit.toml | 35 - .../testdata/max_rpc_conns.toml | 19 - .../testdata/out_of_service_interval.toml | 22 - .../integration_tests/testdata/retries.toml | 18 - .../testdata/sender_rate_limit.toml | 24 - .../testdata/size_limits.toml | 21 - proxyd/integration_tests/testdata/smoke.toml | 18 - .../integration_tests/testdata/testdata.txt | 14 - .../integration_tests/testdata/whitelist.toml | 19 - proxyd/integration_tests/testdata/ws.toml | 28 - proxyd/integration_tests/util_test.go | 191 --- proxyd/integration_tests/validation_test.go | 258 ---- proxyd/integration_tests/ws_test.go | 241 ---- proxyd/methods.go | 92 -- proxyd/metrics.go | 601 -------- proxyd/pkg/avg-sliding-window/sliding.go | 188 --- proxyd/pkg/avg-sliding-window/sliding_test.go | 277 ---- proxyd/proxyd.go | 472 ------ proxyd/reader.go | 32 - proxyd/reader_test.go | 43 - proxyd/redis.go | 22 - proxyd/rewriter.go | 310 ---- proxyd/rewriter_test.go | 717 ---------- proxyd/rpc.go | 170 --- proxyd/rpc_test.go | 89 -- proxyd/server.go | 877 ------------ proxyd/string_set.go | 56 - proxyd/tls.go | 33 - proxyd/tools/mockserver/handler/handler.go | 135 -- proxyd/tools/mockserver/main.go | 30 - proxyd/tools/mockserver/node1.yml | 52 - proxyd/tools/mockserver/node2.yml | 44 - 79 files changed, 15 insertions(+), 12793 deletions(-) delete mode 100644 proxyd/.gitignore delete mode 100644 proxyd/CHANGELOG.md delete mode 100644 proxyd/Dockerfile delete mode 100644 proxyd/Dockerfile.ignore delete mode 100644 proxyd/Makefile delete mode 100644 proxyd/backend.go delete mode 100644 proxyd/backend_test.go delete mode 100644 proxyd/cache.go delete mode 100644 proxyd/cache_test.go delete mode 100644 proxyd/cmd/proxyd/main.go delete mode 100644 proxyd/config.go delete mode 100644 proxyd/consensus_poller.go delete mode 100644 proxyd/consensus_tracker.go delete mode 100644 proxyd/entrypoint.sh delete mode 100644 proxyd/errors.go delete mode 100644 proxyd/example.config.toml delete mode 100644 proxyd/frontend_rate_limiter.go delete mode 100644 proxyd/frontend_rate_limiter_test.go delete mode 100644 proxyd/go.mod delete mode 100644 proxyd/go.sum delete mode 100644 proxyd/integration_tests/batch_timeout_test.go delete mode 100644 proxyd/integration_tests/batching_test.go delete mode 100644 proxyd/integration_tests/caching_test.go delete mode 100644 proxyd/integration_tests/consensus_test.go delete mode 100644 proxyd/integration_tests/failover_test.go delete mode 100644 proxyd/integration_tests/fallback_test.go delete mode 100644 proxyd/integration_tests/max_rpc_conns_test.go delete mode 100644 proxyd/integration_tests/mock_backend_test.go delete mode 100644 proxyd/integration_tests/rate_limit_test.go delete mode 100644 proxyd/integration_tests/sender_rate_limit_test.go delete mode 100644 proxyd/integration_tests/smoke_test.go delete mode 100644 proxyd/integration_tests/testdata/batch_timeout.toml delete mode 100644 proxyd/integration_tests/testdata/batching.toml delete mode 100644 proxyd/integration_tests/testdata/caching.toml delete mode 100644 proxyd/integration_tests/testdata/consensus.toml delete mode 100644 proxyd/integration_tests/testdata/consensus_responses.yml delete mode 100644 proxyd/integration_tests/testdata/failover.toml delete mode 100644 proxyd/integration_tests/testdata/fallback.toml delete mode 100644 proxyd/integration_tests/testdata/frontend_rate_limit.toml delete mode 100644 proxyd/integration_tests/testdata/max_rpc_conns.toml delete mode 100644 proxyd/integration_tests/testdata/out_of_service_interval.toml delete mode 100644 proxyd/integration_tests/testdata/retries.toml delete mode 100644 proxyd/integration_tests/testdata/sender_rate_limit.toml delete mode 100644 proxyd/integration_tests/testdata/size_limits.toml delete mode 100644 proxyd/integration_tests/testdata/smoke.toml delete mode 100644 proxyd/integration_tests/testdata/testdata.txt delete mode 100644 proxyd/integration_tests/testdata/whitelist.toml delete mode 100644 proxyd/integration_tests/testdata/ws.toml delete mode 100644 proxyd/integration_tests/util_test.go delete mode 100644 proxyd/integration_tests/validation_test.go delete mode 100644 proxyd/integration_tests/ws_test.go delete mode 100644 proxyd/methods.go delete mode 100644 proxyd/metrics.go delete mode 100644 proxyd/pkg/avg-sliding-window/sliding.go delete mode 100644 proxyd/pkg/avg-sliding-window/sliding_test.go delete mode 100644 proxyd/proxyd.go delete mode 100644 proxyd/reader.go delete mode 100644 proxyd/reader_test.go delete mode 100644 proxyd/redis.go delete mode 100644 proxyd/rewriter.go delete mode 100644 proxyd/rewriter_test.go delete mode 100644 proxyd/rpc.go delete mode 100644 proxyd/rpc_test.go delete mode 100644 proxyd/server.go delete mode 100644 proxyd/string_set.go delete mode 100644 proxyd/tls.go delete mode 100644 proxyd/tools/mockserver/handler/handler.go delete mode 100644 proxyd/tools/mockserver/main.go delete mode 100644 proxyd/tools/mockserver/node1.yml delete mode 100644 proxyd/tools/mockserver/node2.yml diff --git a/.circleci/config.yml b/.circleci/config.yml index c46f026c0a37..744fe623f537 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1555,10 +1555,6 @@ workflows: dependencies: "contracts-bedrock" requires: - pnpm-monorepo - - go-lint-test-build: - name: proxyd-tests - binary_name: proxyd - working_directory: proxyd - semgrep-scan - go-mod-download - fuzz-golang: @@ -1774,7 +1770,7 @@ workflows: type: approval filters: tags: - only: /^(da-server|proxyd|chain-mon|ci-builder(-rust)?|ufm-[a-z0-9\-]*|op-[a-z0-9\-]*)\/v.*/ + only: /^(da-server|chain-mon|ci-builder(-rust)?|ufm-[a-z0-9\-]*|op-[a-z0-9\-]*)\/v.*/ branches: ignore: /.*/ - docker-build: @@ -1952,21 +1948,6 @@ workflows: - oplabs-gcr-release requires: - hold - - docker-build: - name: proxyd-docker-release - filters: - tags: - only: /^proxyd\/v.*/ - branches: - ignore: /.*/ - docker_name: proxyd - docker_tags: <> - publish: true - release: true - context: - - oplabs-gcr-release - requires: - - hold - docker-build: name: chain-mon-docker-release filters: diff --git a/.github/mergify.yml b/.github/mergify.yml index 7156137c4007..2b8627818b95 100644 --- a/.github/mergify.yml +++ b/.github/mergify.yml @@ -228,14 +228,6 @@ pull_request_rules: request_reviews: users: - roninjin10 - - name: Add A-proxyd label - conditions: - - 'files~=^proxyd/' - - '#label<5' - actions: - label: - add: - - A-proxyd - name: Add M-docs label conditions: - 'files~=^(docs|specs)\/' diff --git a/.github/workflows/tag-service.yml b/.github/workflows/tag-service.yml index 43e581b2cdd1..80390ef689e6 100644 --- a/.github/workflows/tag-service.yml +++ b/.github/workflows/tag-service.yml @@ -30,7 +30,6 @@ on: - op-dispute-mon - op-ufm - da-server - - proxyd - op-contracts - op-conductor prerelease: diff --git a/docker-bake.hcl b/docker-bake.hcl index 977aaf2ddbf9..846e855e3776 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -199,19 +199,6 @@ target "cannon" { tags = [for tag in split(",", IMAGE_TAGS) : "${REGISTRY}/${REPOSITORY}/cannon:${tag}"] } -target "proxyd" { - dockerfile = "./proxyd/Dockerfile" - context = "./" - args = { - // proxyd dockerfile has no _ in the args - GITCOMMIT = "${GIT_COMMIT}" - GITDATE = "${GIT_DATE}" - GITVERSION = "${GIT_VERSION}" - } - platforms = split(",", PLATFORMS) - tags = [for tag in split(",", IMAGE_TAGS) : "${REGISTRY}/${REPOSITORY}/proxyd:${tag}"] -} - target "chain-mon" { dockerfile = "./ops/docker/Dockerfile.packages" context = "." diff --git a/ops/docker/op-stack-go/Dockerfile b/ops/docker/op-stack-go/Dockerfile index 07104ed41caf..e026f3c663f1 100644 --- a/ops/docker/op-stack-go/Dockerfile +++ b/ops/docker/op-stack-go/Dockerfile @@ -55,58 +55,58 @@ ARG TARGETOS TARGETARCH FROM --platform=$BUILDPLATFORM builder as cannon-builder ARG CANNON_VERSION=v0.0.0 RUN --mount=type=cache,target=/root/.cache/go-build cd cannon && make cannon \ - GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$CANNON_VERSION" + GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$CANNON_VERSION" FROM --platform=$BUILDPLATFORM builder as op-program-builder ARG OP_PROGRAM_VERSION=v0.0.0 # note: we only build the host, that's all the user needs. No Go MIPS cross-build in docker RUN --mount=type=cache,target=/root/.cache/go-build cd op-program && make op-program-host \ - GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_PROGRAM_VERSION" + GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_PROGRAM_VERSION" FROM --platform=$BUILDPLATFORM builder as op-heartbeat-builder ARG OP_HEARTBEAT_VERSION=v0.0.0 RUN --mount=type=cache,target=/root/.cache/go-build cd op-heartbeat && make op-heartbeat \ - GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_HEARTBEAT_VERSION" + GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_HEARTBEAT_VERSION" FROM --platform=$BUILDPLATFORM builder as op-wheel-builder ARG OP_WHEEL_VERSION=v0.0.0 RUN --mount=type=cache,target=/root/.cache/go-build cd op-wheel && make op-wheel \ - GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_WHEEL_VERSION" + GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_WHEEL_VERSION" FROM --platform=$BUILDPLATFORM builder as op-node-builder ARG OP_NODE_VERSION=v0.0.0 RUN echo TARGETOS=$TARGETOS TARGETARCH=$TARGETARCH BUILDPLATFORM=$BUILDPLATFORM TARGETPLATFORM=$TARGETPLATFORM OP_NODE_VERSION=$OP_NODE_VERSION RUN --mount=type=cache,target=/root/.cache/go-build cd op-node && make op-node \ - GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_NODE_VERSION" + GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_NODE_VERSION" FROM --platform=$BUILDPLATFORM builder as op-challenger-builder ARG OP_CHALLENGER_VERSION=v0.0.0 RUN --mount=type=cache,target=/root/.cache/go-build cd op-challenger && make op-challenger \ - GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_CHALLENGER_VERSION" + GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_CHALLENGER_VERSION" FROM --platform=$BUILDPLATFORM builder as op-dispute-mon-builder ARG OP_DISPUTE_MON_VERSION=v0.0.0 RUN --mount=type=cache,target=/root/.cache/go-build cd op-dispute-mon && make op-dispute-mon \ - GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_DISPUTE_MON_VERSION" + GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_DISPUTE_MON_VERSION" FROM --platform=$BUILDPLATFORM builder as op-batcher-builder ARG OP_BATCHER_VERSION=v0.0.0 RUN --mount=type=cache,target=/root/.cache/go-build cd op-batcher && make op-batcher \ - GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_BATCHER_VERSION" + GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_BATCHER_VERSION" FROM --platform=$BUILDPLATFORM builder as op-proposer-builder ARG OP_PROPOSER_VERSION=v0.0.0 RUN --mount=type=cache,target=/root/.cache/go-build cd op-proposer && make op-proposer \ - GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_PROPOSER_VERSION" + GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_PROPOSER_VERSION" FROM --platform=$BUILDPLATFORM builder as op-conductor-builder ARG OP_CONDUCTOR_VERSION=v0.0.0 RUN --mount=type=cache,target=/root/.cache/go-build cd op-conductor && make op-conductor \ - GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_CONDUCTOR_VERSION" + GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_CONDUCTOR_VERSION" FROM --platform=$BUILDPLATFORM builder as da-server-builder RUN --mount=type=cache,target=/root/.cache/go-build cd op-plasma && make da-server \ - GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE + GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE as cannon-target COPY --from=cannon-builder /app/cannon/bin/cannon /usr/local/bin/ diff --git a/ops/scripts/ci-docker-tag-op-stack-release.sh b/ops/scripts/ci-docker-tag-op-stack-release.sh index a8d7e9522c0e..f743a20cbc41 100755 --- a/ops/scripts/ci-docker-tag-op-stack-release.sh +++ b/ops/scripts/ci-docker-tag-op-stack-release.sh @@ -6,7 +6,7 @@ DOCKER_REPO=$1 GIT_TAG=$2 GIT_SHA=$3 -IMAGE_NAME=$(echo "$GIT_TAG" | grep -Eow '^(ci-builder(-rust)?|chain-mon|proxyd|da-server|ufm-[a-z0-9\-]*|op-[a-z0-9\-]*)' || true) +IMAGE_NAME=$(echo "$GIT_TAG" | grep -Eow '^(ci-builder(-rust)?|chain-mon|da-server|ufm-[a-z0-9\-]*|op-[a-z0-9\-]*)' || true) if [ -z "$IMAGE_NAME" ]; then echo "image name could not be parsed from git tag '$GIT_TAG'" exit 1 diff --git a/ops/tag-service/tag-service.py b/ops/tag-service/tag-service.py index 13e5a8e7b435..9ed48456426d 100755 --- a/ops/tag-service/tag-service.py +++ b/ops/tag-service/tag-service.py @@ -18,7 +18,6 @@ 'op-program': '0.0.0', 'op-dispute-mon': '0.0.0', 'op-proposer': '0.10.14', - 'proxyd': '3.16.0', 'op-heartbeat': '0.1.0', 'op-contracts': '1.0.0', 'op-conductor': '0.0.0', diff --git a/ops/tag-service/tag-tool.py b/ops/tag-service/tag-tool.py index d5de3acb2edd..5da97d3cb924 100644 --- a/ops/tag-service/tag-tool.py +++ b/ops/tag-service/tag-tool.py @@ -12,7 +12,6 @@ 'op-dispute-mon', 'op-proposer', 'da-server', - 'proxyd', 'op-heartbeat', 'op-contracts', 'test', diff --git a/proxyd/.gitignore b/proxyd/.gitignore deleted file mode 100644 index 65e6a826f682..000000000000 --- a/proxyd/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -bin - -config.toml diff --git a/proxyd/CHANGELOG.md b/proxyd/CHANGELOG.md deleted file mode 100644 index dd78bfe3c803..000000000000 --- a/proxyd/CHANGELOG.md +++ /dev/null @@ -1,252 +0,0 @@ -# @eth-optimism/proxyd - -## 3.14.1 - -### Patch Changes - -- 5602deec7: chore(deps): bump github.com/prometheus/client_golang from 1.11.0 to 1.11.1 in /proxyd -- 6b3cf2070: Remove useless logging - -## 3.14.0 - -### Minor Changes - -- 9cc39bcfa: Add support for global method override rate limit -- 30db32862: Include nonce in sender rate limit - -### Patch Changes - -- b9bb1a98a: proxyd: Add req_id to log - -## 3.13.0 - -### Minor Changes - -- 6de891d3b: Add sender-based rate limiter - -## 3.12.0 - -### Minor Changes - -- e9f2c701: Allow disabling backend rate limiter -- ca45a85e: Support pattern matching in exempt origins/user agents -- f4faa44c: adds server.log_level config - -## 3.11.0 - -### Minor Changes - -- b3c5eeec: Fixed JSON-RPC 2.0 specification compliance by adding the optional data field on an RPCError -- 01ae6625: Adds new Redis rate limiter - -## 3.10.2 - -### Patch Changes - -- 6bb35fd8: Add customizable whitelist error -- 7121648c: Batch metrics and max batch size - -## 3.10.1 - -### Patch Changes - -- b82a8f48: Add logging for origin and remote IP' -- 1bf9559c: Carry over custom limit message in batches - -## 3.10.0 - -### Minor Changes - -- 157ccc84: Support per-method rate limiting - -## 3.9.1 - -### Patch Changes - -- dc4f6a06: Add logging/metrics - -## 3.9.0 - -### Minor Changes - -- b6f4bfcf: Add frontend rate limiting - -### Patch Changes - -- 406a4fce: Unwrap single RPC batches -- 915f3b28: Parameterize full RPC request logging - -## 3.8.9 - -### Patch Changes - -- 063c55cf: Use canned response for eth_accounts - -## 3.8.8 - -### Patch Changes - -- 58dc7adc: Improve robustness against unexpected JSON-RPC from upstream -- 552cd641: Fix concurrent write panic in WS - -## 3.8.7 - -### Patch Changes - -- 6f458607: Bump go-ethereum to 1.10.17 - -## 3.8.6 - -### Patch Changes - -- d79d40c4: proxyd: Proxy requests using batch JSON-RPC - -## 3.8.5 - -### Patch Changes - -- 2a062b11: proxyd: Log ssanitized RPC requests -- d9f058ce: proxyd: Reduced RPC request logging -- a4bfd9e7: proxyd: Limit the number of concurrent RPCs to backends - -## 3.8.4 - -### Patch Changes - -- 08329ba2: proxyd: Record redis cache operation latency -- ae112021: proxyd: Request-scoped context for fast batch RPC short-circuiting - -## 3.8.3 - -### Patch Changes - -- 160f4c3d: Update docker image to use golang 1.18.0 - -## 3.8.2 - -### Patch Changes - -- ae18cea1: Don't hit Redis when the out of service interval is zero - -## 3.8.1 - -### Patch Changes - -- acf7dbd5: Update to go-ethereum v1.10.16 - -## 3.8.0 - -### Minor Changes - -- 527448bb: Handle nil responses better - -## 3.7.0 - -### Minor Changes - -- 3c2926b1: Add debug cache status header to proxyd responses - -## 3.6.0 - -### Minor Changes - -- 096c5f20: proxyd: Allow cached RPCs to be evicted by redis -- 71d64834: Add caching for block-dependent RPCs -- fd2e1523: proxyd: Cache block-dependent RPCs -- 1760613c: Add integration tests and batching - -## 3.5.0 - -### Minor Changes - -- 025a3c0d: Add request/response payload size metrics to proxyd -- daf8db0b: cache immutable RPC responses in proxyd -- 8aa89bf3: Add X-Forwarded-For header when proxying RPCs on proxyd - -## 3.4.1 - -### Patch Changes - -- 415164e1: Force proxyd build - -## 3.4.0 - -### Minor Changes - -- 4b56ed84: Various proxyd fixes - -## 3.3.0 - -### Minor Changes - -- 7b7ffd2e: Allows string RPC ids on proxyd - -## 3.2.0 - -### Minor Changes - -- 73484138: Adds ability to specify env vars in config - -## 3.1.2 - -### Patch Changes - -- 1b79aa62: Release proxyd - -## 3.1.1 - -### Patch Changes - -- b8802054: Trigger release of proxyd -- 34fcb277: Bump proxyd to test release build workflow - -## 3.1.0 - -### Minor Changes - -- da6138fd: Updated metrics, support local rate limiter - -### Patch Changes - -- 6c7f483b: Add support for additional SSL certificates in Docker container - -## 3.0.0 - -### Major Changes - -- abe231bf: Make endpoints match Geth, better logging - -## 2.0.0 - -### Major Changes - -- 6c50098b: Update metrics, support WS -- f827dbda: Brings back the ability to selectively route RPC methods to backend groups - -### Minor Changes - -- 8cc824e5: Updates proxyd to include additional error metrics. -- 9ba4c5e0: Update metrics, support authenticated endpoints -- 78d0f3f0: Put special errors in a dedicated metric, pass along the content-type header - -### Patch Changes - -- 6e6a55b1: Canary release - -## 1.0.2 - -### Patch Changes - -- b9d2fbee: Trigger releases - -## 1.0.1 - -### Patch Changes - -- 893623c9: Trigger patch releases for dockerhub - -## 1.0.0 - -### Major Changes - -- 28aabc41: Initial release of RPC proxy daemon diff --git a/proxyd/Dockerfile b/proxyd/Dockerfile deleted file mode 100644 index b066e0ecafe7..000000000000 --- a/proxyd/Dockerfile +++ /dev/null @@ -1,32 +0,0 @@ -FROM golang:1.21.3-alpine3.18 as builder - -ARG GITCOMMIT=docker -ARG GITDATE=docker -ARG GITVERSION=docker - -RUN apk add make jq git gcc musl-dev linux-headers - -COPY ./proxyd /app - -WORKDIR /app - -RUN make proxyd - -FROM alpine:3.18 - -RUN apk add bind-tools jq curl bash git redis - -COPY ./proxyd/entrypoint.sh /bin/entrypoint.sh - -RUN apk update && \ - apk add ca-certificates && \ - chmod +x /bin/entrypoint.sh - -EXPOSE 8080 - -VOLUME /etc/proxyd - -COPY --from=builder /app/bin/proxyd /bin/proxyd - -ENTRYPOINT ["/bin/entrypoint.sh"] -CMD ["/bin/proxyd", "/etc/proxyd/proxyd.toml"] diff --git a/proxyd/Dockerfile.ignore b/proxyd/Dockerfile.ignore deleted file mode 100644 index eac1d0bc0b26..000000000000 --- a/proxyd/Dockerfile.ignore +++ /dev/null @@ -1,3 +0,0 @@ -# ignore everything but proxyd, proxyd defines all its dependencies in the go.mod -* -!/proxyd diff --git a/proxyd/Makefile b/proxyd/Makefile deleted file mode 100644 index d9ffb5742cd6..000000000000 --- a/proxyd/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -LDFLAGSSTRING +=-X main.GitCommit=$(GITCOMMIT) -LDFLAGSSTRING +=-X main.GitDate=$(GITDATE) -LDFLAGSSTRING +=-X main.GitVersion=$(GITVERSION) -LDFLAGS := -ldflags "$(LDFLAGSSTRING)" - -proxyd: - go build -v $(LDFLAGS) -o ./bin/proxyd ./cmd/proxyd -.PHONY: proxyd - -fmt: - go mod tidy - gofmt -w . -.PHONY: fmt - -test: - go test -v ./... -.PHONY: test - -lint: - go vet ./... -.PHONY: test - -test-fallback: - go test -v ./... -test.run ^TestFallback$ -.PHONY: test-fallback diff --git a/proxyd/README.md b/proxyd/README.md index 4a3a84bafc49..f44b815ab2dc 100644 --- a/proxyd/README.md +++ b/proxyd/README.md @@ -1,146 +1,2 @@ -# rpc-proxy - -This tool implements `proxyd`, an RPC request router and proxy. It does the following things: - -1. Whitelists RPC methods. -2. Routes RPC methods to groups of backend services. -3. Automatically retries failed backend requests. -4. Track backend consensus (`latest`, `safe`, `finalized` blocks), peer count and sync state. -5. Re-write requests and responses to enforce consensus. -6. Load balance requests across backend services. -7. Cache immutable responses from backends. -8. Provides metrics to measure request latency, error rates, and the like. - - -## Usage - -Run `make proxyd` to build the binary. No additional dependencies are necessary. - -To configure `proxyd` for use, you'll need to create a configuration file to define your proxy backends and routing rules. Check out [example.config.toml](./example.config.toml) for how to do this alongside a full list of all options with commentary. - -Once you have a config file, start the daemon via `proxyd .toml`. - - -## Consensus awareness - -Starting on v4.0.0, `proxyd` is aware of the consensus state of its backends. This helps minimize chain reorgs experienced by clients. - -To enable this behavior, you must set `consensus_aware` value to `true` in the backend group. - -When consensus awareness is enabled, `proxyd` will poll the backends for their states and resolve a consensus group based on: -* the common ancestor `latest` block, i.e. if a backend is experiencing a fork, the fork won't be visible to the clients -* the lowest `safe` block -* the lowest `finalized` block -* peer count -* sync state - -The backend group then acts as a round-robin load balancer distributing traffic equally across healthy backends in the consensus group, increasing the availability of the proxy. - -A backend is considered healthy if it meets the following criteria: -* not banned -* avg 1-min moving window error rate ≤ configurable threshold -* avg 1-min moving window latency ≤ configurable threshold -* peer count ≥ configurable threshold -* `latest` block lag ≤ configurable threshold -* last state update ≤ configurable threshold -* not currently syncing - -When a backend is experiencing inconsistent consensus, high error rates or high latency, -the backend will be banned for a configurable amount of time (default 5 minutes) -and won't receive any traffic during this period. - - -## Tag rewrite - -When consensus awareness is enabled, `proxyd` will enforce the consensus state transparently for all the clients. - -For example, if a client requests the `eth_getBlockByNumber` method with the `latest` tag, -`proxyd` will rewrite the request to use the resolved latest block from the consensus group -and forward it to the backend. - -The following request methods are rewritten: -* `eth_getLogs` -* `eth_newFilter` -* `eth_getBalance` -* `eth_getCode` -* `eth_getTransactionCount` -* `eth_call` -* `eth_getStorageAt` -* `eth_getBlockTransactionCountByNumber` -* `eth_getUncleCountByBlockNumber` -* `eth_getBlockByNumber` -* `eth_getTransactionByBlockNumberAndIndex` -* `eth_getUncleByBlockNumberAndIndex` -* `debug_getRawReceipts` - -And `eth_blockNumber` response is overridden with current block consensus. - - -## Cacheable methods - -Cache use Redis and can be enabled for the following immutable methods: - -* `eth_chainId` -* `net_version` -* `eth_getBlockTransactionCountByHash` -* `eth_getUncleCountByBlockHash` -* `eth_getBlockByHash` -* `eth_getTransactionByBlockHashAndIndex` -* `eth_getUncleByBlockHashAndIndex` -* `debug_getRawReceipts` (block hash only) - -## Meta method `consensus_getReceipts` - -To support backends with different specifications in the same backend group, -proxyd exposes a convenient method to fetch receipts abstracting away -what specific backend will serve the request. - -Each backend specifies their preferred method to fetch receipts with `consensus_receipts_target` config, -which will be translated from `consensus_getReceipts`. - -This method takes a `blockNumberOrHash` (i.e. `tag|qty|hash`) -and returns the receipts for all transactions in the block. - -Request example -```json -{ - "jsonrpc":"2.0", - "id": 1, - "params": ["0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b"] -} -``` - -It currently supports translation to the following targets: -* `debug_getRawReceipts(blockOrHash)` (default) -* `alchemy_getTransactionReceipts(blockOrHash)` -* `parity_getBlockReceipts(blockOrHash)` -* `eth_getBlockReceipts(blockOrHash)` - -The selected target is returned in the response, in a wrapped result. - -Response example -```json -{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "method": "debug_getRawReceipts", - "result": { - // the actual raw result from backend - } - } -} -``` - -See [op-node receipt fetcher](https://github.com/ethereum-optimism/optimism/blob/186e46a47647a51a658e699e9ff047d39444c2de/op-node/sources/receipts.go#L186-L253). - - -## Metrics - -See `metrics.go` for a list of all available metrics. - -The metrics port is configurable via the `metrics.port` and `metrics.host` keys in the config. - -## Adding Backend SSL Certificates in Docker - -The Docker image runs on Alpine Linux. If you get SSL errors when connecting to a backend within Docker, you may need to add additional certificates to Alpine's certificate store. To do this, bind mount the certificate bundle into a file in `/usr/local/share/ca-certificates`. The `entrypoint.sh` script will then update the store with whatever is in the `ca-certificates` directory prior to starting `proxyd`. +# ⚠️ Important +This project has been moved to [ethereum-optimism/infra](https://github.com/ethereum-optimism/infra) diff --git a/proxyd/backend.go b/proxyd/backend.go deleted file mode 100644 index 802b94ab4da7..000000000000 --- a/proxyd/backend.go +++ /dev/null @@ -1,1272 +0,0 @@ -package proxyd - -import ( - "bytes" - "context" - "crypto/tls" - "encoding/json" - "errors" - "fmt" - "io" - "math" - "math/rand" - "net/http" - "sort" - "strconv" - "strings" - "sync" - "time" - - sw "github.com/ethereum-optimism/optimism/proxyd/pkg/avg-sliding-window" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/rpc" - "github.com/gorilla/websocket" - "github.com/prometheus/client_golang/prometheus" - "github.com/xaionaro-go/weightedshuffle" - "golang.org/x/sync/semaphore" -) - -const ( - JSONRPCVersion = "2.0" - JSONRPCErrorInternal = -32000 - notFoundRpcError = -32601 -) - -var ( - ErrParseErr = &RPCErr{ - Code: -32700, - Message: "parse error", - HTTPErrorCode: 400, - } - ErrInternal = &RPCErr{ - Code: JSONRPCErrorInternal, - Message: "internal error", - HTTPErrorCode: 500, - } - ErrMethodNotWhitelisted = &RPCErr{ - Code: notFoundRpcError, - Message: "rpc method is not whitelisted", - HTTPErrorCode: 403, - } - ErrBackendOffline = &RPCErr{ - Code: JSONRPCErrorInternal - 10, - Message: "backend offline", - HTTPErrorCode: 503, - } - ErrNoBackends = &RPCErr{ - Code: JSONRPCErrorInternal - 11, - Message: "no backends available for method", - HTTPErrorCode: 503, - } - ErrBackendOverCapacity = &RPCErr{ - Code: JSONRPCErrorInternal - 12, - Message: "backend is over capacity", - HTTPErrorCode: 429, - } - ErrBackendBadResponse = &RPCErr{ - Code: JSONRPCErrorInternal - 13, - Message: "backend returned an invalid response", - HTTPErrorCode: 500, - } - ErrTooManyBatchRequests = &RPCErr{ - Code: JSONRPCErrorInternal - 14, - Message: "too many RPC calls in batch request", - } - ErrGatewayTimeout = &RPCErr{ - Code: JSONRPCErrorInternal - 15, - Message: "gateway timeout", - HTTPErrorCode: 504, - } - ErrOverRateLimit = &RPCErr{ - Code: JSONRPCErrorInternal - 16, - Message: "over rate limit", - HTTPErrorCode: 429, - } - ErrOverSenderRateLimit = &RPCErr{ - Code: JSONRPCErrorInternal - 17, - Message: "sender is over rate limit", - HTTPErrorCode: 429, - } - ErrNotHealthy = &RPCErr{ - Code: JSONRPCErrorInternal - 18, - Message: "backend is currently not healthy to serve traffic", - HTTPErrorCode: 503, - } - ErrBlockOutOfRange = &RPCErr{ - Code: JSONRPCErrorInternal - 19, - Message: "block is out of range", - HTTPErrorCode: 400, - } - - ErrRequestBodyTooLarge = &RPCErr{ - Code: JSONRPCErrorInternal - 21, - Message: "request body too large", - HTTPErrorCode: 413, - } - - ErrBackendResponseTooLarge = &RPCErr{ - Code: JSONRPCErrorInternal - 20, - Message: "backend response too large", - HTTPErrorCode: 500, - } - - ErrBackendUnexpectedJSONRPC = errors.New("backend returned an unexpected JSON-RPC response") - - ErrConsensusGetReceiptsCantBeBatched = errors.New("consensus_getReceipts cannot be batched") - ErrConsensusGetReceiptsInvalidTarget = errors.New("unsupported consensus_receipts_target") -) - -func ErrInvalidRequest(msg string) *RPCErr { - return &RPCErr{ - Code: -32600, - Message: msg, - HTTPErrorCode: 400, - } -} - -func ErrInvalidParams(msg string) *RPCErr { - return &RPCErr{ - Code: -32602, - Message: msg, - HTTPErrorCode: 400, - } -} - -type Backend struct { - Name string - rpcURL string - receiptsTarget string - wsURL string - authUsername string - authPassword string - headers map[string]string - client *LimitedHTTPClient - dialer *websocket.Dialer - maxRetries int - maxResponseSize int64 - maxRPS int - maxWSConns int - outOfServiceInterval time.Duration - stripTrailingXFF bool - proxydIP string - - skipPeerCountCheck bool - forcedCandidate bool - - maxDegradedLatencyThreshold time.Duration - maxLatencyThreshold time.Duration - maxErrorRateThreshold float64 - - latencySlidingWindow *sw.AvgSlidingWindow - networkRequestsSlidingWindow *sw.AvgSlidingWindow - networkErrorsSlidingWindow *sw.AvgSlidingWindow - - weight int -} - -type BackendOpt func(b *Backend) - -func WithBasicAuth(username, password string) BackendOpt { - return func(b *Backend) { - b.authUsername = username - b.authPassword = password - } -} - -func WithHeaders(headers map[string]string) BackendOpt { - return func(b *Backend) { - b.headers = headers - } -} - -func WithTimeout(timeout time.Duration) BackendOpt { - return func(b *Backend) { - b.client.Timeout = timeout - } -} - -func WithMaxRetries(retries int) BackendOpt { - return func(b *Backend) { - b.maxRetries = retries - } -} - -func WithMaxResponseSize(size int64) BackendOpt { - return func(b *Backend) { - b.maxResponseSize = size - } -} - -func WithOutOfServiceDuration(interval time.Duration) BackendOpt { - return func(b *Backend) { - b.outOfServiceInterval = interval - } -} - -func WithMaxRPS(maxRPS int) BackendOpt { - return func(b *Backend) { - b.maxRPS = maxRPS - } -} - -func WithMaxWSConns(maxConns int) BackendOpt { - return func(b *Backend) { - b.maxWSConns = maxConns - } -} - -func WithTLSConfig(tlsConfig *tls.Config) BackendOpt { - return func(b *Backend) { - if b.client.Transport == nil { - b.client.Transport = &http.Transport{} - } - b.client.Transport.(*http.Transport).TLSClientConfig = tlsConfig - } -} - -func WithStrippedTrailingXFF() BackendOpt { - return func(b *Backend) { - b.stripTrailingXFF = true - } -} - -func WithProxydIP(ip string) BackendOpt { - return func(b *Backend) { - b.proxydIP = ip - } -} - -func WithConsensusSkipPeerCountCheck(skipPeerCountCheck bool) BackendOpt { - return func(b *Backend) { - b.skipPeerCountCheck = skipPeerCountCheck - } -} - -func WithConsensusForcedCandidate(forcedCandidate bool) BackendOpt { - return func(b *Backend) { - b.forcedCandidate = forcedCandidate - } -} - -func WithWeight(weight int) BackendOpt { - return func(b *Backend) { - b.weight = weight - } -} - -func WithMaxDegradedLatencyThreshold(maxDegradedLatencyThreshold time.Duration) BackendOpt { - return func(b *Backend) { - b.maxDegradedLatencyThreshold = maxDegradedLatencyThreshold - } -} - -func WithMaxLatencyThreshold(maxLatencyThreshold time.Duration) BackendOpt { - return func(b *Backend) { - b.maxLatencyThreshold = maxLatencyThreshold - } -} - -func WithMaxErrorRateThreshold(maxErrorRateThreshold float64) BackendOpt { - return func(b *Backend) { - b.maxErrorRateThreshold = maxErrorRateThreshold - } -} - -func WithConsensusReceiptTarget(receiptsTarget string) BackendOpt { - return func(b *Backend) { - b.receiptsTarget = receiptsTarget - } -} - -type indexedReqRes struct { - index int - req *RPCReq - res *RPCRes -} - -const proxydHealthzMethod = "proxyd_healthz" - -const ConsensusGetReceiptsMethod = "consensus_getReceipts" - -const ReceiptsTargetDebugGetRawReceipts = "debug_getRawReceipts" -const ReceiptsTargetAlchemyGetTransactionReceipts = "alchemy_getTransactionReceipts" -const ReceiptsTargetParityGetTransactionReceipts = "parity_getBlockReceipts" -const ReceiptsTargetEthGetTransactionReceipts = "eth_getBlockReceipts" - -type ConsensusGetReceiptsResult struct { - Method string `json:"method"` - Result interface{} `json:"result"` -} - -// BlockHashOrNumberParameter is a non-conventional wrapper used by alchemy_getTransactionReceipts -type BlockHashOrNumberParameter struct { - BlockHash *common.Hash `json:"blockHash"` - BlockNumber *rpc.BlockNumber `json:"blockNumber"` -} - -func NewBackend( - name string, - rpcURL string, - wsURL string, - rpcSemaphore *semaphore.Weighted, - opts ...BackendOpt, -) *Backend { - backend := &Backend{ - Name: name, - rpcURL: rpcURL, - wsURL: wsURL, - maxResponseSize: math.MaxInt64, - client: &LimitedHTTPClient{ - Client: http.Client{Timeout: 5 * time.Second}, - sem: rpcSemaphore, - backendName: name, - }, - dialer: &websocket.Dialer{}, - - maxLatencyThreshold: 10 * time.Second, - maxDegradedLatencyThreshold: 5 * time.Second, - maxErrorRateThreshold: 0.5, - - latencySlidingWindow: sw.NewSlidingWindow(), - networkRequestsSlidingWindow: sw.NewSlidingWindow(), - networkErrorsSlidingWindow: sw.NewSlidingWindow(), - } - - backend.Override(opts...) - - if !backend.stripTrailingXFF && backend.proxydIP == "" { - log.Warn("proxied requests' XFF header will not contain the proxyd ip address") - } - - return backend -} - -func (b *Backend) Override(opts ...BackendOpt) { - for _, opt := range opts { - opt(b) - } -} - -func (b *Backend) Forward(ctx context.Context, reqs []*RPCReq, isBatch bool) ([]*RPCRes, error) { - var lastError error - // <= to account for the first attempt not technically being - // a retry - for i := 0; i <= b.maxRetries; i++ { - RecordBatchRPCForward(ctx, b.Name, reqs, RPCRequestSourceHTTP) - metricLabelMethod := reqs[0].Method - if isBatch { - metricLabelMethod = "" - } - timer := prometheus.NewTimer( - rpcBackendRequestDurationSumm.WithLabelValues( - b.Name, - metricLabelMethod, - strconv.FormatBool(isBatch), - ), - ) - - res, err := b.doForward(ctx, reqs, isBatch) - switch err { - case nil: // do nothing - case ErrBackendResponseTooLarge: - log.Warn( - "backend response too large", - "name", b.Name, - "req_id", GetReqID(ctx), - "max", b.maxResponseSize, - ) - RecordBatchRPCError(ctx, b.Name, reqs, err) - case ErrConsensusGetReceiptsCantBeBatched: - log.Warn( - "Received unsupported batch request for consensus_getReceipts", - "name", b.Name, - "req_id", GetReqID(ctx), - "err", err, - ) - case ErrConsensusGetReceiptsInvalidTarget: - log.Error( - "Unsupported consensus_receipts_target for consensus_getReceipts", - "name", b.Name, - "req_id", GetReqID(ctx), - "err", err, - ) - // ErrBackendUnexpectedJSONRPC occurs because infura responds with a single JSON-RPC object - // to a batch request whenever any Request Object in the batch would induce a partial error. - // We don't label the backend offline in this case. But the error is still returned to - // callers so failover can occur if needed. - case ErrBackendUnexpectedJSONRPC: - log.Debug( - "Received unexpected JSON-RPC response", - "name", b.Name, - "req_id", GetReqID(ctx), - "err", err, - ) - default: - lastError = err - log.Warn( - "backend request failed, trying again", - "name", b.Name, - "req_id", GetReqID(ctx), - "err", err, - ) - timer.ObserveDuration() - RecordBatchRPCError(ctx, b.Name, reqs, err) - sleepContext(ctx, calcBackoff(i)) - continue - } - timer.ObserveDuration() - - MaybeRecordErrorsInRPCRes(ctx, b.Name, reqs, res) - return res, err - } - - return nil, wrapErr(lastError, "permanent error forwarding request") -} - -func (b *Backend) ProxyWS(clientConn *websocket.Conn, methodWhitelist *StringSet) (*WSProxier, error) { - backendConn, _, err := b.dialer.Dial(b.wsURL, nil) // nolint:bodyclose - if err != nil { - return nil, wrapErr(err, "error dialing backend") - } - - activeBackendWsConnsGauge.WithLabelValues(b.Name).Inc() - return NewWSProxier(b, clientConn, backendConn, methodWhitelist), nil -} - -// ForwardRPC makes a call directly to a backend and populate the response into `res` -func (b *Backend) ForwardRPC(ctx context.Context, res *RPCRes, id string, method string, params ...any) error { - jsonParams, err := json.Marshal(params) - if err != nil { - return err - } - - rpcReq := RPCReq{ - JSONRPC: JSONRPCVersion, - Method: method, - Params: jsonParams, - ID: []byte(id), - } - - slicedRes, err := b.doForward(ctx, []*RPCReq{&rpcReq}, false) - if err != nil { - return err - } - - if len(slicedRes) != 1 { - return fmt.Errorf("unexpected response len for non-batched request (len != 1)") - } - if slicedRes[0].IsError() { - return fmt.Errorf(slicedRes[0].Error.Error()) - } - - *res = *(slicedRes[0]) - return nil -} - -func (b *Backend) doForward(ctx context.Context, rpcReqs []*RPCReq, isBatch bool) ([]*RPCRes, error) { - // we are concerned about network error rates, so we record 1 request independently of how many are in the batch - b.networkRequestsSlidingWindow.Incr() - - translatedReqs := make(map[string]*RPCReq, len(rpcReqs)) - // translate consensus_getReceipts to receipts target - // right now we only support non-batched - if isBatch { - for _, rpcReq := range rpcReqs { - if rpcReq.Method == ConsensusGetReceiptsMethod { - return nil, ErrConsensusGetReceiptsCantBeBatched - } - } - } else { - for _, rpcReq := range rpcReqs { - if rpcReq.Method == ConsensusGetReceiptsMethod { - translatedReqs[string(rpcReq.ID)] = rpcReq - rpcReq.Method = b.receiptsTarget - var reqParams []rpc.BlockNumberOrHash - err := json.Unmarshal(rpcReq.Params, &reqParams) - if err != nil { - return nil, ErrInvalidRequest("invalid request") - } - - var translatedParams []byte - switch rpcReq.Method { - case ReceiptsTargetDebugGetRawReceipts, - ReceiptsTargetEthGetTransactionReceipts, - ReceiptsTargetParityGetTransactionReceipts: - // conventional methods use an array of strings having either block number or block hash - // i.e. ["0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b"] - params := make([]string, 1) - if reqParams[0].BlockNumber != nil { - params[0] = reqParams[0].BlockNumber.String() - } else { - params[0] = reqParams[0].BlockHash.Hex() - } - translatedParams = mustMarshalJSON(params) - case ReceiptsTargetAlchemyGetTransactionReceipts: - // alchemy uses an array of object with either block number or block hash - // i.e. [{ blockHash: "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b" }] - params := make([]BlockHashOrNumberParameter, 1) - if reqParams[0].BlockNumber != nil { - params[0].BlockNumber = reqParams[0].BlockNumber - } else { - params[0].BlockHash = reqParams[0].BlockHash - } - translatedParams = mustMarshalJSON(params) - default: - return nil, ErrConsensusGetReceiptsInvalidTarget - } - - rpcReq.Params = translatedParams - } - } - } - - isSingleElementBatch := len(rpcReqs) == 1 - - // Single element batches are unwrapped before being sent - // since Alchemy handles single requests better than batches. - var body []byte - if isSingleElementBatch { - body = mustMarshalJSON(rpcReqs[0]) - } else { - body = mustMarshalJSON(rpcReqs) - } - - httpReq, err := http.NewRequestWithContext(ctx, "POST", b.rpcURL, bytes.NewReader(body)) - if err != nil { - b.networkErrorsSlidingWindow.Incr() - RecordBackendNetworkErrorRateSlidingWindow(b, b.ErrorRate()) - return nil, wrapErr(err, "error creating backend request") - } - - if b.authPassword != "" { - httpReq.SetBasicAuth(b.authUsername, b.authPassword) - } - - xForwardedFor := GetXForwardedFor(ctx) - if b.stripTrailingXFF { - xForwardedFor = stripXFF(xForwardedFor) - } else if b.proxydIP != "" { - xForwardedFor = fmt.Sprintf("%s, %s", xForwardedFor, b.proxydIP) - } - - httpReq.Header.Set("content-type", "application/json") - httpReq.Header.Set("X-Forwarded-For", xForwardedFor) - - for name, value := range b.headers { - httpReq.Header.Set(name, value) - } - - start := time.Now() - httpRes, err := b.client.DoLimited(httpReq) - if err != nil { - b.networkErrorsSlidingWindow.Incr() - RecordBackendNetworkErrorRateSlidingWindow(b, b.ErrorRate()) - return nil, wrapErr(err, "error in backend request") - } - - metricLabelMethod := rpcReqs[0].Method - if isBatch { - metricLabelMethod = "" - } - rpcBackendHTTPResponseCodesTotal.WithLabelValues( - GetAuthCtx(ctx), - b.Name, - metricLabelMethod, - strconv.Itoa(httpRes.StatusCode), - strconv.FormatBool(isBatch), - ).Inc() - - // Alchemy returns a 400 on bad JSONs, so handle that case - if httpRes.StatusCode != 200 && httpRes.StatusCode != 400 { - b.networkErrorsSlidingWindow.Incr() - RecordBackendNetworkErrorRateSlidingWindow(b, b.ErrorRate()) - return nil, fmt.Errorf("response code %d", httpRes.StatusCode) - } - - defer httpRes.Body.Close() - resB, err := io.ReadAll(LimitReader(httpRes.Body, b.maxResponseSize)) - if errors.Is(err, ErrLimitReaderOverLimit) { - return nil, ErrBackendResponseTooLarge - } - if err != nil { - b.networkErrorsSlidingWindow.Incr() - RecordBackendNetworkErrorRateSlidingWindow(b, b.ErrorRate()) - return nil, wrapErr(err, "error reading response body") - } - - var rpcRes []*RPCRes - if isSingleElementBatch { - var singleRes RPCRes - if err := json.Unmarshal(resB, &singleRes); err != nil { - return nil, ErrBackendBadResponse - } - rpcRes = []*RPCRes{ - &singleRes, - } - } else { - if err := json.Unmarshal(resB, &rpcRes); err != nil { - // Infura may return a single JSON-RPC response if, for example, the batch contains a request for an unsupported method - if responseIsNotBatched(resB) { - b.networkErrorsSlidingWindow.Incr() - RecordBackendNetworkErrorRateSlidingWindow(b, b.ErrorRate()) - return nil, ErrBackendUnexpectedJSONRPC - } - b.networkErrorsSlidingWindow.Incr() - RecordBackendNetworkErrorRateSlidingWindow(b, b.ErrorRate()) - return nil, ErrBackendBadResponse - } - } - - if len(rpcReqs) != len(rpcRes) { - b.networkErrorsSlidingWindow.Incr() - RecordBackendNetworkErrorRateSlidingWindow(b, b.ErrorRate()) - return nil, ErrBackendUnexpectedJSONRPC - } - - // capture the HTTP status code in the response. this will only - // ever be 400 given the status check on line 318 above. - if httpRes.StatusCode != 200 { - for _, res := range rpcRes { - res.Error.HTTPErrorCode = httpRes.StatusCode - } - } - duration := time.Since(start) - b.latencySlidingWindow.Add(float64(duration)) - RecordBackendNetworkLatencyAverageSlidingWindow(b, time.Duration(b.latencySlidingWindow.Avg())) - RecordBackendNetworkErrorRateSlidingWindow(b, b.ErrorRate()) - - // enrich the response with the actual request method - for _, res := range rpcRes { - translatedReq, exist := translatedReqs[string(res.ID)] - if exist { - res.Result = ConsensusGetReceiptsResult{ - Method: translatedReq.Method, - Result: res.Result, - } - } - } - - sortBatchRPCResponse(rpcReqs, rpcRes) - - return rpcRes, nil -} - -// IsHealthy checks if the backend is able to serve traffic, based on dynamic parameters -func (b *Backend) IsHealthy() bool { - errorRate := b.ErrorRate() - avgLatency := time.Duration(b.latencySlidingWindow.Avg()) - if errorRate >= b.maxErrorRateThreshold { - return false - } - if avgLatency >= b.maxLatencyThreshold { - return false - } - return true -} - -// ErrorRate returns the instant error rate of the backend -func (b *Backend) ErrorRate() (errorRate float64) { - // we only really start counting the error rate after a minimum of 10 requests - // this is to avoid false positives when the backend is just starting up - if b.networkRequestsSlidingWindow.Sum() >= 10 { - errorRate = b.networkErrorsSlidingWindow.Sum() / b.networkRequestsSlidingWindow.Sum() - } - return errorRate -} - -// IsDegraded checks if the backend is serving traffic in a degraded state (i.e. used as a last resource) -func (b *Backend) IsDegraded() bool { - avgLatency := time.Duration(b.latencySlidingWindow.Avg()) - return avgLatency >= b.maxDegradedLatencyThreshold -} - -func responseIsNotBatched(b []byte) bool { - var r RPCRes - return json.Unmarshal(b, &r) == nil -} - -// sortBatchRPCResponse sorts the RPCRes slice according to the position of its corresponding ID in the RPCReq slice -func sortBatchRPCResponse(req []*RPCReq, res []*RPCRes) { - pos := make(map[string]int, len(req)) - for i, r := range req { - key := string(r.ID) - if _, ok := pos[key]; ok { - panic("bug! detected requests with duplicate IDs") - } - pos[key] = i - } - - sort.Slice(res, func(i, j int) bool { - l := res[i].ID - r := res[j].ID - return pos[string(l)] < pos[string(r)] - }) -} - -type BackendGroup struct { - Name string - Backends []*Backend - WeightedRouting bool - Consensus *ConsensusPoller - FallbackBackends map[string]bool -} - -func (bg *BackendGroup) Fallbacks() []*Backend { - fallbacks := []*Backend{} - for _, a := range bg.Backends { - if fallback, ok := bg.FallbackBackends[a.Name]; ok && fallback { - fallbacks = append(fallbacks, a) - } - } - return fallbacks -} - -func (bg *BackendGroup) Primaries() []*Backend { - primaries := []*Backend{} - for _, a := range bg.Backends { - fallback, ok := bg.FallbackBackends[a.Name] - if ok && !fallback { - primaries = append(primaries, a) - } - } - return primaries -} - -// NOTE: BackendGroup Forward contains the log for balancing with consensus aware -func (bg *BackendGroup) Forward(ctx context.Context, rpcReqs []*RPCReq, isBatch bool) ([]*RPCRes, string, error) { - if len(rpcReqs) == 0 { - return nil, "", nil - } - - backends := bg.orderedBackendsForRequest() - - overriddenResponses := make([]*indexedReqRes, 0) - rewrittenReqs := make([]*RPCReq, 0, len(rpcReqs)) - - if bg.Consensus != nil { - // When `consensus_aware` is set to `true`, the backend group acts as a load balancer - // serving traffic from any backend that agrees in the consensus group - - // We also rewrite block tags to enforce compliance with consensus - rctx := RewriteContext{ - latest: bg.Consensus.GetLatestBlockNumber(), - safe: bg.Consensus.GetSafeBlockNumber(), - finalized: bg.Consensus.GetFinalizedBlockNumber(), - maxBlockRange: bg.Consensus.maxBlockRange, - } - - for i, req := range rpcReqs { - res := RPCRes{JSONRPC: JSONRPCVersion, ID: req.ID} - result, err := RewriteTags(rctx, req, &res) - switch result { - case RewriteOverrideError: - overriddenResponses = append(overriddenResponses, &indexedReqRes{ - index: i, - req: req, - res: &res, - }) - if errors.Is(err, ErrRewriteBlockOutOfRange) { - res.Error = ErrBlockOutOfRange - } else if errors.Is(err, ErrRewriteRangeTooLarge) { - res.Error = ErrInvalidParams( - fmt.Sprintf("block range greater than %d max", rctx.maxBlockRange), - ) - } else { - res.Error = ErrParseErr - } - case RewriteOverrideResponse: - overriddenResponses = append(overriddenResponses, &indexedReqRes{ - index: i, - req: req, - res: &res, - }) - case RewriteOverrideRequest, RewriteNone: - rewrittenReqs = append(rewrittenReqs, req) - } - } - rpcReqs = rewrittenReqs - } - - rpcRequestsTotal.Inc() - - for _, back := range backends { - res := make([]*RPCRes, 0) - var err error - - servedBy := fmt.Sprintf("%s/%s", bg.Name, back.Name) - - if len(rpcReqs) > 0 { - res, err = back.Forward(ctx, rpcReqs, isBatch) - if errors.Is(err, ErrConsensusGetReceiptsCantBeBatched) || - errors.Is(err, ErrConsensusGetReceiptsInvalidTarget) || - errors.Is(err, ErrMethodNotWhitelisted) { - return nil, "", err - } - if errors.Is(err, ErrBackendResponseTooLarge) { - return nil, servedBy, err - } - if errors.Is(err, ErrBackendOffline) { - log.Warn( - "skipping offline backend", - "name", back.Name, - "auth", GetAuthCtx(ctx), - "req_id", GetReqID(ctx), - ) - continue - } - if errors.Is(err, ErrBackendOverCapacity) { - log.Warn( - "skipping over-capacity backend", - "name", back.Name, - "auth", GetAuthCtx(ctx), - "req_id", GetReqID(ctx), - ) - continue - } - if err != nil { - log.Error( - "error forwarding request to backend", - "name", back.Name, - "req_id", GetReqID(ctx), - "auth", GetAuthCtx(ctx), - "err", err, - ) - continue - } - } - - // re-apply overridden responses - for _, ov := range overriddenResponses { - if len(res) > 0 { - // insert ov.res at position ov.index - res = append(res[:ov.index], append([]*RPCRes{ov.res}, res[ov.index:]...)...) - } else { - res = append(res, ov.res) - } - } - - return res, servedBy, nil - } - - RecordUnserviceableRequest(ctx, RPCRequestSourceHTTP) - return nil, "", ErrNoBackends -} - -func (bg *BackendGroup) ProxyWS(ctx context.Context, clientConn *websocket.Conn, methodWhitelist *StringSet) (*WSProxier, error) { - for _, back := range bg.Backends { - proxier, err := back.ProxyWS(clientConn, methodWhitelist) - if errors.Is(err, ErrBackendOffline) { - log.Warn( - "skipping offline backend", - "name", back.Name, - "req_id", GetReqID(ctx), - "auth", GetAuthCtx(ctx), - ) - continue - } - if errors.Is(err, ErrBackendOverCapacity) { - log.Warn( - "skipping over-capacity backend", - "name", back.Name, - "req_id", GetReqID(ctx), - "auth", GetAuthCtx(ctx), - ) - continue - } - if err != nil { - log.Warn( - "error dialing ws backend", - "name", back.Name, - "req_id", GetReqID(ctx), - "auth", GetAuthCtx(ctx), - "err", err, - ) - continue - } - return proxier, nil - } - - return nil, ErrNoBackends -} - -func weightedShuffle(backends []*Backend) { - weight := func(i int) float64 { - return float64(backends[i].weight) - } - - weightedshuffle.ShuffleInplace(backends, weight, nil) -} - -func (bg *BackendGroup) orderedBackendsForRequest() []*Backend { - if bg.Consensus != nil { - return bg.loadBalancedConsensusGroup() - } else if bg.WeightedRouting { - result := make([]*Backend, len(bg.Backends)) - copy(result, bg.Backends) - weightedShuffle(result) - return result - } else { - return bg.Backends - } -} - -func (bg *BackendGroup) loadBalancedConsensusGroup() []*Backend { - cg := bg.Consensus.GetConsensusGroup() - - backendsHealthy := make([]*Backend, 0, len(cg)) - backendsDegraded := make([]*Backend, 0, len(cg)) - // separate into healthy, degraded and unhealthy backends - for _, be := range cg { - // unhealthy are filtered out and not attempted - if !be.IsHealthy() { - continue - } - if be.IsDegraded() { - backendsDegraded = append(backendsDegraded, be) - continue - } - backendsHealthy = append(backendsHealthy, be) - } - - // shuffle both slices - r := rand.New(rand.NewSource(time.Now().UnixNano())) - r.Shuffle(len(backendsHealthy), func(i, j int) { - backendsHealthy[i], backendsHealthy[j] = backendsHealthy[j], backendsHealthy[i] - }) - r.Shuffle(len(backendsDegraded), func(i, j int) { - backendsDegraded[i], backendsDegraded[j] = backendsDegraded[j], backendsDegraded[i] - }) - - if bg.WeightedRouting { - weightedShuffle(backendsHealthy) - } - - // healthy are put into a priority position - // degraded backends are used as fallback - backendsHealthy = append(backendsHealthy, backendsDegraded...) - - return backendsHealthy -} - -func (bg *BackendGroup) Shutdown() { - if bg.Consensus != nil { - bg.Consensus.Shutdown() - } -} - -func calcBackoff(i int) time.Duration { - jitter := float64(rand.Int63n(250)) - ms := math.Min(math.Pow(2, float64(i))*1000+jitter, 3000) - return time.Duration(ms) * time.Millisecond -} - -type WSProxier struct { - backend *Backend - clientConn *websocket.Conn - clientConnMu sync.Mutex - backendConn *websocket.Conn - backendConnMu sync.Mutex - methodWhitelist *StringSet - readTimeout time.Duration - writeTimeout time.Duration -} - -func NewWSProxier(backend *Backend, clientConn, backendConn *websocket.Conn, methodWhitelist *StringSet) *WSProxier { - return &WSProxier{ - backend: backend, - clientConn: clientConn, - backendConn: backendConn, - methodWhitelist: methodWhitelist, - readTimeout: defaultWSReadTimeout, - writeTimeout: defaultWSWriteTimeout, - } -} - -func (w *WSProxier) Proxy(ctx context.Context) error { - errC := make(chan error, 2) - go w.clientPump(ctx, errC) - go w.backendPump(ctx, errC) - err := <-errC - w.close() - return err -} - -func (w *WSProxier) clientPump(ctx context.Context, errC chan error) { - for { - // Block until we get a message. - msgType, msg, err := w.clientConn.ReadMessage() - if err != nil { - if err := w.writeBackendConn(websocket.CloseMessage, formatWSError(err)); err != nil { - log.Error("error writing backendConn message", "err", err) - errC <- err - return - } - } - - RecordWSMessage(ctx, w.backend.Name, SourceClient) - - // Route control messages to the backend. These don't - // count towards the total RPC requests count. - if msgType != websocket.TextMessage && msgType != websocket.BinaryMessage { - err := w.writeBackendConn(msgType, msg) - if err != nil { - errC <- err - return - } - continue - } - - rpcRequestsTotal.Inc() - - // Don't bother sending invalid requests to the backend, - // just handle them here. - req, err := w.prepareClientMsg(msg) - if err != nil { - var id json.RawMessage - method := MethodUnknown - if req != nil { - id = req.ID - method = req.Method - } - log.Info( - "error preparing client message", - "auth", GetAuthCtx(ctx), - "req_id", GetReqID(ctx), - "err", err, - ) - msg = mustMarshalJSON(NewRPCErrorRes(id, err)) - RecordRPCError(ctx, BackendProxyd, method, err) - - // Send error response to client - err = w.writeClientConn(msgType, msg) - if err != nil { - errC <- err - return - } - continue - } - - // Send eth_accounts requests directly to the client - if req.Method == "eth_accounts" { - msg = mustMarshalJSON(NewRPCRes(req.ID, emptyArrayResponse)) - RecordRPCForward(ctx, BackendProxyd, "eth_accounts", RPCRequestSourceWS) - err = w.writeClientConn(msgType, msg) - if err != nil { - errC <- err - return - } - continue - } - - RecordRPCForward(ctx, w.backend.Name, req.Method, RPCRequestSourceWS) - log.Info( - "forwarded WS message to backend", - "method", req.Method, - "auth", GetAuthCtx(ctx), - "req_id", GetReqID(ctx), - ) - - err = w.writeBackendConn(msgType, msg) - if err != nil { - errC <- err - return - } - } -} - -func (w *WSProxier) backendPump(ctx context.Context, errC chan error) { - for { - // Block until we get a message. - msgType, msg, err := w.backendConn.ReadMessage() - if err != nil { - if err := w.writeClientConn(websocket.CloseMessage, formatWSError(err)); err != nil { - log.Error("error writing clientConn message", "err", err) - errC <- err - return - } - } - - RecordWSMessage(ctx, w.backend.Name, SourceBackend) - - // Route control messages directly to the client. - if msgType != websocket.TextMessage && msgType != websocket.BinaryMessage { - err := w.writeClientConn(msgType, msg) - if err != nil { - errC <- err - return - } - continue - } - - res, err := w.parseBackendMsg(msg) - if err != nil { - var id json.RawMessage - if res != nil { - id = res.ID - } - msg = mustMarshalJSON(NewRPCErrorRes(id, err)) - log.Info("backend responded with error", "err", err) - } else { - if res.IsError() { - log.Info( - "backend responded with RPC error", - "code", res.Error.Code, - "msg", res.Error.Message, - "source", "ws", - "auth", GetAuthCtx(ctx), - "req_id", GetReqID(ctx), - ) - RecordRPCError(ctx, w.backend.Name, MethodUnknown, res.Error) - } else { - log.Info( - "forwarded WS message to client", - "auth", GetAuthCtx(ctx), - "req_id", GetReqID(ctx), - ) - } - } - - err = w.writeClientConn(msgType, msg) - if err != nil { - errC <- err - return - } - } -} - -func (w *WSProxier) close() { - w.clientConn.Close() - w.backendConn.Close() - activeBackendWsConnsGauge.WithLabelValues(w.backend.Name).Dec() -} - -func (w *WSProxier) prepareClientMsg(msg []byte) (*RPCReq, error) { - req, err := ParseRPCReq(msg) - if err != nil { - return nil, err - } - - if !w.methodWhitelist.Has(req.Method) { - return req, ErrMethodNotWhitelisted - } - - return req, nil -} - -func (w *WSProxier) parseBackendMsg(msg []byte) (*RPCRes, error) { - res, err := ParseRPCRes(bytes.NewReader(msg)) - if err != nil { - log.Warn("error parsing RPC response", "source", "ws", "err", err) - return res, ErrBackendBadResponse - } - return res, nil -} - -func (w *WSProxier) writeClientConn(msgType int, msg []byte) error { - w.clientConnMu.Lock() - defer w.clientConnMu.Unlock() - if err := w.clientConn.SetWriteDeadline(time.Now().Add(w.writeTimeout)); err != nil { - log.Error("ws client write timeout", "err", err) - return err - } - err := w.clientConn.WriteMessage(msgType, msg) - return err -} - -func (w *WSProxier) writeBackendConn(msgType int, msg []byte) error { - w.backendConnMu.Lock() - defer w.backendConnMu.Unlock() - if err := w.backendConn.SetWriteDeadline(time.Now().Add(w.writeTimeout)); err != nil { - log.Error("ws backend write timeout", "err", err) - return err - } - err := w.backendConn.WriteMessage(msgType, msg) - return err -} - -func mustMarshalJSON(in interface{}) []byte { - out, err := json.Marshal(in) - if err != nil { - panic(err) - } - return out -} - -func formatWSError(err error) []byte { - m := websocket.FormatCloseMessage(websocket.CloseNormalClosure, fmt.Sprintf("%v", err)) - if e, ok := err.(*websocket.CloseError); ok { - if e.Code != websocket.CloseNoStatusReceived { - m = websocket.FormatCloseMessage(e.Code, e.Text) - } - } - return m -} - -func sleepContext(ctx context.Context, duration time.Duration) { - select { - case <-ctx.Done(): - case <-time.After(duration): - } -} - -type LimitedHTTPClient struct { - http.Client - sem *semaphore.Weighted - backendName string -} - -func (c *LimitedHTTPClient) DoLimited(req *http.Request) (*http.Response, error) { - if err := c.sem.Acquire(req.Context(), 1); err != nil { - tooManyRequestErrorsTotal.WithLabelValues(c.backendName).Inc() - return nil, wrapErr(err, "too many requests") - } - defer c.sem.Release(1) - return c.Do(req) -} - -func RecordBatchRPCError(ctx context.Context, backendName string, reqs []*RPCReq, err error) { - for _, req := range reqs { - RecordRPCError(ctx, backendName, req.Method, err) - } -} - -func MaybeRecordErrorsInRPCRes(ctx context.Context, backendName string, reqs []*RPCReq, resBatch []*RPCRes) { - log.Info("forwarded RPC request", - "backend", backendName, - "auth", GetAuthCtx(ctx), - "req_id", GetReqID(ctx), - "batch_size", len(reqs), - ) - - var lastError *RPCErr - for i, res := range resBatch { - if res.IsError() { - lastError = res.Error - RecordRPCError(ctx, backendName, reqs[i].Method, res.Error) - } - } - - if lastError != nil { - log.Info( - "backend responded with RPC error", - "backend", backendName, - "last_error_code", lastError.Code, - "last_error_msg", lastError.Message, - "req_id", GetReqID(ctx), - "source", "rpc", - "auth", GetAuthCtx(ctx), - ) - } -} - -func RecordBatchRPCForward(ctx context.Context, backendName string, reqs []*RPCReq, source string) { - for _, req := range reqs { - RecordRPCForward(ctx, backendName, req.Method, source) - } -} - -func stripXFF(xff string) string { - ipList := strings.Split(xff, ",") - return strings.TrimSpace(ipList[0]) -} diff --git a/proxyd/backend_test.go b/proxyd/backend_test.go deleted file mode 100644 index 7be23bfed7bc..000000000000 --- a/proxyd/backend_test.go +++ /dev/null @@ -1,21 +0,0 @@ -package proxyd - -import ( - "github.com/stretchr/testify/assert" - "testing" -) - -func TestStripXFF(t *testing.T) { - tests := []struct { - in, out string - }{ - {"1.2.3, 4.5.6, 7.8.9", "1.2.3"}, - {"1.2.3,4.5.6", "1.2.3"}, - {" 1.2.3 , 4.5.6 ", "1.2.3"}, - } - - for _, test := range tests { - actual := stripXFF(test.in) - assert.Equal(t, test.out, actual) - } -} diff --git a/proxyd/cache.go b/proxyd/cache.go deleted file mode 100644 index 5add4f23627e..000000000000 --- a/proxyd/cache.go +++ /dev/null @@ -1,192 +0,0 @@ -package proxyd - -import ( - "context" - "encoding/json" - "strings" - "time" - - "github.com/ethereum/go-ethereum/rpc" - "github.com/redis/go-redis/v9" - - "github.com/golang/snappy" - lru "github.com/hashicorp/golang-lru" -) - -type Cache interface { - Get(ctx context.Context, key string) (string, error) - Put(ctx context.Context, key string, value string) error -} - -const ( - // assuming an average RPCRes size of 3 KB - memoryCacheLimit = 4096 -) - -type cache struct { - lru *lru.Cache -} - -func newMemoryCache() *cache { - rep, _ := lru.New(memoryCacheLimit) - return &cache{rep} -} - -func (c *cache) Get(ctx context.Context, key string) (string, error) { - if val, ok := c.lru.Get(key); ok { - return val.(string), nil - } - return "", nil -} - -func (c *cache) Put(ctx context.Context, key string, value string) error { - c.lru.Add(key, value) - return nil -} - -type redisCache struct { - rdb *redis.Client - prefix string - ttl time.Duration -} - -func newRedisCache(rdb *redis.Client, prefix string, ttl time.Duration) *redisCache { - return &redisCache{rdb, prefix, ttl} -} - -func (c *redisCache) namespaced(key string) string { - if c.prefix == "" { - return key - } - return strings.Join([]string{c.prefix, key}, ":") -} - -func (c *redisCache) Get(ctx context.Context, key string) (string, error) { - start := time.Now() - val, err := c.rdb.Get(ctx, c.namespaced(key)).Result() - redisCacheDurationSumm.WithLabelValues("GET").Observe(float64(time.Since(start).Milliseconds())) - - if err == redis.Nil { - return "", nil - } else if err != nil { - RecordRedisError("CacheGet") - return "", err - } - return val, nil -} - -func (c *redisCache) Put(ctx context.Context, key string, value string) error { - start := time.Now() - err := c.rdb.SetEx(ctx, c.namespaced(key), value, c.ttl).Err() - redisCacheDurationSumm.WithLabelValues("SETEX").Observe(float64(time.Since(start).Milliseconds())) - - if err != nil { - RecordRedisError("CacheSet") - } - return err -} - -type cacheWithCompression struct { - cache Cache -} - -func newCacheWithCompression(cache Cache) *cacheWithCompression { - return &cacheWithCompression{cache} -} - -func (c *cacheWithCompression) Get(ctx context.Context, key string) (string, error) { - encodedVal, err := c.cache.Get(ctx, key) - if err != nil { - return "", err - } - if encodedVal == "" { - return "", nil - } - val, err := snappy.Decode(nil, []byte(encodedVal)) - if err != nil { - return "", err - } - return string(val), nil -} - -func (c *cacheWithCompression) Put(ctx context.Context, key string, value string) error { - encodedVal := snappy.Encode(nil, []byte(value)) - return c.cache.Put(ctx, key, string(encodedVal)) -} - -type RPCCache interface { - GetRPC(ctx context.Context, req *RPCReq) (*RPCRes, error) - PutRPC(ctx context.Context, req *RPCReq, res *RPCRes) error -} - -type rpcCache struct { - cache Cache - handlers map[string]RPCMethodHandler -} - -func newRPCCache(cache Cache) RPCCache { - staticHandler := &StaticMethodHandler{cache: cache} - debugGetRawReceiptsHandler := &StaticMethodHandler{cache: cache, - filterGet: func(req *RPCReq) bool { - // cache only if the request is for a block hash - - var p []rpc.BlockNumberOrHash - err := json.Unmarshal(req.Params, &p) - if err != nil { - return false - } - if len(p) != 1 { - return false - } - return p[0].BlockHash != nil - }, - filterPut: func(req *RPCReq, res *RPCRes) bool { - // don't cache if response contains 0 receipts - rawReceipts, ok := res.Result.([]interface{}) - if !ok { - return false - } - return len(rawReceipts) > 0 - }, - } - handlers := map[string]RPCMethodHandler{ - "eth_chainId": staticHandler, - "net_version": staticHandler, - "eth_getBlockTransactionCountByHash": staticHandler, - "eth_getUncleCountByBlockHash": staticHandler, - "eth_getBlockByHash": staticHandler, - "eth_getTransactionByBlockHashAndIndex": staticHandler, - "eth_getUncleByBlockHashAndIndex": staticHandler, - "debug_getRawReceipts": debugGetRawReceiptsHandler, - } - return &rpcCache{ - cache: cache, - handlers: handlers, - } -} - -func (c *rpcCache) GetRPC(ctx context.Context, req *RPCReq) (*RPCRes, error) { - handler := c.handlers[req.Method] - if handler == nil { - return nil, nil - } - res, err := handler.GetRPCMethod(ctx, req) - if err != nil { - RecordCacheError(req.Method) - return nil, err - } - if res == nil { - RecordCacheMiss(req.Method) - } else { - RecordCacheHit(req.Method) - } - return res, nil -} - -func (c *rpcCache) PutRPC(ctx context.Context, req *RPCReq, res *RPCRes) error { - handler := c.handlers[req.Method] - if handler == nil { - return nil - } - return handler.PutRPCMethod(ctx, req, res) -} diff --git a/proxyd/cache_test.go b/proxyd/cache_test.go deleted file mode 100644 index 1a5d543227ae..000000000000 --- a/proxyd/cache_test.go +++ /dev/null @@ -1,213 +0,0 @@ -package proxyd - -import ( - "context" - "strconv" - "testing" - - "github.com/stretchr/testify/require" -) - -func TestRPCCacheImmutableRPCs(t *testing.T) { - ctx := context.Background() - - cache := newRPCCache(newMemoryCache()) - ID := []byte(strconv.Itoa(1)) - - rpcs := []struct { - req *RPCReq - res *RPCRes - name string - }{ - { - req: &RPCReq{ - JSONRPC: "2.0", - Method: "eth_chainId", - ID: ID, - }, - res: &RPCRes{ - JSONRPC: "2.0", - Result: "0xff", - ID: ID, - }, - name: "eth_chainId", - }, - { - req: &RPCReq{ - JSONRPC: "2.0", - Method: "net_version", - ID: ID, - }, - res: &RPCRes{ - JSONRPC: "2.0", - Result: "9999", - ID: ID, - }, - name: "net_version", - }, - { - req: &RPCReq{ - JSONRPC: "2.0", - Method: "eth_getBlockTransactionCountByHash", - Params: mustMarshalJSON([]string{"0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"}), - ID: ID, - }, - res: &RPCRes{ - JSONRPC: "2.0", - Result: `{"eth_getBlockTransactionCountByHash":"!"}`, - ID: ID, - }, - name: "eth_getBlockTransactionCountByHash", - }, - { - req: &RPCReq{ - JSONRPC: "2.0", - Method: "eth_getUncleCountByBlockHash", - Params: mustMarshalJSON([]string{"0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"}), - ID: ID, - }, - res: &RPCRes{ - JSONRPC: "2.0", - Result: `{"eth_getUncleCountByBlockHash":"!"}`, - ID: ID, - }, - name: "eth_getUncleCountByBlockHash", - }, - { - req: &RPCReq{ - JSONRPC: "2.0", - Method: "eth_getBlockByHash", - Params: mustMarshalJSON([]string{"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", "false"}), - ID: ID, - }, - res: &RPCRes{ - JSONRPC: "2.0", - Result: `{"eth_getBlockByHash":"!"}`, - ID: ID, - }, - name: "eth_getBlockByHash", - }, - { - req: &RPCReq{ - JSONRPC: "2.0", - Method: "eth_getUncleByBlockHashAndIndex", - Params: mustMarshalJSON([]string{"0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238", "0x90"}), - ID: ID, - }, - res: &RPCRes{ - JSONRPC: "2.0", - Result: `{"eth_getUncleByBlockHashAndIndex":"!"}`, - ID: ID, - }, - name: "eth_getUncleByBlockHashAndIndex", - }, - { - req: &RPCReq{ - JSONRPC: "2.0", - Method: "debug_getRawReceipts", - Params: mustMarshalJSON([]string{"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b"}), - ID: ID, - }, - res: &RPCRes{ - JSONRPC: "2.0", - Result: []interface{}{"a"}, - ID: ID, - }, - name: "debug_getRawReceipts", - }, - } - - for _, rpc := range rpcs { - t.Run(rpc.name, func(t *testing.T) { - err := cache.PutRPC(ctx, rpc.req, rpc.res) - require.NoError(t, err) - - cachedRes, err := cache.GetRPC(ctx, rpc.req) - require.NoError(t, err) - require.Equal(t, rpc.res, cachedRes) - }) - } -} - -func TestRPCCacheUnsupportedMethod(t *testing.T) { - ctx := context.Background() - - cache := newRPCCache(newMemoryCache()) - ID := []byte(strconv.Itoa(1)) - - rpcs := []struct { - req *RPCReq - name string - }{ - { - name: "eth_syncing", - req: &RPCReq{ - JSONRPC: "2.0", - Method: "eth_syncing", - ID: ID, - }, - }, - { - name: "eth_blockNumber", - req: &RPCReq{ - JSONRPC: "2.0", - Method: "eth_blockNumber", - ID: ID, - }, - }, - { - name: "eth_getBlockByNumber", - req: &RPCReq{ - JSONRPC: "2.0", - Method: "eth_getBlockByNumber", - ID: ID, - }, - }, - { - name: "eth_getBlockRange", - req: &RPCReq{ - JSONRPC: "2.0", - Method: "eth_getBlockRange", - ID: ID, - }, - }, - { - name: "eth_gasPrice", - req: &RPCReq{ - JSONRPC: "2.0", - Method: "eth_gasPrice", - ID: ID, - }, - }, - { - name: "eth_call", - req: &RPCReq{ - JSONRPC: "2.0", - Method: "eth_call", - ID: ID, - }, - }, - { - req: &RPCReq{ - JSONRPC: "2.0", - Method: "debug_getRawReceipts", - Params: mustMarshalJSON([]string{"0x100"}), - ID: ID, - }, - name: "debug_getRawReceipts", - }, - } - - for _, rpc := range rpcs { - t.Run(rpc.name, func(t *testing.T) { - fakeval := mustMarshalJSON([]string{rpc.name}) - err := cache.PutRPC(ctx, rpc.req, &RPCRes{Result: fakeval}) - require.NoError(t, err) - - cachedRes, err := cache.GetRPC(ctx, rpc.req) - require.NoError(t, err) - require.Nil(t, cachedRes) - }) - } - -} diff --git a/proxyd/cmd/proxyd/main.go b/proxyd/cmd/proxyd/main.go deleted file mode 100644 index 3daa80b38710..000000000000 --- a/proxyd/cmd/proxyd/main.go +++ /dev/null @@ -1,121 +0,0 @@ -package main - -import ( - "fmt" - "net" - "net/http" - "net/http/pprof" - "os" - "os/signal" - "strconv" - "strings" - "syscall" - - "github.com/BurntSushi/toml" - "golang.org/x/exp/slog" - - "github.com/ethereum/go-ethereum/log" - - "github.com/ethereum-optimism/optimism/proxyd" -) - -var ( - GitVersion = "" - GitCommit = "" - GitDate = "" -) - -func main() { - // Set up logger with a default INFO level in case we fail to parse flags. - // Otherwise the final critical log won't show what the parsing error was. - proxyd.SetLogLevel(slog.LevelInfo) - - log.Info("starting proxyd", "version", GitVersion, "commit", GitCommit, "date", GitDate) - - if len(os.Args) < 2 { - log.Crit("must specify a config file on the command line") - } - - config := new(proxyd.Config) - if _, err := toml.DecodeFile(os.Args[1], config); err != nil { - log.Crit("error reading config file", "err", err) - } - - // update log level from config - logLevel, err := LevelFromString(config.Server.LogLevel) - if err != nil { - logLevel = log.LevelInfo - if config.Server.LogLevel != "" { - log.Warn("invalid server.log_level set: " + config.Server.LogLevel) - } - } - proxyd.SetLogLevel(logLevel) - - if config.Server.EnablePprof { - log.Info("starting pprof", "addr", "0.0.0.0", "port", "6060") - pprofSrv := StartPProf("0.0.0.0", 6060) - log.Info("started pprof server", "addr", pprofSrv.Addr) - defer func() { - if err := pprofSrv.Close(); err != nil { - log.Error("failed to stop pprof server", "err", err) - } - }() - } - - _, shutdown, err := proxyd.Start(config) - if err != nil { - log.Crit("error starting proxyd", "err", err) - } - - sig := make(chan os.Signal, 1) - signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM) - recvSig := <-sig - log.Info("caught signal, shutting down", "signal", recvSig) - shutdown() -} - -// LevelFromString returns the appropriate Level from a string name. -// Useful for parsing command line args and configuration files. -// It also converts strings to lowercase. -// Note: copied from op-service/log to avoid monorepo dependency -func LevelFromString(lvlString string) (slog.Level, error) { - lvlString = strings.ToLower(lvlString) // ignore case - switch lvlString { - case "trace", "trce": - return log.LevelTrace, nil - case "debug", "dbug": - return log.LevelDebug, nil - case "info": - return log.LevelInfo, nil - case "warn": - return log.LevelWarn, nil - case "error", "eror": - return log.LevelError, nil - case "crit": - return log.LevelCrit, nil - default: - return log.LevelDebug, fmt.Errorf("unknown level: %v", lvlString) - } -} - -func StartPProf(hostname string, port int) *http.Server { - mux := http.NewServeMux() - - // have to do below to support multiple servers, since the - // pprof import only uses DefaultServeMux - mux.Handle("/debug/pprof/", http.HandlerFunc(pprof.Index)) - mux.Handle("/debug/pprof/cmdline", http.HandlerFunc(pprof.Cmdline)) - mux.Handle("/debug/pprof/profile", http.HandlerFunc(pprof.Profile)) - mux.Handle("/debug/pprof/symbol", http.HandlerFunc(pprof.Symbol)) - mux.Handle("/debug/pprof/trace", http.HandlerFunc(pprof.Trace)) - - addr := net.JoinHostPort(hostname, strconv.Itoa(port)) - srv := &http.Server{ - Handler: mux, - Addr: addr, - } - - go srv.ListenAndServe() - - return srv -} diff --git a/proxyd/config.go b/proxyd/config.go deleted file mode 100644 index 4719a55f85c1..000000000000 --- a/proxyd/config.go +++ /dev/null @@ -1,184 +0,0 @@ -package proxyd - -import ( - "fmt" - "math/big" - "os" - "strings" - "time" -) - -type ServerConfig struct { - RPCHost string `toml:"rpc_host"` - RPCPort int `toml:"rpc_port"` - WSHost string `toml:"ws_host"` - WSPort int `toml:"ws_port"` - MaxBodySizeBytes int64 `toml:"max_body_size_bytes"` - MaxConcurrentRPCs int64 `toml:"max_concurrent_rpcs"` - LogLevel string `toml:"log_level"` - - // TimeoutSeconds specifies the maximum time spent serving an HTTP request. Note that isn't used for websocket connections - TimeoutSeconds int `toml:"timeout_seconds"` - - MaxUpstreamBatchSize int `toml:"max_upstream_batch_size"` - - EnableRequestLog bool `toml:"enable_request_log"` - MaxRequestBodyLogLen int `toml:"max_request_body_log_len"` - EnablePprof bool `toml:"enable_pprof"` - EnableXServedByHeader bool `toml:"enable_served_by_header"` - AllowAllOrigins bool `toml:"allow_all_origins"` -} - -type CacheConfig struct { - Enabled bool `toml:"enabled"` - TTL TOMLDuration `toml:"ttl"` -} - -type RedisConfig struct { - URL string `toml:"url"` - Namespace string `toml:"namespace"` -} - -type MetricsConfig struct { - Enabled bool `toml:"enabled"` - Host string `toml:"host"` - Port int `toml:"port"` -} - -type RateLimitConfig struct { - UseRedis bool `toml:"use_redis"` - BaseRate int `toml:"base_rate"` - BaseInterval TOMLDuration `toml:"base_interval"` - ExemptOrigins []string `toml:"exempt_origins"` - ExemptUserAgents []string `toml:"exempt_user_agents"` - ErrorMessage string `toml:"error_message"` - MethodOverrides map[string]*RateLimitMethodOverride `toml:"method_overrides"` - IPHeaderOverride string `toml:"ip_header_override"` -} - -type RateLimitMethodOverride struct { - Limit int `toml:"limit"` - Interval TOMLDuration `toml:"interval"` - Global bool `toml:"global"` -} - -type TOMLDuration time.Duration - -func (t *TOMLDuration) UnmarshalText(b []byte) error { - d, err := time.ParseDuration(string(b)) - if err != nil { - return err - } - - *t = TOMLDuration(d) - return nil -} - -type BackendOptions struct { - ResponseTimeoutSeconds int `toml:"response_timeout_seconds"` - MaxResponseSizeBytes int64 `toml:"max_response_size_bytes"` - MaxRetries int `toml:"max_retries"` - OutOfServiceSeconds int `toml:"out_of_service_seconds"` - MaxDegradedLatencyThreshold TOMLDuration `toml:"max_degraded_latency_threshold"` - MaxLatencyThreshold TOMLDuration `toml:"max_latency_threshold"` - MaxErrorRateThreshold float64 `toml:"max_error_rate_threshold"` -} - -type BackendConfig struct { - Username string `toml:"username"` - Password string `toml:"password"` - RPCURL string `toml:"rpc_url"` - WSURL string `toml:"ws_url"` - WSPort int `toml:"ws_port"` - MaxRPS int `toml:"max_rps"` - MaxWSConns int `toml:"max_ws_conns"` - CAFile string `toml:"ca_file"` - ClientCertFile string `toml:"client_cert_file"` - ClientKeyFile string `toml:"client_key_file"` - StripTrailingXFF bool `toml:"strip_trailing_xff"` - Headers map[string]string `toml:"headers"` - - Weight int `toml:"weight"` - - ConsensusSkipPeerCountCheck bool `toml:"consensus_skip_peer_count"` - ConsensusForcedCandidate bool `toml:"consensus_forced_candidate"` - ConsensusReceiptsTarget string `toml:"consensus_receipts_target"` -} - -type BackendsConfig map[string]*BackendConfig - -type BackendGroupConfig struct { - Backends []string `toml:"backends"` - - WeightedRouting bool `toml:"weighted_routing"` - - ConsensusAware bool `toml:"consensus_aware"` - ConsensusAsyncHandler string `toml:"consensus_handler"` - ConsensusPollerInterval TOMLDuration `toml:"consensus_poller_interval"` - - ConsensusBanPeriod TOMLDuration `toml:"consensus_ban_period"` - ConsensusMaxUpdateThreshold TOMLDuration `toml:"consensus_max_update_threshold"` - ConsensusMaxBlockLag uint64 `toml:"consensus_max_block_lag"` - ConsensusMaxBlockRange uint64 `toml:"consensus_max_block_range"` - ConsensusMinPeerCount int `toml:"consensus_min_peer_count"` - - ConsensusHA bool `toml:"consensus_ha"` - ConsensusHAHeartbeatInterval TOMLDuration `toml:"consensus_ha_heartbeat_interval"` - ConsensusHALockPeriod TOMLDuration `toml:"consensus_ha_lock_period"` - ConsensusHARedis RedisConfig `toml:"consensus_ha_redis"` - - Fallbacks []string `toml:"fallbacks"` -} - -type BackendGroupsConfig map[string]*BackendGroupConfig - -type MethodMappingsConfig map[string]string - -type BatchConfig struct { - MaxSize int `toml:"max_size"` - ErrorMessage string `toml:"error_message"` -} - -// SenderRateLimitConfig configures the sender-based rate limiter -// for eth_sendRawTransaction requests. -// To enable pre-eip155 transactions, add '0' to allowed_chain_ids. -type SenderRateLimitConfig struct { - Enabled bool - Interval TOMLDuration - Limit int - AllowedChainIds []*big.Int `toml:"allowed_chain_ids"` -} - -type Config struct { - WSBackendGroup string `toml:"ws_backend_group"` - Server ServerConfig `toml:"server"` - Cache CacheConfig `toml:"cache"` - Redis RedisConfig `toml:"redis"` - Metrics MetricsConfig `toml:"metrics"` - RateLimit RateLimitConfig `toml:"rate_limit"` - BackendOptions BackendOptions `toml:"backend"` - Backends BackendsConfig `toml:"backends"` - BatchConfig BatchConfig `toml:"batch"` - Authentication map[string]string `toml:"authentication"` - BackendGroups BackendGroupsConfig `toml:"backend_groups"` - RPCMethodMappings map[string]string `toml:"rpc_method_mappings"` - WSMethodWhitelist []string `toml:"ws_method_whitelist"` - WhitelistErrorMessage string `toml:"whitelist_error_message"` - SenderRateLimit SenderRateLimitConfig `toml:"sender_rate_limit"` -} - -func ReadFromEnvOrConfig(value string) (string, error) { - if strings.HasPrefix(value, "$") { - envValue := os.Getenv(strings.TrimPrefix(value, "$")) - if envValue == "" { - return "", fmt.Errorf("config env var %s not found", value) - } - return envValue, nil - } - - if strings.HasPrefix(value, "\\") { - return strings.TrimPrefix(value, "\\"), nil - } - - return value, nil -} diff --git a/proxyd/consensus_poller.go b/proxyd/consensus_poller.go deleted file mode 100644 index 90af41db7067..000000000000 --- a/proxyd/consensus_poller.go +++ /dev/null @@ -1,746 +0,0 @@ -package proxyd - -import ( - "context" - "fmt" - "strconv" - "strings" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common/hexutil" - - "github.com/ethereum/go-ethereum/log" -) - -const ( - DefaultPollerInterval = 1 * time.Second -) - -type OnConsensusBroken func() - -// ConsensusPoller checks the consensus state for each member of a BackendGroup -// resolves the highest common block for multiple nodes, and reconciles the consensus -// in case of block hash divergence to minimize re-orgs -type ConsensusPoller struct { - ctx context.Context - cancelFunc context.CancelFunc - listeners []OnConsensusBroken - - backendGroup *BackendGroup - backendState map[*Backend]*backendState - consensusGroupMux sync.Mutex - consensusGroup []*Backend - - tracker ConsensusTracker - asyncHandler ConsensusAsyncHandler - - minPeerCount uint64 - banPeriod time.Duration - maxUpdateThreshold time.Duration - maxBlockLag uint64 - maxBlockRange uint64 - interval time.Duration -} - -type backendState struct { - backendStateMux sync.Mutex - - latestBlockNumber hexutil.Uint64 - latestBlockHash string - safeBlockNumber hexutil.Uint64 - finalizedBlockNumber hexutil.Uint64 - - peerCount uint64 - inSync bool - - lastUpdate time.Time - - bannedUntil time.Time -} - -func (bs *backendState) IsBanned() bool { - return time.Now().Before(bs.bannedUntil) -} - -// GetConsensusGroup returns the backend members that are agreeing in a consensus -func (cp *ConsensusPoller) GetConsensusGroup() []*Backend { - defer cp.consensusGroupMux.Unlock() - cp.consensusGroupMux.Lock() - - g := make([]*Backend, len(cp.consensusGroup)) - copy(g, cp.consensusGroup) - - return g -} - -// GetLatestBlockNumber returns the `latest` agreed block number in a consensus -func (ct *ConsensusPoller) GetLatestBlockNumber() hexutil.Uint64 { - return ct.tracker.GetLatestBlockNumber() -} - -// GetSafeBlockNumber returns the `safe` agreed block number in a consensus -func (ct *ConsensusPoller) GetSafeBlockNumber() hexutil.Uint64 { - return ct.tracker.GetSafeBlockNumber() -} - -// GetFinalizedBlockNumber returns the `finalized` agreed block number in a consensus -func (ct *ConsensusPoller) GetFinalizedBlockNumber() hexutil.Uint64 { - return ct.tracker.GetFinalizedBlockNumber() -} - -func (cp *ConsensusPoller) Shutdown() { - cp.asyncHandler.Shutdown() -} - -// ConsensusAsyncHandler controls the asynchronous polling mechanism, interval and shutdown -type ConsensusAsyncHandler interface { - Init() - Shutdown() -} - -// NoopAsyncHandler allows fine control updating the consensus -type NoopAsyncHandler struct{} - -func NewNoopAsyncHandler() ConsensusAsyncHandler { - log.Warn("using NewNoopAsyncHandler") - return &NoopAsyncHandler{} -} -func (ah *NoopAsyncHandler) Init() {} -func (ah *NoopAsyncHandler) Shutdown() {} - -// PollerAsyncHandler asynchronously updates each individual backend and the group consensus -type PollerAsyncHandler struct { - ctx context.Context - cp *ConsensusPoller -} - -func NewPollerAsyncHandler(ctx context.Context, cp *ConsensusPoller) ConsensusAsyncHandler { - return &PollerAsyncHandler{ - ctx: ctx, - cp: cp, - } -} -func (ah *PollerAsyncHandler) Init() { - // create the individual backend pollers. - log.Info("total number of primary candidates", "primaries", len(ah.cp.backendGroup.Primaries())) - log.Info("total number of fallback candidates", "fallbacks", len(ah.cp.backendGroup.Fallbacks())) - - for _, be := range ah.cp.backendGroup.Primaries() { - go func(be *Backend) { - for { - timer := time.NewTimer(ah.cp.interval) - ah.cp.UpdateBackend(ah.ctx, be) - select { - case <-timer.C: - case <-ah.ctx.Done(): - timer.Stop() - return - } - } - }(be) - } - - for _, be := range ah.cp.backendGroup.Fallbacks() { - go func(be *Backend) { - for { - timer := time.NewTimer(ah.cp.interval) - - healthyCandidates := ah.cp.FilterCandidates(ah.cp.backendGroup.Primaries()) - - log.Info("number of healthy primary candidates", "healthy_candidates", len(healthyCandidates)) - if len(healthyCandidates) == 0 { - log.Debug("zero healthy candidates, querying fallback backend", - "backend_name", be.Name) - ah.cp.UpdateBackend(ah.ctx, be) - } - - select { - case <-timer.C: - case <-ah.ctx.Done(): - timer.Stop() - return - } - } - }(be) - } - - // create the group consensus poller - go func() { - for { - timer := time.NewTimer(ah.cp.interval) - log.Info("updating backend group consensus") - ah.cp.UpdateBackendGroupConsensus(ah.ctx) - - select { - case <-timer.C: - case <-ah.ctx.Done(): - timer.Stop() - return - } - } - }() -} -func (ah *PollerAsyncHandler) Shutdown() { - ah.cp.cancelFunc() -} - -type ConsensusOpt func(cp *ConsensusPoller) - -func WithTracker(tracker ConsensusTracker) ConsensusOpt { - return func(cp *ConsensusPoller) { - cp.tracker = tracker - } -} - -func WithAsyncHandler(asyncHandler ConsensusAsyncHandler) ConsensusOpt { - return func(cp *ConsensusPoller) { - cp.asyncHandler = asyncHandler - } -} - -func WithListener(listener OnConsensusBroken) ConsensusOpt { - return func(cp *ConsensusPoller) { - cp.AddListener(listener) - } -} - -func (cp *ConsensusPoller) AddListener(listener OnConsensusBroken) { - cp.listeners = append(cp.listeners, listener) -} - -func (cp *ConsensusPoller) ClearListeners() { - cp.listeners = []OnConsensusBroken{} -} - -func WithBanPeriod(banPeriod time.Duration) ConsensusOpt { - return func(cp *ConsensusPoller) { - cp.banPeriod = banPeriod - } -} - -func WithMaxUpdateThreshold(maxUpdateThreshold time.Duration) ConsensusOpt { - return func(cp *ConsensusPoller) { - cp.maxUpdateThreshold = maxUpdateThreshold - } -} - -func WithMaxBlockLag(maxBlockLag uint64) ConsensusOpt { - return func(cp *ConsensusPoller) { - cp.maxBlockLag = maxBlockLag - } -} - -func WithMaxBlockRange(maxBlockRange uint64) ConsensusOpt { - return func(cp *ConsensusPoller) { - cp.maxBlockRange = maxBlockRange - } -} - -func WithMinPeerCount(minPeerCount uint64) ConsensusOpt { - return func(cp *ConsensusPoller) { - cp.minPeerCount = minPeerCount - } -} - -func WithPollerInterval(interval time.Duration) ConsensusOpt { - return func(cp *ConsensusPoller) { - cp.interval = interval - } -} - -func NewConsensusPoller(bg *BackendGroup, opts ...ConsensusOpt) *ConsensusPoller { - ctx, cancelFunc := context.WithCancel(context.Background()) - - state := make(map[*Backend]*backendState, len(bg.Backends)) - - cp := &ConsensusPoller{ - ctx: ctx, - cancelFunc: cancelFunc, - backendGroup: bg, - backendState: state, - - banPeriod: 5 * time.Minute, - maxUpdateThreshold: 30 * time.Second, - maxBlockLag: 8, // 8*12 seconds = 96 seconds ~ 1.6 minutes - minPeerCount: 3, - interval: DefaultPollerInterval, - } - - for _, opt := range opts { - opt(cp) - } - - if cp.tracker == nil { - cp.tracker = NewInMemoryConsensusTracker() - } - - if cp.asyncHandler == nil { - cp.asyncHandler = NewPollerAsyncHandler(ctx, cp) - } - - cp.Reset() - cp.asyncHandler.Init() - - return cp -} - -// UpdateBackend refreshes the consensus state of a single backend -func (cp *ConsensusPoller) UpdateBackend(ctx context.Context, be *Backend) { - bs := cp.getBackendState(be) - RecordConsensusBackendBanned(be, bs.IsBanned()) - - if bs.IsBanned() { - log.Debug("skipping backend - banned", "backend", be.Name) - return - } - - // if backend is not healthy state we'll only resume checking it after ban - if !be.IsHealthy() && !be.forcedCandidate { - log.Warn("backend banned - not healthy", "backend", be.Name) - cp.Ban(be) - return - } - - inSync, err := cp.isInSync(ctx, be) - RecordConsensusBackendInSync(be, err == nil && inSync) - if err != nil { - log.Warn("error updating backend sync state", "name", be.Name, "err", err) - } - - var peerCount uint64 - if !be.skipPeerCountCheck { - peerCount, err = cp.getPeerCount(ctx, be) - if err != nil { - log.Warn("error updating backend peer count", "name", be.Name, "err", err) - } - RecordConsensusBackendPeerCount(be, peerCount) - } - - latestBlockNumber, latestBlockHash, err := cp.fetchBlock(ctx, be, "latest") - if err != nil { - log.Warn("error updating backend - latest block", "name", be.Name, "err", err) - } - - safeBlockNumber, _, err := cp.fetchBlock(ctx, be, "safe") - if err != nil { - log.Warn("error updating backend - safe block", "name", be.Name, "err", err) - } - - finalizedBlockNumber, _, err := cp.fetchBlock(ctx, be, "finalized") - if err != nil { - log.Warn("error updating backend - finalized block", "name", be.Name, "err", err) - } - - RecordConsensusBackendUpdateDelay(be, bs.lastUpdate) - - changed := cp.setBackendState(be, peerCount, inSync, - latestBlockNumber, latestBlockHash, - safeBlockNumber, finalizedBlockNumber) - - RecordBackendLatestBlock(be, latestBlockNumber) - RecordBackendSafeBlock(be, safeBlockNumber) - RecordBackendFinalizedBlock(be, finalizedBlockNumber) - - if changed { - log.Debug("backend state updated", - "name", be.Name, - "peerCount", peerCount, - "inSync", inSync, - "latestBlockNumber", latestBlockNumber, - "latestBlockHash", latestBlockHash, - "safeBlockNumber", safeBlockNumber, - "finalizedBlockNumber", finalizedBlockNumber, - "lastUpdate", bs.lastUpdate) - } - - // sanity check for latest, safe and finalized block tags - expectedBlockTags := cp.checkExpectedBlockTags( - latestBlockNumber, - bs.safeBlockNumber, safeBlockNumber, - bs.finalizedBlockNumber, finalizedBlockNumber) - - RecordBackendUnexpectedBlockTags(be, !expectedBlockTags) - - if !expectedBlockTags && !be.forcedCandidate { - log.Warn("backend banned - unexpected block tags", - "backend", be.Name, - "oldFinalized", bs.finalizedBlockNumber, - "finalizedBlockNumber", finalizedBlockNumber, - "oldSafe", bs.safeBlockNumber, - "safeBlockNumber", safeBlockNumber, - "latestBlockNumber", latestBlockNumber, - ) - cp.Ban(be) - } -} - -// checkExpectedBlockTags for unexpected conditions on block tags -// - finalized block number should never decrease -// - safe block number should never decrease -// - finalized block should be <= safe block <= latest block -func (cp *ConsensusPoller) checkExpectedBlockTags( - currentLatest hexutil.Uint64, - oldSafe hexutil.Uint64, currentSafe hexutil.Uint64, - oldFinalized hexutil.Uint64, currentFinalized hexutil.Uint64) bool { - return currentFinalized >= oldFinalized && - currentSafe >= oldSafe && - currentFinalized <= currentSafe && - currentSafe <= currentLatest -} - -// UpdateBackendGroupConsensus resolves the current group consensus based on the state of the backends -func (cp *ConsensusPoller) UpdateBackendGroupConsensus(ctx context.Context) { - // get the latest block number from the tracker - currentConsensusBlockNumber := cp.GetLatestBlockNumber() - - // get the candidates for the consensus group - candidates := cp.getConsensusCandidates() - - // update the lowest latest block number and hash - // the lowest safe block number - // the lowest finalized block number - var lowestLatestBlock hexutil.Uint64 - var lowestLatestBlockHash string - var lowestFinalizedBlock hexutil.Uint64 - var lowestSafeBlock hexutil.Uint64 - for _, bs := range candidates { - if lowestLatestBlock == 0 || bs.latestBlockNumber < lowestLatestBlock { - lowestLatestBlock = bs.latestBlockNumber - lowestLatestBlockHash = bs.latestBlockHash - } - if lowestFinalizedBlock == 0 || bs.finalizedBlockNumber < lowestFinalizedBlock { - lowestFinalizedBlock = bs.finalizedBlockNumber - } - if lowestSafeBlock == 0 || bs.safeBlockNumber < lowestSafeBlock { - lowestSafeBlock = bs.safeBlockNumber - } - } - - // find the proposed block among the candidates - // the proposed block needs have the same hash in the entire consensus group - proposedBlock := lowestLatestBlock - proposedBlockHash := lowestLatestBlockHash - hasConsensus := false - broken := false - - if lowestLatestBlock > currentConsensusBlockNumber { - log.Debug("validating consensus on block", "lowestLatestBlock", lowestLatestBlock) - } - - // if there is a block to propose, check if it is the same in all backends - if proposedBlock > 0 { - for !hasConsensus { - allAgreed := true - for be := range candidates { - actualBlockNumber, actualBlockHash, err := cp.fetchBlock(ctx, be, proposedBlock.String()) - if err != nil { - log.Warn("error updating backend", "name", be.Name, "err", err) - continue - } - if proposedBlockHash == "" { - proposedBlockHash = actualBlockHash - } - blocksDontMatch := (actualBlockNumber != proposedBlock) || (actualBlockHash != proposedBlockHash) - if blocksDontMatch { - if currentConsensusBlockNumber >= actualBlockNumber { - log.Warn("backend broke consensus", - "name", be.Name, - "actualBlockNumber", actualBlockNumber, - "actualBlockHash", actualBlockHash, - "proposedBlock", proposedBlock, - "proposedBlockHash", proposedBlockHash) - broken = true - } - allAgreed = false - break - } - } - if allAgreed { - hasConsensus = true - } else { - // walk one block behind and try again - proposedBlock -= 1 - proposedBlockHash = "" - log.Debug("no consensus, now trying", "block:", proposedBlock) - } - } - } - - if broken { - // propagate event to other interested parts, such as cache invalidator - for _, l := range cp.listeners { - l() - } - log.Info("consensus broken", - "currentConsensusBlockNumber", currentConsensusBlockNumber, - "proposedBlock", proposedBlock, - "proposedBlockHash", proposedBlockHash) - } - - // update tracker - cp.tracker.SetLatestBlockNumber(proposedBlock) - cp.tracker.SetSafeBlockNumber(lowestSafeBlock) - cp.tracker.SetFinalizedBlockNumber(lowestFinalizedBlock) - - // update consensus group - group := make([]*Backend, 0, len(candidates)) - consensusBackendsNames := make([]string, 0, len(candidates)) - filteredBackendsNames := make([]string, 0, len(cp.backendGroup.Backends)) - for _, be := range cp.backendGroup.Backends { - _, exist := candidates[be] - if exist { - group = append(group, be) - consensusBackendsNames = append(consensusBackendsNames, be.Name) - } else { - filteredBackendsNames = append(filteredBackendsNames, be.Name) - } - } - - cp.consensusGroupMux.Lock() - cp.consensusGroup = group - cp.consensusGroupMux.Unlock() - - RecordGroupConsensusLatestBlock(cp.backendGroup, proposedBlock) - RecordGroupConsensusSafeBlock(cp.backendGroup, lowestSafeBlock) - RecordGroupConsensusFinalizedBlock(cp.backendGroup, lowestFinalizedBlock) - - RecordGroupConsensusCount(cp.backendGroup, len(group)) - RecordGroupConsensusFilteredCount(cp.backendGroup, len(filteredBackendsNames)) - RecordGroupTotalCount(cp.backendGroup, len(cp.backendGroup.Backends)) - - log.Debug("group state", - "proposedBlock", proposedBlock, - "consensusBackends", strings.Join(consensusBackendsNames, ", "), - "filteredBackends", strings.Join(filteredBackendsNames, ", ")) -} - -// IsBanned checks if a specific backend is banned -func (cp *ConsensusPoller) IsBanned(be *Backend) bool { - bs := cp.backendState[be] - defer bs.backendStateMux.Unlock() - bs.backendStateMux.Lock() - return bs.IsBanned() -} - -// Ban bans a specific backend -func (cp *ConsensusPoller) Ban(be *Backend) { - if be.forcedCandidate { - return - } - - bs := cp.backendState[be] - defer bs.backendStateMux.Unlock() - bs.backendStateMux.Lock() - bs.bannedUntil = time.Now().Add(cp.banPeriod) - - // when we ban a node, we give it the chance to start from any block when it is back - bs.latestBlockNumber = 0 - bs.safeBlockNumber = 0 - bs.finalizedBlockNumber = 0 -} - -// Unban removes any bans from the backends -func (cp *ConsensusPoller) Unban(be *Backend) { - bs := cp.backendState[be] - defer bs.backendStateMux.Unlock() - bs.backendStateMux.Lock() - bs.bannedUntil = time.Now().Add(-10 * time.Hour) -} - -// Reset reset all backend states -func (cp *ConsensusPoller) Reset() { - for _, be := range cp.backendGroup.Backends { - cp.backendState[be] = &backendState{} - } -} - -// fetchBlock is a convenient wrapper to make a request to get a block directly from the backend -func (cp *ConsensusPoller) fetchBlock(ctx context.Context, be *Backend, block string) (blockNumber hexutil.Uint64, blockHash string, err error) { - var rpcRes RPCRes - err = be.ForwardRPC(ctx, &rpcRes, "67", "eth_getBlockByNumber", block, false) - if err != nil { - return 0, "", err - } - - jsonMap, ok := rpcRes.Result.(map[string]interface{}) - if !ok { - return 0, "", fmt.Errorf("unexpected response to eth_getBlockByNumber on backend %s", be.Name) - } - blockNumber = hexutil.Uint64(hexutil.MustDecodeUint64(jsonMap["number"].(string))) - blockHash = jsonMap["hash"].(string) - - return -} - -// getPeerCount is a convenient wrapper to retrieve the current peer count from the backend -func (cp *ConsensusPoller) getPeerCount(ctx context.Context, be *Backend) (count uint64, err error) { - var rpcRes RPCRes - err = be.ForwardRPC(ctx, &rpcRes, "67", "net_peerCount") - if err != nil { - return 0, err - } - - jsonMap, ok := rpcRes.Result.(string) - if !ok { - return 0, fmt.Errorf("unexpected response to net_peerCount on backend %s", be.Name) - } - - count = hexutil.MustDecodeUint64(jsonMap) - - return count, nil -} - -// isInSync is a convenient wrapper to check if the backend is in sync from the network -func (cp *ConsensusPoller) isInSync(ctx context.Context, be *Backend) (result bool, err error) { - var rpcRes RPCRes - err = be.ForwardRPC(ctx, &rpcRes, "67", "eth_syncing") - if err != nil { - return false, err - } - - var res bool - switch typed := rpcRes.Result.(type) { - case bool: - syncing := typed - res = !syncing - case string: - syncing, err := strconv.ParseBool(typed) - if err != nil { - return false, err - } - res = !syncing - default: - // result is a json when not in sync - res = false - } - - return res, nil -} - -// getBackendState creates a copy of backend state so that the caller can use it without locking -func (cp *ConsensusPoller) getBackendState(be *Backend) *backendState { - bs := cp.backendState[be] - defer bs.backendStateMux.Unlock() - bs.backendStateMux.Lock() - - return &backendState{ - latestBlockNumber: bs.latestBlockNumber, - latestBlockHash: bs.latestBlockHash, - safeBlockNumber: bs.safeBlockNumber, - finalizedBlockNumber: bs.finalizedBlockNumber, - peerCount: bs.peerCount, - inSync: bs.inSync, - lastUpdate: bs.lastUpdate, - bannedUntil: bs.bannedUntil, - } -} - -func (cp *ConsensusPoller) GetLastUpdate(be *Backend) time.Time { - bs := cp.backendState[be] - defer bs.backendStateMux.Unlock() - bs.backendStateMux.Lock() - return bs.lastUpdate -} - -func (cp *ConsensusPoller) setBackendState(be *Backend, peerCount uint64, inSync bool, - latestBlockNumber hexutil.Uint64, latestBlockHash string, - safeBlockNumber hexutil.Uint64, - finalizedBlockNumber hexutil.Uint64) bool { - bs := cp.backendState[be] - bs.backendStateMux.Lock() - changed := bs.latestBlockHash != latestBlockHash - bs.peerCount = peerCount - bs.inSync = inSync - bs.latestBlockNumber = latestBlockNumber - bs.latestBlockHash = latestBlockHash - bs.finalizedBlockNumber = finalizedBlockNumber - bs.safeBlockNumber = safeBlockNumber - bs.lastUpdate = time.Now() - bs.backendStateMux.Unlock() - return changed -} - -// getConsensusCandidates will search for candidates in the primary group, -// if there are none it will search for candidates in he fallback group -func (cp *ConsensusPoller) getConsensusCandidates() map[*Backend]*backendState { - - healthyPrimaries := cp.FilterCandidates(cp.backendGroup.Primaries()) - - RecordHealthyCandidates(cp.backendGroup, len(healthyPrimaries)) - if len(healthyPrimaries) > 0 { - return healthyPrimaries - } - - return cp.FilterCandidates(cp.backendGroup.Fallbacks()) -} - -// filterCandidates find out what backends are the candidates to be in the consensus group -// and create a copy of current their state -// -// a candidate is a serving node within the following conditions: -// - not banned -// - healthy (network latency and error rate) -// - with minimum peer count -// - in sync -// - updated recently -// - not lagging latest block -func (cp *ConsensusPoller) FilterCandidates(backends []*Backend) map[*Backend]*backendState { - - candidates := make(map[*Backend]*backendState, len(cp.backendGroup.Backends)) - - for _, be := range backends { - - bs := cp.getBackendState(be) - if be.forcedCandidate { - candidates[be] = bs - continue - } - if bs.IsBanned() { - continue - } - if !be.IsHealthy() { - continue - } - if !be.skipPeerCountCheck && bs.peerCount < cp.minPeerCount { - log.Debug("backend peer count too low for inclusion in consensus", - "backend_name", be.Name, - "peer_count", bs.peerCount, - "min_peer_count", cp.minPeerCount, - ) - continue - } - if !bs.inSync { - continue - } - if bs.lastUpdate.Add(cp.maxUpdateThreshold).Before(time.Now()) { - continue - } - - candidates[be] = bs - } - - // find the highest block, in order to use it defining the highest non-lagging ancestor block - var highestLatestBlock hexutil.Uint64 - for _, bs := range candidates { - if bs.latestBlockNumber > highestLatestBlock { - highestLatestBlock = bs.latestBlockNumber - } - } - - // find the highest common ancestor block - lagging := make([]*Backend, 0, len(candidates)) - for be, bs := range candidates { - // check if backend is lagging behind the highest block - if uint64(highestLatestBlock-bs.latestBlockNumber) > cp.maxBlockLag { - lagging = append(lagging, be) - } - } - - // remove lagging backends from the candidates - for _, be := range lagging { - delete(candidates, be) - } - - return candidates -} diff --git a/proxyd/consensus_tracker.go b/proxyd/consensus_tracker.go deleted file mode 100644 index 77e0fdba9912..000000000000 --- a/proxyd/consensus_tracker.go +++ /dev/null @@ -1,356 +0,0 @@ -package proxyd - -import ( - "context" - "encoding/json" - "fmt" - "os" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/log" - "github.com/go-redsync/redsync/v4" - "github.com/go-redsync/redsync/v4/redis/goredis/v9" - "github.com/redis/go-redis/v9" -) - -// ConsensusTracker abstracts how we store and retrieve the current consensus -// allowing it to be stored locally in-memory or in a shared Redis cluster -type ConsensusTracker interface { - GetLatestBlockNumber() hexutil.Uint64 - SetLatestBlockNumber(blockNumber hexutil.Uint64) - GetSafeBlockNumber() hexutil.Uint64 - SetSafeBlockNumber(blockNumber hexutil.Uint64) - GetFinalizedBlockNumber() hexutil.Uint64 - SetFinalizedBlockNumber(blockNumber hexutil.Uint64) -} - -// DTO to hold the current consensus state -type ConsensusTrackerState struct { - Latest hexutil.Uint64 `json:"latest"` - Safe hexutil.Uint64 `json:"safe"` - Finalized hexutil.Uint64 `json:"finalized"` -} - -func (ct *InMemoryConsensusTracker) update(o *ConsensusTrackerState) { - ct.mutex.Lock() - defer ct.mutex.Unlock() - - ct.state.Latest = o.Latest - ct.state.Safe = o.Safe - ct.state.Finalized = o.Finalized -} - -// InMemoryConsensusTracker store and retrieve in memory, async-safe -type InMemoryConsensusTracker struct { - mutex sync.Mutex - state *ConsensusTrackerState -} - -func NewInMemoryConsensusTracker() ConsensusTracker { - return &InMemoryConsensusTracker{ - mutex: sync.Mutex{}, - state: &ConsensusTrackerState{}, - } -} - -func (ct *InMemoryConsensusTracker) Valid() bool { - return ct.GetLatestBlockNumber() > 0 && - ct.GetSafeBlockNumber() > 0 && - ct.GetFinalizedBlockNumber() > 0 -} - -func (ct *InMemoryConsensusTracker) Behind(other *InMemoryConsensusTracker) bool { - return ct.GetLatestBlockNumber() < other.GetLatestBlockNumber() || - ct.GetSafeBlockNumber() < other.GetSafeBlockNumber() || - ct.GetFinalizedBlockNumber() < other.GetFinalizedBlockNumber() -} - -func (ct *InMemoryConsensusTracker) GetLatestBlockNumber() hexutil.Uint64 { - defer ct.mutex.Unlock() - ct.mutex.Lock() - - return ct.state.Latest -} - -func (ct *InMemoryConsensusTracker) SetLatestBlockNumber(blockNumber hexutil.Uint64) { - defer ct.mutex.Unlock() - ct.mutex.Lock() - - ct.state.Latest = blockNumber -} - -func (ct *InMemoryConsensusTracker) GetSafeBlockNumber() hexutil.Uint64 { - defer ct.mutex.Unlock() - ct.mutex.Lock() - - return ct.state.Safe -} - -func (ct *InMemoryConsensusTracker) SetSafeBlockNumber(blockNumber hexutil.Uint64) { - defer ct.mutex.Unlock() - ct.mutex.Lock() - - ct.state.Safe = blockNumber -} - -func (ct *InMemoryConsensusTracker) GetFinalizedBlockNumber() hexutil.Uint64 { - defer ct.mutex.Unlock() - ct.mutex.Lock() - - return ct.state.Finalized -} - -func (ct *InMemoryConsensusTracker) SetFinalizedBlockNumber(blockNumber hexutil.Uint64) { - defer ct.mutex.Unlock() - ct.mutex.Lock() - - ct.state.Finalized = blockNumber -} - -// RedisConsensusTracker store and retrieve in a shared Redis cluster, with leader election -type RedisConsensusTracker struct { - ctx context.Context - client *redis.Client - namespace string - backendGroup *BackendGroup - - redlock *redsync.Mutex - lockPeriod time.Duration - heartbeatInterval time.Duration - - leader bool - leaderName string - - // holds the state collected by local pollers - local *InMemoryConsensusTracker - - // holds a copy of the remote shared state - // when leader, updates the remote with the local state - remote *InMemoryConsensusTracker -} - -type RedisConsensusTrackerOpt func(cp *RedisConsensusTracker) - -func WithLockPeriod(lockPeriod time.Duration) RedisConsensusTrackerOpt { - return func(ct *RedisConsensusTracker) { - ct.lockPeriod = lockPeriod - } -} - -func WithHeartbeatInterval(heartbeatInterval time.Duration) RedisConsensusTrackerOpt { - return func(ct *RedisConsensusTracker) { - ct.heartbeatInterval = heartbeatInterval - } -} -func NewRedisConsensusTracker(ctx context.Context, - redisClient *redis.Client, - bg *BackendGroup, - namespace string, - opts ...RedisConsensusTrackerOpt) ConsensusTracker { - - tracker := &RedisConsensusTracker{ - ctx: ctx, - client: redisClient, - backendGroup: bg, - namespace: namespace, - - lockPeriod: 30 * time.Second, - heartbeatInterval: 2 * time.Second, - local: NewInMemoryConsensusTracker().(*InMemoryConsensusTracker), - remote: NewInMemoryConsensusTracker().(*InMemoryConsensusTracker), - } - - for _, opt := range opts { - opt(tracker) - } - - return tracker -} - -func (ct *RedisConsensusTracker) Init() { - go func() { - for { - timer := time.NewTimer(ct.heartbeatInterval) - ct.stateHeartbeat() - - select { - case <-timer.C: - continue - case <-ct.ctx.Done(): - timer.Stop() - return - } - } - }() -} - -func (ct *RedisConsensusTracker) stateHeartbeat() { - pool := goredis.NewPool(ct.client) - rs := redsync.New(pool) - key := ct.key("mutex") - - val, err := ct.client.Get(ct.ctx, key).Result() - if err != nil && err != redis.Nil { - log.Error("failed to read the lock", "err", err) - RecordGroupConsensusError(ct.backendGroup, "read_lock", err) - if ct.leader { - ok, err := ct.redlock.Unlock() - if err != nil || !ok { - log.Error("failed to release the lock after error", "err", err) - RecordGroupConsensusError(ct.backendGroup, "leader_release_lock", err) - return - } - ct.leader = false - } - return - } - if val != "" { - if ct.leader { - log.Debug("extending lock") - ok, err := ct.redlock.Extend() - if err != nil || !ok { - log.Error("failed to extend lock", "err", err, "mutex", ct.redlock.Name(), "val", ct.redlock.Value()) - RecordGroupConsensusError(ct.backendGroup, "leader_extend_lock", err) - ok, err := ct.redlock.Unlock() - if err != nil || !ok { - log.Error("failed to release the lock after error", "err", err) - RecordGroupConsensusError(ct.backendGroup, "leader_release_lock", err) - return - } - ct.leader = false - return - } - ct.postPayload(val) - } else { - // retrieve current leader - leaderName, err := ct.client.Get(ct.ctx, ct.key(fmt.Sprintf("leader:%s", val))).Result() - if err != nil && err != redis.Nil { - log.Error("failed to read the remote leader", "err", err) - RecordGroupConsensusError(ct.backendGroup, "read_leader", err) - return - } - ct.leaderName = leaderName - log.Debug("following", "val", val, "leader", leaderName) - // retrieve payload - val, err := ct.client.Get(ct.ctx, ct.key(fmt.Sprintf("state:%s", val))).Result() - if err != nil && err != redis.Nil { - log.Error("failed to read the remote state", "err", err) - RecordGroupConsensusError(ct.backendGroup, "read_state", err) - return - } - if val == "" { - log.Error("remote state is missing (recent leader election maybe?)") - RecordGroupConsensusError(ct.backendGroup, "read_state_missing", err) - return - } - state := &ConsensusTrackerState{} - err = json.Unmarshal([]byte(val), state) - if err != nil { - log.Error("failed to unmarshal the remote state", "err", err) - RecordGroupConsensusError(ct.backendGroup, "read_unmarshal_state", err) - return - } - - ct.remote.update(state) - log.Debug("updated state from remote", "state", val, "leader", leaderName) - - RecordGroupConsensusHALatestBlock(ct.backendGroup, leaderName, ct.remote.state.Latest) - RecordGroupConsensusHASafeBlock(ct.backendGroup, leaderName, ct.remote.state.Safe) - RecordGroupConsensusHAFinalizedBlock(ct.backendGroup, leaderName, ct.remote.state.Finalized) - } - } else { - if !ct.local.Valid() { - log.Warn("local state is not valid or behind remote, skipping") - return - } - if ct.remote.Valid() && ct.local.Behind(ct.remote) { - log.Warn("local state is behind remote, skipping") - return - } - - log.Info("lock not found, creating a new one") - - mutex := rs.NewMutex(key, - redsync.WithExpiry(ct.lockPeriod), - redsync.WithFailFast(true), - redsync.WithTries(1)) - - // nosemgrep: missing-unlock-before-return - // this lock is hold indefinitely, and it is extended until the leader dies - if err := mutex.Lock(); err != nil { - log.Debug("failed to obtain lock", "err", err) - ct.leader = false - return - } - - log.Info("lock acquired", "mutex", mutex.Name(), "val", mutex.Value()) - ct.redlock = mutex - ct.leader = true - ct.postPayload(mutex.Value()) - } -} - -func (ct *RedisConsensusTracker) key(tag string) string { - return fmt.Sprintf("consensus:%s:%s", ct.namespace, tag) -} - -func (ct *RedisConsensusTracker) GetLatestBlockNumber() hexutil.Uint64 { - return ct.remote.GetLatestBlockNumber() -} - -func (ct *RedisConsensusTracker) SetLatestBlockNumber(blockNumber hexutil.Uint64) { - ct.local.SetLatestBlockNumber(blockNumber) -} - -func (ct *RedisConsensusTracker) GetSafeBlockNumber() hexutil.Uint64 { - return ct.remote.GetSafeBlockNumber() -} - -func (ct *RedisConsensusTracker) SetSafeBlockNumber(blockNumber hexutil.Uint64) { - ct.local.SetSafeBlockNumber(blockNumber) -} - -func (ct *RedisConsensusTracker) GetFinalizedBlockNumber() hexutil.Uint64 { - return ct.remote.GetFinalizedBlockNumber() -} - -func (ct *RedisConsensusTracker) SetFinalizedBlockNumber(blockNumber hexutil.Uint64) { - ct.local.SetFinalizedBlockNumber(blockNumber) -} - -func (ct *RedisConsensusTracker) postPayload(mutexVal string) { - jsonState, err := json.Marshal(ct.local.state) - if err != nil { - log.Error("failed to marshal local", "err", err) - RecordGroupConsensusError(ct.backendGroup, "leader_marshal_local_state", err) - ct.leader = false - return - } - err = ct.client.Set(ct.ctx, ct.key(fmt.Sprintf("state:%s", mutexVal)), jsonState, ct.lockPeriod).Err() - if err != nil { - log.Error("failed to post the state", "err", err) - RecordGroupConsensusError(ct.backendGroup, "leader_post_state", err) - ct.leader = false - return - } - - leader, _ := os.LookupEnv("HOSTNAME") - err = ct.client.Set(ct.ctx, ct.key(fmt.Sprintf("leader:%s", mutexVal)), leader, ct.lockPeriod).Err() - if err != nil { - log.Error("failed to post the leader", "err", err) - RecordGroupConsensusError(ct.backendGroup, "leader_post_leader", err) - ct.leader = false - return - } - - log.Debug("posted state", "state", string(jsonState), "leader", leader) - - ct.leaderName = leader - ct.remote.update(ct.local.state) - - RecordGroupConsensusHALatestBlock(ct.backendGroup, leader, ct.remote.state.Latest) - RecordGroupConsensusHASafeBlock(ct.backendGroup, leader, ct.remote.state.Safe) - RecordGroupConsensusHAFinalizedBlock(ct.backendGroup, leader, ct.remote.state.Finalized) -} diff --git a/proxyd/entrypoint.sh b/proxyd/entrypoint.sh deleted file mode 100644 index ef83fa8e47d4..000000000000 --- a/proxyd/entrypoint.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -echo "Updating CA certificates." -update-ca-certificates -echo "Running CMD." -exec "$@" \ No newline at end of file diff --git a/proxyd/errors.go b/proxyd/errors.go deleted file mode 100644 index 51f8df6ddebb..000000000000 --- a/proxyd/errors.go +++ /dev/null @@ -1,7 +0,0 @@ -package proxyd - -import "fmt" - -func wrapErr(err error, msg string) error { - return fmt.Errorf("%s %w", msg, err) -} diff --git a/proxyd/example.config.toml b/proxyd/example.config.toml deleted file mode 100644 index b54b342f5189..000000000000 --- a/proxyd/example.config.toml +++ /dev/null @@ -1,123 +0,0 @@ -# List of WS methods to whitelist. -ws_method_whitelist = [ - "eth_subscribe", - "eth_call", - "eth_chainId" -] -# Enable WS on this backend group. There can only be one WS-enabled backend group. -ws_backend_group = "main" - -[server] -# Host for the proxyd RPC server to listen on. -rpc_host = "0.0.0.0" -# Port for the above. -rpc_port = 8080 -# Host for the proxyd WS server to listen on. -ws_host = "0.0.0.0" -# Port for the above -# Set the ws_port to 0 to disable WS -ws_port = 8085 -# Maximum client body size, in bytes, that the server will accept. -max_body_size_bytes = 10485760 -max_concurrent_rpcs = 1000 -# Server log level -log_level = "info" - -[redis] -# URL to a Redis instance. -url = "redis://localhost:6379" - -[metrics] -# Whether or not to enable Prometheus metrics. -enabled = true -# Host for the Prometheus metrics endpoint to listen on. -host = "0.0.0.0" -# Port for the above. -port = 9761 - -[backend] -# How long proxyd should wait for a backend response before timing out. -response_timeout_seconds = 5 -# Maximum response size, in bytes, that proxyd will accept from a backend. -max_response_size_bytes = 5242880 -# Maximum number of times proxyd will try a backend before giving up. -max_retries = 3 -# Number of seconds to wait before trying an unhealthy backend again. -out_of_service_seconds = 600 -# Maximum latency accepted to serve requests, default 10s -max_latency_threshold = "30s" -# Maximum latency accepted to serve requests before degraded, default 5s -max_degraded_latency_threshold = "10s" -# Maximum error rate accepted to serve requests, default 0.5 (i.e. 50%) -max_error_rate_threshold = 0.3 - -[backends] -# A map of backends by name. -[backends.infura] -# The URL to contact the backend at. Will be read from the environment -# if an environment variable prefixed with $ is provided. -rpc_url = "" -# The WS URL to contact the backend at. Will be read from the environment -# if an environment variable prefixed with $ is provided. -ws_url = "" -username = "" -# An HTTP Basic password to authenticate with the backend. Will be read from -# the environment if an environment variable prefixed with $ is provided. -password = "" -max_rps = 3 -max_ws_conns = 1 -# Path to a custom root CA. -ca_file = "" -# Path to a custom client cert file. -client_cert_file = "" -# Path to a custom client key file. -client_key_file = "" -# Allows backends to skip peer count checking, default false -# consensus_skip_peer_count = true -# Specified the target method to get receipts, default "debug_getRawReceipts" -# See https://github.com/ethereum-optimism/optimism/blob/186e46a47647a51a658e699e9ff047d39444c2de/op-node/sources/receipts.go#L186-L253 -consensus_receipts_target = "eth_getBlockReceipts" - -[backends.alchemy] -rpc_url = "" -ws_url = "" -username = "" -password = "" -max_rps = 3 -max_ws_conns = 1 -consensus_receipts_target = "alchemy_getTransactionReceipts" - -[backend_groups] -[backend_groups.main] -backends = ["infura"] -# Enable consensus awareness for backend group, making it act as a load balancer, default false -# consensus_aware = true -# Period in which the backend wont serve requests if banned, default 5m -# consensus_ban_period = "1m" -# Maximum delay for update the backend, default 30s -# consensus_max_update_threshold = "20s" -# Maximum block lag, default 8 -# consensus_max_block_lag = 16 -# Maximum block range (for eth_getLogs method), no default -# consensus_max_block_range = 20000 -# Minimum peer count, default 3 -# consensus_min_peer_count = 4 - -[backend_groups.alchemy] -backends = ["alchemy"] - -# If the authentication group below is in the config, -# proxyd will only accept authenticated requests. -[authentication] -# Mapping of auth key to alias. The alias is used to provide a human- -# readable name for the auth key in monitoring. The auth key will be -# read from the environment if an environment variable prefixed with $ -# is provided. Note that you will need to quote the environment variable -# in order for it to be value TOML, e.g. "$FOO_AUTH_KEY" = "foo_alias". -secret = "test" - -# Mapping of methods to backend groups. -[rpc_method_mappings] -eth_call = "main" -eth_chainId = "main" -eth_blockNumber = "alchemy" diff --git a/proxyd/frontend_rate_limiter.go b/proxyd/frontend_rate_limiter.go deleted file mode 100644 index d0590f0561da..000000000000 --- a/proxyd/frontend_rate_limiter.go +++ /dev/null @@ -1,139 +0,0 @@ -package proxyd - -import ( - "context" - "fmt" - "sync" - "time" - - "github.com/redis/go-redis/v9" -) - -type FrontendRateLimiter interface { - // Take consumes a key, and a maximum number of requests - // per time interval. It returns a boolean denoting if - // the limit could be taken, or an error if a failure - // occurred in the backing rate limit implementation. - // - // No error will be returned if the limit could not be taken - // as a result of the requestor being over the limit. - Take(ctx context.Context, key string) (bool, error) -} - -// limitedKeys is a wrapper around a map that stores a truncated -// timestamp and a mutex. The map is used to keep track of rate -// limit keys, and their used limits. -type limitedKeys struct { - truncTS int64 - keys map[string]int - mtx sync.Mutex -} - -func newLimitedKeys(t int64) *limitedKeys { - return &limitedKeys{ - truncTS: t, - keys: make(map[string]int), - } -} - -func (l *limitedKeys) Take(key string, max int) bool { - l.mtx.Lock() - defer l.mtx.Unlock() - val, ok := l.keys[key] - if !ok { - l.keys[key] = 0 - val = 0 - } - l.keys[key] = val + 1 - return val < max -} - -// MemoryFrontendRateLimiter is a rate limiter that stores -// all rate limiting information in local memory. It works -// by storing a limitedKeys struct that references the -// truncated timestamp at which the struct was created. If -// the current truncated timestamp doesn't match what's -// referenced, the limit is reset. Otherwise, values in -// a map are incremented to represent the limit. -type MemoryFrontendRateLimiter struct { - currGeneration *limitedKeys - dur time.Duration - max int - mtx sync.Mutex -} - -func NewMemoryFrontendRateLimit(dur time.Duration, max int) FrontendRateLimiter { - return &MemoryFrontendRateLimiter{ - dur: dur, - max: max, - } -} - -func (m *MemoryFrontendRateLimiter) Take(ctx context.Context, key string) (bool, error) { - m.mtx.Lock() - // Create truncated timestamp - truncTS := truncateNow(m.dur) - - // If there is no current rate limit map or the rate limit map reference - // a different timestamp, reset limits. - if m.currGeneration == nil || m.currGeneration.truncTS != truncTS { - m.currGeneration = newLimitedKeys(truncTS) - } - - // Pull out the limiter so we can unlock before incrementing the limit. - limiter := m.currGeneration - - m.mtx.Unlock() - - return limiter.Take(key, m.max), nil -} - -// RedisFrontendRateLimiter is a rate limiter that stores data in Redis. -// It uses the basic rate limiter pattern described on the Redis best -// practices website: https://redis.com/redis-best-practices/basic-rate-limiting/. -type RedisFrontendRateLimiter struct { - r *redis.Client - dur time.Duration - max int - prefix string -} - -func NewRedisFrontendRateLimiter(r *redis.Client, dur time.Duration, max int, prefix string) FrontendRateLimiter { - return &RedisFrontendRateLimiter{ - r: r, - dur: dur, - max: max, - prefix: prefix, - } -} - -func (r *RedisFrontendRateLimiter) Take(ctx context.Context, key string) (bool, error) { - var incr *redis.IntCmd - truncTS := truncateNow(r.dur) - fullKey := fmt.Sprintf("rate_limit:%s:%s:%d", r.prefix, key, truncTS) - _, err := r.r.Pipelined(ctx, func(pipe redis.Pipeliner) error { - incr = pipe.Incr(ctx, fullKey) - pipe.PExpire(ctx, fullKey, r.dur-time.Millisecond) - return nil - }) - if err != nil { - frontendRateLimitTakeErrors.Inc() - return false, err - } - - return incr.Val()-1 < int64(r.max), nil -} - -type noopFrontendRateLimiter struct{} - -var NoopFrontendRateLimiter = &noopFrontendRateLimiter{} - -func (n *noopFrontendRateLimiter) Take(ctx context.Context, key string) (bool, error) { - return true, nil -} - -// truncateNow truncates the current timestamp -// to the specified duration. -func truncateNow(dur time.Duration) int64 { - return time.Now().Truncate(dur).Unix() -} diff --git a/proxyd/frontend_rate_limiter_test.go b/proxyd/frontend_rate_limiter_test.go deleted file mode 100644 index fb5f808bb5ec..000000000000 --- a/proxyd/frontend_rate_limiter_test.go +++ /dev/null @@ -1,53 +0,0 @@ -package proxyd - -import ( - "context" - "fmt" - "testing" - "time" - - "github.com/alicebob/miniredis" - "github.com/redis/go-redis/v9" - "github.com/stretchr/testify/require" -) - -func TestFrontendRateLimiter(t *testing.T) { - redisServer, err := miniredis.Run() - require.NoError(t, err) - defer redisServer.Close() - - redisClient := redis.NewClient(&redis.Options{ - Addr: fmt.Sprintf("127.0.0.1:%s", redisServer.Port()), - }) - - max := 2 - lims := []struct { - name string - frl FrontendRateLimiter - }{ - {"memory", NewMemoryFrontendRateLimit(2*time.Second, max)}, - {"redis", NewRedisFrontendRateLimiter(redisClient, 2*time.Second, max, "")}, - } - - for _, cfg := range lims { - frl := cfg.frl - ctx := context.Background() - t.Run(cfg.name, func(t *testing.T) { - for i := 0; i < 4; i++ { - ok, err := frl.Take(ctx, "foo") - require.NoError(t, err) - require.Equal(t, i < max, ok) - ok, err = frl.Take(ctx, "bar") - require.NoError(t, err) - require.Equal(t, i < max, ok) - } - time.Sleep(2 * time.Second) - for i := 0; i < 4; i++ { - ok, _ := frl.Take(ctx, "foo") - require.Equal(t, i < max, ok) - ok, _ = frl.Take(ctx, "bar") - require.Equal(t, i < max, ok) - } - }) - } -} diff --git a/proxyd/go.mod b/proxyd/go.mod deleted file mode 100644 index 088bf9bc9ed3..000000000000 --- a/proxyd/go.mod +++ /dev/null @@ -1,86 +0,0 @@ -module github.com/ethereum-optimism/optimism/proxyd - -go 1.21 - -require ( - github.com/BurntSushi/toml v1.3.2 - github.com/alicebob/miniredis v2.5.0+incompatible - github.com/emirpasic/gods v1.18.1 - github.com/ethereum/go-ethereum v1.13.15 - github.com/go-redsync/redsync/v4 v4.10.0 - github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb - github.com/gorilla/mux v1.8.0 - github.com/gorilla/websocket v1.5.0 - github.com/hashicorp/golang-lru v1.0.2 - github.com/pkg/errors v0.9.1 - github.com/prometheus/client_golang v1.17.0 - github.com/redis/go-redis/v9 v9.2.1 - github.com/rs/cors v1.10.1 - github.com/stretchr/testify v1.8.4 - github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 - github.com/xaionaro-go/weightedshuffle v0.0.0-20211213010739-6a74fbc7d24a - golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa - golang.org/x/sync v0.5.0 - gopkg.in/yaml.v3 v3.0.1 -) - -require ( - github.com/DataDog/zstd v1.5.5 // indirect - github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/VictoriaMetrics/fastcache v1.12.1 // indirect - github.com/alicebob/gopher-json v0.0.0-20230218143504-906a9b012302 // indirect - github.com/beorn7/perks v1.0.1 // indirect - github.com/bits-and-blooms/bitset v1.10.0 // indirect - github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/cockroachdb/errors v1.11.1 // indirect - github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect - github.com/cockroachdb/pebble v0.0.0-20231020221949-babd592d2360 // indirect - github.com/cockroachdb/redact v1.1.5 // indirect - github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/consensys/bavard v0.1.13 // indirect - github.com/consensys/gnark-crypto v0.12.1 // indirect - github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 // indirect - github.com/crate-crypto/go-kzg-4844 v0.7.0 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/deckarep/golang-set/v2 v2.3.1 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect - github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/ethereum/c-kzg-4844 v0.4.0 // indirect - github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 // indirect - github.com/getsentry/sentry-go v0.25.0 // indirect - github.com/go-ole/go-ole v1.3.0 // indirect - github.com/gofrs/flock v0.8.1 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/gomodule/redigo v1.8.9 // indirect - github.com/hashicorp/errwrap v1.1.0 // indirect - github.com/hashicorp/go-multierror v1.1.1 // indirect - github.com/holiman/bloomfilter/v2 v2.0.3 // indirect - github.com/holiman/uint256 v1.2.4 // indirect - github.com/klauspost/compress v1.17.1 // indirect - github.com/kr/pretty v0.3.1 // indirect - github.com/kr/text v0.2.0 // indirect - github.com/mattn/go-runewidth v0.0.15 // indirect - github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect - github.com/mmcloughlin/addchain v0.4.0 // indirect - github.com/olekukonko/tablewriter v0.0.5 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_model v0.5.0 // indirect - github.com/prometheus/common v0.45.0 // indirect - github.com/prometheus/procfs v0.12.0 // indirect - github.com/rivo/uniseg v0.4.4 // indirect - github.com/rogpeppe/go-internal v1.11.0 // indirect - github.com/shirou/gopsutil v3.21.11+incompatible // indirect - github.com/supranational/blst v0.3.11 // indirect - github.com/tklauser/go-sysconf v0.3.12 // indirect - github.com/tklauser/numcpus v0.6.1 // indirect - github.com/yuin/gopher-lua v1.1.0 // indirect - github.com/yusufpapurcu/wmi v1.2.3 // indirect - golang.org/x/crypto v0.17.0 // indirect - golang.org/x/mod v0.14.0 // indirect - golang.org/x/sys v0.16.0 // indirect - golang.org/x/text v0.14.0 // indirect - golang.org/x/tools v0.15.0 // indirect - google.golang.org/protobuf v1.33.0 // indirect - rsc.io/tmplfunc v0.0.3 // indirect -) diff --git a/proxyd/go.sum b/proxyd/go.sum deleted file mode 100644 index 11a684f0e398..000000000000 --- a/proxyd/go.sum +++ /dev/null @@ -1,290 +0,0 @@ -github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= -github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= -github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= -github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= -github.com/alicebob/gopher-json v0.0.0-20230218143504-906a9b012302 h1:uvdUDbHQHO85qeSydJtItA4T55Pw6BtAejd0APRJOCE= -github.com/alicebob/gopher-json v0.0.0-20230218143504-906a9b012302/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc= -github.com/alicebob/miniredis v2.5.0+incompatible h1:yBHoLpsyjupjz3NL3MhKMVkR41j82Yjf3KFv7ApYzUI= -github.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk= -github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= -github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bits-and-blooms/bitset v1.10.0 h1:ePXTeiPEazB5+opbv5fr8umg2R/1NlzgDsyepwsSr88= -github.com/bits-and-blooms/bitset v1.10.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= -github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= -github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= -github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= -github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= -github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= -github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= -github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v0.0.0-20231020221949-babd592d2360 h1:x1dzGu9e1FYmkG8mL9emtdWD1EzH/17SijnoLvKvPiM= -github.com/cockroachdb/pebble v0.0.0-20231020221949-babd592d2360/go.mod h1:sEHm5NOXxyiAoKWhoFxT8xMgd/f3RA6qUqQ1BXKrh2E= -github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= -github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= -github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= -github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= -github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= -github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= -github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 h1:d28BXYi+wUpz1KBmiF9bWrjEMacUEREV6MBi2ODnrfQ= -github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= -github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA= -github.com/crate-crypto/go-kzg-4844 v0.7.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckarep/golang-set/v2 v2.3.1 h1:vjmkvJt/IV27WXPyYQpAh4bRyWJc5Y435D17XQ9QU5A= -github.com/deckarep/golang-set/v2 v2.3.1/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= -github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= -github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= -github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= -github.com/ethereum/c-kzg-4844 v0.4.0 h1:3MS1s4JtA868KpJxroZoepdV0ZKBp3u/O5HcZ7R3nlY= -github.com/ethereum/c-kzg-4844 v0.4.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= -github.com/ethereum/go-ethereum v1.13.15 h1:U7sSGYGo4SPjP6iNIifNoyIAiNjrmQkz6EwQG+/EZWo= -github.com/ethereum/go-ethereum v1.13.15/go.mod h1:TN8ZiHrdJwSe8Cb6x+p0hs5CxhJZPbqB7hHkaUXcmIU= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 h1:BAIP2GihuqhwdILrV+7GJel5lyPV3u1+PgzrWLc0TkE= -github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46/go.mod h1:QNpY22eby74jVhqH4WhDLDwxc/vqsern6pW+u2kbkpc= -github.com/getsentry/sentry-go v0.25.0 h1:q6Eo+hS+yoJlTO3uu/azhQadsD8V+jQn2D8VvX1eOyI= -github.com/getsentry/sentry-go v0.25.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= -github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= -github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= -github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= -github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg= -github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= -github.com/go-redis/redis/v7 v7.4.0 h1:7obg6wUoj05T0EpY0o8B59S9w5yeMWql7sw2kwNW1x4= -github.com/go-redis/redis/v7 v7.4.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= -github.com/go-redis/redis/v8 v8.11.4 h1:kHoYkfZP6+pe04aFTnhDH6GDROa5yJdHJVNxV3F46Tg= -github.com/go-redis/redis/v8 v8.11.4/go.mod h1:2Z2wHZXdQpCDXEGzqMockDpNyYvi2l4Pxt6RJr792+w= -github.com/go-redsync/redsync/v4 v4.10.0 h1:hTeAak4C73mNBQSTq6KCKDFaiIlfC+z5yTTl8fCJuBs= -github.com/go-redsync/redsync/v4 v4.10.0/go.mod h1:ZfayzutkgeBmEmBlUR3j+rF6kN44UUGtEdfzhBFZTPc= -github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= -github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= -github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/gomodule/redigo v1.8.9 h1:Sl3u+2BI/kk+VEatbj0scLdrFhjPmbxOc1myhDP41ws= -github.com/gomodule/redigo v1.8.9/go.mod h1:7ArFNvsTjH8GMMzB4uy1snslv2BwmginuMs06a1uzZE= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= -github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= -github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= -github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU= -github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.17.1 h1:NE3C767s2ak2bweCZo3+rdP4U/HoyVXLv/X9f2gPS5g= -github.com/klauspost/compress v1.17.1/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= -github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= -github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= -github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= -github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= -github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= -github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= -github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= -github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= -github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= -github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= -github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= -github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= -github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= -github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= -github.com/redis/go-redis/v9 v9.2.1 h1:WlYJg71ODF0dVspZZCpYmoF1+U1Jjk9Rwd7pq6QmlCg= -github.com/redis/go-redis/v9 v9.2.1/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M= -github.com/redis/rueidis v1.0.19 h1:s65oWtotzlIFN8eMPhyYwxlwLR1lUdhza2KtWprKYSo= -github.com/redis/rueidis v1.0.19/go.mod h1:8B+r5wdnjwK3lTFml5VtxjzGOQAC+5UmujoD12pDrEo= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= -github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= -github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= -github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo= -github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= -github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stvp/tempredis v0.0.0-20181119212430-b82af8480203 h1:QVqDTf3h2WHt08YuiTGPZLls0Wq99X9bWd0Q5ZSBesM= -github.com/stvp/tempredis v0.0.0-20181119212430-b82af8480203/go.mod h1:oqN97ltKNihBbwlX8dLpwxCl3+HnXKV/R0e+sRLd9C8= -github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= -github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= -github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= -github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= -github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= -github.com/xaionaro-go/weightedshuffle v0.0.0-20211213010739-6a74fbc7d24a h1:WS5nQycV+82Ndezq0UcMcGVG416PZgcJPqI/bLM824A= -github.com/xaionaro-go/weightedshuffle v0.0.0-20211213010739-6a74fbc7d24a/go.mod h1:0KAUfC65le2kMu4fnBxm7Xj3PkQ3MBpJbF5oMmqufBc= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/gopher-lua v1.1.0 h1:BojcDhfyDWgU2f2TOzYK/g5p2gxMrku8oupLDqlnSqE= -github.com/yuin/gopher-lua v1.1.0/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw= -github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= -github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg= -golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= -golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8= -golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= -rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= diff --git a/proxyd/integration_tests/batch_timeout_test.go b/proxyd/integration_tests/batch_timeout_test.go deleted file mode 100644 index 4906c1d07e66..000000000000 --- a/proxyd/integration_tests/batch_timeout_test.go +++ /dev/null @@ -1,42 +0,0 @@ -package integration_tests - -import ( - "net/http" - "os" - "testing" - "time" - - "github.com/ethereum-optimism/optimism/proxyd" - "github.com/stretchr/testify/require" -) - -const ( - batchTimeoutResponse = `{"error":{"code":-32015,"message":"gateway timeout"},"id":null,"jsonrpc":"2.0"}` -) - -func TestBatchTimeout(t *testing.T) { - slowBackend := NewMockBackend(nil) - defer slowBackend.Close() - - require.NoError(t, os.Setenv("SLOW_BACKEND_RPC_URL", slowBackend.URL())) - - config := ReadConfig("batch_timeout") - client := NewProxydClient("http://127.0.0.1:8545") - _, shutdown, err := proxyd.Start(config) - require.NoError(t, err) - defer shutdown() - - slowBackend.SetHandler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - // check the config. The sleep duration should be at least double the server.timeout_seconds config to prevent flakes - time.Sleep(time.Second * 2) - BatchedResponseHandler(200, goodResponse)(w, r) - })) - res, statusCode, err := client.SendBatchRPC( - NewRPCReq("1", "eth_chainId", nil), - NewRPCReq("1", "eth_chainId", nil), - ) - require.NoError(t, err) - require.Equal(t, 504, statusCode) - RequireEqualJSON(t, []byte(batchTimeoutResponse), res) - require.Equal(t, 1, len(slowBackend.Requests())) -} diff --git a/proxyd/integration_tests/batching_test.go b/proxyd/integration_tests/batching_test.go deleted file mode 100644 index c1f8b386d09a..000000000000 --- a/proxyd/integration_tests/batching_test.go +++ /dev/null @@ -1,188 +0,0 @@ -package integration_tests - -import ( - "net/http" - "os" - "testing" - - "github.com/ethereum-optimism/optimism/proxyd" - "github.com/stretchr/testify/require" -) - -func TestBatching(t *testing.T) { - config := ReadConfig("batching") - - chainIDResponse1 := `{"jsonrpc": "2.0", "result": "hello1", "id": 1}` - chainIDResponse2 := `{"jsonrpc": "2.0", "result": "hello2", "id": 2}` - chainIDResponse3 := `{"jsonrpc": "2.0", "result": "hello3", "id": 3}` - netVersionResponse1 := `{"jsonrpc": "2.0", "result": "1.0", "id": 1}` - callResponse1 := `{"jsonrpc": "2.0", "result": "ekans1", "id": 1}` - - ethAccountsResponse2 := `{"jsonrpc": "2.0", "result": [], "id": 2}` - - backendResTooLargeResponse1 := `{"error":{"code":-32020,"message":"backend response too large"},"id":1,"jsonrpc":"2.0"}` - backendResTooLargeResponse2 := `{"error":{"code":-32020,"message":"backend response too large"},"id":2,"jsonrpc":"2.0"}` - - type mockResult struct { - method string - id string - result interface{} - } - - chainIDMock1 := mockResult{"eth_chainId", "1", "hello1"} - chainIDMock2 := mockResult{"eth_chainId", "2", "hello2"} - chainIDMock3 := mockResult{"eth_chainId", "3", "hello3"} - netVersionMock1 := mockResult{"net_version", "1", "1.0"} - callMock1 := mockResult{"eth_call", "1", "ekans1"} - - tests := []struct { - name string - handler http.Handler - mocks []mockResult - reqs []*proxyd.RPCReq - expectedRes string - maxUpstreamBatchSize int - numExpectedForwards int - maxResponseSizeBytes int64 - }{ - { - name: "backend returns batches out of order", - mocks: []mockResult{chainIDMock1, chainIDMock2, chainIDMock3}, - reqs: []*proxyd.RPCReq{ - NewRPCReq("1", "eth_chainId", nil), - NewRPCReq("2", "eth_chainId", nil), - NewRPCReq("3", "eth_chainId", nil), - }, - expectedRes: asArray(chainIDResponse1, chainIDResponse2, chainIDResponse3), - maxUpstreamBatchSize: 2, - numExpectedForwards: 2, - }, - { - // infura behavior - name: "backend returns single RPC response object as error", - handler: SingleResponseHandler(500, `{"jsonrpc":"2.0","error":{"code":-32001,"message":"internal server error"},"id":1}`), - reqs: []*proxyd.RPCReq{ - NewRPCReq("1", "eth_chainId", nil), - NewRPCReq("2", "eth_chainId", nil), - }, - expectedRes: asArray( - `{"error":{"code":-32011,"message":"no backends available for method"},"id":1,"jsonrpc":"2.0"}`, - `{"error":{"code":-32011,"message":"no backends available for method"},"id":2,"jsonrpc":"2.0"}`, - ), - maxUpstreamBatchSize: 10, - numExpectedForwards: 1, - }, - { - name: "backend returns single RPC response object for minibatches", - handler: SingleResponseHandler(500, `{"jsonrpc":"2.0","error":{"code":-32001,"message":"internal server error"},"id":1}`), - reqs: []*proxyd.RPCReq{ - NewRPCReq("1", "eth_chainId", nil), - NewRPCReq("2", "eth_chainId", nil), - }, - expectedRes: asArray( - `{"error":{"code":-32011,"message":"no backends available for method"},"id":1,"jsonrpc":"2.0"}`, - `{"error":{"code":-32011,"message":"no backends available for method"},"id":2,"jsonrpc":"2.0"}`, - ), - maxUpstreamBatchSize: 1, - numExpectedForwards: 2, - }, - { - name: "duplicate request ids are on distinct batches", - mocks: []mockResult{ - netVersionMock1, - chainIDMock2, - chainIDMock1, - callMock1, - }, - reqs: []*proxyd.RPCReq{ - NewRPCReq("1", "net_version", nil), - NewRPCReq("2", "eth_chainId", nil), - NewRPCReq("1", "eth_chainId", nil), - NewRPCReq("1", "eth_call", nil), - }, - expectedRes: asArray(netVersionResponse1, chainIDResponse2, chainIDResponse1, callResponse1), - maxUpstreamBatchSize: 2, - numExpectedForwards: 3, - }, - { - name: "over max size", - mocks: []mockResult{}, - reqs: []*proxyd.RPCReq{ - NewRPCReq("1", "net_version", nil), - NewRPCReq("2", "eth_chainId", nil), - NewRPCReq("3", "eth_chainId", nil), - NewRPCReq("4", "eth_call", nil), - NewRPCReq("5", "eth_call", nil), - NewRPCReq("6", "eth_call", nil), - }, - expectedRes: "{\"error\":{\"code\":-32014,\"message\":\"over batch size custom message\"},\"id\":null,\"jsonrpc\":\"2.0\"}", - maxUpstreamBatchSize: 2, - numExpectedForwards: 0, - }, - { - name: "eth_accounts does not get forwarded", - mocks: []mockResult{ - callMock1, - }, - reqs: []*proxyd.RPCReq{ - NewRPCReq("1", "eth_call", nil), - NewRPCReq("2", "eth_accounts", nil), - }, - expectedRes: asArray(callResponse1, ethAccountsResponse2), - maxUpstreamBatchSize: 2, - numExpectedForwards: 1, - }, - { - name: "large upstream response gets dropped", - mocks: []mockResult{chainIDMock1, chainIDMock2}, - reqs: []*proxyd.RPCReq{ - NewRPCReq("1", "eth_chainId", nil), - NewRPCReq("2", "eth_chainId", nil), - }, - expectedRes: asArray(backendResTooLargeResponse1, backendResTooLargeResponse2), - maxUpstreamBatchSize: 2, - numExpectedForwards: 1, - maxResponseSizeBytes: 1, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - config.Server.MaxUpstreamBatchSize = tt.maxUpstreamBatchSize - config.BackendOptions.MaxResponseSizeBytes = tt.maxResponseSizeBytes - - handler := tt.handler - if handler == nil { - router := NewBatchRPCResponseRouter() - for _, mock := range tt.mocks { - router.SetRoute(mock.method, mock.id, mock.result) - } - handler = router - } - - goodBackend := NewMockBackend(handler) - defer goodBackend.Close() - require.NoError(t, os.Setenv("GOOD_BACKEND_RPC_URL", goodBackend.URL())) - - client := NewProxydClient("http://127.0.0.1:8545") - _, shutdown, err := proxyd.Start(config) - require.NoError(t, err) - defer shutdown() - - res, statusCode, err := client.SendBatchRPC(tt.reqs...) - require.NoError(t, err) - require.Equal(t, http.StatusOK, statusCode) - RequireEqualJSON(t, []byte(tt.expectedRes), res) - - if tt.numExpectedForwards != 0 { - require.Equal(t, tt.numExpectedForwards, len(goodBackend.Requests())) - } - - if handler, ok := handler.(*BatchRPCResponseRouter); ok { - for i, mock := range tt.mocks { - require.Equal(t, 1, handler.GetNumCalls(mock.method, mock.id), i) - } - } - }) - } -} diff --git a/proxyd/integration_tests/caching_test.go b/proxyd/integration_tests/caching_test.go deleted file mode 100644 index e74b85b4a7bf..000000000000 --- a/proxyd/integration_tests/caching_test.go +++ /dev/null @@ -1,275 +0,0 @@ -package integration_tests - -import ( - "bytes" - "fmt" - "os" - "testing" - "time" - - "github.com/alicebob/miniredis" - "github.com/ethereum-optimism/optimism/proxyd" - "github.com/stretchr/testify/require" -) - -func TestCaching(t *testing.T) { - redis, err := miniredis.Run() - require.NoError(t, err) - defer redis.Close() - - hdlr := NewBatchRPCResponseRouter() - /* cacheable */ - hdlr.SetRoute("eth_chainId", "999", "0x420") - hdlr.SetRoute("net_version", "999", "0x1234") - hdlr.SetRoute("eth_getBlockTransactionCountByHash", "999", "eth_getBlockTransactionCountByHash") - hdlr.SetRoute("eth_getBlockByHash", "999", "eth_getBlockByHash") - hdlr.SetRoute("eth_getTransactionByHash", "999", "eth_getTransactionByHash") - hdlr.SetRoute("eth_getTransactionByBlockHashAndIndex", "999", "eth_getTransactionByBlockHashAndIndex") - hdlr.SetRoute("eth_getUncleByBlockHashAndIndex", "999", "eth_getUncleByBlockHashAndIndex") - hdlr.SetRoute("eth_getTransactionReceipt", "999", "eth_getTransactionReceipt") - hdlr.SetRoute("debug_getRawReceipts", "999", "debug_getRawReceipts") - /* not cacheable */ - hdlr.SetRoute("eth_getBlockByNumber", "999", "eth_getBlockByNumber") - hdlr.SetRoute("eth_blockNumber", "999", "eth_blockNumber") - hdlr.SetRoute("eth_call", "999", "eth_call") - - backend := NewMockBackend(hdlr) - defer backend.Close() - - require.NoError(t, os.Setenv("GOOD_BACKEND_RPC_URL", backend.URL())) - require.NoError(t, os.Setenv("REDIS_URL", fmt.Sprintf("redis://127.0.0.1:%s", redis.Port()))) - config := ReadConfig("caching") - client := NewProxydClient("http://127.0.0.1:8545") - _, shutdown, err := proxyd.Start(config) - require.NoError(t, err) - defer shutdown() - - // allow time for the block number fetcher to fire - time.Sleep(1500 * time.Millisecond) - - tests := []struct { - method string - params []interface{} - response string - backendCalls int - }{ - /* cacheable */ - { - "eth_chainId", - nil, - "{\"jsonrpc\": \"2.0\", \"result\": \"0x420\", \"id\": 999}", - 1, - }, - { - "net_version", - nil, - "{\"jsonrpc\": \"2.0\", \"result\": \"0x1234\", \"id\": 999}", - 1, - }, - { - "eth_getBlockTransactionCountByHash", - []interface{}{"0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"}, - "{\"jsonrpc\": \"2.0\", \"result\": \"eth_getBlockTransactionCountByHash\", \"id\": 999}", - 1, - }, - { - "eth_getBlockByHash", - []interface{}{"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", "false"}, - "{\"jsonrpc\": \"2.0\", \"result\": \"eth_getBlockByHash\", \"id\": 999}", - 1, - }, - { - "eth_getTransactionByBlockHashAndIndex", - []interface{}{"0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", "0x55"}, - "{\"jsonrpc\": \"2.0\", \"result\": \"eth_getTransactionByBlockHashAndIndex\", \"id\": 999}", - 1, - }, - { - "eth_getUncleByBlockHashAndIndex", - []interface{}{"0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238", "0x90"}, - "{\"jsonrpc\": \"2.0\", \"result\": \"eth_getUncleByBlockHashAndIndex\", \"id\": 999}", - 1, - }, - /* not cacheable */ - { - "eth_getBlockByNumber", - []interface{}{ - "0x1", - true, - }, - "{\"jsonrpc\": \"2.0\", \"result\": \"eth_getBlockByNumber\", \"id\": 999}", - 2, - }, - { - "eth_getTransactionReceipt", - []interface{}{"0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"}, - "{\"jsonrpc\": \"2.0\", \"result\": \"eth_getTransactionReceipt\", \"id\": 999}", - 2, - }, - { - "eth_getTransactionByHash", - []interface{}{"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"}, - "{\"jsonrpc\": \"2.0\", \"result\": \"eth_getTransactionByHash\", \"id\": 999}", - 2, - }, - { - "eth_call", - []interface{}{ - struct { - To string `json:"to"` - }{ - "0x1234", - }, - "0x60", - }, - "{\"jsonrpc\": \"2.0\", \"result\": \"eth_call\", \"id\": 999}", - 2, - }, - { - "eth_blockNumber", - nil, - "{\"jsonrpc\": \"2.0\", \"result\": \"eth_blockNumber\", \"id\": 999}", - 2, - }, - { - "eth_call", - []interface{}{ - struct { - To string `json:"to"` - }{ - "0x1234", - }, - "latest", - }, - "{\"jsonrpc\": \"2.0\", \"result\": \"eth_call\", \"id\": 999}", - 2, - }, - { - "eth_call", - []interface{}{ - struct { - To string `json:"to"` - }{ - "0x1234", - }, - "pending", - }, - "{\"jsonrpc\": \"2.0\", \"result\": \"eth_call\", \"id\": 999}", - 2, - }, - } - for _, tt := range tests { - t.Run(tt.method, func(t *testing.T) { - resRaw, _, err := client.SendRPC(tt.method, tt.params) - require.NoError(t, err) - resCache, _, err := client.SendRPC(tt.method, tt.params) - require.NoError(t, err) - RequireEqualJSON(t, []byte(tt.response), resCache) - RequireEqualJSON(t, resRaw, resCache) - require.Equal(t, tt.backendCalls, countRequests(backend, tt.method)) - backend.Reset() - }) - } - - t.Run("nil responses should not be cached", func(t *testing.T) { - hdlr.SetRoute("eth_getBlockByHash", "999", nil) - resRaw, _, err := client.SendRPC("eth_getBlockByHash", []interface{}{"0x123"}) - require.NoError(t, err) - resCache, _, err := client.SendRPC("eth_getBlockByHash", []interface{}{"0x123"}) - require.NoError(t, err) - RequireEqualJSON(t, []byte("{\"id\":999,\"jsonrpc\":\"2.0\",\"result\":null}"), resRaw) - RequireEqualJSON(t, resRaw, resCache) - require.Equal(t, 2, countRequests(backend, "eth_getBlockByHash")) - }) - - t.Run("debug_getRawReceipts with 0 receipts should not be cached", func(t *testing.T) { - backend.Reset() - hdlr.SetRoute("debug_getRawReceipts", "999", []string{}) - resRaw, _, err := client.SendRPC("debug_getRawReceipts", []interface{}{"0x88420081ab9c6d50dc57af36b541c6b8a7b3e9c0d837b0414512c4c5883560ff"}) - require.NoError(t, err) - resCache, _, err := client.SendRPC("debug_getRawReceipts", []interface{}{"0x88420081ab9c6d50dc57af36b541c6b8a7b3e9c0d837b0414512c4c5883560ff"}) - require.NoError(t, err) - RequireEqualJSON(t, []byte("{\"id\":999,\"jsonrpc\":\"2.0\",\"result\":[]}"), resRaw) - RequireEqualJSON(t, resRaw, resCache) - require.Equal(t, 2, countRequests(backend, "debug_getRawReceipts")) - }) - - t.Run("debug_getRawReceipts with more than 0 receipts should be cached", func(t *testing.T) { - backend.Reset() - hdlr.SetRoute("debug_getRawReceipts", "999", []string{"a"}) - resRaw, _, err := client.SendRPC("debug_getRawReceipts", []interface{}{"0x88420081ab9c6d50dc57af36b541c6b8a7b3e9c0d837b0414512c4c5883560bb"}) - require.NoError(t, err) - resCache, _, err := client.SendRPC("debug_getRawReceipts", []interface{}{"0x88420081ab9c6d50dc57af36b541c6b8a7b3e9c0d837b0414512c4c5883560bb"}) - require.NoError(t, err) - RequireEqualJSON(t, []byte("{\"id\":999,\"jsonrpc\":\"2.0\",\"result\":[\"a\"]}"), resRaw) - RequireEqualJSON(t, resRaw, resCache) - require.Equal(t, 1, countRequests(backend, "debug_getRawReceipts")) - }) -} - -func TestBatchCaching(t *testing.T) { - redis, err := miniredis.Run() - require.NoError(t, err) - defer redis.Close() - - hdlr := NewBatchRPCResponseRouter() - hdlr.SetRoute("eth_chainId", "1", "0x420") - hdlr.SetRoute("net_version", "1", "0x1234") - hdlr.SetRoute("eth_call", "1", "dummy_call") - hdlr.SetRoute("eth_getBlockByHash", "1", "eth_getBlockByHash") - - backend := NewMockBackend(hdlr) - defer backend.Close() - - require.NoError(t, os.Setenv("GOOD_BACKEND_RPC_URL", backend.URL())) - require.NoError(t, os.Setenv("REDIS_URL", fmt.Sprintf("redis://127.0.0.1:%s", redis.Port()))) - - config := ReadConfig("caching") - client := NewProxydClient("http://127.0.0.1:8545") - _, shutdown, err := proxyd.Start(config) - require.NoError(t, err) - defer shutdown() - - // allow time for the block number fetcher to fire - time.Sleep(1500 * time.Millisecond) - - goodChainIdResponse := "{\"jsonrpc\": \"2.0\", \"result\": \"0x420\", \"id\": 1}" - goodNetVersionResponse := "{\"jsonrpc\": \"2.0\", \"result\": \"0x1234\", \"id\": 1}" - goodEthCallResponse := "{\"jsonrpc\": \"2.0\", \"result\": \"dummy_call\", \"id\": 1}" - goodEthGetBlockByHash := "{\"jsonrpc\": \"2.0\", \"result\": \"eth_getBlockByHash\", \"id\": 1}" - - res, _, err := client.SendBatchRPC( - NewRPCReq("1", "eth_chainId", nil), - NewRPCReq("1", "net_version", nil), - NewRPCReq("1", "eth_getBlockByHash", []interface{}{"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", "false"}), - ) - require.NoError(t, err) - RequireEqualJSON(t, []byte(asArray(goodChainIdResponse, goodNetVersionResponse, goodEthGetBlockByHash)), res) - require.Equal(t, 1, countRequests(backend, "eth_chainId")) - require.Equal(t, 1, countRequests(backend, "net_version")) - require.Equal(t, 1, countRequests(backend, "eth_getBlockByHash")) - - backend.Reset() - res, _, err = client.SendBatchRPC( - NewRPCReq("1", "eth_chainId", nil), - NewRPCReq("1", "eth_call", []interface{}{`{"to":"0x1234"}`, "pending"}), - NewRPCReq("1", "net_version", nil), - NewRPCReq("1", "eth_getBlockByHash", []interface{}{"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", "false"}), - ) - require.NoError(t, err) - RequireEqualJSON(t, []byte(asArray(goodChainIdResponse, goodEthCallResponse, goodNetVersionResponse, goodEthGetBlockByHash)), res) - require.Equal(t, 0, countRequests(backend, "eth_chainId")) - require.Equal(t, 0, countRequests(backend, "net_version")) - require.Equal(t, 0, countRequests(backend, "eth_getBlockByHash")) - require.Equal(t, 1, countRequests(backend, "eth_call")) -} - -func countRequests(backend *MockBackend, name string) int { - var count int - for _, req := range backend.Requests() { - if bytes.Contains(req.Body, []byte(name)) { - count++ - } - } - return count -} diff --git a/proxyd/integration_tests/consensus_test.go b/proxyd/integration_tests/consensus_test.go deleted file mode 100644 index 654b7a58c177..000000000000 --- a/proxyd/integration_tests/consensus_test.go +++ /dev/null @@ -1,1005 +0,0 @@ -package integration_tests - -import ( - "context" - "encoding/json" - "fmt" - "net/http" - "os" - "path" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common/hexutil" - - "github.com/ethereum-optimism/optimism/proxyd" - ms "github.com/ethereum-optimism/optimism/proxyd/tools/mockserver/handler" - "github.com/stretchr/testify/require" -) - -type nodeContext struct { - backend *proxyd.Backend // this is the actual backend impl in proxyd - mockBackend *MockBackend // this is the fake backend that we can use to mock responses - handler *ms.MockedHandler // this is where we control the state of mocked responses -} - -func setup(t *testing.T) (map[string]nodeContext, *proxyd.BackendGroup, *ProxydHTTPClient, func()) { - // setup mock servers - node1 := NewMockBackend(nil) - node2 := NewMockBackend(nil) - - dir, err := os.Getwd() - require.NoError(t, err) - - responses := path.Join(dir, "testdata/consensus_responses.yml") - - h1 := ms.MockedHandler{ - Overrides: []*ms.MethodTemplate{}, - Autoload: true, - AutoloadFile: responses, - } - h2 := ms.MockedHandler{ - Overrides: []*ms.MethodTemplate{}, - Autoload: true, - AutoloadFile: responses, - } - - require.NoError(t, os.Setenv("NODE1_URL", node1.URL())) - require.NoError(t, os.Setenv("NODE2_URL", node2.URL())) - - node1.SetHandler(http.HandlerFunc(h1.Handler)) - node2.SetHandler(http.HandlerFunc(h2.Handler)) - - // setup proxyd - config := ReadConfig("consensus") - svr, shutdown, err := proxyd.Start(config) - require.NoError(t, err) - - // expose the proxyd client - client := NewProxydClient("http://127.0.0.1:8545") - - // expose the backend group - bg := svr.BackendGroups["node"] - require.NotNil(t, bg) - require.NotNil(t, bg.Consensus) - require.Equal(t, 2, len(bg.Backends)) // should match config - - // convenient mapping to access the nodes by name - nodes := map[string]nodeContext{ - "node1": { - mockBackend: node1, - backend: bg.Backends[0], - handler: &h1, - }, - "node2": { - mockBackend: node2, - backend: bg.Backends[1], - handler: &h2, - }, - } - - return nodes, bg, client, shutdown -} - -func TestConsensus(t *testing.T) { - nodes, bg, client, shutdown := setup(t) - defer nodes["node1"].mockBackend.Close() - defer nodes["node2"].mockBackend.Close() - defer shutdown() - - ctx := context.Background() - - // poll for updated consensus - update := func() { - for _, be := range bg.Backends { - bg.Consensus.UpdateBackend(ctx, be) - } - bg.Consensus.UpdateBackendGroupConsensus(ctx) - } - - // convenient methods to manipulate state and mock responses - reset := func() { - for _, node := range nodes { - node.handler.ResetOverrides() - node.mockBackend.Reset() - } - bg.Consensus.ClearListeners() - bg.Consensus.Reset() - } - - override := func(node string, method string, block string, response string) { - if _, ok := nodes[node]; !ok { - t.Fatalf("node %s does not exist in the nodes map", node) - } - nodes[node].handler.AddOverride(&ms.MethodTemplate{ - Method: method, - Block: block, - Response: response, - }) - } - - overrideBlock := func(node string, blockRequest string, blockResponse string) { - override(node, - "eth_getBlockByNumber", - blockRequest, - buildResponse(map[string]string{ - "number": blockResponse, - "hash": "hash_" + blockResponse, - })) - } - - overrideBlockHash := func(node string, blockRequest string, number string, hash string) { - override(node, - "eth_getBlockByNumber", - blockRequest, - buildResponse(map[string]string{ - "number": number, - "hash": hash, - })) - } - - overridePeerCount := func(node string, count int) { - override(node, "net_peerCount", "", buildResponse(hexutil.Uint64(count).String())) - } - - overrideNotInSync := func(node string) { - override(node, "eth_syncing", "", buildResponse(map[string]string{ - "startingblock": "0x0", - "currentblock": "0x0", - "highestblock": "0x100", - })) - } - - // force ban node2 and make sure node1 is the only one in consensus - useOnlyNode1 := func() { - overridePeerCount("node2", 0) - update() - - consensusGroup := bg.Consensus.GetConsensusGroup() - require.Equal(t, 1, len(consensusGroup)) - require.Contains(t, consensusGroup, nodes["node1"].backend) - nodes["node1"].mockBackend.Reset() - } - - t.Run("initial consensus", func(t *testing.T) { - reset() - - // unknown consensus at init - require.Equal(t, "0x0", bg.Consensus.GetLatestBlockNumber().String()) - - // first poll - update() - - // as a default we use: - // - latest at 0x101 [257] - // - safe at 0xe1 [225] - // - finalized at 0xc1 [193] - - // consensus at block 0x101 - require.Equal(t, "0x101", bg.Consensus.GetLatestBlockNumber().String()) - require.Equal(t, "0xe1", bg.Consensus.GetSafeBlockNumber().String()) - require.Equal(t, "0xc1", bg.Consensus.GetFinalizedBlockNumber().String()) - }) - - t.Run("prevent using a backend with low peer count", func(t *testing.T) { - reset() - overridePeerCount("node1", 0) - update() - - consensusGroup := bg.Consensus.GetConsensusGroup() - require.NotContains(t, consensusGroup, nodes["node1"].backend) - require.False(t, bg.Consensus.IsBanned(nodes["node1"].backend)) - require.Equal(t, 1, len(consensusGroup)) - }) - - t.Run("prevent using a backend lagging behind", func(t *testing.T) { - reset() - // node2 is 8+1 blocks ahead of node1 (0x101 + 8+1 = 0x10a) - overrideBlock("node2", "latest", "0x10a") - update() - - // since we ignored node1, the consensus should be at 0x10a - require.Equal(t, "0x10a", bg.Consensus.GetLatestBlockNumber().String()) - require.Equal(t, "0xe1", bg.Consensus.GetSafeBlockNumber().String()) - require.Equal(t, "0xc1", bg.Consensus.GetFinalizedBlockNumber().String()) - - consensusGroup := bg.Consensus.GetConsensusGroup() - require.NotContains(t, consensusGroup, nodes["node1"].backend) - require.False(t, bg.Consensus.IsBanned(nodes["node1"].backend)) - require.Equal(t, 1, len(consensusGroup)) - }) - - t.Run("prevent using a backend lagging behind - one before limit", func(t *testing.T) { - reset() - // node2 is 8 blocks ahead of node1 (0x101 + 8 = 0x109) - overrideBlock("node2", "latest", "0x109") - update() - - // both nodes are in consensus with the lowest block - require.Equal(t, "0x101", bg.Consensus.GetLatestBlockNumber().String()) - require.Equal(t, "0xe1", bg.Consensus.GetSafeBlockNumber().String()) - require.Equal(t, "0xc1", bg.Consensus.GetFinalizedBlockNumber().String()) - require.Equal(t, 2, len(bg.Consensus.GetConsensusGroup())) - }) - - t.Run("prevent using a backend not in sync", func(t *testing.T) { - reset() - // make node1 not in sync - overrideNotInSync("node1") - update() - - consensusGroup := bg.Consensus.GetConsensusGroup() - require.NotContains(t, consensusGroup, nodes["node1"].backend) - require.False(t, bg.Consensus.IsBanned(nodes["node1"].backend)) - require.Equal(t, 1, len(consensusGroup)) - }) - - t.Run("advance consensus", func(t *testing.T) { - reset() - - // as a default we use: - // - latest at 0x101 [257] - // - safe at 0xe1 [225] - // - finalized at 0xc1 [193] - - update() - - // all nodes start at block 0x101 - require.Equal(t, "0x101", bg.Consensus.GetLatestBlockNumber().String()) - - // advance latest on node2 to 0x102 - overrideBlock("node2", "latest", "0x102") - - update() - - // consensus should stick to 0x101, since node1 is still lagging there - bg.Consensus.UpdateBackendGroupConsensus(ctx) - require.Equal(t, "0x101", bg.Consensus.GetLatestBlockNumber().String()) - - // advance latest on node1 to 0x102 - overrideBlock("node1", "latest", "0x102") - - update() - - // all nodes now at 0x102 - require.Equal(t, "0x102", bg.Consensus.GetLatestBlockNumber().String()) - }) - - t.Run("should use lowest safe and finalized", func(t *testing.T) { - reset() - overrideBlock("node2", "finalized", "0xc2") - overrideBlock("node2", "safe", "0xe2") - update() - - require.Equal(t, "0xe1", bg.Consensus.GetSafeBlockNumber().String()) - require.Equal(t, "0xc1", bg.Consensus.GetFinalizedBlockNumber().String()) - }) - - t.Run("advance safe and finalized", func(t *testing.T) { - reset() - overrideBlock("node1", "finalized", "0xc2") - overrideBlock("node1", "safe", "0xe2") - overrideBlock("node2", "finalized", "0xc2") - overrideBlock("node2", "safe", "0xe2") - update() - - require.Equal(t, "0xe2", bg.Consensus.GetSafeBlockNumber().String()) - require.Equal(t, "0xc2", bg.Consensus.GetFinalizedBlockNumber().String()) - }) - - t.Run("ban backend if error rate is too high", func(t *testing.T) { - reset() - useOnlyNode1() - - // replace node1 handler with one that always returns 500 - oldHandler := nodes["node1"].mockBackend.handler - defer func() { nodes["node1"].mockBackend.handler = oldHandler }() - - nodes["node1"].mockBackend.SetHandler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(503) - })) - - numberReqs := 10 - for numberReqs > 0 { - _, statusCode, err := client.SendRPC("eth_getBlockByNumber", []interface{}{"0x101", false}) - require.NoError(t, err) - require.Equal(t, 503, statusCode) - numberReqs-- - } - - update() - - consensusGroup := bg.Consensus.GetConsensusGroup() - require.NotContains(t, consensusGroup, nodes["node1"].backend) - require.True(t, bg.Consensus.IsBanned(nodes["node1"].backend)) - require.Equal(t, 0, len(consensusGroup)) - }) - - t.Run("ban backend if tags are messed - safe < finalized", func(t *testing.T) { - reset() - overrideBlock("node1", "finalized", "0xb1") - overrideBlock("node1", "safe", "0xa1") - update() - - require.Equal(t, "0xe1", bg.Consensus.GetSafeBlockNumber().String()) - require.Equal(t, "0xc1", bg.Consensus.GetFinalizedBlockNumber().String()) - - consensusGroup := bg.Consensus.GetConsensusGroup() - require.NotContains(t, consensusGroup, nodes["node1"].backend) - require.True(t, bg.Consensus.IsBanned(nodes["node1"].backend)) - require.Equal(t, 1, len(consensusGroup)) - }) - - t.Run("ban backend if tags are messed - latest < safe", func(t *testing.T) { - reset() - overrideBlock("node1", "safe", "0xb1") - overrideBlock("node1", "latest", "0xa1") - update() - - require.Equal(t, "0x101", bg.Consensus.GetLatestBlockNumber().String()) - require.Equal(t, "0xc1", bg.Consensus.GetFinalizedBlockNumber().String()) - require.Equal(t, "0xe1", bg.Consensus.GetSafeBlockNumber().String()) - - consensusGroup := bg.Consensus.GetConsensusGroup() - require.NotContains(t, consensusGroup, nodes["node1"].backend) - require.True(t, bg.Consensus.IsBanned(nodes["node1"].backend)) - require.Equal(t, 1, len(consensusGroup)) - }) - - t.Run("ban backend if tags are messed - safe dropped", func(t *testing.T) { - reset() - update() - overrideBlock("node1", "safe", "0xb1") - update() - - require.Equal(t, "0x101", bg.Consensus.GetLatestBlockNumber().String()) - require.Equal(t, "0xe1", bg.Consensus.GetSafeBlockNumber().String()) - require.Equal(t, "0xc1", bg.Consensus.GetFinalizedBlockNumber().String()) - - consensusGroup := bg.Consensus.GetConsensusGroup() - require.NotContains(t, consensusGroup, nodes["node1"].backend) - require.True(t, bg.Consensus.IsBanned(nodes["node1"].backend)) - require.Equal(t, 1, len(consensusGroup)) - }) - - t.Run("ban backend if tags are messed - finalized dropped", func(t *testing.T) { - reset() - update() - overrideBlock("node1", "finalized", "0xa1") - update() - - require.Equal(t, "0x101", bg.Consensus.GetLatestBlockNumber().String()) - require.Equal(t, "0xe1", bg.Consensus.GetSafeBlockNumber().String()) - require.Equal(t, "0xc1", bg.Consensus.GetFinalizedBlockNumber().String()) - - consensusGroup := bg.Consensus.GetConsensusGroup() - require.NotContains(t, consensusGroup, nodes["node1"].backend) - require.True(t, bg.Consensus.IsBanned(nodes["node1"].backend)) - require.Equal(t, 1, len(consensusGroup)) - }) - - t.Run("recover after safe and finalized dropped", func(t *testing.T) { - reset() - useOnlyNode1() - overrideBlock("node1", "latest", "0xd1") - overrideBlock("node1", "safe", "0xb1") - overrideBlock("node1", "finalized", "0x91") - update() - - consensusGroup := bg.Consensus.GetConsensusGroup() - require.NotContains(t, consensusGroup, nodes["node1"].backend) - require.True(t, bg.Consensus.IsBanned(nodes["node1"].backend)) - require.Equal(t, 0, len(consensusGroup)) - - // unban and see if it recovers - bg.Consensus.Unban(nodes["node1"].backend) - update() - - consensusGroup = bg.Consensus.GetConsensusGroup() - require.Contains(t, consensusGroup, nodes["node1"].backend) - require.False(t, bg.Consensus.IsBanned(nodes["node1"].backend)) - require.Equal(t, 1, len(consensusGroup)) - - require.Equal(t, "0xd1", bg.Consensus.GetLatestBlockNumber().String()) - require.Equal(t, "0xb1", bg.Consensus.GetSafeBlockNumber().String()) - require.Equal(t, "0x91", bg.Consensus.GetFinalizedBlockNumber().String()) - }) - - t.Run("latest dropped below safe, then recovered", func(t *testing.T) { - reset() - useOnlyNode1() - overrideBlock("node1", "latest", "0xd1") - update() - - consensusGroup := bg.Consensus.GetConsensusGroup() - require.NotContains(t, consensusGroup, nodes["node1"].backend) - require.True(t, bg.Consensus.IsBanned(nodes["node1"].backend)) - require.Equal(t, 0, len(consensusGroup)) - - // unban and see if it recovers - bg.Consensus.Unban(nodes["node1"].backend) - overrideBlock("node1", "safe", "0xb1") - overrideBlock("node1", "finalized", "0x91") - update() - - consensusGroup = bg.Consensus.GetConsensusGroup() - require.Contains(t, consensusGroup, nodes["node1"].backend) - require.False(t, bg.Consensus.IsBanned(nodes["node1"].backend)) - require.Equal(t, 1, len(consensusGroup)) - - require.Equal(t, "0xd1", bg.Consensus.GetLatestBlockNumber().String()) - require.Equal(t, "0xb1", bg.Consensus.GetSafeBlockNumber().String()) - require.Equal(t, "0x91", bg.Consensus.GetFinalizedBlockNumber().String()) - }) - - t.Run("latest dropped below safe, and stayed inconsistent", func(t *testing.T) { - reset() - useOnlyNode1() - overrideBlock("node1", "latest", "0xd1") - update() - - consensusGroup := bg.Consensus.GetConsensusGroup() - require.NotContains(t, consensusGroup, nodes["node1"].backend) - require.True(t, bg.Consensus.IsBanned(nodes["node1"].backend)) - require.Equal(t, 0, len(consensusGroup)) - - // unban and see if it recovers - it should not since the blocks stays the same - bg.Consensus.Unban(nodes["node1"].backend) - update() - - // should be banned again - consensusGroup = bg.Consensus.GetConsensusGroup() - require.NotContains(t, consensusGroup, nodes["node1"].backend) - require.True(t, bg.Consensus.IsBanned(nodes["node1"].backend)) - require.Equal(t, 0, len(consensusGroup)) - }) - - t.Run("broken consensus", func(t *testing.T) { - reset() - listenerCalled := false - bg.Consensus.AddListener(func() { - listenerCalled = true - }) - update() - - // all nodes start at block 0x101 - require.Equal(t, "0x101", bg.Consensus.GetLatestBlockNumber().String()) - - // advance latest on both nodes to 0x102 - overrideBlock("node1", "latest", "0x102") - overrideBlock("node2", "latest", "0x102") - - update() - - // at 0x102 - require.Equal(t, "0x102", bg.Consensus.GetLatestBlockNumber().String()) - - // make node2 diverge on hash - overrideBlockHash("node2", "0x102", "0x102", "wrong_hash") - - update() - - // should resolve to 0x101, since 0x102 is out of consensus at the moment - require.Equal(t, "0x101", bg.Consensus.GetLatestBlockNumber().String()) - - // everybody serving traffic - consensusGroup := bg.Consensus.GetConsensusGroup() - require.Equal(t, 2, len(consensusGroup)) - require.False(t, bg.Consensus.IsBanned(nodes["node1"].backend)) - require.False(t, bg.Consensus.IsBanned(nodes["node2"].backend)) - - // onConsensusBroken listener was called - require.True(t, listenerCalled) - }) - - t.Run("broken consensus with depth 2", func(t *testing.T) { - reset() - listenerCalled := false - bg.Consensus.AddListener(func() { - listenerCalled = true - }) - update() - - // all nodes start at block 0x101 - require.Equal(t, "0x101", bg.Consensus.GetLatestBlockNumber().String()) - - // advance latest on both nodes to 0x102 - overrideBlock("node1", "latest", "0x102") - overrideBlock("node2", "latest", "0x102") - - update() - - // at 0x102 - require.Equal(t, "0x102", bg.Consensus.GetLatestBlockNumber().String()) - - // advance latest on both nodes to 0x3 - overrideBlock("node1", "latest", "0x103") - overrideBlock("node2", "latest", "0x103") - - update() - - // at 0x103 - require.Equal(t, "0x103", bg.Consensus.GetLatestBlockNumber().String()) - - // make node2 diverge on hash for blocks 0x102 and 0x103 - overrideBlockHash("node2", "0x102", "0x102", "wrong_hash_0x102") - overrideBlockHash("node2", "0x103", "0x103", "wrong_hash_0x103") - - update() - - // should resolve to 0x101 - require.Equal(t, "0x101", bg.Consensus.GetLatestBlockNumber().String()) - - // everybody serving traffic - consensusGroup := bg.Consensus.GetConsensusGroup() - require.Equal(t, 2, len(consensusGroup)) - require.False(t, bg.Consensus.IsBanned(nodes["node1"].backend)) - require.False(t, bg.Consensus.IsBanned(nodes["node2"].backend)) - - // onConsensusBroken listener was called - require.True(t, listenerCalled) - }) - - t.Run("fork in advanced block", func(t *testing.T) { - reset() - listenerCalled := false - bg.Consensus.AddListener(func() { - listenerCalled = true - }) - update() - - // all nodes start at block 0x101 - require.Equal(t, "0x101", bg.Consensus.GetLatestBlockNumber().String()) - - // make nodes 1 and 2 advance in forks, i.e. they have same block number with different hashes - overrideBlockHash("node1", "0x102", "0x102", "node1_0x102") - overrideBlockHash("node2", "0x102", "0x102", "node2_0x102") - overrideBlockHash("node1", "0x103", "0x103", "node1_0x103") - overrideBlockHash("node2", "0x103", "0x103", "node2_0x103") - overrideBlockHash("node1", "latest", "0x103", "node1_0x103") - overrideBlockHash("node2", "latest", "0x103", "node2_0x103") - - update() - - // should resolve to 0x101, the highest common ancestor - require.Equal(t, "0x101", bg.Consensus.GetLatestBlockNumber().String()) - - // everybody serving traffic - consensusGroup := bg.Consensus.GetConsensusGroup() - require.Equal(t, 2, len(consensusGroup)) - require.False(t, bg.Consensus.IsBanned(nodes["node1"].backend)) - require.False(t, bg.Consensus.IsBanned(nodes["node2"].backend)) - - // onConsensusBroken listener should not be called - require.False(t, listenerCalled) - }) - - t.Run("load balancing should hit both backends", func(t *testing.T) { - reset() - update() - - require.Equal(t, 2, len(bg.Consensus.GetConsensusGroup())) - - // reset request counts - nodes["node1"].mockBackend.Reset() - nodes["node2"].mockBackend.Reset() - - require.Equal(t, 0, len(nodes["node1"].mockBackend.Requests())) - require.Equal(t, 0, len(nodes["node2"].mockBackend.Requests())) - - // there is a random component to this test, - // since our round-robin implementation shuffles the ordering - // to achieve uniform distribution - - // so we just make 100 requests per backend and expect the number of requests to be somewhat balanced - // i.e. each backend should be hit minimally by at least 50% of the requests - consensusGroup := bg.Consensus.GetConsensusGroup() - - numberReqs := len(consensusGroup) * 100 - for numberReqs > 0 { - _, statusCode, err := client.SendRPC("eth_getBlockByNumber", []interface{}{"0x101", false}) - require.NoError(t, err) - require.Equal(t, 200, statusCode) - numberReqs-- - } - - msg := fmt.Sprintf("n1 %d, n2 %d", - len(nodes["node1"].mockBackend.Requests()), len(nodes["node2"].mockBackend.Requests())) - require.GreaterOrEqual(t, len(nodes["node1"].mockBackend.Requests()), 50, msg) - require.GreaterOrEqual(t, len(nodes["node2"].mockBackend.Requests()), 50, msg) - }) - - t.Run("load balancing should not hit if node is not healthy", func(t *testing.T) { - reset() - useOnlyNode1() - - // reset request counts - nodes["node1"].mockBackend.Reset() - nodes["node2"].mockBackend.Reset() - - require.Equal(t, 0, len(nodes["node1"].mockBackend.Requests())) - require.Equal(t, 0, len(nodes["node1"].mockBackend.Requests())) - - numberReqs := 10 - for numberReqs > 0 { - _, statusCode, err := client.SendRPC("eth_getBlockByNumber", []interface{}{"0x101", false}) - require.NoError(t, err) - require.Equal(t, 200, statusCode) - numberReqs-- - } - - msg := fmt.Sprintf("n1 %d, n2 %d", - len(nodes["node1"].mockBackend.Requests()), len(nodes["node2"].mockBackend.Requests())) - require.Equal(t, len(nodes["node1"].mockBackend.Requests()), 10, msg) - require.Equal(t, len(nodes["node2"].mockBackend.Requests()), 0, msg) - }) - - t.Run("load balancing should not hit if node is degraded", func(t *testing.T) { - reset() - useOnlyNode1() - - // replace node1 handler with one that adds a 500ms delay - oldHandler := nodes["node1"].mockBackend.handler - defer func() { nodes["node1"].mockBackend.handler = oldHandler }() - - nodes["node1"].mockBackend.SetHandler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - time.Sleep(500 * time.Millisecond) - oldHandler.ServeHTTP(w, r) - })) - - update() - - // send 10 requests to make node1 degraded - numberReqs := 10 - for numberReqs > 0 { - _, statusCode, err := client.SendRPC("eth_getBlockByNumber", []interface{}{"0x101", false}) - require.NoError(t, err) - require.Equal(t, 200, statusCode) - numberReqs-- - } - - // bring back node2 - nodes["node2"].handler.ResetOverrides() - update() - - // reset request counts - nodes["node1"].mockBackend.Reset() - nodes["node2"].mockBackend.Reset() - - require.Equal(t, 0, len(nodes["node1"].mockBackend.Requests())) - require.Equal(t, 0, len(nodes["node2"].mockBackend.Requests())) - - numberReqs = 10 - for numberReqs > 0 { - _, statusCode, err := client.SendRPC("eth_getBlockByNumber", []interface{}{"0x101", false}) - require.NoError(t, err) - require.Equal(t, 200, statusCode) - numberReqs-- - } - - msg := fmt.Sprintf("n1 %d, n2 %d", - len(nodes["node1"].mockBackend.Requests()), len(nodes["node2"].mockBackend.Requests())) - require.Equal(t, 0, len(nodes["node1"].mockBackend.Requests()), msg) - require.Equal(t, 10, len(nodes["node2"].mockBackend.Requests()), msg) - }) - - t.Run("rewrite response of eth_blockNumber", func(t *testing.T) { - reset() - update() - - totalRequests := len(nodes["node1"].mockBackend.Requests()) + len(nodes["node2"].mockBackend.Requests()) - require.Equal(t, 2, len(bg.Consensus.GetConsensusGroup())) - - resRaw, statusCode, err := client.SendRPC("eth_blockNumber", nil) - require.NoError(t, err) - require.Equal(t, 200, statusCode) - - var jsonMap map[string]interface{} - err = json.Unmarshal(resRaw, &jsonMap) - require.NoError(t, err) - require.Equal(t, "0x101", jsonMap["result"]) - - // no extra request hit the backends - require.Equal(t, totalRequests, - len(nodes["node1"].mockBackend.Requests())+len(nodes["node2"].mockBackend.Requests())) - }) - - t.Run("rewrite request of eth_getBlockByNumber for latest", func(t *testing.T) { - reset() - useOnlyNode1() - - _, statusCode, err := client.SendRPC("eth_getBlockByNumber", []interface{}{"latest"}) - require.NoError(t, err) - require.Equal(t, 200, statusCode) - - var jsonMap map[string]interface{} - err = json.Unmarshal(nodes["node1"].mockBackend.Requests()[0].Body, &jsonMap) - require.NoError(t, err) - require.Equal(t, "0x101", jsonMap["params"].([]interface{})[0]) - }) - - t.Run("rewrite request of eth_getBlockByNumber for finalized", func(t *testing.T) { - reset() - useOnlyNode1() - - _, statusCode, err := client.SendRPC("eth_getBlockByNumber", []interface{}{"finalized"}) - require.NoError(t, err) - require.Equal(t, 200, statusCode) - - var jsonMap map[string]interface{} - err = json.Unmarshal(nodes["node1"].mockBackend.Requests()[0].Body, &jsonMap) - require.NoError(t, err) - require.Equal(t, "0xc1", jsonMap["params"].([]interface{})[0]) - }) - - t.Run("rewrite request of eth_getBlockByNumber for safe", func(t *testing.T) { - reset() - useOnlyNode1() - - _, statusCode, err := client.SendRPC("eth_getBlockByNumber", []interface{}{"safe"}) - require.NoError(t, err) - require.Equal(t, 200, statusCode) - - var jsonMap map[string]interface{} - err = json.Unmarshal(nodes["node1"].mockBackend.Requests()[0].Body, &jsonMap) - require.NoError(t, err) - require.Equal(t, "0xe1", jsonMap["params"].([]interface{})[0]) - }) - - t.Run("rewrite request of eth_getBlockByNumber - out of range", func(t *testing.T) { - reset() - useOnlyNode1() - - resRaw, statusCode, err := client.SendRPC("eth_getBlockByNumber", []interface{}{"0x300"}) - require.NoError(t, err) - require.Equal(t, 400, statusCode) - - var jsonMap map[string]interface{} - err = json.Unmarshal(resRaw, &jsonMap) - require.NoError(t, err) - require.Equal(t, -32019, int(jsonMap["error"].(map[string]interface{})["code"].(float64))) - require.Equal(t, "block is out of range", jsonMap["error"].(map[string]interface{})["message"]) - }) - - t.Run("batched rewrite", func(t *testing.T) { - reset() - useOnlyNode1() - - resRaw, statusCode, err := client.SendBatchRPC( - NewRPCReq("1", "eth_getBlockByNumber", []interface{}{"latest"}), - NewRPCReq("2", "eth_getBlockByNumber", []interface{}{"0x102"}), - NewRPCReq("3", "eth_getBlockByNumber", []interface{}{"0xe1"})) - require.NoError(t, err) - require.Equal(t, 200, statusCode) - - var jsonMap []map[string]interface{} - err = json.Unmarshal(resRaw, &jsonMap) - require.NoError(t, err) - require.Equal(t, 3, len(jsonMap)) - - // rewrite latest to 0x101 - require.Equal(t, "0x101", jsonMap[0]["result"].(map[string]interface{})["number"]) - - // out of bounds for block 0x102 - require.Equal(t, -32019, int(jsonMap[1]["error"].(map[string]interface{})["code"].(float64))) - require.Equal(t, "block is out of range", jsonMap[1]["error"].(map[string]interface{})["message"]) - - // dont rewrite for 0xe1 - require.Equal(t, "0xe1", jsonMap[2]["result"].(map[string]interface{})["number"]) - }) - - t.Run("translate consensus_getReceipts to debug_getRawReceipts", func(t *testing.T) { - reset() - useOnlyNode1() - update() - - // reset request counts - nodes["node1"].mockBackend.Reset() - - resRaw, statusCode, err := client.SendRPC("consensus_getReceipts", - []interface{}{"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b"}) - require.NoError(t, err) - require.Equal(t, 200, statusCode) - - var jsonMap map[string]interface{} - err = json.Unmarshal(nodes["node1"].mockBackend.Requests()[0].Body, &jsonMap) - require.NoError(t, err) - require.Equal(t, "debug_getRawReceipts", jsonMap["method"]) - require.Equal(t, "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", jsonMap["params"].([]interface{})[0]) - - var resJsonMap map[string]interface{} - err = json.Unmarshal(resRaw, &resJsonMap) - require.NoError(t, err) - - require.Equal(t, "debug_getRawReceipts", resJsonMap["result"].(map[string]interface{})["method"].(string)) - require.Equal(t, "debug_getRawReceipts", resJsonMap["result"].(map[string]interface{})["result"].(map[string]interface{})["_"]) - }) - - t.Run("translate consensus_getReceipts to debug_getRawReceipts with latest block tag", func(t *testing.T) { - reset() - useOnlyNode1() - update() - - // reset request counts - nodes["node1"].mockBackend.Reset() - - resRaw, statusCode, err := client.SendRPC("consensus_getReceipts", - []interface{}{"latest"}) - - require.NoError(t, err) - require.Equal(t, 200, statusCode) - - var jsonMap map[string]interface{} - err = json.Unmarshal(nodes["node1"].mockBackend.Requests()[0].Body, &jsonMap) - require.NoError(t, err) - require.Equal(t, "debug_getRawReceipts", jsonMap["method"]) - require.Equal(t, "0x101", jsonMap["params"].([]interface{})[0]) - - var resJsonMap map[string]interface{} - err = json.Unmarshal(resRaw, &resJsonMap) - require.NoError(t, err) - - require.Equal(t, "debug_getRawReceipts", resJsonMap["result"].(map[string]interface{})["method"].(string)) - require.Equal(t, "debug_getRawReceipts", resJsonMap["result"].(map[string]interface{})["result"].(map[string]interface{})["_"]) - }) - - t.Run("translate consensus_getReceipts to debug_getRawReceipts with block number", func(t *testing.T) { - reset() - useOnlyNode1() - update() - - // reset request counts - nodes["node1"].mockBackend.Reset() - - resRaw, statusCode, err := client.SendRPC("consensus_getReceipts", - []interface{}{"0x55"}) - - require.NoError(t, err) - require.Equal(t, 200, statusCode) - - var jsonMap map[string]interface{} - err = json.Unmarshal(nodes["node1"].mockBackend.Requests()[0].Body, &jsonMap) - require.NoError(t, err) - require.Equal(t, "debug_getRawReceipts", jsonMap["method"]) - require.Equal(t, "0x55", jsonMap["params"].([]interface{})[0]) - - var resJsonMap map[string]interface{} - err = json.Unmarshal(resRaw, &resJsonMap) - require.NoError(t, err) - - require.Equal(t, "debug_getRawReceipts", resJsonMap["result"].(map[string]interface{})["method"].(string)) - require.Equal(t, "debug_getRawReceipts", resJsonMap["result"].(map[string]interface{})["result"].(map[string]interface{})["_"]) - }) - - t.Run("translate consensus_getReceipts to alchemy_getTransactionReceipts with block hash", func(t *testing.T) { - reset() - useOnlyNode1() - update() - - // reset request counts - nodes["node1"].mockBackend.Reset() - - nodes["node1"].backend.Override(proxyd.WithConsensusReceiptTarget("alchemy_getTransactionReceipts")) - defer nodes["node1"].backend.Override(proxyd.WithConsensusReceiptTarget("debug_getRawReceipts")) - - resRaw, statusCode, err := client.SendRPC("consensus_getReceipts", - []interface{}{"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b"}) - - require.NoError(t, err) - require.Equal(t, 200, statusCode) - - var reqJsonMap map[string]interface{} - err = json.Unmarshal(nodes["node1"].mockBackend.Requests()[0].Body, &reqJsonMap) - - require.NoError(t, err) - require.Equal(t, "alchemy_getTransactionReceipts", reqJsonMap["method"]) - require.Equal(t, "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", reqJsonMap["params"].([]interface{})[0].(map[string]interface{})["blockHash"]) - - var resJsonMap map[string]interface{} - err = json.Unmarshal(resRaw, &resJsonMap) - require.NoError(t, err) - - require.Equal(t, "alchemy_getTransactionReceipts", resJsonMap["result"].(map[string]interface{})["method"].(string)) - require.Equal(t, "alchemy_getTransactionReceipts", resJsonMap["result"].(map[string]interface{})["result"].(map[string]interface{})["_"]) - }) - - t.Run("translate consensus_getReceipts to alchemy_getTransactionReceipts with block number", func(t *testing.T) { - reset() - useOnlyNode1() - update() - - // reset request counts - nodes["node1"].mockBackend.Reset() - - nodes["node1"].backend.Override(proxyd.WithConsensusReceiptTarget("alchemy_getTransactionReceipts")) - defer nodes["node1"].backend.Override(proxyd.WithConsensusReceiptTarget("debug_getRawReceipts")) - - resRaw, statusCode, err := client.SendRPC("consensus_getReceipts", - []interface{}{"0x55"}) - - require.NoError(t, err) - require.Equal(t, 200, statusCode) - - var reqJsonMap map[string]interface{} - err = json.Unmarshal(nodes["node1"].mockBackend.Requests()[0].Body, &reqJsonMap) - - require.NoError(t, err) - require.Equal(t, "alchemy_getTransactionReceipts", reqJsonMap["method"]) - require.Equal(t, "0x55", reqJsonMap["params"].([]interface{})[0].(map[string]interface{})["blockNumber"]) - - var resJsonMap map[string]interface{} - err = json.Unmarshal(resRaw, &resJsonMap) - require.NoError(t, err) - - require.Equal(t, "alchemy_getTransactionReceipts", resJsonMap["result"].(map[string]interface{})["method"].(string)) - require.Equal(t, "alchemy_getTransactionReceipts", resJsonMap["result"].(map[string]interface{})["result"].(map[string]interface{})["_"]) - }) - - t.Run("translate consensus_getReceipts to alchemy_getTransactionReceipts with latest block tag", func(t *testing.T) { - reset() - useOnlyNode1() - update() - - // reset request counts - nodes["node1"].mockBackend.Reset() - - nodes["node1"].backend.Override(proxyd.WithConsensusReceiptTarget("alchemy_getTransactionReceipts")) - defer nodes["node1"].backend.Override(proxyd.WithConsensusReceiptTarget("debug_getRawReceipts")) - - resRaw, statusCode, err := client.SendRPC("consensus_getReceipts", - []interface{}{"latest"}) - - require.NoError(t, err) - require.Equal(t, 200, statusCode) - - var reqJsonMap map[string]interface{} - err = json.Unmarshal(nodes["node1"].mockBackend.Requests()[0].Body, &reqJsonMap) - - require.NoError(t, err) - require.Equal(t, "alchemy_getTransactionReceipts", reqJsonMap["method"]) - require.Equal(t, "0x101", reqJsonMap["params"].([]interface{})[0].(map[string]interface{})["blockNumber"]) - - var resJsonMap map[string]interface{} - err = json.Unmarshal(resRaw, &resJsonMap) - require.NoError(t, err) - - require.Equal(t, "alchemy_getTransactionReceipts", resJsonMap["result"].(map[string]interface{})["method"].(string)) - require.Equal(t, "alchemy_getTransactionReceipts", resJsonMap["result"].(map[string]interface{})["result"].(map[string]interface{})["_"]) - }) - - t.Run("translate consensus_getReceipts to unsupported consensus_receipts_target", func(t *testing.T) { - reset() - useOnlyNode1() - - nodes["node1"].backend.Override(proxyd.WithConsensusReceiptTarget("unsupported_consensus_receipts_target")) - defer nodes["node1"].backend.Override(proxyd.WithConsensusReceiptTarget("debug_getRawReceipts")) - - _, statusCode, err := client.SendRPC("consensus_getReceipts", - []interface{}{"latest"}) - - require.NoError(t, err) - require.Equal(t, 400, statusCode) - }) - - t.Run("consensus_getReceipts should not be used in a batch", func(t *testing.T) { - reset() - useOnlyNode1() - - _, statusCode, err := client.SendBatchRPC( - NewRPCReq("1", "eth_getBlockByNumber", []interface{}{"latest"}), - NewRPCReq("2", "consensus_getReceipts", []interface{}{"0x55"}), - NewRPCReq("3", "eth_getBlockByNumber", []interface{}{"0xe1"})) - require.NoError(t, err) - require.Equal(t, 400, statusCode) - }) -} - -func buildResponse(result interface{}) string { - res, err := json.Marshal(proxyd.RPCRes{ - Result: result, - }) - if err != nil { - panic(err) - } - return string(res) -} diff --git a/proxyd/integration_tests/failover_test.go b/proxyd/integration_tests/failover_test.go deleted file mode 100644 index 501542a1effb..000000000000 --- a/proxyd/integration_tests/failover_test.go +++ /dev/null @@ -1,288 +0,0 @@ -package integration_tests - -import ( - "fmt" - "net/http" - "os" - "sync/atomic" - "testing" - "time" - - "github.com/alicebob/miniredis" - "github.com/ethereum-optimism/optimism/proxyd" - "github.com/stretchr/testify/require" -) - -const ( - goodResponse = `{"jsonrpc": "2.0", "result": "hello", "id": 999}` - noBackendsResponse = `{"error":{"code":-32011,"message":"no backends available for method"},"id":999,"jsonrpc":"2.0"}` - unexpectedResponse = `{"error":{"code":-32011,"message":"some error"},"id":999,"jsonrpc":"2.0"}` -) - -func TestFailover(t *testing.T) { - goodBackend := NewMockBackend(BatchedResponseHandler(200, goodResponse)) - defer goodBackend.Close() - badBackend := NewMockBackend(nil) - defer badBackend.Close() - - require.NoError(t, os.Setenv("GOOD_BACKEND_RPC_URL", goodBackend.URL())) - require.NoError(t, os.Setenv("BAD_BACKEND_RPC_URL", badBackend.URL())) - - config := ReadConfig("failover") - client := NewProxydClient("http://127.0.0.1:8545") - _, shutdown, err := proxyd.Start(config) - require.NoError(t, err) - defer shutdown() - - tests := []struct { - name string - handler http.Handler - }{ - { - "backend responds 200 with non-JSON response", - http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(200) - _, _ = w.Write([]byte("this data is not JSON!")) - }), - }, - { - "backend responds with no body", - http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(200) - }), - }, - } - codes := []int{ - 300, - 301, - 302, - 401, - 403, - 429, - 500, - 503, - } - for _, code := range codes { - tests = append(tests, struct { - name string - handler http.Handler - }{ - fmt.Sprintf("backend %d", code), - http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(code) - }), - }) - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - badBackend.SetHandler(tt.handler) - res, statusCode, err := client.SendRPC("eth_chainId", nil) - require.NoError(t, err) - require.Equal(t, 200, statusCode) - RequireEqualJSON(t, []byte(goodResponse), res) - require.Equal(t, 1, len(badBackend.Requests())) - require.Equal(t, 1, len(goodBackend.Requests())) - badBackend.Reset() - goodBackend.Reset() - }) - } - - t.Run("backend times out and falls back to another", func(t *testing.T) { - badBackend.SetHandler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - time.Sleep(2 * time.Second) - _, _ = w.Write([]byte("[{}]")) - })) - res, statusCode, err := client.SendRPC("eth_chainId", nil) - require.NoError(t, err) - require.Equal(t, 200, statusCode) - RequireEqualJSON(t, []byte(goodResponse), res) - require.Equal(t, 1, len(badBackend.Requests())) - require.Equal(t, 1, len(goodBackend.Requests())) - goodBackend.Reset() - badBackend.Reset() - }) - - t.Run("works with a batch request", func(t *testing.T) { - goodBackend.SetHandler(BatchedResponseHandler(200, goodResponse, goodResponse)) - badBackend.SetHandler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(500) - })) - res, statusCode, err := client.SendBatchRPC( - NewRPCReq("1", "eth_chainId", nil), - NewRPCReq("2", "eth_chainId", nil), - ) - require.NoError(t, err) - require.Equal(t, 200, statusCode) - RequireEqualJSON(t, []byte(asArray(goodResponse, goodResponse)), res) - require.Equal(t, 1, len(badBackend.Requests())) - require.Equal(t, 1, len(goodBackend.Requests())) - goodBackend.Reset() - badBackend.Reset() - }) -} - -func TestRetries(t *testing.T) { - backend := NewMockBackend(BatchedResponseHandler(200, goodResponse)) - defer backend.Close() - - require.NoError(t, os.Setenv("GOOD_BACKEND_RPC_URL", backend.URL())) - config := ReadConfig("retries") - client := NewProxydClient("http://127.0.0.1:8545") - _, shutdown, err := proxyd.Start(config) - require.NoError(t, err) - defer shutdown() - - attempts := int32(0) - backend.SetHandler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - incremented := atomic.AddInt32(&attempts, 1) - if incremented != 2 { - w.WriteHeader(500) - return - } - BatchedResponseHandler(200, goodResponse)(w, r) - })) - - // test case where request eventually succeeds - res, statusCode, err := client.SendRPC("eth_chainId", nil) - require.NoError(t, err) - require.Equal(t, 200, statusCode) - RequireEqualJSON(t, []byte(goodResponse), res) - require.Equal(t, 2, len(backend.Requests())) - - // test case where it does not - backend.Reset() - attempts = -10 - res, statusCode, err = client.SendRPC("eth_chainId", nil) - require.NoError(t, err) - require.Equal(t, 503, statusCode) - RequireEqualJSON(t, []byte(noBackendsResponse), res) - require.Equal(t, 4, len(backend.Requests())) -} - -func TestOutOfServiceInterval(t *testing.T) { - okHandler := BatchedResponseHandler(200, goodResponse) - goodBackend := NewMockBackend(okHandler) - defer goodBackend.Close() - badBackend := NewMockBackend(nil) - defer badBackend.Close() - - require.NoError(t, os.Setenv("GOOD_BACKEND_RPC_URL", goodBackend.URL())) - require.NoError(t, os.Setenv("BAD_BACKEND_RPC_URL", badBackend.URL())) - - config := ReadConfig("out_of_service_interval") - client := NewProxydClient("http://127.0.0.1:8545") - _, shutdown, err := proxyd.Start(config) - require.NoError(t, err) - defer shutdown() - - badBackend.SetHandler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(503) - })) - - res, statusCode, err := client.SendRPC("eth_chainId", nil) - require.NoError(t, err) - require.Equal(t, 200, statusCode) - RequireEqualJSON(t, []byte(goodResponse), res) - require.Equal(t, 2, len(badBackend.Requests())) - require.Equal(t, 1, len(goodBackend.Requests())) - - res, statusCode, err = client.SendRPC("eth_chainId", nil) - require.NoError(t, err) - require.Equal(t, 200, statusCode) - RequireEqualJSON(t, []byte(goodResponse), res) - require.Equal(t, 4, len(badBackend.Requests())) - require.Equal(t, 2, len(goodBackend.Requests())) - - _, statusCode, err = client.SendBatchRPC( - NewRPCReq("1", "eth_chainId", nil), - NewRPCReq("1", "eth_chainId", nil), - ) - require.NoError(t, err) - require.Equal(t, 200, statusCode) - require.Equal(t, 8, len(badBackend.Requests())) - require.Equal(t, 4, len(goodBackend.Requests())) - - time.Sleep(time.Second) - badBackend.SetHandler(okHandler) - - res, statusCode, err = client.SendRPC("eth_chainId", nil) - require.NoError(t, err) - require.Equal(t, 200, statusCode) - RequireEqualJSON(t, []byte(goodResponse), res) - require.Equal(t, 9, len(badBackend.Requests())) - require.Equal(t, 4, len(goodBackend.Requests())) -} - -func TestBatchWithPartialFailover(t *testing.T) { - config := ReadConfig("failover") - config.Server.MaxUpstreamBatchSize = 2 - - goodBackend := NewMockBackend(BatchedResponseHandler(200, goodResponse, goodResponse)) - defer goodBackend.Close() - badBackend := NewMockBackend(SingleResponseHandler(200, "this data is not JSON!")) - defer badBackend.Close() - - require.NoError(t, os.Setenv("GOOD_BACKEND_RPC_URL", goodBackend.URL())) - require.NoError(t, os.Setenv("BAD_BACKEND_RPC_URL", badBackend.URL())) - - client := NewProxydClient("http://127.0.0.1:8545") - _, shutdown, err := proxyd.Start(config) - require.NoError(t, err) - defer shutdown() - - res, statusCode, err := client.SendBatchRPC( - NewRPCReq("1", "eth_chainId", nil), - NewRPCReq("2", "eth_chainId", nil), - NewRPCReq("3", "eth_chainId", nil), - NewRPCReq("4", "eth_chainId", nil), - ) - require.NoError(t, err) - require.Equal(t, 200, statusCode) - RequireEqualJSON(t, []byte(asArray(goodResponse, goodResponse, goodResponse, goodResponse)), res) - require.Equal(t, 2, len(badBackend.Requests())) - require.Equal(t, 2, len(goodBackend.Requests())) -} - -func TestInfuraFailoverOnUnexpectedResponse(t *testing.T) { - InitLogger() - // Scenario: - // 1. Send batch to BAD_BACKEND (Infura) - // 2. Infura fails completely due to a partially errorneous batch request (one of N+1 request object is invalid) - // 3. Assert that the request batch is re-routed to the failover provider - // 4. Assert that BAD_BACKEND is NOT labeled offline - // 5. Assert that BAD_BACKEND is NOT retried - - redis, err := miniredis.Run() - require.NoError(t, err) - defer redis.Close() - - config := ReadConfig("failover") - config.Server.MaxUpstreamBatchSize = 2 - config.BackendOptions.MaxRetries = 2 - // Setup redis to detect offline backends - config.Redis.URL = fmt.Sprintf("redis://127.0.0.1:%s", redis.Port()) - require.NoError(t, err) - - goodBackend := NewMockBackend(BatchedResponseHandler(200, goodResponse, goodResponse)) - defer goodBackend.Close() - badBackend := NewMockBackend(SingleResponseHandler(200, unexpectedResponse)) - defer badBackend.Close() - - require.NoError(t, os.Setenv("GOOD_BACKEND_RPC_URL", goodBackend.URL())) - require.NoError(t, os.Setenv("BAD_BACKEND_RPC_URL", badBackend.URL())) - - client := NewProxydClient("http://127.0.0.1:8545") - _, shutdown, err := proxyd.Start(config) - require.NoError(t, err) - defer shutdown() - - res, statusCode, err := client.SendBatchRPC( - NewRPCReq("1", "eth_chainId", nil), - NewRPCReq("2", "eth_chainId", nil), - ) - require.NoError(t, err) - require.Equal(t, 200, statusCode) - RequireEqualJSON(t, []byte(asArray(goodResponse, goodResponse)), res) - require.Equal(t, 1, len(badBackend.Requests())) - require.Equal(t, 1, len(goodBackend.Requests())) -} diff --git a/proxyd/integration_tests/fallback_test.go b/proxyd/integration_tests/fallback_test.go deleted file mode 100644 index c5b3e4823517..000000000000 --- a/proxyd/integration_tests/fallback_test.go +++ /dev/null @@ -1,374 +0,0 @@ -package integration_tests - -import ( - "context" - "fmt" - "net/http" - "os" - "path" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common/hexutil" - - "github.com/ethereum-optimism/optimism/proxyd" - ms "github.com/ethereum-optimism/optimism/proxyd/tools/mockserver/handler" - "github.com/stretchr/testify/require" -) - -func setup_failover(t *testing.T) (map[string]nodeContext, *proxyd.BackendGroup, *ProxydHTTPClient, func(), []time.Time, []time.Time) { - // setup mock servers - node1 := NewMockBackend(nil) - node2 := NewMockBackend(nil) - - dir, err := os.Getwd() - require.NoError(t, err) - - responses := path.Join(dir, "testdata/consensus_responses.yml") - - h1 := ms.MockedHandler{ - Overrides: []*ms.MethodTemplate{}, - Autoload: true, - AutoloadFile: responses, - } - h2 := ms.MockedHandler{ - Overrides: []*ms.MethodTemplate{}, - Autoload: true, - AutoloadFile: responses, - } - - require.NoError(t, os.Setenv("NODE1_URL", node1.URL())) - require.NoError(t, os.Setenv("NODE2_URL", node2.URL())) - - node1.SetHandler(http.HandlerFunc(h1.Handler)) - node2.SetHandler(http.HandlerFunc(h2.Handler)) - - // setup proxyd - config := ReadConfig("fallback") - svr, shutdown, err := proxyd.Start(config) - require.NoError(t, err) - - // expose the proxyd client - client := NewProxydClient("http://127.0.0.1:8545") - - // expose the backend group - bg := svr.BackendGroups["node"] - require.NotNil(t, bg) - require.NotNil(t, bg.Consensus) - require.Equal(t, 2, len(bg.Backends)) // should match config - - // convenient mapping to access the nodes by name - nodes := map[string]nodeContext{ - "normal": { - mockBackend: node1, - backend: bg.Backends[0], - handler: &h1, - }, - "fallback": { - mockBackend: node2, - backend: bg.Backends[1], - handler: &h2, - }, - } - normalTimestamps := []time.Time{} - fallbackTimestamps := []time.Time{} - - return nodes, bg, client, shutdown, normalTimestamps, fallbackTimestamps -} - -func TestFallback(t *testing.T) { - nodes, bg, client, shutdown, normalTimestamps, fallbackTimestamps := setup_failover(t) - defer nodes["normal"].mockBackend.Close() - defer nodes["fallback"].mockBackend.Close() - defer shutdown() - - ctx := context.Background() - - // Use Update to Advance the Candidate iteration - update := func() { - for _, be := range bg.Primaries() { - bg.Consensus.UpdateBackend(ctx, be) - } - - for _, be := range bg.Fallbacks() { - healthyCandidates := bg.Consensus.FilterCandidates(bg.Primaries()) - if len(healthyCandidates) == 0 { - bg.Consensus.UpdateBackend(ctx, be) - } - } - - bg.Consensus.UpdateBackendGroupConsensus(ctx) - } - - override := func(node string, method string, block string, response string) { - if _, ok := nodes[node]; !ok { - t.Fatalf("node %s does not exist in the nodes map", node) - } - nodes[node].handler.AddOverride(&ms.MethodTemplate{ - Method: method, - Block: block, - Response: response, - }) - } - - overrideBlock := func(node string, blockRequest string, blockResponse string) { - override(node, - "eth_getBlockByNumber", - blockRequest, - buildResponse(map[string]string{ - "number": blockResponse, - "hash": "hash_" + blockResponse, - })) - } - - overrideBlockHash := func(node string, blockRequest string, number string, hash string) { - override(node, - "eth_getBlockByNumber", - blockRequest, - buildResponse(map[string]string{ - "number": number, - "hash": hash, - })) - } - - overridePeerCount := func(node string, count int) { - override(node, "net_peerCount", "", buildResponse(hexutil.Uint64(count).String())) - } - - overrideNotInSync := func(node string) { - override(node, "eth_syncing", "", buildResponse(map[string]string{ - "startingblock": "0x0", - "currentblock": "0x0", - "highestblock": "0x100", - })) - } - - containsNode := func(backends []*proxyd.Backend, name string) bool { - for _, be := range backends { - // Note: Currently checks for name but would like to expose fallback better - if be.Name == name { - return true - } - } - return false - } - - // TODO: Improvement instead of simple array, - // ensure normal and backend are returned in strict order - recordLastUpdates := func(backends []*proxyd.Backend) []time.Time { - lastUpdated := []time.Time{} - for _, be := range backends { - lastUpdated = append(lastUpdated, bg.Consensus.GetLastUpdate(be)) - } - return lastUpdated - } - - // convenient methods to manipulate state and mock responses - reset := func() { - for _, node := range nodes { - node.handler.ResetOverrides() - node.mockBackend.Reset() - } - bg.Consensus.ClearListeners() - bg.Consensus.Reset() - - normalTimestamps = []time.Time{} - fallbackTimestamps = []time.Time{} - } - - /* - triggerFirstNormalFailure: will trigger consensus group into fallback mode - old consensus group should be returned one time, and fallback group should be enabled - Fallback will be returned subsequent update - */ - triggerFirstNormalFailure := func() { - overridePeerCount("normal", 0) - update() - require.True(t, containsNode(bg.Consensus.GetConsensusGroup(), "fallback")) - require.False(t, containsNode(bg.Consensus.GetConsensusGroup(), "normal")) - require.Equal(t, 1, len(bg.Consensus.GetConsensusGroup())) - nodes["fallback"].mockBackend.Reset() - } - - t.Run("Test fallback Mode will not be exited, unless state changes", func(t *testing.T) { - reset() - triggerFirstNormalFailure() - for i := 0; i < 10; i++ { - update() - require.False(t, containsNode(bg.Consensus.GetConsensusGroup(), "normal")) - require.True(t, containsNode(bg.Consensus.GetConsensusGroup(), "fallback")) - require.Equal(t, 1, len(bg.Consensus.GetConsensusGroup())) - } - }) - - t.Run("Test Healthy mode will not be exited unless state changes", func(t *testing.T) { - reset() - for i := 0; i < 10; i++ { - update() - require.Equal(t, 1, len(bg.Consensus.GetConsensusGroup())) - require.False(t, containsNode(bg.Consensus.GetConsensusGroup(), "fallback")) - require.True(t, containsNode(bg.Consensus.GetConsensusGroup(), "normal")) - - _, statusCode, err := client.SendRPC("eth_getBlockByNumber", []interface{}{"0x101", false}) - - require.Equal(t, 200, statusCode) - require.Nil(t, err, "error not nil") - require.Equal(t, "0x101", bg.Consensus.GetLatestBlockNumber().String()) - require.Equal(t, "0xe1", bg.Consensus.GetSafeBlockNumber().String()) - require.Equal(t, "0xc1", bg.Consensus.GetFinalizedBlockNumber().String()) - } - // TODO: Remove these, just here so compiler doesn't complain - overrideNotInSync("normal") - overrideBlock("normal", "safe", "0xb1") - overrideBlockHash("fallback", "0x102", "0x102", "wrong_hash") - }) - - t.Run("trigger normal failure, subsequent update return failover in consensus group, and fallback mode enabled", func(t *testing.T) { - reset() - triggerFirstNormalFailure() - update() - require.Equal(t, 1, len(bg.Consensus.GetConsensusGroup())) - require.True(t, containsNode(bg.Consensus.GetConsensusGroup(), "fallback")) - require.False(t, containsNode(bg.Consensus.GetConsensusGroup(), "normal")) - }) - - t.Run("trigger healthy -> fallback, update -> healthy", func(t *testing.T) { - reset() - update() - require.Equal(t, 1, len(bg.Consensus.GetConsensusGroup())) - require.True(t, containsNode(bg.Consensus.GetConsensusGroup(), "normal")) - require.False(t, containsNode(bg.Consensus.GetConsensusGroup(), "fallback")) - - triggerFirstNormalFailure() - update() - require.Equal(t, 1, len(bg.Consensus.GetConsensusGroup())) - require.True(t, containsNode(bg.Consensus.GetConsensusGroup(), "fallback")) - require.False(t, containsNode(bg.Consensus.GetConsensusGroup(), "normal")) - - overridePeerCount("normal", 5) - update() - require.Equal(t, 1, len(bg.Consensus.GetConsensusGroup())) - require.True(t, containsNode(bg.Consensus.GetConsensusGroup(), "normal")) - require.False(t, containsNode(bg.Consensus.GetConsensusGroup(), "fallback")) - }) - - t.Run("Ensure fallback is not updated when in normal mode", func(t *testing.T) { - reset() - for i := 0; i < 10; i++ { - update() - ts := recordLastUpdates(bg.Backends) - normalTimestamps = append(normalTimestamps, ts[0]) - fallbackTimestamps = append(fallbackTimestamps, ts[1]) - - require.False(t, normalTimestamps[i].IsZero()) - require.True(t, fallbackTimestamps[i].IsZero()) - - require.True(t, containsNode(bg.Consensus.GetConsensusGroup(), "normal")) - require.False(t, containsNode(bg.Consensus.GetConsensusGroup(), "fallback")) - - // consensus at block 0x101 - require.Equal(t, "0x101", bg.Consensus.GetLatestBlockNumber().String()) - require.Equal(t, "0xe1", bg.Consensus.GetSafeBlockNumber().String()) - require.Equal(t, "0xc1", bg.Consensus.GetFinalizedBlockNumber().String()) - } - }) - - /* - Set Normal backend to Fail -> both backends should be updated - */ - t.Run("Ensure both nodes are quieried in fallback mode", func(t *testing.T) { - reset() - triggerFirstNormalFailure() - for i := 0; i < 10; i++ { - update() - ts := recordLastUpdates(bg.Backends) - normalTimestamps = append(normalTimestamps, ts[0]) - fallbackTimestamps = append(fallbackTimestamps, ts[1]) - - // Both Nodes should be updated again - require.False(t, normalTimestamps[i].IsZero()) - require.False(t, fallbackTimestamps[i].IsZero(), - fmt.Sprintf("Error: Fallback timestamp: %v was not queried on iteratio %d", fallbackTimestamps[i], i), - ) - if i > 0 { - require.Greater(t, normalTimestamps[i], normalTimestamps[i-1]) - require.Greater(t, fallbackTimestamps[i], fallbackTimestamps[i-1]) - } - } - }) - - t.Run("Ensure both nodes are quieried in fallback mode", func(t *testing.T) { - reset() - triggerFirstNormalFailure() - for i := 0; i < 10; i++ { - update() - ts := recordLastUpdates(bg.Backends) - normalTimestamps = append(normalTimestamps, ts[0]) - fallbackTimestamps = append(fallbackTimestamps, ts[1]) - - // Both Nodes should be updated again - require.False(t, normalTimestamps[i].IsZero()) - require.False(t, fallbackTimestamps[i].IsZero(), - fmt.Sprintf("Error: Fallback timestamp: %v was not queried on iteratio %d", fallbackTimestamps[i], i), - ) - if i > 0 { - require.Greater(t, normalTimestamps[i], normalTimestamps[i-1]) - require.Greater(t, fallbackTimestamps[i], fallbackTimestamps[i-1]) - } - } - }) - t.Run("Healthy -> Fallback -> Healthy with timestamps", func(t *testing.T) { - reset() - for i := 0; i < 10; i++ { - update() - ts := recordLastUpdates(bg.Backends) - normalTimestamps = append(normalTimestamps, ts[0]) - fallbackTimestamps = append(fallbackTimestamps, ts[1]) - - // Normal is queried, fallback is not - require.False(t, normalTimestamps[i].IsZero()) - require.True(t, fallbackTimestamps[i].IsZero(), - fmt.Sprintf("Error: Fallback timestamp: %v was not queried on iteratio %d", fallbackTimestamps[i], i), - ) - if i > 0 { - require.Greater(t, normalTimestamps[i], normalTimestamps[i-1]) - // Fallbacks should be zeros - require.Equal(t, fallbackTimestamps[i], fallbackTimestamps[i-1]) - } - } - - offset := 10 - triggerFirstNormalFailure() - for i := 0; i < 10; i++ { - update() - ts := recordLastUpdates(bg.Backends) - normalTimestamps = append(normalTimestamps, ts[0]) - fallbackTimestamps = append(fallbackTimestamps, ts[1]) - - // Both Nodes should be updated again - require.False(t, normalTimestamps[i+offset].IsZero()) - require.False(t, fallbackTimestamps[i+offset].IsZero()) - - require.Greater(t, normalTimestamps[i+offset], normalTimestamps[i+offset-1]) - require.Greater(t, fallbackTimestamps[i+offset], fallbackTimestamps[i+offset-1]) - } - - overridePeerCount("normal", 5) - offset = 20 - for i := 0; i < 10; i++ { - update() - ts := recordLastUpdates(bg.Backends) - normalTimestamps = append(normalTimestamps, ts[0]) - fallbackTimestamps = append(fallbackTimestamps, ts[1]) - - // Normal Node will be updated - require.False(t, normalTimestamps[i+offset].IsZero()) - require.Greater(t, normalTimestamps[i+offset], normalTimestamps[i+offset-1]) - - // fallback should not be updating - if offset+i > 21 { - require.Equal(t, fallbackTimestamps[i+offset], fallbackTimestamps[i+offset-1]) - } - } - }) -} diff --git a/proxyd/integration_tests/max_rpc_conns_test.go b/proxyd/integration_tests/max_rpc_conns_test.go deleted file mode 100644 index 5e2336443bfa..000000000000 --- a/proxyd/integration_tests/max_rpc_conns_test.go +++ /dev/null @@ -1,79 +0,0 @@ -package integration_tests - -import ( - "net/http" - "net/http/httptest" - "os" - "sync" - "testing" - "time" - - "github.com/ethereum-optimism/optimism/proxyd" - "github.com/stretchr/testify/require" -) - -func TestMaxConcurrentRPCs(t *testing.T) { - var ( - mu sync.Mutex - concurrentRPCs int - maxConcurrentRPCs int - ) - handler := func(w http.ResponseWriter, r *http.Request) { - mu.Lock() - concurrentRPCs++ - if maxConcurrentRPCs < concurrentRPCs { - maxConcurrentRPCs = concurrentRPCs - } - mu.Unlock() - - time.Sleep(time.Second * 2) - BatchedResponseHandler(200, goodResponse)(w, r) - - mu.Lock() - concurrentRPCs-- - mu.Unlock() - } - // We don't use the MockBackend because it serializes requests to the handler - slowBackend := httptest.NewServer(http.HandlerFunc(handler)) - defer slowBackend.Close() - - require.NoError(t, os.Setenv("GOOD_BACKEND_RPC_URL", slowBackend.URL)) - - config := ReadConfig("max_rpc_conns") - client := NewProxydClient("http://127.0.0.1:8545") - _, shutdown, err := proxyd.Start(config) - require.NoError(t, err) - defer shutdown() - - type resWithCodeErr struct { - res []byte - code int - err error - } - resCh := make(chan *resWithCodeErr) - for i := 0; i < 3; i++ { - go func() { - res, code, err := client.SendRPC("eth_chainId", nil) - resCh <- &resWithCodeErr{ - res: res, - code: code, - err: err, - } - }() - } - res1 := <-resCh - res2 := <-resCh - res3 := <-resCh - - require.NoError(t, res1.err) - require.NoError(t, res2.err) - require.NoError(t, res3.err) - require.Equal(t, 200, res1.code) - require.Equal(t, 200, res2.code) - require.Equal(t, 200, res3.code) - RequireEqualJSON(t, []byte(goodResponse), res1.res) - RequireEqualJSON(t, []byte(goodResponse), res2.res) - RequireEqualJSON(t, []byte(goodResponse), res3.res) - - require.EqualValues(t, 2, maxConcurrentRPCs) -} diff --git a/proxyd/integration_tests/mock_backend_test.go b/proxyd/integration_tests/mock_backend_test.go deleted file mode 100644 index bf45d03f1cbb..000000000000 --- a/proxyd/integration_tests/mock_backend_test.go +++ /dev/null @@ -1,327 +0,0 @@ -package integration_tests - -import ( - "bytes" - "context" - "encoding/json" - "io" - "net/http" - "net/http/httptest" - "strings" - "sync" - - "github.com/ethereum-optimism/optimism/proxyd" - "github.com/gorilla/websocket" -) - -type RecordedRequest struct { - Method string - Headers http.Header - Body []byte -} - -type MockBackend struct { - handler http.Handler - server *httptest.Server - mtx sync.RWMutex - requests []*RecordedRequest -} - -func SingleResponseHandler(code int, response string) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(code) - _, _ = w.Write([]byte(response)) - } -} - -func BatchedResponseHandler(code int, responses ...string) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - if len(responses) == 1 { - SingleResponseHandler(code, responses[0])(w, r) - return - } - - var body string - body += "[" - for i, response := range responses { - body += response - if i+1 < len(responses) { - body += "," - } - } - body += "]" - SingleResponseHandler(code, body)(w, r) - } -} - -type responseMapping struct { - result interface{} - calls int -} -type BatchRPCResponseRouter struct { - m map[string]map[string]*responseMapping - fallback map[string]interface{} - mtx sync.Mutex -} - -func NewBatchRPCResponseRouter() *BatchRPCResponseRouter { - return &BatchRPCResponseRouter{ - m: make(map[string]map[string]*responseMapping), - fallback: make(map[string]interface{}), - } -} - -func (h *BatchRPCResponseRouter) SetRoute(method string, id string, result interface{}) { - h.mtx.Lock() - defer h.mtx.Unlock() - - switch result.(type) { - case string: - case []string: - case nil: - break - default: - panic("invalid result type") - } - - m := h.m[method] - if m == nil { - m = make(map[string]*responseMapping) - } - m[id] = &responseMapping{result: result} - h.m[method] = m -} - -func (h *BatchRPCResponseRouter) SetFallbackRoute(method string, result interface{}) { - h.mtx.Lock() - defer h.mtx.Unlock() - - switch result.(type) { - case string: - case nil: - break - default: - panic("invalid result type") - } - - h.fallback[method] = result -} - -func (h *BatchRPCResponseRouter) GetNumCalls(method string, id string) int { - h.mtx.Lock() - defer h.mtx.Unlock() - - if m := h.m[method]; m != nil { - if rm := m[id]; rm != nil { - return rm.calls - } - } - return 0 -} - -func (h *BatchRPCResponseRouter) ServeHTTP(w http.ResponseWriter, r *http.Request) { - h.mtx.Lock() - defer h.mtx.Unlock() - - body, err := io.ReadAll(r.Body) - if err != nil { - panic(err) - } - - if proxyd.IsBatch(body) { - batch, err := proxyd.ParseBatchRPCReq(body) - if err != nil { - panic(err) - } - out := make([]*proxyd.RPCRes, len(batch)) - for i := range batch { - req, err := proxyd.ParseRPCReq(batch[i]) - if err != nil { - panic(err) - } - - var result interface{} - var resultHasValue bool - - if mappings, exists := h.m[req.Method]; exists { - if rm := mappings[string(req.ID)]; rm != nil { - result = rm.result - resultHasValue = true - rm.calls++ - } - } - if !resultHasValue { - result, resultHasValue = h.fallback[req.Method] - } - if !resultHasValue { - w.WriteHeader(400) - return - } - - out[i] = &proxyd.RPCRes{ - JSONRPC: proxyd.JSONRPCVersion, - Result: result, - ID: req.ID, - } - } - if err := json.NewEncoder(w).Encode(out); err != nil { - panic(err) - } - return - } - - req, err := proxyd.ParseRPCReq(body) - if err != nil { - panic(err) - } - - var result interface{} - var resultHasValue bool - - if mappings, exists := h.m[req.Method]; exists { - if rm := mappings[string(req.ID)]; rm != nil { - result = rm.result - resultHasValue = true - rm.calls++ - } - } - if !resultHasValue { - result, resultHasValue = h.fallback[req.Method] - } - if !resultHasValue { - w.WriteHeader(400) - return - } - - out := &proxyd.RPCRes{ - JSONRPC: proxyd.JSONRPCVersion, - Result: result, - ID: req.ID, - } - enc := json.NewEncoder(w) - if err := enc.Encode(out); err != nil { - panic(err) - } -} - -func NewMockBackend(handler http.Handler) *MockBackend { - mb := &MockBackend{ - handler: handler, - } - mb.server = httptest.NewServer(http.HandlerFunc(mb.wrappedHandler)) - return mb -} - -func (m *MockBackend) URL() string { - return m.server.URL -} - -func (m *MockBackend) Close() { - m.server.Close() -} - -func (m *MockBackend) SetHandler(handler http.Handler) { - m.mtx.Lock() - m.handler = handler - m.mtx.Unlock() -} - -func (m *MockBackend) Reset() { - m.mtx.Lock() - m.requests = nil - m.mtx.Unlock() -} - -func (m *MockBackend) Requests() []*RecordedRequest { - m.mtx.RLock() - defer m.mtx.RUnlock() - out := make([]*RecordedRequest, len(m.requests)) - copy(out, m.requests) - return out -} - -func (m *MockBackend) wrappedHandler(w http.ResponseWriter, r *http.Request) { - m.mtx.Lock() - body, err := io.ReadAll(r.Body) - if err != nil { - panic(err) - } - clone := r.Clone(context.Background()) - clone.Body = io.NopCloser(bytes.NewReader(body)) - m.requests = append(m.requests, &RecordedRequest{ - Method: r.Method, - Headers: r.Header.Clone(), - Body: body, - }) - m.handler.ServeHTTP(w, clone) - m.mtx.Unlock() -} - -type MockWSBackend struct { - connCB MockWSBackendOnConnect - msgCB MockWSBackendOnMessage - closeCB MockWSBackendOnClose - server *httptest.Server - upgrader websocket.Upgrader - conns []*websocket.Conn - connsMu sync.Mutex -} - -type MockWSBackendOnConnect func(conn *websocket.Conn) -type MockWSBackendOnMessage func(conn *websocket.Conn, msgType int, data []byte) -type MockWSBackendOnClose func(conn *websocket.Conn, err error) - -func NewMockWSBackend( - connCB MockWSBackendOnConnect, - msgCB MockWSBackendOnMessage, - closeCB MockWSBackendOnClose, -) *MockWSBackend { - mb := &MockWSBackend{ - connCB: connCB, - msgCB: msgCB, - closeCB: closeCB, - } - mb.server = httptest.NewServer(mb) - return mb -} - -func (m *MockWSBackend) ServeHTTP(w http.ResponseWriter, r *http.Request) { - conn, err := m.upgrader.Upgrade(w, r, nil) - if err != nil { - panic(err) - } - if m.connCB != nil { - m.connCB(conn) - } - go func() { - for { - mType, msg, err := conn.ReadMessage() - if err != nil { - if m.closeCB != nil { - m.closeCB(conn, err) - } - return - } - if m.msgCB != nil { - m.msgCB(conn, mType, msg) - } - } - }() - m.connsMu.Lock() - m.conns = append(m.conns, conn) - m.connsMu.Unlock() -} - -func (m *MockWSBackend) URL() string { - return strings.Replace(m.server.URL, "http://", "ws://", 1) -} - -func (m *MockWSBackend) Close() { - m.server.Close() - - m.connsMu.Lock() - for _, conn := range m.conns { - conn.Close() - } - m.connsMu.Unlock() -} diff --git a/proxyd/integration_tests/rate_limit_test.go b/proxyd/integration_tests/rate_limit_test.go deleted file mode 100644 index 4e17f625c118..000000000000 --- a/proxyd/integration_tests/rate_limit_test.go +++ /dev/null @@ -1,170 +0,0 @@ -package integration_tests - -import ( - "encoding/json" - "net/http" - "os" - "testing" - "time" - - "github.com/ethereum-optimism/optimism/proxyd" - "github.com/stretchr/testify/require" -) - -type resWithCode struct { - code int - res []byte -} - -const frontendOverLimitResponse = `{"error":{"code":-32016,"message":"over rate limit with special message"},"id":null,"jsonrpc":"2.0"}` -const frontendOverLimitResponseWithID = `{"error":{"code":-32016,"message":"over rate limit with special message"},"id":999,"jsonrpc":"2.0"}` - -var ethChainID = "eth_chainId" - -func TestFrontendMaxRPSLimit(t *testing.T) { - goodBackend := NewMockBackend(BatchedResponseHandler(200, goodResponse)) - defer goodBackend.Close() - - require.NoError(t, os.Setenv("GOOD_BACKEND_RPC_URL", goodBackend.URL())) - - config := ReadConfig("frontend_rate_limit") - _, shutdown, err := proxyd.Start(config) - require.NoError(t, err) - defer shutdown() - - t.Run("non-exempt over limit", func(t *testing.T) { - client := NewProxydClient("http://127.0.0.1:8545") - limitedRes, codes := spamReqs(t, client, ethChainID, 429, 3) - require.Equal(t, 1, codes[429]) - require.Equal(t, 2, codes[200]) - RequireEqualJSON(t, []byte(frontendOverLimitResponse), limitedRes) - }) - - t.Run("exempt user agent over limit", func(t *testing.T) { - h := make(http.Header) - h.Set("User-Agent", "exempt_agent") - client := NewProxydClientWithHeaders("http://127.0.0.1:8545", h) - _, codes := spamReqs(t, client, ethChainID, 429, 3) - require.Equal(t, 3, codes[200]) - }) - - t.Run("exempt origin over limit", func(t *testing.T) { - h := make(http.Header) - h.Set("Origin", "exempt_origin") - client := NewProxydClientWithHeaders("http://127.0.0.1:8545", h) - _, codes := spamReqs(t, client, ethChainID, 429, 3) - require.Equal(t, 3, codes[200]) - }) - - t.Run("multiple xff", func(t *testing.T) { - h1 := make(http.Header) - h1.Set("X-Forwarded-For", "0.0.0.0") - h2 := make(http.Header) - h2.Set("X-Forwarded-For", "1.1.1.1") - client1 := NewProxydClientWithHeaders("http://127.0.0.1:8545", h1) - client2 := NewProxydClientWithHeaders("http://127.0.0.1:8545", h2) - _, codes := spamReqs(t, client1, ethChainID, 429, 3) - require.Equal(t, 1, codes[429]) - require.Equal(t, 2, codes[200]) - _, code, err := client2.SendRPC(ethChainID, nil) - require.Equal(t, 200, code) - require.NoError(t, err) - time.Sleep(time.Second) - _, code, err = client2.SendRPC(ethChainID, nil) - require.Equal(t, 200, code) - require.NoError(t, err) - }) - - time.Sleep(time.Second) - - t.Run("RPC override", func(t *testing.T) { - client := NewProxydClient("http://127.0.0.1:8545") - limitedRes, codes := spamReqs(t, client, "eth_foobar", 429, 2) - // use 2 and 1 here since the limit for eth_foobar is 1 - require.Equal(t, 1, codes[429]) - require.Equal(t, 1, codes[200]) - RequireEqualJSON(t, []byte(frontendOverLimitResponseWithID), limitedRes) - }) - - time.Sleep(time.Second) - - t.Run("RPC override in batch", func(t *testing.T) { - client := NewProxydClient("http://127.0.0.1:8545") - req := NewRPCReq("123", "eth_foobar", nil) - out, code, err := client.SendBatchRPC(req, req, req) - require.NoError(t, err) - var res []proxyd.RPCRes - require.NoError(t, json.Unmarshal(out, &res)) - - expCode := proxyd.ErrOverRateLimit.Code - require.Equal(t, 200, code) - require.Equal(t, 3, len(res)) - require.Nil(t, res[0].Error) - require.Equal(t, expCode, res[1].Error.Code) - require.Equal(t, expCode, res[2].Error.Code) - }) - - time.Sleep(time.Second) - - t.Run("RPC override in batch exempt", func(t *testing.T) { - h := make(http.Header) - h.Set("User-Agent", "exempt_agent") - client := NewProxydClientWithHeaders("http://127.0.0.1:8545", h) - req := NewRPCReq("123", "eth_foobar", nil) - out, code, err := client.SendBatchRPC(req, req, req) - require.NoError(t, err) - var res []proxyd.RPCRes - require.NoError(t, json.Unmarshal(out, &res)) - - require.Equal(t, 200, code) - require.Equal(t, 3, len(res)) - require.Nil(t, res[0].Error) - require.Nil(t, res[1].Error) - require.Nil(t, res[2].Error) - }) - - time.Sleep(time.Second) - - t.Run("global RPC override", func(t *testing.T) { - h := make(http.Header) - h.Set("User-Agent", "exempt_agent") - client := NewProxydClientWithHeaders("http://127.0.0.1:8545", h) - limitedRes, codes := spamReqs(t, client, "eth_baz", 429, 2) - // use 1 and 1 here since the limit for eth_baz is 1 - require.Equal(t, 1, codes[429]) - require.Equal(t, 1, codes[200]) - RequireEqualJSON(t, []byte(frontendOverLimitResponseWithID), limitedRes) - }) -} - -func spamReqs(t *testing.T, client *ProxydHTTPClient, method string, limCode int, n int) ([]byte, map[int]int) { - resCh := make(chan *resWithCode) - for i := 0; i < n; i++ { - go func() { - res, code, err := client.SendRPC(method, nil) - require.NoError(t, err) - resCh <- &resWithCode{ - code: code, - res: res, - } - }() - } - - codes := make(map[int]int) - var limitedRes []byte - for i := 0; i < n; i++ { - res := <-resCh - code := res.code - if codes[code] == 0 { - codes[code] = 1 - } else { - codes[code] += 1 - } - - if code == limCode { - limitedRes = res.res - } - } - - return limitedRes, codes -} diff --git a/proxyd/integration_tests/sender_rate_limit_test.go b/proxyd/integration_tests/sender_rate_limit_test.go deleted file mode 100644 index 20c5f0a7cde4..000000000000 --- a/proxyd/integration_tests/sender_rate_limit_test.go +++ /dev/null @@ -1,126 +0,0 @@ -package integration_tests - -import ( - "bufio" - "fmt" - "math" - "os" - "strings" - "testing" - "time" - - "github.com/ethereum-optimism/optimism/proxyd" - "github.com/stretchr/testify/require" -) - -const txHex1 = "0x02f8b28201a406849502f931849502f931830147f9948f3ddd0fbf3e78ca1d6c" + - "d17379ed88e261249b5280b84447e7ef2400000000000000000000000089c8b1" + - "b2774201bac50f627403eac1b732459cf7000000000000000000000000000000" + - "0000000000000000056bc75e2d63100000c080a0473c95566026c312c9664cd6" + - "1145d2f3e759d49209fe96011ac012884ec5b017a0763b58f6fa6096e6ba28ee" + - "08bfac58f58fb3b8bcef5af98578bdeaddf40bde42" - -const txHex2 = "0x02f8758201a48217fd84773594008504a817c80082520894be53e587975603" + - "a13d0923d0aa6d37c5233dd750865af3107a400080c080a04aefbd5819c35729" + - "138fe26b6ae1783ebf08d249b356c2f920345db97877f3f7a008d5ae92560a3c" + - "65f723439887205713af7ce7d7f6b24fba198f2afa03435867" - -const dummyRes = `{"id": 123, "jsonrpc": "2.0", "result": "dummy"}` - -const limRes = `{"error":{"code":-32017,"message":"sender is over rate limit"},"id":1,"jsonrpc":"2.0"}` - -func TestSenderRateLimitValidation(t *testing.T) { - goodBackend := NewMockBackend(SingleResponseHandler(200, dummyRes)) - defer goodBackend.Close() - - require.NoError(t, os.Setenv("GOOD_BACKEND_RPC_URL", goodBackend.URL())) - - config := ReadConfig("sender_rate_limit") - - // Don't perform rate limiting in this test since we're only testing - // validation. - config.SenderRateLimit.Limit = math.MaxInt - client := NewProxydClient("http://127.0.0.1:8545") - _, shutdown, err := proxyd.Start(config) - require.NoError(t, err) - defer shutdown() - - f, err := os.Open("testdata/testdata.txt") - require.NoError(t, err) - defer f.Close() - - scanner := bufio.NewScanner(f) - scanner.Scan() // skip header - for scanner.Scan() { - record := strings.Split(scanner.Text(), "|") - name, body, expResponseBody := record[0], record[1], record[2] - require.NoError(t, err) - t.Run(name, func(t *testing.T) { - res, _, err := client.SendRequest([]byte(body)) - require.NoError(t, err) - RequireEqualJSON(t, []byte(expResponseBody), res) - }) - } -} - -func TestSenderRateLimitLimiting(t *testing.T) { - goodBackend := NewMockBackend(SingleResponseHandler(200, dummyRes)) - defer goodBackend.Close() - - require.NoError(t, os.Setenv("GOOD_BACKEND_RPC_URL", goodBackend.URL())) - - config := ReadConfig("sender_rate_limit") - client := NewProxydClient("http://127.0.0.1:8545") - _, shutdown, err := proxyd.Start(config) - require.NoError(t, err) - defer shutdown() - - // Two separate requests from the same sender - // should be rate limited. - res1, code1, err := client.SendRequest(makeSendRawTransaction(txHex1)) - require.NoError(t, err) - RequireEqualJSON(t, []byte(dummyRes), res1) - require.Equal(t, 200, code1) - res2, code2, err := client.SendRequest(makeSendRawTransaction(txHex1)) - require.NoError(t, err) - RequireEqualJSON(t, []byte(limRes), res2) - require.Equal(t, 429, code2) - - // Clear the limiter. - time.Sleep(1100 * time.Millisecond) - - // Two separate requests from different senders - // should not be rate limited. - res1, code1, err = client.SendRequest(makeSendRawTransaction(txHex1)) - require.NoError(t, err) - res2, code2, err = client.SendRequest(makeSendRawTransaction(txHex2)) - require.NoError(t, err) - RequireEqualJSON(t, []byte(dummyRes), res1) - require.Equal(t, 200, code1) - RequireEqualJSON(t, []byte(dummyRes), res2) - require.Equal(t, 200, code2) - - // Clear the limiter. - time.Sleep(1100 * time.Millisecond) - - // A batch request should rate limit within the batch itself. - batch := []byte(fmt.Sprintf( - `[%s, %s, %s]`, - makeSendRawTransaction(txHex1), - makeSendRawTransaction(txHex1), - makeSendRawTransaction(txHex2), - )) - res, code, err := client.SendRequest(batch) - require.NoError(t, err) - require.Equal(t, 200, code) - RequireEqualJSON(t, []byte(fmt.Sprintf( - `[%s, %s, %s]`, - dummyRes, - limRes, - dummyRes, - )), res) -} - -func makeSendRawTransaction(dataHex string) []byte { - return []byte(`{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":["` + dataHex + `"],"id":1}`) -} diff --git a/proxyd/integration_tests/smoke_test.go b/proxyd/integration_tests/smoke_test.go deleted file mode 100644 index 5fed7571bcec..000000000000 --- a/proxyd/integration_tests/smoke_test.go +++ /dev/null @@ -1,51 +0,0 @@ -package integration_tests - -import ( - "fmt" - "io" - "os" - "strings" - "testing" - - "github.com/ethereum-optimism/optimism/proxyd" - "github.com/ethereum/go-ethereum/log" - "github.com/stretchr/testify/require" -) - -func TestInitProxyd(t *testing.T) { - goodBackend := NewMockBackend(BatchedResponseHandler(200, goodResponse)) - defer goodBackend.Close() - - require.NoError(t, os.Setenv("GOOD_BACKEND_RPC_URL", goodBackend.URL())) - - config := ReadConfig("smoke") - - sysStdOut := os.Stdout - r, w, err := os.Pipe() - require.NoError(t, err) - os.Stdout = w - - proxyd.SetLogLevel(log.LevelInfo) - - defer func() { - w.Close() - out, _ := io.ReadAll(r) - require.True(t, strings.Contains(string(out), "started proxyd")) - require.True(t, strings.Contains(string(out), "shutting down proxyd")) - fmt.Println(string(out)) - os.Stdout = sysStdOut - }() - - _, shutdown, err := proxyd.Start(config) - require.NoError(t, err) - defer shutdown() - - t.Run("initialization", func(t *testing.T) { - client := NewProxydClient("http://127.0.0.1:8545") - res, code, err := client.SendRPC(ethChainID, nil) - require.NoError(t, err) - require.Equal(t, 200, code) - require.NotNil(t, res) - }) - -} diff --git a/proxyd/integration_tests/testdata/batch_timeout.toml b/proxyd/integration_tests/testdata/batch_timeout.toml deleted file mode 100644 index 4238aafeea2f..000000000000 --- a/proxyd/integration_tests/testdata/batch_timeout.toml +++ /dev/null @@ -1,20 +0,0 @@ -[server] -rpc_port = 8545 -timeout_seconds = 1 -max_upstream_batch_size = 1 - -[backend] -response_timeout_seconds = 1 -max_retries = 3 - -[backends] -[backends.slow] -rpc_url = "$SLOW_BACKEND_RPC_URL" -ws_url = "$SLOW_BACKEND_RPC_URL" - -[backend_groups] -[backend_groups.main] -backends = ["slow"] - -[rpc_method_mappings] -eth_chainId = "main" diff --git a/proxyd/integration_tests/testdata/batching.toml b/proxyd/integration_tests/testdata/batching.toml deleted file mode 100644 index 476283597537..000000000000 --- a/proxyd/integration_tests/testdata/batching.toml +++ /dev/null @@ -1,23 +0,0 @@ -[server] -rpc_port = 8545 - -[backend] -response_timeout_seconds = 1 - -[backends] -[backends.good] -rpc_url = "$GOOD_BACKEND_RPC_URL" -ws_url = "$GOOD_BACKEND_RPC_URL" - -[backend_groups] -[backend_groups.main] -backends = ["good"] - -[rpc_method_mappings] -eth_chainId = "main" -net_version = "main" -eth_call = "main" - -[batch] -error_message = "over batch size custom message" -max_size = 5 \ No newline at end of file diff --git a/proxyd/integration_tests/testdata/caching.toml b/proxyd/integration_tests/testdata/caching.toml deleted file mode 100644 index 41bc65b9a785..000000000000 --- a/proxyd/integration_tests/testdata/caching.toml +++ /dev/null @@ -1,36 +0,0 @@ -[server] -rpc_port = 8545 - -[backend] -response_timeout_seconds = 1 - -[redis] -url = "$REDIS_URL" -namespace = "proxyd" - -[cache] -enabled = true - -[backends] -[backends.good] -rpc_url = "$GOOD_BACKEND_RPC_URL" -ws_url = "$GOOD_BACKEND_RPC_URL" - -[backend_groups] -[backend_groups.main] -backends = ["good"] - -[rpc_method_mappings] -eth_chainId = "main" -net_version = "main" -eth_getBlockByNumber = "main" -eth_blockNumber = "main" -eth_call = "main" -eth_getBlockTransactionCountByHash = "main" -eth_getUncleCountByBlockHash = "main" -eth_getBlockByHash = "main" -eth_getTransactionByHash = "main" -eth_getTransactionByBlockHashAndIndex = "main" -eth_getUncleByBlockHashAndIndex = "main" -eth_getTransactionReceipt = "main" -debug_getRawReceipts = "main" diff --git a/proxyd/integration_tests/testdata/consensus.toml b/proxyd/integration_tests/testdata/consensus.toml deleted file mode 100644 index bb130368ea9c..000000000000 --- a/proxyd/integration_tests/testdata/consensus.toml +++ /dev/null @@ -1,30 +0,0 @@ -[server] -rpc_port = 8545 - -[backend] -response_timeout_seconds = 1 -max_degraded_latency_threshold = "30ms" - -[backends] -[backends.node1] -rpc_url = "$NODE1_URL" - -[backends.node2] -rpc_url = "$NODE2_URL" - -[backend_groups] -[backend_groups.node] -backends = ["node1", "node2"] -consensus_aware = true -consensus_handler = "noop" # allow more control over the consensus poller for tests -consensus_ban_period = "1m" -consensus_max_update_threshold = "2m" -consensus_max_block_lag = 8 -consensus_min_peer_count = 4 - -[rpc_method_mappings] -eth_call = "node" -eth_chainId = "node" -eth_blockNumber = "node" -eth_getBlockByNumber = "node" -consensus_getReceipts = "node" diff --git a/proxyd/integration_tests/testdata/consensus_responses.yml b/proxyd/integration_tests/testdata/consensus_responses.yml deleted file mode 100644 index 642c3340f04b..000000000000 --- a/proxyd/integration_tests/testdata/consensus_responses.yml +++ /dev/null @@ -1,234 +0,0 @@ -- method: eth_chainId - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": "hello", - } -- method: net_peerCount - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": "0x10" - } -- method: eth_syncing - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": false - } -- method: eth_getBlockByNumber - block: latest - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash_0x101", - "number": "0x101" - } - } -- method: eth_getBlockByNumber - block: 0x101 - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash_0x101", - "number": "0x101" - } - } -- method: eth_getBlockByNumber - block: 0x102 - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash_0x102", - "number": "0x102" - } - } -- method: eth_getBlockByNumber - block: 0x103 - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash_0x103", - "number": "0x103" - } - } -- method: eth_getBlockByNumber - block: 0x10a - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash_0x10a", - "number": "0x10a" - } - } -- method: eth_getBlockByNumber - block: 0x132 - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash_0x132", - "number": "0x132" - } - } -- method: eth_getBlockByNumber - block: 0x133 - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash_0x133", - "number": "0x133" - } - } -- method: eth_getBlockByNumber - block: 0x134 - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash_0x134", - "number": "0x134" - } - } -- method: eth_getBlockByNumber - block: 0x200 - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash_0x200", - "number": "0x200" - } - } -- method: eth_getBlockByNumber - block: 0x91 - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash_0x91", - "number": "0x91" - } - } -- method: eth_getBlockByNumber - block: safe - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash_0xe1", - "number": "0xe1" - } - } -- method: eth_getBlockByNumber - block: 0xe1 - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash_0xe1", - "number": "0xe1" - } - } -- method: eth_getBlockByNumber - block: finalized - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash_0xc1", - "number": "0xc1" - } - } -- method: eth_getBlockByNumber - block: 0xc1 - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash_0xc1", - "number": "0xc1" - } - } -- method: eth_getBlockByNumber - block: 0xd1 - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash_0xd1", - "number": "0xd1" - } - } -- method: debug_getRawReceipts - block: 0x55 - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "_": "debug_getRawReceipts" - } - } -- method: debug_getRawReceipts - block: 0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "_": "debug_getRawReceipts" - } - } -- method: debug_getRawReceipts - block: 0x101 - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "_": "debug_getRawReceipts" - } - } -- method: eth_getTransactionReceipt - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "_": "eth_getTransactionReceipt" - } - } -- method: alchemy_getTransactionReceipts - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "_": "alchemy_getTransactionReceipts" - } - } diff --git a/proxyd/integration_tests/testdata/failover.toml b/proxyd/integration_tests/testdata/failover.toml deleted file mode 100644 index 80ff99045f34..000000000000 --- a/proxyd/integration_tests/testdata/failover.toml +++ /dev/null @@ -1,20 +0,0 @@ -[server] -rpc_port = 8545 - -[backend] -response_timeout_seconds = 1 - -[backends] -[backends.good] -rpc_url = "$GOOD_BACKEND_RPC_URL" -ws_url = "$GOOD_BACKEND_RPC_URL" -[backends.bad] -rpc_url = "$BAD_BACKEND_RPC_URL" -ws_url = "$BAD_BACKEND_RPC_URL" - -[backend_groups] -[backend_groups.main] -backends = ["bad", "good"] - -[rpc_method_mappings] -eth_chainId = "main" \ No newline at end of file diff --git a/proxyd/integration_tests/testdata/fallback.toml b/proxyd/integration_tests/testdata/fallback.toml deleted file mode 100644 index c801ca3a8980..000000000000 --- a/proxyd/integration_tests/testdata/fallback.toml +++ /dev/null @@ -1,31 +0,0 @@ -[server] -rpc_port = 8545 - -[backend] -response_timeout_seconds = 1 -max_degraded_latency_threshold = "30ms" - -[backends] -[backends.normal] -rpc_url = "$NODE1_URL" - -[backends.fallback] -rpc_url = "$NODE2_URL" - -[backend_groups] -[backend_groups.node] -backends = ["normal", "fallback"] -consensus_aware = true -consensus_handler = "noop" # allow more control over the consensus poller for tests -consensus_ban_period = "1m" -consensus_max_update_threshold = "2m" -consensus_max_block_lag = 8 -consensus_min_peer_count = 4 -fallbacks = ["fallback"] - -[rpc_method_mappings] -eth_call = "node" -eth_chainId = "node" -eth_blockNumber = "node" -eth_getBlockByNumber = "node" -consensus_getReceipts = "node" diff --git a/proxyd/integration_tests/testdata/frontend_rate_limit.toml b/proxyd/integration_tests/testdata/frontend_rate_limit.toml deleted file mode 100644 index 8aa9d19f8f68..000000000000 --- a/proxyd/integration_tests/testdata/frontend_rate_limit.toml +++ /dev/null @@ -1,35 +0,0 @@ -[server] -rpc_port = 8545 - -[backend] -response_timeout_seconds = 1 - -[backends] -[backends.good] -rpc_url = "$GOOD_BACKEND_RPC_URL" -ws_url = "$GOOD_BACKEND_RPC_URL" - -[backend_groups] -[backend_groups.main] -backends = ["good"] - -[rpc_method_mappings] -eth_chainId = "main" -eth_foobar = "main" -eth_baz = "main" - -[rate_limit] -base_rate = 2 -base_interval = "1s" -exempt_origins = ["exempt_origin"] -exempt_user_agents = ["exempt_agent"] -error_message = "over rate limit with special message" - -[rate_limit.method_overrides.eth_foobar] -limit = 1 -interval = "1s" - -[rate_limit.method_overrides.eth_baz] -limit = 1 -interval = "1s" -global = true \ No newline at end of file diff --git a/proxyd/integration_tests/testdata/max_rpc_conns.toml b/proxyd/integration_tests/testdata/max_rpc_conns.toml deleted file mode 100644 index 68d7c19c72ef..000000000000 --- a/proxyd/integration_tests/testdata/max_rpc_conns.toml +++ /dev/null @@ -1,19 +0,0 @@ -[server] -rpc_port = 8545 -max_concurrent_rpcs = 2 - -[backend] -# this should cover blocked requests due to max_concurrent_rpcs -response_timeout_seconds = 12 - -[backends] -[backends.good] -rpc_url = "$GOOD_BACKEND_RPC_URL" -ws_url = "$GOOD_BACKEND_RPC_URL" - -[backend_groups] -[backend_groups.main] -backends = ["good"] - -[rpc_method_mappings] -eth_chainId = "main" diff --git a/proxyd/integration_tests/testdata/out_of_service_interval.toml b/proxyd/integration_tests/testdata/out_of_service_interval.toml deleted file mode 100644 index 157fa06c18ab..000000000000 --- a/proxyd/integration_tests/testdata/out_of_service_interval.toml +++ /dev/null @@ -1,22 +0,0 @@ -[server] -rpc_port = 8545 - -[backend] -response_timeout_seconds = 1 -max_retries = 1 -out_of_service_seconds = 1 - -[backends] -[backends.good] -rpc_url = "$GOOD_BACKEND_RPC_URL" -ws_url = "$GOOD_BACKEND_RPC_URL" -[backends.bad] -rpc_url = "$BAD_BACKEND_RPC_URL" -ws_url = "$BAD_BACKEND_RPC_URL" - -[backend_groups] -[backend_groups.main] -backends = ["bad", "good"] - -[rpc_method_mappings] -eth_chainId = "main" diff --git a/proxyd/integration_tests/testdata/retries.toml b/proxyd/integration_tests/testdata/retries.toml deleted file mode 100644 index dc9466dddcf1..000000000000 --- a/proxyd/integration_tests/testdata/retries.toml +++ /dev/null @@ -1,18 +0,0 @@ -[server] -rpc_port = 8545 - -[backend] -response_timeout_seconds = 1 -max_retries = 3 - -[backends] -[backends.good] -rpc_url = "$GOOD_BACKEND_RPC_URL" -ws_url = "$GOOD_BACKEND_RPC_URL" - -[backend_groups] -[backend_groups.main] -backends = ["good"] - -[rpc_method_mappings] -eth_chainId = "main" \ No newline at end of file diff --git a/proxyd/integration_tests/testdata/sender_rate_limit.toml b/proxyd/integration_tests/testdata/sender_rate_limit.toml deleted file mode 100644 index c99959d84a91..000000000000 --- a/proxyd/integration_tests/testdata/sender_rate_limit.toml +++ /dev/null @@ -1,24 +0,0 @@ -[server] -rpc_port = 8545 - -[backend] -response_timeout_seconds = 1 - -[backends] -[backends.good] -rpc_url = "$GOOD_BACKEND_RPC_URL" -ws_url = "$GOOD_BACKEND_RPC_URL" - -[backend_groups] -[backend_groups.main] -backends = ["good"] - -[rpc_method_mappings] -eth_chainId = "main" -eth_sendRawTransaction = "main" - -[sender_rate_limit] -allowed_chain_ids = [0, 420] # adding 0 allows pre-EIP-155 transactions -enabled = true -interval = "1s" -limit = 1 diff --git a/proxyd/integration_tests/testdata/size_limits.toml b/proxyd/integration_tests/testdata/size_limits.toml deleted file mode 100644 index bd4afab534b9..000000000000 --- a/proxyd/integration_tests/testdata/size_limits.toml +++ /dev/null @@ -1,21 +0,0 @@ -whitelist_error_message = "rpc method is not whitelisted custom message" - -[server] -rpc_port = 8545 -max_request_body_size_bytes = 150 - -[backend] -response_timeout_seconds = 1 -max_response_size_bytes = 1 - -[backends] -[backends.good] -rpc_url = "$GOOD_BACKEND_RPC_URL" -ws_url = "$GOOD_BACKEND_RPC_URL" - -[backend_groups] -[backend_groups.main] -backends = ["good"] - -[rpc_method_mappings] -eth_chainId = "main" \ No newline at end of file diff --git a/proxyd/integration_tests/testdata/smoke.toml b/proxyd/integration_tests/testdata/smoke.toml deleted file mode 100644 index a2187a25055d..000000000000 --- a/proxyd/integration_tests/testdata/smoke.toml +++ /dev/null @@ -1,18 +0,0 @@ -[server] -rpc_port = 8545 - -[backend] -response_timeout_seconds = 1 - -[backends] -[backends.good] -rpc_url = "$GOOD_BACKEND_RPC_URL" -ws_url = "$GOOD_BACKEND_RPC_URL" - -[backend_groups] -[backend_groups.main] -backends = ["good"] - -[rpc_method_mappings] -eth_chainId = "main" - diff --git a/proxyd/integration_tests/testdata/testdata.txt b/proxyd/integration_tests/testdata/testdata.txt deleted file mode 100644 index 4bdd635a38fc..000000000000 --- a/proxyd/integration_tests/testdata/testdata.txt +++ /dev/null @@ -1,14 +0,0 @@ -name|body|responseBody -not json|not json|{"jsonrpc":"2.0","error":{"code":-32700,"message":"parse error"},"id":null} -not json-rpc|{"foo":"bar"}|{"jsonrpc":"2.0","error":{"code":-32600,"message":"invalid JSON-RPC version"},"id":null} -missing fields json-rpc|{"jsonrpc":"2.0"}|{"jsonrpc":"2.0","error":{"code":-32600,"message":"no method specified"},"id":null} -bad method json-rpc|{"jsonrpc":"2.0","method":"eth_notSendRawTransaction","id":1}|{"jsonrpc":"2.0","error":{"code":-32601,"message":"rpc method is not whitelisted"},"id":1} -no transaction data|{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[],"id":1}|{"jsonrpc":"2.0","error":{"code":-32602,"message":"missing value for required argument 0"},"id":1} -invalid transaction data|{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":["0xf6806872fcc650ad4e77e0629206426cd183d751e9ddcc8d5e77"],"id":1}|{"jsonrpc":"2.0","error":{"code":-32602,"message":"rlp: value size exceeds available input length"},"id":1} -invalid transaction data|{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":["0x1234"],"id":1}|{"jsonrpc":"2.0","error":{"code":-32602,"message":"transaction type not supported"},"id":1} -valid transaction data - simple send|{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":["0x02f8748201a415843b9aca31843b9aca3182520894f80267194936da1e98db10bce06f3147d580a62e880de0b6b3a764000080c001a0b50ee053102360ff5fedf0933b912b7e140c90fe57fa07a0cebe70dbd72339dda072974cb7bfe5c3dc54dde110e2b049408ccab8a879949c3b4d42a3a7555a618b"],"id":1}|{"id": 123, "jsonrpc": "2.0", "result": "dummy"} -valid transaction data - contract call|{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":["0x02f8b28201a406849502f931849502f931830147f9948f3ddd0fbf3e78ca1d6cd17379ed88e261249b5280b84447e7ef2400000000000000000000000089c8b1b2774201bac50f627403eac1b732459cf70000000000000000000000000000000000000000000000056bc75e2d63100000c080a0473c95566026c312c9664cd61145d2f3e759d49209fe96011ac012884ec5b017a0763b58f6fa6096e6ba28ee08bfac58f58fb3b8bcef5af98578bdeaddf40bde42"],"id":1}|{"id": 123, "jsonrpc": "2.0", "result": "dummy"} -valid chain id - simple send|{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":["0x02f8748201a415843b9aca31843b9aca3182520894f80267194936da1e98db10bce06f3147d580a62e880de0b6b3a764000080c001a0b50ee053102360ff5fedf0933b912b7e140c90fe57fa07a0cebe70dbd72339dda072974cb7bfe5c3dc54dde110e2b049408ccab8a879949c3b4d42a3a7555a618b"],"id":1}|{"id": 123, "jsonrpc": "2.0", "result": "dummy"} -invalid chain id - simple send|{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":["0x02f87683ab41308217af84773594008504a817c80082520894be53e587975603a13d0923d0aa6d37c5233dd750865af3107a400080c001a04ae265f17e882b922d39f0f0cb058a6378df1dc89da8b8165ab6bc53851b426aa0682079486be2aa23bc7514477473362cc7d63afa12c99f7d8fb15e68d69d9a48"],"id":1}|{"jsonrpc":"2.0","error":{"code":-32000,"message":"invalid sender"},"id":1} -no chain id (pre eip-155) - simple send|{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":["0xf865808609184e72a00082271094000000000000000000000000000000000000000001001ba0d937ddb66e7788f917864b8e6974cac376b091154db1c25ff8429a6e61016e74a054ced39349e7658b7efceccfabc461e02418eb510124377949cfae8ccf1831af"],"id":1}|{"id": 123, "jsonrpc": "2.0", "result": "dummy"} -batch with mixed results|[{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":["0x02f87683ab41308217af84773594008504a817c80082520894be53e587975603a13d0923d0aa6d37c5233dd750865af3107a400080c001a04ae265f17e882b922d39f0f0cb058a6378df1dc89da8b8165ab6bc53851b426aa0682079486be2aa23bc7514477473362cc7d63afa12c99f7d8fb15e68d69d9a48"],"id":1},{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":["0x02f8748201a415843b9aca31843b9aca3182520894f80267194936da1e98db10bce06f3147d580a62e880de0b6b3a764000080c001a0b50ee053102360ff5fedf0933b912b7e140c90fe57fa07a0cebe70dbd72339dda072974cb7bfe5c3dc54dde110e2b049408ccab8a879949c3b4d42a3a7555a618b"],"id":1},{"bad":"json"},{"jsonrpc":"2.0","method":"eth_fooTheBar","params":[],"id":123}]|[{"jsonrpc":"2.0","error":{"code":-32000,"message":"invalid sender"},"id":1},{"id": 123, "jsonrpc": "2.0", "result": "dummy"},{"jsonrpc":"2.0","error":{"code":-32600,"message":"invalid JSON-RPC version"},"id":null},{"jsonrpc":"2.0","error":{"code":-32601,"message":"rpc method is not whitelisted"},"id":123}] diff --git a/proxyd/integration_tests/testdata/whitelist.toml b/proxyd/integration_tests/testdata/whitelist.toml deleted file mode 100644 index 4a65248d7162..000000000000 --- a/proxyd/integration_tests/testdata/whitelist.toml +++ /dev/null @@ -1,19 +0,0 @@ -whitelist_error_message = "rpc method is not whitelisted custom message" - -[server] -rpc_port = 8545 - -[backend] -response_timeout_seconds = 1 - -[backends] -[backends.good] -rpc_url = "$GOOD_BACKEND_RPC_URL" -ws_url = "$GOOD_BACKEND_RPC_URL" - -[backend_groups] -[backend_groups.main] -backends = ["good"] - -[rpc_method_mappings] -eth_chainId = "main" \ No newline at end of file diff --git a/proxyd/integration_tests/testdata/ws.toml b/proxyd/integration_tests/testdata/ws.toml deleted file mode 100644 index 4642e6bc0fc9..000000000000 --- a/proxyd/integration_tests/testdata/ws.toml +++ /dev/null @@ -1,28 +0,0 @@ -whitelist_error_message = "rpc method is not whitelisted" - -ws_backend_group = "main" - -ws_method_whitelist = [ - "eth_subscribe", - "eth_accounts" -] - -[server] -rpc_port = 8545 -ws_port = 8546 - -[backend] -response_timeout_seconds = 1 - -[backends] -[backends.good] -rpc_url = "$GOOD_BACKEND_RPC_URL" -ws_url = "$GOOD_BACKEND_RPC_URL" -max_ws_conns = 1 - -[backend_groups] -[backend_groups.main] -backends = ["good"] - -[rpc_method_mappings] -eth_chainId = "main" diff --git a/proxyd/integration_tests/util_test.go b/proxyd/integration_tests/util_test.go deleted file mode 100644 index 36edce13ef78..000000000000 --- a/proxyd/integration_tests/util_test.go +++ /dev/null @@ -1,191 +0,0 @@ -package integration_tests - -import ( - "bytes" - "encoding/json" - "fmt" - "io" - "net/http" - "os" - "testing" - "time" - - "github.com/BurntSushi/toml" - "github.com/gorilla/websocket" - "github.com/stretchr/testify/require" - "golang.org/x/exp/slog" - - "github.com/ethereum/go-ethereum/log" - - "github.com/ethereum-optimism/optimism/proxyd" -) - -type ProxydHTTPClient struct { - url string - headers http.Header -} - -func NewProxydClient(url string) *ProxydHTTPClient { - return NewProxydClientWithHeaders(url, make(http.Header)) -} - -func NewProxydClientWithHeaders(url string, headers http.Header) *ProxydHTTPClient { - clonedHeaders := headers.Clone() - clonedHeaders.Set("Content-Type", "application/json") - return &ProxydHTTPClient{ - url: url, - headers: clonedHeaders, - } -} - -func (p *ProxydHTTPClient) SendRPC(method string, params []interface{}) ([]byte, int, error) { - rpcReq := NewRPCReq("999", method, params) - body, err := json.Marshal(rpcReq) - if err != nil { - panic(err) - } - return p.SendRequest(body) -} - -func (p *ProxydHTTPClient) SendBatchRPC(reqs ...*proxyd.RPCReq) ([]byte, int, error) { - body, err := json.Marshal(reqs) - if err != nil { - panic(err) - } - return p.SendRequest(body) -} - -func (p *ProxydHTTPClient) SendRequest(body []byte) ([]byte, int, error) { - req, err := http.NewRequest("POST", p.url, bytes.NewReader(body)) - if err != nil { - panic(err) - } - req.Header = p.headers - - res, err := http.DefaultClient.Do(req) - if err != nil { - return nil, -1, err - } - defer res.Body.Close() - code := res.StatusCode - resBody, err := io.ReadAll(res.Body) - if err != nil { - panic(err) - } - return resBody, code, nil -} - -func RequireEqualJSON(t *testing.T, expected []byte, actual []byte) { - expJSON := canonicalizeJSON(t, expected) - actJSON := canonicalizeJSON(t, actual) - require.Equal(t, string(expJSON), string(actJSON)) -} - -func canonicalizeJSON(t *testing.T, in []byte) []byte { - var any interface{} - if in[0] == '[' { - any = make([]interface{}, 0) - } else { - any = make(map[string]interface{}) - } - - err := json.Unmarshal(in, &any) - require.NoError(t, err) - out, err := json.Marshal(any) - require.NoError(t, err) - return out -} - -func ReadConfig(name string) *proxyd.Config { - config := new(proxyd.Config) - _, err := toml.DecodeFile(fmt.Sprintf("testdata/%s.toml", name), config) - if err != nil { - panic(err) - } - return config -} - -func NewRPCReq(id string, method string, params []interface{}) *proxyd.RPCReq { - jsonParams, err := json.Marshal(params) - if err != nil { - panic(err) - } - - return &proxyd.RPCReq{ - JSONRPC: proxyd.JSONRPCVersion, - Method: method, - Params: jsonParams, - ID: []byte(id), - } -} - -type ProxydWSClient struct { - conn *websocket.Conn - msgCB ProxydWSClientOnMessage - closeCB ProxydWSClientOnClose -} - -type WSMessage struct { - Type int - Body []byte -} - -type ( - ProxydWSClientOnMessage func(msgType int, data []byte) - ProxydWSClientOnClose func(err error) -) - -func NewProxydWSClient( - url string, - msgCB ProxydWSClientOnMessage, - closeCB ProxydWSClientOnClose, -) (*ProxydWSClient, error) { - conn, _, err := websocket.DefaultDialer.Dial(url, nil) // nolint:bodyclose - if err != nil { - return nil, err - } - - c := &ProxydWSClient{ - conn: conn, - msgCB: msgCB, - closeCB: closeCB, - } - go c.readPump() - return c, nil -} - -func (h *ProxydWSClient) readPump() { - for { - mType, msg, err := h.conn.ReadMessage() - if err != nil { - if h.closeCB != nil { - h.closeCB(err) - } - return - } - if h.msgCB != nil { - h.msgCB(mType, msg) - } - } -} - -func (h *ProxydWSClient) HardClose() { - h.conn.Close() -} - -func (h *ProxydWSClient) SoftClose() error { - return h.WriteMessage(websocket.CloseMessage, nil) -} - -func (h *ProxydWSClient) WriteMessage(msgType int, msg []byte) error { - return h.conn.WriteMessage(msgType, msg) -} - -func (h *ProxydWSClient) WriteControlMessage(msgType int, msg []byte) error { - return h.conn.WriteControl(msgType, msg, time.Now().Add(time.Minute)) -} - -func InitLogger() { - log.SetDefault(log.NewLogger(slog.NewJSONHandler( - os.Stdout, &slog.HandlerOptions{Level: slog.LevelDebug}))) -} diff --git a/proxyd/integration_tests/validation_test.go b/proxyd/integration_tests/validation_test.go deleted file mode 100644 index 95cfc295b7aa..000000000000 --- a/proxyd/integration_tests/validation_test.go +++ /dev/null @@ -1,258 +0,0 @@ -package integration_tests - -import ( - "fmt" - "os" - "strings" - "testing" - - "github.com/ethereum-optimism/optimism/proxyd" - "github.com/stretchr/testify/require" -) - -const ( - notWhitelistedResponse = `{"jsonrpc":"2.0","error":{"code":-32601,"message":"rpc method is not whitelisted custom message"},"id":999}` - parseErrResponse = `{"jsonrpc":"2.0","error":{"code":-32700,"message":"parse error"},"id":null}` - invalidJSONRPCVersionResponse = `{"error":{"code":-32600,"message":"invalid JSON-RPC version"},"id":null,"jsonrpc":"2.0"}` - invalidIDResponse = `{"error":{"code":-32600,"message":"invalid ID"},"id":null,"jsonrpc":"2.0"}` - invalidMethodResponse = `{"error":{"code":-32600,"message":"no method specified"},"id":null,"jsonrpc":"2.0"}` - invalidBatchLenResponse = `{"error":{"code":-32600,"message":"must specify at least one batch call"},"id":null,"jsonrpc":"2.0"}` -) - -func TestSingleRPCValidation(t *testing.T) { - goodBackend := NewMockBackend(BatchedResponseHandler(200, goodResponse)) - defer goodBackend.Close() - - require.NoError(t, os.Setenv("GOOD_BACKEND_RPC_URL", goodBackend.URL())) - - config := ReadConfig("whitelist") - client := NewProxydClient("http://127.0.0.1:8545") - _, shutdown, err := proxyd.Start(config) - require.NoError(t, err) - defer shutdown() - - tests := []struct { - name string - body string - res string - code int - }{ - { - "body not JSON", - "this ain't an RPC call", - parseErrResponse, - 400, - }, - { - "body not RPC", - "{\"not\": \"rpc\"}", - invalidJSONRPCVersionResponse, - 400, - }, - { - "body missing RPC ID", - "{\"jsonrpc\": \"2.0\", \"method\": \"subtract\", \"params\": [42, 23]}", - invalidIDResponse, - 400, - }, - { - "body has array ID", - "{\"jsonrpc\": \"2.0\", \"method\": \"subtract\", \"params\": [42, 23], \"id\": []}", - invalidIDResponse, - 400, - }, - { - "body has object ID", - "{\"jsonrpc\": \"2.0\", \"method\": \"subtract\", \"params\": [42, 23], \"id\": {}}", - invalidIDResponse, - 400, - }, - { - "bad method", - "{\"jsonrpc\": \"2.0\", \"method\": 7, \"params\": [42, 23], \"id\": 1}", - parseErrResponse, - 400, - }, - { - "bad JSON-RPC", - "{\"jsonrpc\": \"1.0\", \"method\": \"subtract\", \"params\": [42, 23], \"id\": 1}", - invalidJSONRPCVersionResponse, - 400, - }, - { - "omitted method", - "{\"jsonrpc\": \"2.0\", \"params\": [42, 23], \"id\": 1}", - invalidMethodResponse, - 400, - }, - { - "not whitelisted method", - "{\"jsonrpc\": \"2.0\", \"method\": \"subtract\", \"params\": [42, 23], \"id\": 999}", - notWhitelistedResponse, - 403, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - res, code, err := client.SendRequest([]byte(tt.body)) - require.NoError(t, err) - RequireEqualJSON(t, []byte(tt.res), res) - require.Equal(t, tt.code, code) - require.Equal(t, 0, len(goodBackend.Requests())) - }) - } -} - -func TestBatchRPCValidation(t *testing.T) { - goodBackend := NewMockBackend(BatchedResponseHandler(200, goodResponse)) - defer goodBackend.Close() - - require.NoError(t, os.Setenv("GOOD_BACKEND_RPC_URL", goodBackend.URL())) - - config := ReadConfig("whitelist") - client := NewProxydClient("http://127.0.0.1:8545") - _, shutdown, err := proxyd.Start(config) - require.NoError(t, err) - defer shutdown() - - tests := []struct { - name string - body string - res string - code int - reqCount int - }{ - { - "empty batch", - "[]", - invalidBatchLenResponse, - 400, - 0, - }, - { - "bad json", - "[{,]", - parseErrResponse, - 400, - 0, - }, - { - "not object in batch", - "[123]", - asArray(parseErrResponse), - 200, - 0, - }, - { - "body not RPC", - "[{\"not\": \"rpc\"}]", - asArray(invalidJSONRPCVersionResponse), - 200, - 0, - }, - { - "body missing RPC ID", - "[{\"jsonrpc\": \"2.0\", \"method\": \"subtract\", \"params\": [42, 23]}]", - asArray(invalidIDResponse), - 200, - 0, - }, - { - "body has array ID", - "[{\"jsonrpc\": \"2.0\", \"method\": \"subtract\", \"params\": [42, 23], \"id\": []}]", - asArray(invalidIDResponse), - 200, - 0, - }, - { - "body has object ID", - "[{\"jsonrpc\": \"2.0\", \"method\": \"subtract\", \"params\": [42, 23], \"id\": {}}]", - asArray(invalidIDResponse), - 200, - 0, - }, - // this happens because we can't deserialize the method into a non - // string value, and it blows up the parsing for the whole request. - { - "bad method", - "[{\"error\":{\"code\":-32600,\"message\":\"invalid request\"},\"id\":null,\"jsonrpc\":\"2.0\"}]", - asArray(invalidMethodResponse), - 200, - 0, - }, - { - "bad JSON-RPC", - "[{\"jsonrpc\": \"1.0\", \"method\": \"subtract\", \"params\": [42, 23], \"id\": 1}]", - asArray(invalidJSONRPCVersionResponse), - 200, - 0, - }, - { - "omitted method", - "[{\"jsonrpc\": \"2.0\", \"params\": [42, 23], \"id\": 1}]", - asArray(invalidMethodResponse), - 200, - 0, - }, - { - "not whitelisted method", - "[{\"jsonrpc\": \"2.0\", \"method\": \"subtract\", \"params\": [42, 23], \"id\": 999}]", - asArray(notWhitelistedResponse), - 200, - 0, - }, - { - "mixed", - asArray( - "{\"jsonrpc\": \"2.0\", \"method\": \"subtract\", \"params\": [42, 23], \"id\": 999}", - "{\"jsonrpc\": \"2.0\", \"method\": \"eth_chainId\", \"params\": [], \"id\": 123}", - "123", - ), - asArray( - notWhitelistedResponse, - goodResponse, - parseErrResponse, - ), - 200, - 1, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - res, code, err := client.SendRequest([]byte(tt.body)) - require.NoError(t, err) - RequireEqualJSON(t, []byte(tt.res), res) - require.Equal(t, tt.code, code) - require.Equal(t, tt.reqCount, len(goodBackend.Requests())) - }) - } -} - -func TestSizeLimits(t *testing.T) { - goodBackend := NewMockBackend(BatchedResponseHandler(200, goodResponse)) - defer goodBackend.Close() - - require.NoError(t, os.Setenv("GOOD_BACKEND_RPC_URL", goodBackend.URL())) - - config := ReadConfig("size_limits") - client := NewProxydClient("http://127.0.0.1:8545") - _, shutdown, err := proxyd.Start(config) - require.NoError(t, err) - defer shutdown() - - payload := strings.Repeat("barf", 1024*1024) - out, code, err := client.SendRequest([]byte(fmt.Sprintf(`{"jsonrpc": "2.0", "method": "eth_chainId", "params": [%s], "id": 1}`, payload))) - require.NoError(t, err) - require.Equal(t, `{"jsonrpc":"2.0","error":{"code":-32021,"message":"request body too large"},"id":null}`, strings.TrimSpace(string(out))) - require.Equal(t, 413, code) - - // The default response is already over the size limit in size_limits.toml. - out, code, err = client.SendRequest([]byte(`{"jsonrpc": "2.0", "method": "eth_chainId", "params": [], "id": 1}`)) - require.NoError(t, err) - require.Equal(t, `{"jsonrpc":"2.0","error":{"code":-32020,"message":"backend response too large"},"id":1}`, strings.TrimSpace(string(out))) - require.Equal(t, 500, code) -} - -func asArray(in ...string) string { - return "[" + strings.Join(in, ",") + "]" -} diff --git a/proxyd/integration_tests/ws_test.go b/proxyd/integration_tests/ws_test.go deleted file mode 100644 index d52cfab5cdd7..000000000000 --- a/proxyd/integration_tests/ws_test.go +++ /dev/null @@ -1,241 +0,0 @@ -package integration_tests - -import ( - "os" - "strings" - "sync/atomic" - "testing" - "time" - - "github.com/ethereum-optimism/optimism/proxyd" - "github.com/gorilla/websocket" - "github.com/stretchr/testify/require" -) - -type backendHandler struct { - msgCB atomic.Value - closeCB atomic.Value -} - -func (b *backendHandler) MsgCB(conn *websocket.Conn, msgType int, data []byte) { - cb := b.msgCB.Load() - if cb == nil { - return - } - cb.(MockWSBackendOnMessage)(conn, msgType, data) -} - -func (b *backendHandler) SetMsgCB(cb MockWSBackendOnMessage) { - b.msgCB.Store(cb) -} - -func (b *backendHandler) CloseCB(conn *websocket.Conn, err error) { - cb := b.closeCB.Load() - if cb == nil { - return - } - cb.(MockWSBackendOnClose)(conn, err) -} - -func (b *backendHandler) SetCloseCB(cb MockWSBackendOnClose) { - b.closeCB.Store(cb) -} - -type clientHandler struct { - msgCB atomic.Value -} - -func (c *clientHandler) MsgCB(msgType int, data []byte) { - cb := c.msgCB.Load().(ProxydWSClientOnMessage) - if cb == nil { - return - } - cb(msgType, data) -} - -func (c *clientHandler) SetMsgCB(cb ProxydWSClientOnMessage) { - c.msgCB.Store(cb) -} - -func TestWS(t *testing.T) { - backendHdlr := new(backendHandler) - clientHdlr := new(clientHandler) - - backend := NewMockWSBackend(nil, func(conn *websocket.Conn, msgType int, data []byte) { - backendHdlr.MsgCB(conn, msgType, data) - }, func(conn *websocket.Conn, err error) { - backendHdlr.CloseCB(conn, err) - }) - defer backend.Close() - - require.NoError(t, os.Setenv("GOOD_BACKEND_RPC_URL", backend.URL())) - - config := ReadConfig("ws") - _, shutdown, err := proxyd.Start(config) - require.NoError(t, err) - client, err := NewProxydWSClient("ws://127.0.0.1:8546", func(msgType int, data []byte) { - clientHdlr.MsgCB(msgType, data) - }, nil) - defer client.HardClose() - require.NoError(t, err) - defer shutdown() - - tests := []struct { - name string - backendRes string - expRes string - clientReq string - }{ - { - "ok response", - "{\"jsonrpc\":\"2.0\",\"id\":1,\"result\":\"0xcd0c3e8af590364c09d0fa6a1210faf5\"}", - "{\"jsonrpc\":\"2.0\",\"id\":1,\"result\":\"0xcd0c3e8af590364c09d0fa6a1210faf5\"}", - "{\"id\": 1, \"method\": \"eth_subscribe\", \"params\": [\"newHeads\"]}", - }, - { - "garbage backend response", - "gibblegabble", - "{\"jsonrpc\":\"2.0\",\"error\":{\"code\":-32013,\"message\":\"backend returned an invalid response\"},\"id\":null}", - "{\"id\": 1, \"method\": \"eth_subscribe\", \"params\": [\"newHeads\"]}", - }, - { - "blacklisted RPC", - "}", - "{\"jsonrpc\":\"2.0\",\"error\":{\"code\":-32601,\"message\":\"rpc method is not whitelisted\"},\"id\":1}", - "{\"id\": 1, \"method\": \"eth_whatever\", \"params\": []}", - }, - { - "garbage client request", - "{}", - "{\"jsonrpc\":\"2.0\",\"error\":{\"code\":-32700,\"message\":\"parse error\"},\"id\":null}", - "barf", - }, - { - "invalid client request", - "{}", - "{\"jsonrpc\":\"2.0\",\"error\":{\"code\":-32700,\"message\":\"parse error\"},\"id\":null}", - "{\"jsonrpc\": \"2.0\", \"method\": true}", - }, - { - "eth_accounts", - "{}", - "{\"jsonrpc\":\"2.0\",\"result\":[],\"id\":1}", - "{\"jsonrpc\": \"2.0\", \"method\": \"eth_accounts\", \"id\": 1}", - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - timeout := time.NewTicker(10 * time.Second) - doneCh := make(chan struct{}, 1) - backendHdlr.SetMsgCB(func(conn *websocket.Conn, msgType int, data []byte) { - require.NoError(t, conn.WriteMessage(websocket.TextMessage, []byte(tt.backendRes))) - }) - clientHdlr.SetMsgCB(func(msgType int, data []byte) { - require.Equal(t, tt.expRes, string(data)) - doneCh <- struct{}{} - }) - require.NoError(t, client.WriteMessage( - websocket.TextMessage, - []byte(tt.clientReq), - )) - select { - case <-timeout.C: - t.Fatalf("timed out") - case <-doneCh: - return - } - }) - } -} - -func TestWSClientClosure(t *testing.T) { - backendHdlr := new(backendHandler) - clientHdlr := new(clientHandler) - - backend := NewMockWSBackend(nil, func(conn *websocket.Conn, msgType int, data []byte) { - backendHdlr.MsgCB(conn, msgType, data) - }, func(conn *websocket.Conn, err error) { - backendHdlr.CloseCB(conn, err) - }) - defer backend.Close() - - require.NoError(t, os.Setenv("GOOD_BACKEND_RPC_URL", backend.URL())) - - config := ReadConfig("ws") - _, shutdown, err := proxyd.Start(config) - require.NoError(t, err) - defer shutdown() - - for _, closeType := range []string{"soft", "hard"} { - t.Run(closeType, func(t *testing.T) { - client, err := NewProxydWSClient("ws://127.0.0.1:8546", func(msgType int, data []byte) { - clientHdlr.MsgCB(msgType, data) - }, nil) - require.NoError(t, err) - - timeout := time.NewTicker(30 * time.Second) - doneCh := make(chan struct{}, 1) - backendHdlr.SetCloseCB(func(conn *websocket.Conn, err error) { - doneCh <- struct{}{} - }) - - if closeType == "soft" { - require.NoError(t, client.SoftClose()) - } else { - client.HardClose() - } - - select { - case <-timeout.C: - t.Fatalf("timed out") - case <-doneCh: - return - } - }) - } -} - -func TestWSClientExceedReadLimit(t *testing.T) { - backendHdlr := new(backendHandler) - clientHdlr := new(clientHandler) - - backend := NewMockWSBackend(nil, func(conn *websocket.Conn, msgType int, data []byte) { - backendHdlr.MsgCB(conn, msgType, data) - }, func(conn *websocket.Conn, err error) { - backendHdlr.CloseCB(conn, err) - }) - defer backend.Close() - - require.NoError(t, os.Setenv("GOOD_BACKEND_RPC_URL", backend.URL())) - - config := ReadConfig("ws") - _, shutdown, err := proxyd.Start(config) - require.NoError(t, err) - defer shutdown() - - client, err := NewProxydWSClient("ws://127.0.0.1:8546", func(msgType int, data []byte) { - clientHdlr.MsgCB(msgType, data) - }, nil) - require.NoError(t, err) - - closed := false - originalHandler := client.conn.CloseHandler() - client.conn.SetCloseHandler(func(code int, text string) error { - closed = true - return originalHandler(code, text) - }) - - backendHdlr.SetMsgCB(func(conn *websocket.Conn, msgType int, data []byte) { - t.Fatalf("backend should not get the large message") - }) - - payload := strings.Repeat("barf", 1024*1024) - clientReq := "{\"id\": 1, \"method\": \"eth_subscribe\", \"params\": [\"" + payload + "\"]}" - err = client.WriteMessage( - websocket.TextMessage, - []byte(clientReq), - ) - require.Error(t, err) - require.True(t, closed) - -} diff --git a/proxyd/methods.go b/proxyd/methods.go deleted file mode 100644 index 08ea773288ab..000000000000 --- a/proxyd/methods.go +++ /dev/null @@ -1,92 +0,0 @@ -package proxyd - -import ( - "context" - "crypto/sha256" - "encoding/json" - "fmt" - "strings" - "sync" - - "github.com/ethereum/go-ethereum/log" -) - -type RPCMethodHandler interface { - GetRPCMethod(context.Context, *RPCReq) (*RPCRes, error) - PutRPCMethod(context.Context, *RPCReq, *RPCRes) error -} - -type StaticMethodHandler struct { - cache Cache - m sync.RWMutex - filterGet func(*RPCReq) bool - filterPut func(*RPCReq, *RPCRes) bool -} - -func (e *StaticMethodHandler) key(req *RPCReq) string { - // signature is the hashed json.RawMessage param contents - h := sha256.New() - h.Write(req.Params) - signature := fmt.Sprintf("%x", h.Sum(nil)) - return strings.Join([]string{"cache", req.Method, signature}, ":") -} - -func (e *StaticMethodHandler) GetRPCMethod(ctx context.Context, req *RPCReq) (*RPCRes, error) { - if e.cache == nil { - return nil, nil - } - if e.filterGet != nil && !e.filterGet(req) { - return nil, nil - } - - e.m.RLock() - defer e.m.RUnlock() - - key := e.key(req) - val, err := e.cache.Get(ctx, key) - if err != nil { - log.Error("error reading from cache", "key", key, "method", req.Method, "err", err) - return nil, err - } - if val == "" { - return nil, nil - } - - var result interface{} - if err := json.Unmarshal([]byte(val), &result); err != nil { - log.Error("error unmarshalling value from cache", "key", key, "method", req.Method, "err", err) - return nil, err - } - return &RPCRes{ - JSONRPC: req.JSONRPC, - Result: result, - ID: req.ID, - }, nil -} - -func (e *StaticMethodHandler) PutRPCMethod(ctx context.Context, req *RPCReq, res *RPCRes) error { - if e.cache == nil { - return nil - } - // if there is a filter on get, we don't want to cache it because its irretrievable - if e.filterGet != nil && !e.filterGet(req) { - return nil - } - // response filter - if e.filterPut != nil && !e.filterPut(req, res) { - return nil - } - - e.m.Lock() - defer e.m.Unlock() - - key := e.key(req) - value := mustMarshalJSON(res.Result) - - err := e.cache.Put(ctx, key, string(value)) - if err != nil { - log.Error("error putting into cache", "key", key, "method", req.Method, "err", err) - return err - } - return nil -} diff --git a/proxyd/metrics.go b/proxyd/metrics.go deleted file mode 100644 index 4046af031c9f..000000000000 --- a/proxyd/metrics.go +++ /dev/null @@ -1,601 +0,0 @@ -package proxyd - -import ( - "context" - "fmt" - "regexp" - "strconv" - "strings" - "time" - - "github.com/ethereum/go-ethereum/common/hexutil" - - "github.com/prometheus/client_golang/prometheus" - "github.com/prometheus/client_golang/prometheus/promauto" -) - -const ( - MetricsNamespace = "proxyd" - - RPCRequestSourceHTTP = "http" - RPCRequestSourceWS = "ws" - - BackendProxyd = "proxyd" - SourceClient = "client" - SourceBackend = "backend" - MethodUnknown = "unknown" -) - -var PayloadSizeBuckets = []float64{10, 50, 100, 500, 1000, 5000, 10000, 100000, 1000000} -var MillisecondDurationBuckets = []float64{1, 10, 50, 100, 500, 1000, 5000, 10000, 100000} - -var ( - rpcRequestsTotal = promauto.NewCounter(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "rpc_requests_total", - Help: "Count of total client RPC requests.", - }) - - rpcForwardsTotal = promauto.NewCounterVec(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "rpc_forwards_total", - Help: "Count of total RPC requests forwarded to each backend.", - }, []string{ - "auth", - "backend_name", - "method_name", - "source", - }) - - rpcBackendHTTPResponseCodesTotal = promauto.NewCounterVec(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "rpc_backend_http_response_codes_total", - Help: "Count of total backend responses by HTTP status code.", - }, []string{ - "auth", - "backend_name", - "method_name", - "status_code", - "batched", - }) - - rpcErrorsTotal = promauto.NewCounterVec(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "rpc_errors_total", - Help: "Count of total RPC errors.", - }, []string{ - "auth", - "backend_name", - "method_name", - "error_code", - }) - - rpcSpecialErrorsTotal = promauto.NewCounterVec(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "rpc_special_errors_total", - Help: "Count of total special RPC errors.", - }, []string{ - "auth", - "backend_name", - "method_name", - "error_type", - }) - - rpcBackendRequestDurationSumm = promauto.NewSummaryVec(prometheus.SummaryOpts{ - Namespace: MetricsNamespace, - Name: "rpc_backend_request_duration_seconds", - Help: "Summary of backend response times broken down by backend and method name.", - Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.95: 0.005, 0.99: 0.001}, - }, []string{ - "backend_name", - "method_name", - "batched", - }) - - activeClientWsConnsGauge = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "active_client_ws_conns", - Help: "Gauge of active client WS connections.", - }, []string{ - "auth", - }) - - activeBackendWsConnsGauge = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "active_backend_ws_conns", - Help: "Gauge of active backend WS connections.", - }, []string{ - "backend_name", - }) - - unserviceableRequestsTotal = promauto.NewCounterVec(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "unserviceable_requests_total", - Help: "Count of total requests that were rejected due to no backends being available.", - }, []string{ - "auth", - "request_source", - }) - - httpResponseCodesTotal = promauto.NewCounterVec(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "http_response_codes_total", - Help: "Count of total HTTP response codes.", - }, []string{ - "status_code", - }) - - httpRequestDurationSumm = promauto.NewSummary(prometheus.SummaryOpts{ - Namespace: MetricsNamespace, - Name: "http_request_duration_seconds", - Help: "Summary of HTTP request durations, in seconds.", - Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.95: 0.005, 0.99: 0.001}, - }) - - wsMessagesTotal = promauto.NewCounterVec(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "ws_messages_total", - Help: "Count of total websocket messages including protocol control.", - }, []string{ - "auth", - "backend_name", - "source", - }) - - redisErrorsTotal = promauto.NewCounterVec(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "redis_errors_total", - Help: "Count of total Redis errors.", - }, []string{ - "source", - }) - - requestPayloadSizesGauge = promauto.NewHistogramVec(prometheus.HistogramOpts{ - Namespace: MetricsNamespace, - Name: "request_payload_sizes", - Help: "Histogram of client request payload sizes.", - Buckets: PayloadSizeBuckets, - }, []string{ - "auth", - }) - - responsePayloadSizesGauge = promauto.NewHistogramVec(prometheus.HistogramOpts{ - Namespace: MetricsNamespace, - Name: "response_payload_sizes", - Help: "Histogram of client response payload sizes.", - Buckets: PayloadSizeBuckets, - }, []string{ - "auth", - }) - - cacheHitsTotal = promauto.NewCounterVec(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "cache_hits_total", - Help: "Number of cache hits.", - }, []string{ - "method", - }) - - cacheMissesTotal = promauto.NewCounterVec(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "cache_misses_total", - Help: "Number of cache misses.", - }, []string{ - "method", - }) - - cacheErrorsTotal = promauto.NewCounterVec(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "cache_errors_total", - Help: "Number of cache errors.", - }, []string{ - "method", - }) - - batchRPCShortCircuitsTotal = promauto.NewCounter(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "batch_rpc_short_circuits_total", - Help: "Count of total batch RPC short-circuits.", - }) - - rpcSpecialErrors = []string{ - "nonce too low", - "gas price too high", - "gas price too low", - "invalid parameters", - } - - redisCacheDurationSumm = promauto.NewHistogramVec(prometheus.HistogramOpts{ - Namespace: MetricsNamespace, - Name: "redis_cache_duration_milliseconds", - Help: "Histogram of Redis command durations, in milliseconds.", - Buckets: MillisecondDurationBuckets, - }, []string{"command"}) - - tooManyRequestErrorsTotal = promauto.NewCounterVec(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "too_many_request_errors_total", - Help: "Count of request timeouts due to too many concurrent RPCs.", - }, []string{ - "backend_name", - }) - - batchSizeHistogram = promauto.NewHistogram(prometheus.HistogramOpts{ - Namespace: MetricsNamespace, - Name: "batch_size_summary", - Help: "Summary of batch sizes", - Buckets: []float64{ - 1, - 5, - 10, - 25, - 50, - 100, - }, - }) - - frontendRateLimitTakeErrors = promauto.NewCounter(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "rate_limit_take_errors", - Help: "Count of errors taking frontend rate limits", - }) - - consensusLatestBlock = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "group_consensus_latest_block", - Help: "Consensus latest block", - }, []string{ - "backend_group_name", - }) - - consensusSafeBlock = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "group_consensus_safe_block", - Help: "Consensus safe block", - }, []string{ - "backend_group_name", - }) - - consensusFinalizedBlock = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "group_consensus_finalized_block", - Help: "Consensus finalized block", - }, []string{ - "backend_group_name", - }) - - consensusHAError = promauto.NewCounterVec(prometheus.CounterOpts{ - Namespace: MetricsNamespace, - Name: "group_consensus_ha_error", - Help: "Consensus HA error count", - }, []string{ - "error", - }) - - consensusHALatestBlock = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "group_consensus_ha_latest_block", - Help: "Consensus HA latest block", - }, []string{ - "backend_group_name", - "leader", - }) - - consensusHASafeBlock = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "group_consensus_ha_safe_block", - Help: "Consensus HA safe block", - }, []string{ - "backend_group_name", - "leader", - }) - - consensusHAFinalizedBlock = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "group_consensus_ha_finalized_block", - Help: "Consensus HA finalized block", - }, []string{ - "backend_group_name", - "leader", - }) - - backendLatestBlockBackend = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "backend_latest_block", - Help: "Current latest block observed per backend", - }, []string{ - "backend_name", - }) - - backendSafeBlockBackend = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "backend_safe_block", - Help: "Current safe block observed per backend", - }, []string{ - "backend_name", - }) - - backendFinalizedBlockBackend = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "backend_finalized_block", - Help: "Current finalized block observed per backend", - }, []string{ - "backend_name", - }) - - backendUnexpectedBlockTagsBackend = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "backend_unexpected_block_tags", - Help: "Bool gauge for unexpected block tags", - }, []string{ - "backend_name", - }) - - consensusGroupCount = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "group_consensus_count", - Help: "Consensus group serving traffic count", - }, []string{ - "backend_group_name", - }) - - consensusGroupFilteredCount = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "group_consensus_filtered_count", - Help: "Consensus group filtered out from serving traffic count", - }, []string{ - "backend_group_name", - }) - - consensusGroupTotalCount = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "group_consensus_total_count", - Help: "Total count of candidates to be part of consensus group", - }, []string{ - "backend_group_name", - }) - - consensusBannedBackends = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "consensus_backend_banned", - Help: "Bool gauge for banned backends", - }, []string{ - "backend_name", - }) - - consensusPeerCountBackend = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "consensus_backend_peer_count", - Help: "Peer count", - }, []string{ - "backend_name", - }) - - consensusInSyncBackend = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "consensus_backend_in_sync", - Help: "Bool gauge for backends in sync", - }, []string{ - "backend_name", - }) - - consensusUpdateDelayBackend = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "consensus_backend_update_delay", - Help: "Delay (ms) for backend update", - }, []string{ - "backend_name", - }) - - avgLatencyBackend = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "backend_avg_latency", - Help: "Average latency per backend", - }, []string{ - "backend_name", - }) - - degradedBackends = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "backend_degraded", - Help: "Bool gauge for degraded backends", - }, []string{ - "backend_name", - }) - - networkErrorRateBackend = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "backend_error_rate", - Help: "Request error rate per backend", - }, []string{ - "backend_name", - }) - - healthyPrimaryCandidates = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "healthy_candidates", - Help: "Record the number of healthy primary candidates", - }, []string{ - "backend_group_name", - }) - - backendGroupFallbackBackend = promauto.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: MetricsNamespace, - Name: "backend_group_fallback_backenend", - Help: "Bool gauge for if a backend is a fallback for a backend group", - }, []string{ - "backend_group", - "backend_name", - "fallback", - }) -) - -func RecordRedisError(source string) { - redisErrorsTotal.WithLabelValues(source).Inc() -} - -func RecordRPCError(ctx context.Context, backendName, method string, err error) { - rpcErr, ok := err.(*RPCErr) - var code int - if ok { - MaybeRecordSpecialRPCError(ctx, backendName, method, rpcErr) - code = rpcErr.Code - } else { - code = -1 - } - - rpcErrorsTotal.WithLabelValues(GetAuthCtx(ctx), backendName, method, strconv.Itoa(code)).Inc() -} - -func RecordWSMessage(ctx context.Context, backendName, source string) { - wsMessagesTotal.WithLabelValues(GetAuthCtx(ctx), backendName, source).Inc() -} - -func RecordUnserviceableRequest(ctx context.Context, source string) { - unserviceableRequestsTotal.WithLabelValues(GetAuthCtx(ctx), source).Inc() -} - -func RecordRPCForward(ctx context.Context, backendName, method, source string) { - rpcForwardsTotal.WithLabelValues(GetAuthCtx(ctx), backendName, method, source).Inc() -} - -func MaybeRecordSpecialRPCError(ctx context.Context, backendName, method string, rpcErr *RPCErr) { - errMsg := strings.ToLower(rpcErr.Message) - for _, errStr := range rpcSpecialErrors { - if strings.Contains(errMsg, errStr) { - rpcSpecialErrorsTotal.WithLabelValues(GetAuthCtx(ctx), backendName, method, errStr).Inc() - return - } - } -} - -func RecordRequestPayloadSize(ctx context.Context, payloadSize int) { - requestPayloadSizesGauge.WithLabelValues(GetAuthCtx(ctx)).Observe(float64(payloadSize)) -} - -func RecordResponsePayloadSize(ctx context.Context, payloadSize int) { - responsePayloadSizesGauge.WithLabelValues(GetAuthCtx(ctx)).Observe(float64(payloadSize)) -} - -func RecordCacheHit(method string) { - cacheHitsTotal.WithLabelValues(method).Inc() -} - -func RecordCacheMiss(method string) { - cacheMissesTotal.WithLabelValues(method).Inc() -} - -func RecordCacheError(method string) { - cacheErrorsTotal.WithLabelValues(method).Inc() -} - -func RecordBatchSize(size int) { - batchSizeHistogram.Observe(float64(size)) -} - -var nonAlphanumericRegex = regexp.MustCompile(`[^a-zA-Z ]+`) - -func RecordGroupConsensusError(group *BackendGroup, label string, err error) { - errClean := nonAlphanumericRegex.ReplaceAllString(err.Error(), "") - errClean = strings.ReplaceAll(errClean, " ", "_") - errClean = strings.ReplaceAll(errClean, "__", "_") - label = fmt.Sprintf("%s.%s", label, errClean) - consensusHAError.WithLabelValues(label).Inc() -} - -func RecordGroupConsensusHALatestBlock(group *BackendGroup, leader string, blockNumber hexutil.Uint64) { - consensusHALatestBlock.WithLabelValues(group.Name, leader).Set(float64(blockNumber)) -} - -func RecordGroupConsensusHASafeBlock(group *BackendGroup, leader string, blockNumber hexutil.Uint64) { - consensusHASafeBlock.WithLabelValues(group.Name, leader).Set(float64(blockNumber)) -} - -func RecordGroupConsensusHAFinalizedBlock(group *BackendGroup, leader string, blockNumber hexutil.Uint64) { - consensusHAFinalizedBlock.WithLabelValues(group.Name, leader).Set(float64(blockNumber)) -} - -func RecordGroupConsensusLatestBlock(group *BackendGroup, blockNumber hexutil.Uint64) { - consensusLatestBlock.WithLabelValues(group.Name).Set(float64(blockNumber)) -} - -func RecordGroupConsensusSafeBlock(group *BackendGroup, blockNumber hexutil.Uint64) { - consensusSafeBlock.WithLabelValues(group.Name).Set(float64(blockNumber)) -} - -func RecordGroupConsensusFinalizedBlock(group *BackendGroup, blockNumber hexutil.Uint64) { - consensusFinalizedBlock.WithLabelValues(group.Name).Set(float64(blockNumber)) -} - -func RecordGroupConsensusCount(group *BackendGroup, count int) { - consensusGroupCount.WithLabelValues(group.Name).Set(float64(count)) -} - -func RecordGroupConsensusFilteredCount(group *BackendGroup, count int) { - consensusGroupFilteredCount.WithLabelValues(group.Name).Set(float64(count)) -} - -func RecordGroupTotalCount(group *BackendGroup, count int) { - consensusGroupTotalCount.WithLabelValues(group.Name).Set(float64(count)) -} - -func RecordBackendLatestBlock(b *Backend, blockNumber hexutil.Uint64) { - backendLatestBlockBackend.WithLabelValues(b.Name).Set(float64(blockNumber)) -} - -func RecordBackendSafeBlock(b *Backend, blockNumber hexutil.Uint64) { - backendSafeBlockBackend.WithLabelValues(b.Name).Set(float64(blockNumber)) -} - -func RecordBackendFinalizedBlock(b *Backend, blockNumber hexutil.Uint64) { - backendFinalizedBlockBackend.WithLabelValues(b.Name).Set(float64(blockNumber)) -} - -func RecordBackendUnexpectedBlockTags(b *Backend, unexpected bool) { - backendUnexpectedBlockTagsBackend.WithLabelValues(b.Name).Set(boolToFloat64(unexpected)) -} - -func RecordConsensusBackendBanned(b *Backend, banned bool) { - consensusBannedBackends.WithLabelValues(b.Name).Set(boolToFloat64(banned)) -} - -func RecordHealthyCandidates(b *BackendGroup, candidates int) { - healthyPrimaryCandidates.WithLabelValues(b.Name).Set(float64(candidates)) -} - -func RecordConsensusBackendPeerCount(b *Backend, peerCount uint64) { - consensusPeerCountBackend.WithLabelValues(b.Name).Set(float64(peerCount)) -} - -func RecordConsensusBackendInSync(b *Backend, inSync bool) { - consensusInSyncBackend.WithLabelValues(b.Name).Set(boolToFloat64(inSync)) -} - -func RecordConsensusBackendUpdateDelay(b *Backend, lastUpdate time.Time) { - // avoid recording the delay for the first update - if lastUpdate.IsZero() { - return - } - delay := time.Since(lastUpdate) - consensusUpdateDelayBackend.WithLabelValues(b.Name).Set(float64(delay.Milliseconds())) -} - -func RecordBackendNetworkLatencyAverageSlidingWindow(b *Backend, avgLatency time.Duration) { - avgLatencyBackend.WithLabelValues(b.Name).Set(float64(avgLatency.Milliseconds())) - degradedBackends.WithLabelValues(b.Name).Set(boolToFloat64(b.IsDegraded())) -} - -func RecordBackendNetworkErrorRateSlidingWindow(b *Backend, rate float64) { - networkErrorRateBackend.WithLabelValues(b.Name).Set(rate) -} - -func RecordBackendGroupFallbacks(bg *BackendGroup, name string, fallback bool) { - backendGroupFallbackBackend.WithLabelValues(bg.Name, name, strconv.FormatBool(fallback)).Set(boolToFloat64(fallback)) -} - -func boolToFloat64(b bool) float64 { - if b { - return 1 - } - return 0 -} diff --git a/proxyd/pkg/avg-sliding-window/sliding.go b/proxyd/pkg/avg-sliding-window/sliding.go deleted file mode 100644 index 70c40be2d6da..000000000000 --- a/proxyd/pkg/avg-sliding-window/sliding.go +++ /dev/null @@ -1,188 +0,0 @@ -package avg_sliding_window - -import ( - "sync" - "time" - - lm "github.com/emirpasic/gods/maps/linkedhashmap" -) - -type Clock interface { - Now() time.Time -} - -// DefaultClock provides a clock that gets current time from the system time -type DefaultClock struct{} - -func NewDefaultClock() *DefaultClock { - return &DefaultClock{} -} -func (c DefaultClock) Now() time.Time { - return time.Now() -} - -// AdjustableClock provides a static clock to easily override the system time -type AdjustableClock struct { - now time.Time -} - -func NewAdjustableClock(now time.Time) *AdjustableClock { - return &AdjustableClock{now: now} -} -func (c *AdjustableClock) Now() time.Time { - return c.now -} -func (c *AdjustableClock) Set(now time.Time) { - c.now = now -} - -type bucket struct { - sum float64 - qty uint -} - -// AvgSlidingWindow calculates moving averages efficiently. -// Data points are rounded to nearest bucket of size `bucketSize`, -// and evicted when they are too old based on `windowLength` -type AvgSlidingWindow struct { - mux sync.Mutex - bucketSize time.Duration - windowLength time.Duration - clock Clock - buckets *lm.Map - qty uint - sum float64 -} - -type SlidingWindowOpts func(sw *AvgSlidingWindow) - -func NewSlidingWindow(opts ...SlidingWindowOpts) *AvgSlidingWindow { - sw := &AvgSlidingWindow{ - buckets: lm.New(), - } - for _, opt := range opts { - opt(sw) - } - if sw.bucketSize == 0 { - sw.bucketSize = time.Second - } - if sw.windowLength == 0 { - sw.windowLength = 5 * time.Minute - } - if sw.clock == nil { - sw.clock = NewDefaultClock() - } - return sw -} - -func WithWindowLength(windowLength time.Duration) SlidingWindowOpts { - return func(sw *AvgSlidingWindow) { - sw.windowLength = windowLength - } -} - -func WithBucketSize(bucketSize time.Duration) SlidingWindowOpts { - return func(sw *AvgSlidingWindow) { - sw.bucketSize = bucketSize - } -} - -func WithClock(clock Clock) SlidingWindowOpts { - return func(sw *AvgSlidingWindow) { - sw.clock = clock - } -} - -func (sw *AvgSlidingWindow) inWindow(t time.Time) bool { - now := sw.clock.Now().Round(sw.bucketSize) - windowStart := now.Add(-sw.windowLength) - return windowStart.Before(t) && !t.After(now) -} - -// Add inserts a new data point into the window, with value `val` and the current time -func (sw *AvgSlidingWindow) Add(val float64) { - t := sw.clock.Now() - sw.AddWithTime(t, val) -} - -// Incr is an alias to insert a data point with value float64(1) and the current time -func (sw *AvgSlidingWindow) Incr() { - sw.Add(1) -} - -// AddWithTime inserts a new data point into the window, with value `val` and time `t` -func (sw *AvgSlidingWindow) AddWithTime(t time.Time, val float64) { - sw.advance() - - defer sw.mux.Unlock() - sw.mux.Lock() - - key := t.Round(sw.bucketSize) - if !sw.inWindow(key) { - return - } - - var b *bucket - current, found := sw.buckets.Get(key) - if !found { - b = &bucket{} - } else { - b = current.(*bucket) - } - - // update bucket - bsum := b.sum - b.qty += 1 - b.sum = bsum + val - - // update window - wsum := sw.sum - sw.qty += 1 - sw.sum = wsum - bsum + b.sum - sw.buckets.Put(key, b) -} - -// advance evicts old data points -func (sw *AvgSlidingWindow) advance() { - defer sw.mux.Unlock() - sw.mux.Lock() - now := sw.clock.Now().Round(sw.bucketSize) - windowStart := now.Add(-sw.windowLength) - keys := sw.buckets.Keys() - for _, k := range keys { - if k.(time.Time).After(windowStart) { - break - } - val, _ := sw.buckets.Get(k) - b := val.(*bucket) - sw.buckets.Remove(k) - if sw.buckets.Size() > 0 { - sw.qty -= b.qty - sw.sum = sw.sum - b.sum - } else { - sw.qty = 0 - sw.sum = 0.0 - } - } -} - -// Avg retrieves the current average for the sliding window -func (sw *AvgSlidingWindow) Avg() float64 { - sw.advance() - if sw.qty == 0 { - return 0 - } - return sw.sum / float64(sw.qty) -} - -// Sum retrieves the current sum for the sliding window -func (sw *AvgSlidingWindow) Sum() float64 { - sw.advance() - return sw.sum -} - -// Count retrieves the data point count for the sliding window -func (sw *AvgSlidingWindow) Count() uint { - sw.advance() - return sw.qty -} diff --git a/proxyd/pkg/avg-sliding-window/sliding_test.go b/proxyd/pkg/avg-sliding-window/sliding_test.go deleted file mode 100644 index 37074dba8061..000000000000 --- a/proxyd/pkg/avg-sliding-window/sliding_test.go +++ /dev/null @@ -1,277 +0,0 @@ -package avg_sliding_window - -import ( - "testing" - "time" - - "github.com/stretchr/testify/require" -) - -func TestSlidingWindow_AddWithTime_Single(t *testing.T) { - now := ts("2023-04-21 15:04:05") - clock := NewAdjustableClock(now) - - sw := NewSlidingWindow( - WithWindowLength(10*time.Second), - WithBucketSize(time.Second), - WithClock(clock)) - sw.AddWithTime(ts("2023-04-21 15:04:05"), 5) - require.Equal(t, 5.0, sw.Avg()) - require.Equal(t, 5.0, sw.Sum()) - require.Equal(t, 1, int(sw.Count())) - require.Equal(t, 1, sw.buckets.Size()) - require.Equal(t, 1, int(sw.buckets.Values()[0].(*bucket).qty)) - require.Equal(t, 5.0, sw.buckets.Values()[0].(*bucket).sum) -} - -func TestSlidingWindow_AddWithTime_TwoValues_SameBucket(t *testing.T) { - now := ts("2023-04-21 15:04:05") - clock := NewAdjustableClock(now) - - sw := NewSlidingWindow( - WithWindowLength(10*time.Second), - WithBucketSize(time.Second), - WithClock(clock)) - sw.AddWithTime(ts("2023-04-21 15:04:05"), 5) - sw.AddWithTime(ts("2023-04-21 15:04:05"), 5) - require.Equal(t, 5.0, sw.Avg()) - require.Equal(t, 10.0, sw.Sum()) - require.Equal(t, 2, int(sw.Count())) - require.Equal(t, 1, sw.buckets.Size()) - require.Equal(t, 2, int(sw.buckets.Values()[0].(*bucket).qty)) - require.Equal(t, 10.0, sw.buckets.Values()[0].(*bucket).sum) -} - -func TestSlidingWindow_AddWithTime_ThreeValues_SameBucket(t *testing.T) { - now := ts("2023-04-21 15:04:05") - clock := NewAdjustableClock(now) - - sw := NewSlidingWindow( - WithWindowLength(10*time.Second), - WithBucketSize(time.Second), - WithClock(clock)) - sw.AddWithTime(ts("2023-04-21 15:04:05"), 4) - sw.AddWithTime(ts("2023-04-21 15:04:05"), 5) - sw.AddWithTime(ts("2023-04-21 15:04:05"), 6) - require.Equal(t, 5.0, sw.Avg()) - require.Equal(t, 15.0, sw.Sum()) - require.Equal(t, 3, int(sw.Count())) - require.Equal(t, 1, sw.buckets.Size()) - require.Equal(t, 15.0, sw.buckets.Values()[0].(*bucket).sum) - require.Equal(t, 3, int(sw.buckets.Values()[0].(*bucket).qty)) -} - -func TestSlidingWindow_AddWithTime_ThreeValues_ThreeBuckets(t *testing.T) { - now := ts("2023-04-21 15:04:05") - clock := NewAdjustableClock(now) - - sw := NewSlidingWindow( - WithWindowLength(10*time.Second), - WithBucketSize(time.Second), - WithClock(clock)) - sw.AddWithTime(ts("2023-04-21 15:04:01"), 4) - sw.AddWithTime(ts("2023-04-21 15:04:02"), 5) - sw.AddWithTime(ts("2023-04-21 15:04:05"), 6) - require.Equal(t, 5.0, sw.Avg()) - require.Equal(t, 15.0, sw.Sum()) - require.Equal(t, 3, int(sw.Count())) - require.Equal(t, 3, sw.buckets.Size()) - require.Equal(t, 1, int(sw.buckets.Values()[0].(*bucket).qty)) - require.Equal(t, 4.0, sw.buckets.Values()[0].(*bucket).sum) - require.Equal(t, 1, int(sw.buckets.Values()[1].(*bucket).qty)) - require.Equal(t, 5.0, sw.buckets.Values()[1].(*bucket).sum) - require.Equal(t, 1, int(sw.buckets.Values()[2].(*bucket).qty)) - require.Equal(t, 6.0, sw.buckets.Values()[2].(*bucket).sum) -} - -func TestSlidingWindow_AddWithTime_OutWindow(t *testing.T) { - now := ts("2023-04-21 15:04:05") - clock := NewAdjustableClock(now) - - sw := NewSlidingWindow( - WithWindowLength(10*time.Second), - WithBucketSize(time.Second), - WithClock(clock)) - sw.AddWithTime(ts("2023-04-21 15:03:55"), 1000) - sw.AddWithTime(ts("2023-04-21 15:04:01"), 4) - sw.AddWithTime(ts("2023-04-21 15:04:02"), 5) - sw.AddWithTime(ts("2023-04-21 15:04:05"), 6) - require.Equal(t, 5.0, sw.Avg()) - require.Equal(t, 15.0, sw.Sum()) - require.Equal(t, 3, int(sw.Count())) - require.Equal(t, 3, sw.buckets.Size()) - require.Equal(t, 1, int(sw.buckets.Values()[0].(*bucket).qty)) - require.Equal(t, 4.0, sw.buckets.Values()[0].(*bucket).sum) - require.Equal(t, 1, int(sw.buckets.Values()[1].(*bucket).qty)) - require.Equal(t, 5.0, sw.buckets.Values()[1].(*bucket).sum) - require.Equal(t, 1, int(sw.buckets.Values()[2].(*bucket).qty)) - require.Equal(t, 6.0, sw.buckets.Values()[2].(*bucket).sum) -} - -func TestSlidingWindow_AdvanceClock(t *testing.T) { - now := ts("2023-04-21 15:04:05") - clock := NewAdjustableClock(now) - - sw := NewSlidingWindow( - WithWindowLength(10*time.Second), - WithBucketSize(time.Second), - WithClock(clock)) - sw.AddWithTime(ts("2023-04-21 15:04:01"), 4) - sw.AddWithTime(ts("2023-04-21 15:04:02"), 5) - sw.AddWithTime(ts("2023-04-21 15:04:05"), 6) - require.Equal(t, 5.0, sw.Avg()) - require.Equal(t, 15.0, sw.Sum()) - require.Equal(t, 3, int(sw.Count())) - require.Equal(t, 3, sw.buckets.Size()) - - require.Equal(t, 1, int(sw.buckets.Values()[0].(*bucket).qty)) - require.Equal(t, 4.0, sw.buckets.Values()[0].(*bucket).sum) - require.Equal(t, 1, int(sw.buckets.Values()[1].(*bucket).qty)) - require.Equal(t, 5.0, sw.buckets.Values()[1].(*bucket).sum) - require.Equal(t, 1, int(sw.buckets.Values()[2].(*bucket).qty)) - require.Equal(t, 6.0, sw.buckets.Values()[2].(*bucket).sum) - - // up until 15:04:05 we had 3 buckets - // let's advance the clock to 15:04:11 and the first data point should be evicted - clock.Set(ts("2023-04-21 15:04:11")) - require.Equal(t, 5.5, sw.Avg()) - require.Equal(t, 11.0, sw.Sum()) - require.Equal(t, 2, int(sw.Count())) - require.Equal(t, 2, sw.buckets.Size()) - require.Equal(t, 1, int(sw.buckets.Values()[0].(*bucket).qty)) - require.Equal(t, 5.0, sw.buckets.Values()[0].(*bucket).sum) - require.Equal(t, 1, int(sw.buckets.Values()[1].(*bucket).qty)) - require.Equal(t, 6.0, sw.buckets.Values()[1].(*bucket).sum) - - // let's advance the clock to 15:04:12 and another data point should be evicted - clock.Set(ts("2023-04-21 15:04:12")) - require.Equal(t, 6.0, sw.Avg()) - require.Equal(t, 6.0, sw.Sum()) - require.Equal(t, 1, int(sw.Count())) - require.Equal(t, 1, sw.buckets.Size()) - require.Equal(t, 1, int(sw.buckets.Values()[0].(*bucket).qty)) - require.Equal(t, 6.0, sw.buckets.Values()[0].(*bucket).sum) - - // let's advance the clock to 15:04:25 and all data point should be evicted - clock.Set(ts("2023-04-21 15:04:25")) - require.Equal(t, 0.0, sw.Avg()) - require.Equal(t, 0.0, sw.Sum()) - require.Equal(t, 0, int(sw.Count())) - require.Equal(t, 0, sw.buckets.Size()) -} - -func TestSlidingWindow_MultipleValPerBucket(t *testing.T) { - now := ts("2023-04-21 15:04:05") - clock := NewAdjustableClock(now) - - sw := NewSlidingWindow( - WithWindowLength(10*time.Second), - WithBucketSize(time.Second), - WithClock(clock)) - sw.AddWithTime(ts("2023-04-21 15:04:01"), 4) - sw.AddWithTime(ts("2023-04-21 15:04:01"), 12) - sw.AddWithTime(ts("2023-04-21 15:04:02"), 5) - sw.AddWithTime(ts("2023-04-21 15:04:02"), 15) - sw.AddWithTime(ts("2023-04-21 15:04:05"), 6) - sw.AddWithTime(ts("2023-04-21 15:04:05"), 3) - sw.AddWithTime(ts("2023-04-21 15:04:05"), 1) - sw.AddWithTime(ts("2023-04-21 15:04:05"), 3) - require.Equal(t, 6.125, sw.Avg()) - require.Equal(t, 49.0, sw.Sum()) - require.Equal(t, 8, int(sw.Count())) - require.Equal(t, 3, sw.buckets.Size()) - require.Equal(t, 2, int(sw.buckets.Values()[0].(*bucket).qty)) - require.Equal(t, 16.0, sw.buckets.Values()[0].(*bucket).sum) - require.Equal(t, 2, int(sw.buckets.Values()[1].(*bucket).qty)) - require.Equal(t, 20.0, sw.buckets.Values()[1].(*bucket).sum) - require.Equal(t, 4, int(sw.buckets.Values()[2].(*bucket).qty)) - require.Equal(t, 13.0, sw.buckets.Values()[2].(*bucket).sum) - - // up until 15:04:05 we had 3 buckets - // let's advance the clock to 15:04:11 and the first data point should be evicted - clock.Set(ts("2023-04-21 15:04:11")) - require.Equal(t, 5.5, sw.Avg()) - require.Equal(t, 33.0, sw.Sum()) - require.Equal(t, 6, int(sw.Count())) - require.Equal(t, 2, sw.buckets.Size()) - require.Equal(t, 2, int(sw.buckets.Values()[0].(*bucket).qty)) - require.Equal(t, 20.0, sw.buckets.Values()[0].(*bucket).sum) - require.Equal(t, 4, int(sw.buckets.Values()[1].(*bucket).qty)) - require.Equal(t, 13.0, sw.buckets.Values()[1].(*bucket).sum) - - // let's advance the clock to 15:04:12 and another data point should be evicted - clock.Set(ts("2023-04-21 15:04:12")) - require.Equal(t, 3.25, sw.Avg()) - require.Equal(t, 13.0, sw.Sum()) - require.Equal(t, 4, int(sw.Count())) - require.Equal(t, 1, sw.buckets.Size()) - require.Equal(t, 4, int(sw.buckets.Values()[0].(*bucket).qty)) - require.Equal(t, 13.0, sw.buckets.Values()[0].(*bucket).sum) - - // let's advance the clock to 15:04:25 and all data point should be evicted - clock.Set(ts("2023-04-21 15:04:25")) - require.Equal(t, 0.0, sw.Avg()) - require.Equal(t, 0, sw.buckets.Size()) -} - -func TestSlidingWindow_CustomBucket(t *testing.T) { - now := ts("2023-04-21 15:04:05") - clock := NewAdjustableClock(now) - - sw := NewSlidingWindow( - WithWindowLength(30*time.Second), - WithBucketSize(10*time.Second), - WithClock(clock)) - sw.AddWithTime(ts("2023-04-21 15:03:49"), 5) // key: 03:50, sum: 5.0 - sw.AddWithTime(ts("2023-04-21 15:04:02"), 15) // key: 04:00 - sw.AddWithTime(ts("2023-04-21 15:04:03"), 5) // key: 04:00 - sw.AddWithTime(ts("2023-04-21 15:04:04"), 1) // key: 04:00, sum: 21.0 - sw.AddWithTime(ts("2023-04-21 15:04:05"), 3) // key: 04:10, sum: 3.0 - require.Equal(t, 5.8, sw.Avg()) - require.Equal(t, 29.0, sw.Sum()) - require.Equal(t, 5, int(sw.Count())) - require.Equal(t, 3, sw.buckets.Size()) - require.Equal(t, 5.0, sw.buckets.Values()[0].(*bucket).sum) - require.Equal(t, 1, int(sw.buckets.Values()[0].(*bucket).qty)) - require.Equal(t, 21.0, sw.buckets.Values()[1].(*bucket).sum) - require.Equal(t, 3, int(sw.buckets.Values()[1].(*bucket).qty)) - require.Equal(t, 3.0, sw.buckets.Values()[2].(*bucket).sum) - require.Equal(t, 1, int(sw.buckets.Values()[2].(*bucket).qty)) - - // up until 15:04:05 we had 3 buckets - // let's advance the clock to 15:04:21 and the first data point should be evicted - clock.Set(ts("2023-04-21 15:04:21")) - require.Equal(t, 6.0, sw.Avg()) - require.Equal(t, 24.0, sw.Sum()) - require.Equal(t, 4, int(sw.Count())) - require.Equal(t, 2, sw.buckets.Size()) - require.Equal(t, 21.0, sw.buckets.Values()[0].(*bucket).sum) - require.Equal(t, 3, int(sw.buckets.Values()[0].(*bucket).qty)) - require.Equal(t, 3.0, sw.buckets.Values()[1].(*bucket).sum) - require.Equal(t, 1, int(sw.buckets.Values()[1].(*bucket).qty)) - - // let's advance the clock to 15:04:32 and another data point should be evicted - clock.Set(ts("2023-04-21 15:04:32")) - require.Equal(t, 3.0, sw.Avg()) - require.Equal(t, 3.0, sw.Sum()) - require.Equal(t, 1, sw.buckets.Size()) - require.Equal(t, 1, int(sw.Count())) - require.Equal(t, 3.0, sw.buckets.Values()[0].(*bucket).sum) - require.Equal(t, 1, int(sw.buckets.Values()[0].(*bucket).qty)) - - // let's advance the clock to 15:04:46 and all data point should be evicted - clock.Set(ts("2023-04-21 15:04:46")) - require.Equal(t, 0.0, sw.Avg()) - require.Equal(t, 0.0, sw.Sum()) - require.Equal(t, 0, int(sw.Count())) - require.Equal(t, 0, sw.buckets.Size()) -} - -// ts is a convenient method that must parse a time.Time from a string in format `"2006-01-02 15:04:05"` -func ts(s string) time.Time { - t, err := time.Parse(time.DateTime, s) - if err != nil { - panic(err) - } - return t -} diff --git a/proxyd/proxyd.go b/proxyd/proxyd.go deleted file mode 100644 index 402909b5f404..000000000000 --- a/proxyd/proxyd.go +++ /dev/null @@ -1,472 +0,0 @@ -package proxyd - -import ( - "context" - "crypto/tls" - "errors" - "fmt" - "net/http" - "os" - "time" - - "github.com/ethereum/go-ethereum/common/math" - "github.com/ethereum/go-ethereum/log" - "github.com/prometheus/client_golang/prometheus/promhttp" - "github.com/redis/go-redis/v9" - "golang.org/x/exp/slog" - "golang.org/x/sync/semaphore" -) - -func SetLogLevel(logLevel slog.Leveler) { - log.SetDefault(log.NewLogger(slog.NewJSONHandler( - os.Stdout, &slog.HandlerOptions{Level: logLevel}))) -} - -func Start(config *Config) (*Server, func(), error) { - if len(config.Backends) == 0 { - return nil, nil, errors.New("must define at least one backend") - } - if len(config.BackendGroups) == 0 { - return nil, nil, errors.New("must define at least one backend group") - } - if len(config.RPCMethodMappings) == 0 { - return nil, nil, errors.New("must define at least one RPC method mapping") - } - - for authKey := range config.Authentication { - if authKey == "none" { - return nil, nil, errors.New("cannot use none as an auth key") - } - } - - var redisClient *redis.Client - if config.Redis.URL != "" { - rURL, err := ReadFromEnvOrConfig(config.Redis.URL) - if err != nil { - return nil, nil, err - } - redisClient, err = NewRedisClient(rURL) - if err != nil { - return nil, nil, err - } - } - - if redisClient == nil && config.RateLimit.UseRedis { - return nil, nil, errors.New("must specify a Redis URL if UseRedis is true in rate limit config") - } - - // While modifying shared globals is a bad practice, the alternative - // is to clone these errors on every invocation. This is inefficient. - // We'd also have to make sure that errors.Is and errors.As continue - // to function properly on the cloned errors. - if config.RateLimit.ErrorMessage != "" { - ErrOverRateLimit.Message = config.RateLimit.ErrorMessage - } - if config.WhitelistErrorMessage != "" { - ErrMethodNotWhitelisted.Message = config.WhitelistErrorMessage - } - if config.BatchConfig.ErrorMessage != "" { - ErrTooManyBatchRequests.Message = config.BatchConfig.ErrorMessage - } - - if config.SenderRateLimit.Enabled { - if config.SenderRateLimit.Limit <= 0 { - return nil, nil, errors.New("limit in sender_rate_limit must be > 0") - } - if time.Duration(config.SenderRateLimit.Interval) < time.Second { - return nil, nil, errors.New("interval in sender_rate_limit must be >= 1s") - } - } - - maxConcurrentRPCs := config.Server.MaxConcurrentRPCs - if maxConcurrentRPCs == 0 { - maxConcurrentRPCs = math.MaxInt64 - } - rpcRequestSemaphore := semaphore.NewWeighted(maxConcurrentRPCs) - - backendNames := make([]string, 0) - backendsByName := make(map[string]*Backend) - for name, cfg := range config.Backends { - opts := make([]BackendOpt, 0) - - rpcURL, err := ReadFromEnvOrConfig(cfg.RPCURL) - if err != nil { - return nil, nil, err - } - wsURL, err := ReadFromEnvOrConfig(cfg.WSURL) - if err != nil { - return nil, nil, err - } - if rpcURL == "" { - return nil, nil, fmt.Errorf("must define an RPC URL for backend %s", name) - } - - if config.BackendOptions.ResponseTimeoutSeconds != 0 { - timeout := secondsToDuration(config.BackendOptions.ResponseTimeoutSeconds) - opts = append(opts, WithTimeout(timeout)) - } - if config.BackendOptions.MaxRetries != 0 { - opts = append(opts, WithMaxRetries(config.BackendOptions.MaxRetries)) - } - if config.BackendOptions.MaxResponseSizeBytes != 0 { - opts = append(opts, WithMaxResponseSize(config.BackendOptions.MaxResponseSizeBytes)) - } - if config.BackendOptions.OutOfServiceSeconds != 0 { - opts = append(opts, WithOutOfServiceDuration(secondsToDuration(config.BackendOptions.OutOfServiceSeconds))) - } - if config.BackendOptions.MaxDegradedLatencyThreshold > 0 { - opts = append(opts, WithMaxDegradedLatencyThreshold(time.Duration(config.BackendOptions.MaxDegradedLatencyThreshold))) - } - if config.BackendOptions.MaxLatencyThreshold > 0 { - opts = append(opts, WithMaxLatencyThreshold(time.Duration(config.BackendOptions.MaxLatencyThreshold))) - } - if config.BackendOptions.MaxErrorRateThreshold > 0 { - opts = append(opts, WithMaxErrorRateThreshold(config.BackendOptions.MaxErrorRateThreshold)) - } - if cfg.MaxRPS != 0 { - opts = append(opts, WithMaxRPS(cfg.MaxRPS)) - } - if cfg.MaxWSConns != 0 { - opts = append(opts, WithMaxWSConns(cfg.MaxWSConns)) - } - if cfg.Password != "" { - passwordVal, err := ReadFromEnvOrConfig(cfg.Password) - if err != nil { - return nil, nil, err - } - opts = append(opts, WithBasicAuth(cfg.Username, passwordVal)) - } - - headers := map[string]string{} - for headerName, headerValue := range cfg.Headers { - headerValue, err := ReadFromEnvOrConfig(headerValue) - if err != nil { - return nil, nil, err - } - - headers[headerName] = headerValue - } - opts = append(opts, WithHeaders(headers)) - - tlsConfig, err := configureBackendTLS(cfg) - if err != nil { - return nil, nil, err - } - if tlsConfig != nil { - log.Info("using custom TLS config for backend", "name", name) - opts = append(opts, WithTLSConfig(tlsConfig)) - } - if cfg.StripTrailingXFF { - opts = append(opts, WithStrippedTrailingXFF()) - } - opts = append(opts, WithProxydIP(os.Getenv("PROXYD_IP"))) - opts = append(opts, WithConsensusSkipPeerCountCheck(cfg.ConsensusSkipPeerCountCheck)) - opts = append(opts, WithConsensusForcedCandidate(cfg.ConsensusForcedCandidate)) - opts = append(opts, WithWeight(cfg.Weight)) - - receiptsTarget, err := ReadFromEnvOrConfig(cfg.ConsensusReceiptsTarget) - if err != nil { - return nil, nil, err - } - receiptsTarget, err = validateReceiptsTarget(receiptsTarget) - if err != nil { - return nil, nil, err - } - opts = append(opts, WithConsensusReceiptTarget(receiptsTarget)) - - back := NewBackend(name, rpcURL, wsURL, rpcRequestSemaphore, opts...) - backendNames = append(backendNames, name) - backendsByName[name] = back - log.Info("configured backend", - "name", name, - "backend_names", backendNames, - "rpc_url", rpcURL, - "ws_url", wsURL) - } - - backendGroups := make(map[string]*BackendGroup) - for bgName, bg := range config.BackendGroups { - backends := make([]*Backend, 0) - fallbackBackends := make(map[string]bool) - fallbackCount := 0 - for _, bName := range bg.Backends { - if backendsByName[bName] == nil { - return nil, nil, fmt.Errorf("backend %s is not defined", bName) - } - backends = append(backends, backendsByName[bName]) - - for _, fb := range bg.Fallbacks { - if bName == fb { - fallbackBackends[bName] = true - log.Info("configured backend as fallback", - "backend_name", bName, - "backend_group", bgName, - ) - fallbackCount++ - } - } - - if _, ok := fallbackBackends[bName]; !ok { - fallbackBackends[bName] = false - log.Info("configured backend as primary", - "backend_name", bName, - "backend_group", bgName, - ) - } - } - - if fallbackCount != len(bg.Fallbacks) { - return nil, nil, - fmt.Errorf( - "error: number of fallbacks instantiated (%d) did not match configured (%d) for backend group %s", - fallbackCount, len(bg.Fallbacks), bgName, - ) - } - - backendGroups[bgName] = &BackendGroup{ - Name: bgName, - Backends: backends, - WeightedRouting: bg.WeightedRouting, - FallbackBackends: fallbackBackends, - } - } - - var wsBackendGroup *BackendGroup - if config.WSBackendGroup != "" { - wsBackendGroup = backendGroups[config.WSBackendGroup] - if wsBackendGroup == nil { - return nil, nil, fmt.Errorf("ws backend group %s does not exist", config.WSBackendGroup) - } - } - - if wsBackendGroup == nil && config.Server.WSPort != 0 { - return nil, nil, fmt.Errorf("a ws port was defined, but no ws group was defined") - } - - for _, bg := range config.RPCMethodMappings { - if backendGroups[bg] == nil { - return nil, nil, fmt.Errorf("undefined backend group %s", bg) - } - } - - var resolvedAuth map[string]string - - if config.Authentication != nil { - resolvedAuth = make(map[string]string) - for secret, alias := range config.Authentication { - resolvedSecret, err := ReadFromEnvOrConfig(secret) - if err != nil { - return nil, nil, err - } - resolvedAuth[resolvedSecret] = alias - } - } - - var ( - cache Cache - rpcCache RPCCache - ) - if config.Cache.Enabled { - if redisClient == nil { - log.Warn("redis is not configured, using in-memory cache") - cache = newMemoryCache() - } else { - ttl := defaultCacheTtl - if config.Cache.TTL != 0 { - ttl = time.Duration(config.Cache.TTL) - } - cache = newRedisCache(redisClient, config.Redis.Namespace, ttl) - } - rpcCache = newRPCCache(newCacheWithCompression(cache)) - } - - srv, err := NewServer( - backendGroups, - wsBackendGroup, - NewStringSetFromStrings(config.WSMethodWhitelist), - config.RPCMethodMappings, - config.Server.MaxBodySizeBytes, - resolvedAuth, - secondsToDuration(config.Server.TimeoutSeconds), - config.Server.MaxUpstreamBatchSize, - config.Server.EnableXServedByHeader, - rpcCache, - config.RateLimit, - config.SenderRateLimit, - config.Server.EnableRequestLog, - config.Server.MaxRequestBodyLogLen, - config.BatchConfig.MaxSize, - redisClient, - ) - if err != nil { - return nil, nil, fmt.Errorf("error creating server: %w", err) - } - - // Enable to support browser websocket connections. - // See https://pkg.go.dev/github.com/gorilla/websocket#hdr-Origin_Considerations - if config.Server.AllowAllOrigins { - srv.upgrader.CheckOrigin = func(r *http.Request) bool { - return true - } - } - - if config.Metrics.Enabled { - addr := fmt.Sprintf("%s:%d", config.Metrics.Host, config.Metrics.Port) - log.Info("starting metrics server", "addr", addr) - go func() { - if err := http.ListenAndServe(addr, promhttp.Handler()); err != nil { - log.Error("error starting metrics server", "err", err) - } - }() - } - - // To allow integration tests to cleanly come up, wait - // 10ms to give the below goroutines enough time to - // encounter an error creating their servers - errTimer := time.NewTimer(10 * time.Millisecond) - - if config.Server.RPCPort != 0 { - go func() { - if err := srv.RPCListenAndServe(config.Server.RPCHost, config.Server.RPCPort); err != nil { - if errors.Is(err, http.ErrServerClosed) { - log.Info("RPC server shut down") - return - } - log.Crit("error starting RPC server", "err", err) - } - }() - } - - if config.Server.WSPort != 0 { - go func() { - if err := srv.WSListenAndServe(config.Server.WSHost, config.Server.WSPort); err != nil { - if errors.Is(err, http.ErrServerClosed) { - log.Info("WS server shut down") - return - } - log.Crit("error starting WS server", "err", err) - } - }() - } else { - log.Info("WS server not enabled (ws_port is set to 0)") - } - - for bgName, bg := range backendGroups { - bgcfg := config.BackendGroups[bgName] - if bgcfg.ConsensusAware { - log.Info("creating poller for consensus aware backend_group", "name", bgName) - - copts := make([]ConsensusOpt, 0) - - if bgcfg.ConsensusAsyncHandler == "noop" { - copts = append(copts, WithAsyncHandler(NewNoopAsyncHandler())) - } - if bgcfg.ConsensusBanPeriod > 0 { - copts = append(copts, WithBanPeriod(time.Duration(bgcfg.ConsensusBanPeriod))) - } - if bgcfg.ConsensusMaxUpdateThreshold > 0 { - copts = append(copts, WithMaxUpdateThreshold(time.Duration(bgcfg.ConsensusMaxUpdateThreshold))) - } - if bgcfg.ConsensusMaxBlockLag > 0 { - copts = append(copts, WithMaxBlockLag(bgcfg.ConsensusMaxBlockLag)) - } - if bgcfg.ConsensusMinPeerCount > 0 { - copts = append(copts, WithMinPeerCount(uint64(bgcfg.ConsensusMinPeerCount))) - } - if bgcfg.ConsensusMaxBlockRange > 0 { - copts = append(copts, WithMaxBlockRange(bgcfg.ConsensusMaxBlockRange)) - } - if bgcfg.ConsensusPollerInterval > 0 { - copts = append(copts, WithPollerInterval(time.Duration(bgcfg.ConsensusPollerInterval))) - } - - for _, be := range bgcfg.Backends { - if fallback, ok := bg.FallbackBackends[be]; !ok { - log.Crit("error backend not found in backend fallback configurations", "backend_name", be) - } else { - log.Debug("configuring new backend for group", "backend_group", bgName, "backend_name", be, "fallback", fallback) - RecordBackendGroupFallbacks(bg, be, fallback) - } - } - - var tracker ConsensusTracker - if bgcfg.ConsensusHA { - if bgcfg.ConsensusHARedis.URL == "" { - log.Crit("must specify a consensus_ha_redis config when consensus_ha is true") - } - topts := make([]RedisConsensusTrackerOpt, 0) - if bgcfg.ConsensusHALockPeriod > 0 { - topts = append(topts, WithLockPeriod(time.Duration(bgcfg.ConsensusHALockPeriod))) - } - if bgcfg.ConsensusHAHeartbeatInterval > 0 { - topts = append(topts, WithHeartbeatInterval(time.Duration(bgcfg.ConsensusHAHeartbeatInterval))) - } - consensusHARedisClient, err := NewRedisClient(bgcfg.ConsensusHARedis.URL) - if err != nil { - return nil, nil, err - } - ns := fmt.Sprintf("%s:%s", bgcfg.ConsensusHARedis.Namespace, bg.Name) - tracker = NewRedisConsensusTracker(context.Background(), consensusHARedisClient, bg, ns, topts...) - copts = append(copts, WithTracker(tracker)) - } - - cp := NewConsensusPoller(bg, copts...) - bg.Consensus = cp - - if bgcfg.ConsensusHA { - tracker.(*RedisConsensusTracker).Init() - } - } - } - - <-errTimer.C - log.Info("started proxyd") - - shutdownFunc := func() { - log.Info("shutting down proxyd") - srv.Shutdown() - log.Info("goodbye") - } - - return srv, shutdownFunc, nil -} - -func validateReceiptsTarget(val string) (string, error) { - if val == "" { - val = ReceiptsTargetDebugGetRawReceipts - } - switch val { - case ReceiptsTargetDebugGetRawReceipts, - ReceiptsTargetAlchemyGetTransactionReceipts, - ReceiptsTargetEthGetTransactionReceipts, - ReceiptsTargetParityGetTransactionReceipts: - return val, nil - default: - return "", fmt.Errorf("invalid receipts target: %s", val) - } -} - -func secondsToDuration(seconds int) time.Duration { - return time.Duration(seconds) * time.Second -} - -func configureBackendTLS(cfg *BackendConfig) (*tls.Config, error) { - if cfg.CAFile == "" { - return nil, nil - } - - tlsConfig, err := CreateTLSClient(cfg.CAFile) - if err != nil { - return nil, err - } - - if cfg.ClientCertFile != "" && cfg.ClientKeyFile != "" { - cert, err := ParseKeyPair(cfg.ClientCertFile, cfg.ClientKeyFile) - if err != nil { - return nil, err - } - tlsConfig.Certificates = []tls.Certificate{cert} - } - - return tlsConfig, nil -} diff --git a/proxyd/reader.go b/proxyd/reader.go deleted file mode 100644 index b16301f1f087..000000000000 --- a/proxyd/reader.go +++ /dev/null @@ -1,32 +0,0 @@ -package proxyd - -import ( - "errors" - "io" -) - -var ErrLimitReaderOverLimit = errors.New("over read limit") - -func LimitReader(r io.Reader, n int64) io.Reader { return &LimitedReader{r, n} } - -// A LimitedReader reads from R but limits the amount of -// data returned to just N bytes. Each call to Read -// updates N to reflect the new amount remaining. -// Unlike the standard library version, Read returns -// ErrLimitReaderOverLimit when N <= 0. -type LimitedReader struct { - R io.Reader // underlying reader - N int64 // max bytes remaining -} - -func (l *LimitedReader) Read(p []byte) (int, error) { - if l.N <= 0 { - return 0, ErrLimitReaderOverLimit - } - if int64(len(p)) > l.N { - p = p[0:l.N] - } - n, err := l.R.Read(p) - l.N -= int64(n) - return n, err -} diff --git a/proxyd/reader_test.go b/proxyd/reader_test.go deleted file mode 100644 index 2ee23456edfc..000000000000 --- a/proxyd/reader_test.go +++ /dev/null @@ -1,43 +0,0 @@ -package proxyd - -import ( - "github.com/stretchr/testify/require" - "io" - "strings" - "testing" -) - -func TestLimitReader(t *testing.T) { - data := "hellohellohellohello" - r := LimitReader(strings.NewReader(data), 3) - buf := make([]byte, 3) - - // Buffer reads OK - n, err := r.Read(buf) - require.NoError(t, err) - require.Equal(t, 3, n) - - // Buffer is over limit - n, err = r.Read(buf) - require.Equal(t, ErrLimitReaderOverLimit, err) - require.Equal(t, 0, n) - - // Buffer on initial read is over size - buf = make([]byte, 16) - r = LimitReader(strings.NewReader(data), 3) - n, err = r.Read(buf) - require.NoError(t, err) - require.Equal(t, 3, n) - - // test with read all where the limit is less than the data - r = LimitReader(strings.NewReader(data), 3) - out, err := io.ReadAll(r) - require.Equal(t, ErrLimitReaderOverLimit, err) - require.Equal(t, "hel", string(out)) - - // test with read all where the limit is more than the data - r = LimitReader(strings.NewReader(data), 21) - out, err = io.ReadAll(r) - require.NoError(t, err) - require.Equal(t, data, string(out)) -} diff --git a/proxyd/redis.go b/proxyd/redis.go deleted file mode 100644 index bd15f527f9b7..000000000000 --- a/proxyd/redis.go +++ /dev/null @@ -1,22 +0,0 @@ -package proxyd - -import ( - "context" - "time" - - "github.com/redis/go-redis/v9" -) - -func NewRedisClient(url string) (*redis.Client, error) { - opts, err := redis.ParseURL(url) - if err != nil { - return nil, err - } - client := redis.NewClient(opts) - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - if err := client.Ping(ctx).Err(); err != nil { - return nil, wrapErr(err, "error connecting to redis") - } - return client, nil -} diff --git a/proxyd/rewriter.go b/proxyd/rewriter.go deleted file mode 100644 index 605787eff312..000000000000 --- a/proxyd/rewriter.go +++ /dev/null @@ -1,310 +0,0 @@ -package proxyd - -import ( - "encoding/json" - "errors" - - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/rpc" -) - -type RewriteContext struct { - latest hexutil.Uint64 - safe hexutil.Uint64 - finalized hexutil.Uint64 - maxBlockRange uint64 -} - -type RewriteResult uint8 - -const ( - // RewriteNone means request should be forwarded as-is - RewriteNone RewriteResult = iota - - // RewriteOverrideError means there was an error attempting to rewrite - RewriteOverrideError - - // RewriteOverrideRequest means the modified request should be forwarded to the backend - RewriteOverrideRequest - - // RewriteOverrideResponse means to skip calling the backend and serve the overridden response - RewriteOverrideResponse -) - -var ( - ErrRewriteBlockOutOfRange = errors.New("block is out of range") - ErrRewriteRangeTooLarge = errors.New("block range is too large") -) - -// RewriteTags modifies the request and the response based on block tags -func RewriteTags(rctx RewriteContext, req *RPCReq, res *RPCRes) (RewriteResult, error) { - rw, err := RewriteResponse(rctx, req, res) - if rw == RewriteOverrideResponse { - return rw, err - } - return RewriteRequest(rctx, req, res) -} - -// RewriteResponse modifies the response object to comply with the rewrite context -// after the method has been called at the backend -// RewriteResult informs the decision of the rewrite -func RewriteResponse(rctx RewriteContext, req *RPCReq, res *RPCRes) (RewriteResult, error) { - switch req.Method { - case "eth_blockNumber": - res.Result = rctx.latest - return RewriteOverrideResponse, nil - } - return RewriteNone, nil -} - -// RewriteRequest modifies the request object to comply with the rewrite context -// before the method has been called at the backend -// it returns false if nothing was changed -func RewriteRequest(rctx RewriteContext, req *RPCReq, res *RPCRes) (RewriteResult, error) { - switch req.Method { - case "eth_getLogs", - "eth_newFilter": - return rewriteRange(rctx, req, res, 0) - case "debug_getRawReceipts", "consensus_getReceipts": - return rewriteParam(rctx, req, res, 0, true, false) - case "eth_getBalance", - "eth_getCode", - "eth_getTransactionCount", - "eth_call": - return rewriteParam(rctx, req, res, 1, false, true) - case "eth_getStorageAt", - "eth_getProof": - return rewriteParam(rctx, req, res, 2, false, true) - case "eth_getBlockTransactionCountByNumber", - "eth_getUncleCountByBlockNumber", - "eth_getBlockByNumber", - "eth_getTransactionByBlockNumberAndIndex", - "eth_getUncleByBlockNumberAndIndex": - return rewriteParam(rctx, req, res, 0, false, false) - } - return RewriteNone, nil -} - -func rewriteParam(rctx RewriteContext, req *RPCReq, res *RPCRes, pos int, required bool, blockNrOrHash bool) (RewriteResult, error) { - var p []interface{} - err := json.Unmarshal(req.Params, &p) - if err != nil { - return RewriteOverrideError, err - } - - // we assume latest if the param is missing, - // and we don't rewrite if there is not enough params - if len(p) == pos && !required { - p = append(p, "latest") - } else if len(p) <= pos { - return RewriteNone, nil - } - - // support for https://eips.ethereum.org/EIPS/eip-1898 - var val interface{} - var rw bool - if blockNrOrHash { - bnh, err := remarshalBlockNumberOrHash(p[pos]) - if err != nil { - // fallback to string - s, ok := p[pos].(string) - if ok { - val, rw, err = rewriteTag(rctx, s) - if err != nil { - return RewriteOverrideError, err - } - } else { - return RewriteOverrideError, errors.New("expected BlockNumberOrHash or string") - } - } else { - val, rw, err = rewriteTagBlockNumberOrHash(rctx, bnh) - if err != nil { - return RewriteOverrideError, err - } - } - } else { - s, ok := p[pos].(string) - if !ok { - return RewriteOverrideError, errors.New("expected string") - } - - val, rw, err = rewriteTag(rctx, s) - if err != nil { - return RewriteOverrideError, err - } - } - - if rw { - p[pos] = val - paramRaw, err := json.Marshal(p) - if err != nil { - return RewriteOverrideError, err - } - req.Params = paramRaw - return RewriteOverrideRequest, nil - } - return RewriteNone, nil -} - -func rewriteRange(rctx RewriteContext, req *RPCReq, res *RPCRes, pos int) (RewriteResult, error) { - var p []map[string]interface{} - err := json.Unmarshal(req.Params, &p) - if err != nil { - return RewriteOverrideError, err - } - - // if either fromBlock or toBlock is defined, default the other to "latest" if unset - _, hasFrom := p[pos]["fromBlock"] - _, hasTo := p[pos]["toBlock"] - if hasFrom && !hasTo { - p[pos]["toBlock"] = "latest" - } else if hasTo && !hasFrom { - p[pos]["fromBlock"] = "latest" - } - - modifiedFrom, err := rewriteTagMap(rctx, p[pos], "fromBlock") - if err != nil { - return RewriteOverrideError, err - } - - modifiedTo, err := rewriteTagMap(rctx, p[pos], "toBlock") - if err != nil { - return RewriteOverrideError, err - } - - if rctx.maxBlockRange > 0 && (hasFrom || hasTo) { - from, err := blockNumber(p[pos], "fromBlock", uint64(rctx.latest)) - if err != nil { - return RewriteOverrideError, err - } - to, err := blockNumber(p[pos], "toBlock", uint64(rctx.latest)) - if err != nil { - return RewriteOverrideError, err - } - if to-from > rctx.maxBlockRange { - return RewriteOverrideError, ErrRewriteRangeTooLarge - } - } - - // if any of the fields the request have been changed, re-marshal the params - if modifiedFrom || modifiedTo { - paramsRaw, err := json.Marshal(p) - req.Params = paramsRaw - if err != nil { - return RewriteOverrideError, err - } - return RewriteOverrideRequest, nil - } - - return RewriteNone, nil -} - -func blockNumber(m map[string]interface{}, key string, latest uint64) (uint64, error) { - current, ok := m[key].(string) - if !ok { - return 0, errors.New("expected string") - } - // the latest/safe/finalized tags are already replaced by rewriteTag - if current == "earliest" { - return 0, nil - } - if current == "pending" { - return latest + 1, nil - } - return hexutil.DecodeUint64(current) -} - -func rewriteTagMap(rctx RewriteContext, m map[string]interface{}, key string) (bool, error) { - if m[key] == nil || m[key] == "" { - return false, nil - } - - current, ok := m[key].(string) - if !ok { - return false, errors.New("expected string") - } - - val, rw, err := rewriteTag(rctx, current) - if err != nil { - return false, err - } - if rw { - m[key] = val - return true, nil - } - - return false, nil -} - -func remarshalBlockNumberOrHash(current interface{}) (*rpc.BlockNumberOrHash, error) { - jv, err := json.Marshal(current) - if err != nil { - return nil, err - } - - var bnh rpc.BlockNumberOrHash - err = bnh.UnmarshalJSON(jv) - if err != nil { - return nil, err - } - - return &bnh, nil -} - -func rewriteTag(rctx RewriteContext, current string) (string, bool, error) { - bnh, err := remarshalBlockNumberOrHash(current) - if err != nil { - return "", false, err - } - - // this is a hash, not a block - if bnh.BlockNumber == nil { - return current, false, nil - } - - switch *bnh.BlockNumber { - case rpc.PendingBlockNumber, - rpc.EarliestBlockNumber: - return current, false, nil - case rpc.FinalizedBlockNumber: - return rctx.finalized.String(), true, nil - case rpc.SafeBlockNumber: - return rctx.safe.String(), true, nil - case rpc.LatestBlockNumber: - return rctx.latest.String(), true, nil - default: - if bnh.BlockNumber.Int64() > int64(rctx.latest) { - return "", false, ErrRewriteBlockOutOfRange - } - } - - return current, false, nil -} - -func rewriteTagBlockNumberOrHash(rctx RewriteContext, current *rpc.BlockNumberOrHash) (*rpc.BlockNumberOrHash, bool, error) { - // this is a hash, not a block number - if current.BlockNumber == nil { - return current, false, nil - } - - switch *current.BlockNumber { - case rpc.PendingBlockNumber, - rpc.EarliestBlockNumber: - return current, false, nil - case rpc.FinalizedBlockNumber: - bn := rpc.BlockNumberOrHashWithNumber(rpc.BlockNumber(rctx.finalized)) - return &bn, true, nil - case rpc.SafeBlockNumber: - bn := rpc.BlockNumberOrHashWithNumber(rpc.BlockNumber(rctx.safe)) - return &bn, true, nil - case rpc.LatestBlockNumber: - bn := rpc.BlockNumberOrHashWithNumber(rpc.BlockNumber(rctx.latest)) - return &bn, true, nil - default: - if current.BlockNumber.Int64() > int64(rctx.latest) { - return nil, false, ErrRewriteBlockOutOfRange - } - } - - return current, false, nil -} diff --git a/proxyd/rewriter_test.go b/proxyd/rewriter_test.go deleted file mode 100644 index 1f0d80ba25c9..000000000000 --- a/proxyd/rewriter_test.go +++ /dev/null @@ -1,717 +0,0 @@ -package proxyd - -import ( - "encoding/json" - "strings" - "testing" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/rpc" - "github.com/stretchr/testify/require" -) - -type args struct { - rctx RewriteContext - req *RPCReq - res *RPCRes -} - -type rewriteTest struct { - name string - args args - expected RewriteResult - expectedErr error - check func(*testing.T, args) -} - -func TestRewriteRequest(t *testing.T) { - tests := []rewriteTest{ - /* range scoped */ - { - name: "eth_getLogs fromBlock latest", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getLogs", Params: mustMarshalJSON([]map[string]interface{}{{"fromBlock": "latest"}})}, - res: nil, - }, - expected: RewriteOverrideRequest, - check: func(t *testing.T, args args) { - var p []map[string]interface{} - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, hexutil.Uint64(100).String(), p[0]["fromBlock"]) - }, - }, - { - name: "eth_getLogs fromBlock within range", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getLogs", Params: mustMarshalJSON([]map[string]interface{}{{"fromBlock": hexutil.Uint64(55).String()}})}, - res: nil, - }, - expected: RewriteOverrideRequest, - check: func(t *testing.T, args args) { - var p []map[string]interface{} - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, hexutil.Uint64(55).String(), p[0]["fromBlock"]) - }, - }, - { - name: "eth_getLogs fromBlock out of range", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getLogs", Params: mustMarshalJSON([]map[string]interface{}{{"fromBlock": hexutil.Uint64(111).String()}})}, - res: nil, - }, - expected: RewriteOverrideError, - expectedErr: ErrRewriteBlockOutOfRange, - }, - { - name: "eth_getLogs toBlock latest", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getLogs", Params: mustMarshalJSON([]map[string]interface{}{{"toBlock": "latest"}})}, - res: nil, - }, - expected: RewriteOverrideRequest, - check: func(t *testing.T, args args) { - var p []map[string]interface{} - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, hexutil.Uint64(100).String(), p[0]["toBlock"]) - }, - }, - { - name: "eth_getLogs toBlock within range", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getLogs", Params: mustMarshalJSON([]map[string]interface{}{{"toBlock": hexutil.Uint64(55).String()}})}, - res: nil, - }, - expected: RewriteOverrideRequest, - check: func(t *testing.T, args args) { - var p []map[string]interface{} - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, hexutil.Uint64(55).String(), p[0]["toBlock"]) - }, - }, - { - name: "eth_getLogs toBlock out of range", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getLogs", Params: mustMarshalJSON([]map[string]interface{}{{"toBlock": hexutil.Uint64(111).String()}})}, - res: nil, - }, - expected: RewriteOverrideError, - expectedErr: ErrRewriteBlockOutOfRange, - }, - { - name: "eth_getLogs fromBlock, toBlock latest", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getLogs", Params: mustMarshalJSON([]map[string]interface{}{{"fromBlock": "latest", "toBlock": "latest"}})}, - res: nil, - }, - expected: RewriteOverrideRequest, - check: func(t *testing.T, args args) { - var p []map[string]interface{} - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, hexutil.Uint64(100).String(), p[0]["fromBlock"]) - require.Equal(t, hexutil.Uint64(100).String(), p[0]["toBlock"]) - }, - }, - { - name: "eth_getLogs fromBlock, toBlock within range", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getLogs", Params: mustMarshalJSON([]map[string]interface{}{{"fromBlock": hexutil.Uint64(55).String(), "toBlock": hexutil.Uint64(77).String()}})}, - res: nil, - }, - expected: RewriteNone, - check: func(t *testing.T, args args) { - var p []map[string]interface{} - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, hexutil.Uint64(55).String(), p[0]["fromBlock"]) - require.Equal(t, hexutil.Uint64(77).String(), p[0]["toBlock"]) - }, - }, - { - name: "eth_getLogs fromBlock, toBlock out of range", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getLogs", Params: mustMarshalJSON([]map[string]interface{}{{"fromBlock": hexutil.Uint64(111).String(), "toBlock": hexutil.Uint64(222).String()}})}, - res: nil, - }, - expected: RewriteOverrideError, - expectedErr: ErrRewriteBlockOutOfRange, - }, - { - name: "eth_getLogs fromBlock -> toBlock above max range", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100), maxBlockRange: 30}, - req: &RPCReq{Method: "eth_getLogs", Params: mustMarshalJSON([]map[string]interface{}{{"fromBlock": hexutil.Uint64(20).String(), "toBlock": hexutil.Uint64(80).String()}})}, - res: nil, - }, - expected: RewriteOverrideError, - expectedErr: ErrRewriteRangeTooLarge, - }, - { - name: "eth_getLogs earliest -> latest above max range", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100), maxBlockRange: 30}, - req: &RPCReq{Method: "eth_getLogs", Params: mustMarshalJSON([]map[string]interface{}{{"fromBlock": "earliest", "toBlock": "latest"}})}, - res: nil, - }, - expected: RewriteOverrideError, - expectedErr: ErrRewriteRangeTooLarge, - }, - { - name: "eth_getLogs earliest -> pending above max range", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100), maxBlockRange: 30}, - req: &RPCReq{Method: "eth_getLogs", Params: mustMarshalJSON([]map[string]interface{}{{"fromBlock": "earliest", "toBlock": "pending"}})}, - res: nil, - }, - expected: RewriteOverrideError, - expectedErr: ErrRewriteRangeTooLarge, - }, - { - name: "eth_getLogs earliest -> default above max range", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100), maxBlockRange: 30}, - req: &RPCReq{Method: "eth_getLogs", Params: mustMarshalJSON([]map[string]interface{}{{"fromBlock": "earliest"}})}, - res: nil, - }, - expected: RewriteOverrideError, - expectedErr: ErrRewriteRangeTooLarge, - }, - { - name: "eth_getLogs default -> latest within range", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100), maxBlockRange: 30}, - req: &RPCReq{Method: "eth_getLogs", Params: mustMarshalJSON([]map[string]interface{}{{"toBlock": "latest"}})}, - res: nil, - }, - expected: RewriteOverrideRequest, - check: func(t *testing.T, args args) { - var p []map[string]interface{} - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, hexutil.Uint64(100).String(), p[0]["fromBlock"]) - require.Equal(t, hexutil.Uint64(100).String(), p[0]["toBlock"]) - }, - }, - /* required parameter at pos 0 */ - { - name: "debug_getRawReceipts latest", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "debug_getRawReceipts", Params: mustMarshalJSON([]string{"latest"})}, - res: nil, - }, - expected: RewriteOverrideRequest, - check: func(t *testing.T, args args) { - var p []string - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, 1, len(p)) - require.Equal(t, hexutil.Uint64(100).String(), p[0]) - }, - }, - { - name: "debug_getRawReceipts within range", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "debug_getRawReceipts", Params: mustMarshalJSON([]string{hexutil.Uint64(55).String()})}, - res: nil, - }, - expected: RewriteNone, - check: func(t *testing.T, args args) { - var p []string - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, 1, len(p)) - require.Equal(t, hexutil.Uint64(55).String(), p[0]) - }, - }, - { - name: "debug_getRawReceipts out of range", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "debug_getRawReceipts", Params: mustMarshalJSON([]string{hexutil.Uint64(111).String()})}, - res: nil, - }, - expected: RewriteOverrideError, - expectedErr: ErrRewriteBlockOutOfRange, - }, - { - name: "debug_getRawReceipts missing parameter", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "debug_getRawReceipts", Params: mustMarshalJSON([]string{})}, - res: nil, - }, - expected: RewriteNone, - }, - { - name: "debug_getRawReceipts with block hash", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "debug_getRawReceipts", Params: mustMarshalJSON([]string{"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b"})}, - res: nil, - }, - expected: RewriteNone, - check: func(t *testing.T, args args) { - var p []string - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, 1, len(p)) - require.Equal(t, "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", p[0]) - }, - }, - /* default block parameter */ - { - name: "eth_getCode omit block, should add", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getCode", Params: mustMarshalJSON([]string{"0x123"})}, - res: nil, - }, - expected: RewriteOverrideRequest, - check: func(t *testing.T, args args) { - var p []interface{} - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, 2, len(p)) - require.Equal(t, "0x123", p[0]) - bnh, err := remarshalBlockNumberOrHash(p[1]) - require.Nil(t, err) - require.Equal(t, rpc.BlockNumberOrHashWithNumber(100), *bnh) - }, - }, - { - name: "eth_getCode not enough params, should do nothing", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getCode", Params: mustMarshalJSON([]string{})}, - res: nil, - }, - expected: RewriteNone, - check: func(t *testing.T, args args) { - var p []string - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, 0, len(p)) - }, - }, - { - name: "eth_getCode latest", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getCode", Params: mustMarshalJSON([]string{"0x123", "latest"})}, - res: nil, - }, - expected: RewriteOverrideRequest, - check: func(t *testing.T, args args) { - var p []interface{} - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, 2, len(p)) - require.Equal(t, "0x123", p[0]) - bnh, err := remarshalBlockNumberOrHash(p[1]) - require.Nil(t, err) - require.Equal(t, rpc.BlockNumberOrHashWithNumber(100), *bnh) - }, - }, - { - name: "eth_getCode within range", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getCode", Params: mustMarshalJSON([]string{"0x123", hexutil.Uint64(55).String()})}, - res: nil, - }, - expected: RewriteNone, - check: func(t *testing.T, args args) { - var p []string - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, 2, len(p)) - require.Equal(t, "0x123", p[0]) - require.Equal(t, hexutil.Uint64(55).String(), p[1]) - }, - }, - { - name: "eth_getCode out of range", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getCode", Params: mustMarshalJSON([]string{"0x123", hexutil.Uint64(111).String()})}, - res: nil, - }, - expected: RewriteOverrideError, - expectedErr: ErrRewriteBlockOutOfRange, - }, - /* default block parameter, at position 2 */ - { - name: "eth_getStorageAt omit block, should add", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getStorageAt", Params: mustMarshalJSON([]string{"0x123", "5"})}, - res: nil, - }, - expected: RewriteOverrideRequest, - check: func(t *testing.T, args args) { - var p []interface{} - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, 3, len(p)) - require.Equal(t, "0x123", p[0]) - require.Equal(t, "5", p[1]) - bnh, err := remarshalBlockNumberOrHash(p[2]) - require.Nil(t, err) - require.Equal(t, rpc.BlockNumberOrHashWithNumber(100), *bnh) - }, - }, - { - name: "eth_getStorageAt latest", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getStorageAt", Params: mustMarshalJSON([]string{"0x123", "5", "latest"})}, - res: nil, - }, - expected: RewriteOverrideRequest, - check: func(t *testing.T, args args) { - var p []interface{} - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, 3, len(p)) - require.Equal(t, "0x123", p[0]) - require.Equal(t, "5", p[1]) - bnh, err := remarshalBlockNumberOrHash(p[2]) - require.Nil(t, err) - require.Equal(t, rpc.BlockNumberOrHashWithNumber(100), *bnh) - }, - }, - { - name: "eth_getStorageAt within range", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getStorageAt", Params: mustMarshalJSON([]string{"0x123", "5", hexutil.Uint64(55).String()})}, - res: nil, - }, - expected: RewriteNone, - check: func(t *testing.T, args args) { - var p []string - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, 3, len(p)) - require.Equal(t, "0x123", p[0]) - require.Equal(t, "5", p[1]) - require.Equal(t, hexutil.Uint64(55).String(), p[2]) - }, - }, - { - name: "eth_getStorageAt out of range", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getStorageAt", Params: mustMarshalJSON([]string{"0x123", "5", hexutil.Uint64(111).String()})}, - res: nil, - }, - expected: RewriteOverrideError, - expectedErr: ErrRewriteBlockOutOfRange, - }, - /* default block parameter, at position 0 */ - { - name: "eth_getBlockByNumber omit block, should add", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getBlockByNumber", Params: mustMarshalJSON([]string{})}, - res: nil, - }, - expected: RewriteOverrideRequest, - check: func(t *testing.T, args args) { - var p []string - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, 1, len(p)) - require.Equal(t, hexutil.Uint64(100).String(), p[0]) - }, - }, - { - name: "eth_getBlockByNumber latest", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getBlockByNumber", Params: mustMarshalJSON([]string{"latest"})}, - res: nil, - }, - expected: RewriteOverrideRequest, - check: func(t *testing.T, args args) { - var p []string - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, 1, len(p)) - require.Equal(t, hexutil.Uint64(100).String(), p[0]) - }, - }, - { - name: "eth_getBlockByNumber finalized", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100), finalized: hexutil.Uint64(55)}, - req: &RPCReq{Method: "eth_getBlockByNumber", Params: mustMarshalJSON([]string{"finalized"})}, - res: nil, - }, - expected: RewriteOverrideRequest, - check: func(t *testing.T, args args) { - var p []string - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, 1, len(p)) - require.Equal(t, hexutil.Uint64(55).String(), p[0]) - }, - }, - { - name: "eth_getBlockByNumber safe", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100), safe: hexutil.Uint64(50)}, - req: &RPCReq{Method: "eth_getBlockByNumber", Params: mustMarshalJSON([]string{"safe"})}, - res: nil, - }, - expected: RewriteOverrideRequest, - check: func(t *testing.T, args args) { - var p []string - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, 1, len(p)) - require.Equal(t, hexutil.Uint64(50).String(), p[0]) - }, - }, - { - name: "eth_getBlockByNumber within range", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getBlockByNumber", Params: mustMarshalJSON([]string{hexutil.Uint64(55).String()})}, - res: nil, - }, - expected: RewriteNone, - check: func(t *testing.T, args args) { - var p []string - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, 1, len(p)) - require.Equal(t, hexutil.Uint64(55).String(), p[0]) - }, - }, - { - name: "eth_getBlockByNumber out of range", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getBlockByNumber", Params: mustMarshalJSON([]string{hexutil.Uint64(111).String()})}, - res: nil, - }, - expected: RewriteOverrideError, - expectedErr: ErrRewriteBlockOutOfRange, - }, - { - name: "eth_getStorageAt using rpc.BlockNumberOrHash", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getStorageAt", Params: mustMarshalJSON([]string{ - "0xae851f927ee40de99aabb7461c00f9622ab91d60", - "0x65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08", - "0x1c4840bcb3de3ac403c0075b46c2c47d4396c5b624b6e1b2874ec04e8879b483"})}, - res: nil, - }, - expected: RewriteNone, - }, - // eip1898 - { - name: "eth_getStorageAt using rpc.BlockNumberOrHash at genesis (blockNumber)", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getStorageAt", Params: mustMarshalJSON([]interface{}{ - "0xae851f927ee40de99aabb7461c00f9622ab91d60", - "10", - map[string]interface{}{ - "blockNumber": "0x0", - }})}, - res: nil, - }, - expected: RewriteNone, - }, - { - name: "eth_getStorageAt using rpc.BlockNumberOrHash at genesis (hash)", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getStorageAt", Params: mustMarshalJSON([]interface{}{ - "0xae851f927ee40de99aabb7461c00f9622ab91d60", - "10", - map[string]interface{}{ - "blockHash": "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3", - "requireCanonical": true, - }})}, - res: nil, - }, - expected: RewriteNone, - check: func(t *testing.T, args args) { - var p []interface{} - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, 3, len(p)) - require.Equal(t, "0xae851f927ee40de99aabb7461c00f9622ab91d60", p[0]) - require.Equal(t, "10", p[1]) - bnh, err := remarshalBlockNumberOrHash(p[2]) - require.Nil(t, err) - require.Equal(t, rpc.BlockNumberOrHashWithHash(common.HexToHash("0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3"), true), *bnh) - require.True(t, bnh.RequireCanonical) - }, - }, - { - name: "eth_getStorageAt using rpc.BlockNumberOrHash at latest (blockNumber)", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getStorageAt", Params: mustMarshalJSON([]interface{}{ - "0xae851f927ee40de99aabb7461c00f9622ab91d60", - "10", - map[string]interface{}{ - "blockNumber": "latest", - }})}, - res: nil, - }, - expected: RewriteOverrideRequest, - check: func(t *testing.T, args args) { - var p []interface{} - err := json.Unmarshal(args.req.Params, &p) - require.Nil(t, err) - require.Equal(t, 3, len(p)) - require.Equal(t, "0xae851f927ee40de99aabb7461c00f9622ab91d60", p[0]) - require.Equal(t, "10", p[1]) - bnh, err := remarshalBlockNumberOrHash(p[2]) - require.Nil(t, err) - require.Equal(t, rpc.BlockNumberOrHashWithNumber(100), *bnh) - }, - }, - { - name: "eth_getStorageAt using rpc.BlockNumberOrHash out of range", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_getStorageAt", Params: mustMarshalJSON([]interface{}{ - "0xae851f927ee40de99aabb7461c00f9622ab91d60", - "10", - map[string]interface{}{ - "blockNumber": "0x111", - }})}, - res: nil, - }, - expected: RewriteOverrideError, - expectedErr: ErrRewriteBlockOutOfRange, - }, - } - - // generalize tests for other methods with same interface and behavior - tests = generalize(tests, "eth_getLogs", "eth_newFilter") - tests = generalize(tests, "eth_getCode", "eth_getBalance") - tests = generalize(tests, "eth_getCode", "eth_getTransactionCount") - tests = generalize(tests, "eth_getCode", "eth_call") - tests = generalize(tests, "eth_getBlockByNumber", "eth_getBlockTransactionCountByNumber") - tests = generalize(tests, "eth_getBlockByNumber", "eth_getUncleCountByBlockNumber") - tests = generalize(tests, "eth_getBlockByNumber", "eth_getTransactionByBlockNumberAndIndex") - tests = generalize(tests, "eth_getBlockByNumber", "eth_getUncleByBlockNumberAndIndex") - tests = generalize(tests, "eth_getStorageSlotAt", "eth_getProof") - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result, err := RewriteRequest(tt.args.rctx, tt.args.req, tt.args.res) - if result != RewriteOverrideError { - require.Nil(t, err) - require.Equal(t, tt.expected, result) - } else { - require.Equal(t, tt.expectedErr, err) - } - if tt.check != nil { - tt.check(t, tt.args) - } - }) - } -} - -func generalize(tests []rewriteTest, baseMethod string, generalizedMethod string) []rewriteTest { - newCases := make([]rewriteTest, 0) - for _, t := range tests { - if t.args.req.Method == baseMethod { - newName := strings.Replace(t.name, baseMethod, generalizedMethod, -1) - var req *RPCReq - var res *RPCRes - - if t.args.req != nil { - req = &RPCReq{ - JSONRPC: t.args.req.JSONRPC, - Method: generalizedMethod, - Params: t.args.req.Params, - ID: t.args.req.ID, - } - } - - if t.args.res != nil { - res = &RPCRes{ - JSONRPC: t.args.res.JSONRPC, - Result: t.args.res.Result, - Error: t.args.res.Error, - ID: t.args.res.ID, - } - } - newCases = append(newCases, rewriteTest{ - name: newName, - args: args{ - rctx: t.args.rctx, - req: req, - res: res, - }, - expected: t.expected, - expectedErr: t.expectedErr, - check: t.check, - }) - } - } - return append(tests, newCases...) -} - -func TestRewriteResponse(t *testing.T) { - type args struct { - rctx RewriteContext - req *RPCReq - res *RPCRes - } - tests := []struct { - name string - args args - expected RewriteResult - check func(*testing.T, args) - }{ - { - name: "eth_blockNumber latest", - args: args{ - rctx: RewriteContext{latest: hexutil.Uint64(100)}, - req: &RPCReq{Method: "eth_blockNumber"}, - res: &RPCRes{Result: hexutil.Uint64(200)}, - }, - expected: RewriteOverrideResponse, - check: func(t *testing.T, args args) { - require.Equal(t, args.res.Result, hexutil.Uint64(100)) - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result, err := RewriteResponse(tt.args.rctx, tt.args.req, tt.args.res) - require.Nil(t, err) - require.Equal(t, tt.expected, result) - if tt.check != nil { - tt.check(t, tt.args) - } - }) - } -} diff --git a/proxyd/rpc.go b/proxyd/rpc.go deleted file mode 100644 index 902e26699b49..000000000000 --- a/proxyd/rpc.go +++ /dev/null @@ -1,170 +0,0 @@ -package proxyd - -import ( - "encoding/json" - "io" - "strings" -) - -type RPCReq struct { - JSONRPC string `json:"jsonrpc"` - Method string `json:"method"` - Params json.RawMessage `json:"params"` - ID json.RawMessage `json:"id"` -} - -type RPCRes struct { - JSONRPC string - Result interface{} - Error *RPCErr - ID json.RawMessage -} - -type rpcResJSON struct { - JSONRPC string `json:"jsonrpc"` - Result interface{} `json:"result,omitempty"` - Error *RPCErr `json:"error,omitempty"` - ID json.RawMessage `json:"id"` -} - -type nullResultRPCRes struct { - JSONRPC string `json:"jsonrpc"` - Result interface{} `json:"result"` - ID json.RawMessage `json:"id"` -} - -func (r *RPCRes) IsError() bool { - return r.Error != nil -} - -func (r *RPCRes) MarshalJSON() ([]byte, error) { - if r.Result == nil && r.Error == nil { - return json.Marshal(&nullResultRPCRes{ - JSONRPC: r.JSONRPC, - Result: nil, - ID: r.ID, - }) - } - - return json.Marshal(&rpcResJSON{ - JSONRPC: r.JSONRPC, - Result: r.Result, - Error: r.Error, - ID: r.ID, - }) -} - -type RPCErr struct { - Code int `json:"code"` - Message string `json:"message"` - Data string `json:"data,omitempty"` - HTTPErrorCode int `json:"-"` -} - -func (r *RPCErr) Error() string { - return r.Message -} - -func (r *RPCErr) Clone() *RPCErr { - return &RPCErr{ - Code: r.Code, - Message: r.Message, - HTTPErrorCode: r.HTTPErrorCode, - } -} - -func IsValidID(id json.RawMessage) bool { - // handle the case where the ID is a string - if strings.HasPrefix(string(id), "\"") && strings.HasSuffix(string(id), "\"") { - return len(id) > 2 - } - - // technically allows a boolean/null ID, but so does Geth - // https://github.com/ethereum/go-ethereum/blob/master/rpc/json.go#L72 - return len(id) > 0 && id[0] != '{' && id[0] != '[' -} - -func ParseRPCReq(body []byte) (*RPCReq, error) { - req := new(RPCReq) - if err := json.Unmarshal(body, req); err != nil { - return nil, ErrParseErr - } - - return req, nil -} - -func ParseBatchRPCReq(body []byte) ([]json.RawMessage, error) { - batch := make([]json.RawMessage, 0) - if err := json.Unmarshal(body, &batch); err != nil { - return nil, err - } - - return batch, nil -} - -func ParseRPCRes(r io.Reader) (*RPCRes, error) { - body, err := io.ReadAll(r) - if err != nil { - return nil, wrapErr(err, "error reading RPC response") - } - - res := new(RPCRes) - if err := json.Unmarshal(body, res); err != nil { - return nil, wrapErr(err, "error unmarshalling RPC response") - } - - return res, nil -} - -func ValidateRPCReq(req *RPCReq) error { - if req.JSONRPC != JSONRPCVersion { - return ErrInvalidRequest("invalid JSON-RPC version") - } - - if req.Method == "" { - return ErrInvalidRequest("no method specified") - } - - if !IsValidID(req.ID) { - return ErrInvalidRequest("invalid ID") - } - - return nil -} - -func NewRPCErrorRes(id json.RawMessage, err error) *RPCRes { - var rpcErr *RPCErr - if rr, ok := err.(*RPCErr); ok { - rpcErr = rr - } else { - rpcErr = &RPCErr{ - Code: JSONRPCErrorInternal, - Message: err.Error(), - } - } - - return &RPCRes{ - JSONRPC: JSONRPCVersion, - Error: rpcErr, - ID: id, - } -} - -func NewRPCRes(id json.RawMessage, result interface{}) *RPCRes { - return &RPCRes{ - JSONRPC: JSONRPCVersion, - Result: result, - ID: id, - } -} - -func IsBatch(raw []byte) bool { - for _, c := range raw { - // skip insignificant whitespace (http://www.ietf.org/rfc/rfc4627.txt) - if c == 0x20 || c == 0x09 || c == 0x0a || c == 0x0d { - continue - } - return c == '[' - } - return false -} diff --git a/proxyd/rpc_test.go b/proxyd/rpc_test.go deleted file mode 100644 index e30fe9361a6b..000000000000 --- a/proxyd/rpc_test.go +++ /dev/null @@ -1,89 +0,0 @@ -package proxyd - -import ( - "encoding/json" - "testing" - - "github.com/stretchr/testify/require" -) - -func TestRPCResJSON(t *testing.T) { - tests := []struct { - name string - in *RPCRes - out string - }{ - { - "string result", - &RPCRes{ - JSONRPC: JSONRPCVersion, - Result: "foobar", - ID: []byte("123"), - }, - `{"jsonrpc":"2.0","result":"foobar","id":123}`, - }, - { - "object result", - &RPCRes{ - JSONRPC: JSONRPCVersion, - Result: struct { - Str string `json:"str"` - }{ - "test", - }, - ID: []byte("123"), - }, - `{"jsonrpc":"2.0","result":{"str":"test"},"id":123}`, - }, - { - "nil result", - &RPCRes{ - JSONRPC: JSONRPCVersion, - Result: nil, - ID: []byte("123"), - }, - `{"jsonrpc":"2.0","result":null,"id":123}`, - }, - { - "error result without data", - &RPCRes{ - JSONRPC: JSONRPCVersion, - Error: &RPCErr{ - Code: 1234, - Message: "test err", - }, - ID: []byte("123"), - }, - `{"jsonrpc":"2.0","error":{"code":1234,"message":"test err"},"id":123}`, - }, - { - "error result with data", - &RPCRes{ - JSONRPC: JSONRPCVersion, - Error: &RPCErr{ - Code: 1234, - Message: "test err", - Data: "revert", - }, - ID: []byte("123"), - }, - `{"jsonrpc":"2.0","error":{"code":1234,"message":"test err","data":"revert"},"id":123}`, - }, - { - "string ID", - &RPCRes{ - JSONRPC: JSONRPCVersion, - Result: "foobar", - ID: []byte("\"123\""), - }, - `{"jsonrpc":"2.0","result":"foobar","id":"123"}`, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - out, err := json.Marshal(tt.in) - require.NoError(t, err) - require.Equal(t, tt.out, string(out)) - }) - } -} diff --git a/proxyd/server.go b/proxyd/server.go deleted file mode 100644 index 527c2e6c1ff8..000000000000 --- a/proxyd/server.go +++ /dev/null @@ -1,877 +0,0 @@ -package proxyd - -import ( - "context" - "crypto/rand" - "encoding/hex" - "encoding/json" - "errors" - "fmt" - "io" - "math" - "math/big" - "net/http" - "regexp" - "strconv" - "strings" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/txpool" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/log" - "github.com/gorilla/mux" - "github.com/gorilla/websocket" - "github.com/prometheus/client_golang/prometheus" - "github.com/redis/go-redis/v9" - "github.com/rs/cors" - "github.com/syndtr/goleveldb/leveldb/opt" -) - -const ( - ContextKeyAuth = "authorization" - ContextKeyReqID = "req_id" - ContextKeyXForwardedFor = "x_forwarded_for" - DefaultMaxBatchRPCCallsLimit = 100 - MaxBatchRPCCallsHardLimit = 1000 - cacheStatusHdr = "X-Proxyd-Cache-Status" - defaultRPCTimeout = 10 * time.Second - defaultBodySizeLimit = 256 * opt.KiB - defaultWSHandshakeTimeout = 10 * time.Second - defaultWSReadTimeout = 2 * time.Minute - defaultWSWriteTimeout = 10 * time.Second - defaultCacheTtl = 1 * time.Hour - maxRequestBodyLogLen = 2000 - defaultMaxUpstreamBatchSize = 10 - defaultRateLimitHeader = "X-Forwarded-For" -) - -var emptyArrayResponse = json.RawMessage("[]") - -type Server struct { - BackendGroups map[string]*BackendGroup - wsBackendGroup *BackendGroup - wsMethodWhitelist *StringSet - rpcMethodMappings map[string]string - maxBodySize int64 - enableRequestLog bool - maxRequestBodyLogLen int - authenticatedPaths map[string]string - timeout time.Duration - maxUpstreamBatchSize int - maxBatchSize int - enableServedByHeader bool - upgrader *websocket.Upgrader - mainLim FrontendRateLimiter - overrideLims map[string]FrontendRateLimiter - senderLim FrontendRateLimiter - allowedChainIds []*big.Int - limExemptOrigins []*regexp.Regexp - limExemptUserAgents []*regexp.Regexp - globallyLimitedMethods map[string]bool - rpcServer *http.Server - wsServer *http.Server - cache RPCCache - srvMu sync.Mutex - rateLimitHeader string -} - -type limiterFunc func(method string) bool - -func NewServer( - backendGroups map[string]*BackendGroup, - wsBackendGroup *BackendGroup, - wsMethodWhitelist *StringSet, - rpcMethodMappings map[string]string, - maxBodySize int64, - authenticatedPaths map[string]string, - timeout time.Duration, - maxUpstreamBatchSize int, - enableServedByHeader bool, - cache RPCCache, - rateLimitConfig RateLimitConfig, - senderRateLimitConfig SenderRateLimitConfig, - enableRequestLog bool, - maxRequestBodyLogLen int, - maxBatchSize int, - redisClient *redis.Client, -) (*Server, error) { - if cache == nil { - cache = &NoopRPCCache{} - } - - if maxBodySize == 0 { - maxBodySize = defaultBodySizeLimit - } - - if timeout == 0 { - timeout = defaultRPCTimeout - } - - if maxUpstreamBatchSize == 0 { - maxUpstreamBatchSize = defaultMaxUpstreamBatchSize - } - - if maxBatchSize == 0 { - maxBatchSize = DefaultMaxBatchRPCCallsLimit - } - - if maxBatchSize > MaxBatchRPCCallsHardLimit { - maxBatchSize = MaxBatchRPCCallsHardLimit - } - - limiterFactory := func(dur time.Duration, max int, prefix string) FrontendRateLimiter { - if rateLimitConfig.UseRedis { - return NewRedisFrontendRateLimiter(redisClient, dur, max, prefix) - } - - return NewMemoryFrontendRateLimit(dur, max) - } - - var mainLim FrontendRateLimiter - limExemptOrigins := make([]*regexp.Regexp, 0) - limExemptUserAgents := make([]*regexp.Regexp, 0) - if rateLimitConfig.BaseRate > 0 { - mainLim = limiterFactory(time.Duration(rateLimitConfig.BaseInterval), rateLimitConfig.BaseRate, "main") - for _, origin := range rateLimitConfig.ExemptOrigins { - pattern, err := regexp.Compile(origin) - if err != nil { - return nil, err - } - limExemptOrigins = append(limExemptOrigins, pattern) - } - for _, agent := range rateLimitConfig.ExemptUserAgents { - pattern, err := regexp.Compile(agent) - if err != nil { - return nil, err - } - limExemptUserAgents = append(limExemptUserAgents, pattern) - } - } else { - mainLim = NoopFrontendRateLimiter - } - - overrideLims := make(map[string]FrontendRateLimiter) - globalMethodLims := make(map[string]bool) - for method, override := range rateLimitConfig.MethodOverrides { - overrideLims[method] = limiterFactory(time.Duration(override.Interval), override.Limit, method) - - if override.Global { - globalMethodLims[method] = true - } - } - var senderLim FrontendRateLimiter - if senderRateLimitConfig.Enabled { - senderLim = limiterFactory(time.Duration(senderRateLimitConfig.Interval), senderRateLimitConfig.Limit, "senders") - } - - rateLimitHeader := defaultRateLimitHeader - if rateLimitConfig.IPHeaderOverride != "" { - rateLimitHeader = rateLimitConfig.IPHeaderOverride - } - - return &Server{ - BackendGroups: backendGroups, - wsBackendGroup: wsBackendGroup, - wsMethodWhitelist: wsMethodWhitelist, - rpcMethodMappings: rpcMethodMappings, - maxBodySize: maxBodySize, - authenticatedPaths: authenticatedPaths, - timeout: timeout, - maxUpstreamBatchSize: maxUpstreamBatchSize, - enableServedByHeader: enableServedByHeader, - cache: cache, - enableRequestLog: enableRequestLog, - maxRequestBodyLogLen: maxRequestBodyLogLen, - maxBatchSize: maxBatchSize, - upgrader: &websocket.Upgrader{ - HandshakeTimeout: defaultWSHandshakeTimeout, - }, - mainLim: mainLim, - overrideLims: overrideLims, - globallyLimitedMethods: globalMethodLims, - senderLim: senderLim, - allowedChainIds: senderRateLimitConfig.AllowedChainIds, - limExemptOrigins: limExemptOrigins, - limExemptUserAgents: limExemptUserAgents, - rateLimitHeader: rateLimitHeader, - }, nil -} - -func (s *Server) RPCListenAndServe(host string, port int) error { - s.srvMu.Lock() - hdlr := mux.NewRouter() - hdlr.HandleFunc("/healthz", s.HandleHealthz).Methods("GET") - hdlr.HandleFunc("/", s.HandleRPC).Methods("POST") - hdlr.HandleFunc("/{authorization}", s.HandleRPC).Methods("POST") - c := cors.New(cors.Options{ - AllowedOrigins: []string{"*"}, - }) - addr := fmt.Sprintf("%s:%d", host, port) - s.rpcServer = &http.Server{ - Handler: instrumentedHdlr(c.Handler(hdlr)), - Addr: addr, - } - log.Info("starting HTTP server", "addr", addr) - s.srvMu.Unlock() - return s.rpcServer.ListenAndServe() -} - -func (s *Server) WSListenAndServe(host string, port int) error { - s.srvMu.Lock() - hdlr := mux.NewRouter() - hdlr.HandleFunc("/", s.HandleWS) - hdlr.HandleFunc("/{authorization}", s.HandleWS) - c := cors.New(cors.Options{ - AllowedOrigins: []string{"*"}, - }) - addr := fmt.Sprintf("%s:%d", host, port) - s.wsServer = &http.Server{ - Handler: instrumentedHdlr(c.Handler(hdlr)), - Addr: addr, - } - log.Info("starting WS server", "addr", addr) - s.srvMu.Unlock() - return s.wsServer.ListenAndServe() -} - -func (s *Server) Shutdown() { - s.srvMu.Lock() - defer s.srvMu.Unlock() - if s.rpcServer != nil { - _ = s.rpcServer.Shutdown(context.Background()) - } - if s.wsServer != nil { - _ = s.wsServer.Shutdown(context.Background()) - } - for _, bg := range s.BackendGroups { - bg.Shutdown() - } -} - -func (s *Server) HandleHealthz(w http.ResponseWriter, r *http.Request) { - _, _ = w.Write([]byte("OK")) -} - -func (s *Server) HandleRPC(w http.ResponseWriter, r *http.Request) { - ctx := s.populateContext(w, r) - if ctx == nil { - return - } - var cancel context.CancelFunc - ctx, cancel = context.WithTimeout(ctx, s.timeout) - defer cancel() - - origin := r.Header.Get("Origin") - userAgent := r.Header.Get("User-Agent") - // Use XFF in context since it will automatically be replaced by the remote IP - xff := stripXFF(GetXForwardedFor(ctx)) - isUnlimitedOrigin := s.isUnlimitedOrigin(origin) - isUnlimitedUserAgent := s.isUnlimitedUserAgent(userAgent) - - if xff == "" { - writeRPCError(ctx, w, nil, ErrInvalidRequest("request does not include a remote IP")) - return - } - - isLimited := func(method string) bool { - isGloballyLimitedMethod := s.isGlobalLimit(method) - if !isGloballyLimitedMethod && (isUnlimitedOrigin || isUnlimitedUserAgent) { - return false - } - - var lim FrontendRateLimiter - if method == "" { - lim = s.mainLim - } else { - lim = s.overrideLims[method] - } - - if lim == nil { - return false - } - - ok, err := lim.Take(ctx, xff) - if err != nil { - log.Warn("error taking rate limit", "err", err) - return true - } - return !ok - } - - if isLimited("") { - RecordRPCError(ctx, BackendProxyd, "unknown", ErrOverRateLimit) - log.Warn( - "rate limited request", - "req_id", GetReqID(ctx), - "auth", GetAuthCtx(ctx), - "user_agent", userAgent, - "origin", origin, - "remote_ip", xff, - ) - writeRPCError(ctx, w, nil, ErrOverRateLimit) - return - } - - log.Info( - "received RPC request", - "req_id", GetReqID(ctx), - "auth", GetAuthCtx(ctx), - "user_agent", userAgent, - "origin", origin, - "remote_ip", xff, - ) - - body, err := io.ReadAll(LimitReader(r.Body, s.maxBodySize)) - if errors.Is(err, ErrLimitReaderOverLimit) { - log.Error("request body too large", "req_id", GetReqID(ctx)) - RecordRPCError(ctx, BackendProxyd, MethodUnknown, ErrRequestBodyTooLarge) - writeRPCError(ctx, w, nil, ErrRequestBodyTooLarge) - return - } - if err != nil { - log.Error("error reading request body", "err", err) - writeRPCError(ctx, w, nil, ErrInternal) - return - } - RecordRequestPayloadSize(ctx, len(body)) - - if s.enableRequestLog { - log.Info("Raw RPC request", - "body", truncate(string(body), s.maxRequestBodyLogLen), - "req_id", GetReqID(ctx), - "auth", GetAuthCtx(ctx), - ) - } - - if IsBatch(body) { - reqs, err := ParseBatchRPCReq(body) - if err != nil { - log.Error("error parsing batch RPC request", "err", err) - RecordRPCError(ctx, BackendProxyd, MethodUnknown, err) - writeRPCError(ctx, w, nil, ErrParseErr) - return - } - - RecordBatchSize(len(reqs)) - - if len(reqs) > s.maxBatchSize { - RecordRPCError(ctx, BackendProxyd, MethodUnknown, ErrTooManyBatchRequests) - writeRPCError(ctx, w, nil, ErrTooManyBatchRequests) - return - } - - if len(reqs) == 0 { - writeRPCError(ctx, w, nil, ErrInvalidRequest("must specify at least one batch call")) - return - } - - batchRes, batchContainsCached, servedBy, err := s.handleBatchRPC(ctx, reqs, isLimited, true) - if err == context.DeadlineExceeded { - writeRPCError(ctx, w, nil, ErrGatewayTimeout) - return - } - if errors.Is(err, ErrConsensusGetReceiptsCantBeBatched) || - errors.Is(err, ErrConsensusGetReceiptsInvalidTarget) { - writeRPCError(ctx, w, nil, ErrInvalidRequest(err.Error())) - return - } - if err != nil { - writeRPCError(ctx, w, nil, ErrInternal) - return - } - if s.enableServedByHeader { - w.Header().Set("x-served-by", servedBy) - } - setCacheHeader(w, batchContainsCached) - writeBatchRPCRes(ctx, w, batchRes) - return - } - - rawBody := json.RawMessage(body) - backendRes, cached, servedBy, err := s.handleBatchRPC(ctx, []json.RawMessage{rawBody}, isLimited, false) - if err != nil { - if errors.Is(err, ErrConsensusGetReceiptsCantBeBatched) || - errors.Is(err, ErrConsensusGetReceiptsInvalidTarget) { - writeRPCError(ctx, w, nil, ErrInvalidRequest(err.Error())) - return - } - writeRPCError(ctx, w, nil, ErrInternal) - return - } - if s.enableServedByHeader { - w.Header().Set("x-served-by", servedBy) - } - setCacheHeader(w, cached) - writeRPCRes(ctx, w, backendRes[0]) -} - -func (s *Server) handleBatchRPC(ctx context.Context, reqs []json.RawMessage, isLimited limiterFunc, isBatch bool) ([]*RPCRes, bool, string, error) { - // A request set is transformed into groups of batches. - // Each batch group maps to a forwarded JSON-RPC batch request (subject to maxUpstreamBatchSize constraints) - // A groupID is used to decouple Requests that have duplicate ID so they're not part of the same batch that's - // forwarded to the backend. This is done to ensure that the order of JSON-RPC Responses match the Request order - // as the backend MAY return Responses out of order. - // NOTE: Duplicate request ids induces 1-sized JSON-RPC batches - type batchGroup struct { - groupID int - backendGroup string - } - - responses := make([]*RPCRes, len(reqs)) - batches := make(map[batchGroup][]batchElem) - ids := make(map[string]int, len(reqs)) - - for i := range reqs { - parsedReq, err := ParseRPCReq(reqs[i]) - if err != nil { - log.Info("error parsing RPC call", "source", "rpc", "err", err) - responses[i] = NewRPCErrorRes(nil, err) - continue - } - - // Simple health check - if len(reqs) == 1 && parsedReq.Method == proxydHealthzMethod { - res := &RPCRes{ - ID: parsedReq.ID, - JSONRPC: JSONRPCVersion, - Result: "OK", - } - return []*RPCRes{res}, false, "", nil - } - - if err := ValidateRPCReq(parsedReq); err != nil { - RecordRPCError(ctx, BackendProxyd, MethodUnknown, err) - responses[i] = NewRPCErrorRes(nil, err) - continue - } - - if parsedReq.Method == "eth_accounts" { - RecordRPCForward(ctx, BackendProxyd, "eth_accounts", RPCRequestSourceHTTP) - responses[i] = NewRPCRes(parsedReq.ID, emptyArrayResponse) - continue - } - - group := s.rpcMethodMappings[parsedReq.Method] - if group == "" { - // use unknown below to prevent DOS vector that fills up memory - // with arbitrary method names. - log.Info( - "blocked request for non-whitelisted method", - "source", "rpc", - "req_id", GetReqID(ctx), - "method", parsedReq.Method, - ) - RecordRPCError(ctx, BackendProxyd, MethodUnknown, ErrMethodNotWhitelisted) - responses[i] = NewRPCErrorRes(parsedReq.ID, ErrMethodNotWhitelisted) - continue - } - - // Take rate limit for specific methods. - // NOTE: eventually, this should apply to all batch requests. However, - // since we don't have data right now on the size of each batch, we - // only apply this to the methods that have an additional rate limit. - if _, ok := s.overrideLims[parsedReq.Method]; ok && isLimited(parsedReq.Method) { - log.Info( - "rate limited specific RPC", - "source", "rpc", - "req_id", GetReqID(ctx), - "method", parsedReq.Method, - ) - RecordRPCError(ctx, BackendProxyd, parsedReq.Method, ErrOverRateLimit) - responses[i] = NewRPCErrorRes(parsedReq.ID, ErrOverRateLimit) - continue - } - - // Apply a sender-based rate limit if it is enabled. Note that sender-based rate - // limits apply regardless of origin or user-agent. As such, they don't use the - // isLimited method. - if parsedReq.Method == "eth_sendRawTransaction" && s.senderLim != nil { - if err := s.rateLimitSender(ctx, parsedReq); err != nil { - RecordRPCError(ctx, BackendProxyd, parsedReq.Method, err) - responses[i] = NewRPCErrorRes(parsedReq.ID, err) - continue - } - } - - id := string(parsedReq.ID) - // If this is a duplicate Request ID, move the Request to a new batchGroup - ids[id]++ - batchGroupID := ids[id] - batchGroup := batchGroup{groupID: batchGroupID, backendGroup: group} - batches[batchGroup] = append(batches[batchGroup], batchElem{parsedReq, i}) - } - - servedBy := make(map[string]bool, 0) - var cached bool - for group, batch := range batches { - var cacheMisses []batchElem - - for _, req := range batch { - backendRes, _ := s.cache.GetRPC(ctx, req.Req) - if backendRes != nil { - responses[req.Index] = backendRes - cached = true - } else { - cacheMisses = append(cacheMisses, req) - } - } - - // Create minibatches - each minibatch must be no larger than the maxUpstreamBatchSize - numBatches := int(math.Ceil(float64(len(cacheMisses)) / float64(s.maxUpstreamBatchSize))) - for i := 0; i < numBatches; i++ { - if ctx.Err() == context.DeadlineExceeded { - log.Info("short-circuiting batch RPC", - "req_id", GetReqID(ctx), - "auth", GetAuthCtx(ctx), - "batch_index", i, - ) - batchRPCShortCircuitsTotal.Inc() - return nil, false, "", context.DeadlineExceeded - } - - start := i * s.maxUpstreamBatchSize - end := int(math.Min(float64(start+s.maxUpstreamBatchSize), float64(len(cacheMisses)))) - elems := cacheMisses[start:end] - res, sb, err := s.BackendGroups[group.backendGroup].Forward(ctx, createBatchRequest(elems), isBatch) - servedBy[sb] = true - if err != nil { - if errors.Is(err, ErrConsensusGetReceiptsCantBeBatched) || - errors.Is(err, ErrConsensusGetReceiptsInvalidTarget) { - return nil, false, "", err - } - log.Error( - "error forwarding RPC batch", - "batch_size", len(elems), - "backend_group", group, - "req_id", GetReqID(ctx), - "err", err, - ) - res = nil - for _, elem := range elems { - res = append(res, NewRPCErrorRes(elem.Req.ID, err)) - } - } - - for i := range elems { - responses[elems[i].Index] = res[i] - - // TODO(inphi): batch put these - if res[i].Error == nil && res[i].Result != nil { - if err := s.cache.PutRPC(ctx, elems[i].Req, res[i]); err != nil { - log.Warn( - "cache put error", - "req_id", GetReqID(ctx), - "err", err, - ) - } - } - } - } - } - - servedByString := "" - for sb, _ := range servedBy { - if servedByString != "" { - servedByString += ", " - } - servedByString += sb - } - - return responses, cached, servedByString, nil -} - -func (s *Server) HandleWS(w http.ResponseWriter, r *http.Request) { - ctx := s.populateContext(w, r) - if ctx == nil { - return - } - - log.Info("received WS connection", "req_id", GetReqID(ctx)) - - clientConn, err := s.upgrader.Upgrade(w, r, nil) - if err != nil { - log.Error("error upgrading client conn", "auth", GetAuthCtx(ctx), "req_id", GetReqID(ctx), "err", err) - return - } - clientConn.SetReadLimit(s.maxBodySize) - - proxier, err := s.wsBackendGroup.ProxyWS(ctx, clientConn, s.wsMethodWhitelist) - if err != nil { - if errors.Is(err, ErrNoBackends) { - RecordUnserviceableRequest(ctx, RPCRequestSourceWS) - } - log.Error("error dialing ws backend", "auth", GetAuthCtx(ctx), "req_id", GetReqID(ctx), "err", err) - clientConn.Close() - return - } - - activeClientWsConnsGauge.WithLabelValues(GetAuthCtx(ctx)).Inc() - go func() { - // Below call blocks so run it in a goroutine. - if err := proxier.Proxy(ctx); err != nil { - log.Error("error proxying websocket", "auth", GetAuthCtx(ctx), "req_id", GetReqID(ctx), "err", err) - } - activeClientWsConnsGauge.WithLabelValues(GetAuthCtx(ctx)).Dec() - }() - - log.Info("accepted WS connection", "auth", GetAuthCtx(ctx), "req_id", GetReqID(ctx)) -} - -func (s *Server) populateContext(w http.ResponseWriter, r *http.Request) context.Context { - vars := mux.Vars(r) - authorization := vars["authorization"] - xff := r.Header.Get(s.rateLimitHeader) - if xff == "" { - ipPort := strings.Split(r.RemoteAddr, ":") - if len(ipPort) == 2 { - xff = ipPort[0] - } - } - ctx := context.WithValue(r.Context(), ContextKeyXForwardedFor, xff) // nolint:staticcheck - - if len(s.authenticatedPaths) > 0 { - if authorization == "" || s.authenticatedPaths[authorization] == "" { - log.Info("blocked unauthorized request", "authorization", authorization) - httpResponseCodesTotal.WithLabelValues("401").Inc() - w.WriteHeader(401) - return nil - } - - ctx = context.WithValue(ctx, ContextKeyAuth, s.authenticatedPaths[authorization]) // nolint:staticcheck - } - - return context.WithValue( - ctx, - ContextKeyReqID, // nolint:staticcheck - randStr(10), - ) -} - -func randStr(l int) string { - b := make([]byte, l) - if _, err := rand.Read(b); err != nil { - panic(err) - } - return hex.EncodeToString(b) -} - -func (s *Server) isUnlimitedOrigin(origin string) bool { - for _, pat := range s.limExemptOrigins { - if pat.MatchString(origin) { - return true - } - } - - return false -} - -func (s *Server) isUnlimitedUserAgent(origin string) bool { - for _, pat := range s.limExemptUserAgents { - if pat.MatchString(origin) { - return true - } - } - return false -} - -func (s *Server) isGlobalLimit(method string) bool { - return s.globallyLimitedMethods[method] -} - -func (s *Server) rateLimitSender(ctx context.Context, req *RPCReq) error { - var params []string - if err := json.Unmarshal(req.Params, ¶ms); err != nil { - log.Debug("error unmarshalling raw transaction params", "err", err, "req_Id", GetReqID(ctx)) - return ErrParseErr - } - - if len(params) != 1 { - log.Debug("raw transaction request has invalid number of params", "req_id", GetReqID(ctx)) - // The error below is identical to the one Geth responds with. - return ErrInvalidParams("missing value for required argument 0") - } - - var data hexutil.Bytes - if err := data.UnmarshalText([]byte(params[0])); err != nil { - log.Debug("error decoding raw tx data", "err", err, "req_id", GetReqID(ctx)) - // Geth returns the raw error from UnmarshalText. - return ErrInvalidParams(err.Error()) - } - - // Inflates a types.Transaction object from the transaction's raw bytes. - tx := new(types.Transaction) - if err := tx.UnmarshalBinary(data); err != nil { - log.Debug("could not unmarshal transaction", "err", err, "req_id", GetReqID(ctx)) - return ErrInvalidParams(err.Error()) - } - - // Check if the transaction is for the expected chain, - // otherwise reject before rate limiting to avoid replay attacks. - if !s.isAllowedChainId(tx.ChainId()) { - log.Debug("chain id is not allowed", "req_id", GetReqID(ctx)) - return txpool.ErrInvalidSender - } - - // Convert the transaction into a Message object so that we can get the - // sender. This method performs an ecrecover, which can be expensive. - msg, err := core.TransactionToMessage(tx, types.LatestSignerForChainID(tx.ChainId()), nil) - if err != nil { - log.Debug("could not get message from transaction", "err", err, "req_id", GetReqID(ctx)) - return ErrInvalidParams(err.Error()) - } - ok, err := s.senderLim.Take(ctx, fmt.Sprintf("%s:%d", msg.From.Hex(), tx.Nonce())) - if err != nil { - log.Error("error taking from sender limiter", "err", err, "req_id", GetReqID(ctx)) - return ErrInternal - } - if !ok { - log.Debug("sender rate limit exceeded", "sender", msg.From.Hex(), "req_id", GetReqID(ctx)) - return ErrOverSenderRateLimit - } - - return nil -} - -func (s *Server) isAllowedChainId(chainId *big.Int) bool { - if s.allowedChainIds == nil || len(s.allowedChainIds) == 0 { - return true - } - for _, id := range s.allowedChainIds { - if chainId.Cmp(id) == 0 { - return true - } - } - return false -} - -func setCacheHeader(w http.ResponseWriter, cached bool) { - if cached { - w.Header().Set(cacheStatusHdr, "HIT") - } else { - w.Header().Set(cacheStatusHdr, "MISS") - } -} - -func writeRPCError(ctx context.Context, w http.ResponseWriter, id json.RawMessage, err error) { - var res *RPCRes - if r, ok := err.(*RPCErr); ok { - res = NewRPCErrorRes(id, r) - } else { - res = NewRPCErrorRes(id, ErrInternal) - } - writeRPCRes(ctx, w, res) -} - -func writeRPCRes(ctx context.Context, w http.ResponseWriter, res *RPCRes) { - statusCode := 200 - if res.IsError() && res.Error.HTTPErrorCode != 0 { - statusCode = res.Error.HTTPErrorCode - } - - w.Header().Set("content-type", "application/json") - w.WriteHeader(statusCode) - ww := &recordLenWriter{Writer: w} - enc := json.NewEncoder(ww) - if err := enc.Encode(res); err != nil { - log.Error("error writing rpc response", "err", err) - RecordRPCError(ctx, BackendProxyd, MethodUnknown, err) - return - } - httpResponseCodesTotal.WithLabelValues(strconv.Itoa(statusCode)).Inc() - RecordResponsePayloadSize(ctx, ww.Len) -} - -func writeBatchRPCRes(ctx context.Context, w http.ResponseWriter, res []*RPCRes) { - w.Header().Set("content-type", "application/json") - w.WriteHeader(200) - ww := &recordLenWriter{Writer: w} - enc := json.NewEncoder(ww) - if err := enc.Encode(res); err != nil { - log.Error("error writing batch rpc response", "err", err) - RecordRPCError(ctx, BackendProxyd, MethodUnknown, err) - return - } - RecordResponsePayloadSize(ctx, ww.Len) -} - -func instrumentedHdlr(h http.Handler) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - respTimer := prometheus.NewTimer(httpRequestDurationSumm) - h.ServeHTTP(w, r) - respTimer.ObserveDuration() - } -} - -func GetAuthCtx(ctx context.Context) string { - authUser, ok := ctx.Value(ContextKeyAuth).(string) - if !ok { - return "none" - } - - return authUser -} - -func GetReqID(ctx context.Context) string { - reqId, ok := ctx.Value(ContextKeyReqID).(string) - if !ok { - return "" - } - return reqId -} - -func GetXForwardedFor(ctx context.Context) string { - xff, ok := ctx.Value(ContextKeyXForwardedFor).(string) - if !ok { - return "" - } - return xff -} - -type recordLenWriter struct { - io.Writer - Len int -} - -func (w *recordLenWriter) Write(p []byte) (n int, err error) { - n, err = w.Writer.Write(p) - w.Len += n - return -} - -type NoopRPCCache struct{} - -func (n *NoopRPCCache) GetRPC(context.Context, *RPCReq) (*RPCRes, error) { - return nil, nil -} - -func (n *NoopRPCCache) PutRPC(context.Context, *RPCReq, *RPCRes) error { - return nil -} - -func truncate(str string, maxLen int) string { - if maxLen == 0 { - maxLen = maxRequestBodyLogLen - } - - if len(str) > maxLen { - return str[:maxLen] + "..." - } else { - return str - } -} - -type batchElem struct { - Req *RPCReq - Index int -} - -func createBatchRequest(elems []batchElem) []*RPCReq { - batch := make([]*RPCReq, len(elems)) - for i := range elems { - batch[i] = elems[i].Req - } - return batch -} diff --git a/proxyd/string_set.go b/proxyd/string_set.go deleted file mode 100644 index 458234919611..000000000000 --- a/proxyd/string_set.go +++ /dev/null @@ -1,56 +0,0 @@ -package proxyd - -import "sync" - -type StringSet struct { - underlying map[string]bool - mtx sync.RWMutex -} - -func NewStringSet() *StringSet { - return &StringSet{ - underlying: make(map[string]bool), - } -} - -func NewStringSetFromStrings(in []string) *StringSet { - underlying := make(map[string]bool) - for _, str := range in { - underlying[str] = true - } - return &StringSet{ - underlying: underlying, - } -} - -func (s *StringSet) Has(test string) bool { - s.mtx.RLock() - defer s.mtx.RUnlock() - return s.underlying[test] -} - -func (s *StringSet) Add(str string) { - s.mtx.Lock() - defer s.mtx.Unlock() - s.underlying[str] = true -} - -func (s *StringSet) Entries() []string { - s.mtx.RLock() - defer s.mtx.RUnlock() - out := make([]string, len(s.underlying)) - var i int - for entry := range s.underlying { - out[i] = entry - i++ - } - return out -} - -func (s *StringSet) Extend(in []string) *StringSet { - out := NewStringSetFromStrings(in) - for k := range s.underlying { - out.Add(k) - } - return out -} diff --git a/proxyd/tls.go b/proxyd/tls.go deleted file mode 100644 index ed2bdaff44b4..000000000000 --- a/proxyd/tls.go +++ /dev/null @@ -1,33 +0,0 @@ -package proxyd - -import ( - "crypto/tls" - "crypto/x509" - "errors" - "os" -) - -func CreateTLSClient(ca string) (*tls.Config, error) { - pem, err := os.ReadFile(ca) - if err != nil { - return nil, wrapErr(err, "error reading CA") - } - - roots := x509.NewCertPool() - ok := roots.AppendCertsFromPEM(pem) - if !ok { - return nil, errors.New("error parsing TLS client cert") - } - - return &tls.Config{ - RootCAs: roots, - }, nil -} - -func ParseKeyPair(crt, key string) (tls.Certificate, error) { - cert, err := tls.LoadX509KeyPair(crt, key) - if err != nil { - return tls.Certificate{}, wrapErr(err, "error loading x509 key pair") - } - return cert, nil -} diff --git a/proxyd/tools/mockserver/handler/handler.go b/proxyd/tools/mockserver/handler/handler.go deleted file mode 100644 index 0f9bfcad63cb..000000000000 --- a/proxyd/tools/mockserver/handler/handler.go +++ /dev/null @@ -1,135 +0,0 @@ -package handler - -import ( - "encoding/json" - "fmt" - "io" - "net/http" - "os" - "strings" - - "github.com/ethereum-optimism/optimism/proxyd" - - "github.com/gorilla/mux" - "github.com/pkg/errors" - "gopkg.in/yaml.v3" -) - -type MethodTemplate struct { - Method string `yaml:"method"` - Block string `yaml:"block"` - Response string `yaml:"response"` -} - -type MockedHandler struct { - Overrides []*MethodTemplate - Autoload bool - AutoloadFile string -} - -func (mh *MockedHandler) Serve(port int) error { - r := mux.NewRouter() - r.HandleFunc("/", mh.Handler) - http.Handle("/", r) - fmt.Printf("starting server up on :%d serving MockedResponsesFile %s\n", port, mh.AutoloadFile) - err := http.ListenAndServe(fmt.Sprintf(":%d", port), nil) - - if errors.Is(err, http.ErrServerClosed) { - fmt.Printf("server closed\n") - } else if err != nil { - fmt.Printf("error starting server: %s\n", err) - return err - } - return nil -} - -func (mh *MockedHandler) Handler(w http.ResponseWriter, req *http.Request) { - body, err := io.ReadAll(req.Body) - if err != nil { - fmt.Printf("error reading request: %v\n", err) - } - - var template []*MethodTemplate - if mh.Autoload { - template = append(template, mh.LoadFromFile(mh.AutoloadFile)...) - } - if mh.Overrides != nil { - template = append(template, mh.Overrides...) - } - - batched := proxyd.IsBatch(body) - var requests []map[string]interface{} - if batched { - err = json.Unmarshal(body, &requests) - if err != nil { - fmt.Printf("error reading request: %v\n", err) - } - } else { - var j map[string]interface{} - err = json.Unmarshal(body, &j) - if err != nil { - fmt.Printf("error reading request: %v\n", err) - } - requests = append(requests, j) - } - - var responses []string - for _, r := range requests { - method := r["method"] - block := "" - if method == "eth_getBlockByNumber" || method == "debug_getRawReceipts" { - block = (r["params"].([]interface{})[0]).(string) - } - - var selectedResponse string - for _, r := range template { - if r.Method == method && r.Block == block { - selectedResponse = r.Response - } - } - if selectedResponse != "" { - var rpcRes proxyd.RPCRes - err = json.Unmarshal([]byte(selectedResponse), &rpcRes) - if err != nil { - panic(err) - } - idJson, _ := json.Marshal(r["id"]) - rpcRes.ID = idJson - res, _ := json.Marshal(rpcRes) - responses = append(responses, string(res)) - } - } - - resBody := "" - if batched { - resBody = "[" + strings.Join(responses, ",") + "]" - } else if len(responses) > 0 { - resBody = responses[0] - } - - _, err = fmt.Fprint(w, resBody) - if err != nil { - fmt.Printf("error writing response: %v\n", err) - } -} - -func (mh *MockedHandler) LoadFromFile(file string) []*MethodTemplate { - contents, err := os.ReadFile(file) - if err != nil { - fmt.Printf("error reading MockedResponsesFile: %v\n", err) - } - var template []*MethodTemplate - err = yaml.Unmarshal(contents, &template) - if err != nil { - fmt.Printf("error reading MockedResponsesFile: %v\n", err) - } - return template -} - -func (mh *MockedHandler) AddOverride(template *MethodTemplate) { - mh.Overrides = append(mh.Overrides, template) -} - -func (mh *MockedHandler) ResetOverrides() { - mh.Overrides = make([]*MethodTemplate, 0) -} diff --git a/proxyd/tools/mockserver/main.go b/proxyd/tools/mockserver/main.go deleted file mode 100644 index a58fc06325ef..000000000000 --- a/proxyd/tools/mockserver/main.go +++ /dev/null @@ -1,30 +0,0 @@ -package main - -import ( - "fmt" - "os" - "path" - "strconv" - - "github.com/ethereum-optimism/optimism/proxyd/tools/mockserver/handler" -) - -func main() { - if len(os.Args) < 3 { - fmt.Printf("simply mock a response based on an external text MockedResponsesFile\n") - fmt.Printf("usage: mockserver \n") - os.Exit(1) - } - port, _ := strconv.ParseInt(os.Args[1], 10, 32) - dir, _ := os.Getwd() - - h := handler.MockedHandler{ - Autoload: true, - AutoloadFile: path.Join(dir, os.Args[2]), - } - - err := h.Serve(int(port)) - if err != nil { - fmt.Printf("error starting mockserver: %v\n", err) - } -} diff --git a/proxyd/tools/mockserver/node1.yml b/proxyd/tools/mockserver/node1.yml deleted file mode 100644 index 313c65349f72..000000000000 --- a/proxyd/tools/mockserver/node1.yml +++ /dev/null @@ -1,52 +0,0 @@ -- method: eth_getBlockByNumber - block: latest - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash2", - "number": "0x2" - } - } -- method: eth_getBlockByNumber - block: 0x1 - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash1", - "number": "0x1" - } - } -- method: eth_getBlockByNumber - block: 0x2 - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash2", - "number": "0x2" - } - } -- method: eth_getBlockByNumber - block: 0x3 - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash34", - "number": "0x3" - } - } -- method: debug_getRawReceipts - block: 0x88420081ab9c6d50dc57af36b541c6b8a7b3e9c0d837b0414512c4c5883560ff - response: > - {"jsonrpc":"2.0","id":1,"result":[]} -- method: debug_getRawReceipts - block: 0x88420081ab9c6d50dc57af36b541c6b8a7b3e9c0d837b0414512c4c5883560bb - response: > - {"jsonrpc":"2.0","id":1,"result":["0x02f902c10183037ec5b9010000000000000000000000000200000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000400000000000000000008000000000000000000000000000000000000020000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000200000000000000000000000000000000f901b6f8d994297a60578fd0e13076bf06cfeb2bbcd74f2680d2e1a0e5c486bee358a5fff5e4d70dc5fdaaf14806df125ffde843a8c40db608264812b8a00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000282bde1ac0c0000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000016573937382e393939393939393939393939395334393600000000000000000000f8d994297a60578fd0e13076bf06cfeb2bbcd74f2680d2e1a01309ab74031e37b46ee8ce9ff667a17a5c69a500a05d167e4c89ad8b0bc40bf9b8a0000000000000000000000000cd28ab95ae80b31255b2258a116cd2c1a371e0f3000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000652d2a700000000000000000000000000000000000000000000000000000000000000016573937382e393939393939393939393939395334393600000000000000000000","0x02f9039f01830645cdb9010000000020000000000000001000000000000000008004000000000000004000000000000000000002000000000000000000000000000000000000000000000000000000a00000000000000000000000200000000000000000000000000000000000000000000000400000000000000000000000000000000000000008000000000000000000004000400800000020000000000000000000000002000000000000000000000000000000200000000000040000000000000000000000001000000100100200000002000000000100000000010000020000000000000000000000000010000000000000000000000000000000000000000000000000000008040000f90294f8dc944638ac6b5727a8b9586d3eba5b44be4b74ed41fcf863a02ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e631a0000000000000000000000000f08f78880122a9ee99f4f68dcab02177aeb08160a0000000000000000000000000f08f78880122a9ee99f4f68dcab02177aeb08160b8600000000000000000000000000000000000000000000000000032cdc63449c00000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000f8dc944638ac6b5727a8b9586d3eba5b44be4b74ed41fcf863a031b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83da0000000000000000000000000f08f78880122a9ee99f4f68dcab02177aeb08160a0000000000000000000000000f08f78880122a9ee99f4f68dcab02177aeb08160b8600000000000000000000000000000000000000000000000000032cdc63449c00000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000f85a947ad11bb9216bc9dc4cbd488d7618cbfd433d1e75f842a04641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133ca0e4bac2a8774c733b2c6da6ddf718b53614f36417dfaac90b23d2747d82d2251580f87a947fd7eea37c53abf356cc80e71144d62cd8af27d3f842a0db5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1ba04bd009c947444055f7e29f16c227e544387b9de8b571888d37f50becee99d76ea00000000000000000000000000000000000000000000000000000000000000001","0x02f90327018307aa96b9010000000000000000000000000028000000000000000000000000000000400000000000000000000000000000000000000000000000020000000000000000000000000000100000000000000000000000000000000000000000000000000000004000001000000000000000000000000000000000004000000000000000000000000000000000008000000000000000000000000000000000000000000000008000000000021000000000000000000000002040000000000000000000000000000000000000000000000000000000000000008000000000000000001000000000000000000000000000010000000000000000000000000000000000000000004000f9021cf9013c94af4159a80b6cc41ed517db1c453d1ef5c2e4db72f863a05e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1a000000000000000000000000000000000000000000000000000000000000b574ea0eef6d16b5a91e0c5aa2df75fbb865f2be353c5052294a97ee3522d6b1ed674bfb8c00000000000000000000000006bebc4925716945d46f0ec336d5c2564f419682c000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000b47d4ece2bd3d6457b9abcde547e332832a6881b5e8697f86a16fd1e3006843062eda71ce901c9f888b5abb4736b9ca9bb36748e000000000000000000000000000000000000000000000000000000000000000b00000000000000000000000000000000000000000000000000000000652d2a70f8db946bebc4925716945d46f0ec336d5c2564f419682cf842a0ff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60ba000000000000000000000000000000000000000000000000000000000000b574eb88000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000034a36c4ece2bd3d6457b9abcde547e332832a6770a0000000000000000000000000000000000000000000000000095094d8053e000000000000000000000000000","0x02f901a70183083234b9010000000000000000040000000000000000000000020000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000040000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000800000000400000001000000000000000000000000000000000000000000000f89df89b94326c977e6efc84e512bb9c30f76e30c160ed06fbf863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa00000000000000000000000004281ecf07378ee595c564a59048801330f3084eea0000000000000000000000000cd5d6cadfd3b4c77415859a5d6999f2eea1da5d4a0000000000000000000000000000000000000000000000001158e460913d00000","0x02f9040a0183094189b9010000000000000000000000100000000000000000000000000000000000000000000002000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000008008000000000000000000000000000f902fff902fc94be72771b59f99adc9c07a43295fcada66cb865b9f842a035ee444266c4bfac0b9704ee4fc68807fe38d1e96b299a097442f8169f48d57da00000000000000000000000000000000000000000000000000000000000000027b902a000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000652d2a700000000000000000000000000000000000000000000000000000000000000027000000000000000000000000bc365d43d4761fd03738ebefa5ff3d7ccf8256a70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000652e78100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000183635326432363837663661356263626235613934643639370000000000000000000000000000000000000000000000000000000000000000000000000000001836353235626563643837396139613163653935363364643800000000000000000000000000000000000000000000000000000000000000000000000000000000","0x02f9039f01830c0891b9010000000020000000000000001000000000000000008004000000000000004000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000004000000200000000000000000000000000000000000000000000000400000000040000800000000000000000000000008000000000000000040004000400800000020200000000000000000000002000000000000000200000000000000200000000000040000800000000000000000000000000100000000000002000000000100000000000000000000000000000200000000000010000000000000000000000000000000000000000000000000000108000000f90294f8dc944638ac6b5727a8b9586d3eba5b44be4b74ed41fcf863a02ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e631a0000000000000000000000000ffb08a46d802102de79b998be6fe0975e44cb212a0000000000000000000000000ffb08a46d802102de79b998be6fe0975e44cb212b8600000000000000000000000000000000000000000000000000032cdc63449c00000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000f8dc944638ac6b5727a8b9586d3eba5b44be4b74ed41fcf863a031b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83da0000000000000000000000000ffb08a46d802102de79b998be6fe0975e44cb212a0000000000000000000000000ffb08a46d802102de79b998be6fe0975e44cb212b8600000000000000000000000000000000000000000000000000032cdc63449c00000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000f85a947ad11bb9216bc9dc4cbd488d7618cbfd433d1e75f842a04641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133ca0c48bab3c23e29b52ad3d5b5a41b22448c12d59d5f986b479fdcc485cae9e794a80f87a947fd7eea37c53abf356cc80e71144d62cd8af27d3f842a0db5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1ba0d6910807a825d1b186bc97aaa5ae83f44bc11533f05f3bd567dd916e5de20de1a00000000000000000000000000000000000000000000000000000000000000001","0x02f9024a01837e0c08b9010000000000800000000000000100000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000000000001000000000000000000000000000000000000000000040000000000040000000000800000000000000000000000000000000000000000000000000000000000000000000000000400020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000f9013ff9013c94c25708eaf0329888c4db0fa5746647ecca92f257f863a09efce6407f8b9dc575789c1e4cc190f025c452249eb8f7913c49958c9a5535dea000000000000000000000000000000000000000000000000000000000652d2a70a0000000000000000000000000a02d09d454861a0ccd2e8518886cdcec37ecdd2cb8c00000000000000000000000000000000000000000000000000000000000000b220000000000000000000000000000000000000000000000000000000000000b220000000000000000000000000000000000000000000000000000000000000b22000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000066372656174650000000000000000000000000000000000000000000000000000","0x02f9039f018380d310b9010000000020000000000000001000000000000000008404000000000000004000000000000000000002000000000000000000000000000000000040000000000000000000000000000000000000000000200000000000000200000000000000000000000000000000400000000000000000000000000000000000000008000000000000000000004000400800000020000000001000000000000002400000000000000000000000000020200010000000040000000000000000000000000000000100000000400002000000000100000000000000000000000000000000000000000010000000000000000000000000000000000040000000000000000008000000f90294f8dc944638ac6b5727a8b9586d3eba5b44be4b74ed41fcf863a02ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e631a0000000000000000000000000cbee1403a6adee830dfd02d763341687d81482eba0000000000000000000000000cbee1403a6adee830dfd02d763341687d81482ebb8600000000000000000000000000000000000000000000000000032cdc63449c00000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000f8dc944638ac6b5727a8b9586d3eba5b44be4b74ed41fcf863a031b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83da0000000000000000000000000cbee1403a6adee830dfd02d763341687d81482eba0000000000000000000000000cbee1403a6adee830dfd02d763341687d81482ebb8600000000000000000000000000000000000000000000000000032cdc63449c00000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000f85a947ad11bb9216bc9dc4cbd488d7618cbfd433d1e75f842a04641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133ca0f9cacd1bc3956dffcb1a7d556066528a92396aa2e7da07a02904b3bfd886661180f87a947fd7eea37c53abf356cc80e71144d62cd8af27d3f842a0db5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1ba00c4d6405faf20e9cb06cdcc5159705b5a4d42ee7ea60a15f20784e82a0b31786a00000000000000000000000000000000000000000000000000000000000000001","0x02f9010901838210d3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f90c3f018388b358b9010000000000000000000000000000000000000040000000000200000000000004100000000002000000000000000000000000001000000000680000010000000009004020200000000008080008000800000000000000002000000000000000000040040000220000800000002080000800000000000000020000002090000000000000008400000000000000000000000000000000280000000200000000000040000000004000020000000000000000000000000000000000000000000000000000021002000008000000000000000000000000000800000000200100000820001005000000000000000000080000000000000000000000000040000000000000f90b34f89b948bd0e58032e5343c888eba4e72332176fffa7371f863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa00000000000000000000000004ac853547fa1fe3f4690e452b904578f7d46a531a00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000016345785d8a0000f85894c9b7edc65488bdbb428526b03935090aef40ff03e1a0df21c415b78ed2552cc9971249e32a053abce6087a0ae0fbf3f78db5174a3493a0000000000000000000000000000000000000000000000000000098b591d3ac0ef8d9946f3a314c1279148e53f51af154817c3ef2c827b1e1a0b0c632f55f1e1b3b2c3d82f41ee4716bb4c00f0f5d84cdafc141581bb8757a4fb8a0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000022000100000000000000000000000000000000000000000000000000000000000493e0000000000000000000000000000000000000000000000000000000000000f8d99436ebea3941907c438ca8ca2b1065deef21ccdaede1a04e41ee13e03cd5e0446487b524fdc48af6acf26c074dacdbdfb6b574b42c8146b8a0000000000000000000000000000000000000000000000000000000000000277a0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000011f66d6864fcce84d5000e1e981dd586766339490000000000000000000000000000000000000000000000000000213ae829dcc5f9019a946f3a314c1279148e53f51af154817c3ef2c827b1e1a0e9bded5f24a4168e4f3bf44e00298c993b22376aad8c58c7dda9718a54cbea82b90160000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001140000000000000d54278911f66d6864fcce84d5000e1e981dd58676633949277ab92de63eb7d8a652bf80385906812f92d49c5139000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000a07355534400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000000277a00000000000000000000000000000000000000000000000000000000000000144ac853547fa1fe3f4690e452b904578f7d46a531000000000000000000000000000000000000000000000000f9013d9411f66d6864fcce84d5000e1e981dd58676633949f884a0aae74fdfb502b568e3ca6f5aa448a255c90a2f24c4a6104d65ae45f097b37388a00000000000000000000000004ac853547fa1fe3f4690e452b904578f7d46a531a00000000000000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000000000000277ab8a000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000d540000000000000000000000000000000000000000000000000000000000000028b92de63eb7d8a652bf80385906812f92d49c513911f66d6864fcce84d5000e1e981dd58676633949000000000000000000000000000000000000000000000000f85894c9b7edc65488bdbb428526b03935090aef40ff03e1a0df21c415b78ed2552cc9971249e32a053abce6087a0ae0fbf3f78db5174a3493a00000000000000000000000000000000000000000000000000000381ece38c000f8d9946f3a314c1279148e53f51af154817c3ef2c827b1e1a0b0c632f55f1e1b3b2c3d82f41ee4716bb4c00f0f5d84cdafc141581bb8757a4fb8a0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000022000100000000000000000000000000000000000000000000000000000000000493e0000000000000000000000000000000000000000000000000000000000000f8d99436ebea3941907c438ca8ca2b1065deef21ccdaede1a04e41ee13e03cd5e0446487b524fdc48af6acf26c074dacdbdfb6b574b42c8146b8a0000000000000000000000000000000000000000000000000000000000000279f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000011f66d6864fcce84d5000e1e981dd586766339490000000000000000000000000000000000000000000000000000d027724dc000f9019a946f3a314c1279148e53f51af154817c3ef2c827b1e1a0e9bded5f24a4168e4f3bf44e00298c993b22376aad8c58c7dda9718a54cbea82b9016000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000114000000000000ac19278911f66d6864fcce84d5000e1e981dd58676633949279f4c11ccee50b70daa47c41849e45316d975b26102000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000a07355534400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000000277a00000000000000000000000000000000000000000000000000000000000000144ac853547fa1fe3f4690e452b904578f7d46a531000000000000000000000000000000000000000000000000f9013d9411f66d6864fcce84d5000e1e981dd58676633949f884a0aae74fdfb502b568e3ca6f5aa448a255c90a2f24c4a6104d65ae45f097b37388a00000000000000000000000004ac853547fa1fe3f4690e452b904578f7d46a531a00000000000000000000000000000000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000000000000279fb8a00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000ac1900000000000000000000000000000000000000000000000000000000000000284c11ccee50b70daa47c41849e45316d975b2610211f66d6864fcce84d5000e1e981dd58676633949000000000000000000000000000000000000000000000000f8bb94593be683204ff3501e6e4851956a2da310e393b6f842a0c1e18b2a3583b6bc0879a3f3f657c41adfb512076938208ec0b389d6d19874cba00000000000000000000000004ac853547fa1fe3f4690e452b904578f7d46a531b8607355534400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000000277a","0x02f901a7018389386bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000010000000000000000000000000000020000000000000000000800000000000000000000000010000000000000004000000000000000000000000000000000000000000000000000000000000000000000100400000000000000000000000000000400000000000000000000000002000000000000000000000000000000000000000000000000000020000000000000000001000000000000000000000000000000000000000000000000f89df89b946199f797b524166122f1c6e6a78ff321389bb686f863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000e43f4840dad185beef6daa8e7328b521e6a1a2a0a000000000000000000000000000000000000000000000d3c21bcecceda1000000","0x02f908fa01838cb5bdb90100000000004000000000040000000000000000000000005000000022000004000000000000000000000000000000000000000000000000000000000200002000000000000000080000000000080000000000000400004000000000004000000000000000000002010000000000000000000000000008000000000000100000000000000000000000000000000000001000000000000800000000000000200000000a0000000000000000000000100000000000000000080000000000000000000000000002000000000000000000000000200240000000800000000000000000000010000000040000000000000000000000000000000800000000000000000000f907eff9025d9400000000000000adc04c56bf30ac9d3c0aaf14dcf863a09d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f31a0000000000000000000000000f8de191520e37592aa84c62f650b067805cf1845a0000000000000000000000000ea2b4e7f02b859305093f9f4778a19d66ca176d5b901e0392f9c488837a9a75f4b5a139bed7757ebec5091b7e0b6f1ce70cbbbc75050e50000000000000000000000006f030b74371167d3b71cf3214e749b0d1814c0490000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d3664b5e72b46eaba722ab6f43c22dbf4018195400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011e1a300000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000002715ccea428f8c7694f7e78b2c89cb454c5f7294000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c68af0bb140000000000000000000000000000f8de191520e37592aa84c62f650b067805cf1845f9025d9400000000000000adc04c56bf30ac9d3c0aaf14dcf863a09d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f31a00000000000000000000000006f030b74371167d3b71cf3214e749b0d1814c049a0000000000000000000000000ea2b4e7f02b859305093f9f4778a19d66ca176d5b901e0ea28a862f3530833f82dc3d97407cf3a23fb593335f2b11f9ade8d62576f14fe0000000000000000000000006f030b74371167d3b71cf3214e749b0d1814c04900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000002715ccea428f8c7694f7e78b2c89cb454c5f7294000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c68af0bb14000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d3664b5e72b46eaba722ab6f43c22dbf4018195400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011e1a3000000000000000000000000006f030b74371167d3b71cf3214e749b0d1814c049f8b99400000000000000adc04c56bf30ac9d3c0aaf14dce1a04b9f2d36e1b4c93de62cc077b00b1a91d84b6c31b4a14e012718dcca230689e7b88000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002392f9c488837a9a75f4b5a139bed7757ebec5091b7e0b6f1ce70cbbbc75050e5ea28a862f3530833f82dc3d97407cf3a23fb593335f2b11f9ade8d62576f14fef89b94d3664b5e72b46eaba722ab6f43c22dbf40181954f863a08c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a0000000000000000000000000f8de191520e37592aa84c62f650b067805cf1845a000000000000000000000000000000000000000adc04c56bf30ac9d3c0aaf14dca00000000000000000000000000000000000000000000000000000000017d78400f89b94d3664b5e72b46eaba722ab6f43c22dbf40181954f863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa0000000000000000000000000f8de191520e37592aa84c62f650b067805cf1845a00000000000000000000000006f030b74371167d3b71cf3214e749b0d1814c049a00000000000000000000000000000000000000000000000000000000011e1a300f89b942715ccea428f8c7694f7e78b2c89cb454c5f7294f863a08c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a00000000000000000000000006f030b74371167d3b71cf3214e749b0d1814c049a000000000000000000000000000000000000000adc04c56bf30ac9d3c0aaf14dca0000000000000000000000000000000000000000000000035a66e2580ecd70000f89b942715ccea428f8c7694f7e78b2c89cb454c5f7294f863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa00000000000000000000000006f030b74371167d3b71cf3214e749b0d1814c049a0000000000000000000000000f8de191520e37592aa84c62f650b067805cf1845a000000000000000000000000000000000000000000000000002c68af0bb140000","0x02f9036101838ed0a2b9010000000000000000080000000000000000000000000040000000000008000000000000000000010000002000008000000000004000000000000000000000000000000000000000000001000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000010000000000000000048000000000000000000000000000000400000000000000000000000000000010000000000000000008000000000000000000000000000000000000000020002000000000000000000000000008000000000000000000000000000000000800000000000000000000000008000000000000000000000000000000000f90256f89b94eea85fdf0b05d1e0107a61b4b4db1f345854b952f863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa000000000000000000000000030f7fd07ce431d090f8ec59c3b635a4df42a00a1a0000000000000000000000000c1b71d1ad2de3fcbecda73c3273296dd45863c21a00000000000000000000000000000000000000000000000012f9aa3647286b60ff89b94fb7378d0997b0092be6bbf278ca9b8058c24752ff863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa0000000000000000000000000c1b71d1ad2de3fcbecda73c3273296dd45863c21a000000000000000000000000030f7fd07ce431d090f8ec59c3b635a4df42a00a1a0000000000000000000000000000000000000000000000001314fb37062980000f901199430f7fd07ce431d090f8ec59c3b635a4df42a00a1e1a03b841dc9ab51e3104bda4f61b41e4271192d22cd19da5ee6e292dc8e2744f713b8e00000000000000000000000009563fdb01bfbf3d6c548c2c64e446cb5900aca88000000000000000000000000c1b71d1ad2de3fcbecda73c3273296dd45863c2100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001314fb370629800000000000000000000000000000000000000000000000000012f9aa3647286b60fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8","0x02f905c40183904383b9010000000000000000000008000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000010000000000000000000000000100000020002000000020000000800000000000000000000000200000000000000010000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000800000000000006000000000000800000100000000000000000000000000000000000000000000001000000000020000000000000000000800000000800000000000000000000004000000000000000f904b9f901ba94db249fda431b6385ad5e028f3aa31f3f51ebaef2e1a0cdb9fb741d82c65a081bb855b5e42174193549c537fd57a199609593827cff71b90180000000000000000000000000762f1119123806fc0aa4c58f61a9da096910200b0000000000000000000000000000000000000000000000000000000000004443000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000c7a6b4554482e676f65726c690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006d0c7a6b4554482e676f65726c693f616c656f316d397673377a68787632783232673963667a7a74616e6c72356d357a63617334726a616d7768796a6e74336636746737656772717266703676720080c6a47e8d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f9019a94762f1119123806fc0aa4c58f61a9da096910200be1a08636abd6d0e464fe725a13346c7ac779b73561c705506044a2e6b2cdb1295ea5b901600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000532e91ca086964251519359271b99bd08427314f000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000000000c7a6b4554482e676f65726c690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f616c656f316d397673377a68787632783232673963667a7a74616e6c72356d357a63617334726a616d7768796a6e743366367467376567727172667036767200f9015c94532e91ca086964251519359271b99bd08427314ff863a0fed162bc92844d868aeee15dc79af2ef4aac1ef57805f4eec865983f4d35efd9a00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000660aba6ca934d1537a95cc4454469a1026ed6252b8e00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000003f616c656f316d397673377a68787632783232673963667a7a74616e6c72356d357a63617334726a616d7768796a6e743366367467376567727172667036767200","0x02f901a7018390a504b9010000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000100000004000000000000000000000000200000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000020000000000000000000000000000000000000000000000000020000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000400000000000001000000000000000000000000000000000000f89df89b94fad6367e97217cc51b4cd838cc086831f81d38c2f863a08c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a000000000000000000000000028cd70b79775193ea6f75f0808870b0b9eb1ad01a00000000000000000000000001c5d511f65c99ff3ea07dcca7ed91146ed5351e2a00000000000000000000000000000000000000000000000000000000000000000","0x02f909ad018396c005b901000000400000040000000000000000000000000000000000000000000000000000000000000000000000000000000010000040000000000200000000004020000000000000a0080000080000080000000000000000020000000000800000000000000000000000000000000000000000000000000400000000000000188000000000000000000000001000000000000000010010000020000000000000000000000a0001000000001001000040000000400000000000001000000000000000000000000002000000000000000002000000010000800000000000000000000000000490100000000000000000000001000004000000000010000000000000000000f908a2f89b94a375a26dbb09f5c57fb54264f393ad6952d1d2def863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa00000000000000000000000002e5357a050c29c8e9781516ac176c276f3c9c5faa0000000000000000000000000633f534ddc7ccced21f70e3e6956e669daa49d41a000000000000000000000000000000000000000000000000000000000003d0900f89b94a375a26dbb09f5c57fb54264f393ad6952d1d2def863a08c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a00000000000000000000000002e5357a050c29c8e9781516ac176c276f3c9c5faa0000000000000000000000000633f534ddc7ccced21f70e3e6956e669daa49d41a00000000000000000000000000000000000000000000000000000f4312ed20263f89b94633f534ddc7ccced21f70e3e6956e669daa49d41f863a05548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62a0000000000000000000000000a375a26dbb09f5c57fb54264f393ad6952d1d2dea00000000000000000000000002e5357a050c29c8e9781516ac176c276f3c9c5faa000000000000000000000000000000000000000000000000000000000003d0900f89b94a375a26dbb09f5c57fb54264f393ad6952d1d2def863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa0000000000000000000000000633f534ddc7ccced21f70e3e6956e669daa49d41a000000000000000000000000064046eaf582638f26ba3ff17ea51705f1367cbc3a000000000000000000000000000000000000000000000000000000000003d0900f8dd94633f534ddc7ccced21f70e3e6956e669daa49d41f884a0023916d46c0d18491146f8b0bc7d927a62a0559c8ca79920bda7dc7db1fc72f3a0000000000000000000000000a375a26dbb09f5c57fb54264f393ad6952d1d2dea00000000000000000000000002e5357a050c29c8e9781516ac176c276f3c9c5faa000000000000000000000000064046eaf582638f26ba3ff17ea51705f1367cbc3b84000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000003d0900f8fc9464046eaf582638f26ba3ff17ea51705f1367cbc3f863a051dfc81761c6e241cfba4adcd6a3af365b7b8305f76dc043f1b1b8bc22f73fdea000000000000000000000000000000000000000000000000000000000ffffffffa00000000000000000000000002e5357a050c29c8e9781516ac176c276f3c9c5fab88000000000000000000000000000000000000000000000000000000000000120f200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000003782dace9d900000ffffffffffffffffffffffffffffffffffffffffffffffffffd46bd89546914bf89b94a375a26dbb09f5c57fb54264f393ad6952d1d2def863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa00000000000000000000000002e5357a050c29c8e9781516ac176c276f3c9c5faa0000000000000000000000000633f534ddc7ccced21f70e3e6956e669daa49d41a000000000000000000000000000000000000000000000000000000000003d0900f89b94a375a26dbb09f5c57fb54264f393ad6952d1d2def863a08c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a00000000000000000000000002e5357a050c29c8e9781516ac176c276f3c9c5faa0000000000000000000000000633f534ddc7ccced21f70e3e6956e669daa49d41a00000000000000000000000000000000000000000000000000000f4312e94f963f89b94633f534ddc7ccced21f70e3e6956e669daa49d41f863a05548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62a0000000000000000000000000a375a26dbb09f5c57fb54264f393ad6952d1d2dea00000000000000000000000002e5357a050c29c8e9781516ac176c276f3c9c5faa000000000000000000000000000000000000000000000000000000000003d0900f89b94a375a26dbb09f5c57fb54264f393ad6952d1d2def863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa0000000000000000000000000633f534ddc7ccced21f70e3e6956e669daa49d41a000000000000000000000000064046eaf582638f26ba3ff17ea51705f1367cbc3a000000000000000000000000000000000000000000000000000000000003d0900f8dd94633f534ddc7ccced21f70e3e6956e669daa49d41f884a0023916d46c0d18491146f8b0bc7d927a62a0559c8ca79920bda7dc7db1fc72f3a0000000000000000000000000a375a26dbb09f5c57fb54264f393ad6952d1d2dea00000000000000000000000002e5357a050c29c8e9781516ac176c276f3c9c5faa000000000000000000000000064046eaf582638f26ba3ff17ea51705f1367cbc3b84000000000000000000000000000000000000000000000000000000000658e7c8000000000000000000000000000000000000000000000000000000000003d0900f8fc9464046eaf582638f26ba3ff17ea51705f1367cbc3f863a051dfc81761c6e241cfba4adcd6a3af365b7b8305f76dc043f1b1b8bc22f73fdea000000000000000000000000000000000000000000000000000000000658e7c80a00000000000000000000000002e5357a050c29c8e9781516ac176c276f3c9c5fab8800000000000000000000000000000000000000000000000000000000000011e9a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003782dace9d900000000000000000000000000000000000000000000000000000002e45f9fa00bf77","0x02f9055c01839a4ac9b90100000000000004000000000000000000000000000000000000000000000000000000000004000000000000000000001000004000000000020000000000402000000000000080080000000000080000000000000000020000000000800000000000000000000000000000000000000000000000000400000000000000100000000000000000000000001000040000000000010010000000000000000000000000400a0800000000001001000040000000400000000000001000000000000004000000008002000000000000000000000100004000000000000000000000010000000090100000000000000000000001000004000000000010000000000000000000f90451f89b94a375a26dbb09f5c57fb54264f393ad6952d1d2def863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa000000000000000000000000046fcab71245e2ff12ecc0ba8d3490aec95617b54a0000000000000000000000000633f534ddc7ccced21f70e3e6956e669daa49d41a000000000000000000000000000000000000000000000000000000000003d0900f89b94a375a26dbb09f5c57fb54264f393ad6952d1d2def863a08c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a000000000000000000000000046fcab71245e2ff12ecc0ba8d3490aec95617b54a0000000000000000000000000633f534ddc7ccced21f70e3e6956e669daa49d41a0000000000000000000000000000000000000000000000000000000003e7f2450f89b94633f534ddc7ccced21f70e3e6956e669daa49d41f863a05548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62a0000000000000000000000000a375a26dbb09f5c57fb54264f393ad6952d1d2dea000000000000000000000000046fcab71245e2ff12ecc0ba8d3490aec95617b54a000000000000000000000000000000000000000000000000000000000003d0900f89b94a375a26dbb09f5c57fb54264f393ad6952d1d2def863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa0000000000000000000000000633f534ddc7ccced21f70e3e6956e669daa49d41a0000000000000000000000000f1675ffed677b2e7ee0c87574ebd279049d9ebf9a000000000000000000000000000000000000000000000000000000000003d0900f8dd94633f534ddc7ccced21f70e3e6956e669daa49d41f884a0023916d46c0d18491146f8b0bc7d927a62a0559c8ca79920bda7dc7db1fc72f3a0000000000000000000000000a375a26dbb09f5c57fb54264f393ad6952d1d2dea000000000000000000000000046fcab71245e2ff12ecc0ba8d3490aec95617b54a0000000000000000000000000f1675ffed677b2e7ee0c87574ebd279049d9ebf9b84000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000003d0900f8fc94f1675ffed677b2e7ee0c87574ebd279049d9ebf9f863a051dfc81761c6e241cfba4adcd6a3af365b7b8305f76dc043f1b1b8bc22f73fdea000000000000000000000000000000000000000000000000000000000ffffffffa000000000000000000000000046fcab71245e2ff12ecc0ba8d3490aec95617b54b880ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003782dace9d900000fffffffffffffffffffffffffffffffffffffffffffffff3d3b3ce837117c4f3","0x02f9032701839baf92b9010000000000000000000000000000000000000000000000000000000000400000000000000000000000000200000000000000000000020000001200000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000021000000000000000000000002440000000000000000000000000000000001000000000000000000000000000008000000000000000001000000000000000000000000000000000000008000000000000000000000000000000004000f9021cf9013c94af4159a80b6cc41ed517db1c453d1ef5c2e4db72f863a05e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1a000000000000000000000000000000000000000000000000000000000000b574fa0c16ec891aba6a3f7b381a53cdd85e9d84741f080b35012c1f376edcac6e95f10b8c00000000000000000000000006bebc4925716945d46f0ec336d5c2564f419682c000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000f5ce611c7321438f8a30aab16852d68da4f5ab5a4de176e8c0279273cbe8a9919b029628c5cc2def297494bb2b1d1a470ae6ce18000000000000000000000000000000000000000000000000000000000000000b00000000000000000000000000000000000000000000000000000000652d2a70f8db946bebc4925716945d46f0ec336d5c2564f419682cf842a0ff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60ba000000000000000000000000000000000000000000000000000000000000b574fb88000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000034e4bd611c7321438f8a30aab16852d68da4f59a490000000000000000000000000000000000000000000000000429d069189e0000000000000000000000000000","0x02f901ff01839ceb65b9010000000000010002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000800000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000020000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000f8f5f85894d5c325d183c592c94998000c5e0eed9e6655c020e1a09866f8ddfe70bb512b2f2b28b49d4017c43f7ba775f1a20c61c13eea8cdac111a0c9afd20a1f61bb629588d82d72e13914812259d13161284b98747c955d62317ef89994d5c325d183c592c94998000c5e0eed9e6655c020e1a0d342ddf7a308dec111745b00315c14b7efb2bdae570a6856e088ed0c65a3576cb8600336df0b24cf3302afadbc4c828662c60c2cdae602e59beaab7011bf3fd5a223000000000000000000000000000000000000000000000000000000000004d0e5020abc24e9cfc67a97e463deef1ab573cb11d9cd618bedee85c2df85fac6faa2","0x02f901ff01839e2744b9010000000000010002000000000000000000000000000000000000000000000000000000002000000000000000001000000000000000000000000000800000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000800000000000000000000000000000000000000000000000000000000000000f8f5f85894de29d060d45901fb19ed6c6e959eb22d8626708ee1a09866f8ddfe70bb512b2f2b28b49d4017c43f7ba775f1a20c61c13eea8cdac111a035ceccc734a10ae9c593304774276b4b6324223b019c38c6662ab923022b2c8af89994de29d060d45901fb19ed6c6e959eb22d8626708ee1a0d342ddf7a308dec111745b00315c14b7efb2bdae570a6856e088ed0c65a3576cb860022db625db05534a27ea14675f8d22d7c603e0981ceff2b02504791b75c4f56100000000000000000000000000000000000000000000000000000000000d7c61019e776def80129482e5f6282056f7318bedf7bc30a4ae7cdf8814d8d0b28a99","0x02f901ff01839f6317b9010000000000010002000000000000000000000000000000000000000000000000000000002000000000000000001000000000000000000000000000800000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000800000000000000000000000000000000000000000000000000000000000000f8f5f85894de29d060d45901fb19ed6c6e959eb22d8626708ee1a09866f8ddfe70bb512b2f2b28b49d4017c43f7ba775f1a20c61c13eea8cdac111a01331bfa0165c171aefba1e6eebd55d52bc2389726c1d0594f4a9e2f7812b42e4f89994de29d060d45901fb19ed6c6e959eb22d8626708ee1a0d342ddf7a308dec111745b00315c14b7efb2bdae570a6856e088ed0c65a3576cb86002e2bf007e02d68956b61be94c5661c8c8d1fb7ae552a0b2e7f3869d20d7aa0700000000000000000000000000000000000000000000000000000000000d7c620467725c6a4525d13c195701bf88f4f3c65329438cf8a437c928067d9a80556e","0x02f9033f0183a10e1fb9010000000000010002000000000000000000000000000000000000000000000000000000002000000000000000001000000000000000000000000000800000000040000040000000000000000200000000000000000000002000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000020000000000004000000000000000080000000200400000000000800000000000000000000000000000000000000000000000000000000000000f90234f85894de29d060d45901fb19ed6c6e959eb22d8626708ee1a09866f8ddfe70bb512b2f2b28b49d4017c43f7ba775f1a20c61c13eea8cdac111a074c803dcb95e04990c3e71db65899a9e0282003a967632e13eb6ce45d598fb45f9013c94de29d060d45901fb19ed6c6e959eb22d8626708ef863a04264ac208b5fde633ccdd42e0f12c3d6d443a4f3779bbf886925b94665b63a22a0073314940630fd6dcda0d772d4c972c4e0a9946bef9dabf4ef84eda8ef542b82a0000000000000000000000000c3511006c04ef1d78af4c8e0e74ec18a6e64ff9eb8c00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f36e2be14d65c7a832d1a863ecfa06c6730634700000000000000000000000000000000000000000000000000470de4df8200000000000000000000000000000000000000000000000000000000000000000000f89994de29d060d45901fb19ed6c6e959eb22d8626708ee1a0d342ddf7a308dec111745b00315c14b7efb2bdae570a6856e088ed0c65a3576cb8600427eee54195a8dc4d35b17e5cbc8e18b6e8eebdaf2017f6e12dac62232ca9e000000000000000000000000000000000000000000000000000000000000d7c6300b1121da2e28ad38fb1736373bb7fe4787b73c881995bbd391b17aa113a2cc8","0x02f901ff0183a249e6b9010000000000010002000000000000000000000000000000000000000000000000000000002000000000000000001000000000000000000000000000800000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000800000000000000000000000000000000000000000000000000000000000000f8f5f85894de29d060d45901fb19ed6c6e959eb22d8626708ee1a09866f8ddfe70bb512b2f2b28b49d4017c43f7ba775f1a20c61c13eea8cdac111a0d4d6f16309b51be964a0482c4cd816fadeaa8759216dd9bbc20773ba36c75ccaf89994de29d060d45901fb19ed6c6e959eb22d8626708ee1a0d342ddf7a308dec111745b00315c14b7efb2bdae570a6856e088ed0c65a3576cb8600001d0bd72454b02cd7386951338297e0da0f5a8c1076a24c1425928dce0838300000000000000000000000000000000000000000000000000000000000d7c64028c033938806df04fcc792f72f91ca04c3c20963eec03addb44fecf6fa795de","0x02f901090183a29beeb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f9041e0183a8526db9010000000200000000400000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000010000020000000000000000000000000000004000000080000000004000000002000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800200010000000000000000000000000000000000000000000000000000000040000000000000000f90313f8b994caf156a3dd652e2b493fe9e53f3d526d3cbbd4a8e1a0e2db1e7820b0cca1226a7e7d5cc2a3df28542b04da0f0aa7949f2a74519ef5a0b880000000000000000000000000307c2d86e3638a5afce36115dcbc856260748d310000000000000000000000000000000000000000000000000000b588ff18e000000000000000000000000000307c2d86e3638a5afce36115dcbc856260748d310000000000000000000000000000000000000000000000000000000000000000f87994caf156a3dd652e2b493fe9e53f3d526d3cbbd4a8e1a0305bf06329ff886b42ab3ed2979092b17d3a7fc67e7de42ee393a24c8e39fee7b840000000000000000000000000307c2d86e3638a5afce36115dcbc856260748d31000000000000000000000000307c2d86e3638a5afce36115dcbc856260748d31f901da9475d8ec64bf68b364b1f45249774e78df2f401399e1a0c6cb9661759518374091eb98266dd634614ae793b31549daff33e83d6dee0165b901a0000000000000000000000000caf156a3dd652e2b493fe9e53f3d526d3cbbd4a8000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001200000000000000000000000004a1c82542ebdb854ece6ce5355b5c48eb299ecd8000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000003840000000000000000000000000000000000000000000000000000b588ff18e000000000000000000000000000307c2d86e3638a5afce36115dcbc856260748d31000000000000000000000000000000000000000000000000000000000001518000000000000000000000000000000000000000000000000000000000000151800000000000000000000000000000000000000000000000000000000000001388000000000000000000000000000000000000000000000000000000000000001e347468207465737420636f6c6c656374697665206f6e203136204f6374200000","0x02f908450183ab3259b9010000000000004048000010000004005000000000080000000000000000000000080002000000000000008200000004008450000000000000000000100000200200000001000000000040000008200000000000000000000000000000102000000100000000000000000000000480000000000000000000000000000010000000000200000000024000000000000000000010000000000000000001004200400000020000000000000000000000001400000000000000000000040000000200000000000002000000080000000000020000000000000000040000000000000000001010000000000000000000000000000000000000000000000000800000000000f9073af89b944031bc992179a7742bb99ec99da67f852c11927af863a08c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a0000000000000000000000000aed889cc423f93ae00d140fce00a4aa6b05aa783a0000000000000000000000000d029d527e1d700c549f4e04662035b8a8624ce4fa00000000000000000000000000000000000000000000000000000000000000000f89b944031bc992179a7742bb99ec99da67f852c11927af863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa0000000000000000000000000aed889cc423f93ae00d140fce00a4aa6b05aa783a0000000000000000000000000d029d527e1d700c549f4e04662035b8a8624ce4fa000000000000000000000000000000000000000000000000000000000000003e8f902de94d9005878cb1a830355dbf4d814a835c54022038ef884a04b388aecf9fa6cc92253704e5975a6129a4f735bdbd99567df4ed0094ee4ceb5a00000000000000000000000000ded20eaea674409ccfeca298385f361ad359a43a00000000000000000000000004200000000000000000000000000000000000007a0000000000000000000000000000000000000000000000000000000000000170db9024000000000000000000000000000000000000000000000000000000000001e8480000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000652d2a7000000000000000000000000000000000000000000000000000000000000001a4cbd4ece90000000000000000000000004200000000000000000000000000000000000010000000000000000000000000d029d527e1d700c549f4e04662035b8a8624ce4f0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000170d00000000000000000000000000000000000000000000000000000000000000e4662a633a0000000000000000000000003c3a81e81dc49a522a592e7622a7e711c06bf354000000000000000000000000deaddeaddeaddeaddeaddeaddeaddeaddead0000000000000000000000000000aed889cc423f93ae00d140fce00a4aa6b05aa783000000000000000000000000aed889cc423f93ae00d140fce00a4aa6b05aa78300000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f901fc94fcdc20eaea674409ccfeca298385f361ad358932f842a0cb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52aa00000000000000000000000004200000000000000000000000000000000000010b901a0000000000000000000000000d029d527e1d700c549f4e04662035b8a8624ce4f0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000170d00000000000000000000000000000000000000000000000000000000001e848000000000000000000000000000000000000000000000000000000000000000e4662a633a0000000000000000000000003c3a81e81dc49a522a592e7622a7e711c06bf354000000000000000000000000deaddeaddeaddeaddeaddeaddeaddeaddead0000000000000000000000000000aed889cc423f93ae00d140fce00a4aa6b05aa783000000000000000000000000aed889cc423f93ae00d140fce00a4aa6b05aa78300000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f9011d94d029d527e1d700c549f4e04662035b8a8624ce4ff884a0718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d0396a00000000000000000000000004031bc992179a7742bb99ec99da67f852c11927aa0000000000000000000000000deaddeaddeaddeaddeaddeaddeaddeaddead0000a0000000000000000000000000aed889cc423f93ae00d140fce00a4aa6b05aa783b880000000000000000000000000aed889cc423f93ae00d140fce00a4aa6b05aa78300000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000","0xf901090183ab8461b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0xf901090183abd669b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0xf903640183ae0bfcb9010000000000100000400000000000000000000000000000084000000000000000000000000000000000000000000000020000000000000000000000000000000000000040008800000000100008000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000000002000000000000000000000000000000000000000002000000000000000000000000000000000000001000000000000000020080000000000000040000000080040002000000000000000000000000000000000000000000010000000020000000000000200000000000000000000000000000001002000000000000000000f90259f9011c94980205d352f198748b626f6f7c38a8a5663ec981f863a02bd2d8a84b748439fd50d79a49502b4eb5faa25b864da6a9ab5c150704be9a4da0000000000000000000000000000000000000000000000000000000000000006ea00000000000000000000000009f40916d0dfb2f8f5fb63d8f76826d09041f2eaeb8a000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000d68efdc6e047f712f4bff82fc800f5309ca0c4e8e7ba32b255b212fef748ed80af200000000000000000000000000000000000000000000000000000000000000148a555e4fc287650f5e8ca1778a35dd44e893d6aa000000000000000000000000f89b949f40916d0dfb2f8f5fb63d8f76826d09041f2eaef863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000363413eb82ff4ebda8e70f8e0f9615b684d2f9eda00000000000000000000000000000000000000000000000000de0b6b3a7640000f89b949f40916d0dfb2f8f5fb63d8f76826d09041f2eaef863a0bf551ec93859b170f9b2141bd9298bf3f64322c6f7beb2543a0cb669834118bfa0000000000000000000000000000000000000000000000000000000000000006ea0000000000000000000000000363413eb82ff4ebda8e70f8e0f9615b684d2f9eda00000000000000000000000000000000000000000000000000de0b6b3a7640000","0xf903640183b08524b9010000000000002000000000000000000000000000000040000000000000000000000000000000000020000000000000000000000000000000000000000000000000000040000800000000000008000000000001000000000000000000000000000000000000020000000000000000000800000000000020000000000010000000000002004000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000020080000100400000040000000080100002000000000000000000000000000000000000000000010000000020000000000000200000000000000000000000000000001002000000000000000000f90259f9011c94980205d352f198748b626f6f7c38a8a5663ec981f863a02bd2d8a84b748439fd50d79a49502b4eb5faa25b864da6a9ab5c150704be9a4da0000000000000000000000000000000000000000000000000000000000000006ea00000000000000000000000004f7a67464b5976d7547c860109e4432d50afb38eb8a0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000001a400c8fb05948cf6527abe1b570154f613139797c9cf1ace53bd3c8f4a8f756a703f60000000000000000000000000000000000000000000000000000000000000014dd69db25f6d620a7bad3023c5d32761d353d3de9000000000000000000000000f89b944f7a67464b5976d7547c860109e4432d50afb38ef863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa00000000000000000000000004f7a67464b5976d7547c860109e4432d50afb38ea00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000005805420c76fdc3d1f89b944f7a67464b5976d7547c860109e4432d50afb38ef863a0bf551ec93859b170f9b2141bd9298bf3f64322c6f7beb2543a0cb669834118bfa0000000000000000000000000000000000000000000000000000000000000006ea000000000000000000000000095ac38e1c9af5a6d868c1b376e7c0ba9b9251ca5a00000000000000000000000000000000000000000000000005805420c76fdc3d1","0xf903640183b2fe40b9010000000000002000000000000000000000000000000040000000000000000000000000000000000000000000010000000000000000000000000000000000000000000040000800000000000008000000000001000000000100000000000000000000000000020000000000000000000800000000000020000000000010000000000002000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000020080000100000000040000000080100002000000000000000000000000000000000000000000010000000020000000000000200000008000000000000000000000001002000000000000000000f90259f9011c94980205d352f198748b626f6f7c38a8a5663ec981f863a02bd2d8a84b748439fd50d79a49502b4eb5faa25b864da6a9ab5c150704be9a4da0000000000000000000000000000000000000000000000000000000000000006ea00000000000000000000000004f7a67464b5976d7547c860109e4432d50afb38eb8a0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000001a400d1b36efb5ef48c1953b391dadade996e546aebdeea81b118ac2eefda2a548bac50000000000000000000000000000000000000000000000000000000000000014dd69db25f6d620a7bad3023c5d32761d353d3de9000000000000000000000000f89b944f7a67464b5976d7547c860109e4432d50afb38ef863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa00000000000000000000000004f7a67464b5976d7547c860109e4432d50afb38ea00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000005735cbdc26b5d43af89b944f7a67464b5976d7547c860109e4432d50afb38ef863a0bf551ec93859b170f9b2141bd9298bf3f64322c6f7beb2543a0cb669834118bfa0000000000000000000000000000000000000000000000000000000000000006ea0000000000000000000000000f7db1e439db7a79a8f91cbde7c0069a97b89c813a00000000000000000000000000000000000000000000000005735cbdc26b5d43a","0xf902c40183b4a7bab9010000000040000000080000000000000000000000000000000001000002000000000000000000000000000000000000000000000000000000000000000000002000000040000000000000000000000000000000000000020000000000000000000000000000000000000040000000000000000000000008000000000000000000000000000010000000000000000000000000000000000002000000000000000000000000000000000000000000200000000000000000000000000000040000000080000020000000000000000000000000000000000000000000010000000000000000000000200000000000000000000000000000000000000000000000000000f901b9f8dc94980205d352f198748b626f6f7c38a8a5663ec981f863a074bbc026808dcba59692d6a8bb20596849ca718e10e2432c6cdf48af865bc5d9a0000000000000000000000000000000000000000000000000000000000000006ea0000000000000000000000000a6bf2be6c60175601bf88217c75dd4b14abb5fbbb860312401a801d73bde5cacb7e2eeba637d09c23f9a18dff6504cbdc8f7d7b2e348312401a801d73bde5cacb7e2eeba637d09c23f9a18dff6504cbdc8f7d7b2e3480000000000000000000000000000000000000000000000000000000000000014f8d994a6bf2be6c60175601bf88217c75dd4b14abb5fbbe1a0293e3a2153dc5c8d3667cbd6ede71a71674b2381e5dc4b40c91ad0e813447c0fb8a0000000000000000000000000980205d352f198748b626f6f7c38a8a5663ec981cf507db63af850463ebaaeffe5f783680e6aa364627d07c6488f5ba313ebbcca000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000","0xf903640183b6bf22b9010000000000002000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000008000000000001000000000000000000000000000000000000020000000000000000000800000000000020000000000010000000008002002000000000000000000000000000000000000002000000000000000000000000000000000040000000000000000000020180000100000000040000000000140002000000000000000000000000000000000000000000000000000020000000000000200000000000000000000000000000001002000000000400000000f90259f9011c94980205d352f198748b626f6f7c38a8a5663ec981f863a02bd2d8a84b748439fd50d79a49502b4eb5faa25b864da6a9ab5c150704be9a4da0000000000000000000000000000000000000000000000000000000000000006fa00000000000000000000000004f7a67464b5976d7547c860109e4432d50afb38eb8a000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000073bd808065379db49bfa5292e83432fd6ede06ae24792f0d266ac89be03f7925229ce0000000000000000000000000000000000000000000000000000000000000014dd69db25f6d620a7bad3023c5d32761d353d3de9000000000000000000000000f89b944f7a67464b5976d7547c860109e4432d50afb38ef863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa00000000000000000000000004f7a67464b5976d7547c860109e4432d50afb38ea00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000a7da3311d85502df89b944f7a67464b5976d7547c860109e4432d50afb38ef863a0bf551ec93859b170f9b2141bd9298bf3f64322c6f7beb2543a0cb669834118bfa0000000000000000000000000000000000000000000000000000000000000006fa0000000000000000000000000c677f78297d40138b68be496ae34d861dc9edbeba00000000000000000000000000000000000000000000000000a7da3311d85502d","0xf902c40183b86890b9010000000040000000080000000000000000000000000000000001000002000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000020000000000000000000000000000000000000040000000000000000000000008000000000000000000000000000010000000000000000000000000000000000002000000000000000000000000000000000040000000200000000000000100000000000000040000000000040020000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000f901b9f8dc94980205d352f198748b626f6f7c38a8a5663ec981f863a074bbc026808dcba59692d6a8bb20596849ca718e10e2432c6cdf48af865bc5d9a0000000000000000000000000000000000000000000000000000000000000006fa0000000000000000000000000a6bf2be6c60175601bf88217c75dd4b14abb5fbbb86031f7494a39416159f52b17758dda7bdafa4215dcf706dfc06cd6f8933b817d2031f7494a39416159f52b17758dda7bdafa4215dcf706dfc06cd6f8933b817d200000000000000000000000000000000000000000000000000000000000000014f8d994a6bf2be6c60175601bf88217c75dd4b14abb5fbbe1a0293e3a2153dc5c8d3667cbd6ede71a71674b2381e5dc4b40c91ad0e813447c0fb8a0000000000000000000000000980205d352f198748b626f6f7c38a8a5663ec981ea46511277ad0d9d47ff09d07eb1e1298bcefa6a6da798de1e0af884002aceb1000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000","0x02f902460183e60720b9010000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008002000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000001000000000000080004002000000000000000000000000000000000000000100000000000020000000000000001000000000000000000000000000000000020000000000000000f9013bf89b9488045945952b374abf696602941b51149bad8ab4f863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000e8c83b0cb059fe98f4e0bb2b7be404565e5aaa75a00000000000000000000000000000000000000000033b2e3c9fd0803ce8000000f89c9488045945952b374abf696602941b51149bad8ab4f884a02f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0da00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000e8c83b0cb059fe98f4e0bb2b7be404565e5aaa75a0000000000000000000000000e8c83b0cb059fe98f4e0bb2b7be404565e5aaa7580","0xf901090183e65928b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f901e50183e6f1e1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000001080000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8dbf8d99416324d80bfc68b1fec6c288f0dac640a044d2678e1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000180ab5200000000000000000000000000000000000000000000000000000000652d2a5500000000000000000000000000000000000000000000000000000000000000074144412f55534400000000000000000000000000000000000000000000000000","0x02f901e50183e78ab2b9010000000000000000000000000400000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000800040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8dbf8d994e7a43467520e4d12d1f9e94b99d6f041786aadcee1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000024cba3965500000000000000000000000000000000000000000000000000000000652d2a550000000000000000000000000000000000000000000000000000000000000008574554482f555344000000000000000000000000000000000000000000000000","0x02f901e50183e82377b9010000000000000000000000000000000000000000000000000000000000000000000000080000000000001000000020000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8dbf8d994b52a8b962ff3d8a6a0937896ff3da3879eac64e3e1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000005f6321e00000000000000000000000000000000000000000000000000000000652d2a560000000000000000000000000000000000000000000000000000000000000008555344542f555344000000000000000000000000000000000000000000000000","0xf901090183e8ef8fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f901e50183e9883cb9010000000002000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000f8dbf8d994117a5ab00f93469bea455f0864ef9ad8d9630cc9e1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000007e060100000000000000000000000000000000000000000000000000000000652d2a5800000000000000000000000000000000000000000000000000000000000000074752542f55534400000000000000000000000000000000000000000000000000","0x02f901e50183ea2101b9010000000000000000000000000000000000000000000000000000004000000000000000000000000000001000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000800000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8dbf8d994bbbf9614de2b788a66d970b552a79fae6419abdce1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000005eebd8700000000000000000000000000000000000000000000000000000000652d2a580000000000000000000000000000000000000000000000000000000000000008465241582f555344000000000000000000000000000000000000000000000000","0x02f901e50183eab9d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200f8dbf8d99439f46d72bb20c7bcb8a2cdf52630fac1496e859ae1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000024f8bc612d00000000000000000000000000000000000000000000000000000000652d2a5a0000000000000000000000000000000000000000000000000000000000000008574554482f555344000000000000000000000000000000000000000000000000","0x02f901e50183eb528bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000020000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8dbf8d9945ae58e9dec27619572a42dad916e413afa89e46de1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000019d1f00000000000000000000000000000000000000000000000000000000652d2a5c000000000000000000000000000000000000000000000000000000000000000842414e4b2f555344000000000000000000000000000000000000000000000000","0x02f9043a0183ed1237b9010000200000000000000000002080000000000000000000000000010000000000000000000000000000000000000000200000000000000000000000020000000000000000000400000000002008000000300000000000000000000000008000000000000000008000100000000000000000000000000000000000020010000000000000000080000000004000000000000000000001000000080000104000000000000000000000000000000000000000000000000000000000000000000000000000204002000000001000000000000000000000000000001000000000000020000000000000000000000000000000000000000000000001400000000000000000f9032ff87a94b4fbf271143f4fbf7b91a5ded31805e42b2208d6f842a0e1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109ca00000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488da0000000000000000000000000000000000000000000000000000000e8d4a51000f89b94b4fbf271143f4fbf7b91a5ded31805e42b2208d6f863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa00000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488da000000000000000000000000077f0ea26bae49c9f412a1511730c7c1d3382f697a0000000000000000000000000000000000000000000000000000000e8d4a51000f89b94257c2c98163227062e5a33095a20fc7604ee52b5f863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa000000000000000000000000077f0ea26bae49c9f412a1511730c7c1d3382f697a0000000000000000000000000185d901fe591ce516ed9e192b33da3ef14d53b93a0000000000000000000000000000000000000000000000000042a7d29b88844e5f8799477f0ea26bae49c9f412a1511730c7c1d3382f697e1a01c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1b840000000000000000000000000000000000000000000007b61de650eaa9bccab150000000000000000000000000000000000000000000000001adafd27de2bd68bf8fc9477f0ea26bae49c9f412a1511730c7c1d3382f697f863a0d78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822a00000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488da0000000000000000000000000185d901fe591ce516ed9e192b33da3ef14d53b93b8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000000000000000000000000000042a7d29b88844e50000000000000000000000000000000000000000000000000000000000000000","0x02f901e50183edaafcb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000800000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8dbf8d994aac02884a376dc5145389ba37f08b0dde08d3f18e1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000b37b80500000000000000000000000000000000000000000000000000000000652d2a5e0000000000000000000000000000000000000000000000000000000000000008445944582f555344000000000000000000000000000000000000000000000000","0x02f901e50183ee43c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000008000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400040000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000f8dbf8d994402a30f83bbfc2203e1fc5d8a9bb41e1b0ddc639e1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000024df2e4ee100000000000000000000000000000000000000000000000000000000652d2a5f00000000000000000000000000000000000000000000000000000000000000074554482f55534400000000000000000000000000000000000000000000000000","0x02f901e50183eedc86b9010000000000000000000000000000000000000000000000000000000000000000040000000000000000001000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000f8dbf8d9943ae963e586b6c1d16f371ac0a1260cdaed6a76bde1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000024dcbf623800000000000000000000000000000000000000000000000000000000652d2a5f00000000000000000000000000000000000000000000000000000000000000074554482f55534400000000000000000000000000000000000000000000000000","0x02f901e50183ef753fb9010000000000000000000000000000000000000000000000000000000000000040000000000000000000001000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000f8dbf8d994c8f4aeb27fce1f361cda3aadcda992c7ed7b0e74e1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000005b67ef00000000000000000000000000000000000000000000000000000000652d2a610000000000000000000000000000000000000000000000000000000000000008444f47452f555344000000000000000000000000000000000000000000000000","0x02f901e50183f00e04b9010000000000000000000000000000000000000000000000000000000004000000000000000000000000001000000000000400000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8dbf8d99460cfba755fac7178e9a8e133699ad2f7dcf6ad9ae1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000229ca2bd00000000000000000000000000000000000000000000000000000000652d2a620000000000000000000000000000000000000000000000000000000000000008555255532f555344000000000000000000000000000000000000000000000000","0x02f901098083f0647ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f901e50183f0fd33b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8dbf8d9945e3b4e52af7f15f4e4e12033d71cfc3afbc7d3c0e1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000002c0f30100000000000000000000000000000000000000000000000000000000652d2a6400000000000000000000000000000000000000000000000000000000000000074f4d472f55534400000000000000000000000000000000000000000000000000","0x02f901e50183f195ecb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000f8dbf8d994ffd9e1167e2ad8f323464832ad99a03bda99b7b7e1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000150ea000000000000000000000000000000000000000000000000000000000652d2a64000000000000000000000000000000000000000000000000000000000000000847414c412f555344000000000000000000000000000000000000000000000000","0x02f901098083f22563b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f901e50183f2be28b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8dbf8d9940e324d90e9180df65e63438b2af37458b7b7b500e1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000004f47321cd00000000000000000000000000000000000000000000000000000000652d2a690000000000000000000000000000000000000000000000000000000000000007424e422f55534400000000000000000000000000000000000000000000000000","0x02f901e50183f356f9b9010000000000000000000000000000000000000000000000000000000000000000000000000000200000001000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000f8dbf8d9944a7d0e32e82aea46773c348896761addc51dfb11e1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000105dd23061100000000000000000000000000000000000000000000000000000000652d2a6900000000000000000000000000000000000000000000000000000000000000074254432f55534400000000000000000000000000000000000000000000000000","0x02f901e50183f3e4dab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000001080000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8dbf8d99416324d80bfc68b1fec6c288f0dac640a044d2678e1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000018227472200000000000000000000000000000000000000000000000000000000652d2a690000000000000000000000000000000000000000000000000000000000000008414156452f555344000000000000000000000000000000000000000000000000","0x02f901e50183f472c7b9010000000000000000000000000400000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000800040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8dbf8d994e7a43467520e4d12d1f9e94b99d6f041786aadcee1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000285d0fb605900000000000000000000000000000000000000000000000000000000652d2a6a0000000000000000000000000000000000000000000000000000000000000008574254432f555344000000000000000000000000000000000000000000000000","0x02f901e50183f50b8cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000002001000000000000000000000000000000000000010000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000f8dbf8d99407c4eee621098c526403b30bdcb17b3722719dcee1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000024dfc6ecd300000000000000000000000000000000000000000000000000000000652d2a6a00000000000000000000000000000000000000000000000000000000000000074554482f55534400000000000000000000000000000000000000000000000000","0x02f901e50183f59979b9010000000000000000000000000000000000000000000000000000000000000000000000080000000000001000000020000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8dbf8d994b52a8b962ff3d8a6a0937896ff3da3879eac64e3e1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000002870fd6b6be00000000000000000000000000000000000000000000000000000000652d2a6a0000000000000000000000000000000000000000000000000000000000000008574254432f555344000000000000000000000000000000000000000000000000","0x02f904240183f78797b9010000000000100000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000800600000000000000000000000000000000000000000001082000000000001001000000000000000000000000000000020000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000580000000000000000000000200000000001000000000000000000000000000000000000000000000000000000000000000000000000020000000000000004000000000000000000000000020000000000000000000000000000000000000000000000000000000000000020000f90319f901dc949054f0d5f352fafe6ebf0ec14654da0362dc96caf842a0f6a97944f31ea060dfde0566e4167c1a1082551e64b60ecb14d599a9d023d451a00000000000000000000000000000000000000000000000000000000000011eb6b901800000000000000000000000000000000000000000000000d51cfff1e9a1af7c000000000000000000000000006af57e73d328e2a8ec95e01178d1e2a2a387d66a00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000140000000000000000000000012332e3d78c6cc4a1a0c4dae81535bc000065fa80300000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000d51cfff1e9a1af7c000000000000000000000000000000000000000000000000d51cfff1e9a1af7c000000000000000000000000000000000000000000000000d51cfff1e9a1af7c000000000000000000000000000000000000000000000000d51cfff1e9a1af7c0000000000000000000000000000000000000000000000000000000000000000040001020300000000000000000000000000000000000000000000000000000000f89b949054f0d5f352fafe6ebf0ec14654da0362dc96caf863a00109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271a00000000000000000000000000000000000000000000000000000000000011eb6a00000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000652d2a70f89b949054f0d5f352fafe6ebf0ec14654da0362dc96caf863a00559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5fa00000000000000000000000000000000000000000000000d51cfff1e9a1af7c00a00000000000000000000000000000000000000000000000000000000000011eb6a000000000000000000000000000000000000000000000000000000000652d2a70","0x02f901e50183f8156cb9010000000000000000000000000000000000000000000000000000004000000000000000000000000000001000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000800000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8dbf8d994bbbf9614de2b788a66d970b552a79fae6419abdce1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000001c062a100000000000000000000000000000000000000000000000000000000652d2a6c000000000000000000000000000000000000000000000000000000000000000853414e442f555344000000000000000000000000000000000000000000000000","0x02f901e50183f8ae31b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000f8dbf8d994e5d686595da780e6fbe88c31b77c1225974c89fbe1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000024df3d91e000000000000000000000000000000000000000000000000000000000652d2a6d00000000000000000000000000000000000000000000000000000000000000074554482f55534400000000000000000000000000000000000000000000000000","0x02f901e50183f93c06b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200f8dbf8d99439f46d72bb20c7bcb8a2cdf52630fac1496e859ae1a0a7fc99ed7617309ee23f63ae90196a1e490d362e6f6a547a59bc809ee2291782b8a000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000005f4f04b00000000000000000000000000000000000000000000000000000000652d2a6e0000000000000000000000000000000000000000000000000000000000000008555344432f555344000000000000000000000000000000000000000000000000","0x02f901090183f9a412b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f901c80183faf748b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000080000000000000004000000000800000000000000000000000000000000000000000000000200000000000000000400000000010000000000000000000000000000000000000000000000004800200000000000000000004000000010000000000000000000000000000000f8bef8bc94e5ff3b57695079f808a24256734483cd3889fa9ef884a0a7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e2a08a767b2e89133b95f135e6803d3b75eb52b9636707f38d986de63283fd028beba0000000000000000000000000000000000000000000000000000000000000803ca000000000000000000000000000000000000000000000000000000000003c1c98a000000000000000000000000000000000000000000000000000000000652d2a70","0x02f901090183fb5cb4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f901090183fbb880b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f901090183fdf200b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f901090183fe5538b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f901090183febd24b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0xf90246018401009066b9010000000000000002000000000000000000000000000000000000800000000000000000000000000000000000000800000000000000000000000000000000000000000100000000000000000008020000000000040000000000000000000000000000000000000008000000000000000000100000000000000000800010800000000000000000000000000000010000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000002000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000040000000004000000000000044f9013af89b9470e53130c4638aa80d5a8abf12983f66e0b1d05ff863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa00000000000000000000000003e62eb1d9f503f1db36bcfcabdaa7488718eee09a0000000000000000000000000e8c84a631d71e1bb7083d3a82a3a74870a286b97a0000000000000000000000000000000000000000000000000016345785d8a0000f89b943e62eb1d9f503f1db36bcfcabdaa7488718eee09f863a0cb339b570a7f0b25afa7333371ff11192092a0aeace12b671f4c212f2815c6fea0000000000000000000000000000000000000000000000000000000000000235aa0000000000000000000000000e8c84a631d71e1bb7083d3a82a3a74870a286b97a0191ae0366d4470dec94ac0ad040496453fecc903ffbad13da54e39498f84b0ff","0x02f9010a01840100f0f6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f9010a0184010158f2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f9010a01840101d1feb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f9010a0184010239f6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f9010a01840102a1f2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f90365018401048fdfb9010000000002000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000020000000000000002000000000000000000800000008000000000000040000000000000000002000000000000000000000000000100000000200000000000000200000000010000800000000000000000000000008000000000000000000000000000000000000000004000000000000000000000000800000000000000000000008000000002000000000000002000000000000000000000000000000000000800000000400000000000000000000002000000000000000000000004000000000000000000000000200f90259f89b948f6d296024766b919473f0ef3b1f7addd3f710dff863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa00000000000000000000000003dd070f9ee183bd667700d668b35b8932438118ea0000000000000000000000000f2ce1c36503401e5fcdecb17b53ac20939ac05d6a000000000000000000000000000000000000000000000000000000000000004d6f89b94d87ba7a50b2e7e660f678a895e4b72e7cb4ccd9cf863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa0000000000000000000000000f2ce1c36503401e5fcdecb17b53ac20939ac05d6a00000000000000000000000003dd070f9ee183bd667700d668b35b8932438118ea00000000000000000000000000000000000000000000000000000000000550ab9f9011c943dd070f9ee183bd667700d668b35b8932438118ef863a0c42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67a0000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564a0000000000000000000000000f2ce1c36503401e5fcdecb17b53ac20939ac05d6b8a0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2a0000000000000000000000000000000000000000000000000000000000550ab90000000000000000000000000000000000000042fb2bb8fcdc72e6c302336a2800000000000000000000000000000000000000000000000000000000609fce5a000000000000000000000000000000000000000000000000000000000001487c","0x02f9010a01840105994fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f9010a01840106126bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0xf9018601840106f418b9010000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000001000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000010f87bf87994b33a774f60c3eeea880c09bd56f18def648f8fbbe1a0b78ebc573f1f889ca9e1e0fb62c843c836f3d3a2e1f43ef62940e9b894f4ea4cb8400000000000000000000000000000000000000000000000000e507b8392b34d0000000000000000000000000000000000000000000000000000000000652d2a70","0x02f9010a018401075be8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f901c901840108af12b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000100000000000000040000000000000000000000000000000000000000000000020000000000000000000000000000000000080000000100000000000000000000000000000000000000200000000000000000000000000000000000000004000020000800000000000000000000000000000000000000000000000000000000000000000000000000002000400000000000000000000000000000000000040000000000000000000001000000000000000000000000000000000000000000040000f8bef8bc943f97a3e25166de26eef93ad91e382215b21fecf7f884a0a7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e2a048f9d6c5064b083c5c5f17c6f18f8ac529863c506fc2d65b5ebb26571dfa1ec0a00000000000000000000000000000000000000000000000000000000000007097a0000000000000000000000000000000000000000000000000000000000034c740a000000000000000000000000000000000000000000000000000000000652d2a70","0x02f9010a01840109284ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f9010a01840109a406b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f9010a0184010a1d2eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f9010a0184010a8536b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f9010a0184010aead2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f9010a0184010b52b2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f9010a0184010bc95ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0x02f9010a0184010c428ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0","0xf901a80184010cc606b9010000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000080000000000000020000000000000000000800000000000000000000000010000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000040001000000000000000000000000000000000000000002000000008000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000f89df89b94ccb2505976e9d2fd355c73c3f1a004446d1dfedaf863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa0000000000000000000000000c813edb526830d24a2ce5801d9ef5026a3967529a00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000a"]} diff --git a/proxyd/tools/mockserver/node2.yml b/proxyd/tools/mockserver/node2.yml deleted file mode 100644 index b94ee7af25b6..000000000000 --- a/proxyd/tools/mockserver/node2.yml +++ /dev/null @@ -1,44 +0,0 @@ -- method: eth_getBlockByNumber - block: latest - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash2", - "number": "0x2" - } - } -- method: eth_getBlockByNumber - block: 0x1 - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash1", - "number": "0x1" - } - } -- method: eth_getBlockByNumber - block: 0x2 - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash2", - "number": "0x2" - } - } -- method: eth_getBlockByNumber - block: 0x3 - response: > - { - "jsonrpc": "2.0", - "id": 67, - "result": { - "hash": "hash3", - "number": "0x3" - } - } \ No newline at end of file From 5843583a363d031ece7ad4fbe0f84264296c36b2 Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Fri, 14 Jun 2024 17:40:10 -0400 Subject: [PATCH 047/141] dispute-mon: Add metric to report the total withdrawable ETH for each honest actor (#10838) --- op-dispute-mon/metrics/metrics.go | 18 ++++++- op-dispute-mon/metrics/noop.go | 2 + op-dispute-mon/mon/bonds/monitor.go | 28 ++++++++--- op-dispute-mon/mon/bonds/monitor_test.go | 59 ++++++++++++++++++----- op-dispute-mon/mon/claims.go | 10 ++-- op-dispute-mon/mon/claims_test.go | 4 +- op-dispute-mon/mon/service.go | 19 +++++--- op-dispute-mon/mon/types/honest_actors.go | 17 +++++++ 8 files changed, 121 insertions(+), 36 deletions(-) create mode 100644 op-dispute-mon/mon/types/honest_actors.go diff --git a/op-dispute-mon/metrics/metrics.go b/op-dispute-mon/metrics/metrics.go index a119766c44e1..1fb196f157a4 100644 --- a/op-dispute-mon/metrics/metrics.go +++ b/op-dispute-mon/metrics/metrics.go @@ -163,6 +163,8 @@ type Metricer interface { RecordCredit(expectation CreditExpectation, count int) + RecordHonestWithdrawableAmounts(map[common.Address]*big.Int) + RecordClaims(statuses *ClaimStatuses) RecordWithdrawalRequests(delayedWeth common.Address, matches bool, count int) @@ -208,7 +210,8 @@ type Metrics struct { info prometheus.GaugeVec up prometheus.Gauge - credits prometheus.GaugeVec + credits prometheus.GaugeVec + honestWithdrawableAmounts prometheus.GaugeVec lastOutputFetch prometheus.Gauge @@ -295,6 +298,13 @@ func NewMetrics() *Metrics { "credit", "withdrawable", }), + honestWithdrawableAmounts: *factory.NewGaugeVec(prometheus.GaugeOpts{ + Namespace: Namespace, + Name: "honest_actor_pending_withdrawals", + Help: "Current amount of withdrawable ETH for an honest actor", + }, []string{ + "actor", + }), claims: *factory.NewGaugeVec(prometheus.GaugeOpts{ Namespace: Namespace, Name: "claims", @@ -453,6 +463,12 @@ func (m *Metrics) RecordCredit(expectation CreditExpectation, count int) { m.credits.WithLabelValues(asLabels(expectation)...).Set(float64(count)) } +func (m *Metrics) RecordHonestWithdrawableAmounts(amounts map[common.Address]*big.Int) { + for addr, amount := range amounts { + m.honestWithdrawableAmounts.WithLabelValues(addr.Hex()).Set(weiToEther(amount)) + } +} + func (m *Metrics) RecordClaims(statuses *ClaimStatuses) { statuses.ForEachStatus(func(status ClaimStatus, count int) { m.claims.WithLabelValues(status.AsLabels()...).Set(float64(count)) diff --git a/op-dispute-mon/metrics/noop.go b/op-dispute-mon/metrics/noop.go index 7fe2f15b817a..a136e99457aa 100644 --- a/op-dispute-mon/metrics/noop.go +++ b/op-dispute-mon/metrics/noop.go @@ -28,6 +28,8 @@ func (*NoopMetricsImpl) RecordGameResolutionStatus(_ ResolutionStatus, _ int) {} func (*NoopMetricsImpl) RecordCredit(_ CreditExpectation, _ int) {} +func (*NoopMetricsImpl) RecordHonestWithdrawableAmounts(map[common.Address]*big.Int) {} + func (*NoopMetricsImpl) RecordClaims(_ *ClaimStatuses) {} func (*NoopMetricsImpl) RecordWithdrawalRequests(_ common.Address, _ bool, _ int) {} diff --git a/op-dispute-mon/mon/bonds/monitor.go b/op-dispute-mon/mon/bonds/monitor.go index 2ce23dc472e7..efa7804d3408 100644 --- a/op-dispute-mon/mon/bonds/monitor.go +++ b/op-dispute-mon/mon/bonds/monitor.go @@ -17,19 +17,22 @@ type RClock interface { type BondMetrics interface { RecordCredit(expectation metrics.CreditExpectation, count int) RecordBondCollateral(addr common.Address, required *big.Int, available *big.Int) + RecordHonestWithdrawableAmounts(map[common.Address]*big.Int) } type Bonds struct { - logger log.Logger - clock RClock - metrics BondMetrics + logger log.Logger + clock RClock + metrics BondMetrics + honestActors types.HonestActors } -func NewBonds(logger log.Logger, metrics BondMetrics, clock RClock) *Bonds { +func NewBonds(logger log.Logger, metrics BondMetrics, honestActors types.HonestActors, clock RClock) *Bonds { return &Bonds{ - logger: logger, - clock: clock, - metrics: metrics, + logger: logger, + clock: clock, + metrics: metrics, + honestActors: honestActors, } } @@ -47,6 +50,10 @@ func (b *Bonds) CheckBonds(games []*types.EnrichedGameData) { func (b *Bonds) checkCredits(games []*types.EnrichedGameData) { creditMetrics := make(map[metrics.CreditExpectation]int) + honestWithdrawableAmounts := make(map[common.Address]*big.Int) + for address := range b.honestActors { + honestWithdrawableAmounts[address] = big.NewInt(0) + } for _, game := range games { // Check if the max duration has been reached for this game @@ -94,6 +101,12 @@ func (b *Bonds) checkCredits(games []*types.EnrichedGameData) { } comparison := actual.Cmp(expected) if maxDurationReached { + if actual.Cmp(big.NewInt(0)) > 0 && b.honestActors.Contains(recipient) { + total := honestWithdrawableAmounts[recipient] + total = new(big.Int).Add(total, actual) + honestWithdrawableAmounts[recipient] = total + b.logger.Warn("Found unclaimed credit", "recipient", recipient, "game", game.Proxy, "amount", actual) + } if comparison > 0 { creditMetrics[metrics.CreditAboveWithdrawable] += 1 b.logger.Warn("Credit above expected amount", "recipient", recipient, "expected", expected, "actual", actual, "game", game.Proxy, "withdrawable", "withdrawable") @@ -123,4 +136,5 @@ func (b *Bonds) checkCredits(games []*types.EnrichedGameData) { b.metrics.RecordCredit(metrics.CreditBelowNonWithdrawable, creditMetrics[metrics.CreditBelowNonWithdrawable]) b.metrics.RecordCredit(metrics.CreditEqualNonWithdrawable, creditMetrics[metrics.CreditEqualNonWithdrawable]) b.metrics.RecordCredit(metrics.CreditAboveNonWithdrawable, creditMetrics[metrics.CreditAboveNonWithdrawable]) + b.metrics.RecordHonestWithdrawableAmounts(honestWithdrawableAmounts) } diff --git a/op-dispute-mon/mon/bonds/monitor_test.go b/op-dispute-mon/mon/bonds/monitor_test.go index 311dc6ce4d96..5fd766b87061 100644 --- a/op-dispute-mon/mon/bonds/monitor_test.go +++ b/op-dispute-mon/mon/bonds/monitor_test.go @@ -17,7 +17,10 @@ import ( ) var ( - frozen = time.Unix(int64(time.Hour.Seconds()), 0) + frozen = time.Unix(int64(time.Hour.Seconds()), 0) + honestActor1 = common.Address{0x11, 0xaa} + honestActor2 = common.Address{0x22, 0xbb} + honestActor3 = common.Address{0x33, 0xcc} ) func TestCheckBonds(t *testing.T) { @@ -61,8 +64,8 @@ func TestCheckBonds(t *testing.T) { } func TestCheckRecipientCredit(t *testing.T) { - addr1 := common.Address{0x1a} - addr2 := common.Address{0x2b} + addr1 := honestActor1 + addr2 := honestActor2 addr3 := common.Address{0x3c} addr4 := common.Address{0x4d} notRootPosition := types.NewPositionFromGIndex(big.NewInt(2)) @@ -273,7 +276,7 @@ func TestCheckRecipientCredit(t *testing.T) { MaxClockDuration: 10, WETHDelay: 10 * time.Second, GameMetadata: gameTypes.GameMetadata{ - Proxy: common.Address{44}, + Proxy: common.Address{0x44}, Timestamp: uint64(frozen.Unix()) - 22, }, BlockNumberChallenged: true, @@ -346,6 +349,14 @@ func TestCheckRecipientCredit(t *testing.T) { require.Equal(t, 2, m.credits[metrics.CreditEqualNonWithdrawable], "CreditEqualNonWithdrawable") require.Equal(t, 2, m.credits[metrics.CreditAboveNonWithdrawable], "CreditAboveNonWithdrawable") + require.Len(t, m.honestWithdrawable, 3) + requireBigInt := func(name string, expected, actual *big.Int) { + require.Truef(t, expected.Cmp(actual) == 0, "Expected %v withdrawable to be %v but was %v", name, expected, actual) + } + requireBigInt("honest addr1", m.honestWithdrawable[addr1], big.NewInt(19)) + requireBigInt("honest addr2", m.honestWithdrawable[addr2], big.NewInt(13)) + requireBigInt("honest addr3", m.honestWithdrawable[honestActor3], big.NewInt(0)) + // Logs from game1 // addr1 is correct so has no logs // addr2 is below expected before max duration, so warn about early withdrawal @@ -371,8 +382,18 @@ func TestCheckRecipientCredit(t *testing.T) { testlog.NewAttributesFilter("withdrawable", "non_withdrawable"))) // Logs from game 2 - // addr1 is below expected - no warning as withdrawals may now be possible - // addr2 is correct + // addr1 is below expected - no warning as withdrawals may now be possible, but has unclaimed credit + require.NotNil(t, logs.FindLog( + testlog.NewLevelFilter(log.LevelWarn), + testlog.NewMessageFilter("Found unclaimed credit"), + testlog.NewAttributesFilter("game", game2.Proxy.Hex()), + testlog.NewAttributesFilter("recipient", addr1.Hex()))) + // addr2 is correct but has unclaimed credit + require.NotNil(t, logs.FindLog( + testlog.NewLevelFilter(log.LevelWarn), + testlog.NewMessageFilter("Found unclaimed credit"), + testlog.NewAttributesFilter("game", game2.Proxy.Hex()), + testlog.NewAttributesFilter("recipient", addr2.Hex()))) // addr3 is above expected - warn require.NotNil(t, logs.FindLog( testlog.NewLevelFilter(log.LevelWarn), @@ -401,8 +422,18 @@ func TestCheckRecipientCredit(t *testing.T) { testlog.NewAttributesFilter("withdrawable", "non_withdrawable"))) // Logs from game 4 - // addr1 is correct so has no logs - // addr2 is below expected before max duration, no long because withdrawals may be possible + // addr1 is correct but has unclaimed credit + require.NotNil(t, logs.FindLog( + testlog.NewLevelFilter(log.LevelWarn), + testlog.NewMessageFilter("Found unclaimed credit"), + testlog.NewAttributesFilter("game", game4.Proxy.Hex()), + testlog.NewAttributesFilter("recipient", addr1.Hex()))) + // addr2 is below expected before max duration, no log because withdrawals may be possible but warn about unclaimed + require.NotNil(t, logs.FindLog( + testlog.NewLevelFilter(log.LevelWarn), + testlog.NewMessageFilter("Found unclaimed credit"), + testlog.NewAttributesFilter("game", game4.Proxy.Hex()), + testlog.NewAttributesFilter("recipient", addr2.Hex()))) // addr3 is not involved so no logs // addr4 is above expected before max duration, so warn require.NotNil(t, logs.FindLog( @@ -419,13 +450,19 @@ func setupBondMetricsTest(t *testing.T) (*Bonds, *stubBondMetrics, *testlog.Capt credits: make(map[metrics.CreditExpectation]int), recorded: make(map[common.Address]Collateral), } - bonds := NewBonds(logger, metrics, clock.NewDeterministicClock(frozen)) + honestActors := monTypes.NewHonestActors([]common.Address{honestActor1, honestActor2, honestActor3}) + bonds := NewBonds(logger, metrics, honestActors, clock.NewDeterministicClock(frozen)) return bonds, metrics, logs } type stubBondMetrics struct { - credits map[metrics.CreditExpectation]int - recorded map[common.Address]Collateral + credits map[metrics.CreditExpectation]int + recorded map[common.Address]Collateral + honestWithdrawable map[common.Address]*big.Int +} + +func (s *stubBondMetrics) RecordHonestWithdrawableAmounts(values map[common.Address]*big.Int) { + s.honestWithdrawable = values } func (s *stubBondMetrics) RecordBondCollateral(addr common.Address, required *big.Int, available *big.Int) { diff --git a/op-dispute-mon/mon/claims.go b/op-dispute-mon/mon/claims.go index 2789ef4e6dc9..4a5d99b61127 100644 --- a/op-dispute-mon/mon/claims.go +++ b/op-dispute-mon/mon/claims.go @@ -25,16 +25,12 @@ type ClaimMetrics interface { type ClaimMonitor struct { logger log.Logger clock RClock - honestActors map[common.Address]bool // Map for efficient lookup + honestActors types.HonestActors metrics ClaimMetrics } -func NewClaimMonitor(logger log.Logger, clock RClock, honestActors []common.Address, metrics ClaimMetrics) *ClaimMonitor { - actors := make(map[common.Address]bool) - for _, actor := range honestActors { - actors[actor] = true - } - return &ClaimMonitor{logger, clock, actors, metrics} +func NewClaimMonitor(logger log.Logger, clock RClock, honestActors types.HonestActors, metrics ClaimMetrics) *ClaimMonitor { + return &ClaimMonitor{logger, clock, honestActors, metrics} } func (c *ClaimMonitor) CheckClaims(games []*types.EnrichedGameData) { diff --git a/op-dispute-mon/mon/claims_test.go b/op-dispute-mon/mon/claims_test.go index d5e9578e4f05..3491eb1a779e 100644 --- a/op-dispute-mon/mon/claims_test.go +++ b/op-dispute-mon/mon/claims_test.go @@ -194,10 +194,10 @@ func newTestClaimMonitor(t *testing.T) (*ClaimMonitor, *clock.DeterministicClock logger, handler := testlog.CaptureLogger(t, log.LvlInfo) cl := clock.NewDeterministicClock(frozen) metrics := &stubClaimMetrics{} - honestActors := []common.Address{ + honestActors := types.NewHonestActors([]common.Address{ {0x01}, {0x02}, - } + }) monitor := NewClaimMonitor(logger, cl, honestActors, metrics) return monitor, cl, metrics, handler } diff --git a/op-dispute-mon/mon/service.go b/op-dispute-mon/mon/service.go index f8df6132f095..e637b23d63b0 100644 --- a/op-dispute-mon/mon/service.go +++ b/op-dispute-mon/mon/service.go @@ -8,6 +8,7 @@ import ( "sync/atomic" "github.com/ethereum-optimism/optimism/op-dispute-mon/mon/bonds" + "github.com/ethereum-optimism/optimism/op-dispute-mon/mon/types" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" @@ -28,9 +29,10 @@ import ( ) type Service struct { - logger log.Logger - metrics metrics.Metricer - monitor *gameMonitor + logger log.Logger + metrics metrics.Metricer + monitor *gameMonitor + honestActors types.HonestActors factoryContract *contracts.DisputeGameFactoryContract @@ -56,9 +58,10 @@ type Service struct { // NewService creates a new Service. func NewService(ctx context.Context, logger log.Logger, cfg *config.Config) (*Service, error) { s := &Service{ - cl: clock.SystemClock, - logger: logger, - metrics: metrics.NewMetrics(), + cl: clock.SystemClock, + logger: logger, + metrics: metrics.NewMetrics(), + honestActors: types.NewHonestActors(cfg.HonestActors), } if err := s.initFromConfig(ctx, cfg); err != nil { @@ -105,7 +108,7 @@ func (s *Service) initFromConfig(ctx context.Context, cfg *config.Config) error } func (s *Service) initClaimMonitor(cfg *config.Config) { - s.claims = NewClaimMonitor(s.logger, s.cl, cfg.HonestActors, s.metrics) + s.claims = NewClaimMonitor(s.logger, s.cl, s.honestActors, s.metrics) } func (s *Service) initResolutionMonitor() { @@ -142,7 +145,7 @@ func (s *Service) initForecast(cfg *config.Config) { } func (s *Service) initBonds() { - s.bonds = bonds.NewBonds(s.logger, s.metrics, s.cl) + s.bonds = bonds.NewBonds(s.logger, s.metrics, s.honestActors, s.cl) } func (s *Service) initOutputRollupClient(ctx context.Context, cfg *config.Config) error { diff --git a/op-dispute-mon/mon/types/honest_actors.go b/op-dispute-mon/mon/types/honest_actors.go new file mode 100644 index 000000000000..31398dfcbd82 --- /dev/null +++ b/op-dispute-mon/mon/types/honest_actors.go @@ -0,0 +1,17 @@ +package types + +import "github.com/ethereum/go-ethereum/common" + +type HonestActors map[common.Address]bool // Map for efficient lookup + +func NewHonestActors(honestActors []common.Address) HonestActors { + actors := make(map[common.Address]bool) + for _, actor := range honestActors { + actors[actor] = true + } + return actors +} + +func (h HonestActors) Contains(addr common.Address) bool { + return h[addr] +} From 0fb2bb18157572d337d61d475e324ebaf6f7c66f Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Sat, 15 Jun 2024 13:02:32 -0400 Subject: [PATCH 048/141] proposer: Log when starting to propose (#10839) Also fix capitalisation of log messages. --- op-proposer/proposer/driver.go | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/op-proposer/proposer/driver.go b/op-proposer/proposer/driver.go index 5160d0aa242b..52122e3cfd4e 100644 --- a/op-proposer/proposer/driver.go +++ b/op-proposer/proposer/driver.go @@ -223,7 +223,7 @@ func (l *L2OutputSubmitter) FetchNextOutputInfo(ctx context.Context) (*eth.Outpu } nextCheckpointBlock, err := l.l2ooContract.NextBlockNumber(callOpts) if err != nil { - l.Log.Error("proposer unable to get next block number", "err", err) + l.Log.Error("Proposer unable to get next block number", "err", err) return nil, false, err } // Fetch the current L2 heads @@ -234,7 +234,7 @@ func (l *L2OutputSubmitter) FetchNextOutputInfo(ctx context.Context) (*eth.Outpu // Ensure that we do not submit a block in the future if currentBlockNumber.Cmp(nextCheckpointBlock) < 0 { - l.Log.Debug("proposer submission interval has not elapsed", "currentBlockNumber", currentBlockNumber, "nextBlockNumber", nextCheckpointBlock) + l.Log.Debug("Proposer submission interval has not elapsed", "currentBlockNumber", currentBlockNumber, "nextBlockNumber", nextCheckpointBlock) return nil, false, nil } @@ -246,7 +246,7 @@ func (l *L2OutputSubmitter) FetchNextOutputInfo(ctx context.Context) (*eth.Outpu func (l *L2OutputSubmitter) FetchCurrentBlockNumber(ctx context.Context) (*big.Int, error) { rollupClient, err := l.RollupProvider.RollupClient(ctx) if err != nil { - l.Log.Error("proposer unable to get rollup client", "err", err) + l.Log.Error("Proposer unable to get rollup client", "err", err) return nil, err } @@ -255,7 +255,7 @@ func (l *L2OutputSubmitter) FetchCurrentBlockNumber(ctx context.Context) (*big.I status, err := rollupClient.SyncStatus(cCtx) if err != nil { - l.Log.Error("proposer unable to get sync status", "err", err) + l.Log.Error("Proposer unable to get sync status", "err", err) return nil, err } @@ -272,7 +272,7 @@ func (l *L2OutputSubmitter) FetchCurrentBlockNumber(ctx context.Context) (*big.I func (l *L2OutputSubmitter) FetchOutput(ctx context.Context, block *big.Int) (*eth.OutputResponse, bool, error) { rollupClient, err := l.RollupProvider.RollupClient(ctx) if err != nil { - l.Log.Error("proposer unable to get rollup client", "err", err) + l.Log.Error("Proposer unable to get rollup client", "err", err) return nil, false, err } @@ -281,21 +281,21 @@ func (l *L2OutputSubmitter) FetchOutput(ctx context.Context, block *big.Int) (*e output, err := rollupClient.OutputAtBlock(cCtx, block.Uint64()) if err != nil { - l.Log.Error("failed to fetch output at block", "block", block, "err", err) + l.Log.Error("Failed to fetch output at block", "block", block, "err", err) return nil, false, err } if output.Version != supportedL2OutputVersion { - l.Log.Error("unsupported l2 output version", "output_version", output.Version, "supported_version", supportedL2OutputVersion) + l.Log.Error("Unsupported l2 output version", "output_version", output.Version, "supported_version", supportedL2OutputVersion) return nil, false, errors.New("unsupported l2 output version") } if output.BlockRef.Number != block.Uint64() { // sanity check, e.g. in case of bad RPC caching - l.Log.Error("invalid blockNumber", "next_block", block, "output_block", output.BlockRef.Number) + l.Log.Error("Invalid blockNumber", "next_block", block, "output_block", output.BlockRef.Number) return nil, false, errors.New("invalid blockNumber") } // Always propose if it's part of the Finalized L2 chain. Or if allowed, if it's part of the safe L2 chain. if output.BlockRef.Number > output.Status.FinalizedL2.Number && (!l.Cfg.AllowNonFinalized || output.BlockRef.Number > output.Status.SafeL2.Number) { - l.Log.Debug("not proposing yet, L2 block is not ready for proposal", + l.Log.Debug("Not proposing yet, L2 block is not ready for proposal", "l2_proposal", output.BlockRef, "l2_safe", output.Status.SafeL2, "l2_finalized", output.Status.FinalizedL2, @@ -351,7 +351,7 @@ func (l *L2OutputSubmitter) waitForL1Head(ctx context.Context, blockNum uint64) return err } for l1head <= blockNum { - l.Log.Debug("waiting for l1 head > l1blocknum1+1", "l1head", l1head, "l1blocknum", blockNum) + l.Log.Debug("Waiting for l1 head > l1blocknum1+1", "l1head", l1head, "l1blocknum", blockNum) select { case <-ticker.C: l1head, err = l.Txmgr.BlockNumber(ctx) @@ -372,6 +372,7 @@ func (l *L2OutputSubmitter) sendTransaction(ctx context.Context, output *eth.Out return err } + l.Log.Info("Proposing output root", "output", output.OutputRoot, "block", output.BlockRef) var receipt *types.Receipt if l.Cfg.DisputeGameFactoryAddr != nil { data, bond, err := l.ProposeL2OutputDGFTxData(output) @@ -403,9 +404,9 @@ func (l *L2OutputSubmitter) sendTransaction(ctx context.Context, output *eth.Out } if receipt.Status == types.ReceiptStatusFailed { - l.Log.Error("proposer tx successfully published but reverted", "tx_hash", receipt.TxHash) + l.Log.Error("Proposer tx successfully published but reverted", "tx_hash", receipt.TxHash) } else { - l.Log.Info("proposer tx successfully published", + l.Log.Info("Proposer tx successfully published", "tx_hash", receipt.TxHash, "l1blocknum", output.Status.CurrentL1.Number, "l1blockhash", output.Status.CurrentL1.Hash) From 698c89494bf3e73499613f76087180d79d7f6c88 Mon Sep 17 00:00:00 2001 From: amber guru Date: Sun, 16 Jun 2024 05:14:26 +0800 Subject: [PATCH 049/141] proposer&batcher: Log fix (#10840) * bathcer driver log cap fixed * batcher service log fix * proposer service log cap fix --- op-batcher/batcher/driver.go | 22 +++++++++++----------- op-batcher/batcher/service.go | 6 +++--- op-proposer/proposer/service.go | 6 +++--- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/op-batcher/batcher/driver.go b/op-batcher/batcher/driver.go index 8d8e73bee2b4..663d2a86af3f 100644 --- a/op-batcher/batcher/driver.go +++ b/op-batcher/batcher/driver.go @@ -167,7 +167,7 @@ func (l *BatchSubmitter) loadBlocksIntoState(ctx context.Context) error { l.lastStoredBlock = eth.BlockID{} return err } else if err != nil { - l.Log.Warn("failed to load block into state", "err", err) + l.Log.Warn("Failed to load block into state", "err", err) return err } l.lastStoredBlock = eth.ToBlockID(block) @@ -203,7 +203,7 @@ func (l *BatchSubmitter) loadBlockIntoState(ctx context.Context, blockNumber uin return nil, fmt.Errorf("adding L2 block to state: %w", err) } - l.Log.Info("added L2 block to local state", "block", eth.ToBlockID(block), "tx_count", len(block.Transactions()), "time", block.Time()) + l.Log.Info("Added L2 block to local state", "block", eth.ToBlockID(block), "tx_count", len(block.Transactions()), "time", block.Time()) return block, nil } @@ -233,7 +233,7 @@ func (l *BatchSubmitter) calculateL2BlockRangeToStore(ctx context.Context) (eth. l.Log.Info("Starting batch-submitter work at safe-head", "safe", syncStatus.SafeL2) l.lastStoredBlock = syncStatus.SafeL2.ID() } else if l.lastStoredBlock.Number < syncStatus.SafeL2.Number { - l.Log.Warn("last submitted block lagged behind L2 safe head: batch submission will continue from the safe head now", "last", l.lastStoredBlock, "safe", syncStatus.SafeL2) + l.Log.Warn("Last submitted block lagged behind L2 safe head: batch submission will continue from the safe head now", "last", l.lastStoredBlock, "safe", syncStatus.SafeL2) l.lastStoredBlock = syncStatus.SafeL2.ID() } @@ -276,10 +276,10 @@ func (l *BatchSubmitter) loop() { for { select { case r := <-receiptsCh: - l.Log.Info("handling receipt", "id", r.ID) + l.Log.Info("Handling receipt", "id", r.ID) l.handleReceipt(r) case <-receiptLoopDone: - l.Log.Info("receipt processing loop done") + l.Log.Info("Receipt processing loop done") return } } @@ -382,7 +382,7 @@ func (l *BatchSubmitter) publishStateToL1(queue *txmgr.Queue[txID], receiptsCh c err := l.publishTxToL1(l.killCtx, queue, receiptsCh) if err != nil { if err != io.EOF { - l.Log.Error("error publishing tx to l1", "err", err) + l.Log.Error("Error publishing tx to l1", "err", err) } return } @@ -442,10 +442,10 @@ func (l *BatchSubmitter) publishTxToL1(ctx context.Context, queue *txmgr.Queue[t txdata, err := l.state.TxData(l1tip.ID()) if err == io.EOF { - l.Log.Trace("no transaction data available") + l.Log.Trace("No transaction data available") return err } else if err != nil { - l.Log.Error("unable to get tx data", "err", err) + l.Log.Error("Unable to get tx data", "err", err) return err } @@ -497,7 +497,7 @@ func (l *BatchSubmitter) sendTransaction(ctx context.Context, txdata txData, que } else { // sanity check if nf := len(txdata.frames); nf != 1 { - l.Log.Crit("unexpected number of frames in calldata tx", "num_frames", nf) + l.Log.Crit("Unexpected number of frames in calldata tx", "num_frames", nf) } data := txdata.CallData() // if plasma DA is enabled we post the txdata to the DA Provider and replace it with the commitment. @@ -534,7 +534,7 @@ func (l *BatchSubmitter) blobTxCandidate(data txData) (*txmgr.TxCandidate, error } size := data.Len() lastSize := len(data.frames[len(data.frames)-1].data) - l.Log.Info("building Blob transaction candidate", + l.Log.Info("Building Blob transaction candidate", "size", size, "last_size", lastSize, "num_blobs", len(blobs)) l.Metr.RecordBlobUsedBytes(lastSize) return &txmgr.TxCandidate{ @@ -544,7 +544,7 @@ func (l *BatchSubmitter) blobTxCandidate(data txData) (*txmgr.TxCandidate, error } func (l *BatchSubmitter) calldataTxCandidate(data []byte) *txmgr.TxCandidate { - l.Log.Info("building Calldata transaction candidate", "size", len(data)) + l.Log.Info("Building Calldata transaction candidate", "size", len(data)) return &txmgr.TxCandidate{ To: &l.RollupConfig.BatchInboxAddress, TxData: data, diff --git a/op-batcher/batcher/service.go b/op-batcher/batcher/service.go index a7d6b3273ae7..1c35c1c4ea25 100644 --- a/op-batcher/batcher/service.go +++ b/op-batcher/batcher/service.go @@ -282,19 +282,19 @@ func (bs *BatcherService) initPProf(cfg *CLIConfig) error { func (bs *BatcherService) initMetricsServer(cfg *CLIConfig) error { if !cfg.MetricsConfig.Enabled { - bs.Log.Info("metrics disabled") + bs.Log.Info("Metrics disabled") return nil } m, ok := bs.Metrics.(opmetrics.RegistryMetricer) if !ok { return fmt.Errorf("metrics were enabled, but metricer %T does not expose registry for metrics-server", bs.Metrics) } - bs.Log.Debug("starting metrics server", "addr", cfg.MetricsConfig.ListenAddr, "port", cfg.MetricsConfig.ListenPort) + bs.Log.Debug("Starting metrics server", "addr", cfg.MetricsConfig.ListenAddr, "port", cfg.MetricsConfig.ListenPort) metricsSrv, err := opmetrics.StartServer(m.Registry(), cfg.MetricsConfig.ListenAddr, cfg.MetricsConfig.ListenPort) if err != nil { return fmt.Errorf("failed to start metrics server: %w", err) } - bs.Log.Info("started metrics server", "addr", metricsSrv.Addr()) + bs.Log.Info("Started metrics server", "addr", metricsSrv.Addr()) bs.metricsSrv = metricsSrv return nil } diff --git a/op-proposer/proposer/service.go b/op-proposer/proposer/service.go index 0e5012d1ab85..f40fdf0b496a 100644 --- a/op-proposer/proposer/service.go +++ b/op-proposer/proposer/service.go @@ -186,19 +186,19 @@ func (ps *ProposerService) initPProf(cfg *CLIConfig) error { func (ps *ProposerService) initMetricsServer(cfg *CLIConfig) error { if !cfg.MetricsConfig.Enabled { - ps.Log.Info("metrics disabled") + ps.Log.Info("Metrics disabled") return nil } m, ok := ps.Metrics.(opmetrics.RegistryMetricer) if !ok { return fmt.Errorf("metrics were enabled, but metricer %T does not expose registry for metrics-server", ps.Metrics) } - ps.Log.Debug("starting metrics server", "addr", cfg.MetricsConfig.ListenAddr, "port", cfg.MetricsConfig.ListenPort) + ps.Log.Debug("Starting metrics server", "addr", cfg.MetricsConfig.ListenAddr, "port", cfg.MetricsConfig.ListenPort) metricsSrv, err := opmetrics.StartServer(m.Registry(), cfg.MetricsConfig.ListenAddr, cfg.MetricsConfig.ListenPort) if err != nil { return fmt.Errorf("failed to start metrics server: %w", err) } - ps.Log.Info("started metrics server", "addr", metricsSrv.Addr()) + ps.Log.Info("Started metrics server", "addr", metricsSrv.Addr()) ps.metricsSrv = metricsSrv return nil } From 71b93116738ee98c9f8713b1a5dfe626ce06c1b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 16 Jun 2024 18:12:56 -0600 Subject: [PATCH 050/141] dependabot(gomod): bump github.com/klauspost/compress (#10836) Bumps [github.com/klauspost/compress](https://github.com/klauspost/compress) from 1.17.8 to 1.17.9. - [Release notes](https://github.com/klauspost/compress/releases) - [Changelog](https://github.com/klauspost/compress/blob/master/.goreleaser.yml) - [Commits](https://github.com/klauspost/compress/compare/v1.17.8...v1.17.9) --- updated-dependencies: - dependency-name: github.com/klauspost/compress dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 9b757e72dad1..e78b29fef46e 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,7 @@ require ( github.com/holiman/uint256 v1.2.4 github.com/ipfs/go-datastore v0.6.0 github.com/ipfs/go-ds-leveldb v0.5.0 - github.com/klauspost/compress v1.17.8 + github.com/klauspost/compress v1.17.9 github.com/libp2p/go-libp2p v0.35.0 github.com/libp2p/go-libp2p-mplex v0.9.0 github.com/libp2p/go-libp2p-pubsub v0.11.0 diff --git a/go.sum b/go.sum index 26cbdc69a97d..5bc10f2835c6 100644 --- a/go.sum +++ b/go.sum @@ -389,8 +389,8 @@ github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQL github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= -github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= From 9147c6e908905815fae03595bc8bebc2f40d1ad7 Mon Sep 17 00:00:00 2001 From: Brian Bland Date: Mon, 17 Jun 2024 06:40:22 -0700 Subject: [PATCH 051/141] op-conductor: Better context management, graceful shutdown (#10804) --- op-conductor/conductor/service.go | 2 +- op-conductor/conductor/service_test.go | 2 +- op-conductor/health/mocks/HealthMonitor.go | 27 +++++++++++++--------- op-conductor/health/monitor.go | 25 ++++++++++---------- op-conductor/health/monitor_test.go | 8 +++---- 5 files changed, 35 insertions(+), 29 deletions(-) diff --git a/op-conductor/conductor/service.go b/op-conductor/conductor/service.go index 02c46a468bc7..217b76b1fdd2 100644 --- a/op-conductor/conductor/service.go +++ b/op-conductor/conductor/service.go @@ -311,7 +311,7 @@ var _ cliapp.Lifecycle = (*OpConductor)(nil) func (oc *OpConductor) Start(ctx context.Context) error { oc.log.Info("starting OpConductor") - if err := oc.hmon.Start(); err != nil { + if err := oc.hmon.Start(ctx); err != nil { return errors.Wrap(err, "failed to start health monitor") } diff --git a/op-conductor/conductor/service_test.go b/op-conductor/conductor/service_test.go index f6d84d6db5fc..4e19925baa4b 100644 --- a/op-conductor/conductor/service_test.go +++ b/op-conductor/conductor/service_test.go @@ -122,7 +122,7 @@ func (s *OpConductorTestSuite) SetupTest() { s.conductor = conductor s.healthUpdateCh = make(chan error, 1) - s.hmon.EXPECT().Start().Return(nil) + s.hmon.EXPECT().Start(mock.Anything).Return(nil) s.conductor.healthUpdateCh = s.healthUpdateCh s.leaderUpdateCh = make(chan bool, 1) diff --git a/op-conductor/health/mocks/HealthMonitor.go b/op-conductor/health/mocks/HealthMonitor.go index de85b716f739..0cc61c62a9d4 100644 --- a/op-conductor/health/mocks/HealthMonitor.go +++ b/op-conductor/health/mocks/HealthMonitor.go @@ -2,7 +2,11 @@ package mocks -import mock "github.com/stretchr/testify/mock" +import ( + context "context" + + mock "github.com/stretchr/testify/mock" +) // HealthMonitor is an autogenerated mock type for the HealthMonitor type type HealthMonitor struct { @@ -17,17 +21,17 @@ func (_m *HealthMonitor) EXPECT() *HealthMonitor_Expecter { return &HealthMonitor_Expecter{mock: &_m.Mock} } -// Start provides a mock function with given fields: -func (_m *HealthMonitor) Start() error { - ret := _m.Called() +// Start provides a mock function with given fields: ctx +func (_m *HealthMonitor) Start(ctx context.Context) error { + ret := _m.Called(ctx) if len(ret) == 0 { panic("no return value specified for Start") } var r0 error - if rf, ok := ret.Get(0).(func() error); ok { - r0 = rf() + if rf, ok := ret.Get(0).(func(context.Context) error); ok { + r0 = rf(ctx) } else { r0 = ret.Error(0) } @@ -41,13 +45,14 @@ type HealthMonitor_Start_Call struct { } // Start is a helper method to define mock.On call -func (_e *HealthMonitor_Expecter) Start() *HealthMonitor_Start_Call { - return &HealthMonitor_Start_Call{Call: _e.mock.On("Start")} +// - ctx context.Context +func (_e *HealthMonitor_Expecter) Start(ctx interface{}) *HealthMonitor_Start_Call { + return &HealthMonitor_Start_Call{Call: _e.mock.On("Start", ctx)} } -func (_c *HealthMonitor_Start_Call) Run(run func()) *HealthMonitor_Start_Call { +func (_c *HealthMonitor_Start_Call) Run(run func(ctx context.Context)) *HealthMonitor_Start_Call { _c.Call.Run(func(args mock.Arguments) { - run() + run(args[0].(context.Context)) }) return _c } @@ -57,7 +62,7 @@ func (_c *HealthMonitor_Start_Call) Return(_a0 error) *HealthMonitor_Start_Call return _c } -func (_c *HealthMonitor_Start_Call) RunAndReturn(run func() error) *HealthMonitor_Start_Call { +func (_c *HealthMonitor_Start_Call) RunAndReturn(run func(context.Context) error) *HealthMonitor_Start_Call { _c.Call.Return(run) return _c } diff --git a/op-conductor/health/monitor.go b/op-conductor/health/monitor.go index 8ae1fe166bdc..d2b28ffab7d9 100644 --- a/op-conductor/health/monitor.go +++ b/op-conductor/health/monitor.go @@ -26,7 +26,7 @@ type HealthMonitor interface { // Subscribe returns a channel that will be notified for every health check. Subscribe() <-chan error // Start starts the health check. - Start() error + Start(ctx context.Context) error // Stop stops the health check. Stop() error } @@ -39,7 +39,6 @@ func NewSequencerHealthMonitor(log log.Logger, metrics metrics.Metricer, interva return &SequencerHealthMonitor{ log: log, metrics: metrics, - done: make(chan struct{}), interval: interval, healthUpdateCh: make(chan error), rollupCfg: rollupCfg, @@ -57,7 +56,7 @@ func NewSequencerHealthMonitor(log log.Logger, metrics metrics.Metricer, interva type SequencerHealthMonitor struct { log log.Logger metrics metrics.Metricer - done chan struct{} + cancel context.CancelFunc wg sync.WaitGroup rollupCfg *rollup.Config @@ -79,10 +78,13 @@ type SequencerHealthMonitor struct { var _ HealthMonitor = (*SequencerHealthMonitor)(nil) // Start implements HealthMonitor. -func (hm *SequencerHealthMonitor) Start() error { +func (hm *SequencerHealthMonitor) Start(ctx context.Context) error { + ctx, cancel := context.WithCancel(ctx) + hm.cancel = cancel + hm.log.Info("starting health monitor") hm.wg.Add(1) - go hm.loop() + go hm.loop(ctx) hm.log.Info("health monitor started") return nil @@ -91,7 +93,7 @@ func (hm *SequencerHealthMonitor) Start() error { // Stop implements HealthMonitor. func (hm *SequencerHealthMonitor) Stop() error { hm.log.Info("stopping health monitor") - close(hm.done) + hm.cancel() hm.wg.Wait() hm.log.Info("health monitor stopped") @@ -103,7 +105,7 @@ func (hm *SequencerHealthMonitor) Subscribe() <-chan error { return hm.healthUpdateCh } -func (hm *SequencerHealthMonitor) loop() { +func (hm *SequencerHealthMonitor) loop(ctx context.Context) { defer hm.wg.Done() duration := time.Duration(hm.interval) * time.Second @@ -112,16 +114,16 @@ func (hm *SequencerHealthMonitor) loop() { for { select { - case <-hm.done: + case <-ctx.Done(): return case <-ticker.C: - err := hm.healthCheck() + err := hm.healthCheck(ctx) hm.metrics.RecordHealthCheck(err == nil, err) // Ensure that we exit cleanly if told to shutdown while still waiting to publish the health update select { case hm.healthUpdateCh <- err: continue - case <-hm.done: + case <-ctx.Done(): return } } @@ -133,8 +135,7 @@ func (hm *SequencerHealthMonitor) loop() { // 2. unsafe head is not too far behind now (measured by unsafeInterval) // 3. safe head is progressing every configured batch submission interval // 4. peer count is above the configured minimum -func (hm *SequencerHealthMonitor) healthCheck() error { - ctx := context.Background() +func (hm *SequencerHealthMonitor) healthCheck(ctx context.Context) error { status, err := hm.node.SyncStatus(ctx) if err != nil { hm.log.Error("health monitor failed to get sync status", "err", err) diff --git a/op-conductor/health/monitor_test.go b/op-conductor/health/monitor_test.go index 1533e98a360c..1a38f7f3a79e 100644 --- a/op-conductor/health/monitor_test.go +++ b/op-conductor/health/monitor_test.go @@ -6,6 +6,7 @@ import ( "time" "github.com/ethereum/go-ethereum/log" + "github.com/stretchr/testify/mock" "github.com/stretchr/testify/suite" "github.com/ethereum-optimism/optimism/op-conductor/metrics" @@ -53,11 +54,10 @@ func (s *HealthMonitorTestSuite) SetupMonitor( ps1 := &p2p.PeerStats{ Connected: healthyPeerCount, } - mockP2P.EXPECT().PeerStats(context.Background()).Return(ps1, nil) + mockP2P.EXPECT().PeerStats(mock.Anything).Return(ps1, nil) } monitor := &SequencerHealthMonitor{ log: s.log, - done: make(chan struct{}), interval: s.interval, metrics: &metrics.NoopMetricsImpl{}, healthUpdateCh: make(chan error), @@ -70,7 +70,7 @@ func (s *HealthMonitorTestSuite) SetupMonitor( node: mockRollupClient, p2p: mockP2P, } - err := monitor.Start() + err := monitor.Start(context.Background()) s.NoError(err) return monitor } @@ -88,7 +88,7 @@ func (s *HealthMonitorTestSuite) TestUnhealthyLowPeerCount() { ps1 := &p2p.PeerStats{ Connected: unhealthyPeerCount, } - pc.EXPECT().PeerStats(context.Background()).Return(ps1, nil).Times(1) + pc.EXPECT().PeerStats(mock.Anything).Return(ps1, nil).Times(1) monitor := s.SetupMonitor(now, 60, 60, rc, pc) From 19d7b721d3aabade49afa2196a6cfde2e1635091 Mon Sep 17 00:00:00 2001 From: protolambda Date: Mon, 17 Jun 2024 20:13:35 +0200 Subject: [PATCH 052/141] op-node: implement event emitter/handler derivers, support first few Engine events (#10783) * op-node: driver now uses event processing * op-node: deriver event processing review fixes --- op-e2e/actions/l2_sequencer.go | 4 +- op-e2e/actions/l2_verifier.go | 132 +++++++----- op-node/rollup/derive/pipeline.go | 3 + op-node/rollup/driver/driver.go | 63 ++++-- op-node/rollup/driver/state.go | 238 ++++++++++++---------- op-node/rollup/driver/steps.go | 130 ++++++++++++ op-node/rollup/driver/steps_test.go | 53 +++++ op-node/rollup/driver/synchronous.go | 78 +++++++ op-node/rollup/driver/synchronous_test.go | 95 +++++++++ op-node/rollup/engine/events.go | 85 ++++++++ op-node/rollup/events.go | 82 ++++++++ op-node/rollup/events_test.go | 50 +++++ op-service/safego/nocopy.go | 29 +++ op-service/testutils/metrics.go | 3 + 14 files changed, 864 insertions(+), 181 deletions(-) create mode 100644 op-node/rollup/driver/steps.go create mode 100644 op-node/rollup/driver/steps_test.go create mode 100644 op-node/rollup/driver/synchronous.go create mode 100644 op-node/rollup/driver/synchronous_test.go create mode 100644 op-node/rollup/engine/events.go create mode 100644 op-node/rollup/events.go create mode 100644 op-node/rollup/events_test.go create mode 100644 op-service/safego/nocopy.go diff --git a/op-e2e/actions/l2_sequencer.go b/op-e2e/actions/l2_sequencer.go index fdbfb89b3426..dd3a795e96ca 100644 --- a/op-e2e/actions/l2_sequencer.go +++ b/op-e2e/actions/l2_sequencer.go @@ -34,7 +34,7 @@ func (m *MockL1OriginSelector) FindL1Origin(ctx context.Context, l2Head eth.L2Bl // L2Sequencer is an actor that functions like a rollup node, // without the full P2P/API/Node stack, but just the derivation state, and simplified driver with sequencing ability. type L2Sequencer struct { - L2Verifier + *L2Verifier sequencer *driver.Sequencer @@ -52,7 +52,7 @@ func NewL2Sequencer(t Testing, log log.Logger, l1 derive.L1Fetcher, blobSrc deri actual: driver.NewL1OriginSelector(log, cfg, seqConfDepthL1), } return &L2Sequencer{ - L2Verifier: *ver, + L2Verifier: ver, sequencer: driver.NewSequencer(log, cfg, ver.engine, attrBuilder, l1OriginSelector, metrics.NoopMetrics), mockL1OriginSelector: l1OriginSelector, failL2GossipUnsafeBlock: nil, diff --git a/op-e2e/actions/l2_verifier.go b/op-e2e/actions/l2_verifier.go index a0f513cfba38..42d0813f30ca 100644 --- a/op-e2e/actions/l2_verifier.go +++ b/op-e2e/actions/l2_verifier.go @@ -3,13 +3,14 @@ package actions import ( "context" "errors" - "io" + "fmt" + + "github.com/stretchr/testify/require" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" gnode "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/rpc" - "github.com/stretchr/testify/require" "github.com/ethereum-optimism/optimism/op-node/node" "github.com/ethereum-optimism/optimism/op-node/rollup" @@ -22,6 +23,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup/sync" "github.com/ethereum-optimism/optimism/op-service/client" "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/ethereum-optimism/optimism/op-service/safego" "github.com/ethereum-optimism/optimism/op-service/sources" "github.com/ethereum-optimism/optimism/op-service/testutils" ) @@ -59,6 +61,10 @@ type L2Verifier struct { rpc *rpc.Server failRPC error // mock error + + // The L2Verifier actor is embedded in the L2Sequencer actor, + // but must not be copied for the deriver-functionality to modify the same state. + _ safego.NoCopy } type L2API interface { @@ -77,46 +83,71 @@ type safeDB interface { func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc derive.L1BlobsFetcher, plasmaSrc driver.PlasmaIface, eng L2API, cfg *rollup.Config, syncCfg *sync.Config, safeHeadListener safeDB) *L2Verifier { metrics := &testutils.TestDerivationMetrics{} - engine := engine.NewEngineController(eng, log, metrics, cfg, syncCfg.SyncMode) + ec := engine.NewEngineController(eng, log, metrics, cfg, syncCfg.SyncMode) - clSync := clsync.NewCLSync(log, cfg, metrics, engine) + clSync := clsync.NewCLSync(log, cfg, metrics, ec) var finalizer driver.Finalizer if cfg.PlasmaEnabled() { - finalizer = finality.NewPlasmaFinalizer(log, cfg, l1, engine, plasmaSrc) + finalizer = finality.NewPlasmaFinalizer(log, cfg, l1, ec, plasmaSrc) } else { - finalizer = finality.NewFinalizer(log, cfg, l1, engine) + finalizer = finality.NewFinalizer(log, cfg, l1, ec) } - attributesHandler := attributes.NewAttributesHandler(log, cfg, engine, eng) + attributesHandler := attributes.NewAttributesHandler(log, cfg, ec, eng) pipeline := derive.NewDerivationPipeline(log, cfg, l1, blobsSrc, plasmaSrc, eng, metrics) + ctx, cancel := context.WithCancel(context.Background()) + t.Cleanup(cancel) + + rootDeriver := &rollup.SynchronousDerivers{} + synchronousEvents := driver.NewSynchronousEvents(log, ctx, rootDeriver) + + syncDeriver := &driver.SyncDeriver{ + Derivation: pipeline, + Finalizer: finalizer, + AttributesHandler: attributesHandler, + SafeHeadNotifs: safeHeadListener, + CLSync: clSync, + Engine: ec, + SyncCfg: syncCfg, + Config: cfg, + L1: l1, + L2: eng, + Emitter: synchronousEvents, + Log: log, + Ctx: ctx, + Drain: synchronousEvents.Drain, + } + + engDeriv := engine.NewEngDeriver(log, ctx, cfg, ec, synchronousEvents) + rollupNode := &L2Verifier{ log: log, eng: eng, - engine: engine, + engine: ec, clSync: clSync, derivation: pipeline, finalizer: finalizer, attributesHandler: attributesHandler, safeHeadListener: safeHeadListener, syncCfg: syncCfg, - syncDeriver: &driver.SyncDeriver{ - Derivation: pipeline, - Finalizer: finalizer, - AttributesHandler: attributesHandler, - SafeHeadNotifs: safeHeadListener, - CLSync: clSync, - Engine: engine, - }, - l1: l1, - l1State: driver.NewL1State(log, metrics), - l2PipelineIdle: true, - l2Building: false, - rollupCfg: cfg, - rpc: rpc.NewServer(), + syncDeriver: syncDeriver, + l1: l1, + l1State: driver.NewL1State(log, metrics), + l2PipelineIdle: true, + l2Building: false, + rollupCfg: cfg, + rpc: rpc.NewServer(), + } + + *rootDeriver = rollup.SynchronousDerivers{ + syncDeriver, + engDeriv, + rollupNode, } + t.Cleanup(rollupNode.rpc.Stop) // setup RPC server for rollup node, hooked to the actor as backend @@ -253,9 +284,20 @@ func (s *L2Verifier) ActL1FinalizedSignal(t Testing) { s.finalizer.Finalize(t.Ctx(), finalized) } -// syncStep represents the Driver.syncStep -func (s *L2Verifier) syncStep(ctx context.Context) error { - return s.syncDeriver.SyncStep(ctx) +func (s *L2Verifier) OnEvent(ev rollup.Event) { + switch x := ev.(type) { + case rollup.EngineTemporaryErrorEvent: + s.log.Warn("Derivation process temporary error", "err", x.Err) + if errors.Is(x.Err, sync.WrongChainErr) { // action-tests don't back off on temporary errors. Avoid a bad genesis setup from looping. + panic(fmt.Errorf("genesis setup issue: %w", x.Err)) + } + case rollup.ResetEvent: + s.log.Warn("Derivation pipeline is being reset", "err", x.Err) + case rollup.CriticalErrorEvent: + panic(fmt.Errorf("derivation failed critically: %w", x.Err)) + case driver.DeriverIdleEvent: + s.l2PipelineIdle = true + } } // ActL2PipelineStep runs one iteration of the L2 derivation pipeline @@ -264,41 +306,21 @@ func (s *L2Verifier) ActL2PipelineStep(t Testing) { t.InvalidAction("cannot derive new data while building L2 block") return } - - err := s.syncStep(t.Ctx()) - if err == io.EOF || (err != nil && errors.Is(err, derive.EngineELSyncing)) { - s.l2PipelineIdle = true - return - } else if err != nil && errors.Is(err, derive.NotEnoughData) { - return - } else if err != nil && errors.Is(err, derive.ErrReset) { - s.log.Warn("Derivation pipeline is reset", "err", err) - s.derivation.Reset() - if err := engine.ResetEngine(t.Ctx(), s.log, s.rollupCfg, s.engine, s.l1, s.eng, s.syncCfg, s.safeHeadListener); err != nil { - s.log.Error("Derivation pipeline not ready, failed to reset engine", "err", err) - // Derivation-pipeline will return a new ResetError until we confirm the engine has been successfully reset. - return - } - s.derivation.ConfirmEngineReset() - return - } else if err != nil && errors.Is(err, derive.ErrTemporary) { - s.log.Warn("Derivation process temporary error", "err", err) - if errors.Is(err, sync.WrongChainErr) { // action-tests don't back off on temporary errors. Avoid a bad genesis setup from looping. - t.Fatalf("genesis setup issue: %v", err) - } - return - } else if err != nil && errors.Is(err, derive.ErrCritical) { - t.Fatalf("derivation failed critically: %v", err) - } else if err != nil { - t.Fatalf("derivation failed: %v", err) - } else { - return - } + s.syncDeriver.Emitter.Emit(driver.StepEvent{}) + require.NoError(t, s.syncDeriver.Drain(), "complete all event processing triggered by deriver step") } func (s *L2Verifier) ActL2PipelineFull(t Testing) { s.l2PipelineIdle = false + i := 0 for !s.l2PipelineIdle { + i += 1 + // Some tests do generate a lot of derivation steps + // (e.g. thousand blocks span-batch, or deep reorgs). + // Hence we set the sanity limit to something really high. + if i > 10_000 { + t.Fatalf("ActL2PipelineFull running for too long. Is a deriver looping?") + } s.ActL2PipelineStep(t) } } diff --git a/op-node/rollup/derive/pipeline.go b/op-node/rollup/derive/pipeline.go index 31295870f40c..7d74fb9da800 100644 --- a/op-node/rollup/derive/pipeline.go +++ b/op-node/rollup/derive/pipeline.go @@ -22,6 +22,7 @@ type Metrics interface { RecordFrame() RecordDerivedBatches(batchType string) SetDerivationIdle(idle bool) + RecordPipelineReset() } type L1Fetcher interface { @@ -195,6 +196,8 @@ func (dp *DerivationPipeline) Step(ctx context.Context, pendingSafeHead eth.L2Bl func (dp *DerivationPipeline) initialReset(ctx context.Context, resetL2Safe eth.L2BlockRef) error { dp.log.Info("Rewinding derivation-pipeline L1 traversal to handle reset") + dp.metrics.RecordPipelineReset() + // Walk back L2 chain to find the L1 origin that is old enough to start buffering channel data from. pipelineL2 := resetL2Safe l1Origin := resetL2Safe.L1Origin diff --git a/op-node/rollup/driver/driver.go b/op-node/rollup/driver/driver.go index 7213eaf98bac..0865685c8414 100644 --- a/op-node/rollup/driver/driver.go +++ b/op-node/rollup/driver/driver.go @@ -178,48 +178,62 @@ func NewDriver( sequencerConfDepth := NewConfDepth(driverCfg.SequencerConfDepth, l1State.L1Head, l1) findL1Origin := NewL1OriginSelector(log, cfg, sequencerConfDepth) verifConfDepth := NewConfDepth(driverCfg.VerifierConfDepth, l1State.L1Head, l1) - engine := engine.NewEngineController(l2, log, metrics, cfg, syncCfg.SyncMode) - clSync := clsync.NewCLSync(log, cfg, metrics, engine) + ec := engine.NewEngineController(l2, log, metrics, cfg, syncCfg.SyncMode) + clSync := clsync.NewCLSync(log, cfg, metrics, ec) var finalizer Finalizer if cfg.PlasmaEnabled() { - finalizer = finality.NewPlasmaFinalizer(log, cfg, l1, engine, plasma) + finalizer = finality.NewPlasmaFinalizer(log, cfg, l1, ec, plasma) } else { - finalizer = finality.NewFinalizer(log, cfg, l1, engine) + finalizer = finality.NewFinalizer(log, cfg, l1, ec) } - attributesHandler := attributes.NewAttributesHandler(log, cfg, engine, l2) + attributesHandler := attributes.NewAttributesHandler(log, cfg, ec, l2) derivationPipeline := derive.NewDerivationPipeline(log, cfg, verifConfDepth, l1Blobs, plasma, l2, metrics) attrBuilder := derive.NewFetchingAttributesBuilder(cfg, l1, l2) - meteredEngine := NewMeteredEngine(cfg, engine, metrics, log) // Only use the metered engine in the sequencer b/c it records sequencing metrics. + meteredEngine := NewMeteredEngine(cfg, ec, metrics, log) // Only use the metered engine in the sequencer b/c it records sequencing metrics. sequencer := NewSequencer(log, cfg, meteredEngine, attrBuilder, findL1Origin, metrics) driverCtx, driverCancel := context.WithCancel(context.Background()) asyncGossiper := async.NewAsyncGossiper(driverCtx, network, log, metrics) - return &Driver{ - l1State: l1State, - SyncDeriver: &SyncDeriver{ - Derivation: derivationPipeline, - Finalizer: finalizer, - AttributesHandler: attributesHandler, - SafeHeadNotifs: safeHeadListener, - CLSync: clSync, - Engine: engine, - }, + + rootDeriver := &rollup.SynchronousDerivers{} + synchronousEvents := NewSynchronousEvents(log, driverCtx, rootDeriver) + + syncDeriver := &SyncDeriver{ + Derivation: derivationPipeline, + Finalizer: finalizer, + AttributesHandler: attributesHandler, + SafeHeadNotifs: safeHeadListener, + CLSync: clSync, + Engine: ec, + SyncCfg: syncCfg, + Config: cfg, + L1: l1, + L2: l2, + Emitter: synchronousEvents, + Log: log, + Ctx: driverCtx, + Drain: synchronousEvents.Drain, + } + engDeriv := engine.NewEngDeriver(log, driverCtx, cfg, ec, synchronousEvents) + schedDeriv := NewStepSchedulingDeriver(log, synchronousEvents) + + driver := &Driver{ + l1State: l1State, + SyncDeriver: syncDeriver, + sched: schedDeriv, + synchronousEvents: synchronousEvents, stateReq: make(chan chan struct{}), forceReset: make(chan chan struct{}, 10), startSequencer: make(chan hashAndErrorChannel, 10), stopSequencer: make(chan chan hashAndError, 10), sequencerActive: make(chan chan bool, 10), sequencerNotifs: sequencerStateListener, - config: cfg, - syncCfg: syncCfg, driverConfig: driverCfg, driverCtx: driverCtx, driverCancel: driverCancel, log: log, snapshotLog: snapshotLog, - l1: l1, - l2: l2, sequencer: sequencer, network: network, metrics: metrics, @@ -231,4 +245,13 @@ func NewDriver( asyncGossiper: asyncGossiper, sequencerConductor: sequencerConductor, } + + *rootDeriver = []rollup.Deriver{ + syncDeriver, + engDeriv, + schedDeriv, + driver, + } + + return driver } diff --git a/op-node/rollup/driver/state.go b/op-node/rollup/driver/state.go index 7af9656bd386..b933096abc2e 100644 --- a/op-node/rollup/driver/state.go +++ b/op-node/rollup/driver/state.go @@ -20,7 +20,6 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" "github.com/ethereum-optimism/optimism/op-service/eth" - "github.com/ethereum-optimism/optimism/op-service/retry" ) var ( @@ -39,6 +38,10 @@ type Driver struct { *SyncDeriver + sched *StepSchedulingDeriver + + synchronousEvents *SynchronousEvents + // Requests to block the event loop for synchronous execution to avoid reading an inconsistent state stateReq chan chan struct{} @@ -62,17 +65,11 @@ type Driver struct { // sequencerNotifs is notified when the sequencer is started or stopped sequencerNotifs SequencerStateListener - // Rollup config: rollup chain configuration - config *rollup.Config - sequencerConductor conductor.SequencerConductor // Driver config: verifier and sequencer settings driverConfig *Config - // Sync Mod Config - syncCfg *sync.Config - // L1 Signals: // // Not all L1 blocks, or all changes, have to be signalled: @@ -94,8 +91,6 @@ type Driver struct { unsafeL2Payloads chan *eth.ExecutionPayloadEnvelope - l1 L1Chain - l2 L2Chain sequencer SequencerIface network Network // may be nil, network for is optional @@ -191,39 +186,9 @@ func (s *Driver) eventLoop() { defer s.driverCancel() - // stepReqCh is used to request that the driver attempts to step forward by one L1 block. - stepReqCh := make(chan struct{}, 1) - - // channel, nil by default (not firing), but used to schedule re-attempts with delay - var delayedStepReq <-chan time.Time - - // keep track of consecutive failed attempts, to adjust the backoff time accordingly - bOffStrategy := retry.Exponential() - stepAttempts := 0 - - // step requests a derivation step to be taken. Won't deadlock if the channel is full. - step := func() { - select { - case stepReqCh <- struct{}{}: - // Don't deadlock if the channel is already full - default: - } - } - // reqStep requests a derivation step nicely, with a delay if this is a reattempt, or not at all if we already scheduled a reattempt. reqStep := func() { - if stepAttempts > 0 { - // if this is not the first attempt, we re-schedule with a backoff, *without blocking other events* - if delayedStepReq == nil { - delay := bOffStrategy.Duration(stepAttempts) - s.log.Debug("scheduling re-attempt with delay", "attempts", stepAttempts, "delay", delay) - delayedStepReq = time.After(delay) - } else { - s.log.Debug("ignoring step request, already scheduled re-attempt after previous failure", "attempts", stepAttempts) - } - } else { - step() - } + s.Emit(StepReqEvent{}) } // We call reqStep right away to finish syncing to the tip of the chain if we're behind. @@ -244,7 +209,7 @@ func (s *Driver) eventLoop() { // Create a ticker to check if there is a gap in the engine queue. Whenever // there is, we send requests to sync source to retrieve the missing payloads. - syncCheckInterval := time.Duration(s.config.BlockTime) * time.Second * 2 + syncCheckInterval := time.Duration(s.Config.BlockTime) * time.Second * 2 altSyncTicker := time.NewTicker(syncCheckInterval) defer altSyncTicker.Stop() lastUnsafeL2 := s.Engine.UnsafeL2Head() @@ -254,6 +219,15 @@ func (s *Driver) eventLoop() { return } + // While event-processing is synchronous we have to drain + // (i.e. process all queued-up events) before creating any new events. + if err := s.synchronousEvents.Drain(); err != nil { + if s.driverCtx.Err() != nil { + return + } + s.log.Error("unexpected error from event-draining", "err", err) + } + // If we are sequencing, and the L1 state is ready, update the trigger for the next sequencer action. // This may adjust at any time based on fork-choice changes or previous errors. // And avoid sequencing if the derivation pipeline indicates the engine is not ready. @@ -311,13 +285,13 @@ func (s *Driver) eventLoop() { case envelope := <-s.unsafeL2Payloads: s.snapshot("New unsafe payload") // If we are doing CL sync or done with engine syncing, fallback to the unsafe payload queue & CL P2P sync. - if s.syncCfg.SyncMode == sync.CLSync || !s.Engine.IsEngineSyncing() { + if s.SyncCfg.SyncMode == sync.CLSync || !s.Engine.IsEngineSyncing() { s.log.Info("Optimistically queueing unsafe L2 execution payload", "id", envelope.ExecutionPayload.ID()) s.CLSync.AddUnsafePayload(envelope) s.metrics.RecordReceivedUnsafePayload(envelope) reqStep() - } else if s.syncCfg.SyncMode == sync.ELSync { - ref, err := derive.PayloadToBlockRef(s.config, envelope.ExecutionPayload) + } else if s.SyncCfg.SyncMode == sync.ELSync { + ref, err := derive.PayloadToBlockRef(s.Config, envelope.ExecutionPayload) if err != nil { s.log.Info("Failed to turn execution payload into a block ref", "id", envelope.ExecutionPayload.ID(), "err", err) continue @@ -342,58 +316,10 @@ func (s *Driver) eventLoop() { s.Finalizer.Finalize(ctx, newL1Finalized) cancel() reqStep() // we may be able to mark more L2 data as finalized now - case <-delayedStepReq: - delayedStepReq = nil - step() - case <-stepReqCh: - // Don't start the derivation pipeline until we are done with EL sync - if s.Engine.IsEngineSyncing() { - continue - } - s.log.Debug("Sync process step", "onto_origin", s.Derivation.Origin(), "attempts", stepAttempts) - err := s.SyncStep(s.driverCtx) - stepAttempts += 1 // count as attempt by default. We reset to 0 if we are making healthy progress. - if err == io.EOF { - s.log.Debug("Derivation process went idle", "progress", s.Derivation.Origin(), "err", err) - stepAttempts = 0 - continue - } else if err != nil && errors.Is(err, derive.EngineELSyncing) { - s.log.Debug("Derivation process went idle because the engine is syncing", "progress", s.Derivation.Origin(), "unsafe_head", s.Engine.UnsafeL2Head(), "err", err) - stepAttempts = 0 - continue - } else if err != nil && errors.Is(err, derive.ErrReset) { - // If the pipeline corrupts, e.g. due to a reorg, simply reset it - s.log.Warn("Derivation pipeline is reset", "err", err) - s.Derivation.Reset() - s.Finalizer.Reset() - s.metrics.RecordPipelineReset() - reqStep() - if err := engine.ResetEngine(s.driverCtx, s.log, s.config, s.Engine, s.l1, s.l2, s.syncCfg, s.SafeHeadNotifs); err != nil { - s.log.Error("Derivation pipeline not ready, failed to reset engine", "err", err) - // Derivation-pipeline will return a new ResetError until we confirm the engine has been successfully reset. - continue - } - s.Derivation.ConfirmEngineReset() - continue - } else if err != nil && errors.Is(err, derive.ErrTemporary) { - s.log.Warn("Derivation process temporary error", "attempts", stepAttempts, "err", err) - reqStep() - continue - } else if err != nil && errors.Is(err, derive.ErrCritical) { - s.log.Error("Derivation process critical error", "err", err) - return - } else if err != nil && errors.Is(err, derive.NotEnoughData) { - stepAttempts = 0 // don't do a backoff for this error - reqStep() - continue - } else if err != nil { - s.log.Error("Derivation process error", "attempts", stepAttempts, "err", err) - reqStep() - continue - } else { - stepAttempts = 0 - reqStep() // continue with the next step if we can - } + case <-s.sched.NextDelayedStep(): + s.Emit(StepAttemptEvent{}) + case <-s.sched.NextStep(): + s.Emit(StepAttemptEvent{}) case respCh := <-s.stateReq: respCh <- struct{}{} case respCh := <-s.forceReset: @@ -440,6 +366,29 @@ func (s *Driver) eventLoop() { } } +// OnEvent handles broadcasted events. +// The Driver itself is a deriver to catch system-critical events. +// Other event-handling should be encapsulated into standalone derivers. +func (s *Driver) OnEvent(ev rollup.Event) { + switch x := ev.(type) { + case rollup.CriticalErrorEvent: + s.Log.Error("Derivation process critical error", "err", x.Err) + // we need to unblock event-processing to be able to close + go func() { + logger := s.Log + err := s.Close() + if err != nil { + logger.Error("Failed to shutdown driver on critical error", "err", err) + } + }() + return + } +} + +func (s *Driver) Emit(ev rollup.Event) { + s.synchronousEvents.Emit(ev) +} + type SyncDeriver struct { // The derivation pipeline is reset whenever we reorg. // The derivation pipeline determines the new l2Safe. @@ -457,20 +406,101 @@ type SyncDeriver struct { // The engine controller is used by the sequencer & Derivation components. // We will also use it for EL sync in a future PR. Engine EngineController + + // Sync Mod Config + SyncCfg *sync.Config + + Config *rollup.Config + + L1 L1Chain + L2 L2Chain + + Emitter rollup.EventEmitter + + Log log.Logger + + Ctx context.Context + + Drain func() error +} + +func (s *SyncDeriver) OnEvent(ev rollup.Event) { + switch x := ev.(type) { + case StepEvent: + s.onStepEvent() + case rollup.ResetEvent: + s.onResetEvent(x) + case rollup.EngineTemporaryErrorEvent: + s.Log.Warn("Derivation process temporary error", "err", x.Err) + s.Emitter.Emit(StepReqEvent{}) + } +} + +func (s *SyncDeriver) onStepEvent() { + s.Log.Debug("Sync process step", "onto_origin", s.Derivation.Origin()) + // Note: while we refactor the SyncStep to be entirely event-based we have an intermediate phase + // where some things are triggered through events, and some through this synchronous step function. + // We just translate the results into their equivalent events, + // to merge the error-handling with that of the new event-based system. + err := s.SyncStep(s.Ctx) + if err == io.EOF { + s.Log.Debug("Derivation process went idle", "progress", s.Derivation.Origin(), "err", err) + s.Emitter.Emit(ResetStepBackoffEvent{}) + s.Emitter.Emit(DeriverIdleEvent{}) + } else if err != nil && errors.Is(err, derive.EngineELSyncing) { + s.Log.Debug("Derivation process went idle because the engine is syncing", "progress", s.Derivation.Origin(), "unsafe_head", s.Engine.UnsafeL2Head(), "err", err) + s.Emitter.Emit(ResetStepBackoffEvent{}) + } else if err != nil && errors.Is(err, derive.ErrReset) { + s.Emitter.Emit(rollup.ResetEvent{Err: err}) + } else if err != nil && errors.Is(err, derive.ErrTemporary) { + s.Emitter.Emit(rollup.EngineTemporaryErrorEvent{Err: err}) + } else if err != nil && errors.Is(err, derive.ErrCritical) { + s.Emitter.Emit(rollup.CriticalErrorEvent{Err: err}) + } else if err != nil && errors.Is(err, derive.NotEnoughData) { + // don't do a backoff for this error + s.Emitter.Emit(StepReqEvent{ResetBackoff: true}) + } else if err != nil { + s.Log.Error("Derivation process error", "err", err) + s.Emitter.Emit(StepReqEvent{}) + } else { + s.Emitter.Emit(StepReqEvent{ResetBackoff: true}) // continue with the next step if we can + } +} + +func (s *SyncDeriver) onResetEvent(x rollup.ResetEvent) { + // If the pipeline corrupts, e.g. due to a reorg, simply reset it + s.Log.Warn("Derivation pipeline is reset", "err", x.Err) + s.Derivation.Reset() + s.Finalizer.Reset() + s.Emitter.Emit(StepReqEvent{}) + if err := engine.ResetEngine(s.Ctx, s.Log, s.Config, s.Engine, s.L1, s.L2, s.SyncCfg, s.SafeHeadNotifs); err != nil { + s.Log.Error("Derivation pipeline not ready, failed to reset engine", "err", err) + // Derivation-pipeline will return a new ResetError until we confirm the engine has been successfully reset. + return + } + s.Derivation.ConfirmEngineReset() +} + +type DeriverIdleEvent struct{} + +func (d DeriverIdleEvent) String() string { + return "derivation-idle" } // SyncStep performs the sequence of encapsulated syncing steps. // Warning: this sequence will be broken apart as outlined in op-node derivers design doc. func (s *SyncDeriver) SyncStep(ctx context.Context) error { - // If we don't need to call FCU to restore unsafeHead using backupUnsafe, keep going b/c - // this was a no-op(except correcting invalid state when backupUnsafe is empty but TryBackupUnsafeReorg called). - if fcuCalled, err := s.Engine.TryBackupUnsafeReorg(ctx); fcuCalled { - // If we needed to perform a network call, then we should yield even if we did not encounter an error. + if err := s.Drain(); err != nil { return err } - // If we don't need to call FCU, keep going b/c this was a no-op. If we needed to - // perform a network call, then we should yield even if we did not encounter an error. - if err := s.Engine.TryUpdateEngine(ctx); !errors.Is(err, engine.ErrNoFCUNeeded) { + + s.Emitter.Emit(engine.TryBackupUnsafeReorgEvent{}) + if err := s.Drain(); err != nil { + return err + } + + s.Emitter.Emit(engine.TryUpdateEngineEvent{}) + if err := s.Drain(); err != nil { return err } @@ -636,7 +666,7 @@ func (s *Driver) BlockRefWithStatus(ctx context.Context, num uint64) (eth.L2Bloc select { case s.stateReq <- wait: resp := s.syncStatus() - ref, err := s.l2.L2BlockRefByNumber(ctx, num) + ref, err := s.L2.L2BlockRefByNumber(ctx, num) <-wait return ref, resp, err case <-ctx.Done(): diff --git a/op-node/rollup/driver/steps.go b/op-node/rollup/driver/steps.go new file mode 100644 index 000000000000..8f29203adcc3 --- /dev/null +++ b/op-node/rollup/driver/steps.go @@ -0,0 +1,130 @@ +package driver + +import ( + "time" + + "github.com/ethereum/go-ethereum/log" + + "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum-optimism/optimism/op-service/retry" +) + +type ResetStepBackoffEvent struct { +} + +func (ev ResetStepBackoffEvent) String() string { + return "reset-step-backoff" +} + +type StepReqEvent struct { + ResetBackoff bool +} + +func (ev StepReqEvent) String() string { + return "step-req" +} + +type StepAttemptEvent struct{} + +func (ev StepAttemptEvent) String() string { + return "step-attempt" +} + +type StepEvent struct{} + +func (ev StepEvent) String() string { + return "step" +} + +// StepSchedulingDeriver is a deriver that emits StepEvent events. +// The deriver can be requested to schedule a step with a StepReqEvent. +// +// It is then up to the caller to translate scheduling into StepAttemptEvent emissions, by waiting for +// NextStep or NextDelayedStep channels (nil if there is nothing to wait for, for channel-merging purposes). +// +// Upon StepAttemptEvent the scheduler will then emit a StepEvent, +// while maintaining backoff state, to not spam steps. +// +// Backoff can be reset by sending a request with StepReqEvent.ResetBackoff +// set to true, or by sending a ResetStepBackoffEvent. +type StepSchedulingDeriver struct { + + // keep track of consecutive failed attempts, to adjust the backoff time accordingly + stepAttempts int + bOffStrategy retry.Strategy + + // channel, nil by default (not firing), but used to schedule re-attempts with delay + delayedStepReq <-chan time.Time + + // stepReqCh is used to request that the driver attempts to step forward by one L1 block. + stepReqCh chan struct{} + + log log.Logger + + emitter rollup.EventEmitter +} + +func NewStepSchedulingDeriver(log log.Logger, emitter rollup.EventEmitter) *StepSchedulingDeriver { + return &StepSchedulingDeriver{ + stepAttempts: 0, + bOffStrategy: retry.Exponential(), + stepReqCh: make(chan struct{}, 1), + delayedStepReq: nil, + log: log, + emitter: emitter, + } +} + +// NextStep is a channel to await, and if triggered, +// the caller should emit a StepAttemptEvent to queue up a step while maintaining backoff. +func (s *StepSchedulingDeriver) NextStep() <-chan struct{} { + return s.stepReqCh +} + +// NextDelayedStep is a temporary channel to await, and if triggered, +// the caller should emit a StepAttemptEvent to queue up a step while maintaining backoff. +// The returned channel may be nil, if there is no requested step with delay scheduled. +func (s *StepSchedulingDeriver) NextDelayedStep() <-chan time.Time { + return s.delayedStepReq +} + +func (s *StepSchedulingDeriver) OnEvent(ev rollup.Event) { + step := func() { + s.delayedStepReq = nil + select { + case s.stepReqCh <- struct{}{}: + // Don't deadlock if the channel is already full + default: + } + } + + switch x := ev.(type) { + case StepReqEvent: + if x.ResetBackoff { + s.stepAttempts = 0 + } + if s.stepAttempts > 0 { + // if this is not the first attempt, we re-schedule with a backoff, *without blocking other events* + if s.delayedStepReq == nil { + delay := s.bOffStrategy.Duration(s.stepAttempts) + s.log.Debug("scheduling re-attempt with delay", "attempts", s.stepAttempts, "delay", delay) + s.delayedStepReq = time.After(delay) + } else { + s.log.Debug("ignoring step request, already scheduled re-attempt after previous failure", "attempts", s.stepAttempts) + } + } else { + step() + } + case StepAttemptEvent: + // clear the delayed-step channel + s.delayedStepReq = nil + if s.stepAttempts > 0 { + s.log.Debug("Running step retry", "attempts", s.stepAttempts) + } + // count as attempt by default. We reset to 0 if we are making healthy progress. + s.stepAttempts += 1 + s.emitter.Emit(StepEvent{}) + case ResetStepBackoffEvent: + s.stepAttempts = 0 + } +} diff --git a/op-node/rollup/driver/steps_test.go b/op-node/rollup/driver/steps_test.go new file mode 100644 index 000000000000..5dbba314b6e1 --- /dev/null +++ b/op-node/rollup/driver/steps_test.go @@ -0,0 +1,53 @@ +package driver + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/ethereum/go-ethereum/log" + + "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum-optimism/optimism/op-service/testlog" +) + +func TestStepSchedulingDeriver(t *testing.T) { + logger := testlog.Logger(t, log.LevelError) + var queued []rollup.Event + emitter := rollup.EmitterFunc(func(ev rollup.Event) { + queued = append(queued, ev) + }) + sched := NewStepSchedulingDeriver(logger, emitter) + require.Len(t, sched.NextStep(), 0, "start empty") + sched.OnEvent(StepReqEvent{}) + require.Len(t, sched.NextStep(), 1, "take request") + sched.OnEvent(StepReqEvent{}) + require.Len(t, sched.NextStep(), 1, "ignore duplicate request") + require.Empty(t, queued, "only scheduled so far, no step attempts yet") + <-sched.NextStep() + sched.OnEvent(StepAttemptEvent{}) + require.Equal(t, []rollup.Event{StepEvent{}}, queued, "got step event") + require.Nil(t, sched.NextDelayedStep(), "no delayed steps yet") + sched.OnEvent(StepReqEvent{}) + require.NotNil(t, sched.NextDelayedStep(), "2nd attempt before backoff reset causes delayed step to be scheduled") + sched.OnEvent(StepReqEvent{}) + require.NotNil(t, sched.NextDelayedStep(), "can continue to request attempts") + + sched.OnEvent(StepReqEvent{}) + require.Len(t, sched.NextStep(), 0, "no step requests accepted without delay if backoff is counting") + + sched.OnEvent(StepReqEvent{ResetBackoff: true}) + require.Len(t, sched.NextStep(), 1, "request accepted if backoff is reset") + <-sched.NextStep() + + sched.OnEvent(StepReqEvent{}) + require.Len(t, sched.NextStep(), 1, "no backoff, no attempt has been made yet") + <-sched.NextStep() + sched.OnEvent(StepAttemptEvent{}) + sched.OnEvent(StepReqEvent{}) + require.Len(t, sched.NextStep(), 0, "backoff again") + + sched.OnEvent(ResetStepBackoffEvent{}) + sched.OnEvent(StepReqEvent{}) + require.Len(t, sched.NextStep(), 1, "reset backoff accepted, was able to schedule non-delayed step") +} diff --git a/op-node/rollup/driver/synchronous.go b/op-node/rollup/driver/synchronous.go new file mode 100644 index 000000000000..fa752cab5510 --- /dev/null +++ b/op-node/rollup/driver/synchronous.go @@ -0,0 +1,78 @@ +package driver + +import ( + "context" + "sync" + + "github.com/ethereum/go-ethereum/log" + + "github.com/ethereum-optimism/optimism/op-node/rollup" +) + +// Don't queue up an endless number of events. +// At some point it's better to drop events and warn something is exploding the number of events. +const sanityEventLimit = 1000 + +// SynchronousEvents is a rollup.EventEmitter that a rollup.Deriver can emit events to. +// The events will be queued up, and can then be executed synchronously by calling the Drain function, +// which will apply all events to the root Deriver. +// New events may be queued up while events are being processed by the root rollup.Deriver. +type SynchronousEvents struct { + // The lock is no-op in FP execution, if running in synchronous FP-VM. + // This lock ensures that all emitted events are merged together correctly, + // if this util is used in a concurrent context. + evLock sync.Mutex + + events []rollup.Event + + log log.Logger + + ctx context.Context + + root rollup.Deriver +} + +func NewSynchronousEvents(log log.Logger, ctx context.Context, root rollup.Deriver) *SynchronousEvents { + return &SynchronousEvents{ + log: log, + ctx: ctx, + root: root, + } +} + +func (s *SynchronousEvents) Emit(event rollup.Event) { + s.evLock.Lock() + defer s.evLock.Unlock() + + if s.ctx.Err() != nil { + s.log.Warn("Ignoring emitted event during shutdown", "event", event) + return + } + + // sanity limit, never queue too many events + if len(s.events) >= sanityEventLimit { + s.log.Error("Something is very wrong, queued up too many events! Dropping event", "ev", event) + return + } + s.events = append(s.events, event) +} + +func (s *SynchronousEvents) Drain() error { + for { + if s.ctx.Err() != nil { + return s.ctx.Err() + } + if len(s.events) == 0 { + return nil + } + + s.evLock.Lock() + first := s.events[0] + s.events = s.events[1:] + s.evLock.Unlock() + + s.root.OnEvent(first) + } +} + +var _ rollup.EventEmitter = (*SynchronousEvents)(nil) diff --git a/op-node/rollup/driver/synchronous_test.go b/op-node/rollup/driver/synchronous_test.go new file mode 100644 index 000000000000..bc8732fe9eb8 --- /dev/null +++ b/op-node/rollup/driver/synchronous_test.go @@ -0,0 +1,95 @@ +package driver + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/ethereum/go-ethereum/log" + + "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum-optimism/optimism/op-service/testlog" +) + +type TestEvent struct{} + +func (ev TestEvent) String() string { + return "X" +} + +func TestSynchronousEvents(t *testing.T) { + logger := testlog.Logger(t, log.LevelError) + ctx, cancel := context.WithCancel(context.Background()) + count := 0 + deriver := rollup.DeriverFunc(func(ev rollup.Event) { + count += 1 + }) + syncEv := NewSynchronousEvents(logger, ctx, deriver) + require.NoError(t, syncEv.Drain(), "can drain, even if empty") + + syncEv.Emit(TestEvent{}) + require.Equal(t, 0, count, "no processing yet, queued event") + require.NoError(t, syncEv.Drain()) + require.Equal(t, 1, count, "processed event") + + syncEv.Emit(TestEvent{}) + syncEv.Emit(TestEvent{}) + require.Equal(t, 1, count, "no processing yet, queued events") + require.NoError(t, syncEv.Drain()) + require.Equal(t, 3, count, "processed events") + + cancel() + syncEv.Emit(TestEvent{}) + require.Equal(t, ctx.Err(), syncEv.Drain(), "no draining after close") + require.Equal(t, 3, count, "didn't process event after trigger close") +} + +func TestSynchronousEventsSanityLimit(t *testing.T) { + logger := testlog.Logger(t, log.LevelError) + count := 0 + deriver := rollup.DeriverFunc(func(ev rollup.Event) { + count += 1 + }) + syncEv := NewSynchronousEvents(logger, context.Background(), deriver) + // emit 1 too many events + for i := 0; i < sanityEventLimit+1; i++ { + syncEv.Emit(TestEvent{}) + } + require.NoError(t, syncEv.Drain()) + require.Equal(t, sanityEventLimit, count, "processed all non-dropped events") + + syncEv.Emit(TestEvent{}) + require.NoError(t, syncEv.Drain()) + require.Equal(t, sanityEventLimit+1, count, "back to normal after drain") +} + +type CyclicEvent struct { + Count int +} + +func (ev CyclicEvent) String() string { + return "cyclic-event" +} + +func TestSynchronousCyclic(t *testing.T) { + logger := testlog.Logger(t, log.LevelError) + var emitter rollup.EventEmitter + result := false + deriver := rollup.DeriverFunc(func(ev rollup.Event) { + logger.Info("received event", "event", ev) + switch x := ev.(type) { + case CyclicEvent: + if x.Count < 10 { + emitter.Emit(CyclicEvent{Count: x.Count + 1}) + } else { + result = true + } + } + }) + syncEv := NewSynchronousEvents(logger, context.Background(), deriver) + emitter = syncEv + syncEv.Emit(CyclicEvent{Count: 0}) + require.NoError(t, syncEv.Drain()) + require.True(t, result, "expecting event processing to fully recurse") +} diff --git a/op-node/rollup/engine/events.go b/op-node/rollup/engine/events.go new file mode 100644 index 000000000000..7a26abcae8b2 --- /dev/null +++ b/op-node/rollup/engine/events.go @@ -0,0 +1,85 @@ +package engine + +import ( + "context" + "errors" + "fmt" + + "github.com/ethereum/go-ethereum/log" + + "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum-optimism/optimism/op-node/rollup/derive" +) + +type TryBackupUnsafeReorgEvent struct { +} + +func (ev TryBackupUnsafeReorgEvent) String() string { + return "try-backup-unsafe-reorg" +} + +type TryUpdateEngineEvent struct { +} + +func (ev TryUpdateEngineEvent) String() string { + return "try-update-engine" +} + +type EngDeriver struct { + log log.Logger + cfg *rollup.Config + ec *EngineController + ctx context.Context + emitter rollup.EventEmitter +} + +var _ rollup.Deriver = (*EngDeriver)(nil) + +func NewEngDeriver(log log.Logger, ctx context.Context, cfg *rollup.Config, + ec *EngineController, emitter rollup.EventEmitter) *EngDeriver { + return &EngDeriver{ + log: log, + cfg: cfg, + ec: ec, + ctx: ctx, + emitter: emitter, + } +} + +func (d *EngDeriver) OnEvent(ev rollup.Event) { + switch ev.(type) { + case TryBackupUnsafeReorgEvent: + // If we don't need to call FCU to restore unsafeHead using backupUnsafe, keep going b/c + // this was a no-op(except correcting invalid state when backupUnsafe is empty but TryBackupUnsafeReorg called). + fcuCalled, err := d.ec.TryBackupUnsafeReorg(d.ctx) + // Dealing with legacy here: it used to skip over the error-handling if fcuCalled was false. + // But that combination is not actually a code-path in TryBackupUnsafeReorg. + // We should drop fcuCalled, and make the function emit events directly, + // once there are no more synchronous callers. + if !fcuCalled && err != nil { + d.log.Crit("unexpected TryBackupUnsafeReorg error after no FCU call", "err", err) + } + if err != nil { + // If we needed to perform a network call, then we should yield even if we did not encounter an error. + if errors.Is(err, derive.ErrReset) { + d.emitter.Emit(rollup.ResetEvent{Err: err}) + } else if errors.Is(err, derive.ErrTemporary) { + d.emitter.Emit(rollup.EngineTemporaryErrorEvent{Err: err}) + } else { + d.emitter.Emit(rollup.CriticalErrorEvent{Err: fmt.Errorf("unexpected TryBackupUnsafeReorg error type: %w", err)}) + } + } + case TryUpdateEngineEvent: + // If we don't need to call FCU, keep going b/c this was a no-op. If we needed to + // perform a network call, then we should yield even if we did not encounter an error. + if err := d.ec.TryUpdateEngine(d.ctx); err != nil && !errors.Is(err, ErrNoFCUNeeded) { + if errors.Is(err, derive.ErrReset) { + d.emitter.Emit(rollup.ResetEvent{Err: err}) + } else if errors.Is(err, derive.ErrTemporary) { + d.emitter.Emit(rollup.EngineTemporaryErrorEvent{Err: err}) + } else { + d.emitter.Emit(rollup.CriticalErrorEvent{Err: fmt.Errorf("unexpected TryUpdateEngine error type: %w", err)}) + } + } + } +} diff --git a/op-node/rollup/events.go b/op-node/rollup/events.go new file mode 100644 index 000000000000..d973afdd59ef --- /dev/null +++ b/op-node/rollup/events.go @@ -0,0 +1,82 @@ +package rollup + +import "github.com/ethereum/go-ethereum/log" + +type Event interface { + String() string +} + +type Deriver interface { + OnEvent(ev Event) +} + +type EventEmitter interface { + Emit(ev Event) +} + +type EmitterFunc func(ev Event) + +func (fn EmitterFunc) Emit(ev Event) { + fn(ev) +} + +type EngineTemporaryErrorEvent struct { + Err error +} + +var _ Event = EngineTemporaryErrorEvent{} + +func (ev EngineTemporaryErrorEvent) String() string { + return "engine-temporary-error" +} + +type ResetEvent struct { + Err error +} + +var _ Event = ResetEvent{} + +func (ev ResetEvent) String() string { + return "reset-event" +} + +type CriticalErrorEvent struct { + Err error +} + +var _ Event = CriticalErrorEvent{} + +func (ev CriticalErrorEvent) String() string { + return "critical-error" +} + +type SynchronousDerivers []Deriver + +func (s *SynchronousDerivers) OnEvent(ev Event) { + for _, d := range *s { + d.OnEvent(ev) + } +} + +var _ Deriver = (*SynchronousDerivers)(nil) + +type DebugDeriver struct { + Log log.Logger +} + +func (d DebugDeriver) OnEvent(ev Event) { + d.Log.Debug("on-event", "event", ev) +} + +type NoopDeriver struct{} + +func (d NoopDeriver) OnEvent(ev Event) {} + +// DeriverFunc implements the Deriver interface as a function, +// similar to how the std-lib http HandlerFunc implements a Handler. +// This can be used for small in-place derivers, test helpers, etc. +type DeriverFunc func(ev Event) + +func (fn DeriverFunc) OnEvent(ev Event) { + fn(ev) +} diff --git a/op-node/rollup/events_test.go b/op-node/rollup/events_test.go new file mode 100644 index 000000000000..d405883d3cce --- /dev/null +++ b/op-node/rollup/events_test.go @@ -0,0 +1,50 @@ +package rollup + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/require" +) + +type TestEvent struct{} + +func (ev TestEvent) String() string { + return "X" +} + +func TestSynchronousDerivers_OnEvent(t *testing.T) { + result := "" + a := DeriverFunc(func(ev Event) { + result += fmt.Sprintf("A:%s\n", ev) + }) + b := DeriverFunc(func(ev Event) { + result += fmt.Sprintf("B:%s\n", ev) + }) + c := DeriverFunc(func(ev Event) { + result += fmt.Sprintf("C:%s\n", ev) + }) + + x := SynchronousDerivers{} + x.OnEvent(TestEvent{}) + require.Equal(t, "", result) + + x = SynchronousDerivers{a} + x.OnEvent(TestEvent{}) + require.Equal(t, "A:X\n", result) + + result = "" + x = SynchronousDerivers{a, a} + x.OnEvent(TestEvent{}) + require.Equal(t, "A:X\nA:X\n", result) + + result = "" + x = SynchronousDerivers{a, b} + x.OnEvent(TestEvent{}) + require.Equal(t, "A:X\nB:X\n", result) + + result = "" + x = SynchronousDerivers{a, b, c} + x.OnEvent(TestEvent{}) + require.Equal(t, "A:X\nB:X\nC:X\n", result) +} diff --git a/op-service/safego/nocopy.go b/op-service/safego/nocopy.go new file mode 100644 index 000000000000..1b7e6e89f9cc --- /dev/null +++ b/op-service/safego/nocopy.go @@ -0,0 +1,29 @@ +package safego + +// NoCopy is a super simple safety util taken from the Go atomic lib. +// +// NoCopy may be added to structs which must not be copied +// after the first use. +// +// The NoCopy struct is empty, so should be a zero-cost util at runtime. +// +// See https://golang.org/issues/8005#issuecomment-190753527 +// for details. +// +// Note that it must not be embedded, due to the Lock and Unlock methods. +// +// Like: +// ``` +// +// type Example { +// V uint64 +// _ NoCopy +// } +// +// Then run: `go vet -copylocks .` +// ``` +type NoCopy struct{} + +// Lock is a no-op used by -copylocks checker from `go vet`. +func (*NoCopy) Lock() {} +func (*NoCopy) Unlock() {} diff --git a/op-service/testutils/metrics.go b/op-service/testutils/metrics.go index 79e575cab1e2..19e2baf85f25 100644 --- a/op-service/testutils/metrics.go +++ b/op-service/testutils/metrics.go @@ -69,3 +69,6 @@ func (n *TestRPCMetrics) RecordRPCClientRequest(method string) func(err error) { func (n *TestRPCMetrics) RecordRPCClientResponse(method string, err error) {} func (t *TestDerivationMetrics) SetDerivationIdle(idle bool) {} + +func (t *TestDerivationMetrics) RecordPipelineReset() { +} From 55b67e015b3bcc81a0a966bcb0cbaeeb1621fdaa Mon Sep 17 00:00:00 2001 From: protolambda Date: Mon, 17 Jun 2024 20:44:32 +0200 Subject: [PATCH 053/141] op-supervisor: initial service draft (#10703) * op-supervisor: initial service draft * supervisor: Fix log capitalization * op-supervisor: fix mockrun flag * op-supervisor: CLI tests --------- Co-authored-by: Adrian Sutton --- op-supervisor/cmd/main.go | 56 ++++++ op-supervisor/cmd/main_test.go | 112 +++++++++++ op-supervisor/flags/flags.go | 64 ++++++ op-supervisor/flags/flags_test.go | 89 +++++++++ op-supervisor/metrics/metrics.go | 84 ++++++++ op-supervisor/metrics/noop.go | 16 ++ op-supervisor/supervisor/backend/backend.go | 60 ++++++ op-supervisor/supervisor/backend/config.go | 5 + op-supervisor/supervisor/backend/mock.go | 52 +++++ op-supervisor/supervisor/cli_config.go | 59 ++++++ op-supervisor/supervisor/cli_config_test.go | 12 ++ op-supervisor/supervisor/entrypoint.go | 38 ++++ op-supervisor/supervisor/frontend/frontend.go | 54 +++++ op-supervisor/supervisor/service.go | 189 ++++++++++++++++++ op-supervisor/supervisor/service_test.go | 72 +++++++ op-supervisor/supervisor/types/types.go | 55 +++++ 16 files changed, 1017 insertions(+) create mode 100644 op-supervisor/cmd/main.go create mode 100644 op-supervisor/cmd/main_test.go create mode 100644 op-supervisor/flags/flags.go create mode 100644 op-supervisor/flags/flags_test.go create mode 100644 op-supervisor/metrics/metrics.go create mode 100644 op-supervisor/metrics/noop.go create mode 100644 op-supervisor/supervisor/backend/backend.go create mode 100644 op-supervisor/supervisor/backend/config.go create mode 100644 op-supervisor/supervisor/backend/mock.go create mode 100644 op-supervisor/supervisor/cli_config.go create mode 100644 op-supervisor/supervisor/cli_config_test.go create mode 100644 op-supervisor/supervisor/entrypoint.go create mode 100644 op-supervisor/supervisor/frontend/frontend.go create mode 100644 op-supervisor/supervisor/service.go create mode 100644 op-supervisor/supervisor/service_test.go create mode 100644 op-supervisor/supervisor/types/types.go diff --git a/op-supervisor/cmd/main.go b/op-supervisor/cmd/main.go new file mode 100644 index 000000000000..9ad91994ad2d --- /dev/null +++ b/op-supervisor/cmd/main.go @@ -0,0 +1,56 @@ +package main + +import ( + "context" + "os" + + "github.com/urfave/cli/v2" + + "github.com/ethereum/go-ethereum/log" + + opservice "github.com/ethereum-optimism/optimism/op-service" + "github.com/ethereum-optimism/optimism/op-service/cliapp" + oplog "github.com/ethereum-optimism/optimism/op-service/log" + "github.com/ethereum-optimism/optimism/op-service/metrics/doc" + "github.com/ethereum-optimism/optimism/op-service/opio" + "github.com/ethereum-optimism/optimism/op-supervisor/flags" + "github.com/ethereum-optimism/optimism/op-supervisor/metrics" + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor" +) + +var ( + Version = "v0.0.1" + GitCommit = "" + GitDate = "" +) + +func main() { + ctx := opio.WithInterruptBlocker(context.Background()) + err := run(ctx, os.Args, fromConfig) + if err != nil { + log.Crit("Application failed", "message", err) + } +} + +func run(ctx context.Context, args []string, fn supervisor.MainFn) error { + oplog.SetupDefaults() + + app := cli.NewApp() + app.Flags = cliapp.ProtectFlags(flags.Flags) + app.Version = opservice.FormatVersion(Version, GitCommit, GitDate, "") + app.Name = "op-supervisor" + app.Usage = "op-supervisor monitors cross-L2 interop messaging" + app.Description = "The op-supervisor monitors cross-L2 interop messaging by pre-fetching events and then resolving the cross-L2 dependencies to answer safety queries." + app.Action = cliapp.LifecycleCmd(supervisor.Main(Version, fn)) + app.Commands = []*cli.Command{ + { + Name: "doc", + Subcommands: doc.NewSubcommands(metrics.NewMetrics("default")), + }, + } + return app.RunContext(ctx, args) +} + +func fromConfig(ctx context.Context, cfg *supervisor.CLIConfig, logger log.Logger) (cliapp.Lifecycle, error) { + return supervisor.SupervisorFromCLIConfig(ctx, cfg, logger) +} diff --git a/op-supervisor/cmd/main_test.go b/op-supervisor/cmd/main_test.go new file mode 100644 index 000000000000..4ab3aa2fdc61 --- /dev/null +++ b/op-supervisor/cmd/main_test.go @@ -0,0 +1,112 @@ +package main + +import ( + "context" + "errors" + "fmt" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/ethereum/go-ethereum/log" + + "github.com/ethereum-optimism/optimism/op-service/cliapp" + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor" +) + +func TestLogLevel(t *testing.T) { + t.Run("RejectInvalid", func(t *testing.T) { + verifyArgsInvalid(t, "unknown level: foo", addRequiredArgs("--log.level=foo")) + }) + + for _, lvl := range []string{"trace", "debug", "info", "error", "crit"} { + lvl := lvl + t.Run("AcceptValid_"+lvl, func(t *testing.T) { + logger, _, err := dryRunWithArgs(addRequiredArgs("--log.level", lvl)) + require.NoError(t, err) + require.NotNil(t, logger) + }) + } +} + +func TestDefaultCLIOptionsMatchDefaultConfig(t *testing.T) { + cfg := configForArgs(t, addRequiredArgs()) + defaultCfgTempl := supervisor.DefaultCLIConfig() + defaultCfg := *defaultCfgTempl + defaultCfg.Version = Version + require.Equal(t, defaultCfg, *cfg) +} + +func TestL2RPCs(t *testing.T) { + t.Run("Required", func(t *testing.T) { + verifyArgsInvalid(t, "flag l2-rpcs is required", addRequiredArgsExcept("--l2-rpcs")) + }) + + t.Run("Valid", func(t *testing.T) { + url1 := "http://example.com:1234" + url2 := "http://foobar.com:1234" + cfg := configForArgs(t, addRequiredArgsExcept("--l2-rpcs", "--l2-rpcs="+url1+","+url2)) + require.Equal(t, []string{url1, url2}, cfg.L2RPCs) + }) +} + +func TestMockRun(t *testing.T) { + t.Run("Valid", func(t *testing.T) { + cfg := configForArgs(t, addRequiredArgs("--mock-run")) + require.Equal(t, true, cfg.MockRun) + }) +} + +func verifyArgsInvalid(t *testing.T, messageContains string, cliArgs []string) { + _, _, err := dryRunWithArgs(cliArgs) + require.ErrorContains(t, err, messageContains) +} + +func configForArgs(t *testing.T, cliArgs []string) *supervisor.CLIConfig { + _, cfg, err := dryRunWithArgs(cliArgs) + require.NoError(t, err) + return cfg +} + +func dryRunWithArgs(cliArgs []string) (log.Logger, *supervisor.CLIConfig, error) { + cfg := new(supervisor.CLIConfig) + var logger log.Logger + fullArgs := append([]string{"op-supervisor"}, cliArgs...) + testErr := errors.New("dry-run") + err := run(context.Background(), fullArgs, func(ctx context.Context, config *supervisor.CLIConfig, log log.Logger) (cliapp.Lifecycle, error) { + logger = log + cfg = config + return nil, testErr + }) + if errors.Is(err, testErr) { // expected error + err = nil + } + return logger, cfg, err +} + +func addRequiredArgs(args ...string) []string { + req := requiredArgs() + combined := toArgList(req) + return append(combined, args...) +} + +func addRequiredArgsExcept(name string, optionalArgs ...string) []string { + req := requiredArgs() + delete(req, name) + return append(toArgList(req), optionalArgs...) +} + +func toArgList(req map[string]string) []string { + var combined []string + for name, value := range req { + combined = append(combined, fmt.Sprintf("%s=%s", name, value)) + } + return combined +} + +func requiredArgs() map[string]string { + args := map[string]string{ + "--l2-rpcs": "http://localhost:8545", + } + return args +} diff --git a/op-supervisor/flags/flags.go b/op-supervisor/flags/flags.go new file mode 100644 index 000000000000..774a54f6a7bf --- /dev/null +++ b/op-supervisor/flags/flags.go @@ -0,0 +1,64 @@ +package flags + +import ( + "fmt" + + "github.com/urfave/cli/v2" + + opservice "github.com/ethereum-optimism/optimism/op-service" + oplog "github.com/ethereum-optimism/optimism/op-service/log" + opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics" + "github.com/ethereum-optimism/optimism/op-service/oppprof" + oprpc "github.com/ethereum-optimism/optimism/op-service/rpc" +) + +const EnvVarPrefix = "OP_SUPERVISOR" + +func prefixEnvVars(name string) []string { + return opservice.PrefixEnvVar(EnvVarPrefix, name) +} + +var ( + L2RPCsFlag = &cli.StringSliceFlag{ + Name: "l2-rpcs", + Usage: "L2 RPC sources.", + EnvVars: prefixEnvVars("L2_RPCS"), + Value: cli.NewStringSlice("http://localhost:8545"), + } + MockRunFlag = &cli.BoolFlag{ + Name: "mock-run", + Usage: "Mock run, no actual backend used, just presenting the service", + EnvVars: prefixEnvVars("MOCK_RUN"), + Hidden: true, // this is for testing only + } +) + +var requiredFlags = []cli.Flag{ + L2RPCsFlag, +} + +var optionalFlags = []cli.Flag{ + MockRunFlag, +} + +func init() { + optionalFlags = append(optionalFlags, oprpc.CLIFlags(EnvVarPrefix)...) + optionalFlags = append(optionalFlags, oplog.CLIFlags(EnvVarPrefix)...) + optionalFlags = append(optionalFlags, opmetrics.CLIFlags(EnvVarPrefix)...) + optionalFlags = append(optionalFlags, oppprof.CLIFlags(EnvVarPrefix)...) + + Flags = append(Flags, requiredFlags...) + Flags = append(Flags, optionalFlags...) +} + +// Flags contains the list of configuration options available to the binary. +var Flags []cli.Flag + +func CheckRequired(ctx *cli.Context) error { + for _, f := range requiredFlags { + if !ctx.IsSet(f.Names()[0]) { + return fmt.Errorf("flag %s is required", f.Names()[0]) + } + } + return nil +} diff --git a/op-supervisor/flags/flags_test.go b/op-supervisor/flags/flags_test.go new file mode 100644 index 000000000000..504d9c8644da --- /dev/null +++ b/op-supervisor/flags/flags_test.go @@ -0,0 +1,89 @@ +package flags + +import ( + "strings" + "testing" + + "github.com/stretchr/testify/require" + "github.com/urfave/cli/v2" + + opservice "github.com/ethereum-optimism/optimism/op-service" +) + +// TestOptionalFlagsDontSetRequired asserts that all flags deemed optional set +// the Required field to false. +func TestOptionalFlagsDontSetRequired(t *testing.T) { + for _, flag := range optionalFlags { + reqFlag, ok := flag.(cli.RequiredFlag) + require.True(t, ok) + require.False(t, reqFlag.IsRequired()) + } +} + +// TestUniqueFlags asserts that all flag names are unique, to avoid accidental conflicts between the many flags. +func TestUniqueFlags(t *testing.T) { + seenCLI := make(map[string]struct{}) + for _, flag := range Flags { + for _, name := range flag.Names() { + if _, ok := seenCLI[name]; ok { + t.Errorf("duplicate flag %s", name) + continue + } + seenCLI[name] = struct{}{} + } + } +} + +// TestBetaFlags test that all flags starting with "beta." have "BETA_" in the env var, and vice versa. +func TestBetaFlags(t *testing.T) { + for _, flag := range Flags { + envFlag, ok := flag.(interface { + GetEnvVars() []string + }) + if !ok || len(envFlag.GetEnvVars()) == 0 { // skip flags without env-var support + continue + } + name := flag.Names()[0] + envName := envFlag.GetEnvVars()[0] + if strings.HasPrefix(name, "beta.") { + require.Contains(t, envName, "BETA_", "%q flag must contain BETA in env var to match \"beta.\" flag name", name) + } + if strings.Contains(envName, "BETA_") { + require.True(t, strings.HasPrefix(name, "beta."), "%q flag must start with \"beta.\" in flag name to match \"BETA_\" env var", name) + } + } +} + +func TestHasEnvVar(t *testing.T) { + for _, flag := range Flags { + flag := flag + flagName := flag.Names()[0] + + t.Run(flagName, func(t *testing.T) { + envFlagGetter, ok := flag.(interface { + GetEnvVars() []string + }) + envFlags := envFlagGetter.GetEnvVars() + require.True(t, ok, "must be able to cast the flag to an EnvVar interface") + require.Equal(t, 1, len(envFlags), "flags should have exactly one env var") + }) + } +} + +func TestEnvVarFormat(t *testing.T) { + for _, flag := range Flags { + flag := flag + flagName := flag.Names()[0] + + t.Run(flagName, func(t *testing.T) { + envFlagGetter, ok := flag.(interface { + GetEnvVars() []string + }) + envFlags := envFlagGetter.GetEnvVars() + require.True(t, ok, "must be able to cast the flag to an EnvVar interface") + require.Equal(t, 1, len(envFlags), "flags should have exactly one env var") + expectedEnvVar := opservice.FlagNameToEnvVarName(flagName, "OP_SUPERVISOR") + require.Equal(t, expectedEnvVar, envFlags[0]) + }) + } +} diff --git a/op-supervisor/metrics/metrics.go b/op-supervisor/metrics/metrics.go new file mode 100644 index 000000000000..b659e71b95fa --- /dev/null +++ b/op-supervisor/metrics/metrics.go @@ -0,0 +1,84 @@ +package metrics + +import ( + "github.com/prometheus/client_golang/prometheus" + + opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics" +) + +const Namespace = "op_supervisor" + +type Metricer interface { + RecordInfo(version string) + RecordUp() + + opmetrics.RPCMetricer + + Document() []opmetrics.DocumentedMetric +} + +type Metrics struct { + ns string + registry *prometheus.Registry + factory opmetrics.Factory + + opmetrics.RPCMetrics + + info prometheus.GaugeVec + up prometheus.Gauge +} + +var _ Metricer = (*Metrics)(nil) + +// implements the Registry getter, for metrics HTTP server to hook into +var _ opmetrics.RegistryMetricer = (*Metrics)(nil) + +func NewMetrics(procName string) *Metrics { + if procName == "" { + procName = "default" + } + ns := Namespace + "_" + procName + + registry := opmetrics.NewRegistry() + factory := opmetrics.With(registry) + + return &Metrics{ + ns: ns, + registry: registry, + factory: factory, + + RPCMetrics: opmetrics.MakeRPCMetrics(ns, factory), + + info: *factory.NewGaugeVec(prometheus.GaugeOpts{ + Namespace: ns, + Name: "info", + Help: "Pseudo-metric tracking version and config info", + }, []string{ + "version", + }), + up: factory.NewGauge(prometheus.GaugeOpts{ + Namespace: ns, + Name: "up", + Help: "1 if the op-supervisor has finished starting up", + }), + } +} + +func (m *Metrics) Registry() *prometheus.Registry { + return m.registry +} + +func (m *Metrics) Document() []opmetrics.DocumentedMetric { + return m.factory.Document() +} + +// RecordInfo sets a pseudo-metric that contains versioning and config info for the op-supervisor. +func (m *Metrics) RecordInfo(version string) { + m.info.WithLabelValues(version).Set(1) +} + +// RecordUp sets the up metric to 1. +func (m *Metrics) RecordUp() { + prometheus.MustRegister() + m.up.Set(1) +} diff --git a/op-supervisor/metrics/noop.go b/op-supervisor/metrics/noop.go new file mode 100644 index 000000000000..f87e75a1116c --- /dev/null +++ b/op-supervisor/metrics/noop.go @@ -0,0 +1,16 @@ +package metrics + +import ( + opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics" +) + +type noopMetrics struct { + opmetrics.NoopRPCMetrics +} + +var NoopMetrics Metricer = new(noopMetrics) + +func (*noopMetrics) Document() []opmetrics.DocumentedMetric { return nil } + +func (*noopMetrics) RecordInfo(version string) {} +func (*noopMetrics) RecordUp() {} diff --git a/op-supervisor/supervisor/backend/backend.go b/op-supervisor/supervisor/backend/backend.go new file mode 100644 index 000000000000..074d498f4e52 --- /dev/null +++ b/op-supervisor/supervisor/backend/backend.go @@ -0,0 +1,60 @@ +package backend + +import ( + "context" + "errors" + "io" + "sync/atomic" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/frontend" + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/types" +) + +type SupervisorBackend struct { + started atomic.Bool + + // TODO(protocol-quest#287): collection of logdbs per chain + // TODO(protocol-quest#288): collection of logdb updating services per chain +} + +var _ frontend.Backend = (*SupervisorBackend)(nil) + +var _ io.Closer = (*SupervisorBackend)(nil) + +func NewSupervisorBackend() *SupervisorBackend { + return &SupervisorBackend{} +} + +func (su *SupervisorBackend) Start(ctx context.Context) error { + if !su.started.CompareAndSwap(false, true) { + return errors.New("already started") + } + // TODO(protocol-quest#288): start logdb updating services of all chains + return nil +} + +func (su *SupervisorBackend) Stop(ctx context.Context) error { + if !su.started.CompareAndSwap(true, false) { + return errors.New("already stopped") + } + // TODO(protocol-quest#288): stop logdb updating services of all chains + return nil +} + +func (su *SupervisorBackend) Close() error { + // TODO(protocol-quest#288): close logdb of all chains + return nil +} + +func (su *SupervisorBackend) CheckMessage(identifier types.Identifier, payloadHash common.Hash) (types.SafetyLevel, error) { + // TODO(protocol-quest#288): hook up to logdb lookup + return types.CrossUnsafe, nil +} + +func (su *SupervisorBackend) CheckBlock(chainID *hexutil.U256, blockHash common.Hash, blockNumber hexutil.Uint64) (types.SafetyLevel, error) { + // TODO(protocol-quest#288): hook up to logdb lookup + return types.CrossUnsafe, nil +} diff --git a/op-supervisor/supervisor/backend/config.go b/op-supervisor/supervisor/backend/config.go new file mode 100644 index 000000000000..efe2f4463c91 --- /dev/null +++ b/op-supervisor/supervisor/backend/config.go @@ -0,0 +1,5 @@ +package backend + +type Config struct { + // TODO(protocol-quest#288): configure list of chains and their RPC endpoints / potential alternative data sources +} diff --git a/op-supervisor/supervisor/backend/mock.go b/op-supervisor/supervisor/backend/mock.go new file mode 100644 index 000000000000..8e5bc95632c2 --- /dev/null +++ b/op-supervisor/supervisor/backend/mock.go @@ -0,0 +1,52 @@ +package backend + +import ( + "context" + "errors" + "io" + "sync/atomic" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/frontend" + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/types" +) + +type MockBackend struct { + started atomic.Bool +} + +var _ frontend.Backend = (*MockBackend)(nil) + +var _ io.Closer = (*MockBackend)(nil) + +func NewMockBackend() *MockBackend { + return &MockBackend{} +} + +func (m *MockBackend) Start(ctx context.Context) error { + if !m.started.CompareAndSwap(false, true) { + return errors.New("already started") + } + return nil +} + +func (m *MockBackend) Stop(ctx context.Context) error { + if !m.started.CompareAndSwap(true, false) { + return errors.New("already stopped") + } + return nil +} + +func (m *MockBackend) CheckMessage(identifier types.Identifier, payloadHash common.Hash) (types.SafetyLevel, error) { + return types.CrossUnsafe, nil +} + +func (m *MockBackend) CheckBlock(chainID *hexutil.U256, blockHash common.Hash, blockNumber hexutil.Uint64) (types.SafetyLevel, error) { + return types.CrossUnsafe, nil +} + +func (m *MockBackend) Close() error { + return nil +} diff --git a/op-supervisor/supervisor/cli_config.go b/op-supervisor/supervisor/cli_config.go new file mode 100644 index 000000000000..057ea00bf1c7 --- /dev/null +++ b/op-supervisor/supervisor/cli_config.go @@ -0,0 +1,59 @@ +package supervisor + +import ( + "errors" + + "github.com/urfave/cli/v2" + + oplog "github.com/ethereum-optimism/optimism/op-service/log" + opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics" + "github.com/ethereum-optimism/optimism/op-service/oppprof" + oprpc "github.com/ethereum-optimism/optimism/op-service/rpc" + "github.com/ethereum-optimism/optimism/op-supervisor/flags" +) + +type CLIConfig struct { + Version string + + LogConfig oplog.CLIConfig + MetricsConfig opmetrics.CLIConfig + PprofConfig oppprof.CLIConfig + RPC oprpc.CLIConfig + + // MockRun runs the service with a mock backend + MockRun bool + + L2RPCs []string +} + +func CLIConfigFromCLI(ctx *cli.Context, version string) *CLIConfig { + return &CLIConfig{ + Version: version, + LogConfig: oplog.ReadCLIConfig(ctx), + MetricsConfig: opmetrics.ReadCLIConfig(ctx), + PprofConfig: oppprof.ReadCLIConfig(ctx), + RPC: oprpc.ReadCLIConfig(ctx), + MockRun: ctx.Bool(flags.MockRunFlag.Name), + L2RPCs: ctx.StringSlice(flags.L2RPCsFlag.Name), + } +} + +func (c *CLIConfig) Check() error { + var result error + result = errors.Join(result, c.MetricsConfig.Check()) + result = errors.Join(result, c.PprofConfig.Check()) + result = errors.Join(result, c.RPC.Check()) + return result +} + +func DefaultCLIConfig() *CLIConfig { + return &CLIConfig{ + Version: "", + LogConfig: oplog.DefaultCLIConfig(), + MetricsConfig: opmetrics.DefaultCLIConfig(), + PprofConfig: oppprof.DefaultCLIConfig(), + RPC: oprpc.DefaultCLIConfig(), + MockRun: false, + L2RPCs: flags.L2RPCsFlag.Value.Value(), + } +} diff --git a/op-supervisor/supervisor/cli_config_test.go b/op-supervisor/supervisor/cli_config_test.go new file mode 100644 index 000000000000..09007ead0b98 --- /dev/null +++ b/op-supervisor/supervisor/cli_config_test.go @@ -0,0 +1,12 @@ +package supervisor + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestDefaultConfigIsValid(t *testing.T) { + cfg := DefaultCLIConfig() + require.NoError(t, cfg.Check()) +} diff --git a/op-supervisor/supervisor/entrypoint.go b/op-supervisor/supervisor/entrypoint.go new file mode 100644 index 000000000000..08b72e3744e2 --- /dev/null +++ b/op-supervisor/supervisor/entrypoint.go @@ -0,0 +1,38 @@ +package supervisor + +import ( + "context" + "fmt" + + "github.com/urfave/cli/v2" + + "github.com/ethereum/go-ethereum/log" + + opservice "github.com/ethereum-optimism/optimism/op-service" + "github.com/ethereum-optimism/optimism/op-service/cliapp" + oplog "github.com/ethereum-optimism/optimism/op-service/log" + "github.com/ethereum-optimism/optimism/op-supervisor/flags" +) + +type MainFn func(ctx context.Context, cfg *CLIConfig, logger log.Logger) (cliapp.Lifecycle, error) + +// Main is the entrypoint into the Supervisor. +// This method returns a cliapp.LifecycleAction, to create an op-service CLI-lifecycle-managed supervisor with. +func Main(version string, fn MainFn) cliapp.LifecycleAction { + return func(cliCtx *cli.Context, closeApp context.CancelCauseFunc) (cliapp.Lifecycle, error) { + if err := flags.CheckRequired(cliCtx); err != nil { + return nil, err + } + cfg := CLIConfigFromCLI(cliCtx, version) + if err := cfg.Check(); err != nil { + return nil, fmt.Errorf("invalid CLI flags: %w", err) + } + + l := oplog.NewLogger(oplog.AppOut(cliCtx), cfg.LogConfig) + oplog.SetGlobalLogHandler(l.Handler()) + opservice.ValidateEnvVars(flags.EnvVarPrefix, flags.Flags, l) + + l.Info("Initializing Supervisor") + return fn(cliCtx.Context, cfg, l) + } +} diff --git a/op-supervisor/supervisor/frontend/frontend.go b/op-supervisor/supervisor/frontend/frontend.go new file mode 100644 index 000000000000..9804b406914a --- /dev/null +++ b/op-supervisor/supervisor/frontend/frontend.go @@ -0,0 +1,54 @@ +package frontend + +import ( + "context" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/types" +) + +type AdminBackend interface { + Start(ctx context.Context) error + Stop(ctx context.Context) error +} + +type QueryBackend interface { + CheckMessage(identifier types.Identifier, payloadHash common.Hash) (types.SafetyLevel, error) + CheckBlock(chainID *hexutil.U256, blockHash common.Hash, blockNumber hexutil.Uint64) (types.SafetyLevel, error) +} + +type Backend interface { + AdminBackend + QueryBackend +} + +type QueryFrontend struct { + Supervisor QueryBackend +} + +// CheckMessage checks the safety-level of an individual message. +// The payloadHash references the hash of the message-payload of the message. +func (q *QueryFrontend) CheckMessage(identifier types.Identifier, payloadHash common.Hash) (types.SafetyLevel, error) { + return q.Supervisor.CheckMessage(identifier, payloadHash) +} + +// CheckBlock checks the safety-level of an L2 block as a whole. +func (q *QueryFrontend) CheckBlock(chainID *hexutil.U256, blockHash common.Hash, blockNumber hexutil.Uint64) (types.SafetyLevel, error) { + return q.Supervisor.CheckBlock(chainID, blockHash, blockNumber) +} + +type AdminFrontend struct { + Supervisor Backend +} + +// Start starts the service, if it was previously stopped. +func (a *AdminFrontend) Start(ctx context.Context) error { + return a.Supervisor.Start(ctx) +} + +// Stop stops the service, if it was previously started. +func (a *AdminFrontend) Stop(ctx context.Context) error { + return a.Supervisor.Stop(ctx) +} diff --git a/op-supervisor/supervisor/service.go b/op-supervisor/supervisor/service.go new file mode 100644 index 000000000000..f0792aabdd59 --- /dev/null +++ b/op-supervisor/supervisor/service.go @@ -0,0 +1,189 @@ +package supervisor + +import ( + "context" + "errors" + "fmt" + "io" + "sync/atomic" + + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rpc" + + "github.com/ethereum-optimism/optimism/op-service/cliapp" + "github.com/ethereum-optimism/optimism/op-service/httputil" + opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics" + "github.com/ethereum-optimism/optimism/op-service/oppprof" + oprpc "github.com/ethereum-optimism/optimism/op-service/rpc" + "github.com/ethereum-optimism/optimism/op-supervisor/metrics" + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend" + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/frontend" +) + +type Backend interface { + frontend.Backend + io.Closer +} + +// SupervisorService implements the full-environment bells and whistles around the Supervisor. +// This includes the setup and teardown of metrics, pprof, admin RPC, regular RPC etc. +type SupervisorService struct { + closing atomic.Bool + + log log.Logger + + metrics metrics.Metricer + + backend Backend + + pprofService *oppprof.Service + metricsSrv *httputil.HTTPServer + rpcServer *oprpc.Server +} + +var _ cliapp.Lifecycle = (*SupervisorService)(nil) + +func SupervisorFromCLIConfig(ctx context.Context, cfg *CLIConfig, logger log.Logger) (*SupervisorService, error) { + su := &SupervisorService{log: logger} + if err := su.initFromCLIConfig(ctx, cfg); err != nil { + return nil, errors.Join(err, su.Stop(ctx)) // try to clean up our failed initialization attempt + } + return su, nil +} + +func (su *SupervisorService) initFromCLIConfig(ctx context.Context, cfg *CLIConfig) error { + su.initMetrics(cfg) + if err := su.initPProf(cfg); err != nil { + return fmt.Errorf("failed to start PProf server: %w", err) + } + if err := su.initMetricsServer(cfg); err != nil { + return fmt.Errorf("failed to start Metrics server: %w", err) + } + su.initBackend(cfg) + if err := su.initRPCServer(cfg); err != nil { + return fmt.Errorf("failed to start RPC server: %w", err) + } + return nil +} + +func (su *SupervisorService) initBackend(cfg *CLIConfig) { + if cfg.MockRun { + su.backend = backend.NewMockBackend() + } else { + su.backend = backend.NewSupervisorBackend() + } +} + +func (su *SupervisorService) initMetrics(cfg *CLIConfig) { + if cfg.MetricsConfig.Enabled { + procName := "default" + su.metrics = metrics.NewMetrics(procName) + su.metrics.RecordInfo(cfg.Version) + } else { + su.metrics = metrics.NoopMetrics + } +} + +func (su *SupervisorService) initPProf(cfg *CLIConfig) error { + su.pprofService = oppprof.New( + cfg.PprofConfig.ListenEnabled, + cfg.PprofConfig.ListenAddr, + cfg.PprofConfig.ListenPort, + cfg.PprofConfig.ProfileType, + cfg.PprofConfig.ProfileDir, + cfg.PprofConfig.ProfileFilename, + ) + + if err := su.pprofService.Start(); err != nil { + return fmt.Errorf("failed to start pprof service: %w", err) + } + + return nil +} + +func (su *SupervisorService) initMetricsServer(cfg *CLIConfig) error { + if !cfg.MetricsConfig.Enabled { + su.log.Info("Metrics disabled") + return nil + } + m, ok := su.metrics.(opmetrics.RegistryMetricer) + if !ok { + return fmt.Errorf("metrics were enabled, but metricer %T does not expose registry for metrics-server", su.metrics) + } + su.log.Debug("Starting metrics server", "addr", cfg.MetricsConfig.ListenAddr, "port", cfg.MetricsConfig.ListenPort) + metricsSrv, err := opmetrics.StartServer(m.Registry(), cfg.MetricsConfig.ListenAddr, cfg.MetricsConfig.ListenPort) + if err != nil { + return fmt.Errorf("failed to start metrics server: %w", err) + } + su.log.Info("Started metrics server", "addr", metricsSrv.Addr()) + su.metricsSrv = metricsSrv + return nil +} + +func (su *SupervisorService) initRPCServer(cfg *CLIConfig) error { + server := oprpc.NewServer( + cfg.RPC.ListenAddr, + cfg.RPC.ListenPort, + cfg.Version, + oprpc.WithLogger(su.log), + //oprpc.WithHTTPRecorder(su.metrics), // TODO(protocol-quest#286) hook up metrics to RPC server + ) + if cfg.RPC.EnableAdmin { + su.log.Info("Admin RPC enabled") + server.AddAPI(rpc.API{ + Namespace: "admin", + Service: &frontend.AdminFrontend{Supervisor: su.backend}, + Authenticated: true, // TODO(protocol-quest#286): enforce auth on this or not? + }) + } + server.AddAPI(rpc.API{ + Namespace: "supervisor", + Service: &frontend.QueryFrontend{Supervisor: su.backend}, + Authenticated: false, + }) + su.rpcServer = server + return nil +} + +func (su *SupervisorService) Start(ctx context.Context) error { + su.log.Info("Starting JSON-RPC server") + if err := su.rpcServer.Start(); err != nil { + return fmt.Errorf("unable to start RPC server: %w", err) + } + + su.metrics.RecordUp() + return nil +} + +func (su *SupervisorService) Stop(ctx context.Context) error { + if !su.closing.CompareAndSwap(false, true) { + return nil // already closing + } + + var result error + if su.rpcServer != nil { + if err := su.rpcServer.Stop(); err != nil { + result = errors.Join(result, fmt.Errorf("failed to stop RPC server: %w", err)) + } + } + if su.backend != nil { + if err := su.backend.Close(); err != nil { + result = errors.Join(result, fmt.Errorf("failed to close supervisor backend: %w", err)) + } + } + if su.pprofService != nil { + if err := su.pprofService.Stop(ctx); err != nil { + result = errors.Join(result, fmt.Errorf("failed to stop PProf server: %w", err)) + } + } + if su.metricsSrv != nil { + if err := su.metricsSrv.Stop(ctx); err != nil { + result = errors.Join(result, fmt.Errorf("failed to stop metrics server: %w", err)) + } + } + return result +} + +func (su *SupervisorService) Stopped() bool { + return su.closing.Load() +} diff --git a/op-supervisor/supervisor/service_test.go b/op-supervisor/supervisor/service_test.go new file mode 100644 index 000000000000..72b7725adf3d --- /dev/null +++ b/op-supervisor/supervisor/service_test.go @@ -0,0 +1,72 @@ +package supervisor + +import ( + "context" + "testing" + "time" + + "github.com/holiman/uint256" + "github.com/stretchr/testify/require" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/log" + + "github.com/ethereum-optimism/optimism/op-service/dial" + oplog "github.com/ethereum-optimism/optimism/op-service/log" + opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics" + "github.com/ethereum-optimism/optimism/op-service/oppprof" + oprpc "github.com/ethereum-optimism/optimism/op-service/rpc" + "github.com/ethereum-optimism/optimism/op-service/testlog" + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/types" +) + +func TestSupervisorService(t *testing.T) { + cfg := &CLIConfig{ + Version: "", + LogConfig: oplog.CLIConfig{ + Level: log.LevelError, + Color: false, + Format: oplog.FormatLogFmt, + }, + MetricsConfig: opmetrics.CLIConfig{ + Enabled: true, + ListenAddr: "127.0.0.1", + ListenPort: 0, // pick a port automatically + }, + PprofConfig: oppprof.CLIConfig{ + ListenEnabled: true, + ListenAddr: "127.0.0.1", + ListenPort: 0, // pick a port automatically + ProfileType: "", + ProfileDir: "", + ProfileFilename: "", + }, + RPC: oprpc.CLIConfig{ + ListenAddr: "127.0.0.1", + ListenPort: 0, // pick a port automatically + EnableAdmin: true, + }, + MockRun: true, + } + logger := testlog.Logger(t, log.LevelError) + supervisor, err := SupervisorFromCLIConfig(context.Background(), cfg, logger) + require.NoError(t, err) + require.NoError(t, supervisor.Start(context.Background()), "start service") + // run some RPC tests against the service with the mock backend + { + endpoint := "http://" + supervisor.rpcServer.Endpoint() + t.Logf("dialing %s", endpoint) + cl, err := dial.DialRPCClientWithTimeout(context.Background(), time.Second*5, logger, endpoint) + require.NoError(t, err) + ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) + var dest types.SafetyLevel + err = cl.CallContext(ctx, &dest, "supervisor_checkBlock", + (*hexutil.U256)(uint256.NewInt(1)), common.Hash{0xab}, hexutil.Uint64(123)) + cancel() + require.NoError(t, err) + require.Equal(t, types.CrossUnsafe, dest, "expecting mock to return cross-unsafe") + cl.Close() + } + require.NoError(t, supervisor.Stop(context.Background()), "stop service") +} diff --git a/op-supervisor/supervisor/types/types.go b/op-supervisor/supervisor/types/types.go new file mode 100644 index 000000000000..4caf81704383 --- /dev/null +++ b/op-supervisor/supervisor/types/types.go @@ -0,0 +1,55 @@ +package types + +import ( + "errors" + "fmt" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" +) + +type Identifier struct { + Origin common.Address `json:"origin"` + BlockNumber hexutil.Uint64 `json:"blockNumber"` + LogIndex hexutil.Uint64 `json:"logIndex"` + Timestamp hexutil.Uint64 `json:"timestamp"` + ChainID hexutil.U256 `json:"chainID"` +} + +type SafetyLevel string + +func (lvl SafetyLevel) String() string { + return string(lvl) +} + +func (lvl SafetyLevel) Valid() bool { + switch lvl { + case Finalized, Safe, CrossUnsafe, Unsafe: + return true + default: + return false + } +} + +func (lvl SafetyLevel) MarshalText() ([]byte, error) { + return []byte(lvl), nil +} + +func (lvl *SafetyLevel) UnmarshalText(text []byte) error { + if lvl == nil { + return errors.New("cannot unmarshal into nil SafetyLevel") + } + x := SafetyLevel(text) + if !x.Valid() { + return fmt.Errorf("unrecognized safety level: %q", text) + } + *lvl = x + return nil +} + +const ( + Finalized SafetyLevel = "finalized" + Safe SafetyLevel = "safe" + CrossUnsafe SafetyLevel = "cross-unsafe" + Unsafe SafetyLevel = "unsafe" +) From 3c779b269744cc405455667bb2bf7e7919939deb Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Tue, 18 Jun 2024 04:47:29 +1000 Subject: [PATCH 054/141] challenger: Close bond claimer on shutdown. (#10841) --- op-challenger/game/service.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/op-challenger/game/service.go b/op-challenger/game/service.go index 587de9a366ab..65038ec549a2 100644 --- a/op-challenger/game/service.go +++ b/op-challenger/game/service.go @@ -281,6 +281,11 @@ func (s *Service) Stop(ctx context.Context) error { if s.monitor != nil { s.monitor.StopMonitoring() } + if s.claimer != nil { + if err := s.claimer.Close(); err != nil { + result = errors.Join(result, fmt.Errorf("failed to close claimer: %w", err)) + } + } if s.faultGamesCloser != nil { s.faultGamesCloser() } From de12c496ab0b23e530551b6aebcd1989dada8402 Mon Sep 17 00:00:00 2001 From: bsh98 <31482749+bsh98@users.noreply.github.com> Date: Mon, 17 Jun 2024 12:34:32 -0700 Subject: [PATCH 055/141] fix(op-node): clarify rethdb flag (#10635) --- op-node/flags/flags.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op-node/flags/flags.go b/op-node/flags/flags.go index 88d73d184ea6..59a7b0ef2de8 100644 --- a/op-node/flags/flags.go +++ b/op-node/flags/flags.go @@ -158,7 +158,7 @@ var ( } L1RethDBPath = &cli.StringFlag{ Name: "l1.rethdb", - Usage: "The L1 RethDB path, used to fetch receipts for L1 blocks. Only applicable when using the `reth_db` RPC kind with `l1.rpckind`.", + Usage: "The L1 RethDB path, used to fetch receipts for L1 blocks.", EnvVars: prefixEnvVars("L1_RETHDB"), Hidden: true, Category: L1RPCCategory, From aff6e8932545be5646cc72c1e87fab633c83e9db Mon Sep 17 00:00:00 2001 From: Matt Solomon Date: Mon, 17 Jun 2024 14:56:59 -0700 Subject: [PATCH 056/141] doc(ctb): Update style guide to define new versioning scheme (#10834) * doc: add smart contract versioning and release documentation * Update packages/contracts-bedrock/VERSIONING.md * Update packages/contracts-bedrock/VERSIONING.md * Update packages/contracts-bedrock/VERSIONING.md --- packages/contracts-bedrock/STYLE_GUIDE.md | 14 ++- packages/contracts-bedrock/VERSIONING.md | 128 ++++++++++++++++++++++ 2 files changed, 138 insertions(+), 4 deletions(-) create mode 100644 packages/contracts-bedrock/VERSIONING.md diff --git a/packages/contracts-bedrock/STYLE_GUIDE.md b/packages/contracts-bedrock/STYLE_GUIDE.md index a27d5b0e5721..cb6485c01ba2 100644 --- a/packages/contracts-bedrock/STYLE_GUIDE.md +++ b/packages/contracts-bedrock/STYLE_GUIDE.md @@ -110,23 +110,29 @@ pattern for each new implementation contract: ### Versioning -All (non-library and non-abstract) contracts MUST extend the `Semver` base contract which +All (non-library and non-abstract) contracts MUST inherit the `ISemver` interface which exposes a `version()` function that returns a semver-compliant version string. -Contracts must have a `Semver` of `1.0.0` or greater to be production ready. Contracts -with `Semver` values less than `1.0.0` should only be used locally or on devnets. +Contracts must have a `version` of `1.0.0` or greater to be production ready. -Additionally, contracts MUST use the following versioning scheme: +Additionally, contracts MUST use the following versioning scheme when incrementing their version: - `patch` releases are to be used only for changes that do NOT modify contract bytecode (such as updating comments). - `minor` releases are to be used for changes that modify bytecode OR changes that expand the contract ABI provided that these changes do NOT break the existing interface. - `major` releases are to be used for changes that break the existing contract interface OR changes that modify the security model of a contract. +The remainder of the contract versioning and release process can be found in [`VERSIONING.md](./VERSIONING.md). + #### Exceptions We have made an exception to the `Semver` rule for the `WETH` contract to avoid making changes to a well-known, simple, and recognizable contract. +Additionally, bumping the patch version does change the bytecode, so another exception is carved out for this. +In other words, changing comments increments the patch version, which changes bytecode. This bytecode +change implies a minor version increment is needed, but because it's just a version change, only a +patch increment should be used. + ### Dependencies Where basic functionality is already supported by an existing contract in the OpenZeppelin library, diff --git a/packages/contracts-bedrock/VERSIONING.md b/packages/contracts-bedrock/VERSIONING.md new file mode 100644 index 000000000000..ae36a7408a38 --- /dev/null +++ b/packages/contracts-bedrock/VERSIONING.md @@ -0,0 +1,128 @@ +# Smart Contract Versioning and Release Process + +The Smart Contract Versioning and Release Process closely follows a true [semver](https://semver.org) for both individual contracts and monorepo releases. +However, there are some changes to accommodate the unique nature of smart contract development and governance cycles. + +There are five parts to the versioning and release process: + +- [Semver Rules](#semver-rules): Follows the rules defined in the [style guide](./STYLE_GUIDE.md#versioning) for when to bump major, minor, and patch versions in individual contracts. +- [Individual Contract Versioning](#individual-contract-versioning): The versioning scheme for individual contracts and includes beta, release candidate, and feature tags. +- [Monorepo Contracts Release Versioning](#monorepo-contracts-release-versioning): The versioning scheme for monorepo smart contract releases. +- [Release Process](#release-process): The process for deploying contracts, creating a governance proposal, and the required associated releases. + - [Additional Release Candidates](#additional-release-candidates): How to handle additional release candidates after an initial `op-contracts/vX.Y.Z-rc.1` release. + - [Merging Back to Develop After Governance Approval](#merging-back-to-develop-after-governance-approval): Explains how to choose the resulting contract versions when merging back into `develop`. +- [Changelog](#changelog): A CHANGELOG for contract releases is maintained. + +> [!NOTE] +> The rules described in this document must be enforced manually. +> Ideally, a check can be added to CI to enforce the conventions defined here, but this is not currently implemented. + +## Semver Rules + +Version increments follow the [style guide rules](./STYLE_GUIDE.md#versioning) for when to bump major, minor, and patch versions in individual contracts: + +> - `patch` releases are to be used only for changes that do NOT modify contract bytecode (such as updating comments). +> - `minor` releases are to be used for changes that modify bytecode OR changes that expand the contract ABI provided that these changes do NOT break the existing interface. +> - `major` releases are to be used for changes that break the existing contract interface OR changes that modify the security model of a contract. +> +> Bumping the patch version does change the bytecode, so another exception is carved out for this. +> In other words, changing comments increments the patch version, which changes bytecode. This bytecode +> change implies a minor version increment is needed, but because it's just a version change, only a +> patch increment should be used. + +## Individual Contract Versioning + +Versioning for individual contracts works as follows: + +- A contract is only `X.Y.Z` on `develop` if it has been governance approved. If it's `X.Y.Z` before that, it must be on a branch. More on this below. +- For contracts undergoing development, a `-beta.n` identifier must be appended to the version number. +- For contracts in a release candidate state, an `-rc.n` identifier must be appended to the version number. +- For contracts with feature-specific changes, a `+feature-name` identifier must be appended to the version number. See the [Smart Contract Feature Development](https://github.com/ethereum-optimism/design-docs/blob/main/smart-contract-feature-development.md) design document to learn more. +- When making changes to a contract, always bump to the lowest possible version based on the specific change you are making. We do not want to e.g. optimistically bump to a major version, because protocol development sequencing may change unexpectedly. Use these examples to know how to bump the version: + - Example 1: A contract is currently on `1.2.3`. + - We don't yet know when the next release of this contract will be. However, you are simply fixing typos in comments so you bump the version to `1.2.4-beta.1`. + - The next PR made to that same contract clarifies some comments, so it bumps the version to `1.2.4-beta.2`. + - The next PR introduces a breaking change, which bumps the version from `1.2.4-beta.2` to `2.0.0-beta.1`. A `1.2.4-rc.1` and `1.2.4` version both never exist. + - Example 2: A contract is currently on `2.4.7`. + - We know the next release of this contract will be a breaking change. Regardless, as you start development by fixing typos in comments, bump the version to `2.4.8-beta.1`. This is because we may end up putting out a release before the breaking change is added. + - Once you start working on the breaking change, bump the version to `3.0.0-beta.1`. + - Continue to bump the beta version as you make changes. When the contract is ready for release, bump the version to `3.0.0-rc.1`. +- New contracts start at `1.0.0-beta.1`, increment the `-beta.n` counter during development, and become `1.0.0` when they are ready for production. + +## Monorepo Contracts Release Versioning + +Versioning for monorepo releases works as follows: + +- Monorepo releases continue to follow the `op-contracts/vX.Y.Z` naming convention. +- The version used for the next release is determined by the highest version bump of any individual contract in the release. + - Example 1: The monorepo is at `op-contracts/v1.5.0`. Clarifying comments are made in contracts, so all contracts only bump the patch version. The next monorepo release will be `op-contracts/v1.5.1`. + - Example 2: The monorepo is at `op-contracts/v1.5.1`. Various tech debt and code is cleaned up in contracts, but no features are added, so at most, contracts bumped the minor version. The next monorepo release will be `op-contracts/v1.6.0`. + - Example 3: The monorepo is at `op-contracts/v1.5.1`. Legacy `ALL_CAPS()` getter methods are removed from a contract, causing that contract to bump the major version. The next monorepo release will be `op-contracts/v2.0.0`. +- Feature specific monorepo releases (such as a beta release of the custom gas token feature) are supported, and should follow the guidelines in the [Smart Contract Feature Development](https://github.com/ethereum-optimism/design-docs/blob/main/smart-contract-feature-development.md) design doc. Bump the overall monorepo semver as required by the above rules, and append the `-beta,n` modifier to the version number. For example, if the last release before the custom gas token feature was `op-contracts/v1.5.1`, because the custom gas token introduces breaking changes, its beta release will be `op-contracts/v2.0.0-beta.n`. + - A subsequent release of the custom gas token feature that fixes bugs and introduces an additional breaking change would be `op-contracts/v2.0.0-beta.2`. + - This means `+feature-name` naming is not used for monorepo releases, only for individual contracts as described below. +- A monorepo contracts release must map to an exact set of contract semvers, and this mapping must be defined in the contract release notes which are the source of truth. See [`op-contracts/v1.4.0-rc.4`](https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv1.4.0-rc.4) for an example of what release notes should look like. + +## Release Process + +When a release is proposed to governance, the proposal includes a commit hash, and often the +contracts from that commit hash are already deployed to mainnet with their addresses included +in the proposal. +For example, the [Fault Proofs governance proposal](https://gov.optimism.io/t/upgrade-proposal-fault-proofs/8161) provides specific addresses that will be used. + +To accommodate this, once contract changes are ready for governance approval, the release flow is: + +- On the `develop` branch, bump the version of all contracts to their respective `X.Y.Z-rc.n`. The `X.Y.Z` here refers to the contract-specific versions, so it differs per-contract. The `-rc.n` begins as `-rc.1` for all contracts. Any `-beta.n` and `+feature-name` identifiers are removed at this point. +- Branch off of `develop` and create a branch named `proposal/op-contracts/vX.Y.Z`. Here, `X.Y.Z` is the new version of the monorepo release. + - Using the `proposal/` prefix signals that this branch is for a governance proposal, and intentionally does not convey whether or not the proposal has passed. +- Open a PR into the `proposal/op-contracts/vX.Y.Z` branch that removes the `-rc.1` suffixes from all contracts. + - This is the commit hash that will be tagged as `op-contracts/vX.Y.Z-rc.1`, used to deploy the contracts, and proposed to governance. + - Sometimes additional release candidates are needed before proposal—see [Additional Release Candidates](#additional-release-candidates) for more information on this flow. +- Once the governance approval is posted, any lock on contracts on `develop` is released. +- Once governance approves the proposal, merge the proposal branch into `develop` and set the version of all contracts to the appropriate `X.Y.Z` after considering any changes made to `develop` since the release candidate was created. + - See [Merging Back to Develop After Governance Approval](#merging-back-to-develop-after-governance-approval) for more information on how to choose the resulting contract versions when merging back into `develop`. + +### Additional Release Candidates + +Sometimes additional release candidate versions are needed. +The process for this is: + +- Make the fixes on `develop`. Increment the `-rc.n` qualifier for the changed contracts only. +- Open a PR into the `proposal/op-contracts/vX.Y.Z` branch that incorporates the changes from `develop`. +- Open another PR to remove the new `-rc.2` version identifiers from the changed contracts. Tag the resulting commit on the proposal branch as `op-contracts/vX.Y.Z-rc.2`. +- This flow (1) ensures develop stays up to date during the release process, (2) mitigates the risk of forgetting to merge the release back into the develop branch, and (3) mitigates the risk of the merge into develop removing the required `-rc.n` version that is needed until the release is approved. + +### Merging Back to Develop After Governance Approval + +A release will change a set of contracts, and those contracts may have changed on `develop` since the release candidate was created. + +If there have been no changes to a contract since the release candidate, the version of that contract stays at `X.Y.Z` and just has the `-rc.n` removed. +For example, if the release candidate is `1.2.3-rc.1`, the resulting version on `develop` will be `1.2.3`. + +If there have been changes to a contract, the `X.Y.Z` will stay the same as whatever is the latest version on `develop`, with the `-beta.n` qualifier incremented. + +For example, given that ContractA is `1.2.3-rc.1` on develop, then the initial sequence of events is: + +- We create the release branch, and on that branch remove the `-rc.1`, giving a final ContractA version on that branch of `1.2.3` +- Governance proposal is posted, pointing to the corresponding monorepo tag. +- Governance approves the release. +- Open a PR to merge the final versions of the contracts (ContractA) back into develop. + +Now there are two scenarios for the PR that merges the release branch back into develop: + +1. On develop, no changes have been made to ContractA. The PR therefore changes ContractA's version on develop from `1.2.3-rc.1` to `1.2.3`, and no other changes to ContractA occur. +2. On develop, breaking changes have been made to ContractA for a new feature, and it's currently versioned as `2.0.0-beta.3`. The PR should bump the version to `2.0.0-beta.4` if it changes the source code of ContractA. + - In practice, this one unlikely to occur when using inheritance for feature development, as specified in [Smart Contract Feature Development](https://github.com/ethereum-optimism/design-docs/blob/main/smart-contract-feature-development.md) architecture. It's more likely that (1) is the case, and we merge the version change into the base contract. + +This flow also provides a dedicated branch for each release, making it easy to deploy a patch or bug fix, regardless of other changes that may have occurred on develop since the release. + +## Changelog + +Lastly, a CHANGELOG for contract releases must be maintained: + +- Each upcoming release will have a tracking issue that documents the new versions of each contract that will be included in the release, along with links to the PRs that made the changes. +- Every contracts PR must have an accompanying changelog entry in a tracking issue once it is merged. +- Tracking issue titles should be named based on the expected Upgrade number they will go to governance with, e.g. "op-contracts changelog: Upgrade 9". + - See [ethereum-optimism/optimism#10592](https://github.com/ethereum-optimism/optimism/issues/10592) for an example of what this tracking issue should look like. + - We do not include a version number in the issue because it may be hard to predict the final version number of a release until all PRs are merged. + - Using upgrade numbers also acts as a forcing function to ensure upgrade sequencing and the governance process is accounted for early in the development process. From f2bc00ba6a6a4b5b61da9bc77804e48c027b4eaa Mon Sep 17 00:00:00 2001 From: mbaxter Date: Tue, 18 Jun 2024 11:01:39 -0400 Subject: [PATCH 057/141] cannon: Extract handleBranch (#10822) * cannon: Extract handleBranch, outputState * cannon: Define MIPSInstructions.sol as a library so we can set visibility modifiers * cannon: Flatten cpu fields in sol files * cannon: Rework sol cpu field handling * cannon: Update MIPS contract version * cannon: Run snapshots, semver lock * cannon: Update go logic to match sol * cannon: Move outputState() back into MIPS.sol * cannon: Mark pure functions * cannon: Run semver-lock * cannon: Update state.json format in test_data * cannon: Fix variable names to match style guide * cannon: Undo comment formatting change * cannon: Style fix - use named parameters * cannon: Run semver-lock --- cannon/cmd/run.go | 12 +- cannon/mipsevm/evm_test.go | 28 +- cannon/mipsevm/fuzz_evm_test.go | 162 ++--- cannon/mipsevm/instrumented.go | 2 +- cannon/mipsevm/mips.go | 92 +-- cannon/mipsevm/mips_instructions.go | 34 ++ cannon/mipsevm/patch.go | 10 +- cannon/mipsevm/state.go | 23 +- cannon/mipsevm/state_test.go | 8 +- .../game/fault/trace/cannon/prestate_test.go | 20 +- .../fault/trace/cannon/test_data/state.json | 10 +- packages/contracts-bedrock/semver-lock.json | 4 +- .../contracts-bedrock/src/cannon/MIPS.sol | 94 +-- .../src/cannon/libraries/MIPSInstructions.sol | 575 ++++++++++-------- .../src/cannon/libraries/MIPSState.sol | 11 + .../utils/DeploymentSummaryFaultProofs.sol | 2 +- .../DeploymentSummaryFaultProofsCode.sol | 6 +- 17 files changed, 586 insertions(+), 507 deletions(-) create mode 100644 packages/contracts-bedrock/src/cannon/libraries/MIPSState.sol diff --git a/cannon/cmd/run.go b/cannon/cmd/run.go index 4c0970e3a99c..7c69cce7ac38 100644 --- a/cannon/cmd/run.go +++ b/cannon/cmd/run.go @@ -380,16 +380,16 @@ func Run(ctx *cli.Context) error { delta := time.Since(start) l.Info("processing", "step", step, - "pc", mipsevm.HexU32(state.PC), - "insn", mipsevm.HexU32(state.Memory.GetMemory(state.PC)), + "pc", mipsevm.HexU32(state.Cpu.PC), + "insn", mipsevm.HexU32(state.Memory.GetMemory(state.Cpu.PC)), "ips", float64(step-startStep)/(float64(delta)/float64(time.Second)), "pages", state.Memory.PageCount(), "mem", state.Memory.Usage(), - "name", meta.LookupSymbol(state.PC), + "name", meta.LookupSymbol(state.Cpu.PC), ) } - if sleepCheck(state.PC) { // don't loop forever when we get stuck because of an unexpected bad program + if sleepCheck(state.Cpu.PC) { // don't loop forever when we get stuck because of an unexpected bad program return fmt.Errorf("got stuck in Go sleep at step %d", step) } @@ -411,7 +411,7 @@ func Run(ctx *cli.Context) error { } witness, err := stepFn(true) if err != nil { - return fmt.Errorf("failed at proof-gen step %d (PC: %08x): %w", step, state.PC, err) + return fmt.Errorf("failed at proof-gen step %d (PC: %08x): %w", step, state.Cpu.PC, err) } postStateHash, err := state.EncodeWitness().StateHash() if err != nil { @@ -435,7 +435,7 @@ func Run(ctx *cli.Context) error { } else { _, err = stepFn(false) if err != nil { - return fmt.Errorf("failed at step %d (PC: %08x): %w", step, state.PC, err) + return fmt.Errorf("failed at step %d (PC: %08x): %w", step, state.Cpu.PC, err) } } diff --git a/cannon/mipsevm/evm_test.go b/cannon/mipsevm/evm_test.go index 703dc6e30a61..14c53220c432 100644 --- a/cannon/mipsevm/evm_test.go +++ b/cannon/mipsevm/evm_test.go @@ -172,7 +172,7 @@ func TestEVM(t *testing.T) { fn := path.Join("open_mips_tests/test/bin", f.Name()) programMem, err := os.ReadFile(fn) require.NoError(t, err) - state := &State{PC: 0, NextPC: 4, Memory: NewMemory()} + state := &State{Cpu: CpuScalars{PC: 0, NextPC: 4}, Memory: NewMemory()} err = state.Memory.SetMemoryRange(0, bytes.NewReader(programMem)) require.NoError(t, err, "load program into state") @@ -182,14 +182,14 @@ func TestEVM(t *testing.T) { goState := NewInstrumentedState(state, oracle, os.Stdout, os.Stderr) for i := 0; i < 1000; i++ { - if goState.state.PC == endAddr { + if goState.state.Cpu.PC == endAddr { break } if exitGroup && goState.state.Exited { break } - insn := state.Memory.GetMemory(state.PC) - t.Logf("step: %4d pc: 0x%08x insn: 0x%08x", state.Step, state.PC, insn) + insn := state.Memory.GetMemory(state.Cpu.PC) + t.Logf("step: %4d pc: 0x%08x insn: 0x%08x", state.Step, state.Cpu.PC, insn) stepWitness, err := goState.Step(true) require.NoError(t, err) @@ -201,11 +201,11 @@ func TestEVM(t *testing.T) { "mipsevm produced different state than EVM at step %d", state.Step) } if exitGroup { - require.NotEqual(t, uint32(endAddr), goState.state.PC, "must not reach end") + require.NotEqual(t, uint32(endAddr), goState.state.Cpu.PC, "must not reach end") require.True(t, goState.state.Exited, "must set exited state") require.Equal(t, uint8(1), goState.state.ExitCode, "must exit with 1") } else { - require.Equal(t, uint32(endAddr), state.PC, "must reach end") + require.Equal(t, uint32(endAddr), state.Cpu.PC, "must reach end") // inspect test result done, result := state.Memory.GetMemory(baseAddrEnd+4), state.Memory.GetMemory(baseAddrEnd+8) require.Equal(t, done, uint32(1), "must be done") @@ -233,7 +233,7 @@ func TestEVMSingleStep(t *testing.T) { for _, tt := range cases { t.Run(tt.name, func(t *testing.T) { - state := &State{PC: tt.pc, NextPC: tt.nextPC, Memory: NewMemory()} + state := &State{Cpu: CpuScalars{PC: tt.pc, NextPC: tt.nextPC}, Memory: NewMemory()} state.Memory.SetMemory(tt.pc, tt.insn) us := NewInstrumentedState(state, nil, os.Stdout, os.Stderr) @@ -401,7 +401,7 @@ func TestEVMSysWriteHint(t *testing.T) { for _, tt := range cases { t.Run(tt.name, func(t *testing.T) { oracle := hintTrackingOracle{} - state := &State{PC: 0, NextPC: 4, Memory: NewMemory()} + state := &State{Cpu: CpuScalars{PC: 0, NextPC: 4}, Memory: NewMemory()} state.LastHint = tt.lastHint state.Registers[2] = sysWrite @@ -448,8 +448,8 @@ func TestEVMFault(t *testing.T) { for _, tt := range cases { t.Run(tt.name, func(t *testing.T) { - state := &State{PC: 0, NextPC: tt.nextPC, Memory: NewMemory()} - initialState := &State{PC: 0, NextPC: tt.nextPC, Memory: state.Memory} + state := &State{Cpu: CpuScalars{PC: 0, NextPC: tt.nextPC}, Memory: NewMemory()} + initialState := &State{Cpu: CpuScalars{PC: 0, NextPC: tt.nextPC}, Memory: state.Memory} state.Memory.SetMemory(0, tt.insn) // set the return address ($ra) to jump into when test completes @@ -496,9 +496,9 @@ func TestHelloEVM(t *testing.T) { if goState.state.Exited { break } - insn := state.Memory.GetMemory(state.PC) + insn := state.Memory.GetMemory(state.Cpu.PC) if i%1000 == 0 { // avoid spamming test logs, we are executing many steps - t.Logf("step: %4d pc: 0x%08x insn: 0x%08x", state.Step, state.PC, insn) + t.Logf("step: %4d pc: 0x%08x insn: 0x%08x", state.Step, state.Cpu.PC, insn) } evm := NewMIPSEVM(contracts, addrs) @@ -548,9 +548,9 @@ func TestClaimEVM(t *testing.T) { break } - insn := state.Memory.GetMemory(state.PC) + insn := state.Memory.GetMemory(state.Cpu.PC) if i%1000 == 0 { // avoid spamming test logs, we are executing many steps - t.Logf("step: %4d pc: 0x%08x insn: 0x%08x", state.Step, state.PC, insn) + t.Logf("step: %4d pc: 0x%08x insn: 0x%08x", state.Step, state.Cpu.PC, insn) } stepWitness, err := goState.Step(true) diff --git a/cannon/mipsevm/fuzz_evm_test.go b/cannon/mipsevm/fuzz_evm_test.go index 3ed3eefb7b38..c85bfb530d57 100644 --- a/cannon/mipsevm/fuzz_evm_test.go +++ b/cannon/mipsevm/fuzz_evm_test.go @@ -21,10 +21,12 @@ func FuzzStateSyscallBrk(f *testing.F) { pc = pc & 0xFF_FF_FF_FC // align PC nextPC := pc + 4 state := &State{ - PC: pc, - NextPC: nextPC, - LO: 0, - HI: 0, + Cpu: CpuScalars{ + PC: pc, + NextPC: nextPC, + LO: 0, + HI: 0, + }, Heap: 0, ExitCode: 0, Exited: false, @@ -44,10 +46,10 @@ func FuzzStateSyscallBrk(f *testing.F) { require.NoError(t, err) require.False(t, stepWitness.HasPreimage()) - require.Equal(t, pc+4, state.PC) - require.Equal(t, nextPC+4, state.NextPC) - require.Equal(t, uint32(0), state.LO) - require.Equal(t, uint32(0), state.HI) + require.Equal(t, pc+4, state.Cpu.PC) + require.Equal(t, nextPC+4, state.Cpu.NextPC) + require.Equal(t, uint32(0), state.Cpu.LO) + require.Equal(t, uint32(0), state.Cpu.HI) require.Equal(t, uint32(0), state.Heap) require.Equal(t, uint8(0), state.ExitCode) require.Equal(t, false, state.Exited) @@ -71,10 +73,12 @@ func FuzzStateSyscallClone(f *testing.F) { pc = pc & 0xFF_FF_FF_FC // align PC nextPC := pc + 4 state := &State{ - PC: pc, - NextPC: nextPC, - LO: 0, - HI: 0, + Cpu: CpuScalars{ + PC: pc, + NextPC: nextPC, + LO: 0, + HI: 0, + }, Heap: 0, ExitCode: 0, Exited: false, @@ -93,10 +97,10 @@ func FuzzStateSyscallClone(f *testing.F) { require.NoError(t, err) require.False(t, stepWitness.HasPreimage()) - require.Equal(t, pc+4, state.PC) - require.Equal(t, nextPC+4, state.NextPC) - require.Equal(t, uint32(0), state.LO) - require.Equal(t, uint32(0), state.HI) + require.Equal(t, pc+4, state.Cpu.PC) + require.Equal(t, nextPC+4, state.Cpu.NextPC) + require.Equal(t, uint32(0), state.Cpu.LO) + require.Equal(t, uint32(0), state.Cpu.HI) require.Equal(t, uint32(0), state.Heap) require.Equal(t, uint8(0), state.ExitCode) require.Equal(t, false, state.Exited) @@ -118,10 +122,12 @@ func FuzzStateSyscallMmap(f *testing.F) { contracts, addrs := testContractsSetup(f) f.Fuzz(func(t *testing.T, addr uint32, siz uint32, heap uint32) { state := &State{ - PC: 0, - NextPC: 4, - LO: 0, - HI: 0, + Cpu: CpuScalars{ + PC: 0, + NextPC: 4, + LO: 0, + HI: 0, + }, Heap: heap, ExitCode: 0, Exited: false, @@ -139,10 +145,10 @@ func FuzzStateSyscallMmap(f *testing.F) { require.NoError(t, err) require.False(t, stepWitness.HasPreimage()) - require.Equal(t, uint32(4), state.PC) - require.Equal(t, uint32(8), state.NextPC) - require.Equal(t, uint32(0), state.LO) - require.Equal(t, uint32(0), state.HI) + require.Equal(t, uint32(4), state.Cpu.PC) + require.Equal(t, uint32(8), state.Cpu.NextPC) + require.Equal(t, uint32(0), state.Cpu.LO) + require.Equal(t, uint32(0), state.Cpu.HI) require.Equal(t, uint8(0), state.ExitCode) require.Equal(t, false, state.Exited) require.Equal(t, preStateRoot, state.Memory.MerkleRoot()) @@ -179,10 +185,12 @@ func FuzzStateSyscallExitGroup(f *testing.F) { pc = pc & 0xFF_FF_FF_FC // align PC nextPC := pc + 4 state := &State{ - PC: pc, - NextPC: nextPC, - LO: 0, - HI: 0, + Cpu: CpuScalars{ + PC: pc, + NextPC: nextPC, + LO: 0, + HI: 0, + }, Heap: 0, ExitCode: 0, Exited: false, @@ -200,10 +208,10 @@ func FuzzStateSyscallExitGroup(f *testing.F) { require.NoError(t, err) require.False(t, stepWitness.HasPreimage()) - require.Equal(t, pc, state.PC) - require.Equal(t, nextPC, state.NextPC) - require.Equal(t, uint32(0), state.LO) - require.Equal(t, uint32(0), state.HI) + require.Equal(t, pc, state.Cpu.PC) + require.Equal(t, nextPC, state.Cpu.NextPC) + require.Equal(t, uint32(0), state.Cpu.LO) + require.Equal(t, uint32(0), state.Cpu.HI) require.Equal(t, uint32(0), state.Heap) require.Equal(t, uint8(exitCode), state.ExitCode) require.Equal(t, true, state.Exited) @@ -225,10 +233,12 @@ func FuzzStateSyscallFnctl(f *testing.F) { contracts, addrs := testContractsSetup(f) f.Fuzz(func(t *testing.T, fd uint32, cmd uint32) { state := &State{ - PC: 0, - NextPC: 4, - LO: 0, - HI: 0, + Cpu: CpuScalars{ + PC: 0, + NextPC: 4, + LO: 0, + HI: 0, + }, Heap: 0, ExitCode: 0, Exited: false, @@ -246,10 +256,10 @@ func FuzzStateSyscallFnctl(f *testing.F) { require.NoError(t, err) require.False(t, stepWitness.HasPreimage()) - require.Equal(t, uint32(4), state.PC) - require.Equal(t, uint32(8), state.NextPC) - require.Equal(t, uint32(0), state.LO) - require.Equal(t, uint32(0), state.HI) + require.Equal(t, uint32(4), state.Cpu.PC) + require.Equal(t, uint32(8), state.Cpu.NextPC) + require.Equal(t, uint32(0), state.Cpu.LO) + require.Equal(t, uint32(0), state.Cpu.HI) require.Equal(t, uint32(0), state.Heap) require.Equal(t, uint8(0), state.ExitCode) require.Equal(t, false, state.Exited) @@ -289,10 +299,12 @@ func FuzzStateHintRead(f *testing.F) { f.Fuzz(func(t *testing.T, addr uint32, count uint32) { preimageData := []byte("hello world") state := &State{ - PC: 0, - NextPC: 4, - LO: 0, - HI: 0, + Cpu: CpuScalars{ + PC: 0, + NextPC: 4, + LO: 0, + HI: 0, + }, Heap: 0, ExitCode: 0, Exited: false, @@ -314,10 +326,10 @@ func FuzzStateHintRead(f *testing.F) { require.NoError(t, err) require.False(t, stepWitness.HasPreimage()) - require.Equal(t, uint32(4), state.PC) - require.Equal(t, uint32(8), state.NextPC) - require.Equal(t, uint32(0), state.LO) - require.Equal(t, uint32(0), state.HI) + require.Equal(t, uint32(4), state.Cpu.PC) + require.Equal(t, uint32(8), state.Cpu.NextPC) + require.Equal(t, uint32(0), state.Cpu.LO) + require.Equal(t, uint32(0), state.Cpu.HI) require.Equal(t, uint32(0), state.Heap) require.Equal(t, uint8(0), state.ExitCode) require.Equal(t, false, state.Exited) @@ -342,10 +354,12 @@ func FuzzStatePreimageRead(f *testing.F) { t.SkipNow() } state := &State{ - PC: 0, - NextPC: 4, - LO: 0, - HI: 0, + Cpu: CpuScalars{ + PC: 0, + NextPC: 4, + LO: 0, + HI: 0, + }, Heap: 0, ExitCode: 0, Exited: false, @@ -372,10 +386,10 @@ func FuzzStatePreimageRead(f *testing.F) { require.NoError(t, err) require.True(t, stepWitness.HasPreimage()) - require.Equal(t, uint32(4), state.PC) - require.Equal(t, uint32(8), state.NextPC) - require.Equal(t, uint32(0), state.LO) - require.Equal(t, uint32(0), state.HI) + require.Equal(t, uint32(4), state.Cpu.PC) + require.Equal(t, uint32(8), state.Cpu.NextPC) + require.Equal(t, uint32(0), state.Cpu.LO) + require.Equal(t, uint32(0), state.Cpu.HI) require.Equal(t, uint32(0), state.Heap) require.Equal(t, uint8(0), state.ExitCode) require.Equal(t, false, state.Exited) @@ -403,10 +417,12 @@ func FuzzStateHintWrite(f *testing.F) { f.Fuzz(func(t *testing.T, addr uint32, count uint32, randSeed int64) { preimageData := []byte("hello world") state := &State{ - PC: 0, - NextPC: 4, - LO: 0, - HI: 0, + Cpu: CpuScalars{ + PC: 0, + NextPC: 4, + LO: 0, + HI: 0, + }, Heap: 0, ExitCode: 0, Exited: false, @@ -436,10 +452,10 @@ func FuzzStateHintWrite(f *testing.F) { require.NoError(t, err) require.False(t, stepWitness.HasPreimage()) - require.Equal(t, uint32(4), state.PC) - require.Equal(t, uint32(8), state.NextPC) - require.Equal(t, uint32(0), state.LO) - require.Equal(t, uint32(0), state.HI) + require.Equal(t, uint32(4), state.Cpu.PC) + require.Equal(t, uint32(8), state.Cpu.NextPC) + require.Equal(t, uint32(0), state.Cpu.LO) + require.Equal(t, uint32(0), state.Cpu.HI) require.Equal(t, uint32(0), state.Heap) require.Equal(t, uint8(0), state.ExitCode) require.Equal(t, false, state.Exited) @@ -461,10 +477,12 @@ func FuzzStatePreimageWrite(f *testing.F) { f.Fuzz(func(t *testing.T, addr uint32, count uint32) { preimageData := []byte("hello world") state := &State{ - PC: 0, - NextPC: 4, - LO: 0, - HI: 0, + Cpu: CpuScalars{ + PC: 0, + NextPC: 4, + LO: 0, + HI: 0, + }, Heap: 0, ExitCode: 0, Exited: false, @@ -489,10 +507,10 @@ func FuzzStatePreimageWrite(f *testing.F) { require.NoError(t, err) require.False(t, stepWitness.HasPreimage()) - require.Equal(t, uint32(4), state.PC) - require.Equal(t, uint32(8), state.NextPC) - require.Equal(t, uint32(0), state.LO) - require.Equal(t, uint32(0), state.HI) + require.Equal(t, uint32(4), state.Cpu.PC) + require.Equal(t, uint32(8), state.Cpu.NextPC) + require.Equal(t, uint32(0), state.Cpu.LO) + require.Equal(t, uint32(0), state.Cpu.HI) require.Equal(t, uint32(0), state.Heap) require.Equal(t, uint8(0), state.ExitCode) require.Equal(t, false, state.Exited) diff --git a/cannon/mipsevm/instrumented.go b/cannon/mipsevm/instrumented.go index 6e1ac81f104e..542ad7bc0de9 100644 --- a/cannon/mipsevm/instrumented.go +++ b/cannon/mipsevm/instrumented.go @@ -78,7 +78,7 @@ func (m *InstrumentedState) Step(proof bool) (wit *StepWitness, err error) { m.lastPreimageOffset = ^uint32(0) if proof { - insnProof := m.state.Memory.MerkleProof(m.state.PC) + insnProof := m.state.Memory.MerkleProof(m.state.Cpu.PC) wit = &StepWitness{ State: m.state.EncodeWitness(), MemProof: insnProof[:], diff --git a/cannon/mipsevm/mips.go b/cannon/mipsevm/mips.go index 9758c1fd75e5..9672e8f2e589 100644 --- a/cannon/mipsevm/mips.go +++ b/cannon/mipsevm/mips.go @@ -174,8 +174,8 @@ func (m *InstrumentedState) handleSyscall() error { m.state.Registers[2] = v0 m.state.Registers[7] = v1 - m.state.PC = m.state.NextPC - m.state.NextPC = m.state.NextPC + 4 + m.state.Cpu.PC = m.state.Cpu.NextPC + m.state.Cpu.NextPC = m.state.Cpu.NextPC + 4 return nil } @@ -184,7 +184,7 @@ func (m *InstrumentedState) pushStack(target uint32) { return } m.debug.stack = append(m.debug.stack, target) - m.debug.caller = append(m.debug.caller, m.state.PC) + m.debug.caller = append(m.debug.caller, m.state.Cpu.PC) } func (m *InstrumentedState) popStack() { @@ -192,7 +192,7 @@ func (m *InstrumentedState) popStack() { return } if len(m.debug.stack) != 0 { - fn := m.debug.meta.LookupSymbol(m.state.PC) + fn := m.debug.meta.LookupSymbol(m.state.Cpu.PC) topFn := m.debug.meta.LookupSymbol(m.debug.stack[len(m.debug.stack)-1]) if fn != topFn { // most likely the function was inlined. Snap back to the last return. @@ -209,12 +209,12 @@ func (m *InstrumentedState) popStack() { m.debug.caller = m.debug.caller[:len(m.debug.caller)-1] } } else { - fmt.Printf("ERROR: stack underflow at pc=%x. step=%d\n", m.state.PC, m.state.Step) + fmt.Printf("ERROR: stack underflow at pc=%x. step=%d\n", m.state.Cpu.PC, m.state.Step) } } func (m *InstrumentedState) Traceback() { - fmt.Printf("traceback at pc=%x. step=%d\n", m.state.PC, m.state.Step) + fmt.Printf("traceback at pc=%x. step=%d\n", m.state.Cpu.PC, m.state.Step) for i := len(m.debug.stack) - 1; i >= 0; i-- { s := m.debug.stack[i] idx := len(m.debug.stack) - i - 1 @@ -222,83 +222,49 @@ func (m *InstrumentedState) Traceback() { } } -func (m *InstrumentedState) handleBranch(opcode uint32, insn uint32, rtReg uint32, rs uint32) error { - if m.state.NextPC != m.state.PC+4 { - panic("branch in delay slot") - } - - shouldBranch := false - if opcode == 4 || opcode == 5 { // beq/bne - rt := m.state.Registers[rtReg] - shouldBranch = (rs == rt && opcode == 4) || (rs != rt && opcode == 5) - } else if opcode == 6 { - shouldBranch = int32(rs) <= 0 // blez - } else if opcode == 7 { - shouldBranch = int32(rs) > 0 // bgtz - } else if opcode == 1 { - // regimm - rtv := (insn >> 16) & 0x1F - if rtv == 0 { // bltz - shouldBranch = int32(rs) < 0 - } - if rtv == 1 { // bgez - shouldBranch = int32(rs) >= 0 - } - } - - prevPC := m.state.PC - m.state.PC = m.state.NextPC // execute the delay slot first - if shouldBranch { - m.state.NextPC = prevPC + 4 + (signExtend(insn&0xFFFF, 16) << 2) // then continue with the instruction the branch jumps to. - } else { - m.state.NextPC = m.state.NextPC + 4 // branch not taken - } - return nil -} - func (m *InstrumentedState) handleHiLo(fun uint32, rs uint32, rt uint32, storeReg uint32) error { val := uint32(0) switch fun { case 0x10: // mfhi - val = m.state.HI + val = m.state.Cpu.HI case 0x11: // mthi - m.state.HI = rs + m.state.Cpu.HI = rs case 0x12: // mflo - val = m.state.LO + val = m.state.Cpu.LO case 0x13: // mtlo - m.state.LO = rs + m.state.Cpu.LO = rs case 0x18: // mult acc := uint64(int64(int32(rs)) * int64(int32(rt))) - m.state.HI = uint32(acc >> 32) - m.state.LO = uint32(acc) + m.state.Cpu.HI = uint32(acc >> 32) + m.state.Cpu.LO = uint32(acc) case 0x19: // multu acc := uint64(uint64(rs) * uint64(rt)) - m.state.HI = uint32(acc >> 32) - m.state.LO = uint32(acc) + m.state.Cpu.HI = uint32(acc >> 32) + m.state.Cpu.LO = uint32(acc) case 0x1a: // div - m.state.HI = uint32(int32(rs) % int32(rt)) - m.state.LO = uint32(int32(rs) / int32(rt)) + m.state.Cpu.HI = uint32(int32(rs) % int32(rt)) + m.state.Cpu.LO = uint32(int32(rs) / int32(rt)) case 0x1b: // divu - m.state.HI = rs % rt - m.state.LO = rs / rt + m.state.Cpu.HI = rs % rt + m.state.Cpu.LO = rs / rt } if storeReg != 0 { m.state.Registers[storeReg] = val } - m.state.PC = m.state.NextPC - m.state.NextPC = m.state.NextPC + 4 + m.state.Cpu.PC = m.state.Cpu.NextPC + m.state.Cpu.NextPC = m.state.Cpu.NextPC + 4 return nil } func (m *InstrumentedState) handleJump(linkReg uint32, dest uint32) error { - if m.state.NextPC != m.state.PC+4 { + if m.state.Cpu.NextPC != m.state.Cpu.PC+4 { panic("jump in delay slot") } - prevPC := m.state.PC - m.state.PC = m.state.NextPC - m.state.NextPC = dest + prevPC := m.state.Cpu.PC + m.state.Cpu.PC = m.state.Cpu.NextPC + m.state.Cpu.NextPC = dest if linkReg != 0 { m.state.Registers[linkReg] = prevPC + 8 // set the link-register to the instr after the delay slot instruction. } @@ -312,8 +278,8 @@ func (m *InstrumentedState) handleRd(storeReg uint32, val uint32, conditional bo if storeReg != 0 && conditional { m.state.Registers[storeReg] = val } - m.state.PC = m.state.NextPC - m.state.NextPC = m.state.NextPC + 4 + m.state.Cpu.PC = m.state.Cpu.NextPC + m.state.Cpu.NextPC = m.state.Cpu.NextPC + 4 return nil } @@ -323,7 +289,7 @@ func (m *InstrumentedState) mipsStep() error { } m.state.Step += 1 // instruction fetch - insn := m.state.Memory.GetMemory(m.state.PC) + insn := m.state.Memory.GetMemory(m.state.Cpu.PC) opcode := insn >> 26 // 6-bits // j-type j/jal @@ -333,7 +299,7 @@ func (m *InstrumentedState) mipsStep() error { linkReg = 31 } // Take top 4 bits of the next PC (its 256 MB region), and concatenate with the 26-bit offset - target := (m.state.NextPC & 0xF0000000) | ((insn & 0x03FFFFFF) << 2) + target := (m.state.Cpu.NextPC & 0xF0000000) | ((insn & 0x03FFFFFF) << 2) m.pushStack(target) return m.handleJump(linkReg, target) } @@ -369,7 +335,7 @@ func (m *InstrumentedState) mipsStep() error { } if (opcode >= 4 && opcode < 8) || opcode == 1 { - return m.handleBranch(opcode, insn, rtReg, rs) + return handleBranch(&m.state.Cpu, &m.state.Registers, opcode, insn, rtReg, rs) } storeAddr := uint32(0xFF_FF_FF_FF) diff --git a/cannon/mipsevm/mips_instructions.go b/cannon/mipsevm/mips_instructions.go index cd3920d10eb5..559fc635ed79 100644 --- a/cannon/mipsevm/mips_instructions.go +++ b/cannon/mipsevm/mips_instructions.go @@ -174,3 +174,37 @@ func signExtend(dat uint32, idx uint32) uint32 { return dat & mask } } + +func handleBranch(cpu *CpuScalars, registers *[32]uint32, opcode uint32, insn uint32, rtReg uint32, rs uint32) error { + if cpu.NextPC != cpu.PC+4 { + panic("branch in delay slot") + } + + shouldBranch := false + if opcode == 4 || opcode == 5 { // beq/bne + rt := registers[rtReg] + shouldBranch = (rs == rt && opcode == 4) || (rs != rt && opcode == 5) + } else if opcode == 6 { + shouldBranch = int32(rs) <= 0 // blez + } else if opcode == 7 { + shouldBranch = int32(rs) > 0 // bgtz + } else if opcode == 1 { + // regimm + rtv := (insn >> 16) & 0x1F + if rtv == 0 { // bltz + shouldBranch = int32(rs) < 0 + } + if rtv == 1 { // bgez + shouldBranch = int32(rs) >= 0 + } + } + + prevPC := cpu.PC + cpu.PC = cpu.NextPC // execute the delay slot first + if shouldBranch { + cpu.NextPC = prevPC + 4 + (signExtend(insn&0xFFFF, 16) << 2) // then continue with the instruction the branch jumps to. + } else { + cpu.NextPC = cpu.NextPC + 4 // branch not taken + } + return nil +} diff --git a/cannon/mipsevm/patch.go b/cannon/mipsevm/patch.go index 64a05e9611a4..47abb41e0915 100644 --- a/cannon/mipsevm/patch.go +++ b/cannon/mipsevm/patch.go @@ -12,10 +12,12 @@ const HEAP_START = 0x05000000 func LoadELF(f *elf.File) (*State, error) { s := &State{ - PC: uint32(f.Entry), - NextPC: uint32(f.Entry + 4), - HI: 0, - LO: 0, + Cpu: CpuScalars{ + PC: uint32(f.Entry), + NextPC: uint32(f.Entry + 4), + LO: 0, + HI: 0, + }, Heap: HEAP_START, Registers: [32]uint32{}, Memory: NewMemory(), diff --git a/cannon/mipsevm/state.go b/cannon/mipsevm/state.go index d8a5dcfe9ae2..4b8f7c5cffff 100644 --- a/cannon/mipsevm/state.go +++ b/cannon/mipsevm/state.go @@ -12,17 +12,22 @@ import ( // StateWitnessSize is the size of the state witness encoding in bytes. var StateWitnessSize = 226 +type CpuScalars struct { + PC uint32 `json:"pc"` + NextPC uint32 `json:"nextPC"` + LO uint32 `json:"lo"` + HI uint32 `json:"hi"` +} + type State struct { Memory *Memory `json:"memory"` PreimageKey common.Hash `json:"preimageKey"` PreimageOffset uint32 `json:"preimageOffset"` // note that the offset includes the 8-byte length prefix - PC uint32 `json:"pc"` - NextPC uint32 `json:"nextPC"` - LO uint32 `json:"lo"` - HI uint32 `json:"hi"` - Heap uint32 `json:"heap"` // to handle mmap growth + Cpu CpuScalars `json:"cpu"` + + Heap uint32 `json:"heap"` // to handle mmap growth ExitCode uint8 `json:"exit"` Exited bool `json:"exited"` @@ -54,10 +59,10 @@ func (s *State) EncodeWitness() StateWitness { out = append(out, memRoot[:]...) out = append(out, s.PreimageKey[:]...) out = binary.BigEndian.AppendUint32(out, s.PreimageOffset) - out = binary.BigEndian.AppendUint32(out, s.PC) - out = binary.BigEndian.AppendUint32(out, s.NextPC) - out = binary.BigEndian.AppendUint32(out, s.LO) - out = binary.BigEndian.AppendUint32(out, s.HI) + out = binary.BigEndian.AppendUint32(out, s.Cpu.PC) + out = binary.BigEndian.AppendUint32(out, s.Cpu.NextPC) + out = binary.BigEndian.AppendUint32(out, s.Cpu.LO) + out = binary.BigEndian.AppendUint32(out, s.Cpu.HI) out = binary.BigEndian.AppendUint32(out, s.Heap) out = append(out, s.ExitCode) if s.Exited { diff --git a/cannon/mipsevm/state_test.go b/cannon/mipsevm/state_test.go index b430398c389b..826004756ad4 100644 --- a/cannon/mipsevm/state_test.go +++ b/cannon/mipsevm/state_test.go @@ -44,7 +44,7 @@ func TestState(t *testing.T) { //require.NoError(t, err, "must load ELF into state") programMem, err := os.ReadFile(fn) require.NoError(t, err) - state := &State{PC: 0, NextPC: 4, Memory: NewMemory()} + state := &State{Cpu: CpuScalars{PC: 0, NextPC: 4}, Memory: NewMemory()} err = state.Memory.SetMemoryRange(0, bytes.NewReader(programMem)) require.NoError(t, err, "load program into state") @@ -54,7 +54,7 @@ func TestState(t *testing.T) { us := NewInstrumentedState(state, oracle, os.Stdout, os.Stderr) for i := 0; i < 1000; i++ { - if us.state.PC == endAddr { + if us.state.Cpu.PC == endAddr { break } if exitGroup && us.state.Exited { @@ -65,11 +65,11 @@ func TestState(t *testing.T) { } if exitGroup { - require.NotEqual(t, uint32(endAddr), us.state.PC, "must not reach end") + require.NotEqual(t, uint32(endAddr), us.state.Cpu.PC, "must not reach end") require.True(t, us.state.Exited, "must set exited state") require.Equal(t, uint8(1), us.state.ExitCode, "must exit with 1") } else { - require.Equal(t, uint32(endAddr), us.state.PC, "must reach end") + require.Equal(t, uint32(endAddr), us.state.Cpu.PC, "must reach end") done, result := state.Memory.GetMemory(baseAddrEnd+4), state.Memory.GetMemory(baseAddrEnd+8) // inspect test result require.Equal(t, done, uint32(1), "must be done") diff --git a/op-challenger/game/fault/trace/cannon/prestate_test.go b/op-challenger/game/fault/trace/cannon/prestate_test.go index 1297da54bd88..a8616f171180 100644 --- a/op-challenger/game/fault/trace/cannon/prestate_test.go +++ b/op-challenger/game/fault/trace/cannon/prestate_test.go @@ -44,15 +44,17 @@ func TestAbsolutePreStateCommitment(t *testing.T) { Memory: mipsevm.NewMemory(), PreimageKey: common.HexToHash("cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"), PreimageOffset: 0, - PC: 0, - NextPC: 1, - LO: 0, - HI: 0, - Heap: 0, - ExitCode: 0, - Exited: false, - Step: 0, - Registers: [32]uint32{}, + Cpu: mipsevm.CpuScalars{ + PC: 0, + NextPC: 1, + LO: 0, + HI: 0, + }, + Heap: 0, + ExitCode: 0, + Exited: false, + Step: 0, + Registers: [32]uint32{}, } expected, err := state.EncodeWitness().StateHash() require.NoError(t, err) diff --git a/op-challenger/game/fault/trace/cannon/test_data/state.json b/op-challenger/game/fault/trace/cannon/test_data/state.json index 30cd1ccdcf0c..aae286125cf8 100644 --- a/op-challenger/game/fault/trace/cannon/test_data/state.json +++ b/op-challenger/game/fault/trace/cannon/test_data/state.json @@ -2,10 +2,12 @@ "memory": [], "preimageKey": "0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "preimageOffset": 0, - "pc": 0, - "nextPC": 1, - "lo": 0, - "hi": 0, + "cpu": { + "pc": 0, + "nextPC": 1, + "lo": 0, + "hi": 0 + }, "heap": 0, "exit": 0, "exited": false, diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index a98510e2dfcd..8bd01141969b 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -124,8 +124,8 @@ "sourceCodeHash": "0x3ff4a3f21202478935412d47fd5ef7f94a170402ddc50e5c062013ce5544c83f" }, "src/cannon/MIPS.sol": { - "initCodeHash": "0x1c5dbe83af31e70feb906e2bda2bb1d78d3d15012ec6b11ba5643785657af2a6", - "sourceCodeHash": "0x9bdc97ff4e51fdec7c3e2113d5b60cd64eeb121a51122bea972789d4a5ac3dfa" + "initCodeHash": "0xf0fb656774ff761e2fd9adc523d4ee3dfad6fab63a37d4177543cfc98708b1be", + "sourceCodeHash": "0xe6a817aac69c149c24a9ab820853aae3c189eba337ab2e5c75a7cf458b45e308" }, "src/cannon/PreimageOracle.sol": { "initCodeHash": "0xe5db668fe41436f53995e910488c7c140766ba8745e19743773ebab508efd090", diff --git a/packages/contracts-bedrock/src/cannon/MIPS.sol b/packages/contracts-bedrock/src/cannon/MIPS.sol index 78064149bfaf..0035b5b736fa 100644 --- a/packages/contracts-bedrock/src/cannon/MIPS.sol +++ b/packages/contracts-bedrock/src/cannon/MIPS.sol @@ -4,7 +4,8 @@ pragma solidity 0.8.15; import { ISemver } from "src/universal/ISemver.sol"; import { IPreimageOracle } from "./interfaces/IPreimageOracle.sol"; import { PreimageKeyLib } from "./PreimageKeyLib.sol"; -import "src/cannon/libraries/MIPSInstructions.sol" as ins; +import { MIPSInstructions as ins } from "src/cannon/libraries/MIPSInstructions.sol"; +import { MIPSState as st } from "src/cannon/libraries/MIPSState.sol"; /// @title MIPS /// @notice The MIPS contract emulates a single MIPS instruction. @@ -45,7 +46,7 @@ contract MIPS is ISemver { /// @notice The semantic version of the MIPS contract. /// @custom:semver 1.0.1 - string public constant version = "1.1.0-beta.1"; + string public constant version = "1.1.0-beta.2"; uint32 internal constant FD_STDIN = 0; uint32 internal constant FD_STDOUT = 1; @@ -301,70 +302,6 @@ contract MIPS is ISemver { } } - /// @notice Handles a branch instruction, updating the MIPS state PC where needed. - /// @param _opcode The opcode of the branch instruction. - /// @param _insn The instruction to be executed. - /// @param _rtReg The register to be used for the branch. - /// @param _rs The register to be compared with the branch register. - /// @return out_ The hashed MIPS state. - function handleBranch(uint32 _opcode, uint32 _insn, uint32 _rtReg, uint32 _rs) internal returns (bytes32 out_) { - unchecked { - // Load state from memory - State memory state; - assembly { - state := 0x80 - } - - bool shouldBranch = false; - - if (state.nextPC != state.pc + 4) { - revert("branch in delay slot"); - } - - // beq/bne: Branch on equal / not equal - if (_opcode == 4 || _opcode == 5) { - uint32 rt = state.registers[_rtReg]; - shouldBranch = (_rs == rt && _opcode == 4) || (_rs != rt && _opcode == 5); - } - // blez: Branches if instruction is less than or equal to zero - else if (_opcode == 6) { - shouldBranch = int32(_rs) <= 0; - } - // bgtz: Branches if instruction is greater than zero - else if (_opcode == 7) { - shouldBranch = int32(_rs) > 0; - } - // bltz/bgez: Branch on less than zero / greater than or equal to zero - else if (_opcode == 1) { - // regimm - uint32 rtv = ((_insn >> 16) & 0x1F); - if (rtv == 0) { - shouldBranch = int32(_rs) < 0; - } - if (rtv == 1) { - shouldBranch = int32(_rs) >= 0; - } - } - - // Update the state's previous PC - uint32 prevPC = state.pc; - - // Execute the delay slot first - state.pc = state.nextPC; - - // If we should branch, update the PC to the branch target - // Otherwise, proceed to the next instruction - if (shouldBranch) { - state.nextPC = prevPC + 4 + (ins.signExtend(_insn & 0xFFFF, 16) << 2); - } else { - state.nextPC = state.nextPC + 4; - } - - // Return the hash of the resulting state - out_ = outputState(); - } - } - /// @notice Handles HI and LO register instructions. /// @param _func The function code of the instruction. /// @param _rs The value of the RS register. @@ -730,7 +667,19 @@ contract MIPS is ISemver { } if ((opcode >= 4 && opcode < 8) || opcode == 1) { - return handleBranch(opcode, insn, rtReg, rs); + st.CpuScalars memory cpu = getCpuScalars(state); + + ins.handleBranch({ + _cpu: cpu, + _registers: state.registers, + _opcode: opcode, + _insn: insn, + _rtReg: rtReg, + _rs: rs + }); + setStateCpuScalars(state, cpu); + + return outputState(); } uint32 storeAddr = 0xFF_FF_FF_FF; @@ -796,4 +745,15 @@ contract MIPS is ISemver { return handleRd(rdReg, val, true); } } + + function getCpuScalars(State memory _state) internal pure returns (st.CpuScalars memory) { + return st.CpuScalars({ pc: _state.pc, nextPC: _state.nextPC, lo: _state.lo, hi: _state.hi }); + } + + function setStateCpuScalars(State memory _state, st.CpuScalars memory _cpu) internal pure { + _state.pc = _cpu.pc; + _state.nextPC = _cpu.nextPC; + _state.lo = _cpu.lo; + _state.hi = _cpu.hi; + } } diff --git a/packages/contracts-bedrock/src/cannon/libraries/MIPSInstructions.sol b/packages/contracts-bedrock/src/cannon/libraries/MIPSInstructions.sol index bf2f5bcd165a..c48f78613af3 100644 --- a/packages/contracts-bedrock/src/cannon/libraries/MIPSInstructions.sol +++ b/packages/contracts-bedrock/src/cannon/libraries/MIPSInstructions.sol @@ -1,265 +1,344 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.15; -/// @notice Execute an instruction. -function executeMipsInstruction(uint32 insn, uint32 rs, uint32 rt, uint32 mem) pure returns (uint32 out) { - unchecked { - uint32 opcode = insn >> 26; // 6-bits +import { MIPSState as st } from "src/cannon/libraries/MIPSState.sol"; - if (opcode == 0 || (opcode >= 8 && opcode < 0xF)) { - uint32 func = insn & 0x3f; // 6-bits - assembly { - // transform ArithLogI to SPECIAL - switch opcode - // addi - case 0x8 { func := 0x20 } - // addiu - case 0x9 { func := 0x21 } - // stli - case 0xA { func := 0x2A } - // sltiu - case 0xB { func := 0x2B } - // andi - case 0xC { func := 0x24 } - // ori - case 0xD { func := 0x25 } - // xori - case 0xE { func := 0x26 } - } +library MIPSInstructions { + /// @notice Execute an instruction. + function executeMipsInstruction( + uint32 _insn, + uint32 _rs, + uint32 _rt, + uint32 _mem + ) + internal + pure + returns (uint32 out_) + { + unchecked { + uint32 opcode = _insn >> 26; // 6-bits - // sll - if (func == 0x00) { - return rt << ((insn >> 6) & 0x1F); - } - // srl - else if (func == 0x02) { - return rt >> ((insn >> 6) & 0x1F); - } - // sra - else if (func == 0x03) { - uint32 shamt = (insn >> 6) & 0x1F; - return signExtend(rt >> shamt, 32 - shamt); - } - // sllv - else if (func == 0x04) { - return rt << (rs & 0x1F); - } - // srlv - else if (func == 0x6) { - return rt >> (rs & 0x1F); - } - // srav - else if (func == 0x07) { - return signExtend(rt >> rs, 32 - rs); - } - // functs in range [0x8, 0x1b] are handled specially by other functions - // Explicitly enumerate each funct in range to reduce code diff against Go Vm - // jr - else if (func == 0x08) { - return rs; - } - // jalr - else if (func == 0x09) { - return rs; - } - // movz - else if (func == 0x0a) { - return rs; - } - // movn - else if (func == 0x0b) { - return rs; - } - // syscall - else if (func == 0x0c) { - return rs; - } - // 0x0d - break not supported - // sync - else if (func == 0x0f) { - return rs; - } - // mfhi - else if (func == 0x10) { - return rs; - } - // mthi - else if (func == 0x11) { - return rs; - } - // mflo - else if (func == 0x12) { - return rs; - } - // mtlo - else if (func == 0x13) { - return rs; - } - // mult - else if (func == 0x18) { - return rs; - } - // multu - else if (func == 0x19) { - return rs; - } - // div - else if (func == 0x1a) { - return rs; - } - // divu - else if (func == 0x1b) { - return rs; - } - // The rest includes transformed R-type arith imm instructions - // add - else if (func == 0x20) { - return (rs + rt); - } - // addu - else if (func == 0x21) { - return (rs + rt); - } - // sub - else if (func == 0x22) { - return (rs - rt); - } - // subu - else if (func == 0x23) { - return (rs - rt); - } - // and - else if (func == 0x24) { - return (rs & rt); - } - // or - else if (func == 0x25) { - return (rs | rt); - } - // xor - else if (func == 0x26) { - return (rs ^ rt); - } - // nor - else if (func == 0x27) { - return ~(rs | rt); - } - // slti - else if (func == 0x2a) { - return int32(rs) < int32(rt) ? 1 : 0; - } - // sltiu - else if (func == 0x2b) { - return rs < rt ? 1 : 0; + if (opcode == 0 || (opcode >= 8 && opcode < 0xF)) { + uint32 func = _insn & 0x3f; // 6-bits + assembly { + // transform ArithLogI to SPECIAL + switch opcode + // addi + case 0x8 { func := 0x20 } + // addiu + case 0x9 { func := 0x21 } + // stli + case 0xA { func := 0x2A } + // sltiu + case 0xB { func := 0x2B } + // andi + case 0xC { func := 0x24 } + // ori + case 0xD { func := 0x25 } + // xori + case 0xE { func := 0x26 } + } + + // sll + if (func == 0x00) { + return _rt << ((_insn >> 6) & 0x1F); + } + // srl + else if (func == 0x02) { + return _rt >> ((_insn >> 6) & 0x1F); + } + // sra + else if (func == 0x03) { + uint32 shamt = (_insn >> 6) & 0x1F; + return signExtend(_rt >> shamt, 32 - shamt); + } + // sllv + else if (func == 0x04) { + return _rt << (_rs & 0x1F); + } + // srlv + else if (func == 0x6) { + return _rt >> (_rs & 0x1F); + } + // srav + else if (func == 0x07) { + return signExtend(_rt >> _rs, 32 - _rs); + } + // functs in range [0x8, 0x1b] are handled specially by other functions + // Explicitly enumerate each funct in range to reduce code diff against Go Vm + // jr + else if (func == 0x08) { + return _rs; + } + // jalr + else if (func == 0x09) { + return _rs; + } + // movz + else if (func == 0x0a) { + return _rs; + } + // movn + else if (func == 0x0b) { + return _rs; + } + // syscall + else if (func == 0x0c) { + return _rs; + } + // 0x0d - break not supported + // sync + else if (func == 0x0f) { + return _rs; + } + // mfhi + else if (func == 0x10) { + return _rs; + } + // mthi + else if (func == 0x11) { + return _rs; + } + // mflo + else if (func == 0x12) { + return _rs; + } + // mtlo + else if (func == 0x13) { + return _rs; + } + // mult + else if (func == 0x18) { + return _rs; + } + // multu + else if (func == 0x19) { + return _rs; + } + // div + else if (func == 0x1a) { + return _rs; + } + // divu + else if (func == 0x1b) { + return _rs; + } + // The rest includes transformed R-type arith imm instructions + // add + else if (func == 0x20) { + return (_rs + _rt); + } + // addu + else if (func == 0x21) { + return (_rs + _rt); + } + // sub + else if (func == 0x22) { + return (_rs - _rt); + } + // subu + else if (func == 0x23) { + return (_rs - _rt); + } + // and + else if (func == 0x24) { + return (_rs & _rt); + } + // or + else if (func == 0x25) { + return (_rs | _rt); + } + // xor + else if (func == 0x26) { + return (_rs ^ _rt); + } + // nor + else if (func == 0x27) { + return ~(_rs | _rt); + } + // slti + else if (func == 0x2a) { + return int32(_rs) < int32(_rt) ? 1 : 0; + } + // sltiu + else if (func == 0x2b) { + return _rs < _rt ? 1 : 0; + } else { + revert("invalid instruction"); + } } else { - revert("invalid instruction"); - } - } else { - // SPECIAL2 - if (opcode == 0x1C) { - uint32 func = insn & 0x3f; // 6-bits - // mul - if (func == 0x2) { - return uint32(int32(rs) * int32(rt)); - } - // clz, clo - else if (func == 0x20 || func == 0x21) { - if (func == 0x20) { - rs = ~rs; + // SPECIAL2 + if (opcode == 0x1C) { + uint32 func = _insn & 0x3f; // 6-bits + // mul + if (func == 0x2) { + return uint32(int32(_rs) * int32(_rt)); } - uint32 i = 0; - while (rs & 0x80000000 != 0) { - i++; - rs <<= 1; + // clz, clo + else if (func == 0x20 || func == 0x21) { + if (func == 0x20) { + _rs = ~_rs; + } + uint32 i = 0; + while (_rs & 0x80000000 != 0) { + i++; + _rs <<= 1; + } + return i; } - return i; + } + // lui + else if (opcode == 0x0F) { + return _rt << 16; + } + // lb + else if (opcode == 0x20) { + return signExtend((_mem >> (24 - (_rs & 3) * 8)) & 0xFF, 8); + } + // lh + else if (opcode == 0x21) { + return signExtend((_mem >> (16 - (_rs & 2) * 8)) & 0xFFFF, 16); + } + // lwl + else if (opcode == 0x22) { + uint32 val = _mem << ((_rs & 3) * 8); + uint32 mask = uint32(0xFFFFFFFF) << ((_rs & 3) * 8); + return (_rt & ~mask) | val; + } + // lw + else if (opcode == 0x23) { + return _mem; + } + // lbu + else if (opcode == 0x24) { + return (_mem >> (24 - (_rs & 3) * 8)) & 0xFF; + } + // lhu + else if (opcode == 0x25) { + return (_mem >> (16 - (_rs & 2) * 8)) & 0xFFFF; + } + // lwr + else if (opcode == 0x26) { + uint32 val = _mem >> (24 - (_rs & 3) * 8); + uint32 mask = uint32(0xFFFFFFFF) >> (24 - (_rs & 3) * 8); + return (_rt & ~mask) | val; + } + // sb + else if (opcode == 0x28) { + uint32 val = (_rt & 0xFF) << (24 - (_rs & 3) * 8); + uint32 mask = 0xFFFFFFFF ^ uint32(0xFF << (24 - (_rs & 3) * 8)); + return (_mem & mask) | val; + } + // sh + else if (opcode == 0x29) { + uint32 val = (_rt & 0xFFFF) << (16 - (_rs & 2) * 8); + uint32 mask = 0xFFFFFFFF ^ uint32(0xFFFF << (16 - (_rs & 2) * 8)); + return (_mem & mask) | val; + } + // swl + else if (opcode == 0x2a) { + uint32 val = _rt >> ((_rs & 3) * 8); + uint32 mask = uint32(0xFFFFFFFF) >> ((_rs & 3) * 8); + return (_mem & ~mask) | val; + } + // sw + else if (opcode == 0x2b) { + return _rt; + } + // swr + else if (opcode == 0x2e) { + uint32 val = _rt << (24 - (_rs & 3) * 8); + uint32 mask = uint32(0xFFFFFFFF) << (24 - (_rs & 3) * 8); + return (_mem & ~mask) | val; + } + // ll + else if (opcode == 0x30) { + return _mem; + } + // sc + else if (opcode == 0x38) { + return _rt; + } else { + revert("invalid instruction"); } } - // lui - else if (opcode == 0x0F) { - return rt << 16; - } - // lb - else if (opcode == 0x20) { - return signExtend((mem >> (24 - (rs & 3) * 8)) & 0xFF, 8); - } - // lh - else if (opcode == 0x21) { - return signExtend((mem >> (16 - (rs & 2) * 8)) & 0xFFFF, 16); - } - // lwl - else if (opcode == 0x22) { - uint32 val = mem << ((rs & 3) * 8); - uint32 mask = uint32(0xFFFFFFFF) << ((rs & 3) * 8); - return (rt & ~mask) | val; - } - // lw - else if (opcode == 0x23) { - return mem; - } - // lbu - else if (opcode == 0x24) { - return (mem >> (24 - (rs & 3) * 8)) & 0xFF; - } - // lhu - else if (opcode == 0x25) { - return (mem >> (16 - (rs & 2) * 8)) & 0xFFFF; - } - // lwr - else if (opcode == 0x26) { - uint32 val = mem >> (24 - (rs & 3) * 8); - uint32 mask = uint32(0xFFFFFFFF) >> (24 - (rs & 3) * 8); - return (rt & ~mask) | val; - } - // sb - else if (opcode == 0x28) { - uint32 val = (rt & 0xFF) << (24 - (rs & 3) * 8); - uint32 mask = 0xFFFFFFFF ^ uint32(0xFF << (24 - (rs & 3) * 8)); - return (mem & mask) | val; - } - // sh - else if (opcode == 0x29) { - uint32 val = (rt & 0xFFFF) << (16 - (rs & 2) * 8); - uint32 mask = 0xFFFFFFFF ^ uint32(0xFFFF << (16 - (rs & 2) * 8)); - return (mem & mask) | val; - } - // swl - else if (opcode == 0x2a) { - uint32 val = rt >> ((rs & 3) * 8); - uint32 mask = uint32(0xFFFFFFFF) >> ((rs & 3) * 8); - return (mem & ~mask) | val; - } - // sw - else if (opcode == 0x2b) { - return rt; - } - // swr - else if (opcode == 0x2e) { - uint32 val = rt << (24 - (rs & 3) * 8); - uint32 mask = uint32(0xFFFFFFFF) << (24 - (rs & 3) * 8); - return (mem & ~mask) | val; + revert("invalid instruction"); + } + } + + /// @notice Extends the value leftwards with its most significant bit (sign extension). + function signExtend(uint32 _dat, uint32 _idx) internal pure returns (uint32 out_) { + unchecked { + bool isSigned = (_dat >> (_idx - 1)) != 0; + uint256 signed = ((1 << (32 - _idx)) - 1) << _idx; + uint256 mask = (1 << _idx) - 1; + return uint32(_dat & mask | (isSigned ? signed : 0)); + } + } + + /// @notice Handles a branch instruction, updating the MIPS state PC where needed. + /// @param _cpu Holds the state of cpu scalars pc, nextPC, hi, lo. + /// @param _registers Holds the current state of the cpu registers. + /// @param _opcode The opcode of the branch instruction. + /// @param _insn The instruction to be executed. + /// @param _rtReg The register to be used for the branch. + /// @param _rs The register to be compared with the branch register. + function handleBranch( + st.CpuScalars memory _cpu, + uint32[32] memory _registers, + uint32 _opcode, + uint32 _insn, + uint32 _rtReg, + uint32 _rs + ) + internal + pure + { + unchecked { + bool shouldBranch = false; + + if (_cpu.nextPC != _cpu.pc + 4) { + revert("branch in delay slot"); } - // ll - else if (opcode == 0x30) { - return mem; + + // beq/bne: Branch on equal / not equal + if (_opcode == 4 || _opcode == 5) { + uint32 rt = _registers[_rtReg]; + shouldBranch = (_rs == rt && _opcode == 4) || (_rs != rt && _opcode == 5); + } + // blez: Branches if instruction is less than or equal to zero + else if (_opcode == 6) { + shouldBranch = int32(_rs) <= 0; + } + // bgtz: Branches if instruction is greater than zero + else if (_opcode == 7) { + shouldBranch = int32(_rs) > 0; + } + // bltz/bgez: Branch on less than zero / greater than or equal to zero + else if (_opcode == 1) { + // regimm + uint32 rtv = ((_insn >> 16) & 0x1F); + if (rtv == 0) { + shouldBranch = int32(_rs) < 0; + } + if (rtv == 1) { + shouldBranch = int32(_rs) >= 0; + } } - // sc - else if (opcode == 0x38) { - return rt; + + // Update the state's previous PC + uint32 prevPC = _cpu.pc; + + // Execute the delay slot first + _cpu.pc = _cpu.nextPC; + + // If we should branch, update the PC to the branch target + // Otherwise, proceed to the next instruction + if (shouldBranch) { + _cpu.nextPC = prevPC + 4 + (signExtend(_insn & 0xFFFF, 16) << 2); } else { - revert("invalid instruction"); + _cpu.nextPC = _cpu.nextPC + 4; } } - revert("invalid instruction"); - } -} - -/// @notice Extends the value leftwards with its most significant bit (sign extension). -function signExtend(uint32 _dat, uint32 _idx) pure returns (uint32 out_) { - unchecked { - bool isSigned = (_dat >> (_idx - 1)) != 0; - uint256 signed = ((1 << (32 - _idx)) - 1) << _idx; - uint256 mask = (1 << _idx) - 1; - return uint32(_dat & mask | (isSigned ? signed : 0)); } } diff --git a/packages/contracts-bedrock/src/cannon/libraries/MIPSState.sol b/packages/contracts-bedrock/src/cannon/libraries/MIPSState.sol new file mode 100644 index 000000000000..d4431765c5b0 --- /dev/null +++ b/packages/contracts-bedrock/src/cannon/libraries/MIPSState.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +library MIPSState { + struct CpuScalars { + uint32 pc; + uint32 nextPC; + uint32 lo; + uint32 hi; + } +} diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol index 30d8e8be3fb4..0cc9f5efd2ce 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol @@ -25,7 +25,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { address internal constant l1ERC721BridgeProxyAddress = 0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865; address internal constant l1StandardBridgeAddress = 0xb7900B27Be8f0E0fF65d1C3A4671e1220437dd2b; address internal constant l1StandardBridgeProxyAddress = 0xDeF3bca8c80064589E6787477FFa7Dd616B5574F; - address internal constant mipsAddress = 0x1C0e3B8e58dd91536Caf37a6009536255A7816a6; + address internal constant mipsAddress = 0x477508A9612B67709Caf812D4356d531ba6a471d; address internal constant optimismPortal2Address = 0xfcbb237388CaF5b08175C9927a37aB6450acd535; address internal constant optimismPortalProxyAddress = 0x978e3286EB805934215a88694d80b09aDed68D90; address internal constant preimageOracleAddress = 0x3bd7E801E51d48c5d94Ea68e8B801DFFC275De75; diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol index c983a7ed5277..fca8e2cab5a0 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol @@ -55,11 +55,11 @@ contract DeploymentSummaryFaultProofsCode { bytes internal constant preimageOracleCode = hex"6080604052600436106101cd5760003560e01c80638dc4be11116100f7578063dd24f9bf11610095578063ec5efcbc11610064578063ec5efcbc1461065f578063f3f480d91461067f578063faf37bc7146106b2578063fef2b4ed146106c557600080fd5b8063dd24f9bf1461059f578063ddcd58de146105d2578063e03110e11461060a578063e15926111461063f57600080fd5b8063b2e67ba8116100d1578063b2e67ba814610512578063b4801e611461054a578063d18534b51461056a578063da35c6641461058a57600080fd5b80638dc4be11146104835780639d53a648146104a35780639d7e8769146104f257600080fd5b806354fd4d501161016f5780637917de1d1161013e5780637917de1d146103bf5780637ac54767146103df5780638542cf50146103ff578063882856ef1461044a57600080fd5b806354fd4d50146102dd57806361238bde146103335780636551927b1461036b5780637051472e146103a357600080fd5b80632055b36b116101ab5780632055b36b146102735780633909af5c146102885780634d52b4c9146102a857806352f0f3ad146102bd57600080fd5b8063013cf08b146101d25780630359a5631461022357806304697c7814610251575b600080fd5b3480156101de57600080fd5b506101f26101ed366004612d2f565b6106f2565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b34801561022f57600080fd5b5061024361023e366004612d71565b610737565b60405190815260200161021a565b34801561025d57600080fd5b5061027161026c366004612de4565b61086f565b005b34801561027f57600080fd5b50610243601081565b34801561029457600080fd5b506102716102a3366004613008565b6109a5565b3480156102b457600080fd5b50610243610bfc565b3480156102c957600080fd5b506102436102d83660046130f4565b610c17565b3480156102e957600080fd5b506103266040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161021a919061315b565b34801561033f57600080fd5b5061024361034e3660046131ac565b600160209081526000928352604080842090915290825290205481565b34801561037757600080fd5b50610243610386366004612d71565b601560209081526000928352604080842090915290825290205481565b3480156103af57600080fd5b506102436703782dace9d9000081565b3480156103cb57600080fd5b506102716103da3660046131ce565b610cec565b3480156103eb57600080fd5b506102436103fa366004612d2f565b6111ef565b34801561040b57600080fd5b5061043a61041a3660046131ac565b600260209081526000928352604080842090915290825290205460ff1681565b604051901515815260200161021a565b34801561045657600080fd5b5061046a61046536600461326a565b611206565b60405167ffffffffffffffff909116815260200161021a565b34801561048f57600080fd5b5061027161049e36600461329d565b611260565b3480156104af57600080fd5b506102436104be366004612d71565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601860209081526040808320938352929052205490565b3480156104fe57600080fd5b5061027161050d3660046132e9565b61135b565b34801561051e57600080fd5b5061024361052d366004612d71565b601760209081526000928352604080842090915290825290205481565b34801561055657600080fd5b5061024361056536600461326a565b611512565b34801561057657600080fd5b50610271610585366004613008565b611544565b34801561059657600080fd5b50601354610243565b3480156105ab57600080fd5b507f0000000000000000000000000000000000000000000000000000000000002710610243565b3480156105de57600080fd5b506102436105ed366004612d71565b601660209081526000928352604080842090915290825290205481565b34801561061657600080fd5b5061062a6106253660046131ac565b611906565b6040805192835260208301919091520161021a565b34801561064b57600080fd5b5061027161065a36600461329d565b6119f7565b34801561066b57600080fd5b5061027161067a366004613375565b611aff565b34801561068b57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000078610243565b6102716106c036600461340e565b611c85565b3480156106d157600080fd5b506102436106e0366004612d2f565b60006020819052908152604090205481565b6013818154811061070257600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601560209081526040808320848452909152812054819061077a9060601c63ffffffff1690565b63ffffffff16905060005b6010811015610867578160011660010361080d5773ffffffffffffffffffffffffffffffffffffffff85166000908152601460209081526040808320878452909152902081601081106107da576107da61344a565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925061084e565b82600382601081106108215761082161344a565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c908061085f816134a8565b915050610785565b505092915050565b600080600080608060146030823785878260140137601480870182207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06000000000000000000000000000000000000000000000000000000000000001794506000908190889084018b5afa94503d60010191506008820189106108fc5763fe2549876000526004601cfd5b60c082901b81526008018481533d6000600183013e88017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8015160008481526002602090815260408083208c8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915587845282528083209b83529a81528a82209290925593845283905296909120959095555050505050565b60006109b18a8a610737565b90506109d486868360208b01356109cf6109ca8d6134e0565b611ef0565b611f30565b80156109f257506109f283838360208801356109cf6109ca8a6134e0565b610a28576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866040013588604051602001610a3e91906135af565b6040516020818303038152906040528051906020012014610a8b576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836020013587602001356001610aa191906135ed565b14610ad8576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b2088610ae68680613605565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f9192505050565b610b29886120ec565b836040013588604051602001610b3f91906135af565b6040516020818303038152906040528051906020012003610b8c576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526015602090815260408083208c8452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055610bf08a8a33612894565b50505050505050505050565b6001610c0a6010600261378c565b610c149190613798565b81565b6000610c23868661294d565b9050610c308360086135ed565b821180610c3d5750602083115b15610c74576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b60608115610d0557610cfe86866129fa565b9050610d3f565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b815481526020019060010190808311610d6c57505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610ded8260601c63ffffffff1690565b63ffffffff169050333214610e2e576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e3e8260801c63ffffffff1690565b63ffffffff16600003610e7d576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e878260c01c90565b67ffffffffffffffff1615610ec8576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610f01576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f0e89898d8886612a73565b83516020850160888204881415608883061715610f33576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610fe3578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610fd8576001821615610fb85782818b0152610fd8565b8981015160009081526020938452604090209260019290921c9101610f9b565b505050608801610f40565b50505050600160106002610ff7919061378c565b6110019190613798565b81111561103a576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110af61104d8360401c63ffffffff1690565b61105d9063ffffffff168a6135ed565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b9150841561113c5777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b1791506110e98260801c63ffffffff1690565b63ffffffff166110ff8360401c63ffffffff1690565b63ffffffff161461113c576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083208e8452909152902061116290846010612ca5565b503360008181526018602090815260408083208f8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055838352601582528083208f8452909152812084905560609190911b81523690601437366014016000a05050505050505050505050565b600381601081106111ff57600080fd5b0154905081565b6018602052826000526040600020602052816000526040600020818154811061122e57600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b60443560008060088301861061127e5763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa9050806112ab57600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b600080603087600037602060006030600060025afa806113835763f91129696000526004601cfd5b6000517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017608081815260a08c905260c08b905260308a60e037603088609083013760008060c083600a5afa925082611405576309bde3396000526004601cfd5b6028861061141b5763fe2549876000526004601cfd5b6000602882015278200000000000000000000000000000000000000000000000008152600881018b905285810151935060308a8237603081019b909b52505060509098207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0500000000000000000000000000000000000000000000000000000000000000176000818152600260209081526040808320868452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209583529481528482209a909a559081528089529190912096909655505050505050565b6014602052826000526040600020602052816000526040600020816010811061153a57600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff8116156115b7576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000786115e28260c01c90565b6115f69067ffffffffffffffff1642613798565b1161162d576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116398b8b610737565b905061165287878360208c01356109cf6109ca8e6134e0565b8015611670575061167084848360208901356109cf6109ca8b6134e0565b6116a6576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016116bc91906135af565b6040516020818303038152906040528051906020012014611709576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84602001358860200135600161171f91906135ed565b141580611751575060016117398360601c63ffffffff1690565b61174391906137af565b63ffffffff16856020013514155b15611788576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61179689610ae68780613605565b61179f896120ec565b60006117aa8a612bc6565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f020000000000000000000000000000000000000000000000000000000000000017905060006118018460a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601760008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d815260200190815260200160002054600160008481526020019081526020016000206000838152602001908152602001600020819055506118d38460801c63ffffffff1690565b600083815260208190526040902063ffffffff9190911690556118f78d8d81612894565b50505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff1661198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546119ab8160086135ed565b6119b68560206135ed565b106119d457836119c78260086135ed565b6119d19190613798565b91505b506000938452600160209081526040808620948652939052919092205492909150565b604435600080600883018610611a155763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b6000611b0b8686610737565b9050611b2483838360208801356109cf6109ca8a6134e0565b611b5a576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084013515611b96576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b9e612ce3565b611bac81610ae68780613605565b611bb5816120ec565b846040013581604051602001611bcb91906135af565b6040516020818303038152906040528051906020012003611c18576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166000908152601560209081526040808320898452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055611c7c878733612894565b50505050505050565b6703782dace9d90000341015611cc7576040517fe92c469f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333214611d00576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d0b8160086137d4565b63ffffffff168263ffffffff1610611d4f576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000027108163ffffffff161015611daf576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b949094179094558251808401845282815280850186815260138054600181018255908452915160029092027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9094167fffffffffffffffffffffffff000000000000000000000000000000000000000090941693909317909255517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0919091015590815260168352818120938152929091529020349055565b6000816000015182602001518360400151604051602001611f13939291906137fc565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611f84578060051b880135600186831c1660018114611f695760008481526020839052604090209350611f7a565b600082815260208590526040902093505b5050600101611f36565b5090931495945050505050565b6088815114611f9f57600080fd5b6020810160208301612020565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b171717905061201a81612005868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b61202c60008383611fac565b61203860018383611fac565b61204460028383611fac565b61205060038383611fac565b61205c60048383611fac565b61206860058383611fac565b61207460068383611fac565b61208060078383611fac565b61208c60088383611fac565b61209860098383611fac565b6120a4600a8383611fac565b6120b0600b8383611fac565b6120bc600c8383611fac565b6120c8600d8383611fac565b6120d4600e8383611fac565b6120e0600f8383611fac565b61201a60108383611fac565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e00160405160208183030381529060405290506020820160208201612774565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c61229f8660011b67ffffffffffffffff1690565b18188584603f1c6122ba8660011b67ffffffffffffffff1690565b18188584603f1c6122d58660011b67ffffffffffffffff1690565b181895508483603f1c6122f28560011b67ffffffffffffffff1690565b181894508387603f1c61230f8960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525b5050505050565b600582811b8201805160018501831b8401805160028701851b8601805160038901871b8801805160048b0190981b8901805167ffffffffffffffff861985168918811690995283198a16861889169096528819861683188816909352841986168818871690528419831684189095169052919391929190611c7c565b61270e600082612687565b612719600582612687565b612724600a82612687565b61272f600f82612687565b61273a601482612687565b50565b612746816121e2565b61274f81612703565b600383901b820151815160c09190911c9061201a90821867ffffffffffffffff168352565b6127806000828461273d565b61278c6001828461273d565b6127986002828461273d565b6127a46003828461273d565b6127b06004828461273d565b6127bc6005828461273d565b6127c86006828461273d565b6127d46007828461273d565b6127e06008828461273d565b6127ec6009828461273d565b6127f8600a828461273d565b612804600b828461273d565b612810600c828461273d565b61281c600d828461273d565b612828600e828461273d565b612834600f828461273d565b6128406010828461273d565b61284c6011828461273d565b6128586012828461273d565b6128646013828461273d565b6128706014828461273d565b61287c6015828461273d565b6128886016828461273d565b61201a6017828461273d565b73ffffffffffffffffffffffffffffffffffffffff83811660009081526016602090815260408083208684529091528082208054908390559051909284169083908381818185875af1925050503d806000811461290d576040519150601f19603f3d011682016040523d82523d6000602084013e612912565b606091505b5050905080612680576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316176129f3818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b6060604051905081602082018181018286833760888306808015612a435760888290038501848101848103803687375060806001820353506001845160001a1784538652612a5a565b608836843760018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b6000612a858260a01c63ffffffff1690565b67ffffffffffffffff1690506000612aa38360801c63ffffffff1690565b63ffffffff1690506000612abd8460401c63ffffffff1690565b63ffffffff169050600883108015612ad3575080155b15612b075760c082901b6000908152883560085283513382526017602090815260408084208a855290915290912055612bbc565b60088310158015612b25575080612b1f600885613798565b93508310155b8015612b395750612b3687826135ed565b83105b15612bbc576000612b4a8285613798565b905087612b588260206135ed565b10158015612b64575085155b15612b9b576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526017602090815260408083208a845290915290209089013590555b5050505050505050565b6000612c49565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff00612bf78360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff0000612c248360101b67ffffffffffffffff1690565b1617905060008160201c612c428360201b67ffffffffffffffff1690565b1792915050565b60808201516020830190612c6190612bcd565b612bcd565b6040820151612c6f90612bcd565b60401b17612c87612c5c60018460059190911b015190565b825160809190911b90612c9990612bcd565b60c01b17179392505050565b8260108101928215612cd3579160200282015b82811115612cd3578251825591602001919060010190612cb8565b50612cdf929150612cfb565b5090565b6040518060200160405280612cf6612d10565b905290565b5b80821115612cdf5760008155600101612cfc565b6040518061032001604052806019906020820280368337509192915050565b600060208284031215612d4157600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612d6c57600080fd5b919050565b60008060408385031215612d8457600080fd5b612d8d83612d48565b946020939093013593505050565b60008083601f840112612dad57600080fd5b50813567ffffffffffffffff811115612dc557600080fd5b602083019150836020828501011115612ddd57600080fd5b9250929050565b60008060008060608587031215612dfa57600080fd5b84359350612e0a60208601612d48565b9250604085013567ffffffffffffffff811115612e2657600080fd5b612e3287828801612d9b565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff81118282101715612e9157612e91612e3e565b60405290565b6040516060810167ffffffffffffffff81118282101715612e9157612e91612e3e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612f0157612f01612e3e565b604052919050565b6000610320808385031215612f1d57600080fd5b604051602080820167ffffffffffffffff8382108183111715612f4257612f42612e3e565b8160405283955087601f880112612f5857600080fd5b612f60612e6d565b9487019491508188861115612f7457600080fd5b875b86811015612f9c5780358381168114612f8f5760008081fd5b8452928401928401612f76565b50909352509295945050505050565b600060608284031215612fbd57600080fd5b50919050565b60008083601f840112612fd557600080fd5b50813567ffffffffffffffff811115612fed57600080fd5b6020830191508360208260051b8501011115612ddd57600080fd5b60008060008060008060008060006103e08a8c03121561302757600080fd5b6130308a612d48565b985060208a013597506130468b60408c01612f09565b96506103608a013567ffffffffffffffff8082111561306457600080fd5b6130708d838e01612fab565b97506103808c013591508082111561308757600080fd5b6130938d838e01612fc3565b90975095506103a08c01359150808211156130ad57600080fd5b6130b98d838e01612fab565b94506103c08c01359150808211156130d057600080fd5b506130dd8c828d01612fc3565b915080935050809150509295985092959850929598565b600080600080600060a0868803121561310c57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60005b8381101561314a578181015183820152602001613132565b8381111561201a5750506000910152565b602081526000825180602084015261317a81604085016020870161312f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080604083850312156131bf57600080fd5b50508035926020909101359150565b600080600080600080600060a0888a0312156131e957600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561320f57600080fd5b61321b8b838c01612d9b565b909750955060608a013591508082111561323457600080fd5b506132418a828b01612fc3565b9094509250506080880135801515811461325a57600080fd5b8091505092959891949750929550565b60008060006060848603121561327f57600080fd5b61328884612d48565b95602085013595506040909401359392505050565b6000806000604084860312156132b257600080fd5b83359250602084013567ffffffffffffffff8111156132d057600080fd5b6132dc86828701612d9b565b9497909650939450505050565b600080600080600080600060a0888a03121561330457600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561332a57600080fd5b6133368b838c01612d9b565b909750955060608a013591508082111561334f57600080fd5b5061335c8a828b01612d9b565b989b979a50959894979596608090950135949350505050565b60008060008060006080868803121561338d57600080fd5b61339686612d48565b945060208601359350604086013567ffffffffffffffff808211156133ba57600080fd5b6133c689838a01612fab565b945060608801359150808211156133dc57600080fd5b506133e988828901612fc3565b969995985093965092949392505050565b803563ffffffff81168114612d6c57600080fd5b60008060006060848603121561342357600080fd5b83359250613433602085016133fa565b9150613441604085016133fa565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036134d9576134d9613479565b5060010190565b6000606082360312156134f257600080fd5b6134fa612e97565b823567ffffffffffffffff8082111561351257600080fd5b9084019036601f83011261352557600080fd5b813560208282111561353957613539612e3e565b613569817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612eba565b9250818352368183860101111561357f57600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b60198110156135e457825167ffffffffffffffff168252602092830192909101906001016135bb565b50505092915050565b6000821982111561360057613600613479565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261363a57600080fd5b83018035915067ffffffffffffffff82111561365557600080fd5b602001915036819003821315612ddd57600080fd5b600181815b808511156136c357817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156136a9576136a9613479565b808516156136b657918102915b93841c939080029061366f565b509250929050565b6000826136da57506001613786565b816136e757506000613786565b81600181146136fd576002811461370757613723565b6001915050613786565b60ff84111561371857613718613479565b50506001821b613786565b5060208310610133831016604e8410600b8410161715613746575081810a613786565b613750838361366a565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561378257613782613479565b0290505b92915050565b60006129f383836136cb565b6000828210156137aa576137aa613479565b500390565b600063ffffffff838116908316818110156137cc576137cc613479565b039392505050565b600063ffffffff8083168185168083038211156137f3576137f3613479565b01949350505050565b6000845161380e81846020890161312f565b9190910192835250602082015260400191905056fea164736f6c634300080f000a"; bytes internal constant mipsCode = - hex"608060405234801561001057600080fd5b506004361061004c5760003560e01c8063155633fe1461005157806354fd4d50146100765780637dc0d1d0146100bf578063e14ced3214610103575b600080fd5b61005c634000000081565b60405163ffffffff90911681526020015b60405180910390f35b6100b26040518060400160405280600c81526020017f312e312e302d626574612e31000000000000000000000000000000000000000081525081565b60405161006d9190611e16565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de7516815260200161006d565b610116610111366004611ed2565b610124565b60405190815260200161006d565b600061012e611d8c565b6080811461013b57600080fd5b6040516106001461014b57600080fd5b6084871461015857600080fd5b6101a4851461016657600080fd5b8635608052602087013560a052604087013560e090811c60c09081526044890135821c82526048890135821c61010052604c890135821c610120526050890135821c61014052605489013590911c61016052605888013560f890811c610180526059890135901c6101a052605a880135901c6101c0526102006101e0819052606288019060005b602081101561021157823560e01c82526004909201916020909101906001016101ed565b5050508061012001511561022f5761022761066f565b915050610666565b6101408101805160010167ffffffffffffffff1690526060810151600090610257908261078b565b9050603f601a82901c16600281148061027657508063ffffffff166003145b156102cb5760006002836303ffffff1663ffffffff16901b846080015163f0000000161790506102c08263ffffffff166002146102b457601f6102b7565b60005b60ff1682610847565b945050505050610666565b6101608301516000908190601f601086901c81169190601587901c16602081106102f7576102f7611f46565b602002015192508063ffffffff8516158061031857508463ffffffff16601c145b1561034f578661016001518263ffffffff166020811061033a5761033a611f46565b6020020151925050601f600b86901c1661040b565b60208563ffffffff1610156103b1578463ffffffff16600c148061037957508463ffffffff16600d145b8061038a57508463ffffffff16600e145b1561039b578561ffff16925061040b565b6103aa8661ffff166010610938565b925061040b565b60288563ffffffff161015806103cd57508463ffffffff166022145b806103de57508463ffffffff166026145b1561040b578661016001518263ffffffff166020811061040057610400611f46565b602002015192508190505b60048563ffffffff1610158015610428575060088563ffffffff16105b8061043957508463ffffffff166001145b156104585761044a858784876109ab565b975050505050505050610666565b63ffffffff60006020878316106104bd576104788861ffff166010610938565b9095019463fffffffc861661048e81600161078b565b915060288863ffffffff16101580156104ae57508763ffffffff16603014155b156104bb57809250600093505b505b60006104cb89888885610bbb565b63ffffffff9081169150603f8a169089161580156104f0575060088163ffffffff1610155b80156105025750601c8163ffffffff16105b156105df578063ffffffff166008148061052257508063ffffffff166009145b15610559576105478163ffffffff1660081461053e5785610541565b60005b89610847565b9b505050505050505050505050610666565b8063ffffffff16600a0361057957610547858963ffffffff8a161561134b565b8063ffffffff16600b0361059a57610547858963ffffffff8a16151561134b565b8063ffffffff16600c036105b1576105478d611431565b60108163ffffffff16101580156105ce5750601c8163ffffffff16105b156105df5761054781898988611968565b8863ffffffff1660381480156105fa575063ffffffff861615155b1561062f5760018b61016001518763ffffffff166020811061061e5761061e611f46565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff1461064c5761064c84600184611c3f565b6106588583600161134b565b9b5050505050505050505050505b95945050505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019190855b602081101561070e57601c86015184526020909501946004909301926001016106ea565b506000835283830384a060009450806001811461072e5760039550610756565b828015610746576001811461074f5760029650610754565b60009650610754565b600196505b505b50505081900390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89190911b17919050565b60008061079783611ce3565b905060038416156107a757600080fd5b6020810190358460051c8160005b601b81101561080d5760208501943583821c60011680156107dd57600181146107f257610803565b60008481526020839052604090209350610803565b600082815260208590526040902093505b50506001016107b5565b50608051915081811461082857630badf00d60005260206000fd5b5050601f94909416601c0360031b9390931c63ffffffff169392505050565b6000610851611d8c565b60809050806060015160040163ffffffff16816080015163ffffffff16146108da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b60608101805160808301805163ffffffff90811690935285831690529085161561093057806008018261016001518663ffffffff166020811061091f5761091f611f46565b63ffffffff90921660209290920201525b61066661066f565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b0182610995576000610997565b815b90861663ffffffff16179250505092915050565b60006109b5611d8c565b608090506000816060015160040163ffffffff16826080015163ffffffff1614610a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f7400000000000000000000000060448201526064016108d1565b8663ffffffff1660041480610a5657508663ffffffff166005145b15610ad25760008261016001518663ffffffff1660208110610a7a57610a7a611f46565b602002015190508063ffffffff168563ffffffff16148015610aa257508763ffffffff166004145b80610aca57508063ffffffff168563ffffffff1614158015610aca57508763ffffffff166005145b915050610b4f565b8663ffffffff16600603610aef5760008460030b13159050610b4f565b8663ffffffff16600703610b0b5760008460030b139050610b4f565b8663ffffffff16600103610b4f57601f601087901c166000819003610b345760008560030b1291505b8063ffffffff16600103610b4d5760008560030b121591505b505b606082018051608084015163ffffffff169091528115610b95576002610b7a8861ffff166010610938565b63ffffffff90811690911b8201600401166080840152610ba7565b60808301805160040163ffffffff1690525b610baf61066f565b98975050505050505050565b6000603f601a86901c16801580610bea575060088163ffffffff1610158015610bea5750600f8163ffffffff16105b1561104057603f86168160088114610c315760098114610c3a57600a8114610c4357600b8114610c4c57600c8114610c5557600d8114610c5e57600e8114610c6757610c6c565b60209150610c6c565b60219150610c6c565b602a9150610c6c565b602b9150610c6c565b60249150610c6c565b60259150610c6c565b602691505b508063ffffffff16600003610c935750505063ffffffff8216601f600686901c161b611343565b8063ffffffff16600203610cb95750505063ffffffff8216601f600686901c161c611343565b8063ffffffff16600303610cef57601f600688901c16610ce563ffffffff8716821c6020839003610938565b9350505050611343565b8063ffffffff16600403610d115750505063ffffffff8216601f84161b611343565b8063ffffffff16600603610d335750505063ffffffff8216601f84161c611343565b8063ffffffff16600703610d6657610d5d8663ffffffff168663ffffffff16901c87602003610938565b92505050611343565b8063ffffffff16600803610d7e578592505050611343565b8063ffffffff16600903610d96578592505050611343565b8063ffffffff16600a03610dae578592505050611343565b8063ffffffff16600b03610dc6578592505050611343565b8063ffffffff16600c03610dde578592505050611343565b8063ffffffff16600f03610df6578592505050611343565b8063ffffffff16601003610e0e578592505050611343565b8063ffffffff16601103610e26578592505050611343565b8063ffffffff16601203610e3e578592505050611343565b8063ffffffff16601303610e56578592505050611343565b8063ffffffff16601803610e6e578592505050611343565b8063ffffffff16601903610e86578592505050611343565b8063ffffffff16601a03610e9e578592505050611343565b8063ffffffff16601b03610eb6578592505050611343565b8063ffffffff16602003610ecf57505050828201611343565b8063ffffffff16602103610ee857505050828201611343565b8063ffffffff16602203610f0157505050818303611343565b8063ffffffff16602303610f1a57505050818303611343565b8063ffffffff16602403610f3357505050828216611343565b8063ffffffff16602503610f4c57505050828217611343565b8063ffffffff16602603610f6557505050828218611343565b8063ffffffff16602703610f7f5750505082821719611343565b8063ffffffff16602a03610fb0578460030b8660030b12610fa1576000610fa4565b60015b60ff1692505050611343565b8063ffffffff16602b03610fd8578463ffffffff168663ffffffff1610610fa1576000610fa4565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e0000000000000000000000000060448201526064016108d1565b50610fd8565b8063ffffffff16601c036110c457603f8616600281900361106657505050828202611343565b8063ffffffff166020148061108157508063ffffffff166021145b1561103a578063ffffffff16602003611098579419945b60005b63800000008716156110ba576401fffffffe600197881b16960161109b565b9250611343915050565b8063ffffffff16600f036110e657505065ffffffff0000601083901b16611343565b8063ffffffff166020036111225761111a8560031660080260180363ffffffff168463ffffffff16901c60ff166008610938565b915050611343565b8063ffffffff166021036111575761111a8560021660080260100363ffffffff168463ffffffff16901c61ffff166010610938565b8063ffffffff1660220361118657505063ffffffff60086003851602811681811b198416918316901b17611343565b8063ffffffff1660230361119d5782915050611343565b8063ffffffff166024036111cf578460031660080260180363ffffffff168363ffffffff16901c60ff16915050611343565b8063ffffffff16602503611202578460021660080260100363ffffffff168363ffffffff16901c61ffff16915050611343565b8063ffffffff1660260361123457505063ffffffff60086003851602601803811681811c198416918316901c17611343565b8063ffffffff1660280361126a57505060ff63ffffffff60086003861602601803811682811b9091188316918416901b17611343565b8063ffffffff166029036112a157505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17611343565b8063ffffffff16602a036112d057505063ffffffff60086003851602811681811c198316918416901c17611343565b8063ffffffff16602b036112e75783915050611343565b8063ffffffff16602e0361131957505063ffffffff60086003851602601803811681811b198316918416901b17611343565b8063ffffffff166030036113305782915050611343565b8063ffffffff16603803610fd857839150505b949350505050565b6000611355611d8c565b506080602063ffffffff8616106113c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c696420726567697374657200000000000000000000000000000000000060448201526064016108d1565b63ffffffff8516158015906113da5750825b1561140e57838161016001518663ffffffff16602081106113fd576113fd611f46565b63ffffffff90921660209290920201525b60808101805163ffffffff8082166060850152600490910116905261066661066f565b600061143b611d8c565b506101e051604081015160808083015160a084015160c09094015191936000928392919063ffffffff8616610ffa036114b55781610fff81161561148457610fff811661100003015b8363ffffffff166000036114ab5760e08801805163ffffffff8382011690915295506114af565b8395505b50611927565b8563ffffffff16610fcd036114d05763400000009450611927565b8563ffffffff16611018036114e85760019450611927565b8563ffffffff166110960361151e57600161012088015260ff831661010088015261151161066f565b9998505050505050505050565b8563ffffffff16610fa30361178a5763ffffffff831615611927577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8416016117445760006115798363fffffffc16600161078b565b60208901519091508060001a6001036115e857604080516000838152336020528d83526060902091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790505b6040808a015190517fe03110e10000000000000000000000000000000000000000000000000000000081526004810183905263ffffffff9091166024820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de75169063e03110e1906044016040805180830381865afa158015611689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ad9190611f75565b915091506003861680600403828110156116c5578092505b50818610156116d2578591505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b039150811981169050838119871617955050506117298663fffffffc16600186611c3f565b60408b018051820163ffffffff169052975061178592505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff84160161177957809450611927565b63ffffffff9450600993505b611927565b8563ffffffff16610fa40361187b5763ffffffff8316600114806117b4575063ffffffff83166002145b806117c5575063ffffffff83166004145b156117d257809450611927565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff8416016117795760006118128363fffffffc16600161078b565b6020890151909150600384166004038381101561182d578093505b83900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193850293841b0116911b17602088015260006040880152935083611927565b8563ffffffff16610fd703611927578163ffffffff1660030361191b5763ffffffff831615806118b1575063ffffffff83166005145b806118c2575063ffffffff83166003145b156118d05760009450611927565b63ffffffff8316600114806118eb575063ffffffff83166002145b806118fc575063ffffffff83166006145b8061190d575063ffffffff83166004145b156117795760019450611927565b63ffffffff9450601693505b6101608701805163ffffffff808816604090920191909152905185821660e09091015260808801805180831660608b0152600401909116905261151161066f565b6000611972611d8c565b506080600063ffffffff8716601003611990575060c0810151611bd6565b8663ffffffff166011036119af5763ffffffff861660c0830152611bd6565b8663ffffffff166012036119c8575060a0810151611bd6565b8663ffffffff166013036119e75763ffffffff861660a0830152611bd6565b8663ffffffff16601803611a1b5763ffffffff600387810b9087900b02602081901c821660c08501521660a0830152611bd6565b8663ffffffff16601903611a4c5763ffffffff86811681871602602081901c821660c08501521660a0830152611bd6565b8663ffffffff16601a03611b0f578460030b600003611ac7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f0000000000000000000060448201526064016108d1565b8460030b8660030b81611adc57611adc611f99565b0763ffffffff1660c0830152600385810b9087900b81611afe57611afe611f99565b0563ffffffff1660a0830152611bd6565b8663ffffffff16601b03611bd6578463ffffffff16600003611b8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f0000000000000000000060448201526064016108d1565b8463ffffffff168663ffffffff1681611ba857611ba8611f99565b0663ffffffff90811660c084015285811690871681611bc957611bc9611f99565b0463ffffffff1660a08301525b63ffffffff841615611c1157808261016001518563ffffffff1660208110611c0057611c00611f46565b63ffffffff90921660209290920201525b60808201805163ffffffff80821660608601526004909101169052611c3461066f565b979650505050505050565b6000611c4a83611ce3565b90506003841615611c5a57600080fd5b6020810190601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611cd85760208401933582821c6001168015611ca85760018114611cbd57611cce565b60008581526020839052604090209450611cce565b600082815260208690526040902094505b5050600101611c80565b505060805250505050565b60ff8116610380026101a4810190369061052401811015611d86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f617461000000000000000000000000000000000000000000000000000000000060648201526084016108d1565b50919050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101611df2611df7565b905290565b6040518061040001604052806020906020820280368337509192915050565b600060208083528351808285015260005b81811015611e4357858101830151858201604001528201611e27565b81811115611e55576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008083601f840112611e9b57600080fd5b50813567ffffffffffffffff811115611eb357600080fd5b602083019150836020828501011115611ecb57600080fd5b9250929050565b600080600080600060608688031215611eea57600080fd5b853567ffffffffffffffff80821115611f0257600080fd5b611f0e89838a01611e89565b90975095506020880135915080821115611f2757600080fd5b50611f3488828901611e89565b96999598509660400135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008060408385031215611f8857600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a"; + hex"608060405234801561001057600080fd5b506004361061004c5760003560e01c8063155633fe1461005157806354fd4d50146100765780637dc0d1d0146100bf578063e14ced3214610103575b600080fd5b61005c634000000081565b60405163ffffffff90911681526020015b60405180910390f35b6100b26040518060400160405280600c81526020017f312e312e302d626574612e32000000000000000000000000000000000000000081525081565b60405161006d9190611eb4565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de7516815260200161006d565b610116610111366004611f70565b610124565b60405190815260200161006d565b600061012e611e2a565b6080811461013b57600080fd5b6040516106001461014b57600080fd5b6084871461015857600080fd5b6101a4851461016657600080fd5b8635608052602087013560a052604087013560e090811c60c09081526044890135821c82526048890135821c61010052604c890135821c610120526050890135821c61014052605489013590911c61016052605888013560f890811c610180526059890135901c6101a052605a880135901c6101c0526102006101e0819052606288019060005b602081101561021157823560e01c82526004909201916020909101906001016101ed565b5050508061012001511561022f5761022761072f565b915050610726565b6101408101805160010167ffffffffffffffff1690526060810151600090610257908261084b565b9050603f601a82901c16600281148061027657508063ffffffff166003145b156102cb5760006002836303ffffff1663ffffffff16901b846080015163f0000000161790506102c08263ffffffff166002146102b457601f6102b7565b60005b60ff1682610907565b945050505050610726565b6101608301516000908190601f601086901c81169190601587901c16602081106102f7576102f7611fe4565b602002015192508063ffffffff8516158061031857508463ffffffff16601c145b1561034f578661016001518263ffffffff166020811061033a5761033a611fe4565b6020020151925050601f600b86901c1661040b565b60208563ffffffff1610156103b1578463ffffffff16600c148061037957508463ffffffff16600d145b8061038a57508463ffffffff16600e145b1561039b578561ffff16925061040b565b6103aa8661ffff1660106109f8565b925061040b565b60288563ffffffff161015806103cd57508463ffffffff166022145b806103de57508463ffffffff166026145b1561040b578661016001518263ffffffff166020811061040057610400611fe4565b602002015192508190505b60048563ffffffff1610158015610428575060088563ffffffff16105b8061043957508463ffffffff166001145b156105185760006104b8886040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b90506104cd81896101600151888a878a610a6b565b805163ffffffff9081166060808b01919091526020830151821660808b01526040830151821660a08b01528201511660c089015261050961072f565b98505050505050505050610726565b63ffffffff600060208783161061057d576105388861ffff1660106109f8565b9095019463fffffffc861661054e81600161084b565b915060288863ffffffff161015801561056e57508763ffffffff16603014155b1561057b57809250600093505b505b600061058b89888885610c59565b63ffffffff9081169150603f8a169089161580156105b0575060088163ffffffff1610155b80156105c25750601c8163ffffffff16105b1561069f578063ffffffff16600814806105e257508063ffffffff166009145b15610619576106078163ffffffff166008146105fe5785610601565b60005b89610907565b9b505050505050505050505050610726565b8063ffffffff16600a0361063957610607858963ffffffff8a16156113e9565b8063ffffffff16600b0361065a57610607858963ffffffff8a1615156113e9565b8063ffffffff16600c03610671576106078d6114cf565b60108163ffffffff161015801561068e5750601c8163ffffffff16105b1561069f5761060781898988611a06565b8863ffffffff1660381480156106ba575063ffffffff861615155b156106ef5760018b61016001518763ffffffff16602081106106de576106de611fe4565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff1461070c5761070c84600184611cdd565b610718858360016113e9565b9b5050505050505050505050505b95945050505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019190855b60208110156107ce57601c86015184526020909501946004909301926001016107aa565b506000835283830384a06000945080600181146107ee5760039550610816565b828015610806576001811461080f5760029650610814565b60009650610814565b600196505b505b50505081900390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89190911b17919050565b60008061085783611d81565b9050600384161561086757600080fd5b6020810190358460051c8160005b601b8110156108cd5760208501943583821c600116801561089d57600181146108b2576108c3565b600084815260208390526040902093506108c3565b600082815260208590526040902093505b5050600101610875565b5060805191508181146108e857630badf00d60005260206000fd5b5050601f94909416601c0360031b9390931c63ffffffff169392505050565b6000610911611e2a565b60809050806060015160040163ffffffff16816080015163ffffffff161461099a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b60608101805160808301805163ffffffff9081169093528583169052908516156109f057806008018261016001518663ffffffff16602081106109df576109df611fe4565b63ffffffff90921660209290920201525b61072661072f565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b0182610a55576000610a57565b815b90861663ffffffff16179250505092915050565b6000866000015160040163ffffffff16876020015163ffffffff1614610aed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f740000000000000000000000006044820152606401610991565b8463ffffffff1660041480610b0857508463ffffffff166005145b15610b7f576000868463ffffffff1660208110610b2757610b27611fe4565b602002015190508063ffffffff168363ffffffff16148015610b4f57508563ffffffff166004145b80610b7757508063ffffffff168363ffffffff1614158015610b7757508563ffffffff166005145b915050610bfc565b8463ffffffff16600603610b9c5760008260030b13159050610bfc565b8463ffffffff16600703610bb85760008260030b139050610bfc565b8463ffffffff16600103610bfc57601f601085901c166000819003610be15760008360030b1291505b8063ffffffff16600103610bfa5760008360030b121591505b505b8651602088015163ffffffff1688528115610c3d576002610c228661ffff1660106109f8565b63ffffffff90811690911b8201600401166020890152610c4f565b60208801805160040163ffffffff1690525b5050505050505050565b6000603f601a86901c16801580610c88575060088163ffffffff1610158015610c885750600f8163ffffffff16105b156110de57603f86168160088114610ccf5760098114610cd857600a8114610ce157600b8114610cea57600c8114610cf357600d8114610cfc57600e8114610d0557610d0a565b60209150610d0a565b60219150610d0a565b602a9150610d0a565b602b9150610d0a565b60249150610d0a565b60259150610d0a565b602691505b508063ffffffff16600003610d315750505063ffffffff8216601f600686901c161b6113e1565b8063ffffffff16600203610d575750505063ffffffff8216601f600686901c161c6113e1565b8063ffffffff16600303610d8d57601f600688901c16610d8363ffffffff8716821c60208390036109f8565b93505050506113e1565b8063ffffffff16600403610daf5750505063ffffffff8216601f84161b6113e1565b8063ffffffff16600603610dd15750505063ffffffff8216601f84161c6113e1565b8063ffffffff16600703610e0457610dfb8663ffffffff168663ffffffff16901c876020036109f8565b925050506113e1565b8063ffffffff16600803610e1c5785925050506113e1565b8063ffffffff16600903610e345785925050506113e1565b8063ffffffff16600a03610e4c5785925050506113e1565b8063ffffffff16600b03610e645785925050506113e1565b8063ffffffff16600c03610e7c5785925050506113e1565b8063ffffffff16600f03610e945785925050506113e1565b8063ffffffff16601003610eac5785925050506113e1565b8063ffffffff16601103610ec45785925050506113e1565b8063ffffffff16601203610edc5785925050506113e1565b8063ffffffff16601303610ef45785925050506113e1565b8063ffffffff16601803610f0c5785925050506113e1565b8063ffffffff16601903610f245785925050506113e1565b8063ffffffff16601a03610f3c5785925050506113e1565b8063ffffffff16601b03610f545785925050506113e1565b8063ffffffff16602003610f6d575050508282016113e1565b8063ffffffff16602103610f86575050508282016113e1565b8063ffffffff16602203610f9f575050508183036113e1565b8063ffffffff16602303610fb8575050508183036113e1565b8063ffffffff16602403610fd1575050508282166113e1565b8063ffffffff16602503610fea575050508282176113e1565b8063ffffffff16602603611003575050508282186113e1565b8063ffffffff1660270361101d57505050828217196113e1565b8063ffffffff16602a0361104e578460030b8660030b1261103f576000611042565b60015b60ff16925050506113e1565b8063ffffffff16602b03611076578463ffffffff168663ffffffff161061103f576000611042565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e000000000000000000000000006044820152606401610991565b50611076565b8063ffffffff16601c0361116257603f86166002819003611104575050508282026113e1565b8063ffffffff166020148061111f57508063ffffffff166021145b156110d8578063ffffffff16602003611136579419945b60005b6380000000871615611158576401fffffffe600197881b169601611139565b92506113e1915050565b8063ffffffff16600f0361118457505065ffffffff0000601083901b166113e1565b8063ffffffff166020036111c0576111b88560031660080260180363ffffffff168463ffffffff16901c60ff1660086109f8565b9150506113e1565b8063ffffffff166021036111f5576111b88560021660080260100363ffffffff168463ffffffff16901c61ffff1660106109f8565b8063ffffffff1660220361122457505063ffffffff60086003851602811681811b198416918316901b176113e1565b8063ffffffff1660230361123b57829150506113e1565b8063ffffffff1660240361126d578460031660080260180363ffffffff168363ffffffff16901c60ff169150506113e1565b8063ffffffff166025036112a0578460021660080260100363ffffffff168363ffffffff16901c61ffff169150506113e1565b8063ffffffff166026036112d257505063ffffffff60086003851602601803811681811c198416918316901c176113e1565b8063ffffffff1660280361130857505060ff63ffffffff60086003861602601803811682811b9091188316918416901b176113e1565b8063ffffffff1660290361133f57505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b176113e1565b8063ffffffff16602a0361136e57505063ffffffff60086003851602811681811c198316918416901c176113e1565b8063ffffffff16602b0361138557839150506113e1565b8063ffffffff16602e036113b757505063ffffffff60086003851602601803811681811b198316918416901b176113e1565b8063ffffffff166030036113ce57829150506113e1565b8063ffffffff1660380361107657839150505b949350505050565b60006113f3611e2a565b506080602063ffffffff861610611466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c69642072656769737465720000000000000000000000000000000000006044820152606401610991565b63ffffffff8516158015906114785750825b156114ac57838161016001518663ffffffff166020811061149b5761149b611fe4565b63ffffffff90921660209290920201525b60808101805163ffffffff8082166060850152600490910116905261072661072f565b60006114d9611e2a565b506101e051604081015160808083015160a084015160c09094015191936000928392919063ffffffff8616610ffa036115535781610fff81161561152257610fff811661100003015b8363ffffffff166000036115495760e08801805163ffffffff83820116909152955061154d565b8395505b506119c5565b8563ffffffff16610fcd0361156e57634000000094506119c5565b8563ffffffff166110180361158657600194506119c5565b8563ffffffff16611096036115bc57600161012088015260ff83166101008801526115af61072f565b9998505050505050505050565b8563ffffffff16610fa3036118285763ffffffff8316156119c5577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8416016117e25760006116178363fffffffc16600161084b565b60208901519091508060001a60010361168657604080516000838152336020528d83526060902091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790505b6040808a015190517fe03110e10000000000000000000000000000000000000000000000000000000081526004810183905263ffffffff9091166024820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de75169063e03110e1906044016040805180830381865afa158015611727573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174b9190612013565b91509150600386168060040382811015611763578092505b5081861015611770578591505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b039150811981169050838119871617955050506117c78663fffffffc16600186611cdd565b60408b018051820163ffffffff169052975061182392505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff841601611817578094506119c5565b63ffffffff9450600993505b6119c5565b8563ffffffff16610fa4036119195763ffffffff831660011480611852575063ffffffff83166002145b80611863575063ffffffff83166004145b15611870578094506119c5565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff8416016118175760006118b08363fffffffc16600161084b565b602089015190915060038416600403838110156118cb578093505b83900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193850293841b0116911b176020880152600060408801529350836119c5565b8563ffffffff16610fd7036119c5578163ffffffff166003036119b95763ffffffff8316158061194f575063ffffffff83166005145b80611960575063ffffffff83166003145b1561196e57600094506119c5565b63ffffffff831660011480611989575063ffffffff83166002145b8061199a575063ffffffff83166006145b806119ab575063ffffffff83166004145b1561181757600194506119c5565b63ffffffff9450601693505b6101608701805163ffffffff808816604090920191909152905185821660e09091015260808801805180831660608b015260040190911690526115af61072f565b6000611a10611e2a565b506080600063ffffffff8716601003611a2e575060c0810151611c74565b8663ffffffff16601103611a4d5763ffffffff861660c0830152611c74565b8663ffffffff16601203611a66575060a0810151611c74565b8663ffffffff16601303611a855763ffffffff861660a0830152611c74565b8663ffffffff16601803611ab95763ffffffff600387810b9087900b02602081901c821660c08501521660a0830152611c74565b8663ffffffff16601903611aea5763ffffffff86811681871602602081901c821660c08501521660a0830152611c74565b8663ffffffff16601a03611bad578460030b600003611b65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f000000000000000000006044820152606401610991565b8460030b8660030b81611b7a57611b7a612037565b0763ffffffff1660c0830152600385810b9087900b81611b9c57611b9c612037565b0563ffffffff1660a0830152611c74565b8663ffffffff16601b03611c74578463ffffffff16600003611c2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f000000000000000000006044820152606401610991565b8463ffffffff168663ffffffff1681611c4657611c46612037565b0663ffffffff90811660c084015285811690871681611c6757611c67612037565b0463ffffffff1660a08301525b63ffffffff841615611caf57808261016001518563ffffffff1660208110611c9e57611c9e611fe4565b63ffffffff90921660209290920201525b60808201805163ffffffff80821660608601526004909101169052611cd261072f565b979650505050505050565b6000611ce883611d81565b90506003841615611cf857600080fd5b6020810190601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611d765760208401933582821c6001168015611d465760018114611d5b57611d6c565b60008581526020839052604090209450611d6c565b600082815260208690526040902094505b5050600101611d1e565b505060805250505050565b60ff8116610380026101a4810190369061052401811015611e24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f61746100000000000000000000000000000000000000000000000000000000006064820152608401610991565b50919050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101611e90611e95565b905290565b6040518061040001604052806020906020820280368337509192915050565b600060208083528351808285015260005b81811015611ee157858101830151858201604001528201611ec5565b81811115611ef3576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008083601f840112611f3957600080fd5b50813567ffffffffffffffff811115611f5157600080fd5b602083019150836020828501011115611f6957600080fd5b9250929050565b600080600080600060608688031215611f8857600080fd5b853567ffffffffffffffff80821115611fa057600080fd5b611fac89838a01611f27565b90975095506020880135915080821115611fc557600080fd5b50611fd288828901611f27565b96999598509660400135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000806040838503121561202657600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a"; bytes internal constant anchorStateRegistryCode = hex"608060405234801561001057600080fd5b50600436106100675760003560e01c8063838c2d1e11610050578063838c2d1e146100fa578063c303f0df14610104578063f2b4e6171461011757600080fd5b806354fd4d501461006c5780637258a807146100be575b600080fd5b6100a86040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b5919061085c565b60405180910390f35b6100e56100cc36600461088b565b6001602081905260009182526040909120805491015482565b604080519283526020830191909152016100b5565b61010261015b565b005b61010261011236600461094f565b6105d4565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb1681526020016100b5565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526101f69190810190610a68565b92509250925060007f0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb73ffffffffffffffffffffffffffffffffffffffff16635f0150cb8585856040518463ffffffff1660e01b815260040161025b93929190610b39565b6040805180830381865afa158015610277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029b9190610b67565b5090508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f416e63686f72537461746552656769737472793a206661756c7420646973707560448201527f74652067616d65206e6f7420726567697374657265642077697468206661637460648201527f6f72790000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b600160008563ffffffff1663ffffffff168152602001908152602001600020600101548573ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610bc7565b11610422575050505050565b60028573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104939190610c0f565b60028111156104a4576104a4610be0565b146104b0575050505050565b60405180604001604052806105308773ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052d9190610bc7565b90565b81526020018673ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190610bc7565b905263ffffffff909416600090815260016020818152604090922086518155959091015194019390935550505050565b600054610100900460ff16158080156105f45750600054600160ff909116105b8061060e5750303b15801561060e575060005460ff166001145b61069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161037b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156106f857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60005b825181101561075e57600083828151811061071857610718610c30565b60209081029190910181015180820151905163ffffffff16600090815260018084526040909120825181559190920151910155508061075681610c5f565b9150506106fb565b5080156107c257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60005b838110156107fd5781810151838201526020016107e5565b8381111561080c576000848401525b50505050565b6000815180845261082a8160208601602086016107e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061086f6020830184610812565b9392505050565b63ffffffff8116811461088857600080fd5b50565b60006020828403121561089d57600080fd5b813561086f81610876565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156108fa576108fa6108a8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610947576109476108a8565b604052919050565b6000602080838503121561096257600080fd5b823567ffffffffffffffff8082111561097a57600080fd5b818501915085601f83011261098e57600080fd5b8135818111156109a0576109a06108a8565b6109ae848260051b01610900565b818152848101925060609182028401850191888311156109cd57600080fd5b938501935b82851015610a5c57848903818112156109eb5760008081fd5b6109f36108d7565b86356109fe81610876565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301811315610a325760008081fd5b610a3a6108d7565b888a0135815290880135898201528189015285525093840193928501926109d2565b50979650505050505050565b600080600060608486031215610a7d57600080fd5b8351610a8881610876565b60208501516040860151919450925067ffffffffffffffff80821115610aad57600080fd5b818601915086601f830112610ac157600080fd5b815181811115610ad357610ad36108a8565b610b0460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610900565b9150808252876020828501011115610b1b57600080fd5b610b2c8160208401602086016107e2565b5080925050509250925092565b63ffffffff84168152826020820152606060408201526000610b5e6060830184610812565b95945050505050565b60008060408385031215610b7a57600080fd5b825173ffffffffffffffffffffffffffffffffffffffff81168114610b9e57600080fd5b602084015190925067ffffffffffffffff81168114610bbc57600080fd5b809150509250929050565b600060208284031215610bd957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610c2157600080fd5b81516003811061086f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610cb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c634300080f000a"; bytes internal constant acc27Code = - hex"6080604052600436106102f25760003560e01c806370872aa51161018f578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b18578063fa315aa914610b3c578063fe2bbeb214610b6f57600080fd5b8063ec5e630814610a95578063eff0f59214610ac8578063f8f43ff614610af857600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a0f578063d8cc1a3c14610a42578063dabd396d14610a6257600080fd5b8063c6f0308c14610937578063cf09e0d0146109c1578063d5d44d80146109e257600080fd5b80638d450a9511610143578063bcef3b551161011d578063bcef3b55146108b7578063bd8da956146108f7578063c395e1ca1461091757600080fd5b80638d450a9514610777578063a445ece6146107aa578063bbdc02db1461087657600080fd5b80638129fc1c116101745780638129fc1c1461071a5780638980e0cc146107225780638b85902b1461073757600080fd5b806370872aa5146106f25780637b0f0adc1461070757600080fd5b80633fc8cef3116102485780635c0cba33116101fc5780636361506d116101d65780636361506d1461066c5780636b6716c0146106ac5780636f034409146106df57600080fd5b80635c0cba3314610604578063609d33341461063757806360e274641461064c57600080fd5b806354fd4d501161022d57806354fd4d501461055e57806357da950e146105b45780635a5fa2d9146105e457600080fd5b80633fc8cef314610518578063472777c61461054b57600080fd5b80632810e1d6116102aa57806337b1b2291161028457806337b1b229146104655780633a768463146104a55780633e3ac912146104d857600080fd5b80632810e1d6146103de5780632ad69aeb146103f357806330dbe5701461041357600080fd5b806319effeb4116102db57806319effeb414610339578063200d2ed21461038457806325fc2ace146103bf57600080fd5b806301935130146102f757806303c2924d14610319575b600080fd5b34801561030357600080fd5b5061031761031236600461532d565b610b9f565b005b34801561032557600080fd5b50610317610334366004615388565b610ec0565b34801561034557600080fd5b506000546103669068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561039057600080fd5b506000546103b290700100000000000000000000000000000000900460ff1681565b60405161037b91906153d9565b3480156103cb57600080fd5b506008545b60405190815260200161037b565b3480156103ea57600080fd5b506103b2611566565b3480156103ff57600080fd5b506103d061040e366004615388565b61180b565b34801561041f57600080fd5b506001546104409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161037b565b34801561047157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610440565b3480156104b157600080fd5b507f0000000000000000000000001c0e3b8e58dd91536caf37a6009536255a7816a6610440565b3480156104e457600080fd5b50600054610508907201000000000000000000000000000000000000900460ff1681565b604051901515815260200161037b565b34801561052457600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610440565b61031761055936600461541a565b611841565b34801561056a57600080fd5b506105a76040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161037b91906154b1565b3480156105c057600080fd5b506008546009546105cf919082565b6040805192835260208301919091520161037b565b3480156105f057600080fd5b506103d06105ff3660046154c4565b611853565b34801561061057600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610440565b34801561064357600080fd5b506105a761188d565b34801561065857600080fd5b50610317610667366004615502565b61189b565b34801561067857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103d0565b3480156106b857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b6103176106ed366004615534565b611a42565b3480156106fe57600080fd5b506009546103d0565b61031761071536600461541a565b6123e3565b6103176123f0565b34801561072e57600080fd5b506002546103d0565b34801561074357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103d0565b34801561078357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b3480156107b657600080fd5b506108226107c53660046154c4565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff16606082015260800161037b565b34801561088257600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161037b565b3480156108c357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103d0565b34801561090357600080fd5b506103666109123660046154c4565b612949565b34801561092357600080fd5b506103d0610932366004615573565b612b28565b34801561094357600080fd5b506109576109523660046154c4565b612d0b565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161037b565b3480156109cd57600080fd5b506000546103669067ffffffffffffffff1681565b3480156109ee57600080fd5b506103d06109fd366004615502565b60036020526000908152604090205481565b348015610a1b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103d0565b348015610a4e57600080fd5b50610317610a5d3660046155a5565b612da2565b348015610a6e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b0610366565b348015610aa157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103d0565b348015610ad457600080fd5b50610508610ae33660046154c4565b60046020526000908152604090205460ff1681565b348015610b0457600080fd5b50610317610b1336600461541a565b6133d1565b348015610b2457600080fd5b50610b2d613823565b60405161037b9392919061562f565b348015610b4857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103d0565b348015610b7b57600080fd5b50610508610b8a3660046154c4565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610bcb57610bcb6153aa565b14610c02576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c55576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610ca3610c9e36869003860186615683565b613883565b14610cda576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cef929190615710565b604051809103902014610d2e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d77610d7284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138df92505050565b61394c565b90506000610d9e82600881518110610d9157610d91615720565b6020026020010151613b02565b9050602081511115610ddc576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610e51576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610eec57610eec6153aa565b14610f23576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610f3857610f38615720565b906000526020600020906005020190506000610f5384612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015610fbc576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611005576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561102257508515155b156110bd578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110555781611071565b600186015473ffffffffffffffffffffffffffffffffffffffff165b905061107d8187613bb6565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152611160576fffffffffffffffffffffffffffffffff6040820152600181526000869003611160578195505b600086826020015163ffffffff16611178919061577e565b90506000838211611189578161118b565b835b602084015190915063ffffffff165b818110156112d75760008682815481106111b6576111b6615720565b6000918252602080832090910154808352600690915260409091205490915060ff1661120e576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061122357611223615720565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112805750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b156112c257600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b505080806112cf90615796565b91505061119a565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915584900361155b57606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561145757506000547201000000000000000000000000000000000000900460ff165b156114cc5760015473ffffffffffffffffffffffffffffffffffffffff1661147f818a613bb6565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909116178855611559565b61151373ffffffffffffffffffffffffffffffffffffffff8216156114f1578161150d565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89613bb6565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611594576115946153aa565b146115cb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661162f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008154811061165b5761165b615720565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611696576001611699565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561174a5761174a6153aa565b02179055600281111561175f5761175f6153aa565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117f057600080fd5b505af1158015611804573d6000803e3d6000fd5b5050505090565b6005602052816000526040600020818154811061182757600080fd5b90600052602060002001600091509150505481565b905090565b61184e8383836001611a42565b505050565b6000818152600760209081526040808320600590925282208054825461188490610100900463ffffffff16826157ce565b95945050505050565b606061183c60546020613cb7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812080549082905590819003611900576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a02576040519150601f19603f3d011682016040523d82523d6000602084013e611a07565b606091505b505090508061184e576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054700100000000000000000000000000000000900460ff166002811115611a6e57611a6e6153aa565b14611aa5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110611aba57611aba615720565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514611ba1576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000611c61826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611c9c5750611c997f0000000000000000000000000000000000000000000000000000000000000004600261577e565b81145b8015611ca6575084155b15611cdd576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611d03575086155b15611d3a576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115611d94576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dbf7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b8103611dd157611dd186888588613d09565b34611ddb83612b28565b14611e12576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e1d88612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603611e85576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016611ee591906157e5565b67ffffffffffffffff16611f008267ffffffffffffffff1690565b67ffffffffffffffff161115611fe2576000611f3d60017f00000000000000000000000000000000000000000000000000000000000000046157ce565b8314611f735767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611fa8565b611fa87f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261580e565b9050611fde817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff166157e5565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615612060576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b815260200190815260200160002060016002805490506122f691906157ce565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b15801561238e57600080fd5b505af11580156123a2573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b61184e8383836000611a42565b60005471010000000000000000000000000000000000900460ff1615612442576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa1580156124f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251a919061583e565b909250905081612556576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461258957639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511612623576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b1580156128f857600080fd5b505af115801561290c573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff166002811115612977576129776153aa565b146129ae576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600283815481106129c3576129c3615720565b600091825260208220600590910201805490925063ffffffff90811614612a3257815460028054909163ffffffff16908110612a0157612a01615720565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090612a6a90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b612a7e9067ffffffffffffffff16426157ce565b612a9d612a5d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16612ab1919061577e565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611612afe5780611884565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080612bc7836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115612c26576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000612c418383615891565b9050670de0b6b3a76400006000612c78827f00000000000000000000000000000000000000000000000000000000000000086158a5565b90506000612c96612c91670de0b6b3a7640000866158a5565b613eba565b90506000612ca48484614115565b90506000612cb28383614164565b90506000612cbf82614192565b90506000612cde82612cd9670de0b6b3a76400008f6158a5565b61437a565b90506000612cec8b83614164565b9050612cf8818d6158a5565b9f9e505050505050505050505050505050565b60028181548110612d1b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115612dce57612dce6153aa565b14612e05576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110612e1a57612e1a615720565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050612e797f0000000000000000000000000000000000000000000000000000000000000008600161577e565b612f15826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614612f4f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561304657612fa27f00000000000000000000000000000000000000000000000000000000000000047f00000000000000000000000000000000000000000000000000000000000000086157ce565b6001901b612fc1846fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff16612fdd91906158e2565b1561301a5761301161300260016fffffffffffffffffffffffffffffffff87166158f6565b865463ffffffff166000614453565b6003015461303c565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050613070565b6003850154915061306d6130026fffffffffffffffffffffffffffffffff8616600161591f565b90505b600882901b60088a8a604051613087929190615710565b6040518091039020901b146130c8576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006130d38c614537565b905060006130e2836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f0000000000000000000000001c0e3b8e58dd91536caf37a6009536255a7816a673ffffffffffffffffffffffffffffffffffffffff169063e14ced329061315c908f908f908f908f908a9060040161599c565b6020604051808303816000875af115801561317b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319f91906159d6565b60048501549114915060009060029061324a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132e6896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132f091906159ef565b6132fa9190615a12565b60ff16159050811515810361333b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156133fd576133fd6153aa565b14613434576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061344386614566565b935093509350935060006134598585858561496f565b905060007f0000000000000000000000001c0e3b8e58dd91536caf37a6009536255a7816a673ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ec9190615a34565b9050600189036135e45773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84613548367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de91906159d6565b5061155b565b600289036136105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489613548565b6003890361363c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487613548565b600489036137585760006136826fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614a29565b60095461368f919061577e565b61369a90600161577e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561372d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375191906159d6565b505061155b565b600589036137f1576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161359b565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061387c61188d565b9050909192565b600081600001518260200151836040015184606001516040516020016138c2949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152815160000361392e576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061395c85614ad7565b919450925090506001816001811115613977576139776153aa565b146139ae576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516139ba838561577e565b146139f1576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613a085790505093506000835b8651811015613af657600080613a7b6040518060400160405280858c60000151613a5f91906157ce565b8152602001858c60200151613a74919061577e565b9052614ad7565b509150915060405180604001604052808383613a97919061577e565b8152602001848b60200151613aac919061577e565b815250888581518110613ac157613ac1615720565b6020908102919091010152613ad760018561577e565b9350613ae3818361577e565b613aed908461577e565b92505050613a35565b50845250919392505050565b60606000806000613b1285614ad7565b919450925090506000816001811115613b2d57613b2d6153aa565b14613b64576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b6e828461577e565b855114613ba7576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188485602001518484614f75565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff90931692839290613c0590849061577e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b158015613c9a57600080fd5b505af1158015613cae573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b6000613d286fffffffffffffffffffffffffffffffff8416600161591f565b90506000613d3882866001614453565b9050600086901a8380613e245750613d7160027f00000000000000000000000000000000000000000000000000000000000000046158e2565b6004830154600290613e15906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613e1f9190615a12565b60ff16145b15613e7c5760ff811660011480613e3e575060ff81166002145b613e77576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b613cae565b60ff811615613cae576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613f1957631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261415257637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156141825763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d782136141c057919050565b680755bf798b4a1bf1e582126141de5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006143ab670de0b6b3a76400008361439286613eba565b61439c9190615a51565b6143a69190615b0d565b614192565b90505b92915050565b600080614441837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b6000808261449c576144976fffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000461500a565b6144b7565b6144b7856fffffffffffffffffffffffffffffffff16615196565b9050600284815481106144cc576144cc615720565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461452f57815460028054909163ffffffff1690811061451a5761451a615720565b906000526020600020906005020191506144dd565b509392505050565b600080600080600061454886614566565b935093509350935061455c8484848461496f565b9695505050505050565b600080600080600085905060006002828154811061458657614586615720565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000049061465d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614697576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f00000000000000000000000000000000000000000000000000000000000000049061475e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156147d357825463ffffffff1661479d7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b83036147a7578391505b600281815481106147ba576147ba615720565b906000526020600020906005020193508094505061469b565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661483c614827856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561490b576000614874836fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff1611156148df5760006148b66148ae60016fffffffffffffffffffffffffffffffff86166158f6565b896001614453565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506148e59050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614961565b600061492d6148ae6fffffffffffffffffffffffffffffffff8516600161591f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156149dc5760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611884565b8282604051602001614a0a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614ab6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614b1a576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614b3f576000600160009450945094505050614f6e565b60b78111614c55576000614b546080836157ce565b905080876000015111614b93576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614c0b57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614c42576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614f6e915050565b60bf8111614db3576000614c6a60b7836157ce565b905080876000015111614ca9576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614d0b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614d53576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d5d818461577e565b895111614d96576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614da183600161577e565b9750955060009450614f6e9350505050565b60f78111614e18576000614dc860c0836157ce565b905080876000015111614e07576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614f6e915050565b6000614e2560f7836157ce565b905080876000015111614e64576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614ec6576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614f0e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f18818461577e565b895111614f51576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f5c83600161577e565b9750955060019450614f6e9350505050565b9193909250565b60608167ffffffffffffffff811115614f9057614f90615654565b6040519080825280601f01601f191660200182016040528015614fba576020820181803683370190505b5090508115615003576000614fcf848661577e565b90506020820160005b84811015614ff0578281015182820152602001614fd8565b84811115614fff576000858301525b5050505b9392505050565b6000816150a9846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150bf5763b34b5c226000526004601cfd5b6150c883615196565b905081615167826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116143ae576143ab61517d83600161577e565b6fffffffffffffffffffffffffffffffff83169061523b565b6000811960018301168161522a827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806152c8847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126152f657600080fd5b50813567ffffffffffffffff81111561530e57600080fd5b60208301915083602082850101111561532657600080fd5b9250929050565b600080600083850360a081121561534357600080fd5b608081121561535157600080fd5b50839250608084013567ffffffffffffffff81111561536f57600080fd5b61537b868287016152e4565b9497909650939450505050565b6000806040838503121561539b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310615414577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561542f57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561546c57602081850181015186830182015201615450565b8181111561547e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006143ab6020830184615446565b6000602082840312156154d657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146154ff57600080fd5b50565b60006020828403121561551457600080fd5b8135615003816154dd565b8035801515811461552f57600080fd5b919050565b6000806000806080858703121561554a57600080fd5b8435935060208501359250604085013591506155686060860161551f565b905092959194509250565b60006020828403121561558557600080fd5b81356fffffffffffffffffffffffffffffffff8116811461500357600080fd5b600080600080600080608087890312156155be57600080fd5b863595506155ce6020880161551f565b9450604087013567ffffffffffffffff808211156155eb57600080fd5b6155f78a838b016152e4565b9096509450606089013591508082111561561057600080fd5b5061561d89828a016152e4565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006118846060830184615446565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561569557600080fd5b6040516080810181811067ffffffffffffffff821117156156df577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157915761579161574f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157c7576157c761574f565b5060010190565b6000828210156157e0576157e061574f565b500390565b600067ffffffffffffffff838116908316818110156158065761580661574f565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156158355761583561574f565b02949350505050565b6000806040838503121561585157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158a0576158a0615862565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158dd576158dd61574f565b500290565b6000826158f1576158f1615862565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156158065761580661574f565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561594a5761594a61574f565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006159b0606083018789615953565b82810360208401526159c3818688615953565b9150508260408301529695505050505050565b6000602082840312156159e857600080fd5b5051919050565b600060ff821660ff841680821015615a0957615a0961574f565b90039392505050565b600060ff831680615a2557615a25615862565b8060ff84160691505092915050565b600060208284031215615a4657600080fd5b8151615003816154dd565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a9257615a9261574f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615acd57615acd61574f565b60008712925087820587128484161615615ae957615ae961574f565b87850587128184161615615aff57615aff61574f565b505050929093029392505050565b600082615b1c57615b1c615862565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b7057615b7061574f565b50059056fea164736f6c634300080f000a"; + hex"6080604052600436106102f25760003560e01c806370872aa51161018f578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b18578063fa315aa914610b3c578063fe2bbeb214610b6f57600080fd5b8063ec5e630814610a95578063eff0f59214610ac8578063f8f43ff614610af857600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a0f578063d8cc1a3c14610a42578063dabd396d14610a6257600080fd5b8063c6f0308c14610937578063cf09e0d0146109c1578063d5d44d80146109e257600080fd5b80638d450a9511610143578063bcef3b551161011d578063bcef3b55146108b7578063bd8da956146108f7578063c395e1ca1461091757600080fd5b80638d450a9514610777578063a445ece6146107aa578063bbdc02db1461087657600080fd5b80638129fc1c116101745780638129fc1c1461071a5780638980e0cc146107225780638b85902b1461073757600080fd5b806370872aa5146106f25780637b0f0adc1461070757600080fd5b80633fc8cef3116102485780635c0cba33116101fc5780636361506d116101d65780636361506d1461066c5780636b6716c0146106ac5780636f034409146106df57600080fd5b80635c0cba3314610604578063609d33341461063757806360e274641461064c57600080fd5b806354fd4d501161022d57806354fd4d501461055e57806357da950e146105b45780635a5fa2d9146105e457600080fd5b80633fc8cef314610518578063472777c61461054b57600080fd5b80632810e1d6116102aa57806337b1b2291161028457806337b1b229146104655780633a768463146104a55780633e3ac912146104d857600080fd5b80632810e1d6146103de5780632ad69aeb146103f357806330dbe5701461041357600080fd5b806319effeb4116102db57806319effeb414610339578063200d2ed21461038457806325fc2ace146103bf57600080fd5b806301935130146102f757806303c2924d14610319575b600080fd5b34801561030357600080fd5b5061031761031236600461532d565b610b9f565b005b34801561032557600080fd5b50610317610334366004615388565b610ec0565b34801561034557600080fd5b506000546103669068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561039057600080fd5b506000546103b290700100000000000000000000000000000000900460ff1681565b60405161037b91906153d9565b3480156103cb57600080fd5b506008545b60405190815260200161037b565b3480156103ea57600080fd5b506103b2611566565b3480156103ff57600080fd5b506103d061040e366004615388565b61180b565b34801561041f57600080fd5b506001546104409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161037b565b34801561047157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610440565b3480156104b157600080fd5b507f000000000000000000000000477508a9612b67709caf812d4356d531ba6a471d610440565b3480156104e457600080fd5b50600054610508907201000000000000000000000000000000000000900460ff1681565b604051901515815260200161037b565b34801561052457600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610440565b61031761055936600461541a565b611841565b34801561056a57600080fd5b506105a76040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161037b91906154b1565b3480156105c057600080fd5b506008546009546105cf919082565b6040805192835260208301919091520161037b565b3480156105f057600080fd5b506103d06105ff3660046154c4565b611853565b34801561061057600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610440565b34801561064357600080fd5b506105a761188d565b34801561065857600080fd5b50610317610667366004615502565b61189b565b34801561067857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103d0565b3480156106b857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b6103176106ed366004615534565b611a42565b3480156106fe57600080fd5b506009546103d0565b61031761071536600461541a565b6123e3565b6103176123f0565b34801561072e57600080fd5b506002546103d0565b34801561074357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103d0565b34801561078357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b3480156107b657600080fd5b506108226107c53660046154c4565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff16606082015260800161037b565b34801561088257600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161037b565b3480156108c357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103d0565b34801561090357600080fd5b506103666109123660046154c4565b612949565b34801561092357600080fd5b506103d0610932366004615573565b612b28565b34801561094357600080fd5b506109576109523660046154c4565b612d0b565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161037b565b3480156109cd57600080fd5b506000546103669067ffffffffffffffff1681565b3480156109ee57600080fd5b506103d06109fd366004615502565b60036020526000908152604090205481565b348015610a1b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103d0565b348015610a4e57600080fd5b50610317610a5d3660046155a5565b612da2565b348015610a6e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b0610366565b348015610aa157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103d0565b348015610ad457600080fd5b50610508610ae33660046154c4565b60046020526000908152604090205460ff1681565b348015610b0457600080fd5b50610317610b1336600461541a565b6133d1565b348015610b2457600080fd5b50610b2d613823565b60405161037b9392919061562f565b348015610b4857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103d0565b348015610b7b57600080fd5b50610508610b8a3660046154c4565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610bcb57610bcb6153aa565b14610c02576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c55576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610ca3610c9e36869003860186615683565b613883565b14610cda576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cef929190615710565b604051809103902014610d2e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d77610d7284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138df92505050565b61394c565b90506000610d9e82600881518110610d9157610d91615720565b6020026020010151613b02565b9050602081511115610ddc576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610e51576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610eec57610eec6153aa565b14610f23576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610f3857610f38615720565b906000526020600020906005020190506000610f5384612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015610fbc576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611005576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561102257508515155b156110bd578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110555781611071565b600186015473ffffffffffffffffffffffffffffffffffffffff165b905061107d8187613bb6565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152611160576fffffffffffffffffffffffffffffffff6040820152600181526000869003611160578195505b600086826020015163ffffffff16611178919061577e565b90506000838211611189578161118b565b835b602084015190915063ffffffff165b818110156112d75760008682815481106111b6576111b6615720565b6000918252602080832090910154808352600690915260409091205490915060ff1661120e576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061122357611223615720565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112805750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b156112c257600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b505080806112cf90615796565b91505061119a565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915584900361155b57606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561145757506000547201000000000000000000000000000000000000900460ff165b156114cc5760015473ffffffffffffffffffffffffffffffffffffffff1661147f818a613bb6565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909116178855611559565b61151373ffffffffffffffffffffffffffffffffffffffff8216156114f1578161150d565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89613bb6565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611594576115946153aa565b146115cb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661162f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008154811061165b5761165b615720565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611696576001611699565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561174a5761174a6153aa565b02179055600281111561175f5761175f6153aa565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117f057600080fd5b505af1158015611804573d6000803e3d6000fd5b5050505090565b6005602052816000526040600020818154811061182757600080fd5b90600052602060002001600091509150505481565b905090565b61184e8383836001611a42565b505050565b6000818152600760209081526040808320600590925282208054825461188490610100900463ffffffff16826157ce565b95945050505050565b606061183c60546020613cb7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812080549082905590819003611900576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a02576040519150601f19603f3d011682016040523d82523d6000602084013e611a07565b606091505b505090508061184e576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054700100000000000000000000000000000000900460ff166002811115611a6e57611a6e6153aa565b14611aa5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110611aba57611aba615720565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514611ba1576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000611c61826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611c9c5750611c997f0000000000000000000000000000000000000000000000000000000000000004600261577e565b81145b8015611ca6575084155b15611cdd576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611d03575086155b15611d3a576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115611d94576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dbf7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b8103611dd157611dd186888588613d09565b34611ddb83612b28565b14611e12576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e1d88612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603611e85576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016611ee591906157e5565b67ffffffffffffffff16611f008267ffffffffffffffff1690565b67ffffffffffffffff161115611fe2576000611f3d60017f00000000000000000000000000000000000000000000000000000000000000046157ce565b8314611f735767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611fa8565b611fa87f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261580e565b9050611fde817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff166157e5565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615612060576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b815260200190815260200160002060016002805490506122f691906157ce565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b15801561238e57600080fd5b505af11580156123a2573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b61184e8383836000611a42565b60005471010000000000000000000000000000000000900460ff1615612442576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa1580156124f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251a919061583e565b909250905081612556576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461258957639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511612623576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b1580156128f857600080fd5b505af115801561290c573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff166002811115612977576129776153aa565b146129ae576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600283815481106129c3576129c3615720565b600091825260208220600590910201805490925063ffffffff90811614612a3257815460028054909163ffffffff16908110612a0157612a01615720565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090612a6a90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b612a7e9067ffffffffffffffff16426157ce565b612a9d612a5d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16612ab1919061577e565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611612afe5780611884565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080612bc7836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115612c26576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000612c418383615891565b9050670de0b6b3a76400006000612c78827f00000000000000000000000000000000000000000000000000000000000000086158a5565b90506000612c96612c91670de0b6b3a7640000866158a5565b613eba565b90506000612ca48484614115565b90506000612cb28383614164565b90506000612cbf82614192565b90506000612cde82612cd9670de0b6b3a76400008f6158a5565b61437a565b90506000612cec8b83614164565b9050612cf8818d6158a5565b9f9e505050505050505050505050505050565b60028181548110612d1b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115612dce57612dce6153aa565b14612e05576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110612e1a57612e1a615720565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050612e797f0000000000000000000000000000000000000000000000000000000000000008600161577e565b612f15826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614612f4f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561304657612fa27f00000000000000000000000000000000000000000000000000000000000000047f00000000000000000000000000000000000000000000000000000000000000086157ce565b6001901b612fc1846fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff16612fdd91906158e2565b1561301a5761301161300260016fffffffffffffffffffffffffffffffff87166158f6565b865463ffffffff166000614453565b6003015461303c565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050613070565b6003850154915061306d6130026fffffffffffffffffffffffffffffffff8616600161591f565b90505b600882901b60088a8a604051613087929190615710565b6040518091039020901b146130c8576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006130d38c614537565b905060006130e2836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000477508a9612b67709caf812d4356d531ba6a471d73ffffffffffffffffffffffffffffffffffffffff169063e14ced329061315c908f908f908f908f908a9060040161599c565b6020604051808303816000875af115801561317b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319f91906159d6565b60048501549114915060009060029061324a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132e6896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132f091906159ef565b6132fa9190615a12565b60ff16159050811515810361333b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156133fd576133fd6153aa565b14613434576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061344386614566565b935093509350935060006134598585858561496f565b905060007f000000000000000000000000477508a9612b67709caf812d4356d531ba6a471d73ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ec9190615a34565b9050600189036135e45773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84613548367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de91906159d6565b5061155b565b600289036136105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489613548565b6003890361363c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487613548565b600489036137585760006136826fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614a29565b60095461368f919061577e565b61369a90600161577e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561372d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375191906159d6565b505061155b565b600589036137f1576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161359b565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061387c61188d565b9050909192565b600081600001518260200151836040015184606001516040516020016138c2949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152815160000361392e576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061395c85614ad7565b919450925090506001816001811115613977576139776153aa565b146139ae576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516139ba838561577e565b146139f1576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613a085790505093506000835b8651811015613af657600080613a7b6040518060400160405280858c60000151613a5f91906157ce565b8152602001858c60200151613a74919061577e565b9052614ad7565b509150915060405180604001604052808383613a97919061577e565b8152602001848b60200151613aac919061577e565b815250888581518110613ac157613ac1615720565b6020908102919091010152613ad760018561577e565b9350613ae3818361577e565b613aed908461577e565b92505050613a35565b50845250919392505050565b60606000806000613b1285614ad7565b919450925090506000816001811115613b2d57613b2d6153aa565b14613b64576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b6e828461577e565b855114613ba7576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188485602001518484614f75565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff90931692839290613c0590849061577e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b158015613c9a57600080fd5b505af1158015613cae573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b6000613d286fffffffffffffffffffffffffffffffff8416600161591f565b90506000613d3882866001614453565b9050600086901a8380613e245750613d7160027f00000000000000000000000000000000000000000000000000000000000000046158e2565b6004830154600290613e15906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613e1f9190615a12565b60ff16145b15613e7c5760ff811660011480613e3e575060ff81166002145b613e77576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b613cae565b60ff811615613cae576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613f1957631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261415257637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156141825763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d782136141c057919050565b680755bf798b4a1bf1e582126141de5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006143ab670de0b6b3a76400008361439286613eba565b61439c9190615a51565b6143a69190615b0d565b614192565b90505b92915050565b600080614441837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b6000808261449c576144976fffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000461500a565b6144b7565b6144b7856fffffffffffffffffffffffffffffffff16615196565b9050600284815481106144cc576144cc615720565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461452f57815460028054909163ffffffff1690811061451a5761451a615720565b906000526020600020906005020191506144dd565b509392505050565b600080600080600061454886614566565b935093509350935061455c8484848461496f565b9695505050505050565b600080600080600085905060006002828154811061458657614586615720565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000049061465d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614697576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f00000000000000000000000000000000000000000000000000000000000000049061475e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156147d357825463ffffffff1661479d7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b83036147a7578391505b600281815481106147ba576147ba615720565b906000526020600020906005020193508094505061469b565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661483c614827856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561490b576000614874836fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff1611156148df5760006148b66148ae60016fffffffffffffffffffffffffffffffff86166158f6565b896001614453565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506148e59050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614961565b600061492d6148ae6fffffffffffffffffffffffffffffffff8516600161591f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156149dc5760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611884565b8282604051602001614a0a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614ab6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614b1a576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614b3f576000600160009450945094505050614f6e565b60b78111614c55576000614b546080836157ce565b905080876000015111614b93576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614c0b57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614c42576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614f6e915050565b60bf8111614db3576000614c6a60b7836157ce565b905080876000015111614ca9576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614d0b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614d53576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d5d818461577e565b895111614d96576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614da183600161577e565b9750955060009450614f6e9350505050565b60f78111614e18576000614dc860c0836157ce565b905080876000015111614e07576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614f6e915050565b6000614e2560f7836157ce565b905080876000015111614e64576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614ec6576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614f0e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f18818461577e565b895111614f51576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f5c83600161577e565b9750955060019450614f6e9350505050565b9193909250565b60608167ffffffffffffffff811115614f9057614f90615654565b6040519080825280601f01601f191660200182016040528015614fba576020820181803683370190505b5090508115615003576000614fcf848661577e565b90506020820160005b84811015614ff0578281015182820152602001614fd8565b84811115614fff576000858301525b5050505b9392505050565b6000816150a9846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150bf5763b34b5c226000526004601cfd5b6150c883615196565b905081615167826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116143ae576143ab61517d83600161577e565b6fffffffffffffffffffffffffffffffff83169061523b565b6000811960018301168161522a827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806152c8847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126152f657600080fd5b50813567ffffffffffffffff81111561530e57600080fd5b60208301915083602082850101111561532657600080fd5b9250929050565b600080600083850360a081121561534357600080fd5b608081121561535157600080fd5b50839250608084013567ffffffffffffffff81111561536f57600080fd5b61537b868287016152e4565b9497909650939450505050565b6000806040838503121561539b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310615414577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561542f57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561546c57602081850181015186830182015201615450565b8181111561547e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006143ab6020830184615446565b6000602082840312156154d657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146154ff57600080fd5b50565b60006020828403121561551457600080fd5b8135615003816154dd565b8035801515811461552f57600080fd5b919050565b6000806000806080858703121561554a57600080fd5b8435935060208501359250604085013591506155686060860161551f565b905092959194509250565b60006020828403121561558557600080fd5b81356fffffffffffffffffffffffffffffffff8116811461500357600080fd5b600080600080600080608087890312156155be57600080fd5b863595506155ce6020880161551f565b9450604087013567ffffffffffffffff808211156155eb57600080fd5b6155f78a838b016152e4565b9096509450606089013591508082111561561057600080fd5b5061561d89828a016152e4565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006118846060830184615446565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561569557600080fd5b6040516080810181811067ffffffffffffffff821117156156df577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157915761579161574f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157c7576157c761574f565b5060010190565b6000828210156157e0576157e061574f565b500390565b600067ffffffffffffffff838116908316818110156158065761580661574f565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156158355761583561574f565b02949350505050565b6000806040838503121561585157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158a0576158a0615862565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158dd576158dd61574f565b500290565b6000826158f1576158f1615862565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156158065761580661574f565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561594a5761594a61574f565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006159b0606083018789615953565b82810360208401526159c3818688615953565b9150508260408301529695505050505050565b6000602082840312156159e857600080fd5b5051919050565b600060ff821660ff841680821015615a0957615a0961574f565b90039392505050565b600060ff831680615a2557615a25615862565b8060ff84160691505092915050565b600060208284031215615a4657600080fd5b8151615003816154dd565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a9257615a9261574f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615acd57615acd61574f565b60008712925087820587128484161615615ae957615ae961574f565b87850587128184161615615aff57615aff61574f565b505050929093029392505050565b600082615b1c57615b1c615862565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b7057615b7061574f565b50059056fea164736f6c634300080f000a"; bytes internal constant acc28Code = - hex"6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b94578063fa315aa914610bb8578063fe2bbeb214610beb57600080fd5b8063ec5e630814610b11578063eff0f59214610b44578063f8f43ff614610b7457600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a8b578063d8cc1a3c14610abe578063dabd396d14610ade57600080fd5b8063c6f0308c146109b3578063cf09e0d014610a3d578063d5d44d8014610a5e57600080fd5b8063a445ece611610143578063bcef3b551161011d578063bcef3b5514610933578063bd8da95614610973578063c395e1ca1461099357600080fd5b8063a445ece6146107f3578063a8e4fb90146108bf578063bbdc02db146108f257600080fd5b80638980e0cc116101745780638980e0cc1461076b5780638b85902b146107805780638d450a95146107c057600080fd5b806370872aa51461073b5780637b0f0adc146107505780638129fc1c1461076357600080fd5b80633fc8cef31161025e5780635c0cba33116102075780636361506d116101e15780636361506d146106b55780636b6716c0146106f55780636f0344091461072857600080fd5b80635c0cba331461064d578063609d33341461068057806360e274641461069557600080fd5b806354fd4d501161023857806354fd4d50146105a757806357da950e146105fd5780635a5fa2d91461062d57600080fd5b80633fc8cef31461052e578063472777c614610561578063534db0e21461057457600080fd5b80632810e1d6116102c057806337b1b2291161029a57806337b1b2291461047b5780633a768463146104bb5780633e3ac912146104ee57600080fd5b80632810e1d6146103f45780632ad69aeb1461040957806330dbe5701461042957600080fd5b806319effeb4116102f157806319effeb41461034f578063200d2ed21461039a57806325fc2ace146103d557600080fd5b8063019351301461030d57806303c2924d1461032f575b600080fd5b34801561031957600080fd5b5061032d6103283660046155a8565b610c1b565b005b34801561033b57600080fd5b5061032d61034a366004615603565b610f3c565b34801561035b57600080fd5b5060005461037c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103a657600080fd5b506000546103c890700100000000000000000000000000000000900460ff1681565b6040516103919190615654565b3480156103e157600080fd5b506008545b604051908152602001610391565b34801561040057600080fd5b506103c86115e2565b34801561041557600080fd5b506103e6610424366004615603565b611887565b34801561043557600080fd5b506001546104569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610391565b34801561048757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610456565b3480156104c757600080fd5b507f0000000000000000000000001c0e3b8e58dd91536caf37a6009536255a7816a6610456565b3480156104fa57600080fd5b5060005461051e907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610391565b34801561053a57600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610456565b61032d61056f366004615695565b6118bd565b34801561058057600080fd5b507f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63610456565b3480156105b357600080fd5b506105f06040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b604051610391919061572c565b34801561060957600080fd5b50600854600954610618919082565b60408051928352602083019190915201610391565b34801561063957600080fd5b506103e661064836600461573f565b6118cf565b34801561065957600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610456565b34801561068c57600080fd5b506105f0611909565b3480156106a157600080fd5b5061032d6106b036600461577d565b611917565b3480156106c157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103e6565b34801561070157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b61032d6107363660046157af565b611abe565b34801561074757600080fd5b506009546103e6565b61032d61075e366004615695565b611b7f565b61032d611b8c565b34801561077757600080fd5b506002546103e6565b34801561078c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103e6565b3480156107cc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b3480156107ff57600080fd5b5061086b61080e36600461573f565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff166060820152608001610391565b3480156108cb57600080fd5b507f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8610456565b3480156108fe57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000001168152602001610391565b34801561093f57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103e6565b34801561097f57600080fd5b5061037c61098e36600461573f565b611c05565b34801561099f57600080fd5b506103e66109ae3660046157ee565b611de4565b3480156109bf57600080fd5b506109d36109ce36600461573f565b611fc7565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610391565b348015610a4957600080fd5b5060005461037c9067ffffffffffffffff1681565b348015610a6a57600080fd5b506103e6610a7936600461577d565b60036020526000908152604090205481565b348015610a9757600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103e6565b348015610aca57600080fd5b5061032d610ad9366004615820565b61205e565b348015610aea57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b061037c565b348015610b1d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103e6565b348015610b5057600080fd5b5061051e610b5f36600461573f565b60046020526000908152604090205460ff1681565b348015610b8057600080fd5b5061032d610b8f366004615695565b612123565b348015610ba057600080fd5b50610ba9612575565b604051610391939291906158aa565b348015610bc457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103e6565b348015610bf757600080fd5b5061051e610c0636600461573f565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610c4757610c47615625565b14610c7e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610cd1576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d08367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610d1f610d1a368690038601866158fe565b6125d5565b14610d56576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610d6b92919061598b565b604051809103902014610daa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610df3610dee84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263192505050565b61269e565b90506000610e1a82600881518110610e0d57610e0d61599b565b6020026020010151612854565b9050602081511115610e58576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610ecd576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610f6857610f68615625565b14610f9f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610fb457610fb461599b565b906000526020600020906005020190506000610fcf84611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015611038576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611081576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561109e57508515155b15611139578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110d157816110ed565b600186015473ffffffffffffffffffffffffffffffffffffffff165b90506110f98187612908565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff1660608301526111dc576fffffffffffffffffffffffffffffffff60408201526001815260008690036111dc578195505b600086826020015163ffffffff166111f491906159f9565b905060008382116112055781611207565b835b602084015190915063ffffffff165b818110156113535760008682815481106112325761123261599b565b6000918252602080832090910154808352600690915260409091205490915060ff1661128a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061129f5761129f61599b565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112fc5750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b1561133e57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b5050808061134b90615a11565b915050611216565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092179091558490036115d757606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055891580156114d357506000547201000000000000000000000000000000000000900460ff165b156115485760015473ffffffffffffffffffffffffffffffffffffffff166114fb818a612908565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556115d5565b61158f73ffffffffffffffffffffffffffffffffffffffff82161561156d5781611589565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89612908565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561161057611610615625565b14611647576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166116ab576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106116d7576116d761599b565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611712576001611715565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156117c6576117c6615625565b0217905560028111156117db576117db615625565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505090565b600560205281600052604060002081815481106118a357600080fd5b90600052602060002001600091509150505481565b905090565b6118ca8383836001611abe565b505050565b6000818152600760209081526040808320600590925282208054825461190090610100900463ffffffff1682615a49565b95945050505050565b60606118b860546020612a09565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054908290559081900361197c576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a7e576040519150601f19603f3d011682016040523d82523d6000602084013e611a83565b606091505b50509050806118ca576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8161480611b3757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b611b6d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7984848484612a5b565b50505050565b6118ca8383836000611abe565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614611bfb576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c036133fc565b565b600080600054700100000000000000000000000000000000900460ff166002811115611c3357611c33615625565b14611c6a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110611c7f57611c7f61599b565b600091825260208220600590910201805490925063ffffffff90811614611cee57815460028054909163ffffffff16908110611cbd57611cbd61599b565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611d2690700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611d3a9067ffffffffffffffff1642615a49565b611d59611d19846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611d6d91906159f9565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611611dba5780611900565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080611e83836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115611ee2576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000611efd8383615a8f565b9050670de0b6b3a76400006000611f34827f0000000000000000000000000000000000000000000000000000000000000008615aa3565b90506000611f52611f4d670de0b6b3a764000086615aa3565b613955565b90506000611f608484613bb0565b90506000611f6e8383613bff565b90506000611f7b82613c2d565b90506000611f9a82611f95670de0b6b3a76400008f615aa3565b613e15565b90506000611fa88b83613bff565b9050611fb4818d615aa3565b9f9e505050505050505050505050505050565b60028181548110611fd757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614806120d757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b61210d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211b868686868686613e4f565b505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214f5761214f615625565b14612186576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806121958661447e565b935093509350935060006121ab85858585614887565b905060007f0000000000000000000000001c0e3b8e58dd91536caf37a6009536255a7816a673ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190615ae0565b9050600189036123365773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8461229a367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615afd565b506115d7565b600289036123625773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848961229a565b6003890361238e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848761229a565b600489036124aa5760006123d46fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614941565b6009546123e191906159f9565b6123ec9060016159f9565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561247f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a39190615afd565b50506115d7565b60058903612543576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122ed565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606125ce611909565b9050909192565b60008160000151826020015183604001518460600151604051602001612614949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612680576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006126ae856149ef565b9194509250905060018160018111156126c9576126c9615625565b14612700576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845161270c83856159f9565b14612743576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161275a5790505093506000835b8651811015612848576000806127cd6040518060400160405280858c600001516127b19190615a49565b8152602001858c602001516127c691906159f9565b90526149ef565b5091509150604051806040016040528083836127e991906159f9565b8152602001848b602001516127fe91906159f9565b8152508885815181106128135761281361599b565b60209081029190910101526128296001856159f9565b935061283581836159f9565b61283f90846159f9565b92505050612787565b50845250919392505050565b60606000806000612864856149ef565b91945092509050600081600181111561287f5761287f615625565b146128b6576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082846159f9565b8551146128f9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190085602001518484614e8d565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff909316928392906129579084906159f9565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b1580156129ec57600080fd5b505af1158015612a00573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054700100000000000000000000000000000000900460ff166002811115612a8757612a87615625565b14612abe576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110612ad357612ad361599b565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514612bba576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000612c7a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612cb55750612cb27f000000000000000000000000000000000000000000000000000000000000000460026159f9565b81145b8015612cbf575084155b15612cf6576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d1c575086155b15612d53576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115612dad576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd87f000000000000000000000000000000000000000000000000000000000000000460016159f9565b8103612dea57612dea86888588614f22565b34612df483611de4565b14612e2b576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e3688611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603612e9e576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016612efe9190615b16565b67ffffffffffffffff16612f198267ffffffffffffffff1690565b67ffffffffffffffff161115612ffb576000612f5660017f0000000000000000000000000000000000000000000000000000000000000004615a49565b8314612f8c5767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612fc1565b612fc17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615b3f565b9050612ff7817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff16615b16565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615613079576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b8152602001908152602001600020600160028054905061330f9190615a49565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b1580156133a757600080fd5b505af11580156133bb573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b60005471010000000000000000000000000000000000900460ff161561344e576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000001166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa158015613502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135269190615b6f565b909250905081613562576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461359557639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401351161362f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b15801561390457600080fd5b505af1158015613918573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136139b457631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613bed57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613c1d5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613c5b57919050565b680755bf798b4a1bf1e58212613c795763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613e46670de0b6b3a764000083613e2d86613955565b613e379190615b93565b613e419190615c4f565b613c2d565b90505b92915050565b60008054700100000000000000000000000000000000900460ff166002811115613e7b57613e7b615625565b14613eb2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110613ec757613ec761599b565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050613f267f000000000000000000000000000000000000000000000000000000000000000860016159f9565b613fc2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614613ffc576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156140f35761404f7f00000000000000000000000000000000000000000000000000000000000000047f0000000000000000000000000000000000000000000000000000000000000008615a49565b6001901b61406e846fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1661408a9190615cb7565b156140c7576140be6140af60016fffffffffffffffffffffffffffffffff8716615ccb565b865463ffffffff166000615172565b600301546140e9565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061411d565b6003850154915061411a6140af6fffffffffffffffffffffffffffffffff86166001615cf4565b90505b600882901b60088a8a60405161413492919061598b565b6040518091039020901b14614175576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141808c615256565b9050600061418f836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f0000000000000000000000001c0e3b8e58dd91536caf37a6009536255a7816a673ffffffffffffffffffffffffffffffffffffffff169063e14ced3290614209908f908f908f908f908a90600401615d71565b6020604051808303816000875af1158015614228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424c9190615afd565b6004850154911491506000906002906142f7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614393896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61439d9190615dab565b6143a79190615dce565b60ff1615905081151581036143e8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff161561443f576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061449e5761449e61599b565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000490614575906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145af576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000490614676906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146eb57825463ffffffff166146b57f000000000000000000000000000000000000000000000000000000000000000460016159f9565b83036146bf578391505b600281815481106146d2576146d261599b565b90600052602060002090600502019350809450506145b3565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661475461473f856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561482357600061478c836fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1611156147f75760006147ce6147c660016fffffffffffffffffffffffffffffffff8616615ccb565b896001615172565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506147fd9050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614879565b60006148456147c66fffffffffffffffffffffffffffffffff85166001615cf4565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156148f45760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611900565b82826040516020016149229291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b6000806149ce847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614a32576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614a57576000600160009450945094505050614e86565b60b78111614b6d576000614a6c608083615a49565b905080876000015111614aab576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614b2357507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614b5a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614e86915050565b60bf8111614ccb576000614b8260b783615a49565b905080876000015111614bc1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614c23576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614c6b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614c7581846159f9565b895111614cae576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614cb98360016159f9565b9750955060009450614e869350505050565b60f78111614d30576000614ce060c083615a49565b905080876000015111614d1f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614e86915050565b6000614d3d60f783615a49565b905080876000015111614d7c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614dde576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614e26576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e3081846159f9565b895111614e69576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e748360016159f9565b9750955060019450614e869350505050565b9193909250565b60608167ffffffffffffffff811115614ea857614ea86158cf565b6040519080825280601f01601f191660200182016040528015614ed2576020820181803683370190505b5090508115614f1b576000614ee784866159f9565b90506020820160005b84811015614f08578281015182820152602001614ef0565b84811115614f17576000858301525b5050505b9392505050565b6000614f416fffffffffffffffffffffffffffffffff84166001615cf4565b90506000614f5182866001615172565b9050600086901a838061503d5750614f8a60027f0000000000000000000000000000000000000000000000000000000000000004615cb7565b600483015460029061502e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6150389190615dce565b60ff16145b156150955760ff811660011480615057575060ff81166002145b615090576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b612a00565b60ff811615612a00576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b600080615160837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826151bb576151b66fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000004615285565b6151d6565b6151d6856fffffffffffffffffffffffffffffffff16615411565b9050600284815481106151eb576151eb61599b565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461524e57815460028054909163ffffffff169081106152395761523961599b565b906000526020600020906005020191506151fc565b509392505050565b60008060008060006152678661447e565b935093509350935061527b84848484614887565b9695505050505050565b600081615324846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161533a5763b34b5c226000526004601cfd5b61534383615411565b9050816153e2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613e4957613e466153f88360016159f9565b6fffffffffffffffffffffffffffffffff8316906154b6565b600081196001830116816154a5827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615543847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261557157600080fd5b50813567ffffffffffffffff81111561558957600080fd5b6020830191508360208285010111156155a157600080fd5b9250929050565b600080600083850360a08112156155be57600080fd5b60808112156155cc57600080fd5b50839250608084013567ffffffffffffffff8111156155ea57600080fd5b6155f68682870161555f565b9497909650939450505050565b6000806040838503121561561657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061568f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806000606084860312156156aa57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b818110156156e7576020818501810151868301820152016156cb565b818111156156f9576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613e4660208301846156c1565b60006020828403121561575157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461577a57600080fd5b50565b60006020828403121561578f57600080fd5b8135614f1b81615758565b803580151581146157aa57600080fd5b919050565b600080600080608085870312156157c557600080fd5b8435935060208501359250604085013591506157e36060860161579a565b905092959194509250565b60006020828403121561580057600080fd5b81356fffffffffffffffffffffffffffffffff81168114614f1b57600080fd5b6000806000806000806080878903121561583957600080fd5b863595506158496020880161579a565b9450604087013567ffffffffffffffff8082111561586657600080fd5b6158728a838b0161555f565b9096509450606089013591508082111561588b57600080fd5b5061589889828a0161555f565b979a9699509497509295939492505050565b63ffffffff8416815282602082015260606040820152600061190060608301846156c1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561591057600080fd5b6040516080810181811067ffffffffffffffff8211171561595a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615a0c57615a0c6159ca565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a4257615a426159ca565b5060010190565b600082821015615a5b57615a5b6159ca565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a9e57615a9e615a60565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615adb57615adb6159ca565b500290565b600060208284031215615af257600080fd5b8151614f1b81615758565b600060208284031215615b0f57600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015615b3757615b376159ca565b039392505050565b600067ffffffffffffffff80831681851681830481118215151615615b6657615b666159ca565b02949350505050565b60008060408385031215615b8257600080fd5b505080516020909101519092909150565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd457615bd46159ca565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0f57615c0f6159ca565b60008712925087820587128484161615615c2b57615c2b6159ca565b87850587128184161615615c4157615c416159ca565b505050929093029392505050565b600082615c5e57615c5e615a60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615cb257615cb26159ca565b500590565b600082615cc657615cc6615a60565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015615b3757615b376159ca565b60006fffffffffffffffffffffffffffffffff808316818516808303821115615d1f57615d1f6159ca565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615d85606083018789615d28565b8281036020840152615d98818688615d28565b9150508260408301529695505050505050565b600060ff821660ff841680821015615dc557615dc56159ca565b90039392505050565b600060ff831680615de157615de1615a60565b8060ff8416069150509291505056fea164736f6c634300080f000a"; + hex"6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b94578063fa315aa914610bb8578063fe2bbeb214610beb57600080fd5b8063ec5e630814610b11578063eff0f59214610b44578063f8f43ff614610b7457600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a8b578063d8cc1a3c14610abe578063dabd396d14610ade57600080fd5b8063c6f0308c146109b3578063cf09e0d014610a3d578063d5d44d8014610a5e57600080fd5b8063a445ece611610143578063bcef3b551161011d578063bcef3b5514610933578063bd8da95614610973578063c395e1ca1461099357600080fd5b8063a445ece6146107f3578063a8e4fb90146108bf578063bbdc02db146108f257600080fd5b80638980e0cc116101745780638980e0cc1461076b5780638b85902b146107805780638d450a95146107c057600080fd5b806370872aa51461073b5780637b0f0adc146107505780638129fc1c1461076357600080fd5b80633fc8cef31161025e5780635c0cba33116102075780636361506d116101e15780636361506d146106b55780636b6716c0146106f55780636f0344091461072857600080fd5b80635c0cba331461064d578063609d33341461068057806360e274641461069557600080fd5b806354fd4d501161023857806354fd4d50146105a757806357da950e146105fd5780635a5fa2d91461062d57600080fd5b80633fc8cef31461052e578063472777c614610561578063534db0e21461057457600080fd5b80632810e1d6116102c057806337b1b2291161029a57806337b1b2291461047b5780633a768463146104bb5780633e3ac912146104ee57600080fd5b80632810e1d6146103f45780632ad69aeb1461040957806330dbe5701461042957600080fd5b806319effeb4116102f157806319effeb41461034f578063200d2ed21461039a57806325fc2ace146103d557600080fd5b8063019351301461030d57806303c2924d1461032f575b600080fd5b34801561031957600080fd5b5061032d6103283660046155a8565b610c1b565b005b34801561033b57600080fd5b5061032d61034a366004615603565b610f3c565b34801561035b57600080fd5b5060005461037c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103a657600080fd5b506000546103c890700100000000000000000000000000000000900460ff1681565b6040516103919190615654565b3480156103e157600080fd5b506008545b604051908152602001610391565b34801561040057600080fd5b506103c86115e2565b34801561041557600080fd5b506103e6610424366004615603565b611887565b34801561043557600080fd5b506001546104569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610391565b34801561048757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610456565b3480156104c757600080fd5b507f000000000000000000000000477508a9612b67709caf812d4356d531ba6a471d610456565b3480156104fa57600080fd5b5060005461051e907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610391565b34801561053a57600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610456565b61032d61056f366004615695565b6118bd565b34801561058057600080fd5b507f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63610456565b3480156105b357600080fd5b506105f06040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b604051610391919061572c565b34801561060957600080fd5b50600854600954610618919082565b60408051928352602083019190915201610391565b34801561063957600080fd5b506103e661064836600461573f565b6118cf565b34801561065957600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610456565b34801561068c57600080fd5b506105f0611909565b3480156106a157600080fd5b5061032d6106b036600461577d565b611917565b3480156106c157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103e6565b34801561070157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b61032d6107363660046157af565b611abe565b34801561074757600080fd5b506009546103e6565b61032d61075e366004615695565b611b7f565b61032d611b8c565b34801561077757600080fd5b506002546103e6565b34801561078c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103e6565b3480156107cc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b3480156107ff57600080fd5b5061086b61080e36600461573f565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff166060820152608001610391565b3480156108cb57600080fd5b507f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8610456565b3480156108fe57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000001168152602001610391565b34801561093f57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103e6565b34801561097f57600080fd5b5061037c61098e36600461573f565b611c05565b34801561099f57600080fd5b506103e66109ae3660046157ee565b611de4565b3480156109bf57600080fd5b506109d36109ce36600461573f565b611fc7565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610391565b348015610a4957600080fd5b5060005461037c9067ffffffffffffffff1681565b348015610a6a57600080fd5b506103e6610a7936600461577d565b60036020526000908152604090205481565b348015610a9757600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103e6565b348015610aca57600080fd5b5061032d610ad9366004615820565b61205e565b348015610aea57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b061037c565b348015610b1d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103e6565b348015610b5057600080fd5b5061051e610b5f36600461573f565b60046020526000908152604090205460ff1681565b348015610b8057600080fd5b5061032d610b8f366004615695565b612123565b348015610ba057600080fd5b50610ba9612575565b604051610391939291906158aa565b348015610bc457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103e6565b348015610bf757600080fd5b5061051e610c0636600461573f565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610c4757610c47615625565b14610c7e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610cd1576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d08367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610d1f610d1a368690038601866158fe565b6125d5565b14610d56576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610d6b92919061598b565b604051809103902014610daa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610df3610dee84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263192505050565b61269e565b90506000610e1a82600881518110610e0d57610e0d61599b565b6020026020010151612854565b9050602081511115610e58576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610ecd576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610f6857610f68615625565b14610f9f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610fb457610fb461599b565b906000526020600020906005020190506000610fcf84611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015611038576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611081576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561109e57508515155b15611139578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110d157816110ed565b600186015473ffffffffffffffffffffffffffffffffffffffff165b90506110f98187612908565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff1660608301526111dc576fffffffffffffffffffffffffffffffff60408201526001815260008690036111dc578195505b600086826020015163ffffffff166111f491906159f9565b905060008382116112055781611207565b835b602084015190915063ffffffff165b818110156113535760008682815481106112325761123261599b565b6000918252602080832090910154808352600690915260409091205490915060ff1661128a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061129f5761129f61599b565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112fc5750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b1561133e57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b5050808061134b90615a11565b915050611216565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092179091558490036115d757606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055891580156114d357506000547201000000000000000000000000000000000000900460ff165b156115485760015473ffffffffffffffffffffffffffffffffffffffff166114fb818a612908565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556115d5565b61158f73ffffffffffffffffffffffffffffffffffffffff82161561156d5781611589565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89612908565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561161057611610615625565b14611647576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166116ab576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106116d7576116d761599b565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611712576001611715565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156117c6576117c6615625565b0217905560028111156117db576117db615625565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505090565b600560205281600052604060002081815481106118a357600080fd5b90600052602060002001600091509150505481565b905090565b6118ca8383836001611abe565b505050565b6000818152600760209081526040808320600590925282208054825461190090610100900463ffffffff1682615a49565b95945050505050565b60606118b860546020612a09565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054908290559081900361197c576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a7e576040519150601f19603f3d011682016040523d82523d6000602084013e611a83565b606091505b50509050806118ca576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8161480611b3757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b611b6d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7984848484612a5b565b50505050565b6118ca8383836000611abe565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614611bfb576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c036133fc565b565b600080600054700100000000000000000000000000000000900460ff166002811115611c3357611c33615625565b14611c6a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110611c7f57611c7f61599b565b600091825260208220600590910201805490925063ffffffff90811614611cee57815460028054909163ffffffff16908110611cbd57611cbd61599b565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611d2690700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611d3a9067ffffffffffffffff1642615a49565b611d59611d19846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611d6d91906159f9565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611611dba5780611900565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080611e83836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115611ee2576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000611efd8383615a8f565b9050670de0b6b3a76400006000611f34827f0000000000000000000000000000000000000000000000000000000000000008615aa3565b90506000611f52611f4d670de0b6b3a764000086615aa3565b613955565b90506000611f608484613bb0565b90506000611f6e8383613bff565b90506000611f7b82613c2d565b90506000611f9a82611f95670de0b6b3a76400008f615aa3565b613e15565b90506000611fa88b83613bff565b9050611fb4818d615aa3565b9f9e505050505050505050505050505050565b60028181548110611fd757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614806120d757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b61210d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211b868686868686613e4f565b505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214f5761214f615625565b14612186576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806121958661447e565b935093509350935060006121ab85858585614887565b905060007f000000000000000000000000477508a9612b67709caf812d4356d531ba6a471d73ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190615ae0565b9050600189036123365773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8461229a367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615afd565b506115d7565b600289036123625773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848961229a565b6003890361238e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848761229a565b600489036124aa5760006123d46fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614941565b6009546123e191906159f9565b6123ec9060016159f9565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561247f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a39190615afd565b50506115d7565b60058903612543576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122ed565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606125ce611909565b9050909192565b60008160000151826020015183604001518460600151604051602001612614949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612680576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006126ae856149ef565b9194509250905060018160018111156126c9576126c9615625565b14612700576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845161270c83856159f9565b14612743576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161275a5790505093506000835b8651811015612848576000806127cd6040518060400160405280858c600001516127b19190615a49565b8152602001858c602001516127c691906159f9565b90526149ef565b5091509150604051806040016040528083836127e991906159f9565b8152602001848b602001516127fe91906159f9565b8152508885815181106128135761281361599b565b60209081029190910101526128296001856159f9565b935061283581836159f9565b61283f90846159f9565b92505050612787565b50845250919392505050565b60606000806000612864856149ef565b91945092509050600081600181111561287f5761287f615625565b146128b6576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082846159f9565b8551146128f9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190085602001518484614e8d565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff909316928392906129579084906159f9565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b1580156129ec57600080fd5b505af1158015612a00573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054700100000000000000000000000000000000900460ff166002811115612a8757612a87615625565b14612abe576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110612ad357612ad361599b565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514612bba576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000612c7a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612cb55750612cb27f000000000000000000000000000000000000000000000000000000000000000460026159f9565b81145b8015612cbf575084155b15612cf6576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d1c575086155b15612d53576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115612dad576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd87f000000000000000000000000000000000000000000000000000000000000000460016159f9565b8103612dea57612dea86888588614f22565b34612df483611de4565b14612e2b576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e3688611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603612e9e576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016612efe9190615b16565b67ffffffffffffffff16612f198267ffffffffffffffff1690565b67ffffffffffffffff161115612ffb576000612f5660017f0000000000000000000000000000000000000000000000000000000000000004615a49565b8314612f8c5767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612fc1565b612fc17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615b3f565b9050612ff7817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff16615b16565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615613079576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b8152602001908152602001600020600160028054905061330f9190615a49565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b1580156133a757600080fd5b505af11580156133bb573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b60005471010000000000000000000000000000000000900460ff161561344e576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000001166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa158015613502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135269190615b6f565b909250905081613562576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461359557639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401351161362f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b15801561390457600080fd5b505af1158015613918573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136139b457631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613bed57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613c1d5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613c5b57919050565b680755bf798b4a1bf1e58212613c795763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613e46670de0b6b3a764000083613e2d86613955565b613e379190615b93565b613e419190615c4f565b613c2d565b90505b92915050565b60008054700100000000000000000000000000000000900460ff166002811115613e7b57613e7b615625565b14613eb2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110613ec757613ec761599b565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050613f267f000000000000000000000000000000000000000000000000000000000000000860016159f9565b613fc2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614613ffc576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156140f35761404f7f00000000000000000000000000000000000000000000000000000000000000047f0000000000000000000000000000000000000000000000000000000000000008615a49565b6001901b61406e846fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1661408a9190615cb7565b156140c7576140be6140af60016fffffffffffffffffffffffffffffffff8716615ccb565b865463ffffffff166000615172565b600301546140e9565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061411d565b6003850154915061411a6140af6fffffffffffffffffffffffffffffffff86166001615cf4565b90505b600882901b60088a8a60405161413492919061598b565b6040518091039020901b14614175576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141808c615256565b9050600061418f836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000477508a9612b67709caf812d4356d531ba6a471d73ffffffffffffffffffffffffffffffffffffffff169063e14ced3290614209908f908f908f908f908a90600401615d71565b6020604051808303816000875af1158015614228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424c9190615afd565b6004850154911491506000906002906142f7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614393896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61439d9190615dab565b6143a79190615dce565b60ff1615905081151581036143e8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff161561443f576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061449e5761449e61599b565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000490614575906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145af576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000490614676906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146eb57825463ffffffff166146b57f000000000000000000000000000000000000000000000000000000000000000460016159f9565b83036146bf578391505b600281815481106146d2576146d261599b565b90600052602060002090600502019350809450506145b3565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661475461473f856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561482357600061478c836fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1611156147f75760006147ce6147c660016fffffffffffffffffffffffffffffffff8616615ccb565b896001615172565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506147fd9050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614879565b60006148456147c66fffffffffffffffffffffffffffffffff85166001615cf4565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156148f45760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611900565b82826040516020016149229291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b6000806149ce847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614a32576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614a57576000600160009450945094505050614e86565b60b78111614b6d576000614a6c608083615a49565b905080876000015111614aab576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614b2357507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614b5a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614e86915050565b60bf8111614ccb576000614b8260b783615a49565b905080876000015111614bc1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614c23576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614c6b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614c7581846159f9565b895111614cae576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614cb98360016159f9565b9750955060009450614e869350505050565b60f78111614d30576000614ce060c083615a49565b905080876000015111614d1f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614e86915050565b6000614d3d60f783615a49565b905080876000015111614d7c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614dde576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614e26576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e3081846159f9565b895111614e69576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e748360016159f9565b9750955060019450614e869350505050565b9193909250565b60608167ffffffffffffffff811115614ea857614ea86158cf565b6040519080825280601f01601f191660200182016040528015614ed2576020820181803683370190505b5090508115614f1b576000614ee784866159f9565b90506020820160005b84811015614f08578281015182820152602001614ef0565b84811115614f17576000858301525b5050505b9392505050565b6000614f416fffffffffffffffffffffffffffffffff84166001615cf4565b90506000614f5182866001615172565b9050600086901a838061503d5750614f8a60027f0000000000000000000000000000000000000000000000000000000000000004615cb7565b600483015460029061502e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6150389190615dce565b60ff16145b156150955760ff811660011480615057575060ff81166002145b615090576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b612a00565b60ff811615612a00576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b600080615160837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826151bb576151b66fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000004615285565b6151d6565b6151d6856fffffffffffffffffffffffffffffffff16615411565b9050600284815481106151eb576151eb61599b565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461524e57815460028054909163ffffffff169081106152395761523961599b565b906000526020600020906005020191506151fc565b509392505050565b60008060008060006152678661447e565b935093509350935061527b84848484614887565b9695505050505050565b600081615324846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161533a5763b34b5c226000526004601cfd5b61534383615411565b9050816153e2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613e4957613e466153f88360016159f9565b6fffffffffffffffffffffffffffffffff8316906154b6565b600081196001830116816154a5827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615543847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261557157600080fd5b50813567ffffffffffffffff81111561558957600080fd5b6020830191508360208285010111156155a157600080fd5b9250929050565b600080600083850360a08112156155be57600080fd5b60808112156155cc57600080fd5b50839250608084013567ffffffffffffffff8111156155ea57600080fd5b6155f68682870161555f565b9497909650939450505050565b6000806040838503121561561657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061568f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806000606084860312156156aa57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b818110156156e7576020818501810151868301820152016156cb565b818111156156f9576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613e4660208301846156c1565b60006020828403121561575157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461577a57600080fd5b50565b60006020828403121561578f57600080fd5b8135614f1b81615758565b803580151581146157aa57600080fd5b919050565b600080600080608085870312156157c557600080fd5b8435935060208501359250604085013591506157e36060860161579a565b905092959194509250565b60006020828403121561580057600080fd5b81356fffffffffffffffffffffffffffffffff81168114614f1b57600080fd5b6000806000806000806080878903121561583957600080fd5b863595506158496020880161579a565b9450604087013567ffffffffffffffff8082111561586657600080fd5b6158728a838b0161555f565b9096509450606089013591508082111561588b57600080fd5b5061589889828a0161555f565b979a9699509497509295939492505050565b63ffffffff8416815282602082015260606040820152600061190060608301846156c1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561591057600080fd5b6040516080810181811067ffffffffffffffff8211171561595a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615a0c57615a0c6159ca565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a4257615a426159ca565b5060010190565b600082821015615a5b57615a5b6159ca565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a9e57615a9e615a60565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615adb57615adb6159ca565b500290565b600060208284031215615af257600080fd5b8151614f1b81615758565b600060208284031215615b0f57600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015615b3757615b376159ca565b039392505050565b600067ffffffffffffffff80831681851681830481118215151615615b6657615b666159ca565b02949350505050565b60008060408385031215615b8257600080fd5b505080516020909101519092909150565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd457615bd46159ca565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0f57615c0f6159ca565b60008712925087820587128484161615615c2b57615c2b6159ca565b87850587128184161615615c4157615c416159ca565b505050929093029392505050565b600082615c5e57615c5e615a60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615cb257615cb26159ca565b500590565b600082615cc657615cc6615a60565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015615b3757615b376159ca565b60006fffffffffffffffffffffffffffffffff808316818516808303821115615d1f57615d1f6159ca565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615d85606083018789615d28565b8281036020840152615d98818688615d28565b9150508260408301529695505050505050565b600060ff821660ff841680821015615dc557615dc56159ca565b90039392505050565b600060ff831680615de157615de1615a60565b8060ff8416069150509291505056fea164736f6c634300080f000a"; } From 1c72b30498af92eb2f1ec053a07500d019f9cc14 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Jun 2024 09:09:24 -0600 Subject: [PATCH 058/141] build(deps): bump urllib3 from 1.26.18 to 1.26.19 in /ops/check-changed (#10901) Bumps [urllib3](https://github.com/urllib3/urllib3) from 1.26.18 to 1.26.19. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/1.26.19/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/1.26.18...1.26.19) --- updated-dependencies: - dependency-name: urllib3 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- ops/check-changed/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ops/check-changed/requirements.txt b/ops/check-changed/requirements.txt index c58d1db7352b..b5028c7faf85 100644 --- a/ops/check-changed/requirements.txt +++ b/ops/check-changed/requirements.txt @@ -8,5 +8,5 @@ PyGithub==1.57 PyJWT==2.6.0 PyNaCl==1.5.0 requests==2.32.0 -urllib3==1.26.18 +urllib3==1.26.19 wrapt==1.14.1 From 7cb6cdde7b8e58897d4e6b7c0648f27f281275b3 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Tue, 18 Jun 2024 20:15:48 +0300 Subject: [PATCH 059/141] op-chain-ops: remove dead code (#10938) With the usage of the superchain-registry, the need for this code has gone away. Its not being maintained and falling out of sync, so it should be deleted to ensure that the codebase can stay lean over time. Always tend the garden. --- op-chain-ops/cmd/op-version-check/README.md | 48 ------ op-chain-ops/cmd/op-version-check/main.go | 169 -------------------- 2 files changed, 217 deletions(-) delete mode 100644 op-chain-ops/cmd/op-version-check/README.md delete mode 100644 op-chain-ops/cmd/op-version-check/main.go diff --git a/op-chain-ops/cmd/op-version-check/README.md b/op-chain-ops/cmd/op-version-check/README.md deleted file mode 100644 index 29e5f08ab4de..000000000000 --- a/op-chain-ops/cmd/op-version-check/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# op-version-check - -A CLI tool for determining which contract versions are deployed for -chains in a superchain. It will output a JSON file that contains a -list of each chain's versions. It is assumed that the implementations -that are being checked have already been deployed and their contract -addresses exist inside of the `superchain-registry` repository. It is -also assumed that the semantic version file in the `superchain-registry` -has been updated. The tool will output the semantic versioning to -determine which contract versions are deployed. - -### Configuration - -#### L1 RPC URL - -The L1 RPC URL is used to determine which superchain to target. All -L2s that are not based on top of the L1 chain that corresponds to the -L1 RPC URL are filtered out from being checked. It also is used to -double check that the data in the `superchain-registry` is correct. - -#### Chain IDs - -A list of L2 chain IDs can be passed that will be used to filter which -L2 chains will have their versions checked. Omitting this argument will -result in all chains in the superchain being considered. - -#### Deploy Config - -The path to the `deploy-config` directory in the contracts package. -Since multiple L2 networks may be considered in the check, the `deploy-config` -directory must be passed and then the particular deploy config files will -be read out of the directory as needed. - -#### Outfile - -The file that the versions should be written to. If omitted, the file -will be written to stdout - -#### Usage - -It can be built and run using the [Makefile](../../Makefile) `op-version-check` -target. Run `make op-version-check` to create a binary in [../../bin/op-version-check](../../bin/op-version-check) -that can be executed, optionally providing the `--l1-rpc-url`, `--chain-ids`, -`--superchain-target`, and `--outfile` flags. - -```sh -./bin/op-version-check -``` diff --git a/op-chain-ops/cmd/op-version-check/main.go b/op-chain-ops/cmd/op-version-check/main.go deleted file mode 100644 index 163ff8599ef5..000000000000 --- a/op-chain-ops/cmd/op-version-check/main.go +++ /dev/null @@ -1,169 +0,0 @@ -package main - -import ( - "encoding/json" - "errors" - "fmt" - "os" - - "github.com/ethereum/go-ethereum/ethclient" - "github.com/ethereum/go-ethereum/log" - "github.com/mattn/go-isatty" - "github.com/urfave/cli/v2" - "golang.org/x/exp/maps" - - "github.com/ethereum-optimism/optimism/op-chain-ops/upgrades" - "github.com/ethereum-optimism/optimism/op-service/jsonutil" - oplog "github.com/ethereum-optimism/optimism/op-service/log" - - "github.com/ethereum-optimism/superchain-registry/superchain" -) - -type Contract struct { - Version string `yaml:"version"` - Address superchain.Address `yaml:"address"` -} - -type ChainVersionCheck struct { - Name string `yaml:"name"` - ChainID uint64 `yaml:"chain_id"` - Contracts map[string]Contract `yaml:"contracts"` -} - -func main() { - color := isatty.IsTerminal(os.Stderr.Fd()) - oplog.SetGlobalLogHandler(log.NewTerminalHandler(os.Stderr, color)) - - app := &cli.App{ - Name: "op-version-check", - Usage: "Determine which contract versions are deployed for chains in a superchain", - Flags: []cli.Flag{ - &cli.StringSliceFlag{ - Name: "l1-rpc-urls", - Usage: "L1 RPC URLs, the chain ID will be used to determine the superchain", - EnvVars: []string{"L1_RPC_URLS"}, - }, - &cli.StringSliceFlag{ - Name: "l2-rpc-urls", - Usage: "L2 RPC URLs, corresponding to chains to check versions for. Corresponds to all chains if empty", - EnvVars: []string{"L2_RPC_URLS"}, - }, - &cli.PathFlag{ - Name: "outfile", - Usage: "The file to write the output to. If not specified, output is written to stdout", - EnvVars: []string{"OUTFILE"}, - }, - }, - Action: entrypoint, - } - - if err := app.Run(os.Args); err != nil { - log.Crit("error op-version-check", "err", err) - } -} - -// entrypoint contains the main logic of the script -func entrypoint(ctx *cli.Context) error { - l1RPCURLs := ctx.StringSlice("l1-rpc-urls") - l2RPCURLs := ctx.StringSlice("l2-rpc-urls") - - var l2ChainIDs []uint64 - - // If no L2 RPC URLs are specified, we check all chains for the L1 RPC URL - if len(l2RPCURLs) == 0 { - l2ChainIDs = maps.Keys(superchain.OPChains) - } else { - for _, l2RPCURL := range l2RPCURLs { - client, err := ethclient.Dial(l2RPCURL) - if err != nil { - return errors.New("cannot create L2 client") - } - - l2ChainID, err := client.ChainID(ctx.Context) - if err != nil { - return fmt.Errorf("cannot fetch L2 chain ID: %w", err) - } - - l2ChainIDs = append(l2ChainIDs, l2ChainID.Uint64()) - } - } - - output := []ChainVersionCheck{} - - for _, l2ChainID := range l2ChainIDs { - chainConfig := superchain.OPChains[l2ChainID] - - if chainConfig.ChainID != l2ChainID { - return fmt.Errorf("mismatched chain IDs: %d != %d", chainConfig.ChainID, l2ChainID) - } - - for _, l1RPCURL := range l1RPCURLs { - client, err := ethclient.Dial(l1RPCURL) - if err != nil { - return errors.New("cannot create L1 client") - } - - l1ChainID, err := client.ChainID(ctx.Context) - if err != nil { - return fmt.Errorf("cannot fetch L1 chain ID: %w", err) - } - - sc, ok := superchain.Superchains[chainConfig.Superchain] - if !ok { - return fmt.Errorf("superchain name %s not registered", chainConfig.Superchain) - } - - declaredL1ChainID := sc.Config.L1.ChainID - - if l1ChainID.Uint64() != declaredL1ChainID { - // L2 corresponds to a different superchain than L1, skip - log.Info("Ignoring L1/L2", "l1-chain-id", l1ChainID, "l2-chain-id", l2ChainID) - continue - } - - log.Info(chainConfig.Name, "l1-chain-id", l1ChainID, "l2-chain-id", l2ChainID) - - log.Info("Detecting on chain contracts") - // Tracking the individual addresses can be deprecated once the system is upgraded - // to the new contracts where the system config has a reference to each address. - addresses, ok := superchain.Addresses[l2ChainID] - if !ok { - return fmt.Errorf("no addresses for chain ID %d", l2ChainID) - } - versions, err := upgrades.GetContractVersions(ctx.Context, addresses, chainConfig, client) - if err != nil { - return fmt.Errorf("error getting contract versions: %w", err) - } - - contracts := make(map[string]Contract) - - contracts["AddressManager"] = Contract{Version: "null", Address: addresses.AddressManager} - contracts["L1CrossDomainMessenger"] = Contract{Version: versions.L1CrossDomainMessenger, Address: addresses.L1CrossDomainMessengerProxy} - contracts["L1ERC721Bridge"] = Contract{Version: versions.L1ERC721Bridge, Address: addresses.L1ERC721BridgeProxy} - contracts["L1StandardBridge"] = Contract{Version: versions.L1ERC721Bridge, Address: addresses.L1StandardBridgeProxy} - contracts["L2OutputOracle"] = Contract{Version: versions.L2OutputOracle, Address: addresses.L2OutputOracleProxy} - contracts["OptimismMintableERC20Factory"] = Contract{Version: versions.OptimismMintableERC20Factory, Address: addresses.OptimismMintableERC20FactoryProxy} - contracts["OptimismPortal"] = Contract{Version: versions.OptimismPortal, Address: addresses.OptimismPortalProxy} - contracts["SystemConfig"] = Contract{Version: versions.SystemConfig, Address: addresses.SystemConfigProxy} - contracts["ProxyAdmin"] = Contract{Version: "null", Address: addresses.ProxyAdmin} - - output = append(output, ChainVersionCheck{Name: chainConfig.Name, ChainID: l2ChainID, Contracts: contracts}) - - log.Info("Successfully processed contract versions", "chain", chainConfig.Name, "l1-chain-id", l1ChainID, "l2-chain-id", l2ChainID) - break - } - } - // Write contract versions to disk or stdout - if outfile := ctx.Path("outfile"); outfile != "" { - if err := jsonutil.WriteJSON(outfile, output, 0o666); err != nil { - return err - } - } else { - data, err := json.MarshalIndent(output, "", " ") - if err != nil { - return err - } - fmt.Println(string(data)) - } - return nil -} From 64f5ff554c78d89319abdbc49b5b2b19d7dc229c Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Tue, 18 Jun 2024 20:53:25 +0300 Subject: [PATCH 060/141] supervisor: add Identifier JSON marshaling (#10718) * supervisor: add Identifier JSON marshaling Adds json marshaling so that the type used within is easier to deal with. * op-supervisor: fix identifier struct --------- Co-authored-by: protolambda --- op-supervisor/supervisor/types/types.go | 34 +++++++++++++++++ op-supervisor/supervisor/types/types_test.go | 40 ++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 op-supervisor/supervisor/types/types_test.go diff --git a/op-supervisor/supervisor/types/types.go b/op-supervisor/supervisor/types/types.go index 4caf81704383..288cdc5166b8 100644 --- a/op-supervisor/supervisor/types/types.go +++ b/op-supervisor/supervisor/types/types.go @@ -1,14 +1,25 @@ package types import ( + "encoding/json" "errors" "fmt" + "github.com/holiman/uint256" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" ) type Identifier struct { + Origin common.Address + BlockNumber uint64 + LogIndex uint64 + Timestamp uint64 + ChainID uint256.Int // flat, not a pointer, to make Identifier safe as map key +} + +type identifierMarshaling struct { Origin common.Address `json:"origin"` BlockNumber hexutil.Uint64 `json:"blockNumber"` LogIndex hexutil.Uint64 `json:"logIndex"` @@ -16,6 +27,29 @@ type Identifier struct { ChainID hexutil.U256 `json:"chainID"` } +func (id Identifier) MarshalJSON() ([]byte, error) { + var enc identifierMarshaling + enc.Origin = id.Origin + enc.BlockNumber = hexutil.Uint64(id.BlockNumber) + enc.LogIndex = hexutil.Uint64(id.LogIndex) + enc.Timestamp = hexutil.Uint64(id.Timestamp) + enc.ChainID = (hexutil.U256)(id.ChainID) + return json.Marshal(&enc) +} + +func (id *Identifier) UnmarshalJSON(input []byte) error { + var dec identifierMarshaling + if err := json.Unmarshal(input, &dec); err != nil { + return err + } + id.Origin = dec.Origin + id.BlockNumber = uint64(dec.BlockNumber) + id.LogIndex = uint64(dec.LogIndex) + id.Timestamp = uint64(dec.Timestamp) + id.ChainID = (uint256.Int)(dec.ChainID) + return nil +} + type SafetyLevel string func (lvl SafetyLevel) String() string { diff --git a/op-supervisor/supervisor/types/types_test.go b/op-supervisor/supervisor/types/types_test.go new file mode 100644 index 000000000000..c04ad00d4f27 --- /dev/null +++ b/op-supervisor/supervisor/types/types_test.go @@ -0,0 +1,40 @@ +package types + +import ( + "encoding/json" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/ethereum/go-ethereum/common" + "github.com/holiman/uint256" +) + +func FuzzRoundtripIdentifierJSONMarshal(f *testing.F) { + f.Fuzz(func(t *testing.T, origin []byte, blockNumber uint64, logIndex uint64, timestamp uint64, chainID []byte) { + if len(chainID) > 32 { + chainID = chainID[:32] + } + + id := Identifier{ + Origin: common.BytesToAddress(origin), + BlockNumber: blockNumber, + LogIndex: logIndex, + Timestamp: timestamp, + ChainID: uint256.Int{}, + } + id.ChainID.SetBytes(chainID) + + raw, err := json.Marshal(&id) + require.NoError(t, err) + + var dec Identifier + require.NoError(t, json.Unmarshal(raw, &dec)) + + require.Equal(t, id.Origin, dec.Origin) + require.Equal(t, id.BlockNumber, dec.BlockNumber) + require.Equal(t, id.LogIndex, dec.LogIndex) + require.Equal(t, id.Timestamp, dec.Timestamp) + require.Equal(t, id.ChainID, dec.ChainID) + }) +} From ff3fdc77117b7a48ff6f391888a24d6df1377b1b Mon Sep 17 00:00:00 2001 From: smartcontracts Date: Tue, 18 Jun 2024 14:47:48 -0400 Subject: [PATCH 061/141] maint: move deployment scripts into a deploy folder (#10738) --- bedrock-devnet/devnet/__init__.py | 2 +- packages/contracts-bedrock/README.md | 6 +++--- packages/contracts-bedrock/package.json | 2 +- .../contracts-bedrock/scripts/ChainAssertions.sol | 4 ++-- .../contracts-bedrock/scripts/L2Genesis.s.sol | 4 ++-- packages/contracts-bedrock/scripts/deploy.sh | 15 --------------- .../scripts/{ => deploy}/Deploy.s.sol | 2 +- .../scripts/{ => deploy}/DeployConfig.s.sol | 0 .../scripts/{ => deploy}/DeployOwnership.s.sol | 2 +- .../scripts/{ => deploy}/Deployer.sol | 2 +- .../contracts-bedrock/scripts/deploy/deploy.sh | 15 +++++++++++++++ .../contracts-bedrock/scripts/fpac/FPACOPS.s.sol | 2 +- packages/contracts-bedrock/scripts/statediff.sh | 2 +- .../test/Safe/DeployOwnership.t.sol | 2 +- .../test/invariants/InvariantTest.sol | 2 +- packages/contracts-bedrock/test/kontrol/README.md | 2 +- .../test/kontrol/deployment/KontrolDeployment.sol | 2 +- .../test/kontrol/scripts/json/clean_json.py | 2 +- .../kontrol/scripts/make-summary-deployment.sh | 2 +- .../contracts-bedrock/test/setup/CommonTest.sol | 2 +- packages/contracts-bedrock/test/setup/Setup.sol | 4 ++-- .../test/vendor/Initializable.t.sol | 2 +- 22 files changed, 39 insertions(+), 39 deletions(-) delete mode 100755 packages/contracts-bedrock/scripts/deploy.sh rename packages/contracts-bedrock/scripts/{ => deploy}/Deploy.s.sol (99%) rename packages/contracts-bedrock/scripts/{ => deploy}/DeployConfig.s.sol (100%) rename packages/contracts-bedrock/scripts/{ => deploy}/DeployOwnership.s.sol (99%) rename packages/contracts-bedrock/scripts/{ => deploy}/Deployer.sol (94%) create mode 100755 packages/contracts-bedrock/scripts/deploy/deploy.sh diff --git a/bedrock-devnet/devnet/__init__.py b/bedrock-devnet/devnet/__init__.py index e588431de4b6..2bea550a1d1c 100644 --- a/bedrock-devnet/devnet/__init__.py +++ b/bedrock-devnet/devnet/__init__.py @@ -143,7 +143,7 @@ def devnet_l1_allocs(paths): log.info('Generating L1 genesis allocs') init_devnet_l1_deploy_config(paths) - fqn = 'scripts/Deploy.s.sol:Deploy' + fqn = 'scripts/deploy/Deploy.s.sol:Deploy' run_command([ # We need to set the sender here to an account we know the private key of, # because the sender ends up being the owner of the ProxyAdmin SAFE diff --git a/packages/contracts-bedrock/README.md b/packages/contracts-bedrock/README.md index 76f9d4b96f8e..5957a3c49a8a 100644 --- a/packages/contracts-bedrock/README.md +++ b/packages/contracts-bedrock/README.md @@ -280,7 +280,7 @@ descriptions of the values. ```bash DEPLOYMENT_OUTFILE=deployments/artifact.json \ DEPLOY_CONFIG_PATH= \ - forge script scripts/Deploy.s.sol:Deploy \ + forge script scripts/deploy/Deploy.s.sol:Deploy \ --broadcast --private-key $PRIVATE_KEY \ --rpc-url $ETH_RPC_URL ``` @@ -339,11 +339,11 @@ While it has received initial review from core contributors, it is still undergo ### Execution Before deploying the contracts, you can verify the state diff produced by the deploy script using the `runWithStateDiff()` function signature which produces the outputs inside [`snapshots/state-diff/`](./snapshots/state-diff). -Run the deployment with state diffs by executing: `forge script -vvv scripts/Deploy.s.sol:Deploy --sig 'runWithStateDiff()' --rpc-url $ETH_RPC_URL --broadcast --private-key $PRIVATE_KEY`. +Run the deployment with state diffs by executing: `forge script -vvv scripts/deploy/Deploy.s.sol:Deploy --sig 'runWithStateDiff()' --rpc-url $ETH_RPC_URL --broadcast --private-key $PRIVATE_KEY`. 1. Set the env vars `ETH_RPC_URL`, `PRIVATE_KEY` and `ETHERSCAN_API_KEY` if contract verification is desired. 1. Set the `DEPLOY_CONFIG_PATH` env var to a path on the filesystem that points to a deploy config. -1. Deploy the contracts with `forge script -vvv scripts/Deploy.s.sol:Deploy --rpc-url $ETH_RPC_URL --broadcast --private-key $PRIVATE_KEY` +1. Deploy the contracts with `forge script -vvv scripts/deploy/Deploy.s.sol:Deploy --rpc-url $ETH_RPC_URL --broadcast --private-key $PRIVATE_KEY` Pass the `--verify` flag to verify the deployments automatically with Etherscan. ### Deploying a single contract diff --git a/packages/contracts-bedrock/package.json b/packages/contracts-bedrock/package.json index 13d1b79d9334..2a3278e4edd0 100644 --- a/packages/contracts-bedrock/package.json +++ b/packages/contracts-bedrock/package.json @@ -19,7 +19,7 @@ "genesis": "forge script scripts/L2Genesis.s.sol:L2Genesis --sig 'runWithStateDump()'", "coverage": "pnpm build:go-ffi && (forge coverage || (bash -c \"forge coverage 2>&1 | grep -q 'Stack too deep' && echo -e '\\033[1;33mWARNING\\033[0m: Coverage failed with stack too deep, so overriding and exiting successfully' && exit 0 || exit 1\"))", "coverage:lcov": "pnpm build:go-ffi && (forge coverage --report lcov || (bash -c \"forge coverage --report lcov 2>&1 | grep -q 'Stack too deep' && echo -e '\\033[1;33mWARNING\\033[0m: Coverage failed with stack too deep, so overriding and exiting successfully' && exit 0 || exit 1\"))", - "deploy": "./scripts/deploy.sh", + "deploy": "./scripts/deploy/deploy.sh", "gas-snapshot:no-build": "forge snapshot --match-contract GasBenchMark", "statediff": "./scripts/statediff.sh && git diff --exit-code", "gas-snapshot": "pnpm build:go-ffi && pnpm gas-snapshot:no-build", diff --git a/packages/contracts-bedrock/scripts/ChainAssertions.sol b/packages/contracts-bedrock/scripts/ChainAssertions.sol index a99c14e9514b..b0245fc09fbb 100644 --- a/packages/contracts-bedrock/scripts/ChainAssertions.sol +++ b/packages/contracts-bedrock/scripts/ChainAssertions.sol @@ -3,8 +3,8 @@ pragma solidity ^0.8.0; import { ProxyAdmin } from "src/universal/ProxyAdmin.sol"; import { ResourceMetering } from "src/L1/ResourceMetering.sol"; -import { DeployConfig } from "scripts/DeployConfig.s.sol"; -import { Deployer } from "scripts/Deployer.sol"; +import { DeployConfig } from "scripts/deploy/DeployConfig.s.sol"; +import { Deployer } from "scripts/deploy/Deployer.sol"; import { SystemConfig } from "src/L1/SystemConfig.sol"; import { Constants } from "src/libraries/Constants.sol"; import { L1StandardBridge } from "src/L1/L1StandardBridge.sol"; diff --git a/packages/contracts-bedrock/scripts/L2Genesis.s.sol b/packages/contracts-bedrock/scripts/L2Genesis.s.sol index 44607c534650..e1e43efebc8c 100644 --- a/packages/contracts-bedrock/scripts/L2Genesis.s.sol +++ b/packages/contracts-bedrock/scripts/L2Genesis.s.sol @@ -3,11 +3,11 @@ pragma solidity 0.8.15; import { Script } from "forge-std/Script.sol"; import { console2 as console } from "forge-std/console2.sol"; -import { Deployer } from "scripts/Deployer.sol"; +import { Deployer } from "scripts/deploy/Deployer.sol"; import { Config, OutputMode, OutputModeUtils, Fork, ForkUtils, LATEST_FORK } from "scripts/Config.sol"; import { Artifacts } from "scripts/Artifacts.s.sol"; -import { DeployConfig } from "scripts/DeployConfig.s.sol"; +import { DeployConfig } from "scripts/deploy/DeployConfig.s.sol"; import { Predeploys } from "src/libraries/Predeploys.sol"; import { Preinstalls } from "src/libraries/Preinstalls.sol"; import { L2CrossDomainMessenger } from "src/L2/L2CrossDomainMessenger.sol"; diff --git a/packages/contracts-bedrock/scripts/deploy.sh b/packages/contracts-bedrock/scripts/deploy.sh deleted file mode 100755 index bfbd436eb5fa..000000000000 --- a/packages/contracts-bedrock/scripts/deploy.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -verify_flag="" -if [ -n "${DEPLOY_VERIFY:-}" ]; then - verify_flag="--verify" -fi - -echo "> Deploying contracts" -forge script -vvv scripts/Deploy.s.sol:Deploy --rpc-url "$DEPLOY_ETH_RPC_URL" --broadcast --private-key "$DEPLOY_PRIVATE_KEY" $verify_flag - -if [ -n "${DEPLOY_GENERATE_HARDHAT_ARTIFACTS:-}" ]; then - echo "> Generating hardhat artifacts" - forge script -vvv scripts/Deploy.s.sol:Deploy --sig 'sync()' --rpc-url "$DEPLOY_ETH_RPC_URL" --broadcast --private-key "$DEPLOY_PRIVATE_KEY" -fi diff --git a/packages/contracts-bedrock/scripts/Deploy.s.sol b/packages/contracts-bedrock/scripts/deploy/Deploy.s.sol similarity index 99% rename from packages/contracts-bedrock/scripts/Deploy.s.sol rename to packages/contracts-bedrock/scripts/deploy/Deploy.s.sol index 4b24d45926bc..52f7a505e63d 100644 --- a/packages/contracts-bedrock/scripts/Deploy.s.sol +++ b/packages/contracts-bedrock/scripts/deploy/Deploy.s.sol @@ -12,7 +12,7 @@ import { OwnerManager } from "safe-contracts/base/OwnerManager.sol"; import { GnosisSafeProxyFactory as SafeProxyFactory } from "safe-contracts/proxies/GnosisSafeProxyFactory.sol"; import { Enum as SafeOps } from "safe-contracts/common/Enum.sol"; -import { Deployer } from "scripts/Deployer.sol"; +import { Deployer } from "scripts/deploy/Deployer.sol"; import { ProxyAdmin } from "src/universal/ProxyAdmin.sol"; import { AddressManager } from "src/legacy/AddressManager.sol"; diff --git a/packages/contracts-bedrock/scripts/DeployConfig.s.sol b/packages/contracts-bedrock/scripts/deploy/DeployConfig.s.sol similarity index 100% rename from packages/contracts-bedrock/scripts/DeployConfig.s.sol rename to packages/contracts-bedrock/scripts/deploy/DeployConfig.s.sol diff --git a/packages/contracts-bedrock/scripts/DeployOwnership.s.sol b/packages/contracts-bedrock/scripts/deploy/DeployOwnership.s.sol similarity index 99% rename from packages/contracts-bedrock/scripts/DeployOwnership.s.sol rename to packages/contracts-bedrock/scripts/deploy/DeployOwnership.s.sol index bb436d69b15b..05fbfd54df93 100644 --- a/packages/contracts-bedrock/scripts/DeployOwnership.s.sol +++ b/packages/contracts-bedrock/scripts/deploy/DeployOwnership.s.sol @@ -9,7 +9,7 @@ import { OwnerManager } from "safe-contracts/base/OwnerManager.sol"; import { ModuleManager } from "safe-contracts/base/ModuleManager.sol"; import { GuardManager } from "safe-contracts/base/GuardManager.sol"; -import { Deployer } from "scripts/Deployer.sol"; +import { Deployer } from "scripts/deploy/Deployer.sol"; import { LivenessGuard } from "src/Safe/LivenessGuard.sol"; import { LivenessModule } from "src/Safe/LivenessModule.sol"; diff --git a/packages/contracts-bedrock/scripts/Deployer.sol b/packages/contracts-bedrock/scripts/deploy/Deployer.sol similarity index 94% rename from packages/contracts-bedrock/scripts/Deployer.sol rename to packages/contracts-bedrock/scripts/deploy/Deployer.sol index aac3f5ac8ec2..2a861ba34608 100644 --- a/packages/contracts-bedrock/scripts/Deployer.sol +++ b/packages/contracts-bedrock/scripts/deploy/Deployer.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import { Script } from "forge-std/Script.sol"; import { Artifacts } from "scripts/Artifacts.s.sol"; import { Config } from "scripts/Config.sol"; -import { DeployConfig } from "scripts/DeployConfig.s.sol"; +import { DeployConfig } from "scripts/deploy/DeployConfig.s.sol"; import { Executables } from "scripts/Executables.sol"; import { console } from "forge-std/console.sol"; diff --git a/packages/contracts-bedrock/scripts/deploy/deploy.sh b/packages/contracts-bedrock/scripts/deploy/deploy.sh new file mode 100755 index 000000000000..bc497e0b8568 --- /dev/null +++ b/packages/contracts-bedrock/scripts/deploy/deploy.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +set -euo pipefail + +verify_flag="" +if [ -n "${DEPLOY_VERIFY:-}" ]; then + verify_flag="--verify" +fi + +echo "> Deploying contracts" +forge script -vvv scripts/deploy/Deploy.s.sol:Deploy --rpc-url "$DEPLOY_ETH_RPC_URL" --broadcast --private-key "$DEPLOY_PRIVATE_KEY" $verify_flag + +if [ -n "${DEPLOY_GENERATE_HARDHAT_ARTIFACTS:-}" ]; then + echo "> Generating hardhat artifacts" + forge script -vvv scripts/deploy/Deploy.s.sol:Deploy --sig 'sync()' --rpc-url "$DEPLOY_ETH_RPC_URL" --broadcast --private-key "$DEPLOY_PRIVATE_KEY" +fi diff --git a/packages/contracts-bedrock/scripts/fpac/FPACOPS.s.sol b/packages/contracts-bedrock/scripts/fpac/FPACOPS.s.sol index 434b5274d929..72011adfc896 100644 --- a/packages/contracts-bedrock/scripts/fpac/FPACOPS.s.sol +++ b/packages/contracts-bedrock/scripts/fpac/FPACOPS.s.sol @@ -7,7 +7,7 @@ import { AnchorStateRegistry, IAnchorStateRegistry } from "src/dispute/AnchorSta import { IDelayedWETH } from "src/dispute/interfaces/IDelayedWETH.sol"; import { StdAssertions } from "forge-std/StdAssertions.sol"; import "src/dispute/lib/Types.sol"; -import "scripts/Deploy.s.sol"; +import "scripts/deploy/Deploy.s.sol"; /// @notice Deploys the Fault Proof Alpha Chad contracts. contract FPACOPS is Deploy, StdAssertions { diff --git a/packages/contracts-bedrock/scripts/statediff.sh b/packages/contracts-bedrock/scripts/statediff.sh index fa1aef11c884..cce1138c962b 100755 --- a/packages/contracts-bedrock/scripts/statediff.sh +++ b/packages/contracts-bedrock/scripts/statediff.sh @@ -2,4 +2,4 @@ set -euo pipefail echo "> Deploying contracts to generate state diff (non-broadcast)" -forge script -vvv scripts/Deploy.s.sol:Deploy --sig 'runWithStateDiff()' +forge script -vvv scripts/deploy/Deploy.s.sol:Deploy --sig 'runWithStateDiff()' diff --git a/packages/contracts-bedrock/test/Safe/DeployOwnership.t.sol b/packages/contracts-bedrock/test/Safe/DeployOwnership.t.sol index cc4f58508ab1..b3a856e68a40 100644 --- a/packages/contracts-bedrock/test/Safe/DeployOwnership.t.sol +++ b/packages/contracts-bedrock/test/Safe/DeployOwnership.t.sol @@ -8,7 +8,7 @@ import { GuardianConfig, DeputyGuardianModuleConfig, LivenessModuleConfig -} from "scripts/DeployOwnership.s.sol"; +} from "scripts/deploy/DeployOwnership.s.sol"; import { Test } from "forge-std/Test.sol"; import { GnosisSafe as Safe } from "safe-contracts/GnosisSafe.sol"; diff --git a/packages/contracts-bedrock/test/invariants/InvariantTest.sol b/packages/contracts-bedrock/test/invariants/InvariantTest.sol index a188bcdf27a0..eea6c158b357 100644 --- a/packages/contracts-bedrock/test/invariants/InvariantTest.sol +++ b/packages/contracts-bedrock/test/invariants/InvariantTest.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.15; import { FFIInterface } from "test/setup/FFIInterface.sol"; -import { Deploy } from "scripts/Deploy.s.sol"; +import { Deploy } from "scripts/deploy/Deploy.s.sol"; import { Test } from "forge-std/Test.sol"; /// @title InvariantTest diff --git a/packages/contracts-bedrock/test/kontrol/README.md b/packages/contracts-bedrock/test/kontrol/README.md index ccf8781fce0b..e539c3c109d5 100644 --- a/packages/contracts-bedrock/test/kontrol/README.md +++ b/packages/contracts-bedrock/test/kontrol/README.md @@ -111,7 +111,7 @@ These are the instructions to add a new proof to this project. If all functions #### Make Kontrol aware of the new contract being tested -The `runKontrolDeployment` function of [`KontrolDeployment`](./deployment/KontrolDeployment.sol) partially reproduces the deployment process laid out in the `_run` function of [`Deploy.s.sol`](../../scripts/Deploy.s.sol). `runKontrolDeployment` has the `stateDiff` modifier to make use of [Foundry's state diff cheatcodes](https://book.getfoundry.sh/cheatcodes/start-state-diff-recording). Kontrol utilizes the JSON resulting from this modifier for two purposes: +The `runKontrolDeployment` function of [`KontrolDeployment`](./deployment/KontrolDeployment.sol) partially reproduces the deployment process laid out in the `_run` function of [`Deploy.s.sol`](../../scripts/deploy/Deploy.s.sol). `runKontrolDeployment` has the `stateDiff` modifier to make use of [Foundry's state diff cheatcodes](https://book.getfoundry.sh/cheatcodes/start-state-diff-recording). Kontrol utilizes the JSON resulting from this modifier for two purposes: 1. Load all the state updates generated by `runKontrolDeployment` as the initial configuration for all proofs, effectively offloading the computation of the deployment process to `forge` and thus improving performance. 2. Produce the [`DeploymentSummary`](./proofs/utils/DeploymentSummary.sol) script contract to test that the produced JSON contains correct updates. diff --git a/packages/contracts-bedrock/test/kontrol/deployment/KontrolDeployment.sol b/packages/contracts-bedrock/test/kontrol/deployment/KontrolDeployment.sol index 4b8ef355727c..bb3117bad5ff 100644 --- a/packages/contracts-bedrock/test/kontrol/deployment/KontrolDeployment.sol +++ b/packages/contracts-bedrock/test/kontrol/deployment/KontrolDeployment.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import { Deploy } from "scripts/Deploy.s.sol"; +import { Deploy } from "scripts/deploy/Deploy.s.sol"; contract KontrolDeployment is Deploy { function runKontrolDeployment() public stateDiff { diff --git a/packages/contracts-bedrock/test/kontrol/scripts/json/clean_json.py b/packages/contracts-bedrock/test/kontrol/scripts/json/clean_json.py index 570ecef5d7ae..58746feb3d04 100644 --- a/packages/contracts-bedrock/test/kontrol/scripts/json/clean_json.py +++ b/packages/contracts-bedrock/test/kontrol/scripts/json/clean_json.py @@ -1,7 +1,7 @@ """ Description: Unescapes the JSON produced by the stateDiff modifier - defined in contracts-bedrock/scripts/Deploy.s.sol + defined in contracts-bedrock/scripts/deploy/Deploy.s.sol This script is used in ../make-summary-deployment.sh Usage: diff --git a/packages/contracts-bedrock/test/kontrol/scripts/make-summary-deployment.sh b/packages/contracts-bedrock/test/kontrol/scripts/make-summary-deployment.sh index 40c7fa5778bd..8ed7c1cf7198 100755 --- a/packages/contracts-bedrock/test/kontrol/scripts/make-summary-deployment.sh +++ b/packages/contracts-bedrock/test/kontrol/scripts/make-summary-deployment.sh @@ -53,7 +53,7 @@ if [ ! -f "snapshots/state-diff/Deploy.json" ]; then touch snapshots/state-diff/Deploy.json; fi -DEPLOY_SCRIPT="./scripts/Deploy.s.sol" +DEPLOY_SCRIPT="./scripts/deploy/Deploy.s.sol" conditionally_start_docker # Create a backup diff --git a/packages/contracts-bedrock/test/setup/CommonTest.sol b/packages/contracts-bedrock/test/setup/CommonTest.sol index 86ed109fd7b3..d80cd31f2603 100644 --- a/packages/contracts-bedrock/test/setup/CommonTest.sol +++ b/packages/contracts-bedrock/test/setup/CommonTest.sol @@ -6,7 +6,7 @@ import { Setup } from "test/setup/Setup.sol"; import { Events } from "test/setup/Events.sol"; import { FFIInterface } from "test/setup/FFIInterface.sol"; import { Constants } from "src/libraries/Constants.sol"; -import "scripts/DeployConfig.s.sol"; +import "scripts/deploy/DeployConfig.s.sol"; /// @title CommonTest /// @dev An extenstion to `Test` that sets up the optimism smart contracts. diff --git a/packages/contracts-bedrock/test/setup/Setup.sol b/packages/contracts-bedrock/test/setup/Setup.sol index 3193ce80e6e6..7cf4d2a47d08 100644 --- a/packages/contracts-bedrock/test/setup/Setup.sol +++ b/packages/contracts-bedrock/test/setup/Setup.sol @@ -24,9 +24,9 @@ import { DisputeGameFactory } from "src/dispute/DisputeGameFactory.sol"; import { DelayedWETH } from "src/dispute/weth/DelayedWETH.sol"; import { AnchorStateRegistry } from "src/dispute/AnchorStateRegistry.sol"; import { L1CrossDomainMessenger } from "src/L1/L1CrossDomainMessenger.sol"; -import { DeployConfig } from "scripts/DeployConfig.s.sol"; +import { DeployConfig } from "scripts/deploy/DeployConfig.s.sol"; +import { Deploy } from "scripts/deploy/Deploy.s.sol"; import { Fork, LATEST_FORK } from "scripts/Config.sol"; -import { Deploy } from "scripts/Deploy.s.sol"; import { L2Genesis, L1Dependencies } from "scripts/L2Genesis.s.sol"; import { OutputMode, Fork, ForkUtils } from "scripts/Config.sol"; import { L2OutputOracle } from "src/L1/L2OutputOracle.sol"; diff --git a/packages/contracts-bedrock/test/vendor/Initializable.t.sol b/packages/contracts-bedrock/test/vendor/Initializable.t.sol index 349bdaef6023..05fff737bd6e 100644 --- a/packages/contracts-bedrock/test/vendor/Initializable.t.sol +++ b/packages/contracts-bedrock/test/vendor/Initializable.t.sol @@ -13,7 +13,7 @@ import { ForgeArtifacts } from "scripts/ForgeArtifacts.sol"; import { Process } from "scripts/libraries/Process.sol"; import "src/L1/ProtocolVersions.sol"; import "src/dispute/lib/Types.sol"; -import "scripts/Deployer.sol"; +import "scripts/deploy/Deployer.sol"; /// @title Initializer_Test /// @dev Ensures that the `initialize()` function on contracts cannot be called more than From 8ad8f6678e11359d1054d8e2ba05d0e762a77710 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Jun 2024 19:07:58 +0000 Subject: [PATCH 062/141] dependabot(actions): bump docker/build-push-action from 2 to 6 (#10940) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 2 to 6. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v2...v6) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release-docker-canary.yml | 12 ++++++------ .github/workflows/release.yml | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/release-docker-canary.yml b/.github/workflows/release-docker-canary.yml index 34109152b414..d9ccbc8edb78 100644 --- a/.github/workflows/release-docker-canary.yml +++ b/.github/workflows/release-docker-canary.yml @@ -61,7 +61,7 @@ jobs: password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_SECRET }} - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v6 with: context: . file: ./ops/docker/Dockerfile.packages @@ -88,7 +88,7 @@ jobs: password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_SECRET }} - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v6 with: context: . file: ./ops/docker/Dockerfile.packages @@ -115,7 +115,7 @@ jobs: password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_SECRET }} - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v6 with: context: . file: ./ops/docker/Dockerfile.packages @@ -142,7 +142,7 @@ jobs: password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_SECRET }} - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v6 with: context: . file: ./ops/docker/Dockerfile.packages @@ -169,7 +169,7 @@ jobs: password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_SECRET }} - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v6 with: context: . file: ./ops/docker/Dockerfile.packages @@ -196,7 +196,7 @@ jobs: password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_SECRET }} - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v6 with: context: . file: ./ops/docker/Dockerfile.packages diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8424d9aa7855..e9b476649dab 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -98,7 +98,7 @@ jobs: password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_SECRET }} - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v6 with: context: . file: ./ops/docker/Dockerfile.packages @@ -125,7 +125,7 @@ jobs: password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_SECRET }} - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v6 with: context: . file: ./ops/docker/Dockerfile.packages @@ -152,7 +152,7 @@ jobs: password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_SECRET }} - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v6 with: context: . file: ./ops/docker/Dockerfile.packages @@ -179,7 +179,7 @@ jobs: password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_SECRET }} - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v6 with: context: . file: ./ops/docker/Dockerfile.packages @@ -206,7 +206,7 @@ jobs: password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_SECRET }} - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v6 with: context: . file: ./ops/docker/Dockerfile.packages @@ -233,7 +233,7 @@ jobs: password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_SECRET }} - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v6 with: context: . file: ./ops/docker/Dockerfile.packages From 6062bc14aa887cbbb186377103b99ae5f2cf76e6 Mon Sep 17 00:00:00 2001 From: smartcontracts Date: Tue, 18 Jun 2024 16:32:31 -0400 Subject: [PATCH 063/141] maint(ct): rename periphery deploy config folder (#10793) Renames the folder periphery-deploy-config to deploy-config-periphery and reorganizes its contents so that it's a little bit cleaner. Means that the folder will appear next to the other deploy-config folder and will be easier to find and read. --- .../deploy}/4202.json | 0 .../deploy}/4460.json | 0 .../deploy}/58008.json | 0 .../deploy}/84532.json | 0 .../deploy}/901.json | 0 .../deploy}/919.json | 0 .../deploy}/999999999.json | 0 .../deploy}/optimism-goerli.json | 0 .../deploy}/optimism-sepolia.json | 0 .../deploy}/sepolia.json | 0 .../drippie}/sepolia-faucet-bridges.json | 0 .../drippie}/sepolia-faucet-core.json | 0 .../drippie}/sepolia-ops.json | 0 packages/contracts-bedrock/foundry.toml | 2 +- 14 files changed, 1 insertion(+), 1 deletion(-) rename packages/contracts-bedrock/{periphery-deploy-config => deploy-config-periphery/deploy}/4202.json (100%) rename packages/contracts-bedrock/{periphery-deploy-config => deploy-config-periphery/deploy}/4460.json (100%) rename packages/contracts-bedrock/{periphery-deploy-config => deploy-config-periphery/deploy}/58008.json (100%) rename packages/contracts-bedrock/{periphery-deploy-config => deploy-config-periphery/deploy}/84532.json (100%) rename packages/contracts-bedrock/{periphery-deploy-config => deploy-config-periphery/deploy}/901.json (100%) rename packages/contracts-bedrock/{periphery-deploy-config => deploy-config-periphery/deploy}/919.json (100%) rename packages/contracts-bedrock/{periphery-deploy-config => deploy-config-periphery/deploy}/999999999.json (100%) rename packages/contracts-bedrock/{periphery-deploy-config => deploy-config-periphery/deploy}/optimism-goerli.json (100%) rename packages/contracts-bedrock/{periphery-deploy-config => deploy-config-periphery/deploy}/optimism-sepolia.json (100%) rename packages/contracts-bedrock/{periphery-deploy-config => deploy-config-periphery/deploy}/sepolia.json (100%) rename packages/contracts-bedrock/{periphery-deploy-config/drippie-config => deploy-config-periphery/drippie}/sepolia-faucet-bridges.json (100%) rename packages/contracts-bedrock/{periphery-deploy-config/drippie-config => deploy-config-periphery/drippie}/sepolia-faucet-core.json (100%) rename packages/contracts-bedrock/{periphery-deploy-config/drippie-config => deploy-config-periphery/drippie}/sepolia-ops.json (100%) diff --git a/packages/contracts-bedrock/periphery-deploy-config/4202.json b/packages/contracts-bedrock/deploy-config-periphery/deploy/4202.json similarity index 100% rename from packages/contracts-bedrock/periphery-deploy-config/4202.json rename to packages/contracts-bedrock/deploy-config-periphery/deploy/4202.json diff --git a/packages/contracts-bedrock/periphery-deploy-config/4460.json b/packages/contracts-bedrock/deploy-config-periphery/deploy/4460.json similarity index 100% rename from packages/contracts-bedrock/periphery-deploy-config/4460.json rename to packages/contracts-bedrock/deploy-config-periphery/deploy/4460.json diff --git a/packages/contracts-bedrock/periphery-deploy-config/58008.json b/packages/contracts-bedrock/deploy-config-periphery/deploy/58008.json similarity index 100% rename from packages/contracts-bedrock/periphery-deploy-config/58008.json rename to packages/contracts-bedrock/deploy-config-periphery/deploy/58008.json diff --git a/packages/contracts-bedrock/periphery-deploy-config/84532.json b/packages/contracts-bedrock/deploy-config-periphery/deploy/84532.json similarity index 100% rename from packages/contracts-bedrock/periphery-deploy-config/84532.json rename to packages/contracts-bedrock/deploy-config-periphery/deploy/84532.json diff --git a/packages/contracts-bedrock/periphery-deploy-config/901.json b/packages/contracts-bedrock/deploy-config-periphery/deploy/901.json similarity index 100% rename from packages/contracts-bedrock/periphery-deploy-config/901.json rename to packages/contracts-bedrock/deploy-config-periphery/deploy/901.json diff --git a/packages/contracts-bedrock/periphery-deploy-config/919.json b/packages/contracts-bedrock/deploy-config-periphery/deploy/919.json similarity index 100% rename from packages/contracts-bedrock/periphery-deploy-config/919.json rename to packages/contracts-bedrock/deploy-config-periphery/deploy/919.json diff --git a/packages/contracts-bedrock/periphery-deploy-config/999999999.json b/packages/contracts-bedrock/deploy-config-periphery/deploy/999999999.json similarity index 100% rename from packages/contracts-bedrock/periphery-deploy-config/999999999.json rename to packages/contracts-bedrock/deploy-config-periphery/deploy/999999999.json diff --git a/packages/contracts-bedrock/periphery-deploy-config/optimism-goerli.json b/packages/contracts-bedrock/deploy-config-periphery/deploy/optimism-goerli.json similarity index 100% rename from packages/contracts-bedrock/periphery-deploy-config/optimism-goerli.json rename to packages/contracts-bedrock/deploy-config-periphery/deploy/optimism-goerli.json diff --git a/packages/contracts-bedrock/periphery-deploy-config/optimism-sepolia.json b/packages/contracts-bedrock/deploy-config-periphery/deploy/optimism-sepolia.json similarity index 100% rename from packages/contracts-bedrock/periphery-deploy-config/optimism-sepolia.json rename to packages/contracts-bedrock/deploy-config-periphery/deploy/optimism-sepolia.json diff --git a/packages/contracts-bedrock/periphery-deploy-config/sepolia.json b/packages/contracts-bedrock/deploy-config-periphery/deploy/sepolia.json similarity index 100% rename from packages/contracts-bedrock/periphery-deploy-config/sepolia.json rename to packages/contracts-bedrock/deploy-config-periphery/deploy/sepolia.json diff --git a/packages/contracts-bedrock/periphery-deploy-config/drippie-config/sepolia-faucet-bridges.json b/packages/contracts-bedrock/deploy-config-periphery/drippie/sepolia-faucet-bridges.json similarity index 100% rename from packages/contracts-bedrock/periphery-deploy-config/drippie-config/sepolia-faucet-bridges.json rename to packages/contracts-bedrock/deploy-config-periphery/drippie/sepolia-faucet-bridges.json diff --git a/packages/contracts-bedrock/periphery-deploy-config/drippie-config/sepolia-faucet-core.json b/packages/contracts-bedrock/deploy-config-periphery/drippie/sepolia-faucet-core.json similarity index 100% rename from packages/contracts-bedrock/periphery-deploy-config/drippie-config/sepolia-faucet-core.json rename to packages/contracts-bedrock/deploy-config-periphery/drippie/sepolia-faucet-core.json diff --git a/packages/contracts-bedrock/periphery-deploy-config/drippie-config/sepolia-ops.json b/packages/contracts-bedrock/deploy-config-periphery/drippie/sepolia-ops.json similarity index 100% rename from packages/contracts-bedrock/periphery-deploy-config/drippie-config/sepolia-ops.json rename to packages/contracts-bedrock/deploy-config-periphery/drippie/sepolia-ops.json diff --git a/packages/contracts-bedrock/foundry.toml b/packages/contracts-bedrock/foundry.toml index b408087239f5..4b1dbdeba780 100644 --- a/packages/contracts-bedrock/foundry.toml +++ b/packages/contracts-bedrock/foundry.toml @@ -36,7 +36,7 @@ fs_permissions = [ { access='read-write', path='./snapshots/' }, { access='read-write', path='./deployments/' }, { access='read', path='./deploy-config/' }, - { access='read', path='./periphery-deploy-config/' }, + { access='read', path='./deploy-config-periphery/' }, { access='read', path='./broadcast/' }, { access='read', path = './forge-artifacts/' }, { access='write', path='./semver-lock.json' }, From 57c833aed031669e2847e4102118e357eb962a5c Mon Sep 17 00:00:00 2001 From: Inphi Date: Wed, 19 Jun 2024 00:02:20 -0700 Subject: [PATCH 064/141] cannon: Revert to original state JSON schema (#10948) * cannon: Revert to original state JSON schema * fix test_data state.json --- cannon/mipsevm/state.go | 57 +++++++++++++++++++ cannon/mipsevm/state_test.go | 23 ++++++++ .../fault/trace/cannon/test_data/state.json | 10 ++-- 3 files changed, 84 insertions(+), 6 deletions(-) diff --git a/cannon/mipsevm/state.go b/cannon/mipsevm/state.go index 4b8f7c5cffff..c8a681f23e37 100644 --- a/cannon/mipsevm/state.go +++ b/cannon/mipsevm/state.go @@ -2,6 +2,7 @@ package mipsevm import ( "encoding/binary" + "encoding/json" "fmt" "github.com/ethereum/go-ethereum/common" @@ -47,6 +48,62 @@ type State struct { LastHint hexutil.Bytes `json:"lastHint,omitempty"` } +type stateMarshaling struct { + Memory *Memory `json:"memory"` + PreimageKey common.Hash `json:"preimageKey"` + PreimageOffset uint32 `json:"preimageOffset"` + PC uint32 `json:"pc"` + NextPC uint32 `json:"nextPC"` + LO uint32 `json:"lo"` + HI uint32 `json:"hi"` + Heap uint32 `json:"heap"` + ExitCode uint8 `json:"exit"` + Exited bool `json:"exited"` + Step uint64 `json:"step"` + Registers [32]uint32 `json:"registers"` + LastHint hexutil.Bytes `json:"lastHint,omitempty"` +} + +func (s *State) MarshalJSON() ([]byte, error) { // nosemgrep + sm := &stateMarshaling{ + Memory: s.Memory, + PreimageKey: s.PreimageKey, + PreimageOffset: s.PreimageOffset, + PC: s.Cpu.PC, + NextPC: s.Cpu.NextPC, + LO: s.Cpu.LO, + HI: s.Cpu.HI, + Heap: s.Heap, + ExitCode: s.ExitCode, + Exited: s.Exited, + Step: s.Step, + Registers: s.Registers, + LastHint: s.LastHint, + } + return json.Marshal(sm) +} + +func (s *State) UnmarshalJSON(data []byte) error { + sm := new(stateMarshaling) + if err := json.Unmarshal(data, sm); err != nil { + return err + } + s.Memory = sm.Memory + s.PreimageKey = sm.PreimageKey + s.PreimageOffset = sm.PreimageOffset + s.Cpu.PC = sm.PC + s.Cpu.NextPC = sm.NextPC + s.Cpu.LO = sm.LO + s.Cpu.HI = sm.HI + s.Heap = sm.Heap + s.ExitCode = sm.ExitCode + s.Exited = sm.Exited + s.Step = sm.Step + s.Registers = sm.Registers + s.LastHint = sm.LastHint + return nil +} + func (s *State) GetStep() uint64 { return s.Step } func (s *State) VMStatus() uint8 { diff --git a/cannon/mipsevm/state_test.go b/cannon/mipsevm/state_test.go index 826004756ad4..0850362ec65d 100644 --- a/cannon/mipsevm/state_test.go +++ b/cannon/mipsevm/state_test.go @@ -301,3 +301,26 @@ func selectOracleFixture(t *testing.T, programName string) PreimageOracle { return nil } } + +func TestStateJSONCodec(t *testing.T) { + elfProgram, err := elf.Open("../example/bin/hello.elf") + require.NoError(t, err, "open ELF file") + state, err := LoadELF(elfProgram) + require.NoError(t, err, "load ELF into state") + + stateJSON, err := state.MarshalJSON() + require.NoError(t, err) + + newState := new(State) + require.NoError(t, newState.UnmarshalJSON(stateJSON)) + + require.Equal(t, state.PreimageKey, newState.PreimageKey) + require.Equal(t, state.PreimageOffset, newState.PreimageOffset) + require.Equal(t, state.Cpu, newState.Cpu) + require.Equal(t, state.Heap, newState.Heap) + require.Equal(t, state.ExitCode, newState.ExitCode) + require.Equal(t, state.Exited, newState.Exited) + require.Equal(t, state.Memory.MerkleRoot(), newState.Memory.MerkleRoot()) + require.Equal(t, state.Registers, newState.Registers) + require.Equal(t, state.Step, newState.Step) +} diff --git a/op-challenger/game/fault/trace/cannon/test_data/state.json b/op-challenger/game/fault/trace/cannon/test_data/state.json index aae286125cf8..30cd1ccdcf0c 100644 --- a/op-challenger/game/fault/trace/cannon/test_data/state.json +++ b/op-challenger/game/fault/trace/cannon/test_data/state.json @@ -2,12 +2,10 @@ "memory": [], "preimageKey": "0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "preimageOffset": 0, - "cpu": { - "pc": 0, - "nextPC": 1, - "lo": 0, - "hi": 0 - }, + "pc": 0, + "nextPC": 1, + "lo": 0, + "hi": 0, "heap": 0, "exit": 0, "exited": false, From ab663b0be8e799d5b8061b29d78fce9dbb2195f3 Mon Sep 17 00:00:00 2001 From: Sebastian Stammler Date: Wed, 19 Jun 2024 17:50:50 +0200 Subject: [PATCH 065/141] op-batcher: Log on successful Plasma SetInput (#10950) --- op-batcher/batcher/driver.go | 1 + 1 file changed, 1 insertion(+) diff --git a/op-batcher/batcher/driver.go b/op-batcher/batcher/driver.go index 663d2a86af3f..b7599e225c44 100644 --- a/op-batcher/batcher/driver.go +++ b/op-batcher/batcher/driver.go @@ -509,6 +509,7 @@ func (l *BatchSubmitter) sendTransaction(ctx context.Context, txdata txData, que l.recordFailedTx(txdata.ID(), err) return nil } + l.Log.Info("Set plasma input", "commitment", comm, "tx", txdata.ID()) // signal plasma commitment tx with TxDataVersion1 data = comm.TxData() } From 14b4425f0ce67b505f7adc88e36da2b7e49e2215 Mon Sep 17 00:00:00 2001 From: Maurelian Date: Wed, 19 Jun 2024 12:50:52 -0400 Subject: [PATCH 066/141] Add allow-empty overload field on Process.run (#10736) --- .../scripts/libraries/Process.sol | 25 ++++++++++++++----- .../contracts-bedrock/test/L2Genesis.t.sol | 2 +- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/packages/contracts-bedrock/scripts/libraries/Process.sol b/packages/contracts-bedrock/scripts/libraries/Process.sol index c95a95d76c24..d2cf5c3af4aa 100644 --- a/packages/contracts-bedrock/scripts/libraries/Process.sol +++ b/packages/contracts-bedrock/scripts/libraries/Process.sol @@ -10,15 +10,28 @@ library Process { /// @notice Foundry cheatcode VM. Vm private constant vm = Vm(address(uint160(uint256(keccak256("hevm cheat code"))))); - function run(string[] memory cmd) internal returns (bytes memory stdout_) { - Vm.FfiResult memory result = vm.tryFfi(cmd); + /// @notice Run a command in a subprocess. Fails if no output is returned. + /// @param _command Command to run. + function run(string[] memory _command) internal returns (bytes memory stdout_) { + stdout_ = run({ _command: _command, _allowEmpty: false }); + } + + /// @notice Run a command in a subprocess. + /// @param _command Command to run. + /// @param _allowEmpty Allow empty output. + function run(string[] memory _command, bool _allowEmpty) internal returns (bytes memory stdout_) { + Vm.FfiResult memory result = vm.tryFfi(_command); + string memory command; + for (uint256 i = 0; i < _command.length; i++) { + command = string.concat(command, _command[i], " "); + } if (result.exitCode != 0) { - string memory command; - for (uint256 i = 0; i < cmd.length; i++) { - command = string.concat(command, cmd[i], " "); - } revert FfiFailed(string.concat("Command: ", command, "\nError: ", string(result.stderr))); } + // If the output is empty, result.stdout is "[]". + if (!_allowEmpty && keccak256(result.stdout) == keccak256(bytes("[]"))) { + revert FfiFailed(string.concat("No output from Command: ", command)); + } stdout_ = result.stdout; } } diff --git a/packages/contracts-bedrock/test/L2Genesis.t.sol b/packages/contracts-bedrock/test/L2Genesis.t.sol index f851f62d634d..80d6656ac1d4 100644 --- a/packages/contracts-bedrock/test/L2Genesis.t.sol +++ b/packages/contracts-bedrock/test/L2Genesis.t.sol @@ -37,7 +37,7 @@ contract L2GenesisTest is Test { commands[0] = "bash"; commands[1] = "-c"; commands[2] = string.concat("rm ", path); - Process.run(commands); + Process.run({ _command: commands, _allowEmpty: true }); } /// @notice Returns the number of top level keys in a JSON object at a given From 06fa881b032d0167add9ad00f355a4e4c9162b5a Mon Sep 17 00:00:00 2001 From: smartcontracts Date: Wed, 19 Jun 2024 14:47:18 -0400 Subject: [PATCH 067/141] maint: update contributing guide (#10944) Minor updates to CONTRIBUTING.md, things were a little outdated. --- CONTRIBUTING.md | 208 +++++++++++++++++++++--------------------------- 1 file changed, 89 insertions(+), 119 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 090562981364..16ce4e6be1b7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,66 +1,66 @@ -# Optimism monorepo contributing guide +# Optimism Monorepo Contributing Guide -🎈 Thanks for your help improving the project! We are so happy to have you! +## What to Contribute -**No contribution is too small and all contributions are valued.** +Welcome to the Optimism Monorepo Contributing Guide! +If you're reading this then you might be interested in contributing to the Optimism Monorepo. +Before diving into the specifics of this repository, you might be interested in taking a quick look at just a few of the ways that you can contribute. +You can: -There are plenty of ways to contribute, in particular we appreciate support in the following areas: +- Report issues in this repository. Great bug reports are detailed and give clear instructions for how a developer can reproduce the problem. Write good bug reports and developers will love you. + - **IMPORTANT**: If you believe your report impacts the security of this repository, refer to the canonical [Security Policy](https://github.com/ethereum-optimism/.github/blob/master/SECURITY.md) document. +- Fix issues that are tagged as [`D-good-first-issue`](https://github.com/ethereum-optimism/optimism/labels/D-good-first-issue) or [`S-confirmed`](https://github.com/ethereum-optimism/optimism/labels/S-confirmed). +- Help improve the [Optimism Developer Docs](https://github.com/ethereum-optimism/docs) by reporting issues, fixing typos, or adding missing sections. +- Get involved in the protocol design process by joining discussions within the [OP Stack Specs](https://github.com/ethereum-optimism/specs/discussions) repository. -- Reporting issues. For security issues see [Security policy](https://github.com/ethereum-optimism/.github/blob/master/SECURITY.md). -- Fixing and responding to existing issues. You can start off with those tagged ["good first issue"](https://github.com/ethereum-optimism/optimism/labels/D-good-first-issue) which are meant as introductory issues for external contributors. -- Improving the [community site](https://community.optimism.io/), [documentation](https://github.com/ethereum-optimism/community-hub) and [tutorials](https://github.com/ethereum-optimism/optimism-tutorial). -- Become an "Optimizer" and answer questions in the [Optimism Discord](https://discord.optimism.io). -- Get involved in the protocol design process by proposing changes or new features or write parts of the spec yourself in the [specs repository](https://github.com/ethereum-optimism/specs). +## Code of Conduct -Note that we have a [Code of Conduct](https://github.com/ethereum-optimism/.github/blob/master/CODE_OF_CONDUCT.md), please follow it in all your interactions with the project. +Interactions within this repository are subject to a [Code of Conduct](https://github.com/ethereum-optimism/.github/blob/master/CODE_OF_CONDUCT.md) adapted from the [Contributor Covenant](https://www.contributor-covenant.org/version/1/4/code-of-conduct/). -## Workflow for Pull Requests +## Development Quick Start -🚨 Before making any non-trivial change, please first open an issue describing the change to solicit feedback and guidance. This will increase the likelihood of the PR getting merged. +### Software Dependencies -In general, the smaller the diff the easier it will be for us to review quickly. +| Dependency | Version | Version Check Command | +| ------------------------------------------------------------- | -------- | ------------------------ | +| [git](https://git-scm.com/) | `^2` | `git --version` | +| [go](https://go.dev/) | `^1.21` | `go version` | +| [node](https://nodejs.org/en/) | `^20` | `node --version` | +| [nvm](https://github.com/nvm-sh/nvm) | `^0.39` | `nvm --version` | +| [pnpm](https://pnpm.io/installation) | `^8` | `pnpm --version` | +| [foundry](https://github.com/foundry-rs/foundry#installation) | `^0.2.0` | `forge --version` | +| [make](https://linux.die.net/man/1/make) | `^3` | `make --version` | +| [jq](https://github.com/jqlang/jq) | `^1.6` | `jq --version` | +| [direnv](https://direnv.net) | `^2` | `direnv --version` | +| [docker](https://docs.docker.com/get-docker/) | `^24` | `docker --version` | +| [docker compose](https://docs.docker.com/compose/install/) | `^2.23` | `docker compose version` | -In order to contribute, fork the appropriate branch, for non-breaking changes to production that is `develop` and for the next release that is normally `release/X.X.X` branch, see [details about our branching model](https://github.com/ethereum-optimism/optimism/blob/develop/README.md#branching-model-and-releases). +### Notes on Specific Dependencies -Additionally, if you are writing a new feature, please ensure you add appropriate test cases. +#### `node` -Follow the [Development Quick Start](#development-quick-start) to set up your local development environment. +Make sure to use the version of `node` specified within [`.nvmrc`](..nvmrc). +You can use [`nvm`](https://github.com/nvm-sh/nvm) to manage multiple versions of Node.js on your machine and automatically switch to the correct version when you enter this repository. -We recommend using the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) format on commit messages. +#### `foundry` -Unless your PR is ready for immediate review and merging, please mark it as 'draft' (or simply do not open a PR yet). +`foundry` is updated frequently and occasionally contains breaking changes. +This repository pins a specific version of `foundry` inside of [`versions.json`](./versions.json). +Use the command `pnpm update:foundry` at the root of the monorepo to make sure that your version of `foundry` is the same as the one currently being used in CI. -Once ready for review, make sure to include a thorough PR description to help reviewers. You can read more about the guidelines for opening PRs in the [PR Guidelines](docs/handbook/pr-guidelines.md) file. +#### `direnv` -**Bonus:** Add comments to the diff under the "Files Changed" tab on the PR page to clarify any sections where you think we might have questions about the approach taken. - -### Response time: -We aim to provide a meaningful response to all PRs and issues from external contributors within 2 business days. - -### Rebasing - -We use the `git rebase` command to keep our commit history tidy. -Rebasing is an easy way to make sure that each PR includes a series of clean commits with descriptive commit messages -See [this tutorial](https://docs.gitlab.com/ee/topics/git/git_rebase.html) for a detailed explanation of `git rebase` and how you should use it to maintain a clean commit history. - -## Development Quick Start +[`direnv`](https://direnv.net) is a tool used to load environment variables from [`.envrc`](./.envrc) into your shell so you don't have to manually export variables every time you want to use them. +`direnv` only has access to files that you explicitly allow it to see. +After [installing `direnv`](https://direnv.net/docs/installation.html), you will need to **make sure that [`direnv` is hooked into your shell](https://direnv.net/docs/hook.html)**. +Make sure you've followed [the guide on the `direnv` website](https://direnv.net/docs/hook.html), then **close your terminal and reopen it** so that the changes take effect (or `source` your config file if you know how to do that). -### Dependencies +#### `docker compose` -You'll need the following: +[Docker Desktop](https://docs.docker.com/get-docker/) should come with `docker compose` installed by default. +You'll have to install the `compose` plugin if you're not using Docker Desktop or you're on linux. -* [Git](https://git-scm.com/downloads) -* [NodeJS](https://nodejs.org/en/download/) -* [Node Version Manager](https://github.com/nvm-sh/nvm) -* [pnpm](https://pnpm.io/installation) -* [Docker](https://docs.docker.com/get-docker/) -* [Docker Compose](https://docs.docker.com/compose/install/) -* [Go](https://go.dev/dl/) -* [Foundry](https://getfoundry.sh) -* [jq](https://jqlang.github.io/jq/) -* [go-ethereum](https://github.com/ethereum/go-ethereum) - -### Setup +### Setting Up Clone the repository and open it: @@ -69,83 +69,21 @@ git clone git@github.com:ethereum-optimism/optimism.git cd optimism ``` -### Install the Correct Version of NodeJS - -Install the correct node version with [nvm](https://github.com/nvm-sh/nvm) - -```bash -nvm use -``` - -### Install node modules with pnpm - -```bash -pnpm i -``` - -### Building the TypeScript packages - -[foundry](https://github.com/foundry-rs/foundry) is used for some smart contract -development in the monorepo. It is required to build the TypeScript packages -and compile the smart contracts. Install foundry [here](https://getfoundry.sh/). - -To build all of the [TypeScript packages](./packages), run: - -```bash -pnpm clean -pnpm install -pnpm build -``` - -Packages compiled when on one branch may not be compatible with packages on a different branch. -**You should recompile all packages whenever you move from one branch to another.** -Use the above commands to recompile the packages. - -### Building the rest of the system - -If you want to run an Optimism node OR **if you want to run the integration tests**, you'll need to build the rest of the system. -Note that these environment variables significantly speed up build time. - -```bash -cd ops-bedrock -export COMPOSE_DOCKER_CLI_BUILD=1 -export DOCKER_BUILDKIT=1 -docker compose build -``` - -Source code changes can have an impact on more than one container. -**If you're unsure about which containers to rebuild, just rebuild them all**: - -```bash -cd ops-bedrock -docker compose down -docker compose build -docker compose up -``` +### Building the Monorepo -**If a node process exits with exit code: 137** you may need to increase the default memory limit of docker containers +Make sure that you've installed all of the required [Software Dependencies](#software-dependencies) before you continue. +You will need [foundry](https://github.com/foundry-rs/foundry) to build the smart contracts found within this repository. +Refer to the note on [foundry as a dependency](#foundry) for instructions. -Finally, **if you're running into weird problems and nothing seems to be working**, run: +Install dependencies and build all packages within the monorepo by running: ```bash -cd optimism -pnpm clean -pnpm install -pnpm build -cd ops -docker compose down -v -docker compose build -docker compose up +make build ``` -#### Viewing docker container logs - -By default, the `docker compose up` command will show logs from all services, and that -can be hard to filter through. In order to view the logs from a specific service, you can run: - -```bash -docker compose logs --follow -``` +Packages built on one branch may not be compatible with packages on a different branch. +**You should rebuild the monorepo whenever you move from one branch to another.** +Use the above command to rebuild the monorepo. ### Running tests @@ -168,12 +106,14 @@ pnpm test #### Running unit tests (Go) -Change directory to the package you want to run tests for. Then: +Change directory to the package you want to run tests for, then: + ```shell go test ./... ``` #### Running e2e tests (Go) + See [this document](./op-e2e/README.md) #### Running contract static analysis @@ -209,7 +149,7 @@ This makes them a great tool for contributors! [difficulty]: https://github.com/ethereum-optimism/optimism/labels?q=d- [status]: https://github.com/ethereum-optimism/optimism/labels?q=s- -#### Filtering for Work +### Filtering for Work To find tickets available for external contribution, take a look at the https://github.com/ethereum-optimism/optimism/labels/M-community label. @@ -220,7 +160,7 @@ Also, all labels can be seen by visiting the [labels page][labels] [labels]: https://github.com/ethereum-optimism/optimism/labels -#### Modifying Labels +### Modifying Labels When altering label names or deleting labels there are a few things you must be aware of. @@ -228,3 +168,33 @@ When altering label names or deleting labels there are a few things you must be - If the https://github.com/ethereum-optimism/labels/S-stale label is altered, the [close-stale](.github/workflows/close-stale.yml) workflow should be updated. - If the https://github.com/ethereum-optimism/labels/M-dependabot label is altered, the [dependabot config](.github/dependabot.yml) file should be adjusted. - Saved label filters for project boards will not automatically update. These should be updated if label names change. + +## Workflow for Pull Requests + +🚨 Before making any non-trivial change, please first open an issue describing the change to solicit feedback and guidance. This will increase the likelihood of the PR getting merged. + +In general, the smaller the diff the easier it will be for us to review quickly. + +In order to contribute, fork the appropriate branch, for non-breaking changes to production that is `develop` and for the next release that is normally `release/X.X.X` branch, see [details about our branching model](https://github.com/ethereum-optimism/optimism/blob/develop/README.md#branching-model-and-releases). + +Additionally, if you are writing a new feature, please ensure you add appropriate test cases. + +Follow the [Development Quick Start](#development-quick-start) to set up your local development environment. + +We recommend using the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) format on commit messages. + +Unless your PR is ready for immediate review and merging, please mark it as 'draft' (or simply do not open a PR yet). + +Once ready for review, make sure to include a thorough PR description to help reviewers. You can read more about the guidelines for opening PRs in the [PR Guidelines](docs/handbook/pr-guidelines.md) file. + +**Bonus:** Add comments to the diff under the "Files Changed" tab on the PR page to clarify any sections where you think we might have questions about the approach taken. + +### Response time + +We aim to provide a meaningful response to all PRs and issues from external contributors within 2 business days. + +### Rebasing + +We use the `git rebase` command to keep our commit history tidy. +Rebasing is an easy way to make sure that each PR includes a series of clean commits with descriptive commit messages +See [this tutorial](https://docs.gitlab.com/ee/topics/git/git_rebase.html) for a detailed explanation of `git rebase` and how you should use it to maintain a clean commit history. From 552946e6955918c30c46be3b4e3b5d55c09c5207 Mon Sep 17 00:00:00 2001 From: Maurelian Date: Wed, 19 Jun 2024 15:21:12 -0400 Subject: [PATCH 068/141] ctb: Fix auth specs for DGF (#10954) * ctb: Fix auth specs for DGF * ctb: Fix to use delayedWethOwner where appropriate --- packages/contracts-bedrock/test/Specs.t.sol | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/contracts-bedrock/test/Specs.t.sol b/packages/contracts-bedrock/test/Specs.t.sol index e3d0d7cc7d6f..a2b670c10c81 100644 --- a/packages/contracts-bedrock/test/Specs.t.sol +++ b/packages/contracts-bedrock/test/Specs.t.sol @@ -725,9 +725,13 @@ contract Specification_Test is CommonTest { _addSpec({ _name: "DisputeGameFactory", _sel: _getSel("setImplementation(uint32,address)"), - _auth: Role.GUARDIAN + _auth: Role.DISPUTEGAMEFACTORYOWNER + }); + _addSpec({ + _name: "DisputeGameFactory", + _sel: _getSel("setInitBond(uint32,uint256)"), + _auth: Role.DISPUTEGAMEFACTORYOWNER }); - _addSpec({ _name: "DisputeGameFactory", _sel: _getSel("setInitBond(uint32,uint256)"), _auth: Role.GUARDIAN }); _addSpec({ _name: "DisputeGameFactory", _sel: _getSel("transferOwnership(address)"), @@ -743,11 +747,11 @@ contract Specification_Test is CommonTest { _addSpec({ _name: "DelayedWETH", _sel: _getSel("decimals()") }); _addSpec({ _name: "DelayedWETH", _sel: _getSel("delay()") }); _addSpec({ _name: "DelayedWETH", _sel: _getSel("deposit()") }); - _addSpec({ _name: "DelayedWETH", _sel: _getSel("hold(address,uint256)"), _auth: Role.GUARDIAN }); + _addSpec({ _name: "DelayedWETH", _sel: _getSel("hold(address,uint256)"), _auth: Role.DELAYEDWETHOWNER }); _addSpec({ _name: "DelayedWETH", _sel: _getSel("initialize(address,address)") }); _addSpec({ _name: "DelayedWETH", _sel: _getSel("name()") }); _addSpec({ _name: "DelayedWETH", _sel: _getSel("owner()") }); - _addSpec({ _name: "DelayedWETH", _sel: _getSel("recover(uint256)"), _auth: Role.GUARDIAN }); + _addSpec({ _name: "DelayedWETH", _sel: _getSel("recover(uint256)"), _auth: Role.DELAYEDWETHOWNER }); _addSpec({ _name: "DelayedWETH", _sel: _getSel("renounceOwnership()"), _auth: Role.DELAYEDWETHOWNER }); _addSpec({ _name: "DelayedWETH", _sel: _getSel("symbol()") }); _addSpec({ _name: "DelayedWETH", _sel: _getSel("totalSupply()") }); From e8b0181d19d5e6cdbc011263256be89fc3f4beaa Mon Sep 17 00:00:00 2001 From: Inphi Date: Wed, 19 Jun 2024 12:21:20 -0700 Subject: [PATCH 069/141] Add cannon memory benchmarks (#10942) * Add cannon memory benchmarks * fix comment * go mod tidy alloc program --- cannon/cmd/run.go | 12 ++ cannon/example/alloc/go.mod | 14 ++ cannon/example/alloc/go.sum | 12 ++ cannon/example/alloc/main.go | 31 ++++ cannon/mipsevm/instrumented.go | 35 +++- cannon/mipsevm/state_test.go | 70 +++++-- op-e2e/faultproofs/bigCodeCreateInput.data | 1 + op-e2e/faultproofs/cannon_benchmark_test.go | 196 ++++++++++++++++++++ op-e2e/faultproofs/precompile_test.go | 4 +- 9 files changed, 353 insertions(+), 22 deletions(-) create mode 100644 cannon/example/alloc/go.mod create mode 100644 cannon/example/alloc/go.sum create mode 100644 cannon/example/alloc/main.go create mode 100644 op-e2e/faultproofs/bigCodeCreateInput.data create mode 100644 op-e2e/faultproofs/cannon_benchmark_test.go diff --git a/cannon/cmd/run.go b/cannon/cmd/run.go index 7c69cce7ac38..f4d57a114d5a 100644 --- a/cannon/cmd/run.go +++ b/cannon/cmd/run.go @@ -103,6 +103,12 @@ var ( Name: "debug", Usage: "enable debug mode, which includes stack traces and other debug info in the output. Requires --meta.", } + RunDebugInfoFlag = &cli.PathFlag{ + Name: "debug-info", + Usage: "path to write debug info to", + TakesFile: true, + Required: false, + } OutFilePerm = os.FileMode(0o755) ) @@ -466,6 +472,11 @@ func Run(ctx *cli.Context) error { if err := jsonutil.WriteJSON(ctx.Path(RunOutputFlag.Name), state, OutFilePerm); err != nil { return fmt.Errorf("failed to write state output: %w", err) } + if debugInfoFile := ctx.Path(RunDebugInfoFlag.Name); debugInfoFile != "" { + if err := jsonutil.WriteJSON(debugInfoFile, us.GetDebugInfo(), OutFilePerm); err != nil { + return fmt.Errorf("failed to write benchmark data: %w", err) + } + } return nil } @@ -489,5 +500,6 @@ var RunCommand = &cli.Command{ RunInfoAtFlag, RunPProfCPU, RunDebugFlag, + RunDebugInfoFlag, }, } diff --git a/cannon/example/alloc/go.mod b/cannon/example/alloc/go.mod new file mode 100644 index 000000000000..2f0739ca6c99 --- /dev/null +++ b/cannon/example/alloc/go.mod @@ -0,0 +1,14 @@ +module alloc + +go 1.21 + +toolchain go1.21.1 + +require github.com/ethereum-optimism/optimism v0.0.0 + +require ( + golang.org/x/crypto v0.24.0 // indirect + golang.org/x/sys v0.21.0 // indirect +) + +replace github.com/ethereum-optimism/optimism v0.0.0 => ../../.. diff --git a/cannon/example/alloc/go.sum b/cannon/example/alloc/go.sum new file mode 100644 index 000000000000..e9147757ceeb --- /dev/null +++ b/cannon/example/alloc/go.sum @@ -0,0 +1,12 @@ +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= +golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/cannon/example/alloc/main.go b/cannon/example/alloc/main.go new file mode 100644 index 000000000000..41bc67000d2b --- /dev/null +++ b/cannon/example/alloc/main.go @@ -0,0 +1,31 @@ +package main + +import ( + "encoding/binary" + "fmt" + "runtime" + + preimage "github.com/ethereum-optimism/optimism/op-preimage" +) + +func main() { + var mem []byte + po := preimage.NewOracleClient(preimage.ClientPreimageChannel()) + numAllocs := binary.LittleEndian.Uint64(po.Get(preimage.LocalIndexKey(0))) + + fmt.Printf("alloc program. numAllocs=%d\n", numAllocs) + var alloc int + for i := 0; i < int(numAllocs); i++ { + mem = make([]byte, 32*1024*1024) + alloc += len(mem) + // touch a couple pages to prevent the runtime from overcommitting memory + for j := 0; j < len(mem); j += 1024 { + mem[j] = 0xFF + } + fmt.Printf("allocated %d bytes\n", alloc) + } + + var m runtime.MemStats + runtime.ReadMemStats(&m) + fmt.Printf("alloc program exit. memstats: heap_alloc=%d frees=%d mallocs=%d\n", m.HeapAlloc, m.Frees, m.Mallocs) +} diff --git a/cannon/mipsevm/instrumented.go b/cannon/mipsevm/instrumented.go index 542ad7bc0de9..7d929b6bbf7b 100644 --- a/cannon/mipsevm/instrumented.go +++ b/cannon/mipsevm/instrumented.go @@ -26,7 +26,7 @@ type InstrumentedState struct { memProofEnabled bool memProof [28 * 32]byte - preimageOracle PreimageOracle + preimageOracle *trackingOracle // cached pre-image data, including 8 byte length prefix lastPreimage []byte @@ -59,7 +59,7 @@ func NewInstrumentedState(state *State, po PreimageOracle, stdOut, stdErr io.Wri state: state, stdOut: stdOut, stdErr: stdErr, - preimageOracle: po, + preimageOracle: &trackingOracle{po: po}, } } @@ -103,3 +103,34 @@ func (m *InstrumentedState) Step(proof bool) (wit *StepWitness, err error) { func (m *InstrumentedState) LastPreimage() ([32]byte, []byte, uint32) { return m.lastPreimageKey, m.lastPreimage, m.lastPreimageOffset } + +func (d *InstrumentedState) GetDebugInfo() *DebugInfo { + return &DebugInfo{ + Pages: d.state.Memory.PageCount(), + NumPreimageRequests: d.preimageOracle.numPreimageRequests, + TotalPreimageSize: d.preimageOracle.totalPreimageSize, + } +} + +type DebugInfo struct { + Pages int `json:"pages"` + NumPreimageRequests int `json:"num_preimage_requests"` + TotalPreimageSize int `json:"total_preimage_size"` +} + +type trackingOracle struct { + po PreimageOracle + totalPreimageSize int + numPreimageRequests int +} + +func (d *trackingOracle) Hint(v []byte) { + d.po.Hint(v) +} + +func (d *trackingOracle) GetPreimage(k [32]byte) []byte { + d.numPreimageRequests++ + preimage := d.po.GetPreimage(k) + d.totalPreimageSize += len(preimage) + return preimage +} diff --git a/cannon/mipsevm/state_test.go b/cannon/mipsevm/state_test.go index 0850362ec65d..dfb90674ec78 100644 --- a/cannon/mipsevm/state_test.go +++ b/cannon/mipsevm/state_test.go @@ -127,15 +127,7 @@ func TestStateHash(t *testing.T) { } func TestHello(t *testing.T) { - elfProgram, err := elf.Open("../example/bin/hello.elf") - require.NoError(t, err, "open ELF file") - - state, err := LoadELF(elfProgram) - require.NoError(t, err, "load ELF into state") - - err = PatchGo(elfProgram, state) - require.NoError(t, err, "apply Go runtime patches") - require.NoError(t, PatchStack(state), "add initial stack") + state := loadELFProgram(t, "../example/bin/hello.elf") var stdOutBuf, stdErrBuf bytes.Buffer us := NewInstrumentedState(state, nil, io.MultiWriter(&stdOutBuf, os.Stdout), io.MultiWriter(&stdErrBuf, os.Stderr)) @@ -225,15 +217,7 @@ func claimTestOracle(t *testing.T) (po PreimageOracle, stdOut string, stdErr str } func TestClaim(t *testing.T) { - elfProgram, err := elf.Open("../example/bin/claim.elf") - require.NoError(t, err, "open ELF file") - - state, err := LoadELF(elfProgram) - require.NoError(t, err, "load ELF into state") - - err = PatchGo(elfProgram, state) - require.NoError(t, err, "apply Go runtime patches") - require.NoError(t, PatchStack(state), "add initial stack") + state := loadELFProgram(t, "../example/bin/claim.elf") oracle, expectedStdOut, expectedStdErr := claimTestOracle(t) @@ -255,6 +239,44 @@ func TestClaim(t *testing.T) { require.Equal(t, expectedStdErr, stdErrBuf.String(), "stderr") } +func TestAlloc(t *testing.T) { + t.Skip("TODO(client-pod#906): Currently fails on Single threaded Cannon. Re-enable for the MT FPVM") + + state := loadELFProgram(t, "../example/bin/alloc.elf") + const numAllocs = 100 // where each alloc is a 32 MiB chunk + oracle := allocOracle(t, numAllocs) + + // completes in ~870 M steps + us := NewInstrumentedState(state, oracle, os.Stdout, os.Stderr) + for i := 0; i < 20_000_000_000; i++ { + if us.state.Exited { + break + } + _, err := us.Step(false) + require.NoError(t, err) + if state.Step%10_000_000 == 0 { + t.Logf("Completed %d steps", state.Step) + } + } + t.Logf("Completed in %d steps", state.Step) + require.True(t, state.Exited, "must complete program") + require.Equal(t, uint8(0), state.ExitCode, "exit with 0") + require.Less(t, state.Memory.PageCount()*PageSize, 1*1024*1024*1024, "must not allocate more than 1 GiB") +} + +func loadELFProgram(t *testing.T, name string) *State { + elfProgram, err := elf.Open(name) + require.NoError(t, err, "open ELF file") + + state, err := LoadELF(elfProgram) + require.NoError(t, err, "load ELF into state") + + err = PatchGo(elfProgram, state) + require.NoError(t, err, "apply Go runtime patches") + require.NoError(t, PatchStack(state), "add initial stack") + return state +} + func staticOracle(t *testing.T, preimageData []byte) *testOracle { return &testOracle{ hint: func(v []byte) {}, @@ -289,6 +311,18 @@ func staticPrecompileOracle(t *testing.T, precompile common.Address, input []byt } } +func allocOracle(t *testing.T, numAllocs int) *testOracle { + return &testOracle{ + hint: func(v []byte) {}, + getPreimage: func(k [32]byte) []byte { + if k != preimage.LocalIndexKey(0).PreimageKey() { + t.Fatalf("invalid preimage request for %x", k) + } + return binary.LittleEndian.AppendUint64(nil, uint64(numAllocs)) + }, + } +} + func selectOracleFixture(t *testing.T, programName string) PreimageOracle { if strings.HasPrefix(programName, "oracle_kzg") { precompile := common.BytesToAddress([]byte{0xa}) diff --git a/op-e2e/faultproofs/bigCodeCreateInput.data b/op-e2e/faultproofs/bigCodeCreateInput.data new file mode 100644 index 000000000000..44891a39e07f --- /dev/null +++ b/op-e2e/faultproofs/bigCodeCreateInput.data @@ -0,0 +1 @@ +0x6080604052348015600f57600080fd5b50615fdd8061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063dbd8cd6314610030575b600080fd5b61003861003a565b005b60405180615f800160405280615f4e815260200161005a615f4e91395056feaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2646970667358221220b25c21f2147000f10799a57b6475538b627899e60949e1142a24c6c19e21af7364736f6c63430008190033 diff --git a/op-e2e/faultproofs/cannon_benchmark_test.go b/op-e2e/faultproofs/cannon_benchmark_test.go new file mode 100644 index 000000000000..ecd128a3c956 --- /dev/null +++ b/op-e2e/faultproofs/cannon_benchmark_test.go @@ -0,0 +1,196 @@ +package faultproofs + +import ( + "context" + "crypto/ecdsa" + "encoding/json" + "math/big" + "os" + "path" + "sync" + "testing" + "time" + + "github.com/ethereum-optimism/optimism/cannon/mipsevm" + "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils" + op_e2e "github.com/ethereum-optimism/optimism/op-e2e" + "github.com/ethereum-optimism/optimism/op-e2e/bindings" + "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait" + "github.com/ethereum-optimism/optimism/op-service/client" + "github.com/ethereum-optimism/optimism/op-service/predeploys" + "github.com/ethereum-optimism/optimism/op-service/sources" + "github.com/ethereum-optimism/optimism/op-service/testlog" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethclient" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rpc" + "github.com/pkg/errors" + "github.com/stretchr/testify/require" +) + +func TestBenchmarkCannon_FPP(t *testing.T) { + t.Skip("TODO(client-pod#906): Compare total witness size for assertions against pages allocated by the VM") + + op_e2e.InitParallel(t, op_e2e.UsesCannon) + ctx := context.Background() + cfg := op_e2e.DefaultSystemConfig(t) + // We don't need a verifier - just the sequencer is enough + delete(cfg.Nodes, "verifier") + // Use a small sequencer window size to avoid test timeout while waiting for empty blocks + // But not too small to ensure that our claim and subsequent state change is published + cfg.DeployConfig.SequencerWindowSize = 16 + minTs := hexutil.Uint64(0) + cfg.DeployConfig.L2GenesisDeltaTimeOffset = &minTs + cfg.DeployConfig.L2GenesisEcotoneTimeOffset = &minTs + + sys, err := cfg.Start(t) + require.Nil(t, err, "Error starting up system") + defer sys.Close() + + log := testlog.Logger(t, log.LevelInfo) + log.Info("genesis", "l2", sys.RollupConfig.Genesis.L2, "l1", sys.RollupConfig.Genesis.L1, "l2_time", sys.RollupConfig.Genesis.L2Time) + + l1Client := sys.Clients["l1"] + l2Seq := sys.Clients["sequencer"] + rollupRPCClient, err := rpc.DialContext(context.Background(), sys.RollupNodes["sequencer"].HTTPEndpoint()) + require.Nil(t, err) + rollupClient := sources.NewRollupClient(client.NewBaseRPCClient(rollupRPCClient)) + require.NoError(t, wait.ForUnsafeBlock(ctx, rollupClient, 1)) + + // Agreed state: 200 Big Contracts deployed at max size - total codesize is 5.90 MB + // In Fault Proof: Perform multicalls calling each Big Contract + // - induces 200 oracle.CodeByHash preimage loads + // Assertion: Under 2000 pages requested by the program (i.e. max ~8 MB). Assumes derivation overhead; block finalization, etc, requires < 1 MB of program memory. + + const numCreates = 200 + newContracts := createBigContracts(ctx, t, cfg, l2Seq, cfg.Secrets.Alice, numCreates) + receipt := callBigContracts(ctx, t, cfg, l2Seq, cfg.Secrets.Alice, newContracts) + + t.Log("Capture the latest L2 head that preceedes contract creations as agreed starting point") + agreedBlock, err := l2Seq.BlockByNumber(ctx, new(big.Int).Sub(receipt.BlockNumber, big.NewInt(1))) + require.NoError(t, err) + agreedL2Output, err := rollupClient.OutputAtBlock(ctx, agreedBlock.NumberU64()) + require.NoError(t, err, "could not retrieve l2 agreed block") + l2Head := agreedL2Output.BlockRef.Hash + l2OutputRoot := agreedL2Output.OutputRoot + + t.Log("Determine L2 claim") + l2ClaimBlockNumber := receipt.BlockNumber + l2Output, err := rollupClient.OutputAtBlock(ctx, l2ClaimBlockNumber.Uint64()) + require.NoError(t, err, "could not get expected output") + l2Claim := l2Output.OutputRoot + + t.Log("Determine L1 head that includes all batches required for L2 claim block") + require.NoError(t, wait.ForSafeBlock(ctx, rollupClient, l2ClaimBlockNumber.Uint64())) + l1HeadBlock, err := l1Client.BlockByNumber(ctx, nil) + require.NoError(t, err, "get l1 head block") + l1Head := l1HeadBlock.Hash() + + inputs := utils.LocalGameInputs{ + L1Head: l1Head, + L2Head: l2Head, + L2Claim: common.Hash(l2Claim), + L2OutputRoot: common.Hash(l2OutputRoot), + L2BlockNumber: l2ClaimBlockNumber, + } + debugfile := path.Join(t.TempDir(), "debug.json") + runCannon(t, ctx, sys, inputs, "sequencer", "--debug-info", debugfile) + data, err := os.ReadFile(debugfile) + require.NoError(t, err) + var debuginfo mipsevm.DebugInfo + require.NoError(t, json.Unmarshal(data, &debuginfo)) + t.Logf("Debug info: %#v", debuginfo) + // TODO(client-pod#906): Use maximum witness size for assertions against pages allocated by the VM +} + +func createBigContracts(ctx context.Context, t *testing.T, cfg op_e2e.SystemConfig, client *ethclient.Client, key *ecdsa.PrivateKey, numContracts int) []common.Address { + /* + contract Big { + bytes constant foo = hex"<24.4 KB of random data>"; + function ekans() external { foo; } + } + */ + createInputHex, err := os.ReadFile("bigCodeCreateInput.data") + createInput := common.FromHex(string(createInputHex[2:])) + require.NoError(t, err) + + nonce, err := client.NonceAt(ctx, crypto.PubkeyToAddress(key.PublicKey), nil) + require.NoError(t, err) + + type result struct { + addr common.Address + err error + } + + var wg sync.WaitGroup + wg.Add(numContracts) + results := make(chan result, numContracts) + for i := 0; i < numContracts; i++ { + tx := types.MustSignNewTx(key, types.LatestSignerForChainID(cfg.L2ChainIDBig()), &types.DynamicFeeTx{ + ChainID: cfg.L2ChainIDBig(), + Nonce: nonce + uint64(i), + To: nil, + GasTipCap: big.NewInt(10), + GasFeeCap: big.NewInt(200), + Gas: 10_000_000, + Data: createInput, + }) + go func() { + defer wg.Done() + ctx, cancel := context.WithTimeout(ctx, 120*time.Second) + defer cancel() + err := client.SendTransaction(ctx, tx) + if err != nil { + results <- result{err: errors.Wrap(err, "Sending L2 tx")} + return + } + receipt, err := wait.ForReceiptOK(ctx, client, tx.Hash()) + if err != nil { + results <- result{err: errors.Wrap(err, "Waiting for receipt")} + return + } + results <- result{addr: receipt.ContractAddress, err: nil} + }() + } + wg.Wait() + close(results) + + var addrs []common.Address + for r := range results { + require.NoError(t, r.err) + addrs = append(addrs, r.addr) + } + return addrs +} + +func callBigContracts(ctx context.Context, t *testing.T, cfg op_e2e.SystemConfig, client *ethclient.Client, key *ecdsa.PrivateKey, addrs []common.Address) *types.Receipt { + multicall3, err := bindings.NewMultiCall3(predeploys.MultiCall3Addr, client) + require.NoError(t, err) + + chainID, err := client.ChainID(ctx) + require.NoError(t, err) + opts, err := bind.NewKeyedTransactorWithChainID(key, chainID) + require.NoError(t, err) + + var calls []bindings.Multicall3Call3Value + calldata := crypto.Keccak256([]byte("ekans()"))[:4] + for _, addr := range addrs { + calls = append(calls, bindings.Multicall3Call3Value{ + Target: addr, + CallData: calldata, + Value: new(big.Int), + }) + } + opts.GasLimit = 20_000_000 + tx, err := multicall3.Aggregate3Value(opts, calls) + require.NoError(t, err) + + receipt, err := wait.ForReceiptOK(ctx, client, tx.Hash()) + require.NoError(t, err) + t.Logf("Initiated %d calls to the Big Contract. gas used: %d", len(addrs), receipt.GasUsed) + return receipt +} diff --git a/op-e2e/faultproofs/precompile_test.go b/op-e2e/faultproofs/precompile_test.go index eae333443842..ab8d0394771d 100644 --- a/op-e2e/faultproofs/precompile_test.go +++ b/op-e2e/faultproofs/precompile_test.go @@ -135,7 +135,7 @@ func TestPrecompiles(t *testing.T) { } } -func runCannon(t *testing.T, ctx context.Context, sys *op_e2e.System, inputs utils.LocalGameInputs, l2Node string) { +func runCannon(t *testing.T, ctx context.Context, sys *op_e2e.System, inputs utils.LocalGameInputs, l2Node string, extraVmArgs ...string) { l1Endpoint := sys.NodeEndpoint("l1") l1Beacon := sys.L1BeaconEndpoint() rollupEndpoint := sys.RollupEndpoint("sequencer") @@ -150,7 +150,7 @@ func runCannon(t *testing.T, ctx context.Context, sys *op_e2e.System, inputs uti executor := vm.NewExecutor(logger, metrics.NoopMetrics, cfg.Cannon, cfg.CannonAbsolutePreState, inputs) t.Log("Running cannon") - err := executor.GenerateProof(ctx, proofsDir, math.MaxUint) + err := executor.DoGenerateProof(ctx, proofsDir, math.MaxUint, math.MaxUint, extraVmArgs...) require.NoError(t, err, "failed to generate proof") state, err := parseState(filepath.Join(proofsDir, "final.json.gz")) From ea4d1fdb600f7d5b057ec9ca581196dc4df742ea Mon Sep 17 00:00:00 2001 From: protolambda Date: Wed, 19 Jun 2024 14:05:50 -0600 Subject: [PATCH 070/141] op-node: cl-sync using events (#10903) --- op-e2e/actions/l2_verifier.go | 19 +- op-e2e/actions/reorg_test.go | 2 +- op-e2e/system_test.go | 1 - op-node/node/node.go | 3 +- op-node/rollup/attributes/attributes_test.go | 14 +- op-node/rollup/clsync/clsync.go | 168 ++++++---- op-node/rollup/clsync/clsync_test.go | 307 +++++++++++------- op-node/rollup/driver/driver.go | 15 +- op-node/rollup/driver/state.go | 13 +- op-node/rollup/engine/engine_controller.go | 44 ++- op-node/rollup/engine/events.go | 67 +++- op-node/rollup/events.go | 4 + op-node/rollup/{driver => }/synchronous.go | 14 +- .../rollup/{driver => }/synchronous_test.go | 17 +- op-program/client/driver/driver.go | 2 +- op-service/testutils/mock_emitter.go | 25 ++ 16 files changed, 478 insertions(+), 237 deletions(-) rename op-node/rollup/{driver => }/synchronous.go (86%) rename op-node/rollup/{driver => }/synchronous_test.go (86%) create mode 100644 op-service/testutils/mock_emitter.go diff --git a/op-e2e/actions/l2_verifier.go b/op-e2e/actions/l2_verifier.go index 42d0813f30ca..5672db1286f0 100644 --- a/op-e2e/actions/l2_verifier.go +++ b/op-e2e/actions/l2_verifier.go @@ -82,10 +82,16 @@ type safeDB interface { } func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc derive.L1BlobsFetcher, plasmaSrc driver.PlasmaIface, eng L2API, cfg *rollup.Config, syncCfg *sync.Config, safeHeadListener safeDB) *L2Verifier { + ctx, cancel := context.WithCancel(context.Background()) + t.Cleanup(cancel) + + rootDeriver := &rollup.SynchronousDerivers{} + synchronousEvents := rollup.NewSynchronousEvents(log, ctx, rootDeriver) + metrics := &testutils.TestDerivationMetrics{} - ec := engine.NewEngineController(eng, log, metrics, cfg, syncCfg.SyncMode) + ec := engine.NewEngineController(eng, log, metrics, cfg, syncCfg.SyncMode, synchronousEvents) - clSync := clsync.NewCLSync(log, cfg, metrics, ec) + clSync := clsync.NewCLSync(log, cfg, metrics, synchronousEvents) var finalizer driver.Finalizer if cfg.PlasmaEnabled() { @@ -98,12 +104,6 @@ func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc deri pipeline := derive.NewDerivationPipeline(log, cfg, l1, blobsSrc, plasmaSrc, eng, metrics) - ctx, cancel := context.WithCancel(context.Background()) - t.Cleanup(cancel) - - rootDeriver := &rollup.SynchronousDerivers{} - synchronousEvents := driver.NewSynchronousEvents(log, ctx, rootDeriver) - syncDeriver := &driver.SyncDeriver{ Derivation: pipeline, Finalizer: finalizer, @@ -146,6 +146,7 @@ func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc deri syncDeriver, engDeriv, rollupNode, + clSync, } t.Cleanup(rollupNode.rpc.Stop) @@ -328,7 +329,7 @@ func (s *L2Verifier) ActL2PipelineFull(t Testing) { // ActL2UnsafeGossipReceive creates an action that can receive an unsafe execution payload, like gossipsub func (s *L2Verifier) ActL2UnsafeGossipReceive(payload *eth.ExecutionPayloadEnvelope) Action { return func(t Testing) { - s.clSync.AddUnsafePayload(payload) + s.syncDeriver.Emitter.Emit(clsync.ReceivedUnsafePayloadEvent{Envelope: payload}) } } diff --git a/op-e2e/actions/reorg_test.go b/op-e2e/actions/reorg_test.go index 1b4edbaf9cfe..27cce2aa1086 100644 --- a/op-e2e/actions/reorg_test.go +++ b/op-e2e/actions/reorg_test.go @@ -767,7 +767,7 @@ func ConflictingL2Blocks(gt *testing.T, deltaTimeOffset *hexutil.Uint64) { // give the unsafe block to the verifier, and see if it reorgs because of any unsafe inputs head, err := altSeqEngCl.PayloadByLabel(t.Ctx(), eth.Unsafe) require.NoError(t, err) - verifier.ActL2UnsafeGossipReceive(head) + verifier.ActL2UnsafeGossipReceive(head)(t) // make sure verifier has processed everything verifier.ActL2PipelineFull(t) diff --git a/op-e2e/system_test.go b/op-e2e/system_test.go index 30f15f7e2060..d5775ff50aa2 100644 --- a/op-e2e/system_test.go +++ b/op-e2e/system_test.go @@ -617,7 +617,6 @@ func L1InfoFromState(ctx context.Context, contract *bindings.L1Block, l2Number * // TestSystemMockP2P sets up a L1 Geth node, a rollup node, and a L2 geth node and then confirms that // the nodes can sync L2 blocks before they are confirmed on L1. func TestSystemMockP2P(t *testing.T) { - t.Skip("flaky in CI") // TODO(CLI-3859): Re-enable this test. InitParallel(t) cfg := DefaultSystemConfig(t) diff --git a/op-node/node/node.go b/op-node/node/node.go index f2a62cf58da0..fb5f981d8f14 100644 --- a/op-node/node/node.go +++ b/op-node/node/node.go @@ -582,7 +582,8 @@ func (n *OpNode) OnUnsafeL2Payload(ctx context.Context, from peer.ID, envelope * n.tracer.OnUnsafeL2Payload(ctx, from, envelope) - n.log.Info("Received signed execution payload from p2p", "id", envelope.ExecutionPayload.ID(), "peer", from) + n.log.Info("Received signed execution payload from p2p", "id", envelope.ExecutionPayload.ID(), "peer", from, + "txs", len(envelope.ExecutionPayload.Transactions)) // Pass on the event to the L2 Engine ctx, cancel := context.WithTimeout(ctx, time.Second*30) diff --git a/op-node/rollup/attributes/attributes_test.go b/op-node/rollup/attributes/attributes_test.go index 62931af8c378..49e6247e1417 100644 --- a/op-node/rollup/attributes/attributes_test.go +++ b/op-node/rollup/attributes/attributes_test.go @@ -182,7 +182,7 @@ func TestAttributesHandler(t *testing.T) { t.Run("drop stale attributes", func(t *testing.T) { logger := testlog.Logger(t, log.LevelInfo) eng := &testutils.MockEngine{} - ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync) + ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync, rollup.NoopEmitter{}) ah := NewAttributesHandler(logger, cfg, ec, eng) defer eng.AssertExpectations(t) @@ -196,7 +196,7 @@ func TestAttributesHandler(t *testing.T) { t.Run("pending gets reorged", func(t *testing.T) { logger := testlog.Logger(t, log.LevelInfo) eng := &testutils.MockEngine{} - ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync) + ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync, rollup.NoopEmitter{}) ah := NewAttributesHandler(logger, cfg, ec, eng) defer eng.AssertExpectations(t) @@ -211,7 +211,7 @@ func TestAttributesHandler(t *testing.T) { t.Run("consolidation fails", func(t *testing.T) { logger := testlog.Logger(t, log.LevelInfo) eng := &testutils.MockEngine{} - ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync) + ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync, rollup.NoopEmitter{}) ah := NewAttributesHandler(logger, cfg, ec, eng) ec.SetUnsafeHead(refA1) @@ -265,7 +265,7 @@ func TestAttributesHandler(t *testing.T) { fn := func(t *testing.T, lastInSpan bool) { logger := testlog.Logger(t, log.LevelInfo) eng := &testutils.MockEngine{} - ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync) + ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync, rollup.NoopEmitter{}) ah := NewAttributesHandler(logger, cfg, ec, eng) ec.SetUnsafeHead(refA1) @@ -324,7 +324,7 @@ func TestAttributesHandler(t *testing.T) { logger := testlog.Logger(t, log.LevelInfo) eng := &testutils.MockEngine{} - ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync) + ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync, rollup.NoopEmitter{}) ah := NewAttributesHandler(logger, cfg, ec, eng) ec.SetUnsafeHead(refA0) @@ -375,7 +375,7 @@ func TestAttributesHandler(t *testing.T) { logger := testlog.Logger(t, log.LevelInfo) eng := &testutils.MockEngine{} - ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync) + ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync, rollup.NoopEmitter{}) ah := NewAttributesHandler(logger, cfg, ec, eng) ec.SetUnsafeHead(refA0) @@ -399,7 +399,7 @@ func TestAttributesHandler(t *testing.T) { t.Run("no attributes", func(t *testing.T) { logger := testlog.Logger(t, log.LevelInfo) eng := &testutils.MockEngine{} - ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync) + ec := engine.NewEngineController(eng, logger, metrics.NoopMetrics, cfg, sync.CLSync, rollup.NoopEmitter{}) ah := NewAttributesHandler(logger, cfg, ec, eng) defer eng.AssertExpectations(t) diff --git a/op-node/rollup/clsync/clsync.go b/op-node/rollup/clsync/clsync.go index 989f1c7c98b6..faa4586105e3 100644 --- a/op-node/rollup/clsync/clsync.go +++ b/op-node/rollup/clsync/clsync.go @@ -1,9 +1,7 @@ package clsync import ( - "context" - "errors" - "io" + "sync" "github.com/ethereum/go-ethereum/log" @@ -20,27 +18,26 @@ type Metrics interface { RecordUnsafePayloadsBuffer(length uint64, memSize uint64, next eth.BlockID) } -type Engine interface { - engine.EngineState - InsertUnsafePayload(ctx context.Context, payload *eth.ExecutionPayloadEnvelope, ref eth.L2BlockRef) error -} - // CLSync holds on to a queue of received unsafe payloads, // and tries to apply them to the tip of the chain when requested to. type CLSync struct { - log log.Logger - cfg *rollup.Config - metrics Metrics - ec Engine + log log.Logger + cfg *rollup.Config + metrics Metrics + + emitter rollup.EventEmitter + + mu sync.Mutex + unsafePayloads *PayloadsQueue // queue of unsafe payloads, ordered by ascending block number, may have gaps and duplicates } -func NewCLSync(log log.Logger, cfg *rollup.Config, metrics Metrics, ec Engine) *CLSync { +func NewCLSync(log log.Logger, cfg *rollup.Config, metrics Metrics, emitter rollup.EventEmitter) *CLSync { return &CLSync{ log: log, cfg: cfg, metrics: metrics, - ec: ec, + emitter: emitter, unsafePayloads: NewPayloadsQueue(log, maxUnsafePayloadsMemory, payloadMemSize), } } @@ -58,67 +55,124 @@ func (eq *CLSync) LowestQueuedUnsafeBlock() eth.L2BlockRef { return ref } -// AddUnsafePayload schedules an execution payload to be processed, ahead of deriving it from L1. -func (eq *CLSync) AddUnsafePayload(envelope *eth.ExecutionPayloadEnvelope) { - if envelope == nil { - eq.log.Warn("cannot add nil unsafe payload") - return +type ReceivedUnsafePayloadEvent struct { + Envelope *eth.ExecutionPayloadEnvelope +} + +func (ev ReceivedUnsafePayloadEvent) String() string { + return "received-unsafe-payload" +} + +func (eq *CLSync) OnEvent(ev rollup.Event) { + // Events may be concurrent in the future. Prevent unsafe concurrent modifications to the payloads queue. + eq.mu.Lock() + defer eq.mu.Unlock() + + switch x := ev.(type) { + case engine.InvalidPayloadEvent: + eq.onInvalidPayload(x) + case engine.ForkchoiceUpdateEvent: + eq.onForkchoiceUpdate(x) + case ReceivedUnsafePayloadEvent: + eq.onUnsafePayload(x) } +} - if err := eq.unsafePayloads.Push(envelope); err != nil { - eq.log.Warn("Could not add unsafe payload", "id", envelope.ExecutionPayload.ID(), "timestamp", uint64(envelope.ExecutionPayload.Timestamp), "err", err) - return +// onInvalidPayload checks if the first next-up payload matches the invalid payload. +// If so, the payload is dropped, to give the next payloads a try. +func (eq *CLSync) onInvalidPayload(x engine.InvalidPayloadEvent) { + eq.log.Debug("CL sync received invalid-payload report", x.Envelope.ExecutionPayload.ID()) + + block := x.Envelope.ExecutionPayload + if peek := eq.unsafePayloads.Peek(); peek != nil && + block.BlockHash == peek.ExecutionPayload.BlockHash { + eq.log.Warn("Dropping invalid unsafe payload", + "hash", block.BlockHash, "number", uint64(block.BlockNumber), + "timestamp", uint64(block.Timestamp)) + eq.unsafePayloads.Pop() } - p := eq.unsafePayloads.Peek() - eq.metrics.RecordUnsafePayloadsBuffer(uint64(eq.unsafePayloads.Len()), eq.unsafePayloads.MemSize(), p.ExecutionPayload.ID()) - eq.log.Trace("Next unsafe payload to process", "next", p.ExecutionPayload.ID(), "timestamp", uint64(p.ExecutionPayload.Timestamp)) } -// Proceed dequeues the next applicable unsafe payload, if any, to apply to the tip of the chain. -// EOF error means we can't process the next unsafe payload. The caller should then try a different form of syncing. -func (eq *CLSync) Proceed(ctx context.Context) error { +// onForkchoiceUpdate peeks at the next applicable unsafe payload, if any, +// to apply on top of the received forkchoice pre-state. +// The payload is held on to until the forkchoice changes (success case) or the payload is reported to be invalid. +func (eq *CLSync) onForkchoiceUpdate(x engine.ForkchoiceUpdateEvent) { + eq.log.Debug("CL sync received forkchoice update", + "unsafe", x.UnsafeL2Head, "safe", x.SafeL2Head, "finalized", x.FinalizedL2Head) + + for { + pop, abort := eq.fromQueue(x) + if abort { + return + } + if pop { + eq.unsafePayloads.Pop() + } else { + break + } + } + + firstEnvelope := eq.unsafePayloads.Peek() + + // We don't pop from the queue. If there is a temporary error then we can retry. + // Upon next forkchoice update or invalid-payload event we can remove it from the queue. + eq.emitter.Emit(engine.ProcessUnsafePayloadEvent{Envelope: firstEnvelope}) +} + +// fromQueue determines what to do with the tip of the payloads-queue, given the forkchoice pre-state. +// If abort, there is nothing to process (either due to empty queue, or unsuitable tip). +// If pop, the tip should be dropped, and processing can repeat from there. +// If not abort or pop, the tip is ready to process. +func (eq *CLSync) fromQueue(x engine.ForkchoiceUpdateEvent) (pop bool, abort bool) { if eq.unsafePayloads.Len() == 0 { - return io.EOF + return false, true } firstEnvelope := eq.unsafePayloads.Peek() first := firstEnvelope.ExecutionPayload - if uint64(first.BlockNumber) <= eq.ec.SafeL2Head().Number { - eq.log.Info("skipping unsafe payload, since it is older than safe head", "safe", eq.ec.SafeL2Head().ID(), "unsafe", eq.ec.UnsafeL2Head().ID(), "unsafe_payload", first.ID()) - eq.unsafePayloads.Pop() - return nil + if first.BlockHash == x.UnsafeL2Head.Hash { + eq.log.Debug("successfully processed payload, removing it from the payloads queue now") + return true, false } - if uint64(first.BlockNumber) <= eq.ec.UnsafeL2Head().Number { - eq.log.Info("skipping unsafe payload, since it is older than unsafe head", "unsafe", eq.ec.UnsafeL2Head().ID(), "unsafe_payload", first.ID()) - eq.unsafePayloads.Pop() - return nil + + if uint64(first.BlockNumber) <= x.SafeL2Head.Number { + eq.log.Info("skipping unsafe payload, since it is older than safe head", "safe", x.SafeL2Head.ID(), "unsafe", x.UnsafeL2Head.ID(), "unsafe_payload", first.ID()) + return true, false + } + if uint64(first.BlockNumber) <= x.UnsafeL2Head.Number { + eq.log.Info("skipping unsafe payload, since it is older than unsafe head", "unsafe", x.UnsafeL2Head.ID(), "unsafe_payload", first.ID()) + return true, false } // Ensure that the unsafe payload builds upon the current unsafe head - if first.ParentHash != eq.ec.UnsafeL2Head().Hash { - if uint64(first.BlockNumber) == eq.ec.UnsafeL2Head().Number+1 { - eq.log.Info("skipping unsafe payload, since it does not build onto the existing unsafe chain", "safe", eq.ec.SafeL2Head().ID(), "unsafe", eq.ec.UnsafeL2Head().ID(), "unsafe_payload", first.ID()) - eq.unsafePayloads.Pop() + if first.ParentHash != x.UnsafeL2Head.Hash { + if uint64(first.BlockNumber) == x.UnsafeL2Head.Number+1 { + eq.log.Info("skipping unsafe payload, since it does not build onto the existing unsafe chain", "safe", x.SafeL2Head.ID(), "unsafe", x.UnsafeL2Head.ID(), "unsafe_payload", first.ID()) + return true, false } - return io.EOF // time to go to next stage if we cannot process the first unsafe payload + return false, true // rollup-node should try something different if it cannot process the first unsafe payload } - ref, err := derive.PayloadToBlockRef(eq.cfg, first) - if err != nil { - eq.log.Error("failed to decode L2 block ref from payload", "err", err) - eq.unsafePayloads.Pop() - return nil + return false, false +} + +// AddUnsafePayload schedules an execution payload to be processed, ahead of deriving it from L1. +func (eq *CLSync) onUnsafePayload(x ReceivedUnsafePayloadEvent) { + eq.log.Debug("CL sync received payload", "payload", x.Envelope.ExecutionPayload.ID()) + envelope := x.Envelope + if envelope == nil { + eq.log.Warn("cannot add nil unsafe payload") + return } - if err := eq.ec.InsertUnsafePayload(ctx, firstEnvelope, ref); errors.Is(err, derive.ErrTemporary) { - eq.log.Debug("Temporary error while inserting unsafe payload", "hash", ref.Hash, "number", ref.Number, "timestamp", ref.Time, "l1Origin", ref.L1Origin) - return err - } else if err != nil { - eq.log.Warn("Dropping invalid unsafe payload", "hash", ref.Hash, "number", ref.Number, "timestamp", ref.Time, "l1Origin", ref.L1Origin) - eq.unsafePayloads.Pop() - return err + if err := eq.unsafePayloads.Push(envelope); err != nil { + eq.log.Warn("Could not add unsafe payload", "id", envelope.ExecutionPayload.ID(), "timestamp", uint64(envelope.ExecutionPayload.Timestamp), "err", err) + return } - eq.unsafePayloads.Pop() - eq.log.Trace("Executed unsafe payload", "hash", ref.Hash, "number", ref.Number, "timestamp", ref.Time, "l1Origin", ref.L1Origin) - return nil + p := eq.unsafePayloads.Peek() + eq.metrics.RecordUnsafePayloadsBuffer(uint64(eq.unsafePayloads.Len()), eq.unsafePayloads.MemSize(), p.ExecutionPayload.ID()) + eq.log.Trace("Next unsafe payload to process", "next", p.ExecutionPayload.ID(), "timestamp", uint64(p.ExecutionPayload.Timestamp)) + + // request forkchoice signal, so we can process the payload maybe + eq.emitter.Emit(engine.ForkchoiceRequestEvent{}) } diff --git a/op-node/rollup/clsync/clsync_test.go b/op-node/rollup/clsync/clsync_test.go index 67bcc25f82ea..f42c67f9220e 100644 --- a/op-node/rollup/clsync/clsync_test.go +++ b/op-node/rollup/clsync/clsync_test.go @@ -1,9 +1,6 @@ package clsync import ( - "context" - "errors" - "io" "math/big" "math/rand" // nosemgrep "testing" @@ -17,39 +14,12 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-node/rollup/engine" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/testlog" "github.com/ethereum-optimism/optimism/op-service/testutils" ) -type fakeEngine struct { - unsafe, safe, finalized eth.L2BlockRef - - err error -} - -func (f *fakeEngine) Finalized() eth.L2BlockRef { - return f.finalized -} - -func (f *fakeEngine) UnsafeL2Head() eth.L2BlockRef { - return f.unsafe -} - -func (f *fakeEngine) SafeL2Head() eth.L2BlockRef { - return f.safe -} - -func (f *fakeEngine) InsertUnsafePayload(ctx context.Context, payload *eth.ExecutionPayloadEnvelope, ref eth.L2BlockRef) error { - if f.err != nil { - return f.err - } - f.unsafe = ref - return nil -} - -var _ Engine = (*fakeEngine)(nil) - func TestCLSync(t *testing.T) { rng := rand.New(rand.NewSource(1234)) @@ -155,157 +125,252 @@ func TestCLSync(t *testing.T) { // When a previously received unsafe block is older than the tip of the chain, we want to drop it. t.Run("drop old", func(t *testing.T) { logger := testlog.Logger(t, log.LevelError) - eng := &fakeEngine{ - unsafe: refA2, - safe: refA0, - finalized: refA0, - } - cl := NewCLSync(logger, cfg, metrics, eng) - cl.AddUnsafePayload(payloadA1) - require.NoError(t, cl.Proceed(context.Background())) + emitter := &testutils.MockEmitter{} + cl := NewCLSync(logger, cfg, metrics, emitter) + + emitter.ExpectOnce(engine.ForkchoiceRequestEvent{}) + cl.OnEvent(ReceivedUnsafePayloadEvent{Envelope: payloadA1}) + emitter.AssertExpectations(t) + + cl.OnEvent(engine.ForkchoiceUpdateEvent{ + UnsafeL2Head: refA2, + SafeL2Head: refA0, + FinalizedL2Head: refA0, + }) + emitter.AssertExpectations(t) // no new events expected to be emitted require.Nil(t, cl.unsafePayloads.Peek(), "pop because too old") - require.Equal(t, refA2, eng.unsafe, "keep unsafe head") }) // When we already have the exact payload as tip, then no need to process it t.Run("drop equal", func(t *testing.T) { logger := testlog.Logger(t, log.LevelError) - eng := &fakeEngine{ - unsafe: refA1, - safe: refA0, - finalized: refA0, - } - cl := NewCLSync(logger, cfg, metrics, eng) - cl.AddUnsafePayload(payloadA1) - require.NoError(t, cl.Proceed(context.Background())) + emitter := &testutils.MockEmitter{} + cl := NewCLSync(logger, cfg, metrics, emitter) + + emitter.ExpectOnce(engine.ForkchoiceRequestEvent{}) + cl.OnEvent(ReceivedUnsafePayloadEvent{Envelope: payloadA1}) + emitter.AssertExpectations(t) + + cl.OnEvent(engine.ForkchoiceUpdateEvent{ + UnsafeL2Head: refA1, + SafeL2Head: refA0, + FinalizedL2Head: refA0, + }) + emitter.AssertExpectations(t) // no new events expected to be emitted require.Nil(t, cl.unsafePayloads.Peek(), "pop because seen") - require.Equal(t, refA1, eng.unsafe, "keep unsafe head") }) // When we have a different payload, at the same height, then we want to keep it. // The unsafe chain consensus preserves the first-seen payload. t.Run("ignore conflict", func(t *testing.T) { logger := testlog.Logger(t, log.LevelError) - eng := &fakeEngine{ - unsafe: altRefA1, - safe: refA0, - finalized: refA0, - } - cl := NewCLSync(logger, cfg, metrics, eng) - cl.AddUnsafePayload(payloadA1) - require.NoError(t, cl.Proceed(context.Background())) + emitter := &testutils.MockEmitter{} + cl := NewCLSync(logger, cfg, metrics, emitter) + + emitter.ExpectOnce(engine.ForkchoiceRequestEvent{}) + cl.OnEvent(ReceivedUnsafePayloadEvent{Envelope: payloadA1}) + emitter.AssertExpectations(t) + + cl.OnEvent(engine.ForkchoiceUpdateEvent{ + UnsafeL2Head: altRefA1, + SafeL2Head: refA0, + FinalizedL2Head: refA0, + }) + emitter.AssertExpectations(t) // no new events expected to be emitted require.Nil(t, cl.unsafePayloads.Peek(), "pop because alternative") - require.Equal(t, altRefA1, eng.unsafe, "keep unsafe head") }) t.Run("ignore unsafe reorg", func(t *testing.T) { logger := testlog.Logger(t, log.LevelError) - eng := &fakeEngine{ - unsafe: altRefA1, - safe: refA0, - finalized: refA0, - } - cl := NewCLSync(logger, cfg, metrics, eng) - cl.AddUnsafePayload(payloadA2) - require.ErrorIs(t, cl.Proceed(context.Background()), io.EOF, "payload2 does not fit onto alt1, thus retrieve next input from L1") + emitter := &testutils.MockEmitter{} + cl := NewCLSync(logger, cfg, metrics, emitter) + + emitter.ExpectOnce(engine.ForkchoiceRequestEvent{}) + cl.OnEvent(ReceivedUnsafePayloadEvent{Envelope: payloadA2}) + emitter.AssertExpectations(t) + + cl.OnEvent(engine.ForkchoiceUpdateEvent{ + UnsafeL2Head: altRefA1, + SafeL2Head: refA0, + FinalizedL2Head: refA0, + }) + emitter.AssertExpectations(t) // no new events expected, since A2 does not fit onto altA1 require.Nil(t, cl.unsafePayloads.Peek(), "pop because not applicable") - require.Equal(t, altRefA1, eng.unsafe, "keep unsafe head") }) t.Run("success", func(t *testing.T) { logger := testlog.Logger(t, log.LevelError) - eng := &fakeEngine{ - unsafe: refA0, - safe: refA0, - finalized: refA0, - } - cl := NewCLSync(logger, cfg, metrics, eng) - - require.ErrorIs(t, cl.Proceed(context.Background()), io.EOF, "nothing to process yet") + + emitter := &testutils.MockEmitter{} + cl := NewCLSync(logger, cfg, metrics, emitter) + emitter.AssertExpectations(t) // nothing to process yet + require.Nil(t, cl.unsafePayloads.Peek(), "no payloads yet") - cl.AddUnsafePayload(payloadA1) + emitter.ExpectOnce(engine.ForkchoiceRequestEvent{}) + cl.OnEvent(ReceivedUnsafePayloadEvent{Envelope: payloadA1}) + emitter.AssertExpectations(t) + lowest := cl.LowestQueuedUnsafeBlock() require.Equal(t, refA1, lowest, "expecting A1 next") - require.NoError(t, cl.Proceed(context.Background())) + + // payload A1 should be possible to process on top of A0 + emitter.ExpectOnce(engine.ProcessUnsafePayloadEvent{Envelope: payloadA1}) + cl.OnEvent(engine.ForkchoiceUpdateEvent{ + UnsafeL2Head: refA0, + SafeL2Head: refA0, + FinalizedL2Head: refA0, + }) + emitter.AssertExpectations(t) + + // now pretend the payload was processed: we can drop A1 now + cl.OnEvent(engine.ForkchoiceUpdateEvent{ + UnsafeL2Head: refA1, + SafeL2Head: refA0, + FinalizedL2Head: refA0, + }) require.Nil(t, cl.unsafePayloads.Peek(), "pop because applied") - require.Equal(t, refA1, eng.unsafe, "new unsafe head") - cl.AddUnsafePayload(payloadA2) + // repeat for A2 + emitter.ExpectOnce(engine.ForkchoiceRequestEvent{}) + cl.OnEvent(ReceivedUnsafePayloadEvent{Envelope: payloadA2}) + emitter.AssertExpectations(t) + lowest = cl.LowestQueuedUnsafeBlock() require.Equal(t, refA2, lowest, "expecting A2 next") - require.NoError(t, cl.Proceed(context.Background())) + + emitter.ExpectOnce(engine.ProcessUnsafePayloadEvent{Envelope: payloadA2}) + cl.OnEvent(engine.ForkchoiceUpdateEvent{ + UnsafeL2Head: refA1, + SafeL2Head: refA0, + FinalizedL2Head: refA0, + }) + emitter.AssertExpectations(t) + + // now pretend the payload was processed: we can drop A2 now + cl.OnEvent(engine.ForkchoiceUpdateEvent{ + UnsafeL2Head: refA2, + SafeL2Head: refA0, + FinalizedL2Head: refA0, + }) require.Nil(t, cl.unsafePayloads.Peek(), "pop because applied") - require.Equal(t, refA2, eng.unsafe, "new unsafe head") }) t.Run("double buffer", func(t *testing.T) { logger := testlog.Logger(t, log.LevelError) - eng := &fakeEngine{ - unsafe: refA0, - safe: refA0, - finalized: refA0, - } - cl := NewCLSync(logger, cfg, metrics, eng) - cl.AddUnsafePayload(payloadA1) - cl.AddUnsafePayload(payloadA2) + emitter := &testutils.MockEmitter{} + cl := NewCLSync(logger, cfg, metrics, emitter) + + emitter.ExpectOnce(engine.ForkchoiceRequestEvent{}) + cl.OnEvent(ReceivedUnsafePayloadEvent{Envelope: payloadA1}) + emitter.AssertExpectations(t) + emitter.ExpectOnce(engine.ForkchoiceRequestEvent{}) + cl.OnEvent(ReceivedUnsafePayloadEvent{Envelope: payloadA2}) + emitter.AssertExpectations(t) lowest := cl.LowestQueuedUnsafeBlock() require.Equal(t, refA1, lowest, "expecting A1 next") - require.NoError(t, cl.Proceed(context.Background())) - require.NotNil(t, cl.unsafePayloads.Peek(), "next is ready") - require.Equal(t, refA1, eng.unsafe, "new unsafe head") - require.NoError(t, cl.Proceed(context.Background())) + emitter.ExpectOnce(engine.ProcessUnsafePayloadEvent{Envelope: payloadA1}) + cl.OnEvent(engine.ForkchoiceUpdateEvent{ + UnsafeL2Head: refA0, + SafeL2Head: refA0, + FinalizedL2Head: refA0, + }) + emitter.AssertExpectations(t) + require.Equal(t, 2, cl.unsafePayloads.Len(), "still holding on to A1, and queued A2") + + // Now pretend the payload was processed: we can drop A1 now. + // The CL-sync will try to immediately continue with A2. + emitter.ExpectOnce(engine.ProcessUnsafePayloadEvent{Envelope: payloadA2}) + cl.OnEvent(engine.ForkchoiceUpdateEvent{ + UnsafeL2Head: refA1, + SafeL2Head: refA0, + FinalizedL2Head: refA0, + }) + emitter.AssertExpectations(t) + + // now pretend the payload was processed: we can drop A2 now + cl.OnEvent(engine.ForkchoiceUpdateEvent{ + UnsafeL2Head: refA2, + SafeL2Head: refA0, + FinalizedL2Head: refA0, + }) require.Nil(t, cl.unsafePayloads.Peek(), "done") - require.Equal(t, refA2, eng.unsafe, "new unsafe head") }) t.Run("temporary error", func(t *testing.T) { logger := testlog.Logger(t, log.LevelError) - eng := &fakeEngine{ - unsafe: refA0, - safe: refA0, - finalized: refA0, - } - cl := NewCLSync(logger, cfg, metrics, eng) - - testErr := derive.NewTemporaryError(errors.New("test error")) - eng.err = testErr - cl.AddUnsafePayload(payloadA1) - require.ErrorIs(t, cl.Proceed(context.Background()), testErr) - require.Equal(t, refA0, eng.unsafe, "old unsafe head after error") + + emitter := &testutils.MockEmitter{} + cl := NewCLSync(logger, cfg, metrics, emitter) + + emitter.ExpectOnce(engine.ForkchoiceRequestEvent{}) + cl.OnEvent(ReceivedUnsafePayloadEvent{Envelope: payloadA1}) + emitter.AssertExpectations(t) + + emitter.ExpectOnce(engine.ProcessUnsafePayloadEvent{Envelope: payloadA1}) + cl.OnEvent(engine.ForkchoiceUpdateEvent{ + UnsafeL2Head: refA0, + SafeL2Head: refA0, + FinalizedL2Head: refA0, + }) + emitter.AssertExpectations(t) + + // On temporary errors we don't need any feedback from the engine. + // We just hold on to what payloads there are in the queue. require.NotNil(t, cl.unsafePayloads.Peek(), "no pop because temporary error") - eng.err = nil - require.NoError(t, cl.Proceed(context.Background())) - require.Equal(t, refA1, eng.unsafe, "new unsafe head after resolved error") + // Pretend we are still stuck on the same forkchoice. The CL-sync will retry sneding the payload. + emitter.ExpectOnce(engine.ProcessUnsafePayloadEvent{Envelope: payloadA1}) + cl.OnEvent(engine.ForkchoiceUpdateEvent{ + UnsafeL2Head: refA0, + SafeL2Head: refA0, + FinalizedL2Head: refA0, + }) + emitter.AssertExpectations(t) + require.NotNil(t, cl.unsafePayloads.Peek(), "no pop because retry still unconfirmed") + + // Now confirm we got the payload this time + cl.OnEvent(engine.ForkchoiceUpdateEvent{ + UnsafeL2Head: refA1, + SafeL2Head: refA0, + FinalizedL2Head: refA0, + }) require.Nil(t, cl.unsafePayloads.Peek(), "pop because valid") }) t.Run("invalid payload error", func(t *testing.T) { logger := testlog.Logger(t, log.LevelError) - eng := &fakeEngine{ - unsafe: refA0, - safe: refA0, - finalized: refA0, - } - cl := NewCLSync(logger, cfg, metrics, eng) - - testErr := errors.New("test error") - eng.err = testErr - cl.AddUnsafePayload(payloadA1) - require.ErrorIs(t, cl.Proceed(context.Background()), testErr) - require.Equal(t, refA0, eng.unsafe, "old unsafe head after error") + emitter := &testutils.MockEmitter{} + cl := NewCLSync(logger, cfg, metrics, emitter) + + // CLSync gets payload and requests engine state, to later determine if payload should be forwarded + emitter.ExpectOnce(engine.ForkchoiceRequestEvent{}) + cl.OnEvent(ReceivedUnsafePayloadEvent{Envelope: payloadA1}) + emitter.AssertExpectations(t) + + // Engine signals, CLSync sends the payload + emitter.ExpectOnce(engine.ProcessUnsafePayloadEvent{Envelope: payloadA1}) + cl.OnEvent(engine.ForkchoiceUpdateEvent{ + UnsafeL2Head: refA0, + SafeL2Head: refA0, + FinalizedL2Head: refA0, + }) + emitter.AssertExpectations(t) + + // Pretend the payload is bad. It should not be retried after this. + cl.OnEvent(engine.InvalidPayloadEvent{Envelope: payloadA1}) + emitter.AssertExpectations(t) require.Nil(t, cl.unsafePayloads.Peek(), "pop because invalid") }) } diff --git a/op-node/rollup/driver/driver.go b/op-node/rollup/driver/driver.go index 0865685c8414..1701387c18c1 100644 --- a/op-node/rollup/driver/driver.go +++ b/op-node/rollup/driver/driver.go @@ -77,8 +77,6 @@ type EngineController interface { type CLSync interface { LowestQueuedUnsafeBlock() eth.L2BlockRef - AddUnsafePayload(payload *eth.ExecutionPayloadEnvelope) - Proceed(ctx context.Context) error } type AttributesHandler interface { @@ -173,13 +171,17 @@ func NewDriver( sequencerConductor conductor.SequencerConductor, plasma PlasmaIface, ) *Driver { + driverCtx, driverCancel := context.WithCancel(context.Background()) + rootDeriver := &rollup.SynchronousDerivers{} + synchronousEvents := rollup.NewSynchronousEvents(log, driverCtx, rootDeriver) + l1 = NewMeteredL1Fetcher(l1, metrics) l1State := NewL1State(log, metrics) sequencerConfDepth := NewConfDepth(driverCfg.SequencerConfDepth, l1State.L1Head, l1) findL1Origin := NewL1OriginSelector(log, cfg, sequencerConfDepth) verifConfDepth := NewConfDepth(driverCfg.VerifierConfDepth, l1State.L1Head, l1) - ec := engine.NewEngineController(l2, log, metrics, cfg, syncCfg.SyncMode) - clSync := clsync.NewCLSync(log, cfg, metrics, ec) + ec := engine.NewEngineController(l2, log, metrics, cfg, syncCfg.SyncMode, synchronousEvents) + clSync := clsync.NewCLSync(log, cfg, metrics, synchronousEvents) var finalizer Finalizer if cfg.PlasmaEnabled() { @@ -193,12 +195,8 @@ func NewDriver( attrBuilder := derive.NewFetchingAttributesBuilder(cfg, l1, l2) meteredEngine := NewMeteredEngine(cfg, ec, metrics, log) // Only use the metered engine in the sequencer b/c it records sequencing metrics. sequencer := NewSequencer(log, cfg, meteredEngine, attrBuilder, findL1Origin, metrics) - driverCtx, driverCancel := context.WithCancel(context.Background()) asyncGossiper := async.NewAsyncGossiper(driverCtx, network, log, metrics) - rootDeriver := &rollup.SynchronousDerivers{} - synchronousEvents := NewSynchronousEvents(log, driverCtx, rootDeriver) - syncDeriver := &SyncDeriver{ Derivation: derivationPipeline, Finalizer: finalizer, @@ -251,6 +249,7 @@ func NewDriver( engDeriv, schedDeriv, driver, + clSync, } return driver diff --git a/op-node/rollup/driver/state.go b/op-node/rollup/driver/state.go index b933096abc2e..93b78f875f41 100644 --- a/op-node/rollup/driver/state.go +++ b/op-node/rollup/driver/state.go @@ -15,6 +15,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/async" + "github.com/ethereum-optimism/optimism/op-node/rollup/clsync" "github.com/ethereum-optimism/optimism/op-node/rollup/conductor" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/engine" @@ -40,7 +41,7 @@ type Driver struct { sched *StepSchedulingDeriver - synchronousEvents *SynchronousEvents + synchronousEvents *rollup.SynchronousEvents // Requests to block the event loop for synchronous execution to avoid reading an inconsistent state stateReq chan chan struct{} @@ -287,7 +288,7 @@ func (s *Driver) eventLoop() { // If we are doing CL sync or done with engine syncing, fallback to the unsafe payload queue & CL P2P sync. if s.SyncCfg.SyncMode == sync.CLSync || !s.Engine.IsEngineSyncing() { s.log.Info("Optimistically queueing unsafe L2 execution payload", "id", envelope.ExecutionPayload.ID()) - s.CLSync.AddUnsafePayload(envelope) + s.Emitter.Emit(clsync.ReceivedUnsafePayloadEvent{Envelope: envelope}) s.metrics.RecordReceivedUnsafePayload(envelope) reqStep() } else if s.SyncCfg.SyncMode == sync.ELSync { @@ -509,12 +510,8 @@ func (s *SyncDeriver) SyncStep(ctx context.Context) error { return derive.EngineELSyncing } - // Trying unsafe payload should be done before safe attributes - // It allows the unsafe head to move forward while the long-range consolidation is in progress. - if err := s.CLSync.Proceed(ctx); err != io.EOF { - // EOF error means we can't process the next unsafe payload. Then we should process next safe attributes. - return err - } + // Any now processed forkchoice updates will trigger CL-sync payload processing, if any payload is queued up. + // Try safe attributes now. if err := s.AttributesHandler.Proceed(ctx); err != io.EOF { // EOF error means we can't process the next attributes. Then we should derive the next attributes. diff --git a/op-node/rollup/engine/engine_controller.go b/op-node/rollup/engine/engine_controller.go index 6e382cc367f2..34f166640f76 100644 --- a/op-node/rollup/engine/engine_controller.go +++ b/op-node/rollup/engine/engine_controller.go @@ -54,6 +54,8 @@ type EngineController struct { elStart time.Time clock clock.Clock + emitter rollup.EventEmitter + // Block Head State unsafeHead eth.L2BlockRef pendingSafeHead eth.L2BlockRef // L2 block processed from the middle of a span batch, but not marked as the safe block yet. @@ -75,7 +77,8 @@ type EngineController struct { safeAttrs *derive.AttributesWithParent } -func NewEngineController(engine ExecEngine, log log.Logger, metrics derive.Metrics, rollupCfg *rollup.Config, syncMode sync.Mode) *EngineController { +func NewEngineController(engine ExecEngine, log log.Logger, metrics derive.Metrics, + rollupCfg *rollup.Config, syncMode sync.Mode, emitter rollup.EventEmitter) *EngineController { syncStatus := syncStatusCL if syncMode == sync.ELSync { syncStatus = syncStatusWillStartEL @@ -90,6 +93,7 @@ func NewEngineController(engine ExecEngine, log log.Logger, metrics derive.Metri syncMode: syncMode, syncStatus: syncStatus, clock: clock.SystemClock, + emitter: emitter, } } @@ -224,6 +228,11 @@ func (e *EngineController) StartPayload(ctx context.Context, parent eth.L2BlockR if err != nil { return errTyp, err } + e.emitter.Emit(ForkchoiceUpdateEvent{ + UnsafeL2Head: parent, + SafeL2Head: e.safeHead, + FinalizedL2Head: e.finalizedHead, + }) e.buildingInfo = eth.PayloadInfo{ID: id, Timestamp: uint64(attrs.Attributes.Timestamp)} e.buildingSafe = updateSafe @@ -257,6 +266,9 @@ func (e *EngineController) ConfirmPayload(ctx context.Context, agossip async.Asy updateSafe := e.buildingSafe && e.safeAttrs != nil && e.safeAttrs.IsLastInSpan envelope, errTyp, err := confirmPayload(ctx, e.log, e.engine, fc, e.buildingInfo, updateSafe, agossip, sequencerConductor) if err != nil { + if !errors.Is(err, derive.ErrTemporary) { + e.emitter.Emit(InvalidPayloadEvent{}) + } return nil, errTyp, fmt.Errorf("failed to complete building on top of L2 chain %s, id: %s, error (%d): %w", e.buildingOnto, e.buildingInfo.ID, errTyp, err) } ref, err := derive.PayloadToBlockRef(e.rollupCfg, envelope.ExecutionPayload) @@ -280,6 +292,11 @@ func (e *EngineController) ConfirmPayload(ctx context.Context, agossip async.Asy e.SetBackupUnsafeL2Head(eth.L2BlockRef{}, false) } } + e.emitter.Emit(ForkchoiceUpdateEvent{ + UnsafeL2Head: e.unsafeHead, + SafeL2Head: e.safeHead, + FinalizedL2Head: e.finalizedHead, + }) e.resetBuildingState() return envelope, BlockInsertOK, nil @@ -353,7 +370,7 @@ func (e *EngineController) TryUpdateEngine(ctx context.Context) error { } logFn := e.logSyncProgressMaybe() defer logFn() - _, err := e.engine.ForkchoiceUpdate(ctx, &fc, nil) + fcRes, err := e.engine.ForkchoiceUpdate(ctx, &fc, nil) if err != nil { var inputErr eth.InputError if errors.As(err, &inputErr) { @@ -367,6 +384,13 @@ func (e *EngineController) TryUpdateEngine(ctx context.Context) error { return derive.NewTemporaryError(fmt.Errorf("failed to sync forkchoice with engine: %w", err)) } } + if fcRes.PayloadStatus.Status == eth.ExecutionValid { + e.emitter.Emit(ForkchoiceUpdateEvent{ + UnsafeL2Head: e.unsafeHead, + SafeL2Head: e.safeHead, + FinalizedL2Head: e.finalizedHead, + }) + } e.needFCUCall = false return nil } @@ -393,6 +417,9 @@ func (e *EngineController) InsertUnsafePayload(ctx context.Context, envelope *et if err != nil { return derive.NewTemporaryError(fmt.Errorf("failed to update insert payload: %w", err)) } + if status.Status == eth.ExecutionInvalid { + e.emitter.Emit(InvalidPayloadEvent{Envelope: envelope}) + } if !e.checkNewPayloadStatus(status.Status) { payload := envelope.ExecutionPayload return derive.NewTemporaryError(fmt.Errorf("cannot process unsafe payload: new - %v; parent: %v; err: %w", @@ -440,6 +467,14 @@ func (e *EngineController) InsertUnsafePayload(ctx context.Context, envelope *et e.syncStatus = syncStatusFinishedEL } + if fcRes.PayloadStatus.Status == eth.ExecutionValid { + e.emitter.Emit(ForkchoiceUpdateEvent{ + UnsafeL2Head: e.unsafeHead, + SafeL2Head: e.safeHead, + FinalizedL2Head: e.finalizedHead, + }) + } + return nil } @@ -501,6 +536,11 @@ func (e *EngineController) TryBackupUnsafeReorg(ctx context.Context) (bool, erro } } if fcRes.PayloadStatus.Status == eth.ExecutionValid { + e.emitter.Emit(ForkchoiceUpdateEvent{ + UnsafeL2Head: e.backupUnsafeHead, + SafeL2Head: e.safeHead, + FinalizedL2Head: e.finalizedHead, + }) // Execution engine accepted the reorg. e.log.Info("successfully reorged unsafe head using backupUnsafe", "unsafe", e.backupUnsafeHead.ID()) e.SetUnsafeHead(e.BackupUnsafeL2Head()) diff --git a/op-node/rollup/engine/events.go b/op-node/rollup/engine/events.go index 7a26abcae8b2..02dcbc40e332 100644 --- a/op-node/rollup/engine/events.go +++ b/op-node/rollup/engine/events.go @@ -9,8 +9,44 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-service/eth" ) +type InvalidPayloadEvent struct { + Envelope *eth.ExecutionPayloadEnvelope +} + +func (ev InvalidPayloadEvent) String() string { + return "invalid-payload" +} + +// ForkchoiceRequestEvent signals to the engine that it should emit an artificial +// forkchoice-update event, to signal the latest forkchoice to other derivers. +// This helps decouple derivers from the actual engine state, +// while also not making the derivers wait for a forkchoice update at random. +type ForkchoiceRequestEvent struct { +} + +func (ev ForkchoiceRequestEvent) String() string { + return "forkchoice-request" +} + +type ForkchoiceUpdateEvent struct { + UnsafeL2Head, SafeL2Head, FinalizedL2Head eth.L2BlockRef +} + +func (ev ForkchoiceUpdateEvent) String() string { + return "forkchoice-update" +} + +type ProcessUnsafePayloadEvent struct { + Envelope *eth.ExecutionPayloadEnvelope +} + +func (ev ProcessUnsafePayloadEvent) String() string { + return "process-unsafe-payload" +} + type TryBackupUnsafeReorgEvent struct { } @@ -47,7 +83,7 @@ func NewEngDeriver(log log.Logger, ctx context.Context, cfg *rollup.Config, } func (d *EngDeriver) OnEvent(ev rollup.Event) { - switch ev.(type) { + switch x := ev.(type) { case TryBackupUnsafeReorgEvent: // If we don't need to call FCU to restore unsafeHead using backupUnsafe, keep going b/c // this was a no-op(except correcting invalid state when backupUnsafe is empty but TryBackupUnsafeReorg called). @@ -81,5 +117,34 @@ func (d *EngDeriver) OnEvent(ev rollup.Event) { d.emitter.Emit(rollup.CriticalErrorEvent{Err: fmt.Errorf("unexpected TryUpdateEngine error type: %w", err)}) } } + case ProcessUnsafePayloadEvent: + ref, err := derive.PayloadToBlockRef(d.cfg, x.Envelope.ExecutionPayload) + if err != nil { + d.log.Error("failed to decode L2 block ref from payload", "err", err) + return + } + if err := d.ec.InsertUnsafePayload(d.ctx, x.Envelope, ref); err != nil { + d.log.Info("failed to insert payload", "ref", ref, + "txs", len(x.Envelope.ExecutionPayload.Transactions), "err", err) + // yes, duplicate error-handling. After all derivers are interacting with the engine + // through events, we can drop the engine-controller interface: + // unify the events handler with the engine-controller, + // remove a lot of code, and not do this error translation. + if errors.Is(err, derive.ErrReset) { + d.emitter.Emit(rollup.ResetEvent{Err: err}) + } else if errors.Is(err, derive.ErrTemporary) { + d.emitter.Emit(rollup.EngineTemporaryErrorEvent{Err: err}) + } else { + d.emitter.Emit(rollup.CriticalErrorEvent{Err: fmt.Errorf("unexpected InsertUnsafePayload error type: %w", err)}) + } + } else { + d.log.Info("successfully processed payload", "ref", ref, "txs", len(x.Envelope.ExecutionPayload.Transactions)) + } + case ForkchoiceRequestEvent: + d.emitter.Emit(ForkchoiceUpdateEvent{ + UnsafeL2Head: d.ec.UnsafeL2Head(), + SafeL2Head: d.ec.SafeL2Head(), + FinalizedL2Head: d.ec.Finalized(), + }) } } diff --git a/op-node/rollup/events.go b/op-node/rollup/events.go index d973afdd59ef..037c68dbacc8 100644 --- a/op-node/rollup/events.go +++ b/op-node/rollup/events.go @@ -80,3 +80,7 @@ type DeriverFunc func(ev Event) func (fn DeriverFunc) OnEvent(ev Event) { fn(ev) } + +type NoopEmitter struct{} + +func (e NoopEmitter) Emit(ev Event) {} diff --git a/op-node/rollup/driver/synchronous.go b/op-node/rollup/synchronous.go similarity index 86% rename from op-node/rollup/driver/synchronous.go rename to op-node/rollup/synchronous.go index fa752cab5510..2fd85a417863 100644 --- a/op-node/rollup/driver/synchronous.go +++ b/op-node/rollup/synchronous.go @@ -1,12 +1,10 @@ -package driver +package rollup import ( "context" "sync" "github.com/ethereum/go-ethereum/log" - - "github.com/ethereum-optimism/optimism/op-node/rollup" ) // Don't queue up an endless number of events. @@ -23,16 +21,16 @@ type SynchronousEvents struct { // if this util is used in a concurrent context. evLock sync.Mutex - events []rollup.Event + events []Event log log.Logger ctx context.Context - root rollup.Deriver + root Deriver } -func NewSynchronousEvents(log log.Logger, ctx context.Context, root rollup.Deriver) *SynchronousEvents { +func NewSynchronousEvents(log log.Logger, ctx context.Context, root Deriver) *SynchronousEvents { return &SynchronousEvents{ log: log, ctx: ctx, @@ -40,7 +38,7 @@ func NewSynchronousEvents(log log.Logger, ctx context.Context, root rollup.Deriv } } -func (s *SynchronousEvents) Emit(event rollup.Event) { +func (s *SynchronousEvents) Emit(event Event) { s.evLock.Lock() defer s.evLock.Unlock() @@ -75,4 +73,4 @@ func (s *SynchronousEvents) Drain() error { } } -var _ rollup.EventEmitter = (*SynchronousEvents)(nil) +var _ EventEmitter = (*SynchronousEvents)(nil) diff --git a/op-node/rollup/driver/synchronous_test.go b/op-node/rollup/synchronous_test.go similarity index 86% rename from op-node/rollup/driver/synchronous_test.go rename to op-node/rollup/synchronous_test.go index bc8732fe9eb8..191b4f4246a2 100644 --- a/op-node/rollup/driver/synchronous_test.go +++ b/op-node/rollup/synchronous_test.go @@ -1,4 +1,4 @@ -package driver +package rollup import ( "context" @@ -8,21 +8,14 @@ import ( "github.com/ethereum/go-ethereum/log" - "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-service/testlog" ) -type TestEvent struct{} - -func (ev TestEvent) String() string { - return "X" -} - func TestSynchronousEvents(t *testing.T) { logger := testlog.Logger(t, log.LevelError) ctx, cancel := context.WithCancel(context.Background()) count := 0 - deriver := rollup.DeriverFunc(func(ev rollup.Event) { + deriver := DeriverFunc(func(ev Event) { count += 1 }) syncEv := NewSynchronousEvents(logger, ctx, deriver) @@ -48,7 +41,7 @@ func TestSynchronousEvents(t *testing.T) { func TestSynchronousEventsSanityLimit(t *testing.T) { logger := testlog.Logger(t, log.LevelError) count := 0 - deriver := rollup.DeriverFunc(func(ev rollup.Event) { + deriver := DeriverFunc(func(ev Event) { count += 1 }) syncEv := NewSynchronousEvents(logger, context.Background(), deriver) @@ -74,9 +67,9 @@ func (ev CyclicEvent) String() string { func TestSynchronousCyclic(t *testing.T) { logger := testlog.Logger(t, log.LevelError) - var emitter rollup.EventEmitter + var emitter EventEmitter result := false - deriver := rollup.DeriverFunc(func(ev rollup.Event) { + deriver := DeriverFunc(func(ev Event) { logger.Info("received event", "event", ev) switch x := ev.(type) { case CyclicEvent: diff --git a/op-program/client/driver/driver.go b/op-program/client/driver/driver.go index f533865e96dc..7d2235c3a45e 100644 --- a/op-program/client/driver/driver.go +++ b/op-program/client/driver/driver.go @@ -101,7 +101,7 @@ type Driver struct { } func NewDriver(logger log.Logger, cfg *rollup.Config, l1Source derive.L1Fetcher, l1BlobsSource derive.L1BlobsFetcher, l2Source L2Source, targetBlockNum uint64) *Driver { - engine := engine.NewEngineController(l2Source, logger, metrics.NoopMetrics, cfg, sync.CLSync) + engine := engine.NewEngineController(l2Source, logger, metrics.NoopMetrics, cfg, sync.CLSync, rollup.NoopEmitter{}) attributesHandler := attributes.NewAttributesHandler(logger, cfg, engine, l2Source) syncCfg := &sync.Config{SyncMode: sync.CLSync} pipeline := derive.NewDerivationPipeline(logger, cfg, l1Source, l1BlobsSource, plasma.Disabled, l2Source, metrics.NoopMetrics) diff --git a/op-service/testutils/mock_emitter.go b/op-service/testutils/mock_emitter.go new file mode 100644 index 000000000000..e808c651053e --- /dev/null +++ b/op-service/testutils/mock_emitter.go @@ -0,0 +1,25 @@ +package testutils + +import ( + "github.com/stretchr/testify/mock" + + "github.com/ethereum-optimism/optimism/op-node/rollup" +) + +type MockEmitter struct { + mock.Mock +} + +func (m *MockEmitter) Emit(ev rollup.Event) { + m.Mock.MethodCalled("Emit", ev) +} + +func (m *MockEmitter) ExpectOnce(expected rollup.Event) { + m.Mock.On("Emit", expected).Once() +} + +func (m *MockEmitter) AssertExpectations(t mock.TestingT) { + m.Mock.AssertExpectations(t) +} + +var _ rollup.EventEmitter = (*MockEmitter)(nil) From 258a480dab5bb893ad30f0fe96c2861b1132e644 Mon Sep 17 00:00:00 2001 From: protolambda Date: Wed, 19 Jun 2024 16:22:26 -0600 Subject: [PATCH 071/141] op-program: encapsulate ValidateClaim (#10960) --- op-e2e/system_fpp_test.go | 18 ++-- op-program/client/claim/validate.go | 34 +++++++ op-program/client/claim/validate_test.go | 113 +++++++++++++++++++++++ op-program/client/driver/driver.go | 15 --- op-program/client/driver/driver_test.go | 57 ------------ op-program/client/program.go | 5 +- 6 files changed, 160 insertions(+), 82 deletions(-) create mode 100644 op-program/client/claim/validate.go create mode 100644 op-program/client/claim/validate_test.go diff --git a/op-e2e/system_fpp_test.go b/op-e2e/system_fpp_test.go index 4da5f75ca51c..635276fe159a 100644 --- a/op-e2e/system_fpp_test.go +++ b/op-e2e/system_fpp_test.go @@ -6,20 +6,22 @@ import ( "testing" "time" + "github.com/stretchr/testify/require" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rpc" + "github.com/ethereum-optimism/optimism/op-chain-ops/genesis" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/geth" - "github.com/ethereum-optimism/optimism/op-program/client/driver" + "github.com/ethereum-optimism/optimism/op-program/client/claim" opp "github.com/ethereum-optimism/optimism/op-program/host" oppconf "github.com/ethereum-optimism/optimism/op-program/host/config" "github.com/ethereum-optimism/optimism/op-service/client" "github.com/ethereum-optimism/optimism/op-service/sources" "github.com/ethereum-optimism/optimism/op-service/testlog" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/rpc" - "github.com/stretchr/testify/require" ) func TestVerifyL2OutputRoot(t *testing.T) { @@ -320,7 +322,7 @@ func testFaultProofProgramScenario(t *testing.T, ctx context.Context, sys *Syste if s.Detached { require.Error(t, err, "exit status 1") } else { - require.ErrorIs(t, err, driver.ErrClaimNotValid) + require.ErrorIs(t, err, claim.ErrClaimNotValid) } } diff --git a/op-program/client/claim/validate.go b/op-program/client/claim/validate.go new file mode 100644 index 000000000000..05655208c6e7 --- /dev/null +++ b/op-program/client/claim/validate.go @@ -0,0 +1,34 @@ +package claim + +import ( + "context" + "errors" + "fmt" + + "github.com/ethereum/go-ethereum/log" + + "github.com/ethereum-optimism/optimism/op-service/eth" +) + +var ErrClaimNotValid = errors.New("invalid claim") + +type L2Source interface { + L2BlockRefByLabel(ctx context.Context, label eth.BlockLabel) (eth.L2BlockRef, error) + L2OutputRoot(uint64) (eth.Bytes32, error) +} + +func ValidateClaim(log log.Logger, l2ClaimBlockNum uint64, claimedOutputRoot eth.Bytes32, src L2Source) error { + l2Head, err := src.L2BlockRefByLabel(context.Background(), eth.Safe) + if err != nil { + return fmt.Errorf("cannot retrieve safe head: %w", err) + } + outputRoot, err := src.L2OutputRoot(min(l2ClaimBlockNum, l2Head.Number)) + if err != nil { + return fmt.Errorf("calculate L2 output root: %w", err) + } + log.Info("Validating claim", "head", l2Head, "output", outputRoot, "claim", claimedOutputRoot) + if claimedOutputRoot != outputRoot { + return fmt.Errorf("%w: claim: %v actual: %v", ErrClaimNotValid, claimedOutputRoot, outputRoot) + } + return nil +} diff --git a/op-program/client/claim/validate_test.go b/op-program/client/claim/validate_test.go new file mode 100644 index 000000000000..c8a9b263eba5 --- /dev/null +++ b/op-program/client/claim/validate_test.go @@ -0,0 +1,113 @@ +package claim + +import ( + "context" + "errors" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/ethereum/go-ethereum/log" + + "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/ethereum-optimism/optimism/op-service/testlog" +) + +type mockL2 struct { + safeL2 eth.L2BlockRef + safeL2Err error + + outputRoot eth.Bytes32 + outputRootErr error + + requestedOutputRoot uint64 +} + +func (m *mockL2) L2BlockRefByLabel(ctx context.Context, label eth.BlockLabel) (eth.L2BlockRef, error) { + if label != eth.Safe { + panic("unexpected usage") + } + if m.safeL2Err != nil { + return eth.L2BlockRef{}, m.safeL2Err + } + return m.safeL2, nil +} + +func (m *mockL2) L2OutputRoot(u uint64) (eth.Bytes32, error) { + m.requestedOutputRoot = u + if m.outputRootErr != nil { + return eth.Bytes32{}, m.outputRootErr + } + return m.outputRoot, nil +} + +var _ L2Source = (*mockL2)(nil) + +func TestValidateClaim(t *testing.T) { + t.Run("Valid", func(t *testing.T) { + expected := eth.Bytes32{0x11} + l2 := &mockL2{ + outputRoot: expected, + } + logger := testlog.Logger(t, log.LevelError) + err := ValidateClaim(logger, uint64(0), expected, l2) + require.NoError(t, err) + }) + + t.Run("Valid-PriorToSafeHead", func(t *testing.T) { + expected := eth.Bytes32{0x11} + l2 := &mockL2{ + outputRoot: expected, + safeL2: eth.L2BlockRef{ + Number: 10, + }, + } + logger := testlog.Logger(t, log.LevelError) + err := ValidateClaim(logger, uint64(20), expected, l2) + require.NoError(t, err) + require.Equal(t, uint64(10), l2.requestedOutputRoot) + }) + + t.Run("Invalid", func(t *testing.T) { + l2 := &mockL2{ + outputRoot: eth.Bytes32{0x22}, + } + logger := testlog.Logger(t, log.LevelError) + err := ValidateClaim(logger, uint64(0), eth.Bytes32{0x11}, l2) + require.ErrorIs(t, err, ErrClaimNotValid) + }) + + t.Run("Invalid-PriorToSafeHead", func(t *testing.T) { + l2 := &mockL2{ + outputRoot: eth.Bytes32{0x22}, + safeL2: eth.L2BlockRef{Number: 10}, + } + logger := testlog.Logger(t, log.LevelError) + err := ValidateClaim(logger, uint64(20), eth.Bytes32{0x55}, l2) + require.ErrorIs(t, err, ErrClaimNotValid) + require.Equal(t, uint64(10), l2.requestedOutputRoot) + }) + + t.Run("Error-safe-head", func(t *testing.T) { + expectedErr := errors.New("boom") + l2 := &mockL2{ + outputRoot: eth.Bytes32{0x11}, + safeL2: eth.L2BlockRef{Number: 10}, + safeL2Err: expectedErr, + } + logger := testlog.Logger(t, log.LevelError) + err := ValidateClaim(logger, uint64(0), eth.Bytes32{0x11}, l2) + require.ErrorIs(t, err, expectedErr) + }) + t.Run("Error-output-root", func(t *testing.T) { + expectedErr := errors.New("boom") + l2 := &mockL2{ + outputRoot: eth.Bytes32{0x11}, + outputRootErr: expectedErr, + safeL2: eth.L2BlockRef{Number: 10}, + } + logger := testlog.Logger(t, log.LevelError) + err := ValidateClaim(logger, uint64(0), eth.Bytes32{0x11}, l2) + require.ErrorIs(t, err, expectedErr) + }) +} diff --git a/op-program/client/driver/driver.go b/op-program/client/driver/driver.go index 7d2235c3a45e..bbeeb99bba29 100644 --- a/op-program/client/driver/driver.go +++ b/op-program/client/driver/driver.go @@ -19,8 +19,6 @@ import ( "github.com/ethereum-optimism/optimism/op-service/eth" ) -var ErrClaimNotValid = errors.New("invalid claim") - type Derivation interface { Step(ctx context.Context) error } @@ -154,16 +152,3 @@ func (d *Driver) Step(ctx context.Context) error { func (d *Driver) SafeHead() eth.L2BlockRef { return d.deriver.SafeL2Head() } - -func (d *Driver) ValidateClaim(l2ClaimBlockNum uint64, claimedOutputRoot eth.Bytes32) error { - l2Head := d.SafeHead() - outputRoot, err := d.l2OutputRoot(min(l2ClaimBlockNum, l2Head.Number)) - if err != nil { - return fmt.Errorf("calculate L2 output root: %w", err) - } - d.logger.Info("Validating claim", "head", l2Head, "output", outputRoot, "claim", claimedOutputRoot) - if claimedOutputRoot != outputRoot { - return fmt.Errorf("%w: claim: %v actual: %v", ErrClaimNotValid, claimedOutputRoot, outputRoot) - } - return nil -} diff --git a/op-program/client/driver/driver_test.go b/op-program/client/driver/driver_test.go index d61484020289..23516696bc8d 100644 --- a/op-program/client/driver/driver_test.go +++ b/op-program/client/driver/driver_test.go @@ -69,63 +69,6 @@ func TestNoError(t *testing.T) { require.NoError(t, err) } -func TestValidateClaim(t *testing.T) { - t.Run("Valid", func(t *testing.T) { - driver := createDriver(t, io.EOF) - expected := eth.Bytes32{0x11} - driver.l2OutputRoot = func(_ uint64) (eth.Bytes32, error) { - return expected, nil - } - err := driver.ValidateClaim(uint64(0), expected) - require.NoError(t, err) - }) - - t.Run("Valid-PriorToSafeHead", func(t *testing.T) { - driver := createDriverWithNextBlock(t, io.EOF, 10) - expected := eth.Bytes32{0x11} - requestedOutputRoot := uint64(0) - driver.l2OutputRoot = func(blockNum uint64) (eth.Bytes32, error) { - requestedOutputRoot = blockNum - return expected, nil - } - err := driver.ValidateClaim(uint64(20), expected) - require.NoError(t, err) - require.Equal(t, uint64(10), requestedOutputRoot) - }) - - t.Run("Invalid", func(t *testing.T) { - driver := createDriver(t, io.EOF) - driver.l2OutputRoot = func(_ uint64) (eth.Bytes32, error) { - return eth.Bytes32{0x22}, nil - } - err := driver.ValidateClaim(uint64(0), eth.Bytes32{0x11}) - require.ErrorIs(t, err, ErrClaimNotValid) - }) - - t.Run("Invalid-PriorToSafeHead", func(t *testing.T) { - driver := createDriverWithNextBlock(t, io.EOF, 10) - expected := eth.Bytes32{0x11} - requestedOutputRoot := uint64(0) - driver.l2OutputRoot = func(blockNum uint64) (eth.Bytes32, error) { - requestedOutputRoot = blockNum - return expected, nil - } - err := driver.ValidateClaim(uint64(20), eth.Bytes32{0x55}) - require.ErrorIs(t, err, ErrClaimNotValid) - require.Equal(t, uint64(10), requestedOutputRoot) - }) - - t.Run("Error", func(t *testing.T) { - driver := createDriver(t, io.EOF) - expectedErr := errors.New("boom") - driver.l2OutputRoot = func(_ uint64) (eth.Bytes32, error) { - return eth.Bytes32{}, expectedErr - } - err := driver.ValidateClaim(uint64(0), eth.Bytes32{0x11}) - require.ErrorIs(t, err, expectedErr) - }) -} - func createDriver(t *testing.T, derivationResult error) *Driver { return createDriverWithNextBlock(t, derivationResult, 0) } diff --git a/op-program/client/program.go b/op-program/client/program.go index a471941f2005..d9c3531c4652 100644 --- a/op-program/client/program.go +++ b/op-program/client/program.go @@ -13,6 +13,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/rollup" preimage "github.com/ethereum-optimism/optimism/op-preimage" + "github.com/ethereum-optimism/optimism/op-program/client/claim" cldr "github.com/ethereum-optimism/optimism/op-program/client/driver" "github.com/ethereum-optimism/optimism/op-program/client/l1" "github.com/ethereum-optimism/optimism/op-program/client/l2" @@ -26,7 +27,7 @@ func Main(logger log.Logger) { log.Info("Starting fault proof program client") preimageOracle := CreatePreimageChannel() preimageHinter := CreateHinterChannel() - if err := RunProgram(logger, preimageOracle, preimageHinter); errors.Is(err, cldr.ErrClaimNotValid) { + if err := RunProgram(logger, preimageOracle, preimageHinter); errors.Is(err, claim.ErrClaimNotValid) { log.Error("Claim is invalid", "err", err) os.Exit(1) } else if err != nil { @@ -79,7 +80,7 @@ func runDerivation(logger log.Logger, cfg *rollup.Config, l2Cfg *params.ChainCon return err } } - return d.ValidateClaim(l2ClaimBlockNum, eth.Bytes32(l2Claim)) + return claim.ValidateClaim(logger, l2ClaimBlockNum, eth.Bytes32(l2Claim), l2Source) } func CreateHinterChannel() oppio.FileChannel { From 2d0e83a9f01522a7e12868a770b18819103de19e Mon Sep 17 00:00:00 2001 From: protolambda Date: Wed, 19 Jun 2024 17:10:27 -0600 Subject: [PATCH 072/141] op-node: reset engine through events (#10961) --- op-e2e/actions/l2_verifier.go | 2 + op-node/rollup/driver/driver.go | 2 + op-node/rollup/driver/state.go | 38 +++++++++-- op-node/rollup/engine/engine_reset.go | 94 +++++++++++---------------- op-node/rollup/engine/events.go | 45 +++++++++++++ op-program/client/driver/driver.go | 13 +++- 6 files changed, 130 insertions(+), 64 deletions(-) diff --git a/op-e2e/actions/l2_verifier.go b/op-e2e/actions/l2_verifier.go index 5672db1286f0..073886f93522 100644 --- a/op-e2e/actions/l2_verifier.go +++ b/op-e2e/actions/l2_verifier.go @@ -90,6 +90,7 @@ func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc deri metrics := &testutils.TestDerivationMetrics{} ec := engine.NewEngineController(eng, log, metrics, cfg, syncCfg.SyncMode, synchronousEvents) + engineResetDeriver := engine.NewEngineResetDeriver(ctx, log, cfg, l1, eng, syncCfg, synchronousEvents) clSync := clsync.NewCLSync(log, cfg, metrics, synchronousEvents) @@ -144,6 +145,7 @@ func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc deri *rootDeriver = rollup.SynchronousDerivers{ syncDeriver, + engineResetDeriver, engDeriv, rollupNode, clSync, diff --git a/op-node/rollup/driver/driver.go b/op-node/rollup/driver/driver.go index 1701387c18c1..f71cf30bb805 100644 --- a/op-node/rollup/driver/driver.go +++ b/op-node/rollup/driver/driver.go @@ -181,6 +181,7 @@ func NewDriver( findL1Origin := NewL1OriginSelector(log, cfg, sequencerConfDepth) verifConfDepth := NewConfDepth(driverCfg.VerifierConfDepth, l1State.L1Head, l1) ec := engine.NewEngineController(l2, log, metrics, cfg, syncCfg.SyncMode, synchronousEvents) + engineResetDeriver := engine.NewEngineResetDeriver(driverCtx, log, cfg, l1, l2, syncCfg, synchronousEvents) clSync := clsync.NewCLSync(log, cfg, metrics, synchronousEvents) var finalizer Finalizer @@ -246,6 +247,7 @@ func NewDriver( *rootDeriver = []rollup.Deriver{ syncDeriver, + engineResetDeriver, engDeriv, schedDeriv, driver, diff --git a/op-node/rollup/driver/state.go b/op-node/rollup/driver/state.go index 93b78f875f41..b273d4fb7196 100644 --- a/op-node/rollup/driver/state.go +++ b/op-node/rollup/driver/state.go @@ -434,9 +434,40 @@ func (s *SyncDeriver) OnEvent(ev rollup.Event) { case rollup.EngineTemporaryErrorEvent: s.Log.Warn("Derivation process temporary error", "err", x.Err) s.Emitter.Emit(StepReqEvent{}) + case engine.EngineResetConfirmedEvent: + s.onEngineConfirmedReset(x) } } +func (s *SyncDeriver) onEngineConfirmedReset(x engine.EngineResetConfirmedEvent) { + // If the listener update fails, we return, + // and don't confirm the engine-reset with the derivation pipeline. + // The pipeline will re-trigger a reset as necessary. + if s.SafeHeadNotifs != nil { + if err := s.SafeHeadNotifs.SafeHeadReset(x.Safe); err != nil { + s.Log.Error("Failed to warn safe-head notifier of safe-head reset", "safe", x.Safe) + return + } + if s.SafeHeadNotifs.Enabled() && x.Safe.Number == s.Config.Genesis.L2.Number && x.Safe.Hash == s.Config.Genesis.L2.Hash { + // The rollup genesis block is always safe by definition. So if the pipeline resets this far back we know + // we will process all safe head updates and can record genesis as always safe from L1 genesis. + // Note that it is not safe to use cfg.Genesis.L1 here as it is the block immediately before the L2 genesis + // but the contracts may have been deployed earlier than that, allowing creating a dispute game + // with a L1 head prior to cfg.Genesis.L1 + l1Genesis, err := s.L1.L1BlockRefByNumber(s.Ctx, 0) + if err != nil { + s.Log.Error("Failed to retrieve L1 genesis, cannot notify genesis as safe block", "err", err) + return + } + if err := s.SafeHeadNotifs.SafeHeadUpdated(x.Safe, l1Genesis.ID()); err != nil { + s.Log.Error("Failed to notify safe-head listener of safe-head", "err", err) + return + } + } + } + s.Derivation.ConfirmEngineReset() +} + func (s *SyncDeriver) onStepEvent() { s.Log.Debug("Sync process step", "onto_origin", s.Derivation.Origin()) // Note: while we refactor the SyncStep to be entirely event-based we have an intermediate phase @@ -474,12 +505,7 @@ func (s *SyncDeriver) onResetEvent(x rollup.ResetEvent) { s.Derivation.Reset() s.Finalizer.Reset() s.Emitter.Emit(StepReqEvent{}) - if err := engine.ResetEngine(s.Ctx, s.Log, s.Config, s.Engine, s.L1, s.L2, s.SyncCfg, s.SafeHeadNotifs); err != nil { - s.Log.Error("Derivation pipeline not ready, failed to reset engine", "err", err) - // Derivation-pipeline will return a new ResetError until we confirm the engine has been successfully reset. - return - } - s.Derivation.ConfirmEngineReset() + s.Emitter.Emit(engine.ResetEngineRequestEvent{}) } type DeriverIdleEvent struct{} diff --git a/op-node/rollup/engine/engine_reset.go b/op-node/rollup/engine/engine_reset.go index 700e44e11c30..c0985d8ddb39 100644 --- a/op-node/rollup/engine/engine_reset.go +++ b/op-node/rollup/engine/engine_reset.go @@ -7,72 +7,54 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum-optimism/optimism/op-node/rollup" - "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" - "github.com/ethereum-optimism/optimism/op-service/eth" ) -type ResetL2 interface { - sync.L2Chain - derive.SystemConfigL2Fetcher -} +// ResetEngineRequestEvent requests the EngineResetDeriver to walk +// the L2 chain backwards until it finds a plausible unsafe head, +// and find an L2 safe block that is guaranteed to still be from the L1 chain. +type ResetEngineRequestEvent struct{} -type ResetEngineControl interface { - SetUnsafeHead(eth.L2BlockRef) - SetSafeHead(eth.L2BlockRef) - SetFinalizedHead(eth.L2BlockRef) +func (ev ResetEngineRequestEvent) String() string { + return "reset-engine-request" +} - SetBackupUnsafeL2Head(block eth.L2BlockRef, triggerReorg bool) - SetPendingSafeL2Head(eth.L2BlockRef) +type EngineResetDeriver struct { + ctx context.Context + log log.Logger + cfg *rollup.Config + l1 sync.L1Chain + l2 sync.L2Chain + syncCfg *sync.Config - ResetBuildingState() + emitter rollup.EventEmitter } -// ResetEngine walks the L2 chain backwards until it finds a plausible unsafe head, -// and an L2 safe block that is guaranteed to still be from the L1 chain. -func ResetEngine(ctx context.Context, log log.Logger, cfg *rollup.Config, ec ResetEngineControl, l1 sync.L1Chain, l2 ResetL2, syncCfg *sync.Config, safeHeadNotifs rollup.SafeHeadListener) error { - result, err := sync.FindL2Heads(ctx, cfg, l1, l2, log, syncCfg) - if err != nil { - return derive.NewTemporaryError(fmt.Errorf("failed to find the L2 Heads to start from: %w", err)) - } - finalized, safe, unsafe := result.Finalized, result.Safe, result.Unsafe - l1Origin, err := l1.L1BlockRefByHash(ctx, safe.L1Origin.Hash) - if err != nil { - return derive.NewTemporaryError(fmt.Errorf("failed to fetch the new L1 progress: origin: %v; err: %w", safe.L1Origin, err)) - } - if safe.Time < l1Origin.Time { - return derive.NewResetError(fmt.Errorf("cannot reset block derivation to start at L2 block %s with time %d older than its L1 origin %s with time %d, time invariant is broken", - safe, safe.Time, l1Origin, l1Origin.Time)) +func NewEngineResetDeriver(ctx context.Context, log log.Logger, cfg *rollup.Config, + l1 sync.L1Chain, l2 sync.L2Chain, syncCfg *sync.Config, emitter rollup.EventEmitter) *EngineResetDeriver { + return &EngineResetDeriver{ + ctx: ctx, + log: log, + cfg: cfg, + l1: l1, + l2: l2, + syncCfg: syncCfg, + emitter: emitter, } +} - ec.SetUnsafeHead(unsafe) - ec.SetSafeHead(safe) - ec.SetPendingSafeL2Head(safe) - ec.SetFinalizedHead(finalized) - ec.SetBackupUnsafeL2Head(eth.L2BlockRef{}, false) - ec.ResetBuildingState() - - log.Debug("Reset of Engine is completed", "safeHead", safe, "unsafe", unsafe, "safe_timestamp", safe.Time, - "unsafe_timestamp", unsafe.Time, "l1Origin", l1Origin) - - if safeHeadNotifs != nil { - if err := safeHeadNotifs.SafeHeadReset(safe); err != nil { - return err - } - if safeHeadNotifs.Enabled() && safe.Number == cfg.Genesis.L2.Number && safe.Hash == cfg.Genesis.L2.Hash { - // The rollup genesis block is always safe by definition. So if the pipeline resets this far back we know - // we will process all safe head updates and can record genesis as always safe from L1 genesis. - // Note that it is not safe to use cfg.Genesis.L1 here as it is the block immediately before the L2 genesis - // but the contracts may have been deployed earlier than that, allowing creating a dispute game - // with a L1 head prior to cfg.Genesis.L1 - l1Genesis, err := l1.L1BlockRefByNumber(ctx, 0) - if err != nil { - return fmt.Errorf("failed to retrieve L1 genesis: %w", err) - } - if err := safeHeadNotifs.SafeHeadUpdated(safe, l1Genesis.ID()); err != nil { - return err - } +func (d *EngineResetDeriver) OnEvent(ev rollup.Event) { + switch ev.(type) { + case ResetEngineRequestEvent: + result, err := sync.FindL2Heads(d.ctx, d.cfg, d.l1, d.l2, d.log, d.syncCfg) + if err != nil { + d.emitter.Emit(rollup.ResetEvent{Err: fmt.Errorf("failed to find the L2 Heads to start from: %w", err)}) + return } + d.emitter.Emit(ForceEngineResetEvent{ + Unsafe: result.Unsafe, + Safe: result.Safe, + Finalized: result.Finalized, + }) } - return nil } diff --git a/op-node/rollup/engine/events.go b/op-node/rollup/engine/events.go index 02dcbc40e332..9b0195819577 100644 --- a/op-node/rollup/engine/events.go +++ b/op-node/rollup/engine/events.go @@ -61,6 +61,22 @@ func (ev TryUpdateEngineEvent) String() string { return "try-update-engine" } +type ForceEngineResetEvent struct { + Unsafe, Safe, Finalized eth.L2BlockRef +} + +func (ev ForceEngineResetEvent) String() string { + return "force-engine-reset" +} + +type EngineResetConfirmedEvent struct { + Unsafe, Safe, Finalized eth.L2BlockRef +} + +func (ev EngineResetConfirmedEvent) String() string { + return "engine-reset-confirmed" +} + type EngDeriver struct { log log.Logger cfg *rollup.Config @@ -146,5 +162,34 @@ func (d *EngDeriver) OnEvent(ev rollup.Event) { SafeL2Head: d.ec.SafeL2Head(), FinalizedL2Head: d.ec.Finalized(), }) + case ForceEngineResetEvent: + ForceEngineReset(d.ec, x) + + // Time to apply the changes to the underlying engine + d.emitter.Emit(TryUpdateEngineEvent{}) + + log.Debug("Reset of Engine is completed", + "safeHead", x.Safe, "unsafe", x.Unsafe, "safe_timestamp", x.Safe.Time, + "unsafe_timestamp", x.Unsafe.Time) + d.emitter.Emit(EngineResetConfirmedEvent{}) } } + +type ResetEngineControl interface { + SetUnsafeHead(eth.L2BlockRef) + SetSafeHead(eth.L2BlockRef) + SetFinalizedHead(eth.L2BlockRef) + SetBackupUnsafeL2Head(block eth.L2BlockRef, triggerReorg bool) + SetPendingSafeL2Head(eth.L2BlockRef) + ResetBuildingState() +} + +// ForceEngineReset is not to be used. The op-program needs it for now, until event processing is adopted there. +func ForceEngineReset(ec ResetEngineControl, x ForceEngineResetEvent) { + ec.SetUnsafeHead(x.Unsafe) + ec.SetSafeHead(x.Safe) + ec.SetPendingSafeL2Head(x.Safe) + ec.SetFinalizedHead(x.Finalized) + ec.SetBackupUnsafeL2Head(eth.L2BlockRef{}, false) + ec.ResetBuildingState() +} diff --git a/op-program/client/driver/driver.go b/op-program/client/driver/driver.go index bbeeb99bba29..a5849bdb7842 100644 --- a/op-program/client/driver/driver.go +++ b/op-program/client/driver/driver.go @@ -66,9 +66,18 @@ func (d *MinimalSyncDeriver) SyncStep(ctx context.Context) error { if err := d.engine.TryUpdateEngine(ctx); !errors.Is(err, engine.ErrNoFCUNeeded) { return err } - if err := engine.ResetEngine(ctx, d.logger, d.cfg, d.engine, d.l1Source, d.l2Source, d.syncCfg, nil); err != nil { - return err + // The below two calls emulate ResetEngine, without event-processing. + // This will be omitted after op-program adopts events, and the deriver code is used instead. + result, err := sync.FindL2Heads(ctx, d.cfg, d.l1Source, d.l2Source, d.logger, d.syncCfg) + if err != nil { + // not really a temporary error in this context, but preserves old ResetEngine behavior. + return derive.NewTemporaryError(fmt.Errorf("failed to determine starting point: %w", err)) } + engine.ForceEngineReset(d.engine, engine.ForceEngineResetEvent{ + Unsafe: result.Unsafe, + Safe: result.Safe, + Finalized: result.Finalized, + }) d.pipeline.ConfirmEngineReset() d.initialResetDone = true } From 8b305af815353606c2d571a2ac6a76121e5e791e Mon Sep 17 00:00:00 2001 From: Sebastian Stammler Date: Thu, 20 Jun 2024 02:18:06 +0200 Subject: [PATCH 073/141] tag-service: add da-server (#10949) --- ops/tag-service/tag-service.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ops/tag-service/tag-service.py b/ops/tag-service/tag-service.py index 9ed48456426d..319c997eb858 100755 --- a/ops/tag-service/tag-service.py +++ b/ops/tag-service/tag-service.py @@ -12,6 +12,7 @@ 'ci-builder': '0.6.0', 'ci-builder-rust': '0.1.0', 'chain-mon': '0.2.2', + 'da-server': '0.0.4', 'op-node': '0.10.14', 'op-batcher': '0.10.14', 'op-challenger': '0.0.4', From ebf05d42bb8afe02da5181cacc095518b4ff6d52 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Jun 2024 18:18:36 -0600 Subject: [PATCH 074/141] build(deps): bump curve25519-dalek in /op-service/rethdb-reader (#10946) Bumps [curve25519-dalek](https://github.com/dalek-cryptography/curve25519-dalek) from 4.1.2 to 4.1.3. - [Release notes](https://github.com/dalek-cryptography/curve25519-dalek/releases) - [Commits](https://github.com/dalek-cryptography/curve25519-dalek/compare/curve25519-4.1.2...curve25519-4.1.3) --- updated-dependencies: - dependency-name: curve25519-dalek dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- op-service/rethdb-reader/Cargo.lock | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/op-service/rethdb-reader/Cargo.lock b/op-service/rethdb-reader/Cargo.lock index 5b4c003d5b0c..0b66063c3372 100644 --- a/op-service/rethdb-reader/Cargo.lock +++ b/op-service/rethdb-reader/Cargo.lock @@ -1020,16 +1020,15 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "4.1.2" +version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a677b8922c94e01bdbb12126b0bc852f00447528dee1782229af9c720c3f348" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", "cpufeatures", "curve25519-dalek-derive", "digest 0.10.7", "fiat-crypto", - "platforms", "rustc_version 0.4.0", "subtle", "zeroize", @@ -2650,12 +2649,6 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" -[[package]] -name = "platforms" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" - [[package]] name = "polyval" version = "0.5.3" From 8e98792373ba0f346fcc687d2c5931a0e61dfb7f Mon Sep 17 00:00:00 2001 From: Ayene <2958807+ayenesimo1i@users.noreply.github.com> Date: Thu, 20 Jun 2024 04:18:27 +0300 Subject: [PATCH 075/141] add community to README (#10951) --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 909d7c2eb3bc..b8f0ca0fcd9e 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,11 @@ In this repository you'll find numerous core components of the OP Stack, the dec Detailed specifications for the OP Stack can be found within the [OP Stack Specs](https://github.com/ethereum-optimism/specs) repository. +## Community + +General discussion happens most frequently on the [Optimism discord](https://discord.gg/optimism). +Governance discussion can also be found on the [Optimism Governance Forum](https://gov.optimism.io/). + ## Contributing The OP Stack is a collaborative project. By collaborating on free, open software and shared standards, the Optimism Collective aims to prevent siloed software development and rapidly accelerate the development of the Ethereum ecosystem. Come contribute, build the future, and redefine power, together. From 9e68cb0e8dafec012364f620765d2812ee82756b Mon Sep 17 00:00:00 2001 From: smartcontracts Date: Wed, 19 Jun 2024 23:07:01 -0400 Subject: [PATCH 076/141] maint: remove drippie-mon (#10945) Drippie monitoring is now handled in monitorism. --- .github/workflows/release-docker-canary.yml | 28 --- .github/workflows/release.yml | 28 --- ops/docker/Dockerfile.packages | 4 - packages/chain-mon/.env.example | 10 - packages/chain-mon/README.md | 4 +- .../chain-mon/contrib/drippie-mon/service.ts | 193 ------------------ packages/chain-mon/package.json | 2 - packages/chain-mon/src/index.ts | 1 - 8 files changed, 2 insertions(+), 268 deletions(-) delete mode 100644 packages/chain-mon/contrib/drippie-mon/service.ts diff --git a/.github/workflows/release-docker-canary.yml b/.github/workflows/release-docker-canary.yml index d9ccbc8edb78..2f82cbdbc7a0 100644 --- a/.github/workflows/release-docker-canary.yml +++ b/.github/workflows/release-docker-canary.yml @@ -16,7 +16,6 @@ jobs: # map the step outputs to job outputs outputs: balance-mon: ${{ steps.packages.outputs.balance-mon }} - drippie-mon: ${{ steps.packages.outputs.drippie-mon }} fault-mon: ${{ steps.packages.outputs.fault-mon }} multisig-mon: ${{ steps.packages.outputs.multisig-mon }} replica-mon: ${{ steps.packages.outputs.replica-mon }} @@ -123,33 +122,6 @@ jobs: push: true tags: ethereumoptimism/multisig-mon:${{ needs.canary-publish.outputs.canary-docker-tag }} - drippie-mon: - name: Publish Drippie Monitor Version ${{ needs.canary-publish.outputs.canary-docker-tag }} - needs: canary-publish - if: needs.canary-publish.outputs.drippie-mon != '' - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_USERNAME }} - password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_SECRET }} - - - name: Build and push - uses: docker/build-push-action@v6 - with: - context: . - file: ./ops/docker/Dockerfile.packages - target: drippie-mon - push: true - tags: ethereumoptimism/drippie-mon:${{ needs.canary-publish.outputs.canary-docker-tag }} - wd-mon: name: Publish Withdrawal Monitor Version ${{ needs.canary-publish.outputs.canary-docker-tag }} needs: canary-publish diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e9b476649dab..d51706dc6e9e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,7 +17,6 @@ jobs: # map the step outputs to job outputs outputs: balance-mon: ${{ steps.packages.outputs.balance-mon }} - drippie-mon: ${{ steps.packages.outputs.drippie-mon }} fault-mon: ${{ steps.packages.outputs.fault-mon }} multisig-mon: ${{ steps.packages.outputs.multisig-mon }} replica-mon: ${{ steps.packages.outputs.replica-mon }} @@ -187,33 +186,6 @@ jobs: push: true tags: ethereumoptimism/multisig-mon:${{ needs.release.outputs.multisig-mon }},ethereumoptimism/multisig-mon:latest - drippie-mon: - name: Publish Drippie Monitor Version ${{ needs.release.outputs.drippie-mon }} - needs: release - if: needs.release.outputs.drippie-mon != '' - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_USERNAME }} - password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_SECRET }} - - - name: Build and push - uses: docker/build-push-action@v6 - with: - context: . - file: ./ops/docker/Dockerfile.packages - target: drippie-mon - push: true - tags: ethereumoptimism/drippie-mon:${{ needs.release.outputs.drippie-mon }},ethereumoptimism/drippie-mon:latest - replica-mon: name: Publish Replica Healthcheck Version ${{ needs.release.outputs.replica-mon }} needs: release diff --git a/ops/docker/Dockerfile.packages b/ops/docker/Dockerfile.packages index c61b533e1835..224a748fc56c 100644 --- a/ops/docker/Dockerfile.packages +++ b/ops/docker/Dockerfile.packages @@ -98,10 +98,6 @@ FROM base as balance-mon WORKDIR /opt/optimism/packages/chain-mon/internal CMD ["start:balance-mon"] -FROM base as drippie-mon -WORKDIR /opt/optimism/packages/chain-mon/contrib -CMD ["start:drippie-mon"] - from base as fault-mon WORKDIR /opt/optimism/packages/chain-mon/ CMD ["start:fault-mon"] diff --git a/packages/chain-mon/.env.example b/packages/chain-mon/.env.example index 0e10b0aaf530..07fbfc985693 100644 --- a/packages/chain-mon/.env.example +++ b/packages/chain-mon/.env.example @@ -31,16 +31,6 @@ WALLET_MON__RPC= # Defaults to the first bedrock block if unset. WALLET_MON__START_BLOCK_NUMBER= -############################################################################### -# ↓ drippie-mon ↓ # -############################################################################### - -# RPC pointing to network where Drippie is deployed -DRIPPIE_MON__RPC= - -# Address of the Drippie contract -DRIPPIE_MON__DRIPPIE_ADDRESS= - ############################################################################### # ↓ wd-mon ↓ # ############################################################################### diff --git a/packages/chain-mon/README.md b/packages/chain-mon/README.md index 2a7a74c72eb9..28ab6ffdf4ee 100644 --- a/packages/chain-mon/README.md +++ b/packages/chain-mon/README.md @@ -23,8 +23,8 @@ Once your environment variables have been set, run via: pnpm start: ``` -For example, to run `drippie-mon`, execute: +For example, to run `balance-mon`, execute: ``` -pnpm start:drippie-mon +pnpm start:balance-mon ``` diff --git a/packages/chain-mon/contrib/drippie-mon/service.ts b/packages/chain-mon/contrib/drippie-mon/service.ts deleted file mode 100644 index 3fc70181872d..000000000000 --- a/packages/chain-mon/contrib/drippie-mon/service.ts +++ /dev/null @@ -1,193 +0,0 @@ -import { - BaseServiceV2, - StandardOptions, - Gauge, - Counter, - validators, -} from '@eth-optimism/common-ts' -import { Provider } from '@ethersproject/abstract-provider' -import { ethers } from 'ethers' -import * as DrippieArtifact from '@eth-optimism/contracts-bedrock/forge-artifacts/Drippie.sol/Drippie.json' - -import { version } from '../../package.json' - -type DrippieMonOptions = { - rpc: Provider - drippieAddress: string -} - -type DrippieMonMetrics = { - isExecutable: Gauge - executedDripCount: Gauge - unexpectedRpcErrors: Counter -} - -type DrippieMonState = { - drippie: ethers.Contract -} - -export class DrippieMonService extends BaseServiceV2< - DrippieMonOptions, - DrippieMonMetrics, - DrippieMonState -> { - constructor(options?: Partial) { - super({ - version, - name: 'drippie-mon', - loop: true, - options: { - loopIntervalMs: 60_000, - ...options, - }, - optionsSpec: { - rpc: { - validator: validators.provider, - desc: 'Provider for network where Drippie is deployed', - }, - drippieAddress: { - validator: validators.str, - desc: 'Address of Drippie contract', - public: true, - }, - }, - metricsSpec: { - isExecutable: { - type: Gauge, - desc: 'Whether or not the drip is currently executable', - labels: ['name'], - }, - executedDripCount: { - type: Gauge, - desc: 'Number of times a drip has been executed', - labels: ['name'], - }, - unexpectedRpcErrors: { - type: Counter, - desc: 'Number of unexpected RPC errors', - labels: ['section', 'name'], - }, - }, - }) - } - - protected async init(): Promise { - this.state.drippie = new ethers.Contract( - this.options.drippieAddress, - DrippieArtifact.abi, - this.options.rpc - ) - } - - protected async main(): Promise { - let dripCreatedEvents: ethers.Event[] - try { - dripCreatedEvents = await this.state.drippie.queryFilter( - this.state.drippie.filters.DripCreated() - ) - } catch (err) { - this.logger.info(`got unexpected RPC error`, { - section: 'creations', - name: 'NULL', - err, - }) - - this.metrics.unexpectedRpcErrors.inc({ - section: 'creations', - name: 'NULL', - }) - - return - } - - // Not the most efficient thing in the world. Will end up making one request for every drip - // created. We don't expect there to be many drips, so this is fine for now. We can also cache - // and skip any archived drips to cut down on a few requests. Worth keeping an eye on this to - // see if it's a bottleneck. - for (const event of dripCreatedEvents) { - const name = event.args.name - - let drip: any - try { - drip = await this.state.drippie.drips(name) - } catch (err) { - this.logger.info(`got unexpected RPC error`, { - section: 'drips', - name, - err, - }) - - this.metrics.unexpectedRpcErrors.inc({ - section: 'drips', - name, - }) - - continue - } - - this.logger.info(`getting drip executable status`, { - name, - count: drip.count.toNumber(), - }) - - this.metrics.executedDripCount.set( - { - name, - }, - drip.count.toNumber() - ) - - let executable: boolean - try { - // To avoid making unnecessary RPC requests, filter out any drips that we don't expect to - // be executable right now. Only active drips (status = 2) and drips that are due to be - // executed are expected to be executable (but might not be based on the dripcheck). - if ( - drip.status === 2 && - drip.last.toNumber() + drip.config.interval.toNumber() < - Date.now() / 1000 - ) { - executable = await this.state.drippie.executable(name) - } else { - executable = false - } - } catch (err) { - // All reverts include the string "Drippie:", so we can check for that. - if (err.message.includes('Drippie:')) { - // Not executable yet. - executable = false - } else { - this.logger.info(`got unexpected RPC error`, { - section: 'executable', - name, - err, - }) - - this.metrics.unexpectedRpcErrors.inc({ - section: 'executable', - name, - }) - - continue - } - } - - this.logger.info(`got drip executable status`, { - name, - executable, - }) - - this.metrics.isExecutable.set( - { - name, - }, - executable ? 1 : 0 - ) - } - } -} - -if (require.main === module) { - const service = new DrippieMonService() - service.run() -} diff --git a/packages/chain-mon/package.json b/packages/chain-mon/package.json index 456639c9ccda..9ff9bf353382 100644 --- a/packages/chain-mon/package.json +++ b/packages/chain-mon/package.json @@ -10,7 +10,6 @@ ], "scripts": { "dev:balance-mon": "tsx watch ./internal/balance-mon/service.ts", - "dev:drippie-mon": "tsx watch ./contrib/drippie/service.ts", "dev:fault-mon": "tsx watch ./src/fault-mon/service.ts", "dev:multisig-mon": "tsx watch ./internal/multisig-mon/service.ts", "dev:replica-mon": "tsx watch ./contrib/replica-mon/service.ts", @@ -19,7 +18,6 @@ "dev:faultproof-wd-mon": "tsx ./src/faultproof-wd-mon/service.ts", "dev:initialized-upgraded-mon": "tsx watch ./contrib/initialized-upgraded-mon/service.ts", "start:balance-mon": "tsx ./internal/balance-mon/service.ts", - "start:drippie-mon": "tsx ./contrib/drippie/service.ts", "start:fault-mon": "tsx ./src/fault-mon/service.ts", "start:multisig-mon": "tsx ./internal/multisig-mon/service.ts", "start:replica-mon": "tsx ./contrib/replica-mon/service.ts", diff --git a/packages/chain-mon/src/index.ts b/packages/chain-mon/src/index.ts index 9f838b714b40..a322a2e0019f 100644 --- a/packages/chain-mon/src/index.ts +++ b/packages/chain-mon/src/index.ts @@ -1,5 +1,4 @@ export * from '../internal/balance-mon/service' -export * from '../contrib/drippie-mon/service' export * from './fault-mon/index' export * from '../internal/multisig-mon/service' export * from './wd-mon/service' From 72d57dc743cc1bcc3ac7b31805b5234f0787dfae Mon Sep 17 00:00:00 2001 From: protolambda Date: Thu, 20 Jun 2024 00:10:18 -0600 Subject: [PATCH 077/141] op-node: wrap derivation pipeline with event deriver (#10962) --- op-e2e/actions/l2_verifier.go | 4 +- op-node/rollup/derive/deriver.go | 98 ++++++++++++++++++++++++++++++++ op-node/rollup/driver/driver.go | 2 + op-node/rollup/driver/state.go | 46 ++++++--------- 4 files changed, 121 insertions(+), 29 deletions(-) create mode 100644 op-node/rollup/derive/deriver.go diff --git a/op-e2e/actions/l2_verifier.go b/op-e2e/actions/l2_verifier.go index 073886f93522..682a89db68e5 100644 --- a/op-e2e/actions/l2_verifier.go +++ b/op-e2e/actions/l2_verifier.go @@ -104,6 +104,7 @@ func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc deri attributesHandler := attributes.NewAttributesHandler(log, cfg, ec, eng) pipeline := derive.NewDerivationPipeline(log, cfg, l1, blobsSrc, plasmaSrc, eng, metrics) + pipelineDeriver := derive.NewPipelineDeriver(ctx, pipeline, synchronousEvents) syncDeriver := &driver.SyncDeriver{ Derivation: pipeline, @@ -149,6 +150,7 @@ func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc deri engDeriv, rollupNode, clSync, + pipelineDeriver, } t.Cleanup(rollupNode.rpc.Stop) @@ -298,7 +300,7 @@ func (s *L2Verifier) OnEvent(ev rollup.Event) { s.log.Warn("Derivation pipeline is being reset", "err", x.Err) case rollup.CriticalErrorEvent: panic(fmt.Errorf("derivation failed critically: %w", x.Err)) - case driver.DeriverIdleEvent: + case derive.DeriverIdleEvent: s.l2PipelineIdle = true } } diff --git a/op-node/rollup/derive/deriver.go b/op-node/rollup/derive/deriver.go new file mode 100644 index 000000000000..9d65599a5382 --- /dev/null +++ b/op-node/rollup/derive/deriver.go @@ -0,0 +1,98 @@ +package derive + +import ( + "context" + "errors" + "io" + + "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum-optimism/optimism/op-service/eth" +) + +type DeriverIdleEvent struct{} + +func (d DeriverIdleEvent) String() string { + return "derivation-idle" +} + +type DeriverMoreEvent struct{} + +func (d DeriverMoreEvent) String() string { + return "deriver-more" +} + +type ConfirmPipelineResetEvent struct{} + +func (d ConfirmPipelineResetEvent) String() string { + return "confirm-pipeline-reset" +} + +// DerivedAttributesEvent is emitted when new attributes are available to apply to the engine. +type DerivedAttributesEvent struct { + Attributes *AttributesWithParent +} + +func (ev DerivedAttributesEvent) String() string { + return "derived-attributes" +} + +type PipelineStepEvent struct { + PendingSafe eth.L2BlockRef +} + +func (ev PipelineStepEvent) String() string { + return "pipeline-step" +} + +type PipelineDeriver struct { + pipeline *DerivationPipeline + + ctx context.Context + + emitter rollup.EventEmitter +} + +func NewPipelineDeriver(ctx context.Context, pipeline *DerivationPipeline, emitter rollup.EventEmitter) *PipelineDeriver { + return &PipelineDeriver{ + pipeline: pipeline, + ctx: ctx, + emitter: emitter, + } +} + +func (d *PipelineDeriver) OnEvent(ev rollup.Event) { + switch x := ev.(type) { + case rollup.ResetEvent: + d.pipeline.Reset() + case PipelineStepEvent: + d.pipeline.log.Trace("Derivation pipeline step", "onto_origin", d.pipeline.Origin()) + attrib, err := d.pipeline.Step(d.ctx, x.PendingSafe) + if err == io.EOF { + d.pipeline.log.Debug("Derivation process went idle", "progress", d.pipeline.Origin(), "err", err) + d.emitter.Emit(DeriverIdleEvent{}) + } else if err != nil && errors.Is(err, EngineELSyncing) { + d.pipeline.log.Debug("Derivation process went idle because the engine is syncing", "progress", d.pipeline.Origin(), "err", err) + d.emitter.Emit(DeriverIdleEvent{}) + } else if err != nil && errors.Is(err, ErrReset) { + d.emitter.Emit(rollup.ResetEvent{Err: err}) + } else if err != nil && errors.Is(err, ErrTemporary) { + d.emitter.Emit(rollup.EngineTemporaryErrorEvent{Err: err}) + } else if err != nil && errors.Is(err, ErrCritical) { + d.emitter.Emit(rollup.CriticalErrorEvent{Err: err}) + } else if err != nil && errors.Is(err, NotEnoughData) { + // don't do a backoff for this error + d.emitter.Emit(DeriverMoreEvent{}) + } else if err != nil { + d.pipeline.log.Error("Derivation process error", "err", err) + d.emitter.Emit(rollup.EngineTemporaryErrorEvent{Err: err}) + } else { + if attrib != nil { + d.emitter.Emit(DerivedAttributesEvent{Attributes: attrib}) + } else { + d.emitter.Emit(DeriverMoreEvent{}) // continue with the next step if we can + } + } + case ConfirmPipelineResetEvent: + d.pipeline.ConfirmEngineReset() + } +} diff --git a/op-node/rollup/driver/driver.go b/op-node/rollup/driver/driver.go index f71cf30bb805..d7d0fbc7a53d 100644 --- a/op-node/rollup/driver/driver.go +++ b/op-node/rollup/driver/driver.go @@ -193,6 +193,7 @@ func NewDriver( attributesHandler := attributes.NewAttributesHandler(log, cfg, ec, l2) derivationPipeline := derive.NewDerivationPipeline(log, cfg, verifConfDepth, l1Blobs, plasma, l2, metrics) + pipelineDeriver := derive.NewPipelineDeriver(driverCtx, derivationPipeline, synchronousEvents) attrBuilder := derive.NewFetchingAttributesBuilder(cfg, l1, l2) meteredEngine := NewMeteredEngine(cfg, ec, metrics, log) // Only use the metered engine in the sequencer b/c it records sequencing metrics. sequencer := NewSequencer(log, cfg, meteredEngine, attrBuilder, findL1Origin, metrics) @@ -252,6 +253,7 @@ func NewDriver( schedDeriv, driver, clSync, + pipelineDeriver, } return driver diff --git a/op-node/rollup/driver/state.go b/op-node/rollup/driver/state.go index b273d4fb7196..0195c46d5c61 100644 --- a/op-node/rollup/driver/state.go +++ b/op-node/rollup/driver/state.go @@ -269,7 +269,7 @@ func (s *Driver) eventLoop() { // so, we don't need to receive the payload here _, err := s.sequencer.RunNextSequencerAction(s.driverCtx, s.asyncGossiper, s.sequencerConductor) if errors.Is(err, derive.ErrReset) { - s.Derivation.Reset() + s.Emitter.Emit(rollup.ResetEvent{}) } else if err != nil { s.log.Error("Sequencer critical error", "err", err) return @@ -436,6 +436,16 @@ func (s *SyncDeriver) OnEvent(ev rollup.Event) { s.Emitter.Emit(StepReqEvent{}) case engine.EngineResetConfirmedEvent: s.onEngineConfirmedReset(x) + case derive.DeriverIdleEvent: + // Once derivation is idle the system is healthy + // and we can wait for new inputs. No backoff necessary. + s.Emitter.Emit(ResetStepBackoffEvent{}) + case derive.DeriverMoreEvent: + // If there is more data to process, + // continue derivation quickly + s.Emitter.Emit(StepReqEvent{ResetBackoff: true}) + case derive.DerivedAttributesEvent: + s.AttributesHandler.SetAttributes(x.Attributes) } } @@ -465,22 +475,18 @@ func (s *SyncDeriver) onEngineConfirmedReset(x engine.EngineResetConfirmedEvent) } } } - s.Derivation.ConfirmEngineReset() + s.Emitter.Emit(derive.ConfirmPipelineResetEvent{}) } func (s *SyncDeriver) onStepEvent() { - s.Log.Debug("Sync process step", "onto_origin", s.Derivation.Origin()) + s.Log.Debug("Sync process step") // Note: while we refactor the SyncStep to be entirely event-based we have an intermediate phase // where some things are triggered through events, and some through this synchronous step function. // We just translate the results into their equivalent events, // to merge the error-handling with that of the new event-based system. err := s.SyncStep(s.Ctx) - if err == io.EOF { - s.Log.Debug("Derivation process went idle", "progress", s.Derivation.Origin(), "err", err) - s.Emitter.Emit(ResetStepBackoffEvent{}) - s.Emitter.Emit(DeriverIdleEvent{}) - } else if err != nil && errors.Is(err, derive.EngineELSyncing) { - s.Log.Debug("Derivation process went idle because the engine is syncing", "progress", s.Derivation.Origin(), "unsafe_head", s.Engine.UnsafeL2Head(), "err", err) + if err != nil && errors.Is(err, derive.EngineELSyncing) { + s.Log.Debug("Derivation process went idle because the engine is syncing", "unsafe_head", s.Engine.UnsafeL2Head(), "err", err) s.Emitter.Emit(ResetStepBackoffEvent{}) } else if err != nil && errors.Is(err, derive.ErrReset) { s.Emitter.Emit(rollup.ResetEvent{Err: err}) @@ -488,9 +494,6 @@ func (s *SyncDeriver) onStepEvent() { s.Emitter.Emit(rollup.EngineTemporaryErrorEvent{Err: err}) } else if err != nil && errors.Is(err, derive.ErrCritical) { s.Emitter.Emit(rollup.CriticalErrorEvent{Err: err}) - } else if err != nil && errors.Is(err, derive.NotEnoughData) { - // don't do a backoff for this error - s.Emitter.Emit(StepReqEvent{ResetBackoff: true}) } else if err != nil { s.Log.Error("Derivation process error", "err", err) s.Emitter.Emit(StepReqEvent{}) @@ -500,20 +503,13 @@ func (s *SyncDeriver) onStepEvent() { } func (s *SyncDeriver) onResetEvent(x rollup.ResetEvent) { - // If the pipeline corrupts, e.g. due to a reorg, simply reset it - s.Log.Warn("Derivation pipeline is reset", "err", x.Err) - s.Derivation.Reset() + // If the system corrupts, e.g. due to a reorg, simply reset it + s.Log.Warn("Deriver system is resetting", "err", x.Err) s.Finalizer.Reset() s.Emitter.Emit(StepReqEvent{}) s.Emitter.Emit(engine.ResetEngineRequestEvent{}) } -type DeriverIdleEvent struct{} - -func (d DeriverIdleEvent) String() string { - return "derivation-idle" -} - // SyncStep performs the sequence of encapsulated syncing steps. // Warning: this sequence will be broken apart as outlined in op-node derivers design doc. func (s *SyncDeriver) SyncStep(ctx context.Context) error { @@ -562,12 +558,7 @@ func (s *SyncDeriver) SyncStep(ctx context.Context) error { return fmt.Errorf("finalizer OnDerivationL1End error: %w", err) } - attr, err := s.Derivation.Step(ctx, s.Engine.PendingSafeL2Head()) - if err != nil { - return err - } - - s.AttributesHandler.SetAttributes(attr) + s.Emitter.Emit(derive.PipelineStepEvent{PendingSafe: s.Engine.PendingSafeL2Head()}) return nil } @@ -711,7 +702,6 @@ func (s *Driver) snapshot(event string) { s.snapshotLog.Info("Rollup State Snapshot", "event", event, "l1Head", deferJSONString{s.l1State.L1Head()}, - "l1Current", deferJSONString{s.Derivation.Origin()}, "l2Head", deferJSONString{s.Engine.UnsafeL2Head()}, "l2Safe", deferJSONString{s.Engine.SafeL2Head()}, "l2FinalizedHead", deferJSONString{s.Engine.Finalized()}) From a3eb9c3196a02694926fa3880965e4c0e1f52807 Mon Sep 17 00:00:00 2001 From: Maurelian Date: Thu, 20 Jun 2024 10:18:14 -0400 Subject: [PATCH 078/141] ctb: Add safe extension contract auth to Specs.t.sol (#10952) * ctb: Add safe extension contract auth to Specs.t.sol * ctb: Fix capitalization on Safe dir --- packages/contracts-bedrock/test/Specs.t.sol | 58 +++++++++++++++++++-- 1 file changed, 54 insertions(+), 4 deletions(-) diff --git a/packages/contracts-bedrock/test/Specs.t.sol b/packages/contracts-bedrock/test/Specs.t.sol index a2b670c10c81..ba38408595f1 100644 --- a/packages/contracts-bedrock/test/Specs.t.sol +++ b/packages/contracts-bedrock/test/Specs.t.sol @@ -25,13 +25,16 @@ contract Specification_Test is CommonTest { CHALLENGER, SYSTEMCONFIGOWNER, GUARDIAN, + DEPUTYGUARDIAN, MESSENGER, L1PROXYADMINOWNER, GOVERNANCETOKENOWNER, MINTMANAGEROWNER, DATAAVAILABILITYCHALLENGEOWNER, DISPUTEGAMEFACTORYOWNER, - DELAYEDWETHOWNER + DELAYEDWETHOWNER, + COUNCILSAFE, + COUNCILSAFEOWNER } /// @notice Represents the specification of a function. @@ -776,6 +779,51 @@ contract Specification_Test is CommonTest { _addSpec({ _name: "WETH98", _sel: _getSel("transfer(address,uint256)") }); _addSpec({ _name: "WETH98", _sel: _getSel("transferFrom(address,address,uint256)") }); _addSpec({ _name: "WETH98", _sel: _getSel("withdraw(uint256)") }); + + // DeputyGuardianModule + _addSpec({ + _name: "DeputyGuardianModule", + _sel: _getSel("blacklistDisputeGame(address,address)"), + _auth: Role.DEPUTYGUARDIAN + }); + _addSpec({ + _name: "DeputyGuardianModule", + _sel: _getSel("setRespectedGameType(address,uint32)"), + _auth: Role.DEPUTYGUARDIAN + }); + _addSpec({ _name: "DeputyGuardianModule", _sel: _getSel("pause()"), _auth: Role.DEPUTYGUARDIAN }); + _addSpec({ _name: "DeputyGuardianModule", _sel: _getSel("unpause()"), _auth: Role.DEPUTYGUARDIAN }); + _addSpec({ _name: "DeputyGuardianModule", _sel: _getSel("deputyGuardian()") }); + _addSpec({ _name: "DeputyGuardianModule", _sel: _getSel("safe()") }); + _addSpec({ _name: "DeputyGuardianModule", _sel: _getSel("superchainConfig()") }); + _addSpec({ _name: "DeputyGuardianModule", _sel: _getSel("version()") }); + + // LivenessGuard + _addSpec({ _name: "LivenessGuard", _sel: _getSel("checkAfterExecution(bytes32,bool)"), _auth: Role.COUNCILSAFE }); + _addSpec({ + _name: "LivenessGuard", + _sel: _getSel( + "checkTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes,address)" + ), + _auth: Role.COUNCILSAFE + }); + _addSpec({ _name: "LivenessGuard", _sel: _getSel("lastLive(address)") }); + _addSpec({ _name: "LivenessGuard", _sel: _getSel("safe()") }); + _addSpec({ _name: "LivenessGuard", _sel: _getSel("showLiveness()"), _auth: Role.COUNCILSAFEOWNER }); + _addSpec({ _name: "LivenessGuard", _sel: _getSel("version()") }); + + // LivenessModule + _addSpec({ _name: "LivenessModule", _sel: _getSel("canRemove(address)") }); + _addSpec({ _name: "LivenessModule", _sel: _getSel("fallbackOwner()") }); + _addSpec({ _name: "LivenessModule", _sel: _getSel("getRequiredThreshold(uint256)") }); + _addSpec({ _name: "LivenessModule", _sel: _getSel("livenessGuard()") }); + _addSpec({ _name: "LivenessModule", _sel: _getSel("livenessInterval()") }); + _addSpec({ _name: "LivenessModule", _sel: _getSel("minOwners()") }); + _addSpec({ _name: "LivenessModule", _sel: _getSel("ownershipTransferredToFallback()") }); + _addSpec({ _name: "LivenessModule", _sel: _getSel("removeOwners(address[],address[])") }); + _addSpec({ _name: "LivenessModule", _sel: _getSel("safe()") }); + _addSpec({ _name: "LivenessModule", _sel: _getSel("thresholdPercentage()") }); + _addSpec({ _name: "LivenessModule", _sel: _getSel("version()") }); } /// @dev Computes the selector from a function signature. @@ -807,11 +855,13 @@ contract Specification_Test is CommonTest { /// @notice Ensures that there's an auth spec for every L1 contract function. function testContractAuth() public { - string[] memory pathExcludes = new string[](2); + string[] memory pathExcludes = new string[](3); pathExcludes[0] = "src/dispute/interfaces/*"; pathExcludes[1] = "src/dispute/lib/*"; - Abi[] memory abis = - ForgeArtifacts.getContractFunctionAbis("src/{L1,dispute,governance,universal/ProxyAdmin.sol}", pathExcludes); + pathExcludes[2] = "src/Safe/SafeSigners.sol"; + Abi[] memory abis = ForgeArtifacts.getContractFunctionAbis( + "src/{L1,dispute,governance,Safe,universal/ProxyAdmin.sol}", pathExcludes + ); uint256 numCheckedEntries = 0; for (uint256 i = 0; i < abis.length; i++) { From 5bbe7170986e062746e292b7fc96903707a7e3a9 Mon Sep 17 00:00:00 2001 From: Marcel <153717436+MonkeyMarcel@users.noreply.github.com> Date: Thu, 20 Jun 2024 23:41:16 +0800 Subject: [PATCH 079/141] remove dead code (#10939) --- op-chain-ops/Makefile | 3 --- op-chain-ops/README.md | 52 ------------------------------------------ 2 files changed, 55 deletions(-) delete mode 100644 op-chain-ops/README.md diff --git a/op-chain-ops/Makefile b/op-chain-ops/Makefile index 1808807c7378..0b9a22b1f987 100644 --- a/op-chain-ops/Makefile +++ b/op-chain-ops/Makefile @@ -3,9 +3,6 @@ ifeq ($(shell uname),Darwin) FUZZLDFLAGS := -ldflags=-extldflags=-Wl,-ld_classic endif -op-version-check: - go build -o ./bin/op-version-check ./cmd/op-version-check/main.go - ecotone-scalar: go build -o ./bin/ecotone-scalar ./cmd/ecotone-scalar/main.go diff --git a/op-chain-ops/README.md b/op-chain-ops/README.md deleted file mode 100644 index a40232fe7d17..000000000000 --- a/op-chain-ops/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# op-chain-ops - -This package contains utilities for working with chain state. - -## op-version-check - -A CLI tool for determining which contract versions are deployed for -chains in a superchain. It will output a JSON file that contains a -list of each chain's versions. It is assumed that the implementations -that are being checked have already been deployed and their contract -addresses exist inside of the `superchain-registry` repository. It is -also assumed that the semantic version file in the `superchain-registry` -has been updated. The tool will output the semantic versioning to -determine which contract versions are deployed. - -### Configuration - -#### L1 RPC URL - -The L1 RPC URL is used to determine which superchain to target. All -L2s that are not based on top of the L1 chain that corresponds to the -L1 RPC URL are filtered out from being checked. It also is used to -double check that the data in the `superchain-registry` is correct. - -#### Chain IDs - -A list of L2 chain IDs can be passed that will be used to filter which -L2 chains will have their versions checked. Omitting this argument will -result in all chains in the superchain being considered. - -#### Deploy Config - -The path to the `deploy-config` directory in the contracts package. -Since multiple L2 networks may be considered in the check, the `deploy-config` -directory must be passed and then the particular deploy config files will -be read out of the directory as needed. - -#### Outfile - -The file that the versions should be written to. If omitted, the file -will be written to stdout - -#### Usage - -It can be built and run using the [Makefile](./Makefile) `op-version-check` -target. Run `make op-version-check` to create a binary in [./bin/op-version-check](./bin/op-version-check) -that can be executed, optionally providing the `--l1-rpc-url`, `--chain-ids`, -`--superchain-target`, and `--outfile` flags. - -```sh -./bin/op-version-check -``` From 0bb839cfd6640349c7161e411943f35741a2173a Mon Sep 17 00:00:00 2001 From: Brian Bland Date: Thu, 20 Jun 2024 11:23:38 -0700 Subject: [PATCH 080/141] op-conductor: Add strongly consistent cluster membership APIs (#10823) * op-conductor: Add optional version parameter to cluster membership changes * Fix tests * Add API backwards compatibility for conductor changes * Clean up some boilerplate --- op-conductor/conductor/service.go | 14 ++-- op-conductor/consensus/iface.go | 22 +++-- op-conductor/consensus/mocks/Consensus.go | 98 ++++++++++++----------- op-conductor/consensus/raft.go | 47 ++++++----- op-conductor/rpc/api.go | 8 +- op-conductor/rpc/backend.go | 28 +++---- op-conductor/rpc/client.go | 26 +++--- op-e2e/sequencer_failover_setup.go | 13 ++- op-e2e/sequencer_failover_test.go | 43 +++++++--- 9 files changed, 171 insertions(+), 128 deletions(-) diff --git a/op-conductor/conductor/service.go b/op-conductor/conductor/service.go index 217b76b1fdd2..a1ccef871538 100644 --- a/op-conductor/conductor/service.go +++ b/op-conductor/conductor/service.go @@ -453,18 +453,18 @@ func (oc *OpConductor) LeaderWithID(_ context.Context) *consensus.ServerInfo { } // AddServerAsVoter adds a server as a voter to the cluster. -func (oc *OpConductor) AddServerAsVoter(_ context.Context, id string, addr string) error { - return oc.cons.AddVoter(id, addr) +func (oc *OpConductor) AddServerAsVoter(_ context.Context, id string, addr string, version uint64) error { + return oc.cons.AddVoter(id, addr, version) } // AddServerAsNonvoter adds a server as a non-voter to the cluster. non-voter will not participate in leader election. -func (oc *OpConductor) AddServerAsNonvoter(_ context.Context, id string, addr string) error { - return oc.cons.AddNonVoter(id, addr) +func (oc *OpConductor) AddServerAsNonvoter(_ context.Context, id string, addr string, version uint64) error { + return oc.cons.AddNonVoter(id, addr, version) } // RemoveServer removes a server from the cluster. -func (oc *OpConductor) RemoveServer(_ context.Context, id string) error { - return oc.cons.RemoveServer(id) +func (oc *OpConductor) RemoveServer(_ context.Context, id string, version uint64) error { + return oc.cons.RemoveServer(id, version) } // TransferLeader transfers leadership to another server. @@ -488,7 +488,7 @@ func (oc *OpConductor) SequencerHealthy(_ context.Context) bool { } // ClusterMembership returns current cluster's membership information. -func (oc *OpConductor) ClusterMembership(_ context.Context) ([]*consensus.ServerInfo, error) { +func (oc *OpConductor) ClusterMembership(_ context.Context) (*consensus.ClusterMembership, error) { return oc.cons.ClusterMembership() } diff --git a/op-conductor/consensus/iface.go b/op-conductor/consensus/iface.go index 15096c2e8ae1..69b9506c50b2 100644 --- a/op-conductor/consensus/iface.go +++ b/op-conductor/consensus/iface.go @@ -25,6 +25,12 @@ func (s ServerSuffrage) String() string { return "ServerSuffrage" } +// ClusterMembership defines a versioned list of servers in the cluster. +type ClusterMembership struct { + Servers []ServerInfo `json:"servers"` + Version uint64 `json:"version"` +} + // ServerInfo defines the server information. type ServerInfo struct { ID string `json:"id"` @@ -37,13 +43,17 @@ type ServerInfo struct { //go:generate mockery --name Consensus --output mocks/ --with-expecter=true type Consensus interface { // AddVoter adds a voting member into the cluster, voter is eligible to become leader. - AddVoter(id, addr string) error + // If version is non-zero, this will only be applied if the current cluster version matches the expected version. + AddVoter(id, addr string, version uint64) error // AddNonVoter adds a non-voting member into the cluster, non-voter is not eligible to become leader. - AddNonVoter(id, addr string) error + // If version is non-zero, this will only be applied if the current cluster version matches the expected version. + AddNonVoter(id, addr string, version uint64) error // DemoteVoter demotes a voting member into a non-voting member, if leader is being demoted, it will cause a new leader election. - DemoteVoter(id string) error + // If version is non-zero, this will only be applied if the current cluster version matches the expected version. + DemoteVoter(id string, version uint64) error // RemoveServer removes a member (both voter or non-voter) from the cluster, if leader is being removed, it will cause a new leader election. - RemoveServer(id string) error + // If version is non-zero, this will only be applied if the current cluster version matches the expected version. + RemoveServer(id string, version uint64) error // LeaderCh returns a channel that will be notified when leadership status changes (true = leader, false = follower) LeaderCh() <-chan bool // Leader returns if it is the leader of the cluster. @@ -56,8 +66,8 @@ type Consensus interface { TransferLeader() error // TransferLeaderTo triggers leadership transfer to a specific member in the cluster. TransferLeaderTo(id, addr string) error - // ClusterMembership returns the current cluster membership configuration. - ClusterMembership() ([]*ServerInfo, error) + // ClusterMembership returns the current cluster membership configuration and associated version. + ClusterMembership() (*ClusterMembership, error) // CommitPayload commits latest unsafe payload to the FSM in a strongly consistent fashion. CommitUnsafePayload(payload *eth.ExecutionPayloadEnvelope) error diff --git a/op-conductor/consensus/mocks/Consensus.go b/op-conductor/consensus/mocks/Consensus.go index 02d65869c06a..ca1397a690e1 100644 --- a/op-conductor/consensus/mocks/Consensus.go +++ b/op-conductor/consensus/mocks/Consensus.go @@ -22,17 +22,17 @@ func (_m *Consensus) EXPECT() *Consensus_Expecter { return &Consensus_Expecter{mock: &_m.Mock} } -// AddNonVoter provides a mock function with given fields: id, addr -func (_m *Consensus) AddNonVoter(id string, addr string) error { - ret := _m.Called(id, addr) +// AddNonVoter provides a mock function with given fields: id, addr, version +func (_m *Consensus) AddNonVoter(id string, addr string, version uint64) error { + ret := _m.Called(id, addr, version) if len(ret) == 0 { panic("no return value specified for AddNonVoter") } var r0 error - if rf, ok := ret.Get(0).(func(string, string) error); ok { - r0 = rf(id, addr) + if rf, ok := ret.Get(0).(func(string, string, uint64) error); ok { + r0 = rf(id, addr, version) } else { r0 = ret.Error(0) } @@ -48,13 +48,14 @@ type Consensus_AddNonVoter_Call struct { // AddNonVoter is a helper method to define mock.On call // - id string // - addr string -func (_e *Consensus_Expecter) AddNonVoter(id interface{}, addr interface{}) *Consensus_AddNonVoter_Call { - return &Consensus_AddNonVoter_Call{Call: _e.mock.On("AddNonVoter", id, addr)} +// - version uint64 +func (_e *Consensus_Expecter) AddNonVoter(id interface{}, addr interface{}, version interface{}) *Consensus_AddNonVoter_Call { + return &Consensus_AddNonVoter_Call{Call: _e.mock.On("AddNonVoter", id, addr, version)} } -func (_c *Consensus_AddNonVoter_Call) Run(run func(id string, addr string)) *Consensus_AddNonVoter_Call { +func (_c *Consensus_AddNonVoter_Call) Run(run func(id string, addr string, version uint64)) *Consensus_AddNonVoter_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(string), args[1].(string)) + run(args[0].(string), args[1].(string), args[2].(uint64)) }) return _c } @@ -64,22 +65,22 @@ func (_c *Consensus_AddNonVoter_Call) Return(_a0 error) *Consensus_AddNonVoter_C return _c } -func (_c *Consensus_AddNonVoter_Call) RunAndReturn(run func(string, string) error) *Consensus_AddNonVoter_Call { +func (_c *Consensus_AddNonVoter_Call) RunAndReturn(run func(string, string, uint64) error) *Consensus_AddNonVoter_Call { _c.Call.Return(run) return _c } -// AddVoter provides a mock function with given fields: id, addr -func (_m *Consensus) AddVoter(id string, addr string) error { - ret := _m.Called(id, addr) +// AddVoter provides a mock function with given fields: id, addr, version +func (_m *Consensus) AddVoter(id string, addr string, version uint64) error { + ret := _m.Called(id, addr, version) if len(ret) == 0 { panic("no return value specified for AddVoter") } var r0 error - if rf, ok := ret.Get(0).(func(string, string) error); ok { - r0 = rf(id, addr) + if rf, ok := ret.Get(0).(func(string, string, uint64) error); ok { + r0 = rf(id, addr, version) } else { r0 = ret.Error(0) } @@ -95,13 +96,14 @@ type Consensus_AddVoter_Call struct { // AddVoter is a helper method to define mock.On call // - id string // - addr string -func (_e *Consensus_Expecter) AddVoter(id interface{}, addr interface{}) *Consensus_AddVoter_Call { - return &Consensus_AddVoter_Call{Call: _e.mock.On("AddVoter", id, addr)} +// - version uint64 +func (_e *Consensus_Expecter) AddVoter(id interface{}, addr interface{}, version interface{}) *Consensus_AddVoter_Call { + return &Consensus_AddVoter_Call{Call: _e.mock.On("AddVoter", id, addr, version)} } -func (_c *Consensus_AddVoter_Call) Run(run func(id string, addr string)) *Consensus_AddVoter_Call { +func (_c *Consensus_AddVoter_Call) Run(run func(id string, addr string, version uint64)) *Consensus_AddVoter_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(string), args[1].(string)) + run(args[0].(string), args[1].(string), args[2].(uint64)) }) return _c } @@ -111,29 +113,29 @@ func (_c *Consensus_AddVoter_Call) Return(_a0 error) *Consensus_AddVoter_Call { return _c } -func (_c *Consensus_AddVoter_Call) RunAndReturn(run func(string, string) error) *Consensus_AddVoter_Call { +func (_c *Consensus_AddVoter_Call) RunAndReturn(run func(string, string, uint64) error) *Consensus_AddVoter_Call { _c.Call.Return(run) return _c } // ClusterMembership provides a mock function with given fields: -func (_m *Consensus) ClusterMembership() ([]*consensus.ServerInfo, error) { +func (_m *Consensus) ClusterMembership() (*consensus.ClusterMembership, error) { ret := _m.Called() if len(ret) == 0 { panic("no return value specified for ClusterMembership") } - var r0 []*consensus.ServerInfo + var r0 *consensus.ClusterMembership var r1 error - if rf, ok := ret.Get(0).(func() ([]*consensus.ServerInfo, error)); ok { + if rf, ok := ret.Get(0).(func() (*consensus.ClusterMembership, error)); ok { return rf() } - if rf, ok := ret.Get(0).(func() []*consensus.ServerInfo); ok { + if rf, ok := ret.Get(0).(func() *consensus.ClusterMembership); ok { r0 = rf() } else { if ret.Get(0) != nil { - r0 = ret.Get(0).([]*consensus.ServerInfo) + r0 = ret.Get(0).(*consensus.ClusterMembership) } } @@ -163,12 +165,12 @@ func (_c *Consensus_ClusterMembership_Call) Run(run func()) *Consensus_ClusterMe return _c } -func (_c *Consensus_ClusterMembership_Call) Return(_a0 []*consensus.ServerInfo, _a1 error) *Consensus_ClusterMembership_Call { +func (_c *Consensus_ClusterMembership_Call) Return(_a0 *consensus.ClusterMembership, _a1 error) *Consensus_ClusterMembership_Call { _c.Call.Return(_a0, _a1) return _c } -func (_c *Consensus_ClusterMembership_Call) RunAndReturn(run func() ([]*consensus.ServerInfo, error)) *Consensus_ClusterMembership_Call { +func (_c *Consensus_ClusterMembership_Call) RunAndReturn(run func() (*consensus.ClusterMembership, error)) *Consensus_ClusterMembership_Call { _c.Call.Return(run) return _c } @@ -219,17 +221,17 @@ func (_c *Consensus_CommitUnsafePayload_Call) RunAndReturn(run func(*eth.Executi return _c } -// DemoteVoter provides a mock function with given fields: id -func (_m *Consensus) DemoteVoter(id string) error { - ret := _m.Called(id) +// DemoteVoter provides a mock function with given fields: id, version +func (_m *Consensus) DemoteVoter(id string, version uint64) error { + ret := _m.Called(id, version) if len(ret) == 0 { panic("no return value specified for DemoteVoter") } var r0 error - if rf, ok := ret.Get(0).(func(string) error); ok { - r0 = rf(id) + if rf, ok := ret.Get(0).(func(string, uint64) error); ok { + r0 = rf(id, version) } else { r0 = ret.Error(0) } @@ -244,13 +246,14 @@ type Consensus_DemoteVoter_Call struct { // DemoteVoter is a helper method to define mock.On call // - id string -func (_e *Consensus_Expecter) DemoteVoter(id interface{}) *Consensus_DemoteVoter_Call { - return &Consensus_DemoteVoter_Call{Call: _e.mock.On("DemoteVoter", id)} +// - version uint64 +func (_e *Consensus_Expecter) DemoteVoter(id interface{}, version interface{}) *Consensus_DemoteVoter_Call { + return &Consensus_DemoteVoter_Call{Call: _e.mock.On("DemoteVoter", id, version)} } -func (_c *Consensus_DemoteVoter_Call) Run(run func(id string)) *Consensus_DemoteVoter_Call { +func (_c *Consensus_DemoteVoter_Call) Run(run func(id string, version uint64)) *Consensus_DemoteVoter_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(string)) + run(args[0].(string), args[1].(uint64)) }) return _c } @@ -260,7 +263,7 @@ func (_c *Consensus_DemoteVoter_Call) Return(_a0 error) *Consensus_DemoteVoter_C return _c } -func (_c *Consensus_DemoteVoter_Call) RunAndReturn(run func(string) error) *Consensus_DemoteVoter_Call { +func (_c *Consensus_DemoteVoter_Call) RunAndReturn(run func(string, uint64) error) *Consensus_DemoteVoter_Call { _c.Call.Return(run) return _c } @@ -461,17 +464,17 @@ func (_c *Consensus_LeaderWithID_Call) RunAndReturn(run func() *consensus.Server return _c } -// RemoveServer provides a mock function with given fields: id -func (_m *Consensus) RemoveServer(id string) error { - ret := _m.Called(id) +// RemoveServer provides a mock function with given fields: id, version +func (_m *Consensus) RemoveServer(id string, version uint64) error { + ret := _m.Called(id, version) if len(ret) == 0 { panic("no return value specified for RemoveServer") } var r0 error - if rf, ok := ret.Get(0).(func(string) error); ok { - r0 = rf(id) + if rf, ok := ret.Get(0).(func(string, uint64) error); ok { + r0 = rf(id, version) } else { r0 = ret.Error(0) } @@ -486,13 +489,14 @@ type Consensus_RemoveServer_Call struct { // RemoveServer is a helper method to define mock.On call // - id string -func (_e *Consensus_Expecter) RemoveServer(id interface{}) *Consensus_RemoveServer_Call { - return &Consensus_RemoveServer_Call{Call: _e.mock.On("RemoveServer", id)} +// - version uint64 +func (_e *Consensus_Expecter) RemoveServer(id interface{}, version interface{}) *Consensus_RemoveServer_Call { + return &Consensus_RemoveServer_Call{Call: _e.mock.On("RemoveServer", id, version)} } -func (_c *Consensus_RemoveServer_Call) Run(run func(id string)) *Consensus_RemoveServer_Call { +func (_c *Consensus_RemoveServer_Call) Run(run func(id string, version uint64)) *Consensus_RemoveServer_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(string)) + run(args[0].(string), args[1].(uint64)) }) return _c } @@ -502,7 +506,7 @@ func (_c *Consensus_RemoveServer_Call) Return(_a0 error) *Consensus_RemoveServer return _c } -func (_c *Consensus_RemoveServer_Call) RunAndReturn(run func(string) error) *Consensus_RemoveServer_Call { +func (_c *Consensus_RemoveServer_Call) RunAndReturn(run func(string, uint64) error) *Consensus_RemoveServer_Call { _c.Call.Return(run) return _c } diff --git a/op-conductor/consensus/raft.go b/op-conductor/consensus/raft.go index 2c3f79fe2946..b80c39be06c7 100644 --- a/op-conductor/consensus/raft.go +++ b/op-conductor/consensus/raft.go @@ -112,27 +112,36 @@ func NewRaftConsensus(log log.Logger, serverID, serverAddr, storageDir string, b } // AddNonVoter implements Consensus, it tries to add a non-voting member into the cluster. -func (rc *RaftConsensus) AddNonVoter(id string, addr string) error { - if err := rc.r.AddNonvoter(raft.ServerID(id), raft.ServerAddress(addr), 0, defaultTimeout).Error(); err != nil { - rc.log.Error("failed to add non-voter", "id", id, "addr", addr, "err", err) +func (rc *RaftConsensus) AddNonVoter(id string, addr string, version uint64) error { + if err := rc.r.AddNonvoter(raft.ServerID(id), raft.ServerAddress(addr), version, defaultTimeout).Error(); err != nil { + rc.log.Error("failed to add non-voter", "id", id, "addr", addr, "version", version, "err", err) return err } return nil } // AddVoter implements Consensus, it tries to add a voting member into the cluster. -func (rc *RaftConsensus) AddVoter(id string, addr string) error { - if err := rc.r.AddVoter(raft.ServerID(id), raft.ServerAddress(addr), 0, defaultTimeout).Error(); err != nil { - rc.log.Error("failed to add voter", "id", id, "addr", addr, "err", err) +func (rc *RaftConsensus) AddVoter(id string, addr string, version uint64) error { + if err := rc.r.AddVoter(raft.ServerID(id), raft.ServerAddress(addr), version, defaultTimeout).Error(); err != nil { + rc.log.Error("failed to add voter", "id", id, "addr", addr, "version", version, "err", err) return err } return nil } // DemoteVoter implements Consensus, it tries to demote a voting member into a non-voting member in the cluster. -func (rc *RaftConsensus) DemoteVoter(id string) error { - if err := rc.r.DemoteVoter(raft.ServerID(id), 0, defaultTimeout).Error(); err != nil { - rc.log.Error("failed to demote voter", "id", id, "err", err) +func (rc *RaftConsensus) DemoteVoter(id string, version uint64) error { + if err := rc.r.DemoteVoter(raft.ServerID(id), version, defaultTimeout).Error(); err != nil { + rc.log.Error("failed to demote voter", "id", id, "version", version, "err", err) + return err + } + return nil +} + +// RemoveServer implements Consensus, it tries to remove a member (both voter or non-voter) from the cluster, if leader is being removed, it will cause a new leader election. +func (rc *RaftConsensus) RemoveServer(id string, version uint64) error { + if err := rc.r.RemoveServer(raft.ServerID(id), version, defaultTimeout).Error(); err != nil { + rc.log.Error("failed to remove voter", "id", id, "version", version, "err", err) return err } return nil @@ -158,15 +167,6 @@ func (rc *RaftConsensus) LeaderCh() <-chan bool { return rc.r.LeaderCh() } -// RemoveServer implements Consensus, it tries to remove a member (both voter or non-voter) from the cluster, if leader is being removed, it will cause a new leader election. -func (rc *RaftConsensus) RemoveServer(id string) error { - if err := rc.r.RemoveServer(raft.ServerID(id), 0, defaultTimeout).Error(); err != nil { - rc.log.Error("failed to remove voter", "id", id, "err", err) - return err - } - return nil -} - // ServerID implements Consensus, it returns the server ID of the current server. func (rc *RaftConsensus) ServerID() string { return string(rc.serverID) @@ -232,19 +232,22 @@ func (rc *RaftConsensus) LatestUnsafePayload() (*eth.ExecutionPayloadEnvelope, e } // ClusterMembership implements Consensus, it returns the current cluster membership configuration. -func (rc *RaftConsensus) ClusterMembership() ([]*ServerInfo, error) { +func (rc *RaftConsensus) ClusterMembership() (*ClusterMembership, error) { var future raft.ConfigurationFuture if future = rc.r.GetConfiguration(); future.Error() != nil { return nil, future.Error() } - var servers []*ServerInfo + var servers []ServerInfo for _, srv := range future.Configuration().Servers { - servers = append(servers, &ServerInfo{ + servers = append(servers, ServerInfo{ ID: string(srv.ID), Addr: string(srv.Address), Suffrage: ServerSuffrage(srv.Suffrage), }) } - return servers, nil + return &ClusterMembership{ + Servers: servers, + Version: future.Index(), + }, nil } diff --git a/op-conductor/rpc/api.go b/op-conductor/rpc/api.go index b5d954f5ceb0..536cbfd21802 100644 --- a/op-conductor/rpc/api.go +++ b/op-conductor/rpc/api.go @@ -32,17 +32,17 @@ type API interface { // LeaderWithID returns the current leader's server info. LeaderWithID(ctx context.Context) (*consensus.ServerInfo, error) // AddServerAsVoter adds a server as a voter to the cluster. - AddServerAsVoter(ctx context.Context, id string, addr string) error + AddServerAsVoter(ctx context.Context, id string, addr string, version uint64) error // AddServerAsNonvoter adds a server as a non-voter to the cluster. non-voter will not participate in leader election. - AddServerAsNonvoter(ctx context.Context, id string, addr string) error + AddServerAsNonvoter(ctx context.Context, id string, addr string, version uint64) error // RemoveServer removes a server from the cluster. - RemoveServer(ctx context.Context, id string) error + RemoveServer(ctx context.Context, id string, version uint64) error // TransferLeader transfers leadership to another server. TransferLeader(ctx context.Context) error // TransferLeaderToServer transfers leadership to a specific server. TransferLeaderToServer(ctx context.Context, id string, addr string) error // ClusterMembership returns the current cluster membership configuration. - ClusterMembership(ctx context.Context) ([]*consensus.ServerInfo, error) + ClusterMembership(ctx context.Context) (*consensus.ClusterMembership, error) // APIs called by op-node // Active returns true if op-conductor is active (not paused or stopped). diff --git a/op-conductor/rpc/backend.go b/op-conductor/rpc/backend.go index 96fab2c90d28..fe909b3332c2 100644 --- a/op-conductor/rpc/backend.go +++ b/op-conductor/rpc/backend.go @@ -18,13 +18,13 @@ type conductor interface { Leader(ctx context.Context) bool LeaderWithID(ctx context.Context) *consensus.ServerInfo - AddServerAsVoter(ctx context.Context, id string, addr string) error - AddServerAsNonvoter(ctx context.Context, id string, addr string) error - RemoveServer(ctx context.Context, id string) error + AddServerAsVoter(ctx context.Context, id string, addr string, version uint64) error + AddServerAsNonvoter(ctx context.Context, id string, addr string, version uint64) error + RemoveServer(ctx context.Context, id string, version uint64) error TransferLeader(ctx context.Context) error TransferLeaderToServer(ctx context.Context, id string, addr string) error CommitUnsafePayload(ctx context.Context, payload *eth.ExecutionPayloadEnvelope) error - ClusterMembership(ctx context.Context) ([]*consensus.ServerInfo, error) + ClusterMembership(ctx context.Context) (*consensus.ClusterMembership, error) } // APIBackend is the backend implementation of the API. @@ -61,13 +61,18 @@ func (api *APIBackend) Active(_ context.Context) (bool, error) { } // AddServerAsNonvoter implements API. -func (api *APIBackend) AddServerAsNonvoter(ctx context.Context, id string, addr string) error { - return api.con.AddServerAsNonvoter(ctx, id, addr) +func (api *APIBackend) AddServerAsNonvoter(ctx context.Context, id string, addr string, version uint64) error { + return api.con.AddServerAsNonvoter(ctx, id, addr, version) } // AddServerAsVoter implements API. -func (api *APIBackend) AddServerAsVoter(ctx context.Context, id string, addr string) error { - return api.con.AddServerAsVoter(ctx, id, addr) +func (api *APIBackend) AddServerAsVoter(ctx context.Context, id string, addr string, version uint64) error { + return api.con.AddServerAsVoter(ctx, id, addr, version) +} + +// RemoveServer implements API. +func (api *APIBackend) RemoveServer(ctx context.Context, id string, version uint64) error { + return api.con.RemoveServer(ctx, id, version) } // CommitUnsafePayload implements API. @@ -90,11 +95,6 @@ func (api *APIBackend) Pause(ctx context.Context) error { return api.con.Pause(ctx) } -// RemoveServer implements API. -func (api *APIBackend) RemoveServer(ctx context.Context, id string) error { - return api.con.RemoveServer(ctx, id) -} - // Resume implements API. func (api *APIBackend) Resume(ctx context.Context) error { return api.con.Resume(ctx) @@ -118,6 +118,6 @@ func (api *APIBackend) SequencerHealthy(ctx context.Context) (bool, error) { } // ClusterMembership implements API. -func (api *APIBackend) ClusterMembership(ctx context.Context) ([]*consensus.ServerInfo, error) { +func (api *APIBackend) ClusterMembership(ctx context.Context) (*consensus.ClusterMembership, error) { return api.con.ClusterMembership(ctx) } diff --git a/op-conductor/rpc/client.go b/op-conductor/rpc/client.go index f8aac005cdd7..28ce1dcff245 100644 --- a/op-conductor/rpc/client.go +++ b/op-conductor/rpc/client.go @@ -49,13 +49,18 @@ func (c *APIClient) Active(ctx context.Context) (bool, error) { } // AddServerAsNonvoter implements API. -func (c *APIClient) AddServerAsNonvoter(ctx context.Context, id string, addr string) error { - return c.c.CallContext(ctx, nil, prefixRPC("addServerAsNonvoter"), id, addr) +func (c *APIClient) AddServerAsNonvoter(ctx context.Context, id string, addr string, version uint64) error { + return c.c.CallContext(ctx, nil, prefixRPC("addServerAsNonvoter"), id, addr, version) } // AddServerAsVoter implements API. -func (c *APIClient) AddServerAsVoter(ctx context.Context, id string, addr string) error { - return c.c.CallContext(ctx, nil, prefixRPC("addServerAsVoter"), id, addr) +func (c *APIClient) AddServerAsVoter(ctx context.Context, id string, addr string, version uint64) error { + return c.c.CallContext(ctx, nil, prefixRPC("addServerAsVoter"), id, addr, version) +} + +// RemoveServer implements API. +func (c *APIClient) RemoveServer(ctx context.Context, id string, version uint64) error { + return c.c.CallContext(ctx, nil, prefixRPC("removeServer"), id, version) } // Close closes the underlying RPC client. @@ -87,11 +92,6 @@ func (c *APIClient) Pause(ctx context.Context) error { return c.c.CallContext(ctx, nil, prefixRPC("pause")) } -// RemoveServer implements API. -func (c *APIClient) RemoveServer(ctx context.Context, id string) error { - return c.c.CallContext(ctx, nil, prefixRPC("removeServer"), id) -} - // Resume implements API. func (c *APIClient) Resume(ctx context.Context) error { return c.c.CallContext(ctx, nil, prefixRPC("resume")) @@ -115,8 +115,8 @@ func (c *APIClient) SequencerHealthy(ctx context.Context) (bool, error) { } // ClusterMembership implements API. -func (c *APIClient) ClusterMembership(ctx context.Context) ([]*consensus.ServerInfo, error) { - var info []*consensus.ServerInfo - err := c.c.CallContext(ctx, &info, prefixRPC("clusterMembership")) - return info, err +func (c *APIClient) ClusterMembership(ctx context.Context) (*consensus.ClusterMembership, error) { + var clusterMembership consensus.ClusterMembership + err := c.c.CallContext(ctx, &clusterMembership, prefixRPC("clusterMembership")) + return &clusterMembership, err } diff --git a/op-e2e/sequencer_failover_setup.go b/op-e2e/sequencer_failover_setup.go index 4b4aeb20379b..f1fd867469e6 100644 --- a/op-e2e/sequencer_failover_setup.go +++ b/op-e2e/sequencer_failover_setup.go @@ -17,6 +17,7 @@ import ( bss "github.com/ethereum-optimism/optimism/op-batcher/batcher" batcherFlags "github.com/ethereum-optimism/optimism/op-batcher/flags" con "github.com/ethereum-optimism/optimism/op-conductor/conductor" + "github.com/ethereum-optimism/optimism/op-conductor/consensus" conrpc "github.com/ethereum-optimism/optimism/op-conductor/rpc" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait" rollupNode "github.com/ethereum-optimism/optimism/op-node/node" @@ -74,8 +75,8 @@ func setupSequencerFailoverTest(t *testing.T) (*System, map[string]*conductor, f c3 := conductors[Sequencer3Name] require.NoError(t, waitForLeadership(t, c1)) - require.NoError(t, c1.client.AddServerAsVoter(ctx, Sequencer2Name, c2.ConsensusEndpoint())) - require.NoError(t, c1.client.AddServerAsVoter(ctx, Sequencer3Name, c3.ConsensusEndpoint())) + require.NoError(t, c1.client.AddServerAsVoter(ctx, Sequencer2Name, c2.ConsensusEndpoint(), 0)) + require.NoError(t, c1.client.AddServerAsVoter(ctx, Sequencer3Name, c3.ConsensusEndpoint(), 0)) require.True(t, leader(t, ctx, c1)) require.False(t, leader(t, ctx, c2)) require.False(t, leader(t, ctx, c3)) @@ -508,3 +509,11 @@ func ensureOnlyOneLeader(t *testing.T, sys *System, conductors map[string]*condu } require.NoError(t, wait.For(ctx, 1*time.Second, condition)) } + +func memberIDs(membership *consensus.ClusterMembership) []string { + ids := make([]string, len(membership.Servers)) + for _, member := range membership.Servers { + ids = append(ids, member.ID) + } + return ids +} diff --git a/op-e2e/sequencer_failover_test.go b/op-e2e/sequencer_failover_test.go index 6d98dc2af973..09144479cb2f 100644 --- a/op-e2e/sequencer_failover_test.go +++ b/op-e2e/sequencer_failover_test.go @@ -39,9 +39,9 @@ func TestSequencerFailover_ConductorRPC(t *testing.T) { c3 := conductors[Sequencer3Name] membership, err := c1.client.ClusterMembership(ctx) require.NoError(t, err) - require.Equal(t, 3, len(membership), "Expected 3 members in cluster") + require.Equal(t, 3, len(membership.Servers), "Expected 3 members in cluster") ids := make([]string, 0) - for _, member := range membership { + for _, member := range membership.Servers { ids = append(ids, member.ID) require.Equal(t, consensus.Voter, member.Suffrage, "Expected all members to be voters") } @@ -112,37 +112,54 @@ func TestSequencerFailover_ConductorRPC(t *testing.T) { require.NoError(t, err) }() - err = leader.client.AddServerAsNonvoter(ctx, VerifierName, nonvoter.ConsensusEndpoint()) + membership, err = leader.client.ClusterMembership(ctx) + require.NoError(t, err) + + err = leader.client.AddServerAsNonvoter(ctx, VerifierName, nonvoter.ConsensusEndpoint(), membership.Version-1) + require.ErrorContains(t, err, "configuration changed since", "Expected leader to fail to add nonvoter due to version mismatch") + membership, err = leader.client.ClusterMembership(ctx) + require.NoError(t, err) + require.Equal(t, 3, len(membership.Servers), "Expected 3 members in cluster") + + err = leader.client.AddServerAsNonvoter(ctx, VerifierName, nonvoter.ConsensusEndpoint(), 0) require.NoError(t, err, "Expected leader to add non-voter") membership, err = leader.client.ClusterMembership(ctx) require.NoError(t, err) - require.Equal(t, 4, len(membership), "Expected 4 members in cluster") - require.Equal(t, consensus.Nonvoter, membership[3].Suffrage, "Expected last member to be non-voter") + require.Equal(t, 4, len(membership.Servers), "Expected 4 members in cluster") + require.Equal(t, consensus.Nonvoter, membership.Servers[3].Suffrage, "Expected last member to be non-voter") t.Log("Testing RemoveServer, call remove on follower, expected to fail") lid, leader = findLeader(t, conductors) fid, follower = findFollower(t, conductors) - err = follower.client.RemoveServer(ctx, lid) + err = follower.client.RemoveServer(ctx, lid, membership.Version) require.ErrorContains(t, err, "node is not the leader", "Expected follower to fail to remove leader") membership, err = c1.client.ClusterMembership(ctx) require.NoError(t, err) - require.Equal(t, 4, len(membership), "Expected 4 members in cluster") + require.Equal(t, 4, len(membership.Servers), "Expected 4 members in cluster") t.Log("Testing RemoveServer, call remove on leader, expect non-voter to be removed") - err = leader.client.RemoveServer(ctx, VerifierName) + err = leader.client.RemoveServer(ctx, VerifierName, membership.Version) require.NoError(t, err, "Expected leader to remove non-voter") membership, err = c1.client.ClusterMembership(ctx) require.NoError(t, err) - require.Equal(t, 3, len(membership), "Expected 2 members in cluster after removal") - require.NotContains(t, membership, VerifierName, "Expected follower to be removed from cluster") + require.Equal(t, 3, len(membership.Servers), "Expected 2 members in cluster after removal") + require.NotContains(t, memberIDs(membership), VerifierName, "Expected follower to be removed from cluster") + + t.Log("Testing RemoveServer, call remove on leader with incorrect version, expect voter not to be removed") + err = leader.client.RemoveServer(ctx, fid, membership.Version-1) + require.ErrorContains(t, err, "configuration changed since", "Expected leader to fail to remove follower due to version mismatch") + membership, err = c1.client.ClusterMembership(ctx) + require.NoError(t, err) + require.Equal(t, 3, len(membership.Servers), "Expected 3 members in cluster after failed removal") + require.Contains(t, memberIDs(membership), fid, "Expected follower to not be removed from cluster") t.Log("Testing RemoveServer, call remove on leader, expect voter to be removed") - err = leader.client.RemoveServer(ctx, fid) + err = leader.client.RemoveServer(ctx, fid, membership.Version) require.NoError(t, err, "Expected leader to remove follower") membership, err = c1.client.ClusterMembership(ctx) require.NoError(t, err) - require.Equal(t, 2, len(membership), "Expected 2 members in cluster after removal") - require.NotContains(t, membership, fid, "Expected follower to be removed from cluster") + require.Equal(t, 2, len(membership.Servers), "Expected 2 members in cluster after removal") + require.NotContains(t, memberIDs(membership), fid, "Expected follower to be removed from cluster") } // [Category: Sequencer Failover] From eb4041a66e6c2f09703350e18460fc7c2beb1788 Mon Sep 17 00:00:00 2001 From: mbaxter Date: Thu, 20 Jun 2024 16:38:48 -0400 Subject: [PATCH 081/141] cannon: Extract handleHiLo, handleJump, handleRd MIPS helpers (#10943) * cannon: Extract handleHiLo, handleJump, handlRd from mips.go * cannon: Extract handleHiLo, handleJump, handlRd from MIPS.sol * cannon: Increment MIPS.sol version * cannon: Run semver-lock and snapshots * cannon: Fix slither warning - init variable to zero --- cannon/mipsevm/mips.go | 73 +------ cannon/mipsevm/mips_instructions.go | 61 ++++++ packages/contracts-bedrock/semver-lock.json | 4 +- .../contracts-bedrock/src/cannon/MIPS.sol | 205 +++++------------- .../src/cannon/libraries/MIPSInstructions.sol | 143 ++++++++++++ .../utils/DeploymentSummaryFaultProofs.sol | 2 +- .../DeploymentSummaryFaultProofsCode.sol | 6 +- 7 files changed, 274 insertions(+), 220 deletions(-) diff --git a/cannon/mipsevm/mips.go b/cannon/mipsevm/mips.go index 9672e8f2e589..d2da1fdeae6b 100644 --- a/cannon/mipsevm/mips.go +++ b/cannon/mipsevm/mips.go @@ -222,67 +222,6 @@ func (m *InstrumentedState) Traceback() { } } -func (m *InstrumentedState) handleHiLo(fun uint32, rs uint32, rt uint32, storeReg uint32) error { - val := uint32(0) - switch fun { - case 0x10: // mfhi - val = m.state.Cpu.HI - case 0x11: // mthi - m.state.Cpu.HI = rs - case 0x12: // mflo - val = m.state.Cpu.LO - case 0x13: // mtlo - m.state.Cpu.LO = rs - case 0x18: // mult - acc := uint64(int64(int32(rs)) * int64(int32(rt))) - m.state.Cpu.HI = uint32(acc >> 32) - m.state.Cpu.LO = uint32(acc) - case 0x19: // multu - acc := uint64(uint64(rs) * uint64(rt)) - m.state.Cpu.HI = uint32(acc >> 32) - m.state.Cpu.LO = uint32(acc) - case 0x1a: // div - m.state.Cpu.HI = uint32(int32(rs) % int32(rt)) - m.state.Cpu.LO = uint32(int32(rs) / int32(rt)) - case 0x1b: // divu - m.state.Cpu.HI = rs % rt - m.state.Cpu.LO = rs / rt - } - - if storeReg != 0 { - m.state.Registers[storeReg] = val - } - - m.state.Cpu.PC = m.state.Cpu.NextPC - m.state.Cpu.NextPC = m.state.Cpu.NextPC + 4 - return nil -} - -func (m *InstrumentedState) handleJump(linkReg uint32, dest uint32) error { - if m.state.Cpu.NextPC != m.state.Cpu.PC+4 { - panic("jump in delay slot") - } - prevPC := m.state.Cpu.PC - m.state.Cpu.PC = m.state.Cpu.NextPC - m.state.Cpu.NextPC = dest - if linkReg != 0 { - m.state.Registers[linkReg] = prevPC + 8 // set the link-register to the instr after the delay slot instruction. - } - return nil -} - -func (m *InstrumentedState) handleRd(storeReg uint32, val uint32, conditional bool) error { - if storeReg >= 32 { - panic("invalid register") - } - if storeReg != 0 && conditional { - m.state.Registers[storeReg] = val - } - m.state.Cpu.PC = m.state.Cpu.NextPC - m.state.Cpu.NextPC = m.state.Cpu.NextPC + 4 - return nil -} - func (m *InstrumentedState) mipsStep() error { if m.state.Exited { return nil @@ -301,7 +240,7 @@ func (m *InstrumentedState) mipsStep() error { // Take top 4 bits of the next PC (its 256 MB region), and concatenate with the 26-bit offset target := (m.state.Cpu.NextPC & 0xF0000000) | ((insn & 0x03FFFFFF) << 2) m.pushStack(target) - return m.handleJump(linkReg, target) + return handleJump(&m.state.Cpu, &m.state.Registers, linkReg, target) } // register fetch @@ -367,14 +306,14 @@ func (m *InstrumentedState) mipsStep() error { linkReg = rdReg } m.popStack() - return m.handleJump(linkReg, rs) + return handleJump(&m.state.Cpu, &m.state.Registers, linkReg, rs) } if fun == 0xa { // movz - return m.handleRd(rdReg, rs, rt == 0) + return handleRd(&m.state.Cpu, &m.state.Registers, rdReg, rs, rt == 0) } if fun == 0xb { // movn - return m.handleRd(rdReg, rs, rt != 0) + return handleRd(&m.state.Cpu, &m.state.Registers, rdReg, rs, rt != 0) } // syscall (can read and write) @@ -385,7 +324,7 @@ func (m *InstrumentedState) mipsStep() error { // lo and hi registers // can write back if fun >= 0x10 && fun < 0x1c { - return m.handleHiLo(fun, rs, rt, rdReg) + return handleHiLo(&m.state.Cpu, &m.state.Registers, fun, rs, rt, rdReg) } } @@ -401,5 +340,5 @@ func (m *InstrumentedState) mipsStep() error { } // write back the value to destination register - return m.handleRd(rdReg, val, true) + return handleRd(&m.state.Cpu, &m.state.Registers, rdReg, val, true) } diff --git a/cannon/mipsevm/mips_instructions.go b/cannon/mipsevm/mips_instructions.go index 559fc635ed79..285ed26b6e1b 100644 --- a/cannon/mipsevm/mips_instructions.go +++ b/cannon/mipsevm/mips_instructions.go @@ -208,3 +208,64 @@ func handleBranch(cpu *CpuScalars, registers *[32]uint32, opcode uint32, insn ui } return nil } + +func handleHiLo(cpu *CpuScalars, registers *[32]uint32, fun uint32, rs uint32, rt uint32, storeReg uint32) error { + val := uint32(0) + switch fun { + case 0x10: // mfhi + val = cpu.HI + case 0x11: // mthi + cpu.HI = rs + case 0x12: // mflo + val = cpu.LO + case 0x13: // mtlo + cpu.LO = rs + case 0x18: // mult + acc := uint64(int64(int32(rs)) * int64(int32(rt))) + cpu.HI = uint32(acc >> 32) + cpu.LO = uint32(acc) + case 0x19: // multu + acc := uint64(uint64(rs) * uint64(rt)) + cpu.HI = uint32(acc >> 32) + cpu.LO = uint32(acc) + case 0x1a: // div + cpu.HI = uint32(int32(rs) % int32(rt)) + cpu.LO = uint32(int32(rs) / int32(rt)) + case 0x1b: // divu + cpu.HI = rs % rt + cpu.LO = rs / rt + } + + if storeReg != 0 { + registers[storeReg] = val + } + + cpu.PC = cpu.NextPC + cpu.NextPC = cpu.NextPC + 4 + return nil +} + +func handleJump(cpu *CpuScalars, registers *[32]uint32, linkReg uint32, dest uint32) error { + if cpu.NextPC != cpu.PC+4 { + panic("jump in delay slot") + } + prevPC := cpu.PC + cpu.PC = cpu.NextPC + cpu.NextPC = dest + if linkReg != 0 { + registers[linkReg] = prevPC + 8 // set the link-register to the instr after the delay slot instruction. + } + return nil +} + +func handleRd(cpu *CpuScalars, registers *[32]uint32, storeReg uint32, val uint32, conditional bool) error { + if storeReg >= 32 { + panic("invalid register") + } + if storeReg != 0 && conditional { + registers[storeReg] = val + } + cpu.PC = cpu.NextPC + cpu.NextPC = cpu.NextPC + 4 + return nil +} diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index 8bd01141969b..4fd8642287af 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -124,8 +124,8 @@ "sourceCodeHash": "0x3ff4a3f21202478935412d47fd5ef7f94a170402ddc50e5c062013ce5544c83f" }, "src/cannon/MIPS.sol": { - "initCodeHash": "0xf0fb656774ff761e2fd9adc523d4ee3dfad6fab63a37d4177543cfc98708b1be", - "sourceCodeHash": "0xe6a817aac69c149c24a9ab820853aae3c189eba337ab2e5c75a7cf458b45e308" + "initCodeHash": "0x1742f31c43d067f94e669e50e632875ba2a2795127ea5bf429acf7ed39ddbc48", + "sourceCodeHash": "0xa50b47ddaee92c52c5f7cfb4b526f9d734c2eec524e7bb609b991d608f124c02" }, "src/cannon/PreimageOracle.sol": { "initCodeHash": "0xe5db668fe41436f53995e910488c7c140766ba8745e19743773ebab508efd090", diff --git a/packages/contracts-bedrock/src/cannon/MIPS.sol b/packages/contracts-bedrock/src/cannon/MIPS.sol index 0035b5b736fa..b3b9cf2facf9 100644 --- a/packages/contracts-bedrock/src/cannon/MIPS.sol +++ b/packages/contracts-bedrock/src/cannon/MIPS.sol @@ -46,7 +46,7 @@ contract MIPS is ISemver { /// @notice The semantic version of the MIPS contract. /// @custom:semver 1.0.1 - string public constant version = "1.1.0-beta.2"; + string public constant version = "1.1.0-beta.3"; uint32 internal constant FD_STDIN = 0; uint32 internal constant FD_STDOUT = 1; @@ -302,146 +302,6 @@ contract MIPS is ISemver { } } - /// @notice Handles HI and LO register instructions. - /// @param _func The function code of the instruction. - /// @param _rs The value of the RS register. - /// @param _rt The value of the RT register. - /// @param _storeReg The register to store the result in. - /// @return out_ The hashed MIPS state. - function handleHiLo(uint32 _func, uint32 _rs, uint32 _rt, uint32 _storeReg) internal returns (bytes32 out_) { - unchecked { - // Load state from memory - State memory state; - assembly { - state := 0x80 - } - - uint32 val; - - // mfhi: Move the contents of the HI register into the destination - if (_func == 0x10) { - val = state.hi; - } - // mthi: Move the contents of the source into the HI register - else if (_func == 0x11) { - state.hi = _rs; - } - // mflo: Move the contents of the LO register into the destination - else if (_func == 0x12) { - val = state.lo; - } - // mtlo: Move the contents of the source into the LO register - else if (_func == 0x13) { - state.lo = _rs; - } - // mult: Multiplies `rs` by `rt` and stores the result in HI and LO registers - else if (_func == 0x18) { - uint64 acc = uint64(int64(int32(_rs)) * int64(int32(_rt))); - state.hi = uint32(acc >> 32); - state.lo = uint32(acc); - } - // multu: Unsigned multiplies `rs` by `rt` and stores the result in HI and LO registers - else if (_func == 0x19) { - uint64 acc = uint64(uint64(_rs) * uint64(_rt)); - state.hi = uint32(acc >> 32); - state.lo = uint32(acc); - } - // div: Divides `rs` by `rt`. - // Stores the quotient in LO - // And the remainder in HI - else if (_func == 0x1a) { - if (int32(_rt) == 0) { - revert("MIPS: division by zero"); - } - state.hi = uint32(int32(_rs) % int32(_rt)); - state.lo = uint32(int32(_rs) / int32(_rt)); - } - // divu: Unsigned divides `rs` by `rt`. - // Stores the quotient in LO - // And the remainder in HI - else if (_func == 0x1b) { - if (_rt == 0) { - revert("MIPS: division by zero"); - } - state.hi = _rs % _rt; - state.lo = _rs / _rt; - } - - // Store the result in the destination register, if applicable - if (_storeReg != 0) { - state.registers[_storeReg] = val; - } - - // Update the PC - state.pc = state.nextPC; - state.nextPC = state.nextPC + 4; - - // Return the hash of the resulting state - out_ = outputState(); - } - } - - /// @notice Handles a jump instruction, updating the MIPS state PC where needed. - /// @param _linkReg The register to store the link to the instruction after the delay slot instruction. - /// @param _dest The destination to jump to. - /// @return out_ The hashed MIPS state. - function handleJump(uint32 _linkReg, uint32 _dest) internal returns (bytes32 out_) { - unchecked { - // Load state from memory. - State memory state; - assembly { - state := 0x80 - } - - if (state.nextPC != state.pc + 4) { - revert("jump in delay slot"); - } - - // Update the next PC to the jump destination. - uint32 prevPC = state.pc; - state.pc = state.nextPC; - state.nextPC = _dest; - - // Update the link-register to the instruction after the delay slot instruction. - if (_linkReg != 0) { - state.registers[_linkReg] = prevPC + 8; - } - - // Return the hash of the resulting state. - out_ = outputState(); - } - } - - /// @notice Handles a storing a value into a register. - /// @param _storeReg The register to store the value into. - /// @param _val The value to store. - /// @param _conditional Whether or not the store is conditional. - /// @return out_ The hashed MIPS state. - function handleRd(uint32 _storeReg, uint32 _val, bool _conditional) internal returns (bytes32 out_) { - unchecked { - // Load state from memory. - State memory state; - assembly { - state := 0x80 - } - - // The destination register must be valid. - require(_storeReg < 32, "valid register"); - - // Never write to reg 0, and it can be conditional (movz, movn). - if (_storeReg != 0 && _conditional) { - state.registers[_storeReg] = _val; - } - - // Update the PC. - state.pc = state.nextPC; - state.nextPC = state.nextPC + 4; - - // Return the hash of the resulting state. - out_ = outputState(); - } - } - /// @notice Computes the offset of the proof in the calldata. /// @param _proofIndex The index of the proof in the calldata. /// @return offset_ The offset of the proof in the calldata. @@ -632,7 +492,7 @@ contract MIPS is ISemver { if (opcode == 2 || opcode == 3) { // Take top 4 bits of the next PC (its 256 MB region), and concatenate with the 26-bit offset uint32 target = (state.nextPC & 0xF0000000) | (insn & 0x03FFFFFF) << 2; - return handleJump(opcode == 2 ? 0 : 31, target); + return handleJumpAndReturnOutput(state, opcode == 2 ? 0 : 31, target); } // register fetch @@ -707,16 +567,16 @@ contract MIPS is ISemver { if (opcode == 0 && func >= 8 && func < 0x1c) { if (func == 8 || func == 9) { // jr/jalr - return handleJump(func == 8 ? 0 : rdReg, rs); + return handleJumpAndReturnOutput(state, func == 8 ? 0 : rdReg, rs); } if (func == 0xa) { // movz - return handleRd(rdReg, rs, rt == 0); + return handleRdAndReturnOutput(state, rdReg, rs, rt == 0); } if (func == 0xb) { // movn - return handleRd(rdReg, rs, rt != 0); + return handleRdAndReturnOutput(state, rdReg, rs, rt != 0); } // syscall (can read and write) @@ -727,7 +587,19 @@ contract MIPS is ISemver { // lo and hi registers // can write back if (func >= 0x10 && func < 0x1c) { - return handleHiLo(func, rs, rt, rdReg); + st.CpuScalars memory cpu = getCpuScalars(state); + + ins.handleHiLo({ + _cpu: cpu, + _registers: state.registers, + _func: func, + _rs: rs, + _rt: rt, + _storeReg: rdReg + }); + + setStateCpuScalars(state, cpu); + return outputState(); } } @@ -742,10 +614,49 @@ contract MIPS is ISemver { } // write back the value to destination register - return handleRd(rdReg, val, true); + return handleRdAndReturnOutput(state, rdReg, val, true); } } + function handleJumpAndReturnOutput( + State memory _state, + uint32 _linkReg, + uint32 _dest + ) + internal + returns (bytes32 out_) + { + st.CpuScalars memory cpu = getCpuScalars(_state); + + ins.handleJump({ _cpu: cpu, _registers: _state.registers, _linkReg: _linkReg, _dest: _dest }); + + setStateCpuScalars(_state, cpu); + return outputState(); + } + + function handleRdAndReturnOutput( + State memory _state, + uint32 _storeReg, + uint32 _val, + bool _conditional + ) + internal + returns (bytes32 out_) + { + st.CpuScalars memory cpu = getCpuScalars(_state); + + ins.handleRd({ + _cpu: cpu, + _registers: _state.registers, + _storeReg: _storeReg, + _val: _val, + _conditional: _conditional + }); + + setStateCpuScalars(_state, cpu); + return outputState(); + } + function getCpuScalars(State memory _state) internal pure returns (st.CpuScalars memory) { return st.CpuScalars({ pc: _state.pc, nextPC: _state.nextPC, lo: _state.lo, hi: _state.hi }); } diff --git a/packages/contracts-bedrock/src/cannon/libraries/MIPSInstructions.sol b/packages/contracts-bedrock/src/cannon/libraries/MIPSInstructions.sol index c48f78613af3..b90c5ea7371b 100644 --- a/packages/contracts-bedrock/src/cannon/libraries/MIPSInstructions.sol +++ b/packages/contracts-bedrock/src/cannon/libraries/MIPSInstructions.sol @@ -341,4 +341,147 @@ library MIPSInstructions { } } } + + /// @notice Handles HI and LO register instructions. + /// @param _cpu Holds the state of cpu scalars pc, nextPC, hi, lo. + /// @param _registers Holds the current state of the cpu registers. + /// @param _func The function code of the instruction. + /// @param _rs The value of the RS register. + /// @param _rt The value of the RT register. + /// @param _storeReg The register to store the result in. + function handleHiLo( + st.CpuScalars memory _cpu, + uint32[32] memory _registers, + uint32 _func, + uint32 _rs, + uint32 _rt, + uint32 _storeReg + ) + internal + pure + { + unchecked { + uint32 val = 0; + + // mfhi: Move the contents of the HI register into the destination + if (_func == 0x10) { + val = _cpu.hi; + } + // mthi: Move the contents of the source into the HI register + else if (_func == 0x11) { + _cpu.hi = _rs; + } + // mflo: Move the contents of the LO register into the destination + else if (_func == 0x12) { + val = _cpu.lo; + } + // mtlo: Move the contents of the source into the LO register + else if (_func == 0x13) { + _cpu.lo = _rs; + } + // mult: Multiplies `rs` by `rt` and stores the result in HI and LO registers + else if (_func == 0x18) { + uint64 acc = uint64(int64(int32(_rs)) * int64(int32(_rt))); + _cpu.hi = uint32(acc >> 32); + _cpu.lo = uint32(acc); + } + // multu: Unsigned multiplies `rs` by `rt` and stores the result in HI and LO registers + else if (_func == 0x19) { + uint64 acc = uint64(uint64(_rs) * uint64(_rt)); + _cpu.hi = uint32(acc >> 32); + _cpu.lo = uint32(acc); + } + // div: Divides `rs` by `rt`. + // Stores the quotient in LO + // And the remainder in HI + else if (_func == 0x1a) { + if (int32(_rt) == 0) { + revert("MIPS: division by zero"); + } + _cpu.hi = uint32(int32(_rs) % int32(_rt)); + _cpu.lo = uint32(int32(_rs) / int32(_rt)); + } + // divu: Unsigned divides `rs` by `rt`. + // Stores the quotient in LO + // And the remainder in HI + else if (_func == 0x1b) { + if (_rt == 0) { + revert("MIPS: division by zero"); + } + _cpu.hi = _rs % _rt; + _cpu.lo = _rs / _rt; + } + + // Store the result in the destination register, if applicable + if (_storeReg != 0) { + _registers[_storeReg] = val; + } + + // Update the PC + _cpu.pc = _cpu.nextPC; + _cpu.nextPC = _cpu.nextPC + 4; + } + } + + /// @notice Handles a jump instruction, updating the MIPS state PC where needed. + /// @param _cpu Holds the state of cpu scalars pc, nextPC, hi, lo. + /// @param _registers Holds the current state of the cpu registers. + /// @param _linkReg The register to store the link to the instruction after the delay slot instruction. + /// @param _dest The destination to jump to. + function handleJump( + st.CpuScalars memory _cpu, + uint32[32] memory _registers, + uint32 _linkReg, + uint32 _dest + ) + internal + pure + { + unchecked { + if (_cpu.nextPC != _cpu.pc + 4) { + revert("jump in delay slot"); + } + + // Update the next PC to the jump destination. + uint32 prevPC = _cpu.pc; + _cpu.pc = _cpu.nextPC; + _cpu.nextPC = _dest; + + // Update the link-register to the instruction after the delay slot instruction. + if (_linkReg != 0) { + _registers[_linkReg] = prevPC + 8; + } + } + } + + /// @notice Handles a storing a value into a register. + /// @param _cpu Holds the state of cpu scalars pc, nextPC, hi, lo. + /// @param _registers Holds the current state of the cpu registers. + /// @param _storeReg The register to store the value into. + /// @param _val The value to store. + /// @param _conditional Whether or not the store is conditional. + function handleRd( + st.CpuScalars memory _cpu, + uint32[32] memory _registers, + uint32 _storeReg, + uint32 _val, + bool _conditional + ) + internal + pure + { + unchecked { + // The destination register must be valid. + require(_storeReg < 32, "valid register"); + + // Never write to reg 0, and it can be conditional (movz, movn). + if (_storeReg != 0 && _conditional) { + _registers[_storeReg] = _val; + } + + // Update the PC. + _cpu.pc = _cpu.nextPC; + _cpu.nextPC = _cpu.nextPC + 4; + } + } } diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol index 0cc9f5efd2ce..39159fd6e89f 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol @@ -25,7 +25,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { address internal constant l1ERC721BridgeProxyAddress = 0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865; address internal constant l1StandardBridgeAddress = 0xb7900B27Be8f0E0fF65d1C3A4671e1220437dd2b; address internal constant l1StandardBridgeProxyAddress = 0xDeF3bca8c80064589E6787477FFa7Dd616B5574F; - address internal constant mipsAddress = 0x477508A9612B67709Caf812D4356d531ba6a471d; + address internal constant mipsAddress = 0x49E77cdE01fFBAB1266813b9a2FaADc1B757F435; address internal constant optimismPortal2Address = 0xfcbb237388CaF5b08175C9927a37aB6450acd535; address internal constant optimismPortalProxyAddress = 0x978e3286EB805934215a88694d80b09aDed68D90; address internal constant preimageOracleAddress = 0x3bd7E801E51d48c5d94Ea68e8B801DFFC275De75; diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol index fca8e2cab5a0..3865be0f0f04 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol @@ -55,11 +55,11 @@ contract DeploymentSummaryFaultProofsCode { bytes internal constant preimageOracleCode = hex"6080604052600436106101cd5760003560e01c80638dc4be11116100f7578063dd24f9bf11610095578063ec5efcbc11610064578063ec5efcbc1461065f578063f3f480d91461067f578063faf37bc7146106b2578063fef2b4ed146106c557600080fd5b8063dd24f9bf1461059f578063ddcd58de146105d2578063e03110e11461060a578063e15926111461063f57600080fd5b8063b2e67ba8116100d1578063b2e67ba814610512578063b4801e611461054a578063d18534b51461056a578063da35c6641461058a57600080fd5b80638dc4be11146104835780639d53a648146104a35780639d7e8769146104f257600080fd5b806354fd4d501161016f5780637917de1d1161013e5780637917de1d146103bf5780637ac54767146103df5780638542cf50146103ff578063882856ef1461044a57600080fd5b806354fd4d50146102dd57806361238bde146103335780636551927b1461036b5780637051472e146103a357600080fd5b80632055b36b116101ab5780632055b36b146102735780633909af5c146102885780634d52b4c9146102a857806352f0f3ad146102bd57600080fd5b8063013cf08b146101d25780630359a5631461022357806304697c7814610251575b600080fd5b3480156101de57600080fd5b506101f26101ed366004612d2f565b6106f2565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b34801561022f57600080fd5b5061024361023e366004612d71565b610737565b60405190815260200161021a565b34801561025d57600080fd5b5061027161026c366004612de4565b61086f565b005b34801561027f57600080fd5b50610243601081565b34801561029457600080fd5b506102716102a3366004613008565b6109a5565b3480156102b457600080fd5b50610243610bfc565b3480156102c957600080fd5b506102436102d83660046130f4565b610c17565b3480156102e957600080fd5b506103266040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161021a919061315b565b34801561033f57600080fd5b5061024361034e3660046131ac565b600160209081526000928352604080842090915290825290205481565b34801561037757600080fd5b50610243610386366004612d71565b601560209081526000928352604080842090915290825290205481565b3480156103af57600080fd5b506102436703782dace9d9000081565b3480156103cb57600080fd5b506102716103da3660046131ce565b610cec565b3480156103eb57600080fd5b506102436103fa366004612d2f565b6111ef565b34801561040b57600080fd5b5061043a61041a3660046131ac565b600260209081526000928352604080842090915290825290205460ff1681565b604051901515815260200161021a565b34801561045657600080fd5b5061046a61046536600461326a565b611206565b60405167ffffffffffffffff909116815260200161021a565b34801561048f57600080fd5b5061027161049e36600461329d565b611260565b3480156104af57600080fd5b506102436104be366004612d71565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601860209081526040808320938352929052205490565b3480156104fe57600080fd5b5061027161050d3660046132e9565b61135b565b34801561051e57600080fd5b5061024361052d366004612d71565b601760209081526000928352604080842090915290825290205481565b34801561055657600080fd5b5061024361056536600461326a565b611512565b34801561057657600080fd5b50610271610585366004613008565b611544565b34801561059657600080fd5b50601354610243565b3480156105ab57600080fd5b507f0000000000000000000000000000000000000000000000000000000000002710610243565b3480156105de57600080fd5b506102436105ed366004612d71565b601660209081526000928352604080842090915290825290205481565b34801561061657600080fd5b5061062a6106253660046131ac565b611906565b6040805192835260208301919091520161021a565b34801561064b57600080fd5b5061027161065a36600461329d565b6119f7565b34801561066b57600080fd5b5061027161067a366004613375565b611aff565b34801561068b57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000078610243565b6102716106c036600461340e565b611c85565b3480156106d157600080fd5b506102436106e0366004612d2f565b60006020819052908152604090205481565b6013818154811061070257600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601560209081526040808320848452909152812054819061077a9060601c63ffffffff1690565b63ffffffff16905060005b6010811015610867578160011660010361080d5773ffffffffffffffffffffffffffffffffffffffff85166000908152601460209081526040808320878452909152902081601081106107da576107da61344a565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925061084e565b82600382601081106108215761082161344a565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c908061085f816134a8565b915050610785565b505092915050565b600080600080608060146030823785878260140137601480870182207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06000000000000000000000000000000000000000000000000000000000000001794506000908190889084018b5afa94503d60010191506008820189106108fc5763fe2549876000526004601cfd5b60c082901b81526008018481533d6000600183013e88017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8015160008481526002602090815260408083208c8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915587845282528083209b83529a81528a82209290925593845283905296909120959095555050505050565b60006109b18a8a610737565b90506109d486868360208b01356109cf6109ca8d6134e0565b611ef0565b611f30565b80156109f257506109f283838360208801356109cf6109ca8a6134e0565b610a28576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866040013588604051602001610a3e91906135af565b6040516020818303038152906040528051906020012014610a8b576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836020013587602001356001610aa191906135ed565b14610ad8576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b2088610ae68680613605565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f9192505050565b610b29886120ec565b836040013588604051602001610b3f91906135af565b6040516020818303038152906040528051906020012003610b8c576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526015602090815260408083208c8452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055610bf08a8a33612894565b50505050505050505050565b6001610c0a6010600261378c565b610c149190613798565b81565b6000610c23868661294d565b9050610c308360086135ed565b821180610c3d5750602083115b15610c74576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b60608115610d0557610cfe86866129fa565b9050610d3f565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b815481526020019060010190808311610d6c57505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610ded8260601c63ffffffff1690565b63ffffffff169050333214610e2e576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e3e8260801c63ffffffff1690565b63ffffffff16600003610e7d576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e878260c01c90565b67ffffffffffffffff1615610ec8576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610f01576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f0e89898d8886612a73565b83516020850160888204881415608883061715610f33576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610fe3578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610fd8576001821615610fb85782818b0152610fd8565b8981015160009081526020938452604090209260019290921c9101610f9b565b505050608801610f40565b50505050600160106002610ff7919061378c565b6110019190613798565b81111561103a576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110af61104d8360401c63ffffffff1690565b61105d9063ffffffff168a6135ed565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b9150841561113c5777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b1791506110e98260801c63ffffffff1690565b63ffffffff166110ff8360401c63ffffffff1690565b63ffffffff161461113c576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083208e8452909152902061116290846010612ca5565b503360008181526018602090815260408083208f8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055838352601582528083208f8452909152812084905560609190911b81523690601437366014016000a05050505050505050505050565b600381601081106111ff57600080fd5b0154905081565b6018602052826000526040600020602052816000526040600020818154811061122e57600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b60443560008060088301861061127e5763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa9050806112ab57600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b600080603087600037602060006030600060025afa806113835763f91129696000526004601cfd5b6000517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017608081815260a08c905260c08b905260308a60e037603088609083013760008060c083600a5afa925082611405576309bde3396000526004601cfd5b6028861061141b5763fe2549876000526004601cfd5b6000602882015278200000000000000000000000000000000000000000000000008152600881018b905285810151935060308a8237603081019b909b52505060509098207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0500000000000000000000000000000000000000000000000000000000000000176000818152600260209081526040808320868452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209583529481528482209a909a559081528089529190912096909655505050505050565b6014602052826000526040600020602052816000526040600020816010811061153a57600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff8116156115b7576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000786115e28260c01c90565b6115f69067ffffffffffffffff1642613798565b1161162d576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116398b8b610737565b905061165287878360208c01356109cf6109ca8e6134e0565b8015611670575061167084848360208901356109cf6109ca8b6134e0565b6116a6576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016116bc91906135af565b6040516020818303038152906040528051906020012014611709576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84602001358860200135600161171f91906135ed565b141580611751575060016117398360601c63ffffffff1690565b61174391906137af565b63ffffffff16856020013514155b15611788576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61179689610ae68780613605565b61179f896120ec565b60006117aa8a612bc6565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f020000000000000000000000000000000000000000000000000000000000000017905060006118018460a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601760008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d815260200190815260200160002054600160008481526020019081526020016000206000838152602001908152602001600020819055506118d38460801c63ffffffff1690565b600083815260208190526040902063ffffffff9190911690556118f78d8d81612894565b50505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff1661198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546119ab8160086135ed565b6119b68560206135ed565b106119d457836119c78260086135ed565b6119d19190613798565b91505b506000938452600160209081526040808620948652939052919092205492909150565b604435600080600883018610611a155763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b6000611b0b8686610737565b9050611b2483838360208801356109cf6109ca8a6134e0565b611b5a576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084013515611b96576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b9e612ce3565b611bac81610ae68780613605565b611bb5816120ec565b846040013581604051602001611bcb91906135af565b6040516020818303038152906040528051906020012003611c18576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166000908152601560209081526040808320898452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055611c7c878733612894565b50505050505050565b6703782dace9d90000341015611cc7576040517fe92c469f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333214611d00576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d0b8160086137d4565b63ffffffff168263ffffffff1610611d4f576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000027108163ffffffff161015611daf576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b949094179094558251808401845282815280850186815260138054600181018255908452915160029092027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9094167fffffffffffffffffffffffff000000000000000000000000000000000000000090941693909317909255517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0919091015590815260168352818120938152929091529020349055565b6000816000015182602001518360400151604051602001611f13939291906137fc565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611f84578060051b880135600186831c1660018114611f695760008481526020839052604090209350611f7a565b600082815260208590526040902093505b5050600101611f36565b5090931495945050505050565b6088815114611f9f57600080fd5b6020810160208301612020565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b171717905061201a81612005868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b61202c60008383611fac565b61203860018383611fac565b61204460028383611fac565b61205060038383611fac565b61205c60048383611fac565b61206860058383611fac565b61207460068383611fac565b61208060078383611fac565b61208c60088383611fac565b61209860098383611fac565b6120a4600a8383611fac565b6120b0600b8383611fac565b6120bc600c8383611fac565b6120c8600d8383611fac565b6120d4600e8383611fac565b6120e0600f8383611fac565b61201a60108383611fac565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e00160405160208183030381529060405290506020820160208201612774565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c61229f8660011b67ffffffffffffffff1690565b18188584603f1c6122ba8660011b67ffffffffffffffff1690565b18188584603f1c6122d58660011b67ffffffffffffffff1690565b181895508483603f1c6122f28560011b67ffffffffffffffff1690565b181894508387603f1c61230f8960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525b5050505050565b600582811b8201805160018501831b8401805160028701851b8601805160038901871b8801805160048b0190981b8901805167ffffffffffffffff861985168918811690995283198a16861889169096528819861683188816909352841986168818871690528419831684189095169052919391929190611c7c565b61270e600082612687565b612719600582612687565b612724600a82612687565b61272f600f82612687565b61273a601482612687565b50565b612746816121e2565b61274f81612703565b600383901b820151815160c09190911c9061201a90821867ffffffffffffffff168352565b6127806000828461273d565b61278c6001828461273d565b6127986002828461273d565b6127a46003828461273d565b6127b06004828461273d565b6127bc6005828461273d565b6127c86006828461273d565b6127d46007828461273d565b6127e06008828461273d565b6127ec6009828461273d565b6127f8600a828461273d565b612804600b828461273d565b612810600c828461273d565b61281c600d828461273d565b612828600e828461273d565b612834600f828461273d565b6128406010828461273d565b61284c6011828461273d565b6128586012828461273d565b6128646013828461273d565b6128706014828461273d565b61287c6015828461273d565b6128886016828461273d565b61201a6017828461273d565b73ffffffffffffffffffffffffffffffffffffffff83811660009081526016602090815260408083208684529091528082208054908390559051909284169083908381818185875af1925050503d806000811461290d576040519150601f19603f3d011682016040523d82523d6000602084013e612912565b606091505b5050905080612680576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316176129f3818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b6060604051905081602082018181018286833760888306808015612a435760888290038501848101848103803687375060806001820353506001845160001a1784538652612a5a565b608836843760018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b6000612a858260a01c63ffffffff1690565b67ffffffffffffffff1690506000612aa38360801c63ffffffff1690565b63ffffffff1690506000612abd8460401c63ffffffff1690565b63ffffffff169050600883108015612ad3575080155b15612b075760c082901b6000908152883560085283513382526017602090815260408084208a855290915290912055612bbc565b60088310158015612b25575080612b1f600885613798565b93508310155b8015612b395750612b3687826135ed565b83105b15612bbc576000612b4a8285613798565b905087612b588260206135ed565b10158015612b64575085155b15612b9b576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526017602090815260408083208a845290915290209089013590555b5050505050505050565b6000612c49565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff00612bf78360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff0000612c248360101b67ffffffffffffffff1690565b1617905060008160201c612c428360201b67ffffffffffffffff1690565b1792915050565b60808201516020830190612c6190612bcd565b612bcd565b6040820151612c6f90612bcd565b60401b17612c87612c5c60018460059190911b015190565b825160809190911b90612c9990612bcd565b60c01b17179392505050565b8260108101928215612cd3579160200282015b82811115612cd3578251825591602001919060010190612cb8565b50612cdf929150612cfb565b5090565b6040518060200160405280612cf6612d10565b905290565b5b80821115612cdf5760008155600101612cfc565b6040518061032001604052806019906020820280368337509192915050565b600060208284031215612d4157600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612d6c57600080fd5b919050565b60008060408385031215612d8457600080fd5b612d8d83612d48565b946020939093013593505050565b60008083601f840112612dad57600080fd5b50813567ffffffffffffffff811115612dc557600080fd5b602083019150836020828501011115612ddd57600080fd5b9250929050565b60008060008060608587031215612dfa57600080fd5b84359350612e0a60208601612d48565b9250604085013567ffffffffffffffff811115612e2657600080fd5b612e3287828801612d9b565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff81118282101715612e9157612e91612e3e565b60405290565b6040516060810167ffffffffffffffff81118282101715612e9157612e91612e3e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612f0157612f01612e3e565b604052919050565b6000610320808385031215612f1d57600080fd5b604051602080820167ffffffffffffffff8382108183111715612f4257612f42612e3e565b8160405283955087601f880112612f5857600080fd5b612f60612e6d565b9487019491508188861115612f7457600080fd5b875b86811015612f9c5780358381168114612f8f5760008081fd5b8452928401928401612f76565b50909352509295945050505050565b600060608284031215612fbd57600080fd5b50919050565b60008083601f840112612fd557600080fd5b50813567ffffffffffffffff811115612fed57600080fd5b6020830191508360208260051b8501011115612ddd57600080fd5b60008060008060008060008060006103e08a8c03121561302757600080fd5b6130308a612d48565b985060208a013597506130468b60408c01612f09565b96506103608a013567ffffffffffffffff8082111561306457600080fd5b6130708d838e01612fab565b97506103808c013591508082111561308757600080fd5b6130938d838e01612fc3565b90975095506103a08c01359150808211156130ad57600080fd5b6130b98d838e01612fab565b94506103c08c01359150808211156130d057600080fd5b506130dd8c828d01612fc3565b915080935050809150509295985092959850929598565b600080600080600060a0868803121561310c57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60005b8381101561314a578181015183820152602001613132565b8381111561201a5750506000910152565b602081526000825180602084015261317a81604085016020870161312f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080604083850312156131bf57600080fd5b50508035926020909101359150565b600080600080600080600060a0888a0312156131e957600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561320f57600080fd5b61321b8b838c01612d9b565b909750955060608a013591508082111561323457600080fd5b506132418a828b01612fc3565b9094509250506080880135801515811461325a57600080fd5b8091505092959891949750929550565b60008060006060848603121561327f57600080fd5b61328884612d48565b95602085013595506040909401359392505050565b6000806000604084860312156132b257600080fd5b83359250602084013567ffffffffffffffff8111156132d057600080fd5b6132dc86828701612d9b565b9497909650939450505050565b600080600080600080600060a0888a03121561330457600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561332a57600080fd5b6133368b838c01612d9b565b909750955060608a013591508082111561334f57600080fd5b5061335c8a828b01612d9b565b989b979a50959894979596608090950135949350505050565b60008060008060006080868803121561338d57600080fd5b61339686612d48565b945060208601359350604086013567ffffffffffffffff808211156133ba57600080fd5b6133c689838a01612fab565b945060608801359150808211156133dc57600080fd5b506133e988828901612fc3565b969995985093965092949392505050565b803563ffffffff81168114612d6c57600080fd5b60008060006060848603121561342357600080fd5b83359250613433602085016133fa565b9150613441604085016133fa565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036134d9576134d9613479565b5060010190565b6000606082360312156134f257600080fd5b6134fa612e97565b823567ffffffffffffffff8082111561351257600080fd5b9084019036601f83011261352557600080fd5b813560208282111561353957613539612e3e565b613569817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612eba565b9250818352368183860101111561357f57600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b60198110156135e457825167ffffffffffffffff168252602092830192909101906001016135bb565b50505092915050565b6000821982111561360057613600613479565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261363a57600080fd5b83018035915067ffffffffffffffff82111561365557600080fd5b602001915036819003821315612ddd57600080fd5b600181815b808511156136c357817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156136a9576136a9613479565b808516156136b657918102915b93841c939080029061366f565b509250929050565b6000826136da57506001613786565b816136e757506000613786565b81600181146136fd576002811461370757613723565b6001915050613786565b60ff84111561371857613718613479565b50506001821b613786565b5060208310610133831016604e8410600b8410161715613746575081810a613786565b613750838361366a565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561378257613782613479565b0290505b92915050565b60006129f383836136cb565b6000828210156137aa576137aa613479565b500390565b600063ffffffff838116908316818110156137cc576137cc613479565b039392505050565b600063ffffffff8083168185168083038211156137f3576137f3613479565b01949350505050565b6000845161380e81846020890161312f565b9190910192835250602082015260400191905056fea164736f6c634300080f000a"; bytes internal constant mipsCode = - hex"608060405234801561001057600080fd5b506004361061004c5760003560e01c8063155633fe1461005157806354fd4d50146100765780637dc0d1d0146100bf578063e14ced3214610103575b600080fd5b61005c634000000081565b60405163ffffffff90911681526020015b60405180910390f35b6100b26040518060400160405280600c81526020017f312e312e302d626574612e32000000000000000000000000000000000000000081525081565b60405161006d9190611eb4565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de7516815260200161006d565b610116610111366004611f70565b610124565b60405190815260200161006d565b600061012e611e2a565b6080811461013b57600080fd5b6040516106001461014b57600080fd5b6084871461015857600080fd5b6101a4851461016657600080fd5b8635608052602087013560a052604087013560e090811c60c09081526044890135821c82526048890135821c61010052604c890135821c610120526050890135821c61014052605489013590911c61016052605888013560f890811c610180526059890135901c6101a052605a880135901c6101c0526102006101e0819052606288019060005b602081101561021157823560e01c82526004909201916020909101906001016101ed565b5050508061012001511561022f5761022761072f565b915050610726565b6101408101805160010167ffffffffffffffff1690526060810151600090610257908261084b565b9050603f601a82901c16600281148061027657508063ffffffff166003145b156102cb5760006002836303ffffff1663ffffffff16901b846080015163f0000000161790506102c08263ffffffff166002146102b457601f6102b7565b60005b60ff1682610907565b945050505050610726565b6101608301516000908190601f601086901c81169190601587901c16602081106102f7576102f7611fe4565b602002015192508063ffffffff8516158061031857508463ffffffff16601c145b1561034f578661016001518263ffffffff166020811061033a5761033a611fe4565b6020020151925050601f600b86901c1661040b565b60208563ffffffff1610156103b1578463ffffffff16600c148061037957508463ffffffff16600d145b8061038a57508463ffffffff16600e145b1561039b578561ffff16925061040b565b6103aa8661ffff1660106109f8565b925061040b565b60288563ffffffff161015806103cd57508463ffffffff166022145b806103de57508463ffffffff166026145b1561040b578661016001518263ffffffff166020811061040057610400611fe4565b602002015192508190505b60048563ffffffff1610158015610428575060088563ffffffff16105b8061043957508463ffffffff166001145b156105185760006104b8886040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b90506104cd81896101600151888a878a610a6b565b805163ffffffff9081166060808b01919091526020830151821660808b01526040830151821660a08b01528201511660c089015261050961072f565b98505050505050505050610726565b63ffffffff600060208783161061057d576105388861ffff1660106109f8565b9095019463fffffffc861661054e81600161084b565b915060288863ffffffff161015801561056e57508763ffffffff16603014155b1561057b57809250600093505b505b600061058b89888885610c59565b63ffffffff9081169150603f8a169089161580156105b0575060088163ffffffff1610155b80156105c25750601c8163ffffffff16105b1561069f578063ffffffff16600814806105e257508063ffffffff166009145b15610619576106078163ffffffff166008146105fe5785610601565b60005b89610907565b9b505050505050505050505050610726565b8063ffffffff16600a0361063957610607858963ffffffff8a16156113e9565b8063ffffffff16600b0361065a57610607858963ffffffff8a1615156113e9565b8063ffffffff16600c03610671576106078d6114cf565b60108163ffffffff161015801561068e5750601c8163ffffffff16105b1561069f5761060781898988611a06565b8863ffffffff1660381480156106ba575063ffffffff861615155b156106ef5760018b61016001518763ffffffff16602081106106de576106de611fe4565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff1461070c5761070c84600184611cdd565b610718858360016113e9565b9b5050505050505050505050505b95945050505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019190855b60208110156107ce57601c86015184526020909501946004909301926001016107aa565b506000835283830384a06000945080600181146107ee5760039550610816565b828015610806576001811461080f5760029650610814565b60009650610814565b600196505b505b50505081900390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89190911b17919050565b60008061085783611d81565b9050600384161561086757600080fd5b6020810190358460051c8160005b601b8110156108cd5760208501943583821c600116801561089d57600181146108b2576108c3565b600084815260208390526040902093506108c3565b600082815260208590526040902093505b5050600101610875565b5060805191508181146108e857630badf00d60005260206000fd5b5050601f94909416601c0360031b9390931c63ffffffff169392505050565b6000610911611e2a565b60809050806060015160040163ffffffff16816080015163ffffffff161461099a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b60608101805160808301805163ffffffff9081169093528583169052908516156109f057806008018261016001518663ffffffff16602081106109df576109df611fe4565b63ffffffff90921660209290920201525b61072661072f565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b0182610a55576000610a57565b815b90861663ffffffff16179250505092915050565b6000866000015160040163ffffffff16876020015163ffffffff1614610aed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f740000000000000000000000006044820152606401610991565b8463ffffffff1660041480610b0857508463ffffffff166005145b15610b7f576000868463ffffffff1660208110610b2757610b27611fe4565b602002015190508063ffffffff168363ffffffff16148015610b4f57508563ffffffff166004145b80610b7757508063ffffffff168363ffffffff1614158015610b7757508563ffffffff166005145b915050610bfc565b8463ffffffff16600603610b9c5760008260030b13159050610bfc565b8463ffffffff16600703610bb85760008260030b139050610bfc565b8463ffffffff16600103610bfc57601f601085901c166000819003610be15760008360030b1291505b8063ffffffff16600103610bfa5760008360030b121591505b505b8651602088015163ffffffff1688528115610c3d576002610c228661ffff1660106109f8565b63ffffffff90811690911b8201600401166020890152610c4f565b60208801805160040163ffffffff1690525b5050505050505050565b6000603f601a86901c16801580610c88575060088163ffffffff1610158015610c885750600f8163ffffffff16105b156110de57603f86168160088114610ccf5760098114610cd857600a8114610ce157600b8114610cea57600c8114610cf357600d8114610cfc57600e8114610d0557610d0a565b60209150610d0a565b60219150610d0a565b602a9150610d0a565b602b9150610d0a565b60249150610d0a565b60259150610d0a565b602691505b508063ffffffff16600003610d315750505063ffffffff8216601f600686901c161b6113e1565b8063ffffffff16600203610d575750505063ffffffff8216601f600686901c161c6113e1565b8063ffffffff16600303610d8d57601f600688901c16610d8363ffffffff8716821c60208390036109f8565b93505050506113e1565b8063ffffffff16600403610daf5750505063ffffffff8216601f84161b6113e1565b8063ffffffff16600603610dd15750505063ffffffff8216601f84161c6113e1565b8063ffffffff16600703610e0457610dfb8663ffffffff168663ffffffff16901c876020036109f8565b925050506113e1565b8063ffffffff16600803610e1c5785925050506113e1565b8063ffffffff16600903610e345785925050506113e1565b8063ffffffff16600a03610e4c5785925050506113e1565b8063ffffffff16600b03610e645785925050506113e1565b8063ffffffff16600c03610e7c5785925050506113e1565b8063ffffffff16600f03610e945785925050506113e1565b8063ffffffff16601003610eac5785925050506113e1565b8063ffffffff16601103610ec45785925050506113e1565b8063ffffffff16601203610edc5785925050506113e1565b8063ffffffff16601303610ef45785925050506113e1565b8063ffffffff16601803610f0c5785925050506113e1565b8063ffffffff16601903610f245785925050506113e1565b8063ffffffff16601a03610f3c5785925050506113e1565b8063ffffffff16601b03610f545785925050506113e1565b8063ffffffff16602003610f6d575050508282016113e1565b8063ffffffff16602103610f86575050508282016113e1565b8063ffffffff16602203610f9f575050508183036113e1565b8063ffffffff16602303610fb8575050508183036113e1565b8063ffffffff16602403610fd1575050508282166113e1565b8063ffffffff16602503610fea575050508282176113e1565b8063ffffffff16602603611003575050508282186113e1565b8063ffffffff1660270361101d57505050828217196113e1565b8063ffffffff16602a0361104e578460030b8660030b1261103f576000611042565b60015b60ff16925050506113e1565b8063ffffffff16602b03611076578463ffffffff168663ffffffff161061103f576000611042565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e000000000000000000000000006044820152606401610991565b50611076565b8063ffffffff16601c0361116257603f86166002819003611104575050508282026113e1565b8063ffffffff166020148061111f57508063ffffffff166021145b156110d8578063ffffffff16602003611136579419945b60005b6380000000871615611158576401fffffffe600197881b169601611139565b92506113e1915050565b8063ffffffff16600f0361118457505065ffffffff0000601083901b166113e1565b8063ffffffff166020036111c0576111b88560031660080260180363ffffffff168463ffffffff16901c60ff1660086109f8565b9150506113e1565b8063ffffffff166021036111f5576111b88560021660080260100363ffffffff168463ffffffff16901c61ffff1660106109f8565b8063ffffffff1660220361122457505063ffffffff60086003851602811681811b198416918316901b176113e1565b8063ffffffff1660230361123b57829150506113e1565b8063ffffffff1660240361126d578460031660080260180363ffffffff168363ffffffff16901c60ff169150506113e1565b8063ffffffff166025036112a0578460021660080260100363ffffffff168363ffffffff16901c61ffff169150506113e1565b8063ffffffff166026036112d257505063ffffffff60086003851602601803811681811c198416918316901c176113e1565b8063ffffffff1660280361130857505060ff63ffffffff60086003861602601803811682811b9091188316918416901b176113e1565b8063ffffffff1660290361133f57505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b176113e1565b8063ffffffff16602a0361136e57505063ffffffff60086003851602811681811c198316918416901c176113e1565b8063ffffffff16602b0361138557839150506113e1565b8063ffffffff16602e036113b757505063ffffffff60086003851602601803811681811b198316918416901b176113e1565b8063ffffffff166030036113ce57829150506113e1565b8063ffffffff1660380361107657839150505b949350505050565b60006113f3611e2a565b506080602063ffffffff861610611466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c69642072656769737465720000000000000000000000000000000000006044820152606401610991565b63ffffffff8516158015906114785750825b156114ac57838161016001518663ffffffff166020811061149b5761149b611fe4565b63ffffffff90921660209290920201525b60808101805163ffffffff8082166060850152600490910116905261072661072f565b60006114d9611e2a565b506101e051604081015160808083015160a084015160c09094015191936000928392919063ffffffff8616610ffa036115535781610fff81161561152257610fff811661100003015b8363ffffffff166000036115495760e08801805163ffffffff83820116909152955061154d565b8395505b506119c5565b8563ffffffff16610fcd0361156e57634000000094506119c5565b8563ffffffff166110180361158657600194506119c5565b8563ffffffff16611096036115bc57600161012088015260ff83166101008801526115af61072f565b9998505050505050505050565b8563ffffffff16610fa3036118285763ffffffff8316156119c5577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8416016117e25760006116178363fffffffc16600161084b565b60208901519091508060001a60010361168657604080516000838152336020528d83526060902091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790505b6040808a015190517fe03110e10000000000000000000000000000000000000000000000000000000081526004810183905263ffffffff9091166024820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de75169063e03110e1906044016040805180830381865afa158015611727573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174b9190612013565b91509150600386168060040382811015611763578092505b5081861015611770578591505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b039150811981169050838119871617955050506117c78663fffffffc16600186611cdd565b60408b018051820163ffffffff169052975061182392505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff841601611817578094506119c5565b63ffffffff9450600993505b6119c5565b8563ffffffff16610fa4036119195763ffffffff831660011480611852575063ffffffff83166002145b80611863575063ffffffff83166004145b15611870578094506119c5565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff8416016118175760006118b08363fffffffc16600161084b565b602089015190915060038416600403838110156118cb578093505b83900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193850293841b0116911b176020880152600060408801529350836119c5565b8563ffffffff16610fd7036119c5578163ffffffff166003036119b95763ffffffff8316158061194f575063ffffffff83166005145b80611960575063ffffffff83166003145b1561196e57600094506119c5565b63ffffffff831660011480611989575063ffffffff83166002145b8061199a575063ffffffff83166006145b806119ab575063ffffffff83166004145b1561181757600194506119c5565b63ffffffff9450601693505b6101608701805163ffffffff808816604090920191909152905185821660e09091015260808801805180831660608b015260040190911690526115af61072f565b6000611a10611e2a565b506080600063ffffffff8716601003611a2e575060c0810151611c74565b8663ffffffff16601103611a4d5763ffffffff861660c0830152611c74565b8663ffffffff16601203611a66575060a0810151611c74565b8663ffffffff16601303611a855763ffffffff861660a0830152611c74565b8663ffffffff16601803611ab95763ffffffff600387810b9087900b02602081901c821660c08501521660a0830152611c74565b8663ffffffff16601903611aea5763ffffffff86811681871602602081901c821660c08501521660a0830152611c74565b8663ffffffff16601a03611bad578460030b600003611b65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f000000000000000000006044820152606401610991565b8460030b8660030b81611b7a57611b7a612037565b0763ffffffff1660c0830152600385810b9087900b81611b9c57611b9c612037565b0563ffffffff1660a0830152611c74565b8663ffffffff16601b03611c74578463ffffffff16600003611c2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f000000000000000000006044820152606401610991565b8463ffffffff168663ffffffff1681611c4657611c46612037565b0663ffffffff90811660c084015285811690871681611c6757611c67612037565b0463ffffffff1660a08301525b63ffffffff841615611caf57808261016001518563ffffffff1660208110611c9e57611c9e611fe4565b63ffffffff90921660209290920201525b60808201805163ffffffff80821660608601526004909101169052611cd261072f565b979650505050505050565b6000611ce883611d81565b90506003841615611cf857600080fd5b6020810190601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611d765760208401933582821c6001168015611d465760018114611d5b57611d6c565b60008581526020839052604090209450611d6c565b600082815260208690526040902094505b5050600101611d1e565b505060805250505050565b60ff8116610380026101a4810190369061052401811015611e24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f61746100000000000000000000000000000000000000000000000000000000006064820152608401610991565b50919050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101611e90611e95565b905290565b6040518061040001604052806020906020820280368337509192915050565b600060208083528351808285015260005b81811015611ee157858101830151858201604001528201611ec5565b81811115611ef3576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008083601f840112611f3957600080fd5b50813567ffffffffffffffff811115611f5157600080fd5b602083019150836020828501011115611f6957600080fd5b9250929050565b600080600080600060608688031215611f8857600080fd5b853567ffffffffffffffff80821115611fa057600080fd5b611fac89838a01611f27565b90975095506020880135915080821115611fc557600080fd5b50611fd288828901611f27565b96999598509660400135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000806040838503121561202657600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a"; + hex"608060405234801561001057600080fd5b506004361061004c5760003560e01c8063155633fe1461005157806354fd4d50146100765780637dc0d1d0146100bf578063e14ced3214610103575b600080fd5b61005c634000000081565b60405163ffffffff90911681526020015b60405180910390f35b6100b26040518060400160405280600c81526020017f312e312e302d626574612e33000000000000000000000000000000000000000081525081565b60405161006d91906120dd565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de7516815260200161006d565b610116610111366004612199565b610124565b60405190815260200161006d565b600061012e612053565b6080811461013b57600080fd5b6040516106001461014b57600080fd5b6084871461015857600080fd5b6101a4851461016657600080fd5b8635608052602087013560a052604087013560e090811c60c09081526044890135821c82526048890135821c61010052604c890135821c610120526050890135821c61014052605489013590911c61016052605888013560f890811c610180526059890135901c6101a052605a880135901c6101c0526102006101e0819052606288019060005b602081101561021157823560e01c82526004909201916020909101906001016101ed565b5050508061012001511561022f57610227610806565b9150506107fd565b6101408101805160010167ffffffffffffffff16905260608101516000906102579082610922565b9050603f601a82901c16600281148061027657508063ffffffff166003145b156102cc5760006002836303ffffff1663ffffffff16901b846080015163f0000000161790506102c1848363ffffffff166002146102b557601f6102b8565b60005b60ff16836109de565b9450505050506107fd565b6101608301516000908190601f601086901c81169190601587901c16602081106102f8576102f861220d565b602002015192508063ffffffff8516158061031957508463ffffffff16601c145b15610350578661016001518263ffffffff166020811061033b5761033b61220d565b6020020151925050601f600b86901c1661040c565b60208563ffffffff1610156103b2578463ffffffff16600c148061037a57508463ffffffff16600d145b8061038b57508463ffffffff16600e145b1561039c578561ffff16925061040c565b6103ab8661ffff166010610aa8565b925061040c565b60288563ffffffff161015806103ce57508463ffffffff166022145b806103df57508463ffffffff166026145b1561040c578661016001518263ffffffff16602081106104015761040161220d565b602002015192508190505b60048563ffffffff1610158015610429575060088563ffffffff16105b8061043a57508463ffffffff166001145b156105195760006104b9886040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b90506104ce81896101600151888a878a610b1b565b805163ffffffff9081166060808b01919091526020830151821660808b01526040830151821660a08b01528201511660c089015261050a610806565b985050505050505050506107fd565b63ffffffff600060208783161061057e576105398861ffff166010610aa8565b9095019463fffffffc861661054f816001610922565b915060288863ffffffff161015801561056f57508763ffffffff16603014155b1561057c57809250600093505b505b600061058c89888885610d0e565b63ffffffff9081169150603f8a169089161580156105b1575060088163ffffffff1610155b80156105c35750601c8163ffffffff16105b15610775578063ffffffff16600814806105e357508063ffffffff166009145b1561061b576106098b8263ffffffff166008146106005786610603565b60005b8a6109de565b9b5050505050505050505050506107fd565b8063ffffffff16600a0361063c576106098b868a63ffffffff8b161561149e565b8063ffffffff16600b0361065e576106098b868a63ffffffff8b16151561149e565b8063ffffffff16600c03610675576106098d611573565b60108163ffffffff16101580156106925750601c8163ffffffff16105b156107755760006107118c6040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b9050610726818d6101600151848c8c8b611aaa565b805163ffffffff9081166060808f01919091526020830151821660808f01526040830151821660a08f01528201511660c08d0152610762610806565b9c505050505050505050505050506107fd565b8863ffffffff166038148015610790575063ffffffff861615155b156107c55760018b61016001518763ffffffff16602081106107b4576107b461220d565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff146107e2576107e284600184611d63565b6107ef8b8684600161149e565b9b5050505050505050505050505b95945050505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019190855b60208110156108a557601c8601518452602090950194600490930192600101610881565b506000835283830384a06000945080600181146108c557600395506108ed565b8280156108dd57600181146108e657600296506108eb565b600096506108eb565b600196505b505b50505081900390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89190911b17919050565b60008061092e83611e07565b9050600384161561093e57600080fd5b6020810190358460051c8160005b601b8110156109a45760208501943583821c600116801561097457600181146109895761099a565b6000848152602083905260409020935061099a565b600082815260208590526040902093505b505060010161094c565b5060805191508181146109bf57630badf00d60005260206000fd5b5050601f94909416601c0360031b9390931c63ffffffff169392505050565b600080610a59856040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b9050610a6c818661016001518686611eb0565b805163ffffffff9081166060808801919091526020830151821660808801526040830151821660a08801528201511660c08601526107fd610806565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b0182610b05576000610b07565b815b90861663ffffffff16179250505092915050565b6000866000015160040163ffffffff16876020015163ffffffff1614610ba2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f7400000000000000000000000060448201526064015b60405180910390fd5b8463ffffffff1660041480610bbd57508463ffffffff166005145b15610c34576000868463ffffffff1660208110610bdc57610bdc61220d565b602002015190508063ffffffff168363ffffffff16148015610c0457508563ffffffff166004145b80610c2c57508063ffffffff168363ffffffff1614158015610c2c57508563ffffffff166005145b915050610cb1565b8463ffffffff16600603610c515760008260030b13159050610cb1565b8463ffffffff16600703610c6d5760008260030b139050610cb1565b8463ffffffff16600103610cb157601f601085901c166000819003610c965760008360030b1291505b8063ffffffff16600103610caf5760008360030b121591505b505b8651602088015163ffffffff1688528115610cf2576002610cd78661ffff166010610aa8565b63ffffffff90811690911b8201600401166020890152610d04565b60208801805160040163ffffffff1690525b5050505050505050565b6000603f601a86901c16801580610d3d575060088163ffffffff1610158015610d3d5750600f8163ffffffff16105b1561119357603f86168160088114610d845760098114610d8d57600a8114610d9657600b8114610d9f57600c8114610da857600d8114610db157600e8114610dba57610dbf565b60209150610dbf565b60219150610dbf565b602a9150610dbf565b602b9150610dbf565b60249150610dbf565b60259150610dbf565b602691505b508063ffffffff16600003610de65750505063ffffffff8216601f600686901c161b611496565b8063ffffffff16600203610e0c5750505063ffffffff8216601f600686901c161c611496565b8063ffffffff16600303610e4257601f600688901c16610e3863ffffffff8716821c6020839003610aa8565b9350505050611496565b8063ffffffff16600403610e645750505063ffffffff8216601f84161b611496565b8063ffffffff16600603610e865750505063ffffffff8216601f84161c611496565b8063ffffffff16600703610eb957610eb08663ffffffff168663ffffffff16901c87602003610aa8565b92505050611496565b8063ffffffff16600803610ed1578592505050611496565b8063ffffffff16600903610ee9578592505050611496565b8063ffffffff16600a03610f01578592505050611496565b8063ffffffff16600b03610f19578592505050611496565b8063ffffffff16600c03610f31578592505050611496565b8063ffffffff16600f03610f49578592505050611496565b8063ffffffff16601003610f61578592505050611496565b8063ffffffff16601103610f79578592505050611496565b8063ffffffff16601203610f91578592505050611496565b8063ffffffff16601303610fa9578592505050611496565b8063ffffffff16601803610fc1578592505050611496565b8063ffffffff16601903610fd9578592505050611496565b8063ffffffff16601a03610ff1578592505050611496565b8063ffffffff16601b03611009578592505050611496565b8063ffffffff1660200361102257505050828201611496565b8063ffffffff1660210361103b57505050828201611496565b8063ffffffff1660220361105457505050818303611496565b8063ffffffff1660230361106d57505050818303611496565b8063ffffffff1660240361108657505050828216611496565b8063ffffffff1660250361109f57505050828217611496565b8063ffffffff166026036110b857505050828218611496565b8063ffffffff166027036110d25750505082821719611496565b8063ffffffff16602a03611103578460030b8660030b126110f45760006110f7565b60015b60ff1692505050611496565b8063ffffffff16602b0361112b578463ffffffff168663ffffffff16106110f45760006110f7565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e000000000000000000000000006044820152606401610b99565b5061112b565b8063ffffffff16601c0361121757603f861660028190036111b957505050828202611496565b8063ffffffff16602014806111d457508063ffffffff166021145b1561118d578063ffffffff166020036111eb579419945b60005b638000000087161561120d576401fffffffe600197881b1696016111ee565b9250611496915050565b8063ffffffff16600f0361123957505065ffffffff0000601083901b16611496565b8063ffffffff166020036112755761126d8560031660080260180363ffffffff168463ffffffff16901c60ff166008610aa8565b915050611496565b8063ffffffff166021036112aa5761126d8560021660080260100363ffffffff168463ffffffff16901c61ffff166010610aa8565b8063ffffffff166022036112d957505063ffffffff60086003851602811681811b198416918316901b17611496565b8063ffffffff166023036112f05782915050611496565b8063ffffffff16602403611322578460031660080260180363ffffffff168363ffffffff16901c60ff16915050611496565b8063ffffffff16602503611355578460021660080260100363ffffffff168363ffffffff16901c61ffff16915050611496565b8063ffffffff1660260361138757505063ffffffff60086003851602601803811681811c198416918316901c17611496565b8063ffffffff166028036113bd57505060ff63ffffffff60086003861602601803811682811b9091188316918416901b17611496565b8063ffffffff166029036113f457505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17611496565b8063ffffffff16602a0361142357505063ffffffff60086003851602811681811c198316918416901c17611496565b8063ffffffff16602b0361143a5783915050611496565b8063ffffffff16602e0361146c57505063ffffffff60086003851602601803811681811b198316918416901b17611496565b8063ffffffff166030036114835782915050611496565b8063ffffffff1660380361112b57839150505b949350505050565b600080611519866040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015163ffffffff168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff168152509050919050565b905061152d81876101600151878787611f83565b805163ffffffff9081166060808901919091526020830151821660808901526040830151821660a08901528201511660c0870152611569610806565b9695505050505050565b600061157d612053565b506101e051604081015160808083015160a084015160c09094015191936000928392919063ffffffff8616610ffa036115f75781610fff8116156115c657610fff811661100003015b8363ffffffff166000036115ed5760e08801805163ffffffff8382011690915295506115f1565b8395505b50611a69565b8563ffffffff16610fcd036116125763400000009450611a69565b8563ffffffff166110180361162a5760019450611a69565b8563ffffffff166110960361166057600161012088015260ff8316610100880152611653610806565b9998505050505050505050565b8563ffffffff16610fa3036118cc5763ffffffff831615611a69577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8416016118865760006116bb8363fffffffc166001610922565b60208901519091508060001a60010361172a57604080516000838152336020528d83526060902091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790505b6040808a015190517fe03110e10000000000000000000000000000000000000000000000000000000081526004810183905263ffffffff9091166024820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de75169063e03110e1906044016040805180830381865afa1580156117cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ef919061223c565b91509150600386168060040382811015611807578092505b5081861015611814578591505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b0391508119811690508381198716179550505061186b8663fffffffc16600186611d63565b60408b018051820163ffffffff16905297506118c792505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff8416016118bb57809450611a69565b63ffffffff9450600993505b611a69565b8563ffffffff16610fa4036119bd5763ffffffff8316600114806118f6575063ffffffff83166002145b80611907575063ffffffff83166004145b1561191457809450611a69565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff8416016118bb5760006119548363fffffffc166001610922565b6020890151909150600384166004038381101561196f578093505b83900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193850293841b0116911b17602088015260006040880152935083611a69565b8563ffffffff16610fd703611a69578163ffffffff16600303611a5d5763ffffffff831615806119f3575063ffffffff83166005145b80611a04575063ffffffff83166003145b15611a125760009450611a69565b63ffffffff831660011480611a2d575063ffffffff83166002145b80611a3e575063ffffffff83166006145b80611a4f575063ffffffff83166004145b156118bb5760019450611a69565b63ffffffff9450601693505b6101608701805163ffffffff808816604090920191909152905185821660e09091015260808801805180831660608b01526004019091169052611653610806565b60008463ffffffff16601003611ac557506060860151611d0b565b8463ffffffff16601103611ae45763ffffffff84166060880152611d0b565b8463ffffffff16601203611afd57506040860151611d0b565b8463ffffffff16601303611b1c5763ffffffff84166040880152611d0b565b8463ffffffff16601803611b505763ffffffff600385810b9085900b02602081901c821660608a0152166040880152611d0b565b8463ffffffff16601903611b815763ffffffff84811681851602602081901c821660608a0152166040880152611d0b565b8463ffffffff16601a03611c44578260030b600003611bfc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f000000000000000000006044820152606401610b99565b8260030b8460030b81611c1157611c11612260565b0763ffffffff166060880152600383810b9085900b81611c3357611c33612260565b0563ffffffff166040880152611d0b565b8463ffffffff16601b03611d0b578263ffffffff16600003611cc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f000000000000000000006044820152606401610b99565b8263ffffffff168463ffffffff1681611cdd57611cdd612260565b0663ffffffff908116606089015283811690851681611cfe57611cfe612260565b0463ffffffff1660408801525b63ffffffff821615611d415780868363ffffffff1660208110611d3057611d3061220d565b63ffffffff90921660209290920201525b50505060208401805163ffffffff808216909652600401909416909352505050565b6000611d6e83611e07565b90506003841615611d7e57600080fd5b6020810190601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611dfc5760208401933582821c6001168015611dcc5760018114611de157611df2565b60008581526020839052604090209450611df2565b600082815260208690526040902094505b5050600101611da4565b505060805250505050565b60ff8116610380026101a4810190369061052401811015611eaa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f61746100000000000000000000000000000000000000000000000000000000006064820152608401610b99565b50919050565b836000015160040163ffffffff16846020015163ffffffff1614611f30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f7400000000000000000000000000006044820152606401610b99565b835160208501805163ffffffff9081168752838116909152831615611f7c5780600801848463ffffffff1660208110611f6b57611f6b61220d565b63ffffffff90921660209290920201525b5050505050565b60208363ffffffff1610611ff3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c69642072656769737465720000000000000000000000000000000000006044820152606401610b99565b63ffffffff8316158015906120055750805b156120345781848463ffffffff16602081106120235761202361220d565b63ffffffff90921660209290920201525b5050505060208101805163ffffffff8082169093526004019091169052565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081019190915261016081016120b96120be565b905290565b6040518061040001604052806020906020820280368337509192915050565b600060208083528351808285015260005b8181101561210a578581018301518582016040015282016120ee565b8181111561211c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008083601f84011261216257600080fd5b50813567ffffffffffffffff81111561217a57600080fd5b60208301915083602082850101111561219257600080fd5b9250929050565b6000806000806000606086880312156121b157600080fd5b853567ffffffffffffffff808211156121c957600080fd5b6121d589838a01612150565b909750955060208801359150808211156121ee57600080fd5b506121fb88828901612150565b96999598509660400135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000806040838503121561224f57600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a"; bytes internal constant anchorStateRegistryCode = hex"608060405234801561001057600080fd5b50600436106100675760003560e01c8063838c2d1e11610050578063838c2d1e146100fa578063c303f0df14610104578063f2b4e6171461011757600080fd5b806354fd4d501461006c5780637258a807146100be575b600080fd5b6100a86040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b5919061085c565b60405180910390f35b6100e56100cc36600461088b565b6001602081905260009182526040909120805491015482565b604080519283526020830191909152016100b5565b61010261015b565b005b61010261011236600461094f565b6105d4565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb1681526020016100b5565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526101f69190810190610a68565b92509250925060007f0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb73ffffffffffffffffffffffffffffffffffffffff16635f0150cb8585856040518463ffffffff1660e01b815260040161025b93929190610b39565b6040805180830381865afa158015610277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029b9190610b67565b5090508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f416e63686f72537461746552656769737472793a206661756c7420646973707560448201527f74652067616d65206e6f7420726567697374657265642077697468206661637460648201527f6f72790000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b600160008563ffffffff1663ffffffff168152602001908152602001600020600101548573ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610bc7565b11610422575050505050565b60028573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104939190610c0f565b60028111156104a4576104a4610be0565b146104b0575050505050565b60405180604001604052806105308773ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052d9190610bc7565b90565b81526020018673ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190610bc7565b905263ffffffff909416600090815260016020818152604090922086518155959091015194019390935550505050565b600054610100900460ff16158080156105f45750600054600160ff909116105b8061060e5750303b15801561060e575060005460ff166001145b61069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161037b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156106f857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60005b825181101561075e57600083828151811061071857610718610c30565b60209081029190910181015180820151905163ffffffff16600090815260018084526040909120825181559190920151910155508061075681610c5f565b9150506106fb565b5080156107c257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60005b838110156107fd5781810151838201526020016107e5565b8381111561080c576000848401525b50505050565b6000815180845261082a8160208601602086016107e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061086f6020830184610812565b9392505050565b63ffffffff8116811461088857600080fd5b50565b60006020828403121561089d57600080fd5b813561086f81610876565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156108fa576108fa6108a8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610947576109476108a8565b604052919050565b6000602080838503121561096257600080fd5b823567ffffffffffffffff8082111561097a57600080fd5b818501915085601f83011261098e57600080fd5b8135818111156109a0576109a06108a8565b6109ae848260051b01610900565b818152848101925060609182028401850191888311156109cd57600080fd5b938501935b82851015610a5c57848903818112156109eb5760008081fd5b6109f36108d7565b86356109fe81610876565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301811315610a325760008081fd5b610a3a6108d7565b888a0135815290880135898201528189015285525093840193928501926109d2565b50979650505050505050565b600080600060608486031215610a7d57600080fd5b8351610a8881610876565b60208501516040860151919450925067ffffffffffffffff80821115610aad57600080fd5b818601915086601f830112610ac157600080fd5b815181811115610ad357610ad36108a8565b610b0460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610900565b9150808252876020828501011115610b1b57600080fd5b610b2c8160208401602086016107e2565b5080925050509250925092565b63ffffffff84168152826020820152606060408201526000610b5e6060830184610812565b95945050505050565b60008060408385031215610b7a57600080fd5b825173ffffffffffffffffffffffffffffffffffffffff81168114610b9e57600080fd5b602084015190925067ffffffffffffffff81168114610bbc57600080fd5b809150509250929050565b600060208284031215610bd957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610c2157600080fd5b81516003811061086f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610cb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c634300080f000a"; bytes internal constant acc27Code = - hex"6080604052600436106102f25760003560e01c806370872aa51161018f578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b18578063fa315aa914610b3c578063fe2bbeb214610b6f57600080fd5b8063ec5e630814610a95578063eff0f59214610ac8578063f8f43ff614610af857600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a0f578063d8cc1a3c14610a42578063dabd396d14610a6257600080fd5b8063c6f0308c14610937578063cf09e0d0146109c1578063d5d44d80146109e257600080fd5b80638d450a9511610143578063bcef3b551161011d578063bcef3b55146108b7578063bd8da956146108f7578063c395e1ca1461091757600080fd5b80638d450a9514610777578063a445ece6146107aa578063bbdc02db1461087657600080fd5b80638129fc1c116101745780638129fc1c1461071a5780638980e0cc146107225780638b85902b1461073757600080fd5b806370872aa5146106f25780637b0f0adc1461070757600080fd5b80633fc8cef3116102485780635c0cba33116101fc5780636361506d116101d65780636361506d1461066c5780636b6716c0146106ac5780636f034409146106df57600080fd5b80635c0cba3314610604578063609d33341461063757806360e274641461064c57600080fd5b806354fd4d501161022d57806354fd4d501461055e57806357da950e146105b45780635a5fa2d9146105e457600080fd5b80633fc8cef314610518578063472777c61461054b57600080fd5b80632810e1d6116102aa57806337b1b2291161028457806337b1b229146104655780633a768463146104a55780633e3ac912146104d857600080fd5b80632810e1d6146103de5780632ad69aeb146103f357806330dbe5701461041357600080fd5b806319effeb4116102db57806319effeb414610339578063200d2ed21461038457806325fc2ace146103bf57600080fd5b806301935130146102f757806303c2924d14610319575b600080fd5b34801561030357600080fd5b5061031761031236600461532d565b610b9f565b005b34801561032557600080fd5b50610317610334366004615388565b610ec0565b34801561034557600080fd5b506000546103669068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561039057600080fd5b506000546103b290700100000000000000000000000000000000900460ff1681565b60405161037b91906153d9565b3480156103cb57600080fd5b506008545b60405190815260200161037b565b3480156103ea57600080fd5b506103b2611566565b3480156103ff57600080fd5b506103d061040e366004615388565b61180b565b34801561041f57600080fd5b506001546104409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161037b565b34801561047157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610440565b3480156104b157600080fd5b507f000000000000000000000000477508a9612b67709caf812d4356d531ba6a471d610440565b3480156104e457600080fd5b50600054610508907201000000000000000000000000000000000000900460ff1681565b604051901515815260200161037b565b34801561052457600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610440565b61031761055936600461541a565b611841565b34801561056a57600080fd5b506105a76040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161037b91906154b1565b3480156105c057600080fd5b506008546009546105cf919082565b6040805192835260208301919091520161037b565b3480156105f057600080fd5b506103d06105ff3660046154c4565b611853565b34801561061057600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610440565b34801561064357600080fd5b506105a761188d565b34801561065857600080fd5b50610317610667366004615502565b61189b565b34801561067857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103d0565b3480156106b857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b6103176106ed366004615534565b611a42565b3480156106fe57600080fd5b506009546103d0565b61031761071536600461541a565b6123e3565b6103176123f0565b34801561072e57600080fd5b506002546103d0565b34801561074357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103d0565b34801561078357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b3480156107b657600080fd5b506108226107c53660046154c4565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff16606082015260800161037b565b34801561088257600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161037b565b3480156108c357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103d0565b34801561090357600080fd5b506103666109123660046154c4565b612949565b34801561092357600080fd5b506103d0610932366004615573565b612b28565b34801561094357600080fd5b506109576109523660046154c4565b612d0b565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161037b565b3480156109cd57600080fd5b506000546103669067ffffffffffffffff1681565b3480156109ee57600080fd5b506103d06109fd366004615502565b60036020526000908152604090205481565b348015610a1b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103d0565b348015610a4e57600080fd5b50610317610a5d3660046155a5565b612da2565b348015610a6e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b0610366565b348015610aa157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103d0565b348015610ad457600080fd5b50610508610ae33660046154c4565b60046020526000908152604090205460ff1681565b348015610b0457600080fd5b50610317610b1336600461541a565b6133d1565b348015610b2457600080fd5b50610b2d613823565b60405161037b9392919061562f565b348015610b4857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103d0565b348015610b7b57600080fd5b50610508610b8a3660046154c4565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610bcb57610bcb6153aa565b14610c02576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c55576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610ca3610c9e36869003860186615683565b613883565b14610cda576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cef929190615710565b604051809103902014610d2e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d77610d7284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138df92505050565b61394c565b90506000610d9e82600881518110610d9157610d91615720565b6020026020010151613b02565b9050602081511115610ddc576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610e51576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610eec57610eec6153aa565b14610f23576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610f3857610f38615720565b906000526020600020906005020190506000610f5384612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015610fbc576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611005576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561102257508515155b156110bd578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110555781611071565b600186015473ffffffffffffffffffffffffffffffffffffffff165b905061107d8187613bb6565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152611160576fffffffffffffffffffffffffffffffff6040820152600181526000869003611160578195505b600086826020015163ffffffff16611178919061577e565b90506000838211611189578161118b565b835b602084015190915063ffffffff165b818110156112d75760008682815481106111b6576111b6615720565b6000918252602080832090910154808352600690915260409091205490915060ff1661120e576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061122357611223615720565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112805750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b156112c257600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b505080806112cf90615796565b91505061119a565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915584900361155b57606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561145757506000547201000000000000000000000000000000000000900460ff165b156114cc5760015473ffffffffffffffffffffffffffffffffffffffff1661147f818a613bb6565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909116178855611559565b61151373ffffffffffffffffffffffffffffffffffffffff8216156114f1578161150d565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89613bb6565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611594576115946153aa565b146115cb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661162f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008154811061165b5761165b615720565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611696576001611699565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561174a5761174a6153aa565b02179055600281111561175f5761175f6153aa565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117f057600080fd5b505af1158015611804573d6000803e3d6000fd5b5050505090565b6005602052816000526040600020818154811061182757600080fd5b90600052602060002001600091509150505481565b905090565b61184e8383836001611a42565b505050565b6000818152600760209081526040808320600590925282208054825461188490610100900463ffffffff16826157ce565b95945050505050565b606061183c60546020613cb7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812080549082905590819003611900576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a02576040519150601f19603f3d011682016040523d82523d6000602084013e611a07565b606091505b505090508061184e576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054700100000000000000000000000000000000900460ff166002811115611a6e57611a6e6153aa565b14611aa5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110611aba57611aba615720565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514611ba1576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000611c61826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611c9c5750611c997f0000000000000000000000000000000000000000000000000000000000000004600261577e565b81145b8015611ca6575084155b15611cdd576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611d03575086155b15611d3a576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115611d94576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dbf7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b8103611dd157611dd186888588613d09565b34611ddb83612b28565b14611e12576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e1d88612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603611e85576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016611ee591906157e5565b67ffffffffffffffff16611f008267ffffffffffffffff1690565b67ffffffffffffffff161115611fe2576000611f3d60017f00000000000000000000000000000000000000000000000000000000000000046157ce565b8314611f735767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611fa8565b611fa87f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261580e565b9050611fde817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff166157e5565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615612060576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b815260200190815260200160002060016002805490506122f691906157ce565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b15801561238e57600080fd5b505af11580156123a2573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b61184e8383836000611a42565b60005471010000000000000000000000000000000000900460ff1615612442576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa1580156124f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251a919061583e565b909250905081612556576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461258957639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511612623576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b1580156128f857600080fd5b505af115801561290c573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff166002811115612977576129776153aa565b146129ae576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600283815481106129c3576129c3615720565b600091825260208220600590910201805490925063ffffffff90811614612a3257815460028054909163ffffffff16908110612a0157612a01615720565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090612a6a90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b612a7e9067ffffffffffffffff16426157ce565b612a9d612a5d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16612ab1919061577e565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611612afe5780611884565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080612bc7836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115612c26576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000612c418383615891565b9050670de0b6b3a76400006000612c78827f00000000000000000000000000000000000000000000000000000000000000086158a5565b90506000612c96612c91670de0b6b3a7640000866158a5565b613eba565b90506000612ca48484614115565b90506000612cb28383614164565b90506000612cbf82614192565b90506000612cde82612cd9670de0b6b3a76400008f6158a5565b61437a565b90506000612cec8b83614164565b9050612cf8818d6158a5565b9f9e505050505050505050505050505050565b60028181548110612d1b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115612dce57612dce6153aa565b14612e05576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110612e1a57612e1a615720565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050612e797f0000000000000000000000000000000000000000000000000000000000000008600161577e565b612f15826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614612f4f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561304657612fa27f00000000000000000000000000000000000000000000000000000000000000047f00000000000000000000000000000000000000000000000000000000000000086157ce565b6001901b612fc1846fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff16612fdd91906158e2565b1561301a5761301161300260016fffffffffffffffffffffffffffffffff87166158f6565b865463ffffffff166000614453565b6003015461303c565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050613070565b6003850154915061306d6130026fffffffffffffffffffffffffffffffff8616600161591f565b90505b600882901b60088a8a604051613087929190615710565b6040518091039020901b146130c8576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006130d38c614537565b905060006130e2836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000477508a9612b67709caf812d4356d531ba6a471d73ffffffffffffffffffffffffffffffffffffffff169063e14ced329061315c908f908f908f908f908a9060040161599c565b6020604051808303816000875af115801561317b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319f91906159d6565b60048501549114915060009060029061324a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132e6896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132f091906159ef565b6132fa9190615a12565b60ff16159050811515810361333b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156133fd576133fd6153aa565b14613434576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061344386614566565b935093509350935060006134598585858561496f565b905060007f000000000000000000000000477508a9612b67709caf812d4356d531ba6a471d73ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ec9190615a34565b9050600189036135e45773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84613548367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de91906159d6565b5061155b565b600289036136105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489613548565b6003890361363c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487613548565b600489036137585760006136826fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614a29565b60095461368f919061577e565b61369a90600161577e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561372d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375191906159d6565b505061155b565b600589036137f1576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161359b565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061387c61188d565b9050909192565b600081600001518260200151836040015184606001516040516020016138c2949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152815160000361392e576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061395c85614ad7565b919450925090506001816001811115613977576139776153aa565b146139ae576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516139ba838561577e565b146139f1576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613a085790505093506000835b8651811015613af657600080613a7b6040518060400160405280858c60000151613a5f91906157ce565b8152602001858c60200151613a74919061577e565b9052614ad7565b509150915060405180604001604052808383613a97919061577e565b8152602001848b60200151613aac919061577e565b815250888581518110613ac157613ac1615720565b6020908102919091010152613ad760018561577e565b9350613ae3818361577e565b613aed908461577e565b92505050613a35565b50845250919392505050565b60606000806000613b1285614ad7565b919450925090506000816001811115613b2d57613b2d6153aa565b14613b64576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b6e828461577e565b855114613ba7576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188485602001518484614f75565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff90931692839290613c0590849061577e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b158015613c9a57600080fd5b505af1158015613cae573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b6000613d286fffffffffffffffffffffffffffffffff8416600161591f565b90506000613d3882866001614453565b9050600086901a8380613e245750613d7160027f00000000000000000000000000000000000000000000000000000000000000046158e2565b6004830154600290613e15906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613e1f9190615a12565b60ff16145b15613e7c5760ff811660011480613e3e575060ff81166002145b613e77576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b613cae565b60ff811615613cae576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613f1957631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261415257637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156141825763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d782136141c057919050565b680755bf798b4a1bf1e582126141de5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006143ab670de0b6b3a76400008361439286613eba565b61439c9190615a51565b6143a69190615b0d565b614192565b90505b92915050565b600080614441837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b6000808261449c576144976fffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000461500a565b6144b7565b6144b7856fffffffffffffffffffffffffffffffff16615196565b9050600284815481106144cc576144cc615720565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461452f57815460028054909163ffffffff1690811061451a5761451a615720565b906000526020600020906005020191506144dd565b509392505050565b600080600080600061454886614566565b935093509350935061455c8484848461496f565b9695505050505050565b600080600080600085905060006002828154811061458657614586615720565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000049061465d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614697576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f00000000000000000000000000000000000000000000000000000000000000049061475e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156147d357825463ffffffff1661479d7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b83036147a7578391505b600281815481106147ba576147ba615720565b906000526020600020906005020193508094505061469b565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661483c614827856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561490b576000614874836fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff1611156148df5760006148b66148ae60016fffffffffffffffffffffffffffffffff86166158f6565b896001614453565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506148e59050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614961565b600061492d6148ae6fffffffffffffffffffffffffffffffff8516600161591f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156149dc5760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611884565b8282604051602001614a0a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614ab6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614b1a576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614b3f576000600160009450945094505050614f6e565b60b78111614c55576000614b546080836157ce565b905080876000015111614b93576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614c0b57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614c42576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614f6e915050565b60bf8111614db3576000614c6a60b7836157ce565b905080876000015111614ca9576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614d0b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614d53576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d5d818461577e565b895111614d96576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614da183600161577e565b9750955060009450614f6e9350505050565b60f78111614e18576000614dc860c0836157ce565b905080876000015111614e07576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614f6e915050565b6000614e2560f7836157ce565b905080876000015111614e64576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614ec6576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614f0e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f18818461577e565b895111614f51576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f5c83600161577e565b9750955060019450614f6e9350505050565b9193909250565b60608167ffffffffffffffff811115614f9057614f90615654565b6040519080825280601f01601f191660200182016040528015614fba576020820181803683370190505b5090508115615003576000614fcf848661577e565b90506020820160005b84811015614ff0578281015182820152602001614fd8565b84811115614fff576000858301525b5050505b9392505050565b6000816150a9846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150bf5763b34b5c226000526004601cfd5b6150c883615196565b905081615167826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116143ae576143ab61517d83600161577e565b6fffffffffffffffffffffffffffffffff83169061523b565b6000811960018301168161522a827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806152c8847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126152f657600080fd5b50813567ffffffffffffffff81111561530e57600080fd5b60208301915083602082850101111561532657600080fd5b9250929050565b600080600083850360a081121561534357600080fd5b608081121561535157600080fd5b50839250608084013567ffffffffffffffff81111561536f57600080fd5b61537b868287016152e4565b9497909650939450505050565b6000806040838503121561539b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310615414577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561542f57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561546c57602081850181015186830182015201615450565b8181111561547e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006143ab6020830184615446565b6000602082840312156154d657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146154ff57600080fd5b50565b60006020828403121561551457600080fd5b8135615003816154dd565b8035801515811461552f57600080fd5b919050565b6000806000806080858703121561554a57600080fd5b8435935060208501359250604085013591506155686060860161551f565b905092959194509250565b60006020828403121561558557600080fd5b81356fffffffffffffffffffffffffffffffff8116811461500357600080fd5b600080600080600080608087890312156155be57600080fd5b863595506155ce6020880161551f565b9450604087013567ffffffffffffffff808211156155eb57600080fd5b6155f78a838b016152e4565b9096509450606089013591508082111561561057600080fd5b5061561d89828a016152e4565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006118846060830184615446565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561569557600080fd5b6040516080810181811067ffffffffffffffff821117156156df577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157915761579161574f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157c7576157c761574f565b5060010190565b6000828210156157e0576157e061574f565b500390565b600067ffffffffffffffff838116908316818110156158065761580661574f565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156158355761583561574f565b02949350505050565b6000806040838503121561585157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158a0576158a0615862565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158dd576158dd61574f565b500290565b6000826158f1576158f1615862565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156158065761580661574f565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561594a5761594a61574f565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006159b0606083018789615953565b82810360208401526159c3818688615953565b9150508260408301529695505050505050565b6000602082840312156159e857600080fd5b5051919050565b600060ff821660ff841680821015615a0957615a0961574f565b90039392505050565b600060ff831680615a2557615a25615862565b8060ff84160691505092915050565b600060208284031215615a4657600080fd5b8151615003816154dd565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a9257615a9261574f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615acd57615acd61574f565b60008712925087820587128484161615615ae957615ae961574f565b87850587128184161615615aff57615aff61574f565b505050929093029392505050565b600082615b1c57615b1c615862565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b7057615b7061574f565b50059056fea164736f6c634300080f000a"; + hex"6080604052600436106102f25760003560e01c806370872aa51161018f578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b18578063fa315aa914610b3c578063fe2bbeb214610b6f57600080fd5b8063ec5e630814610a95578063eff0f59214610ac8578063f8f43ff614610af857600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a0f578063d8cc1a3c14610a42578063dabd396d14610a6257600080fd5b8063c6f0308c14610937578063cf09e0d0146109c1578063d5d44d80146109e257600080fd5b80638d450a9511610143578063bcef3b551161011d578063bcef3b55146108b7578063bd8da956146108f7578063c395e1ca1461091757600080fd5b80638d450a9514610777578063a445ece6146107aa578063bbdc02db1461087657600080fd5b80638129fc1c116101745780638129fc1c1461071a5780638980e0cc146107225780638b85902b1461073757600080fd5b806370872aa5146106f25780637b0f0adc1461070757600080fd5b80633fc8cef3116102485780635c0cba33116101fc5780636361506d116101d65780636361506d1461066c5780636b6716c0146106ac5780636f034409146106df57600080fd5b80635c0cba3314610604578063609d33341461063757806360e274641461064c57600080fd5b806354fd4d501161022d57806354fd4d501461055e57806357da950e146105b45780635a5fa2d9146105e457600080fd5b80633fc8cef314610518578063472777c61461054b57600080fd5b80632810e1d6116102aa57806337b1b2291161028457806337b1b229146104655780633a768463146104a55780633e3ac912146104d857600080fd5b80632810e1d6146103de5780632ad69aeb146103f357806330dbe5701461041357600080fd5b806319effeb4116102db57806319effeb414610339578063200d2ed21461038457806325fc2ace146103bf57600080fd5b806301935130146102f757806303c2924d14610319575b600080fd5b34801561030357600080fd5b5061031761031236600461532d565b610b9f565b005b34801561032557600080fd5b50610317610334366004615388565b610ec0565b34801561034557600080fd5b506000546103669068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561039057600080fd5b506000546103b290700100000000000000000000000000000000900460ff1681565b60405161037b91906153d9565b3480156103cb57600080fd5b506008545b60405190815260200161037b565b3480156103ea57600080fd5b506103b2611566565b3480156103ff57600080fd5b506103d061040e366004615388565b61180b565b34801561041f57600080fd5b506001546104409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161037b565b34801561047157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610440565b3480156104b157600080fd5b507f00000000000000000000000049e77cde01ffbab1266813b9a2faadc1b757f435610440565b3480156104e457600080fd5b50600054610508907201000000000000000000000000000000000000900460ff1681565b604051901515815260200161037b565b34801561052457600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610440565b61031761055936600461541a565b611841565b34801561056a57600080fd5b506105a76040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161037b91906154b1565b3480156105c057600080fd5b506008546009546105cf919082565b6040805192835260208301919091520161037b565b3480156105f057600080fd5b506103d06105ff3660046154c4565b611853565b34801561061057600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610440565b34801561064357600080fd5b506105a761188d565b34801561065857600080fd5b50610317610667366004615502565b61189b565b34801561067857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103d0565b3480156106b857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b6103176106ed366004615534565b611a42565b3480156106fe57600080fd5b506009546103d0565b61031761071536600461541a565b6123e3565b6103176123f0565b34801561072e57600080fd5b506002546103d0565b34801561074357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103d0565b34801561078357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b3480156107b657600080fd5b506108226107c53660046154c4565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff16606082015260800161037b565b34801561088257600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161037b565b3480156108c357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103d0565b34801561090357600080fd5b506103666109123660046154c4565b612949565b34801561092357600080fd5b506103d0610932366004615573565b612b28565b34801561094357600080fd5b506109576109523660046154c4565b612d0b565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161037b565b3480156109cd57600080fd5b506000546103669067ffffffffffffffff1681565b3480156109ee57600080fd5b506103d06109fd366004615502565b60036020526000908152604090205481565b348015610a1b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103d0565b348015610a4e57600080fd5b50610317610a5d3660046155a5565b612da2565b348015610a6e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b0610366565b348015610aa157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103d0565b348015610ad457600080fd5b50610508610ae33660046154c4565b60046020526000908152604090205460ff1681565b348015610b0457600080fd5b50610317610b1336600461541a565b6133d1565b348015610b2457600080fd5b50610b2d613823565b60405161037b9392919061562f565b348015610b4857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103d0565b348015610b7b57600080fd5b50610508610b8a3660046154c4565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610bcb57610bcb6153aa565b14610c02576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c55576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610ca3610c9e36869003860186615683565b613883565b14610cda576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cef929190615710565b604051809103902014610d2e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d77610d7284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138df92505050565b61394c565b90506000610d9e82600881518110610d9157610d91615720565b6020026020010151613b02565b9050602081511115610ddc576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610e51576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610eec57610eec6153aa565b14610f23576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610f3857610f38615720565b906000526020600020906005020190506000610f5384612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015610fbc576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611005576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561102257508515155b156110bd578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110555781611071565b600186015473ffffffffffffffffffffffffffffffffffffffff165b905061107d8187613bb6565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152611160576fffffffffffffffffffffffffffffffff6040820152600181526000869003611160578195505b600086826020015163ffffffff16611178919061577e565b90506000838211611189578161118b565b835b602084015190915063ffffffff165b818110156112d75760008682815481106111b6576111b6615720565b6000918252602080832090910154808352600690915260409091205490915060ff1661120e576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061122357611223615720565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112805750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b156112c257600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b505080806112cf90615796565b91505061119a565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915584900361155b57606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561145757506000547201000000000000000000000000000000000000900460ff165b156114cc5760015473ffffffffffffffffffffffffffffffffffffffff1661147f818a613bb6565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909116178855611559565b61151373ffffffffffffffffffffffffffffffffffffffff8216156114f1578161150d565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89613bb6565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611594576115946153aa565b146115cb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661162f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008154811061165b5761165b615720565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611696576001611699565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561174a5761174a6153aa565b02179055600281111561175f5761175f6153aa565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117f057600080fd5b505af1158015611804573d6000803e3d6000fd5b5050505090565b6005602052816000526040600020818154811061182757600080fd5b90600052602060002001600091509150505481565b905090565b61184e8383836001611a42565b505050565b6000818152600760209081526040808320600590925282208054825461188490610100900463ffffffff16826157ce565b95945050505050565b606061183c60546020613cb7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812080549082905590819003611900576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a02576040519150601f19603f3d011682016040523d82523d6000602084013e611a07565b606091505b505090508061184e576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054700100000000000000000000000000000000900460ff166002811115611a6e57611a6e6153aa565b14611aa5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110611aba57611aba615720565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514611ba1576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000611c61826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611c9c5750611c997f0000000000000000000000000000000000000000000000000000000000000004600261577e565b81145b8015611ca6575084155b15611cdd576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611d03575086155b15611d3a576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115611d94576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dbf7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b8103611dd157611dd186888588613d09565b34611ddb83612b28565b14611e12576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e1d88612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603611e85576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016611ee591906157e5565b67ffffffffffffffff16611f008267ffffffffffffffff1690565b67ffffffffffffffff161115611fe2576000611f3d60017f00000000000000000000000000000000000000000000000000000000000000046157ce565b8314611f735767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611fa8565b611fa87f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261580e565b9050611fde817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff166157e5565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615612060576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b815260200190815260200160002060016002805490506122f691906157ce565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b15801561238e57600080fd5b505af11580156123a2573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b61184e8383836000611a42565b60005471010000000000000000000000000000000000900460ff1615612442576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa1580156124f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251a919061583e565b909250905081612556576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461258957639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511612623576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b1580156128f857600080fd5b505af115801561290c573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff166002811115612977576129776153aa565b146129ae576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600283815481106129c3576129c3615720565b600091825260208220600590910201805490925063ffffffff90811614612a3257815460028054909163ffffffff16908110612a0157612a01615720565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090612a6a90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b612a7e9067ffffffffffffffff16426157ce565b612a9d612a5d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16612ab1919061577e565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611612afe5780611884565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080612bc7836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115612c26576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000612c418383615891565b9050670de0b6b3a76400006000612c78827f00000000000000000000000000000000000000000000000000000000000000086158a5565b90506000612c96612c91670de0b6b3a7640000866158a5565b613eba565b90506000612ca48484614115565b90506000612cb28383614164565b90506000612cbf82614192565b90506000612cde82612cd9670de0b6b3a76400008f6158a5565b61437a565b90506000612cec8b83614164565b9050612cf8818d6158a5565b9f9e505050505050505050505050505050565b60028181548110612d1b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115612dce57612dce6153aa565b14612e05576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110612e1a57612e1a615720565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050612e797f0000000000000000000000000000000000000000000000000000000000000008600161577e565b612f15826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614612f4f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561304657612fa27f00000000000000000000000000000000000000000000000000000000000000047f00000000000000000000000000000000000000000000000000000000000000086157ce565b6001901b612fc1846fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff16612fdd91906158e2565b1561301a5761301161300260016fffffffffffffffffffffffffffffffff87166158f6565b865463ffffffff166000614453565b6003015461303c565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050613070565b6003850154915061306d6130026fffffffffffffffffffffffffffffffff8616600161591f565b90505b600882901b60088a8a604051613087929190615710565b6040518091039020901b146130c8576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006130d38c614537565b905060006130e2836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f00000000000000000000000049e77cde01ffbab1266813b9a2faadc1b757f43573ffffffffffffffffffffffffffffffffffffffff169063e14ced329061315c908f908f908f908f908a9060040161599c565b6020604051808303816000875af115801561317b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319f91906159d6565b60048501549114915060009060029061324a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132e6896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132f091906159ef565b6132fa9190615a12565b60ff16159050811515810361333b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156133fd576133fd6153aa565b14613434576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061344386614566565b935093509350935060006134598585858561496f565b905060007f00000000000000000000000049e77cde01ffbab1266813b9a2faadc1b757f43573ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ec9190615a34565b9050600189036135e45773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84613548367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de91906159d6565b5061155b565b600289036136105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489613548565b6003890361363c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487613548565b600489036137585760006136826fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614a29565b60095461368f919061577e565b61369a90600161577e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561372d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375191906159d6565b505061155b565b600589036137f1576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161359b565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061387c61188d565b9050909192565b600081600001518260200151836040015184606001516040516020016138c2949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152815160000361392e576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061395c85614ad7565b919450925090506001816001811115613977576139776153aa565b146139ae576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516139ba838561577e565b146139f1576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613a085790505093506000835b8651811015613af657600080613a7b6040518060400160405280858c60000151613a5f91906157ce565b8152602001858c60200151613a74919061577e565b9052614ad7565b509150915060405180604001604052808383613a97919061577e565b8152602001848b60200151613aac919061577e565b815250888581518110613ac157613ac1615720565b6020908102919091010152613ad760018561577e565b9350613ae3818361577e565b613aed908461577e565b92505050613a35565b50845250919392505050565b60606000806000613b1285614ad7565b919450925090506000816001811115613b2d57613b2d6153aa565b14613b64576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b6e828461577e565b855114613ba7576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188485602001518484614f75565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff90931692839290613c0590849061577e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b158015613c9a57600080fd5b505af1158015613cae573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b6000613d286fffffffffffffffffffffffffffffffff8416600161591f565b90506000613d3882866001614453565b9050600086901a8380613e245750613d7160027f00000000000000000000000000000000000000000000000000000000000000046158e2565b6004830154600290613e15906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613e1f9190615a12565b60ff16145b15613e7c5760ff811660011480613e3e575060ff81166002145b613e77576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b613cae565b60ff811615613cae576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613f1957631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261415257637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156141825763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d782136141c057919050565b680755bf798b4a1bf1e582126141de5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006143ab670de0b6b3a76400008361439286613eba565b61439c9190615a51565b6143a69190615b0d565b614192565b90505b92915050565b600080614441837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b6000808261449c576144976fffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000461500a565b6144b7565b6144b7856fffffffffffffffffffffffffffffffff16615196565b9050600284815481106144cc576144cc615720565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461452f57815460028054909163ffffffff1690811061451a5761451a615720565b906000526020600020906005020191506144dd565b509392505050565b600080600080600061454886614566565b935093509350935061455c8484848461496f565b9695505050505050565b600080600080600085905060006002828154811061458657614586615720565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000049061465d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614697576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f00000000000000000000000000000000000000000000000000000000000000049061475e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156147d357825463ffffffff1661479d7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b83036147a7578391505b600281815481106147ba576147ba615720565b906000526020600020906005020193508094505061469b565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661483c614827856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561490b576000614874836fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff1611156148df5760006148b66148ae60016fffffffffffffffffffffffffffffffff86166158f6565b896001614453565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506148e59050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614961565b600061492d6148ae6fffffffffffffffffffffffffffffffff8516600161591f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156149dc5760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611884565b8282604051602001614a0a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614ab6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614b1a576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614b3f576000600160009450945094505050614f6e565b60b78111614c55576000614b546080836157ce565b905080876000015111614b93576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614c0b57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614c42576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614f6e915050565b60bf8111614db3576000614c6a60b7836157ce565b905080876000015111614ca9576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614d0b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614d53576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d5d818461577e565b895111614d96576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614da183600161577e565b9750955060009450614f6e9350505050565b60f78111614e18576000614dc860c0836157ce565b905080876000015111614e07576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614f6e915050565b6000614e2560f7836157ce565b905080876000015111614e64576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614ec6576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614f0e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f18818461577e565b895111614f51576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f5c83600161577e565b9750955060019450614f6e9350505050565b9193909250565b60608167ffffffffffffffff811115614f9057614f90615654565b6040519080825280601f01601f191660200182016040528015614fba576020820181803683370190505b5090508115615003576000614fcf848661577e565b90506020820160005b84811015614ff0578281015182820152602001614fd8565b84811115614fff576000858301525b5050505b9392505050565b6000816150a9846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150bf5763b34b5c226000526004601cfd5b6150c883615196565b905081615167826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116143ae576143ab61517d83600161577e565b6fffffffffffffffffffffffffffffffff83169061523b565b6000811960018301168161522a827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806152c8847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126152f657600080fd5b50813567ffffffffffffffff81111561530e57600080fd5b60208301915083602082850101111561532657600080fd5b9250929050565b600080600083850360a081121561534357600080fd5b608081121561535157600080fd5b50839250608084013567ffffffffffffffff81111561536f57600080fd5b61537b868287016152e4565b9497909650939450505050565b6000806040838503121561539b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310615414577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561542f57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561546c57602081850181015186830182015201615450565b8181111561547e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006143ab6020830184615446565b6000602082840312156154d657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146154ff57600080fd5b50565b60006020828403121561551457600080fd5b8135615003816154dd565b8035801515811461552f57600080fd5b919050565b6000806000806080858703121561554a57600080fd5b8435935060208501359250604085013591506155686060860161551f565b905092959194509250565b60006020828403121561558557600080fd5b81356fffffffffffffffffffffffffffffffff8116811461500357600080fd5b600080600080600080608087890312156155be57600080fd5b863595506155ce6020880161551f565b9450604087013567ffffffffffffffff808211156155eb57600080fd5b6155f78a838b016152e4565b9096509450606089013591508082111561561057600080fd5b5061561d89828a016152e4565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006118846060830184615446565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561569557600080fd5b6040516080810181811067ffffffffffffffff821117156156df577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157915761579161574f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157c7576157c761574f565b5060010190565b6000828210156157e0576157e061574f565b500390565b600067ffffffffffffffff838116908316818110156158065761580661574f565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156158355761583561574f565b02949350505050565b6000806040838503121561585157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158a0576158a0615862565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158dd576158dd61574f565b500290565b6000826158f1576158f1615862565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156158065761580661574f565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561594a5761594a61574f565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006159b0606083018789615953565b82810360208401526159c3818688615953565b9150508260408301529695505050505050565b6000602082840312156159e857600080fd5b5051919050565b600060ff821660ff841680821015615a0957615a0961574f565b90039392505050565b600060ff831680615a2557615a25615862565b8060ff84160691505092915050565b600060208284031215615a4657600080fd5b8151615003816154dd565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a9257615a9261574f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615acd57615acd61574f565b60008712925087820587128484161615615ae957615ae961574f565b87850587128184161615615aff57615aff61574f565b505050929093029392505050565b600082615b1c57615b1c615862565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b7057615b7061574f565b50059056fea164736f6c634300080f000a"; bytes internal constant acc28Code = - hex"6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b94578063fa315aa914610bb8578063fe2bbeb214610beb57600080fd5b8063ec5e630814610b11578063eff0f59214610b44578063f8f43ff614610b7457600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a8b578063d8cc1a3c14610abe578063dabd396d14610ade57600080fd5b8063c6f0308c146109b3578063cf09e0d014610a3d578063d5d44d8014610a5e57600080fd5b8063a445ece611610143578063bcef3b551161011d578063bcef3b5514610933578063bd8da95614610973578063c395e1ca1461099357600080fd5b8063a445ece6146107f3578063a8e4fb90146108bf578063bbdc02db146108f257600080fd5b80638980e0cc116101745780638980e0cc1461076b5780638b85902b146107805780638d450a95146107c057600080fd5b806370872aa51461073b5780637b0f0adc146107505780638129fc1c1461076357600080fd5b80633fc8cef31161025e5780635c0cba33116102075780636361506d116101e15780636361506d146106b55780636b6716c0146106f55780636f0344091461072857600080fd5b80635c0cba331461064d578063609d33341461068057806360e274641461069557600080fd5b806354fd4d501161023857806354fd4d50146105a757806357da950e146105fd5780635a5fa2d91461062d57600080fd5b80633fc8cef31461052e578063472777c614610561578063534db0e21461057457600080fd5b80632810e1d6116102c057806337b1b2291161029a57806337b1b2291461047b5780633a768463146104bb5780633e3ac912146104ee57600080fd5b80632810e1d6146103f45780632ad69aeb1461040957806330dbe5701461042957600080fd5b806319effeb4116102f157806319effeb41461034f578063200d2ed21461039a57806325fc2ace146103d557600080fd5b8063019351301461030d57806303c2924d1461032f575b600080fd5b34801561031957600080fd5b5061032d6103283660046155a8565b610c1b565b005b34801561033b57600080fd5b5061032d61034a366004615603565b610f3c565b34801561035b57600080fd5b5060005461037c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103a657600080fd5b506000546103c890700100000000000000000000000000000000900460ff1681565b6040516103919190615654565b3480156103e157600080fd5b506008545b604051908152602001610391565b34801561040057600080fd5b506103c86115e2565b34801561041557600080fd5b506103e6610424366004615603565b611887565b34801561043557600080fd5b506001546104569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610391565b34801561048757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610456565b3480156104c757600080fd5b507f000000000000000000000000477508a9612b67709caf812d4356d531ba6a471d610456565b3480156104fa57600080fd5b5060005461051e907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610391565b34801561053a57600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610456565b61032d61056f366004615695565b6118bd565b34801561058057600080fd5b507f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63610456565b3480156105b357600080fd5b506105f06040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b604051610391919061572c565b34801561060957600080fd5b50600854600954610618919082565b60408051928352602083019190915201610391565b34801561063957600080fd5b506103e661064836600461573f565b6118cf565b34801561065957600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610456565b34801561068c57600080fd5b506105f0611909565b3480156106a157600080fd5b5061032d6106b036600461577d565b611917565b3480156106c157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103e6565b34801561070157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b61032d6107363660046157af565b611abe565b34801561074757600080fd5b506009546103e6565b61032d61075e366004615695565b611b7f565b61032d611b8c565b34801561077757600080fd5b506002546103e6565b34801561078c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103e6565b3480156107cc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b3480156107ff57600080fd5b5061086b61080e36600461573f565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff166060820152608001610391565b3480156108cb57600080fd5b507f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8610456565b3480156108fe57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000001168152602001610391565b34801561093f57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103e6565b34801561097f57600080fd5b5061037c61098e36600461573f565b611c05565b34801561099f57600080fd5b506103e66109ae3660046157ee565b611de4565b3480156109bf57600080fd5b506109d36109ce36600461573f565b611fc7565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610391565b348015610a4957600080fd5b5060005461037c9067ffffffffffffffff1681565b348015610a6a57600080fd5b506103e6610a7936600461577d565b60036020526000908152604090205481565b348015610a9757600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103e6565b348015610aca57600080fd5b5061032d610ad9366004615820565b61205e565b348015610aea57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b061037c565b348015610b1d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103e6565b348015610b5057600080fd5b5061051e610b5f36600461573f565b60046020526000908152604090205460ff1681565b348015610b8057600080fd5b5061032d610b8f366004615695565b612123565b348015610ba057600080fd5b50610ba9612575565b604051610391939291906158aa565b348015610bc457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103e6565b348015610bf757600080fd5b5061051e610c0636600461573f565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610c4757610c47615625565b14610c7e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610cd1576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d08367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610d1f610d1a368690038601866158fe565b6125d5565b14610d56576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610d6b92919061598b565b604051809103902014610daa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610df3610dee84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263192505050565b61269e565b90506000610e1a82600881518110610e0d57610e0d61599b565b6020026020010151612854565b9050602081511115610e58576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610ecd576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610f6857610f68615625565b14610f9f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610fb457610fb461599b565b906000526020600020906005020190506000610fcf84611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015611038576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611081576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561109e57508515155b15611139578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110d157816110ed565b600186015473ffffffffffffffffffffffffffffffffffffffff165b90506110f98187612908565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff1660608301526111dc576fffffffffffffffffffffffffffffffff60408201526001815260008690036111dc578195505b600086826020015163ffffffff166111f491906159f9565b905060008382116112055781611207565b835b602084015190915063ffffffff165b818110156113535760008682815481106112325761123261599b565b6000918252602080832090910154808352600690915260409091205490915060ff1661128a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061129f5761129f61599b565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112fc5750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b1561133e57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b5050808061134b90615a11565b915050611216565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092179091558490036115d757606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055891580156114d357506000547201000000000000000000000000000000000000900460ff165b156115485760015473ffffffffffffffffffffffffffffffffffffffff166114fb818a612908565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556115d5565b61158f73ffffffffffffffffffffffffffffffffffffffff82161561156d5781611589565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89612908565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561161057611610615625565b14611647576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166116ab576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106116d7576116d761599b565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611712576001611715565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156117c6576117c6615625565b0217905560028111156117db576117db615625565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505090565b600560205281600052604060002081815481106118a357600080fd5b90600052602060002001600091509150505481565b905090565b6118ca8383836001611abe565b505050565b6000818152600760209081526040808320600590925282208054825461190090610100900463ffffffff1682615a49565b95945050505050565b60606118b860546020612a09565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054908290559081900361197c576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a7e576040519150601f19603f3d011682016040523d82523d6000602084013e611a83565b606091505b50509050806118ca576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8161480611b3757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b611b6d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7984848484612a5b565b50505050565b6118ca8383836000611abe565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614611bfb576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c036133fc565b565b600080600054700100000000000000000000000000000000900460ff166002811115611c3357611c33615625565b14611c6a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110611c7f57611c7f61599b565b600091825260208220600590910201805490925063ffffffff90811614611cee57815460028054909163ffffffff16908110611cbd57611cbd61599b565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611d2690700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611d3a9067ffffffffffffffff1642615a49565b611d59611d19846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611d6d91906159f9565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611611dba5780611900565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080611e83836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115611ee2576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000611efd8383615a8f565b9050670de0b6b3a76400006000611f34827f0000000000000000000000000000000000000000000000000000000000000008615aa3565b90506000611f52611f4d670de0b6b3a764000086615aa3565b613955565b90506000611f608484613bb0565b90506000611f6e8383613bff565b90506000611f7b82613c2d565b90506000611f9a82611f95670de0b6b3a76400008f615aa3565b613e15565b90506000611fa88b83613bff565b9050611fb4818d615aa3565b9f9e505050505050505050505050505050565b60028181548110611fd757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614806120d757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b61210d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211b868686868686613e4f565b505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214f5761214f615625565b14612186576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806121958661447e565b935093509350935060006121ab85858585614887565b905060007f000000000000000000000000477508a9612b67709caf812d4356d531ba6a471d73ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190615ae0565b9050600189036123365773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8461229a367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615afd565b506115d7565b600289036123625773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848961229a565b6003890361238e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848761229a565b600489036124aa5760006123d46fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614941565b6009546123e191906159f9565b6123ec9060016159f9565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561247f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a39190615afd565b50506115d7565b60058903612543576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122ed565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606125ce611909565b9050909192565b60008160000151826020015183604001518460600151604051602001612614949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612680576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006126ae856149ef565b9194509250905060018160018111156126c9576126c9615625565b14612700576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845161270c83856159f9565b14612743576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161275a5790505093506000835b8651811015612848576000806127cd6040518060400160405280858c600001516127b19190615a49565b8152602001858c602001516127c691906159f9565b90526149ef565b5091509150604051806040016040528083836127e991906159f9565b8152602001848b602001516127fe91906159f9565b8152508885815181106128135761281361599b565b60209081029190910101526128296001856159f9565b935061283581836159f9565b61283f90846159f9565b92505050612787565b50845250919392505050565b60606000806000612864856149ef565b91945092509050600081600181111561287f5761287f615625565b146128b6576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082846159f9565b8551146128f9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190085602001518484614e8d565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff909316928392906129579084906159f9565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b1580156129ec57600080fd5b505af1158015612a00573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054700100000000000000000000000000000000900460ff166002811115612a8757612a87615625565b14612abe576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110612ad357612ad361599b565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514612bba576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000612c7a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612cb55750612cb27f000000000000000000000000000000000000000000000000000000000000000460026159f9565b81145b8015612cbf575084155b15612cf6576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d1c575086155b15612d53576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115612dad576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd87f000000000000000000000000000000000000000000000000000000000000000460016159f9565b8103612dea57612dea86888588614f22565b34612df483611de4565b14612e2b576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e3688611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603612e9e576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016612efe9190615b16565b67ffffffffffffffff16612f198267ffffffffffffffff1690565b67ffffffffffffffff161115612ffb576000612f5660017f0000000000000000000000000000000000000000000000000000000000000004615a49565b8314612f8c5767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612fc1565b612fc17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615b3f565b9050612ff7817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff16615b16565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615613079576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b8152602001908152602001600020600160028054905061330f9190615a49565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b1580156133a757600080fd5b505af11580156133bb573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b60005471010000000000000000000000000000000000900460ff161561344e576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000001166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa158015613502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135269190615b6f565b909250905081613562576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461359557639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401351161362f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b15801561390457600080fd5b505af1158015613918573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136139b457631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613bed57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613c1d5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613c5b57919050565b680755bf798b4a1bf1e58212613c795763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613e46670de0b6b3a764000083613e2d86613955565b613e379190615b93565b613e419190615c4f565b613c2d565b90505b92915050565b60008054700100000000000000000000000000000000900460ff166002811115613e7b57613e7b615625565b14613eb2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110613ec757613ec761599b565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050613f267f000000000000000000000000000000000000000000000000000000000000000860016159f9565b613fc2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614613ffc576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156140f35761404f7f00000000000000000000000000000000000000000000000000000000000000047f0000000000000000000000000000000000000000000000000000000000000008615a49565b6001901b61406e846fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1661408a9190615cb7565b156140c7576140be6140af60016fffffffffffffffffffffffffffffffff8716615ccb565b865463ffffffff166000615172565b600301546140e9565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061411d565b6003850154915061411a6140af6fffffffffffffffffffffffffffffffff86166001615cf4565b90505b600882901b60088a8a60405161413492919061598b565b6040518091039020901b14614175576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141808c615256565b9050600061418f836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000477508a9612b67709caf812d4356d531ba6a471d73ffffffffffffffffffffffffffffffffffffffff169063e14ced3290614209908f908f908f908f908a90600401615d71565b6020604051808303816000875af1158015614228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424c9190615afd565b6004850154911491506000906002906142f7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614393896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61439d9190615dab565b6143a79190615dce565b60ff1615905081151581036143e8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff161561443f576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061449e5761449e61599b565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000490614575906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145af576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000490614676906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146eb57825463ffffffff166146b57f000000000000000000000000000000000000000000000000000000000000000460016159f9565b83036146bf578391505b600281815481106146d2576146d261599b565b90600052602060002090600502019350809450506145b3565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661475461473f856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561482357600061478c836fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1611156147f75760006147ce6147c660016fffffffffffffffffffffffffffffffff8616615ccb565b896001615172565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506147fd9050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614879565b60006148456147c66fffffffffffffffffffffffffffffffff85166001615cf4565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156148f45760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611900565b82826040516020016149229291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b6000806149ce847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614a32576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614a57576000600160009450945094505050614e86565b60b78111614b6d576000614a6c608083615a49565b905080876000015111614aab576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614b2357507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614b5a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614e86915050565b60bf8111614ccb576000614b8260b783615a49565b905080876000015111614bc1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614c23576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614c6b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614c7581846159f9565b895111614cae576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614cb98360016159f9565b9750955060009450614e869350505050565b60f78111614d30576000614ce060c083615a49565b905080876000015111614d1f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614e86915050565b6000614d3d60f783615a49565b905080876000015111614d7c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614dde576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614e26576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e3081846159f9565b895111614e69576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e748360016159f9565b9750955060019450614e869350505050565b9193909250565b60608167ffffffffffffffff811115614ea857614ea86158cf565b6040519080825280601f01601f191660200182016040528015614ed2576020820181803683370190505b5090508115614f1b576000614ee784866159f9565b90506020820160005b84811015614f08578281015182820152602001614ef0565b84811115614f17576000858301525b5050505b9392505050565b6000614f416fffffffffffffffffffffffffffffffff84166001615cf4565b90506000614f5182866001615172565b9050600086901a838061503d5750614f8a60027f0000000000000000000000000000000000000000000000000000000000000004615cb7565b600483015460029061502e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6150389190615dce565b60ff16145b156150955760ff811660011480615057575060ff81166002145b615090576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b612a00565b60ff811615612a00576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b600080615160837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826151bb576151b66fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000004615285565b6151d6565b6151d6856fffffffffffffffffffffffffffffffff16615411565b9050600284815481106151eb576151eb61599b565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461524e57815460028054909163ffffffff169081106152395761523961599b565b906000526020600020906005020191506151fc565b509392505050565b60008060008060006152678661447e565b935093509350935061527b84848484614887565b9695505050505050565b600081615324846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161533a5763b34b5c226000526004601cfd5b61534383615411565b9050816153e2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613e4957613e466153f88360016159f9565b6fffffffffffffffffffffffffffffffff8316906154b6565b600081196001830116816154a5827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615543847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261557157600080fd5b50813567ffffffffffffffff81111561558957600080fd5b6020830191508360208285010111156155a157600080fd5b9250929050565b600080600083850360a08112156155be57600080fd5b60808112156155cc57600080fd5b50839250608084013567ffffffffffffffff8111156155ea57600080fd5b6155f68682870161555f565b9497909650939450505050565b6000806040838503121561561657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061568f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806000606084860312156156aa57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b818110156156e7576020818501810151868301820152016156cb565b818111156156f9576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613e4660208301846156c1565b60006020828403121561575157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461577a57600080fd5b50565b60006020828403121561578f57600080fd5b8135614f1b81615758565b803580151581146157aa57600080fd5b919050565b600080600080608085870312156157c557600080fd5b8435935060208501359250604085013591506157e36060860161579a565b905092959194509250565b60006020828403121561580057600080fd5b81356fffffffffffffffffffffffffffffffff81168114614f1b57600080fd5b6000806000806000806080878903121561583957600080fd5b863595506158496020880161579a565b9450604087013567ffffffffffffffff8082111561586657600080fd5b6158728a838b0161555f565b9096509450606089013591508082111561588b57600080fd5b5061589889828a0161555f565b979a9699509497509295939492505050565b63ffffffff8416815282602082015260606040820152600061190060608301846156c1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561591057600080fd5b6040516080810181811067ffffffffffffffff8211171561595a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615a0c57615a0c6159ca565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a4257615a426159ca565b5060010190565b600082821015615a5b57615a5b6159ca565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a9e57615a9e615a60565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615adb57615adb6159ca565b500290565b600060208284031215615af257600080fd5b8151614f1b81615758565b600060208284031215615b0f57600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015615b3757615b376159ca565b039392505050565b600067ffffffffffffffff80831681851681830481118215151615615b6657615b666159ca565b02949350505050565b60008060408385031215615b8257600080fd5b505080516020909101519092909150565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd457615bd46159ca565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0f57615c0f6159ca565b60008712925087820587128484161615615c2b57615c2b6159ca565b87850587128184161615615c4157615c416159ca565b505050929093029392505050565b600082615c5e57615c5e615a60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615cb257615cb26159ca565b500590565b600082615cc657615cc6615a60565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015615b3757615b376159ca565b60006fffffffffffffffffffffffffffffffff808316818516808303821115615d1f57615d1f6159ca565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615d85606083018789615d28565b8281036020840152615d98818688615d28565b9150508260408301529695505050505050565b600060ff821660ff841680821015615dc557615dc56159ca565b90039392505050565b600060ff831680615de157615de1615a60565b8060ff8416069150509291505056fea164736f6c634300080f000a"; + hex"6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b94578063fa315aa914610bb8578063fe2bbeb214610beb57600080fd5b8063ec5e630814610b11578063eff0f59214610b44578063f8f43ff614610b7457600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a8b578063d8cc1a3c14610abe578063dabd396d14610ade57600080fd5b8063c6f0308c146109b3578063cf09e0d014610a3d578063d5d44d8014610a5e57600080fd5b8063a445ece611610143578063bcef3b551161011d578063bcef3b5514610933578063bd8da95614610973578063c395e1ca1461099357600080fd5b8063a445ece6146107f3578063a8e4fb90146108bf578063bbdc02db146108f257600080fd5b80638980e0cc116101745780638980e0cc1461076b5780638b85902b146107805780638d450a95146107c057600080fd5b806370872aa51461073b5780637b0f0adc146107505780638129fc1c1461076357600080fd5b80633fc8cef31161025e5780635c0cba33116102075780636361506d116101e15780636361506d146106b55780636b6716c0146106f55780636f0344091461072857600080fd5b80635c0cba331461064d578063609d33341461068057806360e274641461069557600080fd5b806354fd4d501161023857806354fd4d50146105a757806357da950e146105fd5780635a5fa2d91461062d57600080fd5b80633fc8cef31461052e578063472777c614610561578063534db0e21461057457600080fd5b80632810e1d6116102c057806337b1b2291161029a57806337b1b2291461047b5780633a768463146104bb5780633e3ac912146104ee57600080fd5b80632810e1d6146103f45780632ad69aeb1461040957806330dbe5701461042957600080fd5b806319effeb4116102f157806319effeb41461034f578063200d2ed21461039a57806325fc2ace146103d557600080fd5b8063019351301461030d57806303c2924d1461032f575b600080fd5b34801561031957600080fd5b5061032d6103283660046155a8565b610c1b565b005b34801561033b57600080fd5b5061032d61034a366004615603565b610f3c565b34801561035b57600080fd5b5060005461037c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103a657600080fd5b506000546103c890700100000000000000000000000000000000900460ff1681565b6040516103919190615654565b3480156103e157600080fd5b506008545b604051908152602001610391565b34801561040057600080fd5b506103c86115e2565b34801561041557600080fd5b506103e6610424366004615603565b611887565b34801561043557600080fd5b506001546104569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610391565b34801561048757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610456565b3480156104c757600080fd5b507f00000000000000000000000049e77cde01ffbab1266813b9a2faadc1b757f435610456565b3480156104fa57600080fd5b5060005461051e907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610391565b34801561053a57600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610456565b61032d61056f366004615695565b6118bd565b34801561058057600080fd5b507f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63610456565b3480156105b357600080fd5b506105f06040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b604051610391919061572c565b34801561060957600080fd5b50600854600954610618919082565b60408051928352602083019190915201610391565b34801561063957600080fd5b506103e661064836600461573f565b6118cf565b34801561065957600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610456565b34801561068c57600080fd5b506105f0611909565b3480156106a157600080fd5b5061032d6106b036600461577d565b611917565b3480156106c157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103e6565b34801561070157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b61032d6107363660046157af565b611abe565b34801561074757600080fd5b506009546103e6565b61032d61075e366004615695565b611b7f565b61032d611b8c565b34801561077757600080fd5b506002546103e6565b34801561078c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103e6565b3480156107cc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b3480156107ff57600080fd5b5061086b61080e36600461573f565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff166060820152608001610391565b3480156108cb57600080fd5b507f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8610456565b3480156108fe57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000001168152602001610391565b34801561093f57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103e6565b34801561097f57600080fd5b5061037c61098e36600461573f565b611c05565b34801561099f57600080fd5b506103e66109ae3660046157ee565b611de4565b3480156109bf57600080fd5b506109d36109ce36600461573f565b611fc7565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610391565b348015610a4957600080fd5b5060005461037c9067ffffffffffffffff1681565b348015610a6a57600080fd5b506103e6610a7936600461577d565b60036020526000908152604090205481565b348015610a9757600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103e6565b348015610aca57600080fd5b5061032d610ad9366004615820565b61205e565b348015610aea57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b061037c565b348015610b1d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103e6565b348015610b5057600080fd5b5061051e610b5f36600461573f565b60046020526000908152604090205460ff1681565b348015610b8057600080fd5b5061032d610b8f366004615695565b612123565b348015610ba057600080fd5b50610ba9612575565b604051610391939291906158aa565b348015610bc457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103e6565b348015610bf757600080fd5b5061051e610c0636600461573f565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610c4757610c47615625565b14610c7e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610cd1576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d08367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610d1f610d1a368690038601866158fe565b6125d5565b14610d56576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610d6b92919061598b565b604051809103902014610daa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610df3610dee84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263192505050565b61269e565b90506000610e1a82600881518110610e0d57610e0d61599b565b6020026020010151612854565b9050602081511115610e58576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610ecd576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610f6857610f68615625565b14610f9f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610fb457610fb461599b565b906000526020600020906005020190506000610fcf84611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015611038576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611081576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561109e57508515155b15611139578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110d157816110ed565b600186015473ffffffffffffffffffffffffffffffffffffffff165b90506110f98187612908565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff1660608301526111dc576fffffffffffffffffffffffffffffffff60408201526001815260008690036111dc578195505b600086826020015163ffffffff166111f491906159f9565b905060008382116112055781611207565b835b602084015190915063ffffffff165b818110156113535760008682815481106112325761123261599b565b6000918252602080832090910154808352600690915260409091205490915060ff1661128a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061129f5761129f61599b565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112fc5750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b1561133e57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b5050808061134b90615a11565b915050611216565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092179091558490036115d757606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055891580156114d357506000547201000000000000000000000000000000000000900460ff165b156115485760015473ffffffffffffffffffffffffffffffffffffffff166114fb818a612908565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556115d5565b61158f73ffffffffffffffffffffffffffffffffffffffff82161561156d5781611589565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89612908565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561161057611610615625565b14611647576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166116ab576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106116d7576116d761599b565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611712576001611715565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156117c6576117c6615625565b0217905560028111156117db576117db615625565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505090565b600560205281600052604060002081815481106118a357600080fd5b90600052602060002001600091509150505481565b905090565b6118ca8383836001611abe565b505050565b6000818152600760209081526040808320600590925282208054825461190090610100900463ffffffff1682615a49565b95945050505050565b60606118b860546020612a09565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054908290559081900361197c576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a7e576040519150601f19603f3d011682016040523d82523d6000602084013e611a83565b606091505b50509050806118ca576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8161480611b3757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b611b6d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7984848484612a5b565b50505050565b6118ca8383836000611abe565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614611bfb576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c036133fc565b565b600080600054700100000000000000000000000000000000900460ff166002811115611c3357611c33615625565b14611c6a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110611c7f57611c7f61599b565b600091825260208220600590910201805490925063ffffffff90811614611cee57815460028054909163ffffffff16908110611cbd57611cbd61599b565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611d2690700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611d3a9067ffffffffffffffff1642615a49565b611d59611d19846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611d6d91906159f9565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611611dba5780611900565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080611e83836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115611ee2576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000611efd8383615a8f565b9050670de0b6b3a76400006000611f34827f0000000000000000000000000000000000000000000000000000000000000008615aa3565b90506000611f52611f4d670de0b6b3a764000086615aa3565b613955565b90506000611f608484613bb0565b90506000611f6e8383613bff565b90506000611f7b82613c2d565b90506000611f9a82611f95670de0b6b3a76400008f615aa3565b613e15565b90506000611fa88b83613bff565b9050611fb4818d615aa3565b9f9e505050505050505050505050505050565b60028181548110611fd757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614806120d757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b61210d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211b868686868686613e4f565b505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214f5761214f615625565b14612186576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806121958661447e565b935093509350935060006121ab85858585614887565b905060007f00000000000000000000000049e77cde01ffbab1266813b9a2faadc1b757f43573ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190615ae0565b9050600189036123365773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8461229a367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615afd565b506115d7565b600289036123625773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848961229a565b6003890361238e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848761229a565b600489036124aa5760006123d46fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614941565b6009546123e191906159f9565b6123ec9060016159f9565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561247f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a39190615afd565b50506115d7565b60058903612543576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122ed565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606125ce611909565b9050909192565b60008160000151826020015183604001518460600151604051602001612614949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612680576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006126ae856149ef565b9194509250905060018160018111156126c9576126c9615625565b14612700576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845161270c83856159f9565b14612743576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161275a5790505093506000835b8651811015612848576000806127cd6040518060400160405280858c600001516127b19190615a49565b8152602001858c602001516127c691906159f9565b90526149ef565b5091509150604051806040016040528083836127e991906159f9565b8152602001848b602001516127fe91906159f9565b8152508885815181106128135761281361599b565b60209081029190910101526128296001856159f9565b935061283581836159f9565b61283f90846159f9565b92505050612787565b50845250919392505050565b60606000806000612864856149ef565b91945092509050600081600181111561287f5761287f615625565b146128b6576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082846159f9565b8551146128f9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190085602001518484614e8d565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff909316928392906129579084906159f9565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b1580156129ec57600080fd5b505af1158015612a00573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054700100000000000000000000000000000000900460ff166002811115612a8757612a87615625565b14612abe576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110612ad357612ad361599b565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514612bba576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000612c7a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612cb55750612cb27f000000000000000000000000000000000000000000000000000000000000000460026159f9565b81145b8015612cbf575084155b15612cf6576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d1c575086155b15612d53576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115612dad576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd87f000000000000000000000000000000000000000000000000000000000000000460016159f9565b8103612dea57612dea86888588614f22565b34612df483611de4565b14612e2b576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e3688611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603612e9e576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016612efe9190615b16565b67ffffffffffffffff16612f198267ffffffffffffffff1690565b67ffffffffffffffff161115612ffb576000612f5660017f0000000000000000000000000000000000000000000000000000000000000004615a49565b8314612f8c5767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612fc1565b612fc17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615b3f565b9050612ff7817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff16615b16565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615613079576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b8152602001908152602001600020600160028054905061330f9190615a49565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b1580156133a757600080fd5b505af11580156133bb573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b60005471010000000000000000000000000000000000900460ff161561344e576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000001166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa158015613502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135269190615b6f565b909250905081613562576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461359557639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401351161362f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b15801561390457600080fd5b505af1158015613918573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136139b457631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613bed57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613c1d5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613c5b57919050565b680755bf798b4a1bf1e58212613c795763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613e46670de0b6b3a764000083613e2d86613955565b613e379190615b93565b613e419190615c4f565b613c2d565b90505b92915050565b60008054700100000000000000000000000000000000900460ff166002811115613e7b57613e7b615625565b14613eb2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110613ec757613ec761599b565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050613f267f000000000000000000000000000000000000000000000000000000000000000860016159f9565b613fc2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614613ffc576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156140f35761404f7f00000000000000000000000000000000000000000000000000000000000000047f0000000000000000000000000000000000000000000000000000000000000008615a49565b6001901b61406e846fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1661408a9190615cb7565b156140c7576140be6140af60016fffffffffffffffffffffffffffffffff8716615ccb565b865463ffffffff166000615172565b600301546140e9565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061411d565b6003850154915061411a6140af6fffffffffffffffffffffffffffffffff86166001615cf4565b90505b600882901b60088a8a60405161413492919061598b565b6040518091039020901b14614175576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141808c615256565b9050600061418f836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f00000000000000000000000049e77cde01ffbab1266813b9a2faadc1b757f43573ffffffffffffffffffffffffffffffffffffffff169063e14ced3290614209908f908f908f908f908a90600401615d71565b6020604051808303816000875af1158015614228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424c9190615afd565b6004850154911491506000906002906142f7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614393896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61439d9190615dab565b6143a79190615dce565b60ff1615905081151581036143e8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff161561443f576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061449e5761449e61599b565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000490614575906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145af576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000490614676906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146eb57825463ffffffff166146b57f000000000000000000000000000000000000000000000000000000000000000460016159f9565b83036146bf578391505b600281815481106146d2576146d261599b565b90600052602060002090600502019350809450506145b3565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661475461473f856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561482357600061478c836fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1611156147f75760006147ce6147c660016fffffffffffffffffffffffffffffffff8616615ccb565b896001615172565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506147fd9050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614879565b60006148456147c66fffffffffffffffffffffffffffffffff85166001615cf4565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156148f45760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611900565b82826040516020016149229291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b6000806149ce847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614a32576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614a57576000600160009450945094505050614e86565b60b78111614b6d576000614a6c608083615a49565b905080876000015111614aab576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614b2357507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614b5a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614e86915050565b60bf8111614ccb576000614b8260b783615a49565b905080876000015111614bc1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614c23576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614c6b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614c7581846159f9565b895111614cae576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614cb98360016159f9565b9750955060009450614e869350505050565b60f78111614d30576000614ce060c083615a49565b905080876000015111614d1f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614e86915050565b6000614d3d60f783615a49565b905080876000015111614d7c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614dde576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614e26576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e3081846159f9565b895111614e69576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e748360016159f9565b9750955060019450614e869350505050565b9193909250565b60608167ffffffffffffffff811115614ea857614ea86158cf565b6040519080825280601f01601f191660200182016040528015614ed2576020820181803683370190505b5090508115614f1b576000614ee784866159f9565b90506020820160005b84811015614f08578281015182820152602001614ef0565b84811115614f17576000858301525b5050505b9392505050565b6000614f416fffffffffffffffffffffffffffffffff84166001615cf4565b90506000614f5182866001615172565b9050600086901a838061503d5750614f8a60027f0000000000000000000000000000000000000000000000000000000000000004615cb7565b600483015460029061502e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6150389190615dce565b60ff16145b156150955760ff811660011480615057575060ff81166002145b615090576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b612a00565b60ff811615612a00576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b600080615160837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826151bb576151b66fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000004615285565b6151d6565b6151d6856fffffffffffffffffffffffffffffffff16615411565b9050600284815481106151eb576151eb61599b565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461524e57815460028054909163ffffffff169081106152395761523961599b565b906000526020600020906005020191506151fc565b509392505050565b60008060008060006152678661447e565b935093509350935061527b84848484614887565b9695505050505050565b600081615324846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161533a5763b34b5c226000526004601cfd5b61534383615411565b9050816153e2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613e4957613e466153f88360016159f9565b6fffffffffffffffffffffffffffffffff8316906154b6565b600081196001830116816154a5827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615543847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261557157600080fd5b50813567ffffffffffffffff81111561558957600080fd5b6020830191508360208285010111156155a157600080fd5b9250929050565b600080600083850360a08112156155be57600080fd5b60808112156155cc57600080fd5b50839250608084013567ffffffffffffffff8111156155ea57600080fd5b6155f68682870161555f565b9497909650939450505050565b6000806040838503121561561657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061568f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806000606084860312156156aa57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b818110156156e7576020818501810151868301820152016156cb565b818111156156f9576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613e4660208301846156c1565b60006020828403121561575157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461577a57600080fd5b50565b60006020828403121561578f57600080fd5b8135614f1b81615758565b803580151581146157aa57600080fd5b919050565b600080600080608085870312156157c557600080fd5b8435935060208501359250604085013591506157e36060860161579a565b905092959194509250565b60006020828403121561580057600080fd5b81356fffffffffffffffffffffffffffffffff81168114614f1b57600080fd5b6000806000806000806080878903121561583957600080fd5b863595506158496020880161579a565b9450604087013567ffffffffffffffff8082111561586657600080fd5b6158728a838b0161555f565b9096509450606089013591508082111561588b57600080fd5b5061589889828a0161555f565b979a9699509497509295939492505050565b63ffffffff8416815282602082015260606040820152600061190060608301846156c1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561591057600080fd5b6040516080810181811067ffffffffffffffff8211171561595a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615a0c57615a0c6159ca565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a4257615a426159ca565b5060010190565b600082821015615a5b57615a5b6159ca565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a9e57615a9e615a60565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615adb57615adb6159ca565b500290565b600060208284031215615af257600080fd5b8151614f1b81615758565b600060208284031215615b0f57600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015615b3757615b376159ca565b039392505050565b600067ffffffffffffffff80831681851681830481118215151615615b6657615b666159ca565b02949350505050565b60008060408385031215615b8257600080fd5b505080516020909101519092909150565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd457615bd46159ca565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0f57615c0f6159ca565b60008712925087820587128484161615615c2b57615c2b6159ca565b87850587128184161615615c4157615c416159ca565b505050929093029392505050565b600082615c5e57615c5e615a60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615cb257615cb26159ca565b500590565b600082615cc657615cc6615a60565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015615b3757615b376159ca565b60006fffffffffffffffffffffffffffffffff808316818516808303821115615d1f57615d1f6159ca565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615d85606083018789615d28565b8281036020840152615d98818688615d28565b9150508260408301529695505050505050565b600060ff821660ff841680821015615dc557615dc56159ca565b90039392505050565b600060ff831680615de157615de1615a60565b8060ff8416069150509291505056fea164736f6c634300080f000a"; } From 9be205d3eedb8b43c9998adcd9d014b7a0a5a4ee Mon Sep 17 00:00:00 2001 From: Maurelian Date: Thu, 20 Jun 2024 17:24:37 -0400 Subject: [PATCH 082/141] ctb: Ensure equal number of Guardian and DG authed specs (#10955) --- packages/contracts-bedrock/test/Specs.t.sol | 34 ++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/packages/contracts-bedrock/test/Specs.t.sol b/packages/contracts-bedrock/test/Specs.t.sol index ba38408595f1..4f495ebd07e5 100644 --- a/packages/contracts-bedrock/test/Specs.t.sol +++ b/packages/contracts-bedrock/test/Specs.t.sol @@ -50,6 +50,7 @@ contract Specification_Test is CommonTest { } mapping(string => mapping(bytes4 => Spec)) specs; + mapping(Role => Spec[]) public specsByRole; mapping(string => uint256) public numEntries; uint256 numSpecs; @@ -833,8 +834,10 @@ contract Specification_Test is CommonTest { /// @dev Adds a spec for a function. function _addSpec(string memory _name, bytes4 _sel, Role _auth, bool _pausable) internal { - specs[_name][_sel] = Spec({ name: _name, sel: _sel, auth: _auth, pausable: _pausable }); + Spec memory spec = Spec({ name: _name, sel: _sel, auth: _auth, pausable: _pausable }); + specs[_name][_sel] = spec; numEntries[_name]++; + specsByRole[_auth].push(spec); numSpecs++; } @@ -894,4 +897,33 @@ contract Specification_Test is CommonTest { } assertEq(numSpecs, numCheckedEntries, "Some specs were not checked"); } + + /// @dev Asserts that two roles are equal by comparing their uint256 representations. + function _assertRolesEq(Role leftRole, Role rightRole) internal pure { + assertEq(uint256(leftRole), uint256(rightRole)); + } + + /// @notice Ensures that the DeputyGuardian is authorized to take all Guardian actions. + function testDeputyGuardianAuth() public view { + assertEq(specsByRole[Role.DEPUTYGUARDIAN].length, specsByRole[Role.GUARDIAN].length); + assertEq(specsByRole[Role.DEPUTYGUARDIAN].length, 4); + + mapping(bytes4 => Spec) storage dgmFuncSpecs = specs["DeputyGuardianModule"]; + mapping(bytes4 => Spec) storage superchainConfigFuncSpecs = specs["SuperchainConfig"]; + mapping(bytes4 => Spec) storage portal2FuncSpecs = specs["OptimismPortal2"]; + + // Ensure that for each of the DeputyGuardianModule's methods there is a corresponding method on another + // system contract authed to the Guardian role. + _assertRolesEq(dgmFuncSpecs[_getSel("pause()")].auth, Role.DEPUTYGUARDIAN); + _assertRolesEq(superchainConfigFuncSpecs[_getSel("pause(string)")].auth, Role.GUARDIAN); + + _assertRolesEq(dgmFuncSpecs[_getSel("unpause()")].auth, Role.DEPUTYGUARDIAN); + _assertRolesEq(superchainConfigFuncSpecs[_getSel("unpause()")].auth, Role.GUARDIAN); + + _assertRolesEq(dgmFuncSpecs[_getSel("blacklistDisputeGame(address,address)")].auth, Role.DEPUTYGUARDIAN); + _assertRolesEq(portal2FuncSpecs[_getSel("blacklistDisputeGame(address)")].auth, Role.GUARDIAN); + + _assertRolesEq(dgmFuncSpecs[_getSel("setRespectedGameType(address,uint32)")].auth, Role.DEPUTYGUARDIAN); + _assertRolesEq(portal2FuncSpecs[_getSel("setRespectedGameType(uint32)")].auth, Role.GUARDIAN); + } } From 62527f1cf012242f07d18ae09384b3f8c3998ee6 Mon Sep 17 00:00:00 2001 From: Thebuilder <114657167+metacardBuilder@users.noreply.github.com> Date: Fri, 21 Jun 2024 06:59:51 +0800 Subject: [PATCH 083/141] postmortems: Fix L2-GETH broken link (#10966) * Fix OP-GETH broken link * use correct link * fix link --- docs/postmortems/2022-02-02-inflation-vuln.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/postmortems/2022-02-02-inflation-vuln.md b/docs/postmortems/2022-02-02-inflation-vuln.md index 11574eed70c2..a755b0fdfe38 100644 --- a/docs/postmortems/2022-02-02-inflation-vuln.md +++ b/docs/postmortems/2022-02-02-inflation-vuln.md @@ -5,7 +5,7 @@ It also details our response, lessons learned, and subsequent changes to our pro ## Incident Summary -A vulnerability in Optimism’s fork of [Geth](https://github.com/ethereum/go-ethereum) (which we refer to as [L2Geth](../../l2geth/README.md)) was reported +A vulnerability in Optimism’s fork of [Geth](https://github.com/ethereum/go-ethereum) (which we refer to as [L2Geth](https://github.com/ethereum-optimism/optimism-legacy/blob/8205f678b7b4ac4625c2afe351b9c82ffaa2e795/l2geth/README.md)) was reported to us by [Jay Freeman](https://twitter.com/saurik) (AKA saurik) on February 2nd, 2022. If exploited, this vulnerability would allow anyone to mint an unbounded amount of ETH on Optimism. @@ -133,7 +133,7 @@ the PR (36,311 lines added, 47,430 lines removed), which consumed the attention engineering team with a sense of urgency for several months. An additional factor contributing to this bug was the significant complexity of the -[L2Geth](https://github.com/ethereum-optimism/optimism/tree/master/l2geth) codebase, which is a fork +[L2Geth](https://github.com/ethereum-optimism/optimism-legacy/blob/8205f678b7b4ac4625c2afe351b9c82ffaa2e795/l2geth) codebase, which is a fork of [Geth](https://github.com/ethereum/go-ethereum). Geth itself is already a very complex codebase. The changes introduced to L2Geth in order to support the OVM made it much more complex, such that very few people properly understood how it worked. From 457f33f4fdda9373dcf2839619ebf67182ee5057 Mon Sep 17 00:00:00 2001 From: Tei Im <40449056+ImTei@users.noreply.github.com> Date: Thu, 20 Jun 2024 18:00:37 -0600 Subject: [PATCH 084/141] op-challenger: Use common.Hash type in Asterisc VMState (#10967) * Use common.Hash type in asterisc VMState * Update asterisc test state --- .../game/fault/trace/asterisc/state.go | 11 +++--- .../fault/trace/asterisc/test_data/state.json | 35 +------------------ 2 files changed, 7 insertions(+), 39 deletions(-) diff --git a/op-challenger/game/fault/trace/asterisc/state.go b/op-challenger/game/fault/trace/asterisc/state.go index b766cda6f50c..ac269d192924 100644 --- a/op-challenger/game/fault/trace/asterisc/state.go +++ b/op-challenger/game/fault/trace/asterisc/state.go @@ -7,6 +7,7 @@ import ( "github.com/ethereum-optimism/optimism/cannon/mipsevm" "github.com/ethereum-optimism/optimism/op-service/ioutil" + "github.com/ethereum/go-ethereum/common" ) var asteriscWitnessLen = 362 @@ -14,11 +15,11 @@ var asteriscWitnessLen = 362 // The state struct will be read from json. // other fields included in json are specific to FPVM implementation, and not required for trace provider. type VMState struct { - PC uint64 `json:"pc"` - Exited bool `json:"exited"` - Step uint64 `json:"step"` - Witness []byte `json:"witness"` - StateHash [32]byte `json:"stateHash"` + PC uint64 `json:"pc"` + Exited bool `json:"exited"` + Step uint64 `json:"step"` + Witness []byte `json:"witness"` + StateHash common.Hash `json:"stateHash"` } func (state *VMState) validateStateHash() error { diff --git a/op-challenger/game/fault/trace/asterisc/test_data/state.json b/op-challenger/game/fault/trace/asterisc/test_data/state.json index a1bf2e5b412e..00dfc2d666c8 100644 --- a/op-challenger/game/fault/trace/asterisc/test_data/state.json +++ b/op-challenger/game/fault/trace/asterisc/test_data/state.json @@ -3,38 +3,5 @@ "exited": false, "step": 0, "witness": "wOSi8Cm62dDmKt1OGwxlLrSznk6zE4ghp7evP1rfrXYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGCAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "stateHash": [ - 3, - 33, - 111, - 220, - 74, - 123, - 253, - 76, - 113, - 96, - 250, - 148, - 109, - 27, - 254, - 69, - 29, - 19, - 255, - 50, - 218, - 73, - 102, - 9, - 254, - 24, - 53, - 82, - 130, - 185, - 16, - 198 - ] + "stateHash": "0x03216fdc4a7bfd4c7160fa946d1bfe451d13ff32da496609fe18355282b910c6" } From 5cbd8aa04a0e710d0164d2d3dfeeac2fb27d0477 Mon Sep 17 00:00:00 2001 From: Raffaele <151576068+raffaele-oplabs@users.noreply.github.com> Date: Fri, 21 Jun 2024 17:43:49 +0200 Subject: [PATCH 085/141] fixing binary signer condition (#10970) --- .circleci/config.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 744fe623f537..dea57afdaa6c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -427,11 +427,13 @@ jobs: ./ops/scripts/ci-docker-tag-op-stack-release.sh <>/<> $CIRCLE_TAG $CIRCLE_SHA1 - when: condition: - and: - - or: + or: + - and: - "<>" - "<>" - - equal: [develop, << pipeline.git.branch >>] + - and: + - "<>" + - equal: [develop, << pipeline.git.branch >>] steps: - gcp-oidc-authenticate: service_account_email: GCP_SERVICE_ATTESTOR_ACCOUNT_EMAIL From 3068abee84648180d2521fd326adea56e842df5a Mon Sep 17 00:00:00 2001 From: smartcontracts Date: Fri, 21 Jun 2024 14:02:54 -0400 Subject: [PATCH 086/141] maint: add FP Sherlock report (#10977) --- .../2024_05-FaultProofs-Sherlock.pdf | Bin 0 -> 581753 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/security-reviews/2024_05-FaultProofs-Sherlock.pdf diff --git a/docs/security-reviews/2024_05-FaultProofs-Sherlock.pdf b/docs/security-reviews/2024_05-FaultProofs-Sherlock.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ba6da27b4b26446123f40e618a0aba5f83cf7446 GIT binary patch literal 581753 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≻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%0DZJ@IGb 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%0DH7Ca&B3? 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